summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS5
-rw-r--r--COPYING27
-rw-r--r--ChangeLog20207
-rw-r--r--Copyright27
-rw-r--r--DOCBparser.c303
-rw-r--r--HTMLparser.c5926
-rw-r--r--HTMLtree.c1177
-rw-r--r--INSTALL69
-rw-r--r--Makefile.am960
-rw-r--r--Makefile.in2147
-rw-r--r--NEWS1212
-rw-r--r--README24
-rw-r--r--SAX.c175
-rw-r--r--SAX2.c2697
-rw-r--r--TODO327
-rw-r--r--TODO_SCHEMAS31
-rw-r--r--acconfig.h17
-rw-r--r--acinclude.m428
-rw-r--r--aclocal.m46832
-rw-r--r--c14n.c1974
-rw-r--r--catalog.c3589
-rwxr-xr-xcheck-relaxng-test-suite.py394
-rwxr-xr-xcheck-relaxng-test-suite2.py418
-rwxr-xr-xcheck-xinclude-test-suite.py213
-rwxr-xr-xcheck-xml-test-suite.py409
-rwxr-xr-xcheck-xsddata-test-suite.py420
-rwxr-xr-xchvalid.c329
-rwxr-xr-xconfig.guess1388
-rw-r--r--config.h.in284
-rwxr-xr-xconfig.sub1489
-rwxr-xr-xconfigure29717
-rw-r--r--configure.in1064
-rwxr-xr-xdbgen.pl43
-rwxr-xr-xdbgenattr.pl42
-rw-r--r--debugXML.c2578
-rwxr-xr-xdepcomp423
-rw-r--r--dict.c738
-rw-r--r--doc/APIchunk0.html277
-rw-r--r--doc/APIchunk1.html357
-rw-r--r--doc/APIchunk10.html807
-rw-r--r--doc/APIchunk11.html583
-rw-r--r--doc/APIchunk12.html393
-rw-r--r--doc/APIchunk13.html394
-rw-r--r--doc/APIchunk14.html366
-rw-r--r--doc/APIchunk15.html510
-rw-r--r--doc/APIchunk16.html377
-rw-r--r--doc/APIchunk17.html311
-rw-r--r--doc/APIchunk18.html287
-rw-r--r--doc/APIchunk19.html341
-rw-r--r--doc/APIchunk2.html414
-rw-r--r--doc/APIchunk20.html508
-rw-r--r--doc/APIchunk21.html603
-rw-r--r--doc/APIchunk22.html825
-rw-r--r--doc/APIchunk23.html430
-rw-r--r--doc/APIchunk24.html462
-rw-r--r--doc/APIchunk25.html492
-rw-r--r--doc/APIchunk26.html109
-rw-r--r--doc/APIchunk3.html343
-rw-r--r--doc/APIchunk4.html330
-rw-r--r--doc/APIchunk5.html276
-rw-r--r--doc/APIchunk6.html482
-rw-r--r--doc/APIchunk7.html274
-rw-r--r--doc/APIchunk8.html683
-rw-r--r--doc/APIchunk9.html285
-rw-r--r--doc/APIconstructors.html522
-rw-r--r--doc/APIfiles.html2868
-rw-r--r--doc/APIfunctions.html2073
-rw-r--r--doc/APIsymbols.html2864
-rw-r--r--doc/DOM.gifbin0 -> 3166 bytes
-rw-r--r--doc/DOM.html17
-rw-r--r--doc/FAQ.html244
-rw-r--r--doc/Libxml2-Logo-180x168.gifbin0 -> 8195 bytes
-rw-r--r--doc/Libxml2-Logo-90x34.gifbin0 -> 3070 bytes
-rw-r--r--doc/Makefile.am108
-rw-r--r--doc/Makefile.in708
-rw-r--r--doc/README.docs24
-rw-r--r--doc/XMLinfo.html35
-rw-r--r--doc/XSLT.html14
-rw-r--r--doc/api.xsl394
-rwxr-xr-xdoc/apibuild.py1913
-rw-r--r--doc/architecture.html23
-rw-r--r--doc/bugs.html56
-rw-r--r--doc/catalog.gifbin0 -> 6105 bytes
-rw-r--r--doc/catalog.html256
-rw-r--r--doc/contribs.html39
-rw-r--r--doc/docs.html33
-rw-r--r--doc/downloads.html36
-rw-r--r--doc/encoding.html210
-rw-r--r--doc/entities.html64
-rw-r--r--doc/example.html186
-rw-r--r--doc/examples/Makefile.am93
-rw-r--r--doc/examples/Makefile.in665
-rw-r--r--doc/examples/examples.xml602
-rw-r--r--doc/examples/examples.xsl169
-rwxr-xr-xdoc/examples/index.py296
-rw-r--r--doc/examples/io1.c166
-rw-r--r--doc/examples/io1.res5
-rw-r--r--doc/examples/parse1.c56
-rw-r--r--doc/examples/parse2.c72
-rw-r--r--doc/examples/reader1.c107
-rw-r--r--doc/examples/reader1.res14
-rw-r--r--doc/examples/reader2.c122
-rw-r--r--doc/examples/reader3.c119
-rw-r--r--doc/examples/reader3.res13
-rw-r--r--doc/examples/test1.xml1
-rw-r--r--doc/examples/test2.xml13
-rw-r--r--doc/examples/test3.xml39
-rw-r--r--doc/examples/testWriter.c1198
-rw-r--r--doc/examples/tree1.c94
-rw-r--r--doc/examples/tree1.res4
-rw-r--r--doc/examples/tree2.c118
-rw-r--r--doc/examples/tree2.res18
-rw-r--r--doc/examples/writer.xml2
-rw-r--r--doc/examples/xpath1.c249
-rw-r--r--doc/guidelines.html374
-rw-r--r--doc/help.html25
-rw-r--r--doc/html/book1.html13
-rw-r--r--doc/html/home.pngbin0 -> 654 bytes
-rw-r--r--doc/html/index.html13
-rw-r--r--doc/html/left.pngbin0 -> 459 bytes
-rw-r--r--doc/html/libxml-DOCBparser.html51
-rw-r--r--doc/html/libxml-HTMLparser.html176
-rw-r--r--doc/html/libxml-HTMLtree.html70
-rw-r--r--doc/html/libxml-SAX.html125
-rw-r--r--doc/html/libxml-SAX2.html143
-rw-r--r--doc/html/libxml-c14n.html32
-rw-r--r--doc/html/libxml-catalog.html142
-rw-r--r--doc/html/libxml-chvalid.html72
-rw-r--r--doc/html/libxml-debugXML.html117
-rw-r--r--doc/html/libxml-dict.html43
-rw-r--r--doc/html/libxml-encoding.html118
-rw-r--r--doc/html/libxml-entities.html76
-rw-r--r--doc/html/libxml-globals.html125
-rw-r--r--doc/html/libxml-hash.html112
-rw-r--r--doc/html/libxml-lib.html13
-rw-r--r--doc/html/libxml-list.html120
-rw-r--r--doc/html/libxml-nanoftp.html92
-rw-r--r--doc/html/libxml-nanohttp.html62
-rw-r--r--doc/html/libxml-parser.html499
-rw-r--r--doc/html/libxml-parserInternals.html316
-rw-r--r--doc/html/libxml-pattern.html31
-rw-r--r--doc/html/libxml-relaxng.html153
-rw-r--r--doc/html/libxml-schemasInternals.html191
-rw-r--r--doc/html/libxml-threads.html69
-rw-r--r--doc/html/libxml-tree.html881
-rw-r--r--doc/html/libxml-uri.html63
-rw-r--r--doc/html/libxml-valid.html278
-rw-r--r--doc/html/libxml-xinclude.html53
-rw-r--r--doc/html/libxml-xlink.html82
-rw-r--r--doc/html/libxml-xmlIO.html197
-rw-r--r--doc/html/libxml-xmlautomata.html72
-rw-r--r--doc/html/libxml-xmlerror.html615
-rw-r--r--doc/html/libxml-xmlexports.html19
-rw-r--r--doc/html/libxml-xmlmemory.html101
-rw-r--r--doc/html/libxml-xmlreader.html283
-rw-r--r--doc/html/libxml-xmlregexp.html57
-rw-r--r--doc/html/libxml-xmlsave.html43
-rw-r--r--doc/html/libxml-xmlschemas.html125
-rw-r--r--doc/html/libxml-xmlschemastypes.html47
-rw-r--r--doc/html/libxml-xmlstring.html106
-rw-r--r--doc/html/libxml-xmlunicode.html512
-rw-r--r--doc/html/libxml-xmlversion.html51
-rw-r--r--doc/html/libxml-xmlwriter.html258
-rw-r--r--doc/html/libxml-xpath.html284
-rw-r--r--doc/html/libxml-xpathInternals.html406
-rw-r--r--doc/html/libxml-xpointer.html83
-rw-r--r--doc/html/right.pngbin0 -> 472 bytes
-rw-r--r--doc/html/up.pngbin0 -> 406 bytes
-rw-r--r--doc/index.html290
-rwxr-xr-xdoc/index.py1249
-rw-r--r--doc/interface.html59
-rw-r--r--doc/intro.html31
-rw-r--r--doc/library.html145
-rw-r--r--doc/libxml.gifbin0 -> 7692 bytes
-rw-r--r--doc/libxml2-api.xml14791
-rw-r--r--doc/libxml2.xsa39
-rw-r--r--doc/namespaces.html50
-rw-r--r--doc/newapi.xsl763
-rw-r--r--doc/news.html892
-rw-r--r--doc/news.xsl44
-rw-r--r--doc/parsers.html65
-rw-r--r--doc/python.html241
-rw-r--r--doc/redhat.gifbin0 -> 697 bytes
-rw-r--r--doc/search.php422
-rw-r--r--doc/site.xsl730
-rw-r--r--doc/smallfootonly.gifbin0 -> 2772 bytes
-rw-r--r--doc/structure.gifbin0 -> 5559 bytes
-rw-r--r--doc/threads.html27
-rw-r--r--doc/tree.html53
-rw-r--r--doc/tutorial/apa.html8
-rw-r--r--doc/tutorial/apb.html14
-rw-r--r--doc/tutorial/apc.html82
-rw-r--r--doc/tutorial/apd.html68
-rw-r--r--doc/tutorial/ape.html78
-rw-r--r--doc/tutorial/apf.html67
-rw-r--r--doc/tutorial/apg.html75
-rw-r--r--doc/tutorial/aph.html76
-rw-r--r--doc/tutorial/api.html4
-rw-r--r--doc/tutorial/ar01s02.html14
-rw-r--r--doc/tutorial/ar01s03.html47
-rw-r--r--doc/tutorial/ar01s04.html54
-rw-r--r--doc/tutorial/ar01s05.html56
-rw-r--r--doc/tutorial/ar01s06.html35
-rw-r--r--doc/tutorial/ar01s07.html30
-rw-r--r--doc/tutorial/ar01s08.html38
-rw-r--r--doc/tutorial/ar01s09.html63
-rw-r--r--doc/tutorial/images/blank.pngbin0 -> 374 bytes
-rw-r--r--doc/tutorial/images/callouts/1.pngbin0 -> 329 bytes
-rw-r--r--doc/tutorial/images/callouts/10.pngbin0 -> 361 bytes
-rw-r--r--doc/tutorial/images/callouts/2.pngbin0 -> 353 bytes
-rw-r--r--doc/tutorial/images/callouts/3.pngbin0 -> 350 bytes
-rw-r--r--doc/tutorial/images/callouts/4.pngbin0 -> 345 bytes
-rw-r--r--doc/tutorial/images/callouts/5.pngbin0 -> 348 bytes
-rw-r--r--doc/tutorial/images/callouts/6.pngbin0 -> 355 bytes
-rw-r--r--doc/tutorial/images/callouts/7.pngbin0 -> 344 bytes
-rw-r--r--doc/tutorial/images/callouts/8.pngbin0 -> 357 bytes
-rw-r--r--doc/tutorial/images/callouts/9.pngbin0 -> 357 bytes
-rw-r--r--doc/tutorial/images/caution.pngbin0 -> 1250 bytes
-rw-r--r--doc/tutorial/images/draft.pngbin0 -> 17454 bytes
-rw-r--r--doc/tutorial/images/home.pngbin0 -> 1156 bytes
-rw-r--r--doc/tutorial/images/important.pngbin0 -> 722 bytes
-rw-r--r--doc/tutorial/images/next.pngbin0 -> 1150 bytes
-rw-r--r--doc/tutorial/images/note.pngbin0 -> 490 bytes
-rw-r--r--doc/tutorial/images/prev.pngbin0 -> 1132 bytes
-rw-r--r--doc/tutorial/images/tip.pngbin0 -> 449 bytes
-rw-r--r--doc/tutorial/images/toc-blank.pngbin0 -> 318 bytes
-rw-r--r--doc/tutorial/images/toc-minus.pngbin0 -> 259 bytes
-rw-r--r--doc/tutorial/images/toc-plus.pngbin0 -> 264 bytes
-rw-r--r--doc/tutorial/images/up.pngbin0 -> 1111 bytes
-rw-r--r--doc/tutorial/images/warning.pngbin0 -> 1241 bytes
-rw-r--r--doc/tutorial/includeaddattribute.c64
-rw-r--r--doc/tutorial/includeaddkeyword.c75
-rw-r--r--doc/tutorial/includeconvert.c73
-rw-r--r--doc/tutorial/includegetattribute.c72
-rw-r--r--doc/tutorial/includekeyword.c79
-rw-r--r--doc/tutorial/includexpath.c65
-rw-r--r--doc/tutorial/index.html14
-rw-r--r--doc/tutorial/ix01.html1
-rw-r--r--doc/tutorial/xmltutorial.pdf1342
-rw-r--r--doc/upgrade.html106
-rw-r--r--doc/w3c.pngbin0 -> 2028 bytes
-rw-r--r--doc/xml.html4452
-rw-r--r--doc/xmlcatalog.1148
-rw-r--r--doc/xmlcatalog_man.html101
-rw-r--r--doc/xmlcatalog_man.xml298
-rw-r--r--doc/xmldtd.html100
-rw-r--r--doc/xmlio.html137
-rw-r--r--doc/xmllint.1281
-rw-r--r--doc/xmllint.html153
-rw-r--r--doc/xmllint.xml643
-rw-r--r--doc/xmlmem.html102
-rw-r--r--doc/xmlreader.html475
-rw-r--r--doc/xsa.xsl54
-rw-r--r--encoding.c3237
-rw-r--r--entities.c897
-rw-r--r--error.c937
-rw-r--r--example/Makefile.am10
-rw-r--r--example/Makefile.in527
-rw-r--r--example/gjobread.c307
-rw-r--r--example/gjobs.xml57
-rwxr-xr-xgenUnicode.py470
-rw-r--r--globals.c983
-rw-r--r--hash.c949
-rw-r--r--include/Makefile.am5
-rw-r--r--include/Makefile.in547
-rw-r--r--include/libxml/DOCBparser.h90
-rw-r--r--include/libxml/HTMLparser.h295
-rw-r--r--include/libxml/HTMLtree.h139
-rw-r--r--include/libxml/Makefile.am55
-rw-r--r--include/libxml/Makefile.in530
-rw-r--r--include/libxml/SAX.h165
-rw-r--r--include/libxml/SAX2.h188
-rw-r--r--include/libxml/c14n.h103
-rw-r--r--include/libxml/catalog.h181
-rw-r--r--include/libxml/chvalid.h230
-rw-r--r--include/libxml/debugXML.h196
-rw-r--r--include/libxml/dict.h58
-rw-r--r--include/libxml/encoding.h224
-rw-r--r--include/libxml/entities.h131
-rw-r--r--include/libxml/globals.h422
-rw-r--r--include/libxml/hash.h206
-rw-r--r--include/libxml/list.h137
-rw-r--r--include/libxml/nanoftp.h143
-rw-r--r--include/libxml/nanohttp.h79
-rw-r--r--include/libxml/parser.h1131
-rw-r--r--include/libxml/parserInternals.h576
-rw-r--r--include/libxml/pattern.h48
-rw-r--r--include/libxml/relaxng.h179
-rw-r--r--include/libxml/schemasInternals.h394
-rw-r--r--include/libxml/threads.h81
-rw-r--r--include/libxml/tree.h1087
-rw-r--r--include/libxml/uri.h81
-rw-r--r--include/libxml/valid.h408
-rw-r--r--include/libxml/xinclude.h116
-rw-r--r--include/libxml/xlink.h183
-rw-r--r--include/libxml/xmlIO.h335
-rw-r--r--include/libxml/xmlautomata.h117
-rw-r--r--include/libxml/xmlerror.h695
-rw-r--r--include/libxml/xmlexports.h138
-rw-r--r--include/libxml/xmlmemory.h220
-rw-r--r--include/libxml/xmlreader.h320
-rw-r--r--include/libxml/xmlregexp.h95
-rw-r--r--include/libxml/xmlsave.h61
-rw-r--r--include/libxml/xmlschemas.h125
-rw-r--r--include/libxml/xmlschemastypes.h67
-rw-r--r--include/libxml/xmlstring.h141
-rw-r--r--include/libxml/xmlunicode.h197
-rw-r--r--include/libxml/xmlversion.h347
-rw-r--r--include/libxml/xmlversion.h.in347
-rw-r--r--include/libxml/xmlwriter.h452
-rw-r--r--include/libxml/xpath.h467
-rw-r--r--include/libxml/xpathInternals.h653
-rw-r--r--include/libxml/xpointer.h109
-rw-r--r--include/win32config.h111
-rw-r--r--include/wsockcompat.h61
-rwxr-xr-xinstall-sh250
-rw-r--r--legacy.c1340
-rw-r--r--libxml-2.0-uninstalled.pc.in12
-rw-r--r--libxml-2.0.pc.in12
-rw-r--r--libxml.371
-rw-r--r--libxml.h52
-rw-r--r--libxml.m4381
-rw-r--r--libxml.spec.in175
-rw-r--r--libxml2.spec175
-rw-r--r--list.c720
-rwxr-xr-xltconfig3114
-rw-r--r--ltmain.sh6299
-rw-r--r--macos/README8
-rw-r--r--macos/libxml2.mcp.xml.sit.hqx1
-rw-r--r--macos/src/XMLTestPrefix.h1
-rw-r--r--macos/src/XMLTestPrefix2.h1
-rw-r--r--macos/src/config-mac.h201
-rw-r--r--macos/src/libxml2_GUSIConfig.cp1
-rw-r--r--macos/src/macos_main.c1
-rwxr-xr-xmissing336
-rwxr-xr-xmkinstalldirs99
-rw-r--r--nanoftp.c2276
-rw-r--r--nanohttp.c1781
-rw-r--r--parser.c12388
-rw-r--r--parserInternals.c2036
-rw-r--r--pattern.c933
-rw-r--r--python/Makefile.am73
-rw-r--r--python/Makefile.in709
-rw-r--r--python/README34
-rw-r--r--python/TODO57
-rw-r--r--python/drv_libxml2.py370
-rwxr-xr-xpython/generator.py1184
-rw-r--r--python/libxml.c3230
-rw-r--r--python/libxml.py628
-rw-r--r--python/libxml2-py.c12873
-rw-r--r--python/libxml2-python-api.xml310
-rw-r--r--python/libxml_wrap.h205
-rwxr-xr-xpython/setup.py242
-rwxr-xr-xpython/setup.py.in242
-rw-r--r--python/tests/Makefile.am60
-rw-r--r--python/tests/Makefile.in459
-rwxr-xr-xpython/tests/attribs.py34
-rwxr-xr-xpython/tests/build.py59
-rwxr-xr-xpython/tests/ctxterror.py56
-rwxr-xr-xpython/tests/cutnpaste.py48
-rwxr-xr-xpython/tests/error.py51
-rwxr-xr-xpython/tests/inbuf.py25
-rwxr-xr-xpython/tests/indexes.py113
-rw-r--r--python/tests/invalid.xml6
-rwxr-xr-xpython/tests/outbuf.py33
-rwxr-xr-xpython/tests/push.py35
-rwxr-xr-xpython/tests/pushSAX.py64
-rwxr-xr-xpython/tests/pushSAXhtml.py65
-rwxr-xr-xpython/tests/reader.py441
-rwxr-xr-xpython/tests/reader2.py256
-rwxr-xr-xpython/tests/reader3.py155
-rwxr-xr-xpython/tests/reader4.py45
-rwxr-xr-xpython/tests/reader5.py48
-rwxr-xr-xpython/tests/reader6.py123
-rwxr-xr-xpython/tests/reader7.py102
-rw-r--r--python/tests/readererr.py51
-rw-r--r--python/tests/regexp.py32
-rwxr-xr-xpython/tests/relaxng.py48
-rwxr-xr-xpython/tests/resolver.py39
-rwxr-xr-xpython/tests/serialize.py150
-rwxr-xr-xpython/tests/thread2.py96
-rwxr-xr-xpython/tests/tst.py28
-rw-r--r--python/tests/tst.xml1
-rwxr-xr-xpython/tests/tstLastError.py72
-rwxr-xr-xpython/tests/tstURI.py41
-rwxr-xr-xpython/tests/tstxpath.py63
-rw-r--r--python/tests/valid.xml4
-rwxr-xr-xpython/tests/validate.py82
-rwxr-xr-xpython/tests/walker.py145
-rwxr-xr-xpython/tests/xpath.py51
-rwxr-xr-xpython/tests/xpathext.py49
-rwxr-xr-xpython/tests/xpathret.py57
-rw-r--r--python/types.c661
-rw-r--r--relaxng.c10672
-rw-r--r--result/DocBook/abbrev.example.16
-rw-r--r--result/DocBook/abbrev.example.1.xml6
-rw-r--r--result/DocBook/abstract.example.17
-rw-r--r--result/DocBook/abstract.example.1.xml7
-rw-r--r--result/DocBook/accel.example.18
-rw-r--r--result/DocBook/accel.example.1.xml8
-rw-r--r--result/DocBook/ackno.example.17
-rw-r--r--result/DocBook/ackno.example.1.xml7
-rw-r--r--result/DocBook/acronym.example.16
-rw-r--r--result/DocBook/acronym.example.1.xml6
-rw-r--r--result/DocBook/action.example.16
-rw-r--r--result/DocBook/action.example.1.xml6
-rw-r--r--result/DocBook/address.example.17
-rw-r--r--result/DocBook/address.example.1.xml7
-rw-r--r--result/DocBook/anchor.example.17
-rw-r--r--result/DocBook/anchor.example.1.xml7
-rw-r--r--result/DocBook/appendix.example.18
-rw-r--r--result/DocBook/appendix.example.1.xml8
-rw-r--r--result/DocBook/application.example.15
-rw-r--r--result/DocBook/application.example.1.xml5
-rw-r--r--result/DocBook/article.example.15
-rw-r--r--result/DocBook/article.example.1.xml5
-rw-r--r--result/DocBook/attribution.example.16
-rw-r--r--result/DocBook/attribution.example.1.xml6
-rw-r--r--result/DocBook/audioobject.example.13
-rw-r--r--result/DocBook/audioobject.example.1.xml3
-rw-r--r--result/DocBook/author.example.13
-rw-r--r--result/DocBook/author.example.1.xml3
-rw-r--r--result/DocBook/authorgroup.example.16
-rw-r--r--result/DocBook/authorgroup.example.1.xml6
-rw-r--r--result/DocBook/bibliography.example.13
-rw-r--r--result/DocBook/bibliography.example.1.xml3
-rw-r--r--result/DocBook/bibliography.example.29
-rw-r--r--result/DocBook/bibliography.example.2.xml9
-rw-r--r--result/DocBook/bibliomset.example.19
-rw-r--r--result/DocBook/bibliomset.example.1.xml9
-rw-r--r--result/DocBook/biblioset.example.13
-rw-r--r--result/DocBook/biblioset.example.1.xml3
-rw-r--r--result/DocBook/blockquote.example.17
-rw-r--r--result/DocBook/blockquote.example.1.xml7
-rw-r--r--result/DocBook/book.example.111
-rw-r--r--result/DocBook/book.example.1.xml11
-rw-r--r--result/DocBook/bookinfo.example.115
-rw-r--r--result/DocBook/bookinfo.example.1.xml15
-rw-r--r--result/DocBook/caution.example.15
-rw-r--r--result/DocBook/caution.example.1.xml5
-rw-r--r--result/DocBook/chapter.example.113
-rw-r--r--result/DocBook/chapter.example.1.xml13
-rw-r--r--result/DocBook/citation.example.16
-rw-r--r--result/DocBook/citation.example.1.xml6
-rw-r--r--result/DocBook/citerefentry.example.16
-rw-r--r--result/DocBook/citerefentry.example.1.xml6
-rw-r--r--result/DocBook/citetitle.example.17
-rw-r--r--result/DocBook/citetitle.example.1.xml7
-rw-r--r--result/DocBook/classname.example.16
-rw-r--r--result/DocBook/classname.example.1.xml6
-rw-r--r--result/DocBook/cmdsynopsis.example.13
-rw-r--r--result/DocBook/cmdsynopsis.example.1.xml3
-rw-r--r--result/DocBook/cmdsynopsis.example.23
-rw-r--r--result/DocBook/cmdsynopsis.example.2.xml3
-rw-r--r--result/DocBook/cmdsynopsis.example.34
-rw-r--r--result/DocBook/cmdsynopsis.example.3.xml4
-rw-r--r--result/DocBook/cmdsynopsis.example.43
-rw-r--r--result/DocBook/cmdsynopsis.example.4.xml3
-rw-r--r--result/DocBook/collab.example.16
-rw-r--r--result/DocBook/collab.example.1.xml6
-rw-r--r--result/DocBook/colophon.example.17
-rw-r--r--result/DocBook/colophon.example.1.xml7
-rw-r--r--result/DocBook/command.example.16
-rw-r--r--result/DocBook/command.example.1.xml6
-rw-r--r--result/DocBook/comment.example.16
-rw-r--r--result/DocBook/comment.example.1.xml6
-rw-r--r--result/DocBook/computeroutput.example.17
-rw-r--r--result/DocBook/computeroutput.example.1.xml7
-rw-r--r--result/DocBook/confgroup.example.13
-rw-r--r--result/DocBook/confgroup.example.1.xml3
-rw-r--r--result/DocBook/constant.example.16
-rw-r--r--result/DocBook/constant.example.1.xml6
-rw-r--r--result/DocBook/constant.example.27
-rw-r--r--result/DocBook/constant.example.2.xml7
-rw-r--r--result/DocBook/contractsponsor.example.13
-rw-r--r--result/DocBook/contractsponsor.example.1.xml3
-rw-r--r--result/DocBook/copyright.example.13
-rw-r--r--result/DocBook/copyright.example.1.xml3
-rw-r--r--result/DocBook/database.example.17
-rw-r--r--result/DocBook/database.example.1.xml7
-rw-r--r--result/DocBook/emphasis.example.17
-rw-r--r--result/DocBook/emphasis.example.1.xml7
-rw-r--r--result/DocBook/entrytbl.example.14
-rw-r--r--result/DocBook/entrytbl.example.1.xml4
-rw-r--r--result/DocBook/envar.example.17
-rw-r--r--result/DocBook/envar.example.1.xml7
-rw-r--r--result/DocBook/equation.example.13
-rw-r--r--result/DocBook/equation.example.1.xml3
-rw-r--r--result/DocBook/errorcode.example.18
-rw-r--r--result/DocBook/errorcode.example.1.xml8
-rw-r--r--result/DocBook/errorcode.example.29
-rw-r--r--result/DocBook/errorcode.example.2.xml9
-rw-r--r--result/DocBook/example.example.114
-rw-r--r--result/DocBook/example.example.1.xml14
-rw-r--r--result/DocBook/figure.example.13
-rw-r--r--result/DocBook/figure.example.1.xml3
-rw-r--r--result/DocBook/filename.example.17
-rw-r--r--result/DocBook/filename.example.1.xml7
-rw-r--r--result/DocBook/firstterm.example.17
-rw-r--r--result/DocBook/firstterm.example.1.xml7
-rw-r--r--result/DocBook/footnote.example.110
-rw-r--r--result/DocBook/footnote.example.1.xml10
-rw-r--r--result/DocBook/footnoteref.example.15
-rw-r--r--result/DocBook/footnoteref.example.1.xml5
-rw-r--r--result/DocBook/foreignphrase.example.16
-rw-r--r--result/DocBook/foreignphrase.example.1.xml6
-rw-r--r--result/DocBook/formalpara.example.16
-rw-r--r--result/DocBook/formalpara.example.1.xml6
-rw-r--r--result/DocBook/funcdef.example.13
-rw-r--r--result/DocBook/funcdef.example.1.xml3
-rw-r--r--result/DocBook/funcparams.example.13
-rw-r--r--result/DocBook/funcparams.example.1.xml3
-rw-r--r--result/DocBook/funcsynopsis.example.13
-rw-r--r--result/DocBook/funcsynopsis.example.1.xml3
-rw-r--r--result/DocBook/funcsynopsis.example.24
-rw-r--r--result/DocBook/funcsynopsis.example.2.xml4
-rw-r--r--result/DocBook/funcsynopsis.example.33
-rw-r--r--result/DocBook/funcsynopsis.example.3.xml3
-rw-r--r--result/DocBook/funcsynopsis.example.43
-rw-r--r--result/DocBook/funcsynopsis.example.4.xml3
-rw-r--r--result/DocBook/glossary.example.1.xml6
-rw-r--r--result/DocBook/glosslist.example.1.xml7
-rw-r--r--result/DocBook/graphic.example.1.xml3
-rw-r--r--result/DocBook/graphicco.example.1.xml3
-rw-r--r--result/DocBook/guibutton.example.1.xml11
-rw-r--r--result/DocBook/guiicon.example.1.xml11
-rw-r--r--result/DocBook/guilabel.example.1.xml11
-rw-r--r--result/DocBook/guimenu.example.1.xml8
-rw-r--r--result/DocBook/guimenuitem.example.1.xml8
-rw-r--r--result/DocBook/guisubmenu.example.1.xml7
-rw-r--r--result/DocBook/hardware.example.1.xml6
-rw-r--r--result/DocBook/highlights.example.1.xml11
-rw-r--r--result/DocBook/imageobject.example.1.xml5
-rw-r--r--result/DocBook/important.example.1.xml5
-rw-r--r--result/DocBook/index.example.1.xml3
-rw-r--r--result/DocBook/index.example.2.xml3
-rw-r--r--result/DocBook/indexterm.example.1.xml6
-rw-r--r--result/DocBook/indexterm.example.2.xml5
-rw-r--r--result/DocBook/indexterm.example.3.xml3
-rw-r--r--result/DocBook/informalequation.example.1.xml8
-rw-r--r--result/DocBook/informalexample.example.1.xml14
-rw-r--r--result/DocBook/informalfigure.example.1.xml5
-rw-r--r--result/DocBook/informaltable.example.1.xml3
-rw-r--r--result/DocBook/inlineequation.example.1.xml6
-rw-r--r--result/DocBook/inlinemediaobject.example.1.xml7
-rw-r--r--result/DocBook/itemizedlist.example.1.xml9
-rw-r--r--result/DocBook/keycap.example.1.xml8
-rw-r--r--result/DocBook/keycode.example.1.xml8
-rw-r--r--result/DocBook/keycombo.example.1.xml7
-rw-r--r--result/DocBook/keysym.example.1.xml8
-rw-r--r--result/DocBook/lineannotation.example.1.xml8
-rw-r--r--result/DocBook/link.example.1.xml12
-rw-r--r--result/DocBook/literal.example.1.xml7
-rw-r--r--result/DocBook/literallayout.example.1.xml8
-rw-r--r--result/DocBook/lot.example.1.xml5
-rw-r--r--result/DocBook/manvolnum.example.1.xml6
-rw-r--r--result/DocBook/markup.example.1.xml7
-rw-r--r--result/DocBook/medialabel.example.1.xml7
-rw-r--r--result/DocBook/medialabel.example.2.xml7
-rw-r--r--result/DocBook/mediaobjectco.example.1.xml3
-rw-r--r--result/DocBook/menuchoice.example.1.xml6
-rw-r--r--result/DocBook/mousebutton.example.1.xml9
-rw-r--r--result/DocBook/msgset.example.1.xml9
-rw-r--r--result/DocBook/note.example.1.xml6
-rw-r--r--result/DocBook/olink.example.1.xml8
-rw-r--r--result/DocBook/option.example.1.xml7
-rw-r--r--result/DocBook/optional.example.1.xml4
-rw-r--r--result/DocBook/orderedlist.example.1.xml3
-rw-r--r--result/DocBook/othercredit.example.1.xml4
-rw-r--r--result/DocBook/para.example.1.xml7
-rw-r--r--result/DocBook/para.example.2.xml6
-rw-r--r--result/DocBook/para.example.3.xml5
-rw-r--r--result/DocBook/paramdef.example.1.xml3
-rw-r--r--result/DocBook/parameter.example.1.xml6
-rw-r--r--result/DocBook/phrase.example.1.xml8
-rw-r--r--result/DocBook/printhistory.example.1.xml5
-rw-r--r--result/DocBook/procedure.example.1.xml11
-rw-r--r--result/DocBook/productname.example.1.xml5
-rw-r--r--result/DocBook/productname.example.2.xml5
-rw-r--r--result/DocBook/productnumber.example.1.xml8
-rw-r--r--result/DocBook/programlistingco.example.1.xml26
-rw-r--r--result/DocBook/prompt.example.1.xml6
-rw-r--r--result/DocBook/property.example.1.xml6
-rw-r--r--result/DocBook/publisher.example.1.xml5
-rw-r--r--result/DocBook/qandaset.example.1.xml7
-rw-r--r--result/DocBook/quote.example.1.xml6
-rw-r--r--result/DocBook/refentry.example.1.xml7
-rw-r--r--result/DocBook/refentry.example.2.xml6
-rw-r--r--result/DocBook/refentry.example.3.xml16
-rw-r--r--result/DocBook/returnvalue.example.1.xml6
-rw-r--r--result/DocBook/revhistory.example.1.xml3
-rw-r--r--result/DocBook/screen.example.1.xml18
-rw-r--r--result/DocBook/screenco.example.1.xml26
-rw-r--r--result/DocBook/screenshot.example.1.xml3
-rw-r--r--result/DocBook/sect1info.example.1.xml5
-rw-r--r--result/DocBook/section.example.1.xml4
-rw-r--r--result/DocBook/segmentedlist.example.1.xml9
-rw-r--r--result/DocBook/seriesvolnums.example.1.xml5
-rw-r--r--result/DocBook/shortcut.example.1.xml6
-rw-r--r--result/DocBook/sidebar.example.1.xml10
-rw-r--r--result/DocBook/simpara.example.1.xml5
-rw-r--r--result/DocBook/simplelist.example.1.xml5
-rw-r--r--result/DocBook/simplelist.example.2.xml6
-rw-r--r--result/DocBook/simplelist.example.3.xml5
-rw-r--r--result/DocBook/simplesect.example.1.xml7
-rw-r--r--result/DocBook/structfield.example.1.xml6
-rw-r--r--result/DocBook/structname.example.1.xml7
-rw-r--r--result/DocBook/subjectset.example.1.xml3
-rw-r--r--result/DocBook/subscript.example.1.xml5
-rw-r--r--result/DocBook/superscript.example.1.xml6
-rw-r--r--result/DocBook/symbol.example.1.xml6
-rw-r--r--result/DocBook/synopfragment.example.1.xml4
-rw-r--r--result/DocBook/synopsis.example.1.xml5
-rw-r--r--result/DocBook/synopsis.example.2.xml5
-rw-r--r--result/DocBook/systemitem.example.1.xml8
-rw-r--r--result/DocBook/table.example.1.xml4
-rw-r--r--result/DocBook/tip.example.1.xml6
-rw-r--r--result/DocBook/title.example.1.xml5
-rw-r--r--result/DocBook/titleabbrev.example.1.xml6
-rw-r--r--result/DocBook/token.example.1.xml6
-rw-r--r--result/DocBook/trademark.example.1.xml6
-rw-r--r--result/DocBook/type.example.1.xml6
-rw-r--r--result/DocBook/ulink.example.1.xml7
-rw-r--r--result/DocBook/userinput.example.1.xml6
-rw-r--r--result/DocBook/varargs.example.1.xml4
-rw-r--r--result/DocBook/variablelist.example.1.xml9
-rw-r--r--result/DocBook/varname.example.1.xml6
-rw-r--r--result/DocBook/videoobject.example.1.xml10
-rw-r--r--result/DocBook/warning.example.1.xml5
-rw-r--r--result/DocBook/wordasword.example.1.xml6
-rw-r--r--result/DocBook/xref.example.1.xml14
-rw-r--r--result/HTML/Down.html12
-rw-r--r--result/HTML/Down.html.err0
-rw-r--r--result/HTML/Down.html.sax39
-rw-r--r--result/HTML/attrents.html4
-rw-r--r--result/HTML/attrents.html.err0
-rw-r--r--result/HTML/attrents.html.sax21
-rw-r--r--result/HTML/autoclose.html2
-rw-r--r--result/HTML/autoclose.html.err0
-rw-r--r--result/HTML/autoclose.html.sax11
-rw-r--r--result/HTML/autoclose2.html3
-rw-r--r--result/HTML/autoclose2.html.err0
-rw-r--r--result/HTML/autoclose2.html.sax11
-rw-r--r--result/HTML/autoclose3.html7
-rw-r--r--result/HTML/autoclose3.html.err0
-rw-r--r--result/HTML/autoclose3.html.sax19
-rw-r--r--result/HTML/cf_128.html13
-rw-r--r--result/HTML/cf_128.html.err0
-rw-r--r--result/HTML/cf_128.html.sax69
-rw-r--r--result/HTML/doc2.htm26
-rw-r--r--result/HTML/doc2.htm.err3
-rw-r--r--result/HTML/doc2.htm.sax69
-rw-r--r--result/HTML/doc3.htm442
-rw-r--r--result/HTML/doc3.htm.err69
-rw-r--r--result/HTML/doc3.htm.sax2919
-rw-r--r--result/HTML/entities.html6
-rw-r--r--result/HTML/entities.html.err12
-rw-r--r--result/HTML/entities.html.sax27
-rw-r--r--result/HTML/fp40.htm154
-rw-r--r--result/HTML/fp40.htm.err3
-rw-r--r--result/HTML/fp40.htm.sax463
-rw-r--r--result/HTML/liclose.html10
-rw-r--r--result/HTML/liclose.html.err0
-rw-r--r--result/HTML/liclose.html.sax38
-rw-r--r--result/HTML/lt.html2
-rw-r--r--result/HTML/lt.html.err0
-rw-r--r--result/HTML/lt.html.sax19
-rw-r--r--result/HTML/pre.html2
-rw-r--r--result/HTML/pre.html.err0
-rw-r--r--result/HTML/pre.html.sax23
-rw-r--r--result/HTML/reg1.html10
-rw-r--r--result/HTML/reg1.html.err0
-rw-r--r--result/HTML/reg1.html.sax36
-rw-r--r--result/HTML/reg2.html13
-rw-r--r--result/HTML/reg2.html.err0
-rw-r--r--result/HTML/reg2.html.sax41
-rw-r--r--result/HTML/reg3.html14
-rw-r--r--result/HTML/reg3.html.err0
-rw-r--r--result/HTML/reg3.html.sax45
-rw-r--r--result/HTML/reg4.html11
-rw-r--r--result/HTML/reg4.html.err3
-rw-r--r--result/HTML/reg4.html.sax43
-rw-r--r--result/HTML/script.html9
-rw-r--r--result/HTML/script.html.err0
-rw-r--r--result/HTML/script.html.sax32
-rw-r--r--result/HTML/test2.html34
-rw-r--r--result/HTML/test2.html.err0
-rw-r--r--result/HTML/test2.html.sax145
-rw-r--r--result/HTML/test3.html55
-rw-r--r--result/HTML/test3.html.err12
-rw-r--r--result/HTML/test3.html.sax230
-rw-r--r--result/HTML/wired.html398
-rw-r--r--result/HTML/wired.html.err249
-rw-r--r--result/HTML/wired.html.sax2848
-rw-r--r--result/SVG/4rects.xml10
-rw-r--r--result/SVG/a-valid.xml9
-rw-r--r--result/SVG/a-wf.xml8
-rw-r--r--result/SVG/bike-errors.xml0
-rw-r--r--result/SVG/bike.xml44
-rw-r--r--result/SVG/circle.xml9
-rw-r--r--result/SVG/defs.xml14
-rw-r--r--result/SVG/desc.xml14
-rw-r--r--result/SVG/ellipse.xml9
-rw-r--r--result/SVG/flower2.xml10
-rw-r--r--result/SVG/gradient.xml16
-rw-r--r--result/SVG/group01.xml14
-rw-r--r--result/SVG/group02.xml12
-rw-r--r--result/SVG/group03.xml11
-rw-r--r--result/SVG/image-valid.xml9
-rw-r--r--result/SVG/image-wf.xml8
-rw-r--r--result/SVG/lin-gradient.xml15
-rw-r--r--result/SVG/marker.xml23
-rw-r--r--result/SVG/mask.xml12
-rw-r--r--result/SVG/mathswitch.xml26
-rw-r--r--result/SVG/parentns.xml9
-rw-r--r--result/SVG/path01.xml4
-rw-r--r--result/SVG/path02.xml9
-rw-r--r--result/SVG/patternfill.xml11
-rw-r--r--result/SVG/polyline.xml8
-rw-r--r--result/SVG/private.xml18
-rw-r--r--result/SVG/rad-gradient.xml16
-rw-r--r--result/SVG/rectangle.xml9
-rw-r--r--result/SVG/richdesc.xml11
-rw-r--r--result/SVG/script.xml13
-rw-r--r--result/SVG/structure01.xml8
-rw-r--r--result/SVG/style.xml11
-rw-r--r--result/SVG/switch.xml16
-rw-r--r--result/SVG/symbol-use.xml22
-rw-r--r--result/SVG/template.xml8
-rw-r--r--result/SVG/text01.xml11
-rw-r--r--result/SVG/text02.xml25
-rw-r--r--result/SVG/text03.xml7
-rw-r--r--result/SVG/toap01.xml8
-rw-r--r--result/SVG/toap02.xml27
-rw-r--r--result/SVG/transform.xml20
-rw-r--r--result/SVG/trivial.xml4
-rw-r--r--result/SVG/twin-gradients.xml18
-rw-r--r--result/SVG/v-template.xml6
-rw-r--r--result/SVG/viewport-nest.xml12
-rw-r--r--result/SVG/viewport-transform.xml36
-rw-r--r--result/SVG/viewport.xml8
-rw-r--r--result/SVG/wf-template.xml4
-rw-r--r--result/URI/smith.uri15
-rw-r--r--result/URI/uri.data18
-rw-r--r--result/VC/AttributeDefaultLegal12
-rw-r--r--result/VC/DuplicateType3
-rw-r--r--result/VC/ElementValid3
-rw-r--r--result/VC/ElementValid23
-rw-r--r--result/VC/ElementValid33
-rw-r--r--result/VC/ElementValid43
-rw-r--r--result/VC/ElementValid53
-rw-r--r--result/VC/ElementValid63
-rw-r--r--result/VC/ElementValid73
-rw-r--r--result/VC/ElementValid83
-rw-r--r--result/VC/Enumeration3
-rw-r--r--result/VC/NS10
-rw-r--r--result/VC/NS23
-rw-r--r--result/VC/NS39
-rw-r--r--result/VC/OneID7
-rw-r--r--result/VC/OneID27
-rw-r--r--result/VC/OneID37
-rw-r--r--result/VC/PENesting6
-rw-r--r--result/VC/PENesting26
-rw-r--r--result/VC/UniqueElementTypeDeclaration3
-rw-r--r--result/VC/UniqueElementTypeDeclaration23
-rw-r--r--result/XInclude/docids.xml19
-rw-r--r--result/XInclude/docids.xml.err0
-rw-r--r--result/XInclude/docids.xml.rdr35
-rw-r--r--result/XInclude/fallback.xml5
-rw-r--r--result/XInclude/fallback.xml.err0
-rw-r--r--result/XInclude/fallback.xml.rdr12
-rw-r--r--result/XInclude/include.xml9
-rw-r--r--result/XInclude/include.xml.err0
-rw-r--r--result/XInclude/include.xml.rdr28
-rw-r--r--result/XInclude/nodes.xml5
-rw-r--r--result/XInclude/nodes.xml.err0
-rw-r--r--result/XInclude/nodes.xml.rdr18
-rw-r--r--result/XInclude/nodes2.xml5
-rw-r--r--result/XInclude/nodes2.xml.err0
-rw-r--r--result/XInclude/nodes2.xml.rdr18
-rw-r--r--result/XInclude/nodes3.xml5
-rw-r--r--result/XInclude/nodes3.xml.err1
-rw-r--r--result/XInclude/nodes3.xml.rdr10
-rw-r--r--result/XInclude/recursive.xml3
-rw-r--r--result/XInclude/recursive.xml.err0
-rw-r--r--result/XInclude/recursive.xml.rdr6
-rw-r--r--result/XInclude/tstencoding.xml6
-rw-r--r--result/XInclude/tstencoding.xml.err0
-rw-r--r--result/XInclude/tstencoding.xml.rdr11
-rw-r--r--result/XInclude/txtinclude.xml6
-rw-r--r--result/XInclude/txtinclude.xml.err0
-rw-r--r--result/XInclude/txtinclude.xml.rdr11
-rw-r--r--result/XPath/expr/base20
-rw-r--r--result/XPath/expr/compare184
-rw-r--r--result/XPath/expr/equality104
-rw-r--r--result/XPath/expr/floats244
-rw-r--r--result/XPath/expr/functions100
-rw-r--r--result/XPath/expr/strings136
-rw-r--r--result/XPath/tests/chaptersbase115
-rw-r--r--result/XPath/tests/chaptersprefol100
-rw-r--r--result/XPath/tests/idsimple33
-rw-r--r--result/XPath/tests/simpleabbr81
-rw-r--r--result/XPath/tests/simplebase73
-rw-r--r--result/XPath/tests/usr1check12
-rw-r--r--result/XPath/tests/vidbase42
-rw-r--r--result/XPath/xptr/chapterschildseq53
-rw-r--r--result/XPath/xptr/chaptersparts44
-rw-r--r--result/XPath/xptr/chaptersrange64
-rw-r--r--result/XPath/xptr/strpoint75
-rw-r--r--result/XPath/xptr/strrange96
-rw-r--r--result/XPath/xptr/strrange264
-rw-r--r--result/XPath/xptr/strrange348
-rw-r--r--result/XPath/xptr/vidbase19
-rw-r--r--result/XPath/xptr/vidchildseq36
-rw-r--r--result/XPath/xptr/vidparts27
-rw-r--r--result/att12
-rw-r--r--result/att1.rdr1
-rw-r--r--result/att1.sax5
-rw-r--r--result/att22
-rw-r--r--result/att2.rdr1
-rw-r--r--result/att2.sax5
-rw-r--r--result/att32
-rw-r--r--result/att3.rdr3
-rw-r--r--result/att3.sax9
-rw-r--r--result/att49264
-rw-r--r--result/att4.rdr27785
-rw-r--r--result/att4.sax36976
-rw-r--r--result/att540
-rw-r--r--result/att5.rdr109
-rw-r--r--result/att5.sax168
-rw-r--r--result/att66
-rw-r--r--result/att6.rdr15
-rw-r--r--result/att6.sax22
-rw-r--r--result/att711
-rw-r--r--result/att7.rdr11
-rw-r--r--result/att7.sax24
-rw-r--r--result/att82
-rw-r--r--result/att8.rdr22
-rw-r--r--result/att8.sax31
-rw-r--r--result/attrib.xml2
-rw-r--r--result/attrib.xml.rdr1
-rw-r--r--result/attrib.xml.sax6
-rw-r--r--result/automata/a4
-rw-r--r--result/automata/aba6
-rw-r--r--result/automata/abaa5
-rw-r--r--result/automata/abba4
-rw-r--r--result/automata/po2
-rw-r--r--result/bigentname.xml6
-rw-r--r--result/bigentname.xml.rdr4
-rw-r--r--result/bigentname.xml.sax17
-rw-r--r--result/bigname.xml2
-rw-r--r--result/bigname.xml.rdr1
-rw-r--r--result/bigname.xml.sax5
-rw-r--r--result/bigname2.xml2
-rw-r--r--result/bigname2.xml.rdr1
-rw-r--r--result/bigname2.xml.sax5
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-099
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-109
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-119
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-129
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-139
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-149
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-150
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-160
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-179
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-189
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-199
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-209
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-219
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-229
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-239
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-241
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-250
-rw-r--r--result/c14n/exc-without-comments/merlin-c14n-two-269
-rw-r--r--result/c14n/exc-without-comments/test-07
-rw-r--r--result/c14n/exc-without-comments/test-17
-rw-r--r--result/c14n/with-comments/example-16
-rw-r--r--result/c14n/with-comments/example-211
-rw-r--r--result/c14n/with-comments/example-314
-rw-r--r--result/c14n/with-comments/example-49
-rw-r--r--result/c14n/with-comments/example-54
-rw-r--r--result/c14n/with-comments/example-61
-rw-r--r--result/c14n/with-comments/example-71
-rw-r--r--result/c14n/without-comments/example-14
-rw-r--r--result/c14n/without-comments/example-211
-rw-r--r--result/c14n/without-comments/example-314
-rw-r--r--result/c14n/without-comments/example-49
-rw-r--r--result/c14n/without-comments/example-53
-rw-r--r--result/c14n/without-comments/example-61
-rw-r--r--result/c14n/without-comments/example-71
-rw-r--r--result/c14n/without-comments/merlin-c14n-two-009
-rw-r--r--result/c14n/without-comments/merlin-c14n-two-019
-rw-r--r--result/c14n/without-comments/merlin-c14n-two-029
-rw-r--r--result/c14n/without-comments/merlin-c14n-two-039
-rw-r--r--result/c14n/without-comments/merlin-c14n-two-049
-rw-r--r--result/c14n/without-comments/merlin-c14n-two-059
-rw-r--r--result/c14n/without-comments/merlin-c14n-two-061
-rw-r--r--result/c14n/without-comments/merlin-c14n-two-071
-rw-r--r--result/c14n/without-comments/merlin-c14n-two-089
-rw-r--r--result/c14n/without-comments/test-01
-rw-r--r--result/c14n/without-comments/test-131
-rw-r--r--result/c14n/without-comments/test-23
-rw-r--r--result/c14n/without-comments/test-37
-rw-r--r--result/catalogs/catal5
-rw-r--r--result/catalogs/docbook6
-rw-r--r--result/catalogs/mycatalog.empty3
-rw-r--r--result/catalogs/mycatalog.full7
-rw-r--r--result/catalogs/registry5
-rw-r--r--result/cdata4
-rw-r--r--result/cdata.rdr7
-rw-r--r--result/cdata.sax10
-rw-r--r--result/cdata26
-rw-r--r--result/cdata2.rdr13
-rw-r--r--result/cdata2.sax18
-rw-r--r--result/comment.xml6
-rw-r--r--result/comment.xml.rdr13
-rw-r--r--result/comment.xml.sax17
-rw-r--r--result/comment2.xml6
-rw-r--r--result/comment2.xml.rdr9
-rw-r--r--result/comment2.xml.sax13
-rw-r--r--result/dav125
-rw-r--r--result/dav1.rdr78
-rw-r--r--result/dav1.sax81
-rw-r--r--result/dav104
-rw-r--r--result/dav10.rdr9
-rw-r--r--result/dav10.sax12
-rw-r--r--result/dav1121
-rw-r--r--result/dav11.rdr60
-rw-r--r--result/dav11.sax62
-rw-r--r--result/dav122
-rw-r--r--result/dav12.rdr3
-rw-r--r--result/dav12.sax6
-rw-r--r--result/dav1316
-rw-r--r--result/dav13.rdr45
-rw-r--r--result/dav13.sax46
-rw-r--r--result/dav1520
-rw-r--r--result/dav15.rdr73
-rw-r--r--result/dav15.sax76
-rw-r--r--result/dav166
-rw-r--r--result/dav16.rdr13
-rw-r--r--result/dav16.sax17
-rw-r--r--result/dav1722
-rw-r--r--result/dav17.rdr75
-rw-r--r--result/dav17.sax78
-rw-r--r--result/dav186
-rw-r--r--result/dav18.rdr13
-rw-r--r--result/dav18.sax17
-rw-r--r--result/dav1918
-rw-r--r--result/dav19.rdr59
-rw-r--r--result/dav19.sax62
-rw-r--r--result/dav224
-rw-r--r--result/dav2.rdr81
-rw-r--r--result/dav2.sax84
-rw-r--r--result/dav318
-rw-r--r--result/dav3.rdr57
-rw-r--r--result/dav3.sax63
-rw-r--r--result/dav416
-rw-r--r--result/dav4.rdr47
-rw-r--r--result/dav4.sax51
-rw-r--r--result/dav517
-rw-r--r--result/dav5.rdr50
-rw-r--r--result/dav5.sax54
-rw-r--r--result/dav622
-rw-r--r--result/dav6.rdr63
-rw-r--r--result/dav6.sax66
-rw-r--r--result/dav716
-rw-r--r--result/dav7.rdr57
-rw-r--r--result/dav7.sax60
-rw-r--r--result/dav814
-rw-r--r--result/dav8.rdr51
-rw-r--r--result/dav8.sax54
-rw-r--r--result/dav918
-rw-r--r--result/dav9.rdr67
-rw-r--r--result/dav9.sax70
-rw-r--r--result/defattr.xml6
-rw-r--r--result/defattr.xml.rdr2
-rw-r--r--result/defattr.xml.sax9
-rw-r--r--result/defattr2.xml8
-rw-r--r--result/defattr2.xml.rdr2
-rw-r--r--result/defattr2.xml.sax11
-rw-r--r--result/dia199
-rw-r--r--result/dia1.rdr292
-rw-r--r--result/dia1.sax323
-rw-r--r--result/dia299
-rw-r--r--result/dia2.rdr292
-rw-r--r--result/dia2.sax323
-rw-r--r--result/dtd14
-rw-r--r--result/dtd1.rdr5
-rw-r--r--result/dtd1.sax9
-rw-r--r--result/dtd109
-rw-r--r--result/dtd10.rdr12
-rw-r--r--result/dtd10.sax21
-rw-r--r--result/dtd116
-rw-r--r--result/dtd11.rdr2
-rw-r--r--result/dtd11.sax9
-rw-r--r--result/dtd126
-rw-r--r--result/dtd12.rdr4
-rw-r--r--result/dtd12.sax17
-rw-r--r--result/dtd137
-rw-r--r--result/dtd13.rdr4
-rw-r--r--result/dtd13.sax10
-rw-r--r--result/dtd25
-rw-r--r--result/dtd2.rdr4
-rw-r--r--result/dtd2.sax9
-rw-r--r--result/dtd35
-rw-r--r--result/dtd3.rdr4
-rw-r--r--result/dtd3.sax9
-rw-r--r--result/dtd45
-rw-r--r--result/dtd4.rdr2
-rw-r--r--result/dtd4.sax8
-rw-r--r--result/dtd57
-rw-r--r--result/dtd5.rdr11
-rw-r--r--result/dtd5.sax18
-rw-r--r--result/dtd67
-rw-r--r--result/dtd6.rdr12
-rw-r--r--result/dtd6.sax19
-rw-r--r--result/dtd77
-rw-r--r--result/dtd7.rdr9
-rw-r--r--result/dtd7.sax16
-rw-r--r--result/dtd89
-rw-r--r--result/dtd8.rdr9
-rw-r--r--result/dtd8.sax18
-rw-r--r--result/dtd99
-rw-r--r--result/dtd9.rdr9
-rw-r--r--result/dtd9.sax18
-rw-r--r--result/ent17
-rw-r--r--result/ent1.rdr8
-rw-r--r--result/ent1.sax16
-rw-r--r--result/ent210
-rw-r--r--result/ent2.rdr13
-rw-r--r--result/ent2.sax25
-rw-r--r--result/ent37
-rw-r--r--result/ent3.rdr6
-rw-r--r--result/ent3.sax13
-rw-r--r--result/ent47
-rw-r--r--result/ent4.rdr6
-rw-r--r--result/ent4.sax18
-rw-r--r--result/ent55
-rw-r--r--result/ent5.rdr6
-rw-r--r--result/ent5.sax13
-rw-r--r--result/ent69
-rw-r--r--result/ent6.rdr2
-rw-r--r--result/ent6.sax17
-rw-r--r--result/ent78
-rw-r--r--result/ent7.rdr8
-rw-r--r--result/ent7.sax16
-rw-r--r--result/ent810
-rw-r--r--result/ent8.rdr21
-rw-r--r--result/ent8.sax39
-rw-r--r--result/errors/attr1.xml0
-rw-r--r--result/errors/attr1.xml.err6
-rw-r--r--result/errors/attr1.xml.str6
-rw-r--r--result/errors/attr2.xml0
-rw-r--r--result/errors/attr2.xml.err6
-rw-r--r--result/errors/attr2.xml.str6
-rw-r--r--result/errors/name.xml0
-rw-r--r--result/errors/name.xml.err3
-rw-r--r--result/errors/name.xml.str3
-rw-r--r--result/errors/name2.xml0
-rw-r--r--result/errors/name2.xml.err6
-rw-r--r--result/errors/name2.xml.str6
-rw-r--r--result/eve.xml6
-rw-r--r--result/eve.xml.rdr5
-rw-r--r--result/eve.xml.sax11
-rw-r--r--result/example.dtd0
-rw-r--r--result/intsubset.xml5
-rw-r--r--result/intsubset.xml.rdr2
-rw-r--r--result/intsubset.xml.sax9
-rw-r--r--result/isolat12
-rw-r--r--result/isolat1.rdr3
-rw-r--r--result/isolat1.sax7
-rw-r--r--result/isolat2107
-rw-r--r--result/isolat2.rdr108
-rw-r--r--result/isolat2.sax35
-rw-r--r--result/isolat310
-rw-r--r--result/isolat3.rdr23
-rw-r--r--result/isolat3.sax30
-rw-r--r--result/namespaces/err_0.xml2
-rw-r--r--result/namespaces/err_0.xml.err0
-rw-r--r--result/namespaces/err_1.xml2
-rw-r--r--result/namespaces/err_1.xml.err3
-rw-r--r--result/namespaces/err_10.xml0
-rw-r--r--result/namespaces/err_10.xml.err3
-rw-r--r--result/namespaces/err_11.xml0
-rw-r--r--result/namespaces/err_11.xml.err3
-rw-r--r--result/namespaces/err_2.xml2
-rw-r--r--result/namespaces/err_2.xml.err3
-rw-r--r--result/namespaces/err_3.xml2
-rw-r--r--result/namespaces/err_3.xml.err3
-rw-r--r--result/namespaces/err_4.xml2
-rw-r--r--result/namespaces/err_4.xml.err3
-rw-r--r--result/namespaces/err_5.xml2
-rw-r--r--result/namespaces/err_5.xml.err3
-rw-r--r--result/namespaces/err_6.xml2
-rw-r--r--result/namespaces/err_6.xml.err3
-rw-r--r--result/namespaces/err_7.xml2
-rw-r--r--result/namespaces/err_7.xml.err3
-rw-r--r--result/namespaces/err_8.xml2
-rw-r--r--result/namespaces/err_8.xml.err3
-rw-r--r--result/namespaces/err_9.xml2
-rw-r--r--result/namespaces/err_9.xml.err3
-rw-r--r--result/noent/att12
-rw-r--r--result/noent/att22
-rw-r--r--result/noent/att32
-rw-r--r--result/noent/att49264
-rw-r--r--result/noent/att540
-rw-r--r--result/noent/att66
-rw-r--r--result/noent/att711
-rw-r--r--result/noent/att82
-rw-r--r--result/noent/attrib.xml2
-rw-r--r--result/noent/bigentname.xml6
-rw-r--r--result/noent/bigname.xml2
-rw-r--r--result/noent/bigname2.xml2
-rw-r--r--result/noent/cdata4
-rw-r--r--result/noent/cdata26
-rw-r--r--result/noent/comment.xml6
-rw-r--r--result/noent/comment2.xml6
-rw-r--r--result/noent/dav125
-rw-r--r--result/noent/dav104
-rw-r--r--result/noent/dav1121
-rw-r--r--result/noent/dav122
-rw-r--r--result/noent/dav1316
-rw-r--r--result/noent/dav1520
-rw-r--r--result/noent/dav166
-rw-r--r--result/noent/dav1722
-rw-r--r--result/noent/dav186
-rw-r--r--result/noent/dav1918
-rw-r--r--result/noent/dav224
-rw-r--r--result/noent/dav318
-rw-r--r--result/noent/dav416
-rw-r--r--result/noent/dav517
-rw-r--r--result/noent/dav622
-rw-r--r--result/noent/dav716
-rw-r--r--result/noent/dav814
-rw-r--r--result/noent/dav918
-rw-r--r--result/noent/defattr.xml6
-rw-r--r--result/noent/defattr2.xml8
-rw-r--r--result/noent/dia199
-rw-r--r--result/noent/dia299
-rw-r--r--result/noent/dtd14
-rw-r--r--result/noent/dtd109
-rw-r--r--result/noent/dtd116
-rw-r--r--result/noent/dtd126
-rw-r--r--result/noent/dtd137
-rw-r--r--result/noent/dtd25
-rw-r--r--result/noent/dtd35
-rw-r--r--result/noent/dtd45
-rw-r--r--result/noent/dtd57
-rw-r--r--result/noent/dtd67
-rw-r--r--result/noent/dtd77
-rw-r--r--result/noent/dtd89
-rw-r--r--result/noent/dtd99
-rw-r--r--result/noent/ent17
-rw-r--r--result/noent/ent212
-rw-r--r--result/noent/ent37
-rw-r--r--result/noent/ent47
-rw-r--r--result/noent/ent55
-rw-r--r--result/noent/ent69
-rw-r--r--result/noent/ent78
-rw-r--r--result/noent/ent810
-rw-r--r--result/noent/eve.xml6
-rw-r--r--result/noent/intsubset.xml5
-rw-r--r--result/noent/isolat12
-rw-r--r--result/noent/isolat2107
-rw-r--r--result/noent/isolat310
-rw-r--r--result/noent/ns4
-rw-r--r--result/noent/ns22
-rw-r--r--result/noent/ns32
-rw-r--r--result/noent/ns42
-rw-r--r--result/noent/p3p19
-rw-r--r--result/noent/pi.xml6
-rw-r--r--result/noent/pi2.xml6
-rw-r--r--result/noent/rdf181
-rw-r--r--result/noent/rdf21899
-rw-r--r--result/noent/slashdot.rdf65
-rw-r--r--result/noent/slashdot.xml113
-rw-r--r--result/noent/slashdot16.xmlbin0 -> 10374 bytes
-rw-r--r--result/noent/svg1161
-rw-r--r--result/noent/svg256
-rw-r--r--result/noent/svg3723
-rw-r--r--result/noent/title.xml2
-rw-r--r--result/noent/tstblanks.xml2
-rw-r--r--result/noent/utf16bebom.xmlbin0 -> 344 bytes
-rw-r--r--result/noent/utf16bom.xmlbin0 -> 258 bytes
-rw-r--r--result/noent/utf16lebom.xmlbin0 -> 344 bytes
-rw-r--r--result/noent/utf8bom.xml2
-rw-r--r--result/noent/wap.xml24
-rw-r--r--result/noent/wml.xml10
-rw-r--r--result/noent/xhtml130
-rw-r--r--result/noent/xml19
-rw-r--r--result/noent/xml28
-rw-r--r--result/ns4
-rw-r--r--result/ns.rdr7
-rw-r--r--result/ns.sax11
-rw-r--r--result/ns22
-rw-r--r--result/ns2.rdr1
-rw-r--r--result/ns2.sax5
-rw-r--r--result/ns32
-rw-r--r--result/ns3.rdr1
-rw-r--r--result/ns3.sax5
-rw-r--r--result/ns42
-rw-r--r--result/ns4.rdr1
-rw-r--r--result/ns4.sax5
-rw-r--r--result/p3p19
-rw-r--r--result/p3p.rdr55
-rw-r--r--result/p3p.sax64
-rw-r--r--result/pi.xml6
-rw-r--r--result/pi.xml.rdr13
-rw-r--r--result/pi.xml.sax17
-rw-r--r--result/pi2.xml6
-rw-r--r--result/pi2.xml.rdr9
-rw-r--r--result/pi2.xml.sax13
-rw-r--r--result/rdf181
-rw-r--r--result/rdf1.rdr214
-rw-r--r--result/rdf1.sax190
-rw-r--r--result/rdf21899
-rw-r--r--result/rdf2.rdr2008
-rw-r--r--result/rdf2.sax197
-rw-r--r--result/regexp/content12
-rw-r--r--result/regexp/hard7
-rw-r--r--result/regexp/ncname6
-rw-r--r--result/regexp/ranges15
-rw-r--r--result/regexp/xpath32
-rw-r--r--result/relaxng/addressBook_err1
-rw-r--r--result/relaxng/addressBook_valid0
-rw-r--r--result/relaxng/comps_00
-rw-r--r--result/relaxng/comps_0.err1
-rw-r--r--result/relaxng/comps_err1
-rw-r--r--result/relaxng/comps_valid0
-rw-r--r--result/relaxng/demo2_err1
-rw-r--r--result/relaxng/demo2_valid0
-rw-r--r--result/relaxng/demo3_err1
-rw-r--r--result/relaxng/demo3_valid0
-rw-r--r--result/relaxng/demo_err1
-rw-r--r--result/relaxng/demo_valid0
-rw-r--r--result/relaxng/docbook_00
-rw-r--r--result/relaxng/docbook_0.err1
-rw-r--r--result/relaxng/docbook_err1
-rw-r--r--result/relaxng/docbook_valid0
-rw-r--r--result/relaxng/empty0_00
-rw-r--r--result/relaxng/empty0_0.err1
-rw-r--r--result/relaxng/empty0_err1
-rw-r--r--result/relaxng/empty0_valid0
-rw-r--r--result/relaxng/empty1_00
-rw-r--r--result/relaxng/empty1_0.err1
-rw-r--r--result/relaxng/empty1_10
-rw-r--r--result/relaxng/empty1_1.err1
-rw-r--r--result/relaxng/empty1_err1
-rw-r--r--result/relaxng/empty1_valid0
-rw-r--r--result/relaxng/inline2_err1
-rw-r--r--result/relaxng/inline2_valid0
-rw-r--r--result/relaxng/inline3_err1
-rw-r--r--result/relaxng/inline3_valid0
-rw-r--r--result/relaxng/inline_err1
-rw-r--r--result/relaxng/inline_valid0
-rw-r--r--result/relaxng/interleave0_0_err1
-rw-r--r--result/relaxng/interleave0_0_valid0
-rw-r--r--result/relaxng/interleave1_0_err1
-rw-r--r--result/relaxng/interleave1_0_valid0
-rw-r--r--result/relaxng/pattern1_err1
-rw-r--r--result/relaxng/pattern1_valid0
-rw-r--r--result/relaxng/pattern2_err1
-rw-r--r--result/relaxng/pattern2_valid0
-rw-r--r--result/relaxng/proofsystem_err1
-rw-r--r--result/relaxng/proofsystem_valid0
-rw-r--r--result/relaxng/rngbug-001_err1
-rw-r--r--result/relaxng/rngbug-001_valid0
-rw-r--r--result/relaxng/spec1_10
-rw-r--r--result/relaxng/spec1_1.err1
-rw-r--r--result/relaxng/spec1_err1
-rw-r--r--result/relaxng/spec1_valid0
-rw-r--r--result/relaxng/spec_00
-rw-r--r--result/relaxng/spec_0.err1
-rw-r--r--result/relaxng/spec_err1
-rw-r--r--result/relaxng/spec_valid0
-rw-r--r--result/relaxng/table_err1
-rw-r--r--result/relaxng/table_valid0
-rw-r--r--result/relaxng/tutor10_10_10
-rw-r--r--result/relaxng/tutor10_10_1.err1
-rw-r--r--result/relaxng/tutor10_10_err1
-rw-r--r--result/relaxng/tutor10_10_valid0
-rw-r--r--result/relaxng/tutor10_1_10
-rw-r--r--result/relaxng/tutor10_1_1.err1
-rw-r--r--result/relaxng/tutor10_1_20
-rw-r--r--result/relaxng/tutor10_1_2.err1
-rw-r--r--result/relaxng/tutor10_1_30
-rw-r--r--result/relaxng/tutor10_1_3.err1
-rw-r--r--result/relaxng/tutor10_1_40
-rw-r--r--result/relaxng/tutor10_1_4.err2
-rw-r--r--result/relaxng/tutor10_1_50
-rw-r--r--result/relaxng/tutor10_1_5.err2
-rw-r--r--result/relaxng/tutor10_1_60
-rw-r--r--result/relaxng/tutor10_1_6.err2
-rw-r--r--result/relaxng/tutor10_1_err1
-rw-r--r--result/relaxng/tutor10_1_valid0
-rw-r--r--result/relaxng/tutor10_2_10
-rw-r--r--result/relaxng/tutor10_2_1.err1
-rw-r--r--result/relaxng/tutor10_2_20
-rw-r--r--result/relaxng/tutor10_2_2.err1
-rw-r--r--result/relaxng/tutor10_2_30
-rw-r--r--result/relaxng/tutor10_2_3.err2
-rw-r--r--result/relaxng/tutor10_2_40
-rw-r--r--result/relaxng/tutor10_2_4.err2
-rw-r--r--result/relaxng/tutor10_2_err1
-rw-r--r--result/relaxng/tutor10_2_valid0
-rw-r--r--result/relaxng/tutor10_3_10
-rw-r--r--result/relaxng/tutor10_3_1.err1
-rw-r--r--result/relaxng/tutor10_3_err1
-rw-r--r--result/relaxng/tutor10_3_valid0
-rw-r--r--result/relaxng/tutor10_4_10
-rw-r--r--result/relaxng/tutor10_4_1.err1
-rw-r--r--result/relaxng/tutor10_4_err1
-rw-r--r--result/relaxng/tutor10_4_valid0
-rw-r--r--result/relaxng/tutor10_5_10
-rw-r--r--result/relaxng/tutor10_5_1.err1
-rw-r--r--result/relaxng/tutor10_5_err1
-rw-r--r--result/relaxng/tutor10_5_valid0
-rw-r--r--result/relaxng/tutor10_6_10
-rw-r--r--result/relaxng/tutor10_6_1.err1
-rw-r--r--result/relaxng/tutor10_6_err1
-rw-r--r--result/relaxng/tutor10_6_valid0
-rw-r--r--result/relaxng/tutor10_7_10
-rw-r--r--result/relaxng/tutor10_7_1.err1
-rw-r--r--result/relaxng/tutor10_7_20
-rw-r--r--result/relaxng/tutor10_7_2.err1
-rw-r--r--result/relaxng/tutor10_7_30
-rw-r--r--result/relaxng/tutor10_7_3.err2
-rw-r--r--result/relaxng/tutor10_7_err1
-rw-r--r--result/relaxng/tutor10_7_valid0
-rw-r--r--result/relaxng/tutor10_8_10
-rw-r--r--result/relaxng/tutor10_8_1.err1
-rw-r--r--result/relaxng/tutor10_8_20
-rw-r--r--result/relaxng/tutor10_8_2.err1
-rw-r--r--result/relaxng/tutor10_8_30
-rw-r--r--result/relaxng/tutor10_8_3.err2
-rw-r--r--result/relaxng/tutor10_8_err1
-rw-r--r--result/relaxng/tutor10_8_valid0
-rw-r--r--result/relaxng/tutor10_9_10
-rw-r--r--result/relaxng/tutor10_9_1.err1
-rw-r--r--result/relaxng/tutor10_9_err1
-rw-r--r--result/relaxng/tutor10_9_valid0
-rw-r--r--result/relaxng/tutor11_1_10
-rw-r--r--result/relaxng/tutor11_1_1.err1
-rw-r--r--result/relaxng/tutor11_1_20
-rw-r--r--result/relaxng/tutor11_1_2.err1
-rw-r--r--result/relaxng/tutor11_1_30
-rw-r--r--result/relaxng/tutor11_1_3.err1
-rw-r--r--result/relaxng/tutor11_1_err1
-rw-r--r--result/relaxng/tutor11_1_valid0
-rw-r--r--result/relaxng/tutor11_2_10
-rw-r--r--result/relaxng/tutor11_2_1.err1
-rw-r--r--result/relaxng/tutor11_2_20
-rw-r--r--result/relaxng/tutor11_2_2.err2
-rw-r--r--result/relaxng/tutor11_2_30
-rw-r--r--result/relaxng/tutor11_2_3.err2
-rw-r--r--result/relaxng/tutor11_2_err1
-rw-r--r--result/relaxng/tutor11_2_valid0
-rw-r--r--result/relaxng/tutor11_3_10
-rw-r--r--result/relaxng/tutor11_3_1.err2
-rw-r--r--result/relaxng/tutor11_3_err1
-rw-r--r--result/relaxng/tutor11_3_valid0
-rw-r--r--result/relaxng/tutor11_4_10
-rw-r--r--result/relaxng/tutor11_4_1.err1
-rw-r--r--result/relaxng/tutor11_4_err1
-rw-r--r--result/relaxng/tutor11_4_valid0
-rw-r--r--result/relaxng/tutor12_1_10
-rw-r--r--result/relaxng/tutor12_1_1.err1
-rw-r--r--result/relaxng/tutor12_1_err1
-rw-r--r--result/relaxng/tutor12_1_valid0
-rw-r--r--result/relaxng/tutor13_1_10
-rw-r--r--result/relaxng/tutor13_1_1.err1
-rw-r--r--result/relaxng/tutor13_1_err1
-rw-r--r--result/relaxng/tutor13_1_valid0
-rw-r--r--result/relaxng/tutor14_1_err1
-rw-r--r--result/relaxng/tutor14_1_valid0
-rw-r--r--result/relaxng/tutor1_1_10
-rw-r--r--result/relaxng/tutor1_1_1.err1
-rw-r--r--result/relaxng/tutor1_1_err1
-rw-r--r--result/relaxng/tutor1_1_valid0
-rw-r--r--result/relaxng/tutor1_2_10
-rw-r--r--result/relaxng/tutor1_2_1.err1
-rw-r--r--result/relaxng/tutor1_2_err1
-rw-r--r--result/relaxng/tutor1_2_valid0
-rw-r--r--result/relaxng/tutor1_3_10
-rw-r--r--result/relaxng/tutor1_3_1.err1
-rw-r--r--result/relaxng/tutor1_3_err1
-rw-r--r--result/relaxng/tutor1_3_valid0
-rw-r--r--result/relaxng/tutor1_4_10
-rw-r--r--result/relaxng/tutor1_4_1.err1
-rw-r--r--result/relaxng/tutor1_4_err1
-rw-r--r--result/relaxng/tutor1_4_valid0
-rw-r--r--result/relaxng/tutor2_1_10
-rw-r--r--result/relaxng/tutor2_1_1.err1
-rw-r--r--result/relaxng/tutor2_1_err1
-rw-r--r--result/relaxng/tutor2_1_valid0
-rw-r--r--result/relaxng/tutor3_1_10
-rw-r--r--result/relaxng/tutor3_1_1.err1
-rw-r--r--result/relaxng/tutor3_1_20
-rw-r--r--result/relaxng/tutor3_1_2.err1
-rw-r--r--result/relaxng/tutor3_1_err1
-rw-r--r--result/relaxng/tutor3_1_valid0
-rw-r--r--result/relaxng/tutor3_2_10
-rw-r--r--result/relaxng/tutor3_2_1.err2
-rw-r--r--result/relaxng/tutor3_2_err1
-rw-r--r--result/relaxng/tutor3_2_valid0
-rw-r--r--result/relaxng/tutor3_3_10
-rw-r--r--result/relaxng/tutor3_3_1.err1
-rw-r--r--result/relaxng/tutor3_3_err1
-rw-r--r--result/relaxng/tutor3_3_valid0
-rw-r--r--result/relaxng/tutor3_4_10
-rw-r--r--result/relaxng/tutor3_4_1.err1
-rw-r--r--result/relaxng/tutor3_4_err1
-rw-r--r--result/relaxng/tutor3_4_valid0
-rw-r--r--result/relaxng/tutor3_5_10
-rw-r--r--result/relaxng/tutor3_5_1.err1
-rw-r--r--result/relaxng/tutor3_5_20
-rw-r--r--result/relaxng/tutor3_5_2.err3
-rw-r--r--result/relaxng/tutor3_5_err1
-rw-r--r--result/relaxng/tutor3_5_valid0
-rw-r--r--result/relaxng/tutor3_6_10
-rw-r--r--result/relaxng/tutor3_6_1.err1
-rw-r--r--result/relaxng/tutor3_6_err1
-rw-r--r--result/relaxng/tutor3_6_valid0
-rw-r--r--result/relaxng/tutor3_7_10
-rw-r--r--result/relaxng/tutor3_7_1.err2
-rw-r--r--result/relaxng/tutor3_7_err4
-rw-r--r--result/relaxng/tutor3_7_valid0
-rw-r--r--result/relaxng/tutor3_8_10
-rw-r--r--result/relaxng/tutor3_8_1.err1
-rw-r--r--result/relaxng/tutor3_8_err1
-rw-r--r--result/relaxng/tutor3_8_valid0
-rw-r--r--result/relaxng/tutor3_9_10
-rw-r--r--result/relaxng/tutor3_9_1.err1
-rw-r--r--result/relaxng/tutor3_9_err1
-rw-r--r--result/relaxng/tutor3_9_valid0
-rw-r--r--result/relaxng/tutor4_1_10
-rw-r--r--result/relaxng/tutor4_1_1.err1
-rw-r--r--result/relaxng/tutor4_1_err1
-rw-r--r--result/relaxng/tutor4_1_valid0
-rw-r--r--result/relaxng/tutor4_2_10
-rw-r--r--result/relaxng/tutor4_2_1.err1
-rw-r--r--result/relaxng/tutor4_2_err1
-rw-r--r--result/relaxng/tutor4_2_valid0
-rw-r--r--result/relaxng/tutor4_3_10
-rw-r--r--result/relaxng/tutor4_3_1.err1
-rw-r--r--result/relaxng/tutor4_3_20
-rw-r--r--result/relaxng/tutor4_3_2.err1
-rw-r--r--result/relaxng/tutor4_3_30
-rw-r--r--result/relaxng/tutor4_3_3.err1
-rw-r--r--result/relaxng/tutor4_3_40
-rw-r--r--result/relaxng/tutor4_3_4.err1
-rw-r--r--result/relaxng/tutor4_3_50
-rw-r--r--result/relaxng/tutor4_3_5.err1
-rw-r--r--result/relaxng/tutor4_3_60
-rw-r--r--result/relaxng/tutor4_3_6.err1
-rw-r--r--result/relaxng/tutor4_3_err1
-rw-r--r--result/relaxng/tutor4_3_valid0
-rw-r--r--result/relaxng/tutor4_4_10
-rw-r--r--result/relaxng/tutor4_4_1.err2
-rw-r--r--result/relaxng/tutor4_4_err1
-rw-r--r--result/relaxng/tutor4_4_valid0
-rw-r--r--result/relaxng/tutor5_1_10
-rw-r--r--result/relaxng/tutor5_1_1.err1
-rw-r--r--result/relaxng/tutor5_1_err1
-rw-r--r--result/relaxng/tutor5_1_valid0
-rw-r--r--result/relaxng/tutor5_2_10
-rw-r--r--result/relaxng/tutor5_2_1.err1
-rw-r--r--result/relaxng/tutor5_2_err1
-rw-r--r--result/relaxng/tutor5_2_valid0
-rw-r--r--result/relaxng/tutor5_3_10
-rw-r--r--result/relaxng/tutor5_3_1.err2
-rw-r--r--result/relaxng/tutor5_3_err1
-rw-r--r--result/relaxng/tutor5_3_valid0
-rw-r--r--result/relaxng/tutor5_4_10
-rw-r--r--result/relaxng/tutor5_4_1.err1
-rw-r--r--result/relaxng/tutor5_4_err1
-rw-r--r--result/relaxng/tutor5_4_valid0
-rw-r--r--result/relaxng/tutor5_5_err1
-rw-r--r--result/relaxng/tutor5_5_valid0
-rw-r--r--result/relaxng/tutor6_1_10
-rw-r--r--result/relaxng/tutor6_1_1.err1
-rw-r--r--result/relaxng/tutor6_1_20
-rw-r--r--result/relaxng/tutor6_1_2.err1
-rw-r--r--result/relaxng/tutor6_1_30
-rw-r--r--result/relaxng/tutor6_1_3.err2
-rw-r--r--result/relaxng/tutor6_1_40
-rw-r--r--result/relaxng/tutor6_1_4.err1
-rw-r--r--result/relaxng/tutor6_1_50
-rw-r--r--result/relaxng/tutor6_1_5.err1
-rw-r--r--result/relaxng/tutor6_1_err1
-rw-r--r--result/relaxng/tutor6_1_valid0
-rw-r--r--result/relaxng/tutor6_2_10
-rw-r--r--result/relaxng/tutor6_2_1.err1
-rw-r--r--result/relaxng/tutor6_2_20
-rw-r--r--result/relaxng/tutor6_2_2.err1
-rw-r--r--result/relaxng/tutor6_2_30
-rw-r--r--result/relaxng/tutor6_2_3.err1
-rw-r--r--result/relaxng/tutor6_2_40
-rw-r--r--result/relaxng/tutor6_2_4.err3
-rw-r--r--result/relaxng/tutor6_2_err1
-rw-r--r--result/relaxng/tutor6_2_valid0
-rw-r--r--result/relaxng/tutor6_3_10
-rw-r--r--result/relaxng/tutor6_3_1.err2
-rw-r--r--result/relaxng/tutor6_3_err1
-rw-r--r--result/relaxng/tutor6_3_valid0
-rw-r--r--result/relaxng/tutor7_1_10
-rw-r--r--result/relaxng/tutor7_1_1.err1
-rw-r--r--result/relaxng/tutor7_1_20
-rw-r--r--result/relaxng/tutor7_1_2.err4
-rw-r--r--result/relaxng/tutor7_1_30
-rw-r--r--result/relaxng/tutor7_1_3.err4
-rw-r--r--result/relaxng/tutor7_1_40
-rw-r--r--result/relaxng/tutor7_1_4.err1
-rw-r--r--result/relaxng/tutor7_1_err1
-rw-r--r--result/relaxng/tutor7_1_valid0
-rw-r--r--result/relaxng/tutor7_2_10
-rw-r--r--result/relaxng/tutor7_2_1.err1
-rw-r--r--result/relaxng/tutor7_2_20
-rw-r--r--result/relaxng/tutor7_2_2.err1
-rw-r--r--result/relaxng/tutor7_2_30
-rw-r--r--result/relaxng/tutor7_2_3.err1
-rw-r--r--result/relaxng/tutor7_2_40
-rw-r--r--result/relaxng/tutor7_2_4.err4
-rw-r--r--result/relaxng/tutor7_2_err1
-rw-r--r--result/relaxng/tutor7_2_valid0
-rw-r--r--result/relaxng/tutor7_3_10
-rw-r--r--result/relaxng/tutor7_3_1.err1
-rw-r--r--result/relaxng/tutor7_3_20
-rw-r--r--result/relaxng/tutor7_3_2.err1
-rw-r--r--result/relaxng/tutor7_3_30
-rw-r--r--result/relaxng/tutor7_3_3.err1
-rw-r--r--result/relaxng/tutor7_3_40
-rw-r--r--result/relaxng/tutor7_3_4.err4
-rw-r--r--result/relaxng/tutor7_3_50
-rw-r--r--result/relaxng/tutor7_3_5.err4
-rw-r--r--result/relaxng/tutor7_3_err1
-rw-r--r--result/relaxng/tutor7_3_valid0
-rw-r--r--result/relaxng/tutor8_1_10
-rw-r--r--result/relaxng/tutor8_1_1.err1
-rw-r--r--result/relaxng/tutor8_1_20
-rw-r--r--result/relaxng/tutor8_1_2.err1
-rw-r--r--result/relaxng/tutor8_1_err1
-rw-r--r--result/relaxng/tutor8_1_valid0
-rw-r--r--result/relaxng/tutor8_2_10
-rw-r--r--result/relaxng/tutor8_2_1.err1
-rw-r--r--result/relaxng/tutor8_2_20
-rw-r--r--result/relaxng/tutor8_2_2.err1
-rw-r--r--result/relaxng/tutor8_2_30
-rw-r--r--result/relaxng/tutor8_2_3.err1
-rw-r--r--result/relaxng/tutor8_2_40
-rw-r--r--result/relaxng/tutor8_2_4.err3
-rw-r--r--result/relaxng/tutor8_2_50
-rw-r--r--result/relaxng/tutor8_2_5.err4
-rw-r--r--result/relaxng/tutor8_2_60
-rw-r--r--result/relaxng/tutor8_2_6.err3
-rw-r--r--result/relaxng/tutor8_2_err1
-rw-r--r--result/relaxng/tutor8_2_valid0
-rw-r--r--result/relaxng/tutor8_3_10
-rw-r--r--result/relaxng/tutor8_3_1.err1
-rw-r--r--result/relaxng/tutor8_3_err1
-rw-r--r--result/relaxng/tutor8_3_valid0
-rw-r--r--result/relaxng/tutor9_10_10
-rw-r--r--result/relaxng/tutor9_10_1.err1
-rw-r--r--result/relaxng/tutor9_10_err1
-rw-r--r--result/relaxng/tutor9_10_valid0
-rw-r--r--result/relaxng/tutor9_11_10
-rw-r--r--result/relaxng/tutor9_11_1.err1
-rw-r--r--result/relaxng/tutor9_11_err1
-rw-r--r--result/relaxng/tutor9_11_valid0
-rw-r--r--result/relaxng/tutor9_12_10
-rw-r--r--result/relaxng/tutor9_12_1.err1
-rw-r--r--result/relaxng/tutor9_12_err1
-rw-r--r--result/relaxng/tutor9_12_valid0
-rw-r--r--result/relaxng/tutor9_1_10
-rw-r--r--result/relaxng/tutor9_1_1.err1
-rw-r--r--result/relaxng/tutor9_1_err1
-rw-r--r--result/relaxng/tutor9_1_valid0
-rw-r--r--result/relaxng/tutor9_2_10
-rw-r--r--result/relaxng/tutor9_2_1.err1
-rw-r--r--result/relaxng/tutor9_2_20
-rw-r--r--result/relaxng/tutor9_2_2.err1
-rw-r--r--result/relaxng/tutor9_2_err1
-rw-r--r--result/relaxng/tutor9_2_valid0
-rw-r--r--result/relaxng/tutor9_3_10
-rw-r--r--result/relaxng/tutor9_3_1.err1
-rw-r--r--result/relaxng/tutor9_3_20
-rw-r--r--result/relaxng/tutor9_3_2.err1
-rw-r--r--result/relaxng/tutor9_3_err1
-rw-r--r--result/relaxng/tutor9_3_valid0
-rw-r--r--result/relaxng/tutor9_4_10
-rw-r--r--result/relaxng/tutor9_4_1.err1
-rw-r--r--result/relaxng/tutor9_4_20
-rw-r--r--result/relaxng/tutor9_4_2.err1
-rw-r--r--result/relaxng/tutor9_4_err1
-rw-r--r--result/relaxng/tutor9_4_valid0
-rw-r--r--result/relaxng/tutor9_5_10
-rw-r--r--result/relaxng/tutor9_5_1.err1
-rw-r--r--result/relaxng/tutor9_5_20
-rw-r--r--result/relaxng/tutor9_5_2.err3
-rw-r--r--result/relaxng/tutor9_5_30
-rw-r--r--result/relaxng/tutor9_5_3.err2
-rw-r--r--result/relaxng/tutor9_5_err1
-rw-r--r--result/relaxng/tutor9_5_valid0
-rw-r--r--result/relaxng/tutor9_6.rng24
-rw-r--r--result/relaxng/tutor9_6_10
-rw-r--r--result/relaxng/tutor9_6_1.err1
-rw-r--r--result/relaxng/tutor9_6_20
-rw-r--r--result/relaxng/tutor9_6_2.err2
-rw-r--r--result/relaxng/tutor9_6_30
-rw-r--r--result/relaxng/tutor9_6_3.err2
-rw-r--r--result/relaxng/tutor9_6_err1
-rw-r--r--result/relaxng/tutor9_6_valid0
-rw-r--r--result/relaxng/tutor9_7_10
-rw-r--r--result/relaxng/tutor9_7_1.err1
-rw-r--r--result/relaxng/tutor9_7_err1
-rw-r--r--result/relaxng/tutor9_7_valid0
-rw-r--r--result/relaxng/tutor9_8_10
-rw-r--r--result/relaxng/tutor9_8_1.err1
-rw-r--r--result/relaxng/tutor9_8_err1
-rw-r--r--result/relaxng/tutor9_8_valid0
-rw-r--r--result/relaxng/tutor9_9_10
-rw-r--r--result/relaxng/tutor9_9_1.err1
-rw-r--r--result/relaxng/tutor9_9_err1
-rw-r--r--result/relaxng/tutor9_9_valid0
-rw-r--r--result/relaxng/tutorA_err1
-rw-r--r--result/relaxng/tutorA_valid0
-rw-r--r--result/schemas/all1_0_01
-rw-r--r--result/schemas/all1_0_0.err0
-rw-r--r--result/schemas/all_0_01
-rw-r--r--result/schemas/all_0_0.err0
-rw-r--r--result/schemas/all_0_11
-rw-r--r--result/schemas/all_0_1.err0
-rw-r--r--result/schemas/all_0_21
-rw-r--r--result/schemas/all_0_2.err0
-rw-r--r--result/schemas/all_0_31
-rw-r--r--result/schemas/all_0_3.err1
-rw-r--r--result/schemas/all_0_41
-rw-r--r--result/schemas/all_0_4.err1
-rw-r--r--result/schemas/all_0_51
-rw-r--r--result/schemas/all_0_5.err1
-rw-r--r--result/schemas/all_0_61
-rw-r--r--result/schemas/all_0_6.err1
-rw-r--r--result/schemas/all_0_71
-rw-r--r--result/schemas/all_0_7.err1
-rw-r--r--result/schemas/all_1_01
-rw-r--r--result/schemas/all_1_0.err0
-rw-r--r--result/schemas/all_1_11
-rw-r--r--result/schemas/all_1_1.err0
-rw-r--r--result/schemas/all_1_21
-rw-r--r--result/schemas/all_1_2.err0
-rw-r--r--result/schemas/all_1_31
-rw-r--r--result/schemas/all_1_3.err0
-rw-r--r--result/schemas/all_1_41
-rw-r--r--result/schemas/all_1_4.err0
-rw-r--r--result/schemas/all_1_51
-rw-r--r--result/schemas/all_1_5.err1
-rw-r--r--result/schemas/all_1_61
-rw-r--r--result/schemas/all_1_6.err0
-rw-r--r--result/schemas/all_1_71
-rw-r--r--result/schemas/all_1_7.err0
-rw-r--r--result/schemas/all_2_01
-rw-r--r--result/schemas/all_2_0.err1
-rw-r--r--result/schemas/all_2_11
-rw-r--r--result/schemas/all_2_1.err1
-rw-r--r--result/schemas/all_2_21
-rw-r--r--result/schemas/all_2_2.err1
-rw-r--r--result/schemas/all_2_31
-rw-r--r--result/schemas/all_2_3.err0
-rw-r--r--result/schemas/all_2_41
-rw-r--r--result/schemas/all_2_4.err1
-rw-r--r--result/schemas/all_2_51
-rw-r--r--result/schemas/all_2_5.err1
-rw-r--r--result/schemas/all_2_61
-rw-r--r--result/schemas/all_2_6.err0
-rw-r--r--result/schemas/all_2_71
-rw-r--r--result/schemas/all_2_7.err0
-rw-r--r--result/schemas/attr0_0_01
-rw-r--r--result/schemas/attr0_0_0.err0
-rw-r--r--result/schemas/choice_0_01
-rw-r--r--result/schemas/choice_0_0.err0
-rw-r--r--result/schemas/choice_0_11
-rw-r--r--result/schemas/choice_0_1.err0
-rw-r--r--result/schemas/choice_0_21
-rw-r--r--result/schemas/choice_0_2.err1
-rw-r--r--result/schemas/choice_0_31
-rw-r--r--result/schemas/choice_0_3.err1
-rw-r--r--result/schemas/choice_0_41
-rw-r--r--result/schemas/choice_0_4.err1
-rw-r--r--result/schemas/choice_0_51
-rw-r--r--result/schemas/choice_0_5.err1
-rw-r--r--result/schemas/choice_0_61
-rw-r--r--result/schemas/choice_0_6.err1
-rw-r--r--result/schemas/choice_1_01
-rw-r--r--result/schemas/choice_1_0.err0
-rw-r--r--result/schemas/choice_1_11
-rw-r--r--result/schemas/choice_1_1.err0
-rw-r--r--result/schemas/choice_1_21
-rw-r--r--result/schemas/choice_1_2.err1
-rw-r--r--result/schemas/choice_1_31
-rw-r--r--result/schemas/choice_1_3.err1
-rw-r--r--result/schemas/choice_1_41
-rw-r--r--result/schemas/choice_1_4.err0
-rw-r--r--result/schemas/choice_1_51
-rw-r--r--result/schemas/choice_1_5.err1
-rw-r--r--result/schemas/choice_1_61
-rw-r--r--result/schemas/choice_1_6.err1
-rw-r--r--result/schemas/choice_2_01
-rw-r--r--result/schemas/choice_2_0.err0
-rw-r--r--result/schemas/choice_2_11
-rw-r--r--result/schemas/choice_2_1.err0
-rw-r--r--result/schemas/choice_2_21
-rw-r--r--result/schemas/choice_2_2.err0
-rw-r--r--result/schemas/choice_2_31
-rw-r--r--result/schemas/choice_2_3.err0
-rw-r--r--result/schemas/choice_2_41
-rw-r--r--result/schemas/choice_2_4.err1
-rw-r--r--result/schemas/choice_2_51
-rw-r--r--result/schemas/choice_2_5.err0
-rw-r--r--result/schemas/choice_2_61
-rw-r--r--result/schemas/choice_2_6.err1
-rw-r--r--result/schemas/date_0_01
-rw-r--r--result/schemas/date_0_0.err0
-rw-r--r--result/schemas/deter0_0_00
-rw-r--r--result/schemas/deter0_0_0.err1
-rw-r--r--result/schemas/dur_0_01
-rw-r--r--result/schemas/dur_0_0.err0
-rw-r--r--result/schemas/elem0_0_01
-rw-r--r--result/schemas/elem0_0_0.err0
-rw-r--r--result/schemas/empty_0_01
-rw-r--r--result/schemas/empty_0_0.err0
-rw-r--r--result/schemas/empty_1_01
-rw-r--r--result/schemas/empty_1_0.err0
-rw-r--r--result/schemas/extension0_0_01
-rw-r--r--result/schemas/extension0_0_0.err0
-rw-r--r--result/schemas/extension1_0_01
-rw-r--r--result/schemas/extension1_0_0.err0
-rw-r--r--result/schemas/extension1_0_11
-rw-r--r--result/schemas/extension1_0_1.err1
-rw-r--r--result/schemas/extension1_0_21
-rw-r--r--result/schemas/extension1_0_2.err1
-rw-r--r--result/schemas/group0_0_01
-rw-r--r--result/schemas/group0_0_0.err1
-rw-r--r--result/schemas/hexbinary_0_01
-rw-r--r--result/schemas/hexbinary_0_0.err0
-rw-r--r--result/schemas/hexbinary_0_11
-rw-r--r--result/schemas/hexbinary_0_1.err9
-rw-r--r--result/schemas/import0_0_01
-rw-r--r--result/schemas/import0_0_0.err0
-rw-r--r--result/schemas/item_0_01
-rw-r--r--result/schemas/item_0_0.err0
-rw-r--r--result/schemas/item_1_01
-rw-r--r--result/schemas/item_1_0.err0
-rw-r--r--result/schemas/length1_0_01
-rw-r--r--result/schemas/length1_0_0.err0
-rw-r--r--result/schemas/length2_0_01
-rw-r--r--result/schemas/length2_0_0.err0
-rw-r--r--result/schemas/length3_0_00
-rw-r--r--result/schemas/length3_0_0.err1
-rw-r--r--result/schemas/list0_0_01
-rw-r--r--result/schemas/list0_0_0.err0
-rw-r--r--result/schemas/list0_0_11
-rw-r--r--result/schemas/list0_0_1.err1
-rw-r--r--result/schemas/list0_0_21
-rw-r--r--result/schemas/list0_0_2.err0
-rw-r--r--result/schemas/list0_1_01
-rw-r--r--result/schemas/list0_1_0.err1
-rw-r--r--result/schemas/list0_1_11
-rw-r--r--result/schemas/list0_1_1.err1
-rw-r--r--result/schemas/list0_1_21
-rw-r--r--result/schemas/list0_1_2.err0
-rw-r--r--result/schemas/mixed0_0_01
-rw-r--r--result/schemas/mixed0_0_0.err0
-rw-r--r--result/schemas/mixed1_0_01
-rw-r--r--result/schemas/mixed1_0_0.err0
-rw-r--r--result/schemas/ns0_0_01
-rw-r--r--result/schemas/ns0_0_0.err0
-rw-r--r--result/schemas/ns0_0_11
-rw-r--r--result/schemas/ns0_0_1.err0
-rw-r--r--result/schemas/ns0_0_21
-rw-r--r--result/schemas/ns0_0_2.err2
-rw-r--r--result/schemas/ns0_0_31
-rw-r--r--result/schemas/ns0_0_3.err1
-rw-r--r--result/schemas/ns0_0_41
-rw-r--r--result/schemas/ns0_0_4.err1
-rw-r--r--result/schemas/ns0_1_01
-rw-r--r--result/schemas/ns0_1_0.err1
-rw-r--r--result/schemas/ns0_1_11
-rw-r--r--result/schemas/ns0_1_1.err1
-rw-r--r--result/schemas/ns0_1_21
-rw-r--r--result/schemas/ns0_1_2.err2
-rw-r--r--result/schemas/ns0_1_31
-rw-r--r--result/schemas/ns0_1_3.err0
-rw-r--r--result/schemas/ns0_1_41
-rw-r--r--result/schemas/ns0_1_4.err0
-rw-r--r--result/schemas/ns1_0_01
-rw-r--r--result/schemas/ns1_0_0.err0
-rw-r--r--result/schemas/ns2_0_01
-rw-r--r--result/schemas/ns2_0_0.err0
-rw-r--r--result/schemas/po0_0_01
-rw-r--r--result/schemas/po0_0_0.err0
-rw-r--r--result/schemas/po1_0_01
-rw-r--r--result/schemas/po1_0_0.err0
-rw-r--r--result/schemas/restriction0_0_01
-rw-r--r--result/schemas/restriction0_0_0.err0
-rw-r--r--result/schemas/seq0_0_01
-rw-r--r--result/schemas/seq0_0_0.err0
-rw-r--r--result/schemas/vdv-first0_0_01
-rw-r--r--result/schemas/vdv-first0_0_0.err0
-rw-r--r--result/schemas/vdv-first1_0_01
-rw-r--r--result/schemas/vdv-first1_0_0.err0
-rw-r--r--result/schemas/vdv-first2_0_01
-rw-r--r--result/schemas/vdv-first2_0_0.err0
-rw-r--r--result/schemas/vdv-first3_0_01
-rw-r--r--result/schemas/vdv-first3_0_0.err0
-rw-r--r--result/schemas/vdv-first4_0_01
-rw-r--r--result/schemas/vdv-first4_0_0.err0
-rw-r--r--result/schemas/vdv-first4_0_11
-rw-r--r--result/schemas/vdv-first4_0_1.err1
-rw-r--r--result/schemas/vdv-first4_0_21
-rw-r--r--result/schemas/vdv-first4_0_2.err1
-rw-r--r--result/schemas/vdv-first5_0_01
-rw-r--r--result/schemas/vdv-first5_0_0.err0
-rw-r--r--result/scripts/base4
-rw-r--r--result/scripts/base24
-rw-r--r--result/slashdot.rdf65
-rw-r--r--result/slashdot.rdf.rdr218
-rw-r--r--result/slashdot.rdf.sax221
-rw-r--r--result/slashdot.xml113
-rw-r--r--result/slashdot.xml.rdr514
-rw-r--r--result/slashdot.xml.sax517
-rw-r--r--result/slashdot16.xmlbin0 -> 10374 bytes
-rw-r--r--result/slashdot16.xml.rdr718
-rw-r--r--result/slashdot16.xml.sax721
-rw-r--r--result/svg1161
-rw-r--r--result/svg1.rdr477
-rw-r--r--result/svg1.sax613
-rw-r--r--result/svg256
-rw-r--r--result/svg2.rdr178
-rw-r--r--result/svg2.sax189
-rw-r--r--result/svg3723
-rw-r--r--result/svg3.rdr2164
-rw-r--r--result/svg3.sax2407
-rw-r--r--result/title.xml2
-rw-r--r--result/title.xml.rdr3
-rw-r--r--result/title.xml.sax6
-rw-r--r--result/tstblanks.xml2
-rw-r--r--result/tstblanks.xml.rdr3
-rw-r--r--result/tstblanks.xml.sax6
-rw-r--r--result/utf16bebom.xmlbin0 -> 344 bytes
-rw-r--r--result/utf16bebom.xml.rdr4
-rw-r--r--result/utf16bebom.xml.sax8
-rw-r--r--result/utf16bom.xmlbin0 -> 258 bytes
-rw-r--r--result/utf16bom.xml.rdr3
-rw-r--r--result/utf16bom.xml.sax7
-rw-r--r--result/utf16lebom.xmlbin0 -> 344 bytes
-rw-r--r--result/utf16lebom.xml.rdr4
-rw-r--r--result/utf16lebom.xml.sax8
-rw-r--r--result/utf8bom.xml2
-rw-r--r--result/utf8bom.xml.rdr1
-rw-r--r--result/utf8bom.xml.sax5
-rw-r--r--result/valid/127772.xml5
-rw-r--r--result/valid/127772.xml.err0
-rw-r--r--result/valid/REC-xml-19980210.xml4154
-rw-r--r--result/valid/REC-xml-19980210.xml.err0
-rw-r--r--result/valid/dia.xml139
-rw-r--r--result/valid/dia.xml.err0
-rw-r--r--result/valid/id1.xml13
-rw-r--r--result/valid/id1.xml.err0
-rw-r--r--result/valid/id2.xml14
-rw-r--r--result/valid/id2.xml.err0
-rw-r--r--result/valid/id3.xml14
-rw-r--r--result/valid/id3.xml.err0
-rw-r--r--result/valid/index.xml808
-rw-r--r--result/valid/index.xml.err0
-rw-r--r--result/valid/mixed_ns.xml16
-rw-r--r--result/valid/mixed_ns.xml.err0
-rw-r--r--result/valid/ns.xml7
-rw-r--r--result/valid/ns.xml.err0
-rw-r--r--result/valid/ns2.xml11
-rw-r--r--result/valid/ns2.xml.err0
-rw-r--r--result/valid/rss.xml169
-rw-r--r--result/valid/rss.xml.err3
-rw-r--r--result/valid/t4.dtd0
-rw-r--r--result/valid/t4.dtd.err6
-rw-r--r--result/valid/t4.xml3
-rw-r--r--result/valid/t4.xml.err0
-rw-r--r--result/valid/t4a.dtd0
-rw-r--r--result/valid/t4a.dtd.err6
-rw-r--r--result/valid/t4a.xml3
-rw-r--r--result/valid/t4a.xml.err0
-rw-r--r--result/valid/t6.dtd0
-rw-r--r--result/valid/t6.dtd.err6
-rw-r--r--result/valid/t6.xml3
-rw-r--r--result/valid/t6.xml.err0
-rw-r--r--result/valid/t8.xml0
-rw-r--r--result/valid/t8.xml.err18
-rw-r--r--result/valid/t8a.xml0
-rw-r--r--result/valid/t8a.xml.err18
-rw-r--r--result/valid/t9.xml10
-rw-r--r--result/valid/t9.xml.err0
-rw-r--r--result/valid/t9a.xml10
-rw-r--r--result/valid/t9a.xml.err0
-rw-r--r--result/valid/xhtml1.xhtml1453
-rw-r--r--result/valid/xhtml1.xhtml.err0
-rw-r--r--result/valid/xlink.xml525
-rw-r--r--result/valid/xlink.xml.err6
-rw-r--r--result/wap.xml24
-rw-r--r--result/wap.xml.rdr70
-rw-r--r--result/wap.xml.sax86
-rw-r--r--result/wml.xml10
-rw-r--r--result/wml.xml.rdr24
-rw-r--r--result/wml.xml.sax31
-rw-r--r--result/xhtml130
-rw-r--r--result/xhtml1.rdr95
-rw-r--r--result/xhtml1.sax100
-rw-r--r--result/xml17
-rw-r--r--result/xml1.rdr4
-rw-r--r--result/xml1.sax24
-rw-r--r--result/xml28
-rw-r--r--result/xml2.rdr6
-rw-r--r--result/xml2.sax17
-rw-r--r--test/.cvsignore2
-rw-r--r--test/.memdump4
-rw-r--r--test/HTML/Down.html12
-rw-r--r--test/HTML/attrents.html5
-rw-r--r--test/HTML/autoclose.html1
-rw-r--r--test/HTML/autoclose2.html1
-rw-r--r--test/HTML/autoclose3.html3
-rw-r--r--test/HTML/cf_128.html20
-rw-r--r--test/HTML/doc2.htm30
-rw-r--r--test/HTML/doc3.htm851
-rw-r--r--test/HTML/entities.html5
-rw-r--r--test/HTML/fp40.htm166
-rw-r--r--test/HTML/liclose.html13
-rw-r--r--test/HTML/lt.html5
-rw-r--r--test/HTML/pre.html5
-rw-r--r--test/HTML/reg1.html10
-rw-r--r--test/HTML/reg2.html12
-rw-r--r--test/HTML/reg3.html13
-rw-r--r--test/HTML/reg4.html12
-rw-r--r--test/HTML/script.html9
-rw-r--r--test/HTML/test2.html33
-rw-r--r--test/HTML/test3.html34
-rw-r--r--test/HTML/wired.html516
-rwxr-xr-xtest/SVG/4rects.xml11
-rwxr-xr-xtest/SVG/a-valid.xml10
-rwxr-xr-xtest/SVG/a-wf.xml9
-rwxr-xr-xtest/SVG/bike.xml41
-rwxr-xr-xtest/SVG/circle.xml11
-rwxr-xr-xtest/SVG/defs.xml14
-rwxr-xr-xtest/SVG/desc.xml14
-rwxr-xr-xtest/SVG/ellipse.xml10
-rwxr-xr-xtest/SVG/flower2.xml44
-rwxr-xr-xtest/SVG/gradient.xml16
-rwxr-xr-xtest/SVG/group01.xml15
-rwxr-xr-xtest/SVG/group02.xml13
-rwxr-xr-xtest/SVG/group03.xml13
-rwxr-xr-xtest/SVG/image-valid.xml11
-rwxr-xr-xtest/SVG/image-wf.xml11
-rwxr-xr-xtest/SVG/lin-gradient.xml16
-rwxr-xr-xtest/SVG/marker.xml28
-rwxr-xr-xtest/SVG/mask.xml13
-rwxr-xr-xtest/SVG/mathswitch.xml32
-rwxr-xr-xtest/SVG/parentns.xml12
-rwxr-xr-xtest/SVG/path01.xml5
-rwxr-xr-xtest/SVG/path02.xml10
-rwxr-xr-xtest/SVG/patternfill.xml12
-rwxr-xr-xtest/SVG/polyline.xml9
-rwxr-xr-xtest/SVG/private.xml19
-rwxr-xr-xtest/SVG/rad-gradient.xml17
-rwxr-xr-xtest/SVG/rectangle.xml10
-rwxr-xr-xtest/SVG/richdesc.xml12
-rwxr-xr-xtest/SVG/script.xml13
-rwxr-xr-xtest/SVG/structure01.xml10
-rwxr-xr-xtest/SVG/style.xml11
-rwxr-xr-xtest/SVG/switch.xml21
-rwxr-xr-xtest/SVG/symbol-use.xml28
-rwxr-xr-xtest/SVG/template.xml9
-rwxr-xr-xtest/SVG/text01.xml12
-rwxr-xr-xtest/SVG/text02.xml17
-rwxr-xr-xtest/SVG/text03.xml8
-rwxr-xr-xtest/SVG/toap01.xml10
-rwxr-xr-xtest/SVG/toap02.xml33
-rwxr-xr-xtest/SVG/transform.xml26
-rwxr-xr-xtest/SVG/trivial.xml6
-rwxr-xr-xtest/SVG/twin-gradients.xml19
-rwxr-xr-xtest/SVG/v-template.xml9
-rwxr-xr-xtest/SVG/viewport-nest.xml13
-rwxr-xr-xtest/SVG/viewport-transform.xml46
-rwxr-xr-xtest/SVG/viewport.xml11
-rwxr-xr-xtest/SVG/wf-template.xml7
-rw-r--r--test/URI/smith.uri15
-rw-r--r--test/URI/uri.data18
-rw-r--r--test/VC/AttributeDefaultLegal12
-rw-r--r--test/VC/DuplicateType5
-rw-r--r--test/VC/ElementValid3
-rw-r--r--test/VC/ElementValid24
-rw-r--r--test/VC/ElementValid34
-rw-r--r--test/VC/ElementValid47
-rw-r--r--test/VC/ElementValid57
-rw-r--r--test/VC/ElementValid67
-rw-r--r--test/VC/ElementValid77
-rw-r--r--test/VC/ElementValid87
-rw-r--r--test/VC/Enumeration5
-rw-r--r--test/VC/NS113
-rw-r--r--test/VC/NS213
-rw-r--r--test/VC/NS39
-rw-r--r--test/VC/OneID6
-rw-r--r--test/VC/OneID26
-rw-r--r--test/VC/OneID34
-rw-r--r--test/VC/PENesting2
-rw-r--r--test/VC/PENesting23
-rw-r--r--test/VC/UniqueElementTypeDeclaration7
-rw-r--r--test/VC/UniqueElementTypeDeclaration28
-rw-r--r--test/VC/dtds/a.dtd2
-rw-r--r--test/VC/dtds/doc.dtd2
-rw-r--r--test/VCM/21.xml8
-rw-r--r--test/VCM/v1.xml4
-rw-r--r--test/VCM/v10.xml5
-rw-r--r--test/VCM/v11.xml5
-rw-r--r--test/VCM/v12.xml9
-rw-r--r--test/VCM/v13.xml7
-rw-r--r--test/VCM/v14.xml9
-rw-r--r--test/VCM/v15.xml9
-rw-r--r--test/VCM/v16.xml8
-rw-r--r--test/VCM/v17.xml7
-rw-r--r--test/VCM/v18.xml7
-rw-r--r--test/VCM/v19.xml7
-rw-r--r--test/VCM/v2.xml4
-rw-r--r--test/VCM/v20.xml10
-rw-r--r--test/VCM/v21.xml7
-rw-r--r--test/VCM/v22.xml15
-rw-r--r--test/VCM/v23.xml10
-rw-r--r--test/VCM/v24.xml16
-rw-r--r--test/VCM/v3.xml8
-rw-r--r--test/VCM/v4.xml5
-rw-r--r--test/VCM/v5.xml7
-rw-r--r--test/VCM/v6.xml9
-rw-r--r--test/VCM/v7.xml8
-rw-r--r--test/VCM/v8.xml5
-rw-r--r--test/VCM/v9.xml5
-rw-r--r--test/WFC/ElemTypeMatch2
-rw-r--r--test/WFC/EntityDeclared2
-rw-r--r--test/WFC/EntityDeclared25
-rw-r--r--test/WFC/EntityDeclared33
-rw-r--r--test/WFC/EntityDeclared46
-rw-r--r--test/WFC/EntityDeclared56
-rw-r--r--test/WFC/LegalCharacter2
-rw-r--r--test/WFC/NoExternalEntityRef5
-rw-r--r--test/WFC/NoLtInAttValue5
-rw-r--r--test/WFC/NoRecursion7
-rw-r--r--test/WFC/PEintsubset6
-rw-r--r--test/WFC/UniqueAttSpec2
-rw-r--r--test/WFC/UniqueAttSpec22
-rw-r--r--test/XInclude/docs/.memdump4
-rw-r--r--test/XInclude/docs/docids.xml15
-rw-r--r--test/XInclude/docs/fallback.xml6
-rw-r--r--test/XInclude/docs/include.xml4
-rw-r--r--test/XInclude/docs/nodes.xml4
-rw-r--r--test/XInclude/docs/nodes2.xml4
-rw-r--r--test/XInclude/docs/nodes3.xml4
-rw-r--r--test/XInclude/docs/recursive.xml3
-rw-r--r--test/XInclude/docs/tstencoding.xml5
-rw-r--r--test/XInclude/docs/txtinclude.xml4
-rw-r--r--test/XInclude/ents/ids.xml10
-rw-r--r--test/XInclude/ents/inc.txt1
-rw-r--r--test/XInclude/ents/isolatin.txt1
-rw-r--r--test/XInclude/ents/something.txt1
-rw-r--r--test/XInclude/ents/something.xml5
-rw-r--r--test/XInclude/ents/sub-inc.ent2
-rw-r--r--test/XPath/docs/chapters28
-rw-r--r--test/XPath/docs/id28
-rw-r--r--test/XPath/docs/simple12
-rw-r--r--test/XPath/docs/str9
-rw-r--r--test/XPath/docs/usr112
-rw-r--r--test/XPath/docs/vid43
-rw-r--r--test/XPath/expr/base5
-rw-r--r--test/XPath/expr/compare46
-rw-r--r--test/XPath/expr/equality26
-rw-r--r--test/XPath/expr/floats61
-rw-r--r--test/XPath/expr/functions25
-rw-r--r--test/XPath/expr/strings34
-rw-r--r--test/XPath/tests/chaptersbase9
-rw-r--r--test/XPath/tests/chaptersprefol8
-rw-r--r--test/XPath/tests/idsimple3
-rw-r--r--test/XPath/tests/simpleabbr10
-rw-r--r--test/XPath/tests/simplebase9
-rw-r--r--test/XPath/tests/usr1check1
-rw-r--r--test/XPath/tests/vidbase5
-rw-r--r--test/XPath/xptr/chapterschildseq8
-rw-r--r--test/XPath/xptr/chaptersparts6
-rw-r--r--test/XPath/xptr/chaptersrange4
-rw-r--r--test/XPath/xptr/strpoint9
-rw-r--r--test/XPath/xptr/strrange6
-rw-r--r--test/XPath/xptr/strrange23
-rw-r--r--test/XPath/xptr/strrange34
-rw-r--r--test/XPath/xptr/vidbase2
-rw-r--r--test/XPath/xptr/vidchildseq4
-rw-r--r--test/XPath/xptr/vidparts3
-rw-r--r--test/att12
-rw-r--r--test/att21
-rw-r--r--test/att31
-rw-r--r--test/att49264
-rw-r--r--test/att573
-rw-r--r--test/att66
-rw-r--r--test/att710
-rw-r--r--test/att81
-rw-r--r--test/attrib.xml1
-rw-r--r--test/automata/a14
-rw-r--r--test/automata/aba26
-rw-r--r--test/automata/abaa43
-rw-r--r--test/automata/abba30
-rw-r--r--test/automata/po19
-rw-r--r--test/bigentname.xml5
-rw-r--r--test/bigname.xml1
-rw-r--r--test/bigname2.xml1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-09.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-09.xpath8
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-10.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-10.xpath12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-11.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-11.xpath11
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-12.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-12.xpath12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-13.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-13.xpath10
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-14.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-14.xpath10
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-15.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-15.xpath10
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-16.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-16.xpath9
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-17.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-17.xpath12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-18.ns1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-18.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-18.xpath8
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-19.ns1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-19.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-19.xpath12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-20.ns1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-20.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-20.xpath11
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-21.ns1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-21.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-21.xpath12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-22.ns1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-22.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-22.xpath10
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-23.ns1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-23.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-23.xpath10
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-24.ns1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-24.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-24.xpath10
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-25.ns1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-25.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-25.xpath9
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-26.ns1
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-26.xml12
-rw-r--r--test/c14n/exc-without-comments/merlin-c14n-two-26.xpath12
-rw-r--r--test/c14n/exc-without-comments/test-0.xml18
-rw-r--r--test/c14n/exc-without-comments/test-0.xpath3
-rw-r--r--test/c14n/exc-without-comments/test-1.ns1
-rw-r--r--test/c14n/exc-without-comments/test-1.xml18
-rw-r--r--test/c14n/exc-without-comments/test-1.xpath3
-rw-r--r--test/c14n/with-comments/doc.dtd0
-rw-r--r--test/c14n/with-comments/example-1.xml14
-rw-r--r--test/c14n/with-comments/example-2.xml11
-rw-r--r--test/c14n/with-comments/example-3.xml18
-rw-r--r--test/c14n/with-comments/example-4.xml9
-rw-r--r--test/c14n/with-comments/example-5.xml12
-rw-r--r--test/c14n/with-comments/example-6.xml2
-rw-r--r--test/c14n/with-comments/example-7.xml11
-rw-r--r--test/c14n/with-comments/example-7.xpath10
-rw-r--r--test/c14n/with-comments/world.txt1
-rw-r--r--test/c14n/without-comments/doc.dtd0
-rw-r--r--test/c14n/without-comments/example-1.xml14
-rw-r--r--test/c14n/without-comments/example-2.xml11
-rw-r--r--test/c14n/without-comments/example-3.xml18
-rw-r--r--test/c14n/without-comments/example-4.xml9
-rw-r--r--test/c14n/without-comments/example-5.xml12
-rw-r--r--test/c14n/without-comments/example-6.xml2
-rw-r--r--test/c14n/without-comments/example-7.xml11
-rw-r--r--test/c14n/without-comments/example-7.xpath10
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-00.xml12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-00.xpath8
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-01.xml12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-01.xpath12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-02.xml12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-02.xpath11
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-03.xml12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-03.xpath12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-04.xml12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-04.xpath10
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-05.xml12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-05.xpath10
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-06.xml12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-06.xpath10
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-07.xml12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-07.xpath9
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-08.xml12
-rw-r--r--test/c14n/without-comments/merlin-c14n-two-08.xpath12
-rw-r--r--test/c14n/without-comments/test-0.xml9
-rw-r--r--test/c14n/without-comments/test-0.xpath14
-rw-r--r--test/c14n/without-comments/test-1.xml43
-rw-r--r--test/c14n/without-comments/test-1.xpath14
-rw-r--r--test/c14n/without-comments/test-2.xml8
-rw-r--r--test/c14n/without-comments/test-2.xpath8
-rw-r--r--test/c14n/without-comments/test-3.xml18
-rw-r--r--test/c14n/without-comments/test-3.xpath3
-rw-r--r--test/c14n/without-comments/world.txt1
-rw-r--r--test/catalogs/.memdump4
-rw-r--r--test/catalogs/catal.script4
-rw-r--r--test/catalogs/catal.sgml2
-rw-r--r--test/catalogs/catal1.sgml1
-rw-r--r--test/catalogs/catal2.sgml4
-rw-r--r--test/catalogs/catal3.sgml8
-rw-r--r--test/catalogs/docbook.script5
-rw-r--r--test/catalogs/docbook.xml14
-rw-r--r--test/catalogs/registry.script4
-rw-r--r--test/catalogs/registry.xml23
-rw-r--r--test/catalogs/stylesheet.xml12
-rw-r--r--test/cdata3
-rw-r--r--test/cdata26
-rw-r--r--test/comment.xml6
-rw-r--r--test/comment2.xml6
-rw-r--r--test/dav125
-rw-r--r--test/dav104
-rw-r--r--test/dav1121
-rw-r--r--test/dav122
-rw-r--r--test/dav1316
-rw-r--r--test/dav1520
-rw-r--r--test/dav166
-rw-r--r--test/dav1722
-rw-r--r--test/dav186
-rw-r--r--test/dav1918
-rw-r--r--test/dav224
-rw-r--r--test/dav318
-rw-r--r--test/dav416
-rw-r--r--test/dav517
-rw-r--r--test/dav622
-rw-r--r--test/dav716
-rw-r--r--test/dav814
-rw-r--r--test/dav918
-rw-r--r--test/defattr.xml6
-rw-r--r--test/defattr2.xml8
-rw-r--r--test/dia199
-rw-r--r--test/dia299
-rw-r--r--test/dtd15
-rw-r--r--test/dtd108
-rw-r--r--test/dtd115
-rw-r--r--test/dtd125
-rw-r--r--test/dtd136
-rw-r--r--test/dtd24
-rw-r--r--test/dtd35
-rw-r--r--test/dtd44
-rw-r--r--test/dtd56
-rw-r--r--test/dtd66
-rw-r--r--test/dtd76
-rw-r--r--test/dtd88
-rw-r--r--test/dtd98
-rw-r--r--test/dtds/eve.dtd4
-rw-r--r--test/ent17
-rw-r--r--test/ent211
-rw-r--r--test/ent38
-rw-r--r--test/ent48
-rw-r--r--test/ent55
-rw-r--r--test/ent68
-rw-r--r--test/ent77
-rw-r--r--test/ent89
-rw-r--r--test/errors/attr1.xml1
-rw-r--r--test/errors/attr2.xml1
-rw-r--r--test/errors/dtd136
-rw-r--r--test/errors/name.xml1
-rw-r--r--test/errors/name2.xml1
-rw-r--r--test/eve.xml6
-rw-r--r--test/intsubset.xml6
-rw-r--r--test/isolat12
-rw-r--r--test/isolat2107
-rw-r--r--test/isolat310
-rw-r--r--test/namespaces/.memdump4
-rw-r--r--test/namespaces/err_0.xml1
-rw-r--r--test/namespaces/err_1.xml1
-rw-r--r--test/namespaces/err_10.xml1
-rw-r--r--test/namespaces/err_11.xml1
-rw-r--r--test/namespaces/err_2.xml1
-rw-r--r--test/namespaces/err_3.xml1
-rw-r--r--test/namespaces/err_4.xml1
-rw-r--r--test/namespaces/err_5.xml1
-rw-r--r--test/namespaces/err_6.xml1
-rw-r--r--test/namespaces/err_7.xml1
-rw-r--r--test/namespaces/err_8.xml1
-rw-r--r--test/namespaces/err_9.xml2
-rw-r--r--test/ns4
-rw-r--r--test/ns23
-rw-r--r--test/ns33
-rw-r--r--test/ns42
-rw-r--r--test/p3p24
-rw-r--r--test/pi.xml6
-rw-r--r--test/pi2.xml6
-rw-r--r--test/rdf181
-rw-r--r--test/rdf21899
-rw-r--r--test/regexp/content12
-rw-r--r--test/regexp/hard7
-rw-r--r--test/regexp/ncname6
-rw-r--r--test/regexp/ranges15
-rw-r--r--test/regexp/xpath37
-rw-r--r--test/relaxng/.memdump16
-rw-r--r--test/relaxng/OASIS/spectest.xml6845
-rw-r--r--test/relaxng/addressBook.rng24
-rw-r--r--test/relaxng/comps.rng177
-rw-r--r--test/relaxng/comps_0.xml17870
-rw-r--r--test/relaxng/demo.rng11
-rw-r--r--test/relaxng/demo.xml1
-rw-r--r--test/relaxng/demo2.rng23
-rw-r--r--test/relaxng/demo3.rng8
-rw-r--r--test/relaxng/docbook.rng9141
-rw-r--r--test/relaxng/docbook_0.xml4448
-rw-r--r--test/relaxng/empty0.rng16
-rw-r--r--test/relaxng/empty0_0.xml3
-rw-r--r--test/relaxng/empty1.rng18
-rw-r--r--test/relaxng/empty1_0.xml3
-rw-r--r--test/relaxng/empty1_1.xml2
-rw-r--r--test/relaxng/inline.rng20
-rw-r--r--test/relaxng/inline2.rng21
-rw-r--r--test/relaxng/inline3.rng22
-rw-r--r--test/relaxng/interleave0_0.rng24
-rw-r--r--test/relaxng/interleave1_0.rng15
-rw-r--r--test/relaxng/log275
-rw-r--r--test/relaxng/pattern1.rng8
-rw-r--r--test/relaxng/pattern2.rng9
-rw-r--r--test/relaxng/proofsystem.rng96
-rw-r--r--test/relaxng/res500
-rw-r--r--test/relaxng/rngbug-001.ext13
-rw-r--r--test/relaxng/rngbug-001.rng16
-rw-r--r--test/relaxng/rngbug-001.xml6
-rw-r--r--test/relaxng/spec.rng60
-rw-r--r--test/relaxng/spec1.rng14
-rw-r--r--test/relaxng/spec1_1.xml3
-rw-r--r--test/relaxng/spec_0.xml3589
-rw-r--r--test/relaxng/table.rng21
-rw-r--r--test/relaxng/testsuite.xml1708
-rw-r--r--test/relaxng/tutor10_1.rng4
-rw-r--r--test/relaxng/tutor10_10.rng13
-rw-r--r--test/relaxng/tutor10_10_1.xml5
-rw-r--r--test/relaxng/tutor10_1_1.xml1
-rw-r--r--test/relaxng/tutor10_1_2.xml1
-rw-r--r--test/relaxng/tutor10_1_3.xml1
-rw-r--r--test/relaxng/tutor10_1_4.xml1
-rw-r--r--test/relaxng/tutor10_1_5.xml1
-rw-r--r--test/relaxng/tutor10_1_6.xml1
-rw-r--r--test/relaxng/tutor10_2.rng3
-rw-r--r--test/relaxng/tutor10_2_1.xml1
-rw-r--r--test/relaxng/tutor10_2_2.xml1
-rw-r--r--test/relaxng/tutor10_2_3.xml1
-rw-r--r--test/relaxng/tutor10_2_4.xml1
-rw-r--r--test/relaxng/tutor10_3.rng12
-rw-r--r--test/relaxng/tutor10_3_1.xml3
-rw-r--r--test/relaxng/tutor10_4.rng12
-rw-r--r--test/relaxng/tutor10_4_1.xml3
-rw-r--r--test/relaxng/tutor10_5.rng13
-rw-r--r--test/relaxng/tutor10_5_1.xml3
-rw-r--r--test/relaxng/tutor10_6.rng13
-rw-r--r--test/relaxng/tutor10_6_1.xml3
-rw-r--r--test/relaxng/tutor10_7.rng9
-rw-r--r--test/relaxng/tutor10_7_1.xml3
-rw-r--r--test/relaxng/tutor10_7_2.xml3
-rw-r--r--test/relaxng/tutor10_7_3.xml3
-rw-r--r--test/relaxng/tutor10_8.rng9
-rw-r--r--test/relaxng/tutor10_8_1.xml3
-rw-r--r--test/relaxng/tutor10_8_2.xml3
-rw-r--r--test/relaxng/tutor10_8_3.xml3
-rw-r--r--test/relaxng/tutor10_9.rng14
-rw-r--r--test/relaxng/tutor10_9_1.xml5
-rw-r--r--test/relaxng/tutor11_1.rng22
-rw-r--r--test/relaxng/tutor11_1_1.xml22
-rw-r--r--test/relaxng/tutor11_1_2.xml7
-rw-r--r--test/relaxng/tutor11_1_3.xml4197
-rw-r--r--test/relaxng/tutor11_2.rng14
-rw-r--r--test/relaxng/tutor11_2_1.xml5
-rw-r--r--test/relaxng/tutor11_2_2.xml5
-rw-r--r--test/relaxng/tutor11_2_3.xml5
-rw-r--r--test/relaxng/tutor11_3.rng15
-rw-r--r--test/relaxng/tutor11_3_1.xml1
-rw-r--r--test/relaxng/tutor11_4.rng19
-rw-r--r--test/relaxng/tutor11_4_1.xml1
-rw-r--r--test/relaxng/tutor12_1.rng13
-rw-r--r--test/relaxng/tutor12_1_1.xml3
-rw-r--r--test/relaxng/tutor13_1.rng33
-rw-r--r--test/relaxng/tutor13_1_1.xml12
-rw-r--r--test/relaxng/tutor14_1.rng53
-rw-r--r--test/relaxng/tutor1_1.rng12
-rw-r--r--test/relaxng/tutor1_1_1.xml10
-rw-r--r--test/relaxng/tutor1_2.rng12
-rw-r--r--test/relaxng/tutor1_2_1.xml10
-rw-r--r--test/relaxng/tutor1_3.rng17
-rw-r--r--test/relaxng/tutor1_3_1.xml10
-rw-r--r--test/relaxng/tutor1_4.rng12
-rw-r--r--test/relaxng/tutor1_4_1.xml10
-rw-r--r--test/relaxng/tutor2_1.rng27
-rw-r--r--test/relaxng/tutor2_1_1.xml11
-rw-r--r--test/relaxng/tutor3_1.rng12
-rw-r--r--test/relaxng/tutor3_1_1.xml3
-rw-r--r--test/relaxng/tutor3_1_2.xml3
-rw-r--r--test/relaxng/tutor3_2.rng8
-rw-r--r--test/relaxng/tutor3_2_1.xml1
-rw-r--r--test/relaxng/tutor3_3.rng17
-rw-r--r--test/relaxng/tutor3_3_1.xml4
-rw-r--r--test/relaxng/tutor3_4.rng22
-rw-r--r--test/relaxng/tutor3_4_1.xml4
-rw-r--r--test/relaxng/tutor3_5.rng22
-rw-r--r--test/relaxng/tutor3_5_1.xml7
-rw-r--r--test/relaxng/tutor3_5_2.xml3
-rw-r--r--test/relaxng/tutor3_6.rng8
-rw-r--r--test/relaxng/tutor3_6_1.xml3
-rw-r--r--test/relaxng/tutor3_7.rng2
-rw-r--r--test/relaxng/tutor3_7_1.xml1
-rw-r--r--test/relaxng/tutor3_8.rng17
-rw-r--r--test/relaxng/tutor3_8_1.xml4
-rw-r--r--test/relaxng/tutor3_9.rng5
-rw-r--r--test/relaxng/tutor3_9_1.xml1
-rw-r--r--test/relaxng/tutor4_1.rng22
-rw-r--r--test/relaxng/tutor4_1_1.xml4
-rw-r--r--test/relaxng/tutor4_2.rng34
-rw-r--r--test/relaxng/tutor4_2_1.xml4
-rw-r--r--test/relaxng/tutor4_3.rng27
-rw-r--r--test/relaxng/tutor4_3_1.xml1
-rw-r--r--test/relaxng/tutor4_3_2.xml1
-rw-r--r--test/relaxng/tutor4_3_3.xml1
-rw-r--r--test/relaxng/tutor4_3_4.xml1
-rw-r--r--test/relaxng/tutor4_3_5.xml1
-rw-r--r--test/relaxng/tutor4_3_6.xml1
-rw-r--r--test/relaxng/tutor4_4.rng28
-rw-r--r--test/relaxng/tutor4_4_1.xml1
-rw-r--r--test/relaxng/tutor5_1.rng3
-rw-r--r--test/relaxng/tutor5_1_1.xml1
-rw-r--r--test/relaxng/tutor5_2.rng9
-rw-r--r--test/relaxng/tutor5_2_1.xml1
-rw-r--r--test/relaxng/tutor5_3.rng6
-rw-r--r--test/relaxng/tutor5_3_1.xml1
-rw-r--r--test/relaxng/tutor5_4.rng6
-rw-r--r--test/relaxng/tutor5_4_1.xml1
-rw-r--r--test/relaxng/tutor5_5.rng5
-rw-r--r--test/relaxng/tutor6_1.rng10
-rw-r--r--test/relaxng/tutor6_1_1.xml1
-rw-r--r--test/relaxng/tutor6_1_2.xml1
-rw-r--r--test/relaxng/tutor6_1_3.xml1
-rw-r--r--test/relaxng/tutor6_1_4.xml1
-rw-r--r--test/relaxng/tutor6_1_5.xml2
-rw-r--r--test/relaxng/tutor6_2.rng14
-rw-r--r--test/relaxng/tutor6_2_1.xml5
-rw-r--r--test/relaxng/tutor6_2_2.xml5
-rw-r--r--test/relaxng/tutor6_2_3.xml5
-rw-r--r--test/relaxng/tutor6_2_4.xml5
-rw-r--r--test/relaxng/tutor6_3.rng10
-rw-r--r--test/relaxng/tutor6_3_1.xml1
-rw-r--r--test/relaxng/tutor7_1.rng7
-rw-r--r--test/relaxng/tutor7_1_1.xml1
-rw-r--r--test/relaxng/tutor7_1_2.xml1
-rw-r--r--test/relaxng/tutor7_1_3.xml1
-rw-r--r--test/relaxng/tutor7_1_4.xml1
-rw-r--r--test/relaxng/tutor7_2.rng8
-rw-r--r--test/relaxng/tutor7_2_1.xml1
-rw-r--r--test/relaxng/tutor7_2_2.xml1
-rw-r--r--test/relaxng/tutor7_2_3.xml1
-rw-r--r--test/relaxng/tutor7_2_4.xml1
-rw-r--r--test/relaxng/tutor7_3.rng9
-rw-r--r--test/relaxng/tutor7_3_1.xml1
-rw-r--r--test/relaxng/tutor7_3_2.xml1
-rw-r--r--test/relaxng/tutor7_3_3.xml1
-rw-r--r--test/relaxng/tutor7_3_4.xml1
-rw-r--r--test/relaxng/tutor7_3_5.xml1
-rw-r--r--test/relaxng/tutor8_1.rng15
-rw-r--r--test/relaxng/tutor8_1_1.xml6
-rw-r--r--test/relaxng/tutor8_1_2.xml7
-rw-r--r--test/relaxng/tutor8_2.rng57
-rw-r--r--test/relaxng/tutor8_2_1.xml5
-rw-r--r--test/relaxng/tutor8_2_2.xml36
-rw-r--r--test/relaxng/tutor8_2_3.xml3
-rw-r--r--test/relaxng/tutor8_2_4.xml6
-rw-r--r--test/relaxng/tutor8_2_5.xml3
-rw-r--r--test/relaxng/tutor8_2_6.xml5
-rw-r--r--test/relaxng/tutor8_3.rng9
-rw-r--r--test/relaxng/tutor8_3_1.xml1
-rw-r--r--test/relaxng/tutor9_1.rng17
-rw-r--r--test/relaxng/tutor9_10.rng26
-rw-r--r--test/relaxng/tutor9_10_1.xml3
-rw-r--r--test/relaxng/tutor9_11.rng16
-rw-r--r--test/relaxng/tutor9_11_1.xml3
-rw-r--r--test/relaxng/tutor9_12.rng22
-rw-r--r--test/relaxng/tutor9_12_1.xml3
-rw-r--r--test/relaxng/tutor9_1_1.xml7
-rw-r--r--test/relaxng/tutor9_2.rng7
-rw-r--r--test/relaxng/tutor9_2_1.xml4
-rw-r--r--test/relaxng/tutor9_2_2.xml4
-rw-r--r--test/relaxng/tutor9_3.rng37
-rw-r--r--test/relaxng/tutor9_3_1.xml1
-rw-r--r--test/relaxng/tutor9_3_2.xml1
-rw-r--r--test/relaxng/tutor9_4.rng36
-rw-r--r--test/relaxng/tutor9_4_1.xml1
-rw-r--r--test/relaxng/tutor9_4_2.xml1
-rw-r--r--test/relaxng/tutor9_5.rng25
-rw-r--r--test/relaxng/tutor9_5_1.xml3
-rw-r--r--test/relaxng/tutor9_5_2.xml3
-rw-r--r--test/relaxng/tutor9_5_3.xml3
-rw-r--r--test/relaxng/tutor9_6.rng24
-rw-r--r--test/relaxng/tutor9_6_1.xml3
-rw-r--r--test/relaxng/tutor9_6_2.xml3
-rw-r--r--test/relaxng/tutor9_6_3.xml3
-rw-r--r--test/relaxng/tutor9_7.rng26
-rw-r--r--test/relaxng/tutor9_7_1.xml3
-rw-r--r--test/relaxng/tutor9_8.rng42
-rw-r--r--test/relaxng/tutor9_8_1.xml3
-rw-r--r--test/relaxng/tutor9_9.rng37
-rw-r--r--test/relaxng/tutor9_9_1.xml3
-rw-r--r--test/relaxng/tutorA.rng334
-rw-r--r--test/schemas/.memdump4
-rw-r--r--test/schemas/all.xsd16
-rw-r--r--test/schemas/all1_0.xml4
-rw-r--r--test/schemas/all1_0.xsd10
-rw-r--r--test/schemas/all_0.xml1
-rw-r--r--test/schemas/all_0.xsd12
-rw-r--r--test/schemas/all_1.xml2
-rw-r--r--test/schemas/all_1.xsd12
-rw-r--r--test/schemas/all_2.xml1
-rw-r--r--test/schemas/all_2.xsd11
-rw-r--r--test/schemas/all_3.xml1
-rw-r--r--test/schemas/all_4.xml1
-rw-r--r--test/schemas/all_5.xml1
-rw-r--r--test/schemas/all_6.xml1
-rw-r--r--test/schemas/all_7.xml1
-rw-r--r--test/schemas/attr0_0.xml1
-rw-r--r--test/schemas/attr0_0.xsd13
-rw-r--r--test/schemas/choice_0.xml3
-rw-r--r--test/schemas/choice_0.xsd13
-rw-r--r--test/schemas/choice_1.xml3
-rw-r--r--test/schemas/choice_1.xsd13
-rw-r--r--test/schemas/choice_2.xml4
-rw-r--r--test/schemas/choice_2.xsd13
-rw-r--r--test/schemas/choice_3.xml4
-rw-r--r--test/schemas/choice_4.xml2
-rw-r--r--test/schemas/choice_5.xml6
-rw-r--r--test/schemas/choice_6.xml7
-rw-r--r--test/schemas/date_0.xml25
-rw-r--r--test/schemas/date_0.xsd122
-rw-r--r--test/schemas/deter0_0.xml5
-rw-r--r--test/schemas/deter0_0.xsd16
-rw-r--r--test/schemas/dur_0.xml13
-rw-r--r--test/schemas/dur_0.xsd72
-rw-r--r--test/schemas/elem0_0.xml3
-rw-r--r--test/schemas/elem0_0.xsd16
-rw-r--r--test/schemas/empty_0.xml1
-rw-r--r--test/schemas/empty_0.xsd13
-rw-r--r--test/schemas/empty_1.xsd9
-rw-r--r--test/schemas/extension0_0.xml7
-rw-r--r--test/schemas/extension0_0.xsd20
-rw-r--r--test/schemas/extension1_0.xml1
-rw-r--r--test/schemas/extension1_0.xsd17
-rw-r--r--test/schemas/extension1_1.xml1
-rw-r--r--test/schemas/extension1_2.xml1
-rw-r--r--test/schemas/group0_0.xml3
-rw-r--r--test/schemas/group0_0.xsd18
-rw-r--r--test/schemas/hexbinary_0.xml20
-rw-r--r--test/schemas/hexbinary_0.xsd35
-rw-r--r--test/schemas/hexbinary_1.xml15
-rw-r--r--test/schemas/import0_0.imp13
-rw-r--r--test/schemas/import0_0.xml8
-rw-r--r--test/schemas/import0_0.xsd21
-rw-r--r--test/schemas/item_0.xml6
-rw-r--r--test/schemas/item_0.xsd39
-rw-r--r--test/schemas/item_1.xsd42
-rw-r--r--test/schemas/length1_0.xml1
-rw-r--r--test/schemas/length1_0.xsd11
-rw-r--r--test/schemas/length2_0.xml5
-rw-r--r--test/schemas/length2_0.xsd14
-rw-r--r--test/schemas/length3_0.xml5
-rw-r--r--test/schemas/length3_0.xsd10
-rw-r--r--test/schemas/list0_0.xml6
-rw-r--r--test/schemas/list0_0.xsd13
-rw-r--r--test/schemas/list0_1.xml3
-rw-r--r--test/schemas/list0_1.xsd13
-rw-r--r--test/schemas/list0_2.xml4
-rw-r--r--test/schemas/mixed0_0.xml1
-rw-r--r--test/schemas/mixed0_0.xsd5
-rw-r--r--test/schemas/mixed1_0.xml1
-rw-r--r--test/schemas/mixed1_0.xsd7
-rw-r--r--test/schemas/ns0_0.xml2
-rw-r--r--test/schemas/ns0_0.xsd16
-rw-r--r--test/schemas/ns0_1.xml2
-rw-r--r--test/schemas/ns0_1.xsd16
-rw-r--r--test/schemas/ns0_2.xml2
-rw-r--r--test/schemas/ns0_3.xml2
-rw-r--r--test/schemas/ns0_4.xml3
-rw-r--r--test/schemas/ns1_0.xml2
-rw-r--r--test/schemas/ns1_0.xsd3
-rw-r--r--test/schemas/ns2_0.xml1
-rw-r--r--test/schemas/ns2_0.xsd15
-rw-r--r--test/schemas/po0_0.xml32
-rw-r--r--test/schemas/po0_0.xsd59
-rw-r--r--test/schemas/po1_0.xml33
-rw-r--r--test/schemas/po1_0.xsd63
-rw-r--r--test/schemas/restriction0_0.xml5
-rw-r--r--test/schemas/restriction0_0.xsd21
-rw-r--r--test/schemas/seq0_0.xml61
-rw-r--r--test/schemas/seq0_0.xsd64
-rw-r--r--test/schemas/vdv-complexTypes.xsd37
-rw-r--r--test/schemas/vdv-first0_0.xml33
-rw-r--r--test/schemas/vdv-first0_0.xsd67
-rw-r--r--test/schemas/vdv-first1_0.xml33
-rw-r--r--test/schemas/vdv-first1_0.xsd47
-rw-r--r--test/schemas/vdv-first2_0.xml33
-rw-r--r--test/schemas/vdv-first2_0.xsd89
-rw-r--r--test/schemas/vdv-first3_0.xml33
-rw-r--r--test/schemas/vdv-first3_0.xsd68
-rw-r--r--test/schemas/vdv-first4_0.xml33
-rw-r--r--test/schemas/vdv-first4_0.xsd150
-rw-r--r--test/schemas/vdv-first4_1.xml33
-rw-r--r--test/schemas/vdv-first4_2.xml33
-rw-r--r--test/schemas/vdv-first5_0.xml33
-rw-r--r--test/schemas/vdv-first5_0.xsd85
-rw-r--r--test/schemas/vdv-simpleTypes.xsd38
-rw-r--r--test/scripts/.memdump4
-rw-r--r--test/scripts/base.script7
-rw-r--r--test/scripts/base.xml7
-rw-r--r--test/scripts/base2.script7
-rw-r--r--test/scripts/base2.xml7
-rw-r--r--test/slashdot.rdf66
-rw-r--r--test/slashdot.xml112
-rw-r--r--test/slashdot16.xmlbin0 -> 10374 bytes
-rw-r--r--test/svg1163
-rw-r--r--test/svg258
-rw-r--r--test/svg3722
-rw-r--r--test/threads/.memdump4
-rw-r--r--test/threads/a.example.org.xml6
-rw-r--r--test/threads/a/a.dtd1
-rw-r--r--test/threads/abc.dtd7
-rw-r--r--test/threads/abc.xml7
-rw-r--r--test/threads/acb.dtd7
-rw-r--r--test/threads/acb.xml7
-rw-r--r--test/threads/b.example.org.xml6
-rw-r--r--test/threads/b/b.dtd2
-rw-r--r--test/threads/bac.dtd7
-rw-r--r--test/threads/bac.xml7
-rw-r--r--test/threads/bca.dtd7
-rw-r--r--test/threads/bca.xml7
-rw-r--r--test/threads/c.example.org.xml6
-rw-r--r--test/threads/c/c.dtd1
-rw-r--r--test/threads/cab.dtd7
-rw-r--r--test/threads/cab.xml7
-rw-r--r--test/threads/cba.dtd7
-rw-r--r--test/threads/cba.xml7
-rw-r--r--test/threads/complex.xml6
-rw-r--r--test/threads/example.org.xml9
-rw-r--r--test/threads/invalid.xml2
-rw-r--r--test/threads/res80
-rw-r--r--test/title.xml2
-rw-r--r--test/tstblanks.xml495
-rw-r--r--test/utf16bebom.xmlbin0 -> 344 bytes
-rw-r--r--test/utf16bom.xmlbin0 -> 256 bytes
-rw-r--r--test/utf16lebom.xmlbin0 -> 344 bytes
-rw-r--r--test/utf8bom.xml1
-rw-r--r--test/valid/.memdump4
-rw-r--r--test/valid/127772.xml7
-rw-r--r--test/valid/REC-xml-19980210.xml4197
-rw-r--r--test/valid/dia.xml163
-rw-r--r--test/valid/dtds/127772.dtd7
-rw-r--r--test/valid/dtds/NewsMLv1.0.dtd1578
-rw-r--r--test/valid/dtds/destfoo.ent1
-rw-r--r--test/valid/dtds/nitf-2-5.dtd1004
-rwxr-xr-xtest/valid/dtds/spec.dtd972
-rw-r--r--test/valid/dtds/xhtml-lat1.ent196
-rw-r--r--test/valid/dtds/xhtml-special.ent79
-rw-r--r--test/valid/dtds/xhtml-symbol.ent242
-rw-r--r--test/valid/dtds/xhtml.cat14
-rw-r--r--test/valid/dtds/xhtml1-frameset.dtd1223
-rw-r--r--test/valid/dtds/xhtml1-strict.dtd986
-rw-r--r--test/valid/dtds/xhtml1-transitional.dtd1194
-rw-r--r--test/valid/dtds/xhtml1.dcl179
-rw-r--r--test/valid/dtds/xmlspec.dtd1102
-rw-r--r--test/valid/id1.xml13
-rw-r--r--test/valid/id2.xml14
-rw-r--r--test/valid/id3.xml14
-rw-r--r--test/valid/index.xml111
-rw-r--r--test/valid/mixed_ns.xml16
-rw-r--r--test/valid/ns.xml9
-rw-r--r--test/valid/ns2.xml14
-rw-r--r--test/valid/rss.xml177
-rw-r--r--test/valid/t4.dtd4
-rw-r--r--test/valid/t4.xml3
-rw-r--r--test/valid/t4a.dtd5
-rw-r--r--test/valid/t4a.xml3
-rw-r--r--test/valid/t6.dtd5
-rw-r--r--test/valid/t6.xml3
-rw-r--r--test/valid/t8.xml8
-rw-r--r--test/valid/t8a.xml8
-rw-r--r--test/valid/t9.xml8
-rw-r--r--test/valid/t9a.xml8
-rw-r--r--test/valid/xhtml1.xhtml1505
-rw-r--r--test/valid/xlink.xml529
-rw-r--r--test/wap.xml27
-rw-r--r--test/warning/ent83
-rw-r--r--test/warning/ent97
-rw-r--r--test/wml.xml11
-rw-r--r--test/xhtml134
-rw-r--r--test/xml17
-rw-r--r--test/xml28
-rw-r--r--test/xsdtest/.memdump4
-rw-r--r--test/xsdtest/Makefile2
-rw-r--r--test/xsdtest/xsdtest.xml806
-rw-r--r--test/xsdtest/xsdtest.xsl238
-rw-r--r--test/xsdtest/xsdtestsuite.xml5286
-rw-r--r--testAutomata.c307
-rw-r--r--testC14N.c357
-rw-r--r--testHTML.c868
-rw-r--r--testReader.c139
-rw-r--r--testRegexp.c158
-rw-r--r--testRelax.c194
-rw-r--r--testSAX.c1180
-rw-r--r--testSchemas.c185
-rw-r--r--testThreads.c201
-rw-r--r--testThreadsWin32.c150
-rw-r--r--testURI.c105
-rw-r--r--testXPath.c227
-rw-r--r--threads.c759
-rw-r--r--tree.c7026
-rw-r--r--trio.c6855
-rw-r--r--trio.h216
-rw-r--r--triodef.h220
-rw-r--r--trionan.c910
-rw-r--r--trionan.h84
-rw-r--r--triop.h150
-rw-r--r--triostr.c2102
-rw-r--r--triostr.h140
-rw-r--r--uri.c2028
-rw-r--r--valid.c6712
-rwxr-xr-xvms/build_libxml.com261
-rwxr-xr-xvms/config.vms218
-rw-r--r--vms/diffs.vms192
-rw-r--r--vms/readme.vms143
-rw-r--r--win32/.cvsignore6
-rw-r--r--win32/Makefile.bcb329
-rw-r--r--win32/Makefile.mingw322
-rw-r--r--win32/Makefile.msvc303
-rw-r--r--win32/Readme.txt226
-rw-r--r--win32/configure.js639
-rw-r--r--win32/defgen.xsl288
-rw-r--r--win32/libxml2.def.src2876
-rw-r--r--win32/wince/libxml2.vcb1
-rw-r--r--win32/wince/libxml2.vcl122
-rw-r--r--win32/wince/libxml2.vco1
-rw-r--r--win32/wince/libxml2.vcp5273
-rw-r--r--win32/wince/libxml2.vcw41
-rw-r--r--win32/wince/wincecompat.c61
-rw-r--r--win32/wince/wincecompat.h46
-rw-r--r--xinclude.c2384
-rw-r--r--xlink.c181
-rw-r--r--xml2-config.131
-rw-r--r--xml2-config.in99
-rw-r--r--xml2Conf.sh.in8
-rw-r--r--xmlIO.c3372
-rw-r--r--xmlcatalog.c594
-rw-r--r--xmllint.c2011
-rw-r--r--xmlmemory.c950
-rw-r--r--xmlreader.c4863
-rw-r--r--xmlregexp.c4612
-rw-r--r--xmlsave.c1967
-rw-r--r--xmlschemas.c6398
-rw-r--r--xmlschemastypes.c3597
-rw-r--r--xmlstring.c956
-rw-r--r--xmlunicode.c3172
-rw-r--r--xmlwriter.c4504
-rw-r--r--xpath.c11381
-rw-r--r--xpointer.c2999
2774 files changed, 563052 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..cf2e9a6
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,5 @@
+Daniel Veillard <daniel@veillard.com>
+Bjorn Reese <breese@users.sourceforge.net>
+William Brack <wbrack@mmm.com.hk>
+Igor Zlatkovic <igor@zlatkovic.com> for the Windows port
+Aleksey Sanin <aleksey@aleksey.com>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..417e955
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,27 @@
+Except where otherwise noted in the source code (e.g. the files hash.c,
+list.c and the trio files, which are covered by a similar licence but
+with different Copyright notices) all the files are:
+
+ Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is fur-
+nished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
+NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
+NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Daniel Veillard shall not
+be used in advertising or otherwise to promote the sale, use or other deal-
+ings in this Software without prior written authorization from him.
+
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..d18945d
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,20207 @@
+Tue Mar 23 12:35:08 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in doc/* News: preparing 2.6.8 release, updated and rebuilt
+ the docs.
+ * Makefile.am: use valgring fro the new Python based regression tests
+
+Mon Mar 22 20:07:27 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: remove a memory leak on schemas type facets.
+ * check-relaxng-test-suite.py check-relaxng-test-suite2.py
+ check-xsddata-test-suite.py: reduce verbosity
+ * configure.in Makefile.am: incorporated the Python regressions
+ tests for Relax-NG and Schemas Datatype to "make tests"
+
+Mon Mar 22 16:16:18 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlwriter.c include/libxml/xmlwriter.h doc/* : applied patch from
+ Alfred Mickautsch for better DTD support.
+ * SAX2.c HTMLparser.c parser.c xinclude.c xmllint.c xmlreader.c
+ xmlschemas.c: fixed bug #137867 i.e. fixed properly the way
+ reference counting is handled in the XML parser which had the
+ side effect of removing a lot of hazardous cruft added to try
+ to fix the problems associated as they popped up.
+ * xmlIO.c: FILE * close fixup for stderr/stdout
+
+Sun Mar 21 19:19:41 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * relaxng.c: added an error message when an element is not
+ found within a <choice> (bug 126093)
+
+Sat Mar 20 22:25:18 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xmlregexp.c: enhanced the logic of parsing char groups to
+ better handle initial or ending '-' (bug 135972)
+
+Sat Mar 20 19:26:03 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * relaxng.c: added check for external reference in
+ xmlRelaxNGGetElements (bug 137718)
+ * test/relaxng/rngbug-001.*, result/relaxng/rngbug-001*: added
+ regression test for above
+
+Wed Mar 17 16:37:22 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * nanohttp.c: added a close for the local file descriptor
+ (bug 137474)
+
+Mon Mar 15 15:46:59 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlsave.c: switched the output routines to use the new context.
+
+Mon Mar 15 10:37:18 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * relaxng.c: enhanced to ignore XML_XINCLUDE_START and XML_XINCLUDE_END
+ nodes (bug 137153)
+
+Sun Mar 14 13:19:20 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: applied patch from John Belmonte for anyURI.
+
+Wed Mar 10 17:22:48 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fix bug reported by Holger Rauch
+ * test/att8 result/noent/att8 result/att8 result/att8.rdr
+ result/att8.sax: added the test to th regression suite
+
+Wed Mar 10 19:42:22 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * doc/search.php: Minor change for later verson of php requiring
+ $HTTP_GET_VARS.
+
+Wed Mar 10 00:12:31 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * tree.c: Changed the flag to xmlDocCopyNode (and similar routines),
+ previously used only for recursion, to use a value of '2' to
+ indicate copy properties & namespaces, but not children.
+ * xinclude.c: changed the handling of ranges to use the above new
+ facility. Fixes Bug 134268.
+
+Tue Mar 9 18:48:51 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * win32/Makefile.bcb, win32/Makefile.mingw, win32/Makefile.msvc:
+ added new module xmlsave with patch supplied by Eric Zurcher
+ (second attempt - don't know what happened to the first one!)
+
+Tue Mar 9 09:59:25 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c python/libxml.py: applied patch from Anthony Carrico
+ providing Python bindings for the Canonicalization C14N support.
+
+Mon Mar 8 11:12:23 CET 2004 Hagen Moebius <hagen.moebius@starschiffchen.de>
+
+ * .cvsignore and python/.cvsignore patched
+
+Mon Mar 8 22:33:14 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: enhanced to assure that if xpointer is called
+ for a document, the XML_PARSE_NOENT flag is set before parsing
+ the included document so that entities will automatically get
+ taken care of.
+ * xpointer.c: corrected code so that, if an XML_ENTITY_REF node
+ is encountered, it will log it and not crash (bug 135713)
+
+Sun Mar 7 19:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: modified to make sub-includes inherit the
+ parse flags from the parent document (bug 132597)
+
+Fri Mar 5 01:13:22 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: QName handling fixes for the XML Schemas
+ support from Adam Dickmeiss
+ * test/schemas/po1_0.xsd: also fix the schemas
+ * test/schemas/ns[12]* result/schemas/ns[12]*: added the specific
+ regression tests
+
+Thu Mar 4 23:03:02 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in doc/Makefile.am include/libxml/Makefile.am:
+ paalied patch from Julio M. Merino Vidal fixing bug #134751
+ to fix --with-html-dir option.
+ * doc/*: rebuilt fully the docs
+ * doc/html/libxml-xmlsave.html: new file from new header.
+
+Thu Mar 4 16:57:50 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c testHTML.c tree.c doc/examples/*.c
+ include/libxml/xmlsave.h: fixing compilation bug with some options
+ disabled as well as --with-minimum should fix #134695
+
+Thu Mar 4 15:00:45 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlcatalog.c: allow fallback to URI lookup when SYSTEM fails,
+ should close #134092
+
+Thu Mar 4 14:39:38 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am tree.c xmlsave.c include/libxml/xmlsave.h: commiting
+ the new xmlsave module before the actuall big code change.
+
+Thu Mar 4 12:38:53 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: applied patch from Adam Dickmeiss for mixed content
+ * test/schemas/mixed* result/schemas/mixed*: added his regression
+ tests too.
+
+Mon Mar 1 15:22:06 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * testSAX.c: fix a compilation problem about a missing timb include
+
+Sat Feb 28 22:35:32 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * testSAX.c: small enhancement to prevent trying to print
+ strings with null pointers (caused "make tests" errors on
+ HP-UX)
+
+Thu Feb 26 20:19:40 MST 2004 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.xml
+ * doc/xmllint.1
+ * doc/xmllint.html
+ * doc/xmlcatalog_man.xml
+ * doc/xmlcatalog.1
+ * doc/xmlcatalog_man.html
+ applying patch from Mike Hommey to clarify XML_CATALOG_FILES
+ use
+
+Thu Feb 26 23:47:43 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: patch for cross-compilation to Windows from
+ Christophe de VIENNE.
+
+Thu Feb 26 18:52:11 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * doc/*.html, doc/html/*.html: regenerated docs using older
+ version of xsltproc pending resolution of AVT problem
+
+Thu Feb 26 10:56:29 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: applied patch from Charles Bozeman to not use
+ the system xmllint.
+
+Wed Feb 25 18:07:05 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlexports.h: applied patch from Roland Schwingel
+ for MingW
+
+Wed Feb 25 13:57:25 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am catalog.c configure.in: applied a cleanup patch
+ from Peter Breitenlohner
+ * tree.c: removed a doc build warning by fixing a param comment
+ * doc/* : rebuilt the docs
+
+Wed Feb 25 13:33:07 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c HTMLparser.c: avoid ID error message if using
+ HTML_PARSE_NOERROR should fix #130762
+
+Wed Feb 25 12:50:53 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c relaxng.c valid.c xinclude.c xmllint.c xmlreader.c:
+ fixing compilation and link option when configuring with
+ --without-valid should fix #135309
+
+Wed Feb 25 11:36:06 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: fixed the main issues reported by Peter Breitenlohner
+ * parser.c: cleanup
+ * valid.c: speedup patch from Petr Pajas
+
+Wed Feb 25 16:07:14 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: fixed a memory leak (xmlXPathLangFunction) reported
+ on the list by Mike Hommey
+
+Mon Feb 23 17:28:34 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * doc/* NEWS configure.in: preparing 2.6.7 release, updated and
+ rebuilt the documentation.
+
+Mon Feb 23 11:52:12 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * python/tests/*.py: applied patch from Malcolm Tredinnick
+ to avoid tabs in python sources, should fix #135095
+
+Sun Feb 22 23:16:23 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * testSAX.c: add --timing option
+ * relaxng.c: use the psvi field of the nodes instead of _private
+ which may be used for other purposes.
+
+Sat Feb 21 16:57:48 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: small patch to try to fix a warning with Sun One compiler
+
+Sat Feb 21 16:22:35 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: small patch removing a warning with MS compiler.
+
+Sat Feb 21 13:52:30 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: added "relaxng" option to the debugging shell
+ * Makefile.am test/errors/* result/errors/*: some regression tests
+ for some error tests cases.
+
+Fri Feb 20 09:56:47 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: xmlAttrSerializeTxtContent don't segfault if NULL
+ is passed.
+ * test/att7 result//att7*: adding an old regression test
+ laying around on my laptop
+
+Thu Feb 19 17:33:36 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: fixed xmllint --memory --stream memory consumption
+ on large file by using xmlParserInputBufferCreateStatic() with
+ the mmap'ed file
+
+Thu Feb 19 13:56:53 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: some clarification in xmlDocDumpMemory() documentation
+ * xmllint.c: fixed xmllint --stream --timing to get timings back
+
+Wed Feb 18 15:20:42 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed a problem in push mode when attribute contains
+ unescaped '>' characters, fixes bug #134566
+ * test/att6 result//att6*: added the test to the regression suite
+
+Tue Feb 17 17:26:31 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: removing a non-linear behaviour from ID/IDREF raised
+ by Petr Pajas. Call xmlListAppend instead of xmlListInsert in
+ xmlAddRef
+
+Tue Feb 17 13:27:27 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * python/tests/indexes.py python/tests/reader.py: indicated
+ encoding of the test file, needed for python 2.3
+
+Tue Feb 17 21:08:11 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: fixed problem with numbers having > 19
+ fractional places (bug 133921)
+
+Tue Feb 17 12:47:20 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: applied optimization patch from Petr Pajas
+
+Tue Feb 17 12:39:08 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlwriter.c include/libxml/xmlwriter.h: applied update
+ from Alfred Mickautsch and the added patch from Lucas Brasilino
+
+Sun Feb 15 12:01:30 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * benchmark.png index.html xml.html: updating the benchmark
+ graph and using a PNG instead of a GIF
+ * xmlreader.c: updated the TODO
+
+Sat Feb 14 18:55:40 MST 2004 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/xmltutorial.xml
+ * doc/tutorial/xmltutorial.pdf
+ * doc/tutorial/*.html
+ Fix bug in XPath example in the tutorial, thanks to Carlos, whose
+ last name I don't know, for pointing this out
+
+Thu Feb 12 16:28:12 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS configure.in: preparing release of 2.6.6
+ * doc/*: updated the docs and rebuilt them
+
+Thu Feb 12 13:41:16 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c: fixing bug #132930 with the provided patch, a bit
+ suspicious about it but this is fairly contained and regression
+ tests still passes.
+ * test/schemas/all1* result/schemas/all1*: added the test to
+ the regression suite.
+
+Thu Feb 12 12:54:26 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed bug #132575 about finding the end of the
+ internal subset in push mode.
+ * test/intsubset.xml result/intsubset.xml* result/noent/intsubset.xml:
+ added the test to the regression suite
+
+Wed Feb 11 14:19:31 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c xmlIO.c encoding.c include/libxml/parser.h
+ include/libxml/xmlIO.h: added xmlByteConsumed() interface
+ * doc/*: updated the benchmark rebuilt the docs
+ * python/tests/Makefile.am python/tests/indexes.py: added a
+ specific regression test for xmlByteConsumed()
+ * include/libxml/encoding.h rngparser.c tree.c: small cleanups
+
+Wed Feb 11 08:13:58 HKT 2004 William Brack <wbrack@mmm.com.hk
+
+ * tree.c: fixed missing output of internal DTD param entities when
+ nothing else present in DTD (bug 134052)
+
+Tue Feb 10 19:24:38 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * encoding.c: applied patch supplied by Christophe Dubach
+ to fix problem with --with-minimum configuration
+ (bug 133773)
+ * nanoftp.c: fixed potential buffer overflow problem,
+ similar to fix just applied to nanohttp.c.
+
+Mon Feb 9 18:40:21 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * nanohttp.c: fixed the fix for the buffer overflow, thanx
+ William :-)
+
+Mon Feb 9 22:37:14 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * acinclude.m4, configure.in: fixed problem concerning
+ determining SOCKLEN_T as pointed out by Daniel Richard G.
+ on the mailing list
+
+Mon Feb 9 15:31:24 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * nanohttp.c: fixed buffer overflow reported by Yuuichi Teranishi
+
+Mon Feb 9 13:45:59 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: small patch from Philip Ludlam to avoid warnings.
+
+Mon Feb 9 13:41:47 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: applied a small patch from Alfred Mickautsch
+ to avoid an out of bound error in isolat1ToUTF8()
+
+Mon Feb 9 13:35:50 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: remove the warning on the 2001 namespace
+ * parser.c parserInternals.c xpath.c: remove some warnings
+ when compiling with MSVC6
+ * nanohttp.c: applied a patch when using _WINSOCKAPI_
+
+Sun Feb 8 12:09:55 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: added a small hack to fix interference between
+ my fixes for bugs 132585 and 132588.
+ * python/libxml.c: fixed problem with serialization of namespace
+ reported on the mailing list by Anthony Carrico
+
+Sat Feb 7 16:53:11 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: fixed problem with function xmlXIncludeCopyRange
+ (bug 133686).
+
+Fri Feb 6 21:03:41 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xmlwriter.c: fixed problem with return value of
+ xmlTextWriterWriteIndent() (bug 133297)
+
+Fri Feb 6 19:07:04 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: changed coding to output good XIncludes when
+ one or more bad ones are present (bug 132588)
+
+Fri Feb 6 17:34:21 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: corrected handling of empty fallback condition
+ (bug 132585)
+
+Fri Feb 6 15:28:36 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * HTMLparser.c: added initialisation for ctxt->vctxt
+ in HTMLInitParser (bug 133127)
+ * valid.c: minor cosmetic change (removed ATTRIBUTE_UNUSED
+ from several function params)
+
+Tue Feb 3 16:48:57 PST 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: fixed problem regarding freeing of dictionary
+ when there are errors within an XInclude file (bug 133106).
+ Thanks to Oleg Paraschenko for the assistance.
+
+Tue Feb 3 09:53:18 PST 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xmlschemastypes.c: fixed validation of maxLength with no
+ content using patch submitted by Eric Haszlakiewicz
+ (bug 133259)
+
+Tue Feb 3 09:21:09 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * include/libxml/xmlreader.h include/libxml/xmlmemory.h: added
+ calling convention to the public function prototypes (rep by
+ Cameron Johnson)
+ * include/libxml/xmlexports.h: fixed mingw+msys compilation
+ (rep by Mikhail Grushinskiy)
+
+Mon Feb 2 20:22:18 PST 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xmlwriter.c: enhanced output indenting (bug 133264)
+
+Mon Feb 2 16:13:33 PST 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xmlreader.c, include/libxml/xmlreader.h: applied patch from
+ Steve Ball to provide structured error reports.
+
+Sun Feb 1 01:48:14 PST 2004 William Brack <wbrack@mmm.com.hk>
+
+ * tree.c, include/libxml/tree.h: moved serialization of
+ attribute text data (xmlSerializeContent) into a separate
+ routine (xmlSerializeTxtContent) so it can be used by xmlwriter.c
+ * xmlwriter.c: changed handling of attribute string to use the
+ routine above (fixed bug 131548)
+
+Sat Jan 31 08:22:02 MST 2004 John Fleck <jfleck@inkstain.net
+
+ * doc/examples/reader1.c, reader2.c, reader3.c
+ * doc/examples/examples.xml
+ * doc/examples/*.html
+ add note that reader examples need libmxl2 > 2.6, rebuild
+ html - this time doing it correctly :-)
+
+Fri Jan 30 20:45:36 MST 2004 John Fleck <jfleck@inkstain.net>
+
+ * doc/examples/examples.xml
+ * doc/examples/*.html
+ add note that reader examples need libmxl2 > 2.6, rebuild
+ html
+
+Thu Jan 29 23:51:48 PST 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: added (void *) type override to prevent
+ warning on Solaris (Bug 132671)
+
+Wed Jan 28 07:20:37 MST 2004 John Fleck <jfleck@inkstain.net>
+
+ * doc/examples/Makefile.am
+ per Jan. 15 email to the list from oliverst, the index.html
+ file from this directory wasn't making it into the tarball
+
+Mon Jan 26 18:01:00 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * acinclude.m4: applied fix from Alexander Winston for a problem
+ related to automake-1.8 , c.f. #132513 and #129861
+
+Mon Jan 26 12:53:11 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * doc/examples/index.py: don't rely on . being on the path for
+ make tests, should keep Mr. Crozat quiet until next time...
+
+Sun Jan 25 21:45:03 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in NEWS doc/*: preparing release 2.6.5, rebuilt the
+ docs, checked rngparser stuff does not end up in the tarball
+
+Sun Jan 25 20:59:20 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: applied patch from Frederic Peters
+ fixing the wrong arg order in xpath callback in bug #130980
+
+Sun Jan 25 20:52:09 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: fixing #130453 XInclude element with no href attribute
+ * relaxng.c rngparser.c include/libxml2/relaxng.h: fully integrating
+ the compact syntax will require more work, postponed for the
+ 2.6.5 release.
+
+Sat Jan 24 09:30:22 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/schemasInternals.h xmlschemas.c: applied patch from
+ Steve Ball to avoid a double-free.
+
+Fri Jan 23 14:03:21 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * doc/examples/*: added io1.c an example ox xmlIO usage and io1.res
+ test result, fixed a awful lot of memory leaks showing up in
+ testWriter.c, changed the examples and the Makefiles to test
+ memory leaks.
+ * xmlwriter.c: fixed a memory leak
+ * Makefile.am: run the doc/examples regression tests as part of
+ make tests
+ * xpath.c include/libxml/xpath.h: added xmlXPathCtxtCompile() to
+ compile an XPath expression within a context, currently the goal
+ is to be able to reuse the XSLT stylesheet dictionnary, but this
+ opens the door to others possible optimizations.
+ * dict.c include/libxml/dict.h: added xmlDictCreateSub() which allows
+ to build a new dictionnary based on another read-only dictionnary.
+ This is needed for XSLT to keep the stylesheet dictionnary read-only
+ while being able to reuse the strings for the transformation
+ dictionnary.
+ * xinclude.c: fixed a dictionnar reference counting problem occuring
+ when document parsing failed.
+ * testSAX.c: adding option --repeat for timing 100times the parsing
+ * doc/* : rebuilt all the docs
+
+Thu Jan 22 14:17:05 2004 Aleksey Sanin <aleksey@aleksey.com>
+
+ * xmlmemory.c: make xmlReallocLoc() accept NULL pointer
+
+Thu Jan 22 08:26:20 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: applied patch from John Belmonte for
+ normalizedString datatype support.
+
+Thu Jan 22 10:43:22 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: fixed problem with union when last() is used
+ in predicate (bug #131971)
+ * xpointer.c: minor change to comment for doc generation
+
+Wed Jan 21 17:03:17 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed bug #131745 raised by Shaun McCance with the
+ suggested patch
+
+Wed Jan 21 10:59:55 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlwriter.c: applied patch from Alfred Mickautsch fixing a memory
+ leak reported on the list.
+
+Thu Jan 15 00:48:46 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/tests/tstLastError.py: applied
+ patch from Stephane Bidoul to add enums to the Python bindings.
+
+Tue Jan 13 21:50:05 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * testHTML.c: another small patch from Mark Vadoc
+
+Tue Jan 13 21:39:58 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c relaxng.c testRelax.c testSchemas.c: applied
+ patch from Mark Vadoc to not use SAX1 unless necessary.
+
+Mon Jan 12 17:22:57 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * dict.c parser.c xmlstring.c: some parser optimizations,
+ xmllint --memory --timing --repeat --stream ./db10000.xml
+ went down from 16.5 secs to 15.5 secs.
+
+Thu Jan 8 17:57:50 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: removed a memory leak remaining from the switch
+ to a dictionnary for string allocations c.f. #130891
+
+Thu Jan 8 17:48:46 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: fixing some problem if configured --without-xinclude
+ c.f. #130902
+
+Thu Jan 8 17:42:48 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: changed AC_OUTPUT() macro to avoid a cygwin problem
+ c.f. #130896
+
+Thu Jan 8 00:36:00 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc:
+ applying patch from Mark Vakoc for Windows
+ * doc/catalog.html doc/encoding.html doc/xml.html: applied doc
+ fixes from Sven Zimmerman
+
+Tue Jan 6 23:51:46 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml2-python-api.xml python/libxml_wrap.h python/types.c
+ python/tests/Makefile.am python/tests/tstLastError.py: applied
+ patch from Stephane Bidoul for structured error handling from
+ python, and the associated test
+
+Tue Jan 6 23:18:11 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * configure.in: fixed Bug130593
+ * xmlwriter.c: fixed compilation warning
+
+Tue Jan 6 15:15:23 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlstring.h: fixed the comment in the header
+ * doc/*: rebuilt the docs
+
+Tue Jan 6 19:40:04 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * encoding.c, parser.c, xmlstring.c, Makefile.am,
+ include/libxml/Makefile.am, include/libxml/catalog.c,
+ include/libxml/chvalid.h, include/libxml/encoding.h,
+ include/libxml/parser.h, include/libxml/relaxng.h,
+ include/libxml/tree.h, include/libxml/xmlwriter.h,
+ include/libxml/xmlstring.h:
+ moved string and UTF8 routines out of parser.c and encoding.c
+ into a new module xmlstring.c with include file
+ include/libxml/xmlstring.h mostly using patches from Reid
+ Spencer. Since xmlChar now defined in xmlstring.h, several
+ include files needed to have a #include added for safety.
+ * doc/apibuild.py: added some additional sorting for various
+ references displayed in the APIxxx.html files. Rebuilt the
+ docs, and also added new file for xmlstring module.
+ * configure.in: small addition to help my testing; no effect on
+ normal usage.
+ * doc/search.php: added $_GET[query] so that persistent globals
+ can be disabled (for recent versions of PHP)
+
+Mon Jan 5 20:47:07 MST 2004 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/customfo.xsl
+ * doc/tutorial/customhtml.xsl
+ update custom tutorial-building stylesheets in preparation
+ for tutorial update
+
+Tue Jan 6 00:10:33 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * rngparser.c: commiting the compact relax ng parser. It's not
+ completely finished, it's not integrated but I want to save the
+ current state
+
+Mon Jan 5 22:22:48 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * doc/apibuild.py, doc/APIconstructors.html, doc/libxml2-refs.xml,
+ win32/libxml2.def.src: fixed apibuild.py's generation of
+ "constructors" to be in alphabetical order (instead of previous
+ random sequence); regenerated resulting files.
+
+Mon Jan 5 14:03:59 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * xmlwriter.c: applied patch from Lucas Brasilino fixing an indent
+ problem.
+
+Sun Jan 4 18:54:29 MST 2004 John Fleck <jfleck@inkstain.net>
+
+ * doc/newapi.xsl: change background color of function
+ declaration to improve readability
+ * doc/*: rebuild docs with new stylesheet
+
+Sun Jan 4 22:45:14 HKT 2004 William Brack <wbarck@mmm.com.hk>
+
+ * parser.c, include/libxml/parser.h: added a routine
+ xmlStrncatNew to create a new string from 2 frags.
+ * tree.c: added code to check if node content is from
+ dictionary before trying to change or concatenate.
+
+Sun Jan 4 08:57:51 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xmlmemory.c: applied suggestion from Miloslav Trmac (see
+ Bug 130419) and eliminated xmlInitMemoryDone. More
+ improvement needed.
+ * xml2-config.in: added an additional flag (--exec-prefix) to
+ allow library directory to be different from include directory
+ (Bug 129558).
+
+Fri Jan 2 21:22:18 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * error.c: applied patch from Stéphane Bidoul for structured error
+ reporting.
+
+Fri Jan 2 21:03:17 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlwriter.h xmlwriter.c: applied the patch from
+ Lucas Brasilino to add indentation support to xmlWriter
+
+Fri Jan 2 22:58:29 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: fixed problem with "recursive" include (fallback
+ contains another include - Bug 129969)
+
+Fri Jan 2 11:40:06 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c: found and fixed a bug misallocating some non
+ blank text node strings from the dictionnary.
+ * xmlmemory.c: fixed a problem with the memory debug mutex
+ release.
+
+Wed Dec 31 22:02:37 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xinclude.c: fixed problem caused by wrong dictionary
+ reference count, reported on the list by Christopher
+ Grayce.
+
+Wed Dec 31 15:55:55 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * python/generator.py, python/libxml2class.txt: fixed problem
+ pointed out by Stéphane Bidoul on the list.
+ * xinclude.c, xpointer.c, xpath.c, include/libxml/xpointer.h:
+ completed modifications required to fix Bug 129967 (at last!).
+ Now wait to see how long before further trouble...
+
+Tue Dec 30 16:26:13 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * parser.c, xmlmemory.c, include/libxml/xmlmemory.h: Fixed
+ memory leak reported by Dave Beckett
+ * xmlschemas.c: Removed spurious comment reported on the mailing
+ list
+ * xinclude.c, xpath.c, xpointer.c, libxml/include/xpointer.h:
+ Further work on Bug 129967 concerning xpointer range handling
+ and range-to function; much better, but still not complete
+
+Mon Dec 29 18:08:05 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: xmlValidateElement could crash for element holding a
+ namespace declaration but not in a namespace. Oliver Fischer
+ provided the example.
+
+Mon Dec 29 11:29:31 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: issue validation status on stderr, not stdout as suggested
+ by Pawel Palucha
+ * result/relaxng/*: this change slightly all the output from RNG
+ regressions.
+
+Mon Dec 28 10:47:32 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmlschemas.c: edited a couple of comments in accordance with
+ posting on the mailing list (no logic change)
+ * xpointer.c: working on Bug 129967, added check for NULL
+ nodeset to prevent crash. Further work required.
+ * xpath.c: working on Bug 129967, added code to handle
+ XPATH_LOCATIONSET in RANGETO code, also added code to
+ handle it in xmlXPathEvaluatePredicateResult. Further
+ work required.
+
+Sat Dec 27 12:32:58 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmlschemas.c: added tests for xs:all to assure minOccurs
+ and maxOccurs <= 1 (Bug 130020)
+
+Sat Dec 27 09:53:06 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmlregexp.c: fixed xmlFAParseCharRange for Unicode ranges
+ with patch from Charles Bozeman.
+
+Fri Dec 26 14:03:41 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmlregexp.c: fixed problem causing segfault on validation error
+ condition (reported on mailing list)
+
+Thu Dec 25 21:16:22 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmlschemas.c: fixed missing dictionaries for Memory and Doc
+ parser contexts (problem reported on mailing list)
+ * doc/apibuild.py: small change to prevent duplicate lines
+ on API functions list. It will take effect the next time
+ the docs are rebuilt.
+
+Wed Dec 24 12:54:25 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in NEWS doc/*: updated the docs and prepared a new
+ release 2.6.4
+
+Wed Dec 24 12:07:52 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * legacy.c: remove deprecated warning on startElement()
+
+Wed Dec 24 12:04:35 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c result/XInclude/nodes2.*: XInclude xpointer support
+ was broken with the new namespace. Fixes #129932
+
+Wed Dec 24 00:29:30 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c include/libxml/schemasInternals.h: types might be
+ redefined in includes, quick fix to allow this but lacks the
+ equality of the redefinition test.
+
+Tue Dec 23 15:14:37 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * valid.c: fixed bug concerning validation using external
+ dtd of element with mutiple namespace declarations
+ (Bug 129821)
+
+Tue Dec 23 11:41:42 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * tree.c: inhibited production of "(null):" in xmlGetNodePath
+ when node has default namespace (Bug 129710)
+
+Tue Dec 23 09:29:14 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: small enhancement to xmlXPathCmpNodes to assure
+ document order for attributes is retained (Bug 129331)
+
+Mon Dec 22 19:06:16 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c xmlreader.c: change xmlReadFd() xmlCtxtReadFd()
+ xmlReaderNewFd() xmlReaderForFd(), change those to not close
+ the file descriptor. Updated the comment, should close #129683
+
+Mon Dec 22 00:34:09 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: fixed a serious problem in XInclude #129021
+
+Sun Dec 21 13:59:54 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed bug #129489, propagation of parsing flags
+ in entities.
+ * parser.c xmlreader.c: improved the comments of parsing options
+
+Sun Dec 21 18:14:04 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * python/Makefile.am, python/tests/Makefile.am,
+ doc/Makefile.am: applied fixes to allow build from
+ 'outside' directory (Bug 129172)
+
+Sat Dec 20 16:42:07 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * tree.c - add explanation of namespace inheritance when
+ ns is NULL to xmlNewChild and xmlNewTextChild API doc
+
+Sat Dec 20 18:17:28 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * include/libxml/xpathInternals.h: undid last change (my
+ bad). Put necessary fix in libxslt/libexslt instead.
+ * include/libxml/DOCBparser.h: put test for __GCC__ on
+ warning directive (Bug 129105)
+
+Sat Dec 20 10:48:37 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * include/libxml/xpathInternals.h: fixed xmlXPathReturnString
+ to cater for NULL pointer (bug 129561)
+ * globals.c: added comment to suppress documentation warning
+ * doc/apibuild.py: fixed problem which caused last APIchunkxx.html
+ to be lost. Rebuilt doc/* (including adding APIchunk26.html)
+
+Fri Dec 19 18:24:02 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: trying to fix #129692 xmlTextReaderExpand() when
+ using an xmlReaderWalker()
+
+Thu Dec 18 20:10:34 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * tree.c: fix misc. typos in doc comments
+ * include/libxml/tree.h: elaborate on macro define doc comments
+ * doc/*: rebuild docs
+
+Wed Dec 17 16:07:33 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/examples/*: don't call the result files .out but .res as
+ the Makefiles tend to try generating binaries for .out targets...
+
+Tue Dec 16 20:53:54 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/html/libxml-pattern.html: - cvs add API docs for new
+ pattern stuff
+
+Tue Dec 16 20:40:40 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * tree.c
+ * doc/*:
+ Elaborate in documentation discussion of xmlNewChild
+ and xmlNewTextChild. Thanks to Steve Lenti for pointing
+ out the usefulness of a more explicit explanation of the
+ reserved character escaping issue.
+
+Fri Dec 12 15:55:15 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlcatalog.c: applied patch from Stefan Kost
+
+Thu Dec 11 15:15:31 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/examples/testWriter.c: applied small fix from Lucas Brasilino
+
+Thu Dec 11 14:55:22 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/Makefile.* win32/configure.js: Added pattern support
+
+Wed Dec 10 14:11:20 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in doc/* libxml.spec.in: preparing release of
+ libxml2-2.6.3, updated and regenerated the docs.
+
+Wed Dec 10 11:43:33 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c pattern.c: removed some compilation warnings
+
+Wed Dec 10 11:16:29 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: fixing bug #119264 xmllint failing to report
+ serialization errors in some cases.
+
+Tue Dec 9 23:50:23 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c: fixed an XML entites content serialization
+ potentially triggered by XInclude, see #126817
+
+Tue Dec 9 16:12:50 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlwriter.c: applied the patch to xmlTextWriterStartPI()
+ suggested by Daniel Schulman in #128313
+
+Tue Dec 9 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in Makefile.am: another patch from Kenneth Haley
+ for Mingw, c.f. #128787
+
+Tue Dec 9 15:07:09 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlexports.h: applied patch from Kenneth Haley
+ for compiling on Mingw see #128786
+
+Tue Dec 9 14:52:59 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: some flags were not passed down correctly as
+ parsing options. Fixes #126806
+
+Tue Dec 9 12:29:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c xmllint.c xmlreader.c include/libxml/xinclude.h
+ include/libxml/xmlerror.h: augmented the XInclude API
+ to be able to pass XML parser flags down to the Inclusion
+ process. Also resynchronized with the Last Call W3C Working
+ Draft 10 November 2003 for the xpointer attribute.
+ * Makefile.am test/XInclude/docs/nodes[23].xml
+ result/XInclude/*: augmented the tests for the new namespace and
+ testing the xpointer attribute, changed the way error messages
+ are tested
+ * doc/*: regenerated the documentation
+
+Mon Dec 8 18:38:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * error.c: filter warning messages if the global setting blocks them
+ * xinclude.c xmlreader.c include/libxml/xinclude.h
+ include/libxml/xmlerror.h: updated the change of namespace at
+ the XInclude level, raise a warning if the old one is found,
+ and some cleanup
+
+Mon Dec 8 13:09:39 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: tentative fix for #126117 character reference in
+ attributes output problem in some cornercase.
+
+Mon Dec 8 11:08:45 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.py: tried to fix the problems reported in
+ bug #126735
+ * xpath.c SAX2.c error.c parser.c valid.c include/libxml/xmlerror.h:
+ fixed again some problem trying to use the structured error
+ handlers, c.f. bug #126735
+ * result/VC/ElementValid: tiny change due to the fix
+
+Sun Dec 7 22:27:31 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * error.c: fixed __xmlRaiseError to use structured error handlers
+ defined by xmlSetStructuredErrorFunc(), fixes bug #126211
+
+Sun Dec 7 20:30:53 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: attempt to fix #126211 ...
+
+Fri Dec 5 17:07:29 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * pattern.c xmlreader.c xmllint.c include/libxml/pattern.h
+ include/libxml/xmlreader.h: fixed the pattern interfaces
+ but not yet the parser to handle the namespaces.
+ * doc/examples/reader3.c doc/*: fixed the example, rebuilt the docs.
+
+Fri Dec 5 15:49:44 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c xmlwriter.c doc/apibuild.py include/libxml/globals.h
+ include/libxml/pattern.h include/libxml/schemasInternals.h
+ include/libxml/xmlexports.h include/libxml/xmlwriter.h: cleanup
+ the make rebuild in doc, this include new directive to stop
+ documentation warnings
+ * doc/* doc/html/*: rebuilt the docs
+ * pattern.c xmlreader.c include/libxml/pattern.h
+ include/libxml/xmlreader.h: adding xmlTextReaderPreservePattern()
+ to save nodes while scanning the tree with the reader, cleanup
+ the way element were freed, and xmlTextReaderPreserve()
+ implementation, the API might change for namespace binding support
+ when compiling patterns.
+ * doc/examples/*: added reader3.c exposing the xmlTextReaderPreserve()
+
+Thu Dec 4 15:10:57 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.py: oops forgot to modify/commit the new code.
+
+Thu Dec 4 13:29:19 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml_wrap.h:
+ cleanup the output buffer support to at least get the basic
+ to work
+ * python/tests/outbuf.py python/tests/serialize.py: fixes and
+ cleanup.
+ * include/libxml/xmlwriter.h: cleanup
+
+Wed Dec 3 21:38:56 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * include/libxml/xmlversion.h.in
+ * doc/*: add WITH_TRIO comment so it shows up in the docs, rebuild
+ docs
+
+Wed Dec 3 13:10:08 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * config.h.in configure.in xmlregexp.c: fix bug #128401 affecting
+ regexp quantifiers
+
+Tue Dec 2 23:29:56 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * pattern.c include/libxml/pattern.h: adding the pattern node
+ selection code. Inheried in part from libxslt but smaller.
+ * Makefile.am configure.in include/libxml/xmlversion.h.in:
+ integrated the pattern module, made it a configure time option
+ * xmllint.c: added --pattern to test when doing --stream
+
+Tue Dec 2 11:25:25 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: fixed a problem in xmlreader validation when
+ streaming exposed by reader2 example.
+
+Mon Dec 1 20:40:51 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xml.html
+ * doc/docs.html:
+ add reference to the Code Examples page to docs.html list
+ of resources
+
+Mon Dec 1 12:30:28 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/Makefile.bcb win32/configure.js: Applied the BCB patch
+ from Eric
+
+Sun Nov 30 21:33:37 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * include/libxml/xinclude.h
+ * doc/*: Add comments for macro definitions in xinclude.h and
+ rebuild the docs
+
+Sun Nov 30 21:06:29 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/docdescr.doc
+ Updating William's explanation of how to build docs,
+ reflecting Daniel's new docs build system
+
+Sat Nov 29 18:38:22 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmlmemory.c: enhanced by adding mutex to protect global
+ structures in a multi-threading environment. This fixed
+ some random errors on the Threads regression tests.
+
+Fri Nov 28 21:39:49 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xml.html doc/python.html: fix tst.py text, which didn't
+ import sys
+
+Fri Nov 28 17:28:47 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * encoding.c, include/libxml/encoding.h: Enhanced the handling of
+ UTF-16, UTF-16LE and UTF-16BE encodings. Now UTF-16 output is
+ handled internally by default, with proper BOM and UTF-16LE
+ encoding. Native UTF-16LE and UTF-16BE encoding will not generate
+ BOM on output, and will be automatically recognized on input.
+ * test/utf16lebom.xml, test/utf16bebom.xml, result/utf16?ebom*:
+ added regression tests for above.
+
+Thu Nov 27 19:25:10 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/Makefile.* win32/configure.js: Modified to allow coexistent
+ build with all compilers. Added C-Runtime option for MSVC. Included
+ xmlWriter.
+ * xmlwriter.c: Added IN_LIBXML macro
+
+Wed Nov 26 21:54:01 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/Makefile.bcb: applied patch from Eric
+
+Wed Nov 26 21:33:14 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/tree.h: stefan on IRC pointed out that XML_GET_LINE
+ is broken on 2.6.x
+
+Tue Nov 25 18:39:44 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c: fixed #127877, never output &quot; in element content
+ * result/isolat3 result/slashdot16.xml result/noent/isolat3
+ result/noent/slashdot16.xml result/valid/REC-xml-19980210.xml
+ result/valid/index.xml result/valid/xlink.xml: this changes the
+ output of a few tests
+
+Tue Nov 25 16:36:21 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/schemasInternals.h include/libxml/xmlerror.h
+ testSchemas.c xmlschemas.c: added xsd:include support, fixed
+ testSchemas behaviour when a schemas failed to parse.
+ * test/schemas/vdv-* result/schemas/vdv-first5_0_0*: added one
+ test for xsd:include from Eric Van der Vlist
+
+Tue Nov 25 08:18:12 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: swapped the attribute defaulting and attribute checking
+ parts of parsing a new element start, fixes bug #127772
+ * result/valid/127772.* test/valid/127772.xml
+ test/valid/dtds/127772.dtd: added the example in the regression tests
+
+Tue Nov 25 08:00:15 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: moved xmlCleanupThreads() to the end of xmlCleanupParser()
+ to avoid bug #127851
+
+Mon Nov 24 15:26:21 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c: fixing some Negative Character Group and
+ Character Class Subtraction handling.
+
+Mon Nov 24 14:01:57 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c: more XML Schemas fixes based
+ on Eric van der Vlist examples
+ * result/schemas/vdv-first4* test/schemas/vdv-first4*:
+ added regression tests
+ * doc/examples/Makefile.am doc/examples/index.py: do not
+ regenerate the index on make all target, but only on
+ make rebuild to avoid troubles.
+
+Sat Nov 22 21:35:42 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h
+ include/libxml/schemasInternals.h: lot of bug fixes, cleanup,
+ starting to add proper namespace support too.
+ * test/schemas/* result/schemas/*: added a number of tests
+ fixed the result from some regression tests too.
+
+Fri Nov 21 20:50:59 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xml.html, docs.html: remove reference to gtk-doc now that
+ Daniel has removed it, fix link to George's IBM article, other
+ minor edits
+
+Fri Nov 21 01:26:00 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: applied patch from Robert Stepanek to start
+ import os schemas support, cleaned up stuff and the patch.
+ * test/schemas/import0_0.* result/schemas/import0_0_0*: added test
+ to regression, fixed a few regressions too.
+
+Thu Nov 20 22:58:00 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: applied two parsing fixes from James Bursa
+
+Thu Nov 20 19:20:46 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/examples/*: added two xmlReader examples
+ * xmlreader.c: cleaned up some bugs in the process
+
+Thu Nov 20 12:54:30 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlwriter.c include/libxml/xmlwriter.h: applied patch from
+ Alfred Mickautsch, bugfixes and comments
+ * doc/examples/*: added his test as the xmlWriter example
+ * doc/html/ doc/*.html: this resulted in some improvements
+ * include/libxml/hash.h: fixed an inclusion problem when
+ <libxml/hash.h> wasn't preceeded by <xml/parser.h>
+
+Wed Nov 19 17:19:35 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: fix an error message
+ * doc/examples/*: added tree2 example from Lucas Brasilino
+
+Wed Nov 19 17:50:47 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/newapi.xsl: improve the sort sequence for page content
+ * doc/html/*.html: regenerate the web pages
+
+Wed Nov 19 00:48:56 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: do not package cvs versioning temp files.
+ * doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl: more cleanup,
+ slightly improved the API xml format, fixed a lot of small
+ rendering problems
+ * doc/html/libxml*.html: rebuilt
+
+Tue Nov 18 21:51:15 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/*.h include/libxml/*.h.in: modified the file
+ header to add more informations, painful...
+ * genChRanges.py genUnicode.py: updated to generate said changes
+ in headers
+ * doc/apibuild.py: extract headers, add them to libxml2-api.xml
+ * *.html *.xsl *.xml: updated the stylesheets to flag geprecated
+ APIs modules. Updated the stylesheets, some cleanups, regenerated
+ * doc/html/*.html: regenerated added back book1 and libxml-lib.html
+
+Tue Nov 18 14:43:16 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am doc/*.xsl doc/*.html doc/apibuild.py: cleaned up
+ the build process to remove all remains from the old gtk-doc
+ inherited, libxml2-refs.xml is now generated by apibuild.py, the
+ stylesheets have been improved, and the API*html now generated
+ are XHTML1 valid too
+
+Tue Nov 18 14:28:32 HKT 2003 William Brack <mmm.com.hk>
+
+ * genChRanges.py, chvalid.c, include/libxml/chvalid.h: minor
+ enhancement to prevent comment with unreferenced variable.
+ * threads.c xmlreader.c xmlwriter.c: edited some comments to
+ improve auto-generation of documentation
+ * apibuild.py: minor change to an error message
+
+Mon Nov 17 17:55:51 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl: more cleanup,
+ improving navigation
+ * doc/html/*.html: updated the result
+
+Mon Nov 17 14:54:38 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl:
+ improvement of the stylesheets, fixed a API generation problem,
+ switched the stylesheet and Makefile to build the HTML output.
+ * doc/html/*.html: complete update, ditched some old files, might
+ introduce some breakage...
+
+Mon Nov 17 12:50:28 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/newapi.xsl: lot of improvements, this starts looking good
+ enough to be usable.
+
+Mon Nov 17 00:58:09 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/newapi.xsl: stylesheet to build HTML pages from the
+ API XML description, Work in Progress
+
+Sun Nov 16 16:03:24 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: fixed bug 126976 (string != empty nodeset
+ should be false)
+
+Sun Nov 16 14:00:08 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/html/*.html: Finally - found the problem with the
+ page generation (XMLPUBFUN not recognized by gtkdoc).
+ Re-created the pages using a temporary version of
+ include/libxml/*.h.
+ * testOOMlib.c,include/libxml/encoding.h,
+ include/libxml/schemasInternals.h,include/libxml/valid.h,
+ include/libxml/xlink.h,include/libxml/xmlwin32version.h,
+ include/libxml/xmlwin32version.h.in,
+ include/libxml/xpathInternals.h: minor edit of comments
+ to help automatic documentation generation
+ * doc/docdescr.doc: small elaboration
+ * doc/examples/test1.c,doc/examples/Makefile.am: re-commit
+ (messed up on last try)
+ * xmlreader.c: minor change to clear warning.
+
+Sat Nov 15 19:20:32 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Copyright: fixed some wording
+ * libxml.spec.in: make sure doc/examples is packaged
+ * include/libxml/tree.h valid.c xmlreader.c: fixed the really
+ annoying problem about xmlRemoveID and xmlReader streaming.
+ Thing looks fixed now, had to add a doc reference to the
+ xmlID structure though...
+
+Sat Nov 15 09:53:36 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/docdescr.doc: added description of man page building
+
+Sat Nov 15 19:08:22 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/html/libxml-chvalid.html, doc/html/libxml-dict.html,
+ doc/html/libxml-list.html, doc/html/libxml-testOOMlib.html,
+ doc/html/libxml-wincecompat, doc/html/winsockcompat.html,
+ doc/html/libxml-xmlexports.html, doc/html/libxml-xmlversion.html,
+ doc/html/libxml-xmlwin32version.html, doc/html/libxml-xmlwriter.html:
+ added missing pages for the website.
+
+Sat Nov 15 18:23:48 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/Makefile.am doc/*.html doc/html/*.html: rebuilt the
+ generated pages (again), manually restored doc/html/index.html
+ and manually edited generated file doc/gnome-xml.xml to put
+ in appropriate headings.
+ * doc/docdescr.doc: new file to describe details of the
+ document generation (helps my memory for the next time)
+ * genChRanges.py,chvalid.c,include/libxml/chvalid.h: minor
+ enhancement to please the automatic documentation generation.
+
+Fri Nov 14 23:47:31 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * catalog.c,relaxng.c,testAutomata.c,xpointer.c,genChRanges.py,
+ chvalid.c,include/libxml/chvalid.h,doc/examples/test1.c:
+ minor error cleanup for gcc-3.3.[12] compilation warnings.
+
+Fri Nov 14 15:08:13 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * tree.c: minor changes to some comments
+ * doc/*.html: rebuilt the generated HTML pages for changes
+ from jfleck (bug 126945)
+
+Thu Nov 13 12:44:14 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/examples/*: added Dodji's example, added output handling
+
+Thu Nov 13 11:35:35 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/examples/*: added Aleksey XPath example, fixed bugs
+ in the indexer
+
+Wed Nov 12 23:48:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/*: integrating the examples in the navigation menus
+ * doc/examples/*: added make tests, updated the navigation,
+ added a new test, cleanups, updates.
+
+Wed Nov 12 17:50:36 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/*.html: rebuilt the generated HTML pages
+ * doc/examples/*: updated the stylesheets, added a synopsis,
+ Makefile.am is now generated by index.py
+
+Wed Nov 12 01:38:16 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/site.xsl doc/examples/Makefile.am doc/examples/index.html:
+ added autogeneration of a web page for the examples
+ * doc/examples/example1.c doc/examples/.cvsignore
+ doc/examples/examples.xml doc/examples/index.py: updated the
+ informations extracted, improved the format and indexing.
+
+Tue Nov 11 22:08:59 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * check-xinclude-test-suite.py: less verbose on difference
+ * libxml.spec.in: cleanup
+ * parser.c: fixed xmlCleanupParser() doc
+ * doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml
+ doc/examples/Makefile.am doc/examples/example1.c
+ doc/examples/examples.xml doc/examples/index.py
+ doc/examples/test1.xml: work on adding C examples and
+ generating automated information about those. examples.xml
+ is autogenerated describing the examples.
+ * example/Makefile.am: cleanup
+
+Mon Nov 10 23:47:03 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * genUnicode.py, xmlunicode.c, include/libxml/xmlunicode.h:
+ fixed missing '-' in block names, enhanced the hack for
+ ABI aliasing.
+
+Sun Nov 9 20:28:21 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * genUnicode.py, xmlunicode.c, include/libxml/xmlunicode.h,
+ python/libxml2class.txt: enhanced for range checking,
+ updated to Unicode version 4.0.1 (API docs also updated)
+ * python/generator.py: minor change to fix a warning
+
+Wed Nov 5 23:46:36 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: apply fix from Karl Eichwalder for script path
+
+Wed Nov 5 10:49:20 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * win32/configure.js: applied patch from Mark Vakoc to simplify
+ his work from CVS checkouts.
+
+Tue Nov 4 21:16:47 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlreader.html: minor cleanups
+
+Tue Nov 4 15:52:28 PST 2003 William Brack <wbrack@mmm.com.hk>
+
+ * include/libxml/xmlversion.h.in: changed macro ATTRIBUTE_UNUSED
+ for gcc so that, if undefined, it's defined as
+ __attribute__((unused))
+
+Tue Nov 4 15:28:07 PST 2003 William Brack <wbrack@mmm.com.hk>
+
+ * python/generator.py: small enhancement to assure ATTRIBUTE_UNUSED
+ appears after the variable declaration.
+ * valid.c: trivial change to eliminate a warning message
+
+Tue Nov 4 11:24:04 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in NEWS doc/*: preparing release 2.6.2, updated and
+ rebuilt the docs
+
+Tue Nov 4 09:38:46 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: change --html to make sure we use the HTML serialization
+ rule by default when HTML parser is used, add --xmlout to allow to
+ force the XML serializer on HTML.
+ * HTMLtree.c: ugly tweak to fix the output on <p> element and
+ solve #125093
+ * result/HTML/*: this changes the output of some tests
+
+Mon Nov 3 17:51:28 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: fixed bug #125812, about XPointer in XInclude
+ failing but not returning an error.
+
+Mon Nov 3 17:18:22 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixed bug #125811 related to DTD post validation
+ where the DTD doesn't pertain to a document.
+
+Mon Nov 3 15:25:58 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c xmlIO.c include/libxml/parserInternals.h: implemented
+ the XML_PARSE_NONET parser option.
+ * xmllint.c: converted xmllint.c to use the option instead of
+ relying on the global resolver variable.
+
+Mon Nov 3 13:26:32 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c xmlreader.c include/libxml/xinclude.h: adding XInclude
+ support to the reader interface. Lot of testing of the walker,
+ various bug fixes.
+ * xmllint.c: added --walker and made sure --xinclude --stream --debug
+ works as expected
+ * Makefile.am result/dtd11.rdr result/ent6.rdr test/dtd11 test/ent6
+ result/XInclude/*.rdr: added regression tests for the walker and
+ XInclude xmlReader support, had to slightly change a couple of tests
+ because the walker can't distinguish <foo/> from <foo></foo>
+
+Sat Nov 1 17:42:27 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c nanohttp.c threads.c: second BeOS patch from
+ Marcin 'Shard' Konicki
+
+Fri Oct 31 15:35:20 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: always generate line numbers
+
+Fri Oct 31 11:53:46 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed another regression introduced in fixing #125823
+
+Fri Oct 31 11:33:18 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: previous fix for #124044 was broken, correct
+ fix provided.
+ * HTMLparser.c parser.c parserInternals.c xmlIO.c: fix xmlStopParser()
+ and the error handlers to address #125877
+
+Thu Oct 30 23:10:46 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: side effect of #123105 patch, namespace resolution
+ would fail when defined in internal entities, fixes #125823
+
+Thu Oct 30 14:10:42 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: be more defensive in the xmlReader python bindings
+ fixing bug #124044
+
+Thu Oct 30 11:14:31 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: the a-posteriori DTD validation code was not validating
+ the namespace declarations, this fixes #124110
+
+Wed Oct 29 14:13:03 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmlIO.c: enhanced to bypass compression detection code
+ when input file is stdin (bug 125801)
+
+Wed Oct 29 18:21:00 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: fix needed when HTTP is not compiled in by Mark Vakoc
+
+Wed Oct 29 18:05:53 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: more fixes about unregistering objects
+ * include/libxml/relaxng.h: applied patch from Mark Vakoc
+ missing _cplusplus processing clause
+
+Wed Oct 29 07:49:52 2003 Aleksey Sanin <aleksey@aleksey.com>
+
+ * include/libxml/parser.h parser.c: added xmlStrVPrintf function
+
+Wed Oct 29 14:37:40 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c nanohttp.c testThreads.c threads.c: applied patch from
+ Marcin 'Shard' Konicki to provide BeOS thread support.
+
+Wed Oct 29 14:20:14 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c include/libxml/xmlschemas.h: applied patch
+ from Steve Ball to make a schema parser from a preparsed document.
+
+Wed Oct 29 13:52:25 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied a couple of patches from Mark Lilback about text
+ nodes coalescing
+
+Wed Oct 29 12:16:52 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: change suggested by Anthony Carrico when unregistering
+ a namespace prefix to a context
+ * hash.c: be more careful about calling callbacks with NULL payloads.
+
+Wed Oct 29 00:04:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in NEWS doc/*: preparing release 2.6.1, updated and
+ regenerated docs and APIs
+ * parser.c: cleanup and last change to fix #123105
+
+Tue Oct 28 23:02:29 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: Fix #124907 by simply backporting the same
+ fix as for the XML parser
+ * result/HTML/doc3.htm.err: change to ID detecting modified one
+ test result.
+
+Tue Oct 28 22:28:50 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c include/libxml/parser.h: included a new function
+ to reuse a Push parser context, based on Graham Bennett original
+ code
+ * valid.c: in HTML, a name in an input is not an ID
+ * TODO: bug list update
+
+Tue Oct 28 19:54:37 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: applied patch from nico@xtradyne.com for #125030
+
+Tue Oct 28 16:42:16 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: cleanup
+ * error.c valid.c include/libxml/xmlerror.h: fixing bug #125653
+ sometimes the error handlers can get a parser context on DTD
+ errors, and sometime they don't. So be very careful when trying
+ to grab those informations.
+
+Tue Oct 28 15:26:18 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied patch from Kasimier Buchcik which fixes a
+ problem in xmlSearchNs introduced in 2.6.0
+
+Tue Oct 28 14:57:03 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed #123263, the encoding is mandatory in a textdecl.
+
+Tue Oct 28 13:48:52 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fix bug #125047 about serializing when finding a
+ document fragment node.
+
+Mon Oct 27 11:11:29 EST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * testSAX.c: fix bug #125592 need a NULL check
+ * include/libxml/chvalid.h: rename a parameter
+
+Mon Oct 27 09:43:48 EST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: applied patch from #123105 about defaulted attributes
+ from element coming from an entity
+
+Mon Oct 27 21:12:27 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmllint.c: fixed warning message from IRIX (bug 125182)
+ * python/libxml.py: removed tabs, replaced with spaces
+ (bug 125572)
+
+Mon Oct 27 06:17:30 EST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.h parserInternals.c xmlIO.c: make sure we report errors
+ if xmlNewInputFromFile() fails.
+ * xmlreader.c: avoid using _private for the node or document
+ elements.
+
+Sat Oct 25 17:33:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/configure.js: added declaration for verMicroSuffix
+
+Fri Oct 24 23:08:17 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.m4: applied patch from Patrick Welche provided in
+ bug #125432 , future proofing the .m4 file.
+ * parser.c: resetting the context should also reset the error
+ * TODO: problem of conformance w.r.t. E20 was raised in the
+ XML Core telconf and libxml2 isn't conformant there.
+
+Wed Oct 22 14:33:05 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlwriter.c: applied patch from Alfred Mickautsch fixing #125180
+
+Wed Oct 22 10:50:31 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * chvalid.c genChRanges.py: Stephane Bidoul pointed out another
+ small glitch missing a const
+
+Wed Oct 22 10:43:21 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * chvalid.c genChRanges.py: Stephane Bidoul pointed out that
+ it doesn't define IN_LIBXML
+
+Tue Oct 21 21:14:55 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * win32/Makefile.mingw: typo pointed out by Stephane Bidoul
+
+Tue Oct 21 11:26:36 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc
+ win32/configure.js: set of Win32 patches for 2.6.0 by Joachim Bauch
+
+Tue Oct 21 02:07:22 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: last minute patch from Eric Zurcher making it into 2.6.0
+
+Tue Oct 21 02:03:03 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in NEWS doc/libxml2.xsa: preparing libxml2-2.6.0
+ * doc/*: updated and regenerated the docs and API
+
+Tue Oct 21 01:01:55 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c error.c tree.c: moved the line number to their proper
+ field in elements now.
+
+Tue Oct 21 00:28:20 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in xmlwriter.c Makefile.am include/libxml/xmlwriter.h
+ include/libxml/Makefile.am include/libxml/xmlversion.h.in:
+ added the xmlWriter module contributed by Alfred Mickautsch
+ * include/libxml/tree.h: added room for line and extra information
+ * xmlreader.c python/tests/reader6.py: bugfixing some problem some
+ of them introduced in September
+ * win32/libxml2.def.src doc/libxml2-api.xml: regenerated the API
+
+Mon Oct 20 19:02:53 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in xmldwalk.c xmlreader.c
+ include/libxml/Makefile.am include/libxml/xmldwalk.h
+ include/libxml/xmlversion.h.in: removing xmldwalk module
+ since it got merged with the xmlreader.
+ * parser.c: cleanup
+ * win32/libxml2.def.src python/libxml2class.txt doc/libxml2-api.xml:
+ rebuilt the API
+ * python/tests/Makefile.am python/tests/reader7.py
+ python/tests/walker.py: adding regression testing for the
+ new xmlreader APIs, new APIs for reader creation, including
+ makeing reader "walker" operating on preparsed document trees.
+
+Sun Oct 20 22:37:03 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * entities.c, valid.c: fixed problem reported on the mailing
+ list by Melvyn Sopacua - wrong argument order on functions
+ called through xmlHashScan.
+
+Sun Oct 19 23:57:45 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c xmlIO.c: fixes for compiling using --with-minimum
+
+Sun Oct 19 23:46:04 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: cleanup xmlNodeGetContent() reusing xmlNodeBufGetContent(),
+ tested it through the xslt regression suite.
+
+Sun Oct 19 22:42:16 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c include/libxml/tree.h: adding xmlNodeBufGetContent()
+ allowing to grab the content without forcing allocations.
+ * python/libxml2class.txt doc/libxml2-api.xml: rebuilt the API
+ * xpath.c xmldwalk.c: removed a couple of comment errors.
+
+Sun Oct 19 16:39:36 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: applied patch from Chris Anderson to change back
+ memcmp with CMPx()
+
+Sun Oct 19 16:24:19 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixed to not send NULL to %s printing
+ * python/tests/error.py result/HTML/doc3.htm.err
+ result/HTML/test3.html.err result/HTML/wired.html.err
+ result/valid/t8.xml.err result/valid/t8a.xml.err: cleaning
+ up some of the regression tests error
+
+Sun Oct 19 15:31:43 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/nanohttp.h include/libxml/parserInternals.h
+ include/libxml/xmlIO.h nanohttp.c parserInternals.c xmlIO.c:
+ Fixed the HTTP<->parser interraction, which should fix 2 long
+ standing bugs #104790 and #124054 , this also fix the fact that
+ HTTP error code (> 400) should not generate data, we usually
+ don't want to parse the HTML error information instead of the
+ resource looked at.
+
+Sun Oct 19 19:20:48 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/Makefile.am: enhanced the installation of tutorial files
+ to avoid installing CVS subdirectories (bug 122943)
+
+Sun Oct 19 17:33:27 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmlIO.c: fixed segfault when input file not present
+ * tree.c: changed output formatting of XML_CDATA_SECTION
+ (bug 120917)
+
+Sun Oct 19 00:15:38 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * include/libxml/parserInternals.h HTMLparser.c HTMLtree.c
+ SAX2.c catalog.c debugXML.c entities.c parser.c relaxng.c
+ testSAX.c tree.c valid.c xmlschemas.c xmlschemastypes.c
+ xpath.c: Changed all (?) occurences where validation macros
+ (IS_xxx) had single-byte arguments to use IS_xxx_CH instead
+ (e.g. IS_BLANK changed to IS_BLANK_CH). This gets rid of
+ many warning messages on certain platforms, and also high-
+ lights places in the library which may need to be enhanced
+ for proper UTF8 handling.
+
+Sat Oct 18 20:34:18 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * genChRanges.py, chvalid.c, include/libxml/chvalid.h,
+ doc/apibuild.py: enhanced to include enough comments to
+ make the api doc generation happy.
+
+Sat Oct 18 07:28:25 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * nanohttp.c xmlIO.c include/libxml/nanohttp.h: starting work
+ to fix the HTTP/XML parser integration.
+
+Sat Oct 18 11:04:32 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h: added new APIs
+ for creating reader from sources or reusing a reader with
+ a new source, like the xmlReadxx and xmlCtxtReadxxx
+ * win32/libxml2.def.src doc/libxml2-api.xml doc/apibuild.py
+ doc/Makefile.am: regenerated the APIs
+ * doc/xml.html: applied a patch from Stefan Kost for namesapce docs
+
+Sat Oct 18 12:46:02 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * genChRanges.py, chvalid.c, include/libxml/chvalid.h,
+ include/libxml/parserInternals.h: enhanced macros to avoid
+ breaking ABI from previous versions.
+ * catalog.c, parser.c, tree.c: modified to use IS_* macros
+ defined in parserInternals.h. Makes maintenance much easier.
+ * testHTML.c, testSAX.c, python/libxml.c: minor fixes to avoid
+ compilation warnings
+ * configuration.in: fixed pushHTML test error; enhanced for
+ better devel (me) testing
+
+Fri Oct 17 14:38:54 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * legacy.c: remove the warning for startDocument(), as it is used by
+ glade (or glade-python)
+ * parser.c relaxng.c xmlschemastypes.c: fixed an assorted set of
+ invalid accesses found by running some Python based regression
+ tests under valgrind. There is still a few leaks reported by the
+ relaxng regressions which need some attention.
+ * doc/Makefile.am: fixed a make install problem c.f. #124539
+ * include/libxml/parserInternals.h: addition of xmlParserMaxDepth
+ patch from crutcher
+
+Wed Oct 15 12:47:33 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Marc Liyanage pointed out that xmlCleanupParser()
+ was missing xmlCleanupInputCallbacks and xmlCleanupOutputCallbacks
+ calls.
+
+Wed Oct 15 10:16:47 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * vms/build_libxml.com trionan.c: VMS patch from Craig A. Berry
+
+Mon Oct 13 21:46:25 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: small fix from Bjorn Reese
+
+Mon Oct 13 15:59:25 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fix a call missing arguments
+
+Sun Oct 12 18:42:18 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * genChRanges.py, chvalid.c, include/libxml/chvalid.h: fixed
+ a bug in the range search; enhanced range generation (inline code
+ if a small number of intervals); enhanced the readability of the
+ output files.
+
+Sun Oct 12 00:52:14 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * chvalid.def chvalid.c include/libxml/chvalid.h: rebuilt
+ chvalid.def from scratch based on XML 2nd edition REC
+ and regenerated the code.
+
+Sat Oct 11 22:54:13 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: removed some annoying warnings
+ * chvalid.def chvalid.c include/libxml/chvalid.h: fixed a bug
+ in the PubidChars definition, regenerated, there is still
+ a bug left somewhere
+ * genChRanges.py: save the header directly in include/libxml/
+ * configure.in: I generated a 2.6.0beta6 earlier today
+
+Sat Oct 11 23:32:47 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * fixed small error on previous commit (chvalid.h in
+ base dir instead of include directory)
+
+Sat Oct 11 23:11:22 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * genChRange.py, chvalid.def, chvalid.c, include/libxml/chvalid.h:
+ new files for a different method for doing range validation
+ of character data.
+ * Makefile.am, parserInternals.c, include/libxml/Makefile.am,
+ include/libxml/parserInternals.h: modified for new range method.
+ * catalog.c: small enhance for warning message (using one
+ of the new range routines)
+
+Sat Oct 11 13:24:57 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c include/libxml/valid.h: adding an serror field to
+ the validation context breaks the ABI for the xmlParserCtxt
+ structure since it's embedded by content and not by reference
+
+Sat Oct 11 12:46:49 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: patch from Mike Hommey
+ * threads.c: applied Windows patch from Jesse Pelton and Stephane
+ Bidoul
+ * parser.c: fix the potentially nasty access to ctxt->serror
+ without checking first that the SAX block is version 2
+
+Fri Oct 10 21:34:01 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c: fixed a nasty bug with interning some text strings
+ * configure.in: prepare for beta5 of 2.6.0
+ * libxml.h nanoftp.c nanohttp.c xmlIO.c include/libxml/xmlerror.h:
+ better error handling for I/O and converted FTP and HTTP
+ * parser.c: fixed another bug
+
+Fri Oct 10 16:45:20 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c: fixed uninitialized new field.
+ * result/VC/OneID2 result/relaxng/*.err: fixed a typo updating
+ all messages
+
+Fri Oct 10 16:19:17 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/tree.h: make room in Doc, Element, Attributes
+ for PSVI type informations.
+
+Fri Oct 10 16:08:02 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c c14n.c catalog.c error.c globals.c parser.c
+ parserInternals.c relaxng.c valid.c xinclude.c xmlIO.c xmlregexp.c
+ xmlschemas.c xpath.c xpointer.c include/libxml/globals.h
+ include/libxml/parser.h include/libxml/valid.h
+ include/libxml/xmlerror.h: Setting up the framework for structured
+ error reporting, touches a lot of modules, but little code now
+ the error handling trail has been cleaned up.
+
+Fri Oct 10 14:29:42 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c include/libxml/xmlerror.h: converted the C14N module too
+
+Fri Oct 10 13:40:51 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: cleanup
+ * xpointer.c include/libxml/xmlerror.h: migrated XPointer module
+ to the new error mechanism
+
+Fri Oct 10 12:49:53 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * error.c xmlschemas.c: a bit of cleanup
+ * result/schemas/*.err: updated with the new result strings
+
+Fri Oct 10 03:58:39 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: fixed bug 124061
+
+Fri Oct 10 02:47:22 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: cleanup
+ * encoding.c: fix a funny typo
+ * error.c xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h:
+ converted the Schemas code to the new error handling. PITA,
+ still need to check output from regression tests.
+
+Thu Oct 9 15:13:53 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c include/libxml/xmlerror.h: converted too
+ * tree.c: small cleanup
+
+Thu Oct 9 13:44:57 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: comment fix
+ * catalog.c include/libxml/xmlerror.h: migrating the catalog code
+ to the new infrastructure
+
+Thu Oct 9 00:36:03 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: final error handling cleanup
+ * xinclude.c error.c: converted XInclude to the new error handling
+ * include/libxml/xmlerror.h: added XInclude errors
+
+Wed Oct 8 23:31:23 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: bug in compression saving was crashing galeon
+ reported by teuf
+
+Wed Oct 8 21:18:12 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * error.c tree.c xmlIO.c xmllint.c: more cleanup through the
+ I/O error path
+
+Wed Oct 8 20:57:27 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: better handling of error cases
+
+Wed Oct 8 13:51:14 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c xmllint.c include/libxml/xmlerror.h: first pass at
+ cleaning up error handling in the I/O module.
+
+Wed Oct 8 10:52:05 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c include/libxml/xmlerror.h: error handling
+ cleanup of the Regexp module.
+
+Wed Oct 8 01:09:05 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: converting the tree module too
+ * error.c include/libxml/xmlerror.h: created a simpler internal
+ error reporting function.
+
+Tue Oct 7 23:19:39 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * error.c include/libxml/xmlerror.h include/libxml/xpath.h
+ include/libxml/xpathInternals.h xpath.c: cleaning up XPath
+ error reporting that time.
+ * threads.c: applied the two patches for TLS threads
+ on Windows from Jesse Pelton
+ * parser.c: tiny safety patch for xmlStrPrintf() make sure the
+ return is always zero terminated. Should also help detecting
+ passing wrong buffer size easilly.
+ * result/VC/* result/valid/rss.xml.err result/valid/xlink.xml.err:
+ updated the results to follow the errors string generated by
+ last commit.
+
+Tue Oct 7 14:16:45 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c include/libxml/xmlerror.h: last cleanup of error
+ handling in the Relax-NG module.
+
+Tue Oct 7 13:30:39 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * error.c relaxng.c include/libxml/xmlerror.h: switched Relax-NG
+ module to teh new error reporting. Better default report, adds
+ the element associated if found, context and node are included
+ in the xmlError
+ * python/tests/reader2.py: the error messages changed.
+ * result/relaxng/*: error message changed too.
+
+Mon Oct 6 10:46:35 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc
+ win32/configure.js: applied patch from Stéphane Bidoul to
+ fix the compilation of 2.6.0 code on Win32
+
+Mon Oct 6 10:16:30 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: fixing the script
+ * parser.c: replace sequences of RAW && NXT(.) == '.' with
+ memcmp calls, seems to not break conformance, slightly inflate
+ the size of the gcc generated code though.
+
+Sun Oct 5 23:30:48 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c parser.c valid.c include/libxml/parserInternals.h:
+ more cleanup of error handling in parserInternals, sharing the
+ routine for memory errors.
+
+Sun Oct 5 15:49:14 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c Makefile.am legacy.c parser.c parserInternals.c
+ include/libxml/xmlerror.h: more code cleanup, especially around
+ error messages, the HTML parser has now been upgraded to the new
+ handling.
+ * result/HTML/*: a few changes in the resulting error messages
+
+Sat Oct 4 23:06:41 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c include/libxml/xmlerror.h: more error/warning
+ handling cleanups, the XML parser module should be okay now.
+
+Sat Oct 4 01:58:27 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in xmldwalk.c include/libxml/Makefile.am
+ include/libxml/xmldwalk.h include/libxml/xmlversion.h.in:
+ integrated the xmlDocWalker API given by Alfred Mickautsch,
+ and providing an xmlReader like API but working on a xmlDocPtr.
+
+Sat Oct 4 00:18:29 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: more cleanup in make tests
+ * error.c valid.c parser.c include/libxml/xmlerror.h: more work
+ in the transition to the new error reporting strategy.
+ * python/tests/reader2.py result/VC/* result/valid/*:
+ few changes in the strings generated by the validation output
+
+Fri Oct 3 00:19:02 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: changed 'make tests' to use a concise output,
+ scrolling to see where thing broke wasn't pleasant
+ * configure.in: some beta4 preparation, but not ready yet
+ * error.c globals.c include/libxml/globals.h include/libxml/xmlerror.h:
+ new error handling code, last error informations are stored
+ in the parsing context or a global variable, new APIs to
+ handle the xmlErrorPtr type.
+ * parser.c parserInternals.c valid.c : started migrating to the
+ new error handling code, it's a royal pain.
+ * include/libxml/parser.h include/libxml/parserInternals.h:
+ moved the definition of xmlNewParserCtxt()
+ * parser.c: small potential buffer access problem in push code
+ provided by Justin Fletcher
+ * result/*.sax result/VC/PENesting* result/namespaces/*
+ result/valid/*.err: some error messages were sligthly changed.
+
+Thu Oct 2 13:01:13 2003 Aleksey Sanin <aleksey@aleksey.com>
+
+ * include/libxml/parser.h parser.c: introduced xmlStrPrintf
+ function (wrapper around snprintf)
+
+Wed Oct 1 21:12:06 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c: Fix error on output of high codepoint charref like
+ &#x10FFFF; , reported by Eric Hanchrow
+
+Wed Oct 1 14:20:10 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c include/libxml/DOCBparser.h: let's see how much
+ of a pain murrayc is really gonna be.
+
+Wed Oct 1 11:03:40 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: Applied fix for bug #123481 reported by Peter Derr
+
+Tue Sep 30 15:34:31 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c legacy.c parser.c: made the predefined entities
+ static predefined structures to avoid the work, memory and
+ hazards associated to initialization/cleanup.
+
+Tue Sep 30 14:30:47 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c Makefile.am configure.in legacy.c parser.c
+ parserInternals.c testHTML.c xmllint.c include/libxml/HTMLparser.h
+ include/libxml/parser.h include/libxml/parserInternals.h
+ include/libxml/xmlversion.h.in: added a new configure
+ option --with-push, some cleanups, chased code size anomalies.
+ Now a library configured --with-minimum is around 150KB,
+ sounds good enough.
+
+Tue Sep 30 12:31:00 AEST 2003 Malcolm Tredinnick <malcolm@commsecure.com.au>
+
+ * libxml-2.0-uninstalled.pc.in: New file for building against
+ uninstalled libxml2 builds.
+ * configure.in, Makefile.am: Support the *-uninstalled.pc file.
+ * .cvsignore: Ignore the new generated *.pc file.
+
+Tue Sep 30 02:38:16 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am SAX.c SAX2.c configure.in globals.c parser.c
+ parserInternals.c testReader.c testSAX.c xmlIO.c xmllint.c
+ xmlreader.c example/gjobread.c include/libxml/xmlversion.h.in:
+ added 2 new configure option: --with-reader --with-sax1
+ to allow removing the reader or non-xmlReadxxx() interfaces.
+
+Mon Sep 29 19:58:26 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in entities.c tree.c valid.c xmllint.c
+ include/libxml/tree.h include/libxml/xmlversion.h.in:
+ Adding a configure option to remove tree manipulation
+ code which is not strictly needed by the parser.
+
+Mon Sep 29 15:23:41 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c nanohttp.c: last finishing touch to the BeOS
+ patch from Marcin 'Shard' Konicki
+
+Mon Sep 29 15:15:08 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c SAX2.c c14n.c catalog.c configure.in debugXML.c
+ encoding.c entities.c nanoftp.c nanohttp.c parser.c relaxng.c
+ testAutomata.c testC14N.c testHTML.c testRegexp.c testRelax.c
+ testSchemas.c testXPath.c threads.c tree.c valid.c xmlIO.c
+ xmlcatalog.c xmllint.c xmlmemory.c xmlreader.c xmlschemas.c
+ example/gjobread.c include/libxml/HTMLtree.h include/libxml/c14n.h
+ include/libxml/catalog.h include/libxml/debugXML.h
+ include/libxml/entities.h include/libxml/nanohttp.h
+ include/libxml/relaxng.h include/libxml/tree.h
+ include/libxml/valid.h include/libxml/xmlIO.h
+ include/libxml/xmlschemas.h include/libxml/xmlversion.h.in
+ include/libxml/xpathInternals.h python/libxml.c:
+ Okay this is scary but it is just adding a configure option
+ to disable output, this touches most of the files.
+
+Mon Sep 29 12:53:56 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlmemory.c: better fix, avoids breaking the python bindings
+
+Mon Sep 29 11:21:33 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlmemory.c: fix a compilation problem when configuring
+ with debug but without mem-debug
+
+Sun Sep 28 20:53:17 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: cleanup, creating a new legacy.c module,
+ made sure make tests ran in reduced conditions
+ * SAX.c SAX2.c configure.in entities.c globals.c parser.c
+ parserInternals.c tree.c valid.c xlink.c xmlIO.c xmlcatalog.c
+ xmlmemory.c xpath.c xmlmemory.c include/libxml/xmlversion.h.in:
+ increased the modularization, allow to configure out
+ validation code and legacy code, added a configuration
+ option --with-minimum compiling only the mandatory code
+ which then shrink to 200KB.
+
+Sun Sep 28 02:15:07 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fix a bug raised by the Mips compiler.
+ * include/libxml/SAX.h include/libxml/parser.h: move the
+ SAXv1 block definitions to parser.h fixes bug #123380
+ * xmlreader.c include/libxml/xmlreader.h: reinstanciate
+ the attribute and element pool borken 2 commits ago.
+ Start playing with an entry point to preserve a subtree.
+ * entities.c: remove a warning.
+
+Sat Sep 27 12:19:38 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * encoding.c, parser.c, relaxng.c: further (final?) minor
+ changes for compilation warnings. No change to logic.
+
+Fri Sep 26 18:03:42 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * parser.c: fixed small problem with missing entities (test/ent2)
+
+Sat Sep 27 01:25:39 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: William's change allowed to spot a nasty bug in xmlDoRead
+ if the result is not well formed that ctxt->myDoc is not NULL
+ and uses the context dictionnary.
+
+Fri Sep 26 21:09:34 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: other patches from William Brack to avoid
+ compilation warnings on AIX.
+
+Fri Sep 26 11:03:08 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * HTMLparser.c, entities.c, xmlreader.c: minor change to
+ avoid compilation warnings on some (e.g. AIX) systems
+
+Fri Sep 26 16:49:25 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: fixed a backward compatibility problem
+ when formatting "deprecated SAXv1 function ignorableWhitespace"
+ could be reproduced by xmllint --format
+
+Fri Sep 26 15:50:44 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/libxml2-api.xml: rebuilt the API
+ * xmllint.c doc/xmllint.1 doc/xmllint.xml: added the new options
+ --nocdata and --nsclean to remove CDATA section and surperfluous
+ namespace declarations
+ * parser.c SAX2.c: implementation of the 2 new options
+
+Fri Sep 26 14:41:53 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c testHTML.c xmllint.c include/libxml/HTMLparser.h:
+ added the same htmlRead APIs than their XML counterparts
+ * include/libxml/parser.h: new parser options, not yet implemented,
+ added an options field to the context.
+ * tree.c: patch from Shaun McCance to fix bug #123238 when ]]>
+ is found within a cdata section.
+ * result/noent/cdata2 result/cdata2 result/cdata2.rdr
+ result/cdata2.sax test/cdata2: add one more cdata test
+
+Thu Sep 25 23:03:23 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c xmllint.c doc/libxml2-api.xml include/libxml/parser.h:
+ Changed the new xmlRead/xmlCtxtRead APIs to have an extra
+ base URL parameter when not loading from a file or URL.
+
+Thu Sep 25 16:23:58 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing a beta3 solving the ABI problems
+ * globals.c parser.c parserInternals.c testHTML.c HTMLparser.c SAX.c
+ include/libxml/globals.h include/libxml/SAX.h: make sure the
+ global variables for the default SAX handler are V1 ones to
+ avoid ABI compat problems.
+ * xmlreader.c: cleanup of uneeded code
+ * hash.c: fix a comment
+
+Thu Sep 25 14:16:51 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c hash.c parser.c include/libxml/xmlexports.h
+ include/libxml/xmlmemory.h include/libxml/xmlversion.h.in:
+ fixing some comments to avoid warnings from apibuild.py
+
+Wed Sep 24 23:42:08 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * win32/configure.js: patch from Stephane Bidoul for configuring
+ the beta2 version #123104
+
+Wed Sep 24 23:17:59 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: adding repeated parsing and validating tests
+ * SAX2.c parser.c tree.c include/libxml/parser.h: make the new
+ DOM tree building interfaces use the dictionary from the
+ parsing context to build the element and attributes names
+ as well as formatting spaces and short text nodes
+ * include/libxml/dict.h dict.c: added some reference counting
+ for xmlDictPtr because they can be shared by documents and
+ a parser context.
+ * xmlreader.c: a bit of cleanup, remove the specific tree freeing
+ functions and use the standard ones now.
+ * xmllint.c: add --nodict
+ * python/libxml.c: fix a stupid bug so that ns() works on
+ attribute nodes.
+
+Tue Sep 23 23:07:45 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c include/libxml/parser.h: adding a new set of
+ API for parsing xmlReadDoc() xmlReadFile() ... xmlReadIO()
+ and xmlCtxtReadDoc() ... xmlCtxtReadIO(). That with
+ a clear define of xmlParserOption, xmlCtxtUseOptions()
+ should simplify custom parsing without being tempted to
+ use global variables, and xmlCtxtReset() should allow reuse
+ of a context for multiple parsing.
+ * xmllint.c: switched to use xmlReadXXX, allow options to
+ be used simultaneously with less troubles.
+ * tree.c: simple warning removal
+ * doc/apibuild.py: small fix
+ * doc/libxml2-api.xml win32/libxml2.def.src: updated
+
+Tue Sep 23 11:15:23 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: revert xmlCreateDocParserCtxt() since this break
+ the parseDoc() python bindings
+
+Tue Sep 23 11:00:18 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: make sure xmlDetectSAX2() is called only at
+ parsing time to avoid breaking apps changing the SAX
+ callbacks after context allocation, change xmlCreateDocParserCtxt()
+ to use an immutable buffer instead of a copy
+
+Tue Sep 23 09:40:33 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: applied patch from Markus Keim fixing a problem
+ with I/O callback registration.
+ * include/libxml/xmlerror.h: fixed #122994 comment numbering
+ for xmlParserErrors
+
+Mon Sep 22 12:21:11 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c include/libxml/tree.h: the uri arg to xmlNodeSetBase is
+ really a const xmlChar*
+ * xmlreader.c include/libxml/xmlreader.h: addin the
+ xmlTextReaderConstString() to get an interned string from
+ the reader
+
+Sun Sep 20 17:22:20 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * error.c: fixed a warning message (trivial)
+ * doc/search.php: removed incorrect warning message when word
+ search not found in last of multiple tables (bug 119535)
+
+Fri Sep 19 14:26:28 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing a 2.6.0-beta2 release
+ * xmlIO.c: avoid a warning
+ * tree.c: avoid duplicate code in xmlReplaceNode as pointed out
+ by Chris Ryland
+ * include/libxml/dict.h: add a QName access lookup to the
+ dictionary.
+ * xmlreader.c include/libxml/xmlreader.h: adding const access
+ based on the dictionary interface for string read from the
+ reader, the node content access is still TODO, it's too different
+
+Fri Sep 19 00:01:08 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c: fixing namespace DTD validations
+ * result/valid/ns2.xml result/valid/ns.xml: the output of defaulted
+ namespaces is slightly different now.
+ * Makefile.am: report the memory used in Timingtests (as well as time)
+
+Thu Sep 18 15:29:46 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: add streaming on memory regression tests, found
+ bad bugs in the reader interface
+ * xmlreader.c: fixing bugs w.r.t. very large names, and special
+ condition in end of file.
+ * xmlIO.c tree.c include/libxml/tree.h include/libxml/xmlIO.h:
+ adding immutable buffers, and parser input based on those,
+ but this should not be used (yet) for general parsing
+ * parser.c: added a comment about using immutable buffers for
+ general parsing.
+ * result/bigname.xml.rdr result/bigname2.xml.rdr: fixing the
+ output of the regression tests
+ * xmllint.c: using the immutable buffers when streaming on
+ mmaped file (--stream --memory)
+
+Thu Sep 18 12:04:50 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * dict.c: the last patch broke unicity of returned strings, removed
+
+Thu Sep 18 00:31:02 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: add a Timingtests target to check bad behaviour
+ from the streaming engine
+ * dbgen.pl dbgenattr.pl: perl script to generate big instances
+ * xmlreader.c: fix a bad behaviour on large buffer inputs
+
+Wed Sep 17 23:25:47 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * dict.c xmlreader.c: two small improvements
+
+Wed Sep 17 22:53:32 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: avoid a leak with previous patch
+
+Wed Sep 17 22:06:11 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: use stderr and not stdout for default errors
+ in python environment bug #122552
+
+Wed Sep 17 21:33:57 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: small fix from Rob Richards for input filename
+ * xmllint.c: fixes for --repeat and --memory/--stream for speed tests
+ * xmlIO: adding a guard in one function
+
+Wed Sep 17 15:57:44 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c xmlreader.c include/libxml/parser.h: more performance hunting
+ reducing memory allocation and free and avoiding expensive routines
+
+Wed Sep 17 12:23:41 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c parser.c parserInternals.c xmlreader.c: started messing
+ seriously with per-document dict and element and attribute nodes
+ reuse in the xmlReader. This seems to lead to an interesting
+ speedup of the xmlReader already.
+
+Wed Sep 17 01:07:56 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * dict.c include/libxml/dict.h: do string allocations in large
+ pools, allowing to find if a string pertain to a dict quickly
+ * xmllint.c: fix --stream --repeat --timing
+ * Makefile.am: the testThreads run output should be seen.
+
+Mon Sep 15 16:46:28 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c include/libxml/parser.h: starting work on reusing the
+ parser dictionary for the element and attribute tag names.
+ Add pools for Element and Attributes in the parser context,
+ which should help speeding up the reader.
+ * Makefile.am result/*.rdr : adding non-python reader regression
+ tests.
+
+Mon Sep 15 14:54:42 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c parser.c valid.c: starting to cleanup some of the
+ problems exposed by the W3C/NIST regression suite.
+ * result/ent7.sax result/xml2.sax: small fixes.
+
+Mon Sep 15 11:46:47 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: more parser error factoring
+
+Sun Sep 14 21:53:39 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * HTMLtree.c: Fixed bug 121394 - missing ns on attributes
+
+Sun Sep 14 21:43:32 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c include/libxml/xmlerror.h: factoring of more
+ error handling code, serious size reduction and more lisibility
+ of the resulting code.
+ * parserInternals.c parser.c include/libxml/parserInternals.h
+ include/libxml/parser.h: changing the way VC:Proper Group/PE Nesting
+ checks are done, use a counter for entities. Entities where freed and
+ reallocated at the same address failing the check.
+ * tree.c: avoid a warning
+ * result/valid/* result/VC/*: this slightly changes some validation
+ error messages.
+
+Sun Sep 14 11:03:27 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * valid.c: fixed bug 121759 - early declaration of
+ attribute-list in external DTD
+
+Sat Sep 13 14:42:11 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c include/libxml/xmlerror.h: starting cleaning up
+ error handling, factorize error processing
+ * doc/xmllint.html: update of the page, remove --sgml
+
+Sat Sep 13 02:13:50 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am DOCBparser.c parserInternals.c testDocbook.c
+ xmllint.c doc/xmllint.xml doc/xmllint.1: removing the
+ broken pseudo SGML DocBook parser code.
+
+Fri Sep 12 17:24:11 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fix a problem with strcpy() in xmlXPathFormatNumber()
+ valgrind pointed out the strings overlapped. cleanup .
+
+Fri Sep 12 11:43:12 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied speedup to xmlSearchNs() as suggested by
+ Luca Padovani. Cleaned up xmlSearchNsByHref() in the process
+ applying the same trick.
+
+Fri Sep 12 01:36:20 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c parserInternals.c tree.c include/libxml/parser.h
+ include/libxml/xmlerror.h: adding namespace checkings
+ while making sure they still parse as wellformed documents.
+ Add an nsWellFormed status report to the context, and
+ provide new appropriate error codes.
+ * Makefile.am result/namespaces/* test/namespaces/*: add
+ specific regression testing for the new namespace support
+ * test/att5 result/noent/att5 result/att5 result/att5.sax:
+ add more coverage for the attribute parsing and normalization
+ code.
+
+Fri Sep 12 01:34:19 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * threads.c: backport of a thread bugfix from 2_5_X branch
+
+Thu Sep 11 18:29:18 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed a bug in one corner case of attribute parsing.
+
+Thu Sep 11 16:21:53 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in doc/* : 2.6.0beta1 changes
+ * SAX2.c hash.c parser.c parserInternals.c: Fixing attribute
+ normalization, might not be totally fixed but this should
+ make sure SAX event provide the right strings for attributes
+ except entities for which libxml2 is different by default
+ This should fix #109564
+ * result/attrib.xml.sax result/ent3.sax result/p3p.sax: minor changes
+ in attribute callback values
+ * result/c14n/with-comments/example-4
+ result/c14n/without-comments/example-4: this also fixes a subtle
+ bug in the canonicalization tests.
+
+Wed Sep 10 12:38:44 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ Time to commit 3 days of work rewriting the parser internal,
+ fixing bugs and migrating to SAX2 interface by default. There
+ is some work letf TODO, like namespace validation and attributes
+ normalization (this break C14N right now)
+ * Makefile.am: fixed the test rules
+ * include/libxml/SAX2.h include/libxml/parser.h
+ include/libxml/parserInternals.h SAX2.c parser.c
+ parserInternals.c: changing the parser, migrating to SAX2,
+ adding new interface to switch back to SAX1 or initialize a
+ SAX block for v1 or v2. Most of the namespace work is done
+ below SAX, as well as attribute defaulting
+ * globals.c: changed initialization of the default SAX handlers
+ * hash.c tree.c include/libxml/hash.h: added QName specific handling
+ * xmlIO.c: small fix
+ * xmllint.c testSAX.c: provide a --sax1 switch to test the old
+ version code path
+ * result/p3p result/p3p.sax result/noent/p3p test/p3p: the new code
+ pointed out a typo in a very old test namespace
+
+Sun Sep 7 19:58:33 PTD 2003 William Brack <wbrack@mmm.com.hk>
+
+ * xmlIO.c include/libxml/xmlIO.h parser.c: Implemented detection
+ of compressed files, setting doc->compressed appropriately
+ (bug #120503).
+
+Sun Sep 7 22:53:06 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: try to cope with the fact that apps may still
+ have allocated smaller SAX callbak block
+
+Sun Sep 7 11:11:45 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * dict.c: allow to give -1 for undefined length in lookups
+ * include/libxml/parser.h parser.c parserInternals.c testSAX.c:
+ first round of work on the new SAX2 interfaces, the API
+ will change but commiting before changing for historical
+ reference.
+
+Sat Sep 6 10:55:01 PTD 2003 William Brack <wbrack@mmm.com.hk>
+
+ * SAX2.c, xmlIO.c: fixed bug #121210 (callback to sax->error,
+ sax->warning with wrong params).
+
+Fri Sep 5 10:33:42 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/globals.h: patch from Stéphane Bidoul to export
+ globals entry points to the python bindings
+
+Wed Sep 3 15:24:41 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: when creating a DOCTYPE use "html" lowercase
+ by default instead of "HTML"
+ * parser.c xmlreader.c: optimization, gain a few % parsing speed by
+ avoiding calls to "areBlanks" when not needed.
+ * include/libxml/parser.h include/libxml/tree.h: some structure
+ extensions for future work on using per-document dictionaries.
+
+Wed Sep 3 15:08:06 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am results/*.sax SAXResult/*: removing the SAXresults
+ tree, keeping result in the same tree, added SAXtests to the
+ default "make tests"
+
+Tue Sep 2 15:59:04 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * include/libxml/xmlexports.h: defined additional macros which
+ affect exports and added mingw section
+
+Mon Sep 1 15:15:18 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/index.py: fixed problem parsing xhtml docs
+ * doc/xmlreader.html,doc/guidelines.html: small modification
+ to avoid problem in python parsing.
+ * doc/search.php: fixed upper case filename problem for XSLT docs
+
+Mon Sep 1 22:55:09 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: patch from Mark Vakoc that allows compiling
+ with XInclude but without XPointer support.
+
+Mon Sep 1 22:31:38 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in xml2-config.in: Applied a patch from Kevin P. Fleming
+ to add --libtool-libs option to xml2-config script.
+
+Sun Aug 31 21:52:12 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/README.docs, doc/Makefile.am: new file added,
+ giving some description of the documentation generation process
+ * doc/search.php: fixed problem with upper case on filenames
+
+Fri Aug 29 12:25:01 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/Makefile.bcb: updates by Eric Zurcher
+
+Thu Aug 28 22:58:38 PDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/apibuild.py, doc/libxml2-api.xml: enhanced code
+ to compensate for pollution from Igor's header taint
+ (quick before Daniel notices)
+
+Thu Aug 28 23:01:36 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c: fixed a namespace error on attribute reporting bug
+ pointed out by Tobias Reif
+ * test/p3p result/p3p result/noent/p3p: this test case was wrong
+ using xmlsn instead of xmlns...
+
+Thu Aug 28 18:25:07 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * include/libxml/globals.h include/libxml/xmlexports.h: fixed
+ typos reported by Mark Vakoc
+
+Thu Aug 28 08:59:51 MDT 2003 John Fleck <jfleck@inkstain.net>
+
+ add:
+ * doc/tutorial/api.html
+ * doc/tutorial/ar01s09.html
+ * doc/tutorial/includexpath.c
+ updated
+ * doc/tutorial/*.html
+ fix my bad - forgot to check in new files when I last
+ updated
+
+
+Thu Aug 28 14:31:13 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/Makefile.bcb: new file, support for Borland C++
+ * xmllint.c: fixed time inclusion for various compilers
+
+Thu Aug 28 12:32:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * parser.c parserInternals.c DOCBparser.c HTMLparser.c: added
+ few casts to shut the compiler warnings
+
+Thu Aug 28 12:23:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/Makefile.* win32/configure.js: fixed for mingw
+
+Thu Aug 28 10:01:44 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c threads.c: fixing bug #120870 try to avoid problem
+ with uninitialized mutexes
+
+Wed Aug 27 16:12:41 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed an error reporting bug in Relax-NG when we end
+ up with multiple states, select the "best" one. Fix #120682
+ * result/relaxng/tutor11_2_3.err: small change resulting
+
+Wed Aug 27 11:25:25 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: applied base64 support patch from Anthony Carrico
+
+Wed Aug 27 10:58:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * include/libxml/[threads-xpointer].h: realigned parameters
+ after taint
+
+Wed Aug 27 09:59:54 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * include/libxml/xmlexports.h: fixed defs for Borland compiler,
+ as reported by Eric Zurcher
+
+Tue Aug 26 15:54:04 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed bug #120386 again a problem introduced when
+ trying to reuse automata for content validation. Fix a bug report
+ problem on zeroOrMore
+ * result/relaxng/tutor3_7_err: change slightly error reporting.
+
+Mon Aug 25 13:24:57 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/Makefile.am: make sure the new header will
+ be included when generating a new distribution.
+
+Mon Aug 25 12:37:05 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed a couple of stupid bugs in the state allocation
+ routines which led to bug #120040 and the ones reported by
+ Martijn Faassen
+
+Mon Aug 25 12:37:23 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * include/libxml/parserInternals.h include/libxml/relaxng.h
+ include/libxml/SAX.h include/libxml/SAX2.h: realigned the
+ parameters after taint.
+
+Mon Aug 25 11:16:01 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * include/libxml/xmlversion.h.in: moved export defs to a separate
+ file for consistency.
+ * include/libxml/xmlexports.h: new file, contains export defs.
+
+Mon Aug 25 11:01:49 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * include/libxml/*.h genUnicode.py: exportability taint
+ of the headers.
+
+Thu Aug 21 12:37:46 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: make the deprecated interfaces log an error message
+ to be sure it won't get used.
+
+Thu Aug 21 00:50:32 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am SAX2.c include/libxml/Makefile.am include/libxml/SAX2.h:
+ Adding new version of the SAX interface, it's not there yet,
+ currently just preparing the work
+ * globals.c parser.c SAX.c include/libxml/SAX.h
+ include/libxml/globals.h include/libxml/parser.h: doing some
+ refactoring of the SAXv1 interfaces, obsoleting a bunch of them
+ while keeping functionalities, preparing SAX2 integration.
+ * dict.c: small cleanup.
+
+Wed Aug 20 00:20:01 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixes a small bug introduced in last commit and detected
+ by valgrind.
+
+Tue Aug 19 16:54:18 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * dict.c hash.c: optimization when freeing hash tables.
+ * parser.c xmlIO.c include/libxml/tree.h: some tuning of buffer
+ allocations
+ * parser.c parserInternals.c include/libxml/parser.h: keep a
+ single allocated block for all the attributes callbacks,
+ avoid useless malloc()/free()
+ * tree.c: do not realloc() when growing a buffer if the buffer
+ ain't full, malloc/memcpy/free avoid copying memory.
+
+Mon Aug 18 18:37:01 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c doc/xmllint.xml doc/xmllint.1: added option
+ --dtdvalidfpi for Tobias Reif
+
+Mon Aug 18 14:03:03 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * dict.c include/libxml/dict.h Makefile.am include/libxml/Makefile.am:
+ new dictionary module to keep a single instance of the names used
+ by the parser
+ * DOCBparser.c HTMLparser.c parser.c parserInternals.c valid.c:
+ switched all parsers to use the dictionary internally
+ * include/libxml/HTMLparser.h include/libxml/parser.h
+ include/libxml/parserInternals.h include/libxml/valid.h:
+ Some of the interfaces changed as a result to receive or return
+ "const xmlChar *" instead of "xmlChar *", this is either
+ insignificant from an user point of view or when the returning
+ value changed, those function are really parser internal methods
+ that no user code should really change
+ * doc/libxml2-api.xml doc/html/*: the API interface changed and
+ the docs were regenerated
+
+Sun Aug 17 23:05:38 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: applied patch to xmlCleanupParser from Dave Beckett
+
+Sat Aug 16 22:53:42 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/parsedecl.py, doc/libxml2-refs.xml, doc/API*.html:
+ fixed part (2) of bug 119535 (wrong alpha case on filenames)
+
+Sat Aug 16 20:35:28 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/API*.html, doc/html/*: regenerated API documentation
+ for xmlsoft.org (part of Bug 119535)
+
+Fri Aug 15 14:58:37 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * encoding.c, threads.c, include/libxml/HTMLparser.h,
+ doc/libxml2-api.xml: Minor changes to comments, etc. for
+ improving documentation generation
+ * doc/Makefile.am: further adjustment to auto-generation of
+ win32/libxml2.def.src
+
+Fri Aug 15 02:24:20 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * News configure.in: preparing libxml2-2.5.10 release
+ * doc/* : updated the doc and rebuilt
+
+Fri Aug 15 01:55:53 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixing the xmlSAXParseDTD bug #119536 raised by
+ Malcolm Tredinnick with the patch he suggested.
+
+Fri Aug 15 01:37:10 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: allocation error #119784 raised by Oliver Stoeneberg
+
+Fri Aug 15 00:41:58 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: fixing an use of strcpy() where both strings overlap
+ pointed out by valgrind.
+
+Thu Aug 14 17:10:39 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c globals.c include/libxml/xmlmemory.h: get rid of
+ some compilation warnings.
+ * xinclude.c: fix the performance problem reported by Kevin Ruscoe
+ plus some cleanup and better error reporting.
+
+Thu Aug 14 14:13:43 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: applied UTF-16 encoding handling patch provided by
+ Mark Itzcovitz
+ * encoding.c parser.c: more cleanup and fixes for UTF-16 when
+ not having iconv support.
+
+Thu Aug 14 03:19:08 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in example/Makefile.am libxml.h nanoftp.c
+ nanohttp.c xmllint.c: Applied patch from Mikhail Grushinskiy for
+ mingw compiler on Windows.
+
+Thu Aug 14 02:28:36 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed the serious CPU usage problem reported by
+ Grant Goodale
+ * HTMLparser.c: applied patch from Oliver Stoeneberg about a free
+ missing in htmlSAXParseDoc
+
+Tue Aug 12 22:48:10 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * doc/Makefile.am: Removed dependency from libxml2.def.src
+
+Tue Aug 12 18:55:08 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * autogen.sh: took away the requirement for automake-1.4,
+ changed the messages for getting auto* tools to current
+ gnu pages.
+ * configure.in: added check for Linux Dec alpha requiring
+ -ieee flag, fixed test for ipv6
+ * trionan.c: fixed problem for compiling on Linux Dec alpha
+ using native compiler
+ * doc/Makefile.am: implemented regeneration of win32/libxml2.def.src
+ whenever libxml2-api.xml is changed.
+
+Mon Aug 11 17:02:23 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: cleaning up a problem when parsing UTF-16 and libiconv
+ is not used.
+
+Sun Aug 10 08:13:22 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * win32/libxml2.def.src: renerated with fixed libxml2-api.xml
+
+Sun Aug 10 00:22:55 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * News configure.in: preparing libxml2-2.5.9 release
+ * doc/* : updated the doc and rebuilt
+
+Sat Aug 9 20:00:13 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlreader.h doc/libxml2-api.xml: changing an enum
+ definition to get a correct API XML description. This was apparently
+ breaking Windows build.
+
+Sat Aug 9 13:41:21 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixed a nasty bug #119387, bad heuristic from
+ the progressive HTML parser front-end on large character data
+ island leading to an erroneous end of data detection by the
+ parser. Some cleanup too to get closer from the XML progressive
+ parser.
+
+Sat Aug 9 00:42:47 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * win32/configure.js: Added in support for the ISO8859X
+ module (patch provided by Jesse Pelton)
+
+Fri Aug 8 15:56:32 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c tree.c threads.c: hum try to avoid some troubles
+ when the library is not initialized and one try to save, the
+ locks in threaded env might not been initialized, playing safe
+ * xmlschemastypes.c: apply patch for hexBinary from Charles Bozeman
+ * test/schemas/hexbinary_* result/schemas/hexbinary_*: also added
+ his tests to the regression suite.
+
+Fri Aug 8 18:47:38 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * win32/defgen.xsl, win32/libxml2.def.src: Bug 119343
+ (with apologies to Igor) - Enhanced handling of docb and
+ nanohttp.
+
+Thu Aug 7 21:13:22 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * encoding.c: further small changes for warnings when
+ configured with --with-iconv=no
+
+Wed Aug 6 12:32:11 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * error.c trionan.[ch] testThreads.c python/generator.py:
+ further small changes to elminate most of the remaining
+ warnings.
+
+Tue Aug 5 23:51:21 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * error.c HTMLparser.c testC14N.c testHTML.c testURI.c
+ xmlcatalog.c xmlmemory.c xmlreader.c xmlschemastypes.c
+ python/libxml.c include/libxml/xmlmemory.h: small changes
+ to syntax to get rid of compiler warnings. No changes
+ to logic.
+
+Mon Aug 4 22:40:54 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/libxml2-api.xml doc/html/*: rebuilt the API and docs.
+
+Mon Aug 4 21:40:34 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed a small problem in the patch for #118763
+ * result/HTML/doc3.htm*: this reverts back to the previous result
+
+Sun Aug 3 21:41:49 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/FAQ.html doc/xml.html: applied doc patch to xml.html
+ and rebuilt, apparently some C++ wrappers are not available,
+ c.f. bug #118943
+
+Sun Aug 3 21:30:31 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixing HTML attribute serialization bug #118763
+ applying a modified version of the patch from Bacek
+ * result/HTML/doc3.htm*: this modifies the output from one test
+
+Sun Aug 3 21:02:30 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c include/libxml/tree.h: added a new API to split a
+ QName without generating any memory allocation
+ * valid.c: fixed another problem with namespaces on element
+ in mixed content case
+ * python/tests/reader2.py: updated the testcase with
+ Bjorn Reese fix to reader for unsignificant white space
+ * parser.c HTMLparser.c: cleanup.
+
+Sun Aug 3 20:55:40 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: trying to fix #118754 of possible recursion in the
+ catalogs. Not fantastically happy about the current fix since
+ it's likely to break under very thread intensive concurrent
+ access to the catalog. Better solution might to keep the depth
+ an extra argument to the resolution functions.
+
+Sun Aug 3 18:56:54 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixed bug #118712 about mixed content, and namespaced
+ element names.
+ * test/valid/mixed_ns.xml result/valid/mixed_ns*: added a check
+ in the regression tests
+
+Fri Aug 1 23:55:23 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ Coninuing work on bug 118559
+ * DOCBparser.c: removed 2 unsed vars
+ * xmlregexp.c: changed some numeric const to their enum symbols
+ * xmlreader.c: changed one var define from int to enum
+ (a little more to be done, awaiting co-ordination)
+ * relaxng.c: deleted one unused var
+ * xmllint.c: deleted some unused vars, changed one arg
+ val from int to enum
+ * testHTML.c, testDocbook.c: changed some arg vals to enum const
+ * xmlIO.c: fixed typo from last night (small warning msg)
+
+Thu Jul 31 22:44:33 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ Working on bug 118559
+ * error.c: deleted unused variable
+ * parserInternals.c: deleted unneeded 'const' qualifier
+ * parser.c: changed variable type for enum temp storage
+ * xmlIO.c: changed debugging var to be inside #ifdef
+ * valid.c: removed unused variable
+ * HTMLparser.c: removed some unneeded 'const' qualifiers
+ * xpath.c: added some type casts, removed some unused vars
+ * xinclude.c: added one type cast
+ * nanohttp.c: repositioned some #ifdef to avoid unused var
+ * nanoftp.c: removed unused var
+
+Wed Jul 30 14:57:55 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: applied a patch from William Brack about
+ the problem of parsing very large HTML instance with comments
+ as raised by Nick Kew
+
+Wed Jul 30 12:29:38 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h: applying cleanup
+ patch from Bjorn Reese for xmlTextReaderNodeType() and
+ significant whitespace. There is an enum for node type
+ values now.
+
+Wed Jul 30 11:08:21 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: applying patch from Peter Jacobi to added
+ ISO-8859-x encoding support when iconv is not available
+ * configure.in include/libxml/xmlversion.h.in
+ include/libxml/xmlwin32version.h.in: added the glue needed
+ at the configure level and made it the default for Windows
+
+Tue Jul 29 16:43:48 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml2class.txt:
+ patch from Joachim Bauch + cleanup for Relax NG error callbacks
+ in python
+
+Tue Jul 29 12:46:08 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c parserInternals.c tree.c: applied Peter Jacobi encoding
+ cleanup patch, and also avoided a possible memory leak
+
+Tue Jul 29 09:28:09 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: fix the previous commit
+
+Tue Jul 29 12:28:17 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * HTMLparser.c: fixed problem with comments reported by Nick Kew
+ * encoding.c: added routines xmlUTF8Size and xmlUTF8Charcmp for
+ some future cleanup of UTF8 handling
+
+Mon Jul 28 16:39:14 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: applied a change suggested by Sean Griffin in bug
+ #118494 about a memory leak in EXSLT
+
+Sun Jul 27 14:30:56 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed a Relax-NG compilation/streaming bug introduced
+ when fixing the previous Relax-NG bugs
+ * result/relaxng/*: This slightly changes the output messages of
+ some regression tests.
+ * configure.in: added support of -with-fexceptions for nested C++
+ support.
+
+Thu Jul 24 15:46:02 MDT 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/apa.html
+ * doc/tutorial/apb.html
+ * doc/tutorial/apc.html
+ * doc/tutorial/apd.html
+ * doc/tutorial/ape.html
+ * doc/tutorial/apf.html
+ * doc/tutorial/apg.html
+ * doc/tutorial/aph.html
+ * doc/tutorial/ar01s02.html
+ * doc/tutorial/ar01s03.html
+ * doc/tutorial/ar01s04.html
+ * doc/tutorial/ar01s05.html
+ * doc/tutorial/ar01s06.html
+ * doc/tutorial/ar01s07.html
+ * doc/tutorial/ar01s08.html
+ * doc/tutorial/index.html
+ * doc/tutorial/ix01.html
+ * doc/tutorial/xmltutorial.pdf
+ * doc/tutorial/xmltutorial.xml
+ update tutorial with XPath example
+
+
+Thu Jul 24 17:07:06 IST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c parser.c: fixing a bug about a special case of namespace
+ handling, this closes bug #116841
+
+Wed Jul 23 20:52:36 IST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c result/relaxng/*: checked and fixed the compilation
+ of RNG schemas, fixes a couple of bugs #117097 and #117001 .
+ This slightly changes the output messages of some regression tests.
+
+Wed Jul 23 15:15:08 IST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: fixed an out of bound error #118052 , the good
+ part if that base64 code was not in use yet ...
+
+Tue Jul 22 19:42:15 MDT 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.html
+ include html version of the xmllint man page, so an
+ up-to-date version is visible on the Web
+
+Mon Jul 21 21:53:43 IST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c include/libxml/xinclude.h: added a new API
+ xmlXIncludeProcessTree() to process XInclude only on a subtree
+ this should fix bug #115385
+
+Fri Jul 18 17:11:42 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c include/libxml/relaxng.h: adding Get interface for
+ the error callback and parameters of parsing and validation
+ contexts
+ * xmlreader.c: patch to fix bug #117702 about incomplete Read()
+ on text nodes.
+
+Wed Jul 16 23:15:53 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: patch from Dodji Seketeli about UTF16 BOM
+ when using the push XML parser.
+ * result/utf16bom.xml result/noent/utf16bom.xml test/utf16bom.xml:
+ added the test to the regression suite.
+
+Tue Jul 15 22:03:13 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c: add xmlThrDefMutex = NULL in xmlCleanupGlobals()
+ as suggested by Rob Richards
+
+Tue Jul 15 15:30:55 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c HTMLparser.c entities.c parser.c relaxng.c
+ xmlschemas.c xpath.c: removed some warnings by casting xmlChar
+ to unsigned int and a couple of others.
+
+Fri Jul 11 16:44:22 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: fixes a segfault on empty hexBinary strings
+
+Thu Jul 10 16:02:47 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c nanohttp.c: cleanup patches from Peter Breitenlohner
+
+Tue Jul 8 16:02:19 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c threads.c: fixes some problem when freeing unititialized
+ mutexes
+
+Tue Jul 8 14:15:07 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c nanohttp.c: the modules should not import <config.h>
+ directly, some cleanups
+ * xmlschemas.c: Peter Sobisch found a nasty bug in the Schemas
+ validation code.
+
+Mon Jul 7 18:00:51 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * win32/configure.js: Jesse Pelton pointed out a problem in the
+ javascript code.
+
+Mon Jul 7 16:39:31 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS doc/*: regenerated
+ * nanoftp.c nanohttp.c: might fix includes problems with the
+ Ipv6 support on solaris
+ * tree.c: patch from Markus Keim about xmlHasNsProp() on attributes
+ defined as #IMPLIED
+
+Sun Jul 6 23:09:13 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in doc/*: preparing release 2.5.8
+ * nanohttp.c: changed some preprocessor block
+ * xmlschemastypes.c: applied patch from Charles Bozeman adding
+ hexBinary schema datatype and adding support for totalDigits and
+ fractionDigits facets.
+
+Sun Jul 6 19:56:18 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c xpath.c: fixed 2 bugs pointed in #116448
+
+Sun Jul 6 19:34:17 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: fixed bug #116095 removing the error message when
+ reapplying XInclude to a document.
+
+Sat Jul 5 22:40:23 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: applied small changes to portability layer for
+ compilation on DJGPP Ms-DOS compiler.
+
+Sat Jul 5 22:30:25 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c HTMLparser.c: use the character() SAX callback
+ if the cdataBlock ain't defined.
+ * xpath.c: fix bug #115349 allowing compilation when configured
+ with --without-xpath since the Schemas code needs NAN and co.
+
+Sat Jul 5 00:51:30 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ Fixed problem with multi-threading, shown by the test program
+ testThreads. After fix, ran mutiple tests on various speed
+ machines (single and dual processor X86), which all seem okay.
+
+ * catalog.c: added missing xmlRMutexUnlock in xmlLoadCatalog
+
+ * threads.c: added missing initialisation for condition variable
+ in xmlNewRMutex.
+
+Sat Jun 21 16:10:24 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ Applying IPv6 patch from Archana Shah <archana.shah@wipro.com>
+ closing bug #114837
+
+ * configure.in: Added checks for IPv6 support and getaddrinfo().
+
+ * acconfig.h: Defined HAVE_GETADDRINFO and SUPPORT_IP6.
+
+ * config.h.in: Defined HAVE_GETADDRINFO and SUPPORT_IP6.
+
+ * nanoftp.c: Structure xmlNanoFTPCtxt contains either sockaddr_storage
+ field or sockaddr_in field, depending upon the availability of IPv6
+ support.
+ have_ipv6(): Added to check for run-time IPv6 support.
+ (xmlNanoFTPScanURL), (xmlNanoFTPUpdateURL), (xmlNanoFTPScanProxy):
+ Modified to parse a URI with IPv6 address given in [].
+ (xmlNanoFTPConnect): Changed to use getaddrinfo for address
+ resolution, if it is available on the system, as gethostbyname
+ does not return IPv6 addresses on some platforms.
+ (xmlNanoFTPGetConnection): Modified type of dataAddr variable to
+ sockaddr_storage or sockaddr_in depending upon the IPv6 support.
+ Sending EPSV, EPRT or PASV, PORT depending upon the type of address
+ we are dealing with.
+
+ * nanohttp.c: (have_ipv6): Added to check for run-time IPv6 support.
+ (xmlNanoHTTPScanURL), (xmlNanoHTTPScanProxy): Modified to parse
+ a URI with IPv6 address given in [].
+ (xmlNanoHTTPConnectHost): Modified to use getaddrinfo if it is
+ available on the system. Also IPv6 addresses will be resolved by
+ gethostbyname only if IPv6 run-time support is available.
+ (xmlNanoHTTPConnectAttempt): Modified to deal with IPv6 address.
+
+Sat Jun 14 18:46:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/configure.js include/win32config.h
+ include/libxml/xmlversion.h.in: Applied the patch for BCB
+ by Eric Zurcher.
+
+Fri Jun 13 14:27:19 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am doc/html/*: reverted back patch for #113521,
+ due to #115104 and while fixing #115101 . HTML URLs must not
+ be version dependant.
+
+Fri Jun 13 12:03:30 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c: do not generate &quot; for " outside of attributes
+ * result//*: this changes the output of some tests
+
+Mon Jun 9 12:28:58 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c xmlIO.c: trying to fix #114277 about when file
+ remapping and escaping should really be attempted.
+
+Mon Jun 9 11:06:09 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/*: applied a patch from Gman for building docs
+ * valid.c xmllint.c include/libxml/valid.h: applied a patch from
+ Gary Pennington to provide an allocator for xmlValidCtxt
+ * xmlreader.c: applied patch from Jacek Konieczny fixing bug
+ #113580 about data not being passed immediately.
+
+Thu Jun 5 11:31:02 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied a couple of patches from Mark Itzcovitz
+ to handle saving back "UTF-16" documents.
+
+Mon Jun 2 21:56:15 MVT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c xmlschemas.c include/libxml/schemasInternals.h: commiting
+ some work done while in the Maldives (hence the timezone on the
+ laptop !)
+ * result/schemas/length3* test/schemas/deter0_*
+ test/schemas/group0_*: some tests added too
+
+Mon Jun 2 15:34:17 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: small fix
+ * xmlIO.c: fixed an error message
+
+Tue May 20 14:21:23 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: fixing Red Hat bug #91013 where xmllint was
+ accepting an improper UTF8 sequence
+
+Sat May 17 12:53:11 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * threads.c: applied the patch from Stéphane Bidoul for getting
+ rid of extra threads in a dynamic library.
+ * win32/configure.js: threads default to 'native' now.
+
+Fri May 16 13:17:52 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixing bug #112904: html output method escaped
+ plus sign character in URI attribute.
+
+Thu May 15 18:06:18 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * build_glob.py global.data globals.c parser.c
+ include/libxml/globals.h: patch from Stéphane Bidoul for setting
+ up threads global defaults.
+ * doc/libxml2-api.xml: this extends the API with new functions
+ * python/tests/Makefile.am python/tests/reader2.py
+ python/tests/thread2.py: integrated the associated testcase and
+ fixed the error string used in reader2
+
+Wed May 14 14:56:46 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in libxml.spec.in python/Makefile.am: trying
+ to conciliate --with-python= requirements and RPM builds,
+ a PITA really...
+
+Tue May 13 18:30:34 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: oops last commit introduced a memory leak.
+
+Tue May 13 18:10:38 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c doc/xmllint.xml: added --nonet option
+ * doc/Makefile.am: fixing #112803 by adding --nonet when calling
+ xsltproc or xmllint
+ * doc/xmllint.xml doc/xmllint.1: also added --schema doc and
+ rebuilt
+ * HTMLparser.c: cleaned up the HTML parser context build when
+ using an URL
+
+Tue May 13 16:35:04 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in: added a comment about bug #112902
+
+Mon May 12 21:58:00 EDT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * minor cleanup of configure '--help' display
+ * error.c: enhanced xmlParserPrintFileContext to fix bug #109942
+
+Mon May 12 17:53:30 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: PI nodes in external subset were not freed :-\
+ fixes bug #112842
+
+Mon May 12 11:23:27 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: added --schema option to run WXS schema validation
+ * xmlschemas.c xmlschemastypes.c include/libxml/schemasInternals.h:
+ tried to improve error reporting in the Schema code, some cleanup
+ too.
+
+Sun May 11 16:13:20 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: fixed some problems in the handling of errors,
+ and attributes addressed by references.
+ * test/schemas/* result/schemas/*: dropped the verbosity level
+ and added a couple of new tests
+
+Sat May 10 16:01:21 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: Stéphane Bidoul found an off by one addressing
+ error on the error handling.
+
+Fri May 9 19:08:20 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: trying to fix #112673
+
+Fri May 9 18:14:16 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c catalog.c parser.c relaxng.c: removed multiple
+ warning, this fixed a bug and should close #111574
+
+Fri May 9 15:34:32 EDT 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: fixing bug #104081 with xs:all with an element
+ holding minOccurs="0"
+ * test/schemas/all_* result/schemas/all_*: added some regression
+ tests for that bug
+ * xmllint.c xmlreader.c: patches from Joerg Schmitz-Linneweber and
+ Garry Pennington to compile without schemas support.
+
+Thu May 1 10:02:35 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed a problem with xmlUnlinkNode() for DTDs.
+
+Wed Apr 30 14:16:08 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xml2-config.in: try to fix Red hat bug #89957, do not
+ output -L/usr/lib64
+ * xmlreader.c: fixed a typo in a comment
+
+Tue Apr 29 07:32:02 MDT 2003 John Fleck <jfleck@inkstain.ent>
+
+ * doc/tutorial/aph.html, ix01.html
+ forgot to cvs add the new files. Thanks to Roland van Laar
+ for pointing this out
+
+Tue Apr 29 14:36:49 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c doc/libxml2-api.xml: fixing a function comment
+ * doc/Makefile.am doc/apibuild.py doc/gnome-xml.sgml: switching
+ to the XML/XSLT doc generation closing #111799
+ * doc/html/*: complete update of the HTML results
+
+Mon Apr 28 14:51:41 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/defgen.xsl: fixed the conditional for unicode map,
+ removed hardcoded schema entries
+
+Mon Apr 28 02:19:00 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/defgen.xsl: new file, stylesheet for generating
+ win32/libxml2.def.src from doc/libxml2-api.xml
+ * win32/libxml2.def.src: is autogenerated from now on, changes
+ to this file will not appear here anymore
+
+Mon Apr 28 00:12:11 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * win32/configure.js python/setup.py.in: applied patch
+ from Stéphane Bidoul for the Python bindings on the new
+ release.
+
+Sun Apr 27 17:56:21 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * debugXML.c: included libxml/uri.h for xmlCanonicPath
+ declaration
+ * win32/configure.js: thread-enabled build is now default
+ * win32/libxml2.def.src: added more exports
+
+Sun Apr 27 00:23:05 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS doc/*.xsl doc/*.html: updated the web site separated
+ developers from common pages, made the transition to XHTML1,
+ added validity checking to the makefile rules.
+
+Sat Apr 26 23:17:51 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fix for xmlIOParseDTD same as previous and reported
+ by Petr Pajas
+
+Sat Apr 26 15:26:04 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: applied fix to xmlSAXParseDTD from Malcolm Tredinnick
+ closing #111638
+
+Sat Apr 26 14:00:58 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py: fixed a problem in the generator where
+ the way functions are remapped as methods on classes was
+ not symetric and dependant on python internal hash order,
+ as reported by Stéphane Bidoul
+
+Fri Apr 25 21:52:33 MDT 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial:
+ xmltutorial.xml
+ xmltutorial.pdf
+ *.html
+ add appendix on generating compiler flags, more indexing
+
+Sat Apr 26 01:10:48 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * triodef.h vms/build_libxml.com: applied patch from Craig A. Berry
+ to get libxml-2.5.7 to compile on OpenVMS
+
+Fri Apr 25 18:42:35 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixing an xmlParseDTD bug raised by Petr Pajas
+
+Fri Apr 25 15:20:29 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am doc/xmlcatalog.1 doc/xmlcatalog_man.xml
+ doc/xmllint.1 doc/xmllint.xml: automated the generation of the
+ man page based on xsltproc and a stylesheet PI in the XML.
+
+Fri Apr 25 12:37:33 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xmllint.*: trying to fix #110541 where &nbsp; generated
+ character preventing rendering by the man command.
+
+Fri Apr 25 01:09:23 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS configure.in: preparing release 2.5.7
+ * doc/*: updated and rebuilt the docs
+ * doc/apibuild.py: fixed the script
+
+Thu Apr 24 19:11:12 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am doc/apibuild.py: make sure the OOM code don't
+ get in the way of the builds
+ * doc/libxml2-api.xml python/libxml2class.txt: automatic update
+
+Thu Apr 24 18:01:46 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am testOOM.c testOOMlib.[ch] : integrated the Out Of
+ Memory test from Havoc Pennington #109368
+ * SAX.c parser.c parserInternals.c tree.c uri.c valid.c
+ xmlmemory.c xmlreader.c xmlregexp.c include/libxml/tree.h
+ include/libxml/parser.h: a lot of memory allocation cleanups
+ based on the results of the OOM testing
+ * check-relaxng-test-suite2.py: seems I forgot to commit the
+ script.
+
+Wed Apr 23 17:16:41 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: trivial fix for 109774 removing a warning
+
+Wed Apr 23 15:49:32 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c SAX.c catalog.c debugXML.c parser.c: try to find
+ more places where xmlCanonicPath() must be used to convert
+ filenames to URLs, trying to fix #111088
+
+Wed Apr 23 09:35:12 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c python/libxml.py: applied patch from
+ Brent M Hendricks adding binding for xmlCatalogAddLocal
+
+Tue Apr 22 15:18:01 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: tried to fix #98879 again in a more solid
+ way.
+
+Tue Apr 22 13:58:43 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/libxml2.def.src: added more exports from the relaxng and
+ xmlreader clan
+
+Tue Apr 22 10:35:13 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c test/valid/ns* test/result/ns*: applied the patch
+ provided by Brent Hendricks fixing #105992 and integrated the
+ examples in the testsuite.
+
+Tue Apr 22 01:06:09 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * TODO: updated a bit
+ * configure.in: fixed the comment, threads now default to on
+ * parserInternals.c: fixed an erroneous xmlMallocAtomic() call
+
+Mon Apr 21 23:33:38 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c libxml.h parser.c parserInternals.c tree.c xmllint.c
+ xmlreader.c include/libxml/parser.h: a lot of performance work
+ especially the speed of streaming through the reader and push
+ interface. Some thread related optimizations. Nearly doubled the
+ speed of parsing through the reader.
+
+Sun Apr 20 10:36:05 MDT 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.xml
+ * doc/xmllint.1
+ update man page to explain use of --stream
+
+Sat Apr 19 02:03:24 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c HTMLparser.c c14n.c catalog.c encoding.c globals.c
+ nanohttp.c parser.c parserInternals.c relaxng.c tree.c uri.c
+ xmlmemory.c xmlreader.c xmlregexp.c xpath.c xpointer.c
+ include/libxml/globals.h include/libxml/xmlmemory.h: added
+ xmlMallocAtomic() to be used when allocating blocks which
+ do not contains pointers, add xmlGcMemSetup() and xmlGcMemGet()
+ to allow registering the full set of functions needed by
+ a garbage collecting allocator like libgc, ref #109944
+
+Fri Apr 18 16:37:41 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: switched to have thread support enabled by default,
+ didn't got troubles with ABI compatibility on Linux, hope it
+ won't break on strange OSes, if yes, report the system ID
+ * doc/libxml2-api.xml: just rebuilt the API
+
+Fri Apr 18 14:31:15 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.h include/libxml/parser.h parser.c xmlIO.c DOCBparser.c:
+ added support for large file, tested with a 3+GB instance,
+ and some cleanup.
+ * catalog.c: added a TODO
+ * Makefile.am: added some "make tests" comments
+
+Thu Apr 17 14:51:57 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: some cleanups
+ * doc/xmlreader.html: extended the document to cover RelaxNG and
+ tree operations
+ * python/tests/Makefile.am python/tests/reader[46].py: added some
+ xmlReader example/regression tests
+ * result/relaxng/tutor*.err: updated the output of a number of tests
+
+Thu Apr 17 11:35:37 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: valgrind pointed out an uninitialized variable error.
+
+Thu Apr 17 11:06:28 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/relaxng.h relaxng.c include/libxml/xmlreader.h
+ xmlreader.c: augnemting the APIs, cleanups.
+ * parser.c: cleanup bug #111005
+ * xmlIO.c: added some missing comments
+
+Wed Apr 16 17:46:50 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c xmllint.c: more work on RelaxNG streaming validation
+ trying to improve the subset compiled, and more testing.
+ * doc/downloads.html doc/xml.html doc/xmlmem.html: some updates on the
+ documentation
+ * test/relaxng/tutor11_1_3.xml: fixes the DTD path
+ * result/relaxng/*.err: fix some of the outputs
+
+Wed Apr 16 01:28:15 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c xmlreader.c xmllint.c include/libxml/relaxng.h
+ include/libxml/xmlreader.h: implemented streaming of
+ RelaxNG (when possible) on top of the xmlReader interface,
+ provided it as xmllint --stream --relaxng .rng .xml
+ This seems to mostly work.
+ * Makefile.am: updated to test RelaxNG streaming
+
+Mon Apr 14 18:08:33 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c include/libxml/relaxng.h: integrated the regexp
+ based validity checking of fragments of the document for
+ which the RNG can be compiled to regexps. Works on all regression
+ tests, only fix needed is related to error messages.
+
+Sun Apr 13 21:51:00 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c xmlregexp.c include/libxml/xmlautomata.h
+ include/libxml/xmlregexp.h: Starting work precompiling
+ parts of RelaxNG schemas. Not plugged onto validity checking
+ yet, just the regexp building part. Needed to extend some
+ of the automata and regexp APIs.
+
+Fri Apr 11 21:36:21 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c xmlreader.c include/libxml/xmlreader.h: make sure
+ xmllint --stream and xmllint --stream --valid returns errors
+ code appropriately
+
+Fri Apr 11 10:59:24 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h: Added the Expand()
+ and Next() operation to work on subtrees within the reader
+ framework.
+ * doc/libxml2-api.xml python/libxml2class.txt: resulting updates
+ * python/tests/reader5.py: added an example for those new
+ functions of the reader.
+
+Thu Apr 10 23:38:13 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: patch from Vasily Tchekalkin to fix #109865
+
+Thu Apr 10 15:32:44 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: fixing HasValue for namespace as raised by
+ Denys Duchier
+
+Wed Apr 9 14:07:18 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c include/libxml/HTMLparser.h: exported
+ htmlCreateMemoryParserCtxt() it was static
+
+Wed Apr 9 13:21:48 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c xmlschemastypes.c include/libxml/xmlschemas.h:
+ update from Charles Bozeman for date and duration types
+ * test/schemas/date_0.* test/schemas/dur_0.*
+ result/schemas/date_0.* result/schemas/dur_0.*: updated too
+
+Mon Apr 7 12:19:26 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c valid.c xpath.c include/libxml/tree.h include/libxml/valid.h:
+ fixing bug #107129, removing excessive allocation and calls
+ to *printf in the code to build QName strings.
+
+Sat Apr 5 11:41:36 CEST 2003 Igoe Zlatkovic <igor@zlatkovic.com>
+
+ * win32/libxml2.def.src: fixed conditional exports, reported by
+ Luke Murray.
+
+Fri Apr 4 18:08:00 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed a possible problem with xmlRecoverMemory()
+
+Thu Apr 3 17:24:44 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * trio.c trio.h triodef.h trionan.c trionan.h triop.h triostr.c
+ triostr.h: Bjorn sent an update for the TRIO portability layer.
+
+Tue Apr 1 21:57:26 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/libxml2.def.src: exported new functions
+
+Tue Apr 1 13:09:46 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in NEWS: preparing release 2.5.6
+ * doc/*: updated and rebuilt the docs
+
+Tue Apr 1 11:52:15 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fixed an uninitialized memory access pointed by valgrind
+ on C14Ntests
+
+Tue Apr 1 00:12:28 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: one more fixup of error message reporting
+
+Mon Mar 31 18:36:32 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more work on bug #109225, and fixed an uninitialized
+ variable pointed out by valgrind
+
+Mon Mar 31 18:05:22 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: try to work on bug #109225 and provide better
+ error reports.
+ * result/relaxng/* : this change the output of a number of tests
+ * xinclude.c: fixing the parsed entity redefinition problem
+ raised on the list.
+ * test/schemas/date_0.xsd: updated the date test c.f. E2-12
+
+Mon Mar 31 13:19:04 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: fixed date comparison to handle the tzo
+ The only failures left are disagreements on Notations and
+ '+1' not being allowed for ulong, uint, ushort and ubyte.
+
+Mon Mar 31 12:11:47 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: fixed gMonth parsing routine accordingly
+ to the XML Schemas errata
+ http://www.w3.org/2001/05/xmlschema-errata#e2-12
+
+Sun Mar 30 23:04:18 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c xmlschemastypes.c: more work on XML Schemas datatypes
+ and facets support. Currently only schemas with binHex or
+ base64 don't compile. A few error left in the test suite:
+ found 1035 test instances: 919 success 23 failures
+ most are gdate or gdateyear failing check, and a few cases where
+ James clark tests results are strange.
+ * valid.c: allow to reuse the Notation checking routine without
+ having a validation context.
+ * SAX.c: removed a #if 0
+
+Sat Mar 29 17:35:05 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: forgot to apply one check from #106931 patch
+ * xmlschemastypes.c: more work on XML Schemas datatypes
+
+Sat Mar 29 11:49:25 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c include/libxml/relaxng.h xmlschemastypes.c: more work
+ on cleaning up XML Schemas datatypes based on James Clark tests
+ test/xsdtest/xsdtest.xml
+
+Fri Mar 28 14:24:08 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: implemented comparisons for Schemas values.
+ * xmlschemastypes.c include/libxml/xmlschemastypes.h: fixed
+ some bugs in duration handling, comparisons for durations
+ and decimals, removed all memory leaks pointed out by James
+ testsuite. Current status is now
+ found 238 test schemas: 197 success 41 failures
+ found 1035 test instances: 803 success 130 failures
+
+Fri Mar 28 00:41:55 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c include/libxml/xmlschemas.h: fixed bugs and memory
+ leaks in the W3C XML Schemas code
+ * xmlschemastypes.c: implemented nonPositiveInteger
+ * test/schemas/length2_0.xsd result/schemas/length2_0_0.err:
+ fixed the test and result.
+
+Thu Mar 27 22:23:07 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c tree.c: two patches from James Bursa on the HTML
+ parser and a typo
+ * xmlschemastypes.c: reindenting, fixing a memory access
+ problem with dates.
+
+Thu Mar 27 15:53:35 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixing #109227 providing more context in case of
+ start/end tag mismatch
+ * python/tests/ctxterror.py python/tests/readererr.py: update the
+ tests accordingly
+
+Thu Mar 27 15:22:41 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: should fix #109327 errors on memory accesses
+
+Thu Mar 27 15:06:13 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: Fixed reopening of #78662 <form action="...">
+ is an URI reference
+
+Wed Mar 26 22:38:39 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixed bug #109160 on non-ASCII IDs
+
+Wed Mar 26 17:30:37 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Norm suggested a nicer error message for xml:space values
+ errors
+
+Wed Mar 26 01:34:19 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c include/libxml/xpath.h: first part of the fix to
+ performance bug #108905, adds xmlXPathOrderDocElems() providing
+ document order for nodes.
+ * python/libxml.c: Python may require TRIO as Albert Chin pointed out
+
+Tue Mar 25 16:07:00 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: removing a warning with Sun compiler
+ bug #109154
+
+Tue Mar 25 07:02:56 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.xml
+ * doc/xmllint.1
+ update xmllint man page with --relaxng option
+
+Tue Mar 25 12:07:03 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/setup.py.in : was missing "drv_libxml2.py"
+
+Mon Mar 24 19:38:05 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c xpath.c: some changes related to the new way of
+ handling Result Value Tree, before 2.5.5
+
+Mon Mar 24 16:36:23 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in NEWS: preparing release 2.5.5
+ * doc/* : updated the documentation and regenerated it.
+
+Mon Mar 24 14:56:01 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixed some problems related to #75813 about handling
+ of Result Value Trees
+
+Sun Mar 23 22:57:20 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: applied a set of patches from Lorenzo Viali correcting
+ URI parsing errors.
+
+Sun Mar 23 22:00:14 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: validity status was not passed back when validating in
+ entities, but raised by Oliver Fischer
+
+Sun Mar 23 21:30:50 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: avoid escaping ',' in URIs
+
+Sun Mar 23 12:57:00 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixing bug #108976 get the ID/REFs to reference
+ the ID in the document content and not in the entity copy
+ * SAX.c include/libxml/parser.h: more checking of the ID/REF
+ stuff, better solution for #107208
+ * xmlregexp.c: removed a direct printf, dohhh
+ * xmlreader.c: fixed a bug on streaming validation of empty
+ elements in entities
+ * result/VC/ElementValid8 test/VCM/v20.xml result/valid/xhtml1.xhtml:
+ cleanup of the validation tests
+ * test/valid/id* test/valid/dtds/destfoo.ent result/valid/id*:
+ added more ID/IDREF tests to the suite
+
+Sat Mar 22 23:38:08 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: fixed #107043 removing 2 warnings with Sun One
+ compiler.
+
+Sat Mar 22 18:50:45 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: valgrind'ed and cleaned up a couple of memory issues.
+
+Sat Mar 22 16:15:50 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fix bug #107208 avoid false duplicates when ID/REFs are
+ defined in entities content
+
+Sat Mar 22 15:53:27 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: Fixed validation bug #108858 on namespace names using
+ entities and reported by Brent Hendricks
+ * xmllint.c: report xmlTextReaderHasValue() result in --stream
+ --debug output.
+
+Sat Mar 22 13:32:39 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: fixed bug #108801 reported by Malcolm Tredinnick
+ about the DocType node not being reported sometimes.
+ * python/tests/reader.py: added to test to the regression checks
+
+Sat Mar 22 01:57:40 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: fixed bug #108546 on long CDATA (or text nodes)
+ reported by Edd Dumbill
+
+Sat Mar 23 01:00:24 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c parser.c parserInternals.c: patch from
+ johan@evenhuis.nl for #107937 fixing some line counting
+ problems, and some other cleanups.
+ * result/HTML/: this result in some line number changes
+
+Fri Mar 21 22:19:14 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in Makefile.am: fixed Red Hat bug #86118 use libxml2.spec
+ instead of libxml.spec
+ * relaxng.c: fixed some of the error reporting excessive
+ verbosity
+ * catalog.c debugXML.c valid.c xmlreader.c xmlschemas.c xpath.c
+ xmlschemastypes.c: removed some warnings from gcc
+ * doc/libxml2-api.xml: rebuilt
+
+Fri Mar 21 17:25:23 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: another optimization, for choice this time
+ * result/relaxng/spec1* result/relaxng/tutor12_1*
+ result/relaxng/tutor3_7: cleanups.
+
+Fri Mar 21 13:41:23 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed xmlRelaxNGNodeMatchesList
+ * test/relaxng/testsuite.xml: augmented the test suite
+ * result/relaxng/spec1* result/relaxng/tutor12_1*: this fixes
+ some schemas validation tests in the presence of foreign
+ namespaces.
+
+Fri Mar 21 02:23:34 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: added another interleave speedup.
+
+Thu Mar 20 17:22:00 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: added integer and fixed one of the
+ IDREFS regression tests pbm
+ * result/relaxng/docbook_0.err: updated
+
+Wed Mar 19 21:58:47 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c xmlschemastypes.c: attempt to cope with ID/IDREF(S)
+ declared both in the DTD and in the Schemas <grin/>
+ * relaxng.c: more debug, added a big optimization for <mixed>
+ * test/relaxng/testsuite.xml: augmented the testsuite
+ * test/relaxng/ result/relaxng: added the RelaxNG spec and a
+ DocBook example to the regression tests
+
+Wed Mar 19 11:34:10 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * check-xsddata-test-suite.py: cosmetic change for output
+ * relaxng.c: try to minimize calls to malloc/free for states.
+
+Tue Mar 18 17:50:31 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: removed a warning
+ * xmlschemastypes.c: more cleanup, added ENTITY and ENTITIES
+ support
+ * check-relaxng-test-suite.py check-xsddata-test-suite.py:
+ cleanup/improvements of the regression tests batch
+ * test/relaxng/testsuite.xml: augmented libxml2 own testsuite
+
+Tue Mar 18 12:36:22 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed error msg cleanup deallocation
+ * xmlschemastypes.c: added a function to handle lists of
+ atomic types, added support for IDREFS
+
+Tue Mar 18 01:28:15 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c valid.c xmlschemastypes.c: added Datatype ID
+ and IDREF, usable from RelaxNG now
+ * include/libxml/xmlschemastypes.h: need to add a new interface
+ because the validation modifies the infoset
+ * test/relaxng/testsuite.xml: extended the testsuite
+
+Mon Mar 17 16:34:07 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed the last core RelaxNG bug known #107083,
+ shemas datatype ID/IDREF support still missing though.
+ * xmlreader.c: fix a crashing bug with prefix raised by
+ Merijn Broeren
+ * test/relaxng/testsuite.xml: augmented the testsuite with
+ complex inheritance tests
+
+Sun Mar 16 18:45:50 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: switched back to the previous Relax-NG code base,
+ the derivation algorithm need severe constraining code to avoid
+ combinatorial explosion. Fixed the problem with Sebastian Rahtz
+ TEI based example and other bugs
+ * result/relaxng/*err: updated the results
+ * test/relaxng/testsuite.xml: started a new test suite
+
+Sat Mar 15 22:26:46 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c include/libxml/relaxng.h: After coming to the conclusion
+ that the original RelaxNG validation code was un-fixeable, it got
+ rewritten to use the derivation algorithm from James Clark and
+ redebugged it (nearly) from scratch:
+ found 373 test schemas: 372 success 1 failures
+ found 529 test instances: 529 success 0 failures
+
+Tue Mar 11 12:08:23 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c parser.c: fix some recursion problems introduced in the
+ last release.
+ * relaxng.c: more debugging of the RNG validation engine, still
+ problems though.
+
+Mon Mar 10 14:10:47 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: stop generating wrong result file with * in name
+ * relaxng.c: fixing the include bug raised by Sebastian Rahtz
+ * result/relaxng/demo* test/relaxng/demo: added the tests from
+ Sebastian reproducing the problem.
+
+Sun Mar 9 18:02:31 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.1: regenerating man page from xmllint.xml to pick
+ up Aleksey's change
+
+Sun Mar 9 13:53:16 2003 Aleksey Sanin <aleksey@aleksey.com>
+
+ * xmllint.c doc/xmllint.xml: use $XMLLINT_INDENT environment
+ variable to control the indentation for the xmllint "--format"
+ option
+
+Sat Mar 8 14:27:43 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * encoding.c: applied Gennady's patch against buffer overrun
+
+Fri Mar 7 19:29:40 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * test/xsdtest/xsdtest.xml uri.c: after and exchange with James
+ Clark it appeared I had bug in URI parsing code ...
+ * relaxng.c include/libxml/relaxng.h: completely revamped error
+ reporting to not loose message from optional parts.
+ * xmllint.c: added timing for RNG validation steps
+ * result/relaxng/*: updated the result, all error messages changed
+
+Fri Mar 7 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fix bug #107804, the algorithm used for document order
+ computation was failing on attributes.
+
+Thu Mar 6 22:35:50 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fix bug #107764 , possibility of buffer overflow
+ in xmlValidDebug()
+
+Wed Mar 5 17:41:37 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c include/libxml/nanoftp.h: adding xmlNanoFTPDele()
+ from Philipp Dunkel
+
+Wed Mar 5 10:57:09 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastype.c: made powten array static it should not be exported
+ * HTMLparser.c: fix bug #107361 by reusing the code from the XML
+ parser function.
+ * testHTML.c: get rid of valgrind messages on the HTML SAX tests
+
+Fri Feb 28 00:23:00 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed a node dump crash on attributes
+ * test/xsdtest/xsdtest.xml test/xsdtest/xsdtest.xsl: fixed
+ an URI test bug and get better output.
+
+Thu Feb 27 22:28:40 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * check-xsddata-test-suite.py: give more infos
+ * relaxng.c: fix a bug reported by Sebastian Rahtz and
+ REF->DEF in attribute values.
+
+Thu Feb 27 21:09:32 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * check-xsddata-test-suite.py test/xsdtest/xsdtest.xml
+ test/xsdtest/xsdtest.xsl: import of the XSD Datatype
+ regression tests from James Clark.
+
+Thu Feb 27 18:40:04 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c xmlschemas.c xmlschemastypes.c
+ include/libxml/xmlschemastypes.h: added param support for relaxng
+ type checking, started to increment the pool of simple types
+ registered, still much work to be done on simple types and
+ facets checkings.
+
+Wed Feb 26 16:45:39 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c: fixes again one of the problem raised by
+ James Clark in #106788
+
+Wed Feb 26 15:46:48 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: Fixed a couple of problem raised by James Clark
+ in bug #107083, the support for ID/IDREF/IDREFS at the WXS
+ datatype level still not fixed though.
+
+Mon Feb 24 21:09:19 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing release 2.5.4
+ * doc/*: updated and rebuilt the docs
+ * relaxng.c: removed warnings
+ * result/relaxng/*: updated the results
+
+Mon Feb 24 20:53:17 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixes a DTD regexp generation problem.
+
+Mon Feb 24 20:12:57 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixes bug #105998 about false detection of
+ attribute consumption loop.
+
+Mon Feb 24 19:14:57 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: Fixes bug #106931 in XInclude entities merging.
+
+Mon Feb 24 18:50:35 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fixed bug #105992
+
+Mon Feb 24 18:14:16 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed xmlSetProp and al. when the node passed is not an
+ element.
+ * relaxng.c: fixed bugs 7.3 (though not complete) and memory leaks
+ found 373 test schemas: 369 success 4 failures
+ found 529 test instances: 525 success 4 failures
+ * check-relaxng-test-suite.py: added memory debug reporting
+
+Mon Feb 24 12:41:54 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c parser.c: some warning removal on Igor's patch
+ * tree.c: seems I messed up with #106788 fix
+ * python/libxml.c: fixed some base problems when Python provides
+ the resolver.
+ * relaxng.c: fixed the interleave algorithm
+ found 373 test schemas: 364 success 9 failures
+ found 529 test instances: 525 success 4 failures
+ the resulting failures are bug in the algorithm from 7.3 and
+ lack of support for params
+
+Sun Feb 23 14:49:39 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: another fix for nodeinfo in entities problem
+ * tree.c entities.c: fixed bug #106788 from James Clark
+ some spaces need to be serialized as character references.
+
+Sat Feb 22 18:28:16 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * parser.c uri.c: fixed the bug I introduced in the path
+ handling, reported by Sebastian Bergmann
+
+Sat Feb 22 00:19:48 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixing some nodeinfo in entities problem raised
+ by Glenn W. Bach
+ * relaxng.c: implemented the first section 7.3 check
+ * result/relaxng/*: updated the results
+
+Fri Feb 21 18:12:19 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed some problems in the previous commit
+ and finished implementing 4.16 rules checking
+ found 373 test schemas: 353 success 20 failures
+ found 529 test instances: 519 success 6 failures
+ * result/relaxng/*: updated the results
+
+Fri Feb 21 16:37:39 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: implemented checks from section 7.2
+
+Thu Feb 20 16:00:31 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: implemented the checks from section 7.1, fixed
+ some of the 4.20 and 4.21 problems.
+ found 373 test schemas: 338 success 35 failures
+ found 529 test instances: 519 success 6 failures
+ * result/relaxng/*: updated the results
+
+Thu Feb 20 01:09:24 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: implemented the 4.20 and 4.21 simplification rules.
+ * result/relaxng/*: updated the results
+
+Wed Feb 19 18:30:30 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more bugfixes
+ * result/relaxng/*: updated the results
+
+Wed Feb 19 15:39:56 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * DOCBparser.c: obsoleted xmlNormalizeWindowsPath
+ * HTMLparser.c: obsoleted xmlNormalizeWindowsPath
+ * SAX.c: ensured xmlDoc.URL is always canonic
+ * parser.c: obsoleted xmlNormalizeWindowsPath
+ * uri.c include/libxml/uri.h: introduced xmlCanonicPath
+ * xmlIO.c include/libxml/xmlIO.h: obsoleted xmlNormalizeWindowsPath
+ * win32/libxml2.def.src: added few exports
+
+
+Wed Feb 19 14:26:51 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in: patched to have shared libraries
+ for Python regression tests and static binaries for gdb debug
+ in my development environment
+ * relaxng.c: more bugfixes
+ found 373 test schemas: 296 success 77 failures
+ found 529 test instances: 516 success 8 failures
+ * result/relaxng/*: updated the results
+
+Wed Feb 19 01:17:48 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: guess what ! Relax-NG bugfixing, what a surprize...
+
+Tue Feb 18 22:09:50 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: float/double check bugfix
+ * tree.c include/libxml/tree.h: exported a function for NMTOKEN
+ validation
+ * xmlreader.c: add a TODO for Jody
+ * relaxng.c: bugfix bugfix bugfix
+ found 373 test schemas: 300 success 73 failures
+ found 529 test instances: 507 success 10 failures
+ * result/relaxng/*: updated the results
+
+Tue Feb 18 00:33:17 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c check-relaxng-test-suite.py: more RelaxNG bug hunting
+
+Mon Feb 17 18:23:32 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c check-relaxng-test-suite.py: more work on the
+ RelaxNG implementation conformance testing.
+ found 373 test schemas: 284 success 89 failures
+ found 529 test instances: 448 success 47 failures
+ * result/relaxng/*: updated the results
+
+Sun Feb 16 16:48:38 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * ChangeLog tree.c doc/libxml-doc.el doc/libxml2-api.xml: applied
+ a patch from Kjartan Maraas to fix some typos
+
+Sun Feb 16 16:40:52 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more bug-hunting
+ * testRelax.c include/libxml/relaxng.h: added --tree to dump the
+ intermediate rng tree
+ * python/generator.py: patch from Stephane Bidoul to fix the generator
+ on python < 2.2
+
+Fri Feb 14 17:49:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * check-relaxng-test-suite.py relaxng.c: more testing on the
+ Relax-NG front, cleaning up the regression tests failures
+ current state and I forgot support for "mixed":
+ found 373 test schemas: 280 success 93 failures
+ found 529 test instances: 401 success 68 failures
+ * tree.c include/libxml/tree.h xmlschemastypes.c: finished and
+ moved the Name, NCName and QName validation routine in tree.c
+ * uri.c: fixed handling of URI ending up with #, i.e. having
+ an empty fragment ID.
+ * result/relaxng/*: updated the results
+
+Thu Feb 13 16:49:24 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * check-xinclude-test-suite.py: improved the script accordingly
+ to the XInclude regression tests updates
+ * xpointer.c: Implemented XPointer element() Scheme W3C PR of 13
+ November 2002
+ * result/XPath/xptr/chapterschildseq result/XPath/xptr/vidchildseq
+ test/XPath/xptr/chapterschildseq test/XPath/xptr/vidchildseq:
+ augmented the Xpointer testsuite for the element() scheme
+
+Thu Feb 13 12:00:30 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: added TODO for the DTD compatibility spec
+ * xinclude.c: more bug fixes driven by the testsuite
+
+Tue Feb 11 19:01:02 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * check-xinclude-test-suite.py xinclude.c: Work on the W3C/NIST
+ regression tests for XInclude, improved the script, improving
+ XInclude error reporting mechanism
+
+Mon Feb 10 17:19:14 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS doc/* configure.in: preparing release 2.5.3
+
+Mon Feb 10 17:11:22 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: trying to fix #104934 about some XHTML1 serialization
+ issues.
+
+Mon Feb 10 16:41:13 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c xmlIO.c: fixing bug #104646 about iconv based
+ encoding conversion when the input buffer stops in the
+ middle of a multibyte char
+
+Mon Feb 10 15:24:47 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * test/relaxng/OASIS/spectest.xml: OASIS RelaxNG testsuite
+ * check-relaxng-test-suite.py: python script to run regression
+ against OASIS RelaxNG testsuite
+ * relaxng.c: some cleanup tweaks
+ * HTMLparser.c globals.c: cleanups in comments
+ * doc/libxml2-api.xml: updated the API
+ * result/relaxng/*: errors moved files, so large diffs but
+ no changes at the semantic level.
+
+Mon Feb 10 01:00:31 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixing #105678 problem when dumping a namespace node.
+
+Mon Feb 10 00:30:01 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixed doc comment problems
+ * python/generator.py python/libxml_wrap.h python/types.c: adding
+ RelaxNG wrappers
+ * python/tests/Makefile.am python/tests/relaxng.py: added a specific
+ test of those early Python RelaxNG bindings
+
+Sun Feb 9 15:18:43 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in: fixes a libtool problem on AMD 64bits builds
+ * relaxng.c: found the validation problem I had with interleave
+ when not covering all remaining siblings
+ * Makefile.am test.relaxng/* result/relaxng/*: augmented the
+ testsuite and check the RNG schemas against the RNG schemas
+ given in appendix A
+
+Sat Feb 8 18:55:43 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * win32/Makefile.msvc: updates for RelaxNG
+ * win32/Makefile.mingw: updates for RelaxNG
+ * win32/libxml2.def.src: added RelaxNG exports
+
+Fri Feb 7 14:00:53 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: applied another bug fix from Sean Chittenden
+
+Fri Feb 7 13:34:08 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in xmllint.c: I f...ed up the default configuration
+ of schemas and --relaxng option display in xmllint, pointed by
+ Morus Walter.
+ * xlink.c: Sean Chittenden pointed a couple of errors in the XLink
+ detection module, fixes bug #105374.
+
+Fri Feb 7 01:43:38 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: added the boolean base type.
+
+Thu Feb 6 10:23:52 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: started implementing some of the missing
+ default simple types
+ * result/relaxng/*: updated the results
+
+Wed Feb 5 15:28:04 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS doc/*: updated the docs, ready for 2.5.2 release
+
+Wed Feb 5 14:15:59 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c tree.c xmlIO.c: comments cleanups
+ * Makefile.am: use xmllint for doing the RelaxNG tests
+ * configure.in: preparing 2.5.2 made schemas support default to
+ on instead of off
+ * relaxng.c: removed the verbosity
+ * xmllint.c: added --relaxng option
+ * python/generator.py python/libxml_wrap.h: prepared the integration
+ of the new RelaxNG module and schemas
+ * result/relaxng/*: less verbose output
+
+Wed Feb 5 12:00:36 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: do not run content model validation if the
+ content is not determinist
+
+Wed Feb 5 11:43:58 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: added the redefinition of namespaced attribute
+ check that was missing as Fabrice Desré pointed out.
+
+Wed Feb 5 11:09:29 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c include/libxml/HTMLparser.h: applied HTML
+ improvements from Nick Kew, allowing to do more checking
+ to HTML elements and attributes.
+
+Tue Feb 4 23:47:06 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: fixing bug #105137 about entities declaration
+ needing to be copied to the including document.
+
+Tue Feb 4 20:26:22 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: fixed bug #104817 with delegateURI
+ * xpath.c: fixing bugs #104123 and #104125
+
+Tue Feb 4 17:12:56 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in valid.c xmlreader.c python/libxml_wrap.h
+ python/types.c: fixing #104096 to compile without regexps
+
+Tue Feb 4 16:31:55 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixing bug #103969 forgot to add an epsilon transition
+ when building the automata for elem*
+
+Tue Feb 4 16:21:07 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: applied patch from Arne de Bruijn fixing
+ bug #103827
+
+Tue Feb 4 16:17:09 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: updating a comment, fixing #103776
+
+Tue Feb 4 16:05:53 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixing bug 105049 for validity checking of content
+ within recursive entities.
+
+Tue Feb 4 15:40:54 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: try to fix # 105049
+ * relaxng.c xmlschemastypes.c: a couple of changes and extensions
+ * tree.c: updated a function comment
+
+Tue Feb 4 00:20:58 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng: more work on grammars and refs/defs
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Mon Feb 3 14:16:59 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng: more work on name classes, except support
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Mon Feb 3 11:56:05 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng: more work on name classes, the "validate all" schemas
+ seems to work now.
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Mon Feb 3 09:50:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: removed an unprotedted debug message Aleksi Suhonen
+ * parser.c: put a guard against infinite document depth, basically
+ trying to avoid another kind of DoS attack.
+ * relaxng.c: some code w.r.t. nameClasses
+
+Sun Feb 2 17:01:43 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * test/relaxng/* result/relaxng/*: check all the namespace support
+ was actually correct based on tutorial section 10.
+
+Sun Feb 2 15:33:38 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng: include seems to work okay now
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Sat Feb 1 19:44:58 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: a bit of work done in the train back.
+ * test/relaxng/*: added one of the include tests
+
+Thu Jan 30 14:06:55 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng: more work done in the train
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Wed Jan 29 23:44:58 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: debugging of externalRef
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Wed Jan 29 22:06:04 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more work on Relax-NG, implementing externalRef
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+ * Makefile.am: cleanup to Relaxtests target
+
+Wed Jan 29 00:08:38 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more work on Relax-NG, implementing interleave
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Tue Jan 28 21:56:49 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more work on Relax-NG, implementing interleave
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Mon Jan 27 07:35:29 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/customfo.xsl
+ * doc/tutorial/customhtml.xsl
+ adding stylesheet customizations used to generate fo
+ for pdf and html
+
+Mon Jan 27 13:29:43 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more work on Relax-NG
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+ * xmlschemastypes.c: added a number of base type definition but not
+ the associated checks, those are still TODOs
+
+Sun Jan 26 17:37:06 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ in docs/tutorial:
+ * apa.html
+ * apb.html
+ * apc.html
+ * apd.html
+ * ape.html
+ * apf.html
+ * apg.html
+ * ar01s02.html
+ * ar01s03.html
+ * ar01s04.html
+ * ar01s05.html
+ * ar01s06.html
+ * ar01s07.html
+ * ar01s08.html
+ * index.html
+ * xmltutorial.pdf
+ * xmltutorial.xml
+ add index to tutorial
+
+Sun Jan 26 17:02:29 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlcatalog.1
+ * doc/xmlcatalog_man.html
+ * doc/xmlcatalog_man.xml
+ belatedly fixing bug #93622 (adds rewriteURI type to
+ "--add" option in xmlcatalog man page
+
+Sun Jan 26 20:47:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlcatalog.c xmllint.c: applied patch for NetBSD by
+ Julio Merino, closing #104475
+
+Sun Jan 26 20:38:43 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more work on Relax-NG
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Sun Jan 26 01:49:58 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more work on Relax-NG
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Sat Jan 25 18:59:54 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * README: updated the policy on private mail answers
+ * relaxng.c: more work on Relax-NG
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
+Fri Jan 24 15:12:44 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * error.c parser.c tree.c: applied a documentation patch from
+ Stefan Kost
+
+Fri Jan 24 02:00:50 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: more work on Relax-NG
+ * doc/*: regenerated the docs
+ * test/relaxng/* result/relaxng/*: updated and augmented the
+ Relax-NG regression tests and results
+
+Thu Jan 23 19:26:20 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in relaxng.c include/libxml/relaxng.h:
+ First commit of the new Relax-NG validation code, not generally
+ useful yet.
+ * test/relaxng/* result/relaxng/*: current state of the regression
+ tests
+
+Thu Jan 23 19:22:54 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: minimized the memory allocated for GetContent
+ and a bit of cleanup.
+
+Thu Jan 23 17:41:37 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py: seems there is no good reasons to
+ not generate bindings for XPointer
+
+Tue Jan 21 13:19:35 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c doc/apibuild.py: applied a new patch from
+ Stéphane Bidoul for cleanups
+ * doc/libxml2-api.xml: rebuilt the API description with
+ new entry points
+
+Mon Jan 20 23:25:00 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/drv_libxml2.py python/generator.py
+ python/libxml.c python/libxml.py python/libxml_wrap.h
+ python/types.c: patch from Stéphane Bidoul for better per
+ context error message APIs
+ * python/tests/ctxterror.py python/tests/readererr.py:
+ update of the tests
+
+Sun Jan 19 17:09:28 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/guidelines.html
+ grammar and spelling cleanup
+
+Fri Jan 17 00:31:30 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h python/generator.py
+ python/libxml.c python/libxml.py win32/libxml2.def.src: applied
+ a patch from Stéphane Bidoul to allow per XMLtextReader error
+ and warning handling
+ * python/tests/Makefile.am python/tests/readererr.py: adding the
+ specific regression test
+
+Tue Jan 14 17:00:08 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: Alexey Efimov pointed out that concat('a', 'b', )
+ should raise a syntax error
+
+Tue Jan 14 15:39:14 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: cleanup patch from Stéphane Bidoul
+
+Tue Jan 14 14:41:18 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: fixing bug #103100 with a dummy UTF8ToUTF8 copy
+
+Tue Jan 14 12:40:29 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml.py
+ python/libxml_wrap.h python/types.c: applied and fixed a patch
+ from Stéphane Bidoul to provide per parser error handlers at the
+ Python level.
+ * python/tests/Makefile.am python/tests/ctxterror.py: added a
+ regression test for it.
+
+Tue Jan 14 01:15:04 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: fixed the streaming property of the reader,
+ it was generating tree faster than consuming it. Pointed out
+ by Nate Myers
+ * tree.c: fixed a bug in xmlSaveFormatFileEnc if passed a NULL doc
+
+Sun Jan 12 22:18:02 CET 2003 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: added more xmlreader and other exports
+
+Fri Jan 10 18:04:32 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fix to the XPath implementation for parent and
+ ancestors axis when operating on a Result Value Tree.
+ Fixes bug #100271
+
+Fri Jan 10 17:07:01 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c nanohttp.c xmlIO.c: patch from Stefano Zacchiroli
+ to fix some URI/file escaping problems
+
+Fri Jan 10 16:20:34 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py: fixed a bug raised by Raymond Wiker,
+ docSetRootElement() should not raise an exception if the
+ return is None
+
+Fri Jan 10 14:13:03 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.py python/libxml.c python/libxml2-python-api.xml:
+ fixed bug #102181 by applying the suggested change and fixing
+ the generation/registration problem.
+
+Fri Jan 10 13:47:55 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixed bug #102960 by reusing the XML name parsing
+ routines.
+
+Fri Jan 10 00:16:49 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: one more IsEmptyElement crazyness, that time in
+ external parsed entities if substitution is asked.
+ * python/tests/reader3.py: added a specific test.
+
+Thu Jan 9 22:35:31 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/drv_libxml2.py: update from Stéphane Bidoul: python 2.1
+ support and improved error handler registration
+
+Thu Jan 9 14:16:38 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c tree.c: fixes #102920 about namespace handling in
+ HTML output and section 16.2 "HTML Output Method" of XSLT-1.0
+ * README: fixed a link
+
+Wed Jan 8 18:32:25 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in doc/* NEWS: preparing 2.5.1 release
+ * SAX.c parser.c: fixing XmlTextReader bug
+
+Wed Jan 8 00:13:01 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fuck, I introduced a memory leak on external parsed
+ entities in 2.5.0 :-(
+
+Tue Jan 7 12:12:45 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: another fix needed as pointed by Christophe Merlet
+ for --stream --debug if compiled without debug support.
+
+Mon Jan 6 20:53:08 MST 2003 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.xml
+ * doc/xmllint.1:
+ update man page with --stream and --chkregister
+
+Tue Jan 7 01:17:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c: fixed --with-threads compile
+ * xmllint.c: fixed --without-debug compile
+ * include/libxml/globals.h: cleanup
+ * include/libxml/schemasInternals.h: add a missing include
+
+Mon Jan 6 14:06:07 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in NEWS: preparing 2.5.0 release
+ * SAX.c: only warn in pedantic mode about namespace name
+ brokeness
+ * globals.c: fix a doc generation problem
+ * uri.c: fix #101520
+ * doc/*: updated and rebuilt the doc for the release, includuding
+ stylesheet update
+ * python/Makefile.am: fix a filename bug
+
+Mon Jan 6 12:05:12 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/tutorial/* : fixed #101894 if doc == NULL xmlFreeDoc
+ should not be called.
+
+Mon Jan 6 11:59:09 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * libxml-2.0.pc.in: applied the patch to fix #101894
+
+Sun Jan 5 23:35:47 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c : applied patch from Lukas Schroeder for register callbacks
+ * valid.c: modified patch from Lukas Schroeder to test
+ register callbacks with --chkregister
+
+Sun Jan 5 02:23:20 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: seriously changed the way data are pushed to
+ the underlying parser, go by block of 512 bytes instead of
+ tryng to detect tag boundaries at that level. Changed the
+ way empty element are detected and tagged.
+ * python/tests/reader.py python/tests/reader2.py
+ python/tests/reader3.py: small changes mostly due to context
+ reporting being different and DTD node being reported. Some
+ errors previously undetected are now caught and fixed.
+ * doc/xmlreader.html: flagged last section as TODO
+
+Sat Jan 4 20:40:28 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.py: integrated the Python 2.2 optimizations
+ from Hannu Krosing, while maintaining compatibility with
+ 1.5 and 2.1
+
+Sat Jan 4 17:33:17 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: a bit of cleanup
+ * xmlreader.c: small fix
+ * doc/xmlreader.html: more work on the XmlTextReader tutorial
+ * python/libxml.py: a few fixes pointed out by Hannu Krosing
+
+Sat Jan 4 13:46:14 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/setup.py.in: patch from Stéphane Bidoul to include
+ drv_libxml2.py in setup.py
+
+Sat Jan 4 01:43:06 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xmlreader.html: starting documenting the new XmlTextReader
+ interface.
+
+Fri Jan 3 17:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: added the --stream flag to use the TextReader API
+ * xmlreader.c: small performance tweak
+
+Fri Jan 3 13:50:55 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader2py: okay the DTD validation
+ code on top of the XMLTextParser API should be solid now.
+
+Fri Jan 3 02:17:18 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader2py: Fixing some more mess
+ with validation and recursive entities while using the
+ reader interface, it's getting a bit messy...
+
+Thu Jan 2 15:15:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: another couple of problem
+ related to IsEmptyElement reported by Stéphane Bidoul needed
+ some fixes.
+
+Thu Jan 2 13:57:07 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in python/Makefile.am python/drv_libxml2.py:
+ integrated drv_libxml2.py Python xml.sax driver from Stéphane Bidoul
+ based on the python XmlTextReader interface.
+
+Wed Jan 1 22:05:40 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: backing out one change in the last patch which broke the
+ regression tests
+
+Wed Jan 1 21:57:28 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * global.data globals.c tree.c include/libxml/globals.h: applied
+ an old patch from Lukas Schroeder to track node creation and
+ destruction. Probably missing a lot of references at the moment
+ and not usable reliably.
+
+Wed Jan 1 20:12:07 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS doc/Makefile.am doc/news.xsl: generate the NEWS file
+ from doc/news.html and a stylesheet
+
+Wed Jan 1 16:09:57 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed another couple of
+ xmlreader bugs reported by Stéphane Bidoul and added tests.
+
+Wed Jan 1 15:42:54 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader2.py: fixed another validity
+ checking in external parsed entities raised by Stéphane Bidoul
+ and added a specific regression test.
+ * python/tests/reader3.py: cleanup
+
+Tue Dec 31 15:44:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader2.py: fixed a problem with
+ validation within entities pointed by Stéphane Bidoul, augmented
+ the tests to catch those.
+
+Tue Dec 31 12:15:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py: modified the generator to allow keeping
+ class references when creating new classes, needed to fix a bug
+ pointed by Stéphane Bidoul where the input buffer of the
+ xmlTextReader instance gets destroyed if the python wrapper for
+ the input is not referenced anymore.
+
+Mon Dec 30 19:39:36 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed another pair of problem
+ pointed by Stéphane Bidoul: depth start at 0 and a parse problem.
+
+Mon Dec 30 13:36:50 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed another problem
+ pointed by Stéphane Bidoul
+
+Mon Dec 30 12:39:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed a limit case problem
+ with "<a/>"
+
+Mon Dec 30 11:53:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: warn on xmlns:prefix="foo"
+ * xmlreader.c python/tests/reader.py: fixed a couple of problem
+ for namespace attributes handling.
+
+Mon Dec 30 00:59:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c parser.c tree.c include/libxml/entities.h: Fixed
+ a really nasty problem raised by a DocBook XSLT transform
+ provided by Sebastian Bergmann
+
+Sun Dec 29 12:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed a bug pointed out
+ by Stéphane Bidoul and integrated it into the tests
+
+Sat Dec 28 23:49:12 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml:
+ extended the XmlTextReader API a bit, addding accessors for
+ the current doc and node, and an entity substitution mode for
+ the parser.
+ * python/libxml.py python/libxml2class.txt: related updates
+ * python/tests/Makefile.am python/tests/reader.py
+ python/tests/reader2.py python/tests/reader3.py: updated a bit
+ the old tests and added a new one to test the entities handling
+
+Sat Dec 28 22:11:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml2class.txt
+ python/tests/reader.py python/tests/reader2.py: changed the
+ generator to provide casing for the XmlTextReader similar to
+ C# so that examples and documentation are more directly transposable.
+ Fixed the couple of tests in the suite.
+
+Sat Dec 28 15:55:32 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/guidelines.html: added a document on guildeline for
+ publishing and deploying XML
+
+Fri Dec 27 20:35:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c xmlreader.c: final touch running DTD validation
+ on the XmlTextReader
+ * python/tests/Makefile.am python/tests/reader2.py: added a
+ specific run based on the examples from test/valid/*.xml
+
+Fri Dec 27 15:17:20 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.py: added a few predefined xmlTextReader parser
+ configuration values.
+
+Fri Dec 27 12:57:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml_wrap.h: trying to fix #102037
+
+Fri Dec 27 12:18:14 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fixing bug #95296, when the predefined entities
+ are redefined in the DTD the default one must be used
+ instead anyway.
+
+Wed Dec 25 19:22:06 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.xml
+ * doc/xmllint.1
+ Add discussion of XML_DEBUG_CATALOG to xmllint man
+ page - bug #100907
+
+
+Mon Dec 23 16:54:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: Fixed the empty node detection to avoid reporting
+ an inexistant close tag.
+
+Mon Dec 23 15:42:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c python/setup.py.in: patch from Stéphane Bidoul
+ for Python 2.1
+
+Sun Dec 22 11:24:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * testC14N.c vms/config.vms: applied Craig A. Berry patches for VMS
+
+Fri Dec 20 11:27:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/libxml2-api.xml python/tests/reader.py: one really need
+ to provide the base URI information when creating a reader parser
+ from an input stream. Updated the API and the example using it.
+
+Fri Dec 20 01:11:30 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * testReader.c xmlreader.c valid.c include/libxml/tree.h
+ include/libxml/valid.h include/libxml/xmlreader.h: working on
+ DTD validation on top of xml reader interfaces. Allows to
+ validate arbitrary large instances. This required some extensions
+ to the valid module interface and augmenting the size of xmlID
+ and xmlRef structs a bit.
+ * uri.c xmlregexp.c: simple cleanup.
+
+Wed Dec 18 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: more
+ work on the xml reader interfaces.
+ * AUTHORS MAINTAINERS doc/* win32/*: updated Igor's mail and the
+ Web page for the Windows binaries.
+
+Tue Dec 17 19:31:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: applied a patch for VMS following the report by
+ Nigel Hall
+
+Tue Dec 17 11:29:41 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: the parseStartTag bug fix wasn't complete.
+
+Mon Dec 16 23:00:05 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Vyacheslav Pindyura managed to trigger a bug in
+ parseStartTag, fixing it.
+ * test/att4 result/att4 result/noent/att4: adding the test
+ * xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
+ more methods to XmlTextReader.
+
+Mon Dec 16 19:31:16 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: added more xml reader exports
+ * win32/Makefile.msvc win32/Makefile.mingw: added xml reader interface
+ to the build
+
+Mon Dec 16 06:36:54 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/xmltutorial.xml
+ plus generated html and pdf
+ Updating tutorial again based on further comments from Niraj
+ Tolia on the last iteration
+
+Sun Dec 15 21:27:30 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/xmltutorial.xml
+ * doc/tutorial/includekeyword.c
+ * doc/tutorial/includegetattribute.c
+ plus generated html and pdf
+ Adding fix from Niraj Tolia to tutorial to properly free memory.
+
+
+Mon Dec 16 00:34:25 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
+ more methods of XmlTextReader.
+ * python/libxml2class.txt python/tests/reader.py: this increased the
+ methods in the bndings, augmented the test to check those new
+ functions.
+
+Sat Dec 14 23:57:39 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c doc/libxml2-api.xml: added the close and getattribute
+ methods of XmlTextReader.
+ * python/generator.py python/libxml_wrap.h python/types.c
+ python/libxml2class.txt: added the reader to the Python bindings
+ * python/tests/Makefile.am python/tests/reader.py: added a specific
+ test for the Python bindings of the Reader APIs
+ * parser.c: small cleanup.
+
+Fri Dec 13 11:39:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: fallback was only copying the first child not the
+ full child list of the fallback element, closes #89684 as reopened
+ by Bernd Kuemmerlen
+
+Thu Dec 12 13:34:59 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: exported htmlNodeDumpOutput
+
+Thu Dec 12 10:59:11 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing release of 2.4.30
+ * doc/apibuild.py doc/libxml2-api.xml: fixups to the api builder,
+ gives enum values, fix functype return type, put back fields in
+ structs
+ * doc/*: updated the docs rebuilt
+
+Thu Dec 12 01:09:34 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c include/libxml/HTMLtree.h: patch from Mark Vadok
+ about htmlNodeDumpOutput location.
+ * xpath.c: removed an undefined function signature
+ * doc/apibuild.py doc/libxml2-api.xml: the script was exporting
+ too many symbols in the API breaking the python bindings.
+ Updated with the libxslt/libexslt changes.
+
+Wed Dec 11 20:26:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing release of 2.4.29
+ * doc/*: rebuilt the docs and API
+ * xmlreader.c: a few more fixes for the XmlTextReader API
+
+Wed Dec 11 18:01:15 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/win32config.h: applied mingw patch from Magnus Henoch
+
+Wed Dec 11 16:58:48 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c doc/libxml2-api.xml: a bit more cleanup
+
+Wed Dec 11 14:54:47 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/apibuild.py doc/libxml2-api.xml doc/Makefile.am: new API
+ building Python script, does the C parsing directly, generates
+ a better API description including structure fieds defs and
+ enums. Still a couple of bugs, but good enough for the python
+ wrappers now.
+ * DOCBparser.c SAX.c nanohttp.c parser.c parserInternals.c tree.c
+ valid.c xmlIO.c xmlmemory.c xmlreader.c xmlregexp.c xmlschemas.c
+ include/libxml/schemasInternals.h include/libxml/tree.h: more
+ cleanup based on the python analysis script reports.
+ * libxml.spec.in: make sure the API XML description is part of the
+ devel package.
+
+Tue Dec 10 16:16:34 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c HTMLparser.c c14n.c debugXML.c encoding.c hash.c
+ nanoftp.c nanohttp.c parser.c parserInternals.c testC14N.c
+ testDocbook.c threads.c tree.c valid.c xmlIO.c xmllint.c xmlmemory.c
+ xmlreader.c xmlregexp.c xmlschemas.c xmlschemastypes.c xpath.c:
+ code cleanup, especially the function comments.
+ * tree.c: fixed a small bug when freeing nodes which are XInclude ones.
+
+Mon Dec 9 15:08:17 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am xmlreader.c include/libxml/Makefile.am
+ include/libxml/xmlreader.h: Adding a new set of APIs based on
+ the C# TextXmlReader API but converted to C. Allow to parse
+ in constant memory usage, far simpler to program and explain
+ than the SAX like APIs, unfinished but working.
+ * testReader.c: test program
+
+Sun Dec 8 18:36:01 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: applied YALDSP from Mark Vakoc
+
+Wed Dec 4 16:08:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Chip turner indicated that XHTML1 serialization
+ rule for style actually break on both IE and Mozilla,
+ try to avoid the rule if escaping ain't necessary
+
+Wed Dec 4 12:43:28 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * nanhttp.c: handle HTTP URL escaping, problem reported by
+ Glen Nakamura and Stefano Zacchiroli
+
+Sat Nov 30 12:19:17 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c HTMLparser.c parser.c valid.c xpath.c: code cleanup
+
+Thu Nov 28 12:53:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: Johann Richard pointed out some XPointer problems for
+ URN based URI references in XInclude. Modified the URI parsing
+ and saving routines to allow correct parsing and saving of
+ XPointers, especially when attached to "opaque" scheme accordingly
+ to RFC 2396
+
+Wed Nov 27 20:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c include/libxml/HTMLtree.h: applied the same kind
+ of refactoring to the HTML saving code.
+ * doc/libxml2-*.xml doc/API*.html: slight API changes got reflected
+ in the doc.
+
+Wed Nov 27 12:40:16 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c include/libxml/tree.h: refactored the XML dump of a node
+ to a buffer API to reuse the generic dump to an OutputIO layer,
+ this reduces code, fixes xmlNodeDump() for XHTML, also made
+ xmlNodeDump() now return the number of byte written.
+
+Wed Nov 27 09:00:00 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/setup.py.in: another patch from Stéphane Bidoul for
+ Python bindings on Windows
+ * doc/parsedecl.py: small cleanup
+
+Mon Nov 25 17:28:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in configure.in: add a line in %changelog for releases
+
+Mon Nov 25 14:18:27 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: patch from Marcus Clarke fixing a problem in entities
+ parsing that was detected in KDe documentations environment.
+
+Mon Nov 24 14:13:21 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>
+
+ * python/libxml.c (libxml_prev): Return the previous as opposed to
+ the next node (I guess this is the result of some cut & paste programming:)
+
+Sat Nov 23 17:22:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am: Jan Rafaj pointed a bug in the Makefile.
+
+Sat Nov 23 12:21:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/setup.py.in: trying
+ to fix the Python bindings build on Windows (Stéphane Bidoul)
+
+Fri Nov 22 22:41:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/configure.js: added option for python bindings
+ * win32/libxml2.def.src: added more exports
+
+Fri Nov 22 18:50:34 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/Makefile.mingw: fixed unresolved symbols when linking with
+ pthreads
+ * win32/wince/*: applied updates to Windows CE port from Javier
+
+Fri Nov 22 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.28
+ * libxml.spec.in doc/Makefile.am: some cleanup
+ * doc/*: updated the news and regenerated.
+
+Fri Nov 22 14:15:14 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: final touch at closing #87235 </p> end tags
+ need to be generated.
+ * result/HTML/cf_128.html result/HTML/test2.html result/HTML/test3.html:
+ this change slightly the output of a few tests
+ * doc/*: regenerated
+
+Fri Nov 22 13:26:19 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: fixing bug #99190 when UTF8 document are
+ parsed using the progressive parser and the end of the chunk
+ is in the middle of an UTF8 multibyte character.
+
+Fri Nov 22 13:13:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * threads.c: fixed initialization problem in xmlNewGlobalState
+ which was causing crash.
+ * globals.c: removed duplicate call to initxmlDefaultSAXHandler
+ in xmlInitializeGlobalState.
+ * parserInternals.c: cleaned up ctxt->sax initialisation.
+
+Thu Nov 21 15:05:45 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c include/libxml/tree.h: modified the existing APIs
+ to handle XHTML1 serialization rules automatically, also add
+ xmlIsXHTML() to libxml2 API. Some tweaking to make sure
+ libxslt serialization uses it when needed without changing
+ the library API.
+ * test/xhtml1 result/noent/xhtml1 result/valid/xhtml1.xhtml
+ result/xhtml1: added a new test specifically for xhtml1 output
+ and updated the result of one XHTML1 test
+
+Wed Nov 20 14:24:56 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c parserInternals.c encoding.c: fixed #99082
+ for xi:include encoding="..." support on text includes.
+ * result/XInclude/tstencoding.xml test/XInclude/docs/tstencoding.xml
+ test/XInclude/ents/isolatin.txt : added a specific regression test
+ * python/generator.py python/libxml2class.txt: fixed the generator
+ the new set of comments generated for doc/libxml2-api.xml were
+ breaking the python generation.
+
+Tue Nov 19 23:25:47 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am: repair some problem if gtk-doc fail or such
+ * configure.in: patch for Solaris on new autoconf closes #98880
+ * doc/parsedecl.py: repair the frigging API building script,
+ did I say that python xmllib sucks ?
+ * doc/libxml2-api.xml doc/libxml2-refs.xml: regenerated, reordering
+ and some comment are no more truncated.
+
+Tue Nov 19 09:09:04 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Martin Stoilov pointed out a potential leak in
+ xmlCreateMemoryParserCtxt
+
+Mon Nov 18 16:05:51 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixed bug #98879 a corner case when 0 is
+ included in HTML documents and using the push parser.
+
+Mon Nov 18 00:11:24 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>
+
+ * configure.in (PYTHON_SITE_PACKAGES): If --with-python is
+ specified, look for the Python interpreter not just in the
+ specified root but also in the specified location. Fixes #98825
+
+Sun Nov 17 23:36:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: fixing bug #98792 , node may have no doc
+ and dereferencing without checking ain't good ...
+
+Sun Nov 17 10:25:43 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing release 2.4.27
+ * doc/* : updated and rebuilt the docs
+ * doc/Makefile.am libxml.spec.in: try to make sure the tutorial
+ and all the docs are actually packaged and in the final RPMs
+ * parser.c parserInternals.c include/libxml/parser.h: restore
+ xmllint --recover feature.
+
+Sat Nov 16 16:30:25 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c xpath.c: fixing #96925 wich was also dependent on the
+ processing of parsed entities, and XPath computation on sustitued
+ entities.
+ * testXPath.c: make sure entities are substitued.
+
+Fri Nov 15 16:22:54 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed #96594, which was totally dependent on the
+ processing of internal parsed entities, which had to be changed.
+
+Fri Nov 15 12:16:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am python/Makefile.am python/tests/Makefile.am:
+ trying to fix bug #98517 about building outside the source tree
+ * doc/xml.html doc/FAQ.html: fixed the link to libiconv #94585
+
+Thu Nov 14 18:41:55 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/win32config.h: cleanup
+ * win32/Makefile.mingw: integrated mingw in JScript configure
+ * win32/Makefile.msvc: modified to allow mingw coexistence
+ * win32/configure.js: integrated mingw
+ * win32/Readme.txt: cleanup
+
+Tue Nov 12 22:06:45 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: strengthen the guard in the Pop macros,
+ like in the XML parser, closes bug #97315
+
+Tue Nov 12 21:56:39 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/parser.h: fixed bug #98338 , fatalError SAX
+ callback is never used.
+
+Tue Nov 12 13:32:50 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: fixed the initialization of the SAX structure
+ which was breaking xsltproc
+ * xpath.c: patch from Petr Pajas for CDATA nodes
+ * tree.c: patch from Petr Pajas improving xmlGetNodePath()
+ * parser.c include/libxml/parser.h: patch from Peter Jones
+ removing a leak in xmlSAXParseMemory() and adding the
+ function xmlSAXParseMemoryWithData()
+
+Mon Nov 11 20:47:03 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ adding pdf of tutorial, changing web page to link to it
+ * doc/tutorial/xmltutorial.pdf
+ * doc/xml.html
+ * doc/docs.html
+
+Sun Nov 10 20:48:57 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/ar01s08.html
+ adding file what I forgot for tutorial
+
+
+Sun Nov 10 20:33:13 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ Adding encoding discussion to tutorial
+ Added:
+ * doc/tutorial/images/*.png: DocBook admonition image files
+ * doc/tutorial/apf.html, apg.html: new generated html
+ * doc/tutorial/includeconvert.c: conversion code entity file
+ changed:
+ * doc/tutorial/xmltutorial.xml: DocBook original
+ * doc/tutorial/*.html: generated html
+
+Fri Nov 8 17:59:32 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/libxml/*.h: retired xmlwin32version.h
+ * doc/Makefile.am: retired xmlwin32version.h
+ * win32/configure.js: retired xmlwin32version.h
+
+Fri Nov 8 16:55:47 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: exported additional symbols
+ * include/libxml/xmlmemory.h: exported the rest of the xmlMem*
+ sisterhood
+
+Fri Nov 8 16:08:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c: fixed a typo pointed out by Igor
+ * xpath.c: try to speed up node compare using line numbers
+ if available.
+
+Thu Nov 7 15:16:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: make xmlFreeNode() handle attributes correctly.
+
+Wed Nov 6 23:51:11 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * catalog.c: completed the #96963 fix, as reported by Karl
+ Eichwalder
+
+Wed Nov 6 16:48:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpointer.c: tried to fix bug #97852 reported by Nicolas Noffke
+
+Sun Nov 3 10:43:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: switched the order of a couple of includes
+ to fix bugs #97100
+
+Thu Oct 31 17:11:46 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * catalog.c: fixed bug #96963, reverted to the old behaviour of
+ xmlLoadCatalogs that used to separate directories with a ':'.
+
+Thu Oct 31 16:55:21 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * threads.c: improvements to the Windows-side of thread handling
+ * testThreads.c: conditionally excluded unistd.h
+ * testThradsWin32.c: broke overlong lines
+ * include/win32config.h: adapted thread-related macros to the new
+ scheme and for pthreads on Windows
+ * win32/Makefile.msvc: introduced a more flexible thread build,
+ added testThreads[Win32].c to the build
+ * win32/configure.js: introduced a more flexible thread config
+
+2002-10-31 John Fleck <jfleck@inkstain.net>
+
+ * doc/xml.html (and, by implication, FAQ.html)
+ added UTF-8 conversaion FAQ from Marcus Labib Iskander
+
+Tue Oct 29 18:32:33 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * configure.in: removed xmlwin32version.h
+ * include/libxml/Makefile.am: removed xmlwin32version.h
+
+Mon Oct 28 14:01:29 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied patch from Brian Stafford to fix a bug
+ in xmlReconciliateNs()
+
+Mon Oct 28 13:51:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied patch from Christian Glahn to allow
+ xmlNewChild() on document fragment nodes
+
+Sat Oct 26 15:27:00 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Christian Glahn found a problem with a recent
+ patch to xmlParseBalancedChunkMemoryRecover()
+ * xmlschemas.c: Charles Bozeman fixed some Schemas validation
+ problems
+ * result/schemas/elem* result/schemas/seq* test/schemas.elem*
+ test/schemas/seq*: added the test cases from Charles
+
+Wed Oct 23 16:42:29 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am config.h.in libxml.spec.in doc/Makefile.am:
+ serious cleanup of the spec file and associated changes
+ in the Makefiles.
+ * valid.c: try to remove some warnings on x86_64
+
+Wed Oct 23 10:53:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/Makefile.am: added winsockcompat.h to EXTRA_DIST to
+ fix bug #96586
+
+Tue Oct 22 21:13:06 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: Mikhail Sogrine pointed out a bug in HTML
+ parsing, applied his patch
+ * result/HTML/attrents.html result/HTML/attrents.html.err
+ result/HTML/attrents.html.sax test/HTML/attrents.html:
+ added the test and result case provided by Mikhail Sogrine
+
+Tue Oct 22 19:33:20 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * vms/build_libxml.com vms/config.vms vms/readme.vms
+ include/libxml/parser.h include/libxml/parserInternals.h
+ include/libxml/tree.h include/libxml/xmlIO.h
+ HTMLparser.c catalog.c debugXML.c parser.c parserInternals.c
+ tree.c triodef.h trionan.c uri.c xmlIO.c xpath.c:
+ Applied the VMS update patch from Craig A. Berry
+ * doc/*.html: update
+
+Tue Oct 22 16:27:31 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/encoding.h encoding.c: made xmlGetUTF8Char public
+
+Tue Oct 22 16:25:18 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: adding a grep command to --shell in xmllint
+ for T.V. Raman
+
+Tue Oct 22 16:23:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlcatalog.c: tried to fix some of the problem with --sgml
+
+Mon Oct 21 09:57:10 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: tried to fix bug #91500 where doc->children may
+ be overriden by a call to xmlParseBalancedChunkMemory()
+
+Mon Oct 21 09:04:32 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: tried to fix bug #90945 w.r.t. parsing of system
+ identifiers in SGML catalogs containing '&'
+
+Sun Oct 20 23:31:47 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/types.c: fixed bugs when passing result value tree
+ to Python functions.
+
+Fri Oct 18 13:18:53 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing the release of 2.4.26
+ * doc/*: updated and rebuilt the documentation
+
+Wed Oct 16 20:01:46 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed a XML Namespace compliance bug reported by
+ Alexander Grimalovsky
+
+Wed Oct 16 17:18:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixed serialization of script and style when
+ they are not lowercase (i.e. added using the API to the tree).
+
+Wed Oct 16 16:31:05 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: make xmlValidateDocument emit a warning msg if there
+ is no DTD, pointed by Christian Glahn
+
+Wed Oct 16 16:05:38 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c: fixed the validation of sequences
+ content model when some of the blocks have min or max, and a couple
+ of bugs found in the process.
+ * result/schemas/list0* test/schemas/list0*: added some specific
+ regression tests
+
+Tue Oct 15 12:41:01 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * README: updated the contact informations
+
+Tue Oct 15 10:35:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: use test -f instead of test -e since Solaris /bin/sh
+ misses it, reported by Peter Bray.
+
+Mon Oct 14 17:37:32 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: investigating xmlNodeGetContent() on namespace nodes
+ and removed a few warnings
+
+Mon Oct 14 13:12:55 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Christian Glahn found a small bug in the push parser.
+ * xmlIO.c include/libxml/xmlIO.h: cleaned up and made xmlCheckFilename
+ public
+
+Wed Oct 9 23:11:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c include/libxml/xmlschemas.h: added
+ xmlSchemaNewMemParserCtxt to parse a schemas from a memory area
+ * testSchemas.c: added --memory to test the new interface
+
+Wed Oct 9 16:22:54 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/index.py doc/search.php: integrated the XSLT indexing,
+ a few fixed in the indexer, added a scope selection at the
+ search level.
+
+Wed Oct 9 12:18:37 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: Joe Marcus Clarke reported a segfault on FBsd
+ this was due to uninitialized parts of the validation context
+
+Tue Oct 8 23:24:20 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: applied patch from Mark Vakoc except the API
+ change, preserved it.
+ * doc/*: updated the docs to point to the search engine for
+ information lookup or before bug/help reports.
+
+Tue Oct 8 18:53:31 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/index.py doc/search.php: added mailing-list archives
+ indexing and lookup
+
+Tue Oct 8 10:25:07 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: patch from Mark Vakoc to fix xmlNodeGetPath()
+
+Mon Oct 7 13:12:03 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/index.py: improved HTML indexing
+ * doc/search.php: make the queries also lookup the HTML based indexes
+
+Sun Oct 6 23:50:29 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/index.py: added HTML page indexing
+
+Fri Oct 4 15:33:55 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * xmlIO.c: extended Windows path normalisation to fix the base
+ problem in libxslt.
+ * catalog.c: fixed list handling in XML_CATALOG_FILES
+
+Fri Oct 4 13:43:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: typo/bug found by Christian Glahn
+
+Sun Sep 29 19:44:10 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * xmlIO.c: applied Windows CE patch from Javier.
+ * win32/wince: new directory, contains support for the PocketPC
+ with Windows CE from Javier.
+ * include/win32config.h: reorganised, removed duplicate
+ definitions and applied WinCE patch from Javier.
+ * include/wsockcompat.h: new file, now contains WinSock
+ compatibility macros.
+ * win32/Makefile.msvc: introduced double-run compilation.
+
+Thu Sep 26 19:48:06 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing release
+ of 2.4.25
+ * doc/*: updated and regenerated teh docs and web pages.
+
+Thu Sep 26 17:33:46 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c valid.c include/libxml/valid.h: fixed bug #92518 validation
+ error were not covering namespace declarations.
+ * result/valid/dia.xml test/valid/dia.xml: the test wasn't valid,
+ it was missing the attribute declaration for the namespace
+ * result/VC/NS3: the fix now report breakages in that test
+
+Thu Sep 26 14:39:07 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixing bug #94241 on HTML boolean attributes
+
+Thu Sep 26 14:25:33 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/*: added the 3 new modules xmlregexp xmlautomata and xmlunicode
+ and regenerated the docs and web site
+
+Thu Sep 26 11:45:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c xmlschemas.c xmlschemastypes.c xpath.c: make sure
+ ATTRIBUTE_UNUSED is always put after the attribute declaration,
+ not before
+
+Thu Sep 26 11:33:28 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml2class.txt: fixed a stupid error
+ breaking the python API
+
+Thu Sep 26 00:31:46 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * trio.c trio.h triodef.h trionan.c trionan.h triop.h
+ triostr.c triostr.h: applied a trio update patch from
+ Bjorn Reese which should work with MinGW
+
+Thu Sep 26 00:21:18 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: improving some documentation comments
+ * xmlregexp.c: found and fixed a mem leak with python regression tests
+ * doc/*: rebuilt the doc and the API XML file including the
+ xmlregexp.h xmlautomata.h and xmlunicode.h headers
+ * python/generator.py python/libxml2class.txt python/libxml_wrap.h
+ python/types.c: added access to the XML Schemas regexps from
+ python
+ * python/tests/Makefile.am python/tests/regexp.py: added a
+ simple regexp bindings test
+
+Tue Sep 24 08:10:48 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/xml.html:
+ fixing ftp links - thanks to Vitaly Ostanin
+
+Tue Sep 24 16:08:17 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c: fixed the data callback on transition functionality
+ which was broken when using the compact form
+ * result/schemas/*: updated the results, less verbose, all tests
+ pass like before
+ * DOCBparser.c testAutomata.c testC14N.c testSchemas.c testThreads.c
+ testXPath.c valid.c xinclude.c xmllint.c xmlregexp.c xmlschemas.c
+ xmlschemastypes.c xpath.c python/libxml.c: removed a bunch of
+ annoying warnings
+ * xpath.c: try to provide better error report when possible
+
+Sat Sep 21 14:56:37 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: fixed a breakage raised by Jacob
+
+Fri Sep 20 20:08:18 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/win32config.h: added HAVE_ERRNO_H definition for parts
+ which don't use sockets
+
+Fri Sep 20 18:40:50 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/Makefile.msvc: applied zlib patch from Daniel Gehriger
+ * win32/configure.js: applied zlib patch from Daniel Gehriger
+
+Fri Sep 20 15:40:14 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/configure.js: applied the patch from Mark Vakoc for
+ regexp support
+ * win32/libxml2.def.src: applied the patch from Mark Vakoc
+ for regexp support
+
+Fri Sep 20 15:35:33 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: as pointed by Igor Float and Double
+ parsing ain't finished yet
+
+Fri Sep 20 14:00:16 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in: trying to fix #88412 by bypassing
+ all the python subdir if python ain't detected
+
+Thu Sep 19 21:46:53 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in include/libxml/xmlversion.h.in:
+ made configuring with regexps/automata/unicode the default
+ but without schemas ATM
+ * testRegexp.c valid.c xmlregexp.c include/libxml/xmlregexp.h:
+ fixed the regexp based DTD validation performance and memory
+ problem by switching to a compact form for determinist regexps
+ and detecting the determinism property in the process. Seems
+ as fast as the old DTD validation specific engine :-) despite
+ the regexp built and compaction process.
+
+Wed Sep 18 18:27:26 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: determinism is debugged, new DTD checking code now works
+ but xmlFAComputesDeterminism takes far too much CPU and the whole
+ set usues too much memory to be really usable as-is
+
+Wed Sep 18 00:54:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed another stupid bug in xmlGetNodePath()
+ * xmllint.c: --version now report the options compiled in
+
+Tue Sep 17 23:48:07 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: small cleanup
+ * valid.c xmlregexp.c: switched DTD validation to use only regexp
+ when configured with them. A bit of debugging around the determinism
+ checks is still needed
+
+Tue Sep 17 21:22:25 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml_wrap.h: stupid bug found by mattam@netcourrier.com
+
+Tue Sep 17 19:58:26 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: small portability glitch fixed.
+
+Mon Sep 17 12:38:08 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: incomplete steps for real/double support
+ * testAutomata.c include/libxml/xmlautomata.h
+ include/libxml/xmlregexp.h: avoiding a compilation problem
+ * valid.c include/libxml/valid.h: starting the work toward using
+ the regexps for actual DTD validation
+
+Fri Sep 13 16:46:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * hash.c: cosmetic cleanup
+ * valid.c include/libxml/tree.h include/libxml/valid.h: started
+ integrating a DTD validation layer based on the regexps
+
+Thu Sep 12 18:01:29 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c: fixed a bug reported by Jeff Goff,
+ the determinism was tested before eliminating the epsilon
+ transitions :-(
+
+Thu Sep 12 16:57:45 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml.py
+ python/libxml2-python-api.xml python/libxml2class.txt
+ python/libxml_wrap.h python/types.c: updated the python
+ bindings, added code for easier File I/O, and the ability to
+ define a resolver from Python fixing bug #91635
+ * python/tests/Makefile.am python/tests/inbuf.py
+ python/tests/outbuf.py python/tests/pushSAXhtml.py
+ python/tests/resolver.py python/tests/serialize.py: updated
+ and augmented the set of Python tests.
+
+Tue Sep 10 21:05:28 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/configure.js: added more readme info for the binary
+ package.
+
+Tue Sep 10 14:15:18 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: fixed a stupid out of bound array error
+
+Tue Sep 10 13:09:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlIO.h xmlIO.c parser.c HTMLparser.c DOCBparser.c:
+ messing around with support for Windows path, cleanups,
+ trying to identify and fix the various code path to the
+ filename access. Added xmlNormalizeWindowsPath()
+
+Thu Sep 5 16:19:18 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * error.c valid.c: working on better error reporting of validity
+ errors, especially providing an accurate context.
+ * result/valid/xlink.xml.err result/valid/rss.xml.err: better
+ error reports in those cases.
+
+Thu Sep 5 13:29:47 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c HTMLparser.c c14n.c entities.c list.c
+ parser.c parserInternals.c xmlIO.c: get rid of all the
+ perror() calls made in the library execution paths. This
+ should fix both #92059 and #92385
+
+Thu Sep 5 13:13:17 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: memory leak reporting was broken after a change
+ of the preprocessor symbol used to activate it.
+
+Thu Sep 5 13:10:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: try to make the copy function work for node of
+ type XML_DOCUMENT_FRAG_NODE, they are only created by the
+ DOM layers though, not libxml2 itself.
+
+Thu Sep 5 12:57:38 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: try to provide file and line informations, not all
+ messages are covered, but it's a (good) start
+
+Thu Sep 5 12:49:35 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: reimplemented a large part of the XInclude
+ processor, trying to minimize resources used, James Henstridge
+ provided a huge test case which was exhibiting severe memory
+ consumption problems.
+
+Thu Sep 5 10:07:13 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: applied patch from Christophe Merlet to
+ reestablish DESTDIR
+
+Wed Sep 4 14:13:34 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in: fixes libary path for x86_64 AMD
+
+Tue Sep 3 21:14:19 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/includekeyword.c
+ * doc/tutorial/xmltutorial.xml:
+ (plus resulting generated html files)
+ fixing one spot I missed in the tutorial where I hadn't freed
+ memory properly
+
+Sat Aug 31 19:31:17 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/includeaddattribute.c
+ * doc/tutorial/includeaddkeyword.c
+ * doc/tutorial/includegetattribute.c
+ * doc/tutorial/includekeyword.c
+ * doc/tutorial/xmltutorial.xml
+ * doc/tutorial/*.html:
+ update tutorial to properly free memory (thanks to Christopher
+ R. Harris for pointing out that this needs to be done)
+ * doc/tutorial/images/callouts/*.png:
+ added image files so the callouts are graphical, making it
+ easier to read ( use "--param callout.graphics 1" to generate
+ html with graphical callouts)
+
+Wed Aug 28 13:44:54 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Libxml2-Logo-180x168.gif doc/Libxml2-Logo-90x34.gif:
+ nice logos generated by Marc Liyanage
+ * doc/site.xsl *.html: changed the stylesheet to show the new
+ logo and regenerated the pages
+
+Sun Aug 25 16:38:05 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: handle Windows sepecific file://localhost/ semantic ...
+
+Thu Aug 22 22:03:19 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: possible mem leak patch from Jason Adams
+
+Thu Aug 22 17:27:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: integrated xf:escape-uri() from Wesley Terpstra
+ in the XQuery namespace
+ * configure.in: preparing 2.4.24
+ * doc/*.html: updated the web pages
+
+Thu Aug 22 16:19:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py: closing bug #85258 by generating conditional
+ compile check to avoid linking to routines not configured in.
+
+2002-08-22 Havoc Pennington <hp@pobox.com>
+
+ * autogen.sh: update error message for missing automake
+
+Thu Aug 22 11:45:50 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: typo in target name resulted in libxml2.py
+ to not be rebuilt. fixed DESTDIR similary to the libxslt one.
+
+Thu Aug 22 09:15:00 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * win32/win32/Makefile.mingw: updated with version from
+ Elizabeth Barham at http://soggytrousers.net/repository/
+
+Tue Aug 20 16:40:48 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/Makefile.msvc: added the prefix location to the include
+ and lib search path.
+
+2002-08-18 Havoc Pennington <hp@pobox.com>
+
+ * autogen.sh: hardcode aclocal-1.4/automake-1.4 so that users with
+ both automake 1.6 and 1.4 installed get the right automake. Means
+ compilation from CVS will now require the latest automake 1.4
+ release, or manually creating symlinks called "automake-1.4" and
+ "aclocal-1.4"
+
+Wed Aug 14 18:54:19 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in python/Makefile.am: more AMD 64 induced changes from
+ Frederic Crozat
+
+Wed Aug 14 16:43:53 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: oops I was missing the xml:base fixup too
+ * result/XInclude/*.xml: this adds xml:base attributes to most
+ results of the tests
+
+Wed Aug 14 16:05:37 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: quick but apparently working implementation of
+ xi:fallback, should close bug #89684
+ * Makefile.am test/XInclude/docs/fallback.xml
+ result/XInclude/fallback.xml: added a basic test for fallback,
+ and run with --nowarning to avoid a spurious warning
+ * configure.in: applied patch from Frederic Crozat for python
+ bindings on AMD 64bits machines.
+
+Wed Aug 14 10:47:46 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: xmlSAXUserParseMemory() really ought to fail if
+ the caller don't pass a SAX callback block.
+
+Wed Aug 14 10:29:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied the same fix for the XML-1.0 namespace to
+ xmlSearchNsByHref() as was done for xmlSearchNs()
+
+Mon Aug 12 16:52:08 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.3: small cleanup of the man page
+ * HTMLtree.c: fixed a potential problem raised by Petr Vandrovec
+ when serializing HREF attributes generated by XSLT.
+
+Mon Aug 12 15:24:05 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c include/libxml/HTMLtree.h: integrated a cleaned up
+ version of Marc Liyanage' patch for boolean attributes in HTML
+ output
+
+Mon Aug 12 14:11:59 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/tests/serialize.py: fixed the test results, indenting
+ behaviour changed slightly
+
+Thu Aug 8 11:00:26 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * win32/dsp/libxml2.def.src win32/libxml2.def.src: added
+ new c14n function to Windows def files
+
+Fri Aug 2 16:46:46 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * c14n.c: fixed a memory leak in c14n code
+
+Sat Aug 3 00:15:06 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c include/libxml/parser.h: adding a new API for Christian
+ Glahn: xmlParseBalancedChunkMemoryRecover
+ * valid.c: patch from Rick Jones for some grammar cleanup in
+ validation messages
+ * result/VC/* result/valid/*: this slightly change some of the
+ regression tests outputs
+
+Thu Aug 1 14:50:28 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: trying to fix a problem in namespaced attribute handling
+ raised by Christian Glahn
+
+Thu Aug 1 12:17:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c include/libxml/encoding.h: Opening the interface
+ xmlNewCharEncodingHandler as requested in #89415
+ * python/generator.py python/setup.py.in: applied cleanup
+ patches from Marc-Andre Lemburg
+ * tree.c: fixing bug #89332 on a specific case of loosing
+ the XML-1.0 namespace on xml:xxx attributes
+
+Wed Jul 31 23:27:42 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * c14n.c include/libxml/c14n.h: fixed one more c14n + namespaces
+ corner case from new Merlin's test suite and added a callback
+ that will be used to improve xmlsec performance
+
+
+Mon Jul 29 18:22:00 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: trying to fix the <style> escaping problem in
+ HTML serialization bug #89342
+
+Thu Jul 25 01:33:47 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xml.html doc/*.html: applied syntax patch from Rick Jones
+ and rebuilt the web site.
+
+Mon Jul 22 11:04:48 PDT 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * include/libxml/tree.h: added _private member to xmlNs struct
+
+Sun Jul 21 17:48:47 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixing bug #84876 based on the xml working
+ code.
+
+Sun Jul 21 19:15:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * python/Makefile.am: enhanced to fix bug 72012 (errors
+ when using '-jX' make parameter)
+
+Fri Jul 19 16:35:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: small additional enhancement for booleans
+ compared to nodesets
+
+Wed Jul 17 19:48:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: changed the order of the encoding declaration
+ attributes in the meta tags due to a bug in IE/Mac
+
+Fri Jul 12 08:45:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: enhanced handling of booleans (especially '='
+ and '!=' for nodesets) - fixes bug 85256. Added new
+ routine xmlXPathNotEqualValues for more proper handling
+ of '!=' when nodesets are involved.
+
+Thu Jul 11 21:45:52 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am: fixing Red Hat bug #68614 by adding the
+ doc/xmlcatalog_man.xml to the source distribution
+
+Wed Jul 10 21:26:13 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/Makefile.msvc: Added a copy *.pdb to install, few have
+ asked for this.
+
+Sat Jul 6 21:55:59 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.23
+ * doc/*: rebuilt the docs
+
+Sat Jul 6 21:11:20 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixing bug #84169 by fixing the
+ comment of xmlCreatePushParserCtxt to describe the
+ encoding detection parameters better.
+
+Sat Jul 6 19:44:56 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixing bug #79331 in one path the lookup for
+ ID attributes on a namespaced node wasn't handled correctly :-\
+
+Fri Jul 5 20:07:43 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: trying to fix 87235 about discarded white
+ spaces in the HTML parser.
+ * result/HTML/*: this changes the output of a number of HTML
+ regression tests
+
+Mon Jul 1 23:23:41 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: applied patch from Richard Jinks for the namespace
+ axis + fixed a memory error.
+ * parser.c parserInternals.c: applied patches from Peter Jacobi
+ removing ctxt->token for good.
+ * xmlschemas.c xmlschemastypes.c: fixed a few memory leaks
+ popped out by the regression tests.
+ * Makefile.am: patch for threads makefile from Gary Pennington
+
+Fri Jun 28 19:38:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: enhanced behaviour of position() after usage of
+ expressions involving preceding-sibling (et al).
+
+Tue Jun 18 09:58:48 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * hash.c: applied a patch from Peter Jacobi to solve a problem
+ when compiling with the Watcom C on Win32
+ * result/schemas/*.err: the change of hashing algo generated
+ permutations in the output
+
+Mon Jun 17 19:02:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * hash.c: applied patch from Sander Vesik improving the quality of
+ the hash function.
+
+2002-06-14 Aleksey Sanin <aleksey@aleksey.com>
+
+ * DOCBparser.c HTMLparser.c debugXML.c encoding.c
+ nanoftp.c nanohttp.c parser.c tree.c uri.c xmlIO.c
+ xmllint.c xpath.c: replaced sprintf() with snprintf()
+ to prevent possible buffer overflow (the bug was pointed
+ out by Anju Premachandran)
+
+Thu Jun 13 17:30:25 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: removed an uninitialized data error popped by valgrind
+ on PE references
+
+Wed Jun 12 21:38:46 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/xml.html
+ adding tutorial reference to the web page
+
+Wed Jun 12 21:26:08 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/xmltutorial.xml
+ * doc/tutorial/ar01s07.html
+ * doc/tutorial/ape.html
+ * doc/tutorial/includegetattribute.c
+ adding section to tutorial about retrieving an attribute
+ value
+
+Tue Jun 11 12:07:04 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: applied a couple of patches from Peter Jacobi to start
+ to get rid of ctxt->token, with a possible significant speed
+ improvement to be gained once done. Better compliance with PE
+ references constructs in DTDs too.
+ * test/valid/t[0-9]* result/valid/t[0-9]*: added a set of tests
+ from Peter too
+
+Tue Jun 11 09:25:12 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Babak Vahedipour-Kunze reported that openTag in
+ xmlParseElement was likely to have been deallocated at the
+ time of the report, possibly leading to segfault. Just report
+ the tag name now.
+
+Mon Jun 10 18:00:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: patch from Richard Jinks for XPath substring() function
+ * result/XPath/expr/strings test/XPath/expr/strings: new set of tests
+
+2002-06-06 Aleksey Sanin <aleksey@aleksey.com>
+
+ * xmlIO.c: patch from Rachel Hestilow to fix bug #84340
+
+Wed Jun 5 19:14:49 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ *doc/FAQ.html
+ fixing typos in FAQ, thanks to Robert Funnell for the
+ editing help
+
+Wed Jun 5 14:50:24 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS: got complaints from rpmlint that it was empty
+
+Tue Jun 4 09:09:18 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * added doc/tutorial, including:
+ apa.html
+ apb.html
+ apc.html
+ apd.html
+ ar01s02.html
+ ar01s03.html
+ ar01s04.html
+ ar01s05.html
+ ar01s06.html
+ includeaddattribute.c
+ includeaddkeyword.c
+ includekeyword.c
+ includestory.xml
+ index.html
+ xmltutorial.xml
+ libxml tutorial, including generated html
+
+Mon Jun 3 21:21:26 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * result/c14n/exc-without-comments/merlin-c14n-two-*
+ result/c14n/without-comments/merlin-c14n-two-*
+ test/c14n/exc-without-comments/merlin-c14n-two-*
+ test/c14n/without-comments/merlin-c14n-two-*
+ testC14N.c Makefile.am: added merlin-c14n-two.tar.gz tests for
+ c14n/exc-c14n and slightly modified test script to handle
+ these test cases
+ * c14n.c: fixed bugs for complicated nodes set (namespace
+ without node and others from merlin-c14n-two.tar.gz)
+ * include/libxml/xpathInternals.h win32/dsp/libxml2.def.src
+ win32/libxml2.def.src: "opened" xmlXPathNodeSetFreeNs() function
+ for xmlsec performance patch
+ * xpath.c: fixed self::node() for namespaces and attributes
+
+Mon Jun 03 00:04:21 2002 Chema Celorio <chema@ximian.com>
+
+ * tree.h: added xmlDocFormatDump which is just as xmlDocDump
+ but with the format parameter
+ * tree.c: made xmlDocDump a wrapper arround xmlDocFormatDump
+
+Fri May 31 12:16:48 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * Makefile.am: updated c14n tests suite
+ * c14n.c: performance improvement for previous c14n patch
+
+Fri May 31 11:47:12 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: another peroformance patch from Peter Jacobi, that
+ time on parsing attribute values.
+
+Thu May 30 23:34:27 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * Makefile.am result/c14n/* test/c14n/*: C14N tests integrated
+ into LibXML2 test suite
+
+Thu May 30 21:23:06 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * c14n.c: propagating xpath ancesstors node fix to c14n
+ plus small performance improvement to reduce number of
+ mallocs
+ * xpath.c: fixed ancestors axis processing for namespace nodes
+
+Wed May 29 10:21:39 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c parser.c tree.c include/libxml/tree.h: performance patch from
+ Peter Jacobi
+
+Mon May 27 23:18:33 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.22
+
+Mon May 27 16:44:04 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c win32/libxml2.def.src win32/dsp/libxml2.def.src
+ include/libxml/HTMLparser.h: fixing #79334 making htmlParseDocument
+ a public entry point.
+ * doc/*: rebuilt the API and docs
+
+Mon May 27 14:16:28 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: patch from Richard Jinks to fix a problem introduced
+ in the previous patch and pointed by Norm
+
+Fri May 24 13:10:22 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in: fixing bug #81112
+
+Fri May 24 13:03:24 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: fixing bug #82848
+
+Fri May 24 09:54:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * result/catalogs/mycatalog.full: Aleksey's commit changed the
+ output of one catalog test
+
+Fri 24 May 2002 12:17:45 AM PDT Aleksey Sanin <aleksey@aleksey.com>
+
+ * global.data globals.c tree.c include/libxml/globals.h
+ win32/libxml2.def.src win32/dsp/libxml2.def.src: changed
+ default value for global parameter xmlIndentTreeOutput to 1 and
+ introduced new global parameter xmlTreeIndentString (the string
+ used to do one-level indent) with default value " " (as it was
+ in tree.c)
+
+Thu May 23 13:55:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: Merijn Broeren pointed out a problem when compiling
+ with trio and schemas.
+
+Wed May 22 11:57:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: patch from Richard Jinks to fix the problem raised in
+ http://mail.gnome.org/archives/xml/2002-April/msg00246.htm
+
+Wed May 22 08:38:19 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: a bit of work on import.
+ * xmlschemastypes.c: Charles Bozeman provided a compare function
+ for date/time types so min/max facet restrictions should work,
+ indeterminate comparisons return an error instead of equal.
+ * test/schemas/date_0* result/schemas/date_0_0: specific test
+ from Charles Bozeman too
+
+Sat May 18 09:54:12 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.3 doc/buildDocBookCatalog: apply a couple of patches
+ from Christian Cornelssen fixing the man pages and the Catalog
+ building script.
+ * xmlschemas.c include/libxml/schemasInternals.h: nothing new yet
+ next step is <xs:import> I now have a reasonable understanding
+ of how it works.
+
+Thu May 16 10:43:26 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: applied a small buffer performance patch from Gary Pennington
+
+Wed May 15 00:25:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: exported xmlXPathNodeSetAddNs()
+
+Tue May 14 13:00:48 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixing an XPath function evalutation bug pointed out
+ by Alexey Efimov where the context was lost when evaluating
+ the function arguments
+
+Mon 13 May 2002 11:37:39 PM PDT Aleksey Sanin <aleksey@aleksey.com>
+
+ * xpath.c include/libxml/xpathInternals.h: maked xmlXPathNodeSetAddNs()
+ function public for XMLSec performance optimizations
+
+Mon May 13 12:32:22 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml2class.txt : fixed a problem
+ with the HTML parser pointed by Gary Benson
+ * python/tests/Makefile.am python/tests/pushSAXhtml.py: sdding the
+ example
+
+Thu 09 May 2002 11:19:00 AM PDT Aleksey Sanin <aleksey@aleksey.com>
+ * parser.c: fixed bug #81159 (memory growth in SAX)
+
+Tue 07 May 2002 09:20:21 AM PDT Aleksey Sanin <aleksey@aleksey.com>
+ * xpath.c: fixed bug #78858 (the real fix)
+
+Sat 04 May 2002 11:56:31 PM PDT Aleksey Sanin <aleksey@aleksey.com>
+ * xpath.c: fixed bug #78858 (quick and durty fix to hide the problem)
+
+Sun May 5 08:57:08 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: modified xmlNodeSetBase to allow changing the
+ base of a document.
+
+Fri May 3 09:20:41 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: patch Charles Bozeman for validation of
+ all the date, time, and duration types
+ * test/schemas/dur_0* result/schemas/dur_0*: associated tests
+ * configure.in: fixed an error pointed by an user
+ * xml2-config.in: fixed an error pointed by an user
+
+Wed 01 May 2002 11:29:27 AM PDT Aleksey Sanin <aleksey@aleksey.com>
+
+ * include/libxml/xmlIO.h win32/dsp/libxml2.def.src
+ win32/libxml2.def.src xmlIO.c: exported default
+ 'file:', 'http:' and 'ftp:' protocols input handlers
+ and maked protocols comparisson case insensitive
+
+Tue Apr 30 16:29:05 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: Neven Has detected a typo
+
+Tue Apr 30 08:48:11 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * AUTHORS HACKING: added Aleksey Sanin <aleksey@aleksey.com>
+ as one of the persons allowed to commit directly to the
+ module.
+
+Mon Apr 29 17:48:26 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.21
+ * valid.c: raised a too low limit
+ * doc/*: rebuilt the docs
+
+Wed Apr 24 13:41:03 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * test/XPath/expr/floats test/XPath/expr/functions
+ result/XPath/expr/floats result/XPath/expr/functions
+ xpath.c: another XPath conformance patch from Richard Jinks
+
+Tue Apr 23 19:50:40 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: fixed validation of attribute groups.
+ * test/schemas result/schemas: added an example from the primer
+
+Tue Apr 23 09:11:37 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am xmlschemas.c xmlschemastypes.c: more work on Schemas
+ * test/schemas result/schemas: updated the test list
+
+Mon Apr 22 17:59:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * TODO: updated a bit
+ * parser.c: made a comment more specific
+ * xmlregexp.c xmlschemas.c xmlschemastypes.c: more work on the
+ Schemas conformance.
+ * test/schemas result/schemas: updated the test list
+
+Sat Apr 20 19:36:39 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h:
+ implementing xs:all with minOccurs = 0
+ * tes/schemas/* result/schemas/*: added more tests covering
+ xs:all
+
+Sat Apr 20 09:22:50 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c: first implementation of the all particle, this
+ may need to be revisited for case where not all transitions
+ must be crossed.
+
+Fri Apr 19 18:26:04 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: another entity processing update from Markus Henke
+
+Fri Apr 19 17:14:24 CEST 2002 Bjorn Reese <breese@users.sourceforge.net>
+
+ * trionan.c: fixed crash on OSF/1
+
+Fri Apr 19 09:00:56 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: more Schemas work
+ * test/schemas/* result/schemas/*: added more tests coming
+ from the spec.
+
+Thu Apr 18 23:00:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: patch from Aleksey Sanin reflecting a change in the
+ ExcC14N specification
+
+Thu Apr 18 18:38:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: patch from Markus Henke, fix for recursive entities.
+
+Thu Apr 18 17:49:24 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fix a problem with string() on a document node.
+
+Thu Apr 18 16:40:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am xmlschemas.c: more Schemas work
+ * test/schemas/* result/schemas/*: added more tests coming
+ from the spec.
+
+Thu Apr 18 13:52:52 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixed & serialization bug introduced in 2.4.20
+ * result/HTML/*: this changes a few things in the results
+
+Wed Apr 17 20:34:37 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/libxml/tree.h: eliminated 'declaration different than
+ prototype' warning
+ * include/win32config.h: "resolved" conflicts with errno.h
+
+Wed Apr 17 18:26:07 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h: more work
+ on the automata interfaces and debug of counted choices
+ * test/schemas/* result/schemas/*: added a number of tests
+
+Wed Apr 17 11:03:03 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c xmlschemastypes.c include/libxml/xmlschemas.h:
+ a bit of work on Schemas
+ * testSchemas.c: try to make it more useful
+ * test/schemas/* result/schemas/* Makefile.am: changed the
+ Schemas regression test procedure, started adding a few samples
+
+Tue Apr 16 19:52:01 CEST 2002 Igor Zlatkovic <izlatkovic@stud.fh-frankfurt.de>
+
+ * include/libxml/encoding.h: Patch for the Borland C++ builder
+ * include/libxml/tree.h: Patch for the Borland C++ builder
+ * threads.c: Patch for the Borland C++ builder
+ * win32/bcb5: New directory for the Borland C++ builder
+ project files
+
+Tue Apr 16 19:46:55 CEST 2002 Igor Zlatkovic <izlatkovic@stud.fh-frankfurt.de>
+
+ * win32/Makefile.msvc: Update for XML Schema support
+ * win32/configure.js: Update for XML Schema support
+ * win32/libxml2.def.src: Update for XML Schema support
+
+Tue Apr 16 17:46:43 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am TODO_SCHEMAS configure.in genUnicode.py testAutomata.c
+ testRegexp.c testSchemas.c xmlregexp.c xmlschemas.c xmlschemastypes.c
+ xmlunicode.c include/libxml/Makefile.am
+ include/libxml/schemasInternals.h include/libxml/xmlautomata.h
+ include/libxml/xmlregexp.h include/libxml/xmlschemas.h
+ include/libxml/xmlschemastypes.h include/libxml/xmlunicode.h
+ include/libxml/xmlversion.h.in : merged the current state of
+ XML Schemas implementation, it is not configured in by default,
+ a specific --schemas configure option has been added.
+ * test/automata test/regexp test/schemas Makefile.am
+ result/automata result/regexp result/schemas:
+ merged automata/regexp/schemas regression tests
+
+Tue Apr 16 09:48:44 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: Gary found a compile time problem, fixes #78823
+
+Mon Apr 15 19:11:36 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: release of 2.4.20
+ * doc/*: updated and rebuilt the docs
+
+Mon Apr 15 14:55:53 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: patch from Cristian Gafton to build on
+ Red Hat 6.2, should also fix #75779
+
+Mon Apr 15 12:14:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: first part of fixing #78729
+
+Sun Apr 14 23:44:58 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c uri.c: fixing bug #78662 i.e. add proper
+ escaping of URI when saving HTML files.
+ * result/HTML/*: this impacted some tests
+
+Sun Apr 14 14:55:15 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: trying to fix #77441
+
+Fri Apr 12 23:02:16 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlIO.h: Hallski complained it could not be
+ included by itself.
+
+Thu Apr 11 10:23:36 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: applied an IEEE flag patch for OSF/1 #77825
+
+Wed Apr 10 23:31:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/configure.js: patch from Nilo for the c14n option
+ * win32/Makefile.msvc: fixed libxml2.def generation with threads
+
+Wed Apr 10 21:24:16 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c include/libxml/xmlwin32version.h.in: Silvan Minghetti
+ pointed erroneous use of LIBXML_THREADS_ENABLED instead of
+ LIBXML_THREAD_ENABLED
+
+Wed Apr 10 18:12:52 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: another patch from Richard Jinks for substring conformance
+ * test/XPath/expr/floats test/XPath/expr/strings
+ result/XPath/expr/floats result/XPath/expr/strings: update of the
+ test suite to check those.
+
+Wed Apr 10 13:29:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: patch from Richard Jinks for .x float parsing.
+
+Tue Apr 9 18:09:31 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: patch from Markus Henke when an encoding ain't recognized
+
+Tue Apr 9 15:47:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.m4: got a report that #include <string.h> was needed
+
+Tue Apr 9 11:51:25 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: applied a fix from Anthony Jones for -o /--output
+
+Tue Apr 2 20:27:11 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/example.html: fixing typo
+
+Mon Apr 1 10:02:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixed a bug in the nodeset to boolean comparison code
+ pointed out by Melvyn Sopacua.
+
+Fri Mar 29 23:41:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.m4: Frédéric Crozat gave a patch related to the change
+ of Include paths breaking the libxml.m4
+
+Fri Mar 29 18:25:54 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: Fix bug #76927 forgot to save some context
+ when evaluating binary expressions
+
+Thu Mar 28 19:22:48 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: fixed configure for MPE/iX from Markus Henke
+ * xmlmemory.c: fixed initialization problems
+ * xpath.c: another set of patches from Richard Jinks this
+ fixes "make XPathtests" on linux
+
+Wed Mar 27 17:09:43 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * trionan.c trionan.h xpath.c: more patches from Richard Jinks
+ * test/XPath/expr/compare test/XPath/expr/equality
+ test/XPath/expr/floats test/XPath/expr/functions
+ test/XPath/expr/strings result/XPath/expr/compare
+ result/XPath/expr/equality result/XPath/expr/floats
+ result/XPath/expr/functions result/XPath/expr/strings: Updated
+ tests though they show a divergence on Linux
+
+Wed Mar 27 10:06:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c trionan.c: previous commit also included patches
+ from Richard Jinks on some IEEE support corner case
+
+Wed Mar 27 10:03:11 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * AUTHORS HACKING: Added Igor Zlatkovic as official maintainer
+ * python/Makefile.am python/tests/Makefile.am: Albert Chin pointed
+ that $(datadir) should be used for docs
+
+Tue Mar 26 13:43:16 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: Thomas Steinborn pointed out #76404 that libxml2
+ could leak filedescriptors
+
+Tue Mar 26 08:55:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in nanohttp.c: applied patch from Allan Clark for
+ UnixWare/OpenServer
+
+Mon Mar 25 17:45:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.19
+ * doc/*: rebuilt the docs
+
+Mon Mar 25 17:34:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * nanohttp.c: fixing #76043, got fed up with non-portability
+ of that piece of code.
+
+Mon Mar 25 13:08:21 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c SAX.c: Never commit without running "make tests" :-(
+ fix a couple of stupidities in the previous commit
+ * result/*: a few changes in some attribute order result of previous
+ commit.
+
+Mon Mar 25 11:46:05 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c SAX.c: fixed bug #76168, attribute redeclared in
+ the internal subset should not raise duplicate ID errors,
+ also there was a small bug in conjunction to namespace
+ declarations defaulted and xml:xxx attributes DTD definitions.
+
+Fri Mar 22 15:13:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: Richard Jinks also raised some rounding problems
+ this tries to fix them
+
+Fri Mar 22 13:22:09 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: Richard Jinks spotted an incoherent memory allocation
+ behaviour in xmlXPathCastToString()
+
+Thu Mar 21 14:25:29 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: fixed a bug in the ISO-Latin 1 to UTF8 encoder
+ raised by Morus Walter
+
+Thu Mar 21 14:07:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlcatalog.c include/libxml/xmlversion.h.in: applied 2 fixups
+ from Igor
+
+Thu Mar 21 13:30:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixing #75619, related to a problem when trying
+ to evaluate condition when the current node set resulting
+ from that sub-step evaluation is empty. Also fixes 2 potential
+ problem with previous-sibling and next-siblings axis.
+
+Thu Mar 21 09:03:59 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: patch from Mark Vakoc to build C14N if DocBook and
+ HTML support is not configured in.
+
+Wed Mar 20 22:42:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c error.c parser.c parserInternals.c tree.c xmlIO.c
+ include/libxml/tree.h: dohh I really didn't intended to commit
+ this test version :-(
+
+Wed Mar 20 20:20:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * testSAX.c: I wanted to see the real speed at the SAX interface
+ after a little too many Ximianer started complaining about the
+ parser speed.
+ added a --quiet option:
+ paphio:~/XML -> ls -l db100000.xml
+ -rw-rw-r-- 1 veillard www 20182040 Mar 20 10:30 db100000.xml
+ paphio:~/XML -> time ./testSAX --quiet db100000.xml
+ 3200006 callbacks generated
+ real 0m1.270s
+ Which means 16MBytes/s and 3Mcallback/s
+
+Tue Mar 19 19:33:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: valgrind spotted another error that time when running
+ on libxslt regression tests
+
+Tue Mar 19 15:24:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: adding "make valgrind" running the full regression
+ tests (except python ones) under Valgrind (using valgrind -q
+ which was kindly added by the author).
+ * valid.c: stupid bug pinpointed by Valgrind, the regression tests
+ passes cleanly now except an obcure floating point initialization
+ raised in log10() in one XPath regression test ???
+ * tree.c: edited some comments to close #75244
+
+Tue Mar 19 12:15:20 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: pretty insane thing, the xmlXPathFormatNumber()
+ was not serializing 1 as "1" if LC_ALL=sv_SE :-( and in the
+ context of ScrollKeeper, made sure that if the number is
+ an integer, the serialization follows the description at
+ http://www.w3.org/TR/xpath#section-String-Functions
+
+Mon Mar 18 19:18:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.18
+ * doc/*: updated and rebuilt the web site
+ * *.c libxml.h: implement the new IN_LIBXML scheme discussed with
+ the Windows and Cygwin maintainers.
+ * parser.c: humm, changed the way the SAX parser work when
+ xmlSubstituteEntitiesDefault(1) is set, it will then
+ do the entity registration and loading by itself in case the
+ user provided SAX getEntity() returns NULL.
+ * testSAX.c: added --noent to test the behaviour.
+
+Mon Mar 18 12:44:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Wilfried Teiken provided a hackish but working
+ way to get context reported back on entities when parsing
+ with SAX and without breaking the DOM build.
+
+Sun Mar 17 11:31:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: applied a new patch from Aleksey Sanin
+ * doc/site.xsl doc/xml.html doc/*.html: updated the documentation
+ to reference Aleksey implementation of XML digital Signatures
+
+Sat Mar 16 23:01:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: small fix to avoid potential problem due to
+ ordering of freeing data
+ * python/Makefile.am: people were complaining about
+ the generated file in python dir not being built
+
+Fri Mar 15 23:21:40 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in python/Makefile.am python/tests/Makefile.am
+ python/generator.py python/libxml.c python/types.c: Cleanup
+ of the python Makefiles based on Jacob and James feedback,
+ fixed the spec file accordingly, fixed the number of warning
+ that passing my pedantic CFLAGS was generating. Conclusion
+ is that Python includes are real crap.
+
+Fri Mar 15 19:41:25 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure,in: it was reported quite a few times that
+ xml2-config --cflags should not output
+ -I$includeprefix/libxml2/libxml because libxml2 header names
+ clashes with existing names like list.h from C++ stl.
+ Includes should be #include<libxml/xxx.h> so ...
+
+Fri Mar 15 10:41:50 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: another patch from Aleksey Sanin
+
+Fri Mar 15 08:55:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: applied patch from Aleksey Sanin fixing a problem in the
+ canonicalization algorithm
+ * doc/xml.html doc/index.html: added the C14N references on the
+ index page.
+
+2002-03-13 jacob berkman <jacob@ximian.com>
+
+ * python/Makefile.am: remove LDADD and CFLAGS as this is broken
+ usage, redundant, and gcc specific
+
+Wed Mar 13 11:00:59 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: speedup some node selection operations, this can
+ have a significant impact on DocBook Norm's stylesheets
+ * nanohttp.c: someone reported that SOCKLEN_T may not be defined
+ make sure it's always the case
+ * debugXML.c: distinguish CDATA and comments in ls operations
+
+Tue Mar 12 19:45:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/*.h: Heiko W. Rupp fixed a lot of comments
+ to generate better API descriptions etc...
+
+Mon Mar 11 10:10:30 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: Fixing #74186, made sure all boolean expressions
+ get fully parenthesized, ran indent on the output
+ * configure.in HTMLtree.c SAX.c c14n.c debugXML.c tree.c xpointer.c
+ include/libxml/tree.h: also #74186 related, removed the
+ --with-buffers option, and all the preprocessor conditional
+ sections that were resulting from it.
+
+Sun Mar 10 17:47:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: applied patch from Dodji Seketeli fixing an
+ uninitailized variable in xmlValidGetValidElements()
+
+Sat Mar 9 15:10:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: fixed a few comments
+ * doc/*.html doc/*/*.html: regenerated the docs and added
+ the C14N API
+ * doc/api.xsl doc/gnome-xml.sgml: fixups and added IDs
+
+Sat Mar 9 11:16:11 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: fix to adapt varaiations in the
+ bindings
+ * configure.in python/setup.py python/setup.py.in: fixed to
+ have the version of the python scripts automatically updated
+
+Fri Mar 8 16:45:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed a bug newly introduced and pointed by Uwe Fechner
+ in xmlCopyProp()
+
+Fri Mar 8 15:49:10 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.17 release
+ * doc/*: updated and rebuilt the docs
+ * xpath.c: fixed a comment
+ * python/libxml.c: fixed a possible reentrancy problem
+
+Thu Mar 7 23:19:28 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c python/tests/Makefile.am python/tests/attribs.py:
+ fixed xmlHasNsProp() bugs for defaulted from DTD attribs,
+ added a specific regression test
+ * python/generator.py: xmlHasNsProp() and xmlHasProp() shall
+ not raise exceptions when failing to find the attribute.
+
+Thu Mar 7 16:11:35 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in xmllint.c: owen pointed out a problem with the
+ ftme fix, gettimeofday() was not detected by configure and
+ the ftime header wasn't included, dohhh
+
+Thu Mar 7 12:19:36 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in xmllint.c: trying to fix #71457 for timing
+ precision when gettimeofday() is not availble but ftime() is
+
+Thu Mar 7 11:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in doc/Makefile.am: Fixed #73408 missing images
+ are now copied on install and part of the -devel RPM
+
+Thu Mar 7 09:34:16 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: trying to avoid bug #72150 which was apparently
+ caused by a gcc bug (or a processor problem) as detailed
+ at http://veillard.com/gcc.bug
+
+Thu Mar 7 01:02:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c python/tests/Makefile.am python/tests/cutnpaste.py:
+ fixed xmlReconciliateNs(), added a Python test/example for
+ inter-document cut'n paste
+ * python/libxml.py: fixed node.doc on document nodes and added
+ xpathEval() onto node objects
+
+Wed Mar 6 22:38:03 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixed some htmlSetMetaEncoding() problems
+ * python/libxml.c python/tests/Makefile.am python/tests/serialize.py:
+ fixup and integrated tests for the serialization stuff
+
+Wed Mar 6 19:40:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am libxml.3 libxml.4 libxml.spec.in: Fixed bug #72570
+ moved the libxml man page to section 3
+
+Wed Mar 6 18:34:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fix bug #72490
+ * python/libxml.c python/libxml.py: added methods serialize()
+ and saveTo() to all node elements.
+
+Tue Mar 5 21:27:03 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: closed #73430, don't read from an input source
+ which indicated an end-of-file or an error.
+
+Tue Mar 5 16:33:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: make sure SAX endDocument is always called as
+ this could result in a Python memory leak otherwise (it's
+ used to decrement ref-counting)
+ * python/generator.py python/libxml.c python/libxml.py
+ python/libxml2-python-api.xml python/libxml2class.txt
+ python/tests/error.py python/tests/xpath.py: implemented
+ the suggestions made by Gary Benson and extended the tests
+ to match it.
+
+Tue Mar 5 10:35:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py: applied patch fixing #73450
+
+Mon Mar 4 17:59:29 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixing #61290 "namespace nodes have no parent"
+ long standing divergence from the XPath REC. NodeSets
+ simply hold a copy of namespace nodes and those node ->next
+ points to the parent (which may not be the node carrying the
+ definition).
+ * include/libxml/xpath.h: flagged but didn't added a possible
+ speedup
+ * DOCBparser.c HTMLparser.c: removed some warnings from push
+ parser due to new state being added.
+ * tree.c: new fix from Boris Erdmann
+ * configure.in c14n.c include/libxml/c14n.h testC14N.c: added
+ the XML Canonalization support from Aleksey Sanin
+
+Sun Mar 3 15:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: patch from Boris Erdmann fixing some namespace odities
+ with xmlCopyNode()
+
+Sat Mar 2 10:33:04 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: fix bug #72706 when loading a NULL entity
+
+Fri Mar 1 17:14:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: Fixed #72346, about handling of xmlns:foo="", this could
+ actually change in a future XML Namespace revision.
+
+Fri Mar 1 17:12:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/types.c python/tests/Makefile.am python/tests/xpathret.py:
+ added the possibility of returning nodesets from XPath extension
+ functions written in Python
+
+Fri Mar 1 13:56:12 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/*: commiting some Python bindings work done while travelling
+
+Fri Mar 1 10:11:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: close #72663 and #72658, don't memdump unless compiled
+ explicitely with memory debugging switched on
+
+Sat Feb 23 11:08:09 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt python/libxml_wrap.h python/types.c:
+ Added wrapper for the xmlURIPtr type, provided accessors, fixed
+ the accessor generator for strings
+ * python/tests/Makefile.am python/tests/tstURI.py: added a specific
+ regression test.
+
+Fri Feb 22 23:44:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/README python/generator.py python/libxml.c python/setup.py:
+ added the 'usual' setup.py to allow building a libxml2-python
+ module based on the same code. The initialization is however
+ different the 2 .so files fo libxml2 and libxslt are identical and
+ they entry point initialize both libraries. this is done to avoid
+ some possible nasty problem since the Python don't merge the maps
+ of all shared modules.
+
+Wed Feb 20 23:16:08 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed a push/encoding bug reported by Michael
+ on librsvg
+
+Wed Feb 20 19:54:05 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/parserInternals.h: fixes a misplaced #endif
+
+Wed Feb 20 17:47:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c valid.c: found and fixed a couple of allocation bugs
+
+Wed Feb 20 15:36:03 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xml.html doc/python.html doc/*: added a Python and binding
+ page describing the current state of the Python bindings and
+ giving pointers to the other languages wrappers.
+
+Wed Feb 20 11:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.16
+ * doc/* python/libxml2class.txt: updated and rebuilt the docs,
+ rebuilt the API and web site
+ * xpath.c: fixed #71978 portability bugs
+
+Tue Feb 19 22:49:36 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: oops broke automatic defaulting of namespaces attributes.
+
+Tue Feb 19 22:01:35 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/parserInternals.h parser.c: had to change
+ 2 internal parsing API when processing document content
+ to check the start and end of element content are defined
+ in the same entity
+ * valid.c include/libxml/valid.h: attribute normalization can
+ generate a validity error added xmlValidCtxtNormalizeAttributeValue()
+ with the context to report it.
+ * SAX.c: fixed the last known bugs, crazy validation constraints
+ when a document is standalone seems correctly handled. There
+ is a couple of open issues left which need consideration especially
+ PE93 on external unparsed entities and standalone status.
+ Ran 1819 tests: 1817 suceeded, 2 failed and 0 generated an error in 8.26 s.
+ The 2 tests left failing are actually in error. Cleanup done.
+
+Tue Feb 19 15:17:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: implemented E59 spaces in CDATA does not match the
+ nonterminal S
+
+Tue Feb 19 14:44:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c parser.c valid.c: more validation test fixups
+ * check-xml-test-suite.py: added duration info for the tests
+
+Mon Feb 18 23:25:08 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c valid.c: a couple of errors were reported but not
+ saved back as such in the parsing context. Down to 1% failure rate
+ Ran 1819 tests: 1801 suceeded, 18 failed and 0 generated an error
+
+Mon Feb 18 20:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlInternald.c: isExtender was missing a char
+ * parser.c include/libxml/parser.h: % are acceptable in the
+ internal subset if within a PUBLIC ID
+
+Mon Feb 18 19:27:32 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c parserInternals.c valid.c: more work on the conformance
+ suite. Took the step to finally block documents with encoding
+ errors. It's a fatal error per the spec, people should have fixed
+ their documents by now.
+
+Mon Feb 18 15:30:14 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: fixed the test script after some discussion
+ on the semantic of TYPE="error"
+ * Makefile.am: added the script to the distrib
+
+Mon Feb 18 12:17:41 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c entities.c: fixed a couple of conformances issues deep
+ into the validation code (standalone and undeclared Notations)
+
+Mon Feb 18 00:17:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed #71741 supid typo an a bug about encoding parsing
+ stayed there for years !
+
+Mon Feb 18 00:06:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c SAX.c: fixed #71740 NotationDecl with a required field
+ missing
+
+Sun Feb 17 23:45:40 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: improved the behaviour a bit as
+ well as the logs
+ * parser.c valid.c SAX.c: fixed a few more bugs
+ "Ran 1819 tests: 1778 suceeded, 41 failed, and 0 generated an error"
+
+Sun Feb 17 20:41:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: python script to run regression tests
+ against the XML Test suite of W3C/OASis
+ * SAX.c: fixed a validation bug
+ * parser.c: fixed 3 errors pointed by the test suite
+ * doc/buildDocBookCatalog: fixed a typo pointed by drake
+ * python/Makefile.am: fixed a dependendy
+
+Fri Feb 15 21:47:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlmemory.c: avoid a warning bug #71594
+
+Wed Feb 13 22:13:33 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlmemory.c: Jesse Perry provided a patch to remove a few
+ warning on alpha/Tru64
+
+Wed Feb 13 14:30:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/entities.h: fixing a comment
+ * valid.c: fixing some troubles with validity check on namespaces
+ * result/VC/NS3 test/VC/NS3: added a specific regression test
+
+Wed Feb 13 14:05:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Fixing #71342 serializing '\n' in attribute values
+ * result/noent/att3 result/att3 test/att3: added a specific
+ test.
+
+Tue Feb 12 14:45:32 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: couple of bug fixes
+
+Mon Feb 11 19:41:29 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/*.py: removed tabs and used spaces.
+
+Mon Feb 11 19:25:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.15
+ * doc/news.html doc/xml.html doc/xmlio.html: rebuilt some docs
+
+Mon Feb 11 14:53:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xmlcatalog_man.xml: trying to close Red Hat bug #58707
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=58707
+
+Mon Feb 11 09:53:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/encoding.h include/libxml/entities.h
+ include/libxml/globals.h include/libxml/parser.h
+ include/libxml/threads.h include/libxml/tree.h
+ include/libxml/xmlmemory.h: trying to fix the include mess
+
+Mon Feb 11 08:53:33 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlmemory.h: reverted part of the previous
+ attempt to provide #69655, this was breaking the build.
+
+Sun Feb 10 14:13:34 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c Makefile.am build_glob.py configure.in debugXML.c
+ globals.c parser.c threads.c tree.c valid.c xmlmemory.c
+ xpath.c xpointer.c include/libxml/globals.h include/libxml/parser.h
+ include/libxml/parserInternals.h include/libxml/tree.h
+ include/libxml/xmlmemory.h include/libxml/xpathInternals.h:
+ Tentatively fixed #69655 , make compiling with -Wredundant-decls
+ clean.
+ * python/libxml.c: fixed a warning.
+
+Sun Feb 10 12:02:59 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c valid.c xinclude.c: fix #68882, cleanup the XInclude
+ copying of node, merge back IDs in the target document.
+ * result/XInclude/docids.xml test/XInclude/docs/docids.xml
+ test/XInclude/ents/ids.xml: test case
+ * result/VC/ElementValid4: output changed due to a typo fix
+
+Sat Feb 9 23:15:04 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: seems some version of automake didn't
+ generate the dependencies right as Jacob found out. Add
+ an extra dependency rule.
+
+Sat Feb 9 18:59:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c valid.c: Justin Fletcher found some parts
+ of the code needing cleanup
+ * libxml.spec.in python/Makefile.am python/generator.py
+ python/libxml.c python/libxml.py: Fixed the python Makefiles
+ corrected a bug showing up on ia64, changed the name of the
+ python internal module too
+
+Fri Feb 8 15:19:28 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: applied patch from Andris Pavenis for binary
+ name suffixes
+
+Fri Feb 8 14:43:17 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c win32/win32config.h: fixing #68748
+
+Fri Feb 8 14:37:05 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixing #70166
+
+Fri Feb 8 14:31:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixing #70077
+
+Fri Feb 8 14:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Copyright Makefile.am README configure.in libxml.spec.in:
+ Changed to the MIT Licence
+ * doc/FAQ.html doc/catalog.html doc/intro.html doc/xml.html
+ doc/xmlio.html: updated the doc accordingly
+ * include/libxml/xmlwin32version.h configure.in: preparing
+ 2.4.14 release
+ * python/generator.py python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt python/libxml_wrap.h python/types.c:
+ fixed the const xmlChar * wrapper and generator, XPath extension
+ functions now use the context as first argument
+ * python/tests/tstxpath.py python/tests/xpath.py
+ python/tests/xpathext.py: Updated the tests accordingly
+ * tree.c: fixed bug #70067
+
+Thu Feb 7 17:33:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: cleanup
+ * debugXML.c: always use stdout if output is NULL
+ * xmlIO.c: don't close filedescriptors passed to outputBuffers
+ * python/Makefile.am python/generator.py python/libxml2class.txt
+ python/libxml_wrap.h python/types.c: augmented the number of bindings
+ handling FILE * and XPath contexts
+ * python/tests/Makefile.am: avoid a stupid problem due to the
+ use of TEST.
+
+Wed Feb 6 23:37:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: fixed stupid bug #70738 found by alfons hoogervorst
+
+Wed Feb 6 17:04:51 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/TODO python/libxml.c: cleanup the extension function lookup
+ * xmlmemory.c include/libxml/xmlmemory.h: always compile the list
+
+Tue Feb 5 17:33:30 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in python/Makefile.am: do not install outside
+ of prefix
+
+Mon Feb 4 15:05:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/TODO python/libxml.c: started adding SAX interfaces
+ * python/tests/Makefile.am python/tests/pushSAX.py: added a basic
+ SAX test
+
+Mon Feb 4 01:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: hardened the addChild function
+ * python/generator.py python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt python/libxml_wrap.h python/TODO:
+ added accessors needed for xmlNode, a bit more testing and
+ extension of interfaces
+ * python/tests/Makefile.am python/tests/build.py: added a test
+ build from scratch/save/load/check
+
+Sun Feb 3 21:10:39 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: change a small bit in the way valididy
+ error messages get initialized
+ * python/TODO python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt python/libxml_wrap.h python/types.c:
+ added some memory debugging to track leaks at the libxml2 level
+ * python/tests/*.py: changed all tests to check for leaks,
+ there is just one left in XPath extension registrations.
+
+Sun Feb 3 17:50:46 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/TODO python/generator.py python/libxml2-python-api.xml
+ python/libxml2class.txt: more accessor classes for the parser
+ context, allow to switch on and check validity
+ * python/tests/Makefile.am python/tests/error.py
+ python/tests/invalid.xml python/tests/valid.xml
+ python/tests/validate.py: attded more test and and added error.py
+ which I forgot to commit in the last step
+
+Sun Feb 3 16:03:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/types.c: cleanup
+ * python/libxml.c python/libxml.py python/libxml_wrap.h
+ python/generator.py python/libxml2-python-api.xml
+ python/libxml2class.txt: added class for parser context, added
+ first cut for push mode support. Added a framework to generate
+ accessors functions.
+ * python/tests/Makefile.am python/tests/push.py: added a push
+ test
+
+Sun Feb 3 00:17:26 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/TODO python/libxml.py: fixed a small
+ bug a bit of cleanup.
+
+Sat Feb 2 22:47:10 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt: adding error redirections and preformat
+ to a python handler
+ * python/tests/Makefile.am python/tests/*.py: cleanup made all
+ tests self checking
+
+Sat Feb 2 13:18:54 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c python/libxml.py: fixed a stupid bug when renaming
+ a function
+
+Sat Feb 2 11:25:51 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in python/Makefile.am python/TODO python/generator.py
+ python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt: Progressing through the TODOs, class
+ description output, extra XML API, RPM now builds the wrappers
+ for all python installed versions
+
+Sat Feb 2 10:13:52 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in libxml.spec.in python/Makefile.am python/TODO
+ python/generator.py python/libxml2class.txt: added more informations
+ in the libxml2-python package including docs. Slightly changed
+ the class hierarchy
+ * python/tests/*: added basic regression tests infrastructure too
+
+Fri Feb 1 23:11:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in libxml.spec.in example/Makefile.am python/Makefile.am:
+ added libxml2-python as part of the packages installed
+
+Fri Feb 1 18:48:19 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/generator.py python/libxml.c
+ python/libxml.py: more work, now able to extend the
+ XPath interpreter with functions written in python.
+
+Fri Feb 1 10:28:51 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: Jacob sent a patch to allow building from
+ tarfile.
+
+Fri Feb 1 00:40:48 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/libxml.c configure.in Makefile.am:
+ inserted the python wrappers build, I hope this won't be too
+ unportable
+
+Thu Jan 31 21:27:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: minor optimization
+ * python/generator.py python/libxml.c python/libxml.py
+ python/libxml_wrap.h: more work on the python bindings,
+ they now support XPath and there is no evident leak
+
+Thu Jan 31 00:48:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml.py:
+ more work on the python bindings generator.
+
+Wed Jan 30 21:51:26 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml_wrap.h:
+ more work on the python bindings.
+
+Wed Jan 30 17:35:33 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml.py
+ python/libxml_wrap.h: commited early version of a python binding
+ for private use only ATM
+
+Sat Jan 26 22:41:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c tree.c include/libxml/entities.h: applied patch
+ from Anthony Jones to implement copy of DTD subtree too. Had
+ just to keep 2 function private which really ought to become
+ public ones.
+
+Fri Jan 25 15:14:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: added pointers to the web pages in the usage()
+
+Thu Jan 24 17:04:04 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: more fixes from Petr Kozelka for attribute handling
+ in the tree API to align the semantic with DOM.
+
+Thu Jan 24 16:00:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c tree.c entities.c: another set of patches from
+ Anthony Jones for copy operations cleanup and robustness
+
+Wed Jan 23 18:53:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/APIchunk*.html doc/parsedecl.py doc/api.xsl: generated
+ an alphabetic index based on comments content
+ * doc/*: rebuilt the web site with the new references
+
+Wed Jan 23 15:14:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.h: Greg Sjaardema suggested to use an
+ eponential buffer groth policy in xmlParserAddNodeInfo()
+
+Wed Jan 23 13:32:40 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/api.xsl doc/APIconstructors.html doc/APIfiles.html
+ doc/APIfunctions.html doc/APIsymbols.html doc/libxml2-refs.xml
+ doc/parsedecl.py doc/Makefile.am: updated the python extractor
+ to generate cross-references, and added/updated the stylesheets
+ to generate and link API indexes. The generic keyword index
+ is not done yet.
+ * doc/*.html: regenerated all the usual docs too
+
+Tue Jan 22 23:11:26 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: added an xpath function to the shell for T. V. Raman
+
+Tue Jan 22 22:42:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: patch from Anthony Jones to catch NULL nodes in
+ debug routines.
+
+Tue Jan 22 22:38:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: apply an patch from Petr Kozelka for unlink and replace
+ support of attribute nodes
+
+Tue Jan 22 19:12:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/libxml2-api.xml doc/parsedecl.py: Build a new version
+ hopefully near complete and fully documented of the API in XML
+ * HTMLtree.c SAX.c debugXML.c error.c globals.c parser.c tree.c
+ xmlIO.c xmlmemory.c include/libxml/catalog.h include/libxml/hash.h
+ include/libxml/list.h include/libxml/parser.h include/libxml/tree.h
+ include/libxml/parserInternals.h include/libxml/valid.hi
+ include/libxml/xmlIO.h include/libxml/xmlerror.hi
+ include/libxml/xmlmemory.h include/libxml/xmlversion.h.ini
+ include/libxml/xpath.h include/libxml/xpathInternals.h:
+ Cleaned up the doc comments a lot in the process, the interface
+ coverage is now 100%
+
+Tue Jan 22 00:12:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/libxml2-api.xml doc/parsedecl.py: improved the script to
+ extracts comments from the gtk-doc DocBook output (a bit
+ convoluted but seems to work).
+
+Mon Jan 21 18:29:19 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am doc/Makefile.am doc/libxml2-api.xml doc/parsedecl.py:
+ added an XML description of the API, moved the script generating
+ it here. Added a "make api" target
+
+Mon Jan 21 14:34:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Adam Lounds pointed out a bug in xmlSearchNs()
+
+Mon Jan 21 09:55:21 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c include/libxml/xpathInternals.h: the change made to
+ xmlXPathFuncLookupFunc was incompatible roll it back
+
+Sun Jan 20 23:03:41 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: cleanup patch from Anthony Jones
+ * doc/Makefile.am: fix the headers to avoid in make scan
+ * parserInternals.c xpath.c include/libxml/*.h: cleanup of the
+ includes, * vs Ptr and general cleanup
+ * parsedecl.py: first version of a script to extract the
+ module interfaces, the goal will be to provide .decl or XML
+ specification of the interfaces to build wrappers.
+
+Sun Jan 20 13:38:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xmlcatalog_man.xml xmlcatalog.c: Fixed bug #68830, xmlcatalog
+ now provides return codes in case of errors
+
+Sat Jan 19 16:36:21 CET 2002 Bjorn Reese <breese@users.sourceforge.net>
+
+ * trio.h trio.c triodef.h triop.h trionan.h trionan.c Makefile.am:
+ Upgraded to trio baseline 1.6
+ * strio.h strio.c: Replaced by triostr.h and triostr.c
+
+Fri Jan 18 17:22:50 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c xmlIO.c xmlcatalog.c: removed the last occurences
+ of strdup usage in the code
+
+Fri Jan 18 12:47:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c error.c: Keith Isdale complained rightly that
+ xmlInitParser() did not preserve value set by xmlSetGenericErrorFunc
+
+Thu Jan 17 09:44:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed the funxtion to set the xml: attributes
+ * debugXML.c: added "setbase" to test it.
+
+Wed Jan 16 16:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: update xmlNodeSetContent() and xmlNodeSetContentLen()
+ to allow updating an attribute content
+
+Tue Jan 15 18:09:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.h: try to avoid problems when compiling on Windows
+
+Mon Jan 14 18:56:25 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * hash.c: patch from Anthony Jones for hash.c allocation size
+ * Makefile.am: trying to work around Yet Another Libtool Madness
+ and build the 2.4.13 release finally ...
+
+Mon Jan 14 18:27:19 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: updated to 2.4.13
+ * doc/* : update of the documentation
+
+Mon Jan 14 17:53:41 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c tree.c: some cleanup after an unsuccessful attempt
+ at fixing #61290 :-(
+
+Sun Jan 13 21:30:54 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed xmlSaveFormatFileEnc() when encoding == NULL
+ Fixes bug #67229
+
+Sun Jan 13 17:14:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: trying to avoid troubles when a subtree is copied
+ and coalesced in part with the target tree. Should fix
+ bug #67407
+
+Sun Jan 13 16:37:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixed validation of attributes content of type
+ NAME NAMES NMTOKEN and NMTOKENS to accept internationalized
+ values, very old bug. Fixes #67671
+
+Sun Jan 13 15:07:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c include/libxml/parserInternals.h tree.c: integrated
+ a couple of fixes and a new API function xmlSetEntityReferenceFunc()
+ from Keith Isdale and dedicated to xsldbg the XSLT debugger.
+
+Sun Jan 13 14:23:21 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * threads.c: applied Serguei Narojnyi's patch to add native
+ thread support on the Win32 platform
+ * testThreadsWin32.c Makefile.am: added the test program also
+ from Serguei, Win32 specific
+ * include/win32config.h include/libxml/xmlwin32version.h.in:
+ added patch from Igor for the Windows thread specific defines.
+
+Wed Jan 9 12:50:39 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c: Anthony Jones pointed a bug in xmlCopyEntity()
+
+Tue Jan 8 14:23:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/*.html doc/site.xsl doc/Makefile: renamed XML.html
+ output page into XMLinfo.html. Close bug #66951 and
+ raised by Robert Collins too.
+
+Tue Jan 8 14:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: Paul Keogh pointed out a possibility of segfault
+ on repeted xmlAddEncodingAlias() / xmlCleanupEncodingAlias().
+ Closes bug # 68238
+
+Tue Jan 8 12:48:27 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/*.html: updated the Gdome2 links
+
+Tue Jan 8 11:32:30 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.h: Applied following patches from Robert Collins
+ and make sure IN_LIBXML is defined when compiling it
+ -------
+ * include/libxml/xmlversion.h.in (LIBXML_DLL_IMPORT): Use on Cygwin
+ as well as Visual C.
+ * parser.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
+ * parserInternals.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
+ * strio.c (PLATFORM_UNIX): Define for Cygwin.
+ * triodef.h (TRIO_PLATFORM_UNIX): Define for Cygwin.
+ * xmlIO.c (xmlFileOpen): Use unix behaviour for Cygwin.
+ Use binary mode opens for Cygwin (xmlFileOpenW xmlParserGetDirectory
+ xmlSysIDExists xmlNoNetExists).
+ * xmllint.c: Don't include winsock2.h for Cygwin.
+
+Mon Jan 7 17:52:48 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Jirka Kosek pointer out a bug in xmlParseTextDecl()
+ when the version info is not present.
+
+Mon Jan 7 00:03:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Anthony Jones pointed out a problem in
+ xmlStringGetNodeList() and provided a fix for it
+
+Sun Jan 6 13:45:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: patch from Frank J Franklin to remove a bug in
+ xmlCreatePushParserCtxt() when the initial buffer passed
+ is large.
+
+Sat Jan 5 19:24:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * win32/*: big cleanup of the Windows/MSVC project files
+ from Igor Zlatkovic
+
+Wed Jan 2 14:11:35 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am: should fix #67674 and avoid troubles if
+ xsltproc is not available or fails in the prefix provided
+
+Tue Jan 1 17:48:56 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlmemory.c: one more doc patch from Charlie Bozeman.
+
+Mon Dec 31 17:35:40 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c parser.c valid.c include/libxml/parserInternals.h
+ include/libxml/xmlerror.h include/libxml/xpathInternals.h:
+ Fixed a few other problems raised by Charlie Bozeman.
+ * result/VC/ElementValid[5-7]: fixed the output
+
+Mon Dec 31 17:13:34 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * *.c include/libxml/*.h doc/html/*: applied 42 documentation
+ patches from Charlie Bozeman. Regenerated the HTML docs.
+
+Thu Dec 20 14:59:52 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/debugXML.h win32/dsp/libxml2.def.src: fixes
+ for Windows from Igor
+
+Tue Dec 18 12:13:33 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: applied Justin Fletcher patch for --output or -o
+
+Tue Dec 18 08:52:32 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/libxml2/libxml2.def.src: close #67019
+
+Tue Dec 18 08:08:51 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: applied Justin Fletcher generic timing patch
+ similar to the one already applied to xsltproc.
+
+Mon Dec 17 16:29:08 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/tree.h tree.c: applied documentation patches
+ from Charlie Bozeman
+
+Thu Dec 13 21:24:16 MST 2001 John Fleck <jfleck@inkstain.net>
+
+ *doc/xmllint.xml, xmllint.1 - document --dropdtd
+
+Thu Dec 13 23:19:50 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fix the xmlStrdup() used in the previous patch.
+ * valid.c: added --dropdtd
+ * tree.c: fixed xmlUnlinkNode so it also removes the references
+ from the document if the node is a DTD
+
+Thu Dec 13 15:54:35 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c valid.c: cleanup some static declarations
+
+Thu Dec 13 15:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: removed another strdup()
+ * doc/FAQ: removed the HP/UX entry
+
+Thu Dec 13 09:44:58 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fix bug #66816 when validating.
+ * xmllint.c: don't use sys/time.h if configure did not found it
+
+Mon Dec 10 21:39:55 MST 2001 John Fleck <jfleck@inkstain.net>
+
+ * docs/xmllint.1, xmllint.xml, xmlcatalog.1, xmlcatalog_man.html,
+ xmlcatalog_man.xml
+
+Mon Dec 10 22:06:16 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlmemory.h: Hietaniemi Jarkko pointed out that
+ xmlInitMemory() was declared twice
+
+Sun Dec 9 14:59:23 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c: do not reference strdup() !
+ * configure.in libxml-2.0.pc.in: trying to fix the libs
+ of the various config extraction modules
+
+Fri Dec 7 15:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in : preparing 2.4.12
+ * doc/* : updated and rebuilt the docs
+
+Fri Dec 7 12:32:00 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: closed bug #66159
+ * testURI.c: added --escape option
+ * configure.in: some cleanup for xml2-config --cflags
+
+Thu Dec 6 15:31:30 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c testThreads.c: removed some misplaced includes
+ of xmlversion.h
+
+Thu Dec 6 09:06:08 EST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * threads.c: patch from Gary Pennington fixing a possible
+ problem at initialization time.
+
+Wed Dec 5 13:01:37 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in libxml.h parser.c testThreads.c macos/: integrated
+ Eric Lavigne contribution to build libxml2 on MacOS using
+ CodeWarrior.
+
+Tue Dec 4 14:13:44 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: applied Geert Kloosterman's patch to fix
+ --repeat --timing output
+
+Thu Nov 29 17:10:22 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Robin Berjon <robin@knowscape.com> found a case
+ where non-wellformed XML declaractions were not detected.
+
+Wed Nov 28 15:41:40 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpointer.c: fixed a compilation bug pointed by Danny Jamshy
+
+Wed Nov 28 10:09:51 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: as robert pointed again, xmlInputCallbackInitialized
+ gets reset by xmlCleanupInputCallbacks() and this makes the
+ function useless. Same for output.
+
+Tue Nov 27 17:22:36 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: robert pointed out a loop error in callback cleanups
+
+Mon Nov 26 16:56:00 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c debugXML.c include/libxml/tree.h include/libxml/debugXML.h:
+ moved xmlGetLineNo() and xmlGetNodePath() into the main tree module,
+ they are not really tied to debugging
+
+Mon Nov 26 11:31:36 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.11
+ * xmllint.c: better --catalogs description
+
+Sun Nov 25 11:34:24 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed a couple of problems in xmlSetProp()
+
+Thu Nov 22 19:19:10 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c tree.c xmlIO.c xmlmemory.c: some cleanups when chasing
+ unappropriate stdout output.
+
+Thu Nov 22 13:58:14 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/tree.h: Fixed a couple of macro errors pointed out
+ by Denis Beurive, closes #65111
+
+Tue Nov 20 10:34:01 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: in case of content model validity error, don't
+ print it if validity warnings were not requested.
+
+Tue Nov 20 09:30:02 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c: applied a couple of patches from Brian D Ripley.
+ * parserInternals.c: removed the last exit() call. Print an
+ unmaskable error on stderr instead (library mismatch detection)
+
+Sat Nov 17 17:16:51 MST 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.xml, doc/xmllint.1 - update xmllint man page with
+ shell instructions from Heiko Rupp
+
+Thu Nov 15 14:53:42 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: use the URL notation file:// for default catalog paths
+
+Wed Nov 14 16:03:02 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/tree.h: better comments for _private fields
+ * tree.c: removed a problem when copying an entity reference.
+
+Tue Nov 13 16:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * vms/*: updated instructions and diffs from John A Fotheringham
+
+Mon Nov 12 23:43:22 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlerror.h: avoid an include problem if
+ #include <libxml/xmlerror.h> happens first in code
+ seems to be the case in KDE libs
+
+Mon Nov 12 22:32:41 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/* include/libxml/xmlwin32version.h.in: update
+ from Igor for Windows
+
+Mon Nov 12 10:19:41 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: Gary Pennington pointed out a missing prefix
+
+Sat Nov 10 12:55:42 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.10
+ * doc/*: upgraded and rebuilt the docs
+
+Sat Nov 10 12:33:38 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fix comment in scripts element parsing.
+ * result/HTML/doc3*: updated the results.
+
+Sat Nov 10 11:18:18 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: another URI bug fix #63336, using Joel Young patch.
+
+Sat Nov 10 11:07:26 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c include/libxml/debugXML.h: add xmlGetNodePath()
+ a cleaned up version of the Pwd shell string generation.
+
+Fri Nov 9 00:34:13 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c include/libxml/tree.h: trying to fix namespaces +
+ validation problems for good, closing #63619 in the process
+ * result/valid/dia.xml test/valid/dia.xml: the Dia test was
+ wrong in this respect, fixed it.
+
+Thu Nov 8 18:31:40 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: Morus Walter patch to allow --format and --encode
+
+Thu Nov 8 14:52:18 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: Stefan Kost provided an help command for the shell
+
+Wed Nov 7 14:32:55 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: Heiko Rupp pointed that the shell would crash
+ on empty nodesets returns.
+
+Wed Nov 7 13:52:36 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: Weiqi Gao pointed out that xmlcatalog
+ migh need the history libraries
+
+Tue Nov 6 23:49:09 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c test/HTML/lt.html result/HTML/lt.html*:
+ handle the case of < in quoted attributes, Bastian Kleineidam
+
+Tue Nov 6 16:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: releasing 2.4.9
+ fixing catalog breakages
+ * Makefile.am catalog.c result/catalogs/catal
+ result/catalogs/mycatalog.* test/catalogs/catal*:
+ fixed more problems in catalog support, added more regression tests
+ for both XML and SGML catalog handling
+
+Mon Nov 5 20:26:41 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: applied an improvement to xmlGetLineNo() from
+ Keith Isdale
+
+Mon Nov 5 15:20:16 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: dohhhh XML catalog add and remove ops were broken too.
+ Side effect of the progressive catalog loading
+
+Mon Nov 5 12:40:54 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: confexecdir and confexec_DATA were defined twice
+ pointed out by Karl Eichwalder
+
+Sun Nov 4 23:18:34 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlcatalog.c: avoid unlink() and use remove() instead.
+
+Sun Nov 4 23:12:38 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in: cleanup
+ * include/libxml/xmlwin32version.h: updated with 2.4.8
+
+Sun Nov 4 21:17:24 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c global.data globals.c testThreads.c: fix bug #63752
+ of compiling libxml with a non standard set of options
+
+Sun Nov 4 13:11:41 MST 2001 John Fleck <jfleck@inkstain.net
+
+ * doc/xmllint.xml, xmllint.1 - updating xmllint man page to
+ document --sgml option, fixing gnome bugzilla #63382
+
+Sun Nov 4 20:56:53 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h catalog.c: Fixed SGML catalogs
+ breakage of 2.4.7, added a couple of really needed APIs
+ like xmlCatalogIsEmpty() and xmlNewCatalog()
+ * xmlcatalog.c: updated --sgml --noout to be a suitable replacement
+ for install-catalog
+ * configure.in: preparing 2.4.8
+
+Thu Nov 1 15:29:31 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c tree.c include/libxml/HTMLtree.h
+ include/libxml/tree.h include/libxml/xmlIO.h: more include
+ cleanups, export cleanly one html output + format function.
+
+Thu Nov 1 14:12:12 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: removed initGenericErrorDefaultFunc call from
+ xmlInitParser() since it could destroy previous calls to
+ xsltSetGenericErrorFunc() effects
+
+Thu Nov 1 09:37:13 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c include/libxml/debugXML.h: bool can be a reserved
+ keyword.
+
+Wed Oct 31 18:50:08 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: cleanup
+ * threads.c: cleanup too
+ * xmlIO.c include/libxml/xmlIO.h: added xmlNoNetExternalEntityLoader()
+ from xsltproc
+ * include/libxml/tree.h include/libxml/parser.h: trying to break a
+ dependency loop.
+
+Tue Oct 30 18:38:53 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: Justin Fletcher pointed out that xmlParseXMLCatalog
+ was not used anymore !
+
+Tue Oct 30 13:33:13 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.7
+ * Makefile.am doc/Makefile.am: switched to the latest xmllint
+ manual page from John
+ * doc/*: updated the doc and rebuilt the generated pages
+
+Tue Oct 30 11:31:19 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: closing bug #62711, the library should never
+ close stdin or stdout.
+
+Tue Oct 30 10:46:12 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: second pass at fixing #63336, using Joel Young
+ final patch. looks okay.
+
+Tue Oct 30 00:56:05 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c include/libxml/uri.h: trying to clear #63336
+ allowing the escaping routine to parse unconformant
+ URI-References.
+
+Mon Oct 29 19:09:46 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * vms/readme.vms vms/build_libxml.com nanoftp.c
+ include/libxml/xmlversion.h.in: a few VMS updates from
+ John A Fotheringham
+ * include/libxml/xmlIO.h xmlIO.c: added xmlCleanupInputCallbacks()
+ and xmlCleanupOutputCallbacks() for the Perl binding people.
+
+Mon Oct 29 12:44:17 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c globals.c DOCBparser.c HTMLparser.c error.c:
+ apply fixes to close #63271 and avoid segfaults when
+ the error routine gets callbed before xmlInitParser()
+ get called.
+ * nanoftp.c error.c: Applied patches from Justin Fletcher
+ correcting some xmlGenericError misuses.
+
+Sat Oct 27 14:04:45 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ *doc/xmllint.xml, doc/xmllint.1
+ New and improved man page for xmllint - .xml is the original, .1
+ is the generated man page
+
+Wed Oct 24 14:34:25 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * doc/site.xsl doc/*.html doc/Makefile.am: now autogenerate
+ the web site from the main HTML document.
+
+Tue Oct 23 14:32:04 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed an erroneous validation bug when PE refs
+ occurs in external parsed entities referenced from the
+ internals subset
+ * test/valid/index.xml test/valid/dtds/nitf-2-5.dtd
+ test/valid/dtds/NewsMLv1.0.dtd result/valid/index.xml*:
+ added the associated testcase, it's a nice one.
+ * HTMLparser.c: generate the DTD node as HTML still ...
+ * HTMLtree.c: fixed errors in Set/GetMetaEncoding
+
+Mon Oct 22 14:20:17 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixed a bug in htmlNewDoc()
+
+Mon Oct 22 11:32:36 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * test/threads/*: added entities testing to the Thread test
+ * testThreads.c: make the test reasonable
+ * DOCBparser.c: fix the DTD public and system ID
+ * xmllint.c: added --sgml for SGML DocBook importing
+ * Makefile.am: added Docbtests target
+
+Fri Oct 19 11:47:13 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c: use only "anonymous@" string for anonymous passwds
+ * testThreads.c: removed bogus include
+
+Thu Oct 18 16:56:23 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c valid.c result/valid/rss.xml result/valid/rss.xml.err:
+ fixed a very serious (looping) validation bug
+
+Wed Oct 17 11:56:25 EDT 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/globals.h include/libxml/threads.h threads.c
+ testThreads.c: far more testing, cleaning up bugs
+ * *.c : make sure globals.h is always included.
+
+Wed Oct 17 17:41:41 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: try to get rid of parser loops for good.
+
+Wed Oct 17 13:29:02 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: fixed some bugs in CFLAGS passing.
+ * test/threads Makefile.am testThreads.c: added a specific
+ threaded test case (really nasty, guaranteed).
+
+Tue Oct 16 23:01:49 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: serious cleanup on the management of the
+ XML catalog tree, more tests done, especially with
+ the catalog PI.
+
+Tue Oct 16 08:43:43 EDT 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: avoid a problem in catalog cleanup on SMP if
+ catalogs were not initialized.
+
+Tue Oct 16 14:33:19 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c xpath.c: trying to cleanup the not thread safe
+ parts of the library.
+
+Mon Oct 15 14:30:11 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/globals.h configure.in global.data: make
+ the allocation be per-thread a configure option
+ * encoding.c include/libxml/parser.h: fixed compilation
+ errors
+
+Mon Oct 15 12:45:03 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/parser.h: Norm reported that a few lines
+ added were breaking libxslt compile, removed them for now
+
+Sun Oct 14 05:55:01 EDT 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c parserInternals.c threads.c: debugged and fixed
+ initialization problems which were giving troubles on SMP
+ boxes.
+
+Sat Oct 13 16:17:13 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/Makefile.am: missing globals.h
+
+Sat Oct 13 14:15:00 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c: added a couple of standard includes.
+
+Sat Oct 13 11:08:20 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/SAX.h include/libxml/globals.h include/libxml/parser.h
+ include/libxml/parserInternals.h include/libxml/tree.h
+ include/libxml/xmlerror.h HTMLparser.c SAX.c error.c globals.c
+ nanoftp.c nanohttp.c parser.c parserInternals.c testDocbook.c
+ testHTML.c testSAX.c tree.c uri.c xlink.c xmlmemory.c:
+ Applied the last patches from Gary, cleanup, activated threading
+ all user accessible global variables are now handled in globals.[ch]
+ Still a bit rought but make tests passes with either
+ --with-threads defined at configure time or not.
+ * Makefile.am example/Makefile.am: added globals.[ch] and threads
+ linking options
+
+Fri Oct 12 19:25:55 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am include/libxml/Makefile.am
+ include/libxml/globals.h globals.c include/libxml/threads.h
+ threads.c build_glob.py global.data xmlcatalog.c acconfig.h
+ configure.in: started integrating the core of the thread support
+ not activated yet but half integrated. The code should still
+ compile and work anyway.
+
+Fri Oct 12 00:53:03 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c catalog.c debugXML.c entities.c nanoftp.c
+ parser.c valid.c xmlmemory.c xpath.c xpointer.c: started
+ integrating the non-controversial parts of Gary Pennington
+ multithread patches
+ * catalog.c: corrected a small bug introduced
+
+Thu Oct 11 20:58:15 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c include/libxml/catalog.h: very serious cleanup,
+ isolating unportable code and as much as possible the accesses
+ to the global shared catalog. May need more testing !
+
+Thu Oct 11 11:10:31 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/debugXML.h debugXML.c tree.c: integrating
+ Keith Isdale patches for the XSLT debugger interfaces. Some
+ cleanup
+
+Thu Oct 11 08:44:01 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/Makefile.mingw: update from Tobias Peters for 2.4.5
+ * DOCBparser.c: generate line nubers in elements
+
+Wed Oct 10 11:35:45 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.6 release
+ * doc/xml.html doc/html/*: updated and rebuilt the docs
+ * include/libxml/*.h *.c: fixed a number of teh/the widht/width typos
+
+Mon Oct 8 20:38:27 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlcatalog_man.xml, xmlcatalog.1, xmlcatalog_man.html
+ adding documentation for DV's supercatalog support
+
+Mon Oct 8 17:00:16 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h catalog.c xmlcatalog.c: adding SGML
+ super catalog support adding one API and one flag --sgml to
+ xmlcatalog
+
+Sun Oct 7 16:43:57 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlcatalog_man.xml, xmlcatalog.1
+ One more crack at
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392
+
+
+Sun Oct 7 18:47:02 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * xpath.c: implemented xmlXPathObjectCopy for external objects
+ * include/libxml/xpathInternals.h: added xmlXPathStackIsExternal
+
+Sat Oct 6 16:25:52 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ *doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
+ finishing up fix to
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392, making
+ the xmlcatalog man page display more elegantly
+
+Sat Oct 6 15:27:12 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: closing bug #61832
+ * HTMLparser.c: removed a warning
+
+Sat Oct 6 15:07:14 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixing #61673 part I, do not loose doc information
+ when copying result value trees.
+
+Sat Oct 6 11:58:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: trying to harden the XPath interpreter
+
+Fri Oct 5 20:37:51 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlcatalog.1 updated using a new stylesheet to address, in
+ part, https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392
+
+Fri Oct 5 23:35:00 HKT 2001 William Brack <wbrack@mmm.com.hk>
+
+ * HTMLparser: repaired another loop problem
+
+Fri Oct 5 11:16:21 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: applied fix from Mathias Hasselmann about a bug in URI
+ parsing.
+ * xpath.c: fix bug #61291 the default XML namespace node is
+ missing from the namespace axis.
+ * tree.c: refuse to create namespaces nodes with prefix "xml"
+
+Thu Oct 4 16:47:44 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: ouch a non-defined namespace could lead to a crash,
+ fixed #61215
+
+Thu Oct 4 16:24:26 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: closed bug #61054
+
+Wed Oct 3 15:19:04 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/Makefile.am: closing #60708
+
+Tue Oct 2 15:52:05 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src include/libxml/parser.h parser.c:
+ adding xmlSAXParseFileWithData following Marco Stipek suggestion
+
+Tue Oct 2 11:27:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: close bug #61550 when xml: wasn't considered a namespace
+
+Tue Oct 2 11:18:32 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src: Igor Zlatkovic patches
+ * DOCBparser.c HTMLparser.c parser.c: fixed typos
+
+Mon Oct 1 09:34:51 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: Justin Fletcher provided cleaup code in case
+ HAVE_STAT is not defined
+ * include/win32config.h: Igor Zlatkovic suggested to have
+ HAVE_STAT defined there
+
+Sat Sep 29 00:15:00 HKT 2001 William Brack <wbrack@mmm.com.hk>
+
+ * catalog.c - fixed typing error reported by M. Barros
+
+Sun Sep 23 21:02:39 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * xmllint.c - fixing typo
+
+Sat Sep 22 10:00:00 HKT 2001 William Brack <wbrack@mmm.com.hk>
+
+ * HTMLparser.c: small enhancement to prevent loop on
+ unrecognizable data
+
+Fri Sep 21 11:45:53 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: applying patch from bug #60757 this
+ should close it
+
+Thu Sep 20 15:54:29 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c xmlcatalog.c: removed a couple of warning
+ * xpath.c: try to solve the linking problem on platforms
+ needing trio to compile
+
+Wed Sep 19 10:01:37 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am libxml.spec.in: backing up non-documented changes
+ commited without review or aproval by Jens Finke <jens@gnome.org>
+ * HACKING: made 100% clear that no commit should be done directly
+
+Mon Sep 17 18:52:37 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: Joe Orton provided a patch fixing a problem
+ when iconv is specified to be in a non-standard directory
+ but wasn't exported in xml2-config --cflags
+
+Fri Sep 14 19:32:43 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: let's ship 2.4.5 before getting too much
+ troubles with 2.4.4 errors.
+
+Fri Sep 14 12:26:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c entities.c: do not output hexadecimal charrefs
+ when serializing HTML since some version of Netscape can't
+ grok it, generate decimal ones.
+ * result/HTML/doc3.htm: output changed due to previous test
+ * parserInternals.c: repair xmlKeepBlanksDefault() broken in 2.4.4
+
+Thu Sep 13 13:34:27 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml-2.0.pc.in: dohh generated the wrong include path :-(
+ * doc/Makefile.am libxml.spec.in: re-dohh forgot the new manpage :-(
+
+Wed Sep 12 22:14:55 CEST 2001 Daniel Veillard <daniel@veillard.com>
+ Released 2.4.4
+
+ * config.h.in configure.in libxml.spec.in include/libxml/Makefile.am
+ libxml-2.0.pc.in: moved includes to includedir/libxml2/libxml,
+ updated the configuration scripts systems accordingly
+
+Wed Sep 12 20:49:32 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing for 2.4.4
+ * doc/xml.html doc/html/*: updated and rebuilt the docs
+
+Wed Sep 12 16:58:16 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src: tried to incorporate comments
+ from bug #59220
+
+Tue Sep 11 11:25:36 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c result/noent/wml.xml: fixed bug #59981 related
+ to handling of '&' in attributes when entities are substitued
+
+Mon Sep 10 22:14:42 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.h include/libxml/xmlversion.h.in
+ include/libxml/xmlwin32version.h include/libxml/xmlwin32version.h.in:
+ Tried to close bug #60131
+
+Mon Sep 10 20:46:03 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fixed a bug in the HTML parser introduced Sep 9
+
+Mon Sep 10 20:13:09 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fixing bug #59946 on xmlns=""
+
+Mon Sep 10 16:39:42 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlerror.h SAX.c: fixing bug 59732, simple
+ but allocates a new error code.
+
+Sun Sep 9 10:33:15 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: John Fleck fixed typos in the options output
+ * parser.c SAX.c: fix ignorable white space SAX selection
+
+Sat Sep 8 11:43:53 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c: Steve Underwood found the possibility of an
+ ininite loop in case of error.
+
+Fri Sep 7 11:35:00 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: Need $(ICONV_LIBS) in libxml2_la_LIBADD
+
+Wed Sep 5 17:47:43 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: warn if version is not 1.0 but it's not
+ strictly speaking an error after analyzing the spec
+
+Mon Sep 3 10:07:03 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ *doc/catalog.html - add link to the html version of the
+ man page, other linguistic cleanups
+
+Mon Sep 3 09:10:08 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
+ adding documentation for xmlcatalog. Note: xmlcatalog.1, the man
+ file, has not yet been included in the build.
+
+Sat Sep 1 18:17:47 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: removed a duplicate affectation Justin Fletcher
+
+Fri Aug 31 22:02:10 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Armin Sander pointed a possible text coalescing
+ problem, completed his patch.
+
+Fri Aug 31 18:30:28 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * trionan.c: Fixed const and volatile re-definition problem
+
+Fri Aug 31 16:51:28 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.4 parser.c: doc updates from Heiko Rupp
+ * parserInternals.c: 2 sanity checks from Heiko Rupp
+
+Tue Aug 28 22:38:45 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied patch from Armin Sander to make some pointers
+ const in xmlCopyNode()
+ * include/libxml/tree.h: added fix to the header
+
+Mon Aug 27 16:24:47 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: hum, restrict the integer usage gcc bug workaround
+ to only gcc compilers so that other architecture don't get
+ penalized by this limitation.
+ * include/libxml/xpath.h: small typo fix from Heiko W. Rupp
+
+Sun Aug 26 20:45:04 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixed a Windows compiler warning (Chris Poblete)
+ * xpath.c: fix for mod when dividend is 0 (Chris Poblete)
+
+Sat Aug 25 15:30:17 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h catalog.c xmlcatalog.c: added a
+ --convert option to xmlcatalog to convert SGML ones to
+ the XML syntax.
+ * xmllint.c: small cleanup for $SGML_CATALOG_FILES support.
+
+ 2.4.3 got released at that point
+Thu Aug 23 23:16:32 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c xmlIO.c: started some serious testing and fixed
+ a few bug and optmization needs.
+
+Thu Aug 23 17:26:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in include/libxml/xmlwin32version.h:
+ preparing for a 2.4.3 release even if it may not be ready yet
+ * catalog.c parser.c xmlIO.c include/libxml/catalog.h: redirected
+ all file parsing lookup to go through the entity resolver, add
+ to add an API to bypass it (needed to load catalogs themselves),
+ some cleanup on the catalog code too.
+ * nanoftp.c: small cleanup
+ * doc/catalog.html: small update
+
+Thu Aug 23 12:22:26 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: fixed bugi #59406 in SGML catalog parsing reported by
+ Jun Kuriyama
+
+Thu Aug 23 02:51:29 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * doc/catalog.html: finished the catalog documentation
+
+Thu Aug 23 01:38:42 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * doc/catalog.html doc/xml.html: added documentation about
+ Catalog support, misses an API description
+ * doc/html/*: reextracted the API pages
+
+Wed Aug 22 18:27:47 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h catalog.c xmlIO.c HTMLparser.c:
+ Added the part about section 7.2 on URI resolution,
+ fixed a side effect in the HTML parser, look complete
+ and ready to rock except the URI/SystemID part!
+
+Wed Aug 22 16:27:03 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h include/libxml/parser.h
+ include/libxml/xmlerror.h catalog.c parser.c parserInternals.c
+ xmlIO.c: added support and APIs needed for the catalog PI
+ * include/libxml/xmlIO.h: cleanup
+
+Wed Aug 22 02:03:31 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c parser.c xmlIO.c xmlcatalog.c xmllint.c
+ include/libxml/catalog.h: starts to look okay, really
+ plugged the new framework, cleaned a lot of stuff,
+ added some APIs, except the PI's support missing this
+ should be mostly complete
+ * result/catalogs/* test/catalogs/*: added new test, enriched
+ the existing one with URN ID tests
+
+Tue Aug 21 14:56:18 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: fixed nextCatalog
+ * result/catalogs/docbook test/catalogs/*: started adding
+ a small regression test
+
+Tue Aug 21 12:52:38 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am catalog.c xmlcatalog.c include/libxml/catalog.h:
+ more work on the XML catalog support.
+ * parser.c include/libxml/parser.h: small cleanup seems using
+ list as a public parameter name can give portability troubles
+ * trionan.c trionan.h xpath.c include/libxml/trionan.h
+ include/libxml/xpath.h include/libxml/Makefile.am: removed
+ trionan from the libxml API, added xmlXPathIsInf and xmlXPathIsNaN
+ wrappers
+
+Tue Aug 21 11:18:45 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * Makefile.am trio.c triodef.h trionan.c xpath.c
+ include/libxml/Makefile.am include/libxml/trionan.h:
+ Re-worked Not-A-Number and Infinity support.
+ * xmlcatalog.c: added readline include files
+
+Mon Aug 20 02:04:13 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am xmlcatalog.c libxml.spec.in: renaming
+ testCatalog as xmlcatalog, making it an installed app
+ adding a shell, and preparing it to be a /etc/xml/catalog
+ management tool, though not ready yet
+ * catalog.c include/libxml/catalog.h: adding support for
+ XML Catalogs http://www.oasis-open.org/committees/entity/
+ not finished, there is some interesting tradeoffs and a
+ few open questions left.
+
+Sun Aug 19 14:59:56 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: fixed a line formatting problem
+
+Fri Aug 17 11:35:31 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: removed a couple of unused variable (Albert Chin)
+
+Fri Aug 17 01:25:21 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c HTMLtree.c include/libxml/HTMLparser.h:
+ trying to fix some troubles w.r.t. function returning
+ const xxxPtr.
+
+Thu Aug 16 21:33:20 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src: another set of symbols conditionally
+ defined
+
+Thu Aug 16 21:31:14 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpointer.c: removed unused var
+
+Thu Aug 16 18:26:40 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * testXPath.c: another small cleanup closing bug #59110
+
+Thu Aug 16 17:59:18 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src: small cleanup closing bug
+ #59108
+
+Wed Aug 15 22:46:01 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * example/gjobread.c: add xmlCleanupParser() before leaving
+
+Wed Aug 15 14:57:08 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * config.h.in configure.in include/libxml/xmlwin32version.h:
+ released 2.4.2
+
+Wed Aug 15 13:56:22 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/valid.h debugXML.c valid.c: deprecate
+ the non-boundchecking Sprintf functions, add Snprintf
+ this should close bug #57984
+
+Wed Aug 15 10:46:07 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: xmlOutputBufferCreateFilename() didn't unescaped
+ URIs before doing the lookups (pointed by Mark Vakoc)
+
+Tue Aug 14 18:37:23 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: serious changes on Result Value Trees and NodeSets
+ w.r.t. deallocation and collect operations. Probably not
+ 100% clean (merge of allocated trees smells like a problem).
+ Seems sufficient to close #58943
+
+Tue Aug 14 16:12:00 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: adding a --format option
+
+Tue Aug 14 14:16:24 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: count() was broken on Result Value Tree
+ * xmlIO.c: fixed file:/// accesses on _WIN32
+
+Mon Aug 13 13:22:53 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.m4: s/LIBXML_VERSION_NUMBER/LIBXML_VERSION/ seems the
+ macro was renamed, this should close bug #58683
+
+Mon Aug 13 12:33:40 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: small fix fixing bug #58539 reported by coolo, in
+ entity substitution mode text at the end of the entity might
+ be added due to text coalescing.
+ * nanoftp.c parser.c: small cleanup
+
+Wed Aug 8 22:57:05 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HACKING: added John Fleck right to commit in the doc subdir
+
+Tue Aug 7 03:05:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c testXPath.c valid.c xmllint.c include/libxml/valid.h:
+ allow to inherit attributes from the DTD directly in the
+ tree, this is needed for XPath and can be a useful feature.
+ Inherited namespaces are always provided at the tree level now
+ * test/defattr* result/defattr* result/noent/defattr*: added a couple
+ of tests for this feature (XSLT being the prime user).
+
+Fri Aug 3 14:02:20 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c Makefile.am nanohttp.c parser.c testHTML.c
+ testSAX.c xmlIO.c xmllint.c include/win32config.h
+ include/libxml/xmlversion.h.in include/libxml/xmlwin32version.h
+ include/libxml/xmlwin32version.h.in win32/README.MSDev
+ win32/dsp/*: applied Win32 Facelift No.2 patches from
+ Igor Zlatkovic for Windows/MSC
+
+Wed Aug 1 23:21:06 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: unparsedEntityDecl() the URI computation of the
+ entity wasn't done breaking XSLT unparsed-entity-uri()
+
+Wed Aug 1 17:44:57 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixed a bug when walking the descendants and
+ the current node has no children
+ * debugXML.c: show up when a text node is supposed to not be escaped
+
+Wed Aug 1 01:33:35 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * xpath.c: fixed a bug in xmlXPathNodeTrailingSorted (for now it
+ worked like the set:leading() function)
+ * include/libxml/xpathInternals.h: added xmlXPathNodeSetContains
+
+Tue Jul 31 18:24:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * nanohttp.c: protected an use of EAGAIN, Brian Stafford
+
+Tue Jul 31 17:48:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/xmlIO.h: apply change to close #58141
+ * win32/libxml2/*: update of the MSC projects from Igor Zlatkovic
+
+Tue Jul 31 17:09:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: when the internal subset uses a PE, then the
+ included entity can use conditional sections.
+
+Mon Jul 30 12:58:39 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c include/libxml/xpath.h: fixed a serious memory problen
+ when walking the namespace axis showing up in
+ libxst/tests/general/bug-12
+ * xmlmemory.c: added the possibility to trace a given block
+ defined by its address
+
+Sun Jul 29 07:18:53 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: don't override existing encoding specified before
+ starting xmlParseDocument()
+
+Sat Jul 28 13:33:10 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/xmlwin32version.h: reinserted, needed for
+ Windows users of CVS
+
+2001-07-27 Darin Adler <darin@bentspoon.com>
+
+ * encoding.c: (xmlIconvWrapper): Add cast to fix warning.
+ * testCatalog.c: Add include of <libxml/parser.h>.
+
+2001-07-27 Darin Adler <darin@bentspoon.com>
+
+ * include/libxml/.cvsignore:
+ * include/libxml/xmlwin32version.h:
+ Remove this file from CVS because it's generated.
+
+Fri Jul 27 10:03:56 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c include/libxml/parser.h: applied const patches from
+ Tom Moog #58002
+
+Thu Jul 26 18:55:52 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * xpath.c include/libxml/xpath{,Internals}.h: added a function
+ lookup framework
+
+Fri Jul 27 01:50:20 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlCopyNode() for documents
+
+Thu Jul 26 12:40:35 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed bugs #58073 reported by Greg Shtilman
+
+Thu Jul 26 11:38:37 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixes bug #57652 reported by Morus Walter
+
+Thu Jul 26 10:24:34 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * nanohttp.c: John Kroll provided a small fix to xmlNanoHTTPSave
+
+Thu Jul 26 07:16:04 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c parserInternals.c: fixed the xmlLineNumbersDefault()
+ errors, lesson don't add new functions at 1am before a release
+ * xpath.c: integrated fix from Bjorn to avoid divide by zero
+ from XPath initialization when possible.
+
+Tue Jul 24 15:39:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * result/scripts/base*: removing history/readline changed
+ this slightly
+ * include/libxml/parser.h SAX.c parser.c parserInternals.c
+ xmllint.c: make element content line number generation
+ optionnal to avoid breaking old apps added interface to switch
+
+Tue Jul 24 15:06:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: get rid of the readline and libhistory
+ dependencies by default, release 2.4.1 with IA64 fix
+ * nanohttp.c tree.c xmlIO.c include/libxml/nanohttp.h
+ include/libxml/tree.h include/libxml/xmlIO.h: incorporated
+ John Kroll fixes to allow saving to HTTP via PUT (or
+ POST of needed).
+ * doc/html/*.html: regenerated the docs
+
+Sun Jul 22 05:56:16 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * hash.c include/libxml/hash.h: added xmlHashScannerFull,
+ xmlHashScanFull and xmlHashScannFull3 to get passed the
+ three keys as arguments to the callback function
+
+Thu Jul 19 15:29:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in Makefile.am: removed libxml softlink for good
+ * include/libxml/*.h *.c doc/Makefile.am: cleanup to get
+ 100% coverage by gtk-doc
+
+Tue Jul 17 17:36:46 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlmemory.c include/libxml/xmlmemory.h: debugging on IA64,
+ fixed serious troubles due to size_t vs. int mismatch
+
+Tue Jul 17 16:04:36 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c xmlIO.c: cleaned up some warning on the Alpha
+
+Mon Jul 16 06:32:44 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * include/libxml/xpath{,Internals}.h xpath.c: added a more
+ convenient extension API for value and context managing
+ Now handles external objects through xmlXPathPopExternal,
+ xmlXPathWrapExternal and xmlXPathReturnExternal.
+ Added functions for sets operations (intersection, etc.)
+
+Mon Jul 16 20:05:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/parserInternals.h include/libxml/HTMLparser.h
+ xmlIO.c tree.c parserInternals.c entities.c encoding.c
+ HTMLparser.c: cleanup of global variables, marking some
+ const or private.
+
+Mon Jul 16 00:17:15 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * include/libxml/xpath.h: exported xmlXPath{NAN,PINF,NINF}
+ fixed xmlXPathNodeSetItem when passing index=0
+
+Sun Jul 15 17:58:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/xmlwin32version.h.in: added xmlCheckVersion()
+
+Sat Jul 14 19:31:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmllint.c: fixed compilation under Cygwin #57503
+ * TODO: update
+
+2001-07-13 Peter Williams <peterw@ximian.com>
+
+ * config.h.in: add #undef HAVE_DLFCN_H
+
+ * example/Makefile.am (INCLUDES): Compile fix when srcdir !=
+ builddir.
+
+Fri Jul 13 11:09:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * win32/libxml2/libxml2.def.src: added a couple of exported entries
+ raised by #57348 and #57381
+
+Thu Jul 12 21:20:17 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c HTMLparser.c HTMLtree.c SAX.c debugXML.c parser.c
+ tree.c xpointer.c: store the line numbder in element->content,
+ may break some software, need a configuration mechanism
+
+2001-07-10 Darin Adler <darin@bentspoon.com>
+
+ * .cvsignore:
+ * example/.cvsignore:
+ * include/.cvsignore:
+ * include/libxml/.cvsignore:
+ Various things that are generated and should be ignored.
+
+Tue Jul 10 17:47:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in include/libxml/xmlwin32version.h: release of 2.4.0
+ * doc/xml.html doc/html/*: updated the docs
+
+Mon Jul 9 22:06:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: fixed "Internal: MIXED struct bad" when #CDATA elements
+ validation occured on content with element child
+
+Mon Jul 9 17:59:08 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed XML Base computation which was broken
+ * debugXML.c: added a base function to the shell
+ * Makefile.am result/scripts/* test/scripts/*: added scripts
+ based regression tests, and adding 2 XML Base tests
+
+Mon Jul 9 12:31:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: set properties doc and call xmlSetListDoc for properties
+ content when grafting them in a different tree.
+ * aclocal.m4: remove from CVS
+
+Sun Jul 8 23:09:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * win32/libxml2/libxml2.def.src: added some missing entry point
+ for XPath (Mark Vakoc)
+
+Sun Jul 8 20:34:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: fixed an old bug raised by Bernhard Zwisch, the I/O
+ layer should URI-Unescape before trying to open resources.
+
+Sun Jul 8 16:26:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fix the name() bug for elements in the default
+ namespace reported by Charlie Bozeman
+
+Sun Jul 8 15:11:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c parser.c testXPath.c xpath.c: trying to fix #56948, this
+ led to an XPath fix, improvements of SAX initialization, and
+ an added option --nocdata to testXPath
+
+Sat Jul 7 21:09:55 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/libxml-doc.el: Felix Natter provided anew version working
+ with XEmacs too
+
+Sat Jul 7 02:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/xpath.h: small cleanup
+ * doc/xml.html: update
+
+Fri Jul 6 01:40:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am configure.in include/libxml/xmlwin32version.h:
+ released 2.3.14
+
+Fri Jul 6 00:47:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/html/*: rebuilt the docs for the release
+ * doc/xml.html: added 2.3.14 release.
+
+Thu Jul 5 22:01:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: a bug reported by Stephan Kulow empty nodesets
+ were not equal to empty strings
+
+Thu Jul 5 00:52:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c: fixed a URI-Reference computation problem when validating
+ * xmlIO.c: small cleanup
+
+Thu Jul 5 00:04:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: improved the description of a couple of interfaces
+ upon Larry Stamper suggestion
+
+Wed Jul 4 21:42:24 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c entities.c parser.c: changed completely the way entities
+ are handled when running the parser in entity substitution mode.
+ This fixes a bug reported by Stephan Kulow and nearly divides
+ by 3 the amount of memory required by libxslt to load and process
+ DocBook TDG.
+
+Wed Jul 4 18:02:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: fixing a too early root closing problem raised
+ byt Prashanth Naidu
+
+Wed Jul 4 01:42:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed a missing copy in xmlXPathVariableLookupNS()
+ raised by Mark Vakoc.
+
+Tue Jul 3 18:35:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * example/Makefile.am: fixed the include path to add srcdir/include
+ * Makefile.am configure.in: fix from Albert Chin for iconv detection
+ and some cleanup
+
+Tue Jul 3 10:12:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c include/libxml/xpath.h include/libxml/xpathInternals.h:
+ lot of optimization work, results in significant improvements
+ when handling really complex XPath queries. Add a small optimizer
+ for unions, improve [n] and [last()], avoid some costly ops.
+
+Fri Jun 29 23:26:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/parser.h parser.c: xmlStrstr args are both const
+ * xpath.c: small cleanup
+ * xmlGetNsList: reformated, fixed problems if used on Entities
+
+Thu Jun 28 18:19:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: added 1.8.14 and 2.3.13 releases
+
+Thu Jun 28 18:16:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in include/libxml/xmlwin32version.h: released 2.3.13
+ * Makefile.am example/Makefile.am: workaround automake generating
+ erroneous deps
+
+Thu Jun 28 15:08:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/win32config.h: bug #56801 Yon Derek provided a patch
+ to the windows config file.
+
+Thu Jun 28 14:51:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpointer.c include/win32config.h win32/libxml2/libxml2.def.src
+ libxml.h : Yon Derek provided a set of changes to compile from
+ CVS on Windows/MSC
+
+Thu Jun 28 14:11:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed UTF8 BOM support in push mode
+ * test/utf8bom.xml result/utf8bom.xml result/noent/utf8bom.xml:
+ added a specific testcase
+
+Wed Jun 27 18:33:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: added --push regression tests
+ * parserInternals.c: the XML parser segfaulted in --push mode
+
+Wed Jun 27 13:09:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: moved the symlinks detection within a CVS
+ check, this is not portable and will be removed soon.
+ * xpath.c: small cleanup/speedup
+
+Tue Jun 26 18:05:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in doc/xml.html include/libxml/xmlwin32version.h:
+ release of 2.3.12
+ * parser.c: make an error message if unknow entities in all cases
+
+Tue Jun 26 09:46:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * uri.c: fixed 2 uri normalization bugs on '//' reduction
+
+Mon Jun 25 18:06:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/Makefile.am: Laszlo Peter pointed out that
+ includes were installed in the wrong dir
+
+Mon Jun 25 17:07:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/html.xml: warn against sending code to exhibit bugs.
+
+Sun Jun 24 23:31:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: patch to xmlXPathFormatNumber for the optimizer on
+ Tru64 from Thomas Leitner
+
+Sun Jun 24 14:05:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * AUTHORS: added William and Bjorn
+ * include/libxml/*.h *.c README doc/*.html etc.: changed old email to
+ daniel@veillard.com hopefully I won't have to do this again
+ * doc/Makefile.am doc/html/*.html: cleanup makefile, checked that
+ docs can be rebuilt cleanly now
+ * include/libxml/xml*version.h*: removed include/libxml/xmlversion.h
+ from CVs it's generated, added include/libxml/xmlwin32version.h
+ also generated but which should change far less frequently.
+ * catalog.c nanoftp.c: made sure to include libxml.h not
+ libxml/xmlversion.h directly
+ * include/libxml/*.h: include xmlwin32version.h instead of xmlversion.h
+ when compiling on WIN32 and MSC
+
+Sat Jun 23 23:54:12 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/Makefile.am include/libxml/Makefile.am configure.in:
+ fixed make distcheck and rebuilding the rpms
+
+Sat Jun 23 20:50:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: should finish the migration of exported includes
+ into a real include/libxml in CVS, at least for CVS users.
+ * removed the exported headers, added in include/libxml (as well
+ as xmlversion.h.in).
+
+Sat Jun 23 20:37:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: fixed the way to detect symlink
+
+Sat Jun 23 20:30:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: updated, include/libxml is now a real CVS dir
+
+Sat Jun 23 19:36:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/libxml-doc.el: a new version of libxml-doc.el. This new
+ version works with both libxml1 and libxml2 (it autodetects
+ the prefix of the html-files) from Felix Natter.
+ * doc/xml.html: updated doc accordingly
+
+Sat Jun 23 18:30:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed the bug generating a template loop in libxslt
+ when using docbook-xsl-1.4, * should filter out document nodes
+ * HACKING: added William
+ * TODO: updated
+
+Fri Jun 22 18:02:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/FAQ.html: added a warning about gcc-3.0
+ * doc/xml.html: added reference to gdome2 and removed a confusing
+ sentence
+
+Fri Jun 22 17:02:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlversion.h: okay this is a generated file, but Windows
+ users need it and they can't generate it, and I want CVS
+ Windows users ...
+ * win32/libxml2/libxml2_so.dsp: Windows project file for
+ the shared lib version of libxml2
+ * win32/libxml2/libxml2.def.src: bug #56527 set of exported
+ resources needed for libxslt/xsltproc by Yon Derek
+
+Fri Jun 22 16:39:36 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * trio.c: MSVC fix (provided by Igor Zlatkovic)
+
+Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/win32config.h: another small fix for ATTRIBUTE_UNUSED
+
+Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/win32config.h: Yon Derek provided a first fix
+ to be able to compile libxslt/xsltproc on Windows
+
+Fri Jun 22 00:04:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: attempt to work around what seemed a gcc optimizer
+ bug when handling floats on i386 http://veillard.com/gcc.bug
+ * tree.c entities.c encoding.c: doing some cleanups while
+ chasing it
+
+Thu Jun 21 13:13:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: cleanup when --without-debug is specified
+ * xinclude.c xpath.c xpathInternals.h xpointer.c: cleanup
+ w.r.t. --without-debug and other include points
+ * catalog.h testCatalog.c: a bit of cleanup and prepare for XML
+ Catalogs
+ * configure.in entities.h tree.h HTMLparser.c: removed
+ --without-corba, made the _private field mandatory
+
+Wed Jun 20 19:37:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c parserInternals.c encoding.c: Since Notepad on Win2k
+ outputs a BOM in UTF8, an errata has been issued to avoid the
+ problem, that was the most reasonable solution... Add support
+ for a leading UTF8 BOM in entities.
+
+Wed Jun 20 15:38:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: fixed a bug found when post validating an entity ref
+ * xmllint.c: added --loaddtd and sligly changed --postvalid to
+ activate it too
+
+Tue Jun 19 20:03:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c xinclude.c xpointer.c: bug #56402 exposed a number of
+ weakness in the node copy the XPointer and the XInclude
+ implementations. Serious cleanup.
+
+Tue Jun 19 14:50:18 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: Kjartan Maraas provided a small patch to
+ add xml2-config.in to EXTRA_DIST
+
+Tue Jun 19 13:04:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c tree.c parserInternals.c parser.c: Stephan Kulow
+ provided another failing case found in KDE, the way the
+ ctxt->vctxt.nodeTab was allocated and freed changed over
+ time but it wasn't completely cleaned up. This should fix it.
+
+Sun Jun 17 19:56:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: Stephan Kulow also raised the fact that line number
+ could get miscounted making debug harder, fixed the problem
+ in xmlParseCharData()
+
+Sun Jun 17 19:17:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: Stephan Kulow pointed out a problem when validating
+ and using an empty entity, forgot a 'break' in a case.
+
+Sun Jun 17 16:47:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlHasNsProp() accordingly to bug #55683
+ * doc/xml.html: updated with 2.3.11
+
+Sun Jun 17 12:24:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * TODO: updated adding cleanup of generated doc
+ * configure.in: prepared to release 2.3.11
+ * xmllint.c: added --version for bug reporting
+ * doc/html/*.html: rebuilt the doc
+
+Sat Jun 16 23:23:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: first part of the work on selecting namespace to
+ fix bug #56115
+
+Sat Jun 16 00:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am example/Makefile.am: Laszlo PETER provided a fix
+ when using -liconv
+ * TODO: updated
+
+Fri Jun 15 07:08:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.[ch]: more work on the HTML serialization routnes,
+ cleanup, encoding support.
+
+Thu Jun 14 10:31:17 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: Thomas Broyer suggested a better patch for the / arg
+
+Thu Jun 14 01:01:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: bug detected by Ankh when / is used as a function arg
+
+Wed Jun 13 23:08:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.[ch] HTMLtree.c: stored the inline/block property
+ of element and use it to avoid outputting formatting spaces at
+ the wrong place. Implemented the format parameter for HTML save.
+ * result/HTML/doc2.htm result/HTML/doc3.htm result/HTML/fp40.htm
+ result/HTML/script.html result/HTML/test2.html result/HTML/test3.html
+ result/HTML/wired.html: of course this impact the result of a
+ number of HTML tests
+
+Thu Jun 14 09:49:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.[ch]: started augmenting the HTML save API with
+ encoding and formatting parameters
+
+Wed Jun 13 09:44:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.h: cleanup and started evaluating the work needed on
+ revamping the HTML output code
+
+Mon Jun 11 19:29:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c: handling of PIs and <?sgml-declaration in entities.
+
+Tue Jun 12 08:46:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: fixed bug #56049, forgot one check in the
+ validation routine
+
+Tue Jun 12 08:09:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch]: grrr ... namespace is a C++ reserved keyword
+
+Tue Jun 12 06:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * libxml.h: fixed an error in last commit
+ * doc/FAQ.html: added an entry for compilation from CVS
+
+Mon Jun 11 10:07:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlversion.h.in libxml.h: Cygwin patches
+ * tree.c: xmlFreeNodeList patch similar to xmlFreeNode one
+ * tree.h: cleanup
+
+Sat Jun 9 19:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: patched xmlFreeNode() to avoid freeing() a static
+ memory block in a strange case where libxml is linked twice
+ in the binary.
+
+Sat Jun 9 18:39:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: (a? , b? , c? , ... , z?) was storing/restauring
+ state far too often, simple fix used to avoid it.
+
+Sat Jun 9 16:10:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xinclude.c: Raphael Hertzog had a trouble with DTD nodes
+ being processed, applied his patch
+ * tree.c: fixed a bug raised in xmlStaticCopyNodeList()
+
+Sat Jun 9 15:50:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * nanoftp.c nanohttp.c uri.c include/win32config.h: Igor Zlatkovic
+ provided fixes to compile on MSCC again
+ * win32/libxml2/libxml2.def.src win32/libxml2/libxml2*.dsp: he
+ also provided an update for the project files.
+
+Thu Jun 7 21:52:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: applied Steve Tinney patch to xmlNewNsProp to fix
+ bug #55810
+
+Thu Jun 7 21:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlGetNsProp() to close bug #55683
+ Note this requires libxslt to use it's own function instead.
+
+Thu Jun 7 18:06:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: when in a pre element no formatting space should
+ be added.
+ * test/HTML/pre.html result/HTML/pre.html*: added a regression test
+
+Thu Jun 7 17:29:38 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: added tests for signal() and signal.h
+
+Fri Jun 8 10:17:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: robert pointed out xmlXPathNINF was not initialized
+
+Fri Jun 8 10:01:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/libxml-doc.el: Felix Natter provided a new version for
+ libxml2
+
+Fri Jun 8 07:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: when in a pre element no formatting space should
+ be added.
+
+Wed Jun 6 18:07:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: add -mieee to CFLAGS when compiling on Linux/alpha
+
+Thu Jun 7 06:44:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c: implemented the <?sgml-declaration encoding="xxx"?>
+ hack
+ * tree.[ch]: added xmlHasNsProp as suggested in bug report #55653
+ * uri.c: fixed a warning
+
+Tue Jun 5 22:54:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: trying to close bug #55772 escaping in script
+ elements
+ * doc/xml.html: suggest to send mail to the list
+
+Tue Jun 5 19:11:02 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * error.c: attempt to fix the xmlGetVarStr breakage once and for
+ good. Use a macro and based on the solution provided in
+ vsnprintf manual page from GNU.
+
+Tue Jun 5 14:46:10 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * error.c: Workaround for non-preserving variadic list.
+ * trio.c trio.h triop.h strio.c strio.h: Upgraded to trio baseline 1.4
+
+Sat Jun 2 06:12:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: added 2.3.10 release
+
+Fri Jun 1 11:27:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: releasing 2.3.10
+
+Thu May 31 20:42:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: Gary Pennington spotted a few troubles with file:///
+
+Thu May 31 20:18:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * encoding.c: Robert Collins provided a patch to add the
+ "US-ASCII" encoding alias
+
+Wed May 30 21:12:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c encoding.[ch]: William M. Brack provided a set of UTF8
+ string oriented functions and started cleaning the related areas
+ in xpath.c which needed fixing in this respect
+
+Wed May 30 20:30:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: applied patch from Jaroslaw Kolakowski to close bug
+ #55380
+ * tree.c: patch to xmlNodeGetContent() to get CDATA section content
+
+Mon May 28 12:56:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * TODO: updated
+ * nanohttp.[ch] : started adding APIs to get the redirected URL
+ when this occurs (needed for further base computation
+ * tree.h: cleanup
+ * encoding.c: cleanup
+ * SAX.c: minor change around ctxt->loadsubset
+
+Fri May 25 09:36:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am include/Makefile.am: small change to have
+ include/libxml rebuilt if working from CVS.
+ * uri.c: applied another patch from Carl Douglas for URI escaping,
+ this should close bug #51876
+
+Wed May 23 15:40:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xinclude.c: fixed XInclude recursive behaviour bug #54678
+ * result/XInclude/recursive.xml test/XInclude/docs/recursive.xml
+ test/XInclude/ents/inc.txt test/XInclude/ents/sub-inc.ent:
+ added specific regression test
+ * parser.h: preparing for the XSLT mode where DTD inherited
+ attributes are added to the tree.
+
+Wed May 23 13:59:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xinclude.[ch]: Updated the namespace for the Last Call version
+ * result/XInclude/include test/XInclude/include: updated the
+ testsuite accordingly
+
+Wed May 23 12:27:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * uri.[ch]: applied a patch from Carl Douglas for URI escaping,
+ related to bug #51876
+
+Tue May 22 18:46:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed a gross mistake in base computation, xml:base is
+ not completely correct yet (need cascade).
+ * xpath.[ch]: added the few things needed to find a function name
+ and URI from the XPath context when it is called.
+
+Tue May 22 17:00:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * catalog.[ch]: fixes and add xmlLoadCatalogs()
+ * DOCBparser.c: small cleanup
+ * xmllint.c: added a --catalogs option to load catalogs from
+ $SGML_CATALOG_FILES
+ * tree.c: cleanup
+ * configure.in: iconv library fixup, ICONV_LIBS
+
+Mon May 21 16:05:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * catalog.c: handling of CATALOG entries. detection of recursion,
+ and a few bugfixes
+ * xpath.c: fixing bug #54951 QNAME with no prefix should not match
+ against the default namespace
+
+Mon May 21 10:14:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: Joe Orton reported a bug found with IRIx compiler.
+
+Sun May 20 15:15:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed propagation context info when parsing an
+ external entity.
+ * doc/html/*.html: regenerated a couple of docs
+
+Sat May 19 17:11:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: update with 2.3.9 informations
+
+Sat May 19 16:50:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.h debugXML.h parserInternals.h tree.h valid.c
+ xmlversion.h.in xpathInternals.h xpath.h: some cleanup for gtk-doc
+ * doc/html/* : rebuilt the docs
+ * valid.c: small patch which may improve some case when
+ validating.
+
+Sat May 19 15:20:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: Closed bug #54891
+ * result/HTML/cf_128.html* test/HTML/cf_128.html: added the test
+ to the suite
+
+Thu May 17 14:15:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * encoding.h hash.c nanoftp.h parser.h tree.h uri.h xlink.h xpointer.c:
+ applied a documentation patch from LotR and filled in a few missing
+ descriptions
+
+Wed May 16 23:02:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c tree.c parser.c: speed optimizations at the parser level
+ document tree freeing and xpath evaluation
+
+Wed May 16 12:55:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c parser.h parserInternals.h: fixed a couple of
+ interfaces for handling memory buffer input to const char *
+ upon suggestion of JamesH.
+
+Tue May 15 17:22:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: LoTR sent a patch fixing the previous commit
+
+Tue May 15 14:40:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: trying to deal again with the stoopid -R linking
+ flag of Solaris
+
+Tue May 15 12:49:50 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.h: two nodeset access macros from Thomas Broyer
+
+Tue May 15 11:42:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c xpath.h xpathInternals.h: apply an XPath API cleanup
+ patch from Thomas Broyer
+
+Tue May 15 10:52:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c test/VCM/v2[34].xml: Fixed bug #54631 added specific test
+ case
+ * INSTALL: was empty added stuff from the FAQ
+
+Fri May 11 19:37:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch]: fixing bug #54446, by cleaning some bugs in the
+ attributes handling and #54433 by adding xmlUnsetProp()
+ and xmlUnsetNsProp()
+
+Fri May 11 16:07:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: Patch from Jonas Borgström
+ (htmlGetEndPriority): New function, returns
+ the priority of a certain element.
+ (htmlAutoCloseOnClose): Only close inline elements if they
+ all have lower or equal priority.
+ * result/HTML: this of course changed a number of tests results.
+
+Thu May 10 17:30:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c catalog.c: plugged in the default catalog resolution
+ * doc/gnome-xml.sgml: linked in the Docbook parser and catalog
+ documentations
+ * doc/html/libxml-*.html: rebuild added the missing ones to CVS
+
+Thu May 10 16:14:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am xmlversion.h.in configure.in include/Makefile.am:
+ integrating catalogs
+ * catalog.[ch] testCatalog.c: adding a small catalo API
+ (only SGML catalog support).
+ * parser.c: restaured xmlKeepBlanksDefault(0) API
+
+Wed May 9 12:50:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: zb@bisp.com reported an error in xmlNodeGetLang()
+
+Tue May 8 12:31:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: added xmlParseExternalEntityPrivate() to allow
+ propagation of ctxt->_private when parsing external entities
+
+Tue May 8 10:26:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: fixed the bug reported by Bjorn in htmlNodeDump
+
+Tue May 8 09:30:12 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: fixed a small portability problem with AM_CONDITIONAL
+
+Mon May 7 22:44:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: warn when indeterminist content model is detected
+ * result/VC/ElementValid8: this adds a message
+ * Makefile.am: add --novalid for VCM tests
+ * parserInternals.c: added a call to Init memory
+
+Fri May 4 19:51:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: fixed htmlNewDoc SYSTEM and PUBLIC ID inversion
+ when both parameters are NULL.
+
+Fri May 4 17:19:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: applied small patch from Gary Pennington, reindented
+ some part of the code.
+
+Thu May 3 13:10:43 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in doc/xml.html doc/html/*: preparing for 2.3.8
+ release, updated and regenerated the docs
+
+Thu May 3 12:47:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c result/XPath/expr/floats : clarified and cleanup
+ printing of abnormal floats in tests.
+
+Thu May 3 10:25:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: trying to fix the problem reported by Jonas Borgström
+ * results/HTML/ : a few changes in the output of the HTML tests as
+ a result.
+ * configure.in: tying to fix -liconv where needed
+
+Wed May 2 19:10:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: fixed a stupid error
+
+Wed May 2 18:39:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in Makefile.am: make the inclusion of the trio
+ modules in the library conditional
+
+Wed May 2 14:39:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c: patche from László Kovács, fixed entities refs
+ in attributes handling
+
+Wed May 2 12:56:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: Bjorn Reese provided a fix for a problem on buffer
+ flushing
+
+Mon Apr 30 22:29:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fix of an XSLT namespace bug reported on the list
+ general/bug-8-
+
+Mon Apr 30 19:42:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * strio.h trio.c: Dan McNichol suggested a couple of small
+ fixes for AIX 4.3.3 using Visual Age 5.0.2 compiler
+
+Mon Apr 30 13:44:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c parser.c encoding.c: spent a bit more time looking
+ at the parsing speed and DOM handling. Added a few more
+ speedups.
+
+Sun Apr 29 21:53:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: small but effective parsing speed improvement
+
+Sun Apr 29 19:02:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: default on the DocBook parser inclusion (for Gnome)
+ * DOCBparser.h: fixed a header reference
+
+Sat Apr 28 19:00:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in xpath.c: applied Bjorn patches for FPE on the
+ alpha
+
+Sat Apr 28 18:54:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch] xmlIO.h: applied patch from Joe McAlerney to add
+ xmlSaveFormatFileTo()
+
+Sat Apr 28 16:33:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: simple and efficient optimization, XPath functions
+ aways bind to the same code, cache this
+ * TODO: updated (by saying some is obsolete)
+
+Sat Apr 28 14:23:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: more cleanup work on XPath name parsing routines
+
+Fri Apr 27 19:06:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parserInternals.c xpath.[ch]: some UTF8 cleanup on
+ xmlXPathParseName
+ * xpath.c: Igor Zlatkovic suggested a change for NAN and MSC
+ * debugXML.c: avoid compilation problems if compiling without
+ HTML support, Igor Zlatkovic
+ * win32/libxml2/libxml2.def.src: being able to compile without
+ XPath on Windows
+
+Thu Apr 26 22:53:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * libxml.m4: yet another patch from Toshio Kuratomi
+
+Thu Apr 26 21:27:43 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * libxml.m4 libxml2-spec.in: new patches from Toshio Kuratomi
+
+Thu Apr 26 20:53:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch]: added xmlSaveFormatFile interface for saving
+ and indenting a file.
+
+Thu Apr 26 16:35:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed bug #53689 related to processing-instruction()
+
+Thu Apr 26 12:57:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c: patche from László Kovács
+
+Thu Apr 26 11:31:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: applied fixes from Christian Glahn bug report #53391
+
+Thu Apr 26 11:14:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * error.c: Jean François Lecomte provided a complete description
+ and a fix to bug #53537
+
+Thu Apr 26 09:42:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * libxml.m4: added AM_PATH_XML2 provided by Toshio Kuratomi
+
+Wed Apr 25 21:05:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c SAX.c: a bit more work on entities processing.
+ Still Need to cleanup XML output and references in attributes
+
+Wed Apr 25 17:52:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c include/Makefile.am: two patches from László Kovács
+
+Wed Apr 25 14:56:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: trying to fix #53574, not completely complete,
+ I would like xmllint --copy --debug test/ent1 and
+ xmllint --debug test/ent1 to show the same result.
+ * xpath.c: fix a bug when trying to sort namespace nodes
+
+Wed Apr 25 12:28:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: real fix for #53402
+
+Tue Apr 24 17:36:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c HTMLtree.h : closing #53402 i.e. output of
+ PIs when using xsl:output
+ * valid.c: closing #53537 some case generate segfaults if there
+ is validity errors
+
+Tue Apr 24 15:19:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c testDocbook.c DOCBparser.c: more work on the support
+ of external parsed entities, added --noent to testDocbook
+ * valid.c: Garry Pennington found an uninitialized variable
+ access in xmlValidateElementContent()
+
+Tue Apr 24 14:41:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c : HTML parsing still sucks ... trying to deal
+ with madness
+ * result/HTML/ : this modified the result of the regression tests
+ a lot.
+
+Tue Apr 24 14:10:38 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * entities.c: xmlEncodeEntitiesReentrant fixed a few accesses
+ to doc where it wasn't checked against NULL reported by
+ Jens Laas
+
+Tue Apr 24 13:21:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: Jonas Borgström patch, the <td>, and <th> elements
+ now means the end of any open <span>,<font>,<a>,<b>,<i>,<u>.
+
+Mon Apr 23 15:40:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c DOCBparser.h testDocbook.c configure.in Makefile.am
+ xmlversion.h.in: started (re)integrating the DocBook SGML parser.
+ * SAX.[ch]: cleanup and updates for DocBook
+ * debugXML.c parser.h tree.[ch] valid.c xpath.c: small macro or
+ ex SGML identifier changes
+ * valid.c: removed a static unused function.
+
+Mon Apr 23 11:05:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: applied change for Paul Sponagl on script saving
+ * Makefile.am: the warning about entity title.xml are normal.
+
+Sun Apr 22 22:09:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: release of 2.3.7
+ * Makefile.am: fixing make distcheck
+
+Sun Apr 22 21:29:52 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/html/* doc/xml.html: updated and regenerated the docs
+
+Sun Apr 22 21:11:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed the XPointer problem introduced in 2.3.6
+
+Sun Apr 22 14:11:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed #53388 with the provided patch
+
+Sun Apr 22 12:34:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: Bjorn detected an invalid memory access. Fixed
+ vstateVPush()
+
+Sun Apr 22 10:49:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed xmlXPathCompile to detected unproperly ended expr
+
+Sat Apr 21 18:27:51 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * libxml.h: new header used only for the compilation of libxml
+ * HTMLparser.c HTMLtree.c SAX.c debugXML.c encoding.c entities.c
+ error.c hash.c list.c nanoftp.c nanohttp.c parser.c
+ parserInternals.c testHTML.c testSAX.c testURI.c testXPath.c
+ tree.c uri.c valid.c xinclude.c xlink.c xmlIO.c xmllint.c
+ xmlmemory.c xpath.c xpointer.c: libxml.h integration
+ * trio.[ch] triop.h strio.[ch]: upgraded to the latest trio
+ baseline (version 1.2 plus a single patch).
+ * xpath.c result/XPath/expr/floats test/XPath/expr/floats: parses
+ scientific notation for numbers. Tests added.
+ * xpath.c: formatting of numbers changed to use sprintf
+ (contribution from William Brack)
+
+Sat Apr 21 16:12:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: cleanup, more useful debugging
+ * parserInternals.c: cleanup vctxt.nodeTab (de)allocation
+ * xmlIO.c: entity loading is printed as an error when validating
+
+Sat Apr 21 12:25:49 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: fixed to validate within entities
+ * test/VCM/v22.xml: added a specific testcase
+
+Fri Apr 20 17:45:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: forgot an epsilon transition in for ()+
+ * test/VCM/v21.xml : added a specific test case
+
+Fri Apr 20 15:46:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: removed a state explosion exhibited by RSS
+ * test/valid/rss.xml result/valid/rss.xml*: added the testcase
+ from bug #51872
+
+Fri Apr 20 14:52:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.[ch] tree.h: worked *hard* to get non-determinist content
+ validation without using an ugly NFA -> DFA algo in the source.
+ Made a specific algorithm easier to maintain, using a single
+ stack and without recursion.
+ * Makefile.am test/VCM/*.xml: added more tests to "make Validtests"
+ * hash.c: made the growing routine static
+ * tree.h parser.c: added the parent information to an
+ xmlElementContent node.
+
+Wed Apr 18 23:33:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c parser.c xpath.c: generating IDs when not validating
+ from an external parsed entity was poisoning the ID has table
+ with removed values. This was killing XSLT on the KDE help
+ browser.
+
+Wed Apr 18 17:09:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * entities.h: andrew@ugh.net.au detected a double declaration
+
+Wed Apr 18 15:06:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * debugXML.c hash.c tree.h valid.c : some changes related to
+ the validation suport to improve speed with DocBook
+ * result/VC/OneID2 result/VC/OneID3 : this slightly changes
+ the way validation errors get reported
+
+Wed Apr 18 11:42:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c HTMLtree.c: applied part of the patches provided
+ by P C Chow and William M. Brack for XSLT HTML output
+
+Mon Apr 16 19:44:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlversion.h.in win32config.h win32/libxml2/*: applied
+ Igor Zlatkovic patches for MSC compilation and added his
+ updates
+
+Tue Apr 17 10:08:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed xmlXPathNodeCollectAndTest() to do proper
+ prefix lookup.
+ * parserInternals.c: fixed the bug reported by Morus Walter
+ due to an off by one typo in xmlStringCurrentChar()
+
+Thu Apr 12 17:41:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c result/HTML/*: revamped the way the HTML
+ parser handles end of tags or end of input
+
+Thu Apr 12 10:50:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch] : added xmlDocCopyNode for gdome2 support
+
+Wed Apr 11 16:37:50 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.h: include xmlmemory.h this seems to havoid a nasty glibc
+ bug where the linktime verions of free() won't work ...
+
+Wed Apr 11 14:21:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * config.h.in configure.in xmlversion.h.in: added ansidecl.h test
+
+Wed Apr 11 13:50:42 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: added 2.3.6 release
+
+Wed Apr 11 13:26:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlStringGetNodeList() to handle charrefs
+ * result/wml.xml: resulted in a small output change
+
+Wed Apr 11 09:47:55 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: xmlNewDoc was missing the charset initialization
+ * xmllint.c: added --auto to autogenerate a doc, allow to
+ reproduce the problem fixed on xmlNewDoc
+
+Tue Apr 10 18:13:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: trying to get 52979 solved
+ * tree.c result/ result/noent/: trying to get 52712 solved, this
+ also made me clean up the fact that XML output in general should
+ not add formating blanks by default, this changed the output of
+ a few tests
+
+Tue Apr 10 16:30:20 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: Bill Brack pointer an error in detecting a null nodeset
+
+Sun Apr 8 15:07:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: finally released 2.3.6
+
+Sun Apr 8 11:39:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: checking for null pointer generated by new code
+
+Fri Apr 6 12:53:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed a [] evaluation problem reported
+ * test/XPath/tests/simpleaddr: extended test
+ * result/XPath/simpleaddr: updated result
+
+Wed Apr 4 02:07:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmllint.c: Dan Timis reported a portability problem
+ on Macs without mmap, fixed it.
+
+Tue Apr 3 20:20:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * testXPath.c : added a --tree option allowing to display the
+ tree dump of the XPath expression
+
+Mon Apr 2 17:13:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed a memleak when comparing nodesets
+ * HTMLtree.c: don't invent the HTML doctype if not available (XSLT)
+ * tree.c: added a TODO
+
+Tue Mar 27 14:32:06 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in Makefile.am config.h.in xmlversion.h.in: detect if
+ we need string functions
+ * trio.[ch] strio.[ch]: embedded the Trio-0.23 string functions
+ to be able to use them where needed. Applied some changes
+ to reduce name linking pollution and compile in only what's
+ needed.
+ * HTMLtree.c debugXML.c entities.c error.c nanoftp.c valid.c
+ xlink.c xmlversion.h.in xpath.c: got rid of the #ifdef
+ for the string manipulation functions
+ * xmlmemory.[ch]: removed DEBUG_MEMORY_FREED and added it automatically
+ to the free() function of xmlmemory.c
+ * entities.c HTMLtree.c parserInternals.c tree.c uri.c valid.c
+ xinclude.c xmlIO.c xpath.c xpointer.c: removed the MEM_CLEANUP
+ usage.
+
+
+Tue Mar 27 02:30:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * error.c: applied the context output patch of the error
+ handling submitted by Chuck Griffith
+ * error/VC/*: this slightly change some error logs
+
+Tue Mar 27 00:51:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed line number reporting on error
+
+Mon Mar 26 23:21:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: Sullivan and Darin found a parser bug,
+ applied the patch.
+
+Mon Mar 26 18:24:52 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c HTMLtree.c SAX.c debugXML.c error.c parserInternals.c
+ testHTML.c testSAX.c tree.c valid.c xmlIO.c xmlmemory.c
+ xmlversion.h.in xpointer.c: of course the way I defined
+ UNUSED breaks on old gcc version. Try to be smart and
+ also define it directly in xmlversion.h
+ * configure.in: removed -ansi flag from the pedantic set
+
+Sat Mar 24 17:45:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+ Huge cleanup, I switched to compile with
+ -Wall -g -O -ansi -pedantic -W -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
+ * HTMLparser.[ch] HTMLtree.c SAX.c debugXML.c encoding.[ch]
+ encoding.h entities.c error.c list.[ch] nanoftp.c
+ nanohttp.c parser.[ch] parserInternals.[ch] testHTML.c
+ testSAX.c testURI.c testXPath.c tree.[ch] uri.c
+ valid.[ch] xinclude.c xmlIO.[ch] xmllint.c xmlmemory.c
+ xpath.c xpathInternals.h xpointer.[ch] example/gjobread.c:
+ Cleanup, staticfied a number of non-exported functions,
+ detected and cleaned up a dozen of problem found this way,
+ avoided a lot of public function name/typedef/system names clashes
+ * doc/xml.html: updated
+ * configure.in: switched private flags to the really pedantic ones.
+
+Thu Mar 22 22:44:15 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: 2.3.5
+ * doc/html/*: rebuilt the docs
+
+Thu Mar 22 15:36:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed a reported bug in NOTATION parsing
+ * uri.c: accepted but not fixed bug 51876, added TODO
+ * Makefile.am: fixed bug 51876
+
+Thu Mar 22 13:41:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * config.h.in configure.in error.c: fix a compilation problem
+ on platforms without vsnprintf (xml@thewrittenword.com)
+
+Wed Mar 21 19:04:34 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed a function name header typo
+ * SAX.c: notations can also occur in external subset.
+
+Tue Mar 20 14:21:28 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * error.c: removed a C++ like comment
+
+Tue Mar 20 12:22:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixing bug 52299 strange condition leading
+ to a parser crash due to a buffer overflow
+ * result/noent/attrib.xml result/attrib.xml test/attrib.xml:
+ added the specific test case
+
+Mon Mar 19 16:50:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.[ch]: still a lot of cleanup based on XSLT, added
+ xmlXPathConvert{String,Number,Boolean} to be able to make
+ type casts without a context stack, fixed some implementation
+ problems related to the absence of context at parse-time,
+ added xmlXPathEvalPredicate() and xmlXPathFreeCompExpr()
+ in the public API too
+ * xpointer.c xpathInternals.h: we need to know at parse time
+ whether we are compiling an XPointer
+
+Mon Mar 19 11:54:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.[ch] xpointer.c: restaured the Binary and API compatibility
+ cleaned up the parser internals, refactored XPath code, added
+ new compilation based APIs and cleanly separated public and
+ private APIs.
+
+Mon Mar 19 00:59:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.h: the comp field must be added at the end to avoid
+ killing binary compat.
+
+Mon Mar 19 00:11:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: detect XPath memleaks in regreson tests
+ * error.c: fixed and error w.r.t. error reporting still using
+ stderr
+ * hash.c: added new line at end of file
+ * tree.h: minor cleanup
+ * xpath.[ch] xpointer.[ch]: Major changes ! Separated XPath
+ expression parsing from evaluation, resulted in a number of
+ changes internally, and in XPointer. Likely to break stuff
+ using xpathInternals.h but should remain binary compatible,
+ new interfaces will be added.
+
+Wed Mar 14 20:34:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: fixed a couple of problems reported by
+ okiddle@yahoo.co.uk and allanc@chickenandporn.com when compiling
+ without gcc on non linux platforms.
+
+Wed Mar 14 20:13:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/Makefile.am configure.in: yearke@eng.buffalo.edu suggested
+ a fix for --with-html-dir= configure support. I hope it won't
+ break rpm generation
+
+Wed Mar 14 17:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: one function comment cleanup.
+
+Wed Mar 14 14:55:46 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c: external subset notations were improperly registered
+ in the internal subset.
+
+Tue Mar 13 10:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * README.cvs-commits: added, pointing to HACKING
+ * HACKING: updated
+
+Mon Mar 12 22:09:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: and Matt Sergeant found one in the XML push
+ parser (erroneous check I forgot to remove when I fixed the
+ main parser).
+
+Mon Mar 12 19:19:04 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: ptittom found a small bug in UnaryExpr
+
+Sat Mar 10 13:09:53 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: bumped to 2.3.4
+ * error.c: fixed bug #51860
+ * tree.c: fixed bug #51861
+ * valid.c: cleanup, more debug, failed to fix one bug crap ...
+ * tree.[ch] : added xmlDefaultBufferSize
+ * nanoftp.c: typo in function name header block
+ * doc/xml.html : updated, added link to XML::LibXSLT
+ * doc/html/* : rebuilt the docs
+
+Wed Mar 7 20:43:47 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c SAX.c: the new content parsing code raised an
+ ugly bug in the characters() SAX callback. Found it
+ just because of strangeness in XSLT XML Rec ouptut :-(
+
+Wed Mar 7 16:50:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: Martin Baulig suggested to add -lm
+ * tree.c: found another bug in xmlNodeGetContent()
+
+Tue Mar 6 09:21:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: Bjorn found the error related to strictness of comparison.
+
+Mon Mar 5 21:47:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: trying to fix the Dtd parsing problem reported
+ by Gary, side effect of last week speed optimizations.
+
+Sat Mar 3 19:45:59 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xml2Conf.sh.in: fixes pointed out by Fredrik Hallenberg
+ * parserInternals.c: removed unneeded test raised by Stric
+
+Sat Mar 3 13:04:37 CET 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * xpath.c: Fixed xmlXPathNodeCollectAndTest (problem reported
+ and fixed by William Brack). Added xmlXPathFormatNumber.
+ Changed the sorting slightly.
+ * configure.in Makefile.am example/Makefile.am: Added -lm.
+ Please note that applications linking with libxml2, must
+ also like with the math library from now on.
+
+Sat Mar 3 07:38:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: fixed loop reported by Marc Sanfacon
+
+Sat Mar 3 02:10:24 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: one must report spaces even if the Dtd element
+ content proves that this is not part of the element content.
+ * result/valid/*.xml: this changed the ouptu slightly
+
+Thu Mar 1 17:53:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: bumped to 2.3.3
+ * doc/xml.html: updated
+
+Wed Feb 28 00:43:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: minor doc fix
+ * xpath.c: deallocation issues when a result tree has been
+ converted to a node-set
+
+Mon Feb 26 22:09:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: oops corrected dates s/2000/2001
+
+Mon Feb 26 12:48:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: new patch from Gary Pennington
+
+Mon Feb 26 09:30:23 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: applied patch from Ankh
+
+Mon Feb 26 03:34:43 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xinclude.c: fixed a problem building on Mac
+
+Sun Feb 25 21:52:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: more work on increasing parsing ferformances
+
+Sun Feb 25 18:03:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlmemory.h HTMLparser.c HTMLtree.c entities.c parser.c
+ xpath.c xpointer.c tree.c uri.c valid.c xinclude.c xmlIO.c:
+ avoiding memcpy in production builds MEM_CLEANUP macro use
+ * parser.[ch] parserInternals.c: optimizations of the tightest
+ internal loops inside the parser. Better checking of I/O
+ flushing/loading conditions
+ * xmllint.c : added --timing
+
+Sun Feb 25 05:48:51 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: bumped to 2.3.2
+ * doc/xml.html: updated for release
+
+Sat Feb 24 14:07:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: found a memleak and fixed a nasty bug
+
+Sat Feb 24 03:35:48 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmllint.[c1] : added return code errors for xmllint
+ * xpath.c: specific debug dump function for result value trees
+
+Thu Feb 22 07:52:27 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: finally implemented xmlXPathCompareNodeSets
+ * test/XPath/expr/floats results/XPath/expr/floats: added
+ a test for float expressions
+
+Tue Feb 20 18:57:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlNodeGetContent, it was not recursing on child
+ * parserInternals.[ch]: trying to speed up parsing
+ * xpath.c : speeded up node set equality op
+
+Mon Feb 19 19:01:57 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am valid.c list.[ch]: Gary Pennington provided a
+ better handling of ID/IDREF and the list modules associated
+ * configure.in: small CFLAGS cleanup
+
+Mon Feb 19 16:13:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: fixed iconv detection on AIX (stric)
+
+Mon Feb 19 10:59:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed "*" (unbelievable !) and a couple of warnings
+
+Sun Feb 18 17:52:37 MET 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * xpath.c: fixed whitespace handling in xmlXPathStringEvalNumber,
+ and optimized xmlXPathNodeSetSort
+
+Sat Feb 17 14:18:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: bug fix when context size is 0
+ * parser.c: I like Norm's Dtd because they still manage to break
+ the parser occasionally
+
+Fri Feb 16 14:20:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: xmlXPathEqualNodeSetFloat the arg is really a double now
+
+Fri Feb 16 01:10:06 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch] parser.c xpath.c: fixed the problem of addressing
+ attributes within the XML-1.0 namespace
+
+Thu Feb 15 16:53:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpathInternals.h: exported a few axis functions
+ * doc/xml.html: updated the doc
+
+Thu Feb 15 15:57:14 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: applied patch from Daniel van Balen for OpenBSD
+ and bumped version to 2.3.1
+ * HTMLtree.c result/HTML/doc3.htm result/HTML/wired.html: the
+ attempt to find autoclosing was simply broken, removed it,
+ updated the examples, this is better
+
+Wed Feb 14 11:35:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * hash.[ch]: added Paolo Casarini patch to provide Delete from
+ hash functionnalities.
+ * doc/html/* : rebuild the doc
+
+Tue Feb 13 18:01:48 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c result/XPath/tests/chaptersprefol: bugfixes on order and
+ on predicate
+ * HTMLparser.[ch] HTMLtree.c result/HTML/doc3.htm.err
+ result/HTML/doc3.htm.sax result/HTML/wired.html: sometimes one
+ really want to have tags closed on output even if we accept
+ unclosed ones on input
+
+Mon Feb 12 18:33:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: ouch don't free NULL, rare case fixed
+ * tree.c: don't coalesce text nodes if they don't have the
+ same behaviour wrt escaping on output
+
+Sun Feb 11 21:15:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: small fixup
+ * SAX.c: don't warn on empty namespaces.
+
+Thu Feb 8 11:28:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * README: a bit of cleanup
+ * configure.in: preparing for 2.3.0 release
+
+Thu Feb 8 10:37:00 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * hash.[ch]: added a first version of xmlHashSize()
+ * valid.c: another bug fix from Gary Pennington
+
+Wed Feb 7 19:22:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: couple of bug fixes pointed by Gary Pennington
+ * HTMLtree.c: #if 0 cleanup
+
+Tue Feb 6 14:02:56 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: started profiling XSLT, added xmlXPathNodeSetAddUnique()
+ which removes a time consuming check of xmlXPathNodeSetAdd()
+ and use it in places where we are sure to not break unicity
+
+Mon Feb 5 18:51:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: bug fixes found from XSLT
+ * tree.c: preserve node->name special values when copying nodes.
+ * parserInternals.[ch] parser.[ch] SAX.c : added a mode where
+ external subset are fetched when available but without full
+ validation. Added xmlLoadExtDtdDefaultValue, need a function.
+ * HTMLtree.c: add support for xmlStringTextNoenc for XSLt HTML
+ output with encoding disabled.
+
+Sat Feb 3 09:50:29 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmliO.c: Harry Blundell pointed out that xmlCheckFilename
+ xmlCheckFilename should not be called from xmlFileOpenW
+ and xmlGzfileOpenW
+
+Fri Feb 2 18:04:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * uri.c: rewrite of xmlNormalizeURIPath from Paul D. Smith
+ * test/URI/smith.uri result/URI/smith.uri Makefile.am:
+ added the new tests for URI normalization
+ * testURI.c: fixed stoopid bugs
+ * result/VC/OneID3 result/VC/UniqueElementTypeDeclaration:
+ the URI in the error messages are now properly normalized
+
+Fri Feb 2 09:18:53 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * uri.c: applied Marc Sanfacon's patch for xmlNormalizeURIPath
+
+Thu Feb 1 05:28:55 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed a number of problems in XPATH_XSLT_TREE processing
+
+Wed Jan 31 21:45:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed mod operator
+
+Wed Jan 31 16:50:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed xmlStrcat doc
+ * tree.c: 2 fixes form Anders Carlson for copying nodes and
+ trees.
+
+Wed Jan 31 14:19:16 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c result/XPath/tests/chaptersbase
+ result/XPath/tests/simplebase: fixed XPath node()
+ * tree.c: small fix in xmlNewNs()
+ * Makefile.am: removed extraneous xml2Conf.sh rule
+
+Sun Jan 28 08:37:03 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am configure.in libxml.spec.in example/Makefile.am:
+ Changed the library name, in order to get libxml-devel and
+ libxml2-devel to coexist on a single system
+ * xml-config.1 xml-config.in xmlConf.sh.in: renamed
+ * xml2-config.1 xml2-config.in xml2Conf.sh.in: new files
+
+Sat Jan 27 19:58:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am configure.in libxml-2.0.pc.in: started working on getting
+ libxml2-devel installable in // as libxml-devel.
+
+Sat Jan 27 18:49:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/Makefile.am: fixed make rebuild in doc
+ * doc/html/*.html: rebuilt the docs
+
+Fri Jan 26 10:30:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: patch from Bjorn Reese on xmlBufferCCat
+
+Thu Jan 25 19:22:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am doc/Makefile.am libxml.spec.in: painful work to get
+ the HTML doc to go into the -devel RPM ...
+ * aclocal.m4 config.h.in: some updates due to auto* magic
+
+Thu Jan 25 19:11:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.h: added a hook in the context structure allowing to
+ link to extra support, needed for XSLT
+
+Thu Jan 25 13:34:11 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.[ch] xpointer.c: added xmlXPathCmpNodes, changed
+ xmlXPtrCmpPoints to use it.
+ * propagated the following patch from Alejandro Forero
+ * include/win32config.h xmlIO.c: applied further suggestions
+ from Igor Zlatkovic <igorz@dialup.nacamar.de> and cleanup
+ * example/gjobread.c: fixed warnings, now that it builds
+
+Wed Jan 24 20:27:28 COT 2001 Alejandro Forero <bachue@bachue.com>
+
+ * xmlIO.c (xmlFileOpen, xmlFileOpenW): Removed unnecesary checks.
+
+ * xmlIO.c (xmlCheckFilename): Function added to know whether a given
+ filename points to a valid file (not a directory).
+ * xmlIO.c (xmlFileOpen, xmlFileOpenW, xmlGzfileOpen, xmlGzfileOpenW):
+ Added calls to xmlCheckFilenameDir.
+
+ * xmlIO.c (xmlGzfileOpen, xmlGzfileOpenW, xmlFdOpen, xmlFdOpenW): Pass
+ `path' (rather than `filename') as the parameter to gzopen and open.
+
+Tue Jan 23 16:26:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: fixed a problem with EXTRA_DIST
+
+Mon Jan 22 23:42:17 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am example/Makefile.am: finally found the trick
+ to build the example, i.e. add "." in SUBDIRS before example
+ in the list <grin/>
+
+Mon Jan 22 16:30:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: updated with an XSLT section, removed pointer to
+ W3C CVS base.
+
+Mon Jan 22 11:43:21 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: when copying a XSLT tree object teh tree need to be copied
+ too, and deallocation need to occur the same way.
+
+Mon Jan 22 10:35:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpathInternals.h xpath.[ch] debugXML.c: added the XPATH_XSLT_TREE
+ type correponding to an XSLT result tree fragment. Share most
+ of the data format with node set, as well as operators.
+ * HTMLtree.c: added a newline at the end of the doctype output
+ whe this one is not present initially.
+ * tree.c: make sure taht the parent and doc pointers are properly
+ set when copying attributes (lists).
+
+Sun Jan 21 10:47:38 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * htmlTree.[ch] xmlIO.h: exported htmlDocContentDumpOutput
+
+Fri Jan 19 18:15:50 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: seems I finally killed that ugly path evaluation
+ context bug (tagged 9999 in case is is wrong)
+
+Fri Jan 19 06:30:38 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.[ch] xpathInternals.h: added xmlXPathRegisterVariableLookup()
+ for XSLT
+
+Thu Jan 18 16:19:47 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: Gary Pennington <Gary.Pennington@uk.sun.com> fix
+ for xmlGzfileOpen() bug
+
+Thu Jan 18 13:11:50 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: removed an error found by XSLT usage
+ * tree.c parserInternals.h: use a predefined static string
+ for text and comment nodes, avoid freeing them in xmlFreeNode,
+ exported the string name in parserInternals.h and added
+ another value to disable encoding at output (for XSLT),
+ gain memory, time.
+
+Wed Jan 17 09:15:16 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * win32/README.MSDev win32/libxml2/libxml2_a.dsp
+ win32/libxml2/libxml2_so.dsp: new makefiles and update
+ provided by Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+Tue Jan 16 18:24:46 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c : xmlSaveFile, xmlSaveFileEnc, applied patch from
+ Gary Pennington
+
+Mon Jan 15 20:24:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed the comaprision of values and nodelists,
+ need to compare nodelist still ...
+ * debugXML.c: avoided a possible core dump
+ * HTMLparser.c: cleanup
+ * nanohttp.c: contributed fix.
+ * tree.c: fixes in properties handling added xmlSetNsProp
+ needed by libxslt
+ * xpathInternals.h: exported xmlXPathBooleanFunction, added a
+ comment
+ * TODO: updated
+
+Sat Jan 6 22:05:09 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c parserInternals.c: applied Bjorn Reese optimization
+ patch
+
+Sat Jan 6 19:13:27 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: applied patch fro make check from Martin Vidner
+
+Thu Jan 4 19:07:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: preparing 2.2.11
+ * doc/html/*: rebuild the HTML files
+ * doc/xml.html : updated
+
+Thu Jan 4 14:09:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed a stupid bug
+ * valid.c: applied "Paul D. Smith" <pausmith@nortelnetworks.com>
+ patches related to validation of an XInclude processing result
+ * TODO: updated
+
+Thu Jan 4 11:46:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * encoding.c xmlIO.c: Fixing the problem reported by Marc Sanfacon
+ on large files
+
+Wed Jan 3 21:51:13 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: fixed xmlParserInputBufferCreateMem doc
+
+Wed Jan 3 18:56:00 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: htmlCheckParagraph to check htmlOmittedDefaultValue,
+ reported by Jonas Borgström
+ * nanohttp.c: Applied Bjorn Reese' IPV6 first patch
+
+Wed Jan 3 16:19:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * testXPath.c xpath.c: fixing the XPath union expressions problem
+ reported by Martin Vidner <martin@artax.karlin.mff.cuni.cz>
+
+Wed Jan 3 14:22:33 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmllint.c: Made is so if the file name is "-" is will read form
+ standard input. Sven Heinicke <sven@zen.org>
+ * tree.c: fixed a problem when growing buffer
+ * tree.h: fixed the comment of the node types following andersca
+ comment
+ * TODO: updated
+
+Wed Dec 27 12:35:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch]: added a way to avoid adding automatically
+ omitted tags. htmlHandleOmittedElem() allows to change the
+ default handling.
+ * tree.[ch] xmllint.c: added xmlDocDumpFormatMemory() and
+ xmlDocDumpFormatMemoryEnc(), uses memory functions for output
+ of xmllint too when using --memory flag, added a memory test
+ suite at the Makefile level.
+ * xpathInternals.h xpath.[ch] xpointer.c: fixed problems
+ with namespace use when encountering QNames in XPath evalation,
+ added xmlns() scheme in XPointer.
+ * nanoftp.c : incorporated a fix
+ * parser.c xmlIO.c: fixed problems raised with encoding when using
+ the memory I/O
+ * parserInternals.c: closed bug 25934 reported by
+ torsten.landschoff@innominate.de
+ * TODO: updated
+
+Sat Nov 25 11:46:27 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in doc/html/* doc/xml.html: made a 2.2.9 release
+ on a non-updated tree :-(, made a 2.2.10 release to correct the
+ situation
+
+Sat Nov 25 10:41:37 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c parser.[ch] tree.[ch] xmlIO.[ch] xmllint.c xpath.c
+ parserInternals.h vms/build_libxml.com vms/config.vms Makefile.am:
+ integrated a set of OpenVMS changes from Howard Taylor
+ <Howard.Taylor@pacoast.com>
+
+Sat Nov 25 01:21:01 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] xmlIO.c: added xmlDocDumpMemoryEnc() from John Kroll
+ * error.c: applied fix suggested by "Leo Davidson" <leo@ox.compsoc.net>
+
+Sat Nov 25 00:24:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: some fixes on auto-open of html/head/body
+ * encoding.c: fixed a compilation error on some gcc env
+ * xpath.c xpointer.[ch] xpathInternals.h: improved the
+ XPointer implementation
+ * test/XPath/xptr/strpoint test/XPath/xptr/strrange3: added
+ related XPointer tests and associated results
+
+Fri Nov 24 14:01:44 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xmldtd.html doc/xml.html: following a short step by step
+ guidance on IRC to help maciej with DTDs I started a small
+ page on the subject.
+
+Fri Nov 17 17:28:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: fixed handling of broken charrefs
+ * xmlmemory.h libxml2.dsp include/win32config.h: reporting Windows
+ patches
+
+Mon Nov 13 19:17:20 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html doc/html/* : rebuilt the docs after adding
+ xinclude and updated page for 2.2.7 and 2.2.8
+ * configure.in: releasing 2.2.8
+
+Mon Nov 13 12:39:38 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] parserInternals.c: applied the conditional
+ section processing fix from Jonathan P Springer
+ <jonathan.springer2@gte.net>
+ * xmlversion.h.in win32/libxml2/libxml2.dsp : Updated MS
+ project file, fixed iconv default non support
+ * xpath.c: fixed the problem of evaluating relative expressions
+ when a node context is provided.
+
+Sun Nov 12 16:31:19 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c: fixed gcc 2.95 new warnings
+ * SAX.c: fixed a stupid bug
+ * tree.c: fixed a formatting problem when round-tripping
+ from/to memory
+ * xinclude.c: chased memleak, fixed a base problem
+ * xpointer.c: added xmlXPtrBuildRangeNodeList(), finished ?
+ xmlXPtrBuildNodeList()
+ * TODO: updated
+ * Makefile.am test/XInclude/docs test/XInclude/ents result/XInclude:
+ adding a first small set of regression tests for XInclude
+
+Tue Nov 7 15:11:34 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.[ch]: applied Wayne Davison patches to access
+ the WWW-Authorization header.
+ * parser.c: Closed Bug#30847: Problems when switching encoding
+ in short files by applying Simon Berg's patch.
+ * valid.c: fixed a validation problem
+ * hash.c parser.h parserInternals.h testHTML.c testSAX.c tree.h
+ xmlerror.h xmlmemory.h xmlversion.h.in: applied a DLL patch from
+ Wayne Davison
+ * xpointer.[ch]: added first version of xmlXPtrBuildNodeList()
+ need to be extended to non full nodes selections.
+ * xinclude.c: starts to work decently
+
+Mon Nov 6 17:22:46 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] xinclude.[ch] xmllint.c configure.in valid.c
+ debugXML.c xmlversion.h.in: Started adding XInclude support,
+ this is a new xmllint option
+ * tree.c xpath.c: applied TOM patches for XPath
+ * xpointer.c: fixed a couple of errors.
+ * uri.c: added an escaping function needed for xinclude
+ * testXPath.c hash.c HTMLtree.c: minor cleanups raised by
+ new warning from RH70 gcc's version
+
+Tue Oct 31 14:14:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: fixed loop on invalid char in scripts
+ * parser.c: update to description of xmlIOParseDTD()
+ * libxml.m4 xmlversion.h.in: changes contributed by
+ Michael Schmeing <m.schmeing@internet-factory.de>
+ * configure.in: preparing for 2.2.7
+ * Makefile.am: trying to avoid config.h and acconfig.h
+ being included in the distrib
+ * configure.in: released 2.2.7
+
+Mon Oct 30 17:08:10 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] debugXML.c parserInternals.c xpath.c: Deprecated Pi's
+ like namespaces for good. Unified xmlNs and xmlNode somewhat.
+
+Mon Oct 30 16:26:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch]: added xmlIOParseDTD()
+ * xpointer.c: added support for the 2 extra parameters of
+ string-range, fixed a stoopid error when '0' was present
+ in XPointer expressions
+ * test/XPath/xptr/strrange2 result/XPath/xptr/strrange2: added
+ testsuite for the above
+
+Mon Oct 30 10:26:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.spec.in: improved package descriptions
+
+Sun Oct 29 19:03:11 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c xpathInternals.h: applied a large cleaning patch
+ from TOM <ptittom@free.fr>, it also add namespace support
+ for function and variables registration.
+
+Sun Oct 29 18:51:46 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c: Wayne Davison's patch fixing xmlBuildURI()
+ * Makefile.mingw: Wayne Davison's update adding hash.c
+
+Sun Oct 29 18:38:12 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c: fixed the root evaluation problems
+ * HTMLparser.c result/HTML/doc3.htm: fixed the problem of non
+ ignorable spaces with <b> <bold> <em>
+ * tree.c: fixed a loop in xmlSearchNsByHref()
+
+Fri Oct 27 18:57:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c: applied another XPath patch from TOM
+ * xpath.c include/makefile.am: applied another patch from
+ china@thewrittenword.com (cleanup on IRIX).
+
+Fri Oct 27 13:45:28 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml-config.1: received a fixed version from Fredrik Hallenberg
+ <hallon@lysator.liu.se>
+
+Thu Oct 26 16:05:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c textXPath.c xpathInternals.h: applied TOM <ptittom@free.fr>
+ cleanup patch for XPath
+
+Wed Oct 25 21:31:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * patched to redirrect all "out of context" error messages to
+ a reconfigurable routine. The changes are:
+ * xmlerror.h : added the export of an error context type (void *)
+ an error handler type xmlGenericErrorFunc there is an interface
+ xmlSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
+ to reset the error handling routine and its argument
+ (by default it's equivalent to respectively fprintf and stderr.
+ * all the c files: all wild accesses to stderr or stdout within
+ the library have been replaced to calls to the handler.
+
+Wed Oct 25 15:27:19 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: release 2.2.6
+ * xpath.[ch] xpointer.c xpathInternals.h: added xpathInternals.h
+ exporting the inner functions of xpath for extension modules
+ * doc/*: updated and rebuilt the doc
+
+Wed Oct 25 12:48:55 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c : applied Wayne HTTP cleanup patch
+ * tree.[ch]: applied TOM <ptittom@free.fr> for xmlNodeSetBase()
+ and xmlNodeSetSpacePreserve()
+
+Wed Oct 25 12:11:03 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c: closing bug #29260
+
+Tue Oct 24 18:49:34 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * hash.[ch] debugXML.c: expanded/enhanced the API, added
+ multikey tuples, made hash structure opaque
+ * valid.[ch]: moved elements, attributes, notations decalarations
+ as well as ID and refs to hash tables.
+ * entities.c: hash cleanup
+ * xmlmemory.c: fixed a dump problem in debug mode
+ * include/Makefile.am: problem passing in DESTDIR= values patch
+ from Marc Christensen <marc@calderasystems.com>
+ * nanohttp.c: removed debugging remains
+ * HTMLparser.c: the bogus tag should be ignored (Wayne)
+ * HTMLparser.c parser.c: fixing a number of problems with the
+ macros in the *parser.c files (Wayne).
+ * HTMLparser.c: close the previous option when opening a new one
+ (Marc Sanfacon).
+ * result/HTML/*: updated the HTML results accordingly
+
+Sun Oct 22 18:39:19 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.[ch] xpath.[ch] hash.[ch] debugXML.c tree.h: added/hacked
+ hash tables from Bjorn Reese <breese@mail1.stofanet.dk>. Switched
+ XPath functions and XML entities table to them. More to come...
+ * xmlIO.c: fixed libxml closing FILEs it didn't open.
+
+Sun Oct 22 13:59:50 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: coalesce adjacent text nodes
+ * valid.c: handling of blank nodes in DTd validation (raised
+ by problems with a posteriori validation).
+ * nanohttp.c: changing behaviour on HTTP write stuff.
+ * HTMLtree.c: forced body and html to be explicitely closed.
+ * xpath.h: exported more XPath functions.
+
+Sun Oct 15 22:28:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Release of 2.2.5
+ * xpointer.c: range() range-inside and other helper functions
+ * parserInternals.c: fixed perf problem raised by rolf@pointsman.de
+
+Sun Oct 15 16:21:27 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.c: HTML attributes need normalization too (Bjorn Reese)
+ * HTMLparser.[ch]: addded htmlIsScriptAttribute()
+
+Sun Oct 15 13:18:36 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/*: rebuilt docs preparing for 2.2.5 release, added URI
+ and XPointer modules
+
+Sun Oct 15 12:13:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.h: closed #25107
+
+Sun Oct 15 12:06:16 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * testSAX.c: fixed problem with cdata reporting
+ * SAXresult/* : updated
+
+Sun Oct 15 12:00:24 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c test/wap.xml result/noent/wap.xml result/wap.xml:
+ Closed bug #27499, added to regression tests
+ * TODO: updated
+
+Sun Oct 15 01:34:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c HTMLtree.[ch] SAX.c testHTML.c tree.c: fixed HTML
+ support for SCRIPT and STYLE with help from Bjorn Reese
+ * test/HTML/* result/HTML/*: added simple testcase and updated
+ the existing ones.
+
+Fri Oct 13 18:24:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c xpointer.c: XPointer reorder of ranges start/end and
+ string-range for empty strings
+ * test/XPath/docs/str test/XPath/xptr/chaptersrange
+ test/XPath/xptr/strrange: augmented the XPointer testsuite
+
+Fri Oct 13 12:21:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html doc/xmlmem.html: added a module describing memory
+ interfaces and use, updated the main page.
+
+Fri Oct 13 01:23:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c nanohttp.c xmlIO.c: Wayne Davison Win32 patch
+ nanoftp code work on Windows too now
+
+Fri Oct 13 00:54:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * testXPath.c xpath.[ch]: moved some debug functions to xpath core
+ * xpointer.c: implemented string-range() at least a good first version
+ * test/XPath/docs/str test/XPath/xptr/strrange
+ result/XPath/xptr/strrange: the string-range() tests
+
+Thu Oct 12 10:02:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am include/Makefile.am include/win32config.h
+ win32/Makefile.mingw: fixed problems reported by Wayne Davison
+ and make distcheck
+
+Thu Oct 12 01:44:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c: added xmlNanoHTTPTimeout(int delay), removed a bug
+ xmlNanoHTTPMethod on input MimeType Tony Lam <Tony.Lam@eng.sun.com>
+ * xpointer.c: slight extension of xmlXPtrLocationSetMerge
+
+Thu Oct 12 01:37:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * config.h.in configure.in nanoftp.c nanohttp.c xmlversion.h.in :
+ patch for socklen_t detection by
+ Albert Chin-A-Young <china@thewrittenword.com>
+
+Wed Oct 11 17:53:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c valid.c xmllint.c: Fixed a few postvalidation bugs
+ and added a --dtdvalid option to xmllint used to test it
+
+Wed Oct 11 15:01:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml-config.1 Makefile.am libxml.spec.in: adding a man page for
+ xml-config by Fredrik Hallenberg <hallon@lysator.liu.se>
+
+Wed Oct 11 12:41:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.[ch] xpointer.[ch]: worked on XPath functions and variable
+ handlings (registration, lookup, cleanup)
+
+Wed Oct 11 01:46:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in Makefile.am include/makefile.am: adding XPointer
+ and XPtrtests target
+ * xpointer.[ch] : new files for XPointer support
+ * test/XPath/xptr result/XPath/xptr: added XPointer testsuite and
+ more XPath tests
+
+Wed Oct 11 01:23:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: fixed, very broken, make distcheck works again
+
+Wed Oct 11 02:53:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * More work toward 2.2.5, integrated a number of patches
+ * configure.in Makefile.am win32config.h.in: trying to cleanup
+ make distcheck .... huh ...
+ * include/Makefile.am include/win32config.h: new directory
+ for includes
+ * win32/Makefile.mingw win32/README.MSDev win32/libxml2/libxml2.dsp
+ updated teh makefiles and instructions for WIN32
+ * xpath.c: small fixes
+ * test/XPath/ results/XPath: updated the testcases and results
+ * HTMLparser.c nanohttp.c testXPath.c: incorporated provided or
+ suggested patches
+ * valid.c: fixed an ID bug
+
+Mon Oct 9 14:28:56 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * moved xml-error.h to xmlerror.h: seems this allowed to bypass
+ the automake bug where wrong dependencies were generated.
+ * xpath.[ch]: worked on XPointer
+
+Fri Oct 6 12:58:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in Makefile.am: 2.2.5, ship the include in an
+ include/libxml subdirectory, use symlinks when using CVS
+ * testSAX.c: fixed small bug
+ * testXPath.c: changed the way testfiles are parsed
+ * debugXML.c: same kind of cleanup when parsing an argument expression
+ XPath/XPointers can have blanks embedded
+ * xpath.[ch]: more cleanup, reorgs for XPointer work
+ * parserInternals.c parser.c HTMLparser.c: fixed wrong include
+ * win32/README.MSDev win32/libxml2/libxml2.dsp: Windows stuff
+
+Thu Oct 5 18:13:15 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * debugXML.c testXPath.c xpath.[ch]: got pissed by some nastyness
+ in the XPath engine, rewrote large parts of it, now it's far
+ cleaner and in sync with the REC not an old WD. Fixed a parsing
+ problem in the interactive XML shell found when testing XPath.
+
+Wed Oct 4 15:25:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * debugXML.c testXPath.c xpath.[ch]: More work on XPath/Xpointer,
+ incorporated "(TOM)" <ptittom@free.fr> patches rebuilt the XPath
+ examples with the extra test
+
+Wed Oct 4 14:39:01 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c xmlIO.c xmlIO.h: fixed bug 26650, and improved
+ the global init function.
+
+Tue Oct 3 11:28:52 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: Doohhh, attribute name parsing was still case
+ sensitive ! Fixed this ...
+ * result/HTML/* : updated the tests results accordingly
+
+Mon Oct 2 23:47:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.[ch] debugXML.c testXPath.c: fixed the XPath evaluation
+ engine, should be far more stable, incorporated a new version of
+ preceding/following axis, need testing
+ * uri.c: fixed file:///c:/a/b/c problem
+ * test/XPath/tests/idsimple: augmented the XPath tests
+
+Sun Oct 1 22:33:00 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* rebuilding docs for 2.2.4 release
+
+Sun Oct 1 22:16:33 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: releasing 2.2.4
+ * parser.[ch]: added xmlStrEqual()
+ * HTMLparser.c HTMLtree.c SAX.c debugXML.c entities.c parser.c
+ tree.c valid.c xlink.c xpath.c: converted all !xmlStrcmp to
+ use xmlStrEqual instead
+ * TODO: updated
+ * added an XPath test
+
+Sun Oct 1 20:19:39 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: fixed htmlStartCloseIndexinitialized init
+ * entities.h: exported xmlInitializePredefinedEntities
+ * parser.[ch] : added xmlInitParser()
+ * parserInternals.h : had to export htmlInitAutoClose()
+
+Sun Oct 1 16:28:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.[ch] : fixed some serious XPath Predicate evaluation
+ problems
+ * Makefile.am : added XPath regression tests to normal tests
+ * uri.c: fixed a problem with local paths, cleanup
+ * parser.c: fixed a problem with large CData sections
+
+Sat Sep 30 16:35:54 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in xml-config.in: patch from "Ben Taylor"
+ <sol7x86@hotmail.com> for solaris shared libs lookup
+
+2000-09-30 Martin Baulig <baulig@suse.de>
+
+ * libxml-2.0.pc.in: Provide pkg-config script.
+
+ * configure.in: Create the libxml-2.0.pc script from the
+ libxml-2.0.pc.in templates.
+ * Makefile.am (pkgconfig_DATA): Install the libxml-2.0.pc
+ script in `$(libdir)/pkgconfig'.
+
+Mon Sep 25 16:23:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c parser.c tree.c tree.h: Avoiding a few warning
+ when compiling with MSC
+
+Sun Sep 24 20:32:52 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c: patch for normalize-string() substring-before(),
+ substring-after() and translate() functions from Bjorn Reese
+ <breese@mail1.stofanet.dk>
+ * libxml.m4 Makefile.am: added libxml.m4 from Debian ?
+ Fredrik Hallenberg <hallon@lysator.liu.se>
+ * TODO: updated
+
+Sun Sep 24 10:00:49 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlversion.h.in nanoftp.c nanohttp.c: traying to work out the
+ problem of socklen_t being undefined on a number of platforms
+ * debugXML.c: fixed a compilation problem when without snprintf
+
+Sat Sep 23 12:19:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c uri.c: Another patch from Wayne Davison, correcting
+ an URI bug and a fix for the control-character-induced infinite loop
+ * nanohttp.c: preventive fix for compiling on WIN32
+
+Fri Sep 22 18:06:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlint.c: closing bug #25000
+
+Fri Sep 22 14:17:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlIO.h tree.h: made xmlNodeDump() and xmlNodeDumpOutput() public
+ * parser.[ch] nanohttp.c HTMLtree.c HTMLparser.c tree.c: applied and
+ modified slightly Wayne Davison patch adding xmlStrcasecmp and
+ related function, fixing xmlStrncmp(), and associated cleanup
+ * result/HTML/entities.html.sax: updating result
+
+Tue Sep 19 14:20:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c: applied patch for URI escaping from Wayne Davison
+ <wayned@blorf.net>
+ * tree.c parserInternals.c HTMLparser.c: memset checks patches
+ from Denis Barbier <barbier@imacs.polytechnique.fr>
+ * HTMLparser.c: UTF8 characters in HTML tag-attribute values
+ patch from Wayne Davison
+
+Sun Sep 17 18:37:03 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html : updated with new releases, adding "how to help"
+
+Sun Sep 17 17:58:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.c debugXML.c parser.c parserInternals.c tree.c valid.c xpath.c:
+ removed a few warnings in pedantic mode ...
+ * parserInternals.c parser.c: moved encoding switching function
+ to parserInternals.c
+ * configure.in, doc/Makefile.am libxml.spec.in: released 2.2.3
+
+Sat Sep 16 20:12:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c parser.c: set ctxt->errNo before calling the
+ error or warning handlers
+
+Wed Sep 13 22:03:18 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parserInternals.c parserInternals.h parser.c Makefile.am:
+ created a new module parserInternals.c, moved most of the
+ code shared by the various parsers there, as well as
+ deprecated code from parser.c. More cleanup of parser.c
+ * uri.c: fixed a problem when URI is NULL
+ * valid.c: speedup when looking for an attribute declaration
+
+Sun Sep 10 17:53:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c tree.c SAX.c parser.c entities.c debugXML.c: finished
+ the cleanup of the computation of URI references when seeking
+ external entities. The URI reference string and the resulting
+ URI are both stored now.
+ * parser.c HTMLparser.c valid.c nanoftp.c nanohttp.c xpath.c:
+ large s(n)printf checks and cleanup from Denis Barbier
+ <barbier@imacs.polytechnique.fr>
+ * xmlversion.h.in tree.h: couple of SGML declarations for a
+ possible docbook module.
+ * result/VC/ : a couple of test output changed due to the change
+ of the entities URI
+
+Sun Sep 10 15:59:58 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.h: added a _private field for linking user's data
+
+Sun Sep 10 15:14:43 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c parserInternals.h: demacroified most of the IS_XXX
+ the gain in size is significant so ...
+
+Fri Sep 8 20:48:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.c: cases where looking up entities with doc==NULL
+ covered
+
+Tue Sep 5 12:41:15 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c: applied Wayne Davison patch
+ * Makefile.in test/URI/uri.data result/URI/uri.data: updated URI tests
+
+Mon Sep 4 13:01:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c testUri.c: applied Wayne Davison patches
+ * test/URI/uri.data result/URI/uri.data: first set of tests/results
+ * Makefile.in: added URItest and included thenin "make tests"
+
+Sun Sep 3 19:19:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlversion.h.in: closed bug 22941
+
+Thu Aug 31 16:55:55 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xmlio.html: added doc and example for entity loader
+ redefinition.
+
+Thu Aug 31 14:59:28 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xmlio.html doc/xml.html: added a doc on the I/O mechanism
+ used by libxml
+
+Tue Aug 29 20:22:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: Fixed bug on invalid ontent characters and when using
+ push.
+ * xmllint.c: fixed xmllint endling of errors in push mode
+
+Tue Aug 29 11:24:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c testHTML.c: applied two new patches from
+ Wayne Davison <wayned@users.sourceforge.net>
+ * result/HTML/*.sax: regenerated HTML SAX output
+ * parser.c: more cleanup.
+
+Mon Aug 28 11:58:12 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch] testHTML.c: applied the second set of
+ patches from Wayne Davison <wayned@users.sourceforge.net>,
+ adding htmlEncodeEntities()
+ * HTMLparser.c: fixed an ignorable white space detection bug
+ occuring when parsing with SAX only
+ * result/HTML/*.sax: updated since the output is now HTML
+ encoded...
+
+Mon Aug 28 00:38:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch]: applied some of Wayne Davison
+ <wayned@users.sourceforge.net> patches
+
+Sun Aug 27 22:14:01 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.c tree.c debugXML.c: fixed bogus behaviour when an
+ undeclared namespace prefix was used, added a warning.
+ Cleaned up support w.r.t. entities, spilling out a warning
+ and being pedantic on lookups.
+ * test/warning/ent9 : added testcase for previous example.
+ * TODO: updated
+ * parserInternals.h parser.c: changed the way names are parsed
+ now allow infinite size and decrease penalty for normal use
+ * parser.c: Started a big cleanup/check of the parser code,
+ fixed some of the most tortuous entity code, spotted code
+ unused anymore
+ * test/*: added tests for very long names and related nasty
+ things.
+
+Sat Aug 26 23:31:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/encoding.html: added encoding aliases doc
+ * doc/xml.html: updates
+ * encoding.[ch]: added EncodingAliases functions
+ * entities.[ch] valid.[ch] debugXML.c: removed two serious
+ bottleneck affecting large DTDs like Docbook
+ * parser.[ch] xmllint.c: added a pedantic option, will be
+ useful
+ * SAX.c: redefinition of entities is reported in pedantic mode
+ * testHTML.c: uninitialized warning from gcc
+ * uri.c: fixed a couple of bugs
+ * TODO: added issue raised by Michael
+
+Wed Aug 23 01:50:51 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/encoding.html: propagated Martin Duerst suggestions
+
+Wed Aug 23 00:23:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: Fixed Bug#21552: libxml fails to decode &amp;
+ * uri.c testUri.c patches, by Marc Sanfacon (1 left)
+ * parser.c HTMLparser.c: HTML/encoding push problems reportedi
+ by Wayne Davison
+
+Sun Aug 20 17:03:38 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c nanohttp.c: small cleanup
+ * TODO: updated
+
+Sat Aug 19 22:57:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added an old VC testcase and updated title.xml entity
+
+Sat Aug 19 21:02:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c SAX.c tree.c HTMLtree.h result/HTML/*: work
+ done on auto-opening of <p> tags and cleanup of SAX output
+
+Sat Aug 19 18:45:40 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.4 xmllint.1 Makefile.am libxml.spec.in: added man pages
+
+Sat Aug 19 18:38:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html libxml.* structure.*: updated the doc a bit
+
+Thu Aug 17 15:50:00 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * testSAX.c testHTML.c result/HTML/: cleanup of the output
+ of SAX tests
+
+Mon Aug 14 13:56:33 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Patch from Albert Chin-A-Young <china@thewrittenword.com>:
+ * xmllint.c: workaround a MAP_FAILEd definition bug in DU-4.0
+
+Mon Aug 14 11:10:20 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Patch from Dave Yearke <yearke@eng.buffalo.edu>:
+ * testHTML.c: fix core dump on Solaris 2.x systems
+ * HTMLparser.c: fix segfault if ctxt->sax->characters() is NULL
+ * result/HTML/*.sax: previous bug fix lead to new results
+
+Mon Aug 14 10:26:09 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Patch from Albert Chin-A-Young <china@thewrittenword.com>:
+ * configure.in: added --with-readline=DIR to accept alternate
+ path for readline include/library
+ * configure.in: added AM_C_PROTOTYPES to add -Aa -D_HPUX_SOURCE
+ for ANSI under HP-UX
+ * config.in: Removed @LIBS@ from xml-config because @XML_LIBS@
+ includes @LIBS@
+
+Sat Aug 12 23:19:42 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* : rebuilt the docs
+ * getting ready for 2.2.2 release
+
+Sat Aug 12 16:42:37 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch]: added xmlGetFeaturesList() xmlGetFeature()
+ and xmlAddFeature()
+ * tree.[ch]: added xmlAddChildList()
+ * xmllint.c: MAP_FAILED macro test
+ * parser.h: added xmlParseCtxtExternalEntity()
+ * valid.c: applied bug fixes removed warning
+ * tree.c: added CDATA block to elements content
+ * testSAX.c: cleanup of output
+ * testHTML.c: added SAX testing
+ * encoding.c: better error recovery
+ * SAX.c, parser.c: fixed one of the external entity processing
+ of the OASis testsuite
+ * Makefile.am: added HTML SAX regression tests
+ * configure.in: bumped to 2.2.2
+ * test/HTML/ result/HTML: added a few of HTML tests, and added the
+ SAX results
+
+Fri Aug 4 11:21:50 PDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: patch for HP compiler
+
+2000-08-04 Sven Heinicke <sven@zen.org>
+
+ * xmllint.c: Was coredumping sometimes when the file given didn't
+ exist.
+
+Sat Jul 22 05:59:05 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c xmlIO.[ch]: fixed the problem of encoding support
+
+ when using in memory parsing. Need some cleanup.
+ * xmllint.c configure.in: added a --memory flag to test memory
+ parsing
+
+Fri Jul 21 17:09:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c: fixed socklen_t replacement to unsigned int
+ * parser.c: fixed a space handdling missing at the end of
+ production 28 DOCTYPE.
+ * xmlmemory.c: fixed a stupid bug on the routine to override
+ allocation functions
+ * TODO: updated
+
+Fri Jul 14 17:01:14 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/ regenerated the docs
+
+Fri Jul 14 16:12:20 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/encoding.html doc/xml.html: added I18N doc
+ * encoding.[ch] HTMLtree.[ch] parser.c HTMLparser.c: I18N encoding
+ improvements, both parser and filters, added ASCII & HTML,
+ fixed the ISO-Latin-1 one
+ * xmllint.c testHTML.c: added/made visible --encode
+ * debugXML.c : cleanup
+ * most .c files: applied patches due to warning on Windows and
+ when using Sun Pro cc compiler
+ * xpath.c : cleanup memleaks
+ * nanoftp.c : added a TESTING preprocessor flag for standalong
+ compile so that people can report bugs more easilly
+ * nanohttp.c : ditched socklen_t which was a portability mess
+ and replaced it with unsigned int.
+ * tree.[ch]: added xmlHasProp()
+ * TODO: updated
+ * test/ : added more test for entities, NS, encoding, HTML, wap
+ * configure.in: preparing for 2.2.0 release
+
+Mon Jul 10 16:17:18 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c: fixed the way the control connection is handled
+ * libxml.spec.in: fixed the dependencies and cleanup
+
+Mon Jul 3 14:37:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html: changed the xmlsoft.org structure, updated the
+ examples w.r.t. root and childs
+
+Sun Jul 2 20:51:43 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.spec.in: fixed bug #7419, dependencies fouled for libxml-devel
+
+Sun Jul 2 09:52:45 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: Work on character encoding support for the HTML parser
+ * HTMLparser.c: Fixed some autoopen/autoclose probs for the HTML parser
+ * encoding.c: Fixed a potential memleak in the encoding stuff
+
+Sat Jul 1 13:44:22 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/FAQ.html doc/Makefile.am : added a FAQ
+
+Fri Jun 30 20:29:08 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c HTMLtree.c SAX.c valid.c tree.h : more cleanup
+ of the HTML parser to force it to not bypass SAX
+
+Fri Jun 30 11:19:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * win32config.h.in: updated
+ * xmlversion.h.in: crap forgot to update this, this mean 2.1.0
+ lacks iconv support :-( need to release 2.1.1
+ * configure.in: release 2.1.1
+ * HTMLparser: fixed bug #14784
+ * xpath.c HTMLparser.c encoding.c parser.c: fix warning raised
+ by Windows compiler
+ * HTMLparser.c SAX.c HTMLtree.h tree.h: create HTML document in
+ the SAX startDocument() callback.
+ * TODO: updated
+
+Thu Jun 29 12:06:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added xmlStopParser()
+
+Wed Jun 28 23:10:26 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: 2.1.0 prerelease
+ * Large resync between W3C and Gnome tree
+ * nanoftp, nanohttp.c: fixed stalled connections probs
+ * HTMLtree.c SAX.c : support for attribute without values in
+ HTML for andersca
+ * valid.c: Fixed most validation + namespace problems
+ * HTMLparser.c: start document callback for andersca
+ * debugXML.c xpath.c: lots of XPath fixups from Picdar Technology
+ * parser.h, SAX.c: serious speed improvement for large
+ CDATA blocks
+ * encoding.[ch] xmlIO.[ch]: Improved seriously saving to
+ different encoding
+ * example/Makefile.am example/gjobread.c tree.h: work on
+ libxml1 libxml2 convergence.
+ * config.h.in parser.c xmllint.c: added xmlCheckVersion()
+ and the LIBXML_TEST_VERSION macro
+
+Fri Jun 23 22:26:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html: various patches and improvements typo fixed by
+ Felix Natter
+ * doc/libxml-doc.el: Emacs module to lookup the libxml documentation
+ from Felix Natter <fnatter@gmx.net>
+
+Sat May 6 10:09:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/upgrade.html: updated with instructions for support of both
+ libxml-1.x and libxml-2.x
+ * doc/gjobread.c : applied Todd Dukes <tdukes@ibmoto.com> patch
+ for 2.x support and also fixed includes
+
+
+Wed May 3 14:21:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * encoding.[ch], xmlIO.[ch], parser.c, configure.in : revamped
+ the encoding support, added iconv support, so now libxml if
+ compiled with iconv automatically support japanese encodings
+ among others. Work based on initial patch from Yuan-Chen Cheng
+ I may have broken binary compat in the encoding handler
+ registration scheme, but that was so utterly broken I don't
+ expect anybody to have used this feature until now.
+ * parserInternals.h: fixup on the CHAR range macro
+ * xml-error.h, parser.c: catch URL/URI errors using the uri.c
+ code.
+ * tree.[ch]: added xmlBufferGrow(), was needed for iconv
+ * uri.c: added xmlParseURI() I can't believe I forgot to
+ implement this one in 2.0 !!!
+ * SAX.c: moved doc->encoding update in the endDocument() call.
+ * TODO: updated.
+
+Mon Apr 24 13:30:13 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h: removed extraneous xmlRemoveProp definition
+ * TODO: added item about --disable-corba configure switch
+ * tree.c parser.c: fixed problems for xmlCopyDoc and postvalidation
+ * nanoftp.c: fixed include problems giving troubles on AIX and
+ slowlaris
+ * xmlIO.[ch] valid.h tree.[ch] xlink.c xmlmemory.c uri.c
+ parser.c nanoftp.c nanohttp.c SAX.c testSAX.c :
+ comment and headers changes to lower gtk-doc number of warnings
+ * doc/html/*: rebuilt docs
+
+Sun Apr 16 11:23:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HACKING: documented the tag for 1.x and instructions
+
+Wed Apr 12 15:47:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlIO.[ch] parser.[ch]: More interfaces for new I/O functions
+ xmlNewIOInputStream, xmlParserInputBufferCreateIO,
+ xmlCreateIOParserCtxt
+ * parser.c parserInternals.h: speedup of IS_CHAR like macros,
+ significant overall improvement
+ * xmllint.c: added I/O test to xmllint
+ * testSAX.c: added a speed test
+ * doc/* : updated/regenerated
+
+Sat Apr 8 14:54:54 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c uri.h parserInternals.h: cosmetic changes from
+ "Timur I. Bakeyev" <timur@bat.ru>, including making
+ xmlCreateURI() public
+
+Fri Apr 7 18:35:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlIO.[ch] parser.c: cleane up the xmlParserInputBuffer mess
+ and the code at the same time. Added a clean mechanism for
+ overload or added input methods: xmlRegisterInputCallbacks()
+ * tree.c: fixed xmlPrevSibling and xmlNextSibling per
+ Christophe Le Gal (Christophe.Le-Gal@imag.fr) input
+ * TODO: updated
+ * doc/* : updated/regenerated
+ * doc/Makefile.am: tweaks to avoid problem with libxml link in the
+ source dir
+
+Wed Apr 5 21:11:35 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * testURI.c: yet another forgotten commit, I should get some sleep !
+
+Wed Apr 5 20:36:46 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmllint.c: forgot to commit this too ?
+
+Wed Apr 5 16:22:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlversion.h.in : forgot to commit this previously
+
+Mon Apr 3 21:47:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: preparing libxml-2.0.0 version looks Ok so far
+ * README TODO: updated for release
+ * uri.c uri.h: added authority parsing/saving
+ * uri.c testURI.c Makefile.am: moved the testing code to testURI.c
+ * xmlversion.h.in configure.in nanoftp.[ch] nanohttp.[ch] encoding.h
+ debugXML.[ch] xpath.[ch] xmlIO.c tester.c testXPath.c testHTML.c
+ tree.c HTMLtree.c HTMLparser.c tree.c tree.h parser.c
+ Makefile.am : added compile-time customization of libxml
+ --with-ftp --with-http --with-html --with-xpath --with-debug
+ --with-mem-debug
+ * *.[ch] autoconf.sh : moved to an absolute adressing of includes :
+ #include <libxml/xxx.h> I hope it won't break too much stuff
+ and will be manageable in the future...
+ * xmllint.c Makefile.am libxml.spec.in : renamed tester.c to xmllint.c
+ and added xmllint to the installed programs
+ * uri.h: added xmlFreeURI()
+
+Fri Mar 24 14:35:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c uri.h: finished the escaping handling, the base support
+ and the URI path normalization. Looks good just lacks the
+ authority content parsing code.
+ * Makefile.am: added instructions to generate testURI
+ * TODO: updated
+ * doc/xml.html, doc/smallfootonly.gif doc/w3c.png: updated,
+ added links and icons for W3C and Gnome
+
+Mon Mar 20 14:05:26 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlmemory.[ch] : seems I forgot to actually update the files in
+ the last commit :-)
+ * doc/xml.html doc/html/* : updated and uploaded the docs
+
+Mon Mar 20 12:33:51 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * test/valid/dtds/xhtml*: removed RCS infos (pain with CVS)
+ * TODO: updated
+ * xmlmemory.[ch] : added xmlMemSetup() and xmlMemGet() to override
+ libxml default allocation function with another set (like gmalloc/
+ gfree).
+ * Makefile.am, uri.c, uri.h: added a set of functions to do
+ exact (litteraly copied from the RFC 2396 productions) parsing
+ and handling of URI. Will be needed for XLink, one XML WFC,
+ XML Base and reused in the nano[ftp/http] modules. Still work
+ to be done.
+
+Tue Mar 14 20:52:35 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, libxml.spec.in : libxml2
+ * doc/* : updated the doc page, rebuilt the docs
+
+Tue Mar 14 19:11:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * all: tagged LIB_XML_1_X
+ * *.c *.h : updated from W3C CVS tree
+ * configure.in : 2.0.0-beta
+ * libxml.spec.in : libxml2 package nam
+ * result/* : new version of the tests output
+
+Mon Mar 6 09:34:52 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html, doc/update.html: updated docs, 1.8.7
+
+Sat Mar 4 16:14:42 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* : rebuilt the docs
+ * parser.c: final patch on #6766
+ * valid.c: small patch on validity checks.
+
+Sat Mar 4 12:38:41 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/upgrade.html: instruction on how to upgrade from 1.x to 2.x
+ added
+ * parser.c: adding xmlKeepBlanksDefault() as a way to manage
+ compatibility w.r.t. XML spec and existing code.
+
+Thu Mar 2 04:45:15 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: seems a better solution to <a> </a> exists,
+ will try it for a while
+
+Thu Mar 2 02:26:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: tried to remove the <a> </a> generating <a/>
+ this is hard. Left a flag for that purpose. Fixed bug #6766
+ * configure.in: prepared 1.8.7 not released, due to previous
+ problem
+
+Thu Mar 2 03:03:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html : applied second patch from Paul DuBois
+
+Tue Feb 29 23:55:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html : applied patch from Paul DuBois
+
+Thu Feb 3 16:36:39 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c HTMLparser.c: do a bit of bufferization in push mode.
+
+Thu Feb 3 15:59:37 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c nanohttp.c tree.c HTMLtree.[ch] debugXML.c xpath.c: Fixed
+ compilation warnings on various platforms.
+ * parser.c: Fixed #5281 validity error callbacks are now desactived
+ by default if not validating.
+
+Thu Feb 3 13:46:14 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c, win32config.h.in: patches to compile on WIN32
+
+Wed Feb 2 22:51:16 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c: snprintf/sprintf patch courtesy George Katsirelos
+ <gkatsi@cs.toronto.edu>
+
+Mon Jan 31 18:58:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when
+ processing URLs
+
+Mon Jan 31 14:25:57 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.[ch]: cleanup, bug fixes, integration in rpmfind, added
+ xmlNanoFTPUpdateURL for persistent control connections.
+ * configure.in: 1.8.6
+
+Thu Jan 27 17:52:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.[ch], nanoftp.[ch]: cleanup, added proxy support
+ * tree.[ch] : added xmlSaveNoEmptyTags
+
+2000-01-29 James Henstridge <james@daa.com.au>
+
+ * nanoftp.c: include <netinet/in.h> for IPPROTO_TCP.
+
+ * Makefile.am: added nanoftp.[ch] to the build.
+
+Wed Jan 26 18:14:55 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.[ch]: cleanup, comments, API
+ * debugXML.c : fixed a bug in the cat command
+ * doc/*: regenerated the docs
+
+Wed Jan 26 16:52:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.[ch] parser.c xmlIO.[ch]: added a Nano FTP implementation
+ * debugXML.c : fixed a bug in the cat command
+ * valid.c: fixing some small probs
+ * libxml.spec.in: get rid of the SNAP suffix
+ * doc/xml.html: updated the status
+
+Mon Jan 24 14:31:09 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml-config.in: xml-config --version to just return the
+ version number
+ * xpath.c: some cleanup w.r.t. axis when the current node is
+ an attribute.
+ * TODO: updated
+
+Tue Jan 18 18:46:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: prepared for libxml-1.8.5
+ * doc/* recompiled the documentation
+
+2000-01-17 Jody Goldberg <jgoldberg@home.com>
+
+ * configure.in : WARNING autoconf subtlety alert :
+ Use AC_CHECK_HEADERS rather than AC_CHECK_HEADER
+ when looking for zlib.h so that HAVE_ZLIB_H is defined.
+ * config.h.in : Have a #undef for HAVE_ZLIB_H so that it will
+ get defined by AC_CHECK_HEADERS.
+
+Mon Jan 17 17:04:12 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: fixed a hideous bug in xmlGetProp() thanks to
+ Rune.Djurhuus@fast.no
+
+Sat Jan 15 15:09:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * TODO: updated
+ * tree.c, parser.c: made sure that only memory alloc problems
+ and internal parser errors are allowed to write to stdout or
+ stderr.
+
+Thu Jan 13 11:49:11 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c : restored xmlNewGlobalNs since this seems used by
+ a lot of existing code :-(, fixed a bug in xmlNewNs
+ * nanohttp.c: fixed a problem with INCLUDE_WINSOCK
+ * HTMLparser.c, parser.c, entities.c, valid.c : removed all calls
+ to exit() from the library code.
+ * xpath.c, parser.c: removed bugs or unused code detected by
+ Windows compilers
+ * parser.c: started adding interfaces for parsing well balanced
+ XML fragments
+ * configure.in: releasing 1.8.4
+ * doc/* : rebuilt the docs
+
+Sun Jan 9 23:03:20 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] : added xmlNewDocFragment() for DOM
+ * testHTML.c: uninitialized variable.
+
+Wed Jan 5 17:29:17 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* : rebuild the docs
+
+Wed Jan 5 17:08:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * acconfig.h: readline and history patch
+ * valid.[ch]: added xmlRemoveID() and xmlRemoveRef()
+ * tree.c: added check and handling when possibly removing an ID
+ * tree.c, HTMLparser.h, HTMLtree.h: fixed entities parsing
+ and saving.
+ * test/HTML/entities.html result/HTML/entities.html* : test for
+ various entities reference cases
+ * result/HTML/* : as a result output of some testcase have
+ changed
+ * HTMLparser.c, parser.c: fixed a bug in the push mode triggered
+ by previous example. added xmlParseTryOrFinish().
+ * xpath.h tree.h parser.h valid.h xmlIO.h xlink.h encoding.h
+ entities.h debugXML.h HTMLparser.h: changed the way struct are
+ declared to allow gtk-doc to expose those
+ * parser.c: closed bug #4960
+ * Makefile.am configure.in: Applied patch from
+ Albert Chin-A-Young <china@thewrittenword.com> for better zlib
+ and math/socket libs detection
+
+Mon Jan 3 18:29:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, Makefile.am: link tester against readline
+ * doc/xml.html doc/*/*: updated and rebuilt the documentation pages
+
+Mon Jan 3 11:58:05 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: added xmlRemoveProp
+ * win32config.h.in nanohttp.c: avoid including the Windows
+ socket stuff in every C files
+ * parser.c: removed an indetermination xmLDecl/PI(xml...) in
+ the XmL parser(s)
+ * test/ns4 result/ns4 etc...: added test case for previous prob
+ * tree.c: xmlNewNs wasn't checking for double definition
+ * Makefile.in: fixed a problem with dist-hook duplicates
+ * parser.[hc], xmlIO.c: fixed the loading of external entities
+ APIs, now xmlLoadExternalEntity() is used everywhere and
+ setting up an app specific front-end using the
+ * SAX.c parser.c: some fixes, now the xhtml spec validates
+ with the xhtml DTD.
+ * error.c: fixed crashes in case of no input stream
+ * test/valid/[dtds/]/xhtml* : added the xhtml spec and dtds
+ to the validation tests and results
+
+Wed Dec 29 15:29:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch] testHTML.c: added push mode for the HTML parser
+ too htmlCreatePushParserCtxt() and htmlParseChunk()
+ * parser.c: a bit of cleanup.
+ * SAX.c, HTMLparser.c: some attributes may not have values (contrary
+ to XML) removed the last mem leak known
+ * HTMLtree.c: output message cleanup
+ * xmlmemory.c: display content info about memory blocks
+ * result/HTML/wired.* : missing att value warning change
+
+Tue Dec 28 17:42:41 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* : rebuilt the documentation
+
+Tue Dec 28 18:44:22 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] parserInternals.h: Push parser for XML,
+ seems to work fine now
+ * tester.c debugXML.[ch]: Added an XML shell debug facility and
+ --push for push testing
+ * xpath.[ch] : cleaned up for Shell usage, added missing APIs
+ * testSAX.c: added --push
+ * HTMLtree.[ch] tree.[ch]: new functions for dumping parts of the
+ subtree
+ * xmlIO.[ch] : enriched API + fixes for push mode
+ * entities.[ch]: added the entity content length to the struct.
+ * xmlmemory.[ch]: new API to show the last entries for the shell
+ * valid.c: added required attribute testing
+ * SAX.c: the cdata callback now merge contiguous fragments
+ * HTMLparser.c: cleanup of some macros
+
+Wed Dec 22 12:20:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: fix for PIs name starting with xml
+ * tree.c: fixed a potential problem with || and && ops
+ * *.c, configure.in win32config.h.in : generate win32config.h for
+ those on the Other Side !
+
+Tue Dec 21 17:22:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: fixed a stupid = vs. == bug :-(
+ * doc/gnome-xml.sgml: s/glade/xml/
+
+Tue Dec 21 14:29:34 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, doc/xml.html : bug fix release 1.8.2
+ * debugXML.h nanohttp.h xml-error.h xmlmemory.h xpath.h :
+ Hopefully the end of that silly C++ include problem
+ * tree.[ch]: Added a few functions: xmlReplaceNode, xmlAddPrevSibling,
+ xmlAddNextSibling, xmlNodeSetName and xmlDocSetRootElement
+ * HTMLparser.c HTMLparser.h HTMLtree.c: When saving HTML try to avoid
+ troubles with autoclosed elements when the stree shape doesn't
+ follow the DtD specs. Added htmlIsAutoClosed() and
+ htmlAutoCloseTag()
+ * result/HTML/*.htm*: Updated the HTML examples regression tests output
+ * SAX.c tree.c: fixed bug on defaulting namespaces on attributes
+ * debugXML.c: fixed a bug on printing default namespaces.
+ * HTMLtree.c: fixed a problem when outputing XML parsed docs as HTML
+
+Mon Dec 20 16:20:55 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * result/HTML/*.htm[l] : updated the HTML regression tests according
+ to the new output
+ * xpath.h xml-error.h valid.h tree.h parser.h entities.h SAX.h
+ HTMLtree.h tree.c entities.c: headers tweakings to avoid a nasty
+ problem due to intermix of extern "C" { ... } declarations for C++
+ and recursive includes in the headers
+
+1999-12-20 Chris Lahey <clahey@umich.edu>
+
+ * HTMLtree.c: Made it so that html nodes with a single child do
+ not insert a carriage return before or after the child node.
+
+Sat Dec 18 16:07:03 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, doc/xml.html : bug fix release 1.8.1
+ * parser.c: fixed bug #4344
+ * xpath.h xml-error.h xlink.h nanohttp.h debugXML.h SAX.h HTMLparser.h
+ added the glue to avoid C++ problems
+ * doc/* : regenerated the documentation
+
+Thu Dec 16 16:19:29 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: fixed a bug introduced in 1.8.0 and breaking default
+ namespace recognition, and Dia as a resul :-(
+ * encoding.c: closed bug #3950
+
+Wed Dec 15 19:22:23 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * valid.c: debugging a posteriori validation, except URI expansion
+ stuff this should be fixed now
+ * parserInternals.h: fixed a bug in IS_BASECHAR reported by
+ Carl Nygard <cnygard@bellatlantic.net>
+ * tester.c: added --postvalid, cleaning of the code
+ * tree.[ch]: added xmlDocGetRootElement()
+
+Tue Dec 14 20:30:34 PST 1999 Ramiro Estrugo <ramiro@eazel.com>
+
+ * SAX.h, tree.h : changed 'namespace' to 'nameSpace' to workaround
+ c++ losage.
+
+Sun Dec 12 13:08:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, doc/xml.html : bumped to 1.8.0
+ * xlink.[ch], Makefile.am : added framework for link detection
+ * parser.h: added nbChars to parser context, needed for cleanup.
+ * xmlmemory.c: removed a nasty bug when out of mem
+ * valid.[ch]: adding namespace support for attribute decl
+ * tester.c: added --debugent option
+ * debugXML.[ch]: added xmlDebugDumpEntities()
+ * parser.c: cleanup, avoiding use of CUR_PTR like plague, using
+ buffers instead, this was really needed, validation was breaking
+ in strange ways due to that. Added xmlParseStringPEReference()
+ and other parsing from strings functions. Entities processing
+ modified again, but PERef are still not handled correcly but
+ unless you're Eve Maller you won't notice :-)
+ * HTMLparser.c: large changes toward reliability, and switched to
+ lowercase internal tags, XHTML is lowercase, so it will help
+ that output is closer to next version.
+ * doc/* : regenerated the documentation, it is now hosted at
+ http://xmlsoft.org/ (same bits I just bought the domain :-)
+
+
+Fri Dec 3 13:46:32 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.h, SAX.c, makefile.am: added SAX.h mostly useful for the
+ doc generation
+ * parser.c: fixed bugs #3908 and #3937 and a memory leak
+ in the SAX API
+ * doc/*: rebuilt the doc making sure everything appears in the
+ HTML files
+
+Wed Dec 1 10:27:47 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] HTMLtree.c, debugXML.c, configure.in, xml-config.in:
+ added the patch from Carl Nygard <cnygard@bellatlantic.net>
+ which allow impressive speed improvement on dataset with
+ large text pieces, but at the cost of broken binary
+ compatibility and slightly bigger memory usage.
+ Configure with --with-buffers to activate them, they
+ are protected with XML_USE_BUFFER_CONTENT define.
+ * entities.[ch], parser.c: added xmlCleanupPredefinedEntities(),
+ goal is 0 memory left allocated once parser is no more used
+ * testDAV.c, testHTML.c, testSAX.c, testXPath.c: make sure we
+ call xmlCleanupParser() and xmlMemoryDump()
+
+Wed Nov 24 19:00:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] xmlIO.[ch] parser.c valid.c: code cleanup with -pedantic
+ * parser.[ch] encoding.[ch]: added memory cleanup routines
+ * parser.c: closing bug #3788
+ * doc/*: rebuilt the doc
+
+Tue Nov 23 11:23:55 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: closing bug 3748, added xmlNewDocRawNode(),
+ xmlNewTextChild() and xmlSetCompressMode() behaviour.
+ * tester.c: added --compress option
+ * doc/*: rebuilt the documentation
+
+Fri Nov 19 18:41:28 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: bugfixing, the damn thing MUST not crash even
+ if given /proc/kcore as input !
+ * doc/xml.html doc/*: updated and rebuilt the documentation
+
+Thu Nov 18 14:57:18 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: Fixed some wrongly space collapsing code due to
+ a misreading of the spec.
+ * result/*: fixed the output accordingly
+
+Wed Nov 17 18:28:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * encoding.c: bug fix and typos
+ * xmlIO.[ch] parser.c: first bits toward real progressive parsing
+ * parser.c: added attribute normalization closing bug #3597
+ * test/att* result/att* SAXresult/att*: testcase for attribute
+ normalization
+
+Mon Nov 15 18:50:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: closing bug #3163 by adding extra flags for the
+ cc compiler on HP-UX
+
+Fri Nov 12 17:41:20 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * valid.[ch] : removed a typo and an enumerated type bug in the
+ xmlAddElementDecl() function
+ * tree.c : I changed xmlSetProp() and xmlNewProp() to do the
+ call to xmlEncodeEntitiesReentrant() so that the functions
+ New, Set and Get are at the same level.
+ * parser.c HTMLparser.c: extra memory allocation bug for
+ attributes detected by someone using libxml in embedded systems :-)
+
+Thu Oct 28 17:49:26 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlmemory.h: turned off mem debug :-\
+
+Mon Oct 25 12:13:25 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: closed bug #2784 a one line fix, but worth pushing
+ a new release out
+ * HTMLparser.c: fixed auto-close bugs on list items, zeroing
+ some structures, comments before and after the
+ main element, and other nastyness
+ * HTMLtree.c tree.c: accomodate the extended HTML supported
+ * configure.in: pushing 1.7.4
+ * test/ent8 and related outputs : added a new test for bug #2784
+ * test/HTML/wired.html and related output: a nasty HTML example
+ * Makefile.am: improved the test scripts
+ * docs/* : reran the documentation extractor, updated xml.html
+
+Thu Oct 14 10:29:56 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c, HTMLtree.c, tree.h: completely revamped the
+ HTMLparser and debugged the HTML related code. HTML documents
+ now have their own type
+ * entities.c: do not dump &apos; for HTML output
+ * xmlmemory.c: improvement, breakpoint mechanism
+ * testHTML.c: added --sax --repeat ...
+ * Makefile.am: improved the HTML tests
+ * valid.[ch]: added xmlValidGetValidElements and
+ xmlValidGetPotentialChildren
+ * tester.c: added --insert to test the 2 new functions
+ * test//* result//* SAXresult//* : regression test cleanup
+ and extension.
+ * doc/html : added doc for new modules gnome-xml-xmlmemory.html and
+ gnome-xml-nanohttp.html
+
+Mon Oct 11 14:31:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: fixed problems with some autoclose tags
+ * tree.c: fixed XML output problems.
+ * result/* SAXresult/*: update of the tests output
+
+Sat Oct 9 11:02:57 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am: Arturo patch for xmlConf.sh version info
+ * parser.c: Tim Josling patch for single quoted items
+ * tester.c: Tim Josling patch for tester options usage
+ * tree.h: indent cleanup
+
+Fri Oct 8 16:35:37 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c parser.h : Fixed problems with HTML parsing
+ reported by Kristian Hogsberg Kristensen <hogsberg@daimi.au.dk>
+
+Fri Oct 8 11:37:11 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c : Raph patch for initialization of CORBA fields
+ * parser.c, xpath.c, ...: modification of doc comments
+ * xpath.c : allow spaces in xpath expressions
+
+Mon Sep 27 10:16:43 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlmemory.h: turning off memory debug :-(
+
+Sun Sep 26 13:16:54 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] : added xmlSAXUserParseFile() and xmlSAXUserParseMemory()
+ better SAX interfaces.
+ * testSAX.c: uses the new SAX routine, avoid fetching any remote
+ entity.
+ * configure.in: 1.7.2
+
+Fri Sep 24 16:01:01 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.spec.in: fixed the URL
+ * doc/xml.html: improved the documentation front-end
+
+Fri Sep 24 01:06:36 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c: conditionned references to snprintf with HAVE_SNPRINTF
+
+Fri Sep 24 00:15:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.spec.in: fixed the alpha compile problem
+ * parser.[ch]: changed errno to errNo in the parser context :-(
+ * *.[ch]: changed CHAR to xmlChar to avoid problem on WIN32
+ * doc/xml.html: changed CHAR to xmlChar
+ * doc/html/*: recompiled the documentation
+ * configure.in: 1.7.1
+
+Wed Sep 22 11:40:31 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.h: modified the parser context struct to regain 1.4.0
+ binary compatibility
+ * parser.c, xml-error.h: added errno ot teh context and defined
+ a set of errors values with update of errno
+ * nanohttp.[ch]: minimalist HTTP front-end for fetching remote
+ DTDs and entities
+ * *.h, *.c: complete cleanup of the use of config.h and include
+ protection depending on the current setup.
+ * overalll debugging, maintenance and bug-fixing on all modules
+ * updated the documentation
+ * ready for 1.7.0
+
+Wed Sep 8 22:46:14 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c : cleanup
+ * SAX.c valid.c valid.h: added ID/IDREF checking
+ * tree.c tree.h: extended doc structure for refs
+ * configure.in: 1.6.2
+ * parser.c: patched bug in SAX user arg call
+ * parserInternals.h: patched missing close in C++ wrapping
+ * testXPath.c xpath.c xpath.h: prepared for extensibility,
+ especially upcoming XPointer implementation.
+ * doc/xml.html: augmented, typo
+
+Sat Sep 4 22:48:05 CEST 1999 Timur Bakeyev <mc@bat.ru>
+
+ * doc/Makefile.am: replaced "install -d " with "mkinstalldirs" -
+ not all invocations of install understand -d.
+
+Sat Sep 4 22:20:07 CEST 1999 Timur Bakeyev <mc@bat.ru>
+
+ * Makefile.am: prepend all the test* calls with $(top_builddir) -
+ to make 'check' works, when builddir != srcdir.
+
+Sat Sep 4 20:25:46 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html : updated the documentation
+
+Fri Sep 3 00:01:08 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlmemory.[ch] Makefile.am :added a memory wrapper to chase
+ not deallocated memory blocks
+ * *.c : replaces all calls to malloc() free() and realloc() to
+ the wrapper functions/macros
+ * tree.c : removed memory leaks dues to calling xmlFreeNode()
+ instead of xmlFreeNodeList()
+
+Wed Sep 1 14:15:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: corrected a stupid bug leading to core dump at
+ tree deallocation. Removed warnings indicated by
+ Stephane.Conversy@lri.fr
+ * entities.c: Fixes Yet Another Stupid Bug, entities were not
+ looked for in the external subset
+
+Mon Aug 30 13:22:26 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c valid.[ch] xpath.c: patched compilation warnings reported
+ on SGI by Stephane.Conversy@lri.fr
+
+Sun Aug 29 22:27:29 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * all .h : changed the prototype declaration indent as in gtk
+ * most .c : working on reducing the TODOs in the code
+ * most .c : cleanup though -pedantic and Insure++
+ * improvements on validation ID checkings.
+ * tree.[ch] SAX.c: added support for namespace on attributes #2022
+ * xml-config.in: closed #1810
+
+Mon Aug 16 03:27:38 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h, valid.c, valid.h: more work on validity, IDs
+ * xpath.c: added/fixed comparidon and equlity, added a new isinf
+ definition for AIX
+
+Sun Aug 15 21:15:17 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am libxml.spec.in: corrected missing xmlConf.sh in
+ the distribution due to a cut'n paste error at last commit
+
+Tue Aug 10 20:28:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: upgraded to version 1.4.0
+ * valid.[ch], SAX.c, parser.[ch] parserInternals.h ...
+ Big update, added a large part of the validation process,
+ it should be usable, but some parts are missing
+ * xpath.c: improved the implementation w.r.t. root.
+ * Makefile.am: added more tests
+ * test and result trees: added a lot of tests
+ * libxml.spec.in: export libxml.so.0 and libxml.so.1
+
+Tue Aug 10 11:33:41 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Added an HACKING file
+
+Tue Jul 27 21:43:00 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.[ch] : improvements and debug of the XPath implementation
+ * parser.c, HTMLparser.c : modified the parsers to be progressive
+ * tree.[ch] : extended the Buffer promitives
+ * xmlIO.[ch] : added basic I/O routines providing progressive
+ parsing and ready for I18N conversion plugins
+ * SAXresult/* : the SAX callback sequence maybe slightly different
+ now
+ * test*.c : improved/updated the tests programs
+ * doc/* : recompiled the docs.
+
+1999-07-26 Michael Meeks <michael@edenproject.org>
+
+ * tree.h: Add const to 'content' in xmlNewDocNode, xmlNewChild
+
+ * tree.c: Ditto.
+
+Thu Jul 15 16:17:16 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: upgraded to version 1.4.0
+ * xpath.c, xpath.h, testXPath.c, makefile.am: added code for the XPath
+ draft from W3C. Will be used by XPointer, Xlink, XSL, and possibly
+ XML query language, see http://www.w3.org/TR/xpath for more details.
+ * parser.c, parser.h: added CHAR* related string functions for XPath
+ * HTMLparser.[ch], HTMLtree.c: a bit of cleanup on entities.
+ * doc/gnome-xml.sgml, doc/html/* : added XPath and HTML documentation,
+ rebuild the docs.
+ * Makefile.am, test/XPath/*, result/XPath/*: added an XPathtests target
+ and regression testing capabilities for XPath.
+
+Mon Jul 12 12:36:39 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, HTMLparser.c: applied patch from John Ellson <ellson@lucent.com>
+ closing bug #1646
+
+Mon Jul 12 11:04:44 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am, example/Makefile.am: closed bug #1683
+
+Sun Jul 11 18:16:34 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * example/Makefile.am, configure.in: added the makefile for the
+ gjobread example
+
+Sat Jul 10 14:19:11 CEST 1999 Tomasz K³oczko <kloczek@pld.org.pl>
+
+ * doc/Makefile.am:
+ - fix which allow "make install DESTDIR=</install/prefix>".
+
+Fri Jul 9 12:10:24 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c parser.c: applied patch from John Ellson <ellson@lucent.com>
+ which fixed a problem on the file reading-code.
+
+Wed Jul 7 09:28:43 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch], HTMLtree.[ch]: more work for HTML parsing and
+ output.
+ * Makefile.am, test/HTML/*, result/HTML/*: added HTMLtests targetestHTMLt
+
+Wed Jul 7 00:25:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.h : Oops removed the binary compatibility problem
+ * HTMLparser.[ch], HTMLtree.h : More work on the HTML parse/dump
+ * parser.c, HTMLparser.c: applied patches for reading from stdin
+
+Mon Jul 5 18:45:31 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, entities.c, valid.c: cleanup bug #1591
+ * configure.in: cleanup bug #1592
+ * HTMLparser.[ch], testHTML.c: started adding an HTML parser using
+ the same tree back-end. Hence gdome will be available for it.
+ * doc/Makefile.am: close bug #617
+
+Sat Jun 26 23:36:38 EDT 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: alloctate a per parser context SAX interface block
+
+Tue Jun 22 23:46:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * released 1.3.0 with xmlEncodeEntities restoring old behaviour
+ and xmlEncodeEntitiesReentrant with the correct one :-\
+
+Mon Jun 21 14:07:53 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * commit of my internal XML base changes, quite a lot of
+ changes, cleanups, better entities support, framework for
+ new I/O and charset detection and handling
+ * Fixed the configure/Makefile stuff to generate shared libs
+ with the proper version info, so we jumped on rev from
+ 0.0.0 to 1.2.0 ! The binary interfaces have been broken,
+ xmlEncodeEntities() result need to be freed now, and a string
+ xmlParserVersion provide the current library version.
+
+Tue Jun 15 14:24:19 1999 Raph Levien <raph@acm.org>
+
+ * parser.c: fixed a buffer overrun for when you have a very long
+ attribute with no entities in it.
+
+Mon Jun 14 00:17:50 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added example directory
+ * added example/gjobs.xml gjobread.c, still need a Makefile.in
+
+Wed Jun 2 19:40:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Release of libxml-1.1, nearly everything has been touched for
+ this.
+ * Added more regression tests
+ * Updated the documentation
+
+Sat May 29 13:34:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: unified the XML_NO_CORBA defines.
+ * parser.c encoding.[ch]: started plugging in char encoding detection
+
+Fri May 28 22:58:42 EDT 1999 Manish Vachharajani <mvachhar@vger.rutgers.edu>
+
+ * tree.c: (xmlSaveFile) - removed double call of xmlContentDump.
+ Also freed allocated buffer.
+
+Wed Apr 21 22:07:35 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+ * parser.[ch] tree.[ch] entities.[ch] valid.[ch] : removed the main
+ reentrancy problem at printing. One is left in entities.c, to
+ remove ASAP
+ * testSAX.c : added a test example showing the use of the SAX
+ interface if one doesn't want to build the DOM tree.
+ * html/gnome-xml-*.html html/index.sgml: regenerated the documentation
+
+Mon Apr 5 14:14:40 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] tree.[ch] SAX.c, parserInternals.h valid.[ch]:
+ large revamping of the parser to use SAX callbacks
+ http://www.megginson.com/SAX/ (or at least a C like interface
+ a la Expat). It's now possible to set up your own callbacks
+ and the parser will not build a DOM tree.
+ * test/* result/*: updated the test suite, I finally removed
+ the old Namespace draft support (PI based).
+
+Fri Apr 2 17:57:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am: added test result to EXTRA_DIST for make tests
+
+Wed Mar 24 21:37:02 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, parserInternals.h: moved the chars macro definitions
+ to parserInternals.h
+ * parser.c, error.c: applied patches from "Knut Åkesson"
+ <ka@s2.chalmers.se> for clean compilation under MSVC 6 :-o
+
+Tue Mar 23 11:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml-config.in : applied patch to make --version work
+
+1999-03-05 Raja R Harinath <harinath@cs.umn.edu>
+
+ * Makefile.am (check-local): Alias for `tests' target. This will
+ cause `make check' to do the right thing.
+ (tests): Don't run tests in srcdir. Also, replaced calls to
+ basename with a `sed' "equivalent".
+
+Fri Mar 5 07:23:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Renamed error.h to xml-error.h, corrected Makefile.am to list
+ it in the header and not the sources, updated the doc.
+ Thanks to Tim Mooney <mooney@dogbert.cc.ndsu.nodak.edu> for
+ pointing this out.
+
+Mon Mar 1 13:27:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, parser.h, parserInternals.h: memory leak hunting,
+ exported the inputStream routines.
+ * doc/html/* : updated accordingly
+
+Sun Feb 28 22:51:33 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, parser.h, parserInternals.h: added a few extra
+ internal calls to allocate and free parser contexts ...
+ * doc/html/* : updated accordingly
+
+Thu Feb 25 11:52:24 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, Makefile.am, doc/makefile.am : General changes for
+ 1.0.0 release and including the generated HTML documentation.
+
+Thu Feb 25 09:44:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * makefile.am : added parserInternals.h, oops.
+
+Mon Feb 22 11:24:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parserInternals.h: added this header giving access to the parser
+ internal functions.
+ * doc/Makefile.am : added a rebuild target which rebuilds the full
+ set of documentations
+ * parser.[ch] tree.[ch] valid.[ch]: serious updates w.r.t. parsing
+ the internal subset.
+ * *.c *.h: modifications needed to generate the documentation using
+ gtk-doc, cleanup of functions blocks, reorganisation of struct
+ declarations.
+
+Tue Feb 16 17:27:29 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am, spec, doc/Makefile.am : upgrading to 0.99.8, fixing
+ the tar and spec file to include the beginning of the doc.
+
+1999-02-13 Nuno Ferreira <nmrf@rnl.ist.utl.pt>
+
+ * doc/.cvsignore: Added this file.
+
+Mon Feb 8 19:27:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: fixed xmlGetProp to return "" when the attribute
+ exists, even if the node-list is NULL.
+
+Mon Feb 8 16:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: patched an error outputting empty attribute values.
+ * Makefile.am and doc/makefile.am: have been updated during the
+ week-end. Sorry for an empty CVS log, I got a shell problem.
+
+Mon Feb 1 12:10:13 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h: cleaned up using enums instead of defines
+ * parser.c, valid.[ch]: more work on parsing/output of element
+ declarations
+
+Sun Jan 31 22:06:48 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * valid.[ch], tree.c, parser.c : more work toward full parsing
+ of XML DTDs.
+ * README: added informations about mailing-list and on-line
+ documentation
+
+1999-01-27 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (XML_INCLUDEDIR): Use -I not -L for includes.
+
+Sun Jan 17 20:06:36 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, tree.[ch] : more work toward conformance testing,
+ added a last element to accelerate parsing of very flat structures
+ started working on internal subset Element content declaration.
+ * valid.[ch] : first cut at adding code toward validation.
+ * previous changes had also small impact on most files, especially
+ the conformance testing using James Clark test suite.
+
+Sun Jan 17 14:45:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * test/* : updated the examples, most of them were not well
+ formed (humm), and added rdf2.
+ * result/* : resulting changes in the output.
+
+Sun Dec 6 13:06:58 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: changed the behaviour of xmlGetProp on NULL values.
+
+Sat Dec 5 12:25:09 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: patched a bug in the generation of empty attributes
+
+Fri Nov 27 01:36:54 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.[ch], tree.[ch], tester.c: added copy interfaces
+ for node/trees/documents/... Biggest problem is namespace
+ support when copying subtrees.
+
+Sun Nov 15 19:59:47 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, entities.c: improve entities and char ref encoding,
+ and cleanups of error messages.
+
+Fri Nov 13 13:03:10 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, entities.c: simple bug hunting done during rpm2html and
+ rpmfind integration.
+
+Sun Nov 8 13:11:07 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch]: Added interfaces allowing to specify a SAX
+ handler before parsing.
+
+Sun Nov 8 09:39:17 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: redirrect all errors reporting through the SAX
+ error function
+
+Wed Nov 4 14:21:54 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.c: rather use HAVE_SNPRINTF and not depend on glib
+ * libtool, tlmain ...: update of the libtool files
+
+1998-11-04 Miguel de Icaza <miguel@nuclecu.unam.mx>
+
+ * entities.c: Use g_snprintf insteda of snprintf.
+
+Sun Nov 1 14:31:06 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.c, parser.c: debug and cleanup of CharRef handling/saving.
+ added ent5 test for this purpose.
+ * parser.c, parser.h: formatting, comments and UTF-8 planning.
+
+Fri Oct 30 01:36:52 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: fixed? a strange error due to compression on a GWP
+ document.
+
+Thu Oct 29 00:48:45 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: bug fixing
+ * entities.[ch]: defined a specific type for predefined entities
+ * doc/xml.html: more documentation on the library, how to use it,
+ overview of the interfaces.
+
+Wed Oct 28 17:56:35 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: more cleanup on the API, made the tree mor conformant.
+
+Tue Oct 27 17:54:00 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: corrected a small bug
+ * doc/xml.html: continuing writing documentation.
+
+Tue Oct 27 17:54:00 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * debugXML.h debugXML.c: added debugging utilities.
+ * tester.c: added --debug switch.
+ * tree.c: patched an incorrect node->type assignment.
+ * parser.c: formatting, ensure that node->doc != NULL in attributes
+
+Tue Oct 27 01:15:39 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] SAX.c tree.[ch]: large amount of changes to improve
+ entity support and provide an internal representation close to
+ DOM one (entity ref nodes, and attribute value as tree). I tried
+ to preserve the interface but this will surely break some apps
+ (I have to change rpm2html/rpmfind for example). I had to change
+ two interfaces, and the generated tree is somewhat different.
+ * doc/* : started documenting the XML library, the tree and
+ DOM/Corba. This is a first step.
+
+Sat Oct 24 14:23:51 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: Set up the fonctions comment block, boring but useful.
+ * parser.h, SAX.c, parser.c: now attributes are processed through
+ the SAX interface. The problem is that my SAX interface diverged
+ quite a bit from the original one, well this is not an official
+ spec, and translating it from Java to C is hairy anyway...
+
+Tue Oct 20 02:11:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.c, entities.c, tree.c, encoding.c, error.c: Set up the
+ fonctions comment block, boring but useful.
+
+Sun Oct 18 20:40:58 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * encoding.[ch], Makefile.am: Added the UTF-8, UTF-16 and ISO Latin 1
+ conversion routines. However they are not yet used to convert the
+ inputs. The core will run with UTF-8.
+
+Sun Oct 18 15:08:19 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c : make sure that the type id is properly set-up when
+ a new object is allocated, needed for DOM.
+
+Sat Oct 17 02:43:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h, tree.c: Ok, the main objects in the tree will be native
+ corba objects, it costs 8 bytes per Node, Attribute and Document
+ but it simplifies the Corba integration a lot (no extra interface
+ objects to allocate/free).
+
+Tue Oct 13 21:46:57 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h, tree.c, parser.c: added prev and doc pointers to Node,
+ and changed NODEs contants for conformity with DOM Level 1
+
+Wed Oct 7 23:42:46 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added hooks to keep track of servants when creating objects
+ xmlDoc and xmlNode (for Corba export).
+
+Sun Oct 4 03:18:09 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added xml-config script.
+
+Thu Oct 1 16:22:37 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * autogen.sh : applied patch from Frederic Devernay <devernay@istar.fr>
+ to autoupdate libtool and automake conf files.
+
+1998-09-30 Miguel de Icaza <miguel@nuclecu.unam.mx>
+
+ * Makefile.am: Use '?' to separate the sed
+ commands as ',' is used when people pass -Wl,something.
+
+
+Thu Sep 24 15:13:29 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c, tree.h: added a per-document compression interface.
+
+Tue Sep 22 20:47:38 EDT 1998
+
+ * tree.c, tree.h: added saving with compression and added interfaces
+ to control the compression level (xmlGetCompressMode,
+ xmlSetCompressMode) and a new save to filename function (xmlSaveFile).
+
+Mon Sep 21 20:11:13 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: corrected a loop for files of size 0
+
+1998-08-20 Raja R Harinath <harinath@cs.umn.edu>
+
+ * error.h: New file. Contains prototyes from `error.c'.
+
+Thu Aug 13 19:02:34 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (xmlincdir): New macro.
+ (xmlinc_HEADERS): Renamed from include_HEADERS.
+
+Thu Aug 13 00:40:14 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * applied small patch on numeric entities from
+ Christopher Blizzard <blizzard@appliedtheory.com>
+
+Wed Aug 12 23:12:58 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * New release 0.2, removed the old xml_* files so that it's
+ coherent with the other CVS base (W3C), far better conformance
+ to standard, new namespaces, decent entities support, beginning
+ of a SAX-like interface. Nearly nothing left intact, even the
+ test examples ...
+
+1998-07-30 Christopher Blizzard <blizzard@appliedtheory.com>
+
+ * .cvsignore: Add .deps dir
+
+Sun Jul 26 17:29:52 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml_tree: changed the memory allocation scheme for name in xmlNewNode
+
+Sun Jul 26 00:17:51 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: added test for CPP
+ * AUTHORS, Changelog: the original ones didn't get commited but the
+ glib ones instead, fixed.
+ * Makefile.am: corrected an error in library naming
+
+Fri Jul 24 16:47:14 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * integrated code developped at W3C
+ * changed the original Copyright
+ * migrated to automake
+ * prefixed the filenames by xml_ to avoid filename clashes
+
+Mon Jan 6 12:05:12 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/tutorial/* : fixed #101894 if doc == NULL xmlFreeDoc
+ should not be called.
+
+Mon Jan 6 11:59:09 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * libxml-2.0.pc.in: applied the patch to fix #101894
+
+Sun Jan 5 23:35:47 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c : applied patch from Lukas Schroeder for register callbacks
+ * valid.c: modified patch from Lukas Schroeder to test
+ register callbacks with --chkregister
+
+Sun Jan 5 02:23:20 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: seriously changed the way data are pushed to
+ the underlying parser, go by block of 512 bytes instead of
+ tryng to detect tag boundaries at that level. Changed the
+ way empty element are detected and tagged.
+ * python/tests/reader.py python/tests/reader2.py
+ python/tests/reader3.py: small changes mostly due to context
+ reporting being different and DTD node being reported. Some
+ errors previously undetected are now caught and fixed.
+ * doc/xmlreader.html: flagged last section as TODO
+
+Sat Jan 4 20:40:28 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.py: integrated the Python 2.2 optimizations
+ from Hannu Krosing, while maintaining compatibility with
+ 1.5 and 2.1
+
+Sat Jan 4 17:33:17 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: a bit of cleanup
+ * xmlreader.c: small fix
+ * doc/xmlreader.html: more work on the XmlTextReader tutorial
+ * python/libxml.py: a few fixes pointed out by Hannu Krosing
+
+Sat Jan 4 13:46:14 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * python/setup.py.in: patch from Stéphane Bidoul to include
+ drv_libxml2.py in setup.py
+
+Sat Jan 4 01:43:06 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xmlreader.html: starting documenting the new XmlTextReader
+ interface.
+
+Fri Jan 3 17:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: added the --stream flag to use the TextReader API
+ * xmlreader.c: small performance tweak
+
+Fri Jan 3 13:50:55 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader2py: okay the DTD validation
+ code on top of the XMLTextParser API should be solid now.
+
+Fri Jan 3 02:17:18 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader2py: Fixing some more mess
+ with validation and recursive entities while using the
+ reader interface, it's getting a bit messy...
+
+Thu Jan 2 15:15:26 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: another couple of problem
+ related to IsEmptyElement reported by Stéphane Bidoul needed
+ some fixes.
+
+Thu Jan 2 13:57:07 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in python/Makefile.am python/drv_libxml2.py:
+ integrated drv_libxml2.py Python xml.sax driver from Stéphane Bidoul
+ based on the python XmlTextReader interface.
+
+Wed Jan 1 22:05:40 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: backing out one change in the last patch which broke the
+ regression tests
+
+Wed Jan 1 21:57:28 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * global.data globals.c tree.c include/libxml/globals.h: applied
+ an old patch from Lukas Schroeder to track node creation and
+ destruction. Probably missing a lot of references at the moment
+ and not usable reliably.
+
+Wed Jan 1 20:12:07 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS doc/Makefile.am doc/news.xsl: generate the NEWS file
+ from doc/news.html and a stylesheet
+
+Wed Jan 1 16:09:57 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed another couple of
+ xmlreader bugs reported by Stéphane Bidoul and added tests.
+
+Wed Jan 1 15:42:54 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader2.py: fixed another validity
+ checking in external parsed entities raised by Stéphane Bidoul
+ and added a specific regression test.
+ * python/tests/reader3.py: cleanup
+
+Tue Dec 31 15:44:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader2.py: fixed a problem with
+ validation within entities pointed by Stéphane Bidoul, augmented
+ the tests to catch those.
+
+Tue Dec 31 12:15:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py: modified the generator to allow keeping
+ class references when creating new classes, needed to fix a bug
+ pointed by Stéphane Bidoul where the input buffer of the
+ xmlTextReader instance gets destroyed if the python wrapper for
+ the input is not referenced anymore.
+
+Mon Dec 30 19:39:36 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed another pair of problem
+ pointed by Stéphane Bidoul: depth start at 0 and a parse problem.
+
+Mon Dec 30 13:36:50 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed another problem
+ pointed by Stéphane Bidoul
+
+Mon Dec 30 12:39:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed a limit case problem
+ with "<a/>"
+
+Mon Dec 30 11:53:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: warn on xmlns:prefix="foo"
+ * xmlreader.c python/tests/reader.py: fixed a couple of problem
+ for namespace attributes handling.
+
+Mon Dec 30 00:59:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c parser.c tree.c include/libxml/entities.h: Fixed
+ a really nasty problem raised by a DocBook XSLT transform
+ provided by Sebastian Bergmann
+
+Sun Dec 29 12:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c python/tests/reader.py: fixed a bug pointed out
+ by Stéphane Bidoul and integrated it into the tests
+
+Sat Dec 28 23:49:12 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml:
+ extended the XmlTextReader API a bit, addding accessors for
+ the current doc and node, and an entity substitution mode for
+ the parser.
+ * python/libxml.py python/libxml2class.txt: related updates
+ * python/tests/Makefile.am python/tests/reader.py
+ python/tests/reader2.py python/tests/reader3.py: updated a bit
+ the old tests and added a new one to test the entities handling
+
+Sat Dec 28 22:11:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml2class.txt
+ python/tests/reader.py python/tests/reader2.py: changed the
+ generator to provide casing for the XmlTextReader similar to
+ C# so that examples and documentation are more directly transposable.
+ Fixed the couple of tests in the suite.
+
+Sat Dec 28 15:55:32 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/guidelines.html: added a document on guildeline for
+ publishing and deploying XML
+
+Fri Dec 27 20:35:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c xmlreader.c: final touch running DTD validation
+ on the XmlTextReader
+ * python/tests/Makefile.am python/tests/reader2.py: added a
+ specific run based on the examples from test/valid/*.xml
+
+Fri Dec 27 15:17:20 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.py: added a few predefined xmlTextReader parser
+ configuration values.
+
+Fri Dec 27 12:57:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml_wrap.h: trying to fix #102037
+
+Fri Dec 27 12:18:14 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fixing bug #95296, when the predefined entities
+ are redefined in the DTD the default one must be used
+ instead anyway.
+
+Wed Dec 25 19:22:06 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.xml
+ * doc/xmllint.1
+ Add discussion of XML_DEBUG_CATALOG to xmllint man
+ page - bug #100907
+
+
+Mon Dec 23 16:54:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: Fixed the empty node detection to avoid reporting
+ an inexistant close tag.
+
+Mon Dec 23 15:42:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c python/setup.py.in: patch from Stéphane Bidoul
+ for Python 2.1
+
+Sun Dec 22 11:24:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * testC14N.c vms/config.vms: applied Craig A. Berry patches for VMS
+
+Fri Dec 20 11:27:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/libxml2-api.xml python/tests/reader.py: one really need
+ to provide the base URI information when creating a reader parser
+ from an input stream. Updated the API and the example using it.
+
+Fri Dec 20 01:11:30 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * testReader.c xmlreader.c valid.c include/libxml/tree.h
+ include/libxml/valid.h include/libxml/xmlreader.h: working on
+ DTD validation on top of xml reader interfaces. Allows to
+ validate arbitrary large instances. This required some extensions
+ to the valid module interface and augmenting the size of xmlID
+ and xmlRef structs a bit.
+ * uri.c xmlregexp.c: simple cleanup.
+
+Wed Dec 18 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: more
+ work on the xml reader interfaces.
+ * AUTHORS MAINTAINERS doc/* win32/*: updated Igor's mail and the
+ Web page for the Windows binaries.
+
+Tue Dec 17 19:31:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: applied a patch for VMS following the report by
+ Nigel Hall
+
+Tue Dec 17 11:29:41 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: the parseStartTag bug fix wasn't complete.
+
+Mon Dec 16 23:00:05 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Vyacheslav Pindyura managed to trigger a bug in
+ parseStartTag, fixing it.
+ * test/att4 result/att4 result/noent/att4: adding the test
+ * xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
+ more methods to XmlTextReader.
+
+Mon Dec 16 19:31:16 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: added more xml reader exports
+ * win32/Makefile.msvc win32/Makefile.mingw: added xml reader interface
+ to the build
+
+Mon Dec 16 06:36:54 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/xmltutorial.xml
+ plus generated html and pdf
+ Updating tutorial again based on further comments from Niraj
+ Tolia on the last iteration
+
+Sun Dec 15 21:27:30 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/xmltutorial.xml
+ * doc/tutorial/includekeyword.c
+ * doc/tutorial/includegetattribute.c
+ plus generated html and pdf
+ Adding fix from Niraj Tolia to tutorial to properly free memory.
+
+
+Mon Dec 16 00:34:25 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
+ more methods of XmlTextReader.
+ * python/libxml2class.txt python/tests/reader.py: this increased the
+ methods in the bndings, augmented the test to check those new
+ functions.
+
+Sat Dec 14 23:57:39 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c doc/libxml2-api.xml: added the close and getattribute
+ methods of XmlTextReader.
+ * python/generator.py python/libxml_wrap.h python/types.c
+ python/libxml2class.txt: added the reader to the Python bindings
+ * python/tests/Makefile.am python/tests/reader.py: added a specific
+ test for the Python bindings of the Reader APIs
+ * parser.c: small cleanup.
+
+Fri Dec 13 11:39:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: fallback was only copying the first child not the
+ full child list of the fallback element, closes #89684 as reopened
+ by Bernd Kuemmerlen
+
+Thu Dec 12 13:34:59 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: exported htmlNodeDumpOutput
+
+Thu Dec 12 10:59:11 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing release of 2.4.30
+ * doc/apibuild.py doc/libxml2-api.xml: fixups to the api builder,
+ gives enum values, fix functype return type, put back fields in
+ structs
+ * doc/*: updated the docs rebuilt
+
+Thu Dec 12 01:09:34 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c include/libxml/HTMLtree.h: patch from Mark Vadok
+ about htmlNodeDumpOutput location.
+ * xpath.c: removed an undefined function signature
+ * doc/apibuild.py doc/libxml2-api.xml: the script was exporting
+ too many symbols in the API breaking the python bindings.
+ Updated with the libxslt/libexslt changes.
+
+Wed Dec 11 20:26:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing release of 2.4.29
+ * doc/*: rebuilt the docs and API
+ * xmlreader.c: a few more fixes for the XmlTextReader API
+
+Wed Dec 11 18:01:15 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/win32config.h: applied mingw patch from Magnus Henoch
+
+Wed Dec 11 16:58:48 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c doc/libxml2-api.xml: a bit more cleanup
+
+Wed Dec 11 14:54:47 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/apibuild.py doc/libxml2-api.xml doc/Makefile.am: new API
+ building Python script, does the C parsing directly, generates
+ a better API description including structure fieds defs and
+ enums. Still a couple of bugs, but good enough for the python
+ wrappers now.
+ * DOCBparser.c SAX.c nanohttp.c parser.c parserInternals.c tree.c
+ valid.c xmlIO.c xmlmemory.c xmlreader.c xmlregexp.c xmlschemas.c
+ include/libxml/schemasInternals.h include/libxml/tree.h: more
+ cleanup based on the python analysis script reports.
+ * libxml.spec.in: make sure the API XML description is part of the
+ devel package.
+
+Tue Dec 10 16:16:34 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c HTMLparser.c c14n.c debugXML.c encoding.c hash.c
+ nanoftp.c nanohttp.c parser.c parserInternals.c testC14N.c
+ testDocbook.c threads.c tree.c valid.c xmlIO.c xmllint.c xmlmemory.c
+ xmlreader.c xmlregexp.c xmlschemas.c xmlschemastypes.c xpath.c:
+ code cleanup, especially the function comments.
+ * tree.c: fixed a small bug when freeing nodes which are XInclude ones.
+
+Mon Dec 9 15:08:17 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am xmlreader.c include/libxml/Makefile.am
+ include/libxml/xmlreader.h: Adding a new set of APIs based on
+ the C# TextXmlReader API but converted to C. Allow to parse
+ in constant memory usage, far simpler to program and explain
+ than the SAX like APIs, unfinished but working.
+ * testReader.c: test program
+
+Sun Dec 8 18:36:01 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: applied YALDSP from Mark Vakoc
+
+Wed Dec 4 16:08:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Chip turner indicated that XHTML1 serialization
+ rule for style actually break on both IE and Mozilla,
+ try to avoid the rule if escaping ain't necessary
+
+Wed Dec 4 12:43:28 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * nanhttp.c: handle HTTP URL escaping, problem reported by
+ Glen Nakamura and Stefano Zacchiroli
+
+Sat Nov 30 12:19:17 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c HTMLparser.c parser.c valid.c xpath.c: code cleanup
+
+Thu Nov 28 12:53:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: Johann Richard pointed out some XPointer problems for
+ URN based URI references in XInclude. Modified the URI parsing
+ and saving routines to allow correct parsing and saving of
+ XPointers, especially when attached to "opaque" scheme accordingly
+ to RFC 2396
+
+Wed Nov 27 20:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c include/libxml/HTMLtree.h: applied the same kind
+ of refactoring to the HTML saving code.
+ * doc/libxml2-*.xml doc/API*.html: slight API changes got reflected
+ in the doc.
+
+Wed Nov 27 12:40:16 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c include/libxml/tree.h: refactored the XML dump of a node
+ to a buffer API to reuse the generic dump to an OutputIO layer,
+ this reduces code, fixes xmlNodeDump() for XHTML, also made
+ xmlNodeDump() now return the number of byte written.
+
+Wed Nov 27 09:00:00 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/setup.py.in: another patch from Stéphane Bidoul for
+ Python bindings on Windows
+ * doc/parsedecl.py: small cleanup
+
+Mon Nov 25 17:28:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in configure.in: add a line in %changelog for releases
+
+Mon Nov 25 14:18:27 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: patch from Marcus Clarke fixing a problem in entities
+ parsing that was detected in KDe documentations environment.
+
+Mon Nov 24 14:13:21 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>
+
+ * python/libxml.c (libxml_prev): Return the previous as opposed to
+ the next node (I guess this is the result of some cut & paste programming:)
+
+Sat Nov 23 17:22:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am: Jan Rafaj pointed a bug in the Makefile.
+
+Sat Nov 23 12:21:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/setup.py.in: trying
+ to fix the Python bindings build on Windows (Stéphane Bidoul)
+
+Fri Nov 22 22:41:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/configure.js: added option for python bindings
+ * win32/libxml2.def.src: added more exports
+
+Fri Nov 22 18:50:34 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/Makefile.mingw: fixed unresolved symbols when linking with
+ pthreads
+ * win32/wince/*: applied updates to Windows CE port from Javier
+
+Fri Nov 22 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.28
+ * libxml.spec.in doc/Makefile.am: some cleanup
+ * doc/*: updated the news and regenerated.
+
+Fri Nov 22 14:15:14 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: final touch at closing #87235 </p> end tags
+ need to be generated.
+ * result/HTML/cf_128.html result/HTML/test2.html result/HTML/test3.html:
+ this change slightly the output of a few tests
+ * doc/*: regenerated
+
+Fri Nov 22 13:26:19 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: fixing bug #99190 when UTF8 document are
+ parsed using the progressive parser and the end of the chunk
+ is in the middle of an UTF8 multibyte character.
+
+Fri Nov 22 13:13:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * threads.c: fixed initialization problem in xmlNewGlobalState
+ which was causing crash.
+ * globals.c: removed duplicate call to initxmlDefaultSAXHandler
+ in xmlInitializeGlobalState.
+ * parserInternals.c: cleaned up ctxt->sax initialisation.
+
+Thu Nov 21 15:05:45 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c include/libxml/tree.h: modified the existing APIs
+ to handle XHTML1 serialization rules automatically, also add
+ xmlIsXHTML() to libxml2 API. Some tweaking to make sure
+ libxslt serialization uses it when needed without changing
+ the library API.
+ * test/xhtml1 result/noent/xhtml1 result/valid/xhtml1.xhtml
+ result/xhtml1: added a new test specifically for xhtml1 output
+ and updated the result of one XHTML1 test
+
+Wed Nov 20 14:24:56 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c parserInternals.c encoding.c: fixed #99082
+ for xi:include encoding="..." support on text includes.
+ * result/XInclude/tstencoding.xml test/XInclude/docs/tstencoding.xml
+ test/XInclude/ents/isolatin.txt : added a specific regression test
+ * python/generator.py python/libxml2class.txt: fixed the generator
+ the new set of comments generated for doc/libxml2-api.xml were
+ breaking the python generation.
+
+Tue Nov 19 23:25:47 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am: repair some problem if gtk-doc fail or such
+ * configure.in: patch for Solaris on new autoconf closes #98880
+ * doc/parsedecl.py: repair the frigging API building script,
+ did I say that python xmllib sucks ?
+ * doc/libxml2-api.xml doc/libxml2-refs.xml: regenerated, reordering
+ and some comment are no more truncated.
+
+Tue Nov 19 09:09:04 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Martin Stoilov pointed out a potential leak in
+ xmlCreateMemoryParserCtxt
+
+Mon Nov 18 16:05:51 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixed bug #98879 a corner case when 0 is
+ included in HTML documents and using the push parser.
+
+Mon Nov 18 00:11:24 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>
+
+ * configure.in (PYTHON_SITE_PACKAGES): If --with-python is
+ specified, look for the Python interpreter not just in the
+ specified root but also in the specified location. Fixes #98825
+
+Sun Nov 17 23:36:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: fixing bug #98792 , node may have no doc
+ and dereferencing without checking ain't good ...
+
+Sun Nov 17 10:25:43 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing release 2.4.27
+ * doc/* : updated and rebuilt the docs
+ * doc/Makefile.am libxml.spec.in: try to make sure the tutorial
+ and all the docs are actually packaged and in the final RPMs
+ * parser.c parserInternals.c include/libxml/parser.h: restore
+ xmllint --recover feature.
+
+Sat Nov 16 16:30:25 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c xpath.c: fixing #96925 wich was also dependent on the
+ processing of parsed entities, and XPath computation on sustitued
+ entities.
+ * testXPath.c: make sure entities are substitued.
+
+Fri Nov 15 16:22:54 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed #96594, which was totally dependent on the
+ processing of internal parsed entities, which had to be changed.
+
+Fri Nov 15 12:16:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am python/Makefile.am python/tests/Makefile.am:
+ trying to fix bug #98517 about building outside the source tree
+ * doc/xml.html doc/FAQ.html: fixed the link to libiconv #94585
+
+Thu Nov 14 18:41:55 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/win32config.h: cleanup
+ * win32/Makefile.mingw: integrated mingw in JScript configure
+ * win32/Makefile.msvc: modified to allow mingw coexistence
+ * win32/configure.js: integrated mingw
+ * win32/Readme.txt: cleanup
+
+Tue Nov 12 22:06:45 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: strengthen the guard in the Pop macros,
+ like in the XML parser, closes bug #97315
+
+Tue Nov 12 21:56:39 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/parser.h: fixed bug #98338 , fatalError SAX
+ callback is never used.
+
+Tue Nov 12 13:32:50 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: fixed the initialization of the SAX structure
+ which was breaking xsltproc
+ * xpath.c: patch from Petr Pajas for CDATA nodes
+ * tree.c: patch from Petr Pajas improving xmlGetNodePath()
+ * parser.c include/libxml/parser.h: patch from Peter Jones
+ removing a leak in xmlSAXParseMemory() and adding the
+ function xmlSAXParseMemoryWithData()
+
+Mon Nov 11 20:47:03 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ adding pdf of tutorial, changing web page to link to it
+ * doc/tutorial/xmltutorial.pdf
+ * doc/xml.html
+ * doc/docs.html
+
+Sun Nov 10 20:48:57 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/ar01s08.html
+ adding file what I forgot for tutorial
+
+
+Sun Nov 10 20:33:13 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ Adding encoding discussion to tutorial
+ Added:
+ * doc/tutorial/images/*.png: DocBook admonition image files
+ * doc/tutorial/apf.html, apg.html: new generated html
+ * doc/tutorial/includeconvert.c: conversion code entity file
+ changed:
+ * doc/tutorial/xmltutorial.xml: DocBook original
+ * doc/tutorial/*.html: generated html
+
+Fri Nov 8 17:59:32 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/libxml/*.h: retired xmlwin32version.h
+ * doc/Makefile.am: retired xmlwin32version.h
+ * win32/configure.js: retired xmlwin32version.h
+
+Fri Nov 8 16:55:47 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: exported additional symbols
+ * include/libxml/xmlmemory.h: exported the rest of the xmlMem*
+ sisterhood
+
+Fri Nov 8 16:08:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c: fixed a typo pointed out by Igor
+ * xpath.c: try to speed up node compare using line numbers
+ if available.
+
+Thu Nov 7 15:16:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: make xmlFreeNode() handle attributes correctly.
+
+Wed Nov 6 23:51:11 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * catalog.c: completed the #96963 fix, as reported by Karl
+ Eichwalder
+
+Wed Nov 6 16:48:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpointer.c: tried to fix bug #97852 reported by Nicolas Noffke
+
+Sun Nov 3 10:43:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: switched the order of a couple of includes
+ to fix bugs #97100
+
+Thu Oct 31 17:11:46 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * catalog.c: fixed bug #96963, reverted to the old behaviour of
+ xmlLoadCatalogs that used to separate directories with a ':'.
+
+Thu Oct 31 16:55:21 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * threads.c: improvements to the Windows-side of thread handling
+ * testThreads.c: conditionally excluded unistd.h
+ * testThradsWin32.c: broke overlong lines
+ * include/win32config.h: adapted thread-related macros to the new
+ scheme and for pthreads on Windows
+ * win32/Makefile.msvc: introduced a more flexible thread build,
+ added testThreads[Win32].c to the build
+ * win32/configure.js: introduced a more flexible thread config
+
+2002-10-31 John Fleck <jfleck@inkstain.net>
+
+ * doc/xml.html (and, by implication, FAQ.html)
+ added UTF-8 conversaion FAQ from Marcus Labib Iskander
+
+Tue Oct 29 18:32:33 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * configure.in: removed xmlwin32version.h
+ * include/libxml/Makefile.am: removed xmlwin32version.h
+
+Mon Oct 28 14:01:29 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied patch from Brian Stafford to fix a bug
+ in xmlReconciliateNs()
+
+Mon Oct 28 13:51:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied patch from Christian Glahn to allow
+ xmlNewChild() on document fragment nodes
+
+Sat Oct 26 15:27:00 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Christian Glahn found a problem with a recent
+ patch to xmlParseBalancedChunkMemoryRecover()
+ * xmlschemas.c: Charles Bozeman fixed some Schemas validation
+ problems
+ * result/schemas/elem* result/schemas/seq* test/schemas.elem*
+ test/schemas/seq*: added the test cases from Charles
+
+Wed Oct 23 16:42:29 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am config.h.in libxml.spec.in doc/Makefile.am:
+ serious cleanup of the spec file and associated changes
+ in the Makefiles.
+ * valid.c: try to remove some warnings on x86_64
+
+Wed Oct 23 10:53:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/Makefile.am: added winsockcompat.h to EXTRA_DIST to
+ fix bug #96586
+
+Tue Oct 22 21:13:06 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: Mikhail Sogrine pointed out a bug in HTML
+ parsing, applied his patch
+ * result/HTML/attrents.html result/HTML/attrents.html.err
+ result/HTML/attrents.html.sax test/HTML/attrents.html:
+ added the test and result case provided by Mikhail Sogrine
+
+Tue Oct 22 19:33:20 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * vms/build_libxml.com vms/config.vms vms/readme.vms
+ include/libxml/parser.h include/libxml/parserInternals.h
+ include/libxml/tree.h include/libxml/xmlIO.h
+ HTMLparser.c catalog.c debugXML.c parser.c parserInternals.c
+ tree.c triodef.h trionan.c uri.c xmlIO.c xpath.c:
+ Applied the VMS update patch from Craig A. Berry
+ * doc/*.html: update
+
+Tue Oct 22 16:27:31 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/encoding.h encoding.c: made xmlGetUTF8Char public
+
+Tue Oct 22 16:25:18 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: adding a grep command to --shell in xmllint
+ for T.V. Raman
+
+Tue Oct 22 16:23:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlcatalog.c: tried to fix some of the problem with --sgml
+
+Mon Oct 21 09:57:10 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: tried to fix bug #91500 where doc->children may
+ be overriden by a call to xmlParseBalancedChunkMemory()
+
+Mon Oct 21 09:04:32 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: tried to fix bug #90945 w.r.t. parsing of system
+ identifiers in SGML catalogs containing '&'
+
+Sun Oct 20 23:31:47 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/types.c: fixed bugs when passing result value tree
+ to Python functions.
+
+Fri Oct 18 13:18:53 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing the release of 2.4.26
+ * doc/*: updated and rebuilt the documentation
+
+Wed Oct 16 20:01:46 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed a XML Namespace compliance bug reported by
+ Alexander Grimalovsky
+
+Wed Oct 16 17:18:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixed serialization of script and style when
+ they are not lowercase (i.e. added using the API to the tree).
+
+Wed Oct 16 16:31:05 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: make xmlValidateDocument emit a warning msg if there
+ is no DTD, pointed by Christian Glahn
+
+Wed Oct 16 16:05:38 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c: fixed the validation of sequences
+ content model when some of the blocks have min or max, and a couple
+ of bugs found in the process.
+ * result/schemas/list0* test/schemas/list0*: added some specific
+ regression tests
+
+Tue Oct 15 12:41:01 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * README: updated the contact informations
+
+Tue Oct 15 10:35:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: use test -f instead of test -e since Solaris /bin/sh
+ misses it, reported by Peter Bray.
+
+Mon Oct 14 17:37:32 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: investigating xmlNodeGetContent() on namespace nodes
+ and removed a few warnings
+
+Mon Oct 14 13:12:55 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Christian Glahn found a small bug in the push parser.
+ * xmlIO.c include/libxml/xmlIO.h: cleaned up and made xmlCheckFilename
+ public
+
+Wed Oct 9 23:11:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c include/libxml/xmlschemas.h: added
+ xmlSchemaNewMemParserCtxt to parse a schemas from a memory area
+ * testSchemas.c: added --memory to test the new interface
+
+Wed Oct 9 16:22:54 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/index.py doc/search.php: integrated the XSLT indexing,
+ a few fixed in the indexer, added a scope selection at the
+ search level.
+
+Wed Oct 9 12:18:37 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: Joe Marcus Clarke reported a segfault on FBsd
+ this was due to uninitialized parts of the validation context
+
+Tue Oct 8 23:24:20 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: applied patch from Mark Vakoc except the API
+ change, preserved it.
+ * doc/*: updated the docs to point to the search engine for
+ information lookup or before bug/help reports.
+
+Tue Oct 8 18:53:31 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/index.py doc/search.php: added mailing-list archives
+ indexing and lookup
+
+Tue Oct 8 10:25:07 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: patch from Mark Vakoc to fix xmlNodeGetPath()
+
+Mon Oct 7 13:12:03 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/index.py: improved HTML indexing
+ * doc/search.php: make the queries also lookup the HTML based indexes
+
+Sun Oct 6 23:50:29 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/index.py: added HTML page indexing
+
+Fri Oct 4 15:33:55 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * xmlIO.c: extended Windows path normalisation to fix the base
+ problem in libxslt.
+ * catalog.c: fixed list handling in XML_CATALOG_FILES
+
+Fri Oct 4 13:43:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: typo/bug found by Christian Glahn
+
+Sun Sep 29 19:44:10 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * xmlIO.c: applied Windows CE patch from Javier.
+ * win32/wince: new directory, contains support for the PocketPC
+ with Windows CE from Javier.
+ * include/win32config.h: reorganised, removed duplicate
+ definitions and applied WinCE patch from Javier.
+ * include/wsockcompat.h: new file, now contains WinSock
+ compatibility macros.
+ * win32/Makefile.msvc: introduced double-run compilation.
+
+Thu Sep 26 19:48:06 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing release
+ of 2.4.25
+ * doc/*: updated and regenerated teh docs and web pages.
+
+Thu Sep 26 17:33:46 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c valid.c include/libxml/valid.h: fixed bug #92518 validation
+ error were not covering namespace declarations.
+ * result/valid/dia.xml test/valid/dia.xml: the test wasn't valid,
+ it was missing the attribute declaration for the namespace
+ * result/VC/NS3: the fix now report breakages in that test
+
+Thu Sep 26 14:39:07 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixing bug #94241 on HTML boolean attributes
+
+Thu Sep 26 14:25:33 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/*: added the 3 new modules xmlregexp xmlautomata and xmlunicode
+ and regenerated the docs and web site
+
+Thu Sep 26 11:45:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c xmlschemas.c xmlschemastypes.c xpath.c: make sure
+ ATTRIBUTE_UNUSED is always put after the attribute declaration,
+ not before
+
+Thu Sep 26 11:33:28 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml2class.txt: fixed a stupid error
+ breaking the python API
+
+Thu Sep 26 00:31:46 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * trio.c trio.h triodef.h trionan.c trionan.h triop.h
+ triostr.c triostr.h: applied a trio update patch from
+ Bjorn Reese which should work with MinGW
+
+Thu Sep 26 00:21:18 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: improving some documentation comments
+ * xmlregexp.c: found and fixed a mem leak with python regression tests
+ * doc/*: rebuilt the doc and the API XML file including the
+ xmlregexp.h xmlautomata.h and xmlunicode.h headers
+ * python/generator.py python/libxml2class.txt python/libxml_wrap.h
+ python/types.c: added access to the XML Schemas regexps from
+ python
+ * python/tests/Makefile.am python/tests/regexp.py: added a
+ simple regexp bindings test
+
+Tue Sep 24 08:10:48 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/xml.html:
+ fixing ftp links - thanks to Vitaly Ostanin
+
+Tue Sep 24 16:08:17 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c: fixed the data callback on transition functionality
+ which was broken when using the compact form
+ * result/schemas/*: updated the results, less verbose, all tests
+ pass like before
+ * DOCBparser.c testAutomata.c testC14N.c testSchemas.c testThreads.c
+ testXPath.c valid.c xinclude.c xmllint.c xmlregexp.c xmlschemas.c
+ xmlschemastypes.c xpath.c python/libxml.c: removed a bunch of
+ annoying warnings
+ * xpath.c: try to provide better error report when possible
+
+Sat Sep 21 14:56:37 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: fixed a breakage raised by Jacob
+
+Fri Sep 20 20:08:18 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/win32config.h: added HAVE_ERRNO_H definition for parts
+ which don't use sockets
+
+Fri Sep 20 18:40:50 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/Makefile.msvc: applied zlib patch from Daniel Gehriger
+ * win32/configure.js: applied zlib patch from Daniel Gehriger
+
+Fri Sep 20 15:40:14 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/configure.js: applied the patch from Mark Vakoc for
+ regexp support
+ * win32/libxml2.def.src: applied the patch from Mark Vakoc
+ for regexp support
+
+Fri Sep 20 15:35:33 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: as pointed by Igor Float and Double
+ parsing ain't finished yet
+
+Fri Sep 20 14:00:16 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in: trying to fix #88412 by bypassing
+ all the python subdir if python ain't detected
+
+Thu Sep 19 21:46:53 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in include/libxml/xmlversion.h.in:
+ made configuring with regexps/automata/unicode the default
+ but without schemas ATM
+ * testRegexp.c valid.c xmlregexp.c include/libxml/xmlregexp.h:
+ fixed the regexp based DTD validation performance and memory
+ problem by switching to a compact form for determinist regexps
+ and detecting the determinism property in the process. Seems
+ as fast as the old DTD validation specific engine :-) despite
+ the regexp built and compaction process.
+
+Wed Sep 18 18:27:26 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: determinism is debugged, new DTD checking code now works
+ but xmlFAComputesDeterminism takes far too much CPU and the whole
+ set usues too much memory to be really usable as-is
+
+Wed Sep 18 00:54:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed another stupid bug in xmlGetNodePath()
+ * xmllint.c: --version now report the options compiled in
+
+Tue Sep 17 23:48:07 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: small cleanup
+ * valid.c xmlregexp.c: switched DTD validation to use only regexp
+ when configured with them. A bit of debugging around the determinism
+ checks is still needed
+
+Tue Sep 17 21:22:25 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml_wrap.h: stupid bug found by mattam@netcourrier.com
+
+Tue Sep 17 19:58:26 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: small portability glitch fixed.
+
+Mon Sep 17 12:38:08 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: incomplete steps for real/double support
+ * testAutomata.c include/libxml/xmlautomata.h
+ include/libxml/xmlregexp.h: avoiding a compilation problem
+ * valid.c include/libxml/valid.h: starting the work toward using
+ the regexps for actual DTD validation
+
+Fri Sep 13 16:46:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * hash.c: cosmetic cleanup
+ * valid.c include/libxml/tree.h include/libxml/valid.h: started
+ integrating a DTD validation layer based on the regexps
+
+Thu Sep 12 18:01:29 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c: fixed a bug reported by Jeff Goff,
+ the determinism was tested before eliminating the epsilon
+ transitions :-(
+
+Thu Sep 12 16:57:45 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml.py
+ python/libxml2-python-api.xml python/libxml2class.txt
+ python/libxml_wrap.h python/types.c: updated the python
+ bindings, added code for easier File I/O, and the ability to
+ define a resolver from Python fixing bug #91635
+ * python/tests/Makefile.am python/tests/inbuf.py
+ python/tests/outbuf.py python/tests/pushSAXhtml.py
+ python/tests/resolver.py python/tests/serialize.py: updated
+ and augmented the set of Python tests.
+
+Tue Sep 10 21:05:28 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/configure.js: added more readme info for the binary
+ package.
+
+Tue Sep 10 14:15:18 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: fixed a stupid out of bound array error
+
+Tue Sep 10 13:09:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlIO.h xmlIO.c parser.c HTMLparser.c DOCBparser.c:
+ messing around with support for Windows path, cleanups,
+ trying to identify and fix the various code path to the
+ filename access. Added xmlNormalizeWindowsPath()
+
+Thu Sep 5 16:19:18 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * error.c valid.c: working on better error reporting of validity
+ errors, especially providing an accurate context.
+ * result/valid/xlink.xml.err result/valid/rss.xml.err: better
+ error reports in those cases.
+
+Thu Sep 5 13:29:47 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c HTMLparser.c c14n.c entities.c list.c
+ parser.c parserInternals.c xmlIO.c: get rid of all the
+ perror() calls made in the library execution paths. This
+ should fix both #92059 and #92385
+
+Thu Sep 5 13:13:17 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: memory leak reporting was broken after a change
+ of the preprocessor symbol used to activate it.
+
+Thu Sep 5 13:10:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: try to make the copy function work for node of
+ type XML_DOCUMENT_FRAG_NODE, they are only created by the
+ DOM layers though, not libxml2 itself.
+
+Thu Sep 5 12:57:38 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: try to provide file and line informations, not all
+ messages are covered, but it's a (good) start
+
+Thu Sep 5 12:49:35 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: reimplemented a large part of the XInclude
+ processor, trying to minimize resources used, James Henstridge
+ provided a huge test case which was exhibiting severe memory
+ consumption problems.
+
+Thu Sep 5 10:07:13 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: applied patch from Christophe Merlet to
+ reestablish DESTDIR
+
+Wed Sep 4 14:13:34 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in: fixes libary path for x86_64 AMD
+
+Tue Sep 3 21:14:19 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/includekeyword.c
+ * doc/tutorial/xmltutorial.xml:
+ (plus resulting generated html files)
+ fixing one spot I missed in the tutorial where I hadn't freed
+ memory properly
+
+Sat Aug 31 19:31:17 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/includeaddattribute.c
+ * doc/tutorial/includeaddkeyword.c
+ * doc/tutorial/includegetattribute.c
+ * doc/tutorial/includekeyword.c
+ * doc/tutorial/xmltutorial.xml
+ * doc/tutorial/*.html:
+ update tutorial to properly free memory (thanks to Christopher
+ R. Harris for pointing out that this needs to be done)
+ * doc/tutorial/images/callouts/*.png:
+ added image files so the callouts are graphical, making it
+ easier to read ( use "--param callout.graphics 1" to generate
+ html with graphical callouts)
+
+Wed Aug 28 13:44:54 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Libxml2-Logo-180x168.gif doc/Libxml2-Logo-90x34.gif:
+ nice logos generated by Marc Liyanage
+ * doc/site.xsl *.html: changed the stylesheet to show the new
+ logo and regenerated the pages
+
+Sun Aug 25 16:38:05 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: handle Windows sepecific file://localhost/ semantic ...
+
+Thu Aug 22 22:03:19 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: possible mem leak patch from Jason Adams
+
+Thu Aug 22 17:27:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: integrated xf:escape-uri() from Wesley Terpstra
+ in the XQuery namespace
+ * configure.in: preparing 2.4.24
+ * doc/*.html: updated the web pages
+
+Thu Aug 22 16:19:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py: closing bug #85258 by generating conditional
+ compile check to avoid linking to routines not configured in.
+
+2002-08-22 Havoc Pennington <hp@pobox.com>
+
+ * autogen.sh: update error message for missing automake
+
+Thu Aug 22 11:45:50 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: typo in target name resulted in libxml2.py
+ to not be rebuilt. fixed DESTDIR similary to the libxslt one.
+
+Thu Aug 22 09:15:00 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * win32/win32/Makefile.mingw: updated with version from
+ Elizabeth Barham at http://soggytrousers.net/repository/
+
+Tue Aug 20 16:40:48 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/Makefile.msvc: added the prefix location to the include
+ and lib search path.
+
+2002-08-18 Havoc Pennington <hp@pobox.com>
+
+ * autogen.sh: hardcode aclocal-1.4/automake-1.4 so that users with
+ both automake 1.6 and 1.4 installed get the right automake. Means
+ compilation from CVS will now require the latest automake 1.4
+ release, or manually creating symlinks called "automake-1.4" and
+ "aclocal-1.4"
+
+Wed Aug 14 18:54:19 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in python/Makefile.am: more AMD 64 induced changes from
+ Frederic Crozat
+
+Wed Aug 14 16:43:53 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: oops I was missing the xml:base fixup too
+ * result/XInclude/*.xml: this adds xml:base attributes to most
+ results of the tests
+
+Wed Aug 14 16:05:37 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: quick but apparently working implementation of
+ xi:fallback, should close bug #89684
+ * Makefile.am test/XInclude/docs/fallback.xml
+ result/XInclude/fallback.xml: added a basic test for fallback,
+ and run with --nowarning to avoid a spurious warning
+ * configure.in: applied patch from Frederic Crozat for python
+ bindings on AMD 64bits machines.
+
+Wed Aug 14 10:47:46 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: xmlSAXUserParseMemory() really ought to fail if
+ the caller don't pass a SAX callback block.
+
+Wed Aug 14 10:29:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied the same fix for the XML-1.0 namespace to
+ xmlSearchNsByHref() as was done for xmlSearchNs()
+
+Mon Aug 12 16:52:08 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.3: small cleanup of the man page
+ * HTMLtree.c: fixed a potential problem raised by Petr Vandrovec
+ when serializing HREF attributes generated by XSLT.
+
+Mon Aug 12 15:24:05 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c include/libxml/HTMLtree.h: integrated a cleaned up
+ version of Marc Liyanage' patch for boolean attributes in HTML
+ output
+
+Mon Aug 12 14:11:59 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/tests/serialize.py: fixed the test results, indenting
+ behaviour changed slightly
+
+Thu Aug 8 11:00:26 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * win32/dsp/libxml2.def.src win32/libxml2.def.src: added
+ new c14n function to Windows def files
+
+Fri Aug 2 16:46:46 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * c14n.c: fixed a memory leak in c14n code
+
+Sat Aug 3 00:15:06 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c include/libxml/parser.h: adding a new API for Christian
+ Glahn: xmlParseBalancedChunkMemoryRecover
+ * valid.c: patch from Rick Jones for some grammar cleanup in
+ validation messages
+ * result/VC/* result/valid/*: this slightly change some of the
+ regression tests outputs
+
+Thu Aug 1 14:50:28 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: trying to fix a problem in namespaced attribute handling
+ raised by Christian Glahn
+
+Thu Aug 1 12:17:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c include/libxml/encoding.h: Opening the interface
+ xmlNewCharEncodingHandler as requested in #89415
+ * python/generator.py python/setup.py.in: applied cleanup
+ patches from Marc-Andre Lemburg
+ * tree.c: fixing bug #89332 on a specific case of loosing
+ the XML-1.0 namespace on xml:xxx attributes
+
+Wed Jul 31 23:27:42 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * c14n.c include/libxml/c14n.h: fixed one more c14n + namespaces
+ corner case from new Merlin's test suite and added a callback
+ that will be used to improve xmlsec performance
+
+
+Mon Jul 29 18:22:00 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: trying to fix the <style> escaping problem in
+ HTML serialization bug #89342
+
+Thu Jul 25 01:33:47 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xml.html doc/*.html: applied syntax patch from Rick Jones
+ and rebuilt the web site.
+
+Mon Jul 22 11:04:48 PDT 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * include/libxml/tree.h: added _private member to xmlNs struct
+
+Sun Jul 21 17:48:47 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixing bug #84876 based on the xml working
+ code.
+
+Sun Jul 21 19:15:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * python/Makefile.am: enhanced to fix bug 72012 (errors
+ when using '-jX' make parameter)
+
+Fri Jul 19 16:35:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: small additional enhancement for booleans
+ compared to nodesets
+
+Wed Jul 17 19:48:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: changed the order of the encoding declaration
+ attributes in the meta tags due to a bug in IE/Mac
+
+Fri Jul 12 08:45:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: enhanced handling of booleans (especially '='
+ and '!=' for nodesets) - fixes bug 85256. Added new
+ routine xmlXPathNotEqualValues for more proper handling
+ of '!=' when nodesets are involved.
+
+Thu Jul 11 21:45:52 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am: fixing Red Hat bug #68614 by adding the
+ doc/xmlcatalog_man.xml to the source distribution
+
+Wed Jul 10 21:26:13 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/Makefile.msvc: Added a copy *.pdb to install, few have
+ asked for this.
+
+Sat Jul 6 21:55:59 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.23
+ * doc/*: rebuilt the docs
+
+Sat Jul 6 21:11:20 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixing bug #84169 by fixing the
+ comment of xmlCreatePushParserCtxt to describe the
+ encoding detection parameters better.
+
+Sat Jul 6 19:44:56 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixing bug #79331 in one path the lookup for
+ ID attributes on a namespaced node wasn't handled correctly :-\
+
+Fri Jul 5 20:07:43 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: trying to fix 87235 about discarded white
+ spaces in the HTML parser.
+ * result/HTML/*: this changes the output of a number of HTML
+ regression tests
+
+Mon Jul 1 23:23:41 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: applied patch from Richard Jinks for the namespace
+ axis + fixed a memory error.
+ * parser.c parserInternals.c: applied patches from Peter Jacobi
+ removing ctxt->token for good.
+ * xmlschemas.c xmlschemastypes.c: fixed a few memory leaks
+ popped out by the regression tests.
+ * Makefile.am: patch for threads makefile from Gary Pennington
+
+Fri Jun 28 19:38:00 HKT 2002 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: enhanced behaviour of position() after usage of
+ expressions involving preceding-sibling (et al).
+
+Tue Jun 18 09:58:48 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * hash.c: applied a patch from Peter Jacobi to solve a problem
+ when compiling with the Watcom C on Win32
+ * result/schemas/*.err: the change of hashing algo generated
+ permutations in the output
+
+Mon Jun 17 19:02:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * hash.c: applied patch from Sander Vesik improving the quality of
+ the hash function.
+
+2002-06-14 Aleksey Sanin <aleksey@aleksey.com>
+
+ * DOCBparser.c HTMLparser.c debugXML.c encoding.c
+ nanoftp.c nanohttp.c parser.c tree.c uri.c xmlIO.c
+ xmllint.c xpath.c: replaced sprintf() with snprintf()
+ to prevent possible buffer overflow (the bug was pointed
+ out by Anju Premachandran)
+
+Thu Jun 13 17:30:25 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: removed an uninitialized data error popped by valgrind
+ on PE references
+
+Wed Jun 12 21:38:46 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/xml.html
+ adding tutorial reference to the web page
+
+Wed Jun 12 21:26:08 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/tutorial/xmltutorial.xml
+ * doc/tutorial/ar01s07.html
+ * doc/tutorial/ape.html
+ * doc/tutorial/includegetattribute.c
+ adding section to tutorial about retrieving an attribute
+ value
+
+Tue Jun 11 12:07:04 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: applied a couple of patches from Peter Jacobi to start
+ to get rid of ctxt->token, with a possible significant speed
+ improvement to be gained once done. Better compliance with PE
+ references constructs in DTDs too.
+ * test/valid/t[0-9]* result/valid/t[0-9]*: added a set of tests
+ from Peter too
+
+Tue Jun 11 09:25:12 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Babak Vahedipour-Kunze reported that openTag in
+ xmlParseElement was likely to have been deallocated at the
+ time of the report, possibly leading to segfault. Just report
+ the tag name now.
+
+Mon Jun 10 18:00:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: patch from Richard Jinks for XPath substring() function
+ * result/XPath/expr/strings test/XPath/expr/strings: new set of tests
+
+2002-06-06 Aleksey Sanin <aleksey@aleksey.com>
+
+ * xmlIO.c: patch from Rachel Hestilow to fix bug #84340
+
+Wed Jun 5 19:14:49 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ *doc/FAQ.html
+ fixing typos in FAQ, thanks to Robert Funnell for the
+ editing help
+
+Wed Jun 5 14:50:24 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS: got complaints from rpmlint that it was empty
+
+Tue Jun 4 09:09:18 MDT 2002 John Fleck <jfleck@inkstain.net>
+
+ * added doc/tutorial, including:
+ apa.html
+ apb.html
+ apc.html
+ apd.html
+ ar01s02.html
+ ar01s03.html
+ ar01s04.html
+ ar01s05.html
+ ar01s06.html
+ includeaddattribute.c
+ includeaddkeyword.c
+ includekeyword.c
+ includestory.xml
+ index.html
+ xmltutorial.xml
+ libxml tutorial, including generated html
+
+Mon Jun 3 21:21:26 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * result/c14n/exc-without-comments/merlin-c14n-two-*
+ result/c14n/without-comments/merlin-c14n-two-*
+ test/c14n/exc-without-comments/merlin-c14n-two-*
+ test/c14n/without-comments/merlin-c14n-two-*
+ testC14N.c Makefile.am: added merlin-c14n-two.tar.gz tests for
+ c14n/exc-c14n and slightly modified test script to handle
+ these test cases
+ * c14n.c: fixed bugs for complicated nodes set (namespace
+ without node and others from merlin-c14n-two.tar.gz)
+ * include/libxml/xpathInternals.h win32/dsp/libxml2.def.src
+ win32/libxml2.def.src: "opened" xmlXPathNodeSetFreeNs() function
+ for xmlsec performance patch
+ * xpath.c: fixed self::node() for namespaces and attributes
+
+Mon Jun 03 00:04:21 2002 Chema Celorio <chema@ximian.com>
+
+ * tree.h: added xmlDocFormatDump which is just as xmlDocDump
+ but with the format parameter
+ * tree.c: made xmlDocDump a wrapper arround xmlDocFormatDump
+
+Fri May 31 12:16:48 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * Makefile.am: updated c14n tests suite
+ * c14n.c: performance improvement for previous c14n patch
+
+Fri May 31 11:47:12 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: another peroformance patch from Peter Jacobi, that
+ time on parsing attribute values.
+
+Thu May 30 23:34:27 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * Makefile.am result/c14n/* test/c14n/*: C14N tests integrated
+ into LibXML2 test suite
+
+Thu May 30 21:23:06 2002 Aleksey Sanin <aleksey@aleksey.com>
+
+ * c14n.c: propagating xpath ancesstors node fix to c14n
+ plus small performance improvement to reduce number of
+ mallocs
+ * xpath.c: fixed ancestors axis processing for namespace nodes
+
+Wed May 29 10:21:39 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c parser.c tree.c include/libxml/tree.h: performance patch from
+ Peter Jacobi
+
+Mon May 27 23:18:33 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.22
+
+Mon May 27 16:44:04 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c win32/libxml2.def.src win32/dsp/libxml2.def.src
+ include/libxml/HTMLparser.h: fixing #79334 making htmlParseDocument
+ a public entry point.
+ * doc/*: rebuilt the API and docs
+
+Mon May 27 14:16:28 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: patch from Richard Jinks to fix a problem introduced
+ in the previous patch and pointed by Norm
+
+Fri May 24 13:10:22 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in: fixing bug #81112
+
+Fri May 24 13:03:24 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: fixing bug #82848
+
+Fri May 24 09:54:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * result/catalogs/mycatalog.full: Aleksey's commit changed the
+ output of one catalog test
+
+Fri 24 May 2002 12:17:45 AM PDT Aleksey Sanin <aleksey@aleksey.com>
+
+ * global.data globals.c tree.c include/libxml/globals.h
+ win32/libxml2.def.src win32/dsp/libxml2.def.src: changed
+ default value for global parameter xmlIndentTreeOutput to 1 and
+ introduced new global parameter xmlTreeIndentString (the string
+ used to do one-level indent) with default value " " (as it was
+ in tree.c)
+
+Thu May 23 13:55:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: Merijn Broeren pointed out a problem when compiling
+ with trio and schemas.
+
+Wed May 22 11:57:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: patch from Richard Jinks to fix the problem raised in
+ http://mail.gnome.org/archives/xml/2002-April/msg00246.htm
+
+Wed May 22 08:38:19 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: a bit of work on import.
+ * xmlschemastypes.c: Charles Bozeman provided a compare function
+ for date/time types so min/max facet restrictions should work,
+ indeterminate comparisons return an error instead of equal.
+ * test/schemas/date_0* result/schemas/date_0_0: specific test
+ from Charles Bozeman too
+
+Sat May 18 09:54:12 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.3 doc/buildDocBookCatalog: apply a couple of patches
+ from Christian Cornelssen fixing the man pages and the Catalog
+ building script.
+ * xmlschemas.c include/libxml/schemasInternals.h: nothing new yet
+ next step is <xs:import> I now have a reasonable understanding
+ of how it works.
+
+Thu May 16 10:43:26 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: applied a small buffer performance patch from Gary Pennington
+
+Wed May 15 00:25:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/libxml2.def.src: exported xmlXPathNodeSetAddNs()
+
+Tue May 14 13:00:48 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixing an XPath function evalutation bug pointed out
+ by Alexey Efimov where the context was lost when evaluating
+ the function arguments
+
+Mon 13 May 2002 11:37:39 PM PDT Aleksey Sanin <aleksey@aleksey.com>
+
+ * xpath.c include/libxml/xpathInternals.h: maked xmlXPathNodeSetAddNs()
+ function public for XMLSec performance optimizations
+
+Mon May 13 12:32:22 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml2class.txt : fixed a problem
+ with the HTML parser pointed by Gary Benson
+ * python/tests/Makefile.am python/tests/pushSAXhtml.py: sdding the
+ example
+
+Thu 09 May 2002 11:19:00 AM PDT Aleksey Sanin <aleksey@aleksey.com>
+ * parser.c: fixed bug #81159 (memory growth in SAX)
+
+Tue 07 May 2002 09:20:21 AM PDT Aleksey Sanin <aleksey@aleksey.com>
+ * xpath.c: fixed bug #78858 (the real fix)
+
+Sat 04 May 2002 11:56:31 PM PDT Aleksey Sanin <aleksey@aleksey.com>
+ * xpath.c: fixed bug #78858 (quick and durty fix to hide the problem)
+
+Sun May 5 08:57:08 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: modified xmlNodeSetBase to allow changing the
+ base of a document.
+
+Fri May 3 09:20:41 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: patch Charles Bozeman for validation of
+ all the date, time, and duration types
+ * test/schemas/dur_0* result/schemas/dur_0*: associated tests
+ * configure.in: fixed an error pointed by an user
+ * xml2-config.in: fixed an error pointed by an user
+
+Wed 01 May 2002 11:29:27 AM PDT Aleksey Sanin <aleksey@aleksey.com>
+
+ * include/libxml/xmlIO.h win32/dsp/libxml2.def.src
+ win32/libxml2.def.src xmlIO.c: exported default
+ 'file:', 'http:' and 'ftp:' protocols input handlers
+ and maked protocols comparisson case insensitive
+
+Tue Apr 30 16:29:05 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: Neven Has detected a typo
+
+Tue Apr 30 08:48:11 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * AUTHORS HACKING: added Aleksey Sanin <aleksey@aleksey.com>
+ as one of the persons allowed to commit directly to the
+ module.
+
+Mon Apr 29 17:48:26 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.21
+ * valid.c: raised a too low limit
+ * doc/*: rebuilt the docs
+
+Wed Apr 24 13:41:03 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * test/XPath/expr/floats test/XPath/expr/functions
+ result/XPath/expr/floats result/XPath/expr/functions
+ xpath.c: another XPath conformance patch from Richard Jinks
+
+Tue Apr 23 19:50:40 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: fixed validation of attribute groups.
+ * test/schemas result/schemas: added an example from the primer
+
+Tue Apr 23 09:11:37 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am xmlschemas.c xmlschemastypes.c: more work on Schemas
+ * test/schemas result/schemas: updated the test list
+
+Mon Apr 22 17:59:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * TODO: updated a bit
+ * parser.c: made a comment more specific
+ * xmlregexp.c xmlschemas.c xmlschemastypes.c: more work on the
+ Schemas conformance.
+ * test/schemas result/schemas: updated the test list
+
+Sat Apr 20 19:36:39 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h:
+ implementing xs:all with minOccurs = 0
+ * tes/schemas/* result/schemas/*: added more tests covering
+ xs:all
+
+Sat Apr 20 09:22:50 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c: first implementation of the all particle, this
+ may need to be revisited for case where not all transitions
+ must be crossed.
+
+Fri Apr 19 18:26:04 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: another entity processing update from Markus Henke
+
+Fri Apr 19 17:14:24 CEST 2002 Bjorn Reese <breese@users.sourceforge.net>
+
+ * trionan.c: fixed crash on OSF/1
+
+Fri Apr 19 09:00:56 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: more Schemas work
+ * test/schemas/* result/schemas/*: added more tests coming
+ from the spec.
+
+Thu Apr 18 23:00:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: patch from Aleksey Sanin reflecting a change in the
+ ExcC14N specification
+
+Thu Apr 18 18:38:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: patch from Markus Henke, fix for recursive entities.
+
+Thu Apr 18 17:49:24 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fix a problem with string() on a document node.
+
+Thu Apr 18 16:40:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am xmlschemas.c: more Schemas work
+ * test/schemas/* result/schemas/*: added more tests coming
+ from the spec.
+
+Thu Apr 18 13:52:52 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixed & serialization bug introduced in 2.4.20
+ * result/HTML/*: this changes a few things in the results
+
+Wed Apr 17 20:34:37 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * include/libxml/tree.h: eliminated 'declaration different than
+ prototype' warning
+ * include/win32config.h: "resolved" conflicts with errno.h
+
+Wed Apr 17 18:26:07 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h: more work
+ on the automata interfaces and debug of counted choices
+ * test/schemas/* result/schemas/*: added a number of tests
+
+Wed Apr 17 11:03:03 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c xmlschemastypes.c include/libxml/xmlschemas.h:
+ a bit of work on Schemas
+ * testSchemas.c: try to make it more useful
+ * test/schemas/* result/schemas/* Makefile.am: changed the
+ Schemas regression test procedure, started adding a few samples
+
+Tue Apr 16 19:52:01 CEST 2002 Igor Zlatkovic <izlatkovic@stud.fh-frankfurt.de>
+
+ * include/libxml/encoding.h: Patch for the Borland C++ builder
+ * include/libxml/tree.h: Patch for the Borland C++ builder
+ * threads.c: Patch for the Borland C++ builder
+ * win32/bcb5: New directory for the Borland C++ builder
+ project files
+
+Tue Apr 16 19:46:55 CEST 2002 Igor Zlatkovic <izlatkovic@stud.fh-frankfurt.de>
+
+ * win32/Makefile.msvc: Update for XML Schema support
+ * win32/configure.js: Update for XML Schema support
+ * win32/libxml2.def.src: Update for XML Schema support
+
+Tue Apr 16 17:46:43 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am TODO_SCHEMAS configure.in genUnicode.py testAutomata.c
+ testRegexp.c testSchemas.c xmlregexp.c xmlschemas.c xmlschemastypes.c
+ xmlunicode.c include/libxml/Makefile.am
+ include/libxml/schemasInternals.h include/libxml/xmlautomata.h
+ include/libxml/xmlregexp.h include/libxml/xmlschemas.h
+ include/libxml/xmlschemastypes.h include/libxml/xmlunicode.h
+ include/libxml/xmlversion.h.in : merged the current state of
+ XML Schemas implementation, it is not configured in by default,
+ a specific --schemas configure option has been added.
+ * test/automata test/regexp test/schemas Makefile.am
+ result/automata result/regexp result/schemas:
+ merged automata/regexp/schemas regression tests
+
+Tue Apr 16 09:48:44 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: Gary found a compile time problem, fixes #78823
+
+Mon Apr 15 19:11:36 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: release of 2.4.20
+ * doc/*: updated and rebuilt the docs
+
+Mon Apr 15 14:55:53 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: patch from Cristian Gafton to build on
+ Red Hat 6.2, should also fix #75779
+
+Mon Apr 15 12:14:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: first part of fixing #78729
+
+Sun Apr 14 23:44:58 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c uri.c: fixing bug #78662 i.e. add proper
+ escaping of URI when saving HTML files.
+ * result/HTML/*: this impacted some tests
+
+Sun Apr 14 14:55:15 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: trying to fix #77441
+
+Fri Apr 12 23:02:16 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlIO.h: Hallski complained it could not be
+ included by itself.
+
+Thu Apr 11 10:23:36 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: applied an IEEE flag patch for OSF/1 #77825
+
+Wed Apr 10 23:31:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+ * win32/configure.js: patch from Nilo for the c14n option
+ * win32/Makefile.msvc: fixed libxml2.def generation with threads
+
+Wed Apr 10 21:24:16 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c include/libxml/xmlwin32version.h.in: Silvan Minghetti
+ pointed erroneous use of LIBXML_THREADS_ENABLED instead of
+ LIBXML_THREAD_ENABLED
+
+Wed Apr 10 18:12:52 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: another patch from Richard Jinks for substring conformance
+ * test/XPath/expr/floats test/XPath/expr/strings
+ result/XPath/expr/floats result/XPath/expr/strings: update of the
+ test suite to check those.
+
+Wed Apr 10 13:29:49 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: patch from Richard Jinks for .x float parsing.
+
+Tue Apr 9 18:09:31 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: patch from Markus Henke when an encoding ain't recognized
+
+Tue Apr 9 15:47:14 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.m4: got a report that #include <string.h> was needed
+
+Tue Apr 9 11:51:25 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: applied a fix from Anthony Jones for -o /--output
+
+Tue Apr 2 20:27:11 MST 2002 John Fleck <jfleck@inkstain.net>
+
+ * doc/example.html: fixing typo
+
+Mon Apr 1 10:02:57 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixed a bug in the nodeset to boolean comparison code
+ pointed out by Melvyn Sopacua.
+
+Fri Mar 29 23:41:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.m4: Frédéric Crozat gave a patch related to the change
+ of Include paths breaking the libxml.m4
+
+Fri Mar 29 18:25:54 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: Fix bug #76927 forgot to save some context
+ when evaluating binary expressions
+
+Thu Mar 28 19:22:48 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: fixed configure for MPE/iX from Markus Henke
+ * xmlmemory.c: fixed initialization problems
+ * xpath.c: another set of patches from Richard Jinks this
+ fixes "make XPathtests" on linux
+
+Wed Mar 27 17:09:43 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * trionan.c trionan.h xpath.c: more patches from Richard Jinks
+ * test/XPath/expr/compare test/XPath/expr/equality
+ test/XPath/expr/floats test/XPath/expr/functions
+ test/XPath/expr/strings result/XPath/expr/compare
+ result/XPath/expr/equality result/XPath/expr/floats
+ result/XPath/expr/functions result/XPath/expr/strings: Updated
+ tests though they show a divergence on Linux
+
+Wed Mar 27 10:06:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c trionan.c: previous commit also included patches
+ from Richard Jinks on some IEEE support corner case
+
+Wed Mar 27 10:03:11 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * AUTHORS HACKING: Added Igor Zlatkovic as official maintainer
+ * python/Makefile.am python/tests/Makefile.am: Albert Chin pointed
+ that $(datadir) should be used for docs
+
+Tue Mar 26 13:43:16 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: Thomas Steinborn pointed out #76404 that libxml2
+ could leak filedescriptors
+
+Tue Mar 26 08:55:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in nanohttp.c: applied patch from Allan Clark for
+ UnixWare/OpenServer
+
+Mon Mar 25 17:45:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.19
+ * doc/*: rebuilt the docs
+
+Mon Mar 25 17:34:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * nanohttp.c: fixing #76043, got fed up with non-portability
+ of that piece of code.
+
+Mon Mar 25 13:08:21 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c SAX.c: Never commit without running "make tests" :-(
+ fix a couple of stupidities in the previous commit
+ * result/*: a few changes in some attribute order result of previous
+ commit.
+
+Mon Mar 25 11:46:05 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c SAX.c: fixed bug #76168, attribute redeclared in
+ the internal subset should not raise duplicate ID errors,
+ also there was a small bug in conjunction to namespace
+ declarations defaulted and xml:xxx attributes DTD definitions.
+
+Fri Mar 22 15:13:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: Richard Jinks also raised some rounding problems
+ this tries to fix them
+
+Fri Mar 22 13:22:09 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: Richard Jinks spotted an incoherent memory allocation
+ behaviour in xmlXPathCastToString()
+
+Thu Mar 21 14:25:29 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: fixed a bug in the ISO-Latin 1 to UTF8 encoder
+ raised by Morus Walter
+
+Thu Mar 21 14:07:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlcatalog.c include/libxml/xmlversion.h.in: applied 2 fixups
+ from Igor
+
+Thu Mar 21 13:30:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixing #75619, related to a problem when trying
+ to evaluate condition when the current node set resulting
+ from that sub-step evaluation is empty. Also fixes 2 potential
+ problem with previous-sibling and next-siblings axis.
+
+Thu Mar 21 09:03:59 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: patch from Mark Vakoc to build C14N if DocBook and
+ HTML support is not configured in.
+
+Wed Mar 20 22:42:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c error.c parser.c parserInternals.c tree.c xmlIO.c
+ include/libxml/tree.h: dohh I really didn't intended to commit
+ this test version :-(
+
+Wed Mar 20 20:20:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * testSAX.c: I wanted to see the real speed at the SAX interface
+ after a little too many Ximianer started complaining about the
+ parser speed.
+ added a --quiet option:
+ paphio:~/XML -> ls -l db100000.xml
+ -rw-rw-r-- 1 veillard www 20182040 Mar 20 10:30 db100000.xml
+ paphio:~/XML -> time ./testSAX --quiet db100000.xml
+ 3200006 callbacks generated
+ real 0m1.270s
+ Which means 16MBytes/s and 3Mcallback/s
+
+Tue Mar 19 19:33:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: valgrind spotted another error that time when running
+ on libxslt regression tests
+
+Tue Mar 19 15:24:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: adding "make valgrind" running the full regression
+ tests (except python ones) under Valgrind (using valgrind -q
+ which was kindly added by the author).
+ * valid.c: stupid bug pinpointed by Valgrind, the regression tests
+ passes cleanly now except an obcure floating point initialization
+ raised in log10() in one XPath regression test ???
+ * tree.c: edited some comments to close #75244
+
+Tue Mar 19 12:15:20 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: pretty insane thing, the xmlXPathFormatNumber()
+ was not serializing 1 as "1" if LC_ALL=sv_SE :-( and in the
+ context of ScrollKeeper, made sure that if the number is
+ an integer, the serialization follows the description at
+ http://www.w3.org/TR/xpath#section-String-Functions
+
+Mon Mar 18 19:18:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.18
+ * doc/*: updated and rebuilt the web site
+ * *.c libxml.h: implement the new IN_LIBXML scheme discussed with
+ the Windows and Cygwin maintainers.
+ * parser.c: humm, changed the way the SAX parser work when
+ xmlSubstituteEntitiesDefault(1) is set, it will then
+ do the entity registration and loading by itself in case the
+ user provided SAX getEntity() returns NULL.
+ * testSAX.c: added --noent to test the behaviour.
+
+Mon Mar 18 12:44:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Wilfried Teiken provided a hackish but working
+ way to get context reported back on entities when parsing
+ with SAX and without breaking the DOM build.
+
+Sun Mar 17 11:31:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: applied a new patch from Aleksey Sanin
+ * doc/site.xsl doc/xml.html doc/*.html: updated the documentation
+ to reference Aleksey implementation of XML digital Signatures
+
+Sat Mar 16 23:01:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: small fix to avoid potential problem due to
+ ordering of freeing data
+ * python/Makefile.am: people were complaining about
+ the generated file in python dir not being built
+
+Fri Mar 15 23:21:40 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in python/Makefile.am python/tests/Makefile.am
+ python/generator.py python/libxml.c python/types.c: Cleanup
+ of the python Makefiles based on Jacob and James feedback,
+ fixed the spec file accordingly, fixed the number of warning
+ that passing my pedantic CFLAGS was generating. Conclusion
+ is that Python includes are real crap.
+
+Fri Mar 15 19:41:25 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure,in: it was reported quite a few times that
+ xml2-config --cflags should not output
+ -I$includeprefix/libxml2/libxml because libxml2 header names
+ clashes with existing names like list.h from C++ stl.
+ Includes should be #include<libxml/xxx.h> so ...
+
+Fri Mar 15 10:41:50 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: another patch from Aleksey Sanin
+
+Fri Mar 15 08:55:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: applied patch from Aleksey Sanin fixing a problem in the
+ canonicalization algorithm
+ * doc/xml.html doc/index.html: added the C14N references on the
+ index page.
+
+2002-03-13 jacob berkman <jacob@ximian.com>
+
+ * python/Makefile.am: remove LDADD and CFLAGS as this is broken
+ usage, redundant, and gcc specific
+
+Wed Mar 13 11:00:59 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: speedup some node selection operations, this can
+ have a significant impact on DocBook Norm's stylesheets
+ * nanohttp.c: someone reported that SOCKLEN_T may not be defined
+ make sure it's always the case
+ * debugXML.c: distinguish CDATA and comments in ls operations
+
+Tue Mar 12 19:45:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/*.h: Heiko W. Rupp fixed a lot of comments
+ to generate better API descriptions etc...
+
+Mon Mar 11 10:10:30 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: Fixing #74186, made sure all boolean expressions
+ get fully parenthesized, ran indent on the output
+ * configure.in HTMLtree.c SAX.c c14n.c debugXML.c tree.c xpointer.c
+ include/libxml/tree.h: also #74186 related, removed the
+ --with-buffers option, and all the preprocessor conditional
+ sections that were resulting from it.
+
+Sun Mar 10 17:47:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: applied patch from Dodji Seketeli fixing an
+ uninitailized variable in xmlValidGetValidElements()
+
+Sat Mar 9 15:10:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * c14n.c: fixed a few comments
+ * doc/*.html doc/*/*.html: regenerated the docs and added
+ the C14N API
+ * doc/api.xsl doc/gnome-xml.sgml: fixups and added IDs
+
+Sat Mar 9 11:16:11 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: fix to adapt varaiations in the
+ bindings
+ * configure.in python/setup.py python/setup.py.in: fixed to
+ have the version of the python scripts automatically updated
+
+Fri Mar 8 16:45:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed a bug newly introduced and pointed by Uwe Fechner
+ in xmlCopyProp()
+
+Fri Mar 8 15:49:10 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.17 release
+ * doc/*: updated and rebuilt the docs
+ * xpath.c: fixed a comment
+ * python/libxml.c: fixed a possible reentrancy problem
+
+Thu Mar 7 23:19:28 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c python/tests/Makefile.am python/tests/attribs.py:
+ fixed xmlHasNsProp() bugs for defaulted from DTD attribs,
+ added a specific regression test
+ * python/generator.py: xmlHasNsProp() and xmlHasProp() shall
+ not raise exceptions when failing to find the attribute.
+
+Thu Mar 7 16:11:35 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in xmllint.c: owen pointed out a problem with the
+ ftme fix, gettimeofday() was not detected by configure and
+ the ftime header wasn't included, dohhh
+
+Thu Mar 7 12:19:36 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in xmllint.c: trying to fix #71457 for timing
+ precision when gettimeofday() is not availble but ftime() is
+
+Thu Mar 7 11:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in doc/Makefile.am: Fixed #73408 missing images
+ are now copied on install and part of the -devel RPM
+
+Thu Mar 7 09:34:16 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: trying to avoid bug #72150 which was apparently
+ caused by a gcc bug (or a processor problem) as detailed
+ at http://veillard.com/gcc.bug
+
+Thu Mar 7 01:02:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c python/tests/Makefile.am python/tests/cutnpaste.py:
+ fixed xmlReconciliateNs(), added a Python test/example for
+ inter-document cut'n paste
+ * python/libxml.py: fixed node.doc on document nodes and added
+ xpathEval() onto node objects
+
+Wed Mar 6 22:38:03 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixed some htmlSetMetaEncoding() problems
+ * python/libxml.c python/tests/Makefile.am python/tests/serialize.py:
+ fixup and integrated tests for the serialization stuff
+
+Wed Mar 6 19:40:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am libxml.3 libxml.4 libxml.spec.in: Fixed bug #72570
+ moved the libxml man page to section 3
+
+Wed Mar 6 18:34:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fix bug #72490
+ * python/libxml.c python/libxml.py: added methods serialize()
+ and saveTo() to all node elements.
+
+Tue Mar 5 21:27:03 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: closed #73430, don't read from an input source
+ which indicated an end-of-file or an error.
+
+Tue Mar 5 16:33:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: make sure SAX endDocument is always called as
+ this could result in a Python memory leak otherwise (it's
+ used to decrement ref-counting)
+ * python/generator.py python/libxml.c python/libxml.py
+ python/libxml2-python-api.xml python/libxml2class.txt
+ python/tests/error.py python/tests/xpath.py: implemented
+ the suggestions made by Gary Benson and extended the tests
+ to match it.
+
+Tue Mar 5 10:35:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py: applied patch fixing #73450
+
+Mon Mar 4 17:59:29 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixing #61290 "namespace nodes have no parent"
+ long standing divergence from the XPath REC. NodeSets
+ simply hold a copy of namespace nodes and those node ->next
+ points to the parent (which may not be the node carrying the
+ definition).
+ * include/libxml/xpath.h: flagged but didn't added a possible
+ speedup
+ * DOCBparser.c HTMLparser.c: removed some warnings from push
+ parser due to new state being added.
+ * tree.c: new fix from Boris Erdmann
+ * configure.in c14n.c include/libxml/c14n.h testC14N.c: added
+ the XML Canonalization support from Aleksey Sanin
+
+Sun Mar 3 15:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: patch from Boris Erdmann fixing some namespace odities
+ with xmlCopyNode()
+
+Sat Mar 2 10:33:04 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: fix bug #72706 when loading a NULL entity
+
+Fri Mar 1 17:14:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: Fixed #72346, about handling of xmlns:foo="", this could
+ actually change in a future XML Namespace revision.
+
+Fri Mar 1 17:12:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/types.c python/tests/Makefile.am python/tests/xpathret.py:
+ added the possibility of returning nodesets from XPath extension
+ functions written in Python
+
+Fri Mar 1 13:56:12 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/*: commiting some Python bindings work done while travelling
+
+Fri Mar 1 10:11:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: close #72663 and #72658, don't memdump unless compiled
+ explicitely with memory debugging switched on
+
+Sat Feb 23 11:08:09 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt python/libxml_wrap.h python/types.c:
+ Added wrapper for the xmlURIPtr type, provided accessors, fixed
+ the accessor generator for strings
+ * python/tests/Makefile.am python/tests/tstURI.py: added a specific
+ regression test.
+
+Fri Feb 22 23:44:57 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/README python/generator.py python/libxml.c python/setup.py:
+ added the 'usual' setup.py to allow building a libxml2-python
+ module based on the same code. The initialization is however
+ different the 2 .so files fo libxml2 and libxslt are identical and
+ they entry point initialize both libraries. this is done to avoid
+ some possible nasty problem since the Python don't merge the maps
+ of all shared modules.
+
+Wed Feb 20 23:16:08 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed a push/encoding bug reported by Michael
+ on librsvg
+
+Wed Feb 20 19:54:05 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/parserInternals.h: fixes a misplaced #endif
+
+Wed Feb 20 17:47:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c valid.c: found and fixed a couple of allocation bugs
+
+Wed Feb 20 15:36:03 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xml.html doc/python.html doc/*: added a Python and binding
+ page describing the current state of the Python bindings and
+ giving pointers to the other languages wrappers.
+
+Wed Feb 20 11:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.16
+ * doc/* python/libxml2class.txt: updated and rebuilt the docs,
+ rebuilt the API and web site
+ * xpath.c: fixed #71978 portability bugs
+
+Tue Feb 19 22:49:36 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: oops broke automatic defaulting of namespaces attributes.
+
+Tue Feb 19 22:01:35 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/parserInternals.h parser.c: had to change
+ 2 internal parsing API when processing document content
+ to check the start and end of element content are defined
+ in the same entity
+ * valid.c include/libxml/valid.h: attribute normalization can
+ generate a validity error added xmlValidCtxtNormalizeAttributeValue()
+ with the context to report it.
+ * SAX.c: fixed the last known bugs, crazy validation constraints
+ when a document is standalone seems correctly handled. There
+ is a couple of open issues left which need consideration especially
+ PE93 on external unparsed entities and standalone status.
+ Ran 1819 tests: 1817 suceeded, 2 failed and 0 generated an error in 8.26 s.
+ The 2 tests left failing are actually in error. Cleanup done.
+
+Tue Feb 19 15:17:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: implemented E59 spaces in CDATA does not match the
+ nonterminal S
+
+Tue Feb 19 14:44:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c parser.c valid.c: more validation test fixups
+ * check-xml-test-suite.py: added duration info for the tests
+
+Mon Feb 18 23:25:08 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c valid.c: a couple of errors were reported but not
+ saved back as such in the parsing context. Down to 1% failure rate
+ Ran 1819 tests: 1801 suceeded, 18 failed and 0 generated an error
+
+Mon Feb 18 20:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlInternald.c: isExtender was missing a char
+ * parser.c include/libxml/parser.h: % are acceptable in the
+ internal subset if within a PUBLIC ID
+
+Mon Feb 18 19:27:32 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c parserInternals.c valid.c: more work on the conformance
+ suite. Took the step to finally block documents with encoding
+ errors. It's a fatal error per the spec, people should have fixed
+ their documents by now.
+
+Mon Feb 18 15:30:14 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: fixed the test script after some discussion
+ on the semantic of TYPE="error"
+ * Makefile.am: added the script to the distrib
+
+Mon Feb 18 12:17:41 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c entities.c: fixed a couple of conformances issues deep
+ into the validation code (standalone and undeclared Notations)
+
+Mon Feb 18 00:17:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed #71741 supid typo an a bug about encoding parsing
+ stayed there for years !
+
+Mon Feb 18 00:06:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c SAX.c: fixed #71740 NotationDecl with a required field
+ missing
+
+Sun Feb 17 23:45:40 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: improved the behaviour a bit as
+ well as the logs
+ * parser.c valid.c SAX.c: fixed a few more bugs
+ "Ran 1819 tests: 1778 suceeded, 41 failed, and 0 generated an error"
+
+Sun Feb 17 20:41:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * check-xml-test-suite.py: python script to run regression tests
+ against the XML Test suite of W3C/OASis
+ * SAX.c: fixed a validation bug
+ * parser.c: fixed 3 errors pointed by the test suite
+ * doc/buildDocBookCatalog: fixed a typo pointed by drake
+ * python/Makefile.am: fixed a dependendy
+
+Fri Feb 15 21:47:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlmemory.c: avoid a warning bug #71594
+
+Wed Feb 13 22:13:33 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlmemory.c: Jesse Perry provided a patch to remove a few
+ warning on alpha/Tru64
+
+Wed Feb 13 14:30:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/entities.h: fixing a comment
+ * valid.c: fixing some troubles with validity check on namespaces
+ * result/VC/NS3 test/VC/NS3: added a specific regression test
+
+Wed Feb 13 14:05:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Fixing #71342 serializing '\n' in attribute values
+ * result/noent/att3 result/att3 test/att3: added a specific
+ test.
+
+Tue Feb 12 14:45:32 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: couple of bug fixes
+
+Mon Feb 11 19:41:29 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/*.py: removed tabs and used spaces.
+
+Mon Feb 11 19:25:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.15
+ * doc/news.html doc/xml.html doc/xmlio.html: rebuilt some docs
+
+Mon Feb 11 14:53:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xmlcatalog_man.xml: trying to close Red Hat bug #58707
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=58707
+
+Mon Feb 11 09:53:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/encoding.h include/libxml/entities.h
+ include/libxml/globals.h include/libxml/parser.h
+ include/libxml/threads.h include/libxml/tree.h
+ include/libxml/xmlmemory.h: trying to fix the include mess
+
+Mon Feb 11 08:53:33 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlmemory.h: reverted part of the previous
+ attempt to provide #69655, this was breaking the build.
+
+Sun Feb 10 14:13:34 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c Makefile.am build_glob.py configure.in debugXML.c
+ globals.c parser.c threads.c tree.c valid.c xmlmemory.c
+ xpath.c xpointer.c include/libxml/globals.h include/libxml/parser.h
+ include/libxml/parserInternals.h include/libxml/tree.h
+ include/libxml/xmlmemory.h include/libxml/xpathInternals.h:
+ Tentatively fixed #69655 , make compiling with -Wredundant-decls
+ clean.
+ * python/libxml.c: fixed a warning.
+
+Sun Feb 10 12:02:59 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c valid.c xinclude.c: fix #68882, cleanup the XInclude
+ copying of node, merge back IDs in the target document.
+ * result/XInclude/docids.xml test/XInclude/docs/docids.xml
+ test/XInclude/ents/ids.xml: test case
+ * result/VC/ElementValid4: output changed due to a typo fix
+
+Sat Feb 9 23:15:04 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: seems some version of automake didn't
+ generate the dependencies right as Jacob found out. Add
+ an extra dependency rule.
+
+Sat Feb 9 18:59:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c valid.c: Justin Fletcher found some parts
+ of the code needing cleanup
+ * libxml.spec.in python/Makefile.am python/generator.py
+ python/libxml.c python/libxml.py: Fixed the python Makefiles
+ corrected a bug showing up on ia64, changed the name of the
+ python internal module too
+
+Fri Feb 8 15:19:28 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: applied patch from Andris Pavenis for binary
+ name suffixes
+
+Fri Feb 8 14:43:17 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c win32/win32config.h: fixing #68748
+
+Fri Feb 8 14:37:05 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixing #70166
+
+Fri Feb 8 14:31:24 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixing #70077
+
+Fri Feb 8 14:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Copyright Makefile.am README configure.in libxml.spec.in:
+ Changed to the MIT Licence
+ * doc/FAQ.html doc/catalog.html doc/intro.html doc/xml.html
+ doc/xmlio.html: updated the doc accordingly
+ * include/libxml/xmlwin32version.h configure.in: preparing
+ 2.4.14 release
+ * python/generator.py python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt python/libxml_wrap.h python/types.c:
+ fixed the const xmlChar * wrapper and generator, XPath extension
+ functions now use the context as first argument
+ * python/tests/tstxpath.py python/tests/xpath.py
+ python/tests/xpathext.py: Updated the tests accordingly
+ * tree.c: fixed bug #70067
+
+Thu Feb 7 17:33:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: cleanup
+ * debugXML.c: always use stdout if output is NULL
+ * xmlIO.c: don't close filedescriptors passed to outputBuffers
+ * python/Makefile.am python/generator.py python/libxml2class.txt
+ python/libxml_wrap.h python/types.c: augmented the number of bindings
+ handling FILE * and XPath contexts
+ * python/tests/Makefile.am: avoid a stupid problem due to the
+ use of TEST.
+
+Wed Feb 6 23:37:07 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: fixed stupid bug #70738 found by alfons hoogervorst
+
+Wed Feb 6 17:04:51 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/TODO python/libxml.c: cleanup the extension function lookup
+ * xmlmemory.c include/libxml/xmlmemory.h: always compile the list
+
+Tue Feb 5 17:33:30 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in python/Makefile.am: do not install outside
+ of prefix
+
+Mon Feb 4 15:05:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/TODO python/libxml.c: started adding SAX interfaces
+ * python/tests/Makefile.am python/tests/pushSAX.py: added a basic
+ SAX test
+
+Mon Feb 4 01:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: hardened the addChild function
+ * python/generator.py python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt python/libxml_wrap.h python/TODO:
+ added accessors needed for xmlNode, a bit more testing and
+ extension of interfaces
+ * python/tests/Makefile.am python/tests/build.py: added a test
+ build from scratch/save/load/check
+
+Sun Feb 3 21:10:39 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: change a small bit in the way valididy
+ error messages get initialized
+ * python/TODO python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt python/libxml_wrap.h python/types.c:
+ added some memory debugging to track leaks at the libxml2 level
+ * python/tests/*.py: changed all tests to check for leaks,
+ there is just one left in XPath extension registrations.
+
+Sun Feb 3 17:50:46 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/TODO python/generator.py python/libxml2-python-api.xml
+ python/libxml2class.txt: more accessor classes for the parser
+ context, allow to switch on and check validity
+ * python/tests/Makefile.am python/tests/error.py
+ python/tests/invalid.xml python/tests/valid.xml
+ python/tests/validate.py: attded more test and and added error.py
+ which I forgot to commit in the last step
+
+Sun Feb 3 16:03:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/types.c: cleanup
+ * python/libxml.c python/libxml.py python/libxml_wrap.h
+ python/generator.py python/libxml2-python-api.xml
+ python/libxml2class.txt: added class for parser context, added
+ first cut for push mode support. Added a framework to generate
+ accessors functions.
+ * python/tests/Makefile.am python/tests/push.py: added a push
+ test
+
+Sun Feb 3 00:17:26 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/TODO python/libxml.py: fixed a small
+ bug a bit of cleanup.
+
+Sat Feb 2 22:47:10 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt: adding error redirections and preformat
+ to a python handler
+ * python/tests/Makefile.am python/tests/*.py: cleanup made all
+ tests self checking
+
+Sat Feb 2 13:18:54 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c python/libxml.py: fixed a stupid bug when renaming
+ a function
+
+Sat Feb 2 11:25:51 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in python/Makefile.am python/TODO python/generator.py
+ python/libxml.c python/libxml2-python-api.xml
+ python/libxml2class.txt: Progressing through the TODOs, class
+ description output, extra XML API, RPM now builds the wrappers
+ for all python installed versions
+
+Sat Feb 2 10:13:52 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in libxml.spec.in python/Makefile.am python/TODO
+ python/generator.py python/libxml2class.txt: added more informations
+ in the libxml2-python package including docs. Slightly changed
+ the class hierarchy
+ * python/tests/*: added basic regression tests infrastructure too
+
+Fri Feb 1 23:11:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in libxml.spec.in example/Makefile.am python/Makefile.am:
+ added libxml2-python as part of the packages installed
+
+Fri Feb 1 18:48:19 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/generator.py python/libxml.c
+ python/libxml.py: more work, now able to extend the
+ XPath interpreter with functions written in python.
+
+Fri Feb 1 10:28:51 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am: Jacob sent a patch to allow building from
+ tarfile.
+
+Fri Feb 1 00:40:48 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/Makefile.am python/libxml.c configure.in Makefile.am:
+ inserted the python wrappers build, I hope this won't be too
+ unportable
+
+Thu Jan 31 21:27:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: minor optimization
+ * python/generator.py python/libxml.c python/libxml.py
+ python/libxml_wrap.h: more work on the python bindings,
+ they now support XPath and there is no evident leak
+
+Thu Jan 31 00:48:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml.py:
+ more work on the python bindings generator.
+
+Wed Jan 30 21:51:26 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml_wrap.h:
+ more work on the python bindings.
+
+Wed Jan 30 17:35:33 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * python/generator.py python/libxml.c python/libxml.py
+ python/libxml_wrap.h: commited early version of a python binding
+ for private use only ATM
+
+Sat Jan 26 22:41:13 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c tree.c include/libxml/entities.h: applied patch
+ from Anthony Jones to implement copy of DTD subtree too. Had
+ just to keep 2 function private which really ought to become
+ public ones.
+
+Fri Jan 25 15:14:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: added pointers to the web pages in the usage()
+
+Thu Jan 24 17:04:04 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: more fixes from Petr Kozelka for attribute handling
+ in the tree API to align the semantic with DOM.
+
+Thu Jan 24 16:00:53 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c tree.c entities.c: another set of patches from
+ Anthony Jones for copy operations cleanup and robustness
+
+Wed Jan 23 18:53:55 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/APIchunk*.html doc/parsedecl.py doc/api.xsl: generated
+ an alphabetic index based on comments content
+ * doc/*: rebuilt the web site with the new references
+
+Wed Jan 23 15:14:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.h: Greg Sjaardema suggested to use an
+ eponential buffer groth policy in xmlParserAddNodeInfo()
+
+Wed Jan 23 13:32:40 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/api.xsl doc/APIconstructors.html doc/APIfiles.html
+ doc/APIfunctions.html doc/APIsymbols.html doc/libxml2-refs.xml
+ doc/parsedecl.py doc/Makefile.am: updated the python extractor
+ to generate cross-references, and added/updated the stylesheets
+ to generate and link API indexes. The generic keyword index
+ is not done yet.
+ * doc/*.html: regenerated all the usual docs too
+
+Tue Jan 22 23:11:26 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: added an xpath function to the shell for T. V. Raman
+
+Tue Jan 22 22:42:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: patch from Anthony Jones to catch NULL nodes in
+ debug routines.
+
+Tue Jan 22 22:38:42 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: apply an patch from Petr Kozelka for unlink and replace
+ support of attribute nodes
+
+Tue Jan 22 19:12:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/libxml2-api.xml doc/parsedecl.py: Build a new version
+ hopefully near complete and fully documented of the API in XML
+ * HTMLtree.c SAX.c debugXML.c error.c globals.c parser.c tree.c
+ xmlIO.c xmlmemory.c include/libxml/catalog.h include/libxml/hash.h
+ include/libxml/list.h include/libxml/parser.h include/libxml/tree.h
+ include/libxml/parserInternals.h include/libxml/valid.hi
+ include/libxml/xmlIO.h include/libxml/xmlerror.hi
+ include/libxml/xmlmemory.h include/libxml/xmlversion.h.ini
+ include/libxml/xpath.h include/libxml/xpathInternals.h:
+ Cleaned up the doc comments a lot in the process, the interface
+ coverage is now 100%
+
+Tue Jan 22 00:12:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/libxml2-api.xml doc/parsedecl.py: improved the script to
+ extracts comments from the gtk-doc DocBook output (a bit
+ convoluted but seems to work).
+
+Mon Jan 21 18:29:19 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am doc/Makefile.am doc/libxml2-api.xml doc/parsedecl.py:
+ added an XML description of the API, moved the script generating
+ it here. Added a "make api" target
+
+Mon Jan 21 14:34:37 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Adam Lounds pointed out a bug in xmlSearchNs()
+
+Mon Jan 21 09:55:21 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c include/libxml/xpathInternals.h: the change made to
+ xmlXPathFuncLookupFunc was incompatible roll it back
+
+Sun Jan 20 23:03:41 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: cleanup patch from Anthony Jones
+ * doc/Makefile.am: fix the headers to avoid in make scan
+ * parserInternals.c xpath.c include/libxml/*.h: cleanup of the
+ includes, * vs Ptr and general cleanup
+ * parsedecl.py: first version of a script to extract the
+ module interfaces, the goal will be to provide .decl or XML
+ specification of the interfaces to build wrappers.
+
+Sun Jan 20 13:38:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xmlcatalog_man.xml xmlcatalog.c: Fixed bug #68830, xmlcatalog
+ now provides return codes in case of errors
+
+Sat Jan 19 16:36:21 CET 2002 Bjorn Reese <breese@users.sourceforge.net>
+
+ * trio.h trio.c triodef.h triop.h trionan.h trionan.c Makefile.am:
+ Upgraded to trio baseline 1.6
+ * strio.h strio.c: Replaced by triostr.h and triostr.c
+
+Fri Jan 18 17:22:50 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c xmlIO.c xmlcatalog.c: removed the last occurences
+ of strdup usage in the code
+
+Fri Jan 18 12:47:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c error.c: Keith Isdale complained rightly that
+ xmlInitParser() did not preserve value set by xmlSetGenericErrorFunc
+
+Thu Jan 17 09:44:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed the funxtion to set the xml: attributes
+ * debugXML.c: added "setbase" to test it.
+
+Wed Jan 16 16:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: update xmlNodeSetContent() and xmlNodeSetContentLen()
+ to allow updating an attribute content
+
+Tue Jan 15 18:09:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.h: try to avoid problems when compiling on Windows
+
+Mon Jan 14 18:56:25 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * hash.c: patch from Anthony Jones for hash.c allocation size
+ * Makefile.am: trying to work around Yet Another Libtool Madness
+ and build the 2.4.13 release finally ...
+
+Mon Jan 14 18:27:19 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: updated to 2.4.13
+ * doc/* : update of the documentation
+
+Mon Jan 14 17:53:41 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c tree.c: some cleanup after an unsuccessful attempt
+ at fixing #61290 :-(
+
+Sun Jan 13 21:30:54 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed xmlSaveFormatFileEnc() when encoding == NULL
+ Fixes bug #67229
+
+Sun Jan 13 17:14:06 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: trying to avoid troubles when a subtree is copied
+ and coalesced in part with the target tree. Should fix
+ bug #67407
+
+Sun Jan 13 16:37:15 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixed validation of attributes content of type
+ NAME NAMES NMTOKEN and NMTOKENS to accept internationalized
+ values, very old bug. Fixes #67671
+
+Sun Jan 13 15:07:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c include/libxml/parserInternals.h tree.c: integrated
+ a couple of fixes and a new API function xmlSetEntityReferenceFunc()
+ from Keith Isdale and dedicated to xsldbg the XSLT debugger.
+
+Sun Jan 13 14:23:21 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * threads.c: applied Serguei Narojnyi's patch to add native
+ thread support on the Win32 platform
+ * testThreadsWin32.c Makefile.am: added the test program also
+ from Serguei, Win32 specific
+ * include/win32config.h include/libxml/xmlwin32version.h.in:
+ added patch from Igor for the Windows thread specific defines.
+
+Wed Jan 9 12:50:39 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c: Anthony Jones pointed a bug in xmlCopyEntity()
+
+Tue Jan 8 14:23:22 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/*.html doc/site.xsl doc/Makefile: renamed XML.html
+ output page into XMLinfo.html. Close bug #66951 and
+ raised by Robert Collins too.
+
+Tue Jan 8 14:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: Paul Keogh pointed out a possibility of segfault
+ on repeted xmlAddEncodingAlias() / xmlCleanupEncodingAlias().
+ Closes bug # 68238
+
+Tue Jan 8 12:48:27 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/*.html: updated the Gdome2 links
+
+Tue Jan 8 11:32:30 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.h: Applied following patches from Robert Collins
+ and make sure IN_LIBXML is defined when compiling it
+ -------
+ * include/libxml/xmlversion.h.in (LIBXML_DLL_IMPORT): Use on Cygwin
+ as well as Visual C.
+ * parser.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
+ * parserInternals.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
+ * strio.c (PLATFORM_UNIX): Define for Cygwin.
+ * triodef.h (TRIO_PLATFORM_UNIX): Define for Cygwin.
+ * xmlIO.c (xmlFileOpen): Use unix behaviour for Cygwin.
+ Use binary mode opens for Cygwin (xmlFileOpenW xmlParserGetDirectory
+ xmlSysIDExists xmlNoNetExists).
+ * xmllint.c: Don't include winsock2.h for Cygwin.
+
+Mon Jan 7 17:52:48 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Jirka Kosek pointer out a bug in xmlParseTextDecl()
+ when the version info is not present.
+
+Mon Jan 7 00:03:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Anthony Jones pointed out a problem in
+ xmlStringGetNodeList() and provided a fix for it
+
+Sun Jan 6 13:45:49 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: patch from Frank J Franklin to remove a bug in
+ xmlCreatePushParserCtxt() when the initial buffer passed
+ is large.
+
+Sat Jan 5 19:24:23 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * win32/*: big cleanup of the Windows/MSVC project files
+ from Igor Zlatkovic
+
+Wed Jan 2 14:11:35 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * doc/Makefile.am: should fix #67674 and avoid troubles if
+ xsltproc is not available or fails in the prefix provided
+
+Tue Jan 1 17:48:56 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlmemory.c: one more doc patch from Charlie Bozeman.
+
+Mon Dec 31 17:35:40 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c parser.c valid.c include/libxml/parserInternals.h
+ include/libxml/xmlerror.h include/libxml/xpathInternals.h:
+ Fixed a few other problems raised by Charlie Bozeman.
+ * result/VC/ElementValid[5-7]: fixed the output
+
+Mon Dec 31 17:13:34 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * *.c include/libxml/*.h doc/html/*: applied 42 documentation
+ patches from Charlie Bozeman. Regenerated the HTML docs.
+
+Thu Dec 20 14:59:52 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/debugXML.h win32/dsp/libxml2.def.src: fixes
+ for Windows from Igor
+
+Tue Dec 18 12:13:33 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: applied Justin Fletcher patch for --output or -o
+
+Tue Dec 18 08:52:32 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/libxml2/libxml2.def.src: close #67019
+
+Tue Dec 18 08:08:51 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: applied Justin Fletcher generic timing patch
+ similar to the one already applied to xsltproc.
+
+Mon Dec 17 16:29:08 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/tree.h tree.c: applied documentation patches
+ from Charlie Bozeman
+
+Thu Dec 13 21:24:16 MST 2001 John Fleck <jfleck@inkstain.net>
+
+ *doc/xmllint.xml, xmllint.1 - document --dropdtd
+
+Thu Dec 13 23:19:50 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fix the xmlStrdup() used in the previous patch.
+ * valid.c: added --dropdtd
+ * tree.c: fixed xmlUnlinkNode so it also removes the references
+ from the document if the node is a DTD
+
+Thu Dec 13 15:54:35 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c valid.c: cleanup some static declarations
+
+Thu Dec 13 15:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: removed another strdup()
+ * doc/FAQ: removed the HP/UX entry
+
+Thu Dec 13 09:44:58 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fix bug #66816 when validating.
+ * xmllint.c: don't use sys/time.h if configure did not found it
+
+Mon Dec 10 21:39:55 MST 2001 John Fleck <jfleck@inkstain.net>
+
+ * docs/xmllint.1, xmllint.xml, xmlcatalog.1, xmlcatalog_man.html,
+ xmlcatalog_man.xml
+
+Mon Dec 10 22:06:16 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlmemory.h: Hietaniemi Jarkko pointed out that
+ xmlInitMemory() was declared twice
+
+Sun Dec 9 14:59:23 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c: do not reference strdup() !
+ * configure.in libxml-2.0.pc.in: trying to fix the libs
+ of the various config extraction modules
+
+Fri Dec 7 15:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in : preparing 2.4.12
+ * doc/* : updated and rebuilt the docs
+
+Fri Dec 7 12:32:00 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: closed bug #66159
+ * testURI.c: added --escape option
+ * configure.in: some cleanup for xml2-config --cflags
+
+Thu Dec 6 15:31:30 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c testThreads.c: removed some misplaced includes
+ of xmlversion.h
+
+Thu Dec 6 09:06:08 EST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * threads.c: patch from Gary Pennington fixing a possible
+ problem at initialization time.
+
+Wed Dec 5 13:01:37 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in libxml.h parser.c testThreads.c macos/: integrated
+ Eric Lavigne contribution to build libxml2 on MacOS using
+ CodeWarrior.
+
+Tue Dec 4 14:13:44 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: applied Geert Kloosterman's patch to fix
+ --repeat --timing output
+
+Thu Nov 29 17:10:22 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: Robin Berjon <robin@knowscape.com> found a case
+ where non-wellformed XML declaractions were not detected.
+
+Wed Nov 28 15:41:40 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpointer.c: fixed a compilation bug pointed by Danny Jamshy
+
+Wed Nov 28 10:09:51 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: as robert pointed again, xmlInputCallbackInitialized
+ gets reset by xmlCleanupInputCallbacks() and this makes the
+ function useless. Same for output.
+
+Tue Nov 27 17:22:36 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: robert pointed out a loop error in callback cleanups
+
+Mon Nov 26 16:56:00 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c debugXML.c include/libxml/tree.h include/libxml/debugXML.h:
+ moved xmlGetLineNo() and xmlGetNodePath() into the main tree module,
+ they are not really tied to debugging
+
+Mon Nov 26 11:31:36 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.11
+ * xmllint.c: better --catalogs description
+
+Sun Nov 25 11:34:24 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: fixed a couple of problems in xmlSetProp()
+
+Thu Nov 22 19:19:10 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c tree.c xmlIO.c xmlmemory.c: some cleanups when chasing
+ unappropriate stdout output.
+
+Thu Nov 22 13:58:14 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/tree.h: Fixed a couple of macro errors pointed out
+ by Denis Beurive, closes #65111
+
+Tue Nov 20 10:34:01 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: in case of content model validity error, don't
+ print it if validity warnings were not requested.
+
+Tue Nov 20 09:30:02 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c: applied a couple of patches from Brian D Ripley.
+ * parserInternals.c: removed the last exit() call. Print an
+ unmaskable error on stderr instead (library mismatch detection)
+
+Sat Nov 17 17:16:51 MST 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmllint.xml, doc/xmllint.1 - update xmllint man page with
+ shell instructions from Heiko Rupp
+
+Thu Nov 15 14:53:42 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: use the URL notation file:// for default catalog paths
+
+Wed Nov 14 16:03:02 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/tree.h: better comments for _private fields
+ * tree.c: removed a problem when copying an entity reference.
+
+Tue Nov 13 16:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * vms/*: updated instructions and diffs from John A Fotheringham
+
+Mon Nov 12 23:43:22 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlerror.h: avoid an include problem if
+ #include <libxml/xmlerror.h> happens first in code
+ seems to be the case in KDE libs
+
+Mon Nov 12 22:32:41 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/* include/libxml/xmlwin32version.h.in: update
+ from Igor for Windows
+
+Mon Nov 12 10:19:41 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: Gary Pennington pointed out a missing prefix
+
+Sat Nov 10 12:55:42 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: preparing 2.4.10
+ * doc/*: upgraded and rebuilt the docs
+
+Sat Nov 10 12:33:38 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fix comment in scripts element parsing.
+ * result/HTML/doc3*: updated the results.
+
+Sat Nov 10 11:18:18 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: another URI bug fix #63336, using Joel Young patch.
+
+Sat Nov 10 11:07:26 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c include/libxml/debugXML.h: add xmlGetNodePath()
+ a cleaned up version of the Pwd shell string generation.
+
+Fri Nov 9 00:34:13 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c include/libxml/tree.h: trying to fix namespaces +
+ validation problems for good, closing #63619 in the process
+ * result/valid/dia.xml test/valid/dia.xml: the Dia test was
+ wrong in this respect, fixed it.
+
+Thu Nov 8 18:31:40 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: Morus Walter patch to allow --format and --encode
+
+Thu Nov 8 14:52:18 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: Stefan Kost provided an help command for the shell
+
+Wed Nov 7 14:32:55 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: Heiko Rupp pointed that the shell would crash
+ on empty nodesets returns.
+
+Wed Nov 7 13:52:36 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: Weiqi Gao pointed out that xmlcatalog
+ migh need the history libraries
+
+Tue Nov 6 23:49:09 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c test/HTML/lt.html result/HTML/lt.html*:
+ handle the case of < in quoted attributes, Bastian Kleineidam
+
+Tue Nov 6 16:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in include/libxml/xmlwin32version.h: releasing 2.4.9
+ fixing catalog breakages
+ * Makefile.am catalog.c result/catalogs/catal
+ result/catalogs/mycatalog.* test/catalogs/catal*:
+ fixed more problems in catalog support, added more regression tests
+ for both XML and SGML catalog handling
+
+Mon Nov 5 20:26:41 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: applied an improvement to xmlGetLineNo() from
+ Keith Isdale
+
+Mon Nov 5 15:20:16 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: dohhhh XML catalog add and remove ops were broken too.
+ Side effect of the progressive catalog loading
+
+Mon Nov 5 12:40:54 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: confexecdir and confexec_DATA were defined twice
+ pointed out by Karl Eichwalder
+
+Sun Nov 4 23:18:34 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlcatalog.c: avoid unlink() and use remove() instead.
+
+Sun Nov 4 23:12:38 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in: cleanup
+ * include/libxml/xmlwin32version.h: updated with 2.4.8
+
+Sun Nov 4 21:17:24 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c global.data globals.c testThreads.c: fix bug #63752
+ of compiling libxml with a non standard set of options
+
+Sun Nov 4 13:11:41 MST 2001 John Fleck <jfleck@inkstain.net
+
+ * doc/xmllint.xml, xmllint.1 - updating xmllint man page to
+ document --sgml option, fixing gnome bugzilla #63382
+
+Sun Nov 4 20:56:53 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h catalog.c: Fixed SGML catalogs
+ breakage of 2.4.7, added a couple of really needed APIs
+ like xmlCatalogIsEmpty() and xmlNewCatalog()
+ * xmlcatalog.c: updated --sgml --noout to be a suitable replacement
+ for install-catalog
+ * configure.in: preparing 2.4.8
+
+Thu Nov 1 15:29:31 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c tree.c include/libxml/HTMLtree.h
+ include/libxml/tree.h include/libxml/xmlIO.h: more include
+ cleanups, export cleanly one html output + format function.
+
+Thu Nov 1 14:12:12 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: removed initGenericErrorDefaultFunc call from
+ xmlInitParser() since it could destroy previous calls to
+ xsltSetGenericErrorFunc() effects
+
+Thu Nov 1 09:37:13 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c include/libxml/debugXML.h: bool can be a reserved
+ keyword.
+
+Wed Oct 31 18:50:08 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: cleanup
+ * threads.c: cleanup too
+ * xmlIO.c include/libxml/xmlIO.h: added xmlNoNetExternalEntityLoader()
+ from xsltproc
+ * include/libxml/tree.h include/libxml/parser.h: trying to break a
+ dependency loop.
+
+Tue Oct 30 18:38:53 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: Justin Fletcher pointed out that xmlParseXMLCatalog
+ was not used anymore !
+
+Tue Oct 30 13:33:13 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.7
+ * Makefile.am doc/Makefile.am: switched to the latest xmllint
+ manual page from John
+ * doc/*: updated the doc and rebuilt the generated pages
+
+Tue Oct 30 11:31:19 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: closing bug #62711, the library should never
+ close stdin or stdout.
+
+Tue Oct 30 10:46:12 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: second pass at fixing #63336, using Joel Young
+ final patch. looks okay.
+
+Tue Oct 30 00:56:05 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c include/libxml/uri.h: trying to clear #63336
+ allowing the escaping routine to parse unconformant
+ URI-References.
+
+Mon Oct 29 19:09:46 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * vms/readme.vms vms/build_libxml.com nanoftp.c
+ include/libxml/xmlversion.h.in: a few VMS updates from
+ John A Fotheringham
+ * include/libxml/xmlIO.h xmlIO.c: added xmlCleanupInputCallbacks()
+ and xmlCleanupOutputCallbacks() for the Perl binding people.
+
+Mon Oct 29 12:44:17 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c globals.c DOCBparser.c HTMLparser.c error.c:
+ apply fixes to close #63271 and avoid segfaults when
+ the error routine gets callbed before xmlInitParser()
+ get called.
+ * nanoftp.c error.c: Applied patches from Justin Fletcher
+ correcting some xmlGenericError misuses.
+
+Sat Oct 27 14:04:45 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ *doc/xmllint.xml, doc/xmllint.1
+ New and improved man page for xmllint - .xml is the original, .1
+ is the generated man page
+
+Wed Oct 24 14:34:25 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * doc/site.xsl doc/*.html doc/Makefile.am: now autogenerate
+ the web site from the main HTML document.
+
+Tue Oct 23 14:32:04 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed an erroneous validation bug when PE refs
+ occurs in external parsed entities referenced from the
+ internals subset
+ * test/valid/index.xml test/valid/dtds/nitf-2-5.dtd
+ test/valid/dtds/NewsMLv1.0.dtd result/valid/index.xml*:
+ added the associated testcase, it's a nice one.
+ * HTMLparser.c: generate the DTD node as HTML still ...
+ * HTMLtree.c: fixed errors in Set/GetMetaEncoding
+
+Mon Oct 22 14:20:17 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixed a bug in htmlNewDoc()
+
+Mon Oct 22 11:32:36 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * test/threads/*: added entities testing to the Thread test
+ * testThreads.c: make the test reasonable
+ * DOCBparser.c: fix the DTD public and system ID
+ * xmllint.c: added --sgml for SGML DocBook importing
+ * Makefile.am: added Docbtests target
+
+Fri Oct 19 11:47:13 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c: use only "anonymous@" string for anonymous passwds
+ * testThreads.c: removed bogus include
+
+Thu Oct 18 16:56:23 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c valid.c result/valid/rss.xml result/valid/rss.xml.err:
+ fixed a very serious (looping) validation bug
+
+Wed Oct 17 11:56:25 EDT 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/globals.h include/libxml/threads.h threads.c
+ testThreads.c: far more testing, cleaning up bugs
+ * *.c : make sure globals.h is always included.
+
+Wed Oct 17 17:41:41 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: try to get rid of parser loops for good.
+
+Wed Oct 17 13:29:02 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: fixed some bugs in CFLAGS passing.
+ * test/threads Makefile.am testThreads.c: added a specific
+ threaded test case (really nasty, guaranteed).
+
+Tue Oct 16 23:01:49 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: serious cleanup on the management of the
+ XML catalog tree, more tests done, especially with
+ the catalog PI.
+
+Tue Oct 16 08:43:43 EDT 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: avoid a problem in catalog cleanup on SMP if
+ catalogs were not initialized.
+
+Tue Oct 16 14:33:19 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c xpath.c: trying to cleanup the not thread safe
+ parts of the library.
+
+Mon Oct 15 14:30:11 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/globals.h configure.in global.data: make
+ the allocation be per-thread a configure option
+ * encoding.c include/libxml/parser.h: fixed compilation
+ errors
+
+Mon Oct 15 12:45:03 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/parser.h: Norm reported that a few lines
+ added were breaking libxslt compile, removed them for now
+
+Sun Oct 14 05:55:01 EDT 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c parserInternals.c threads.c: debugged and fixed
+ initialization problems which were giving troubles on SMP
+ boxes.
+
+Sat Oct 13 16:17:13 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/Makefile.am: missing globals.h
+
+Sat Oct 13 14:15:00 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * globals.c: added a couple of standard includes.
+
+Sat Oct 13 11:08:20 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/SAX.h include/libxml/globals.h include/libxml/parser.h
+ include/libxml/parserInternals.h include/libxml/tree.h
+ include/libxml/xmlerror.h HTMLparser.c SAX.c error.c globals.c
+ nanoftp.c nanohttp.c parser.c parserInternals.c testDocbook.c
+ testHTML.c testSAX.c tree.c uri.c xlink.c xmlmemory.c:
+ Applied the last patches from Gary, cleanup, activated threading
+ all user accessible global variables are now handled in globals.[ch]
+ Still a bit rought but make tests passes with either
+ --with-threads defined at configure time or not.
+ * Makefile.am example/Makefile.am: added globals.[ch] and threads
+ linking options
+
+Fri Oct 12 19:25:55 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am include/libxml/Makefile.am
+ include/libxml/globals.h globals.c include/libxml/threads.h
+ threads.c build_glob.py global.data xmlcatalog.c acconfig.h
+ configure.in: started integrating the core of the thread support
+ not activated yet but half integrated. The code should still
+ compile and work anyway.
+
+Fri Oct 12 00:53:03 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c catalog.c debugXML.c entities.c nanoftp.c
+ parser.c valid.c xmlmemory.c xpath.c xpointer.c: started
+ integrating the non-controversial parts of Gary Pennington
+ multithread patches
+ * catalog.c: corrected a small bug introduced
+
+Thu Oct 11 20:58:15 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c include/libxml/catalog.h: very serious cleanup,
+ isolating unportable code and as much as possible the accesses
+ to the global shared catalog. May need more testing !
+
+Thu Oct 11 11:10:31 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/debugXML.h debugXML.c tree.c: integrating
+ Keith Isdale patches for the XSLT debugger interfaces. Some
+ cleanup
+
+Thu Oct 11 08:44:01 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/Makefile.mingw: update from Tobias Peters for 2.4.5
+ * DOCBparser.c: generate line nubers in elements
+
+Wed Oct 10 11:35:45 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing 2.4.6 release
+ * doc/xml.html doc/html/*: updated and rebuilt the docs
+ * include/libxml/*.h *.c: fixed a number of teh/the widht/width typos
+
+Mon Oct 8 20:38:27 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlcatalog_man.xml, xmlcatalog.1, xmlcatalog_man.html
+ adding documentation for DV's supercatalog support
+
+Mon Oct 8 17:00:16 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h catalog.c xmlcatalog.c: adding SGML
+ super catalog support adding one API and one flag --sgml to
+ xmlcatalog
+
+Sun Oct 7 16:43:57 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlcatalog_man.xml, xmlcatalog.1
+ One more crack at
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392
+
+
+Sun Oct 7 18:47:02 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * xpath.c: implemented xmlXPathObjectCopy for external objects
+ * include/libxml/xpathInternals.h: added xmlXPathStackIsExternal
+
+Sat Oct 6 16:25:52 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ *doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
+ finishing up fix to
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392, making
+ the xmlcatalog man page display more elegantly
+
+Sat Oct 6 15:27:12 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: closing bug #61832
+ * HTMLparser.c: removed a warning
+
+Sat Oct 6 15:07:14 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixing #61673 part I, do not loose doc information
+ when copying result value trees.
+
+Sat Oct 6 11:58:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: trying to harden the XPath interpreter
+
+Fri Oct 5 20:37:51 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlcatalog.1 updated using a new stylesheet to address, in
+ part, https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392
+
+Fri Oct 5 23:35:00 HKT 2001 William Brack <wbrack@mmm.com.hk>
+
+ * HTMLparser: repaired another loop problem
+
+Fri Oct 5 11:16:21 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * uri.c: applied fix from Mathias Hasselmann about a bug in URI
+ parsing.
+ * xpath.c: fix bug #61291 the default XML namespace node is
+ missing from the namespace axis.
+ * tree.c: refuse to create namespaces nodes with prefix "xml"
+
+Thu Oct 4 16:47:44 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: ouch a non-defined namespace could lead to a crash,
+ fixed #61215
+
+Thu Oct 4 16:24:26 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: closed bug #61054
+
+Wed Oct 3 15:19:04 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/Makefile.am: closing #60708
+
+Tue Oct 2 15:52:05 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src include/libxml/parser.h parser.c:
+ adding xmlSAXParseFileWithData following Marco Stipek suggestion
+
+Tue Oct 2 11:27:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: close bug #61550 when xml: wasn't considered a namespace
+
+Tue Oct 2 11:18:32 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src: Igor Zlatkovic patches
+ * DOCBparser.c HTMLparser.c parser.c: fixed typos
+
+Mon Oct 1 09:34:51 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: Justin Fletcher provided cleaup code in case
+ HAVE_STAT is not defined
+ * include/win32config.h: Igor Zlatkovic suggested to have
+ HAVE_STAT defined there
+
+Sat Sep 29 00:15:00 HKT 2001 William Brack <wbrack@mmm.com.hk>
+
+ * catalog.c - fixed typing error reported by M. Barros
+
+Sun Sep 23 21:02:39 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * xmllint.c - fixing typo
+
+Sat Sep 22 10:00:00 HKT 2001 William Brack <wbrack@mmm.com.hk>
+
+ * HTMLparser.c: small enhancement to prevent loop on
+ unrecognizable data
+
+Fri Sep 21 11:45:53 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parserInternals.c: applying patch from bug #60757 this
+ should close it
+
+Thu Sep 20 15:54:29 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c xmlcatalog.c: removed a couple of warning
+ * xpath.c: try to solve the linking problem on platforms
+ needing trio to compile
+
+Wed Sep 19 10:01:37 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am libxml.spec.in: backing up non-documented changes
+ commited without review or aproval by Jens Finke <jens@gnome.org>
+ * HACKING: made 100% clear that no commit should be done directly
+
+Mon Sep 17 18:52:37 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: Joe Orton provided a patch fixing a problem
+ when iconv is specified to be in a non-standard directory
+ but wasn't exported in xml2-config --cflags
+
+Fri Sep 14 19:32:43 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: let's ship 2.4.5 before getting too much
+ troubles with 2.4.4 errors.
+
+Fri Sep 14 12:26:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c entities.c: do not output hexadecimal charrefs
+ when serializing HTML since some version of Netscape can't
+ grok it, generate decimal ones.
+ * result/HTML/doc3.htm: output changed due to previous test
+ * parserInternals.c: repair xmlKeepBlanksDefault() broken in 2.4.4
+
+Thu Sep 13 13:34:27 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml-2.0.pc.in: dohh generated the wrong include path :-(
+ * doc/Makefile.am libxml.spec.in: re-dohh forgot the new manpage :-(
+
+Wed Sep 12 22:14:55 CEST 2001 Daniel Veillard <daniel@veillard.com>
+ Released 2.4.4
+
+ * config.h.in configure.in libxml.spec.in include/libxml/Makefile.am
+ libxml-2.0.pc.in: moved includes to includedir/libxml2/libxml,
+ updated the configuration scripts systems accordingly
+
+Wed Sep 12 20:49:32 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: preparing for 2.4.4
+ * doc/xml.html doc/html/*: updated and rebuilt the docs
+
+Wed Sep 12 16:58:16 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src: tried to incorporate comments
+ from bug #59220
+
+Tue Sep 11 11:25:36 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c result/noent/wml.xml: fixed bug #59981 related
+ to handling of '&' in attributes when entities are substitued
+
+Mon Sep 10 22:14:42 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.h include/libxml/xmlversion.h.in
+ include/libxml/xmlwin32version.h include/libxml/xmlwin32version.h.in:
+ Tried to close bug #60131
+
+Mon Sep 10 20:46:03 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fixed a bug in the HTML parser introduced Sep 9
+
+Mon Sep 10 20:13:09 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: fixing bug #59946 on xmlns=""
+
+Mon Sep 10 16:39:42 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/xmlerror.h SAX.c: fixing bug 59732, simple
+ but allocates a new error code.
+
+Sun Sep 9 10:33:15 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: John Fleck fixed typos in the options output
+ * parser.c SAX.c: fix ignorable white space SAX selection
+
+Sat Sep 8 11:43:53 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * entities.c: Steve Underwood found the possibility of an
+ ininite loop in case of error.
+
+Fri Sep 7 11:35:00 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am: Need $(ICONV_LIBS) in libxml2_la_LIBADD
+
+Wed Sep 5 17:47:43 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: warn if version is not 1.0 but it's not
+ strictly speaking an error after analyzing the spec
+
+Mon Sep 3 10:07:03 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ *doc/catalog.html - add link to the html version of the
+ man page, other linguistic cleanups
+
+Mon Sep 3 09:10:08 MDT 2001 John Fleck <jfleck@inkstain.net>
+
+ * doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
+ adding documentation for xmlcatalog. Note: xmlcatalog.1, the man
+ file, has not yet been included in the build.
+
+Sat Sep 1 18:17:47 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: removed a duplicate affectation Justin Fletcher
+
+Fri Aug 31 22:02:10 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: Armin Sander pointed a possible text coalescing
+ problem, completed his patch.
+
+Fri Aug 31 18:30:28 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * trionan.c: Fixed const and volatile re-definition problem
+
+Fri Aug 31 16:51:28 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.4 parser.c: doc updates from Heiko Rupp
+ * parserInternals.c: 2 sanity checks from Heiko Rupp
+
+Tue Aug 28 22:38:45 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied patch from Armin Sander to make some pointers
+ const in xmlCopyNode()
+ * include/libxml/tree.h: added fix to the header
+
+Mon Aug 27 16:24:47 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: hum, restrict the integer usage gcc bug workaround
+ to only gcc compilers so that other architecture don't get
+ penalized by this limitation.
+ * include/libxml/xpath.h: small typo fix from Heiko W. Rupp
+
+Sun Aug 26 20:45:04 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixed a Windows compiler warning (Chris Poblete)
+ * xpath.c: fix for mod when dividend is 0 (Chris Poblete)
+
+Sat Aug 25 15:30:17 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h catalog.c xmlcatalog.c: added a
+ --convert option to xmlcatalog to convert SGML ones to
+ the XML syntax.
+ * xmllint.c: small cleanup for $SGML_CATALOG_FILES support.
+
+ 2.4.3 got released at that point
+Thu Aug 23 23:16:32 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c xmlIO.c: started some serious testing and fixed
+ a few bug and optmization needs.
+
+Thu Aug 23 17:26:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am configure.in include/libxml/xmlwin32version.h:
+ preparing for a 2.4.3 release even if it may not be ready yet
+ * catalog.c parser.c xmlIO.c include/libxml/catalog.h: redirected
+ all file parsing lookup to go through the entity resolver, add
+ to add an API to bypass it (needed to load catalogs themselves),
+ some cleanup on the catalog code too.
+ * nanoftp.c: small cleanup
+ * doc/catalog.html: small update
+
+Thu Aug 23 12:22:26 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: fixed bugi #59406 in SGML catalog parsing reported by
+ Jun Kuriyama
+
+Thu Aug 23 02:51:29 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * doc/catalog.html: finished the catalog documentation
+
+Thu Aug 23 01:38:42 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * doc/catalog.html doc/xml.html: added documentation about
+ Catalog support, misses an API description
+ * doc/html/*: reextracted the API pages
+
+Wed Aug 22 18:27:47 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h catalog.c xmlIO.c HTMLparser.c:
+ Added the part about section 7.2 on URI resolution,
+ fixed a side effect in the HTML parser, look complete
+ and ready to rock except the URI/SystemID part!
+
+Wed Aug 22 16:27:03 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/catalog.h include/libxml/parser.h
+ include/libxml/xmlerror.h catalog.c parser.c parserInternals.c
+ xmlIO.c: added support and APIs needed for the catalog PI
+ * include/libxml/xmlIO.h: cleanup
+
+Wed Aug 22 02:03:31 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c parser.c xmlIO.c xmlcatalog.c xmllint.c
+ include/libxml/catalog.h: starts to look okay, really
+ plugged the new framework, cleaned a lot of stuff,
+ added some APIs, except the PI's support missing this
+ should be mostly complete
+ * result/catalogs/* test/catalogs/*: added new test, enriched
+ the existing one with URN ID tests
+
+Tue Aug 21 14:56:18 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * catalog.c: fixed nextCatalog
+ * result/catalogs/docbook test/catalogs/*: started adding
+ a small regression test
+
+Tue Aug 21 12:52:38 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am catalog.c xmlcatalog.c include/libxml/catalog.h:
+ more work on the XML catalog support.
+ * parser.c include/libxml/parser.h: small cleanup seems using
+ list as a public parameter name can give portability troubles
+ * trionan.c trionan.h xpath.c include/libxml/trionan.h
+ include/libxml/xpath.h include/libxml/Makefile.am: removed
+ trionan from the libxml API, added xmlXPathIsInf and xmlXPathIsNaN
+ wrappers
+
+Tue Aug 21 11:18:45 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * Makefile.am trio.c triodef.h trionan.c xpath.c
+ include/libxml/Makefile.am include/libxml/trionan.h:
+ Re-worked Not-A-Number and Infinity support.
+ * xmlcatalog.c: added readline include files
+
+Mon Aug 20 02:04:13 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am xmlcatalog.c libxml.spec.in: renaming
+ testCatalog as xmlcatalog, making it an installed app
+ adding a shell, and preparing it to be a /etc/xml/catalog
+ management tool, though not ready yet
+ * catalog.c include/libxml/catalog.h: adding support for
+ XML Catalogs http://www.oasis-open.org/committees/entity/
+ not finished, there is some interesting tradeoffs and a
+ few open questions left.
+
+Sun Aug 19 14:59:56 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: fixed a line formatting problem
+
+Fri Aug 17 11:35:31 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: removed a couple of unused variable (Albert Chin)
+
+Fri Aug 17 01:25:21 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c HTMLtree.c include/libxml/HTMLparser.h:
+ trying to fix some troubles w.r.t. function returning
+ const xxxPtr.
+
+Thu Aug 16 21:33:20 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src: another set of symbols conditionally
+ defined
+
+Thu Aug 16 21:31:14 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpointer.c: removed unused var
+
+Thu Aug 16 18:26:40 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * testXPath.c: another small cleanup closing bug #59110
+
+Thu Aug 16 17:59:18 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * win32/dsp/libxml2.def.src: small cleanup closing bug
+ #59108
+
+Wed Aug 15 22:46:01 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * example/gjobread.c: add xmlCleanupParser() before leaving
+
+Wed Aug 15 14:57:08 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * config.h.in configure.in include/libxml/xmlwin32version.h:
+ released 2.4.2
+
+Wed Aug 15 13:56:22 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/valid.h debugXML.c valid.c: deprecate
+ the non-boundchecking Sprintf functions, add Snprintf
+ this should close bug #57984
+
+Wed Aug 15 10:46:07 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: xmlOutputBufferCreateFilename() didn't unescaped
+ URIs before doing the lookups (pointed by Mark Vakoc)
+
+Tue Aug 14 18:37:23 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: serious changes on Result Value Trees and NodeSets
+ w.r.t. deallocation and collect operations. Probably not
+ 100% clean (merge of allocated trees smells like a problem).
+ Seems sufficient to close #58943
+
+Tue Aug 14 16:12:00 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xmllint.c: adding a --format option
+
+Tue Aug 14 14:16:24 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: count() was broken on Result Value Tree
+ * xmlIO.c: fixed file:/// accesses on _WIN32
+
+Mon Aug 13 13:22:53 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.m4: s/LIBXML_VERSION_NUMBER/LIBXML_VERSION/ seems the
+ macro was renamed, this should close bug #58683
+
+Mon Aug 13 12:33:40 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: small fix fixing bug #58539 reported by coolo, in
+ entity substitution mode text at the end of the entity might
+ be added due to text coalescing.
+ * nanoftp.c parser.c: small cleanup
+
+Wed Aug 8 22:57:05 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * HACKING: added John Fleck right to commit in the doc subdir
+
+Tue Aug 7 03:05:58 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c testXPath.c valid.c xmllint.c include/libxml/valid.h:
+ allow to inherit attributes from the DTD directly in the
+ tree, this is needed for XPath and can be a useful feature.
+ Inherited namespaces are always provided at the tree level now
+ * test/defattr* result/defattr* result/noent/defattr*: added a couple
+ of tests for this feature (XSLT being the prime user).
+
+Fri Aug 3 14:02:20 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * DOCBparser.c Makefile.am nanohttp.c parser.c testHTML.c
+ testSAX.c xmlIO.c xmllint.c include/win32config.h
+ include/libxml/xmlversion.h.in include/libxml/xmlwin32version.h
+ include/libxml/xmlwin32version.h.in win32/README.MSDev
+ win32/dsp/*: applied Win32 Facelift No.2 patches from
+ Igor Zlatkovic for Windows/MSC
+
+Wed Aug 1 23:21:06 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * SAX.c: unparsedEntityDecl() the URI computation of the
+ entity wasn't done breaking XSLT unparsed-entity-uri()
+
+Wed Aug 1 17:44:57 CEST 2001 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: fixed a bug when walking the descendants and
+ the current node has no children
+ * debugXML.c: show up when a text node is supposed to not be escaped
+
+Wed Aug 1 01:33:35 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * xpath.c: fixed a bug in xmlXPathNodeTrailingSorted (for now it
+ worked like the set:leading() function)
+ * include/libxml/xpathInternals.h: added xmlXPathNodeSetContains
+
+Tue Jul 31 18:24:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * nanohttp.c: protected an use of EAGAIN, Brian Stafford
+
+Tue Jul 31 17:48:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/xmlIO.h: apply change to close #58141
+ * win32/libxml2/*: update of the MSC projects from Igor Zlatkovic
+
+Tue Jul 31 17:09:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: when the internal subset uses a PE, then the
+ included entity can use conditional sections.
+
+Mon Jul 30 12:58:39 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c include/libxml/xpath.h: fixed a serious memory problen
+ when walking the namespace axis showing up in
+ libxst/tests/general/bug-12
+ * xmlmemory.c: added the possibility to trace a given block
+ defined by its address
+
+Sun Jul 29 07:18:53 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: don't override existing encoding specified before
+ starting xmlParseDocument()
+
+Sat Jul 28 13:33:10 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/xmlwin32version.h: reinserted, needed for
+ Windows users of CVS
+
+2001-07-27 Darin Adler <darin@bentspoon.com>
+
+ * encoding.c: (xmlIconvWrapper): Add cast to fix warning.
+ * testCatalog.c: Add include of <libxml/parser.h>.
+
+2001-07-27 Darin Adler <darin@bentspoon.com>
+
+ * include/libxml/.cvsignore:
+ * include/libxml/xmlwin32version.h:
+ Remove this file from CVS because it's generated.
+
+Fri Jul 27 10:03:56 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c include/libxml/parser.h: applied const patches from
+ Tom Moog #58002
+
+Thu Jul 26 18:55:52 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * xpath.c include/libxml/xpath{,Internals}.h: added a function
+ lookup framework
+
+Fri Jul 27 01:50:20 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlCopyNode() for documents
+
+Thu Jul 26 12:40:35 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed bugs #58073 reported by Greg Shtilman
+
+Thu Jul 26 11:38:37 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixes bug #57652 reported by Morus Walter
+
+Thu Jul 26 10:24:34 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * nanohttp.c: John Kroll provided a small fix to xmlNanoHTTPSave
+
+Thu Jul 26 07:16:04 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c parserInternals.c: fixed the xmlLineNumbersDefault()
+ errors, lesson don't add new functions at 1am before a release
+ * xpath.c: integrated fix from Bjorn to avoid divide by zero
+ from XPath initialization when possible.
+
+Tue Jul 24 15:39:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * result/scripts/base*: removing history/readline changed
+ this slightly
+ * include/libxml/parser.h SAX.c parser.c parserInternals.c
+ xmllint.c: make element content line number generation
+ optionnal to avoid breaking old apps added interface to switch
+
+Tue Jul 24 15:06:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: get rid of the readline and libhistory
+ dependencies by default, release 2.4.1 with IA64 fix
+ * nanohttp.c tree.c xmlIO.c include/libxml/nanohttp.h
+ include/libxml/tree.h include/libxml/xmlIO.h: incorporated
+ John Kroll fixes to allow saving to HTTP via PUT (or
+ POST of needed).
+ * doc/html/*.html: regenerated the docs
+
+Sun Jul 22 05:56:16 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * hash.c include/libxml/hash.h: added xmlHashScannerFull,
+ xmlHashScanFull and xmlHashScannFull3 to get passed the
+ three keys as arguments to the callback function
+
+Thu Jul 19 15:29:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in Makefile.am: removed libxml softlink for good
+ * include/libxml/*.h *.c doc/Makefile.am: cleanup to get
+ 100% coverage by gtk-doc
+
+Tue Jul 17 17:36:46 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlmemory.c include/libxml/xmlmemory.h: debugging on IA64,
+ fixed serious troubles due to size_t vs. int mismatch
+
+Tue Jul 17 16:04:36 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c xmlIO.c: cleaned up some warning on the Alpha
+
+Mon Jul 16 06:32:44 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * include/libxml/xpath{,Internals}.h xpath.c: added a more
+ convenient extension API for value and context managing
+ Now handles external objects through xmlXPathPopExternal,
+ xmlXPathWrapExternal and xmlXPathReturnExternal.
+ Added functions for sets operations (intersection, etc.)
+
+Mon Jul 16 20:05:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/parserInternals.h include/libxml/HTMLparser.h
+ xmlIO.c tree.c parserInternals.c entities.c encoding.c
+ HTMLparser.c: cleanup of global variables, marking some
+ const or private.
+
+Mon Jul 16 00:17:15 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>
+
+ * include/libxml/xpath.h: exported xmlXPath{NAN,PINF,NINF}
+ fixed xmlXPathNodeSetItem when passing index=0
+
+Sun Jul 15 17:58:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/xmlwin32version.h.in: added xmlCheckVersion()
+
+Sat Jul 14 19:31:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmllint.c: fixed compilation under Cygwin #57503
+ * TODO: update
+
+2001-07-13 Peter Williams <peterw@ximian.com>
+
+ * config.h.in: add #undef HAVE_DLFCN_H
+
+ * example/Makefile.am (INCLUDES): Compile fix when srcdir !=
+ builddir.
+
+Fri Jul 13 11:09:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * win32/libxml2/libxml2.def.src: added a couple of exported entries
+ raised by #57348 and #57381
+
+Thu Jul 12 21:20:17 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c HTMLparser.c HTMLtree.c SAX.c debugXML.c parser.c
+ tree.c xpointer.c: store the line numbder in element->content,
+ may break some software, need a configuration mechanism
+
+2001-07-10 Darin Adler <darin@bentspoon.com>
+
+ * .cvsignore:
+ * example/.cvsignore:
+ * include/.cvsignore:
+ * include/libxml/.cvsignore:
+ Various things that are generated and should be ignored.
+
+Tue Jul 10 17:47:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in include/libxml/xmlwin32version.h: release of 2.4.0
+ * doc/xml.html doc/html/*: updated the docs
+
+Mon Jul 9 22:06:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: fixed "Internal: MIXED struct bad" when #CDATA elements
+ validation occured on content with element child
+
+Mon Jul 9 17:59:08 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed XML Base computation which was broken
+ * debugXML.c: added a base function to the shell
+ * Makefile.am result/scripts/* test/scripts/*: added scripts
+ based regression tests, and adding 2 XML Base tests
+
+Mon Jul 9 12:31:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: set properties doc and call xmlSetListDoc for properties
+ content when grafting them in a different tree.
+ * aclocal.m4: remove from CVS
+
+Sun Jul 8 23:09:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * win32/libxml2/libxml2.def.src: added some missing entry point
+ for XPath (Mark Vakoc)
+
+Sun Jul 8 20:34:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: fixed an old bug raised by Bernhard Zwisch, the I/O
+ layer should URI-Unescape before trying to open resources.
+
+Sun Jul 8 16:26:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fix the name() bug for elements in the default
+ namespace reported by Charlie Bozeman
+
+Sun Jul 8 15:11:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c parser.c testXPath.c xpath.c: trying to fix #56948, this
+ led to an XPath fix, improvements of SAX initialization, and
+ an added option --nocdata to testXPath
+
+Sat Jul 7 21:09:55 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/libxml-doc.el: Felix Natter provided anew version working
+ with XEmacs too
+
+Sat Jul 7 02:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/xpath.h: small cleanup
+ * doc/xml.html: update
+
+Fri Jul 6 01:40:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am configure.in include/libxml/xmlwin32version.h:
+ released 2.3.14
+
+Fri Jul 6 00:47:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/html/*: rebuilt the docs for the release
+ * doc/xml.html: added 2.3.14 release.
+
+Thu Jul 5 22:01:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: a bug reported by Stephan Kulow empty nodesets
+ were not equal to empty strings
+
+Thu Jul 5 00:52:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c: fixed a URI-Reference computation problem when validating
+ * xmlIO.c: small cleanup
+
+Thu Jul 5 00:04:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: improved the description of a couple of interfaces
+ upon Larry Stamper suggestion
+
+Wed Jul 4 21:42:24 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c entities.c parser.c: changed completely the way entities
+ are handled when running the parser in entity substitution mode.
+ This fixes a bug reported by Stephan Kulow and nearly divides
+ by 3 the amount of memory required by libxslt to load and process
+ DocBook TDG.
+
+Wed Jul 4 18:02:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: fixing a too early root closing problem raised
+ byt Prashanth Naidu
+
+Wed Jul 4 01:42:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed a missing copy in xmlXPathVariableLookupNS()
+ raised by Mark Vakoc.
+
+Tue Jul 3 18:35:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * example/Makefile.am: fixed the include path to add srcdir/include
+ * Makefile.am configure.in: fix from Albert Chin for iconv detection
+ and some cleanup
+
+Tue Jul 3 10:12:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c include/libxml/xpath.h include/libxml/xpathInternals.h:
+ lot of optimization work, results in significant improvements
+ when handling really complex XPath queries. Add a small optimizer
+ for unions, improve [n] and [last()], avoid some costly ops.
+
+Fri Jun 29 23:26:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/parser.h parser.c: xmlStrstr args are both const
+ * xpath.c: small cleanup
+ * xmlGetNsList: reformated, fixed problems if used on Entities
+
+Thu Jun 28 18:19:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: added 1.8.14 and 2.3.13 releases
+
+Thu Jun 28 18:16:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in include/libxml/xmlwin32version.h: released 2.3.13
+ * Makefile.am example/Makefile.am: workaround automake generating
+ erroneous deps
+
+Thu Jun 28 15:08:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/win32config.h: bug #56801 Yon Derek provided a patch
+ to the windows config file.
+
+Thu Jun 28 14:51:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpointer.c include/win32config.h win32/libxml2/libxml2.def.src
+ libxml.h : Yon Derek provided a set of changes to compile from
+ CVS on Windows/MSC
+
+Thu Jun 28 14:11:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed UTF8 BOM support in push mode
+ * test/utf8bom.xml result/utf8bom.xml result/noent/utf8bom.xml:
+ added a specific testcase
+
+Wed Jun 27 18:33:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: added --push regression tests
+ * parserInternals.c: the XML parser segfaulted in --push mode
+
+Wed Jun 27 13:09:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: moved the symlinks detection within a CVS
+ check, this is not portable and will be removed soon.
+ * xpath.c: small cleanup/speedup
+
+Tue Jun 26 18:05:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in doc/xml.html include/libxml/xmlwin32version.h:
+ release of 2.3.12
+ * parser.c: make an error message if unknow entities in all cases
+
+Tue Jun 26 09:46:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * uri.c: fixed 2 uri normalization bugs on '//' reduction
+
+Mon Jun 25 18:06:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/libxml/Makefile.am: Laszlo Peter pointed out that
+ includes were installed in the wrong dir
+
+Mon Jun 25 17:07:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/html.xml: warn against sending code to exhibit bugs.
+
+Sun Jun 24 23:31:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: patch to xmlXPathFormatNumber for the optimizer on
+ Tru64 from Thomas Leitner
+
+Sun Jun 24 14:05:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * AUTHORS: added William and Bjorn
+ * include/libxml/*.h *.c README doc/*.html etc.: changed old email to
+ daniel@veillard.com hopefully I won't have to do this again
+ * doc/Makefile.am doc/html/*.html: cleanup makefile, checked that
+ docs can be rebuilt cleanly now
+ * include/libxml/xml*version.h*: removed include/libxml/xmlversion.h
+ from CVs it's generated, added include/libxml/xmlwin32version.h
+ also generated but which should change far less frequently.
+ * catalog.c nanoftp.c: made sure to include libxml.h not
+ libxml/xmlversion.h directly
+ * include/libxml/*.h: include xmlwin32version.h instead of xmlversion.h
+ when compiling on WIN32 and MSC
+
+Sat Jun 23 23:54:12 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/Makefile.am include/libxml/Makefile.am configure.in:
+ fixed make distcheck and rebuilding the rpms
+
+Sat Jun 23 20:50:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: should finish the migration of exported includes
+ into a real include/libxml in CVS, at least for CVS users.
+ * removed the exported headers, added in include/libxml (as well
+ as xmlversion.h.in).
+
+Sat Jun 23 20:37:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: fixed the way to detect symlink
+
+Sat Jun 23 20:30:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: updated, include/libxml is now a real CVS dir
+
+Sat Jun 23 19:36:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/libxml-doc.el: a new version of libxml-doc.el. This new
+ version works with both libxml1 and libxml2 (it autodetects
+ the prefix of the html-files) from Felix Natter.
+ * doc/xml.html: updated doc accordingly
+
+Sat Jun 23 18:30:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed the bug generating a template loop in libxslt
+ when using docbook-xsl-1.4, * should filter out document nodes
+ * HACKING: added William
+ * TODO: updated
+
+Fri Jun 22 18:02:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/FAQ.html: added a warning about gcc-3.0
+ * doc/xml.html: added reference to gdome2 and removed a confusing
+ sentence
+
+Fri Jun 22 17:02:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlversion.h: okay this is a generated file, but Windows
+ users need it and they can't generate it, and I want CVS
+ Windows users ...
+ * win32/libxml2/libxml2_so.dsp: Windows project file for
+ the shared lib version of libxml2
+ * win32/libxml2/libxml2.def.src: bug #56527 set of exported
+ resources needed for libxslt/xsltproc by Yon Derek
+
+Fri Jun 22 16:39:36 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * trio.c: MSVC fix (provided by Igor Zlatkovic)
+
+Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/win32config.h: another small fix for ATTRIBUTE_UNUSED
+
+Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * include/win32config.h: Yon Derek provided a first fix
+ to be able to compile libxslt/xsltproc on Windows
+
+Fri Jun 22 00:04:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: attempt to work around what seemed a gcc optimizer
+ bug when handling floats on i386 http://veillard.com/gcc.bug
+ * tree.c entities.c encoding.c: doing some cleanups while
+ chasing it
+
+Thu Jun 21 13:13:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: cleanup when --without-debug is specified
+ * xinclude.c xpath.c xpathInternals.h xpointer.c: cleanup
+ w.r.t. --without-debug and other include points
+ * catalog.h testCatalog.c: a bit of cleanup and prepare for XML
+ Catalogs
+ * configure.in entities.h tree.h HTMLparser.c: removed
+ --without-corba, made the _private field mandatory
+
+Wed Jun 20 19:37:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c parserInternals.c encoding.c: Since Notepad on Win2k
+ outputs a BOM in UTF8, an errata has been issued to avoid the
+ problem, that was the most reasonable solution... Add support
+ for a leading UTF8 BOM in entities.
+
+Wed Jun 20 15:38:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: fixed a bug found when post validating an entity ref
+ * xmllint.c: added --loaddtd and sligly changed --postvalid to
+ activate it too
+
+Tue Jun 19 20:03:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c xinclude.c xpointer.c: bug #56402 exposed a number of
+ weakness in the node copy the XPointer and the XInclude
+ implementations. Serious cleanup.
+
+Tue Jun 19 14:50:18 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: Kjartan Maraas provided a small patch to
+ add xml2-config.in to EXTRA_DIST
+
+Tue Jun 19 13:04:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c tree.c parserInternals.c parser.c: Stephan Kulow
+ provided another failing case found in KDE, the way the
+ ctxt->vctxt.nodeTab was allocated and freed changed over
+ time but it wasn't completely cleaned up. This should fix it.
+
+Sun Jun 17 19:56:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: Stephan Kulow also raised the fact that line number
+ could get miscounted making debug harder, fixed the problem
+ in xmlParseCharData()
+
+Sun Jun 17 19:17:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: Stephan Kulow pointed out a problem when validating
+ and using an empty entity, forgot a 'break' in a case.
+
+Sun Jun 17 16:47:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlHasNsProp() accordingly to bug #55683
+ * doc/xml.html: updated with 2.3.11
+
+Sun Jun 17 12:24:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * TODO: updated adding cleanup of generated doc
+ * configure.in: prepared to release 2.3.11
+ * xmllint.c: added --version for bug reporting
+ * doc/html/*.html: rebuilt the doc
+
+Sat Jun 16 23:23:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: first part of the work on selecting namespace to
+ fix bug #56115
+
+Sat Jun 16 00:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am example/Makefile.am: Laszlo PETER provided a fix
+ when using -liconv
+ * TODO: updated
+
+Fri Jun 15 07:08:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.[ch]: more work on the HTML serialization routnes,
+ cleanup, encoding support.
+
+Thu Jun 14 10:31:17 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: Thomas Broyer suggested a better patch for the / arg
+
+Thu Jun 14 01:01:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: bug detected by Ankh when / is used as a function arg
+
+Wed Jun 13 23:08:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.[ch] HTMLtree.c: stored the inline/block property
+ of element and use it to avoid outputting formatting spaces at
+ the wrong place. Implemented the format parameter for HTML save.
+ * result/HTML/doc2.htm result/HTML/doc3.htm result/HTML/fp40.htm
+ result/HTML/script.html result/HTML/test2.html result/HTML/test3.html
+ result/HTML/wired.html: of course this impact the result of a
+ number of HTML tests
+
+Thu Jun 14 09:49:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.[ch]: started augmenting the HTML save API with
+ encoding and formatting parameters
+
+Wed Jun 13 09:44:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.h: cleanup and started evaluating the work needed on
+ revamping the HTML output code
+
+Mon Jun 11 19:29:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c: handling of PIs and <?sgml-declaration in entities.
+
+Tue Jun 12 08:46:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: fixed bug #56049, forgot one check in the
+ validation routine
+
+Tue Jun 12 08:09:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch]: grrr ... namespace is a C++ reserved keyword
+
+Tue Jun 12 06:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * libxml.h: fixed an error in last commit
+ * doc/FAQ.html: added an entry for compilation from CVS
+
+Mon Jun 11 10:07:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlversion.h.in libxml.h: Cygwin patches
+ * tree.c: xmlFreeNodeList patch similar to xmlFreeNode one
+ * tree.h: cleanup
+
+Sat Jun 9 19:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: patched xmlFreeNode() to avoid freeing() a static
+ memory block in a strange case where libxml is linked twice
+ in the binary.
+
+Sat Jun 9 18:39:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: (a? , b? , c? , ... , z?) was storing/restauring
+ state far too often, simple fix used to avoid it.
+
+Sat Jun 9 16:10:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xinclude.c: Raphael Hertzog had a trouble with DTD nodes
+ being processed, applied his patch
+ * tree.c: fixed a bug raised in xmlStaticCopyNodeList()
+
+Sat Jun 9 15:50:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * nanoftp.c nanohttp.c uri.c include/win32config.h: Igor Zlatkovic
+ provided fixes to compile on MSCC again
+ * win32/libxml2/libxml2.def.src win32/libxml2/libxml2*.dsp: he
+ also provided an update for the project files.
+
+Thu Jun 7 21:52:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: applied Steve Tinney patch to xmlNewNsProp to fix
+ bug #55810
+
+Thu Jun 7 21:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlGetNsProp() to close bug #55683
+ Note this requires libxslt to use it's own function instead.
+
+Thu Jun 7 18:06:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: when in a pre element no formatting space should
+ be added.
+ * test/HTML/pre.html result/HTML/pre.html*: added a regression test
+
+Thu Jun 7 17:29:38 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: added tests for signal() and signal.h
+
+Fri Jun 8 10:17:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: robert pointed out xmlXPathNINF was not initialized
+
+Fri Jun 8 10:01:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/libxml-doc.el: Felix Natter provided a new version for
+ libxml2
+
+Fri Jun 8 07:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: when in a pre element no formatting space should
+ be added.
+
+Wed Jun 6 18:07:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: add -mieee to CFLAGS when compiling on Linux/alpha
+
+Thu Jun 7 06:44:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c: implemented the <?sgml-declaration encoding="xxx"?>
+ hack
+ * tree.[ch]: added xmlHasNsProp as suggested in bug report #55653
+ * uri.c: fixed a warning
+
+Tue Jun 5 22:54:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: trying to close bug #55772 escaping in script
+ elements
+ * doc/xml.html: suggest to send mail to the list
+
+Tue Jun 5 19:11:02 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * error.c: attempt to fix the xmlGetVarStr breakage once and for
+ good. Use a macro and based on the solution provided in
+ vsnprintf manual page from GNU.
+
+Tue Jun 5 14:46:10 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * error.c: Workaround for non-preserving variadic list.
+ * trio.c trio.h triop.h strio.c strio.h: Upgraded to trio baseline 1.4
+
+Sat Jun 2 06:12:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: added 2.3.10 release
+
+Fri Jun 1 11:27:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: releasing 2.3.10
+
+Thu May 31 20:42:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: Gary Pennington spotted a few troubles with file:///
+
+Thu May 31 20:18:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * encoding.c: Robert Collins provided a patch to add the
+ "US-ASCII" encoding alias
+
+Wed May 30 21:12:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c encoding.[ch]: William M. Brack provided a set of UTF8
+ string oriented functions and started cleaning the related areas
+ in xpath.c which needed fixing in this respect
+
+Wed May 30 20:30:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: applied patch from Jaroslaw Kolakowski to close bug
+ #55380
+ * tree.c: patch to xmlNodeGetContent() to get CDATA section content
+
+Mon May 28 12:56:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * TODO: updated
+ * nanohttp.[ch] : started adding APIs to get the redirected URL
+ when this occurs (needed for further base computation
+ * tree.h: cleanup
+ * encoding.c: cleanup
+ * SAX.c: minor change around ctxt->loadsubset
+
+Fri May 25 09:36:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am include/Makefile.am: small change to have
+ include/libxml rebuilt if working from CVS.
+ * uri.c: applied another patch from Carl Douglas for URI escaping,
+ this should close bug #51876
+
+Wed May 23 15:40:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xinclude.c: fixed XInclude recursive behaviour bug #54678
+ * result/XInclude/recursive.xml test/XInclude/docs/recursive.xml
+ test/XInclude/ents/inc.txt test/XInclude/ents/sub-inc.ent:
+ added specific regression test
+ * parser.h: preparing for the XSLT mode where DTD inherited
+ attributes are added to the tree.
+
+Wed May 23 13:59:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xinclude.[ch]: Updated the namespace for the Last Call version
+ * result/XInclude/include test/XInclude/include: updated the
+ testsuite accordingly
+
+Wed May 23 12:27:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * uri.[ch]: applied a patch from Carl Douglas for URI escaping,
+ related to bug #51876
+
+Tue May 22 18:46:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed a gross mistake in base computation, xml:base is
+ not completely correct yet (need cascade).
+ * xpath.[ch]: added the few things needed to find a function name
+ and URI from the XPath context when it is called.
+
+Tue May 22 17:00:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * catalog.[ch]: fixes and add xmlLoadCatalogs()
+ * DOCBparser.c: small cleanup
+ * xmllint.c: added a --catalogs option to load catalogs from
+ $SGML_CATALOG_FILES
+ * tree.c: cleanup
+ * configure.in: iconv library fixup, ICONV_LIBS
+
+Mon May 21 16:05:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * catalog.c: handling of CATALOG entries. detection of recursion,
+ and a few bugfixes
+ * xpath.c: fixing bug #54951 QNAME with no prefix should not match
+ against the default namespace
+
+Mon May 21 10:14:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: Joe Orton reported a bug found with IRIx compiler.
+
+Sun May 20 15:15:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed propagation context info when parsing an
+ external entity.
+ * doc/html/*.html: regenerated a couple of docs
+
+Sat May 19 17:11:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: update with 2.3.9 informations
+
+Sat May 19 16:50:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.h debugXML.h parserInternals.h tree.h valid.c
+ xmlversion.h.in xpathInternals.h xpath.h: some cleanup for gtk-doc
+ * doc/html/* : rebuilt the docs
+ * valid.c: small patch which may improve some case when
+ validating.
+
+Sat May 19 15:20:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: Closed bug #54891
+ * result/HTML/cf_128.html* test/HTML/cf_128.html: added the test
+ to the suite
+
+Thu May 17 14:15:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * encoding.h hash.c nanoftp.h parser.h tree.h uri.h xlink.h xpointer.c:
+ applied a documentation patch from LotR and filled in a few missing
+ descriptions
+
+Wed May 16 23:02:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c tree.c parser.c: speed optimizations at the parser level
+ document tree freeing and xpath evaluation
+
+Wed May 16 12:55:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c parser.h parserInternals.h: fixed a couple of
+ interfaces for handling memory buffer input to const char *
+ upon suggestion of JamesH.
+
+Tue May 15 17:22:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: LoTR sent a patch fixing the previous commit
+
+Tue May 15 14:40:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: trying to deal again with the stoopid -R linking
+ flag of Solaris
+
+Tue May 15 12:49:50 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.h: two nodeset access macros from Thomas Broyer
+
+Tue May 15 11:42:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c xpath.h xpathInternals.h: apply an XPath API cleanup
+ patch from Thomas Broyer
+
+Tue May 15 10:52:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c test/VCM/v2[34].xml: Fixed bug #54631 added specific test
+ case
+ * INSTALL: was empty added stuff from the FAQ
+
+Fri May 11 19:37:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch]: fixing bug #54446, by cleaning some bugs in the
+ attributes handling and #54433 by adding xmlUnsetProp()
+ and xmlUnsetNsProp()
+
+Fri May 11 16:07:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: Patch from Jonas Borgström
+ (htmlGetEndPriority): New function, returns
+ the priority of a certain element.
+ (htmlAutoCloseOnClose): Only close inline elements if they
+ all have lower or equal priority.
+ * result/HTML: this of course changed a number of tests results.
+
+Thu May 10 17:30:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c catalog.c: plugged in the default catalog resolution
+ * doc/gnome-xml.sgml: linked in the Docbook parser and catalog
+ documentations
+ * doc/html/libxml-*.html: rebuild added the missing ones to CVS
+
+Thu May 10 16:14:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am xmlversion.h.in configure.in include/Makefile.am:
+ integrating catalogs
+ * catalog.[ch] testCatalog.c: adding a small catalo API
+ (only SGML catalog support).
+ * parser.c: restaured xmlKeepBlanksDefault(0) API
+
+Wed May 9 12:50:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: zb@bisp.com reported an error in xmlNodeGetLang()
+
+Tue May 8 12:31:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: added xmlParseExternalEntityPrivate() to allow
+ propagation of ctxt->_private when parsing external entities
+
+Tue May 8 10:26:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: fixed the bug reported by Bjorn in htmlNodeDump
+
+Tue May 8 09:30:12 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: fixed a small portability problem with AM_CONDITIONAL
+
+Mon May 7 22:44:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: warn when indeterminist content model is detected
+ * result/VC/ElementValid8: this adds a message
+ * Makefile.am: add --novalid for VCM tests
+ * parserInternals.c: added a call to Init memory
+
+Fri May 4 19:51:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: fixed htmlNewDoc SYSTEM and PUBLIC ID inversion
+ when both parameters are NULL.
+
+Fri May 4 17:19:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: applied small patch from Gary Pennington, reindented
+ some part of the code.
+
+Thu May 3 13:10:43 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in doc/xml.html doc/html/*: preparing for 2.3.8
+ release, updated and regenerated the docs
+
+Thu May 3 12:47:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c result/XPath/expr/floats : clarified and cleanup
+ printing of abnormal floats in tests.
+
+Thu May 3 10:25:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: trying to fix the problem reported by Jonas Borgström
+ * results/HTML/ : a few changes in the output of the HTML tests as
+ a result.
+ * configure.in: tying to fix -liconv where needed
+
+Wed May 2 19:10:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: fixed a stupid error
+
+Wed May 2 18:39:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in Makefile.am: make the inclusion of the trio
+ modules in the library conditional
+
+Wed May 2 14:39:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c: patche from László Kovács, fixed entities refs
+ in attributes handling
+
+Wed May 2 12:56:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: Bjorn Reese provided a fix for a problem on buffer
+ flushing
+
+Mon Apr 30 22:29:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fix of an XSLT namespace bug reported on the list
+ general/bug-8-
+
+Mon Apr 30 19:42:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * strio.h trio.c: Dan McNichol suggested a couple of small
+ fixes for AIX 4.3.3 using Visual Age 5.0.2 compiler
+
+Mon Apr 30 13:44:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c parser.c encoding.c: spent a bit more time looking
+ at the parsing speed and DOM handling. Added a few more
+ speedups.
+
+Sun Apr 29 21:53:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: small but effective parsing speed improvement
+
+Sun Apr 29 19:02:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: default on the DocBook parser inclusion (for Gnome)
+ * DOCBparser.h: fixed a header reference
+
+Sat Apr 28 19:00:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in xpath.c: applied Bjorn patches for FPE on the
+ alpha
+
+Sat Apr 28 18:54:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch] xmlIO.h: applied patch from Joe McAlerney to add
+ xmlSaveFormatFileTo()
+
+Sat Apr 28 16:33:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: simple and efficient optimization, XPath functions
+ aways bind to the same code, cache this
+ * TODO: updated (by saying some is obsolete)
+
+Sat Apr 28 14:23:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: more cleanup work on XPath name parsing routines
+
+Fri Apr 27 19:06:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parserInternals.c xpath.[ch]: some UTF8 cleanup on
+ xmlXPathParseName
+ * xpath.c: Igor Zlatkovic suggested a change for NAN and MSC
+ * debugXML.c: avoid compilation problems if compiling without
+ HTML support, Igor Zlatkovic
+ * win32/libxml2/libxml2.def.src: being able to compile without
+ XPath on Windows
+
+Thu Apr 26 22:53:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * libxml.m4: yet another patch from Toshio Kuratomi
+
+Thu Apr 26 21:27:43 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * libxml.m4 libxml2-spec.in: new patches from Toshio Kuratomi
+
+Thu Apr 26 20:53:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch]: added xmlSaveFormatFile interface for saving
+ and indenting a file.
+
+Thu Apr 26 16:35:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed bug #53689 related to processing-instruction()
+
+Thu Apr 26 12:57:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c: patche from László Kovács
+
+Thu Apr 26 11:31:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: applied fixes from Christian Glahn bug report #53391
+
+Thu Apr 26 11:14:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * error.c: Jean François Lecomte provided a complete description
+ and a fix to bug #53537
+
+Thu Apr 26 09:42:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * libxml.m4: added AM_PATH_XML2 provided by Toshio Kuratomi
+
+Wed Apr 25 21:05:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c SAX.c: a bit more work on entities processing.
+ Still Need to cleanup XML output and references in attributes
+
+Wed Apr 25 17:52:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c include/Makefile.am: two patches from László Kovács
+
+Wed Apr 25 14:56:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: trying to fix #53574, not completely complete,
+ I would like xmllint --copy --debug test/ent1 and
+ xmllint --debug test/ent1 to show the same result.
+ * xpath.c: fix a bug when trying to sort namespace nodes
+
+Wed Apr 25 12:28:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: real fix for #53402
+
+Tue Apr 24 17:36:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c HTMLtree.h : closing #53402 i.e. output of
+ PIs when using xsl:output
+ * valid.c: closing #53537 some case generate segfaults if there
+ is validity errors
+
+Tue Apr 24 15:19:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c testDocbook.c DOCBparser.c: more work on the support
+ of external parsed entities, added --noent to testDocbook
+ * valid.c: Garry Pennington found an uninitialized variable
+ access in xmlValidateElementContent()
+
+Tue Apr 24 14:41:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c : HTML parsing still sucks ... trying to deal
+ with madness
+ * result/HTML/ : this modified the result of the regression tests
+ a lot.
+
+Tue Apr 24 14:10:38 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * entities.c: xmlEncodeEntitiesReentrant fixed a few accesses
+ to doc where it wasn't checked against NULL reported by
+ Jens Laas
+
+Tue Apr 24 13:21:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: Jonas Borgström patch, the <td>, and <th> elements
+ now means the end of any open <span>,<font>,<a>,<b>,<i>,<u>.
+
+Mon Apr 23 15:40:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * DOCBparser.c DOCBparser.h testDocbook.c configure.in Makefile.am
+ xmlversion.h.in: started (re)integrating the DocBook SGML parser.
+ * SAX.[ch]: cleanup and updates for DocBook
+ * debugXML.c parser.h tree.[ch] valid.c xpath.c: small macro or
+ ex SGML identifier changes
+ * valid.c: removed a static unused function.
+
+Mon Apr 23 11:05:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLtree.c: applied change for Paul Sponagl on script saving
+ * Makefile.am: the warning about entity title.xml are normal.
+
+Sun Apr 22 22:09:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: release of 2.3.7
+ * Makefile.am: fixing make distcheck
+
+Sun Apr 22 21:29:52 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/html/* doc/xml.html: updated and regenerated the docs
+
+Sun Apr 22 21:11:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed the XPointer problem introduced in 2.3.6
+
+Sun Apr 22 14:11:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed #53388 with the provided patch
+
+Sun Apr 22 12:34:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: Bjorn detected an invalid memory access. Fixed
+ vstateVPush()
+
+Sun Apr 22 10:49:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed xmlXPathCompile to detected unproperly ended expr
+
+Sat Apr 21 18:27:51 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * libxml.h: new header used only for the compilation of libxml
+ * HTMLparser.c HTMLtree.c SAX.c debugXML.c encoding.c entities.c
+ error.c hash.c list.c nanoftp.c nanohttp.c parser.c
+ parserInternals.c testHTML.c testSAX.c testURI.c testXPath.c
+ tree.c uri.c valid.c xinclude.c xlink.c xmlIO.c xmllint.c
+ xmlmemory.c xpath.c xpointer.c: libxml.h integration
+ * trio.[ch] triop.h strio.[ch]: upgraded to the latest trio
+ baseline (version 1.2 plus a single patch).
+ * xpath.c result/XPath/expr/floats test/XPath/expr/floats: parses
+ scientific notation for numbers. Tests added.
+ * xpath.c: formatting of numbers changed to use sprintf
+ (contribution from William Brack)
+
+Sat Apr 21 16:12:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: cleanup, more useful debugging
+ * parserInternals.c: cleanup vctxt.nodeTab (de)allocation
+ * xmlIO.c: entity loading is printed as an error when validating
+
+Sat Apr 21 12:25:49 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: fixed to validate within entities
+ * test/VCM/v22.xml: added a specific testcase
+
+Fri Apr 20 17:45:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: forgot an epsilon transition in for ()+
+ * test/VCM/v21.xml : added a specific test case
+
+Fri Apr 20 15:46:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: removed a state explosion exhibited by RSS
+ * test/valid/rss.xml result/valid/rss.xml*: added the testcase
+ from bug #51872
+
+Fri Apr 20 14:52:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.[ch] tree.h: worked *hard* to get non-determinist content
+ validation without using an ugly NFA -> DFA algo in the source.
+ Made a specific algorithm easier to maintain, using a single
+ stack and without recursion.
+ * Makefile.am test/VCM/*.xml: added more tests to "make Validtests"
+ * hash.c: made the growing routine static
+ * tree.h parser.c: added the parent information to an
+ xmlElementContent node.
+
+Wed Apr 18 23:33:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c parser.c xpath.c: generating IDs when not validating
+ from an external parsed entity was poisoning the ID has table
+ with removed values. This was killing XSLT on the KDE help
+ browser.
+
+Wed Apr 18 17:09:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * entities.h: andrew@ugh.net.au detected a double declaration
+
+Wed Apr 18 15:06:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * debugXML.c hash.c tree.h valid.c : some changes related to
+ the validation suport to improve speed with DocBook
+ * result/VC/OneID2 result/VC/OneID3 : this slightly changes
+ the way validation errors get reported
+
+Wed Apr 18 11:42:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c HTMLtree.c: applied part of the patches provided
+ by P C Chow and William M. Brack for XSLT HTML output
+
+Mon Apr 16 19:44:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlversion.h.in win32config.h win32/libxml2/*: applied
+ Igor Zlatkovic patches for MSC compilation and added his
+ updates
+
+Tue Apr 17 10:08:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed xmlXPathNodeCollectAndTest() to do proper
+ prefix lookup.
+ * parserInternals.c: fixed the bug reported by Morus Walter
+ due to an off by one typo in xmlStringCurrentChar()
+
+Thu Apr 12 17:41:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c result/HTML/*: revamped the way the HTML
+ parser handles end of tags or end of input
+
+Thu Apr 12 10:50:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch] : added xmlDocCopyNode for gdome2 support
+
+Wed Apr 11 16:37:50 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.h: include xmlmemory.h this seems to havoid a nasty glibc
+ bug where the linktime verions of free() won't work ...
+
+Wed Apr 11 14:21:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * config.h.in configure.in xmlversion.h.in: added ansidecl.h test
+
+Wed Apr 11 13:50:42 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: added 2.3.6 release
+
+Wed Apr 11 13:26:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlStringGetNodeList() to handle charrefs
+ * result/wml.xml: resulted in a small output change
+
+Wed Apr 11 09:47:55 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: xmlNewDoc was missing the charset initialization
+ * xmllint.c: added --auto to autogenerate a doc, allow to
+ reproduce the problem fixed on xmlNewDoc
+
+Tue Apr 10 18:13:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: trying to get 52979 solved
+ * tree.c result/ result/noent/: trying to get 52712 solved, this
+ also made me clean up the fact that XML output in general should
+ not add formating blanks by default, this changed the output of
+ a few tests
+
+Tue Apr 10 16:30:20 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: Bill Brack pointer an error in detecting a null nodeset
+
+Sun Apr 8 15:07:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: finally released 2.3.6
+
+Sun Apr 8 11:39:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: checking for null pointer generated by new code
+
+Fri Apr 6 12:53:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed a [] evaluation problem reported
+ * test/XPath/tests/simpleaddr: extended test
+ * result/XPath/simpleaddr: updated result
+
+Wed Apr 4 02:07:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmllint.c: Dan Timis reported a portability problem
+ on Macs without mmap, fixed it.
+
+Tue Apr 3 20:20:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * testXPath.c : added a --tree option allowing to display the
+ tree dump of the XPath expression
+
+Mon Apr 2 17:13:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed a memleak when comparing nodesets
+ * HTMLtree.c: don't invent the HTML doctype if not available (XSLT)
+ * tree.c: added a TODO
+
+Tue Mar 27 14:32:06 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in Makefile.am config.h.in xmlversion.h.in: detect if
+ we need string functions
+ * trio.[ch] strio.[ch]: embedded the Trio-0.23 string functions
+ to be able to use them where needed. Applied some changes
+ to reduce name linking pollution and compile in only what's
+ needed.
+ * HTMLtree.c debugXML.c entities.c error.c nanoftp.c valid.c
+ xlink.c xmlversion.h.in xpath.c: got rid of the #ifdef
+ for the string manipulation functions
+ * xmlmemory.[ch]: removed DEBUG_MEMORY_FREED and added it automatically
+ to the free() function of xmlmemory.c
+ * entities.c HTMLtree.c parserInternals.c tree.c uri.c valid.c
+ xinclude.c xmlIO.c xpath.c xpointer.c: removed the MEM_CLEANUP
+ usage.
+
+
+Tue Mar 27 02:30:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * error.c: applied the context output patch of the error
+ handling submitted by Chuck Griffith
+ * error/VC/*: this slightly change some error logs
+
+Tue Mar 27 00:51:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed line number reporting on error
+
+Mon Mar 26 23:21:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: Sullivan and Darin found a parser bug,
+ applied the patch.
+
+Mon Mar 26 18:24:52 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c HTMLtree.c SAX.c debugXML.c error.c parserInternals.c
+ testHTML.c testSAX.c tree.c valid.c xmlIO.c xmlmemory.c
+ xmlversion.h.in xpointer.c: of course the way I defined
+ UNUSED breaks on old gcc version. Try to be smart and
+ also define it directly in xmlversion.h
+ * configure.in: removed -ansi flag from the pedantic set
+
+Sat Mar 24 17:45:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+ Huge cleanup, I switched to compile with
+ -Wall -g -O -ansi -pedantic -W -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
+ * HTMLparser.[ch] HTMLtree.c SAX.c debugXML.c encoding.[ch]
+ encoding.h entities.c error.c list.[ch] nanoftp.c
+ nanohttp.c parser.[ch] parserInternals.[ch] testHTML.c
+ testSAX.c testURI.c testXPath.c tree.[ch] uri.c
+ valid.[ch] xinclude.c xmlIO.[ch] xmllint.c xmlmemory.c
+ xpath.c xpathInternals.h xpointer.[ch] example/gjobread.c:
+ Cleanup, staticfied a number of non-exported functions,
+ detected and cleaned up a dozen of problem found this way,
+ avoided a lot of public function name/typedef/system names clashes
+ * doc/xml.html: updated
+ * configure.in: switched private flags to the really pedantic ones.
+
+Thu Mar 22 22:44:15 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: 2.3.5
+ * doc/html/*: rebuilt the docs
+
+Thu Mar 22 15:36:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed a reported bug in NOTATION parsing
+ * uri.c: accepted but not fixed bug 51876, added TODO
+ * Makefile.am: fixed bug 51876
+
+Thu Mar 22 13:41:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * config.h.in configure.in error.c: fix a compilation problem
+ on platforms without vsnprintf (xml@thewrittenword.com)
+
+Wed Mar 21 19:04:34 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed a function name header typo
+ * SAX.c: notations can also occur in external subset.
+
+Tue Mar 20 14:21:28 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * error.c: removed a C++ like comment
+
+Tue Mar 20 12:22:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixing bug 52299 strange condition leading
+ to a parser crash due to a buffer overflow
+ * result/noent/attrib.xml result/attrib.xml test/attrib.xml:
+ added the specific test case
+
+Mon Mar 19 16:50:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.[ch]: still a lot of cleanup based on XSLT, added
+ xmlXPathConvert{String,Number,Boolean} to be able to make
+ type casts without a context stack, fixed some implementation
+ problems related to the absence of context at parse-time,
+ added xmlXPathEvalPredicate() and xmlXPathFreeCompExpr()
+ in the public API too
+ * xpointer.c xpathInternals.h: we need to know at parse time
+ whether we are compiling an XPointer
+
+Mon Mar 19 11:54:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.[ch] xpointer.c: restaured the Binary and API compatibility
+ cleaned up the parser internals, refactored XPath code, added
+ new compilation based APIs and cleanly separated public and
+ private APIs.
+
+Mon Mar 19 00:59:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.h: the comp field must be added at the end to avoid
+ killing binary compat.
+
+Mon Mar 19 00:11:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: detect XPath memleaks in regreson tests
+ * error.c: fixed and error w.r.t. error reporting still using
+ stderr
+ * hash.c: added new line at end of file
+ * tree.h: minor cleanup
+ * xpath.[ch] xpointer.[ch]: Major changes ! Separated XPath
+ expression parsing from evaluation, resulted in a number of
+ changes internally, and in XPointer. Likely to break stuff
+ using xpathInternals.h but should remain binary compatible,
+ new interfaces will be added.
+
+Wed Mar 14 20:34:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: fixed a couple of problems reported by
+ okiddle@yahoo.co.uk and allanc@chickenandporn.com when compiling
+ without gcc on non linux platforms.
+
+Wed Mar 14 20:13:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/Makefile.am configure.in: yearke@eng.buffalo.edu suggested
+ a fix for --with-html-dir= configure support. I hope it won't
+ break rpm generation
+
+Wed Mar 14 17:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: one function comment cleanup.
+
+Wed Mar 14 14:55:46 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * SAX.c: external subset notations were improperly registered
+ in the internal subset.
+
+Tue Mar 13 10:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * README.cvs-commits: added, pointing to HACKING
+ * HACKING: updated
+
+Mon Mar 12 22:09:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: and Matt Sergeant found one in the XML push
+ parser (erroneous check I forgot to remove when I fixed the
+ main parser).
+
+Mon Mar 12 19:19:04 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: ptittom found a small bug in UnaryExpr
+
+Sat Mar 10 13:09:53 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: bumped to 2.3.4
+ * error.c: fixed bug #51860
+ * tree.c: fixed bug #51861
+ * valid.c: cleanup, more debug, failed to fix one bug crap ...
+ * tree.[ch] : added xmlDefaultBufferSize
+ * nanoftp.c: typo in function name header block
+ * doc/xml.html : updated, added link to XML::LibXSLT
+ * doc/html/* : rebuilt the docs
+
+Wed Mar 7 20:43:47 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c SAX.c: the new content parsing code raised an
+ ugly bug in the characters() SAX callback. Found it
+ just because of strangeness in XSLT XML Rec ouptut :-(
+
+Wed Mar 7 16:50:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: Martin Baulig suggested to add -lm
+ * tree.c: found another bug in xmlNodeGetContent()
+
+Tue Mar 6 09:21:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: Bjorn found the error related to strictness of comparison.
+
+Mon Mar 5 21:47:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: trying to fix the Dtd parsing problem reported
+ by Gary, side effect of last week speed optimizations.
+
+Sat Mar 3 19:45:59 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xml2Conf.sh.in: fixes pointed out by Fredrik Hallenberg
+ * parserInternals.c: removed unneeded test raised by Stric
+
+Sat Mar 3 13:04:37 CET 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * xpath.c: Fixed xmlXPathNodeCollectAndTest (problem reported
+ and fixed by William Brack). Added xmlXPathFormatNumber.
+ Changed the sorting slightly.
+ * configure.in Makefile.am example/Makefile.am: Added -lm.
+ Please note that applications linking with libxml2, must
+ also like with the math library from now on.
+
+Sat Mar 3 07:38:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: fixed loop reported by Marc Sanfacon
+
+Sat Mar 3 02:10:24 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: one must report spaces even if the Dtd element
+ content proves that this is not part of the element content.
+ * result/valid/*.xml: this changed the ouptu slightly
+
+Thu Mar 1 17:53:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: bumped to 2.3.3
+ * doc/xml.html: updated
+
+Wed Feb 28 00:43:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: minor doc fix
+ * xpath.c: deallocation issues when a result tree has been
+ converted to a node-set
+
+Mon Feb 26 22:09:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: oops corrected dates s/2000/2001
+
+Mon Feb 26 12:48:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: new patch from Gary Pennington
+
+Mon Feb 26 09:30:23 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: applied patch from Ankh
+
+Mon Feb 26 03:34:43 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xinclude.c: fixed a problem building on Mac
+
+Sun Feb 25 21:52:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: more work on increasing parsing ferformances
+
+Sun Feb 25 18:03:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlmemory.h HTMLparser.c HTMLtree.c entities.c parser.c
+ xpath.c xpointer.c tree.c uri.c valid.c xinclude.c xmlIO.c:
+ avoiding memcpy in production builds MEM_CLEANUP macro use
+ * parser.[ch] parserInternals.c: optimizations of the tightest
+ internal loops inside the parser. Better checking of I/O
+ flushing/loading conditions
+ * xmllint.c : added --timing
+
+Sun Feb 25 05:48:51 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: bumped to 2.3.2
+ * doc/xml.html: updated for release
+
+Sat Feb 24 14:07:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: found a memleak and fixed a nasty bug
+
+Sat Feb 24 03:35:48 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmllint.[c1] : added return code errors for xmllint
+ * xpath.c: specific debug dump function for result value trees
+
+Thu Feb 22 07:52:27 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: finally implemented xmlXPathCompareNodeSets
+ * test/XPath/expr/floats results/XPath/expr/floats: added
+ a test for float expressions
+
+Tue Feb 20 18:57:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed xmlNodeGetContent, it was not recursing on child
+ * parserInternals.[ch]: trying to speed up parsing
+ * xpath.c : speeded up node set equality op
+
+Mon Feb 19 19:01:57 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am valid.c list.[ch]: Gary Pennington provided a
+ better handling of ID/IDREF and the list modules associated
+ * configure.in: small CFLAGS cleanup
+
+Mon Feb 19 16:13:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: fixed iconv detection on AIX (stric)
+
+Mon Feb 19 10:59:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed "*" (unbelievable !) and a couple of warnings
+
+Sun Feb 18 17:52:37 MET 2001 Bjorn Reese <breese@users.sourceforge.net>
+
+ * xpath.c: fixed whitespace handling in xmlXPathStringEvalNumber,
+ and optimized xmlXPathNodeSetSort
+
+Sat Feb 17 14:18:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: bug fix when context size is 0
+ * parser.c: I like Norm's Dtd because they still manage to break
+ the parser occasionally
+
+Fri Feb 16 14:20:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: xmlXPathEqualNodeSetFloat the arg is really a double now
+
+Fri Feb 16 01:10:06 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.[ch] parser.c xpath.c: fixed the problem of addressing
+ attributes within the XML-1.0 namespace
+
+Thu Feb 15 16:53:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpathInternals.h: exported a few axis functions
+ * doc/xml.html: updated the doc
+
+Thu Feb 15 15:57:14 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: applied patch from Daniel van Balen for OpenBSD
+ and bumped version to 2.3.1
+ * HTMLtree.c result/HTML/doc3.htm result/HTML/wired.html: the
+ attempt to find autoclosing was simply broken, removed it,
+ updated the examples, this is better
+
+Wed Feb 14 11:35:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * hash.[ch]: added Paolo Casarini patch to provide Delete from
+ hash functionnalities.
+ * doc/html/* : rebuild the doc
+
+Tue Feb 13 18:01:48 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c result/XPath/tests/chaptersprefol: bugfixes on order and
+ on predicate
+ * HTMLparser.[ch] HTMLtree.c result/HTML/doc3.htm.err
+ result/HTML/doc3.htm.sax result/HTML/wired.html: sometimes one
+ really want to have tags closed on output even if we accept
+ unclosed ones on input
+
+Mon Feb 12 18:33:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: ouch don't free NULL, rare case fixed
+ * tree.c: don't coalesce text nodes if they don't have the
+ same behaviour wrt escaping on output
+
+Sun Feb 11 21:15:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: small fixup
+ * SAX.c: don't warn on empty namespaces.
+
+Thu Feb 8 11:28:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * README: a bit of cleanup
+ * configure.in: preparing for 2.3.0 release
+
+Thu Feb 8 10:37:00 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * hash.[ch]: added a first version of xmlHashSize()
+ * valid.c: another bug fix from Gary Pennington
+
+Wed Feb 7 19:22:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * valid.c: couple of bug fixes pointed by Gary Pennington
+ * HTMLtree.c: #if 0 cleanup
+
+Tue Feb 6 14:02:56 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: started profiling XSLT, added xmlXPathNodeSetAddUnique()
+ which removes a time consuming check of xmlXPathNodeSetAdd()
+ and use it in places where we are sure to not break unicity
+
+Mon Feb 5 18:51:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: bug fixes found from XSLT
+ * tree.c: preserve node->name special values when copying nodes.
+ * parserInternals.[ch] parser.[ch] SAX.c : added a mode where
+ external subset are fetched when available but without full
+ validation. Added xmlLoadExtDtdDefaultValue, need a function.
+ * HTMLtree.c: add support for xmlStringTextNoenc for XSLt HTML
+ output with encoding disabled.
+
+Sat Feb 3 09:50:29 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmliO.c: Harry Blundell pointed out that xmlCheckFilename
+ xmlCheckFilename should not be called from xmlFileOpenW
+ and xmlGzfileOpenW
+
+Fri Feb 2 18:04:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * uri.c: rewrite of xmlNormalizeURIPath from Paul D. Smith
+ * test/URI/smith.uri result/URI/smith.uri Makefile.am:
+ added the new tests for URI normalization
+ * testURI.c: fixed stoopid bugs
+ * result/VC/OneID3 result/VC/UniqueElementTypeDeclaration:
+ the URI in the error messages are now properly normalized
+
+Fri Feb 2 09:18:53 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * uri.c: applied Marc Sanfacon's patch for xmlNormalizeURIPath
+
+Thu Feb 1 05:28:55 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed a number of problems in XPATH_XSLT_TREE processing
+
+Wed Jan 31 21:45:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed mod operator
+
+Wed Jan 31 16:50:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c: fixed xmlStrcat doc
+ * tree.c: 2 fixes form Anders Carlson for copying nodes and
+ trees.
+
+Wed Jan 31 14:19:16 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c result/XPath/tests/chaptersbase
+ result/XPath/tests/simplebase: fixed XPath node()
+ * tree.c: small fix in xmlNewNs()
+ * Makefile.am: removed extraneous xml2Conf.sh rule
+
+Sun Jan 28 08:37:03 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am configure.in libxml.spec.in example/Makefile.am:
+ Changed the library name, in order to get libxml-devel and
+ libxml2-devel to coexist on a single system
+ * xml-config.1 xml-config.in xmlConf.sh.in: renamed
+ * xml2-config.1 xml2-config.in xml2Conf.sh.in: new files
+
+Sat Jan 27 19:58:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am configure.in libxml-2.0.pc.in: started working on getting
+ libxml2-devel installable in // as libxml-devel.
+
+Sat Jan 27 18:49:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/Makefile.am: fixed make rebuild in doc
+ * doc/html/*.html: rebuilt the docs
+
+Fri Jan 26 10:30:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: patch from Bjorn Reese on xmlBufferCCat
+
+Thu Jan 25 19:22:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am doc/Makefile.am libxml.spec.in: painful work to get
+ the HTML doc to go into the -devel RPM ...
+ * aclocal.m4 config.h.in: some updates due to auto* magic
+
+Thu Jan 25 19:11:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.h: added a hook in the context structure allowing to
+ link to extra support, needed for XSLT
+
+Thu Jan 25 13:34:11 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.[ch] xpointer.c: added xmlXPathCmpNodes, changed
+ xmlXPtrCmpPoints to use it.
+ * propagated the following patch from Alejandro Forero
+ * include/win32config.h xmlIO.c: applied further suggestions
+ from Igor Zlatkovic <igorz@dialup.nacamar.de> and cleanup
+ * example/gjobread.c: fixed warnings, now that it builds
+
+Wed Jan 24 20:27:28 COT 2001 Alejandro Forero <bachue@bachue.com>
+
+ * xmlIO.c (xmlFileOpen, xmlFileOpenW): Removed unnecesary checks.
+
+ * xmlIO.c (xmlCheckFilename): Function added to know whether a given
+ filename points to a valid file (not a directory).
+ * xmlIO.c (xmlFileOpen, xmlFileOpenW, xmlGzfileOpen, xmlGzfileOpenW):
+ Added calls to xmlCheckFilenameDir.
+
+ * xmlIO.c (xmlGzfileOpen, xmlGzfileOpenW, xmlFdOpen, xmlFdOpenW): Pass
+ `path' (rather than `filename') as the parameter to gzopen and open.
+
+Tue Jan 23 16:26:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: fixed a problem with EXTRA_DIST
+
+Mon Jan 22 23:42:17 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am example/Makefile.am: finally found the trick
+ to build the example, i.e. add "." in SUBDIRS before example
+ in the list <grin/>
+
+Mon Jan 22 16:30:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * doc/xml.html: updated with an XSLT section, removed pointer to
+ W3C CVS base.
+
+Mon Jan 22 11:43:21 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: when copying a XSLT tree object teh tree need to be copied
+ too, and deallocation need to occur the same way.
+
+Mon Jan 22 10:35:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpathInternals.h xpath.[ch] debugXML.c: added the XPATH_XSLT_TREE
+ type correponding to an XSLT result tree fragment. Share most
+ of the data format with node set, as well as operators.
+ * HTMLtree.c: added a newline at the end of the doctype output
+ whe this one is not present initially.
+ * tree.c: make sure taht the parent and doc pointers are properly
+ set when copying attributes (lists).
+
+Sun Jan 21 10:47:38 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * htmlTree.[ch] xmlIO.h: exported htmlDocContentDumpOutput
+
+Fri Jan 19 18:15:50 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: seems I finally killed that ugly path evaluation
+ context bug (tagged 9999 in case is is wrong)
+
+Fri Jan 19 06:30:38 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.[ch] xpathInternals.h: added xmlXPathRegisterVariableLookup()
+ for XSLT
+
+Thu Jan 18 16:19:47 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: Gary Pennington <Gary.Pennington@uk.sun.com> fix
+ for xmlGzfileOpen() bug
+
+Thu Jan 18 13:11:50 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: removed an error found by XSLT usage
+ * tree.c parserInternals.h: use a predefined static string
+ for text and comment nodes, avoid freeing them in xmlFreeNode,
+ exported the string name in parserInternals.h and added
+ another value to disable encoding at output (for XSLT),
+ gain memory, time.
+
+Wed Jan 17 09:15:16 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * win32/README.MSDev win32/libxml2/libxml2_a.dsp
+ win32/libxml2/libxml2_so.dsp: new makefiles and update
+ provided by Igor Zlatkovic <igor@stud.fh-frankfurt.de>
+
+Tue Jan 16 18:24:46 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c : xmlSaveFile, xmlSaveFileEnc, applied patch from
+ Gary Pennington
+
+Mon Jan 15 20:24:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xpath.c: fixed the comaprision of values and nodelists,
+ need to compare nodelist still ...
+ * debugXML.c: avoided a possible core dump
+ * HTMLparser.c: cleanup
+ * nanohttp.c: contributed fix.
+ * tree.c: fixes in properties handling added xmlSetNsProp
+ needed by libxslt
+ * xpathInternals.h: exported xmlXPathBooleanFunction, added a
+ comment
+ * TODO: updated
+
+Sat Jan 6 22:05:09 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * parser.c parserInternals.c: applied Bjorn Reese optimization
+ patch
+
+Sat Jan 6 19:13:27 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * Makefile.am: applied patch fro make check from Martin Vidner
+
+Thu Jan 4 19:07:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * configure.in: preparing 2.2.11
+ * doc/html/*: rebuild the HTML files
+ * doc/xml.html : updated
+
+Thu Jan 4 14:09:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * tree.c: fixed a stupid bug
+ * valid.c: applied "Paul D. Smith" <pausmith@nortelnetworks.com>
+ patches related to validation of an XInclude processing result
+ * TODO: updated
+
+Thu Jan 4 11:46:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * encoding.c xmlIO.c: Fixing the problem reported by Marc Sanfacon
+ on large files
+
+Wed Jan 3 21:51:13 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlIO.c: fixed xmlParserInputBufferCreateMem doc
+
+Wed Jan 3 18:56:00 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * HTMLparser.c: htmlCheckParagraph to check htmlOmittedDefaultValue,
+ reported by Jonas Borgström
+ * nanohttp.c: Applied Bjorn Reese' IPV6 first patch
+
+Wed Jan 3 16:19:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * testXPath.c xpath.c: fixing the XPath union expressions problem
+ reported by Martin Vidner <martin@artax.karlin.mff.cuni.cz>
+
+Wed Jan 3 14:22:33 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmllint.c: Made is so if the file name is "-" is will read form
+ standard input. Sven Heinicke <sven@zen.org>
+ * tree.c: fixed a problem when growing buffer
+ * tree.h: fixed the comment of the node types following andersca
+ comment
+ * TODO: updated
+
+Wed Dec 27 12:35:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch]: added a way to avoid adding automatically
+ omitted tags. htmlHandleOmittedElem() allows to change the
+ default handling.
+ * tree.[ch] xmllint.c: added xmlDocDumpFormatMemory() and
+ xmlDocDumpFormatMemoryEnc(), uses memory functions for output
+ of xmllint too when using --memory flag, added a memory test
+ suite at the Makefile level.
+ * xpathInternals.h xpath.[ch] xpointer.c: fixed problems
+ with namespace use when encountering QNames in XPath evalation,
+ added xmlns() scheme in XPointer.
+ * nanoftp.c : incorporated a fix
+ * parser.c xmlIO.c: fixed problems raised with encoding when using
+ the memory I/O
+ * parserInternals.c: closed bug 25934 reported by
+ torsten.landschoff@innominate.de
+ * TODO: updated
+
+Sat Nov 25 11:46:27 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in doc/html/* doc/xml.html: made a 2.2.9 release
+ on a non-updated tree :-(, made a 2.2.10 release to correct the
+ situation
+
+Sat Nov 25 10:41:37 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c parser.[ch] tree.[ch] xmlIO.[ch] xmllint.c xpath.c
+ parserInternals.h vms/build_libxml.com vms/config.vms Makefile.am:
+ integrated a set of OpenVMS changes from Howard Taylor
+ <Howard.Taylor@pacoast.com>
+
+Sat Nov 25 01:21:01 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] xmlIO.c: added xmlDocDumpMemoryEnc() from John Kroll
+ * error.c: applied fix suggested by "Leo Davidson" <leo@ox.compsoc.net>
+
+Sat Nov 25 00:24:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: some fixes on auto-open of html/head/body
+ * encoding.c: fixed a compilation error on some gcc env
+ * xpath.c xpointer.[ch] xpathInternals.h: improved the
+ XPointer implementation
+ * test/XPath/xptr/strpoint test/XPath/xptr/strrange3: added
+ related XPointer tests and associated results
+
+Fri Nov 24 14:01:44 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xmldtd.html doc/xml.html: following a short step by step
+ guidance on IRC to help maciej with DTDs I started a small
+ page on the subject.
+
+Fri Nov 17 17:28:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: fixed handling of broken charrefs
+ * xmlmemory.h libxml2.dsp include/win32config.h: reporting Windows
+ patches
+
+Mon Nov 13 19:17:20 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html doc/html/* : rebuilt the docs after adding
+ xinclude and updated page for 2.2.7 and 2.2.8
+ * configure.in: releasing 2.2.8
+
+Mon Nov 13 12:39:38 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] parserInternals.c: applied the conditional
+ section processing fix from Jonathan P Springer
+ <jonathan.springer2@gte.net>
+ * xmlversion.h.in win32/libxml2/libxml2.dsp : Updated MS
+ project file, fixed iconv default non support
+ * xpath.c: fixed the problem of evaluating relative expressions
+ when a node context is provided.
+
+Sun Nov 12 16:31:19 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c: fixed gcc 2.95 new warnings
+ * SAX.c: fixed a stupid bug
+ * tree.c: fixed a formatting problem when round-tripping
+ from/to memory
+ * xinclude.c: chased memleak, fixed a base problem
+ * xpointer.c: added xmlXPtrBuildRangeNodeList(), finished ?
+ xmlXPtrBuildNodeList()
+ * TODO: updated
+ * Makefile.am test/XInclude/docs test/XInclude/ents result/XInclude:
+ adding a first small set of regression tests for XInclude
+
+Tue Nov 7 15:11:34 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.[ch]: applied Wayne Davison patches to access
+ the WWW-Authorization header.
+ * parser.c: Closed Bug#30847: Problems when switching encoding
+ in short files by applying Simon Berg's patch.
+ * valid.c: fixed a validation problem
+ * hash.c parser.h parserInternals.h testHTML.c testSAX.c tree.h
+ xmlerror.h xmlmemory.h xmlversion.h.in: applied a DLL patch from
+ Wayne Davison
+ * xpointer.[ch]: added first version of xmlXPtrBuildNodeList()
+ need to be extended to non full nodes selections.
+ * xinclude.c: starts to work decently
+
+Mon Nov 6 17:22:46 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] xinclude.[ch] xmllint.c configure.in valid.c
+ debugXML.c xmlversion.h.in: Started adding XInclude support,
+ this is a new xmllint option
+ * tree.c xpath.c: applied TOM patches for XPath
+ * xpointer.c: fixed a couple of errors.
+ * uri.c: added an escaping function needed for xinclude
+ * testXPath.c hash.c HTMLtree.c: minor cleanups raised by
+ new warning from RH70 gcc's version
+
+Tue Oct 31 14:14:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: fixed loop on invalid char in scripts
+ * parser.c: update to description of xmlIOParseDTD()
+ * libxml.m4 xmlversion.h.in: changes contributed by
+ Michael Schmeing <m.schmeing@internet-factory.de>
+ * configure.in: preparing for 2.2.7
+ * Makefile.am: trying to avoid config.h and acconfig.h
+ being included in the distrib
+ * configure.in: released 2.2.7
+
+Mon Oct 30 17:08:10 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] debugXML.c parserInternals.c xpath.c: Deprecated Pi's
+ like namespaces for good. Unified xmlNs and xmlNode somewhat.
+
+Mon Oct 30 16:26:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch]: added xmlIOParseDTD()
+ * xpointer.c: added support for the 2 extra parameters of
+ string-range, fixed a stoopid error when '0' was present
+ in XPointer expressions
+ * test/XPath/xptr/strrange2 result/XPath/xptr/strrange2: added
+ testsuite for the above
+
+Mon Oct 30 10:26:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.spec.in: improved package descriptions
+
+Sun Oct 29 19:03:11 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c xpathInternals.h: applied a large cleaning patch
+ from TOM <ptittom@free.fr>, it also add namespace support
+ for function and variables registration.
+
+Sun Oct 29 18:51:46 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c: Wayne Davison's patch fixing xmlBuildURI()
+ * Makefile.mingw: Wayne Davison's update adding hash.c
+
+Sun Oct 29 18:38:12 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c: fixed the root evaluation problems
+ * HTMLparser.c result/HTML/doc3.htm: fixed the problem of non
+ ignorable spaces with <b> <bold> <em>
+ * tree.c: fixed a loop in xmlSearchNsByHref()
+
+Fri Oct 27 18:57:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c: applied another XPath patch from TOM
+ * xpath.c include/makefile.am: applied another patch from
+ china@thewrittenword.com (cleanup on IRIX).
+
+Fri Oct 27 13:45:28 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml-config.1: received a fixed version from Fredrik Hallenberg
+ <hallon@lysator.liu.se>
+
+Thu Oct 26 16:05:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c textXPath.c xpathInternals.h: applied TOM <ptittom@free.fr>
+ cleanup patch for XPath
+
+Wed Oct 25 21:31:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * patched to redirrect all "out of context" error messages to
+ a reconfigurable routine. The changes are:
+ * xmlerror.h : added the export of an error context type (void *)
+ an error handler type xmlGenericErrorFunc there is an interface
+ xmlSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
+ to reset the error handling routine and its argument
+ (by default it's equivalent to respectively fprintf and stderr.
+ * all the c files: all wild accesses to stderr or stdout within
+ the library have been replaced to calls to the handler.
+
+Wed Oct 25 15:27:19 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: release 2.2.6
+ * xpath.[ch] xpointer.c xpathInternals.h: added xpathInternals.h
+ exporting the inner functions of xpath for extension modules
+ * doc/*: updated and rebuilt the doc
+
+Wed Oct 25 12:48:55 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c : applied Wayne HTTP cleanup patch
+ * tree.[ch]: applied TOM <ptittom@free.fr> for xmlNodeSetBase()
+ and xmlNodeSetSpacePreserve()
+
+Wed Oct 25 12:11:03 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c: closing bug #29260
+
+Tue Oct 24 18:49:34 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * hash.[ch] debugXML.c: expanded/enhanced the API, added
+ multikey tuples, made hash structure opaque
+ * valid.[ch]: moved elements, attributes, notations decalarations
+ as well as ID and refs to hash tables.
+ * entities.c: hash cleanup
+ * xmlmemory.c: fixed a dump problem in debug mode
+ * include/Makefile.am: problem passing in DESTDIR= values patch
+ from Marc Christensen <marc@calderasystems.com>
+ * nanohttp.c: removed debugging remains
+ * HTMLparser.c: the bogus tag should be ignored (Wayne)
+ * HTMLparser.c parser.c: fixing a number of problems with the
+ macros in the *parser.c files (Wayne).
+ * HTMLparser.c: close the previous option when opening a new one
+ (Marc Sanfacon).
+ * result/HTML/*: updated the HTML results accordingly
+
+Sun Oct 22 18:39:19 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.[ch] xpath.[ch] hash.[ch] debugXML.c tree.h: added/hacked
+ hash tables from Bjorn Reese <breese@mail1.stofanet.dk>. Switched
+ XPath functions and XML entities table to them. More to come...
+ * xmlIO.c: fixed libxml closing FILEs it didn't open.
+
+Sun Oct 22 13:59:50 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: coalesce adjacent text nodes
+ * valid.c: handling of blank nodes in DTd validation (raised
+ by problems with a posteriori validation).
+ * nanohttp.c: changing behaviour on HTTP write stuff.
+ * HTMLtree.c: forced body and html to be explicitely closed.
+ * xpath.h: exported more XPath functions.
+
+Sun Oct 15 22:28:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Release of 2.2.5
+ * xpointer.c: range() range-inside and other helper functions
+ * parserInternals.c: fixed perf problem raised by rolf@pointsman.de
+
+Sun Oct 15 16:21:27 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.c: HTML attributes need normalization too (Bjorn Reese)
+ * HTMLparser.[ch]: addded htmlIsScriptAttribute()
+
+Sun Oct 15 13:18:36 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/*: rebuilt docs preparing for 2.2.5 release, added URI
+ and XPointer modules
+
+Sun Oct 15 12:13:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.h: closed #25107
+
+Sun Oct 15 12:06:16 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * testSAX.c: fixed problem with cdata reporting
+ * SAXresult/* : updated
+
+Sun Oct 15 12:00:24 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c test/wap.xml result/noent/wap.xml result/wap.xml:
+ Closed bug #27499, added to regression tests
+ * TODO: updated
+
+Sun Oct 15 01:34:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c HTMLtree.[ch] SAX.c testHTML.c tree.c: fixed HTML
+ support for SCRIPT and STYLE with help from Bjorn Reese
+ * test/HTML/* result/HTML/*: added simple testcase and updated
+ the existing ones.
+
+Fri Oct 13 18:24:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c xpointer.c: XPointer reorder of ranges start/end and
+ string-range for empty strings
+ * test/XPath/docs/str test/XPath/xptr/chaptersrange
+ test/XPath/xptr/strrange: augmented the XPointer testsuite
+
+Fri Oct 13 12:21:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html doc/xmlmem.html: added a module describing memory
+ interfaces and use, updated the main page.
+
+Fri Oct 13 01:23:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c nanohttp.c xmlIO.c: Wayne Davison Win32 patch
+ nanoftp code work on Windows too now
+
+Fri Oct 13 00:54:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * testXPath.c xpath.[ch]: moved some debug functions to xpath core
+ * xpointer.c: implemented string-range() at least a good first version
+ * test/XPath/docs/str test/XPath/xptr/strrange
+ result/XPath/xptr/strrange: the string-range() tests
+
+Thu Oct 12 10:02:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am include/Makefile.am include/win32config.h
+ win32/Makefile.mingw: fixed problems reported by Wayne Davison
+ and make distcheck
+
+Thu Oct 12 01:44:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c: added xmlNanoHTTPTimeout(int delay), removed a bug
+ xmlNanoHTTPMethod on input MimeType Tony Lam <Tony.Lam@eng.sun.com>
+ * xpointer.c: slight extension of xmlXPtrLocationSetMerge
+
+Thu Oct 12 01:37:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * config.h.in configure.in nanoftp.c nanohttp.c xmlversion.h.in :
+ patch for socklen_t detection by
+ Albert Chin-A-Young <china@thewrittenword.com>
+
+Wed Oct 11 17:53:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c valid.c xmllint.c: Fixed a few postvalidation bugs
+ and added a --dtdvalid option to xmllint used to test it
+
+Wed Oct 11 15:01:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml-config.1 Makefile.am libxml.spec.in: adding a man page for
+ xml-config by Fredrik Hallenberg <hallon@lysator.liu.se>
+
+Wed Oct 11 12:41:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.[ch] xpointer.[ch]: worked on XPath functions and variable
+ handlings (registration, lookup, cleanup)
+
+Wed Oct 11 01:46:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in Makefile.am include/makefile.am: adding XPointer
+ and XPtrtests target
+ * xpointer.[ch] : new files for XPointer support
+ * test/XPath/xptr result/XPath/xptr: added XPointer testsuite and
+ more XPath tests
+
+Wed Oct 11 01:23:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: fixed, very broken, make distcheck works again
+
+Wed Oct 11 02:53:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * More work toward 2.2.5, integrated a number of patches
+ * configure.in Makefile.am win32config.h.in: trying to cleanup
+ make distcheck .... huh ...
+ * include/Makefile.am include/win32config.h: new directory
+ for includes
+ * win32/Makefile.mingw win32/README.MSDev win32/libxml2/libxml2.dsp
+ updated teh makefiles and instructions for WIN32
+ * xpath.c: small fixes
+ * test/XPath/ results/XPath: updated the testcases and results
+ * HTMLparser.c nanohttp.c testXPath.c: incorporated provided or
+ suggested patches
+ * valid.c: fixed an ID bug
+
+Mon Oct 9 14:28:56 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * moved xml-error.h to xmlerror.h: seems this allowed to bypass
+ the automake bug where wrong dependencies were generated.
+ * xpath.[ch]: worked on XPointer
+
+Fri Oct 6 12:58:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in Makefile.am: 2.2.5, ship the include in an
+ include/libxml subdirectory, use symlinks when using CVS
+ * testSAX.c: fixed small bug
+ * testXPath.c: changed the way testfiles are parsed
+ * debugXML.c: same kind of cleanup when parsing an argument expression
+ XPath/XPointers can have blanks embedded
+ * xpath.[ch]: more cleanup, reorgs for XPointer work
+ * parserInternals.c parser.c HTMLparser.c: fixed wrong include
+ * win32/README.MSDev win32/libxml2/libxml2.dsp: Windows stuff
+
+Thu Oct 5 18:13:15 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * debugXML.c testXPath.c xpath.[ch]: got pissed by some nastyness
+ in the XPath engine, rewrote large parts of it, now it's far
+ cleaner and in sync with the REC not an old WD. Fixed a parsing
+ problem in the interactive XML shell found when testing XPath.
+
+Wed Oct 4 15:25:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * debugXML.c testXPath.c xpath.[ch]: More work on XPath/Xpointer,
+ incorporated "(TOM)" <ptittom@free.fr> patches rebuilt the XPath
+ examples with the extra test
+
+Wed Oct 4 14:39:01 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c xmlIO.c xmlIO.h: fixed bug 26650, and improved
+ the global init function.
+
+Tue Oct 3 11:28:52 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: Doohhh, attribute name parsing was still case
+ sensitive ! Fixed this ...
+ * result/HTML/* : updated the tests results accordingly
+
+Mon Oct 2 23:47:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.[ch] debugXML.c testXPath.c: fixed the XPath evaluation
+ engine, should be far more stable, incorporated a new version of
+ preceding/following axis, need testing
+ * uri.c: fixed file:///c:/a/b/c problem
+ * test/XPath/tests/idsimple: augmented the XPath tests
+
+Sun Oct 1 22:33:00 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* rebuilding docs for 2.2.4 release
+
+Sun Oct 1 22:16:33 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: releasing 2.2.4
+ * parser.[ch]: added xmlStrEqual()
+ * HTMLparser.c HTMLtree.c SAX.c debugXML.c entities.c parser.c
+ tree.c valid.c xlink.c xpath.c: converted all !xmlStrcmp to
+ use xmlStrEqual instead
+ * TODO: updated
+ * added an XPath test
+
+Sun Oct 1 20:19:39 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: fixed htmlStartCloseIndexinitialized init
+ * entities.h: exported xmlInitializePredefinedEntities
+ * parser.[ch] : added xmlInitParser()
+ * parserInternals.h : had to export htmlInitAutoClose()
+
+Sun Oct 1 16:28:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.[ch] : fixed some serious XPath Predicate evaluation
+ problems
+ * Makefile.am : added XPath regression tests to normal tests
+ * uri.c: fixed a problem with local paths, cleanup
+ * parser.c: fixed a problem with large CData sections
+
+Sat Sep 30 16:35:54 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in xml-config.in: patch from "Ben Taylor"
+ <sol7x86@hotmail.com> for solaris shared libs lookup
+
+2000-09-30 Martin Baulig <baulig@suse.de>
+
+ * libxml-2.0.pc.in: Provide pkg-config script.
+
+ * configure.in: Create the libxml-2.0.pc script from the
+ libxml-2.0.pc.in templates.
+ * Makefile.am (pkgconfig_DATA): Install the libxml-2.0.pc
+ script in `$(libdir)/pkgconfig'.
+
+Mon Sep 25 16:23:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c parser.c tree.c tree.h: Avoiding a few warning
+ when compiling with MSC
+
+Sun Sep 24 20:32:52 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c: patch for normalize-string() substring-before(),
+ substring-after() and translate() functions from Bjorn Reese
+ <breese@mail1.stofanet.dk>
+ * libxml.m4 Makefile.am: added libxml.m4 from Debian ?
+ Fredrik Hallenberg <hallon@lysator.liu.se>
+ * TODO: updated
+
+Sun Sep 24 10:00:49 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlversion.h.in nanoftp.c nanohttp.c: traying to work out the
+ problem of socklen_t being undefined on a number of platforms
+ * debugXML.c: fixed a compilation problem when without snprintf
+
+Sat Sep 23 12:19:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c uri.c: Another patch from Wayne Davison, correcting
+ an URI bug and a fix for the control-character-induced infinite loop
+ * nanohttp.c: preventive fix for compiling on WIN32
+
+Fri Sep 22 18:06:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlint.c: closing bug #25000
+
+Fri Sep 22 14:17:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlIO.h tree.h: made xmlNodeDump() and xmlNodeDumpOutput() public
+ * parser.[ch] nanohttp.c HTMLtree.c HTMLparser.c tree.c: applied and
+ modified slightly Wayne Davison patch adding xmlStrcasecmp and
+ related function, fixing xmlStrncmp(), and associated cleanup
+ * result/HTML/entities.html.sax: updating result
+
+Tue Sep 19 14:20:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c: applied patch for URI escaping from Wayne Davison
+ <wayned@blorf.net>
+ * tree.c parserInternals.c HTMLparser.c: memset checks patches
+ from Denis Barbier <barbier@imacs.polytechnique.fr>
+ * HTMLparser.c: UTF8 characters in HTML tag-attribute values
+ patch from Wayne Davison
+
+Sun Sep 17 18:37:03 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html : updated with new releases, adding "how to help"
+
+Sun Sep 17 17:58:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.c debugXML.c parser.c parserInternals.c tree.c valid.c xpath.c:
+ removed a few warnings in pedantic mode ...
+ * parserInternals.c parser.c: moved encoding switching function
+ to parserInternals.c
+ * configure.in, doc/Makefile.am libxml.spec.in: released 2.2.3
+
+Sat Sep 16 20:12:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c parser.c: set ctxt->errNo before calling the
+ error or warning handlers
+
+Wed Sep 13 22:03:18 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parserInternals.c parserInternals.h parser.c Makefile.am:
+ created a new module parserInternals.c, moved most of the
+ code shared by the various parsers there, as well as
+ deprecated code from parser.c. More cleanup of parser.c
+ * uri.c: fixed a problem when URI is NULL
+ * valid.c: speedup when looking for an attribute declaration
+
+Sun Sep 10 17:53:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c tree.c SAX.c parser.c entities.c debugXML.c: finished
+ the cleanup of the computation of URI references when seeking
+ external entities. The URI reference string and the resulting
+ URI are both stored now.
+ * parser.c HTMLparser.c valid.c nanoftp.c nanohttp.c xpath.c:
+ large s(n)printf checks and cleanup from Denis Barbier
+ <barbier@imacs.polytechnique.fr>
+ * xmlversion.h.in tree.h: couple of SGML declarations for a
+ possible docbook module.
+ * result/VC/ : a couple of test output changed due to the change
+ of the entities URI
+
+Sun Sep 10 15:59:58 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.h: added a _private field for linking user's data
+
+Sun Sep 10 15:14:43 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c parserInternals.h: demacroified most of the IS_XXX
+ the gain in size is significant so ...
+
+Fri Sep 8 20:48:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.c: cases where looking up entities with doc==NULL
+ covered
+
+Tue Sep 5 12:41:15 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c: applied Wayne Davison patch
+ * Makefile.in test/URI/uri.data result/URI/uri.data: updated URI tests
+
+Mon Sep 4 13:01:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c testUri.c: applied Wayne Davison patches
+ * test/URI/uri.data result/URI/uri.data: first set of tests/results
+ * Makefile.in: added URItest and included thenin "make tests"
+
+Sun Sep 3 19:19:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlversion.h.in: closed bug 22941
+
+Thu Aug 31 16:55:55 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xmlio.html: added doc and example for entity loader
+ redefinition.
+
+Thu Aug 31 14:59:28 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xmlio.html doc/xml.html: added a doc on the I/O mechanism
+ used by libxml
+
+Tue Aug 29 20:22:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: Fixed bug on invalid ontent characters and when using
+ push.
+ * xmllint.c: fixed xmllint endling of errors in push mode
+
+Tue Aug 29 11:24:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c testHTML.c: applied two new patches from
+ Wayne Davison <wayned@users.sourceforge.net>
+ * result/HTML/*.sax: regenerated HTML SAX output
+ * parser.c: more cleanup.
+
+Mon Aug 28 11:58:12 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch] testHTML.c: applied the second set of
+ patches from Wayne Davison <wayned@users.sourceforge.net>,
+ adding htmlEncodeEntities()
+ * HTMLparser.c: fixed an ignorable white space detection bug
+ occuring when parsing with SAX only
+ * result/HTML/*.sax: updated since the output is now HTML
+ encoded...
+
+Mon Aug 28 00:38:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch]: applied some of Wayne Davison
+ <wayned@users.sourceforge.net> patches
+
+Sun Aug 27 22:14:01 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.c tree.c debugXML.c: fixed bogus behaviour when an
+ undeclared namespace prefix was used, added a warning.
+ Cleaned up support w.r.t. entities, spilling out a warning
+ and being pedantic on lookups.
+ * test/warning/ent9 : added testcase for previous example.
+ * TODO: updated
+ * parserInternals.h parser.c: changed the way names are parsed
+ now allow infinite size and decrease penalty for normal use
+ * parser.c: Started a big cleanup/check of the parser code,
+ fixed some of the most tortuous entity code, spotted code
+ unused anymore
+ * test/*: added tests for very long names and related nasty
+ things.
+
+Sat Aug 26 23:31:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/encoding.html: added encoding aliases doc
+ * doc/xml.html: updates
+ * encoding.[ch]: added EncodingAliases functions
+ * entities.[ch] valid.[ch] debugXML.c: removed two serious
+ bottleneck affecting large DTDs like Docbook
+ * parser.[ch] xmllint.c: added a pedantic option, will be
+ useful
+ * SAX.c: redefinition of entities is reported in pedantic mode
+ * testHTML.c: uninitialized warning from gcc
+ * uri.c: fixed a couple of bugs
+ * TODO: added issue raised by Michael
+
+Wed Aug 23 01:50:51 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/encoding.html: propagated Martin Duerst suggestions
+
+Wed Aug 23 00:23:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: Fixed Bug#21552: libxml fails to decode &amp;
+ * uri.c testUri.c patches, by Marc Sanfacon (1 left)
+ * parser.c HTMLparser.c: HTML/encoding push problems reportedi
+ by Wayne Davison
+
+Sun Aug 20 17:03:38 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c nanohttp.c: small cleanup
+ * TODO: updated
+
+Sat Aug 19 22:57:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added an old VC testcase and updated title.xml entity
+
+Sat Aug 19 21:02:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c SAX.c tree.c HTMLtree.h result/HTML/*: work
+ done on auto-opening of <p> tags and cleanup of SAX output
+
+Sat Aug 19 18:45:40 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.4 xmllint.1 Makefile.am libxml.spec.in: added man pages
+
+Sat Aug 19 18:38:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html libxml.* structure.*: updated the doc a bit
+
+Thu Aug 17 15:50:00 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * testSAX.c testHTML.c result/HTML/: cleanup of the output
+ of SAX tests
+
+Mon Aug 14 13:56:33 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Patch from Albert Chin-A-Young <china@thewrittenword.com>:
+ * xmllint.c: workaround a MAP_FAILEd definition bug in DU-4.0
+
+Mon Aug 14 11:10:20 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Patch from Dave Yearke <yearke@eng.buffalo.edu>:
+ * testHTML.c: fix core dump on Solaris 2.x systems
+ * HTMLparser.c: fix segfault if ctxt->sax->characters() is NULL
+ * result/HTML/*.sax: previous bug fix lead to new results
+
+Mon Aug 14 10:26:09 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Patch from Albert Chin-A-Young <china@thewrittenword.com>:
+ * configure.in: added --with-readline=DIR to accept alternate
+ path for readline include/library
+ * configure.in: added AM_C_PROTOTYPES to add -Aa -D_HPUX_SOURCE
+ for ANSI under HP-UX
+ * config.in: Removed @LIBS@ from xml-config because @XML_LIBS@
+ includes @LIBS@
+
+Sat Aug 12 23:19:42 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* : rebuilt the docs
+ * getting ready for 2.2.2 release
+
+Sat Aug 12 16:42:37 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch]: added xmlGetFeaturesList() xmlGetFeature()
+ and xmlAddFeature()
+ * tree.[ch]: added xmlAddChildList()
+ * xmllint.c: MAP_FAILED macro test
+ * parser.h: added xmlParseCtxtExternalEntity()
+ * valid.c: applied bug fixes removed warning
+ * tree.c: added CDATA block to elements content
+ * testSAX.c: cleanup of output
+ * testHTML.c: added SAX testing
+ * encoding.c: better error recovery
+ * SAX.c, parser.c: fixed one of the external entity processing
+ of the OASis testsuite
+ * Makefile.am: added HTML SAX regression tests
+ * configure.in: bumped to 2.2.2
+ * test/HTML/ result/HTML: added a few of HTML tests, and added the
+ SAX results
+
+Fri Aug 4 11:21:50 PDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: patch for HP compiler
+
+2000-08-04 Sven Heinicke <sven@zen.org>
+
+ * xmllint.c: Was coredumping sometimes when the file given didn't
+ exist.
+
+Sat Jul 22 05:59:05 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c xmlIO.[ch]: fixed the problem of encoding support
+
+ when using in memory parsing. Need some cleanup.
+ * xmllint.c configure.in: added a --memory flag to test memory
+ parsing
+
+Fri Jul 21 17:09:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c: fixed socklen_t replacement to unsigned int
+ * parser.c: fixed a space handdling missing at the end of
+ production 28 DOCTYPE.
+ * xmlmemory.c: fixed a stupid bug on the routine to override
+ allocation functions
+ * TODO: updated
+
+Fri Jul 14 17:01:14 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/ regenerated the docs
+
+Fri Jul 14 16:12:20 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/encoding.html doc/xml.html: added I18N doc
+ * encoding.[ch] HTMLtree.[ch] parser.c HTMLparser.c: I18N encoding
+ improvements, both parser and filters, added ASCII & HTML,
+ fixed the ISO-Latin-1 one
+ * xmllint.c testHTML.c: added/made visible --encode
+ * debugXML.c : cleanup
+ * most .c files: applied patches due to warning on Windows and
+ when using Sun Pro cc compiler
+ * xpath.c : cleanup memleaks
+ * nanoftp.c : added a TESTING preprocessor flag for standalong
+ compile so that people can report bugs more easilly
+ * nanohttp.c : ditched socklen_t which was a portability mess
+ and replaced it with unsigned int.
+ * tree.[ch]: added xmlHasProp()
+ * TODO: updated
+ * test/ : added more test for entities, NS, encoding, HTML, wap
+ * configure.in: preparing for 2.2.0 release
+
+Mon Jul 10 16:17:18 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c: fixed the way the control connection is handled
+ * libxml.spec.in: fixed the dependencies and cleanup
+
+Mon Jul 3 14:37:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html: changed the xmlsoft.org structure, updated the
+ examples w.r.t. root and childs
+
+Sun Jul 2 20:51:43 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.spec.in: fixed bug #7419, dependencies fouled for libxml-devel
+
+Sun Jul 2 09:52:45 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: Work on character encoding support for the HTML parser
+ * HTMLparser.c: Fixed some autoopen/autoclose probs for the HTML parser
+ * encoding.c: Fixed a potential memleak in the encoding stuff
+
+Sat Jul 1 13:44:22 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/FAQ.html doc/Makefile.am : added a FAQ
+
+Fri Jun 30 20:29:08 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c HTMLtree.c SAX.c valid.c tree.h : more cleanup
+ of the HTML parser to force it to not bypass SAX
+
+Fri Jun 30 11:19:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * win32config.h.in: updated
+ * xmlversion.h.in: crap forgot to update this, this mean 2.1.0
+ lacks iconv support :-( need to release 2.1.1
+ * configure.in: release 2.1.1
+ * HTMLparser: fixed bug #14784
+ * xpath.c HTMLparser.c encoding.c parser.c: fix warning raised
+ by Windows compiler
+ * HTMLparser.c SAX.c HTMLtree.h tree.h: create HTML document in
+ the SAX startDocument() callback.
+ * TODO: updated
+
+Thu Jun 29 12:06:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added xmlStopParser()
+
+Wed Jun 28 23:10:26 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: 2.1.0 prerelease
+ * Large resync between W3C and Gnome tree
+ * nanoftp, nanohttp.c: fixed stalled connections probs
+ * HTMLtree.c SAX.c : support for attribute without values in
+ HTML for andersca
+ * valid.c: Fixed most validation + namespace problems
+ * HTMLparser.c: start document callback for andersca
+ * debugXML.c xpath.c: lots of XPath fixups from Picdar Technology
+ * parser.h, SAX.c: serious speed improvement for large
+ CDATA blocks
+ * encoding.[ch] xmlIO.[ch]: Improved seriously saving to
+ different encoding
+ * example/Makefile.am example/gjobread.c tree.h: work on
+ libxml1 libxml2 convergence.
+ * config.h.in parser.c xmllint.c: added xmlCheckVersion()
+ and the LIBXML_TEST_VERSION macro
+
+Fri Jun 23 22:26:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html: various patches and improvements typo fixed by
+ Felix Natter
+ * doc/libxml-doc.el: Emacs module to lookup the libxml documentation
+ from Felix Natter <fnatter@gmx.net>
+
+Sat May 6 10:09:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/upgrade.html: updated with instructions for support of both
+ libxml-1.x and libxml-2.x
+ * doc/gjobread.c : applied Todd Dukes <tdukes@ibmoto.com> patch
+ for 2.x support and also fixed includes
+
+
+Wed May 3 14:21:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * encoding.[ch], xmlIO.[ch], parser.c, configure.in : revamped
+ the encoding support, added iconv support, so now libxml if
+ compiled with iconv automatically support japanese encodings
+ among others. Work based on initial patch from Yuan-Chen Cheng
+ I may have broken binary compat in the encoding handler
+ registration scheme, but that was so utterly broken I don't
+ expect anybody to have used this feature until now.
+ * parserInternals.h: fixup on the CHAR range macro
+ * xml-error.h, parser.c: catch URL/URI errors using the uri.c
+ code.
+ * tree.[ch]: added xmlBufferGrow(), was needed for iconv
+ * uri.c: added xmlParseURI() I can't believe I forgot to
+ implement this one in 2.0 !!!
+ * SAX.c: moved doc->encoding update in the endDocument() call.
+ * TODO: updated.
+
+Mon Apr 24 13:30:13 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h: removed extraneous xmlRemoveProp definition
+ * TODO: added item about --disable-corba configure switch
+ * tree.c parser.c: fixed problems for xmlCopyDoc and postvalidation
+ * nanoftp.c: fixed include problems giving troubles on AIX and
+ slowlaris
+ * xmlIO.[ch] valid.h tree.[ch] xlink.c xmlmemory.c uri.c
+ parser.c nanoftp.c nanohttp.c SAX.c testSAX.c :
+ comment and headers changes to lower gtk-doc number of warnings
+ * doc/html/*: rebuilt docs
+
+Sun Apr 16 11:23:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HACKING: documented the tag for 1.x and instructions
+
+Wed Apr 12 15:47:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlIO.[ch] parser.[ch]: More interfaces for new I/O functions
+ xmlNewIOInputStream, xmlParserInputBufferCreateIO,
+ xmlCreateIOParserCtxt
+ * parser.c parserInternals.h: speedup of IS_CHAR like macros,
+ significant overall improvement
+ * xmllint.c: added I/O test to xmllint
+ * testSAX.c: added a speed test
+ * doc/* : updated/regenerated
+
+Sat Apr 8 14:54:54 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.c uri.h parserInternals.h: cosmetic changes from
+ "Timur I. Bakeyev" <timur@bat.ru>, including making
+ xmlCreateURI() public
+
+Fri Apr 7 18:35:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlIO.[ch] parser.c: cleane up the xmlParserInputBuffer mess
+ and the code at the same time. Added a clean mechanism for
+ overload or added input methods: xmlRegisterInputCallbacks()
+ * tree.c: fixed xmlPrevSibling and xmlNextSibling per
+ Christophe Le Gal (Christophe.Le-Gal@imag.fr) input
+ * TODO: updated
+ * doc/* : updated/regenerated
+ * doc/Makefile.am: tweaks to avoid problem with libxml link in the
+ source dir
+
+Wed Apr 5 21:11:35 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * testURI.c: yet another forgotten commit, I should get some sleep !
+
+Wed Apr 5 20:36:46 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmllint.c: forgot to commit this too ?
+
+Wed Apr 5 16:22:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlversion.h.in : forgot to commit this previously
+
+Mon Apr 3 21:47:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: preparing libxml-2.0.0 version looks Ok so far
+ * README TODO: updated for release
+ * uri.c uri.h: added authority parsing/saving
+ * uri.c testURI.c Makefile.am: moved the testing code to testURI.c
+ * xmlversion.h.in configure.in nanoftp.[ch] nanohttp.[ch] encoding.h
+ debugXML.[ch] xpath.[ch] xmlIO.c tester.c testXPath.c testHTML.c
+ tree.c HTMLtree.c HTMLparser.c tree.c tree.h parser.c
+ Makefile.am : added compile-time customization of libxml
+ --with-ftp --with-http --with-html --with-xpath --with-debug
+ --with-mem-debug
+ * *.[ch] autoconf.sh : moved to an absolute adressing of includes :
+ #include <libxml/xxx.h> I hope it won't break too much stuff
+ and will be manageable in the future...
+ * xmllint.c Makefile.am libxml.spec.in : renamed tester.c to xmllint.c
+ and added xmllint to the installed programs
+ * uri.h: added xmlFreeURI()
+
+Fri Mar 24 14:35:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * uri.c uri.h: finished the escaping handling, the base support
+ and the URI path normalization. Looks good just lacks the
+ authority content parsing code.
+ * Makefile.am: added instructions to generate testURI
+ * TODO: updated
+ * doc/xml.html, doc/smallfootonly.gif doc/w3c.png: updated,
+ added links and icons for W3C and Gnome
+
+Mon Mar 20 14:05:26 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlmemory.[ch] : seems I forgot to actually update the files in
+ the last commit :-)
+ * doc/xml.html doc/html/* : updated and uploaded the docs
+
+Mon Mar 20 12:33:51 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * test/valid/dtds/xhtml*: removed RCS infos (pain with CVS)
+ * TODO: updated
+ * xmlmemory.[ch] : added xmlMemSetup() and xmlMemGet() to override
+ libxml default allocation function with another set (like gmalloc/
+ gfree).
+ * Makefile.am, uri.c, uri.h: added a set of functions to do
+ exact (litteraly copied from the RFC 2396 productions) parsing
+ and handling of URI. Will be needed for XLink, one XML WFC,
+ XML Base and reused in the nano[ftp/http] modules. Still work
+ to be done.
+
+Tue Mar 14 20:52:35 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, libxml.spec.in : libxml2
+ * doc/* : updated the doc page, rebuilt the docs
+
+Tue Mar 14 19:11:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * all: tagged LIB_XML_1_X
+ * *.c *.h : updated from W3C CVS tree
+ * configure.in : 2.0.0-beta
+ * libxml.spec.in : libxml2 package nam
+ * result/* : new version of the tests output
+
+Mon Mar 6 09:34:52 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html, doc/update.html: updated docs, 1.8.7
+
+Sat Mar 4 16:14:42 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* : rebuilt the docs
+ * parser.c: final patch on #6766
+ * valid.c: small patch on validity checks.
+
+Sat Mar 4 12:38:41 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/upgrade.html: instruction on how to upgrade from 1.x to 2.x
+ added
+ * parser.c: adding xmlKeepBlanksDefault() as a way to manage
+ compatibility w.r.t. XML spec and existing code.
+
+Thu Mar 2 04:45:15 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: seems a better solution to <a> </a> exists,
+ will try it for a while
+
+Thu Mar 2 02:26:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: tried to remove the <a> </a> generating <a/>
+ this is hard. Left a flag for that purpose. Fixed bug #6766
+ * configure.in: prepared 1.8.7 not released, due to previous
+ problem
+
+Thu Mar 2 03:03:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html : applied second patch from Paul DuBois
+
+Tue Feb 29 23:55:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html : applied patch from Paul DuBois
+
+Thu Feb 3 16:36:39 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c HTMLparser.c: do a bit of bufferization in push mode.
+
+Thu Feb 3 15:59:37 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c nanohttp.c tree.c HTMLtree.[ch] debugXML.c xpath.c: Fixed
+ compilation warnings on various platforms.
+ * parser.c: Fixed #5281 validity error callbacks are now desactived
+ by default if not validating.
+
+Thu Feb 3 13:46:14 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c, win32config.h.in: patches to compile on WIN32
+
+Wed Feb 2 22:51:16 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c: snprintf/sprintf patch courtesy George Katsirelos
+ <gkatsi@cs.toronto.edu>
+
+Mon Jan 31 18:58:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when
+ processing URLs
+
+Mon Jan 31 14:25:57 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.[ch]: cleanup, bug fixes, integration in rpmfind, added
+ xmlNanoFTPUpdateURL for persistent control connections.
+ * configure.in: 1.8.6
+
+Thu Jan 27 17:52:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.[ch], nanoftp.[ch]: cleanup, added proxy support
+ * tree.[ch] : added xmlSaveNoEmptyTags
+
+2000-01-29 James Henstridge <james@daa.com.au>
+
+ * nanoftp.c: include <netinet/in.h> for IPPROTO_TCP.
+
+ * Makefile.am: added nanoftp.[ch] to the build.
+
+Wed Jan 26 18:14:55 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.[ch]: cleanup, comments, API
+ * debugXML.c : fixed a bug in the cat command
+ * doc/*: regenerated the docs
+
+Wed Jan 26 16:52:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanoftp.[ch] parser.c xmlIO.[ch]: added a Nano FTP implementation
+ * debugXML.c : fixed a bug in the cat command
+ * valid.c: fixing some small probs
+ * libxml.spec.in: get rid of the SNAP suffix
+ * doc/xml.html: updated the status
+
+Mon Jan 24 14:31:09 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml-config.in: xml-config --version to just return the
+ version number
+ * xpath.c: some cleanup w.r.t. axis when the current node is
+ an attribute.
+ * TODO: updated
+
+Tue Jan 18 18:46:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: prepared for libxml-1.8.5
+ * doc/* recompiled the documentation
+
+2000-01-17 Jody Goldberg <jgoldberg@home.com>
+
+ * configure.in : WARNING autoconf subtlety alert :
+ Use AC_CHECK_HEADERS rather than AC_CHECK_HEADER
+ when looking for zlib.h so that HAVE_ZLIB_H is defined.
+ * config.h.in : Have a #undef for HAVE_ZLIB_H so that it will
+ get defined by AC_CHECK_HEADERS.
+
+Mon Jan 17 17:04:12 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: fixed a hideous bug in xmlGetProp() thanks to
+ Rune.Djurhuus@fast.no
+
+Sat Jan 15 15:09:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * TODO: updated
+ * tree.c, parser.c: made sure that only memory alloc problems
+ and internal parser errors are allowed to write to stdout or
+ stderr.
+
+Thu Jan 13 11:49:11 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c : restored xmlNewGlobalNs since this seems used by
+ a lot of existing code :-(, fixed a bug in xmlNewNs
+ * nanohttp.c: fixed a problem with INCLUDE_WINSOCK
+ * HTMLparser.c, parser.c, entities.c, valid.c : removed all calls
+ to exit() from the library code.
+ * xpath.c, parser.c: removed bugs or unused code detected by
+ Windows compilers
+ * parser.c: started adding interfaces for parsing well balanced
+ XML fragments
+ * configure.in: releasing 1.8.4
+ * doc/* : rebuilt the docs
+
+Sun Jan 9 23:03:20 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] : added xmlNewDocFragment() for DOM
+ * testHTML.c: uninitialized variable.
+
+Wed Jan 5 17:29:17 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* : rebuild the docs
+
+Wed Jan 5 17:08:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * acconfig.h: readline and history patch
+ * valid.[ch]: added xmlRemoveID() and xmlRemoveRef()
+ * tree.c: added check and handling when possibly removing an ID
+ * tree.c, HTMLparser.h, HTMLtree.h: fixed entities parsing
+ and saving.
+ * test/HTML/entities.html result/HTML/entities.html* : test for
+ various entities reference cases
+ * result/HTML/* : as a result output of some testcase have
+ changed
+ * HTMLparser.c, parser.c: fixed a bug in the push mode triggered
+ by previous example. added xmlParseTryOrFinish().
+ * xpath.h tree.h parser.h valid.h xmlIO.h xlink.h encoding.h
+ entities.h debugXML.h HTMLparser.h: changed the way struct are
+ declared to allow gtk-doc to expose those
+ * parser.c: closed bug #4960
+ * Makefile.am configure.in: Applied patch from
+ Albert Chin-A-Young <china@thewrittenword.com> for better zlib
+ and math/socket libs detection
+
+Mon Jan 3 18:29:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, Makefile.am: link tester against readline
+ * doc/xml.html doc/*/*: updated and rebuilt the documentation pages
+
+Mon Jan 3 11:58:05 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: added xmlRemoveProp
+ * win32config.h.in nanohttp.c: avoid including the Windows
+ socket stuff in every C files
+ * parser.c: removed an indetermination xmLDecl/PI(xml...) in
+ the XmL parser(s)
+ * test/ns4 result/ns4 etc...: added test case for previous prob
+ * tree.c: xmlNewNs wasn't checking for double definition
+ * Makefile.in: fixed a problem with dist-hook duplicates
+ * parser.[hc], xmlIO.c: fixed the loading of external entities
+ APIs, now xmlLoadExternalEntity() is used everywhere and
+ setting up an app specific front-end using the
+ * SAX.c parser.c: some fixes, now the xhtml spec validates
+ with the xhtml DTD.
+ * error.c: fixed crashes in case of no input stream
+ * test/valid/[dtds/]/xhtml* : added the xhtml spec and dtds
+ to the validation tests and results
+
+Wed Dec 29 15:29:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch] testHTML.c: added push mode for the HTML parser
+ too htmlCreatePushParserCtxt() and htmlParseChunk()
+ * parser.c: a bit of cleanup.
+ * SAX.c, HTMLparser.c: some attributes may not have values (contrary
+ to XML) removed the last mem leak known
+ * HTMLtree.c: output message cleanup
+ * xmlmemory.c: display content info about memory blocks
+ * result/HTML/wired.* : missing att value warning change
+
+Tue Dec 28 17:42:41 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/* : rebuilt the documentation
+
+Tue Dec 28 18:44:22 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] parserInternals.h: Push parser for XML,
+ seems to work fine now
+ * tester.c debugXML.[ch]: Added an XML shell debug facility and
+ --push for push testing
+ * xpath.[ch] : cleaned up for Shell usage, added missing APIs
+ * testSAX.c: added --push
+ * HTMLtree.[ch] tree.[ch]: new functions for dumping parts of the
+ subtree
+ * xmlIO.[ch] : enriched API + fixes for push mode
+ * entities.[ch]: added the entity content length to the struct.
+ * xmlmemory.[ch]: new API to show the last entries for the shell
+ * valid.c: added required attribute testing
+ * SAX.c: the cdata callback now merge contiguous fragments
+ * HTMLparser.c: cleanup of some macros
+
+Wed Dec 22 12:20:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: fix for PIs name starting with xml
+ * tree.c: fixed a potential problem with || and && ops
+ * *.c, configure.in win32config.h.in : generate win32config.h for
+ those on the Other Side !
+
+Tue Dec 21 17:22:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: fixed a stupid = vs. == bug :-(
+ * doc/gnome-xml.sgml: s/glade/xml/
+
+Tue Dec 21 14:29:34 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, doc/xml.html : bug fix release 1.8.2
+ * debugXML.h nanohttp.h xml-error.h xmlmemory.h xpath.h :
+ Hopefully the end of that silly C++ include problem
+ * tree.[ch]: Added a few functions: xmlReplaceNode, xmlAddPrevSibling,
+ xmlAddNextSibling, xmlNodeSetName and xmlDocSetRootElement
+ * HTMLparser.c HTMLparser.h HTMLtree.c: When saving HTML try to avoid
+ troubles with autoclosed elements when the stree shape doesn't
+ follow the DtD specs. Added htmlIsAutoClosed() and
+ htmlAutoCloseTag()
+ * result/HTML/*.htm*: Updated the HTML examples regression tests output
+ * SAX.c tree.c: fixed bug on defaulting namespaces on attributes
+ * debugXML.c: fixed a bug on printing default namespaces.
+ * HTMLtree.c: fixed a problem when outputing XML parsed docs as HTML
+
+Mon Dec 20 16:20:55 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * result/HTML/*.htm[l] : updated the HTML regression tests according
+ to the new output
+ * xpath.h xml-error.h valid.h tree.h parser.h entities.h SAX.h
+ HTMLtree.h tree.c entities.c: headers tweakings to avoid a nasty
+ problem due to intermix of extern "C" { ... } declarations for C++
+ and recursive includes in the headers
+
+1999-12-20 Chris Lahey <clahey@umich.edu>
+
+ * HTMLtree.c: Made it so that html nodes with a single child do
+ not insert a carriage return before or after the child node.
+
+Sat Dec 18 16:07:03 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, doc/xml.html : bug fix release 1.8.1
+ * parser.c: fixed bug #4344
+ * xpath.h xml-error.h xlink.h nanohttp.h debugXML.h SAX.h HTMLparser.h
+ added the glue to avoid C++ problems
+ * doc/* : regenerated the documentation
+
+Thu Dec 16 16:19:29 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: fixed a bug introduced in 1.8.0 and breaking default
+ namespace recognition, and Dia as a resul :-(
+ * encoding.c: closed bug #3950
+
+Wed Dec 15 19:22:23 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * valid.c: debugging a posteriori validation, except URI expansion
+ stuff this should be fixed now
+ * parserInternals.h: fixed a bug in IS_BASECHAR reported by
+ Carl Nygard <cnygard@bellatlantic.net>
+ * tester.c: added --postvalid, cleaning of the code
+ * tree.[ch]: added xmlDocGetRootElement()
+
+Tue Dec 14 20:30:34 PST 1999 Ramiro Estrugo <ramiro@eazel.com>
+
+ * SAX.h, tree.h : changed 'namespace' to 'nameSpace' to workaround
+ c++ losage.
+
+Sun Dec 12 13:08:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, doc/xml.html : bumped to 1.8.0
+ * xlink.[ch], Makefile.am : added framework for link detection
+ * parser.h: added nbChars to parser context, needed for cleanup.
+ * xmlmemory.c: removed a nasty bug when out of mem
+ * valid.[ch]: adding namespace support for attribute decl
+ * tester.c: added --debugent option
+ * debugXML.[ch]: added xmlDebugDumpEntities()
+ * parser.c: cleanup, avoiding use of CUR_PTR like plague, using
+ buffers instead, this was really needed, validation was breaking
+ in strange ways due to that. Added xmlParseStringPEReference()
+ and other parsing from strings functions. Entities processing
+ modified again, but PERef are still not handled correcly but
+ unless you're Eve Maller you won't notice :-)
+ * HTMLparser.c: large changes toward reliability, and switched to
+ lowercase internal tags, XHTML is lowercase, so it will help
+ that output is closer to next version.
+ * doc/* : regenerated the documentation, it is now hosted at
+ http://xmlsoft.org/ (same bits I just bought the domain :-)
+
+
+Fri Dec 3 13:46:32 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.h, SAX.c, makefile.am: added SAX.h mostly useful for the
+ doc generation
+ * parser.c: fixed bugs #3908 and #3937 and a memory leak
+ in the SAX API
+ * doc/*: rebuilt the doc making sure everything appears in the
+ HTML files
+
+Wed Dec 1 10:27:47 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] HTMLtree.c, debugXML.c, configure.in, xml-config.in:
+ added the patch from Carl Nygard <cnygard@bellatlantic.net>
+ which allow impressive speed improvement on dataset with
+ large text pieces, but at the cost of broken binary
+ compatibility and slightly bigger memory usage.
+ Configure with --with-buffers to activate them, they
+ are protected with XML_USE_BUFFER_CONTENT define.
+ * entities.[ch], parser.c: added xmlCleanupPredefinedEntities(),
+ goal is 0 memory left allocated once parser is no more used
+ * testDAV.c, testHTML.c, testSAX.c, testXPath.c: make sure we
+ call xmlCleanupParser() and xmlMemoryDump()
+
+Wed Nov 24 19:00:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch] xmlIO.[ch] parser.c valid.c: code cleanup with -pedantic
+ * parser.[ch] encoding.[ch]: added memory cleanup routines
+ * parser.c: closing bug #3788
+ * doc/*: rebuilt the doc
+
+Tue Nov 23 11:23:55 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: closing bug 3748, added xmlNewDocRawNode(),
+ xmlNewTextChild() and xmlSetCompressMode() behaviour.
+ * tester.c: added --compress option
+ * doc/*: rebuilt the documentation
+
+Fri Nov 19 18:41:28 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: bugfixing, the damn thing MUST not crash even
+ if given /proc/kcore as input !
+ * doc/xml.html doc/*: updated and rebuilt the documentation
+
+Thu Nov 18 14:57:18 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: Fixed some wrongly space collapsing code due to
+ a misreading of the spec.
+ * result/*: fixed the output accordingly
+
+Wed Nov 17 18:28:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * encoding.c: bug fix and typos
+ * xmlIO.[ch] parser.c: first bits toward real progressive parsing
+ * parser.c: added attribute normalization closing bug #3597
+ * test/att* result/att* SAXresult/att*: testcase for attribute
+ normalization
+
+Mon Nov 15 18:50:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: closing bug #3163 by adding extra flags for the
+ cc compiler on HP-UX
+
+Fri Nov 12 17:41:20 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * valid.[ch] : removed a typo and an enumerated type bug in the
+ xmlAddElementDecl() function
+ * tree.c : I changed xmlSetProp() and xmlNewProp() to do the
+ call to xmlEncodeEntitiesReentrant() so that the functions
+ New, Set and Get are at the same level.
+ * parser.c HTMLparser.c: extra memory allocation bug for
+ attributes detected by someone using libxml in embedded systems :-)
+
+Thu Oct 28 17:49:26 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlmemory.h: turned off mem debug :-\
+
+Mon Oct 25 12:13:25 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: closed bug #2784 a one line fix, but worth pushing
+ a new release out
+ * HTMLparser.c: fixed auto-close bugs on list items, zeroing
+ some structures, comments before and after the
+ main element, and other nastyness
+ * HTMLtree.c tree.c: accomodate the extended HTML supported
+ * configure.in: pushing 1.7.4
+ * test/ent8 and related outputs : added a new test for bug #2784
+ * test/HTML/wired.html and related output: a nasty HTML example
+ * Makefile.am: improved the test scripts
+ * docs/* : reran the documentation extractor, updated xml.html
+
+Thu Oct 14 10:29:56 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c, HTMLtree.c, tree.h: completely revamped the
+ HTMLparser and debugged the HTML related code. HTML documents
+ now have their own type
+ * entities.c: do not dump &apos; for HTML output
+ * xmlmemory.c: improvement, breakpoint mechanism
+ * testHTML.c: added --sax --repeat ...
+ * Makefile.am: improved the HTML tests
+ * valid.[ch]: added xmlValidGetValidElements and
+ xmlValidGetPotentialChildren
+ * tester.c: added --insert to test the 2 new functions
+ * test//* result//* SAXresult//* : regression test cleanup
+ and extension.
+ * doc/html : added doc for new modules gnome-xml-xmlmemory.html and
+ gnome-xml-nanohttp.html
+
+Mon Oct 11 14:31:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: fixed problems with some autoclose tags
+ * tree.c: fixed XML output problems.
+ * result/* SAXresult/*: update of the tests output
+
+Sat Oct 9 11:02:57 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am: Arturo patch for xmlConf.sh version info
+ * parser.c: Tim Josling patch for single quoted items
+ * tester.c: Tim Josling patch for tester options usage
+ * tree.h: indent cleanup
+
+Fri Oct 8 16:35:37 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c parser.h : Fixed problems with HTML parsing
+ reported by Kristian Hogsberg Kristensen <hogsberg@daimi.au.dk>
+
+Fri Oct 8 11:37:11 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c : Raph patch for initialization of CORBA fields
+ * parser.c, xpath.c, ...: modification of doc comments
+ * xpath.c : allow spaces in xpath expressions
+
+Mon Sep 27 10:16:43 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlmemory.h: turning off memory debug :-(
+
+Sun Sep 26 13:16:54 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] : added xmlSAXUserParseFile() and xmlSAXUserParseMemory()
+ better SAX interfaces.
+ * testSAX.c: uses the new SAX routine, avoid fetching any remote
+ entity.
+ * configure.in: 1.7.2
+
+Fri Sep 24 16:01:01 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.spec.in: fixed the URL
+ * doc/xml.html: improved the documentation front-end
+
+Fri Sep 24 01:06:36 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * nanohttp.c: conditionned references to snprintf with HAVE_SNPRINTF
+
+Fri Sep 24 00:15:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * libxml.spec.in: fixed the alpha compile problem
+ * parser.[ch]: changed errno to errNo in the parser context :-(
+ * *.[ch]: changed CHAR to xmlChar to avoid problem on WIN32
+ * doc/xml.html: changed CHAR to xmlChar
+ * doc/html/*: recompiled the documentation
+ * configure.in: 1.7.1
+
+Wed Sep 22 11:40:31 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.h: modified the parser context struct to regain 1.4.0
+ binary compatibility
+ * parser.c, xml-error.h: added errno ot teh context and defined
+ a set of errors values with update of errno
+ * nanohttp.[ch]: minimalist HTTP front-end for fetching remote
+ DTDs and entities
+ * *.h, *.c: complete cleanup of the use of config.h and include
+ protection depending on the current setup.
+ * overalll debugging, maintenance and bug-fixing on all modules
+ * updated the documentation
+ * ready for 1.7.0
+
+Wed Sep 8 22:46:14 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c : cleanup
+ * SAX.c valid.c valid.h: added ID/IDREF checking
+ * tree.c tree.h: extended doc structure for refs
+ * configure.in: 1.6.2
+ * parser.c: patched bug in SAX user arg call
+ * parserInternals.h: patched missing close in C++ wrapping
+ * testXPath.c xpath.c xpath.h: prepared for extensibility,
+ especially upcoming XPointer implementation.
+ * doc/xml.html: augmented, typo
+
+Sat Sep 4 22:48:05 CEST 1999 Timur Bakeyev <mc@bat.ru>
+
+ * doc/Makefile.am: replaced "install -d " with "mkinstalldirs" -
+ not all invocations of install understand -d.
+
+Sat Sep 4 22:20:07 CEST 1999 Timur Bakeyev <mc@bat.ru>
+
+ * Makefile.am: prepend all the test* calls with $(top_builddir) -
+ to make 'check' works, when builddir != srcdir.
+
+Sat Sep 4 20:25:46 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * doc/xml.html : updated the documentation
+
+Fri Sep 3 00:01:08 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xmlmemory.[ch] Makefile.am :added a memory wrapper to chase
+ not deallocated memory blocks
+ * *.c : replaces all calls to malloc() free() and realloc() to
+ the wrapper functions/macros
+ * tree.c : removed memory leaks dues to calling xmlFreeNode()
+ instead of xmlFreeNodeList()
+
+Wed Sep 1 14:15:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: corrected a stupid bug leading to core dump at
+ tree deallocation. Removed warnings indicated by
+ Stephane.Conversy@lri.fr
+ * entities.c: Fixes Yet Another Stupid Bug, entities were not
+ looked for in the external subset
+
+Mon Aug 30 13:22:26 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c valid.[ch] xpath.c: patched compilation warnings reported
+ on SGI by Stephane.Conversy@lri.fr
+
+Sun Aug 29 22:27:29 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * all .h : changed the prototype declaration indent as in gtk
+ * most .c : working on reducing the TODOs in the code
+ * most .c : cleanup though -pedantic and Insure++
+ * improvements on validation ID checkings.
+ * tree.[ch] SAX.c: added support for namespace on attributes #2022
+ * xml-config.in: closed #1810
+
+Mon Aug 16 03:27:38 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h, valid.c, valid.h: more work on validity, IDs
+ * xpath.c: added/fixed comparidon and equlity, added a new isinf
+ definition for AIX
+
+Sun Aug 15 21:15:17 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am libxml.spec.in: corrected missing xmlConf.sh in
+ the distribution due to a cut'n paste error at last commit
+
+Tue Aug 10 20:28:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: upgraded to version 1.4.0
+ * valid.[ch], SAX.c, parser.[ch] parserInternals.h ...
+ Big update, added a large part of the validation process,
+ it should be usable, but some parts are missing
+ * xpath.c: improved the implementation w.r.t. root.
+ * Makefile.am: added more tests
+ * test and result trees: added a lot of tests
+ * libxml.spec.in: export libxml.so.0 and libxml.so.1
+
+Tue Aug 10 11:33:41 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Added an HACKING file
+
+Tue Jul 27 21:43:00 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xpath.[ch] : improvements and debug of the XPath implementation
+ * parser.c, HTMLparser.c : modified the parsers to be progressive
+ * tree.[ch] : extended the Buffer promitives
+ * xmlIO.[ch] : added basic I/O routines providing progressive
+ parsing and ready for I18N conversion plugins
+ * SAXresult/* : the SAX callback sequence maybe slightly different
+ now
+ * test*.c : improved/updated the tests programs
+ * doc/* : recompiled the docs.
+
+1999-07-26 Michael Meeks <michael@edenproject.org>
+
+ * tree.h: Add const to 'content' in xmlNewDocNode, xmlNewChild
+
+ * tree.c: Ditto.
+
+Thu Jul 15 16:17:16 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: upgraded to version 1.4.0
+ * xpath.c, xpath.h, testXPath.c, makefile.am: added code for the XPath
+ draft from W3C. Will be used by XPointer, Xlink, XSL, and possibly
+ XML query language, see http://www.w3.org/TR/xpath for more details.
+ * parser.c, parser.h: added CHAR* related string functions for XPath
+ * HTMLparser.[ch], HTMLtree.c: a bit of cleanup on entities.
+ * doc/gnome-xml.sgml, doc/html/* : added XPath and HTML documentation,
+ rebuild the docs.
+ * Makefile.am, test/XPath/*, result/XPath/*: added an XPathtests target
+ and regression testing capabilities for XPath.
+
+Mon Jul 12 12:36:39 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, HTMLparser.c: applied patch from John Ellson <ellson@lucent.com>
+ closing bug #1646
+
+Mon Jul 12 11:04:44 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am, example/Makefile.am: closed bug #1683
+
+Sun Jul 11 18:16:34 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * example/Makefile.am, configure.in: added the makefile for the
+ gjobread example
+
+Sat Jul 10 14:19:11 CEST 1999 Tomasz K³oczko <kloczek@pld.org.pl>
+
+ * doc/Makefile.am:
+ - fix which allow "make install DESTDIR=</install/prefix>".
+
+Fri Jul 9 12:10:24 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c parser.c: applied patch from John Ellson <ellson@lucent.com>
+ which fixed a problem on the file reading-code.
+
+Wed Jul 7 09:28:43 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.[ch], HTMLtree.[ch]: more work for HTML parsing and
+ output.
+ * Makefile.am, test/HTML/*, result/HTML/*: added HTMLtests targetestHTMLt
+
+Wed Jul 7 00:25:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.h : Oops removed the binary compatibility problem
+ * HTMLparser.[ch], HTMLtree.h : More work on the HTML parse/dump
+ * parser.c, HTMLparser.c: applied patches for reading from stdin
+
+Mon Jul 5 18:45:31 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, entities.c, valid.c: cleanup bug #1591
+ * configure.in: cleanup bug #1592
+ * HTMLparser.[ch], testHTML.c: started adding an HTML parser using
+ the same tree back-end. Hence gdome will be available for it.
+ * doc/Makefile.am: close bug #617
+
+Sat Jun 26 23:36:38 EDT 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: alloctate a per parser context SAX interface block
+
+Tue Jun 22 23:46:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * released 1.3.0 with xmlEncodeEntities restoring old behaviour
+ and xmlEncodeEntitiesReentrant with the correct one :-\
+
+Mon Jun 21 14:07:53 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * commit of my internal XML base changes, quite a lot of
+ changes, cleanups, better entities support, framework for
+ new I/O and charset detection and handling
+ * Fixed the configure/Makefile stuff to generate shared libs
+ with the proper version info, so we jumped on rev from
+ 0.0.0 to 1.2.0 ! The binary interfaces have been broken,
+ xmlEncodeEntities() result need to be freed now, and a string
+ xmlParserVersion provide the current library version.
+
+Tue Jun 15 14:24:19 1999 Raph Levien <raph@acm.org>
+
+ * parser.c: fixed a buffer overrun for when you have a very long
+ attribute with no entities in it.
+
+Mon Jun 14 00:17:50 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added example directory
+ * added example/gjobs.xml gjobread.c, still need a Makefile.in
+
+Wed Jun 2 19:40:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Release of libxml-1.1, nearly everything has been touched for
+ this.
+ * Added more regression tests
+ * Updated the documentation
+
+Sat May 29 13:34:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: unified the XML_NO_CORBA defines.
+ * parser.c encoding.[ch]: started plugging in char encoding detection
+
+Fri May 28 22:58:42 EDT 1999 Manish Vachharajani <mvachhar@vger.rutgers.edu>
+
+ * tree.c: (xmlSaveFile) - removed double call of xmlContentDump.
+ Also freed allocated buffer.
+
+Wed Apr 21 22:07:35 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+ * parser.[ch] tree.[ch] entities.[ch] valid.[ch] : removed the main
+ reentrancy problem at printing. One is left in entities.c, to
+ remove ASAP
+ * testSAX.c : added a test example showing the use of the SAX
+ interface if one doesn't want to build the DOM tree.
+ * html/gnome-xml-*.html html/index.sgml: regenerated the documentation
+
+Mon Apr 5 14:14:40 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] tree.[ch] SAX.c, parserInternals.h valid.[ch]:
+ large revamping of the parser to use SAX callbacks
+ http://www.megginson.com/SAX/ (or at least a C like interface
+ a la Expat). It's now possible to set up your own callbacks
+ and the parser will not build a DOM tree.
+ * test/* result/*: updated the test suite, I finally removed
+ the old Namespace draft support (PI based).
+
+Fri Apr 2 17:57:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am: added test result to EXTRA_DIST for make tests
+
+Wed Mar 24 21:37:02 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, parserInternals.h: moved the chars macro definitions
+ to parserInternals.h
+ * parser.c, error.c: applied patches from "Knut Åkesson"
+ <ka@s2.chalmers.se> for clean compilation under MSVC 6 :-o
+
+Tue Mar 23 11:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml-config.in : applied patch to make --version work
+
+1999-03-05 Raja R Harinath <harinath@cs.umn.edu>
+
+ * Makefile.am (check-local): Alias for `tests' target. This will
+ cause `make check' to do the right thing.
+ (tests): Don't run tests in srcdir. Also, replaced calls to
+ basename with a `sed' "equivalent".
+
+Fri Mar 5 07:23:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Renamed error.h to xml-error.h, corrected Makefile.am to list
+ it in the header and not the sources, updated the doc.
+ Thanks to Tim Mooney <mooney@dogbert.cc.ndsu.nodak.edu> for
+ pointing this out.
+
+Mon Mar 1 13:27:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, parser.h, parserInternals.h: memory leak hunting,
+ exported the inputStream routines.
+ * doc/html/* : updated accordingly
+
+Sun Feb 28 22:51:33 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, parser.h, parserInternals.h: added a few extra
+ internal calls to allocate and free parser contexts ...
+ * doc/html/* : updated accordingly
+
+Thu Feb 25 11:52:24 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in, Makefile.am, doc/makefile.am : General changes for
+ 1.0.0 release and including the generated HTML documentation.
+
+Thu Feb 25 09:44:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * makefile.am : added parserInternals.h, oops.
+
+Mon Feb 22 11:24:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parserInternals.h: added this header giving access to the parser
+ internal functions.
+ * doc/Makefile.am : added a rebuild target which rebuilds the full
+ set of documentations
+ * parser.[ch] tree.[ch] valid.[ch]: serious updates w.r.t. parsing
+ the internal subset.
+ * *.c *.h: modifications needed to generate the documentation using
+ gtk-doc, cleanup of functions blocks, reorganisation of struct
+ declarations.
+
+Tue Feb 16 17:27:29 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * Makefile.am, spec, doc/Makefile.am : upgrading to 0.99.8, fixing
+ the tar and spec file to include the beginning of the doc.
+
+1999-02-13 Nuno Ferreira <nmrf@rnl.ist.utl.pt>
+
+ * doc/.cvsignore: Added this file.
+
+Mon Feb 8 19:27:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: fixed xmlGetProp to return "" when the attribute
+ exists, even if the node-list is NULL.
+
+Mon Feb 8 16:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: patched an error outputting empty attribute values.
+ * Makefile.am and doc/makefile.am: have been updated during the
+ week-end. Sorry for an empty CVS log, I got a shell problem.
+
+Mon Feb 1 12:10:13 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h: cleaned up using enums instead of defines
+ * parser.c, valid.[ch]: more work on parsing/output of element
+ declarations
+
+Sun Jan 31 22:06:48 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * valid.[ch], tree.c, parser.c : more work toward full parsing
+ of XML DTDs.
+ * README: added informations about mailing-list and on-line
+ documentation
+
+1999-01-27 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (XML_INCLUDEDIR): Use -I not -L for includes.
+
+Sun Jan 17 20:06:36 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, tree.[ch] : more work toward conformance testing,
+ added a last element to accelerate parsing of very flat structures
+ started working on internal subset Element content declaration.
+ * valid.[ch] : first cut at adding code toward validation.
+ * previous changes had also small impact on most files, especially
+ the conformance testing using James Clark test suite.
+
+Sun Jan 17 14:45:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * test/* : updated the examples, most of them were not well
+ formed (humm), and added rdf2.
+ * result/* : resulting changes in the output.
+
+Sun Dec 6 13:06:58 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: changed the behaviour of xmlGetProp on NULL values.
+
+Sat Dec 5 12:25:09 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: patched a bug in the generation of empty attributes
+
+Fri Nov 27 01:36:54 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.[ch], tree.[ch], tester.c: added copy interfaces
+ for node/trees/documents/... Biggest problem is namespace
+ support when copying subtrees.
+
+Sun Nov 15 19:59:47 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, entities.c: improve entities and char ref encoding,
+ and cleanups of error messages.
+
+Fri Nov 13 13:03:10 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c, entities.c: simple bug hunting done during rpm2html and
+ rpmfind integration.
+
+Sun Nov 8 13:11:07 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch]: Added interfaces allowing to specify a SAX
+ handler before parsing.
+
+Sun Nov 8 09:39:17 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: redirrect all errors reporting through the SAX
+ error function
+
+Wed Nov 4 14:21:54 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.c: rather use HAVE_SNPRINTF and not depend on glib
+ * libtool, tlmain ...: update of the libtool files
+
+1998-11-04 Miguel de Icaza <miguel@nuclecu.unam.mx>
+
+ * entities.c: Use g_snprintf insteda of snprintf.
+
+Sun Nov 1 14:31:06 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * entities.c, parser.c: debug and cleanup of CharRef handling/saving.
+ added ent5 test for this purpose.
+ * parser.c, parser.h: formatting, comments and UTF-8 planning.
+
+Fri Oct 30 01:36:52 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: fixed? a strange error due to compression on a GWP
+ document.
+
+Thu Oct 29 00:48:45 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: bug fixing
+ * entities.[ch]: defined a specific type for predefined entities
+ * doc/xml.html: more documentation on the library, how to use it,
+ overview of the interfaces.
+
+Wed Oct 28 17:56:35 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.[ch]: more cleanup on the API, made the tree mor conformant.
+
+Tue Oct 27 17:54:00 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c: corrected a small bug
+ * doc/xml.html: continuing writing documentation.
+
+Tue Oct 27 17:54:00 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * debugXML.h debugXML.c: added debugging utilities.
+ * tester.c: added --debug switch.
+ * tree.c: patched an incorrect node->type assignment.
+ * parser.c: formatting, ensure that node->doc != NULL in attributes
+
+Tue Oct 27 01:15:39 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.[ch] SAX.c tree.[ch]: large amount of changes to improve
+ entity support and provide an internal representation close to
+ DOM one (entity ref nodes, and attribute value as tree). I tried
+ to preserve the interface but this will surely break some apps
+ (I have to change rpm2html/rpmfind for example). I had to change
+ two interfaces, and the generated tree is somewhat different.
+ * doc/* : started documenting the XML library, the tree and
+ DOM/Corba. This is a first step.
+
+Sat Oct 24 14:23:51 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: Set up the fonctions comment block, boring but useful.
+ * parser.h, SAX.c, parser.c: now attributes are processed through
+ the SAX interface. The problem is that my SAX interface diverged
+ quite a bit from the original one, well this is not an official
+ spec, and translating it from Java to C is hairy anyway...
+
+Tue Oct 20 02:11:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * SAX.c, entities.c, tree.c, encoding.c, error.c: Set up the
+ fonctions comment block, boring but useful.
+
+Sun Oct 18 20:40:58 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * encoding.[ch], Makefile.am: Added the UTF-8, UTF-16 and ISO Latin 1
+ conversion routines. However they are not yet used to convert the
+ inputs. The core will run with UTF-8.
+
+Sun Oct 18 15:08:19 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c : make sure that the type id is properly set-up when
+ a new object is allocated, needed for DOM.
+
+Sat Oct 17 02:43:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h, tree.c: Ok, the main objects in the tree will be native
+ corba objects, it costs 8 bytes per Node, Attribute and Document
+ but it simplifies the Corba integration a lot (no extra interface
+ objects to allocate/free).
+
+Tue Oct 13 21:46:57 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.h, tree.c, parser.c: added prev and doc pointers to Node,
+ and changed NODEs contants for conformity with DOM Level 1
+
+Wed Oct 7 23:42:46 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added hooks to keep track of servants when creating objects
+ xmlDoc and xmlNode (for Corba export).
+
+Sun Oct 4 03:18:09 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * added xml-config script.
+
+Thu Oct 1 16:22:37 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * autogen.sh : applied patch from Frederic Devernay <devernay@istar.fr>
+ to autoupdate libtool and automake conf files.
+
+1998-09-30 Miguel de Icaza <miguel@nuclecu.unam.mx>
+
+ * Makefile.am: Use '?' to separate the sed
+ commands as ',' is used when people pass -Wl,something.
+
+
+Thu Sep 24 15:13:29 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * tree.c, tree.h: added a per-document compression interface.
+
+Tue Sep 22 20:47:38 EDT 1998
+
+ * tree.c, tree.h: added saving with compression and added interfaces
+ to control the compression level (xmlGetCompressMode,
+ xmlSetCompressMode) and a new save to filename function (xmlSaveFile).
+
+Mon Sep 21 20:11:13 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * parser.c: corrected a loop for files of size 0
+
+1998-08-20 Raja R Harinath <harinath@cs.umn.edu>
+
+ * error.h: New file. Contains prototyes from `error.c'.
+
+Thu Aug 13 19:02:34 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (xmlincdir): New macro.
+ (xmlinc_HEADERS): Renamed from include_HEADERS.
+
+Thu Aug 13 00:40:14 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * applied small patch on numeric entities from
+ Christopher Blizzard <blizzard@appliedtheory.com>
+
+Wed Aug 12 23:12:58 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * New release 0.2, removed the old xml_* files so that it's
+ coherent with the other CVS base (W3C), far better conformance
+ to standard, new namespaces, decent entities support, beginning
+ of a SAX-like interface. Nearly nothing left intact, even the
+ test examples ...
+
+1998-07-30 Christopher Blizzard <blizzard@appliedtheory.com>
+
+ * .cvsignore: Add .deps dir
+
+Sun Jul 26 17:29:52 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml_tree: changed the memory allocation scheme for name in xmlNewNode
+
+Sun Jul 26 00:17:51 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * configure.in: added test for CPP
+ * AUTHORS, Changelog: the original ones didn't get commited but the
+ glib ones instead, fixed.
+ * Makefile.am: corrected an error in library naming
+
+Fri Jul 24 16:47:14 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * integrated code developped at W3C
+ * changed the original Copyright
+ * migrated to automake
+ * prefixed the filenames by xml_ to avoid filename clashes
+
diff --git a/Copyright b/Copyright
new file mode 100644
index 0000000..417e955
--- /dev/null
+++ b/Copyright
@@ -0,0 +1,27 @@
+Except where otherwise noted in the source code (e.g. the files hash.c,
+list.c and the trio files, which are covered by a similar licence but
+with different Copyright notices) all the files are:
+
+ Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is fur-
+nished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
+NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
+NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Daniel Veillard shall not
+be used in advertising or otherwise to promote the sale, use or other deal-
+ings in this Software without prior written authorization from him.
+
diff --git a/DOCBparser.c b/DOCBparser.c
new file mode 100644
index 0000000..ccb577f
--- /dev/null
+++ b/DOCBparser.c
@@ -0,0 +1,303 @@
+/*
+ * DOCBparser.c : an attempt to parse SGML Docbook documents
+ *
+ * This is deprecated !!!
+ * Code removed with release 2.6.0 it was broken.
+ * The doc are expect to be migrated to XML DocBook
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+#ifdef LIBXML_DOCB_ENABLED
+
+#include <libxml/xmlerror.h>
+#include <libxml/DOCBparser.h>
+
+/**
+ * docbEncodeEntities:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ * @quoteChar: the quote character to escape (' or ") or zero.
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an ASCII
+ * plus SGML entities block of chars out.
+ *
+ * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
+ * The value of @inlen after return is the number of octets consumed
+ * as the return value is positive, else unpredictable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+int
+docbEncodeEntities(unsigned char *out ATTRIBUTE_UNUSED,
+ int *outlen ATTRIBUTE_UNUSED,
+ const unsigned char *in ATTRIBUTE_UNUSED,
+ int *inlen ATTRIBUTE_UNUSED,
+ int quoteChar ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbEncodeEntities() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return(-1);
+}
+
+/**
+ * docbParseDocument:
+ * @ctxt: an SGML parser context
+ *
+ * parse an SGML document (and build a tree if using the standard SAX
+ * interface).
+ *
+ * Returns 0, -1 in case of error. the parser context is augmented
+ * as a result of the parsing.
+ */
+
+int
+docbParseDocument(docbParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbParseDocument() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return (xmlParseDocument(ctxt));
+}
+
+/**
+ * docbFreeParserCtxt:
+ * @ctxt: an SGML parser context
+ *
+ * Free all the memory used by a parser context. However the parsed
+ * document in ctxt->myDoc is not freed.
+ */
+
+void
+docbFreeParserCtxt(docbParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbFreeParserCtxt() deprecated function reached\n");
+ deprecated = 1;
+ }
+ xmlFreeParserCtxt(ctxt);
+}
+
+/**
+ * docbParseChunk:
+ * @ctxt: an XML parser context
+ * @chunk: an char array
+ * @size: the size in byte of the chunk
+ * @terminate: last chunk indicator
+ *
+ * Parse a Chunk of memory
+ *
+ * Returns zero if no error, the xmlParserErrors otherwise.
+ */
+int
+docbParseChunk(docbParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ const char *chunk ATTRIBUTE_UNUSED,
+ int size ATTRIBUTE_UNUSED,
+ int terminate ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbParseChunk() deprecated function reached\n");
+ deprecated = 1;
+ }
+
+ return (xmlParseChunk(ctxt, chunk, size, terminate));
+}
+
+/**
+ * docbCreatePushParserCtxt:
+ * @sax: a SAX handler
+ * @user_data: The user data returned on SAX callbacks
+ * @chunk: a pointer to an array of chars
+ * @size: number of chars in the array
+ * @filename: an optional file name or URI
+ * @enc: an optional encoding
+ *
+ * Create a parser context for using the DocBook SGML parser in push mode
+ * To allow content encoding detection, @size should be >= 4
+ * The value of @filename is used for fetching external entities
+ * and error/warning reports.
+ *
+ * Returns the new parser context or NULL
+ */
+docbParserCtxtPtr
+docbCreatePushParserCtxt(docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
+ void *user_data ATTRIBUTE_UNUSED,
+ const char *chunk ATTRIBUTE_UNUSED,
+ int size ATTRIBUTE_UNUSED,
+ const char *filename ATTRIBUTE_UNUSED,
+ xmlCharEncoding enc ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbParseChunk() deprecated function reached\n");
+ deprecated = 1;
+ }
+
+ return(xmlCreatePushParserCtxt(sax, user_data, chunk, size, filename));
+}
+
+/**
+ * docbSAXParseDoc:
+ * @cur: a pointer to an array of xmlChar
+ * @encoding: a free form C string describing the SGML document encoding, or NULL
+ * @sax: the SAX handler block
+ * @userData: if using SAX, this pointer will be provided on callbacks.
+ *
+ * parse an SGML in-memory document and build a tree.
+ * It use the given SAX function block to handle the parsing callback.
+ * If sax is NULL, fallback to the default DOM tree building routines.
+ *
+ * Returns the resulting document tree
+ */
+
+docbDocPtr
+docbSAXParseDoc(xmlChar * cur ATTRIBUTE_UNUSED,
+ const char *encoding ATTRIBUTE_UNUSED,
+ docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
+ void *userData ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbParseChunk() deprecated function reached\n");
+ deprecated = 1;
+ }
+
+ return (xmlSAXParseMemoryWithData(sax, (const char *)cur,
+ xmlStrlen((const xmlChar *) cur), 0, userData));
+}
+
+/**
+ * docbParseDoc:
+ * @cur: a pointer to an array of xmlChar
+ * @encoding: a free form C string describing the SGML document encoding, or NULL
+ *
+ * parse an SGML in-memory document and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+
+docbDocPtr
+docbParseDoc(xmlChar * cur ATTRIBUTE_UNUSED,
+ const char *encoding ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbParseChunk() deprecated function reached\n");
+ deprecated = 1;
+ }
+
+ return (xmlParseDoc(cur));
+}
+
+
+/**
+ * docbCreateFileParserCtxt:
+ * @filename: the filename
+ * @encoding: the SGML document encoding, or NULL
+ *
+ * Create a parser context for a file content.
+ * Automatic support for ZLIB/Compress compressed document is provided
+ * by default if found at compile-time.
+ *
+ * Returns the new parser context or NULL
+ */
+docbParserCtxtPtr
+docbCreateFileParserCtxt(const char *filename ATTRIBUTE_UNUSED,
+ const char *encoding ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbCreateFileParserCtxt() deprecated function reached\n");
+ deprecated = 1;
+ }
+
+ return (xmlCreateFileParserCtxt(filename));
+}
+
+/**
+ * docbSAXParseFile:
+ * @filename: the filename
+ * @encoding: a free form C string describing the SGML document encoding, or NULL
+ * @sax: the SAX handler block
+ * @userData: if using SAX, this pointer will be provided on callbacks.
+ *
+ * parse an SGML file and build a tree. Automatic support for ZLIB/Compress
+ * compressed document is provided by default if found at compile-time.
+ * It use the given SAX function block to handle the parsing callback.
+ * If sax is NULL, fallback to the default DOM tree building routines.
+ *
+ * Returns the resulting document tree
+ */
+
+docbDocPtr
+docbSAXParseFile(const char *filename ATTRIBUTE_UNUSED,
+ const char *encoding ATTRIBUTE_UNUSED,
+ docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
+ void *userData ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbSAXParseFile() deprecated function reached\n");
+ deprecated = 1;
+ }
+
+ return (xmlSAXParseFileWithData(sax, filename, 0, userData));
+}
+
+/**
+ * docbParseFile:
+ * @filename: the filename
+ * @encoding: a free form C string describing document encoding, or NULL
+ *
+ * parse a Docbook SGML file and build a tree. Automatic support for
+ * ZLIB/Compress compressed document is provided by default if found
+ * at compile-time.
+ *
+ * Returns the resulting document tree
+ */
+
+docbDocPtr
+docbParseFile(const char *filename ATTRIBUTE_UNUSED,
+ const char *encoding ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "docbParseFile() deprecated function reached\n");
+ deprecated = 1;
+ }
+
+ return (xmlParseFile(filename));
+}
+#endif /* LIBXML_DOCB_ENABLED */
diff --git a/HTMLparser.c b/HTMLparser.c
new file mode 100644
index 0000000..6cbe67e
--- /dev/null
+++ b/HTMLparser.c
@@ -0,0 +1,5926 @@
+/*
+ * HTMLparser.c : an HTML 4.0 non-verifying parser
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+#ifdef LIBXML_HTML_ENABLED
+
+#include <string.h>
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_ZLIB_H
+#include <zlib.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/xmlerror.h>
+#include <libxml/HTMLparser.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/entities.h>
+#include <libxml/encoding.h>
+#include <libxml/valid.h>
+#include <libxml/xmlIO.h>
+#include <libxml/globals.h>
+#include <libxml/uri.h>
+
+#define HTML_MAX_NAMELEN 1000
+#define HTML_PARSER_BIG_BUFFER_SIZE 1000
+#define HTML_PARSER_BUFFER_SIZE 100
+
+/* #define DEBUG */
+/* #define DEBUG_PUSH */
+
+static int htmlOmittedDefaultValue = 1;
+
+xmlChar * htmlDecodeEntities(htmlParserCtxtPtr ctxt, int len,
+ xmlChar end, xmlChar end2, xmlChar end3);
+static void htmlParseComment(htmlParserCtxtPtr ctxt);
+
+/************************************************************************
+ * *
+ * Some factorized error routines *
+ * *
+ ************************************************************************/
+
+/**
+ * htmlErrMemory:
+ * @ctxt: an HTML parser context
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+htmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ if (ctxt != NULL) {
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ }
+ if (extra)
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
+ NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+ else
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
+ NULL, NULL, 0, 0, "Memory allocation failed\n");
+}
+
+/**
+ * htmlParseErr:
+ * @ctxt: an HTML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @str1: string infor
+ * @str2: string infor
+ *
+ * Handle a fatal parser error, i.e. violating Well-Formedness constraints
+ */
+static void
+htmlParseErr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, const xmlChar *str1, const xmlChar *str2)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_HTML, error,
+ XML_ERR_ERROR, NULL, 0,
+ (const char *) str1, (const char *) str2,
+ NULL, 0, 0,
+ msg, str1, str2);
+ ctxt->wellFormed = 0;
+}
+
+/**
+ * htmlParseErrInt:
+ * @ctxt: an HTML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @val: integer info
+ *
+ * Handle a fatal parser error, i.e. violating Well-Formedness constraints
+ */
+static void
+htmlParseErrInt(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, int val)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_HTML, error,
+ XML_ERR_ERROR, NULL, 0, NULL, NULL,
+ NULL, val, 0, msg, val);
+ ctxt->wellFormed = 0;
+}
+
+/************************************************************************
+ * *
+ * Parser stacks related functions and macros *
+ * *
+ ************************************************************************/
+
+/**
+ * htmlnamePush:
+ * @ctxt: an HTML parser context
+ * @value: the element name
+ *
+ * Pushes a new element name on top of the name stack
+ *
+ * Returns 0 in case of error, the index in the stack otherwise
+ */
+static int
+htmlnamePush(htmlParserCtxtPtr ctxt, const xmlChar * value)
+{
+ if (ctxt->nameNr >= ctxt->nameMax) {
+ ctxt->nameMax *= 2;
+ ctxt->nameTab = (const xmlChar * *)
+ xmlRealloc((xmlChar * *)ctxt->nameTab,
+ ctxt->nameMax *
+ sizeof(ctxt->nameTab[0]));
+ if (ctxt->nameTab == NULL) {
+ htmlErrMemory(ctxt, NULL);
+ return (0);
+ }
+ }
+ ctxt->nameTab[ctxt->nameNr] = value;
+ ctxt->name = value;
+ return (ctxt->nameNr++);
+}
+/**
+ * htmlnamePop:
+ * @ctxt: an HTML parser context
+ *
+ * Pops the top element name from the name stack
+ *
+ * Returns the name just removed
+ */
+static const xmlChar *
+htmlnamePop(htmlParserCtxtPtr ctxt)
+{
+ const xmlChar *ret;
+
+ if (ctxt->nameNr <= 0)
+ return (0);
+ ctxt->nameNr--;
+ if (ctxt->nameNr < 0)
+ return (0);
+ 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;
+ return (ret);
+}
+
+/*
+ * Macros for accessing the content. Those should be used only by the parser,
+ * and not exported.
+ *
+ * Dirty macros, i.e. one need to make assumption on the context to use them
+ *
+ * CUR_PTR return the current pointer to the xmlChar to be parsed.
+ * CUR returns the current xmlChar value, i.e. a 8 bit value if compiled
+ * in ISO-Latin or UTF-8, and the current 16 bit value if compiled
+ * in UNICODE mode. This should be used internally by the parser
+ * only to compare to ASCII values otherwise it would break when
+ * running with UTF-8 encoding.
+ * NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only
+ * to compare on ASCII based substring.
+ * UPP(n) returns the n'th next xmlChar converted to uppercase. Same as CUR
+ * it should be used only to compare on ASCII based substring.
+ * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
+ * strings without newlines within the parser.
+ *
+ * Clean macros, not dependent of an ASCII context, expect UTF-8 encoding
+ *
+ * CURRENT Returns the current char value, with the full decoding of
+ * UTF-8 if we are using this mode. It returns an int.
+ * NEXT Skip to the next character, this does the proper decoding
+ * in UTF-8 mode. It also pop-up unfinished entities on the fly.
+ * NEXTL(l) Skip the current unicode character of l xmlChars long.
+ * COPY(to) copy one char to *to, increment CUR_PTR and to accordingly
+ */
+
+#define UPPER (toupper(*ctxt->input->cur))
+
+#define SKIP(val) ctxt->nbChars += (val),ctxt->input->cur += (val),ctxt->input->col+=(val)
+
+#define NXT(val) ctxt->input->cur[(val)]
+
+#define UPP(val) (toupper(ctxt->input->cur[(val)]))
+
+#define CUR_PTR ctxt->input->cur
+
+#define SHRINK if ((ctxt->input->cur - ctxt->input->base > 2 * INPUT_CHUNK) && \
+ (ctxt->input->end - ctxt->input->cur < 2 * INPUT_CHUNK)) \
+ xmlParserInputShrink(ctxt->input)
+
+#define GROW if ((ctxt->progressive == 0) && \
+ (ctxt->input->end - ctxt->input->cur < INPUT_CHUNK)) \
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK)
+
+#define CURRENT ((int) (*ctxt->input->cur))
+
+#define SKIP_BLANKS htmlSkipBlankChars(ctxt)
+
+/* Inported from XML */
+
+/* #define CUR (ctxt->token ? ctxt->token : (int) (*ctxt->input->cur)) */
+#define CUR ((int) (*ctxt->input->cur))
+#define NEXT xmlNextChar(ctxt)
+
+#define RAW (ctxt->token ? -1 : (*ctxt->input->cur))
+#define NXT(val) ctxt->input->cur[(val)]
+#define CUR_PTR ctxt->input->cur
+
+
+#define NEXTL(l) do { \
+ if (*(ctxt->input->cur) == '\n') { \
+ ctxt->input->line++; ctxt->input->col = 1; \
+ } else ctxt->input->col++; \
+ ctxt->token = 0; ctxt->input->cur += l; ctxt->nbChars++; \
+ } while (0)
+
+/************
+ \
+ if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \
+ if (*ctxt->input->cur == '&') xmlParserHandleReference(ctxt);
+ ************/
+
+#define CUR_CHAR(l) htmlCurrentChar(ctxt, &l)
+#define CUR_SCHAR(s, l) xmlStringCurrentChar(ctxt, s, &l)
+
+#define COPY_BUF(l,b,i,v) \
+ if (l == 1) b[i++] = (xmlChar) v; \
+ else i += xmlCopyChar(l,&b[i],v)
+
+/**
+ * htmlCurrentChar:
+ * @ctxt: the HTML parser context
+ * @len: pointer to the length of the char read
+ *
+ * The current char value, if using UTF-8 this may actually span multiple
+ * bytes in the input buffer. Implement the end of line normalization:
+ * 2.11 End-of-Line Handling
+ * If the encoding is unspecified, in the case we find an ISO-Latin-1
+ * char, then the encoding converter is plugged in automatically.
+ *
+ * Returns the current char value and its length
+ */
+
+static int
+htmlCurrentChar(xmlParserCtxtPtr ctxt, int *len) {
+ if (ctxt->instate == XML_PARSER_EOF)
+ return(0);
+
+ if (ctxt->token != 0) {
+ *len = 0;
+ return(ctxt->token);
+ }
+ if (ctxt->charset == XML_CHAR_ENCODING_UTF8) {
+ /*
+ * We are supposed to handle UTF8, check it's valid
+ * From rfc2044: encoding of the Unicode values on UTF-8:
+ *
+ * UCS-4 range (hex.) UTF-8 octet sequence (binary)
+ * 0000 0000-0000 007F 0xxxxxxx
+ * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
+ * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
+ *
+ * Check for the 0x110000 limit too
+ */
+ const unsigned char *cur = ctxt->input->cur;
+ unsigned char c;
+ unsigned int val;
+
+ c = *cur;
+ if (c & 0x80) {
+ if (cur[1] == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if ((cur[1] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xe0) == 0xe0) {
+
+ if (cur[2] == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if ((cur[2] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xf0) == 0xf0) {
+ if (cur[3] == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if (((c & 0xf8) != 0xf0) ||
+ ((cur[3] & 0xc0) != 0x80))
+ goto encoding_error;
+ /* 4-byte code */
+ *len = 4;
+ val = (cur[0] & 0x7) << 18;
+ val |= (cur[1] & 0x3f) << 12;
+ val |= (cur[2] & 0x3f) << 6;
+ val |= cur[3] & 0x3f;
+ } else {
+ /* 3-byte code */
+ *len = 3;
+ val = (cur[0] & 0xf) << 12;
+ val |= (cur[1] & 0x3f) << 6;
+ val |= cur[2] & 0x3f;
+ }
+ } else {
+ /* 2-byte code */
+ *len = 2;
+ val = (cur[0] & 0x1f) << 6;
+ val |= cur[1] & 0x3f;
+ }
+ if (!IS_CHAR(val)) {
+ htmlParseErrInt(ctxt, XML_ERR_INVALID_CHAR,
+ "Char 0x%X out of allowed range\n", val);
+ }
+ return(val);
+ } else {
+ /* 1-byte code */
+ *len = 1;
+ return((int) *ctxt->input->cur);
+ }
+ }
+ /*
+ * Assume it's a fixed length encoding (1) with
+ * a compatible encoding for the ASCII set, since
+ * XML constructs only use < 128 chars
+ */
+ *len = 1;
+ if ((int) *ctxt->input->cur < 0x80)
+ return((int) *ctxt->input->cur);
+
+ /*
+ * Humm this is bad, do an automatic flow conversion
+ */
+ xmlSwitchEncoding(ctxt, XML_CHAR_ENCODING_8859_1);
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ return(xmlCurrentChar(ctxt, len));
+
+encoding_error:
+ /*
+ * If we detect an UTF8 error that probably mean that the
+ * input encoding didn't get properly advertized in the
+ * declaration header. Report the error and switch the encoding
+ * to ISO-Latin-1 (if you don't like this policy, just declare the
+ * encoding !)
+ */
+ htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
+ "Input is not proper UTF-8, indicate encoding !\n",
+ NULL, NULL);
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) {
+ ctxt->sax->error(ctxt->userData, "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]);
+ }
+
+ ctxt->charset = XML_CHAR_ENCODING_8859_1;
+ *len = 1;
+ return((int) *ctxt->input->cur);
+}
+
+/**
+ * htmlSkipBlankChars:
+ * @ctxt: the HTML parser context
+ *
+ * skip all blanks character found at that point in the input streams.
+ *
+ * Returns the number of space chars skipped
+ */
+
+static int
+htmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
+ int res = 0;
+
+ while (IS_BLANK_CH(*(ctxt->input->cur))) {
+ if ((*ctxt->input->cur == 0) &&
+ (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) {
+ xmlPopInput(ctxt);
+ } else {
+ if (*(ctxt->input->cur) == '\n') {
+ ctxt->input->line++; ctxt->input->col = 1;
+ } else ctxt->input->col++;
+ ctxt->input->cur++;
+ ctxt->nbChars++;
+ if (*ctxt->input->cur == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ }
+ res++;
+ }
+ return(res);
+}
+
+
+
+/************************************************************************
+ * *
+ * The list of HTML elements and their properties *
+ * *
+ ************************************************************************/
+
+/*
+ * Start Tag: 1 means the start tag can be ommited
+ * End Tag: 1 means the end tag can be ommited
+ * 2 means it's forbidden (empty elements)
+ * 3 means the tag is stylistic and should be closed easily
+ * Depr: this element is deprecated
+ * DTD: 1 means that this element is valid only in the Loose DTD
+ * 2 means that this element is valid only in the Frameset DTD
+ *
+ * Name,Start Tag,End Tag,Save End,Empty,Deprecated,DTD,inline,Description
+ , subElements , impliedsubelt , Attributes, userdata
+ */
+
+/* Definitions and a couple of vars for HTML Elements */
+
+#define FONTSTYLE "tt", "i", "b", "u", "s", "strike", "big", "small"
+#define PHRASE "em", "strong", "dfn", "code", "samp", "kbd", "var", "cite", "abbr", "acronym"
+#define SPECIAL "a", "img", "applet", "object", "font", "basefont", "br", "script", "map", "q", "sub", "sup", "span", "bdo", "iframe"
+#define INLINE PCDATA FONTSTYLE PHRASE SPECIAL FORMCTRL
+#define BLOCK HEADING LIST "pre", "p", "dl", "div", "center", "noscript", "noframes", "blockquote", "form", "isindex", "hr", "table", "fieldset", "address"
+#define FORMCTRL "input", "select", "textarea", "label", "button"
+#define PCDATA
+#define HEADING "h1", "h2", "h3", "h4", "h5", "h6"
+#define LIST "ul", "ol", "dir", "menu"
+#define MODIFIER
+#define FLOW BLOCK,INLINE
+#define EMPTY NULL
+
+
+static const char* html_flow[] = { FLOW, NULL } ;
+static const char* html_inline[] = { INLINE, NULL } ;
+
+/* placeholders: elts with content but no subelements */
+static const char* html_pcdata[] = { NULL } ;
+#define html_cdata html_pcdata
+
+
+/* ... and for HTML Attributes */
+
+#define COREATTRS "id", "class", "style", "title"
+#define I18N "lang", "dir"
+#define EVENTS "onclick", "ondblclick", "onmousedown", "onmouseup", "onmouseover", "onmouseout", "onkeypress", "onkeydown", "onkeyup"
+#define ATTRS COREATTRS,I18N,EVENTS
+#define CELLHALIGN "align", "char", "charoff"
+#define CELLVALIGN "valign"
+
+static const char* html_attrs[] = { ATTRS, NULL } ;
+static const char* core_i18n_attrs[] = { COREATTRS, I18N, NULL } ;
+static const char* core_attrs[] = { COREATTRS, NULL } ;
+static const char* i18n_attrs[] = { I18N, NULL } ;
+
+
+/* Other declarations that should go inline ... */
+static const char* a_attrs[] = { ATTRS, "charset", "type", "name",
+ "href", "hreflang", "rel", "rev", "accesskey", "shape", "coords",
+ "tabindex", "onfocus", "onblur", NULL } ;
+static const char* target_attr[] = { "target", NULL } ;
+static const char* rows_cols_attr[] = { "rows", "cols", NULL } ;
+static const char* alt_attr[] = { "alt", NULL } ;
+static const char* src_alt_attrs[] = { "src", "alt", NULL } ;
+static const char* href_attrs[] = { "href", NULL } ;
+static const char* clear_attrs[] = { "clear", NULL } ;
+static const char* inline_p[] = { INLINE, "p", NULL } ;
+static const char* flow_param[] = { FLOW, "param", NULL } ;
+static const char* applet_attrs[] = { COREATTRS , "codebase",
+ "archive", "alt", "name", "height", "width", "align",
+ "hspace", "vspace", NULL } ;
+static const char* area_attrs[] = { "shape", "coords", "href", "nohref",
+ "tabindex", "accesskey", "onfocus", "onblur", NULL } ;
+static const char* basefont_attrs[] =
+ { "id", "size", "color", "face", NULL } ;
+static const char* quote_attrs[] = { ATTRS, "cite", NULL } ;
+static const char* body_contents[] = { FLOW, "ins", "del", NULL } ;
+static const char* body_attrs[] = { ATTRS, "onload", "onunload", NULL } ;
+static const char* body_depr[] = { "background", "bgcolor", "text",
+ "link", "vlink", "alink", NULL } ;
+static const char* button_attrs[] = { ATTRS, "name", "value", "type",
+ "disabled", "tabindex", "accesskey", "onfocus", "onblur", NULL } ;
+
+
+static const char* col_attrs[] = { ATTRS, "span", "width", CELLHALIGN, CELLVALIGN, NULL } ;
+static const char* col_elt[] = { "col", NULL } ;
+static const char* edit_attrs[] = { ATTRS, "datetime", "cite", NULL } ;
+static const char* compact_attrs[] = { ATTRS, "compact", NULL } ;
+static const char* dl_contents[] = { "dt", "dd", NULL } ;
+static const char* compact_attr[] = { "compact", NULL } ;
+static const char* label_attr[] = { "label", NULL } ;
+static const char* fieldset_contents[] = { FLOW, "legend" } ;
+static const char* font_attrs[] = { COREATTRS, I18N, "size", "color", "face" , NULL } ;
+static const char* form_contents[] = { HEADING, LIST, INLINE, "pre", "p", "div", "center", "noscript", "noframes", "blockquote", "isindex", "hr", "table", "fieldset", "address", NULL } ;
+static const char* form_attrs[] = { ATTRS, "method", "enctype", "accept", "name", "onsubmit", "onreset", "accept-charset", NULL } ;
+static const char* frame_attrs[] = { COREATTRS, "longdesc", "name", "src", "frameborder", "marginwidth", "marginheight", "noresize", "scrolling" , NULL } ;
+static const char* frameset_attrs[] = { COREATTRS, "rows", "cols", "onload", "onunload", NULL } ;
+static const char* frameset_contents[] = { "frameset", "frame", "noframes", NULL } ;
+static const char* head_attrs[] = { I18N, "profile", NULL } ;
+static const char* head_contents[] = { "title", "isindex", "base", "script", "style", "meta", "link", "object", NULL } ;
+static const char* hr_depr[] = { "align", "noshade", "size", "width", NULL } ;
+static const char* version_attr[] = { "version", NULL } ;
+static const char* html_content[] = { "head", "body", "frameset", NULL } ;
+static const char* iframe_attrs[] = { COREATTRS, "longdesc", "name", "src", "frameborder", "marginwidth", "marginheight", "scrolling", "align", "height", "width", NULL } ;
+static const char* img_attrs[] = { ATTRS, "longdesc", "name", "height", "width", "usemap", "ismap", NULL } ;
+static const char* input_attrs[] = { ATTRS, "type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "ismap", "tabindex", "accesskey", "onfocus", "onblur", "onselect", "onchange", "accept", NULL } ;
+static const char* prompt_attrs[] = { COREATTRS, I18N, "prompt", NULL } ;
+static const char* label_attrs[] = { ATTRS, "for", "accesskey", "onfocus", "onblur", NULL } ;
+static const char* legend_attrs[] = { ATTRS, "accesskey", NULL } ;
+static const char* align_attr[] = { "align", NULL } ;
+static const char* link_attrs[] = { ATTRS, "charset", "href", "hreflang", "type", "rel", "rev", "media", NULL } ;
+static const char* map_contents[] = { BLOCK, "area", NULL } ;
+static const char* name_attr[] = { "name", NULL } ;
+static const char* action_attr[] = { "action", NULL } ;
+static const char* blockli_elt[] = { BLOCK, "li", NULL } ;
+static const char* meta_attrs[] = { I18N, "http-equiv", "name", "scheme", NULL } ;
+static const char* content_attr[] = { "content", NULL } ;
+static const char* type_attr[] = { "type", NULL } ;
+static const char* noframes_content[] = { "body", FLOW MODIFIER, NULL } ;
+static const char* object_contents[] = { FLOW, "param", NULL } ;
+static const char* object_attrs[] = { ATTRS, "declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex", NULL } ;
+static const char* object_depr[] = { "align", "border", "hspace", "vspace", NULL } ;
+static const char* ol_attrs[] = { "type", "compact", "start", NULL} ;
+static const char* option_elt[] = { "option", NULL } ;
+static const char* optgroup_attrs[] = { ATTRS, "disabled", NULL } ;
+static const char* option_attrs[] = { ATTRS, "disabled", "label", "selected", "value", NULL } ;
+static const char* param_attrs[] = { "id", "value", "valuetype", "type", NULL } ;
+static const char* width_attr[] = { "width", NULL } ;
+static const char* pre_content[] = { PHRASE, "tt", "i", "b", "u", "s", "strike", "a", "br", "script", "map", "q", "span", "bdo", "iframe", NULL } ;
+static const char* script_attrs[] = { "charset", "src", "defer", "event", "for", NULL } ;
+static const char* language_attr[] = { "language", NULL } ;
+static const char* select_content[] = { "optgroup", "option", NULL } ;
+static const char* select_attrs[] = { ATTRS, "name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange", NULL } ;
+static const char* style_attrs[] = { I18N, "media", "title", NULL } ;
+static const char* table_attrs[] = { ATTRS "summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding", "datapagesize", NULL } ;
+static const char* table_depr[] = { "align", "bgcolor", NULL } ;
+static const char* table_contents[] = { "caption", "col", "colgroup", "thead", "tfoot", "tbody", "tr", NULL} ;
+static const char* tr_elt[] = { "tr", NULL } ;
+static const char* talign_attrs[] = { ATTRS, CELLHALIGN, CELLVALIGN, NULL} ;
+static const char* th_td_depr[] = { "nowrap", "bgcolor", "width", "height", NULL } ;
+static const char* th_td_attr[] = { ATTRS, "abbr", "axis", "headers", "scope", "rowspan", "colspan", CELLHALIGN, CELLVALIGN, NULL } ;
+static const char* textarea_attrs[] = { ATTRS, "name", "disabled", "readonly", "tabindex", "accesskey", "onfocus", "onblur", "onselect", "onchange", NULL } ;
+static const char* tr_contents[] = { "th", "td", NULL } ;
+static const char* bgcolor_attr[] = { "bgcolor", NULL } ;
+static const char* li_elt[] = { "li", NULL } ;
+static const char* ul_depr[] = { "type", "compact", NULL} ;
+static const char* dir_attr[] = { "dir", NULL} ;
+
+#define DECL (const char**)
+
+static const htmlElemDesc
+html40ElementTable[] = {
+{ "a", 0, 0, 0, 0, 0, 0, 1, "anchor ",
+ DECL html_inline , NULL , DECL a_attrs , DECL target_attr, NULL
+},
+{ "abbr", 0, 0, 0, 0, 0, 0, 1, "abbreviated form",
+ DECL html_inline , NULL , DECL html_attrs, NULL, NULL
+},
+{ "acronym", 0, 0, 0, 0, 0, 0, 1, "",
+ DECL html_inline , NULL , DECL html_attrs, NULL, NULL
+},
+{ "address", 0, 0, 0, 0, 0, 0, 0, "information on author ",
+ DECL inline_p , NULL , DECL html_attrs, NULL, NULL
+},
+{ "applet", 0, 0, 0, 0, 1, 1, 2, "java applet ",
+ DECL flow_param , NULL , NULL , DECL applet_attrs, NULL
+},
+{ "area", 0, 2, 2, 1, 0, 0, 0, "client-side image map area ",
+ EMPTY , NULL , DECL area_attrs , DECL target_attr, DECL alt_attr
+},
+{ "b", 0, 3, 0, 0, 0, 0, 1, "bold text style",
+ DECL html_inline , NULL , DECL html_attrs, NULL, NULL
+},
+{ "base", 0, 2, 2, 1, 0, 0, 0, "document base uri ",
+ EMPTY , NULL , NULL , DECL target_attr, DECL href_attrs
+},
+{ "basefont", 0, 2, 2, 1, 1, 1, 1, "base font size " ,
+ EMPTY , NULL , NULL, DECL basefont_attrs, NULL
+},
+{ "bdo", 0, 0, 0, 0, 0, 0, 1, "i18n bidi over-ride ",
+ DECL html_inline , NULL , DECL core_i18n_attrs, NULL, DECL dir_attr
+},
+{ "big", 0, 3, 0, 0, 0, 0, 1, "large text style",
+ DECL html_inline , NULL , DECL html_attrs, NULL, NULL
+},
+{ "blockquote", 0, 0, 0, 0, 0, 0, 0, "long quotation ",
+ DECL html_flow , NULL , DECL quote_attrs , NULL, NULL
+},
+{ "body", 1, 1, 0, 0, 0, 0, 0, "document body ",
+ DECL body_contents , "div" , DECL body_attrs, DECL body_depr, NULL
+},
+{ "br", 0, 2, 2, 1, 0, 0, 1, "forced line break ",
+ EMPTY , NULL , DECL core_attrs, DECL clear_attrs , NULL
+},
+{ "button", 0, 0, 0, 0, 0, 0, 2, "push button ",
+ DECL html_flow MODIFIER , NULL , DECL button_attrs, NULL, NULL
+},
+{ "caption", 0, 0, 0, 0, 0, 0, 0, "table caption ",
+ DECL html_inline , NULL , DECL html_attrs, NULL, NULL
+},
+{ "center", 0, 3, 0, 0, 1, 1, 0, "shorthand for div align=center ",
+ DECL html_flow , NULL , NULL, DECL html_attrs, NULL
+},
+{ "cite", 0, 0, 0, 0, 0, 0, 1, "citation",
+ DECL html_inline , NULL , DECL html_attrs, NULL, NULL
+},
+{ "code", 0, 0, 0, 0, 0, 0, 1, "computer code fragment",
+ DECL html_inline , NULL , DECL html_attrs, NULL, NULL
+},
+{ "col", 0, 2, 2, 1, 0, 0, 0, "table column ",
+ EMPTY , NULL , DECL col_attrs , NULL, NULL
+},
+{ "colgroup", 0, 1, 0, 0, 0, 0, 0, "table column group ",
+ DECL col_elt , "col" , DECL col_attrs , NULL, NULL
+},
+{ "dd", 0, 1, 0, 0, 0, 0, 0, "definition description ",
+ DECL html_flow , NULL , DECL html_attrs, NULL, NULL
+},
+{ "del", 0, 0, 0, 0, 0, 0, 2, "deleted text ",
+ DECL html_flow , NULL , DECL edit_attrs , NULL, NULL
+},
+{ "dfn", 0, 0, 0, 0, 0, 0, 1, "instance definition",
+ DECL html_inline , NULL , DECL html_attrs, NULL, NULL
+},
+{ "dir", 0, 0, 0, 0, 1, 1, 0, "directory list",
+ DECL blockli_elt, "li" , NULL, DECL compact_attrs, NULL
+},
+{ "div", 0, 0, 0, 0, 0, 0, 0, "generic language/style container",
+ DECL html_flow, NULL, DECL html_attrs, DECL align_attr, NULL
+},
+{ "dl", 0, 0, 0, 0, 0, 0, 0, "definition list ",
+ DECL dl_contents , "dd" , html_attrs, DECL compact_attr, NULL
+},
+{ "dt", 0, 1, 0, 0, 0, 0, 0, "definition term ",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "em", 0, 3, 0, 0, 0, 0, 1, "emphasis",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "fieldset", 0, 0, 0, 0, 0, 0, 0, "form control group ",
+ DECL fieldset_contents , NULL, DECL html_attrs, NULL, NULL
+},
+{ "font", 0, 3, 0, 0, 1, 1, 1, "local change to font ",
+ DECL html_inline, NULL, NULL, DECL font_attrs, NULL
+},
+{ "form", 0, 0, 0, 0, 0, 0, 0, "interactive form ",
+ DECL form_contents, "fieldset", DECL form_attrs , DECL target_attr, DECL action_attr
+},
+{ "frame", 0, 2, 2, 1, 0, 2, 0, "subwindow " ,
+ EMPTY, NULL, NULL, DECL frame_attrs, NULL
+},
+{ "frameset", 0, 0, 0, 0, 0, 2, 0, "window subdivision" ,
+ DECL frameset_contents, "noframes" , NULL , DECL frameset_attrs, NULL
+},
+{ "h1", 0, 0, 0, 0, 0, 0, 0, "heading ",
+ DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
+},
+{ "h2", 0, 0, 0, 0, 0, 0, 0, "heading ",
+ DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
+},
+{ "h3", 0, 0, 0, 0, 0, 0, 0, "heading ",
+ DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
+},
+{ "h4", 0, 0, 0, 0, 0, 0, 0, "heading ",
+ DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
+},
+{ "h5", 0, 0, 0, 0, 0, 0, 0, "heading ",
+ DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
+},
+{ "h6", 0, 0, 0, 0, 0, 0, 0, "heading ",
+ DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
+},
+{ "head", 1, 1, 0, 0, 0, 0, 0, "document head ",
+ DECL head_contents, NULL, DECL head_attrs, NULL, NULL
+},
+{ "hr", 0, 2, 2, 1, 0, 0, 0, "horizontal rule " ,
+ EMPTY, NULL, DECL html_attrs, DECL hr_depr, NULL
+},
+{ "html", 1, 1, 0, 0, 0, 0, 0, "document root element ",
+ DECL html_content , NULL , DECL i18n_attrs, DECL version_attr, NULL
+},
+{ "i", 0, 3, 0, 0, 0, 0, 1, "italic text style",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "iframe", 0, 0, 0, 0, 0, 1, 2, "inline subwindow ",
+ DECL html_flow, NULL, NULL, DECL iframe_attrs, NULL
+},
+{ "img", 0, 2, 2, 1, 0, 0, 1, "embedded image ",
+ EMPTY, NULL, DECL img_attrs, DECL align_attr, src_alt_attrs
+},
+{ "input", 0, 2, 2, 1, 0, 0, 1, "form control ",
+ EMPTY, NULL, DECL input_attrs , DECL align_attr, NULL
+},
+{ "ins", 0, 0, 0, 0, 0, 0, 2, "inserted text",
+ DECL html_flow, NULL, DECL edit_attrs, NULL, NULL
+},
+{ "isindex", 0, 2, 2, 1, 1, 1, 0, "single line prompt ",
+ EMPTY, NULL, NULL, DECL prompt_attrs, NULL
+},
+{ "kbd", 0, 0, 0, 0, 0, 0, 1, "text to be entered by the user",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "label", 0, 0, 0, 0, 0, 0, 1, "form field label text ",
+ DECL html_inline MODIFIER, NULL, DECL label_attrs , NULL, NULL
+},
+{ "legend", 0, 0, 0, 0, 0, 0, 0, "fieldset legend ",
+ DECL html_inline, NULL, DECL legend_attrs , DECL align_attr, NULL
+},
+{ "li", 0, 1, 1, 0, 0, 0, 0, "list item ",
+ DECL html_flow, NULL, DECL html_attrs, NULL, NULL
+},
+{ "link", 0, 2, 2, 1, 0, 0, 0, "a media-independent link ",
+ EMPTY, NULL, DECL link_attrs, DECL target_attr, NULL
+},
+{ "map", 0, 0, 0, 0, 0, 0, 2, "client-side image map ",
+ DECL map_contents , NULL, DECL html_attrs , NULL, name_attr
+},
+{ "menu", 0, 0, 0, 0, 1, 1, 0, "menu list ",
+ DECL blockli_elt , NULL, NULL, DECL compact_attrs, NULL
+},
+{ "meta", 0, 2, 2, 1, 0, 0, 0, "generic metainformation ",
+ EMPTY, NULL, DECL meta_attrs , NULL , DECL content_attr
+},
+{ "noframes", 0, 0, 0, 0, 0, 2, 0, "alternate content container for non frame-based rendering ",
+ DECL noframes_content, "body" , DECL html_attrs, NULL, NULL
+},
+{ "noscript", 0, 0, 0, 0, 0, 0, 0, "alternate content container for non script-based rendering ",
+ DECL html_flow, "div", DECL html_attrs, NULL, NULL
+},
+{ "object", 0, 0, 0, 0, 0, 0, 2, "generic embedded object ",
+ DECL object_contents , "div" , DECL object_attrs, DECL object_depr, NULL
+},
+{ "ol", 0, 0, 0, 0, 0, 0, 0, "ordered list ",
+ DECL li_elt , "li" , DECL html_attrs, DECL ol_attrs, NULL
+},
+{ "optgroup", 0, 0, 0, 0, 0, 0, 0, "option group ",
+ option_elt , "option", DECL optgroup_attrs, NULL, DECL label_attr
+},
+{ "option", 0, 1, 0, 0, 0, 0, 0, "selectable choice " ,
+ DECL html_pcdata, NULL, DECL option_attrs, NULL, NULL
+},
+{ "p", 0, 1, 0, 0, 0, 0, 0, "paragraph ",
+ DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
+},
+{ "param", 0, 2, 2, 1, 0, 0, 0, "named property value ",
+ EMPTY, NULL, DECL param_attrs, NULL, name_attr
+},
+{ "pre", 0, 0, 0, 0, 0, 0, 0, "preformatted text ",
+ DECL pre_content, NULL, DECL html_attrs, DECL width_attr, NULL
+},
+{ "q", 0, 0, 0, 0, 0, 0, 1, "short inline quotation ",
+ DECL html_inline, NULL, DECL quote_attrs, NULL, NULL
+},
+{ "s", 0, 3, 0, 0, 1, 1, 1, "strike-through text style",
+ DECL html_inline, NULL, NULL, DECL html_attrs, NULL
+},
+{ "samp", 0, 0, 0, 0, 0, 0, 1, "sample program output, scripts, etc.",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "script", 0, 0, 0, 0, 0, 0, 2, "script statements ",
+ DECL html_cdata, NULL, DECL script_attrs, DECL language_attr, DECL type_attr
+},
+{ "select", 0, 0, 0, 0, 0, 0, 1, "option selector ",
+ DECL select_content, NULL, DECL select_attrs, NULL, NULL
+},
+{ "small", 0, 3, 0, 0, 0, 0, 1, "small text style",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "span", 0, 0, 0, 0, 0, 0, 1, "generic language/style container ",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "strike", 0, 3, 0, 0, 1, 1, 1, "strike-through text",
+ DECL html_inline, NULL, NULL, DECL html_attrs, NULL
+},
+{ "strong", 0, 3, 0, 0, 0, 0, 1, "strong emphasis",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "style", 0, 0, 0, 0, 0, 0, 0, "style info ",
+ DECL html_cdata, NULL, DECL style_attrs, NULL, DECL type_attr
+},
+{ "sub", 0, 3, 0, 0, 0, 0, 1, "subscript",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "sup", 0, 3, 0, 0, 0, 0, 1, "superscript ",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "table", 0, 0, 0, 0, 0, 0, 0, "",
+ DECL table_contents , "tr" , DECL table_attrs , DECL table_depr, NULL
+},
+{ "tbody", 1, 0, 0, 0, 0, 0, 0, "table body ",
+ DECL tr_elt , "tr" , DECL talign_attrs, NULL, NULL
+},
+{ "td", 0, 0, 0, 0, 0, 0, 0, "table data cell",
+ DECL html_flow, NULL, DECL th_td_attr, DECL th_td_depr, NULL
+},
+{ "textarea", 0, 0, 0, 0, 0, 0, 1, "multi-line text field ",
+ DECL html_pcdata, NULL, DECL textarea_attrs, NULL, DECL rows_cols_attr
+},
+{ "tfoot", 0, 1, 0, 0, 0, 0, 0, "table footer ",
+ DECL tr_elt , "tr" , DECL talign_attrs, NULL, NULL
+},
+{ "th", 0, 1, 0, 0, 0, 0, 0, "table header cell",
+ DECL html_flow, NULL, DECL th_td_attr, DECL th_td_depr, NULL
+},
+{ "thead", 0, 1, 0, 0, 0, 0, 0, "table header ",
+ DECL tr_elt , "tr" , DECL talign_attrs, NULL, NULL
+},
+{ "title", 0, 0, 0, 0, 0, 0, 0, "document title ",
+ DECL html_pcdata, NULL, DECL i18n_attrs, NULL, NULL
+},
+{ "tr", 0, 0, 0, 0, 0, 0, 0, "table row ",
+ DECL tr_contents , "td" , DECL talign_attrs, DECL bgcolor_attr, NULL
+},
+{ "tt", 0, 3, 0, 0, 0, 0, 1, "teletype or monospaced text style",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+},
+{ "u", 0, 3, 0, 0, 1, 1, 1, "underlined text style",
+ DECL html_inline, NULL, NULL, DECL html_attrs, NULL
+},
+{ "ul", 0, 0, 0, 0, 0, 0, 0, "unordered list ",
+ DECL li_elt , "li" , DECL html_attrs, DECL ul_depr, NULL
+},
+{ "var", 0, 0, 0, 0, 0, 0, 1, "instance of a variable or program argument",
+ DECL html_inline, NULL, DECL html_attrs, NULL, NULL
+}
+};
+
+/*
+ * start tags that imply the end of current element
+ */
+static const char *htmlStartClose[] = {
+"form", "form", "p", "hr", "h1", "h2", "h3", "h4", "h5", "h6",
+ "dl", "ul", "ol", "menu", "dir", "address", "pre",
+ "listing", "xmp", "head", NULL,
+"head", "p", NULL,
+"title", "p", NULL,
+"body", "head", "style", "link", "title", "p", NULL,
+"li", "p", "h1", "h2", "h3", "h4", "h5", "h6", "dl", "address",
+ "pre", "listing", "xmp", "head", "li", NULL,
+"hr", "p", "head", NULL,
+"h1", "p", "head", NULL,
+"h2", "p", "head", NULL,
+"h3", "p", "head", NULL,
+"h4", "p", "head", NULL,
+"h5", "p", "head", NULL,
+"h6", "p", "head", NULL,
+"dir", "p", "head", NULL,
+"address", "p", "head", "ul", NULL,
+"pre", "p", "head", "ul", NULL,
+"listing", "p", "head", NULL,
+"xmp", "p", "head", NULL,
+"blockquote", "p", "head", NULL,
+"dl", "p", "dt", "menu", "dir", "address", "pre", "listing",
+ "xmp", "head", NULL,
+"dt", "p", "menu", "dir", "address", "pre", "listing", "xmp",
+ "head", "dd", NULL,
+"dd", "p", "menu", "dir", "address", "pre", "listing", "xmp",
+ "head", "dt", NULL,
+"ul", "p", "head", "ol", "menu", "dir", "address", "pre",
+ "listing", "xmp", NULL,
+"ol", "p", "head", "ul", NULL,
+"menu", "p", "head", "ul", NULL,
+"p", "p", "head", "h1", "h2", "h3", "h4", "h5", "h6", NULL,
+"div", "p", "head", NULL,
+"noscript", "p", "head", NULL,
+"center", "font", "b", "i", "p", "head", NULL,
+"a", "a", NULL,
+"caption", "p", NULL,
+"colgroup", "caption", "colgroup", "col", "p", NULL,
+"col", "caption", "col", "p", NULL,
+"table", "p", "head", "h1", "h2", "h3", "h4", "h5", "h6", "pre",
+ "listing", "xmp", "a", NULL,
+"th", "th", "td", "p", "span", "font", "a", "b", "i", "u", NULL,
+"td", "th", "td", "p", "span", "font", "a", "b", "i", "u", NULL,
+"tr", "th", "td", "tr", "caption", "col", "colgroup", "p", NULL,
+"thead", "caption", "col", "colgroup", NULL,
+"tfoot", "th", "td", "tr", "caption", "col", "colgroup", "thead",
+ "tbody", "p", NULL,
+"tbody", "th", "td", "tr", "caption", "col", "colgroup", "thead",
+ "tfoot", "tbody", "p", NULL,
+"optgroup", "option", NULL,
+"option", "option", NULL,
+"fieldset", "legend", "p", "head", "h1", "h2", "h3", "h4", "h5", "h6",
+ "pre", "listing", "xmp", "a", NULL,
+NULL
+};
+
+/*
+ * The list of HTML elements which are supposed not to have
+ * CDATA content and where a p element will be implied
+ *
+ * TODO: extend that list by reading the HTML SGML DTD on
+ * implied paragraph
+ */
+static const char *htmlNoContentElements[] = {
+ "html",
+ "head",
+ "body",
+ NULL
+};
+
+/*
+ * The list of HTML attributes which are of content %Script;
+ * NOTE: when adding ones, check htmlIsScriptAttribute() since
+ * it assumes the name starts with 'on'
+ */
+static const char *htmlScriptAttributes[] = {
+ "onclick",
+ "ondblclick",
+ "onmousedown",
+ "onmouseup",
+ "onmouseover",
+ "onmousemove",
+ "onmouseout",
+ "onkeypress",
+ "onkeydown",
+ "onkeyup",
+ "onload",
+ "onunload",
+ "onfocus",
+ "onblur",
+ "onsubmit",
+ "onrest",
+ "onchange",
+ "onselect"
+};
+
+/*
+ * This table is used by the htmlparser to know what to do with
+ * broken html pages. By assigning different priorities to different
+ * elements the parser can decide how to handle extra endtags.
+ * Endtags are only allowed to close elements with lower or equal
+ * priority.
+ */
+
+typedef struct {
+ const char *name;
+ int priority;
+} elementPriority;
+
+static const elementPriority htmlEndPriority[] = {
+ {"div", 150},
+ {"td", 160},
+ {"th", 160},
+ {"tr", 170},
+ {"thead", 180},
+ {"tbody", 180},
+ {"tfoot", 180},
+ {"table", 190},
+ {"head", 200},
+ {"body", 200},
+ {"html", 220},
+ {NULL, 100} /* Default priority */
+};
+
+static const char** htmlStartCloseIndex[100];
+static int htmlStartCloseIndexinitialized = 0;
+
+/************************************************************************
+ * *
+ * functions to handle HTML specific data *
+ * *
+ ************************************************************************/
+
+/**
+ * htmlInitAutoClose:
+ *
+ * Initialize the htmlStartCloseIndex for fast lookup of closing tags names.
+ * This is not reentrant. Call xmlInitParser() once before processing in
+ * case of use in multithreaded programs.
+ */
+void
+htmlInitAutoClose(void) {
+ int indx, i = 0;
+
+ if (htmlStartCloseIndexinitialized) return;
+
+ for (indx = 0;indx < 100;indx ++) htmlStartCloseIndex[indx] = NULL;
+ indx = 0;
+ while ((htmlStartClose[i] != NULL) && (indx < 100 - 1)) {
+ htmlStartCloseIndex[indx++] = &htmlStartClose[i];
+ while (htmlStartClose[i] != NULL) i++;
+ i++;
+ }
+ htmlStartCloseIndexinitialized = 1;
+}
+
+/**
+ * htmlTagLookup:
+ * @tag: The tag name in lowercase
+ *
+ * Lookup the HTML tag in the ElementTable
+ *
+ * Returns the related htmlElemDescPtr or NULL if not found.
+ */
+const htmlElemDesc *
+htmlTagLookup(const xmlChar *tag) {
+ unsigned int i;
+
+ for (i = 0; i < (sizeof(html40ElementTable) /
+ sizeof(html40ElementTable[0]));i++) {
+ if (!xmlStrcasecmp(tag, BAD_CAST html40ElementTable[i].name))
+ return((htmlElemDescPtr) &html40ElementTable[i]);
+ }
+ return(NULL);
+}
+
+/**
+ * htmlGetEndPriority:
+ * @name: The name of the element to look up the priority for.
+ *
+ * Return value: The "endtag" priority.
+ **/
+static int
+htmlGetEndPriority (const xmlChar *name) {
+ int i = 0;
+
+ while ((htmlEndPriority[i].name != NULL) &&
+ (!xmlStrEqual((const xmlChar *)htmlEndPriority[i].name, name)))
+ i++;
+
+ return(htmlEndPriority[i].priority);
+}
+
+
+/**
+ * htmlCheckAutoClose:
+ * @newtag: The new tag name
+ * @oldtag: The old tag name
+ *
+ * Checks whether the new tag is one of the registered valid tags for
+ * closing old.
+ * Initialize the htmlStartCloseIndex for fast lookup of closing tags names.
+ *
+ * Returns 0 if no, 1 if yes.
+ */
+static int
+htmlCheckAutoClose(const xmlChar * newtag, const xmlChar * oldtag)
+{
+ int i, indx;
+ const char **closed = NULL;
+
+ if (htmlStartCloseIndexinitialized == 0)
+ htmlInitAutoClose();
+
+ /* inefficient, but not a big deal */
+ for (indx = 0; indx < 100; indx++) {
+ closed = htmlStartCloseIndex[indx];
+ if (closed == NULL)
+ return (0);
+ if (xmlStrEqual(BAD_CAST * closed, newtag))
+ break;
+ }
+
+ i = closed - htmlStartClose;
+ i++;
+ while (htmlStartClose[i] != NULL) {
+ if (xmlStrEqual(BAD_CAST htmlStartClose[i], oldtag)) {
+ return (1);
+ }
+ i++;
+ }
+ return (0);
+}
+
+/**
+ * htmlAutoCloseOnClose:
+ * @ctxt: an HTML parser context
+ * @newtag: The new tag name
+ * @force: force the tag closure
+ *
+ * The HTML DTD allows an ending tag to implicitly close other tags.
+ */
+static void
+htmlAutoCloseOnClose(htmlParserCtxtPtr ctxt, const xmlChar * newtag)
+{
+ const htmlElemDesc *info;
+ int i, priority;
+
+ priority = htmlGetEndPriority(newtag);
+
+ for (i = (ctxt->nameNr - 1); i >= 0; i--) {
+
+ if (xmlStrEqual(newtag, ctxt->nameTab[i]))
+ break;
+ /*
+ * A missplaced endtag can only close elements with lower
+ * or equal priority, so if we find an element with higher
+ * priority before we find an element with
+ * matching name, we just ignore this endtag
+ */
+ if (htmlGetEndPriority(ctxt->nameTab[i]) > priority)
+ return;
+ }
+ if (i < 0)
+ return;
+
+ while (!xmlStrEqual(newtag, ctxt->name)) {
+ info = htmlTagLookup(ctxt->name);
+ if ((info != NULL) && (info->endTag == 3)) {
+ htmlParseErr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
+ "Opening and ending tag mismatch: %s and %s\n",
+ newtag, ctxt->name);
+ }
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
+ ctxt->sax->endElement(ctxt->userData, ctxt->name);
+ htmlnamePop(ctxt);
+ }
+}
+
+/**
+ * htmlAutoCloseOnEnd:
+ * @ctxt: an HTML parser context
+ *
+ * Close all remaining tags at the end of the stream
+ */
+static void
+htmlAutoCloseOnEnd(htmlParserCtxtPtr ctxt)
+{
+ int i;
+
+ if (ctxt->nameNr == 0)
+ return;
+ for (i = (ctxt->nameNr - 1); i >= 0; i--) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
+ ctxt->sax->endElement(ctxt->userData, ctxt->name);
+ htmlnamePop(ctxt);
+ }
+}
+
+/**
+ * htmlAutoClose:
+ * @ctxt: an HTML parser context
+ * @newtag: The new tag name or NULL
+ *
+ * The HTML DTD allows a tag to implicitly close other tags.
+ * The list is kept in htmlStartClose array. This function is
+ * called when a new tag has been detected and generates the
+ * appropriates closes if possible/needed.
+ * If newtag is NULL this mean we are at the end of the resource
+ * and we should check
+ */
+static void
+htmlAutoClose(htmlParserCtxtPtr ctxt, const xmlChar * newtag)
+{
+ while ((newtag != NULL) && (ctxt->name != NULL) &&
+ (htmlCheckAutoClose(newtag, ctxt->name))) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
+ ctxt->sax->endElement(ctxt->userData, ctxt->name);
+ htmlnamePop(ctxt);
+ }
+ if (newtag == NULL) {
+ htmlAutoCloseOnEnd(ctxt);
+ return;
+ }
+ while ((newtag == NULL) && (ctxt->name != NULL) &&
+ ((xmlStrEqual(ctxt->name, BAD_CAST "head")) ||
+ (xmlStrEqual(ctxt->name, BAD_CAST "body")) ||
+ (xmlStrEqual(ctxt->name, BAD_CAST "html")))) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
+ ctxt->sax->endElement(ctxt->userData, ctxt->name);
+ htmlnamePop(ctxt);
+ }
+}
+
+/**
+ * htmlAutoCloseTag:
+ * @doc: the HTML document
+ * @name: The tag name
+ * @elem: the HTML element
+ *
+ * The HTML DTD allows a tag to implicitly close other tags.
+ * The list is kept in htmlStartClose array. This function checks
+ * if the element or one of it's children would autoclose the
+ * given tag.
+ *
+ * Returns 1 if autoclose, 0 otherwise
+ */
+int
+htmlAutoCloseTag(htmlDocPtr doc, const xmlChar *name, htmlNodePtr elem) {
+ htmlNodePtr child;
+
+ if (elem == NULL) return(1);
+ if (xmlStrEqual(name, elem->name)) return(0);
+ if (htmlCheckAutoClose(elem->name, name)) return(1);
+ child = elem->children;
+ while (child != NULL) {
+ if (htmlAutoCloseTag(doc, name, child)) return(1);
+ child = child->next;
+ }
+ return(0);
+}
+
+/**
+ * htmlIsAutoClosed:
+ * @doc: the HTML document
+ * @elem: the HTML element
+ *
+ * The HTML DTD allows a tag to implicitly close other tags.
+ * The list is kept in htmlStartClose array. This function checks
+ * if a tag is autoclosed by one of it's child
+ *
+ * Returns 1 if autoclosed, 0 otherwise
+ */
+int
+htmlIsAutoClosed(htmlDocPtr doc, htmlNodePtr elem) {
+ htmlNodePtr child;
+
+ if (elem == NULL) return(1);
+ child = elem->children;
+ while (child != NULL) {
+ if (htmlAutoCloseTag(doc, elem->name, child)) return(1);
+ child = child->next;
+ }
+ return(0);
+}
+
+/**
+ * htmlCheckImplied:
+ * @ctxt: an HTML parser context
+ * @newtag: The new tag name
+ *
+ * The HTML DTD allows a tag to exists only implicitly
+ * called when a new tag has been detected and generates the
+ * appropriates implicit tags if missing
+ */
+static void
+htmlCheckImplied(htmlParserCtxtPtr ctxt, const xmlChar *newtag) {
+ if (!htmlOmittedDefaultValue)
+ return;
+ if (xmlStrEqual(newtag, BAD_CAST"html"))
+ return;
+ if (ctxt->nameNr <= 0) {
+ htmlnamePush(ctxt, BAD_CAST"html");
+ if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
+ ctxt->sax->startElement(ctxt->userData, BAD_CAST"html", NULL);
+ }
+ if ((xmlStrEqual(newtag, BAD_CAST"body")) || (xmlStrEqual(newtag, BAD_CAST"head")))
+ return;
+ if ((ctxt->nameNr <= 1) &&
+ ((xmlStrEqual(newtag, BAD_CAST"script")) ||
+ (xmlStrEqual(newtag, BAD_CAST"style")) ||
+ (xmlStrEqual(newtag, BAD_CAST"meta")) ||
+ (xmlStrEqual(newtag, BAD_CAST"link")) ||
+ (xmlStrEqual(newtag, BAD_CAST"title")) ||
+ (xmlStrEqual(newtag, BAD_CAST"base")))) {
+ /*
+ * dropped OBJECT ... i you put it first BODY will be
+ * assumed !
+ */
+ htmlnamePush(ctxt, BAD_CAST"head");
+ if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
+ ctxt->sax->startElement(ctxt->userData, BAD_CAST"head", NULL);
+ } else if ((!xmlStrEqual(newtag, BAD_CAST"noframes")) &&
+ (!xmlStrEqual(newtag, BAD_CAST"frame")) &&
+ (!xmlStrEqual(newtag, BAD_CAST"frameset"))) {
+ int i;
+ for (i = 0;i < ctxt->nameNr;i++) {
+ if (xmlStrEqual(ctxt->nameTab[i], BAD_CAST"body")) {
+ return;
+ }
+ if (xmlStrEqual(ctxt->nameTab[i], BAD_CAST"head")) {
+ return;
+ }
+ }
+
+ htmlnamePush(ctxt, BAD_CAST"body");
+ if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
+ ctxt->sax->startElement(ctxt->userData, BAD_CAST"body", NULL);
+ }
+}
+
+/**
+ * htmlCheckParagraph
+ * @ctxt: an HTML parser context
+ *
+ * Check whether a p element need to be implied before inserting
+ * characters in the current element.
+ *
+ * Returns 1 if a paragraph has been inserted, 0 if not and -1
+ * in case of error.
+ */
+
+static int
+htmlCheckParagraph(htmlParserCtxtPtr ctxt) {
+ const xmlChar *tag;
+ int i;
+
+ if (ctxt == NULL)
+ return(-1);
+ tag = ctxt->name;
+ if (tag == NULL) {
+ htmlAutoClose(ctxt, BAD_CAST"p");
+ htmlCheckImplied(ctxt, BAD_CAST"p");
+ htmlnamePush(ctxt, BAD_CAST"p");
+ if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
+ ctxt->sax->startElement(ctxt->userData, BAD_CAST"p", NULL);
+ return(1);
+ }
+ if (!htmlOmittedDefaultValue)
+ return(0);
+ for (i = 0; htmlNoContentElements[i] != NULL; i++) {
+ if (xmlStrEqual(tag, BAD_CAST htmlNoContentElements[i])) {
+ htmlAutoClose(ctxt, BAD_CAST"p");
+ htmlCheckImplied(ctxt, BAD_CAST"p");
+ htmlnamePush(ctxt, BAD_CAST"p");
+ if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
+ ctxt->sax->startElement(ctxt->userData, BAD_CAST"p", NULL);
+ return(1);
+ }
+ }
+ return(0);
+}
+
+/**
+ * htmlIsScriptAttribute:
+ * @name: an attribute name
+ *
+ * Check if an attribute is of content type Script
+ *
+ * Returns 1 is the attribute is a script 0 otherwise
+ */
+int
+htmlIsScriptAttribute(const xmlChar *name) {
+ unsigned int i;
+
+ if (name == NULL)
+ return(0);
+ /*
+ * all script attributes start with 'on'
+ */
+ if ((name[0] != 'o') || (name[1] != 'n'))
+ return(0);
+ for (i = 0;
+ i < sizeof(htmlScriptAttributes)/sizeof(htmlScriptAttributes[0]);
+ i++) {
+ if (xmlStrEqual(name, (const xmlChar *) htmlScriptAttributes[i]))
+ return(1);
+ }
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * The list of HTML predefined entities *
+ * *
+ ************************************************************************/
+
+
+static const htmlEntityDesc html40EntitiesTable[] = {
+/*
+ * the 4 absolute ones, plus apostrophe.
+ */
+{ 34, "quot", "quotation mark = APL quote, U+0022 ISOnum" },
+{ 38, "amp", "ampersand, U+0026 ISOnum" },
+{ 39, "apos", "single quote" },
+{ 60, "lt", "less-than sign, U+003C ISOnum" },
+{ 62, "gt", "greater-than sign, U+003E ISOnum" },
+
+/*
+ * A bunch still in the 128-255 range
+ * Replacing them depend really on the charset used.
+ */
+{ 160, "nbsp", "no-break space = non-breaking space, U+00A0 ISOnum" },
+{ 161, "iexcl","inverted exclamation mark, U+00A1 ISOnum" },
+{ 162, "cent", "cent sign, U+00A2 ISOnum" },
+{ 163, "pound","pound sign, U+00A3 ISOnum" },
+{ 164, "curren","currency sign, U+00A4 ISOnum" },
+{ 165, "yen", "yen sign = yuan sign, U+00A5 ISOnum" },
+{ 166, "brvbar","broken bar = broken vertical bar, U+00A6 ISOnum" },
+{ 167, "sect", "section sign, U+00A7 ISOnum" },
+{ 168, "uml", "diaeresis = spacing diaeresis, U+00A8 ISOdia" },
+{ 169, "copy", "copyright sign, U+00A9 ISOnum" },
+{ 170, "ordf", "feminine ordinal indicator, U+00AA ISOnum" },
+{ 171, "laquo","left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum" },
+{ 172, "not", "not sign, U+00AC ISOnum" },
+{ 173, "shy", "soft hyphen = discretionary hyphen, U+00AD ISOnum" },
+{ 174, "reg", "registered sign = registered trade mark sign, U+00AE ISOnum" },
+{ 175, "macr", "macron = spacing macron = overline = APL overbar, U+00AF ISOdia" },
+{ 176, "deg", "degree sign, U+00B0 ISOnum" },
+{ 177, "plusmn","plus-minus sign = plus-or-minus sign, U+00B1 ISOnum" },
+{ 178, "sup2", "superscript two = superscript digit two = squared, U+00B2 ISOnum" },
+{ 179, "sup3", "superscript three = superscript digit three = cubed, U+00B3 ISOnum" },
+{ 180, "acute","acute accent = spacing acute, U+00B4 ISOdia" },
+{ 181, "micro","micro sign, U+00B5 ISOnum" },
+{ 182, "para", "pilcrow sign = paragraph sign, U+00B6 ISOnum" },
+{ 183, "middot","middle dot = Georgian comma Greek middle dot, U+00B7 ISOnum" },
+{ 184, "cedil","cedilla = spacing cedilla, U+00B8 ISOdia" },
+{ 185, "sup1", "superscript one = superscript digit one, U+00B9 ISOnum" },
+{ 186, "ordm", "masculine ordinal indicator, U+00BA ISOnum" },
+{ 187, "raquo","right-pointing double angle quotation mark right pointing guillemet, U+00BB ISOnum" },
+{ 188, "frac14","vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum" },
+{ 189, "frac12","vulgar fraction one half = fraction one half, U+00BD ISOnum" },
+{ 190, "frac34","vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum" },
+{ 191, "iquest","inverted question mark = turned question mark, U+00BF ISOnum" },
+{ 192, "Agrave","latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1" },
+{ 193, "Aacute","latin capital letter A with acute, U+00C1 ISOlat1" },
+{ 194, "Acirc","latin capital letter A with circumflex, U+00C2 ISOlat1" },
+{ 195, "Atilde","latin capital letter A with tilde, U+00C3 ISOlat1" },
+{ 196, "Auml", "latin capital letter A with diaeresis, U+00C4 ISOlat1" },
+{ 197, "Aring","latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1" },
+{ 198, "AElig","latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1" },
+{ 199, "Ccedil","latin capital letter C with cedilla, U+00C7 ISOlat1" },
+{ 200, "Egrave","latin capital letter E with grave, U+00C8 ISOlat1" },
+{ 201, "Eacute","latin capital letter E with acute, U+00C9 ISOlat1" },
+{ 202, "Ecirc","latin capital letter E with circumflex, U+00CA ISOlat1" },
+{ 203, "Euml", "latin capital letter E with diaeresis, U+00CB ISOlat1" },
+{ 204, "Igrave","latin capital letter I with grave, U+00CC ISOlat1" },
+{ 205, "Iacute","latin capital letter I with acute, U+00CD ISOlat1" },
+{ 206, "Icirc","latin capital letter I with circumflex, U+00CE ISOlat1" },
+{ 207, "Iuml", "latin capital letter I with diaeresis, U+00CF ISOlat1" },
+{ 208, "ETH", "latin capital letter ETH, U+00D0 ISOlat1" },
+{ 209, "Ntilde","latin capital letter N with tilde, U+00D1 ISOlat1" },
+{ 210, "Ograve","latin capital letter O with grave, U+00D2 ISOlat1" },
+{ 211, "Oacute","latin capital letter O with acute, U+00D3 ISOlat1" },
+{ 212, "Ocirc","latin capital letter O with circumflex, U+00D4 ISOlat1" },
+{ 213, "Otilde","latin capital letter O with tilde, U+00D5 ISOlat1" },
+{ 214, "Ouml", "latin capital letter O with diaeresis, U+00D6 ISOlat1" },
+{ 215, "times","multiplication sign, U+00D7 ISOnum" },
+{ 216, "Oslash","latin capital letter O with stroke latin capital letter O slash, U+00D8 ISOlat1" },
+{ 217, "Ugrave","latin capital letter U with grave, U+00D9 ISOlat1" },
+{ 218, "Uacute","latin capital letter U with acute, U+00DA ISOlat1" },
+{ 219, "Ucirc","latin capital letter U with circumflex, U+00DB ISOlat1" },
+{ 220, "Uuml", "latin capital letter U with diaeresis, U+00DC ISOlat1" },
+{ 221, "Yacute","latin capital letter Y with acute, U+00DD ISOlat1" },
+{ 222, "THORN","latin capital letter THORN, U+00DE ISOlat1" },
+{ 223, "szlig","latin small letter sharp s = ess-zed, U+00DF ISOlat1" },
+{ 224, "agrave","latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1" },
+{ 225, "aacute","latin small letter a with acute, U+00E1 ISOlat1" },
+{ 226, "acirc","latin small letter a with circumflex, U+00E2 ISOlat1" },
+{ 227, "atilde","latin small letter a with tilde, U+00E3 ISOlat1" },
+{ 228, "auml", "latin small letter a with diaeresis, U+00E4 ISOlat1" },
+{ 229, "aring","latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1" },
+{ 230, "aelig","latin small letter ae = latin small ligature ae, U+00E6 ISOlat1" },
+{ 231, "ccedil","latin small letter c with cedilla, U+00E7 ISOlat1" },
+{ 232, "egrave","latin small letter e with grave, U+00E8 ISOlat1" },
+{ 233, "eacute","latin small letter e with acute, U+00E9 ISOlat1" },
+{ 234, "ecirc","latin small letter e with circumflex, U+00EA ISOlat1" },
+{ 235, "euml", "latin small letter e with diaeresis, U+00EB ISOlat1" },
+{ 236, "igrave","latin small letter i with grave, U+00EC ISOlat1" },
+{ 237, "iacute","latin small letter i with acute, U+00ED ISOlat1" },
+{ 238, "icirc","latin small letter i with circumflex, U+00EE ISOlat1" },
+{ 239, "iuml", "latin small letter i with diaeresis, U+00EF ISOlat1" },
+{ 240, "eth", "latin small letter eth, U+00F0 ISOlat1" },
+{ 241, "ntilde","latin small letter n with tilde, U+00F1 ISOlat1" },
+{ 242, "ograve","latin small letter o with grave, U+00F2 ISOlat1" },
+{ 243, "oacute","latin small letter o with acute, U+00F3 ISOlat1" },
+{ 244, "ocirc","latin small letter o with circumflex, U+00F4 ISOlat1" },
+{ 245, "otilde","latin small letter o with tilde, U+00F5 ISOlat1" },
+{ 246, "ouml", "latin small letter o with diaeresis, U+00F6 ISOlat1" },
+{ 247, "divide","division sign, U+00F7 ISOnum" },
+{ 248, "oslash","latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1" },
+{ 249, "ugrave","latin small letter u with grave, U+00F9 ISOlat1" },
+{ 250, "uacute","latin small letter u with acute, U+00FA ISOlat1" },
+{ 251, "ucirc","latin small letter u with circumflex, U+00FB ISOlat1" },
+{ 252, "uuml", "latin small letter u with diaeresis, U+00FC ISOlat1" },
+{ 253, "yacute","latin small letter y with acute, U+00FD ISOlat1" },
+{ 254, "thorn","latin small letter thorn with, U+00FE ISOlat1" },
+{ 255, "yuml", "latin small letter y with diaeresis, U+00FF ISOlat1" },
+
+{ 338, "OElig","latin capital ligature OE, U+0152 ISOlat2" },
+{ 339, "oelig","latin small ligature oe, U+0153 ISOlat2" },
+{ 352, "Scaron","latin capital letter S with caron, U+0160 ISOlat2" },
+{ 353, "scaron","latin small letter s with caron, U+0161 ISOlat2" },
+{ 376, "Yuml", "latin capital letter Y with diaeresis, U+0178 ISOlat2" },
+
+/*
+ * Anything below should really be kept as entities references
+ */
+{ 402, "fnof", "latin small f with hook = function = florin, U+0192 ISOtech" },
+
+{ 710, "circ", "modifier letter circumflex accent, U+02C6 ISOpub" },
+{ 732, "tilde","small tilde, U+02DC ISOdia" },
+
+{ 913, "Alpha","greek capital letter alpha, U+0391" },
+{ 914, "Beta", "greek capital letter beta, U+0392" },
+{ 915, "Gamma","greek capital letter gamma, U+0393 ISOgrk3" },
+{ 916, "Delta","greek capital letter delta, U+0394 ISOgrk3" },
+{ 917, "Epsilon","greek capital letter epsilon, U+0395" },
+{ 918, "Zeta", "greek capital letter zeta, U+0396" },
+{ 919, "Eta", "greek capital letter eta, U+0397" },
+{ 920, "Theta","greek capital letter theta, U+0398 ISOgrk3" },
+{ 921, "Iota", "greek capital letter iota, U+0399" },
+{ 922, "Kappa","greek capital letter kappa, U+039A" },
+{ 923, "Lambda", "greek capital letter lambda, U+039B ISOgrk3" },
+{ 924, "Mu", "greek capital letter mu, U+039C" },
+{ 925, "Nu", "greek capital letter nu, U+039D" },
+{ 926, "Xi", "greek capital letter xi, U+039E ISOgrk3" },
+{ 927, "Omicron","greek capital letter omicron, U+039F" },
+{ 928, "Pi", "greek capital letter pi, U+03A0 ISOgrk3" },
+{ 929, "Rho", "greek capital letter rho, U+03A1" },
+{ 931, "Sigma","greek capital letter sigma, U+03A3 ISOgrk3" },
+{ 932, "Tau", "greek capital letter tau, U+03A4" },
+{ 933, "Upsilon","greek capital letter upsilon, U+03A5 ISOgrk3" },
+{ 934, "Phi", "greek capital letter phi, U+03A6 ISOgrk3" },
+{ 935, "Chi", "greek capital letter chi, U+03A7" },
+{ 936, "Psi", "greek capital letter psi, U+03A8 ISOgrk3" },
+{ 937, "Omega","greek capital letter omega, U+03A9 ISOgrk3" },
+
+{ 945, "alpha","greek small letter alpha, U+03B1 ISOgrk3" },
+{ 946, "beta", "greek small letter beta, U+03B2 ISOgrk3" },
+{ 947, "gamma","greek small letter gamma, U+03B3 ISOgrk3" },
+{ 948, "delta","greek small letter delta, U+03B4 ISOgrk3" },
+{ 949, "epsilon","greek small letter epsilon, U+03B5 ISOgrk3" },
+{ 950, "zeta", "greek small letter zeta, U+03B6 ISOgrk3" },
+{ 951, "eta", "greek small letter eta, U+03B7 ISOgrk3" },
+{ 952, "theta","greek small letter theta, U+03B8 ISOgrk3" },
+{ 953, "iota", "greek small letter iota, U+03B9 ISOgrk3" },
+{ 954, "kappa","greek small letter kappa, U+03BA ISOgrk3" },
+{ 955, "lambda","greek small letter lambda, U+03BB ISOgrk3" },
+{ 956, "mu", "greek small letter mu, U+03BC ISOgrk3" },
+{ 957, "nu", "greek small letter nu, U+03BD ISOgrk3" },
+{ 958, "xi", "greek small letter xi, U+03BE ISOgrk3" },
+{ 959, "omicron","greek small letter omicron, U+03BF NEW" },
+{ 960, "pi", "greek small letter pi, U+03C0 ISOgrk3" },
+{ 961, "rho", "greek small letter rho, U+03C1 ISOgrk3" },
+{ 962, "sigmaf","greek small letter final sigma, U+03C2 ISOgrk3" },
+{ 963, "sigma","greek small letter sigma, U+03C3 ISOgrk3" },
+{ 964, "tau", "greek small letter tau, U+03C4 ISOgrk3" },
+{ 965, "upsilon","greek small letter upsilon, U+03C5 ISOgrk3" },
+{ 966, "phi", "greek small letter phi, U+03C6 ISOgrk3" },
+{ 967, "chi", "greek small letter chi, U+03C7 ISOgrk3" },
+{ 968, "psi", "greek small letter psi, U+03C8 ISOgrk3" },
+{ 969, "omega","greek small letter omega, U+03C9 ISOgrk3" },
+{ 977, "thetasym","greek small letter theta symbol, U+03D1 NEW" },
+{ 978, "upsih","greek upsilon with hook symbol, U+03D2 NEW" },
+{ 982, "piv", "greek pi symbol, U+03D6 ISOgrk3" },
+
+{ 8194, "ensp", "en space, U+2002 ISOpub" },
+{ 8195, "emsp", "em space, U+2003 ISOpub" },
+{ 8201, "thinsp","thin space, U+2009 ISOpub" },
+{ 8204, "zwnj", "zero width non-joiner, U+200C NEW RFC 2070" },
+{ 8205, "zwj", "zero width joiner, U+200D NEW RFC 2070" },
+{ 8206, "lrm", "left-to-right mark, U+200E NEW RFC 2070" },
+{ 8207, "rlm", "right-to-left mark, U+200F NEW RFC 2070" },
+{ 8211, "ndash","en dash, U+2013 ISOpub" },
+{ 8212, "mdash","em dash, U+2014 ISOpub" },
+{ 8216, "lsquo","left single quotation mark, U+2018 ISOnum" },
+{ 8217, "rsquo","right single quotation mark, U+2019 ISOnum" },
+{ 8218, "sbquo","single low-9 quotation mark, U+201A NEW" },
+{ 8220, "ldquo","left double quotation mark, U+201C ISOnum" },
+{ 8221, "rdquo","right double quotation mark, U+201D ISOnum" },
+{ 8222, "bdquo","double low-9 quotation mark, U+201E NEW" },
+{ 8224, "dagger","dagger, U+2020 ISOpub" },
+{ 8225, "Dagger","double dagger, U+2021 ISOpub" },
+
+{ 8226, "bull", "bullet = black small circle, U+2022 ISOpub" },
+{ 8230, "hellip","horizontal ellipsis = three dot leader, U+2026 ISOpub" },
+
+{ 8240, "permil","per mille sign, U+2030 ISOtech" },
+
+{ 8242, "prime","prime = minutes = feet, U+2032 ISOtech" },
+{ 8243, "Prime","double prime = seconds = inches, U+2033 ISOtech" },
+
+{ 8249, "lsaquo","single left-pointing angle quotation mark, U+2039 ISO proposed" },
+{ 8250, "rsaquo","single right-pointing angle quotation mark, U+203A ISO proposed" },
+
+{ 8254, "oline","overline = spacing overscore, U+203E NEW" },
+{ 8260, "frasl","fraction slash, U+2044 NEW" },
+
+{ 8364, "euro", "euro sign, U+20AC NEW" },
+
+{ 8465, "image","blackletter capital I = imaginary part, U+2111 ISOamso" },
+{ 8472, "weierp","script capital P = power set = Weierstrass p, U+2118 ISOamso" },
+{ 8476, "real", "blackletter capital R = real part symbol, U+211C ISOamso" },
+{ 8482, "trade","trade mark sign, U+2122 ISOnum" },
+{ 8501, "alefsym","alef symbol = first transfinite cardinal, U+2135 NEW" },
+{ 8592, "larr", "leftwards arrow, U+2190 ISOnum" },
+{ 8593, "uarr", "upwards arrow, U+2191 ISOnum" },
+{ 8594, "rarr", "rightwards arrow, U+2192 ISOnum" },
+{ 8595, "darr", "downwards arrow, U+2193 ISOnum" },
+{ 8596, "harr", "left right arrow, U+2194 ISOamsa" },
+{ 8629, "crarr","downwards arrow with corner leftwards = carriage return, U+21B5 NEW" },
+{ 8656, "lArr", "leftwards double arrow, U+21D0 ISOtech" },
+{ 8657, "uArr", "upwards double arrow, U+21D1 ISOamsa" },
+{ 8658, "rArr", "rightwards double arrow, U+21D2 ISOtech" },
+{ 8659, "dArr", "downwards double arrow, U+21D3 ISOamsa" },
+{ 8660, "hArr", "left right double arrow, U+21D4 ISOamsa" },
+
+{ 8704, "forall","for all, U+2200 ISOtech" },
+{ 8706, "part", "partial differential, U+2202 ISOtech" },
+{ 8707, "exist","there exists, U+2203 ISOtech" },
+{ 8709, "empty","empty set = null set = diameter, U+2205 ISOamso" },
+{ 8711, "nabla","nabla = backward difference, U+2207 ISOtech" },
+{ 8712, "isin", "element of, U+2208 ISOtech" },
+{ 8713, "notin","not an element of, U+2209 ISOtech" },
+{ 8715, "ni", "contains as member, U+220B ISOtech" },
+{ 8719, "prod", "n-ary product = product sign, U+220F ISOamsb" },
+{ 8721, "sum", "n-ary summation, U+2211 ISOamsb" },
+{ 8722, "minus","minus sign, U+2212 ISOtech" },
+{ 8727, "lowast","asterisk operator, U+2217 ISOtech" },
+{ 8730, "radic","square root = radical sign, U+221A ISOtech" },
+{ 8733, "prop", "proportional to, U+221D ISOtech" },
+{ 8734, "infin","infinity, U+221E ISOtech" },
+{ 8736, "ang", "angle, U+2220 ISOamso" },
+{ 8743, "and", "logical and = wedge, U+2227 ISOtech" },
+{ 8744, "or", "logical or = vee, U+2228 ISOtech" },
+{ 8745, "cap", "intersection = cap, U+2229 ISOtech" },
+{ 8746, "cup", "union = cup, U+222A ISOtech" },
+{ 8747, "int", "integral, U+222B ISOtech" },
+{ 8756, "there4","therefore, U+2234 ISOtech" },
+{ 8764, "sim", "tilde operator = varies with = similar to, U+223C ISOtech" },
+{ 8773, "cong", "approximately equal to, U+2245 ISOtech" },
+{ 8776, "asymp","almost equal to = asymptotic to, U+2248 ISOamsr" },
+{ 8800, "ne", "not equal to, U+2260 ISOtech" },
+{ 8801, "equiv","identical to, U+2261 ISOtech" },
+{ 8804, "le", "less-than or equal to, U+2264 ISOtech" },
+{ 8805, "ge", "greater-than or equal to, U+2265 ISOtech" },
+{ 8834, "sub", "subset of, U+2282 ISOtech" },
+{ 8835, "sup", "superset of, U+2283 ISOtech" },
+{ 8836, "nsub", "not a subset of, U+2284 ISOamsn" },
+{ 8838, "sube", "subset of or equal to, U+2286 ISOtech" },
+{ 8839, "supe", "superset of or equal to, U+2287 ISOtech" },
+{ 8853, "oplus","circled plus = direct sum, U+2295 ISOamsb" },
+{ 8855, "otimes","circled times = vector product, U+2297 ISOamsb" },
+{ 8869, "perp", "up tack = orthogonal to = perpendicular, U+22A5 ISOtech" },
+{ 8901, "sdot", "dot operator, U+22C5 ISOamsb" },
+{ 8968, "lceil","left ceiling = apl upstile, U+2308 ISOamsc" },
+{ 8969, "rceil","right ceiling, U+2309 ISOamsc" },
+{ 8970, "lfloor","left floor = apl downstile, U+230A ISOamsc" },
+{ 8971, "rfloor","right floor, U+230B ISOamsc" },
+{ 9001, "lang", "left-pointing angle bracket = bra, U+2329 ISOtech" },
+{ 9002, "rang", "right-pointing angle bracket = ket, U+232A ISOtech" },
+{ 9674, "loz", "lozenge, U+25CA ISOpub" },
+
+{ 9824, "spades","black spade suit, U+2660 ISOpub" },
+{ 9827, "clubs","black club suit = shamrock, U+2663 ISOpub" },
+{ 9829, "hearts","black heart suit = valentine, U+2665 ISOpub" },
+{ 9830, "diams","black diamond suit, U+2666 ISOpub" },
+
+};
+
+/************************************************************************
+ * *
+ * Commodity functions to handle entities *
+ * *
+ ************************************************************************/
+
+/*
+ * Macro used to grow the current buffer.
+ */
+#define growBuffer(buffer) { \
+ buffer##_size *= 2; \
+ buffer = (xmlChar *) xmlRealloc(buffer, buffer##_size * sizeof(xmlChar)); \
+ if (buffer == NULL) { \
+ htmlErrMemory(ctxt, "growing buffer\n"); \
+ return(NULL); \
+ } \
+}
+
+/**
+ * htmlEntityLookup:
+ * @name: the entity name
+ *
+ * Lookup the given entity in EntitiesTable
+ *
+ * TODO: the linear scan is really ugly, an hash table is really needed.
+ *
+ * Returns the associated htmlEntityDescPtr if found, NULL otherwise.
+ */
+const htmlEntityDesc *
+htmlEntityLookup(const xmlChar *name) {
+ unsigned int i;
+
+ for (i = 0;i < (sizeof(html40EntitiesTable)/
+ sizeof(html40EntitiesTable[0]));i++) {
+ if (xmlStrEqual(name, BAD_CAST html40EntitiesTable[i].name)) {
+ return((htmlEntityDescPtr) &html40EntitiesTable[i]);
+ }
+ }
+ return(NULL);
+}
+
+/**
+ * htmlEntityValueLookup:
+ * @value: the entity's unicode value
+ *
+ * Lookup the given entity in EntitiesTable
+ *
+ * TODO: the linear scan is really ugly, an hash table is really needed.
+ *
+ * Returns the associated htmlEntityDescPtr if found, NULL otherwise.
+ */
+const htmlEntityDesc *
+htmlEntityValueLookup(unsigned int value) {
+ unsigned int i;
+
+ for (i = 0;i < (sizeof(html40EntitiesTable)/
+ sizeof(html40EntitiesTable[0]));i++) {
+ if (html40EntitiesTable[i].value >= value) {
+ if (html40EntitiesTable[i].value > value)
+ break;
+ return((htmlEntityDescPtr) &html40EntitiesTable[i]);
+ }
+ }
+ return(NULL);
+}
+
+/**
+ * UTF8ToHtml:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an ASCII
+ * plus HTML entities block of chars out.
+ *
+ * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
+ * The value of @inlen after return is the number of octets consumed
+ * as the return value is positive, else unpredictable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+int
+UTF8ToHtml(unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ const unsigned char* processed = in;
+ const unsigned char* outend;
+ const unsigned char* outstart = out;
+ const unsigned char* instart = in;
+ const unsigned char* inend;
+ unsigned int c, d;
+ int trailing;
+
+ if (in == NULL) {
+ /*
+ * initialization nothing to do
+ */
+ *outlen = 0;
+ *inlen = 0;
+ return(0);
+ }
+ inend = in + (*inlen);
+ outend = out + (*outlen);
+ while (in < inend) {
+ d = *in++;
+ if (d < 0x80) { c= d; trailing= 0; }
+ else if (d < 0xC0) {
+ /* trailing byte in leading position */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
+ else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
+ else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
+ else {
+ /* no chance for this in Ascii */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+
+ if (inend - in < trailing) {
+ break;
+ }
+
+ for ( ; trailing; trailing--) {
+ if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80))
+ break;
+ c <<= 6;
+ c |= d & 0x3F;
+ }
+
+ /* assertion: c is a single UTF-4 value */
+ if (c < 0x80) {
+ if (out + 1 >= outend)
+ break;
+ *out++ = c;
+ } else {
+ int len;
+ const htmlEntityDesc * ent;
+
+ /*
+ * Try to lookup a predefined HTML entity for it
+ */
+
+ ent = htmlEntityValueLookup(c);
+ if (ent == NULL) {
+ /* no chance for this in Ascii */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+ len = strlen(ent->name);
+ if (out + 2 + len >= outend)
+ break;
+ *out++ = '&';
+ memcpy(out, ent->name, len);
+ out += len;
+ *out++ = ';';
+ }
+ processed = in;
+ }
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(0);
+}
+
+/**
+ * htmlEncodeEntities:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ * @quoteChar: the quote character to escape (' or ") or zero.
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an ASCII
+ * plus HTML entities block of chars out.
+ *
+ * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
+ * The value of @inlen after return is the number of octets consumed
+ * as the return value is positive, else unpredictable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+int
+htmlEncodeEntities(unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen, int quoteChar) {
+ const unsigned char* processed = in;
+ const unsigned char* outend = out + (*outlen);
+ const unsigned char* outstart = out;
+ const unsigned char* instart = in;
+ const unsigned char* inend = in + (*inlen);
+ unsigned int c, d;
+ int trailing;
+
+ while (in < inend) {
+ d = *in++;
+ if (d < 0x80) { c= d; trailing= 0; }
+ else if (d < 0xC0) {
+ /* trailing byte in leading position */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
+ else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
+ else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
+ else {
+ /* no chance for this in Ascii */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+
+ if (inend - in < trailing)
+ break;
+
+ while (trailing--) {
+ if (((d= *in++) & 0xC0) != 0x80) {
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+ c <<= 6;
+ c |= d & 0x3F;
+ }
+
+ /* assertion: c is a single UTF-4 value */
+ if ((c < 0x80) && (c != (unsigned int) quoteChar) &&
+ (c != '&') && (c != '<') && (c != '>')) {
+ if (out >= outend)
+ break;
+ *out++ = c;
+ } else {
+ const htmlEntityDesc * ent;
+ const char *cp;
+ char nbuf[16];
+ int len;
+
+ /*
+ * Try to lookup a predefined HTML entity for it
+ */
+ ent = htmlEntityValueLookup(c);
+ if (ent == NULL) {
+ snprintf(nbuf, sizeof(nbuf), "#%u", c);
+ cp = nbuf;
+ }
+ else
+ cp = ent->name;
+ len = strlen(cp);
+ if (out + 2 + len > outend)
+ break;
+ *out++ = '&';
+ memcpy(out, cp, len);
+ out += len;
+ *out++ = ';';
+ }
+ processed = in;
+ }
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * Commodity functions to handle streams *
+ * *
+ ************************************************************************/
+
+/**
+ * htmlNewInputStream:
+ * @ctxt: an HTML parser context
+ *
+ * Create a new input stream structure
+ * Returns the new input stream or NULL
+ */
+static htmlParserInputPtr
+htmlNewInputStream(htmlParserCtxtPtr ctxt) {
+ htmlParserInputPtr input;
+
+ input = (xmlParserInputPtr) xmlMalloc(sizeof(htmlParserInput));
+ if (input == NULL) {
+ htmlErrMemory(ctxt, "couldn't allocate a new input stream\n");
+ return(NULL);
+ }
+ memset(input, 0, sizeof(htmlParserInput));
+ input->filename = NULL;
+ input->directory = NULL;
+ input->base = NULL;
+ input->cur = NULL;
+ input->buf = NULL;
+ input->line = 1;
+ input->col = 1;
+ input->buf = NULL;
+ input->free = NULL;
+ input->version = NULL;
+ input->consumed = 0;
+ input->length = 0;
+ return(input);
+}
+
+
+/************************************************************************
+ * *
+ * Commodity functions, cleanup needed ? *
+ * *
+ ************************************************************************/
+/*
+ * all tags allowing pc data from the html 4.01 loose dtd
+ * NOTE: it might be more apropriate to integrate this information
+ * into the html40ElementTable array but I don't want to risk any
+ * binary incomptibility
+ */
+static const char *allowPCData[] = {
+ "a", "abbr", "acronym", "address", "applet", "b", "bdo", "big",
+ "blockquote", "body", "button", "caption", "center", "cite", "code",
+ "dd", "del", "dfn", "div", "dt", "em", "font", "form", "h1", "h2",
+ "h3", "h4", "h5", "h6", "i", "iframe", "ins", "kbd", "label", "legend",
+ "li", "noframes", "noscript", "object", "p", "pre", "q", "s", "samp",
+ "small", "span", "strike", "strong", "td", "th", "tt", "u", "var"
+};
+
+/**
+ * areBlanks:
+ * @ctxt: an HTML parser context
+ * @str: a xmlChar *
+ * @len: the size of @str
+ *
+ * Is this a sequence of blank chars that one can ignore ?
+ *
+ * Returns 1 if ignorable 0 otherwise.
+ */
+
+static int areBlanks(htmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
+ unsigned int i;
+ int j;
+ xmlNodePtr lastChild;
+
+ for (j = 0;j < len;j++)
+ if (!(IS_BLANK_CH(str[j]))) return(0);
+
+ if (CUR == 0) return(1);
+ if (CUR != '<') return(0);
+ if (ctxt->name == NULL)
+ return(1);
+ if (xmlStrEqual(ctxt->name, BAD_CAST"html"))
+ return(1);
+ if (xmlStrEqual(ctxt->name, BAD_CAST"head"))
+ return(1);
+ if (xmlStrEqual(ctxt->name, BAD_CAST"body"))
+ return(1);
+ if (ctxt->node == NULL) return(0);
+ lastChild = xmlGetLastChild(ctxt->node);
+ if (lastChild == NULL) {
+ if ((ctxt->node->type != XML_ELEMENT_NODE) &&
+ (ctxt->node->content != NULL)) return(0);
+ /* keep ws in constructs like ...<b> </b>...
+ for all tags "b" allowing PCDATA */
+ for ( i = 0; i < sizeof(allowPCData)/sizeof(allowPCData[0]); i++ ) {
+ if ( xmlStrEqual(ctxt->name, BAD_CAST allowPCData[i]) ) {
+ return(0);
+ }
+ }
+ } else if (xmlNodeIsText(lastChild)) {
+ return(0);
+ } else {
+ /* keep ws in constructs like <p><b>xy</b> <i>z</i><p>
+ for all tags "p" allowing PCDATA */
+ for ( i = 0; i < sizeof(allowPCData)/sizeof(allowPCData[0]); i++ ) {
+ if ( xmlStrEqual(lastChild->name, BAD_CAST allowPCData[i]) ) {
+ return(0);
+ }
+ }
+ }
+ return(1);
+}
+
+/**
+ * htmlNewDocNoDtD:
+ * @URI: URI for the dtd, or NULL
+ * @ExternalID: the external ID of the DTD, or NULL
+ *
+ * Creates a new HTML document without a DTD node if @URI and @ExternalID
+ * are NULL
+ *
+ * Returns a new document, do not initialize the DTD if not provided
+ */
+htmlDocPtr
+htmlNewDocNoDtD(const xmlChar *URI, const xmlChar *ExternalID) {
+ xmlDocPtr cur;
+
+ /*
+ * Allocate a new document and fill the fields.
+ */
+ cur = (xmlDocPtr) xmlMalloc(sizeof(xmlDoc));
+ if (cur == NULL) {
+ htmlErrMemory(NULL, "HTML document creation failed\n");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlDoc));
+
+ cur->type = XML_HTML_DOCUMENT_NODE;
+ cur->version = NULL;
+ cur->intSubset = NULL;
+ cur->doc = cur;
+ cur->name = NULL;
+ cur->children = NULL;
+ cur->extSubset = NULL;
+ cur->oldNs = NULL;
+ cur->encoding = NULL;
+ cur->standalone = 1;
+ cur->compression = 0;
+ cur->ids = NULL;
+ cur->refs = NULL;
+ cur->_private = NULL;
+ if ((ExternalID != NULL) ||
+ (URI != NULL))
+ xmlCreateIntSubset(cur, BAD_CAST "html", ExternalID, URI);
+ return(cur);
+}
+
+/**
+ * htmlNewDoc:
+ * @URI: URI for the dtd, or NULL
+ * @ExternalID: the external ID of the DTD, or NULL
+ *
+ * Creates a new HTML document
+ *
+ * Returns a new document
+ */
+htmlDocPtr
+htmlNewDoc(const xmlChar *URI, const xmlChar *ExternalID) {
+ if ((URI == NULL) && (ExternalID == NULL))
+ return(htmlNewDocNoDtD(
+ BAD_CAST "http://www.w3.org/TR/REC-html40/loose.dtd",
+ BAD_CAST "-//W3C//DTD HTML 4.0 Transitional//EN"));
+
+ return(htmlNewDocNoDtD(URI, ExternalID));
+}
+
+
+/************************************************************************
+ * *
+ * The parser itself *
+ * Relates to http://www.w3.org/TR/html40 *
+ * *
+ ************************************************************************/
+
+/************************************************************************
+ * *
+ * The parser itself *
+ * *
+ ************************************************************************/
+
+static const xmlChar * htmlParseNameComplex(xmlParserCtxtPtr ctxt);
+
+/**
+ * htmlParseHTMLName:
+ * @ctxt: an HTML parser context
+ *
+ * parse an HTML tag or attribute name, note that we convert it to lowercase
+ * since HTML names are not case-sensitive.
+ *
+ * Returns the Tag Name parsed or NULL
+ */
+
+static const xmlChar *
+htmlParseHTMLName(htmlParserCtxtPtr ctxt) {
+ int i = 0;
+ xmlChar loc[HTML_PARSER_BUFFER_SIZE];
+
+ if (!IS_LETTER_CH(CUR) && (CUR != '_') &&
+ (CUR != ':')) return(NULL);
+
+ while ((i < HTML_PARSER_BUFFER_SIZE) &&
+ ((IS_LETTER_CH(CUR)) || (IS_DIGIT_CH(CUR)) ||
+ (CUR == ':') || (CUR == '-') || (CUR == '_'))) {
+ if ((CUR >= 'A') && (CUR <= 'Z')) loc[i] = CUR + 0x20;
+ else loc[i] = CUR;
+ i++;
+
+ NEXT;
+ }
+
+ return(xmlDictLookup(ctxt->dict, loc, i));
+}
+
+/**
+ * htmlParseName:
+ * @ctxt: an HTML parser context
+ *
+ * parse an HTML name, this routine is case sensitive.
+ *
+ * Returns the Name parsed or NULL
+ */
+
+static const xmlChar *
+htmlParseName(htmlParserCtxtPtr ctxt) {
+ const xmlChar *in;
+ const xmlChar *ret;
+ int count = 0;
+
+ GROW;
+
+ /*
+ * Accelerator for simple ASCII names
+ */
+ in = ctxt->input->cur;
+ if (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ (*in == '_') || (*in == ':')) {
+ in++;
+ while (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ ((*in >= 0x30) && (*in <= 0x39)) ||
+ (*in == '_') || (*in == '-') ||
+ (*in == ':') || (*in == '.'))
+ in++;
+ if ((*in > 0) && (*in < 0x80)) {
+ count = in - ctxt->input->cur;
+ ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count);
+ ctxt->input->cur = in;
+ ctxt->nbChars += count;
+ ctxt->input->col += count;
+ return(ret);
+ }
+ }
+ return(htmlParseNameComplex(ctxt));
+}
+
+static const xmlChar *
+htmlParseNameComplex(xmlParserCtxtPtr ctxt) {
+ int len = 0, l;
+ int c;
+ int count = 0;
+
+ /*
+ * Handler for more complex cases
+ */
+ GROW;
+ c = CUR_CHAR(l);
+ if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
+ (!IS_LETTER(c) && (c != '_') &&
+ (c != ':'))) {
+ return(NULL);
+ }
+
+ while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
+ ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
+ (c == '.') || (c == '-') ||
+ (c == '_') || (c == ':') ||
+ (IS_COMBINING(c)) ||
+ (IS_EXTENDER(c)))) {
+ if (count++ > 100) {
+ count = 0;
+ GROW;
+ }
+ len += l;
+ NEXTL(l);
+ c = CUR_CHAR(l);
+ }
+ return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len));
+}
+
+
+/**
+ * htmlParseHTMLAttribute:
+ * @ctxt: an HTML parser context
+ * @stop: a char stop value
+ *
+ * parse an HTML attribute value till the stop (quote), if
+ * stop is 0 then it stops at the first space
+ *
+ * Returns the attribute parsed or NULL
+ */
+
+static xmlChar *
+htmlParseHTMLAttribute(htmlParserCtxtPtr ctxt, const xmlChar stop) {
+ xmlChar *buffer = NULL;
+ int buffer_size = 0;
+ xmlChar *out = NULL;
+ const xmlChar *name = NULL;
+ const xmlChar *cur = NULL;
+ const htmlEntityDesc * ent;
+
+ /*
+ * allocate a translation buffer.
+ */
+ buffer_size = HTML_PARSER_BUFFER_SIZE;
+ buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar));
+ if (buffer == NULL) {
+ htmlErrMemory(ctxt, "buffer allocation failed\n");
+ return(NULL);
+ }
+ out = buffer;
+
+ /*
+ * Ok loop until we reach one of the ending chars
+ */
+ while ((CUR != 0) && (CUR != stop)) {
+ if ((stop == 0) && (CUR == '>')) break;
+ if ((stop == 0) && (IS_BLANK_CH(CUR))) break;
+ if (CUR == '&') {
+ if (NXT(1) == '#') {
+ unsigned int c;
+ int bits;
+
+ c = htmlParseCharRef(ctxt);
+ if (c < 0x80)
+ { *out++ = c; bits= -6; }
+ else if (c < 0x800)
+ { *out++ =((c >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (c < 0x10000)
+ { *out++ =((c >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else
+ { *out++ =((c >> 18) & 0x07) | 0xF0; bits= 12; }
+
+ for ( ; bits >= 0; bits-= 6) {
+ *out++ = ((c >> bits) & 0x3F) | 0x80;
+ }
+
+ if (out - buffer > buffer_size - 100) {
+ int indx = out - buffer;
+
+ growBuffer(buffer);
+ out = &buffer[indx];
+ }
+ } else {
+ ent = htmlParseEntityRef(ctxt, &name);
+ if (name == NULL) {
+ *out++ = '&';
+ if (out - buffer > buffer_size - 100) {
+ int indx = out - buffer;
+
+ growBuffer(buffer);
+ out = &buffer[indx];
+ }
+ } else if (ent == NULL) {
+ *out++ = '&';
+ cur = name;
+ while (*cur != 0) {
+ if (out - buffer > buffer_size - 100) {
+ int indx = out - buffer;
+
+ growBuffer(buffer);
+ out = &buffer[indx];
+ }
+ *out++ = *cur++;
+ }
+ } else {
+ unsigned int c;
+ int bits;
+
+ if (out - buffer > buffer_size - 100) {
+ int indx = out - buffer;
+
+ growBuffer(buffer);
+ out = &buffer[indx];
+ }
+ c = (xmlChar)ent->value;
+ if (c < 0x80)
+ { *out++ = c; bits= -6; }
+ else if (c < 0x800)
+ { *out++ =((c >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (c < 0x10000)
+ { *out++ =((c >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else
+ { *out++ =((c >> 18) & 0x07) | 0xF0; bits= 12; }
+
+ for ( ; bits >= 0; bits-= 6) {
+ *out++ = ((c >> bits) & 0x3F) | 0x80;
+ }
+ }
+ }
+ } else {
+ unsigned int c;
+ int bits, l;
+
+ if (out - buffer > buffer_size - 100) {
+ int indx = out - buffer;
+
+ growBuffer(buffer);
+ out = &buffer[indx];
+ }
+ c = CUR_CHAR(l);
+ if (c < 0x80)
+ { *out++ = c; bits= -6; }
+ else if (c < 0x800)
+ { *out++ =((c >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (c < 0x10000)
+ { *out++ =((c >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else
+ { *out++ =((c >> 18) & 0x07) | 0xF0; bits= 12; }
+
+ for ( ; bits >= 0; bits-= 6) {
+ *out++ = ((c >> bits) & 0x3F) | 0x80;
+ }
+ NEXT;
+ }
+ }
+ *out++ = 0;
+ return(buffer);
+}
+
+/**
+ * htmlParseEntityRef:
+ * @ctxt: an HTML parser context
+ * @str: location to store the entity name
+ *
+ * parse an HTML ENTITY references
+ *
+ * [68] EntityRef ::= '&' Name ';'
+ *
+ * Returns the associated htmlEntityDescPtr if found, or NULL otherwise,
+ * if non-NULL *str will have to be freed by the caller.
+ */
+const htmlEntityDesc *
+htmlParseEntityRef(htmlParserCtxtPtr ctxt, const xmlChar **str) {
+ const xmlChar *name;
+ const htmlEntityDesc * ent = NULL;
+ *str = NULL;
+
+ if (CUR == '&') {
+ NEXT;
+ name = htmlParseName(ctxt);
+ if (name == NULL) {
+ htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
+ "htmlParseEntityRef: no name\n", NULL, NULL);
+ } else {
+ GROW;
+ if (CUR == ';') {
+ *str = name;
+
+ /*
+ * Lookup the entity in the table.
+ */
+ ent = htmlEntityLookup(name);
+ if (ent != NULL) /* OK that's ugly !!! */
+ NEXT;
+ } else {
+ htmlParseErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING,
+ "htmlParseEntityRef: expecting ';'\n",
+ NULL, NULL);
+ *str = name;
+ }
+ }
+ }
+ return(ent);
+}
+
+/**
+ * htmlParseAttValue:
+ * @ctxt: an HTML parser context
+ *
+ * parse a value for an attribute
+ * Note: the parser won't do substitution of entities here, this
+ * will be handled later in xmlStringGetNodeList, unless it was
+ * asked for ctxt->replaceEntities != 0
+ *
+ * Returns the AttValue parsed or NULL.
+ */
+
+static xmlChar *
+htmlParseAttValue(htmlParserCtxtPtr ctxt) {
+ xmlChar *ret = NULL;
+
+ if (CUR == '"') {
+ NEXT;
+ ret = htmlParseHTMLAttribute(ctxt, '"');
+ if (CUR != '"') {
+ htmlParseErr(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+ "AttValue: \" expected\n", NULL, NULL);
+ } else
+ NEXT;
+ } else if (CUR == '\'') {
+ NEXT;
+ ret = htmlParseHTMLAttribute(ctxt, '\'');
+ if (CUR != '\'') {
+ htmlParseErr(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+ "AttValue: ' expected\n", NULL, NULL);
+ } else
+ NEXT;
+ } else {
+ /*
+ * That's an HTMLism, the attribute value may not be quoted
+ */
+ ret = htmlParseHTMLAttribute(ctxt, 0);
+ if (ret == NULL) {
+ htmlParseErr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE,
+ "AttValue: no value found\n", NULL, NULL);
+ }
+ }
+ return(ret);
+}
+
+/**
+ * htmlParseSystemLiteral:
+ * @ctxt: an HTML parser context
+ *
+ * parse an HTML Literal
+ *
+ * [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")
+ *
+ * Returns the SystemLiteral parsed or NULL
+ */
+
+static xmlChar *
+htmlParseSystemLiteral(htmlParserCtxtPtr ctxt) {
+ const xmlChar *q;
+ xmlChar *ret = NULL;
+
+ if (CUR == '"') {
+ NEXT;
+ q = CUR_PTR;
+ while ((IS_CHAR_CH(CUR)) && (CUR != '"'))
+ NEXT;
+ if (!IS_CHAR_CH(CUR)) {
+ htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED,
+ "Unfinished SystemLiteral\n", NULL, NULL);
+ } else {
+ ret = xmlStrndup(q, CUR_PTR - q);
+ NEXT;
+ }
+ } else if (CUR == '\'') {
+ NEXT;
+ q = CUR_PTR;
+ while ((IS_CHAR_CH(CUR)) && (CUR != '\''))
+ NEXT;
+ if (!IS_CHAR_CH(CUR)) {
+ htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED,
+ "Unfinished SystemLiteral\n", NULL, NULL);
+ } else {
+ ret = xmlStrndup(q, CUR_PTR - q);
+ NEXT;
+ }
+ } else {
+ htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_STARTED,
+ " or ' expected\n", NULL, NULL);
+ }
+
+ return(ret);
+}
+
+/**
+ * htmlParsePubidLiteral:
+ * @ctxt: an HTML parser context
+ *
+ * parse an HTML public literal
+ *
+ * [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
+ *
+ * Returns the PubidLiteral parsed or NULL.
+ */
+
+static xmlChar *
+htmlParsePubidLiteral(htmlParserCtxtPtr ctxt) {
+ const xmlChar *q;
+ xmlChar *ret = NULL;
+ /*
+ * Name ::= (Letter | '_') (NameChar)*
+ */
+ if (CUR == '"') {
+ NEXT;
+ q = CUR_PTR;
+ while (IS_PUBIDCHAR_CH(CUR)) NEXT;
+ if (CUR != '"') {
+ htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED,
+ "Unfinished PubidLiteral\n", NULL, NULL);
+ } else {
+ ret = xmlStrndup(q, CUR_PTR - q);
+ NEXT;
+ }
+ } else if (CUR == '\'') {
+ NEXT;
+ q = CUR_PTR;
+ while ((IS_PUBIDCHAR_CH(CUR)) && (CUR != '\''))
+ NEXT;
+ if (CUR != '\'') {
+ htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED,
+ "Unfinished PubidLiteral\n", NULL, NULL);
+ } else {
+ ret = xmlStrndup(q, CUR_PTR - q);
+ NEXT;
+ }
+ } else {
+ htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_STARTED,
+ "PubidLiteral \" or ' expected\n", NULL, NULL);
+ }
+
+ return(ret);
+}
+
+/**
+ * htmlParseScript:
+ * @ctxt: an HTML parser context
+ *
+ * parse the content of an HTML SCRIPT or STYLE element
+ * http://www.w3.org/TR/html4/sgml/dtd.html#Script
+ * http://www.w3.org/TR/html4/sgml/dtd.html#StyleSheet
+ * http://www.w3.org/TR/html4/types.html#type-script
+ * http://www.w3.org/TR/html4/types.html#h-6.15
+ * http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.2.1
+ *
+ * Script data ( %Script; in the DTD) can be the content of the SCRIPT
+ * element and the value of intrinsic event attributes. User agents must
+ * not evaluate script data as HTML markup but instead must pass it on as
+ * data to a script engine.
+ * NOTES:
+ * - The content is passed like CDATA
+ * - the attributes for style and scripting "onXXX" are also described
+ * as CDATA but SGML allows entities references in attributes so their
+ * processing is identical as other attributes
+ */
+static void
+htmlParseScript(htmlParserCtxtPtr ctxt) {
+ xmlChar buf[HTML_PARSER_BIG_BUFFER_SIZE + 1];
+ int nbchar = 0;
+ xmlChar cur;
+
+ SHRINK;
+ cur = CUR;
+ while (IS_CHAR_CH(cur)) {
+ if ((cur == '<') && (NXT(1) == '!') && (NXT(2) == '-') &&
+ (NXT(3) == '-')) {
+ if ((nbchar != 0) && (ctxt->sax != NULL) && (!ctxt->disableSAX)) {
+ if (ctxt->sax->cdataBlock!= NULL) {
+ /*
+ * Insert as CDATA, which is the same as HTML_PRESERVE_NODE
+ */
+ ctxt->sax->cdataBlock(ctxt->userData, buf, nbchar);
+ } else if (ctxt->sax->characters != NULL) {
+ ctxt->sax->characters(ctxt->userData, buf, nbchar);
+ }
+ }
+ nbchar = 0;
+ htmlParseComment(ctxt);
+ cur = CUR;
+ 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 */
+ }
+ buf[nbchar++] = cur;
+ if (nbchar >= HTML_PARSER_BIG_BUFFER_SIZE) {
+ if (ctxt->sax->cdataBlock!= NULL) {
+ /*
+ * Insert as CDATA, which is the same as HTML_PRESERVE_NODE
+ */
+ ctxt->sax->cdataBlock(ctxt->userData, buf, nbchar);
+ } else if (ctxt->sax->characters != NULL) {
+ ctxt->sax->characters(ctxt->userData, buf, nbchar);
+ }
+ nbchar = 0;
+ }
+ NEXT;
+ cur = CUR;
+ }
+ if (!(IS_CHAR_CH(cur))) {
+ htmlParseErrInt(ctxt, XML_ERR_INVALID_CHAR,
+ "Invalid char in CDATA 0x%X\n", cur);
+ NEXT;
+ }
+
+ if ((nbchar != 0) && (ctxt->sax != NULL) && (!ctxt->disableSAX)) {
+ if (ctxt->sax->cdataBlock!= NULL) {
+ /*
+ * Insert as CDATA, which is the same as HTML_PRESERVE_NODE
+ */
+ ctxt->sax->cdataBlock(ctxt->userData, buf, nbchar);
+ } else if (ctxt->sax->characters != NULL) {
+ ctxt->sax->characters(ctxt->userData, buf, nbchar);
+ }
+ }
+}
+
+
+/**
+ * htmlParseCharData:
+ * @ctxt: an HTML parser context
+ *
+ * parse a CharData section.
+ * if we are within a CDATA section ']]>' marks an end of section.
+ *
+ * [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
+ */
+
+static void
+htmlParseCharData(htmlParserCtxtPtr ctxt) {
+ xmlChar buf[HTML_PARSER_BIG_BUFFER_SIZE + 5];
+ int nbchar = 0;
+ int cur, l;
+
+ SHRINK;
+ cur = CUR_CHAR(l);
+ while (((cur != '<') || (ctxt->token == '<')) &&
+ ((cur != '&') || (ctxt->token == '&')) &&
+ (IS_CHAR(cur))) {
+ COPY_BUF(l,buf,nbchar,cur);
+ if (nbchar >= HTML_PARSER_BIG_BUFFER_SIZE) {
+ /*
+ * Ok the segment is to be consumed as chars.
+ */
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
+ if (areBlanks(ctxt, buf, nbchar)) {
+ if (ctxt->sax->ignorableWhitespace != NULL)
+ ctxt->sax->ignorableWhitespace(ctxt->userData,
+ buf, nbchar);
+ } else {
+ htmlCheckParagraph(ctxt);
+ if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData, buf, nbchar);
+ }
+ }
+ nbchar = 0;
+ }
+ NEXTL(l);
+ cur = CUR_CHAR(l);
+ if (cur == 0) {
+ SHRINK;
+ GROW;
+ cur = CUR_CHAR(l);
+ }
+ }
+ if (nbchar != 0) {
+ /*
+ * Ok the segment is to be consumed as chars.
+ */
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
+ if (areBlanks(ctxt, buf, nbchar)) {
+ if (ctxt->sax->ignorableWhitespace != NULL)
+ ctxt->sax->ignorableWhitespace(ctxt->userData, buf, nbchar);
+ } else {
+ htmlCheckParagraph(ctxt);
+ if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData, buf, nbchar);
+ }
+ }
+ } else {
+ /*
+ * Loop detection
+ */
+ if (cur == 0)
+ ctxt->instate = XML_PARSER_EOF;
+ }
+}
+
+/**
+ * htmlParseExternalID:
+ * @ctxt: an HTML parser context
+ * @publicID: a xmlChar** receiving PubidLiteral
+ *
+ * Parse an External ID or a Public ID
+ *
+ * [75] ExternalID ::= 'SYSTEM' S SystemLiteral
+ * | 'PUBLIC' S PubidLiteral S SystemLiteral
+ *
+ * [83] PublicID ::= 'PUBLIC' S PubidLiteral
+ *
+ * Returns the function returns SystemLiteral and in the second
+ * case publicID receives PubidLiteral, is strict is off
+ * it is possible to return NULL and have publicID set.
+ */
+
+static xmlChar *
+htmlParseExternalID(htmlParserCtxtPtr ctxt, xmlChar **publicID) {
+ xmlChar *URI = NULL;
+
+ if ((UPPER == 'S') && (UPP(1) == 'Y') &&
+ (UPP(2) == 'S') && (UPP(3) == 'T') &&
+ (UPP(4) == 'E') && (UPP(5) == 'M')) {
+ SKIP(6);
+ if (!IS_BLANK_CH(CUR)) {
+ htmlParseErr(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after 'SYSTEM'\n", NULL, NULL);
+ }
+ SKIP_BLANKS;
+ URI = htmlParseSystemLiteral(ctxt);
+ if (URI == NULL) {
+ htmlParseErr(ctxt, XML_ERR_URI_REQUIRED,
+ "htmlParseExternalID: SYSTEM, no URI\n", NULL, NULL);
+ }
+ } else if ((UPPER == 'P') && (UPP(1) == 'U') &&
+ (UPP(2) == 'B') && (UPP(3) == 'L') &&
+ (UPP(4) == 'I') && (UPP(5) == 'C')) {
+ SKIP(6);
+ if (!IS_BLANK_CH(CUR)) {
+ htmlParseErr(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after 'PUBLIC'\n", NULL, NULL);
+ }
+ SKIP_BLANKS;
+ *publicID = htmlParsePubidLiteral(ctxt);
+ if (*publicID == NULL) {
+ htmlParseErr(ctxt, XML_ERR_PUBID_REQUIRED,
+ "htmlParseExternalID: PUBLIC, no Public Identifier\n",
+ NULL, NULL);
+ }
+ SKIP_BLANKS;
+ if ((CUR == '"') || (CUR == '\'')) {
+ URI = htmlParseSystemLiteral(ctxt);
+ }
+ }
+ return(URI);
+}
+
+/**
+ * htmlParseComment:
+ * @ctxt: an HTML parser context
+ *
+ * Parse an XML (SGML) comment <!-- .... -->
+ *
+ * [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
+ */
+static void
+htmlParseComment(htmlParserCtxtPtr ctxt) {
+ xmlChar *buf = NULL;
+ int len;
+ int size = HTML_PARSER_BUFFER_SIZE;
+ int q, ql;
+ int r, rl;
+ int cur, l;
+ xmlParserInputState state;
+
+ /*
+ * Check that there is a comment right here.
+ */
+ if ((RAW != '<') || (NXT(1) != '!') ||
+ (NXT(2) != '-') || (NXT(3) != '-')) return;
+
+ state = ctxt->instate;
+ ctxt->instate = XML_PARSER_COMMENT;
+ SHRINK;
+ SKIP(4);
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ htmlErrMemory(ctxt, "buffer allocation failed\n");
+ ctxt->instate = state;
+ return;
+ }
+ q = CUR_CHAR(ql);
+ NEXTL(ql);
+ r = CUR_CHAR(rl);
+ NEXTL(rl);
+ cur = CUR_CHAR(l);
+ len = 0;
+ while (IS_CHAR(cur) &&
+ ((cur != '>') ||
+ (r != '-') || (q != '-'))) {
+ if (len + 5 >= size) {
+ size *= 2;
+ buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (buf == NULL) {
+ htmlErrMemory(ctxt, "growing buffer failed\n");
+ ctxt->instate = state;
+ return;
+ }
+ }
+ COPY_BUF(ql,buf,len,q);
+ q = r;
+ ql = rl;
+ r = cur;
+ rl = l;
+ NEXTL(l);
+ cur = CUR_CHAR(l);
+ if (cur == 0) {
+ SHRINK;
+ GROW;
+ cur = CUR_CHAR(l);
+ }
+ }
+ buf[len] = 0;
+ if (!IS_CHAR(cur)) {
+ htmlParseErr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
+ "Comment not terminated \n<!--%.50s\n", buf, NULL);
+ xmlFree(buf);
+ } else {
+ NEXT;
+ if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->comment(ctxt->userData, buf);
+ xmlFree(buf);
+ }
+ ctxt->instate = state;
+}
+
+/**
+ * htmlParseCharRef:
+ * @ctxt: an HTML parser context
+ *
+ * parse Reference declarations
+ *
+ * [66] CharRef ::= '&#' [0-9]+ ';' |
+ * '&#x' [0-9a-fA-F]+ ';'
+ *
+ * Returns the value parsed (as an int)
+ */
+int
+htmlParseCharRef(htmlParserCtxtPtr ctxt) {
+ int val = 0;
+
+ if ((CUR == '&') && (NXT(1) == '#') &&
+ ((NXT(2) == 'x') || NXT(2) == 'X')) {
+ SKIP(3);
+ while (CUR != ';') {
+ if ((CUR >= '0') && (CUR <= '9'))
+ val = val * 16 + (CUR - '0');
+ else if ((CUR >= 'a') && (CUR <= 'f'))
+ val = val * 16 + (CUR - 'a') + 10;
+ else if ((CUR >= 'A') && (CUR <= 'F'))
+ val = val * 16 + (CUR - 'A') + 10;
+ else {
+ htmlParseErr(ctxt, XML_ERR_INVALID_HEX_CHARREF,
+ "htmlParseCharRef: invalid hexadecimal value\n",
+ NULL, NULL);
+ return(0);
+ }
+ NEXT;
+ }
+ if (CUR == ';')
+ NEXT;
+ } else if ((CUR == '&') && (NXT(1) == '#')) {
+ SKIP(2);
+ while (CUR != ';') {
+ if ((CUR >= '0') && (CUR <= '9'))
+ val = val * 10 + (CUR - '0');
+ else {
+ htmlParseErr(ctxt, XML_ERR_INVALID_DEC_CHARREF,
+ "htmlParseCharRef: invalid decimal value\n",
+ NULL, NULL);
+ return(0);
+ }
+ NEXT;
+ }
+ if (CUR == ';')
+ NEXT;
+ } else {
+ htmlParseErr(ctxt, XML_ERR_INVALID_CHARREF,
+ "htmlParseCharRef: invalid value\n", NULL, NULL);
+ }
+ /*
+ * Check the value IS_CHAR ...
+ */
+ if (IS_CHAR(val)) {
+ return(val);
+ } else {
+ htmlParseErrInt(ctxt, XML_ERR_INVALID_CHAR,
+ "htmlParseCharRef: invalid xmlChar value %d\n",
+ val);
+ }
+ return(0);
+}
+
+
+/**
+ * htmlParseDocTypeDecl:
+ * @ctxt: an HTML parser context
+ *
+ * parse a DOCTYPE declaration
+ *
+ * [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S?
+ * ('[' (markupdecl | PEReference | S)* ']' S?)? '>'
+ */
+
+static void
+htmlParseDocTypeDecl(htmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ xmlChar *ExternalID = NULL;
+ xmlChar *URI = NULL;
+
+ /*
+ * We know that '<!DOCTYPE' has been detected.
+ */
+ SKIP(9);
+
+ SKIP_BLANKS;
+
+ /*
+ * Parse the DOCTYPE name.
+ */
+ name = htmlParseName(ctxt);
+ if (name == NULL) {
+ htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
+ "htmlParseDocTypeDecl : no DOCTYPE name !\n",
+ NULL, NULL);
+ }
+ /*
+ * Check that upper(name) == "HTML" !!!!!!!!!!!!!
+ */
+
+ SKIP_BLANKS;
+
+ /*
+ * Check for SystemID and ExternalID
+ */
+ URI = htmlParseExternalID(ctxt, &ExternalID);
+ SKIP_BLANKS;
+
+ /*
+ * We should be at the end of the DOCTYPE declaration.
+ */
+ if (CUR != '>') {
+ htmlParseErr(ctxt, XML_ERR_DOCTYPE_NOT_FINISHED,
+ "DOCTYPE improperly terminated\n", NULL, NULL);
+ /* We shouldn't try to resynchronize ... */
+ }
+ NEXT;
+
+ /*
+ * Create or update the document accordingly to the DOCTYPE
+ */
+ if ((ctxt->sax != NULL) && (ctxt->sax->internalSubset != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->internalSubset(ctxt->userData, name, ExternalID, URI);
+
+ /*
+ * Cleanup, since we don't use all those identifiers
+ */
+ if (URI != NULL) xmlFree(URI);
+ if (ExternalID != NULL) xmlFree(ExternalID);
+}
+
+/**
+ * htmlParseAttribute:
+ * @ctxt: an HTML parser context
+ * @value: a xmlChar ** used to store the value of the attribute
+ *
+ * parse an attribute
+ *
+ * [41] Attribute ::= Name Eq AttValue
+ *
+ * [25] Eq ::= S? '=' S?
+ *
+ * With namespace:
+ *
+ * [NS 11] Attribute ::= QName Eq AttValue
+ *
+ * Also the case QName == xmlns:??? is handled independently as a namespace
+ * definition.
+ *
+ * Returns the attribute name, and the value in *value.
+ */
+
+static const xmlChar *
+htmlParseAttribute(htmlParserCtxtPtr ctxt, xmlChar **value) {
+ const xmlChar *name;
+ xmlChar *val = NULL;
+
+ *value = NULL;
+ name = htmlParseHTMLName(ctxt);
+ if (name == NULL) {
+ htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
+ "error parsing attribute name\n", NULL, NULL);
+ return(NULL);
+ }
+
+ /*
+ * read the value
+ */
+ SKIP_BLANKS;
+ if (CUR == '=') {
+ NEXT;
+ SKIP_BLANKS;
+ val = htmlParseAttValue(ctxt);
+ /******
+ } else {
+ * TODO : some attribute must have values, some may not
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "No value for attribute %s\n", name); */
+ }
+
+ *value = val;
+ return(name);
+}
+
+/**
+ * htmlCheckEncoding:
+ * @ctxt: an HTML parser context
+ * @attvalue: the attribute value
+ *
+ * Checks an http-equiv attribute from a Meta tag to detect
+ * the encoding
+ * If a new encoding is detected the parser is switched to decode
+ * it and pass UTF8
+ */
+static void
+htmlCheckEncoding(htmlParserCtxtPtr ctxt, const xmlChar *attvalue) {
+ const xmlChar *encoding;
+
+ if ((ctxt == NULL) || (attvalue == NULL))
+ return;
+
+ /* do not change encoding */
+ if (ctxt->input->encoding != NULL)
+ return;
+
+ encoding = xmlStrcasestr(attvalue, BAD_CAST"charset=");
+ if (encoding != NULL) {
+ encoding += 8;
+ } else {
+ encoding = xmlStrcasestr(attvalue, BAD_CAST"charset =");
+ if (encoding != NULL)
+ encoding += 9;
+ }
+ if (encoding != NULL) {
+ xmlCharEncoding enc;
+ xmlCharEncodingHandlerPtr handler;
+
+ while ((*encoding == ' ') || (*encoding == '\t')) encoding++;
+
+ if (ctxt->input->encoding != NULL)
+ xmlFree((xmlChar *) ctxt->input->encoding);
+ ctxt->input->encoding = xmlStrdup(encoding);
+
+ enc = xmlParseCharEncoding((const char *) encoding);
+ /*
+ * registered set of known encodings
+ */
+ if (enc != XML_CHAR_ENCODING_ERROR) {
+ xmlSwitchEncoding(ctxt, enc);
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ } else {
+ /*
+ * fallback for unknown encodings
+ */
+ handler = xmlFindCharEncodingHandler((const char *) encoding);
+ if (handler != NULL) {
+ xmlSwitchToEncoding(ctxt, handler);
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ } else {
+ ctxt->errNo = XML_ERR_UNSUPPORTED_ENCODING;
+ }
+ }
+
+ if ((ctxt->input->buf != NULL) &&
+ (ctxt->input->buf->encoder != NULL) &&
+ (ctxt->input->buf->raw != NULL) &&
+ (ctxt->input->buf->buffer != NULL)) {
+ int nbchars;
+ int processed;
+
+ /*
+ * convert as much as possible to the parser reading buffer.
+ */
+ processed = ctxt->input->cur - ctxt->input->base;
+ xmlBufferShrink(ctxt->input->buf->buffer, processed);
+ nbchars = xmlCharEncInFunc(ctxt->input->buf->encoder,
+ ctxt->input->buf->buffer,
+ ctxt->input->buf->raw);
+ if (nbchars < 0) {
+ htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
+ "htmlCheckEncoding: encoder error\n",
+ NULL, NULL);
+ }
+ ctxt->input->base =
+ ctxt->input->cur = ctxt->input->buf->buffer->content;
+ }
+ }
+}
+
+/**
+ * htmlCheckMeta:
+ * @ctxt: an HTML parser context
+ * @atts: the attributes values
+ *
+ * Checks an attributes from a Meta tag
+ */
+static void
+htmlCheckMeta(htmlParserCtxtPtr ctxt, const xmlChar **atts) {
+ int i;
+ const xmlChar *att, *value;
+ int http = 0;
+ const xmlChar *content = NULL;
+
+ if ((ctxt == NULL) || (atts == NULL))
+ return;
+
+ i = 0;
+ att = atts[i++];
+ while (att != NULL) {
+ value = atts[i++];
+ if ((value != NULL) && (!xmlStrcasecmp(att, BAD_CAST"http-equiv"))
+ && (!xmlStrcasecmp(value, BAD_CAST"Content-Type")))
+ http = 1;
+ else if ((value != NULL) && (!xmlStrcasecmp(att, BAD_CAST"content")))
+ content = value;
+ att = atts[i++];
+ }
+ if ((http) && (content != NULL))
+ htmlCheckEncoding(ctxt, content);
+
+}
+
+/**
+ * htmlParseStartTag:
+ * @ctxt: an HTML parser context
+ *
+ * parse a start of tag either for rule element or
+ * EmptyElement. In both case we don't parse the tag closing chars.
+ *
+ * [40] STag ::= '<' Name (S Attribute)* S? '>'
+ *
+ * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
+ *
+ * With namespace:
+ *
+ * [NS 8] STag ::= '<' QName (S Attribute)* S? '>'
+ *
+ * [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>'
+ *
+ */
+
+static void
+htmlParseStartTag(htmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ const xmlChar *attname;
+ xmlChar *attvalue;
+ const xmlChar **atts = ctxt->atts;
+ int nbatts = 0;
+ int maxatts = ctxt->maxatts;
+ int meta = 0;
+ int i;
+
+ if (CUR != '<') return;
+ NEXT;
+
+ GROW;
+ name = htmlParseHTMLName(ctxt);
+ if (name == NULL) {
+ htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
+ "htmlParseStartTag: invalid element name\n",
+ NULL, NULL);
+ /* Dump the bogus tag like browsers do */
+ while ((IS_CHAR_CH(CUR)) && (CUR != '>'))
+ NEXT;
+ return;
+ }
+ if (xmlStrEqual(name, BAD_CAST"meta"))
+ meta = 1;
+
+ /*
+ * Check for auto-closure of HTML elements.
+ */
+ htmlAutoClose(ctxt, name);
+
+ /*
+ * Check for implied HTML elements.
+ */
+ htmlCheckImplied(ctxt, name);
+
+ /*
+ * Avoid html at any level > 0, head at any level != 1
+ * or any attempt to recurse body
+ */
+ if ((ctxt->nameNr > 0) && (xmlStrEqual(name, BAD_CAST"html"))) {
+ htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
+ "htmlParseStartTag: misplaced <html> tag\n",
+ name, NULL);
+ return;
+ }
+ if ((ctxt->nameNr != 1) &&
+ (xmlStrEqual(name, BAD_CAST"head"))) {
+ htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
+ "htmlParseStartTag: misplaced <head> tag\n",
+ name, NULL);
+ return;
+ }
+ if (xmlStrEqual(name, BAD_CAST"body")) {
+ int indx;
+ for (indx = 0;indx < ctxt->nameNr;indx++) {
+ if (xmlStrEqual(ctxt->nameTab[indx], BAD_CAST"body")) {
+ htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
+ "htmlParseStartTag: misplaced <body> tag\n",
+ name, NULL);
+ while ((IS_CHAR_CH(CUR)) && (CUR != '>'))
+ NEXT;
+ return;
+ }
+ }
+ }
+
+ /*
+ * Now parse the attributes, it ends up with the ending
+ *
+ * (S Attribute)* S?
+ */
+ SKIP_BLANKS;
+ while ((IS_CHAR_CH(CUR)) &&
+ (CUR != '>') &&
+ ((CUR != '/') || (NXT(1) != '>'))) {
+ long cons = ctxt->nbChars;
+
+ GROW;
+ attname = htmlParseAttribute(ctxt, &attvalue);
+ if (attname != NULL) {
+
+ /*
+ * Well formedness requires at most one declaration of an attribute
+ */
+ for (i = 0; i < nbatts;i += 2) {
+ if (xmlStrEqual(atts[i], attname)) {
+ htmlParseErr(ctxt, XML_ERR_ATTRIBUTE_REDEFINED,
+ "Attribute %s redefined\n", attname, NULL);
+ if (attvalue != NULL)
+ xmlFree(attvalue);
+ goto failed;
+ }
+ }
+
+ /*
+ * Add the pair to atts
+ */
+ if (atts == NULL) {
+ maxatts = 22; /* allow for 10 attrs by default */
+ atts = (const xmlChar **)
+ xmlMalloc(maxatts * sizeof(xmlChar *));
+ if (atts == NULL) {
+ htmlErrMemory(ctxt, NULL);
+ if (attvalue != NULL)
+ xmlFree(attvalue);
+ goto failed;
+ }
+ ctxt->atts = atts;
+ ctxt->maxatts = maxatts;
+ } else if (nbatts + 4 > maxatts) {
+ const xmlChar **n;
+
+ maxatts *= 2;
+ n = (const xmlChar **) xmlRealloc((void *) atts,
+ maxatts * sizeof(const xmlChar *));
+ if (n == NULL) {
+ htmlErrMemory(ctxt, NULL);
+ if (attvalue != NULL)
+ xmlFree(attvalue);
+ goto failed;
+ }
+ atts = n;
+ ctxt->atts = atts;
+ ctxt->maxatts = maxatts;
+ }
+ atts[nbatts++] = attname;
+ atts[nbatts++] = attvalue;
+ atts[nbatts] = NULL;
+ atts[nbatts + 1] = NULL;
+ }
+ else {
+ if (attvalue != NULL)
+ xmlFree(attvalue);
+ /* Dump the bogus attribute string up to the next blank or
+ * the end of the tag. */
+ while ((IS_CHAR_CH(CUR)) &&
+ !(IS_BLANK_CH(CUR)) && (CUR != '>') &&
+ ((CUR != '/') || (NXT(1) != '>')))
+ NEXT;
+ }
+
+failed:
+ SKIP_BLANKS;
+ if (cons == ctxt->nbChars) {
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "htmlParseStartTag: problem parsing attributes\n",
+ NULL, NULL);
+ break;
+ }
+ }
+
+ /*
+ * Handle specific association to the META tag
+ */
+ if (meta)
+ htmlCheckMeta(ctxt, atts);
+
+ /*
+ * SAX: Start of Element !
+ */
+ htmlnamePush(ctxt, name);
+ if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL)) {
+ if (nbatts != 0)
+ ctxt->sax->startElement(ctxt->userData, name, atts);
+ else
+ ctxt->sax->startElement(ctxt->userData, name, NULL);
+ }
+
+ if (atts != NULL) {
+ for (i = 1;i < nbatts;i += 2) {
+ if (atts[i] != NULL)
+ xmlFree((xmlChar *) atts[i]);
+ }
+ }
+}
+
+/**
+ * htmlParseEndTag:
+ * @ctxt: an HTML parser context
+ *
+ * parse an end of tag
+ *
+ * [42] ETag ::= '</' Name S? '>'
+ *
+ * With namespace
+ *
+ * [NS 9] ETag ::= '</' QName S? '>'
+ *
+ * Returns 1 if the current level should be closed.
+ */
+
+static int
+htmlParseEndTag(htmlParserCtxtPtr ctxt)
+{
+ const xmlChar *name;
+ const xmlChar *oldname;
+ int i, ret;
+
+ if ((CUR != '<') || (NXT(1) != '/')) {
+ htmlParseErr(ctxt, XML_ERR_LTSLASH_REQUIRED,
+ "htmlParseEndTag: '</' not found\n", NULL, NULL);
+ return (0);
+ }
+ SKIP(2);
+
+ name = htmlParseHTMLName(ctxt);
+ if (name == NULL)
+ return (0);
+
+ /*
+ * We should definitely be at the ending "S? '>'" part
+ */
+ SKIP_BLANKS;
+ if ((!IS_CHAR_CH(CUR)) || (CUR != '>')) {
+ htmlParseErr(ctxt, XML_ERR_GT_REQUIRED,
+ "End tag : expected '>'\n", NULL, NULL);
+ } else
+ NEXT;
+
+ /*
+ * If the name read is not one of the element in the parsing stack
+ * then return, it's just an error.
+ */
+ for (i = (ctxt->nameNr - 1); i >= 0; i--) {
+ if (xmlStrEqual(name, ctxt->nameTab[i]))
+ break;
+ }
+ if (i < 0) {
+ htmlParseErr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
+ "Unexpected end tag : %s\n", name, NULL);
+ return (0);
+ }
+
+
+ /*
+ * Check for auto-closure of HTML elements.
+ */
+
+ htmlAutoCloseOnClose(ctxt, name);
+
+ /*
+ * Well formedness constraints, opening and closing must match.
+ * With the exception that the autoclose may have popped stuff out
+ * of the stack.
+ */
+ if (!xmlStrEqual(name, ctxt->name)) {
+ if ((ctxt->name != NULL) && (!xmlStrEqual(ctxt->name, name))) {
+ htmlParseErr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
+ "Opening and ending tag mismatch: %s and %s\n",
+ name, ctxt->name);
+ }
+ }
+
+ /*
+ * SAX: End of Tag
+ */
+ oldname = ctxt->name;
+ if ((oldname != NULL) && (xmlStrEqual(oldname, name))) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
+ ctxt->sax->endElement(ctxt->userData, name);
+ htmlnamePop(ctxt);
+ ret = 1;
+ } else {
+ ret = 0;
+ }
+
+ return (ret);
+}
+
+
+/**
+ * htmlParseReference:
+ * @ctxt: an HTML parser context
+ *
+ * parse and handle entity references in content,
+ * this will end-up in a call to character() since this is either a
+ * CharRef, or a predefined entity.
+ */
+static void
+htmlParseReference(htmlParserCtxtPtr ctxt) {
+ const htmlEntityDesc * ent;
+ xmlChar out[6];
+ const xmlChar *name;
+ if (CUR != '&') return;
+
+ if (NXT(1) == '#') {
+ unsigned int c;
+ int bits, i = 0;
+
+ c = htmlParseCharRef(ctxt);
+ if (c == 0)
+ return;
+
+ if (c < 0x80) { out[i++]= c; bits= -6; }
+ else if (c < 0x800) { out[i++]=((c >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (c < 0x10000) { out[i++]=((c >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else { out[i++]=((c >> 18) & 0x07) | 0xF0; bits= 12; }
+
+ for ( ; bits >= 0; bits-= 6) {
+ out[i++]= ((c >> bits) & 0x3F) | 0x80;
+ }
+ out[i] = 0;
+
+ htmlCheckParagraph(ctxt);
+ if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL))
+ ctxt->sax->characters(ctxt->userData, out, i);
+ } else {
+ ent = htmlParseEntityRef(ctxt, &name);
+ if (name == NULL) {
+ htmlCheckParagraph(ctxt);
+ if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL))
+ ctxt->sax->characters(ctxt->userData, BAD_CAST "&", 1);
+ return;
+ }
+ if ((ent == NULL) || !(ent->value > 0)) {
+ htmlCheckParagraph(ctxt);
+ if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL)) {
+ ctxt->sax->characters(ctxt->userData, BAD_CAST "&", 1);
+ ctxt->sax->characters(ctxt->userData, name, xmlStrlen(name));
+ /* ctxt->sax->characters(ctxt->userData, BAD_CAST ";", 1); */
+ }
+ } else {
+ unsigned int c;
+ int bits, i = 0;
+
+ c = ent->value;
+ if (c < 0x80)
+ { out[i++]= c; bits= -6; }
+ else if (c < 0x800)
+ { out[i++]=((c >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (c < 0x10000)
+ { out[i++]=((c >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else
+ { out[i++]=((c >> 18) & 0x07) | 0xF0; bits= 12; }
+
+ for ( ; bits >= 0; bits-= 6) {
+ out[i++]= ((c >> bits) & 0x3F) | 0x80;
+ }
+ out[i] = 0;
+
+ htmlCheckParagraph(ctxt);
+ if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL))
+ ctxt->sax->characters(ctxt->userData, out, i);
+ }
+ }
+}
+
+/**
+ * htmlParseContent:
+ * @ctxt: an HTML parser context
+ * @name: the node name
+ *
+ * Parse a content: comment, sub-element, reference or text.
+ *
+ */
+
+static void
+htmlParseContent(htmlParserCtxtPtr ctxt) {
+ xmlChar *currentNode;
+ int depth;
+
+ currentNode = xmlStrdup(ctxt->name);
+ depth = ctxt->nameNr;
+ while (1) {
+ long cons = ctxt->nbChars;
+
+ GROW;
+ /*
+ * Our tag or one of it's parent or children is ending.
+ */
+ if ((CUR == '<') && (NXT(1) == '/')) {
+ if (htmlParseEndTag(ctxt) &&
+ ((currentNode != NULL) || (ctxt->nameNr == 0))) {
+ if (currentNode != NULL)
+ xmlFree(currentNode);
+ return;
+ }
+ continue; /* while */
+ }
+
+ /*
+ * Has this node been popped out during parsing of
+ * the next element
+ */
+ if ((ctxt->nameNr > 0) && (depth >= ctxt->nameNr) &&
+ (!xmlStrEqual(currentNode, ctxt->name)))
+ {
+ if (currentNode != NULL) xmlFree(currentNode);
+ return;
+ }
+
+ if ((CUR != 0) && ((xmlStrEqual(currentNode, BAD_CAST"script")) ||
+ (xmlStrEqual(currentNode, BAD_CAST"style")))) {
+ /*
+ * Handle SCRIPT/STYLE separately
+ */
+ htmlParseScript(ctxt);
+ } else {
+ /*
+ * Sometimes DOCTYPE arrives in the middle of the document
+ */
+ if ((CUR == '<') && (NXT(1) == '!') &&
+ (UPP(2) == 'D') && (UPP(3) == 'O') &&
+ (UPP(4) == 'C') && (UPP(5) == 'T') &&
+ (UPP(6) == 'Y') && (UPP(7) == 'P') &&
+ (UPP(8) == 'E')) {
+ htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
+ "Misplaced DOCTYPE declaration\n",
+ BAD_CAST "DOCTYPE" , NULL);
+ htmlParseDocTypeDecl(ctxt);
+ }
+
+ /*
+ * First case : a comment
+ */
+ if ((CUR == '<') && (NXT(1) == '!') &&
+ (NXT(2) == '-') && (NXT(3) == '-')) {
+ htmlParseComment(ctxt);
+ }
+
+ /*
+ * Second case : a sub-element.
+ */
+ else if (CUR == '<') {
+ htmlParseElement(ctxt);
+ }
+
+ /*
+ * Third case : a reference. If if has not been resolved,
+ * parsing returns it's Name, create the node
+ */
+ else if (CUR == '&') {
+ htmlParseReference(ctxt);
+ }
+
+ /*
+ * Fourth : end of the resource
+ */
+ else if (CUR == 0) {
+ htmlAutoCloseOnEnd(ctxt);
+ break;
+ }
+
+ /*
+ * Last case, text. Note that References are handled directly.
+ */
+ else {
+ htmlParseCharData(ctxt);
+ }
+
+ if (cons == ctxt->nbChars) {
+ if (ctxt->node != NULL) {
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "detected an error in element content\n",
+ NULL, NULL);
+ }
+ break;
+ }
+ }
+ GROW;
+ }
+ if (currentNode != NULL) xmlFree(currentNode);
+}
+
+/**
+ * htmlParseElement:
+ * @ctxt: an HTML parser context
+ *
+ * parse an HTML element, this is highly recursive
+ *
+ * [39] element ::= EmptyElemTag | STag content ETag
+ *
+ * [41] Attribute ::= Name Eq AttValue
+ */
+
+void
+htmlParseElement(htmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ xmlChar *currentNode = NULL;
+ const htmlElemDesc * info;
+ htmlParserNodeInfo node_info;
+ const xmlChar *oldname;
+ int depth = ctxt->nameNr;
+ const xmlChar *oldptr;
+
+ /* Capture start position */
+ if (ctxt->record_info) {
+ node_info.begin_pos = ctxt->input->consumed +
+ (CUR_PTR - ctxt->input->base);
+ node_info.begin_line = ctxt->input->line;
+ }
+
+ oldname = ctxt->name;
+ htmlParseStartTag(ctxt);
+ name = ctxt->name;
+ if (((depth == ctxt->nameNr) && (xmlStrEqual(oldname, ctxt->name))) ||
+ (name == NULL)) {
+ if (CUR == '>')
+ NEXT;
+ return;
+ }
+
+ /*
+ * Lookup the info for that element.
+ */
+ info = htmlTagLookup(name);
+ if (info == NULL) {
+ htmlParseErr(ctxt, XML_HTML_UNKNOWN_TAG,
+ "Tag %s invalid\n", name, NULL);
+ }
+
+ /*
+ * Check for an Empty Element labeled the XML/SGML way
+ */
+ if ((CUR == '/') && (NXT(1) == '>')) {
+ SKIP(2);
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
+ ctxt->sax->endElement(ctxt->userData, name);
+ htmlnamePop(ctxt);
+ return;
+ }
+
+ if (CUR == '>') {
+ NEXT;
+ } else {
+ htmlParseErr(ctxt, XML_ERR_GT_REQUIRED,
+ "Couldn't find end of Start Tag %s\n", name, NULL);
+
+ /*
+ * end of parsing of this node.
+ */
+ if (xmlStrEqual(name, ctxt->name)) {
+ nodePop(ctxt);
+ htmlnamePop(ctxt);
+ }
+
+ /*
+ * Capture end position and add node
+ */
+ if ( currentNode != NULL && ctxt->record_info ) {
+ node_info.end_pos = ctxt->input->consumed +
+ (CUR_PTR - ctxt->input->base);
+ node_info.end_line = ctxt->input->line;
+ node_info.node = ctxt->node;
+ xmlParserAddNodeInfo(ctxt, &node_info);
+ }
+ return;
+ }
+
+ /*
+ * Check for an Empty Element from DTD definition
+ */
+ if ((info != NULL) && (info->empty)) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
+ ctxt->sax->endElement(ctxt->userData, name);
+ htmlnamePop(ctxt);
+ return;
+ }
+
+ /*
+ * Parse the content of the element:
+ */
+ currentNode = xmlStrdup(ctxt->name);
+ depth = ctxt->nameNr;
+ while (IS_CHAR_CH(CUR)) {
+ oldptr = ctxt->input->cur;
+ htmlParseContent(ctxt);
+ if (oldptr==ctxt->input->cur) break;
+ if (ctxt->nameNr < depth) break;
+ }
+
+ /*
+ * Capture end position and add node
+ */
+ if ( currentNode != NULL && ctxt->record_info ) {
+ node_info.end_pos = ctxt->input->consumed +
+ (CUR_PTR - ctxt->input->base);
+ node_info.end_line = ctxt->input->line;
+ node_info.node = ctxt->node;
+ xmlParserAddNodeInfo(ctxt, &node_info);
+ }
+ if (!IS_CHAR_CH(CUR)) {
+ htmlAutoCloseOnEnd(ctxt);
+ }
+
+ if (currentNode != NULL)
+ xmlFree(currentNode);
+}
+
+/**
+ * htmlParseDocument:
+ * @ctxt: an HTML parser context
+ *
+ * parse an HTML document (and build a tree if using the standard SAX
+ * interface).
+ *
+ * Returns 0, -1 in case of error. the parser context is augmented
+ * as a result of the parsing.
+ */
+
+int
+htmlParseDocument(htmlParserCtxtPtr ctxt) {
+ xmlDtdPtr dtd;
+
+ xmlInitParser();
+
+ htmlDefaultSAXHandlerInit();
+ ctxt->html = 1;
+
+ GROW;
+ /*
+ * SAX: beginning of the document processing.
+ */
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
+ ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
+
+ /*
+ * Wipe out everything which is before the first '<'
+ */
+ SKIP_BLANKS;
+ if (CUR == 0) {
+ htmlParseErr(ctxt, XML_ERR_DOCUMENT_EMPTY,
+ "Document is empty\n", NULL, NULL);
+ }
+
+ if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX))
+ ctxt->sax->startDocument(ctxt->userData);
+
+
+ /*
+ * Parse possible comments before any content
+ */
+ while ((CUR == '<') && (NXT(1) == '!') &&
+ (NXT(2) == '-') && (NXT(3) == '-')) {
+ htmlParseComment(ctxt);
+ SKIP_BLANKS;
+ }
+
+
+ /*
+ * Then possibly doc type declaration(s) and more Misc
+ * (doctypedecl Misc*)?
+ */
+ if ((CUR == '<') && (NXT(1) == '!') &&
+ (UPP(2) == 'D') && (UPP(3) == 'O') &&
+ (UPP(4) == 'C') && (UPP(5) == 'T') &&
+ (UPP(6) == 'Y') && (UPP(7) == 'P') &&
+ (UPP(8) == 'E')) {
+ htmlParseDocTypeDecl(ctxt);
+ }
+ SKIP_BLANKS;
+
+ /*
+ * Parse possible comments before any content
+ */
+ while ((CUR == '<') && (NXT(1) == '!') &&
+ (NXT(2) == '-') && (NXT(3) == '-')) {
+ htmlParseComment(ctxt);
+ SKIP_BLANKS;
+ }
+
+ /*
+ * Time to start parsing the tree itself
+ */
+ htmlParseContent(ctxt);
+
+ /*
+ * autoclose
+ */
+ if (CUR == 0)
+ htmlAutoCloseOnEnd(ctxt);
+
+
+ /*
+ * SAX: end of the document processing.
+ */
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+
+ if (ctxt->myDoc != NULL) {
+ dtd = xmlGetIntSubset(ctxt->myDoc);
+ if (dtd == NULL)
+ ctxt->myDoc->intSubset =
+ xmlCreateIntSubset(ctxt->myDoc, BAD_CAST "html",
+ BAD_CAST "-//W3C//DTD HTML 4.0 Transitional//EN",
+ BAD_CAST "http://www.w3.org/TR/REC-html40/loose.dtd");
+ }
+ if (! ctxt->wellFormed) return(-1);
+ return(0);
+}
+
+
+/************************************************************************
+ * *
+ * Parser contexts handling *
+ * *
+ ************************************************************************/
+
+/**
+ * htmlInitParserCtxt:
+ * @ctxt: an HTML parser context
+ *
+ * Initialize a parser context
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+
+static int
+htmlInitParserCtxt(htmlParserCtxtPtr ctxt)
+{
+ htmlSAXHandler *sax;
+
+ if (ctxt == NULL) return(-1);
+ memset(ctxt, 0, sizeof(htmlParserCtxt));
+
+ ctxt->dict = xmlDictCreate();
+ if (ctxt->dict == NULL) {
+ htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
+ return(-1);
+ }
+ sax = (htmlSAXHandler *) xmlMalloc(sizeof(htmlSAXHandler));
+ if (sax == NULL) {
+ htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
+ return(-1);
+ }
+ else
+ memset(sax, 0, sizeof(htmlSAXHandler));
+
+ /* Allocate the Input stack */
+ ctxt->inputTab = (htmlParserInputPtr *)
+ xmlMalloc(5 * sizeof(htmlParserInputPtr));
+ if (ctxt->inputTab == NULL) {
+ htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 0;
+ ctxt->input = NULL;
+ return(-1);
+ }
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 5;
+ ctxt->input = NULL;
+ ctxt->version = NULL;
+ ctxt->encoding = NULL;
+ ctxt->standalone = -1;
+ ctxt->instate = XML_PARSER_START;
+
+ /* Allocate the Node stack */
+ ctxt->nodeTab = (htmlNodePtr *) xmlMalloc(10 * sizeof(htmlNodePtr));
+ if (ctxt->nodeTab == NULL) {
+ htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
+ ctxt->nodeNr = 0;
+ ctxt->nodeMax = 0;
+ ctxt->node = NULL;
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 0;
+ ctxt->input = NULL;
+ return(-1);
+ }
+ ctxt->nodeNr = 0;
+ ctxt->nodeMax = 10;
+ ctxt->node = NULL;
+
+ /* Allocate the Name stack */
+ ctxt->nameTab = (const xmlChar **) xmlMalloc(10 * sizeof(xmlChar *));
+ if (ctxt->nameTab == NULL) {
+ htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
+ ctxt->nameNr = 0;
+ ctxt->nameMax = 10;
+ ctxt->name = NULL;
+ ctxt->nodeNr = 0;
+ ctxt->nodeMax = 0;
+ ctxt->node = NULL;
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 0;
+ ctxt->input = NULL;
+ return(-1);
+ }
+ ctxt->nameNr = 0;
+ ctxt->nameMax = 10;
+ ctxt->name = NULL;
+
+ if (sax == NULL) ctxt->sax = (xmlSAXHandlerPtr) &htmlDefaultSAXHandler;
+ else {
+ ctxt->sax = sax;
+ memcpy(sax, &htmlDefaultSAXHandler, sizeof(xmlSAXHandlerV1));
+ }
+ ctxt->userData = ctxt;
+ ctxt->myDoc = NULL;
+ ctxt->wellFormed = 1;
+ ctxt->replaceEntities = 0;
+ ctxt->linenumbers = xmlLineNumbersDefaultValue;
+ ctxt->html = 1;
+ ctxt->vctxt.userData = ctxt;
+ ctxt->vctxt.error = xmlParserValidityError;
+ ctxt->vctxt.warning = xmlParserValidityWarning;
+ ctxt->record_info = 0;
+ ctxt->validate = 0;
+ ctxt->nbChars = 0;
+ ctxt->checkIndex = 0;
+ ctxt->catalogs = NULL;
+ xmlInitNodeInfoSeq(&ctxt->node_seq);
+ return(0);
+}
+
+/**
+ * htmlFreeParserCtxt:
+ * @ctxt: an HTML parser context
+ *
+ * Free all the memory used by a parser context. However the parsed
+ * document in ctxt->myDoc is not freed.
+ */
+
+void
+htmlFreeParserCtxt(htmlParserCtxtPtr ctxt)
+{
+ xmlFreeParserCtxt(ctxt);
+}
+
+/**
+ * htmlNewParserCtxt:
+ *
+ * Allocate and initialize a new parser context.
+ *
+ * Returns the xmlParserCtxtPtr or NULL
+ */
+
+static htmlParserCtxtPtr
+htmlNewParserCtxt(void)
+{
+ xmlParserCtxtPtr ctxt;
+
+ ctxt = (xmlParserCtxtPtr) xmlMalloc(sizeof(xmlParserCtxt));
+ if (ctxt == NULL) {
+ htmlErrMemory(NULL, "NewParserCtxt: out of memory\n");
+ return(NULL);
+ }
+ memset(ctxt, 0, sizeof(xmlParserCtxt));
+ if (htmlInitParserCtxt(ctxt) < 0) {
+ htmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+ return(ctxt);
+}
+
+/**
+ * htmlCreateMemoryParserCtxt:
+ * @buffer: a pointer to a char array
+ * @size: the size of the array
+ *
+ * Create a parser context for an HTML in-memory document.
+ *
+ * Returns the new parser context or NULL
+ */
+htmlParserCtxtPtr
+htmlCreateMemoryParserCtxt(const char *buffer, int size) {
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputPtr input;
+ xmlParserInputBufferPtr buf;
+
+ if (buffer == NULL)
+ return(NULL);
+ if (size <= 0)
+ return(NULL);
+
+ ctxt = htmlNewParserCtxt();
+ if (ctxt == NULL)
+ return(NULL);
+
+ buf = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE);
+ if (buf == NULL) return(NULL);
+
+ input = xmlNewInputStream(ctxt);
+ if (input == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ input->filename = NULL;
+ input->buf = buf;
+ input->base = input->buf->buffer->content;
+ input->cur = input->buf->buffer->content;
+ input->end = &input->buf->buffer->content[input->buf->buffer->use];
+
+ inputPush(ctxt, input);
+ return(ctxt);
+}
+
+/**
+ * htmlCreateDocParserCtxt:
+ * @cur: a pointer to an array of xmlChar
+ * @encoding: a free form C string describing the HTML document encoding, or NULL
+ *
+ * Create a parser context for an HTML document.
+ *
+ * TODO: check the need to add encoding handling there
+ *
+ * Returns the new parser context or NULL
+ */
+static htmlParserCtxtPtr
+htmlCreateDocParserCtxt(xmlChar *cur, const char *encoding ATTRIBUTE_UNUSED) {
+ int len;
+ htmlParserCtxtPtr ctxt;
+
+ if (cur == NULL)
+ return(NULL);
+ len = xmlStrlen(cur);
+ ctxt = htmlCreateMemoryParserCtxt((char *)cur, len);
+
+ if (encoding != NULL) {
+ xmlCharEncoding enc;
+ xmlCharEncodingHandlerPtr handler;
+
+ if (ctxt->input->encoding != NULL)
+ xmlFree((xmlChar *) ctxt->input->encoding);
+ ctxt->input->encoding = xmlStrdup((const xmlChar *) encoding);
+
+ enc = xmlParseCharEncoding(encoding);
+ /*
+ * registered set of known encodings
+ */
+ if (enc != XML_CHAR_ENCODING_ERROR) {
+ xmlSwitchEncoding(ctxt, enc);
+ if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
+ htmlParseErr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "Unsupported encoding %s\n",
+ (const xmlChar *) encoding, NULL);
+ }
+ } else {
+ /*
+ * fallback for unknown encodings
+ */
+ handler = xmlFindCharEncodingHandler((const char *) encoding);
+ if (handler != NULL) {
+ xmlSwitchToEncoding(ctxt, handler);
+ } else {
+ htmlParseErr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "Unsupported encoding %s\n",
+ (const xmlChar *) encoding, NULL);
+ }
+ }
+ }
+ return(ctxt);
+}
+
+#ifdef LIBXML_PUSH_ENABLED
+/************************************************************************
+ * *
+ * Progressive parsing interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * htmlParseLookupSequence:
+ * @ctxt: an HTML parser context
+ * @first: the first char to lookup
+ * @next: the next char to lookup or zero
+ * @third: the next char to lookup or zero
+ * @comment: flag to force checking inside comments
+ *
+ * Try to find if a sequence (first, next, third) or just (first next) or
+ * (first) is available in the input stream.
+ * This function has a side effect of (possibly) incrementing ctxt->checkIndex
+ * to avoid rescanning sequences of bytes, it DOES change the state of the
+ * parser, do not use liberally.
+ * This is basically similar to xmlParseLookupSequence()
+ *
+ * Returns the index to the current parsing point if the full sequence
+ * is available, -1 otherwise.
+ */
+static int
+htmlParseLookupSequence(htmlParserCtxtPtr ctxt, xmlChar first,
+ xmlChar next, xmlChar third, int iscomment) {
+ int base, len;
+ htmlParserInputPtr in;
+ const xmlChar *buf;
+ int incomment = 0;
+
+ in = ctxt->input;
+ if (in == NULL) return(-1);
+ base = in->cur - in->base;
+ if (base < 0) return(-1);
+ if (ctxt->checkIndex > base)
+ base = ctxt->checkIndex;
+ if (in->buf == NULL) {
+ buf = in->base;
+ len = in->length;
+ } else {
+ buf = in->buf->buffer->content;
+ len = in->buf->buffer->use;
+ }
+ /* take into account the sequence length */
+ if (third) len -= 2;
+ else if (next) len --;
+ for (;base < len;base++) {
+ if (!incomment && (base + 4 < len) && !iscomment) {
+ if ((buf[base] == '<') && (buf[base + 1] == '!') &&
+ (buf[base + 2] == '-') && (buf[base + 3] == '-')) {
+ incomment = 1;
+ /* do not increment past <! - some people use <!--> */
+ base += 2;
+ }
+ }
+ if (incomment) {
+ if (base + 3 > len)
+ return(-1);
+ if ((buf[base] == '-') && (buf[base + 1] == '-') &&
+ (buf[base + 2] == '>')) {
+ incomment = 0;
+ base += 2;
+ }
+ continue;
+ }
+ if (buf[base] == first) {
+ if (third != 0) {
+ if ((buf[base + 1] != next) ||
+ (buf[base + 2] != third)) continue;
+ } else if (next != 0) {
+ if (buf[base + 1] != next) continue;
+ }
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ if (next == 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: lookup '%c' found at %d\n",
+ first, base);
+ else if (third == 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: lookup '%c%c' found at %d\n",
+ first, next, base);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: lookup '%c%c%c' found at %d\n",
+ first, next, third, base);
+#endif
+ return(base - (in->cur - in->base));
+ }
+ }
+ ctxt->checkIndex = base;
+#ifdef DEBUG_PUSH
+ if (next == 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: lookup '%c' failed\n", first);
+ else if (third == 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: lookup '%c%c' failed\n", first, next);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: lookup '%c%c%c' failed\n", first, next, third);
+#endif
+ return(-1);
+}
+
+/**
+ * htmlParseTryOrFinish:
+ * @ctxt: an HTML parser context
+ * @terminate: last chunk indicator
+ *
+ * Try to progress on parsing
+ *
+ * Returns zero if no parsing was possible
+ */
+static int
+htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
+ int ret = 0;
+ htmlParserInputPtr in;
+ int avail = 0;
+ xmlChar cur, next;
+
+#ifdef DEBUG_PUSH
+ switch (ctxt->instate) {
+ case XML_PARSER_EOF:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try EOF\n"); break;
+ case XML_PARSER_START:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try START\n"); break;
+ case XML_PARSER_MISC:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try MISC\n");break;
+ case XML_PARSER_COMMENT:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try COMMENT\n");break;
+ case XML_PARSER_PROLOG:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try PROLOG\n");break;
+ case XML_PARSER_START_TAG:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try START_TAG\n");break;
+ case XML_PARSER_CONTENT:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try CONTENT\n");break;
+ case XML_PARSER_CDATA_SECTION:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try CDATA_SECTION\n");break;
+ case XML_PARSER_END_TAG:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try END_TAG\n");break;
+ case XML_PARSER_ENTITY_DECL:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try ENTITY_DECL\n");break;
+ case XML_PARSER_ENTITY_VALUE:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try ENTITY_VALUE\n");break;
+ case XML_PARSER_ATTRIBUTE_VALUE:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try ATTRIBUTE_VALUE\n");break;
+ case XML_PARSER_DTD:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try DTD\n");break;
+ case XML_PARSER_EPILOG:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try EPILOG\n");break;
+ case XML_PARSER_PI:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try PI\n");break;
+ case XML_PARSER_SYSTEM_LITERAL:
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: try SYSTEM_LITERAL\n");break;
+ }
+#endif
+
+ while (1) {
+
+ in = ctxt->input;
+ if (in == NULL) break;
+ if (in->buf == NULL)
+ avail = in->length - (in->cur - in->base);
+ else
+ avail = in->buf->buffer->use - (in->cur - in->base);
+ if ((avail == 0) && (terminate)) {
+ htmlAutoCloseOnEnd(ctxt);
+ if ((ctxt->nameNr == 0) && (ctxt->instate != XML_PARSER_EOF)) {
+ /*
+ * SAX: end of the document processing.
+ */
+ ctxt->instate = XML_PARSER_EOF;
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+ }
+ }
+ if (avail < 1)
+ goto done;
+ cur = in->cur[0];
+ if (cur == 0) {
+ SKIP(1);
+ continue;
+ }
+
+ switch (ctxt->instate) {
+ case XML_PARSER_EOF:
+ /*
+ * Document parsing is done !
+ */
+ goto done;
+ case XML_PARSER_START:
+ /*
+ * Very first chars read from the document flow.
+ */
+ cur = in->cur[0];
+ if (IS_BLANK_CH(cur)) {
+ SKIP_BLANKS;
+ if (in->buf == NULL)
+ avail = in->length - (in->cur - in->base);
+ else
+ avail = in->buf->buffer->use - (in->cur - in->base);
+ }
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
+ ctxt->sax->setDocumentLocator(ctxt->userData,
+ &xmlDefaultSAXLocator);
+ if ((ctxt->sax) && (ctxt->sax->startDocument) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->startDocument(ctxt->userData);
+
+ cur = in->cur[0];
+ next = in->cur[1];
+ if ((cur == '<') && (next == '!') &&
+ (UPP(2) == 'D') && (UPP(3) == 'O') &&
+ (UPP(4) == 'C') && (UPP(5) == 'T') &&
+ (UPP(6) == 'Y') && (UPP(7) == 'P') &&
+ (UPP(8) == 'E')) {
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '>', 0, 0, 0) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: Parsing internal subset\n");
+#endif
+ htmlParseDocTypeDecl(ctxt);
+ ctxt->instate = XML_PARSER_PROLOG;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering PROLOG\n");
+#endif
+ } else {
+ ctxt->instate = XML_PARSER_MISC;
+ }
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering MISC\n");
+#endif
+ break;
+ case XML_PARSER_MISC:
+ SKIP_BLANKS;
+ if (in->buf == NULL)
+ avail = in->length - (in->cur - in->base);
+ else
+ avail = in->buf->buffer->use - (in->cur - in->base);
+ if (avail < 2)
+ goto done;
+ cur = in->cur[0];
+ next = in->cur[1];
+ if ((cur == '<') && (next == '!') &&
+ (in->cur[2] == '-') && (in->cur[3] == '-')) {
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '-', '-', '>', 1) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: Parsing Comment\n");
+#endif
+ htmlParseComment(ctxt);
+ ctxt->instate = XML_PARSER_MISC;
+ } else if ((cur == '<') && (next == '!') &&
+ (UPP(2) == 'D') && (UPP(3) == 'O') &&
+ (UPP(4) == 'C') && (UPP(5) == 'T') &&
+ (UPP(6) == 'Y') && (UPP(7) == 'P') &&
+ (UPP(8) == 'E')) {
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '>', 0, 0, 0) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: Parsing internal subset\n");
+#endif
+ htmlParseDocTypeDecl(ctxt);
+ ctxt->instate = XML_PARSER_PROLOG;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering PROLOG\n");
+#endif
+ } else if ((cur == '<') && (next == '!') &&
+ (avail < 9)) {
+ goto done;
+ } else {
+ ctxt->instate = XML_PARSER_START_TAG;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering START_TAG\n");
+#endif
+ }
+ break;
+ case XML_PARSER_PROLOG:
+ SKIP_BLANKS;
+ if (in->buf == NULL)
+ avail = in->length - (in->cur - in->base);
+ else
+ avail = in->buf->buffer->use - (in->cur - in->base);
+ if (avail < 2)
+ goto done;
+ cur = in->cur[0];
+ next = in->cur[1];
+ if ((cur == '<') && (next == '!') &&
+ (in->cur[2] == '-') && (in->cur[3] == '-')) {
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '-', '-', '>', 1) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: Parsing Comment\n");
+#endif
+ htmlParseComment(ctxt);
+ ctxt->instate = XML_PARSER_PROLOG;
+ } else if ((cur == '<') && (next == '!') &&
+ (avail < 4)) {
+ goto done;
+ } else {
+ ctxt->instate = XML_PARSER_START_TAG;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering START_TAG\n");
+#endif
+ }
+ break;
+ case XML_PARSER_EPILOG:
+ if (in->buf == NULL)
+ avail = in->length - (in->cur - in->base);
+ else
+ avail = in->buf->buffer->use - (in->cur - in->base);
+ if (avail < 1)
+ goto done;
+ cur = in->cur[0];
+ if (IS_BLANK_CH(cur)) {
+ htmlParseCharData(ctxt);
+ goto done;
+ }
+ if (avail < 2)
+ goto done;
+ next = in->cur[1];
+ if ((cur == '<') && (next == '!') &&
+ (in->cur[2] == '-') && (in->cur[3] == '-')) {
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '-', '-', '>', 1) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: Parsing Comment\n");
+#endif
+ htmlParseComment(ctxt);
+ ctxt->instate = XML_PARSER_EPILOG;
+ } else if ((cur == '<') && (next == '!') &&
+ (avail < 4)) {
+ goto done;
+ } else {
+ ctxt->errNo = XML_ERR_DOCUMENT_END;
+ ctxt->wellFormed = 0;
+ ctxt->instate = XML_PARSER_EOF;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering EOF\n");
+#endif
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+ goto done;
+ }
+ break;
+ case XML_PARSER_START_TAG: {
+ const xmlChar *name, *oldname;
+ int depth = ctxt->nameNr;
+ const htmlElemDesc * info;
+
+ if (avail < 2)
+ goto done;
+ cur = in->cur[0];
+ if (cur != '<') {
+ ctxt->instate = XML_PARSER_CONTENT;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ }
+ if (in->cur[1] == '/') {
+ ctxt->instate = XML_PARSER_END_TAG;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering END_TAG\n");
+#endif
+ break;
+ }
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '>', 0, 0, 0) < 0))
+ goto done;
+
+ oldname = ctxt->name;
+ htmlParseStartTag(ctxt);
+ name = ctxt->name;
+ if (((depth == ctxt->nameNr) &&
+ (xmlStrEqual(oldname, ctxt->name))) ||
+ (name == NULL)) {
+ if (CUR == '>')
+ NEXT;
+ break;
+ }
+
+ /*
+ * Lookup the info for that element.
+ */
+ info = htmlTagLookup(name);
+ if (info == NULL) {
+ htmlParseErr(ctxt, XML_HTML_UNKNOWN_TAG,
+ "Tag %s invalid\n", name, NULL);
+ }
+
+ /*
+ * Check for an Empty Element labeled the XML/SGML way
+ */
+ if ((CUR == '/') && (NXT(1) == '>')) {
+ SKIP(2);
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
+ ctxt->sax->endElement(ctxt->userData, name);
+ oldname = htmlnamePop(ctxt);
+ ctxt->instate = XML_PARSER_CONTENT;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ }
+
+ if (CUR == '>') {
+ NEXT;
+ } else {
+ htmlParseErr(ctxt, XML_ERR_GT_REQUIRED,
+ "Couldn't find end of Start Tag %s\n",
+ name, NULL);
+
+ /*
+ * end of parsing of this node.
+ */
+ if (xmlStrEqual(name, ctxt->name)) {
+ nodePop(ctxt);
+ oldname = htmlnamePop(ctxt);
+ }
+
+ ctxt->instate = XML_PARSER_CONTENT;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ }
+
+ /*
+ * Check for an Empty Element from DTD definition
+ */
+ if ((info != NULL) && (info->empty)) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
+ ctxt->sax->endElement(ctxt->userData, name);
+ oldname = htmlnamePop(ctxt);
+ }
+ ctxt->instate = XML_PARSER_CONTENT;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ }
+ case XML_PARSER_CONTENT: {
+ long cons;
+ /*
+ * Handle preparsed entities and charRef
+ */
+ if (ctxt->token != 0) {
+ xmlChar chr[2] = { 0 , 0 } ;
+
+ chr[0] = (xmlChar) ctxt->token;
+ htmlCheckParagraph(ctxt);
+ if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL))
+ ctxt->sax->characters(ctxt->userData, chr, 1);
+ ctxt->token = 0;
+ ctxt->checkIndex = 0;
+ }
+ if ((avail == 1) && (terminate)) {
+ cur = in->cur[0];
+ if ((cur != '<') && (cur != '&')) {
+ if (ctxt->sax != NULL) {
+ if (IS_BLANK_CH(cur)) {
+ if (ctxt->sax->ignorableWhitespace != NULL)
+ ctxt->sax->ignorableWhitespace(
+ ctxt->userData, &cur, 1);
+ } else {
+ htmlCheckParagraph(ctxt);
+ if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(
+ ctxt->userData, &cur, 1);
+ }
+ }
+ ctxt->token = 0;
+ ctxt->checkIndex = 0;
+ in->cur++;
+ break;
+ }
+ }
+ if (avail < 2)
+ goto done;
+ cur = in->cur[0];
+ next = in->cur[1];
+ cons = ctxt->nbChars;
+ if ((xmlStrEqual(ctxt->name, BAD_CAST"script")) ||
+ (xmlStrEqual(ctxt->name, BAD_CAST"style"))) {
+ /*
+ * Handle SCRIPT/STYLE separately
+ */
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '<', '/', 0, 0) < 0))
+ goto done;
+ htmlParseScript(ctxt);
+ if ((cur == '<') && (next == '/')) {
+ ctxt->instate = XML_PARSER_END_TAG;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering END_TAG\n");
+#endif
+ break;
+ }
+ } else {
+ /*
+ * Sometimes DOCTYPE arrives in the middle of the document
+ */
+ if ((cur == '<') && (next == '!') &&
+ (UPP(2) == 'D') && (UPP(3) == 'O') &&
+ (UPP(4) == 'C') && (UPP(5) == 'T') &&
+ (UPP(6) == 'Y') && (UPP(7) == 'P') &&
+ (UPP(8) == 'E')) {
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '>', 0, 0, 0) < 0))
+ goto done;
+ htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
+ "Misplaced DOCTYPE declaration\n",
+ BAD_CAST "DOCTYPE" , NULL);
+ htmlParseDocTypeDecl(ctxt);
+ } else if ((cur == '<') && (next == '!') &&
+ (in->cur[2] == '-') && (in->cur[3] == '-')) {
+ if ((!terminate) &&
+ (htmlParseLookupSequence(
+ ctxt, '-', '-', '>', 1) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: Parsing Comment\n");
+#endif
+ htmlParseComment(ctxt);
+ ctxt->instate = XML_PARSER_CONTENT;
+ } else if ((cur == '<') && (next == '!') && (avail < 4)) {
+ goto done;
+ } else if ((cur == '<') && (next == '/')) {
+ ctxt->instate = XML_PARSER_END_TAG;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering END_TAG\n");
+#endif
+ break;
+ } else if (cur == '<') {
+ ctxt->instate = XML_PARSER_START_TAG;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering START_TAG\n");
+#endif
+ break;
+ } else if (cur == '&') {
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, ';', 0, 0, 0) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: Parsing Reference\n");
+#endif
+ /* TODO: check generation of subtrees if noent !!! */
+ htmlParseReference(ctxt);
+ } else {
+ /*
+ * check that the text sequence is complete
+ * before handing out the data to the parser
+ * to avoid problems with erroneous end of
+ * data detection.
+ */
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '<', 0, 0, 0) < 0))
+ goto done;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: Parsing char data\n");
+#endif
+ htmlParseCharData(ctxt);
+ }
+ }
+ if (cons == ctxt->nbChars) {
+ if (ctxt->node != NULL) {
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "detected an error in element content\n",
+ NULL, NULL);
+ }
+ NEXT;
+ break;
+ }
+
+ break;
+ }
+ case XML_PARSER_END_TAG:
+ if (avail < 2)
+ goto done;
+ if ((!terminate) &&
+ (htmlParseLookupSequence(ctxt, '>', 0, 0, 0) < 0))
+ goto done;
+ htmlParseEndTag(ctxt);
+ if (ctxt->nameNr == 0) {
+ ctxt->instate = XML_PARSER_EPILOG;
+ } else {
+ ctxt->instate = XML_PARSER_CONTENT;
+ }
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_CDATA_SECTION:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == CDATA\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_DTD:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == DTD\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_COMMENT:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == COMMENT\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_PI:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == PI\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_ENTITY_DECL:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == ENTITY_DECL\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_ENTITY_VALUE:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == ENTITY_VALUE\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering DTD\n");
+#endif
+ break;
+ case XML_PARSER_ATTRIBUTE_VALUE:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == ATTRIBUTE_VALUE\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_START_TAG;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering START_TAG\n");
+#endif
+ break;
+ case XML_PARSER_SYSTEM_LITERAL:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == XML_PARSER_SYSTEM_LITERAL\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_IGNORE:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == XML_PARSER_IGNORE\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_PUBLIC_LITERAL:
+ htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "HPP: internal error, state == XML_PARSER_LITERAL\n",
+ NULL, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "HPP: entering CONTENT\n");
+#endif
+ break;
+
+ }
+ }
+done:
+ if ((avail == 0) && (terminate)) {
+ htmlAutoCloseOnEnd(ctxt);
+ if ((ctxt->nameNr == 0) && (ctxt->instate != XML_PARSER_EOF)) {
+ /*
+ * SAX: end of the document processing.
+ */
+ ctxt->instate = XML_PARSER_EOF;
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+ }
+ }
+ if ((ctxt->myDoc != NULL) &&
+ ((terminate) || (ctxt->instate == XML_PARSER_EOF) ||
+ (ctxt->instate == XML_PARSER_EPILOG))) {
+ xmlDtdPtr dtd;
+ dtd = xmlGetIntSubset(ctxt->myDoc);
+ if (dtd == NULL)
+ ctxt->myDoc->intSubset =
+ xmlCreateIntSubset(ctxt->myDoc, BAD_CAST "html",
+ BAD_CAST "-//W3C//DTD HTML 4.0 Transitional//EN",
+ BAD_CAST "http://www.w3.org/TR/REC-html40/loose.dtd");
+ }
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext, "HPP: done %d\n", ret);
+#endif
+ return(ret);
+}
+
+/**
+ * htmlParseChunk:
+ * @ctxt: an HTML parser context
+ * @chunk: an char array
+ * @size: the size in byte of the chunk
+ * @terminate: last chunk indicator
+ *
+ * Parse a Chunk of memory
+ *
+ * Returns zero if no error, the xmlParserErrors otherwise.
+ */
+int
+htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size,
+ int terminate) {
+ if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
+ (ctxt->input->buf != NULL) && (ctxt->instate != XML_PARSER_EOF)) {
+ int base = ctxt->input->base - ctxt->input->buf->buffer->content;
+ int cur = ctxt->input->cur - ctxt->input->base;
+
+ xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
+ ctxt->input->base = ctxt->input->buf->buffer->content + base;
+ ctxt->input->cur = ctxt->input->base + cur;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext, "HPP: pushed %d\n", size);
+#endif
+
+#if 0
+ if ((terminate) || (ctxt->input->buf->buffer->use > 80))
+ htmlParseTryOrFinish(ctxt, terminate);
+#endif
+ } else if (ctxt->instate != XML_PARSER_EOF) {
+ if ((ctxt->input != NULL) && ctxt->input->buf != NULL) {
+ xmlParserInputBufferPtr in = ctxt->input->buf;
+ if ((in->encoder != NULL) && (in->buffer != NULL) &&
+ (in->raw != NULL)) {
+ int nbchars;
+
+ nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw);
+ if (nbchars < 0) {
+ htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
+ "encoder error\n", NULL, NULL);
+ return(XML_ERR_INVALID_ENCODING);
+ }
+ }
+ }
+ }
+ htmlParseTryOrFinish(ctxt, terminate);
+ if (terminate) {
+ if ((ctxt->instate != XML_PARSER_EOF) &&
+ (ctxt->instate != XML_PARSER_EPILOG) &&
+ (ctxt->instate != XML_PARSER_MISC)) {
+ ctxt->errNo = XML_ERR_DOCUMENT_END;
+ ctxt->wellFormed = 0;
+ }
+ if (ctxt->instate != XML_PARSER_EOF) {
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+ }
+ ctxt->instate = XML_PARSER_EOF;
+ }
+ return((xmlParserErrors) ctxt->errNo);
+}
+#endif /* LIBXML_PUSH_ENABLED */
+
+/************************************************************************
+ * *
+ * User entry points *
+ * *
+ ************************************************************************/
+
+/**
+ * htmlCreatePushParserCtxt:
+ * @sax: a SAX handler
+ * @user_data: The user data returned on SAX callbacks
+ * @chunk: a pointer to an array of chars
+ * @size: number of chars in the array
+ * @filename: an optional file name or URI
+ * @enc: an optional encoding
+ *
+ * Create a parser context for using the HTML parser in push mode
+ * The value of @filename is used for fetching external entities
+ * and error/warning reports.
+ *
+ * Returns the new parser context or NULL
+ */
+htmlParserCtxtPtr
+htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax, void *user_data,
+ const char *chunk, int size, const char *filename,
+ xmlCharEncoding enc) {
+ htmlParserCtxtPtr ctxt;
+ htmlParserInputPtr inputStream;
+ xmlParserInputBufferPtr buf;
+
+ xmlInitParser();
+
+ buf = xmlAllocParserInputBuffer(enc);
+ if (buf == NULL) return(NULL);
+
+ ctxt = htmlNewParserCtxt();
+ if (ctxt == NULL) {
+ xmlFreeParserInputBuffer(buf);
+ return(NULL);
+ }
+ if(enc==XML_CHAR_ENCODING_UTF8 || buf->encoder)
+ ctxt->charset=XML_CHAR_ENCODING_UTF8;
+ if (sax != NULL) {
+ if (ctxt->sax != (xmlSAXHandlerPtr) &htmlDefaultSAXHandler)
+ xmlFree(ctxt->sax);
+ ctxt->sax = (htmlSAXHandlerPtr) xmlMalloc(sizeof(htmlSAXHandler));
+ if (ctxt->sax == NULL) {
+ xmlFree(buf);
+ xmlFree(ctxt);
+ return(NULL);
+ }
+ memcpy(ctxt->sax, sax, sizeof(htmlSAXHandler));
+ if (user_data != NULL)
+ ctxt->userData = user_data;
+ }
+ if (filename == NULL) {
+ ctxt->directory = NULL;
+ } else {
+ ctxt->directory = xmlParserGetDirectory(filename);
+ }
+
+ inputStream = htmlNewInputStream(ctxt);
+ if (inputStream == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ xmlFree(buf);
+ return(NULL);
+ }
+
+ if (filename == NULL)
+ inputStream->filename = NULL;
+ else
+ inputStream->filename = (char *)
+ xmlCanonicPath((const xmlChar *) filename);
+ inputStream->buf = buf;
+ inputStream->base = inputStream->buf->buffer->content;
+ inputStream->cur = inputStream->buf->buffer->content;
+ inputStream->end =
+ &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
+
+ inputPush(ctxt, inputStream);
+
+ if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
+ (ctxt->input->buf != NULL)) {
+ int base = ctxt->input->base - ctxt->input->buf->buffer->content;
+ int cur = ctxt->input->cur - ctxt->input->base;
+
+ xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
+
+ ctxt->input->base = ctxt->input->buf->buffer->content + base;
+ ctxt->input->cur = ctxt->input->base + cur;
+ ctxt->input->end =
+ &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use];
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext, "HPP: pushed %d\n", size);
+#endif
+ }
+
+ return(ctxt);
+}
+
+/**
+ * htmlSAXParseDoc:
+ * @cur: a pointer to an array of xmlChar
+ * @encoding: a free form C string describing the HTML document encoding, or NULL
+ * @sax: the SAX handler block
+ * @userData: if using SAX, this pointer will be provided on callbacks.
+ *
+ * Parse an HTML in-memory document. If sax is not NULL, use the SAX callbacks
+ * to handle parse events. If sax is NULL, fallback to the default DOM
+ * behavior and return a tree.
+ *
+ * Returns the resulting document tree unless SAX is NULL or the document is
+ * not well formed.
+ */
+
+htmlDocPtr
+htmlSAXParseDoc(xmlChar *cur, const char *encoding, htmlSAXHandlerPtr sax, void *userData) {
+ htmlDocPtr ret;
+ htmlParserCtxtPtr ctxt;
+
+ xmlInitParser();
+
+ if (cur == NULL) return(NULL);
+
+
+ ctxt = htmlCreateDocParserCtxt(cur, encoding);
+ if (ctxt == NULL) return(NULL);
+ if (sax != NULL) {
+ if (ctxt->sax != NULL) xmlFree (ctxt->sax);
+ ctxt->sax = sax;
+ ctxt->userData = userData;
+ }
+
+ htmlParseDocument(ctxt);
+ ret = ctxt->myDoc;
+ if (sax != NULL) {
+ ctxt->sax = NULL;
+ ctxt->userData = NULL;
+ }
+ htmlFreeParserCtxt(ctxt);
+
+ return(ret);
+}
+
+/**
+ * htmlParseDoc:
+ * @cur: a pointer to an array of xmlChar
+ * @encoding: a free form C string describing the HTML document encoding, or NULL
+ *
+ * parse an HTML in-memory document and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+
+htmlDocPtr
+htmlParseDoc(xmlChar *cur, const char *encoding) {
+ return(htmlSAXParseDoc(cur, encoding, NULL, NULL));
+}
+
+
+/**
+ * htmlCreateFileParserCtxt:
+ * @filename: the filename
+ * @encoding: a free form C string describing the HTML document encoding, or NULL
+ *
+ * Create a parser context for a file content.
+ * Automatic support for ZLIB/Compress compressed document is provided
+ * by default if found at compile-time.
+ *
+ * Returns the new parser context or NULL
+ */
+htmlParserCtxtPtr
+htmlCreateFileParserCtxt(const char *filename, const char *encoding)
+{
+ htmlParserCtxtPtr ctxt;
+ htmlParserInputPtr inputStream;
+ char *canonicFilename;
+ /* htmlCharEncoding enc; */
+ xmlChar *content, *content_line = (xmlChar *) "charset=";
+
+ ctxt = htmlNewParserCtxt();
+ if (ctxt == NULL) {
+ return(NULL);
+ }
+ canonicFilename = (char *) xmlCanonicPath((const xmlChar *) filename);
+ if (canonicFilename == NULL) {
+#ifdef LIBXML_SAX1_ENABLED
+ if (xmlDefaultSAXHandler.error != NULL) {
+ xmlDefaultSAXHandler.error(NULL, "out of memory\n");
+ }
+#endif
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ inputStream = xmlLoadExternalEntity(canonicFilename, NULL, ctxt);
+ xmlFree(canonicFilename);
+ if (inputStream == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ inputPush(ctxt, inputStream);
+
+ /* set encoding */
+ if (encoding) {
+ content = xmlMallocAtomic (xmlStrlen(content_line) + strlen(encoding) + 1);
+ if (content) {
+ strcpy ((char *)content, (char *)content_line);
+ strcat ((char *)content, (char *)encoding);
+ htmlCheckEncoding (ctxt, content);
+ xmlFree (content);
+ }
+ }
+
+ return(ctxt);
+}
+
+/**
+ * htmlSAXParseFile:
+ * @filename: the filename
+ * @encoding: a free form C string describing the HTML document encoding, or NULL
+ * @sax: the SAX handler block
+ * @userData: if using SAX, this pointer will be provided on callbacks.
+ *
+ * parse an HTML file and build a tree. Automatic support for ZLIB/Compress
+ * compressed document is provided by default if found at compile-time.
+ * It use the given SAX function block to handle the parsing callback.
+ * If sax is NULL, fallback to the default DOM tree building routines.
+ *
+ * Returns the resulting document tree unless SAX is NULL or the document is
+ * not well formed.
+ */
+
+htmlDocPtr
+htmlSAXParseFile(const char *filename, const char *encoding, htmlSAXHandlerPtr sax,
+ void *userData) {
+ htmlDocPtr ret;
+ htmlParserCtxtPtr ctxt;
+ htmlSAXHandlerPtr oldsax = NULL;
+
+ xmlInitParser();
+
+ ctxt = htmlCreateFileParserCtxt(filename, encoding);
+ if (ctxt == NULL) return(NULL);
+ if (sax != NULL) {
+ oldsax = ctxt->sax;
+ ctxt->sax = sax;
+ ctxt->userData = userData;
+ }
+
+ htmlParseDocument(ctxt);
+
+ ret = ctxt->myDoc;
+ if (sax != NULL) {
+ ctxt->sax = oldsax;
+ ctxt->userData = NULL;
+ }
+ htmlFreeParserCtxt(ctxt);
+
+ return(ret);
+}
+
+/**
+ * htmlParseFile:
+ * @filename: the filename
+ * @encoding: a free form C string describing the HTML document encoding, or NULL
+ *
+ * parse an HTML file and build a tree. Automatic support for ZLIB/Compress
+ * compressed document is provided by default if found at compile-time.
+ *
+ * Returns the resulting document tree
+ */
+
+htmlDocPtr
+htmlParseFile(const char *filename, const char *encoding) {
+ return(htmlSAXParseFile(filename, encoding, NULL, NULL));
+}
+
+/**
+ * htmlHandleOmittedElem:
+ * @val: int 0 or 1
+ *
+ * Set and return the previous value for handling HTML omitted tags.
+ *
+ * Returns the last value for 0 for no handling, 1 for auto insertion.
+ */
+
+int
+htmlHandleOmittedElem(int val) {
+ int old = htmlOmittedDefaultValue;
+
+ htmlOmittedDefaultValue = val;
+ return(old);
+}
+
+/**
+ * htmlElementAllowedHere:
+ * @parent: HTML parent element
+ * @elt: HTML element
+ *
+ * Checks whether an HTML element may be a direct child of a parent element.
+ * Note - doesn't check for deprecated elements
+ *
+ * Returns 1 if allowed; 0 otherwise.
+ */
+int
+htmlElementAllowedHere(const htmlElemDesc* parent, const xmlChar* elt) {
+ const char** p ;
+
+ if ( ! elt || ! parent || ! parent->subelts )
+ return 0 ;
+
+ for ( p = parent->subelts; *p; ++p )
+ if ( !xmlStrcmp((const xmlChar *)*p, elt) )
+ return 1 ;
+
+ return 0 ;
+}
+/**
+ * htmlElementStatusHere:
+ * @parent: HTML parent element
+ * @elt: HTML element
+ *
+ * Checks whether an HTML element may be a direct child of a parent element.
+ * and if so whether it is valid or deprecated.
+ *
+ * Returns one of HTML_VALID, HTML_DEPRECATED, HTML_INVALID
+ */
+htmlStatus
+htmlElementStatusHere(const htmlElemDesc* parent, const htmlElemDesc* elt) {
+ if ( ! parent || ! elt )
+ return HTML_INVALID ;
+ if ( ! htmlElementAllowedHere(parent, (const xmlChar*) elt->name ) )
+ return HTML_INVALID ;
+
+ return ( elt->dtd == 0 ) ? HTML_VALID : HTML_DEPRECATED ;
+}
+/**
+ * htmlAttrAllowed:
+ * @elt: HTML element
+ * @attr: HTML attribute
+ * @legacy: whether to allow deprecated attributes
+ *
+ * Checks whether an attribute is valid for an element
+ * Has full knowledge of Required and Deprecated attributes
+ *
+ * Returns one of HTML_REQUIRED, HTML_VALID, HTML_DEPRECATED, HTML_INVALID
+ */
+htmlStatus
+htmlAttrAllowed(const htmlElemDesc* elt, const xmlChar* attr, int legacy) {
+ const char** p ;
+
+ if ( !elt || ! attr )
+ return HTML_INVALID ;
+
+ if ( elt->attrs_req )
+ for ( p = elt->attrs_req; *p; ++p)
+ if ( !xmlStrcmp((const xmlChar*)*p, attr) )
+ return HTML_REQUIRED ;
+
+ if ( elt->attrs_opt )
+ for ( p = elt->attrs_opt; *p; ++p)
+ if ( !xmlStrcmp((const xmlChar*)*p, attr) )
+ return HTML_VALID ;
+
+ if ( legacy && elt->attrs_depr )
+ for ( p = elt->attrs_depr; *p; ++p)
+ if ( !xmlStrcmp((const xmlChar*)*p, attr) )
+ return HTML_DEPRECATED ;
+
+ return HTML_INVALID ;
+}
+/**
+ * htmlNodeStatus:
+ * @node: an htmlNodePtr in a tree
+ * @legacy: whether to allow deprecated elements (YES is faster here
+ * for Element nodes)
+ *
+ * Checks whether the tree node is valid. Experimental (the author
+ * only uses the HTML enhancements in a SAX parser)
+ *
+ * Return: for Element nodes, a return from htmlElementAllowedHere (if
+ * legacy allowed) or htmlElementStatusHere (otherwise).
+ * for Attribute nodes, a return from htmlAttrAllowed
+ * for other nodes, HTML_NA (no checks performed)
+ */
+htmlStatus
+htmlNodeStatus(const htmlNodePtr node, int legacy) {
+ if ( ! node )
+ return HTML_INVALID ;
+
+ switch ( node->type ) {
+ case XML_ELEMENT_NODE:
+ return legacy
+ ? ( htmlElementAllowedHere (
+ htmlTagLookup(node->parent->name) , node->name
+ ) ? HTML_VALID : HTML_INVALID )
+ : htmlElementStatusHere(
+ htmlTagLookup(node->parent->name) ,
+ htmlTagLookup(node->name) )
+ ;
+ case XML_ATTRIBUTE_NODE:
+ return htmlAttrAllowed(
+ htmlTagLookup(node->parent->name) , node->name, legacy) ;
+ default: return HTML_NA ;
+ }
+}
+/************************************************************************
+ * *
+ * New set (2.6.0) of simpler and more flexible APIs *
+ * *
+ ************************************************************************/
+/**
+ * DICT_FREE:
+ * @str: a string
+ *
+ * Free a string if it is not owned by the "dict" dictionnary in the
+ * current scope
+ */
+#define DICT_FREE(str) \
+ if ((str) && ((!dict) || \
+ (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
+ xmlFree((char *)(str));
+
+/**
+ * htmlCtxtReset:
+ * @ctxt: an HTML parser context
+ *
+ * Reset a parser context
+ */
+void
+htmlCtxtReset(htmlParserCtxtPtr ctxt)
+{
+ xmlParserInputPtr input;
+ xmlDictPtr dict = ctxt->dict;
+
+ while ((input = inputPop(ctxt)) != NULL) { /* Non consuming */
+ xmlFreeInputStream(input);
+ }
+ ctxt->inputNr = 0;
+ ctxt->input = NULL;
+
+ ctxt->spaceNr = 0;
+ ctxt->spaceTab[0] = -1;
+ ctxt->space = &ctxt->spaceTab[0];
+
+
+ ctxt->nodeNr = 0;
+ ctxt->node = NULL;
+
+ ctxt->nameNr = 0;
+ ctxt->name = NULL;
+
+ DICT_FREE(ctxt->version);
+ ctxt->version = NULL;
+ DICT_FREE(ctxt->encoding);
+ ctxt->encoding = NULL;
+ DICT_FREE(ctxt->directory);
+ ctxt->directory = NULL;
+ DICT_FREE(ctxt->extSubURI);
+ ctxt->extSubURI = NULL;
+ DICT_FREE(ctxt->extSubSystem);
+ ctxt->extSubSystem = NULL;
+ if (ctxt->myDoc != NULL)
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+
+ ctxt->standalone = -1;
+ ctxt->hasExternalSubset = 0;
+ ctxt->hasPErefs = 0;
+ ctxt->html = 1;
+ ctxt->external = 0;
+ ctxt->instate = XML_PARSER_START;
+ ctxt->token = 0;
+
+ ctxt->wellFormed = 1;
+ ctxt->nsWellFormed = 1;
+ ctxt->valid = 1;
+ ctxt->vctxt.userData = ctxt;
+ ctxt->vctxt.error = xmlParserValidityError;
+ ctxt->vctxt.warning = xmlParserValidityWarning;
+ ctxt->record_info = 0;
+ ctxt->nbChars = 0;
+ ctxt->checkIndex = 0;
+ ctxt->inSubset = 0;
+ ctxt->errNo = XML_ERR_OK;
+ ctxt->depth = 0;
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ ctxt->catalogs = NULL;
+ xmlInitNodeInfoSeq(&ctxt->node_seq);
+
+ if (ctxt->attsDefault != NULL) {
+ xmlHashFree(ctxt->attsDefault, (xmlHashDeallocator) xmlFree);
+ ctxt->attsDefault = NULL;
+ }
+ if (ctxt->attsSpecial != NULL) {
+ xmlHashFree(ctxt->attsSpecial, NULL);
+ ctxt->attsSpecial = NULL;
+ }
+}
+
+/**
+ * htmlCtxtUseOptions:
+ * @ctxt: an HTML parser context
+ * @options: a combination of htmlParserOption(s)
+ *
+ * Applies the options to the parser context
+ *
+ * Returns 0 in case of success, the set of unknown or unimplemented options
+ * in case of error.
+ */
+int
+htmlCtxtUseOptions(htmlParserCtxtPtr ctxt, int options)
+{
+ if (options & HTML_PARSE_NOWARNING) {
+ ctxt->sax->warning = NULL;
+ ctxt->vctxt.warning = NULL;
+ options -= XML_PARSE_NOWARNING;
+ ctxt->options |= XML_PARSE_NOWARNING;
+ }
+ if (options & HTML_PARSE_NOERROR) {
+ ctxt->sax->error = NULL;
+ ctxt->vctxt.error = NULL;
+ ctxt->sax->fatalError = NULL;
+ options -= XML_PARSE_NOERROR;
+ ctxt->options |= XML_PARSE_NOERROR;
+ }
+ if (options & HTML_PARSE_PEDANTIC) {
+ ctxt->pedantic = 1;
+ options -= XML_PARSE_PEDANTIC;
+ ctxt->options |= XML_PARSE_PEDANTIC;
+ } else
+ ctxt->pedantic = 0;
+ if (options & XML_PARSE_NOBLANKS) {
+ ctxt->keepBlanks = 0;
+ ctxt->sax->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
+ options -= XML_PARSE_NOBLANKS;
+ ctxt->options |= XML_PARSE_NOBLANKS;
+ } else
+ ctxt->keepBlanks = 1;
+ ctxt->dictNames = 0;
+ return (options);
+}
+
+/**
+ * htmlDoRead:
+ * @ctxt: an HTML parser context
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ * @reuse: keep the context for reuse
+ *
+ * Common front-end for the htmlRead functions
+ *
+ * Returns the resulting document tree or NULL
+ */
+static htmlDocPtr
+htmlDoRead(htmlParserCtxtPtr ctxt, const char *URL, const char *encoding,
+ int options, int reuse)
+{
+ htmlDocPtr ret;
+
+ htmlCtxtUseOptions(ctxt, options);
+ ctxt->html = 1;
+ if (encoding != NULL) {
+ xmlCharEncodingHandlerPtr hdlr;
+
+ hdlr = xmlFindCharEncodingHandler(encoding);
+ if (hdlr != NULL)
+ xmlSwitchToEncoding(ctxt, hdlr);
+ }
+ if ((URL != NULL) && (ctxt->input != NULL) &&
+ (ctxt->input->filename == NULL))
+ ctxt->input->filename = (char *) xmlStrdup((const xmlChar *) URL);
+ htmlParseDocument(ctxt);
+ ret = ctxt->myDoc;
+ ctxt->myDoc = NULL;
+ if (!reuse) {
+ if ((ctxt->dictNames) &&
+ (ret != NULL) &&
+ (ret->dict == ctxt->dict))
+ ctxt->dict = NULL;
+ xmlFreeParserCtxt(ctxt);
+ }
+ return (ret);
+}
+
+/**
+ * htmlReadDoc:
+ * @cur: a pointer to a zero terminated string
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an XML in-memory document and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlReadDoc(const xmlChar * cur, const char *URL, const char *encoding, int options)
+{
+ htmlParserCtxtPtr ctxt;
+
+ if (cur == NULL)
+ return (NULL);
+
+ ctxt = xmlCreateDocParserCtxt(cur);
+ if (ctxt == NULL)
+ return (NULL);
+ return (htmlDoRead(ctxt, URL, encoding, options, 0));
+}
+
+/**
+ * htmlReadFile:
+ * @filename: a file or URL
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an XML file from the filesystem or the network.
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlReadFile(const char *filename, const char *encoding, int options)
+{
+ htmlParserCtxtPtr ctxt;
+
+ ctxt = htmlCreateFileParserCtxt(filename, encoding);
+ if (ctxt == NULL)
+ return (NULL);
+ return (htmlDoRead(ctxt, NULL, NULL, options, 0));
+}
+
+/**
+ * htmlReadMemory:
+ * @buffer: a pointer to a char array
+ * @size: the size of the array
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an XML in-memory document and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlReadMemory(const char *buffer, int size, const char *URL, const char *encoding, int options)
+{
+ htmlParserCtxtPtr ctxt;
+
+ ctxt = xmlCreateMemoryParserCtxt(buffer, size);
+ if (ctxt == NULL)
+ return (NULL);
+ return (htmlDoRead(ctxt, URL, encoding, options, 0));
+}
+
+/**
+ * htmlReadFd:
+ * @fd: an open file descriptor
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an XML from a file descriptor and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlReadFd(int fd, const char *URL, const char *encoding, int options)
+{
+ htmlParserCtxtPtr ctxt;
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (fd < 0)
+ return (NULL);
+
+ input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ xmlFreeParserCtxt(ctxt);
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (htmlDoRead(ctxt, URL, encoding, options, 0));
+}
+
+/**
+ * htmlReadIO:
+ * @ioread: an I/O read function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an HTML document from I/O functions and source and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlReadIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose,
+ void *ioctx, const char *URL, const char *encoding, int options)
+{
+ htmlParserCtxtPtr ctxt;
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (ioread == NULL)
+ return (NULL);
+
+ input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
+ XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ xmlFreeParserCtxt(ctxt);
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (htmlDoRead(ctxt, URL, encoding, options, 0));
+}
+
+/**
+ * htmlCtxtReadDoc:
+ * @ctxt: an HTML parser context
+ * @cur: a pointer to a zero terminated string
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an XML in-memory document and build a tree.
+ * This reuses the existing @ctxt parser context
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlCtxtReadDoc(htmlParserCtxtPtr ctxt, const xmlChar * cur,
+ const char *URL, const char *encoding, int options)
+{
+ xmlParserInputPtr stream;
+
+ if (cur == NULL)
+ return (NULL);
+ if (ctxt == NULL)
+ return (NULL);
+
+ htmlCtxtReset(ctxt);
+
+ stream = xmlNewStringInputStream(ctxt, cur);
+ if (stream == NULL) {
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (htmlDoRead(ctxt, URL, encoding, options, 1));
+}
+
+/**
+ * htmlCtxtReadFile:
+ * @ctxt: an HTML parser context
+ * @filename: a file or URL
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an XML file from the filesystem or the network.
+ * This reuses the existing @ctxt parser context
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlCtxtReadFile(htmlParserCtxtPtr ctxt, const char *filename,
+ const char *encoding, int options)
+{
+ xmlParserInputPtr stream;
+
+ if (filename == NULL)
+ return (NULL);
+ if (ctxt == NULL)
+ return (NULL);
+
+ htmlCtxtReset(ctxt);
+
+ stream = xmlNewInputFromFile(ctxt, filename);
+ if (stream == NULL) {
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (htmlDoRead(ctxt, NULL, encoding, options, 1));
+}
+
+/**
+ * htmlCtxtReadMemory:
+ * @ctxt: an HTML parser context
+ * @buffer: a pointer to a char array
+ * @size: the size of the array
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an XML in-memory document and build a tree.
+ * This reuses the existing @ctxt parser context
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlCtxtReadMemory(htmlParserCtxtPtr ctxt, const char *buffer, int size,
+ const char *URL, const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (ctxt == NULL)
+ return (NULL);
+ if (buffer == NULL)
+ return (NULL);
+
+ htmlCtxtReset(ctxt);
+
+ input = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE);
+ if (input == NULL) {
+ return(NULL);
+ }
+
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return(NULL);
+ }
+
+ inputPush(ctxt, stream);
+ return (htmlDoRead(ctxt, URL, encoding, options, 1));
+}
+
+/**
+ * htmlCtxtReadFd:
+ * @ctxt: an HTML parser context
+ * @fd: an open file descriptor
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an XML from a file descriptor and build a tree.
+ * This reuses the existing @ctxt parser context
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlCtxtReadFd(htmlParserCtxtPtr ctxt, int fd,
+ const char *URL, const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (fd < 0)
+ return (NULL);
+ if (ctxt == NULL)
+ return (NULL);
+
+ htmlCtxtReset(ctxt);
+
+
+ input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (htmlDoRead(ctxt, URL, encoding, options, 1));
+}
+
+/**
+ * htmlCtxtReadIO:
+ * @ctxt: an HTML parser context
+ * @ioread: an I/O read function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of htmlParserOption(s)
+ *
+ * parse an HTML document from I/O functions and source and build a tree.
+ * This reuses the existing @ctxt parser context
+ *
+ * Returns the resulting document tree
+ */
+htmlDocPtr
+htmlCtxtReadIO(htmlParserCtxtPtr ctxt, xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose, void *ioctx,
+ const char *URL,
+ const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (ioread == NULL)
+ return (NULL);
+ if (ctxt == NULL)
+ return (NULL);
+
+ htmlCtxtReset(ctxt);
+
+ input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
+ XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (htmlDoRead(ctxt, URL, encoding, options, 1));
+}
+
+#endif /* LIBXML_HTML_ENABLED */
diff --git a/HTMLtree.c b/HTMLtree.c
new file mode 100644
index 0000000..5724540
--- /dev/null
+++ b/HTMLtree.c
@@ -0,0 +1,1177 @@
+/*
+ * HTMLtree.c : implementation of access function for an HTML tree.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+
+#define IN_LIBXML
+#include "libxml.h"
+#ifdef LIBXML_HTML_ENABLED
+
+#include <string.h> /* for memset() only ! */
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/HTMLparser.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/entities.h>
+#include <libxml/valid.h>
+#include <libxml/xmlerror.h>
+#include <libxml/parserInternals.h>
+#include <libxml/globals.h>
+#include <libxml/uri.h>
+
+/************************************************************************
+ * *
+ * Getting/Setting encoding meta tags *
+ * *
+ ************************************************************************/
+
+/**
+ * htmlGetMetaEncoding:
+ * @doc: the document
+ *
+ * Encoding definition lookup in the Meta tags
+ *
+ * Returns the current encoding as flagged in the HTML source
+ */
+const xmlChar *
+htmlGetMetaEncoding(htmlDocPtr doc) {
+ htmlNodePtr cur;
+ const xmlChar *content;
+ const xmlChar *encoding;
+
+ if (doc == NULL)
+ return(NULL);
+ cur = doc->children;
+
+ /*
+ * Search the html
+ */
+ while (cur != NULL) {
+ if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
+ if (xmlStrEqual(cur->name, BAD_CAST"html"))
+ break;
+ if (xmlStrEqual(cur->name, BAD_CAST"head"))
+ goto found_head;
+ if (xmlStrEqual(cur->name, BAD_CAST"meta"))
+ goto found_meta;
+ }
+ cur = cur->next;
+ }
+ if (cur == NULL)
+ return(NULL);
+ cur = cur->children;
+
+ /*
+ * Search the head
+ */
+ while (cur != NULL) {
+ if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
+ if (xmlStrEqual(cur->name, BAD_CAST"head"))
+ break;
+ if (xmlStrEqual(cur->name, BAD_CAST"meta"))
+ goto found_meta;
+ }
+ cur = cur->next;
+ }
+ if (cur == NULL)
+ return(NULL);
+found_head:
+ cur = cur->children;
+
+ /*
+ * Search the meta elements
+ */
+found_meta:
+ while (cur != NULL) {
+ if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
+ if (xmlStrEqual(cur->name, BAD_CAST"meta")) {
+ xmlAttrPtr attr = cur->properties;
+ int http;
+ const xmlChar *value;
+
+ content = NULL;
+ http = 0;
+ while (attr != NULL) {
+ if ((attr->children != NULL) &&
+ (attr->children->type == XML_TEXT_NODE) &&
+ (attr->children->next == NULL)) {
+ value = attr->children->content;
+ if ((!xmlStrcasecmp(attr->name, BAD_CAST"http-equiv"))
+ && (!xmlStrcasecmp(value, BAD_CAST"Content-Type")))
+ http = 1;
+ else if ((value != NULL)
+ && (!xmlStrcasecmp(attr->name, BAD_CAST"content")))
+ content = value;
+ if ((http != 0) && (content != NULL))
+ goto found_content;
+ }
+ attr = attr->next;
+ }
+ }
+ }
+ cur = cur->next;
+ }
+ return(NULL);
+
+found_content:
+ encoding = xmlStrstr(content, BAD_CAST"charset=");
+ if (encoding == NULL)
+ encoding = xmlStrstr(content, BAD_CAST"Charset=");
+ if (encoding == NULL)
+ encoding = xmlStrstr(content, BAD_CAST"CHARSET=");
+ if (encoding != NULL) {
+ encoding += 8;
+ } else {
+ encoding = xmlStrstr(content, BAD_CAST"charset =");
+ if (encoding == NULL)
+ encoding = xmlStrstr(content, BAD_CAST"Charset =");
+ if (encoding == NULL)
+ encoding = xmlStrstr(content, BAD_CAST"CHARSET =");
+ if (encoding != NULL)
+ encoding += 9;
+ }
+ if (encoding != NULL) {
+ while ((*encoding == ' ') || (*encoding == '\t')) encoding++;
+ }
+ return(encoding);
+}
+
+/**
+ * htmlSetMetaEncoding:
+ * @doc: the document
+ * @encoding: the encoding string
+ *
+ * Sets the current encoding in the Meta tags
+ * NOTE: this will not change the document content encoding, just
+ * the META flag associated.
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+int
+htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) {
+ htmlNodePtr cur, meta;
+ const xmlChar *content;
+ char newcontent[100];
+
+
+ if (doc == NULL)
+ return(-1);
+
+ if (encoding != NULL) {
+ snprintf(newcontent, sizeof(newcontent), "text/html; charset=%s",
+ encoding);
+ newcontent[sizeof(newcontent) - 1] = 0;
+ }
+
+ cur = doc->children;
+
+ /*
+ * Search the html
+ */
+ while (cur != NULL) {
+ if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
+ if (xmlStrcasecmp(cur->name, BAD_CAST"html") == 0)
+ break;
+ if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0)
+ goto found_head;
+ if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0)
+ goto found_meta;
+ }
+ cur = cur->next;
+ }
+ if (cur == NULL)
+ return(-1);
+ cur = cur->children;
+
+ /*
+ * Search the head
+ */
+ while (cur != NULL) {
+ if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
+ if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0)
+ break;
+ if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0)
+ goto found_meta;
+ }
+ cur = cur->next;
+ }
+ if (cur == NULL)
+ return(-1);
+found_head:
+ if (cur->children == NULL) {
+ if (encoding == NULL)
+ return(0);
+ meta = xmlNewDocNode(doc, NULL, BAD_CAST"meta", NULL);
+ xmlAddChild(cur, meta);
+ xmlNewProp(meta, BAD_CAST"http-equiv", BAD_CAST"Content-Type");
+ xmlNewProp(meta, BAD_CAST"content", BAD_CAST newcontent);
+ return(0);
+ }
+ cur = cur->children;
+
+found_meta:
+ if (encoding != NULL) {
+ /*
+ * Create a new Meta element with the right attributes
+ */
+
+ meta = xmlNewDocNode(doc, NULL, BAD_CAST"meta", NULL);
+ xmlAddPrevSibling(cur, meta);
+ xmlNewProp(meta, BAD_CAST"http-equiv", BAD_CAST"Content-Type");
+ xmlNewProp(meta, BAD_CAST"content", BAD_CAST newcontent);
+ }
+
+ /*
+ * Search and destroy all the remaining the meta elements carrying
+ * encoding informations
+ */
+ while (cur != NULL) {
+ if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
+ if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) {
+ xmlAttrPtr attr = cur->properties;
+ int http;
+ const xmlChar *value;
+
+ content = NULL;
+ http = 0;
+ while (attr != NULL) {
+ if ((attr->children != NULL) &&
+ (attr->children->type == XML_TEXT_NODE) &&
+ (attr->children->next == NULL)) {
+ value = attr->children->content;
+ if ((!xmlStrcasecmp(attr->name, BAD_CAST"http-equiv"))
+ && (!xmlStrcasecmp(value, BAD_CAST"Content-Type")))
+ http = 1;
+ else
+ {
+ if ((value != NULL) &&
+ (!xmlStrcasecmp(attr->name, BAD_CAST"content")))
+ content = value;
+ }
+ if ((http != 0) && (content != NULL))
+ break;
+ }
+ attr = attr->next;
+ }
+ if ((http != 0) && (content != NULL)) {
+ meta = cur;
+ cur = cur->next;
+ xmlUnlinkNode(meta);
+ xmlFreeNode(meta);
+ continue;
+ }
+
+ }
+ }
+ cur = cur->next;
+ }
+ return(0);
+}
+
+/**
+ * booleanHTMLAttrs:
+ *
+ * These are the HTML attributes which will be output
+ * in minimized form, i.e. <option selected="selected"> will be
+ * output as <option selected>, as per XSLT 1.0 16.2 "HTML Output Method"
+ *
+ */
+static const char* htmlBooleanAttrs[] = {
+ "checked", "compact", "declare", "defer", "disabled", "ismap",
+ "multiple", "nohref", "noresize", "noshade", "nowrap", "readonly",
+ "selected", NULL
+};
+
+
+/**
+ * htmlIsBooleanAttr:
+ * @name: the name of the attribute to check
+ *
+ * Determine if a given attribute is a boolean attribute.
+ *
+ * returns: false if the attribute is not boolean, true otherwise.
+ */
+int
+htmlIsBooleanAttr(const xmlChar *name)
+{
+ int i = 0;
+
+ while (htmlBooleanAttrs[i] != NULL) {
+ if (xmlStrcasecmp((const xmlChar *)htmlBooleanAttrs[i], name) == 0)
+ return 1;
+ i++;
+ }
+ return 0;
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/************************************************************************
+ * *
+ * Output error handlers *
+ * *
+ ************************************************************************/
+/**
+ * htmlSaveErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+htmlSaveErrMemory(const char *extra)
+{
+ __xmlSimpleError(XML_FROM_OUTPUT, XML_ERR_NO_MEMORY, NULL, NULL, extra);
+}
+
+/**
+ * htmlSaveErr:
+ * @code: the error number
+ * @node: the location of the error.
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+htmlSaveErr(int code, xmlNodePtr node, const char *extra)
+{
+ const char *msg = NULL;
+
+ switch(code) {
+ case XML_SAVE_NOT_UTF8:
+ msg = "string is not in UTF-8";
+ break;
+ case XML_SAVE_CHAR_INVALID:
+ msg = "invalid character value";
+ break;
+ case XML_SAVE_UNKNOWN_ENCODING:
+ msg = "unknown encoding %s";
+ break;
+ case XML_SAVE_NO_DOCTYPE:
+ msg = "HTML has no DOCTYPE";
+ break;
+ default:
+ msg = "unexpected error number";
+ }
+ __xmlSimpleError(XML_FROM_OUTPUT, code, node, msg, extra);
+}
+
+/************************************************************************
+ * *
+ * Dumping HTML tree content to a simple buffer *
+ * *
+ ************************************************************************/
+
+static int
+htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
+ int format);
+
+/**
+ * htmlNodeDumpFormat:
+ * @buf: the HTML buffer output
+ * @doc: the document
+ * @cur: the current node
+ * @format: should formatting spaces been added
+ *
+ * Dump an HTML node, recursive behaviour,children are printed too.
+ *
+ * Returns the number of byte written or -1 in case of error
+ */
+static int
+htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
+ int format) {
+ unsigned int use;
+ int ret;
+ xmlOutputBufferPtr outbuf;
+
+ if (cur == NULL) {
+ return (-1);
+ }
+ if (buf == NULL) {
+ return (-1);
+ }
+ outbuf = (xmlOutputBufferPtr) xmlMalloc(sizeof(xmlOutputBuffer));
+ if (outbuf == NULL) {
+ htmlSaveErrMemory("allocating HTML output buffer");
+ return (-1);
+ }
+ memset(outbuf, 0, (size_t) sizeof(xmlOutputBuffer));
+ outbuf->buffer = buf;
+ outbuf->encoder = NULL;
+ outbuf->writecallback = NULL;
+ outbuf->closecallback = NULL;
+ outbuf->context = NULL;
+ outbuf->written = 0;
+
+ use = buf->use;
+ htmlNodeDumpFormatOutput(outbuf, doc, cur, NULL, format);
+ xmlFree(outbuf);
+ ret = buf->use - use;
+ return (ret);
+}
+
+/**
+ * htmlNodeDump:
+ * @buf: the HTML buffer output
+ * @doc: the document
+ * @cur: the current node
+ *
+ * Dump an HTML node, recursive behaviour,children are printed too,
+ * and formatting returns are added.
+ *
+ * Returns the number of byte written or -1 in case of error
+ */
+int
+htmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur) {
+ xmlInitParser();
+
+ return(htmlNodeDumpFormat(buf, doc, cur, 1));
+}
+
+/**
+ * htmlNodeDumpFileFormat:
+ * @out: the FILE pointer
+ * @doc: the document
+ * @cur: the current node
+ * @encoding: the document encoding
+ * @format: should formatting spaces been added
+ *
+ * Dump an HTML node, recursive behaviour,children are printed too.
+ *
+ * TODO: if encoding == NULL try to save in the doc encoding
+ *
+ * returns: the number of byte written or -1 in case of failure.
+ */
+int
+htmlNodeDumpFileFormat(FILE *out, xmlDocPtr doc,
+ xmlNodePtr cur, const char *encoding, int format) {
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+ int ret;
+
+ xmlInitParser();
+
+ if (encoding != NULL) {
+ xmlCharEncoding enc;
+
+ enc = xmlParseCharEncoding(encoding);
+ if (enc != XML_CHAR_ENCODING_UTF8) {
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL)
+ return(-1);
+ }
+ }
+
+ /*
+ * Fallback to HTML or ASCII when the encoding is unspecified
+ */
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("HTML");
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("ascii");
+
+ /*
+ * save the content to a temp buffer.
+ */
+ buf = xmlOutputBufferCreateFile(out, handler);
+ if (buf == NULL) return(0);
+
+ htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
+
+ ret = xmlOutputBufferClose(buf);
+ return(ret);
+}
+
+/**
+ * htmlNodeDumpFile:
+ * @out: the FILE pointer
+ * @doc: the document
+ * @cur: the current node
+ *
+ * Dump an HTML node, recursive behaviour,children are printed too,
+ * and formatting returns are added.
+ */
+void
+htmlNodeDumpFile(FILE *out, xmlDocPtr doc, xmlNodePtr cur) {
+ htmlNodeDumpFileFormat(out, doc, cur, NULL, 1);
+}
+
+/**
+ * htmlDocDumpMemory:
+ * @cur: the document
+ * @mem: OUT: the memory pointer
+ * @size: OUT: the memory length
+ *
+ * Dump an HTML document in memory and return the xmlChar * and it's size.
+ * It's up to the caller to free the memory.
+ */
+void
+htmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int *size) {
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+ const char *encoding;
+
+ xmlInitParser();
+
+ if (cur == NULL) {
+ *mem = NULL;
+ *size = 0;
+ return;
+ }
+
+ encoding = (const char *) htmlGetMetaEncoding(cur);
+
+ if (encoding != NULL) {
+ xmlCharEncoding enc;
+
+ enc = xmlParseCharEncoding(encoding);
+ if (enc != cur->charset) {
+ if (cur->charset != XML_CHAR_ENCODING_UTF8) {
+ /*
+ * Not supported yet
+ */
+ *mem = NULL;
+ *size = 0;
+ return;
+ }
+
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL) {
+ *mem = NULL;
+ *size = 0;
+ return;
+ }
+ }
+ }
+
+ /*
+ * Fallback to HTML or ASCII when the encoding is unspecified
+ */
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("HTML");
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("ascii");
+
+ buf = xmlAllocOutputBuffer(handler);
+ if (buf == NULL) {
+ *mem = NULL;
+ *size = 0;
+ return;
+ }
+
+ htmlDocContentDumpOutput(buf, cur, NULL);
+ xmlOutputBufferFlush(buf);
+ if (buf->conv != NULL) {
+ *size = buf->conv->use;
+ *mem = xmlStrndup(buf->conv->content, *size);
+ } else {
+ *size = buf->buffer->use;
+ *mem = xmlStrndup(buf->buffer->content, *size);
+ }
+ (void)xmlOutputBufferClose(buf);
+}
+
+
+/************************************************************************
+ * *
+ * Dumping HTML tree content to an I/O output buffer *
+ * *
+ ************************************************************************/
+
+void xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur);
+
+/**
+ * htmlDtdDumpOutput:
+ * @buf: the HTML buffer output
+ * @doc: the document
+ * @encoding: the encoding string
+ *
+ * TODO: check whether encoding is needed
+ *
+ * Dump the HTML document DTD, if any.
+ */
+static void
+htmlDtdDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+ const char *encoding ATTRIBUTE_UNUSED) {
+ xmlDtdPtr cur = doc->intSubset;
+
+ if (cur == NULL) {
+ htmlSaveErr(XML_SAVE_NO_DOCTYPE, (xmlNodePtr) doc, NULL);
+ return;
+ }
+ xmlOutputBufferWriteString(buf, "<!DOCTYPE ");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ if (cur->ExternalID != NULL) {
+ xmlOutputBufferWriteString(buf, " PUBLIC ");
+ xmlBufferWriteQuotedString(buf->buffer, cur->ExternalID);
+ if (cur->SystemID != NULL) {
+ xmlOutputBufferWriteString(buf, " ");
+ xmlBufferWriteQuotedString(buf->buffer, cur->SystemID);
+ }
+ } else if (cur->SystemID != NULL) {
+ xmlOutputBufferWriteString(buf, " SYSTEM ");
+ xmlBufferWriteQuotedString(buf->buffer, cur->SystemID);
+ }
+ xmlOutputBufferWriteString(buf, ">\n");
+}
+
+/**
+ * htmlAttrDumpOutput:
+ * @buf: the HTML buffer output
+ * @doc: the document
+ * @cur: the attribute pointer
+ * @encoding: the encoding string
+ *
+ * Dump an HTML attribute
+ */
+static void
+htmlAttrDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur,
+ const char *encoding ATTRIBUTE_UNUSED) {
+ xmlChar *value;
+
+ /*
+ * TODO: The html output method should not escape a & character
+ * occurring in an attribute value immediately followed by
+ * a { character (see Section B.7.1 of the HTML 4.0 Recommendation).
+ */
+
+ if (cur == NULL) {
+ return;
+ }
+ xmlOutputBufferWriteString(buf, " ");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ if ((cur->children != NULL) && (!htmlIsBooleanAttr(cur->name))) {
+ value = xmlNodeListGetString(doc, cur->children, 0);
+ if (value) {
+ xmlOutputBufferWriteString(buf, "=");
+ if ((cur->ns == NULL) && (cur->parent != NULL) &&
+ (cur->parent->ns == NULL) &&
+ ((!xmlStrcasecmp(cur->name, BAD_CAST "href")) ||
+ (!xmlStrcasecmp(cur->name, BAD_CAST "action")) ||
+ (!xmlStrcasecmp(cur->name, BAD_CAST "src")))) {
+ xmlChar *escaped;
+ xmlChar *tmp = value;
+
+ while (IS_BLANK_CH(*tmp)) tmp++;
+
+ escaped = xmlURIEscapeStr(tmp, BAD_CAST"@/:=?;#%&,+");
+ if (escaped != NULL) {
+ xmlBufferWriteQuotedString(buf->buffer, escaped);
+ xmlFree(escaped);
+ } else {
+ xmlBufferWriteQuotedString(buf->buffer, value);
+ }
+ } else {
+ xmlBufferWriteQuotedString(buf->buffer, value);
+ }
+ xmlFree(value);
+ } else {
+ xmlOutputBufferWriteString(buf, "=\"\"");
+ }
+ }
+}
+
+/**
+ * htmlAttrListDumpOutput:
+ * @buf: the HTML buffer output
+ * @doc: the document
+ * @cur: the first attribute pointer
+ * @encoding: the encoding string
+ *
+ * Dump a list of HTML attributes
+ */
+static void
+htmlAttrListDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur, const char *encoding) {
+ if (cur == NULL) {
+ return;
+ }
+ while (cur != NULL) {
+ htmlAttrDumpOutput(buf, doc, cur, encoding);
+ cur = cur->next;
+ }
+}
+
+
+
+/**
+ * htmlNodeListDumpOutput:
+ * @buf: the HTML buffer output
+ * @doc: the document
+ * @cur: the first node
+ * @encoding: the encoding string
+ * @format: should formatting spaces been added
+ *
+ * Dump an HTML node list, recursive behaviour,children are printed too.
+ */
+static void
+htmlNodeListDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+ xmlNodePtr cur, const char *encoding, int format) {
+ if (cur == NULL) {
+ return;
+ }
+ while (cur != NULL) {
+ htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
+ cur = cur->next;
+ }
+}
+
+/**
+ * htmlNodeDumpFormatOutput:
+ * @buf: the HTML buffer output
+ * @doc: the document
+ * @cur: the current node
+ * @encoding: the encoding string
+ * @format: should formatting spaces been added
+ *
+ * Dump an HTML node, recursive behaviour,children are printed too.
+ */
+void
+htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+ xmlNodePtr cur, const char *encoding, int format) {
+ const htmlElemDesc * info;
+
+ xmlInitParser();
+
+ if (cur == NULL) {
+ return;
+ }
+ /*
+ * Special cases.
+ */
+ if (cur->type == XML_DTD_NODE)
+ return;
+ if (cur->type == XML_HTML_DOCUMENT_NODE) {
+ htmlDocContentDumpOutput(buf, (xmlDocPtr) cur, encoding);
+ return;
+ }
+ if (cur->type == HTML_TEXT_NODE) {
+ if (cur->content != NULL) {
+ if (((cur->name == (const xmlChar *)xmlStringText) ||
+ (cur->name != (const xmlChar *)xmlStringTextNoenc)) &&
+ ((cur->parent == NULL) ||
+ ((xmlStrcasecmp(cur->parent->name, BAD_CAST "script")) &&
+ (xmlStrcasecmp(cur->parent->name, BAD_CAST "style"))))) {
+ xmlChar *buffer;
+
+ buffer = xmlEncodeEntitiesReentrant(doc, cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(buf, (const char *)buffer);
+ xmlFree(buffer);
+ }
+ } else {
+ xmlOutputBufferWriteString(buf, (const char *)cur->content);
+ }
+ }
+ return;
+ }
+ if (cur->type == HTML_COMMENT_NODE) {
+ if (cur->content != NULL) {
+ xmlOutputBufferWriteString(buf, "<!--");
+ xmlOutputBufferWriteString(buf, (const char *)cur->content);
+ xmlOutputBufferWriteString(buf, "-->");
+ }
+ return;
+ }
+ if (cur->type == HTML_PI_NODE) {
+ if (cur->name == NULL)
+ return;
+ xmlOutputBufferWriteString(buf, "<?");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ if (cur->content != NULL) {
+ xmlOutputBufferWriteString(buf, " ");
+ xmlOutputBufferWriteString(buf, (const char *)cur->content);
+ }
+ xmlOutputBufferWriteString(buf, ">");
+ return;
+ }
+ if (cur->type == HTML_ENTITY_REF_NODE) {
+ xmlOutputBufferWriteString(buf, "&");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, ";");
+ return;
+ }
+ if (cur->type == HTML_PRESERVE_NODE) {
+ if (cur->content != NULL) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->content);
+ }
+ return;
+ }
+
+ /*
+ * Get specific HTML info for that node.
+ */
+ if (cur->ns == NULL)
+ info = htmlTagLookup(cur->name);
+ else
+ info = NULL;
+
+ xmlOutputBufferWriteString(buf, "<");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ if (cur->nsDef)
+ xmlNsListDumpOutput(buf, cur->nsDef);
+ if (cur->properties != NULL)
+ htmlAttrListDumpOutput(buf, doc, cur->properties, encoding);
+
+ if ((info != NULL) && (info->empty)) {
+ xmlOutputBufferWriteString(buf, ">");
+ if ((format) && (!info->isinline) && (cur->next != NULL)) {
+ if ((cur->next->type != HTML_TEXT_NODE) &&
+ (cur->next->type != HTML_ENTITY_REF_NODE) &&
+ (cur->parent != NULL) &&
+ (cur->parent->name != NULL) &&
+ (cur->parent->name[0] != 'p')) /* p, pre, param */
+ xmlOutputBufferWriteString(buf, "\n");
+ }
+ return;
+ }
+ if (((cur->type == XML_ELEMENT_NODE) || (cur->content == NULL)) &&
+ (cur->children == NULL)) {
+ if ((info != NULL) && (info->saveEndTag != 0) &&
+ (xmlStrcmp(BAD_CAST info->name, BAD_CAST "html")) &&
+ (xmlStrcmp(BAD_CAST info->name, BAD_CAST "body"))) {
+ xmlOutputBufferWriteString(buf, ">");
+ } else {
+ xmlOutputBufferWriteString(buf, "></");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, ">");
+ }
+ if ((format) && (cur->next != NULL) &&
+ (info != NULL) && (!info->isinline)) {
+ if ((cur->next->type != HTML_TEXT_NODE) &&
+ (cur->next->type != HTML_ENTITY_REF_NODE) &&
+ (cur->parent != NULL) &&
+ (cur->parent->name != NULL) &&
+ (cur->parent->name[0] != 'p')) /* p, pre, param */
+ xmlOutputBufferWriteString(buf, "\n");
+ }
+ return;
+ }
+ xmlOutputBufferWriteString(buf, ">");
+ if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->content != NULL)) {
+ /*
+ * Uses the OutputBuffer property to automatically convert
+ * invalids to charrefs
+ */
+
+ xmlOutputBufferWriteString(buf, (const char *) cur->content);
+ }
+ if (cur->children != NULL) {
+ if ((format) && (info != NULL) && (!info->isinline) &&
+ (cur->children->type != HTML_TEXT_NODE) &&
+ (cur->children->type != HTML_ENTITY_REF_NODE) &&
+ (cur->children != cur->last) &&
+ (cur->name != NULL) &&
+ (cur->name[0] != 'p')) /* p, pre, param */
+ xmlOutputBufferWriteString(buf, "\n");
+ htmlNodeListDumpOutput(buf, doc, cur->children, encoding, format);
+ if ((format) && (info != NULL) && (!info->isinline) &&
+ (cur->last->type != HTML_TEXT_NODE) &&
+ (cur->last->type != HTML_ENTITY_REF_NODE) &&
+ (cur->children != cur->last) &&
+ (cur->name != NULL) &&
+ (cur->name[0] != 'p')) /* p, pre, param */
+ xmlOutputBufferWriteString(buf, "\n");
+ }
+ xmlOutputBufferWriteString(buf, "</");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, ">");
+ if ((format) && (info != NULL) && (!info->isinline) &&
+ (cur->next != NULL)) {
+ if ((cur->next->type != HTML_TEXT_NODE) &&
+ (cur->next->type != HTML_ENTITY_REF_NODE) &&
+ (cur->parent != NULL) &&
+ (cur->parent->name != NULL) &&
+ (cur->parent->name[0] != 'p')) /* p, pre, param */
+ xmlOutputBufferWriteString(buf, "\n");
+ }
+}
+
+/**
+ * htmlNodeDumpOutput:
+ * @buf: the HTML buffer output
+ * @doc: the document
+ * @cur: the current node
+ * @encoding: the encoding string
+ *
+ * Dump an HTML node, recursive behaviour,children are printed too,
+ * and formatting returns/spaces are added.
+ */
+void
+htmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
+ xmlNodePtr cur, const char *encoding) {
+ htmlNodeDumpFormatOutput(buf, doc, cur, encoding, 1);
+}
+
+/**
+ * htmlDocContentDumpFormatOutput:
+ * @buf: the HTML buffer output
+ * @cur: the document
+ * @encoding: the encoding string
+ * @format: should formatting spaces been added
+ *
+ * Dump an HTML document.
+ */
+void
+htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr cur,
+ const char *encoding, int format) {
+ int type;
+
+ xmlInitParser();
+
+ /*
+ * force to output the stuff as HTML, especially for entities
+ */
+ type = cur->type;
+ cur->type = XML_HTML_DOCUMENT_NODE;
+ if (cur->intSubset != NULL) {
+ htmlDtdDumpOutput(buf, cur, NULL);
+ }
+ if (cur->children != NULL) {
+ htmlNodeListDumpOutput(buf, cur, cur->children, encoding, format);
+ }
+ xmlOutputBufferWriteString(buf, "\n");
+ cur->type = (xmlElementType) type;
+}
+
+/**
+ * htmlDocContentDumpOutput:
+ * @buf: the HTML buffer output
+ * @cur: the document
+ * @encoding: the encoding string
+ *
+ * Dump an HTML document. Formating return/spaces are added.
+ */
+void
+htmlDocContentDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr cur,
+ const char *encoding) {
+ htmlDocContentDumpFormatOutput(buf, cur, encoding, 1);
+}
+
+/************************************************************************
+ * *
+ * Saving functions front-ends *
+ * *
+ ************************************************************************/
+
+/**
+ * htmlDocDump:
+ * @f: the FILE*
+ * @cur: the document
+ *
+ * Dump an HTML document to an open FILE.
+ *
+ * returns: the number of byte written or -1 in case of failure.
+ */
+int
+htmlDocDump(FILE *f, xmlDocPtr cur) {
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+ const char *encoding;
+ int ret;
+
+ xmlInitParser();
+
+ if (cur == NULL) {
+ return(-1);
+ }
+
+ encoding = (const char *) htmlGetMetaEncoding(cur);
+
+ if (encoding != NULL) {
+ xmlCharEncoding enc;
+
+ enc = xmlParseCharEncoding(encoding);
+ if (enc != cur->charset) {
+ if (cur->charset != XML_CHAR_ENCODING_UTF8) {
+ /*
+ * Not supported yet
+ */
+ return(-1);
+ }
+
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL)
+ return(-1);
+ }
+ }
+
+ /*
+ * Fallback to HTML or ASCII when the encoding is unspecified
+ */
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("HTML");
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("ascii");
+
+ buf = xmlOutputBufferCreateFile(f, handler);
+ if (buf == NULL) return(-1);
+ htmlDocContentDumpOutput(buf, cur, NULL);
+
+ ret = xmlOutputBufferClose(buf);
+ return(ret);
+}
+
+/**
+ * htmlSaveFile:
+ * @filename: the filename (or URL)
+ * @cur: the document
+ *
+ * Dump an HTML document to a file. If @filename is "-" the stdout file is
+ * used.
+ * returns: the number of byte written or -1 in case of failure.
+ */
+int
+htmlSaveFile(const char *filename, xmlDocPtr cur) {
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+ const char *encoding;
+ int ret;
+
+ xmlInitParser();
+
+ encoding = (const char *) htmlGetMetaEncoding(cur);
+
+ if (encoding != NULL) {
+ xmlCharEncoding enc;
+
+ enc = xmlParseCharEncoding(encoding);
+ if (enc != cur->charset) {
+ if (cur->charset != XML_CHAR_ENCODING_UTF8) {
+ /*
+ * Not supported yet
+ */
+ return(-1);
+ }
+
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL)
+ return(-1);
+ }
+ }
+
+ /*
+ * Fallback to HTML or ASCII when the encoding is unspecified
+ */
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("HTML");
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("ascii");
+
+ /*
+ * save the content to a temp buffer.
+ */
+ buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression);
+ if (buf == NULL) return(0);
+
+ htmlDocContentDumpOutput(buf, cur, NULL);
+
+ ret = xmlOutputBufferClose(buf);
+ return(ret);
+}
+
+/**
+ * htmlSaveFileFormat:
+ * @filename: the filename
+ * @cur: the document
+ * @format: should formatting spaces been added
+ * @encoding: the document encoding
+ *
+ * Dump an HTML document to a file using a given encoding.
+ *
+ * returns: the number of byte written or -1 in case of failure.
+ */
+int
+htmlSaveFileFormat(const char *filename, xmlDocPtr cur,
+ const char *encoding, int format) {
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+ int ret;
+
+ xmlInitParser();
+
+ if (encoding != NULL) {
+ xmlCharEncoding enc;
+
+ enc = xmlParseCharEncoding(encoding);
+ if (enc != cur->charset) {
+ if (cur->charset != XML_CHAR_ENCODING_UTF8) {
+ /*
+ * Not supported yet
+ */
+ return(-1);
+ }
+
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL)
+ return(-1);
+ htmlSetMetaEncoding(cur, (const xmlChar *) encoding);
+ }
+ } else {
+ htmlSetMetaEncoding(cur, (const xmlChar *) "UTF-8");
+ }
+
+ /*
+ * Fallback to HTML or ASCII when the encoding is unspecified
+ */
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("HTML");
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("ascii");
+
+ /*
+ * save the content to a temp buffer.
+ */
+ buf = xmlOutputBufferCreateFilename(filename, handler, 0);
+ if (buf == NULL) return(0);
+
+ htmlDocContentDumpFormatOutput(buf, cur, encoding, format);
+
+ ret = xmlOutputBufferClose(buf);
+ return(ret);
+}
+
+/**
+ * htmlSaveFileEnc:
+ * @filename: the filename
+ * @cur: the document
+ * @encoding: the document encoding
+ *
+ * Dump an HTML document to a file using a given encoding
+ * and formatting returns/spaces are added.
+ *
+ * returns: the number of byte written or -1 in case of failure.
+ */
+int
+htmlSaveFileEnc(const char *filename, xmlDocPtr cur, const char *encoding) {
+ return(htmlSaveFileFormat(filename, cur, encoding, 1));
+}
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#endif /* LIBXML_HTML_ENABLED */
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..b19cf54
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,69 @@
+Extracted from the documentation:
+ http://xmlsoft.org/FAQ.html#Compilatio
+
+Compilation
+
+ 1.What is the process to compile libxml ?
+
+ As most UNIX libraries libxml follows the "standard":
+
+ gunzip -c xxx.tar.gz | tar xvf -
+
+ cd libxml-xxxx
+
+ ./configure --help
+
+ to see the options, then the compilation/installation proper
+
+ ./configure [possible options]
+
+ make
+
+ make install
+
+ At that point you may have to rerun ldconfig or similar utility to
+ update your list of installed shared libs.
+
+ At this point you can check that the library is properly functionning
+ by running
+
+ make tests
+
+ 2.What other libraries are needed to compile/install libxml ?
+
+ Libxml does not requires any other library, the normal C ANSI API
+ should be sufficient (please report any violation to this rule you
+ may find).
+
+ However if found at configuration time libxml will detect and use
+ the following libs:
+
+ libz: a highly portable and available widely compression library
+ http://www.info-zip.org/pub/infozip/zlib/
+ iconv: a powerful character encoding conversion library. It's
+ included by default on recent glibc libraries, so it doesn't
+ need to be installed specifically on linux. It seems it's
+ now part of the official UNIX specification. Here is one
+ implementation of the library which source can be found here.
+ http://clisp.cons.org/~haible/packages-libiconv.html
+ ftp://ftp.ilog.fr/pub/Users/haible/gnu/
+
+ 3.libxml does not compile with HP-UX's optional ANSI-C compiler
+
+ this is due to macro limitations. Try to add " -Wp,-H16800 -Ae"
+ to the CFLAGS
+
+ you can also install and use gcc instead or use a precompiled version
+ of libxml, both available from the HP-UX Porting and Archive Centre
+
+ 4.make tests fails on some platforms
+
+ Sometime the regression tests results don't completely match the
+ value produced by the parser, and the makefile uses diff to print
+ the delta. On some platforms the diff return breaks the compilation
+ process, if the diff is small this is probably not a serious problem
+
+Daniel
+veillard@redhat.com
+
+$Id: INSTALL,v 1.3 2001/06/17 10:32:52 veillard Exp $
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..e811f56
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,960 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS = include . doc example @PYTHON_SUBDIR@
+
+DIST_SUBDIRS = include . doc example python
+
+INCLUDES = -I$(top_builddir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
+
+noinst_PROGRAMS=testSchemas testRelax testSAX testHTML testXPath testURI \
+ testThreads testC14N testAutomata testRegexp \
+ testReader
+
+bin_PROGRAMS = xmllint xmlcatalog
+
+bin_SCRIPTS=xml2-config
+
+lib_LTLIBRARIES = libxml2.la
+libxml2_la_LIBADD = @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
+
+libxml2_la_LDFLAGS = @WIN32_EXTRA_LDFLAGS@ -version-info @LIBXML_VERSION_INFO@
+
+if WITH_TRIO_SOURCES
+libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \
+ parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \
+ valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \
+ xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
+ catalog.c globals.c threads.c c14n.c xmlstring.c \
+ xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
+ triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c \
+ xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c
+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 \
+ valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \
+ xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
+ catalog.c globals.c threads.c c14n.c xmlstring.c \
+ xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
+ xmlreader.c relaxng.c dict.c SAX2.c \
+ xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c
+endif
+
+DEPS = $(top_builddir)/libxml2.la
+LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
+
+
+man_MANS = xml2-config.1 libxml.3
+
+m4datadir = $(datadir)/aclocal
+m4data_DATA = libxml.m4
+
+xmllint_SOURCES=xmllint.c
+xmllint_LDFLAGS =
+xmllint_DEPENDENCIES = $(DEPS)
+xmllint_LDADD= @RDL_LIBS@ $(LDADDS)
+
+testSAX_SOURCES=testSAX.c
+testSAX_LDFLAGS =
+testSAX_DEPENDENCIES = $(DEPS)
+testSAX_LDADD= $(LDADDS)
+
+testHTML_SOURCES=testHTML.c
+testHTML_LDFLAGS =
+testHTML_DEPENDENCIES = $(DEPS)
+testHTML_LDADD= $(LDADDS)
+
+xmlcatalog_SOURCES=xmlcatalog.c
+xmlcatalog_LDFLAGS =
+xmlcatalog_DEPENDENCIES = $(DEPS)
+xmlcatalog_LDADD= @RDL_LIBS@ $(LDADDS)
+
+testXPath_SOURCES=testXPath.c
+testXPath_LDFLAGS =
+testXPath_DEPENDENCIES = $(DEPS)
+testXPath_LDADD= $(LDADDS)
+
+testC14N_SOURCES=testC14N.c
+testC14N_LDFLAGS =
+testC14N_DEPENDENCIES = $(DEPS)
+testC14N_LDADD= $(LDADDS)
+
+testThreads_SOURCES=testThreads@THREADS_W32@.c
+testThreads_LDFLAGS =
+testThreads_DEPENDENCIES = $(DEPS)
+testThreads_LDADD= $(LDADDS)
+
+testURI_SOURCES=testURI.c
+testURI_LDFLAGS =
+testURI_DEPENDENCIES = $(DEPS)
+testURI_LDADD= $(LDADDS)
+
+testRegexp_SOURCES=testRegexp.c
+testRegexp_LDFLAGS =
+testRegexp_DEPENDENCIES = $(DEPS)
+testRegexp_LDADD= $(LDADDS)
+
+testAutomata_SOURCES=testAutomata.c
+testAutomata_LDFLAGS =
+testAutomata_DEPENDENCIES = $(DEPS)
+testAutomata_LDADD= $(LDADDS)
+
+testSchemas_SOURCES=testSchemas.c
+testSchemas_LDFLAGS =
+testSchemas_DEPENDENCIES = $(DEPS)
+testSchemas_LDADD= $(LDADDS)
+
+testRelax_SOURCES=testRelax.c
+testRelax_LDFLAGS =
+testRelax_DEPENDENCIES = $(DEPS)
+testRelax_LDADD= $(LDADDS)
+
+testReader_SOURCES=testReader.c
+testReader_LDFLAGS =
+testReader_DEPENDENCIES = $(DEPS)
+testReader_LDADD= $(LDADDS)
+
+#testOOM_SOURCES=testOOM.c testOOMlib.h testOOMlib.c
+#testOOM_LDFLAGS =
+#testOOM_DEPENDENCIES = $(DEPS)
+#testOOM_LDADD= $(LDADDS)
+
+check-local: tests
+
+testall : tests SVGtests SAXtests
+
+tests: XMLtests XMLenttests NStests Errtests @READER_TEST@ @TEST_SAX@ @TEST_PUSH@ @TEST_HTML@ @TEST_PHTML@ @TEST_VALID@ URItests @TEST_XPATH@ @TEST_XPTR@ @TEST_XINCLUDE@ @TEST_C14N@ @TEST_DEBUG@ @TEST_CATALOG@ @TEST_REGEXPS@ @TEST_SCHEMAS@ @TEST_THREADS@ Timingtests @TEST_VTIME@ @PYTHON_TESTS@
+ @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; $(MAKE) tests ; fi)
+ @(cd doc/examples ; $(MAKE) tests)
+
+valgrind:
+ @echo '## Running the regression tests under Valgrind'
+ @echo '## Go get a cup of coffee it is gonna take a while ...'
+ $(MAKE) CHECKER='valgrind -q' tests
+
+HTMLtests : testHTML$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## HTML regression tests"
+ -@(for i in $(srcdir)/test/HTML/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/HTML/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testHTML $$i > $(srcdir)/result/HTML/$$name 2>$(srcdir)/result/HTML/$$name.err ; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testHTML $$i > result.$$name 2> error.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/HTML/$$name result.$$name ; \
+ diff -b $(srcdir)/result/HTML/$$name.err error.$$name ; \
+ $(CHECKER) $(top_builddir)/testHTML result.$$name > result2.$$name 2>error.$$name ; \
+ diff result.$$name result2.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name error.$$name ; \
+ fi ; fi ; done)
+
+HTMLPushtests : testHTML$(EXEEXT)
+ @echo "## Push HTML regression tests"
+ -@(for i in $(srcdir)/test/HTML/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/HTML/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testHTML $$i > $(srcdir)/result/HTML/$$name 2>$(srcdir)/result/HTML/$$name.err ; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testHTML --push $$i > result.$$name 2> error.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/HTML/$$name result.$$name ; \
+ cut -b 1-15 $(srcdir)/result/HTML/$$name.err > errorcut.$$name; \
+ cut -b 1-15 error.$$name > errorcut2.$$name; \
+ diff -b errorcut.$$name errorcut2.$$name ; \
+ $(CHECKER) $(top_builddir)/testHTML --push result.$$name > result2.$$name 2>error.$$name ; \
+ diff result.$$name result2.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name error.$$name errorcut.$$name errorcut2.$$name ; \
+ fi ; fi ; done)
+ @echo "## HTML SAX regression tests"
+ -@(for i in $(srcdir)/test/HTML/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/HTML/$$name.sax ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testHTML --sax $$i > $(srcdir)/result/HTML/$$name.sax ; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testHTML --sax $$i > result.$$name.sax ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/HTML/$$name.sax result.$$name.sax` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name.sax ; \
+ fi ; fi ; done)
+ @echo "## Push HTML SAX regression tests"
+ -@(for i in $(srcdir)/test/HTML/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/HTML/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testHTML --sax $$i > $(srcdir)/result/HTML/$$name.sax ; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testHTML --push --sax $$i 2>&1 > result.$$name.sax ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/HTML/$$name.sax result.$$name.sax` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name.sax ; \
+ fi ; fi ; done)
+
+XMLtests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XML regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i > $(srcdir)/result/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint result.$$name 2>&1 > result2.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result.$$name result2.$$name` ;\
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+ @echo "## XML regression tests on memory"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --memory $$i > $(srcdir)/result/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --memory $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --memory result.$$name 2>&1 > result2.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"`; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ diff result.$$name result2.$$name ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+
+XMLPushtests: xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XML push regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --push $$i > $(srcdir)/result/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --push $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --push result.$$name 2>&1 > result2.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result.$$name result2.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+
+NStests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XML Namespaces regression tests"
+ -@(for i in $(srcdir)/test/namespaces/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/namespaces/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i \
+ 2> $(srcdir)/result/namespaces/$$name.err \
+ > $(srcdir)/result/namespaces/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint $$i 2> error.$$name > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/namespaces/$$name result.$$name ; \
+ diff $(srcdir)/result/namespaces/$$name.err error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+
+Errtests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Error cases regression tests"
+ -@(for i in $(srcdir)/test/errors/*.xml ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/errors/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i \
+ 2> $(srcdir)/result/errors/$$name.err \
+ > $(srcdir)/result/errors/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint $$i 2> error.$$name > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/errors/$$name result.$$name ; \
+ diff $(srcdir)/result/errors/$$name.err error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+ @echo "## Error cases stream regression tests"
+ -@(for i in $(srcdir)/test/errors/*.xml ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/errors/$$name.str ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i \
+ 2> $(srcdir)/result/errors/$$name.str \
+ > $(srcdir)/result/errors/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint $$i 2> error.$$name > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/errors/$$name result.$$name ; \
+ diff $(srcdir)/result/errors/$$name.str error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+
+Docbtests : xmllint$(EXEEXT)
+
+XMLenttests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XML entity subst regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/noent/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --noent $$i > $(srcdir)/result/noent/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --noent $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/noent/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --noent result.$$name 2>&1 > result2.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result.$$name result2.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+
+URItests : testURI$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## URI module regression tests"
+ -@(for i in $(srcdir)/test/URI/*.data ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/URI/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testURI -base 'http://foo.com/path/to/index.html?orig#help' < $$i > $(srcdir)/result/URI/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testURI -base 'http://foo.com/path/to/index.html?orig#help' < $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/URI/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ -@(for i in $(srcdir)/test/URI/*.uri ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/URI/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testURI < $$i > $(srcdir)/result/URI/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testURI < $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/URI/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+XPathtests : testXPath$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XPath regression tests"
+ -@(if [ "`$(top_builddir)/testXPath | grep 'support not compiled in'`" != "" ] ; \
+ then echo Skipping debug not compiled in ; exit 0 ; fi ; \
+ for i in $(srcdir)/test/XPath/expr/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/XPath/expr/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testXPath -f --expr $$i > $(srcdir)/result/XPath/expr/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testXPath -f --expr $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XPath/expr/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done ; \
+ for i in $(srcdir)/test/XPath/docs/* ; do \
+ if [ ! -d $$i ] ; then \
+ doc=`basename $$i`; \
+ for j in $(srcdir)/test/XPath/tests/$$doc* ; do \
+ if [ ! -f $$j ] ; then continue ; fi ; \
+ name=`basename $$j`; \
+ if [ ! -d $$j ] ; then \
+ if [ ! -f $(srcdir)/result/XPath/tests/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testXPath -f -i $$i $$j > $(srcdir)/result/XPath/tests/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testXPath -f -i $$i $$j 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XPath/tests/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done ; fi ; done)
+
+XPtrtests : testXPath$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XPointer regression tests"
+ -@(if [ "`$(top_builddir)/testXPath | grep 'support not compiled in'`" != "" ] ; \
+ then echo Skipping debug not compiled in ; exit 0 ; fi ; \
+ for i in $(srcdir)/test/XPath/docs/* ; do \
+ if [ ! -d $$i ] ; then \
+ doc=`basename $$i`; \
+ for j in $(srcdir)/test/XPath/xptr/$$doc* ; do \
+ if [ ! -f $$j ] ; then continue ; fi ; \
+ name=`basename $$j`; \
+ if [ ! -d $$j ] ; then \
+ if [ ! -f $(srcdir)/result/XPath/xptr/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testXPath -xptr -f -i $$i $$j > $(srcdir)/result/XPath/xptr/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testXPath -xptr -f -i $$i $$j 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XPath/xptr/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done ; fi ; done)
+
+XIncludetests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XInclude regression tests"
+ -@(for i in $(srcdir)/test/XInclude/docs/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/XInclude/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --nowarning --xinclude $$i > $(srcdir)/result/XInclude/$$name 2> $(srcdir)/result/XInclude/$$name.err ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --nowarning --xinclude $$i > result.$$name 2>error.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XInclude/$$name result.$$name ; \
+ diff $(srcdir)/result/XInclude/$$name.err error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+ @(echo > .memdump)
+ @echo "## XInclude xmlReader regression tests"
+ -@(for i in $(srcdir)/test/XInclude/docs/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/XInclude/$$name.rdr ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --nowarning --xinclude --walker --debug $$i > $(srcdir)/result/XInclude/$$name.rdr ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --nowarning --xinclude --stream --debug $$i > result.$$name 2>error.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XInclude/$$name.err error.$$name ; \
+ diff $(srcdir)/result/XInclude/$$name.rdr result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+
+Scripttests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Scripts regression tests"
+ @echo "## Some of the base computations may be different if srcdir != ."
+ -@(for i in $(srcdir)/test/scripts/*.script ; do \
+ name=`basename $$i .script`; \
+ xml=$(srcdir)/test/scripts/`basename $$i .script`.xml; \
+ if [ -f $$xml ] ; then \
+ if [ ! -f $(srcdir)/result/scripts/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --shell $$xml < $$i > $(srcdir)/result/scripts/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --shell $$xml < $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/scripts/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+Catatests : xmlcatalog$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Catalog regression tests"
+ -@(for i in $(srcdir)/test/catalogs/*.script ; do \
+ name=`basename $$i .script`; \
+ xml=$(srcdir)/test/catalogs/`basename $$i .script`.xml; \
+ if [ -f $$xml ] ; then \
+ if [ ! -f $(srcdir)/result/catalogs/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --shell $$xml < $$i > $(srcdir)/result/catalogs/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmlcatalog --shell $$xml < $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/catalogs/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ -@(for i in $(srcdir)/test/catalogs/*.script ; do \
+ name=`basename $$i .script`; \
+ sgml=$(srcdir)/test/catalogs/`basename $$i .script`.sgml; \
+ if [ -f $$sgml ] ; then \
+ if [ ! -f $(srcdir)/result/catalogs/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --shell $$sgml < $$i > $(srcdir)/result/catalogs/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmlcatalog --shell $$sgml < $$i > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/catalogs/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ @echo "## Add and del operations on XML Catalogs"
+ -@($(CHECKER) $(top_builddir)/xmlcatalog --create --noout $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --add public Pubid sysid $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --add public Pubid2 sysid2 $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --add public Pubid3 sysid3 $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result/catalogs/mycatalog.full $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --del sysid $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --del sysid3 $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --del sysid2 $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result/catalogs/mycatalog.empty $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ rm -f $(srcdir)/result/catalogs/mycatalog)
+
+SVGtests : xmllint$(EXEEXT)
+ @echo "## SVG parsing regression tests"
+ -@(for i in $(srcdir)/test/SVG/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/SVG/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i > $(srcdir)/result/SVG/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ echo Testing $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/SVG/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint result.$$name > result2.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff result.$$name result2.$$name ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+
+Threadtests : testThreads$(EXEEXT)
+ @echo "## Threaded regression tests"
+ -@($(CHECKER) $(top_builddir)/testThreads ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ exit 0)
+
+Readertests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Reader regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name.rdr ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --nonet --debug --stream $$i > $(srcdir)/result/$$name.rdr 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --nonet --debug --stream $$i > result.$$name 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name.rdr result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ @echo "## Reader on memory regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name.rdr ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --memory --nonet --debug --stream $$i > $(srcdir)/result/$$name.rdr 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --memory --nonet --debug --stream $$i > result.$$name 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name.rdr result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ @(echo > .memdump)
+ @echo "## Walker regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name.rdr ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --nonet --debug --walker $$i > $(srcdir)/result/$$name.rdr 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --nonet --debug --walker $$i > result.$$name 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name.rdr result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+SAXtests : testSAX$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## SAX callbacks regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name.sax ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testSAX $$i > $(srcdir)/result/$$name.sax 2> /dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testSAX $$i > result.$$name 2> /dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name.sax result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+Validtests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Valid documents regression tests"
+ -@(for i in $(srcdir)/test/VCM/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ log=`$(CHECKER) $(top_builddir)/xmllint --valid --noout --nowarning $$i ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"`;\
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ fi ; done ; exit 0)
+ @echo "## Validity checking regression tests"
+ -@(for i in $(srcdir)/test/VC/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/VC/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --noout --valid $$i 2> $(srcdir)/result/VC/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --noout --valid $$i 2> result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/VC/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ @echo "## General documents valid regression tests"
+ -@(for i in $(srcdir)/test/valid/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/valid/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --valid $$i > $(srcdir)/result/valid/$$name 2>$(srcdir)/result/valid/$$name.err ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --valid $$i > result.$$name 2>error.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/valid/$$name result.$$name ; \
+ diff $(srcdir)/result/valid/$$name.err error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+
+Regexptests: testRegexp$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Regexp regression tests"
+ -@(for i in $(srcdir)/test/regexp/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/regexp/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testRegexp -i $$i > $(srcdir)/result/regexp/$$name; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testRegexp -i $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/regexp/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+Automatatests: testAutomata$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Automata regression tests"
+ -@(for i in $(srcdir)/test/automata/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/automata/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testAutomata $$i > $(srcdir)/result/automata/$$name; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testAutomata $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/automata/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+$(srcdir)/dba100000.xml: dbgenattr.pl
+ @echo "## generating dba100000.xml"
+ @($(top_srcdir)/dbgenattr.pl 100000 > $(srcdir)/dba100000.xml)
+
+Timingtests: xmllint$(EXEEXT) $(srcdir)/dba100000.xml
+ @echo "## Timing tests to try to detect performance"
+ @echo "## as well a memory usage breakage when streaming"
+ @echo "## 1/ using the file interface"
+ @echo "## 2/ using the memory interface"
+ @echo "## 3/ repeated DOM parsing"
+ @echo "## 4/ repeated DOM validation"
+ -@($(top_builddir)/xmllint --stream --timing $(srcdir)/dba100000.xml; \
+ MEM=`cat .memdump | grep "MEMORY ALLOCATED" | awk '{ print $$7}'`;\
+ if [ "$$MEM" != "" ] ; then echo Using $$MEM bytes ; fi ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ exit 0)
+ -@($(top_builddir)/xmllint --stream --timing --memory $(srcdir)/dba100000.xml; \
+ MEM=`cat .memdump | grep "MEMORY ALLOCATED" | awk '{ print $$7}'`;\
+ if [ "$$MEM" != "" ] ; then echo Using $$MEM bytes ; fi ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ exit 0)
+ -@($(top_builddir)/xmllint --noout --timing --repeat $(srcdir)/test/valid/REC-xml-19980210.xml; \
+ MEM=`cat .memdump | grep "MEMORY ALLOCATED" | awk '{ print $$7}'`;\
+ if [ "$$MEM" != "" ] ; then echo Using $$MEM bytes ; fi ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ exit 0)
+
+VTimingtests: xmllint$(EXEEXT)
+ -@($(top_builddir)/xmllint --noout --timing --valid --repeat $(srcdir)/test/valid/REC-xml-19980210.xml; \
+ MEM=`cat .memdump | grep "MEMORY ALLOCATED" | awk '{ print $$7}'`;\
+ if [ "$$MEM" != "" ] ; then echo Using $$MEM bytes ; fi ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ exit 0)
+
+C14Ntests : testC14N$(EXEEXT)
+ @echo "## C14N and XPath regression tests"
+ -@(for m in with-comments without-comments exc-without-comments ; do \
+ for i in $(srcdir)/test/c14n/$$m/*.xml ; do \
+ if [ ! -d $$i ] ; then \
+ name=`basename $$i .xml`; \
+ cmdline="$(CHECKER) $(top_builddir)/testC14N --$$m $$i"; \
+ if [ -f $(srcdir)/test/c14n/$$m/$$name.xpath ] ; then \
+ cmdline="$$cmdline $(srcdir)/test/c14n/$$m/$$name.xpath"; \
+ if [ -f $(srcdir)/test/c14n/$$m/$$name.ns ] ; then \
+ cmdline="$$cmdline '`cat $(srcdir)/test/c14n/$$m/$$name.ns`'"; \
+ fi; \
+ fi; \
+ $$cmdline > $(srcdir)/test/c14n/test.tmp; \
+ if [ $$? -eq 0 ]; then \
+ diff $(srcdir)/result/c14n/$$m/$$name $(srcdir)/test/c14n/test.tmp; \
+ if [ $$? -ne 0 ]; then \
+ echo "Test $$m/$$name failed"; \
+ cat $(srcdir)/test/c14n/test.tmp; \
+ fi; \
+ else \
+ echo "C14N failed"; \
+ fi; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ fi; \
+ rm -f $(srcdir)/test/c14n/test.tmp; \
+ done; \
+ done)
+
+Schemastests: testSchemas$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Schemas regression tests"
+ -@(for i in $(srcdir)/test/schemas/*_*.xsd ; do \
+ name=`basename $$i | sed 's+_.*++'`; \
+ sno=`basename $$i | sed 's+.*_\(.*\).xsd+\1+'`; \
+ for j in $(srcdir)/test/schemas/"$$name"_*.xml ; do \
+ if [ -f $$j ] ; then \
+ xno=`basename $$j | sed 's+.*_\(.*\).xml+\1+'`; \
+ if [ ! -f $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno" ]; \
+ then \
+ echo New test file "$$name"_"$$sno"_"$$xno" ; \
+ $(CHECKER) $(top_builddir)/testSchemas $$i $$j \
+ > $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno" \
+ 2> $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno".err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testSchemas $$i $$j \
+ > res.$$name 2> err.$$name;\
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno" \
+ res.$$name;\
+ diff $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno".err \
+ err.$$name;\
+ grep Unimplemented err.$$name`; \
+ if [ -n "$$log" ] ; then echo "$$name"_"$$sno"_"$$xno" result ; echo $$log ; fi ; \
+ rm res.$$name err.$$name ; \
+ fi ; fi ;\
+ done; done)
+
+Relaxtests: xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Relax-NG regression tests"
+ -@(for i in $(srcdir)/test/relaxng/*.rng ; do \
+ name=`basename $$i | sed 's+\.rng++'`; \
+ if [ ! -f $(srcdir)/result/relaxng/"$$name"_valid ] ; then \
+ echo New schemas $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $(srcdir)/test/relaxng/tutorA.rng $$i \
+ > $(srcdir)/result/relaxng/"$$name"_valid \
+ 2> $(srcdir)/result/relaxng/"$$name"_err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $(srcdir)/test/relaxng/tutorA.rng $$i \
+ > res.$$name 2> err.$$name;\
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/relaxng/"$$name"_valid \
+ res.$$name;\
+ diff $(srcdir)/result/relaxng/"$$name"_err \
+ err.$$name | grep -v "error detected at";\
+ grep Unimplemented err.$$name`; \
+ if [ -n "$$log" ] ; then echo schemas $$name result ; echo $$log ; fi ; \
+ rm res.$$name err.$$name ; \
+ fi; \
+ for j in $(srcdir)/test/relaxng/"$$name"_*.xml ; do \
+ if [ -f $$j ] ; then \
+ xno=`basename $$j | sed 's+.*_\(.*\).xml+\1+'`; \
+ if [ ! -f $(srcdir)/result/relaxng/"$$name"_"$$xno" ]; \
+ then \
+ echo New test file "$$name"_"$$xno" ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $$i $$j \
+ > $(srcdir)/result/relaxng/"$$name"_"$$xno" \
+ 2> $(srcdir)/result/relaxng/"$$name"_"$$xno".err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $$i $$j \
+ > res.$$name 2> err.$$name;\
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/relaxng/"$$name"_"$$xno" \
+ res.$$name;\
+ diff $(srcdir)/result/relaxng/"$$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)
+ @echo "## Relax-NG streaming regression tests"
+ -@(for i in $(srcdir)/test/relaxng/*.rng ; do \
+ name=`basename $$i | sed 's+\.rng++'`; \
+ for j in $(srcdir)/test/relaxng/"$$name"_*.xml ; do \
+ if [ -f $$j ] ; then \
+ xno=`basename $$j | sed 's+.*_\(.*\).xml+\1+'`; \
+ if [ ! -f $(srcdir)/result/relaxng/"$$name"_"$$xno" ]; \
+ then \
+ echo New test file "$$name"_"$$xno" ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $$i $$j \
+ > $(srcdir)/result/relaxng/"$$name"_"$$xno" \
+ 2> $(srcdir)/result/relaxng/"$$name"_"$$xno".err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --stream --relaxng $$i $$j \
+ > 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 \
+ diff $(srcdir)/result/relaxng/"$$name"_"$$xno".err \
+ err.$$name | grep -v "error detected at";\
+ fi ; grep Unimplemented err.$$name`; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm res.$$name err.$$name ; \
+ fi ; fi ; \
+ done; done)
+
+RelaxNGPythonTests:
+ @(if [ -x $(PYTHON) ] ; then \
+ echo "## Relax-NG Python based test suite 1" ; \
+ $(CHECKER) $(PYTHON) $(srcdir)/check-relaxng-test-suite.py ; \
+ echo "## Relax-NG Python based test suite 2" ; \
+ $(CHECKER) $(PYTHON) $(srcdir)/check-relaxng-test-suite2.py ; \
+ fi)
+
+SchemasPythonTests:
+ @(if [ -x $(PYTHON) ] ; then \
+ echo "## XML Schemas datatypes Python based test suite" ; \
+ $(CHECKER) $(PYTHON) $(srcdir)/check-xsddata-test-suite.py ; \
+ fi)
+
+cleanup:
+ -@(find . -name .\#\* -exec rm {} \;)
+
+dist-hook: cleanup libxml2.spec
+ -cp libxml2.spec $(distdir)
+ (cd $(srcdir) ; tar -cf - --exclude CVS win32 macos vms test result SAXresult ) | (cd $(distdir); tar xf -)
+
+cleantar:
+ @(rm -f libxml*.tar.gz COPYING.LIB)
+
+rpm: cleanup cleantar
+ @(unset CDPATH ; $(MAKE) dist && rpmbuild -ta $(distdir).tar.gz)
+
+## We create xml2Conf.sh here and not from configure because we want
+## to get the paths expanded correctly. Macros like srcdir are given
+## the value NONE in configure if the user doesn't specify them (this
+## is an autoconf feature, not a bug).
+
+xml2Conf.sh: xml2Conf.sh.in Makefile
+## Use sed and then mv to avoid problems if the user interrupts.
+ sed -e 's?\@XML_LIBDIR\@?$(XML_LIBDIR)?g' \
+ -e 's?\@XML_INCLUDEDIR\@?$(XML_INCLUDEDIR)?g' \
+ -e 's?\@VERSION\@?$(VERSION)?g' \
+ -e 's?\@XML_LIBS\@?$(XML_LIBS)?g' \
+ < $(srcdir)/xml2Conf.sh.in > xml2Conf.tmp \
+ && mv xml2Conf.tmp xml2Conf.sh
+
+CLEANFILES=xml2Conf.sh
+
+confexecdir=$(libdir)
+confexec_DATA = xml2Conf.sh
+EXTRA_DIST = xml2-config.in xml2Conf.sh.in libxml.spec.in libxml2.spec \
+ libxml.m4 Copyright check-xml-test-suite.py \
+ check-relaxng-test-suite.py check-relaxng-test-suite2.py \
+ check-xsddata-test-suite.py check-xinclude-test-suite.py \
+ example/Makefile.am example/gjobread.c example/gjobs.xml \
+ $(man_MANS) libxml-2.0.pc.in libxml-2.0-uninstalled.pc.in \
+ trionan.c trionan.h triostr.c triostr.h trio.c trio.h \
+ triop.h triodef.h libxml.h \
+ testThreadsWin32.c genUnicode.py TODO_SCHEMAS \
+ dbgen.pl dbgenattr.pl
+
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libxml-2.0.pc
+
+#
+# Instll the tests program sources as examples
+#
+BASE_DIR=$(datadir)/doc
+DOC_MODULE=libxml2-$(VERSION)
+EXAMPLES_DIR=$(BASE_DIR)/$(DOC_MODULE)/examples
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
+ -@INSTALL@ -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
+ $(mkinstalldirs) $(DESTDIR)$(EXAMPLES_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR)
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..5692132
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,2147 @@
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+
+SOURCES = $(libxml2_la_SOURCES) $(testAutomata_SOURCES) $(testC14N_SOURCES) $(testHTML_SOURCES) $(testReader_SOURCES) $(testRegexp_SOURCES) $(testRelax_SOURCES) $(testSAX_SOURCES) $(testSchemas_SOURCES) $(testThreads_SOURCES) $(testURI_SOURCES) $(testXPath_SOURCES) $(xmlcatalog_SOURCES) $(xmllint_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+noinst_PROGRAMS = testSchemas$(EXEEXT) testRelax$(EXEEXT) \
+ testSAX$(EXEEXT) testHTML$(EXEEXT) testXPath$(EXEEXT) \
+ testURI$(EXEEXT) testThreads$(EXEEXT) testC14N$(EXEEXT) \
+ testAutomata$(EXEEXT) testRegexp$(EXEEXT) testReader$(EXEEXT)
+bin_PROGRAMS = xmllint$(EXEEXT) xmlcatalog$(EXEEXT)
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(srcdir)/libxml-2.0-uninstalled.pc.in \
+ $(srcdir)/libxml-2.0.pc.in $(srcdir)/libxml.spec.in \
+ $(srcdir)/xml2-config.in $(top_srcdir)/configure AUTHORS \
+ COPYING ChangeLog INSTALL NEWS TODO acconfig.h config.guess \
+ config.sub depcomp install-sh ltconfig ltmain.sh missing \
+ mkinstalldirs
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = libxml2.spec xml2-config libxml-2.0.pc \
+ libxml-2.0-uninstalled.pc
+am__installdirs = $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) $(DESTDIR)$(man3dir) $(DESTDIR)$(confexecdir) $(DESTDIR)$(m4datadir) $(DESTDIR)$(pkgconfigdir)
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libxml2_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__libxml2_la_SOURCES_DIST = SAX.c entities.c encoding.c error.c \
+ parserInternals.c parser.c tree.c hash.c list.c xmlIO.c \
+ xmlmemory.c uri.c valid.c xlink.c HTMLparser.c HTMLtree.c \
+ debugXML.c xpath.c xpointer.c xinclude.c nanohttp.c nanoftp.c \
+ DOCBparser.c catalog.c globals.c threads.c c14n.c xmlstring.c \
+ xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
+ xmlreader.c relaxng.c dict.c SAX2.c xmlwriter.c legacy.c \
+ chvalid.c pattern.c xmlsave.c
+@WITH_TRIO_SOURCES_FALSE@am_libxml2_la_OBJECTS = SAX.lo entities.lo \
+@WITH_TRIO_SOURCES_FALSE@ encoding.lo error.lo \
+@WITH_TRIO_SOURCES_FALSE@ parserInternals.lo parser.lo tree.lo \
+@WITH_TRIO_SOURCES_FALSE@ hash.lo list.lo xmlIO.lo xmlmemory.lo \
+@WITH_TRIO_SOURCES_FALSE@ uri.lo valid.lo xlink.lo \
+@WITH_TRIO_SOURCES_FALSE@ HTMLparser.lo HTMLtree.lo debugXML.lo \
+@WITH_TRIO_SOURCES_FALSE@ xpath.lo xpointer.lo xinclude.lo \
+@WITH_TRIO_SOURCES_FALSE@ nanohttp.lo nanoftp.lo DOCBparser.lo \
+@WITH_TRIO_SOURCES_FALSE@ catalog.lo globals.lo threads.lo \
+@WITH_TRIO_SOURCES_FALSE@ c14n.lo xmlstring.lo xmlregexp.lo \
+@WITH_TRIO_SOURCES_FALSE@ xmlschemas.lo xmlschemastypes.lo \
+@WITH_TRIO_SOURCES_FALSE@ xmlunicode.lo xmlreader.lo relaxng.lo \
+@WITH_TRIO_SOURCES_FALSE@ dict.lo SAX2.lo xmlwriter.lo \
+@WITH_TRIO_SOURCES_FALSE@ legacy.lo chvalid.lo pattern.lo \
+@WITH_TRIO_SOURCES_FALSE@ xmlsave.lo
+@WITH_TRIO_SOURCES_TRUE@am_libxml2_la_OBJECTS = SAX.lo entities.lo \
+@WITH_TRIO_SOURCES_TRUE@ encoding.lo error.lo \
+@WITH_TRIO_SOURCES_TRUE@ parserInternals.lo parser.lo tree.lo \
+@WITH_TRIO_SOURCES_TRUE@ hash.lo list.lo xmlIO.lo xmlmemory.lo \
+@WITH_TRIO_SOURCES_TRUE@ uri.lo valid.lo xlink.lo HTMLparser.lo \
+@WITH_TRIO_SOURCES_TRUE@ HTMLtree.lo debugXML.lo xpath.lo \
+@WITH_TRIO_SOURCES_TRUE@ xpointer.lo xinclude.lo nanohttp.lo \
+@WITH_TRIO_SOURCES_TRUE@ nanoftp.lo DOCBparser.lo catalog.lo \
+@WITH_TRIO_SOURCES_TRUE@ globals.lo threads.lo c14n.lo \
+@WITH_TRIO_SOURCES_TRUE@ xmlstring.lo xmlregexp.lo \
+@WITH_TRIO_SOURCES_TRUE@ xmlschemas.lo xmlschemastypes.lo \
+@WITH_TRIO_SOURCES_TRUE@ xmlunicode.lo triostr.lo trio.lo \
+@WITH_TRIO_SOURCES_TRUE@ xmlreader.lo relaxng.lo dict.lo \
+@WITH_TRIO_SOURCES_TRUE@ SAX2.lo xmlwriter.lo legacy.lo \
+@WITH_TRIO_SOURCES_TRUE@ chvalid.lo pattern.lo xmlsave.lo
+libxml2_la_OBJECTS = $(am_libxml2_la_OBJECTS)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
+am_testAutomata_OBJECTS = testAutomata.$(OBJEXT)
+testAutomata_OBJECTS = $(am_testAutomata_OBJECTS)
+am__DEPENDENCIES_2 = $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1)
+am_testC14N_OBJECTS = testC14N.$(OBJEXT)
+testC14N_OBJECTS = $(am_testC14N_OBJECTS)
+am_testHTML_OBJECTS = testHTML.$(OBJEXT)
+testHTML_OBJECTS = $(am_testHTML_OBJECTS)
+am_testReader_OBJECTS = testReader.$(OBJEXT)
+testReader_OBJECTS = $(am_testReader_OBJECTS)
+am_testRegexp_OBJECTS = testRegexp.$(OBJEXT)
+testRegexp_OBJECTS = $(am_testRegexp_OBJECTS)
+am_testRelax_OBJECTS = testRelax.$(OBJEXT)
+testRelax_OBJECTS = $(am_testRelax_OBJECTS)
+am_testSAX_OBJECTS = testSAX.$(OBJEXT)
+testSAX_OBJECTS = $(am_testSAX_OBJECTS)
+am_testSchemas_OBJECTS = testSchemas.$(OBJEXT)
+testSchemas_OBJECTS = $(am_testSchemas_OBJECTS)
+am_testThreads_OBJECTS = testThreads@THREADS_W32@.$(OBJEXT)
+testThreads_OBJECTS = $(am_testThreads_OBJECTS)
+am_testURI_OBJECTS = testURI.$(OBJEXT)
+testURI_OBJECTS = $(am_testURI_OBJECTS)
+am_testXPath_OBJECTS = testXPath.$(OBJEXT)
+testXPath_OBJECTS = $(am_testXPath_OBJECTS)
+am_xmlcatalog_OBJECTS = xmlcatalog.$(OBJEXT)
+xmlcatalog_OBJECTS = $(am_xmlcatalog_OBJECTS)
+am_xmllint_OBJECTS = xmllint.$(OBJEXT)
+xmllint_OBJECTS = $(am_xmllint_OBJECTS)
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/DOCBparser.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/HTMLparser.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/HTMLtree.Plo ./$(DEPDIR)/SAX.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/SAX2.Plo ./$(DEPDIR)/c14n.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/catalog.Plo ./$(DEPDIR)/chvalid.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/debugXML.Plo ./$(DEPDIR)/dict.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/encoding.Plo ./$(DEPDIR)/entities.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/error.Plo ./$(DEPDIR)/globals.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/hash.Plo ./$(DEPDIR)/legacy.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/list.Plo ./$(DEPDIR)/nanoftp.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/nanohttp.Plo ./$(DEPDIR)/parser.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/parserInternals.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/pattern.Plo ./$(DEPDIR)/relaxng.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/testAutomata.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/testC14N.Po ./$(DEPDIR)/testHTML.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/testReader.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/testRegexp.Po ./$(DEPDIR)/testRelax.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/testSAX.Po ./$(DEPDIR)/testSchemas.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/testThreads@THREADS_W32@.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/testURI.Po ./$(DEPDIR)/testXPath.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/threads.Plo ./$(DEPDIR)/tree.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/trio.Plo ./$(DEPDIR)/triostr.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/uri.Plo ./$(DEPDIR)/valid.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xinclude.Plo ./$(DEPDIR)/xlink.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xmlIO.Plo ./$(DEPDIR)/xmlcatalog.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/xmllint.Po ./$(DEPDIR)/xmlmemory.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xmlreader.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xmlregexp.Plo ./$(DEPDIR)/xmlsave.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xmlschemas.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xmlschemastypes.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xmlstring.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xmlunicode.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xmlwriter.Plo ./$(DEPDIR)/xpath.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/xpointer.Plo
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libxml2_la_SOURCES) $(testAutomata_SOURCES) \
+ $(testC14N_SOURCES) $(testHTML_SOURCES) $(testReader_SOURCES) \
+ $(testRegexp_SOURCES) $(testRelax_SOURCES) $(testSAX_SOURCES) \
+ $(testSchemas_SOURCES) $(testThreads_SOURCES) \
+ $(testURI_SOURCES) $(testXPath_SOURCES) $(xmlcatalog_SOURCES) \
+ $(xmllint_SOURCES)
+DIST_SOURCES = $(am__libxml2_la_SOURCES_DIST) $(testAutomata_SOURCES) \
+ $(testC14N_SOURCES) $(testHTML_SOURCES) $(testReader_SOURCES) \
+ $(testRegexp_SOURCES) $(testRelax_SOURCES) $(testSAX_SOURCES) \
+ $(testSchemas_SOURCES) $(testThreads_SOURCES) \
+ $(testURI_SOURCES) $(testXPath_SOURCES) $(xmlcatalog_SOURCES) \
+ $(xmllint_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+man1dir = $(mandir)/man1
+man3dir = $(mandir)/man3
+NROFF = nroff
+MANS = $(man_MANS)
+confexecDATA_INSTALL = $(INSTALL_DATA)
+m4dataDATA_INSTALL = $(INSTALL_DATA)
+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(confexec_DATA) $(m4data_DATA) $(pkgconfig_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+C14N_OBJ = @C14N_OBJ@
+CATALOG_OBJ = @CATALOG_OBJ@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_OBJ = @DEBUG_OBJ@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOCB_OBJ = @DOCB_OBJ@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FTP_OBJ = @FTP_OBJ@
+HAVE_ISINF = @HAVE_ISINF@
+HAVE_ISNAN = @HAVE_ISNAN@
+HTML_DIR = @HTML_DIR@
+HTML_OBJ = @HTML_OBJ@
+HTTP_OBJ = @HTTP_OBJ@
+ICONV_LIBS = @ICONV_LIBS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
+LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
+LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
+LIBXML_VERSION = @LIBXML_VERSION@
+LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
+LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MV = @MV@
+M_LIBS = @M_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATTERN_TEST = @PATTERN_TEST@
+PYTHON = @PYTHON@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
+PYTHON_SUBDIR = @PYTHON_SUBDIR@
+PYTHON_TESTS = @PYTHON_TESTS@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RDL_LIBS = @RDL_LIBS@
+READER_TEST = @READER_TEST@
+RELDATE = @RELDATE@
+RM = @RM@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STATIC_BINARIES = @STATIC_BINARIES@
+STRIP = @STRIP@
+TAR = @TAR@
+TEST_C14N = @TEST_C14N@
+TEST_CATALOG = @TEST_CATALOG@
+TEST_DEBUG = @TEST_DEBUG@
+TEST_HTML = @TEST_HTML@
+TEST_PHTML = @TEST_PHTML@
+TEST_PUSH = @TEST_PUSH@
+TEST_REGEXPS = @TEST_REGEXPS@
+TEST_SAX = @TEST_SAX@
+TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_THREADS = @TEST_THREADS@
+TEST_VALID = @TEST_VALID@
+TEST_VTIME = @TEST_VTIME@
+TEST_XINCLUDE = @TEST_XINCLUDE@
+TEST_XPATH = @TEST_XPATH@
+TEST_XPTR = @TEST_XPTR@
+THREADS_W32 = @THREADS_W32@
+THREAD_CFLAGS = @THREAD_CFLAGS@
+THREAD_LIBS = @THREAD_LIBS@
+U = @U@
+VERSION = @VERSION@
+WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
+WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
+WITH_C14N = @WITH_C14N@
+WITH_CATALOG = @WITH_CATALOG@
+WITH_DEBUG = @WITH_DEBUG@
+WITH_DOCB = @WITH_DOCB@
+WITH_FTP = @WITH_FTP@
+WITH_HTML = @WITH_HTML@
+WITH_HTTP = @WITH_HTTP@
+WITH_ICONV = @WITH_ICONV@
+WITH_ISO8859X = @WITH_ISO8859X@
+WITH_LEGACY = @WITH_LEGACY@
+WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
+WITH_OUTPUT = @WITH_OUTPUT@
+WITH_PATTERN = @WITH_PATTERN@
+WITH_PUSH = @WITH_PUSH@
+WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
+WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
+WITH_READER = @WITH_READER@
+WITH_REGEXPS = @WITH_REGEXPS@
+WITH_SAX1 = @WITH_SAX1@
+WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_THREADS = @WITH_THREADS@
+WITH_TREE = @WITH_TREE@
+WITH_TRIO = @WITH_TRIO@
+WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
+WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
+WITH_VALID = @WITH_VALID@
+WITH_WRITER = @WITH_WRITER@
+WITH_XINCLUDE = @WITH_XINCLUDE@
+WITH_XPATH = @WITH_XPATH@
+WITH_XPTR = @WITH_XPTR@
+XINCLUDE_OBJ = @XINCLUDE_OBJ@
+XML_CFLAGS = @XML_CFLAGS@
+XML_INCLUDEDIR = @XML_INCLUDEDIR@
+XML_LIBDIR = @XML_LIBDIR@
+XML_LIBS = @XML_LIBS@
+XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
+XPATH_OBJ = @XPATH_OBJ@
+XPTR_OBJ = @XPTR_OBJ@
+Z_CFLAGS = @Z_CFLAGS@
+Z_LIBS = @Z_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = include . doc example @PYTHON_SUBDIR@
+DIST_SUBDIRS = include . doc example python
+INCLUDES = -I$(top_builddir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
+bin_SCRIPTS = xml2-config
+lib_LTLIBRARIES = libxml2.la
+libxml2_la_LIBADD = @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
+libxml2_la_LDFLAGS = @WIN32_EXTRA_LDFLAGS@ -version-info @LIBXML_VERSION_INFO@
+@WITH_TRIO_SOURCES_FALSE@libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \
+@WITH_TRIO_SOURCES_FALSE@ parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \
+@WITH_TRIO_SOURCES_FALSE@ valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \
+@WITH_TRIO_SOURCES_FALSE@ xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
+@WITH_TRIO_SOURCES_FALSE@ catalog.c globals.c threads.c c14n.c xmlstring.c \
+@WITH_TRIO_SOURCES_FALSE@ xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
+@WITH_TRIO_SOURCES_FALSE@ xmlreader.c relaxng.c dict.c SAX2.c \
+@WITH_TRIO_SOURCES_FALSE@ xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c
+
+@WITH_TRIO_SOURCES_TRUE@libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \
+@WITH_TRIO_SOURCES_TRUE@ parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \
+@WITH_TRIO_SOURCES_TRUE@ valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \
+@WITH_TRIO_SOURCES_TRUE@ xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
+@WITH_TRIO_SOURCES_TRUE@ catalog.c globals.c threads.c c14n.c xmlstring.c \
+@WITH_TRIO_SOURCES_TRUE@ xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
+@WITH_TRIO_SOURCES_TRUE@ triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c \
+@WITH_TRIO_SOURCES_TRUE@ xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c
+
+DEPS = $(top_builddir)/libxml2.la
+LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
+man_MANS = xml2-config.1 libxml.3
+m4datadir = $(datadir)/aclocal
+m4data_DATA = libxml.m4
+xmllint_SOURCES = xmllint.c
+xmllint_LDFLAGS =
+xmllint_DEPENDENCIES = $(DEPS)
+xmllint_LDADD = @RDL_LIBS@ $(LDADDS)
+testSAX_SOURCES = testSAX.c
+testSAX_LDFLAGS =
+testSAX_DEPENDENCIES = $(DEPS)
+testSAX_LDADD = $(LDADDS)
+testHTML_SOURCES = testHTML.c
+testHTML_LDFLAGS =
+testHTML_DEPENDENCIES = $(DEPS)
+testHTML_LDADD = $(LDADDS)
+xmlcatalog_SOURCES = xmlcatalog.c
+xmlcatalog_LDFLAGS =
+xmlcatalog_DEPENDENCIES = $(DEPS)
+xmlcatalog_LDADD = @RDL_LIBS@ $(LDADDS)
+testXPath_SOURCES = testXPath.c
+testXPath_LDFLAGS =
+testXPath_DEPENDENCIES = $(DEPS)
+testXPath_LDADD = $(LDADDS)
+testC14N_SOURCES = testC14N.c
+testC14N_LDFLAGS =
+testC14N_DEPENDENCIES = $(DEPS)
+testC14N_LDADD = $(LDADDS)
+testThreads_SOURCES = testThreads@THREADS_W32@.c
+testThreads_LDFLAGS =
+testThreads_DEPENDENCIES = $(DEPS)
+testThreads_LDADD = $(LDADDS)
+testURI_SOURCES = testURI.c
+testURI_LDFLAGS =
+testURI_DEPENDENCIES = $(DEPS)
+testURI_LDADD = $(LDADDS)
+testRegexp_SOURCES = testRegexp.c
+testRegexp_LDFLAGS =
+testRegexp_DEPENDENCIES = $(DEPS)
+testRegexp_LDADD = $(LDADDS)
+testAutomata_SOURCES = testAutomata.c
+testAutomata_LDFLAGS =
+testAutomata_DEPENDENCIES = $(DEPS)
+testAutomata_LDADD = $(LDADDS)
+testSchemas_SOURCES = testSchemas.c
+testSchemas_LDFLAGS =
+testSchemas_DEPENDENCIES = $(DEPS)
+testSchemas_LDADD = $(LDADDS)
+testRelax_SOURCES = testRelax.c
+testRelax_LDFLAGS =
+testRelax_DEPENDENCIES = $(DEPS)
+testRelax_LDADD = $(LDADDS)
+testReader_SOURCES = testReader.c
+testReader_LDFLAGS =
+testReader_DEPENDENCIES = $(DEPS)
+testReader_LDADD = $(LDADDS)
+CLEANFILES = xml2Conf.sh
+confexecdir = $(libdir)
+confexec_DATA = xml2Conf.sh
+EXTRA_DIST = xml2-config.in xml2Conf.sh.in libxml.spec.in libxml2.spec \
+ libxml.m4 Copyright check-xml-test-suite.py \
+ check-relaxng-test-suite.py check-relaxng-test-suite2.py \
+ check-xsddata-test-suite.py check-xinclude-test-suite.py \
+ example/Makefile.am example/gjobread.c example/gjobs.xml \
+ $(man_MANS) libxml-2.0.pc.in libxml-2.0-uninstalled.pc.in \
+ trionan.c trionan.h triostr.c triostr.h trio.c trio.h \
+ triop.h triodef.h libxml.h \
+ testThreadsWin32.c genUnicode.py TODO_SCHEMAS \
+ dbgen.pl dbgenattr.pl
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libxml-2.0.pc
+
+#
+# Instll the tests program sources as examples
+#
+BASE_DIR = $(datadir)/doc
+DOC_MODULE = libxml2-$(VERSION)
+EXAMPLES_DIR = $(BASE_DIR)/$(DOC_MODULE)/examples
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+ cd $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) stamp-h1; \
+ else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: $(am__configure_deps) $(top_srcdir)/acconfig.h
+ cd $(top_srcdir) && $(AUTOHEADER)
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+libxml2.spec: $(top_builddir)/config.status $(srcdir)/libxml.spec.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+xml2-config: $(top_builddir)/config.status $(srcdir)/xml2-config.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+libxml-2.0.pc: $(top_builddir)/config.status $(srcdir)/libxml-2.0.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+libxml-2.0-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/libxml-2.0-uninstalled.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(libdir)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f"; \
+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f; \
+ else :; fi; \
+ done
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ p="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \
+ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libxml2.la: $(libxml2_la_OBJECTS) $(libxml2_la_DEPENDENCIES)
+ $(LINK) -rpath $(libdir) $(libxml2_la_LDFLAGS) $(libxml2_la_OBJECTS) $(libxml2_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(bindir)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+ rm -f $(DESTDIR)$(bindir)/$$f; \
+ done
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+testAutomata$(EXEEXT): $(testAutomata_OBJECTS) $(testAutomata_DEPENDENCIES)
+ @rm -f testAutomata$(EXEEXT)
+ $(LINK) $(testAutomata_LDFLAGS) $(testAutomata_OBJECTS) $(testAutomata_LDADD) $(LIBS)
+testC14N$(EXEEXT): $(testC14N_OBJECTS) $(testC14N_DEPENDENCIES)
+ @rm -f testC14N$(EXEEXT)
+ $(LINK) $(testC14N_LDFLAGS) $(testC14N_OBJECTS) $(testC14N_LDADD) $(LIBS)
+testHTML$(EXEEXT): $(testHTML_OBJECTS) $(testHTML_DEPENDENCIES)
+ @rm -f testHTML$(EXEEXT)
+ $(LINK) $(testHTML_LDFLAGS) $(testHTML_OBJECTS) $(testHTML_LDADD) $(LIBS)
+testReader$(EXEEXT): $(testReader_OBJECTS) $(testReader_DEPENDENCIES)
+ @rm -f testReader$(EXEEXT)
+ $(LINK) $(testReader_LDFLAGS) $(testReader_OBJECTS) $(testReader_LDADD) $(LIBS)
+testRegexp$(EXEEXT): $(testRegexp_OBJECTS) $(testRegexp_DEPENDENCIES)
+ @rm -f testRegexp$(EXEEXT)
+ $(LINK) $(testRegexp_LDFLAGS) $(testRegexp_OBJECTS) $(testRegexp_LDADD) $(LIBS)
+testRelax$(EXEEXT): $(testRelax_OBJECTS) $(testRelax_DEPENDENCIES)
+ @rm -f testRelax$(EXEEXT)
+ $(LINK) $(testRelax_LDFLAGS) $(testRelax_OBJECTS) $(testRelax_LDADD) $(LIBS)
+testSAX$(EXEEXT): $(testSAX_OBJECTS) $(testSAX_DEPENDENCIES)
+ @rm -f testSAX$(EXEEXT)
+ $(LINK) $(testSAX_LDFLAGS) $(testSAX_OBJECTS) $(testSAX_LDADD) $(LIBS)
+testSchemas$(EXEEXT): $(testSchemas_OBJECTS) $(testSchemas_DEPENDENCIES)
+ @rm -f testSchemas$(EXEEXT)
+ $(LINK) $(testSchemas_LDFLAGS) $(testSchemas_OBJECTS) $(testSchemas_LDADD) $(LIBS)
+testThreads$(EXEEXT): $(testThreads_OBJECTS) $(testThreads_DEPENDENCIES)
+ @rm -f testThreads$(EXEEXT)
+ $(LINK) $(testThreads_LDFLAGS) $(testThreads_OBJECTS) $(testThreads_LDADD) $(LIBS)
+testURI$(EXEEXT): $(testURI_OBJECTS) $(testURI_DEPENDENCIES)
+ @rm -f testURI$(EXEEXT)
+ $(LINK) $(testURI_LDFLAGS) $(testURI_OBJECTS) $(testURI_LDADD) $(LIBS)
+testXPath$(EXEEXT): $(testXPath_OBJECTS) $(testXPath_DEPENDENCIES)
+ @rm -f testXPath$(EXEEXT)
+ $(LINK) $(testXPath_LDFLAGS) $(testXPath_OBJECTS) $(testXPath_LDADD) $(LIBS)
+xmlcatalog$(EXEEXT): $(xmlcatalog_OBJECTS) $(xmlcatalog_DEPENDENCIES)
+ @rm -f xmlcatalog$(EXEEXT)
+ $(LINK) $(xmlcatalog_LDFLAGS) $(xmlcatalog_OBJECTS) $(xmlcatalog_LDADD) $(LIBS)
+xmllint$(EXEEXT): $(xmllint_OBJECTS) $(xmllint_DEPENDENCIES)
+ @rm -f xmllint$(EXEEXT)
+ $(LINK) $(xmllint_LDFLAGS) $(xmllint_OBJECTS) $(xmllint_LDADD) $(LIBS)
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(bindir)
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f $$d$$p; then \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f"; \
+ $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f; \
+ else :; fi; \
+ done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+ rm -f $(DESTDIR)$(bindir)/$$f; \
+ done
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DOCBparser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HTMLparser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HTMLtree.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SAX.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SAX2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c14n.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/catalog.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chvalid.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugXML.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dict.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encoding.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/entities.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globals.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legacy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nanoftp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nanohttp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parserInternals.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pattern.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relaxng.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@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testReader.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testRegexp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testRelax.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testSAX.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testSchemas.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testThreads@THREADS_W32@.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testURI.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testXPath.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threads.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/triostr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uri.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/valid.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xinclude.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xlink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlIO.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlcatalog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmllint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlmemory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlreader.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlregexp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlsave.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlschemas.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlschemastypes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlstring.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlunicode.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlwriter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpath.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpointer.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(man1dir)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
+ rm -f $(DESTDIR)$(man1dir)/$$inst; \
+ done
+install-man3: $(man3_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(man3dir)
+ @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.3*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 3*) ;; \
+ *) ext='3' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man3dir)/$$inst"; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(man3dir)/$$inst; \
+ done
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.3*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 3*) ;; \
+ *) ext='3' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f $(DESTDIR)$(man3dir)/$$inst"; \
+ rm -f $(DESTDIR)$(man3dir)/$$inst; \
+ done
+install-confexecDATA: $(confexec_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(confexecdir)
+ @list='$(confexec_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(confexecDATA_INSTALL) $$d$$p $(DESTDIR)$(confexecdir)/$$f"; \
+ $(confexecDATA_INSTALL) $$d$$p $(DESTDIR)$(confexecdir)/$$f; \
+ done
+
+uninstall-confexecDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(confexec_DATA)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(confexecdir)/$$f"; \
+ rm -f $(DESTDIR)$(confexecdir)/$$f; \
+ done
+install-m4dataDATA: $(m4data_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(m4datadir)
+ @list='$(m4data_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(m4dataDATA_INSTALL) $$d$$p $(DESTDIR)$(m4datadir)/$$f"; \
+ $(m4dataDATA_INSTALL) $$d$$p $(DESTDIR)$(m4datadir)/$$f; \
+ done
+
+uninstall-m4dataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(m4data_DATA)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(m4datadir)/$$f"; \
+ rm -f $(DESTDIR)$(m4datadir)/$$f; \
+ done
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(pkgconfigdir)
+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(pkgconfigDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f"; \
+ $(pkgconfigDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(pkgconfigdir)/$$f"; \
+ rm -f $(DESTDIR)$(pkgconfigdir)/$$f; \
+ done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if (etags --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ else \
+ include_option=--include; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ mkdir $(distdir)
+ $(mkdir_p) $(distdir)/. $(distdir)/example $(distdir)/include/libxml $(distdir)/python
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || mkdir "$(distdir)/$$subdir" \
+ || exit 1; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="../$(top_distdir)" \
+ distdir="../$(distdir)/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+dist-gzip: distdir
+ $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ $(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ $(AMTAR) chof - $(distdir) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - ;;\
+ *.tar.bz2*) \
+ bunzip2 -c $(distdir).tar.bz2 | $(AMTAR) xf - ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && cd $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && $(mkdir_p) "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) \
+ config.h
+install-binPROGRAMS: install-libLTLIBRARIES
+
+installdirs: installdirs-recursive
+installdirs-am:
+ $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) $(DESTDIR)$(man3dir) $(DESTDIR)$(confexecdir) $(DESTDIR)$(m4datadir) $(DESTDIR)$(pkgconfigdir)
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+ clean-libtool clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-data-local install-m4dataDATA install-man \
+ install-pkgconfigDATA
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS \
+ install-confexecDATA install-libLTLIBRARIES
+
+install-info: install-info-recursive
+
+install-man: install-man1 install-man3
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
+ uninstall-confexecDATA uninstall-info-am \
+ uninstall-libLTLIBRARIES uninstall-m4dataDATA uninstall-man \
+ uninstall-pkgconfigDATA
+
+uninstall-info: uninstall-info-recursive
+
+uninstall-man: uninstall-man1 uninstall-man3
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+ check-am check-local clean clean-binPROGRAMS clean-generic \
+ clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \
+ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \
+ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
+ distclean-compile distclean-generic distclean-hdr \
+ distclean-libtool distclean-recursive distclean-tags \
+ distcleancheck distdir distuninstallcheck dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-binSCRIPTS install-confexecDATA install-data \
+ install-data-am install-data-local install-exec \
+ install-exec-am install-info install-info-am \
+ install-libLTLIBRARIES install-m4dataDATA install-man \
+ install-man1 install-man3 install-pkgconfigDATA install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-recursive mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
+ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-binPROGRAMS uninstall-binSCRIPTS \
+ uninstall-confexecDATA uninstall-info-am \
+ uninstall-libLTLIBRARIES uninstall-m4dataDATA uninstall-man \
+ uninstall-man1 uninstall-man3 uninstall-pkgconfigDATA
+
+
+#testOOM_SOURCES=testOOM.c testOOMlib.h testOOMlib.c
+#testOOM_LDFLAGS =
+#testOOM_DEPENDENCIES = $(DEPS)
+#testOOM_LDADD= $(LDADDS)
+
+check-local: tests
+
+testall : tests SVGtests SAXtests
+
+tests: XMLtests XMLenttests NStests Errtests @READER_TEST@ @TEST_SAX@ @TEST_PUSH@ @TEST_HTML@ @TEST_PHTML@ @TEST_VALID@ URItests @TEST_XPATH@ @TEST_XPTR@ @TEST_XINCLUDE@ @TEST_C14N@ @TEST_DEBUG@ @TEST_CATALOG@ @TEST_REGEXPS@ @TEST_SCHEMAS@ @TEST_THREADS@ Timingtests @TEST_VTIME@ @PYTHON_TESTS@
+ @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; $(MAKE) tests ; fi)
+ @(cd doc/examples ; $(MAKE) tests)
+
+valgrind:
+ @echo '## Running the regression tests under Valgrind'
+ @echo '## Go get a cup of coffee it is gonna take a while ...'
+ $(MAKE) CHECKER='valgrind -q' tests
+
+HTMLtests : testHTML$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## HTML regression tests"
+ -@(for i in $(srcdir)/test/HTML/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/HTML/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testHTML $$i > $(srcdir)/result/HTML/$$name 2>$(srcdir)/result/HTML/$$name.err ; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testHTML $$i > result.$$name 2> error.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/HTML/$$name result.$$name ; \
+ diff -b $(srcdir)/result/HTML/$$name.err error.$$name ; \
+ $(CHECKER) $(top_builddir)/testHTML result.$$name > result2.$$name 2>error.$$name ; \
+ diff result.$$name result2.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name error.$$name ; \
+ fi ; fi ; done)
+
+HTMLPushtests : testHTML$(EXEEXT)
+ @echo "## Push HTML regression tests"
+ -@(for i in $(srcdir)/test/HTML/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/HTML/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testHTML $$i > $(srcdir)/result/HTML/$$name 2>$(srcdir)/result/HTML/$$name.err ; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testHTML --push $$i > result.$$name 2> error.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/HTML/$$name result.$$name ; \
+ cut -b 1-15 $(srcdir)/result/HTML/$$name.err > errorcut.$$name; \
+ cut -b 1-15 error.$$name > errorcut2.$$name; \
+ diff -b errorcut.$$name errorcut2.$$name ; \
+ $(CHECKER) $(top_builddir)/testHTML --push result.$$name > result2.$$name 2>error.$$name ; \
+ diff result.$$name result2.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name error.$$name errorcut.$$name errorcut2.$$name ; \
+ fi ; fi ; done)
+ @echo "## HTML SAX regression tests"
+ -@(for i in $(srcdir)/test/HTML/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/HTML/$$name.sax ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testHTML --sax $$i > $(srcdir)/result/HTML/$$name.sax ; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testHTML --sax $$i > result.$$name.sax ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/HTML/$$name.sax result.$$name.sax` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name.sax ; \
+ fi ; fi ; done)
+ @echo "## Push HTML SAX regression tests"
+ -@(for i in $(srcdir)/test/HTML/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/HTML/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testHTML --sax $$i > $(srcdir)/result/HTML/$$name.sax ; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testHTML --push --sax $$i 2>&1 > result.$$name.sax ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/HTML/$$name.sax result.$$name.sax` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name.sax ; \
+ fi ; fi ; done)
+
+XMLtests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XML regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i > $(srcdir)/result/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint result.$$name 2>&1 > result2.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result.$$name result2.$$name` ;\
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+ @echo "## XML regression tests on memory"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --memory $$i > $(srcdir)/result/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --memory $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --memory result.$$name 2>&1 > result2.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"`; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ diff result.$$name result2.$$name ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+
+XMLPushtests: xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XML push regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --push $$i > $(srcdir)/result/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --push $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --push result.$$name 2>&1 > result2.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result.$$name result2.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+
+NStests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XML Namespaces regression tests"
+ -@(for i in $(srcdir)/test/namespaces/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/namespaces/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i \
+ 2> $(srcdir)/result/namespaces/$$name.err \
+ > $(srcdir)/result/namespaces/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint $$i 2> error.$$name > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/namespaces/$$name result.$$name ; \
+ diff $(srcdir)/result/namespaces/$$name.err error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+
+Errtests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Error cases regression tests"
+ -@(for i in $(srcdir)/test/errors/*.xml ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/errors/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i \
+ 2> $(srcdir)/result/errors/$$name.err \
+ > $(srcdir)/result/errors/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint $$i 2> error.$$name > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/errors/$$name result.$$name ; \
+ diff $(srcdir)/result/errors/$$name.err error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+ @echo "## Error cases stream regression tests"
+ -@(for i in $(srcdir)/test/errors/*.xml ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/errors/$$name.str ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i \
+ 2> $(srcdir)/result/errors/$$name.str \
+ > $(srcdir)/result/errors/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint $$i 2> error.$$name > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/errors/$$name result.$$name ; \
+ diff $(srcdir)/result/errors/$$name.str error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+
+Docbtests : xmllint$(EXEEXT)
+
+XMLenttests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XML entity subst regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/noent/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --noent $$i > $(srcdir)/result/noent/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --noent $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff $(srcdir)/result/noent/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --noent result.$$name 2>&1 > result2.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result.$$name result2.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+
+URItests : testURI$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## URI module regression tests"
+ -@(for i in $(srcdir)/test/URI/*.data ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/URI/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testURI -base 'http://foo.com/path/to/index.html?orig#help' < $$i > $(srcdir)/result/URI/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testURI -base 'http://foo.com/path/to/index.html?orig#help' < $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/URI/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ -@(for i in $(srcdir)/test/URI/*.uri ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/URI/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testURI < $$i > $(srcdir)/result/URI/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testURI < $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/URI/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+XPathtests : testXPath$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XPath regression tests"
+ -@(if [ "`$(top_builddir)/testXPath | grep 'support not compiled in'`" != "" ] ; \
+ then echo Skipping debug not compiled in ; exit 0 ; fi ; \
+ for i in $(srcdir)/test/XPath/expr/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/XPath/expr/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testXPath -f --expr $$i > $(srcdir)/result/XPath/expr/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testXPath -f --expr $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XPath/expr/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done ; \
+ for i in $(srcdir)/test/XPath/docs/* ; do \
+ if [ ! -d $$i ] ; then \
+ doc=`basename $$i`; \
+ for j in $(srcdir)/test/XPath/tests/$$doc* ; do \
+ if [ ! -f $$j ] ; then continue ; fi ; \
+ name=`basename $$j`; \
+ if [ ! -d $$j ] ; then \
+ if [ ! -f $(srcdir)/result/XPath/tests/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testXPath -f -i $$i $$j > $(srcdir)/result/XPath/tests/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testXPath -f -i $$i $$j 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XPath/tests/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done ; fi ; done)
+
+XPtrtests : testXPath$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XPointer regression tests"
+ -@(if [ "`$(top_builddir)/testXPath | grep 'support not compiled in'`" != "" ] ; \
+ then echo Skipping debug not compiled in ; exit 0 ; fi ; \
+ for i in $(srcdir)/test/XPath/docs/* ; do \
+ if [ ! -d $$i ] ; then \
+ doc=`basename $$i`; \
+ for j in $(srcdir)/test/XPath/xptr/$$doc* ; do \
+ if [ ! -f $$j ] ; then continue ; fi ; \
+ name=`basename $$j`; \
+ if [ ! -d $$j ] ; then \
+ if [ ! -f $(srcdir)/result/XPath/xptr/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testXPath -xptr -f -i $$i $$j > $(srcdir)/result/XPath/xptr/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ else \
+ log=`$(CHECKER) $(top_builddir)/testXPath -xptr -f -i $$i $$j 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XPath/xptr/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done ; fi ; done)
+
+XIncludetests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## XInclude regression tests"
+ -@(for i in $(srcdir)/test/XInclude/docs/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/XInclude/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --nowarning --xinclude $$i > $(srcdir)/result/XInclude/$$name 2> $(srcdir)/result/XInclude/$$name.err ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --nowarning --xinclude $$i > result.$$name 2>error.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XInclude/$$name result.$$name ; \
+ diff $(srcdir)/result/XInclude/$$name.err error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+ @(echo > .memdump)
+ @echo "## XInclude xmlReader regression tests"
+ -@(for i in $(srcdir)/test/XInclude/docs/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/XInclude/$$name.rdr ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --nowarning --xinclude --walker --debug $$i > $(srcdir)/result/XInclude/$$name.rdr ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --nowarning --xinclude --stream --debug $$i > result.$$name 2>error.$$name | grep -v 'failed to load external entity' ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/XInclude/$$name.err error.$$name ; \
+ diff $(srcdir)/result/XInclude/$$name.rdr result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+
+Scripttests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Scripts regression tests"
+ @echo "## Some of the base computations may be different if srcdir != ."
+ -@(for i in $(srcdir)/test/scripts/*.script ; do \
+ name=`basename $$i .script`; \
+ xml=$(srcdir)/test/scripts/`basename $$i .script`.xml; \
+ if [ -f $$xml ] ; then \
+ if [ ! -f $(srcdir)/result/scripts/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --shell $$xml < $$i > $(srcdir)/result/scripts/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --shell $$xml < $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/scripts/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+Catatests : xmlcatalog$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Catalog regression tests"
+ -@(for i in $(srcdir)/test/catalogs/*.script ; do \
+ name=`basename $$i .script`; \
+ xml=$(srcdir)/test/catalogs/`basename $$i .script`.xml; \
+ if [ -f $$xml ] ; then \
+ if [ ! -f $(srcdir)/result/catalogs/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --shell $$xml < $$i > $(srcdir)/result/catalogs/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmlcatalog --shell $$xml < $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/catalogs/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ -@(for i in $(srcdir)/test/catalogs/*.script ; do \
+ name=`basename $$i .script`; \
+ sgml=$(srcdir)/test/catalogs/`basename $$i .script`.sgml; \
+ if [ -f $$sgml ] ; then \
+ if [ ! -f $(srcdir)/result/catalogs/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --shell $$sgml < $$i > $(srcdir)/result/catalogs/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmlcatalog --shell $$sgml < $$i > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/catalogs/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ @echo "## Add and del operations on XML Catalogs"
+ -@($(CHECKER) $(top_builddir)/xmlcatalog --create --noout $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --add public Pubid sysid $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --add public Pubid2 sysid2 $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --add public Pubid3 sysid3 $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result/catalogs/mycatalog.full $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --del sysid $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --del sysid3 $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ $(CHECKER) $(top_builddir)/xmlcatalog --noout --del sysid2 $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ diff result/catalogs/mycatalog.empty $(srcdir)/result/catalogs/mycatalog; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ rm -f $(srcdir)/result/catalogs/mycatalog)
+
+SVGtests : xmllint$(EXEEXT)
+ @echo "## SVG parsing regression tests"
+ -@(for i in $(srcdir)/test/SVG/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/SVG/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i > $(srcdir)/result/SVG/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ echo Testing $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint $$i > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/SVG/$$name result.$$name ; \
+ $(CHECKER) $(top_builddir)/xmllint result.$$name > result2.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff result.$$name result2.$$name ; \
+ rm result.$$name result2.$$name ; \
+ fi ; fi ; done)
+
+Threadtests : testThreads$(EXEEXT)
+ @echo "## Threaded regression tests"
+ -@($(CHECKER) $(top_builddir)/testThreads ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"; \
+ exit 0)
+
+Readertests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Reader regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name.rdr ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --nonet --debug --stream $$i > $(srcdir)/result/$$name.rdr 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --nonet --debug --stream $$i > result.$$name 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name.rdr result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ @echo "## Reader on memory regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name.rdr ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --memory --nonet --debug --stream $$i > $(srcdir)/result/$$name.rdr 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --memory --nonet --debug --stream $$i > result.$$name 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name.rdr result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ @(echo > .memdump)
+ @echo "## Walker regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name.rdr ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --nonet --debug --walker $$i > $(srcdir)/result/$$name.rdr 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --nonet --debug --walker $$i > result.$$name 2>/dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name.rdr result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+SAXtests : testSAX$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## SAX callbacks regression tests"
+ -@(for i in $(srcdir)/test/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/$$name.sax ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testSAX $$i > $(srcdir)/result/$$name.sax 2> /dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testSAX $$i > result.$$name 2> /dev/null ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/$$name.sax result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+Validtests : xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Valid documents regression tests"
+ -@(for i in $(srcdir)/test/VCM/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ log=`$(CHECKER) $(top_builddir)/xmllint --valid --noout --nowarning $$i ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0"`;\
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ fi ; done ; exit 0)
+ @echo "## Validity checking regression tests"
+ -@(for i in $(srcdir)/test/VC/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/VC/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --noout --valid $$i 2> $(srcdir)/result/VC/$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --noout --valid $$i 2> result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/VC/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+ @echo "## General documents valid regression tests"
+ -@(for i in $(srcdir)/test/valid/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/valid/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint --valid $$i > $(srcdir)/result/valid/$$name 2>$(srcdir)/result/valid/$$name.err ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint --valid $$i > result.$$name 2>error.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/valid/$$name result.$$name ; \
+ diff $(srcdir)/result/valid/$$name.err error.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name error.$$name ; \
+ fi ; fi ; done)
+
+Regexptests: testRegexp$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Regexp regression tests"
+ -@(for i in $(srcdir)/test/regexp/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/regexp/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testRegexp -i $$i > $(srcdir)/result/regexp/$$name; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testRegexp -i $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/regexp/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+Automatatests: testAutomata$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Automata regression tests"
+ -@(for i in $(srcdir)/test/automata/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/automata/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testAutomata $$i > $(srcdir)/result/automata/$$name; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testAutomata $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/automata/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
+
+$(srcdir)/dba100000.xml: dbgenattr.pl
+ @echo "## generating dba100000.xml"
+ @($(top_srcdir)/dbgenattr.pl 100000 > $(srcdir)/dba100000.xml)
+
+Timingtests: xmllint$(EXEEXT) $(srcdir)/dba100000.xml
+ @echo "## Timing tests to try to detect performance"
+ @echo "## as well a memory usage breakage when streaming"
+ @echo "## 1/ using the file interface"
+ @echo "## 2/ using the memory interface"
+ @echo "## 3/ repeated DOM parsing"
+ @echo "## 4/ repeated DOM validation"
+ -@($(top_builddir)/xmllint --stream --timing $(srcdir)/dba100000.xml; \
+ MEM=`cat .memdump | grep "MEMORY ALLOCATED" | awk '{ print $$7}'`;\
+ if [ "$$MEM" != "" ] ; then echo Using $$MEM bytes ; fi ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ exit 0)
+ -@($(top_builddir)/xmllint --stream --timing --memory $(srcdir)/dba100000.xml; \
+ MEM=`cat .memdump | grep "MEMORY ALLOCATED" | awk '{ print $$7}'`;\
+ if [ "$$MEM" != "" ] ; then echo Using $$MEM bytes ; fi ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ exit 0)
+ -@($(top_builddir)/xmllint --noout --timing --repeat $(srcdir)/test/valid/REC-xml-19980210.xml; \
+ MEM=`cat .memdump | grep "MEMORY ALLOCATED" | awk '{ print $$7}'`;\
+ if [ "$$MEM" != "" ] ; then echo Using $$MEM bytes ; fi ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ exit 0)
+
+VTimingtests: xmllint$(EXEEXT)
+ -@($(top_builddir)/xmllint --noout --timing --valid --repeat $(srcdir)/test/valid/REC-xml-19980210.xml; \
+ MEM=`cat .memdump | grep "MEMORY ALLOCATED" | awk '{ print $$7}'`;\
+ if [ "$$MEM" != "" ] ; then echo Using $$MEM bytes ; fi ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ exit 0)
+
+C14Ntests : testC14N$(EXEEXT)
+ @echo "## C14N and XPath regression tests"
+ -@(for m in with-comments without-comments exc-without-comments ; do \
+ for i in $(srcdir)/test/c14n/$$m/*.xml ; do \
+ if [ ! -d $$i ] ; then \
+ name=`basename $$i .xml`; \
+ cmdline="$(CHECKER) $(top_builddir)/testC14N --$$m $$i"; \
+ if [ -f $(srcdir)/test/c14n/$$m/$$name.xpath ] ; then \
+ cmdline="$$cmdline $(srcdir)/test/c14n/$$m/$$name.xpath"; \
+ if [ -f $(srcdir)/test/c14n/$$m/$$name.ns ] ; then \
+ cmdline="$$cmdline '`cat $(srcdir)/test/c14n/$$m/$$name.ns`'"; \
+ fi; \
+ fi; \
+ $$cmdline > $(srcdir)/test/c14n/test.tmp; \
+ if [ $$? -eq 0 ]; then \
+ diff $(srcdir)/result/c14n/$$m/$$name $(srcdir)/test/c14n/test.tmp; \
+ if [ $$? -ne 0 ]; then \
+ echo "Test $$m/$$name failed"; \
+ cat $(srcdir)/test/c14n/test.tmp; \
+ fi; \
+ else \
+ echo "C14N failed"; \
+ fi; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ fi; \
+ rm -f $(srcdir)/test/c14n/test.tmp; \
+ done; \
+ done)
+
+Schemastests: testSchemas$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Schemas regression tests"
+ -@(for i in $(srcdir)/test/schemas/*_*.xsd ; do \
+ name=`basename $$i | sed 's+_.*++'`; \
+ sno=`basename $$i | sed 's+.*_\(.*\).xsd+\1+'`; \
+ for j in $(srcdir)/test/schemas/"$$name"_*.xml ; do \
+ if [ -f $$j ] ; then \
+ xno=`basename $$j | sed 's+.*_\(.*\).xml+\1+'`; \
+ if [ ! -f $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno" ]; \
+ then \
+ echo New test file "$$name"_"$$sno"_"$$xno" ; \
+ $(CHECKER) $(top_builddir)/testSchemas $$i $$j \
+ > $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno" \
+ 2> $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno".err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testSchemas $$i $$j \
+ > res.$$name 2> err.$$name;\
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno" \
+ res.$$name;\
+ diff $(srcdir)/result/schemas/"$$name"_"$$sno"_"$$xno".err \
+ err.$$name;\
+ grep Unimplemented err.$$name`; \
+ if [ -n "$$log" ] ; then echo "$$name"_"$$sno"_"$$xno" result ; echo $$log ; fi ; \
+ rm res.$$name err.$$name ; \
+ fi ; fi ;\
+ done; done)
+
+Relaxtests: xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Relax-NG regression tests"
+ -@(for i in $(srcdir)/test/relaxng/*.rng ; do \
+ name=`basename $$i | sed 's+\.rng++'`; \
+ if [ ! -f $(srcdir)/result/relaxng/"$$name"_valid ] ; then \
+ echo New schemas $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $(srcdir)/test/relaxng/tutorA.rng $$i \
+ > $(srcdir)/result/relaxng/"$$name"_valid \
+ 2> $(srcdir)/result/relaxng/"$$name"_err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $(srcdir)/test/relaxng/tutorA.rng $$i \
+ > res.$$name 2> err.$$name;\
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/relaxng/"$$name"_valid \
+ res.$$name;\
+ diff $(srcdir)/result/relaxng/"$$name"_err \
+ err.$$name | grep -v "error detected at";\
+ grep Unimplemented err.$$name`; \
+ if [ -n "$$log" ] ; then echo schemas $$name result ; echo $$log ; fi ; \
+ rm res.$$name err.$$name ; \
+ fi; \
+ for j in $(srcdir)/test/relaxng/"$$name"_*.xml ; do \
+ if [ -f $$j ] ; then \
+ xno=`basename $$j | sed 's+.*_\(.*\).xml+\1+'`; \
+ if [ ! -f $(srcdir)/result/relaxng/"$$name"_"$$xno" ]; \
+ then \
+ echo New test file "$$name"_"$$xno" ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $$i $$j \
+ > $(srcdir)/result/relaxng/"$$name"_"$$xno" \
+ 2> $(srcdir)/result/relaxng/"$$name"_"$$xno".err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $$i $$j \
+ > res.$$name 2> err.$$name;\
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/relaxng/"$$name"_"$$xno" \
+ res.$$name;\
+ diff $(srcdir)/result/relaxng/"$$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)
+ @echo "## Relax-NG streaming regression tests"
+ -@(for i in $(srcdir)/test/relaxng/*.rng ; do \
+ name=`basename $$i | sed 's+\.rng++'`; \
+ for j in $(srcdir)/test/relaxng/"$$name"_*.xml ; do \
+ if [ -f $$j ] ; then \
+ xno=`basename $$j | sed 's+.*_\(.*\).xml+\1+'`; \
+ if [ ! -f $(srcdir)/result/relaxng/"$$name"_"$$xno" ]; \
+ then \
+ echo New test file "$$name"_"$$xno" ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $$i $$j \
+ > $(srcdir)/result/relaxng/"$$name"_"$$xno" \
+ 2> $(srcdir)/result/relaxng/"$$name"_"$$xno".err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --stream --relaxng $$i $$j \
+ > 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 \
+ diff $(srcdir)/result/relaxng/"$$name"_"$$xno".err \
+ err.$$name | grep -v "error detected at";\
+ fi ; grep Unimplemented err.$$name`; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm res.$$name err.$$name ; \
+ fi ; fi ; \
+ done; done)
+
+RelaxNGPythonTests:
+ @(if [ -x $(PYTHON) ] ; then \
+ echo "## Relax-NG Python based test suite 1" ; \
+ $(CHECKER) $(PYTHON) $(srcdir)/check-relaxng-test-suite.py ; \
+ echo "## Relax-NG Python based test suite 2" ; \
+ $(CHECKER) $(PYTHON) $(srcdir)/check-relaxng-test-suite2.py ; \
+ fi)
+
+SchemasPythonTests:
+ @(if [ -x $(PYTHON) ] ; then \
+ echo "## XML Schemas datatypes Python based test suite" ; \
+ $(CHECKER) $(PYTHON) $(srcdir)/check-xsddata-test-suite.py ; \
+ fi)
+
+cleanup:
+ -@(find . -name .\#\* -exec rm {} \;)
+
+dist-hook: cleanup libxml2.spec
+ -cp libxml2.spec $(distdir)
+ (cd $(srcdir) ; tar -cf - --exclude CVS win32 macos vms test result SAXresult ) | (cd $(distdir); tar xf -)
+
+cleantar:
+ @(rm -f libxml*.tar.gz COPYING.LIB)
+
+rpm: cleanup cleantar
+ @(unset CDPATH ; $(MAKE) dist && rpmbuild -ta $(distdir).tar.gz)
+
+xml2Conf.sh: xml2Conf.sh.in Makefile
+ sed -e 's?\@XML_LIBDIR\@?$(XML_LIBDIR)?g' \
+ -e 's?\@XML_INCLUDEDIR\@?$(XML_INCLUDEDIR)?g' \
+ -e 's?\@VERSION\@?$(VERSION)?g' \
+ -e 's?\@XML_LIBS\@?$(XML_LIBS)?g' \
+ < $(srcdir)/xml2Conf.sh.in > xml2Conf.tmp \
+ && mv xml2Conf.tmp xml2Conf.sh
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
+ -@INSTALL@ -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
+ $(mkinstalldirs) $(DESTDIR)$(EXAMPLES_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR)
+# 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
new file mode 100644
index 0000000..e9e65ae
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,1212 @@
+
+ NEWS file for libxml2
+
+ Note that this is automatically generated from the news webpage at:
+ http://xmlsoft.org/news.html
+
+
+CVS only : check the Changelog at
+http://cvs.gnome.org/lxr/source/gnome-xml/ChangeLog
+ file
+for a really accurate description:
+Items not finished and worked on, get in touch with the list if you want
+to test those - More testing on RelaxNG
+ - Finishing up XML
+ Schemas
+
+
+2.6.8: Mar 23 2004:
+ - First step of the cleanup of the serialization code and APIs
+ - XML Schemas: mixed content (Adam Dickmeiss), QName handling fixes (Adam
+ Dickmeiss), anyURI for "" (John Belmonte)
+ - Python: Canonicalization C14N support added (Anthony Carrico)
+ - xmlDocCopyNode() extension (William)
+ - Relax-NG: fix when processing XInclude results (William), external
+ reference in interleave (William), missing error on <choice>
+ failure (William), memory leak in schemas datatype facets.
+ - xmlWriter: patch for better DTD support (Alfred Mickautsch)
+ - bug fixes: xmlXPathLangFunction memory leak (Mike Hommey and William
+ Brack), no ID errors if using HTML_PARSE_NOERROR, xmlcatalog fallbacks to
+ URI on SYSTEM lookup failure, XInclude parse flags inheritance (William),
+ XInclude and XPointer fixes for entities (William), XML parser bug
+ reported by Holger Rauch, nanohttp fd leak (William), regexps char
+ groups '-' handling (William), dictionnary reference counting problems,
+ do not close stderr.
+ - performance patches from Petr Pajas
+ - Documentation fixes: XML_CATALOG_FILES in man pages (Mike Hommey)
+ - compilation and portability fixes: --without-valid, catalog cleanups
+ (Peter Breitenlohner), MingW patch (Roland Schwingel), cross-compilation
+ to Windows (Christophe de Vienne), --with-html-dir fixup (Julio Merino
+ Vidal), Windows build (Eric Zurcher)
+
+
+2.6.7: Feb 23 2004:
+ - documentation: tutorial updates (John Fleck), benchmark results
+ - xmlWriter: updates and fixes (Alfred Mickautsch, Lucas Brasilino)
+ - XPath optimization (Petr Pajas)
+ - DTD ID handling optimization
+ - bugfixes: xpath number with > 19 fractional (William Brack), push
+ mode with unescaped '>' characters, fix xmllint --stream --timing, fix
+ xmllint --memory --stream memory usage, xmlAttrSerializeTxtContent
+ handling NULL, trying to fix Relax-NG/Perl interface.
+ - python: 2.3 compatibility, whitespace fixes (Malcolm Tredinnick)
+ - Added relaxng option to xmllint --shell
+
+
+2.6.6: Feb 12 2004:
+ - nanohttp and nanoftp: buffer overflow error on URI parsing (Igor and
+ William) reported by Yuuichi Teranishi
+ - bugfixes: make test and path issues, xmlWriter attribute serialization
+ (William Brack), xmlWriter indentation (William), schemas validation
+ (Eric Haszlakiewicz), XInclude dictionnaries issues (William and Oleg
+ Paraschenko), XInclude empty fallback (William), HTML warnings (William),
+ XPointer in XInclude (William), Python namespace serialization,
+ isolat1ToUTF8 bound error (Alfred Mickautsch), output of parameter
+ entities in internal subset (William), internal subset bug in push mode,
+ <xs:all> fix (Alexey Sarytchev)
+ - Build: fix for automake-1.8 (Alexander Winston), warnings removal
+ (Philip Ludlam), SOCKLEN_T detection fixes (Daniel Richard), fix
+ --with-minimum configuration.
+ - XInclude: allow the 2001 namespace without warning.
+ - Documentation: missing example/index.html (John Fleck), version
+ dependancies (John Fleck)
+ - reader API: structured error reporting (Steve Ball)
+ - Windows compilation: mingw, msys (Mikhail Grushinskiy), function
+ prototype (Cameron Johnson), MSVC6 compiler warnings, _WINSOCKAPI_
+ patch
+ - Parsers: added xmlByteConsumed(ctxt) API to get the byte offest in
+ input.
+
+
+2.6.5: Jan 25 2004:
+ - Bugfixes: dictionnaries for schemas (William Brack), regexp segfault
+ (William), xs:all problem (William), a number of XPointer bugfixes
+ (William), xmllint error go to stderr, DTD validation problem with
+ namespace, memory leak (William), SAX1 cleanup and minimal options fixes
+ (Mark Vadoc), parser context reset on error (Shaun McCance), XPath union
+ evaluation problem (William) , xmlReallocLoc with NULL (Aleksey Sanin),
+ XML Schemas double free (Steve Ball), XInclude with no href, argument
+ callbacks order for XPath callbacks (Frederic Peters)
+ - Documentation: python scripts (William Brack), xslt stylesheets (John
+ Fleck), doc (Sven Zimmerman), I/O example.
+ - Python bindings: fixes (William), enum support (Stéphane Bidoul),
+ structured error reporting (Stéphane Bidoul)
+ - XInclude: various fixes for conformance, problem related to dictionnary
+ references (William & me), recursion (William)
+ - xmlWriter: indentation (Lucas Brasilino), memory leaks (Alfred
+ Mickautsch),
+ - xmlSchemas: normalizedString datatype (John Belmonte)
+ - code cleanup for strings functions (William)
+ - Windows: compiler patches (Mark Vakoc)
+ - Parser optimizations, a few new XPath and dictionnary APIs for future
+ XSLT optimizations.
+
+
+2.6.4: Dec 24 2003:
+ - Windows build fixes (Igor Zlatkovic)
+ - Some serious XInclude problems reported by Oleg Paraschenko and
+ - Unix and Makefile packaging fixes (me, William Brack,
+ - Documentation improvements (John Fleck, William Brack), example fix
+ (Lucas Brasilino)
+ - bugfixes: xmlTextReaderExpand() with xmlReaderWalker, XPath handling of
+ NULL strings (William Brack) , API building reader or parser from
+ filedescriptor should not close it, changed XPath sorting to be stable
+ again (William Brack), xmlGetNodePath() generating '(null)' (William
+ Brack), DTD validation and namespace bug (William Brack), XML Schemas
+ double inclusion behaviour
+
+
+2.6.3: Dec 10 2003:
+ - documentation updates and cleanup (DV, William Brack, John Fleck)
+ - added a repository of examples, examples from Aleksey Sanin, Dodji
+ Seketeli, Alfred Mickautsch
+ - Windows updates: Mark Vakoc, Igor Zlatkovic, Eric Zurcher, Mingw
+ (Kenneth Haley)
+ - Unicode range checking (William Brack)
+ - code cleanup (William Brack)
+ - Python bindings: doc (John Fleck), bug fixes
+ - UTF-16 cleanup and BOM issues (William Brack)
+ - bug fixes: ID and xmlReader validation, XPath (William Brack),
+ xmlWriter (Alfred Mickautsch), hash.h inclusion problem, HTML parser
+ (James Bursa), attribute defaulting and validation, some serialization
+ cleanups, XML_GET_LINE macro, memory debug when using threads (William
+ Brack), serialization of attributes and entities content, xmlWriter
+ (Daniel Schulman)
+ - XInclude bugfix, new APIs and update to the last version including the
+ namespace change.
+ - XML Schemas improvements: include (Robert Stepanek), import and
+ namespace handling, fixed the regression tests troubles, added examples
+ based on Eric van der Vlist book, regexp fixes
+ - preliminary pattern support for streaming (needed for schemas
+ constraints), added xmlTextReaderPreservePattern() to collect subdocument
+ when streaming.
+ - various fixes in the structured error handling
+
+
+2.6.2: Nov 4 2003:
+ - XPath context unregistration fixes
+ - text node coalescing fixes (Mark Lilback)
+ - API to screate a W3C Schemas from an existing document (Steve Ball)
+ - BeOS patches (Marcin 'Shard' Konicki)
+ - xmlStrVPrintf function added (Aleksey Sanin)
+ - compilation fixes (Mark Vakoc)
+ - stdin parsing fix (William Brack)
+ - a posteriori DTD validation fixes
+ - xmlReader bug fixes: Walker fixes, python bindings
+ - fixed xmlStopParser() to really stop the parser and errors
+ - always generate line numbers when using the new xmlReadxxx
+ functions
+ - added XInclude support to the xmlReader interface
+ - implemented XML_PARSE_NONET parser option
+ - DocBook XSLT processing bug fixed
+ - HTML serialization for <p> elements (William Brack and me)
+ - XPointer failure in XInclude are now handled as resource errors
+ - fixed xmllint --html to use the HTML serializer on output (added
+ --xmlout to implement the previous behaviour of saving it using the XML
+ serializer)
+
+
+2.6.1: Oct 28 2003:
+ - Mostly bugfixes after the big 2.6.0 changes
+ - Unix compilation patches: libxml.m4 (Patrick Welche), warnings cleanup
+ (William Brack)
+ - Windows compilation patches (Joachim Bauch, Stephane Bidoul, Igor
+ Zlatkovic)
+ - xmlWriter bugfix (Alfred Mickautsch)
+ - chvalid.[ch]: couple of fixes from Stephane Bidoul
+ - context reset: error state reset, push parser reset (Graham
+ Bennett)
+ - context reuse: generate errors if file is not readable
+ - defaulted attributes for element coming from internal entities
+ (Stephane Bidoul)
+ - Python: tab and spaces mix (William Brack)
+ - Error handler could crash in DTD validation in 2.6.0
+ - xmlReader: do not use the document or element _private field
+ - testSAX.c: avoid a problem with some PIs (Massimo Morara)
+ - general bug fixes: mandatory encoding in text decl, serializing
+ Document Fragment nodes, xmlSearchNs 2.6.0 problem (Kasimier Buchcik),
+ XPath errors not reported, slow HTML parsing of large documents.
+
+
+2.6.0: Oct 20 2003:
+ - Major revision release: should be API and ABI compatible but got a lot
+ of change
+ - Increased the library modularity, far more options can be stripped out,
+ a --with-minimum configuration will weight around 160KBytes
+ - Use per parser and per document dictionnary, allocate names and small
+ text nodes from the dictionnary
+ - Switch to a SAX2 like parser rewrote most of the XML parser core,
+ provides namespace resolution and defaulted attributes, minimize memory
+ allocations and copies, namespace checking and specific error handling,
+ immutable buffers, make predefined entities static structures, etc...
+ - rewrote all the error handling in the library, all errors can be
+ intercepted at a structured level, with precise information
+ available.
+ - New simpler and more generic XML and HTML parser APIs, allowing to
+ easilly modify the parsing options and reuse parser context for multiple
+ consecutive documents.
+ - Similar new APIs for the xmlReader, for options and reuse, provided new
+ functions to access content as const strings, use them for Python
+ bindings
+ - a lot of other smaller API improvements: xmlStrPrintf (Aleksey Sanin),
+ Walker i.e. reader on a document tree based on Alfred Mickautsch code,
+ make room in nodes for line numbers, reference counting and future PSVI
+ extensions, generation of character ranges to be checked with faster
+ algorithm (William), xmlParserMaxDepth (Crutcher Dunnavant), buffer
+ access
+ - New xmlWriter API provided by Alfred Mickautsch
+ - Schemas: base64 support by Anthony Carrico
+ - Parser<->HTTP integration fix, proper processing of the Mime-Type
+ and charset informations if available.
+ - Relax-NG: bug fixes including the one reported by Martijn Faassen and
+ zeroOrMore, better error reporting.
+ - Python bindings (Stéphane Bidoul), never use stdout for errors
+ output
+ - Portability: all the headers have macros for export and calling
+ convention definitions (Igor Zlatkovic), VMS update (Craig A. Berry),
+ Windows: threads (Jesse Pelton), Borland compiler (Eric Zurcher, Igor),
+ Mingw (Igor), typos (Mark Vakoc), beta version (Stephane Bidoul),
+ warning cleanups on AIX and MIPS compilers (William Brack), BeOS (Marcin
+ 'Shard' Konicki)
+ - Documentation fixes and README (William Brack), search fix (William),
+ tutorial updates (John Fleck), namespace docs (Stefan Kost)
+ - Bug fixes: xmlCleanupParser (Dave Beckett), threading uninitialized
+ mutexes, HTML doctype lowercase, SAX/IO (William), compression detection
+ and restore (William), attribute declaration in DTDs (William), namespace
+ on attribute in HTML output (William), input filename (Rob Richards),
+ namespace DTD validation, xmlReplaceNode (Chris Ryland), I/O callbacks
+ (Markus Keim), CDATA serialization (Shaun McCance), xmlReader (Peter
+ Derr), high codepoint charref like &#x10FFFF;, buffer access in push
+ mode (Justin Fletcher), TLS threads on Windows (Jesse Pelton), XPath bug
+ (William), xmlCleanupParser (Marc Liyanage), CDATA output (William), HTTP
+ error handling.
+ - xmllint options: --dtdvalidfpi for Tobias Reif, --sax1 for compat
+ testing, --nodict for building without tree dictionnary, --nocdata to
+ replace CDATA by text, --nsclean to remove surperfluous namespace
+ declarations
+ - added xml2-config --libtool-libs option from Kevin P. Fleming
+ - a lot of profiling and tuning of the code, speedup patch for
+ xmlSearchNs() by Luca Padovani. The xmlReader should do far less
+ allocation and it speed should get closer to SAX. Chris Anderson worked
+ on speeding and cleaning up repetitive checking code.
+ - cleanup of "make tests"
+ - libxml-2.0-uninstalled.pc from Malcolm Tredinnick
+ - deactivated the broken docBook SGML parser code and plugged the XML
+ parser instead.
+
+
+2.5.11: Sep 9 2003:
+A bugfix only release: - risk of crash in Relax-NG
+ - risk of crash when using multithreaded programs
+
+
+2.5.10: Aug 15 2003:
+A bugfixes only release - Windows Makefiles (William Brack)
+ - UTF-16 support fixes (Mark Itzcovitz)
+ - Makefile and portability (William Brack) automake, Linux alpha, Mingw
+ on Windows (Mikhail Grushinskiy)
+ - HTML parser (Oliver Stoeneberg)
+ - XInclude performance problem reported by Kevin Ruscoe
+ - XML parser performance problem reported by Grant Goodale
+ - xmlSAXParseDTD() bug fix from Malcolm Tredinnick
+ - and a couple other cleanup
+
+
+2.5.9: Aug 9 2003:
+ - bugfixes: IPv6 portability, xmlHasNsProp (Markus Keim), Windows build
+ (Wiliam Brake, Jesse Pelton, Igor), Schemas (Peter Sobisch), threading
+ (Rob Richards), hexBinary type (), UTF-16 BOM (Dodji Seketeli),
+ xmlReader, Relax-NG schemas compilation, namespace handling, EXSLT (Sean
+ Griffin), HTML parsing problem (William Brack), DTD validation for mixed
+ content + namespaces, HTML serialization, library initialization,
+ progressive HTML parser
+ - better interfaces for Relax-NG error handling (Joachim Bauch, )
+ - adding xmlXIncludeProcessTree() for XInclud'ing in a subtree
+ - doc fixes and improvements (John Fleck)
+ - configure flag for -with-fexceptions when embedding in C++
+ - couple of new UTF-8 helper functions (William Brack)
+ - general encoding cleanup + ISO-8859-x without iconv (Peter Jacobi)
+ - xmlTextReader cleanup + enum for node types (Bjorn Reese)
+ - general compilation/warning cleanup Solaris/HP-UX/... (William
+ Brack)
+
+
+2.5.8: Jul 6 2003:
+ - bugfixes: XPath, XInclude, file/URI mapping, UTF-16 save (Mark
+ Itzcovitz), UTF-8 checking, URI saving, error printing (William Brack),
+ PI related memleak, compilation without schemas or without xpath (Joerg
+ Schmitz-Linneweber/Garry Pennington), xmlUnlinkNode problem with DTDs,
+ rpm problem on , i86_64, removed a few compilation problems from 2.5.7,
+ xmlIOParseDTD, and xmlSAXParseDTD (Malcolm Tredinnick)
+ - portability: DJGPP (MsDos) , OpenVMS (Craig A. Berry)
+ - William Brack fixed multithreading lock problems
+ - IPv6 patch for FTP and HTTP accesses (Archana Shah/Wipro)
+ - Windows fixes (Igor Zlatkovic, Eric Zurcher), threading (Stéphane
+ Bidoul)
+ - A few W3C Schemas Structure improvements
+ - W3C Schemas Datatype improvements (Charlie Bozeman)
+ - Python bindings for thread globals (Stéphane Bidoul), and method/class
+ generator
+ - added --nonet option to xmllint
+ - documentation improvements (John Fleck)
+
+
+2.5.7: Apr 25 2003:
+ - Relax-NG: Compiling to regexp and streaming validation on top of the
+ xmlReader interface, added to xmllint --stream
+ - xmlReader: Expand(), Next() and DOM access glue, bug fixes
+ - Support for large files: RGN validated a 4.5GB instance
+ - Thread support is now configured in by default
+ - Fixes: update of the Trio code (Bjorn), WXS Date and Duration fixes
+ (Charles Bozeman), DTD and namespaces (Brent Hendricks), HTML push parser
+ and zero bytes handling, some missing Windows file path conversions,
+ behaviour of the parser and validator in the presence of "out of memory"
+ error conditions
+ - extended the API to be able to plug a garbage collecting memory
+ allocator, added xmlMallocAtomic() and modified the allocations
+ accordingly.
+ - Performances: removed excessive malloc() calls, speedup of the push and
+ xmlReader interfaces, removed excessive thread locking
+ - Documentation: man page (John Fleck), xmlReader documentation
+ - Python: adding binding for xmlCatalogAddLocal (Brent M Hendricks)
+
+
+2.5.6: Apr 1 2003:
+ - Fixed W3C XML Schemas datatype, should be compliant now except for
+ binHex and base64 which are not supported yet.
+ - bug fixes: non-ASCII IDs, HTML output, XInclude on large docs and
+ XInclude entities handling, encoding detection on external subsets, XML
+ Schemas bugs and memory leaks, HTML parser (James Bursa)
+ - portability: python/trio (Albert Chin), Sun compiler warnings
+ - documentation: added --relaxng option to xmllint man page (John)
+ - improved error reporting: xml:space, start/end tag mismatches, Relax NG
+ errors
+
+
+2.5.5: Mar 24 2003:
+ - Lot of fixes on the Relax NG implementation. More testing including
+ DocBook and TEI examples.
+ - Increased the support for W3C XML Schemas datatype
+ - Several bug fixes in the URI handling layer
+ - Bug fixes: HTML parser, xmlReader, DTD validation, XPath, encoding
+ conversion, line counting in the parser.
+ - Added support for $XMLLINT_INDENT environment variable, FTP delete
+ - Fixed the RPM spec file name
+
+
+2.5.4: Feb 20 2003:
+ - Conformance testing and lot of fixes on Relax NG and XInclude
+ implementation
+ - Implementation of XPointer element() scheme
+ - Bug fixes: XML parser, XInclude entities merge, validity checking on
+ namespaces,
+ 2 serialization bugs, node info generation problems, a DTD regexp
+ generation problem.
+
+ - Portability: windows updates and path canonicalization (Igor)
+ - A few typo fixes (Kjartan Maraas)
+ - Python bindings generator fixes (Stephane Bidoul)
+
+
+2.5.3: Feb 10 2003:
+ - RelaxNG and XML Schemas datatypes improvements, and added a first
+ version of RelaxNG Python bindings
+ - Fixes: XLink (Sean Chittenden), XInclude (Sean Chittenden), API fix for
+ serializing namespace nodes, encoding conversion bug, XHTML1
+ serialization
+ - Portability fixes: Windows (Igor), AMD 64bits RPM spec file
+
+
+2.5.2: Feb 5 2003:
+ - First implementation of RelaxNG, added --relaxng flag to xmllint
+ - Schemas support now compiled in by default.
+ - Bug fixes: DTD validation, namespace checking, XInclude and entities,
+ delegateURI in XML Catalogs, HTML parser, XML reader (Stéphane Bidoul),
+ XPath parser and evaluation, UTF8ToUTF8 serialization, XML reader memory
+ consumption, HTML parser, HTML serialization in the presence of
+ namespaces
+ - added an HTML API to check elements and attributes.
+ - Documentation improvement, PDF for the tutorial (John Fleck), doc
+ patches (Stefan Kost)
+ - Portability fixes: NetBSD (Julio Merino), Windows (Igor Zlatkovic)
+ - Added python bindings for XPointer, contextual error reporting
+ (Stéphane Bidoul)
+ - URI/file escaping problems (Stefano Zacchiroli)
+
+
+2.5.1: Jan 8 2003:
+ - Fixes a memory leak and configuration/compilation problems in 2.5.0
+ - documentation updates (John)
+ - a couple of XmlTextReader fixes
+
+
+2.5.0: Jan 6 2003:
+ - New XmltextReader interface based on C#
+ API (with help of Stéphane Bidoul)
+ - Windows: more exports, including the new API (Igor)
+ - XInclude fallback fix
+ - Python: bindings for the new API, packaging (Stéphane Bidoul),
+ drv_libxml2.py Python xml.sax driver (Stéphane Bidoul), fixes, speedup
+ and iterators for Python-2.2 (Hannu Krosing)
+ - Tutorial fixes (john Fleck and Niraj Tolia) xmllint man update
+ (John)
+ - Fix an XML parser bug raised by Vyacheslav Pindyura
+ - Fix for VMS serialization (Nigel Hall) and config (Craig A. Berry)
+ - Entities handling fixes
+ - new API to optionally track node creation and deletion (Lukas
+ Schroeder)
+ - Added documentation for the XmltextReader interface and some XML guidelines
+
+
+2.4.30: Dec 12 2002:
+ - 2.4.29 broke the python bindings, rereleasing
+ - Improvement/fixes of the XML API generator, and couple of minor code
+ fixes.
+
+
+2.4.29: Dec 11 2002:
+ - Windows fixes (Igor): Windows CE port, pthread linking, python bindings
+ (Stéphane Bidoul), Mingw (Magnus Henoch), and export list updates
+ - Fix for prev in python bindings (ERDI Gergo)
+ - Fix for entities handling (Marcus Clarke)
+ - Refactored the XML and HTML dumps to a single code path, fixed XHTML1
+ dump
+ - Fix for URI parsing when handling URNs with fragment identifiers
+ - Fix for HTTP URL escaping problem
+ - added an TextXmlReader (C#) like API (work in progress)
+ - Rewrote the API in XML generation script, includes a C parser and saves
+ more informations needed for C# bindings
+
+
+2.4.28: Nov 22 2002:
+ - a couple of python binding fixes
+ - 2 bug fixes in the XML push parser
+ - potential memory leak removed (Martin Stoilov)
+ - fix to the configure script for Unix (Dimitri Papadopoulos)
+ - added encoding support for XInclude parse="text"
+ - autodetection of XHTML1 and specific serialization rules added
+ - nasty threading bug fixed (William Brack)
+
+
+2.4.27: Nov 17 2002:
+ - fixes for the Python bindings
+ - a number of bug fixes: SGML catalogs, xmlParseBalancedChunkMemory(),
+ HTML parser, Schemas (Charles Bozeman), document fragment support
+ (Christian Glahn), xmlReconciliateNs (Brian Stafford), XPointer,
+ xmlFreeNode(), xmlSAXParseMemory (Peter Jones), xmlGetNodePath (Petr
+ Pajas), entities processing
+ - added grep to xmllint --shell
+ - VMS update patch from Craig A. Berry
+ - cleanup of the Windows build with support for more compilers (Igor),
+ better thread support on Windows
+ - cleanup of Unix Makefiles and spec file
+ - Improvements to the documentation (John Fleck)
+
+
+2.4.26: Oct 18 2002:
+ - Patches for Windows CE port, improvements on Windows paths handling
+ - Fixes to the validation code (DTD and Schemas), xmlNodeGetPath() ,
+ HTML serialization, Namespace compliance, and a number of small
+ problems
+
+
+2.4.25: Sep 26 2002:
+ - A number of bug fixes: XPath, validation, Python bindings, DOM and
+ tree, xmlI/O, Html
+ - Serious rewrite of XInclude
+ - Made XML Schemas regexp part of the default build and APIs, small fix
+ and improvement of the regexp core
+ - Changed the validation code to reuse XML Schemas regexp APIs
+ - Better handling of Windows file paths, improvement of Makefiles (Igor,
+ Daniel Gehriger, Mark Vakoc)
+ - Improved the python I/O bindings, the tests, added resolver and regexp
+ APIs
+ - New logos from Marc Liyanage
+ - Tutorial improvements: John Fleck, Christopher Harris
+ - Makefile: Fixes for AMD x86_64 (Mandrake), DESTDIR (Christophe
+ Merlet)
+ - removal of all stderr/perror use for error reporting
+ - Better error reporting: XPath and DTD validation
+ - update of the trio portability layer (Bjorn Reese)
+
+2.4.24: Aug 22 2002 - XPath fixes (William), xf:escape-uri() (Wesley Terpstra)
+ - Python binding fixes: makefiles (William), generator, rpm build, x86-64
+ (fcrozat)
+ - HTML <style> and boolean attributes serializer fixes
+ - C14N improvements by Aleksey
+ - doc cleanups: Rick Jones
+ - Windows compiler makefile updates: Igor and Elizabeth Barham
+ - XInclude: implementation of fallback and xml:base fixup added
+
+
+2.4.23: July 6 2002:
+ - performances patches: Peter Jacobi
+ - c14n fixes, testsuite and performances: Aleksey Sanin
+ - added xmlDocFormatDump: Chema Celorio
+ - new tutorial: John Fleck
+ - new hash functions and performances: Sander Vesik, portability fix from
+ Peter Jacobi
+ - a number of bug fixes: XPath (William Brack, Richard Jinks), XML and
+ HTML parsers, ID lookup function
+ - removal of all remaining sprintf: Aleksey Sanin
+
+
+2.4.22: May 27 2002:
+ - a number of bug fixes: configure scripts, base handling, parser, memory
+ usage, HTML parser, XPath, documentation (Christian Cornelssen),
+ indentation, URI parsing
+ - Optimizations for XMLSec, fixing and making public some of the network
+ protocol handlers (Aleksey)
+ - performance patch from Gary Pennington
+ - Charles Bozeman provided date and time support for XML Schemas
+ datatypes
+
+
+2.4.21: Apr 29 2002:
+This release is both a bug fix release and also contains the early XML
+Schemas structures at
+http://www.w3.org/TR/xmlschema-1/
+ and datatypes at
+http://www.w3.org/TR/xmlschema-2/
+ code, beware, all
+interfaces are likely to change, there is huge holes, it is clearly a work in
+progress and don't even think of putting this code in a production system,
+it's actually not compiled in by default. The real fixes are: - a couple of bugs or limitations introduced in 2.4.20
+ - patches for Borland C++ and MSC by Igor
+ - some fixes on XPath strings and conformance patches by Richard
+ Jinks
+ - patch from Aleksey for the ExcC14N specification
+ - OSF/1 bug fix by Bjorn
+
+
+2.4.20: Apr 15 2002:
+ - bug fixes: file descriptor leak, XPath, HTML output, DTD validation
+ - XPath conformance testing by Richard Jinks
+ - Portability fixes: Solaris, MPE/iX, Windows, OSF/1, python bindings,
+ libxml.m4
+
+
+2.4.19: Mar 25 2002:
+ - bug fixes: half a dozen XPath bugs, Validation, ISO-Latin to UTF8
+ encoder
+ - portability fixes in the HTTP code
+ - memory allocation checks using valgrind, and profiling tests
+ - revamp of the Windows build and Makefiles
+
+
+2.4.18: Mar 18 2002:
+ - bug fixes: tree, SAX, canonicalization, validation, portability,
+ XPath
+ - removed the --with-buffer option it was becoming unmaintainable
+ - serious cleanup of the Python makefiles
+ - speedup patch to XPath very effective for DocBook stylesheets
+ - Fixes for Windows build, cleanup of the documentation
+
+
+2.4.17: Mar 8 2002:
+ - a lot of bug fixes, including "namespace nodes have no parents in
+ XPath"
+ - fixed/improved the Python wrappers, added more examples and more
+ regression tests, XPath extension functions can now return node-sets
+ - added the XML Canonicalization support from Aleksey Sanin
+
+
+2.4.16: Feb 20 2002:
+ - a lot of bug fixes, most of them were triggered by the XML Testsuite
+ from OASIS and W3C. Compliance has been significantly improved.
+ - a couple of portability fixes too.
+
+
+2.4.15: Feb 11 2002:
+ - Fixed the Makefiles, especially the python module ones
+ - A few bug fixes and cleanup
+ - Includes cleanup
+
+
+2.4.14: Feb 8 2002:
+ - Change of License to the MIT
+ License basically for integration in XFree86 codebase, and removing
+ confusion around the previous dual-licensing
+ - added Python bindings, beta software but should already be quite
+ complete
+ - a large number of fixes and cleanups, especially for all tree
+ manipulations
+ - cleanup of the headers, generation of a reference API definition in
+ XML
+
+
+2.4.13: Jan 14 2002:
+ - update of the documentation: John Fleck and Charlie Bozeman
+ - cleanup of timing code from Justin Fletcher
+ - fixes for Windows and initial thread support on Win32: Igor and Serguei
+ Narojnyi
+ - Cygwin patch from Robert Collins
+ - added xmlSetEntityReferenceFunc() for Keith Isdale work on xsldbg
+
+
+2.4.12: Dec 7 2001:
+ - a few bug fixes: thread (Gary Pennington), xmllint (Geert Kloosterman),
+ XML parser (Robin Berjon), XPointer (Danny Jamshy), I/O cleanups
+ (robert)
+ - Eric Lavigne contributed project files for MacOS
+ - some makefiles cleanups
+
+
+2.4.11: Nov 26 2001:
+ - fixed a couple of errors in the includes, fixed a few bugs, some code
+ cleanups
+ - xmllint man pages improvement by Heiko Rupp
+ - updated VMS build instructions from John A Fotheringham
+ - Windows Makefiles updates from Igor
+
+
+2.4.10: Nov 10 2001:
+ - URI escaping fix (Joel Young)
+ - added xmlGetNodePath() (for paths or XPointers generation)
+ - Fixes namespace handling problems when using DTD and validation
+ - improvements on xmllint: Morus Walter patches for --format and
+ --encode, Stefan Kost and Heiko Rupp improvements on the --shell
+ - fixes for xmlcatalog linking pointed by Weiqi Gao
+ - fixes to the HTML parser
+
+
+2.4.9: Nov 6 2001:
+ - fixes more catalog bugs
+ - avoid a compilation problem, improve xmlGetLineNo()
+
+
+2.4.8: Nov 4 2001:
+ - fixed SGML catalogs broken in previous release, updated xmlcatalog
+ tool
+ - fixed a compile errors and some includes troubles.
+
+
+2.4.7: Oct 30 2001:
+ - exported some debugging interfaces
+ - serious rewrite of the catalog code
+ - integrated Gary Pennington thread safety patch, added configure option
+ and regression tests
+ - removed an HTML parser bug
+ - fixed a couple of potentially serious validation bugs
+ - integrated the SGML DocBook support in xmllint
+ - changed the nanoftp anonymous login passwd
+ - some I/O cleanup and a couple of interfaces for Perl wrapper
+ - general bug fixes
+ - updated xmllint man page by John Fleck
+ - some VMS and Windows updates
+
+
+2.4.6: Oct 10 2001:
+ - added an updated man pages by John Fleck
+ - portability and configure fixes
+ - an infinite loop on the HTML parser was removed (William)
+ - Windows makefile patches from Igor
+ - fixed half a dozen bugs reported for libxml or libxslt
+ - updated xmlcatalog to be able to modify SGML super catalogs
+
+
+2.4.5: Sep 14 2001:
+ - Remove a few annoying bugs in 2.4.4
+ - forces the HTML serializer to output decimal charrefs since some
+ version of Netscape can't handle hexadecimal ones
+
+
+1.8.16: Sep 14 2001:
+ - maintenance release of the old libxml1 branch, couple of bug and
+ portability fixes
+
+
+2.4.4: Sep 12 2001:
+ - added --convert to xmlcatalog, bug fixes and cleanups of XML
+ Catalog
+ - a few bug fixes and some portability changes
+ - some documentation cleanups
+
+
+2.4.3: Aug 23 2001:
+ - XML Catalog support see the doc
+ - New NaN/Infinity floating point code
+ - A few bug fixes
+
+
+2.4.2: Aug 15 2001:
+ - adds xmlLineNumbersDefault() to control line number generation
+ - lot of bug fixes
+ - the Microsoft MSC projects files should now be up to date
+ - inheritance of namespaces from DTD defaulted attributes
+ - fixes a serious potential security bug
+ - added a --format option to xmllint
+
+
+2.4.1: July 24 2001:
+ - possibility to keep line numbers in the tree
+ - some computation NaN fixes
+ - extension of the XPath API
+ - cleanup for alpha and ia64 targets
+ - patch to allow saving through HTTP PUT or POST
+
+
+2.4.0: July 10 2001:
+ - Fixed a few bugs in XPath, validation, and tree handling.
+ - Fixed XML Base implementation, added a couple of examples to the
+ regression tests
+ - A bit of cleanup
+
+
+2.3.14: July 5 2001:
+ - fixed some entities problems and reduce memory requirement when
+ substituting them
+ - lots of improvements in the XPath queries interpreter can be
+ substantially faster
+ - Makefiles and configure cleanups
+ - Fixes to XPath variable eval, and compare on empty node set
+ - HTML tag closing bug fixed
+ - Fixed an URI reference computation problem when validating
+
+
+2.3.13: June 28 2001:
+ - 2.3.12 configure.in was broken as well as the push mode XML parser
+ - a few more fixes for compilation on Windows MSC by Yon Derek
+
+
+1.8.14: June 28 2001:
+ - Zbigniew Chyla gave a patch to use the old XML parser in push mode
+ - Small Makefile fix
+
+
+2.3.12: June 26 2001:
+ - lots of cleanup
+ - a couple of validation fix
+ - fixed line number counting
+ - fixed serious problems in the XInclude processing
+ - added support for UTF8 BOM at beginning of entities
+ - fixed a strange gcc optimizer bugs in xpath handling of float, gcc-3.0
+ miscompile uri.c (William), Thomas Leitner provided a fix for the
+ optimizer on Tru64
+ - incorporated Yon Derek and Igor Zlatkovic fixes and improvements for
+ compilation on Windows MSC
+ - update of libxml-doc.el (Felix Natter)
+ - fixed 2 bugs in URI normalization code
+
+
+2.3.11: June 17 2001:
+ - updates to trio, Makefiles and configure should fix some portability
+ problems (alpha)
+ - fixed some HTML serialization problems (pre, script, and block/inline
+ handling), added encoding aware APIs, cleanup of this code
+ - added xmlHasNsProp()
+ - implemented a specific PI for encoding support in the DocBook SGML
+ parser
+ - some XPath fixes (-Infinity, / as a function parameter and namespaces
+ node selection)
+ - fixed a performance problem and an error in the validation code
+ - fixed XInclude routine to implement the recursive behaviour
+ - fixed xmlFreeNode problem when libxml is included statically twice
+ - added --version to xmllint for bug reports
+
+
+2.3.10: June 1 2001:
+ - fixed the SGML catalog support
+ - a number of reported bugs got fixed, in XPath, iconv detection,
+ XInclude processing
+ - XPath string function should now handle unicode correctly
+
+
+2.3.9: May 19 2001:
+Lots of bugfixes, and added a basic SGML catalog support: - HTML push bugfix #54891 and another patch from Jonas Borgström
+ - some serious speed optimization again
+ - some documentation cleanups
+ - trying to get better linking on Solaris (-R)
+ - XPath API cleanup from Thomas Broyer
+ - Validation bug fixed #54631, added a patch from Gary Pennington, fixed
+ xmlValidGetValidElements()
+ - Added an INSTALL file
+ - Attribute removal added to API: #54433
+ - added a basic support for SGML catalogs
+ - fixed xmlKeepBlanksDefault(0) API
+ - bugfix in xmlNodeGetLang()
+ - fixed a small configure portability problem
+ - fixed an inversion of SYSTEM and PUBLIC identifier in HTML document
+
+
+1.8.13: May 14 2001:
+ - bugfixes release of the old libxml1 branch used by Gnome
+
+
+2.3.8: May 3 2001:
+ - Integrated an SGML DocBook parser for the Gnome project
+ - Fixed a few things in the HTML parser
+ - Fixed some XPath bugs raised by XSLT use, tried to fix the floating
+ point portability issue
+ - Speed improvement (8M/s for SAX, 3M/s for DOM, 1.5M/s for
+ DOM+validation using the XML REC as input and a 700MHz celeron).
+ - incorporated more Windows cleanup
+ - added xmlSaveFormatFile()
+ - fixed problems in copying nodes with entities references (gdome)
+ - removed some troubles surrounding the new validation module
+
+
+2.3.7: April 22 2001:
+ - lots of small bug fixes, corrected XPointer
+ - Non deterministic content model validation support
+ - added xmlDocCopyNode for gdome2
+ - revamped the way the HTML parser handles end of tags
+ - XPath: corrections of namespaces support and number formatting
+ - Windows: Igor Zlatkovic patches for MSC compilation
+ - HTML output fixes from P C Chow and William M. Brack
+ - Improved validation speed sensible for DocBook
+ - fixed a big bug with ID declared in external parsed entities
+ - portability fixes, update of Trio from Bjorn Reese
+
+
+2.3.6: April 8 2001:
+ - Code cleanup using extreme gcc compiler warning options, found and
+ cleared half a dozen potential problem
+ - the Eazel team found an XML parser bug
+ - cleaned up the user of some of the string formatting function. used the
+ trio library code to provide the one needed when the platform is missing
+ them
+ - xpath: removed a memory leak and fixed the predicate evaluation
+ problem, extended the testsuite and cleaned up the result. XPointer seems
+ broken ...
+
+
+2.3.5: Mar 23 2001:
+ - Biggest change is separate parsing and evaluation of XPath expressions,
+ there is some new APIs for this too
+ - included a number of bug fixes(XML push parser, 51876, notations,
+ 52299)
+ - Fixed some portability issues
+
+
+2.3.4: Mar 10 2001:
+ - Fixed bugs #51860 and #51861
+ - Added a global variable xmlDefaultBufferSize to allow default buffer
+ size to be application tunable.
+ - Some cleanup in the validation code, still a bug left and this part
+ should probably be rewritten to support ambiguous content model :-\
+ - Fix a couple of serious bugs introduced or raised by changes in 2.3.3
+ parser
+ - Fixed another bug in xmlNodeGetContent()
+ - Bjorn fixed XPath node collection and Number formatting
+ - Fixed a loop reported in the HTML parsing
+ - blank space are reported even if the Dtd content model proves that they
+ are formatting spaces, this is for XML conformance
+
+
+2.3.3: Mar 1 2001:
+ - small change in XPath for XSLT
+ - documentation cleanups
+ - fix in validation by Gary Pennington
+ - serious parsing performances improvements
+
+
+2.3.2: Feb 24 2001:
+ - chasing XPath bugs, found a bunch, completed some TODO
+ - fixed a Dtd parsing bug
+ - fixed a bug in xmlNodeGetContent
+ - ID/IDREF support partly rewritten by Gary Pennington
+
+
+2.3.1: Feb 15 2001:
+ - some XPath and HTML bug fixes for XSLT
+ - small extension of the hash table interfaces for DOM gdome2
+ implementation
+ - A few bug fixes
+
+
+2.3.0: Feb 8 2001 (2.2.12 was on 25 Jan but I didn't kept track):
+ - Lots of XPath bug fixes
+ - Add a mode with Dtd lookup but without validation error reporting for
+ XSLT
+ - Add support for text node without escaping (XSLT)
+ - bug fixes for xmlCheckFilename
+ - validation code bug fixes from Gary Pennington
+ - Patch from Paul D. Smith correcting URI path normalization
+ - Patch to allow simultaneous install of libxml-devel and
+ libxml2-devel
+ - the example Makefile is now fixed
+ - added HTML to the RPM packages
+ - tree copying bugfixes
+ - updates to Windows makefiles
+ - optimization patch from Bjorn Reese
+
+
+2.2.11: Jan 4 2001:
+ - bunch of bug fixes (memory I/O, xpath, ftp/http, ...)
+ - added htmlHandleOmittedElem()
+ - Applied Bjorn Reese's IPV6 first patch
+ - Applied Paul D. Smith patches for validation of XInclude results
+ - added XPointer xmlns() new scheme support
+
+
+2.2.10: Nov 25 2000:
+ - Fix the Windows problems of 2.2.8
+ - integrate OpenVMS patches
+ - better handling of some nasty HTML input
+ - Improved the XPointer implementation
+ - integrate a number of provided patches
+
+
+2.2.9: Nov 25 2000:
+ - erroneous release :-(
+
+
+2.2.8: Nov 13 2000:
+ - First version of XInclude
+ support
+ - Patch in conditional section handling
+ - updated MS compiler project
+ - fixed some XPath problems
+ - added an URI escaping function
+ - some other bug fixes
+
+
+2.2.7: Oct 31 2000:
+ - added message redirection
+ - XPath improvements (thanks TOM !)
+ - xmlIOParseDTD() added
+ - various small fixes in the HTML, URI, HTTP and XPointer support
+ - some cleanup of the Makefile, autoconf and the distribution content
+
+
+2.2.6: Oct 25 2000::
+ - Added an hash table module, migrated a number of internal structure to
+ those
+ - Fixed a posteriori validation problems
+ - HTTP module cleanups
+ - HTML parser improvements (tag errors, script/style handling, attribute
+ normalization)
+ - coalescing of adjacent text nodes
+ - couple of XPath bug fixes, exported the internal API
+
+
+2.2.5: Oct 15 2000::
+ - XPointer implementation and testsuite
+ - Lot of XPath fixes, added variable and functions registration, more
+ tests
+ - Portability fixes, lots of enhancements toward an easy Windows build
+ and release
+ - Late validation fixes
+ - Integrated a lot of contributed patches
+ - added memory management docs
+ - a performance problem when using large buffer seems fixed
+
+
+2.2.4: Oct 1 2000::
+ - main XPath problem fixed
+ - Integrated portability patches for Windows
+ - Serious bug fixes on the URI and HTML code
+
+
+2.2.3: Sep 17 2000:
+ - bug fixes
+ - cleanup of entity handling code
+ - overall review of all loops in the parsers, all sprintf usage has been
+ checked too
+ - Far better handling of larges Dtd. Validating against DocBook XML Dtd
+ works smoothly now.
+
+
+1.8.10: Sep 6 2000:
+ - bug fix release for some Gnome projects
+
+
+2.2.2: August 12 2000:
+ - mostly bug fixes
+ - started adding routines to access xml parser context options
+
+
+2.2.1: July 21 2000:
+ - a purely bug fixes release
+ - fixed an encoding support problem when parsing from a memory block
+ - fixed a DOCTYPE parsing problem
+ - removed a bug in the function allowing to override the memory
+ allocation routines
+
+
+2.2.0: July 14 2000:
+ - applied a lot of portability fixes
+ - better encoding support/cleanup and saving (content is now always
+ encoded in UTF-8)
+ - the HTML parser now correctly handles encodings
+ - added xmlHasProp()
+ - fixed a serious problem with &#38;
+ - propagated the fix to FTP client
+ - cleanup, bugfixes, etc ...
+ - Added a page about libxml Internationalization
+ support
+
+
+1.8.9: July 9 2000:
+ - fixed the spec the RPMs should be better
+ - fixed a serious bug in the FTP implementation, released 1.8.9 to solve
+ rpmfind users problem
+
+
+2.1.1: July 1 2000:
+ - fixes a couple of bugs in the 2.1.0 packaging
+ - improvements on the HTML parser
+
+
+2.1.0 and 1.8.8: June 29 2000:
+ - 1.8.8 is mostly a commodity package for upgrading to libxml2 according
+ to new instructions. It fixes a nasty problem
+ about &#38; charref parsing
+ - 2.1.0 also ease the upgrade from libxml v1 to the recent version. it
+ also contains numerous fixes and enhancements:
+ added xmlStopParser() to stop parsing
+ improved a lot parsing speed when there is large CDATA blocs
+ includes XPath patches provided by Picdar Technology
+ tried to fix as much as possible DTD validation and namespace
+ related problems
+ output to a given encoding has been added/tested
+ lot of various fixes
+
+ - added xmlStopParser() to stop parsing
+ - improved a lot parsing speed when there is large CDATA blocs
+ - includes XPath patches provided by Picdar Technology
+ - tried to fix as much as possible DTD validation and namespace
+ related problems
+ - output to a given encoding has been added/tested
+ - lot of various fixes
+
+
+2.0.0: Apr 12 2000:
+ - First public release of libxml2. If you are using libxml, it's a good
+ idea to check the 1.x to 2.x upgrade instructions. NOTE: while initially
+ scheduled for Apr 3 the release occurred only on Apr 12 due to massive
+ workload.
+ - The include are now located under $prefix/include/libxml (instead of
+ $prefix/include/gnome-xml), they also are referenced by
+ #include <libxml/xxx.h>
+ instead of
+ #include "xxx.h"
+
+ - a new URI module for parsing URIs and following strictly RFC 2396
+ - the memory allocation routines used by libxml can now be overloaded
+ dynamically by using xmlMemSetup()
+ - The previously CVS only tool tester has been renamed
+ xmllint and is now installed as part of the libxml2
+ package
+ - The I/O interface has been revamped. There is now ways to plug in
+ specific I/O modules, either at the URI scheme detection level using
+ xmlRegisterInputCallbacks() or by passing I/O functions when creating a
+ parser context using xmlCreateIOParserCtxt()
+ - there is a C preprocessor macro LIBXML_VERSION providing the version
+ number of the libxml module in use
+ - a number of optional features of libxml can now be excluded at
+ configure time (FTP/HTTP/HTML/XPath/Debug)
+
+
+2.0.0beta: Mar 14 2000:
+ - This is a first Beta release of libxml version 2
+ - It's available only fromxmlsoft.org
+ FTP, it's packaged as libxml2-2.0.0beta and available as tar and
+ RPMs
+ - This version is now the head in the Gnome CVS base, the old one is
+ available under the tag LIB_XML_1_X
+ - This includes a very large set of changes. From a programmatic point
+ of view applications should not have to be modified too much, check the
+ upgrade page
+ - Some interfaces may changes (especially a bit about encoding).
+ - the updates includes:
+ fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
+ handled now
+ Better handling of entities, especially well-formedness checking
+ and proper PEref extensions in external subsets
+ DTD conditional sections
+ Validation now correctly handle entities content
+ change
+ structures to accommodate DOM
+
+ - fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
+ handled now
+ - Better handling of entities, especially well-formedness checking
+ and proper PEref extensions in external subsets
+ - DTD conditional sections
+ - Validation now correctly handle entities content
+ - change
+ structures to accommodate DOM
+ - Serious progress were made toward compliance, here are the result of the test against the
+ OASIS testsuite (except the Japanese tests since I don't support that
+ encoding yet). This URL is rebuilt every couple of hours using the CVS
+ head version.
+
+
+1.8.7: Mar 6 2000:
+ - This is a bug fix release:
+ - It is possible to disable the ignorable blanks heuristic used by
+ libxml-1.x, a new function xmlKeepBlanksDefault(0) will allow this. Note
+ that for adherence to XML spec, this behaviour will be disabled by
+ default in 2.x . The same function will allow to keep compatibility for
+ old code.
+ - Blanks in <a> </a> constructs are not ignored anymore,
+ avoiding heuristic is really the Right Way :-\
+ - The unchecked use of snprintf which was breaking libxml-1.8.6
+ compilation on some platforms has been fixed
+ - nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when processing
+ URIs
+
+
+1.8.6: Jan 31 2000:
+ - added a nanoFTP transport module, debugged until the new version of rpmfind can use
+ it without troubles
+
+
+1.8.5: Jan 21 2000:
+ - adding APIs to parse a well balanced chunk of XML (production [43] content of the
+ XML spec)
+ - fixed a hideous bug in xmlGetProp pointed by Rune.Djurhuus@fast.no
+ - Jody Goldberg <jgoldberg@home.com> provided another patch trying
+ to solve the zlib checks problems
+ - The current state in gnome CVS base is expected to ship as 1.8.5 with
+ gnumeric soon
+
+
+1.8.4: Jan 13 2000:
+ - bug fixes, reintroduced xmlNewGlobalNs(), fixed xmlNewNs()
+ - all exit() call should have been removed from libxml
+ - fixed a problem with INCLUDE_WINSOCK on WIN32 platform
+ - added newDocFragment()
+
+
+1.8.3: Jan 5 2000:
+ - a Push interface for the XML and HTML parsers
+ - a shell-like interface to the document tree (try tester --shell :-)
+ - lots of bug fixes and improvement added over XMas holidays
+ - fixed the DTD parsing code to work with the xhtml DTD
+ - added xmlRemoveProp(), xmlRemoveID() and xmlRemoveRef()
+ - Fixed bugs in xmlNewNs()
+ - External entity loading code has been revamped, now it uses
+ xmlLoadExternalEntity(), some fix on entities processing were added
+ - cleaned up WIN32 includes of socket stuff
+
+
+1.8.2: Dec 21 1999:
+ - I got another problem with includes and C++, I hope this issue is fixed
+ for good this time
+ - Added a few tree modification functions: xmlReplaceNode,
+ xmlAddPrevSibling, xmlAddNextSibling, xmlNodeSetName and
+ xmlDocSetRootElement
+ - Tried to improve the HTML output with help from Chris Lahey
+
+
+1.8.1: Dec 18 1999:
+ - various patches to avoid troubles when using libxml with C++ compilers
+ the "namespace" keyword and C escaping in include files
+ - a problem in one of the core macros IS_CHAR was corrected
+ - fixed a bug introduced in 1.8.0 breaking default namespace processing,
+ and more specifically the Dia application
+ - fixed a posteriori validation (validation after parsing, or by using a
+ Dtd not specified in the original document)
+ - fixed a bug in
+
+
+1.8.0: Dec 12 1999:
+ - cleanup, especially memory wise
+ - the parser should be more reliable, especially the HTML one, it should
+ not crash, whatever the input !
+ - Integrated various patches, especially a speedup improvement for large
+ dataset from Carl Nygard,
+ configure with --with-buffers to enable them.
+ - attribute normalization, oops should have been added long ago !
+ - attributes defaulted from DTDs should be available, xmlSetProp() now
+ does entities escaping by default.
+
+
+1.7.4: Oct 25 1999:
+ - Lots of HTML improvement
+ - Fixed some errors when saving both XML and HTML
+ - More examples, the regression tests should now look clean
+ - Fixed a bug with contiguous charref
+
+
+1.7.3: Sep 29 1999:
+ - portability problems fixed
+ - snprintf was used unconditionally, leading to link problems on system
+ were it's not available, fixed
+
+
+1.7.1: Sep 24 1999:
+ - The basic type for strings manipulated by libxml has been renamed in
+ 1.7.1 from CHAR to xmlChar. The reason
+ is that CHAR was conflicting with a predefined type on Windows. However
+ on non WIN32 environment, compatibility is provided by the way of a
+ #define .
+ - Changed another error : the use of a structure field called errno, and
+ leading to troubles on platforms where it's a macro
+
+
+1.7.0: Sep 23 1999:
+ - Added the ability to fetch remote DTD or parsed entities, see the nanohttp module.
+ - Added an errno to report errors by another mean than a simple printf
+ like callback
+ - Finished ID/IDREF support and checking when validation
+ - Serious memory leaks fixed (there is now a memory wrapper module)
+ - Improvement of XPath
+ implementation
+ - Added an HTML parser front-end
+
+Daniel Veillard at
+bugs.html
diff --git a/README b/README
new file mode 100644
index 0000000..eba4cad
--- /dev/null
+++ b/README
@@ -0,0 +1,24 @@
+
+ XML toolkit from the GNOME project
+
+Full documentation is available on-line at
+ http://xmlsoft.org/
+
+This code is released under the MIT Licence see the Copyright file.
+
+To report bugs, follow the instructions at:
+ http://xmlsoft.org/bugs.html
+
+A mailing-list xml@gnome.org is available, to subscribe:
+ http://mail.gnome.org/mailman/listinfo/xml
+
+The list archive is at:
+ http://mail.gnome.org/archives/xml/
+
+All technical answers asked privately will be automatically answered on
+the list and archived for public access unless pricacy is explicitely
+required and justified.
+
+Daniel Veillard
+
+$Id: README,v 1.11 2003/01/25 18:01:31 veillard Exp $
diff --git a/SAX.c b/SAX.c
new file mode 100644
index 0000000..0ff2017
--- /dev/null
+++ b/SAX.c
@@ -0,0 +1,175 @@
+/*
+ * SAX.c : Old SAX v1 handlers to build a tree.
+ * Deprecated except for compatibility
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <daniel@veillard.com>
+ */
+
+
+#define IN_LIBXML
+#include "libxml.h"
+#include <stdlib.h>
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/valid.h>
+#include <libxml/entities.h>
+#include <libxml/xmlerror.h>
+#include <libxml/debugXML.h>
+#include <libxml/xmlIO.h>
+#include <libxml/SAX.h>
+#include <libxml/uri.h>
+#include <libxml/valid.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/globals.h>
+#include <libxml/SAX2.h>
+
+#ifdef LIBXML_SAX1_ENABLED
+/**
+ * initxmlDefaultSAXHandler:
+ * @hdlr: the SAX handler
+ * @warning: flag if non-zero sets the handler warning procedure
+ *
+ * Initialize the default XML SAX version 1 handler
+ * DEPRECATED: use xmlSAX2InitDefaultSAXHandler() for the new SAX2 blocks
+ */
+void
+initxmlDefaultSAXHandler(xmlSAXHandlerV1 *hdlr, int warning)
+{
+
+ if(hdlr->initialized == 1)
+ return;
+
+ hdlr->internalSubset = xmlSAX2InternalSubset;
+ hdlr->externalSubset = xmlSAX2ExternalSubset;
+ hdlr->isStandalone = xmlSAX2IsStandalone;
+ hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
+ hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
+ hdlr->resolveEntity = xmlSAX2ResolveEntity;
+ hdlr->getEntity = xmlSAX2GetEntity;
+ hdlr->getParameterEntity = xmlSAX2GetParameterEntity;
+ hdlr->entityDecl = xmlSAX2EntityDecl;
+ hdlr->attributeDecl = xmlSAX2AttributeDecl;
+ hdlr->elementDecl = xmlSAX2ElementDecl;
+ hdlr->notationDecl = xmlSAX2NotationDecl;
+ hdlr->unparsedEntityDecl = xmlSAX2UnparsedEntityDecl;
+ hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
+ hdlr->startDocument = xmlSAX2StartDocument;
+ hdlr->endDocument = xmlSAX2EndDocument;
+ hdlr->startElement = xmlSAX2StartElement;
+ hdlr->endElement = xmlSAX2EndElement;
+ hdlr->reference = xmlSAX2Reference;
+ hdlr->characters = xmlSAX2Characters;
+ hdlr->cdataBlock = xmlSAX2CDataBlock;
+ hdlr->ignorableWhitespace = xmlSAX2Characters;
+ hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
+ if (warning == 0)
+ hdlr->warning = NULL;
+ else
+ hdlr->warning = xmlParserWarning;
+ hdlr->error = xmlParserError;
+ hdlr->fatalError = xmlParserError;
+
+ hdlr->initialized = 1;
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+#ifdef LIBXML_HTML_ENABLED
+
+/**
+ * inithtmlDefaultSAXHandler:
+ * @hdlr: the SAX handler
+ *
+ * Initialize the default HTML SAX version 1 handler
+ * DEPRECATED: use xmlSAX2InitHtmlDefaultSAXHandler() for the new SAX2 blocks
+ */
+void
+inithtmlDefaultSAXHandler(xmlSAXHandlerV1 *hdlr)
+{
+ if(hdlr->initialized == 1)
+ return;
+
+ hdlr->internalSubset = xmlSAX2InternalSubset;
+ hdlr->externalSubset = NULL;
+ hdlr->isStandalone = NULL;
+ hdlr->hasInternalSubset = NULL;
+ hdlr->hasExternalSubset = NULL;
+ hdlr->resolveEntity = NULL;
+ hdlr->getEntity = xmlSAX2GetEntity;
+ hdlr->getParameterEntity = NULL;
+ hdlr->entityDecl = NULL;
+ hdlr->attributeDecl = NULL;
+ hdlr->elementDecl = NULL;
+ hdlr->notationDecl = NULL;
+ hdlr->unparsedEntityDecl = NULL;
+ hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
+ hdlr->startDocument = xmlSAX2StartDocument;
+ hdlr->endDocument = xmlSAX2EndDocument;
+ hdlr->startElement = xmlSAX2StartElement;
+ hdlr->endElement = xmlSAX2EndElement;
+ hdlr->reference = NULL;
+ hdlr->characters = xmlSAX2Characters;
+ hdlr->cdataBlock = xmlSAX2CDataBlock;
+ hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
+ hdlr->processingInstruction = NULL;
+ hdlr->comment = xmlSAX2Comment;
+ hdlr->warning = xmlParserWarning;
+ hdlr->error = xmlParserError;
+ hdlr->fatalError = xmlParserError;
+
+ hdlr->initialized = 1;
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+
+#ifdef LIBXML_DOCB_ENABLED
+
+/**
+ * initdocbDefaultSAXHandler:
+ * @hdlr: the SAX handler
+ *
+ * Initialize the default DocBook SAX version 1 handler
+ * DEPRECATED: use xmlSAX2InitDocbDefaultSAXHandler() for the new SAX2 blocks
+ */
+void
+initdocbDefaultSAXHandler(xmlSAXHandlerV1 *hdlr)
+{
+ if(hdlr->initialized == 1)
+ return;
+
+ hdlr->internalSubset = xmlSAX2InternalSubset;
+ hdlr->externalSubset = NULL;
+ hdlr->isStandalone = xmlSAX2IsStandalone;
+ hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
+ hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
+ hdlr->resolveEntity = xmlSAX2ResolveEntity;
+ hdlr->getEntity = xmlSAX2GetEntity;
+ hdlr->getParameterEntity = NULL;
+ hdlr->entityDecl = xmlSAX2EntityDecl;
+ hdlr->attributeDecl = NULL;
+ hdlr->elementDecl = NULL;
+ hdlr->notationDecl = NULL;
+ hdlr->unparsedEntityDecl = NULL;
+ hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
+ hdlr->startDocument = xmlSAX2StartDocument;
+ hdlr->endDocument = xmlSAX2EndDocument;
+ hdlr->startElement = xmlSAX2StartElement;
+ hdlr->endElement = xmlSAX2EndElement;
+ hdlr->reference = xmlSAX2Reference;
+ hdlr->characters = xmlSAX2Characters;
+ hdlr->cdataBlock = NULL;
+ hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
+ hdlr->processingInstruction = NULL;
+ hdlr->comment = xmlSAX2Comment;
+ hdlr->warning = xmlParserWarning;
+ hdlr->error = xmlParserError;
+ hdlr->fatalError = xmlParserError;
+
+ hdlr->initialized = 1;
+}
+
+#endif /* LIBXML_DOCB_ENABLED */
diff --git a/SAX2.c b/SAX2.c
new file mode 100644
index 0000000..e6e310e
--- /dev/null
+++ b/SAX2.c
@@ -0,0 +1,2697 @@
+/*
+ * SAX2.c : Default SAX2 handler to build a tree.
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <daniel@veillard.com>
+ */
+
+
+#define IN_LIBXML
+#include "libxml.h"
+#include <stdlib.h>
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/valid.h>
+#include <libxml/entities.h>
+#include <libxml/xmlerror.h>
+#include <libxml/debugXML.h>
+#include <libxml/xmlIO.h>
+#include <libxml/SAX.h>
+#include <libxml/uri.h>
+#include <libxml/valid.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/globals.h>
+
+/* #define DEBUG_SAX2 */
+/* #define DEBUG_SAX2_TREE */
+
+/**
+ * TODO:
+ *
+ * macro to flag unimplemented blocks
+ * XML_CATALOG_PREFER user env to select between system/public prefered
+ * option. C.f. Richard Tobin <richard@cogsci.ed.ac.uk>
+ *> Just FYI, I am using an environment variable XML_CATALOG_PREFER with
+ *> values "system" and "public". I have made the default be "system" to
+ *> match yours.
+ */
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+/**
+ * xmlValidError:
+ * @ctxt: an XML validation parser context
+ * @error: the error number
+ * @msg: the error message
+ * @str1: extra data
+ * @str2: extra data
+ *
+ * Handle a validation error
+ */
+static void
+xmlErrValid(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, const char *str1, const char *str2)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
+ schannel = ctxt->sax->serror;
+ __xmlRaiseError(schannel,
+ ctxt->vctxt.error, ctxt->vctxt.userData,
+ ctxt, NULL, XML_FROM_DTD, error,
+ XML_ERR_ERROR, NULL, 0, (const char *) str1,
+ (const char *) str2, NULL, 0, 0,
+ msg, (const char *) str1, (const char *) str2);
+ ctxt->valid = 0;
+}
+
+/**
+ * xmlSAX2GetPublicId:
+ * @ctx: the user data (XML parser context)
+ *
+ * Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"
+ *
+ * Returns a xmlChar *
+ */
+const xmlChar *
+xmlSAX2GetPublicId(void *ctx ATTRIBUTE_UNUSED)
+{
+ /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
+ return(NULL);
+}
+
+/**
+ * xmlSAX2GetSystemId:
+ * @ctx: the user data (XML parser context)
+ *
+ * Provides the system ID, basically URL or filename e.g.
+ * http://www.sgmlsource.com/dtds/memo.dtd
+ *
+ * Returns a xmlChar *
+ */
+const xmlChar *
+xmlSAX2GetSystemId(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ return((const xmlChar *) ctxt->input->filename);
+}
+
+/**
+ * xmlSAX2GetLineNumber:
+ * @ctx: the user data (XML parser context)
+ *
+ * Provide the line number of the current parsing point.
+ *
+ * Returns an int
+ */
+int
+xmlSAX2GetLineNumber(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ return(ctxt->input->line);
+}
+
+/**
+ * xmlSAX2GetColumnNumber:
+ * @ctx: the user data (XML parser context)
+ *
+ * Provide the column number of the current parsing point.
+ *
+ * Returns an int
+ */
+int
+xmlSAX2GetColumnNumber(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ return(ctxt->input->col);
+}
+
+/**
+ * xmlSAX2IsStandalone:
+ * @ctx: the user data (XML parser context)
+ *
+ * Is this document tagged standalone ?
+ *
+ * Returns 1 if true
+ */
+int
+xmlSAX2IsStandalone(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ return(ctxt->myDoc->standalone == 1);
+}
+
+/**
+ * xmlSAX2HasInternalSubset:
+ * @ctx: the user data (XML parser context)
+ *
+ * Does this document has an internal subset
+ *
+ * Returns 1 if true
+ */
+int
+xmlSAX2HasInternalSubset(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ return(ctxt->myDoc->intSubset != NULL);
+}
+
+/**
+ * xmlSAX2HasExternalSubset:
+ * @ctx: the user data (XML parser context)
+ *
+ * Does this document has an external subset
+ *
+ * Returns 1 if true
+ */
+int
+xmlSAX2HasExternalSubset(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ return(ctxt->myDoc->extSubset != NULL);
+}
+
+/**
+ * xmlSAX2InternalSubset:
+ * @ctx: the user data (XML parser context)
+ * @name: the root element name
+ * @ExternalID: the external ID
+ * @SystemID: the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on internal subset declaration.
+ */
+void
+xmlSAX2InternalSubset(void *ctx, const xmlChar *name,
+ const xmlChar *ExternalID, const xmlChar *SystemID)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlDtdPtr dtd;
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2InternalSubset(%s, %s, %s)\n",
+ name, ExternalID, SystemID);
+#endif
+
+ if (ctxt->myDoc == NULL)
+ return;
+ dtd = xmlGetIntSubset(ctxt->myDoc);
+ if (dtd != NULL) {
+ if (ctxt->html)
+ return;
+ xmlUnlinkNode((xmlNodePtr) dtd);
+ xmlFreeDtd(dtd);
+ ctxt->myDoc->intSubset = NULL;
+ }
+ ctxt->myDoc->intSubset =
+ xmlCreateIntSubset(ctxt->myDoc, name, ExternalID, SystemID);
+}
+
+/**
+ * xmlSAX2ExternalSubset:
+ * @ctx: the user data (XML parser context)
+ * @name: the root element name
+ * @ExternalID: the external ID
+ * @SystemID: the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on external subset declaration.
+ */
+void
+xmlSAX2ExternalSubset(void *ctx, const xmlChar *name,
+ const xmlChar *ExternalID, const xmlChar *SystemID)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2ExternalSubset(%s, %s, %s)\n",
+ name, ExternalID, SystemID);
+#endif
+ if (((ExternalID != NULL) || (SystemID != NULL)) &&
+ (((ctxt->validate) || (ctxt->loadsubset != 0)) &&
+ (ctxt->wellFormed && ctxt->myDoc))) {
+ /*
+ * Try to fetch and parse the external subset.
+ */
+ xmlParserInputPtr oldinput;
+ int oldinputNr;
+ int oldinputMax;
+ xmlParserInputPtr *oldinputTab;
+ xmlParserInputPtr input = NULL;
+ xmlCharEncoding enc;
+ int oldcharset;
+
+ /*
+ * Ask the Entity resolver to load the damn thing
+ */
+ if ((ctxt->sax != NULL) && (ctxt->sax->resolveEntity != NULL))
+ input = ctxt->sax->resolveEntity(ctxt->userData, ExternalID,
+ SystemID);
+ if (input == NULL) {
+ return;
+ }
+
+ xmlNewDtd(ctxt->myDoc, name, ExternalID, SystemID);
+
+ /*
+ * make sure we won't destroy the main document context
+ */
+ oldinput = ctxt->input;
+ oldinputNr = ctxt->inputNr;
+ oldinputMax = ctxt->inputMax;
+ oldinputTab = ctxt->inputTab;
+ oldcharset = ctxt->charset;
+
+ ctxt->inputTab = (xmlParserInputPtr *)
+ xmlMalloc(5 * sizeof(xmlParserInputPtr));
+ if (ctxt->inputTab == NULL) {
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "xmlSAX2ExternalSubset: out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ ctxt->input = oldinput;
+ ctxt->inputNr = oldinputNr;
+ ctxt->inputMax = oldinputMax;
+ ctxt->inputTab = oldinputTab;
+ ctxt->charset = oldcharset;
+ return;
+ }
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 5;
+ ctxt->input = NULL;
+ xmlPushInput(ctxt, input);
+
+ /*
+ * On the fly encoding conversion if needed
+ */
+ if (ctxt->input->length >= 4) {
+ enc = xmlDetectCharEncoding(ctxt->input->cur, 4);
+ xmlSwitchEncoding(ctxt, enc);
+ }
+
+ if (input->filename == NULL)
+ input->filename = (char *) xmlCanonicPath(SystemID);
+ input->line = 1;
+ input->col = 1;
+ input->base = ctxt->input->cur;
+ input->cur = ctxt->input->cur;
+ input->free = NULL;
+
+ /*
+ * let's parse that entity knowing it's an external subset.
+ */
+ xmlParseExternalSubset(ctxt, ExternalID, SystemID);
+
+ /*
+ * Free up the external entities
+ */
+
+ while (ctxt->inputNr > 1)
+ xmlPopInput(ctxt);
+ xmlFreeInputStream(ctxt->input);
+ xmlFree(ctxt->inputTab);
+
+ /*
+ * Restore the parsing context of the main entity
+ */
+ ctxt->input = oldinput;
+ ctxt->inputNr = oldinputNr;
+ ctxt->inputMax = oldinputMax;
+ ctxt->inputTab = oldinputTab;
+ ctxt->charset = oldcharset;
+ /* ctxt->wellFormed = oldwellFormed; */
+ }
+}
+
+/**
+ * xmlSAX2ResolveEntity:
+ * @ctx: the user data (XML parser context)
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * The entity loader, to control the loading of external entities,
+ * the application can either:
+ * - override this xmlSAX2ResolveEntity() callback in the SAX block
+ * - or better use the xmlSetExternalEntityLoader() function to
+ * set up it's own entity resolution routine
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+xmlParserInputPtr
+xmlSAX2ResolveEntity(void *ctx, const xmlChar *publicId, const xmlChar *systemId)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserInputPtr ret;
+ xmlChar *URI;
+ const char *base = NULL;
+
+ if (ctxt->input != NULL)
+ base = ctxt->input->filename;
+ if (base == NULL)
+ base = ctxt->directory;
+
+ URI = xmlBuildURI(systemId, (const xmlChar *) base);
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2ResolveEntity(%s, %s)\n", publicId, systemId);
+#endif
+
+ ret = xmlLoadExternalEntity((const char *) URI,
+ (const char *) publicId, ctxt);
+ if (URI != NULL)
+ xmlFree(URI);
+ return(ret);
+}
+
+/**
+ * xmlSAX2GetEntity:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get an entity by name
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+xmlEntityPtr
+xmlSAX2GetEntity(void *ctx, const xmlChar *name)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlEntityPtr ret = NULL;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2GetEntity(%s)\n", name);
+#endif
+
+ if (ctxt->inSubset == 0) {
+ ret = xmlGetPredefinedEntity(name);
+ if (ret != NULL)
+ return(ret);
+ }
+ if ((ctxt->myDoc != NULL) && (ctxt->myDoc->standalone == 1)) {
+ if (ctxt->inSubset == 2) {
+ ctxt->myDoc->standalone = 0;
+ ret = xmlGetDocEntity(ctxt->myDoc, name);
+ ctxt->myDoc->standalone = 1;
+ } else {
+ ret = xmlGetDocEntity(ctxt->myDoc, name);
+ if (ret == NULL) {
+ ctxt->myDoc->standalone = 0;
+ ret = xmlGetDocEntity(ctxt->myDoc, name);
+ if (ret != NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "Entity(%s) document marked standalone but requires external subset\n",
+ name);
+ ctxt->valid = 0;
+ ctxt->wellFormed = 0;
+ }
+ ctxt->myDoc->standalone = 1;
+ }
+ }
+ } else {
+ ret = xmlGetDocEntity(ctxt->myDoc, name);
+ }
+ if ((ret != NULL) &&
+ ((ctxt->validate) || (ctxt->replaceEntities)) &&
+ (ret->children == NULL) &&
+ (ret->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) {
+ int val;
+
+ /*
+ * for validation purposes we really need to fetch and
+ * parse the external entity
+ */
+ xmlNodePtr children;
+
+ val = xmlParseCtxtExternalEntity(ctxt, ret->URI,
+ ret->ExternalID, &children);
+ if (val == 0) {
+ xmlAddChildList((xmlNodePtr) ret, children);
+ } else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "Failure to process entity %s\n", name);
+ ctxt->wellFormed = 0;
+ ctxt->valid = 0;
+ ctxt->validate = 0;
+ return(NULL);
+ }
+ ret->owner = 1;
+ }
+ return(ret);
+}
+
+/**
+ * xmlSAX2GetParameterEntity:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get a parameter entity by name
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+xmlEntityPtr
+xmlSAX2GetParameterEntity(void *ctx, const xmlChar *name)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlEntityPtr ret;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2GetParameterEntity(%s)\n", name);
+#endif
+
+ ret = xmlGetParameterEntity(ctxt->myDoc, name);
+ return(ret);
+}
+
+
+/**
+ * xmlSAX2EntityDecl:
+ * @ctx: the user data (XML parser context)
+ * @name: the entity name
+ * @type: the entity type
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @content: the entity value (without processing).
+ *
+ * An entity definition has been parsed
+ */
+void
+xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type,
+ const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
+{
+ xmlEntityPtr ent;
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2EntityDecl(%s, %d, %s, %s, %s)\n",
+ name, type, publicId, systemId, content);
+#endif
+ if (ctxt->inSubset == 1) {
+ ent = xmlAddDocEntity(ctxt->myDoc, name, type, publicId,
+ systemId, content);
+ if ((ent == NULL) && (ctxt->pedantic) &&
+ (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "Entity(%s) already defined in the internal subset\n", name);
+ if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
+ xmlChar *URI;
+ const char *base = NULL;
+
+ if (ctxt->input != NULL)
+ base = ctxt->input->filename;
+ if (base == NULL)
+ base = ctxt->directory;
+
+ URI = xmlBuildURI(systemId, (const xmlChar *) base);
+ ent->URI = URI;
+ }
+ } else if (ctxt->inSubset == 2) {
+ ent = xmlAddDtdEntity(ctxt->myDoc, name, type, publicId,
+ systemId, content);
+ if ((ent == NULL) && (ctxt->pedantic) &&
+ (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "Entity(%s) already defined in the external subset\n", name);
+ if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
+ xmlChar *URI;
+ const char *base = NULL;
+
+ if (ctxt->input != NULL)
+ base = ctxt->input->filename;
+ if (base == NULL)
+ base = ctxt->directory;
+
+ URI = xmlBuildURI(systemId, (const xmlChar *) base);
+ ent->URI = URI;
+ }
+ } else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2EntityDecl(%s) called while not in subset\n", name);
+ }
+}
+
+/**
+ * xmlSAX2AttributeDecl:
+ * @ctx: the user data (XML parser context)
+ * @elem: the name of the element
+ * @fullname: the attribute name
+ * @type: the attribute type
+ * @def: the type of default value
+ * @defaultValue: the attribute default value
+ * @tree: the tree of enumerated value set
+ *
+ * An attribute definition has been parsed
+ */
+void
+xmlSAX2AttributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname,
+ int type, int def, const xmlChar *defaultValue,
+ xmlEnumerationPtr tree)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlAttributePtr attr;
+ xmlChar *name = NULL, *prefix = NULL;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2AttributeDecl(%s, %s, %d, %d, %s, ...)\n",
+ elem, fullname, type, def, defaultValue);
+#endif
+ /* TODO: optimize name/prefix allocation */
+ name = xmlSplitQName(ctxt, fullname, &prefix);
+ ctxt->vctxt.valid = 1;
+ if (ctxt->inSubset == 1)
+ attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->intSubset, elem,
+ name, prefix, (xmlAttributeType) type,
+ (xmlAttributeDefault) def, defaultValue, tree);
+ else if (ctxt->inSubset == 2)
+ attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->extSubset, elem,
+ name, prefix, (xmlAttributeType) type,
+ (xmlAttributeDefault) def, defaultValue, tree);
+ else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2AttributeDecl(%s) called while not in subset\n", name);
+ xmlFreeEnumeration(tree);
+ return;
+ }
+#ifdef LIBXML_VALID_ENABLED
+ if (ctxt->vctxt.valid == 0)
+ ctxt->valid = 0;
+ if ((attr != NULL) && (ctxt->validate) && (ctxt->wellFormed) &&
+ (ctxt->myDoc != NULL) && (ctxt->myDoc->intSubset != NULL))
+ ctxt->valid &= xmlValidateAttributeDecl(&ctxt->vctxt, ctxt->myDoc,
+ attr);
+#endif /* LIBXML_VALID_ENABLED */
+ if (prefix != NULL)
+ xmlFree(prefix);
+ if (name != NULL)
+ xmlFree(name);
+}
+
+/**
+ * xmlSAX2ElementDecl:
+ * @ctx: the user data (XML parser context)
+ * @name: the element name
+ * @type: the element type
+ * @content: the element value tree
+ *
+ * An element definition has been parsed
+ */
+void
+xmlSAX2ElementDecl(void *ctx, const xmlChar * name, int type,
+ xmlElementContentPtr content)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlElementPtr elem = NULL;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2ElementDecl(%s, %d, ...)\n", name, type);
+#endif
+
+ if (ctxt->inSubset == 1)
+ elem = xmlAddElementDecl(&ctxt->vctxt, ctxt->myDoc->intSubset,
+ name, (xmlElementTypeVal) type, content);
+ else if (ctxt->inSubset == 2)
+ elem = xmlAddElementDecl(&ctxt->vctxt, ctxt->myDoc->extSubset,
+ name, (xmlElementTypeVal) type, content);
+ else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2ElementDecl(%s) called while not in subset\n",
+ name);
+ return;
+ }
+#ifdef LIBXML_VALID_ENABLED
+ if (elem == NULL)
+ ctxt->valid = 0;
+ if (ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset)
+ ctxt->valid &=
+ xmlValidateElementDecl(&ctxt->vctxt, ctxt->myDoc, elem);
+#endif /* LIBXML_VALID_ENABLED */
+}
+
+/**
+ * xmlSAX2NotationDecl:
+ * @ctx: the user data (XML parser context)
+ * @name: The name of the notation
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * What to do when a notation declaration has been parsed.
+ */
+void
+xmlSAX2NotationDecl(void *ctx, const xmlChar *name,
+ const xmlChar *publicId, const xmlChar *systemId)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlNotationPtr nota = NULL;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2NotationDecl(%s, %s, %s)\n", name, publicId, systemId);
+#endif
+
+ if ((publicId == NULL) && (systemId == NULL)) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2NotationDecl(%s) externalID or PublicID missing\n", name);
+ ctxt->valid = 0;
+ ctxt->wellFormed = 0;
+ return;
+ } else if (ctxt->inSubset == 1)
+ nota = xmlAddNotationDecl(&ctxt->vctxt, ctxt->myDoc->intSubset, name,
+ publicId, systemId);
+ else if (ctxt->inSubset == 2)
+ nota = xmlAddNotationDecl(&ctxt->vctxt, ctxt->myDoc->extSubset, name,
+ publicId, systemId);
+ else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2NotationDecl(%s) called while not in subset\n", name);
+ return;
+ }
+#ifdef LIBXML_VALID_ENABLED
+ if (nota == NULL) ctxt->valid = 0;
+ if (ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset)
+ ctxt->valid &= xmlValidateNotationDecl(&ctxt->vctxt, ctxt->myDoc,
+ nota);
+#endif /* LIBXML_VALID_ENABLED */
+}
+
+/**
+ * xmlSAX2UnparsedEntityDecl:
+ * @ctx: the user data (XML parser context)
+ * @name: The name of the entity
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @notationName: the name of the notation
+ *
+ * What to do when an unparsed entity declaration is parsed
+ */
+void
+xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name,
+ const xmlChar *publicId, const xmlChar *systemId,
+ const xmlChar *notationName)
+{
+ xmlEntityPtr ent;
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2UnparsedEntityDecl(%s, %s, %s, %s)\n",
+ name, publicId, systemId, notationName);
+#endif
+ if (ctxt->inSubset == 1) {
+ ent = xmlAddDocEntity(ctxt->myDoc, name,
+ XML_EXTERNAL_GENERAL_UNPARSED_ENTITY,
+ publicId, systemId, notationName);
+ if ((ent == NULL) && (ctxt->pedantic) &&
+ (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "Entity(%s) already defined in the internal subset\n", name);
+ if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
+ xmlChar *URI;
+ const char *base = NULL;
+
+ if (ctxt->input != NULL)
+ base = ctxt->input->filename;
+ if (base == NULL)
+ base = ctxt->directory;
+
+ URI = xmlBuildURI(systemId, (const xmlChar *) base);
+ ent->URI = URI;
+ }
+ } else if (ctxt->inSubset == 2) {
+ ent = xmlAddDtdEntity(ctxt->myDoc, name,
+ XML_EXTERNAL_GENERAL_UNPARSED_ENTITY,
+ publicId, systemId, notationName);
+ if ((ent == NULL) && (ctxt->pedantic) &&
+ (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "Entity(%s) already defined in the external subset\n", name);
+ if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
+ xmlChar *URI;
+ const char *base = NULL;
+
+ if (ctxt->input != NULL)
+ base = ctxt->input->filename;
+ if (base == NULL)
+ base = ctxt->directory;
+
+ URI = xmlBuildURI(systemId, (const xmlChar *) base);
+ ent->URI = URI;
+ }
+ } else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2UnparsedEntityDecl(%s) called while not in subset\n", name);
+ }
+}
+
+/**
+ * xmlSAX2SetDocumentLocator:
+ * @ctx: the user data (XML parser context)
+ * @loc: A SAX Locator
+ *
+ * Receive the document locator at startup, actually xmlDefaultSAXLocator
+ * Everything is available on the context, so this is useless in our case.
+ */
+void
+xmlSAX2SetDocumentLocator(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
+{
+ /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2SetDocumentLocator()\n");
+#endif
+}
+
+/**
+ * xmlSAX2StartDocument:
+ * @ctx: the user data (XML parser context)
+ *
+ * called when the document start being processed.
+ */
+void
+xmlSAX2StartDocument(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlDocPtr doc;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2StartDocument()\n");
+#endif
+ if (ctxt->html) {
+#ifdef LIBXML_HTML_ENABLED
+ if (ctxt->myDoc == NULL)
+ ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL);
+ if (ctxt->myDoc == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2StartDocument(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+ }
+#else
+ xmlGenericError(xmlGenericErrorContext,
+ "libxml2 built without HTML support\n");
+ ctxt->errNo = XML_ERR_INTERNAL_ERROR;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+#endif
+ } else {
+ doc = ctxt->myDoc = xmlNewDoc(ctxt->version);
+ if (doc != NULL) {
+ if (ctxt->encoding != NULL)
+ doc->encoding = xmlStrdup(ctxt->encoding);
+ else
+ doc->encoding = NULL;
+ doc->standalone = ctxt->standalone;
+ } else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2StartDocument(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+ }
+ if ((ctxt->dictNames) && (doc != NULL)) {
+ doc->dict = ctxt->dict;
+ xmlDictReference(doc->dict);
+ }
+ }
+ if ((ctxt->myDoc != NULL) && (ctxt->myDoc->URL == NULL) &&
+ (ctxt->input != NULL) && (ctxt->input->filename != NULL)) {
+ ctxt->myDoc->URL = xmlCanonicPath((const xmlChar *) ctxt->input->filename);
+ if (ctxt->myDoc->URL == NULL)
+ ctxt->myDoc->URL = xmlStrdup((const xmlChar *) ctxt->input->filename);
+ }
+}
+
+/**
+ * xmlSAX2EndDocument:
+ * @ctx: the user data (XML parser context)
+ *
+ * called when the document end has been detected.
+ */
+void
+xmlSAX2EndDocument(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2EndDocument()\n");
+#endif
+#ifdef LIBXML_VALID_ENABLED
+ if (ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset)
+ ctxt->valid &= xmlValidateDocumentFinal(&ctxt->vctxt, ctxt->myDoc);
+#endif /* LIBXML_VALID_ENABLED */
+
+ /*
+ * Grab the encoding if it was added on-the-fly
+ */
+ if ((ctxt->encoding != NULL) && (ctxt->myDoc != NULL) &&
+ (ctxt->myDoc->encoding == NULL)) {
+ ctxt->myDoc->encoding = ctxt->encoding;
+ ctxt->encoding = NULL;
+ }
+ if ((ctxt->inputTab[0]->encoding != NULL) && (ctxt->myDoc != NULL) &&
+ (ctxt->myDoc->encoding == NULL)) {
+ ctxt->myDoc->encoding = xmlStrdup(ctxt->inputTab[0]->encoding);
+ }
+ if ((ctxt->charset != XML_CHAR_ENCODING_NONE) && (ctxt->myDoc != NULL) &&
+ (ctxt->myDoc->charset == XML_CHAR_ENCODING_NONE)) {
+ ctxt->myDoc->charset = ctxt->charset;
+ }
+}
+
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED)
+/**
+ * xmlSAX2AttributeInternal:
+ * @ctx: the user data (XML parser context)
+ * @fullname: The attribute name, including namespace prefix
+ * @value: The attribute value
+ * @prefix: the prefix on the element node
+ *
+ * Handle an attribute that has been read by the parser.
+ * The default handling is to convert the attribute into an
+ * DOM subtree and past it in a new xmlAttr element added to
+ * the element.
+ */
+static void
+xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
+ const xmlChar *value, const xmlChar *prefix ATTRIBUTE_UNUSED)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlAttrPtr ret;
+ xmlChar *name;
+ xmlChar *ns;
+ xmlChar *nval;
+ xmlNsPtr namespace;
+
+ /*
+ * Split the full name into a namespace prefix and the tag name
+ */
+ name = xmlSplitQName(ctxt, fullname, &ns);
+ if ((name != NULL) && (name[0] == 0)) {
+ if (xmlStrEqual(ns, BAD_CAST "xmlns")) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "invalid namespace declaration '%s'\n", fullname);
+ } else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "Avoid attribute ending with ':' like '%s'\n", fullname);
+ }
+ if (ns != NULL)
+ xmlFree(ns);
+ ns = NULL;
+ xmlFree(name);
+ name = xmlStrdup(fullname);
+ }
+ if (name == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2StartElement(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ if (ns != NULL)
+ xmlFree(ns);
+ return;
+ }
+
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * Do the last stage of the attribute normalization
+ * Needed for HTML too:
+ * http://www.w3.org/TR/html4/types.html#h-6.2
+ */
+ ctxt->vctxt.valid = 1;
+ nval = xmlValidCtxtNormalizeAttributeValue(&ctxt->vctxt,
+ ctxt->myDoc, ctxt->node,
+ fullname, value);
+ if (ctxt->vctxt.valid != 1) {
+ ctxt->valid = 0;
+ }
+ if (nval != NULL)
+ value = nval;
+#else
+ nval = NULL;
+#endif /* LIBXML_VALID_ENABLED */
+
+ /*
+ * Check whether it's a namespace definition
+ */
+ if ((!ctxt->html) && (ns == NULL) &&
+ (name[0] == 'x') && (name[1] == 'm') && (name[2] == 'l') &&
+ (name[3] == 'n') && (name[4] == 's') && (name[5] == 0)) {
+ xmlNsPtr nsret;
+ xmlChar *val;
+
+ if (!ctxt->replaceEntities) {
+ ctxt->depth++;
+ val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
+ 0,0,0);
+ ctxt->depth--;
+ } else {
+ val = (xmlChar *) value;
+ }
+
+ if (val[0] != 0) {
+ xmlURIPtr uri;
+
+ uri = xmlParseURI((const char *)val);
+ if (uri == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "xmlns: %s not a valid URI\n", val);
+ } else {
+ if (uri->scheme == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "xmlns: URI %s is not absolute\n", val);
+ }
+ xmlFreeURI(uri);
+ }
+ }
+
+ /* a default namespace definition */
+ nsret = xmlNewNs(ctxt->node, val, NULL);
+
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * Validate also for namespace decls, they are attributes from
+ * an XML-1.0 perspective
+ */
+ if (nsret != NULL && ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset)
+ ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
+ ctxt->node, prefix, nsret, val);
+#endif /* LIBXML_VALID_ENABLED */
+ if (name != NULL)
+ xmlFree(name);
+ if (nval != NULL)
+ xmlFree(nval);
+ if (val != value)
+ xmlFree(val);
+ return;
+ }
+ if ((!ctxt->html) &&
+ (ns != NULL) && (ns[0] == 'x') && (ns[1] == 'm') && (ns[2] == 'l') &&
+ (ns[3] == 'n') && (ns[4] == 's') && (ns[5] == 0)) {
+ xmlNsPtr nsret;
+ xmlChar *val;
+
+ if (!ctxt->replaceEntities) {
+ ctxt->depth++;
+ val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
+ 0,0,0);
+ ctxt->depth--;
+ if (val == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2StartElement(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ xmlFree(ns);
+ if (name != NULL)
+ xmlFree(name);
+ return;
+ }
+ } else {
+ val = (xmlChar *) value;
+ }
+
+ if (val[0] == 0) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "Empty namespace name for prefix %s\n", name);
+ }
+ if ((ctxt->pedantic != 0) && (val[0] != 0)) {
+ xmlURIPtr uri;
+
+ uri = xmlParseURI((const char *)val);
+ if (uri == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "xmlns:%s: %s not a valid URI\n", name, value);
+ } else {
+ if (uri->scheme == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "xmlns:%s: URI %s is not absolute\n", name, value);
+ }
+ xmlFreeURI(uri);
+ }
+ }
+
+ /* a standard namespace definition */
+ nsret = xmlNewNs(ctxt->node, val, name);
+ xmlFree(ns);
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * Validate also for namespace decls, they are attributes from
+ * an XML-1.0 perspective
+ */
+ if (nsret != NULL && ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset)
+ ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
+ ctxt->node, prefix, nsret, value);
+#endif /* LIBXML_VALID_ENABLED */
+ if (name != NULL)
+ xmlFree(name);
+ if (nval != NULL)
+ xmlFree(nval);
+ if (val != value)
+ xmlFree(val);
+ return;
+ }
+
+ if (ns != NULL) {
+ xmlAttrPtr prop;
+ namespace = xmlSearchNs(ctxt->myDoc, ctxt->node, ns);
+ if (namespace == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "Namespace prefix %s of attribute %s is not defined\n",
+ ns, name);
+ }
+
+ prop = ctxt->node->properties;
+ while (prop != NULL) {
+ if (prop->ns != NULL) {
+ if ((xmlStrEqual(name, prop->name)) &&
+ ((namespace == prop->ns) ||
+ (xmlStrEqual(namespace->href, prop->ns->href)))) {
+ ctxt->errNo = XML_ERR_ATTRIBUTE_REDEFINED;
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "Attribute %s in %s redefined\n",
+ name, namespace->href);
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0) ctxt->disableSAX = 1;
+ goto error;
+ }
+ }
+ prop = prop->next;
+ }
+ } else {
+ namespace = NULL;
+ }
+
+ /* !!!!!! <a toto:arg="" xmlns:toto="http://toto.com"> */
+ ret = xmlNewNsPropEatName(ctxt->node, namespace, name, NULL);
+
+ if (ret != NULL) {
+ if ((ctxt->replaceEntities == 0) && (!ctxt->html)) {
+ xmlNodePtr tmp;
+
+ ret->children = xmlStringGetNodeList(ctxt->myDoc, value);
+ tmp = ret->children;
+ while (tmp != NULL) {
+ tmp->parent = (xmlNodePtr) ret;
+ if (tmp->next == NULL)
+ ret->last = tmp;
+ tmp = tmp->next;
+ }
+ } else if (value != NULL) {
+ ret->children = xmlNewDocText(ctxt->myDoc, value);
+ ret->last = ret->children;
+ if (ret->children != NULL)
+ ret->children->parent = (xmlNodePtr) ret;
+ }
+ }
+
+#ifdef LIBXML_VALID_ENABLED
+ if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset) {
+
+ /*
+ * If we don't substitute entities, the validation should be
+ * done on a value with replaced entities anyway.
+ */
+ if (!ctxt->replaceEntities) {
+ xmlChar *val;
+
+ ctxt->depth++;
+ val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
+ 0,0,0);
+ ctxt->depth--;
+
+ if (val == NULL)
+ ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
+ ctxt->myDoc, ctxt->node, ret, value);
+ else {
+ xmlChar *nvalnorm;
+
+ /*
+ * Do the last stage of the attribute normalization
+ * It need to be done twice ... it's an extra burden related
+ * to the ability to keep xmlSAX2References in attributes
+ */
+ nvalnorm = xmlValidNormalizeAttributeValue(ctxt->myDoc,
+ ctxt->node, fullname, val);
+ if (nvalnorm != NULL) {
+ xmlFree(val);
+ val = nvalnorm;
+ }
+
+ ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
+ ctxt->myDoc, ctxt->node, ret, val);
+ xmlFree(val);
+ }
+ } else {
+ ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt, ctxt->myDoc,
+ ctxt->node, ret, value);
+ }
+ } else
+#endif /* LIBXML_VALID_ENABLED */
+ if (((ctxt->loadsubset & XML_SKIP_IDS) == 0) &&
+ (((ctxt->replaceEntities == 0) && (ctxt->external != 2)) ||
+ ((ctxt->replaceEntities != 0) && (ctxt->inSubset == 0)))) {
+ /*
+ * 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);
+ }
+
+error:
+ if (nval != NULL)
+ xmlFree(nval);
+ if (ns != NULL)
+ xmlFree(ns);
+}
+
+/*
+ * xmlCheckDefaultedAttributes:
+ *
+ * Check defaulted attributes from the DTD
+ */
+static void
+xmlCheckDefaultedAttributes(xmlParserCtxtPtr ctxt, const xmlChar *name,
+ const xmlChar *prefix, const xmlChar **atts) {
+ xmlElementPtr elemDecl;
+ const xmlChar *att;
+ int internal = 1;
+ int i;
+
+ elemDecl = xmlGetDtdQElementDesc(ctxt->myDoc->intSubset, name, prefix);
+ if (elemDecl == NULL) {
+ elemDecl = xmlGetDtdQElementDesc(ctxt->myDoc->extSubset, name, prefix);
+ internal = 0;
+ }
+
+process_external_subset:
+
+ if (elemDecl != NULL) {
+ xmlAttributePtr attr = elemDecl->attributes;
+ /*
+ * Check against defaulted attributes from the external subset
+ * if the document is stamped as standalone
+ */
+ if ((ctxt->myDoc->standalone == 1) &&
+ (ctxt->myDoc->extSubset != NULL) &&
+ (ctxt->validate)) {
+ while (attr != NULL) {
+ if ((attr->defaultValue != NULL) &&
+ (xmlGetDtdQAttrDesc(ctxt->myDoc->extSubset,
+ attr->elem, attr->name,
+ attr->prefix) == attr) &&
+ (xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
+ attr->elem, attr->name,
+ attr->prefix) == NULL)) {
+ xmlChar *fulln;
+
+ if (attr->prefix != NULL) {
+ fulln = xmlStrdup(attr->prefix);
+ fulln = xmlStrcat(fulln, BAD_CAST ":");
+ fulln = xmlStrcat(fulln, attr->name);
+ } else {
+ fulln = xmlStrdup(attr->name);
+ }
+
+ /*
+ * Check that the attribute is not declared in the
+ * serialization
+ */
+ att = NULL;
+ if (atts != NULL) {
+ i = 0;
+ att = atts[i];
+ while (att != NULL) {
+ if (xmlStrEqual(att, fulln))
+ break;
+ i += 2;
+ att = atts[i];
+ }
+ }
+ if (att == NULL) {
+ xmlErrValid(ctxt, XML_DTD_STANDALONE_DEFAULTED,
+ "standalone: attribute %s on %s defaulted from external subset\n",
+ (const char *)fulln,
+ (const char *)attr->elem);
+ }
+ }
+ attr = attr->nexth;
+ }
+ }
+
+ /*
+ * Actually insert defaulted values when needed
+ */
+ attr = elemDecl->attributes;
+ while (attr != NULL) {
+ /*
+ * Make sure that attributes redefinition occuring in the
+ * internal subset are not overriden by definitions in the
+ * external subset.
+ */
+ if (attr->defaultValue != NULL) {
+ /*
+ * the element should be instantiated in the tree if:
+ * - this is a namespace prefix
+ * - the user required for completion in the tree
+ * like XSLT
+ * - there isn't already an attribute definition
+ * in the internal subset overriding it.
+ */
+ if (((attr->prefix != NULL) &&
+ (xmlStrEqual(attr->prefix, BAD_CAST "xmlns"))) ||
+ ((attr->prefix == NULL) &&
+ (xmlStrEqual(attr->name, BAD_CAST "xmlns"))) ||
+ (ctxt->loadsubset & XML_COMPLETE_ATTRS)) {
+ xmlAttributePtr tst;
+
+ tst = xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
+ attr->elem, attr->name,
+ attr->prefix);
+ if ((tst == attr) || (tst == NULL)) {
+ xmlChar fn[50];
+ xmlChar *fulln;
+
+ fulln = xmlBuildQName(attr->name, attr->prefix, fn, 50);
+ if (fulln == NULL) {
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2StartElement(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+ }
+
+ /*
+ * Check that the attribute is not declared in the
+ * serialization
+ */
+ att = NULL;
+ if (atts != NULL) {
+ i = 0;
+ att = atts[i];
+ while (att != NULL) {
+ if (xmlStrEqual(att, fulln))
+ break;
+ i += 2;
+ att = atts[i];
+ }
+ }
+ if (att == NULL) {
+ xmlSAX2AttributeInternal(ctxt, fulln,
+ attr->defaultValue, prefix);
+ }
+ if ((fulln != fn) && (fulln != attr->name))
+ xmlFree(fulln);
+ }
+ }
+ }
+ attr = attr->nexth;
+ }
+ if (internal == 1) {
+ elemDecl = xmlGetDtdQElementDesc(ctxt->myDoc->extSubset,
+ name, prefix);
+ internal = 0;
+ goto process_external_subset;
+ }
+ }
+}
+
+/**
+ * xmlSAX2StartElement:
+ * @ctx: the user data (XML parser context)
+ * @fullname: The element name, including namespace prefix
+ * @atts: An array of name/value attributes pairs, NULL terminated
+ *
+ * called when an opening tag has been processed.
+ */
+void
+xmlSAX2StartElement(void *ctx, const xmlChar *fullname, const xmlChar **atts)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlNodePtr ret;
+ xmlNodePtr parent = ctxt->node;
+ xmlNsPtr ns;
+ xmlChar *name;
+ xmlChar *prefix;
+ const xmlChar *att;
+ const xmlChar *value;
+ int i;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2StartElement(%s)\n", fullname);
+#endif
+
+ /*
+ * First check on validity:
+ */
+ if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) &&
+ ((ctxt->myDoc->intSubset == NULL) ||
+ ((ctxt->myDoc->intSubset->notations == NULL) &&
+ (ctxt->myDoc->intSubset->elements == NULL) &&
+ (ctxt->myDoc->intSubset->attributes == NULL) &&
+ (ctxt->myDoc->intSubset->entities == NULL)))) {
+ xmlErrValid(ctxt, XML_ERR_NO_DTD,
+ "Validation failed: no DTD found !", NULL, NULL);
+ ctxt->validate = 0;
+ }
+
+
+ /*
+ * Split the full name into a namespace prefix and the tag name
+ */
+ name = xmlSplitQName(ctxt, fullname, &prefix);
+
+
+ /*
+ * Note : the namespace resolution is deferred until the end of the
+ * attributes parsing, since local namespace can be defined as
+ * an attribute at this level.
+ */
+ ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL, name, NULL);
+ if (ret == NULL) {
+ if (prefix != NULL)
+ xmlFree(prefix);
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+ }
+ if (ctxt->myDoc->children == NULL) {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext, "Setting %s as root\n", name);
+#endif
+ xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
+ } else if (parent == NULL) {
+ parent = ctxt->myDoc->children;
+ }
+ ctxt->nodemem = -1;
+ if (ctxt->linenumbers) {
+ if (ctxt->input != NULL) {
+ if (ctxt->input->line < 65535)
+ ret->line = (short) ctxt->input->line;
+ else
+ ret->line = 65535;
+ }
+ }
+
+ /*
+ * We are parsing a new node.
+ */
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext, "pushing(%s)\n", name);
+#endif
+ nodePush(ctxt, ret);
+
+ /*
+ * Link the child element
+ */
+ if (parent != NULL) {
+ if (parent->type == XML_ELEMENT_NODE) {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "adding child %s to %s\n", name, parent->name);
+#endif
+ xmlAddChild(parent, ret);
+ } else {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "adding sibling %s to ", name);
+ xmlDebugDumpOneNode(stderr, parent, 0);
+#endif
+ xmlAddSibling(parent, ret);
+ }
+ }
+
+ /*
+ * Insert all the defaulted attributes from the DTD especially namespaces
+ */
+ if ((!ctxt->html) &&
+ ((ctxt->myDoc->intSubset != NULL) ||
+ (ctxt->myDoc->extSubset != NULL))) {
+ xmlCheckDefaultedAttributes(ctxt, name, prefix, atts);
+ }
+
+ /*
+ * process all the attributes whose name start with "xmlns"
+ */
+ if (atts != NULL) {
+ i = 0;
+ att = atts[i++];
+ value = atts[i++];
+ if (!ctxt->html) {
+ while ((att != NULL) && (value != NULL)) {
+ if ((att[0] == 'x') && (att[1] == 'm') && (att[2] == 'l') &&
+ (att[3] == 'n') && (att[4] == 's'))
+ xmlSAX2AttributeInternal(ctxt, att, value, prefix);
+
+ att = atts[i++];
+ value = atts[i++];
+ }
+ }
+ }
+
+ /*
+ * Search the namespace, note that since the attributes have been
+ * processed, the local namespaces are available.
+ */
+ ns = xmlSearchNs(ctxt->myDoc, ret, prefix);
+ if ((ns == NULL) && (parent != NULL))
+ ns = xmlSearchNs(ctxt->myDoc, parent, prefix);
+ if ((prefix != NULL) && (ns == NULL)) {
+ ns = xmlNewNs(ret, NULL, prefix);
+ if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "Namespace prefix %s is not defined\n", prefix);
+ }
+
+ /*
+ * set the namespace node, making sure that if the default namspace
+ * is unbound on a parent we simply kee it NULL
+ */
+ if ((ns != NULL) && (ns->href != NULL) &&
+ ((ns->href[0] != 0) || (ns->prefix != NULL)))
+ xmlSetNs(ret, ns);
+
+ /*
+ * process all the other attributes
+ */
+ if (atts != NULL) {
+ i = 0;
+ att = atts[i++];
+ value = atts[i++];
+ if (ctxt->html) {
+ while (att != NULL) {
+ xmlSAX2AttributeInternal(ctxt, att, value, NULL);
+ att = atts[i++];
+ value = atts[i++];
+ }
+ } else {
+ while ((att != NULL) && (value != NULL)) {
+ if ((att[0] != 'x') || (att[1] != 'm') || (att[2] != 'l') ||
+ (att[3] != 'n') || (att[4] != 's'))
+ xmlSAX2AttributeInternal(ctxt, att, value, NULL);
+
+ /*
+ * Next ones
+ */
+ att = atts[i++];
+ value = atts[i++];
+ }
+ }
+ }
+
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * If it's the Document root, finish the DTD validation and
+ * check the document root element for validity
+ */
+ if ((ctxt->validate) && (ctxt->vctxt.finishDtd == 0)) {
+ int chk;
+
+ chk = xmlValidateDtdFinal(&ctxt->vctxt, ctxt->myDoc);
+ if (chk <= 0)
+ ctxt->valid = 0;
+ if (chk < 0)
+ ctxt->wellFormed = 0;
+ ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
+ ctxt->vctxt.finishDtd = 1;
+ }
+#endif /* LIBXML_VALID_ENABLED */
+
+ if (prefix != NULL)
+ xmlFree(prefix);
+
+}
+
+/**
+ * xmlSAX2EndElement:
+ * @ctx: the user data (XML parser context)
+ * @name: The element name
+ *
+ * called when the end of an element has been detected.
+ */
+void
+xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserNodeInfo node_info;
+ xmlNodePtr cur = ctxt->node;
+
+#ifdef DEBUG_SAX
+ if (name == NULL)
+ xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(NULL)\n");
+ else
+ xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(%s)\n", name);
+#endif
+
+ /* Capture end position and add node */
+ if (cur != NULL && ctxt->record_info) {
+ node_info.end_pos = ctxt->input->cur - ctxt->input->base;
+ node_info.end_line = ctxt->input->line;
+ node_info.node = cur;
+ xmlParserAddNodeInfo(ctxt, &node_info);
+ }
+ ctxt->nodemem = -1;
+
+#ifdef LIBXML_VALID_ENABLED
+ if (ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset)
+ ctxt->valid &= xmlValidateOneElement(&ctxt->vctxt, ctxt->myDoc,
+ cur);
+#endif /* LIBXML_VALID_ENABLED */
+
+
+ /*
+ * end of parsing of this node.
+ */
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext, "popping(%s)\n", cur->name);
+#endif
+ nodePop(ctxt);
+}
+#endif /* LIBXML_SAX1_ENABLED || LIBXML_HTML_ENABLE */
+
+/*
+ * xmlSAX2TextNode:
+ * @ctxt: the parser context
+ * @str: the input string
+ * @len: the string length
+ *
+ * Remove the entities from an attribute value
+ *
+ * Returns the newly allocated string or NULL if not needed or error
+ */
+static xmlNodePtr
+xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
+ xmlNodePtr ret;
+ const xmlChar *intern = NULL;
+
+ /*
+ * Allocate
+ */
+ if (ctxt->freeElems != NULL) {
+ ret = ctxt->freeElems;
+ ctxt->freeElems = ret->next;
+ ctxt->freeElemsNr--;
+ } else {
+ ret = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ }
+ if (ret == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2Characters(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return(NULL);
+ }
+ /*
+ * intern the formatting blanks found between tags, or the
+ * very short strings
+ */
+ if (ctxt->dictNames) {
+ xmlChar cur = str[len];
+
+ if ((len <= 3) && ((cur == '"') || (cur == '\'') ||
+ ((cur == '<') && (str[len + 1] != '!')))) {
+ intern = xmlDictLookup(ctxt->dict, str, len);
+ } else if (IS_BLANK_CH(*str) && (len < 60) && (cur == '<') &&
+ (str[len + 1] != '!')) {
+ int i;
+
+ for (i = 1;i < len;i++) {
+ if (!IS_BLANK_CH(str[i])) goto skip;
+ }
+ intern = xmlDictLookup(ctxt->dict, str, len);
+ }
+ }
+skip:
+ memset(ret, 0, sizeof(xmlNode));
+ ret->type = XML_TEXT_NODE;
+
+ ret->name = xmlStringText;
+ if (intern == NULL)
+ ret->content = xmlStrndup(str, len);
+ else
+ ret->content = (xmlChar *) intern;
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(ret);
+ return(ret);
+}
+
+#ifdef LIBXML_VALID_ENABLED
+/*
+ * xmlSAX2DecodeAttrEntities:
+ * @ctxt: the parser context
+ * @str: the input string
+ * @len: the string length
+ *
+ * Remove the entities from an attribute value
+ *
+ * Returns the newly allocated string or NULL if not needed or error
+ */
+static xmlChar *
+xmlSAX2DecodeAttrEntities(xmlParserCtxtPtr ctxt, const xmlChar *str,
+ const xmlChar *end) {
+ const xmlChar *in;
+ xmlChar *ret;
+
+ in = str;
+ while (in < end)
+ if (*in++ == '&')
+ goto decode;
+ return(NULL);
+decode:
+ ctxt->depth++;
+ ret = xmlStringLenDecodeEntities(ctxt, str, end - str,
+ XML_SUBSTITUTE_REF, 0,0,0);
+ ctxt->depth--;
+ return(ret);
+}
+#endif /* LIBXML_VALID_ENABLED */
+
+/**
+ * xmlSAX2AttributeNs:
+ * @ctx: the user data (XML parser context)
+ * @localname: the local name of the attribute
+ * @prefix: the attribute namespace prefix if available
+ * @URI: the attribute namespace name if available
+ * @value: Start of the attribute value
+ * @valueend: end of the attribute value
+ *
+ * Handle an attribute that has been read by the parser.
+ * The default handling is to convert the attribute into an
+ * DOM subtree and past it in a new xmlAttr element added to
+ * the element.
+ */
+static void
+xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
+ const xmlChar * localname,
+ const xmlChar * prefix,
+ const xmlChar * value,
+ const xmlChar * valueend)
+{
+ xmlAttrPtr ret;
+ xmlNsPtr namespace = NULL;
+ xmlChar *dup = NULL;
+
+ /*
+ * Note: if prefix == NULL, the attribute is not in the default namespace
+ */
+ if (prefix != NULL)
+ namespace = xmlSearchNs(ctxt->myDoc, ctxt->node, prefix);
+
+ /*
+ * allocate the node
+ */
+ if (ctxt->freeAttrs != NULL) {
+ ret = ctxt->freeAttrs;
+ ctxt->freeAttrs = ret->next;
+ ctxt->freeAttrsNr--;
+ memset(ret, 0, sizeof(xmlAttr));
+ ret->type = XML_ATTRIBUTE_NODE;
+
+ ret->parent = ctxt->node;
+ ret->doc = ctxt->myDoc;
+ ret->ns = namespace;
+
+ if (ctxt->dictNames)
+ ret->name = localname;
+ else
+ ret->name = xmlStrdup(localname);
+
+ /* link at the end to preserv order, TODO speed up with a last */
+ if (ctxt->node->properties == NULL) {
+ ctxt->node->properties = ret;
+ } else {
+ xmlAttrPtr prev = ctxt->node->properties;
+
+ while (prev->next != NULL) prev = prev->next;
+ prev->next = ret;
+ ret->prev = prev;
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
+ } else {
+ if (ctxt->dictNames)
+ ret = xmlNewNsPropEatName(ctxt->node, namespace,
+ (xmlChar *) localname, NULL);
+ else
+ ret = xmlNewNsProp(ctxt->node, namespace, localname, NULL);
+ if (ret == NULL) {
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+ }
+ }
+
+ if ((ctxt->replaceEntities == 0) && (!ctxt->html)) {
+ xmlNodePtr tmp;
+
+ /*
+ * We know that if there is an entity reference, then
+ * the string has been dup'ed and terminates with 0
+ * otherwise with ' or "
+ */
+ if (*valueend != 0) {
+ tmp = xmlSAX2TextNode(ctxt, value, valueend - value);
+ ret->children = tmp;
+ ret->last = tmp;
+ if (tmp != NULL) {
+ tmp->doc = ret->doc;
+ tmp->parent = (xmlNodePtr) ret;
+ }
+ } else {
+ ret->children = xmlStringLenGetNodeList(ctxt->myDoc, value,
+ valueend - value);
+ tmp = ret->children;
+ while (tmp != NULL) {
+ tmp->parent = (xmlNodePtr) ret;
+ if (tmp->next == NULL)
+ ret->last = tmp;
+ tmp = tmp->next;
+ }
+ }
+ } else if (value != NULL) {
+ xmlNodePtr tmp;
+
+ tmp = xmlSAX2TextNode(ctxt, value, valueend - value);
+ ret->children = tmp;
+ ret->last = tmp;
+ if (tmp != NULL) {
+ tmp->doc = ret->doc;
+ tmp->parent = (xmlNodePtr) ret;
+ }
+ }
+
+#ifdef LIBXML_VALID_ENABLED
+ if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset) {
+ /*
+ * If we don't substitute entities, the validation should be
+ * done on a value with replaced entities anyway.
+ */
+ if (!ctxt->replaceEntities) {
+ dup = xmlSAX2DecodeAttrEntities(ctxt, value, valueend);
+ if (dup == NULL) {
+ if (*valueend == 0) {
+ ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
+ ctxt->myDoc, ctxt->node, ret, value);
+ } else {
+ /*
+ * That should already be normalized.
+ * cheaper to finally allocate here than duplicate
+ * entry points in the full validation code
+ */
+ dup = xmlStrndup(value, valueend - value);
+
+ ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
+ ctxt->myDoc, ctxt->node, ret, dup);
+ }
+ } else {
+ /*
+ * dup now contains a string of the flattened attribute
+ * content with entities substitued. Check if we need to
+ * apply an extra layer of normalization.
+ * It need to be done twice ... it's an extra burden related
+ * to the ability to keep references in attributes
+ */
+ if (ctxt->attsSpecial != NULL) {
+ xmlChar *nvalnorm;
+ xmlChar fn[50];
+ xmlChar *fullname;
+
+ fullname = xmlBuildQName(localname, prefix, fn, 50);
+ if (fullname != NULL) {
+ ctxt->vctxt.valid = 1;
+ nvalnorm = xmlValidCtxtNormalizeAttributeValue(
+ &ctxt->vctxt, ctxt->myDoc,
+ ctxt->node, fullname, dup);
+ if (ctxt->vctxt.valid != 1)
+ ctxt->valid = 0;
+
+ if ((fullname != fn) && (fullname != localname))
+ xmlFree(fullname);
+ if (nvalnorm != NULL) {
+ xmlFree(dup);
+ dup = nvalnorm;
+ }
+ }
+ }
+
+ ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
+ ctxt->myDoc, ctxt->node, ret, dup);
+ }
+ } else {
+ /*
+ * if entities already have been substitued, then
+ * the attribute as passed is already normalized
+ */
+ dup = xmlStrndup(value, valueend - value);
+
+ ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
+ ctxt->myDoc, ctxt->node, ret, dup);
+ }
+ } else
+#endif /* LIBXML_VALID_ENABLED */
+ if (((ctxt->loadsubset & XML_SKIP_IDS) == 0) &&
+ (((ctxt->replaceEntities == 0) && (ctxt->external != 2)) ||
+ ((ctxt->replaceEntities != 0) && (ctxt->inSubset == 0)))) {
+ /*
+ * 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);
+ }
+ }
+ if (dup != NULL)
+ xmlFree(dup);
+}
+
+/**
+ * xmlSAX2StartElementNs:
+ * @ctx: the user data (XML parser context)
+ * @localname: the local name of the element
+ * @prefix: the element namespace prefix if available
+ * @URI: the element namespace name if available
+ * @nb_namespaces: number of namespace definitions on that node
+ * @namespaces: pointer to the array of prefix/URI pairs namespace definitions
+ * @nb_attributes: the number of attributes on that node
+ * @nb_defaulted: the number of defaulted attributes.
+ * @attributes: pointer to the array of (localname/prefix/URI/value/end)
+ * attribute values.
+ *
+ * SAX2 callback when an element start has been detected by the parser.
+ * It provides the namespace informations for the element, as well as
+ * the new namespace declarations on the element.
+ */
+void
+xmlSAX2StartElementNs(void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI,
+ int nb_namespaces,
+ const xmlChar **namespaces,
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlNodePtr ret;
+ xmlNodePtr parent = ctxt->node;
+ xmlNsPtr last = NULL, ns;
+ const xmlChar *uri, *pref;
+ int i, j;
+
+ /*
+ * First check on validity:
+ */
+ if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) &&
+ ((ctxt->myDoc->intSubset == NULL) ||
+ ((ctxt->myDoc->intSubset->notations == NULL) &&
+ (ctxt->myDoc->intSubset->elements == NULL) &&
+ (ctxt->myDoc->intSubset->attributes == NULL) &&
+ (ctxt->myDoc->intSubset->entities == NULL)))) {
+ xmlErrValid(ctxt, XML_ERR_NO_DTD,
+ "Validation failed: no DTD found !", NULL, NULL);
+ ctxt->validate = 0;
+ }
+
+ /*
+ * allocate the node
+ */
+ if (ctxt->freeElems != NULL) {
+ ret = ctxt->freeElems;
+ ctxt->freeElems = ret->next;
+ ctxt->freeElemsNr--;
+ memset(ret, 0, sizeof(xmlNode));
+ ret->type = XML_ELEMENT_NODE;
+
+ if (ctxt->dictNames)
+ ret->name = localname;
+ else
+ ret->name = xmlStrdup(localname);
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(ret);
+ } else {
+ if (ctxt->dictNames)
+ ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
+ (xmlChar *) localname, NULL);
+ else
+ ret = xmlNewDocNode(ctxt->myDoc, NULL, localname, NULL);
+ if (ret == NULL) {
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ 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->myDoc->children == NULL) {
+ xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
+ } else if (parent == NULL) {
+ parent = ctxt->myDoc->children;
+ }
+ /*
+ * Build the namespace list
+ */
+ for (i = 0,j = 0;j < nb_namespaces;j++) {
+ pref = namespaces[i++];
+ uri = namespaces[i++];
+ ns = xmlNewNs(NULL, uri, pref);
+ if (ns != NULL) {
+ if (last == NULL) {
+ ret->nsDef = last = ns;
+ } else {
+ last->next = ns;
+ last = ns;
+ }
+ if ((URI != NULL) && (prefix == pref))
+ ret->ns = ns;
+ } else {
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+ }
+#ifdef LIBXML_VALID_ENABLED
+ if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset) {
+ ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
+ ret, prefix, ns, uri);
+ }
+#endif /* LIBXML_VALID_ENABLED */
+ }
+ ctxt->nodemem = -1;
+
+ /*
+ * We are parsing a new node.
+ */
+ nodePush(ctxt, ret);
+
+ /*
+ * Link the child element
+ */
+ if (parent != NULL) {
+ if (parent->type == XML_ELEMENT_NODE) {
+ xmlAddChild(parent, ret);
+ } else {
+ xmlAddSibling(parent, ret);
+ }
+ }
+
+ /*
+ * Insert the defaulted attributes from the DTD only if requested:
+ */
+ if ((nb_defaulted != 0) &&
+ ((ctxt->loadsubset & XML_COMPLETE_ATTRS) == 0))
+ nb_attributes -= nb_defaulted;
+
+ /*
+ * Search the namespace if it wasn't already found
+ */
+ if ((URI != NULL) && (ret->ns == NULL)) {
+ ret->ns = xmlSearchNs(ctxt->myDoc, parent, prefix);
+ if (ret->ns == NULL) {
+ ns = xmlNewNs(ret, NULL, prefix);
+ if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
+ ctxt->sax->warning(ctxt->userData,
+ "Namespace prefix %s was not found\n", prefix);
+ }
+ }
+
+ /*
+ * process all the other attributes
+ */
+ if (nb_attributes > 0) {
+ for (j = 0,i = 0;i < nb_attributes;i++,j+=5) {
+ xmlSAX2AttributeNs(ctxt, attributes[j], attributes[j+1],
+ attributes[j+3], attributes[j+4]);
+ }
+ }
+
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * If it's the Document root, finish the DTD validation and
+ * check the document root element for validity
+ */
+ if ((ctxt->validate) && (ctxt->vctxt.finishDtd == 0)) {
+ int chk;
+
+ chk = xmlValidateDtdFinal(&ctxt->vctxt, ctxt->myDoc);
+ if (chk <= 0)
+ ctxt->valid = 0;
+ if (chk < 0)
+ ctxt->wellFormed = 0;
+ ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
+ ctxt->vctxt.finishDtd = 1;
+ }
+#endif /* LIBXML_VALID_ENABLED */
+}
+
+/**
+ * xmlSAX2EndElementNs:
+ * @ctx: the user data (XML parser context)
+ * @localname: the local name of the element
+ * @prefix: the element namespace prefix if available
+ * @URI: the element namespace name if available
+ *
+ * SAX2 callback when an element end has been detected by the parser.
+ * It provides the namespace informations for the element.
+ */
+void
+xmlSAX2EndElementNs(void *ctx,
+ const xmlChar * localname ATTRIBUTE_UNUSED,
+ const xmlChar * prefix ATTRIBUTE_UNUSED,
+ const xmlChar * URI ATTRIBUTE_UNUSED)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserNodeInfo node_info;
+ xmlNodePtr cur = ctxt->node;
+
+ /* Capture end position and add node */
+ if ((ctxt->record_info) && (cur != NULL)) {
+ node_info.end_pos = ctxt->input->cur - ctxt->input->base;
+ node_info.end_line = ctxt->input->line;
+ node_info.node = cur;
+ xmlParserAddNodeInfo(ctxt, &node_info);
+ }
+ ctxt->nodemem = -1;
+
+#ifdef LIBXML_VALID_ENABLED
+ if (ctxt->validate && ctxt->wellFormed &&
+ ctxt->myDoc && ctxt->myDoc->intSubset)
+ ctxt->valid &= xmlValidateOneElement(&ctxt->vctxt, ctxt->myDoc, cur);
+#endif /* LIBXML_VALID_ENABLED */
+
+ /*
+ * end of parsing of this node.
+ */
+ nodePop(ctxt);
+}
+
+/**
+ * xmlSAX2Reference:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * called when an entity xmlSAX2Reference is detected.
+ */
+void
+xmlSAX2Reference(void *ctx, const xmlChar *name)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlNodePtr ret;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2Reference(%s)\n", name);
+#endif
+ if (name[0] == '#')
+ ret = xmlNewCharRef(ctxt->myDoc, name);
+ else
+ ret = xmlNewReference(ctxt->myDoc, name);
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "add xmlSAX2Reference %s to %s \n", name, ctxt->node->name);
+#endif
+ xmlAddChild(ctxt->node, ret);
+}
+
+/**
+ * xmlSAX2Characters:
+ * @ctx: the user data (XML parser context)
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * receiving some chars from the parser.
+ */
+void
+xmlSAX2Characters(void *ctx, const xmlChar *ch, int len)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlNodePtr lastChild;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2Characters(%.30s, %d)\n", ch, len);
+#endif
+ /*
+ * Handle the data if any. If there is no child
+ * add it as content, otherwise if the last child is text,
+ * concatenate it, else create a new node of type text.
+ */
+
+ if (ctxt->node == NULL) {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "add chars: ctxt->node == NULL !\n");
+#endif
+ return;
+ }
+ lastChild = ctxt->node->last;
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "add chars to %s \n", ctxt->node->name);
+#endif
+
+ /*
+ * Here we needed an accelerator mechanism in case of very large
+ * elements. Use an attribute in the structure !!!
+ */
+ if (lastChild == NULL) {
+ lastChild = xmlSAX2TextNode(ctxt, ch, len);
+ if (lastChild != NULL) {
+ ctxt->node->children = lastChild;
+ ctxt->node->last = lastChild;
+ lastChild->parent = ctxt->node;
+ lastChild->doc = ctxt->node->doc;
+ ctxt->nodelen = len;
+ ctxt->nodemem = len + 1;
+ }
+ } else {
+ int coalesceText = (lastChild != NULL) &&
+ (lastChild->type == XML_TEXT_NODE) &&
+ (lastChild->name == xmlStringText);
+ if ((coalesceText) && (ctxt->nodemem != 0)) {
+ /*
+ * The whole point of maintaining nodelen and nodemem,
+ * xmlTextConcat is too costly, i.e. compute length,
+ * reallocate a new buffer, move data, append ch. Here
+ * 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))) {
+ lastChild->content = xmlStrdup(lastChild->content);
+ }
+ if (ctxt->nodelen + len >= ctxt->nodemem) {
+ xmlChar *newbuf;
+ int size;
+
+ size = ctxt->nodemem + len;
+ size *= 2;
+ newbuf = (xmlChar *) xmlRealloc(lastChild->content,size);
+ if (newbuf == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2Characters(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+ }
+ ctxt->nodemem = size;
+ lastChild->content = newbuf;
+ }
+ memcpy(&lastChild->content[ctxt->nodelen], ch, len);
+ ctxt->nodelen += len;
+ lastChild->content[ctxt->nodelen] = 0;
+ } else if (coalesceText) {
+ if (xmlTextConcat(lastChild, ch, len)) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.xmlSAX2Characters(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ }
+ if (ctxt->node->children != NULL) {
+ ctxt->nodelen = xmlStrlen(lastChild->content);
+ ctxt->nodemem = ctxt->nodelen + 1;
+ }
+ } else {
+ /* Mixed content, first time */
+ lastChild = xmlSAX2TextNode(ctxt, ch, len);
+ if (lastChild != NULL) {
+ xmlAddChild(ctxt->node, lastChild);
+ if (ctxt->node->children != NULL) {
+ ctxt->nodelen = len;
+ ctxt->nodemem = len + 1;
+ }
+ }
+ }
+ }
+}
+
+/**
+ * xmlSAX2IgnorableWhitespace:
+ * @ctx: the user data (XML parser context)
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * receiving some ignorable whitespaces from the parser.
+ * UNUSED: by default the DOM building will use xmlSAX2Characters
+ */
+void
+xmlSAX2IgnorableWhitespace(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch ATTRIBUTE_UNUSED, int len ATTRIBUTE_UNUSED)
+{
+ /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2IgnorableWhitespace(%.30s, %d)\n", ch, len);
+#endif
+}
+
+/**
+ * xmlSAX2ProcessingInstruction:
+ * @ctx: the user data (XML parser context)
+ * @target: the target name
+ * @data: the PI data's
+ *
+ * A processing instruction has been parsed.
+ */
+void
+xmlSAX2ProcessingInstruction(void *ctx, const xmlChar *target,
+ const xmlChar *data)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlNodePtr ret;
+ xmlNodePtr parent = ctxt->node;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.xmlSAX2ProcessingInstruction(%s, %s)\n", target, data);
+#endif
+
+ ret = xmlNewPI(target, data);
+ if (ret == NULL) return;
+ parent = ctxt->node;
+
+ if (ctxt->inSubset == 1) {
+ xmlAddChild((xmlNodePtr) ctxt->myDoc->intSubset, ret);
+ return;
+ } else if (ctxt->inSubset == 2) {
+ xmlAddChild((xmlNodePtr) ctxt->myDoc->extSubset, ret);
+ return;
+ }
+ if ((ctxt->myDoc->children == NULL) || (parent == NULL)) {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "Setting PI %s as root\n", target);
+#endif
+ xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
+ return;
+ }
+ if (parent->type == XML_ELEMENT_NODE) {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "adding PI %s child to %s\n", target, parent->name);
+#endif
+ xmlAddChild(parent, ret);
+ } else {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "adding PI %s sibling to ", target);
+ xmlDebugDumpOneNode(stderr, parent, 0);
+#endif
+ xmlAddSibling(parent, ret);
+ }
+}
+
+/**
+ * xmlSAX2Comment:
+ * @ctx: the user data (XML parser context)
+ * @value: the xmlSAX2Comment content
+ *
+ * A xmlSAX2Comment has been parsed.
+ */
+void
+xmlSAX2Comment(void *ctx, const xmlChar *value)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlNodePtr ret;
+ xmlNodePtr parent = ctxt->node;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2Comment(%s)\n", value);
+#endif
+ ret = xmlNewDocComment(ctxt->myDoc, value);
+ if (ret == NULL) return;
+
+ if (ctxt->inSubset == 1) {
+ xmlAddChild((xmlNodePtr) ctxt->myDoc->intSubset, ret);
+ return;
+ } else if (ctxt->inSubset == 2) {
+ xmlAddChild((xmlNodePtr) ctxt->myDoc->extSubset, ret);
+ return;
+ }
+ if ((ctxt->myDoc->children == NULL) || (parent == NULL)) {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "Setting xmlSAX2Comment as root\n");
+#endif
+ xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
+ return;
+ }
+ if (parent->type == XML_ELEMENT_NODE) {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "adding xmlSAX2Comment child to %s\n", parent->name);
+#endif
+ xmlAddChild(parent, ret);
+ } else {
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "adding xmlSAX2Comment sibling to ");
+ xmlDebugDumpOneNode(stderr, parent, 0);
+#endif
+ xmlAddSibling(parent, ret);
+ }
+}
+
+/**
+ * xmlSAX2CDataBlock:
+ * @ctx: the user data (XML parser context)
+ * @value: The pcdata content
+ * @len: the block length
+ *
+ * called when a pcdata block has been parsed
+ */
+void
+xmlSAX2CDataBlock(void *ctx, const xmlChar *value, int len)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlNodePtr ret, lastChild;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext,
+ "SAX.pcdata(%.10s, %d)\n", value, len);
+#endif
+ lastChild = xmlGetLastChild(ctxt->node);
+#ifdef DEBUG_SAX_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "add chars to %s \n", ctxt->node->name);
+#endif
+ if ((lastChild != NULL) &&
+ (lastChild->type == XML_CDATA_SECTION_NODE)) {
+ xmlTextConcat(lastChild, value, len);
+ } else {
+ ret = xmlNewCDataBlock(ctxt->myDoc, value, len);
+ xmlAddChild(ctxt->node, ret);
+ }
+}
+
+static int xmlSAX2DefaultVersionValue = 2;
+
+#ifdef LIBXML_SAX1_ENABLED
+/**
+ * xmlSAXDefaultVersion:
+ * @version: the version, 1 or 2
+ *
+ * Set the default version of SAX used globally by the library.
+ * Note that this may not be a good thing to do from a library
+ * it is better to use xmlSAXVersion() to set up specifically the
+ * version for a given parsing context.
+ *
+ * Returns the previous value in case of success and -1 in case of error.
+ */
+int
+xmlSAXDefaultVersion(int version)
+{
+ int ret = xmlSAX2DefaultVersionValue;
+
+ if ((version != 1) && (version != 2))
+ return(-1);
+ xmlSAX2DefaultVersionValue = version;
+ return(ret);
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+/**
+ * xmlSAXVersion:
+ * @hdlr: the SAX handler
+ * @version: the version, 1 or 2
+ *
+ * Initialize the default XML SAX handler according to the version
+ *
+ * Returns 0 in case of success and -1 in case of error.
+ */
+int
+xmlSAXVersion(xmlSAXHandler *hdlr, int version)
+{
+ if (hdlr == NULL) return(-1);
+ if (version == 2) {
+ hdlr->startElement = NULL;
+ hdlr->endElement = NULL;
+ hdlr->startElementNs = xmlSAX2StartElementNs;
+ hdlr->endElementNs = xmlSAX2EndElementNs;
+ hdlr->serror = NULL;
+ hdlr->initialized = XML_SAX2_MAGIC;
+#ifdef LIBXML_SAX1_ENABLED
+ } else if (version == 1) {
+ hdlr->startElement = xmlSAX2StartElement;
+ hdlr->endElement = xmlSAX2EndElement;
+ hdlr->initialized = 1;
+#endif /* LIBXML_SAX1_ENABLED */
+ } else
+ return(-1);
+ hdlr->internalSubset = xmlSAX2InternalSubset;
+ hdlr->externalSubset = xmlSAX2ExternalSubset;
+ hdlr->isStandalone = xmlSAX2IsStandalone;
+ hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
+ hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
+ hdlr->resolveEntity = xmlSAX2ResolveEntity;
+ hdlr->getEntity = xmlSAX2GetEntity;
+ hdlr->getParameterEntity = xmlSAX2GetParameterEntity;
+ hdlr->entityDecl = xmlSAX2EntityDecl;
+ hdlr->attributeDecl = xmlSAX2AttributeDecl;
+ hdlr->elementDecl = xmlSAX2ElementDecl;
+ hdlr->notationDecl = xmlSAX2NotationDecl;
+ hdlr->unparsedEntityDecl = xmlSAX2UnparsedEntityDecl;
+ hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
+ hdlr->startDocument = xmlSAX2StartDocument;
+ hdlr->endDocument = xmlSAX2EndDocument;
+ hdlr->reference = xmlSAX2Reference;
+ hdlr->characters = xmlSAX2Characters;
+ hdlr->cdataBlock = xmlSAX2CDataBlock;
+ hdlr->ignorableWhitespace = xmlSAX2Characters;
+ hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
+ hdlr->comment = xmlSAX2Comment;
+ hdlr->warning = xmlParserWarning;
+ hdlr->error = xmlParserError;
+ hdlr->fatalError = xmlParserError;
+
+ return(0);
+}
+
+/**
+ * xmlSAX2InitDefaultSAXHandler:
+ * @hdlr: the SAX handler
+ * @warning: flag if non-zero sets the handler warning procedure
+ *
+ * Initialize the default XML SAX2 handler
+ */
+void
+xmlSAX2InitDefaultSAXHandler(xmlSAXHandler *hdlr, int warning)
+{
+ if ((hdlr == NULL) || (hdlr->initialized != 0))
+ return;
+
+ xmlSAXVersion(hdlr, xmlSAX2DefaultVersionValue);
+ if (warning == 0)
+ hdlr->warning = NULL;
+ else
+ hdlr->warning = xmlParserWarning;
+}
+
+/**
+ * xmlDefaultSAXHandlerInit:
+ *
+ * Initialize the default SAX2 handler
+ */
+void
+xmlDefaultSAXHandlerInit(void)
+{
+#ifdef LIBXML_SAX1_ENABLED
+ xmlSAXVersion((xmlSAXHandlerPtr) &xmlDefaultSAXHandler, 1);
+#endif /* LIBXML_SAX1_ENABLED */
+}
+
+#ifdef LIBXML_HTML_ENABLED
+
+/**
+ * xmlSAX2InitHtmlDefaultSAXHandler:
+ * @hdlr: the SAX handler
+ *
+ * Initialize the default HTML SAX2 handler
+ */
+void
+xmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr)
+{
+ if(hdlr->initialized != 0)
+ return;
+
+ hdlr->internalSubset = xmlSAX2InternalSubset;
+ hdlr->externalSubset = NULL;
+ hdlr->isStandalone = NULL;
+ hdlr->hasInternalSubset = NULL;
+ hdlr->hasExternalSubset = NULL;
+ hdlr->resolveEntity = NULL;
+ hdlr->getEntity = xmlSAX2GetEntity;
+ hdlr->getParameterEntity = NULL;
+ hdlr->entityDecl = NULL;
+ hdlr->attributeDecl = NULL;
+ hdlr->elementDecl = NULL;
+ hdlr->notationDecl = NULL;
+ hdlr->unparsedEntityDecl = NULL;
+ hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
+ hdlr->startDocument = xmlSAX2StartDocument;
+ hdlr->endDocument = xmlSAX2EndDocument;
+ hdlr->startElement = xmlSAX2StartElement;
+ hdlr->endElement = xmlSAX2EndElement;
+ hdlr->reference = NULL;
+ hdlr->characters = xmlSAX2Characters;
+ hdlr->cdataBlock = xmlSAX2CDataBlock;
+ hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
+ hdlr->processingInstruction = NULL;
+ hdlr->comment = xmlSAX2Comment;
+ hdlr->warning = xmlParserWarning;
+ hdlr->error = xmlParserError;
+ hdlr->fatalError = xmlParserError;
+
+ hdlr->initialized = 1;
+}
+
+/**
+ * htmlDefaultSAXHandlerInit:
+ *
+ * Initialize the default SAX handler
+ */
+void
+htmlDefaultSAXHandlerInit(void)
+{
+ xmlSAX2InitHtmlDefaultSAXHandler((xmlSAXHandlerPtr) &htmlDefaultSAXHandler);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+
+#ifdef LIBXML_DOCB_ENABLED
+
+/**
+ * xmlSAX2InitDocbDefaultSAXHandler:
+ * @hdlr: the SAX handler
+ *
+ * Initialize the default DocBook SAX2 handler
+ */
+void
+xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr)
+{
+ if(hdlr->initialized != 0)
+ return;
+
+ hdlr->internalSubset = xmlSAX2InternalSubset;
+ hdlr->externalSubset = NULL;
+ hdlr->isStandalone = xmlSAX2IsStandalone;
+ hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
+ hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
+ hdlr->resolveEntity = xmlSAX2ResolveEntity;
+ hdlr->getEntity = xmlSAX2GetEntity;
+ hdlr->getParameterEntity = NULL;
+ hdlr->entityDecl = xmlSAX2EntityDecl;
+ hdlr->attributeDecl = NULL;
+ hdlr->elementDecl = NULL;
+ hdlr->notationDecl = NULL;
+ hdlr->unparsedEntityDecl = NULL;
+ hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
+ hdlr->startDocument = xmlSAX2StartDocument;
+ hdlr->endDocument = xmlSAX2EndDocument;
+ hdlr->startElement = xmlSAX2StartElement;
+ hdlr->endElement = xmlSAX2EndElement;
+ hdlr->reference = xmlSAX2Reference;
+ hdlr->characters = xmlSAX2Characters;
+ hdlr->cdataBlock = NULL;
+ hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
+ hdlr->processingInstruction = NULL;
+ hdlr->comment = xmlSAX2Comment;
+ hdlr->warning = xmlParserWarning;
+ hdlr->error = xmlParserError;
+ hdlr->fatalError = xmlParserError;
+
+ hdlr->initialized = 1;
+}
+
+/**
+ * docbDefaultSAXHandlerInit:
+ *
+ * Initialize the default SAX handler
+ */
+void
+docbDefaultSAXHandlerInit(void)
+{
+ xmlSAX2InitDocbDefaultSAXHandler((xmlSAXHandlerPtr) &docbDefaultSAXHandler);
+}
+
+#endif /* LIBXML_DOCB_ENABLED */
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..a11b717
--- /dev/null
+++ b/TODO
@@ -0,0 +1,327 @@
+124907 HTML parse buffer problem when parsing larse in-memory docs
+124110 DTD validation && wrong namespace
+123564 xmllint --html --format
+
+ TODO for the XML parser and stuff:
+ ==================================
+
+ $Id: TODO,v 1.42 2003/10/28 21:31:43 veillard Exp $
+
+ this tend to be outdated :-\ ...
+
+DOCS:
+=====
+
+- use case of using XInclude to load for example a description.
+ order document + product base -(XSLT)-> quote with XIncludes
+ |
+ HTML output with description of parts <---(XSLT)--
+
+TODO:
+=====
+
+- E20
+[17:21:38] <PGrosso> DV, you have an action to Check what your parser does on E20. Have you done this?
+[17:22:42] <PGrosso> DV, ref: http://www.w3.org/XML/xml-V10-2e-errata#E20
+[17:39:07] <DV> paphio:~/XML -> cat tst.xml
+[17:39:07] <DV> <!DOCTYPE test [
+[17:39:07] <DV> <!ELEMENT test EMPTY>
+[17:39:07] <DV> <!ATTLIST test attr1 NMTOKENS #IMPLIED>
+[17:39:07] <DV> <!ATTLIST test attr2 NMTOKENS #IMPLIED>
+[17:39:07] <DV> <!ATTLIST test attr3 NMTOKENS #IMPLIED>
+[17:39:07] <DV> ]>
+[17:39:07] <DV> <test
+[17:39:07] <DV> attr1=" a b "
+[17:39:07] <DV> attr2=" a&#x20;b "
+[17:39:07] <DV> attr3=" a&#x9;b "
+[17:39:07] <DV> />
+[17:39:07] <DV> paphio:~/XML -> xmllint --valid tst.xml
+[17:39:07] <DV> <?xml version="1.0"?>
+[17:39:07] <DV> <!DOCTYPE test [
+[17:39:07] <DV> <!ELEMENT test EMPTY>
+[17:39:07] <DV> <!ATTLIST test attr1 NMTOKENS #IMPLIED>
+[17:39:07] <DV> <!ATTLIST test attr2 NMTOKENS #IMPLIED>
+[17:39:07] <DV> <!ATTLIST test attr3 NMTOKENS #IMPLIED>
+[17:39:07] <DV> ]>
+[17:39:07] <DV> <test attr1="a b" attr2="a b" attr3="a&#9;b"/>
+[17:39:07] <DV> paphio:~/XML ->
+[17:39:16] <DV> I think it's okay
+[17:40:28] <PGrosso> DV, so you're saying that your parser implements E20 correctly, right?
+[17:40:48] <DV> assuming I understood E20 point correctly, yes
+[17:41:15] <DV> and that's because I'm unsure taht I pasted the est document and result
+[17:41:25] <DV> s/ est/ test/
+[17:48:56] <richard> does your parser say that document is invalid?
+[17:49:03] <DV> richard: did I understood it ?
+[17:49:11] <DV> richard: no it considers it valid
+[17:49:16] <richard> that document is invalid
+[17:49:47] <DV> ah , well it's unclear
+[17:50:03] <richard> the normalized value is a-tab-b, which you are correctly serializing as a&#9;b, but it is invalid
+[17:50:11] <DV> richard: okay
+[17:50:23] <DV> that should be really easy to fix
+[17:50:39] <richard> the validity check should require a single space between tokens
+[17:51:03] <DV> no leading and no trailing either
+[17:51:07] <richard> right
+[17:51:18] <DV> which makes sense
+[17:52:42] <richard> a&#32;b is valid, because it turns into a-space-b anyway without any normalization
+[17:54:31] <DV> okay that's attr2 attr2=" a&#x20;b "
+[17:54:44] * DV tends to still think in hexa
+[17:55:59] <DV> richard: and attr2="a&#x20; b" would lead to a validity error too then, if I understand correctly
+[17:56:37] <richard> attr2 is valid
+[17:57:11] <richard> the normalized value is a space b
+- XInclude at the SAX level (libSRVG)
+- fix the C code prototype to bring back doc/libxml-undocumented.txt
+ to a reasonable level
+- Computation of base when HTTP redirect occurs, might affect HTTP
+ interfaces.
+- Computation of base in XInclude. Relativization of URIs.
+- listing all attributes in a node.
+- Better checking of external parsed entities TAG 1234
+- Go through erratas and do the cleanup.
+ http://www.w3.org/XML/xml-19980210-errata ... started ...
+- jamesh suggestion: SAX like functions to save a document ie. call a
+ function to open a new element with given attributes, write character
+ data, close last element, etc
+ + inversted SAX, initial patch in April 2002 archives.
+- htmlParseDoc has parameter encoding which is not used.
+ Function htmlCreateDocParserCtxt ignore it.
+- fix realloc() usage.
+- Stricten the UTF8 conformance (Martin Duerst):
+ http://www.w3.org/2001/06/utf-8-test/.
+ The bad files are in http://www.w3.org/2001/06/utf-8-wrong/.
+
+
+TODO:
+=====
+
+- move all string manipulation functions (xmlStrdup, xmlStrlen, etc.) to
+ global.c. Bjorn noted that the following files depends on parser.o solely
+ because of these string functions: entities.o, global.o, hash.o, tree.o,
+ xmlIO.o, and xpath.o.
+
+- Optimization of tag strings allocation ?
+
+- maintain coherency of namespace when doing cut'n paste operations
+ => the functions are coded, but need testing
+
+- function to rebuild the ID table
+- functions to rebuild the DTD hash tables (after DTD changes).
+
+
+EXTENSIONS:
+===========
+
+- Tools to produce man pages from the SGML docs.
+
+- Add Xpointer recognition/API
+
+- Add Xlink recognition/API
+ => started adding an xlink.[ch] with a unified API for XML and HTML.
+ it's crap :-(
+
+- Implement XSchemas
+ => Really need to be done <grin/>
+ - datatype are complete, but structure support is very limited.
+
+- extend the shell with:
+ - edit
+ - load/save
+ - mv (yum, yum, but it's harder because directories are ordered in
+ our case, mvup and mvdown would be required)
+
+
+Done:
+=====
+
+- Add HTML validation using the XHTML DTD
+ - problem: do we want to keep and maintain the code for handling
+ DTD/System ID cache directly in libxml ?
+ => not really done that way, but there are new APIs to check elements
+ or attributes. Otherwise XHTML validation directly ...
+
+- XML Schemas datatypes except Base64 and BinHex
+
+- Relax NG validation
+
+- XmlTextReader streaming API + validation
+
+- Add a DTD cache prefilled with xhtml DTDs and entities and a program to
+ manage them -> like the /usr/bin/install-catalog from SGML
+ right place seems $datadir/xmldtds
+ Maybe this is better left to user apps
+ => use a catalog instead , and xhtml1-dtd package
+
+- Add output to XHTML
+ => XML serializer automatically recognize the DTd and apply the specific
+ rules.
+
+- Fix output of <tst val="x&#xA;y"/>
+
+- compliance to XML-Namespace checking, see section 6 of
+ http://www.w3.org/TR/REC-xml-names/
+
+- Correct standalone checking/emitting (hard)
+ 2.9 Standalone Document Declaration
+
+- Implement OASIS XML Catalog support
+ http://www.oasis-open.org/committees/entity/
+
+- Get OASIS testsuite to a more friendly result, check all the results
+ once stable. the check-xml-test-suite.py script does this
+
+- Implement XSLT
+ => libxslt
+
+- Finish XPath
+ => attributes addressing troubles
+ => defaulted attributes handling
+ => namespace axis ?
+ done as XSLT got debugged
+
+- bug reported by Michael Meallin on validation problems
+ => Actually means I need to add support (and warn) for non-deterministic
+ content model.
+- Handle undefined namespaces in entity contents better ... at least
+ issue a warning
+- DOM needs
+ int xmlPruneProp(xmlNodePtr node, xmlAtttrPtr attr);
+ => done it's actually xmlRemoveProp xmlUnsetProp xmlUnsetNsProp
+
+- HTML: handling of Script and style data elements, need special code in
+ the parser and saving functions (handling of < > " ' ...):
+ http://www.w3.org/TR/html4/types.html#type-script
+ Attributes are no problems since entities are accepted.
+- DOM needs
+ xmlAttrPtr xmlNewDocProp(xmlDocPtr doc, const xmlChar *name, const xmlChar *value)
+- problem when parsing hrefs with & with the HTML parser (IRC ac)
+- If the internal encoding is not UTF8 saving to a given encoding doesn't
+ work => fix to force UTF8 encoding ...
+ done, added documentation too
+- Add an ASCII I/O encoder (asciiToUTF8 and UTF8Toascii)
+- Issue warning when using non-absolute namespaces URI.
+- the html parser should add <head> and <body> if they don't exist
+ started, not finished.
+ Done, the automatic closing is added and 3 testcases were inserted
+- Command to force the parser to stop parsing and ignore the rest of the file.
+ xmlStopParser() should allow this, mostly untested
+- support for HTML empty attributes like <hr noshade>
+- plugged iconv() in for support of a large set of encodings.
+- xmlSwitchToEncoding() rewrite done
+- URI checkings (no fragments) rfc2396.txt
+- Added a clean mechanism for overload or added input methods:
+ xmlRegisterInputCallbacks()
+- dynamically adapt the alloc entry point to use g_alloc()/g_free()
+ if the programmer wants it:
+ - use xmlMemSetup() to reset the routines used.
+- Check attribute normalization especially xmlGetProp()
+- Validity checking problems for NOTATIONS attributes
+- Validity checking problems for ENTITY ENTITIES attributes
+- Parsing of a well balanced chunk xmlParseBalancedChunkMemory()
+- URI module: validation, base, etc ... see uri.[ch]
+- turn tester into a generic program xmllint installed with libxml
+- extend validity checks to go through entities content instead of
+ just labelling them PCDATA
+- Save Dtds using the children list instead of dumping the tables,
+ order is preserved as well as comments and PIs
+- Wrote a notice of changes requires to go from 1.x to 2.x
+- make sure that all SAX callbacks are disabled if a WF error is detected
+- checking/handling of newline normalization
+ http://localhost/www.xml.com/axml/target.html#sec-line-ends
+- correct checking of '&' '%' on entities content.
+- checking of PE/Nesting on entities declaration
+- checking/handling of xml:space
+ - checking done.
+ - handling done, not well tested
+- Language identification code, productions [33] to [38]
+ => done, the check has been added and report WFness errors
+- Conditional sections in DTDs [61] to [65]
+ => should this crap be really implemented ???
+ => Yep OASIS testsuite uses them
+- Allow parsed entities defined in the internal subset to override
+ the ones defined in the external subset (DtD customization).
+ => This mean that the entity content should be computed only at
+ use time, i.e. keep the orig string only at parse time and expand
+ only when referenced from the external subset :-(
+ Needed for complete use of most DTD from Eve Maler
+- Add regression tests for all WFC errors
+ => did some in test/WFC
+ => added OASIS testsuite routines
+ http://xmlsoft.org/conf/result.html
+
+- I18N: http://wap.trondheim.com/vaer/index.phtml is not XML and accepted
+ by the XML parser, UTF-8 should be checked when there is no "encoding"
+ declared !
+- Support for UTF-8 and UTF-16 encoding
+ => added some convertion routines provided by Martin Durst
+ patched them, got fixes from @@@
+ I plan to keep everything internally as UTF-8 (or ISO-Latin-X)
+ this is slightly more costly but more compact, and recent processors
+ efficiency is cache related. The key for good performances is keeping
+ the data set small, so will I.
+ => the new progressive reading routines call the detection code
+ is enabled, tested the ISO->UTF-8 stuff
+- External entities loading:
+ - allow override by client code
+ - make sure it is alled for all external entities referenced
+ Done, client code should use xmlSetExternalEntityLoader() to set
+ the default loading routine. It will be called each time an external
+ entity entity resolution is triggered.
+- maintain ID coherency when removing/changing attributes
+ The function used to deallocate attributes now check for it being an
+ ID and removes it from the table.
+- push mode parsing i.e. non-blocking state based parser
+ done, both for XML and HTML parsers. Use xmlCreatePushParserCtxt()
+ and xmlParseChunk() and html counterparts.
+ The tester program now has a --push option to select that parser
+ front-end. Douplicated tests to use both and check results are similar.
+
+- Most of XPath, still see some troubles and occasionnal memleaks.
+- an XML shell, allowing to traverse/manipulate an XML document with
+ a shell like interface, and using XPath for the anming syntax
+ - use of readline and history added when available
+ - the shell interface has been cleanly separated and moved to debugXML.c
+- HTML parser, should be fairly stable now
+- API to search the lang of an attribute
+- Collect IDs at parsing and maintain a table.
+ PBM: maintain the table coherency
+ PBM: how to detect ID types in absence of DtD !
+- Use it for XPath ID support
+- Add validity checking
+ Should be finished now !
+- Add regression tests with entity substitutions
+
+- External Parsed entities, either XML or external Subset [78] and [79]
+ parsing the xmllang DtD now works, so it should be sufficient for
+ most cases !
+
+- progressive reading. The entity support is a first step toward
+ asbtraction of an input stream. A large part of the context is still
+ located on the stack, moving to a state machine and putting everyting
+ in the parsing context should provide an adequate solution.
+ => Rather than progressive parsing, give more power to the SAX-like
+ interface. Currently the DOM-like representation is built but
+ => it should be possible to define that only as a set of SAX callbacks
+ and remove the tree creation from the parser code.
+ DONE
+
+- DOM support, instead of using a proprietary in memory
+ format for the document representation, the parser should
+ call a DOM API to actually build the resulting document.
+ Then the parser becomes independent of the in-memory
+ representation of the document. Even better using RPC's
+ the parser can actually build the document in another
+ program.
+ => Work started, now the internal representation is by default
+ very near a direct DOM implementation. The DOM glue is implemented
+ as a separate module. See the GNOME gdome module.
+
+- C++ support : John Ehresman <jehresma@dsg.harvard.edu>
+- Updated code to follow more recent specs, added compatibility flag
+- Better error handling, use a dedicated, overridable error
+ handling function.
+- Support for CDATA.
+- Keep track of line numbers for better error reporting.
+- Support for PI (SAX one).
+- Support for Comments (bad, should be in ASAP, they are parsed
+ but not stored), should be configurable.
+- Improve the support of entities on save (+SAX).
+
diff --git a/TODO_SCHEMAS b/TODO_SCHEMAS
new file mode 100644
index 0000000..145a4ed
--- /dev/null
+++ b/TODO_SCHEMAS
@@ -0,0 +1,31 @@
+- implement counted transitions at the automata level
+
+- Unicode:
+ + upgrade to 3.2
+ + improve the python script to generate better test
+ expressions to check the list of ranges.
+
+- Implement the interface at the SAX level
+
+- Implement the missing parts in the Structure part
+ + all content model
+ + enumerations
+ + countless others c.f. the TODO scattered in the code
+
+- Complete the Built-In datatype collections and Facets implementations
+
+- Regression tests based on
+ + the primer:
+ http://www.w3.org/TR/xmlschema-0/
+ + the Schemas Test Collection:
+ http://www.w3.org/2001/05/xmlschema-test-collection/
+ + archives of the schemas-dev list
+
+- Integrity constraints:
+ + what's that ? How need to read about it
+
+- "formal" checking, i.e. go through the full Structure spec and
+ bind code and associated parts of the Schemas spec
+
+- go though the erratas
+ http://www.w3.org/2001/05/xmlschema-errata
diff --git a/acconfig.h b/acconfig.h
new file mode 100644
index 0000000..7e4d9b8
--- /dev/null
+++ b/acconfig.h
@@ -0,0 +1,17 @@
+#undef PACKAGE
+#undef VERSION
+#undef HAVE_LIBZ
+#undef HAVE_LIBM
+#undef HAVE_ISINF
+#undef HAVE_ISNAN
+#undef HAVE_LIBHISTORY
+#undef HAVE_LIBREADLINE
+#undef SOCKLEN_T
+#undef HAVE_LIBPTHREAD
+#undef HAVE_PTHREAD_H
+
+/* Define if IPV6 support is there */
+#undef SUPPORT_IP6
+
+/* Define if getaddrinfo is there */
+#undef HAVE_GETADDRINFO
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..4ff672e
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,28 @@
+dnl Like AC_TRY_EVAL but also errors out if the compiler generates
+dnl _any_ output. Some compilers might issue warnings which we want
+dnl to catch.
+AC_DEFUN([AC_TRY_EVAL2],
+[{ (eval echo configure:__oline__: \"[$]$1\") 1>&AC_FD_CC; dnl
+(eval [$]$1) 2>&AC_FD_CC; _out=`eval [$]$1 2>&1` && test "x$_out" = x; }])
+
+dnl Like AC_TRY_COMPILE but calls AC_TRY_EVAL2 instead of AC_TRY_EVAL
+AC_DEFUN([AC_TRY_COMPILE2],
+[cat > conftest.$ac_ext <<EOF
+[#]line __oline__ "configure"
+#include "confdefs.h"
+[$1]
+int main(void) {
+[$2]
+; return 0; }
+EOF
+if AC_TRY_EVAL2(ac_compile); then
+ ifelse([$3], , :, [rm -rf conftest*
+ $3])
+else
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+ifelse([$4], , , [ rm -rf conftest*
+ $4
+])dnl
+fi
+rm -f conftest*])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..be711ff
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,6832 @@
+# generated automatically by aclocal 1.8.2 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+# serial 47 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+ [],
+ [m4_define([AC_PROVIDE_IFELSE],
+ [m4_ifdef([AC_PROVIDE_$1],
+ [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [AC_LIBTOOL_CXX],
+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+ ])])
+dnl And a similar setup for Fortran 77 support
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [AC_LIBTOOL_F77],
+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [ifdef([AC_PROG_GCJ],
+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([A][M_PROG_GCJ],
+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([LT_AC_PROG_GCJ],
+ [define([LT_AC_PROG_GCJ],
+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+ ;;
+ *)
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ AC_PATH_MAGIC
+ fi
+ ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+ [AC_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+[$]*
+EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+ echo_test_string="`eval $cmd`" &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+ then
+ break
+ fi
+ done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ echo='printf %s\n'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case "`/usr/bin/file conftest.o`" in
+ *32-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+ ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ 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
+ if test ! -s conftest.err; then
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$5], , :, [$5])
+else
+ ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ else
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$4], , :, [$4])
+else
+ ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ testring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ *)
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \
+ = "XX$testring") >/dev/null 2>&1 &&
+ new_result=`expr "X$testring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ testring=$testring$testring
+ done
+ testring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}]
+EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_unknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+ test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
+ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_AC_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+
+ # Find out which ABI we are using (multilib Linux x86_64 hack).
+ libsuff=
+ case "$host_cpu" in
+ x86_64*|s390x*|powerpc64*)
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *64-bit*)
+ libsuff=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+ *)
+ ;;
+ esac
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+ [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+ [include additional configurations @<:@automatic@:>@])],
+ [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ AC_MSG_WARN([output file `$ofile' does not exist])
+ fi
+
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+ else
+ AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+ fi
+ fi
+
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+ "") ;;
+ *) AC_MSG_ERROR([invalid tag name: $tagname])
+ ;;
+ esac
+
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ AC_MSG_ERROR([tag name \"$tagname\" already exists])
+ fi
+
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
+
+ case $tagname in
+ CXX)
+ if test -n "$CXX" && test "X$CXX" != "Xno"; then
+ AC_LIBTOOL_LANG_CXX_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+ AC_LIBTOOL_LANG_F77_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+ AC_LIBTOOL_LANG_GCJ_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ RC)
+ AC_LIBTOOL_LANG_RC_CONFIG
+ ;;
+
+ *)
+ AC_MSG_ERROR([Unsupported tag name: $tagname])
+ ;;
+ esac
+
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ AC_MSG_ERROR([unable to update list of available tagged configurations.])
+ fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+ [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+#- set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+ [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+ [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="ifelse([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the path to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+ [AC_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi4*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin* | mingw* | pw32*)
+ # win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='win32_libid'
+ ;;
+
+darwin* | rhapsody*)
+ # this will be overwritten by pass_all, but leave it in just in case
+ lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System`
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+ ;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case "$host_cpu" in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ irix5* | nonstopux*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1"
+ ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ case $host_cpu in
+ alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh* | x86_64*)
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+nto-qnx)
+ lt_cv_deplibs_check_method=unknown
+ ;;
+
+openbsd*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+ else
+ lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sco3.2v5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the path to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!). If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ case $enable_ltdl_convenience in
+ no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+ "") enable_ltdl_convenience=yes
+ ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+ esac
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided and an installed libltdl is not found, it is
+# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/'
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!). If your package is not flat and you're not using automake,
+# define top_builddir and top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ AC_CHECK_LIB(ltdl, lt_dlinit,
+ [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+ [if test x"$enable_ltdl_install" = xno; then
+ AC_MSG_WARN([libltdl not installed, but installation disabled])
+ else
+ enable_ltdl_install=yes
+ fi
+ ])
+ if test x"$enable_ltdl_install" = x"yes"; then
+ ac_configure_args="$ac_configure_args --enable-ltdl-install"
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ else
+ ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+ LIBLTDL="-lltdl"
+ LTDLINCL=
+ fi
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,CXX" | sed 's/^,//'`])
+])# _LT_AC_LANG_CXX
+
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,F77" | sed 's/^,//'`])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,GCJ" | sed 's/^,//'`])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# --------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,RC" | sed 's/^,//'`])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+#
+# Check for any special shared library compilation flags.
+#
+_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
+if test "$GCC" = no; then
+ case $host_os in
+ sco3.2v5*)
+ _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
+ ;;
+ esac
+fi
+if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
+ AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
+ if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ ]]" >/dev/null; then :
+ else
+ AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
+ _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
+ fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+ $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
+ [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+# Report which librarie types wil actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ fi
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+ unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+ unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ AC_PROG_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+ grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ freebsd[12]*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ freebsd-elf*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ freebsd*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ ia64*|hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC)
+ # SGI C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc)
+ # Intel C++
+ with_gnu_ld=yes
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ cxx)
+ # Compaq C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+ osf3*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
+ $rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ sco*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ fi
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ fi
+ ;;
+ esac
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+ for p in `eval $output_verbose_link_cmd`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" \
+ || test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+ _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+ _LT_AC_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+ _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=" program t\n end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+aix4*)
+ test "$enable_shared" = yes && enable_static=no
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars. Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ _LT_AC_TAGVAR(compiler, $1) \
+ _LT_AC_TAGVAR(CC, $1) \
+ _LT_AC_TAGVAR(LD, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+ _LT_AC_TAGVAR(old_archive_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+ _LT_AC_TAGVAR(predep_objects, $1) \
+ _LT_AC_TAGVAR(postdep_objects, $1) \
+ _LT_AC_TAGVAR(predeps, $1) \
+ _LT_AC_TAGVAR(postdeps, $1) \
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+ _LT_AC_TAGVAR(archive_cmds, $1) \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(postinstall_cmds, $1) \
+ _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+ _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+ _LT_AC_TAGVAR(no_undefined_flag, $1) \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+ _LT_AC_TAGVAR(hardcode_automatic, $1) \
+ _LT_AC_TAGVAR(module_cmds, $1) \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+ _LT_AC_TAGVAR(exclude_expsyms, $1) \
+ _LT_AC_TAGVAR(include_expsyms, $1); do
+
+ case $var in
+ _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(module_cmds, $1) | \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\[$]0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+ ;;
+ esac
+
+ifelse([$1], [],
+ [cfgfile="${ofile}T"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ $rm -f "$cfgfile"
+ AC_MSG_NOTICE([creating $ofile])],
+ [cfgfile="$ofile"])
+
+ cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+])
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris* | sysv5*)
+ symcode='[[BDRT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Write the raw and C identifiers.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68)
+ # Green Hills C++ Compiler
+ # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # KAI C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc)
+ # Intel C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ cxx)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx)
+ # Digital/Compaq C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ sco*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc)
+ # Lucid
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ unixware*)
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc|ecc)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ ccc)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+],[
+ runpath_var=
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)=
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+ _LT_AC_TAGVAR(module_cmds, $1)=
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_AC_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ linux*)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds"
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+ if test $supports_anon_versioning = yes; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds"
+ fi
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ # see comment about different semantics on the GNU ld section
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ bsdi4*)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ fi
+ ;;
+
+ dgux*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ sco3.2v5*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv5*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_AC_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && break
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+SED=$lt_cv_path_SED
+])
+AC_MSG_RESULT([$SED])
+])
+
+# -*- Autoconf -*-
+# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+# Generated from amversion.in; do not edit by hand.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.8"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.8.2])])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 6
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.])
+fi])])
+
+# serial 6 -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ : > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored.
+ if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+#serial 2
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+ # Extract the definition of DEP_FILES from the Makefile without
+ # running `make'.
+ DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n -e '/^U = / s///p' < "$mf"`
+ test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+ # We invoke sed twice because it is the simplest approach to
+ # changing $(DEPDIR) to its actual value in the expansion.
+ for file in `sed -n -e '
+ /^DEP_FILES = .*\\\\$/ {
+ s/^DEP_FILES = //
+ :loop
+ s/\\\\$//
+ p
+ n
+ /\\\\$/ b loop
+ p
+ }
+ /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 7
+
+# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# This macro actually does too much some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 11
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# -*- Autoconf -*-
+# Copyright (C) 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 1
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# -*- Autoconf -*-
+
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+
+# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake. There are at least two reasons why we must not
+# use `-m 0755':
+# - it causes special bits like SGID to be ignored,
+# - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p -- . 2>/dev/null; then
+ # Keeping the `.' argument allows $(mkdir_p) to be used without
+ # argument. Indeed, we sometimes output rules like
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined.
+ # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+ # expensive solution, as it forces Make to start a sub-shell.)
+ mkdir_p='mkdir -p -- .'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+
+# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+AC_DEFUN([AM_C_PROTOTYPES],
+[AC_REQUIRE([AC_C_PROTOTYPES])
+if test "$ac_cv_prog_cc_stdc" != no; then
+ U= ANSI2KNR=
+else
+ U=_ ANSI2KNR=./ansi2knr
+fi
+# Ensure some checks needed by ansi2knr itself.
+AC_REQUIRE([AC_HEADER_STDC])
+AC_CHECK_HEADERS(string.h)
+AC_SUBST(U)dnl
+AC_SUBST(ANSI2KNR)dnl
+])
+
+AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+m4_include([acinclude.m4])
diff --git a/c14n.c b/c14n.c
new file mode 100644
index 0000000..01c46b1
--- /dev/null
+++ b/c14n.c
@@ -0,0 +1,1974 @@
+/*
+ * "Canonical XML" implementation
+ * http://www.w3.org/TR/xml-c14n
+ *
+ * "Exclusive XML Canonicalization" implementation
+ * http://www.w3.org/TR/xml-exc-c14n
+ *
+ * See Copyright for the status of this software.
+ *
+ * Author: Aleksey Sanin <aleksey@aleksey.com>
+ */
+#define IN_LIBXML
+#include "libxml.h"
+#ifdef LIBXML_C14N_ENABLED
+#ifdef LIBXML_OUTPUT_ENABLED
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <string.h>
+
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/uri.h>
+#include <libxml/xmlerror.h>
+#include <libxml/globals.h>
+#include <libxml/xpathInternals.h>
+#include <libxml/c14n.h>
+
+/************************************************************************
+ * *
+ * Some declaration better left private ATM *
+ * *
+ ************************************************************************/
+
+typedef enum {
+ XMLC14N_BEFORE_DOCUMENT_ELEMENT = 0,
+ XMLC14N_INSIDE_DOCUMENT_ELEMENT = 1,
+ XMLC14N_AFTER_DOCUMENT_ELEMENT = 2
+} xmlC14NPosition;
+
+typedef struct _xmlC14NVisibleNsStack {
+ int nsCurEnd; /* number of nodes in the set */
+ int nsPrevStart; /* the begginning of the stack for previous visible node */
+ int nsPrevEnd; /* the end of the stack for previous visible node */
+ int nsMax; /* size of the array as allocated */
+ xmlNsPtr *nsTab; /* array of ns in no particular order */
+ xmlNodePtr *nodeTab;/* array of nodes in no particular order */
+} xmlC14NVisibleNsStack, *xmlC14NVisibleNsStackPtr;
+
+typedef struct _xmlC14NCtx {
+ /* input parameters */
+ xmlDocPtr doc;
+ xmlC14NIsVisibleCallback is_visible_callback;
+ void* user_data;
+ int with_comments;
+ xmlOutputBufferPtr buf;
+
+ /* position in the XML document */
+ xmlC14NPosition pos;
+ int parent_is_doc;
+ xmlC14NVisibleNsStackPtr ns_rendered;
+
+ /* exclusive canonicalization */
+ int exclusive;
+ xmlChar **inclusive_ns_prefixes;
+
+ /* error number */
+ int error;
+} xmlC14NCtx, *xmlC14NCtxPtr;
+
+static xmlC14NVisibleNsStackPtr xmlC14NVisibleNsStackCreate (void);
+static void xmlC14NVisibleNsStackDestroy (xmlC14NVisibleNsStackPtr cur);
+static void xmlC14NVisibleNsStackAdd (xmlC14NVisibleNsStackPtr cur,
+ xmlNsPtr ns,
+ xmlNodePtr node);
+static void xmlC14NVisibleNsStackSave (xmlC14NVisibleNsStackPtr cur,
+ xmlC14NVisibleNsStackPtr state);
+static void xmlC14NVisibleNsStackRestore (xmlC14NVisibleNsStackPtr cur,
+ xmlC14NVisibleNsStackPtr state);
+static void xmlC14NVisibleNsStackShift (xmlC14NVisibleNsStackPtr cur);
+static int xmlC14NVisibleNsStackFind (xmlC14NVisibleNsStackPtr cur,
+ xmlNsPtr ns);
+static int xmlExcC14NVisibleNsStackFind (xmlC14NVisibleNsStackPtr cur,
+ xmlNsPtr ns,
+ xmlC14NCtxPtr ctx);
+
+static int xmlC14NIsNodeInNodeset (xmlNodeSetPtr nodes,
+ xmlNodePtr node,
+ xmlNodePtr parent);
+
+
+
+static int xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur);
+static int xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur);
+typedef enum {
+ XMLC14N_NORMALIZE_ATTR = 0,
+ XMLC14N_NORMALIZE_COMMENT = 1,
+ XMLC14N_NORMALIZE_PI = 2,
+ XMLC14N_NORMALIZE_TEXT = 3
+} xmlC14NNormalizationMode;
+
+static xmlChar *xmlC11NNormalizeString(const xmlChar * input,
+ xmlC14NNormalizationMode mode);
+
+#define xmlC11NNormalizeAttr( a ) \
+ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_ATTR)
+#define xmlC11NNormalizeComment( a ) \
+ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_COMMENT)
+#define xmlC11NNormalizePI( a ) \
+ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_PI)
+#define xmlC11NNormalizeText( a ) \
+ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_TEXT)
+
+#define xmlC14NIsVisible( ctx, node, parent ) \
+ (((ctx)->is_visible_callback != NULL) ? \
+ (ctx)->is_visible_callback((ctx)->user_data, \
+ (xmlNodePtr)(node), (xmlNodePtr)(parent)) : 1)
+
+/************************************************************************
+ * *
+ * Some factorized error routines *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlC14NErrMemory:
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlC14NErrMemory(const char *extra)
+{
+ __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
+ XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0, extra,
+ NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+}
+
+/**
+ * xmlC14NErr:
+ * @ctxt: a C14N evaluation context
+ * @node: the context node
+ * @error: the erorr code
+ * @msg: the message
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlC14NErr(xmlC14NCtxPtr ctxt, xmlNodePtr node, int error,
+ const char * msg)
+{
+ if (ctxt != NULL)
+ ctxt->error = error;
+ __xmlRaiseError(NULL, NULL, NULL,
+ ctxt, node, XML_FROM_C14N, error,
+ XML_ERR_ERROR, NULL, 0,
+ NULL, NULL, NULL, 0, 0, msg);
+}
+
+/************************************************************************
+ * *
+ * The implementation internals *
+ * *
+ ************************************************************************/
+#define XML_NAMESPACES_DEFAULT 16
+
+static int
+xmlC14NIsNodeInNodeset(xmlNodeSetPtr nodes, xmlNodePtr node, xmlNodePtr parent) {
+ if((nodes != NULL) && (node != NULL)) {
+ if(node->type != XML_NAMESPACE_DECL) {
+ return(xmlXPathNodeSetContains(nodes, node));
+ } else {
+ xmlNs ns;
+
+ memcpy(&ns, node, sizeof(ns));
+ ns.next = (xmlNsPtr)parent; /* this is a libxml hack! check xpath.c for details */
+
+ /*
+ * If the input is an XPath node-set, then the node-set must explicitly
+ * contain every node to be rendered to the canonical form.
+ */
+ return(xmlXPathNodeSetContains(nodes, (xmlNodePtr)&ns));
+ }
+ }
+ return(1);
+}
+
+static xmlC14NVisibleNsStackPtr
+xmlC14NVisibleNsStackCreate(void) {
+ xmlC14NVisibleNsStackPtr ret;
+
+ ret = (xmlC14NVisibleNsStackPtr) xmlMalloc(sizeof(xmlC14NVisibleNsStack));
+ if (ret == NULL) {
+ xmlC14NErrMemory("creating stack");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlC14NVisibleNsStack));
+ return(ret);
+}
+
+static void
+xmlC14NVisibleNsStackDestroy(xmlC14NVisibleNsStackPtr cur) {
+ if(cur == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NVisibleNsStackDestroy: cur is null.\n");
+#endif
+ return;
+ }
+ if(cur->nsTab != NULL) {
+ memset(cur->nsTab, 0, cur->nsMax * sizeof(xmlNsPtr));
+ xmlFree(cur->nsTab);
+ }
+ if(cur->nodeTab != NULL) {
+ memset(cur->nodeTab, 0, cur->nsMax * sizeof(xmlNodePtr));
+ xmlFree(cur->nodeTab);
+ }
+ memset(cur, 0, sizeof(xmlC14NVisibleNsStack));
+ xmlFree(cur);
+
+}
+
+static void
+xmlC14NVisibleNsStackAdd(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlNodePtr node) {
+ if((cur == NULL) ||
+ ((cur->nsTab == NULL) && (cur->nodeTab != NULL)) ||
+ ((cur->nsTab != NULL) && (cur->nodeTab == NULL))) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NVisibleNsStackAdd: cur is null.\n");
+#endif
+ return;
+ }
+
+ if ((cur->nsTab == NULL) && (cur->nodeTab == NULL)) {
+ cur->nsTab = (xmlNsPtr*) xmlMalloc(XML_NAMESPACES_DEFAULT * sizeof(xmlNsPtr));
+ cur->nodeTab = (xmlNodePtr*) xmlMalloc(XML_NAMESPACES_DEFAULT * sizeof(xmlNodePtr));
+ if ((cur->nsTab == NULL) || (cur->nodeTab == NULL)) {
+ xmlC14NErrMemory("adding node to stack");
+ return;
+ }
+ memset(cur->nsTab, 0 , XML_NAMESPACES_DEFAULT * sizeof(xmlNsPtr));
+ memset(cur->nodeTab, 0 , XML_NAMESPACES_DEFAULT * sizeof(xmlNodePtr));
+ cur->nsMax = XML_NAMESPACES_DEFAULT;
+ } else if(cur->nsMax == cur->nsCurEnd) {
+ void *tmp;
+ int tmpSize;
+
+ tmpSize = 2 * cur->nsMax;
+ tmp = xmlRealloc(cur->nsTab, tmpSize * sizeof(xmlNsPtr));
+ if (tmp == NULL) {
+ xmlC14NErrMemory("adding node to stack");
+ return;
+ }
+ cur->nsTab = (xmlNsPtr*)tmp;
+
+ tmp = xmlRealloc(cur->nodeTab, tmpSize * sizeof(xmlNodePtr));
+ if (tmp == NULL) {
+ xmlC14NErrMemory("adding node to stack");
+ return;
+ }
+ cur->nodeTab = (xmlNodePtr*)tmp;
+
+ cur->nsMax = tmpSize;
+ }
+ cur->nsTab[cur->nsCurEnd] = ns;
+ cur->nodeTab[cur->nsCurEnd] = node;
+
+ ++cur->nsCurEnd;
+}
+
+static void
+xmlC14NVisibleNsStackSave(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr state) {
+ if((cur == NULL) || (state == NULL)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NVisibleNsStackSave: cur or state is null.\n");
+#endif
+ return;
+ }
+
+ state->nsCurEnd = cur->nsCurEnd;
+ state->nsPrevStart = cur->nsPrevStart;
+ state->nsPrevEnd = cur->nsPrevEnd;
+}
+
+static void
+xmlC14NVisibleNsStackRestore(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr state) {
+ if((cur == NULL) || (state == NULL)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NVisibleNsStackRestore: cur or state is null.\n");
+#endif
+ return;
+ }
+ cur->nsCurEnd = state->nsCurEnd;
+ cur->nsPrevStart = state->nsPrevStart;
+ cur->nsPrevEnd = state->nsPrevEnd;
+}
+
+static void
+xmlC14NVisibleNsStackShift(xmlC14NVisibleNsStackPtr cur) {
+ if(cur == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NVisibleNsStackRestore: cur is null.\n");
+#endif
+ return;
+ }
+ cur->nsPrevStart = cur->nsPrevEnd;
+ cur->nsPrevEnd = cur->nsCurEnd;
+}
+
+static int
+xmlC14NStrEqual(const xmlChar *str1, const xmlChar *str2) {
+ if (str1 == str2) return(1);
+ if (str1 == NULL) return((*str2) == '\0');
+ if (str2 == NULL) return((*str1) == '\0');
+ do {
+ if (*str1++ != *str2) return(0);
+ } while (*str2++);
+ return(1);
+}
+
+/**
+ * xmlC14NVisibleNsStackFind:
+ * @ctx: the C14N context
+ * @ns: the namespace to check
+ *
+ * Checks whether the given namespace was already rendered or not
+ *
+ * Returns 1 if we already wrote this namespace or 0 otherwise
+ */
+static int
+xmlC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns)
+{
+ int i;
+ const xmlChar *prefix;
+ const xmlChar *href;
+ int has_empty_ns;
+
+ if(cur == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NVisibleNsStackFind: cur is null.\n");
+#endif
+ return (0);
+ }
+
+ /*
+ * if the default namespace xmlns="" is not defined yet then
+ * we do not want to print it out
+ */
+ prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix;
+ href = ((ns == NULL) || (ns->href == NULL)) ? BAD_CAST "" : ns->href;
+ has_empty_ns = (xmlC14NStrEqual(prefix, NULL) && xmlC14NStrEqual(href, NULL));
+
+ if (cur->nsTab != NULL) {
+ int start = (has_empty_ns) ? 0 : cur->nsPrevStart;
+ for (i = cur->nsCurEnd - 1; i >= start; --i) {
+ xmlNsPtr ns1 = cur->nsTab[i];
+
+ if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) {
+ return(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL));
+ }
+ }
+ }
+ return(has_empty_ns);
+}
+
+static int
+xmlExcC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NCtxPtr ctx) {
+ int i;
+ const xmlChar *prefix;
+ const xmlChar *href;
+ int has_empty_ns;
+
+ if(cur == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlExcC14NVisibleNsStackFind: cur is null.\n");
+#endif
+ return (0);
+ }
+
+ /*
+ * if the default namespace xmlns="" is not defined yet then
+ * we do not want to print it out
+ */
+ prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix;
+ href = ((ns == NULL) || (ns->href == NULL)) ? BAD_CAST "" : ns->href;
+ has_empty_ns = (xmlC14NStrEqual(prefix, NULL) && xmlC14NStrEqual(href, NULL));
+
+ if (cur->nsTab != NULL) {
+ int start = 0;
+ for (i = cur->nsCurEnd - 1; i >= start; --i) {
+ xmlNsPtr ns1 = cur->nsTab[i];
+
+ if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) {
+ if(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL)) {
+ return(xmlC14NIsVisible(ctx, ns1, cur->nodeTab[i]));
+ } else {
+ return(0);
+ }
+ }
+ }
+ }
+ return(has_empty_ns);
+}
+
+
+
+
+/**
+ * xmlC14NIsXmlNs:
+ * @ns: the namespace to check
+ *
+ * Checks whether the given namespace is a default "xml:" namespace
+ * with href="http://www.w3.org/XML/1998/namespace"
+ *
+ * Returns 1 if the node is default or 0 otherwise
+ */
+
+/* todo: make it a define? */
+static int
+xmlC14NIsXmlNs(xmlNsPtr ns)
+{
+ return ((ns != NULL) &&
+ (xmlStrEqual(ns->prefix, BAD_CAST "xml")) &&
+ (xmlStrEqual(ns->href,
+ BAD_CAST
+ "http://www.w3.org/XML/1998/namespace")));
+}
+
+
+/**
+ * xmlC14NNsCompare:
+ * @ns1: the pointer to first namespace
+ * @ns2: the pointer to second namespace
+ *
+ * Compares the namespaces by names (prefixes).
+ *
+ * Returns -1 if ns1 < ns2, 0 if ns1 == ns2 or 1 if ns1 > ns2.
+ */
+static int
+xmlC14NNsCompare(xmlNsPtr ns1, xmlNsPtr ns2)
+{
+ if (ns1 == ns2)
+ return (0);
+ if (ns1 == NULL)
+ return (-1);
+ if (ns2 == NULL)
+ return (1);
+
+ return (xmlStrcmp(ns1->prefix, ns2->prefix));
+}
+
+
+/**
+ * xmlC14NPrintNamespaces:
+ * @ns: the pointer to namespace
+ * @ctx: the C14N context
+ *
+ * Prints the given namespace to the output buffer from C14N context.
+ *
+ * Returns 1 on success or 0 on fail.
+ */
+static int
+xmlC14NPrintNamespaces(const xmlNsPtr ns, xmlC14NCtxPtr ctx)
+{
+
+ if ((ns == NULL) || (ctx == NULL)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NPrintNamespace: namespace or context pointer is null\n");
+#endif
+ return 0;
+ }
+
+ if (ns->prefix != NULL) {
+ xmlOutputBufferWriteString(ctx->buf, " xmlns:");
+ xmlOutputBufferWriteString(ctx->buf, (const char *) ns->prefix);
+ xmlOutputBufferWriteString(ctx->buf, "=\"");
+ } else {
+ xmlOutputBufferWriteString(ctx->buf, " xmlns=\"");
+ }
+ if(ns->href != NULL) {
+ xmlOutputBufferWriteString(ctx->buf, (const char *) ns->href);
+ }
+ xmlOutputBufferWriteString(ctx->buf, "\"");
+ return (1);
+}
+
+/**
+ * xmlC14NProcessNamespacesAxis:
+ * @ctx: the C14N context
+ * @node: the current node
+ *
+ * Prints out canonical namespace axis of the current node to the
+ * buffer from C14N context as follows
+ *
+ * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
+ *
+ * Namespace Axis
+ * Consider a list L containing only namespace nodes in the
+ * axis and in the node-set in lexicographic order (ascending). To begin
+ * processing L, if the first node is not the default namespace node (a node
+ * with no namespace URI and no local name), then generate a space followed
+ * by xmlns="" if and only if the following conditions are met:
+ * - the element E that owns the axis is in the node-set
+ * - The nearest ancestor element of E in the node-set has a default
+ * namespace node in the node-set (default namespace nodes always
+ * have non-empty values in XPath)
+ * The latter condition eliminates unnecessary occurrences of xmlns="" in
+ * the canonical form since an element only receives an xmlns="" if its
+ * default namespace is empty and if it has an immediate parent in the
+ * canonical form that has a non-empty default namespace. To finish
+ * processing L, simply process every namespace node in L, except omit
+ * namespace node with local name xml, which defines the xml prefix,
+ * if its string value is http://www.w3.org/XML/1998/namespace.
+ *
+ * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n)
+ * Canonical XML applied to a document subset requires the search of the
+ * ancestor nodes of each orphan element node for attributes in the xml
+ * namespace, such as xml:lang and xml:space. These are copied into the
+ * element node except if a declaration of the same attribute is already
+ * in the attribute axis of the element (whether or not it is included in
+ * the document subset). This search and copying are omitted from the
+ * Exclusive XML Canonicalization method.
+ *
+ * Returns 0 on success or -1 on fail.
+ */
+static int
+xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
+{
+ xmlNodePtr n;
+ xmlNsPtr ns, tmp;
+ xmlListPtr list;
+ int already_rendered;
+ int has_empty_ns = 0;
+
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNamespacesAxis: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
+ }
+
+ /*
+ * Create a sorted list to store element namespaces
+ */
+ list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NNsCompare);
+ if (list == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNamespacesAxis: list creation failed\n");
+#endif
+ return (-1);
+ }
+
+ /* check all namespaces */
+ for(n = cur; n != NULL; n = n->parent) {
+ for(ns = n->nsDef; ns != NULL; ns = ns->next) {
+ tmp = xmlSearchNs(cur->doc, cur, ns->prefix);
+
+ if((tmp == ns) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) {
+ already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns);
+ if(visible) {
+ xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
+ }
+ if(!already_rendered) {
+ xmlListInsert(list, ns);
+ }
+ if(xmlStrlen(ns->prefix) == 0) {
+ has_empty_ns = 1;
+ }
+ }
+ }
+ }
+
+ /**
+ * if the first node is not the default namespace node (a node with no
+ * namespace URI and no local name), then generate a space followed by
+ * xmlns="" if and only if the following conditions are met:
+ * - the element E that owns the axis is in the node-set
+ * - the nearest ancestor element of E in the node-set has a default
+ * namespace node in the node-set (default namespace nodes always
+ * have non-empty values in XPath)
+ */
+ if(visible && !has_empty_ns) {
+ static xmlNs ns_default;
+
+ memset(&ns_default, 0, sizeof(ns_default));
+ if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) {
+ xmlC14NPrintNamespaces(&ns_default, ctx);
+ }
+ }
+
+
+ /*
+ * print out all elements from list
+ */
+ xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx);
+
+ /*
+ * Cleanup
+ */
+ xmlListDelete(list);
+ return (0);
+}
+
+
+/**
+ * xmlExcC14NProcessNamespacesAxis:
+ * @ctx: the C14N context
+ * @node: the current node
+ *
+ * Prints out exclusive canonical namespace axis of the current node to the
+ * buffer from C14N context as follows
+ *
+ * Exclusive XML Canonicalization
+ * http://www.w3.org/TR/xml-exc-c14n
+ *
+ * If the element node is in the XPath subset then output the node in
+ * accordance with Canonical XML except for namespace nodes which are
+ * rendered as follows:
+ *
+ * 1. Render each namespace node iff:
+ * * it is visibly utilized by the immediate parent element or one of
+ * its attributes, or is present in InclusiveNamespaces PrefixList, and
+ * * its prefix and value do not appear in ns_rendered. ns_rendered is
+ * obtained by popping the state stack in order to obtain a list of
+ * prefixes and their values which have already been rendered by
+ * an output ancestor of the namespace node's parent element.
+ * 2. Append the rendered namespace node to the list ns_rendered of namespace
+ * nodes rendered by output ancestors. Push ns_rendered on state stack and
+ * recurse.
+ * 3. After the recursion returns, pop thestate stack.
+ *
+ *
+ * Returns 0 on success or -1 on fail.
+ */
+static int
+xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
+{
+ xmlNsPtr ns;
+ xmlListPtr list;
+ xmlAttrPtr attr;
+ int already_rendered;
+ int has_empty_ns = 0;
+ int has_visibly_utilized_empty_ns = 0;
+ int has_empty_ns_in_inclusive_list = 0;
+
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlExcC14NProcessNamespacesAxis: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
+ }
+
+ if(!ctx->exclusive) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlExcC14NProcessNamespacesAxis: called for non-exclusive canonization or rendered stack is NULL.\n");
+#endif
+ return (-1);
+
+ }
+
+ /*
+ * Create a sorted list to store element namespaces
+ */
+ list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NNsCompare);
+ if (list == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlExcC14NProcessNamespacesAxis: list creation failed\n");
+#endif
+ return (-1);
+ }
+
+ /*
+ * process inclusive namespaces:
+ * All namespace nodes appearing on inclusive ns list are
+ * handled as provided in Canonical XML
+ */
+ if(ctx->inclusive_ns_prefixes != NULL) {
+ xmlChar *prefix;
+ int i;
+
+ for (i = 0; ctx->inclusive_ns_prefixes[i] != NULL; ++i) {
+ prefix = ctx->inclusive_ns_prefixes[i];
+ /*
+ * Special values for namespace with empty prefix
+ */
+ if (xmlStrEqual(prefix, BAD_CAST "#default")
+ || xmlStrEqual(prefix, BAD_CAST "")) {
+ prefix = NULL;
+ has_empty_ns_in_inclusive_list = 1;
+ }
+
+ ns = xmlSearchNs(cur->doc, cur, prefix);
+ if((ns != NULL) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) {
+ already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns);
+ if(visible) {
+ xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
+ }
+ if(!already_rendered) {
+ xmlListInsert(list, ns);
+ }
+ if(xmlStrlen(ns->prefix) == 0) {
+ has_empty_ns = 1;
+ }
+ }
+ }
+ }
+
+ /* add node namespace */
+ if(cur->ns != NULL) {
+ ns = cur->ns;
+ } else {
+ ns = xmlSearchNs(cur->doc, cur, NULL);
+ has_visibly_utilized_empty_ns = 1;
+ }
+ if((ns != NULL) && !xmlC14NIsXmlNs(ns)) {
+ if(visible && xmlC14NIsVisible(ctx, ns, cur)) {
+ if(!xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, ns, ctx)) {
+ xmlListInsert(list, ns);
+ }
+ }
+ if(visible) {
+ xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
+ }
+ if(xmlStrlen(ns->prefix) == 0) {
+ has_empty_ns = 1;
+ }
+ }
+
+
+ /* add attributes */
+ for(attr = cur->properties; attr != NULL; attr = attr->next) {
+ /*
+ * we need to check that attribute is visible and has non
+ * default namespace (XML Namespaces: "default namespaces
+ * do not apply directly to attributes")
+ */
+ if((attr->ns != NULL) && xmlC14NIsVisible(ctx, attr, cur)) {
+ already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, attr->ns, ctx);
+ xmlC14NVisibleNsStackAdd(ctx->ns_rendered, attr->ns, (xmlNodePtr)attr);
+ if(!already_rendered && visible) {
+ xmlListInsert(list, attr->ns);
+ }
+ if(xmlStrlen(attr->ns->prefix) == 0) {
+ has_empty_ns = 1;
+ }
+ } else if(attr->ns == NULL) {
+ has_visibly_utilized_empty_ns = 1;
+ }
+ }
+
+ /*
+ * Process xmlns=""
+ */
+ if(visible && has_visibly_utilized_empty_ns &&
+ !has_empty_ns && !has_empty_ns_in_inclusive_list) {
+ static xmlNs ns_default;
+
+ memset(&ns_default, 0, sizeof(ns_default));
+
+ already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default, ctx);
+ if(!already_rendered) {
+ xmlC14NPrintNamespaces(&ns_default, ctx);
+ }
+ } else if(visible && !has_empty_ns && has_empty_ns_in_inclusive_list) {
+ static xmlNs ns_default;
+
+ memset(&ns_default, 0, sizeof(ns_default));
+ if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) {
+ xmlC14NPrintNamespaces(&ns_default, ctx);
+ }
+ }
+
+
+
+ /*
+ * print out all elements from list
+ */
+ xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx);
+
+ /*
+ * Cleanup
+ */
+ xmlListDelete(list);
+ return (0);
+}
+
+
+/**
+ * xmlC14NAttrsCompare:
+ * @attr1: the pointer tls o first attr
+ * @attr2: the pointer to second attr
+ *
+ * Prints the given attribute to the output buffer from C14N context.
+ *
+ * Returns -1 if attr1 < attr2, 0 if attr1 == attr2 or 1 if attr1 > attr2.
+ */
+static int
+xmlC14NAttrsCompare(xmlAttrPtr attr1, xmlAttrPtr attr2)
+{
+ int ret = 0;
+
+ /*
+ * Simple cases
+ */
+ if (attr1 == attr2)
+ return (0);
+ if (attr1 == NULL)
+ return (-1);
+ if (attr2 == NULL)
+ return (1);
+ if (attr1->ns == attr2->ns) {
+ return (xmlStrcmp(attr1->name, attr2->name));
+ }
+
+ /*
+ * Attributes in the default namespace are first
+ * because the default namespace is not applied to
+ * unqualified attributes
+ */
+ if (attr1->ns == NULL)
+ return (-1);
+ if (attr2->ns == NULL)
+ return (1);
+ if (attr1->ns->prefix == NULL)
+ return (-1);
+ if (attr2->ns->prefix == NULL)
+ return (1);
+
+ ret = xmlStrcmp(attr1->ns->href, attr2->ns->href);
+ if (ret == 0) {
+ ret = xmlStrcmp(attr1->name, attr2->name);
+ }
+ return (ret);
+}
+
+
+/**
+ * xmlC14NPrintAttrs:
+ * @attr: the pointer to attr
+ * @ctx: the C14N context
+ *
+ * Prints out canonical attribute urrent node to the
+ * buffer from C14N context as follows
+ *
+ * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
+ *
+ * Returns 1 on success or 0 on fail.
+ */
+static int
+xmlC14NPrintAttrs(const xmlAttrPtr attr, xmlC14NCtxPtr ctx)
+{
+ xmlChar *value;
+ xmlChar *buffer;
+
+ if ((attr == NULL) || (ctx == NULL)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NPrintAttrs: attr == NULL or ctx == NULL\n");
+#endif
+ return (0);
+ }
+
+ xmlOutputBufferWriteString(ctx->buf, " ");
+ if (attr->ns != NULL && xmlStrlen(attr->ns->prefix) > 0) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) attr->ns->prefix);
+ xmlOutputBufferWriteString(ctx->buf, ":");
+ }
+ xmlOutputBufferWriteString(ctx->buf, (const char *) attr->name);
+ xmlOutputBufferWriteString(ctx->buf, "=\"");
+
+ value = xmlNodeListGetString(attr->doc, attr->children, 1);
+ /* todo: should we log an error if value==NULL ? */
+ if (value != NULL) {
+ buffer = xmlC11NNormalizeAttr(value);
+ xmlFree(value);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(ctx->buf, (const char *) buffer);
+ xmlFree(buffer);
+ } else {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NPrintAttrs: xmlC11NNormalizeAttr failed\n");
+#endif
+ return (0);
+ }
+ }
+ xmlOutputBufferWriteString(ctx->buf, "\"");
+ return (1);
+}
+
+/**
+ * xmlC14NProcessAttrsAxis:
+ * @ctx: the C14N context
+ * @cur: the current node
+ *
+ * Prints out canonical attribute axis of the current node to the
+ * buffer from C14N context as follows
+ *
+ * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
+ *
+ * Attribute Axis
+ * In lexicographic order (ascending), process each node that
+ * is in the element's attribute axis and in the node-set.
+ *
+ * The processing of an element node E MUST be modified slightly
+ * when an XPath node-set is given as input and the element's
+ * parent is omitted from the node-set.
+ *
+ *
+ * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n)
+ *
+ * Canonical XML applied to a document subset requires the search of the
+ * ancestor nodes of each orphan element node for attributes in the xml
+ * namespace, such as xml:lang and xml:space. These are copied into the
+ * element node except if a declaration of the same attribute is already
+ * in the attribute axis of the element (whether or not it is included in
+ * the document subset). This search and copying are omitted from the
+ * Exclusive XML Canonicalization method.
+ *
+ * Returns 0 on success or -1 on fail.
+ */
+static int
+xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
+ xmlAttrPtr attr;
+ xmlListPtr list;
+
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessAttrsAxis: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
+ }
+
+ /*
+ * Create a sorted list to store element attributes
+ */
+ list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NAttrsCompare);
+ if (list == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessAttrsAxis: list creation failed\n");
+#endif
+ return (-1);
+ }
+
+ /*
+ * Add all visible attributes from current node.
+ */
+ attr = cur->properties;
+ while (attr != NULL) {
+ /* check that attribute is visible */
+ if (xmlC14NIsVisible(ctx, attr, cur)) {
+ xmlListInsert(list, attr);
+ }
+ attr = attr->next;
+ }
+
+ /*
+ * include attributes in "xml" namespace defined in ancestors
+ * (only for non-exclusive XML Canonicalization)
+ */
+ if ((!ctx->exclusive) && (cur->parent != NULL)
+ && (!xmlC14NIsVisible(ctx, cur->parent, cur->parent->parent))) {
+ /*
+ * If XPath node-set is not specified then the parent is always
+ * visible!
+ */
+ cur = cur->parent;
+ while (cur != NULL) {
+ attr = cur->properties;
+ while (attr != NULL) {
+ if ((attr->ns != NULL)
+ && (xmlStrEqual(attr->ns->prefix, BAD_CAST "xml"))) {
+ if (xmlListSearch(list, attr) == NULL) {
+ xmlListInsert(list, attr);
+ }
+ }
+ attr = attr->next;
+ }
+ cur = cur->parent;
+ }
+ }
+
+ /*
+ * print out all elements from list
+ */
+ xmlListWalk(list, (xmlListWalker) xmlC14NPrintAttrs, (const void *) ctx);
+
+ /*
+ * Cleanup
+ */
+ xmlListDelete(list);
+ return (0);
+}
+
+/**
+ * xmlC14NCheckForRelativeNamespaces:
+ * @ctx: the C14N context
+ * @cur: the current element node
+ *
+ * Checks that current element node has no relative namespaces defined
+ *
+ * Returns 0 if the node has no relative namespaces or -1 otherwise.
+ */
+static int
+xmlC14NCheckForRelativeNamespaces(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
+ xmlNsPtr ns;
+
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NCheckForRelativeNamespaces: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
+ }
+
+ ns = cur->nsDef;
+ while (ns != NULL) {
+ if (xmlStrlen(ns->href) > 0) {
+ xmlURIPtr uri;
+
+ uri = xmlParseURI((const char *) ns->href);
+ if (uri == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NCheckForRelativeNamespaces: unable to parse uri=\"%s\".\n",
+ ns->href);
+#endif
+ return (-1);
+ }
+ if (xmlStrlen((const xmlChar *) uri->scheme) == 0) {
+ xmlFreeURI(uri);
+ return (-1);
+ }
+ if ((!xmlStrEqual
+ ((const xmlChar *) uri->scheme, BAD_CAST "urn"))
+ && (xmlStrlen((const xmlChar *) uri->server) == 0)) {
+ xmlFreeURI(uri);
+ return (-1);
+ }
+ xmlFreeURI(uri);
+ }
+ ns = ns->next;
+ }
+ return (0);
+}
+
+/**
+ * xmlC14NProcessElementNode:
+ * @ctx: the pointer to C14N context object
+ * @cur: the node to process
+ *
+ * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
+ *
+ * Element Nodes
+ * If the element is not in the node-set, then the result is obtained
+ * by processing the namespace axis, then the attribute axis, then
+ * processing the child nodes of the element that are in the node-set
+ * (in document order). If the element is in the node-set, then the result
+ * is an open angle bracket (<), the element QName, the result of
+ * processing the namespace axis, the result of processing the attribute
+ * axis, a close angle bracket (>), the result of processing the child
+ * nodes of the element that are in the node-set (in document order), an
+ * open angle bracket, a forward slash (/), the element QName, and a close
+ * angle bracket.
+ *
+ * Returns non-negative value on success or negative value on fail
+ */
+static int
+xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
+{
+ int ret;
+ xmlC14NVisibleNsStack state;
+ int parent_is_doc = 0;
+
+ if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessElementNode: Null context or node pointer or type != XML_ELEMENT_NODE.\n");
+#endif
+ return (-1);
+ }
+
+ /*
+ * Check relative relative namespaces:
+ * implementations of XML canonicalization MUST report an operation
+ * failure on documents containing relative namespace URIs.
+ */
+ if (xmlC14NCheckForRelativeNamespaces(ctx, cur) < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessElementNode: xmlC14NCheckForRelativeNamespaces failed.\n");
+#endif
+ return (-1);
+ }
+
+
+ /*
+ * Save ns_rendered stack position
+ */
+ xmlC14NVisibleNsStackSave(ctx->ns_rendered, &state);
+
+ if (visible) {
+ if (ctx->parent_is_doc) {
+ /* save this flag into the stack */
+ parent_is_doc = ctx->parent_is_doc;
+ ctx->parent_is_doc = 0;
+ ctx->pos = XMLC14N_INSIDE_DOCUMENT_ELEMENT;
+ }
+ xmlOutputBufferWriteString(ctx->buf, "<");
+
+ if ((cur->ns != NULL) && (xmlStrlen(cur->ns->prefix) > 0)) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) cur->ns->prefix);
+ xmlOutputBufferWriteString(ctx->buf, ":");
+ }
+ xmlOutputBufferWriteString(ctx->buf, (const char *) cur->name);
+ }
+
+ if (!ctx->exclusive) {
+ ret = xmlC14NProcessNamespacesAxis(ctx, cur, visible);
+ } else {
+ ret = xmlExcC14NProcessNamespacesAxis(ctx, cur, visible);
+ }
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessElementNode: xmlC14NProcessNamespacesAxis failed.\n");
+#endif
+ return (-1);
+ }
+ /* todo: shouldn't this go to "visible only"? */
+ if(visible) {
+ xmlC14NVisibleNsStackShift(ctx->ns_rendered);
+ }
+
+ if(visible) {
+ ret = xmlC14NProcessAttrsAxis(ctx, cur);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessElementNode: xmlC14NProcessAttrsAxis failed.\n");
+#endif
+ return (-1);
+ }
+ }
+
+ if (visible) {
+ xmlOutputBufferWriteString(ctx->buf, ">");
+ }
+ if (cur->children != NULL) {
+ ret = xmlC14NProcessNodeList(ctx, cur->children);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessElementNode: xmlC14NProcessNodeList failed.\n");
+#endif
+ return (-1);
+ }
+ }
+ if (visible) {
+ xmlOutputBufferWriteString(ctx->buf, "</");
+ if ((cur->ns != NULL) && (xmlStrlen(cur->ns->prefix) > 0)) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) cur->ns->prefix);
+ xmlOutputBufferWriteString(ctx->buf, ":");
+ }
+ xmlOutputBufferWriteString(ctx->buf, (const char *) cur->name);
+ xmlOutputBufferWriteString(ctx->buf, ">");
+ if (parent_is_doc) {
+ /* restore this flag from the stack for next node */
+ ctx->parent_is_doc = parent_is_doc;
+ ctx->pos = XMLC14N_AFTER_DOCUMENT_ELEMENT;
+ }
+ }
+
+ /*
+ * Restore ns_rendered stack position
+ */
+ xmlC14NVisibleNsStackRestore(ctx->ns_rendered, &state);
+ return (0);
+}
+
+/**
+ * xmlC14NProcessNode:
+ * @ctx: the pointer to C14N context object
+ * @cur: the node to process
+ *
+ * Processes the given node
+ *
+ * Returns non-negative value on success or negative value on fail
+ */
+static int
+xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
+ int ret = 0;
+ int visible;
+
+ if ((ctx == NULL) || (cur == NULL)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: Null context or node pointer.\n");
+#endif
+ return (-1);
+ }
+
+ visible = xmlC14NIsVisible(ctx, cur, cur->parent);
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ ret = xmlC14NProcessElementNode(ctx, cur, visible);
+ break;
+ case XML_CDATA_SECTION_NODE:
+ case XML_TEXT_NODE:
+ /*
+ * Text Nodes
+ * the string value, except all ampersands are replaced
+ * by &amp;, all open angle brackets (<) are replaced by &lt;, all closing
+ * angle brackets (>) are replaced by &gt;, and all #xD characters are
+ * replaced by &#xD;.
+ */
+ /* cdata sections are processed as text nodes */
+ /* todo: verify that cdata sections are included in XPath nodes set */
+ if ((visible) && (cur->content != NULL)) {
+ xmlChar *buffer;
+
+ buffer = xmlC11NNormalizeText(cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) buffer);
+ xmlFree(buffer);
+ } else {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: xmlC11NNormalizeText() failed\n");
+#endif
+ return (-1);
+ }
+ }
+ break;
+ case XML_PI_NODE:
+ /*
+ * Processing Instruction (PI) Nodes-
+ * The opening PI symbol (<?), the PI target name of the node,
+ * a leading space and the string value if it is not empty, and
+ * the closing PI symbol (?>). If the string value is empty,
+ * then the leading space is not added. Also, a trailing #xA is
+ * rendered after the closing PI symbol for PI children of the
+ * root node with a lesser document order than the document
+ * element, and a leading #xA is rendered before the opening PI
+ * symbol of PI children of the root node with a greater document
+ * order than the document element.
+ */
+ if (visible) {
+ if (ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
+ xmlOutputBufferWriteString(ctx->buf, "\x0A<?");
+ } else {
+ xmlOutputBufferWriteString(ctx->buf, "<?");
+ }
+
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) cur->name);
+ if ((cur->content != NULL) && (*(cur->content) != '\0')) {
+ xmlChar *buffer;
+
+ xmlOutputBufferWriteString(ctx->buf, " ");
+
+ /* todo: do we need to normalize pi? */
+ buffer = xmlC11NNormalizePI(cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) buffer);
+ xmlFree(buffer);
+ } else {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: xmlC11NNormalizePI() failed\n");
+#endif
+ return (-1);
+ }
+ }
+
+ if (ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
+ xmlOutputBufferWriteString(ctx->buf, "?>\x0A");
+ } else {
+ xmlOutputBufferWriteString(ctx->buf, "?>");
+ }
+ }
+ break;
+ case XML_COMMENT_NODE:
+ /*
+ * Comment Nodes
+ * Nothing if generating canonical XML without comments. For
+ * canonical XML with comments, generate the opening comment
+ * symbol (<!--), the string value of the node, and the
+ * closing comment symbol (-->). Also, a trailing #xA is rendered
+ * after the closing comment symbol for comment children of the
+ * root node with a lesser document order than the document
+ * element, and a leading #xA is rendered before the opening
+ * comment symbol of comment children of the root node with a
+ * greater document order than the document element. (Comment
+ * children of the root node represent comments outside of the
+ * top-level document element and outside of the document type
+ * declaration).
+ */
+ if (visible && ctx->with_comments) {
+ if (ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
+ xmlOutputBufferWriteString(ctx->buf, "\x0A<!--");
+ } else {
+ xmlOutputBufferWriteString(ctx->buf, "<!--");
+ }
+
+ if (cur->content != NULL) {
+ xmlChar *buffer;
+
+ /* todo: do we need to normalize comment? */
+ buffer = xmlC11NNormalizeComment(cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(ctx->buf,
+ (const char *) buffer);
+ xmlFree(buffer);
+ } else {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: xmlC11NNormalizeComment() failed\n");
+#endif
+ return (-1);
+ }
+ }
+
+ if (ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
+ xmlOutputBufferWriteString(ctx->buf, "-->\x0A");
+ } else {
+ xmlOutputBufferWriteString(ctx->buf, "-->");
+ }
+ }
+ break;
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_FRAG_NODE: /* should be processed as document? */
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE: /* should be processed as document? */
+#endif
+#ifdef LIBXML_HTML_ENABLED
+ case XML_HTML_DOCUMENT_NODE: /* should be processed as document? */
+#endif
+ if (cur->children != NULL) {
+ ctx->pos = XMLC14N_BEFORE_DOCUMENT_ELEMENT;
+ ctx->parent_is_doc = 1;
+ ret = xmlC14NProcessNodeList(ctx, cur->children);
+ }
+ break;
+
+ case XML_ATTRIBUTE_NODE:
+ xmlC14NErr(ctx, cur, XML_C14N_INVALID_NODE,
+ "xmlC14NProcessNode: XML_ATTRIBUTE_NODE is illegal here\n");
+ return (-1);
+ case XML_NAMESPACE_DECL:
+ xmlC14NErr(ctx, cur, XML_C14N_INVALID_NODE,
+ "xmlC14NProcessNode: XML_NAMESPACE_DECL is illegal here\n");
+ return (-1);
+ case XML_ENTITY_REF_NODE:
+ xmlC14NErr(ctx, cur, XML_C14N_INVALID_NODE,
+ "xmlC14NProcessNode: XML_ENTITY_REF_NODE is illegal here\n");
+ return (-1);
+ case XML_ENTITY_NODE:
+ xmlC14NErr(ctx, cur, XML_C14N_INVALID_NODE,
+ "xmlC14NProcessNode: XML_ENTITY_NODE is illegal here\n");
+ return (-1);
+
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+#ifdef LIBXML_XINCLUDE_ENABLED
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+#endif
+ /*
+ * should be ignored according to "W3C Canonical XML"
+ */
+ break;
+ default:
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNode: unknown node type = %d\n",
+ cur->type);
+#endif
+ return (-1);
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlC14NProcessNodeList:
+ * @ctx: the pointer to C14N context object
+ * @cur: the node to start from
+ *
+ * Processes all nodes in the row starting from cur.
+ *
+ * Returns non-negative value on success or negative value on fail
+ */
+static int
+xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur)
+{
+ int ret;
+
+ if (ctx == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NProcessNodeList: Null context pointer.\n");
+#endif
+ return (-1);
+ }
+
+ for (ret = 0; cur != NULL && ret >= 0; cur = cur->next) {
+ ret = xmlC14NProcessNode(ctx, cur);
+ }
+ return (ret);
+}
+
+
+/**
+ * xmlC14NFreeCtx:
+ * @ctx: the pointer to C14N context object
+ *
+ * Cleanups the C14N context object.
+ */
+
+static void
+xmlC14NFreeCtx(xmlC14NCtxPtr ctx)
+{
+ if (ctx == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NFreeCtx: ctx == NULL\n");
+#endif
+ return;
+ }
+
+ if (ctx->ns_rendered != NULL) {
+ xmlC14NVisibleNsStackDestroy(ctx->ns_rendered);
+ }
+ xmlFree(ctx);
+}
+
+/**
+ * xmlC14NNewCtx:
+ * @doc: the XML document for canonization
+ * @is_visible_callback:the function to use to determine is node visible
+ * or not
+ * @user_data: the first parameter for @is_visible_callback function
+ * (in most cases, it is nodes set)
+ * @inclusive_ns_prefixe the list of inclusive namespace prefixes
+ * ended with a NULL or NULL if there is no
+ * inclusive namespaces (only for exclusive
+ * canonicalization)
+ * @with_comments: include comments in the result (!=0) or not (==0)
+ * @buf: the output buffer to store canonical XML; this
+ * buffer MUST have encoder==NULL because C14N requires
+ * UTF-8 output
+ *
+ * Creates new C14N context object to store C14N parameters.
+ *
+ * Returns pointer to newly created object (success) or NULL (fail)
+ */
+static xmlC14NCtxPtr
+xmlC14NNewCtx(xmlDocPtr doc,
+ xmlC14NIsVisibleCallback is_visible_callback, void* user_data,
+ int exclusive, xmlChar ** inclusive_ns_prefixes,
+ int with_comments, xmlOutputBufferPtr buf)
+{
+ xmlC14NCtxPtr ctx = NULL;
+
+ if ((doc == NULL) || (buf == NULL)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NNewCtx: pointer to document or output buffer is NULL\n");
+#endif
+ return (NULL);
+ }
+
+ /*
+ * Validate the encoding output buffer encoding
+ */
+ if (buf->encoder != NULL) {
+ xmlC14NErr(ctx, (xmlNodePtr) doc, XML_C14N_REQUIRES_UTF8,
+"xmlC14NNewCtx: output buffer encoder != NULL but C14N requires UTF8 output\n");
+ return (NULL);
+ }
+
+ /*
+ * Validate the XML document encoding value, if provided.
+ */
+ if (doc->charset != XML_CHAR_ENCODING_UTF8) {
+ xmlC14NErr(ctx, (xmlNodePtr) doc, XML_C14N_REQUIRES_UTF8,
+ "xmlC14NNewCtx: source document not in UTF8\n");
+ return (NULL);
+ }
+
+ /*
+ * Allocate a new xmlC14NCtxPtr and fill the fields.
+ */
+ ctx = (xmlC14NCtxPtr) xmlMalloc(sizeof(xmlC14NCtx));
+ if (ctx == NULL) {
+ xmlC14NErrMemory("creating context");
+ return (NULL);
+ }
+ memset(ctx, 0, sizeof(xmlC14NCtx));
+
+ /*
+ * initialize C14N context
+ */
+ ctx->doc = doc;
+ ctx->with_comments = with_comments;
+ ctx->is_visible_callback = is_visible_callback;
+ ctx->user_data = user_data;
+ ctx->buf = buf;
+ ctx->parent_is_doc = 1;
+ ctx->pos = XMLC14N_BEFORE_DOCUMENT_ELEMENT;
+ ctx->ns_rendered = xmlC14NVisibleNsStackCreate();
+
+ if(ctx->ns_rendered == NULL) {
+ xmlC14NErr(ctx, (xmlNodePtr) doc, XML_C14N_CREATE_STACK,
+ "xmlC14NNewCtx: xmlC14NVisibleNsStackCreate failed\n");
+ xmlC14NFreeCtx(ctx);
+ return (NULL);
+ }
+
+ /*
+ * Set "exclusive" flag, create a nodes set for namespaces
+ * stack and remember list of incluseve prefixes
+ */
+ if (exclusive) {
+ ctx->exclusive = 1;
+ ctx->inclusive_ns_prefixes = inclusive_ns_prefixes;
+ }
+ return (ctx);
+}
+
+/**
+ * xmlC14NExecute:
+ * @doc: the XML document for canonization
+ * @is_visible_callback:the function to use to determine is node visible
+ * or not
+ * @user_data: the first parameter for @is_visible_callback function
+ * (in most cases, it is nodes set)
+ * @exclusive: the exclusive flag (0 - non-exclusive canonicalization;
+ * otherwise - exclusive canonicalization)
+ * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
+ * ended with a NULL or NULL if there is no
+ * inclusive namespaces (only for exclusive
+ * canonicalization, ignored otherwise)
+ * @with_comments: include comments in the result (!=0) or not (==0)
+ * @buf: the output buffer to store canonical XML; this
+ * buffer MUST have encoder==NULL because C14N requires
+ * UTF-8 output
+ *
+ * Dumps the canonized image of given XML document into the provided buffer.
+ * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
+ * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
+ *
+ * Returns non-negative value on success or a negative value on fail
+ */
+int
+xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback,
+ void* user_data, int exclusive, xmlChar **inclusive_ns_prefixes,
+ int with_comments, xmlOutputBufferPtr buf) {
+
+ xmlC14NCtxPtr ctx;
+ int ret;
+
+ if ((buf == NULL) || (doc == NULL)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NExecute: null return buffer or doc pointer\n");
+#endif
+ return (-1);
+ }
+
+ /*
+ * Validate the encoding output buffer encoding
+ */
+ if (buf->encoder != NULL) {
+ xmlC14NErr(NULL, (xmlNodePtr) doc, XML_C14N_REQUIRES_UTF8,
+"xmlC14NExecute: output buffer encoder != NULL but C14N requires UTF8 output\n");
+ return (-1);
+ }
+
+ ctx = xmlC14NNewCtx(doc, is_visible_callback, user_data,
+ exclusive, inclusive_ns_prefixes,
+ with_comments, buf);
+ if (ctx == NULL) {
+ xmlC14NErr(NULL, (xmlNodePtr) doc, XML_C14N_CREATE_CTXT,
+ "xmlC14NExecute: unable to create C14N context\n");
+ return (-1);
+ }
+
+
+
+ /*
+ * Root Node
+ * The root node is the parent of the top-level document element. The
+ * result of processing each of its child nodes that is in the node-set
+ * in document order. The root node does not generate a byte order mark,
+ * XML declaration, nor anything from within the document type
+ * declaration.
+ */
+ if (doc->children != NULL) {
+ ret = xmlC14NProcessNodeList(ctx, doc->children);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NExecute: process childrens' list failed.\n");
+#endif
+ xmlC14NFreeCtx(ctx);
+ return (-1);
+ }
+ }
+
+ /*
+ * Flush buffer to get number of bytes written
+ */
+ ret = xmlOutputBufferFlush(buf);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NExecute: buffer flush failed.\n");
+#endif
+ xmlC14NFreeCtx(ctx);
+ return (-1);
+ }
+
+ /*
+ * Cleanup
+ */
+ xmlC14NFreeCtx(ctx);
+ return (ret);
+}
+
+/**
+ * xmlC14NDocSaveTo:
+ * @doc: the XML document for canonization
+ * @nodes: the nodes set to be included in the canonized image
+ * or NULL if all document nodes should be included
+ * @exclusive: the exclusive flag (0 - non-exclusive canonicalization;
+ * otherwise - exclusive canonicalization)
+ * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
+ * ended with a NULL or NULL if there is no
+ * inclusive namespaces (only for exclusive
+ * canonicalization, ignored otherwise)
+ * @with_comments: include comments in the result (!=0) or not (==0)
+ * @buf: the output buffer to store canonical XML; this
+ * buffer MUST have encoder==NULL because C14N requires
+ * UTF-8 output
+ *
+ * Dumps the canonized image of given XML document into the provided buffer.
+ * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
+ * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
+ *
+ * Returns non-negative value on success or a negative value on fail
+ */
+int
+xmlC14NDocSaveTo(xmlDocPtr doc, xmlNodeSetPtr nodes,
+ int exclusive, xmlChar ** inclusive_ns_prefixes,
+ int with_comments, xmlOutputBufferPtr buf) {
+ return(xmlC14NExecute(doc,
+ (xmlC14NIsVisibleCallback)xmlC14NIsNodeInNodeset,
+ nodes,
+ exclusive,
+ inclusive_ns_prefixes,
+ with_comments,
+ buf));
+}
+
+
+/**
+ * xmlC14NDocDumpMemory:
+ * @doc: the XML document for canonization
+ * @nodes: the nodes set to be included in the canonized image
+ * or NULL if all document nodes should be included
+ * @exclusive: the exclusive flag (0 - non-exclusive canonicalization;
+ * otherwise - exclusive canonicalization)
+ * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
+ * ended with a NULL or NULL if there is no
+ * inclusive namespaces (only for exclusive
+ * canonicalization, ignored otherwise)
+ * @with_comments: include comments in the result (!=0) or not (==0)
+ * @doc_txt_ptr: the memory pointer for allocated canonical XML text;
+ * the caller of this functions is responsible for calling
+ * xmlFree() to free allocated memory
+ *
+ * Dumps the canonized image of given XML document into memory.
+ * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
+ * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
+ *
+ * Returns the number of bytes written on success or a negative value on fail
+ */
+int
+xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes,
+ int exclusive, xmlChar ** inclusive_ns_prefixes,
+ int with_comments, xmlChar ** doc_txt_ptr)
+{
+ int ret;
+ xmlOutputBufferPtr buf;
+
+ if (doc_txt_ptr == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NDocDumpMemory: null return buffer pointer\n");
+#endif
+ return (-1);
+ }
+
+ *doc_txt_ptr = NULL;
+
+ /*
+ * create memory buffer with UTF8 (default) encoding
+ */
+ buf = xmlAllocOutputBuffer(NULL);
+ if (buf == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NDocDumpMemory: failed to allocate output buffer.\n");
+#endif
+ return (-1);
+ }
+
+ /*
+ * canonize document and write to buffer
+ */
+ ret = xmlC14NDocSaveTo(doc, nodes, exclusive, inclusive_ns_prefixes,
+ with_comments, buf);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NDocDumpMemory: xmlC14NDocSaveTo failed.\n");
+#endif
+ (void) xmlOutputBufferClose(buf);
+ return (-1);
+ }
+
+ ret = buf->buffer->use;
+ if (ret > 0) {
+ *doc_txt_ptr = xmlStrndup(buf->buffer->content, ret);
+ }
+ (void) xmlOutputBufferClose(buf);
+
+ if ((*doc_txt_ptr == NULL) && (ret > 0)) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NDocDumpMemory: failed to allocate memory for document text representation\n");
+#endif
+ return (-1);
+ }
+ return (ret);
+}
+
+/**
+ * xmlC14NDocSave:
+ * @doc: the XML document for canonization
+ * @nodes: the nodes set to be included in the canonized image
+ * or NULL if all document nodes should be included
+ * @exclusive: the exclusive flag (0 - non-exclusive canonicalization;
+ * otherwise - exclusive canonicalization)
+ * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
+ * ended with a NULL or NULL if there is no
+ * inclusive namespaces (only for exclusive
+ * canonicalization, ignored otherwise)
+ * @with_comments: include comments in the result (!=0) or not (==0)
+ * @filename: the filename to store canonical XML image
+ * @compression: the compression level (zlib requred):
+ * -1 - libxml default,
+ * 0 - uncompressed,
+ * >0 - compression level
+ *
+ * Dumps the canonized image of given XML document into the file.
+ * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
+ * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
+ *
+ * Returns the number of bytes written success or a negative value on fail
+ */
+int
+xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes,
+ int exclusive, xmlChar ** inclusive_ns_prefixes,
+ int with_comments, const char *filename, int compression)
+{
+ xmlOutputBufferPtr buf;
+ int ret;
+
+ if (filename == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NDocSave: filename is NULL\n");
+#endif
+ return (-1);
+ }
+#ifdef HAVE_ZLIB_H
+ if (compression < 0)
+ compression = xmlGetCompressMode();
+#endif
+
+ /*
+ * save the content to a temp buffer, use default UTF8 encoding.
+ */
+ buf = xmlOutputBufferCreateFilename(filename, NULL, compression);
+ if (buf == NULL) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NDocSave: unable to create buffer for file=\"%s\" with compressin=%d\n",
+ filename, compression);
+#endif
+ return (-1);
+ }
+
+ /*
+ * canonize document and write to buffer
+ */
+ ret = xmlC14NDocSaveTo(doc, nodes, exclusive, inclusive_ns_prefixes,
+ with_comments, buf);
+ if (ret < 0) {
+#ifdef DEBUG_C14N
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlC14NDocSave: xmlC14NDocSaveTo failed.\n");
+#endif
+ (void) xmlOutputBufferClose(buf);
+ return (-1);
+ }
+
+ /*
+ * get the numbers of bytes written
+ */
+ ret = xmlOutputBufferClose(buf);
+ return (ret);
+}
+
+
+
+/*
+ * Macro used to grow the current buffer.
+ */
+#define growBufferReentrant() { \
+ buffer_size *= 2; \
+ buffer = (xmlChar *) \
+ xmlRealloc(buffer, buffer_size * sizeof(xmlChar)); \
+ if (buffer == NULL) { \
+ xmlC14NErrMemory("growing buffer"); \
+ return(NULL); \
+ } \
+}
+
+/**
+ * xmlC11NNormalizeString:
+ * @input: the input string
+ * @mode: the normalization mode (attribute, comment, PI or text)
+ *
+ * Converts a string to a canonical (normalized) format. The code is stolen
+ * from xmlEncodeEntitiesReentrant(). Added normalization of \x09, \x0a, \x0A
+ * and the @mode parameter
+ *
+ * Returns a normalized string (caller is responsible for calling xmlFree())
+ * or NULL if an error occurs
+ */
+static xmlChar *
+xmlC11NNormalizeString(const xmlChar * input,
+ xmlC14NNormalizationMode mode)
+{
+ const xmlChar *cur = input;
+ xmlChar *buffer = NULL;
+ xmlChar *out = NULL;
+ int buffer_size = 0;
+
+ if (input == NULL)
+ return (NULL);
+
+ /*
+ * allocate an translation buffer.
+ */
+ buffer_size = 1000;
+ buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlC14NErrMemory("allocating buffer");
+ return (NULL);
+ }
+ out = buffer;
+
+ while (*cur != '\0') {
+ if ((out - buffer) > (buffer_size - 10)) {
+ int indx = out - buffer;
+
+ growBufferReentrant();
+ out = &buffer[indx];
+ }
+
+ if ((*cur == '<') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
+ (mode == XMLC14N_NORMALIZE_TEXT))) {
+ *out++ = '&';
+ *out++ = 'l';
+ *out++ = 't';
+ *out++ = ';';
+ } else if ((*cur == '>') && (mode == XMLC14N_NORMALIZE_TEXT)) {
+ *out++ = '&';
+ *out++ = 'g';
+ *out++ = 't';
+ *out++ = ';';
+ } else if ((*cur == '&') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
+ (mode == XMLC14N_NORMALIZE_TEXT))) {
+ *out++ = '&';
+ *out++ = 'a';
+ *out++ = 'm';
+ *out++ = 'p';
+ *out++ = ';';
+ } else if ((*cur == '"') && (mode == XMLC14N_NORMALIZE_ATTR)) {
+ *out++ = '&';
+ *out++ = 'q';
+ *out++ = 'u';
+ *out++ = 'o';
+ *out++ = 't';
+ *out++ = ';';
+ } else if ((*cur == '\x09') && (mode == XMLC14N_NORMALIZE_ATTR)) {
+ *out++ = '&';
+ *out++ = '#';
+ *out++ = 'x';
+ *out++ = '9';
+ *out++ = ';';
+ } else if ((*cur == '\x0A') && (mode == XMLC14N_NORMALIZE_ATTR)) {
+ *out++ = '&';
+ *out++ = '#';
+ *out++ = 'x';
+ *out++ = 'A';
+ *out++ = ';';
+ } else if ((*cur == '\x0D') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
+ (mode == XMLC14N_NORMALIZE_TEXT) ||
+ (mode == XMLC14N_NORMALIZE_COMMENT) ||
+ (mode == XMLC14N_NORMALIZE_PI))) {
+ *out++ = '&';
+ *out++ = '#';
+ *out++ = 'x';
+ *out++ = 'D';
+ *out++ = ';';
+ } else {
+ /*
+ * Works because on UTF-8, all extended sequences cannot
+ * result in bytes in the ASCII range.
+ */
+ *out++ = *cur;
+ }
+ cur++;
+ }
+ *out++ = 0;
+ return (buffer);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+#endif /* LIBXML_C14N_ENABLED */
diff --git a/catalog.c b/catalog.c
new file mode 100644
index 0000000..602e16b
--- /dev/null
+++ b/catalog.c
@@ -0,0 +1,3589 @@
+/**
+ * catalog.c: set of generic Catalog related routines
+ *
+ * Reference: SGML Open Technical Resolution TR9401:1997.
+ * http://www.jclark.com/sp/catalog.htm
+ *
+ * XML Catalogs Working Draft 06 August 2001
+ * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel.Veillard@imag.fr
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_CATALOG_ENABLED
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/hash.h>
+#include <libxml/uri.h>
+#include <libxml/parserInternals.h>
+#include <libxml/catalog.h>
+#include <libxml/xmlerror.h>
+#include <libxml/threads.h>
+#include <libxml/globals.h>
+
+#define MAX_DELEGATE 50
+#define MAX_CATAL_DEPTH 50
+
+/**
+ * TODO:
+ *
+ * macro to flag unimplemented blocks
+ * XML_CATALOG_PREFER user env to select between system/public prefered
+ * option. C.f. Richard Tobin <richard@cogsci.ed.ac.uk>
+ *> Just FYI, I am using an environment variable XML_CATALOG_PREFER with
+ *> values "system" and "public". I have made the default be "system" to
+ *> match yours.
+ */
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+#define XML_URN_PUBID "urn:publicid:"
+#define XML_CATAL_BREAK ((xmlChar *) -1)
+#ifndef XML_XML_DEFAULT_CATALOG
+#define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog"
+#endif
+#ifndef XML_SGML_DEFAULT_CATALOG
+#define XML_SGML_DEFAULT_CATALOG "file:///etc/sgml/catalog"
+#endif
+
+static int xmlExpandCatalog(xmlCatalogPtr catal, const char *filename);
+
+/************************************************************************
+ * *
+ * Types, all private *
+ * *
+ ************************************************************************/
+
+typedef enum {
+ XML_CATA_REMOVED = -1,
+ XML_CATA_NONE = 0,
+ XML_CATA_CATALOG,
+ XML_CATA_BROKEN_CATALOG,
+ XML_CATA_NEXT_CATALOG,
+ XML_CATA_PUBLIC,
+ XML_CATA_SYSTEM,
+ XML_CATA_REWRITE_SYSTEM,
+ XML_CATA_DELEGATE_PUBLIC,
+ XML_CATA_DELEGATE_SYSTEM,
+ XML_CATA_URI,
+ XML_CATA_REWRITE_URI,
+ XML_CATA_DELEGATE_URI,
+ SGML_CATA_SYSTEM,
+ SGML_CATA_PUBLIC,
+ SGML_CATA_ENTITY,
+ SGML_CATA_PENTITY,
+ SGML_CATA_DOCTYPE,
+ SGML_CATA_LINKTYPE,
+ SGML_CATA_NOTATION,
+ SGML_CATA_DELEGATE,
+ SGML_CATA_BASE,
+ SGML_CATA_CATALOG,
+ SGML_CATA_DOCUMENT,
+ SGML_CATA_SGMLDECL
+} xmlCatalogEntryType;
+
+typedef struct _xmlCatalogEntry xmlCatalogEntry;
+typedef xmlCatalogEntry *xmlCatalogEntryPtr;
+struct _xmlCatalogEntry {
+ struct _xmlCatalogEntry *next;
+ struct _xmlCatalogEntry *parent;
+ struct _xmlCatalogEntry *children;
+ xmlCatalogEntryType type;
+ xmlChar *name;
+ xmlChar *value;
+ xmlChar *URL; /* The expanded URL using the base */
+ xmlCatalogPrefer prefer;
+ int dealloc;
+ int depth;
+};
+
+typedef enum {
+ XML_XML_CATALOG_TYPE = 1,
+ XML_SGML_CATALOG_TYPE
+} xmlCatalogType;
+
+#define XML_MAX_SGML_CATA_DEPTH 10
+struct _xmlCatalog {
+ xmlCatalogType type; /* either XML or SGML */
+
+ /*
+ * SGML Catalogs are stored as a simple hash table of catalog entries
+ * Catalog stack to check against overflows when building the
+ * SGML catalog
+ */
+ char *catalTab[XML_MAX_SGML_CATA_DEPTH]; /* stack of catals */
+ int catalNr; /* Number of current catal streams */
+ int catalMax; /* Max number of catal streams */
+ xmlHashTablePtr sgml;
+
+ /*
+ * XML Catalogs are stored as a tree of Catalog entries
+ */
+ xmlCatalogPrefer prefer;
+ xmlCatalogEntryPtr xml;
+};
+
+/************************************************************************
+ * *
+ * Global variables *
+ * *
+ ************************************************************************/
+
+/*
+ * Those are preferences
+ */
+static int xmlDebugCatalogs = 0; /* used for debugging */
+static xmlCatalogAllow xmlCatalogDefaultAllow = XML_CATA_ALLOW_ALL;
+static xmlCatalogPrefer xmlCatalogDefaultPrefer = XML_CATA_PREFER_PUBLIC;
+
+/*
+ * Hash table containing all the trees of XML catalogs parsed by
+ * the application.
+ */
+static xmlHashTablePtr xmlCatalogXMLFiles = NULL;
+
+/*
+ * The default catalog in use by the application
+ */
+static xmlCatalogPtr xmlDefaultCatalog = NULL;
+
+/*
+ * A mutex for modifying the shared global catalog(s)
+ * xmlDefaultCatalog tree.
+ * It also protects xmlCatalogXMLFiles
+ * The core of this readers/writer scheme is in xmlFetchXMLCatalogFile()
+ */
+static xmlRMutexPtr xmlCatalogMutex = NULL;
+
+/*
+ * Whether the catalog support was initialized.
+ */
+static int xmlCatalogInitialized = 0;
+
+/************************************************************************
+ * *
+ * Catalog error handlers *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCatalogErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlCatalogErrMemory(const char *extra)
+{
+ __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_CATALOG,
+ XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0,
+ extra, NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+}
+
+/**
+ * xmlCatalogErr:
+ * @catal: the Catalog entry
+ * @node: the context node
+ * @msg: the error message
+ * @extra: extra informations
+ *
+ * Handle a catalog error
+ */
+static void
+xmlCatalogErr(xmlCatalogEntryPtr catal, xmlNodePtr node, int error,
+ const char *msg, const xmlChar *str1, const xmlChar *str2,
+ const xmlChar *str3)
+{
+ __xmlRaiseError(NULL, NULL, NULL, catal, node, XML_FROM_CATALOG,
+ error, XML_ERR_ERROR, NULL, 0,
+ (const char *) str1, (const char *) str2,
+ (const char *) str3, 0, 0,
+ msg, str1, str2, str3);
+}
+
+
+/************************************************************************
+ * *
+ * Allocation and Freeing *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlNewCatalogEntry:
+ * @type: type of entry
+ * @name: name of the entry
+ * @value: value of the entry
+ * @prefer: the PUBLIC vs. SYSTEM current preference value
+ *
+ * create a new Catalog entry, this type is shared both by XML and
+ * SGML catalogs, but the acceptable types values differs.
+ *
+ * Returns the xmlCatalogEntryPtr or NULL in case of error
+ */
+static xmlCatalogEntryPtr
+xmlNewCatalogEntry(xmlCatalogEntryType type, const xmlChar *name,
+ const xmlChar *value, const xmlChar *URL, xmlCatalogPrefer prefer) {
+ xmlCatalogEntryPtr ret;
+
+ ret = (xmlCatalogEntryPtr) xmlMalloc(sizeof(xmlCatalogEntry));
+ if (ret == NULL) {
+ xmlCatalogErrMemory("allocating catalog entry");
+ return(NULL);
+ }
+ ret->next = NULL;
+ ret->parent = NULL;
+ ret->children = NULL;
+ ret->type = type;
+ if (name != NULL)
+ ret->name = xmlStrdup(name);
+ else
+ ret->name = NULL;
+ if (value != NULL)
+ ret->value = xmlStrdup(value);
+ else
+ ret->value = NULL;
+ if (URL == NULL)
+ URL = value;
+ if (URL != NULL)
+ ret->URL = xmlStrdup(URL);
+ else
+ ret->URL = NULL;
+ ret->prefer = prefer;
+ ret->dealloc = 0;
+ ret->depth = 0;
+ return(ret);
+}
+
+static void
+xmlFreeCatalogEntryList(xmlCatalogEntryPtr ret);
+
+/**
+ * xmlFreeCatalogEntry:
+ * @ret: a Catalog entry
+ *
+ * Free the memory allocated to a Catalog entry
+ */
+static void
+xmlFreeCatalogEntry(xmlCatalogEntryPtr ret) {
+ if (ret == NULL)
+ return;
+ /*
+ * Entries stored in the file hash must be deallocated
+ * only by the file hash cleaner !
+ */
+ if (ret->dealloc == 1)
+ return;
+
+ if (xmlDebugCatalogs) {
+ if (ret->name != NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "Free catalog entry %s\n", ret->name);
+ else if (ret->value != NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "Free catalog entry %s\n", ret->value);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "Free catalog entry\n");
+ }
+
+ if (ret->name != NULL)
+ xmlFree(ret->name);
+ if (ret->value != NULL)
+ xmlFree(ret->value);
+ if (ret->URL != NULL)
+ xmlFree(ret->URL);
+ xmlFree(ret);
+}
+
+/**
+ * xmlFreeCatalogEntryList:
+ * @ret: a Catalog entry list
+ *
+ * Free the memory allocated to a full chained list of Catalog entries
+ */
+static void
+xmlFreeCatalogEntryList(xmlCatalogEntryPtr ret) {
+ xmlCatalogEntryPtr next;
+
+ while (ret != NULL) {
+ next = ret->next;
+ xmlFreeCatalogEntry(ret);
+ ret = next;
+ }
+}
+
+/**
+ * xmlFreeCatalogHashEntryList:
+ * @ret: a Catalog entry list
+ *
+ * Free the memory allocated to list of Catalog entries from the
+ * catalog file hash.
+ */
+static void
+xmlFreeCatalogHashEntryList(xmlCatalogEntryPtr catal) {
+ xmlCatalogEntryPtr children, next;
+
+ if (catal == NULL)
+ return;
+
+ children = catal->children;
+ while (children != NULL) {
+ next = children->next;
+ children->dealloc = 0;
+ children->children = NULL;
+ xmlFreeCatalogEntry(children);
+ children = next;
+ }
+ catal->dealloc = 0;
+ xmlFreeCatalogEntry(catal);
+}
+
+/**
+ * xmlCreateNewCatalog:
+ * @type: type of catalog
+ * @prefer: the PUBLIC vs. SYSTEM current preference value
+ *
+ * create a new Catalog, this type is shared both by XML and
+ * SGML catalogs, but the acceptable types values differs.
+ *
+ * Returns the xmlCatalogPtr or NULL in case of error
+ */
+static xmlCatalogPtr
+xmlCreateNewCatalog(xmlCatalogType type, xmlCatalogPrefer prefer) {
+ xmlCatalogPtr ret;
+
+ ret = (xmlCatalogPtr) xmlMalloc(sizeof(xmlCatalog));
+ if (ret == NULL) {
+ xmlCatalogErrMemory("allocating catalog");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlCatalog));
+ ret->type = type;
+ ret->catalNr = 0;
+ ret->catalMax = XML_MAX_SGML_CATA_DEPTH;
+ ret->prefer = prefer;
+ if (ret->type == XML_SGML_CATALOG_TYPE)
+ ret->sgml = xmlHashCreate(10);
+ return(ret);
+}
+
+/**
+ * xmlFreeCatalog:
+ * @catal: a Catalog
+ *
+ * Free the memory allocated to a Catalog
+ */
+void
+xmlFreeCatalog(xmlCatalogPtr catal) {
+ if (catal == NULL)
+ return;
+ if (catal->xml != NULL)
+ xmlFreeCatalogEntryList(catal->xml);
+ if (catal->sgml != NULL)
+ xmlHashFree(catal->sgml,
+ (xmlHashDeallocator) xmlFreeCatalogEntry);
+ xmlFree(catal);
+}
+
+/************************************************************************
+ * *
+ * Serializing Catalogs *
+ * *
+ ************************************************************************/
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlCatalogDumpEntry:
+ * @entry: the catalog entry
+ * @out: the file.
+ *
+ * Serialize an SGML Catalog entry
+ */
+static void
+xmlCatalogDumpEntry(xmlCatalogEntryPtr entry, FILE *out) {
+ if ((entry == NULL) || (out == NULL))
+ return;
+ switch (entry->type) {
+ case SGML_CATA_ENTITY:
+ fprintf(out, "ENTITY "); break;
+ case SGML_CATA_PENTITY:
+ fprintf(out, "ENTITY %%"); break;
+ case SGML_CATA_DOCTYPE:
+ fprintf(out, "DOCTYPE "); break;
+ case SGML_CATA_LINKTYPE:
+ fprintf(out, "LINKTYPE "); break;
+ case SGML_CATA_NOTATION:
+ fprintf(out, "NOTATION "); break;
+ case SGML_CATA_PUBLIC:
+ fprintf(out, "PUBLIC "); break;
+ case SGML_CATA_SYSTEM:
+ fprintf(out, "SYSTEM "); break;
+ case SGML_CATA_DELEGATE:
+ fprintf(out, "DELEGATE "); break;
+ case SGML_CATA_BASE:
+ fprintf(out, "BASE "); break;
+ case SGML_CATA_CATALOG:
+ fprintf(out, "CATALOG "); break;
+ case SGML_CATA_DOCUMENT:
+ fprintf(out, "DOCUMENT "); break;
+ case SGML_CATA_SGMLDECL:
+ fprintf(out, "SGMLDECL "); break;
+ default:
+ return;
+ }
+ switch (entry->type) {
+ case SGML_CATA_ENTITY:
+ case SGML_CATA_PENTITY:
+ case SGML_CATA_DOCTYPE:
+ case SGML_CATA_LINKTYPE:
+ case SGML_CATA_NOTATION:
+ fprintf(out, "%s", (const char *) entry->name); break;
+ case SGML_CATA_PUBLIC:
+ case SGML_CATA_SYSTEM:
+ case SGML_CATA_SGMLDECL:
+ case SGML_CATA_DOCUMENT:
+ case SGML_CATA_CATALOG:
+ case SGML_CATA_BASE:
+ case SGML_CATA_DELEGATE:
+ fprintf(out, "\"%s\"", entry->name); break;
+ default:
+ break;
+ }
+ switch (entry->type) {
+ case SGML_CATA_ENTITY:
+ case SGML_CATA_PENTITY:
+ case SGML_CATA_DOCTYPE:
+ case SGML_CATA_LINKTYPE:
+ case SGML_CATA_NOTATION:
+ case SGML_CATA_PUBLIC:
+ case SGML_CATA_SYSTEM:
+ case SGML_CATA_DELEGATE:
+ fprintf(out, " \"%s\"", entry->value); break;
+ default:
+ break;
+ }
+ fprintf(out, "\n");
+}
+
+static int
+xmlDumpXMLCatalog(FILE *out, xmlCatalogEntryPtr catal) {
+ int ret;
+ xmlDocPtr doc;
+ xmlNsPtr ns;
+ xmlDtdPtr dtd;
+ xmlNodePtr node, catalog;
+ xmlOutputBufferPtr buf;
+ xmlCatalogEntryPtr cur;
+
+ /*
+ * Rebuild a catalog
+ */
+ doc = xmlNewDoc(NULL);
+ if (doc == NULL)
+ return(-1);
+ dtd = xmlNewDtd(doc, BAD_CAST "catalog",
+ BAD_CAST "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN",
+BAD_CAST "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd");
+
+ xmlAddChild((xmlNodePtr) doc, (xmlNodePtr) dtd);
+
+ ns = xmlNewNs(NULL, XML_CATALOGS_NAMESPACE, NULL);
+ if (ns == NULL) {
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+ catalog = xmlNewDocNode(doc, ns, BAD_CAST "catalog", NULL);
+ if (catalog == NULL) {
+ xmlFreeNs(ns);
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+ catalog->nsDef = ns;
+ xmlAddChild((xmlNodePtr) doc, catalog);
+
+ /*
+ * add all the catalog entries
+ */
+ cur = catal;
+ while (cur != NULL) {
+ switch (cur->type) {
+ case XML_CATA_REMOVED:
+ break;
+ case XML_CATA_BROKEN_CATALOG:
+ case XML_CATA_CATALOG:
+ if (cur == catal) {
+ cur = cur->children;
+ continue;
+ }
+ break;
+ case XML_CATA_NEXT_CATALOG:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "nextCatalog", NULL);
+ xmlSetProp(node, BAD_CAST "catalog", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_NONE:
+ break;
+ case XML_CATA_PUBLIC:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "public", NULL);
+ xmlSetProp(node, BAD_CAST "publicId", cur->name);
+ xmlSetProp(node, BAD_CAST "uri", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_SYSTEM:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "system", NULL);
+ xmlSetProp(node, BAD_CAST "systemId", cur->name);
+ xmlSetProp(node, BAD_CAST "uri", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_REWRITE_SYSTEM:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteSystem", NULL);
+ xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_DELEGATE_PUBLIC:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "delegatePublic", NULL);
+ xmlSetProp(node, BAD_CAST "publicIdStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "catalog", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_DELEGATE_SYSTEM:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "delegateSystem", NULL);
+ xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "catalog", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_URI:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "uri", NULL);
+ xmlSetProp(node, BAD_CAST "name", cur->name);
+ xmlSetProp(node, BAD_CAST "uri", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_REWRITE_URI:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteURI", NULL);
+ xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_DELEGATE_URI:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "delegateURI", NULL);
+ xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "catalog", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case SGML_CATA_SYSTEM:
+ case SGML_CATA_PUBLIC:
+ case SGML_CATA_ENTITY:
+ case SGML_CATA_PENTITY:
+ case SGML_CATA_DOCTYPE:
+ case SGML_CATA_LINKTYPE:
+ case SGML_CATA_NOTATION:
+ case SGML_CATA_DELEGATE:
+ case SGML_CATA_BASE:
+ case SGML_CATA_CATALOG:
+ case SGML_CATA_DOCUMENT:
+ case SGML_CATA_SGMLDECL:
+ break;
+ }
+ cur = cur->next;
+ }
+
+ /*
+ * reserialize it
+ */
+ buf = xmlOutputBufferCreateFile(out, NULL);
+ if (buf == NULL) {
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+ ret = xmlSaveFormatFileTo(buf, doc, NULL, 1);
+
+ /*
+ * Free it
+ */
+ xmlFreeDoc(doc);
+
+ return(ret);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ * *
+ * Converting SGML Catalogs to XML *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCatalogConvertEntry:
+ * @entry: the entry
+ * @catal: pointer to the catalog being converted
+ *
+ * Convert one entry from the catalog
+ */
+static void
+xmlCatalogConvertEntry(xmlCatalogEntryPtr entry, xmlCatalogPtr catal) {
+ if ((entry == NULL) || (catal == NULL) || (catal->sgml == NULL) ||
+ (catal->xml == NULL))
+ return;
+ switch (entry->type) {
+ case SGML_CATA_ENTITY:
+ entry->type = XML_CATA_PUBLIC;
+ break;
+ case SGML_CATA_PENTITY:
+ entry->type = XML_CATA_PUBLIC;
+ break;
+ case SGML_CATA_DOCTYPE:
+ entry->type = XML_CATA_PUBLIC;
+ break;
+ case SGML_CATA_LINKTYPE:
+ entry->type = XML_CATA_PUBLIC;
+ break;
+ case SGML_CATA_NOTATION:
+ entry->type = XML_CATA_PUBLIC;
+ break;
+ case SGML_CATA_PUBLIC:
+ entry->type = XML_CATA_PUBLIC;
+ break;
+ case SGML_CATA_SYSTEM:
+ entry->type = XML_CATA_SYSTEM;
+ break;
+ case SGML_CATA_DELEGATE:
+ entry->type = XML_CATA_DELEGATE_PUBLIC;
+ break;
+ case SGML_CATA_CATALOG:
+ entry->type = XML_CATA_CATALOG;
+ break;
+ default:
+ xmlHashRemoveEntry(catal->sgml, entry->name,
+ (xmlHashDeallocator) xmlFreeCatalogEntry);
+ return;
+ }
+ /*
+ * Conversion successful, remove from the SGML catalog
+ * and add it to the default XML one
+ */
+ xmlHashRemoveEntry(catal->sgml, entry->name, NULL);
+ entry->parent = catal->xml;
+ entry->next = NULL;
+ if (catal->xml->children == NULL)
+ catal->xml->children = entry;
+ else {
+ xmlCatalogEntryPtr prev;
+
+ prev = catal->xml->children;
+ while (prev->next != NULL)
+ prev = prev->next;
+ prev->next = entry;
+ }
+}
+
+/**
+ * xmlConvertSGMLCatalog:
+ * @catal: the catalog
+ *
+ * Convert all the SGML catalog entries as XML ones
+ *
+ * Returns the number of entries converted if successful, -1 otherwise
+ */
+int
+xmlConvertSGMLCatalog(xmlCatalogPtr catal) {
+
+ if ((catal == NULL) || (catal->type != XML_SGML_CATALOG_TYPE))
+ return(-1);
+
+ if (xmlDebugCatalogs) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Converting SGML catalog to XML\n");
+ }
+ xmlHashScan(catal->sgml,
+ (xmlHashScanner) xmlCatalogConvertEntry,
+ &catal);
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * Helper function *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCatalogUnWrapURN:
+ * @urn: an "urn:publicid:" to unwrap
+ *
+ * Expand the URN into the equivalent Public Identifier
+ *
+ * Returns the new identifier or NULL, the string must be deallocated
+ * by the caller.
+ */
+static xmlChar *
+xmlCatalogUnWrapURN(const xmlChar *urn) {
+ xmlChar result[2000];
+ unsigned int i = 0;
+
+ if (xmlStrncmp(urn, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1))
+ return(NULL);
+ urn += sizeof(XML_URN_PUBID) - 1;
+
+ while (*urn != 0) {
+ if (i > sizeof(result) - 4)
+ break;
+ if (*urn == '+') {
+ result[i++] = ' ';
+ urn++;
+ } else if (*urn == ':') {
+ result[i++] = '/';
+ result[i++] = '/';
+ urn++;
+ } else if (*urn == ';') {
+ result[i++] = ':';
+ result[i++] = ':';
+ urn++;
+ } else if (*urn == '%') {
+ if ((urn[1] == '2') && (urn[2] == 'B'))
+ result[i++] = '+';
+ else if ((urn[1] == '3') && (urn[2] == 'A'))
+ result[i++] = ':';
+ else if ((urn[1] == '2') && (urn[2] == 'F'))
+ result[i++] = '/';
+ else if ((urn[1] == '3') && (urn[2] == 'B'))
+ result[i++] = ';';
+ else if ((urn[1] == '2') && (urn[2] == '7'))
+ result[i++] = '\'';
+ else if ((urn[1] == '3') && (urn[2] == 'F'))
+ result[i++] = '?';
+ else if ((urn[1] == '2') && (urn[2] == '3'))
+ result[i++] = '#';
+ else if ((urn[1] == '2') && (urn[2] == '5'))
+ result[i++] = '%';
+ else {
+ result[i++] = *urn;
+ urn++;
+ continue;
+ }
+ urn += 3;
+ } else {
+ result[i++] = *urn;
+ urn++;
+ }
+ }
+ result[i] = 0;
+
+ return(xmlStrdup(result));
+}
+
+/**
+ * xmlParseCatalogFile:
+ * @filename: the filename
+ *
+ * parse an XML file and build a tree. It's like xmlParseFile()
+ * except it bypass all catalog lookups.
+ *
+ * Returns the resulting document tree or NULL in case of error
+ */
+
+xmlDocPtr
+xmlParseCatalogFile(const char *filename) {
+ xmlDocPtr ret;
+ xmlParserCtxtPtr ctxt;
+ char *directory = NULL;
+ xmlParserInputPtr inputStream;
+ xmlParserInputBufferPtr buf;
+
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ if (xmlDefaultSAXHandler.error != NULL) {
+ xmlDefaultSAXHandler.error(NULL, "out of memory\n");
+ }
+ return(NULL);
+ }
+
+ buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
+ if (buf == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ inputStream = xmlNewInputStream(ctxt);
+ if (inputStream == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ inputStream->filename = (char *) xmlCanonicPath((const xmlChar *)filename);
+ inputStream->buf = buf;
+ inputStream->base = inputStream->buf->buffer->content;
+ inputStream->cur = inputStream->buf->buffer->content;
+ inputStream->end =
+ &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
+
+ inputPush(ctxt, inputStream);
+ if ((ctxt->directory == NULL) && (directory == NULL))
+ directory = xmlParserGetDirectory(filename);
+ if ((ctxt->directory == NULL) && (directory != NULL))
+ ctxt->directory = directory;
+ ctxt->valid = 0;
+ ctxt->validate = 0;
+ ctxt->loadsubset = 0;
+ ctxt->pedantic = 0;
+
+ xmlParseDocument(ctxt);
+
+ if (ctxt->wellFormed)
+ ret = ctxt->myDoc;
+ else {
+ ret = NULL;
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
+ xmlFreeParserCtxt(ctxt);
+
+ return(ret);
+}
+
+/**
+ * xmlLoadFileContent:
+ * @filename: a file path
+ *
+ * Load a file content into memory.
+ *
+ * Returns a pointer to the 0 terminated string or NULL in case of error
+ */
+static xmlChar *
+xmlLoadFileContent(const char *filename)
+{
+#ifdef HAVE_STAT
+ int fd;
+#else
+ FILE *fd;
+#endif
+ int len;
+ long size;
+
+#ifdef HAVE_STAT
+ struct stat info;
+#endif
+ xmlChar *content;
+
+ if (filename == NULL)
+ return (NULL);
+
+#ifdef HAVE_STAT
+ if (stat(filename, &info) < 0)
+ return (NULL);
+#endif
+
+#ifdef HAVE_STAT
+ if ((fd = open(filename, O_RDONLY)) < 0)
+#else
+ if ((fd = fopen(filename, "rb")) == NULL)
+#endif
+ {
+ return (NULL);
+ }
+#ifdef HAVE_STAT
+ size = info.st_size;
+#else
+ if (fseek(fd, 0, SEEK_END) || (size = ftell(fd)) == EOF || fseek(fd, 0, SEEK_SET)) { /* File operations denied? ok, just close and return failure */
+ fclose(fd);
+ return (NULL);
+ }
+#endif
+ content = xmlMallocAtomic(size + 10);
+ if (content == NULL) {
+ xmlCatalogErrMemory("allocating catalog data");
+ return (NULL);
+ }
+#ifdef HAVE_STAT
+ len = read(fd, content, size);
+#else
+ len = fread(content, 1, size, fd);
+#endif
+ if (len < 0) {
+ xmlFree(content);
+ return (NULL);
+ }
+#ifdef HAVE_STAT
+ close(fd);
+#else
+ fclose(fd);
+#endif
+ content[len] = 0;
+
+ return(content);
+}
+
+/************************************************************************
+ * *
+ * The XML Catalog parser *
+ * *
+ ************************************************************************/
+
+static xmlCatalogEntryPtr
+xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename);
+static void
+xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer,
+ xmlCatalogEntryPtr parent);
+static xmlChar *
+xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
+ const xmlChar *sysID);
+static xmlChar *
+xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI);
+
+
+/**
+ * xmlGetXMLCatalogEntryType:
+ * @name: the name
+ *
+ * lookup the internal type associated to an XML catalog entry name
+ *
+ * Returns the type associated with that name
+ */
+static xmlCatalogEntryType
+xmlGetXMLCatalogEntryType(const xmlChar *name) {
+ xmlCatalogEntryType type = XML_CATA_NONE;
+ if (xmlStrEqual(name, (const xmlChar *) "system"))
+ type = XML_CATA_SYSTEM;
+ else if (xmlStrEqual(name, (const xmlChar *) "public"))
+ type = XML_CATA_PUBLIC;
+ else if (xmlStrEqual(name, (const xmlChar *) "rewriteSystem"))
+ type = XML_CATA_REWRITE_SYSTEM;
+ else if (xmlStrEqual(name, (const xmlChar *) "delegatePublic"))
+ type = XML_CATA_DELEGATE_PUBLIC;
+ else if (xmlStrEqual(name, (const xmlChar *) "delegateSystem"))
+ type = XML_CATA_DELEGATE_SYSTEM;
+ else if (xmlStrEqual(name, (const xmlChar *) "uri"))
+ type = XML_CATA_URI;
+ else if (xmlStrEqual(name, (const xmlChar *) "rewriteURI"))
+ type = XML_CATA_REWRITE_URI;
+ else if (xmlStrEqual(name, (const xmlChar *) "delegateURI"))
+ type = XML_CATA_DELEGATE_URI;
+ else if (xmlStrEqual(name, (const xmlChar *) "nextCatalog"))
+ type = XML_CATA_NEXT_CATALOG;
+ else if (xmlStrEqual(name, (const xmlChar *) "catalog"))
+ type = XML_CATA_CATALOG;
+ return(type);
+}
+
+/**
+ * xmlParseXMLCatalogOneNode:
+ * @cur: the XML node
+ * @type: the type of Catalog entry
+ * @name: the name of the node
+ * @attrName: the attribute holding the value
+ * @uriAttrName: the attribute holding the URI-Reference
+ * @prefer: the PUBLIC vs. SYSTEM current preference value
+ *
+ * Finishes the examination of an XML tree node of a catalog and build
+ * a Catalog entry from it.
+ *
+ * Returns the new Catalog entry node or NULL in case of error.
+ */
+static xmlCatalogEntryPtr
+xmlParseXMLCatalogOneNode(xmlNodePtr cur, xmlCatalogEntryType type,
+ const xmlChar *name, const xmlChar *attrName,
+ const xmlChar *uriAttrName, xmlCatalogPrefer prefer) {
+ int ok = 1;
+ xmlChar *uriValue;
+ xmlChar *nameValue = NULL;
+ xmlChar *base = NULL;
+ xmlChar *URL = NULL;
+ xmlCatalogEntryPtr ret = NULL;
+
+ if (attrName != NULL) {
+ nameValue = xmlGetProp(cur, attrName);
+ if (nameValue == NULL) {
+ xmlCatalogErr(ret, cur, XML_CATALOG_MISSING_ATTR,
+ "%s entry lacks '%s'\n", name, attrName, NULL);
+ ok = 0;
+ }
+ }
+ uriValue = xmlGetProp(cur, uriAttrName);
+ if (uriValue == NULL) {
+ xmlCatalogErr(ret, cur, XML_CATALOG_MISSING_ATTR,
+ "%s entry lacks '%s'\n", name, uriAttrName, NULL);
+ ok = 0;
+ }
+ if (!ok) {
+ if (nameValue != NULL)
+ xmlFree(nameValue);
+ if (uriValue != NULL)
+ xmlFree(uriValue);
+ return(NULL);
+ }
+
+ base = xmlNodeGetBase(cur->doc, cur);
+ URL = xmlBuildURI(uriValue, base);
+ if (URL != NULL) {
+ if (xmlDebugCatalogs > 1) {
+ if (nameValue != NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "Found %s: '%s' '%s'\n", name, nameValue, URL);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "Found %s: '%s'\n", name, URL);
+ }
+ ret = xmlNewCatalogEntry(type, nameValue, uriValue, URL, prefer);
+ } else {
+ xmlCatalogErr(ret, cur, XML_CATALOG_ENTRY_BROKEN,
+ "%s entry '%s' broken ?: %s\n", name, uriAttrName, uriValue);
+ }
+ if (nameValue != NULL)
+ xmlFree(nameValue);
+ if (uriValue != NULL)
+ xmlFree(uriValue);
+ if (base != NULL)
+ xmlFree(base);
+ if (URL != NULL)
+ xmlFree(URL);
+ return(ret);
+}
+
+/**
+ * xmlParseXMLCatalogNode:
+ * @cur: the XML node
+ * @prefer: the PUBLIC vs. SYSTEM current preference value
+ * @parent: the parent Catalog entry
+ *
+ * Examines an XML tree node of a catalog and build
+ * a Catalog entry from it adding it to its parent. The examination can
+ * be recursive.
+ */
+static void
+xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
+ xmlCatalogEntryPtr parent)
+{
+ xmlChar *uri = NULL;
+ xmlChar *URL = NULL;
+ xmlChar *base = NULL;
+ xmlCatalogEntryPtr entry = NULL;
+
+ if (cur == NULL)
+ return;
+ if (xmlStrEqual(cur->name, BAD_CAST "group")) {
+ xmlChar *prop;
+
+ prop = xmlGetProp(cur, BAD_CAST "prefer");
+ if (prop != NULL) {
+ if (xmlStrEqual(prop, BAD_CAST "system")) {
+ prefer = XML_CATA_PREFER_SYSTEM;
+ } else if (xmlStrEqual(prop, BAD_CAST "public")) {
+ prefer = XML_CATA_PREFER_PUBLIC;
+ } else {
+ xmlCatalogErr(parent, cur, XML_CATALOG_PREFER_VALUE,
+ "Invalid value for prefer: '%s'\n",
+ prop, NULL, NULL);
+ }
+ xmlFree(prop);
+ }
+ /*
+ * Recurse to propagate prefer to the subtree
+ * (xml:base handling is automated)
+ */
+ xmlParseXMLCatalogNodeList(cur->children, prefer, parent);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "public")) {
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_PUBLIC,
+ BAD_CAST "public", BAD_CAST "publicId", BAD_CAST "uri", prefer);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "system")) {
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_SYSTEM,
+ BAD_CAST "system", BAD_CAST "systemId", BAD_CAST "uri", prefer);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "rewriteSystem")) {
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_SYSTEM,
+ BAD_CAST "rewriteSystem", BAD_CAST "systemIdStartString",
+ BAD_CAST "rewritePrefix", prefer);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "delegatePublic")) {
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_PUBLIC,
+ BAD_CAST "delegatePublic", BAD_CAST "publicIdStartString",
+ BAD_CAST "catalog", prefer);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "delegateSystem")) {
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_SYSTEM,
+ BAD_CAST "delegateSystem", BAD_CAST "systemIdStartString",
+ BAD_CAST "catalog", prefer);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "uri")) {
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_URI,
+ BAD_CAST "uri", BAD_CAST "name",
+ BAD_CAST "uri", prefer);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "rewriteURI")) {
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_URI,
+ BAD_CAST "rewriteURI", BAD_CAST "uriStartString",
+ BAD_CAST "rewritePrefix", prefer);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "delegateURI")) {
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_URI,
+ BAD_CAST "delegateURI", BAD_CAST "uriStartString",
+ BAD_CAST "catalog", prefer);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "nextCatalog")) {
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_NEXT_CATALOG,
+ BAD_CAST "nextCatalog", NULL,
+ BAD_CAST "catalog", prefer);
+ }
+ if ((entry != NULL) && (parent != NULL)) {
+ entry->parent = parent;
+ if (parent->children == NULL)
+ parent->children = entry;
+ else {
+ xmlCatalogEntryPtr prev;
+
+ prev = parent->children;
+ while (prev->next != NULL)
+ prev = prev->next;
+ prev->next = entry;
+ }
+ }
+ if (base != NULL)
+ xmlFree(base);
+ if (uri != NULL)
+ xmlFree(uri);
+ if (URL != NULL)
+ xmlFree(URL);
+}
+
+/**
+ * xmlParseXMLCatalogNodeList:
+ * @cur: the XML node list of siblings
+ * @prefer: the PUBLIC vs. SYSTEM current preference value
+ * @parent: the parent Catalog entry
+ *
+ * Examines a list of XML sibling nodes of a catalog and build
+ * a list of Catalog entry from it adding it to the parent.
+ * The examination will recurse to examine node subtrees.
+ */
+static void
+xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer,
+ xmlCatalogEntryPtr parent) {
+ while (cur != NULL) {
+ if ((cur->ns != NULL) && (cur->ns->href != NULL) &&
+ (xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) {
+ xmlParseXMLCatalogNode(cur, prefer, parent);
+ }
+ cur = cur->next;
+ }
+ /* TODO: sort the list according to REWRITE lengths and prefer value */
+}
+
+/**
+ * xmlParseXMLCatalogFile:
+ * @prefer: the PUBLIC vs. SYSTEM current preference value
+ * @filename: the filename for the catalog
+ *
+ * Parses the catalog file to extract the XML tree and then analyze the
+ * tree to build a list of Catalog entries corresponding to this catalog
+ *
+ * Returns the resulting Catalog entries list
+ */
+static xmlCatalogEntryPtr
+xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename) {
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+ xmlChar *prop;
+ xmlCatalogEntryPtr parent = NULL;
+
+ if (filename == NULL)
+ return(NULL);
+
+ doc = xmlParseCatalogFile((const char *) filename);
+ if (doc == NULL) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to parse catalog %s\n", filename);
+ return(NULL);
+ }
+
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "%d Parsing catalog %s\n", xmlGetThreadId(), filename);
+
+ cur = xmlDocGetRootElement(doc);
+ if ((cur != NULL) && (xmlStrEqual(cur->name, BAD_CAST "catalog")) &&
+ (cur->ns != NULL) && (cur->ns->href != NULL) &&
+ (xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) {
+
+ parent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
+ (const xmlChar *)filename, NULL, prefer);
+ if (parent == NULL) {
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+
+ prop = xmlGetProp(cur, BAD_CAST "prefer");
+ if (prop != NULL) {
+ if (xmlStrEqual(prop, BAD_CAST "system")) {
+ prefer = XML_CATA_PREFER_SYSTEM;
+ } else if (xmlStrEqual(prop, BAD_CAST "public")) {
+ prefer = XML_CATA_PREFER_PUBLIC;
+ } else {
+ xmlCatalogErr(NULL, cur, XML_CATALOG_PREFER_VALUE,
+ "Invalid value for prefer: '%s'\n",
+ prop, NULL, NULL);
+ }
+ xmlFree(prop);
+ }
+ cur = cur->children;
+ xmlParseXMLCatalogNodeList(cur, prefer, parent);
+ } else {
+ xmlCatalogErr(NULL, (xmlNodePtr) doc, XML_CATALOG_NOT_CATALOG,
+ "File %s is not an XML Catalog\n",
+ filename, NULL, NULL);
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+ xmlFreeDoc(doc);
+ return(parent);
+}
+
+/**
+ * xmlFetchXMLCatalogFile:
+ * @catal: an existing but incomplete catalog entry
+ *
+ * Fetch and parse the subcatalog referenced by an entry
+ *
+ * Returns 0 in case of success, -1 otherwise
+ */
+static int
+xmlFetchXMLCatalogFile(xmlCatalogEntryPtr catal) {
+ xmlCatalogEntryPtr doc;
+
+ if (catal == NULL)
+ return(-1);
+ if (catal->URL == NULL)
+ return(-1);
+ if (catal->children != NULL)
+ return(-1);
+
+ /*
+ * lock the whole catalog for modification
+ */
+ xmlRMutexLock(xmlCatalogMutex);
+ if (catal->children != NULL) {
+ /* Okay someone else did it in the meantime */
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(0);
+ }
+
+ if (xmlCatalogXMLFiles != NULL) {
+ doc = (xmlCatalogEntryPtr)
+ xmlHashLookup(xmlCatalogXMLFiles, catal->URL);
+ if (doc != NULL) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Found %s in file hash\n", catal->URL);
+
+ if (catal->type == XML_CATA_CATALOG)
+ catal->children = doc->children;
+ else
+ catal->children = doc;
+ catal->dealloc = 0;
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(0);
+ }
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "%s not found in file hash\n", catal->URL);
+ }
+
+ /*
+ * Fetch and parse. Note that xmlParseXMLCatalogFile does not
+ * use the existing catalog, there is no recursion allowed at
+ * that level.
+ */
+ doc = xmlParseXMLCatalogFile(catal->prefer, catal->URL);
+ if (doc == NULL) {
+ catal->type = XML_CATA_BROKEN_CATALOG;
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(-1);
+ }
+
+ if (catal->type == XML_CATA_CATALOG)
+ catal->children = doc->children;
+ else
+ catal->children = doc;
+
+ doc->dealloc = 1;
+
+ if (xmlCatalogXMLFiles == NULL)
+ xmlCatalogXMLFiles = xmlHashCreate(10);
+ if (xmlCatalogXMLFiles != NULL) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "%s added to file hash\n", catal->URL);
+ xmlHashAddEntry(xmlCatalogXMLFiles, catal->URL, doc);
+ }
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * XML Catalog handling *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlAddXMLCatalog:
+ * @catal: top of an XML catalog
+ * @type: the type of record to add to the catalog
+ * @orig: the system, public or prefix to match (or NULL)
+ * @replace: the replacement value for the match
+ *
+ * Add an entry in the XML catalog, it may overwrite existing but
+ * different entries.
+ *
+ * Returns 0 if successful, -1 otherwise
+ */
+static int
+xmlAddXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *type,
+ const xmlChar *orig, const xmlChar *replace) {
+ xmlCatalogEntryPtr cur;
+ xmlCatalogEntryType typ;
+ int doregister = 0;
+
+ if ((catal == NULL) ||
+ ((catal->type != XML_CATA_CATALOG) &&
+ (catal->type != XML_CATA_BROKEN_CATALOG)))
+ return(-1);
+ if (catal->children == NULL) {
+ xmlFetchXMLCatalogFile(catal);
+ }
+ if (catal->children == NULL)
+ doregister = 1;
+
+ typ = xmlGetXMLCatalogEntryType(type);
+ if (typ == XML_CATA_NONE) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to add unknown element %s to catalog\n", type);
+ return(-1);
+ }
+
+ cur = catal->children;
+ /*
+ * Might be a simple "update in place"
+ */
+ if (cur != NULL) {
+ while (cur != NULL) {
+ if ((orig != NULL) && (cur->type == typ) &&
+ (xmlStrEqual(orig, cur->name))) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Updating element %s to catalog\n", type);
+ if (cur->value != NULL)
+ xmlFree(cur->value);
+ if (cur->URL != NULL)
+ xmlFree(cur->URL);
+ cur->value = xmlStrdup(replace);
+ cur->URL = xmlStrdup(replace);
+ return(0);
+ }
+ if (cur->next == NULL)
+ break;
+ cur = cur->next;
+ }
+ }
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Adding element %s to catalog\n", type);
+ if (cur == NULL)
+ catal->children = xmlNewCatalogEntry(typ, orig, replace,
+ NULL, catal->prefer);
+ else
+ cur->next = xmlNewCatalogEntry(typ, orig, replace,
+ NULL, catal->prefer);
+ if (doregister) {
+ cur = xmlHashLookup(xmlCatalogXMLFiles, catal->URL);
+ if (cur != NULL)
+ cur->children = catal->children;
+ }
+
+ return(0);
+}
+
+/**
+ * xmlDelXMLCatalog:
+ * @catal: top of an XML catalog
+ * @value: the value to remove from the catalog
+ *
+ * Remove entries in the XML catalog where the value or the URI
+ * is equal to @value
+ *
+ * Returns the number of entries removed if successful, -1 otherwise
+ */
+static int
+xmlDelXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *value) {
+ xmlCatalogEntryPtr cur;
+ int ret = 0;
+
+ if ((catal == NULL) ||
+ ((catal->type != XML_CATA_CATALOG) &&
+ (catal->type != XML_CATA_BROKEN_CATALOG)))
+ return(-1);
+ if (value == NULL)
+ return(-1);
+ if (catal->children == NULL) {
+ xmlFetchXMLCatalogFile(catal);
+ }
+
+ /*
+ * Scan the children
+ */
+ cur = catal->children;
+ while (cur != NULL) {
+ if (((cur->name != NULL) && (xmlStrEqual(value, cur->name))) ||
+ (xmlStrEqual(value, cur->value))) {
+ if (xmlDebugCatalogs) {
+ if (cur->name != NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "Removing element %s from catalog\n", cur->name);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "Removing element %s from catalog\n", cur->value);
+ }
+ cur->type = XML_CATA_REMOVED;
+ }
+ cur = cur->next;
+ }
+ return(ret);
+}
+
+/**
+ * xmlCatalogXMLResolve:
+ * @catal: a catalog list
+ * @pubID: the public ID string
+ * @sysID: the system ID string
+ *
+ * Do a complete resolution lookup of an External Identifier for a
+ * list of catalog entries.
+ *
+ * Implements (or tries to) 7.1. External Identifier Resolution
+ * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+ *
+ * Returns the URI of the resource or NULL if not found
+ */
+static xmlChar *
+xmlCatalogXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
+ const xmlChar *sysID) {
+ xmlChar *ret = NULL;
+ xmlCatalogEntryPtr cur;
+ int haveDelegate = 0;
+ int haveNext = 0;
+
+ /*
+ * protection against loops
+ */
+ if (catal->depth > MAX_CATAL_DEPTH) {
+ xmlCatalogErr(catal, NULL, XML_CATALOG_RECURSION,
+ "Detected recursion in catalog %s\n",
+ catal->name, NULL, NULL);
+ return(NULL);
+ }
+ catal->depth++;
+
+ /*
+ * First tries steps 2/ 3/ 4/ if a system ID is provided.
+ */
+ if (sysID != NULL) {
+ xmlCatalogEntryPtr rewrite = NULL;
+ int lenrewrite = 0, len;
+ cur = catal;
+ haveDelegate = 0;
+ while (cur != NULL) {
+ switch (cur->type) {
+ case XML_CATA_SYSTEM:
+ if (xmlStrEqual(sysID, cur->name)) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Found system match %s\n", cur->name);
+ catal->depth--;
+ return(xmlStrdup(cur->URL));
+ }
+ break;
+ case XML_CATA_REWRITE_SYSTEM:
+ len = xmlStrlen(cur->name);
+ if ((len > lenrewrite) &&
+ (!xmlStrncmp(sysID, cur->name, len))) {
+ lenrewrite = len;
+ rewrite = cur;
+ }
+ break;
+ case XML_CATA_DELEGATE_SYSTEM:
+ if (!xmlStrncmp(sysID, cur->name, xmlStrlen(cur->name)))
+ haveDelegate++;
+ break;
+ case XML_CATA_NEXT_CATALOG:
+ haveNext++;
+ break;
+ default:
+ break;
+ }
+ cur = cur->next;
+ }
+ if (rewrite != NULL) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Using rewriting rule %s\n", rewrite->name);
+ ret = xmlStrdup(rewrite->URL);
+ if (ret != NULL)
+ ret = xmlStrcat(ret, &sysID[lenrewrite]);
+ catal->depth--;
+ return(ret);
+ }
+ if (haveDelegate) {
+ const xmlChar *delegates[MAX_DELEGATE];
+ int nbList = 0, i;
+
+ /*
+ * Assume the entries have been sorted by decreasing substring
+ * matches when the list was produced.
+ */
+ cur = catal;
+ while (cur != NULL) {
+ if ((cur->type == XML_CATA_DELEGATE_SYSTEM) &&
+ (!xmlStrncmp(sysID, cur->name, xmlStrlen(cur->name)))) {
+ for (i = 0;i < nbList;i++)
+ if (xmlStrEqual(cur->URL, delegates[i]))
+ break;
+ if (i < nbList) {
+ cur = cur->next;
+ continue;
+ }
+ if (nbList < MAX_DELEGATE)
+ delegates[nbList++] = cur->URL;
+
+ if (cur->children == NULL) {
+ xmlFetchXMLCatalogFile(cur);
+ }
+ if (cur->children != NULL) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Trying system delegate %s\n", cur->URL);
+ ret = xmlCatalogListXMLResolve(
+ cur->children, NULL, sysID);
+ if (ret != NULL) {
+ catal->depth--;
+ return(ret);
+ }
+ }
+ }
+ cur = cur->next;
+ }
+ /*
+ * Apply the cut algorithm explained in 4/
+ */
+ catal->depth--;
+ return(XML_CATAL_BREAK);
+ }
+ }
+ /*
+ * Then tries 5/ 6/ if a public ID is provided
+ */
+ if (pubID != NULL) {
+ cur = catal;
+ haveDelegate = 0;
+ while (cur != NULL) {
+ switch (cur->type) {
+ case XML_CATA_PUBLIC:
+ if (xmlStrEqual(pubID, cur->name)) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Found public match %s\n", cur->name);
+ catal->depth--;
+ return(xmlStrdup(cur->URL));
+ }
+ break;
+ case XML_CATA_DELEGATE_PUBLIC:
+ if (!xmlStrncmp(pubID, cur->name, xmlStrlen(cur->name)) &&
+ (cur->prefer == XML_CATA_PREFER_PUBLIC))
+ haveDelegate++;
+ break;
+ case XML_CATA_NEXT_CATALOG:
+ if (sysID == NULL)
+ haveNext++;
+ break;
+ default:
+ break;
+ }
+ cur = cur->next;
+ }
+ if (haveDelegate) {
+ const xmlChar *delegates[MAX_DELEGATE];
+ int nbList = 0, i;
+
+ /*
+ * Assume the entries have been sorted by decreasing substring
+ * matches when the list was produced.
+ */
+ cur = catal;
+ while (cur != NULL) {
+ if ((cur->type == XML_CATA_DELEGATE_PUBLIC) &&
+ (cur->prefer == XML_CATA_PREFER_PUBLIC) &&
+ (!xmlStrncmp(pubID, cur->name, xmlStrlen(cur->name)))) {
+
+ for (i = 0;i < nbList;i++)
+ if (xmlStrEqual(cur->URL, delegates[i]))
+ break;
+ if (i < nbList) {
+ cur = cur->next;
+ continue;
+ }
+ if (nbList < MAX_DELEGATE)
+ delegates[nbList++] = cur->URL;
+
+ if (cur->children == NULL) {
+ xmlFetchXMLCatalogFile(cur);
+ }
+ if (cur->children != NULL) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Trying public delegate %s\n", cur->URL);
+ ret = xmlCatalogListXMLResolve(
+ cur->children, pubID, NULL);
+ if (ret != NULL) {
+ catal->depth--;
+ return(ret);
+ }
+ }
+ }
+ cur = cur->next;
+ }
+ /*
+ * Apply the cut algorithm explained in 4/
+ */
+ catal->depth--;
+ return(XML_CATAL_BREAK);
+ }
+ }
+ if (haveNext) {
+ cur = catal;
+ while (cur != NULL) {
+ if (cur->type == XML_CATA_NEXT_CATALOG) {
+ if (cur->children == NULL) {
+ xmlFetchXMLCatalogFile(cur);
+ }
+ if (cur->children != NULL) {
+ ret = xmlCatalogListXMLResolve(cur->children, pubID, sysID);
+ if (ret != NULL) {
+ catal->depth--;
+ return(ret);
+ }
+ }
+ }
+ cur = cur->next;
+ }
+ }
+
+ catal->depth--;
+ return(NULL);
+}
+
+/**
+ * xmlCatalogXMLResolveURI:
+ * @catal: a catalog list
+ * @URI: the URI
+ * @sysID: the system ID string
+ *
+ * Do a complete resolution lookup of an External Identifier for a
+ * list of catalog entries.
+ *
+ * Implements (or tries to) 7.2.2. URI Resolution
+ * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+ *
+ * Returns the URI of the resource or NULL if not found
+ */
+static xmlChar *
+xmlCatalogXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) {
+ xmlChar *ret = NULL;
+ xmlCatalogEntryPtr cur;
+ int haveDelegate = 0;
+ int haveNext = 0;
+ xmlCatalogEntryPtr rewrite = NULL;
+ int lenrewrite = 0, len;
+
+ if (catal == NULL)
+ return(NULL);
+
+ if (URI == NULL)
+ return(NULL);
+
+ /*
+ * First tries steps 2/ 3/ 4/ if a system ID is provided.
+ */
+ cur = catal;
+ haveDelegate = 0;
+ while (cur != NULL) {
+ switch (cur->type) {
+ case XML_CATA_URI:
+ if (xmlStrEqual(URI, cur->name)) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Found URI match %s\n", cur->name);
+ return(xmlStrdup(cur->URL));
+ }
+ break;
+ case XML_CATA_REWRITE_URI:
+ len = xmlStrlen(cur->name);
+ if ((len > lenrewrite) &&
+ (!xmlStrncmp(URI, cur->name, len))) {
+ lenrewrite = len;
+ rewrite = cur;
+ }
+ break;
+ case XML_CATA_DELEGATE_URI:
+ if (!xmlStrncmp(URI, cur->name, xmlStrlen(cur->name)))
+ haveDelegate++;
+ break;
+ case XML_CATA_NEXT_CATALOG:
+ haveNext++;
+ break;
+ default:
+ break;
+ }
+ cur = cur->next;
+ }
+ if (rewrite != NULL) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Using rewriting rule %s\n", rewrite->name);
+ ret = xmlStrdup(rewrite->URL);
+ if (ret != NULL)
+ ret = xmlStrcat(ret, &URI[lenrewrite]);
+ return(ret);
+ }
+ if (haveDelegate) {
+ const xmlChar *delegates[MAX_DELEGATE];
+ int nbList = 0, i;
+
+ /*
+ * Assume the entries have been sorted by decreasing substring
+ * matches when the list was produced.
+ */
+ cur = catal;
+ while (cur != NULL) {
+ if (((cur->type == XML_CATA_DELEGATE_SYSTEM) ||
+ (cur->type == XML_CATA_DELEGATE_URI)) &&
+ (!xmlStrncmp(URI, cur->name, xmlStrlen(cur->name)))) {
+ for (i = 0;i < nbList;i++)
+ if (xmlStrEqual(cur->URL, delegates[i]))
+ break;
+ if (i < nbList) {
+ cur = cur->next;
+ continue;
+ }
+ if (nbList < MAX_DELEGATE)
+ delegates[nbList++] = cur->URL;
+
+ if (cur->children == NULL) {
+ xmlFetchXMLCatalogFile(cur);
+ }
+ if (cur->children != NULL) {
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Trying URI delegate %s\n", cur->URL);
+ ret = xmlCatalogListXMLResolveURI(
+ cur->children, URI);
+ if (ret != NULL)
+ return(ret);
+ }
+ }
+ cur = cur->next;
+ }
+ /*
+ * Apply the cut algorithm explained in 4/
+ */
+ return(XML_CATAL_BREAK);
+ }
+ if (haveNext) {
+ cur = catal;
+ while (cur != NULL) {
+ if (cur->type == XML_CATA_NEXT_CATALOG) {
+ if (cur->children == NULL) {
+ xmlFetchXMLCatalogFile(cur);
+ }
+ if (cur->children != NULL) {
+ ret = xmlCatalogListXMLResolveURI(cur->children, URI);
+ if (ret != NULL)
+ return(ret);
+ }
+ }
+ cur = cur->next;
+ }
+ }
+
+ return(NULL);
+}
+
+/**
+ * xmlCatalogListXMLResolve:
+ * @catal: a catalog list
+ * @pubID: the public ID string
+ * @sysID: the system ID string
+ *
+ * Do a complete resolution lookup of an External Identifier for a
+ * list of catalogs
+ *
+ * Implements (or tries to) 7.1. External Identifier Resolution
+ * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+ *
+ * Returns the URI of the resource or NULL if not found
+ */
+static xmlChar *
+xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
+ const xmlChar *sysID) {
+ xmlChar *ret = NULL;
+ xmlChar *urnID = NULL;
+
+ if (catal == NULL)
+ return(NULL);
+ if ((pubID == NULL) && (sysID == NULL))
+ return(NULL);
+
+ if (!xmlStrncmp(pubID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
+ urnID = xmlCatalogUnWrapURN(pubID);
+ if (xmlDebugCatalogs) {
+ if (urnID == NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "Public URN ID %s expanded to NULL\n", pubID);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "Public URN ID expanded to %s\n", urnID);
+ }
+ ret = xmlCatalogListXMLResolve(catal, urnID, sysID);
+ if (urnID != NULL)
+ xmlFree(urnID);
+ return(ret);
+ }
+ if (!xmlStrncmp(sysID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
+ urnID = xmlCatalogUnWrapURN(sysID);
+ if (xmlDebugCatalogs) {
+ if (urnID == NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "System URN ID %s expanded to NULL\n", sysID);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "System URN ID expanded to %s\n", urnID);
+ }
+ if (pubID == NULL)
+ ret = xmlCatalogListXMLResolve(catal, urnID, NULL);
+ else if (xmlStrEqual(pubID, urnID))
+ ret = xmlCatalogListXMLResolve(catal, pubID, NULL);
+ else {
+ ret = xmlCatalogListXMLResolve(catal, pubID, urnID);
+ }
+ if (urnID != NULL)
+ xmlFree(urnID);
+ return(ret);
+ }
+ while (catal != NULL) {
+ if (catal->type == XML_CATA_CATALOG) {
+ if (catal->children == NULL) {
+ xmlFetchXMLCatalogFile(catal);
+ }
+ if (catal->children != NULL) {
+ ret = xmlCatalogXMLResolve(catal->children, pubID, sysID);
+ if (ret != NULL)
+ return(ret);
+ }
+ }
+ catal = catal->next;
+ }
+ return(ret);
+}
+
+/**
+ * xmlCatalogListXMLResolveURI:
+ * @catal: a catalog list
+ * @URI: the URI
+ *
+ * Do a complete resolution lookup of an URI for a list of catalogs
+ *
+ * Implements (or tries to) 7.2. URI Resolution
+ * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+ *
+ * Returns the URI of the resource or NULL if not found
+ */
+static xmlChar *
+xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) {
+ xmlChar *ret = NULL;
+ xmlChar *urnID = NULL;
+
+ if (catal == NULL)
+ return(NULL);
+ if (URI == NULL)
+ return(NULL);
+
+ if (!xmlStrncmp(URI, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
+ urnID = xmlCatalogUnWrapURN(URI);
+ if (xmlDebugCatalogs) {
+ if (urnID == NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "URN ID %s expanded to NULL\n", URI);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "URN ID expanded to %s\n", urnID);
+ }
+ ret = xmlCatalogListXMLResolve(catal, urnID, NULL);
+ if (urnID != NULL)
+ xmlFree(urnID);
+ return(ret);
+ }
+ while (catal != NULL) {
+ if (catal->type == XML_CATA_CATALOG) {
+ if (catal->children == NULL) {
+ xmlFetchXMLCatalogFile(catal);
+ }
+ if (catal->children != NULL) {
+ ret = xmlCatalogXMLResolveURI(catal->children, URI);
+ if (ret != NULL)
+ return(ret);
+ }
+ }
+ catal = catal->next;
+ }
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * The SGML Catalog parser *
+ * *
+ ************************************************************************/
+
+
+#define RAW *cur
+#define NEXT cur++;
+#define SKIP(x) cur += x;
+
+#define SKIP_BLANKS while (IS_BLANK_CH(*cur)) NEXT;
+
+/**
+ * xmlParseSGMLCatalogComment:
+ * @cur: the current character
+ *
+ * Skip a comment in an SGML catalog
+ *
+ * Returns new current character
+ */
+static const xmlChar *
+xmlParseSGMLCatalogComment(const xmlChar *cur) {
+ if ((cur[0] != '-') || (cur[1] != '-'))
+ return(cur);
+ SKIP(2);
+ while ((cur[0] != 0) && ((cur[0] != '-') || ((cur[1] != '-'))))
+ NEXT;
+ if (cur[0] == 0) {
+ return(NULL);
+ }
+ return(cur + 2);
+}
+
+/**
+ * xmlParseSGMLCatalogPubid:
+ * @cur: the current character
+ * @id: the return location
+ *
+ * Parse an SGML catalog ID
+ *
+ * Returns new current character and store the value in @id
+ */
+static const xmlChar *
+xmlParseSGMLCatalogPubid(const xmlChar *cur, xmlChar **id) {
+ xmlChar *buf = NULL, *tmp;
+ int len = 0;
+ int size = 50;
+ xmlChar stop;
+ int count = 0;
+
+ *id = NULL;
+
+ if (RAW == '"') {
+ NEXT;
+ stop = '"';
+ } else if (RAW == '\'') {
+ NEXT;
+ stop = '\'';
+ } else {
+ stop = ' ';
+ }
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlCatalogErrMemory("allocating public ID");
+ return(NULL);
+ }
+ while (IS_PUBIDCHAR_CH(*cur) || (*cur == '?')) {
+ if ((*cur == stop) && (stop != ' '))
+ break;
+ if ((stop == ' ') && (IS_BLANK_CH(*cur)))
+ break;
+ if (len + 1 >= size) {
+ size *= 2;
+ tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (tmp == NULL) {
+ xmlCatalogErrMemory("allocating public ID");
+ xmlFree(buf);
+ return(NULL);
+ }
+ buf = tmp;
+ }
+ buf[len++] = *cur;
+ count++;
+ NEXT;
+ }
+ buf[len] = 0;
+ if (stop == ' ') {
+ if (!IS_BLANK_CH(*cur)) {
+ xmlFree(buf);
+ return(NULL);
+ }
+ } else {
+ if (*cur != stop) {
+ xmlFree(buf);
+ return(NULL);
+ }
+ NEXT;
+ }
+ *id = buf;
+ return(cur);
+}
+
+/**
+ * xmlParseSGMLCatalogName:
+ * @cur: the current character
+ * @name: the return location
+ *
+ * Parse an SGML catalog name
+ *
+ * Returns new current character and store the value in @name
+ */
+static const xmlChar *
+xmlParseSGMLCatalogName(const xmlChar *cur, xmlChar **name) {
+ xmlChar buf[XML_MAX_NAMELEN + 5];
+ int len = 0;
+ int c;
+
+ *name = NULL;
+
+ /*
+ * Handler for more complex cases
+ */
+ c = *cur;
+ if ((!IS_LETTER(c) && (c != '_') && (c != ':'))) {
+ return(NULL);
+ }
+
+ while (((IS_LETTER(c)) || (IS_DIGIT(c)) ||
+ (c == '.') || (c == '-') ||
+ (c == '_') || (c == ':'))) {
+ buf[len++] = c;
+ cur++;
+ c = *cur;
+ if (len >= XML_MAX_NAMELEN)
+ return(NULL);
+ }
+ *name = xmlStrndup(buf, len);
+ return(cur);
+}
+
+/**
+ * xmlGetSGMLCatalogEntryType:
+ * @name: the entry name
+ *
+ * Get the Catalog entry type for a given SGML Catalog name
+ *
+ * Returns Catalog entry type
+ */
+static xmlCatalogEntryType
+xmlGetSGMLCatalogEntryType(const xmlChar *name) {
+ xmlCatalogEntryType type = XML_CATA_NONE;
+ if (xmlStrEqual(name, (const xmlChar *) "SYSTEM"))
+ type = SGML_CATA_SYSTEM;
+ else if (xmlStrEqual(name, (const xmlChar *) "PUBLIC"))
+ type = SGML_CATA_PUBLIC;
+ else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE"))
+ type = SGML_CATA_DELEGATE;
+ else if (xmlStrEqual(name, (const xmlChar *) "ENTITY"))
+ type = SGML_CATA_ENTITY;
+ else if (xmlStrEqual(name, (const xmlChar *) "DOCTYPE"))
+ type = SGML_CATA_DOCTYPE;
+ else if (xmlStrEqual(name, (const xmlChar *) "LINKTYPE"))
+ type = SGML_CATA_LINKTYPE;
+ else if (xmlStrEqual(name, (const xmlChar *) "NOTATION"))
+ type = SGML_CATA_NOTATION;
+ else if (xmlStrEqual(name, (const xmlChar *) "SGMLDECL"))
+ type = SGML_CATA_SGMLDECL;
+ else if (xmlStrEqual(name, (const xmlChar *) "DOCUMENT"))
+ type = SGML_CATA_DOCUMENT;
+ else if (xmlStrEqual(name, (const xmlChar *) "CATALOG"))
+ type = SGML_CATA_CATALOG;
+ else if (xmlStrEqual(name, (const xmlChar *) "BASE"))
+ type = SGML_CATA_BASE;
+ else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE"))
+ type = SGML_CATA_DELEGATE;
+ return(type);
+}
+
+/**
+ * xmlParseSGMLCatalog:
+ * @catal: the SGML Catalog
+ * @value: the content of the SGML Catalog serialization
+ * @file: the filepath for the catalog
+ * @super: should this be handled as a Super Catalog in which case
+ * parsing is not recursive
+ *
+ * Parse an SGML catalog content and fill up the @catal hash table with
+ * the new entries found.
+ *
+ * Returns 0 in case of success, -1 in case of error.
+ */
+static int
+xmlParseSGMLCatalog(xmlCatalogPtr catal, const xmlChar *value,
+ const char *file, int super) {
+ const xmlChar *cur = value;
+ xmlChar *base = NULL;
+ int res;
+
+ if ((cur == NULL) || (file == NULL))
+ return(-1);
+ base = xmlStrdup((const xmlChar *) file);
+
+ while ((cur != NULL) && (cur[0] != 0)) {
+ SKIP_BLANKS;
+ if (cur[0] == 0)
+ break;
+ if ((cur[0] == '-') && (cur[1] == '-')) {
+ cur = xmlParseSGMLCatalogComment(cur);
+ if (cur == NULL) {
+ /* error */
+ break;
+ }
+ } else {
+ xmlChar *sysid = NULL;
+ xmlChar *name = NULL;
+ xmlCatalogEntryType type = XML_CATA_NONE;
+
+ cur = xmlParseSGMLCatalogName(cur, &name);
+ if (name == NULL) {
+ /* error */
+ break;
+ }
+ if (!IS_BLANK_CH(*cur)) {
+ /* error */
+ break;
+ }
+ SKIP_BLANKS;
+ if (xmlStrEqual(name, (const xmlChar *) "SYSTEM"))
+ type = SGML_CATA_SYSTEM;
+ else if (xmlStrEqual(name, (const xmlChar *) "PUBLIC"))
+ type = SGML_CATA_PUBLIC;
+ else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE"))
+ type = SGML_CATA_DELEGATE;
+ else if (xmlStrEqual(name, (const xmlChar *) "ENTITY"))
+ type = SGML_CATA_ENTITY;
+ else if (xmlStrEqual(name, (const xmlChar *) "DOCTYPE"))
+ type = SGML_CATA_DOCTYPE;
+ else if (xmlStrEqual(name, (const xmlChar *) "LINKTYPE"))
+ type = SGML_CATA_LINKTYPE;
+ else if (xmlStrEqual(name, (const xmlChar *) "NOTATION"))
+ type = SGML_CATA_NOTATION;
+ else if (xmlStrEqual(name, (const xmlChar *) "SGMLDECL"))
+ type = SGML_CATA_SGMLDECL;
+ else if (xmlStrEqual(name, (const xmlChar *) "DOCUMENT"))
+ type = SGML_CATA_DOCUMENT;
+ else if (xmlStrEqual(name, (const xmlChar *) "CATALOG"))
+ type = SGML_CATA_CATALOG;
+ else if (xmlStrEqual(name, (const xmlChar *) "BASE"))
+ type = SGML_CATA_BASE;
+ else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE"))
+ type = SGML_CATA_DELEGATE;
+ else if (xmlStrEqual(name, (const xmlChar *) "OVERRIDE")) {
+ xmlFree(name);
+ cur = xmlParseSGMLCatalogName(cur, &name);
+ if (name == NULL) {
+ /* error */
+ break;
+ }
+ xmlFree(name);
+ continue;
+ }
+ xmlFree(name);
+ name = NULL;
+
+ switch(type) {
+ case SGML_CATA_ENTITY:
+ if (*cur == '%')
+ type = SGML_CATA_PENTITY;
+ case SGML_CATA_PENTITY:
+ case SGML_CATA_DOCTYPE:
+ case SGML_CATA_LINKTYPE:
+ case SGML_CATA_NOTATION:
+ cur = xmlParseSGMLCatalogName(cur, &name);
+ if (cur == NULL) {
+ /* error */
+ break;
+ }
+ if (!IS_BLANK_CH(*cur)) {
+ /* error */
+ break;
+ }
+ SKIP_BLANKS;
+ cur = xmlParseSGMLCatalogPubid(cur, &sysid);
+ if (cur == NULL) {
+ /* error */
+ break;
+ }
+ break;
+ case SGML_CATA_PUBLIC:
+ case SGML_CATA_SYSTEM:
+ case SGML_CATA_DELEGATE:
+ cur = xmlParseSGMLCatalogPubid(cur, &name);
+ if (cur == NULL) {
+ /* error */
+ break;
+ }
+ if (!IS_BLANK_CH(*cur)) {
+ /* error */
+ break;
+ }
+ SKIP_BLANKS;
+ cur = xmlParseSGMLCatalogPubid(cur, &sysid);
+ if (cur == NULL) {
+ /* error */
+ break;
+ }
+ break;
+ case SGML_CATA_BASE:
+ case SGML_CATA_CATALOG:
+ case SGML_CATA_DOCUMENT:
+ case SGML_CATA_SGMLDECL:
+ cur = xmlParseSGMLCatalogPubid(cur, &sysid);
+ if (cur == NULL) {
+ /* error */
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ if (cur == NULL) {
+ if (name != NULL)
+ xmlFree(name);
+ if (sysid != NULL)
+ xmlFree(sysid);
+ break;
+ } else if (type == SGML_CATA_BASE) {
+ if (base != NULL)
+ xmlFree(base);
+ base = xmlStrdup(sysid);
+ } else if ((type == SGML_CATA_PUBLIC) ||
+ (type == SGML_CATA_SYSTEM)) {
+ xmlChar *filename;
+
+ filename = xmlBuildURI(sysid, base);
+ if (filename != NULL) {
+ xmlCatalogEntryPtr entry;
+
+ entry = xmlNewCatalogEntry(type, name, filename,
+ NULL, XML_CATA_PREFER_NONE);
+ res = xmlHashAddEntry(catal->sgml, name, entry);
+ if (res < 0) {
+ xmlFreeCatalogEntry(entry);
+ }
+ xmlFree(filename);
+ }
+
+ } else if (type == SGML_CATA_CATALOG) {
+ if (super) {
+ xmlCatalogEntryPtr entry;
+
+ entry = xmlNewCatalogEntry(type, sysid, NULL, NULL,
+ XML_CATA_PREFER_NONE);
+ res = xmlHashAddEntry(catal->sgml, sysid, entry);
+ if (res < 0) {
+ xmlFreeCatalogEntry(entry);
+ }
+ } else {
+ xmlChar *filename;
+
+ filename = xmlBuildURI(sysid, base);
+ if (filename != NULL) {
+ xmlExpandCatalog(catal, (const char *)filename);
+ xmlFree(filename);
+ }
+ }
+ }
+ /*
+ * drop anything else we won't handle it
+ */
+ if (name != NULL)
+ xmlFree(name);
+ if (sysid != NULL)
+ xmlFree(sysid);
+ }
+ }
+ if (base != NULL)
+ xmlFree(base);
+ if (cur == NULL)
+ return(-1);
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * SGML Catalog handling *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCatalogGetSGMLPublic:
+ * @catal: an SGML catalog hash
+ * @pubID: the public ID string
+ *
+ * Try to lookup the catalog local reference associated to a public ID
+ *
+ * Returns the local resource if found or NULL otherwise.
+ */
+static const xmlChar *
+xmlCatalogGetSGMLPublic(xmlHashTablePtr catal, const xmlChar *pubID) {
+ xmlCatalogEntryPtr entry;
+
+ if (catal == NULL)
+ return(NULL);
+
+ entry = (xmlCatalogEntryPtr) xmlHashLookup(catal, pubID);
+ if (entry == NULL)
+ return(NULL);
+ if (entry->type == SGML_CATA_PUBLIC)
+ return(entry->URL);
+ return(NULL);
+}
+
+/**
+ * xmlCatalogGetSGMLSystem:
+ * @catal: an SGML catalog hash
+ * @sysID: the system ID string
+ *
+ * Try to lookup the catalog local reference for a system ID
+ *
+ * Returns the local resource if found or NULL otherwise.
+ */
+static const xmlChar *
+xmlCatalogGetSGMLSystem(xmlHashTablePtr catal, const xmlChar *sysID) {
+ xmlCatalogEntryPtr entry;
+
+ if (catal == NULL)
+ return(NULL);
+
+ entry = (xmlCatalogEntryPtr) xmlHashLookup(catal, sysID);
+ if (entry == NULL)
+ return(NULL);
+ if (entry->type == SGML_CATA_SYSTEM)
+ return(entry->URL);
+ return(NULL);
+}
+
+/**
+ * xmlCatalogSGMLResolve:
+ * @catal: the SGML catalog
+ * @pubID: the public ID string
+ * @sysID: the system ID string
+ *
+ * Do a complete resolution lookup of an External Identifier
+ *
+ * Returns the URI of the resource or NULL if not found
+ */
+static const xmlChar *
+xmlCatalogSGMLResolve(xmlCatalogPtr catal, const xmlChar *pubID,
+ const xmlChar *sysID) {
+ const xmlChar *ret = NULL;
+
+ if (catal->sgml == NULL)
+ return(NULL);
+
+ if (pubID != NULL)
+ ret = xmlCatalogGetSGMLPublic(catal->sgml, pubID);
+ if (ret != NULL)
+ return(ret);
+ if (sysID != NULL)
+ ret = xmlCatalogGetSGMLSystem(catal->sgml, sysID);
+ return(NULL);
+}
+
+/************************************************************************
+ * *
+ * Specific Public interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlLoadSGMLSuperCatalog:
+ * @filename: a file path
+ *
+ * Load an SGML super catalog. It won't expand CATALOG or DELEGATE
+ * references. This is only needed for manipulating SGML Super Catalogs
+ * like adding and removing CATALOG or DELEGATE entries.
+ *
+ * Returns the catalog parsed or NULL in case of error
+ */
+xmlCatalogPtr
+xmlLoadSGMLSuperCatalog(const char *filename)
+{
+ xmlChar *content;
+ xmlCatalogPtr catal;
+ int ret;
+
+ content = xmlLoadFileContent(filename);
+ if (content == NULL)
+ return(NULL);
+
+ catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE, xmlCatalogDefaultPrefer);
+ if (catal == NULL) {
+ xmlFree(content);
+ return(NULL);
+ }
+
+ ret = xmlParseSGMLCatalog(catal, content, filename, 1);
+ xmlFree(content);
+ if (ret < 0) {
+ xmlFreeCatalog(catal);
+ return(NULL);
+ }
+ return (catal);
+}
+
+/**
+ * xmlLoadACatalog:
+ * @filename: a file path
+ *
+ * Load the catalog and build the associated data structures.
+ * This can be either an XML Catalog or an SGML Catalog
+ * It will recurse in SGML CATALOG entries. On the other hand XML
+ * Catalogs are not handled recursively.
+ *
+ * Returns the catalog parsed or NULL in case of error
+ */
+xmlCatalogPtr
+xmlLoadACatalog(const char *filename)
+{
+ xmlChar *content;
+ xmlChar *first;
+ xmlCatalogPtr catal;
+ int ret;
+
+ content = xmlLoadFileContent(filename);
+ if (content == NULL)
+ return(NULL);
+
+
+ first = content;
+
+ while ((*first != 0) && (*first != '-') && (*first != '<') &&
+ (!(((*first >= 'A') && (*first <= 'Z')) ||
+ ((*first >= 'a') && (*first <= 'z')))))
+ first++;
+
+ if (*first != '<') {
+ catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE, xmlCatalogDefaultPrefer);
+ if (catal == NULL) {
+ xmlFree(content);
+ return(NULL);
+ }
+ ret = xmlParseSGMLCatalog(catal, content, filename, 0);
+ if (ret < 0) {
+ xmlFreeCatalog(catal);
+ xmlFree(content);
+ return(NULL);
+ }
+ } else {
+ catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, xmlCatalogDefaultPrefer);
+ if (catal == NULL) {
+ xmlFree(content);
+ return(NULL);
+ }
+ catal->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
+ NULL, BAD_CAST filename, xmlCatalogDefaultPrefer);
+ }
+ xmlFree(content);
+ return (catal);
+}
+
+/**
+ * xmlExpandCatalog:
+ * @catal: a catalog
+ * @filename: a file path
+ *
+ * Load the catalog and expand the existing catal structure.
+ * This can be either an XML Catalog or an SGML Catalog
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+static int
+xmlExpandCatalog(xmlCatalogPtr catal, const char *filename)
+{
+ int ret;
+
+ if ((catal == NULL) || (filename == NULL))
+ return(-1);
+
+
+ if (catal->type == XML_SGML_CATALOG_TYPE) {
+ xmlChar *content;
+
+ content = xmlLoadFileContent(filename);
+ if (content == NULL)
+ return(-1);
+
+ ret = xmlParseSGMLCatalog(catal, content, filename, 0);
+ if (ret < 0) {
+ xmlFree(content);
+ return(-1);
+ }
+ xmlFree(content);
+ } else {
+ xmlCatalogEntryPtr tmp, cur;
+ tmp = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
+ NULL, BAD_CAST filename, xmlCatalogDefaultPrefer);
+
+ cur = catal->xml;
+ if (cur == NULL) {
+ catal->xml = tmp;
+ } else {
+ while (cur->next != NULL) cur = cur->next;
+ cur->next = tmp;
+ }
+ }
+ return (0);
+}
+
+/**
+ * xmlACatalogResolveSystem:
+ * @catal: a Catalog
+ * @sysID: the system ID string
+ *
+ * Try to lookup the catalog resource for a system ID
+ *
+ * Returns the resource if found or NULL otherwise, the value returned
+ * must be freed by the caller.
+ */
+xmlChar *
+xmlACatalogResolveSystem(xmlCatalogPtr catal, const xmlChar *sysID) {
+ xmlChar *ret = NULL;
+
+ if ((sysID == NULL) || (catal == NULL))
+ return(NULL);
+
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Resolve sysID %s\n", sysID);
+
+ if (catal->type == XML_XML_CATALOG_TYPE) {
+ ret = xmlCatalogListXMLResolve(catal->xml, NULL, sysID);
+ if (ret == XML_CATAL_BREAK)
+ ret = NULL;
+ } else {
+ const xmlChar *sgml;
+
+ sgml = xmlCatalogGetSGMLSystem(catal->sgml, sysID);
+ if (sgml != NULL)
+ ret = xmlStrdup(sgml);
+ }
+ return(ret);
+}
+
+/**
+ * xmlACatalogResolvePublic:
+ * @catal: a Catalog
+ * @pubID: the public ID string
+ *
+ * Try to lookup the catalog local reference associated to a public ID in that catalog
+ *
+ * Returns the local resource if found or NULL otherwise, the value returned
+ * must be freed by the caller.
+ */
+xmlChar *
+xmlACatalogResolvePublic(xmlCatalogPtr catal, const xmlChar *pubID) {
+ xmlChar *ret = NULL;
+
+ if ((pubID == NULL) || (catal == NULL))
+ return(NULL);
+
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Resolve pubID %s\n", pubID);
+
+ if (catal->type == XML_XML_CATALOG_TYPE) {
+ ret = xmlCatalogListXMLResolve(catal->xml, pubID, NULL);
+ if (ret == XML_CATAL_BREAK)
+ ret = NULL;
+ } else {
+ const xmlChar *sgml;
+
+ sgml = xmlCatalogGetSGMLPublic(catal->sgml, pubID);
+ if (sgml != NULL)
+ ret = xmlStrdup(sgml);
+ }
+ return(ret);
+}
+
+/**
+ * xmlACatalogResolve:
+ * @catal: a Catalog
+ * @pubID: the public ID string
+ * @sysID: the system ID string
+ *
+ * Do a complete resolution lookup of an External Identifier
+ *
+ * Returns the URI of the resource or NULL if not found, it must be freed
+ * by the caller.
+ */
+xmlChar *
+xmlACatalogResolve(xmlCatalogPtr catal, const xmlChar * pubID,
+ const xmlChar * sysID)
+{
+ xmlChar *ret = NULL;
+
+ if (((pubID == NULL) && (sysID == NULL)) || (catal == NULL))
+ return (NULL);
+
+ if (xmlDebugCatalogs) {
+ if ((pubID != NULL) && (sysID != NULL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Resolve: pubID %s sysID %s\n", pubID, sysID);
+ } else if (pubID != NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Resolve: pubID %s\n", pubID);
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Resolve: sysID %s\n", sysID);
+ }
+ }
+
+ if (catal->type == XML_XML_CATALOG_TYPE) {
+ ret = xmlCatalogListXMLResolve(catal->xml, pubID, sysID);
+ if (ret == XML_CATAL_BREAK)
+ ret = NULL;
+ } else {
+ const xmlChar *sgml;
+
+ sgml = xmlCatalogSGMLResolve(catal, pubID, sysID);
+ if (sgml != NULL)
+ ret = xmlStrdup(sgml);
+ }
+ return (ret);
+}
+
+/**
+ * xmlACatalogResolveURI:
+ * @catal: a Catalog
+ * @URI: the URI
+ *
+ * Do a complete resolution lookup of an URI
+ *
+ * Returns the URI of the resource or NULL if not found, it must be freed
+ * by the caller.
+ */
+xmlChar *
+xmlACatalogResolveURI(xmlCatalogPtr catal, const xmlChar *URI) {
+ xmlChar *ret = NULL;
+
+ if ((URI == NULL) || (catal == NULL))
+ return(NULL);
+
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Resolve URI %s\n", URI);
+
+ if (catal->type == XML_XML_CATALOG_TYPE) {
+ ret = xmlCatalogListXMLResolveURI(catal->xml, URI);
+ if (ret == XML_CATAL_BREAK)
+ ret = NULL;
+ } else {
+ const xmlChar *sgml;
+
+ sgml = xmlCatalogSGMLResolve(catal, NULL, URI);
+ if (sgml != NULL)
+ sgml = xmlStrdup(sgml);
+ }
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlACatalogDump:
+ * @catal: a Catalog
+ * @out: the file.
+ *
+ * Free up all the memory associated with catalogs
+ */
+void
+xmlACatalogDump(xmlCatalogPtr catal, FILE *out) {
+ if ((out == NULL) || (catal == NULL))
+ return;
+
+ if (catal->type == XML_XML_CATALOG_TYPE) {
+ xmlDumpXMLCatalog(out, catal->xml);
+ } else {
+ xmlHashScan(catal->sgml,
+ (xmlHashScanner) xmlCatalogDumpEntry, out);
+ }
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlACatalogAdd:
+ * @catal: a Catalog
+ * @type: the type of record to add to the catalog
+ * @orig: the system, public or prefix to match
+ * @replace: the replacement value for the match
+ *
+ * Add an entry in the catalog, it may overwrite existing but
+ * different entries.
+ *
+ * Returns 0 if successful, -1 otherwise
+ */
+int
+xmlACatalogAdd(xmlCatalogPtr catal, const xmlChar * type,
+ const xmlChar * orig, const xmlChar * replace)
+{
+ int res = -1;
+
+ if (catal == NULL)
+ return(-1);
+
+ if (catal->type == XML_XML_CATALOG_TYPE) {
+ res = xmlAddXMLCatalog(catal->xml, type, orig, replace);
+ } else {
+ xmlCatalogEntryType cattype;
+
+ cattype = xmlGetSGMLCatalogEntryType(type);
+ if (cattype != XML_CATA_NONE) {
+ xmlCatalogEntryPtr entry;
+
+ entry = xmlNewCatalogEntry(cattype, orig, replace, NULL,
+ XML_CATA_PREFER_NONE);
+ if (catal->sgml == NULL)
+ catal->sgml = xmlHashCreate(10);
+ res = xmlHashAddEntry(catal->sgml, orig, entry);
+ }
+ }
+ return (res);
+}
+
+/**
+ * xmlACatalogRemove:
+ * @catal: a Catalog
+ * @value: the value to remove
+ *
+ * Remove an entry from the catalog
+ *
+ * Returns the number of entries removed if successful, -1 otherwise
+ */
+int
+xmlACatalogRemove(xmlCatalogPtr catal, const xmlChar *value) {
+ int res = -1;
+
+ if ((catal == NULL) || (value == NULL))
+ return(-1);
+
+ if (catal->type == XML_XML_CATALOG_TYPE) {
+ res = xmlDelXMLCatalog(catal->xml, value);
+ } else {
+ res = xmlHashRemoveEntry(catal->sgml, value,
+ (xmlHashDeallocator) xmlFreeCatalogEntry);
+ if (res == 0)
+ res = 1;
+ }
+ return(res);
+}
+
+/**
+ * xmlNewCatalog:
+ * @sgml: should this create an SGML catalog
+ *
+ * create a new Catalog.
+ *
+ * Returns the xmlCatalogPtr or NULL in case of error
+ */
+xmlCatalogPtr
+xmlNewCatalog(int sgml) {
+ xmlCatalogPtr catal = NULL;
+
+ if (sgml) {
+ catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE,
+ xmlCatalogDefaultPrefer);
+ if ((catal != NULL) && (catal->sgml == NULL))
+ catal->sgml = xmlHashCreate(10);
+ } else
+ catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
+ xmlCatalogDefaultPrefer);
+ return(catal);
+}
+
+/**
+ * xmlCatalogIsEmpty:
+ * @catal: should this create an SGML catalog
+ *
+ * Check is a catalog is empty
+ *
+ * Returns 1 if the catalog is empty, 0 if not, amd -1 in case of error.
+ */
+int
+xmlCatalogIsEmpty(xmlCatalogPtr catal) {
+ if (catal == NULL)
+ return(-1);
+
+ if (catal->type == XML_XML_CATALOG_TYPE) {
+ if (catal->xml == NULL)
+ return(1);
+ if ((catal->xml->type != XML_CATA_CATALOG) &&
+ (catal->xml->type != XML_CATA_BROKEN_CATALOG))
+ return(-1);
+ if (catal->xml->children == NULL)
+ return(1);
+ return(0);
+ } else {
+ int res;
+
+ if (catal->sgml == NULL)
+ return(1);
+ res = xmlHashSize(catal->sgml);
+ if (res == 0)
+ return(1);
+ if (res < 0)
+ return(-1);
+ }
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * Public interfaces manipulating the global shared default catalog *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlInitializeCatalogData:
+ *
+ * Do the catalog initialization only of global data, doesn't try to load
+ * any catalog actually.
+ * this function is not thread safe, catalog initialization should
+ * preferably be done once at startup
+ */
+static void
+xmlInitializeCatalogData(void) {
+ if (xmlCatalogInitialized != 0)
+ return;
+
+ if (getenv("XML_DEBUG_CATALOG"))
+ xmlDebugCatalogs = 1;
+ xmlCatalogMutex = xmlNewRMutex();
+
+ xmlCatalogInitialized = 1;
+}
+/**
+ * xmlInitializeCatalog:
+ *
+ * Do the catalog initialization.
+ * this function is not thread safe, catalog initialization should
+ * preferably be done once at startup
+ */
+void
+xmlInitializeCatalog(void) {
+ if (xmlCatalogInitialized != 0)
+ return;
+
+ xmlInitializeCatalogData();
+ xmlRMutexLock(xmlCatalogMutex);
+
+ if (getenv("XML_DEBUG_CATALOG"))
+ xmlDebugCatalogs = 1;
+
+ if (xmlDefaultCatalog == NULL) {
+ const char *catalogs;
+ char *path;
+ const char *cur, *paths;
+ xmlCatalogPtr catal;
+ xmlCatalogEntryPtr *nextent;
+
+ catalogs = (const char *) getenv("XML_CATALOG_FILES");
+ if (catalogs == NULL)
+ catalogs = XML_XML_DEFAULT_CATALOG;
+
+ catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
+ xmlCatalogDefaultPrefer);
+ if (catal != NULL) {
+ /* the XML_CATALOG_FILES envvar is allowed to contain a
+ space-separated list of entries. */
+ cur = catalogs;
+ nextent = &catal->xml;
+ while (*cur != '\0') {
+ while (xmlIsBlank_ch(*cur))
+ cur++;
+ if (*cur != 0) {
+ paths = cur;
+ while ((*cur != 0) && (!xmlIsBlank_ch(*cur)))
+ cur++;
+ path = (char *) xmlStrndup((const xmlChar *)paths, cur - paths);
+ if (path != NULL) {
+ *nextent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
+ NULL, BAD_CAST path, xmlCatalogDefaultPrefer);
+ if (*nextent != NULL)
+ nextent = &((*nextent)->next);
+ xmlFree(path);
+ }
+ }
+ }
+ xmlDefaultCatalog = catal;
+ }
+ }
+
+ xmlRMutexUnlock(xmlCatalogMutex);
+}
+
+
+/**
+ * xmlLoadCatalog:
+ * @filename: a file path
+ *
+ * Load the catalog and makes its definitions effective for the default
+ * external entity loader. It will recurse in SGML CATALOG entries.
+ * this function is not thread safe, catalog initialization should
+ * preferably be done once at startup
+ *
+ * Returns 0 in case of success -1 in case of error
+ */
+int
+xmlLoadCatalog(const char *filename)
+{
+ int ret;
+ xmlCatalogPtr catal;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalogData();
+
+ xmlRMutexLock(xmlCatalogMutex);
+
+ if (xmlDefaultCatalog == NULL) {
+ catal = xmlLoadACatalog(filename);
+ if (catal == NULL) {
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(-1);
+ }
+
+ xmlDefaultCatalog = catal;
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(0);
+ }
+
+ ret = xmlExpandCatalog(xmlDefaultCatalog, filename);
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(ret);
+}
+
+/**
+ * xmlLoadCatalogs:
+ * @pathss: a list of directories separated by a colon or a space.
+ *
+ * Load the catalogs and makes their definitions effective for the default
+ * external entity loader.
+ * this function is not thread safe, catalog initialization should
+ * preferably be done once at startup
+ */
+void
+xmlLoadCatalogs(const char *pathss) {
+ const char *cur;
+ const char *paths;
+ xmlChar *path;
+
+ if (pathss == NULL)
+ return;
+
+ cur = pathss;
+ while ((cur != NULL) && (*cur != 0)) {
+ while (xmlIsBlank_ch(*cur)) cur++;
+ if (*cur != 0) {
+ paths = cur;
+ while ((*cur != 0) && (*cur != ':') && (!xmlIsBlank_ch(*cur)))
+ cur++;
+ path = xmlStrndup((const xmlChar *)paths, cur - paths);
+ if (path != NULL) {
+ xmlLoadCatalog((const char *) path);
+ xmlFree(path);
+ }
+ }
+ while (*cur == ':')
+ cur++;
+ }
+}
+
+/**
+ * xmlCatalogCleanup:
+ *
+ * Free up all the memory associated with catalogs
+ */
+void
+xmlCatalogCleanup(void) {
+ if (xmlCatalogInitialized == 0)
+ return;
+
+ xmlRMutexLock(xmlCatalogMutex);
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Catalogs cleanup\n");
+ if (xmlCatalogXMLFiles != NULL)
+ xmlHashFree(xmlCatalogXMLFiles,
+ (xmlHashDeallocator)xmlFreeCatalogHashEntryList);
+ xmlCatalogXMLFiles = NULL;
+ if (xmlDefaultCatalog != NULL)
+ xmlFreeCatalog(xmlDefaultCatalog);
+ xmlDefaultCatalog = NULL;
+ xmlDebugCatalogs = 0;
+ xmlCatalogInitialized = 0;
+ xmlRMutexUnlock(xmlCatalogMutex);
+ xmlFreeRMutex(xmlCatalogMutex);
+}
+
+/**
+ * xmlCatalogResolveSystem:
+ * @sysID: the system ID string
+ *
+ * Try to lookup the catalog resource for a system ID
+ *
+ * Returns the resource if found or NULL otherwise, the value returned
+ * must be freed by the caller.
+ */
+xmlChar *
+xmlCatalogResolveSystem(const xmlChar *sysID) {
+ xmlChar *ret;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ ret = xmlACatalogResolveSystem(xmlDefaultCatalog, sysID);
+ return(ret);
+}
+
+/**
+ * xmlCatalogResolvePublic:
+ * @pubID: the public ID string
+ *
+ * Try to lookup the catalog reference associated to a public ID
+ *
+ * Returns the resource if found or NULL otherwise, the value returned
+ * must be freed by the caller.
+ */
+xmlChar *
+xmlCatalogResolvePublic(const xmlChar *pubID) {
+ xmlChar *ret;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ ret = xmlACatalogResolvePublic(xmlDefaultCatalog, pubID);
+ return(ret);
+}
+
+/**
+ * xmlCatalogResolve:
+ * @pubID: the public ID string
+ * @sysID: the system ID string
+ *
+ * Do a complete resolution lookup of an External Identifier
+ *
+ * Returns the URI of the resource or NULL if not found, it must be freed
+ * by the caller.
+ */
+xmlChar *
+xmlCatalogResolve(const xmlChar *pubID, const xmlChar *sysID) {
+ xmlChar *ret;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ ret = xmlACatalogResolve(xmlDefaultCatalog, pubID, sysID);
+ return(ret);
+}
+
+/**
+ * xmlCatalogResolveURI:
+ * @URI: the URI
+ *
+ * Do a complete resolution lookup of an URI
+ *
+ * Returns the URI of the resource or NULL if not found, it must be freed
+ * by the caller.
+ */
+xmlChar *
+xmlCatalogResolveURI(const xmlChar *URI) {
+ xmlChar *ret;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ ret = xmlACatalogResolveURI(xmlDefaultCatalog, URI);
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlCatalogDump:
+ * @out: the file.
+ *
+ * Free up all the memory associated with catalogs
+ */
+void
+xmlCatalogDump(FILE *out) {
+ if (out == NULL)
+ return;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ xmlACatalogDump(xmlDefaultCatalog, out);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlCatalogAdd:
+ * @type: the type of record to add to the catalog
+ * @orig: the system, public or prefix to match
+ * @replace: the replacement value for the match
+ *
+ * Add an entry in the catalog, it may overwrite existing but
+ * different entries.
+ * If called before any other catalog routine, allows to override the
+ * default shared catalog put in place by xmlInitializeCatalog();
+ *
+ * Returns 0 if successful, -1 otherwise
+ */
+int
+xmlCatalogAdd(const xmlChar *type, const xmlChar *orig, const xmlChar *replace) {
+ int res = -1;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalogData();
+
+ xmlRMutexLock(xmlCatalogMutex);
+ /*
+ * Specific case where one want to override the default catalog
+ * put in place by xmlInitializeCatalog();
+ */
+ if ((xmlDefaultCatalog == NULL) &&
+ (xmlStrEqual(type, BAD_CAST "catalog"))) {
+ xmlDefaultCatalog = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
+ xmlCatalogDefaultPrefer);
+ xmlDefaultCatalog->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
+ orig, NULL, xmlCatalogDefaultPrefer);
+
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(0);
+ }
+
+ res = xmlACatalogAdd(xmlDefaultCatalog, type, orig, replace);
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(res);
+}
+
+/**
+ * xmlCatalogRemove:
+ * @value: the value to remove
+ *
+ * Remove an entry from the catalog
+ *
+ * Returns the number of entries removed if successful, -1 otherwise
+ */
+int
+xmlCatalogRemove(const xmlChar *value) {
+ int res;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ xmlRMutexLock(xmlCatalogMutex);
+ res = xmlACatalogRemove(xmlDefaultCatalog, value);
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(res);
+}
+
+/**
+ * xmlCatalogConvert:
+ *
+ * Convert all the SGML catalog entries as XML ones
+ *
+ * Returns the number of entries converted if successful, -1 otherwise
+ */
+int
+xmlCatalogConvert(void) {
+ int res = -1;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ xmlRMutexLock(xmlCatalogMutex);
+ res = xmlConvertSGMLCatalog(xmlDefaultCatalog);
+ xmlRMutexUnlock(xmlCatalogMutex);
+ return(res);
+}
+
+/************************************************************************
+ * *
+ * Public interface manipulating the common preferences *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCatalogGetDefaults:
+ *
+ * Used to get the user preference w.r.t. to what catalogs should
+ * be accepted
+ *
+ * Returns the current xmlCatalogAllow value
+ */
+xmlCatalogAllow
+xmlCatalogGetDefaults(void) {
+ return(xmlCatalogDefaultAllow);
+}
+
+/**
+ * xmlCatalogSetDefaults:
+ * @allow: what catalogs should be accepted
+ *
+ * Used to set the user preference w.r.t. to what catalogs should
+ * be accepted
+ */
+void
+xmlCatalogSetDefaults(xmlCatalogAllow allow) {
+ if (xmlDebugCatalogs) {
+ switch (allow) {
+ case XML_CATA_ALLOW_NONE:
+ xmlGenericError(xmlGenericErrorContext,
+ "Disabling catalog usage\n");
+ break;
+ case XML_CATA_ALLOW_GLOBAL:
+ xmlGenericError(xmlGenericErrorContext,
+ "Allowing only global catalogs\n");
+ break;
+ case XML_CATA_ALLOW_DOCUMENT:
+ xmlGenericError(xmlGenericErrorContext,
+ "Allowing only catalogs from the document\n");
+ break;
+ case XML_CATA_ALLOW_ALL:
+ xmlGenericError(xmlGenericErrorContext,
+ "Allowing all catalogs\n");
+ break;
+ }
+ }
+ xmlCatalogDefaultAllow = allow;
+}
+
+/**
+ * xmlCatalogSetDefaultPrefer:
+ * @prefer: the default preference for delegation
+ *
+ * Allows to set the preference between public and system for deletion
+ * in XML Catalog resolution. C.f. section 4.1.1 of the spec
+ * Values accepted are XML_CATA_PREFER_PUBLIC or XML_CATA_PREFER_SYSTEM
+ *
+ * Returns the previous value of the default preference for delegation
+ */
+xmlCatalogPrefer
+xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer) {
+ xmlCatalogPrefer ret = xmlCatalogDefaultPrefer;
+
+ if (prefer == XML_CATA_PREFER_NONE)
+ return(ret);
+
+ if (xmlDebugCatalogs) {
+ switch (prefer) {
+ case XML_CATA_PREFER_PUBLIC:
+ xmlGenericError(xmlGenericErrorContext,
+ "Setting catalog preference to PUBLIC\n");
+ break;
+ case XML_CATA_PREFER_SYSTEM:
+ xmlGenericError(xmlGenericErrorContext,
+ "Setting catalog preference to SYSTEM\n");
+ break;
+ case XML_CATA_PREFER_NONE:
+ break;
+ }
+ }
+ xmlCatalogDefaultPrefer = prefer;
+ return(ret);
+}
+
+/**
+ * xmlCatalogSetDebug:
+ * @level: the debug level of catalogs required
+ *
+ * Used to set the debug level for catalog operation, 0 disable
+ * debugging, 1 enable it
+ *
+ * Returns the previous value of the catalog debugging level
+ */
+int
+xmlCatalogSetDebug(int level) {
+ int ret = xmlDebugCatalogs;
+
+ if (level <= 0)
+ xmlDebugCatalogs = 0;
+ else
+ xmlDebugCatalogs = level;
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * Minimal interfaces used for per-document catalogs by the parser *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCatalogFreeLocal:
+ * @catalogs: a document's list of catalogs
+ *
+ * Free up the memory associated to the catalog list
+ */
+void
+xmlCatalogFreeLocal(void *catalogs) {
+ xmlCatalogEntryPtr catal;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ catal = (xmlCatalogEntryPtr) catalogs;
+ if (catal != NULL)
+ xmlFreeCatalogEntryList(catal);
+}
+
+
+/**
+ * xmlCatalogAddLocal:
+ * @catalogs: a document's list of catalogs
+ * @URL: the URL to a new local catalog
+ *
+ * Add the new entry to the catalog list
+ *
+ * Returns the updated list
+ */
+void *
+xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) {
+ xmlCatalogEntryPtr catal, add;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ if (URL == NULL)
+ return(catalogs);
+
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Adding document catalog %s\n", URL);
+
+ add = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, URL, NULL,
+ xmlCatalogDefaultPrefer);
+ if (add == NULL)
+ return(catalogs);
+
+ catal = (xmlCatalogEntryPtr) catalogs;
+ if (catal == NULL)
+ return((void *) add);
+
+ while (catal->next != NULL)
+ catal = catal->next;
+ catal->next = add;
+ return(catalogs);
+}
+
+/**
+ * xmlCatalogLocalResolve:
+ * @catalogs: a document's list of catalogs
+ * @pubID: the public ID string
+ * @sysID: the system ID string
+ *
+ * Do a complete resolution lookup of an External Identifier using a
+ * document's private catalog list
+ *
+ * Returns the URI of the resource or NULL if not found, it must be freed
+ * by the caller.
+ */
+xmlChar *
+xmlCatalogLocalResolve(void *catalogs, const xmlChar *pubID,
+ const xmlChar *sysID) {
+ xmlCatalogEntryPtr catal;
+ xmlChar *ret;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ if ((pubID == NULL) && (sysID == NULL))
+ return(NULL);
+
+ if (xmlDebugCatalogs) {
+ if ((pubID != NULL) && (sysID != NULL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Local Resolve: pubID %s sysID %s\n", pubID, sysID);
+ } else if (pubID != NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Local Resolve: pubID %s\n", pubID);
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Local Resolve: sysID %s\n", sysID);
+ }
+ }
+
+ catal = (xmlCatalogEntryPtr) catalogs;
+ if (catal == NULL)
+ return(NULL);
+ ret = xmlCatalogListXMLResolve(catal, pubID, sysID);
+ if ((ret != NULL) && (ret != XML_CATAL_BREAK))
+ return(ret);
+ return(NULL);
+}
+
+/**
+ * xmlCatalogLocalResolveURI:
+ * @catalogs: a document's list of catalogs
+ * @URI: the URI
+ *
+ * Do a complete resolution lookup of an URI using a
+ * document's private catalog list
+ *
+ * Returns the URI of the resource or NULL if not found, it must be freed
+ * by the caller.
+ */
+xmlChar *
+xmlCatalogLocalResolveURI(void *catalogs, const xmlChar *URI) {
+ xmlCatalogEntryPtr catal;
+ xmlChar *ret;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ if (URI == NULL)
+ return(NULL);
+
+ if (xmlDebugCatalogs)
+ xmlGenericError(xmlGenericErrorContext,
+ "Resolve URI %s\n", URI);
+
+ catal = (xmlCatalogEntryPtr) catalogs;
+ if (catal == NULL)
+ return(NULL);
+ ret = xmlCatalogListXMLResolveURI(catal, URI);
+ if ((ret != NULL) && (ret != XML_CATAL_BREAK))
+ return(ret);
+ return(NULL);
+}
+
+/************************************************************************
+ * *
+ * Deprecated interfaces *
+ * *
+ ************************************************************************/
+/**
+ * xmlCatalogGetSystem:
+ * @sysID: the system ID string
+ *
+ * Try to lookup the catalog reference associated to a system ID
+ * DEPRECATED, use xmlCatalogResolveSystem()
+ *
+ * Returns the resource if found or NULL otherwise.
+ */
+const xmlChar *
+xmlCatalogGetSystem(const xmlChar *sysID) {
+ xmlChar *ret;
+ static xmlChar result[1000];
+ static int msg = 0;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ if (msg == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Use of deprecated xmlCatalogGetSystem() call\n");
+ msg++;
+ }
+
+ if (sysID == NULL)
+ return(NULL);
+
+ /*
+ * Check first the XML catalogs
+ */
+ if (xmlDefaultCatalog != NULL) {
+ ret = xmlCatalogListXMLResolve(xmlDefaultCatalog->xml, NULL, sysID);
+ if ((ret != NULL) && (ret != XML_CATAL_BREAK)) {
+ snprintf((char *) result, sizeof(result) - 1, "%s", (char *) ret);
+ result[sizeof(result) - 1] = 0;
+ return(result);
+ }
+ }
+
+ if (xmlDefaultCatalog != NULL)
+ return(xmlCatalogGetSGMLSystem(xmlDefaultCatalog->sgml, sysID));
+ return(NULL);
+}
+
+/**
+ * xmlCatalogGetPublic:
+ * @pubID: the public ID string
+ *
+ * Try to lookup the catalog reference associated to a public ID
+ * DEPRECATED, use xmlCatalogResolvePublic()
+ *
+ * Returns the resource if found or NULL otherwise.
+ */
+const xmlChar *
+xmlCatalogGetPublic(const xmlChar *pubID) {
+ xmlChar *ret;
+ static xmlChar result[1000];
+ static int msg = 0;
+
+ if (!xmlCatalogInitialized)
+ xmlInitializeCatalog();
+
+ if (msg == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Use of deprecated xmlCatalogGetPublic() call\n");
+ msg++;
+ }
+
+ if (pubID == NULL)
+ return(NULL);
+
+ /*
+ * Check first the XML catalogs
+ */
+ if (xmlDefaultCatalog != NULL) {
+ ret = xmlCatalogListXMLResolve(xmlDefaultCatalog->xml, pubID, NULL);
+ if ((ret != NULL) && (ret != XML_CATAL_BREAK)) {
+ snprintf((char *) result, sizeof(result) - 1, "%s", (char *) ret);
+ result[sizeof(result) - 1] = 0;
+ return(result);
+ }
+ }
+
+ if (xmlDefaultCatalog != NULL)
+ return(xmlCatalogGetSGMLPublic(xmlDefaultCatalog->sgml, pubID));
+ return(NULL);
+}
+
+#endif /* LIBXML_CATALOG_ENABLED */
diff --git a/check-relaxng-test-suite.py b/check-relaxng-test-suite.py
new file mode 100755
index 0000000..0832758
--- /dev/null
+++ b/check-relaxng-test-suite.py
@@ -0,0 +1,394 @@
+#!/usr/bin/python
+import sys
+import time
+import os
+import string
+import StringIO
+sys.path.append("python")
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+debug = 0
+verbose = 0
+quiet = 1
+
+#
+# the testsuite description
+#
+CONF="test/relaxng/OASIS/spectest.xml"
+LOG="check-relaxng-test-suite.log"
+RES="relaxng-test-results.xml"
+
+log = open(LOG, "w")
+nb_schemas_tests = 0
+nb_schemas_success = 0
+nb_schemas_failed = 0
+nb_instances_tests = 0
+nb_instances_success = 0
+nb_instances_failed = 0
+
+libxml2.lineNumbersDefault(1)
+#
+# Error and warnng callbacks
+#
+def callback(ctx, str):
+ global log
+ log.write("%s%s" % (ctx, str))
+
+libxml2.registerErrorHandler(callback, "")
+
+#
+# Resolver callback
+#
+resources = {}
+def resolver(URL, ID, ctxt):
+ global resources
+
+ if string.find(URL, '#') != -1:
+ URL = URL[0:string.find(URL, '#')]
+ if resources.has_key(URL):
+ return(StringIO.StringIO(resources[URL]))
+ log.write("Resolver failure: asked %s\n" % (URL))
+ log.write("resources: %s\n" % (resources))
+ return None
+
+#
+# Load the previous results
+#
+#results = {}
+#previous = {}
+#
+#try:
+# res = libxml2.parseFile(RES)
+#except:
+# log.write("Could not parse %s" % (RES))
+
+#
+# handle a valid instance
+#
+def handle_valid(node, schema):
+ global log
+ global nb_instances_success
+ global nb_instances_failed
+
+ instance = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ instance = instance + child.serialize()
+ child = child.next
+
+ try:
+ doc = libxml2.parseDoc(instance)
+ except:
+ doc = None
+
+ if doc == None:
+ log.write("\nFailed to parse correct instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ nb_instances_failed = nb_instances_failed + 1
+ return
+
+ try:
+ ctxt = schema.relaxNGNewValidCtxt()
+ ret = doc.relaxNGValidateDoc(ctxt)
+ except:
+ ret = -1
+ if ret != 0:
+ log.write("\nFailed to validate correct instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ nb_instances_failed = nb_instances_failed + 1
+ else:
+ nb_instances_success = nb_instances_success + 1
+ doc.freeDoc()
+
+#
+# handle an invalid instance
+#
+def handle_invalid(node, schema):
+ global log
+ global nb_instances_success
+ global nb_instances_failed
+
+ instance = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ instance = instance + child.serialize()
+ child = child.next
+
+ try:
+ doc = libxml2.parseDoc(instance)
+ except:
+ doc = None
+
+ if doc == None:
+ log.write("\nStrange: failed to parse incorrect instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ return
+
+ try:
+ ctxt = schema.relaxNGNewValidCtxt()
+ ret = doc.relaxNGValidateDoc(ctxt)
+ except:
+ ret = -1
+ if ret == 0:
+ log.write("\nFailed to detect validation problem in instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ nb_instances_failed = nb_instances_failed + 1
+ else:
+ nb_instances_success = nb_instances_success + 1
+ doc.freeDoc()
+
+#
+# handle an incorrect test
+#
+def handle_correct(node):
+ global log
+ global nb_schemas_success
+ global nb_schemas_failed
+
+ schema = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ schema = schema + child.serialize()
+ child = child.next
+
+ try:
+ rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
+ rngs = rngp.relaxNGParse()
+ except:
+ rngs = None
+ if rngs == None:
+ log.write("\nFailed to compile correct schema:\n-----\n")
+ log.write(schema)
+ log.write("\n-----\n")
+ nb_schemas_failed = nb_schemas_failed + 1
+ else:
+ nb_schemas_success = nb_schemas_success + 1
+ return rngs
+
+def handle_incorrect(node):
+ global log
+ global nb_schemas_success
+ global nb_schemas_failed
+
+ schema = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ schema = schema + child.serialize()
+ child = child.next
+
+ try:
+ rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
+ rngs = rngp.relaxNGParse()
+ except:
+ rngs = None
+ if rngs != None:
+ log.write("\nFailed to detect schema error in:\n-----\n")
+ log.write(schema)
+ log.write("\n-----\n")
+ nb_schemas_failed = nb_schemas_failed + 1
+ else:
+# log.write("\nSuccess detecting schema error in:\n-----\n")
+# log.write(schema)
+# log.write("\n-----\n")
+ nb_schemas_success = nb_schemas_success + 1
+ return None
+
+#
+# resource handling: keep a dictionary of URL->string mappings
+#
+def handle_resource(node, dir):
+ global resources
+
+ try:
+ name = node.prop('name')
+ except:
+ name = None
+
+ if name == None or name == '':
+ log.write("resource has no name")
+ return;
+
+ if dir != None:
+# name = libxml2.buildURI(name, dir)
+ name = dir + '/' + name
+
+ res = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ res = res + child.serialize()
+ child = child.next
+ resources[name] = res
+
+#
+# dir handling: pseudo directory resources
+#
+def handle_dir(node, dir):
+ try:
+ name = node.prop('name')
+ except:
+ name = None
+
+ if name == None or name == '':
+ log.write("resource has no name")
+ return;
+
+ if dir != None:
+# name = libxml2.buildURI(name, dir)
+ name = dir + '/' + name
+
+ dirs = node.xpathEval('dir')
+ for dir in dirs:
+ handle_dir(dir, name)
+ res = node.xpathEval('resource')
+ for r in res:
+ handle_resource(r, name)
+
+#
+# handle a testCase element
+#
+def handle_testCase(node):
+ global nb_schemas_tests
+ global nb_instances_tests
+ global resources
+
+ sections = node.xpathEval('string(section)')
+ log.write("\n ======== test %d line %d section %s ==========\n" % (
+
+ nb_schemas_tests, node.lineNo(), sections))
+ resources = {}
+ if debug:
+ print "test %d line %d" % (nb_schemas_tests, node.lineNo())
+
+ dirs = node.xpathEval('dir')
+ for dir in dirs:
+ handle_dir(dir, None)
+ res = node.xpathEval('resource')
+ for r in res:
+ handle_resource(r, None)
+
+ tsts = node.xpathEval('incorrect')
+ if tsts != []:
+ if len(tsts) != 1:
+ print "warning test line %d has more than one <incorrect> example" %(node.lineNo())
+ schema = handle_incorrect(tsts[0])
+ else:
+ tsts = node.xpathEval('correct')
+ if tsts != []:
+ if len(tsts) != 1:
+ print "warning test line %d has more than one <correct> example"% (node.lineNo())
+ schema = handle_correct(tsts[0])
+ else:
+ print "warning <testCase> line %d has no <correct> nor <incorrect> child" % (node.lineNo())
+
+ nb_schemas_tests = nb_schemas_tests + 1;
+
+ valids = node.xpathEval('valid')
+ invalids = node.xpathEval('invalid')
+ nb_instances_tests = nb_instances_tests + len(valids) + len(invalids)
+ if schema != None:
+ for valid in valids:
+ handle_valid(valid, schema)
+ for invalid in invalids:
+ handle_invalid(invalid, schema)
+
+
+#
+# handle a testSuite element
+#
+def handle_testSuite(node, level = 0):
+ global nb_schemas_tests, nb_schemas_success, nb_schemas_failed
+ global nb_instances_tests, nb_instances_success, nb_instances_failed
+ global quiet
+ if level >= 1:
+ old_schemas_tests = nb_schemas_tests
+ old_schemas_success = nb_schemas_success
+ old_schemas_failed = nb_schemas_failed
+ old_instances_tests = nb_instances_tests
+ old_instances_success = nb_instances_success
+ old_instances_failed = nb_instances_failed
+
+ docs = node.xpathEval('documentation')
+ authors = node.xpathEval('author')
+ if docs != []:
+ msg = ""
+ for doc in docs:
+ msg = msg + doc.content + " "
+ if authors != []:
+ msg = msg + "written by "
+ for author in authors:
+ msg = msg + author.content + " "
+ if quiet == 0:
+ print msg
+ sections = node.xpathEval('section')
+ if sections != [] and level <= 0:
+ msg = ""
+ for section in sections:
+ msg = msg + section.content + " "
+ if quiet == 0:
+ print "Tests for section %s" % (msg)
+ for test in node.xpathEval('testCase'):
+ handle_testCase(test)
+ for test in node.xpathEval('testSuite'):
+ handle_testSuite(test, level + 1)
+
+
+ if verbose and level >= 1 and sections != []:
+ msg = ""
+ for section in sections:
+ msg = msg + section.content + " "
+ print "Result of tests for section %s" % (msg)
+ if nb_schemas_tests != old_schemas_tests:
+ print "found %d test schemas: %d success %d failures" % (
+ nb_schemas_tests - old_schemas_tests,
+ nb_schemas_success - old_schemas_success,
+ nb_schemas_failed - old_schemas_failed)
+ if nb_instances_tests != old_instances_tests:
+ print "found %d test instances: %d success %d failures" % (
+ nb_instances_tests - old_instances_tests,
+ nb_instances_success - old_instances_success,
+ nb_instances_failed - old_instances_failed)
+#
+# Parse the conf file
+#
+libxml2.substituteEntitiesDefault(1);
+testsuite = libxml2.parseFile(CONF)
+libxml2.setEntityLoader(resolver)
+root = testsuite.getRootElement()
+if root.name != 'testSuite':
+ print "%s doesn't start with a testSuite element, aborting" % (CONF)
+ sys.exit(1)
+if quiet == 0:
+ print "Running Relax NG testsuite"
+handle_testSuite(root)
+
+if quiet == 0:
+ print "\nTOTAL:\n"
+if quiet == 0 or nb_schemas_failed != 0:
+ print "found %d test schemas: %d success %d failures" % (
+ nb_schemas_tests, nb_schemas_success, nb_schemas_failed)
+if quiet == 0 or nb_instances_failed != 0:
+ print "found %d test instances: %d success %d failures" % (
+ nb_instances_tests, nb_instances_success, nb_instances_failed)
+
+testsuite.freeDoc()
+
+# Memory debug specific
+libxml2.relaxNGCleanupTypes()
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ if quiet == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/check-relaxng-test-suite2.py b/check-relaxng-test-suite2.py
new file mode 100755
index 0000000..639e587
--- /dev/null
+++ b/check-relaxng-test-suite2.py
@@ -0,0 +1,418 @@
+#!/usr/bin/python
+import sys
+import time
+import os
+import string
+import StringIO
+sys.path.append("python")
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+debug = 0
+quiet = 1
+
+#
+# the testsuite description
+#
+CONF="test/relaxng/testsuite.xml"
+LOG="check-relaxng-test-suite2.log"
+
+log = open(LOG, "w")
+nb_schemas_tests = 0
+nb_schemas_success = 0
+nb_schemas_failed = 0
+nb_instances_tests = 0
+nb_instances_success = 0
+nb_instances_failed = 0
+
+libxml2.lineNumbersDefault(1)
+#
+# Resolver callback
+#
+resources = {}
+def resolver(URL, ID, ctxt):
+ global resources
+
+ if resources.has_key(URL):
+ return(StringIO.StringIO(resources[URL]))
+ log.write("Resolver failure: asked %s\n" % (URL))
+ log.write("resources: %s\n" % (resources))
+ return None
+
+#
+# Load the previous results
+#
+#results = {}
+#previous = {}
+#
+#try:
+# res = libxml2.parseFile(RES)
+#except:
+# log.write("Could not parse %s" % (RES))
+
+#
+# handle a valid instance
+#
+def handle_valid(node, schema):
+ global log
+ global nb_instances_success
+ global nb_instances_failed
+
+ instance = node.prop("dtd")
+ if instance == None:
+ instance = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ instance = instance + child.serialize()
+ child = child.next
+
+# mem = libxml2.debugMemory(1);
+ try:
+ doc = libxml2.parseDoc(instance)
+ except:
+ doc = None
+
+ if doc == None:
+ log.write("\nFailed to parse correct instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ nb_instances_failed = nb_instances_failed + 1
+ return
+
+ if debug:
+ print "instance line %d" % (node.lineNo())
+
+ try:
+ ctxt = schema.relaxNGNewValidCtxt()
+ ret = doc.relaxNGValidateDoc(ctxt)
+ del ctxt
+ except:
+ ret = -1
+
+ doc.freeDoc()
+# if mem != libxml2.debugMemory(1):
+# print "validating instance %d line %d leaks" % (
+# nb_instances_tests, node.lineNo())
+
+ if ret != 0:
+ log.write("\nFailed to validate correct instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ nb_instances_failed = nb_instances_failed + 1
+ else:
+ nb_instances_success = nb_instances_success + 1
+
+#
+# handle an invalid instance
+#
+def handle_invalid(node, schema):
+ global log
+ global nb_instances_success
+ global nb_instances_failed
+
+ instance = node.prop("dtd")
+ if instance == None:
+ instance = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ instance = instance + child.serialize()
+ child = child.next
+
+# mem = libxml2.debugMemory(1);
+
+ try:
+ doc = libxml2.parseDoc(instance)
+ except:
+ doc = None
+
+ if doc == None:
+ log.write("\nStrange: failed to parse incorrect instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ return
+
+ if debug:
+ print "instance line %d" % (node.lineNo())
+
+ try:
+ ctxt = schema.relaxNGNewValidCtxt()
+ ret = doc.relaxNGValidateDoc(ctxt)
+ del ctxt
+
+ except:
+ ret = -1
+
+ doc.freeDoc()
+# mem2 = libxml2.debugMemory(1)
+# if mem != mem2:
+# print "validating instance %d line %d leaks %d bytes" % (
+# nb_instances_tests, node.lineNo(), mem2 - mem)
+
+ if ret == 0:
+ log.write("\nFailed to detect validation problem in instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ nb_instances_failed = nb_instances_failed + 1
+ else:
+ nb_instances_success = nb_instances_success + 1
+
+#
+# handle an incorrect test
+#
+def handle_correct(node):
+ global log
+ global nb_schemas_success
+ global nb_schemas_failed
+
+ schema = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ schema = schema + child.serialize()
+ child = child.next
+
+ try:
+ rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
+ rngs = rngp.relaxNGParse()
+ except:
+ rngs = None
+ if rngs == None:
+ log.write("\nFailed to compile correct schema:\n-----\n")
+ log.write(schema)
+ log.write("\n-----\n")
+ nb_schemas_failed = nb_schemas_failed + 1
+ else:
+ nb_schemas_success = nb_schemas_success + 1
+ return rngs
+
+def handle_incorrect(node):
+ global log
+ global nb_schemas_success
+ global nb_schemas_failed
+
+ schema = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ schema = schema + child.serialize()
+ child = child.next
+
+ try:
+ rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
+ rngs = rngp.relaxNGParse()
+ except:
+ rngs = None
+ if rngs != None:
+ log.write("\nFailed to detect schema error in:\n-----\n")
+ log.write(schema)
+ log.write("\n-----\n")
+ nb_schemas_failed = nb_schemas_failed + 1
+ else:
+# log.write("\nSuccess detecting schema error in:\n-----\n")
+# log.write(schema)
+# log.write("\n-----\n")
+ nb_schemas_success = nb_schemas_success + 1
+ return None
+
+#
+# resource handling: keep a dictionary of URL->string mappings
+#
+def handle_resource(node, dir):
+ global resources
+
+ try:
+ name = node.prop('name')
+ except:
+ name = None
+
+ if name == None or name == '':
+ log.write("resource has no name")
+ return;
+
+ if dir != None:
+# name = libxml2.buildURI(name, dir)
+ name = dir + '/' + name
+
+ res = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ res = res + child.serialize()
+ child = child.next
+ resources[name] = res
+
+#
+# dir handling: pseudo directory resources
+#
+def handle_dir(node, dir):
+ try:
+ name = node.prop('name')
+ except:
+ name = None
+
+ if name == None or name == '':
+ log.write("resource has no name")
+ return;
+
+ if dir != None:
+# name = libxml2.buildURI(name, dir)
+ name = dir + '/' + name
+
+ dirs = node.xpathEval('dir')
+ for dir in dirs:
+ handle_dir(dir, name)
+ res = node.xpathEval('resource')
+ for r in res:
+ handle_resource(r, name)
+
+#
+# handle a testCase element
+#
+def handle_testCase(node):
+ global nb_schemas_tests
+ global nb_instances_tests
+ global resources
+
+ sections = node.xpathEval('string(section)')
+ log.write("\n ======== test %d line %d section %s ==========\n" % (
+
+ nb_schemas_tests, node.lineNo(), sections))
+ resources = {}
+ if debug:
+ print "test %d line %d" % (nb_schemas_tests, node.lineNo())
+
+ dirs = node.xpathEval('dir')
+ for dir in dirs:
+ handle_dir(dir, None)
+ res = node.xpathEval('resource')
+ for r in res:
+ handle_resource(r, None)
+
+ tsts = node.xpathEval('incorrect')
+ if tsts != []:
+ if len(tsts) != 1:
+ print "warning test line %d has more than one <incorrect> example" %(node.lineNo())
+ schema = handle_incorrect(tsts[0])
+ else:
+ tsts = node.xpathEval('correct')
+ if tsts != []:
+ if len(tsts) != 1:
+ print "warning test line %d has more than one <correct> example"% (node.lineNo())
+ schema = handle_correct(tsts[0])
+ else:
+ print "warning <testCase> line %d has no <correct> nor <incorrect> child" % (node.lineNo())
+
+ nb_schemas_tests = nb_schemas_tests + 1;
+
+ valids = node.xpathEval('valid')
+ invalids = node.xpathEval('invalid')
+ nb_instances_tests = nb_instances_tests + len(valids) + len(invalids)
+ if schema != None:
+ for valid in valids:
+ handle_valid(valid, schema)
+ for invalid in invalids:
+ handle_invalid(invalid, schema)
+
+
+#
+# handle a testSuite element
+#
+def handle_testSuite(node, level = 0):
+ global nb_schemas_tests, nb_schemas_success, nb_schemas_failed
+ global nb_instances_tests, nb_instances_success, nb_instances_failed
+ if level >= 1:
+ old_schemas_tests = nb_schemas_tests
+ old_schemas_success = nb_schemas_success
+ old_schemas_failed = nb_schemas_failed
+ old_instances_tests = nb_instances_tests
+ old_instances_success = nb_instances_success
+ old_instances_failed = nb_instances_failed
+
+ docs = node.xpathEval('documentation')
+ authors = node.xpathEval('author')
+ if docs != []:
+ msg = ""
+ for doc in docs:
+ msg = msg + doc.content + " "
+ if authors != []:
+ msg = msg + "written by "
+ for author in authors:
+ msg = msg + author.content + " "
+ if quiet == 0:
+ print msg
+ sections = node.xpathEval('section')
+ if sections != [] and level <= 0:
+ msg = ""
+ for section in sections:
+ msg = msg + section.content + " "
+ if quiet == 0:
+ print "Tests for section %s" % (msg)
+ for test in node.xpathEval('testCase'):
+ handle_testCase(test)
+ for test in node.xpathEval('testSuite'):
+ handle_testSuite(test, level + 1)
+
+
+ if level >= 1 and sections != []:
+ msg = ""
+ for section in sections:
+ msg = msg + section.content + " "
+ print "Result of tests for section %s" % (msg)
+ if nb_schemas_tests != old_schemas_tests:
+ print "found %d test schemas: %d success %d failures" % (
+ nb_schemas_tests - old_schemas_tests,
+ nb_schemas_success - old_schemas_success,
+ nb_schemas_failed - old_schemas_failed)
+ if nb_instances_tests != old_instances_tests:
+ print "found %d test instances: %d success %d failures" % (
+ nb_instances_tests - old_instances_tests,
+ nb_instances_success - old_instances_success,
+ nb_instances_failed - old_instances_failed)
+#
+# Parse the conf file
+#
+libxml2.substituteEntitiesDefault(1);
+testsuite = libxml2.parseFile(CONF)
+
+#
+# Error and warnng callbacks
+#
+def callback(ctx, str):
+ global log
+ log.write("%s%s" % (ctx, str))
+
+libxml2.registerErrorHandler(callback, "")
+
+libxml2.setEntityLoader(resolver)
+root = testsuite.getRootElement()
+if root.name != 'testSuite':
+ print "%s doesn't start with a testSuite element, aborting" % (CONF)
+ sys.exit(1)
+if quiet == 0:
+ print "Running Relax NG testsuite"
+handle_testSuite(root)
+
+if quiet == 0:
+ print "\nTOTAL:\n"
+if quiet == 0 or nb_schemas_failed != 0:
+ print "found %d test schemas: %d success %d failures" % (
+ nb_schemas_tests, nb_schemas_success, nb_schemas_failed)
+if quiet == 0 or nb_instances_failed != 0:
+ print "found %d test instances: %d success %d failures" % (
+ nb_instances_tests, nb_instances_success, nb_instances_failed)
+
+
+testsuite.freeDoc()
+
+# Memory debug specific
+libxml2.relaxNGCleanupTypes()
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ if quiet == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/check-xinclude-test-suite.py b/check-xinclude-test-suite.py
new file mode 100755
index 0000000..c0af1f9
--- /dev/null
+++ b/check-xinclude-test-suite.py
@@ -0,0 +1,213 @@
+#!/usr/bin/python
+import sys
+import time
+import os
+import string
+sys.path.append("python")
+import libxml2
+
+#
+# the testsuite description
+#
+DIR="xinclude-test-suite"
+CONF="testdescr.xml"
+LOG="check-xinclude-test-suite.log"
+
+log = open(LOG, "w")
+
+os.chdir(DIR)
+
+test_nr = 0
+test_succeed = 0
+test_failed = 0
+test_error = 0
+#
+# Error and warning handlers
+#
+error_nr = 0
+error_msg = ''
+
+def errorHandler(ctx, str):
+ global error_nr
+ global error_msg
+
+ if string.find(str, "error:") >= 0:
+ error_nr = error_nr + 1
+ if len(error_msg) < 300:
+ if len(error_msg) == 0 or error_msg[-1] == '\n':
+ error_msg = error_msg + " >>" + str
+ else:
+ error_msg = error_msg + str
+
+libxml2.registerErrorHandler(errorHandler, None)
+
+def testXInclude(filename, id):
+ global error_nr
+ global error_msg
+ global log
+
+ error_nr = 0
+ error_msg = ''
+
+ print "testXInclude(%s, %s)" % (filename, id)
+ return 1
+
+def runTest(test, basedir):
+ global test_nr
+ global test_failed
+ global test_error
+ global test_succeed
+ global error_msg
+ global log
+
+ fatal_error = 0
+ uri = test.prop('href')
+ id = test.prop('id')
+ type = test.prop('type')
+ if uri == None:
+ print "Test without ID:", uri
+ return -1
+ if id == None:
+ print "Test without URI:", id
+ return -1
+ if type == None:
+ print "Test without URI:", id
+ return -1
+ if basedir != None:
+ URI = basedir + "/" + uri
+ else:
+ URI = uri
+ if os.access(URI, os.R_OK) == 0:
+ print "Test %s missing: base %s uri %s" % (URI, basedir, uri)
+ return -1
+
+ expected = None
+ if type != 'error':
+ output = test.xpathEval('string(output)')
+ if output == 'No output file.':
+ output = None
+ if output == '':
+ output = None
+ if output != None:
+ if basedir != None:
+ output = basedir + "/" + output
+ if os.access(output, os.R_OK) == 0:
+ print "Result for %s missing: %s" % (id, output)
+ output = None
+ else:
+ try:
+ f = open(output)
+ expected = f.read()
+ except:
+ print "Result for %s unreadable: %s" % (id, output)
+
+ try:
+ # print "testing %s" % (URI)
+ doc = libxml2.parseFile(URI)
+ except:
+ doc = None
+ if doc != None:
+ res = doc.xincludeProcess()
+ if res >= 0 and expected != None:
+ result = doc.serialize()
+ if result != expected:
+ print "Result for %s differs" % (id)
+
+ doc.freeDoc()
+ else:
+ print "Failed to parse %s" % (URI)
+ res = -1
+
+
+
+ test_nr = test_nr + 1
+ if type == 'success':
+ if res > 0:
+ test_succeed = test_succeed + 1
+ elif res == 0:
+ test_failed = test_failed + 1
+ print "Test %s: no substitution done ???" % (id)
+ elif res < 0:
+ test_error = test_error + 1
+ print "Test %s: failed valid XInclude processing" % (id)
+ elif type == 'error':
+ if res > 0:
+ test_error = test_error + 1
+ print "Test %s: failed to detect invalid XInclude processing" % (id)
+ elif res == 0:
+ test_failed = test_failed + 1
+ print "Test %s: Invalid but no substitution done" % (id)
+ elif res < 0:
+ test_succeed = test_succeed + 1
+ elif type == 'optional':
+ if res > 0:
+ test_succeed = test_succeed + 1
+ else:
+ print "Test %s: failed optional test" % (id)
+
+ # Log the ontext
+ if res != 1:
+ log.write("Test ID %s\n" % (id))
+ log.write(" File: %s\n" % (URI))
+ content = string.strip(test.content)
+ while content[-1] == '\n':
+ content = content[0:-1]
+ log.write(" %s:%s\n\n" % (type, content))
+ if error_msg != '':
+ log.write(" ----\n%s ----\n" % (error_msg))
+ error_msg = ''
+ log.write("\n")
+
+ return 0
+
+
+def runTestCases(case):
+ creator = case.prop('creator')
+ if creator != None:
+ print "=>", creator
+ base = case.getBase(None)
+ basedir = case.prop('basedir')
+ if basedir != None:
+ base = libxml2.buildURI(basedir, base)
+ test = case.children
+ while test != None:
+ if test.name == 'testcase':
+ runTest(test, base)
+ if test.name == 'testcases':
+ runTestCases(test)
+ test = test.next
+
+conf = libxml2.parseFile(CONF)
+if conf == None:
+ print "Unable to load %s" % CONF
+ sys.exit(1)
+
+testsuite = conf.getRootElement()
+if testsuite.name != 'testsuite':
+ print "Expecting TESTSUITE root element: aborting"
+ sys.exit(1)
+
+profile = testsuite.prop('PROFILE')
+if profile != None:
+ print profile
+
+start = time.time()
+
+case = testsuite.children
+while case != None:
+ if case.name == 'testcases':
+ old_test_nr = test_nr
+ old_test_succeed = test_succeed
+ old_test_failed = test_failed
+ old_test_error = test_error
+ runTestCases(case)
+ print " Ran %d tests: %d suceeded, %d failed and %d generated an error" % (
+ test_nr - old_test_nr, test_succeed - old_test_succeed,
+ test_failed - old_test_failed, test_error - old_test_error)
+ case = case.next
+
+conf.freeDoc()
+log.close()
+
+print "Ran %d tests: %d suceeded, %d failed and %d generated an error in %.2f s." % (
+ test_nr, test_succeed, test_failed, test_error, time.time() - start)
diff --git a/check-xml-test-suite.py b/check-xml-test-suite.py
new file mode 100755
index 0000000..ed0eaa2
--- /dev/null
+++ b/check-xml-test-suite.py
@@ -0,0 +1,409 @@
+#!/usr/bin/python
+import sys
+import time
+import os
+import string
+sys.path.append("python")
+import libxml2
+
+test_nr = 0
+test_succeed = 0
+test_failed = 0
+test_error = 0
+
+#
+# the testsuite description
+#
+CONF="xml-test-suite/xmlconf/xmlconf.xml"
+LOG="check-xml-test-suite.log"
+
+log = open(LOG, "w")
+
+#
+# Error and warning handlers
+#
+error_nr = 0
+error_msg = ''
+def errorHandler(ctx, str):
+ global error_nr
+ global error_msg
+
+ error_nr = error_nr + 1
+ if len(error_msg) < 300:
+ if len(error_msg) == 0 or error_msg[-1] == '\n':
+ error_msg = error_msg + " >>" + str
+ else:
+ error_msg = error_msg + str
+
+libxml2.registerErrorHandler(errorHandler, None)
+
+#warning_nr = 0
+#warning = ''
+#def warningHandler(ctx, str):
+# global warning_nr
+# global warning
+#
+# warning_nr = warning_nr + 1
+# warning = warning + str
+#
+#libxml2.registerWarningHandler(warningHandler, None)
+
+#
+# Used to load the XML testsuite description
+#
+def loadNoentDoc(filename):
+ ctxt = libxml2.createFileParserCtxt(filename)
+ if ctxt == None:
+ return None
+ ctxt.replaceEntities(1)
+ ctxt.parseDocument()
+ try:
+ doc = ctxt.doc()
+ except:
+ doc = None
+ if ctxt.wellFormed() != 1:
+ doc.freeDoc()
+ return None
+ return doc
+
+#
+# The conformance testing routines
+#
+
+def testNotWf(filename, id):
+ global error_nr
+ global error_msg
+ global log
+
+ error_nr = 0
+ error_msg = ''
+
+ ctxt = libxml2.createFileParserCtxt(filename)
+ if ctxt == None:
+ return -1
+ ret = ctxt.parseDocument()
+
+ try:
+ doc = ctxt.doc()
+ except:
+ doc = None
+ if doc != None:
+ doc.freeDoc()
+ if ret == 0 or ctxt.wellFormed() != 0:
+ print "%s: error: Well Formedness error not detected" % (id)
+ log.write("%s: error: Well Formedness error not detected\n" % (id))
+ return 0
+ return 1
+
+def testNotWfEnt(filename, id):
+ global error_nr
+ global error_msg
+ global log
+
+ error_nr = 0
+ error_msg = ''
+
+ ctxt = libxml2.createFileParserCtxt(filename)
+ if ctxt == None:
+ return -1
+ ctxt.replaceEntities(1)
+ ret = ctxt.parseDocument()
+
+ try:
+ doc = ctxt.doc()
+ except:
+ doc = None
+ if doc != None:
+ doc.freeDoc()
+ if ret == 0 or ctxt.wellFormed() != 0:
+ print "%s: error: Well Formedness error not detected" % (id)
+ log.write("%s: error: Well Formedness error not detected\n" % (id))
+ return 0
+ return 1
+
+def testNotWfEntDtd(filename, id):
+ global error_nr
+ global error_msg
+ global log
+
+ error_nr = 0
+ error_msg = ''
+
+ ctxt = libxml2.createFileParserCtxt(filename)
+ if ctxt == None:
+ return -1
+ ctxt.replaceEntities(1)
+ ctxt.loadSubset(1)
+ ret = ctxt.parseDocument()
+
+ try:
+ doc = ctxt.doc()
+ except:
+ doc = None
+ if doc != None:
+ doc.freeDoc()
+ if ret == 0 or ctxt.wellFormed() != 0:
+ print "%s: error: Well Formedness error not detected" % (id)
+ log.write("%s: error: Well Formedness error not detected\n" % (id))
+ return 0
+ return 1
+
+def testWfEntDtd(filename, id):
+ global error_nr
+ global error_msg
+ global log
+
+ error_nr = 0
+ error_msg = ''
+
+ ctxt = libxml2.createFileParserCtxt(filename)
+ if ctxt == None:
+ return -1
+ ctxt.replaceEntities(1)
+ ctxt.loadSubset(1)
+ ret = ctxt.parseDocument()
+
+ try:
+ doc = ctxt.doc()
+ except:
+ doc = None
+ if doc == None or ret != 0 or ctxt.wellFormed() == 0:
+ print "%s: error: wrongly failed to parse the document" % (id)
+ log.write("%s: error: wrongly failed to parse the document\n" % (id))
+ if doc != None:
+ doc.freeDoc()
+ return 0
+ if error_nr != 0:
+ print "%s: warning: WF document generated an error msg" % (id)
+ log.write("%s: error: WF document generated an error msg\n" % (id))
+ doc.freeDoc()
+ return 2
+ doc.freeDoc()
+ return 1
+
+def testError(filename, id):
+ global error_nr
+ global error_msg
+ global log
+
+ error_nr = 0
+ error_msg = ''
+
+ ctxt = libxml2.createFileParserCtxt(filename)
+ if ctxt == None:
+ return -1
+ ctxt.replaceEntities(1)
+ ctxt.loadSubset(1)
+ ret = ctxt.parseDocument()
+
+ try:
+ doc = ctxt.doc()
+ except:
+ doc = None
+ if doc != None:
+ doc.freeDoc()
+ if ctxt.wellFormed() == 0:
+ print "%s: warning: failed to parse the document but accepted" % (id)
+ log.write("%s: warning: failed to parse the document but accepte\n" % (id))
+ return 2
+ if error_nr != 0:
+ print "%s: warning: WF document generated an error msg" % (id)
+ log.write("%s: error: WF document generated an error msg\n" % (id))
+ return 2
+ return 1
+
+def testInvalid(filename, id):
+ global error_nr
+ global error_msg
+ global log
+
+ error_nr = 0
+ error_msg = ''
+
+ ctxt = libxml2.createFileParserCtxt(filename)
+ if ctxt == None:
+ return -1
+ ctxt.validate(1)
+ ret = ctxt.parseDocument()
+
+ try:
+ doc = ctxt.doc()
+ except:
+ doc = None
+ valid = ctxt.isValid()
+ if doc == None:
+ print "%s: error: wrongly failed to parse the document" % (id)
+ log.write("%s: error: wrongly failed to parse the document\n" % (id))
+ return 0
+ if valid == 1:
+ print "%s: error: Validity error not detected" % (id)
+ log.write("%s: error: Validity error not detected\n" % (id))
+ doc.freeDoc()
+ return 0
+ if error_nr == 0:
+ print "%s: warning: Validity error not reported" % (id)
+ log.write("%s: warning: Validity error not reported\n" % (id))
+ doc.freeDoc()
+ return 2
+
+ doc.freeDoc()
+ return 1
+
+def testValid(filename, id):
+ global error_nr
+ global error_msg
+
+ error_nr = 0
+ error_msg = ''
+
+ ctxt = libxml2.createFileParserCtxt(filename)
+ if ctxt == None:
+ return -1
+ ctxt.validate(1)
+ ctxt.parseDocument()
+
+ try:
+ doc = ctxt.doc()
+ except:
+ doc = None
+ valid = ctxt.isValid()
+ if doc == None:
+ print "%s: error: wrongly failed to parse the document" % (id)
+ log.write("%s: error: wrongly failed to parse the document\n" % (id))
+ return 0
+ if valid != 1:
+ print "%s: error: Validity check failed" % (id)
+ log.write("%s: error: Validity check failed\n" % (id))
+ doc.freeDoc()
+ return 0
+ if error_nr != 0 or valid != 1:
+ print "%s: warning: valid document reported an error" % (id)
+ log.write("%s: warning: valid document reported an error\n" % (id))
+ doc.freeDoc()
+ return 2
+ doc.freeDoc()
+ return 1
+
+def runTest(test):
+ global test_nr
+ global test_succeed
+ global test_failed
+ global error_msg
+ global log
+
+ uri = test.prop('URI')
+ id = test.prop('ID')
+ if uri == None:
+ print "Test without ID:", uri
+ return -1
+ if id == None:
+ print "Test without URI:", id
+ return -1
+ base = test.getBase(None)
+ URI = libxml2.buildURI(uri, base)
+ if os.access(URI, os.R_OK) == 0:
+ print "Test %s missing: base %s uri %s" % (URI, base, uri)
+ return -1
+ type = test.prop('TYPE')
+ if type == None:
+ print "Test %s missing TYPE" % (id)
+ return -1
+
+ extra = None
+ if type == "invalid":
+ res = testInvalid(URI, id)
+ elif type == "valid":
+ res = testValid(URI, id)
+ elif type == "not-wf":
+ extra = test.prop('ENTITIES')
+ # print URI
+ #if extra == None:
+ # res = testNotWfEntDtd(URI, id)
+ #elif extra == 'none':
+ # res = testNotWf(URI, id)
+ #elif extra == 'general':
+ # res = testNotWfEnt(URI, id)
+ #elif extra == 'both' or extra == 'parameter':
+ res = testNotWfEntDtd(URI, id)
+ #else:
+ # print "Unknow value %s for an ENTITIES test value" % (extra)
+ # return -1
+ elif type == "error":
+ res = testError(URI, id)
+ else:
+ # TODO skipped for now
+ return -1
+
+ test_nr = test_nr + 1
+ if res > 0:
+ test_succeed = test_succeed + 1
+ elif res == 0:
+ test_failed = test_failed + 1
+ elif res < 0:
+ test_error = test_error + 1
+
+ # Log the ontext
+ if res != 1:
+ log.write(" File: %s\n" % (URI))
+ content = string.strip(test.content)
+ while content[-1] == '\n':
+ content = content[0:-1]
+ if extra != None:
+ log.write(" %s:%s:%s\n" % (type, extra, content))
+ else:
+ log.write(" %s:%s\n\n" % (type, content))
+ if error_msg != '':
+ log.write(" ----\n%s ----\n" % (error_msg))
+ error_msg = ''
+ log.write("\n")
+
+ return 0
+
+
+def runTestCases(case):
+ profile = case.prop('PROFILE')
+ if profile != None and \
+ string.find(profile, "IBM XML Conformance Test Suite - Production") < 0:
+ print "=>", profile
+ test = case.children
+ while test != None:
+ if test.name == 'TEST':
+ runTest(test)
+ if test.name == 'TESTCASES':
+ runTestCases(test)
+ test = test.next
+
+conf = loadNoentDoc(CONF)
+if conf == None:
+ print "Unable to load %s" % CONF
+ sys.exit(1)
+
+testsuite = conf.getRootElement()
+if testsuite.name != 'TESTSUITE':
+ print "Expecting TESTSUITE root element: aborting"
+ sys.exit(1)
+
+profile = testsuite.prop('PROFILE')
+if profile != None:
+ print profile
+
+start = time.time()
+
+case = testsuite.children
+while case != None:
+ if case.name == 'TESTCASES':
+ old_test_nr = test_nr
+ old_test_succeed = test_succeed
+ old_test_failed = test_failed
+ old_test_error = test_error
+ runTestCases(case)
+ print " Ran %d tests: %d suceeded, %d failed and %d generated an error" % (
+ test_nr - old_test_nr, test_succeed - old_test_succeed,
+ test_failed - old_test_failed, test_error - old_test_error)
+ case = case.next
+
+conf.freeDoc()
+log.close()
+
+print "Ran %d tests: %d suceeded, %d failed and %d generated an error in %.2f s." % (
+ test_nr, test_succeed, test_failed, test_error, time.time() - start)
diff --git a/check-xsddata-test-suite.py b/check-xsddata-test-suite.py
new file mode 100755
index 0000000..f2066e1
--- /dev/null
+++ b/check-xsddata-test-suite.py
@@ -0,0 +1,420 @@
+#!/usr/bin/python
+import sys
+import time
+import os
+import string
+import StringIO
+sys.path.append("python")
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+debug = 0
+verbose = 0
+quiet = 1
+
+#
+# the testsuite description
+#
+CONF="test/xsdtest/xsdtestsuite.xml"
+LOG="check-xsddata-test-suite.log"
+
+log = open(LOG, "w")
+nb_schemas_tests = 0
+nb_schemas_success = 0
+nb_schemas_failed = 0
+nb_instances_tests = 0
+nb_instances_success = 0
+nb_instances_failed = 0
+
+libxml2.lineNumbersDefault(1)
+#
+# Error and warnng callbacks
+#
+def callback(ctx, str):
+ global log
+ log.write("%s%s" % (ctx, str))
+
+libxml2.registerErrorHandler(callback, "")
+
+#
+# Resolver callback
+#
+resources = {}
+def resolver(URL, ID, ctxt):
+ global resources
+
+ if resources.has_key(URL):
+ return(StringIO.StringIO(resources[URL]))
+ log.write("Resolver failure: asked %s\n" % (URL))
+ log.write("resources: %s\n" % (resources))
+ return None
+
+#
+# handle a valid instance
+#
+def handle_valid(node, schema):
+ global log
+ global nb_instances_success
+ global nb_instances_failed
+
+ instance = node.prop("dtd")
+ if instance == None:
+ instance = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ instance = instance + child.serialize()
+ child = child.next
+
+ mem = libxml2.debugMemory(1);
+ try:
+ doc = libxml2.parseDoc(instance)
+ except:
+ doc = None
+
+ if doc == None:
+ log.write("\nFailed to parse correct instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ nb_instances_failed = nb_instances_failed + 1
+ return
+
+ if debug:
+ print "instance line %d" % (node.lineNo())
+
+ try:
+ ctxt = schema.relaxNGNewValidCtxt()
+ ret = doc.relaxNGValidateDoc(ctxt)
+ del ctxt
+ except:
+ ret = -1
+
+ doc.freeDoc()
+ if mem != libxml2.debugMemory(1):
+ print "validating instance %d line %d leaks" % (
+ nb_instances_tests, node.lineNo())
+
+ if ret != 0:
+ log.write("\nFailed to validate correct instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ nb_instances_failed = nb_instances_failed + 1
+ else:
+ nb_instances_success = nb_instances_success + 1
+
+#
+# handle an invalid instance
+#
+def handle_invalid(node, schema):
+ global log
+ global nb_instances_success
+ global nb_instances_failed
+
+ instance = node.prop("dtd")
+ if instance == None:
+ instance = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ instance = instance + child.serialize()
+ child = child.next
+
+# mem = libxml2.debugMemory(1);
+
+ try:
+ doc = libxml2.parseDoc(instance)
+ except:
+ doc = None
+
+ if doc == None:
+ log.write("\nStrange: failed to parse incorrect instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ return
+
+ if debug:
+ print "instance line %d" % (node.lineNo())
+
+ try:
+ ctxt = schema.relaxNGNewValidCtxt()
+ ret = doc.relaxNGValidateDoc(ctxt)
+ del ctxt
+
+ except:
+ ret = -1
+
+ doc.freeDoc()
+# if mem != libxml2.debugMemory(1):
+# print "validating instance %d line %d leaks" % (
+# nb_instances_tests, node.lineNo())
+
+ if ret == 0:
+ log.write("\nFailed to detect validation problem in instance:\n-----\n")
+ log.write(instance)
+ log.write("\n-----\n")
+ nb_instances_failed = nb_instances_failed + 1
+ else:
+ nb_instances_success = nb_instances_success + 1
+
+#
+# handle an incorrect test
+#
+def handle_correct(node):
+ global log
+ global nb_schemas_success
+ global nb_schemas_failed
+
+ schema = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ schema = schema + child.serialize()
+ child = child.next
+
+ try:
+ rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
+ rngs = rngp.relaxNGParse()
+ except:
+ rngs = None
+ if rngs == None:
+ log.write("\nFailed to compile correct schema:\n-----\n")
+ log.write(schema)
+ log.write("\n-----\n")
+ nb_schemas_failed = nb_schemas_failed + 1
+ else:
+ nb_schemas_success = nb_schemas_success + 1
+ return rngs
+
+def handle_incorrect(node):
+ global log
+ global nb_schemas_success
+ global nb_schemas_failed
+
+ schema = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ schema = schema + child.serialize()
+ child = child.next
+
+ try:
+ rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
+ rngs = rngp.relaxNGParse()
+ except:
+ rngs = None
+ if rngs != None:
+ log.write("\nFailed to detect schema error in:\n-----\n")
+ log.write(schema)
+ log.write("\n-----\n")
+ nb_schemas_failed = nb_schemas_failed + 1
+ else:
+# log.write("\nSuccess detecting schema error in:\n-----\n")
+# log.write(schema)
+# log.write("\n-----\n")
+ nb_schemas_success = nb_schemas_success + 1
+ return None
+
+#
+# resource handling: keep a dictionary of URL->string mappings
+#
+def handle_resource(node, dir):
+ global resources
+
+ try:
+ name = node.prop('name')
+ except:
+ name = None
+
+ if name == None or name == '':
+ log.write("resource has no name")
+ return;
+
+ if dir != None:
+# name = libxml2.buildURI(name, dir)
+ name = dir + '/' + name
+
+ res = ""
+ child = node.children
+ while child != None:
+ if child.type != 'text':
+ res = res + child.serialize()
+ child = child.next
+ resources[name] = res
+
+#
+# dir handling: pseudo directory resources
+#
+def handle_dir(node, dir):
+ try:
+ name = node.prop('name')
+ except:
+ name = None
+
+ if name == None or name == '':
+ log.write("resource has no name")
+ return;
+
+ if dir != None:
+# name = libxml2.buildURI(name, dir)
+ name = dir + '/' + name
+
+ dirs = node.xpathEval('dir')
+ for dir in dirs:
+ handle_dir(dir, name)
+ res = node.xpathEval('resource')
+ for r in res:
+ handle_resource(r, name)
+
+#
+# handle a testCase element
+#
+def handle_testCase(node):
+ global nb_schemas_tests
+ global nb_instances_tests
+ global resources
+
+ sections = node.xpathEval('string(section)')
+ log.write("\n ======== test %d line %d section %s ==========\n" % (
+
+ nb_schemas_tests, node.lineNo(), sections))
+ resources = {}
+ if debug:
+ print "test %d line %d" % (nb_schemas_tests, node.lineNo())
+
+ dirs = node.xpathEval('dir')
+ for dir in dirs:
+ handle_dir(dir, None)
+ res = node.xpathEval('resource')
+ for r in res:
+ handle_resource(r, None)
+
+ tsts = node.xpathEval('incorrect')
+ if tsts != []:
+ if len(tsts) != 1:
+ print "warning test line %d has more than one <incorrect> example" %(node.lineNo())
+ schema = handle_incorrect(tsts[0])
+ else:
+ tsts = node.xpathEval('correct')
+ if tsts != []:
+ if len(tsts) != 1:
+ print "warning test line %d has more than one <correct> example"% (node.lineNo())
+ schema = handle_correct(tsts[0])
+ else:
+ print "warning <testCase> line %d has no <correct> nor <incorrect> child" % (node.lineNo())
+
+ nb_schemas_tests = nb_schemas_tests + 1;
+
+ valids = node.xpathEval('valid')
+ invalids = node.xpathEval('invalid')
+ nb_instances_tests = nb_instances_tests + len(valids) + len(invalids)
+ if schema != None:
+ for valid in valids:
+ handle_valid(valid, schema)
+ for invalid in invalids:
+ handle_invalid(invalid, schema)
+
+
+#
+# handle a testSuite element
+#
+def handle_testSuite(node, level = 0):
+ global nb_schemas_tests, nb_schemas_success, nb_schemas_failed
+ global nb_instances_tests, nb_instances_success, nb_instances_failed
+ if verbose and level >= 0:
+ old_schemas_tests = nb_schemas_tests
+ old_schemas_success = nb_schemas_success
+ old_schemas_failed = nb_schemas_failed
+ old_instances_tests = nb_instances_tests
+ old_instances_success = nb_instances_success
+ old_instances_failed = nb_instances_failed
+
+ docs = node.xpathEval('documentation')
+ authors = node.xpathEval('author')
+ if docs != []:
+ msg = ""
+ for doc in docs:
+ msg = msg + doc.content + " "
+ if authors != []:
+ msg = msg + "written by "
+ for author in authors:
+ msg = msg + author.content + " "
+ if quiet == 0:
+ print msg
+ sections = node.xpathEval('section')
+ if verbose and sections != [] and level <= 0:
+ msg = ""
+ for section in sections:
+ msg = msg + section.content + " "
+ if quiet == 0:
+ print "Tests for section %s" % (msg)
+ for test in node.xpathEval('testCase'):
+ handle_testCase(test)
+ for test in node.xpathEval('testSuite'):
+ handle_testSuite(test, level + 1)
+
+
+ if verbose and level >= 0 :
+ if sections != []:
+ msg = ""
+ for section in sections:
+ msg = msg + section.content + " "
+ print "Result of tests for section %s" % (msg)
+ elif docs != []:
+ msg = ""
+ for doc in docs:
+ msg = msg + doc.content + " "
+ print "Result of tests for %s" % (msg)
+
+ if nb_schemas_tests != old_schemas_tests:
+ print "found %d test schemas: %d success %d failures" % (
+ nb_schemas_tests - old_schemas_tests,
+ nb_schemas_success - old_schemas_success,
+ nb_schemas_failed - old_schemas_failed)
+ if nb_instances_tests != old_instances_tests:
+ print "found %d test instances: %d success %d failures" % (
+ nb_instances_tests - old_instances_tests,
+ nb_instances_success - old_instances_success,
+ nb_instances_failed - old_instances_failed)
+#
+# Parse the conf file
+#
+libxml2.substituteEntitiesDefault(1);
+testsuite = libxml2.parseFile(CONF)
+
+#
+# Error and warnng callbacks
+#
+def callback(ctx, str):
+ global log
+ log.write("%s%s" % (ctx, str))
+
+libxml2.registerErrorHandler(callback, "")
+
+libxml2.setEntityLoader(resolver)
+root = testsuite.getRootElement()
+if root.name != 'testSuite':
+ print "%s doesn't start with a testSuite element, aborting" % (CONF)
+ sys.exit(1)
+if quiet == 0:
+ print "Running Relax NG testsuite"
+handle_testSuite(root)
+
+if quiet == 0 or nb_schemas_failed != 0:
+ print "\nTOTAL:\nfound %d test schemas: %d success %d failures" % (
+ nb_schemas_tests, nb_schemas_success, nb_schemas_failed)
+if quiet == 0 or nb_instances_failed != 0:
+ print "found %d test instances: %d success %d failures" % (
+ nb_instances_tests, nb_instances_success, nb_instances_failed)
+
+testsuite.freeDoc()
+
+# Memory debug specific
+libxml2.relaxNGCleanupTypes()
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ if quiet == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/chvalid.c b/chvalid.c
new file mode 100755
index 0000000..d47bc6a
--- /dev/null
+++ b/chvalid.c
@@ -0,0 +1,329 @@
+/*
+ * chvalid.c: this module implements the character range
+ * validation APIs
+ *
+ * This file is automatically generated from the cvs source
+ * definition files using the genChRanges.py Python script
+ *
+ * Generation date: Tue Nov 18 08:14:21 2003
+ * Sources: chvalid.def
+ * William Brack <wbrack@mmm.com.hk>
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+#include <libxml/chvalid.h>
+
+/*
+ * The initial tables ({func_name}_tab) are used to validate whether a
+ * single-byte character is within the specified group. Each table
+ * contains 256 bytes, with each byte representing one of the 256
+ * possible characters. If the table byte is set, the character is
+ * allowed.
+ *
+ */
+unsigned char xmlIsPubidChar_tab[256] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01,
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00 };
+
+static xmlChSRange xmlIsBaseChar_srng[] = { {0x100, 0x131}, {0x134, 0x13e},
+ {0x141, 0x148}, {0x14a, 0x17e}, {0x180, 0x1c3}, {0x1cd, 0x1f0},
+ {0x1f4, 0x1f5}, {0x1fa, 0x217}, {0x250, 0x2a8}, {0x2bb, 0x2c1},
+ {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c}, {0x38e, 0x3a1},
+ {0x3a3, 0x3ce}, {0x3d0, 0x3d6}, {0x3da, 0x3da}, {0x3dc, 0x3dc},
+ {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3f3}, {0x401, 0x40c},
+ {0x40e, 0x44f}, {0x451, 0x45c}, {0x45e, 0x481}, {0x490, 0x4c4},
+ {0x4c7, 0x4c8}, {0x4cb, 0x4cc}, {0x4d0, 0x4eb}, {0x4ee, 0x4f5},
+ {0x4f8, 0x4f9}, {0x531, 0x556}, {0x559, 0x559}, {0x561, 0x586},
+ {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a},
+ {0x671, 0x6b7}, {0x6ba, 0x6be}, {0x6c0, 0x6ce}, {0x6d0, 0x6d3},
+ {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x905, 0x939}, {0x93d, 0x93d},
+ {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8},
+ {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9dc, 0x9dd},
+ {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10},
+ {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36},
+ {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74},
+ {0xa85, 0xa8b}, {0xa8d, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8},
+ {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd},
+ {0xae0, 0xae0}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28},
+ {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb36, 0xb39}, {0xb3d, 0xb3d},
+ {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb85, 0xb8a}, {0xb8e, 0xb90},
+ {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f},
+ {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, {0xbb7, 0xbb9},
+ {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc33},
+ {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, {0xc8e, 0xc90},
+ {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcde, 0xcde},
+ {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28},
+ {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xe01, 0xe2e}, {0xe30, 0xe30},
+ {0xe32, 0xe33}, {0xe40, 0xe45}, {0xe81, 0xe82}, {0xe84, 0xe84},
+ {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97},
+ {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7},
+ {0xeaa, 0xeab}, {0xead, 0xeae}, {0xeb0, 0xeb0}, {0xeb2, 0xeb3},
+ {0xebd, 0xebd}, {0xec0, 0xec4}, {0xf40, 0xf47}, {0xf49, 0xf69},
+ {0x10a0, 0x10c5}, {0x10d0, 0x10f6}, {0x1100, 0x1100}, {0x1102, 0x1103},
+ {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110b, 0x110c}, {0x110e, 0x1112},
+ {0x113c, 0x113c}, {0x113e, 0x113e}, {0x1140, 0x1140}, {0x114c, 0x114c},
+ {0x114e, 0x114e}, {0x1150, 0x1150}, {0x1154, 0x1155}, {0x1159, 0x1159},
+ {0x115f, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x1165}, {0x1167, 0x1167},
+ {0x1169, 0x1169}, {0x116d, 0x116e}, {0x1172, 0x1173}, {0x1175, 0x1175},
+ {0x119e, 0x119e}, {0x11a8, 0x11a8}, {0x11ab, 0x11ab}, {0x11ae, 0x11af},
+ {0x11b7, 0x11b8}, {0x11ba, 0x11ba}, {0x11bc, 0x11c2}, {0x11eb, 0x11eb},
+ {0x11f0, 0x11f0}, {0x11f9, 0x11f9}, {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9},
+ {0x1f00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d},
+ {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d},
+ {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe},
+ {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb},
+ {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2126, 0x2126},
+ {0x212a, 0x212b}, {0x212e, 0x212e}, {0x2180, 0x2182}, {0x3041, 0x3094},
+ {0x30a1, 0x30fa}, {0x3105, 0x312c}, {0xac00, 0xd7a3}};
+xmlChRangeGroup xmlIsBaseCharGroup =
+ {197, 0, xmlIsBaseChar_srng, (xmlChLRangePtr)0};
+
+static xmlChSRange xmlIsChar_srng[] = { {0x100, 0xd7ff}, {0xe000, 0xfffd}};
+static xmlChLRange xmlIsChar_lrng[] = { {0x10000, 0x10ffff}};
+xmlChRangeGroup xmlIsCharGroup =
+ {2, 1, xmlIsChar_srng, xmlIsChar_lrng};
+
+static xmlChSRange xmlIsCombining_srng[] = { {0x300, 0x345},
+ {0x360, 0x361}, {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9},
+ {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4},
+ {0x64b, 0x652}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6dd, 0x6df},
+ {0x6e0, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x901, 0x903},
+ {0x93c, 0x93c}, {0x93e, 0x94c}, {0x94d, 0x94d}, {0x951, 0x954},
+ {0x962, 0x963}, {0x981, 0x983}, {0x9bc, 0x9bc}, {0x9be, 0x9be},
+ {0x9bf, 0x9bf}, {0x9c0, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd},
+ {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa02, 0xa02}, {0xa3c, 0xa3c},
+ {0xa3e, 0xa3e}, {0xa3f, 0xa3f}, {0xa40, 0xa42}, {0xa47, 0xa48},
+ {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa83}, {0xabc, 0xabc},
+ {0xabe, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, {0xb01, 0xb03},
+ {0xb3c, 0xb3c}, {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d},
+ {0xb56, 0xb57}, {0xb82, 0xb83}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8},
+ {0xbca, 0xbcd}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44},
+ {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83},
+ {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6},
+ {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d},
+ {0xd57, 0xd57}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e},
+ {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, {0xec8, 0xecd},
+ {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39},
+ {0xf3e, 0xf3e}, {0xf3f, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf8b},
+ {0xf90, 0xf95}, {0xf97, 0xf97}, {0xf99, 0xfad}, {0xfb1, 0xfb7},
+ {0xfb9, 0xfb9}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x302a, 0x302f},
+ {0x3099, 0x3099}, {0x309a, 0x309a}};
+xmlChRangeGroup xmlIsCombiningGroup =
+ {95, 0, xmlIsCombining_srng, (xmlChLRangePtr)0};
+
+static xmlChSRange xmlIsDigit_srng[] = { {0x660, 0x669}, {0x6f0, 0x6f9},
+ {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, {0xae6, 0xaef},
+ {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, {0xce6, 0xcef},
+ {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, {0xf20, 0xf29}};
+xmlChRangeGroup xmlIsDigitGroup =
+ {14, 0, xmlIsDigit_srng, (xmlChLRangePtr)0};
+
+static xmlChSRange xmlIsExtender_srng[] = { {0x2d0, 0x2d0}, {0x2d1, 0x2d1},
+ {0x387, 0x387}, {0x640, 0x640}, {0xe46, 0xe46}, {0xec6, 0xec6},
+ {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309d, 0x309e}, {0x30fc, 0x30fe}};
+xmlChRangeGroup xmlIsExtenderGroup =
+ {10, 0, xmlIsExtender_srng, (xmlChLRangePtr)0};
+
+static xmlChSRange xmlIsIdeographic_srng[] = { {0x3007, 0x3007},
+ {0x3021, 0x3029}, {0x4e00, 0x9fa5}};
+xmlChRangeGroup xmlIsIdeographicGroup =
+ {3, 0, xmlIsIdeographic_srng, (xmlChLRangePtr)0};
+
+
+/**
+ * xmlCharInRange:
+ * @val: character to be validated
+ * @rptr: pointer to range to be used to validate
+ *
+ * Does a binary search of the range table to determine if char
+ * is valid
+ *
+ * Returns: true if character valid, false otherwise
+ */
+int
+xmlCharInRange (unsigned int val, const xmlChRangeGroupPtr rptr) {
+ int low, high, mid;
+ xmlChSRangePtr sptr;
+ xmlChLRangePtr lptr;
+ if (val < 0x10000) { /* is val in 'short' or 'long' array? */
+ if (rptr->nbShortRange == 0)
+ return 0;
+ low = 0;
+ high = rptr->nbShortRange - 1;
+ sptr = rptr->shortRange;
+ while (low <= high) {
+ mid = (low + high) / 2;
+ if ((unsigned short) val < sptr[mid].low) {
+ high = mid - 1;
+ } else {
+ if ((unsigned short) val > sptr[mid].high) {
+ low = mid + 1;
+ } else {
+ return 1;
+ }
+ }
+ }
+ } else {
+ if (rptr->nbLongRange == 0) {
+ return 0;
+ }
+ low = 0;
+ high = rptr->nbLongRange - 1;
+ lptr = rptr->longRange;
+ while (low <= high) {
+ mid = (low + high) / 2;
+ if (val < lptr[mid].low) {
+ high = mid - 1;
+ } else {
+ if (val > lptr[mid].high) {
+ low = mid + 1;
+ } else {
+ return 1;
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+
+/**
+ * xmlIsBaseChar:
+ * @ch: character to validate
+ *
+ * This function is DEPRECATED.
+ * Use xmlIsBaseChar_ch or xmlIsBaseCharQ instead
+ *
+ * Returns true if argument valid, false otherwise
+ */
+int
+xmlIsBaseChar(unsigned int ch) {
+ return(xmlIsBaseCharQ(ch));
+}
+
+
+/**
+ * xmlIsBlank:
+ * @ch: character to validate
+ *
+ * This function is DEPRECATED.
+ * Use xmlIsBlank_ch or xmlIsBlankQ instead
+ *
+ * Returns true if argument valid, false otherwise
+ */
+int
+xmlIsBlank(unsigned int ch) {
+ return(xmlIsBlankQ(ch));
+}
+
+
+/**
+ * xmlIsChar:
+ * @ch: character to validate
+ *
+ * This function is DEPRECATED.
+ * Use xmlIsChar_ch or xmlIsCharQ instead
+ *
+ * Returns true if argument valid, false otherwise
+ */
+int
+xmlIsChar(unsigned int ch) {
+ return(xmlIsCharQ(ch));
+}
+
+
+/**
+ * xmlIsCombining:
+ * @ch: character to validate
+ *
+ * This function is DEPRECATED.
+ * Use xmlIsCombiningQ instead
+ *
+ * Returns true if argument valid, false otherwise
+ */
+int
+xmlIsCombining(unsigned int ch) {
+ return(xmlIsCombiningQ(ch));
+}
+
+
+/**
+ * xmlIsDigit:
+ * @ch: character to validate
+ *
+ * This function is DEPRECATED.
+ * Use xmlIsDigit_ch or xmlIsDigitQ instead
+ *
+ * Returns true if argument valid, false otherwise
+ */
+int
+xmlIsDigit(unsigned int ch) {
+ return(xmlIsDigitQ(ch));
+}
+
+
+/**
+ * xmlIsExtender:
+ * @ch: character to validate
+ *
+ * This function is DEPRECATED.
+ * Use xmlIsExtender_ch or xmlIsExtenderQ instead
+ *
+ * Returns true if argument valid, false otherwise
+ */
+int
+xmlIsExtender(unsigned int ch) {
+ return(xmlIsExtenderQ(ch));
+}
+
+
+/**
+ * xmlIsIdeographic:
+ * @ch: character to validate
+ *
+ * This function is DEPRECATED.
+ * Use xmlIsIdeographicQ instead
+ *
+ * Returns true if argument valid, false otherwise
+ */
+int
+xmlIsIdeographic(unsigned int ch) {
+ return(xmlIsIdeographicQ(ch));
+}
+
+
+/**
+ * xmlIsPubidChar:
+ * @ch: character to validate
+ *
+ * This function is DEPRECATED.
+ * Use xmlIsPubidChar_ch or xmlIsPubidCharQ instead
+ *
+ * Returns true if argument valid, false otherwise
+ */
+int
+xmlIsPubidChar(unsigned int ch) {
+ return(xmlIsPubidCharQ(ch));
+}
+
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..cc726cd
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1388 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2003-02-22'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvmeppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mipseb-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ wgrisc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ alpha:OSF1:*:*)
+ if test $UNAME_RELEASE = "V4.0"; then
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ fi
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit 0 ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit 0;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit 0 ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit 0 ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit 0;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit 0 ;;
+ DRS?6000:UNIX_SV:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7 && exit 0 ;;
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit 0 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit 0 ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit 0 ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c \
+ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && exit 0
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit 0 ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit 0 ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+ echo rs6000-ibm-aix3.2.5
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit 0 ;;
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ # avoid double evaluation of $set_cc_for_build
+ test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ *:UNICOS/mp:*:*)
+ echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit 0 ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ # Determine whether the default compiler uses glibc.
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #if __GLIBC__ >= 2
+ LIBC=gnu
+ #else
+ LIBC=
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit 0 ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit 0 ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit 0 ;;
+ x86:Interix*:3*)
+ echo i586-pc-interix3
+ exit 0 ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit 0 ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit 0 ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit 0 ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit 0 ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips64
+ #undef mips64el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mips64el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips64
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit 0 ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit 0 ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit 0 ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit 0 ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit 0 ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit 0 ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit 0 ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit 0 ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit 0 ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit 0 ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #ifdef __INTEL_COMPILER
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit 0 ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit 0 ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit 0 ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit 0 ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit 0 ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit 0 ;;
+ i*86:*:5:[78]*)
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit 0 ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit 0 ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit 0 ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit 0 ;;
+ M68*:*:R3V[567]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4 && exit 0 ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit 0 ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit 0 ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit 0 ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit 0 ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit 0 ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit 0 ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit 0 ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit 0 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Darwin:*:*)
+ case `uname -p` in
+ *86) UNAME_PROCESSOR=i686 ;;
+ powerpc) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit 0 ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit 0 ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit 0 ;;
+ NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit 0 ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit 0 ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit 0 ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit 0 ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit 0 ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit 0 ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit 0 ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit 0 ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit 0 ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit 0 ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..f54d0bf
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,284 @@
+/* config.h.in. Generated from configure.in by autoheader. */
+#undef PACKAGE
+#undef VERSION
+#undef HAVE_LIBZ
+#undef HAVE_LIBM
+#undef HAVE_ISINF
+#undef HAVE_ISNAN
+#undef HAVE_LIBHISTORY
+#undef HAVE_LIBREADLINE
+#undef SOCKLEN_T
+#undef HAVE_LIBPTHREAD
+#undef HAVE_PTHREAD_H
+
+/* Define if IPV6 support is there */
+#undef SUPPORT_IP6
+
+/* Define if getaddrinfo is there */
+#undef HAVE_GETADDRINFO
+
+/* Define to 1 if you have the <ansidecl.h> header file. */
+#undef HAVE_ANSIDECL_H
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+#undef HAVE_ARPA_NAMESER_H
+
+/* Define to 1 if you have the `class' function. */
+#undef HAVE_CLASS
+
+/* Define to 1 if you have the <ctype.h> header file. */
+#undef HAVE_CTYPE_H
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `finite' function. */
+#undef HAVE_FINITE
+
+/* Define to 1 if you have the <float.h> header file. */
+#undef HAVE_FLOAT_H
+
+/* Define to 1 if you have the `fpclass' function. */
+#undef HAVE_FPCLASS
+
+/* Define to 1 if you have the `fprintf' function. */
+#undef HAVE_FPRINTF
+
+/* Define to 1 if you have the `fp_class' function. */
+#undef HAVE_FP_CLASS
+
+/* Define to 1 if you have the <fp_class.h> header file. */
+#undef HAVE_FP_CLASS_H
+
+/* Define to 1 if you have the `ftime' function. */
+#undef HAVE_FTIME
+
+/* Define if getaddrinfo is there */
+#undef HAVE_GETADDRINFO
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#undef HAVE_IEEEFP_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if isinf is there */
+#undef HAVE_ISINF
+
+/* Define if isnan is there */
+#undef HAVE_ISNAN
+
+/* Define to 1 if you have the `isnand' function. */
+#undef HAVE_ISNAND
+
+/* Define if history library is there (-lhistory) */
+#undef HAVE_LIBHISTORY
+
+/* Define to 1 if you have the `inet' library (-linet). */
+#undef HAVE_LIBINET
+
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define if pthread library is there (-lpthread) */
+#undef HAVE_LIBPTHREAD
+
+/* Define if readline library is there (-lreadline) */
+#undef HAVE_LIBREADLINE
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+#undef HAVE_LIBSOCKET
+
+/* Have compression library */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the `localtime' function. */
+#undef HAVE_LOCALTIME
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the <math.h> header file. */
+#undef HAVE_MATH_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <nan.h> header file. */
+#undef HAVE_NAN_H
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the `printf' function. */
+#undef HAVE_PRINTF
+
+/* Define if <pthread.h> is there */
+#undef HAVE_PTHREAD_H
+
+/* Define to 1 if you have the <resolv.h> header file. */
+#undef HAVE_RESOLV_H
+
+/* Define to 1 if you have the `signal' function. */
+#undef HAVE_SIGNAL
+
+/* Define to 1 if you have the <signal.h> header file. */
+#undef HAVE_SIGNAL_H
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the `sprintf' function. */
+#undef HAVE_SPRINTF
+
+/* Define to 1 if you have the `sscanf' function. */
+#undef HAVE_SSCANF
+
+/* Define to 1 if you have the `stat' function. */
+#undef HAVE_STAT
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the `strftime' function. */
+#undef HAVE_STRFTIME
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strndup' function. */
+#undef HAVE_STRNDUP
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/timeb.h> header file. */
+#undef HAVE_SYS_TIMEB_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vfprintf' function. */
+#undef HAVE_VFPRINTF
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define to 1 if you have the `vsprintf' function. */
+#undef HAVE_VSPRINTF
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* Define to 1 if you have the `_stat' function. */
+#undef HAVE__STAT
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if the C compiler supports function prototypes. */
+#undef PROTOTYPES
+
+/* Determine what socket length (socklen_t) data type is */
+#undef SOCKLEN_T
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Support for IPv6 */
+#undef SUPPORT_IP6
+
+/* Version number of package */
+#undef VERSION
+
+/* Using the Win32 Socket implementation */
+#undef _WINSOCKAPI_
+
+/* Define like PROTOTYPES; this can be used by system headers. */
+#undef __PROTOTYPES
+
+/* Win32 Std C name mangling work-around */
+#undef snprintf
+
+/* Win32 Std C name mangling work-around */
+#undef vsnprintf
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..9772e87
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1489 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2003-02-22'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit 0;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k \
+ | m32r | m68000 | m68k | m88k | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | msp430 \
+ | ns16k | ns32k \
+ | openrisc | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+ | strongarm \
+ | tahoe | thumb | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xscale | xstormy16 | xtensa \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* \
+ | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* \
+ | m32r-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | msp430-* \
+ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+ | xtensa-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ mmix*)
+ basic_machine=mmix-knuth
+ os=-mmixware
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nv1)
+ basic_machine=nv1-cray
+ os=-unicosmp
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ or32 | or32-*)
+ basic_machine=or32-unknown
+ os=-coff
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2)
+ basic_machine=i686-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic4x | c4x*)
+ basic_machine=tic4x-unknown
+ os=-coff
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparc | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..c03f6f3
--- /dev/null
+++ b/configure
@@ -0,0 +1,29717 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+ echo_test_string="`eval $cmd`" &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+ then
+ break
+ fi
+ done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ echo='printf %s\n'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+tagnames=`echo "$tagnames,CXX" | sed 's/^,//'`
+
+tagnames=`echo "$tagnames,F77" | sed 's/^,//'`
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="entities.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# 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 INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot 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 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 Z_CFLAGS Z_LIBS HTML_DIR PYTHON WITH_PYTHON_TRUE WITH_PYTHON_FALSE pythondir PYTHON_SUBDIR STATIC_BINARIES WITH_TRIO_SOURCES_TRUE WITH_TRIO_SOURCES_FALSE WITH_TRIO THREAD_LIBS WITH_THREADS THREAD_CFLAGS TEST_THREADS THREADS_W32 WITH_OUTPUT WITH_TREE WITH_FTP FTP_OBJ WITH_HTTP HTTP_OBJ WITH_LEGACY WITH_READER READER_TEST WITH_PATTERN PATTERN_TEST WITH_WRITER 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_XPATH XPATH_OBJ TEST_XPATH WITH_XPTR XPTR_OBJ TEST_XPTR WITH_C14N C14N_OBJ TEST_C14N WITH_XINCLUDE XINCLUDE_OBJ TEST_XINCLUDE WITH_ICONV WITH_ISO8859X WITH_SCHEMAS TEST_SCHEMAS WITH_REGEXPS TEST_REGEXPS WITH_DEBUG DEBUG_OBJ TEST_DEBUG WITH_MEM_DEBUG WIN32_EXTRA_LIBADD WIN32_EXTRA_LDFLAGS 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.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+ac_env_F77_set=${F77+set}
+ac_env_F77_value=$F77
+ac_cv_env_F77_set=${F77+set}
+ac_cv_env_F77_value=$F77
+ac_env_FFLAGS_set=${FFLAGS+set}
+ac_env_FFLAGS_value=$FFLAGS
+ac_cv_env_FFLAGS_set=${FFLAGS+set}
+ac_cv_env_FFLAGS_value=$FFLAGS
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --enable-shared[=PKGS]
+ build shared libraries [default=yes]
+ --enable-static[=PKGS]
+ build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --enable-ipv6=yes/no enables compilation of IPv6 code
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-tags[=TAGS]
+ include additional configurations [automatic]
+ --with-minimum build a minimally sized library (off)
+ --with-zlib[=DIR] use libz in DIR
+ --with-html-dir=path path to base html directory, default
+ $datadir/doc/html
+ --with-html-subdir=path directory used under html-dir, default
+ $PACKAGE-$VERSION/html
+ --with-fexceptions add GCC flag -fexceptions for C++ exceptions (off)
+ --with-python[=DIR] build Python bindings if found
+ --with-readline=DIR use readline in DIR
+ --with-threads add multithread support(on)
+ --with-thread-alloc add per-thread memory(off)
+ --with-history add history support to xmllint shell(off)
+ --with-output add the serialization support (on)
+ --with-tree add the DOM like tree manipulation APIs (on)
+ --with-ftp add the FTP support (on)
+ --with-http add the HTTP support (on)
+ --with-legacy add deprecated APIs for compatibility (on)
+ --with-reader add the xmlReader parsing interface (on)
+ --with-pattern add the xmlPattern selection interface (on)
+ --with-writer add the xmlWriter saving interface (on)
+ --with-sax1 add the older SAX1 interface (on)
+ --with-push add the PUSH parser interfaces (on)
+ --with-html add the HTML support (on)
+ --with-valid add the DTD validation support (on)
+ --with-catalog add the Catalog support (on)
+ --with-docbook add Docbook SGML support (on)
+ --with-xpath add the XPATH support (on)
+ --with-xptr add the XPointer support (on)
+ --with-c14n add the Canonicalization support (on)
+ --with-xinclude add the XInclude support (on)
+ --with-iconv[=DIR] add ICONV support (on)
+ --with-iso8859x add ISO8859X support if no iconv (on)
+ --with-schemas add Relax-NG and experimental Schemas support (on)
+ --with-regexps add Regular Expressions support (on)
+ --with-debug add the debugging module (on)
+ --with-mem-debug add the memory debugging module (off)
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CXXCPP C++ preprocessor
+ F77 Fortran 77 compiler command
+ FFLAGS Fortran 77 compiler flags
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_headers="$ac_config_headers config.h"
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+ ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+ ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+
+LIBXML_MAJOR_VERSION=2
+LIBXML_MINOR_VERSION=6
+LIBXML_MICRO_VERSION=8
+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
+
+LIBXML_VERSION_NUMBER=`expr $LIBXML_MAJOR_VERSION \* 10000 + $LIBXML_MINOR_VERSION \* 100 + $LIBXML_MICRO_VERSION`
+
+
+
+
+
+
+
+
+VERSION=${LIBXML_VERSION}
+
+am__api_version="1.8"
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p -- . 2>/dev/null; then
+ # Keeping the `.' argument allows $(mkdir_p) to be used without
+ # argument. Indeed, we sometimes output rules like
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined.
+ # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+ # expensive solution, as it forces Make to start a sub-shell.)
+ mkdir_p='mkdir -p -- .'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; 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_prog_AWK+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=libxml2
+ VERSION=$VERSION
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; 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_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; 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_prog_ac_ct_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ STRIP=$ac_ct_STRIP
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; 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_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; 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_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; 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_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; 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_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; 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_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; 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_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; 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_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (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
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std1 is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std1. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+ enableval="$enable_dependency_tracking"
+
+fi;
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+
+depcc="$CC" am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ : > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored.
+ if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+# Extract the first word of "rm", so it can be a program name with args.
+set dummy rm; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_RM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $RM in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_RM="$RM" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_RM" && ac_cv_path_RM="/bin/rm"
+ ;;
+esac
+fi
+RM=$ac_cv_path_RM
+
+if test -n "$RM"; then
+ echo "$as_me:$LINENO: result: $RM" >&5
+echo "${ECHO_T}$RM" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "mv", so it can be a program name with args.
+set dummy mv; 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_MV+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $MV in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MV="$MV" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_MV" && ac_cv_path_MV="/bin/mv"
+ ;;
+esac
+fi
+MV=$ac_cv_path_MV
+
+if test -n "$MV"; then
+ echo "$as_me:$LINENO: result: $MV" >&5
+echo "${ECHO_T}$MV" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "tar", so it can be a program name with args.
+set dummy tar; 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_TAR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $TAR in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_TAR="$TAR" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_TAR" && ac_cv_path_TAR="/bin/tar"
+ ;;
+esac
+fi
+TAR=$ac_cv_path_TAR
+
+if test -n "$TAR"; then
+ echo "$as_me:$LINENO: result: $TAR" >&5
+echo "${ECHO_T}$TAR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+echo "$as_me:$LINENO: checking for function prototypes" >&5
+echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6
+if test "$ac_cv_prog_cc_stdc" != no; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define PROTOTYPES 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define __PROTOTYPES 1
+_ACEOF
+
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./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
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+if test "$ac_cv_prog_cc_stdc" != no; then
+ U= ANSI2KNR=
+else
+ U=_ ANSI2KNR=./ansi2knr
+fi
+# Ensure some checks needed by ansi2knr itself.
+
+
+for ac_header in string.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+test "x$U" != "x" && { { echo "$as_me:$LINENO: error: Compiler not ANSI compliant" >&5
+echo "$as_me: error: Compiler not ANSI compliant" >&2;}
+ { (exit 1); exit 1; }; }
+
+
+
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+ enableval="$enable_shared"
+ p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi;
+
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+ enableval="$enable_static"
+ p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi;
+
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+ enableval="$enable_fast_install"
+ p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi;
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && break
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+SED=$lt_cv_path_SED
+
+fi
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+ withval="$with_gnu_ld"
+ test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+NM="$lt_cv_path_NM"
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi4*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin* | mingw* | pw32*)
+ # win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='win32_libid'
+ ;;
+
+darwin* | rhapsody*)
+ # this will be overwritten by pass_all, but leave it in just in case
+ lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System`
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+ ;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case "$host_cpu" in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ irix5* | nonstopux*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+ ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ case $host_cpu in
+ alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh* | x86_64*)
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+nto-qnx)
+ lt_cv_deplibs_check_method=unknown
+ ;;
+
+openbsd*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+ else
+ lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sco3.2v5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+ enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 4561 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case "`/usr/bin/file conftest.o`" in
+ *32-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ 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
+ lt_cv_cc_needs_belf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_DLLTOOL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ echo "$as_me:$LINENO: result: $DLLTOOL" >&5
+echo "${ECHO_T}$DLLTOOL" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_DLLTOOL" && ac_cv_prog_ac_ct_DLLTOOL="false"
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5
+echo "${ECHO_T}$ac_ct_DLLTOOL" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ DLLTOOL=$ac_ct_DLLTOOL
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AS"; then
+ ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AS="${ac_tool_prefix}as"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+ echo "$as_me:$LINENO: result: $AS" >&5
+echo "${ECHO_T}$AS" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+ ac_ct_AS=$AS
+ # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_AS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_AS"; then
+ ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AS="as"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_AS" && ac_cv_prog_ac_ct_AS="false"
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+ echo "$as_me:$LINENO: result: $ac_ct_AS" >&5
+echo "${ECHO_T}$ac_ct_AS" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ AS=$ac_ct_AS
+else
+ AS="$ac_cv_prog_AS"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+echo "${ECHO_T}$OBJDUMP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_OBJDUMP" && ac_cv_prog_ac_ct_OBJDUMP="false"
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
+echo "${ECHO_T}$ac_ct_OBJDUMP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ OBJDUMP=$ac_ct_OBJDUMP
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+ ;;
+
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; 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_prog_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; 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_prog_ac_ct_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_cxx_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_objext'
+ { (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_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_cxx_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_objext'
+ { (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_prog_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_cxx_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_objext'
+ { (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
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_cxx_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_objext'
+ { (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
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CXX" am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CXX_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ : > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored.
+ if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+fi
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; 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_prog_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$F77"; then
+ ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+ echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$F77" && break
+ done
+fi
+if test -z "$F77"; then
+ ac_ct_F77=$F77
+ for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; 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_prog_ac_ct_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_F77"; then
+ ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_F77="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+ echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
+echo "${ECHO_T}$ac_ct_F77" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_F77" && break
+done
+
+ F77=$ac_ct_F77
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:5895:" \
+ "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
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file. (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+ program main
+#ifndef __GNUC__
+ choke me
+#endif
+
+ end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_f77_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_objext'
+ { (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_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_f77_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ FFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_f77_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_objext'
+ { (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_prog_f77_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_f77_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
+if test "$ac_test_FFLAGS" = set; then
+ FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+ FFLAGS="-g -O2"
+ else
+ FFLAGS="-g"
+ fi
+else
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+ FFLAGS="-O2"
+ else
+ FFLAGS=
+ fi
+fi
+
+G77=`test $ac_compiler_gnu = yes && echo yes`
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+
+# find the maximum length of command line arguments
+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ i=0
+ testring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ *)
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \
+ = "XX$testring") >/dev/null 2>&1 &&
+ new_result=`expr "X$testring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ testring=$testring$testring
+ done
+ testring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+else
+ echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+fi
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris* | sysv5*)
+ symcode='[BDRT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Write the raw and C identifiers.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+ echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; 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_prog_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; 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_prog_ac_ct_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ AR=$ac_ct_AR
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; 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_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; 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_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; 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_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; 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_prog_ac_ct_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ STRIP=$ac_ct_STRIP
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+ ;;
+ *)
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+enable_dlopen=no
+enable_win32_dll=yes
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+ enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi;
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+#
+# Check for any special shared library compilation flags.
+#
+lt_prog_cc_shlib=
+if test "$GCC" = no; then
+ case $host_os in
+ sco3.2v5*)
+ lt_prog_cc_shlib='-belf'
+ ;;
+ esac
+fi
+if test -n "$lt_prog_cc_shlib"; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;}
+ if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then :
+ else
+ { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+ lt_cv_prog_cc_can_build_shared=no
+ fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_prog_compiler_static"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:6922: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:6926: \$? = $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
+ if test ! -s conftest.err; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc|ecc)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ ccc)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ lt_prog_compiler_pic='-Kpic'
+ lt_prog_compiler_static='-dn'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:7154: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:7158: \$? = $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
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:7221: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:7225: \$? = $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
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag=
+ enable_shared_with_static_runtimes=no
+ archive_cmds=
+ archive_expsym_cmds=
+ old_archive_From_new_cmds=
+ old_archive_from_expsyms_cmds=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ thread_safe_flag_spec=
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_direct=no
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ link_all_deplibs=unknown
+ hardcode_automatic=no
+ module_cmds=
+ module_expsym_cmds=
+ always_export_symbols=no
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ linux*)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_cmds="$tmp_archive_cmds"
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+ if test $supports_anon_versioning = yes; then
+ archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ else
+ archive_expsym_cmds="$tmp_archive_cmds"
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.012|aix4.012.*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct=yes
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ 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
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ 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
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols=yes
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec=' '
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+
+ bsdi4*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_From_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ module_cmds='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec='-all_load $convenience'
+ link_all_deplibs=yes
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+
+ sco3.2v5*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z text'
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ no_undefined_flag='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv5*)
+ no_undefined_flag=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec=
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+ test -n "$runpath_var " || \
+ test "X$hardcode_automatic"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.01* | freebsdelf3.01*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+
+ # Find out which ABI we are using (multilib Linux x86_64 hack).
+ libsuff=
+ case "$host_cpu" in
+ x86_64*|s390x*|powerpc64*)
+ echo '#line 8606 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *64-bit*)
+ libsuff=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+ *)
+ ;;
+ esac
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ 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
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $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_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_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_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* 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 shl_load ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+ ;
+ 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_func_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ 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
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $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 shl_load ();
+int
+main ()
+{
+shl_load ();
+ ;
+ 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_dld_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* 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 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != 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_func_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ 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
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $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_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_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_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $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_svld_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_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_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $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 dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ 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_dld_dld_link=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 9388 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 9486 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+# Report which librarie types wil actually be built
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ output_verbose_link_cmd='echo'
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+ module_cmds='$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec='-all_load $convenience'
+ link_all_deplibs=yes
+ fi
+ ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler \
+ CC \
+ LD \
+ lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
+ lt_prog_compiler_static \
+ lt_prog_compiler_no_builtin_flag \
+ export_dynamic_flag_spec \
+ thread_safe_flag_spec \
+ whole_archive_flag_spec \
+ enable_shared_with_static_runtimes \
+ old_archive_cmds \
+ old_archive_from_new_cmds \
+ predep_objects \
+ postdep_objects \
+ predeps \
+ postdeps \
+ compiler_lib_search_path \
+ archive_cmds \
+ archive_expsym_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ old_archive_from_expsyms_cmds \
+ allow_undefined_flag \
+ no_undefined_flag \
+ export_symbols_cmds \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+ hardcode_automatic \
+ module_cmds \
+ module_expsym_cmds \
+ lt_cv_prog_compiler_c_o \
+ exclude_expsyms \
+ include_expsyms; do
+
+ case $var in
+ old_archive_cmds | \
+ old_archive_from_new_cmds | \
+ archive_cmds | \
+ archive_expsym_cmds | \
+ module_cmds | \
+ module_expsym_cmds | \
+ old_archive_from_expsyms_cmds | \
+ export_symbols_cmds | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="${ofile}T"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ $rm -f "$cfgfile"
+ { echo "$as_me:$LINENO: creating $ofile" >&5
+echo "$as_me: creating $ofile" >&6;}
+
+ cat <<__EOF__ >> "$cfgfile"
+#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+# Check whether --with-tags or --without-tags was given.
+if test "${with_tags+set}" = set; then
+ withval="$with_tags"
+ tagnames="$withval"
+fi;
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
+ fi
+
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
+ else
+ { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
+ fi
+ fi
+
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
+ "") ;;
+ *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
+echo "$as_me: error: invalid tag name: $tagname" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
+
+ case $tagname in
+ CXX)
+ if test -n "$CXX" && test "X$CXX" != "Xno"; then
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_automatic_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+ unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+ unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+compiler_CXX=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+else
+ lt_prog_compiler_no_builtin_flag_CXX=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+ withval="$with_gnu_ld"
+ test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+ grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_CXX=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+ld_shlibs_CXX=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_CXX=''
+ hardcode_direct_CXX=yes
+ hardcode_libdir_separator_CXX=':'
+ link_all_deplibs_CXX=yes
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.012|aix4.012.*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct_CXX=yes
+ else
+ # We have old collect2
+ hardcode_direct_CXX=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_CXX=yes
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ hardcode_libdir_separator_CXX=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols_CXX=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_CXX='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ 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_cxx_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
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_CXX="-z nodefs"
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ 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_cxx_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
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_CXX=' ${wl}-bernotok'
+ allow_undefined_flag_CXX=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols_CXX=yes
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_CXX=' '
+ archive_cmds_need_lc_CXX=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ allow_undefined_flag_CXX=unsupported
+ always_export_symbols_CXX=no
+ enable_shared_with_static_runtimes_CXX=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs_CXX=no
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc_CXX=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag_CXX='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ module_cmds_CXX='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct_CXX=no
+ hardcode_automatic_CXX=yes
+ hardcode_shlibpath_var_CXX=unsupported
+ whole_archive_flag_spec_CXX='-all_load $convenience'
+ link_all_deplibs_CXX=yes
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ freebsd12*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ ld_shlibs_CXX=no
+ ;;
+ freebsd-elf*)
+ archive_cmds_need_lc_CXX=no
+ ;;
+ freebsd*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ ld_shlibs_CXX=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ hardcode_direct_CXX=yes
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aCC)
+ archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
+ hardcode_libdir_separator_CXX=:
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ ;;
+ esac
+ fi
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ ;;
+ ia64*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ *)
+ hardcode_direct_CXX=yes
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aCC)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ ia64*|hppa*64*)
+ archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC)
+ # SGI C++
+ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ link_all_deplibs_CXX=yes
+ ;;
+ esac
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc)
+ # Intel C++
+ with_gnu_ld=yes
+ archive_cmds_need_lc_CXX=no
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ cxx)
+ # Compaq C++
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ hardcode_direct_CXX=yes
+ hardcode_shlibpath_var_CXX=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+ osf3*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ cxx)
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+ osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ cxx)
+ allow_undefined_flag_CXX=' -expect_unresolved \*'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
+ $rm $lib.exp'
+
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ sco*)
+ archive_cmds_need_lc_CXX=no
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ lcc)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ no_undefined_flag_CXX=' -zdefs'
+ archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ hardcode_shlibpath_var_CXX=no
+ case $host_os in
+ solaris2.0-5 | solaris2.0-5.*) ;;
+ *)
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ link_all_deplibs_CXX=yes
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+ fi
+ ;;
+ esac
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ archive_cmds_need_lc_CXX=no
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+GCC_CXX="$GXX"
+LD_CXX="$LD"
+
+
+cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+ for p in `eval $output_verbose_link_cmd`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" \
+ || test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$compiler_lib_search_path_CXX"; then
+ compiler_lib_search_path_CXX="${prev}${p}"
+ else
+ compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$postdeps_CXX"; then
+ postdeps_CXX="${prev}${p}"
+ else
+ postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$predep_objects_CXX"; then
+ predep_objects_CXX="$p"
+ else
+ predep_objects_CXX="$predep_objects_CXX $p"
+ fi
+ else
+ if test -z "$postdep_objects_CXX"; then
+ postdep_objects_CXX="$p"
+ else
+ postdep_objects_CXX="$postdep_objects_CXX $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$rm -f confest.$objext
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+
+lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_CXX='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_CXX='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ lt_prog_compiler_pic_CXX=
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_CXX=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_CXX='-Bstatic'
+ else
+ lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68)
+ # Green Hills C++ Compiler
+ # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++)
+ lt_prog_compiler_pic_CXX='-KPIC'
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ if test "$host_cpu" != ia64; then
+ lt_prog_compiler_pic_CXX='+Z'
+ fi
+ ;;
+ aCC)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # KAI C++ Compiler
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ icpc)
+ # Intel C++
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-static'
+ ;;
+ cxx)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ lt_prog_compiler_pic_CXX='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ cxx)
+ # Digital/Compaq C++
+ lt_prog_compiler_wl_CXX='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ sco*)
+ case $cc_basename in
+ CC)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ lt_prog_compiler_wl_CXX='-Qoption ld '
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ lt_prog_compiler_pic_CXX='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ lt_prog_compiler_pic_CXX='-pic'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ lcc)
+ # Lucid
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ lt_prog_compiler_pic_CXX='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ unixware*)
+ ;;
+ vxworks*)
+ ;;
+ *)
+ lt_prog_compiler_can_build_shared_CXX=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works_CXX=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:11638: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:11642: \$? = $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
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works_CXX=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
+
+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
+ case $lt_prog_compiler_pic_CXX in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+ esac
+else
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_CXX=
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o_CXX=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:11705: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:11709: \$? = $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
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ lt_cv_prog_compiler_c_o_CXX=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ export_symbols_cmds_CXX="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_CXX=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_CXX in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_CXX
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+ allow_undefined_flag_CXX=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc_CXX=no
+ else
+ archive_cmds_need_lc_CXX=yes
+ fi
+ allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" || \
+ test -n "$runpath_var CXX" || \
+ test "X$hardcode_automatic_CXX"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct_CXX" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+ test "$hardcode_minus_L_CXX" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_CXX=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_CXX=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_CXX=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6
+
+if test "$hardcode_action_CXX" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.01* | freebsdelf3.01*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+
+ # Find out which ABI we are using (multilib Linux x86_64 hack).
+ libsuff=
+ case "$host_cpu" in
+ x86_64*|s390x*|powerpc64*)
+ echo '#line 12276 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *64-bit*)
+ libsuff=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+ *)
+ ;;
+ esac
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ 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
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $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_cxx_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_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_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_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* 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 shl_load ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+ ;
+ 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_cxx_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_func_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ 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
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $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 shl_load ();
+int
+main ()
+{
+shl_load ();
+ ;
+ 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_cxx_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_dld_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* 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 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != 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_cxx_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_func_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ 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
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $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_cxx_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_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_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_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $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_cxx_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_svld_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_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_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $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 dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ 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_cxx_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_dld_dld_link=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 13058 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 13156 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler_CXX \
+ CC_CXX \
+ LD_CXX \
+ lt_prog_compiler_wl_CXX \
+ lt_prog_compiler_pic_CXX \
+ lt_prog_compiler_static_CXX \
+ lt_prog_compiler_no_builtin_flag_CXX \
+ export_dynamic_flag_spec_CXX \
+ thread_safe_flag_spec_CXX \
+ whole_archive_flag_spec_CXX \
+ enable_shared_with_static_runtimes_CXX \
+ old_archive_cmds_CXX \
+ old_archive_from_new_cmds_CXX \
+ predep_objects_CXX \
+ postdep_objects_CXX \
+ predeps_CXX \
+ postdeps_CXX \
+ compiler_lib_search_path_CXX \
+ archive_cmds_CXX \
+ archive_expsym_cmds_CXX \
+ postinstall_cmds_CXX \
+ postuninstall_cmds_CXX \
+ old_archive_from_expsyms_cmds_CXX \
+ allow_undefined_flag_CXX \
+ no_undefined_flag_CXX \
+ export_symbols_cmds_CXX \
+ hardcode_libdir_flag_spec_CXX \
+ hardcode_libdir_flag_spec_ld_CXX \
+ hardcode_libdir_separator_CXX \
+ hardcode_automatic_CXX \
+ module_cmds_CXX \
+ module_expsym_cmds_CXX \
+ lt_cv_prog_compiler_c_o_CXX \
+ exclude_expsyms_CXX \
+ include_expsyms_CXX; do
+
+ case $var in
+ old_archive_cmds_CXX | \
+ old_archive_from_new_cmds_CXX | \
+ archive_cmds_CXX | \
+ archive_expsym_cmds_CXX | \
+ module_cmds_CXX | \
+ module_expsym_cmds_CXX | \
+ old_archive_from_expsyms_cmds_CXX | \
+ export_symbols_cmds_CXX | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="$ofile"
+
+ cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_CXX
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_CXX
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_CXX
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_CXX"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+
+ else
+ tagname=""
+ fi
+ ;;
+
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+
+archive_cmds_need_lc_F77=no
+allow_undefined_flag_F77=
+always_export_symbols_F77=no
+archive_expsym_cmds_F77=
+export_dynamic_flag_spec_F77=
+hardcode_direct_F77=no
+hardcode_libdir_flag_spec_F77=
+hardcode_libdir_flag_spec_ld_F77=
+hardcode_libdir_separator_F77=
+hardcode_minus_L_F77=no
+hardcode_automatic_F77=no
+module_cmds_F77=
+module_expsym_cmds_F77=
+link_all_deplibs_F77=unknown
+old_archive_cmds_F77=$old_archive_cmds
+no_undefined_flag_F77=
+whole_archive_flag_spec_F77=
+enable_shared_with_static_runtimes_F77=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+objext_F77=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=" program t\n end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+compiler_F77=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+aix4*)
+ test "$enable_shared" = yes && enable_static=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+GCC_F77="$G77"
+LD_F77="$LD"
+
+lt_prog_compiler_wl_F77=
+lt_prog_compiler_pic_F77=
+lt_prog_compiler_static_F77=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_static_F77='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_F77='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_F77='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared_F77=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_F77=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_F77='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ lt_prog_compiler_pic_F77='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_F77='-Bstatic'
+ else
+ lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_F77='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc|ecc)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-static'
+ ;;
+ ccc)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ lt_prog_compiler_pic_F77='-Kpic'
+ lt_prog_compiler_static_F77='-dn'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl_F77='-Qoption ld '
+ lt_prog_compiler_pic_F77='-PIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic_F77='-Kconform_pic'
+ lt_prog_compiler_static_F77='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic_F77='-pic'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared_F77=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_F77"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works_F77=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_F77"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:13978: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:13982: \$? = $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
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works_F77=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
+
+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
+ case $lt_prog_compiler_pic_F77 in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
+ esac
+else
+ lt_prog_compiler_pic_F77=
+ lt_prog_compiler_can_build_shared_F77=no
+fi
+
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_F77=
+ ;;
+ *)
+ lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o_F77=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:14045: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:14049: \$? = $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
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ lt_cv_prog_compiler_c_o_F77=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag_F77=
+ enable_shared_with_static_runtimes_F77=no
+ archive_cmds_F77=
+ archive_expsym_cmds_F77=
+ old_archive_From_new_cmds_F77=
+ old_archive_from_expsyms_cmds_F77=
+ export_dynamic_flag_spec_F77=
+ whole_archive_flag_spec_F77=
+ thread_safe_flag_spec_F77=
+ hardcode_libdir_flag_spec_F77=
+ hardcode_libdir_flag_spec_ld_F77=
+ hardcode_libdir_separator_F77=
+ hardcode_direct_F77=no
+ hardcode_minus_L_F77=no
+ hardcode_shlibpath_var_F77=unsupported
+ link_all_deplibs_F77=unknown
+ hardcode_automatic_F77=no
+ module_cmds_F77=
+ module_expsym_cmds_F77=
+ always_export_symbols_F77=no
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms_F77=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs_F77=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs_F77=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_minus_L_F77=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs_F77=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag_F77=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ allow_undefined_flag_F77=unsupported
+ always_export_symbols_F77=no
+ enable_shared_with_static_runtimes_F77=yes
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs_F77=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ sunos4*)
+ archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ linux*)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_cmds_F77="$tmp_archive_cmds"
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+ if test $supports_anon_versioning = yes; then
+ archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ else
+ archive_expsym_cmds_F77="$tmp_archive_cmds"
+ fi
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs_F77" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_F77='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_F77=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag_F77=unsupported
+ always_export_symbols_F77=yes
+ archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L_F77=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct_F77=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_F77=''
+ hardcode_direct_F77=yes
+ hardcode_libdir_separator_F77=':'
+ link_all_deplibs_F77=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.012|aix4.012.*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct_F77=yes
+ else
+ # We have old collect2
+ hardcode_direct_F77=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_F77=yes
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_libdir_separator_F77=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols_F77=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_F77='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_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_f77_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
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_F77="-z nodefs"
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_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_f77_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
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_F77=' ${wl}-bernotok'
+ allow_undefined_flag_F77=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols_F77=yes
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_F77=' '
+ archive_cmds_need_lc_F77=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_minus_L_F77=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs_F77=no
+ ;;
+
+ bsdi4*)
+ export_dynamic_flag_spec_F77=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec_F77=' '
+ allow_undefined_flag_F77=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_From_new_cmds_F77='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes_F77=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc_F77=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag_F77='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ module_cmds_F77='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct_F77=no
+ hardcode_automatic_F77=yes
+ hardcode_shlibpath_var_F77=unsupported
+ whole_archive_flag_spec_F77='-all_load $convenience'
+ link_all_deplibs_F77=yes
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs_F77=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes
+ hardcode_minus_L_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_direct_F77=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ export_dynamic_flag_spec_F77='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld_F77='+b $libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_direct_F77=no
+ hardcode_shlibpath_var_F77=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_direct_F77=no
+ hardcode_shlibpath_var_F77=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ ;;
+ *)
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_direct_F77=yes
+ export_dynamic_flag_spec_F77='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
+ fi
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ link_all_deplibs_F77=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ newsos6)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ openbsd*)
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_F77='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ ;;
+ *)
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_minus_L_F77=yes
+ allow_undefined_flag_F77=unsupported
+ archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag_F77=' -expect_unresolved \*'
+ archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag_F77=' -expect_unresolved \*'
+ archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec_F77='-rpath $libdir'
+ fi
+ hardcode_libdir_separator_F77=:
+ ;;
+
+ sco3.2v5*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_F77=no
+ export_dynamic_flag_spec_F77='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ no_undefined_flag_F77=' -z text'
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_shlibpath_var_F77=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
+ esac
+ link_all_deplibs_F77=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_direct_F77=yes
+ hardcode_minus_L_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds_F77='$CC -r -o $output$reload_objs'
+ hardcode_direct_F77=no
+ ;;
+ motorola)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_F77=no
+ export_dynamic_flag_spec_F77='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_F77=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs_F77=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes
+ hardcode_minus_L_F77=no
+ hardcode_shlibpath_var_F77=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ no_undefined_flag_F77='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ sysv5*)
+ no_undefined_flag_F77=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec_F77=
+ hardcode_shlibpath_var_F77=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ *)
+ ld_shlibs_F77=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
+echo "${ECHO_T}$ld_shlibs_F77" >&6
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_F77" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_F77=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_F77 in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_F77
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_F77
+ allow_undefined_flag_F77=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc_F77=no
+ else
+ archive_cmds_need_lc_F77=yes
+ fi
+ allow_undefined_flag_F77=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_F77=
+if test -n "$hardcode_libdir_flag_spec_F77" || \
+ test -n "$runpath_var F77" || \
+ test "X$hardcode_automatic_F77"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct_F77" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
+ test "$hardcode_minus_L_F77" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_F77=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_F77=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_F77=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
+echo "${ECHO_T}$hardcode_action_F77" >&6
+
+if test "$hardcode_action_F77" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.01* | freebsdelf3.01*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+
+ # Find out which ABI we are using (multilib Linux x86_64 hack).
+ libsuff=
+ case "$host_cpu" in
+ x86_64*|s390x*|powerpc64*)
+ echo '#line 15410 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *64-bit*)
+ libsuff=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+ *)
+ ;;
+ esac
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler_F77 \
+ CC_F77 \
+ LD_F77 \
+ lt_prog_compiler_wl_F77 \
+ lt_prog_compiler_pic_F77 \
+ lt_prog_compiler_static_F77 \
+ lt_prog_compiler_no_builtin_flag_F77 \
+ export_dynamic_flag_spec_F77 \
+ thread_safe_flag_spec_F77 \
+ whole_archive_flag_spec_F77 \
+ enable_shared_with_static_runtimes_F77 \
+ old_archive_cmds_F77 \
+ old_archive_from_new_cmds_F77 \
+ predep_objects_F77 \
+ postdep_objects_F77 \
+ predeps_F77 \
+ postdeps_F77 \
+ compiler_lib_search_path_F77 \
+ archive_cmds_F77 \
+ archive_expsym_cmds_F77 \
+ postinstall_cmds_F77 \
+ postuninstall_cmds_F77 \
+ old_archive_from_expsyms_cmds_F77 \
+ allow_undefined_flag_F77 \
+ no_undefined_flag_F77 \
+ export_symbols_cmds_F77 \
+ hardcode_libdir_flag_spec_F77 \
+ hardcode_libdir_flag_spec_ld_F77 \
+ hardcode_libdir_separator_F77 \
+ hardcode_automatic_F77 \
+ module_cmds_F77 \
+ module_expsym_cmds_F77 \
+ lt_cv_prog_compiler_c_o_F77 \
+ exclude_expsyms_F77 \
+ include_expsyms_F77; do
+
+ case $var in
+ old_archive_cmds_F77 | \
+ old_archive_from_new_cmds_F77 | \
+ archive_cmds_F77 | \
+ archive_expsym_cmds_F77 | \
+ module_cmds_F77 | \
+ module_expsym_cmds_F77 | \
+ old_archive_from_expsyms_cmds_F77 | \
+ export_symbols_cmds_F77 | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="$ofile"
+
+ cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_F77
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_F77
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_F77
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_F77
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_F77
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_F77
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_F77
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_F77
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_F77
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_F77
+module_expsym_cmds=$lt_module_expsym_cmds_F77
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_F77
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_F77
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_F77
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_F77
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_F77
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_F77
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_F77
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_F77
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_F77
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_F77"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_F77
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_F77
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_F77
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_F77
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+ else
+ tagname=""
+ fi
+ ;;
+
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+
+
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+objext_GCJ=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+compiler_GCJ=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+archive_cmds_need_lc_GCJ=no
+
+
+lt_prog_compiler_no_builtin_flag_GCJ=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:16056: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:16060: \$? = $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
+ if test ! -s conftest.err; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+lt_prog_compiler_wl_GCJ=
+lt_prog_compiler_pic_GCJ=
+lt_prog_compiler_static_GCJ=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_static_GCJ='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_GCJ='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared_GCJ=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_GCJ=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_GCJ='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ lt_prog_compiler_pic_GCJ='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ else
+ lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_GCJ='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static_GCJ='-non_shared'
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc|ecc)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-static'
+ ;;
+ ccc)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static_GCJ='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static_GCJ='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ lt_prog_compiler_pic_GCJ='-Kpic'
+ lt_prog_compiler_static_GCJ='-dn'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl_GCJ='-Qoption ld '
+ lt_prog_compiler_pic_GCJ='-PIC'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic_GCJ='-Kconform_pic'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic_GCJ='-pic'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared_GCJ=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_GCJ"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works_GCJ=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:16288: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:16292: \$? = $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
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works_GCJ=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
+
+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
+ case $lt_prog_compiler_pic_GCJ in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
+ esac
+else
+ lt_prog_compiler_pic_GCJ=
+ lt_prog_compiler_can_build_shared_GCJ=no
+fi
+
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_GCJ=
+ ;;
+ *)
+ lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o_GCJ=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:16355: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:16359: \$? = $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
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ lt_cv_prog_compiler_c_o_GCJ=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag_GCJ=
+ enable_shared_with_static_runtimes_GCJ=no
+ archive_cmds_GCJ=
+ archive_expsym_cmds_GCJ=
+ old_archive_From_new_cmds_GCJ=
+ old_archive_from_expsyms_cmds_GCJ=
+ export_dynamic_flag_spec_GCJ=
+ whole_archive_flag_spec_GCJ=
+ thread_safe_flag_spec_GCJ=
+ hardcode_libdir_flag_spec_GCJ=
+ hardcode_libdir_flag_spec_ld_GCJ=
+ hardcode_libdir_separator_GCJ=
+ hardcode_direct_GCJ=no
+ hardcode_minus_L_GCJ=no
+ hardcode_shlibpath_var_GCJ=unsupported
+ link_all_deplibs_GCJ=unknown
+ hardcode_automatic_GCJ=no
+ module_cmds_GCJ=
+ module_expsym_cmds_GCJ=
+ always_export_symbols_GCJ=no
+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms_GCJ=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs_GCJ=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs_GCJ=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_minus_L_GCJ=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs_GCJ=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag_GCJ=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ allow_undefined_flag_GCJ=unsupported
+ always_export_symbols_GCJ=no
+ enable_shared_with_static_runtimes_GCJ=yes
+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs_GCJ=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+
+ sunos4*)
+ archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ linux*)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_cmds_GCJ="$tmp_archive_cmds"
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+ if test $supports_anon_versioning = yes; then
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ else
+ archive_expsym_cmds_GCJ="$tmp_archive_cmds"
+ fi
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs_GCJ" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_GCJ=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag_GCJ=unsupported
+ always_export_symbols_GCJ=yes
+ archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L_GCJ=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct_GCJ=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_GCJ=''
+ hardcode_direct_GCJ=yes
+ hardcode_libdir_separator_GCJ=':'
+ link_all_deplibs_GCJ=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.012|aix4.012.*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct_GCJ=yes
+ else
+ # We have old collect2
+ hardcode_direct_GCJ=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_GCJ=yes
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_libdir_separator_GCJ=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols_GCJ=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_GCJ='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ 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
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_GCJ="-z nodefs"
+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ 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
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_GCJ=' ${wl}-bernotok'
+ allow_undefined_flag_GCJ=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols_GCJ=yes
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_GCJ=' '
+ archive_cmds_need_lc_GCJ=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_minus_L_GCJ=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs_GCJ=no
+ ;;
+
+ bsdi4*)
+ export_dynamic_flag_spec_GCJ=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec_GCJ=' '
+ allow_undefined_flag_GCJ=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_From_new_cmds_GCJ='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes_GCJ=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc_GCJ=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag_GCJ='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ module_cmds_GCJ='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct_GCJ=no
+ hardcode_automatic_GCJ=yes
+ hardcode_shlibpath_var_GCJ=unsupported
+ whole_archive_flag_spec_GCJ='-all_load $convenience'
+ link_all_deplibs_GCJ=yes
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs_GCJ=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes
+ hardcode_minus_L_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ hardcode_direct_GCJ=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_GCJ=yes
+ export_dynamic_flag_spec_GCJ='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
+ hardcode_libdir_separator_GCJ=:
+ hardcode_direct_GCJ=no
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_direct_GCJ=no
+ hardcode_shlibpath_var_GCJ=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_GCJ=yes
+ ;;
+ *)
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ hardcode_direct_GCJ=yes
+ export_dynamic_flag_spec_GCJ='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_GCJ=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
+ fi
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ link_all_deplibs_GCJ=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ newsos6)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ openbsd*)
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_GCJ='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ ;;
+ *)
+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_minus_L_GCJ=yes
+ allow_undefined_flag_GCJ=unsupported
+ archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag_GCJ=' -expect_unresolved \*'
+ archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag_GCJ=' -expect_unresolved \*'
+ archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
+ fi
+ hardcode_libdir_separator_GCJ=:
+ ;;
+
+ sco3.2v5*)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_GCJ=no
+ export_dynamic_flag_spec_GCJ='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ no_undefined_flag_GCJ=' -z text'
+ if test "$GCC" = yes; then
+ archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ hardcode_shlibpath_var_GCJ=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
+ esac
+ link_all_deplibs_GCJ=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_direct_GCJ=yes
+ hardcode_minus_L_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds_GCJ='$CC -r -o $output$reload_objs'
+ hardcode_direct_GCJ=no
+ ;;
+ motorola)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_GCJ=no
+ export_dynamic_flag_spec_GCJ='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_GCJ=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs_GCJ=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes
+ hardcode_minus_L_GCJ=no
+ hardcode_shlibpath_var_GCJ=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ no_undefined_flag_GCJ='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ sysv5*)
+ no_undefined_flag_GCJ=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec_GCJ=
+ hardcode_shlibpath_var_GCJ=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ *)
+ ld_shlibs_GCJ=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
+echo "${ECHO_T}$ld_shlibs_GCJ" >&6
+test "$ld_shlibs_GCJ" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_GCJ" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_GCJ=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_GCJ in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_GCJ
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
+ allow_undefined_flag_GCJ=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc_GCJ=no
+ else
+ archive_cmds_need_lc_GCJ=yes
+ fi
+ allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_GCJ=
+if test -n "$hardcode_libdir_flag_spec_GCJ" || \
+ test -n "$runpath_var GCJ" || \
+ test "X$hardcode_automatic_GCJ"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct_GCJ" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
+ test "$hardcode_minus_L_GCJ" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_GCJ=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_GCJ=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_GCJ=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
+echo "${ECHO_T}$hardcode_action_GCJ" >&6
+
+if test "$hardcode_action_GCJ" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
+fi
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.01* | freebsdelf3.01*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+
+ # Find out which ABI we are using (multilib Linux x86_64 hack).
+ libsuff=
+ case "$host_cpu" in
+ x86_64*|s390x*|powerpc64*)
+ echo '#line 17740 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *64-bit*)
+ libsuff=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+ *)
+ ;;
+ esac
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ 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
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $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_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_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_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* 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 shl_load ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+ ;
+ 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_func_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ 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
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $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 shl_load ();
+int
+main ()
+{
+shl_load ();
+ ;
+ 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_dld_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* 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 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != 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_func_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ 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
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $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_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_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_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $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_svld_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_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_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $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 dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ 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_dld_dld_link=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 18522 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 18620 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler_GCJ \
+ CC_GCJ \
+ LD_GCJ \
+ lt_prog_compiler_wl_GCJ \
+ lt_prog_compiler_pic_GCJ \
+ lt_prog_compiler_static_GCJ \
+ lt_prog_compiler_no_builtin_flag_GCJ \
+ export_dynamic_flag_spec_GCJ \
+ thread_safe_flag_spec_GCJ \
+ whole_archive_flag_spec_GCJ \
+ enable_shared_with_static_runtimes_GCJ \
+ old_archive_cmds_GCJ \
+ old_archive_from_new_cmds_GCJ \
+ predep_objects_GCJ \
+ postdep_objects_GCJ \
+ predeps_GCJ \
+ postdeps_GCJ \
+ compiler_lib_search_path_GCJ \
+ archive_cmds_GCJ \
+ archive_expsym_cmds_GCJ \
+ postinstall_cmds_GCJ \
+ postuninstall_cmds_GCJ \
+ old_archive_from_expsyms_cmds_GCJ \
+ allow_undefined_flag_GCJ \
+ no_undefined_flag_GCJ \
+ export_symbols_cmds_GCJ \
+ hardcode_libdir_flag_spec_GCJ \
+ hardcode_libdir_flag_spec_ld_GCJ \
+ hardcode_libdir_separator_GCJ \
+ hardcode_automatic_GCJ \
+ module_cmds_GCJ \
+ module_expsym_cmds_GCJ \
+ lt_cv_prog_compiler_c_o_GCJ \
+ exclude_expsyms_GCJ \
+ include_expsyms_GCJ; do
+
+ case $var in
+ old_archive_cmds_GCJ | \
+ old_archive_from_new_cmds_GCJ | \
+ archive_cmds_GCJ | \
+ archive_expsym_cmds_GCJ | \
+ module_cmds_GCJ | \
+ module_expsym_cmds_GCJ | \
+ old_archive_from_expsyms_cmds_GCJ | \
+ export_symbols_cmds_GCJ | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="$ofile"
+
+ cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_GCJ
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_GCJ
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_GCJ
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_GCJ
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_GCJ
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_GCJ
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_GCJ
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_GCJ
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_GCJ
+archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_GCJ
+module_expsym_cmds=$lt_module_expsym_cmds_GCJ
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_GCJ
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_GCJ
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_GCJ
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_GCJ
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_GCJ
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_GCJ
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_GCJ
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_GCJ
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_GCJ
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_GCJ"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_GCJ
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_GCJ
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_GCJ
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_GCJ
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+ else
+ tagname=""
+ fi
+ ;;
+
+ RC)
+
+
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+objext_RC=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+compiler_RC=$CC
+lt_cv_prog_compiler_c_o_RC=yes
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler_RC \
+ CC_RC \
+ LD_RC \
+ lt_prog_compiler_wl_RC \
+ lt_prog_compiler_pic_RC \
+ lt_prog_compiler_static_RC \
+ lt_prog_compiler_no_builtin_flag_RC \
+ export_dynamic_flag_spec_RC \
+ thread_safe_flag_spec_RC \
+ whole_archive_flag_spec_RC \
+ enable_shared_with_static_runtimes_RC \
+ old_archive_cmds_RC \
+ old_archive_from_new_cmds_RC \
+ predep_objects_RC \
+ postdep_objects_RC \
+ predeps_RC \
+ postdeps_RC \
+ compiler_lib_search_path_RC \
+ archive_cmds_RC \
+ archive_expsym_cmds_RC \
+ postinstall_cmds_RC \
+ postuninstall_cmds_RC \
+ old_archive_from_expsyms_cmds_RC \
+ allow_undefined_flag_RC \
+ no_undefined_flag_RC \
+ export_symbols_cmds_RC \
+ hardcode_libdir_flag_spec_RC \
+ hardcode_libdir_flag_spec_ld_RC \
+ hardcode_libdir_separator_RC \
+ hardcode_automatic_RC \
+ module_cmds_RC \
+ module_expsym_cmds_RC \
+ lt_cv_prog_compiler_c_o_RC \
+ exclude_expsyms_RC \
+ include_expsyms_RC; do
+
+ case $var in
+ old_archive_cmds_RC | \
+ old_archive_from_new_cmds_RC | \
+ archive_cmds_RC | \
+ archive_expsym_cmds_RC | \
+ module_cmds_RC | \
+ module_expsym_cmds_RC | \
+ old_archive_from_expsyms_cmds_RC | \
+ export_symbols_cmds_RC | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="$ofile"
+
+ cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_RC
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_RC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_RC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_RC
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_RC
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_RC
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_RC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_RC
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_RC
+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_RC
+module_expsym_cmds=$lt_module_expsym_cmds_RC
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_RC
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_RC
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_RC
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_RC
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_RC
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_RC
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_RC
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_RC
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_RC
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_RC
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_RC"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_RC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_RC
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_RC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_RC
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+ ;;
+
+ *)
+ { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# AM_MAINTAINER_MODE
+
+
+# Check whether --with-minimum or --without-minimum was given.
+if test "${with_minimum+set}" = set; then
+ withval="$with_minimum"
+
+fi;
+if test "$with_minimum" = "yes"
+then
+ echo "Configuring for a minimal library"
+fi
+
+_cppflags="${CPPFLAGS}"
+_ldflags="${LDFLAGS}"
+
+
+
+# Check whether --with-zlib or --without-zlib was given.
+if test "${with_zlib+set}" = set; then
+ withval="$with_zlib"
+
+ if test "$withval" != "no" -a "$withval" != "yes"; then
+ Z_DIR=$withval
+ CPPFLAGS="${CPPFLAGS} -I$withval/include"
+ LDFLAGS="${LDFLAGS} -L$withval/lib"
+ fi
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_zlib" = ""
+then
+ with_zlib=no
+fi
+if test "$with_zlib" = "no"; then
+ echo "Disabling compression support"
+else
+
+for ac_header in zlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ echo "$as_me:$LINENO: checking for gzread in -lz" >&5
+echo $ECHO_N "checking for gzread in -lz... $ECHO_C" >&6
+if test "${ac_cv_lib_z_gzread+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz $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 gzread ();
+int
+main ()
+{
+gzread ();
+ ;
+ 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_z_gzread=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_z_gzread=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_z_gzread" >&5
+echo "${ECHO_T}$ac_cv_lib_z_gzread" >&6
+if test $ac_cv_lib_z_gzread = yes; then
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBZ
+_ACEOF
+
+ if test "x${Z_DIR}" != "x"; then
+ Z_CFLAGS="-I${Z_DIR}/include"
+ Z_LIBS="-L${Z_DIR}/lib -lz"
+ case ${host} in
+ *-*-solaris*)
+ Z_LIBS="-L${Z_DIR}/lib -R${Z_DIR}/lib -lz"
+ ;;
+ esac
+ else
+ Z_LIBS="-lz"
+ fi
+fi
+
+fi
+
+done
+
+fi
+
+
+
+
+CPPFLAGS=${_cppflags}
+LDFLAGS=${_ldflags}
+
+
+
+
+
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+ echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+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 opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ 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_search_opendir="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in dir; do
+ LIBS="-l$ac_lib $ac_func_search_save_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 opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ 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_search_opendir="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+ test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
+
+fi
+
+else
+ echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+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 opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ 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_search_opendir="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in x; do
+ LIBS="-l$ac_lib $ac_func_search_save_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 opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ 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_search_opendir="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+ test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
+
+fi
+
+fi
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./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
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+for ac_header in fcntl.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in ctype.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dirent.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in errno.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in malloc.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in stdarg.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/stat.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/types.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in time.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in ansidecl.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in ieeefp.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in nan.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in math.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in limits.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in fp_class.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in float.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in stdlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/socket.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in netinet/in.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in arpa/inet.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+#if HAVE_ARPA_INET_H
+# include <arpa/inet.h>
+# endif
+
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in netdb.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/time.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/select.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/mman.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/timeb.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in signal.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in arpa/nameser.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in resolv.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+#if HAVE_NETINET_IN_H
+# include <netinet/in.h>
+# endif
+#if HAVE_ARPA_NAMESER_H
+# include <arpa/nameser.h>
+# endif
+
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Check whether --with-html-dir or --without-html-dir was given.
+if test "${with_html_dir+set}" = set; then
+ withval="$with_html_dir"
+ HTML_DIR=$withval
+else
+ HTML_DIR='$(datadir)/doc'
+fi;
+
+
+# Check whether --with-html-subdir or --without-html-subdir was given.
+if test "${with_html_subdir+set}" = set; then
+ withval="$with_html_subdir"
+ test "x$withval" != "x" && HTML_DIR="$HTML_DIR/$withval"
+else
+ HTML_DIR="$HTML_DIR/\$(PACKAGE)-\$(VERSION)/html"
+fi;
+
+
+
+
+for ac_func in strftime
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* 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 $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ 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
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ # strftime is in -lintl on SCO UNIX.
+echo "$as_me:$LINENO: checking for strftime in -lintl" >&5
+echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6
+if test "${ac_cv_lib_intl_strftime+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl $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 strftime ();
+int
+main ()
+{
+strftime ();
+ ;
+ 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_intl_strftime=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_intl_strftime=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_intl_strftime" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6
+if test $ac_cv_lib_intl_strftime = yes; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRFTIME 1
+_ACEOF
+
+LIBS="-lintl $LIBS"
+fi
+
+fi
+done
+
+
+
+
+for ac_func in strdup strndup strerror
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* 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 $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ 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
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+
+for ac_func in finite isnand fp_class class fpclass
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* 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 $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ 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
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+for ac_func in strftime localtime gettimeofday ftime
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* 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 $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ 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
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+for ac_func in stat _stat signal
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* 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 $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ 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
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+
+
+
+
+
+for ac_func in printf sprintf fprintf snprintf vfprintf vsprintf vsnprintf sscanf
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* 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 $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ 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
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ NEED_TRIO=1
+fi
+done
+
+
+echo "$as_me:$LINENO: checking for gethostent" >&5
+echo $ECHO_N "checking for gethostent... $ECHO_C" >&6
+if test "${ac_cv_func_gethostent+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define gethostent to an innocuous variant, in case <limits.h> declares gethostent.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define gethostent innocuous_gethostent
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostent (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef gethostent
+
+/* 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 gethostent ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_gethostent) || defined (__stub___gethostent)
+choke me
+#else
+char (*f) () = gethostent;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != gethostent;
+ ;
+ 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_func_gethostent=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_gethostent=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_gethostent" >&5
+echo "${ECHO_T}$ac_cv_func_gethostent" >&6
+if test $ac_cv_func_gethostent = yes; then
+ :
+else
+
+echo "$as_me:$LINENO: checking for gethostent in -lnsl" >&5
+echo $ECHO_N "checking for gethostent in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_gethostent+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $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 gethostent ();
+int
+main ()
+{
+gethostent ();
+ ;
+ 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_nsl_gethostent=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_nsl_gethostent=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_nsl_gethostent" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostent" >&6
+if test $ac_cv_lib_nsl_gethostent = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNSL 1
+_ACEOF
+
+ LIBS="-lnsl $LIBS"
+
+fi
+
+fi
+
+echo "$as_me:$LINENO: checking for setsockopt" >&5
+echo $ECHO_N "checking for setsockopt... $ECHO_C" >&6
+if test "${ac_cv_func_setsockopt+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define setsockopt to an innocuous variant, in case <limits.h> declares setsockopt.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define setsockopt innocuous_setsockopt
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char setsockopt (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef setsockopt
+
+/* 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 setsockopt ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_setsockopt) || defined (__stub___setsockopt)
+choke me
+#else
+char (*f) () = setsockopt;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != setsockopt;
+ ;
+ 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_func_setsockopt=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_setsockopt=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_setsockopt" >&5
+echo "${ECHO_T}$ac_cv_func_setsockopt" >&6
+if test $ac_cv_func_setsockopt = yes; then
+ :
+else
+
+echo "$as_me:$LINENO: checking for setsockopt in -lsocket" >&5
+echo $ECHO_N "checking for setsockopt in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_setsockopt+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $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 setsockopt ();
+int
+main ()
+{
+setsockopt ();
+ ;
+ 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_socket_setsockopt=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_setsockopt=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_socket_setsockopt" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_setsockopt" >&6
+if test $ac_cv_lib_socket_setsockopt = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+ LIBS="-lsocket $LIBS"
+
+fi
+
+fi
+
+echo "$as_me:$LINENO: checking for connect" >&5
+echo $ECHO_N "checking for connect... $ECHO_C" >&6
+if test "${ac_cv_func_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define connect to an innocuous variant, in case <limits.h> declares connect.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define connect innocuous_connect
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef connect
+
+/* 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 connect ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_connect) || defined (__stub___connect)
+choke me
+#else
+char (*f) () = connect;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != connect;
+ ;
+ 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_func_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_connect=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
+echo "${ECHO_T}$ac_cv_func_connect" >&6
+if test $ac_cv_func_connect = yes; then
+ :
+else
+
+echo "$as_me:$LINENO: checking for connect in -linet" >&5
+echo $ECHO_N "checking for connect in -linet... $ECHO_C" >&6
+if test "${ac_cv_lib_inet_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-linet $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 connect ();
+int
+main ()
+{
+connect ();
+ ;
+ 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_inet_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_inet_connect=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_inet_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_inet_connect" >&6
+if test $ac_cv_lib_inet_connect = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBINET 1
+_ACEOF
+
+ LIBS="-linet $LIBS"
+
+fi
+
+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 25569 "configure"
+#include "confdefs.h"
+
+#include <stddef.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+int main(void) {
+
+(void)getsockopt (1, 1, 1, NULL, (socklen_t *)NULL)
+; return 0; }
+EOF
+if { (eval echo configure:25580: \"$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
+echo "${ECHO_T}socklen_t *" >&6
+ SOCKLEN_T=socklen_t
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+
+ cat > conftest.$ac_ext <<EOF
+#line 25592 "configure"
+#include "confdefs.h"
+
+#include <stddef.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+int main(void) {
+
+(void)getsockopt (1, 1, 1, NULL, (size_t *)NULL)
+; return 0; }
+EOF
+if { (eval echo configure:25603: \"$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
+echo "${ECHO_T}size_t *" >&6
+ SOCKLEN_T=size_t
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+
+ cat > conftest.$ac_ext <<EOF
+#line 25615 "configure"
+#include "confdefs.h"
+
+#include <stddef.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+int main(void) {
+
+(void)getsockopt (1, 1, 1, NULL, (int *)NULL)
+; return 0; }
+EOF
+if { (eval echo configure:25626: \"$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
+echo "${ECHO_T}int *" >&6
+ SOCKLEN_T=int
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+
+ { echo "$as_me:$LINENO: WARNING: could not determine" >&5
+echo "$as_me: WARNING: could not determine" >&2;}
+ SOCKLEN_T="unsigned int"
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+
+cat >>confdefs.h <<_ACEOF
+#define SOCKLEN_T $SOCKLEN_T
+_ACEOF
+
+
+
+echo "$as_me:$LINENO: checking whether to enable IPv6" >&5
+echo $ECHO_N "checking whether to enable IPv6... $ECHO_C" >&6
+# Check whether --enable-ipv6 or --disable-ipv6 was given.
+if test "${enable_ipv6+set}" = set; then
+ enableval="$enable_ipv6"
+
+else
+ enable_ipv6=yes
+fi;
+if test "$with_minimum" = "yes"
+then
+ enable_ipv6=no
+fi
+if test $enable_ipv6 = yes; then
+ have_ipv6=no
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+ #include <sys/socket.h>
+ #include <sys/types.h>
+int
+main ()
+{
+
+ struct sockaddr_storage ss;
+ socket(AF_INET6, SOCK_STREAM, 0)
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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
+ have_ipv6=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+have_ipv6=no
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $have_ipv6" >&5
+echo "${ECHO_T}$have_ipv6" >&6
+
+ if test $have_ipv6 = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define SUPPORT_IP6
+_ACEOF
+
+
+ have_getaddrinfo=no
+ echo "$as_me:$LINENO: checking for getaddrinfo" >&5
+echo $ECHO_N "checking for getaddrinfo... $ECHO_C" >&6
+if test "${ac_cv_func_getaddrinfo+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define getaddrinfo to an innocuous variant, in case <limits.h> declares getaddrinfo.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define getaddrinfo innocuous_getaddrinfo
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char getaddrinfo (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef getaddrinfo
+
+/* 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 getaddrinfo ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_getaddrinfo) || defined (__stub___getaddrinfo)
+choke me
+#else
+char (*f) () = getaddrinfo;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != getaddrinfo;
+ ;
+ 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_func_getaddrinfo=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_getaddrinfo=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_getaddrinfo" >&5
+echo "${ECHO_T}$ac_cv_func_getaddrinfo" >&6
+if test $ac_cv_func_getaddrinfo = yes; then
+ have_getaddrinfo=yes
+fi
+
+ if test $have_getaddrinfo != yes; then
+ for lib in bsd socket inet; do
+ as_ac_Lib=`echo "ac_cv_lib_$lib''_getaddrinfo" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for getaddrinfo in -l$lib" >&5
+echo $ECHO_N "checking for getaddrinfo in -l$lib... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Lib+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-l$lib $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 getaddrinfo ();
+int
+main ()
+{
+getaddrinfo ();
+ ;
+ 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
+ eval "$as_ac_Lib=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Lib=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: `eval echo '${'$as_ac_Lib'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6
+if test `eval echo '${'$as_ac_Lib'}'` = yes; then
+ LIBS="$LIBS -l$lib";have_getaddrinfo=yes;break
+fi
+
+ done
+ fi
+
+ if test $have_getaddrinfo = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETADDRINFO
+_ACEOF
+
+ fi
+ fi
+fi
+
+
+echo "$as_me:$LINENO: checking for isnan" >&5
+echo $ECHO_N "checking for isnan... $ECHO_C" >&6
+if test "${ac_cv_func_isnan+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define isnan to an innocuous variant, in case <limits.h> declares isnan.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define isnan innocuous_isnan
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char isnan (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef isnan
+
+/* 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 isnan ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_isnan) || defined (__stub___isnan)
+choke me
+#else
+char (*f) () = isnan;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != isnan;
+ ;
+ 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_func_isnan=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_isnan=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_isnan" >&5
+echo "${ECHO_T}$ac_cv_func_isnan" >&6
+if test $ac_cv_func_isnan = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ISNAN
+_ACEOF
+
+else
+ echo "$as_me:$LINENO: checking for isnan in -lm" >&5
+echo $ECHO_N "checking for isnan in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_isnan+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $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 isnan ();
+int
+main ()
+{
+isnan ();
+ ;
+ 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_m_isnan=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_isnan=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_m_isnan" >&5
+echo "${ECHO_T}$ac_cv_lib_m_isnan" >&6
+if test $ac_cv_lib_m_isnan = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ISNAN
+_ACEOF
+
+fi
+
+fi
+
+
+echo "$as_me:$LINENO: checking for isinf" >&5
+echo $ECHO_N "checking for isinf... $ECHO_C" >&6
+if test "${ac_cv_func_isinf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define isinf to an innocuous variant, in case <limits.h> declares isinf.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define isinf innocuous_isinf
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char isinf (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef isinf
+
+/* 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 isinf ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_isinf) || defined (__stub___isinf)
+choke me
+#else
+char (*f) () = isinf;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != isinf;
+ ;
+ 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_func_isinf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_isinf=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_isinf" >&5
+echo "${ECHO_T}$ac_cv_func_isinf" >&6
+if test $ac_cv_func_isinf = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ISINF
+_ACEOF
+
+else
+ echo "$as_me:$LINENO: checking for isinf in -lm" >&5
+echo $ECHO_N "checking for isinf in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_isinf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $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 isinf ();
+int
+main ()
+{
+isinf ();
+ ;
+ 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_m_isinf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_isinf=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_m_isinf" >&5
+echo "${ECHO_T}$ac_cv_lib_m_isinf" >&6
+if test $ac_cv_lib_m_isinf = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ISINF
+_ACEOF
+
+fi
+
+fi
+
+
+XML_LIBDIR='-L${libdir}'
+XML_INCLUDEDIR='-I${includedir}/libxml2'
+
+XML_CFLAGS=""
+RDL_LIBS=""
+
+
+# Check whether --with-fexceptions or --without-fexceptions was given.
+if test "${with_fexceptions+set}" = set; then
+ withval="$with_fexceptions"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_fexceptions" = ""
+then
+ with_fexceptions=no
+fi
+if test "${GCC}" != "yes" ; then
+ case "${host}" in
+ *-*-hpux* )
+ CFLAGS="${CFLAGS} -Wp,-H30000"
+ ;;
+ *-dec-osf* )
+ CFLAGS="${CFLAGS} -ieee"
+ ;;
+ alpha*-*-linux* )
+ CFLAGS="${CFLAGS} -ieee"
+ ;;
+ esac
+else
+ if test "$with_fexceptions" = "yes"
+ then
+ #
+ # Not activated by default because this inflates the code size
+ # Used to allow propagation of C++ exceptions through the library
+ #
+ CFLAGS="${CFLAGS} -fexceptions"
+ fi
+
+ CFLAGS="${CFLAGS} -Wall"
+ case "${host}" in
+ alpha*-*-linux* )
+ CFLAGS="${CFLAGS} -mieee"
+ ;;
+ alpha*-*-osf* )
+ CFLAGS="${CFLAGS} -mieee"
+ ;;
+ esac
+fi
+case ${host} in
+ *-*-solaris*)
+ XML_LIBDIR="${XML_LIBDIR} -R${libdir}"
+ ;;
+ hppa*-hp-mpeix)
+ NEED_TRIO=1
+ ;;
+esac
+
+
+
+PYTHON=
+PYTHON_VERSION=
+PYTHON_INCLUDES=
+PYTHON_SITE_PACKAGES=
+PYTHON_TESTS=
+pythondir=
+
+# Check whether --with-python or --without-python was given.
+if test "${with_python+set}" = set; then
+ withval="$with_python"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_python" = ""
+then
+ with_python=no
+fi
+if test "$with_python" != "no" ; then
+ if test -x "$with_python/bin/python"
+ then
+ echo Found python in $with_python/bin/python
+ PYTHON="$with_python/bin/python"
+ else
+ if test -x "$with_python"
+ then
+ echo Found python in $with_python
+ PYTHON="$with_python"
+ else
+ # Extract the first word of "python 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.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
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $PYTHON in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ ;;
+esac
+fi
+PYTHON=$ac_cv_path_PYTHON
+
+if test -n "$PYTHON"; then
+ echo "$as_me:$LINENO: result: $PYTHON" >&5
+echo "${ECHO_T}$PYTHON" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ fi
+ fi
+ if test "$PYTHON" != ""
+ then
+ PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[0:3]"`
+ echo Found Python version $PYTHON_VERSION
+ fi
+ if test "$PYTHON_VERSION" != ""
+ then
+ if test -r $with_python/include/python$PYTHON_VERSION/Python.h -a \
+ -d $with_python/lib/python$PYTHON_VERSION/site-packages
+ then
+ PYTHON_INCLUDES=$with_python/include/python$PYTHON_VERSION
+ PYTHON_SITE_PACKAGES=$with_python/lib/python$PYTHON_VERSION/site-packages
+ else
+ if test -r $prefix/include/python$PYTHON_VERSION/Python.h
+ then
+ PYTHON_INCLUDES='$(prefix)/include/python$(PYTHON_VERSION)'
+ PYTHON_SITE_PACKAGES='$(libdir)/python$(PYTHON_VERSION)/site-packages'
+ else
+ if test -r /usr/include/python$PYTHON_VERSION/Python.h
+ then
+ PYTHON_INCLUDES=/usr/include/python$PYTHON_VERSION
+ PYTHON_SITE_PACKAGES='$(libdir)/python$(PYTHON_VERSION)/site-packages'
+ else
+ echo could not find python$PYTHON_VERSION/Python.h
+ fi
+ fi
+ if test ! -d "$PYTHON_SITE_PACKAGES"
+ then
+ PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib()"`
+ fi
+ fi
+ fi
+ if test "$with_python" != ""
+ then
+ pythondir='$(PYTHON_SITE_PACKAGES)'
+ else
+ pythondir='$(libdir)/python${PYTHON_VERSION}/site-packages'
+ fi
+fi
+
+
+if test "$PYTHON_INCLUDES" != ""; then
+ WITH_PYTHON_TRUE=
+ WITH_PYTHON_FALSE='#'
+else
+ WITH_PYTHON_TRUE='#'
+ WITH_PYTHON_FALSE=
+fi
+
+if test "$PYTHON_INCLUDES" != ""
+then
+ PYTHON_SUBDIR=python
+else
+ PYTHON_SUBDIR=
+fi
+
+
+
+_cppflags="${CPPFLAGS}"
+_ldflags="${LDFLAGS}"
+
+
+# Check whether --with-readline or --without-readline was given.
+if test "${with_readline+set}" = set; then
+ withval="$with_readline"
+
+ if test "$withval" != "no" -a "$withval" != "yes"; then
+ RDL_DIR=$withval
+ CPPFLAGS="${CPPFLAGS} -I$withval/include"
+ LDFLAGS="${LDFLAGS} -L$withval/lib"
+ fi
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_readline" = ""
+then
+ with_readline=no
+fi
+
+if [ "${LOGNAME}" = "veillard" -a "`pwd`" = "/u/veillard/XML" ] || \
+ [ "${LOGNAME}" = "bill" -a "`pwd`" = "/home/bill/gnomecvs/xmltest" ] || \
+ [ "${LOGNAME}" = "bill" -a "`pwd`" = "/home/bill/gnomecvs/xmlnew" ]
+ then
+ if test "$with_minimum" != "yes"
+ then
+ if test "${with_mem_debug}" = "" ; then
+ with_mem_debug="yes"
+ fi
+ if test "${with_docbook}" = "" ; then
+ with_docbook="yes"
+ fi
+ fi
+ CFLAGS="-g -O -pedantic -W -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 "
+ STATIC_BINARIES="-static"
+else
+ STATIC_BINARIES=
+fi
+
+
+
+if test "${NEED_TRIO}" = "1" ; then
+ echo Adding trio library for string functions
+ WITH_TRIO=1
+else
+ WITH_TRIO=0
+fi
+
+
+if test "${NEED_TRIO}" = "1"; then
+ WITH_TRIO_SOURCES_TRUE=
+ WITH_TRIO_SOURCES_FALSE='#'
+else
+ WITH_TRIO_SOURCES_TRUE='#'
+ WITH_TRIO_SOURCES_FALSE=
+fi
+
+
+
+
+THREAD_LIBS=""
+WITH_THREADS=0
+THREAD_CFLAGS=""
+TEST_THREADS=""
+THREADS_W32=""
+
+
+# Check whether --with-threads or --without-threads was given.
+if test "${with_threads+set}" = set; then
+ withval="$with_threads"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_threads" = ""
+then
+ with_threads=no
+fi
+if test "$with_threads" = "no" ; then
+ echo Disabling multithreaded support
+else
+ echo Enabling multithreaded support
+
+ if test "${ac_cv_header_pthread_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for pthread.h" >&5
+echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
+if test "${ac_cv_header_pthread_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
+echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking pthread.h usability" >&5
+echo $ECHO_N "checking pthread.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <pthread.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking pthread.h presence" >&5
+echo $ECHO_N "checking pthread.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <pthread.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: pthread.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: pthread.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: pthread.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: pthread.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: pthread.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: pthread.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: pthread.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: pthread.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: pthread.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: pthread.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: pthread.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: pthread.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for pthread.h" >&5
+echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
+if test "${ac_cv_header_pthread_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_pthread_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
+echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
+
+fi
+if test $ac_cv_header_pthread_h = yes; then
+ echo "$as_me:$LINENO: checking for pthread_join in -lpthread" >&5
+echo $ECHO_N "checking for pthread_join in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_pthread_join+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $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 pthread_join ();
+int
+main ()
+{
+pthread_join ();
+ ;
+ 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_pthread_pthread_join=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_pthread_pthread_join=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_pthread_pthread_join" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_join" >&6
+if test $ac_cv_lib_pthread_pthread_join = yes; then
+
+ THREAD_LIBS="-lpthread"
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBPTHREAD
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_PTHREAD_H
+_ACEOF
+
+ WITH_THREADS="1"
+fi
+
+fi
+
+
+ case $host_os in
+ *mingw32*) WITH_THREADS="1"
+ THREADS_W32="Win32"
+ THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_WIN32_THREADS"
+ ;;
+ esac
+ if test "$WITH_THREADS" = "1" ; then
+ THREAD_CFLAGS="$THREAD_CFLAGS -D_REENTRANT"
+ TEST_THREADS="Threadtests"
+ fi
+fi
+
+# Check whether --with-thread-alloc or --without-thread-alloc was given.
+if test "${with_thread_alloc+set}" = set; then
+ withval="$with_thread_alloc"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_thread_alloc" = ""
+then
+ with_thread_alloc=no
+fi
+if test "$with_threads_alloc" = "yes" -a "$WITH_THREADS" = "1" ; then
+ THREAD_CFLAGS="$THREAD_CFLAGS -DLIBXML_THREAD_ALLOC_ENABLED"
+fi
+
+
+
+
+
+
+
+
+# Check whether --with-history or --without-history was given.
+if test "${with_history+set}" = set; then
+ withval="$with_history"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_history" = ""
+then
+ with_history=no
+fi
+if test "$with_history" = "yes" ; then
+ echo Enabling xmllint shell history
+ unset tcap
+ for termlib in ncurses curses termcap terminfo termlib; do
+ as_ac_Lib=`echo "ac_cv_lib_${termlib}''_tputs" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for tputs in -l${termlib}" >&5
+echo $ECHO_N "checking for tputs in -l${termlib}... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Lib+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-l${termlib} $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 tputs ();
+int
+main ()
+{
+tputs ();
+ ;
+ 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
+ eval "$as_ac_Lib=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Lib=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: `eval echo '${'$as_ac_Lib'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6
+if test `eval echo '${'$as_ac_Lib'}'` = yes; then
+ tcap="-l$termlib"
+fi
+
+ test -n "$tcap" && break
+ done
+
+ if test "${ac_cv_header_readline_history_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for readline/history.h" >&5
+echo $ECHO_N "checking for readline/history.h... $ECHO_C" >&6
+if test "${ac_cv_header_readline_history_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_readline_history_h" >&5
+echo "${ECHO_T}$ac_cv_header_readline_history_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking readline/history.h usability" >&5
+echo $ECHO_N "checking readline/history.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <readline/history.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking readline/history.h presence" >&5
+echo $ECHO_N "checking readline/history.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <readline/history.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: readline/history.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: readline/history.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/history.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: readline/history.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: readline/history.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: readline/history.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/history.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: readline/history.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/history.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: readline/history.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/history.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: readline/history.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/history.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: readline/history.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/history.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: readline/history.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for readline/history.h" >&5
+echo $ECHO_N "checking for readline/history.h... $ECHO_C" >&6
+if test "${ac_cv_header_readline_history_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_readline_history_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_readline_history_h" >&5
+echo "${ECHO_T}$ac_cv_header_readline_history_h" >&6
+
+fi
+if test $ac_cv_header_readline_history_h = yes; then
+ echo "$as_me:$LINENO: checking for append_history in -lhistory" >&5
+echo $ECHO_N "checking for append_history in -lhistory... $ECHO_C" >&6
+if test "${ac_cv_lib_history_append_history+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lhistory $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 append_history ();
+int
+main ()
+{
+append_history ();
+ ;
+ 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_history_append_history=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_history_append_history=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_history_append_history" >&5
+echo "${ECHO_T}$ac_cv_lib_history_append_history" >&6
+if test $ac_cv_lib_history_append_history = yes; then
+
+ RDL_LIBS="-lhistory"
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBHISTORY
+_ACEOF
+
+fi
+
+fi
+
+
+ if test "${ac_cv_header_readline_readline_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for readline/readline.h" >&5
+echo $ECHO_N "checking for readline/readline.h... $ECHO_C" >&6
+if test "${ac_cv_header_readline_readline_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_readline_readline_h" >&5
+echo "${ECHO_T}$ac_cv_header_readline_readline_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking readline/readline.h usability" >&5
+echo $ECHO_N "checking readline/readline.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <readline/readline.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking readline/readline.h presence" >&5
+echo $ECHO_N "checking readline/readline.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <readline/readline.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: readline/readline.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: readline/readline.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/readline.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: readline/readline.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: readline/readline.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: readline/readline.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/readline.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: readline/readline.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/readline.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: readline/readline.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/readline.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: readline/readline.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/readline.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: readline/readline.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: readline/readline.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: readline/readline.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for readline/readline.h" >&5
+echo $ECHO_N "checking for readline/readline.h... $ECHO_C" >&6
+if test "${ac_cv_header_readline_readline_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_readline_readline_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_readline_readline_h" >&5
+echo "${ECHO_T}$ac_cv_header_readline_readline_h" >&6
+
+fi
+if test $ac_cv_header_readline_readline_h = yes; then
+ echo "$as_me:$LINENO: checking for readline in -lreadline" >&5
+echo $ECHO_N "checking for readline in -lreadline... $ECHO_C" >&6
+if test "${ac_cv_lib_readline_readline+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lreadline $tcap $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 readline ();
+int
+main ()
+{
+readline ();
+ ;
+ 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_readline_readline=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_readline_readline=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_readline_readline" >&5
+echo "${ECHO_T}$ac_cv_lib_readline_readline" >&6
+if test $ac_cv_lib_readline_readline = yes; then
+
+ RDL_LIBS="-lreadline $RDL_LIBS $tcap"
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBREADLINE
+_ACEOF
+
+fi
+
+fi
+
+
+ if test -n "$RDL_DIR" -a -n "$RDL_LIBS"; then
+ CPPFLAGS="$CPPFLAGS -I${RDL_DIR}/include"
+ RDL_LIBS="-L${RDL_DIR}/lib $RDL_LIBS"
+ else
+ CPPFLAGS=${_cppflags}
+ fi
+ LDFLAGS=${_ldflags}
+fi
+
+
+# Check whether --with-output or --without-output was given.
+if test "${with_output+set}" = set; then
+ withval="$with_output"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_output" = ""
+then
+ with_output=no
+fi
+if test "$with_output" = "no" ; then
+ echo Disabling serialization/saving support
+ WITH_OUTPUT=0
+else
+ WITH_OUTPUT=1
+fi
+
+
+
+# Check whether --with-tree or --without-tree was given.
+if test "${with_tree+set}" = set; then
+ withval="$with_tree"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_tree" = ""
+then
+ with_tree=no
+fi
+if test "$with_tree" = "no" ; then
+ echo Disabling DOM like tree manipulation APIs
+ WITH_TREE=0
+else
+ WITH_TREE=1
+fi
+
+
+
+# Check whether --with-ftp or --without-ftp was given.
+if test "${with_ftp+set}" = set; then
+ withval="$with_ftp"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_ftp" = ""
+then
+ with_ftp=no
+fi
+if test "$with_ftp" = "no" ; then
+ echo Disabling FTP support
+ WITH_FTP=0
+ FTP_OBJ=
+else
+ WITH_FTP=1
+ FTP_OBJ=nanoftp.o
+fi
+
+
+
+
+# Check whether --with-http or --without-http was given.
+if test "${with_http+set}" = set; then
+ withval="$with_http"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_http" = ""
+then
+ with_http=no
+fi
+if test "$with_http" = "no" ; then
+ echo Disabling HTTP support
+ WITH_HTTP=0
+ HTTP_OBJ=
+else
+ WITH_HTTP=1
+ HTTP_OBJ=nanohttp.o
+fi
+
+
+
+
+# Check whether --with-legacy or --without-legacy was given.
+if test "${with_legacy+set}" = set; then
+ withval="$with_legacy"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_legacy" = ""
+then
+ with_legacy=no
+fi
+if test "$with_legacy" = "no" ; then
+ echo Disabling deprecated APIs
+ WITH_LEGACY=0
+else
+ WITH_LEGACY=1
+fi
+
+
+
+# Check whether --with-reader or --without-reader was given.
+if test "${with_reader+set}" = set; then
+ withval="$with_reader"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_reader" = ""
+then
+ with_reader=no
+fi
+if test "$with_reader" = "no" ; then
+ echo Disabling the xmlReader parsing interface
+ WITH_READER=0
+ READER_TEST=
+else
+ WITH_READER=1
+ READER_TEST=Readertests
+fi
+
+
+
+
+# Check whether --with-pattern or --without-pattern was given.
+if test "${with_pattern+set}" = set; then
+ withval="$with_pattern"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_pattern" = ""
+then
+ with_pattern=no
+fi
+if test "$with_pattern" = "no" ; then
+ echo Disabling the xmlPattern parsing interface
+ WITH_PATTERN=0
+ PATTERN_TEST=
+else
+ WITH_PATTERN=1
+ PATTERN_TEST=Patterntests
+fi
+
+
+
+
+# Check whether --with-writer or --without-writer was given.
+if test "${with_writer+set}" = set; then
+ withval="$with_writer"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_writer" = ""
+then
+ with_writer=no
+fi
+if test "$with_writer" = "no" ; then
+ echo Disabling the xmlWriter saving interface
+ WITH_WRITER=0
+# WRITER_TEST=
+else
+ WITH_WRITER=1
+# WRITER_TEST=Writertests
+fi
+
+#AC_SUBST(WRITER_TEST)
+
+
+# Check whether --with-sax1 or --without-sax1 was given.
+if test "${with_sax1+set}" = set; then
+ withval="$with_sax1"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_sax1" = ""
+then
+ with_sax1=no
+fi
+if test "$with_sax1" = "no" ; then
+ echo Disabling the older SAX1 interface
+ WITH_SAX1=0
+ TEST_SAX=
+else
+ WITH_SAX1=1
+ TEST_SAX=SAXtests
+fi
+
+
+
+
+# Check whether --with-push or --without-push was given.
+if test "${with_push+set}" = set; then
+ withval="$with_push"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_push" = ""
+then
+ with_push=no
+fi
+if test "$with_push" = "no" ; then
+ echo Disabling the PUSH parser interfaces
+ WITH_PUSH=0
+ TEST_PUSH=
+else
+ WITH_PUSH=1
+ TEST_PUSH="XMLPushtests"
+fi
+
+
+
+
+# Check whether --with-html or --without-html was given.
+if test "${with_html+set}" = set; then
+ withval="$with_html"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_html" = ""
+then
+ with_html=no
+fi
+if test "$with_html" = "no" ; then
+ echo Disabling HTML support
+ WITH_HTML=0
+ HTML_OBJ=
+ TEST_HTML=
+else
+ WITH_HTML=1
+ HTML_OBJ="HTMLparser.o HTMLtree.o"
+ TEST_HTML=HTMLtests
+ if test "$with_push" != "no" ; then
+ TEST_PHTML=HTMLPushtests
+ else
+ TEST_PHTML=
+ fi
+fi
+
+
+
+
+
+
+# Check whether --with-valid or --without-valid was given.
+if test "${with_valid+set}" = set; then
+ withval="$with_valid"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_valid" = ""
+then
+ with_valid=no
+fi
+if test "$with_valid" = "no" ; then
+ echo Disabling DTD validation support
+ WITH_VALID=0
+ TEST_VALID=
+ TEST_VTIME=
+else
+ WITH_VALID=1
+ TEST_VALID=Validtests
+ TEST_VTIME=VTimingtests
+fi
+
+
+
+
+
+# Check whether --with-catalog or --without-catalog was given.
+if test "${with_catalog+set}" = set; then
+ withval="$with_catalog"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_catalog" = ""
+then
+ with_catalog=no
+fi
+if test "$with_catalog" = "no" ; then
+ echo Disabling Catalog support
+ WITH_CATALOG=0
+ CATALOG_OBJ=
+ TEST_CATALOG=
+else
+ WITH_CATALOG=1
+ CATALOG_OBJ="catalog.o"
+ TEST_CATALOG=Catatests
+fi
+
+
+
+
+
+# Check whether --with-docbook or --without-docbook was given.
+if test "${with_docbook+set}" = set; then
+ withval="$with_docbook"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_docbook" = ""
+then
+ with_docbook=no
+fi
+if test "$with_docbook" = "no" ; then
+ echo Disabling Docbook support
+ WITH_DOCB=0
+ DOCB_OBJ=
+else
+ WITH_DOCB=1
+ DOCB_OBJ="DOCBparser.o"
+fi
+
+
+
+
+
+# Check whether --with-xpath or --without-xpath was given.
+if test "${with_xpath+set}" = set; then
+ withval="$with_xpath"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_xpath" = ""
+then
+ with_xpath=no
+fi
+if test "$with_xpath" = "no" ; then
+ echo Disabling XPATH support
+ with_xptr="no"
+ with_c14n="no"
+ with_xinclude="no"
+ WITH_XPATH=0
+ XPATH_OBJ=
+ TEST_XPATH=
+else
+ WITH_XPATH=1
+ XPATH_OBJ=xpath.o
+ TEST_XPATH=XPathtests
+fi
+
+
+
+
+
+# Check whether --with-xptr or --without-xptr was given.
+if test "${with_xptr+set}" = set; then
+ withval="$with_xptr"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_xptr" = ""
+then
+ with_xptr=no
+fi
+if test "$with_xptr" = "no" ; then
+ echo Disabling XPointer support
+ WITH_XPTR=0
+ XPTR_OBJ=
+ TEST_XPTR=
+else
+ WITH_XPTR=1
+ XPTR_OBJ=xpointer.o
+ TEST_XPTR=XPtrtests
+fi
+
+
+
+
+
+# Check whether --with-c14n or --without-c14n was given.
+if test "${with_c14n+set}" = set; then
+ withval="$with_c14n"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_c14n" = ""
+then
+ with_c14n=no
+fi
+if test "$with_c14n" = "no" ; then
+ echo Disabling C14N support
+ WITH_C14N=0
+ C14N_OBJ=
+ TEST_C14N=
+else
+ WITH_C14N=1
+ C14N_OBJ="c14n.c"
+ TEST_C14N=C14Ntests
+fi
+
+
+
+
+
+# Check whether --with-xinclude or --without-xinclude was given.
+if test "${with_xinclude+set}" = set; then
+ withval="$with_xinclude"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_xinclude" = ""
+then
+ with_xinclude=no
+fi
+if test "$with_xinclude" = "no" ; then
+ echo Disabling XInclude support
+ WITH_XINCLUDE=0
+ XINCLUDE_OBJ=
+ with_xinclude="no"
+ TEST_XINCLUDE=
+else
+ WITH_XINCLUDE=1
+ XINCLUDE_OBJ=xinclude.o
+ TEST_XINCLUDE=XIncludetests
+fi
+
+
+
+
+WITH_ICONV=0
+
+# Check whether --with-iconv or --without-iconv was given.
+if test "${with_iconv+set}" = set; then
+ withval="$with_iconv"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_iconv" = ""
+then
+ with_iconv=no
+fi
+if test "$with_iconv" = "no" ; then
+ echo Disabling ICONV support
+else
+ if test "$with_iconv" != "yes" -a "$with_iconv" != "" ; then
+ CPPFLAGS="${CPPFLAGS} -I$with_iconv/include"
+ # Export this since our headers include iconv.h
+ XML_INCLUDEDIR="${XML_INCLUDEDIR} -I$with_iconv/include"
+ ICONV_LIBS="-L$with_iconv/lib"
+ fi
+
+ if test "${ac_cv_header_iconv_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for iconv.h" >&5
+echo $ECHO_N "checking for iconv.h... $ECHO_C" >&6
+if test "${ac_cv_header_iconv_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_iconv_h" >&5
+echo "${ECHO_T}$ac_cv_header_iconv_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking iconv.h usability" >&5
+echo $ECHO_N "checking iconv.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <iconv.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 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_objext'
+ { (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_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking iconv.h presence" >&5
+echo $ECHO_N "checking iconv.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <iconv.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: iconv.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: iconv.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: iconv.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: iconv.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: iconv.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: iconv.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: iconv.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: iconv.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: iconv.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: iconv.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: iconv.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for iconv.h" >&5
+echo $ECHO_N "checking for iconv.h... $ECHO_C" >&6
+if test "${ac_cv_header_iconv_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_iconv_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_iconv_h" >&5
+echo "${ECHO_T}$ac_cv_header_iconv_h" >&6
+
+fi
+if test $ac_cv_header_iconv_h = yes; then
+ echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+
+iconv_t cd = iconv_open ("","");
+iconv (cd, NULL, NULL, NULL, NULL);
+ ;
+ 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
+
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ WITH_ICONV=1
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ echo "$as_me:$LINENO: checking for iconv in -liconv" >&5
+echo $ECHO_N "checking for iconv in -liconv... $ECHO_C" >&6
+
+ _ldflags="${LDFLAGS}"
+ _libs="${LIBS}"
+ LDFLAGS="${LDFLAGS} ${ICONV_LIBS}"
+ LIBS="${LIBS} -liconv"
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+
+iconv_t cd = iconv_open ("","");
+iconv (cd, NULL, NULL, NULL, NULL);
+ ;
+ 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
+
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ WITH_ICONV=1
+ ICONV_LIBS="${ICONV_LIBS} -liconv"
+ LIBS="${_libs}"
+ LDFLAGS="${_ldflags}"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ LIBS="${_libs}"
+ LDFLAGS="${_ldflags}"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+fi
+case "$host" in
+ *mingw*) M_LIBS=""
+ ;;
+ *) M_LIBS="-lm"
+ ;;
+esac
+XML_LIBS="-lxml2 $Z_LIBS $THREAD_LIBS $ICONV_LIBS $M_LIBS $LIBS"
+XML_LIBTOOLLIBS="libxml2.la"
+
+
+WITH_ISO8859X=1
+
+# Check whether --with-iso8859x or --without-iso8859x was given.
+if test "${with_iso8859x+set}" = set; then
+ withval="$with_iso8859x"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_iso8859x" = ""
+then
+ with_iso8859x=no
+fi
+if test "$WITH_ICONV" != "1" ; then
+if test "$with_iso8859x" = "no" ; then
+ echo Disabling ISO8859X support
+ WITH_ISO8859X=0
+fi
+fi
+
+
+
+# Check whether --with-schemas or --without-schemas was given.
+if test "${with_schemas+set}" = set; then
+ withval="$with_schemas"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_schemas" = ""
+then
+ with_schemas=no
+fi
+if test "$with_schemas" = "no" ; then
+ echo "Disabled Schemas/Relax-NG support"
+ WITH_SCHEMAS=0
+ TEST_SCHEMAS=
+else
+ echo "Enabled Schemas/Relax-NG support"
+ WITH_SCHEMAS=1
+ TEST_SCHEMAS="Schemastests Relaxtests"
+ if test "$PYTHON_INCLUDES" != "" ; then
+ PYTHON_TESTS="$PYTHON_TESTS RelaxNGPythonTests SchemasPythonTests"
+ fi
+ with_regexps=yes
+fi
+
+
+
+
+# Check whether --with-regexps or --without-regexps was given.
+if test "${with_regexps+set}" = set; then
+ withval="$with_regexps"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_regexps" = ""
+then
+ with_regexps=no
+fi
+if test "$with_regexps" = "no" ; then
+ echo Disabling Regexps support
+ WITH_REGEXPS=0
+ TEST_REGEXPS=
+else
+ WITH_REGEXPS=1
+ TEST_REGEXPS="Regexptests Automatatests"
+fi
+
+
+
+
+# Check whether --with-debug or --without-debug was given.
+if test "${with_debug+set}" = set; then
+ withval="$with_debug"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_debug" = ""
+then
+ with_debug=no
+fi
+if test "$with_debug" = "no" ; then
+ echo Disabling DEBUG support
+ WITH_DEBUG=0
+ DEBUG_OBJ=
+ TEST_DEBUG=
+else
+ WITH_DEBUG=1
+ DEBUG_OBJ=debugXML.o
+ TEST_DEBUG=Scripttests
+fi
+
+
+
+
+
+# Check whether --with-mem_debug or --without-mem_debug was given.
+if test "${with_mem_debug+set}" = set; then
+ withval="$with_mem_debug"
+
+fi;
+if test "$with_minimum" = "yes" -a "$with_mem_debug" = ""
+then
+ with_mem_debug=no
+fi
+if test "$with_mem_debug" = "yes" ; then
+ echo Enabling memory debug support
+ WITH_MEM_DEBUG=1
+else
+ WITH_MEM_DEBUG=0
+fi
+
+
+
+WIN32_EXTRA_LIBADD=
+WIN32_EXTRA_LDFLAGS=
+case "$host" in
+ *-*-mingw*)
+ CPPFLAGS="$CPPFLAGS -DWIN32"
+ WIN32_EXTRA_LIBADD="-lws2_32"
+ WIN32_EXTRA_LDFLAGS="-no-undefined"
+
+cat >>confdefs.h <<\_ACEOF
+#define _WINSOCKAPI_ 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define snprintf _snprintf
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define vsnprintf _vsnprintf
+_ACEOF
+
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+RELDATE=`date +'%a %b %e %Y'`
+
+
+
+rm -f COPYING.LIB COPYING
+ln -s Copyright COPYING
+
+# keep on one line for cygwin c.f. #130896
+ ac_config_files="$ac_config_files libxml2.spec:libxml.spec.in Makefile include/Makefile include/libxml/Makefile doc/Makefile doc/examples/Makefile example/Makefile python/Makefile python/tests/Makefile include/libxml/xmlversion.h xml2-config libxml-2.0.pc libxml-2.0-uninstalled.pc python/setup.py"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${WITH_PYTHON_TRUE}" && test -z "${WITH_PYTHON_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"WITH_PYTHON\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"WITH_PYTHON\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${WITH_TRIO_SOURCES_TRUE}" && test -z "${WITH_TRIO_SOURCES_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"WITH_TRIO_SOURCES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"WITH_TRIO_SOURCES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ -*)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "libxml2.spec" ) CONFIG_FILES="$CONFIG_FILES libxml2.spec:libxml.spec.in" ;;
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+ "include/libxml/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/libxml/Makefile" ;;
+ "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "doc/examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/examples/Makefile" ;;
+ "example/Makefile" ) CONFIG_FILES="$CONFIG_FILES example/Makefile" ;;
+ "python/Makefile" ) CONFIG_FILES="$CONFIG_FILES python/Makefile" ;;
+ "python/tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES python/tests/Makefile" ;;
+ "include/libxml/xmlversion.h" ) CONFIG_FILES="$CONFIG_FILES include/libxml/xmlversion.h" ;;
+ "xml2-config" ) CONFIG_FILES="$CONFIG_FILES xml2-config" ;;
+ "libxml-2.0.pc" ) CONFIG_FILES="$CONFIG_FILES libxml-2.0.pc" ;;
+ "libxml-2.0-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES libxml-2.0-uninstalled.pc" ;;
+ "python/setup.py" ) CONFIG_FILES="$CONFIG_FILES python/setup.py" ;;
+ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@LIBXML_MAJOR_VERSION@,$LIBXML_MAJOR_VERSION,;t t
+s,@LIBXML_MINOR_VERSION@,$LIBXML_MINOR_VERSION,;t t
+s,@LIBXML_MICRO_VERSION@,$LIBXML_MICRO_VERSION,;t t
+s,@LIBXML_VERSION@,$LIBXML_VERSION,;t t
+s,@LIBXML_VERSION_INFO@,$LIBXML_VERSION_INFO,;t t
+s,@LIBXML_VERSION_NUMBER@,$LIBXML_VERSION_NUMBER,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CYGPATH_W@,$CYGPATH_W,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@AMTAR@,$AMTAR,;t t
+s,@install_sh@,$install_sh,;t t
+s,@STRIP@,$STRIP,;t t
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s,@mkdir_p@,$mkdir_p,;t t
+s,@AWK@,$AWK,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@am__leading_dot@,$am__leading_dot,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@DEPDIR@,$DEPDIR,;t t
+s,@am__include@,$am__include,;t t
+s,@am__quote@,$am__quote,;t t
+s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s,@CCDEPMODE@,$CCDEPMODE,;t t
+s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s,@CPP@,$CPP,;t t
+s,@RM@,$RM,;t t
+s,@MV@,$MV,;t t
+s,@TAR@,$TAR,;t t
+s,@EGREP@,$EGREP,;t t
+s,@U@,$U,;t t
+s,@ANSI2KNR@,$ANSI2KNR,;t t
+s,@LN_S@,$LN_S,;t t
+s,@ECHO@,$ECHO,;t t
+s,@AR@,$AR,;t t
+s,@ac_ct_AR@,$ac_ct_AR,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@DLLTOOL@,$DLLTOOL,;t t
+s,@ac_ct_DLLTOOL@,$ac_ct_DLLTOOL,;t t
+s,@AS@,$AS,;t t
+s,@ac_ct_AS@,$ac_ct_AS,;t t
+s,@OBJDUMP@,$OBJDUMP,;t t
+s,@ac_ct_OBJDUMP@,$ac_ct_OBJDUMP,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@CXXDEPMODE@,$CXXDEPMODE,;t t
+s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
+s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
+s,@CXXCPP@,$CXXCPP,;t t
+s,@F77@,$F77,;t t
+s,@FFLAGS@,$FFLAGS,;t t
+s,@ac_ct_F77@,$ac_ct_F77,;t t
+s,@LIBTOOL@,$LIBTOOL,;t t
+s,@Z_CFLAGS@,$Z_CFLAGS,;t t
+s,@Z_LIBS@,$Z_LIBS,;t t
+s,@HTML_DIR@,$HTML_DIR,;t t
+s,@PYTHON@,$PYTHON,;t t
+s,@WITH_PYTHON_TRUE@,$WITH_PYTHON_TRUE,;t t
+s,@WITH_PYTHON_FALSE@,$WITH_PYTHON_FALSE,;t t
+s,@pythondir@,$pythondir,;t t
+s,@PYTHON_SUBDIR@,$PYTHON_SUBDIR,;t t
+s,@STATIC_BINARIES@,$STATIC_BINARIES,;t t
+s,@WITH_TRIO_SOURCES_TRUE@,$WITH_TRIO_SOURCES_TRUE,;t t
+s,@WITH_TRIO_SOURCES_FALSE@,$WITH_TRIO_SOURCES_FALSE,;t t
+s,@WITH_TRIO@,$WITH_TRIO,;t t
+s,@THREAD_LIBS@,$THREAD_LIBS,;t t
+s,@WITH_THREADS@,$WITH_THREADS,;t t
+s,@THREAD_CFLAGS@,$THREAD_CFLAGS,;t t
+s,@TEST_THREADS@,$TEST_THREADS,;t t
+s,@THREADS_W32@,$THREADS_W32,;t t
+s,@WITH_OUTPUT@,$WITH_OUTPUT,;t t
+s,@WITH_TREE@,$WITH_TREE,;t t
+s,@WITH_FTP@,$WITH_FTP,;t t
+s,@FTP_OBJ@,$FTP_OBJ,;t t
+s,@WITH_HTTP@,$WITH_HTTP,;t t
+s,@HTTP_OBJ@,$HTTP_OBJ,;t t
+s,@WITH_LEGACY@,$WITH_LEGACY,;t t
+s,@WITH_READER@,$WITH_READER,;t t
+s,@READER_TEST@,$READER_TEST,;t t
+s,@WITH_PATTERN@,$WITH_PATTERN,;t t
+s,@PATTERN_TEST@,$PATTERN_TEST,;t t
+s,@WITH_WRITER@,$WITH_WRITER,;t t
+s,@WITH_SAX1@,$WITH_SAX1,;t t
+s,@TEST_SAX@,$TEST_SAX,;t t
+s,@WITH_PUSH@,$WITH_PUSH,;t t
+s,@TEST_PUSH@,$TEST_PUSH,;t t
+s,@WITH_HTML@,$WITH_HTML,;t t
+s,@HTML_OBJ@,$HTML_OBJ,;t t
+s,@TEST_HTML@,$TEST_HTML,;t t
+s,@TEST_PHTML@,$TEST_PHTML,;t t
+s,@WITH_VALID@,$WITH_VALID,;t t
+s,@TEST_VALID@,$TEST_VALID,;t t
+s,@TEST_VTIME@,$TEST_VTIME,;t t
+s,@WITH_CATALOG@,$WITH_CATALOG,;t t
+s,@CATALOG_OBJ@,$CATALOG_OBJ,;t t
+s,@TEST_CATALOG@,$TEST_CATALOG,;t t
+s,@WITH_DOCB@,$WITH_DOCB,;t t
+s,@DOCB_OBJ@,$DOCB_OBJ,;t t
+s,@WITH_XPATH@,$WITH_XPATH,;t t
+s,@XPATH_OBJ@,$XPATH_OBJ,;t t
+s,@TEST_XPATH@,$TEST_XPATH,;t t
+s,@WITH_XPTR@,$WITH_XPTR,;t t
+s,@XPTR_OBJ@,$XPTR_OBJ,;t t
+s,@TEST_XPTR@,$TEST_XPTR,;t t
+s,@WITH_C14N@,$WITH_C14N,;t t
+s,@C14N_OBJ@,$C14N_OBJ,;t t
+s,@TEST_C14N@,$TEST_C14N,;t t
+s,@WITH_XINCLUDE@,$WITH_XINCLUDE,;t t
+s,@XINCLUDE_OBJ@,$XINCLUDE_OBJ,;t t
+s,@TEST_XINCLUDE@,$TEST_XINCLUDE,;t t
+s,@WITH_ICONV@,$WITH_ICONV,;t t
+s,@WITH_ISO8859X@,$WITH_ISO8859X,;t t
+s,@WITH_SCHEMAS@,$WITH_SCHEMAS,;t t
+s,@TEST_SCHEMAS@,$TEST_SCHEMAS,;t t
+s,@WITH_REGEXPS@,$WITH_REGEXPS,;t t
+s,@TEST_REGEXPS@,$TEST_REGEXPS,;t t
+s,@WITH_DEBUG@,$WITH_DEBUG,;t t
+s,@DEBUG_OBJ@,$DEBUG_OBJ,;t t
+s,@TEST_DEBUG@,$TEST_DEBUG,;t t
+s,@WITH_MEM_DEBUG@,$WITH_MEM_DEBUG,;t t
+s,@WIN32_EXTRA_LIBADD@,$WIN32_EXTRA_LIBADD,;t t
+s,@WIN32_EXTRA_LDFLAGS@,$WIN32_EXTRA_LDFLAGS,;t t
+s,@XML_CFLAGS@,$XML_CFLAGS,;t t
+s,@XML_LIBDIR@,$XML_LIBDIR,;t t
+s,@XML_LIBS@,$XML_LIBS,;t t
+s,@XML_LIBTOOLLIBS@,$XML_LIBTOOLLIBS,;t t
+s,@ICONV_LIBS@,$ICONV_LIBS,;t t
+s,@XML_INCLUDEDIR@,$XML_INCLUDEDIR,;t t
+s,@HAVE_ISNAN@,$HAVE_ISNAN,;t t
+s,@HAVE_ISINF@,$HAVE_ISINF,;t t
+s,@PYTHON_VERSION@,$PYTHON_VERSION,;t t
+s,@PYTHON_INCLUDES@,$PYTHON_INCLUDES,;t t
+s,@PYTHON_SITE_PACKAGES@,$PYTHON_SITE_PACKAGES,;t t
+s,@M_LIBS@,$M_LIBS,;t t
+s,@RDL_LIBS@,$RDL_LIBS,;t t
+s,@RELDATE@,$RELDATE,;t t
+s,@PYTHON_TESTS@,$PYTHON_TESTS,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ # Do quote $f, to prevent DOS paths from being IFS'd.
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $ac_file | $ac_file:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X$ac_file : 'X\(//\)[^/]' \| \
+ X$ac_file : 'X\(//\)$' \| \
+ X$ac_file : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_dest" : 'X\(//\)[^/]' \| \
+ X"$ac_dest" : 'X\(//\)$' \| \
+ X"$ac_dest" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+ case $ac_dest in
+ depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+ # Extract the definition of DEP_FILES from the Makefile without
+ # running `make'.
+ DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n -e '/^U = / s///p' < "$mf"`
+ test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+ # We invoke sed twice because it is the simplest approach to
+ # changing $(DEPDIR) to its actual value in the expansion.
+ for file in `sed -n -e '
+ /^DEP_FILES = .*\\\\$/ {
+ s/^DEP_FILES = //
+ :loop
+ s/\\\\$//
+ p
+ n
+ /\\\\$/ b loop
+ p
+ }
+ /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p $dirpart/$fdir
+ else
+ as_dir=$dirpart/$fdir
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+ ;;
+ esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+chmod +x xml2-config python/setup.py
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..391dda7
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,1064 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_PREREQ(2.2)
+AC_INIT(entities.c)
+AM_CONFIG_HEADER(config.h)
+AC_CANONICAL_HOST
+
+LIBXML_MAJOR_VERSION=2
+LIBXML_MINOR_VERSION=6
+LIBXML_MICRO_VERSION=8
+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
+
+LIBXML_VERSION_NUMBER=`expr $LIBXML_MAJOR_VERSION \* 10000 + $LIBXML_MINOR_VERSION \* 100 + $LIBXML_MICRO_VERSION`
+
+AC_SUBST(LIBXML_MAJOR_VERSION)
+AC_SUBST(LIBXML_MINOR_VERSION)
+AC_SUBST(LIBXML_MICRO_VERSION)
+AC_SUBST(LIBXML_VERSION)
+AC_SUBST(LIBXML_VERSION_INFO)
+AC_SUBST(LIBXML_VERSION_NUMBER)
+
+VERSION=${LIBXML_VERSION}
+
+AM_INIT_AUTOMAKE(libxml2, $VERSION)
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_CPP
+AC_PATH_PROG(RM, rm, /bin/rm)
+AC_PATH_PROG(MV, mv, /bin/mv)
+AC_PATH_PROG(TAR, tar, /bin/tar)
+
+dnl Make sure we have an ANSI compiler
+AM_C_PROTOTYPES
+test "x$U" != "x" && AC_MSG_ERROR(Compiler not ANSI compliant)
+
+AC_LIBTOOL_WIN32_DLL
+AM_PROG_LIBTOOL
+
+# AM_MAINTAINER_MODE
+
+dnl
+dnl option to build a minimal libxml2 library
+dnl
+AC_ARG_WITH(minimum, [ --with-minimum build a minimally sized library (off)])
+if test "$with_minimum" = "yes"
+then
+ echo "Configuring for a minimal library"
+fi
+
+dnl Checks for zlib library.
+_cppflags="${CPPFLAGS}"
+_ldflags="${LDFLAGS}"
+
+
+AC_ARG_WITH(zlib,
+[ --with-zlib[[=DIR]] use libz in DIR],[
+ if test "$withval" != "no" -a "$withval" != "yes"; then
+ Z_DIR=$withval
+ CPPFLAGS="${CPPFLAGS} -I$withval/include"
+ LDFLAGS="${LDFLAGS} -L$withval/lib"
+ fi
+])
+if test "$with_minimum" = "yes" -a "$with_zlib" = ""
+then
+ with_zlib=no
+fi
+if test "$with_zlib" = "no"; then
+ echo "Disabling compression support"
+else
+ AC_CHECK_HEADERS(zlib.h,
+ AC_CHECK_LIB(z, gzread,[
+ AC_DEFINE([HAVE_LIBZ], [], [Have compression library])
+ if test "x${Z_DIR}" != "x"; then
+ Z_CFLAGS="-I${Z_DIR}/include"
+ Z_LIBS="-L${Z_DIR}/lib -lz"
+ [case ${host} in
+ *-*-solaris*)
+ Z_LIBS="-L${Z_DIR}/lib -R${Z_DIR}/lib -lz"
+ ;;
+ esac]
+ else
+ Z_LIBS="-lz"
+ fi]))
+fi
+
+AC_SUBST(Z_CFLAGS)
+AC_SUBST(Z_LIBS)
+
+CPPFLAGS=${_cppflags}
+LDFLAGS=${_ldflags}
+
+dnl Checks for header files.
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_CHECK_HEADERS([fcntl.h])
+AC_CHECK_HEADERS([unistd.h])
+AC_CHECK_HEADERS([ctype.h])
+AC_CHECK_HEADERS([dirent.h])
+AC_CHECK_HEADERS([errno.h])
+AC_CHECK_HEADERS([malloc.h])
+AC_CHECK_HEADERS([stdarg.h])
+AC_CHECK_HEADERS([sys/stat.h])
+AC_CHECK_HEADERS([sys/types.h])
+AC_CHECK_HEADERS([time.h])
+AC_CHECK_HEADERS([ansidecl.h])
+AC_CHECK_HEADERS([ieeefp.h])
+AC_CHECK_HEADERS([nan.h])
+AC_CHECK_HEADERS([math.h])
+AC_CHECK_HEADERS([limits.h])
+AC_CHECK_HEADERS([fp_class.h])
+AC_CHECK_HEADERS([float.h])
+AC_CHECK_HEADERS([stdlib.h])
+AC_CHECK_HEADERS([sys/socket.h], [], [],
+[#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+])
+AC_CHECK_HEADERS([netinet/in.h], [], [],
+[#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+])
+AC_CHECK_HEADERS([arpa/inet.h], [], [],
+[#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+#if HAVE_ARPA_INET_H
+# include <arpa/inet.h>
+# endif
+])
+AC_CHECK_HEADERS([netdb.h])
+AC_CHECK_HEADERS([sys/time.h])
+AC_CHECK_HEADERS([sys/select.h])
+AC_CHECK_HEADERS([sys/mman.h])
+AC_CHECK_HEADERS([sys/timeb.h])
+AC_CHECK_HEADERS([signal.h])
+AC_CHECK_HEADERS([arpa/nameser.h], [], [],
+[#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+])
+AC_CHECK_HEADERS([resolv.h], [], [],
+[#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+# endif
+#if HAVE_NETINET_IN_H
+# include <netinet/in.h>
+# endif
+#if HAVE_ARPA_NAMESER_H
+# include <arpa/nameser.h>
+# endif
+])
+
+dnl Specific dir for HTML output ?
+AC_ARG_WITH(html-dir, AC_HELP_STRING([--with-html-dir=path],
+ [path to base html directory, default $datadir/doc/html]),
+ [HTML_DIR=$withval], [HTML_DIR='$(datadir)/doc'])
+
+AC_ARG_WITH(html-subdir, AC_HELP_STRING([--with-html-subdir=path],
+ [directory used under html-dir, default $PACKAGE-$VERSION/html]),
+ [test "x$withval" != "x" && HTML_DIR="$HTML_DIR/$withval"],
+ [HTML_DIR="$HTML_DIR/\$(PACKAGE)-\$(VERSION)/html"])
+
+AC_SUBST(HTML_DIR)
+
+dnl Checks for library functions.
+AC_FUNC_STRFTIME
+AC_CHECK_FUNCS(strdup strndup strerror)
+AC_CHECK_FUNCS(finite isnand fp_class class fpclass)
+AC_CHECK_FUNCS(strftime localtime gettimeofday ftime)
+AC_CHECK_FUNCS(stat _stat signal)
+
+dnl Checking the standard string functions availability
+AC_CHECK_FUNCS(printf sprintf fprintf snprintf vfprintf vsprintf vsnprintf sscanf,,
+ NEED_TRIO=1)
+
+dnl Checks for inet libraries:
+AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent))
+AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
+AC_CHECK_FUNC(connect, , AC_CHECK_LIB(inet, connect))
+
+dnl Determine what socket length (socklen_t) data type is
+AC_MSG_CHECKING([for type of socket length (socklen_t)])
+AC_TRY_COMPILE2([
+#include <stddef.h>
+#include <sys/types.h>
+#include <sys/socket.h>],[
+(void)getsockopt (1, 1, 1, NULL, (socklen_t *)NULL)],[
+ AC_MSG_RESULT(socklen_t *)
+ SOCKLEN_T=socklen_t],[
+ AC_TRY_COMPILE2([
+#include <stddef.h>
+#include <sys/types.h>
+#include <sys/socket.h>],[
+(void)getsockopt (1, 1, 1, NULL, (size_t *)NULL)],[
+ AC_MSG_RESULT(size_t *)
+ SOCKLEN_T=size_t],[
+ AC_TRY_COMPILE2([
+#include <stddef.h>
+#include <sys/types.h>
+#include <sys/socket.h>],[
+(void)getsockopt (1, 1, 1, NULL, (int *)NULL)],[
+ AC_MSG_RESULT(int *)
+ SOCKLEN_T=int],[
+ AC_MSG_WARN(could not determine)
+ SOCKLEN_T="unsigned int"])])])
+AC_DEFINE_UNQUOTED(SOCKLEN_T, $SOCKLEN_T, [Determine what socket length (socklen_t) data type is])
+
+dnl ***********************Checking for availability of IPv6*******************
+
+AC_MSG_CHECKING([whether to enable IPv6])
+AC_ARG_ENABLE(ipv6, [ --enable-ipv6=[yes/no] enables compilation of IPv6 code],, enable_ipv6=yes)
+if test "$with_minimum" = "yes"
+then
+ enable_ipv6=no
+fi
+if test $enable_ipv6 = yes; then
+ have_ipv6=no
+ AC_TRY_COMPILE([
+ #include <sys/socket.h>
+ #include <sys/types.h>], [
+ struct sockaddr_storage ss;
+ socket(AF_INET6, SOCK_STREAM, 0)
+ ],
+ have_ipv6=yes,
+ have_ipv6=no
+ )
+ AC_MSG_RESULT($have_ipv6)
+
+ if test $have_ipv6 = yes; then
+ AC_DEFINE([SUPPORT_IP6], [], [Support for IPv6])
+
+ have_getaddrinfo=no
+ AC_CHECK_FUNC(getaddrinfo, have_getaddrinfo=yes)
+ if test $have_getaddrinfo != yes; then
+ for lib in bsd socket inet; do
+ AC_CHECK_LIB($lib, getaddrinfo, [LIBS="$LIBS -l$lib";have_getaddrinfo=yes;break])
+ done
+ fi
+
+ if test $have_getaddrinfo = yes; then
+ AC_DEFINE([HAVE_GETADDRINFO], [], [Define if getaddrinfo is there])
+ fi
+ fi
+fi
+
+dnl ******************************End IPv6 checks******************************
+
+dnl Checks for isnan in libm if not in libc
+AC_CHECK_FUNC(isnan, AC_DEFINE([HAVE_ISNAN],[], [Define if isnan is there]) , AC_CHECK_LIB(m, isnan,
+ [AC_DEFINE([HAVE_ISNAN],[], [Define if isnan is there])]))
+
+AC_CHECK_FUNC(isinf, AC_DEFINE([HAVE_ISINF], [], [Define if isinf is there]) , AC_CHECK_LIB(m, isinf,
+ [AC_DEFINE([HAVE_ISINF], [], [Define if isinf is there])]))
+
+XML_LIBDIR='-L${libdir}'
+XML_INCLUDEDIR='-I${includedir}/libxml2'
+
+dnl
+dnl Extra flags
+dnl
+XML_CFLAGS=""
+RDL_LIBS=""
+
+AC_ARG_WITH(fexceptions,
+[ --with-fexceptions add GCC flag -fexceptions for C++ exceptions (off)])
+if test "$with_minimum" = "yes" -a "$with_fexceptions" = ""
+then
+ with_fexceptions=no
+fi
+dnl
+dnl Workaround for native compilers
+dnl HP : http://bugs.gnome.org/db/31/3163.html
+dnl DEC : Enable NaN/Inf
+dnl
+if test "${GCC}" != "yes" ; then
+ case "${host}" in
+ *-*-hpux* )
+ CFLAGS="${CFLAGS} -Wp,-H30000"
+ ;;
+ *-dec-osf* )
+ CFLAGS="${CFLAGS} -ieee"
+ ;;
+ alpha*-*-linux* )
+ CFLAGS="${CFLAGS} -ieee"
+ ;;
+ esac
+else
+ if test "$with_fexceptions" = "yes"
+ then
+ #
+ # Not activated by default because this inflates the code size
+ # Used to allow propagation of C++ exceptions through the library
+ #
+ CFLAGS="${CFLAGS} -fexceptions"
+ fi
+
+ CFLAGS="${CFLAGS} -Wall"
+ case "${host}" in
+ alpha*-*-linux* )
+ CFLAGS="${CFLAGS} -mieee"
+ ;;
+ alpha*-*-osf* )
+ CFLAGS="${CFLAGS} -mieee"
+ ;;
+ esac
+fi
+case ${host} in
+ *-*-solaris*)
+ XML_LIBDIR="${XML_LIBDIR} -R${libdir}"
+ ;;
+ hppa*-hp-mpeix)
+ NEED_TRIO=1
+ ;;
+esac
+
+
+dnl
+dnl check for python
+dnl
+
+PYTHON=
+PYTHON_VERSION=
+PYTHON_INCLUDES=
+PYTHON_SITE_PACKAGES=
+PYTHON_TESTS=
+pythondir=
+AC_ARG_WITH(python,
+[ --with-python[[=DIR]] build Python bindings if found])
+if test "$with_minimum" = "yes" -a "$with_python" = ""
+then
+ with_python=no
+fi
+if test "$with_python" != "no" ; then
+ if test -x "$with_python/bin/python"
+ then
+ echo Found python in $with_python/bin/python
+ PYTHON="$with_python/bin/python"
+ else
+ if test -x "$with_python"
+ then
+ echo Found python in $with_python
+ PYTHON="$with_python"
+ else
+ AC_PATH_PROG(PYTHON, python python2.3 python2.2 python2.1 python2.0 python1.6 python1.5)
+ fi
+ fi
+ if test "$PYTHON" != ""
+ then
+ PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
+ echo Found Python version $PYTHON_VERSION
+ fi
+ if test "$PYTHON_VERSION" != ""
+ then
+ if test -r $with_python/include/python$PYTHON_VERSION/Python.h -a \
+ -d $with_python/lib/python$PYTHON_VERSION/site-packages
+ then
+ PYTHON_INCLUDES=$with_python/include/python$PYTHON_VERSION
+ PYTHON_SITE_PACKAGES=$with_python/lib/python$PYTHON_VERSION/site-packages
+ else
+ if test -r $prefix/include/python$PYTHON_VERSION/Python.h
+ then
+ PYTHON_INCLUDES='$(prefix)/include/python$(PYTHON_VERSION)'
+ PYTHON_SITE_PACKAGES='$(libdir)/python$(PYTHON_VERSION)/site-packages'
+ else
+ if test -r /usr/include/python$PYTHON_VERSION/Python.h
+ then
+ PYTHON_INCLUDES=/usr/include/python$PYTHON_VERSION
+ PYTHON_SITE_PACKAGES='$(libdir)/python$(PYTHON_VERSION)/site-packages'
+ else
+ echo could not find python$PYTHON_VERSION/Python.h
+ fi
+ fi
+ if test ! -d "$PYTHON_SITE_PACKAGES"
+ then
+ PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib()"`
+ fi
+ fi
+ fi
+ if test "$with_python" != ""
+ then
+ pythondir='$(PYTHON_SITE_PACKAGES)'
+ else
+ pythondir='$(libdir)/python${PYTHON_VERSION}/site-packages'
+ fi
+fi
+AM_CONDITIONAL(WITH_PYTHON, test "$PYTHON_INCLUDES" != "")
+if test "$PYTHON_INCLUDES" != ""
+then
+ PYTHON_SUBDIR=python
+else
+ PYTHON_SUBDIR=
+fi
+AC_SUBST(pythondir)
+AC_SUBST(PYTHON_SUBDIR)
+
+dnl
+dnl Tester makes use of readline if present
+dnl
+_cppflags="${CPPFLAGS}"
+_ldflags="${LDFLAGS}"
+
+AC_ARG_WITH(readline,
+[ --with-readline=DIR use readline in DIR],[
+ if test "$withval" != "no" -a "$withval" != "yes"; then
+ RDL_DIR=$withval
+ CPPFLAGS="${CPPFLAGS} -I$withval/include"
+ LDFLAGS="${LDFLAGS} -L$withval/lib"
+ fi
+])
+if test "$with_minimum" = "yes" -a "$with_readline" = ""
+then
+ with_readline=no
+fi
+
+dnl
+dnl specific tests to setup DV's devel environment with debug etc ...
+dnl (-Wunreachable-code)
+dnl
+if [[ "${LOGNAME}" = "veillard" -a "`pwd`" = "/u/veillard/XML" ]] || \
+ [[ "${LOGNAME}" = "bill" -a "`pwd`" = "/home/bill/gnomecvs/xmltest" ]] || \
+ [[ "${LOGNAME}" = "bill" -a "`pwd`" = "/home/bill/gnomecvs/xmlnew" ]]
+ then
+ if test "$with_minimum" != "yes"
+ then
+ if test "${with_mem_debug}" = "" ; then
+ with_mem_debug="yes"
+ fi
+ if test "${with_docbook}" = "" ; then
+ with_docbook="yes"
+ fi
+ fi
+ CFLAGS="-g -O -pedantic -W -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 "
+ STATIC_BINARIES="-static"
+dnl -Wcast-qual -ansi
+else
+ STATIC_BINARIES=
+fi
+AC_SUBST(STATIC_BINARIES)
+
+dnl
+dnl Check for trio string functions
+dnl
+
+if test "${NEED_TRIO}" = "1" ; then
+ echo Adding trio library for string functions
+ WITH_TRIO=1
+else
+ WITH_TRIO=0
+fi
+AM_CONDITIONAL(WITH_TRIO_SOURCES, test "${NEED_TRIO}" = "1")
+AC_SUBST(WITH_TRIO)
+
+dnl
+dnl Allow to enable/disable various pieces
+dnl
+
+THREAD_LIBS=""
+WITH_THREADS=0
+THREAD_CFLAGS=""
+TEST_THREADS=""
+THREADS_W32=""
+
+AC_ARG_WITH(threads,
+[ --with-threads add multithread support(on)])
+if test "$with_minimum" = "yes" -a "$with_threads" = ""
+then
+ with_threads=no
+fi
+if test "$with_threads" = "no" ; then
+ echo Disabling multithreaded support
+else
+ echo Enabling multithreaded support
+
+ AC_CHECK_HEADER(pthread.h,
+ AC_CHECK_LIB(pthread, pthread_join,[
+ THREAD_LIBS="-lpthread"
+ AC_DEFINE([HAVE_LIBPTHREAD], [], [Define if pthread library is there (-lpthread)])
+ AC_DEFINE([HAVE_PTHREAD_H], [], [Define if <pthread.h> is there])
+ WITH_THREADS="1"]))
+ case $host_os in
+ *mingw32*) WITH_THREADS="1"
+ THREADS_W32="Win32"
+ THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_WIN32_THREADS"
+ ;;
+ esac
+ if test "$WITH_THREADS" = "1" ; then
+ THREAD_CFLAGS="$THREAD_CFLAGS -D_REENTRANT"
+ TEST_THREADS="Threadtests"
+ fi
+fi
+AC_ARG_WITH(thread-alloc,
+[ --with-thread-alloc add per-thread memory(off)])
+if test "$with_minimum" = "yes" -a "$with_thread_alloc" = ""
+then
+ with_thread_alloc=no
+fi
+if test "$with_threads_alloc" = "yes" -a "$WITH_THREADS" = "1" ; then
+ THREAD_CFLAGS="$THREAD_CFLAGS -DLIBXML_THREAD_ALLOC_ENABLED"
+fi
+
+AC_SUBST(THREAD_LIBS)
+AC_SUBST(WITH_THREADS)
+AC_SUBST(THREAD_CFLAGS)
+AC_SUBST(TEST_THREADS)
+AC_SUBST(THREADS_W32)
+
+AC_ARG_WITH(history,
+[ --with-history add history support to xmllint shell(off)])
+if test "$with_minimum" = "yes" -a "$with_history" = ""
+then
+ with_history=no
+fi
+if test "$with_history" = "yes" ; then
+ echo Enabling xmllint shell history
+ dnl check for terminal library. this is a very cool solution
+ dnl from octave's configure.in
+ unset tcap
+ for termlib in ncurses curses termcap terminfo termlib; do
+ AC_CHECK_LIB(${termlib}, tputs, [tcap="-l$termlib"])
+ test -n "$tcap" && break
+ done
+
+ AC_CHECK_HEADER(readline/history.h,
+ AC_CHECK_LIB(history, append_history,[
+ RDL_LIBS="-lhistory"
+ AC_DEFINE([HAVE_LIBHISTORY], [], [Define if history library is there (-lhistory)])]))
+ AC_CHECK_HEADER(readline/readline.h,
+ AC_CHECK_LIB(readline, readline,[
+ RDL_LIBS="-lreadline $RDL_LIBS $tcap"
+ AC_DEFINE([HAVE_LIBREADLINE], [], [Define if readline library is there (-lreadline)])], , $tcap))
+ if test -n "$RDL_DIR" -a -n "$RDL_LIBS"; then
+ CPPFLAGS="$CPPFLAGS -I${RDL_DIR}/include"
+ RDL_LIBS="-L${RDL_DIR}/lib $RDL_LIBS"
+ else
+ CPPFLAGS=${_cppflags}
+ fi
+ LDFLAGS=${_ldflags}
+fi
+
+AC_ARG_WITH(output,
+[ --with-output add the serialization support (on)])
+if test "$with_minimum" = "yes" -a "$with_output" = ""
+then
+ with_output=no
+fi
+if test "$with_output" = "no" ; then
+ echo Disabling serialization/saving support
+ WITH_OUTPUT=0
+else
+ WITH_OUTPUT=1
+fi
+AC_SUBST(WITH_OUTPUT)
+
+AC_ARG_WITH(tree,
+[ --with-tree add the DOM like tree manipulation APIs (on)])
+if test "$with_minimum" = "yes" -a "$with_tree" = ""
+then
+ with_tree=no
+fi
+if test "$with_tree" = "no" ; then
+ echo Disabling DOM like tree manipulation APIs
+ WITH_TREE=0
+else
+ WITH_TREE=1
+fi
+AC_SUBST(WITH_TREE)
+
+AC_ARG_WITH(ftp,
+[ --with-ftp add the FTP support (on)])
+if test "$with_minimum" = "yes" -a "$with_ftp" = ""
+then
+ with_ftp=no
+fi
+if test "$with_ftp" = "no" ; then
+ echo Disabling FTP support
+ WITH_FTP=0
+ FTP_OBJ=
+else
+ WITH_FTP=1
+ FTP_OBJ=nanoftp.o
+fi
+AC_SUBST(WITH_FTP)
+AC_SUBST(FTP_OBJ)
+
+AC_ARG_WITH(http,
+[ --with-http add the HTTP support (on)])
+if test "$with_minimum" = "yes" -a "$with_http" = ""
+then
+ with_http=no
+fi
+if test "$with_http" = "no" ; then
+ echo Disabling HTTP support
+ WITH_HTTP=0
+ HTTP_OBJ=
+else
+ WITH_HTTP=1
+ HTTP_OBJ=nanohttp.o
+fi
+AC_SUBST(WITH_HTTP)
+AC_SUBST(HTTP_OBJ)
+
+AC_ARG_WITH(legacy,
+[ --with-legacy add deprecated APIs for compatibility (on)])
+if test "$with_minimum" = "yes" -a "$with_legacy" = ""
+then
+ with_legacy=no
+fi
+if test "$with_legacy" = "no" ; then
+ echo Disabling deprecated APIs
+ WITH_LEGACY=0
+else
+ WITH_LEGACY=1
+fi
+AC_SUBST(WITH_LEGACY)
+
+AC_ARG_WITH(reader,
+[ --with-reader add the xmlReader parsing interface (on)])
+if test "$with_minimum" = "yes" -a "$with_reader" = ""
+then
+ with_reader=no
+fi
+if test "$with_reader" = "no" ; then
+ echo Disabling the xmlReader parsing interface
+ WITH_READER=0
+ READER_TEST=
+else
+ WITH_READER=1
+ READER_TEST=Readertests
+fi
+AC_SUBST(WITH_READER)
+AC_SUBST(READER_TEST)
+
+AC_ARG_WITH(pattern,
+[ --with-pattern add the xmlPattern selection interface (on)])
+if test "$with_minimum" = "yes" -a "$with_pattern" = ""
+then
+ with_pattern=no
+fi
+if test "$with_pattern" = "no" ; then
+ echo Disabling the xmlPattern parsing interface
+ WITH_PATTERN=0
+ PATTERN_TEST=
+else
+ WITH_PATTERN=1
+ PATTERN_TEST=Patterntests
+fi
+AC_SUBST(WITH_PATTERN)
+AC_SUBST(PATTERN_TEST)
+
+AC_ARG_WITH(writer,
+[ --with-writer add the xmlWriter saving interface (on)])
+if test "$with_minimum" = "yes" -a "$with_writer" = ""
+then
+ with_writer=no
+fi
+if test "$with_writer" = "no" ; then
+ echo Disabling the xmlWriter saving interface
+ WITH_WRITER=0
+# WRITER_TEST=
+else
+ WITH_WRITER=1
+# WRITER_TEST=Writertests
+fi
+AC_SUBST(WITH_WRITER)
+#AC_SUBST(WRITER_TEST)
+
+AC_ARG_WITH(sax1,
+[ --with-sax1 add the older SAX1 interface (on)])
+if test "$with_minimum" = "yes" -a "$with_sax1" = ""
+then
+ with_sax1=no
+fi
+if test "$with_sax1" = "no" ; then
+ echo Disabling the older SAX1 interface
+ WITH_SAX1=0
+ TEST_SAX=
+else
+ WITH_SAX1=1
+ TEST_SAX=SAXtests
+fi
+AC_SUBST(WITH_SAX1)
+AC_SUBST(TEST_SAX)
+
+AC_ARG_WITH(push,
+[ --with-push add the PUSH parser interfaces (on)])
+if test "$with_minimum" = "yes" -a "$with_push" = ""
+then
+ with_push=no
+fi
+if test "$with_push" = "no" ; then
+ echo Disabling the PUSH parser interfaces
+ WITH_PUSH=0
+ TEST_PUSH=
+else
+ WITH_PUSH=1
+ TEST_PUSH="XMLPushtests"
+fi
+AC_SUBST(WITH_PUSH)
+AC_SUBST(TEST_PUSH)
+
+AC_ARG_WITH(html,
+[ --with-html add the HTML support (on)])
+if test "$with_minimum" = "yes" -a "$with_html" = ""
+then
+ with_html=no
+fi
+if test "$with_html" = "no" ; then
+ echo Disabling HTML support
+ WITH_HTML=0
+ HTML_OBJ=
+ TEST_HTML=
+else
+ WITH_HTML=1
+ HTML_OBJ="HTMLparser.o HTMLtree.o"
+ TEST_HTML=HTMLtests
+ if test "$with_push" != "no" ; then
+ TEST_PHTML=HTMLPushtests
+ else
+ TEST_PHTML=
+ fi
+fi
+AC_SUBST(WITH_HTML)
+AC_SUBST(HTML_OBJ)
+AC_SUBST(TEST_HTML)
+AC_SUBST(TEST_PHTML)
+
+AC_ARG_WITH(valid,
+[ --with-valid add the DTD validation support (on)])
+if test "$with_minimum" = "yes" -a "$with_valid" = ""
+then
+ with_valid=no
+fi
+if test "$with_valid" = "no" ; then
+ echo Disabling DTD validation support
+ WITH_VALID=0
+ TEST_VALID=
+ TEST_VTIME=
+else
+ WITH_VALID=1
+ TEST_VALID=Validtests
+ TEST_VTIME=VTimingtests
+fi
+AC_SUBST(WITH_VALID)
+AC_SUBST(TEST_VALID)
+AC_SUBST(TEST_VTIME)
+
+AC_ARG_WITH(catalog,
+[ --with-catalog add the Catalog support (on)])
+if test "$with_minimum" = "yes" -a "$with_catalog" = ""
+then
+ with_catalog=no
+fi
+if test "$with_catalog" = "no" ; then
+ echo Disabling Catalog support
+ WITH_CATALOG=0
+ CATALOG_OBJ=
+ TEST_CATALOG=
+else
+ WITH_CATALOG=1
+ CATALOG_OBJ="catalog.o"
+ TEST_CATALOG=Catatests
+fi
+AC_SUBST(WITH_CATALOG)
+AC_SUBST(CATALOG_OBJ)
+AC_SUBST(TEST_CATALOG)
+
+AC_ARG_WITH(docbook,
+[ --with-docbook add Docbook SGML support (on)])
+if test "$with_minimum" = "yes" -a "$with_docbook" = ""
+then
+ with_docbook=no
+fi
+if test "$with_docbook" = "no" ; then
+ echo Disabling Docbook support
+ WITH_DOCB=0
+ DOCB_OBJ=
+else
+ WITH_DOCB=1
+ DOCB_OBJ="DOCBparser.o"
+fi
+AC_SUBST(WITH_DOCB)
+AC_SUBST(DOCB_OBJ)
+
+
+AC_ARG_WITH(xpath,
+[ --with-xpath add the XPATH support (on)])
+if test "$with_minimum" = "yes" -a "$with_xpath" = ""
+then
+ with_xpath=no
+fi
+if test "$with_xpath" = "no" ; then
+ echo Disabling XPATH support
+ with_xptr="no"
+ with_c14n="no"
+ with_xinclude="no"
+ WITH_XPATH=0
+ XPATH_OBJ=
+ TEST_XPATH=
+else
+ WITH_XPATH=1
+ XPATH_OBJ=xpath.o
+ TEST_XPATH=XPathtests
+fi
+AC_SUBST(WITH_XPATH)
+AC_SUBST(XPATH_OBJ)
+AC_SUBST(TEST_XPATH)
+
+AC_ARG_WITH(xptr,
+[ --with-xptr add the XPointer support (on)])
+if test "$with_minimum" = "yes" -a "$with_xptr" = ""
+then
+ with_xptr=no
+fi
+if test "$with_xptr" = "no" ; then
+ echo Disabling XPointer support
+ WITH_XPTR=0
+ XPTR_OBJ=
+ TEST_XPTR=
+else
+ WITH_XPTR=1
+ XPTR_OBJ=xpointer.o
+ TEST_XPTR=XPtrtests
+fi
+AC_SUBST(WITH_XPTR)
+AC_SUBST(XPTR_OBJ)
+AC_SUBST(TEST_XPTR)
+
+AC_ARG_WITH(c14n,
+[ --with-c14n add the Canonicalization support (on)])
+if test "$with_minimum" = "yes" -a "$with_c14n" = ""
+then
+ with_c14n=no
+fi
+if test "$with_c14n" = "no" ; then
+ echo Disabling C14N support
+ WITH_C14N=0
+ C14N_OBJ=
+ TEST_C14N=
+else
+ WITH_C14N=1
+ C14N_OBJ="c14n.c"
+ TEST_C14N=C14Ntests
+fi
+AC_SUBST(WITH_C14N)
+AC_SUBST(C14N_OBJ)
+AC_SUBST(TEST_C14N)
+
+AC_ARG_WITH(xinclude,
+[ --with-xinclude add the XInclude support (on)])
+if test "$with_minimum" = "yes" -a "$with_xinclude" = ""
+then
+ with_xinclude=no
+fi
+if test "$with_xinclude" = "no" ; then
+ echo Disabling XInclude support
+ WITH_XINCLUDE=0
+ XINCLUDE_OBJ=
+ with_xinclude="no"
+ TEST_XINCLUDE=
+else
+ WITH_XINCLUDE=1
+ XINCLUDE_OBJ=xinclude.o
+ TEST_XINCLUDE=XIncludetests
+fi
+AC_SUBST(WITH_XINCLUDE)
+AC_SUBST(XINCLUDE_OBJ)
+AC_SUBST(TEST_XINCLUDE)
+
+WITH_ICONV=0
+AC_ARG_WITH(iconv,
+[ --with-iconv[[=DIR]] add ICONV support (on)])
+if test "$with_minimum" = "yes" -a "$with_iconv" = ""
+then
+ with_iconv=no
+fi
+if test "$with_iconv" = "no" ; then
+ echo Disabling ICONV support
+else
+ if test "$with_iconv" != "yes" -a "$with_iconv" != "" ; then
+ CPPFLAGS="${CPPFLAGS} -I$with_iconv/include"
+ # Export this since our headers include iconv.h
+ XML_INCLUDEDIR="${XML_INCLUDEDIR} -I$with_iconv/include"
+ ICONV_LIBS="-L$with_iconv/lib"
+ fi
+
+ AC_CHECK_HEADER(iconv.h,
+ AC_MSG_CHECKING(for iconv)
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],[
+iconv_t cd = iconv_open ("","");
+iconv (cd, NULL, NULL, NULL, NULL);],[
+ AC_MSG_RESULT(yes)
+ WITH_ICONV=1],[
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(for iconv in -liconv)
+
+ _ldflags="${LDFLAGS}"
+ _libs="${LIBS}"
+ LDFLAGS="${LDFLAGS} ${ICONV_LIBS}"
+ LIBS="${LIBS} -liconv"
+
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],[
+iconv_t cd = iconv_open ("","");
+iconv (cd, NULL, NULL, NULL, NULL);],[
+ AC_MSG_RESULT(yes)
+ WITH_ICONV=1
+ ICONV_LIBS="${ICONV_LIBS} -liconv"
+ LIBS="${_libs}"
+ LDFLAGS="${_ldflags}"],[
+ AC_MSG_RESULT(no)
+ LIBS="${_libs}"
+ LDFLAGS="${_ldflags}"])]))
+fi
+case "$host" in
+ *mingw*) M_LIBS=""
+ ;;
+ *) M_LIBS="-lm"
+ ;;
+esac
+XML_LIBS="-lxml2 $Z_LIBS $THREAD_LIBS $ICONV_LIBS $M_LIBS $LIBS"
+XML_LIBTOOLLIBS="libxml2.la"
+AC_SUBST(WITH_ICONV)
+
+WITH_ISO8859X=1
+AC_ARG_WITH(iso8859x,
+[ --with-iso8859x add ISO8859X support if no iconv (on)])
+if test "$with_minimum" = "yes" -a "$with_iso8859x" = ""
+then
+ with_iso8859x=no
+fi
+if test "$WITH_ICONV" != "1" ; then
+if test "$with_iso8859x" = "no" ; then
+ echo Disabling ISO8859X support
+ WITH_ISO8859X=0
+fi
+fi
+AC_SUBST(WITH_ISO8859X)
+
+AC_ARG_WITH(schemas,
+[ --with-schemas add Relax-NG and experimental Schemas support (on)])
+if test "$with_minimum" = "yes" -a "$with_schemas" = ""
+then
+ with_schemas=no
+fi
+if test "$with_schemas" = "no" ; then
+ echo "Disabled Schemas/Relax-NG support"
+ WITH_SCHEMAS=0
+ TEST_SCHEMAS=
+else
+ echo "Enabled Schemas/Relax-NG support"
+ WITH_SCHEMAS=1
+ TEST_SCHEMAS="Schemastests Relaxtests"
+ if test "$PYTHON_INCLUDES" != "" ; then
+ PYTHON_TESTS="$PYTHON_TESTS RelaxNGPythonTests SchemasPythonTests"
+ fi
+ with_regexps=yes
+fi
+AC_SUBST(WITH_SCHEMAS)
+AC_SUBST(TEST_SCHEMAS)
+
+AC_ARG_WITH(regexps,
+[ --with-regexps add Regular Expressions support (on)])
+if test "$with_minimum" = "yes" -a "$with_regexps" = ""
+then
+ with_regexps=no
+fi
+if test "$with_regexps" = "no" ; then
+ echo Disabling Regexps support
+ WITH_REGEXPS=0
+ TEST_REGEXPS=
+else
+ WITH_REGEXPS=1
+ TEST_REGEXPS="Regexptests Automatatests"
+fi
+AC_SUBST(WITH_REGEXPS)
+AC_SUBST(TEST_REGEXPS)
+
+AC_ARG_WITH(debug,
+[ --with-debug add the debugging module (on)])
+if test "$with_minimum" = "yes" -a "$with_debug" = ""
+then
+ with_debug=no
+fi
+if test "$with_debug" = "no" ; then
+ echo Disabling DEBUG support
+ WITH_DEBUG=0
+ DEBUG_OBJ=
+ TEST_DEBUG=
+else
+ WITH_DEBUG=1
+ DEBUG_OBJ=debugXML.o
+ TEST_DEBUG=Scripttests
+fi
+AC_SUBST(WITH_DEBUG)
+AC_SUBST(DEBUG_OBJ)
+AC_SUBST(TEST_DEBUG)
+
+AC_ARG_WITH(mem_debug,
+[ --with-mem-debug add the memory debugging module (off)])
+if test "$with_minimum" = "yes" -a "$with_mem_debug" = ""
+then
+ with_mem_debug=no
+fi
+if test "$with_mem_debug" = "yes" ; then
+ echo Enabling memory debug support
+ WITH_MEM_DEBUG=1
+else
+ WITH_MEM_DEBUG=0
+fi
+AC_SUBST(WITH_MEM_DEBUG)
+
+
+WIN32_EXTRA_LIBADD=
+WIN32_EXTRA_LDFLAGS=
+case "$host" in
+ *-*-mingw*)
+ CPPFLAGS="$CPPFLAGS -DWIN32"
+ WIN32_EXTRA_LIBADD="-lws2_32"
+ WIN32_EXTRA_LDFLAGS="-no-undefined"
+ AC_DEFINE([_WINSOCKAPI_],1,[Using the Win32 Socket implementation])
+ AC_DEFINE([snprintf],[_snprintf],[Win32 Std C name mangling work-around])
+ AC_DEFINE([vsnprintf],[_vsnprintf],[Win32 Std C name mangling work-around])
+ ;;
+esac
+AC_SUBST(WIN32_EXTRA_LIBADD)
+AC_SUBST(WIN32_EXTRA_LDFLAGS)
+
+AC_SUBST(CPPFLAGS)
+AC_SUBST(CFLAGS)
+AC_SUBST(XML_CFLAGS)
+
+AC_SUBST(XML_LIBDIR)
+AC_SUBST(XML_LIBS)
+AC_SUBST(XML_LIBTOOLLIBS)
+AC_SUBST(ICONV_LIBS)
+AC_SUBST(XML_INCLUDEDIR)
+AC_SUBST(HTML_DIR)
+AC_SUBST(HAVE_ISNAN)
+AC_SUBST(HAVE_ISINF)
+AC_SUBST(PYTHON)
+AC_SUBST(PYTHON_VERSION)
+AC_SUBST(PYTHON_INCLUDES)
+AC_SUBST(PYTHON_SITE_PACKAGES)
+
+AC_SUBST(M_LIBS)
+AC_SUBST(RDL_LIBS)
+
+dnl for the spec file
+RELDATE=`date +'%a %b %e %Y'`
+AC_SUBST(RELDATE)
+AC_SUBST(PYTHON_TESTS)
+
+rm -f COPYING.LIB COPYING
+ln -s Copyright COPYING
+
+# keep on one line for cygwin c.f. #130896
+AC_OUTPUT(libxml2.spec:libxml.spec.in Makefile include/Makefile include/libxml/Makefile doc/Makefile doc/examples/Makefile example/Makefile python/Makefile python/tests/Makefile include/libxml/xmlversion.h xml2-config libxml-2.0.pc libxml-2.0-uninstalled.pc python/setup.py)
+
+chmod +x xml2-config python/setup.py
diff --git a/dbgen.pl b/dbgen.pl
new file mode 100755
index 0000000..1383d6e
--- /dev/null
+++ b/dbgen.pl
@@ -0,0 +1,43 @@
+#!/usr/bin/perl
+
+$size = shift;
+
+if ($size eq "")
+{
+ die "usage: dbgen.pl [size]\n";
+}
+
+@firstnames = ("Al", "Bob", "Charles", "David", "Egon", "Farbood",
+ "George", "Hank", "Inki", "James");
+@lastnames = ("Aranow", "Barker", "Corsetti", "Dershowitz", "Engleman",
+ "Franklin", "Grice", "Haverford", "Ilvedson", "Jones");
+@states = ("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA",
+ "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD",
+ "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ",
+ "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC",
+ "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY");
+
+print "<?xml version=\"1.0\"?>\n";
+print "\n";
+print "<table>\n";
+
+for ($i=0; $i<$size; $i++)
+{
+ $first = $firstnames [$i % 10];
+ $last = $lastnames [($i / 10) % 10];
+ $state = $states [($i / 100) % 50];
+ $zip = 22000 + $i / 5000;
+
+ printf " <row>\n";
+ printf " <id>%04d</id>\n", $i;
+ printf " <firstname>$first</firstname>\n", $i;
+ printf " <lastname>$last</lastname>\n", $i;
+ printf " <street>%d Any St.</street>\n", ($i % 100) + 1;
+ printf " <city>Anytown</city>\n";
+ printf " <state>$state</state>\n";
+ printf " <zip>%d</zip>\n", $zip;
+ printf " </row>\n";
+}
+
+print "</table>\n";
+
diff --git a/dbgenattr.pl b/dbgenattr.pl
new file mode 100755
index 0000000..dce11cd
--- /dev/null
+++ b/dbgenattr.pl
@@ -0,0 +1,42 @@
+#!/usr/bin/perl
+
+$size = shift;
+
+if ($size eq "")
+{
+ die "usage: dbgen.pl [size]\n";
+}
+
+@firstnames = ("Al", "Bob", "Charles", "David", "Egon", "Farbood",
+ "George", "Hank", "Inki", "James");
+@lastnames = ("Aranow", "Barker", "Corsetti", "Dershowitz", "Engleman",
+ "Franklin", "Grice", "Haverford", "Ilvedson", "Jones");
+@states = ("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA",
+ "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD",
+ "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ",
+ "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC",
+ "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY");
+
+print "<?xml version=\"1.0\"?>\n";
+print "\n";
+print "<table>\n";
+
+for ($i=0; $i<$size; $i++)
+{
+ $first = $firstnames [$i % 10];
+ $last = $lastnames [($i / 10) % 10];
+ $state = $states [($i / 100) % 50];
+ $zip = 22000 + $i / 5000;
+
+ printf " <row\n";
+ printf " id='%04d'\n", $i;
+ printf " firstname='$first'\n", $i;
+ printf " lastname='$last'\n", $i;
+ printf " street='%d Any St.'\n", ($i % 100) + 1;
+ printf " city='Anytown'\n";
+ printf " state='$state'\n";
+ printf " zip='%d'/>\n", $zip;
+}
+
+print "</table>\n";
+
diff --git a/debugXML.c b/debugXML.c
new file mode 100644
index 0000000..cd87ddc
--- /dev/null
+++ b/debugXML.c
@@ -0,0 +1,2578 @@
+/*
+ * debugXML.c : This is a set of routines used for debugging the tree
+ * produced by the XML parser.
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <daniel@veillard.com>
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+#ifdef LIBXML_DEBUG_ENABLED
+
+#include <string.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/valid.h>
+#include <libxml/debugXML.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/HTMLparser.h>
+#include <libxml/xmlerror.h>
+#include <libxml/globals.h>
+#include <libxml/xpathInternals.h>
+#include <libxml/uri.h>
+#ifdef LIBXML_SCHEMAS_ENABLED
+#include <libxml/relaxng.h>
+#endif
+
+/**
+ * xmlDebugDumpString:
+ * @output: the FILE * for the output
+ * @str: the string
+ *
+ * Dumps informations about the string, shorten it if necessary
+ */
+void
+xmlDebugDumpString(FILE * output, const xmlChar * str)
+{
+ int i;
+
+ if (output == NULL)
+ output = stdout;
+ if (str == NULL) {
+ fprintf(output, "(NULL)");
+ return;
+ }
+ for (i = 0; i < 40; i++)
+ if (str[i] == 0)
+ return;
+ else if (IS_BLANK_CH(str[i]))
+ fputc(' ', output);
+ else if (str[i] >= 0x80)
+ fprintf(output, "#%X", str[i]);
+ else
+ fputc(str[i], output);
+ fprintf(output, "...");
+}
+
+static void
+xmlDebugDumpDtdNode(FILE *output, xmlDtdPtr dtd, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+
+ if (dtd == NULL) {
+ fprintf(output, "DTD node is NULL\n");
+ return;
+ }
+
+ if (dtd->type != XML_DTD_NODE) {
+ fprintf(output, "PBM: not a DTD\n");
+ return;
+ }
+ if (dtd->name != NULL)
+ fprintf(output, "DTD(%s)", dtd->name);
+ else
+ fprintf(output, "DTD");
+ if (dtd->ExternalID != NULL)
+ fprintf(output, ", PUBLIC %s", dtd->ExternalID);
+ if (dtd->SystemID != NULL)
+ fprintf(output, ", SYSTEM %s", dtd->SystemID);
+ fprintf(output, "\n");
+ /*
+ * Do a bit of checking
+ */
+ if (dtd->parent == NULL)
+ fprintf(output, "PBM: DTD has no parent\n");
+ if (dtd->doc == NULL)
+ fprintf(output, "PBM: DTD has no doc\n");
+ if ((dtd->parent != NULL) && (dtd->doc != dtd->parent->doc))
+ fprintf(output, "PBM: DTD doc differs from parent's one\n");
+ if (dtd->prev == NULL) {
+ if ((dtd->parent != NULL) && (dtd->parent->children != (xmlNodePtr)dtd))
+ fprintf(output, "PBM: DTD has no prev and not first of list\n");
+ } else {
+ if (dtd->prev->next != (xmlNodePtr) dtd)
+ fprintf(output, "PBM: DTD prev->next : back link wrong\n");
+ }
+ if (dtd->next == NULL) {
+ if ((dtd->parent != NULL) && (dtd->parent->last != (xmlNodePtr) dtd))
+ fprintf(output, "PBM: DTD has no next and not last of list\n");
+ } else {
+ if (dtd->next->prev != (xmlNodePtr) dtd)
+ fprintf(output, "PBM: DTD next->prev : forward link wrong\n");
+ }
+}
+
+static void
+xmlDebugDumpAttrDecl(FILE *output, xmlAttributePtr attr, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+
+ if (attr == NULL) {
+ fprintf(output, "Attribute declaration is NULL\n");
+ return;
+ }
+ if (attr->type != XML_ATTRIBUTE_DECL) {
+ fprintf(output, "PBM: not a Attr\n");
+ return;
+ }
+ if (attr->name != NULL)
+ fprintf(output, "ATTRDECL(%s)", attr->name);
+ else
+ fprintf(output, "PBM ATTRDECL noname!!!");
+ if (attr->elem != NULL)
+ fprintf(output, " for %s", attr->elem);
+ else
+ fprintf(output, " PBM noelem!!!");
+ switch (attr->atype) {
+ case XML_ATTRIBUTE_CDATA:
+ fprintf(output, " CDATA");
+ break;
+ case XML_ATTRIBUTE_ID:
+ fprintf(output, " ID");
+ break;
+ case XML_ATTRIBUTE_IDREF:
+ fprintf(output, " IDREF");
+ break;
+ case XML_ATTRIBUTE_IDREFS:
+ fprintf(output, " IDREFS");
+ break;
+ case XML_ATTRIBUTE_ENTITY:
+ fprintf(output, " ENTITY");
+ break;
+ case XML_ATTRIBUTE_ENTITIES:
+ fprintf(output, " ENTITIES");
+ break;
+ case XML_ATTRIBUTE_NMTOKEN:
+ fprintf(output, " NMTOKEN");
+ break;
+ case XML_ATTRIBUTE_NMTOKENS:
+ fprintf(output, " NMTOKENS");
+ break;
+ case XML_ATTRIBUTE_ENUMERATION:
+ fprintf(output, " ENUMERATION");
+ break;
+ case XML_ATTRIBUTE_NOTATION:
+ fprintf(output, " NOTATION ");
+ break;
+ }
+ if (attr->tree != NULL) {
+ int indx;
+ xmlEnumerationPtr cur = attr->tree;
+
+ for (indx = 0;indx < 5; indx++) {
+ if (indx != 0)
+ fprintf(output, "|%s", cur->name);
+ else
+ fprintf(output, " (%s", cur->name);
+ cur = cur->next;
+ if (cur == NULL) break;
+ }
+ if (cur == NULL)
+ fprintf(output, ")");
+ else
+ fprintf(output, "...)");
+ }
+ switch (attr->def) {
+ case XML_ATTRIBUTE_NONE:
+ break;
+ case XML_ATTRIBUTE_REQUIRED:
+ fprintf(output, " REQUIRED");
+ break;
+ case XML_ATTRIBUTE_IMPLIED:
+ fprintf(output, " IMPLIED");
+ break;
+ case XML_ATTRIBUTE_FIXED:
+ fprintf(output, " FIXED");
+ break;
+ }
+ if (attr->defaultValue != NULL) {
+ fprintf(output, "\"");
+ xmlDebugDumpString(output, attr->defaultValue);
+ fprintf(output, "\"");
+ }
+ fprintf(output, "\n");
+
+ /*
+ * Do a bit of checking
+ */
+ if (attr->parent == NULL)
+ fprintf(output, "PBM: Attr has no parent\n");
+ if (attr->doc == NULL)
+ fprintf(output, "PBM: Attr has no doc\n");
+ if ((attr->parent != NULL) && (attr->doc != attr->parent->doc))
+ fprintf(output, "PBM: Attr doc differs from parent's one\n");
+ if (attr->prev == NULL) {
+ if ((attr->parent != NULL) && (attr->parent->children != (xmlNodePtr)attr))
+ fprintf(output, "PBM: Attr has no prev and not first of list\n");
+ } else {
+ if (attr->prev->next != (xmlNodePtr) attr)
+ fprintf(output, "PBM: Attr prev->next : back link wrong\n");
+ }
+ if (attr->next == NULL) {
+ if ((attr->parent != NULL) && (attr->parent->last != (xmlNodePtr) attr))
+ fprintf(output, "PBM: Attr has no next and not last of list\n");
+ } else {
+ if (attr->next->prev != (xmlNodePtr) attr)
+ fprintf(output, "PBM: Attr next->prev : forward link wrong\n");
+ }
+}
+
+static void
+xmlDebugDumpElemDecl(FILE *output, xmlElementPtr elem, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+
+ if (elem == NULL) {
+ fprintf(output, "Element declaration is NULL\n");
+ return;
+ }
+ if (elem->type != XML_ELEMENT_DECL) {
+ fprintf(output, "PBM: not a Elem\n");
+ return;
+ }
+ if (elem->name != NULL) {
+ fprintf(output, "ELEMDECL(");
+ xmlDebugDumpString(output, elem->name);
+ fprintf(output, ")");
+ } else
+ fprintf(output, "PBM ELEMDECL noname!!!");
+ switch (elem->etype) {
+ case XML_ELEMENT_TYPE_UNDEFINED:
+ fprintf(output, ", UNDEFINED");
+ break;
+ case XML_ELEMENT_TYPE_EMPTY:
+ fprintf(output, ", EMPTY");
+ break;
+ case XML_ELEMENT_TYPE_ANY:
+ fprintf(output, ", ANY");
+ break;
+ case XML_ELEMENT_TYPE_MIXED:
+ fprintf(output, ", MIXED ");
+ break;
+ case XML_ELEMENT_TYPE_ELEMENT:
+ fprintf(output, ", MIXED ");
+ break;
+ }
+ if ((elem->type != XML_ELEMENT_NODE) &&
+ (elem->content != NULL)) {
+ char buf[5001];
+
+ buf[0] = 0;
+ xmlSnprintfElementContent(buf, 5000, elem->content, 1);
+ buf[5000] = 0;
+ fprintf(output, "%s", buf);
+ }
+ fprintf(output, "\n");
+
+ /*
+ * Do a bit of checking
+ */
+ if (elem->parent == NULL)
+ fprintf(output, "PBM: Elem has no parent\n");
+ if (elem->doc == NULL)
+ fprintf(output, "PBM: Elem has no doc\n");
+ if ((elem->parent != NULL) && (elem->doc != elem->parent->doc))
+ fprintf(output, "PBM: Elem doc differs from parent's one\n");
+ if (elem->prev == NULL) {
+ if ((elem->parent != NULL) && (elem->parent->children != (xmlNodePtr)elem))
+ fprintf(output, "PBM: Elem has no prev and not first of list\n");
+ } else {
+ if (elem->prev->next != (xmlNodePtr) elem)
+ fprintf(output, "PBM: Elem prev->next : back link wrong\n");
+ }
+ if (elem->next == NULL) {
+ if ((elem->parent != NULL) && (elem->parent->last != (xmlNodePtr) elem))
+ fprintf(output, "PBM: Elem has no next and not last of list\n");
+ } else {
+ if (elem->next->prev != (xmlNodePtr) elem)
+ fprintf(output, "PBM: Elem next->prev : forward link wrong\n");
+ }
+}
+
+static void
+xmlDebugDumpEntityDecl(FILE *output, xmlEntityPtr ent, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+
+ if (ent == NULL) {
+ fprintf(output, "Entity declaration is NULL\n");
+ return;
+ }
+ if (ent->type != XML_ENTITY_DECL) {
+ fprintf(output, "PBM: not a Entity decl\n");
+ return;
+ }
+ if (ent->name != NULL) {
+ fprintf(output, "ENTITYDECL(");
+ xmlDebugDumpString(output, ent->name);
+ fprintf(output, ")");
+ } else
+ fprintf(output, "PBM ENTITYDECL noname!!!");
+ switch (ent->etype) {
+ case XML_INTERNAL_GENERAL_ENTITY:
+ fprintf(output, ", internal\n");
+ break;
+ case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
+ fprintf(output, ", external parsed\n");
+ break;
+ case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
+ fprintf(output, ", unparsed\n");
+ break;
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ fprintf(output, ", parameter\n");
+ break;
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ fprintf(output, ", external parameter\n");
+ break;
+ case XML_INTERNAL_PREDEFINED_ENTITY:
+ fprintf(output, ", predefined\n");
+ break;
+ }
+ if (ent->ExternalID) {
+ fprintf(output, shift);
+ fprintf(output, " ExternalID=%s\n", ent->ExternalID);
+ }
+ if (ent->SystemID) {
+ fprintf(output, shift);
+ fprintf(output, " SystemID=%s\n", ent->SystemID);
+ }
+ if (ent->URI != NULL) {
+ fprintf(output, shift);
+ fprintf(output, " URI=%s\n", ent->URI);
+ }
+ if (ent->content) {
+ fprintf(output, shift);
+ fprintf(output, " content=");
+ xmlDebugDumpString(output, ent->content);
+ fprintf(output, "\n");
+ }
+
+ /*
+ * Do a bit of checking
+ */
+ if (ent->parent == NULL)
+ fprintf(output, "PBM: Ent has no parent\n");
+ if (ent->doc == NULL)
+ fprintf(output, "PBM: Ent has no doc\n");
+ if ((ent->parent != NULL) && (ent->doc != ent->parent->doc))
+ fprintf(output, "PBM: Ent doc differs from parent's one\n");
+ if (ent->prev == NULL) {
+ if ((ent->parent != NULL) && (ent->parent->children != (xmlNodePtr)ent))
+ fprintf(output, "PBM: Ent has no prev and not first of list\n");
+ } else {
+ if (ent->prev->next != (xmlNodePtr) ent)
+ fprintf(output, "PBM: Ent prev->next : back link wrong\n");
+ }
+ if (ent->next == NULL) {
+ if ((ent->parent != NULL) && (ent->parent->last != (xmlNodePtr) ent))
+ fprintf(output, "PBM: Ent has no next and not last of list\n");
+ } else {
+ if (ent->next->prev != (xmlNodePtr) ent)
+ fprintf(output, "PBM: Ent next->prev : forward link wrong\n");
+ }
+}
+
+static void
+xmlDebugDumpNamespace(FILE *output, xmlNsPtr ns, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+
+ if (ns == NULL) {
+ fprintf(output, "namespace node is NULL\n");
+ return;
+ }
+ if (ns->type != XML_NAMESPACE_DECL) {
+ fprintf(output, "invalid namespace node %d\n", ns->type);
+ return;
+ }
+ if (ns->href == NULL) {
+ if (ns->prefix != NULL)
+ fprintf(output, "incomplete namespace %s href=NULL\n", ns->prefix);
+ else
+ fprintf(output, "incomplete default namespace href=NULL\n");
+ } else {
+ if (ns->prefix != NULL)
+ fprintf(output, "namespace %s href=", ns->prefix);
+ else
+ fprintf(output, "default namespace href=");
+
+ xmlDebugDumpString(output, ns->href);
+ fprintf(output, "\n");
+ }
+}
+
+static void
+xmlDebugDumpNamespaceList(FILE *output, xmlNsPtr ns, int depth) {
+ while (ns != NULL) {
+ xmlDebugDumpNamespace(output, ns, depth);
+ ns = ns->next;
+ }
+}
+
+static void
+xmlDebugDumpEntity(FILE *output, xmlEntityPtr ent, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+
+ if (ent == NULL) {
+ fprintf(output, "Entity is NULL\n");
+ return;
+ }
+ switch (ent->etype) {
+ case XML_INTERNAL_GENERAL_ENTITY:
+ fprintf(output, "INTERNAL_GENERAL_ENTITY ");
+ break;
+ case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
+ fprintf(output, "EXTERNAL_GENERAL_PARSED_ENTITY ");
+ break;
+ case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
+ fprintf(output, "EXTERNAL_GENERAL_UNPARSED_ENTITY ");
+ break;
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ fprintf(output, "INTERNAL_PARAMETER_ENTITY ");
+ break;
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ fprintf(output, "EXTERNAL_PARAMETER_ENTITY ");
+ break;
+ default:
+ fprintf(output, "ENTITY_%d ! ", ent->etype);
+ }
+ fprintf(output, "%s\n", ent->name);
+ if (ent->ExternalID) {
+ fprintf(output, shift);
+ fprintf(output, "ExternalID=%s\n", ent->ExternalID);
+ }
+ if (ent->SystemID) {
+ fprintf(output, shift);
+ fprintf(output, "SystemID=%s\n", ent->SystemID);
+ }
+ if (ent->URI) {
+ fprintf(output, shift);
+ fprintf(output, "URI=%s\n", ent->URI);
+ }
+ if (ent->content) {
+ fprintf(output, shift);
+ fprintf(output, "content=");
+ xmlDebugDumpString(output, ent->content);
+ fprintf(output, "\n");
+ }
+}
+
+/**
+ * xmlDebugDumpAttr:
+ * @output: the FILE * for the output
+ * @attr: the attribute
+ * @depth: the indentation level.
+ *
+ * Dumps debug information for the attribute
+ */
+void
+xmlDebugDumpAttr(FILE *output, xmlAttrPtr attr, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+
+ if (attr == NULL) {
+ fprintf(output, "Attr is NULL");
+ return;
+ }
+ fprintf(output, "ATTRIBUTE ");
+ xmlDebugDumpString(output, attr->name);
+ fprintf(output, "\n");
+ if (attr->children != NULL)
+ xmlDebugDumpNodeList(output, attr->children, depth + 1);
+
+ /*
+ * Do a bit of checking
+ */
+ if (attr->parent == NULL)
+ fprintf(output, "PBM: Attr has no parent\n");
+ if (attr->doc == NULL)
+ fprintf(output, "PBM: Attr has no doc\n");
+ if ((attr->parent != NULL) && (attr->doc != attr->parent->doc))
+ fprintf(output, "PBM: Attr doc differs from parent's one\n");
+ if (attr->prev == NULL) {
+ if ((attr->parent != NULL) && (attr->parent->properties != attr))
+ fprintf(output, "PBM: Attr has no prev and not first of list\n");
+ } else {
+ if (attr->prev->next != attr)
+ fprintf(output, "PBM: Attr prev->next : back link wrong\n");
+ }
+ if (attr->next != NULL) {
+ if (attr->next->prev != attr)
+ fprintf(output, "PBM: Attr next->prev : forward link wrong\n");
+ }
+}
+
+/**
+ * xmlDebugDumpAttrList:
+ * @output: the FILE * for the output
+ * @attr: the attribute list
+ * @depth: the indentation level.
+ *
+ * Dumps debug information for the attribute list
+ */
+void
+xmlDebugDumpAttrList(FILE * output, xmlAttrPtr attr, int depth)
+{
+ if (output == NULL)
+ output = stdout;
+ while (attr != NULL) {
+ xmlDebugDumpAttr(output, attr, depth);
+ attr = attr->next;
+ }
+}
+
+/**
+ * xmlDebugDumpOneNode:
+ * @output: the FILE * for the output
+ * @node: the node
+ * @depth: the indentation level.
+ *
+ * Dumps debug information for the element node, it is not recursive
+ */
+void
+xmlDebugDumpOneNode(FILE * output, xmlNodePtr node, int depth)
+{
+ int i;
+ char shift[100];
+
+ if (output == NULL)
+ output = stdout;
+ for (i = 0; ((i < depth) && (i < 25)); i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ if (node == NULL) {
+ fprintf(output, shift);
+ fprintf(output, "node is NULL\n");
+ return;
+ }
+ switch (node->type) {
+ case XML_ELEMENT_NODE:
+ fprintf(output, shift);
+ fprintf(output, "ELEMENT ");
+ if ((node->ns != NULL) && (node->ns->prefix != NULL)) {
+ xmlDebugDumpString(output, node->ns->prefix);
+ fprintf(output, ":");
+ }
+ xmlDebugDumpString(output, node->name);
+ fprintf(output, "\n");
+ break;
+ case XML_ATTRIBUTE_NODE:
+ fprintf(output, shift);
+ fprintf(output, "Error, ATTRIBUTE found here\n");
+ break;
+ case XML_TEXT_NODE:
+ fprintf(output, shift);
+ if (node->name == (const xmlChar *) xmlStringTextNoenc)
+ fprintf(output, "TEXT no enc\n");
+ else
+ fprintf(output, "TEXT\n");
+ break;
+ case XML_CDATA_SECTION_NODE:
+ fprintf(output, shift);
+ fprintf(output, "CDATA_SECTION\n");
+ break;
+ case XML_ENTITY_REF_NODE:
+ fprintf(output, shift);
+ fprintf(output, "ENTITY_REF(%s)\n", node->name);
+ break;
+ case XML_ENTITY_NODE:
+ fprintf(output, shift);
+ fprintf(output, "ENTITY\n");
+ break;
+ case XML_PI_NODE:
+ fprintf(output, shift);
+ fprintf(output, "PI %s\n", node->name);
+ break;
+ case XML_COMMENT_NODE:
+ fprintf(output, shift);
+ fprintf(output, "COMMENT\n");
+ break;
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ fprintf(output, shift);
+ fprintf(output, "Error, DOCUMENT found here\n");
+ break;
+ case XML_DOCUMENT_TYPE_NODE:
+ fprintf(output, shift);
+ fprintf(output, "DOCUMENT_TYPE\n");
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ fprintf(output, shift);
+ fprintf(output, "DOCUMENT_FRAG\n");
+ break;
+ case XML_NOTATION_NODE:
+ fprintf(output, shift);
+ fprintf(output, "NOTATION\n");
+ break;
+ case XML_DTD_NODE:
+ xmlDebugDumpDtdNode(output, (xmlDtdPtr) node, depth);
+ return;
+ case XML_ELEMENT_DECL:
+ xmlDebugDumpElemDecl(output, (xmlElementPtr) node, depth);
+ return;
+ case XML_ATTRIBUTE_DECL:
+ xmlDebugDumpAttrDecl(output, (xmlAttributePtr) node, depth);
+ return;
+ case XML_ENTITY_DECL:
+ xmlDebugDumpEntityDecl(output, (xmlEntityPtr) node, depth);
+ return;
+ case XML_NAMESPACE_DECL:
+ xmlDebugDumpNamespace(output, (xmlNsPtr) node, depth);
+ return;
+ case XML_XINCLUDE_START:
+ fprintf(output, shift);
+ fprintf(output, "INCLUDE START\n");
+ return;
+ case XML_XINCLUDE_END:
+ fprintf(output, shift);
+ fprintf(output, "INCLUDE END\n");
+ return;
+ default:
+ fprintf(output, shift);
+ fprintf(output, "NODE_%d !!!\n", node->type);
+ return;
+ }
+ if (node->doc == NULL) {
+ fprintf(output, shift);
+ fprintf(output, "doc == NULL !!!\n");
+ }
+ if (node->nsDef != NULL)
+ xmlDebugDumpNamespaceList(output, node->nsDef, depth + 1);
+ if (node->properties != NULL)
+ xmlDebugDumpAttrList(output, node->properties, depth + 1);
+ if (node->type != XML_ENTITY_REF_NODE) {
+ if ((node->type != XML_ELEMENT_NODE) && (node->content != NULL)) {
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i + 2] = shift[2 * i + 3] = 0;
+ fprintf(output, shift);
+ fprintf(output, "content=");
+ xmlDebugDumpString(output, node->content);
+ fprintf(output, "\n");
+ }
+ } else {
+ xmlEntityPtr ent;
+
+ ent = xmlGetDocEntity(node->doc, node->name);
+ if (ent != NULL)
+ xmlDebugDumpEntity(output, ent, depth + 1);
+ }
+ /*
+ * Do a bit of checking
+ */
+ if (node->parent == NULL)
+ fprintf(output, "PBM: Node has no parent\n");
+ if (node->doc == NULL)
+ fprintf(output, "PBM: Node has no doc\n");
+ if ((node->parent != NULL) && (node->doc != node->parent->doc))
+ fprintf(output, "PBM: Node doc differs from parent's one\n");
+ if (node->prev == NULL) {
+ if ((node->parent != NULL) && (node->parent->children != node))
+ fprintf(output,
+ "PBM: Node has no prev and not first of list\n");
+ } else {
+ if (node->prev->next != node)
+ fprintf(output, "PBM: Node prev->next : back link wrong\n");
+ }
+ if (node->next == NULL) {
+ if ((node->parent != NULL) && (node->parent->last != node))
+ fprintf(output,
+ "PBM: Node has no next and not last of list\n");
+ } else {
+ if (node->next->prev != node)
+ fprintf(output, "PBM: Node next->prev : forward link wrong\n");
+ }
+}
+
+/**
+ * xmlDebugDumpNode:
+ * @output: the FILE * for the output
+ * @node: the node
+ * @depth: the indentation level.
+ *
+ * Dumps debug information for the element node, it is recursive
+ */
+void
+xmlDebugDumpNode(FILE * output, xmlNodePtr node, int depth)
+{
+ if (output == NULL)
+ output = stdout;
+ if (node == NULL) {
+ int i;
+ char shift[100];
+
+ for (i = 0; ((i < depth) && (i < 25)); i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+ fprintf(output, "node is NULL\n");
+ return;
+ }
+ xmlDebugDumpOneNode(output, node, depth);
+ if ((node->children != NULL) && (node->type != XML_ENTITY_REF_NODE))
+ xmlDebugDumpNodeList(output, node->children, depth + 1);
+}
+
+/**
+ * xmlDebugDumpNodeList:
+ * @output: the FILE * for the output
+ * @node: the node list
+ * @depth: the indentation level.
+ *
+ * Dumps debug information for the list of element node, it is recursive
+ */
+void
+xmlDebugDumpNodeList(FILE * output, xmlNodePtr node, int depth)
+{
+ if (output == NULL)
+ output = stdout;
+ while (node != NULL) {
+ xmlDebugDumpNode(output, node, depth);
+ node = node->next;
+ }
+}
+
+
+/**
+ * xmlDebugDumpDocumentHead:
+ * @output: the FILE * for the output
+ * @doc: the document
+ *
+ * Dumps debug information cncerning the document, not recursive
+ */
+void
+xmlDebugDumpDocumentHead(FILE * output, xmlDocPtr doc)
+{
+ if (output == NULL)
+ output = stdout;
+ if (doc == NULL) {
+ fprintf(output, "DOCUMENT == NULL !\n");
+ return;
+ }
+
+ switch (doc->type) {
+ case XML_ELEMENT_NODE:
+ fprintf(output, "Error, ELEMENT found here ");
+ break;
+ case XML_ATTRIBUTE_NODE:
+ fprintf(output, "Error, ATTRIBUTE found here\n");
+ break;
+ case XML_TEXT_NODE:
+ fprintf(output, "Error, TEXT\n");
+ break;
+ case XML_CDATA_SECTION_NODE:
+ fprintf(output, "Error, CDATA_SECTION\n");
+ break;
+ case XML_ENTITY_REF_NODE:
+ fprintf(output, "Error, ENTITY_REF\n");
+ break;
+ case XML_ENTITY_NODE:
+ fprintf(output, "Error, ENTITY\n");
+ break;
+ case XML_PI_NODE:
+ fprintf(output, "Error, PI\n");
+ break;
+ case XML_COMMENT_NODE:
+ fprintf(output, "Error, COMMENT\n");
+ break;
+ case XML_DOCUMENT_NODE:
+ fprintf(output, "DOCUMENT\n");
+ break;
+ case XML_HTML_DOCUMENT_NODE:
+ fprintf(output, "HTML DOCUMENT\n");
+ break;
+ case XML_DOCUMENT_TYPE_NODE:
+ fprintf(output, "Error, DOCUMENT_TYPE\n");
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ fprintf(output, "Error, DOCUMENT_FRAG\n");
+ break;
+ case XML_NOTATION_NODE:
+ fprintf(output, "Error, NOTATION\n");
+ break;
+ default:
+ fprintf(output, "NODE_%d\n", doc->type);
+ }
+ if (doc->name != NULL) {
+ fprintf(output, "name=");
+ xmlDebugDumpString(output, BAD_CAST doc->name);
+ fprintf(output, "\n");
+ }
+ if (doc->version != NULL) {
+ fprintf(output, "version=");
+ xmlDebugDumpString(output, doc->version);
+ fprintf(output, "\n");
+ }
+ if (doc->encoding != NULL) {
+ fprintf(output, "encoding=");
+ xmlDebugDumpString(output, doc->encoding);
+ fprintf(output, "\n");
+ }
+ if (doc->URL != NULL) {
+ fprintf(output, "URL=");
+ xmlDebugDumpString(output, doc->URL);
+ fprintf(output, "\n");
+ }
+ if (doc->standalone)
+ fprintf(output, "standalone=true\n");
+ if (doc->oldNs != NULL)
+ xmlDebugDumpNamespaceList(output, doc->oldNs, 0);
+}
+
+/**
+ * xmlDebugDumpDocument:
+ * @output: the FILE * for the output
+ * @doc: the document
+ *
+ * Dumps debug information for the document, it's recursive
+ */
+void
+xmlDebugDumpDocument(FILE * output, xmlDocPtr doc)
+{
+ if (output == NULL)
+ output = stdout;
+ if (doc == NULL) {
+ fprintf(output, "DOCUMENT == NULL !\n");
+ return;
+ }
+ xmlDebugDumpDocumentHead(output, doc);
+ if (((doc->type == XML_DOCUMENT_NODE) ||
+ (doc->type == XML_HTML_DOCUMENT_NODE)) && (doc->children != NULL))
+ xmlDebugDumpNodeList(output, doc->children, 1);
+}
+
+/**
+ * xmlDebugDumpDTD:
+ * @output: the FILE * for the output
+ * @dtd: the DTD
+ *
+ * Dumps debug information for the DTD
+ */
+void
+xmlDebugDumpDTD(FILE * output, xmlDtdPtr dtd)
+{
+ if (output == NULL)
+ output = stdout;
+ if (dtd == NULL) {
+ fprintf(output, "DTD is NULL\n");
+ return;
+ }
+ if (dtd->type != XML_DTD_NODE) {
+ fprintf(output, "PBM: not a DTD\n");
+ return;
+ }
+ if (dtd->name != NULL)
+ fprintf(output, "DTD(%s)", dtd->name);
+ else
+ fprintf(output, "DTD");
+ if (dtd->ExternalID != NULL)
+ fprintf(output, ", PUBLIC %s", dtd->ExternalID);
+ if (dtd->SystemID != NULL)
+ fprintf(output, ", SYSTEM %s", dtd->SystemID);
+ fprintf(output, "\n");
+ /*
+ * Do a bit of checking
+ */
+ if ((dtd->parent != NULL) && (dtd->doc != dtd->parent->doc))
+ fprintf(output, "PBM: DTD doc differs from parent's one\n");
+ if (dtd->prev == NULL) {
+ if ((dtd->parent != NULL)
+ && (dtd->parent->children != (xmlNodePtr) dtd))
+ fprintf(output,
+ "PBM: DTD has no prev and not first of list\n");
+ } else {
+ if (dtd->prev->next != (xmlNodePtr) dtd)
+ fprintf(output, "PBM: DTD prev->next : back link wrong\n");
+ }
+ if (dtd->next == NULL) {
+ if ((dtd->parent != NULL)
+ && (dtd->parent->last != (xmlNodePtr) dtd))
+ fprintf(output, "PBM: DTD has no next and not last of list\n");
+ } else {
+ if (dtd->next->prev != (xmlNodePtr) dtd)
+ fprintf(output, "PBM: DTD next->prev : forward link wrong\n");
+ }
+ if (dtd->children == NULL)
+ fprintf(output, " DTD is empty\n");
+ else
+ xmlDebugDumpNodeList(output, dtd->children, 1);
+}
+
+static void
+xmlDebugDumpEntityCallback(xmlEntityPtr cur, FILE *output) {
+ if (cur == NULL) {
+ fprintf(output, "Entity is NULL");
+ return;
+ }
+ fprintf(output, "%s : ", cur->name);
+ switch (cur->etype) {
+ case XML_INTERNAL_GENERAL_ENTITY:
+ fprintf(output, "INTERNAL GENERAL, ");
+ break;
+ case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
+ fprintf(output, "EXTERNAL PARSED, ");
+ break;
+ case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
+ fprintf(output, "EXTERNAL UNPARSED, ");
+ break;
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ fprintf(output, "INTERNAL PARAMETER, ");
+ break;
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ fprintf(output, "EXTERNAL PARAMETER, ");
+ break;
+ default:
+ fprintf(output, "UNKNOWN TYPE %d",
+ cur->etype);
+ }
+ if (cur->ExternalID != NULL)
+ fprintf(output, "ID \"%s\"", cur->ExternalID);
+ if (cur->SystemID != NULL)
+ fprintf(output, "SYSTEM \"%s\"", cur->SystemID);
+ if (cur->orig != NULL)
+ fprintf(output, "\n orig \"%s\"", cur->orig);
+ if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->content != NULL))
+ fprintf(output, "\n content \"%s\"", cur->content);
+ fprintf(output, "\n");
+}
+
+/**
+ * xmlDebugDumpEntities:
+ * @output: the FILE * for the output
+ * @doc: the document
+ *
+ * Dumps debug information for all the entities in use by the document
+ */
+void
+xmlDebugDumpEntities(FILE * output, xmlDocPtr doc)
+{
+ if (output == NULL)
+ output = stdout;
+ if (doc == NULL) {
+ fprintf(output, "DOCUMENT == NULL !\n");
+ return;
+ }
+
+ switch (doc->type) {
+ case XML_ELEMENT_NODE:
+ fprintf(output, "Error, ELEMENT found here ");
+ break;
+ case XML_ATTRIBUTE_NODE:
+ fprintf(output, "Error, ATTRIBUTE found here\n");
+ break;
+ case XML_TEXT_NODE:
+ fprintf(output, "Error, TEXT\n");
+ break;
+ case XML_CDATA_SECTION_NODE:
+ fprintf(output, "Error, CDATA_SECTION\n");
+ break;
+ case XML_ENTITY_REF_NODE:
+ fprintf(output, "Error, ENTITY_REF\n");
+ break;
+ case XML_ENTITY_NODE:
+ fprintf(output, "Error, ENTITY\n");
+ break;
+ case XML_PI_NODE:
+ fprintf(output, "Error, PI\n");
+ break;
+ case XML_COMMENT_NODE:
+ fprintf(output, "Error, COMMENT\n");
+ break;
+ case XML_DOCUMENT_NODE:
+ fprintf(output, "DOCUMENT\n");
+ break;
+ case XML_HTML_DOCUMENT_NODE:
+ fprintf(output, "HTML DOCUMENT\n");
+ break;
+ case XML_DOCUMENT_TYPE_NODE:
+ fprintf(output, "Error, DOCUMENT_TYPE\n");
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ fprintf(output, "Error, DOCUMENT_FRAG\n");
+ break;
+ case XML_NOTATION_NODE:
+ fprintf(output, "Error, NOTATION\n");
+ break;
+ default:
+ fprintf(output, "NODE_%d\n", doc->type);
+ }
+ if ((doc->intSubset != NULL) && (doc->intSubset->entities != NULL)) {
+ xmlEntitiesTablePtr table = (xmlEntitiesTablePtr)
+ doc->intSubset->entities;
+
+ fprintf(output, "Entities in internal subset\n");
+ xmlHashScan(table, (xmlHashScanner) xmlDebugDumpEntityCallback,
+ output);
+ } else
+ fprintf(output, "No entities in internal subset\n");
+ if ((doc->extSubset != NULL) && (doc->extSubset->entities != NULL)) {
+ xmlEntitiesTablePtr table = (xmlEntitiesTablePtr)
+ doc->extSubset->entities;
+
+ fprintf(output, "Entities in external subset\n");
+ xmlHashScan(table, (xmlHashScanner) xmlDebugDumpEntityCallback,
+ output);
+ } else
+ fprintf(output, "No entities in external subset\n");
+}
+
+/**
+ * xmlLsCountNode:
+ * @node: the node to count
+ *
+ * Count the children of @node.
+ *
+ * Returns the number of children of @node.
+ */
+int
+xmlLsCountNode(xmlNodePtr node) {
+ int ret = 0;
+ xmlNodePtr list = NULL;
+
+ if (node == NULL)
+ return(0);
+
+ switch (node->type) {
+ case XML_ELEMENT_NODE:
+ list = node->children;
+ break;
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ list = ((xmlDocPtr) node)->children;
+ break;
+ case XML_ATTRIBUTE_NODE:
+ list = ((xmlAttrPtr) node)->children;
+ break;
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ if (node->content != NULL) {
+ ret = xmlStrlen(node->content);
+ }
+ break;
+ case XML_ENTITY_REF_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_ENTITY_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_NAMESPACE_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ ret = 1;
+ break;
+ }
+ for (;list != NULL;ret++)
+ list = list->next;
+ return(ret);
+}
+
+/**
+ * xmlLsOneNode:
+ * @output: the FILE * for the output
+ * @node: the node to dump
+ *
+ * Dump to @output the type and name of @node.
+ */
+void
+xmlLsOneNode(FILE *output, xmlNodePtr node) {
+ if (node == NULL) {
+ fprintf(output, "NULL\n");
+ return;
+ }
+ switch (node->type) {
+ case XML_ELEMENT_NODE:
+ fprintf(output, "-");
+ break;
+ case XML_ATTRIBUTE_NODE:
+ fprintf(output, "a");
+ break;
+ case XML_TEXT_NODE:
+ fprintf(output, "t");
+ break;
+ case XML_CDATA_SECTION_NODE:
+ fprintf(output, "C");
+ break;
+ case XML_ENTITY_REF_NODE:
+ fprintf(output, "e");
+ break;
+ case XML_ENTITY_NODE:
+ fprintf(output, "E");
+ break;
+ case XML_PI_NODE:
+ fprintf(output, "p");
+ break;
+ case XML_COMMENT_NODE:
+ fprintf(output, "c");
+ break;
+ case XML_DOCUMENT_NODE:
+ fprintf(output, "d");
+ break;
+ case XML_HTML_DOCUMENT_NODE:
+ fprintf(output, "h");
+ break;
+ case XML_DOCUMENT_TYPE_NODE:
+ fprintf(output, "T");
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ fprintf(output, "F");
+ break;
+ case XML_NOTATION_NODE:
+ fprintf(output, "N");
+ break;
+ case XML_NAMESPACE_DECL:
+ fprintf(output, "n");
+ break;
+ default:
+ fprintf(output, "?");
+ }
+ if (node->type != XML_NAMESPACE_DECL) {
+ if (node->properties != NULL)
+ fprintf(output, "a");
+ else
+ fprintf(output, "-");
+ if (node->nsDef != NULL)
+ fprintf(output, "n");
+ else
+ fprintf(output, "-");
+ }
+
+ fprintf(output, " %8d ", xmlLsCountNode(node));
+
+ switch (node->type) {
+ case XML_ELEMENT_NODE:
+ if (node->name != NULL)
+ fprintf(output, "%s", (const char *) node->name);
+ break;
+ case XML_ATTRIBUTE_NODE:
+ if (node->name != NULL)
+ fprintf(output, "%s", (const char *) node->name);
+ break;
+ case XML_TEXT_NODE:
+ if (node->content != NULL) {
+ xmlDebugDumpString(output, node->content);
+ }
+ break;
+ case XML_CDATA_SECTION_NODE:
+ break;
+ case XML_ENTITY_REF_NODE:
+ if (node->name != NULL)
+ fprintf(output, "%s", (const char *) node->name);
+ break;
+ case XML_ENTITY_NODE:
+ if (node->name != NULL)
+ fprintf(output, "%s", (const char *) node->name);
+ break;
+ case XML_PI_NODE:
+ if (node->name != NULL)
+ fprintf(output, "%s", (const char *) node->name);
+ break;
+ case XML_COMMENT_NODE:
+ break;
+ case XML_DOCUMENT_NODE:
+ break;
+ case XML_HTML_DOCUMENT_NODE:
+ break;
+ case XML_DOCUMENT_TYPE_NODE:
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ break;
+ case XML_NOTATION_NODE:
+ break;
+ case XML_NAMESPACE_DECL: {
+ xmlNsPtr ns = (xmlNsPtr) node;
+
+ if (ns->prefix == NULL)
+ fprintf(output, "default -> %s", ns->href);
+ else
+ fprintf(output, "%s -> %s", ns->prefix, ns->href);
+ break;
+ }
+ default:
+ if (node->name != NULL)
+ fprintf(output, "%s", (const char *) node->name);
+ }
+ fprintf(output, "\n");
+}
+
+/**
+ * xmlBoolToText:
+ * @boolval: a bool to turn into text
+ *
+ * Convenient way to turn bool into text
+ *
+ * Returns a pointer to either "True" or "False"
+ */
+const char *
+xmlBoolToText(int boolval)
+{
+ if (boolval)
+ return("True");
+ else
+ return("False");
+}
+
+/****************************************************************
+ * *
+ * The XML shell related functions *
+ * *
+ ****************************************************************/
+
+
+
+/*
+ * TODO: Improvement/cleanups for the XML shell
+ * - allow to shell out an editor on a subpart
+ * - cleanup function registrations (with help) and calling
+ * - provide registration routines
+ */
+
+/**
+ * xmlShellPrintXPathError:
+ * @errorType: valid xpath error id
+ * @arg: the argument that cause xpath to fail
+ *
+ * Print the xpath error to libxml default error channel
+ */
+void
+xmlShellPrintXPathError(int errorType, const char *arg)
+{
+ const char *default_arg = "Result";
+
+ if (!arg)
+ arg = default_arg;
+
+ switch (errorType) {
+ case XPATH_UNDEFINED:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s: no such node\n", arg);
+ break;
+
+ case XPATH_BOOLEAN:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a Boolean\n", arg);
+ break;
+ case XPATH_NUMBER:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a number\n", arg);
+ break;
+ case XPATH_STRING:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a string\n", arg);
+ break;
+ case XPATH_POINT:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a point\n", arg);
+ break;
+ case XPATH_RANGE:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a range\n", arg);
+ break;
+ case XPATH_LOCATIONSET:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a range\n", arg);
+ break;
+ case XPATH_USERS:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is user-defined\n", arg);
+ break;
+ case XPATH_XSLT_TREE:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is an XSLT value tree\n", arg);
+ break;
+ }
+ xmlGenericError(xmlGenericErrorContext,
+ "Try casting the result string function (xpath builtin)\n",
+ arg);
+}
+
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlShellPrintNodeCtxt:
+ * @ctxt : a non-null shell context
+ * @node : a non-null node to print to the output FILE
+ *
+ * Print node to the output FILE
+ */
+static void
+xmlShellPrintNodeCtxt(xmlShellCtxtPtr ctxt,xmlNodePtr node)
+{
+ FILE *fp;
+
+ if (!node)
+ return;
+ if (ctxt == NULL)
+ fp = stdout;
+ else
+ fp = ctxt->output;
+
+ if (node->type == XML_DOCUMENT_NODE)
+ xmlDocDump(fp, (xmlDocPtr) node);
+ else if (node->type == XML_ATTRIBUTE_NODE)
+ xmlDebugDumpAttrList(fp, (xmlAttrPtr) node, 0);
+ else
+ xmlElemDump(fp, node->doc, node);
+
+ fprintf(fp, "\n");
+}
+
+/**
+ * xmlShellPrintNode:
+ * @node : a non-null node to print to the output FILE
+ *
+ * Print node to the output FILE
+ */
+void
+xmlShellPrintNode(xmlNodePtr node)
+{
+ xmlShellPrintNodeCtxt(NULL, node);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlShellPrintXPathResultCtxt:
+ * @ctxt: a valid shell context
+ * @list: a valid result generated by an xpath evaluation
+ *
+ * Prints result to the output FILE
+ */
+static void
+xmlShellPrintXPathResultCtxt(xmlShellCtxtPtr ctxt,xmlXPathObjectPtr list)
+{
+ if (!ctxt)
+ return;
+
+ if (list != NULL) {
+ switch (list->type) {
+ case XPATH_NODESET:{
+#ifdef LIBXML_OUTPUT_ENABLED
+ int indx;
+
+ if (list->nodesetval) {
+ for (indx = 0; indx < list->nodesetval->nodeNr;
+ indx++) {
+ xmlShellPrintNodeCtxt(ctxt,
+ list->nodesetval->nodeTab[indx]);
+ }
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Empty node set\n");
+ }
+ break;
+#else
+ xmlGenericError(xmlGenericErrorContext,
+ "Node set\n");
+#endif /* LIBXML_OUTPUT_ENABLED */
+ }
+ case XPATH_BOOLEAN:
+ xmlGenericError(xmlGenericErrorContext,
+ "Is a Boolean:%s\n",
+ xmlBoolToText(list->boolval));
+ break;
+ case XPATH_NUMBER:
+ xmlGenericError(xmlGenericErrorContext,
+ "Is a number:%0g\n", list->floatval);
+ break;
+ case XPATH_STRING:
+ xmlGenericError(xmlGenericErrorContext,
+ "Is a string:%s\n", list->stringval);
+ break;
+
+ default:
+ xmlShellPrintXPathError(list->type, NULL);
+ }
+ }
+}
+
+/**
+ * xmlShellPrintXPathResult:
+ * @list: a valid result generated by an xpath evaluation
+ *
+ * Prints result to the output FILE
+ */
+void
+xmlShellPrintXPathResult(xmlXPathObjectPtr list)
+{
+ xmlShellPrintXPathResultCtxt(NULL, list);
+}
+
+/**
+ * xmlShellList:
+ * @ctxt: the shell context
+ * @arg: unused
+ * @node: a node
+ * @node2: unused
+ *
+ * Implements the XML shell function "ls"
+ * Does an Unix like listing of the given node (like a directory)
+ *
+ * Returns 0
+ */
+int
+xmlShellList(xmlShellCtxtPtr ctxt,
+ char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ xmlNodePtr cur;
+ if (!ctxt)
+ return (0);
+ if (node == NULL) {
+ fprintf(ctxt->output, "NULL\n");
+ return (0);
+ }
+ if ((node->type == XML_DOCUMENT_NODE) ||
+ (node->type == XML_HTML_DOCUMENT_NODE)) {
+ cur = ((xmlDocPtr) node)->children;
+ } else if (node->type == XML_NAMESPACE_DECL) {
+ xmlLsOneNode(ctxt->output, node);
+ return (0);
+ } else if (node->children != NULL) {
+ cur = node->children;
+ } else {
+ xmlLsOneNode(ctxt->output, node);
+ return (0);
+ }
+ while (cur != NULL) {
+ xmlLsOneNode(ctxt->output, cur);
+ cur = cur->next;
+ }
+ return (0);
+}
+
+/**
+ * xmlShellBase:
+ * @ctxt: the shell context
+ * @arg: unused
+ * @node: a node
+ * @node2: unused
+ *
+ * Implements the XML shell function "base"
+ * dumps the current XML base of the node
+ *
+ * Returns 0
+ */
+int
+xmlShellBase(xmlShellCtxtPtr ctxt,
+ char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ xmlChar *base;
+ if (!ctxt)
+ return 0;
+ if (node == NULL) {
+ fprintf(ctxt->output, "NULL\n");
+ return (0);
+ }
+
+ base = xmlNodeGetBase(node->doc, node);
+
+ if (base == NULL) {
+ fprintf(ctxt->output, " No base found !!!\n");
+ } else {
+ fprintf(ctxt->output, "%s\n", base);
+ xmlFree(base);
+ }
+ return (0);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlShellSetBase:
+ * @ctxt: the shell context
+ * @arg: the new base
+ * @node: a node
+ * @node2: unused
+ *
+ * Implements the XML shell function "setbase"
+ * change the current XML base of the node
+ *
+ * Returns 0
+ */
+static int
+xmlShellSetBase(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ xmlNodeSetBase(node, (xmlChar*) arg);
+ return (0);
+}
+#endif
+
+/**
+ * xmlShellGrep:
+ * @ctxt: the shell context
+ * @arg: the string or regular expression to find
+ * @node: a node
+ * @node2: unused
+ *
+ * Implements the XML shell function "grep"
+ * dumps informations about the node (namespace, attributes, content).
+ *
+ * Returns 0
+ */
+static int
+xmlShellGrep(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ char *arg, xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ if (!ctxt)
+ return (0);
+ if (node == NULL)
+ return (0);
+ if (arg == NULL)
+ return (0);
+#ifdef LIBXML_REGEXP_ENABLED
+ if ((xmlStrchr((xmlChar *) arg, '?')) ||
+ (xmlStrchr((xmlChar *) arg, '*')) ||
+ (xmlStrchr((xmlChar *) arg, '.')) ||
+ (xmlStrchr((xmlChar *) arg, '['))) {
+ }
+#endif
+ while (node != NULL) {
+ if (node->type == XML_COMMENT_NODE) {
+ if (xmlStrstr(node->content, (xmlChar *) arg)) {
+
+ fprintf(ctxt->output, "%s : ", xmlGetNodePath(node));
+ xmlShellList(ctxt, NULL, node, NULL);
+ }
+ } else if (node->type == XML_TEXT_NODE) {
+ if (xmlStrstr(node->content, (xmlChar *) arg)) {
+
+ fprintf(ctxt->output, "%s : ", xmlGetNodePath(node->parent));
+ xmlShellList(ctxt, NULL, node->parent, NULL);
+ }
+ }
+
+ /*
+ * Browse the full subtree, deep first
+ */
+
+ if ((node->type == XML_DOCUMENT_NODE) ||
+ (node->type == XML_HTML_DOCUMENT_NODE)) {
+ node = ((xmlDocPtr) node)->children;
+ } else if ((node->children != NULL)
+ && (node->type != XML_ENTITY_REF_NODE)) {
+ /* deep first */
+ node = node->children;
+ } else if (node->next != NULL) {
+ /* then siblings */
+ node = node->next;
+ } else {
+ /* go up to parents->next if needed */
+ while (node != NULL) {
+ if (node->parent != NULL) {
+ node = node->parent;
+ }
+ if (node->next != NULL) {
+ node = node->next;
+ break;
+ }
+ if (node->parent == NULL) {
+ node = NULL;
+ break;
+ }
+ }
+ }
+ }
+ return (0);
+}
+
+/**
+ * xmlShellDir:
+ * @ctxt: the shell context
+ * @arg: unused
+ * @node: a node
+ * @node2: unused
+ *
+ * Implements the XML shell function "dir"
+ * dumps informations about the node (namespace, attributes, content).
+ *
+ * Returns 0
+ */
+int
+xmlShellDir(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ if (!ctxt)
+ return (0);
+ if (node == NULL) {
+ fprintf(ctxt->output, "NULL\n");
+ return (0);
+ }
+ if ((node->type == XML_DOCUMENT_NODE) ||
+ (node->type == XML_HTML_DOCUMENT_NODE)) {
+ xmlDebugDumpDocumentHead(ctxt->output, (xmlDocPtr) node);
+ } else if (node->type == XML_ATTRIBUTE_NODE) {
+ xmlDebugDumpAttr(ctxt->output, (xmlAttrPtr) node, 0);
+ } else {
+ xmlDebugDumpOneNode(ctxt->output, node, 0);
+ }
+ return (0);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+/**
+ * xmlShellRNGValidate:
+ * @ctxt: the shell context
+ * @schemas: the path to the Relax-NG schemas
+ * @node: a node
+ * @node2: unused
+ *
+ * Implements the XML shell function "relaxng"
+ * validating the instance against a Relax-NG schemas
+ *
+ * Returns 0
+ */
+static int
+xmlShellRNGValidate(xmlShellCtxtPtr sctxt, char *schemas,
+ xmlNodePtr node ATTRIBUTE_UNUSED,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ xmlRelaxNGPtr relaxngschemas;
+ xmlRelaxNGParserCtxtPtr ctxt;
+ xmlRelaxNGValidCtxtPtr vctxt;
+ int ret;
+
+ ctxt = xmlRelaxNGNewParserCtxt(schemas);
+ xmlRelaxNGSetParserErrors(ctxt,
+ (xmlRelaxNGValidityErrorFunc) fprintf,
+ (xmlRelaxNGValidityWarningFunc) fprintf,
+ stderr);
+ relaxngschemas = xmlRelaxNGParse(ctxt);
+ xmlRelaxNGFreeParserCtxt(ctxt);
+ if (relaxngschemas == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Relax-NG schema %s failed to compile\n", schemas);
+ return(-1);
+ }
+ vctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
+ xmlRelaxNGSetValidErrors(vctxt,
+ (xmlRelaxNGValidityErrorFunc) fprintf,
+ (xmlRelaxNGValidityWarningFunc) fprintf,
+ stderr);
+ ret = xmlRelaxNGValidateDoc(vctxt, sctxt->doc);
+ if (ret == 0) {
+ fprintf(stderr, "%s validates\n", sctxt->filename);
+ } else if (ret > 0) {
+ fprintf(stderr, "%s fails to validate\n", sctxt->filename);
+ } else {
+ fprintf(stderr, "%s validation generated an internal error\n",
+ sctxt->filename);
+ }
+ xmlRelaxNGFreeValidCtxt(vctxt);
+ if (relaxngschemas != NULL)
+ xmlRelaxNGFree(relaxngschemas);
+ return(0);
+}
+#endif
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlShellCat:
+ * @ctxt: the shell context
+ * @arg: unused
+ * @node: a node
+ * @node2: unused
+ *
+ * Implements the XML shell function "cat"
+ * dumps the serialization node content (XML or HTML).
+ *
+ * Returns 0
+ */
+int
+xmlShellCat(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED,
+ xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ if (!ctxt)
+ return (0);
+ if (node == NULL) {
+ fprintf(ctxt->output, "NULL\n");
+ return (0);
+ }
+ if (ctxt->doc->type == XML_HTML_DOCUMENT_NODE) {
+#ifdef LIBXML_HTML_ENABLED
+ if (node->type == XML_HTML_DOCUMENT_NODE)
+ htmlDocDump(ctxt->output, (htmlDocPtr) node);
+ else
+ htmlNodeDumpFile(ctxt->output, ctxt->doc, node);
+#else
+ if (node->type == XML_DOCUMENT_NODE)
+ xmlDocDump(ctxt->output, (xmlDocPtr) node);
+ else
+ xmlElemDump(ctxt->output, ctxt->doc, node);
+#endif /* LIBXML_HTML_ENABLED */
+ } else {
+ if (node->type == XML_DOCUMENT_NODE)
+ xmlDocDump(ctxt->output, (xmlDocPtr) node);
+ else
+ xmlElemDump(ctxt->output, ctxt->doc, node);
+ }
+ fprintf(ctxt->output, "\n");
+ return (0);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlShellLoad:
+ * @ctxt: the shell context
+ * @filename: the file name
+ * @node: unused
+ * @node2: unused
+ *
+ * Implements the XML shell function "load"
+ * loads a new document specified by the filename
+ *
+ * Returns 0 or -1 if loading failed
+ */
+int
+xmlShellLoad(xmlShellCtxtPtr ctxt, char *filename,
+ xmlNodePtr node ATTRIBUTE_UNUSED,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ xmlDocPtr doc;
+ int html = 0;
+
+ if (ctxt->doc != NULL)
+ html = (ctxt->doc->type == XML_HTML_DOCUMENT_NODE);
+
+ if (html) {
+#ifdef LIBXML_HTML_ENABLED
+ doc = htmlParseFile(filename, NULL);
+#else
+ fprintf(ctxt->output, "HTML support not compiled in\n");
+ doc = NULL;
+#endif /* LIBXML_HTML_ENABLED */
+ } else {
+ doc = xmlParseFile(filename);
+ }
+ if (doc != NULL) {
+ if (ctxt->loaded == 1) {
+ xmlFreeDoc(ctxt->doc);
+ }
+ ctxt->loaded = 1;
+#ifdef LIBXML_XPATH_ENABLED
+ xmlXPathFreeContext(ctxt->pctxt);
+#endif /* LIBXML_XPATH_ENABLED */
+ xmlFree(ctxt->filename);
+ ctxt->doc = doc;
+ ctxt->node = (xmlNodePtr) doc;
+#ifdef LIBXML_XPATH_ENABLED
+ ctxt->pctxt = xmlXPathNewContext(doc);
+#endif /* LIBXML_XPATH_ENABLED */
+ ctxt->filename = (char *) xmlCanonicPath((xmlChar *) filename);
+ } else
+ return (-1);
+ return (0);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlShellWrite:
+ * @ctxt: the shell context
+ * @filename: the file name
+ * @node: a node in the tree
+ * @node2: unused
+ *
+ * Implements the XML shell function "write"
+ * Write the current node to the filename, it saves the serialization
+ * of the subtree under the @node specified
+ *
+ * Returns 0 or -1 in case of error
+ */
+int
+xmlShellWrite(xmlShellCtxtPtr ctxt, char *filename, xmlNodePtr node,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ if (node == NULL)
+ return (-1);
+ if ((filename == NULL) || (filename[0] == 0)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Write command requires a filename argument\n");
+ return (-1);
+ }
+#ifdef W_OK
+ if (access((char *) filename, W_OK)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot write to %s\n", filename);
+ return (-1);
+ }
+#endif
+ switch (node->type) {
+ case XML_DOCUMENT_NODE:
+ if (xmlSaveFile((char *) filename, ctxt->doc) < -1) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to write to %s\n", filename);
+ return (-1);
+ }
+ break;
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_HTML_ENABLED
+ if (htmlSaveFile((char *) filename, ctxt->doc) < 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to write to %s\n", filename);
+ return (-1);
+ }
+#else
+ if (xmlSaveFile((char *) filename, ctxt->doc) < -1) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to write to %s\n", filename);
+ return (-1);
+ }
+#endif /* LIBXML_HTML_ENABLED */
+ break;
+ default:{
+ FILE *f;
+
+ f = fopen((char *) filename, "w");
+ if (f == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to write to %s\n", filename);
+ return (-1);
+ }
+ xmlElemDump(f, ctxt->doc, node);
+ fclose(f);
+ }
+ }
+ return (0);
+}
+
+/**
+ * xmlShellSave:
+ * @ctxt: the shell context
+ * @filename: the file name (optional)
+ * @node: unused
+ * @node2: unused
+ *
+ * Implements the XML shell function "save"
+ * Write the current document to the filename, or it's original name
+ *
+ * Returns 0 or -1 in case of error
+ */
+int
+xmlShellSave(xmlShellCtxtPtr ctxt, char *filename,
+ xmlNodePtr node ATTRIBUTE_UNUSED,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ if (ctxt->doc == NULL)
+ return (-1);
+ if ((filename == NULL) || (filename[0] == 0))
+ filename = ctxt->filename;
+#ifdef W_OK
+ if (access((char *) filename, W_OK)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot save to %s\n", filename);
+ return (-1);
+ }
+#endif
+ switch (ctxt->doc->type) {
+ case XML_DOCUMENT_NODE:
+ if (xmlSaveFile((char *) filename, ctxt->doc) < 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to save to %s\n", filename);
+ }
+ break;
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_HTML_ENABLED
+ if (htmlSaveFile((char *) filename, ctxt->doc) < 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to save to %s\n", filename);
+ }
+#else
+ if (xmlSaveFile((char *) filename, ctxt->doc) < 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to save to %s\n", filename);
+ }
+#endif /* LIBXML_HTML_ENABLED */
+ break;
+ default:
+ xmlGenericError(xmlGenericErrorContext,
+ "To save to subparts of a document use the 'write' command\n");
+ return (-1);
+
+ }
+ return (0);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#ifdef LIBXML_VALID_ENABLED
+/**
+ * xmlShellValidate:
+ * @ctxt: the shell context
+ * @dtd: the DTD URI (optional)
+ * @node: unused
+ * @node2: unused
+ *
+ * Implements the XML shell function "validate"
+ * Validate the document, if a DTD path is provided, then the validation
+ * is done against the given DTD.
+ *
+ * Returns 0 or -1 in case of error
+ */
+int
+xmlShellValidate(xmlShellCtxtPtr ctxt, char *dtd,
+ xmlNodePtr node ATTRIBUTE_UNUSED,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ xmlValidCtxt vctxt;
+ int res = -1;
+
+ vctxt.userData = stderr;
+ vctxt.error = (xmlValidityErrorFunc) fprintf;
+ vctxt.warning = (xmlValidityWarningFunc) fprintf;
+
+ if ((dtd == NULL) || (dtd[0] == 0)) {
+ res = xmlValidateDocument(&vctxt, ctxt->doc);
+ } else {
+ xmlDtdPtr subset;
+
+ subset = xmlParseDTD(NULL, (xmlChar *) dtd);
+ if (subset != NULL) {
+ res = xmlValidateDtd(&vctxt, ctxt->doc, subset);
+
+ xmlFreeDtd(subset);
+ }
+ }
+ return (res);
+}
+#endif /* LIBXML_VALID_ENABLED */
+
+/**
+ * xmlShellDu:
+ * @ctxt: the shell context
+ * @arg: unused
+ * @tree: a node defining a subtree
+ * @node2: unused
+ *
+ * Implements the XML shell function "du"
+ * show the structure of the subtree under node @tree
+ * If @tree is null, the command works on the current node.
+ *
+ * Returns 0 or -1 in case of error
+ */
+int
+xmlShellDu(xmlShellCtxtPtr ctxt,
+ char *arg ATTRIBUTE_UNUSED, xmlNodePtr tree,
+ xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ xmlNodePtr node;
+ int indent = 0, i;
+
+ if (!ctxt)
+ return (-1);
+
+ if (tree == NULL)
+ return (-1);
+ node = tree;
+ while (node != NULL) {
+ if ((node->type == XML_DOCUMENT_NODE) ||
+ (node->type == XML_HTML_DOCUMENT_NODE)) {
+ fprintf(ctxt->output, "/\n");
+ } else if (node->type == XML_ELEMENT_NODE) {
+ for (i = 0; i < indent; i++)
+ fprintf(ctxt->output, " ");
+ fprintf(ctxt->output, "%s\n", node->name);
+ } else {
+ }
+
+ /*
+ * Browse the full subtree, deep first
+ */
+
+ if ((node->type == XML_DOCUMENT_NODE) ||
+ (node->type == XML_HTML_DOCUMENT_NODE)) {
+ node = ((xmlDocPtr) node)->children;
+ } else if ((node->children != NULL)
+ && (node->type != XML_ENTITY_REF_NODE)) {
+ /* deep first */
+ node = node->children;
+ indent++;
+ } else if ((node != tree) && (node->next != NULL)) {
+ /* then siblings */
+ node = node->next;
+ } else if (node != tree) {
+ /* go up to parents->next if needed */
+ while (node != tree) {
+ if (node->parent != NULL) {
+ node = node->parent;
+ indent--;
+ }
+ if ((node != tree) && (node->next != NULL)) {
+ node = node->next;
+ break;
+ }
+ if (node->parent == NULL) {
+ node = NULL;
+ break;
+ }
+ if (node == tree) {
+ node = NULL;
+ break;
+ }
+ }
+ /* exit condition */
+ if (node == tree)
+ node = NULL;
+ } else
+ node = NULL;
+ }
+ return (0);
+}
+
+/**
+ * xmlShellPwd:
+ * @ctxt: the shell context
+ * @buffer: the output buffer
+ * @node: a node
+ * @node2: unused
+ *
+ * Implements the XML shell function "pwd"
+ * Show the full path from the root to the node, if needed building
+ * thumblers when similar elements exists at a given ancestor level.
+ * The output is compatible with XPath commands.
+ *
+ * Returns 0 or -1 in case of error
+ */
+int
+xmlShellPwd(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, char *buffer,
+ xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
+{
+ xmlChar *path;
+
+ if (node == NULL)
+ return (-1);
+
+ path = xmlGetNodePath(node);
+ if (path == NULL)
+ return (-1);
+
+ /*
+ * This test prevents buffer overflow, because this routine
+ * is only called by xmlShell, in which the second argument is
+ * 500 chars long.
+ * It is a dirty hack before a cleaner solution is found.
+ * Documentation should mention that the second argument must
+ * be at least 500 chars long, and could be stripped if too long.
+ */
+ snprintf(buffer, 499, "%s", path);
+ buffer[499] = '0';
+ xmlFree(path);
+
+ return (0);
+}
+
+/**
+ * xmlShell:
+ * @doc: the initial document
+ * @filename: the output buffer
+ * @input: the line reading function
+ * @output: the output FILE*, defaults to stdout if NULL
+ *
+ * Implements the XML shell
+ * This allow to load, validate, view, modify and save a document
+ * using a environment similar to a UNIX commandline.
+ */
+void
+xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input,
+ FILE * output)
+{
+ char prompt[500] = "/ > ";
+ char *cmdline = NULL, *cur;
+ int nbargs;
+ char command[100];
+ char arg[400];
+ int i;
+ xmlShellCtxtPtr ctxt;
+ xmlXPathObjectPtr list;
+
+ if (doc == NULL)
+ return;
+ if (filename == NULL)
+ return;
+ if (input == NULL)
+ return;
+ if (output == NULL)
+ output = stdout;
+ ctxt = (xmlShellCtxtPtr) xmlMalloc(sizeof(xmlShellCtxt));
+ if (ctxt == NULL)
+ return;
+ ctxt->loaded = 0;
+ ctxt->doc = doc;
+ ctxt->input = input;
+ ctxt->output = output;
+ ctxt->filename = (char *) xmlStrdup((xmlChar *) filename);
+ ctxt->node = (xmlNodePtr) ctxt->doc;
+
+#ifdef LIBXML_XPATH_ENABLED
+ ctxt->pctxt = xmlXPathNewContext(ctxt->doc);
+ if (ctxt->pctxt == NULL) {
+ xmlFree(ctxt);
+ return;
+ }
+#endif /* LIBXML_XPATH_ENABLED */
+ while (1) {
+ if (ctxt->node == (xmlNodePtr) ctxt->doc)
+ snprintf(prompt, sizeof(prompt), "%s > ", "/");
+ else if ((ctxt->node != NULL) && (ctxt->node->name))
+ snprintf(prompt, sizeof(prompt), "%s > ", ctxt->node->name);
+ else
+ snprintf(prompt, sizeof(prompt), "? > ");
+ prompt[sizeof(prompt) - 1] = 0;
+
+ /*
+ * Get a new command line
+ */
+ cmdline = ctxt->input(prompt);
+ if (cmdline == NULL)
+ break;
+
+ /*
+ * Parse the command itself
+ */
+ cur = cmdline;
+ nbargs = 0;
+ while ((*cur == ' ') || (*cur == '\t'))
+ cur++;
+ i = 0;
+ while ((*cur != ' ') && (*cur != '\t') &&
+ (*cur != '\n') && (*cur != '\r')) {
+ if (*cur == 0)
+ break;
+ command[i++] = *cur++;
+ }
+ command[i] = 0;
+ if (i == 0)
+ continue;
+ nbargs++;
+
+ /*
+ * Parse the argument
+ */
+ while ((*cur == ' ') || (*cur == '\t'))
+ cur++;
+ i = 0;
+ while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) {
+ if (*cur == 0)
+ break;
+ arg[i++] = *cur++;
+ }
+ arg[i] = 0;
+ if (i != 0)
+ nbargs++;
+
+ /*
+ * start interpreting the command
+ */
+ if (!strcmp(command, "exit"))
+ break;
+ if (!strcmp(command, "quit"))
+ break;
+ if (!strcmp(command, "bye"))
+ break;
+ if (!strcmp(command, "help")) {
+ fprintf(ctxt->output, "\tbase display XML base of the node\n");
+ fprintf(ctxt->output, "\tsetbase URI change the XML base of the node\n");
+ fprintf(ctxt->output, "\tbye leave shell\n");
+ fprintf(ctxt->output, "\tcat [node] display node or current node\n");
+ fprintf(ctxt->output, "\tcd [path] change directory to path or to root\n");
+ fprintf(ctxt->output, "\tdir [path] dumps informations about the node (namespace, attributes, content)\n");
+ fprintf(ctxt->output, "\tdu [path] show the structure of the subtree under path or the current node\n");
+ fprintf(ctxt->output, "\texit leave shell\n");
+ fprintf(ctxt->output, "\thelp display this help\n");
+ fprintf(ctxt->output, "\tfree display memory usage\n");
+ fprintf(ctxt->output, "\tload [name] load a new document with name\n");
+ fprintf(ctxt->output, "\tls [path] list contents of path or the current directory\n");
+#ifdef LIBXML_XPATH_ENABLED
+ fprintf(ctxt->output, "\txpath expr evaluate the XPath expression in that context and print the result\n");
+#endif /* LIBXML_XPATH_ENABLED */
+ fprintf(ctxt->output, "\tpwd display current working directory\n");
+ fprintf(ctxt->output, "\tquit leave shell\n");
+#ifdef LIBXML_OUTPUT_ENABLED
+ fprintf(ctxt->output, "\tsave [name] save this document to name or the original name\n");
+ fprintf(ctxt->output, "\twrite [name] write the current node to the filename\n");
+#endif /* LIBXML_OUTPUT_ENABLED */
+#ifdef LIBXML_VALID_ENABLED
+ fprintf(ctxt->output, "\tvalidate check the document for errors\n");
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef LIBXML_SCHEMAS_ENABLED
+ fprintf(ctxt->output, "\trelaxng rng validate the document agaisnt the Relax-NG schemas\n");
+#endif
+ fprintf(ctxt->output, "\tgrep string search for a string in the subtree\n");
+#ifdef LIBXML_VALID_ENABLED
+ } else if (!strcmp(command, "validate")) {
+ xmlShellValidate(ctxt, arg, NULL, NULL);
+#endif /* LIBXML_VALID_ENABLED */
+ } else if (!strcmp(command, "load")) {
+ xmlShellLoad(ctxt, arg, NULL, NULL);
+#ifdef LIBXML_SCHEMAS_ENABLED
+ } else if (!strcmp(command, "relaxng")) {
+ xmlShellRNGValidate(ctxt, arg, NULL, NULL);
+#endif
+#ifdef LIBXML_OUTPUT_ENABLED
+ } else if (!strcmp(command, "save")) {
+ xmlShellSave(ctxt, arg, NULL, NULL);
+ } else if (!strcmp(command, "write")) {
+ xmlShellWrite(ctxt, arg, NULL, NULL);
+#endif /* LIBXML_OUTPUT_ENABLED */
+ } else if (!strcmp(command, "grep")) {
+ xmlShellGrep(ctxt, arg, ctxt->node, NULL);
+ } else if (!strcmp(command, "free")) {
+ if (arg[0] == 0) {
+ xmlMemShow(ctxt->output, 0);
+ } else {
+ int len = 0;
+
+ sscanf(arg, "%d", &len);
+ xmlMemShow(ctxt->output, len);
+ }
+ } else if (!strcmp(command, "pwd")) {
+ char dir[500];
+
+ if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL))
+ fprintf(ctxt->output, "%s\n", dir);
+ } else if (!strcmp(command, "du")) {
+ xmlShellDu(ctxt, NULL, ctxt->node, NULL);
+ } else if (!strcmp(command, "base")) {
+ xmlShellBase(ctxt, NULL, ctxt->node, NULL);
+#ifdef LIBXML_XPATH_ENABLED
+ } else if (!strcmp(command, "xpath")) {
+ if (arg[0] == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xpath: expression required\n");
+ } else {
+ ctxt->pctxt->node = ctxt->node;
+ list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
+ xmlXPathDebugDumpObject(ctxt->output, list, 0);
+ xmlXPathFreeObject(list);
+ }
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_TREE_ENABLED
+ } else if (!strcmp(command, "setbase")) {
+ xmlShellSetBase(ctxt, arg, ctxt->node, NULL);
+#endif
+ } else if ((!strcmp(command, "ls")) || (!strcmp(command, "dir"))) {
+ int dir = (!strcmp(command, "dir"));
+
+ if (arg[0] == 0) {
+ if (dir)
+ xmlShellDir(ctxt, NULL, ctxt->node, NULL);
+ else
+ xmlShellList(ctxt, NULL, ctxt->node, NULL);
+ } else {
+ ctxt->pctxt->node = ctxt->node;
+#ifdef LIBXML_XPATH_ENABLED
+ ctxt->pctxt->node = ctxt->node;
+ list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
+#else
+ list = NULL;
+#endif /* LIBXML_XPATH_ENABLED */
+ if (list != NULL) {
+ switch (list->type) {
+ case XPATH_UNDEFINED:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s: no such node\n", arg);
+ break;
+ case XPATH_NODESET:{
+ int indx;
+
+ if (list->nodesetval == NULL)
+ break;
+
+ for (indx = 0;
+ indx < list->nodesetval->nodeNr;
+ indx++) {
+ if (dir)
+ xmlShellDir(ctxt, NULL,
+ list->nodesetval->
+ nodeTab[indx], NULL);
+ else
+ xmlShellList(ctxt, NULL,
+ list->nodesetval->
+ nodeTab[indx], NULL);
+ }
+ break;
+ }
+ case XPATH_BOOLEAN:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a Boolean\n", arg);
+ break;
+ case XPATH_NUMBER:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a number\n", arg);
+ break;
+ case XPATH_STRING:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a string\n", arg);
+ break;
+ case XPATH_POINT:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a point\n", arg);
+ break;
+ case XPATH_RANGE:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a range\n", arg);
+ break;
+ case XPATH_LOCATIONSET:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a range\n", arg);
+ break;
+ case XPATH_USERS:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is user-defined\n", arg);
+ break;
+ case XPATH_XSLT_TREE:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is an XSLT value tree\n",
+ arg);
+ break;
+ }
+#ifdef LIBXML_XPATH_ENABLED
+ xmlXPathFreeObject(list);
+#endif
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "%s: no such node\n", arg);
+ }
+ ctxt->pctxt->node = NULL;
+ }
+ } else if (!strcmp(command, "cd")) {
+ if (arg[0] == 0) {
+ ctxt->node = (xmlNodePtr) ctxt->doc;
+ } else {
+#ifdef LIBXML_XPATH_ENABLED
+ ctxt->pctxt->node = ctxt->node;
+ list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
+#else
+ list = NULL;
+#endif /* LIBXML_XPATH_ENABLED */
+ if (list != NULL) {
+ switch (list->type) {
+ case XPATH_UNDEFINED:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s: no such node\n", arg);
+ break;
+ case XPATH_NODESET:
+ if (list->nodesetval != NULL) {
+ if (list->nodesetval->nodeNr == 1) {
+ ctxt->node = list->nodesetval->nodeTab[0];
+ if ((ctxt->node != NULL) &&
+ (ctxt->node->type ==
+ XML_NAMESPACE_DECL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "cannot cd to namespace\n");
+ ctxt->node = NULL;
+ }
+ } else
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a %d Node Set\n",
+ arg,
+ list->nodesetval->nodeNr);
+ } else
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is an empty Node Set\n",
+ arg);
+ break;
+ case XPATH_BOOLEAN:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a Boolean\n", arg);
+ break;
+ case XPATH_NUMBER:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a number\n", arg);
+ break;
+ case XPATH_STRING:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a string\n", arg);
+ break;
+ case XPATH_POINT:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a point\n", arg);
+ break;
+ case XPATH_RANGE:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a range\n", arg);
+ break;
+ case XPATH_LOCATIONSET:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a range\n", arg);
+ break;
+ case XPATH_USERS:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is user-defined\n", arg);
+ break;
+ case XPATH_XSLT_TREE:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is an XSLT value tree\n",
+ arg);
+ break;
+ }
+#ifdef LIBXML_XPATH_ENABLED
+ xmlXPathFreeObject(list);
+#endif
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "%s: no such node\n", arg);
+ }
+ ctxt->pctxt->node = NULL;
+ }
+#ifdef LIBXML_OUTPUT_ENABLED
+ } else if (!strcmp(command, "cat")) {
+ if (arg[0] == 0) {
+ xmlShellCat(ctxt, NULL, ctxt->node, NULL);
+ } else {
+ ctxt->pctxt->node = ctxt->node;
+#ifdef LIBXML_XPATH_ENABLED
+ ctxt->pctxt->node = ctxt->node;
+ list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
+#else
+ list = NULL;
+#endif /* LIBXML_XPATH_ENABLED */
+ if (list != NULL) {
+ switch (list->type) {
+ case XPATH_UNDEFINED:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s: no such node\n", arg);
+ break;
+ case XPATH_NODESET:{
+ int indx;
+
+ if (list->nodesetval == NULL)
+ break;
+
+ for (indx = 0;
+ indx < list->nodesetval->nodeNr;
+ indx++) {
+ if (i > 0)
+ fprintf(ctxt->output, " -------\n");
+ xmlShellCat(ctxt, NULL,
+ list->nodesetval->
+ nodeTab[indx], NULL);
+ }
+ break;
+ }
+ case XPATH_BOOLEAN:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a Boolean\n", arg);
+ break;
+ case XPATH_NUMBER:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a number\n", arg);
+ break;
+ case XPATH_STRING:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a string\n", arg);
+ break;
+ case XPATH_POINT:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a point\n", arg);
+ break;
+ case XPATH_RANGE:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a range\n", arg);
+ break;
+ case XPATH_LOCATIONSET:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is a range\n", arg);
+ break;
+ case XPATH_USERS:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is user-defined\n", arg);
+ break;
+ case XPATH_XSLT_TREE:
+ xmlGenericError(xmlGenericErrorContext,
+ "%s is an XSLT value tree\n",
+ arg);
+ break;
+ }
+#ifdef LIBXML_XPATH_ENABLED
+ xmlXPathFreeObject(list);
+#endif
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "%s: no such node\n", arg);
+ }
+ ctxt->pctxt->node = NULL;
+ }
+#endif /* LIBXML_OUTPUT_ENABLED */
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Unknown command %s\n", command);
+ }
+ free(cmdline); /* not xmlFree here ! */
+ }
+#ifdef LIBXML_XPATH_ENABLED
+ xmlXPathFreeContext(ctxt->pctxt);
+#endif /* LIBXML_XPATH_ENABLED */
+ if (ctxt->loaded) {
+ xmlFreeDoc(ctxt->doc);
+ }
+ if (ctxt->filename != NULL)
+ xmlFree(ctxt->filename);
+ xmlFree(ctxt);
+ if (cmdline != NULL)
+ free(cmdline); /* not xmlFree here ! */
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
diff --git a/depcomp b/depcomp
new file mode 100755
index 0000000..807b991
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,423 @@
+#! /bin/sh
+
+# depcomp - compile a program generating dependencies as side-effects
+# Copyright 1999, 2000 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+ base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+ dir=`echo "$object" | sed 's,/.*$,/,'`
+ if test "$dir" = "$object"; then
+ dir=
+ fi
+ # FIXME: should be _deps on DOS.
+ depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+ "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> $depfile
+ echo >> $depfile
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> $depfile
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. This file always lives in the current directory.
+ # Also, the AIX compiler puts `$object:' at the start of each line;
+ # $object doesn't have directory information.
+ stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
+ tmpdepfile="$stripped.u"
+ outname="$stripped.o"
+ if test "$libtool" = yes; then
+ "$@" -Wc,-M
+ else
+ "$@" -M
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in `foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ tmpdepfile1="$dir.libs/$base.lo.d"
+ tmpdepfile2="$dir.libs/$base.d"
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1="$dir$base.o.d"
+ tmpdepfile2="$dir$base.d"
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile1"; then
+ tmpdepfile="$tmpdepfile1"
+ else
+ tmpdepfile="$tmpdepfile2"
+ fi
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a space and a tab in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the proprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'. We will use -o /dev/null later,
+ # however we can't do the remplacement now because
+ # `-o $object' might simply not be used
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # X makedepend
+ shift
+ cleared=no
+ for arg in "$@"; do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ -*)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the proprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the proprocessed file to stdout, regardless of -o,
+ # because we must use -o when running libtool.
+ "$@" || exit $?
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/dict.c b/dict.c
new file mode 100644
index 0000000..2ffd6a5
--- /dev/null
+++ b/dict.c
@@ -0,0 +1,738 @@
+/*
+ * dict.c: dictionary of reusable strings, just used to avoid allocation
+ * and freeing operations.
+ *
+ * Copyright (C) 2003 Daniel Veillard.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ * Author: daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+#include <libxml/tree.h>
+#include <libxml/dict.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/xmlerror.h>
+#include <libxml/globals.h>
+
+#define MAX_HASH_LEN 4
+#define MIN_DICT_SIZE 128
+#define MAX_DICT_HASH 8 * 2048
+
+/* #define ALLOW_REMOVAL */
+/* #define DEBUG_GROW */
+
+/*
+ * An entry in the dictionnary
+ */
+typedef struct _xmlDictEntry xmlDictEntry;
+typedef xmlDictEntry *xmlDictEntryPtr;
+struct _xmlDictEntry {
+ struct _xmlDictEntry *next;
+ const xmlChar *name;
+ int len;
+ int valid;
+};
+
+typedef struct _xmlDictStrings xmlDictStrings;
+typedef xmlDictStrings *xmlDictStringsPtr;
+struct _xmlDictStrings {
+ xmlDictStringsPtr next;
+ xmlChar *free;
+ xmlChar *end;
+ int size;
+ int nbStrings;
+ xmlChar array[1];
+};
+/*
+ * The entire dictionnary
+ */
+struct _xmlDict {
+ int ref_counter;
+
+ struct _xmlDictEntry *dict;
+ int size;
+ int nbElems;
+ xmlDictStringsPtr strings;
+
+ struct _xmlDict *subdict;
+};
+
+/*
+ * xmlDictAddString:
+ * @dict: the dictionnary
+ * @name: the name of the userdata
+ * @len: the length of the name, if -1 it is recomputed
+ *
+ * Add the string to the array[s]
+ *
+ * Returns the pointer of the local string, or NULL in case of error.
+ */
+static const xmlChar *
+xmlDictAddString(xmlDictPtr dict, const xmlChar *name, int namelen) {
+ xmlDictStringsPtr pool;
+ const xmlChar *ret;
+ int size = 0; /* + sizeof(_xmlDictStrings) == 1024 */
+
+ pool = dict->strings;
+ while (pool != NULL) {
+ if (pool->end - pool->free > namelen)
+ goto found_pool;
+ if (pool->size > size) size = pool->size;
+ pool = pool->next;
+ }
+ /*
+ * Not found, need to allocate
+ */
+ if (pool == NULL) {
+ if (size == 0) size = 1000;
+ else size *= 4; /* exponential growth */
+ if (size < 4 * namelen)
+ size = 4 * namelen; /* just in case ! */
+ pool = (xmlDictStringsPtr) xmlMalloc(sizeof(xmlDictStrings) + size);
+ if (pool == NULL)
+ return(NULL);
+ pool->size = size;
+ pool->nbStrings = 0;
+ pool->free = &pool->array[0];
+ pool->end = &pool->array[size];
+ pool->next = dict->strings;
+ dict->strings = pool;
+ }
+found_pool:
+ ret = pool->free;
+ memcpy(pool->free, name, namelen);
+ pool->free += namelen;
+ *(pool->free++) = 0;
+ return(ret);
+}
+
+/*
+ * xmlDictAddQString:
+ * @dict: the dictionnary
+ * @prefix: the prefix of the userdata
+ * @name: the name of the userdata
+ * @len: the length of the name, if -1 it is recomputed
+ *
+ * Add the QName to the array[s]
+ *
+ * Returns the pointer of the local string, or NULL in case of error.
+ */
+static const xmlChar *
+xmlDictAddQString(xmlDictPtr dict, const xmlChar *prefix,
+ const xmlChar *name, int namelen)
+{
+ xmlDictStringsPtr pool;
+ const xmlChar *ret;
+ int size = 0; /* + sizeof(_xmlDictStrings) == 1024 */
+ int plen;
+
+ if (prefix == NULL) return(xmlDictAddString(dict, name, namelen));
+ plen = xmlStrlen(prefix);
+
+ pool = dict->strings;
+ while (pool != NULL) {
+ if (pool->end - pool->free > namelen)
+ goto found_pool;
+ if (pool->size > size) size = pool->size;
+ pool = pool->next;
+ }
+ /*
+ * Not found, need to allocate
+ */
+ if (pool == NULL) {
+ if (size == 0) size = 1000;
+ else size *= 4; /* exponential growth */
+ if (size < 4 * namelen)
+ size = 4 * namelen; /* just in case ! */
+ pool = (xmlDictStringsPtr) xmlMalloc(sizeof(xmlDictStrings) + size);
+ if (pool == NULL)
+ return(NULL);
+ pool->size = size;
+ pool->nbStrings = 0;
+ pool->free = &pool->array[0];
+ pool->end = &pool->array[size];
+ pool->next = dict->strings;
+ dict->strings = pool;
+ }
+found_pool:
+ ret = pool->free;
+ memcpy(pool->free, prefix, plen);
+ pool->free += plen;
+ *(pool->free++) = ':';
+ namelen -= plen + 1;
+ memcpy(pool->free, name, namelen);
+ pool->free += namelen;
+ *(pool->free++) = 0;
+ return(ret);
+}
+
+/*
+ * xmlDictComputeKey:
+ * Calculate the hash key
+ */
+static unsigned long
+xmlDictComputeKey(const xmlChar *name, int namelen) {
+ unsigned long value = 0L;
+
+ if (name == NULL) return(0);
+ value = *name;
+ value <<= 5;
+ if (namelen > 10) {
+ value += name[namelen - 1];
+ namelen = 10;
+ }
+ switch (namelen) {
+ case 10: value += name[9];
+ case 9: value += name[8];
+ case 8: value += name[7];
+ case 7: value += name[6];
+ case 6: value += name[5];
+ case 5: value += name[4];
+ case 4: value += name[3];
+ case 3: value += name[2];
+ case 2: value += name[1];
+ default: break;
+ }
+ return(value);
+}
+
+/*
+ * xmlDictComputeQKey:
+ * Calculate the hash key
+ */
+static unsigned long
+xmlDictComputeQKey(const xmlChar *prefix, const xmlChar *name, int len)
+{
+ unsigned long value = 0L;
+ int plen;
+
+ if (prefix == NULL)
+ return(xmlDictComputeKey(name, len));
+
+ plen = xmlStrlen(prefix);
+ if (plen == 0)
+ value += 30 * (unsigned long) ':';
+ else
+ value += 30 * (*prefix);
+
+ if (len > 10) {
+ value += name[len - (plen + 1 + 1)];
+ len = 10;
+ if (plen > 10)
+ plen = 10;
+ }
+ switch (plen) {
+ case 10: value += prefix[9];
+ case 9: value += prefix[8];
+ case 8: value += prefix[7];
+ case 7: value += prefix[6];
+ case 6: value += prefix[5];
+ case 5: value += prefix[4];
+ case 4: value += prefix[3];
+ case 3: value += prefix[2];
+ case 2: value += prefix[1];
+ case 1: value += prefix[0];
+ default: break;
+ }
+ len -= plen;
+ if (len > 0) {
+ value += (unsigned long) ':';
+ len--;
+ }
+ switch (len) {
+ case 10: value += name[9];
+ case 9: value += name[8];
+ case 8: value += name[7];
+ case 7: value += name[6];
+ case 6: value += name[5];
+ case 5: value += name[4];
+ case 4: value += name[3];
+ case 3: value += name[2];
+ case 2: value += name[1];
+ case 1: value += name[0];
+ default: break;
+ }
+ return(value);
+}
+
+/**
+ * xmlDictCreate:
+ *
+ * Create a new dictionary
+ *
+ * Returns the newly created dictionnary, or NULL if an error occured.
+ */
+xmlDictPtr
+xmlDictCreate(void) {
+ xmlDictPtr dict;
+
+ dict = xmlMalloc(sizeof(xmlDict));
+ if (dict) {
+ dict->ref_counter = 1;
+
+ dict->size = MIN_DICT_SIZE;
+ dict->nbElems = 0;
+ dict->dict = xmlMalloc(MIN_DICT_SIZE * sizeof(xmlDictEntry));
+ dict->strings = NULL;
+ dict->subdict = NULL;
+ if (dict->dict) {
+ memset(dict->dict, 0, MIN_DICT_SIZE * sizeof(xmlDictEntry));
+ return(dict);
+ }
+ xmlFree(dict);
+ }
+ return(NULL);
+}
+
+/**
+ * xmlDictCreateSub:
+ * @sub: an existing dictionnary
+ *
+ * Create a new dictionary, inheriting strings from the read-only
+ * dictionnary @sub. On lookup, strings are first searched in the
+ * new dictionnary, then in @sub, and if not found are created in the
+ * new dictionnary.
+ *
+ * Returns the newly created dictionnary, or NULL if an error occured.
+ */
+xmlDictPtr
+xmlDictCreateSub(xmlDictPtr sub) {
+ xmlDictPtr dict = xmlDictCreate();
+
+ if ((dict != NULL) && (sub != NULL)) {
+ dict->subdict = sub;
+ xmlDictReference(dict->subdict);
+ }
+ return(dict);
+}
+
+/**
+ * xmlDictReference:
+ * @dict: the dictionnary
+ *
+ * Increment the reference counter of a dictionary
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+int
+xmlDictReference(xmlDictPtr dict) {
+ if (dict == NULL) return -1;
+ dict->ref_counter++;
+ return(0);
+}
+
+/**
+ * xmlDictGrow:
+ * @dict: the dictionnary
+ * @size: the new size of the dictionnary
+ *
+ * resize the dictionnary
+ *
+ * Returns 0 in case of success, -1 in case of failure
+ */
+static int
+xmlDictGrow(xmlDictPtr dict, int size) {
+ unsigned long key;
+ int oldsize, i;
+ xmlDictEntryPtr iter, next;
+ struct _xmlDictEntry *olddict;
+#ifdef DEBUG_GROW
+ unsigned long nbElem = 0;
+#endif
+
+ if (dict == NULL)
+ return(-1);
+ if (size < 8)
+ return(-1);
+ if (size > 8 * 2048)
+ return(-1);
+
+ oldsize = dict->size;
+ olddict = dict->dict;
+ if (olddict == NULL)
+ return(-1);
+
+ dict->dict = xmlMalloc(size * sizeof(xmlDictEntry));
+ if (dict->dict == NULL) {
+ dict->dict = olddict;
+ return(-1);
+ }
+ memset(dict->dict, 0, size * sizeof(xmlDictEntry));
+ dict->size = size;
+
+ /* If the two loops are merged, there would be situations where
+ a new entry needs to allocated and data copied into it from
+ the main dict. So instead, we run through the array twice, first
+ copying all the elements in the main array (where we can't get
+ conflicts) and then the rest, so we only free (and don't allocate)
+ */
+ for (i = 0; i < oldsize; i++) {
+ if (olddict[i].valid == 0)
+ continue;
+ key = xmlDictComputeKey(olddict[i].name, olddict[i].len) % dict->size;
+ memcpy(&(dict->dict[key]), &(olddict[i]), sizeof(xmlDictEntry));
+ dict->dict[key].next = NULL;
+#ifdef DEBUG_GROW
+ nbElem++;
+#endif
+ }
+
+ for (i = 0; i < oldsize; i++) {
+ iter = olddict[i].next;
+ while (iter) {
+ next = iter->next;
+
+ /*
+ * put back the entry in the new dict
+ */
+
+ key = xmlDictComputeKey(iter->name, iter->len) % dict->size;
+ if (dict->dict[key].valid == 0) {
+ memcpy(&(dict->dict[key]), iter, sizeof(xmlDictEntry));
+ dict->dict[key].next = NULL;
+ dict->dict[key].valid = 1;
+ xmlFree(iter);
+ } else {
+ iter->next = dict->dict[key].next;
+ dict->dict[key].next = iter;
+ }
+
+#ifdef DEBUG_GROW
+ nbElem++;
+#endif
+
+ iter = next;
+ }
+ }
+
+ xmlFree(olddict);
+
+#ifdef DEBUG_GROW
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlDictGrow : from %d to %d, %d elems\n", oldsize, size, nbElem);
+#endif
+
+ return(0);
+}
+
+/**
+ * xmlDictFree:
+ * @dict: the dictionnary
+ *
+ * Free the hash @dict and its contents. The userdata is
+ * deallocated with @f if provided.
+ */
+void
+xmlDictFree(xmlDictPtr dict) {
+ int i;
+ xmlDictEntryPtr iter;
+ xmlDictEntryPtr next;
+ int inside_dict = 0;
+ xmlDictStringsPtr pool, nextp;
+
+ if (dict == NULL)
+ return;
+
+ /* decrement the counter, it may be shared by a parser and docs */
+ dict->ref_counter--;
+ if (dict->ref_counter > 0) return;
+
+ if (dict->subdict != NULL) {
+ xmlDictFree(dict->subdict);
+ }
+
+ if (dict->dict) {
+ for(i = 0; ((i < dict->size) && (dict->nbElems > 0)); i++) {
+ iter = &(dict->dict[i]);
+ if (iter->valid == 0)
+ continue;
+ inside_dict = 1;
+ while (iter) {
+ next = iter->next;
+ if (!inside_dict)
+ xmlFree(iter);
+ dict->nbElems--;
+ inside_dict = 0;
+ iter = next;
+ }
+ inside_dict = 0;
+ }
+ xmlFree(dict->dict);
+ }
+ pool = dict->strings;
+ while (pool != NULL) {
+ nextp = pool->next;
+ xmlFree(pool);
+ pool = nextp;
+ }
+ xmlFree(dict);
+}
+
+/**
+ * xmlDictLookup:
+ * @dict: the dictionnary
+ * @name: the name of the userdata
+ * @len: the length of the name, if -1 it is recomputed
+ *
+ * Add the @name to the hash @dict if not present.
+ *
+ * Returns the internal copy of the name or NULL in case of internal error
+ */
+const xmlChar *
+xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) {
+ unsigned long key, okey, nbi = 0;
+ xmlDictEntryPtr entry;
+ xmlDictEntryPtr insert;
+ const xmlChar *ret;
+
+ if ((dict == NULL) || (name == NULL))
+ return(NULL);
+
+ if (len < 0)
+ len = xmlStrlen(name);
+
+ /*
+ * Check for duplicate and insertion location.
+ */
+ okey = xmlDictComputeKey(name, len);
+ key = okey % dict->size;
+ if (dict->dict[key].valid == 0) {
+ insert = NULL;
+ } else {
+ for (insert = &(dict->dict[key]); insert->next != NULL;
+ insert = insert->next) {
+#ifdef __GNUC__
+ if (insert->len == len) {
+ if (!memcmp(insert->name, name, len))
+ return(insert->name);
+ }
+#else
+ if ((insert->len == len) &&
+ (!xmlStrncmp(insert->name, name, len)))
+ return(insert->name);
+#endif
+ nbi++;
+ }
+#ifdef __GNUC__
+ if (insert->len == len) {
+ if (!memcmp(insert->name, name, len))
+ return(insert->name);
+ }
+#else
+ if ((insert->len == len) &&
+ (!xmlStrncmp(insert->name, name, len)))
+ return(insert->name);
+#endif
+ }
+
+ if (dict->subdict) {
+ key = okey % dict->subdict->size;
+ if (dict->subdict->dict[key].valid != 0) {
+ xmlDictEntryPtr tmp;
+
+ for (tmp = &(dict->subdict->dict[key]); tmp->next != NULL;
+ tmp = tmp->next) {
+#ifdef __GNUC__
+ if (tmp->len == len) {
+ if (!memcmp(tmp->name, name, len))
+ return(tmp->name);
+ }
+#else
+ if ((tmp->len == len) &&
+ (!xmlStrncmp(tmp->name, name, len)))
+ return(tmp->name);
+#endif
+ nbi++;
+ }
+#ifdef __GNUC__
+ if (tmp->len == len) {
+ if (!memcmp(tmp->name, name, len))
+ return(tmp->name);
+ }
+#else
+ if ((tmp->len == len) &&
+ (!xmlStrncmp(tmp->name, name, len)))
+ return(tmp->name);
+#endif
+ }
+ key = okey % dict->size;
+ }
+
+ ret = xmlDictAddString(dict, name, len);
+ if (ret == NULL)
+ return(NULL);
+ if (insert == NULL) {
+ entry = &(dict->dict[key]);
+ } else {
+ entry = xmlMalloc(sizeof(xmlDictEntry));
+ if (entry == NULL)
+ return(NULL);
+ }
+ entry->name = ret;
+ entry->len = len;
+ entry->next = NULL;
+ entry->valid = 1;
+
+
+ if (insert != NULL)
+ insert->next = entry;
+
+ dict->nbElems++;
+
+ if ((nbi > MAX_HASH_LEN) &&
+ (dict->size <= ((MAX_DICT_HASH / 2) / MAX_HASH_LEN)))
+ xmlDictGrow(dict, MAX_HASH_LEN * 2 * dict->size);
+ /* Note that entry may have been freed at this point by xmlDictGrow */
+
+ return(ret);
+}
+
+/**
+ * xmlDictQLookup:
+ * @dict: the dictionnary
+ * @prefix: the prefix
+ * @name: the name
+ *
+ * Add the QName @prefix:@name to the hash @dict if not present.
+ *
+ * Returns the internal copy of the QName or NULL in case of internal error
+ */
+const xmlChar *
+xmlDictQLookup(xmlDictPtr dict, const xmlChar *prefix, const xmlChar *name) {
+ unsigned long okey, key, nbi = 0;
+ xmlDictEntryPtr entry;
+ xmlDictEntryPtr insert;
+ const xmlChar *ret;
+ int len;
+
+ if ((dict == NULL) || (name == NULL))
+ return(NULL);
+
+ len = xmlStrlen(name);
+ if (prefix != NULL)
+ len += 1 + xmlStrlen(prefix);
+
+ /*
+ * Check for duplicate and insertion location.
+ */
+ okey = xmlDictComputeQKey(prefix, name, len);
+ key = okey % dict->size;
+ if (dict->dict[key].valid == 0) {
+ insert = NULL;
+ } else {
+ for (insert = &(dict->dict[key]); insert->next != NULL;
+ insert = insert->next) {
+ if ((insert->len == len) &&
+ (xmlStrQEqual(prefix, name, insert->name)))
+ return(insert->name);
+ nbi++;
+ }
+ if ((insert->len == len) &&
+ (xmlStrQEqual(prefix, name, insert->name)))
+ return(insert->name);
+ }
+
+ if (dict->subdict) {
+ key = okey % dict->subdict->size;
+ if (dict->subdict->dict[key].valid != 0) {
+ xmlDictEntryPtr tmp;
+ for (tmp = &(dict->subdict->dict[key]); tmp->next != NULL;
+ tmp = tmp->next) {
+ if ((tmp->len == len) &&
+ (xmlStrQEqual(prefix, name, tmp->name)))
+ return(tmp->name);
+ nbi++;
+ }
+ if ((tmp->len == len) &&
+ (xmlStrQEqual(prefix, name, tmp->name)))
+ return(tmp->name);
+ }
+ key = okey % dict->size;
+ }
+
+ ret = xmlDictAddQString(dict, prefix, name, len);
+ if (ret == NULL)
+ return(NULL);
+ if (insert == NULL) {
+ entry = &(dict->dict[key]);
+ } else {
+ entry = xmlMalloc(sizeof(xmlDictEntry));
+ if (entry == NULL)
+ return(NULL);
+ }
+ entry->name = ret;
+ entry->len = len;
+ entry->next = NULL;
+ entry->valid = 1;
+
+ if (insert != NULL)
+ insert->next = entry;
+
+ dict->nbElems++;
+
+ if ((nbi > MAX_HASH_LEN) &&
+ (dict->size <= ((MAX_DICT_HASH / 2) / MAX_HASH_LEN)))
+ xmlDictGrow(dict, MAX_HASH_LEN * 2 * dict->size);
+ /* Note that entry may have been freed at this point by xmlDictGrow */
+
+ return(ret);
+}
+
+/**
+ * xmlDictOwns:
+ * @dict: the dictionnary
+ * @str: the string
+ *
+ * check if a string is owned by the disctionary
+ *
+ * Returns 1 if true, 0 if false and -1 in case of error
+ * -1 in case of error
+ */
+int
+xmlDictOwns(xmlDictPtr dict, const xmlChar *str) {
+ xmlDictStringsPtr pool;
+
+ if ((dict == NULL) || (str == NULL))
+ return(-1);
+ pool = dict->strings;
+ while (pool != NULL) {
+ if ((str >= pool->array) && (str <= pool->free))
+ return(1);
+ pool = pool->next;
+ }
+ if (dict->subdict)
+ return(xmlDictOwns(dict->subdict, str));
+ return(0);
+}
+
+/**
+ * xmlDictSize:
+ * @dict: the dictionnary
+ *
+ * Query the number of elements installed in the hash @dict.
+ *
+ * Returns the number of elements in the dictionnary or
+ * -1 in case of error
+ */
+int
+xmlDictSize(xmlDictPtr dict) {
+ if (dict == NULL)
+ return(-1);
+ if (dict->subdict)
+ return(dict->nbElems + dict->subdict->nbElems);
+ return(dict->nbElems);
+}
+
+
diff --git a/doc/APIchunk0.html b/doc/APIchunk0.html
new file mode 100644
index 0000000..d7a5ef0
--- /dev/null
+++ b/doc/APIchunk0.html
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index A-B for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index A-B for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter A:</h2><dl><dt>A-Z</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>A-Za-z</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEncName">xmlParseEncName</a><br />
+</dd><dt>A-Za-z0-9</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEncName">xmlParseEncName</a><br />
+</dd><dt>ABC</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>ALL</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</a><br />
+</dd><dt>ANY</dt><dd><a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+</dd><dt>API</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a><br />
+<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidateDoc">xmlRelaxNGValidateDoc</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+</dd><dt>APIs</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_LEGACY_ENABLED">LIBXML_LEGACY_ENABLED</a><br />
+</dd><dt>ARRAY</dt><dd><a href="html/libxml-xmlstring.html#xmlStrlen">xmlStrlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
+</dd><dt>ASCII</dt><dd><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
+<a href="html/libxml-encoding.html#xmlDelEncodingAlias">xmlDelEncodingAlias</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-encoding.html#xmlGetEncodingAlias">xmlGetEncodingAlias</a><br />
+<a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+</dd><dt>ATTLIST</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDAttlist">xmlTextWriterStartDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDAttlist">xmlTextWriterWriteDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDAttlist">xmlTextWriterWriteFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a><br />
+</dd><dt>ATTRIBUTE</dt><dd><a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+</dd><dt>Absolute</dt><dd><a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+</dd><dt>Activation</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>Add</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddChildList">xmlAddChildList</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
+<a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
+<a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</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-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+</dd><dt>Additional</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-globals.html#xmlCleanupGlobals">xmlCleanupGlobals</a><br />
+<a href="html/libxml-globals.html#xmlInitGlobals">xmlInitGlobals</a><br />
+</dd><dt>AegeanNumbers</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsAegeanNumbers">xmlUCSIsAegeanNumbers</a><br />
+</dd><dt>All</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
+</dd><dt>Allocate</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPNewCtxt">xmlNanoFTPNewCtxt</a><br />
+<a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
+<a href="html/libxml-parser.html#xmlNewParserCtxt">xmlNewParserCtxt</a><br />
+<a href="html/libxml-valid.html#xmlNewValidCtxt">xmlNewValidCtxt</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewFacet">xmlSchemaNewFacet</a><br />
+</dd><dt>Allows</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+</dd><dt>AlphabeticPresentationForms</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsAlphabeticPresentationForms">xmlUCSIsAlphabeticPresentationForms</a><br />
+</dd><dt>Also</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+</dd><dt>Always</dt><dd><a href="html/libxml-parserInternals.html#IS_COMBINING_CH">IS_COMBINING_CH</a><br />
+</dd><dt>Append</dt><dd><a href="html/libxml-tree.html#xmlBufferCCat">xmlBufferCCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferCat">xmlBufferCat</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContent">xmlNodeAddContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
+</dd><dt>Appendix</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+</dd><dt>Applies</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtUseOptions">htmlCtxtUseOptions</a><br />
+<a href="html/libxml-parser.html#xmlCtxtUseOptions">xmlCtxtUseOptions</a><br />
+<a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+</dd><dt>Apply</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_STRICT">XML_SCHEMAS_ANYATTR_STRICT</a><br />
+</dd><dt>Arabic</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsArabic">xmlUCSIsArabic</a><br />
+</dd><dt>ArabicPresentationForms-A</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsArabicPresentationFormsA">xmlUCSIsArabicPresentationFormsA</a><br />
+</dd><dt>ArabicPresentationForms-B</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsArabicPresentationFormsB">xmlUCSIsArabicPresentationFormsB</a><br />
+</dd><dt>Armenian</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsArmenian">xmlUCSIsArmenian</a><br />
+</dd><dt>Array</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+</dd><dt>Arrows</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsArrows">xmlUCSIsArrows</a><br />
+</dd><dt>Associate</dt><dd><a href="html/libxml-tree.html#xmlSetNs">xmlSetNs</a><br />
+</dd><dt>Att</dt><dd><a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>AttDef</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a><br />
+</dd><dt>AttType</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>AttValue</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>AttlistDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>Attribute</dt><dd><a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsDefault">xmlTextReaderIsDefault</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToElement">xmlTextReaderMoveToElement</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</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 />
+</dd><dt>Attribute-Value</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>Attributes</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+</dd><dt>Automatic</dt><dd><a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateFileParserCtxt">xmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-parser.html#xmlParseFile">xmlParseFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-parser.html#xmlRecoverFile">xmlRecoverFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+</dd><dt>Automatically</dt><dd><a href="html/libxml-chvalid.html#xmlIsBaseCharQ">xmlIsBaseCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar_ch">xmlIsBaseChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlankQ">xmlIsBlankQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank_ch">xmlIsBlank_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCharQ">xmlIsCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar_ch">xmlIsChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombiningQ">xmlIsCombiningQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigitQ">xmlIsDigitQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit_ch">xmlIsDigit_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtenderQ">xmlIsExtenderQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender_ch">xmlIsExtender_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographicQ">xmlIsIdeographicQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidCharQ">xmlIsPubidCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar_ch">xmlIsPubidChar_ch</a><br />
+</dd></dl><h2>Letter B:</h2><dl><dt>BASE</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+</dd><dt>BAr</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>BOM</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>Balanced</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+</dd><dt>Base</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+</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 />
+<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>Before</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>Behaves</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 />
+</dd><dt>Behaviour</dt><dd><a href="html/libxml-parserInternals.html#IS_BLANK_CH">IS_BLANK_CH</a><br />
+</dd><dt>Bengali</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsBengali">xmlUCSIsBengali</a><br />
+</dd><dt>BinHex</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a><br />
+</dd><dt>Bit</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 />
+</dd><dt>BlockElements</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsBlockElements">xmlUCSIsBlockElements</a><br />
+</dd><dt>Blocks</dt><dd><a href="html/libxml-parser.html#xmlStopParser">xmlStopParser</a><br />
+</dd><dt>Bopomofo</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsBopomofo">xmlUCSIsBopomofo</a><br />
+</dd><dt>BopomofoExtended</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsBopomofoExtended">xmlUCSIsBopomofoExtended</a><br />
+</dd><dt>Both</dt><dd><a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</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>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 />
+</dd><dt>Build</dt><dd><a href="html/libxml-valid.html#xmlCopyAttributeTable">xmlCopyAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlCopyElementContent">xmlCopyElementContent</a><br />
+<a href="html/libxml-valid.html#xmlCopyElementTable">xmlCopyElementTable</a><br />
+<a href="html/libxml-entities.html#xmlCopyEntitiesTable">xmlCopyEntitiesTable</a><br />
+<a href="html/libxml-valid.html#xmlCopyNotationTable">xmlCopyNotationTable</a><br />
+<a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+<a href="html/libxml-valid.html#xmlValidBuildContentModel">xmlValidBuildContentModel</a><br />
+<a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+</dd><dt>Builds</dt><dd><a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+</dd><dt>But</dt><dd><a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+</dd><dt>ByzantineMusicalSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsByzantineMusicalSymbols">xmlUCSIsByzantineMusicalSymbols</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk1.html b/doc/APIchunk1.html
new file mode 100644
index 0000000..fcb4784
--- /dev/null
+++ b/doc/APIchunk1.html
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index C-C for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index C-C for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter C:</h2><dl><dt>C14N</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>CATALOG</dt><dd><a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+</dd><dt>CDATA</dt><dd><a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
+<a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-tree.html#xmlNewCDataBlock">xmlNewCDataBlock</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndCDATA">xmlTextWriterEndCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteCDATA">xmlTextWriterWriteCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatCDATA">xmlTextWriterWriteFormatCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatCDATA">xmlTextWriterWriteVFormatCDATA</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+</dd><dt>CDEnd</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+</dd><dt>CDSect</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseContent">xmlParseContent</a><br />
+</dd><dt>CDStart</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+</dd><dt>CData</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushCData">xmlValidatePushCData</a><br />
+</dd><dt>CJKCompatibility</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibility">xmlUCSIsCJKCompatibility</a><br />
+</dd><dt>CJKCompatibilityForms</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibilityForms">xmlUCSIsCJKCompatibilityForms</a><br />
+</dd><dt>CJKCompatibilityIdeographs</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibilityIdeographs">xmlUCSIsCJKCompatibilityIdeographs</a><br />
+</dd><dt>CJKCompatibilityIdeographsSupplement</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibilityIdeographsSupplement">xmlUCSIsCJKCompatibilityIdeographsSupplement</a><br />
+</dd><dt>CJKRadicalsSupplement</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCJKRadicalsSupplement">xmlUCSIsCJKRadicalsSupplement</a><br />
+</dd><dt>CJKSymbolsandPunctuation</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCJKSymbolsandPunctuation">xmlUCSIsCJKSymbolsandPunctuation</a><br />
+</dd><dt>CJKUnifiedIdeographs</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCJKUnifiedIdeographs">xmlUCSIsCJKUnifiedIdeographs</a><br />
+</dd><dt>CJKUnifiedIdeographsExtensionA</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCJKUnifiedIdeographsExtensionA">xmlUCSIsCJKUnifiedIdeographsExtensionA</a><br />
+</dd><dt>CJKUnifiedIdeographsExtensionB</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCJKUnifiedIdeographsExtensionB">xmlUCSIsCJKUnifiedIdeographsExtensionB</a><br />
+</dd><dt>CWD</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+</dd><dt>Call</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>Callback</dt><dd><a href="html/libxml-SAX.html#externalSubset">externalSubset</a><br />
+<a href="html/libxml-parser.html#externalSubsetSAXFunc">externalSubsetSAXFunc</a><br />
+<a href="html/libxml-SAX.html#internalSubset">internalSubset</a><br />
+<a href="html/libxml-parser.html#internalSubsetSAXFunc">internalSubsetSAXFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-hash.html#xmlHashCopier">xmlHashCopier</a><br />
+<a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
+<a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a><br />
+<a href="html/libxml-list.html#xmlListDataCompare">xmlListDataCompare</a><br />
+<a href="html/libxml-list.html#xmlListDeallocator">xmlListDeallocator</a><br />
+<a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a><br />
+<a href="html/libxml-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ExternalSubset">xmlSAX2ExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InternalSubset">xmlSAX2InternalSubset</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+</dd><dt>Callback:</dt><dd><a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
+</dd><dt>Called</dt><dd><a href="html/libxml-parser.html#cdataBlockSAXFunc">cdataBlockSAXFunc</a><br />
+<a href="html/libxml-parser.html#endDocumentSAXFunc">endDocumentSAXFunc</a><br />
+<a href="html/libxml-parser.html#endElementSAXFunc">endElementSAXFunc</a><br />
+<a href="html/libxml-parser.html#referenceSAXFunc">referenceSAXFunc</a><br />
+<a href="html/libxml-parser.html#startDocumentSAXFunc">startDocumentSAXFunc</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+</dd><dt>Calling</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+</dd><dt>Canonical</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>Canonicalization</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_C14N_ENABLED">LIBXML_C14N_ENABLED</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>Carl</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>Catalog</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_CATALOG_ENABLED">LIBXML_CATALOG_ENABLED</a><br />
+<a href="html/libxml-catalog.html#XML_CATALOG_PI">XML_CATALOG_PI</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogDump">xmlACatalogDump</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolvePublic">xmlACatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveSystem">xmlACatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveURI">xmlACatalogResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+<a href="html/libxml-catalog.html#xmlFreeCatalog">xmlFreeCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlNewCatalog">xmlNewCatalog</a><br />
+</dd><dt>Catalogs</dt><dd><a href="html/libxml-catalog.html#XML_CATALOGS_NAMESPACE">XML_CATALOGS_NAMESPACE</a><br />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+</dd><dt>Change</dt><dd><a href="html/libxml-parser.html#xmlSetFeature">xmlSetFeature</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+</dd><dt>Changes</dt><dd><a href="html/libxml-parser.html#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</a><br />
+</dd><dt>Char</dt><dd><a href="html/libxml-parserInternals.html#IS_BYTE_CHAR">IS_BYTE_CHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePI">xmlParsePI</a><br />
+</dd><dt>CharData</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseContent">xmlParseContent</a><br />
+</dd><dt>CharRef</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseCharRef">htmlParseCharRef</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</dd><dt>Character</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-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+</dd><dt>Characters</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+</dd><dt>Checks</dt><dd><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementAllowedHereDesc">htmlElementAllowedHereDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataIsDeterminist">xmlAutomataIsDeterminist</a><br />
+<a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetIsEmpty">xmlXPathNodeSetIsEmpty</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStackIsExternal">xmlXPathStackIsExternal</a><br />
+</dd><dt>Cherokee</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCherokee">xmlUCSIsCherokee</a><br />
+</dd><dt>Children</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+</dd><dt>Chunk</dt><dd><a href="html/libxml-DOCBparser.html#docbParseChunk">docbParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseChunk">htmlParseChunk</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
+</dd><dt>Cleanup</dt><dd><a href="html/libxml-encoding.html#xmlCleanupCharEncodingHandlers">xmlCleanupCharEncodingHandlers</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-entities.html#xmlCleanupPredefinedEntities">xmlCleanupPredefinedEntities</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCleanup">xmlNanoFTPCleanup</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPCleanup">xmlNanoHTTPCleanup</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGCleanupTypes">xmlRelaxNGCleanupTypes</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetError">xmlResetError</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetLastError">xmlResetLastError</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCleanupTypes">xmlSchemaCleanupTypes</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeValue">xmlSchemaFreeValue</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredFuncsCleanup">xmlXPathRegisteredFuncsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredNsCleanup">xmlXPathRegisteredNsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredVariablesCleanup">xmlXPathRegisteredVariablesCleanup</a><br />
+</dd><dt>Clear</dt><dd><a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
+<a href="html/libxml-parser.html#xmlClearParserCtxt">xmlClearParserCtxt</a><br />
+</dd><dt>Clears</dt><dd><a href="html/libxml-parser.html#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a><br />
+</dd><dt>Close</dt><dd><a href="html/libxml-xmlIO.html#xmlFileClose">xmlFileClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPClose">xmlIOFTPClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPClose">xmlIOHTTPClose</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPClose">xmlNanoFTPClose</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCloseConnection">xmlNanoFTPCloseConnection</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveClose">xmlSaveClose</a><br />
+</dd><dt>Closed</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
+</dd><dt>CombiningChar</dt><dd><a href="html/libxml-parserInternals.html#IS_COMBINING">IS_COMBINING</a><br />
+<a href="html/libxml-parserInternals.html#xmlNamespaceParseNCName">xmlNamespaceParseNCName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseName">xmlXPathParseName</a><br />
+</dd><dt>CombiningDiacriticalMarks</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningDiacriticalMarks">xmlUCSIsCombiningDiacriticalMarks</a><br />
+</dd><dt>CombiningDiacriticalMarksforSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningDiacriticalMarksforSymbols">xmlUCSIsCombiningDiacriticalMarksforSymbols</a><br />
+</dd><dt>CombiningHalfMarks</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningHalfMarks">xmlUCSIsCombiningHalfMarks</a><br />
+</dd><dt>CombiningMarksforSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningMarksforSymbols">xmlUCSIsCombiningMarksforSymbols</a><br />
+</dd><dt>Comment</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseContent">xmlParseContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMisc">xmlParseMisc</a><br />
+</dd><dt>Compare</dt><dd><a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCompareValues">xmlSchemaCompareValues</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCmpNodes">xmlXPathCmpNodes</a><br />
+</dd><dt>Compile</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+</dd><dt>Compress</dt><dd><a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateFileParserCtxt">xmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-parser.html#xmlParseFile">xmlParseFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-parser.html#xmlRecoverFile">xmlRecoverFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+</dd><dt>Computes</dt><dd><a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+</dd><dt>Concat</dt><dd><a href="html/libxml-tree.html#xmlTextConcat">xmlTextConcat</a><br />
+</dd><dt>Constructs</dt><dd><a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+</dd><dt>Content</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+</dd><dt>Content-Type</dt><dd><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 />
+</dd><dt>Contrary</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+</dd><dt>ControlPictures</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsControlPictures">xmlUCSIsControlPictures</a><br />
+</dd><dt>Convenient</dt><dd><a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+</dd><dt>Convert</dt><dd><a href="html/libxml-catalog.html#xmlCatalogConvert">xmlCatalogConvert</a><br />
+<a href="html/libxml-catalog.html#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a><br />
+</dd><dt>Converts</dt><dd><a href="html/libxml-xpath.html#xmlXPathCastBooleanToNumber">xmlXPathCastBooleanToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastBooleanToString">xmlXPathCastBooleanToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToBoolean">xmlXPathCastNodeSetToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToNumber">xmlXPathCastNodeSetToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToString">xmlXPathCastNodeSetToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToNumber">xmlXPathCastNodeToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToString">xmlXPathCastNodeToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNumberToBoolean">xmlXPathCastNumberToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNumberToString">xmlXPathCastNumberToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastStringToBoolean">xmlXPathCastStringToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastStringToNumber">xmlXPathCastStringToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToBoolean">xmlXPathCastToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToNumber">xmlXPathCastToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToString">xmlXPathCastToString</a><br />
+<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>Copy</dt><dd><a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
+<a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>Correct</dt><dd><a href="html/libxml-tree.html#xmlSetCompressMode">xmlSetCompressMode</a><br />
+<a href="html/libxml-tree.html#xmlSetDocCompressMode">xmlSetDocCompressMode</a><br />
+</dd><dt>Count</dt><dd><a href="html/libxml-debugXML.html#xmlLsCountNode">xmlLsCountNode</a><br />
+</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-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 />
+<a href="html/libxml-tree.html#xmlNewCharRef">xmlNewCharRef</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewComment">xmlNewComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocComment">xmlNewDocComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocFragment">xmlNewDocFragment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocText">xmlNewDocText</a><br />
+<a href="html/libxml-tree.html#xmlNewDocTextLen">xmlNewDocTextLen</a><br />
+<a href="html/libxml-tree.html#xmlNewDtd">xmlNewDtd</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+<a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-tree.html#xmlNewPI">xmlNewPI</a><br />
+<a href="html/libxml-tree.html#xmlNewReference">xmlNewReference</a><br />
+<a href="html/libxml-tree.html#xmlNewText">xmlNewText</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextLen">xmlNewTextLen</a><br />
+</dd><dt>CurrencySymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCurrencySymbols">xmlUCSIsCurrencySymbols</a><br />
+</dd><dt>Current</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+</dd><dt>Currently</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+</dd><dt>Cut</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>CypriotSyllabary</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCypriotSyllabary">xmlUCSIsCypriotSyllabary</a><br />
+</dd><dt>Cyrillic</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCyrillic">xmlUCSIsCyrillic</a><br />
+</dd><dt>CyrillicSupplement</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCyrillicSupplement">xmlUCSIsCyrillicSupplement</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk10.html b/doc/APIchunk10.html
new file mode 100644
index 0000000..baeacb6
--- /dev/null
+++ b/doc/APIchunk10.html
@@ -0,0 +1,807 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index c-c for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index c-c for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter c:</h2><dl><dt>cae</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+</dd><dt>calculates</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Size">xmlUTF8Size</a><br />
+</dd><dt>call</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-entities.html#xmlCleanupPredefinedEntities">xmlCleanupPredefinedEntities</a><br />
+<a href="html/libxml-valid.html#xmlFreeElementContent">xmlFreeElementContent</a><br />
+<a href="html/libxml-entities.html#xmlInitializePredefinedEntities">xmlInitializePredefinedEntities</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#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+<a href="html/libxml-parserInternals.html#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+</dd><dt>callbacks</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+</dd><dt>calling</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathModValues">xmlXPathModValues</a><br />
+<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>calls</dt><dd><a href="html/libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>came</dt><dd><a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
+</dd><dt>cannot</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+</dd><dt>canonic</dt><dd><a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+</dd><dt>canonical</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+</dd><dt>canonicalization</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>canonicalized</dt><dd><a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+</dd><dt>canonization</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>canonized</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 />
+<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>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 />
+<a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</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-tree.html#xmlUnsetNsProp">xmlUnsetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlUnsetProp">xmlUnsetProp</a><br />
+</dd><dt>carries</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+</dd><dt>carrying</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+</dd><dt>case-ignoring</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+</dd><dt>cases</dt><dd><a href="html/libxml-parser.html#XML_SKIP_IDS">XML_SKIP_IDS</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>cast</dt><dd><a href="html/libxml-xmlstring.html#BAD_CAST">BAD_CAST</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_BOOLEAN">CAST_TO_BOOLEAN</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_NUMBER">CAST_TO_NUMBER</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_STRING">CAST_TO_STRING</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertFunc">xmlXPathConvertFunc</a><br />
+</dd><dt>cat</dt><dd><a href="html/libxml-debugXML.html#xmlShellCat">xmlShellCat</a><br />
+</dd><dt>catalogs</dt><dd><a href="html/libxml-catalog.html#xmlACatalogDump">xmlACatalogDump</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogCleanup">xmlCatalogCleanup</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogDump">xmlCatalogDump</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogFreeLocal">xmlCatalogFreeLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDefaults">xmlCatalogSetDefaults</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+</dd><dt>category</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsCat">xmlUCSIsCat</a><br />
+</dd><dt>cause</dt><dd><a href="html/libxml-debugXML.html#xmlShellPrintXPathError">xmlShellPrintXPathError</a><br />
+</dd><dt>ceiling</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a><br />
+</dd><dt>chained</dt><dd><a href="html/libxml-tree.html#xmlFreeNsList">xmlFreeNsList</a><br />
+</dd><dt>change</dt><dd><a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetLastError">xmlResetLastError</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchEncoding">xmlSwitchEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchToEncoding">xmlSwitchToEncoding</a><br />
+</dd><dt>changed</dt><dd><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-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+</dd><dt>changes</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
+</dd><dt>changing</dt><dd><a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+</dd><dt>channel</dt><dd><a href="html/libxml-xmlIO.html#xmlFileClose">xmlFileClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPClose">xmlIOFTPClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPOpen">xmlIOFTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPRead">xmlIOFTPRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPClose">xmlIOHTTPClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpen">xmlIOHTTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPRead">xmlIOHTTPRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferFlush">xmlOutputBufferFlush</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathError">xmlShellPrintXPathError</a><br />
+</dd><dt>characters</dt><dd><a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</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#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>charencoding</dt><dd><a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+</dd><dt>chars??</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
+</dd><dt>charset</dt><dd><a href="html/libxml-xmlIO.html#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+</dd><dt>checked</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-tree.html#xmlSetNsProp">xmlSetNsProp</a><br />
+</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-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>checks</dt><dd><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-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-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#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-xpathInternals.html#xmlXPathNodeSetContains">xmlXPathNodeSetContains</a><br />
+</dd><dt>child-</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+</dd><dt>childrens</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+</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>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 />
+<a href="html/libxml-HTMLparser.html#htmlParseChunk">htmlParseChunk</a><br />
+<a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+</dd><dt>cleanly</dt><dd><a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+</dd><dt>cleans</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</dd><dt>cleanup</dt><dd><a href="html/libxml-globals.html#xmlCleanupGlobals">xmlCleanupGlobals</a><br />
+<a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCleanup">xmlNanoFTPCleanup</a><br />
+</dd><dt>clear</dt><dd><a href="html/libxml-list.html#xmlListMerge">xmlListMerge</a><br />
+</dd><dt>clears</dt><dd><a href="html/libxml-xmlIO.html#xmlCleanupInputCallbacks">xmlCleanupInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</a><br />
+</dd><dt>client</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>close</dt><dd><a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncCloseFunc">xmlCharEncCloseFunc</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-parser.html#xmlReadIO">xmlReadIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
+</dd><dt>closed</dt><dd><a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
+</dd><dt>closes</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPClose">xmlNanoHTTPClose</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
+</dd><dt>closest</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#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+</dd><dt>closing</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>cncerning</dt><dd><a href="html/libxml-debugXML.html#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a><br />
+</dd><dt>collapse</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_COLLAPSE">XML_SCHEMAS_FACET_COLLAPSE</a><br />
+</dd><dt>collect</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+</dd><dt>collected</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+</dd><dt>colon</dt><dd><a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+</dd><dt>column</dt><dd><a href="html/libxml-SAX.html#getColumnNumber">getColumnNumber</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetColumnNumber">xmlSAX2GetColumnNumber</a><br />
+</dd><dt>com</dt><dd><a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+</dd><dt>combining</dt><dd><a href="html/libxml-parserInternals.html#IS_COMBINING_CH">IS_COMBINING_CH</a><br />
+</dd><dt>coment</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterEndComment">xmlTextWriterEndComment</a><br />
+</dd><dt>coming</dt><dd><a href="html/libxml-xinclude.html#xmlXIncludeProcessNode">xmlXIncludeProcessNode</a><br />
+</dd><dt>command</dt><dd><a href="html/libxml-nanoftp.html#ftpDataCallback">ftpDataCallback</a><br />
+<a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPQuit">xmlNanoFTPQuit</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+</dd><dt>commandline</dt><dd><a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+</dd><dt>commands</dt><dd><a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+</dd><dt>comment</dt><dd><a href="html/libxml-HTMLtree.html#HTML_COMMENT_NODE">HTML_COMMENT_NODE</a><br />
+<a href="html/libxml-SAX.html#comment">comment</a><br />
+<a href="html/libxml-parser.html#commentSAXFunc">commentSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlNewComment">xmlNewComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocComment">xmlNewDocComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartComment">xmlTextWriterStartComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteComment">xmlTextWriterWriteComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatComment">xmlTextWriterWriteVFormatComment</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIsNodeType">xmlXPathIsNodeType</a><br />
+</dd><dt>comments</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+</dd><dt>commodity</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>common</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+</dd><dt>comp</dt><dd><a href="html/libxml-pattern.html#xmlFreePattern">xmlFreePattern</a><br />
+<a href="html/libxml-pattern.html#xmlFreePatternList">xmlFreePatternList</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeCompExpr">xmlXPathFreeCompExpr</a><br />
+</dd><dt>compare</dt><dd><a href="html/libxml-list.html#xmlListDataCompare">xmlListDataCompare</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Charcmp">xmlUTF8Charcmp</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>compared</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>compares</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Charcmp">xmlUTF8Charcmp</a><br />
+</dd><dt>comparing</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>comparison</dt><dd><a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-list.html#xmlListCreate">xmlListCreate</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<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 />
+<a href="html/libxml-xmlstring.html#xmlStrncmp">xmlStrncmp</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>comparisons</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>compatibility</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_LEGACY_ENABLED">LIBXML_LEGACY_ENABLED</a><br />
+<a href="html/libxml-tree.html#xmlChildrenNode">xmlChildrenNode</a><br />
+<a href="html/libxml-parserInternals.html#xmlCopyChar">xmlCopyChar</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-tree.html#xmlRootNode">xmlRootNode</a><br />
+</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-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 />
+</dd><dt>compile</dt><dd><a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+</dd><dt>compile-time</dt><dd><a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateFileParserCtxt">xmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-parser.html#xmlParseFile">xmlParseFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-parser.html#xmlRecoverFile">xmlRecoverFile</a><br />
+<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_LEGACY_ENABLED">LIBXML_LEGACY_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_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-xmlerror.html#xmlGetLastError">xmlGetLastError</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 />
+<a href="html/libxml-xmlregexp.html#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpPrint">xmlRegexpPrint</a><br />
+<a href="html/libxml-tree.html#xmlSaveFile">xmlSaveFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
+</dd><dt>compiled-in</dt><dd><a href="html/libxml-xmlIO.html#xmlCleanupInputCallbacks">xmlCleanupInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultInputCallbacks">xmlRegisterDefaultInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultOutputCallbacks">xmlRegisterDefaultOutputCallbacks</a><br />
+</dd><dt>compiling</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+</dd><dt>complement</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+</dd><dt>complete</dt><dd><a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveURI">xmlACatalogResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolve">xmlCatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveURI">xmlCatalogResolveURI</a><br />
+</dd><dt>completed</dt><dd><a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
+</dd><dt>completely</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+</dd><dt>compound</dt><dd><a href="html/libxml-xpath.html#xmlXPathFreeNodeSet">xmlXPathFreeNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a><br />
+</dd><dt>compress</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+</dd><dt>compressed</dt><dd><a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateFileParserCtxt">xmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-parser.html#xmlParseFile">xmlParseFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-parser.html#xmlRecoverFile">xmlRecoverFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+</dd><dt>compression</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</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#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-tree.html#xmlSaveFile">xmlSaveFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSetCompressMode">xmlSetCompressMode</a><br />
+<a href="html/libxml-tree.html#xmlSetDocCompressMode">xmlSetDocCompressMode</a><br />
+</dd><dt>comprising</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+</dd><dt>computation</dt><dd><a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>compute</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+</dd><dt>computed</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+</dd><dt>concat</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathConcatFunction">xmlXPathConcatFunction</a><br />
+</dd><dt>concatenated</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+</dd><dt>concatenation</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathConcatFunction">xmlXPathConcatFunction</a><br />
+</dd><dt>condition</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+</dd><dt>conditionalSect</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+</dd><dt>configured</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<a href="html/libxml-xmlversion.html#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_C14N_ENABLED">LIBXML_C14N_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_CATALOG_ENABLED">LIBXML_CATALOG_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_DEBUG_ENABLED">LIBXML_DEBUG_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_DOCB_ENABLED">LIBXML_DOCB_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 />
+<a href="html/libxml-xmlversion.html#LIBXML_OUTPUT_ENABLED">LIBXML_OUTPUT_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_PATTERN_ENABLED">LIBXML_PATTERN_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_PUSH_ENABLED">LIBXML_PUSH_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_READER_ENABLED">LIBXML_READER_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_SAX1_ENABLED">LIBXML_SAX1_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_THREAD_ENABLED">LIBXML_THREAD_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_VALID_ENABLED">LIBXML_VALID_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_WRITER_ENABLED">LIBXML_WRITER_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_XINCLUDE_ENABLED">LIBXML_XINCLUDE_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_XPATH_ENABLED">LIBXML_XPATH_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_XPTR_ENABLED">LIBXML_XPTR_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#WITHOUT_TRIO">WITHOUT_TRIO</a><br />
+<a href="html/libxml-xmlversion.html#WITH_TRIO">WITH_TRIO</a><br />
+</dd><dt>conforming</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+</dd><dt>conforms</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+</dd><dt>connection</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPClose">xmlNanoFTPClose</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCloseConnection">xmlNanoFTPCloseConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnect">xmlNanoFTPConnect</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPClose">xmlNanoHTTPClose</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#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
+</dd><dt>connector</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+</dd><dt>consequent</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+</dd><dt>considered</dt><dd><a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>consist</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextAncestor">xmlXPathNextAncestor</a><br />
+</dd><dt>constant</dt><dd><a href="html/libxml-parser.html#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+</dd><dt>constraint</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+</dd><dt>constraints</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<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>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 />
+<a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<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-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+</dd><dt>consuming</dt><dd><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 />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a><br />
+<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-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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>contained</dt><dd><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#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrlen">xmlStrlen</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+</dd><dt>contains</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToElement">xmlTextReaderMoveToElement</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathContainsFunction">xmlXPathContainsFunction</a><br />
+<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#xmlXPathNextChild">xmlXPathNextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetContains">xmlXPathNodeSetContains</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+</dd><dt>content:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseContent">xmlParseContent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+</dd><dt>contentType</dt><dd><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 />
+</dd><dt>contents</dt><dd><a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</a><br />
+<a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</a><br />
+<a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-parser.html#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntityContents">xmlTextWriterWriteDTDExternalEntityContents</a><br />
+</dd><dt>contentspec</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+</dd><dt>contextual</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
+</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 />
+<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 />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+</dd><dt>conveniently</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>conversion</dt><dd><a href="html/libxml-xpath.html#_xmlXPathType">_xmlXPathType</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertFunc">xmlXPathConvertFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopBoolean">xmlXPathPopBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopExternal">xmlXPathPopExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNumber">xmlXPathPopNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopString">xmlXPathPopString</a><br />
+</dd><dt>conversions</dt><dd><a href="html/libxml-xmlIO.html#_xmlOutputBuffer">_xmlOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+</dd><dt>convert</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-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<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-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-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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
+</dd><dt>converted</dt><dd><a href="html/libxml-catalog.html#xmlCatalogConvert">xmlCatalogConvert</a><br />
+<a href="html/libxml-catalog.html#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+</dd><dt>converter</dt><dd><a href="html/libxml-xmlIO.html#xmlAllocOutputBuffer">xmlAllocOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+</dd><dt>converting</dt><dd><a href="html/libxml-tree.html#xmlSaveFileEnc">xmlSaveFileEnc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+</dd><dt>converts</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>copied</dt><dd><a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+</dd><dt>copier</dt><dd><a href="html/libxml-hash.html#xmlHashCopy">xmlHashCopy</a><br />
+</dd><dt>copying</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+</dd><dt>correct</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>correctly</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>correponding</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+</dd><dt>correspond</dt><dd><a href="html/libxml-tree.html#xmlIsXHTML">xmlIsXHTML</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+</dd><dt>corresponding</dt><dd><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-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>cost</dt><dd><a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+</dd><dt>costly</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+</dd><dt>could</dt><dd><a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>count</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+<a href="html/libxml-debugXML.html#xmlLsCountNode">xmlLsCountNode</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 />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounter">xmlAutomataNewCounter</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
+<a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+</dd><dt>counterparts</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+</dd><dt>course</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>cover</dt><dd><a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+</dd><dt>create</dt><dd><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#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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</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-tree.html#xmlBufferCreate">xmlBufferCreate</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateSize">xmlBufferCreateSize</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogIsEmpty">xmlCatalogIsEmpty</a><br />
+<a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
+<a href="html/libxml-valid.html#xmlCreateEnumeration">xmlCreateEnumeration</a><br />
+<a href="html/libxml-catalog.html#xmlNewCatalog">xmlNewCatalog</a><br />
+<a href="html/libxml-tree.html#xmlNewDtd">xmlNewDtd</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+</dd><dt>creates</dt><dd><a href="html/libxml-uri.html#xmlCreateURI">xmlCreateURI</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+</dd><dt>creation</dt><dd><a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a><br />
+</dd><dt>cross</dt><dd><a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+</dd><dt>crossed</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</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-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 />
+<a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+</dd><dt>cur</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>currently</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemUsed">xmlMemUsed</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk11.html b/doc/APIchunk11.html
new file mode 100644
index 0000000..d8c2951
--- /dev/null
+++ b/doc/APIchunk11.html
@@ -0,0 +1,583 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index d-d for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index d-d for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter d:</h2><dl><dt>dangerous</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
+</dd><dt>day</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</dd><dt>day:minute</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</dd><dt>deactivated</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+</dd><dt>deallocate</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-list.html#xmlListDeallocator">xmlListDeallocator</a><br />
+<a href="html/libxml-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+</dd><dt>deallocated</dt><dd><a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</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-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+<a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</a><br />
+<a href="html/libxml-uri.html#xmlSaveUri">xmlSaveUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstBaseUri">xmlTextReaderConstBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstLocalName">xmlTextReaderConstLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstNamespaceUri">xmlTextReaderConstNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstPrefix">xmlTextReaderConstPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttribute">xmlTextReaderGetAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNs">xmlTextReaderGetAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderValue">xmlTextReaderValue</a><br />
+</dd><dt>deallocation</dt><dd><a href="html/libxml-list.html#xmlListRemoveAll">xmlListRemoveAll</a><br />
+<a href="html/libxml-list.html#xmlListRemoveFirst">xmlListRemoveFirst</a><br />
+<a href="html/libxml-list.html#xmlListRemoveLast">xmlListRemoveLast</a><br />
+</dd><dt>deallocator</dt><dd><a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-list.html#xmlListCreate">xmlListCreate</a><br />
+</dd><dt>debug</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttr">xmlDebugDumpAttr</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDTD">xmlDebugDumpDTD</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocument">xmlDebugDumpDocument</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpEntities">xmlDebugDumpEntities</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpPrint">xmlRegexpPrint</a><br />
+<a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+</dd><dt>debugging</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<a href="html/libxml-xmlversion.html#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+</dd><dt>decimal</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>decl</dt><dd><a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
+</dd><dt>declarations</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseCharRef">htmlParseCharRef</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+</dd><dt>declare</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+</dd><dt>declared</dt><dd><a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+</dd><dt>declaring</dt><dd><a href="html/libxml-valid.html#xmlGetID">xmlGetID</a><br />
+</dd><dt>decode</dt><dd><a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+</dd><dt>def</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>defaulted</dt><dd><a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsDefault">xmlTextReaderIsDefault</a><br />
+</dd><dt>defaultexternal</dt><dd><a href="html/libxml-parser.html#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</a><br />
+</dd><dt>defaults</dt><dd><a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLocalNameFunction">xmlXPathLocalNameFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNamespaceURIFunction">xmlXPathNamespaceURIFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+</dd><dt>define</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+</dd><dt>defined</dt><dd><a href="html/libxml-xmlversion.html#WITHOUT_TRIO">WITHOUT_TRIO</a><br />
+<a href="html/libxml-xmlversion.html#WITH_TRIO">WITH_TRIO</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</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-xmlreader.html#xmlTextReaderIsDefault">xmlTextReaderIsDefault</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextAncestorOrSelf">xmlXPathNextAncestorOrSelf</a><br />
+</dd><dt>defining</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_FALLBACK">XINCLUDE_FALLBACK</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_HREF">XINCLUDE_HREF</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_NODE">XINCLUDE_NODE</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_NS">XINCLUDE_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE">XINCLUDE_PARSE</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_ENCODING">XINCLUDE_PARSE_ENCODING</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_TEXT">XINCLUDE_PARSE_TEXT</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_XML">XINCLUDE_PARSE_XML</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_XPOINTER">XINCLUDE_PARSE_XPOINTER</a><br />
+<a href="html/libxml-valid.html#xmlGetID">xmlGetID</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstNamespaceUri">xmlTextReaderConstNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNamespaceUri">xmlTextReaderNamespaceUri</a><br />
+</dd><dt>definitions</dt><dd><a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd</a><br />
+</dd><dt>delayed</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+</dd><dt>delegation</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+</dd><dt>delete</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+</dd><dt>deletion</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+</dd><dt>depending</dt><dd><a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-list.html#xmlListDataCompare">xmlListDataCompare</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+</dd><dt>deprecated</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_LEGACY_ENABLED">LIBXML_LEGACY_ENABLED</a><br />
+<a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>depth</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<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>des</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>desactivated</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>descendant</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+</dd><dt>descendant-or-self</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+</dd><dt>descendants</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+</dd><dt>described</dt><dd><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#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 />
+</dd><dt>describing</dt><dd><a href="html/libxml-DOCBparser.html#docbParseDoc">docbParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDoc">htmlParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</dd><dt>description</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-HTMLparser.html#_htmlEntityDesc">_htmlEntityDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementAllowedHereDesc">htmlElementAllowedHereDesc</a><br />
+<a href="html/libxml-valid.html#xmlCopyElementContent">xmlCopyElementContent</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetLang">xmlNodeSetLang</a><br />
+</dd><dt>descriptor</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReadFd">htmlCtxtReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFd">htmlReadFd</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemDisplay">xmlMemDisplay</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemShow">xmlMemShow</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a><br />
+<a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<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 />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
+</dd><dt>destination</dt><dd><a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+</dd><dt>destroy</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+</dd><dt>destroyed</dt><dd><a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
+</dd><dt>destruction</dt><dd><a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
+</dd><dt>details</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>detect</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>detected</dt><dd><a href="html/libxml-xpathInternals.html#CHECK_ERROR">CHECK_ERROR</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_ERROR0">CHECK_ERROR0</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 />
+<a href="html/libxml-parser.html#endElementNsSAX2Func">endElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#endElementSAXFunc">endElementSAXFunc</a><br />
+<a href="html/libxml-SAX.html#reference">reference</a><br />
+<a href="html/libxml-parser.html#referenceSAXFunc">referenceSAXFunc</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</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-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndDocument">xmlSAX2EndDocument</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElement">xmlSAX2EndElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElementNs">xmlSAX2EndElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Reference">xmlSAX2Reference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+</dd><dt>detection</dt><dd><a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</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-xlink.html#xlinkGetDefaultDetect">xlinkGetDefaultDetect</a><br />
+<a href="html/libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
+<a href="html/libxml-xlink.html#xlinkSetDefaultDetect">xlinkSetDefaultDetect</a><br />
+<a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+</dd><dt>determine</dt><dd><a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+</dd><dt>determined</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+</dd><dt>determinist</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataIsDeterminist">xmlAutomataIsDeterminist</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a><br />
+</dd><dt>dict</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+</dd><dt>dictionary</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-dict.html#xmlDictCreate">xmlDictCreate</a><br />
+<a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+<a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+</dd><dt>dictionnary</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-dict.html#xmlDictCreate">xmlDictCreate</a><br />
+<a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+<a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</a><br />
+<a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
+<a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+<a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
+<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+</dd><dt>did</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+</dd><dt>difference</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+</dd><dt>different</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
+</dd><dt>differentiate</dt><dd><a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>digit</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>digits</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>dir</dt><dd><a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
+</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-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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextAncestorOrSelf">xmlXPathNextAncestorOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextChild">xmlXPathNextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+</dd><dt>directly</dt><dd><a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<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 />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+</dd><dt>directories</dt><dd><a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+</dd><dt>directory</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserGetDirectory">xmlParserGetDirectory</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+</dd><dt>disable</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+</dd><dt>disabled</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>disabling</dt><dd><a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+</dd><dt>discard</dt><dd><a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+</dd><dt>discarding</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+</dd><dt>disconnected</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewState">xmlAutomataNewState</a><br />
+</dd><dt>discovering</dt><dd><a href="html/libxml-parserInternals.html#xmlSwitchEncoding">xmlSwitchEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchToEncoding">xmlSwitchToEncoding</a><br />
+</dd><dt>disctionary</dt><dd><a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
+</dd><dt>display</dt><dd><a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemShow">xmlMemShow</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+</dd><dt>distinct</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+</dd><dt>distinguish</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>div</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>doc</dt><dd><a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+</dd><dt>doc-</dt><dd><a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+</dd><dt>doctypedecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+</dd><dt>documents</dt><dd><a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<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-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-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 />
+<a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
+<a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
+<a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>don</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+</dd><dt>dotgnu</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+</dd><dt>double</dt><dd><a href="">val</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+<a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewFloat">xmlXPathNewFloat</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnNumber">xmlXPathReturnNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetCreate">xmlXPtrLocationSetCreate</a><br />
+</dd><dt>double-hyphen</dt><dd><a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+</dd><dt>double-quotes</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+</dd><dt>doublequotes</dt><dd><a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+</dd><dt>down</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+</dd><dt>draft</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
+</dd><dt>drop</dt><dd><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 />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+</dd><dt>dtd</dt><dd><a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDoc">htmlNewDoc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDocNoDtD">htmlNewDocNoDtD</a><br />
+<a href="html/libxml-tree.html#xmlCopyDtd">xmlCopyDtd</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd</a><br />
+</dd><dt>dtds</dt><dd><a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>dump</dt><dd><a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
+<a href="html/libxml-tree.html#xmlBufferCCat">xmlBufferCCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferCat">xmlBufferCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferDump">xmlBufferDump</a><br />
+<a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
+<a href="html/libxml-valid.html#xmlDumpAttributeDecl">xmlDumpAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlDumpAttributeTable">xmlDumpAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlDumpElementDecl">xmlDumpElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlDumpElementTable">xmlDumpElementTable</a><br />
+<a href="html/libxml-entities.html#xmlDumpEntitiesTable">xmlDumpEntitiesTable</a><br />
+<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-debugXML.html#xmlLsOneNode">xmlLsOneNode</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemShow">xmlMemShow</a><br />
+<a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+</dd><dt>dumps</dt><dd><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#xmlShellDir">xmlShellDir</a><br />
+</dd><dt>duplicate</dt><dd><a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+</dd><dt>duplicated</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+</dd><dt>during</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk12.html b/doc/APIchunk12.html
new file mode 100644
index 0000000..2782913
--- /dev/null
+++ b/doc/APIchunk12.html
@@ -0,0 +1,393 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index e-e for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index e-e for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter e:</h2><dl><dt>each</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-hash.html#xmlHashCopy">xmlHashCopy</a><br />
+<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>edition</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>effective</dt><dd><a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+</dd><dt>either</dt><dd><a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>either:</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 />
+</dd><dt>element-</dt><dd><a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>elementdecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>elements</dt><dd><a href="html/libxml-catalog.html#XML_CATALOGS_NAMESPACE">XML_CATALOGS_NAMESPACE</a><br />
+<a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTR_NSDEFAULT">XML_SCHEMAS_ATTR_NSDEFAULT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_NSDEFAULT">XML_SCHEMAS_ELEM_NSDEFAULT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ELEM">XML_SCHEMAS_QUALIF_ELEM</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
+<a href="html/libxml-pattern.html#xmlFreePatternList">xmlFreePatternList</a><br />
+<a href="html/libxml-hash.html#xmlHashSize">xmlHashSize</a><br />
+<a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-list.html#xmlListMerge">xmlListMerge</a><br />
+<a href="html/libxml-list.html#xmlListReverse">xmlListReverse</a><br />
+<a href="html/libxml-list.html#xmlListSize">xmlListSize</a><br />
+<a href="html/libxml-list.html#xmlListSort">xmlListSort</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>else</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-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<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 />
+</dd><dt>emitted</dt><dd><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+</dd><dt>empty-element</dt><dd><a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>enable</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+</dd><dt>enabled</dt><dd><a href="html/libxml-tree.html#xmlSaveFile">xmlSaveFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+</dd><dt>enabling</dt><dd><a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-parser.html#xmlPedanticParserDefault">xmlPedanticParserDefault</a><br />
+</dd><dt>enc</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+</dd><dt>encapsulate</dt><dd><a href="html/libxml-tree.html#xmlBufferFree">xmlBufferFree</a><br />
+</dd><dt>encapsulating</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+</dd><dt>enclose</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderQuoteChar">xmlTextReaderQuoteChar</a><br />
+</dd><dt>encode</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a><br />
+</dd><dt>encoded</dt><dd><a href="html/libxml-xmlIO.html#_xmlOutputBuffer">_xmlOutputBuffer</a><br />
+<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+</dd><dt>encoder</dt><dd><a href="html/libxml-xmlIO.html#_xmlOutputBuffer">_xmlOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+</dd><dt>encoder==NULL</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>enconding</dt><dd><a href="html/libxml-encoding.html#xmlCharEncCloseFunc">xmlCharEncCloseFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>encountered</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+</dd><dt>end-tag</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+</dd><dt>end-up</dt><dd><a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+</dd><dt>ended</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
+</dd><dt>ending</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodes">xmlXPtrNewRangeNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
+</dd><dt>ends</dt><dd><a href="html/libxml-parser.html#_xmlParserNodeInfo">_xmlParserNodeInfo</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPClose">xmlNanoHTTPClose</a><br />
+</dd><dt>engine</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+</dd><dt>englobing</dt><dd><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 />
+</dd><dt>ensure</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</dd><dt>entire</dt><dd><a href="html/libxml-xmlIO.html#xmlCleanupInputCallbacks">xmlCleanupInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</a><br />
+</dd><dt>entities:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+</dd><dt>entproc</dt><dd><a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+</dd><dt>entries</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogConvert">xmlCatalogConvert</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a><br />
+<a href="html/libxml-hash.html#xmlHashAddEntry3">xmlHashAddEntry3</a><br />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemShow">xmlMemShow</a><br />
+</dd><dt>entry</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+</dd><dt>enumerated</dt><dd><a href="html/libxml-SAX.html#attributeDecl">attributeDecl</a><br />
+<a href="html/libxml-parser.html#attributeDeclSAXFunc">attributeDeclSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2AttributeDecl">xmlSAX2AttributeDecl</a><br />
+</dd><dt>enumeration</dt><dd><a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+<a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
+<a href="html/libxml-valid.html#xmlCreateEnumeration">xmlCreateEnumeration</a><br />
+<a href="html/libxml-valid.html#xmlFreeEnumeration">xmlFreeEnumeration</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+</dd><dt>environment</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<a href="html/libxml-xpath.html#xmlXPathInit">xmlXPathInit</a><br />
+</dd><dt>epsilon</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</a><br />
+<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 />
+</dd><dt>equal</dt><dd><a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderName">xmlTextReaderName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPositionFunction">xmlXPathPositionFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>equality</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-list.html#xmlListDataCompare">xmlListDataCompare</a><br />
+</dd><dt>equivalent</dt><dd><a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemFree">xmlMemFree</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemStrdupLoc">xmlMemStrdupLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryStrdup">xmlMemoryStrdup</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-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToString">xmlXPathCastToString</a><br />
+<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-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-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
+<a href="html/libxml-debugXML.html#xmlShellCmd">xmlShellCmd</a><br />
+</dd><dt>escape</dt><dd><a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+</dd><dt>escaped</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 />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-uri.html#xmlSaveUri">xmlSaveUri</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+</dd><dt>escapes</dt><dd><a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+</dd><dt>especially</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</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 />
+</dd><dt>evaluate</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathEvalExpr">xmlXPathEvalExpr</a><br />
+</dd><dt>evaluated</dt><dd><a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+</dd><dt>evaluating</dt><dd><a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+</dd><dt>evaluation</dt><dd><a href="html/libxml-xpath.html#_xmlXPathFunct">_xmlXPathFunct</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+<a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
+<a href="html/libxml-xpathInternals.html#valuePush">valuePush</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathResult">xmlShellPrintXPathResult</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalFunc">xmlXPathEvalFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+</dd><dt>evaulation</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a><br />
+</dd><dt>even</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</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>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>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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>except</dt><dd><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 />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+</dd><dt>exception</dt><dd><a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+</dd><dt>excluding</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>executed</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+</dd><dt>execution</dt><dd><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>exists</dt><dd><a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+</dd><dt>expand</dt><dd><a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+</dd><dt>expanded</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNamespaceURIFunction">xmlXPathNamespaceURIFunction</a><br />
+</dd><dt>expected</dt><dd><a href="">x</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a><br />
+<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 />
+</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>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 />
+</dd><dt>ext</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>extParsedEnt</dt><dd><a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+</dd><dt>extSubset</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+</dd><dt>extSubsetDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+</dd><dt>extend</dt><dd><a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+</dd><dt>extended</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+</dd><dt>extensions</dt><dd><a href="html/libxml-parser.html#_xmlSAXHandler">_xmlSAXHandler</a><br />
+</dd><dt>extract</dt><dd><a href="html/libxml-tree.html#XML_GET_CONTENT">XML_GET_CONTENT</a><br />
+<a href="html/libxml-tree.html#XML_GET_LINE">XML_GET_LINE</a><br />
+<a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk13.html b/doc/APIchunk13.html
new file mode 100644
index 0000000..a1ce710
--- /dev/null
+++ b/doc/APIchunk13.html
@@ -0,0 +1,394 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index f-f for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index f-f for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter f:</h2><dl><dt>fTP</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+</dd><dt>facet</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_COLLAPSE">XML_SCHEMAS_FACET_COLLAPSE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_PRESERVE">XML_SCHEMAS_FACET_PRESERVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_REPLACE">XML_SCHEMAS_FACET_REPLACE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_UNKNOWN">XML_SCHEMAS_FACET_UNKNOWN</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeFacet">xmlSchemaFreeFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+</dd><dt>facets</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathError">xmlShellPrintXPathError</a><br />
+</dd><dt>failed</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+<a href="html/libxml-valid.html#xmlRemoveID">xmlRemoveID</a><br />
+<a href="html/libxml-valid.html#xmlRemoveRef">xmlRemoveRef</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>fails</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-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-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-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#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 />
+</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 />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>far</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+</dd><dt>fashion</dt><dd><a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+</dd><dt>fast</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+</dd><dt>faster</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+</dd><dt>fatal</dt><dd><a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+</dd><dt>fatalError</dt><dd><a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+</dd><dt>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#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 />
+<a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
+<a href="html/libxml-xmlreader.html#xmlNewTextReaderFilename">xmlNewTextReaderFilename</a><br />
+</dd><dt>fetch</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPOpen">xmlNanoFTPOpen</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a><br />
+</dd><dt>fetching</dt><dd><a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
+</dd><dt>field</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 />
+<a href="html/libxml-parserInternals.html#xmlParseMisc">xmlParseMisc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>fields</dt><dd><a href="html/libxml-parser.html#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a><br />
+<a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#_xmlSAXHandler">_xmlSAXHandler</a><br />
+<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
+</dd><dt>files</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+</dd><dt>filesystem</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReadFile">htmlCtxtReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFile">htmlReadFile</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFile">xmlCtxtReadFile</a><br />
+<a href="html/libxml-parser.html#xmlReadFile">xmlReadFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
+</dd><dt>filled</dt><dd><a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+</dd><dt>fills</dt><dd><a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
+</dd><dt>filters</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
+</dd><dt>final</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataSetFinalState">xmlAutomataSetFinalState</a><br />
+<a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>find</dt><dd><a href="html/libxml-threads.html#xmlGetThreadId">xmlGetThreadId</a><br />
+<a href="html/libxml-tree.html#xmlIsXHTML">xmlIsXHTML</a><br />
+</dd><dt>finding</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</dd><dt>finds</dt><dd><a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-tree.html#xmlSearchNsByHref">xmlSearchNsByHref</a><br />
+</dd><dt>finished</dt><dd><a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</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>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 />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>fixed</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_FIXED">XML_SCHEMAS_ELEM_FIXED</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>flag</dt><dd><a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+<a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a><br />
+<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-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForMemory">xmlReaderForMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</a><br />
+</dd><dt>flat</dt><dd><a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+</dd><dt>floor</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
+</dd><dt>flow</dt><dd><a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</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 />
+<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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>following-sibling</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+</dd><dt>follows</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+</dd><dt>follows:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</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>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 />
+</dd><dt>form</dt><dd><a href="html/libxml-DOCBparser.html#docbParseDoc">docbParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDoc">htmlParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</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-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</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 />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDAttlist">xmlTextWriterWriteFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDElement">xmlTextWriterWriteFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElementNS">xmlTextWriterWriteFormatElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatPI">xmlTextWriterWriteFormatPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatRaw">xmlTextWriterWriteFormatRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatString">xmlTextWriterWriteFormatString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttribute">xmlTextWriterWriteVFormatAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatCDATA">xmlTextWriterWriteVFormatCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDElement">xmlTextWriterWriteVFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElement">xmlTextWriterWriteVFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElementNS">xmlTextWriterWriteVFormatElementNS</a><br />
+<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 />
+</dd><dt>formatting</dt><dd><a href="html/libxml-HTMLtree.html#htmlDocContentDumpFormatOutput">htmlDocContentDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSaveFileEnc">htmlSaveFileEnc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSaveFileFormat">htmlSaveFileFormat</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+</dd><dt>formed</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+</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#xmlParseURIReference">xmlParseURIReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</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 />
+</dd><dt>front</dt><dd><a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+</dd><dt>front-end</dt><dd><a href="html/libxml-encoding.html#xmlCharEncCloseFunc">xmlCharEncCloseFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>ftp:</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPOpen">xmlNanoFTPOpen</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+</dd><dt>ftp_proxy</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+</dd><dt>ftp_proxy_password</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+</dd><dt>ftp_proxy_user</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+</dd><dt>full</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+</dd><dt>fully</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>func</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+</dd><dt>funcs</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+</dd><dt>function:</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>functionality</dt><dd><a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+</dd><dt>functions</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<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 />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-parser.html#xmlReadIO">xmlReadIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<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-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</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 />
+<a href="html/libxml-parserInternals.html#xmlSwitchToEncoding">xmlSwitchToEncoding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterAllFunctions">xmlXPathRegisterAllFunctions</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredFuncsCleanup">xmlXPathRegisteredFuncsCleanup</a><br />
+</dd><dt>further</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parser.html#xmlStopParser">xmlStopParser</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-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk14.html b/doc/APIchunk14.html
new file mode 100644
index 0000000..8f43429
--- /dev/null
+++ b/doc/APIchunk14.html
@@ -0,0 +1,366 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index g-h for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index g-h for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter g:</h2><dl><dt>garbage</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+</dd><dt>genChRanges</dt><dd><a href="html/libxml-chvalid.html#xmlIsBaseCharQ">xmlIsBaseCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar_ch">xmlIsBaseChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlankQ">xmlIsBlankQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank_ch">xmlIsBlank_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCharQ">xmlIsCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar_ch">xmlIsChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombiningQ">xmlIsCombiningQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigitQ">xmlIsDigitQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit_ch">xmlIsDigit_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtenderQ">xmlIsExtenderQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender_ch">xmlIsExtender_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographicQ">xmlIsIdeographicQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidCharQ">xmlIsPubidCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar_ch">xmlIsPubidChar_ch</a><br />
+</dd><dt>general</dt><dd><a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+</dd><dt>generate</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-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-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
+</dd><dt>generated</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-chvalid.html#xmlIsBaseCharQ">xmlIsBaseCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar_ch">xmlIsBaseChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlankQ">xmlIsBlankQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank_ch">xmlIsBlank_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCharQ">xmlIsCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar_ch">xmlIsChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombiningQ">xmlIsCombiningQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigitQ">xmlIsDigitQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit_ch">xmlIsDigit_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtenderQ">xmlIsExtenderQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender_ch">xmlIsExtender_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographicQ">xmlIsIdeographicQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidCharQ">xmlIsPubidCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar_ch">xmlIsPubidChar_ch</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathResult">xmlShellPrintXPathResult</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsDefault">xmlTextReaderIsDefault</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-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</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 />
+<a href="html/libxml-parser.html#_xmlSAXHandlerV1">_xmlSAXHandlerV1</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlBufferLength">xmlBufferLength</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</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-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-parserInternals.html#xmlNamespaceParseQName">xmlNamespaceParseQName</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetParserProp">xmlTextReaderGetParserProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+</dd><dt>give</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+</dd><dt>gives</dt><dd><a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+</dd><dt>giving</dt><dd><a href="html/libxml-tree.html#xmlNewDoc">xmlNewDoc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionNum">xmlParseVersionNum</a><br />
+</dd><dt>global</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_GLOBAL">XML_SCHEMAS_ELEM_GLOBAL</a><br />
+<a href="html/libxml-tree.html#_xmlNs">_xmlNs</a><br />
+<a href="html/libxml-SAX.html#globalNamespace">globalNamespace</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</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-threads.html#xmlGetGlobalState">xmlGetGlobalState</a><br />
+<a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+<a href="html/libxml-globals.html#xmlInitializeGlobalState">xmlInitializeGlobalState</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetLastError">xmlResetLastError</a><br />
+</dd><dt>globally</dt><dd><a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+</dd><dt>good</dt><dd><a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+</dd><dt>grafted</dt><dd><a href="html/libxml-tree.html#xmlCopyProp">xmlCopyProp</a><br />
+<a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</a><br />
+</dd><dt>grammar:</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+</dd><dt>greater</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>greater-than</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</dd><dt>group</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaAttribute">_xmlSchemaAttribute</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaAttributeGroup">_xmlSchemaAttributeGroup</a><br />
+<a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</dd><dt>groups</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+</dd><dt>grow</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>grows</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteChar">xmlBufferWriteChar</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+</dd></dl><h2>Letter h:</h2><dl><dt>had</dt><dd><a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+</dd><dt>hand</dt><dd><a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+</dd><dt>handle</dt><dd><a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</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-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+</dd><dt>handled</dt><dd><a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>handlers</dt><dd><a href="html/libxml-xlink.html#xlinkSetDefaultHandler">xlinkSetDefaultHandler</a><br />
+<a href="html/libxml-encoding.html#xmlCleanupCharEncodingHandlers">xmlCleanupCharEncodingHandlers</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultInputCallbacks">xmlRegisterDefaultInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultOutputCallbacks">xmlRegisterDefaultOutputCallbacks</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+</dd><dt>handles</dt><dd><a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+</dd><dt>handling</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_UNKNOWN">XML_SCHEMAS_FACET_UNKNOWN</a><br />
+<a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlHandleOmittedElem">htmlHandleOmittedElem</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</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 />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</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-xpathInternals.html#xmlXPathPopBoolean">xmlXPathPopBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopExternal">xmlXPathPopExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNumber">xmlXPathPopNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopString">xmlXPathPopString</a><br />
+</dd><dt>has-same-nodes</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+</dd><dt>have</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+<a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveClose">xmlSaveClose</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveFlush">xmlSaveFlush</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderHasValue">xmlTextReaderHasValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+<a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>haystack</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrstr">xmlStrstr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+</dd><dt>header</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRedir">xmlNanoHTTPRedir</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseXMLDecl">xmlParseXMLDecl</a><br />
+</dd><dt>headers</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPEncoding">xmlNanoHTTPEncoding</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#xmlNanoHTTPMimeType">xmlNanoHTTPMimeType</a><br />
+</dd><dt>heading</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+</dd><dt>here</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextAncestorOrSelf">xmlXPathNextAncestorOrSelf</a><br />
+</dd><dt>heuristic</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>heuristic:</dt><dd><a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+</dd><dt>hex</dt><dd><a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+</dd><dt>hierarchy</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+</dd><dt>highly</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+</dd><dt>hold</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>holding</dt><dd><a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+<a href="html/libxml-tree.html#_xmlID">_xmlID</a><br />
+<a href="html/libxml-tree.html#_xmlRef">_xmlRef</a><br />
+<a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
+</dd><dt>holds</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+</dd><dt>host</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</dd><dt>hosting</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+</dd><dt>hostname</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+</dd><dt>hour</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</dd><dt>how</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+</dd><dt>href</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_HREF">XINCLUDE_HREF</a><br />
+</dd><dt>href==NULL</dt><dd><a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+</dd><dt>hrefs</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+</dd><dt>html</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+</dd><dt>htmlAttrAllowed</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>htmlElemDescPtr</dt><dd><a href="html/libxml-HTMLparser.html#htmlTagLookup">htmlTagLookup</a><br />
+</dd><dt>htmlElementAllowedHere</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>htmlElementStatusHere</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>htmlEntityDescPtr</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-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+</dd><dt>htmlNodePtr</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>htmlParserOption</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFd">htmlCtxtReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFile">htmlCtxtReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadMemory">htmlCtxtReadMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtUseOptions">htmlCtxtUseOptions</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadDoc">htmlReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFd">htmlReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFile">htmlReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadMemory">htmlReadMemory</a><br />
+</dd><dt>htmlStartClose</dt><dd><a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+</dd><dt>htmlStartCloseIndex</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+</dd><dt>http:</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_NS">XINCLUDE_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
+<a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>human-readable</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk15.html b/doc/APIchunk15.html
new file mode 100644
index 0000000..b82ce9a
--- /dev/null
+++ b/doc/APIchunk15.html
@@ -0,0 +1,510 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index i-i for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index i-i for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter i:</h2><dl><dt>iconv</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_ICONV_ENABLED">LIBXML_ICONV_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_ISO8859X_ENABLED">LIBXML_ISO8859X_ENABLED</a><br />
+</dd><dt>identify</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>ignorable</dt><dd><a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+</dd><dt>ignorableWhitespace</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>ignored</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>ignoring</dt><dd><a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+</dd><dt>image</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>imbrication</dt><dd><a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+</dd><dt>immediately</dt><dd><a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>immutable</dt><dd><a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+</dd><dt>implementation</dt><dd><a href="html/libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a><br />
+</dd><dt>implementation-defined</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+</dd><dt>implemented</dt><dd><a href="html/libxml-HTMLtree.html#HTML_COMMENT_NODE">HTML_COMMENT_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_ENTITY_REF_NODE">HTML_ENTITY_REF_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PI_NODE">HTML_PI_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_TEXT_NODE">HTML_TEXT_NODE</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+</dd><dt>implicitly</dt><dd><a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+</dd><dt>implied</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>impossible</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>improves</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+</dd><dt>in-</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+</dd><dt>in-extenso</dt><dd><a href="html/libxml-xmlmemory.html#xmlMemDisplay">xmlMemDisplay</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a><br />
+</dd><dt>in-memory</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDoc">docbParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreateMemoryParserCtxt">htmlCreateMemoryParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadMemory">htmlCtxtReadMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDoc">htmlParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadDoc">htmlReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadMemory">htmlReadMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlCreateDocParserCtxt">xmlCreateDocParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateMemoryParserCtxt">xmlCreateMemoryParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadDoc">xmlCtxtReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadMemory">xmlCtxtReadMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseDoc">xmlParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlParseMemory">xmlParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlReadDoc">xmlReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlReadMemory">xmlReadMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForMemory">xmlReaderForMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-parser.html#xmlRecoverDoc">xmlRecoverDoc</a><br />
+<a href="html/libxml-parser.html#xmlRecoverMemory">xmlRecoverMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+</dd><dt>incase</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPClose">xmlNanoFTPClose</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCloseConnection">xmlNanoFTPCloseConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
+</dd><dt>include</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_NODE">XINCLUDE_NODE</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
+<a href="html/libxml-list.html#xmlListMerge">xmlListMerge</a><br />
+</dd><dt>included</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 />
+<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+</dd><dt>includes</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupInputCallbacks">xmlCleanupInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessTreeFlags">xmlXIncludeProcessTreeFlags</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</a><br />
+</dd><dt>including</dt><dd><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+<a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>inclusive</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>increase</dt><dd><a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+</dd><dt>increment</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
+</dd><dt>incremental</dt><dd><a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
+</dd><dt>indent</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a><br />
+</dd><dt>indentation</dt><dd><a href="html/libxml-debugXML.html#xmlDebugDumpAttr">xmlDebugDumpAttr</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</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-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+</dd><dt>indentation?</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a><br />
+</dd><dt>indented</dt><dd><a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+</dd><dt>indenting</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+</dd><dt>independently</dt><dd><a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+</dd><dt>index</dt><dd><a href="">index</a><br />
+<a href="html/libxml-parserInternals.html#inputPush">inputPush</a><br />
+<a href="html/libxml-parserInternals.html#namePush">namePush</a><br />
+<a href="html/libxml-parserInternals.html#nodePush">nodePush</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNo">xmlTextReaderMoveToAttributeNo</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+</dd><dt>indicate</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+</dd><dt>indicated</dt><dd><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 />
+</dd><dt>indicates</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</dd><dt>indicating</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+<a href="html/libxml-debugXML.html#xmlShellCmd">xmlShellCmd</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>indication</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
+</dd><dt>indicative</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+</dd><dt>indicator</dt><dd><a href="html/libxml-DOCBparser.html#docbParseChunk">docbParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseChunk">htmlParseChunk</a><br />
+<a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
+</dd><dt>indirect</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+</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>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 />
+</dd><dt>info</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
+<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemStrdupLoc">xmlMemStrdupLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryStrdup">xmlMemoryStrdup</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+</dd><dt>information</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttr">xmlDebugDumpAttr</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDTD">xmlDebugDumpDTD</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocument">xmlDebugDumpDocument</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpEntities">xmlDebugDumpEntities</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</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-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>informations</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#endElementNsSAX2Func">endElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpString">xmlDebugDumpString</a><br />
+<a href="html/libxml-parserInternals.html#xmlErrMemory">xmlErrMemory</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCleanup">xmlNanoFTPCleanup</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileInfo">xmlParserPrintFileInfo</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#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</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-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessNode">xmlXIncludeProcessNode</a><br />
+</dd><dt>informative</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+</dd><dt>infos</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>inherited</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+</dd><dt>inheriting</dt><dd><a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+</dd><dt>inherits</dt><dd><a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</dd><dt>initial</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataGetInitState">xmlAutomataGetInitState</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateSize">xmlBufferCreateSize</a><br />
+<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemStrdupLoc">xmlMemStrdupLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryStrdup">xmlMemoryStrdup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetCreate">xmlXPtrLocationSetCreate</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+</dd><dt>initialisation</dt><dd><a href="html/libxml-globals.html#xmlInitGlobals">xmlInitGlobals</a><br />
+</dd><dt>initialization</dt><dd><a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+</dd><dt>initialize</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 />
+<a href="html/libxml-HTMLtree.html#htmlNewDocNoDtD">htmlNewDocNoDtD</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
+<a href="html/libxml-valid.html#xmlCreateEnumeration">xmlCreateEnumeration</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-nanoftp.html#xmlNanoFTPNewCtxt">xmlNanoFTPNewCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+<a href="html/libxml-parser.html#xmlNewParserCtxt">xmlNewParserCtxt</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodeSet">xmlXPtrNewLocationSetNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+</dd><dt>initialized</dt><dd><a href="html/libxml-parser.html#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a><br />
+</dd><dt>initiate</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>initiated</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+</dd><dt>inline</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>inlined</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 />
+</dd><dt>inputs</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>insensitive</dt><dd><a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+</dd><dt>insert</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>inserted</dt><dd><a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</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>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 />
+</dd><dt>instead</dt><dd><a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar">xmlIsBaseChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank">xmlIsBlank</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar">xmlIsChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombining">xmlIsCombining</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit">xmlIsDigit</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender">xmlIsExtender</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographic">xmlIsIdeographic</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+</dd><dt>instruction</dt><dd><a href="html/libxml-HTMLtree.html#HTML_PI_NODE">HTML_PI_NODE</a><br />
+<a href="html/libxml-SAX.html#processingInstruction">processingInstruction</a><br />
+<a href="html/libxml-parser.html#processingInstructionSAXFunc">processingInstructionSAXFunc</a><br />
+<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>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 />
+<a href="html/libxml-xmlstring.html#xmlStrncmp">xmlStrncmp</a><br />
+<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#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>interact</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+</dd><dt>interface</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_PATTERN_ENABLED">LIBXML_PATTERN_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_READER_ENABLED">LIBXML_READER_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_SAX1_ENABLED">LIBXML_SAX1_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_WRITER_ENABLED">LIBXML_WRITER_ENABLED</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDocument">docbParseDocument</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDocument">htmlParseDocument</a><br />
+<a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</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-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_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_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-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 />
+</dd><dt>interned</dt><dd><a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+</dd><dt>interoperability</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+</dd><dt>interprestation</dt><dd><a href="html/libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a><br />
+</dd><dt>interpreter</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>intersection</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+</dd><dt>into</dt><dd><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+<a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+<a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<a href="html/libxml-tree.html#xmlTextMerge">xmlTextMerge</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapCString">xmlXPathWrapCString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapExternal">xmlXPathWrapExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapString">xmlXPathWrapString</a><br />
+</dd><dt>invalid</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>invited</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>invoking</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+</dd><dt>isinf</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+</dd><dt>isn</dt><dd><a href="html/libxml-encoding.html#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToString">xmlXPathCastToString</a><br />
+</dd><dt>isnan</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>issue</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+</dd><dt>issued</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+</dd><dt>item</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+</dd><dt>items</dt><dd><a href="html/libxml-xpathInternals.html#valuePush">valuePush</a><br />
+<a href="html/libxml-hash.html#xmlHashCopy">xmlHashCopy</a><br />
+<a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</a><br />
+<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+</dd><dt>itself</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk16.html b/doc/APIchunk16.html
new file mode 100644
index 0000000..09a4a00
--- /dev/null
+++ b/doc/APIchunk16.html
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index j-l for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index j-l for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter j:</h2><dl><dt>just</dt><dd><a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+<a href="html/libxml-parserInternals.html#inputPop">inputPop</a><br />
+<a href="html/libxml-parserInternals.html#namePop">namePop</a><br />
+<a href="html/libxml-parserInternals.html#nodePop">nodePop</a><br />
+<a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
+<a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
+<a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
+<a href="html/libxml-valid.html#xmlCreateEnumeration">xmlCreateEnumeration</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</a><br />
+<a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a><br />
+<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 />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+</dd><dt>keeps</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+</dd><dt>kept</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>keyword</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>kill</dt><dd><a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
+</dd><dt>kind</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaAttribute">_xmlSchemaAttribute</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaAttributeGroup">_xmlSchemaAttributeGroup</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaElement">_xmlSchemaElement</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaFacet">_xmlSchemaFacet</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaNotation">_xmlSchemaNotation</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaType">_xmlSchemaType</a><br />
+</dd><dt>know</dt><dd><a href="html/libxml-xmlstring.html#BAD_CAST">BAD_CAST</a><br />
+</dd><dt>knowledge</dt><dd><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+</dd><dt>known</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-xmlIO.html#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+</dd></dl><h2>Letter l:</h2><dl><dt>labeled</dt><dd><a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+</dd><dt>lack</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+</dd><dt>lang</dt><dd><a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+</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>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 />
+</dd><dt>later</dt><dd><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-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>latest</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a><br />
+</dd><dt>layer</dt><dd><a href="html/libxml-tree.html#xmlChildrenNode">xmlChildrenNode</a><br />
+<a href="html/libxml-xmlmemory.html#xmlInitMemory">xmlInitMemory</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCleanup">xmlNanoFTPCleanup</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPCleanup">xmlNanoHTTPCleanup</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</a><br />
+<a href="html/libxml-tree.html#xmlRootNode">xmlRootNode</a><br />
+<a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+</dd><dt>leading</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</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#xmlXPathLeading">xmlXPathLeading</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLeadingSorted">xmlXPathLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeading">xmlXPathNodeLeading</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<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>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-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 />
+<a href="html/libxml-tree.html#xmlNewTextLen">xmlNewTextLen</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+<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 />
+<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 />
+<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 />
+</dd><dt>less-than</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</dd><dt>level</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_TOPLEVEL">XML_SCHEMAS_ELEM_TOPLEVEL</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttr">xmlDebugDumpAttr</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+</dd><dt>lexical</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<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>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-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</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 />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGCleanupTypes">xmlRelaxNGCleanupTypes</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCleanupTypes">xmlSchemaCleanupTypes</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeValue">xmlSchemaFreeValue</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaInitTypes">xmlSchemaInitTypes</a><br />
+<a href="html/libxml-threads.html#xmlUnlockLibrary">xmlUnlockLibrary</a><br />
+</dd><dt>libs</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>libxml</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathError">xmlShellPrintXPathError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+</dd><dt>libxml1</dt><dd><a href="html/libxml-tree.html#xmlChildrenNode">xmlChildrenNode</a><br />
+<a href="html/libxml-tree.html#xmlRootNode">xmlRootNode</a><br />
+</dd><dt>libxml2</dt><dd><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#xmlInitThreads">xmlInitThreads</a><br />
+<a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
+<a href="html/libxml-threads.html#xmlMutexLock">xmlMutexLock</a><br />
+<a href="html/libxml-threads.html#xmlMutexUnlock">xmlMutexUnlock</a><br />
+<a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+<a href="html/libxml-threads.html#xmlRMutexLock">xmlRMutexLock</a><br />
+<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 />
+</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 />
+<a href="html/libxml-parserInternals.html#IS_LETTER_CH">IS_LETTER_CH</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_DOTTED_VERSION">LIBXML_DOTTED_VERSION</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+<a href="html/libxml-catalog.html#xmlParseCatalogFile">xmlParseCatalogFile</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+</dd><dt>limit</dt><dd><a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+</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 />
+</dd><dt>linking</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+</dd><dt>links</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</dd><dt>listing</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+</dd><dt>lists</dt><dd><a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+</dd><dt>literal</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePubidLiteral">xmlParsePubidLiteral</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>load</dt><dd><a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</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-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+</dd><dt>loaded</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>loader</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-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+</dd><dt>loaders</dt><dd><a href="html/libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a><br />
+</dd><dt>loading</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-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+</dd><dt>loads</dt><dd><a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+</dd><dt>loadsubset</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 />
+</dd><dt>local-name</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathLocalNameFunction">xmlXPathLocalNameFunction</a><br />
+</dd><dt>localname</dt><dd><a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
+</dd><dt>location</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-parser.html#xmlGetFeature">xmlGetFeature</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</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-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaNewParserCtxt">xmlSchemaNewParserCtxt</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 />
+</dd><dt>locations</dt><dd><a href="html/libxml-xpointer.html#_xmlLocationSet">_xmlLocationSet</a><br />
+</dd><dt>locator</dt><dd><a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorBaseURI">xmlTextReaderLocatorBaseURI</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorLineNumber">xmlTextReaderLocatorLineNumber</a><br />
+</dd><dt>locators</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+</dd><dt>lock</dt><dd><a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
+<a href="html/libxml-threads.html#xmlMutexLock">xmlMutexLock</a><br />
+<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#xmlUnlockLibrary">xmlUnlockLibrary</a><br />
+</dd><dt>logging</dt><dd><a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemStrdupLoc">xmlMemStrdupLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryStrdup">xmlMemoryStrdup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+</dd><dt>long</dt><dd><a href="html/libxml-parserInternals.html#IS_BASECHAR">IS_BASECHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_COMBINING">IS_COMBINING</a><br />
+<a href="html/libxml-parserInternals.html#IS_DIGIT">IS_DIGIT</a><br />
+<a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+</dd><dt>longer</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>look-ahead</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>lookahead</dt><dd><a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+</dd><dt>looked</dt><dd><a href="html/libxml-xpath.html#_xmlNodeSet">_xmlNodeSet</a><br />
+</dd><dt>looks</dt><dd><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-tree.html#xmlHasProp">xmlHasProp</a><br />
+</dd><dt>lookups</dt><dd><a href="html/libxml-parser.html#XML_DETECT_IDS">XML_DETECT_IDS</a><br />
+<a href="html/libxml-catalog.html#xmlParseCatalogFile">xmlParseCatalogFile</a><br />
+</dd><dt>loop</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+</dd><dt>loops</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>lossless</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</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>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk17.html b/doc/APIchunk17.html
new file mode 100644
index 0000000..bea20d1
--- /dev/null
+++ b/doc/APIchunk17.html
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index m-m for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index m-m for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter m:</h2><dl><dt>machine</dt><dd><a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+</dd><dt>macro</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDocType">xmlTextWriterWriteDocType</a><br />
+<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-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 />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+</dd><dt>main</dt><dd><a href="html/libxml-threads.html#xmlIsMainThread">xmlIsMainThread</a><br />
+</dd><dt>maintained</dt><dd><a href="html/libxml-valid.html#xmlRemoveID">xmlRemoveID</a><br />
+<a href="html/libxml-valid.html#xmlRemoveRef">xmlRemoveRef</a><br />
+</dd><dt>major</dt><dd><a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+</dd><dt>make</dt><dd><a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveClose">xmlSaveClose</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveFlush">xmlSaveFlush</a><br />
+</dd><dt>makes</dt><dd><a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+</dd><dt>malloc</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#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+</dd><dt>mallocAtomicFunc</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+</dd><dt>manage</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteChar">xmlBufferWriteChar</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+</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>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 />
+</dd><dt>maps</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDocType">xmlTextWriterWriteDocType</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteProcessingInstruction">xmlTextWriterWriteProcessingInstruction</a><br />
+</dd><dt>mark</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderQuoteChar">xmlTextReaderQuoteChar</a><br />
+</dd><dt>marked</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+</dd><dt>marker</dt><dd><a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</dd><dt>marking</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+</dd><dt>marks</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+</dd><dt>markup</dt><dd><a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+</dd><dt>markupdecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>masked</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>matched</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+</dd><dt>matches</dt><dd><a href="html/libxml-xpathInternals.html#CHECK_ARITY">CHECK_ARITY</a><br />
+<a href="html/libxml-xmlIO.html#xmlFileMatch">xmlFileMatch</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPMatch">xmlIOFTPMatch</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPMatch">xmlIOHTTPMatch</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>matching</dt><dd><a href="html/libxml-xmlIO.html#xmlFileMatch">xmlFileMatch</a><br />
+<a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPMatch">xmlIOFTPMatch</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPOpen">xmlIOFTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPMatch">xmlIOHTTPMatch</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpen">xmlIOHTTPOpen</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+<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-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 />
+<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#xmlStrncasecmp">xmlStrncasecmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncmp">xmlStrncmp</a><br />
+</dd><dt>maximal</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCounter">xmlAutomataNewCounter</a><br />
+</dd><dt>maximum</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</dd><dt>means</dt><dd><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+</dd><dt>mechanism</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncLookup">xmlXPathRegisterFuncLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableLookup">xmlXPathRegisterVariableLookup</a><br />
+</dd><dt>mechanisms</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+</dd><dt>meet</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>member</dt><dd><a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttribute">xmlTextWriterWriteVFormatAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatCDATA">xmlTextWriterWriteVFormatCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatComment">xmlTextWriterWriteVFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDElement">xmlTextWriterWriteVFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElement">xmlTextWriterWriteVFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElementNS">xmlTextWriterWriteVFormatElementNS</a><br />
+<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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>memo</dt><dd><a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+</dd><dt>memorylist</dt><dd><a href="html/libxml-xmlmemory.html#xmlMemDisplay">xmlMemDisplay</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a><br />
+</dd><dt>memorys</dt><dd><a href="html/libxml-xmlmemory.html#xmlCleanupMemory">xmlCleanupMemory</a><br />
+</dd><dt>merged</dt><dd><a href="html/libxml-tree.html#xmlTextMerge">xmlTextMerge</a><br />
+</dd><dt>merging</dt><dd><a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddChildList">xmlAddChildList</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+</dd><dt>message</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+<a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPatherror">xmlXPatherror</a><br />
+</dd><dt>messages</dt><dd><a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+</dd><dt>method</dt><dd><a href="html/libxml-tree.html#_xmlBuffer">_xmlBuffer</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-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
+<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>minimal</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCounter">xmlAutomataNewCounter</a><br />
+</dd><dt>minimum</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-tree.html#xmlBufferGrow">xmlBufferGrow</a><br />
+<a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</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 />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>mixed</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_MIXED">XML_SCHEMAS_TYPE_MIXED</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>mixed-content</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</dd><dt>mmap</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+</dd><dt>mod</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathModValues">xmlXPathModValues</a><br />
+</dd><dt>mode</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlGetCompressMode">xmlGetCompressMode</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-tree.html#xmlSetCompressMode">xmlSetCompressMode</a><br />
+</dd><dt>model</dt><dd><a href="html/libxml-valid.html#xmlValidBuildContentModel">xmlValidBuildContentModel</a><br />
+</dd><dt>modified</dt><dd><a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContent">xmlNodeAddContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContentLen">xmlNodeSetContentLen</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</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 />
+<a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</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-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 />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>moreover</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+</dd><dt>most</dt><dd><a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+</dd><dt>moved</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderMoveToElement">xmlTextReaderMoveToElement</a><br />
+</dd><dt>much</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>multi-threading</dt><dd><a href="html/libxml-globals.html#xmlCleanupGlobals">xmlCleanupGlobals</a><br />
+<a href="html/libxml-globals.html#xmlInitGlobals">xmlInitGlobals</a><br />
+</dd><dt>multiple</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
+</dd><dt>multiply</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathMultValues">xmlXPathMultValues</a><br />
+</dd><dt>multithreaded</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
+</dd><dt>mutex</dt><dd><a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
+<a href="html/libxml-threads.html#xmlFreeRMutex">xmlFreeRMutex</a><br />
+<a href="html/libxml-threads.html#xmlMutexLock">xmlMutexLock</a><br />
+<a href="html/libxml-threads.html#xmlMutexUnlock">xmlMutexUnlock</a><br />
+<a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+<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>myDoc</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 />
+</dd><dt>myproxy</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</dd><dt>myproxy:3128</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk18.html b/doc/APIchunk18.html
new file mode 100644
index 0000000..62d47a2
--- /dev/null
+++ b/doc/APIchunk18.html
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index n-n for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index n-n for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter n:</h2><dl><dt>named</dt><dd><a href="html/libxml-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
+</dd><dt>names</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+<a href="html/libxml-hash.html#xmlHashAddEntry">xmlHashAddEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>namespace-uri</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNamespaceURIFunction">xmlXPathNamespaceURIFunction</a><br />
+</dd><dt>namespace:</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_NS">XINCLUDE_NS</a><br />
+<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 />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlFreeNsList">xmlFreeNsList</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>naming</dt><dd><a href="html/libxml-tree.html#xmlChildrenNode">xmlChildrenNode</a><br />
+<a href="html/libxml-tree.html#xmlRootNode">xmlRootNode</a><br />
+</dd><dt>ncname</dt><dd><a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+</dd><dt>ndata</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+</dd><dt>nearest</dt><dd><a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+</dd><dt>nearly</dt><dd><a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>necessary</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpString">xmlDebugDumpString</a><br />
+</dd><dt>need</dt><dd><a href="html/libxml-xmlversion.html#WITH_TRIO">WITH_TRIO</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a><br />
+</dd><dt>needed</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</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-xpath.html#xmlXPathCastToString">xmlXPathCastToString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopBoolean">xmlXPathPopBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopExternal">xmlXPathPopExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNumber">xmlXPathPopNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopString">xmlXPathPopString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>needing</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>needle</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrstr">xmlStrstr</a><br />
+</dd><dt>needs</dt><dd><a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+</dd><dt>negativa</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a><br />
+</dd><dt>negative</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-debugXML.html#xmlShellCmd">xmlShellCmd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>neither</dt><dd><a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
+<a href="html/libxml-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>nested</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>net</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>network</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReadFile">htmlCtxtReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFile">htmlReadFile</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFile">xmlCtxtReadFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlReadFile">xmlReadFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
+</dd><dt>nillable</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_NILLABLE">XML_SCHEMAS_ELEM_NILLABLE</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-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>node-set?</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathLocalNameFunction">xmlXPathLocalNameFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNamespaceURIFunction">xmlXPathNamespaceURIFunction</a><br />
+</dd><dt>nodelist</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+</dd><dt>nodes1</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+</dd><dt>nodes2</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+</dd><dt>nodeset</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+</dd><dt>nodesets</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+</dd><dt>non</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_LAX">XML_SCHEMAS_ANYATTR_LAX</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+</dd><dt>non-CDATA</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>non-NULL</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+</dd><dt>non-UTF-8</dt><dd><a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+</dd><dt>non-blank</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+</dd><dt>non-determinist</dt><dd><a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+</dd><dt>non-empty</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+</dd><dt>non-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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>non-final</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+</dd><dt>non-negative</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>non-normative</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+</dd><dt>non-null</dt><dd><a href="html/libxml-debugXML.html#xmlShellPrintNode">xmlShellPrintNode</a><br />
+</dd><dt>non-stateless</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</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-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 />
+</dd><dt>none</dt><dd><a href="html/libxml-SAX.html#getNamespace">getNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-tree.html#xmlGetLastChild">xmlGetLastChild</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
+</dd><dt>nor</dt><dd><a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+</dd><dt>normal</dt><dd><a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+</dd><dt>normalization</dt><dd><a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+</dd><dt>normalization:</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>normalizations</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>normalize</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>normalize-space</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+</dd><dt>normalized</dt><dd><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>normalizing</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>normally</dt><dd><a href="">c</a><br />
+</dd><dt>notations</dt><dd><a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>note</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+</dd><dt>now</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>null</dt><dd><a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+</dd><dt>null-terminated</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</dd><dt>number:</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_VERSION">LIBXML_VERSION</a><br />
+</dd><dt>number?</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>numbers</dt><dd><a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Size">xmlUTF8Size</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</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 />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
+</dd><dt>numeric</dt><dd><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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk19.html b/doc/APIchunk19.html
new file mode 100644
index 0000000..cbce12b
--- /dev/null
+++ b/doc/APIchunk19.html
@@ -0,0 +1,341 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index o-o for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index o-o for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter o:</h2><dl><dt>object?</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNumberFunction">xmlXPathNumberFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>objects</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+</dd><dt>objects:</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathModValues">xmlXPathModValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathMultValues">xmlXPathMultValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+</dd><dt>obligated</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+</dd><dt>obsolete</dt><dd><a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+</dd><dt>occupied</dt><dd><a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+</dd><dt>occur</dt><dd><a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>occured</dt><dd><a href="html/libxml-xmlerror.html#xmlCtxtGetLastError">xmlCtxtGetLastError</a><br />
+<a href="html/libxml-dict.html#xmlDictCreate">xmlDictCreate</a><br />
+<a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+<a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+<a href="html/libxml-hash.html#xmlHashCreate">xmlHashCreate</a><br />
+<a href="html/libxml-list.html#xmlListRemoveFirst">xmlListRemoveFirst</a><br />
+<a href="html/libxml-list.html#xmlListRemoveLast">xmlListRemoveLast</a><br />
+</dd><dt>occurences</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+</dd><dt>occurred</dt><dd><a href="html/libxml-xmlmemory.html#xmlMemStrdupLoc">xmlMemStrdupLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryStrdup">xmlMemoryStrdup</a><br />
+</dd><dt>occurrence</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrstr">xmlStrstr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+</dd><dt>occurrences</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>occurs</dt><dd><a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+</dd><dt>octets</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-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<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 />
+</dd><dt>of:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+</dd><dt>off</dt><dd><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-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+</dd><dt>okay</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+</dd><dt>old</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-SAX.html#globalNamespace">globalNamespace</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</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-list.html#xmlListCopy">xmlListCopy</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<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>older</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_SAX1_ENABLED">LIBXML_SAX1_ENABLED</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>omitted</dt><dd><a href="html/libxml-HTMLparser.html#htmlHandleOmittedElem">htmlHandleOmittedElem</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLocalNameFunction">xmlXPathLocalNameFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNamespaceURIFunction">xmlXPathNamespaceURIFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+</dd><dt>once</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
+<a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePI">xmlParsePI</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+</dd><dt>ones</dt><dd><a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogConvert">xmlCatalogConvert</a><br />
+<a href="html/libxml-catalog.html#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a><br />
+</dd><dt>onto</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+</dd><dt>opaque</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
+<a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+</dd><dt>open</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReadFd">htmlCtxtReadFd</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocDump">htmlDocDump</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFd">htmlReadFd</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</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#xmlIOFTPOpen">xmlIOFTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpen">xmlIOHTTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnect">xmlNanoFTPConnect</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</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-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a><br />
+<a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
+</dd><dt>opening</dt><dd><a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+</dd><dt>operands</dt><dd><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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
+</dd><dt>operating</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+</dd><dt>operation</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</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 />
+<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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathModValues">xmlXPathModValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathMultValues">xmlXPathMultValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
+</dd><dt>operations</dt><dd><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 />
+<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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
+</dd><dt>optimized</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+</dd><dt>option</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+</dd><dt>optional</dt><dd><a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCtxtResetPush">xmlCtxtResetPush</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 />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
+<a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+<a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMisc">xmlParseMisc</a><br />
+<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+<a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
+<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+</dd><dt>options</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtUseOptions">htmlCtxtUseOptions</a><br />
+<a href="html/libxml-parser.html#xmlCtxtUseOptions">xmlCtxtUseOptions</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToBuffer">xmlSaveToBuffer</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+</dd><dt>ordered</dt><dd><a href="html/libxml-list.html#xmlListAppend">xmlListAppend</a><br />
+<a href="html/libxml-list.html#xmlListInsert">xmlListInsert</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextAncestor">xmlXPathNextAncestor</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+</dd><dt>ordering</dt><dd><a href="html/libxml-list.html#xmlListDataCompare">xmlListDataCompare</a><br />
+</dd><dt>org</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_NS">XINCLUDE_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+</dd><dt>oriented</dt><dd><a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+</dd><dt>origin</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+</dd><dt>original</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlCopyError">xmlCopyError</a><br />
+<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-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectCopy">xmlXPathObjectCopy</a><br />
+</dd><dt>other</dt><dd><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-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 />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+</dd><dt>our</dt><dd><a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+</dd><dt>out</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-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
+<a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+</dd><dt>output?</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+<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>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 />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+</dd><dt>overwrite</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+</dd><dt>overwritten</dt><dd><a href="html/libxml-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
+</dd><dt>own</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</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-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+</dd><dt>owned</dt><dd><a href="html/libxml-parser.html#xmlClearParserCtxt">xmlClearParserCtxt</a><br />
+<a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
+</dd><dt>owner</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</dd><dt>ownership</dt><dd><a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+</dd><dt>owning</dt><dd><a href="html/libxml-tree.html#xmlNewDocFragment">xmlNewDocFragment</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk2.html b/doc/APIchunk2.html
new file mode 100644
index 0000000..52e3b64
--- /dev/null
+++ b/doc/APIchunk2.html
@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index D-E for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index D-E for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter D:</h2><dl><dt>DEBUG_MEMORY</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+</dd><dt>DEBUG_MEMORY_FREED</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+</dd><dt>DEBUG_MEMORY_LOCATION</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+</dd><dt>DELE</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+</dd><dt>DELEGATE</dt><dd><a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+</dd><dt>DEMO</dt><dd><a href="html/libxml-SAX.html#getPublicId">getPublicId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetPublicId">xmlSAX2GetPublicId</a><br />
+</dd><dt>DEPRECATED</dt><dd><a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
+<a href="html/libxml-SAX.html#getNamespace">getNamespace</a><br />
+<a href="html/libxml-SAX.html#globalNamespace">globalNamespace</a><br />
+<a href="html/libxml-SAX.html#namespaceDecl">namespaceDecl</a><br />
+<a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-SAX.html#setNamespace">setNamespace</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetPublic">xmlCatalogGetPublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetSystem">xmlCatalogGetSystem</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar">xmlIsBaseChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank">xmlIsBlank</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar">xmlIsChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombining">xmlIsCombining</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit">xmlIsDigit</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender">xmlIsExtender</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographic">xmlIsIdeographic</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+</dd><dt>DOCTYPE</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+</dd><dt>DOM</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
+<a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<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#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+</dd><dt>DTDs</dt><dd><a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>Data</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+</dd><dt>Datatype</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+</dd><dt>Deallocate</dt><dd><a href="html/libxml-valid.html#xmlFreeAttributeTable">xmlFreeAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeElementTable">xmlFreeElementTable</a><br />
+<a href="html/libxml-entities.html#xmlFreeEntitiesTable">xmlFreeEntitiesTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeIDTable">xmlFreeIDTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeNotationTable">xmlFreeNotationTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeRefTable">xmlFreeRefTable</a><br />
+<a href="html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a><br />
+<a href="html/libxml-xmlwriter.html#xmlFreeTextWriter">xmlFreeTextWriter</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFree">xmlRelaxNGFree</a><br />
+<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 />
+</dd><dt>Debugging</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_DEBUG_ENABLED">LIBXML_DEBUG_ENABLED</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 />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+</dd><dt>Declared</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationUse">xmlValidateNotationUse</a><br />
+</dd><dt>Default</dt><dd><a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+</dd><dt>DefaultDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>Deletes</dt><dd><a href="html/libxml-list.html#xmlListDelete">xmlListDelete</a><br />
+</dd><dt>Deprecated</dt><dd><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-entities.html#xmlCleanupPredefinedEntities">xmlCleanupPredefinedEntities</a><br />
+<a href="html/libxml-entities.html#xmlInitializePredefinedEntities">xmlInitializePredefinedEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<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>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 />
+<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+</dd><dt>Devanagari</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsDevanagari">xmlUCSIsDevanagari</a><br />
+</dd><dt>Digit</dt><dd><a href="html/libxml-parserInternals.html#IS_DIGIT">IS_DIGIT</a><br />
+<a href="html/libxml-parserInternals.html#xmlNamespaceParseNCName">xmlNamespaceParseNCName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseName">xmlXPathParseName</a><br />
+</dd><dt>Digits</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+</dd><dt>Digits?</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+</dd><dt>Dingbats</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsDingbats">xmlUCSIsDingbats</a><br />
+</dd><dt>Display</dt><dd><a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+</dd><dt>Displays</dt><dd><a href="html/libxml-xmlerror.html#xmlParserPrintFileContext">xmlParserPrintFileContext</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileInfo">xmlParserPrintFileInfo</a><br />
+</dd><dt>DocBook</dt><dd><a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-SAX.html#initdocbDefaultSAXHandler">initdocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDocbDefaultSAXHandler">xmlSAX2InitDocbDefaultSAXHandler</a><br />
+</dd><dt>Docbook</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_DOCB_ENABLED">LIBXML_DOCB_ENABLED</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+</dd><dt>Document</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-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeNewContext">xmlXIncludeNewContext</a><br />
+</dd><dt>Does</dt><dd><a href="html/libxml-SAX.html#hasExternalSubset">hasExternalSubset</a><br />
+<a href="html/libxml-parser.html#hasExternalSubsetSAXFunc">hasExternalSubsetSAXFunc</a><br />
+<a href="html/libxml-SAX.html#hasInternalSubset">hasInternalSubset</a><br />
+<a href="html/libxml-parser.html#hasInternalSubsetSAXFunc">hasInternalSubsetSAXFunc</a><br />
+<a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2HasExternalSubset">xmlSAX2HasExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2HasInternalSubset">xmlSAX2HasInternalSubset</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</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 />
+</dd><dt>Douglas</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>Draft</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>DtD</dt><dd><a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd</a><br />
+</dd><dt>DtDs</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+</dd><dt>Dtd</dt><dd><a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>Dumps</dt><dd><a href="html/libxml-tree.html#xmlBufferDump">xmlBufferDump</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttr">xmlDebugDumpAttr</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDTD">xmlDebugDumpDTD</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocument">xmlDebugDumpDocument</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpEntities">xmlDebugDumpEntities</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpString">xmlDebugDumpString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
+</dd><dt>Duplicate</dt><dd><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-list.html#xmlListDup">xmlListDup</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+</dd></dl><h2>Letter E:</h2><dl><dt>ELEMENT</dt><dd><a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+</dd><dt>EMPTY</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+</dd><dt>ENTITIES</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>ENTITY</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>ENTITY_REF</dt><dd><a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+</dd><dt>ENTITY_REFs</dt><dd><a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+</dd><dt>ETag</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEndTag">xmlParseEndTag</a><br />
+</dd><dt>EXSLT</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>Element</dt><dd><a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+<a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+</dd><dt>ElementTable</dt><dd><a href="html/libxml-HTMLparser.html#htmlTagLookup">htmlTagLookup</a><br />
+</dd><dt>Empties</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathEmptyNodeSet">xmlXPathEmptyNodeSet</a><br />
+</dd><dt>EmptyElemTag</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>EmptyElement</dt><dd><a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>EncName</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEncName">xmlParseEncName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
+</dd><dt>Encapsulating</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+</dd><dt>EnclosedAlphanumerics</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsEnclosedAlphanumerics">xmlUCSIsEnclosedAlphanumerics</a><br />
+</dd><dt>EnclosedCJKLettersandMonths</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsEnclosedCJKLettersandMonths">xmlUCSIsEnclosedCJKLettersandMonths</a><br />
+</dd><dt>Encoding</dt><dd><a href="html/libxml-HTMLtree.html#htmlGetMetaEncoding">htmlGetMetaEncoding</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+</dd><dt>EncodingDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</a><br />
+</dd><dt>EncodingDecl?</dt><dd><a href="html/libxml-parserInternals.html#xmlParseXMLDecl">xmlParseXMLDecl</a><br />
+</dd><dt>End</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndAttribute">xmlTextWriterEndAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndCDATA">xmlTextWriterEndCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndComment">xmlTextWriterEndComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTD">xmlTextWriterEndDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDAttlist">xmlTextWriterEndDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDElement">xmlTextWriterEndDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDEntity">xmlTextWriterEndDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndElement">xmlTextWriterEndElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndPI">xmlTextWriterEndPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a><br />
+</dd><dt>End-of-Line</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>Entities</dt><dd><a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+</dd><dt>EntitiesTable</dt><dd><a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
+</dd><dt>Entity</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+</dd><dt>EntityDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>EntityDef</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+</dd><dt>EntityRef</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</dd><dt>EntityReference</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+</dd><dt>EntityValue</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+</dd><dt>Enumerated</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+</dd><dt>EnumeratedType</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+</dd><dt>Enumeration</dt><dd><a href="html/libxml-tree.html#_xmlEnumeration">_xmlEnumeration</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+</dd><dt>Equal</dt><dd><a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
+</dd><dt>Escaping</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>Ethiopic</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsEthiopic">xmlUCSIsEthiopic</a><br />
+</dd><dt>Evaluate</dt><dd><a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</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>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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>Existing</dt><dd><a href="html/libxml-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+</dd><dt>Exp</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+</dd><dt>Experimental</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>Expr</dt><dd><a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+</dd><dt>Expression</dt><dd><a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+</dd><dt>Extender</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+<a href="html/libxml-parserInternals.html#xmlNamespaceParseNCName">xmlNamespaceParseNCName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseName">xmlXPathParseName</a><br />
+</dd><dt>External</dt><dd><a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<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 />
+<a href="html/libxml-parser.html#xmlSAXParseDTD">xmlSAXParseDTD</a><br />
+</dd><dt>ExternalID</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+</dd><dt>Extract</dt><dd><a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk20.html b/doc/APIchunk20.html
new file mode 100644
index 0000000..b335510
--- /dev/null
+++ b/doc/APIchunk20.html
@@ -0,0 +1,508 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index p-p for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index p-p for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter p:</h2><dl><dt>pairs</dt><dd><a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+</dd><dt>param</dt><dd><a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+</dd><dt>parameter-entity</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>parameters</dt><dd><a href="html/libxml-xmlversion.html#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a><br />
+<a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<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 />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDAttlist">xmlTextWriterWriteFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDElement">xmlTextWriterWriteFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElementNS">xmlTextWriterWriteFormatElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatPI">xmlTextWriterWriteFormatPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatRaw">xmlTextWriterWriteFormatRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatString">xmlTextWriterWriteFormatString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalFunc">xmlXPathEvalFunc</a><br />
+</dd><dt>parent-</dt><dd><a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+</dd><dt>parentheses</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+</dd><dt>parenthesis</dt><dd><a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+<a href="html/libxml-valid.html#xmlSprintfElementContent">xmlSprintfElementContent</a><br />
+</dd><dt>parenthesized</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+</dd><dt>parents</dt><dd><a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-tree.html#xmlSearchNsByHref">xmlSearchNsByHref</a><br />
+</dd><dt>partial</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+</dd><dt>particular</dt><dd><a href="html/libxml-xpath.html#_xmlNodeSet">_xmlNodeSet</a><br />
+</dd><dt>pass</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a><br />
+<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#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition2">xmlAutomataNewTransition2</a><br />
+<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</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-xpath.html#xmlXPathEvalFunc">xmlXPathEvalFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+</dd><dt>passive</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+</dd><dt>password</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+</dd><dt>past</dt><dd><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+</dd><dt>paste</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>path</dt><dd><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+<a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserGetDirectory">xmlParserGetDirectory</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>pattern</dt><dd><a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
+<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+</dd><dt>pcdata</dt><dd><a href="html/libxml-SAX.html#cdataBlock">cdataBlock</a><br />
+<a href="html/libxml-parser.html#cdataBlockSAXFunc">cdataBlockSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2CDataBlock">xmlSAX2CDataBlock</a><br />
+</dd><dt>pedantic</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlPedanticParserDefault">xmlPedanticParserDefault</a><br />
+</dd><dt>per</dt><dd><a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+</dd><dt>performance</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+</dd><dt>performed</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>pertain</dt><dd><a href="html/libxml-tree.html#xmlNewDocTextLen">xmlNewDocTextLen</a><br />
+</dd><dt>pertains</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+</dd><dt>phase</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+</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>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 />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+</dd><dt>places</dt><dd><a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+</dd><dt>plug</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+</dd><dt>plus</dt><dd><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+</dd><dt>pnetlib-doc</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+</dd><dt>pointed</dt><dd><a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
+</dd><dt>pointers</dt><dd><a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>points</dt><dd><a href="html/libxml-chvalid.html#_xmlChRangeGroup">_xmlChRangeGroup</a><br />
+</dd><dt>pop</dt><dd><a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
+</dd><dt>popped</dt><dd><a href="html/libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a><br />
+</dd><dt>pops</dt><dd><a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+</dd><dt>port</dt><dd><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</dd><dt>portable</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>pos</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+</dd><dt>position:</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>positioned</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+</dd><dt>positionned</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+</dd><dt>positions</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+</dd><dt>positive</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-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<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-relaxng.html#xmlRelaxNGValidateDoc">xmlRelaxNGValidateDoc</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>possible</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaType">_xmlSchemaType</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>possibly</dt><dd><a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>posteriori</dt><dd><a href="html/libxml-tree.html#xmlSetNs">xmlSetNs</a><br />
+</dd><dt>potential</dt><dd><a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+</dd><dt>potentially</dt><dd><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+</dd><dt>pre-interned</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>preallocated</dt><dd><a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+</dd><dt>precede</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+</dd><dt>preceded</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>precedes</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+</dd><dt>preceding</dt><dd><a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+</dd><dt>preceding-sibling</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+</dd><dt>precisely</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>precompiled</dt><dd><a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</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-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
+</dd><dt>precomputed</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+</dd><dt>predefined</dt><dd><a href="html/libxml-tree.html#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a><br />
+<a href="html/libxml-entities.html#xmlCleanupPredefinedEntities">xmlCleanupPredefinedEntities</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-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetPredefinedEntity">xmlGetPredefinedEntity</a><br />
+<a href="html/libxml-entities.html#xmlInitializePredefinedEntities">xmlInitializePredefinedEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+</dd><dt>predicate</dt><dd><a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+</dd><dt>preferably</dt><dd><a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+</dd><dt>preference</dt><dd><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 />
+</dd><dt>prefixes</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>preparsed</dt><dd><a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+<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 />
+</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 />
+<a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderValue">xmlTextReaderValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateDocument">xmlValidateDocument</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
+</dd><dt>preserve</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_PRESERVE">XML_SCHEMAS_FACET_PRESERVE</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+</dd><dt>preserved</dt><dd><a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+</dd><dt>preserving</dt><dd><a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a><br />
+</dd><dt>prev</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>prevent</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+</dd><dt>previous</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-HTMLparser.html#htmlHandleOmittedElem">htmlHandleOmittedElem</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+<a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-parser.html#xmlPedanticParserDefault">xmlPedanticParserDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>primitive</dt><dd><a href="html/libxml-xpath.html#xmlXPathConvertFunc">xmlXPathConvertFunc</a><br />
+</dd><dt>print</dt><dd><a href="html/libxml-debugXML.html#xmlShellPrintNode">xmlShellPrintNode</a><br />
+<a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+<a href="html/libxml-valid.html#xmlSprintfElementContent">xmlSprintfElementContent</a><br />
+</dd><dt>printed</dt><dd><a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+</dd><dt>prior</dt><dd><a href="html/libxml-parser.html#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a><br />
+</dd><dt>private</dt><dd><a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a><br />
+</dd><dt>problem</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePopElement">xmlRelaxNGValidatePopElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+<a href="html/libxml-valid.html#xmlValidatePopElement">xmlValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushCData">xmlValidatePushCData</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+</dd><dt>problems</dt><dd><a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
+<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+</dd><dt>procedure</dt><dd><a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a><br />
+</dd><dt>process</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-xmlreader.html#xmlNewTextReaderFilename">xmlNewTextReaderFilename</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<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-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 />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+</dd><dt>processed</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-SAX.html#startDocument">startDocument</a><br />
+<a href="html/libxml-parser.html#startDocumentSAXFunc">startDocumentSAXFunc</a><br />
+<a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+<a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartDocument">xmlSAX2StartDocument</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>processing-instruction</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIsNodeType">xmlXPathIsNodeType</a><br />
+</dd><dt>processor</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+</dd><dt>produce</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+</dd><dt>produced</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>producing</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</dd><dt>production:</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>productions</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>program</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+</dd><dt>programs</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
+</dd><dt>progresses</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+</dd><dt>progressive</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+</dd><dt>projects</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>prolog</dt><dd><a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+</dd><dt>prompt</dt><dd><a href="html/libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a><br />
+</dd><dt>proper</dt><dd><a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+</dd><dt>properly</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>properties</dt><dd><a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+</dd><dt>property</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlFreePropList">xmlFreePropList</a><br />
+<a href="html/libxml-tree.html#xmlNewDocProp">xmlNewDocProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetParserProp">xmlTextReaderGetParserProp</a><br />
+</dd><dt>protocol</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPCleanup">xmlNanoFTPCleanup</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPCleanup">xmlNanoHTTPCleanup</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</dd><dt>prototype</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
+<a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+</dd><dt>provenance</dt><dd><a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+</dd><dt>provide</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strloc">xmlUTF8Strloc</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
+</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-SAX2.html#xmlSAX2EndElementNs">xmlSAX2EndElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+</dd><dt>providing</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+</dd><dt>provoked</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</dd><dt>proximity</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+</dd><dt>proxy</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPCleanup">xmlNanoFTPCleanup</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</dd><dt>prune</dt><dd><a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+</dd><dt>publicID</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+</dd><dt>pull</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+</dd><dt>pure</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+</dd><dt>purposes</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+</dd><dt>push</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_PUSH_ENABLED">LIBXML_PUSH_ENABLED</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCtxtResetPush">xmlCtxtResetPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvalExpr">xmlXPathEvalExpr</a><br />
+</dd><dt>pushed</dt><dd><a href="html/libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a><br />
+</dd><dt>pushing</dt><dd><a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+</dd><dt>put</dt><dd><a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+</dd><dt>putative</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</dd><dt>pwd</dt><dd><a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk21.html b/doc/APIchunk21.html
new file mode 100644
index 0000000..84fe917
--- /dev/null
+++ b/doc/APIchunk21.html
@@ -0,0 +1,603 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index q-r for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index q-r for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter q:</h2><dl><dt>qualified</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ATTR">XML_SCHEMAS_QUALIF_ATTR</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ELEM">XML_SCHEMAS_QUALIF_ELEM</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+<a href="html/libxml-parserInternals.html#xmlNamespaceParseQName">xmlNamespaceParseQName</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttribute">xmlTextReaderGetAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttribute">xmlTextReaderMoveToAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderName">xmlTextReaderName</a><br />
+<a href="html/libxml-valid.html#xmlValidatePopElement">xmlValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+</dd><dt>query</dt><dd><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+</dd><dt>quot</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+</dd><dt>quotation</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderQuoteChar">xmlTextReaderQuoteChar</a><br />
+</dd><dt>quote</dt><dd><a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+</dd><dt>quoted</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+</dd><dt>quotes</dt><dd><a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+</dd></dl><h2>Letter r:</h2><dl><dt>raise</dt><dd><a href="html/libxml-xpathInternals.html#XP_ERROR">XP_ERROR</a><br />
+<a href="html/libxml-xpathInternals.html#XP_ERROR0">XP_ERROR0</a><br />
+</dd><dt>raised</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCheckError">xmlXPathCheckError</a><br />
+</dd><dt>range</dt><dd><a href="html/libxml-parserInternals.html#IS_BYTE_CHAR">IS_BYTE_CHAR</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
+<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-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 />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodes">xmlXPtrNewRangeNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
+</dd><dt>range-to</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrRangeToFunction">xmlXPtrRangeToFunction</a><br />
+</dd><dt>ranges</dt><dd><a href="html/libxml-chvalid.html#_xmlChRangeGroup">_xmlChRangeGroup</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+</dd><dt>rangesets</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+</dd><dt>ratio</dt><dd><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>ration</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+</dd><dt>raw</dt><dd><a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</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 />
+<a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatRaw">xmlTextWriterWriteFormatRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRaw">xmlTextWriterWriteRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatRaw">xmlTextWriterWriteVFormatRaw</a><br />
+</dd><dt>re-entrant</dt><dd><a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
+<a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+<a href="html/libxml-threads.html#xmlUnlockLibrary">xmlUnlockLibrary</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 />
+</dd><dt>readable</dt><dd><a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+</dd><dt>reader</dt><dd><a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a><br />
+<a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForMemory">xmlReaderForMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderWalker">xmlReaderWalker</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstBaseUri">xmlTextReaderConstBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstLocalName">xmlTextReaderConstLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstNamespaceUri">xmlTextReaderConstNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstPrefix">xmlTextReaderConstPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadState">xmlTextReaderReadState</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+</dd><dt>reading</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+</dd><dt>ready</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+</dd><dt>realloc</dt><dd><a href="html/libxml-tree.html#_xmlBuffer">_xmlBuffer</a><br />
+<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 />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+</dd><dt>reallocated</dt><dd><a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+</dd><dt>really</dt><dd><a href="html/libxml-HTMLtree.html#HTML_COMMENT_NODE">HTML_COMMENT_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_ENTITY_REF_NODE">HTML_ENTITY_REF_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PI_NODE">HTML_PI_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_TEXT_NODE">HTML_TEXT_NODE</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</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 />
+</dd><dt>receiving</dt><dd><a href="html/libxml-SAX.html#characters">characters</a><br />
+<a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Characters">xmlSAX2Characters</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>reclaim</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
+<a href="html/libxml-threads.html#xmlFreeRMutex">xmlFreeRMutex</a><br />
+</dd><dt>recognized</dt><dd><a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+</dd><dt>recommendation</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+</dd><dt>recommendation:</dt><dd><a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</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 />
+</dd><dt>recomputed</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-dict.html#xmlDictLookup">xmlDictLookup</a><br />
+</dd><dt>reconciliate</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>record</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+</dd><dt>recover</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+</dd><dt>recovery</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>recurse</dt><dd><a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+</dd><dt>recursive</dt><dd><a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
+<a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlCopyNodeList">xmlCopyNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocument">xmlDebugDumpDocument</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
+<a href="html/libxml-valid.html#xmlFreeElementContent">xmlFreeElementContent</a><br />
+<a href="html/libxml-valid.html#xmlFreeEnumeration">xmlFreeEnumeration</a><br />
+<a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
+<a href="html/libxml-tree.html#xmlFreeNodeList">xmlFreeNodeList</a><br />
+<a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>recursively</dt><dd><a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>redeclared</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>redefinition</dt><dd><a href="html/libxml-parserInternals.html#xmlErrMemory">xmlErrMemory</a><br />
+</dd><dt>redefinitions</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaType">_xmlSchemaType</a><br />
+</dd><dt>redir</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPMethodRedir">xmlNanoHTTPMethodRedir</a><br />
+</dd><dt>redirected</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPMethodRedir">xmlNanoHTTPMethodRedir</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPOpenRedir">xmlNanoHTTPOpenRedir</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRedir">xmlNanoHTTPRedir</a><br />
+</dd><dt>redirection</dt><dd><a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRedir">xmlNanoHTTPRedir</a><br />
+</dd><dt>reentrant</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</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-threads.html#xmlFreeRMutex">xmlFreeRMutex</a><br />
+<a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
+<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>ref</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-valid.html#xmlFreeRefTable">xmlFreeRefTable</a><br />
+<a href="html/libxml-tree.html#xmlNewCharRef">xmlNewCharRef</a><br />
+</dd><dt>referenced</dt><dd><a href="html/libxml-list.html#xmlLinkGetData">xmlLinkGetData</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>references</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+</dd><dt>referencing</dt><dd><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 />
+</dd><dt>referred</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+</dd><dt>refresh</dt><dd><a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+</dd><dt>refs</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>refuse</dt><dd><a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+</dd><dt>regexp</dt><dd><a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-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>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 />
+<a href="html/libxml-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a><br />
+<a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetLastError">xmlResetLastError</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetErrorHandler">xmlTextReaderGetErrorHandler</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredFuncsCleanup">xmlXPathRegisteredFuncsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredNsCleanup">xmlXPathRegisteredNsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredVariablesCleanup">xmlXPathRegisteredVariablesCleanup</a><br />
+</dd><dt>registers</dt><dd><a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+</dd><dt>registration</dt><dd><a href="html/libxml-parser.html#XML_SKIP_IDS">XML_SKIP_IDS</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a><br />
+</dd><dt>regular</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_REGEXP_ENABLED">LIBXML_REGEXP_ENABLED</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpPrint">xmlRegexpPrint</a><br />
+</dd><dt>reinitialize</dt><dd><a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
+<a href="html/libxml-parser.html#xmlClearParserCtxt">xmlClearParserCtxt</a><br />
+</dd><dt>related</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a><br />
+<a href="html/libxml-HTMLparser.html#htmlTagLookup">htmlTagLookup</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-threads.html#xmlInitThreads">xmlInitThreads</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPClose">xmlNanoHTTPClose</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+</dd><dt>relationships</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>relative</dt><dd><a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNo">xmlTextReaderMoveToAttributeNo</a><br />
+<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#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-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 />
+</dd><dt>rely</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>remainder</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+</dd><dt>remaining</dt><dd><a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+</dd><dt>remapped</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>remote</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+</dd><dt>removal</dt><dd><a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+</dd><dt>remove</dt><dd><a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</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-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+</dd><dt>removed</dt><dd><a href="html/libxml-parserInternals.html#inputPop">inputPop</a><br />
+<a href="html/libxml-parserInternals.html#namePop">namePop</a><br />
+<a href="html/libxml-parserInternals.html#nodePop">nodePop</a><br />
+<a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
+<a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>removes</dt><dd><a href="html/libxml-parserInternals.html#xmlParserInputShrink">xmlParserInputShrink</a><br />
+</dd><dt>removing</dt><dd><a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+</dd><dt>repeat</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</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-parser.html#_xmlParserCtxt">_xmlParserCtxt</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-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>replaced</dt><dd><a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>replacement</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>replaces</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+</dd><dt>replacing</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-entities.html#xmlEncodeSpecialChars">xmlEncodeSpecialChars</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>reporting</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+</dd><dt>reports</dt><dd><a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+</dd><dt>repr</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+</dd><dt>representation</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>representations</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</dd><dt>represented</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>represented:</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>representing</dt><dd><a href="html/libxml-xmlmemory.html#xmlMemUsed">xmlMemUsed</a><br />
+</dd><dt>request</dt><dd><a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</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#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a><br />
+</dd><dt>requested</dt><dd><a href="html/libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</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 />
+</dd><dt>requests</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+</dd><dt>required</dt><dd><a href="html/libxml-HTMLparser.html#htmlRequiredAttrs">htmlRequiredAttrs</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>requires</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ATTR">XML_SCHEMAS_QUALIF_ATTR</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ELEM">XML_SCHEMAS_QUALIF_ELEM</a><br />
+<a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
+</dd><dt>requred</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+</dd><dt>reserved</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+</dd><dt>reset</dt><dd><a href="html/libxml-xmlerror.html#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetBase">xmlNodeSetBase</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#xmlReadFd">xmlReadFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</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-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+</dd><dt>resides</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
+</dd><dt>resize</dt><dd><a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
+</dd><dt>resolution</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-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveURI">xmlACatalogResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolve">xmlCatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveURI">xmlCatalogResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+</dd><dt>resolveEntity</dt><dd><a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
+<a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
+</dd><dt>resolved</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+</dd><dt>resolver</dt><dd><a href="html/libxml-parser.html#xmlGetExternalEntityLoader">xmlGetExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</a><br />
+</dd><dt>resources</dt><dd><a href="html/libxml-parser.html#xmlClearParserCtxt">xmlClearParserCtxt</a><br />
+<a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
+<a href="html/libxml-threads.html#xmlFreeRMutex">xmlFreeRMutex</a><br />
+<a href="html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a><br />
+<a href="html/libxml-xmlwriter.html#xmlFreeTextWriter">xmlFreeTextWriter</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFreeParserCtxt">xmlRelaxNGFreeParserCtxt</a><br />
+<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-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</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 />
+</dd><dt>responsible</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+</dd><dt>restored</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+</dd><dt>restrict</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+</dd><dt>results</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+</dd><dt>retrieve</dt><dd><a href="html/libxml-threads.html#xmlGetGlobalState">xmlGetGlobalState</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+</dd><dt>retrieved</dt><dd><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-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+</dd><dt>retry</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>returning</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>reuse</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+</dd><dt>reuses</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFd">htmlCtxtReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFile">htmlCtxtReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadMemory">htmlCtxtReadMemory</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadDoc">xmlCtxtReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFile">xmlCtxtReadFile</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadMemory">xmlCtxtReadMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+</dd><dt>reusing</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessNode">xmlXIncludeProcessNode</a><br />
+</dd><dt>reverse</dt><dd><a href="html/libxml-list.html#xmlListReverseSearch">xmlListReverseSearch</a><br />
+<a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<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#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</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-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 />
+</dd><dt>role</dt><dd><a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+</dd><dt>roles</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+</dd><dt>rollback</dt><dd><a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>root</dt><dd><a href="html/libxml-SAX.html#externalSubset">externalSubset</a><br />
+<a href="html/libxml-parser.html#externalSubsetSAXFunc">externalSubsetSAXFunc</a><br />
+<a href="html/libxml-SAX.html#internalSubset">internalSubset</a><br />
+<a href="html/libxml-parser.html#internalSubsetSAXFunc">internalSubsetSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ExternalSubset">xmlSAX2ExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InternalSubset">xmlSAX2InternalSubset</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoot">xmlXPathRoot</a><br />
+</dd><dt>round</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+</dd><dt>routines</dt><dd><a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+</dd><dt>rule</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>rules</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_STRICT">XML_SCHEMAS_ANYATTR_STRICT</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>run</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+</dd><dt>running</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>runtime</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk22.html b/doc/APIchunk22.html
new file mode 100644
index 0000000..bac0673
--- /dev/null
+++ b/doc/APIchunk22.html
@@ -0,0 +1,825 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index s-s for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index s-s for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter s:</h2><dl><dt>safe</dt><dd><a href="html/libxml-xmlstring.html#BAD_CAST">BAD_CAST</a><br />
+<a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+</dd><dt>same</dt><dd><a href="html/libxml-HTMLtree.html#HTML_COMMENT_NODE">HTML_COMMENT_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_ENTITY_REF_NODE">HTML_ENTITY_REF_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PI_NODE">HTML_PI_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_TEXT_NODE">HTML_TEXT_NODE</a><br />
+<a href="html/libxml-parserInternals.html#IS_BLANK_CH">IS_BLANK_CH</a><br />
+<a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCmpNodes">xmlXPathCmpNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextAncestorOrSelf">xmlXPathNextAncestorOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+</dd><dt>save</dt><dd><a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<a href="html/libxml-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+</dd><dt>saved</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+</dd><dt>saves</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+</dd><dt>saving</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_OUTPUT_ENABLED">LIBXML_OUTPUT_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_WRITER_ENABLED">LIBXML_WRITER_ENABLED</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveClose">xmlSaveClose</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveFlush">xmlSaveFlush</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToBuffer">xmlSaveToBuffer</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
+</dd><dt>sax</dt><dd><a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>say</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>says</dt><dd><a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+</dd><dt>scan</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-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+</dd><dt>scanner</dt><dd><a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+</dd><dt>scanning</dt><dd><a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+</dd><dt>scannner</dt><dd><a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+</dd><dt>schemas</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaNewMemParserCtxt">xmlSchemaNewMemParserCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</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 />
+</dd><dt>schemes</dt><dd><a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+</dd><dt>scope</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-tree.html#xmlSetNsProp">xmlSetNsProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
+</dd><dt>scoping</dt><dd><a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</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-xpath.html#_xmlXPathAxis">_xmlXPathAxis</a><br />
+<a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+<a href="html/libxml-list.html#xmlListReverseSearch">xmlListReverseSearch</a><br />
+<a href="html/libxml-list.html#xmlListSearch">xmlListSearch</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrstr">xmlStrstr</a><br />
+</dd><dt>searched</dt><dd><a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+</dd><dt>section</dt><dd><a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
+<a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndCDATA">xmlTextWriterEndCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a><br />
+</dd><dt>sections</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+</dd><dt>seems</dt><dd><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 />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+</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>separated</dt><dd><a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+</dd><dt>separately</dt><dd><a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</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 />
+</dd><dt>seq</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+</dd><dt>sequence</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaElement">_xmlSchemaElement</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaFacet">_xmlSchemaFacet</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaType">_xmlSchemaType</a><br />
+<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-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 />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
+<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-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>serialization</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_OUTPUT_ENABLED">LIBXML_OUTPUT_ENABLED</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToBuffer">xmlSaveToBuffer</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+<a href="html/libxml-debugXML.html#xmlShellCat">xmlShellCat</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+<a href="html/libxml-valid.html#xmlValidatePopElement">xmlValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+</dd><dt>serializing</dt><dd><a href="html/libxml-xmlsave.html#xmlSaveToBuffer">xmlSaveToBuffer</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+</dd><dt>server</dt><dd><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCloseConnection">xmlNanoFTPCloseConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPQuit">xmlNanoFTPQuit</a><br />
+</dd><dt>set:difference</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+</dd><dt>set:distinct</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+</dd><dt>set:has-same-node</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+</dd><dt>set:intersection</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+</dd><dt>set:leading</dt><dd><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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+</dd><dt>set:trailing</dt><dd><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#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>sets</dt><dd><a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+</dd><dt>setting</dt><dd><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+</dd><dt>setups</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
+</dd><dt>sgmlsource</dt><dd><a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</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>shares</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+</dd><dt>shell</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<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 />
+<a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a><br />
+<a href="html/libxml-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+<a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+</dd><dt>shemas</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ATTR">XML_SCHEMAS_QUALIF_ATTR</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ELEM">XML_SCHEMAS_QUALIF_ELEM</a><br />
+</dd><dt>shorten</dt><dd><a href="html/libxml-debugXML.html#xmlDebugDumpString">xmlDebugDumpString</a><br />
+</dd><dt>shorthand</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderConstPrefix">xmlTextReaderConstPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPrefix">xmlTextReaderPrefix</a><br />
+</dd><dt>show</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemDisplay">xmlMemDisplay</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemShow">xmlMemShow</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-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+</dd><dt>shown</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</dd><dt>sibling</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+</dd><dt>siblings</dt><dd><a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlFreeNodeList">xmlFreeNodeList</a><br />
+<a href="html/libxml-tree.html#xmlFreePropList">xmlFreePropList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+</dd><dt>sign</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>signal</dt><dd><a href="html/libxml-xmlversion.html#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>signature</dt><dd><a href="html/libxml-debugXML.html#xmlShellCmd">xmlShellCmd</a><br />
+<a href="html/libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a><br />
+</dd><dt>signs</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</dd><dt>similar</dt><dd><a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+</dd><dt>simple</dt><dd><a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+<a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
+<a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
+<a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-threads.html#xmlMutexLock">xmlMutexLock</a><br />
+<a href="html/libxml-threads.html#xmlMutexUnlock">xmlMutexUnlock</a><br />
+<a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+</dd><dt>simply</dt><dd><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+</dd><dt>since</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+</dd><dt>single</dt><dd><a href="html/libxml-parserInternals.html#IS_DIGIT_CH">IS_DIGIT_CH</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+<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-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+</dd><dt>single-byte</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR_CH">IS_CHAR_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_EXTENDER_CH">IS_EXTENDER_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a><br />
+</dd><dt>sizes</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+</dd><dt>skip</dt><dd><a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+</dd><dt>skipped</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+</dd><dt>smallest</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a><br />
+</dd><dt>socket</dt><dd><a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+</dd><dt>software</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a><br />
+</dd><dt>solution</dt><dd><a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+</dd><dt>some</dt><dd><a href="html/libxml-parser.html#XML_SKIP_IDS">XML_SKIP_IDS</a><br />
+<a href="html/libxml-SAX.html#characters">characters</a><br />
+<a href="html/libxml-parser.html#charactersSAXFunc">charactersSAXFunc</a><br />
+<a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Characters">xmlSAX2Characters</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushCData">xmlValidatePushCData</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<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>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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>source</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLtree.html#htmlGetMetaEncoding">htmlGetMetaEncoding</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-xmlerror.html#xmlCopyError">xmlCopyError</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
+<a href="html/libxml-parser.html#xmlReadIO">xmlReadIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+</dd><dt>sourceforge</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>space</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlBufferGrow">xmlBufferGrow</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</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-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</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-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+</dd><dt>spaces</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocContentDumpFormatOutput">htmlDocContentDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocContentDumpOutput">htmlDocContentDumpOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSaveFileEnc">htmlSaveFileEnc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSaveFileFormat">htmlSaveFileFormat</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+</dd><dt>span</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
+</dd><dt>spec</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+</dd><dt>spec:</dt><dd><a href="html/libxml-parserInternals.html#IS_BASECHAR">IS_BASECHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_BLANK">IS_BLANK</a><br />
+<a href="html/libxml-parserInternals.html#IS_BYTE_CHAR">IS_BYTE_CHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_COMBINING">IS_COMBINING</a><br />
+<a href="html/libxml-parserInternals.html#IS_DIGIT">IS_DIGIT</a><br />
+<a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+<a href="html/libxml-parserInternals.html#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a><br />
+<a href="html/libxml-parserInternals.html#IS_LETTER">IS_LETTER</a><br />
+<a href="html/libxml-parserInternals.html#IS_PUBIDCHAR">IS_PUBIDCHAR</a><br />
+</dd><dt>special</dt><dd><a href="html/libxml-parser.html#XML_SKIP_IDS">XML_SKIP_IDS</a><br />
+<a href="html/libxml-tree.html#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
+</dd><dt>specialized</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+</dd><dt>specific</dt><dd><a href="html/libxml-catalog.html#XML_CATALOG_PI">XML_CATALOG_PI</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-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>specifically</dt><dd><a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+</dd><dt>specification</dt><dd><a href="html/libxml-tree.html#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>specifications</dt><dd><a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+</dd><dt>specify</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+</dd><dt>specifying</dt><dd><a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+</dd><dt>speed</dt><dd><a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>speedup</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+</dd><dt>split</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+</dd><dt>stacked</dt><dd><a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+</dd><dt>stamps</dt><dd><a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>standalone</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-SAX.html#isStandalone">isStandalone</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IsStandalone">xmlSAX2IsStandalone</a><br />
+</dd><dt>standalone=</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>standalone?</dt><dd><a href="html/libxml-parser.html#isStandaloneSAXFunc">isStandaloneSAXFunc</a><br />
+</dd><dt>standard</dt><dd><a href="html/libxml-DOCBparser.html#docbParseDocument">docbParseDocument</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDocument">htmlParseDocument</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>start</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-SAX.html#startDocument">startDocument</a><br />
+<a href="html/libxml-parser.html#startDocumentSAXFunc">startDocumentSAXFunc</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-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-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+</dd><dt>start-tag</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>started</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+</dd><dt>starting</dt><dd><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#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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</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-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-tree.html#xmlNewCharRef">xmlNewCharRef</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodes">xmlXPtrNewRangeNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
+</dd><dt>starts</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStartsWithFunction">xmlXPathStartsWithFunction</a><br />
+</dd><dt>starts-with</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStartsWithFunction">xmlXPathStartsWithFunction</a><br />
+</dd><dt>startup</dt><dd><a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+</dd><dt>stashed</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
+</dd><dt>stat</dt><dd><a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+</dd><dt>stateful</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+</dd><dt>states</dt><dd><a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+</dd><dt>static</dt><dd><a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>status</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</a><br />
+</dd><dt>stderr</dt><dd><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+</dd><dt>stdin</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+</dd><dt>stdout</dt><dd><a href="html/libxml-HTMLtree.html#htmlSaveFile">htmlSaveFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<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 />
+<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 />
+</dd><dt>steps</dt><dd><a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+<a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
+</dd><dt>still</dt><dd><a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>stop</dt><dd><a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
+</dd><dt>stops</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+</dd><dt>storage</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
+</dd><dt>store</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-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</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 />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>stored</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>str</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
+</dd><dt>strcasecmp</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcasecmp">xmlStrcasecmp</a><br />
+</dd><dt>strcat</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+</dd><dt>strchr</dt><dd><a href="html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a><br />
+</dd><dt>strcmp</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcmp">xmlStrcmp</a><br />
+</dd><dt>strdup</dt><dd><a href="html/libxml-xmlstring.html#xmlCharStrdup">xmlCharStrdup</a><br />
+<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 />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemStrdupLoc">xmlMemStrdupLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryStrdup">xmlMemoryStrdup</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a><br />
+</dd><dt>stream</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlFreeInputStream">xmlFreeInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputFromFile">xmlNewInputFromFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputStream">xmlNewInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewStringInputStream">xmlNewStringInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-uri.html#xmlPrintURI">xmlPrintURI</a><br />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+</dd><dt>streams</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+</dd><dt>strict</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_STRICT">XML_SCHEMAS_ANYATTR_STRICT</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>string--that</dt><dd><a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+</dd><dt>string-length</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+</dd><dt>string?</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+</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-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</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-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+</dd><dt>stripping</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+</dd><dt>strncasecmp</dt><dd><a href="html/libxml-xmlstring.html#xmlStrncasecmp">xmlStrncasecmp</a><br />
+</dd><dt>strncat</dt><dd><a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+</dd><dt>strncmp</dt><dd><a href="html/libxml-xmlstring.html#xmlStrncmp">xmlStrncmp</a><br />
+</dd><dt>strndup</dt><dd><a href="html/libxml-xmlstring.html#xmlCharStrndup">xmlCharStrndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrndup">xmlStrndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strndup">xmlUTF8Strndup</a><br />
+</dd><dt>strstr</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrstr">xmlStrstr</a><br />
+</dd><dt>struct</dt><dd><a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
+<a href="html/libxml-uri.html#xmlFreeURI">xmlFreeURI</a><br />
+<a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+</dd><dt>structured</dt><dd><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 />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a><br />
+</dd><dt>struture</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+</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>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#xmlNewElementContent">xmlNewElementContent</a><br />
+</dd><dt>subelements</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</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 />
+</dd><dt>sublanguage</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+</dd><dt>submits</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+</dd><dt>subsequent</dt><dd><a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+</dd><dt>subset?</dt><dd><a href="html/libxml-parser.html#hasExternalSubsetSAXFunc">hasExternalSubsetSAXFunc</a><br />
+</dd><dt>subsets</dt><dd><a href="html/libxml-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>substituted</dt><dd><a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+</dd><dt>substituting</dt><dd><a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+</dd><dt>substitution</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-entities.html#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a><br />
+<a href="html/libxml-tree.html#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-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parser.html#xmlPedanticParserDefault">xmlPedanticParserDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<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>substitutions</dt><dd><a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<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>substring</dt><dd><a href="html/libxml-tree.html#xmlNodeAddContent">xmlNodeAddContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>substring-after</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+</dd><dt>substring-before</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+</dd><dt>subtraction</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+</dd><dt>subtree</dt><dd><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+<a href="html/libxml-valid.html#xmlValidateElement">xmlValidateElement</a><br />
+<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>succeeded</dt><dd><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-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>succeeds</dt><dd><a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+</dd><dt>successful</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogConvert">xmlCatalogConvert</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+<a href="html/libxml-list.html#xmlListPushBack">xmlListPushBack</a><br />
+<a href="html/libxml-list.html#xmlListPushFront">xmlListPushFront</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+<a href="html/libxml-tree.html#xmlUnsetNsProp">xmlUnsetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlUnsetProp">xmlUnsetProp</a><br />
+</dd><dt>successfully</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+</dd><dt>succession</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+</dd><dt>successive</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+</dd><dt>such</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<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>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 />
+</dd><dt>sum</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSumFunction">xmlXPathSumFunction</a><br />
+</dd><dt>super</dt><dd><a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+</dd><dt>super-strict</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</dd><dt>supplied</dt><dd><a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</a><br />
+</dd><dt>supported</dt><dd><a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>supposed</dt><dd><a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+</dd><dt>sure</dt><dd><a href="html/libxml-xmlsave.html#xmlSaveClose">xmlSaveClose</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveFlush">xmlSaveFlush</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+</dd><dt>surprising</dt><dd><a href="html/libxml-encoding.html#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a><br />
+</dd><dt>surrogate</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+</dd><dt>switch</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+</dd><dt>synchronizing</dt><dd><a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+<a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+</dd><dt>syntax</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>systematically</dt><dd><a href="html/libxml-valid.html#xmlIsID">xmlIsID</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk23.html b/doc/APIchunk23.html
new file mode 100644
index 0000000..325cdae
--- /dev/null
+++ b/doc/APIchunk23.html
@@ -0,0 +1,430 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index t-t for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index t-t for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter t:</h2><dl><dt>tag</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<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#htmlTagLookup">htmlTagLookup</a><br />
+<a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetName">xmlNodeSetName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEndTag">xmlParseEndTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a><br />
+</dd><dt>tagged</dt><dd><a href="html/libxml-SAX.html#isStandalone">isStandalone</a><br />
+<a href="html/libxml-parser.html#isStandaloneSAXFunc">isStandaloneSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IsStandalone">xmlSAX2IsStandalone</a><br />
+</dd><dt>tags</dt><dd><a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-HTMLtree.html#htmlGetMetaEncoding">htmlGetMetaEncoding</a><br />
+<a href="html/libxml-HTMLparser.html#htmlHandleOmittedElem">htmlHandleOmittedElem</a><br />
+<a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+<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>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 />
+<a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>tells</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+</dd><dt>temporary</dt><dd><a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</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 />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlBufferCCat">xmlBufferCCat</a><br />
+<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-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlReadDoc">xmlReadDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a><br />
+</dd><dt>termination</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+</dd><dt>test</dt><dd><a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+</dd><dt>tested</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+</dd><dt>testing</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+</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-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 />
+<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</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#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>their</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</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#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathModValues">xmlXPathModValues</a><br />
+<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 />
+<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 />
+</dd><dt>there</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+<a href="html/libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>these</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+</dd><dt>they</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+</dd><dt>thing</dt><dd><a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+</dd><dt>third</dt><dd><a href="html/libxml-hash.html#xmlHashAddEntry3">xmlHashAddEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashLookup3">xmlHashLookup3</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup3">xmlHashQLookup3</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>those</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>though</dt><dd><a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+</dd><dt>thread</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_THREAD_ENABLED">LIBXML_THREAD_ENABLED</a><br />
+<a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
+<a href="html/libxml-threads.html#xmlGetGlobalState">xmlGetGlobalState</a><br />
+<a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+<a href="html/libxml-threads.html#xmlGetThreadId">xmlGetThreadId</a><br />
+<a href="html/libxml-threads.html#xmlInitThreads">xmlInitThreads</a><br />
+<a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
+<a href="html/libxml-threads.html#xmlIsMainThread">xmlIsMainThread</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+</dd><dt>through</dt><dd><a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+</dd><dt>thumblers</dt><dd><a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+</dd><dt>thus</dt><dd><a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+<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>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 />
+</dd><dt>token</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
+<a href="html/libxml-threads.html#xmlMutexLock">xmlMutexLock</a><br />
+<a href="html/libxml-threads.html#xmlMutexUnlock">xmlMutexUnlock</a><br />
+<a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+</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 />
+<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 />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
+<a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
+<a href="html/libxml-tree.html#xmlFreeNodeList">xmlFreeNodeList</a><br />
+<a href="html/libxml-tree.html#xmlFreeProp">xmlFreeProp</a><br />
+<a href="html/libxml-tree.html#xmlFreePropList">xmlFreePropList</a><br />
+<a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
+</dd><dt>top</dt><dd><a href="html/libxml-xpathInternals.html#CAST_TO_BOOLEAN">CAST_TO_BOOLEAN</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_NUMBER">CAST_TO_NUMBER</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_STRING">CAST_TO_STRING</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_TYPE">CHECK_TYPE</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_TYPE0">CHECK_TYPE0</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_TOPLEVEL">XML_SCHEMAS_ELEM_TOPLEVEL</a><br />
+<a href="html/libxml-parserInternals.html#inputPop">inputPop</a><br />
+<a href="html/libxml-parserInternals.html#inputPush">inputPush</a><br />
+<a href="html/libxml-parserInternals.html#namePop">namePop</a><br />
+<a href="html/libxml-parserInternals.html#namePush">namePush</a><br />
+<a href="html/libxml-parserInternals.html#nodePop">nodePop</a><br />
+<a href="html/libxml-parserInternals.html#nodePush">nodePush</a><br />
+<a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
+<a href="html/libxml-xpathInternals.html#valuePush">valuePush</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 />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
+</dd><dt>total</dt><dd><a href="html/libxml-xmlIO.html#_xmlOutputBuffer">_xmlOutputBuffer</a><br />
+<a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+</dd><dt>touch</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>track</dt><dd><a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+</dd><dt>tracking</dt><dd><a href="html/libxml-xmlerror.html#xmlParserPrintFileContext">xmlParserPrintFileContext</a><br />
+</dd><dt>trailing</dt><dd><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#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>trancoding</dt><dd><a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+</dd><dt>transaction</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
+</dd><dt>transcoding</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-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+</dd><dt>transfered</dt><dd><a href="html/libxml-parserInternals.html#xmlParsePI">xmlParsePI</a><br />
+</dd><dt>transformation</dt><dd><a href="html/libxml-encoding.html#xmlCharEncCloseFunc">xmlCharEncCloseFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>transformed</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGDumpTree">xmlRelaxNGDumpTree</a><br />
+</dd><dt>transistion</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+</dd><dt>transitions</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</a><br />
+</dd><dt>translate</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>translation</dt><dd><a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+</dd><dt>transmit</dt><dd><a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+</dd><dt>transport</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPClose">xmlNanoFTPClose</a><br />
+</dd><dt>traversal</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+<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#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextChild">xmlXPathNextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+</dd><dt>traverse</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>treaming</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>treated</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>tries</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</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-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>trio</dt><dd><a href="html/libxml-xmlversion.html#WITHOUT_TRIO">WITHOUT_TRIO</a><br />
+<a href="html/libxml-xmlversion.html#WITH_TRIO">WITH_TRIO</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>troubles</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+</dd><dt>try</dt><dd><a href="html/libxml-xpathInternals.html#CAST_TO_BOOLEAN">CAST_TO_BOOLEAN</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_NUMBER">CAST_TO_NUMBER</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_STRING">CAST_TO_STRING</a><br />
+<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#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</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-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</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-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+</dd><dt>ttribute</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+</dd><dt>tune</dt><dd><a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
+</dd><dt>tuple</dt><dd><a href="html/libxml-hash.html#xmlHashAddEntry2">xmlHashAddEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashAddEntry3">xmlHashAddEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashLookup2">xmlHashLookup2</a><br />
+<a href="html/libxml-hash.html#xmlHashLookup3">xmlHashLookup3</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup2">xmlHashQLookup2</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup3">xmlHashQLookup3</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+</dd><dt>tuples</dt><dd><a href="html/libxml-hash.html#xmlHashAddEntry2">xmlHashAddEntry2</a><br />
+</dd><dt>turn</dt><dd><a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+</dd><dt>turned</dt><dd><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-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+</dd><dt>two</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+<a href="html/libxml-tree.html#xmlTextMerge">xmlTextMerge</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Charcmp">xmlUTF8Charcmp</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCmpNodes">xmlXPathCmpNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+</dd><dt>two-character</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>types</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_COLLAPSE">XML_SCHEMAS_FACET_COLLAPSE</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+</dd><dt>typo</dt><dd><a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk24.html b/doc/APIchunk24.html
new file mode 100644
index 0000000..d418a4f
--- /dev/null
+++ b/doc/APIchunk24.html
@@ -0,0 +1,462 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index u-w for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index u-w for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter u:</h2><dl><dt>ugly</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
+</dd><dt>unary</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
+</dd><dt>unclean</dt><dd><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+</dd><dt>uncompressed</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</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-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-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+<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 />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</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>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 />
+<a href="html/libxml-parser.html#xmlCtxtUseOptions">xmlCtxtUseOptions</a><br />
+</dd><dt>union</dt><dd><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-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 />
+</dd><dt>uniqueness</dt><dd><a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+</dd><dt>units</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+</dd><dt>unknown</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_SKIP">XML_SCHEMAS_ANYATTR_SKIP</a><br />
+<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-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-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-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+</dd><dt>unlink</dt><dd><a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
+</dd><dt>unlinked</dt><dd><a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+</dd><dt>unlock</dt><dd><a href="html/libxml-threads.html#xmlMutexUnlock">xmlMutexUnlock</a><br />
+<a href="html/libxml-threads.html#xmlRMutexUnlock">xmlRMutexUnlock</a><br />
+</dd><dt>unparsed</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-SAX.html#unparsedEntityDecl">unparsedEntityDecl</a><br />
+<a href="html/libxml-parser.html#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2UnparsedEntityDecl">xmlSAX2UnparsedEntityDecl</a><br />
+</dd><dt>unpredictable</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-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
+</dd><dt>unpredictiable</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+</dd><dt>unregisters</dt><dd><a href="html/libxml-encoding.html#xmlCleanupCharEncodingHandlers">xmlCleanupCharEncodingHandlers</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterNs">xmlXPathRegisterNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariable">xmlXPathRegisterVariable</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableNS">xmlXPathRegisterVariableNS</a><br />
+</dd><dt>unsafe</dt><dd><a href="html/libxml-valid.html#xmlSprintfElementContent">xmlSprintfElementContent</a><br />
+</dd><dt>unsigned</dt><dd><a href="">c</a><br />
+<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+</dd><dt>until</dt><dd><a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</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-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>unused</dt><dd><a href="html/libxml-xmlversion.html#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a><br />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</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-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<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#xmlShellDir">xmlShellDir</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+<a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+</dd><dt>update</dt><dd><a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-tree.html#xmlSetListDoc">xmlSetListDoc</a><br />
+<a href="html/libxml-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+</dd><dt>updated</dt><dd><a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
+<a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+<a href="html/libxml-parserInternals.html#xmlNamespaceParseQName">xmlNamespaceParseQName</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+</dd><dt>updates</dt><dd><a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</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>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 />
+</dd><dt>used:</dt><dd><a href="html/libxml-parser.html#XML_DEFAULT_VERSION">XML_DEFAULT_VERSION</a><br />
+</dd><dt>useful</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-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+</dd><dt>useless</dt><dd><a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</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 />
+<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 />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+</dd><dt>utf8</dt><dd><a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd></dl><h2>Letter v:</h2><dl><dt>val1</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+</dd><dt>validated</dt><dd><a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+</dd><dt>validates</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+<a href="html/libxml-valid.html#xmlValidateDocument">xmlValidateDocument</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+</dd><dt>validating</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+</dd><dt>validity</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</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#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+<a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+</dd><dt>value:</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</dd><dt>values:</dt><dd><a href="html/libxml-tree.html#xmlSetCompressMode">xmlSetCompressMode</a><br />
+<a href="html/libxml-tree.html#xmlSetDocCompressMode">xmlSetDocCompressMode</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+</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 />
+<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 />
+</dd><dt>variant</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+</dd><dt>very</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+</dd><dt>via</dt><dd><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 />
+</dd><dt>view</dt><dd><a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+</dd><dt>visible</dt><dd><a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>void</dt><dd><a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd></dl><h2>Letter w:</h2><dl><dt>walker</dt><dd><a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
+</dd><dt>walking</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-list.html#xmlListWalker">xmlListWalker</a><br />
+</dd><dt>want</dt><dd><a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>warn</dt><dd><a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
+</dd><dt>warning</dt><dd><a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<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-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</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#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+</dd><dt>warnings</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlPedanticParserDefault">xmlPedanticParserDefault</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+</dd><dt>way</dt><dd><a href="html/libxml-HTMLtree.html#HTML_COMMENT_NODE">HTML_COMMENT_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_ENTITY_REF_NODE">HTML_ENTITY_REF_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PI_NODE">HTML_PI_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_TEXT_NODE">HTML_TEXT_NODE</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+</dd><dt>ways:</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>well</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+</dd><dt>well-balanced</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+</dd><dt>well-formed</dt><dd><a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>well-formedness</dt><dd><a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetLastError">xmlResetLastError</a><br />
+</dd><dt>wellformed</dt><dd><a href="html/libxml-parser.html#xmlParseFile">xmlParseFile</a><br />
+</dd><dt>were</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemShow">xmlMemShow</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<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>wether</dt><dd><a href="html/libxml-xpath.html#_xmlNodeSet">_xmlNodeSet</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
+</dd><dt>what</dt><dd><a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDefaults">xmlCatalogSetDefaults</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
+</dd><dt>where</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-tree.html#xmlCopyProp">xmlCopyProp</a><br />
+<a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</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 />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+</dd><dt>while</dt><dd><a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>white</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+</dd><dt>whitespace</dt><dd><a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+</dd><dt>whitespace-separated</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+</dd><dt>whitespaces</dt><dd><a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+</dd><dt>whose</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+</dd><dt>with_ns</dt><dd><a href="html/libxml-xpath.html#_xmlNodeSet">_xmlNodeSet</a><br />
+</dd><dt>within</dt><dd><a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
+<a href="html/libxml-tree.html#xmlNewDocComment">xmlNewDocComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocText">xmlNewDocText</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileContext">xmlParserPrintFileContext</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+</dd><dt>without</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-SAX.html#entityDecl">entityDecl</a><br />
+<a href="html/libxml-parser.html#entityDeclSAXFunc">entityDeclSAXFunc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDocNoDtD">htmlNewDocNoDtD</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<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-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-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 />
+</dd><dt>word</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>words</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+</dd><dt>work</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>worked</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+</dd><dt>works</dt><dd><a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+</dd><dt>would</dt><dd><a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+</dd><dt>write</dt><dd><a href="html/libxml-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
+<a href="html/libxml-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPRead">xmlIOFTPRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPRead">xmlIOHTTPRead</a><br />
+<a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+</dd><dt>writer</dt><dd><a href="html/libxml-xmlwriter.html#xmlFreeTextWriter">xmlFreeTextWriter</a><br />
+</dd><dt>writes</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+</dd><dt>writing</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+</dd><dt>www</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_NS">XINCLUDE_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
+<a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk25.html b/doc/APIchunk25.html
new file mode 100644
index 0000000..8dc92c9
--- /dev/null
+++ b/doc/APIchunk25.html
@@ -0,0 +1,492 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index x-x for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index x-x for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter x:</h2><dl><dt>x00B7</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x02D0</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x02D1</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x0387</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x0640</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x0E46</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x0EC6</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x10000-</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+</dd><dt>x10FFFF</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+</dd><dt>x20</dt><dd><a href="html/libxml-parserInternals.html#IS_BLANK">IS_BLANK</a><br />
+<a href="html/libxml-parserInternals.html#IS_BYTE_CHAR">IS_BYTE_CHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_PUBIDCHAR">IS_PUBIDCHAR</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 />
+</dd><dt>x20-</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+</dd><dt>x3005</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x3007</dt><dd><a href="html/libxml-parserInternals.html#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a><br />
+</dd><dt>x3021-</dt><dd><a href="html/libxml-parserInternals.html#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a><br />
+</dd><dt>x3029</dt><dd><a href="html/libxml-parserInternals.html#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a><br />
+</dd><dt>x3031-</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x3035</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x309D-</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x309E</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x30FC-</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x30FE</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+</dd><dt>x4E00-</dt><dd><a href="html/libxml-parserInternals.html#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a><br />
+</dd><dt>x9FA5</dt><dd><a href="html/libxml-parserInternals.html#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a><br />
+</dd><dt>xD7FF</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+</dd><dt>xE000-</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+</dd><dt>xFFFD</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+</dd><dt>xlink</dt><dd><a href="html/libxml-xlink.html#xlinkGetDefaultDetect">xlinkGetDefaultDetect</a><br />
+<a href="html/libxml-xlink.html#xlinkGetDefaultHandler">xlinkGetDefaultHandler</a><br />
+<a href="html/libxml-xlink.html#xlinkSetDefaultDetect">xlinkSetDefaultDetect</a><br />
+<a href="html/libxml-xlink.html#xlinkSetDefaultHandler">xlinkSetDefaultHandler</a><br />
+</dd><dt>xlinkHandlerPtr</dt><dd><a href="html/libxml-xlink.html#xlinkGetDefaultHandler">xlinkGetDefaultHandler</a><br />
+</dd><dt>xlinkType</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+</dd><dt>xml-c14n</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>xml-exc-c14n</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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>xml-name</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>xml:</dt><dd><a href="html/libxml-tree.html#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a><br />
+</dd><dt>xml:base</dt><dd><a href="html/libxml-tree.html#xmlNodeSetBase">xmlNodeSetBase</a><br />
+</dd><dt>xml:lang</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetLang">xmlNodeSetLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+</dd><dt>xml:space</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a><br />
+</dd><dt>xmlAttr</dt><dd><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+</dd><dt>xmlAttrPtr</dt><dd><a href="html/libxml-tree.html#xmlCopyProp">xmlCopyProp</a><br />
+<a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</a><br />
+<a href="html/libxml-valid.html#xmlGetID">xmlGetID</a><br />
+</dd><dt>xmlAttributePtr</dt><dd><a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+</dd><dt>xmlAttributeTablePtr</dt><dd><a href="html/libxml-valid.html#xmlCopyAttributeTable">xmlCopyAttributeTable</a><br />
+</dd><dt>xmlBuffer</dt><dd><a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>xmlBufferPtr</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+</dd><dt>xmlCatalogAllow</dt><dd><a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
+</dd><dt>xmlCatalogPtr</dt><dd><a href="html/libxml-catalog.html#xmlNewCatalog">xmlNewCatalog</a><br />
+</dd><dt>xmlCatalogResolvePublic</dt><dd><a href="html/libxml-catalog.html#xmlCatalogGetPublic">xmlCatalogGetPublic</a><br />
+</dd><dt>xmlCatalogResolveSystem</dt><dd><a href="html/libxml-catalog.html#xmlCatalogGetSystem">xmlCatalogGetSystem</a><br />
+</dd><dt>xmlCharEncoding</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a><br />
+</dd><dt>xmlCharEncodingHandler</dt><dd><a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+</dd><dt>xmlCharEncodingHandlerPtr</dt><dd><a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a><br />
+</dd><dt>xmlCharEncodingInputFunc</dt><dd><a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+</dd><dt>xmlCharEncodingOutputFunc</dt><dd><a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+</dd><dt>xmlChars</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+</dd><dt>xmlCleanupParser</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+</dd><dt>xmlCleanupThreads</dt><dd><a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
+</dd><dt>xmlCreateIntSubset</dt><dd><a href="html/libxml-tree.html#xmlNewDtd">xmlNewDtd</a><br />
+</dd><dt>xmlDefaultSAXLocator</dt><dd><a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+</dd><dt>xmlDocPtr</dt><dd><a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+</dd><dt>xmlDocumentGetBase</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+</dd><dt>xmlDtdPtr</dt><dd><a href="html/libxml-tree.html#xmlCopyDtd">xmlCopyDtd</a><br />
+<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlParseDTD">xmlParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDTD">xmlSAXParseDTD</a><br />
+</dd><dt>xmlElementContentPtr</dt><dd><a href="html/libxml-valid.html#xmlCopyElementContent">xmlCopyElementContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</dd><dt>xmlElementPtr</dt><dd><a href="html/libxml-valid.html#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+</dd><dt>xmlElementTablePtr</dt><dd><a href="html/libxml-valid.html#xmlCopyElementTable">xmlCopyElementTable</a><br />
+</dd><dt>xmlEncodeEntities</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+</dd><dt>xmlEncodeEntitiesReentrant</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+</dd><dt>xmlEntitiesTablePtr</dt><dd><a href="html/libxml-entities.html#xmlCopyEntitiesTable">xmlCopyEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
+</dd><dt>xmlEntityPtr</dt><dd><a href="html/libxml-SAX.html#getEntity">getEntity</a><br />
+<a href="html/libxml-parser.html#getEntitySAXFunc">getEntitySAXFunc</a><br />
+<a href="html/libxml-SAX.html#getParameterEntity">getParameterEntity</a><br />
+<a href="html/libxml-parser.html#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetEntity">xmlSAX2GetEntity</a><br />
+<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>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 />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</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#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderValue">xmlTextReaderValue</a><br />
+</dd><dt>xmlFreeDoc</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+</dd><dt>xmlFreeMutex</dt><dd><a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
+</dd><dt>xmlGetGlobalState</dt><dd><a href="html/libxml-threads.html#xmlGetGlobalState">xmlGetGlobalState</a><br />
+</dd><dt>xmlGetNoNsProp</dt><dd><a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+</dd><dt>xmlGetNsProp</dt><dd><a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+</dd><dt>xmlGetProp</dt><dd><a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+</dd><dt>xmlGetThreadId</dt><dd><a href="html/libxml-threads.html#xmlGetThreadId">xmlGetThreadId</a><br />
+</dd><dt>xmlHashTablePtr</dt><dd><a href="html/libxml-hash.html#xmlHashCreate">xmlHashCreate</a><br />
+</dd><dt>xmlIDPtr</dt><dd><a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+</dd><dt>xmlIndentTreeOutput</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+</dd><dt>xmlInitParser</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+</dd><dt>xmlInitThreads</dt><dd><a href="html/libxml-threads.html#xmlInitThreads">xmlInitThreads</a><br />
+</dd><dt>xmlInitializeCatalog</dt><dd><a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+</dd><dt>xmlInitializeGlobalState</dt><dd><a href="html/libxml-globals.html#xmlInitializeGlobalState">xmlInitializeGlobalState</a><br />
+</dd><dt>xmlInputCloseCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+</dd><dt>xmlInputMatchCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+</dd><dt>xmlInputOpenCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+</dd><dt>xmlInputReadCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+</dd><dt>xmlIsBaseCharQ</dt><dd><a href="html/libxml-chvalid.html#xmlIsBaseChar">xmlIsBaseChar</a><br />
+</dd><dt>xmlIsBaseChar_ch</dt><dd><a href="html/libxml-chvalid.html#xmlIsBaseChar">xmlIsBaseChar</a><br />
+</dd><dt>xmlIsBlankNode</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>xmlIsBlankQ</dt><dd><a href="html/libxml-chvalid.html#xmlIsBlank">xmlIsBlank</a><br />
+</dd><dt>xmlIsBlank_ch</dt><dd><a href="html/libxml-chvalid.html#xmlIsBlank">xmlIsBlank</a><br />
+</dd><dt>xmlIsCharQ</dt><dd><a href="html/libxml-chvalid.html#xmlIsChar">xmlIsChar</a><br />
+</dd><dt>xmlIsChar_ch</dt><dd><a href="html/libxml-chvalid.html#xmlIsChar">xmlIsChar</a><br />
+</dd><dt>xmlIsCombiningQ</dt><dd><a href="html/libxml-chvalid.html#xmlIsCombining">xmlIsCombining</a><br />
+</dd><dt>xmlIsDigitQ</dt><dd><a href="html/libxml-chvalid.html#xmlIsDigit">xmlIsDigit</a><br />
+</dd><dt>xmlIsDigit_ch</dt><dd><a href="html/libxml-chvalid.html#xmlIsDigit">xmlIsDigit</a><br />
+</dd><dt>xmlIsExtenderQ</dt><dd><a href="html/libxml-chvalid.html#xmlIsExtender">xmlIsExtender</a><br />
+</dd><dt>xmlIsExtender_ch</dt><dd><a href="html/libxml-chvalid.html#xmlIsExtender">xmlIsExtender</a><br />
+</dd><dt>xmlIsIdeographicQ</dt><dd><a href="html/libxml-chvalid.html#xmlIsIdeographic">xmlIsIdeographic</a><br />
+</dd><dt>xmlIsMainThread</dt><dd><a href="html/libxml-threads.html#xmlIsMainThread">xmlIsMainThread</a><br />
+</dd><dt>xmlIsPubidCharQ</dt><dd><a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
+</dd><dt>xmlIsPubidChar_ch</dt><dd><a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
+</dd><dt>xmlKeepBlanksDefault</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+</dd><dt>xmlLineNumbersDefault</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+</dd><dt>xmlListWalk</dt><dd><a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
+</dd><dt>xmlLoadExtDtdDefaultValue</dt><dd><a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
+<a href="html/libxml-parser.html#XML_DETECT_IDS">XML_DETECT_IDS</a><br />
+<a href="html/libxml-parser.html#XML_SKIP_IDS">XML_SKIP_IDS</a><br />
+</dd><dt>xmlLocationSetPtr</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetCreate">xmlXPtrLocationSetCreate</a><br />
+</dd><dt>xmlLockLibrary</dt><dd><a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
+</dd><dt>xmlMutexLock</dt><dd><a href="html/libxml-threads.html#xmlMutexLock">xmlMutexLock</a><br />
+</dd><dt>xmlMutexUnlock</dt><dd><a href="html/libxml-threads.html#xmlMutexUnlock">xmlMutexUnlock</a><br />
+</dd><dt>xmlNanoFTPGet</dt><dd><a href="html/libxml-nanoftp.html#ftpDataCallback">ftpDataCallback</a><br />
+</dd><dt>xmlNanoFTPList</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</dd><dt>xmlNewChild</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</dd><dt>xmlNewDocRawNode</dt><dd><a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+</dd><dt>xmlNewMutex</dt><dd><a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+</dd><dt>xmlNewNode</dt><dd><a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+</dd><dt>xmlNewTextChild</dt><dd><a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</dd><dt>xmlNewTextWriter</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+</dd><dt>xmlNodeListGetString</dt><dd><a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+</dd><dt>xmlNodePtr</dt><dd><a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlCopyNodeList">xmlCopyNodeList</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+</dd><dt>xmlNodeSetPtr</dt><dd><a href="html/libxml-xpath.html#xmlXPathFreeNodeSet">xmlXPathFreeNodeSet</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a><br />
+</dd><dt>xmlNodeType</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+</dd><dt>xmlNotationPtr</dt><dd><a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+</dd><dt>xmlNotationTablePtr</dt><dd><a href="html/libxml-valid.html#xmlCopyNotationTable">xmlCopyNotationTable</a><br />
+</dd><dt>xmlNsPtr</dt><dd><a href="html/libxml-SAX.html#getNamespace">getNamespace</a><br />
+<a href="html/libxml-tree.html#xmlCopyNamespace">xmlCopyNamespace</a><br />
+<a href="html/libxml-tree.html#xmlCopyNamespaceList">xmlCopyNamespaceList</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+</dd><dt>xmlOutputBufferPtr</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a><br />
+</dd><dt>xmlOutputCloseCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+</dd><dt>xmlOutputMatchCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+</dd><dt>xmlOutputOpenCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+</dd><dt>xmlOutputWriteCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+</dd><dt>xmlParseAttValue</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>xmlParseChunk</dt><dd><a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+</dd><dt>xmlParseElementContentDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</dd><dt>xmlParseElementDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+</dd><dt>xmlParseExternalID</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+</dd><dt>xmlParseFile</dt><dd><a href="html/libxml-catalog.html#xmlParseCatalogFile">xmlParseCatalogFile</a><br />
+</dd><dt>xmlParseNamespace:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>xmlParseURI</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>xmlParserCtxtPtr</dt><dd><a href="html/libxml-parser.html#xmlNewParserCtxt">xmlNewParserCtxt</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+</dd><dt>xmlParserError</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+</dd><dt>xmlParserErrors</dt><dd><a href="html/libxml-DOCBparser.html#docbParseChunk">docbParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseChunk">htmlParseChunk</a><br />
+<a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
+</dd><dt>xmlParserFindNodeInfoIndex</dt><dd><a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+</dd><dt>xmlParserHandleReference</dt><dd><a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>xmlParserInputBufferPtr</dt><dd><a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+</dd><dt>xmlParserInputPtr</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-parserInternals.html#xmlFreeInputStream">xmlFreeInputStream</a><br />
+<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileContext">xmlParserPrintFileContext</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileInfo">xmlParserPrintFileInfo</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+</dd><dt>xmlParserNodeInfo</dt><dd><a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+</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>xmlPopInput:</dt><dd><a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
+</dd><dt>xmlPushInput:</dt><dd><a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+</dd><dt>xmlRFreeMutex</dt><dd><a href="html/libxml-threads.html#xmlFreeRMutex">xmlFreeRMutex</a><br />
+</dd><dt>xmlRMutexLock</dt><dd><a href="html/libxml-threads.html#xmlRMutexLock">xmlRMutexLock</a><br />
+</dd><dt>xmlRMutexUnlock</dt><dd><a href="html/libxml-threads.html#xmlRMutexUnlock">xmlRMutexUnlock</a><br />
+</dd><dt>xmlRNewMutex</dt><dd><a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+</dd><dt>xmlReader</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_READER_ENABLED">LIBXML_READER_ENABLED</a><br />
+</dd><dt>xmlRefPtr</dt><dd><a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+</dd><dt>xmlRelaxNGParserFlag</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a><br />
+</dd><dt>xmlRelaxNGValidatePushElement</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a><br />
+</dd><dt>xmlSAX2Attribute</dt><dd><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+</dd><dt>xmlSAX2AttributeDecl</dt><dd><a href="html/libxml-SAX.html#attributeDecl">attributeDecl</a><br />
+</dd><dt>xmlSAX2CDataBlock</dt><dd><a href="html/libxml-SAX.html#cdataBlock">cdataBlock</a><br />
+</dd><dt>xmlSAX2Characters</dt><dd><a href="html/libxml-SAX.html#characters">characters</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+</dd><dt>xmlSAX2Comment</dt><dd><a href="html/libxml-SAX.html#comment">comment</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Comment">xmlSAX2Comment</a><br />
+</dd><dt>xmlSAX2ElementDecl</dt><dd><a href="html/libxml-SAX.html#elementDecl">elementDecl</a><br />
+</dd><dt>xmlSAX2EndDocument</dt><dd><a href="html/libxml-SAX.html#endDocument">endDocument</a><br />
+</dd><dt>xmlSAX2EndElement</dt><dd><a href="html/libxml-SAX.html#endElement">endElement</a><br />
+</dd><dt>xmlSAX2EntityDecl</dt><dd><a href="html/libxml-SAX.html#entityDecl">entityDecl</a><br />
+</dd><dt>xmlSAX2ExternalSubset</dt><dd><a href="html/libxml-SAX.html#externalSubset">externalSubset</a><br />
+</dd><dt>xmlSAX2GetColumnNumber</dt><dd><a href="html/libxml-SAX.html#getColumnNumber">getColumnNumber</a><br />
+</dd><dt>xmlSAX2GetEntity</dt><dd><a href="html/libxml-SAX.html#getEntity">getEntity</a><br />
+</dd><dt>xmlSAX2GetLineNumber</dt><dd><a href="html/libxml-SAX.html#getLineNumber">getLineNumber</a><br />
+</dd><dt>xmlSAX2GetParameterEntity</dt><dd><a href="html/libxml-SAX.html#getParameterEntity">getParameterEntity</a><br />
+</dd><dt>xmlSAX2GetPublicId</dt><dd><a href="html/libxml-SAX.html#getPublicId">getPublicId</a><br />
+</dd><dt>xmlSAX2GetSystemId</dt><dd><a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+</dd><dt>xmlSAX2HasExternalSubset</dt><dd><a href="html/libxml-SAX.html#hasExternalSubset">hasExternalSubset</a><br />
+</dd><dt>xmlSAX2HasInternalSubset</dt><dd><a href="html/libxml-SAX.html#hasInternalSubset">hasInternalSubset</a><br />
+</dd><dt>xmlSAX2IgnorableWhitespace</dt><dd><a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>xmlSAX2InitDefaultSAXHandler</dt><dd><a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+</dd><dt>xmlSAX2InitDocbDefaultSAXHandler</dt><dd><a href="html/libxml-SAX.html#initdocbDefaultSAXHandler">initdocbDefaultSAXHandler</a><br />
+</dd><dt>xmlSAX2InitHtmlDefaultSAXHandler</dt><dd><a href="html/libxml-SAX.html#inithtmlDefaultSAXHandler">inithtmlDefaultSAXHandler</a><br />
+</dd><dt>xmlSAX2InternalSubset</dt><dd><a href="html/libxml-SAX.html#internalSubset">internalSubset</a><br />
+</dd><dt>xmlSAX2IsStandalone</dt><dd><a href="html/libxml-SAX.html#isStandalone">isStandalone</a><br />
+</dd><dt>xmlSAX2NotationDecl</dt><dd><a href="html/libxml-SAX.html#notationDecl">notationDecl</a><br />
+</dd><dt>xmlSAX2ProcessingInstruction</dt><dd><a href="html/libxml-SAX.html#processingInstruction">processingInstruction</a><br />
+</dd><dt>xmlSAX2Reference</dt><dd><a href="html/libxml-SAX.html#reference">reference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Reference">xmlSAX2Reference</a><br />
+</dd><dt>xmlSAX2ResolveEntity</dt><dd><a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+</dd><dt>xmlSAX2StartDocument</dt><dd><a href="html/libxml-SAX.html#startDocument">startDocument</a><br />
+</dd><dt>xmlSAX2StartElement</dt><dd><a href="html/libxml-SAX.html#startElement">startElement</a><br />
+</dd><dt>xmlSAX2UnparsedEntityDecl</dt><dd><a href="html/libxml-SAX.html#unparsedEntityDecl">unparsedEntityDecl</a><br />
+</dd><dt>xmlSAXVersion</dt><dd><a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+</dd><dt>xmlSaveOptions</dt><dd><a href="html/libxml-xmlsave.html#xmlSaveToBuffer">xmlSaveToBuffer</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</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 />
+</dd><dt>xmlSnprintfElementContent</dt><dd><a href="html/libxml-valid.html#xmlSprintfElementContent">xmlSprintfElementContent</a><br />
+</dd><dt>xmlStrEqual</dt><dd><a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+</dd><dt>xmlStrdup</dt><dd><a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+</dd><dt>xmlStringDecodeEntities</dt><dd><a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+</dd><dt>xmlStringGetNodeList</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>xmlStrncat</dt><dd><a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+</dd><dt>xmlStrncmp</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Charcmp">xmlUTF8Charcmp</a><br />
+</dd><dt>xmlTextReader</dt><dd><a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
+<a href="html/libxml-xmlreader.html#xmlNewTextReaderFilename">xmlNewTextReaderFilename</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
+</dd><dt>xmlTextReaderCurrentDoc</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+</dd><dt>xmlTextReaderLocatorPtr</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderLocatorBaseURI">xmlTextReaderLocatorBaseURI</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorLineNumber">xmlTextReaderLocatorLineNumber</a><br />
+</dd><dt>xmlTextReaderRead</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+</dd><dt>xmlTextWriterStartDTDEntity</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+</dd><dt>xmlTextWriterWriteDTD</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDocType">xmlTextWriterWriteDocType</a><br />
+</dd><dt>xmlTextWriterWritePI</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteProcessingInstruction">xmlTextWriterWriteProcessingInstruction</a><br />
+</dd><dt>xmlURI</dt><dd><a href="html/libxml-uri.html#xmlCreateURI">xmlCreateURI</a><br />
+<a href="html/libxml-uri.html#xmlFreeURI">xmlFreeURI</a><br />
+<a href="html/libxml-uri.html#xmlPrintURI">xmlPrintURI</a><br />
+<a href="html/libxml-uri.html#xmlSaveUri">xmlSaveUri</a><br />
+</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 />
+</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 />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+</dd><dt>xmlValidGetValidElements</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>xmlValidateAttributeDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>xmlValidateAttributeValue</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>xmlValidateOneAttribute</dt><dd><a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
+</dd><dt>xmlWriter</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_WRITER_ENABLED">LIBXML_WRITER_ENABLED</a><br />
+</dd><dt>xmlXPathCheckError</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathPopBoolean">xmlXPathPopBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopExternal">xmlXPathPopExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNumber">xmlXPathPopNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopString">xmlXPathPopString</a><br />
+</dd><dt>xmlXPathCompExprPtr</dt><dd><a href="html/libxml-xpath.html#xmlXPathCompile">xmlXPathCompile</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCtxtCompile">xmlXPathCtxtCompile</a><br />
+</dd><dt>xmlXPathContext</dt><dd><a href="html/libxml-xpath.html#xmlXPathFreeContext">xmlXPathFreeContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+</dd><dt>xmlXPathError</dt><dd><a href="">err</a><br />
+</dd><dt>xmlXPathEvalPredicate</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+</dd><dt>xmlXPathFreeObject</dt><dd><a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+</dd><dt>xmlXPathFunction</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a><br />
+</dd><dt>xmlXPathNodeTrailingSorted</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+</dd><dt>xmlXPathObjectPtr</dt><dd><a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeObject">xmlXPathFreeObject</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewBoolean">xmlXPathNewBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewCString">xmlXPathNewCString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewFloat">xmlXPathNewFloat</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewString">xmlXPathNewString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetCreate">xmlXPtrLocationSetCreate</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodeSet">xmlXPtrNewLocationSetNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodes">xmlXPtrNewRangeNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrWrapLocationSet">xmlXPtrWrapLocationSet</a><br />
+</dd><dt>xmlXPathParserContext</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathFreeParserContext">xmlXPathFreeParserContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
+</dd><dt>xmlXPathTrailingSorted</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+</dd><dt>xmlns</dt><dd><a href="html/libxml-parserInternals.html#xmlNamespaceParseNSDef">xmlNamespaceParseNSDef</a><br />
+</dd><dt>xmlns:???</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+</dd><dt>xmltextReader</dt><dd><a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForMemory">xmlReaderForMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderWalker">xmlReaderWalker</a><br />
+</dd><dt>xpath</dt><dd><a href="html/libxml-debugXML.html#xmlShellPrintXPathError">xmlShellPrintXPathError</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathResult">xmlShellPrintXPathResult</a><br />
+</dd><dt>xpointer</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_PARSE_XPOINTER">XINCLUDE_PARSE_XPOINTER</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk26.html b/doc/APIchunk26.html
new file mode 100644
index 0000000..6c22f43
--- /dev/null
+++ b/doc/APIchunk26.html
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index y-z for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index y-z for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter y:</h2><dl><dt>year</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</dd><dt>yes</dt><dd><a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-tree.html#xmlNodeIsText">xmlNodeIsText</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<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-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+</dd><dt>you</dt><dd><a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+</dd></dl><h2>Letter z:</h2><dl><dt>zero</dt><dd><a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseChunk">docbParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseChunk">htmlParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadDoc">htmlReadDoc</a><br />
+<a href="html/libxml-tree.html#xmlBufferCCat">xmlBufferCCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferCat">xmlBufferCat</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<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-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
+<a href="html/libxml-parser.html#xmlReadDoc">xmlReadDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>zero-based</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNo">xmlTextReaderMoveToAttributeNo</a><br />
+</dd><dt>zeros</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>zlib</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk3.html b/doc/APIchunk3.html
new file mode 100644
index 0000000..90610c8
--- /dev/null
+++ b/doc/APIchunk3.html
@@ -0,0 +1,343 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index F-I for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index F-I for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter F:</h2><dl><dt>FALSE</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDEntity">xmlTextWriterWriteDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDInternalEntity">xmlTextWriterWriteDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a><br />
+</dd><dt>FFFE</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+</dd><dt>FFFF</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+</dd><dt>FIXED</dt><dd><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-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>Facet</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeFacet">xmlSchemaFreeFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewFacet">xmlSchemaNewFacet</a><br />
+</dd><dt>False</dt><dd><a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+</dd><dt>Fetch</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+</dd><dt>File</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+</dd><dt>Fills</dt><dd><a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+</dd><dt>Find</dt><dd><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 />
+<a href="html/libxml-hash.html#xmlHashQLookup">xmlHashQLookup</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup2">xmlHashQLookup2</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup3">xmlHashQLookup3</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<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>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 />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+</dd><dt>Float</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+</dd><dt>Flush</dt><dd><a href="html/libxml-xmlsave.html#xmlSaveFlush">xmlSaveFlush</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterFlush">xmlTextWriterFlush</a><br />
+</dd><dt>For</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetLastError">xmlResetLastError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>Form</dt><dd><a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+</dd><dt>Formating</dt><dd><a href="html/libxml-HTMLtree.html#htmlDocContentDumpOutput">htmlDocContentDumpOutput</a><br />
+</dd><dt>Formats</dt><dd><a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPatherror">xmlXPatherror</a><br />
+</dd><dt>Formed</dt><dd><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 />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>Fragment</dt><dd><a href="html/libxml-tree.html#xmlNewDocFragment">xmlNewDocFragment</a><br />
+</dd><dt>Frameset</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>Frees</dt><dd><a href="html/libxml-tree.html#xmlBufferFree">xmlBufferFree</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a><br />
+</dd><dt>Front-end</dt><dd><a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+</dd><dt>Function</dt><dd><a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
+<a href="html/libxml-tree.html#xmlBufferLength">xmlBufferLength</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a><br />
+</dd></dl><h2>Letter G:</h2><dl><dt>GCC</dt><dd><a href="html/libxml-xmlversion.html#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a><br />
+</dd><dt>GEDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+</dd><dt>GET</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPOpen">xmlNanoHTTPOpen</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPOpenRedir">xmlNanoHTTPOpenRedir</a><br />
+</dd><dt>GeneralPunctuation</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGeneralPunctuation">xmlUCSIsGeneralPunctuation</a><br />
+</dd><dt>Generic</dt><dd><a href="html/libxml-encoding.html#xmlCharEncCloseFunc">xmlCharEncCloseFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>GeometricShapes</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGeometricShapes">xmlUCSIsGeometricShapes</a><br />
+</dd><dt>Georgian</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGeorgian">xmlUCSIsGeorgian</a><br />
+</dd><dt>Get</dt><dd><a href="html/libxml-SAX.html#getEntity">getEntity</a><br />
+<a href="html/libxml-parser.html#getEntitySAXFunc">getEntitySAXFunc</a><br />
+<a href="html/libxml-SAX.html#getNamespace">getNamespace</a><br />
+<a href="html/libxml-SAX.html#getParameterEntity">getParameterEntity</a><br />
+<a href="html/libxml-parser.html#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a><br />
+<a href="html/libxml-xlink.html#xlinkGetDefaultDetect">xlinkGetDefaultDetect</a><br />
+<a href="html/libxml-xlink.html#xlinkGetDefaultHandler">xlinkGetDefaultHandler</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtGetLastError">xmlCtxtGetLastError</a><br />
+<a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-parser.html#xmlGetExternalEntityLoader">xmlGetExternalEntityLoader</a><br />
+<a href="html/libxml-tree.html#xmlGetIntSubset">xmlGetIntSubset</a><br />
+<a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+<a href="html/libxml-list.html#xmlListEnd">xmlListEnd</a><br />
+<a href="html/libxml-list.html#xmlListFront">xmlListFront</a><br />
+<a href="html/libxml-list.html#xmlListSize">xmlListSize</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetEntity">xmlSAX2GetEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetParameterEntity">xmlSAX2GetParameterEntity</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetContextNode">xmlXPathGetContextNode</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetDocument">xmlXPathGetDocument</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetError">xmlXPathGetError</a><br />
+</dd><dt>Gets</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderReadState">xmlTextReaderReadState</a><br />
+</dd><dt>Global</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+</dd><dt>Gothic</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGothic">xmlUCSIsGothic</a><br />
+</dd><dt>Greek</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGreek">xmlUCSIsGreek</a><br />
+</dd><dt>GreekExtended</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGreekExtended">xmlUCSIsGreekExtended</a><br />
+</dd><dt>GreekandCoptic</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGreekandCoptic">xmlUCSIsGreekandCoptic</a><br />
+</dd><dt>Group</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</dd><dt>Grow</dt><dd><a href="html/libxml-tree.html#xmlBufferGrow">xmlBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+</dd><dt>Guess</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+</dd><dt>Gujarati</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGujarati">xmlUCSIsGujarati</a><br />
+</dd><dt>Gurmukhi</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGurmukhi">xmlUCSIsGurmukhi</a><br />
+</dd></dl><h2>Letter H:</h2><dl><dt>HTML_DEPRECATED</dt><dd><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a><br />
+</dd><dt>HTML_INVALID</dt><dd><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a><br />
+</dd><dt>HTML_NA</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>HTML_REQUIRED</dt><dd><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+</dd><dt>HTML_VALID</dt><dd><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a><br />
+</dd><dt>Hacking</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+</dd><dt>HalfwidthandFullwidthForms</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsHalfwidthandFullwidthForms">xmlUCSIsHalfwidthandFullwidthForms</a><br />
+</dd><dt>Handle</dt><dd><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlErrMemory">xmlErrMemory</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathErr">xmlXPathErr</a><br />
+</dd><dt>Handling</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>HangulCompatibilityJamo</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsHangulCompatibilityJamo">xmlUCSIsHangulCompatibilityJamo</a><br />
+</dd><dt>HangulJamo</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsHangulJamo">xmlUCSIsHangulJamo</a><br />
+</dd><dt>HangulSyllables</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsHangulSyllables">xmlUCSIsHangulSyllables</a><br />
+</dd><dt>Hanunoo</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsHanunoo">xmlUCSIsHanunoo</a><br />
+</dd><dt>Has</dt><dd><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+</dd><dt>Hash</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+</dd><dt>Hebrew</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsHebrew">xmlUCSIsHebrew</a><br />
+</dd><dt>Hence</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+</dd><dt>HighPrivateUseSurrogates</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsHighPrivateUseSurrogates">xmlUCSIsHighPrivateUseSurrogates</a><br />
+</dd><dt>HighSurrogates</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsHighSurrogates">xmlUCSIsHighSurrogates</a><br />
+</dd><dt>Hiragana</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsHiragana">xmlUCSIsHiragana</a><br />
+</dd><dt>How</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+</dd><dt>However</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 />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+</dd></dl><h2>Letter I:</h2><dl><dt>I18N</dt><dd><a href="html/libxml-xmlIO.html#_xmlOutputBuffer">_xmlOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+</dd><dt>IDREF</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</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 />
+</dd><dt>IDREFS</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
+</dd><dt>IDREFs</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+</dd><dt>IDs</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+</dd><dt>IEEE</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>IMPLIED</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>IPAExtensions</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsIPAExtensions">xmlUCSIsIPAExtensions</a><br />
+</dd><dt>ISO</dt><dd><a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
+<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
+</dd><dt>ISO-8859-</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_ISO8859X_ENABLED">LIBXML_ISO8859X_ENABLED</a><br />
+</dd><dt>ISO-Latin</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+</dd><dt>ISO639Code</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>ISOLatin</dt><dd><a href="html/libxml-xmlIO.html#_xmlOutputBuffer">_xmlOutputBuffer</a><br />
+</dd><dt>IS_BLANK</dt><dd><a href="html/libxml-parserInternals.html#IS_BLANK_CH">IS_BLANK_CH</a><br />
+</dd><dt>IS_CHAR</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR_CH">IS_CHAR_CH</a><br />
+</dd><dt>IS_DIGIT</dt><dd><a href="html/libxml-parserInternals.html#IS_DIGIT_CH">IS_DIGIT_CH</a><br />
+</dd><dt>IS_EXTENDER</dt><dd><a href="html/libxml-parserInternals.html#IS_EXTENDER_CH">IS_EXTENDER_CH</a><br />
+</dd><dt>IS_LETTER</dt><dd><a href="html/libxml-parserInternals.html#IS_LETTER_CH">IS_LETTER_CH</a><br />
+</dd><dt>IS_PUBIDCHAR</dt><dd><a href="html/libxml-parserInternals.html#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a><br />
+</dd><dt>IanaCode</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>Identifier</dt><dd><a href="html/libxml-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolve">xmlCatalogResolve</a><br />
+</dd><dt>Identifiers</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+</dd><dt>Ideographic</dt><dd><a href="html/libxml-parserInternals.html#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</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>IdeographicDescriptionCharacters</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsIdeographicDescriptionCharacters">xmlUCSIsIdeographicDescriptionCharacters</a><br />
+</dd><dt>Ignore</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_LAX">XML_SCHEMAS_ANYATTR_LAX</a><br />
+</dd><dt>Ignored</dt><dd><a href="html/libxml-parserInternals.html#xmlCopyChar">xmlCopyChar</a><br />
+</dd><dt>Implements</dt><dd><a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<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#xmlShellDir">xmlShellDir</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+<a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</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#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>Increment</dt><dd><a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</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 />
+</dd><dt>Initialization</dt><dd><a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
+</dd><dt>Initialize</dt><dd><a href="html/libxml-SAX2.html#docbDefaultSAXHandlerInit">docbDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-SAX2.html#htmlDefaultSAXHandlerInit">htmlDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-SAX.html#initdocbDefaultSAXHandler">initdocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#inithtmlDefaultSAXHandler">inithtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlDefaultSAXHandlerInit">xmlDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-xmlmemory.html#xmlInitMemory">xmlInitMemory</a><br />
+<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
+<a href="html/libxml-parser.html#xmlInitParserCtxt">xmlInitParserCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDocbDefaultSAXHandler">xmlSAX2InitDocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitHtmlDefaultSAXHandler">xmlSAX2InitHtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXVersion">xmlSAXVersion</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaInitTypes">xmlSchemaInitTypes</a><br />
+<a href="html/libxml-xpath.html#xmlXPathInit">xmlXPathInit</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoot">xmlXPathRoot</a><br />
+</dd><dt>Initially</dt><dd><a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+</dd><dt>Initiate</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+</dd><dt>Input</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+</dd><dt>Insert</dt><dd><a href="html/libxml-list.html#xmlListAppend">xmlListAppend</a><br />
+<a href="html/libxml-list.html#xmlListInsert">xmlListInsert</a><br />
+<a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
+</dd><dt>Instruction</dt><dd><a href="html/libxml-parserInternals.html#xmlParsePI">xmlParsePI</a><br />
+</dd><dt>Instuction</dt><dd><a href="html/libxml-catalog.html#XML_CATALOG_PI">XML_CATALOG_PI</a><br />
+</dd><dt>Intended</dt><dd><a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+</dd><dt>Internal</dt><dd><a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk4.html b/doc/APIchunk4.html
new file mode 100644
index 0000000..eded8bb
--- /dev/null
+++ b/doc/APIchunk4.html
@@ -0,0 +1,330 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index J-N for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index J-N for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter J:</h2><dl><dt>Jan</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>Java</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</dd></dl><h2>Letter K:</h2><dl><dt>Kanbun</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsKanbun">xmlUCSIsKanbun</a><br />
+</dd><dt>KangxiRadicals</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsKangxiRadicals">xmlUCSIsKangxiRadicals</a><br />
+</dd><dt>Kannada</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsKannada">xmlUCSIsKannada</a><br />
+</dd><dt>Katakana</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsKatakana">xmlUCSIsKatakana</a><br />
+</dd><dt>KatakanaPhoneticExtensions</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsKatakanaPhoneticExtensions">xmlUCSIsKatakanaPhoneticExtensions</a><br />
+</dd><dt>Khmer</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsKhmer">xmlUCSIsKhmer</a><br />
+</dd><dt>KhmerSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsKhmerSymbols">xmlUCSIsKhmerSymbols</a><br />
+</dd></dl><h2>Letter L:</h2><dl><dt>Langcode</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>LanguageID</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>Lao</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLao">xmlUCSIsLao</a><br />
+</dd><dt>Last</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+</dd><dt>Latin</dt><dd><a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
+<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
+</dd><dt>Latin-1Supplement</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLatin1Supplement">xmlUCSIsLatin1Supplement</a><br />
+</dd><dt>LatinExtended-A</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLatinExtendedA">xmlUCSIsLatinExtendedA</a><br />
+</dd><dt>LatinExtended-B</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLatinExtendedB">xmlUCSIsLatinExtendedB</a><br />
+</dd><dt>LatinExtendedAdditional</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLatinExtendedAdditional">xmlUCSIsLatinExtendedAdditional</a><br />
+</dd><dt>Legal</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+</dd><dt>Length</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+</dd><dt>Letter</dt><dd><a href="html/libxml-parserInternals.html#IS_LETTER">IS_LETTER</a><br />
+<a href="html/libxml-parserInternals.html#xmlIsLetter">xmlIsLetter</a><br />
+<a href="html/libxml-parserInternals.html#xmlNamespaceParseNCName">xmlNamespaceParseNCName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseName">xmlXPathParseName</a><br />
+</dd><dt>LetterlikeSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLetterlikeSymbols">xmlUCSIsLetterlikeSymbols</a><br />
+</dd><dt>Like</dt><dd><a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>Limbu</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLimbu">xmlUCSIsLimbu</a><br />
+</dd><dt>LinearBIdeograms</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLinearBIdeograms">xmlUCSIsLinearBIdeograms</a><br />
+</dd><dt>LinearBSyllabary</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLinearBSyllabary">xmlUCSIsLinearBSyllabary</a><br />
+</dd><dt>List</dt><dd><a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>Literal</dt><dd><a href="html/libxml-parserInternals.html#xmlParseSystemLiteral">xmlParseSystemLiteral</a><br />
+</dd><dt>Load</dt><dd><a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-parser.html#xmlParseDTD">xmlParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDTD">xmlSAXParseDTD</a><br />
+</dd><dt>Local</dt><dd><a href="html/libxml-xmlIO.html#_xmlOutputBuffer">_xmlOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+</dd><dt>LocalPart</dt><dd><a href="html/libxml-parserInternals.html#xmlNamespaceParseQName">xmlNamespaceParseQName</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+</dd><dt>Location</dt><dd><a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+</dd><dt>LocationSet</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodeSet">xmlXPtrNewLocationSetNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrWrapLocationSet">xmlXPtrWrapLocationSet</a><br />
+</dd><dt>Locator</dt><dd><a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+</dd><dt>Lookup</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-HTMLparser.html#htmlTagLookup">htmlTagLookup</a><br />
+<a href="html/libxml-encoding.html#xmlGetEncodingAlias">xmlGetEncodingAlias</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+</dd><dt>Loose</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>LowSurrogates</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsLowSurrogates">xmlUCSIsLowSurrogates</a><br />
+</dd></dl><h2>Letter M:</h2><dl><dt>META</dt><dd><a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+</dd><dt>MODIFIER</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>MULT</dt><dd><a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+</dd><dt>MUST</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>Makes</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataSetFinalState">xmlAutomataSetFinalState</a><br />
+</dd><dt>Malayalam</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMalayalam">xmlUCSIsMalayalam</a><br />
+</dd><dt>Maps</dt><dd><a href="html/libxml-tree.html#xmlChildrenNode">xmlChildrenNode</a><br />
+<a href="html/libxml-tree.html#xmlRootNode">xmlRootNode</a><br />
+</dd><dt>Markup</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>Match</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+</dd><dt>MathematicalAlphanumericSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMathematicalAlphanumericSymbols">xmlUCSIsMathematicalAlphanumericSymbols</a><br />
+</dd><dt>MathematicalOperators</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMathematicalOperators">xmlUCSIsMathematicalOperators</a><br />
+</dd><dt>Max</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+</dd><dt>May</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>Memory</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+</dd><dt>Merge</dt><dd><a href="html/libxml-tree.html#xmlTextMerge">xmlTextMerge</a><br />
+</dd><dt>Merges</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+</dd><dt>Meta</dt><dd><a href="html/libxml-HTMLtree.html#htmlGetMetaEncoding">htmlGetMetaEncoding</a><br />
+<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>Misc</dt><dd><a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMisc">xmlParseMisc</a><br />
+</dd><dt>MiscellaneousMathematicalSymbols-A</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousMathematicalSymbolsA">xmlUCSIsMiscellaneousMathematicalSymbolsA</a><br />
+</dd><dt>MiscellaneousMathematicalSymbols-B</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousMathematicalSymbolsB">xmlUCSIsMiscellaneousMathematicalSymbolsB</a><br />
+</dd><dt>MiscellaneousSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousSymbols">xmlUCSIsMiscellaneousSymbols</a><br />
+</dd><dt>MiscellaneousSymbolsandArrows</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousSymbolsandArrows">xmlUCSIsMiscellaneousSymbolsandArrows</a><br />
+</dd><dt>MiscellaneousTechnical</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousTechnical">xmlUCSIsMiscellaneousTechnical</a><br />
+</dd><dt>Mixed</dt><dd><a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</dd><dt>Mongolian</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMongolian">xmlUCSIsMongolian</a><br />
+</dd><dt>More</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>Move</dt><dd><a href="html/libxml-list.html#xmlListCopy">xmlListCopy</a><br />
+</dd><dt>Moves</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttribute">xmlTextReaderMoveToAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNo">xmlTextReaderMoveToAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNs">xmlTextReaderMoveToAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToElement">xmlTextReaderMoveToElement</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToFirstAttribute">xmlTextReaderMoveToFirstAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToNextAttribute">xmlTextReaderMoveToNextAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+</dd><dt>MusicalSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMusicalSymbols">xmlUCSIsMusicalSymbols</a><br />
+</dd><dt>Myanmar</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMyanmar">xmlUCSIsMyanmar</a><br />
+</dd></dl><h2>Letter N:</h2><dl><dt>NAME</dt><dd><a href="html/libxml-parser.html#xmlParseDTD">xmlParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDTD">xmlSAXParseDTD</a><br />
+</dd><dt>NCName</dt><dd><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 />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+</dd><dt>NCNameChar</dt><dd><a href="html/libxml-parserInternals.html#xmlNamespaceParseNCName">xmlNamespaceParseNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+</dd><dt>NDATA</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+</dd><dt>NDataDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+</dd><dt>NDataDecl?</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+</dd><dt>NMTOKEN</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+</dd><dt>NMTOKENS</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+</dd><dt>NMToken</dt><dd><a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+</dd><dt>NOTATION</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>NOTE</dt><dd><a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+<a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+</dd><dt>NOTE:</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-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 />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+</dd><dt>NRK</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>NSDef</dt><dd><a href="html/libxml-parserInternals.html#xmlNamespaceParseNSDef">xmlNamespaceParseNSDef</a><br />
+</dd><dt>NaN</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>NameChar</dt><dd><a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNmtoken">xmlParseNmtoken</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseName">xmlXPathParseName</a><br />
+</dd><dt>Names</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNamesValue">xmlValidateNamesValue</a><br />
+</dd><dt>Namespace</dt><dd><a href="html/libxml-tree.html#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a><br />
+<a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+</dd><dt>Nanespace</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>Needed</dt><dd><a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>Nesting</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>New</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>Nmtoken</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNmtoken">xmlParseNmtoken</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokenValue">xmlValidateNmtokenValue</a><br />
+</dd><dt>Nmtokens</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNmtoken">xmlParseNmtoken</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokensValue">xmlValidateNmtokensValue</a><br />
+</dd><dt>Node</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-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+</dd><dt>NodeList</dt><dd><a href="html/libxml-xpath.html#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+</dd><dt>NodePtr</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+</dd><dt>NodeSet</dt><dd><a href="html/libxml-xpath.html#xmlXPathFreeNodeSet">xmlXPathFreeNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a><br />
+</dd><dt>NodeSetList</dt><dd><a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+</dd><dt>NodeType</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIsNodeType">xmlXPathIsNodeType</a><br />
+</dd><dt>Nodeset</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
+</dd><dt>Non-static</dt><dd><a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+</dd><dt>Normalization</dt><dd><a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+</dd><dt>Normalization:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>NotaNumber</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>Notation</dt><dd><a href="html/libxml-tree.html#_xmlNotation">_xmlNotation</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationUse">xmlValidateNotationUse</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+</dd><dt>NotationDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+</dd><dt>NotationType</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+</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-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+</dd><dt>Note:</dt><dd><a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-entities.html#xmlGetDtdEntity">xmlGetDtdEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+</dd><dt>Number</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>NumberForms</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsNumberForms">xmlUCSIsNumberForms</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk5.html b/doc/APIchunk5.html
new file mode 100644
index 0000000..cc40b20
--- /dev/null
+++ b/doc/APIchunk5.html
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index O-Q for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index O-Q for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter O:</h2><dl><dt>OBSOLETE:</dt><dd><a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+</dd><dt>ONCE</dt><dd><a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+</dd><dt>OPT</dt><dd><a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+</dd><dt>OUT</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPMethod">xmlNanoHTTPMethod</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPMethodRedir">xmlNanoHTTPMethodRedir</a><br />
+</dd><dt>OUT:</dt><dd><a href="html/libxml-HTMLtree.html#htmlDocDumpMemory">htmlDocDumpMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+</dd><dt>Obtain</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderLocatorBaseURI">xmlTextReaderLocatorBaseURI</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorLineNumber">xmlTextReaderLocatorLineNumber</a><br />
+</dd><dt>Ogham</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsOgham">xmlUCSIsOgham</a><br />
+</dd><dt>OldItalic</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsOldItalic">xmlUCSIsOldItalic</a><br />
+</dd><dt>One</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+</dd><dt>Open</dt><dd><a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+</dd><dt>OpticalCharacterRecognition</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsOpticalCharacterRecognition">xmlUCSIsOpticalCharacterRecognition</a><br />
+</dd><dt>Optional</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>Oriya</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsOriya">xmlUCSIsOriya</a><br />
+</dd><dt>Osmanya</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsOsmanya">xmlUCSIsOsmanya</a><br />
+</dd><dt>Output</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a><br />
+<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+</dd><dt>Override</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+</dd></dl><h2>Letter P:</h2><dl><dt>P32</dt><dd><a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+</dd><dt>PCDATA</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</dd><dt>PEDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+</dd><dt>PEDef</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+</dd><dt>PEReference</dt><dd><a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</dd><dt>PEs</dt><dd><a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>PITarget</dt><dd><a href="html/libxml-parserInternals.html#xmlParsePI">xmlParsePI</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePITarget">xmlParsePITarget</a><br />
+</dd><dt>PIs</dt><dd><a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+</dd><dt>PLUS</dt><dd><a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+</dd><dt>POST</dt><dd><a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+</dd><dt>PSVI</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+</dd><dt>PUBLIC</dt><dd><a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlCreateIntSubset">xmlCreateIntSubset</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+</dd><dt>PUT</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+</dd><dt>Parameter</dt><dd><a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>Parameter-entity</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>Parse</dt><dd><a href="html/libxml-DOCBparser.html#docbParseChunk">docbParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseChunk">htmlParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseContent">xmlParseContent</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</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#xmlParseURIReference">xmlParseURIReference</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvalExpr">xmlXPathEvalExpr</a><br />
+</dd><dt>Parsed</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+</dd><dt>Parses</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+</dd><dt>Parsing</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathErr">xmlXPathErr</a><br />
+</dd><dt>Part</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+</dd><dt>Path</dt><dd><a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+</dd><dt>People</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+</dd><dt>PhoneticExtensions</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsPhoneticExtensions">xmlUCSIsPhoneticExtensions</a><br />
+</dd><dt>Please</dt><dd><a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+</dd><dt>Pointer</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</dd><dt>Points</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
+</dd><dt>Pop</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGValidatePopElement">xmlRelaxNGValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePopElement">xmlValidatePopElement</a><br />
+</dd><dt>Pops</dt><dd><a href="html/libxml-parserInternals.html#inputPop">inputPop</a><br />
+<a href="html/libxml-parserInternals.html#namePop">namePop</a><br />
+<a href="html/libxml-parserInternals.html#nodePop">nodePop</a><br />
+<a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopBoolean">xmlXPathPopBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopExternal">xmlXPathPopExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNumber">xmlXPathPopNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopString">xmlXPathPopString</a><br />
+</dd><dt>Position</dt><dd><a href="html/libxml-parser.html#_xmlParserNodeInfo">_xmlParserNodeInfo</a><br />
+</dd><dt>Possibility</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+</dd><dt>Precompiled</dt><dd><a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+</dd><dt>Predicate</dt><dd><a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+</dd><dt>PredicateExpr</dt><dd><a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+</dd><dt>Prefix</dt><dd><a href="html/libxml-parserInternals.html#xmlNamespaceParseQName">xmlNamespaceParseQName</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderName">xmlTextReaderName</a><br />
+</dd><dt>PrefixDef</dt><dd><a href="html/libxml-parserInternals.html#xmlNamespaceParseNSDef">xmlNamespaceParseNSDef</a><br />
+</dd><dt>Print</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegexpPrint">xmlRegexpPrint</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintNode">xmlShellPrintNode</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathError">xmlShellPrintXPathError</a><br />
+</dd><dt>Prints</dt><dd><a href="html/libxml-uri.html#xmlPrintURI">xmlPrintURI</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathResult">xmlShellPrintXPathResult</a><br />
+</dd><dt>PrivateUse</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsPrivateUse">xmlUCSIsPrivateUse</a><br />
+</dd><dt>PrivateUseArea</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsPrivateUseArea">xmlUCSIsPrivateUseArea</a><br />
+</dd><dt>Processing</dt><dd><a href="html/libxml-catalog.html#XML_CATALOG_PI">XML_CATALOG_PI</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePI">xmlParsePI</a><br />
+</dd><dt>Productions</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+</dd><dt>Proper</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>Prototype</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+</dd><dt>Provide</dt><dd><a href="html/libxml-SAX.html#getColumnNumber">getColumnNumber</a><br />
+<a href="html/libxml-SAX.html#getLineNumber">getLineNumber</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetColumnNumber">xmlSAX2GetColumnNumber</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetLineNumber">xmlSAX2GetLineNumber</a><br />
+</dd><dt>Provides</dt><dd><a href="html/libxml-SAX.html#getPublicId">getPublicId</a><br />
+<a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemUsed">xmlMemUsed</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPEncoding">xmlNanoHTTPEncoding</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPMimeType">xmlNanoHTTPMimeType</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRedir">xmlNanoHTTPRedir</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetPublicId">xmlSAX2GetPublicId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderAttributeCount">xmlTextReaderAttributeCount</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttribute">xmlTextReaderGetAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNs">xmlTextReaderGetAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderValue">xmlTextReaderValue</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>Proxy</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</dd><dt>Proxy-Authenticate</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
+</dd><dt>PubidChar</dt><dd><a href="html/libxml-parserInternals.html#IS_PUBIDCHAR">IS_PUBIDCHAR</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePubidLiteral">xmlParsePubidLiteral</a><br />
+</dd><dt>PubidLiteral</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePubidLiteral">xmlParsePubidLiteral</a><br />
+</dd><dt>Public</dt><dd><a href="html/libxml-tree.html#_xmlNotation">_xmlNotation</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#xmlParseExternalID">xmlParseExternalID</a><br />
+</dd><dt>PublicID</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+</dd><dt>Push</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+</dd><dt>Pushes</dt><dd><a href="html/libxml-parserInternals.html#inputPush">inputPush</a><br />
+<a href="html/libxml-parserInternals.html#namePush">namePush</a><br />
+<a href="html/libxml-parserInternals.html#nodePush">nodePush</a><br />
+<a href="html/libxml-xpathInternals.html#valuePush">valuePush</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnBoolean">xmlXPathReturnBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnEmptyNodeSet">xmlXPathReturnEmptyNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnEmptyString">xmlXPathReturnEmptyString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnExternal">xmlXPathReturnExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnFalse">xmlXPathReturnFalse</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnNodeSet">xmlXPathReturnNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnNumber">xmlXPathReturnNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnString">xmlXPathReturnString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnTrue">xmlXPathReturnTrue</a><br />
+</dd></dl><h2>Letter Q:</h2><dl><dt>QName</dt><dd><a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup">xmlHashQLookup</a><br />
+<a href="html/libxml-parserInternals.html#xmlNamespaceParseQName">xmlNamespaceParseQName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEndTag">xmlParseEndTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+</dd><dt>QNames</dt><dd><a href="html/libxml-hash.html#xmlHashQLookup2">xmlHashQLookup2</a><br />
+</dd><dt>QUIT</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPQuit">xmlNanoFTPQuit</a><br />
+</dd><dt>Qualified</dt><dd><a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+</dd><dt>Query</dt><dd><a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
+<a href="html/libxml-hash.html#xmlHashSize">xmlHashSize</a><br />
+</dd><dt>Question:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk6.html b/doc/APIchunk6.html
new file mode 100644
index 0000000..ad2ce0c
--- /dev/null
+++ b/doc/APIchunk6.html
@@ -0,0 +1,482 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index R-S for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index R-S for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter R:</h2><dl><dt>REC</dt><dd><a href="html/libxml-parserInternals.html#IS_BASECHAR">IS_BASECHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_COMBINING">IS_COMBINING</a><br />
+<a href="html/libxml-parserInternals.html#IS_DIGIT">IS_DIGIT</a><br />
+</dd><dt>REC-xml</dt><dd><a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+</dd><dt>REFs</dt><dd><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 />
+</dd><dt>REQUIRED</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>RFC</dt><dd><a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+</dd><dt>RFC2396</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>Raises</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSetArityError">xmlXPathSetArityError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSetError">xmlXPathSetError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSetTypeError">xmlXPathSetTypeError</a><br />
+</dd><dt>Read</dt><dd><a href="html/libxml-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
+<a href="html/libxml-parser.html#xmlGetFeature">xmlGetFeature</a><br />
+<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPRead">xmlIOFTPRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPRead">xmlIOHTTPRead</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetParserProp">xmlTextReaderGetParserProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>Reader</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+</dd><dt>Readers</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+</dd><dt>Reads</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+</dd><dt>Rec</dt><dd><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#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
+</dd><dt>Receive</dt><dd><a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+</dd><dt>Receiving</dt><dd><a href="html/libxml-parser.html#charactersSAXFunc">charactersSAXFunc</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+</dd><dt>Recurse</dt><dd><a href="html/libxml-tree.html#xmlSearchNsByHref">xmlSearchNsByHref</a><br />
+</dd><dt>Recursion</dt><dd><a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>Ref</dt><dd><a href="html/libxml-tree.html#_xmlRef">_xmlRef</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-valid.html#xmlFreeRefTable">xmlFreeRefTable</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-valid.html#xmlRemoveRef">xmlRemoveRef</a><br />
+</dd><dt>Reference</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseCharRef">htmlParseCharRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseContent">xmlParseContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</dd><dt>Reference:</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+</dd><dt>References</dt><dd><a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+</dd><dt>Refresh</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+</dd><dt>Reg</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+</dd><dt>Register</dt><dd><a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-entities.html#xmlAddDocEntity">xmlAddDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlAddDtdEntity">xmlAddDtdEntity</a><br />
+<a href="html/libxml-valid.html#xmlAddElementDecl">xmlAddElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+<a href="html/libxml-valid.html#xmlAddNotationDecl">xmlAddNotationDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-encoding.html#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterNs">xmlXPathRegisterNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariable">xmlXPathRegisterVariable</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableNS">xmlXPathRegisterVariableNS</a><br />
+</dd><dt>RegisterNodeFunc</dt><dd><a href="html/libxml-globals.html#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a><br />
+</dd><dt>Registers</dt><dd><a href="html/libxml-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
+<a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultInputCallbacks">xmlRegisterDefaultInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultOutputCallbacks">xmlRegisterDefaultOutputCallbacks</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterAllFunctions">xmlXPathRegisterAllFunctions</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncLookup">xmlXPathRegisterFuncLookup</a><br />
+</dd><dt>Relative</dt><dd><a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+</dd><dt>Relax</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathErr">xmlXPathErr</a><br />
+</dd><dt>Relax-NG</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
+<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#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 />
+<a href="html/libxml-relaxng.html#xmlRelaxNGDumpTree">xmlRelaxNGDumpTree</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFree">xmlRelaxNGFree</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePopElement">xmlRelaxNGValidatePopElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>RelaxNGs</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewValidCtxt">xmlRelaxNGNewValidCtxt</a><br />
+</dd><dt>Remove</dt><dd><a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
+<a href="html/libxml-list.html#xmlListClear">xmlListClear</a><br />
+<a href="html/libxml-list.html#xmlListRemoveAll">xmlListRemoveAll</a><br />
+<a href="html/libxml-list.html#xmlListRemoveFirst">xmlListRemoveFirst</a><br />
+<a href="html/libxml-list.html#xmlListRemoveLast">xmlListRemoveLast</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-valid.html#xmlRemoveID">xmlRemoveID</a><br />
+<a href="html/libxml-valid.html#xmlRemoveRef">xmlRemoveRef</a><br />
+<a href="html/libxml-tree.html#xmlUnsetNsProp">xmlUnsetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlUnsetProp">xmlUnsetProp</a><br />
+</dd><dt>Removes</dt><dd><a href="html/libxml-list.html#xmlListPopBack">xmlListPopBack</a><br />
+<a href="html/libxml-list.html#xmlListPopFront">xmlListPopFront</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+</dd><dt>Replace</dt><dd><a href="html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContentLen">xmlNodeSetContentLen</a><br />
+</dd><dt>Required</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
+</dd><dt>Reset</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReset">htmlCtxtReset</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReset">xmlCtxtReset</a><br />
+<a href="html/libxml-parser.html#xmlCtxtResetPush">xmlCtxtResetPush</a><br />
+</dd><dt>Resize</dt><dd><a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
+</dd><dt>Resolves</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+</dd><dt>Resolving</dt><dd><a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+</dd><dt>Retrieve</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetErrorHandler">xmlTextReaderGetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</a><br />
+</dd><dt>Return</dt><dd><a href="html/libxml-xpathInternals.html#CHECK_TYPE0">CHECK_TYPE0</a><br />
+</dd><dt>Returns</dt><dd><a href="html/libxml-HTMLparser.html#htmlDefaultSubelement">htmlDefaultSubelement</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementAllowedHereDesc">htmlElementAllowedHereDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlRequiredAttrs">htmlRequiredAttrs</a><br />
+<a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetDtdEntity">xmlGetDtdEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetDocument">xmlXPathGetDocument</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetError">xmlXPathGetError</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetIsEmpty">xmlXPathNodeSetIsEmpty</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStackIsExternal">xmlXPathStackIsExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStackIsNodeSet">xmlXPathStackIsNodeSet</a><br />
+</dd><dt>Reverse</dt><dd><a href="html/libxml-list.html#xmlListReverse">xmlListReverse</a><br />
+</dd><dt>Root</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+</dd><dt>Runic</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsRunic">xmlUCSIsRunic</a><br />
+</dd></dl><h2>Letter S:</h2><dl><dt>SAX1</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_SAX1_ENABLED">LIBXML_SAX1_ENABLED</a><br />
+</dd><dt>SAX2</dt><dd><a href="html/libxml-parser.html#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a><br />
+<a href="html/libxml-parser.html#endElementNsSAX2Func">endElementNsSAX2Func</a><br />
+<a href="html/libxml-SAX.html#initdocbDefaultSAXHandler">initdocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#inithtmlDefaultSAXHandler">inithtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-SAX2.html#xmlDefaultSAXHandlerInit">xmlDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElementNs">xmlSAX2EndElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDocbDefaultSAXHandler">xmlSAX2InitDocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitHtmlDefaultSAXHandler">xmlSAX2InitHtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+</dd><dt>SAX::substituteEntities</dt><dd><a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+</dd><dt>SDDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+</dd><dt>SDDecl?</dt><dd><a href="html/libxml-parserInternals.html#xmlParseXMLDecl">xmlParseXMLDecl</a><br />
+</dd><dt>SEQ</dt><dd><a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+</dd><dt>SGML</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_DOCB_ENABLED">LIBXML_DOCB_ENABLED</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-DOCBparser.html#docbFreeParserCtxt">docbFreeParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDoc">docbParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDocument">docbParseDocument</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogConvert">xmlCatalogConvert</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogIsEmpty">xmlCatalogIsEmpty</a><br />
+<a href="html/libxml-catalog.html#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlNewCatalog">xmlNewCatalog</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+</dd><dt>SGMLSOURCE</dt><dd><a href="html/libxml-SAX.html#getPublicId">getPublicId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetPublicId">xmlSAX2GetPublicId</a><br />
+</dd><dt>SITE</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+</dd><dt>STag</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>SYSTEM</dt><dd><a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-SAX.html#externalSubset">externalSubset</a><br />
+<a href="html/libxml-parser.html#externalSubsetSAXFunc">externalSubsetSAXFunc</a><br />
+<a href="html/libxml-SAX.html#internalSubset">internalSubset</a><br />
+<a href="html/libxml-parser.html#internalSubsetSAXFunc">internalSubsetSAXFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ExternalSubset">xmlSAX2ExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InternalSubset">xmlSAX2InternalSubset</a><br />
+</dd><dt>Same</dt><dd><a href="html/libxml-parserInternals.html#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a><br />
+</dd><dt>Save</dt><dd><a href="html/libxml-xmlerror.html#xmlCopyError">xmlCopyError</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-uri.html#xmlSaveUri">xmlSaveUri</a><br />
+</dd><dt>Scan</dt><dd><a href="html/libxml-hash.html#xmlHashCopy">xmlHashCopy</a><br />
+<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+</dd><dt>Schema</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaDump">xmlSchemaDump</a><br />
+<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-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+</dd><dt>Schemas</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_SCHEMAS_ENABLED">LIBXML_SCHEMAS_ENABLED</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGCleanupTypes">xmlRelaxNGCleanupTypes</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCleanupTypes">xmlSchemaCleanupTypes</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeValue">xmlSchemaFreeValue</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaInitTypes">xmlSchemaInitTypes</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</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-xmlschemas.html#xmlSchemaNewValidCtxt">xmlSchemaNewValidCtxt</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 />
+<a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetID">xmlGetID</a><br />
+<a href="html/libxml-tree.html#xmlGetLastChild">xmlGetLastChild</a><br />
+<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
+<a href="html/libxml-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-list.html#xmlListReverseSearch">xmlListReverseSearch</a><br />
+<a href="html/libxml-list.html#xmlListSearch">xmlListSearch</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-xpathInternals.html#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNsLookup">xmlXPathNsLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookup">xmlXPathVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupNS">xmlXPathVariableLookupNS</a><br />
+</dd><dt>Searches</dt><dd><a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+</dd><dt>Second</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>Section</dt><dd><a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+</dd><dt>See</dt><dd><a href="html/libxml-list.html#xmlLinkGetData">xmlLinkGetData</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+</dd><dt>Seems</dt><dd><a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</a><br />
+</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-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 />
+</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-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>Setup</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+<a href="html/libxml-parser.html#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a><br />
+</dd><dt>Shavian</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsShavian">xmlUCSIsShavian</a><br />
+</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 />
+</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 />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+</dd><dt>Show</dt><dd><a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+</dd><dt>Signature</dt><dd><a href="html/libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+</dd><dt>Similarly</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+</dd><dt>Simply</dt><dd><a href="html/libxml-uri.html#xmlCreateURI">xmlCreateURI</a><br />
+</dd><dt>Since</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>Sinhala</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSinhala">xmlUCSIsSinhala</a><br />
+</dd><dt>Skip</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_SKIP">XML_SCHEMAS_ANYATTR_SKIP</a><br />
+<a href="html/libxml-parserInternals.html#xmlNextChar">xmlNextChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+</dd><dt>Skips</dt><dd><a href="html/libxml-parserInternals.html#MOVETO_ENDTAG">MOVETO_ENDTAG</a><br />
+<a href="html/libxml-parserInternals.html#MOVETO_STARTTAG">MOVETO_STARTTAG</a><br />
+<a href="html/libxml-parserInternals.html#SKIP_EOL">SKIP_EOL</a><br />
+</dd><dt>SmallFormVariants</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSmallFormVariants">xmlUCSIsSmallFormVariants</a><br />
+</dd><dt>Some</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>Sort</dt><dd><a href="html/libxml-list.html#xmlListSort">xmlListSort</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetSort">xmlXPathNodeSetSort</a><br />
+</dd><dt>SpacingModifierLetters</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSpacingModifierLetters">xmlUCSIsSpacingModifierLetters</a><br />
+</dd><dt>Spec</dt><dd><a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>Special</dt><dd><a href="html/libxml-parser.html#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a><br />
+</dd><dt>Specials</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSpecials">xmlUCSIsSpecials</a><br />
+</dd><dt>Speed</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>Standalone</dt><dd><a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+</dd><dt>Start</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPOpen">xmlNanoFTPOpen</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartComment">xmlTextWriterStartComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTD">xmlTextWriterStartDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDAttlist">xmlTextWriterStartDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDElement">xmlTextWriterStartDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElement">xmlTextWriterStartElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElementNS">xmlTextWriterStartElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartPI">xmlTextWriterStartPI</a><br />
+</dd><dt>StringType</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>Strings</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>Subcode</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>Subset</dt><dd><a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>Super</dt><dd><a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+</dd><dt>SuperscriptsandSubscripts</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSuperscriptsandSubscripts">xmlUCSIsSuperscriptsandSubscripts</a><br />
+</dd><dt>SupplementalArrows-A</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementalArrowsA">xmlUCSIsSupplementalArrowsA</a><br />
+</dd><dt>SupplementalArrows-B</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementalArrowsB">xmlUCSIsSupplementalArrowsB</a><br />
+</dd><dt>SupplementalMathematicalOperators</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementalMathematicalOperators">xmlUCSIsSupplementalMathematicalOperators</a><br />
+</dd><dt>SupplementaryPrivateUseArea-A</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementaryPrivateUseAreaA">xmlUCSIsSupplementaryPrivateUseAreaA</a><br />
+</dd><dt>SupplementaryPrivateUseArea-B</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementaryPrivateUseAreaB">xmlUCSIsSupplementaryPrivateUseAreaB</a><br />
+</dd><dt>Syriac</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsSyriac">xmlUCSIsSyriac</a><br />
+</dd><dt>System</dt><dd><a href="html/libxml-tree.html#_xmlNotation">_xmlNotation</a><br />
+<a href="html/libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+</dd><dt>SystemLiteral</dt><dd><a href="html/libxml-parserInternals.html#xmlNamespaceParseNSDef">xmlNamespaceParseNSDef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSystemLiteral">xmlParseSystemLiteral</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk7.html b/doc/APIchunk7.html
new file mode 100644
index 0000000..a3a33f0
--- /dev/null
+++ b/doc/APIchunk7.html
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index T-U for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index T-U for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter T:</h2><dl><dt>TEXT</dt><dd><a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddChildList">xmlAddChildList</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+</dd><dt>TEXTs</dt><dd><a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+</dd><dt>TODO</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+</dd><dt>TODO:</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-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-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 />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+</dd><dt>TRUE</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDEntity">xmlTextWriterWriteDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDInternalEntity">xmlTextWriterWriteDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a><br />
+</dd><dt>Tagalog</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsTagalog">xmlUCSIsTagalog</a><br />
+</dd><dt>Tagbanwa</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsTagbanwa">xmlUCSIsTagbanwa</a><br />
+</dd><dt>Tags</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsTags">xmlUCSIsTags</a><br />
+</dd><dt>TaiLe</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsTaiLe">xmlUCSIsTaiLe</a><br />
+</dd><dt>TaiXuanJingSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsTaiXuanJingSymbols">xmlUCSIsTaiXuanJingSymbols</a><br />
+</dd><dt>Take</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-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<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 />
+</dd><dt>Takes</dt><dd><a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</dd><dt>Tamil</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsTamil">xmlUCSIsTamil</a><br />
+</dd><dt>Telugu</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsTelugu">xmlUCSIsTelugu</a><br />
+</dd><dt>Test</dt><dd><a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
+</dd><dt>Text</dt><dd><a href="html/libxml-tree.html#xmlNodeIsText">xmlNodeIsText</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+</dd><dt>TextDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</a><br />
+</dd><dt>TextDecl?</dt><dd><a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+</dd><dt>Thaana</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsThaana">xmlUCSIsThaana</a><br />
+</dd><dt>Thai</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsThai">xmlUCSIsThai</a><br />
+</dd><dt>That</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</a><br />
+<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>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 />
+</dd><dt>Token</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokenValue">xmlValidateNmtokenValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokensValue">xmlValidateNmtokensValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+</dd><dt>TokenizedType</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>Traversal</dt><dd><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#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextChild">xmlXPathNextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+</dd><dt>Tree</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+</dd><dt>Tree:-</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>Trickery:</dt><dd><a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>Tries</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPConnect">xmlNanoFTPConnect</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+</dd><dt>True</dt><dd><a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+</dd><dt>Try</dt><dd><a href="html/libxml-catalog.html#xmlACatalogResolvePublic">xmlACatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveSystem">xmlACatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetPublic">xmlCatalogGetPublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetSystem">xmlCatalogGetSystem</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolvePublic">xmlCatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveSystem">xmlCatalogResolveSystem</a><br />
+<a href="html/libxml-tree.html#xmlIsXHTML">xmlIsXHTML</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</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#xmlValidateDtd">xmlValidateDtd</a><br />
+<a href="html/libxml-valid.html#xmlValidateElement">xmlValidateElement</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 />
+</dd><dt>Type</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaFreeType">xmlSchemaFreeType</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+</dd><dt>Types</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+</dd></dl><h2>Letter U:</h2><dl><dt>UCS4</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Charcmp">xmlUTF8Charcmp</a><br />
+</dd><dt>UNICODE</dt><dd><a href="html/libxml-HTMLparser.html#_htmlEntityDesc">_htmlEntityDesc</a><br />
+<a href="">c</a><br />
+</dd><dt>UNIX</dt><dd><a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+</dd><dt>UNUSED:</dt><dd><a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<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#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 />
+</dd><dt>USER</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+</dd><dt>UTF16</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</dd><dt>UTF4</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+</dd><dt>UTF8</dt><dd><a href="html/libxml-tree.html#_xmlBuffer">_xmlBuffer</a><br />
+<a href="">p</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Charcmp">xmlUTF8Charcmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Size">xmlUTF8Size</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strloc">xmlUTF8Strloc</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strndup">xmlUTF8Strndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
+</dd><dt>Ugaritic</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsUgaritic">xmlUCSIsUgaritic</a><br />
+</dd><dt>Unescaping</dt><dd><a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+</dd><dt>Unicode</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a><br />
+</dd><dt>UnifiedCanadianAboriginalSyllabics</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsUnifiedCanadianAboriginalSyllabics">xmlUCSIsUnifiedCanadianAboriginalSyllabics</a><br />
+</dd><dt>Unique</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+</dd><dt>Unix</dt><dd><a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+</dd><dt>Unlink</dt><dd><a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
+</dd><dt>Unregisters</dt><dd><a href="html/libxml-encoding.html#xmlCleanupEncodingAliases">xmlCleanupEncodingAliases</a><br />
+<a href="html/libxml-encoding.html#xmlDelEncodingAlias">xmlDelEncodingAlias</a><br />
+</dd><dt>Update</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+</dd><dt>Upgrade</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>Use</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#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar">xmlIsBaseChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank">xmlIsBlank</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar">xmlIsChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombining">xmlIsCombining</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit">xmlIsDigit</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender">xmlIsExtender</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographic">xmlIsIdeographic</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>Used</dt><dd><a href="html/libxml-parser.html#XML_SKIP_IDS">XML_SKIP_IDS</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDefaults">xmlCatalogSetDefaults</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>User</dt><dd><a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>UserCode</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+</dd><dt>Uses</dt><dd><a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk8.html b/doc/APIchunk8.html
new file mode 100644
index 0000000..210b466
--- /dev/null
+++ b/doc/APIchunk8.html
@@ -0,0 +1,683 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index V-a for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index V-a for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter V:</h2><dl><dt>Valid</dt><dd><a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
+</dd><dt>Validate</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGValidateDoc">xmlRelaxNGValidateDoc</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</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 />
+<a href="html/libxml-valid.html#xmlValidateNamesValue">xmlValidateNamesValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokenValue">xmlValidateNmtokenValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokensValue">xmlValidateNmtokensValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationUse">xmlValidateNotationUse</a><br />
+</dd><dt>Validity</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>Value</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+</dd><dt>Values</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+</dd><dt>Variable</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathVariableLookup">xmlXPathVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupNS">xmlXPathVariableLookupNS</a><br />
+</dd><dt>VariationSelectors</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsVariationSelectors">xmlUCSIsVariationSelectors</a><br />
+</dd><dt>VariationSelectorsSupplement</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsVariationSelectorsSupplement">xmlUCSIsVariationSelectorsSupplement</a><br />
+</dd><dt>VersionInfo</dt><dd><a href="html/libxml-parserInternals.html#xmlParseVersionInfo">xmlParseVersionInfo</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseXMLDecl">xmlParseXMLDecl</a><br />
+</dd><dt>VersionInfo?</dt><dd><a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</a><br />
+</dd><dt>VersionNum</dt><dd><a href="html/libxml-parserInternals.html#xmlParseVersionInfo">xmlParseVersionInfo</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionNum">xmlParseVersionNum</a><br />
+</dd></dl><h2>Letter W:</h2><dl><dt>WARNING</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+</dd><dt>WFC:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+</dd><dt>WWW-Authenticate</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
+</dd><dt>Walk</dt><dd><a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+</dd><dt>Was</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+</dd><dt>Well</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</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 />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>What</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+<a href="html/libxml-SAX.html#notationDecl">notationDecl</a><br />
+<a href="html/libxml-parser.html#notationDeclSAXFunc">notationDeclSAXFunc</a><br />
+<a href="html/libxml-SAX.html#unparsedEntityDecl">unparsedEntityDecl</a><br />
+<a href="html/libxml-parser.html#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2NotationDecl">xmlSAX2NotationDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2UnparsedEntityDecl">xmlSAX2UnparsedEntityDecl</a><br />
+</dd><dt>When</dt><dd><a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+</dd><dt>Wherever</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>Whitespace</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+</dd><dt>Will</dt><dd><a href="html/libxml-tree.html#xmlSaveFile">xmlSaveFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+</dd><dt>With</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEndTag">xmlParseEndTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>Working</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>Wrap</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrWrapLocationSet">xmlXPtrWrapLocationSet</a><br />
+</dd><dt>Wrapper</dt><dd><a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
+</dd><dt>Wraps</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathWrapCString">xmlXPathWrapCString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapExternal">xmlXPathWrapExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapString">xmlXPathWrapString</a><br />
+</dd><dt>Writes</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a><br />
+</dd></dl><h2>Letter X:</h2><dl><dt>XHTML</dt><dd><a href="html/libxml-tree.html#xmlIsXHTML">xmlIsXHTML</a><br />
+</dd><dt>XInclude</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_XINCLUDE_ENABLED">LIBXML_XINCLUDE_ENABLED</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_NS">XINCLUDE_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeFreeContext">xmlXIncludeFreeContext</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeNewContext">xmlXIncludeNewContext</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<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 />
+<a href="html/libxml-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</a><br />
+</dd><dt>XLINK_TYPE_NONE</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+</dd><dt>XML-1</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</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 />
+</dd><dt>XMLDecl</dt><dd><a href="html/libxml-parserInternals.html#xmlParseXMLDecl">xmlParseXMLDecl</a><br />
+</dd><dt>XMLDecl?</dt><dd><a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+</dd><dt>XMLSchema</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+</dd><dt>XML_ATTRIBUTE_DECL</dt><dd><a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+</dd><dt>XML_ATTRIBUTE_ENUMERATION</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+</dd><dt>XML_ATTRIBUTE_FIXED</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>XML_ATTRIBUTE_IMPLIED</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>XML_ATTRIBUTE_NODE</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+</dd><dt>XML_ATTRIBUTE_NONE</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>XML_ATTRIBUTE_NOTATION</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+</dd><dt>XML_ATTRIBUTE_REQUIRED</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+</dd><dt>XML_BUFFER_ALLOC_DOUBLEIT</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+</dd><dt>XML_BUFFER_ALLOC_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>XML_CATA_PREFER_PUBLIC</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+</dd><dt>XML_CATA_PREFER_SYSTEM</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+</dd><dt>XML_CHAR_ENCODING_</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+</dd><dt>XML_CHAR_ENCODING_NONE</dt><dd><a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+</dd><dt>XML_DOCUMENT_NODE</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+</dd><dt>XML_DTD_NODE</dt><dd><a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+</dd><dt>XML_ELEMENT_DECL</dt><dd><a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+</dd><dt>XML_ELEMENT_TYPE_xxx</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+</dd><dt>XML_ENTITY_DECL</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+</dd><dt>XML_SUBSTITUTE_PEREF</dt><dd><a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</dd><dt>XML_SUBSTITUTE_REF</dt><dd><a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</dd><dt>XML_xxx_yyy_ENTITY</dt><dd><a href="html/libxml-entities.html#xmlAddDocEntity">xmlAddDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlAddDtdEntity">xmlAddDtdEntity</a><br />
+</dd><dt>XPATH</dt><dd><a href="html/libxml-xpath.html#xmlXPathFreeCompExpr">xmlXPathFreeCompExpr</a><br />
+</dd><dt>XPATH_INVALID_ARITY</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSetArityError">xmlXPathSetArityError</a><br />
+</dd><dt>XPATH_INVALID_TYPE</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSetTypeError">xmlXPathSetTypeError</a><br />
+</dd><dt>XPointer</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_XPTR_ENABLED">LIBXML_XPTR_ENABLED</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+<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>XSLT</dt><dd><a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-pattern.html#xmlFreePattern">xmlFreePattern</a><br />
+<a href="html/libxml-pattern.html#xmlFreePatternList">xmlFreePatternList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStackIsNodeSet">xmlXPathStackIsNodeSet</a><br />
+</dd><dt>Xinclude</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_NS">XINCLUDE_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
+</dd><dt>Xml</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+</dd><dt>XmlNodeType</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+</dd></dl><h2>Letter Y:</h2><dl><dt>YES</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>YiRadicals</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsYiRadicals">xmlUCSIsYiRadicals</a><br />
+</dd><dt>YiSyllables</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsYiSyllables">xmlUCSIsYiSyllables</a><br />
+</dd><dt>YijingHexagramSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsYijingHexagramSymbols">xmlUCSIsYijingHexagramSymbols</a><br />
+</dd></dl><h2>Letter Z:</h2><dl><dt>ZLIB</dt><dd><a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateFileParserCtxt">xmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</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 />
+<a href="html/libxml-parser.html#xmlParseFile">xmlParseFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-parser.html#xmlRecoverFile">xmlRecoverFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+<a href="html/libxml-tree.html#xmlSetCompressMode">xmlSetCompressMode</a><br />
+<a href="html/libxml-tree.html#xmlSetDocCompressMode">xmlSetDocCompressMode</a><br />
+</dd></dl><h2>Letter a:</h2><dl><dt>a-z</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+</dd><dt>a-zA-Z0-9</dt><dd><a href="html/libxml-parserInternals.html#IS_PUBIDCHAR">IS_PUBIDCHAR</a><br />
+</dd><dt>a-zA-Z0-9_</dt><dd><a href="html/libxml-parserInternals.html#xmlParseVersionNum">xmlParseVersionNum</a><br />
+</dd><dt>a@b</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+</dd><dt>abc</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>abc-</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>able</dt><dd><a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>about</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpString">xmlDebugDumpString</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
+</dd><dt>above</dt><dd><a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>absoluteURI</dt><dd><a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</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 />
+</dd><dt>accept</dt><dd><a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+</dd><dt>accepted</dt><dd><a href="html/libxml-parserInternals.html#IS_BYTE_CHAR">IS_BYTE_CHAR</a><br />
+<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-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>accepting</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</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 />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+<a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+</dd><dt>accessed</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</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>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 />
+<a href="html/libxml-SAX2.html#xmlSAXVersion">xmlSAXVersion</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>accordingly</dt><dd><a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+</dd><dt>activate</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+</dd><dt>activated</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</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-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+</dd><dt>activation</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+</dd><dt>acts</dt><dd><a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+</dd><dt>actual</dt><dd><a href="html/libxml-xpath.html#xmlXPathFreeNodeSet">xmlXPathFreeNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a><br />
+</dd><dt>actually</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<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-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-encoding.html#xmlDelEncodingAlias">xmlDelEncodingAlias</a><br />
+<a href="html/libxml-encoding.html#xmlGetEncodingAlias">xmlGetEncodingAlias</a><br />
+<a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>actuate</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+</dd><dt>add</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
+<a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteChar">xmlBufferWriteChar</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-list.html#xmlListPushBack">xmlListPushBack</a><br />
+<a href="html/libxml-list.html#xmlListPushFront">xmlListPushFront</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+</dd><dt>added</dt><dd><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocContentDumpFormatOutput">htmlDocContentDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocContentDumpOutput">htmlDocContentDumpOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSaveFileEnc">htmlSaveFileEnc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSaveFileFormat">htmlSaveFileFormat</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+</dd><dt>adding</dt><dd><a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPMethod">xmlNanoHTTPMethod</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPMethodRedir">xmlNanoHTTPMethodRedir</a><br />
+</dd><dt>addition</dt><dd><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-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+</dd><dt>address</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+</dd><dt>adds</dt><dd><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#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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</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-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
+</dd><dt>adequate</dt><dd><a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</dd><dt>adjacent</dt><dd><a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddChildList">xmlAddChildList</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+</dd><dt>affect</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>afraid</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+</dd><dt>after</dt><dd><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
+<a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</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-nanoftp.html#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>again</dt><dd><a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+</dd><dt>against</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a><br />
+<a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
+<a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</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>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 />
+</dd><dt>aliases</dt><dd><a href="html/libxml-encoding.html#xmlCleanupCharEncodingHandlers">xmlCleanupCharEncodingHandlers</a><br />
+<a href="html/libxml-encoding.html#xmlCleanupEncodingAliases">xmlCleanupEncodingAliases</a><br />
+</dd><dt>aliasing</dt><dd><a href="html/libxml-tree.html#xmlSearchNsByHref">xmlSearchNsByHref</a><br />
+</dd><dt>allocate</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#xmlBufferGrow">xmlBufferGrow</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+<a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectCopy">xmlXPathObjectCopy</a><br />
+</dd><dt>allocation</dt><dd><a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemStrdupLoc">xmlMemStrdupLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryStrdup">xmlMemoryStrdup</a><br />
+<a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+</dd><dt>allocations</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#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a><br />
+</dd><dt>allocator</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+</dd><dt>allocators</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+</dd><dt>allow</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTR_NSDEFAULT">XML_SCHEMAS_ATTR_NSDEFAULT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_NSDEFAULT">XML_SCHEMAS_ELEM_NSDEFAULT</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+</dd><dt>allowable</dt><dd><a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+</dd><dt>allowed</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<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#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
+<a href="html/libxml-parserInternals.html#xmlIsLetter">xmlIsLetter</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+</dd><dt>allowing</dt><dd><a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+</dd><dt>allows</dt><dd><a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<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-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+</dd><dt>already</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+</dd><dt>also</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+</dd><dt>alternative</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTD">xmlTextWriterStartDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTD">xmlTextWriterWriteDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDEntity">xmlTextWriterWriteDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntityContents">xmlTextWriterWriteDTDExternalEntityContents</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDNotation">xmlTextWriterWriteDTDNotation</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+</dd><dt>always</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+</dd><dt>amd</dt><dd><a href="html/libxml-catalog.html#xmlCatalogIsEmpty">xmlCatalogIsEmpty</a><br />
+</dd><dt>amount</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+<a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemUsed">xmlMemUsed</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+</dd><dt>amp</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+</dd><dt>ampersand</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</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#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 />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextAncestor">xmlXPathNextAncestor</a><br />
+</dd><dt>ancestor-or-self</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextAncestorOrSelf">xmlXPathNextAncestorOrSelf</a><br />
+</dd><dt>ancestors</dt><dd><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#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+</dd><dt>anchored</dt><dd><a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
+</dd><dt>angle</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+</dd><dt>annotation</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaAnnot">_xmlSchemaAnnot</a><br />
+</dd><dt>another</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+</dd><dt>anymore</dt><dd><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>anyway</dt><dd><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 />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+</dd><dt>apart</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>apos</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+</dd><dt>appear</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<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 />
+<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 />
+</dd><dt>append</dt><dd><a href="html/libxml-parserInternals.html#xmlCopyChar">xmlCopyChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlCopyCharMultiByte">xmlCopyCharMultiByte</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>appended</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>appending</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+</dd><dt>appendix</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+</dd><dt>applicable</dt><dd><a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+</dd><dt>application</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-tree.html#_xmlNs">_xmlNs</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-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parser.html#xmlGetExternalEntityLoader">xmlGetExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+<a href="html/libxml-parser.html#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</a><br />
+</dd><dt>applied</dt><dd><a href="html/libxml-hash.html#xmlHashCopy">xmlHashCopy</a><br />
+<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+</dd><dt>applies</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</dd><dt>apply</dt><dd><a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+</dd><dt>applying</dt><dd><a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+</dd><dt>appropriate</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
+</dd><dt>arcs</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+</dd><dt>area</dt><dd><a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+</dd><dt>areas</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#xmlMemShow">xmlMemShow</a><br />
+</dd><dt>args</dt><dd><a href="html/libxml-xpathInternals.html#CHECK_ARITY">CHECK_ARITY</a><br />
+<a href="">x</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrRangeToFunction">xmlXPtrRangeToFunction</a><br />
+</dd><dt>around</dt><dd><a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
+</dd><dt>arrays</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>arry</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+</dd><dt>asked</dt><dd><a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+</dd><dt>assume</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+</dd><dt>assumed</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+</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>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 />
+</dd><dt>attr</dt><dd><a href="html/libxml-tree.html#_xmlID">_xmlID</a><br />
+<a href="html/libxml-tree.html#_xmlRef">_xmlRef</a><br />
+</dd><dt>attribute-list</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+</dd><dt>augmented</dt><dd><a href="html/libxml-DOCBparser.html#docbParseDocument">docbParseDocument</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDocument">htmlParseDocument</a><br />
+<a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-tree.html#xmlTextMerge">xmlTextMerge</a><br />
+</dd><dt>authentication</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
+</dd><dt>author</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>authority</dt><dd><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+</dd><dt>authorized</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>auto</dt><dd><a href="html/libxml-HTMLparser.html#htmlHandleOmittedElem">htmlHandleOmittedElem</a><br />
+</dd><dt>auto-repair</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>autoclose</dt><dd><a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+</dd><dt>autoclosed</dt><dd><a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+</dd><dt>autogeneration</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>automatically</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+</dd><dt>autoreference</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+</dd><dt>avoiding</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+</dd><dt>aware</dt><dd><a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIchunk9.html b/doc/APIchunk9.html
new file mode 100644
index 0000000..a3fc71e
--- /dev/null
+++ b/doc/APIchunk9.html
@@ -0,0 +1,285 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>API Alphabetic Index b-b for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index b-b for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+<a href="APIchunk1.html">C-C</a>
+<a href="APIchunk2.html">D-E</a>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><h2>Letter b:</h2><dl><dt>back</dt><dd><a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGDump">xmlRelaxNGDump</a><br />
+<a href="html/libxml-parserInternals.html#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a><br />
+</dd><dt>badly</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+</dd><dt>bahaviour</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>balanced</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+</dd><dt>bar</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+</dd><dt>base64</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a><br />
+</dd><dt>based</dt><dd><a href="html/libxml-tree.html#xmlGetCompressMode">xmlGetCompressMode</a><br />
+<a href="html/libxml-tree.html#xmlGetDocCompressMode">xmlGetDocCompressMode</a><br />
+<a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputFromFile">xmlNewInputFromFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewStringInputStream">xmlNewStringInputStream</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-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 />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+</dd><dt>basically</dt><dd><a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</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 />
+</dd><dt>basis</dt><dd><a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+</dd><dt>bear</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>becomes</dt><dd><a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+</dd><dt>before</dt><dd><a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+<a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>beginning</dt><dd><a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
+<a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-list.html#xmlListInsert">xmlListInsert</a><br />
+<a href="html/libxml-list.html#xmlListPushFront">xmlListPushFront</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</dd><dt>begins</dt><dd><a href="html/libxml-parser.html#_xmlParserNodeInfo">_xmlParserNodeInfo</a><br />
+</dd><dt>behaves</dt><dd><a href="html/libxml-parserInternals.html#IS_LETTER_CH">IS_LETTER_CH</a><br />
+</dd><dt>behavior</dt><dd><a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+</dd><dt>behaviour</dt><dd><a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
+<a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
+<a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
+<a href="html/libxml-tree.html#xmlFreeNodeList">xmlFreeNodeList</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+</dd><dt>below</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+</dd><dt>better</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-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+</dd><dt>between</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+</dd><dt>beyond</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>binary</dt><dd><a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a><br />
+</dd><dt>bindings</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
+</dd><dt>bit</dt><dd><a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+</dd><dt>blanks</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+</dd><dt>bloc</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+</dd><dt>blocked</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+</dd><dt>blocking</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
+</dd><dt>blocks</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+<a href="html/libxml-parser.html#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a><br />
+<a href="html/libxml-SAX.html#initdocbDefaultSAXHandler">initdocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#inithtmlDefaultSAXHandler">inithtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemDisplay">xmlMemDisplay</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a><br />
+</dd><dt>bool</dt><dd><a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+</dd><dt>both</dt><dd><a href="html/libxml-tree.html#xmlBufferFree">xmlBufferFree</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPClose">xmlNanoFTPClose</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<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>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 />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</dd><dt>bracket</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+</dd><dt>break</dt><dd><a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+</dd><dt>breaking</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+</dd><dt>breaks</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>broken</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>buffered</dt><dd><a href="html/libxml-xmlIO.html#xmlAllocOutputBuffer">xmlAllocOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlFreeParserInputBuffer">xmlFreeParserInputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferFlush">xmlOutputBufferFlush</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+</dd><dt>building</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+</dd><dt>built</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</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 />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+</dd><dt>builtin</dt><dd><a href="html/libxml-xmlerror.html#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a><br />
+</dd><dt>bunch</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>but</dt><dd><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 />
+<a href="html/libxml-parserInternals.html#IS_LETTER_CH">IS_LETTER_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-parser.html#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</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-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+</dd><dt>bypass</dt><dd><a href="html/libxml-catalog.html#xmlParseCatalogFile">xmlParseCatalogFile</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>
+<a href="APIchunk3.html">F-I</a>
+<a href="APIchunk4.html">J-N</a>
+<a href="APIchunk5.html">O-Q</a>
+<a href="APIchunk6.html">R-S</a>
+<a href="APIchunk7.html">T-U</a>
+<a href="APIchunk8.html">V-a</a>
+<a href="APIchunk9.html">b-b</a>
+<a href="APIchunk10.html">c-c</a>
+<a href="APIchunk11.html">d-d</a>
+<a href="APIchunk12.html">e-e</a>
+<a href="APIchunk13.html">f-f</a>
+<a href="APIchunk14.html">g-h</a>
+<a href="APIchunk15.html">i-i</a>
+<a href="APIchunk16.html">j-l</a>
+<a href="APIchunk17.html">m-m</a>
+<a href="APIchunk18.html">n-n</a>
+<a href="APIchunk19.html">o-o</a>
+<a href="APIchunk20.html">p-p</a>
+<a href="APIchunk21.html">q-r</a>
+<a href="APIchunk22.html">s-s</a>
+<a href="APIchunk23.html">t-t</a>
+<a href="APIchunk24.html">u-w</a>
+<a href="APIchunk25.html">x-x</a>
+<a href="APIchunk26.html">y-z</a>
+</h2><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/APIconstructors.html b/doc/APIconstructors.html
new file mode 100644
index 0000000..af60a88
--- /dev/null
+++ b/doc/APIconstructors.html
@@ -0,0 +1,522 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>List of constructors for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>List of constructors for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>Type const htmlElemDesc *:</h2><p><a href="html/libxml-HTMLparser.html#htmlTagLookup">htmlTagLookup</a><br />
+</p><h2>Type const htmlEntityDesc *:</h2><p><a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+</p><h2>Type const xmlChar *:</h2><p><a href="html/libxml-SAX.html#getPublicId">getPublicId</a><br />
+<a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-HTMLtree.html#htmlGetMetaEncoding">htmlGetMetaEncoding</a><br />
+<a href="html/libxml-parserInternals.html#namePop">namePop</a><br />
+<a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetPublic">xmlCatalogGetPublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetSystem">xmlCatalogGetSystem</a><br />
+<a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePITarget">xmlParsePITarget</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetPublicId">xmlSAX2GetPublicId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrstr">xmlStrstr</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstBaseUri">xmlTextReaderConstBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstLocalName">xmlTextReaderConstLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstNamespaceUri">xmlTextReaderConstNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstPrefix">xmlTextReaderConstPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNsLookup">xmlXPathNsLookup</a><br />
+</p><h2>Type const xmlParserNodeInfo *:</h2><p><a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+</p><h2>Type docbDocPtr:</h2><p><a href="html/libxml-DOCBparser.html#docbParseDoc">docbParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+</p><h2>Type docbParserCtxtPtr:</h2><p><a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+</p><h2>Type double:</h2><p><a href="html/libxml-xpath.html#xmlXPathCastBooleanToNumber">xmlXPathCastBooleanToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToNumber">xmlXPathCastNodeSetToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToNumber">xmlXPathCastNodeToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastStringToNumber">xmlXPathCastStringToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToNumber">xmlXPathCastToNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNumber">xmlXPathPopNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+</p><h2>Type htmlDocPtr:</h2><p><a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFd">htmlCtxtReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFile">htmlCtxtReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadMemory">htmlCtxtReadMemory</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDoc">htmlNewDoc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDocNoDtD">htmlNewDocNoDtD</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDoc">htmlParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadDoc">htmlReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFd">htmlReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFile">htmlReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadMemory">htmlReadMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+</p><h2>Type htmlParserCtxtPtr:</h2><p><a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreateMemoryParserCtxt">htmlCreateMemoryParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+</p><h2>Type htmlStatus:</h2><p><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</p><h2>Type long:</h2><p><a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</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-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</p><h2>Type unsigned long:</h2><p><a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+</p><h2>Type void *:</h2><p><a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
+<a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
+<a href="html/libxml-hash.html#xmlHashCopier">xmlHashCopier</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 />
+<a href="html/libxml-hash.html#xmlHashQLookup">xmlHashQLookup</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup2">xmlHashQLookup2</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup3">xmlHashQLookup3</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPOpen">xmlIOFTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpen">xmlIOHTTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a><br />
+<a href="html/libxml-list.html#xmlLinkGetData">xmlLinkGetData</a><br />
+<a href="html/libxml-list.html#xmlListReverseSearch">xmlListReverseSearch</a><br />
+<a href="html/libxml-list.html#xmlListSearch">xmlListSearch</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPNewCtxt">xmlNanoFTPNewCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPOpen">xmlNanoFTPOpen</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-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopExternal">xmlXPathPopExternal</a><br />
+</p><h2>Type xlinkHandlerPtr:</h2><p><a href="html/libxml-xlink.html#xlinkGetDefaultHandler">xlinkGetDefaultHandler</a><br />
+</p><h2>Type xlinkNodeDetectFunc:</h2><p><a href="html/libxml-xlink.html#xlinkGetDefaultDetect">xlinkGetDefaultDetect</a><br />
+</p><h2>Type xlinkType:</h2><p><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+</p><h2>Type xmlAttrPtr:</h2><p><a href="html/libxml-tree.html#xmlCopyProp">xmlCopyProp</a><br />
+<a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</a><br />
+<a href="html/libxml-valid.html#xmlGetID">xmlGetID</a><br />
+<a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
+<a href="html/libxml-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-tree.html#xmlNewDocProp">xmlNewDocProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
+<a href="html/libxml-tree.html#xmlSetNsProp">xmlSetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlSetProp">xmlSetProp</a><br />
+</p><h2>Type xmlAttributePtr:</h2><p><a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+</p><h2>Type xmlAttributeTablePtr:</h2><p><a href="html/libxml-valid.html#xmlCopyAttributeTable">xmlCopyAttributeTable</a><br />
+</p><h2>Type xmlAutomataPtr:</h2><p><a href="html/libxml-xmlautomata.html#xmlNewAutomata">xmlNewAutomata</a><br />
+</p><h2>Type xmlAutomataStatePtr:</h2><p><a href="html/libxml-xmlautomata.html#xmlAutomataGetInitState">xmlAutomataGetInitState</a><br />
+<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#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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewState">xmlAutomataNewState</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition2">xmlAutomataNewTransition2</a><br />
+</p><h2>Type xmlBufferAllocationScheme:</h2><p><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-globals.html#xmlThrDefBufferAllocScheme">xmlThrDefBufferAllocScheme</a><br />
+</p><h2>Type xmlBufferPtr:</h2><p><a href="html/libxml-tree.html#xmlBufferCreate">xmlBufferCreate</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateSize">xmlBufferCreateSize</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+</p><h2>Type xmlCatalogAllow:</h2><p><a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
+</p><h2>Type xmlCatalogPrefer:</h2><p><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+</p><h2>Type xmlCatalogPtr:</h2><p><a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlNewCatalog">xmlNewCatalog</a><br />
+</p><h2>Type xmlChar:</h2><p><a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
+</p><h2>Type xmlChar *:</h2><p><a href="html/libxml-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolvePublic">xmlACatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveSystem">xmlACatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveURI">xmlACatalogResolveURI</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolve">xmlCatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolvePublic">xmlCatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveSystem">xmlCatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveURI">xmlCatalogResolveURI</a><br />
+<a href="html/libxml-xmlstring.html#xmlCharStrdup">xmlCharStrdup</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-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-entities.html#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a><br />
+<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
+<a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</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 />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncName">xmlParseEncName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNmtoken">xmlParseNmtoken</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePubidLiteral">xmlParsePubidLiteral</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSystemLiteral">xmlParseSystemLiteral</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionInfo">xmlParseVersionInfo</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionNum">xmlParseVersionNum</a><br />
+<a href="html/libxml-uri.html#xmlSaveUri">xmlSaveUri</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrndup">xmlStrndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderBaseUri">xmlTextReaderBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttribute">xmlTextReaderGetAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNs">xmlTextReaderGetAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocalName">xmlTextReaderLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorBaseURI">xmlTextReaderLocatorBaseURI</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderName">xmlTextReaderName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNamespaceUri">xmlTextReaderNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPrefix">xmlTextReaderPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderValue">xmlTextReaderValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strndup">xmlUTF8Strndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</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-xpath.html#xmlXPathCastBooleanToString">xmlXPathCastBooleanToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToString">xmlXPathCastNodeSetToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToString">xmlXPathCastNodeToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNumberToString">xmlXPathCastNumberToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToString">xmlXPathCastToString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseName">xmlXPathParseName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopString">xmlXPathPopString</a><br />
+</p><h2>Type xmlCharEncoding:</h2><p><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+</p><h2>Type xmlCharEncodingHandlerPtr:</h2><p><a href="html/libxml-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+</p><h2>Type xmlDeregisterNodeFunc:</h2><p><a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlThrDefDeregisterNodeDefault">xmlThrDefDeregisterNodeDefault</a><br />
+</p><h2>Type xmlDictPtr:</h2><p><a href="html/libxml-dict.html#xmlDictCreate">xmlDictCreate</a><br />
+<a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+</p><h2>Type xmlDocPtr:</h2><p><a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadDoc">xmlCtxtReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFile">xmlCtxtReadFile</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadMemory">xmlCtxtReadMemory</a><br />
+<a href="html/libxml-tree.html#xmlNewDoc">xmlNewDoc</a><br />
+<a href="html/libxml-catalog.html#xmlParseCatalogFile">xmlParseCatalogFile</a><br />
+<a href="html/libxml-parser.html#xmlParseDoc">xmlParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseFile">xmlParseFile</a><br />
+<a href="html/libxml-parser.html#xmlParseMemory">xmlParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlReadDoc">xmlReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
+<a href="html/libxml-parser.html#xmlReadFile">xmlReadFile</a><br />
+<a href="html/libxml-parser.html#xmlReadIO">xmlReadIO</a><br />
+<a href="html/libxml-parser.html#xmlReadMemory">xmlReadMemory</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 />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+</p><h2>Type xmlDtdPtr:</h2><p><a href="html/libxml-tree.html#xmlCopyDtd">xmlCopyDtd</a><br />
+<a href="html/libxml-tree.html#xmlCreateIntSubset">xmlCreateIntSubset</a><br />
+<a href="html/libxml-tree.html#xmlGetIntSubset">xmlGetIntSubset</a><br />
+<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-tree.html#xmlNewDtd">xmlNewDtd</a><br />
+<a href="html/libxml-parser.html#xmlParseDTD">xmlParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDTD">xmlSAXParseDTD</a><br />
+</p><h2>Type xmlElementContentPtr:</h2><p><a href="html/libxml-valid.html#xmlCopyElementContent">xmlCopyElementContent</a><br />
+<a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+</p><h2>Type xmlElementPtr:</h2><p><a href="html/libxml-valid.html#xmlAddElementDecl">xmlAddElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+</p><h2>Type xmlElementTablePtr:</h2><p><a href="html/libxml-valid.html#xmlCopyElementTable">xmlCopyElementTable</a><br />
+</p><h2>Type xmlEntitiesTablePtr:</h2><p><a href="html/libxml-entities.html#xmlCopyEntitiesTable">xmlCopyEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
+</p><h2>Type xmlEntityPtr:</h2><p><a href="html/libxml-SAX.html#getEntity">getEntity</a><br />
+<a href="html/libxml-parser.html#getEntitySAXFunc">getEntitySAXFunc</a><br />
+<a href="html/libxml-SAX.html#getParameterEntity">getParameterEntity</a><br />
+<a href="html/libxml-parser.html#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a><br />
+<a href="html/libxml-entities.html#xmlAddDocEntity">xmlAddDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlAddDtdEntity">xmlAddDtdEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetDtdEntity">xmlGetDtdEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetPredefinedEntity">xmlGetPredefinedEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetEntity">xmlSAX2GetEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetParameterEntity">xmlSAX2GetParameterEntity</a><br />
+</p><h2>Type xmlEnumerationPtr:</h2><p><a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
+<a href="html/libxml-valid.html#xmlCreateEnumeration">xmlCreateEnumeration</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+<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 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 />
+<a href="html/libxml-hash.html#xmlHashCreate">xmlHashCreate</a><br />
+</p><h2>Type xmlIDPtr:</h2><p><a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+</p><h2>Type xmlLinkPtr:</h2><p><a href="html/libxml-list.html#xmlListEnd">xmlListEnd</a><br />
+<a href="html/libxml-list.html#xmlListFront">xmlListFront</a><br />
+</p><h2>Type xmlListPtr:</h2><p><a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</a><br />
+<a href="html/libxml-list.html#xmlListCreate">xmlListCreate</a><br />
+<a href="html/libxml-list.html#xmlListDup">xmlListDup</a><br />
+</p><h2>Type xmlLocationSetPtr:</h2><p><a href="html/libxml-xpointer.html#xmlXPtrLocationSetCreate">xmlXPtrLocationSetCreate</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+</p><h2>Type xmlMutexPtr:</h2><p><a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+</p><h2>Type xmlNodePtr:</h2><p><a href="html/libxml-parserInternals.html#nodePop">nodePop</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddChildList">xmlAddChildList</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlCopyNodeList">xmlCopyNodeList</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlGetLastChild">xmlGetLastChild</a><br />
+<a href="html/libxml-tree.html#xmlNewCDataBlock">xmlNewCDataBlock</a><br />
+<a href="html/libxml-tree.html#xmlNewCharRef">xmlNewCharRef</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewComment">xmlNewComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocComment">xmlNewDocComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocFragment">xmlNewDocFragment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocText">xmlNewDocText</a><br />
+<a href="html/libxml-tree.html#xmlNewDocTextLen">xmlNewDocTextLen</a><br />
+<a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+<a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewPI">xmlNewPI</a><br />
+<a href="html/libxml-tree.html#xmlNewReference">xmlNewReference</a><br />
+<a href="html/libxml-tree.html#xmlNewText">xmlNewText</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextLen">xmlNewTextLen</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlTextMerge">xmlTextMerge</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
+<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#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextChild">xmlXPathNextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+</p><h2>Type xmlNodeSetPtr:</h2><p><a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</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 />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</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#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</p><h2>Type xmlNotationPtr:</h2><p><a href="html/libxml-valid.html#xmlAddNotationDecl">xmlAddNotationDecl</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+</p><h2>Type xmlNotationTablePtr:</h2><p><a href="html/libxml-valid.html#xmlCopyNotationTable">xmlCopyNotationTable</a><br />
+</p><h2>Type xmlNsPtr:</h2><p><a href="html/libxml-SAX.html#getNamespace">getNamespace</a><br />
+<a href="html/libxml-tree.html#xmlCopyNamespace">xmlCopyNamespace</a><br />
+<a href="html/libxml-tree.html#xmlCopyNamespaceList">xmlCopyNamespaceList</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetNamespace">xmlSAX2GetNamespace</a><br />
+<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
+<a href="html/libxml-tree.html#xmlSearchNsByHref">xmlSearchNsByHref</a><br />
+</p><h2>Type xmlNsPtr *:</h2><p><a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+</p><h2>Type xmlOutputBufferPtr:</h2><p><a href="html/libxml-xmlIO.html#xmlAllocOutputBuffer">xmlAllocOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+</p><h2>Type xmlParserCtxtPtr:</h2><p><a href="html/libxml-parser.html#xmlCreateDocParserCtxt">xmlCreateDocParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateFileParserCtxt">xmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateMemoryParserCtxt">xmlCreateMemoryParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlNewParserCtxt">xmlNewParserCtxt</a><br />
+</p><h2>Type xmlParserInputBufferPtr:</h2><p><a href="html/libxml-xmlIO.html#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+</p><h2>Type xmlParserInputPtr:</h2><p><a href="html/libxml-parserInternals.html#inputPop">inputPop</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-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</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#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputFromFile">xmlNewInputFromFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputStream">xmlNewInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewStringInputStream">xmlNewStringInputStream</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+</p><h2>Type xmlPatternPtr:</h2><p><a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+</p><h2>Type xmlRMutexPtr:</h2><p><a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+</p><h2>Type xmlRefPtr:</h2><p><a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+</p><h2>Type xmlRegExecCtxtPtr:</h2><p><a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+</p><h2>Type xmlRegexpPtr:</h2><p><a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+</p><h2>Type xmlRegisterNodeFunc:</h2><p><a href="html/libxml-globals.html#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlThrDefRegisterNodeDefault">xmlThrDefRegisterNodeDefault</a><br />
+</p><h2>Type xmlRelaxNGParserCtxtPtr:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
+</p><h2>Type xmlRelaxNGPtr:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
+</p><h2>Type xmlRelaxNGValidCtxtPtr:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGNewValidCtxt">xmlRelaxNGNewValidCtxt</a><br />
+</p><h2>Type xmlSaveCtxtPtr:</h2><p><a href="html/libxml-xmlsave.html#xmlSaveToBuffer">xmlSaveToBuffer</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+</p><h2>Type xmlSchemaFacetPtr:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaNewFacet">xmlSchemaNewFacet</a><br />
+</p><h2>Type xmlSchemaParserCtxtPtr:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaNewMemParserCtxt">xmlSchemaNewMemParserCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaNewParserCtxt">xmlSchemaNewParserCtxt</a><br />
+</p><h2>Type xmlSchemaPtr:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+</p><h2>Type xmlSchemaTypePtr:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+</p><h2>Type xmlSchemaValidCtxtPtr:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaNewValidCtxt">xmlSchemaNewValidCtxt</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 />
+<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForMemory">xmlReaderForMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderWalker">xmlReaderWalker</a><br />
+</p><h2>Type xmlTextWriterPtr:</h2><p><a href="html/libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<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 />
+</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 />
+<a href="html/libxml-xpath.html#xmlXPathCtxtCompile">xmlXPathCtxtCompile</a><br />
+</p><h2>Type xmlXPathContextPtr:</h2><p><a href="html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+</p><h2>Type xmlXPathFunction:</h2><p><a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a><br />
+</p><h2>Type xmlXPathObjectPtr:</h2><p><a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+<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 />
+<a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewBoolean">xmlXPathNewBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewCString">xmlXPathNewCString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewFloat">xmlXPathNewFloat</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewString">xmlXPathNewString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectCopy">xmlXPathObjectCopy</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookup">xmlXPathVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupNS">xmlXPathVariableLookupNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapCString">xmlXPathWrapCString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapExternal">xmlXPathWrapExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapString">xmlXPathWrapString</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodeSet">xmlXPtrNewLocationSetNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodes">xmlXPtrNewRangeNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrWrapLocationSet">xmlXPtrWrapLocationSet</a><br />
+</p><h2>Type xmlXPathParserContextPtr:</h2><p><a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
+</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/APIfiles.html b/doc/APIfiles.html
new file mode 100644
index 0000000..de3c270
--- /dev/null
+++ b/doc/APIfiles.html
@@ -0,0 +1,2868 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>List of Symbols per Module for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>List of Symbols per Module for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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><a name="DOCBparser" id="DOCBparser">Module DOCBparser</a>:</h2><p><a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-DOCBparser.html#docbFreeParserCtxt">docbFreeParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseChunk">docbParseChunk</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDoc">docbParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDocument">docbParseDocument</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbParserCtxt">docbParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a><br />
+<a href="html/libxml-DOCBparser.html#docbParserInput">docbParserInput</a><br />
+<a href="html/libxml-DOCBparser.html#docbParserInputPtr">docbParserInputPtr</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXHandler">docbSAXHandler</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXHandlerPtr">docbSAXHandlerPtr</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+</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_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_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 />
+<a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-HTMLparser.html#_htmlEntityDesc">_htmlEntityDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreateMemoryParserCtxt">htmlCreateMemoryParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFd">htmlCtxtReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFile">htmlCtxtReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadMemory">htmlCtxtReadMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReset">htmlCtxtReset</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtUseOptions">htmlCtxtUseOptions</a><br />
+<a href="html/libxml-HTMLparser.html#htmlDefaultSubelement">htmlDefaultSubelement</a><br />
+<a href="html/libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElemDescPtr">htmlElemDescPtr</a><br />
+<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-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityDesc">htmlEntityDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityDescPtr">htmlEntityDescPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlFreeParserCtxt">htmlFreeParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlHandleOmittedElem">htmlHandleOmittedElem</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsScriptAttribute">htmlIsScriptAttribute</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodePtr">htmlNodePtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseCharRef">htmlParseCharRef</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseChunk">htmlParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDoc">htmlParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDocument">htmlParseDocument</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserCtxt">htmlParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserInput">htmlParserInput</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserInputPtr">htmlParserInputPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserNodeInfo">htmlParserNodeInfo</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserOption">htmlParserOption</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadDoc">htmlReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFd">htmlReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFile">htmlReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadMemory">htmlReadMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlRequiredAttrs">htmlRequiredAttrs</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXHandler">htmlSAXHandler</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlStatus">htmlStatus</a><br />
+<a href="html/libxml-HTMLparser.html#htmlTagLookup">htmlTagLookup</a><br />
+</p><h2><a name="HTMLtree" id="HTMLtree">Module HTMLtree</a>:</h2><p><a href="html/libxml-HTMLtree.html#HTML_COMMENT_NODE">HTML_COMMENT_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_ENTITY_REF_NODE">HTML_ENTITY_REF_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PI_NODE">HTML_PI_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#HTML_TEXT_NODE">HTML_TEXT_NODE</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocContentDumpFormatOutput">htmlDocContentDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocContentDumpOutput">htmlDocContentDumpOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocDump">htmlDocDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocDumpMemory">htmlDocDumpMemory</a><br />
+<a href="html/libxml-HTMLtree.html#htmlGetMetaEncoding">htmlGetMetaEncoding</a><br />
+<a href="html/libxml-HTMLtree.html#htmlIsBooleanAttr">htmlIsBooleanAttr</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDoc">htmlNewDoc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDocNoDtD">htmlNewDocNoDtD</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-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-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+</p><h2><a name="SAX" id="SAX">Module SAX</a>:</h2><p><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-SAX.html#attributeDecl">attributeDecl</a><br />
+<a href="html/libxml-SAX.html#cdataBlock">cdataBlock</a><br />
+<a href="html/libxml-SAX.html#characters">characters</a><br />
+<a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
+<a href="html/libxml-SAX.html#comment">comment</a><br />
+<a href="html/libxml-SAX.html#elementDecl">elementDecl</a><br />
+<a href="html/libxml-SAX.html#endDocument">endDocument</a><br />
+<a href="html/libxml-SAX.html#endElement">endElement</a><br />
+<a href="html/libxml-SAX.html#entityDecl">entityDecl</a><br />
+<a href="html/libxml-SAX.html#externalSubset">externalSubset</a><br />
+<a href="html/libxml-SAX.html#getColumnNumber">getColumnNumber</a><br />
+<a href="html/libxml-SAX.html#getEntity">getEntity</a><br />
+<a href="html/libxml-SAX.html#getLineNumber">getLineNumber</a><br />
+<a href="html/libxml-SAX.html#getNamespace">getNamespace</a><br />
+<a href="html/libxml-SAX.html#getParameterEntity">getParameterEntity</a><br />
+<a href="html/libxml-SAX.html#getPublicId">getPublicId</a><br />
+<a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-SAX.html#globalNamespace">globalNamespace</a><br />
+<a href="html/libxml-SAX.html#hasExternalSubset">hasExternalSubset</a><br />
+<a href="html/libxml-SAX.html#hasInternalSubset">hasInternalSubset</a><br />
+<a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-SAX.html#initdocbDefaultSAXHandler">initdocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#inithtmlDefaultSAXHandler">inithtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#internalSubset">internalSubset</a><br />
+<a href="html/libxml-SAX.html#isStandalone">isStandalone</a><br />
+<a href="html/libxml-SAX.html#namespaceDecl">namespaceDecl</a><br />
+<a href="html/libxml-SAX.html#notationDecl">notationDecl</a><br />
+<a href="html/libxml-SAX.html#processingInstruction">processingInstruction</a><br />
+<a href="html/libxml-SAX.html#reference">reference</a><br />
+<a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
+<a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-SAX.html#setNamespace">setNamespace</a><br />
+<a href="html/libxml-SAX.html#startDocument">startDocument</a><br />
+<a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-SAX.html#unparsedEntityDecl">unparsedEntityDecl</a><br />
+</p><h2><a name="SAX2" id="SAX2">Module SAX2</a>:</h2><p><a href="html/libxml-SAX2.html#docbDefaultSAXHandlerInit">docbDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-SAX2.html#htmlDefaultSAXHandlerInit">htmlDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-SAX2.html#xmlDefaultSAXHandlerInit">xmlDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2AttributeDecl">xmlSAX2AttributeDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2CDataBlock">xmlSAX2CDataBlock</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Characters">xmlSAX2Characters</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2CheckNamespace">xmlSAX2CheckNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Comment">xmlSAX2Comment</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ElementDecl">xmlSAX2ElementDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndDocument">xmlSAX2EndDocument</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElement">xmlSAX2EndElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElementNs">xmlSAX2EndElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EntityDecl">xmlSAX2EntityDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ExternalSubset">xmlSAX2ExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetColumnNumber">xmlSAX2GetColumnNumber</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetEntity">xmlSAX2GetEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetLineNumber">xmlSAX2GetLineNumber</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetNamespace">xmlSAX2GetNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetParameterEntity">xmlSAX2GetParameterEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetPublicId">xmlSAX2GetPublicId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GlobalNamespace">xmlSAX2GlobalNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2HasExternalSubset">xmlSAX2HasExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2HasInternalSubset">xmlSAX2HasInternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDocbDefaultSAXHandler">xmlSAX2InitDocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitHtmlDefaultSAXHandler">xmlSAX2InitHtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InternalSubset">xmlSAX2InternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IsStandalone">xmlSAX2IsStandalone</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2NamespaceDecl">xmlSAX2NamespaceDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2NotationDecl">xmlSAX2NotationDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ProcessingInstruction">xmlSAX2ProcessingInstruction</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Reference">xmlSAX2Reference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetNamespace">xmlSAX2SetNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartDocument">xmlSAX2StartDocument</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2UnparsedEntityDecl">xmlSAX2UnparsedEntityDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXVersion">xmlSAXVersion</a><br />
+</p><h2><a name="c14n" id="c14n">Module c14n</a>:</h2><p><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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-c14n.html#xmlC14NIsVisibleCallback">xmlC14NIsVisibleCallback</a><br />
+</p><h2><a name="catalog" id="catalog">Module catalog</a>:</h2><p><a href="html/libxml-catalog.html#XML_CATALOGS_NAMESPACE">XML_CATALOGS_NAMESPACE</a><br />
+<a href="html/libxml-catalog.html#XML_CATALOG_PI">XML_CATALOG_PI</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_ALLOW_ALL">XML_CATA_ALLOW_ALL</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_ALLOW_DOCUMENT">XML_CATA_ALLOW_DOCUMENT</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_ALLOW_GLOBAL">XML_CATA_ALLOW_GLOBAL</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_ALLOW_NONE">XML_CATA_ALLOW_NONE</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_PREFER_NONE">XML_CATA_PREFER_NONE</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_PREFER_PUBLIC">XML_CATA_PREFER_PUBLIC</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_PREFER_SYSTEM">XML_CATA_PREFER_SYSTEM</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogDump">xmlACatalogDump</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolvePublic">xmlACatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveSystem">xmlACatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveURI">xmlACatalogResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalog">xmlCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAllow">xmlCatalogAllow</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogCleanup">xmlCatalogCleanup</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogConvert">xmlCatalogConvert</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogDump">xmlCatalogDump</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogFreeLocal">xmlCatalogFreeLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetPublic">xmlCatalogGetPublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetSystem">xmlCatalogGetSystem</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogIsEmpty">xmlCatalogIsEmpty</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogPrefer">xmlCatalogPrefer</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolve">xmlCatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolvePublic">xmlCatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveSystem">xmlCatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveURI">xmlCatalogResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</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-catalog.html#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlFreeCatalog">xmlFreeCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlNewCatalog">xmlNewCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlParseCatalogFile">xmlParseCatalogFile</a><br />
+</p><h2><a name="chvalid" id="chvalid">Module chvalid</a>:</h2><p><a href="html/libxml-chvalid.html#_xmlChLRange">_xmlChLRange</a><br />
+<a href="html/libxml-chvalid.html#_xmlChRangeGroup">_xmlChRangeGroup</a><br />
+<a href="html/libxml-chvalid.html#_xmlChSRange">_xmlChSRange</a><br />
+<a href="html/libxml-chvalid.html#xmlChLRange">xmlChLRange</a><br />
+<a href="html/libxml-chvalid.html#xmlChLRangePtr">xmlChLRangePtr</a><br />
+<a href="html/libxml-chvalid.html#xmlChRangeGroup">xmlChRangeGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlChRangeGroupPtr">xmlChRangeGroupPtr</a><br />
+<a href="html/libxml-chvalid.html#xmlChSRange">xmlChSRange</a><br />
+<a href="html/libxml-chvalid.html#xmlChSRangePtr">xmlChSRangePtr</a><br />
+<a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar">xmlIsBaseChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseCharGroup">xmlIsBaseCharGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseCharQ">xmlIsBaseCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar_ch">xmlIsBaseChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank">xmlIsBlank</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlankQ">xmlIsBlankQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank_ch">xmlIsBlank_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar">xmlIsChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCharGroup">xmlIsCharGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCharQ">xmlIsCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar_ch">xmlIsChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombining">xmlIsCombining</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombiningGroup">xmlIsCombiningGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombiningQ">xmlIsCombiningQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit">xmlIsDigit</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigitGroup">xmlIsDigitGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigitQ">xmlIsDigitQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit_ch">xmlIsDigit_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender">xmlIsExtender</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtenderGroup">xmlIsExtenderGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtenderQ">xmlIsExtenderQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender_ch">xmlIsExtender_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographic">xmlIsIdeographic</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographicGroup">xmlIsIdeographicGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographicQ">xmlIsIdeographicQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidCharQ">xmlIsPubidCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar_ch">xmlIsPubidChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar_tab">xmlIsPubidChar_tab</a><br />
+</p><h2><a name="debugXML" id="debugXML">Module debugXML</a>:</h2><p><a href="html/libxml-debugXML.html#_xmlShellCtxt">_xmlShellCtxt</a><br />
+<a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttr">xmlDebugDumpAttr</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDTD">xmlDebugDumpDTD</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocument">xmlDebugDumpDocument</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpEntities">xmlDebugDumpEntities</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpString">xmlDebugDumpString</a><br />
+<a href="html/libxml-debugXML.html#xmlLsCountNode">xmlLsCountNode</a><br />
+<a href="html/libxml-debugXML.html#xmlLsOneNode">xmlLsOneNode</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<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 />
+<a href="html/libxml-debugXML.html#xmlShellCtxt">xmlShellCtxt</a><br />
+<a href="html/libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintNode">xmlShellPrintNode</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathError">xmlShellPrintXPathError</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathResult">xmlShellPrintXPathResult</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a><br />
+<a href="html/libxml-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+<a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+</p><h2><a name="dict" id="dict">Module dict</a>:</h2><p><a href="html/libxml-dict.html#xmlDict">xmlDict</a><br />
+<a href="html/libxml-dict.html#xmlDictCreate">xmlDictCreate</a><br />
+<a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+<a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</a><br />
+<a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
+<a href="html/libxml-dict.html#xmlDictPtr">xmlDictPtr</a><br />
+<a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+<a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
+</p><h2><a name="encoding" id="encoding">Module encoding</a>:</h2><p><a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_2022_JP">XML_CHAR_ENCODING_2022_JP</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_1">XML_CHAR_ENCODING_8859_1</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_2">XML_CHAR_ENCODING_8859_2</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_3">XML_CHAR_ENCODING_8859_3</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_4">XML_CHAR_ENCODING_8859_4</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_5">XML_CHAR_ENCODING_8859_5</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_6">XML_CHAR_ENCODING_8859_6</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_7">XML_CHAR_ENCODING_8859_7</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_8">XML_CHAR_ENCODING_8859_8</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_9">XML_CHAR_ENCODING_8859_9</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_ASCII">XML_CHAR_ENCODING_ASCII</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_EBCDIC">XML_CHAR_ENCODING_EBCDIC</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_ERROR">XML_CHAR_ENCODING_ERROR</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_EUC_JP">XML_CHAR_ENCODING_EUC_JP</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_NONE">XML_CHAR_ENCODING_NONE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_SHIFT_JIS">XML_CHAR_ENCODING_SHIFT_JIS</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS2">XML_CHAR_ENCODING_UCS2</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS4BE">XML_CHAR_ENCODING_UCS4BE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS4LE">XML_CHAR_ENCODING_UCS4LE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS4_2143">XML_CHAR_ENCODING_UCS4_2143</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS4_3412">XML_CHAR_ENCODING_UCS4_3412</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UTF16BE">XML_CHAR_ENCODING_UTF16BE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UTF16LE">XML_CHAR_ENCODING_UTF16LE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UTF8">XML_CHAR_ENCODING_UTF8</a><br />
+<a href="html/libxml-encoding.html#_xmlCharEncodingHandler">_xmlCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
+<a href="html/libxml-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncCloseFunc">xmlCharEncCloseFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</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-encoding.html#xmlCleanupCharEncodingHandlers">xmlCleanupCharEncodingHandlers</a><br />
+<a href="html/libxml-encoding.html#xmlCleanupEncodingAliases">xmlCleanupEncodingAliases</a><br />
+<a href="html/libxml-encoding.html#xmlDelEncodingAlias">xmlDelEncodingAlias</a><br />
+<a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+<a href="html/libxml-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-encoding.html#xmlGetEncodingAlias">xmlGetEncodingAlias</a><br />
+<a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-encoding.html#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a><br />
+</p><h2><a name="entities" id="entities">Module entities</a>:</h2><p><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-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 />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-entities.html#xmlAddDocEntity">xmlAddDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlAddDtdEntity">xmlAddDtdEntity</a><br />
+<a href="html/libxml-entities.html#xmlCleanupPredefinedEntities">xmlCleanupPredefinedEntities</a><br />
+<a href="html/libxml-entities.html#xmlCopyEntitiesTable">xmlCopyEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlDumpEntitiesTable">xmlDumpEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlDumpEntityDecl">xmlDumpEntityDecl</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-entities.html#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a><br />
+<a href="html/libxml-entities.html#xmlEntitiesTable">xmlEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a><br />
+<a href="html/libxml-entities.html#xmlEntityType">xmlEntityType</a><br />
+<a href="html/libxml-entities.html#xmlFreeEntitiesTable">xmlFreeEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetDtdEntity">xmlGetDtdEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetPredefinedEntity">xmlGetPredefinedEntity</a><br />
+<a href="html/libxml-entities.html#xmlInitializePredefinedEntities">xmlInitializePredefinedEntities</a><br />
+</p><h2><a name="globals" id="globals">Module globals</a>:</h2><p><a href="html/libxml-globals.html#_xmlGlobalState">_xmlGlobalState</a><br />
+<a href="html/libxml-globals.html#docbDefaultSAXHandler">docbDefaultSAXHandler</a><br />
+<a href="html/libxml-globals.html#htmlDefaultSAXHandler">htmlDefaultSAXHandler</a><br />
+<a href="html/libxml-globals.html#oldXMLWDcompatibility">oldXMLWDcompatibility</a><br />
+<a href="html/libxml-globals.html#xmlBufferAllocScheme">xmlBufferAllocScheme</a><br />
+<a href="html/libxml-globals.html#xmlCleanupGlobals">xmlCleanupGlobals</a><br />
+<a href="html/libxml-globals.html#xmlDefaultBufferSize">xmlDefaultBufferSize</a><br />
+<a href="html/libxml-globals.html#xmlDefaultSAXHandler">xmlDefaultSAXHandler</a><br />
+<a href="html/libxml-globals.html#xmlDefaultSAXLocator">xmlDefaultSAXLocator</a><br />
+<a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlDeregisterNodeDefaultValue">xmlDeregisterNodeDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a><br />
+<a href="html/libxml-globals.html#xmlDoValidityCheckingDefaultValue">xmlDoValidityCheckingDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlFree">xmlFree</a><br />
+<a href="html/libxml-globals.html#xmlGenericError">xmlGenericError</a><br />
+<a href="html/libxml-globals.html#xmlGenericErrorContext">xmlGenericErrorContext</a><br />
+<a href="html/libxml-globals.html#xmlGetWarningsDefaultValue">xmlGetWarningsDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlGlobalState">xmlGlobalState</a><br />
+<a href="html/libxml-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a><br />
+<a href="html/libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a><br />
+<a href="html/libxml-globals.html#xmlInitGlobals">xmlInitGlobals</a><br />
+<a href="html/libxml-globals.html#xmlInitializeGlobalState">xmlInitializeGlobalState</a><br />
+<a href="html/libxml-globals.html#xmlKeepBlanksDefaultValue">xmlKeepBlanksDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlLastError">xmlLastError</a><br />
+<a href="html/libxml-globals.html#xmlLineNumbersDefaultValue">xmlLineNumbersDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlLoadExtDtdDefaultValue">xmlLoadExtDtdDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlMalloc">xmlMalloc</a><br />
+<a href="html/libxml-globals.html#xmlMallocAtomic">xmlMallocAtomic</a><br />
+<a href="html/libxml-globals.html#xmlMemStrdup">xmlMemStrdup</a><br />
+<a href="html/libxml-globals.html#xmlParserDebugEntities">xmlParserDebugEntities</a><br />
+<a href="html/libxml-globals.html#xmlParserVersion">xmlParserVersion</a><br />
+<a href="html/libxml-globals.html#xmlPedanticParserDefaultValue">xmlPedanticParserDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlRealloc">xmlRealloc</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeDefaultValue">xmlRegisterNodeDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a><br />
+<a href="html/libxml-globals.html#xmlSaveNoEmptyTags">xmlSaveNoEmptyTags</a><br />
+<a href="html/libxml-globals.html#xmlStructuredError">xmlStructuredError</a><br />
+<a href="html/libxml-globals.html#xmlSubstituteEntitiesDefaultValue">xmlSubstituteEntitiesDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefBufferAllocScheme">xmlThrDefBufferAllocScheme</a><br />
+<a href="html/libxml-globals.html#xmlThrDefDefaultBufferSize">xmlThrDefDefaultBufferSize</a><br />
+<a href="html/libxml-globals.html#xmlThrDefDeregisterNodeDefault">xmlThrDefDeregisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlThrDefDoValidityCheckingDefaultValue">xmlThrDefDoValidityCheckingDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefGetWarningsDefaultValue">xmlThrDefGetWarningsDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefIndentTreeOutput">xmlThrDefIndentTreeOutput</a><br />
+<a href="html/libxml-globals.html#xmlThrDefKeepBlanksDefaultValue">xmlThrDefKeepBlanksDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefLineNumbersDefaultValue">xmlThrDefLineNumbersDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefLoadExtDtdDefaultValue">xmlThrDefLoadExtDtdDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefParserDebugEntities">xmlThrDefParserDebugEntities</a><br />
+<a href="html/libxml-globals.html#xmlThrDefPedanticParserDefaultValue">xmlThrDefPedanticParserDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefRegisterNodeDefault">xmlThrDefRegisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSaveNoEmptyTags">xmlThrDefSaveNoEmptyTags</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSetGenericErrorFunc">xmlThrDefSetGenericErrorFunc</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSetStructuredErrorFunc">xmlThrDefSetStructuredErrorFunc</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSubstituteEntitiesDefaultValue">xmlThrDefSubstituteEntitiesDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a><br />
+<a href="html/libxml-globals.html#xmlTreeIndentString">xmlTreeIndentString</a><br />
+</p><h2><a name="hash" id="hash">Module hash</a>:</h2><p><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-hash.html#xmlHashCopier">xmlHashCopier</a><br />
+<a href="html/libxml-hash.html#xmlHashCopy">xmlHashCopy</a><br />
+<a href="html/libxml-hash.html#xmlHashCreate">xmlHashCreate</a><br />
+<a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
+<a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</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 />
+<a href="html/libxml-hash.html#xmlHashQLookup">xmlHashQLookup</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup2">xmlHashQLookup2</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup3">xmlHashQLookup3</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+<a href="html/libxml-hash.html#xmlHashSize">xmlHashSize</a><br />
+<a href="html/libxml-hash.html#xmlHashTable">xmlHashTable</a><br />
+<a href="html/libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+</p><h2><a name="list" id="list">Module list</a>:</h2><p><a href="html/libxml-list.html#xmlLink">xmlLink</a><br />
+<a href="html/libxml-list.html#xmlLinkGetData">xmlLinkGetData</a><br />
+<a href="html/libxml-list.html#xmlLinkPtr">xmlLinkPtr</a><br />
+<a href="html/libxml-list.html#xmlList">xmlList</a><br />
+<a href="html/libxml-list.html#xmlListAppend">xmlListAppend</a><br />
+<a href="html/libxml-list.html#xmlListClear">xmlListClear</a><br />
+<a href="html/libxml-list.html#xmlListCopy">xmlListCopy</a><br />
+<a href="html/libxml-list.html#xmlListCreate">xmlListCreate</a><br />
+<a href="html/libxml-list.html#xmlListDataCompare">xmlListDataCompare</a><br />
+<a href="html/libxml-list.html#xmlListDeallocator">xmlListDeallocator</a><br />
+<a href="html/libxml-list.html#xmlListDelete">xmlListDelete</a><br />
+<a href="html/libxml-list.html#xmlListDup">xmlListDup</a><br />
+<a href="html/libxml-list.html#xmlListEmpty">xmlListEmpty</a><br />
+<a href="html/libxml-list.html#xmlListEnd">xmlListEnd</a><br />
+<a href="html/libxml-list.html#xmlListFront">xmlListFront</a><br />
+<a href="html/libxml-list.html#xmlListInsert">xmlListInsert</a><br />
+<a href="html/libxml-list.html#xmlListMerge">xmlListMerge</a><br />
+<a href="html/libxml-list.html#xmlListPopBack">xmlListPopBack</a><br />
+<a href="html/libxml-list.html#xmlListPopFront">xmlListPopFront</a><br />
+<a href="html/libxml-list.html#xmlListPtr">xmlListPtr</a><br />
+<a href="html/libxml-list.html#xmlListPushBack">xmlListPushBack</a><br />
+<a href="html/libxml-list.html#xmlListPushFront">xmlListPushFront</a><br />
+<a href="html/libxml-list.html#xmlListRemoveAll">xmlListRemoveAll</a><br />
+<a href="html/libxml-list.html#xmlListRemoveFirst">xmlListRemoveFirst</a><br />
+<a href="html/libxml-list.html#xmlListRemoveLast">xmlListRemoveLast</a><br />
+<a href="html/libxml-list.html#xmlListReverse">xmlListReverse</a><br />
+<a href="html/libxml-list.html#xmlListReverseSearch">xmlListReverseSearch</a><br />
+<a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<a href="html/libxml-list.html#xmlListSearch">xmlListSearch</a><br />
+<a href="html/libxml-list.html#xmlListSize">xmlListSize</a><br />
+<a href="html/libxml-list.html#xmlListSort">xmlListSort</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
+</p><h2><a name="nanoftp" id="nanoftp">Module nanoftp</a>:</h2><p><a href="html/libxml-nanoftp.html#ftpDataCallback">ftpDataCallback</a><br />
+<a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCleanup">xmlNanoFTPCleanup</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPClose">xmlNanoFTPClose</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCloseConnection">xmlNanoFTPCloseConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnect">xmlNanoFTPConnect</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPNewCtxt">xmlNanoFTPNewCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPOpen">xmlNanoFTPOpen</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPQuit">xmlNanoFTPQuit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+</p><h2><a name="nanohttp" id="nanohttp">Module nanohttp</a>:</h2><p><a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPCleanup">xmlNanoHTTPCleanup</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPClose">xmlNanoHTTPClose</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPEncoding">xmlNanoHTTPEncoding</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</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#xmlNanoHTTPMimeType">xmlNanoHTTPMimeType</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#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRedir">xmlNanoHTTPRedir</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+</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_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 />
+<a href="html/libxml-parser.html#XML_PARSER_CONTENT">XML_PARSER_CONTENT</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_DTD">XML_PARSER_DTD</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_END_TAG">XML_PARSER_END_TAG</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_ENTITY_DECL">XML_PARSER_ENTITY_DECL</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_ENTITY_VALUE">XML_PARSER_ENTITY_VALUE</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_EOF">XML_PARSER_EOF</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_EPILOG">XML_PARSER_EPILOG</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_IGNORE">XML_PARSER_IGNORE</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_MISC">XML_PARSER_MISC</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_PI">XML_PARSER_PI</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_PROLOG">XML_PARSER_PROLOG</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_PUBLIC_LITERAL">XML_PARSER_PUBLIC_LITERAL</a><br />
+<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_DTDATTR">XML_PARSE_DTDATTR</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_DTDLOAD">XML_PARSE_DTDLOAD</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_DTDVALID">XML_PARSE_DTDVALID</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOBLANKS">XML_PARSE_NOBLANKS</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOCDATA">XML_PARSE_NOCDATA</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NODICT">XML_PARSE_NODICT</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOENT">XML_PARSE_NOENT</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOERROR">XML_PARSE_NOERROR</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NONET">XML_PARSE_NONET</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOWARNING">XML_PARSE_NOWARNING</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NSCLEAN">XML_PARSE_NSCLEAN</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_PEDANTIC">XML_PARSE_PEDANTIC</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_RECOVER">XML_PARSE_RECOVER</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_SAX1">XML_PARSE_SAX1</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_XINCLUDE">XML_PARSE_XINCLUDE</a><br />
+<a href="html/libxml-parser.html#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a><br />
+<a href="html/libxml-parser.html#XML_SKIP_IDS">XML_SKIP_IDS</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-parser.html#_xmlParserNodeInfo">_xmlParserNodeInfo</a><br />
+<a href="html/libxml-parser.html#_xmlParserNodeInfoSeq">_xmlParserNodeInfoSeq</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-parser.html#_xmlSAXLocator">_xmlSAXLocator</a><br />
+<a href="html/libxml-parser.html#attributeDeclSAXFunc">attributeDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-parser.html#cdataBlockSAXFunc">cdataBlockSAXFunc</a><br />
+<a href="html/libxml-parser.html#charactersSAXFunc">charactersSAXFunc</a><br />
+<a href="html/libxml-parser.html#commentSAXFunc">commentSAXFunc</a><br />
+<a href="html/libxml-parser.html#elementDeclSAXFunc">elementDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#endDocumentSAXFunc">endDocumentSAXFunc</a><br />
+<a href="html/libxml-parser.html#endElementNsSAX2Func">endElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#endElementSAXFunc">endElementSAXFunc</a><br />
+<a href="html/libxml-parser.html#entityDeclSAXFunc">entityDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<a href="html/libxml-parser.html#externalSubsetSAXFunc">externalSubsetSAXFunc</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-parser.html#getEntitySAXFunc">getEntitySAXFunc</a><br />
+<a href="html/libxml-parser.html#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a><br />
+<a href="html/libxml-parser.html#hasExternalSubsetSAXFunc">hasExternalSubsetSAXFunc</a><br />
+<a href="html/libxml-parser.html#hasInternalSubsetSAXFunc">hasInternalSubsetSAXFunc</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-parser.html#internalSubsetSAXFunc">internalSubsetSAXFunc</a><br />
+<a href="html/libxml-parser.html#isStandaloneSAXFunc">isStandaloneSAXFunc</a><br />
+<a href="html/libxml-parser.html#notationDeclSAXFunc">notationDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#processingInstructionSAXFunc">processingInstructionSAXFunc</a><br />
+<a href="html/libxml-parser.html#referenceSAXFunc">referenceSAXFunc</a><br />
+<a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-parser.html#startDocumentSAXFunc">startDocumentSAXFunc</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+<a href="html/libxml-parser.html#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
+<a href="html/libxml-parser.html#xmlClearParserCtxt">xmlClearParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreateDocParserCtxt">xmlCreateDocParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadDoc">xmlCtxtReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFile">xmlCtxtReadFile</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadMemory">xmlCtxtReadMemory</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReset">xmlCtxtReset</a><br />
+<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#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#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
+<a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
+<a href="html/libxml-parser.html#xmlInitParserCtxt">xmlInitParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-parser.html#xmlNewParserCtxt">xmlNewParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseDTD">xmlParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlParseDoc">xmlParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseFile">xmlParseFile</a><br />
+<a href="html/libxml-parser.html#xmlParseMemory">xmlParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+<a href="html/libxml-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+<a href="html/libxml-parser.html#xmlParserInputState">xmlParserInputState</a><br />
+<a href="html/libxml-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserNodeInfoPtr">xmlParserNodeInfoPtr</a><br />
+<a href="html/libxml-parser.html#xmlParserNodeInfoSeq">xmlParserNodeInfoSeq</a><br />
+<a href="html/libxml-parser.html#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a><br />
+<a href="html/libxml-parser.html#xmlParserOption">xmlParserOption</a><br />
+<a href="html/libxml-parser.html#xmlPedanticParserDefault">xmlPedanticParserDefault</a><br />
+<a href="html/libxml-parser.html#xmlReadDoc">xmlReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
+<a href="html/libxml-parser.html#xmlReadFile">xmlReadFile</a><br />
+<a href="html/libxml-parser.html#xmlReadIO">xmlReadIO</a><br />
+<a href="html/libxml-parser.html#xmlReadMemory">xmlReadMemory</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 />
+<a href="html/libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a><br />
+<a href="html/libxml-parser.html#xmlSAXHandlerV1Ptr">xmlSAXHandlerV1Ptr</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDTD">xmlSAXParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlSetFeature">xmlSetFeature</a><br />
+<a href="html/libxml-parser.html#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a><br />
+<a href="html/libxml-parser.html#xmlStopParser">xmlStopParser</a><br />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+</p><h2><a name="parserInternals" id="parserInternals">Module parserInternals</a>:</h2><p><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+<a href="html/libxml-parserInternals.html#IS_BASECHAR">IS_BASECHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_BLANK">IS_BLANK</a><br />
+<a href="html/libxml-parserInternals.html#IS_BLANK_CH">IS_BLANK_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_BYTE_CHAR">IS_BYTE_CHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_CHAR_CH">IS_CHAR_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_COMBINING">IS_COMBINING</a><br />
+<a href="html/libxml-parserInternals.html#IS_COMBINING_CH">IS_COMBINING_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_DIGIT">IS_DIGIT</a><br />
+<a href="html/libxml-parserInternals.html#IS_DIGIT_CH">IS_DIGIT_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+<a href="html/libxml-parserInternals.html#IS_EXTENDER_CH">IS_EXTENDER_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a><br />
+<a href="html/libxml-parserInternals.html#IS_LETTER">IS_LETTER</a><br />
+<a href="html/libxml-parserInternals.html#IS_LETTER_CH">IS_LETTER_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_PUBIDCHAR">IS_PUBIDCHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a><br />
+<a href="html/libxml-parserInternals.html#MOVETO_ENDTAG">MOVETO_ENDTAG</a><br />
+<a href="html/libxml-parserInternals.html#MOVETO_STARTTAG">MOVETO_STARTTAG</a><br />
+<a href="html/libxml-parserInternals.html#SKIP_EOL">SKIP_EOL</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a><br />
+<a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-parserInternals.html#inputPop">inputPop</a><br />
+<a href="html/libxml-parserInternals.html#inputPush">inputPush</a><br />
+<a href="html/libxml-parserInternals.html#namePop">namePop</a><br />
+<a href="html/libxml-parserInternals.html#namePush">namePush</a><br />
+<a href="html/libxml-parserInternals.html#nodePop">nodePop</a><br />
+<a href="html/libxml-parserInternals.html#nodePush">nodePush</a><br />
+<a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-parserInternals.html#xmlCopyChar">xmlCopyChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlCopyCharMultiByte">xmlCopyCharMultiByte</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateFileParserCtxt">xmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateMemoryParserCtxt">xmlCreateMemoryParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlErrMemory">xmlErrMemory</a><br />
+<a href="html/libxml-parserInternals.html#xmlFreeInputStream">xmlFreeInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlIsLetter">xmlIsLetter</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 />
+<a href="html/libxml-parserInternals.html#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputFromFile">xmlNewInputFromFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputStream">xmlNewInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewStringInputStream">xmlNewStringInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNextChar">xmlNextChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseContent">xmlParseContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncName">xmlParseEncName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEndTag">xmlParseEndTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMisc">xmlParseMisc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNmtoken">xmlParseNmtoken</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePI">xmlParsePI</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePITarget">xmlParsePITarget</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePubidLiteral">xmlParsePubidLiteral</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSystemLiteral">xmlParseSystemLiteral</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionInfo">xmlParseVersionInfo</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionNum">xmlParseVersionNum</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseXMLDecl">xmlParseXMLDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserInputShrink">xmlParserInputShrink</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserMaxDepth">xmlParserMaxDepth</a><br />
+<a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-parserInternals.html#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringComment">xmlStringComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringText">xmlStringText</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringTextNoenc">xmlStringTextNoenc</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchEncoding">xmlSwitchEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchToEncoding">xmlSwitchToEncoding</a><br />
+</p><h2><a name="pattern" id="pattern">Module pattern</a>:</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#xmlPattern">xmlPattern</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
+<a href="html/libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a><br />
+<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+</p><h2><a name="relaxng" id="relaxng">Module relaxng</a>:</h2><p><a href="html/libxml-relaxng.html#XML_RELAXNGP_CRNG">XML_RELAXNGP_CRNG</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNGP_FREE_DOC">XML_RELAXNGP_FREE_DOC</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNGP_NONE">XML_RELAXNGP_NONE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTREXTRANS">XML_RELAXNG_ERR_ATTREXTRANS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTRNAME">XML_RELAXNG_ERR_ATTRNAME</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTRNONS">XML_RELAXNG_ERR_ATTRNONS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTRVALID">XML_RELAXNG_ERR_ATTRVALID</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTRWRONGNS">XML_RELAXNG_ERR_ATTRWRONGNS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_CONTENTVALID">XML_RELAXNG_ERR_CONTENTVALID</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_DATAELEM">XML_RELAXNG_ERR_DATAELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_DATATYPE">XML_RELAXNG_ERR_DATATYPE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_DUPID">XML_RELAXNG_ERR_DUPID</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMEXTRANS">XML_RELAXNG_ERR_ELEMEXTRANS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMNAME">XML_RELAXNG_ERR_ELEMNAME</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMNONS">XML_RELAXNG_ERR_ELEMNONS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMNOTEMPTY">XML_RELAXNG_ERR_ELEMNOTEMPTY</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMWRONG">XML_RELAXNG_ERR_ELEMWRONG</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMWRONGNS">XML_RELAXNG_ERR_ELEMWRONGNS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_EXTRACONTENT">XML_RELAXNG_ERR_EXTRACONTENT</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_EXTRADATA">XML_RELAXNG_ERR_EXTRADATA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INTEREXTRA">XML_RELAXNG_ERR_INTEREXTRA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INTERNAL">XML_RELAXNG_ERR_INTERNAL</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INTERNODATA">XML_RELAXNG_ERR_INTERNODATA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INTERSEQ">XML_RELAXNG_ERR_INTERSEQ</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INVALIDATTR">XML_RELAXNG_ERR_INVALIDATTR</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LACKDATA">XML_RELAXNG_ERR_LACKDATA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LIST">XML_RELAXNG_ERR_LIST</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LISTELEM">XML_RELAXNG_ERR_LISTELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LISTEMPTY">XML_RELAXNG_ERR_LISTEMPTY</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LISTEXTRA">XML_RELAXNG_ERR_LISTEXTRA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_MEMORY">XML_RELAXNG_ERR_MEMORY</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NODEFINE">XML_RELAXNG_ERR_NODEFINE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NOELEM">XML_RELAXNG_ERR_NOELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NOGRAMMAR">XML_RELAXNG_ERR_NOGRAMMAR</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NOSTATE">XML_RELAXNG_ERR_NOSTATE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NOTELEM">XML_RELAXNG_ERR_NOTELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_TEXTWRONG">XML_RELAXNG_ERR_TEXTWRONG</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_TYPE">XML_RELAXNG_ERR_TYPE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_TYPECMP">XML_RELAXNG_ERR_TYPECMP</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_TYPEVAL">XML_RELAXNG_ERR_TYPEVAL</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_VALELEM">XML_RELAXNG_ERR_VALELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_VALUE">XML_RELAXNG_ERR_VALUE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_OK">XML_RELAXNG_OK</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNG">xmlRelaxNG</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGCleanupTypes">xmlRelaxNGCleanupTypes</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGDump">xmlRelaxNGDump</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGDumpTree">xmlRelaxNGDumpTree</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFree">xmlRelaxNGFree</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFreeParserCtxt">xmlRelaxNGFreeParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFreeValidCtxt">xmlRelaxNGFreeValidCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewValidCtxt">xmlRelaxNGNewValidCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParserCtxt">xmlRelaxNGParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParserFlag">xmlRelaxNGParserFlag</a><br />
+<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#xmlRelaxNGValidCtxt">xmlRelaxNGValidCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidErr">xmlRelaxNGValidErr</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 />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</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-relaxng.html#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a><br />
+</p><h2><a name="schemasInternals" id="schemasInternals">Module schemasInternals</a>:</h2><p><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_LAX">XML_SCHEMAS_ANYATTR_LAX</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_SKIP">XML_SCHEMAS_ANYATTR_SKIP</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_STRICT">XML_SCHEMAS_ANYATTR_STRICT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTR_NSDEFAULT">XML_SCHEMAS_ATTR_NSDEFAULT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_ABSTRACT">XML_SCHEMAS_ELEM_ABSTRACT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_DEFAULT">XML_SCHEMAS_ELEM_DEFAULT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_FIXED">XML_SCHEMAS_ELEM_FIXED</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_GLOBAL">XML_SCHEMAS_ELEM_GLOBAL</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_NILLABLE">XML_SCHEMAS_ELEM_NILLABLE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_NSDEFAULT">XML_SCHEMAS_ELEM_NSDEFAULT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_REF">XML_SCHEMAS_ELEM_REF</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_TOPLEVEL">XML_SCHEMAS_ELEM_TOPLEVEL</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_COLLAPSE">XML_SCHEMAS_FACET_COLLAPSE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_PRESERVE">XML_SCHEMAS_FACET_PRESERVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_REPLACE">XML_SCHEMAS_FACET_REPLACE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_UNKNOWN">XML_SCHEMAS_FACET_UNKNOWN</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ATTR">XML_SCHEMAS_QUALIF_ATTR</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ELEM">XML_SCHEMAS_QUALIF_ELEM</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_MIXED">XML_SCHEMAS_TYPE_MIXED</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_ANY">XML_SCHEMA_CONTENT_ANY</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_BASIC">XML_SCHEMA_CONTENT_BASIC</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_ELEMENTS">XML_SCHEMA_CONTENT_ELEMENTS</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_EMPTY">XML_SCHEMA_CONTENT_EMPTY</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_MIXED">XML_SCHEMA_CONTENT_MIXED</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS">XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_SIMPLE">XML_SCHEMA_CONTENT_SIMPLE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_UNKNOWN">XML_SCHEMA_CONTENT_UNKNOWN</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_ENUMERATION">XML_SCHEMA_FACET_ENUMERATION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_FRACTIONDIGITS">XML_SCHEMA_FACET_FRACTIONDIGITS</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_LENGTH">XML_SCHEMA_FACET_LENGTH</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MAXEXCLUSIVE">XML_SCHEMA_FACET_MAXEXCLUSIVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MAXINCLUSIVE">XML_SCHEMA_FACET_MAXINCLUSIVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MAXLENGTH">XML_SCHEMA_FACET_MAXLENGTH</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MINEXCLUSIVE">XML_SCHEMA_FACET_MINEXCLUSIVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MININCLUSIVE">XML_SCHEMA_FACET_MININCLUSIVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MINLENGTH">XML_SCHEMA_FACET_MINLENGTH</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_PATTERN">XML_SCHEMA_FACET_PATTERN</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_TOTALDIGITS">XML_SCHEMA_FACET_TOTALDIGITS</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_WHITESPACE">XML_SCHEMA_FACET_WHITESPACE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ALL">XML_SCHEMA_TYPE_ALL</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ANY">XML_SCHEMA_TYPE_ANY</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ATTRIBUTE">XML_SCHEMA_TYPE_ATTRIBUTE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ATTRIBUTEGROUP">XML_SCHEMA_TYPE_ATTRIBUTEGROUP</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_BASIC">XML_SCHEMA_TYPE_BASIC</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_CHOICE">XML_SCHEMA_TYPE_CHOICE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_COMPLEX">XML_SCHEMA_TYPE_COMPLEX</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_COMPLEX_CONTENT">XML_SCHEMA_TYPE_COMPLEX_CONTENT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ELEMENT">XML_SCHEMA_TYPE_ELEMENT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_EXTENSION">XML_SCHEMA_TYPE_EXTENSION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_FACET">XML_SCHEMA_TYPE_FACET</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_GROUP">XML_SCHEMA_TYPE_GROUP</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_LIST">XML_SCHEMA_TYPE_LIST</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_NOTATION">XML_SCHEMA_TYPE_NOTATION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_RESTRICTION">XML_SCHEMA_TYPE_RESTRICTION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_SEQUENCE">XML_SCHEMA_TYPE_SEQUENCE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_SIMPLE">XML_SCHEMA_TYPE_SIMPLE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_SIMPLE_CONTENT">XML_SCHEMA_TYPE_SIMPLE_CONTENT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_UNION">XML_SCHEMA_TYPE_UNION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_UR">XML_SCHEMA_TYPE_UR</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaAnnot">_xmlSchemaAnnot</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaAttribute">_xmlSchemaAttribute</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaAttributeGroup">_xmlSchemaAttributeGroup</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaElement">_xmlSchemaElement</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaFacet">_xmlSchemaFacet</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaNotation">_xmlSchemaNotation</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaType">_xmlSchemaType</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAnnot">xmlSchemaAnnot</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAttribute">xmlSchemaAttribute</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAttributeGroup">xmlSchemaAttributeGroup</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAttributeGroupPtr">xmlSchemaAttributeGroupPtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAttributePtr">xmlSchemaAttributePtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaContentType">xmlSchemaContentType</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaElement">xmlSchemaElement</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaElementPtr">xmlSchemaElementPtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaFacet">xmlSchemaFacet</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaFreeType">xmlSchemaFreeType</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaNotation">xmlSchemaNotation</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaNotationPtr">xmlSchemaNotationPtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaType">xmlSchemaType</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaTypeType">xmlSchemaTypeType</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaVal">xmlSchemaVal</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</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 />
+<a href="html/libxml-threads.html#xmlGetGlobalState">xmlGetGlobalState</a><br />
+<a href="html/libxml-threads.html#xmlGetThreadId">xmlGetThreadId</a><br />
+<a href="html/libxml-threads.html#xmlInitThreads">xmlInitThreads</a><br />
+<a href="html/libxml-threads.html#xmlIsMainThread">xmlIsMainThread</a><br />
+<a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
+<a href="html/libxml-threads.html#xmlMutex">xmlMutex</a><br />
+<a href="html/libxml-threads.html#xmlMutexLock">xmlMutexLock</a><br />
+<a href="html/libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a><br />
+<a href="html/libxml-threads.html#xmlMutexUnlock">xmlMutexUnlock</a><br />
+<a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+<a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+<a href="html/libxml-threads.html#xmlRMutex">xmlRMutex</a><br />
+<a href="html/libxml-threads.html#xmlRMutexLock">xmlRMutexLock</a><br />
+<a href="html/libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a><br />
+<a href="html/libxml-threads.html#xmlRMutexUnlock">xmlRMutexUnlock</a><br />
+<a href="html/libxml-threads.html#xmlUnlockLibrary">xmlUnlockLibrary</a><br />
+</p><h2><a name="tree" id="tree">Module tree</a>:</h2><p><a href="html/libxml-tree.html#BASE_BUFFER_SIZE">BASE_BUFFER_SIZE</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_CDATA">XML_ATTRIBUTE_CDATA</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_DECL">XML_ATTRIBUTE_DECL</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_ENTITIES">XML_ATTRIBUTE_ENTITIES</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_ENTITY">XML_ATTRIBUTE_ENTITY</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_ENUMERATION">XML_ATTRIBUTE_ENUMERATION</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_FIXED">XML_ATTRIBUTE_FIXED</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_ID">XML_ATTRIBUTE_ID</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_IDREF">XML_ATTRIBUTE_IDREF</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_IDREFS">XML_ATTRIBUTE_IDREFS</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_IMPLIED">XML_ATTRIBUTE_IMPLIED</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NMTOKEN">XML_ATTRIBUTE_NMTOKEN</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NMTOKENS">XML_ATTRIBUTE_NMTOKENS</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NODE">XML_ATTRIBUTE_NODE</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NONE">XML_ATTRIBUTE_NONE</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NOTATION">XML_ATTRIBUTE_NOTATION</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_REQUIRED">XML_ATTRIBUTE_REQUIRED</a><br />
+<a href="html/libxml-tree.html#XML_BUFFER_ALLOC_DOUBLEIT">XML_BUFFER_ALLOC_DOUBLEIT</a><br />
+<a href="html/libxml-tree.html#XML_BUFFER_ALLOC_EXACT">XML_BUFFER_ALLOC_EXACT</a><br />
+<a href="html/libxml-tree.html#XML_BUFFER_ALLOC_IMMUTABLE">XML_BUFFER_ALLOC_IMMUTABLE</a><br />
+<a href="html/libxml-tree.html#XML_CDATA_SECTION_NODE">XML_CDATA_SECTION_NODE</a><br />
+<a href="html/libxml-tree.html#XML_COMMENT_NODE">XML_COMMENT_NODE</a><br />
+<a href="html/libxml-tree.html#XML_DOCB_DOCUMENT_NODE">XML_DOCB_DOCUMENT_NODE</a><br />
+<a href="html/libxml-tree.html#XML_DOCUMENT_FRAG_NODE">XML_DOCUMENT_FRAG_NODE</a><br />
+<a href="html/libxml-tree.html#XML_DOCUMENT_NODE">XML_DOCUMENT_NODE</a><br />
+<a href="html/libxml-tree.html#XML_DOCUMENT_TYPE_NODE">XML_DOCUMENT_TYPE_NODE</a><br />
+<a href="html/libxml-tree.html#XML_DTD_NODE">XML_DTD_NODE</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_ELEMENT">XML_ELEMENT_CONTENT_ELEMENT</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_MULT">XML_ELEMENT_CONTENT_MULT</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_ONCE">XML_ELEMENT_CONTENT_ONCE</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_OPT">XML_ELEMENT_CONTENT_OPT</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_OR">XML_ELEMENT_CONTENT_OR</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_PCDATA">XML_ELEMENT_CONTENT_PCDATA</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_PLUS">XML_ELEMENT_CONTENT_PLUS</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_SEQ">XML_ELEMENT_CONTENT_SEQ</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_DECL">XML_ELEMENT_DECL</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_NODE">XML_ELEMENT_NODE</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_ANY">XML_ELEMENT_TYPE_ANY</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_ELEMENT">XML_ELEMENT_TYPE_ELEMENT</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_EMPTY">XML_ELEMENT_TYPE_EMPTY</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_MIXED">XML_ELEMENT_TYPE_MIXED</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_UNDEFINED">XML_ELEMENT_TYPE_UNDEFINED</a><br />
+<a href="html/libxml-tree.html#XML_ENTITY_DECL">XML_ENTITY_DECL</a><br />
+<a href="html/libxml-tree.html#XML_ENTITY_NODE">XML_ENTITY_NODE</a><br />
+<a href="html/libxml-tree.html#XML_ENTITY_REF_NODE">XML_ENTITY_REF_NODE</a><br />
+<a href="html/libxml-tree.html#XML_GET_CONTENT">XML_GET_CONTENT</a><br />
+<a href="html/libxml-tree.html#XML_GET_LINE">XML_GET_LINE</a><br />
+<a href="html/libxml-tree.html#XML_HTML_DOCUMENT_NODE">XML_HTML_DOCUMENT_NODE</a><br />
+<a href="html/libxml-tree.html#XML_LOCAL_NAMESPACE">XML_LOCAL_NAMESPACE</a><br />
+<a href="html/libxml-tree.html#XML_NAMESPACE_DECL">XML_NAMESPACE_DECL</a><br />
+<a href="html/libxml-tree.html#XML_NOTATION_NODE">XML_NOTATION_NODE</a><br />
+<a href="html/libxml-tree.html#XML_PI_NODE">XML_PI_NODE</a><br />
+<a href="html/libxml-tree.html#XML_TEXT_NODE">XML_TEXT_NODE</a><br />
+<a href="html/libxml-tree.html#XML_XINCLUDE_END">XML_XINCLUDE_END</a><br />
+<a href="html/libxml-tree.html#XML_XINCLUDE_START">XML_XINCLUDE_START</a><br />
+<a href="html/libxml-tree.html#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a><br />
+<a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+<a href="html/libxml-tree.html#_xmlBuffer">_xmlBuffer</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+<a href="html/libxml-tree.html#_xmlEnumeration">_xmlEnumeration</a><br />
+<a href="html/libxml-tree.html#_xmlID">_xmlID</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-tree.html#_xmlNotation">_xmlNotation</a><br />
+<a href="html/libxml-tree.html#_xmlNs">_xmlNs</a><br />
+<a href="html/libxml-tree.html#_xmlRef">_xmlRef</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddChildList">xmlAddChildList</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlAttr">xmlAttr</a><br />
+<a href="html/libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a><br />
+<a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
+<a href="html/libxml-tree.html#xmlAttribute">xmlAttribute</a><br />
+<a href="html/libxml-tree.html#xmlAttributeDefault">xmlAttributeDefault</a><br />
+<a href="html/libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a><br />
+<a href="html/libxml-tree.html#xmlAttributeType">xmlAttributeType</a><br />
+<a href="html/libxml-tree.html#xmlBuffer">xmlBuffer</a><br />
+<a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
+<a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
+<a href="html/libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlBufferCCat">xmlBufferCCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferCat">xmlBufferCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreate">xmlBufferCreate</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateSize">xmlBufferCreateSize</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-tree.html#xmlBufferDump">xmlBufferDump</a><br />
+<a href="html/libxml-tree.html#xmlBufferEmpty">xmlBufferEmpty</a><br />
+<a href="html/libxml-tree.html#xmlBufferFree">xmlBufferFree</a><br />
+<a href="html/libxml-tree.html#xmlBufferGrow">xmlBufferGrow</a><br />
+<a href="html/libxml-tree.html#xmlBufferLength">xmlBufferLength</a><br />
+<a href="html/libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a><br />
+<a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
+<a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteChar">xmlBufferWriteChar</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-tree.html#xmlChildrenNode">xmlChildrenNode</a><br />
+<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-tree.html#xmlCopyDtd">xmlCopyDtd</a><br />
+<a href="html/libxml-tree.html#xmlCopyNamespace">xmlCopyNamespace</a><br />
+<a href="html/libxml-tree.html#xmlCopyNamespaceList">xmlCopyNamespaceList</a><br />
+<a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlCopyNodeList">xmlCopyNodeList</a><br />
+<a href="html/libxml-tree.html#xmlCopyProp">xmlCopyProp</a><br />
+<a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</a><br />
+<a href="html/libxml-tree.html#xmlCreateIntSubset">xmlCreateIntSubset</a><br />
+<a href="html/libxml-tree.html#xmlDoc">xmlDoc</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlDocDump">xmlDocDump</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDocPtr">xmlDocPtr</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDtd">xmlDtd</a><br />
+<a href="html/libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a><br />
+<a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
+<a href="html/libxml-tree.html#xmlElement">xmlElement</a><br />
+<a href="html/libxml-tree.html#xmlElementContent">xmlElementContent</a><br />
+<a href="html/libxml-tree.html#xmlElementContentOccur">xmlElementContentOccur</a><br />
+<a href="html/libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a><br />
+<a href="html/libxml-tree.html#xmlElementContentType">xmlElementContentType</a><br />
+<a href="html/libxml-tree.html#xmlElementPtr">xmlElementPtr</a><br />
+<a href="html/libxml-tree.html#xmlElementType">xmlElementType</a><br />
+<a href="html/libxml-tree.html#xmlElementTypeVal">xmlElementTypeVal</a><br />
+<a href="html/libxml-tree.html#xmlEntity">xmlEntity</a><br />
+<a href="html/libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a><br />
+<a href="html/libxml-tree.html#xmlEnumeration">xmlEnumeration</a><br />
+<a href="html/libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a><br />
+<a href="html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a><br />
+<a href="html/libxml-tree.html#xmlFreeDtd">xmlFreeDtd</a><br />
+<a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
+<a href="html/libxml-tree.html#xmlFreeNodeList">xmlFreeNodeList</a><br />
+<a href="html/libxml-tree.html#xmlFreeNs">xmlFreeNs</a><br />
+<a href="html/libxml-tree.html#xmlFreeNsList">xmlFreeNsList</a><br />
+<a href="html/libxml-tree.html#xmlFreeProp">xmlFreeProp</a><br />
+<a href="html/libxml-tree.html#xmlFreePropList">xmlFreePropList</a><br />
+<a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</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-tree.html#xmlGetIntSubset">xmlGetIntSubset</a><br />
+<a href="html/libxml-tree.html#xmlGetLastChild">xmlGetLastChild</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
+<a href="html/libxml-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-tree.html#xmlID">xmlID</a><br />
+<a href="html/libxml-tree.html#xmlIDPtr">xmlIDPtr</a><br />
+<a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
+<a href="html/libxml-tree.html#xmlIsXHTML">xmlIsXHTML</a><br />
+<a href="html/libxml-tree.html#xmlNewCDataBlock">xmlNewCDataBlock</a><br />
+<a href="html/libxml-tree.html#xmlNewCharRef">xmlNewCharRef</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewComment">xmlNewComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDoc">xmlNewDoc</a><br />
+<a href="html/libxml-tree.html#xmlNewDocComment">xmlNewDocComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocFragment">xmlNewDocFragment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewDocProp">xmlNewDocProp</a><br />
+<a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocText">xmlNewDocText</a><br />
+<a href="html/libxml-tree.html#xmlNewDocTextLen">xmlNewDocTextLen</a><br />
+<a href="html/libxml-tree.html#xmlNewDtd">xmlNewDtd</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+<a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewPI">xmlNewPI</a><br />
+<a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
+<a href="html/libxml-tree.html#xmlNewReference">xmlNewReference</a><br />
+<a href="html/libxml-tree.html#xmlNewText">xmlNewText</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextLen">xmlNewTextLen</a><br />
+<a href="html/libxml-tree.html#xmlNode">xmlNode</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContent">xmlNodeAddContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-tree.html#xmlNodeIsText">xmlNodeIsText</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-tree.html#xmlNodePtr">xmlNodePtr</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetBase">xmlNodeSetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContentLen">xmlNodeSetContentLen</a><br />
+<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-tree.html#xmlNotation">xmlNotation</a><br />
+<a href="html/libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a><br />
+<a href="html/libxml-tree.html#xmlNs">xmlNs</a><br />
+<a href="html/libxml-tree.html#xmlNsPtr">xmlNsPtr</a><br />
+<a href="html/libxml-tree.html#xmlNsType">xmlNsType</a><br />
+<a href="html/libxml-tree.html#xmlOutputBuffer">xmlOutputBuffer</a><br />
+<a href="html/libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a><br />
+<a href="html/libxml-tree.html#xmlParserCtxt">xmlParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a><br />
+<a href="html/libxml-tree.html#xmlParserInput">xmlParserInput</a><br />
+<a href="html/libxml-tree.html#xmlParserInputBuffer">xmlParserInputBuffer</a><br />
+<a href="html/libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a><br />
+<a href="html/libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-tree.html#xmlRef">xmlRef</a><br />
+<a href="html/libxml-tree.html#xmlRefPtr">xmlRefPtr</a><br />
+<a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<a href="html/libxml-tree.html#xmlRootNode">xmlRootNode</a><br />
+<a href="html/libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a><br />
+<a href="html/libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a><br />
+<a href="html/libxml-tree.html#xmlSAXLocator">xmlSAXLocator</a><br />
+<a href="html/libxml-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</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#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</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 />
+<a href="html/libxml-tree.html#xmlSetCompressMode">xmlSetCompressMode</a><br />
+<a href="html/libxml-tree.html#xmlSetDocCompressMode">xmlSetDocCompressMode</a><br />
+<a href="html/libxml-tree.html#xmlSetListDoc">xmlSetListDoc</a><br />
+<a href="html/libxml-tree.html#xmlSetNs">xmlSetNs</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-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlTextConcat">xmlTextConcat</a><br />
+<a href="html/libxml-tree.html#xmlTextMerge">xmlTextMerge</a><br />
+<a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
+<a href="html/libxml-tree.html#xmlUnsetNsProp">xmlUnsetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlUnsetProp">xmlUnsetProp</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+</p><h2><a name="uri" id="uri">Module uri</a>:</h2><p><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+<a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+<a href="html/libxml-uri.html#xmlCreateURI">xmlCreateURI</a><br />
+<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#xmlParseURIReference">xmlParseURIReference</a><br />
+<a href="html/libxml-uri.html#xmlPrintURI">xmlPrintURI</a><br />
+<a href="html/libxml-uri.html#xmlSaveUri">xmlSaveUri</a><br />
+<a href="html/libxml-uri.html#xmlURI">xmlURI</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+<a href="html/libxml-uri.html#xmlURIPtr">xmlURIPtr</a><br />
+<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+</p><h2><a name="valid" id="valid">Module valid</a>:</h2><p><a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddElementDecl">xmlAddElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+<a href="html/libxml-valid.html#xmlAddNotationDecl">xmlAddNotationDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-valid.html#xmlAttributeTable">xmlAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a><br />
+<a href="html/libxml-valid.html#xmlCopyAttributeTable">xmlCopyAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlCopyElementContent">xmlCopyElementContent</a><br />
+<a href="html/libxml-valid.html#xmlCopyElementTable">xmlCopyElementTable</a><br />
+<a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
+<a href="html/libxml-valid.html#xmlCopyNotationTable">xmlCopyNotationTable</a><br />
+<a href="html/libxml-valid.html#xmlCreateEnumeration">xmlCreateEnumeration</a><br />
+<a href="html/libxml-valid.html#xmlDumpAttributeDecl">xmlDumpAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlDumpAttributeTable">xmlDumpAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlDumpElementDecl">xmlDumpElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlDumpElementTable">xmlDumpElementTable</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-valid.html#xmlElementTable">xmlElementTable</a><br />
+<a href="html/libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a><br />
+<a href="html/libxml-valid.html#xmlFreeAttributeTable">xmlFreeAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeElementContent">xmlFreeElementContent</a><br />
+<a href="html/libxml-valid.html#xmlFreeElementTable">xmlFreeElementTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeEnumeration">xmlFreeEnumeration</a><br />
+<a href="html/libxml-valid.html#xmlFreeIDTable">xmlFreeIDTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeNotationTable">xmlFreeNotationTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeRefTable">xmlFreeRefTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeValidCtxt">xmlFreeValidCtxt</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetID">xmlGetID</a><br />
+<a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</a><br />
+<a href="html/libxml-valid.html#xmlIDTable">xmlIDTable</a><br />
+<a href="html/libxml-valid.html#xmlIDTablePtr">xmlIDTablePtr</a><br />
+<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
+<a href="html/libxml-valid.html#xmlNewValidCtxt">xmlNewValidCtxt</a><br />
+<a href="html/libxml-valid.html#xmlNotationTable">xmlNotationTable</a><br />
+<a href="html/libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a><br />
+<a href="html/libxml-valid.html#xmlRefTable">xmlRefTable</a><br />
+<a href="html/libxml-valid.html#xmlRefTablePtr">xmlRefTablePtr</a><br />
+<a href="html/libxml-valid.html#xmlRemoveID">xmlRemoveID</a><br />
+<a href="html/libxml-valid.html#xmlRemoveRef">xmlRemoveRef</a><br />
+<a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+<a href="html/libxml-valid.html#xmlSprintfElementContent">xmlSprintfElementContent</a><br />
+<a href="html/libxml-valid.html#xmlValidBuildContentModel">xmlValidBuildContentModel</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxt">xmlValidCtxt</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a><br />
+<a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidState">xmlValidState</a><br />
+<a href="html/libxml-valid.html#xmlValidStatePtr">xmlValidStatePtr</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</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#xmlValidateElement">xmlValidateElement</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateNameValue">xmlValidateNameValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNamesValue">xmlValidateNamesValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokenValue">xmlValidateNmtokenValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokensValue">xmlValidateNmtokensValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationUse">xmlValidateNotationUse</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#xmlValidatePopElement">xmlValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushCData">xmlValidatePushCData</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+</p><h2><a name="xinclude" id="xinclude">Module xinclude</a>:</h2><p><a href="html/libxml-xinclude.html#XINCLUDE_FALLBACK">XINCLUDE_FALLBACK</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_HREF">XINCLUDE_HREF</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_NODE">XINCLUDE_NODE</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_NS">XINCLUDE_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE">XINCLUDE_PARSE</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_ENCODING">XINCLUDE_PARSE_ENCODING</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_TEXT">XINCLUDE_PARSE_TEXT</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_XML">XINCLUDE_PARSE_XML</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_XPOINTER">XINCLUDE_PARSE_XPOINTER</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeCtxt">xmlXIncludeCtxt</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeFreeContext">xmlXIncludeFreeContext</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeNewContext">xmlXIncludeNewContext</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<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 />
+<a href="html/libxml-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</a><br />
+</p><h2><a name="xlink" id="xlink">Module xlink</a>:</h2><p><a href="html/libxml-xlink.html#XLINK_ACTUATE_AUTO">XLINK_ACTUATE_AUTO</a><br />
+<a href="html/libxml-xlink.html#XLINK_ACTUATE_NONE">XLINK_ACTUATE_NONE</a><br />
+<a href="html/libxml-xlink.html#XLINK_ACTUATE_ONREQUEST">XLINK_ACTUATE_ONREQUEST</a><br />
+<a href="html/libxml-xlink.html#XLINK_SHOW_EMBED">XLINK_SHOW_EMBED</a><br />
+<a href="html/libxml-xlink.html#XLINK_SHOW_NEW">XLINK_SHOW_NEW</a><br />
+<a href="html/libxml-xlink.html#XLINK_SHOW_NONE">XLINK_SHOW_NONE</a><br />
+<a href="html/libxml-xlink.html#XLINK_SHOW_REPLACE">XLINK_SHOW_REPLACE</a><br />
+<a href="html/libxml-xlink.html#XLINK_TYPE_EXTENDED">XLINK_TYPE_EXTENDED</a><br />
+<a href="html/libxml-xlink.html#XLINK_TYPE_EXTENDED_SET">XLINK_TYPE_EXTENDED_SET</a><br />
+<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-xlink.html#_xlinkHandler">_xlinkHandler</a><br />
+<a href="html/libxml-xlink.html#xlinkActuate">xlinkActuate</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-xlink.html#xlinkGetDefaultDetect">xlinkGetDefaultDetect</a><br />
+<a href="html/libxml-xlink.html#xlinkGetDefaultHandler">xlinkGetDefaultHandler</a><br />
+<a href="html/libxml-xlink.html#xlinkHRef">xlinkHRef</a><br />
+<a href="html/libxml-xlink.html#xlinkHandler">xlinkHandler</a><br />
+<a href="html/libxml-xlink.html#xlinkHandlerPtr">xlinkHandlerPtr</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
+<a href="html/libxml-xlink.html#xlinkRole">xlinkRole</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-xlink.html#xlinkShow">xlinkShow</a><br />
+<a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkTitle">xlinkTitle</a><br />
+<a href="html/libxml-xlink.html#xlinkType">xlinkType</a><br />
+</p><h2><a name="xmlIO" id="xmlIO">Module xmlIO</a>:</h2><p><a href="html/libxml-xmlIO.html#_xmlOutputBuffer">_xmlOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlAllocOutputBuffer">xmlAllocOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupInputCallbacks">xmlCleanupInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</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 />
+<a href="html/libxml-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlFreeParserInputBuffer">xmlFreeParserInputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPClose">xmlIOFTPClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPMatch">xmlIOFTPMatch</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPOpen">xmlIOFTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPRead">xmlIOFTPRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPClose">xmlIOHTTPClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPMatch">xmlIOHTTPMatch</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpen">xmlIOHTTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPRead">xmlIOHTTPRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferFlush">xmlOutputBufferFlush</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserGetDirectory">xmlParserGetDirectory</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultInputCallbacks">xmlRegisterDefaultInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultOutputCallbacks">xmlRegisterDefaultOutputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+</p><h2><a name="xmlautomata" id="xmlautomata">Module xmlautomata</a>:</h2><p><a href="html/libxml-xmlautomata.html#xmlAutomata">xmlAutomata</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataGetInitState">xmlAutomataGetInitState</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataIsDeterminist">xmlAutomataIsDeterminist</a><br />
+<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#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
+<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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewState">xmlAutomataNewState</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-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataSetFinalState">xmlAutomataSetFinalState</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataState">xmlAutomataState</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a><br />
+<a href="html/libxml-xmlautomata.html#xmlFreeAutomata">xmlFreeAutomata</a><br />
+<a href="html/libxml-xmlautomata.html#xmlNewAutomata">xmlNewAutomata</a><br />
+</p><h2><a name="xmlerror" id="xmlerror">Module xmlerror</a>:</h2><p><a href="html/libxml-xmlerror.html#XML_C14N_CREATE_CTXT">XML_C14N_CREATE_CTXT</a><br />
+<a href="html/libxml-xmlerror.html#XML_C14N_CREATE_STACK">XML_C14N_CREATE_STACK</a><br />
+<a href="html/libxml-xmlerror.html#XML_C14N_INVALID_NODE">XML_C14N_INVALID_NODE</a><br />
+<a href="html/libxml-xmlerror.html#XML_C14N_REQUIRES_UTF8">XML_C14N_REQUIRES_UTF8</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_ENTRY_BROKEN">XML_CATALOG_ENTRY_BROKEN</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_MISSING_ATTR">XML_CATALOG_MISSING_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_NOT_CATALOG">XML_CATALOG_NOT_CATALOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_PREFER_VALUE">XML_CATALOG_PREFER_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_RECURSION">XML_CATALOG_RECURSION</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ATTRIBUTE_DEFAULT">XML_DTD_ATTRIBUTE_DEFAULT</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ATTRIBUTE_REDEFINED">XML_DTD_ATTRIBUTE_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ATTRIBUTE_VALUE">XML_DTD_ATTRIBUTE_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_CONTENT_ERROR">XML_DTD_CONTENT_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_CONTENT_MODEL">XML_DTD_CONTENT_MODEL</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_CONTENT_NOT_DETERMINIST">XML_DTD_CONTENT_NOT_DETERMINIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_DIFFERENT_PREFIX">XML_DTD_DIFFERENT_PREFIX</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ELEM_DEFAULT_NAMESPACE">XML_DTD_ELEM_DEFAULT_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ELEM_NAMESPACE">XML_DTD_ELEM_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ELEM_REDEFINED">XML_DTD_ELEM_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_EMPTY_NOTATION">XML_DTD_EMPTY_NOTATION</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ENTITY_TYPE">XML_DTD_ENTITY_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ID_FIXED">XML_DTD_ID_FIXED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ID_REDEFINED">XML_DTD_ID_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ID_SUBSET">XML_DTD_ID_SUBSET</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_INVALID_CHILD">XML_DTD_INVALID_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_INVALID_DEFAULT">XML_DTD_INVALID_DEFAULT</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_LOAD_ERROR">XML_DTD_LOAD_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_MISSING_ATTRIBUTE">XML_DTD_MISSING_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_MIXED_CORRUPT">XML_DTD_MIXED_CORRUPT</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_MULTIPLE_ID">XML_DTD_MULTIPLE_ID</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOTATION_REDEFINED">XML_DTD_NOTATION_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOTATION_VALUE">XML_DTD_NOTATION_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOT_EMPTY">XML_DTD_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOT_PCDATA">XML_DTD_NOT_PCDATA</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOT_STANDALONE">XML_DTD_NOT_STANDALONE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_DOC">XML_DTD_NO_DOC</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_DTD">XML_DTD_NO_DTD</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_ELEM_NAME">XML_DTD_NO_ELEM_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_PREFIX">XML_DTD_NO_PREFIX</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_ROOT">XML_DTD_NO_ROOT</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ROOT_NAME">XML_DTD_ROOT_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_STANDALONE_DEFAULTED">XML_DTD_STANDALONE_DEFAULTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_STANDALONE_WHITE_SPACE">XML_DTD_STANDALONE_WHITE_SPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_ATTRIBUTE">XML_DTD_UNKNOWN_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_ELEM">XML_DTD_UNKNOWN_ELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_ENTITY">XML_DTD_UNKNOWN_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_ID">XML_DTD_UNKNOWN_ID</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_NOTATION">XML_DTD_UNKNOWN_NOTATION</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTLIST_NOT_FINISHED">XML_ERR_ATTLIST_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTLIST_NOT_STARTED">XML_ERR_ATTLIST_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTRIBUTE_NOT_FINISHED">XML_ERR_ATTRIBUTE_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTRIBUTE_NOT_STARTED">XML_ERR_ATTRIBUTE_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTRIBUTE_REDEFINED">XML_ERR_ATTRIBUTE_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTRIBUTE_WITHOUT_VALUE">XML_ERR_ATTRIBUTE_WITHOUT_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CDATA_NOT_FINISHED">XML_ERR_CDATA_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CHARREF_AT_EOF">XML_ERR_CHARREF_AT_EOF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CHARREF_IN_DTD">XML_ERR_CHARREF_IN_DTD</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CHARREF_IN_EPILOG">XML_ERR_CHARREF_IN_EPILOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CHARREF_IN_PROLOG">XML_ERR_CHARREF_IN_PROLOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_COMMENT_NOT_FINISHED">XML_ERR_COMMENT_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CONDSEC_INVALID">XML_ERR_CONDSEC_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CONDSEC_INVALID_KEYWORD">XML_ERR_CONDSEC_INVALID_KEYWORD</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CONDSEC_NOT_FINISHED">XML_ERR_CONDSEC_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CONDSEC_NOT_STARTED">XML_ERR_CONDSEC_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_DOCTYPE_NOT_FINISHED">XML_ERR_DOCTYPE_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_DOCUMENT_EMPTY">XML_ERR_DOCUMENT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_DOCUMENT_END">XML_ERR_DOCUMENT_END</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_DOCUMENT_START">XML_ERR_DOCUMENT_START</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ELEMCONTENT_NOT_FINISHED">XML_ERR_ELEMCONTENT_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ELEMCONTENT_NOT_STARTED">XML_ERR_ELEMCONTENT_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENCODING_NAME">XML_ERR_ENCODING_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_AT_EOF">XML_ERR_ENTITYREF_AT_EOF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_IN_DTD">XML_ERR_ENTITYREF_IN_DTD</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_IN_EPILOG">XML_ERR_ENTITYREF_IN_EPILOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_IN_PROLOG">XML_ERR_ENTITYREF_IN_PROLOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_NO_NAME">XML_ERR_ENTITYREF_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_SEMICOL_MISSING">XML_ERR_ENTITYREF_SEMICOL_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_BOUNDARY">XML_ERR_ENTITY_BOUNDARY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_CHAR_ERROR">XML_ERR_ENTITY_CHAR_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_IS_EXTERNAL">XML_ERR_ENTITY_IS_EXTERNAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_IS_PARAMETER">XML_ERR_ENTITY_IS_PARAMETER</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_LOOP">XML_ERR_ENTITY_LOOP</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_NOT_FINISHED">XML_ERR_ENTITY_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_NOT_STARTED">XML_ERR_ENTITY_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_PE_INTERNAL">XML_ERR_ENTITY_PE_INTERNAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_EQUAL_REQUIRED">XML_ERR_EQUAL_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ERROR">XML_ERR_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_EXTRA_CONTENT">XML_ERR_EXTRA_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_EXT_ENTITY_STANDALONE">XML_ERR_EXT_ENTITY_STANDALONE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_EXT_SUBSET_NOT_FINISHED">XML_ERR_EXT_SUBSET_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_FATAL">XML_ERR_FATAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_GT_REQUIRED">XML_ERR_GT_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_HYPHEN_IN_COMMENT">XML_ERR_HYPHEN_IN_COMMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INTERNAL_ERROR">XML_ERR_INTERNAL_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_CHAR">XML_ERR_INVALID_CHAR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_CHARREF">XML_ERR_INVALID_CHARREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_DEC_CHARREF">XML_ERR_INVALID_DEC_CHARREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_ENCODING">XML_ERR_INVALID_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_HEX_CHARREF">XML_ERR_INVALID_HEX_CHARREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_URI">XML_ERR_INVALID_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LITERAL_NOT_FINISHED">XML_ERR_LITERAL_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LITERAL_NOT_STARTED">XML_ERR_LITERAL_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LTSLASH_REQUIRED">XML_ERR_LTSLASH_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LT_IN_ATTRIBUTE">XML_ERR_LT_IN_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LT_REQUIRED">XML_ERR_LT_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_MISPLACED_CDATA_END">XML_ERR_MISPLACED_CDATA_END</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_MISSING_ENCODING">XML_ERR_MISSING_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_MIXED_NOT_FINISHED">XML_ERR_MIXED_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_MIXED_NOT_STARTED">XML_ERR_MIXED_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NAME_REQUIRED">XML_ERR_NAME_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NMTOKEN_REQUIRED">XML_ERR_NMTOKEN_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NONE">XML_ERR_NONE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NOTATION_NOT_FINISHED">XML_ERR_NOTATION_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NOTATION_NOT_STARTED">XML_ERR_NOTATION_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NOT_WELL_BALANCED">XML_ERR_NOT_WELL_BALANCED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NO_DTD">XML_ERR_NO_DTD</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NO_MEMORY">XML_ERR_NO_MEMORY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NS_DECL_ERROR">XML_ERR_NS_DECL_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_OK">XML_ERR_OK</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PCDATA_REQUIRED">XML_ERR_PCDATA_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_AT_EOF">XML_ERR_PEREF_AT_EOF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_IN_EPILOG">XML_ERR_PEREF_IN_EPILOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_IN_INT_SUBSET">XML_ERR_PEREF_IN_INT_SUBSET</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_IN_PROLOG">XML_ERR_PEREF_IN_PROLOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_NO_NAME">XML_ERR_PEREF_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_SEMICOL_MISSING">XML_ERR_PEREF_SEMICOL_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PI_NOT_FINISHED">XML_ERR_PI_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PI_NOT_STARTED">XML_ERR_PI_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PUBID_REQUIRED">XML_ERR_PUBID_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_RESERVED_XML_NAME">XML_ERR_RESERVED_XML_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_SEPARATOR_REQUIRED">XML_ERR_SEPARATOR_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_SPACE_REQUIRED">XML_ERR_SPACE_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_STANDALONE_VALUE">XML_ERR_STANDALONE_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_STRING_NOT_CLOSED">XML_ERR_STRING_NOT_CLOSED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_STRING_NOT_STARTED">XML_ERR_STRING_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_TAG_NAME_MISMATCH">XML_ERR_TAG_NAME_MISMATCH</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_TAG_NOT_FINISHED">XML_ERR_TAG_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_UNDECLARED_ENTITY">XML_ERR_UNDECLARED_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_UNKNOWN_ENCODING">XML_ERR_UNKNOWN_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_UNPARSED_ENTITY">XML_ERR_UNPARSED_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_UNSUPPORTED_ENCODING">XML_ERR_UNSUPPORTED_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_URI_FRAGMENT">XML_ERR_URI_FRAGMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_URI_REQUIRED">XML_ERR_URI_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_VALUE_REQUIRED">XML_ERR_VALUE_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_VERSION_MISSING">XML_ERR_VERSION_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_WARNING">XML_ERR_WARNING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_XMLDECL_NOT_FINISHED">XML_ERR_XMLDECL_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_XMLDECL_NOT_STARTED">XML_ERR_XMLDECL_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_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_DATATYPE">XML_FROM_DATATYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_DTD">XML_FROM_DTD</a><br />
+<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_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_NAMESPACE">XML_FROM_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_NONE">XML_FROM_NONE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_OUTPUT">XML_FROM_OUTPUT</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_PARSER">XML_FROM_PARSER</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_REGEXP">XML_FROM_REGEXP</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_RELAXNGP">XML_FROM_RELAXNGP</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_RELAXNGV">XML_FROM_RELAXNGV</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_SCHEMASP">XML_FROM_SCHEMASP</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_SCHEMASV">XML_FROM_SCHEMASV</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_TREE">XML_FROM_TREE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_VALID">XML_FROM_VALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_XINCLUDE">XML_FROM_XINCLUDE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_XPATH">XML_FROM_XPATH</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_XPOINTER">XML_FROM_XPOINTER</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_XSLT">XML_FROM_XSLT</a><br />
+<a href="html/libxml-xmlerror.html#XML_FTP_ACCNT">XML_FTP_ACCNT</a><br />
+<a href="html/libxml-xmlerror.html#XML_FTP_EPSV_ANSWER">XML_FTP_EPSV_ANSWER</a><br />
+<a href="html/libxml-xmlerror.html#XML_FTP_PASV_ANSWER">XML_FTP_PASV_ANSWER</a><br />
+<a href="html/libxml-xmlerror.html#XML_HTML_STRUCURE_ERROR">XML_HTML_STRUCURE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_HTML_UNKNOWN_TAG">XML_HTML_UNKNOWN_TAG</a><br />
+<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_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 />
+<a href="html/libxml-xmlerror.html#XML_IO_EAFNOSUPPORT">XML_IO_EAFNOSUPPORT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EAGAIN">XML_IO_EAGAIN</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EALREADY">XML_IO_EALREADY</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EBADF">XML_IO_EBADF</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EBADMSG">XML_IO_EBADMSG</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EBUSY">XML_IO_EBUSY</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ECANCELED">XML_IO_ECANCELED</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ECHILD">XML_IO_ECHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ECONNREFUSED">XML_IO_ECONNREFUSED</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EDEADLK">XML_IO_EDEADLK</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EDOM">XML_IO_EDOM</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EEXIST">XML_IO_EEXIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EFAULT">XML_IO_EFAULT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EFBIG">XML_IO_EFBIG</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EINPROGRESS">XML_IO_EINPROGRESS</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EINTR">XML_IO_EINTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EINVAL">XML_IO_EINVAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EIO">XML_IO_EIO</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EISCONN">XML_IO_EISCONN</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EISDIR">XML_IO_EISDIR</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EMFILE">XML_IO_EMFILE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EMLINK">XML_IO_EMLINK</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EMSGSIZE">XML_IO_EMSGSIZE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENAMETOOLONG">XML_IO_ENAMETOOLONG</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENCODER">XML_IO_ENCODER</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENETUNREACH">XML_IO_ENETUNREACH</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENFILE">XML_IO_ENFILE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENODEV">XML_IO_ENODEV</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOENT">XML_IO_ENOENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOEXEC">XML_IO_ENOEXEC</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOLCK">XML_IO_ENOLCK</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOMEM">XML_IO_ENOMEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOSPC">XML_IO_ENOSPC</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOSYS">XML_IO_ENOSYS</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTDIR">XML_IO_ENOTDIR</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTEMPTY">XML_IO_ENOTEMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTSOCK">XML_IO_ENOTSOCK</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTSUP">XML_IO_ENOTSUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTTY">XML_IO_ENOTTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENXIO">XML_IO_ENXIO</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EPERM">XML_IO_EPERM</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EPIPE">XML_IO_EPIPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ERANGE">XML_IO_ERANGE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EROFS">XML_IO_EROFS</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ESPIPE">XML_IO_ESPIPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ESRCH">XML_IO_ESRCH</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ETIMEDOUT">XML_IO_ETIMEDOUT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EXDEV">XML_IO_EXDEV</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_FLUSH">XML_IO_FLUSH</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_LOAD_ERROR">XML_IO_LOAD_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_NETWORK_ATTEMPT">XML_IO_NETWORK_ATTEMPT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_NO_INPUT">XML_IO_NO_INPUT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_UNKNOWN">XML_IO_UNKNOWN</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_WRITE">XML_IO_WRITE</a><br />
+<a href="html/libxml-xmlerror.html#XML_NS_ERR_ATTRIBUTE_REDEFINED">XML_NS_ERR_ATTRIBUTE_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_NS_ERR_QNAME">XML_NS_ERR_QNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_NS_ERR_UNDEFINED_NAMESPACE">XML_NS_ERR_UNDEFINED_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_NS_ERR_XML_NAMESPACE">XML_NS_ERR_XML_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_REGEXP_COMPILE_ERROR">XML_REGEXP_COMPILE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ANYNAME_ATTR_ANCESTOR">XML_RNGP_ANYNAME_ATTR_ANCESTOR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTRIBUTE_CHILDREN">XML_RNGP_ATTRIBUTE_CHILDREN</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTRIBUTE_CONTENT">XML_RNGP_ATTRIBUTE_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTRIBUTE_EMPTY">XML_RNGP_ATTRIBUTE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTRIBUTE_NOOP">XML_RNGP_ATTRIBUTE_NOOP</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTR_CONFLICT">XML_RNGP_ATTR_CONFLICT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_CHOICE_CONTENT">XML_RNGP_CHOICE_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_CHOICE_EMPTY">XML_RNGP_CHOICE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_CREATE_FAILURE">XML_RNGP_CREATE_FAILURE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DATA_CONTENT">XML_RNGP_DATA_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEFINE_CREATE_FAILED">XML_RNGP_DEFINE_CREATE_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEFINE_EMPTY">XML_RNGP_DEFINE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEFINE_MISSING">XML_RNGP_DEFINE_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEFINE_NAME_MISSING">XML_RNGP_DEFINE_NAME_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEF_CHOICE_AND_INTERLEAVE">XML_RNGP_DEF_CHOICE_AND_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEMENT_CONTENT">XML_RNGP_ELEMENT_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEMENT_EMPTY">XML_RNGP_ELEMENT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEMENT_NAME">XML_RNGP_ELEMENT_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEMENT_NO_CONTENT">XML_RNGP_ELEMENT_NO_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEM_CONTENT_EMPTY">XML_RNGP_ELEM_CONTENT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEM_CONTENT_ERROR">XML_RNGP_ELEM_CONTENT_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEM_TEXT_CONFLICT">XML_RNGP_ELEM_TEXT_CONFLICT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EMPTY">XML_RNGP_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EMPTY_CONSTRUCT">XML_RNGP_EMPTY_CONSTRUCT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EMPTY_CONTENT">XML_RNGP_EMPTY_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EMPTY_NOT_EMPTY">XML_RNGP_EMPTY_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ERROR_TYPE_LIB">XML_RNGP_ERROR_TYPE_LIB</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXCEPT_EMPTY">XML_RNGP_EXCEPT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXCEPT_MISSING">XML_RNGP_EXCEPT_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXCEPT_MULTIPLE">XML_RNGP_EXCEPT_MULTIPLE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXCEPT_NO_CONTENT">XML_RNGP_EXCEPT_NO_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXTERNALREF_EMTPY">XML_RNGP_EXTERNALREF_EMTPY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXTERNALREF_RECURSE">XML_RNGP_EXTERNALREF_RECURSE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXTERNAL_REF_FAILURE">XML_RNGP_EXTERNAL_REF_FAILURE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_FORBIDDEN_ATTRIBUTE">XML_RNGP_FORBIDDEN_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_FOREIGN_ELEMENT">XML_RNGP_FOREIGN_ELEMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GRAMMAR_CONTENT">XML_RNGP_GRAMMAR_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GRAMMAR_EMPTY">XML_RNGP_GRAMMAR_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GRAMMAR_MISSING">XML_RNGP_GRAMMAR_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GRAMMAR_NO_START">XML_RNGP_GRAMMAR_NO_START</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GROUP_ATTR_CONFLICT">XML_RNGP_GROUP_ATTR_CONFLICT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_HREF_ERROR">XML_RNGP_HREF_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INCLUDE_EMPTY">XML_RNGP_INCLUDE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INCLUDE_FAILURE">XML_RNGP_INCLUDE_FAILURE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INCLUDE_RECURSE">XML_RNGP_INCLUDE_RECURSE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INTERLEAVE_ADD">XML_RNGP_INTERLEAVE_ADD</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INTERLEAVE_CREATE_FAILED">XML_RNGP_INTERLEAVE_CREATE_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INTERLEAVE_EMPTY">XML_RNGP_INTERLEAVE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INTERLEAVE_NO_CONTENT">XML_RNGP_INTERLEAVE_NO_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INVALID_DEFINE_NAME">XML_RNGP_INVALID_DEFINE_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INVALID_URI">XML_RNGP_INVALID_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INVALID_VALUE">XML_RNGP_INVALID_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_MISSING_HREF">XML_RNGP_MISSING_HREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NAME_MISSING">XML_RNGP_NAME_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NEED_COMBINE">XML_RNGP_NEED_COMBINE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NOTALLOWED_NOT_EMPTY">XML_RNGP_NOTALLOWED_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NSNAME_ATTR_ANCESTOR">XML_RNGP_NSNAME_ATTR_ANCESTOR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NSNAME_NO_NS">XML_RNGP_NSNAME_NO_NS</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARAM_FORBIDDEN">XML_RNGP_PARAM_FORBIDDEN</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARAM_NAME_MISSING">XML_RNGP_PARAM_NAME_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_CREATE_FAILED">XML_RNGP_PARENTREF_CREATE_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_NAME_INVALID">XML_RNGP_PARENTREF_NAME_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_NOT_EMPTY">XML_RNGP_PARENTREF_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_NO_NAME">XML_RNGP_PARENTREF_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_NO_PARENT">XML_RNGP_PARENTREF_NO_PARENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARSE_ERROR">XML_RNGP_PARSE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME">XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ATTR_ATTR">XML_RNGP_PAT_ATTR_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ATTR_ELEM">XML_RNGP_PAT_ATTR_ELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_ATTR">XML_RNGP_PAT_DATA_EXCEPT_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_ELEM">XML_RNGP_PAT_DATA_EXCEPT_ELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_EMPTY">XML_RNGP_PAT_DATA_EXCEPT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_GROUP">XML_RNGP_PAT_DATA_EXCEPT_GROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE">XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_LIST">XML_RNGP_PAT_DATA_EXCEPT_LIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_ONEMORE">XML_RNGP_PAT_DATA_EXCEPT_ONEMORE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_REF">XML_RNGP_PAT_DATA_EXCEPT_REF</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_TEXT">XML_RNGP_PAT_DATA_EXCEPT_TEXT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_ATTR">XML_RNGP_PAT_LIST_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_ELEM">XML_RNGP_PAT_LIST_ELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_INTERLEAVE">XML_RNGP_PAT_LIST_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_LIST">XML_RNGP_PAT_LIST_LIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_REF">XML_RNGP_PAT_LIST_REF</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_TEXT">XML_RNGP_PAT_LIST_TEXT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME">XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME">XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ONEMORE_GROUP_ATTR">XML_RNGP_PAT_ONEMORE_GROUP_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR">XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_ATTR">XML_RNGP_PAT_START_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_DATA">XML_RNGP_PAT_START_DATA</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_EMPTY">XML_RNGP_PAT_START_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_GROUP">XML_RNGP_PAT_START_GROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_INTERLEAVE">XML_RNGP_PAT_START_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_LIST">XML_RNGP_PAT_START_LIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_ONEMORE">XML_RNGP_PAT_START_ONEMORE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_TEXT">XML_RNGP_PAT_START_TEXT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_VALUE">XML_RNGP_PAT_START_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PREFIX_UNDEFINED">XML_RNGP_PREFIX_UNDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_CREATE_FAILED">XML_RNGP_REF_CREATE_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_CYCLE">XML_RNGP_REF_CYCLE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_NAME_INVALID">XML_RNGP_REF_NAME_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_NOT_EMPTY">XML_RNGP_REF_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_NO_DEF">XML_RNGP_REF_NO_DEF</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_NO_NAME">XML_RNGP_REF_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_START_CHOICE_AND_INTERLEAVE">XML_RNGP_START_CHOICE_AND_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_START_CONTENT">XML_RNGP_START_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_START_EMPTY">XML_RNGP_START_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_START_MISSING">XML_RNGP_START_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TEXT_EXPECTED">XML_RNGP_TEXT_EXPECTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TEXT_HAS_CHILD">XML_RNGP_TEXT_HAS_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TYPE_MISSING">XML_RNGP_TYPE_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TYPE_NOT_FOUND">XML_RNGP_TYPE_NOT_FOUND</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TYPE_VALUE">XML_RNGP_TYPE_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_UNKNOWN_ATTRIBUTE">XML_RNGP_UNKNOWN_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_UNKNOWN_COMBINE">XML_RNGP_UNKNOWN_COMBINE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_UNKNOWN_CONSTRUCT">XML_RNGP_UNKNOWN_CONSTRUCT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_UNKNOWN_TYPE_LIB">XML_RNGP_UNKNOWN_TYPE_LIB</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_URI_FRAGMENT">XML_RNGP_URI_FRAGMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_URI_NOT_ABSOLUTE">XML_RNGP_URI_NOT_ABSOLUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_VALUE_EMPTY">XML_RNGP_VALUE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_VALUE_NO_CONTENT">XML_RNGP_VALUE_NO_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_XMLNS_NAME">XML_RNGP_XMLNS_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_XML_NS">XML_RNGP_XML_NS</a><br />
+<a href="html/libxml-xmlerror.html#XML_SAVE_CHAR_INVALID">XML_SAVE_CHAR_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_SAVE_NOT_UTF8">XML_SAVE_NOT_UTF8</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-xmlerror.html#XML_SCHEMAP_ATTRFORMDEFAULT_VALUE">XML_SCHEMAP_ATTRFORMDEFAULT_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ATTRGRP_NONAME_NOREF">XML_SCHEMAP_ATTRGRP_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ATTR_NONAME_NOREF">XML_SCHEMAP_ATTR_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF">XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_DEF_AND_PREFIX">XML_SCHEMAP_DEF_AND_PREFIX</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ELEMFORMDEFAULT_VALUE">XML_SCHEMAP_ELEMFORMDEFAULT_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ELEM_DEFAULT_FIXED">XML_SCHEMAP_ELEM_DEFAULT_FIXED</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ELEM_NONAME_NOREF">XML_SCHEMAP_ELEM_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_EXTENSION_NO_BASE">XML_SCHEMAP_EXTENSION_NO_BASE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_FACET_NO_VALUE">XML_SCHEMAP_FACET_NO_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_FAILED_BUILD_IMPORT">XML_SCHEMAP_FAILED_BUILD_IMPORT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_FAILED_LOAD">XML_SCHEMAP_FAILED_LOAD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_FAILED_PARSE">XML_SCHEMAP_FAILED_PARSE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_GROUP_NONAME_NOREF">XML_SCHEMAP_GROUP_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI">XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_IMPORT_REDEFINE_NSNAME">XML_SCHEMAP_IMPORT_REDEFINE_NSNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI">XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI">XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI">XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_BOOLEAN">XML_SCHEMAP_INVALID_BOOLEAN</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_ENUM">XML_SCHEMAP_INVALID_ENUM</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_FACET">XML_SCHEMAP_INVALID_FACET</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_FACET_VALUE">XML_SCHEMAP_INVALID_FACET_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_MAXOCCURS">XML_SCHEMAP_INVALID_MAXOCCURS</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_MINOCCURS">XML_SCHEMAP_INVALID_MINOCCURS</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_REF_AND_SUBTYPE">XML_SCHEMAP_INVALID_REF_AND_SUBTYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_WHITE_SPACE">XML_SCHEMAP_INVALID_WHITE_SPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOATTR_NOREF">XML_SCHEMAP_NOATTR_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOROOT">XML_SCHEMAP_NOROOT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOTATION_NO_NAME">XML_SCHEMAP_NOTATION_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOTHING_TO_PARSE">XML_SCHEMAP_NOTHING_TO_PARSE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOTYPE_NOREF">XML_SCHEMAP_NOTYPE_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOT_SCHEMA">XML_SCHEMAP_NOT_SCHEMA</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_PREFIX_UNDEFINED">XML_SCHEMAP_PREFIX_UNDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_ATTR">XML_SCHEMAP_REDEFINED_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_ATTRGROUP">XML_SCHEMAP_REDEFINED_ATTRGROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_ELEMENT">XML_SCHEMAP_REDEFINED_ELEMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_GROUP">XML_SCHEMAP_REDEFINED_GROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_NOTATION">XML_SCHEMAP_REDEFINED_NOTATION</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_TYPE">XML_SCHEMAP_REDEFINED_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REF_AND_SUBTYPE">XML_SCHEMAP_REF_AND_SUBTYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REGEXP_INVALID">XML_SCHEMAP_REGEXP_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_RESTRICTION_NONAME_NOREF">XML_SCHEMAP_RESTRICTION_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SIMPLETYPE_NONAME">XML_SCHEMAP_SIMPLETYPE_NONAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_TYPE_AND_SUBTYPE">XML_SCHEMAP_TYPE_AND_SUBTYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ALL_CHILD">XML_SCHEMAP_UNKNOWN_ALL_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD">XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD">XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP">XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ATTR_CHILD">XML_SCHEMAP_UNKNOWN_ATTR_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_BASE_TYPE">XML_SCHEMAP_UNKNOWN_BASE_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_CHOICE_CHILD">XML_SCHEMAP_UNKNOWN_CHOICE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD">XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD">XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ELEM_CHILD">XML_SCHEMAP_UNKNOWN_ELEM_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD">XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_FACET_CHILD">XML_SCHEMAP_UNKNOWN_FACET_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_FACET_TYPE">XML_SCHEMAP_UNKNOWN_FACET_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_GROUP_CHILD">XML_SCHEMAP_UNKNOWN_GROUP_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_IMPORT_CHILD">XML_SCHEMAP_UNKNOWN_IMPORT_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD">XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_LIST_CHILD">XML_SCHEMAP_UNKNOWN_LIST_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_NOTATION_CHILD">XML_SCHEMAP_UNKNOWN_NOTATION_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_PREFIX">XML_SCHEMAP_UNKNOWN_PREFIX</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD">XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_REF">XML_SCHEMAP_UNKNOWN_REF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD">XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD">XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD">XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD">XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD">XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_TYPE">XML_SCHEMAP_UNKNOWN_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_UNION_CHILD">XML_SCHEMAP_UNKNOWN_UNION_CHILD</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 />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_ELEMCONT">XML_SCHEMAV_ELEMCONT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_EXTRACONTENT">XML_SCHEMAV_EXTRACONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_FACET">XML_SCHEMAV_FACET</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_HAVEDEFAULT">XML_SCHEMAV_HAVEDEFAULT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_INTERNAL">XML_SCHEMAV_INTERNAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_INVALIDATTR">XML_SCHEMAV_INVALIDATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_INVALIDELEM">XML_SCHEMAV_INVALIDELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_ISABSTRACT">XML_SCHEMAV_ISABSTRACT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_MISSING">XML_SCHEMAV_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOROLLBACK">XML_SCHEMAV_NOROLLBACK</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOROOT">XML_SCHEMAV_NOROOT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTDETERMINIST">XML_SCHEMAV_NOTDETERMINIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTEMPTY">XML_SCHEMAV_NOTEMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTNILLABLE">XML_SCHEMAV_NOTNILLABLE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTSIMPLE">XML_SCHEMAV_NOTSIMPLE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTTOPLEVEL">XML_SCHEMAV_NOTTOPLEVEL</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTYPE">XML_SCHEMAV_NOTYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_UNDECLAREDELEM">XML_SCHEMAV_UNDECLAREDELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_VALUE">XML_SCHEMAV_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_WRONGELEM">XML_SCHEMAV_WRONGELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_TREE_INVALID_DEC">XML_TREE_INVALID_DEC</a><br />
+<a href="html/libxml-xmlerror.html#XML_TREE_INVALID_HEX">XML_TREE_INVALID_HEX</a><br />
+<a href="html/libxml-xmlerror.html#XML_TREE_UNTERMINATED_ENTITY">XML_TREE_UNTERMINATED_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_CATALOG_PI">XML_WAR_CATALOG_PI</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_LANG_VALUE">XML_WAR_LANG_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_NS_URI">XML_WAR_NS_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_NS_URI_RELATIVE">XML_WAR_NS_URI_RELATIVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_UNDECLARED_ENTITY">XML_WAR_UNDECLARED_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_UNKNOWN_VERSION">XML_WAR_UNKNOWN_VERSION</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_BUILD_FAILED">XML_XINCLUDE_BUILD_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_DEPRECATED_NS">XML_XINCLUDE_DEPRECATED_NS</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_ENTITY_DEF_MISMATCH">XML_XINCLUDE_ENTITY_DEF_MISMATCH</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_FALLBACKS_IN_INCLUDE">XML_XINCLUDE_FALLBACKS_IN_INCLUDE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE">XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_FRAGMENT_ID">XML_XINCLUDE_FRAGMENT_ID</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_HREF_URI">XML_XINCLUDE_HREF_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_INCLUDE_IN_INCLUDE">XML_XINCLUDE_INCLUDE_IN_INCLUDE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_INVALID_CHAR">XML_XINCLUDE_INVALID_CHAR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_MULTIPLE_ROOT">XML_XINCLUDE_MULTIPLE_ROOT</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_NO_FALLBACK">XML_XINCLUDE_NO_FALLBACK</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_NO_HREF">XML_XINCLUDE_NO_HREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_PARSE_VALUE">XML_XINCLUDE_PARSE_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_RECURSION">XML_XINCLUDE_RECURSION</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_TEXT_DOCUMENT">XML_XINCLUDE_TEXT_DOCUMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_TEXT_FRAGMENT">XML_XINCLUDE_TEXT_FRAGMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_UNKNOWN_ENCODING">XML_XINCLUDE_UNKNOWN_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_XPTR_FAILED">XML_XINCLUDE_XPTR_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_XPTR_RESULT">XML_XINCLUDE_XPTR_RESULT</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 />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_ARITY">XML_XPATH_INVALID_ARITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_CHAR_ERROR">XML_XPATH_INVALID_CHAR_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_CTXT_POSITION">XML_XPATH_INVALID_CTXT_POSITION</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_CTXT_SIZE">XML_XPATH_INVALID_CTXT_SIZE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_OPERAND">XML_XPATH_INVALID_OPERAND</a><br />
+<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-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 />
+<a href="html/libxml-xmlerror.html#XML_XPATH_UNDEF_PREFIX_ERROR">XML_XPATH_UNDEF_PREFIX_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_UNDEF_VARIABLE_ERROR">XML_XPATH_UNDEF_VARIABLE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_UNFINISHED_LITERAL_ERROR">XML_XPATH_UNFINISHED_LITERAL_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_UNKNOWN_FUNC_ERROR">XML_XPATH_UNKNOWN_FUNC_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_VARIABLE_REF_ERROR">XML_XPATH_VARIABLE_REF_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_CHILDSEQ_START">XML_XPTR_CHILDSEQ_START</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_EVAL_FAILED">XML_XPTR_EVAL_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_EXTRA_OBJECTS">XML_XPTR_EXTRA_OBJECTS</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_RESOURCE_ERROR">XML_XPTR_RESOURCE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_SUB_RESOURCE_ERROR">XML_XPTR_SUB_RESOURCE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_SYNTAX_ERROR">XML_XPTR_SYNTAX_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_UNKNOWN_SCHEME">XML_XPTR_UNKNOWN_SCHEME</a><br />
+<a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+<a href="html/libxml-xmlerror.html#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlCopyError">xmlCopyError</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtGetLastError">xmlCtxtGetLastError</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
+<a href="html/libxml-xmlerror.html#xmlError">xmlError</a><br />
+<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-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserErrors">xmlParserErrors</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileContext">xmlParserPrintFileContext</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileInfo">xmlParserPrintFileInfo</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetError">xmlResetError</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetLastError">xmlResetLastError</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-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#XMLPUBFUN">XMLPUBFUN</a><br />
+<a href="html/libxml-xmlexports.html#XMLPUBVAR">XMLPUBVAR</a><br />
+<a href="html/libxml-xmlexports.html#_REENTRANT">_REENTRANT</a><br />
+</p><h2><a name="xmlmemory" id="xmlmemory">Module xmlmemory</a>:</h2><p><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<a href="html/libxml-xmlmemory.html#xmlCleanupMemory">xmlCleanupMemory</a><br />
+<a href="html/libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a><br />
+<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#xmlInitMemory">xmlInitMemory</a><br />
+<a href="html/libxml-globals.html#xmlMalloc">xmlMalloc</a><br />
+<a href="html/libxml-globals.html#xmlMallocAtomic">xmlMallocAtomic</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemDisplay">xmlMemDisplay</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemFree">xmlMemFree</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemShow">xmlMemShow</a><br />
+<a href="html/libxml-globals.html#xmlMemStrdup">xmlMemStrdup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemStrdupLoc">xmlMemStrdupLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemUsed">xmlMemUsed</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryStrdup">xmlMemoryStrdup</a><br />
+<a href="html/libxml-globals.html#xmlRealloc">xmlRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a><br />
+</p><h2><a name="xmlreader" id="xmlreader">Module xmlreader</a>:</h2><p><a href="html/libxml-xmlreader.html#XML_PARSER_DEFAULTATTRS">XML_PARSER_DEFAULTATTRS</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_LOADDTD">XML_PARSER_LOADDTD</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_SEVERITY_ERROR">XML_PARSER_SEVERITY_ERROR</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_SEVERITY_VALIDITY_ERROR">XML_PARSER_SEVERITY_VALIDITY_ERROR</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_SEVERITY_VALIDITY_WARNING">XML_PARSER_SEVERITY_VALIDITY_WARNING</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_SEVERITY_WARNING">XML_PARSER_SEVERITY_WARNING</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_SUBST_ENTITIES">XML_PARSER_SUBST_ENTITIES</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_VALIDATE">XML_PARSER_VALIDATE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ATTRIBUTE">XML_READER_TYPE_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_CDATA">XML_READER_TYPE_CDATA</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_COMMENT">XML_READER_TYPE_COMMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_DOCUMENT">XML_READER_TYPE_DOCUMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_DOCUMENT_FRAGMENT">XML_READER_TYPE_DOCUMENT_FRAGMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_DOCUMENT_TYPE">XML_READER_TYPE_DOCUMENT_TYPE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ELEMENT">XML_READER_TYPE_ELEMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_END_ELEMENT">XML_READER_TYPE_END_ELEMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_END_ENTITY">XML_READER_TYPE_END_ENTITY</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ENTITY">XML_READER_TYPE_ENTITY</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ENTITY_REFERENCE">XML_READER_TYPE_ENTITY_REFERENCE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_NONE">XML_READER_TYPE_NONE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_NOTATION">XML_READER_TYPE_NOTATION</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_PROCESSING_INSTRUCTION">XML_READER_TYPE_PROCESSING_INSTRUCTION</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_SIGNIFICANT_WHITESPACE">XML_READER_TYPE_SIGNIFICANT_WHITESPACE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_TEXT">XML_READER_TYPE_TEXT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_WHITESPACE">XML_READER_TYPE_WHITESPACE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_XML_DECLARATION">XML_READER_TYPE_XML_DECLARATION</a><br />
+<a href="html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a><br />
+<a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
+<a href="html/libxml-xmlreader.html#xmlNewTextReaderFilename">xmlNewTextReaderFilename</a><br />
+<a href="html/libxml-xmlreader.html#xmlParserProperties">xmlParserProperties</a><br />
+<a href="html/libxml-xmlreader.html#xmlParserSeverities">xmlParserSeverities</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForMemory">xmlReaderForMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderTypes">xmlReaderTypes</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderWalker">xmlReaderWalker</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReader">xmlTextReader</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderAttributeCount">xmlTextReaderAttributeCount</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderBaseUri">xmlTextReaderBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstBaseUri">xmlTextReaderConstBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstLocalName">xmlTextReaderConstLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstNamespaceUri">xmlTextReaderConstNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstPrefix">xmlTextReaderConstPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderDepth">xmlTextReaderDepth</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttribute">xmlTextReaderGetAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNs">xmlTextReaderGetAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetErrorHandler">xmlTextReaderGetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetParserProp">xmlTextReaderGetParserProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderHasAttributes">xmlTextReaderHasAttributes</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderHasValue">xmlTextReaderHasValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsDefault">xmlTextReaderIsDefault</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsEmptyElement">xmlTextReaderIsEmptyElement</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocalName">xmlTextReaderLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorBaseURI">xmlTextReaderLocatorBaseURI</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorLineNumber">xmlTextReaderLocatorLineNumber</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttribute">xmlTextReaderMoveToAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNo">xmlTextReaderMoveToAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNs">xmlTextReaderMoveToAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToElement">xmlTextReaderMoveToElement</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToFirstAttribute">xmlTextReaderMoveToFirstAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToNextAttribute">xmlTextReaderMoveToNextAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderName">xmlTextReaderName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNamespaceUri">xmlTextReaderNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPrefix">xmlTextReaderPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderQuoteChar">xmlTextReaderQuoteChar</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadState">xmlTextReaderReadState</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+<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#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</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 />
+<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#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a><br />
+<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#xmlRegexp">xmlRegexp</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a><br />
+<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#xmlSaveClose">xmlSaveClose</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveCtxt">xmlSaveCtxt</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveFlush">xmlSaveFlush</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToBuffer">xmlSaveToBuffer</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
+</p><h2><a name="xmlschemas" id="xmlschemas">Module xmlschemas</a>:</h2><p><a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_">XML_SCHEMAS_ERR_</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_ATTRINVALID">XML_SCHEMAS_ERR_ATTRINVALID</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_ATTRUNKNOWN">XML_SCHEMAS_ERR_ATTRUNKNOWN</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_CONSTRUCT">XML_SCHEMAS_ERR_CONSTRUCT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_ELEMCONT">XML_SCHEMAS_ERR_ELEMCONT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_EXTRACONTENT">XML_SCHEMAS_ERR_EXTRACONTENT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_FACET">XML_SCHEMAS_ERR_FACET</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_HAVEDEFAULT">XML_SCHEMAS_ERR_HAVEDEFAULT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_INTERNAL">XML_SCHEMAS_ERR_INTERNAL</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_INVALIDATTR">XML_SCHEMAS_ERR_INVALIDATTR</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_INVALIDELEM">XML_SCHEMAS_ERR_INVALIDELEM</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_ISABSTRACT">XML_SCHEMAS_ERR_ISABSTRACT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_MISSING">XML_SCHEMAS_ERR_MISSING</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOROLLBACK">XML_SCHEMAS_ERR_NOROLLBACK</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOROOT">XML_SCHEMAS_ERR_NOROOT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTDETERMINIST">XML_SCHEMAS_ERR_NOTDETERMINIST</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTEMPTY">XML_SCHEMAS_ERR_NOTEMPTY</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTNILLABLE">XML_SCHEMAS_ERR_NOTNILLABLE</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTSIMPLE">XML_SCHEMAS_ERR_NOTSIMPLE</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTTOPLEVEL">XML_SCHEMAS_ERR_NOTTOPLEVEL</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTYPE">XML_SCHEMAS_ERR_NOTYPE</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_OK">XML_SCHEMAS_ERR_OK</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_UNDECLAREDELEM">XML_SCHEMAS_ERR_UNDECLAREDELEM</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_VALUE">XML_SCHEMAS_ERR_VALUE</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_WRONGELEM">XML_SCHEMAS_ERR_WRONGELEM</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_XXX">XML_SCHEMAS_ERR_XXX</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchema">xmlSchema</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaDump">xmlSchemaDump</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaFree">xmlSchemaFree</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-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</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-xmlschemas.html#xmlSchemaNewValidCtxt">xmlSchemaNewValidCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParserCtxt">xmlSchemaParserCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</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#xmlSchemaValidCtxt">xmlSchemaValidCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidError">xmlSchemaValidError</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</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 />
+</p><h2><a name="xmlschemastypes" id="xmlschemastypes">Module xmlschemastypes</a>:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCleanupTypes">xmlSchemaCleanupTypes</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCompareValues">xmlSchemaCompareValues</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeFacet">xmlSchemaFreeFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeValue">xmlSchemaFreeValue</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaInitTypes">xmlSchemaInitTypes</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewFacet">xmlSchemaNewFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+</p><h2><a name="xmlstring" id="xmlstring">Module xmlstring</a>:</h2><p><a href="html/libxml-xmlstring.html#BAD_CAST">BAD_CAST</a><br />
+<a href="html/libxml-xmlstring.html#xmlChar">xmlChar</a><br />
+<a href="html/libxml-xmlstring.html#xmlCharStrdup">xmlCharStrdup</a><br />
+<a href="html/libxml-xmlstring.html#xmlCharStrndup">xmlCharStrndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcasecmp">xmlStrcasecmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcmp">xmlStrcmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrlen">xmlStrlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncasecmp">xmlStrncasecmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncmp">xmlStrncmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrndup">xmlStrndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrstr">xmlStrstr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Charcmp">xmlUTF8Charcmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Size">xmlUTF8Size</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strloc">xmlUTF8Strloc</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strndup">xmlUTF8Strndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+</p><h2><a name="xmlunicode" id="xmlunicode">Module xmlunicode</a>:</h2><p><a href="html/libxml-xmlunicode.html#xmlUCSIsAegeanNumbers">xmlUCSIsAegeanNumbers</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsAlphabeticPresentationForms">xmlUCSIsAlphabeticPresentationForms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArabic">xmlUCSIsArabic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArabicPresentationFormsA">xmlUCSIsArabicPresentationFormsA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArabicPresentationFormsB">xmlUCSIsArabicPresentationFormsB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArmenian">xmlUCSIsArmenian</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArrows">xmlUCSIsArrows</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBasicLatin">xmlUCSIsBasicLatin</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBengali">xmlUCSIsBengali</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBlock">xmlUCSIsBlock</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBlockElements">xmlUCSIsBlockElements</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBopomofo">xmlUCSIsBopomofo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBopomofoExtended">xmlUCSIsBopomofoExtended</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBoxDrawing">xmlUCSIsBoxDrawing</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBraillePatterns">xmlUCSIsBraillePatterns</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBuhid">xmlUCSIsBuhid</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsByzantineMusicalSymbols">xmlUCSIsByzantineMusicalSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibility">xmlUCSIsCJKCompatibility</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibilityForms">xmlUCSIsCJKCompatibilityForms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibilityIdeographs">xmlUCSIsCJKCompatibilityIdeographs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibilityIdeographsSupplement">xmlUCSIsCJKCompatibilityIdeographsSupplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKRadicalsSupplement">xmlUCSIsCJKRadicalsSupplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKSymbolsandPunctuation">xmlUCSIsCJKSymbolsandPunctuation</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKUnifiedIdeographs">xmlUCSIsCJKUnifiedIdeographs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKUnifiedIdeographsExtensionA">xmlUCSIsCJKUnifiedIdeographsExtensionA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKUnifiedIdeographsExtensionB">xmlUCSIsCJKUnifiedIdeographsExtensionB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCat">xmlUCSIsCat</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatC">xmlUCSIsCatC</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatCc">xmlUCSIsCatCc</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatCf">xmlUCSIsCatCf</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatCo">xmlUCSIsCatCo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatCs">xmlUCSIsCatCs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatL">xmlUCSIsCatL</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLl">xmlUCSIsCatLl</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLm">xmlUCSIsCatLm</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLo">xmlUCSIsCatLo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLt">xmlUCSIsCatLt</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLu">xmlUCSIsCatLu</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatM">xmlUCSIsCatM</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatMc">xmlUCSIsCatMc</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatMe">xmlUCSIsCatMe</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatMn">xmlUCSIsCatMn</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatN">xmlUCSIsCatN</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatNd">xmlUCSIsCatNd</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatNl">xmlUCSIsCatNl</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatNo">xmlUCSIsCatNo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatP">xmlUCSIsCatP</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPc">xmlUCSIsCatPc</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPd">xmlUCSIsCatPd</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPe">xmlUCSIsCatPe</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPf">xmlUCSIsCatPf</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPi">xmlUCSIsCatPi</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPo">xmlUCSIsCatPo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPs">xmlUCSIsCatPs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatS">xmlUCSIsCatS</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatSc">xmlUCSIsCatSc</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatSk">xmlUCSIsCatSk</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatSm">xmlUCSIsCatSm</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatSo">xmlUCSIsCatSo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatZ">xmlUCSIsCatZ</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatZl">xmlUCSIsCatZl</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatZp">xmlUCSIsCatZp</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatZs">xmlUCSIsCatZs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCherokee">xmlUCSIsCherokee</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningDiacriticalMarks">xmlUCSIsCombiningDiacriticalMarks</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningDiacriticalMarksforSymbols">xmlUCSIsCombiningDiacriticalMarksforSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningHalfMarks">xmlUCSIsCombiningHalfMarks</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningMarksforSymbols">xmlUCSIsCombiningMarksforSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsControlPictures">xmlUCSIsControlPictures</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCurrencySymbols">xmlUCSIsCurrencySymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCypriotSyllabary">xmlUCSIsCypriotSyllabary</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCyrillic">xmlUCSIsCyrillic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCyrillicSupplement">xmlUCSIsCyrillicSupplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsDeseret">xmlUCSIsDeseret</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsDevanagari">xmlUCSIsDevanagari</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsDingbats">xmlUCSIsDingbats</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsEnclosedAlphanumerics">xmlUCSIsEnclosedAlphanumerics</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsEnclosedCJKLettersandMonths">xmlUCSIsEnclosedCJKLettersandMonths</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsEthiopic">xmlUCSIsEthiopic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGeneralPunctuation">xmlUCSIsGeneralPunctuation</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGeometricShapes">xmlUCSIsGeometricShapes</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGeorgian">xmlUCSIsGeorgian</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGothic">xmlUCSIsGothic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGreek">xmlUCSIsGreek</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGreekExtended">xmlUCSIsGreekExtended</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGreekandCoptic">xmlUCSIsGreekandCoptic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGujarati">xmlUCSIsGujarati</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGurmukhi">xmlUCSIsGurmukhi</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHalfwidthandFullwidthForms">xmlUCSIsHalfwidthandFullwidthForms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHangulCompatibilityJamo">xmlUCSIsHangulCompatibilityJamo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHangulJamo">xmlUCSIsHangulJamo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHangulSyllables">xmlUCSIsHangulSyllables</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHanunoo">xmlUCSIsHanunoo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHebrew">xmlUCSIsHebrew</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHighPrivateUseSurrogates">xmlUCSIsHighPrivateUseSurrogates</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHighSurrogates">xmlUCSIsHighSurrogates</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHiragana">xmlUCSIsHiragana</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsIPAExtensions">xmlUCSIsIPAExtensions</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsIdeographicDescriptionCharacters">xmlUCSIsIdeographicDescriptionCharacters</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKanbun">xmlUCSIsKanbun</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKangxiRadicals">xmlUCSIsKangxiRadicals</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKannada">xmlUCSIsKannada</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKatakana">xmlUCSIsKatakana</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKatakanaPhoneticExtensions">xmlUCSIsKatakanaPhoneticExtensions</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKhmer">xmlUCSIsKhmer</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKhmerSymbols">xmlUCSIsKhmerSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLao">xmlUCSIsLao</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLatin1Supplement">xmlUCSIsLatin1Supplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLatinExtendedA">xmlUCSIsLatinExtendedA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLatinExtendedAdditional">xmlUCSIsLatinExtendedAdditional</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLatinExtendedB">xmlUCSIsLatinExtendedB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLetterlikeSymbols">xmlUCSIsLetterlikeSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLimbu">xmlUCSIsLimbu</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLinearBIdeograms">xmlUCSIsLinearBIdeograms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLinearBSyllabary">xmlUCSIsLinearBSyllabary</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLowSurrogates">xmlUCSIsLowSurrogates</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMalayalam">xmlUCSIsMalayalam</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMathematicalAlphanumericSymbols">xmlUCSIsMathematicalAlphanumericSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMathematicalOperators">xmlUCSIsMathematicalOperators</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousMathematicalSymbolsA">xmlUCSIsMiscellaneousMathematicalSymbolsA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousMathematicalSymbolsB">xmlUCSIsMiscellaneousMathematicalSymbolsB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousSymbols">xmlUCSIsMiscellaneousSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousSymbolsandArrows">xmlUCSIsMiscellaneousSymbolsandArrows</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousTechnical">xmlUCSIsMiscellaneousTechnical</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMongolian">xmlUCSIsMongolian</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMusicalSymbols">xmlUCSIsMusicalSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMyanmar">xmlUCSIsMyanmar</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsNumberForms">xmlUCSIsNumberForms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOgham">xmlUCSIsOgham</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOldItalic">xmlUCSIsOldItalic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOpticalCharacterRecognition">xmlUCSIsOpticalCharacterRecognition</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOriya">xmlUCSIsOriya</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOsmanya">xmlUCSIsOsmanya</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsPhoneticExtensions">xmlUCSIsPhoneticExtensions</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsPrivateUse">xmlUCSIsPrivateUse</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsPrivateUseArea">xmlUCSIsPrivateUseArea</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsRunic">xmlUCSIsRunic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsShavian">xmlUCSIsShavian</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSinhala">xmlUCSIsSinhala</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSmallFormVariants">xmlUCSIsSmallFormVariants</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSpacingModifierLetters">xmlUCSIsSpacingModifierLetters</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSpecials">xmlUCSIsSpecials</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSuperscriptsandSubscripts">xmlUCSIsSuperscriptsandSubscripts</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementalArrowsA">xmlUCSIsSupplementalArrowsA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementalArrowsB">xmlUCSIsSupplementalArrowsB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementalMathematicalOperators">xmlUCSIsSupplementalMathematicalOperators</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementaryPrivateUseAreaA">xmlUCSIsSupplementaryPrivateUseAreaA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementaryPrivateUseAreaB">xmlUCSIsSupplementaryPrivateUseAreaB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSyriac">xmlUCSIsSyriac</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTagalog">xmlUCSIsTagalog</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTagbanwa">xmlUCSIsTagbanwa</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTags">xmlUCSIsTags</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTaiLe">xmlUCSIsTaiLe</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTaiXuanJingSymbols">xmlUCSIsTaiXuanJingSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTamil">xmlUCSIsTamil</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTelugu">xmlUCSIsTelugu</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsThaana">xmlUCSIsThaana</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsThai">xmlUCSIsThai</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTibetan">xmlUCSIsTibetan</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsUgaritic">xmlUCSIsUgaritic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsUnifiedCanadianAboriginalSyllabics">xmlUCSIsUnifiedCanadianAboriginalSyllabics</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsVariationSelectors">xmlUCSIsVariationSelectors</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsVariationSelectorsSupplement">xmlUCSIsVariationSelectorsSupplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsYiRadicals">xmlUCSIsYiRadicals</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsYiSyllables">xmlUCSIsYiSyllables</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsYijingHexagramSymbols">xmlUCSIsYijingHexagramSymbols</a><br />
+</p><h2><a name="xmlversion" id="xmlversion">Module xmlversion</a>:</h2><p><a href="html/libxml-xmlversion.html#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a><br />
+<a href="html/libxml-xmlversion.html#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_AUTOMATA_ENABLED">LIBXML_AUTOMATA_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_C14N_ENABLED">LIBXML_C14N_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_CATALOG_ENABLED">LIBXML_CATALOG_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_DEBUG_ENABLED">LIBXML_DEBUG_ENABLED</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_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 />
+<a href="html/libxml-xmlversion.html#LIBXML_ICONV_ENABLED">LIBXML_ICONV_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_ISO8859X_ENABLED">LIBXML_ISO8859X_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_LEGACY_ENABLED">LIBXML_LEGACY_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_OUTPUT_ENABLED">LIBXML_OUTPUT_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_PATTERN_ENABLED">LIBXML_PATTERN_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_PUSH_ENABLED">LIBXML_PUSH_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_READER_ENABLED">LIBXML_READER_ENABLED</a><br />
+<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_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 />
+<a href="html/libxml-xmlversion.html#LIBXML_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_VALID_ENABLED">LIBXML_VALID_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_VERSION">LIBXML_VERSION</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_VERSION_STRING">LIBXML_VERSION_STRING</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_WRITER_ENABLED">LIBXML_WRITER_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_XINCLUDE_ENABLED">LIBXML_XINCLUDE_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_XPATH_ENABLED">LIBXML_XPATH_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_XPTR_ENABLED">LIBXML_XPTR_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#WITHOUT_TRIO">WITHOUT_TRIO</a><br />
+<a href="html/libxml-xmlversion.html#WITH_TRIO">WITH_TRIO</a><br />
+<a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
+</p><h2><a name="xmlwriter" id="xmlwriter">Module xmlwriter</a>:</h2><p><a href="html/libxml-xmlwriter.html#xmlFreeTextWriter">xmlFreeTextWriter</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriter">xmlTextWriter</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndAttribute">xmlTextWriterEndAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndCDATA">xmlTextWriterEndCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndComment">xmlTextWriterEndComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTD">xmlTextWriterEndDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDAttlist">xmlTextWriterEndDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDElement">xmlTextWriterEndDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDEntity">xmlTextWriterEndDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndElement">xmlTextWriterEndElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndPI">xmlTextWriterEndPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterFlush">xmlTextWriterFlush</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartComment">xmlTextWriterStartComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTD">xmlTextWriterStartDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDAttlist">xmlTextWriterStartDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDElement">xmlTextWriterStartDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElement">xmlTextWriterStartElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElementNS">xmlTextWriterStartElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartPI">xmlTextWriterStartPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteAttribute">xmlTextWriterWriteAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteAttributeNS">xmlTextWriterWriteAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteCDATA">xmlTextWriterWriteCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteComment">xmlTextWriterWriteComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTD">xmlTextWriterWriteDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDAttlist">xmlTextWriterWriteDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDElement">xmlTextWriterWriteDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDEntity">xmlTextWriterWriteDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntityContents">xmlTextWriterWriteDTDExternalEntityContents</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDInternalEntity">xmlTextWriterWriteDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDNotation">xmlTextWriterWriteDTDNotation</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDocType">xmlTextWriterWriteDocType</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteElement">xmlTextWriterWriteElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteElementNS">xmlTextWriterWriteElementNS</a><br />
+<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 />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDAttlist">xmlTextWriterWriteFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDElement">xmlTextWriterWriteFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElementNS">xmlTextWriterWriteFormatElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatPI">xmlTextWriterWriteFormatPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatRaw">xmlTextWriterWriteFormatRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatString">xmlTextWriterWriteFormatString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWritePI">xmlTextWriterWritePI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteProcessingInstruction">xmlTextWriterWriteProcessingInstruction</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRaw">xmlTextWriterWriteRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteString">xmlTextWriterWriteString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttribute">xmlTextWriterWriteVFormatAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatCDATA">xmlTextWriterWriteVFormatCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatComment">xmlTextWriterWriteVFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDElement">xmlTextWriterWriteVFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElement">xmlTextWriterWriteVFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElementNS">xmlTextWriterWriteVFormatElementNS</a><br />
+<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 />
+<a href="html/libxml-xpath.html#XPATH_ENCODING_ERROR">XPATH_ENCODING_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_EXPRESSION_OK">XPATH_EXPRESSION_OK</a><br />
+<a href="html/libxml-xpath.html#XPATH_EXPR_ERROR">XPATH_EXPR_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_ARITY">XPATH_INVALID_ARITY</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_CHAR_ERROR">XPATH_INVALID_CHAR_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_CTXT_POSITION">XPATH_INVALID_CTXT_POSITION</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_CTXT_SIZE">XPATH_INVALID_CTXT_SIZE</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_OPERAND">XPATH_INVALID_OPERAND</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_PREDICATE_ERROR">XPATH_INVALID_PREDICATE_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_TYPE">XPATH_INVALID_TYPE</a><br />
+<a href="html/libxml-xpath.html#XPATH_LOCATIONSET">XPATH_LOCATIONSET</a><br />
+<a href="html/libxml-xpath.html#XPATH_MEMORY_ERROR">XPATH_MEMORY_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_NODESET">XPATH_NODESET</a><br />
+<a href="html/libxml-xpath.html#XPATH_NUMBER">XPATH_NUMBER</a><br />
+<a href="html/libxml-xpath.html#XPATH_NUMBER_ERROR">XPATH_NUMBER_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_POINT">XPATH_POINT</a><br />
+<a href="html/libxml-xpath.html#XPATH_RANGE">XPATH_RANGE</a><br />
+<a href="html/libxml-xpath.html#XPATH_START_LITERAL_ERROR">XPATH_START_LITERAL_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_STRING">XPATH_STRING</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNCLOSED_ERROR">XPATH_UNCLOSED_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNDEFINED">XPATH_UNDEFINED</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNDEF_PREFIX_ERROR">XPATH_UNDEF_PREFIX_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNDEF_VARIABLE_ERROR">XPATH_UNDEF_VARIABLE_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNFINISHED_LITERAL_ERROR">XPATH_UNFINISHED_LITERAL_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNKNOWN_FUNC_ERROR">XPATH_UNKNOWN_FUNC_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_USERS">XPATH_USERS</a><br />
+<a href="html/libxml-xpath.html#XPATH_VARIABLE_REF_ERROR">XPATH_VARIABLE_REF_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_XSLT_TREE">XPATH_XSLT_TREE</a><br />
+<a href="html/libxml-xpath.html#XPTR_RESOURCE_ERROR">XPTR_RESOURCE_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPTR_SUB_RESOURCE_ERROR">XPTR_SUB_RESOURCE_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPTR_SYNTAX_ERROR">XPTR_SYNTAX_ERROR</a><br />
+<a href="html/libxml-xpath.html#_xmlNodeSet">_xmlNodeSet</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathAxis">_xmlXPathAxis</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathFunct">_xmlXPathFunct</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathObject">_xmlXPathObject</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathType">_xmlXPathType</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathVariable">_xmlXPathVariable</a><br />
+<a href="html/libxml-xpath.html#xmlNodeSet">xmlNodeSet</a><br />
+<a href="html/libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxis">xmlXPathAxis</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisPtr">xmlXPathAxisPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastBooleanToNumber">xmlXPathCastBooleanToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastBooleanToString">xmlXPathCastBooleanToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToBoolean">xmlXPathCastNodeSetToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToNumber">xmlXPathCastNodeSetToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToString">xmlXPathCastNodeSetToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToNumber">xmlXPathCastNodeToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToString">xmlXPathCastNodeToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNumberToBoolean">xmlXPathCastNumberToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNumberToString">xmlXPathCastNumberToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastStringToBoolean">xmlXPathCastStringToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastStringToNumber">xmlXPathCastStringToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToBoolean">xmlXPathCastToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToNumber">xmlXPathCastToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToString">xmlXPathCastToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCmpNodes">xmlXPathCmpNodes</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompExpr">xmlXPathCompExpr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompile">xmlXPathCompile</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathContext">xmlXPathContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertBoolean">xmlXPathConvertBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertFunc">xmlXPathConvertFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertNumber">xmlXPathConvertNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertString">xmlXPathConvertString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCtxtCompile">xmlXPathCtxtCompile</a><br />
+<a href="html/libxml-xpath.html#xmlXPathError">xmlXPathError</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalFunc">xmlXPathEvalFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeCompExpr">xmlXPathFreeCompExpr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeContext">xmlXPathFreeContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSet">xmlXPathFreeNodeSet</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeObject">xmlXPathFreeObject</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFuncPtr">xmlXPathFuncPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFunct">xmlXPathFunct</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathInit">xmlXPathInit</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNAN">xmlXPathNAN</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNINF">xmlXPathNINF</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetIsEmpty">xmlXPathNodeSetIsEmpty</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObject">xmlXPathObject</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectCopy">xmlXPathObjectCopy</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectType">xmlXPathObjectType</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+<a href="html/libxml-xpath.html#xmlXPathPINF">xmlXPathPINF</a><br />
+<a href="html/libxml-xpath.html#xmlXPathParserContext">xmlXPathParserContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathType">xmlXPathType</a><br />
+<a href="html/libxml-xpath.html#xmlXPathTypePtr">xmlXPathTypePtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathVariable">xmlXPathVariable</a><br />
+<a href="html/libxml-xpath.html#xmlXPathVariablePtr">xmlXPathVariablePtr</a><br />
+</p><h2><a name="xpathInternals" id="xpathInternals">Module xpathInternals</a>:</h2><p><a href="html/libxml-xpathInternals.html#CAST_TO_BOOLEAN">CAST_TO_BOOLEAN</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_NUMBER">CAST_TO_NUMBER</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_STRING">CAST_TO_STRING</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_ARITY">CHECK_ARITY</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_ERROR">CHECK_ERROR</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_ERROR0">CHECK_ERROR0</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_TYPE">CHECK_TYPE</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_TYPE0">CHECK_TYPE0</a><br />
+<a href="html/libxml-xpathInternals.html#XP_ERROR">XP_ERROR</a><br />
+<a href="html/libxml-xpathInternals.html#XP_ERROR0">XP_ERROR0</a><br />
+<a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
+<a href="html/libxml-xpathInternals.html#valuePush">valuePush</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCheckError">xmlXPathCheckError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathConcatFunction">xmlXPathConcatFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathContainsFunction">xmlXPathContainsFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCountFunction">xmlXPathCountFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEmptyNodeSet">xmlXPathEmptyNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathErr">xmlXPathErr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvalExpr">xmlXPathEvalExpr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFalseFunction">xmlXPathFalseFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFreeParserContext">xmlXPathFreeParserContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetContextNode">xmlXPathGetContextNode</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetDocument">xmlXPathGetDocument</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetError">xmlXPathGetError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIsNodeType">xmlXPathIsNodeType</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLastFunction">xmlXPathLastFunction</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#xmlXPathLocalNameFunction">xmlXPathLocalNameFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathModValues">xmlXPathModValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathMultValues">xmlXPathMultValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNamespaceURIFunction">xmlXPathNamespaceURIFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewBoolean">xmlXPathNewBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewCString">xmlXPathNewCString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewFloat">xmlXPathNewFloat</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewString">xmlXPathNewString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<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#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextChild">xmlXPathNextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeading">xmlXPathNodeLeading</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetContains">xmlXPathNodeSetContains</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetSort">xmlXPathNodeSetSort</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#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotFunction">xmlXPathNotFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNsLookup">xmlXPathNsLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNumberFunction">xmlXPathNumberFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseName">xmlXPathParseName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopBoolean">xmlXPathPopBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopExternal">xmlXPathPopExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNumber">xmlXPathPopNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopString">xmlXPathPopString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPositionFunction">xmlXPathPositionFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterAllFunctions">xmlXPathRegisterAllFunctions</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncLookup">xmlXPathRegisterFuncLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterNs">xmlXPathRegisterNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariable">xmlXPathRegisterVariable</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableLookup">xmlXPathRegisterVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableNS">xmlXPathRegisterVariableNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredFuncsCleanup">xmlXPathRegisteredFuncsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredNsCleanup">xmlXPathRegisteredNsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredVariablesCleanup">xmlXPathRegisteredVariablesCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnBoolean">xmlXPathReturnBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnEmptyNodeSet">xmlXPathReturnEmptyNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnEmptyString">xmlXPathReturnEmptyString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnExternal">xmlXPathReturnExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnFalse">xmlXPathReturnFalse</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnNodeSet">xmlXPathReturnNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnNumber">xmlXPathReturnNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnString">xmlXPathReturnString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnTrue">xmlXPathReturnTrue</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoot">xmlXPathRoot</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSetArityError">xmlXPathSetArityError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSetError">xmlXPathSetError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSetTypeError">xmlXPathSetTypeError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStackIsExternal">xmlXPathStackIsExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStackIsNodeSet">xmlXPathStackIsNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStartsWithFunction">xmlXPathStartsWithFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSumFunction">xmlXPathSumFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrueFunction">xmlXPathTrueFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookup">xmlXPathVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupNS">xmlXPathVariableLookupNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapCString">xmlXPathWrapCString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapExternal">xmlXPathWrapExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapString">xmlXPathWrapString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPatherror">xmlXPatherror</a><br />
+</p><h2><a name="xpointer" id="xpointer">Module xpointer</a>:</h2><p><a href="html/libxml-xpointer.html#_xmlLocationSet">_xmlLocationSet</a><br />
+<a href="html/libxml-xpointer.html#xmlLocationSet">xmlLocationSet</a><br />
+<a href="html/libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetCreate">xmlXPtrLocationSetCreate</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodeSet">xmlXPtrNewLocationSetNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodes">xmlXPtrNewRangeNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrRangeToFunction">xmlXPtrRangeToFunction</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrWrapLocationSet">xmlXPtrWrapLocationSet</a><br />
+</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/APIfunctions.html b/doc/APIfunctions.html
new file mode 100644
index 0000000..290aea4
--- /dev/null
+++ b/doc/APIfunctions.html
@@ -0,0 +1,2073 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>List of function manipulating types in libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>List of function manipulating types in libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>Type ...:</h2><p><a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</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-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</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 />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatCDATA">xmlTextWriterWriteFormatCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDAttlist">xmlTextWriterWriteFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDElement">xmlTextWriterWriteFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElementNS">xmlTextWriterWriteFormatElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatPI">xmlTextWriterWriteFormatPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatRaw">xmlTextWriterWriteFormatRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatString">xmlTextWriterWriteFormatString</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+</p><h2>Type FILE *:</h2><p><a href="html/libxml-HTMLtree.html#htmlDocDump">htmlDocDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogDump">xmlACatalogDump</a><br />
+<a href="html/libxml-tree.html#xmlBufferDump">xmlBufferDump</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogDump">xmlCatalogDump</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttr">xmlDebugDumpAttr</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDTD">xmlDebugDumpDTD</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocument">xmlDebugDumpDocument</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpEntities">xmlDebugDumpEntities</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpString">xmlDebugDumpString</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-tree.html#xmlElemDump">xmlElemDump</a><br />
+<a href="html/libxml-debugXML.html#xmlLsOneNode">xmlLsOneNode</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemDisplay">xmlMemDisplay</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemShow">xmlMemShow</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a><br />
+<a href="html/libxml-uri.html#xmlPrintURI">xmlPrintURI</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpPrint">xmlRegexpPrint</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGDump">xmlRelaxNGDump</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGDumpTree">xmlRelaxNGDumpTree</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaDump">xmlSchemaDump</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+</p><h2>Type char **:</h2><p><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 />
+</p><h2>Type char const *:</h2><p><a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a><br />
+</p><h2>Type const char **:</h2><p><a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+</p><h2>Type const htmlElemDesc *:</h2><p><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a><br />
+</p><h2>Type const htmlNodePtr:</h2><p><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</p><h2>Type const unsigned char *:</h2><p><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
+<a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<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-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+</p><h2>Type const void *:</h2><p><a href="html/libxml-list.html#xmlListDataCompare">xmlListDataCompare</a><br />
+<a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
+</p><h2>Type const xlinkHRef:</h2><p><a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+</p><h2>Type const xlinkHRef *:</h2><p><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+</p><h2>Type const xlinkRole:</h2><p><a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+</p><h2>Type const xlinkRole *:</h2><p><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+</p><h2>Type const xlinkTitle:</h2><p><a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+</p><h2>Type const xlinkTitle *:</h2><p><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
+</p><h2>Type const xmlBufferPtr:</h2><p><a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
+<a href="html/libxml-tree.html#xmlBufferLength">xmlBufferLength</a><br />
+</p><h2>Type const xmlChRangeGroupPtr:</h2><p><a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+</p><h2>Type const xmlChar *:</h2><p><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-SAX.html#attributeDecl">attributeDecl</a><br />
+<a href="html/libxml-parser.html#attributeDeclSAXFunc">attributeDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-SAX.html#cdataBlock">cdataBlock</a><br />
+<a href="html/libxml-parser.html#cdataBlockSAXFunc">cdataBlockSAXFunc</a><br />
+<a href="html/libxml-SAX.html#characters">characters</a><br />
+<a href="html/libxml-parser.html#charactersSAXFunc">charactersSAXFunc</a><br />
+<a href="html/libxml-SAX.html#comment">comment</a><br />
+<a href="html/libxml-parser.html#commentSAXFunc">commentSAXFunc</a><br />
+<a href="html/libxml-SAX.html#elementDecl">elementDecl</a><br />
+<a href="html/libxml-parser.html#elementDeclSAXFunc">elementDeclSAXFunc</a><br />
+<a href="html/libxml-SAX.html#endElement">endElement</a><br />
+<a href="html/libxml-parser.html#endElementNsSAX2Func">endElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#endElementSAXFunc">endElementSAXFunc</a><br />
+<a href="html/libxml-SAX.html#entityDecl">entityDecl</a><br />
+<a href="html/libxml-parser.html#entityDeclSAXFunc">entityDeclSAXFunc</a><br />
+<a href="html/libxml-SAX.html#externalSubset">externalSubset</a><br />
+<a href="html/libxml-parser.html#externalSubsetSAXFunc">externalSubsetSAXFunc</a><br />
+<a href="html/libxml-SAX.html#getEntity">getEntity</a><br />
+<a href="html/libxml-parser.html#getEntitySAXFunc">getEntitySAXFunc</a><br />
+<a href="html/libxml-SAX.html#getParameterEntity">getParameterEntity</a><br />
+<a href="html/libxml-parser.html#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a><br />
+<a href="html/libxml-SAX.html#globalNamespace">globalNamespace</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
+<a href="html/libxml-HTMLtree.html#htmlIsBooleanAttr">htmlIsBooleanAttr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsScriptAttribute">htmlIsScriptAttribute</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDoc">htmlNewDoc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDocNoDtD">htmlNewDocNoDtD</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadDoc">htmlReadDoc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+<a href="html/libxml-HTMLparser.html#htmlTagLookup">htmlTagLookup</a><br />
+<a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-SAX.html#internalSubset">internalSubset</a><br />
+<a href="html/libxml-parser.html#internalSubsetSAXFunc">internalSubsetSAXFunc</a><br />
+<a href="html/libxml-parserInternals.html#namePush">namePush</a><br />
+<a href="html/libxml-SAX.html#namespaceDecl">namespaceDecl</a><br />
+<a href="html/libxml-SAX.html#notationDecl">notationDecl</a><br />
+<a href="html/libxml-parser.html#notationDeclSAXFunc">notationDeclSAXFunc</a><br />
+<a href="html/libxml-SAX.html#processingInstruction">processingInstruction</a><br />
+<a href="html/libxml-parser.html#processingInstructionSAXFunc">processingInstructionSAXFunc</a><br />
+<a href="html/libxml-SAX.html#reference">reference</a><br />
+<a href="html/libxml-parser.html#referenceSAXFunc">referenceSAXFunc</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-SAX.html#setNamespace">setNamespace</a><br />
+<a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+<a href="html/libxml-SAX.html#unparsedEntityDecl">unparsedEntityDecl</a><br />
+<a href="html/libxml-parser.html#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolvePublic">xmlACatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveSystem">xmlACatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveURI">xmlACatalogResolveURI</a><br />
+<a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-entities.html#xmlAddDocEntity">xmlAddDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlAddDtdEntity">xmlAddDtdEntity</a><br />
+<a href="html/libxml-valid.html#xmlAddElementDecl">xmlAddElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+<a href="html/libxml-valid.html#xmlAddNotationDecl">xmlAddNotationDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</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-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
+<a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
+<a href="html/libxml-tree.html#xmlBufferCat">xmlBufferCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetPublic">xmlCatalogGetPublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetSystem">xmlCatalogGetSystem</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolve">xmlCatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolvePublic">xmlCatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveSystem">xmlCatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveURI">xmlCatalogResolveURI</a><br />
+<a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-parser.html#xmlCreateDocParserCtxt">xmlCreateDocParserCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-valid.html#xmlCreateEnumeration">xmlCreateEnumeration</a><br />
+<a href="html/libxml-tree.html#xmlCreateIntSubset">xmlCreateIntSubset</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadDoc">xmlCtxtReadDoc</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpString">xmlDebugDumpString</a><br />
+<a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
+<a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
+<a href="html/libxml-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-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 />
+<a href="html/libxml-entities.html#xmlGetDtdEntity">xmlGetDtdEntity</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetID">xmlGetID</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-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetPredefinedEntity">xmlGetPredefinedEntity</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</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 />
+<a href="html/libxml-hash.html#xmlHashAddEntry2">xmlHashAddEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashAddEntry3">xmlHashAddEntry3</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 />
+<a href="html/libxml-hash.html#xmlHashQLookup">xmlHashQLookup</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup2">xmlHashQLookup2</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup3">xmlHashQLookup3</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-tree.html#xmlIsXHTML">xmlIsXHTML</a><br />
+<a href="html/libxml-tree.html#xmlNewCDataBlock">xmlNewCDataBlock</a><br />
+<a href="html/libxml-tree.html#xmlNewCharRef">xmlNewCharRef</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewComment">xmlNewComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDoc">xmlNewDoc</a><br />
+<a href="html/libxml-tree.html#xmlNewDocComment">xmlNewDocComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewDocProp">xmlNewDocProp</a><br />
+<a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocText">xmlNewDocText</a><br />
+<a href="html/libxml-tree.html#xmlNewDocTextLen">xmlNewDocTextLen</a><br />
+<a href="html/libxml-tree.html#xmlNewDtd">xmlNewDtd</a><br />
+<a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewPI">xmlNewPI</a><br />
+<a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
+<a href="html/libxml-tree.html#xmlNewReference">xmlNewReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewStringInputStream">xmlNewStringInputStream</a><br />
+<a href="html/libxml-tree.html#xmlNewText">xmlNewText</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextLen">xmlNewTextLen</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContent">xmlNodeAddContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetBase">xmlNodeSetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContentLen">xmlNodeSetContentLen</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-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseDTD">xmlParseDTD</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+<a href="html/libxml-parser.html#xmlReadDoc">xmlReadDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecCallbacks">xmlRegExecCallbacks</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2AttributeDecl">xmlSAX2AttributeDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2CDataBlock">xmlSAX2CDataBlock</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Characters">xmlSAX2Characters</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Comment">xmlSAX2Comment</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ElementDecl">xmlSAX2ElementDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElement">xmlSAX2EndElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElementNs">xmlSAX2EndElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EntityDecl">xmlSAX2EntityDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ExternalSubset">xmlSAX2ExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetEntity">xmlSAX2GetEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetParameterEntity">xmlSAX2GetParameterEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GlobalNamespace">xmlSAX2GlobalNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InternalSubset">xmlSAX2InternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2NamespaceDecl">xmlSAX2NamespaceDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2NotationDecl">xmlSAX2NotationDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ProcessingInstruction">xmlSAX2ProcessingInstruction</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Reference">xmlSAX2Reference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetNamespace">xmlSAX2SetNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2UnparsedEntityDecl">xmlSAX2UnparsedEntityDecl</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDTD">xmlSAXParseDTD</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</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#xmlSetNsProp">xmlSetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlSetProp">xmlSetProp</a><br />
+<a href="html/libxml-parser.html#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcasecmp">xmlStrcasecmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcmp">xmlStrcmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrlen">xmlStrlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncasecmp">xmlStrncasecmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncmp">xmlStrncmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrndup">xmlStrndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrstr">xmlStrstr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+<a href="html/libxml-tree.html#xmlTextConcat">xmlTextConcat</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttribute">xmlTextReaderGetAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNs">xmlTextReaderGetAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttribute">xmlTextReaderMoveToAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNs">xmlTextReaderMoveToAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTD">xmlTextWriterStartDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDAttlist">xmlTextWriterStartDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDElement">xmlTextWriterStartDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElement">xmlTextWriterStartElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElementNS">xmlTextWriterStartElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartPI">xmlTextWriterStartPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteAttribute">xmlTextWriterWriteAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteAttributeNS">xmlTextWriterWriteAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteCDATA">xmlTextWriterWriteCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteComment">xmlTextWriterWriteComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTD">xmlTextWriterWriteDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDAttlist">xmlTextWriterWriteDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDElement">xmlTextWriterWriteDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDEntity">xmlTextWriterWriteDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntityContents">xmlTextWriterWriteDTDExternalEntityContents</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDInternalEntity">xmlTextWriterWriteDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDNotation">xmlTextWriterWriteDTDNotation</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteElement">xmlTextWriterWriteElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteElementNS">xmlTextWriterWriteElementNS</a><br />
+<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#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDAttlist">xmlTextWriterWriteFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDElement">xmlTextWriterWriteFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElementNS">xmlTextWriterWriteFormatElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatPI">xmlTextWriterWriteFormatPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWritePI">xmlTextWriterWritePI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRaw">xmlTextWriterWriteRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteString">xmlTextWriterWriteString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttribute">xmlTextWriterWriteVFormatAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDElement">xmlTextWriterWriteVFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElement">xmlTextWriterWriteVFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElementNS">xmlTextWriterWriteVFormatElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatPI">xmlTextWriterWriteVFormatPI</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Charcmp">xmlUTF8Charcmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Size">xmlUTF8Size</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strloc">xmlUTF8Strloc</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strndup">xmlUTF8Strndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+<a href="html/libxml-tree.html#xmlUnsetNsProp">xmlUnsetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlUnsetProp">xmlUnsetProp</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-valid.html#xmlValidateNameValue">xmlValidateNameValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNamesValue">xmlValidateNamesValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokenValue">xmlValidateNmtokenValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokensValue">xmlValidateNmtokensValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationUse">xmlValidateNotationUse</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+<a href="html/libxml-valid.html#xmlValidatePopElement">xmlValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushCData">xmlValidatePushCData</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastStringToBoolean">xmlXPathCastStringToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastStringToNumber">xmlXPathCastStringToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompile">xmlXPathCompile</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCtxtCompile">xmlXPathCtxtCompile</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIsNodeType">xmlXPathIsNodeType</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewString">xmlXPathNewString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNsLookup">xmlXPathNsLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterNs">xmlXPathRegisterNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariable">xmlXPathRegisterVariable</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableNS">xmlXPathRegisterVariableNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookup">xmlXPathVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupNS">xmlXPathVariableLookupNS</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+</p><h2>Type const xmlChar **:</h2><p><a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<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-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</p><h2>Type const xmlListPtr:</h2><p><a href="html/libxml-list.html#xmlListCopy">xmlListCopy</a><br />
+<a href="html/libxml-list.html#xmlListDup">xmlListDup</a><br />
+</p><h2>Type const xmlNodePtr:</h2><p><a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlCopyNodeList">xmlCopyNodeList</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+</p><h2>Type const xmlParserCtxtPtr:</h2><p><a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+</p><h2>Type const xmlParserNodeInfoPtr:</h2><p><a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
+</p><h2>Type const xmlParserNodeInfoSeqPtr:</h2><p><a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+</p><h2>Type docbParserCtxtPtr:</h2><p><a href="html/libxml-DOCBparser.html#docbFreeParserCtxt">docbFreeParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseChunk">docbParseChunk</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDocument">docbParseDocument</a><br />
+</p><h2>Type docbSAXHandlerPtr:</h2><p><a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+</p><h2>Type double:</h2><p><a href="html/libxml-xpath.html#xmlXPathCastNumberToBoolean">xmlXPathCastNumberToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNumberToString">xmlXPathCastNumberToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewFloat">xmlXPathNewFloat</a><br />
+</p><h2>Type ftpDataCallback:</h2><p><a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+</p><h2>Type ftpListCallback:</h2><p><a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+</p><h2>Type htmlDocPtr:</h2><p><a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-HTMLtree.html#htmlGetMetaEncoding">htmlGetMetaEncoding</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+</p><h2>Type htmlNodePtr:</h2><p><a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+</p><h2>Type htmlParserCtxtPtr:</h2><p><a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFd">htmlCtxtReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFile">htmlCtxtReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadMemory">htmlCtxtReadMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReset">htmlCtxtReset</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtUseOptions">htmlCtxtUseOptions</a><br />
+<a href="html/libxml-HTMLparser.html#htmlFreeParserCtxt">htmlFreeParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseCharRef">htmlParseCharRef</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseChunk">htmlParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDocument">htmlParseDocument</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+</p><h2>Type htmlSAXHandlerPtr:</h2><p><a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+</p><h2>Type int *:</h2><p><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
+<a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocDumpMemory">htmlDocDumpMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<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-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</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#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
+<a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+</p><h2>Type size_t:</h2><p><a href="html/libxml-tree.html#xmlBufferCreateSize">xmlBufferCreateSize</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+</p><h2>Type unsigned char *:</h2><p><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
+<a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<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 />
+</p><h2>Type unsigned int:</h2><p><a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
+<a href="html/libxml-tree.html#xmlBufferGrow">xmlBufferGrow</a><br />
+<a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
+<a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
+<a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar">xmlIsBaseChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank">xmlIsBlank</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar">xmlIsChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombining">xmlIsCombining</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit">xmlIsDigit</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender">xmlIsExtender</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographic">xmlIsIdeographic</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
+</p><h2>Type unsigned long:</h2><p><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+</p><h2>Type va_list:</h2><p><a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttribute">xmlTextWriterWriteVFormatAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatCDATA">xmlTextWriterWriteVFormatCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatComment">xmlTextWriterWriteVFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDElement">xmlTextWriterWriteVFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElement">xmlTextWriterWriteVFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElementNS">xmlTextWriterWriteVFormatElementNS</a><br />
+<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>Type void *:</h2><p><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-SAX.html#attributeDecl">attributeDecl</a><br />
+<a href="html/libxml-parser.html#attributeDeclSAXFunc">attributeDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+<a href="html/libxml-SAX.html#cdataBlock">cdataBlock</a><br />
+<a href="html/libxml-parser.html#cdataBlockSAXFunc">cdataBlockSAXFunc</a><br />
+<a href="html/libxml-SAX.html#characters">characters</a><br />
+<a href="html/libxml-parser.html#charactersSAXFunc">charactersSAXFunc</a><br />
+<a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
+<a href="html/libxml-SAX.html#comment">comment</a><br />
+<a href="html/libxml-parser.html#commentSAXFunc">commentSAXFunc</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
+<a href="html/libxml-SAX.html#elementDecl">elementDecl</a><br />
+<a href="html/libxml-parser.html#elementDeclSAXFunc">elementDeclSAXFunc</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 />
+<a href="html/libxml-parser.html#endElementNsSAX2Func">endElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#endElementSAXFunc">endElementSAXFunc</a><br />
+<a href="html/libxml-SAX.html#entityDecl">entityDecl</a><br />
+<a href="html/libxml-parser.html#entityDeclSAXFunc">entityDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<a href="html/libxml-SAX.html#externalSubset">externalSubset</a><br />
+<a href="html/libxml-parser.html#externalSubsetSAXFunc">externalSubsetSAXFunc</a><br />
+<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-nanoftp.html#ftpDataCallback">ftpDataCallback</a><br />
+<a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+<a href="html/libxml-SAX.html#getColumnNumber">getColumnNumber</a><br />
+<a href="html/libxml-SAX.html#getEntity">getEntity</a><br />
+<a href="html/libxml-parser.html#getEntitySAXFunc">getEntitySAXFunc</a><br />
+<a href="html/libxml-SAX.html#getLineNumber">getLineNumber</a><br />
+<a href="html/libxml-SAX.html#getNamespace">getNamespace</a><br />
+<a href="html/libxml-SAX.html#getParameterEntity">getParameterEntity</a><br />
+<a href="html/libxml-parser.html#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a><br />
+<a href="html/libxml-SAX.html#getPublicId">getPublicId</a><br />
+<a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-SAX.html#globalNamespace">globalNamespace</a><br />
+<a href="html/libxml-SAX.html#hasExternalSubset">hasExternalSubset</a><br />
+<a href="html/libxml-parser.html#hasExternalSubsetSAXFunc">hasExternalSubsetSAXFunc</a><br />
+<a href="html/libxml-SAX.html#hasInternalSubset">hasInternalSubset</a><br />
+<a href="html/libxml-parser.html#hasInternalSubsetSAXFunc">hasInternalSubsetSAXFunc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-SAX.html#internalSubset">internalSubset</a><br />
+<a href="html/libxml-parser.html#internalSubsetSAXFunc">internalSubsetSAXFunc</a><br />
+<a href="html/libxml-SAX.html#isStandalone">isStandalone</a><br />
+<a href="html/libxml-parser.html#isStandaloneSAXFunc">isStandaloneSAXFunc</a><br />
+<a href="html/libxml-SAX.html#namespaceDecl">namespaceDecl</a><br />
+<a href="html/libxml-SAX.html#notationDecl">notationDecl</a><br />
+<a href="html/libxml-parser.html#notationDeclSAXFunc">notationDeclSAXFunc</a><br />
+<a href="html/libxml-SAX.html#processingInstruction">processingInstruction</a><br />
+<a href="html/libxml-parser.html#processingInstructionSAXFunc">processingInstructionSAXFunc</a><br />
+<a href="html/libxml-SAX.html#reference">reference</a><br />
+<a href="html/libxml-parser.html#referenceSAXFunc">referenceSAXFunc</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-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-SAX.html#setNamespace">setNamespace</a><br />
+<a href="html/libxml-SAX.html#startDocument">startDocument</a><br />
+<a href="html/libxml-parser.html#startDocumentSAXFunc">startDocumentSAXFunc</a><br />
+<a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+<a href="html/libxml-SAX.html#unparsedEntityDecl">unparsedEntityDecl</a><br />
+<a href="html/libxml-parser.html#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</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-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
+<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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</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-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-c14n.html#xmlC14NIsVisibleCallback">xmlC14NIsVisibleCallback</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogFreeLocal">xmlCatalogFreeLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtGetLastError">xmlCtxtGetLastError</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
+<a href="html/libxml-xmlIO.html#xmlFileClose">xmlFileClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
+<a href="html/libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a><br />
+<a href="html/libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a><br />
+<a href="html/libxml-parser.html#xmlGetFeature">xmlGetFeature</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-hash.html#xmlHashCopier">xmlHashCopier</a><br />
+<a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
+<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPClose">xmlIOFTPClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPRead">xmlIOFTPRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPClose">xmlIOHTTPClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPRead">xmlIOHTTPRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</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-list.html#xmlListPushBack">xmlListPushBack</a><br />
+<a href="html/libxml-list.html#xmlListPushFront">xmlListPushFront</a><br />
+<a href="html/libxml-list.html#xmlListRemoveAll">xmlListRemoveAll</a><br />
+<a href="html/libxml-list.html#xmlListRemoveFirst">xmlListRemoveFirst</a><br />
+<a href="html/libxml-list.html#xmlListRemoveLast">xmlListRemoveLast</a><br />
+<a href="html/libxml-list.html#xmlListReverseSearch">xmlListReverseSearch</a><br />
+<a href="html/libxml-list.html#xmlListSearch">xmlListSearch</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemFree">xmlMemFree</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPClose">xmlNanoFTPClose</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCloseConnection">xmlNanoFTPCloseConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnect">xmlNanoFTPConnect</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPQuit">xmlNanoFTPQuit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPClose">xmlNanoHTTPClose</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPEncoding">xmlNanoHTTPEncoding</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPMimeType">xmlNanoHTTPMimeType</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRedir">xmlNanoHTTPRedir</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+<a href="html/libxml-parser.html#xmlReadIO">xmlReadIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecCallbacks">xmlRegExecCallbacks</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-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#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2AttributeDecl">xmlSAX2AttributeDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2CDataBlock">xmlSAX2CDataBlock</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Characters">xmlSAX2Characters</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2CheckNamespace">xmlSAX2CheckNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Comment">xmlSAX2Comment</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ElementDecl">xmlSAX2ElementDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndDocument">xmlSAX2EndDocument</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElement">xmlSAX2EndElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElementNs">xmlSAX2EndElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EntityDecl">xmlSAX2EntityDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ExternalSubset">xmlSAX2ExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetColumnNumber">xmlSAX2GetColumnNumber</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetEntity">xmlSAX2GetEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetLineNumber">xmlSAX2GetLineNumber</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetNamespace">xmlSAX2GetNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetParameterEntity">xmlSAX2GetParameterEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetPublicId">xmlSAX2GetPublicId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GlobalNamespace">xmlSAX2GlobalNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2HasExternalSubset">xmlSAX2HasExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2HasInternalSubset">xmlSAX2HasInternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InternalSubset">xmlSAX2InternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IsStandalone">xmlSAX2IsStandalone</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2NamespaceDecl">xmlSAX2NamespaceDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2NotationDecl">xmlSAX2NotationDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ProcessingInstruction">xmlSAX2ProcessingInstruction</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Reference">xmlSAX2Reference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetNamespace">xmlSAX2SetNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartDocument">xmlSAX2StartDocument</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2UnparsedEntityDecl">xmlSAX2UnparsedEntityDecl</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+<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#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-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 />
+<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSetGenericErrorFunc">xmlThrDefSetGenericErrorFunc</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSetStructuredErrorFunc">xmlThrDefSetStructuredErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncLookup">xmlXPathRegisterFuncLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableLookup">xmlXPathRegisterVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapExternal">xmlXPathWrapExternal</a><br />
+</p><h2>Type void **:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetErrorHandler">xmlTextReaderGetErrorHandler</a><br />
+</p><h2>Type xlinkActuate *:</h2><p><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+</p><h2>Type xlinkHandlerPtr:</h2><p><a href="html/libxml-xlink.html#xlinkSetDefaultHandler">xlinkSetDefaultHandler</a><br />
+</p><h2>Type xlinkNodeDetectFunc:</h2><p><a href="html/libxml-xlink.html#xlinkSetDefaultDetect">xlinkSetDefaultDetect</a><br />
+</p><h2>Type xlinkShow *:</h2><p><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
+</p><h2>Type xmlAttrPtr:</h2><p><a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
+<a href="html/libxml-tree.html#xmlCopyProp">xmlCopyProp</a><br />
+<a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttr">xmlDebugDumpAttr</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a><br />
+<a href="html/libxml-tree.html#xmlFreeProp">xmlFreeProp</a><br />
+<a href="html/libxml-tree.html#xmlFreePropList">xmlFreePropList</a><br />
+<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-valid.html#xmlRemoveID">xmlRemoveID</a><br />
+<a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
+<a href="html/libxml-valid.html#xmlRemoveRef">xmlRemoveRef</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
+</p><h2>Type xmlAttributeDefault:</h2><p><a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+</p><h2>Type xmlAttributePtr:</h2><p><a href="html/libxml-valid.html#xmlDumpAttributeDecl">xmlDumpAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+</p><h2>Type xmlAttributeTablePtr:</h2><p><a href="html/libxml-valid.html#xmlCopyAttributeTable">xmlCopyAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlDumpAttributeTable">xmlDumpAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeAttributeTable">xmlFreeAttributeTable</a><br />
+</p><h2>Type xmlAttributeType:</h2><p><a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
+</p><h2>Type xmlAutomataPtr:</h2><p><a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataGetInitState">xmlAutomataGetInitState</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataIsDeterminist">xmlAutomataIsDeterminist</a><br />
+<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#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
+<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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewState">xmlAutomataNewState</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-xmlautomata.html#xmlAutomataSetFinalState">xmlAutomataSetFinalState</a><br />
+<a href="html/libxml-xmlautomata.html#xmlFreeAutomata">xmlFreeAutomata</a><br />
+</p><h2>Type xmlAutomataStatePtr:</h2><p><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#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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</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-xmlautomata.html#xmlAutomataSetFinalState">xmlAutomataSetFinalState</a><br />
+</p><h2>Type xmlBufferAllocationScheme:</h2><p><a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+<a href="html/libxml-globals.html#xmlThrDefBufferAllocScheme">xmlThrDefBufferAllocScheme</a><br />
+</p><h2>Type xmlBufferPtr:</h2><p><a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
+<a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
+<a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
+<a href="html/libxml-tree.html#xmlBufferCCat">xmlBufferCCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferCat">xmlBufferCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferDump">xmlBufferDump</a><br />
+<a href="html/libxml-tree.html#xmlBufferEmpty">xmlBufferEmpty</a><br />
+<a href="html/libxml-tree.html#xmlBufferFree">xmlBufferFree</a><br />
+<a href="html/libxml-tree.html#xmlBufferGrow">xmlBufferGrow</a><br />
+<a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
+<a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteChar">xmlBufferWriteChar</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-valid.html#xmlDumpAttributeDecl">xmlDumpAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlDumpAttributeTable">xmlDumpAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlDumpElementDecl">xmlDumpElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlDumpElementTable">xmlDumpElementTable</a><br />
+<a href="html/libxml-entities.html#xmlDumpEntitiesTable">xmlDumpEntitiesTable</a><br />
+<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-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 />
+<a href="html/libxml-xmlsave.html#xmlSaveToBuffer">xmlSaveToBuffer</a><br />
+</p><h2>Type xmlC14NIsVisibleCallback:</h2><p><a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</p><h2>Type xmlCatalogAllow:</h2><p><a href="html/libxml-catalog.html#xmlCatalogSetDefaults">xmlCatalogSetDefaults</a><br />
+</p><h2>Type xmlCatalogPrefer:</h2><p><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+</p><h2>Type xmlCatalogPtr:</h2><p><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogDump">xmlACatalogDump</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolvePublic">xmlACatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveSystem">xmlACatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveURI">xmlACatalogResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogIsEmpty">xmlCatalogIsEmpty</a><br />
+<a href="html/libxml-catalog.html#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlFreeCatalog">xmlFreeCatalog</a><br />
+</p><h2>Type xmlChar:</h2><p><a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+</p><h2>Type xmlChar *:</h2><p><a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDoc">docbParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<a href="html/libxml-SAX.html#entityDecl">entityDecl</a><br />
+<a href="html/libxml-parser.html#entityDeclSAXFunc">entityDeclSAXFunc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDoc">htmlParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-parserInternals.html#xmlCopyChar">xmlCopyChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlCopyCharMultiByte">xmlCopyCharMultiByte</a><br />
+<a href="html/libxml-hash.html#xmlHashCopier">xmlHashCopier</a><br />
+<a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
+<a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-parser.html#xmlParseDoc">xmlParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a><br />
+<a href="html/libxml-parser.html#xmlRecoverDoc">xmlRecoverDoc</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2CheckNamespace">xmlSAX2CheckNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EntityDecl">xmlSAX2EntityDecl</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapString">xmlXPathWrapString</a><br />
+</p><h2>Type xmlChar **:</h2><p><a href="html/libxml-HTMLtree.html#htmlDocDumpMemory">htmlDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+<a href="html/libxml-parserInternals.html#xmlNamespaceParseQName">xmlNamespaceParseQName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+</p><h2>Type xmlCharEncoding:</h2><p><a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
+<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchEncoding">xmlSwitchEncoding</a><br />
+</p><h2>Type xmlCharEncodingHandler *:</h2><p><a href="html/libxml-encoding.html#xmlCharEncCloseFunc">xmlCharEncCloseFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+</p><h2>Type xmlCharEncodingHandlerPtr:</h2><p><a href="html/libxml-xmlIO.html#xmlAllocOutputBuffer">xmlAllocOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-encoding.html#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchToEncoding">xmlSwitchToEncoding</a><br />
+</p><h2>Type xmlCharEncodingInputFunc:</h2><p><a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+</p><h2>Type xmlCharEncodingOutputFunc:</h2><p><a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+</p><h2>Type xmlDeregisterNodeFunc:</h2><p><a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlThrDefDeregisterNodeDefault">xmlThrDefDeregisterNodeDefault</a><br />
+</p><h2>Type xmlDict *:</h2><p><a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+</p><h2>Type xmlDictPtr:</h2><p><a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+<a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</a><br />
+<a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
+<a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+<a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</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 />
+<a href="html/libxml-HTMLtree.html#htmlDocDump">htmlDocDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocDumpMemory">htmlDocDumpMemory</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-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-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-entities.html#xmlAddDocEntity">xmlAddDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlAddDtdEntity">xmlAddDtdEntity</a><br />
+<a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
+<a href="html/libxml-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 />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-tree.html#xmlCreateIntSubset">xmlCreateIntSubset</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocument">xmlDebugDumpDocument</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpEntities">xmlDebugDumpEntities</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlDocDump">xmlDocDump</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-entities.html#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a><br />
+<a href="html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a><br />
+<a href="html/libxml-tree.html#xmlGetDocCompressMode">xmlGetDocCompressMode</a><br />
+<a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetDtdEntity">xmlGetDtdEntity</a><br />
+<a href="html/libxml-valid.html#xmlGetID">xmlGetID</a><br />
+<a href="html/libxml-tree.html#xmlGetIntSubset">xmlGetIntSubset</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</a><br />
+<a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</a><br />
+<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-tree.html#xmlNewCDataBlock">xmlNewCDataBlock</a><br />
+<a href="html/libxml-tree.html#xmlNewCharRef">xmlNewCharRef</a><br />
+<a href="html/libxml-tree.html#xmlNewDocComment">xmlNewDocComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocFragment">xmlNewDocFragment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewDocProp">xmlNewDocProp</a><br />
+<a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocText">xmlNewDocText</a><br />
+<a href="html/libxml-tree.html#xmlNewDocTextLen">xmlNewDocTextLen</a><br />
+<a href="html/libxml-tree.html#xmlNewDtd">xmlNewDtd</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-tree.html#xmlNewReference">xmlNewReference</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderWalker">xmlReaderWalker</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</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 />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
+<a href="html/libxml-valid.html#xmlRemoveID">xmlRemoveID</a><br />
+<a href="html/libxml-valid.html#xmlRemoveRef">xmlRemoveRef</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</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#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+<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-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 />
+<a href="html/libxml-tree.html#xmlSetListDoc">xmlSetListDoc</a><br />
+<a href="html/libxml-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+<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#xmlValidateElement">xmlValidateElement</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#xmlValidateNotationUse">xmlValidateNotationUse</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#xmlValidatePopElement">xmlValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeNewContext">xmlXIncludeNewContext</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+</p><h2>Type xmlDocPtr *:</h2><p><a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+</p><h2>Type xmlDtdPtr:</h2><p><a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddElementDecl">xmlAddElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddNotationDecl">xmlAddNotationDecl</a><br />
+<a href="html/libxml-tree.html#xmlCopyDtd">xmlCopyDtd</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDTD">xmlDebugDumpDTD</a><br />
+<a href="html/libxml-tree.html#xmlFreeDtd">xmlFreeDtd</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+<a href="html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd</a><br />
+</p><h2>Type xmlElementContent *:</h2><p><a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+</p><h2>Type xmlElementContentPtr:</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-valid.html#xmlAddElementDecl">xmlAddElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlCopyElementContent">xmlCopyElementContent</a><br />
+<a href="html/libxml-valid.html#xmlFreeElementContent">xmlFreeElementContent</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ElementDecl">xmlSAX2ElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+<a href="html/libxml-valid.html#xmlSprintfElementContent">xmlSprintfElementContent</a><br />
+</p><h2>Type xmlElementContentPtr *:</h2><p><a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+</p><h2>Type xmlElementContentType:</h2><p><a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
+</p><h2>Type xmlElementPtr:</h2><p><a href="html/libxml-valid.html#xmlDumpElementDecl">xmlDumpElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidBuildContentModel">xmlValidBuildContentModel</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+</p><h2>Type xmlElementTablePtr:</h2><p><a href="html/libxml-valid.html#xmlCopyElementTable">xmlCopyElementTable</a><br />
+<a href="html/libxml-valid.html#xmlDumpElementTable">xmlDumpElementTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeElementTable">xmlFreeElementTable</a><br />
+</p><h2>Type xmlElementTypeVal:</h2><p><a href="html/libxml-valid.html#xmlAddElementDecl">xmlAddElementDecl</a><br />
+</p><h2>Type xmlEntitiesTablePtr:</h2><p><a href="html/libxml-entities.html#xmlCopyEntitiesTable">xmlCopyEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlDumpEntitiesTable">xmlDumpEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlFreeEntitiesTable">xmlFreeEntitiesTable</a><br />
+</p><h2>Type xmlEntityPtr:</h2><p><a href="html/libxml-entities.html#xmlDumpEntityDecl">xmlDumpEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
+</p><h2>Type xmlEntityReferenceFunc:</h2><p><a href="html/libxml-parserInternals.html#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a><br />
+</p><h2>Type xmlEnumerationPtr:</h2><p><a href="html/libxml-SAX.html#attributeDecl">attributeDecl</a><br />
+<a href="html/libxml-parser.html#attributeDeclSAXFunc">attributeDeclSAXFunc</a><br />
+<a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
+<a href="html/libxml-valid.html#xmlFreeEnumeration">xmlFreeEnumeration</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2AttributeDecl">xmlSAX2AttributeDecl</a><br />
+</p><h2>Type xmlEnumerationPtr *:</h2><p><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+</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 xmlExternalEntityLoader:</h2><p><a href="html/libxml-parser.html#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</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 />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+</p><h2>Type xmlGenericErrorFunc:</h2><p><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSetGenericErrorFunc">xmlThrDefSetGenericErrorFunc</a><br />
+</p><h2>Type xmlGenericErrorFunc *:</h2><p><a href="html/libxml-xmlerror.html#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a><br />
+</p><h2>Type xmlGlobalStatePtr:</h2><p><a href="html/libxml-globals.html#xmlInitializeGlobalState">xmlInitializeGlobalState</a><br />
+</p><h2>Type xmlHashCopier:</h2><p><a href="html/libxml-hash.html#xmlHashCopy">xmlHashCopy</a><br />
+</p><h2>Type xmlHashDeallocator:</h2><p><a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+</p><h2>Type xmlHashScanner:</h2><p><a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+</p><h2>Type xmlHashScannerFull:</h2><p><a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+</p><h2>Type xmlHashTablePtr:</h2><p><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-hash.html#xmlHashCopy">xmlHashCopy</a><br />
+<a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</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 />
+<a href="html/libxml-hash.html#xmlHashQLookup">xmlHashQLookup</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup2">xmlHashQLookup2</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup3">xmlHashQLookup3</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-hash.html#xmlHashSize">xmlHashSize</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+</p><h2>Type xmlIDTablePtr:</h2><p><a href="html/libxml-valid.html#xmlFreeIDTable">xmlFreeIDTable</a><br />
+</p><h2>Type xmlInputCloseCallback:</h2><p><a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-parser.html#xmlReadIO">xmlReadIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+</p><h2>Type xmlInputMatchCallback:</h2><p><a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+</p><h2>Type xmlInputOpenCallback:</h2><p><a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+</p><h2>Type xmlInputReadCallback:</h2><p><a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-parser.html#xmlReadIO">xmlReadIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+</p><h2>Type xmlLinkPtr:</h2><p><a href="html/libxml-list.html#xmlLinkGetData">xmlLinkGetData</a><br />
+<a href="html/libxml-list.html#xmlListDeallocator">xmlListDeallocator</a><br />
+</p><h2>Type xmlListDataCompare:</h2><p><a href="html/libxml-list.html#xmlListCreate">xmlListCreate</a><br />
+</p><h2>Type xmlListDeallocator:</h2><p><a href="html/libxml-list.html#xmlListCreate">xmlListCreate</a><br />
+</p><h2>Type xmlListPtr:</h2><p><a href="html/libxml-list.html#xmlListAppend">xmlListAppend</a><br />
+<a href="html/libxml-list.html#xmlListClear">xmlListClear</a><br />
+<a href="html/libxml-list.html#xmlListCopy">xmlListCopy</a><br />
+<a href="html/libxml-list.html#xmlListDelete">xmlListDelete</a><br />
+<a href="html/libxml-list.html#xmlListEmpty">xmlListEmpty</a><br />
+<a href="html/libxml-list.html#xmlListEnd">xmlListEnd</a><br />
+<a href="html/libxml-list.html#xmlListFront">xmlListFront</a><br />
+<a href="html/libxml-list.html#xmlListInsert">xmlListInsert</a><br />
+<a href="html/libxml-list.html#xmlListMerge">xmlListMerge</a><br />
+<a href="html/libxml-list.html#xmlListPopBack">xmlListPopBack</a><br />
+<a href="html/libxml-list.html#xmlListPopFront">xmlListPopFront</a><br />
+<a href="html/libxml-list.html#xmlListPushBack">xmlListPushBack</a><br />
+<a href="html/libxml-list.html#xmlListPushFront">xmlListPushFront</a><br />
+<a href="html/libxml-list.html#xmlListRemoveAll">xmlListRemoveAll</a><br />
+<a href="html/libxml-list.html#xmlListRemoveFirst">xmlListRemoveFirst</a><br />
+<a href="html/libxml-list.html#xmlListRemoveLast">xmlListRemoveLast</a><br />
+<a href="html/libxml-list.html#xmlListReverse">xmlListReverse</a><br />
+<a href="html/libxml-list.html#xmlListReverseSearch">xmlListReverseSearch</a><br />
+<a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<a href="html/libxml-list.html#xmlListSearch">xmlListSearch</a><br />
+<a href="html/libxml-list.html#xmlListSize">xmlListSize</a><br />
+<a href="html/libxml-list.html#xmlListSort">xmlListSort</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+</p><h2>Type xmlListWalker:</h2><p><a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+</p><h2>Type xmlLocationSetPtr:</h2><p><a href="html/libxml-xpointer.html#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrWrapLocationSet">xmlXPtrWrapLocationSet</a><br />
+</p><h2>Type xmlMallocFunc:</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 xmlMallocFunc *:</h2><p><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+</p><h2>Type xmlMutexPtr:</h2><p><a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
+<a href="html/libxml-threads.html#xmlMutexLock">xmlMutexLock</a><br />
+<a href="html/libxml-threads.html#xmlMutexUnlock">xmlMutexUnlock</a><br />
+</p><h2>Type xmlNode *:</h2><p><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</p><h2>Type xmlNodePtr:</h2><p><a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-parserInternals.html#nodePush">nodePush</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-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
+<a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddChildList">xmlAddChildList</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-c14n.html#xmlC14NIsVisibleCallback">xmlC14NIsVisibleCallback</a><br />
+<a href="html/libxml-tree.html#xmlCopyProp">xmlCopyProp</a><br />
+<a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
+<a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
+<a href="html/libxml-tree.html#xmlFreeNodeList">xmlFreeNodeList</a><br />
+<a href="html/libxml-tree.html#xmlGetLastChild">xmlGetLastChild</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
+<a href="html/libxml-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
+<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-debugXML.html#xmlLsCountNode">xmlLsCountNode</a><br />
+<a href="html/libxml-debugXML.html#xmlLsOneNode">xmlLsOneNode</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContent">xmlNodeAddContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-tree.html#xmlNodeIsText">xmlNodeIsText</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetBase">xmlNodeSetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContentLen">xmlNodeSetContentLen</a><br />
+<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-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePopElement">xmlRelaxNGValidatePopElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</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#xmlSetListDoc">xmlSetListDoc</a><br />
+<a href="html/libxml-tree.html#xmlSetNs">xmlSetNs</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-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
+<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 />
+<a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintNode">xmlShellPrintNode</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+<a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+<a href="html/libxml-tree.html#xmlTextConcat">xmlTextConcat</a><br />
+<a href="html/libxml-tree.html#xmlTextMerge">xmlTextMerge</a><br />
+<a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
+<a href="html/libxml-tree.html#xmlUnsetNsProp">xmlUnsetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlUnsetProp">xmlUnsetProp</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateElement">xmlValidateElement</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#xmlValidatePopElement">xmlValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+<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 />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToNumber">xmlXPathCastNodeToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToString">xmlXPathCastNodeToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCmpNodes">xmlXPathCmpNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<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#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextChild">xmlXPathNextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeading">xmlXPathNodeLeading</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetContains">xmlXPathNodeSetContains</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodes">xmlXPtrNewRangeNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a><br />
+</p><h2>Type xmlNodePtr *:</h2><p><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+</p><h2>Type xmlNodeSetPtr:</h2><p><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 />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToBoolean">xmlXPathCastNodeSetToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToNumber">xmlXPathCastNodeSetToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToString">xmlXPathCastNodeSetToString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSet">xmlXPathFreeNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</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#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeading">xmlXPathNodeLeading</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetContains">xmlXPathNodeSetContains</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetSort">xmlXPathNodeSetSort</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#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodeSet">xmlXPtrNewLocationSetNodeSet</a><br />
+</p><h2>Type xmlNotationPtr:</h2><p><a href="html/libxml-valid.html#xmlDumpNotationDecl">xmlDumpNotationDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+</p><h2>Type xmlNotationTablePtr:</h2><p><a href="html/libxml-valid.html#xmlCopyNotationTable">xmlCopyNotationTable</a><br />
+<a href="html/libxml-valid.html#xmlDumpNotationTable">xmlDumpNotationTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeNotationTable">xmlFreeNotationTable</a><br />
+</p><h2>Type xmlNsPtr:</h2><p><a href="html/libxml-tree.html#xmlCopyNamespace">xmlCopyNamespace</a><br />
+<a href="html/libxml-tree.html#xmlCopyNamespaceList">xmlCopyNamespaceList</a><br />
+<a href="html/libxml-tree.html#xmlFreeNs">xmlFreeNs</a><br />
+<a href="html/libxml-tree.html#xmlFreeNsList">xmlFreeNsList</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
+<a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+<a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlSetNs">xmlSetNs</a><br />
+<a href="html/libxml-tree.html#xmlSetNsProp">xmlSetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlUnsetNsProp">xmlUnsetNsProp</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+</p><h2>Type xmlOutputBufferPtr:</h2><p><a href="html/libxml-HTMLtree.html#htmlDocContentDumpFormatOutput">htmlDocContentDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocContentDumpOutput">htmlDocContentDumpOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferFlush">xmlOutputBufferFlush</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+</p><h2>Type xmlOutputCloseCallback:</h2><p><a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+</p><h2>Type xmlOutputMatchCallback:</h2><p><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+</p><h2>Type xmlOutputOpenCallback:</h2><p><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+</p><h2>Type xmlOutputWriteCallback:</h2><p><a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+</p><h2>Type xmlParserCtxtPtr:</h2><p><a href="html/libxml-parserInternals.html#inputPop">inputPop</a><br />
+<a href="html/libxml-parserInternals.html#inputPush">inputPush</a><br />
+<a href="html/libxml-parserInternals.html#namePop">namePop</a><br />
+<a href="html/libxml-parserInternals.html#namePush">namePush</a><br />
+<a href="html/libxml-parserInternals.html#nodePop">nodePop</a><br />
+<a href="html/libxml-parserInternals.html#nodePush">nodePush</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-parser.html#xmlClearParserCtxt">xmlClearParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadDoc">xmlCtxtReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFile">xmlCtxtReadFile</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadMemory">xmlCtxtReadMemory</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReset">xmlCtxtReset</a><br />
+<a href="html/libxml-parser.html#xmlCtxtResetPush">xmlCtxtResetPush</a><br />
+<a href="html/libxml-parser.html#xmlCtxtUseOptions">xmlCtxtUseOptions</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlErrMemory">xmlErrMemory</a><br />
+<a href="html/libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlFreeParserCtxt">xmlFreeParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlGetFeature">xmlGetFeature</a><br />
+<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-parser.html#xmlInitParserCtxt">xmlInitParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</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 />
+<a href="html/libxml-parserInternals.html#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputFromFile">xmlNewInputFromFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputStream">xmlNewInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewStringInputStream">xmlNewStringInputStream</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<a href="html/libxml-parserInternals.html#xmlNextChar">xmlNextChar</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseContent">xmlParseContent</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncName">xmlParseEncName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEndTag">xmlParseEndTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMisc">xmlParseMisc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNmtoken">xmlParseNmtoken</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePI">xmlParsePI</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePITarget">xmlParsePITarget</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePubidLiteral">xmlParsePubidLiteral</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSystemLiteral">xmlParseSystemLiteral</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionInfo">xmlParseVersionInfo</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionNum">xmlParseVersionNum</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseXMLDecl">xmlParseXMLDecl</a><br />
+<a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-parser.html#xmlSetFeature">xmlSetFeature</a><br />
+<a href="html/libxml-parser.html#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a><br />
+<a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-parser.html#xmlStopParser">xmlStopParser</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchEncoding">xmlSwitchEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchToEncoding">xmlSwitchToEncoding</a><br />
+</p><h2>Type xmlParserInputBufferPtr:</h2><p><a href="html/libxml-xmlIO.html#xmlFreeParserInputBuffer">xmlFreeParserInputBuffer</a><br />
+<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+</p><h2>Type xmlParserInputPtr:</h2><p><a href="html/libxml-parserInternals.html#inputPush">inputPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-parserInternals.html#xmlFreeInputStream">xmlFreeInputStream</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserInputShrink">xmlParserInputShrink</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileContext">xmlParserPrintFileContext</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileInfo">xmlParserPrintFileInfo</a><br />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
+</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 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#xmlPatternMatch">xmlPatternMatch</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 />
+<a href="html/libxml-threads.html#xmlRMutexUnlock">xmlRMutexUnlock</a><br />
+</p><h2>Type xmlReallocFunc:</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 xmlReallocFunc *:</h2><p><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+</p><h2>Type xmlRefTablePtr:</h2><p><a href="html/libxml-valid.html#xmlFreeRefTable">xmlFreeRefTable</a><br />
+</p><h2>Type xmlRegExecCallbacks:</h2><p><a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
+</p><h2>Type xmlRegExecCtxtPtr:</h2><p><a href="html/libxml-xmlregexp.html#xmlRegExecCallbacks">xmlRegExecCallbacks</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a><br />
+</p><h2>Type xmlRegexpPtr:</h2><p><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#xmlRegexpExec">xmlRegexpExec</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpPrint">xmlRegexpPrint</a><br />
+</p><h2>Type xmlRegisterNodeFunc:</h2><p><a href="html/libxml-globals.html#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlThrDefRegisterNodeDefault">xmlThrDefRegisterNodeDefault</a><br />
+</p><h2>Type xmlRelaxNGParserCtxtPtr:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGFreeParserCtxt">xmlRelaxNGFreeParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<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#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a><br />
+</p><h2>Type xmlRelaxNGPtr:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGDump">xmlRelaxNGDump</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGDumpTree">xmlRelaxNGDumpTree</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFree">xmlRelaxNGFree</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewValidCtxt">xmlRelaxNGNewValidCtxt</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
+</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#xmlRelaxNGValidateDoc">xmlRelaxNGValidateDoc</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePopElement">xmlRelaxNGValidatePopElement</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
+</p><h2>Type xmlRelaxNGValidityErrorFunc:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a><br />
+</p><h2>Type xmlRelaxNGValidityErrorFunc *:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
+</p><h2>Type xmlRelaxNGValidityWarningFunc:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a><br />
+</p><h2>Type xmlRelaxNGValidityWarningFunc *:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
+</p><h2>Type xmlSAXHandler *:</h2><p><a href="html/libxml-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDocbDefaultSAXHandler">xmlSAX2InitDocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitHtmlDefaultSAXHandler">xmlSAX2InitHtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXVersion">xmlSAXVersion</a><br />
+</p><h2>Type xmlSAXHandlerPtr:</h2><p><a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDTD">xmlSAXParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+</p><h2>Type xmlSAXHandlerV1 *:</h2><p><a href="html/libxml-SAX.html#initdocbDefaultSAXHandler">initdocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#inithtmlDefaultSAXHandler">inithtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+</p><h2>Type xmlSAXLocatorPtr:</h2><p><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 />
+</p><h2>Type xmlSaveCtxtPtr:</h2><p><a href="html/libxml-xmlsave.html#xmlSaveClose">xmlSaveClose</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveFlush">xmlSaveFlush</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
+</p><h2>Type xmlSchemaFacetPtr:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeFacet">xmlSchemaFreeFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+</p><h2>Type xmlSchemaParserCtxtPtr:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaFreeParserCtxt">xmlSchemaFreeParserCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
+</p><h2>Type xmlSchemaPtr:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaDump">xmlSchemaDump</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaFree">xmlSchemaFree</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaNewValidCtxt">xmlSchemaNewValidCtxt</a><br />
+</p><h2>Type xmlSchemaTypePtr:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaFreeType">xmlSchemaFreeType</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+</p><h2>Type xmlSchemaValPtr:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaCompareValues">xmlSchemaCompareValues</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeValue">xmlSchemaFreeValue</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+</p><h2>Type xmlSchemaValPtr *:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+</p><h2>Type xmlSchemaValidCtxtPtr:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaFreeValidCtxt">xmlSchemaFreeValidCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+</p><h2>Type xmlSchemaValidityErrorFunc:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
+</p><h2>Type xmlSchemaValidityWarningFunc:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
+</p><h2>Type 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 />
+<a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+<a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+</p><h2>Type xmlShellReadlineFunc:</h2><p><a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+</p><h2>Type xmlStrdupFunc:</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 xmlStrdupFunc *:</h2><p><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+</p><h2>Type xmlStructuredErrorFunc:</h2><p><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 />
+</p><h2>Type xmlTextReaderErrorFunc *:</h2><p><a href="html/libxml-xmlreader.html#xmlTextReaderGetErrorHandler">xmlTextReaderGetErrorHandler</a><br />
+</p><h2>Type xmlTextReaderLocatorPtr:</h2><p><a href="html/libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorBaseURI">xmlTextReaderLocatorBaseURI</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorLineNumber">xmlTextReaderLocatorLineNumber</a><br />
+</p><h2>Type xmlTextReaderPtr:</h2><p><a href="html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderAttributeCount">xmlTextReaderAttributeCount</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderBaseUri">xmlTextReaderBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstBaseUri">xmlTextReaderConstBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstLocalName">xmlTextReaderConstLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstNamespaceUri">xmlTextReaderConstNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstPrefix">xmlTextReaderConstPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderDepth">xmlTextReaderDepth</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttribute">xmlTextReaderGetAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNs">xmlTextReaderGetAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetErrorHandler">xmlTextReaderGetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetParserProp">xmlTextReaderGetParserProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderHasAttributes">xmlTextReaderHasAttributes</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderHasValue">xmlTextReaderHasValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsDefault">xmlTextReaderIsDefault</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsEmptyElement">xmlTextReaderIsEmptyElement</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocalName">xmlTextReaderLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttribute">xmlTextReaderMoveToAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNo">xmlTextReaderMoveToAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNs">xmlTextReaderMoveToAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToElement">xmlTextReaderMoveToElement</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToFirstAttribute">xmlTextReaderMoveToFirstAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToNextAttribute">xmlTextReaderMoveToNextAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderName">xmlTextReaderName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNamespaceUri">xmlTextReaderNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPrefix">xmlTextReaderPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderQuoteChar">xmlTextReaderQuoteChar</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadState">xmlTextReaderReadState</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+<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#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderValue">xmlTextReaderValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
+</p><h2>Type xmlTextWriterPtr:</h2><p><a href="html/libxml-xmlwriter.html#xmlFreeTextWriter">xmlFreeTextWriter</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndAttribute">xmlTextWriterEndAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndCDATA">xmlTextWriterEndCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndComment">xmlTextWriterEndComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTD">xmlTextWriterEndDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDAttlist">xmlTextWriterEndDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDElement">xmlTextWriterEndDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDEntity">xmlTextWriterEndDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndElement">xmlTextWriterEndElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndPI">xmlTextWriterEndPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterFlush">xmlTextWriterFlush</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartComment">xmlTextWriterStartComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTD">xmlTextWriterStartDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDAttlist">xmlTextWriterStartDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDElement">xmlTextWriterStartDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElement">xmlTextWriterStartElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElementNS">xmlTextWriterStartElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartPI">xmlTextWriterStartPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteAttribute">xmlTextWriterWriteAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteAttributeNS">xmlTextWriterWriteAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteCDATA">xmlTextWriterWriteCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteComment">xmlTextWriterWriteComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTD">xmlTextWriterWriteDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDAttlist">xmlTextWriterWriteDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDElement">xmlTextWriterWriteDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDEntity">xmlTextWriterWriteDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntityContents">xmlTextWriterWriteDTDExternalEntityContents</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDInternalEntity">xmlTextWriterWriteDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDNotation">xmlTextWriterWriteDTDNotation</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteElement">xmlTextWriterWriteElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteElementNS">xmlTextWriterWriteElementNS</a><br />
+<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 />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDAttlist">xmlTextWriterWriteFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDElement">xmlTextWriterWriteFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElementNS">xmlTextWriterWriteFormatElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatPI">xmlTextWriterWriteFormatPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatRaw">xmlTextWriterWriteFormatRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatString">xmlTextWriterWriteFormatString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWritePI">xmlTextWriterWritePI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRaw">xmlTextWriterWriteRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteString">xmlTextWriterWriteString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttribute">xmlTextWriterWriteVFormatAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatCDATA">xmlTextWriterWriteVFormatCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatComment">xmlTextWriterWriteVFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDElement">xmlTextWriterWriteVFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElement">xmlTextWriterWriteVFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElementNS">xmlTextWriterWriteVFormatElementNS</a><br />
+<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>Type xmlURIPtr:</h2><p><a href="html/libxml-uri.html#xmlFreeURI">xmlFreeURI</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 />
+</p><h2>Type xmlValidCtxtPtr:</h2><p><a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddElementDecl">xmlAddElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+<a href="html/libxml-valid.html#xmlAddNotationDecl">xmlAddNotationDecl</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-valid.html#xmlFreeValidCtxt">xmlFreeValidCtxt</a><br />
+<a href="html/libxml-valid.html#xmlValidBuildContentModel">xmlValidBuildContentModel</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</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#xmlValidateElement">xmlValidateElement</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#xmlValidateNotationUse">xmlValidateNotationUse</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#xmlValidatePopElement">xmlValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushCData">xmlValidatePushCData</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+</p><h2>Type xmlXIncludeCtxtPtr:</h2><p><a href="html/libxml-xinclude.html#xmlXIncludeFreeContext">xmlXIncludeFreeContext</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessNode">xmlXIncludeProcessNode</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</a><br />
+</p><h2>Type xmlXPathCompExprPtr:</h2><p><a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeCompExpr">xmlXPathFreeCompExpr</a><br />
+</p><h2>Type xmlXPathContextPtr:</h2><p><a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCtxtCompile">xmlXPathCtxtCompile</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeContext">xmlXPathFreeContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNsLookup">xmlXPathNsLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterAllFunctions">xmlXPathRegisterAllFunctions</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncLookup">xmlXPathRegisterFuncLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterNs">xmlXPathRegisterNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariable">xmlXPathRegisterVariable</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableLookup">xmlXPathRegisterVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableNS">xmlXPathRegisterVariableNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredFuncsCleanup">xmlXPathRegisteredFuncsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredNsCleanup">xmlXPathRegisteredNsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredVariablesCleanup">xmlXPathRegisteredVariablesCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookup">xmlXPathVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupNS">xmlXPathVariableLookupNS</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+</p><h2>Type xmlXPathFuncLookupFunc:</h2><p><a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncLookup">xmlXPathRegisterFuncLookup</a><br />
+</p><h2>Type xmlXPathFunction:</h2><p><a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a><br />
+</p><h2>Type xmlXPathObjectPtr:</h2><p><a href="html/libxml-xpathInternals.html#valuePush">valuePush</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathResult">xmlShellPrintXPathResult</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToBoolean">xmlXPathCastToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToNumber">xmlXPathCastToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToString">xmlXPathCastToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertBoolean">xmlXPathConvertBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertFunc">xmlXPathConvertFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertNumber">xmlXPathConvertNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertString">xmlXPathConvertString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeObject">xmlXPathFreeObject</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectCopy">xmlXPathObjectCopy</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariable">xmlXPathRegisterVariable</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableNS">xmlXPathRegisterVariableNS</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetCreate">xmlXPtrLocationSetCreate</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
+</p><h2>Type xmlXPathParserContextPtr:</h2><p><a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
+<a href="html/libxml-xpathInternals.html#valuePush">valuePush</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</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#xmlXPathConcatFunction">xmlXPathConcatFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathContainsFunction">xmlXPathContainsFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCountFunction">xmlXPathCountFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathErr">xmlXPathErr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvalExpr">xmlXPathEvalExpr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalFunc">xmlXPathEvalFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFalseFunction">xmlXPathFalseFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFreeParserContext">xmlXPathFreeParserContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLastFunction">xmlXPathLastFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLocalNameFunction">xmlXPathLocalNameFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathModValues">xmlXPathModValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathMultValues">xmlXPathMultValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNamespaceURIFunction">xmlXPathNamespaceURIFunction</a><br />
+<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#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextChild">xmlXPathNextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotFunction">xmlXPathNotFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNumberFunction">xmlXPathNumberFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseName">xmlXPathParseName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopBoolean">xmlXPathPopBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopExternal">xmlXPathPopExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNumber">xmlXPathPopNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopString">xmlXPathPopString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPositionFunction">xmlXPathPositionFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoot">xmlXPathRoot</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStartsWithFunction">xmlXPathStartsWithFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSumFunction">xmlXPathSumFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrueFunction">xmlXPathTrueFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPatherror">xmlXPatherror</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrRangeToFunction">xmlXPtrRangeToFunction</a><br />
+</p><h2>Type xmlXPathVariableLookupFunc:</h2><p><a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableLookup">xmlXPathRegisterVariableLookup</a><br />
+</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/APIsymbols.html b/doc/APIsymbols.html
new file mode 100644
index 0000000..b3d570f
--- /dev/null
+++ b/doc/APIsymbols.html
@@ -0,0 +1,2864 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Alphabetic List of Symbols in libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Alphabetic List of Symbols in libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>Letter A:</h2><p><a href="html/libxml-xmlversion.html#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a><br />
+</p><h2>Letter B:</h2><p><a href="html/libxml-xmlstring.html#BAD_CAST">BAD_CAST</a><br />
+<a href="html/libxml-tree.html#BASE_BUFFER_SIZE">BASE_BUFFER_SIZE</a><br />
+</p><h2>Letter C:</h2><p><a href="html/libxml-xpathInternals.html#CAST_TO_BOOLEAN">CAST_TO_BOOLEAN</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_NUMBER">CAST_TO_NUMBER</a><br />
+<a href="html/libxml-xpathInternals.html#CAST_TO_STRING">CAST_TO_STRING</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_ARITY">CHECK_ARITY</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_ERROR">CHECK_ERROR</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_ERROR0">CHECK_ERROR0</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_TYPE">CHECK_TYPE</a><br />
+<a href="html/libxml-xpathInternals.html#CHECK_TYPE0">CHECK_TYPE0</a><br />
+</p><h2>Letter D:</h2><p><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+<a href="html/libxml-xmlversion.html#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a><br />
+</p><h2>Letter H:</h2><p><a href="html/libxml-HTMLtree.html#HTML_COMMENT_NODE">HTML_COMMENT_NODE</a><br />
+<a href="html/libxml-HTMLparser.html#HTML_DEPRECATED">HTML_DEPRECATED</a><br />
+<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_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-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 />
+<a href="html/libxml-HTMLtree.html#HTML_TEXT_NODE">HTML_TEXT_NODE</a><br />
+<a href="html/libxml-HTMLparser.html#HTML_VALID">HTML_VALID</a><br />
+</p><h2>Letter I:</h2><p><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
+<a href="html/libxml-parserInternals.html#IS_BASECHAR">IS_BASECHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_BLANK">IS_BLANK</a><br />
+<a href="html/libxml-parserInternals.html#IS_BLANK_CH">IS_BLANK_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_BYTE_CHAR">IS_BYTE_CHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_CHAR">IS_CHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_CHAR_CH">IS_CHAR_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_COMBINING">IS_COMBINING</a><br />
+<a href="html/libxml-parserInternals.html#IS_COMBINING_CH">IS_COMBINING_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_DIGIT">IS_DIGIT</a><br />
+<a href="html/libxml-parserInternals.html#IS_DIGIT_CH">IS_DIGIT_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a><br />
+<a href="html/libxml-parserInternals.html#IS_EXTENDER_CH">IS_EXTENDER_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a><br />
+<a href="html/libxml-parserInternals.html#IS_LETTER">IS_LETTER</a><br />
+<a href="html/libxml-parserInternals.html#IS_LETTER_CH">IS_LETTER_CH</a><br />
+<a href="html/libxml-parserInternals.html#IS_PUBIDCHAR">IS_PUBIDCHAR</a><br />
+<a href="html/libxml-parserInternals.html#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a><br />
+</p><h2>Letter L:</h2><p><a href="html/libxml-xmlversion.html#LIBXML_AUTOMATA_ENABLED">LIBXML_AUTOMATA_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_C14N_ENABLED">LIBXML_C14N_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_CATALOG_ENABLED">LIBXML_CATALOG_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_DEBUG_ENABLED">LIBXML_DEBUG_ENABLED</a><br />
+<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_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 />
+<a href="html/libxml-xmlversion.html#LIBXML_ICONV_ENABLED">LIBXML_ICONV_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_ISO8859X_ENABLED">LIBXML_ISO8859X_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_LEGACY_ENABLED">LIBXML_LEGACY_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_OUTPUT_ENABLED">LIBXML_OUTPUT_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_PATTERN_ENABLED">LIBXML_PATTERN_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_PUSH_ENABLED">LIBXML_PUSH_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_READER_ENABLED">LIBXML_READER_ENABLED</a><br />
+<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_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 />
+<a href="html/libxml-xmlversion.html#LIBXML_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_VALID_ENABLED">LIBXML_VALID_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_VERSION">LIBXML_VERSION</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_VERSION_STRING">LIBXML_VERSION_STRING</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_WRITER_ENABLED">LIBXML_WRITER_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_XINCLUDE_ENABLED">LIBXML_XINCLUDE_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_XPATH_ENABLED">LIBXML_XPATH_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_XPTR_ENABLED">LIBXML_XPTR_ENABLED</a><br />
+</p><h2>Letter M:</h2><p><a href="html/libxml-parserInternals.html#MOVETO_ENDTAG">MOVETO_ENDTAG</a><br />
+<a href="html/libxml-parserInternals.html#MOVETO_STARTTAG">MOVETO_STARTTAG</a><br />
+</p><h2>Letter S:</h2><p><a href="html/libxml-parserInternals.html#SKIP_EOL">SKIP_EOL</a><br />
+</p><h2>Letter U:</h2><p><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
+<a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
+</p><h2>Letter W:</h2><p><a href="html/libxml-xmlversion.html#WITHOUT_TRIO">WITHOUT_TRIO</a><br />
+<a href="html/libxml-xmlversion.html#WITH_TRIO">WITH_TRIO</a><br />
+</p><h2>Letter X:</h2><p><a href="html/libxml-xinclude.html#XINCLUDE_FALLBACK">XINCLUDE_FALLBACK</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_HREF">XINCLUDE_HREF</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_NODE">XINCLUDE_NODE</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_NS">XINCLUDE_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE">XINCLUDE_PARSE</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_ENCODING">XINCLUDE_PARSE_ENCODING</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_TEXT">XINCLUDE_PARSE_TEXT</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_XML">XINCLUDE_PARSE_XML</a><br />
+<a href="html/libxml-xinclude.html#XINCLUDE_PARSE_XPOINTER">XINCLUDE_PARSE_XPOINTER</a><br />
+<a href="html/libxml-xlink.html#XLINK_ACTUATE_AUTO">XLINK_ACTUATE_AUTO</a><br />
+<a href="html/libxml-xlink.html#XLINK_ACTUATE_NONE">XLINK_ACTUATE_NONE</a><br />
+<a href="html/libxml-xlink.html#XLINK_ACTUATE_ONREQUEST">XLINK_ACTUATE_ONREQUEST</a><br />
+<a href="html/libxml-xlink.html#XLINK_SHOW_EMBED">XLINK_SHOW_EMBED</a><br />
+<a href="html/libxml-xlink.html#XLINK_SHOW_NEW">XLINK_SHOW_NEW</a><br />
+<a href="html/libxml-xlink.html#XLINK_SHOW_NONE">XLINK_SHOW_NONE</a><br />
+<a href="html/libxml-xlink.html#XLINK_SHOW_REPLACE">XLINK_SHOW_REPLACE</a><br />
+<a href="html/libxml-xlink.html#XLINK_TYPE_EXTENDED">XLINK_TYPE_EXTENDED</a><br />
+<a href="html/libxml-xlink.html#XLINK_TYPE_EXTENDED_SET">XLINK_TYPE_EXTENDED_SET</a><br />
+<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#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 />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_DECL">XML_ATTRIBUTE_DECL</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_ENTITIES">XML_ATTRIBUTE_ENTITIES</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_ENTITY">XML_ATTRIBUTE_ENTITY</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_ENUMERATION">XML_ATTRIBUTE_ENUMERATION</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_FIXED">XML_ATTRIBUTE_FIXED</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_ID">XML_ATTRIBUTE_ID</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_IDREF">XML_ATTRIBUTE_IDREF</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_IDREFS">XML_ATTRIBUTE_IDREFS</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_IMPLIED">XML_ATTRIBUTE_IMPLIED</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NMTOKEN">XML_ATTRIBUTE_NMTOKEN</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NMTOKENS">XML_ATTRIBUTE_NMTOKENS</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NODE">XML_ATTRIBUTE_NODE</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NONE">XML_ATTRIBUTE_NONE</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_NOTATION">XML_ATTRIBUTE_NOTATION</a><br />
+<a href="html/libxml-tree.html#XML_ATTRIBUTE_REQUIRED">XML_ATTRIBUTE_REQUIRED</a><br />
+<a href="html/libxml-tree.html#XML_BUFFER_ALLOC_DOUBLEIT">XML_BUFFER_ALLOC_DOUBLEIT</a><br />
+<a href="html/libxml-tree.html#XML_BUFFER_ALLOC_EXACT">XML_BUFFER_ALLOC_EXACT</a><br />
+<a href="html/libxml-tree.html#XML_BUFFER_ALLOC_IMMUTABLE">XML_BUFFER_ALLOC_IMMUTABLE</a><br />
+<a href="html/libxml-xmlerror.html#XML_C14N_CREATE_CTXT">XML_C14N_CREATE_CTXT</a><br />
+<a href="html/libxml-xmlerror.html#XML_C14N_CREATE_STACK">XML_C14N_CREATE_STACK</a><br />
+<a href="html/libxml-xmlerror.html#XML_C14N_INVALID_NODE">XML_C14N_INVALID_NODE</a><br />
+<a href="html/libxml-xmlerror.html#XML_C14N_REQUIRES_UTF8">XML_C14N_REQUIRES_UTF8</a><br />
+<a href="html/libxml-catalog.html#XML_CATALOGS_NAMESPACE">XML_CATALOGS_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_ENTRY_BROKEN">XML_CATALOG_ENTRY_BROKEN</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_MISSING_ATTR">XML_CATALOG_MISSING_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_NOT_CATALOG">XML_CATALOG_NOT_CATALOG</a><br />
+<a href="html/libxml-catalog.html#XML_CATALOG_PI">XML_CATALOG_PI</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_PREFER_VALUE">XML_CATALOG_PREFER_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_CATALOG_RECURSION">XML_CATALOG_RECURSION</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_ALLOW_ALL">XML_CATA_ALLOW_ALL</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_ALLOW_DOCUMENT">XML_CATA_ALLOW_DOCUMENT</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_ALLOW_GLOBAL">XML_CATA_ALLOW_GLOBAL</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_ALLOW_NONE">XML_CATA_ALLOW_NONE</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_PREFER_NONE">XML_CATA_PREFER_NONE</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_PREFER_PUBLIC">XML_CATA_PREFER_PUBLIC</a><br />
+<a href="html/libxml-catalog.html#XML_CATA_PREFER_SYSTEM">XML_CATA_PREFER_SYSTEM</a><br />
+<a href="html/libxml-tree.html#XML_CDATA_SECTION_NODE">XML_CDATA_SECTION_NODE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_2022_JP">XML_CHAR_ENCODING_2022_JP</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_1">XML_CHAR_ENCODING_8859_1</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_2">XML_CHAR_ENCODING_8859_2</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_3">XML_CHAR_ENCODING_8859_3</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_4">XML_CHAR_ENCODING_8859_4</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_5">XML_CHAR_ENCODING_8859_5</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_6">XML_CHAR_ENCODING_8859_6</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_7">XML_CHAR_ENCODING_8859_7</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_8">XML_CHAR_ENCODING_8859_8</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_8859_9">XML_CHAR_ENCODING_8859_9</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_ASCII">XML_CHAR_ENCODING_ASCII</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_EBCDIC">XML_CHAR_ENCODING_EBCDIC</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_ERROR">XML_CHAR_ENCODING_ERROR</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_EUC_JP">XML_CHAR_ENCODING_EUC_JP</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_NONE">XML_CHAR_ENCODING_NONE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_SHIFT_JIS">XML_CHAR_ENCODING_SHIFT_JIS</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS2">XML_CHAR_ENCODING_UCS2</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS4BE">XML_CHAR_ENCODING_UCS4BE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS4LE">XML_CHAR_ENCODING_UCS4LE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS4_2143">XML_CHAR_ENCODING_UCS4_2143</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UCS4_3412">XML_CHAR_ENCODING_UCS4_3412</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UTF16BE">XML_CHAR_ENCODING_UTF16BE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UTF16LE">XML_CHAR_ENCODING_UTF16LE</a><br />
+<a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UTF8">XML_CHAR_ENCODING_UTF8</a><br />
+<a href="html/libxml-tree.html#XML_COMMENT_NODE">XML_COMMENT_NODE</a><br />
+<a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
+<a href="html/libxml-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-tree.html#XML_DOCB_DOCUMENT_NODE">XML_DOCB_DOCUMENT_NODE</a><br />
+<a href="html/libxml-tree.html#XML_DOCUMENT_FRAG_NODE">XML_DOCUMENT_FRAG_NODE</a><br />
+<a href="html/libxml-tree.html#XML_DOCUMENT_NODE">XML_DOCUMENT_NODE</a><br />
+<a href="html/libxml-tree.html#XML_DOCUMENT_TYPE_NODE">XML_DOCUMENT_TYPE_NODE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ATTRIBUTE_DEFAULT">XML_DTD_ATTRIBUTE_DEFAULT</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ATTRIBUTE_REDEFINED">XML_DTD_ATTRIBUTE_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ATTRIBUTE_VALUE">XML_DTD_ATTRIBUTE_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_CONTENT_ERROR">XML_DTD_CONTENT_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_CONTENT_MODEL">XML_DTD_CONTENT_MODEL</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_CONTENT_NOT_DETERMINIST">XML_DTD_CONTENT_NOT_DETERMINIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_DIFFERENT_PREFIX">XML_DTD_DIFFERENT_PREFIX</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ELEM_DEFAULT_NAMESPACE">XML_DTD_ELEM_DEFAULT_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ELEM_NAMESPACE">XML_DTD_ELEM_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ELEM_REDEFINED">XML_DTD_ELEM_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_EMPTY_NOTATION">XML_DTD_EMPTY_NOTATION</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ENTITY_TYPE">XML_DTD_ENTITY_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ID_FIXED">XML_DTD_ID_FIXED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ID_REDEFINED">XML_DTD_ID_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ID_SUBSET">XML_DTD_ID_SUBSET</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_INVALID_CHILD">XML_DTD_INVALID_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_INVALID_DEFAULT">XML_DTD_INVALID_DEFAULT</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_LOAD_ERROR">XML_DTD_LOAD_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_MISSING_ATTRIBUTE">XML_DTD_MISSING_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_MIXED_CORRUPT">XML_DTD_MIXED_CORRUPT</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_MULTIPLE_ID">XML_DTD_MULTIPLE_ID</a><br />
+<a href="html/libxml-tree.html#XML_DTD_NODE">XML_DTD_NODE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOTATION_REDEFINED">XML_DTD_NOTATION_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOTATION_VALUE">XML_DTD_NOTATION_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOT_EMPTY">XML_DTD_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOT_PCDATA">XML_DTD_NOT_PCDATA</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NOT_STANDALONE">XML_DTD_NOT_STANDALONE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_DOC">XML_DTD_NO_DOC</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_DTD">XML_DTD_NO_DTD</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_ELEM_NAME">XML_DTD_NO_ELEM_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_PREFIX">XML_DTD_NO_PREFIX</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_NO_ROOT">XML_DTD_NO_ROOT</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_ROOT_NAME">XML_DTD_ROOT_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_STANDALONE_DEFAULTED">XML_DTD_STANDALONE_DEFAULTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_STANDALONE_WHITE_SPACE">XML_DTD_STANDALONE_WHITE_SPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_ATTRIBUTE">XML_DTD_UNKNOWN_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_ELEM">XML_DTD_UNKNOWN_ELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_ENTITY">XML_DTD_UNKNOWN_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_ID">XML_DTD_UNKNOWN_ID</a><br />
+<a href="html/libxml-xmlerror.html#XML_DTD_UNKNOWN_NOTATION">XML_DTD_UNKNOWN_NOTATION</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_ELEMENT">XML_ELEMENT_CONTENT_ELEMENT</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_MULT">XML_ELEMENT_CONTENT_MULT</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_ONCE">XML_ELEMENT_CONTENT_ONCE</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_OPT">XML_ELEMENT_CONTENT_OPT</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_OR">XML_ELEMENT_CONTENT_OR</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_PCDATA">XML_ELEMENT_CONTENT_PCDATA</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_PLUS">XML_ELEMENT_CONTENT_PLUS</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_CONTENT_SEQ">XML_ELEMENT_CONTENT_SEQ</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_DECL">XML_ELEMENT_DECL</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_NODE">XML_ELEMENT_NODE</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_ANY">XML_ELEMENT_TYPE_ANY</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_ELEMENT">XML_ELEMENT_TYPE_ELEMENT</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_EMPTY">XML_ELEMENT_TYPE_EMPTY</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_MIXED">XML_ELEMENT_TYPE_MIXED</a><br />
+<a href="html/libxml-tree.html#XML_ELEMENT_TYPE_UNDEFINED">XML_ELEMENT_TYPE_UNDEFINED</a><br />
+<a href="html/libxml-tree.html#XML_ENTITY_DECL">XML_ENTITY_DECL</a><br />
+<a href="html/libxml-tree.html#XML_ENTITY_NODE">XML_ENTITY_NODE</a><br />
+<a href="html/libxml-tree.html#XML_ENTITY_REF_NODE">XML_ENTITY_REF_NODE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTLIST_NOT_FINISHED">XML_ERR_ATTLIST_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTLIST_NOT_STARTED">XML_ERR_ATTLIST_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTRIBUTE_NOT_FINISHED">XML_ERR_ATTRIBUTE_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTRIBUTE_NOT_STARTED">XML_ERR_ATTRIBUTE_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTRIBUTE_REDEFINED">XML_ERR_ATTRIBUTE_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ATTRIBUTE_WITHOUT_VALUE">XML_ERR_ATTRIBUTE_WITHOUT_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CDATA_NOT_FINISHED">XML_ERR_CDATA_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CHARREF_AT_EOF">XML_ERR_CHARREF_AT_EOF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CHARREF_IN_DTD">XML_ERR_CHARREF_IN_DTD</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CHARREF_IN_EPILOG">XML_ERR_CHARREF_IN_EPILOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CHARREF_IN_PROLOG">XML_ERR_CHARREF_IN_PROLOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_COMMENT_NOT_FINISHED">XML_ERR_COMMENT_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CONDSEC_INVALID">XML_ERR_CONDSEC_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CONDSEC_INVALID_KEYWORD">XML_ERR_CONDSEC_INVALID_KEYWORD</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CONDSEC_NOT_FINISHED">XML_ERR_CONDSEC_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_CONDSEC_NOT_STARTED">XML_ERR_CONDSEC_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_DOCTYPE_NOT_FINISHED">XML_ERR_DOCTYPE_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_DOCUMENT_EMPTY">XML_ERR_DOCUMENT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_DOCUMENT_END">XML_ERR_DOCUMENT_END</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_DOCUMENT_START">XML_ERR_DOCUMENT_START</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ELEMCONTENT_NOT_FINISHED">XML_ERR_ELEMCONTENT_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ELEMCONTENT_NOT_STARTED">XML_ERR_ELEMCONTENT_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENCODING_NAME">XML_ERR_ENCODING_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_AT_EOF">XML_ERR_ENTITYREF_AT_EOF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_IN_DTD">XML_ERR_ENTITYREF_IN_DTD</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_IN_EPILOG">XML_ERR_ENTITYREF_IN_EPILOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_IN_PROLOG">XML_ERR_ENTITYREF_IN_PROLOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_NO_NAME">XML_ERR_ENTITYREF_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITYREF_SEMICOL_MISSING">XML_ERR_ENTITYREF_SEMICOL_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_BOUNDARY">XML_ERR_ENTITY_BOUNDARY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_CHAR_ERROR">XML_ERR_ENTITY_CHAR_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_IS_EXTERNAL">XML_ERR_ENTITY_IS_EXTERNAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_IS_PARAMETER">XML_ERR_ENTITY_IS_PARAMETER</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_LOOP">XML_ERR_ENTITY_LOOP</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_NOT_FINISHED">XML_ERR_ENTITY_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_NOT_STARTED">XML_ERR_ENTITY_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ENTITY_PE_INTERNAL">XML_ERR_ENTITY_PE_INTERNAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_EQUAL_REQUIRED">XML_ERR_EQUAL_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_ERROR">XML_ERR_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_EXTRA_CONTENT">XML_ERR_EXTRA_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_EXT_ENTITY_STANDALONE">XML_ERR_EXT_ENTITY_STANDALONE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_EXT_SUBSET_NOT_FINISHED">XML_ERR_EXT_SUBSET_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_FATAL">XML_ERR_FATAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_GT_REQUIRED">XML_ERR_GT_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_HYPHEN_IN_COMMENT">XML_ERR_HYPHEN_IN_COMMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INTERNAL_ERROR">XML_ERR_INTERNAL_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_CHAR">XML_ERR_INVALID_CHAR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_CHARREF">XML_ERR_INVALID_CHARREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_DEC_CHARREF">XML_ERR_INVALID_DEC_CHARREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_ENCODING">XML_ERR_INVALID_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_HEX_CHARREF">XML_ERR_INVALID_HEX_CHARREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_INVALID_URI">XML_ERR_INVALID_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LITERAL_NOT_FINISHED">XML_ERR_LITERAL_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LITERAL_NOT_STARTED">XML_ERR_LITERAL_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LTSLASH_REQUIRED">XML_ERR_LTSLASH_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LT_IN_ATTRIBUTE">XML_ERR_LT_IN_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_LT_REQUIRED">XML_ERR_LT_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_MISPLACED_CDATA_END">XML_ERR_MISPLACED_CDATA_END</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_MISSING_ENCODING">XML_ERR_MISSING_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_MIXED_NOT_FINISHED">XML_ERR_MIXED_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_MIXED_NOT_STARTED">XML_ERR_MIXED_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NAME_REQUIRED">XML_ERR_NAME_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NMTOKEN_REQUIRED">XML_ERR_NMTOKEN_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NONE">XML_ERR_NONE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NOTATION_NOT_FINISHED">XML_ERR_NOTATION_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NOTATION_NOT_STARTED">XML_ERR_NOTATION_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NOT_WELL_BALANCED">XML_ERR_NOT_WELL_BALANCED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NO_DTD">XML_ERR_NO_DTD</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NO_MEMORY">XML_ERR_NO_MEMORY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NS_DECL_ERROR">XML_ERR_NS_DECL_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_OK">XML_ERR_OK</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PCDATA_REQUIRED">XML_ERR_PCDATA_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_AT_EOF">XML_ERR_PEREF_AT_EOF</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_IN_EPILOG">XML_ERR_PEREF_IN_EPILOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_IN_INT_SUBSET">XML_ERR_PEREF_IN_INT_SUBSET</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_IN_PROLOG">XML_ERR_PEREF_IN_PROLOG</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_NO_NAME">XML_ERR_PEREF_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PEREF_SEMICOL_MISSING">XML_ERR_PEREF_SEMICOL_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PI_NOT_FINISHED">XML_ERR_PI_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PI_NOT_STARTED">XML_ERR_PI_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_PUBID_REQUIRED">XML_ERR_PUBID_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_RESERVED_XML_NAME">XML_ERR_RESERVED_XML_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_SEPARATOR_REQUIRED">XML_ERR_SEPARATOR_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_SPACE_REQUIRED">XML_ERR_SPACE_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_STANDALONE_VALUE">XML_ERR_STANDALONE_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_STRING_NOT_CLOSED">XML_ERR_STRING_NOT_CLOSED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_STRING_NOT_STARTED">XML_ERR_STRING_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_TAG_NAME_MISMATCH">XML_ERR_TAG_NAME_MISMATCH</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_TAG_NOT_FINISHED">XML_ERR_TAG_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_UNDECLARED_ENTITY">XML_ERR_UNDECLARED_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_UNKNOWN_ENCODING">XML_ERR_UNKNOWN_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_UNPARSED_ENTITY">XML_ERR_UNPARSED_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_UNSUPPORTED_ENCODING">XML_ERR_UNSUPPORTED_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_URI_FRAGMENT">XML_ERR_URI_FRAGMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_URI_REQUIRED">XML_ERR_URI_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_VALUE_REQUIRED">XML_ERR_VALUE_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_VERSION_MISSING">XML_ERR_VERSION_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_WARNING">XML_ERR_WARNING</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_XMLDECL_NOT_FINISHED">XML_ERR_XMLDECL_NOT_FINISHED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_XMLDECL_NOT_STARTED">XML_ERR_XMLDECL_NOT_STARTED</a><br />
+<a href="html/libxml-entities.html#XML_EXTERNAL_GENERAL_PARSED_ENTITY">XML_EXTERNAL_GENERAL_PARSED_ENTITY</a><br />
+<a href="html/libxml-entities.html#XML_EXTERNAL_GENERAL_UNPARSED_ENTITY">XML_EXTERNAL_GENERAL_UNPARSED_ENTITY</a><br />
+<a href="html/libxml-entities.html#XML_EXTERNAL_PARAMETER_ENTITY">XML_EXTERNAL_PARAMETER_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_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_DATATYPE">XML_FROM_DATATYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_DTD">XML_FROM_DTD</a><br />
+<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_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_NAMESPACE">XML_FROM_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_NONE">XML_FROM_NONE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_OUTPUT">XML_FROM_OUTPUT</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_PARSER">XML_FROM_PARSER</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_REGEXP">XML_FROM_REGEXP</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_RELAXNGP">XML_FROM_RELAXNGP</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_RELAXNGV">XML_FROM_RELAXNGV</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_SCHEMASP">XML_FROM_SCHEMASP</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_SCHEMASV">XML_FROM_SCHEMASV</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_TREE">XML_FROM_TREE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_VALID">XML_FROM_VALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_XINCLUDE">XML_FROM_XINCLUDE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_XPATH">XML_FROM_XPATH</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_XPOINTER">XML_FROM_XPOINTER</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_XSLT">XML_FROM_XSLT</a><br />
+<a href="html/libxml-xmlerror.html#XML_FTP_ACCNT">XML_FTP_ACCNT</a><br />
+<a href="html/libxml-xmlerror.html#XML_FTP_EPSV_ANSWER">XML_FTP_EPSV_ANSWER</a><br />
+<a href="html/libxml-xmlerror.html#XML_FTP_PASV_ANSWER">XML_FTP_PASV_ANSWER</a><br />
+<a href="html/libxml-tree.html#XML_GET_CONTENT">XML_GET_CONTENT</a><br />
+<a href="html/libxml-tree.html#XML_GET_LINE">XML_GET_LINE</a><br />
+<a href="html/libxml-tree.html#XML_HTML_DOCUMENT_NODE">XML_HTML_DOCUMENT_NODE</a><br />
+<a href="html/libxml-xmlerror.html#XML_HTML_STRUCURE_ERROR">XML_HTML_STRUCURE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_HTML_UNKNOWN_TAG">XML_HTML_UNKNOWN_TAG</a><br />
+<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-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 />
+<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 />
+<a href="html/libxml-xmlerror.html#XML_IO_EAFNOSUPPORT">XML_IO_EAFNOSUPPORT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EAGAIN">XML_IO_EAGAIN</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EALREADY">XML_IO_EALREADY</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EBADF">XML_IO_EBADF</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EBADMSG">XML_IO_EBADMSG</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EBUSY">XML_IO_EBUSY</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ECANCELED">XML_IO_ECANCELED</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ECHILD">XML_IO_ECHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ECONNREFUSED">XML_IO_ECONNREFUSED</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EDEADLK">XML_IO_EDEADLK</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EDOM">XML_IO_EDOM</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EEXIST">XML_IO_EEXIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EFAULT">XML_IO_EFAULT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EFBIG">XML_IO_EFBIG</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EINPROGRESS">XML_IO_EINPROGRESS</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EINTR">XML_IO_EINTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EINVAL">XML_IO_EINVAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EIO">XML_IO_EIO</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EISCONN">XML_IO_EISCONN</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EISDIR">XML_IO_EISDIR</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EMFILE">XML_IO_EMFILE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EMLINK">XML_IO_EMLINK</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EMSGSIZE">XML_IO_EMSGSIZE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENAMETOOLONG">XML_IO_ENAMETOOLONG</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENCODER">XML_IO_ENCODER</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENETUNREACH">XML_IO_ENETUNREACH</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENFILE">XML_IO_ENFILE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENODEV">XML_IO_ENODEV</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOENT">XML_IO_ENOENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOEXEC">XML_IO_ENOEXEC</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOLCK">XML_IO_ENOLCK</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOMEM">XML_IO_ENOMEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOSPC">XML_IO_ENOSPC</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOSYS">XML_IO_ENOSYS</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTDIR">XML_IO_ENOTDIR</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTEMPTY">XML_IO_ENOTEMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTSOCK">XML_IO_ENOTSOCK</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTSUP">XML_IO_ENOTSUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENOTTY">XML_IO_ENOTTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ENXIO">XML_IO_ENXIO</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EPERM">XML_IO_EPERM</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EPIPE">XML_IO_EPIPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ERANGE">XML_IO_ERANGE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EROFS">XML_IO_EROFS</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ESPIPE">XML_IO_ESPIPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ESRCH">XML_IO_ESRCH</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_ETIMEDOUT">XML_IO_ETIMEDOUT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_EXDEV">XML_IO_EXDEV</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_FLUSH">XML_IO_FLUSH</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_LOAD_ERROR">XML_IO_LOAD_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_NETWORK_ATTEMPT">XML_IO_NETWORK_ATTEMPT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_NO_INPUT">XML_IO_NO_INPUT</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_UNKNOWN">XML_IO_UNKNOWN</a><br />
+<a href="html/libxml-xmlerror.html#XML_IO_WRITE">XML_IO_WRITE</a><br />
+<a href="html/libxml-tree.html#XML_LOCAL_NAMESPACE">XML_LOCAL_NAMESPACE</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+<a href="html/libxml-tree.html#XML_NAMESPACE_DECL">XML_NAMESPACE_DECL</a><br />
+<a href="html/libxml-tree.html#XML_NOTATION_NODE">XML_NOTATION_NODE</a><br />
+<a href="html/libxml-xmlerror.html#XML_NS_ERR_ATTRIBUTE_REDEFINED">XML_NS_ERR_ATTRIBUTE_REDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_NS_ERR_QNAME">XML_NS_ERR_QNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_NS_ERR_UNDEFINED_NAMESPACE">XML_NS_ERR_UNDEFINED_NAMESPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_NS_ERR_XML_NAMESPACE">XML_NS_ERR_XML_NAMESPACE</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 />
+<a href="html/libxml-parser.html#XML_PARSER_CONTENT">XML_PARSER_CONTENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_DEFAULTATTRS">XML_PARSER_DEFAULTATTRS</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_DTD">XML_PARSER_DTD</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_END_TAG">XML_PARSER_END_TAG</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_ENTITY_DECL">XML_PARSER_ENTITY_DECL</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_ENTITY_VALUE">XML_PARSER_ENTITY_VALUE</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_EOF">XML_PARSER_EOF</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_EPILOG">XML_PARSER_EPILOG</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_IGNORE">XML_PARSER_IGNORE</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_LOADDTD">XML_PARSER_LOADDTD</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_MISC">XML_PARSER_MISC</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_PI">XML_PARSER_PI</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_PROLOG">XML_PARSER_PROLOG</a><br />
+<a href="html/libxml-parser.html#XML_PARSER_PUBLIC_LITERAL">XML_PARSER_PUBLIC_LITERAL</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_SEVERITY_ERROR">XML_PARSER_SEVERITY_ERROR</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_SEVERITY_VALIDITY_ERROR">XML_PARSER_SEVERITY_VALIDITY_ERROR</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_SEVERITY_VALIDITY_WARNING">XML_PARSER_SEVERITY_VALIDITY_WARNING</a><br />
+<a href="html/libxml-xmlreader.html#XML_PARSER_SEVERITY_WARNING">XML_PARSER_SEVERITY_WARNING</a><br />
+<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-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_DTDATTR">XML_PARSE_DTDATTR</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_DTDLOAD">XML_PARSE_DTDLOAD</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_DTDVALID">XML_PARSE_DTDVALID</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOBLANKS">XML_PARSE_NOBLANKS</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOCDATA">XML_PARSE_NOCDATA</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NODICT">XML_PARSE_NODICT</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOENT">XML_PARSE_NOENT</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOERROR">XML_PARSE_NOERROR</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NONET">XML_PARSE_NONET</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NOWARNING">XML_PARSE_NOWARNING</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_NSCLEAN">XML_PARSE_NSCLEAN</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_PEDANTIC">XML_PARSE_PEDANTIC</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_RECOVER">XML_PARSE_RECOVER</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_SAX1">XML_PARSE_SAX1</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_XINCLUDE">XML_PARSE_XINCLUDE</a><br />
+<a href="html/libxml-tree.html#XML_PI_NODE">XML_PI_NODE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ATTRIBUTE">XML_READER_TYPE_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_CDATA">XML_READER_TYPE_CDATA</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_COMMENT">XML_READER_TYPE_COMMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_DOCUMENT">XML_READER_TYPE_DOCUMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_DOCUMENT_FRAGMENT">XML_READER_TYPE_DOCUMENT_FRAGMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_DOCUMENT_TYPE">XML_READER_TYPE_DOCUMENT_TYPE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ELEMENT">XML_READER_TYPE_ELEMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_END_ELEMENT">XML_READER_TYPE_END_ELEMENT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_END_ENTITY">XML_READER_TYPE_END_ENTITY</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ENTITY">XML_READER_TYPE_ENTITY</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ENTITY_REFERENCE">XML_READER_TYPE_ENTITY_REFERENCE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_NONE">XML_READER_TYPE_NONE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_NOTATION">XML_READER_TYPE_NOTATION</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_PROCESSING_INSTRUCTION">XML_READER_TYPE_PROCESSING_INSTRUCTION</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_SIGNIFICANT_WHITESPACE">XML_READER_TYPE_SIGNIFICANT_WHITESPACE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_TEXT">XML_READER_TYPE_TEXT</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_WHITESPACE">XML_READER_TYPE_WHITESPACE</a><br />
+<a href="html/libxml-xmlreader.html#XML_READER_TYPE_XML_DECLARATION">XML_READER_TYPE_XML_DECLARATION</a><br />
+<a href="html/libxml-xmlerror.html#XML_REGEXP_COMPILE_ERROR">XML_REGEXP_COMPILE_ERROR</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNGP_CRNG">XML_RELAXNGP_CRNG</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNGP_FREE_DOC">XML_RELAXNGP_FREE_DOC</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNGP_NONE">XML_RELAXNGP_NONE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTREXTRANS">XML_RELAXNG_ERR_ATTREXTRANS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTRNAME">XML_RELAXNG_ERR_ATTRNAME</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTRNONS">XML_RELAXNG_ERR_ATTRNONS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTRVALID">XML_RELAXNG_ERR_ATTRVALID</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ATTRWRONGNS">XML_RELAXNG_ERR_ATTRWRONGNS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_CONTENTVALID">XML_RELAXNG_ERR_CONTENTVALID</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_DATAELEM">XML_RELAXNG_ERR_DATAELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_DATATYPE">XML_RELAXNG_ERR_DATATYPE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_DUPID">XML_RELAXNG_ERR_DUPID</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMEXTRANS">XML_RELAXNG_ERR_ELEMEXTRANS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMNAME">XML_RELAXNG_ERR_ELEMNAME</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMNONS">XML_RELAXNG_ERR_ELEMNONS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMNOTEMPTY">XML_RELAXNG_ERR_ELEMNOTEMPTY</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMWRONG">XML_RELAXNG_ERR_ELEMWRONG</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_ELEMWRONGNS">XML_RELAXNG_ERR_ELEMWRONGNS</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_EXTRACONTENT">XML_RELAXNG_ERR_EXTRACONTENT</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_EXTRADATA">XML_RELAXNG_ERR_EXTRADATA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INTEREXTRA">XML_RELAXNG_ERR_INTEREXTRA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INTERNAL">XML_RELAXNG_ERR_INTERNAL</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INTERNODATA">XML_RELAXNG_ERR_INTERNODATA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INTERSEQ">XML_RELAXNG_ERR_INTERSEQ</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_INVALIDATTR">XML_RELAXNG_ERR_INVALIDATTR</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LACKDATA">XML_RELAXNG_ERR_LACKDATA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LIST">XML_RELAXNG_ERR_LIST</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LISTELEM">XML_RELAXNG_ERR_LISTELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LISTEMPTY">XML_RELAXNG_ERR_LISTEMPTY</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_LISTEXTRA">XML_RELAXNG_ERR_LISTEXTRA</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_MEMORY">XML_RELAXNG_ERR_MEMORY</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NODEFINE">XML_RELAXNG_ERR_NODEFINE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NOELEM">XML_RELAXNG_ERR_NOELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NOGRAMMAR">XML_RELAXNG_ERR_NOGRAMMAR</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NOSTATE">XML_RELAXNG_ERR_NOSTATE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_NOTELEM">XML_RELAXNG_ERR_NOTELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_TEXTWRONG">XML_RELAXNG_ERR_TEXTWRONG</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_TYPE">XML_RELAXNG_ERR_TYPE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_TYPECMP">XML_RELAXNG_ERR_TYPECMP</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_TYPEVAL">XML_RELAXNG_ERR_TYPEVAL</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_VALELEM">XML_RELAXNG_ERR_VALELEM</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_ERR_VALUE">XML_RELAXNG_ERR_VALUE</a><br />
+<a href="html/libxml-relaxng.html#XML_RELAXNG_OK">XML_RELAXNG_OK</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ANYNAME_ATTR_ANCESTOR">XML_RNGP_ANYNAME_ATTR_ANCESTOR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTRIBUTE_CHILDREN">XML_RNGP_ATTRIBUTE_CHILDREN</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTRIBUTE_CONTENT">XML_RNGP_ATTRIBUTE_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTRIBUTE_EMPTY">XML_RNGP_ATTRIBUTE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTRIBUTE_NOOP">XML_RNGP_ATTRIBUTE_NOOP</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ATTR_CONFLICT">XML_RNGP_ATTR_CONFLICT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_CHOICE_CONTENT">XML_RNGP_CHOICE_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_CHOICE_EMPTY">XML_RNGP_CHOICE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_CREATE_FAILURE">XML_RNGP_CREATE_FAILURE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DATA_CONTENT">XML_RNGP_DATA_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEFINE_CREATE_FAILED">XML_RNGP_DEFINE_CREATE_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEFINE_EMPTY">XML_RNGP_DEFINE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEFINE_MISSING">XML_RNGP_DEFINE_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEFINE_NAME_MISSING">XML_RNGP_DEFINE_NAME_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_DEF_CHOICE_AND_INTERLEAVE">XML_RNGP_DEF_CHOICE_AND_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEMENT_CONTENT">XML_RNGP_ELEMENT_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEMENT_EMPTY">XML_RNGP_ELEMENT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEMENT_NAME">XML_RNGP_ELEMENT_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEMENT_NO_CONTENT">XML_RNGP_ELEMENT_NO_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEM_CONTENT_EMPTY">XML_RNGP_ELEM_CONTENT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEM_CONTENT_ERROR">XML_RNGP_ELEM_CONTENT_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ELEM_TEXT_CONFLICT">XML_RNGP_ELEM_TEXT_CONFLICT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EMPTY">XML_RNGP_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EMPTY_CONSTRUCT">XML_RNGP_EMPTY_CONSTRUCT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EMPTY_CONTENT">XML_RNGP_EMPTY_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EMPTY_NOT_EMPTY">XML_RNGP_EMPTY_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_ERROR_TYPE_LIB">XML_RNGP_ERROR_TYPE_LIB</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXCEPT_EMPTY">XML_RNGP_EXCEPT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXCEPT_MISSING">XML_RNGP_EXCEPT_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXCEPT_MULTIPLE">XML_RNGP_EXCEPT_MULTIPLE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXCEPT_NO_CONTENT">XML_RNGP_EXCEPT_NO_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXTERNALREF_EMTPY">XML_RNGP_EXTERNALREF_EMTPY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXTERNALREF_RECURSE">XML_RNGP_EXTERNALREF_RECURSE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_EXTERNAL_REF_FAILURE">XML_RNGP_EXTERNAL_REF_FAILURE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_FORBIDDEN_ATTRIBUTE">XML_RNGP_FORBIDDEN_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_FOREIGN_ELEMENT">XML_RNGP_FOREIGN_ELEMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GRAMMAR_CONTENT">XML_RNGP_GRAMMAR_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GRAMMAR_EMPTY">XML_RNGP_GRAMMAR_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GRAMMAR_MISSING">XML_RNGP_GRAMMAR_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GRAMMAR_NO_START">XML_RNGP_GRAMMAR_NO_START</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_GROUP_ATTR_CONFLICT">XML_RNGP_GROUP_ATTR_CONFLICT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_HREF_ERROR">XML_RNGP_HREF_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INCLUDE_EMPTY">XML_RNGP_INCLUDE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INCLUDE_FAILURE">XML_RNGP_INCLUDE_FAILURE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INCLUDE_RECURSE">XML_RNGP_INCLUDE_RECURSE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INTERLEAVE_ADD">XML_RNGP_INTERLEAVE_ADD</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INTERLEAVE_CREATE_FAILED">XML_RNGP_INTERLEAVE_CREATE_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INTERLEAVE_EMPTY">XML_RNGP_INTERLEAVE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INTERLEAVE_NO_CONTENT">XML_RNGP_INTERLEAVE_NO_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INVALID_DEFINE_NAME">XML_RNGP_INVALID_DEFINE_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INVALID_URI">XML_RNGP_INVALID_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_INVALID_VALUE">XML_RNGP_INVALID_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_MISSING_HREF">XML_RNGP_MISSING_HREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NAME_MISSING">XML_RNGP_NAME_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NEED_COMBINE">XML_RNGP_NEED_COMBINE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NOTALLOWED_NOT_EMPTY">XML_RNGP_NOTALLOWED_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NSNAME_ATTR_ANCESTOR">XML_RNGP_NSNAME_ATTR_ANCESTOR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_NSNAME_NO_NS">XML_RNGP_NSNAME_NO_NS</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARAM_FORBIDDEN">XML_RNGP_PARAM_FORBIDDEN</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARAM_NAME_MISSING">XML_RNGP_PARAM_NAME_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_CREATE_FAILED">XML_RNGP_PARENTREF_CREATE_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_NAME_INVALID">XML_RNGP_PARENTREF_NAME_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_NOT_EMPTY">XML_RNGP_PARENTREF_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_NO_NAME">XML_RNGP_PARENTREF_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARENTREF_NO_PARENT">XML_RNGP_PARENTREF_NO_PARENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PARSE_ERROR">XML_RNGP_PARSE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME">XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ATTR_ATTR">XML_RNGP_PAT_ATTR_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ATTR_ELEM">XML_RNGP_PAT_ATTR_ELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_ATTR">XML_RNGP_PAT_DATA_EXCEPT_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_ELEM">XML_RNGP_PAT_DATA_EXCEPT_ELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_EMPTY">XML_RNGP_PAT_DATA_EXCEPT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_GROUP">XML_RNGP_PAT_DATA_EXCEPT_GROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE">XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_LIST">XML_RNGP_PAT_DATA_EXCEPT_LIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_ONEMORE">XML_RNGP_PAT_DATA_EXCEPT_ONEMORE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_REF">XML_RNGP_PAT_DATA_EXCEPT_REF</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_DATA_EXCEPT_TEXT">XML_RNGP_PAT_DATA_EXCEPT_TEXT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_ATTR">XML_RNGP_PAT_LIST_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_ELEM">XML_RNGP_PAT_LIST_ELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_INTERLEAVE">XML_RNGP_PAT_LIST_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_LIST">XML_RNGP_PAT_LIST_LIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_REF">XML_RNGP_PAT_LIST_REF</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_LIST_TEXT">XML_RNGP_PAT_LIST_TEXT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME">XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME">XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ONEMORE_GROUP_ATTR">XML_RNGP_PAT_ONEMORE_GROUP_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR">XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_ATTR">XML_RNGP_PAT_START_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_DATA">XML_RNGP_PAT_START_DATA</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_EMPTY">XML_RNGP_PAT_START_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_GROUP">XML_RNGP_PAT_START_GROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_INTERLEAVE">XML_RNGP_PAT_START_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_LIST">XML_RNGP_PAT_START_LIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_ONEMORE">XML_RNGP_PAT_START_ONEMORE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_TEXT">XML_RNGP_PAT_START_TEXT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PAT_START_VALUE">XML_RNGP_PAT_START_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_PREFIX_UNDEFINED">XML_RNGP_PREFIX_UNDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_CREATE_FAILED">XML_RNGP_REF_CREATE_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_CYCLE">XML_RNGP_REF_CYCLE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_NAME_INVALID">XML_RNGP_REF_NAME_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_NOT_EMPTY">XML_RNGP_REF_NOT_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_NO_DEF">XML_RNGP_REF_NO_DEF</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_REF_NO_NAME">XML_RNGP_REF_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_START_CHOICE_AND_INTERLEAVE">XML_RNGP_START_CHOICE_AND_INTERLEAVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_START_CONTENT">XML_RNGP_START_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_START_EMPTY">XML_RNGP_START_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_START_MISSING">XML_RNGP_START_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TEXT_EXPECTED">XML_RNGP_TEXT_EXPECTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TEXT_HAS_CHILD">XML_RNGP_TEXT_HAS_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TYPE_MISSING">XML_RNGP_TYPE_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TYPE_NOT_FOUND">XML_RNGP_TYPE_NOT_FOUND</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_TYPE_VALUE">XML_RNGP_TYPE_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_UNKNOWN_ATTRIBUTE">XML_RNGP_UNKNOWN_ATTRIBUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_UNKNOWN_COMBINE">XML_RNGP_UNKNOWN_COMBINE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_UNKNOWN_CONSTRUCT">XML_RNGP_UNKNOWN_CONSTRUCT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_UNKNOWN_TYPE_LIB">XML_RNGP_UNKNOWN_TYPE_LIB</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_URI_FRAGMENT">XML_RNGP_URI_FRAGMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_URI_NOT_ABSOLUTE">XML_RNGP_URI_NOT_ABSOLUTE</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_VALUE_EMPTY">XML_RNGP_VALUE_EMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_VALUE_NO_CONTENT">XML_RNGP_VALUE_NO_CONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_XMLNS_NAME">XML_RNGP_XMLNS_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_RNGP_XML_NS">XML_RNGP_XML_NS</a><br />
+<a href="html/libxml-xmlerror.html#XML_SAVE_CHAR_INVALID">XML_SAVE_CHAR_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_SAVE_NOT_UTF8">XML_SAVE_NOT_UTF8</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 />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ATTRFORMDEFAULT_VALUE">XML_SCHEMAP_ATTRFORMDEFAULT_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ATTRGRP_NONAME_NOREF">XML_SCHEMAP_ATTRGRP_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ATTR_NONAME_NOREF">XML_SCHEMAP_ATTR_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF">XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_DEF_AND_PREFIX">XML_SCHEMAP_DEF_AND_PREFIX</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ELEMFORMDEFAULT_VALUE">XML_SCHEMAP_ELEMFORMDEFAULT_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ELEM_DEFAULT_FIXED">XML_SCHEMAP_ELEM_DEFAULT_FIXED</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_ELEM_NONAME_NOREF">XML_SCHEMAP_ELEM_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_EXTENSION_NO_BASE">XML_SCHEMAP_EXTENSION_NO_BASE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_FACET_NO_VALUE">XML_SCHEMAP_FACET_NO_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_FAILED_BUILD_IMPORT">XML_SCHEMAP_FAILED_BUILD_IMPORT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_FAILED_LOAD">XML_SCHEMAP_FAILED_LOAD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_FAILED_PARSE">XML_SCHEMAP_FAILED_PARSE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_GROUP_NONAME_NOREF">XML_SCHEMAP_GROUP_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI">XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_IMPORT_REDEFINE_NSNAME">XML_SCHEMAP_IMPORT_REDEFINE_NSNAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI">XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI">XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI">XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_BOOLEAN">XML_SCHEMAP_INVALID_BOOLEAN</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_ENUM">XML_SCHEMAP_INVALID_ENUM</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_FACET">XML_SCHEMAP_INVALID_FACET</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_FACET_VALUE">XML_SCHEMAP_INVALID_FACET_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_MAXOCCURS">XML_SCHEMAP_INVALID_MAXOCCURS</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_MINOCCURS">XML_SCHEMAP_INVALID_MINOCCURS</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_REF_AND_SUBTYPE">XML_SCHEMAP_INVALID_REF_AND_SUBTYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_INVALID_WHITE_SPACE">XML_SCHEMAP_INVALID_WHITE_SPACE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOATTR_NOREF">XML_SCHEMAP_NOATTR_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOROOT">XML_SCHEMAP_NOROOT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOTATION_NO_NAME">XML_SCHEMAP_NOTATION_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOTHING_TO_PARSE">XML_SCHEMAP_NOTHING_TO_PARSE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOTYPE_NOREF">XML_SCHEMAP_NOTYPE_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_NOT_SCHEMA">XML_SCHEMAP_NOT_SCHEMA</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_PREFIX_UNDEFINED">XML_SCHEMAP_PREFIX_UNDEFINED</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_ATTR">XML_SCHEMAP_REDEFINED_ATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_ATTRGROUP">XML_SCHEMAP_REDEFINED_ATTRGROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_ELEMENT">XML_SCHEMAP_REDEFINED_ELEMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_GROUP">XML_SCHEMAP_REDEFINED_GROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_NOTATION">XML_SCHEMAP_REDEFINED_NOTATION</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REDEFINED_TYPE">XML_SCHEMAP_REDEFINED_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REF_AND_SUBTYPE">XML_SCHEMAP_REF_AND_SUBTYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_REGEXP_INVALID">XML_SCHEMAP_REGEXP_INVALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_RESTRICTION_NONAME_NOREF">XML_SCHEMAP_RESTRICTION_NONAME_NOREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SIMPLETYPE_NONAME">XML_SCHEMAP_SIMPLETYPE_NONAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_TYPE_AND_SUBTYPE">XML_SCHEMAP_TYPE_AND_SUBTYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ALL_CHILD">XML_SCHEMAP_UNKNOWN_ALL_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD">XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD">XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP">XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ATTR_CHILD">XML_SCHEMAP_UNKNOWN_ATTR_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_BASE_TYPE">XML_SCHEMAP_UNKNOWN_BASE_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_CHOICE_CHILD">XML_SCHEMAP_UNKNOWN_CHOICE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD">XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD">XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_ELEM_CHILD">XML_SCHEMAP_UNKNOWN_ELEM_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD">XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_FACET_CHILD">XML_SCHEMAP_UNKNOWN_FACET_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_FACET_TYPE">XML_SCHEMAP_UNKNOWN_FACET_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_GROUP_CHILD">XML_SCHEMAP_UNKNOWN_GROUP_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_IMPORT_CHILD">XML_SCHEMAP_UNKNOWN_IMPORT_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD">XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_LIST_CHILD">XML_SCHEMAP_UNKNOWN_LIST_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_NOTATION_CHILD">XML_SCHEMAP_UNKNOWN_NOTATION_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_PREFIX">XML_SCHEMAP_UNKNOWN_PREFIX</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD">XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_REF">XML_SCHEMAP_UNKNOWN_REF</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD">XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD">XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD">XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD">XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD">XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_TYPE">XML_SCHEMAP_UNKNOWN_TYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_UNKNOWN_UNION_CHILD">XML_SCHEMAP_UNKNOWN_UNION_CHILD</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_LAX">XML_SCHEMAS_ANYATTR_LAX</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_SKIP">XML_SCHEMAS_ANYATTR_SKIP</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ANYATTR_STRICT">XML_SCHEMAS_ANYATTR_STRICT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTR_NSDEFAULT">XML_SCHEMAS_ATTR_NSDEFAULT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_ABSTRACT">XML_SCHEMAS_ELEM_ABSTRACT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_DEFAULT">XML_SCHEMAS_ELEM_DEFAULT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_FIXED">XML_SCHEMAS_ELEM_FIXED</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_GLOBAL">XML_SCHEMAS_ELEM_GLOBAL</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_NILLABLE">XML_SCHEMAS_ELEM_NILLABLE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_NSDEFAULT">XML_SCHEMAS_ELEM_NSDEFAULT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_REF">XML_SCHEMAS_ELEM_REF</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_TOPLEVEL">XML_SCHEMAS_ELEM_TOPLEVEL</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_">XML_SCHEMAS_ERR_</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_ATTRINVALID">XML_SCHEMAS_ERR_ATTRINVALID</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_ATTRUNKNOWN">XML_SCHEMAS_ERR_ATTRUNKNOWN</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_CONSTRUCT">XML_SCHEMAS_ERR_CONSTRUCT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_ELEMCONT">XML_SCHEMAS_ERR_ELEMCONT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_EXTRACONTENT">XML_SCHEMAS_ERR_EXTRACONTENT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_FACET">XML_SCHEMAS_ERR_FACET</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_HAVEDEFAULT">XML_SCHEMAS_ERR_HAVEDEFAULT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_INTERNAL">XML_SCHEMAS_ERR_INTERNAL</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_INVALIDATTR">XML_SCHEMAS_ERR_INVALIDATTR</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_INVALIDELEM">XML_SCHEMAS_ERR_INVALIDELEM</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_ISABSTRACT">XML_SCHEMAS_ERR_ISABSTRACT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_MISSING">XML_SCHEMAS_ERR_MISSING</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOROLLBACK">XML_SCHEMAS_ERR_NOROLLBACK</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOROOT">XML_SCHEMAS_ERR_NOROOT</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTDETERMINIST">XML_SCHEMAS_ERR_NOTDETERMINIST</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTEMPTY">XML_SCHEMAS_ERR_NOTEMPTY</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTNILLABLE">XML_SCHEMAS_ERR_NOTNILLABLE</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTSIMPLE">XML_SCHEMAS_ERR_NOTSIMPLE</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTTOPLEVEL">XML_SCHEMAS_ERR_NOTTOPLEVEL</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_NOTYPE">XML_SCHEMAS_ERR_NOTYPE</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_OK">XML_SCHEMAS_ERR_OK</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_UNDECLAREDELEM">XML_SCHEMAS_ERR_UNDECLAREDELEM</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_VALUE">XML_SCHEMAS_ERR_VALUE</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_WRONGELEM">XML_SCHEMAS_ERR_WRONGELEM</a><br />
+<a href="html/libxml-xmlschemas.html#XML_SCHEMAS_ERR_XXX">XML_SCHEMAS_ERR_XXX</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_COLLAPSE">XML_SCHEMAS_FACET_COLLAPSE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_PRESERVE">XML_SCHEMAS_FACET_PRESERVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_REPLACE">XML_SCHEMAS_FACET_REPLACE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_UNKNOWN">XML_SCHEMAS_FACET_UNKNOWN</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ATTR">XML_SCHEMAS_QUALIF_ATTR</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_QUALIF_ELEM">XML_SCHEMAS_QUALIF_ELEM</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_MIXED">XML_SCHEMAS_TYPE_MIXED</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 />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_ELEMCONT">XML_SCHEMAV_ELEMCONT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_EXTRACONTENT">XML_SCHEMAV_EXTRACONTENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_FACET">XML_SCHEMAV_FACET</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_HAVEDEFAULT">XML_SCHEMAV_HAVEDEFAULT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_INTERNAL">XML_SCHEMAV_INTERNAL</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_INVALIDATTR">XML_SCHEMAV_INVALIDATTR</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_INVALIDELEM">XML_SCHEMAV_INVALIDELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_ISABSTRACT">XML_SCHEMAV_ISABSTRACT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_MISSING">XML_SCHEMAV_MISSING</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOROLLBACK">XML_SCHEMAV_NOROLLBACK</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOROOT">XML_SCHEMAV_NOROOT</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTDETERMINIST">XML_SCHEMAV_NOTDETERMINIST</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTEMPTY">XML_SCHEMAV_NOTEMPTY</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTNILLABLE">XML_SCHEMAV_NOTNILLABLE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTSIMPLE">XML_SCHEMAV_NOTSIMPLE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTTOPLEVEL">XML_SCHEMAV_NOTTOPLEVEL</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_NOTYPE">XML_SCHEMAV_NOTYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_UNDECLAREDELEM">XML_SCHEMAV_UNDECLAREDELEM</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_VALUE">XML_SCHEMAV_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAV_WRONGELEM">XML_SCHEMAV_WRONGELEM</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_ANY">XML_SCHEMA_CONTENT_ANY</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_BASIC">XML_SCHEMA_CONTENT_BASIC</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_ELEMENTS">XML_SCHEMA_CONTENT_ELEMENTS</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_EMPTY">XML_SCHEMA_CONTENT_EMPTY</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_MIXED">XML_SCHEMA_CONTENT_MIXED</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS">XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_SIMPLE">XML_SCHEMA_CONTENT_SIMPLE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_CONTENT_UNKNOWN">XML_SCHEMA_CONTENT_UNKNOWN</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_ENUMERATION">XML_SCHEMA_FACET_ENUMERATION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_FRACTIONDIGITS">XML_SCHEMA_FACET_FRACTIONDIGITS</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_LENGTH">XML_SCHEMA_FACET_LENGTH</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MAXEXCLUSIVE">XML_SCHEMA_FACET_MAXEXCLUSIVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MAXINCLUSIVE">XML_SCHEMA_FACET_MAXINCLUSIVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MAXLENGTH">XML_SCHEMA_FACET_MAXLENGTH</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MINEXCLUSIVE">XML_SCHEMA_FACET_MINEXCLUSIVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MININCLUSIVE">XML_SCHEMA_FACET_MININCLUSIVE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_MINLENGTH">XML_SCHEMA_FACET_MINLENGTH</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_PATTERN">XML_SCHEMA_FACET_PATTERN</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_TOTALDIGITS">XML_SCHEMA_FACET_TOTALDIGITS</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_FACET_WHITESPACE">XML_SCHEMA_FACET_WHITESPACE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ALL">XML_SCHEMA_TYPE_ALL</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ANY">XML_SCHEMA_TYPE_ANY</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ATTRIBUTE">XML_SCHEMA_TYPE_ATTRIBUTE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ATTRIBUTEGROUP">XML_SCHEMA_TYPE_ATTRIBUTEGROUP</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_BASIC">XML_SCHEMA_TYPE_BASIC</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_CHOICE">XML_SCHEMA_TYPE_CHOICE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_COMPLEX">XML_SCHEMA_TYPE_COMPLEX</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_COMPLEX_CONTENT">XML_SCHEMA_TYPE_COMPLEX_CONTENT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_ELEMENT">XML_SCHEMA_TYPE_ELEMENT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_EXTENSION">XML_SCHEMA_TYPE_EXTENSION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_FACET">XML_SCHEMA_TYPE_FACET</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_GROUP">XML_SCHEMA_TYPE_GROUP</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_LIST">XML_SCHEMA_TYPE_LIST</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_NOTATION">XML_SCHEMA_TYPE_NOTATION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_RESTRICTION">XML_SCHEMA_TYPE_RESTRICTION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_SEQUENCE">XML_SCHEMA_TYPE_SEQUENCE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_SIMPLE">XML_SCHEMA_TYPE_SIMPLE</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_SIMPLE_CONTENT">XML_SCHEMA_TYPE_SIMPLE_CONTENT</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_UNION">XML_SCHEMA_TYPE_UNION</a><br />
+<a href="html/libxml-schemasInternals.html#XML_SCHEMA_TYPE_UR">XML_SCHEMA_TYPE_UR</a><br />
+<a href="html/libxml-parser.html#XML_SKIP_IDS">XML_SKIP_IDS</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a><br />
+<a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a><br />
+<a href="html/libxml-tree.html#XML_TEXT_NODE">XML_TEXT_NODE</a><br />
+<a href="html/libxml-xmlerror.html#XML_TREE_INVALID_DEC">XML_TREE_INVALID_DEC</a><br />
+<a href="html/libxml-xmlerror.html#XML_TREE_INVALID_HEX">XML_TREE_INVALID_HEX</a><br />
+<a href="html/libxml-xmlerror.html#XML_TREE_UNTERMINATED_ENTITY">XML_TREE_UNTERMINATED_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_CATALOG_PI">XML_WAR_CATALOG_PI</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_LANG_VALUE">XML_WAR_LANG_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_NS_URI">XML_WAR_NS_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_NS_URI_RELATIVE">XML_WAR_NS_URI_RELATIVE</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_UNDECLARED_ENTITY">XML_WAR_UNDECLARED_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_WAR_UNKNOWN_VERSION">XML_WAR_UNKNOWN_VERSION</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_BUILD_FAILED">XML_XINCLUDE_BUILD_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_DEPRECATED_NS">XML_XINCLUDE_DEPRECATED_NS</a><br />
+<a href="html/libxml-tree.html#XML_XINCLUDE_END">XML_XINCLUDE_END</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_ENTITY_DEF_MISMATCH">XML_XINCLUDE_ENTITY_DEF_MISMATCH</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_FALLBACKS_IN_INCLUDE">XML_XINCLUDE_FALLBACKS_IN_INCLUDE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE">XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_FRAGMENT_ID">XML_XINCLUDE_FRAGMENT_ID</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_HREF_URI">XML_XINCLUDE_HREF_URI</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_INCLUDE_IN_INCLUDE">XML_XINCLUDE_INCLUDE_IN_INCLUDE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_INVALID_CHAR">XML_XINCLUDE_INVALID_CHAR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_MULTIPLE_ROOT">XML_XINCLUDE_MULTIPLE_ROOT</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_NO_FALLBACK">XML_XINCLUDE_NO_FALLBACK</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_NO_HREF">XML_XINCLUDE_NO_HREF</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_PARSE_VALUE">XML_XINCLUDE_PARSE_VALUE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_RECURSION">XML_XINCLUDE_RECURSION</a><br />
+<a href="html/libxml-tree.html#XML_XINCLUDE_START">XML_XINCLUDE_START</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_TEXT_DOCUMENT">XML_XINCLUDE_TEXT_DOCUMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_TEXT_FRAGMENT">XML_XINCLUDE_TEXT_FRAGMENT</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_UNKNOWN_ENCODING">XML_XINCLUDE_UNKNOWN_ENCODING</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_XPTR_FAILED">XML_XINCLUDE_XPTR_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_XINCLUDE_XPTR_RESULT">XML_XINCLUDE_XPTR_RESULT</a><br />
+<a href="html/libxml-tree.html#XML_XML_NAMESPACE">XML_XML_NAMESPACE</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 />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_ARITY">XML_XPATH_INVALID_ARITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_CHAR_ERROR">XML_XPATH_INVALID_CHAR_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_CTXT_POSITION">XML_XPATH_INVALID_CTXT_POSITION</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_CTXT_SIZE">XML_XPATH_INVALID_CTXT_SIZE</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_OPERAND">XML_XPATH_INVALID_OPERAND</a><br />
+<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-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 />
+<a href="html/libxml-xmlerror.html#XML_XPATH_UNDEF_PREFIX_ERROR">XML_XPATH_UNDEF_PREFIX_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_UNDEF_VARIABLE_ERROR">XML_XPATH_UNDEF_VARIABLE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_UNFINISHED_LITERAL_ERROR">XML_XPATH_UNFINISHED_LITERAL_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_UNKNOWN_FUNC_ERROR">XML_XPATH_UNKNOWN_FUNC_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPATH_VARIABLE_REF_ERROR">XML_XPATH_VARIABLE_REF_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_CHILDSEQ_START">XML_XPTR_CHILDSEQ_START</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_EVAL_FAILED">XML_XPTR_EVAL_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_EXTRA_OBJECTS">XML_XPTR_EXTRA_OBJECTS</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_RESOURCE_ERROR">XML_XPTR_RESOURCE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_SUB_RESOURCE_ERROR">XML_XPTR_SUB_RESOURCE_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_SYNTAX_ERROR">XML_XPTR_SYNTAX_ERROR</a><br />
+<a href="html/libxml-xmlerror.html#XML_XPTR_UNKNOWN_SCHEME">XML_XPTR_UNKNOWN_SCHEME</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 />
+<a href="html/libxml-xpath.html#XPATH_INVALID_ARITY">XPATH_INVALID_ARITY</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_CHAR_ERROR">XPATH_INVALID_CHAR_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_CTXT_POSITION">XPATH_INVALID_CTXT_POSITION</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_CTXT_SIZE">XPATH_INVALID_CTXT_SIZE</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_OPERAND">XPATH_INVALID_OPERAND</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_PREDICATE_ERROR">XPATH_INVALID_PREDICATE_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_INVALID_TYPE">XPATH_INVALID_TYPE</a><br />
+<a href="html/libxml-xpath.html#XPATH_LOCATIONSET">XPATH_LOCATIONSET</a><br />
+<a href="html/libxml-xpath.html#XPATH_MEMORY_ERROR">XPATH_MEMORY_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_NODESET">XPATH_NODESET</a><br />
+<a href="html/libxml-xpath.html#XPATH_NUMBER">XPATH_NUMBER</a><br />
+<a href="html/libxml-xpath.html#XPATH_NUMBER_ERROR">XPATH_NUMBER_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_POINT">XPATH_POINT</a><br />
+<a href="html/libxml-xpath.html#XPATH_RANGE">XPATH_RANGE</a><br />
+<a href="html/libxml-xpath.html#XPATH_START_LITERAL_ERROR">XPATH_START_LITERAL_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_STRING">XPATH_STRING</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNCLOSED_ERROR">XPATH_UNCLOSED_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNDEFINED">XPATH_UNDEFINED</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNDEF_PREFIX_ERROR">XPATH_UNDEF_PREFIX_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNDEF_VARIABLE_ERROR">XPATH_UNDEF_VARIABLE_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNFINISHED_LITERAL_ERROR">XPATH_UNFINISHED_LITERAL_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_UNKNOWN_FUNC_ERROR">XPATH_UNKNOWN_FUNC_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_USERS">XPATH_USERS</a><br />
+<a href="html/libxml-xpath.html#XPATH_VARIABLE_REF_ERROR">XPATH_VARIABLE_REF_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_XSLT_TREE">XPATH_XSLT_TREE</a><br />
+<a href="html/libxml-xpath.html#XPTR_RESOURCE_ERROR">XPTR_RESOURCE_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPTR_SUB_RESOURCE_ERROR">XPTR_SUB_RESOURCE_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPTR_SYNTAX_ERROR">XPTR_SYNTAX_ERROR</a><br />
+<a href="html/libxml-xpathInternals.html#XP_ERROR">XP_ERROR</a><br />
+<a href="html/libxml-xpathInternals.html#XP_ERROR0">XP_ERROR0</a><br />
+</p><h2>Letter _:</h2><p><a href="html/libxml-xmlexports.html#_REENTRANT">_REENTRANT</a><br />
+<a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-HTMLparser.html#_htmlEntityDesc">_htmlEntityDesc</a><br />
+<a href="html/libxml-xlink.html#_xlinkHandler">_xlinkHandler</a><br />
+<a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
+<a href="html/libxml-tree.html#_xmlAttribute">_xmlAttribute</a><br />
+<a href="html/libxml-tree.html#_xmlBuffer">_xmlBuffer</a><br />
+<a href="html/libxml-chvalid.html#_xmlChLRange">_xmlChLRange</a><br />
+<a href="html/libxml-chvalid.html#_xmlChRangeGroup">_xmlChRangeGroup</a><br />
+<a href="html/libxml-chvalid.html#_xmlChSRange">_xmlChSRange</a><br />
+<a href="html/libxml-encoding.html#_xmlCharEncodingHandler">_xmlCharEncodingHandler</a><br />
+<a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#_xmlDtd">_xmlDtd</a><br />
+<a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
+<a href="html/libxml-tree.html#_xmlElementContent">_xmlElementContent</a><br />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-tree.html#_xmlEnumeration">_xmlEnumeration</a><br />
+<a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+<a href="html/libxml-globals.html#_xmlGlobalState">_xmlGlobalState</a><br />
+<a href="html/libxml-tree.html#_xmlID">_xmlID</a><br />
+<a href="html/libxml-xpointer.html#_xmlLocationSet">_xmlLocationSet</a><br />
+<a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
+<a href="html/libxml-xpath.html#_xmlNodeSet">_xmlNodeSet</a><br />
+<a href="html/libxml-tree.html#_xmlNotation">_xmlNotation</a><br />
+<a href="html/libxml-tree.html#_xmlNs">_xmlNs</a><br />
+<a href="html/libxml-xmlIO.html#_xmlOutputBuffer">_xmlOutputBuffer</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+<a href="html/libxml-parser.html#_xmlParserNodeInfo">_xmlParserNodeInfo</a><br />
+<a href="html/libxml-parser.html#_xmlParserNodeInfoSeq">_xmlParserNodeInfoSeq</a><br />
+<a href="html/libxml-tree.html#_xmlRef">_xmlRef</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-parser.html#_xmlSAXLocator">_xmlSAXLocator</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaAnnot">_xmlSchemaAnnot</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaAttribute">_xmlSchemaAttribute</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaAttributeGroup">_xmlSchemaAttributeGroup</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaElement">_xmlSchemaElement</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaFacet">_xmlSchemaFacet</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaNotation">_xmlSchemaNotation</a><br />
+<a href="html/libxml-schemasInternals.html#_xmlSchemaType">_xmlSchemaType</a><br />
+<a href="html/libxml-debugXML.html#_xmlShellCtxt">_xmlShellCtxt</a><br />
+<a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
+<a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathAxis">_xmlXPathAxis</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathFunct">_xmlXPathFunct</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathObject">_xmlXPathObject</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathType">_xmlXPathType</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathVariable">_xmlXPathVariable</a><br />
+</p><h2>Letter a:</h2><p><a href="html/libxml-SAX.html#attribute">attribute</a><br />
+<a href="html/libxml-SAX.html#attributeDecl">attributeDecl</a><br />
+<a href="html/libxml-parser.html#attributeDeclSAXFunc">attributeDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#attributeSAXFunc">attributeSAXFunc</a><br />
+</p><h2>Letter c:</h2><p><a href="html/libxml-SAX.html#cdataBlock">cdataBlock</a><br />
+<a href="html/libxml-parser.html#cdataBlockSAXFunc">cdataBlockSAXFunc</a><br />
+<a href="html/libxml-SAX.html#characters">characters</a><br />
+<a href="html/libxml-parser.html#charactersSAXFunc">charactersSAXFunc</a><br />
+<a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
+<a href="html/libxml-SAX.html#comment">comment</a><br />
+<a href="html/libxml-parser.html#commentSAXFunc">commentSAXFunc</a><br />
+</p><h2>Letter d:</h2><p><a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
+<a href="html/libxml-globals.html#docbDefaultSAXHandler">docbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#docbDefaultSAXHandlerInit">docbDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a><br />
+<a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
+<a href="html/libxml-DOCBparser.html#docbFreeParserCtxt">docbFreeParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseChunk">docbParseChunk</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDoc">docbParseDoc</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseDocument">docbParseDocument</a><br />
+<a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
+<a href="html/libxml-DOCBparser.html#docbParserCtxt">docbParserCtxt</a><br />
+<a href="html/libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a><br />
+<a href="html/libxml-DOCBparser.html#docbParserInput">docbParserInput</a><br />
+<a href="html/libxml-DOCBparser.html#docbParserInputPtr">docbParserInputPtr</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXHandler">docbSAXHandler</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXHandlerPtr">docbSAXHandlerPtr</a><br />
+<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
+<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-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 />
+<a href="html/libxml-parser.html#endElementNsSAX2Func">endElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#endElementSAXFunc">endElementSAXFunc</a><br />
+<a href="html/libxml-SAX.html#entityDecl">entityDecl</a><br />
+<a href="html/libxml-parser.html#entityDeclSAXFunc">entityDeclSAXFunc</a><br />
+<a href="html/libxml-parser.html#errorSAXFunc">errorSAXFunc</a><br />
+<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-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 />
+<a href="html/libxml-SAX.html#getEntity">getEntity</a><br />
+<a href="html/libxml-parser.html#getEntitySAXFunc">getEntitySAXFunc</a><br />
+<a href="html/libxml-SAX.html#getLineNumber">getLineNumber</a><br />
+<a href="html/libxml-SAX.html#getNamespace">getNamespace</a><br />
+<a href="html/libxml-SAX.html#getParameterEntity">getParameterEntity</a><br />
+<a href="html/libxml-parser.html#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a><br />
+<a href="html/libxml-SAX.html#getPublicId">getPublicId</a><br />
+<a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
+<a href="html/libxml-SAX.html#globalNamespace">globalNamespace</a><br />
+</p><h2>Letter h:</h2><p><a href="html/libxml-SAX.html#hasExternalSubset">hasExternalSubset</a><br />
+<a href="html/libxml-parser.html#hasExternalSubsetSAXFunc">hasExternalSubsetSAXFunc</a><br />
+<a href="html/libxml-SAX.html#hasInternalSubset">hasInternalSubset</a><br />
+<a href="html/libxml-parser.html#hasInternalSubsetSAXFunc">hasInternalSubsetSAXFunc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
+<a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreateMemoryParserCtxt">htmlCreateMemoryParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFd">htmlCtxtReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadFile">htmlCtxtReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadIO">htmlCtxtReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReadMemory">htmlCtxtReadMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtReset">htmlCtxtReset</a><br />
+<a href="html/libxml-HTMLparser.html#htmlCtxtUseOptions">htmlCtxtUseOptions</a><br />
+<a href="html/libxml-globals.html#htmlDefaultSAXHandler">htmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#htmlDefaultSAXHandlerInit">htmlDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-HTMLparser.html#htmlDefaultSubelement">htmlDefaultSubelement</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocContentDumpFormatOutput">htmlDocContentDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocContentDumpOutput">htmlDocContentDumpOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocDump">htmlDocDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlDocDumpMemory">htmlDocDumpMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlElemDescPtr">htmlElemDescPtr</a><br />
+<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-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityDesc">htmlEntityDesc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityDescPtr">htmlEntityDescPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
+<a href="html/libxml-HTMLparser.html#htmlFreeParserCtxt">htmlFreeParserCtxt</a><br />
+<a href="html/libxml-HTMLtree.html#htmlGetMetaEncoding">htmlGetMetaEncoding</a><br />
+<a href="html/libxml-HTMLparser.html#htmlHandleOmittedElem">htmlHandleOmittedElem</a><br />
+<a href="html/libxml-parserInternals.html#htmlInitAutoClose">htmlInitAutoClose</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
+<a href="html/libxml-HTMLtree.html#htmlIsBooleanAttr">htmlIsBooleanAttr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlIsScriptAttribute">htmlIsScriptAttribute</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDoc">htmlNewDoc</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNewDocNoDtD">htmlNewDocNoDtD</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodePtr">htmlNodePtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseCharRef">htmlParseCharRef</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseChunk">htmlParseChunk</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDoc">htmlParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseDocument">htmlParseDocument</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParseFile">htmlParseFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserCtxt">htmlParserCtxt</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserInput">htmlParserInput</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserInputPtr">htmlParserInputPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserNodeInfo">htmlParserNodeInfo</a><br />
+<a href="html/libxml-HTMLparser.html#htmlParserOption">htmlParserOption</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadDoc">htmlReadDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFd">htmlReadFd</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadFile">htmlReadFile</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadIO">htmlReadIO</a><br />
+<a href="html/libxml-HTMLparser.html#htmlReadMemory">htmlReadMemory</a><br />
+<a href="html/libxml-HTMLparser.html#htmlRequiredAttrs">htmlRequiredAttrs</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXHandler">htmlSAXHandler</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
+<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</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-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+<a href="html/libxml-HTMLparser.html#htmlStatus">htmlStatus</a><br />
+<a href="html/libxml-HTMLparser.html#htmlTagLookup">htmlTagLookup</a><br />
+</p><h2>Letter i:</h2><p><a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
+<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
+<a href="html/libxml-xmlerror.html#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a><br />
+<a href="html/libxml-SAX.html#initdocbDefaultSAXHandler">initdocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#inithtmlDefaultSAXHandler">inithtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-parserInternals.html#inputPop">inputPop</a><br />
+<a href="html/libxml-parserInternals.html#inputPush">inputPush</a><br />
+<a href="html/libxml-SAX.html#internalSubset">internalSubset</a><br />
+<a href="html/libxml-parser.html#internalSubsetSAXFunc">internalSubsetSAXFunc</a><br />
+<a href="html/libxml-SAX.html#isStandalone">isStandalone</a><br />
+<a href="html/libxml-parser.html#isStandaloneSAXFunc">isStandaloneSAXFunc</a><br />
+<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
+</p><h2>Letter n:</h2><p><a href="html/libxml-parserInternals.html#namePop">namePop</a><br />
+<a href="html/libxml-parserInternals.html#namePush">namePush</a><br />
+<a href="html/libxml-SAX.html#namespaceDecl">namespaceDecl</a><br />
+<a href="html/libxml-parserInternals.html#nodePop">nodePop</a><br />
+<a href="html/libxml-parserInternals.html#nodePush">nodePush</a><br />
+<a href="html/libxml-SAX.html#notationDecl">notationDecl</a><br />
+<a href="html/libxml-parser.html#notationDeclSAXFunc">notationDeclSAXFunc</a><br />
+</p><h2>Letter o:</h2><p><a href="html/libxml-globals.html#oldXMLWDcompatibility">oldXMLWDcompatibility</a><br />
+</p><h2>Letter p:</h2><p><a href="html/libxml-SAX.html#processingInstruction">processingInstruction</a><br />
+<a href="html/libxml-parser.html#processingInstructionSAXFunc">processingInstructionSAXFunc</a><br />
+</p><h2>Letter r:</h2><p><a href="html/libxml-SAX.html#reference">reference</a><br />
+<a href="html/libxml-parser.html#referenceSAXFunc">referenceSAXFunc</a><br />
+<a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
+<a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
+</p><h2>Letter s:</h2><p><a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
+<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
+<a href="html/libxml-SAX.html#setNamespace">setNamespace</a><br />
+<a href="html/libxml-SAX.html#startDocument">startDocument</a><br />
+<a href="html/libxml-parser.html#startDocumentSAXFunc">startDocumentSAXFunc</a><br />
+<a href="html/libxml-SAX.html#startElement">startElement</a><br />
+<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
+<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
+</p><h2>Letter u:</h2><p><a href="html/libxml-SAX.html#unparsedEntityDecl">unparsedEntityDecl</a><br />
+<a href="html/libxml-parser.html#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a><br />
+</p><h2>Letter v:</h2><p><a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
+<a href="html/libxml-xpathInternals.html#valuePush">valuePush</a><br />
+</p><h2>Letter w:</h2><p><a href="html/libxml-parser.html#warningSAXFunc">warningSAXFunc</a><br />
+</p><h2>Letter x:</h2><p><a href="html/libxml-xlink.html#xlinkActuate">xlinkActuate</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-xlink.html#xlinkGetDefaultDetect">xlinkGetDefaultDetect</a><br />
+<a href="html/libxml-xlink.html#xlinkGetDefaultHandler">xlinkGetDefaultHandler</a><br />
+<a href="html/libxml-xlink.html#xlinkHRef">xlinkHRef</a><br />
+<a href="html/libxml-xlink.html#xlinkHandler">xlinkHandler</a><br />
+<a href="html/libxml-xlink.html#xlinkHandlerPtr">xlinkHandlerPtr</a><br />
+<a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+<a href="html/libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
+<a href="html/libxml-xlink.html#xlinkRole">xlinkRole</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-xlink.html#xlinkShow">xlinkShow</a><br />
+<a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
+<a href="html/libxml-xlink.html#xlinkTitle">xlinkTitle</a><br />
+<a href="html/libxml-xlink.html#xlinkType">xlinkType</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogDump">xmlACatalogDump</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolve">xmlACatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolvePublic">xmlACatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveSystem">xmlACatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlACatalogResolveURI">xmlACatalogResolveURI</a><br />
+<a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
+<a href="html/libxml-tree.html#xmlAddChildList">xmlAddChildList</a><br />
+<a href="html/libxml-entities.html#xmlAddDocEntity">xmlAddDocEntity</a><br />
+<a href="html/libxml-entities.html#xmlAddDtdEntity">xmlAddDtdEntity</a><br />
+<a href="html/libxml-valid.html#xmlAddElementDecl">xmlAddElementDecl</a><br />
+<a href="html/libxml-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
+<a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
+<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
+<a href="html/libxml-valid.html#xmlAddNotationDecl">xmlAddNotationDecl</a><br />
+<a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
+<a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-xmlIO.html#xmlAllocOutputBuffer">xmlAllocOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a><br />
+<a href="html/libxml-tree.html#xmlAttr">xmlAttr</a><br />
+<a href="html/libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a><br />
+<a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
+<a href="html/libxml-tree.html#xmlAttribute">xmlAttribute</a><br />
+<a href="html/libxml-tree.html#xmlAttributeDefault">xmlAttributeDefault</a><br />
+<a href="html/libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a><br />
+<a href="html/libxml-valid.html#xmlAttributeTable">xmlAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a><br />
+<a href="html/libxml-tree.html#xmlAttributeType">xmlAttributeType</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomata">xmlAutomata</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataGetInitState">xmlAutomataGetInitState</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataIsDeterminist">xmlAutomataIsDeterminist</a><br />
+<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#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
+<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#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewState">xmlAutomataNewState</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-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataSetFinalState">xmlAutomataSetFinalState</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataState">xmlAutomataState</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a><br />
+<a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+<a href="html/libxml-tree.html#xmlBuffer">xmlBuffer</a><br />
+<a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
+<a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
+<a href="html/libxml-globals.html#xmlBufferAllocScheme">xmlBufferAllocScheme</a><br />
+<a href="html/libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlBufferCCat">xmlBufferCCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferCat">xmlBufferCat</a><br />
+<a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreate">xmlBufferCreate</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateSize">xmlBufferCreateSize</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-tree.html#xmlBufferDump">xmlBufferDump</a><br />
+<a href="html/libxml-tree.html#xmlBufferEmpty">xmlBufferEmpty</a><br />
+<a href="html/libxml-tree.html#xmlBufferFree">xmlBufferFree</a><br />
+<a href="html/libxml-tree.html#xmlBufferGrow">xmlBufferGrow</a><br />
+<a href="html/libxml-tree.html#xmlBufferLength">xmlBufferLength</a><br />
+<a href="html/libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a><br />
+<a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
+<a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
+<a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteChar">xmlBufferWriteChar</a><br />
+<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+<a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
+<a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
+<a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
+<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+<a href="html/libxml-c14n.html#xmlC14NIsVisibleCallback">xmlC14NIsVisibleCallback</a><br />
+<a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+<a href="html/libxml-catalog.html#xmlCatalog">xmlCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAddLocal">xmlCatalogAddLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAllow">xmlCatalogAllow</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogCleanup">xmlCatalogCleanup</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogConvert">xmlCatalogConvert</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogDump">xmlCatalogDump</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogFreeLocal">xmlCatalogFreeLocal</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetPublic">xmlCatalogGetPublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogGetSystem">xmlCatalogGetSystem</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogIsEmpty">xmlCatalogIsEmpty</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogPrefer">xmlCatalogPrefer</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolve">xmlCatalogResolve</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolvePublic">xmlCatalogResolvePublic</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveSystem">xmlCatalogResolveSystem</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogResolveURI">xmlCatalogResolveURI</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</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-chvalid.html#xmlChLRange">xmlChLRange</a><br />
+<a href="html/libxml-chvalid.html#xmlChLRangePtr">xmlChLRangePtr</a><br />
+<a href="html/libxml-chvalid.html#xmlChRangeGroup">xmlChRangeGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlChRangeGroupPtr">xmlChRangeGroupPtr</a><br />
+<a href="html/libxml-chvalid.html#xmlChSRange">xmlChSRange</a><br />
+<a href="html/libxml-chvalid.html#xmlChSRangePtr">xmlChSRangePtr</a><br />
+<a href="html/libxml-xmlstring.html#xmlChar">xmlChar</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncCloseFunc">xmlCharEncCloseFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</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-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+<a href="html/libxml-xmlstring.html#xmlCharStrdup">xmlCharStrdup</a><br />
+<a href="html/libxml-xmlstring.html#xmlCharStrndup">xmlCharStrndup</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
+<a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
+<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
+<a href="html/libxml-tree.html#xmlChildrenNode">xmlChildrenNode</a><br />
+<a href="html/libxml-encoding.html#xmlCleanupCharEncodingHandlers">xmlCleanupCharEncodingHandlers</a><br />
+<a href="html/libxml-encoding.html#xmlCleanupEncodingAliases">xmlCleanupEncodingAliases</a><br />
+<a href="html/libxml-globals.html#xmlCleanupGlobals">xmlCleanupGlobals</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupInputCallbacks">xmlCleanupInputCallbacks</a><br />
+<a href="html/libxml-xmlmemory.html#xmlCleanupMemory">xmlCleanupMemory</a><br />
+<a href="html/libxml-xmlIO.html#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+<a href="html/libxml-entities.html#xmlCleanupPredefinedEntities">xmlCleanupPredefinedEntities</a><br />
+<a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
+<a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
+<a href="html/libxml-parser.html#xmlClearParserCtxt">xmlClearParserCtxt</a><br />
+<a href="html/libxml-catalog.html#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a><br />
+<a href="html/libxml-valid.html#xmlCopyAttributeTable">xmlCopyAttributeTable</a><br />
+<a href="html/libxml-parserInternals.html#xmlCopyChar">xmlCopyChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlCopyCharMultiByte">xmlCopyCharMultiByte</a><br />
+<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
+<a href="html/libxml-tree.html#xmlCopyDtd">xmlCopyDtd</a><br />
+<a href="html/libxml-valid.html#xmlCopyElementContent">xmlCopyElementContent</a><br />
+<a href="html/libxml-valid.html#xmlCopyElementTable">xmlCopyElementTable</a><br />
+<a href="html/libxml-entities.html#xmlCopyEntitiesTable">xmlCopyEntitiesTable</a><br />
+<a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
+<a href="html/libxml-xmlerror.html#xmlCopyError">xmlCopyError</a><br />
+<a href="html/libxml-tree.html#xmlCopyNamespace">xmlCopyNamespace</a><br />
+<a href="html/libxml-tree.html#xmlCopyNamespaceList">xmlCopyNamespaceList</a><br />
+<a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlCopyNodeList">xmlCopyNodeList</a><br />
+<a href="html/libxml-valid.html#xmlCopyNotationTable">xmlCopyNotationTable</a><br />
+<a href="html/libxml-tree.html#xmlCopyProp">xmlCopyProp</a><br />
+<a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</a><br />
+<a href="html/libxml-parser.html#xmlCreateDocParserCtxt">xmlCreateDocParserCtxt</a><br />
+<a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a><br />
+<a href="html/libxml-valid.html#xmlCreateEnumeration">xmlCreateEnumeration</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateFileParserCtxt">xmlCreateFileParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlCreateIntSubset">xmlCreateIntSubset</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateMemoryParserCtxt">xmlCreateMemoryParserCtxt</a><br />
+<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
+<a href="html/libxml-uri.html#xmlCreateURI">xmlCreateURI</a><br />
+<a href="html/libxml-parserInternals.html#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtGetLastError">xmlCtxtGetLastError</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadDoc">xmlCtxtReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFile">xmlCtxtReadFile</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadIO">xmlCtxtReadIO</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadMemory">xmlCtxtReadMemory</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReset">xmlCtxtReset</a><br />
+<a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
+<a href="html/libxml-parser.html#xmlCtxtResetPush">xmlCtxtResetPush</a><br />
+<a href="html/libxml-parser.html#xmlCtxtUseOptions">xmlCtxtUseOptions</a><br />
+<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttr">xmlDebugDumpAttr</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDTD">xmlDebugDumpDTD</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocument">xmlDebugDumpDocument</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpEntities">xmlDebugDumpEntities</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNode">xmlDebugDumpNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
+<a href="html/libxml-debugXML.html#xmlDebugDumpString">xmlDebugDumpString</a><br />
+<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-globals.html#xmlDefaultBufferSize">xmlDefaultBufferSize</a><br />
+<a href="html/libxml-globals.html#xmlDefaultSAXHandler">xmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlDefaultSAXHandlerInit">xmlDefaultSAXHandlerInit</a><br />
+<a href="html/libxml-globals.html#xmlDefaultSAXLocator">xmlDefaultSAXLocator</a><br />
+<a href="html/libxml-encoding.html#xmlDelEncodingAlias">xmlDelEncodingAlias</a><br />
+<a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlDeregisterNodeDefaultValue">xmlDeregisterNodeDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a><br />
+<a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
+<a href="html/libxml-dict.html#xmlDict">xmlDict</a><br />
+<a href="html/libxml-dict.html#xmlDictCreate">xmlDictCreate</a><br />
+<a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+<a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</a><br />
+<a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
+<a href="html/libxml-dict.html#xmlDictPtr">xmlDictPtr</a><br />
+<a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
+<a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+<a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
+<a href="html/libxml-globals.html#xmlDoValidityCheckingDefaultValue">xmlDoValidityCheckingDefaultValue</a><br />
+<a href="html/libxml-tree.html#xmlDoc">xmlDoc</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlDocDump">xmlDocDump</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDocPtr">xmlDocPtr</a><br />
+<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
+<a href="html/libxml-tree.html#xmlDtd">xmlDtd</a><br />
+<a href="html/libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a><br />
+<a href="html/libxml-valid.html#xmlDumpAttributeDecl">xmlDumpAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlDumpAttributeTable">xmlDumpAttributeTable</a><br />
+<a href="html/libxml-valid.html#xmlDumpElementDecl">xmlDumpElementDecl</a><br />
+<a href="html/libxml-valid.html#xmlDumpElementTable">xmlDumpElementTable</a><br />
+<a href="html/libxml-entities.html#xmlDumpEntitiesTable">xmlDumpEntitiesTable</a><br />
+<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-tree.html#xmlElemDump">xmlElemDump</a><br />
+<a href="html/libxml-tree.html#xmlElement">xmlElement</a><br />
+<a href="html/libxml-tree.html#xmlElementContent">xmlElementContent</a><br />
+<a href="html/libxml-tree.html#xmlElementContentOccur">xmlElementContentOccur</a><br />
+<a href="html/libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a><br />
+<a href="html/libxml-tree.html#xmlElementContentType">xmlElementContentType</a><br />
+<a href="html/libxml-tree.html#xmlElementPtr">xmlElementPtr</a><br />
+<a href="html/libxml-valid.html#xmlElementTable">xmlElementTable</a><br />
+<a href="html/libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a><br />
+<a href="html/libxml-tree.html#xmlElementType">xmlElementType</a><br />
+<a href="html/libxml-tree.html#xmlElementTypeVal">xmlElementTypeVal</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
+<a href="html/libxml-entities.html#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a><br />
+<a href="html/libxml-entities.html#xmlEntitiesTable">xmlEntitiesTable</a><br />
+<a href="html/libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a><br />
+<a href="html/libxml-tree.html#xmlEntity">xmlEntity</a><br />
+<a href="html/libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a><br />
+<a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
+<a href="html/libxml-entities.html#xmlEntityType">xmlEntityType</a><br />
+<a href="html/libxml-tree.html#xmlEnumeration">xmlEnumeration</a><br />
+<a href="html/libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a><br />
+<a href="html/libxml-parserInternals.html#xmlErrMemory">xmlErrMemory</a><br />
+<a href="html/libxml-xmlerror.html#xmlError">xmlError</a><br />
+<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-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</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 />
+<a href="html/libxml-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
+<a href="html/libxml-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a><br />
+<a href="html/libxml-globals.html#xmlFree">xmlFree</a><br />
+<a href="html/libxml-valid.html#xmlFreeAttributeTable">xmlFreeAttributeTable</a><br />
+<a href="html/libxml-xmlautomata.html#xmlFreeAutomata">xmlFreeAutomata</a><br />
+<a href="html/libxml-catalog.html#xmlFreeCatalog">xmlFreeCatalog</a><br />
+<a href="html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a><br />
+<a href="html/libxml-tree.html#xmlFreeDtd">xmlFreeDtd</a><br />
+<a href="html/libxml-valid.html#xmlFreeElementContent">xmlFreeElementContent</a><br />
+<a href="html/libxml-valid.html#xmlFreeElementTable">xmlFreeElementTable</a><br />
+<a href="html/libxml-entities.html#xmlFreeEntitiesTable">xmlFreeEntitiesTable</a><br />
+<a href="html/libxml-valid.html#xmlFreeEnumeration">xmlFreeEnumeration</a><br />
+<a href="html/libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a><br />
+<a href="html/libxml-valid.html#xmlFreeIDTable">xmlFreeIDTable</a><br />
+<a href="html/libxml-parserInternals.html#xmlFreeInputStream">xmlFreeInputStream</a><br />
+<a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
+<a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
+<a href="html/libxml-tree.html#xmlFreeNodeList">xmlFreeNodeList</a><br />
+<a href="html/libxml-valid.html#xmlFreeNotationTable">xmlFreeNotationTable</a><br />
+<a href="html/libxml-tree.html#xmlFreeNs">xmlFreeNs</a><br />
+<a href="html/libxml-tree.html#xmlFreeNsList">xmlFreeNsList</a><br />
+<a href="html/libxml-parser.html#xmlFreeParserCtxt">xmlFreeParserCtxt</a><br />
+<a href="html/libxml-xmlIO.html#xmlFreeParserInputBuffer">xmlFreeParserInputBuffer</a><br />
+<a href="html/libxml-pattern.html#xmlFreePattern">xmlFreePattern</a><br />
+<a href="html/libxml-pattern.html#xmlFreePatternList">xmlFreePatternList</a><br />
+<a href="html/libxml-tree.html#xmlFreeProp">xmlFreeProp</a><br />
+<a href="html/libxml-tree.html#xmlFreePropList">xmlFreePropList</a><br />
+<a href="html/libxml-threads.html#xmlFreeRMutex">xmlFreeRMutex</a><br />
+<a href="html/libxml-valid.html#xmlFreeRefTable">xmlFreeRefTable</a><br />
+<a href="html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a><br />
+<a href="html/libxml-xmlwriter.html#xmlFreeTextWriter">xmlFreeTextWriter</a><br />
+<a href="html/libxml-uri.html#xmlFreeURI">xmlFreeURI</a><br />
+<a href="html/libxml-valid.html#xmlFreeValidCtxt">xmlFreeValidCtxt</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
+<a href="html/libxml-globals.html#xmlGenericError">xmlGenericError</a><br />
+<a href="html/libxml-globals.html#xmlGenericErrorContext">xmlGenericErrorContext</a><br />
+<a href="html/libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a><br />
+<a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a><br />
+<a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</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-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 />
+<a href="html/libxml-entities.html#xmlGetDtdEntity">xmlGetDtdEntity</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
+<a href="html/libxml-valid.html#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a><br />
+<a href="html/libxml-encoding.html#xmlGetEncodingAlias">xmlGetEncodingAlias</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-threads.html#xmlGetGlobalState">xmlGetGlobalState</a><br />
+<a href="html/libxml-valid.html#xmlGetID">xmlGetID</a><br />
+<a href="html/libxml-tree.html#xmlGetIntSubset">xmlGetIntSubset</a><br />
+<a href="html/libxml-tree.html#xmlGetLastChild">xmlGetLastChild</a><br />
+<a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
+<a href="html/libxml-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</a><br />
+<a href="html/libxml-entities.html#xmlGetPredefinedEntity">xmlGetPredefinedEntity</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</a><br />
+<a href="html/libxml-threads.html#xmlGetThreadId">xmlGetThreadId</a><br />
+<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+<a href="html/libxml-globals.html#xmlGetWarningsDefaultValue">xmlGetWarningsDefaultValue</a><br />
+<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-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 />
+<a href="html/libxml-hash.html#xmlHashAddEntry2">xmlHashAddEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashAddEntry3">xmlHashAddEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashCopier">xmlHashCopier</a><br />
+<a href="html/libxml-hash.html#xmlHashCopy">xmlHashCopy</a><br />
+<a href="html/libxml-hash.html#xmlHashCreate">xmlHashCreate</a><br />
+<a href="html/libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a><br />
+<a href="html/libxml-hash.html#xmlHashFree">xmlHashFree</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 />
+<a href="html/libxml-hash.html#xmlHashQLookup">xmlHashQLookup</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup2">xmlHashQLookup2</a><br />
+<a href="html/libxml-hash.html#xmlHashQLookup3">xmlHashQLookup3</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
+<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
+<a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull">xmlHashScanFull</a><br />
+<a href="html/libxml-hash.html#xmlHashScanFull3">xmlHashScanFull3</a><br />
+<a href="html/libxml-hash.html#xmlHashScanner">xmlHashScanner</a><br />
+<a href="html/libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a><br />
+<a href="html/libxml-hash.html#xmlHashSize">xmlHashSize</a><br />
+<a href="html/libxml-hash.html#xmlHashTable">xmlHashTable</a><br />
+<a href="html/libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
+<a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+<a href="html/libxml-tree.html#xmlID">xmlID</a><br />
+<a href="html/libxml-tree.html#xmlIDPtr">xmlIDPtr</a><br />
+<a href="html/libxml-valid.html#xmlIDTable">xmlIDTable</a><br />
+<a href="html/libxml-valid.html#xmlIDTablePtr">xmlIDTablePtr</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPClose">xmlIOFTPClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPMatch">xmlIOFTPMatch</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPOpen">xmlIOFTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOFTPRead">xmlIOFTPRead</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPClose">xmlIOHTTPClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPMatch">xmlIOHTTPMatch</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpen">xmlIOHTTPOpen</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
+<a href="html/libxml-xmlIO.html#xmlIOHTTPRead">xmlIOHTTPRead</a><br />
+<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
+<a href="html/libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a><br />
+<a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-globals.html#xmlInitGlobals">xmlInitGlobals</a><br />
+<a href="html/libxml-xmlmemory.html#xmlInitMemory">xmlInitMemory</a><br />
+<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
+<a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
+<a href="html/libxml-parser.html#xmlInitParserCtxt">xmlInitParserCtxt</a><br />
+<a href="html/libxml-threads.html#xmlInitThreads">xmlInitThreads</a><br />
+<a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
+<a href="html/libxml-globals.html#xmlInitializeGlobalState">xmlInitializeGlobalState</a><br />
+<a href="html/libxml-entities.html#xmlInitializePredefinedEntities">xmlInitializePredefinedEntities</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar">xmlIsBaseChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseCharGroup">xmlIsBaseCharGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseCharQ">xmlIsBaseCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBaseChar_ch">xmlIsBaseChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank">xmlIsBlank</a><br />
+<a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlankQ">xmlIsBlankQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsBlank_ch">xmlIsBlank_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar">xmlIsChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCharGroup">xmlIsCharGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCharQ">xmlIsCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsChar_ch">xmlIsChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombining">xmlIsCombining</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombiningGroup">xmlIsCombiningGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsCombiningQ">xmlIsCombiningQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit">xmlIsDigit</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigitGroup">xmlIsDigitGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigitQ">xmlIsDigitQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsDigit_ch">xmlIsDigit_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender">xmlIsExtender</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtenderGroup">xmlIsExtenderGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtenderQ">xmlIsExtenderQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsExtender_ch">xmlIsExtender_ch</a><br />
+<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographic">xmlIsIdeographic</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographicGroup">xmlIsIdeographicGroup</a><br />
+<a href="html/libxml-chvalid.html#xmlIsIdeographicQ">xmlIsIdeographicQ</a><br />
+<a href="html/libxml-parserInternals.html#xmlIsLetter">xmlIsLetter</a><br />
+<a href="html/libxml-threads.html#xmlIsMainThread">xmlIsMainThread</a><br />
+<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidCharQ">xmlIsPubidCharQ</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar_ch">xmlIsPubidChar_ch</a><br />
+<a href="html/libxml-chvalid.html#xmlIsPubidChar_tab">xmlIsPubidChar_tab</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+<a href="html/libxml-tree.html#xmlIsXHTML">xmlIsXHTML</a><br />
+<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-globals.html#xmlKeepBlanksDefaultValue">xmlKeepBlanksDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlLastError">xmlLastError</a><br />
+<a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
+<a href="html/libxml-globals.html#xmlLineNumbersDefaultValue">xmlLineNumbersDefaultValue</a><br />
+<a href="html/libxml-list.html#xmlLink">xmlLink</a><br />
+<a href="html/libxml-list.html#xmlLinkGetData">xmlLinkGetData</a><br />
+<a href="html/libxml-list.html#xmlLinkPtr">xmlLinkPtr</a><br />
+<a href="html/libxml-list.html#xmlList">xmlList</a><br />
+<a href="html/libxml-list.html#xmlListAppend">xmlListAppend</a><br />
+<a href="html/libxml-list.html#xmlListClear">xmlListClear</a><br />
+<a href="html/libxml-list.html#xmlListCopy">xmlListCopy</a><br />
+<a href="html/libxml-list.html#xmlListCreate">xmlListCreate</a><br />
+<a href="html/libxml-list.html#xmlListDataCompare">xmlListDataCompare</a><br />
+<a href="html/libxml-list.html#xmlListDeallocator">xmlListDeallocator</a><br />
+<a href="html/libxml-list.html#xmlListDelete">xmlListDelete</a><br />
+<a href="html/libxml-list.html#xmlListDup">xmlListDup</a><br />
+<a href="html/libxml-list.html#xmlListEmpty">xmlListEmpty</a><br />
+<a href="html/libxml-list.html#xmlListEnd">xmlListEnd</a><br />
+<a href="html/libxml-list.html#xmlListFront">xmlListFront</a><br />
+<a href="html/libxml-list.html#xmlListInsert">xmlListInsert</a><br />
+<a href="html/libxml-list.html#xmlListMerge">xmlListMerge</a><br />
+<a href="html/libxml-list.html#xmlListPopBack">xmlListPopBack</a><br />
+<a href="html/libxml-list.html#xmlListPopFront">xmlListPopFront</a><br />
+<a href="html/libxml-list.html#xmlListPtr">xmlListPtr</a><br />
+<a href="html/libxml-list.html#xmlListPushBack">xmlListPushBack</a><br />
+<a href="html/libxml-list.html#xmlListPushFront">xmlListPushFront</a><br />
+<a href="html/libxml-list.html#xmlListRemoveAll">xmlListRemoveAll</a><br />
+<a href="html/libxml-list.html#xmlListRemoveFirst">xmlListRemoveFirst</a><br />
+<a href="html/libxml-list.html#xmlListRemoveLast">xmlListRemoveLast</a><br />
+<a href="html/libxml-list.html#xmlListReverse">xmlListReverse</a><br />
+<a href="html/libxml-list.html#xmlListReverseSearch">xmlListReverseSearch</a><br />
+<a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
+<a href="html/libxml-list.html#xmlListSearch">xmlListSearch</a><br />
+<a href="html/libxml-list.html#xmlListSize">xmlListSize</a><br />
+<a href="html/libxml-list.html#xmlListSort">xmlListSort</a><br />
+<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+<a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
+<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
+<a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
+<a href="html/libxml-globals.html#xmlLoadExtDtdDefaultValue">xmlLoadExtDtdDefaultValue</a><br />
+<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+<a href="html/libxml-xpointer.html#xmlLocationSet">xmlLocationSet</a><br />
+<a href="html/libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a><br />
+<a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
+<a href="html/libxml-debugXML.html#xmlLsCountNode">xmlLsCountNode</a><br />
+<a href="html/libxml-debugXML.html#xmlLsOneNode">xmlLsOneNode</a><br />
+<a href="html/libxml-globals.html#xmlMalloc">xmlMalloc</a><br />
+<a href="html/libxml-globals.html#xmlMallocAtomic">xmlMallocAtomic</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemDisplay">xmlMemDisplay</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemFree">xmlMemFree</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemMalloc">xmlMemMalloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemRealloc">xmlMemRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemShow">xmlMemShow</a><br />
+<a href="html/libxml-globals.html#xmlMemStrdup">xmlMemStrdup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemStrdupLoc">xmlMemStrdupLoc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemUsed">xmlMemUsed</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a><br />
+<a href="html/libxml-xmlmemory.html#xmlMemoryStrdup">xmlMemoryStrdup</a><br />
+<a href="html/libxml-threads.html#xmlMutex">xmlMutex</a><br />
+<a href="html/libxml-threads.html#xmlMutexLock">xmlMutexLock</a><br />
+<a href="html/libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a><br />
+<a href="html/libxml-threads.html#xmlMutexUnlock">xmlMutexUnlock</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 />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCleanup">xmlNanoFTPCleanup</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPClose">xmlNanoFTPClose</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCloseConnection">xmlNanoFTPCloseConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnect">xmlNanoFTPConnect</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPDele">xmlNanoFTPDele</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPInit">xmlNanoFTPInit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPNewCtxt">xmlNanoFTPNewCtxt</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPOpen">xmlNanoFTPOpen</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPQuit">xmlNanoFTPQuit</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPCleanup">xmlNanoHTTPCleanup</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPClose">xmlNanoHTTPClose</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPEncoding">xmlNanoHTTPEncoding</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPInit">xmlNanoHTTPInit</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#xmlNanoHTTPMimeType">xmlNanoHTTPMimeType</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#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPRedir">xmlNanoHTTPRedir</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
+<a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
+<a href="html/libxml-xmlautomata.html#xmlNewAutomata">xmlNewAutomata</a><br />
+<a href="html/libxml-tree.html#xmlNewCDataBlock">xmlNewCDataBlock</a><br />
+<a href="html/libxml-catalog.html#xmlNewCatalog">xmlNewCatalog</a><br />
+<a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
+<a href="html/libxml-tree.html#xmlNewCharRef">xmlNewCharRef</a><br />
+<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-tree.html#xmlNewComment">xmlNewComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDoc">xmlNewDoc</a><br />
+<a href="html/libxml-tree.html#xmlNewDocComment">xmlNewDocComment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocFragment">xmlNewDocFragment</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewDocProp">xmlNewDocProp</a><br />
+<a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
+<a href="html/libxml-tree.html#xmlNewDocText">xmlNewDocText</a><br />
+<a href="html/libxml-tree.html#xmlNewDocTextLen">xmlNewDocTextLen</a><br />
+<a href="html/libxml-tree.html#xmlNewDtd">xmlNewDtd</a><br />
+<a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
+<a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
+<a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputFromFile">xmlNewInputFromFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewInputStream">xmlNewInputStream</a><br />
+<a href="html/libxml-threads.html#xmlNewMutex">xmlNewMutex</a><br />
+<a href="html/libxml-tree.html#xmlNewNode">xmlNewNode</a><br />
+<a href="html/libxml-tree.html#xmlNewNodeEatName">xmlNewNodeEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
+<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
+<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
+<a href="html/libxml-tree.html#xmlNewPI">xmlNewPI</a><br />
+<a href="html/libxml-parser.html#xmlNewParserCtxt">xmlNewParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
+<a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+<a href="html/libxml-tree.html#xmlNewReference">xmlNewReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlNewStringInputStream">xmlNewStringInputStream</a><br />
+<a href="html/libxml-tree.html#xmlNewText">xmlNewText</a><br />
+<a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
+<a href="html/libxml-tree.html#xmlNewTextLen">xmlNewTextLen</a><br />
+<a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
+<a href="html/libxml-xmlreader.html#xmlNewTextReaderFilename">xmlNewTextReaderFilename</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
+<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
+<a href="html/libxml-valid.html#xmlNewValidCtxt">xmlNewValidCtxt</a><br />
+<a href="html/libxml-parserInternals.html#xmlNextChar">xmlNextChar</a><br />
+<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+<a href="html/libxml-tree.html#xmlNode">xmlNode</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContent">xmlNodeAddContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-tree.html#xmlNodeIsText">xmlNodeIsText</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+<a href="html/libxml-tree.html#xmlNodePtr">xmlNodePtr</a><br />
+<a href="html/libxml-xpath.html#xmlNodeSet">xmlNodeSet</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetBase">xmlNodeSetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetContentLen">xmlNodeSetContentLen</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetLang">xmlNodeSetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetName">xmlNodeSetName</a><br />
+<a href="html/libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a><br />
+<a href="html/libxml-tree.html#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a><br />
+<a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
+<a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
+<a href="html/libxml-tree.html#xmlNotation">xmlNotation</a><br />
+<a href="html/libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a><br />
+<a href="html/libxml-valid.html#xmlNotationTable">xmlNotationTable</a><br />
+<a href="html/libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a><br />
+<a href="html/libxml-tree.html#xmlNs">xmlNs</a><br />
+<a href="html/libxml-tree.html#xmlNsPtr">xmlNsPtr</a><br />
+<a href="html/libxml-tree.html#xmlNsType">xmlNsType</a><br />
+<a href="html/libxml-tree.html#xmlOutputBuffer">xmlOutputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferFlush">xmlOutputBufferFlush</a><br />
+<a href="html/libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
+<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCDSect">xmlParseCDSect</a><br />
+<a href="html/libxml-catalog.html#xmlParseCatalogFile">xmlParseCatalogFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+<a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
+<a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseComment">xmlParseComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseContent">xmlParseContent</a><br />
+<a href="html/libxml-parser.html#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a><br />
+<a href="html/libxml-parser.html#xmlParseDTD">xmlParseDTD</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
+<a href="html/libxml-parser.html#xmlParseDoc">xmlParseDoc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a><br />
+<a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElement">xmlParseElement</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncName">xmlParseEncName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEndTag">xmlParseEndTag</a><br />
+<a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityDecl">xmlParseEntityDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumeratedType">xmlParseEnumeratedType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+<a href="html/libxml-parser.html#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a><br />
+<a href="html/libxml-parser.html#xmlParseExternalEntity">xmlParseExternalEntity</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
+<a href="html/libxml-parser.html#xmlParseFile">xmlParseFile</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+<a href="html/libxml-parser.html#xmlParseMemory">xmlParseMemory</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMisc">xmlParseMisc</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNmtoken">xmlParseNmtoken</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePI">xmlParsePI</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePITarget">xmlParsePITarget</a><br />
+<a href="html/libxml-parserInternals.html#xmlParsePubidLiteral">xmlParsePubidLiteral</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+<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#xmlParseURIReference">xmlParseURIReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionInfo">xmlParseVersionInfo</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseVersionNum">xmlParseVersionNum</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseXMLDecl">xmlParseXMLDecl</a><br />
+<a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
+<a href="html/libxml-tree.html#xmlParserCtxt">xmlParserCtxt</a><br />
+<a href="html/libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a><br />
+<a href="html/libxml-globals.html#xmlParserDebugEntities">xmlParserDebugEntities</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserError">xmlParserError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserErrors">xmlParserErrors</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserGetDirectory">xmlParserGetDirectory</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-tree.html#xmlParserInput">xmlParserInput</a><br />
+<a href="html/libxml-tree.html#xmlParserInputBuffer">xmlParserInputBuffer</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
+<a href="html/libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
+<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+<a href="html/libxml-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+<a href="html/libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserInputShrink">xmlParserInputShrink</a><br />
+<a href="html/libxml-parser.html#xmlParserInputState">xmlParserInputState</a><br />
+<a href="html/libxml-parserInternals.html#xmlParserMaxDepth">xmlParserMaxDepth</a><br />
+<a href="html/libxml-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a><br />
+<a href="html/libxml-parser.html#xmlParserNodeInfoPtr">xmlParserNodeInfoPtr</a><br />
+<a href="html/libxml-parser.html#xmlParserNodeInfoSeq">xmlParserNodeInfoSeq</a><br />
+<a href="html/libxml-parser.html#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a><br />
+<a href="html/libxml-parser.html#xmlParserOption">xmlParserOption</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileContext">xmlParserPrintFileContext</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserPrintFileInfo">xmlParserPrintFileInfo</a><br />
+<a href="html/libxml-xmlreader.html#xmlParserProperties">xmlParserProperties</a><br />
+<a href="html/libxml-xmlreader.html#xmlParserSeverities">xmlParserSeverities</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityError">xmlParserValidityError</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserValidityWarning">xmlParserValidityWarning</a><br />
+<a href="html/libxml-globals.html#xmlParserVersion">xmlParserVersion</a><br />
+<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
+<a href="html/libxml-pattern.html#xmlPattern">xmlPattern</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
+<a href="html/libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a><br />
+<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
+<a href="html/libxml-parser.html#xmlPedanticParserDefault">xmlPedanticParserDefault</a><br />
+<a href="html/libxml-globals.html#xmlPedanticParserDefaultValue">xmlPedanticParserDefaultValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
+<a href="html/libxml-uri.html#xmlPrintURI">xmlPrintURI</a><br />
+<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+<a href="html/libxml-threads.html#xmlRMutex">xmlRMutex</a><br />
+<a href="html/libxml-threads.html#xmlRMutexLock">xmlRMutexLock</a><br />
+<a href="html/libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a><br />
+<a href="html/libxml-threads.html#xmlRMutexUnlock">xmlRMutexUnlock</a><br />
+<a href="html/libxml-parser.html#xmlReadDoc">xmlReadDoc</a><br />
+<a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
+<a href="html/libxml-parser.html#xmlReadFile">xmlReadFile</a><br />
+<a href="html/libxml-parser.html#xmlReadIO">xmlReadIO</a><br />
+<a href="html/libxml-parser.html#xmlReadMemory">xmlReadMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForIO">xmlReaderForIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderForMemory">xmlReaderForMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewIO">xmlReaderNewIO</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewMemory">xmlReaderNewMemory</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderNewWalker">xmlReaderNewWalker</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderTypes">xmlReaderTypes</a><br />
+<a href="html/libxml-xmlreader.html#xmlReaderWalker">xmlReaderWalker</a><br />
+<a href="html/libxml-globals.html#xmlRealloc">xmlRealloc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
+<a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</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 />
+<a href="html/libxml-tree.html#xmlRef">xmlRef</a><br />
+<a href="html/libxml-tree.html#xmlRefPtr">xmlRefPtr</a><br />
+<a href="html/libxml-valid.html#xmlRefTable">xmlRefTable</a><br />
+<a href="html/libxml-valid.html#xmlRefTablePtr">xmlRefTablePtr</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#xmlRegExecPushString">xmlRegExecPushString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a><br />
+<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#xmlRegexp">xmlRegexp</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpPrint">xmlRegexpPrint</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a><br />
+<a href="html/libxml-encoding.html#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultInputCallbacks">xmlRegisterDefaultInputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterDefaultOutputCallbacks">xmlRegisterDefaultOutputCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeDefaultValue">xmlRegisterNodeDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a><br />
+<a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNG">xmlRelaxNG</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGCleanupTypes">xmlRelaxNGCleanupTypes</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGDump">xmlRelaxNGDump</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGDumpTree">xmlRelaxNGDumpTree</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFree">xmlRelaxNGFree</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFreeParserCtxt">xmlRelaxNGFreeParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGFreeValidCtxt">xmlRelaxNGFreeValidCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGNewValidCtxt">xmlRelaxNGNewValidCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParserCtxt">xmlRelaxNGParserCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGParserFlag">xmlRelaxNGParserFlag</a><br />
+<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#xmlRelaxNGValidCtxt">xmlRelaxNGValidCtxt</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidErr">xmlRelaxNGValidErr</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 />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</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-relaxng.html#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a><br />
+<a href="html/libxml-valid.html#xmlRemoveID">xmlRemoveID</a><br />
+<a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
+<a href="html/libxml-valid.html#xmlRemoveRef">xmlRemoveRef</a><br />
+<a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetError">xmlResetError</a><br />
+<a href="html/libxml-xmlerror.html#xmlResetLastError">xmlResetLastError</a><br />
+<a href="html/libxml-tree.html#xmlRootNode">xmlRootNode</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2AttributeDecl">xmlSAX2AttributeDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2CDataBlock">xmlSAX2CDataBlock</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Characters">xmlSAX2Characters</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2CheckNamespace">xmlSAX2CheckNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Comment">xmlSAX2Comment</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ElementDecl">xmlSAX2ElementDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndDocument">xmlSAX2EndDocument</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElement">xmlSAX2EndElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EndElementNs">xmlSAX2EndElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2EntityDecl">xmlSAX2EntityDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ExternalSubset">xmlSAX2ExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetColumnNumber">xmlSAX2GetColumnNumber</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetEntity">xmlSAX2GetEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetLineNumber">xmlSAX2GetLineNumber</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetNamespace">xmlSAX2GetNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetParameterEntity">xmlSAX2GetParameterEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetPublicId">xmlSAX2GetPublicId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2GlobalNamespace">xmlSAX2GlobalNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2HasExternalSubset">xmlSAX2HasExternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2HasInternalSubset">xmlSAX2HasInternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitDocbDefaultSAXHandler">xmlSAX2InitDocbDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InitHtmlDefaultSAXHandler">xmlSAX2InitHtmlDefaultSAXHandler</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2InternalSubset">xmlSAX2InternalSubset</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2IsStandalone">xmlSAX2IsStandalone</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2NamespaceDecl">xmlSAX2NamespaceDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2NotationDecl">xmlSAX2NotationDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ProcessingInstruction">xmlSAX2ProcessingInstruction</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2Reference">xmlSAX2Reference</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2SetNamespace">xmlSAX2SetNamespace</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartDocument">xmlSAX2StartDocument</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-SAX2.html#xmlSAX2UnparsedEntityDecl">xmlSAX2UnparsedEntityDecl</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+<a href="html/libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a><br />
+<a href="html/libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a><br />
+<a href="html/libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a><br />
+<a href="html/libxml-parser.html#xmlSAXHandlerV1Ptr">xmlSAXHandlerV1Ptr</a><br />
+<a href="html/libxml-tree.html#xmlSAXLocator">xmlSAXLocator</a><br />
+<a href="html/libxml-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDTD">xmlSAXParseDTD</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseDoc">xmlSAXParseDoc</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
+<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
+<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+<a href="html/libxml-SAX2.html#xmlSAXVersion">xmlSAXVersion</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 />
+<a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</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-xmlsave.html#xmlSaveFlush">xmlSaveFlush</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
+<a href="html/libxml-globals.html#xmlSaveNoEmptyTags">xmlSaveNoEmptyTags</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToBuffer">xmlSaveToBuffer</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
+<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
+<a href="html/libxml-uri.html#xmlSaveUri">xmlSaveUri</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchema">xmlSchema</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAnnot">xmlSchemaAnnot</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAttribute">xmlSchemaAttribute</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAttributeGroup">xmlSchemaAttributeGroup</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAttributeGroupPtr">xmlSchemaAttributeGroupPtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaAttributePtr">xmlSchemaAttributePtr</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCleanupTypes">xmlSchemaCleanupTypes</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaCompareValues">xmlSchemaCompareValues</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaContentType">xmlSchemaContentType</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaDump">xmlSchemaDump</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaElement">xmlSchemaElement</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaElementPtr">xmlSchemaElementPtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaFacet">xmlSchemaFacet</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaFree">xmlSchemaFree</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeFacet">xmlSchemaFreeFacet</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaFreeParserCtxt">xmlSchemaFreeParserCtxt</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaFreeType">xmlSchemaFreeType</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaFreeValidCtxt">xmlSchemaFreeValidCtxt</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeValue">xmlSchemaFreeValue</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaInitTypes">xmlSchemaInitTypes</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewFacet">xmlSchemaNewFacet</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-xmlschemas.html#xmlSchemaNewValidCtxt">xmlSchemaNewValidCtxt</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaNotation">xmlSchemaNotation</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaNotationPtr">xmlSchemaNotationPtr</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParserCtxt">xmlSchemaParserCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</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-schemasInternals.html#xmlSchemaType">xmlSchemaType</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaTypeType">xmlSchemaTypeType</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaVal">xmlSchemaVal</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a><br />
+<a href="html/libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidCtxt">xmlSchemaValidCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidError">xmlSchemaValidError</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</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-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 />
+<a href="html/libxml-tree.html#xmlSetCompressMode">xmlSetCompressMode</a><br />
+<a href="html/libxml-tree.html#xmlSetDocCompressMode">xmlSetDocCompressMode</a><br />
+<a href="html/libxml-parserInternals.html#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a><br />
+<a href="html/libxml-parser.html#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</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-tree.html#xmlSetListDoc">xmlSetListDoc</a><br />
+<a href="html/libxml-tree.html#xmlSetNs">xmlSetNs</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-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+<a href="html/libxml-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
+<a href="html/libxml-parser.html#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a><br />
+<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
+<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 />
+<a href="html/libxml-debugXML.html#xmlShellCtxt">xmlShellCtxt</a><br />
+<a href="html/libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
+<a href="html/libxml-debugXML.html#xmlShellDu">xmlShellDu</a><br />
+<a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
+<a href="html/libxml-debugXML.html#xmlShellLoad">xmlShellLoad</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintNode">xmlShellPrintNode</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathError">xmlShellPrintXPathError</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPrintXPathResult">xmlShellPrintXPathResult</a><br />
+<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
+<a href="html/libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a><br />
+<a href="html/libxml-debugXML.html#xmlShellSave">xmlShellSave</a><br />
+<a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
+<a href="html/libxml-debugXML.html#xmlShellWrite">xmlShellWrite</a><br />
+<a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
+<a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+<a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
+<a href="html/libxml-valid.html#xmlSprintfElementContent">xmlSprintfElementContent</a><br />
+<a href="html/libxml-parser.html#xmlStopParser">xmlStopParser</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcasecmp">xmlStrcasecmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcasestr">xmlStrcasestr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcmp">xmlStrcmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringComment">xmlStringComment</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringText">xmlStringText</a><br />
+<a href="html/libxml-parserInternals.html#xmlStringTextNoenc">xmlStringTextNoenc</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrlen">xmlStrlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncasecmp">xmlStrncasecmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncat">xmlStrncat</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrncmp">xmlStrncmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrndup">xmlStrndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrstr">xmlStrstr</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrsub">xmlStrsub</a><br />
+<a href="html/libxml-globals.html#xmlStructuredError">xmlStructuredError</a><br />
+<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
+<a href="html/libxml-globals.html#xmlSubstituteEntitiesDefaultValue">xmlSubstituteEntitiesDefaultValue</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchEncoding">xmlSwitchEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
+<a href="html/libxml-parserInternals.html#xmlSwitchToEncoding">xmlSwitchToEncoding</a><br />
+<a href="html/libxml-tree.html#xmlTextConcat">xmlTextConcat</a><br />
+<a href="html/libxml-tree.html#xmlTextMerge">xmlTextMerge</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReader">xmlTextReader</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderAttributeCount">xmlTextReaderAttributeCount</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderBaseUri">xmlTextReaderBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstBaseUri">xmlTextReaderConstBaseUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstLocalName">xmlTextReaderConstLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstNamespaceUri">xmlTextReaderConstNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstPrefix">xmlTextReaderConstPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderDepth">xmlTextReaderDepth</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderExpand">xmlTextReaderExpand</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttribute">xmlTextReaderGetAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetAttributeNs">xmlTextReaderGetAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetErrorHandler">xmlTextReaderGetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetParserProp">xmlTextReaderGetParserProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderHasAttributes">xmlTextReaderHasAttributes</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderHasValue">xmlTextReaderHasValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsDefault">xmlTextReaderIsDefault</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsEmptyElement">xmlTextReaderIsEmptyElement</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocalName">xmlTextReaderLocalName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorBaseURI">xmlTextReaderLocatorBaseURI</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorLineNumber">xmlTextReaderLocatorLineNumber</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttribute">xmlTextReaderMoveToAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNo">xmlTextReaderMoveToAttributeNo</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToAttributeNs">xmlTextReaderMoveToAttributeNs</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToElement">xmlTextReaderMoveToElement</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToFirstAttribute">xmlTextReaderMoveToFirstAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderMoveToNextAttribute">xmlTextReaderMoveToNextAttribute</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderName">xmlTextReaderName</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNamespaceUri">xmlTextReaderNamespaceUri</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPrefix">xmlTextReaderPrefix</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderQuoteChar">xmlTextReaderQuoteChar</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadState">xmlTextReaderReadState</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderReadString">xmlTextReaderReadString</a><br />
+<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#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderValue">xmlTextReaderValue</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriter">xmlTextWriter</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndAttribute">xmlTextWriterEndAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndCDATA">xmlTextWriterEndCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndComment">xmlTextWriterEndComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTD">xmlTextWriterEndDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDAttlist">xmlTextWriterEndDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDElement">xmlTextWriterEndDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDTDEntity">xmlTextWriterEndDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndElement">xmlTextWriterEndElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterEndPI">xmlTextWriterEndPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterFlush">xmlTextWriterFlush</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartComment">xmlTextWriterStartComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTD">xmlTextWriterStartDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDAttlist">xmlTextWriterStartDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDElement">xmlTextWriterStartDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElement">xmlTextWriterStartElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartElementNS">xmlTextWriterStartElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterStartPI">xmlTextWriterStartPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteAttribute">xmlTextWriterWriteAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteAttributeNS">xmlTextWriterWriteAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteCDATA">xmlTextWriterWriteCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteComment">xmlTextWriterWriteComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTD">xmlTextWriterWriteDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDAttlist">xmlTextWriterWriteDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDElement">xmlTextWriterWriteDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDEntity">xmlTextWriterWriteDTDEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDExternalEntityContents">xmlTextWriterWriteDTDExternalEntityContents</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDInternalEntity">xmlTextWriterWriteDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDTDNotation">xmlTextWriterWriteDTDNotation</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteDocType">xmlTextWriterWriteDocType</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteElement">xmlTextWriterWriteElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteElementNS">xmlTextWriterWriteElementNS</a><br />
+<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 />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDAttlist">xmlTextWriterWriteFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDElement">xmlTextWriterWriteFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElementNS">xmlTextWriterWriteFormatElementNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatPI">xmlTextWriterWriteFormatPI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatRaw">xmlTextWriterWriteFormatRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatString">xmlTextWriterWriteFormatString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWritePI">xmlTextWriterWritePI</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteProcessingInstruction">xmlTextWriterWriteProcessingInstruction</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRaw">xmlTextWriterWriteRaw</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteString">xmlTextWriterWriteString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttribute">xmlTextWriterWriteVFormatAttribute</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatCDATA">xmlTextWriterWriteVFormatCDATA</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatComment">xmlTextWriterWriteVFormatComment</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDElement">xmlTextWriterWriteVFormatDTDElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElement">xmlTextWriterWriteVFormatElement</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatElementNS">xmlTextWriterWriteVFormatElementNS</a><br />
+<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 />
+<a href="html/libxml-globals.html#xmlThrDefBufferAllocScheme">xmlThrDefBufferAllocScheme</a><br />
+<a href="html/libxml-globals.html#xmlThrDefDefaultBufferSize">xmlThrDefDefaultBufferSize</a><br />
+<a href="html/libxml-globals.html#xmlThrDefDeregisterNodeDefault">xmlThrDefDeregisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlThrDefDoValidityCheckingDefaultValue">xmlThrDefDoValidityCheckingDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefGetWarningsDefaultValue">xmlThrDefGetWarningsDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefIndentTreeOutput">xmlThrDefIndentTreeOutput</a><br />
+<a href="html/libxml-globals.html#xmlThrDefKeepBlanksDefaultValue">xmlThrDefKeepBlanksDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefLineNumbersDefaultValue">xmlThrDefLineNumbersDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefLoadExtDtdDefaultValue">xmlThrDefLoadExtDtdDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefParserDebugEntities">xmlThrDefParserDebugEntities</a><br />
+<a href="html/libxml-globals.html#xmlThrDefPedanticParserDefaultValue">xmlThrDefPedanticParserDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefRegisterNodeDefault">xmlThrDefRegisterNodeDefault</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSaveNoEmptyTags">xmlThrDefSaveNoEmptyTags</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSetGenericErrorFunc">xmlThrDefSetGenericErrorFunc</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSetStructuredErrorFunc">xmlThrDefSetStructuredErrorFunc</a><br />
+<a href="html/libxml-globals.html#xmlThrDefSubstituteEntitiesDefaultValue">xmlThrDefSubstituteEntitiesDefaultValue</a><br />
+<a href="html/libxml-globals.html#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a><br />
+<a href="html/libxml-globals.html#xmlTreeIndentString">xmlTreeIndentString</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsAegeanNumbers">xmlUCSIsAegeanNumbers</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsAlphabeticPresentationForms">xmlUCSIsAlphabeticPresentationForms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArabic">xmlUCSIsArabic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArabicPresentationFormsA">xmlUCSIsArabicPresentationFormsA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArabicPresentationFormsB">xmlUCSIsArabicPresentationFormsB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArmenian">xmlUCSIsArmenian</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsArrows">xmlUCSIsArrows</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBasicLatin">xmlUCSIsBasicLatin</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBengali">xmlUCSIsBengali</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBlock">xmlUCSIsBlock</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBlockElements">xmlUCSIsBlockElements</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBopomofo">xmlUCSIsBopomofo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBopomofoExtended">xmlUCSIsBopomofoExtended</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBoxDrawing">xmlUCSIsBoxDrawing</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBraillePatterns">xmlUCSIsBraillePatterns</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsBuhid">xmlUCSIsBuhid</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsByzantineMusicalSymbols">xmlUCSIsByzantineMusicalSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibility">xmlUCSIsCJKCompatibility</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibilityForms">xmlUCSIsCJKCompatibilityForms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibilityIdeographs">xmlUCSIsCJKCompatibilityIdeographs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKCompatibilityIdeographsSupplement">xmlUCSIsCJKCompatibilityIdeographsSupplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKRadicalsSupplement">xmlUCSIsCJKRadicalsSupplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKSymbolsandPunctuation">xmlUCSIsCJKSymbolsandPunctuation</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKUnifiedIdeographs">xmlUCSIsCJKUnifiedIdeographs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKUnifiedIdeographsExtensionA">xmlUCSIsCJKUnifiedIdeographsExtensionA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCJKUnifiedIdeographsExtensionB">xmlUCSIsCJKUnifiedIdeographsExtensionB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCat">xmlUCSIsCat</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatC">xmlUCSIsCatC</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatCc">xmlUCSIsCatCc</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatCf">xmlUCSIsCatCf</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatCo">xmlUCSIsCatCo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatCs">xmlUCSIsCatCs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatL">xmlUCSIsCatL</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLl">xmlUCSIsCatLl</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLm">xmlUCSIsCatLm</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLo">xmlUCSIsCatLo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLt">xmlUCSIsCatLt</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatLu">xmlUCSIsCatLu</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatM">xmlUCSIsCatM</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatMc">xmlUCSIsCatMc</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatMe">xmlUCSIsCatMe</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatMn">xmlUCSIsCatMn</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatN">xmlUCSIsCatN</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatNd">xmlUCSIsCatNd</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatNl">xmlUCSIsCatNl</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatNo">xmlUCSIsCatNo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatP">xmlUCSIsCatP</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPc">xmlUCSIsCatPc</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPd">xmlUCSIsCatPd</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPe">xmlUCSIsCatPe</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPf">xmlUCSIsCatPf</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPi">xmlUCSIsCatPi</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPo">xmlUCSIsCatPo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatPs">xmlUCSIsCatPs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatS">xmlUCSIsCatS</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatSc">xmlUCSIsCatSc</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatSk">xmlUCSIsCatSk</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatSm">xmlUCSIsCatSm</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatSo">xmlUCSIsCatSo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatZ">xmlUCSIsCatZ</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatZl">xmlUCSIsCatZl</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatZp">xmlUCSIsCatZp</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCatZs">xmlUCSIsCatZs</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCherokee">xmlUCSIsCherokee</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningDiacriticalMarks">xmlUCSIsCombiningDiacriticalMarks</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningDiacriticalMarksforSymbols">xmlUCSIsCombiningDiacriticalMarksforSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningHalfMarks">xmlUCSIsCombiningHalfMarks</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCombiningMarksforSymbols">xmlUCSIsCombiningMarksforSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsControlPictures">xmlUCSIsControlPictures</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCurrencySymbols">xmlUCSIsCurrencySymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCypriotSyllabary">xmlUCSIsCypriotSyllabary</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCyrillic">xmlUCSIsCyrillic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsCyrillicSupplement">xmlUCSIsCyrillicSupplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsDeseret">xmlUCSIsDeseret</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsDevanagari">xmlUCSIsDevanagari</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsDingbats">xmlUCSIsDingbats</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsEnclosedAlphanumerics">xmlUCSIsEnclosedAlphanumerics</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsEnclosedCJKLettersandMonths">xmlUCSIsEnclosedCJKLettersandMonths</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsEthiopic">xmlUCSIsEthiopic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGeneralPunctuation">xmlUCSIsGeneralPunctuation</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGeometricShapes">xmlUCSIsGeometricShapes</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGeorgian">xmlUCSIsGeorgian</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGothic">xmlUCSIsGothic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGreek">xmlUCSIsGreek</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGreekExtended">xmlUCSIsGreekExtended</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGreekandCoptic">xmlUCSIsGreekandCoptic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGujarati">xmlUCSIsGujarati</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsGurmukhi">xmlUCSIsGurmukhi</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHalfwidthandFullwidthForms">xmlUCSIsHalfwidthandFullwidthForms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHangulCompatibilityJamo">xmlUCSIsHangulCompatibilityJamo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHangulJamo">xmlUCSIsHangulJamo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHangulSyllables">xmlUCSIsHangulSyllables</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHanunoo">xmlUCSIsHanunoo</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHebrew">xmlUCSIsHebrew</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHighPrivateUseSurrogates">xmlUCSIsHighPrivateUseSurrogates</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHighSurrogates">xmlUCSIsHighSurrogates</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsHiragana">xmlUCSIsHiragana</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsIPAExtensions">xmlUCSIsIPAExtensions</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsIdeographicDescriptionCharacters">xmlUCSIsIdeographicDescriptionCharacters</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKanbun">xmlUCSIsKanbun</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKangxiRadicals">xmlUCSIsKangxiRadicals</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKannada">xmlUCSIsKannada</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKatakana">xmlUCSIsKatakana</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKatakanaPhoneticExtensions">xmlUCSIsKatakanaPhoneticExtensions</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKhmer">xmlUCSIsKhmer</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsKhmerSymbols">xmlUCSIsKhmerSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLao">xmlUCSIsLao</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLatin1Supplement">xmlUCSIsLatin1Supplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLatinExtendedA">xmlUCSIsLatinExtendedA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLatinExtendedAdditional">xmlUCSIsLatinExtendedAdditional</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLatinExtendedB">xmlUCSIsLatinExtendedB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLetterlikeSymbols">xmlUCSIsLetterlikeSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLimbu">xmlUCSIsLimbu</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLinearBIdeograms">xmlUCSIsLinearBIdeograms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLinearBSyllabary">xmlUCSIsLinearBSyllabary</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsLowSurrogates">xmlUCSIsLowSurrogates</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMalayalam">xmlUCSIsMalayalam</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMathematicalAlphanumericSymbols">xmlUCSIsMathematicalAlphanumericSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMathematicalOperators">xmlUCSIsMathematicalOperators</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousMathematicalSymbolsA">xmlUCSIsMiscellaneousMathematicalSymbolsA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousMathematicalSymbolsB">xmlUCSIsMiscellaneousMathematicalSymbolsB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousSymbols">xmlUCSIsMiscellaneousSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousSymbolsandArrows">xmlUCSIsMiscellaneousSymbolsandArrows</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMiscellaneousTechnical">xmlUCSIsMiscellaneousTechnical</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMongolian">xmlUCSIsMongolian</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMusicalSymbols">xmlUCSIsMusicalSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsMyanmar">xmlUCSIsMyanmar</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsNumberForms">xmlUCSIsNumberForms</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOgham">xmlUCSIsOgham</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOldItalic">xmlUCSIsOldItalic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOpticalCharacterRecognition">xmlUCSIsOpticalCharacterRecognition</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOriya">xmlUCSIsOriya</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsOsmanya">xmlUCSIsOsmanya</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsPhoneticExtensions">xmlUCSIsPhoneticExtensions</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsPrivateUse">xmlUCSIsPrivateUse</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsPrivateUseArea">xmlUCSIsPrivateUseArea</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsRunic">xmlUCSIsRunic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsShavian">xmlUCSIsShavian</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSinhala">xmlUCSIsSinhala</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSmallFormVariants">xmlUCSIsSmallFormVariants</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSpacingModifierLetters">xmlUCSIsSpacingModifierLetters</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSpecials">xmlUCSIsSpecials</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSuperscriptsandSubscripts">xmlUCSIsSuperscriptsandSubscripts</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementalArrowsA">xmlUCSIsSupplementalArrowsA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementalArrowsB">xmlUCSIsSupplementalArrowsB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementalMathematicalOperators">xmlUCSIsSupplementalMathematicalOperators</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementaryPrivateUseAreaA">xmlUCSIsSupplementaryPrivateUseAreaA</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSupplementaryPrivateUseAreaB">xmlUCSIsSupplementaryPrivateUseAreaB</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsSyriac">xmlUCSIsSyriac</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTagalog">xmlUCSIsTagalog</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTagbanwa">xmlUCSIsTagbanwa</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTags">xmlUCSIsTags</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTaiLe">xmlUCSIsTaiLe</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTaiXuanJingSymbols">xmlUCSIsTaiXuanJingSymbols</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTamil">xmlUCSIsTamil</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTelugu">xmlUCSIsTelugu</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsThaana">xmlUCSIsThaana</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsThai">xmlUCSIsThai</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsTibetan">xmlUCSIsTibetan</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsUgaritic">xmlUCSIsUgaritic</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsUnifiedCanadianAboriginalSyllabics">xmlUCSIsUnifiedCanadianAboriginalSyllabics</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsVariationSelectors">xmlUCSIsVariationSelectors</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsVariationSelectorsSupplement">xmlUCSIsVariationSelectorsSupplement</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsYiRadicals">xmlUCSIsYiRadicals</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsYiSyllables">xmlUCSIsYiSyllables</a><br />
+<a href="html/libxml-xmlunicode.html#xmlUCSIsYijingHexagramSymbols">xmlUCSIsYijingHexagramSymbols</a><br />
+<a href="html/libxml-uri.html#xmlURI">xmlURI</a><br />
+<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
+<a href="html/libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a><br />
+<a href="html/libxml-uri.html#xmlURIPtr">xmlURIPtr</a><br />
+<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Charcmp">xmlUTF8Charcmp</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Size">xmlUTF8Size</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strloc">xmlUTF8Strloc</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strndup">xmlUTF8Strndup</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
+<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
+<a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
+<a href="html/libxml-threads.html#xmlUnlockLibrary">xmlUnlockLibrary</a><br />
+<a href="html/libxml-tree.html#xmlUnsetNsProp">xmlUnsetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlUnsetProp">xmlUnsetProp</a><br />
+<a href="html/libxml-valid.html#xmlValidBuildContentModel">xmlValidBuildContentModel</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxt">xmlValidCtxt</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a><br />
+<a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
+<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+<a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
+<a href="html/libxml-valid.html#xmlValidState">xmlValidState</a><br />
+<a href="html/libxml-valid.html#xmlValidStatePtr">xmlValidStatePtr</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</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#xmlValidateElement">xmlValidateElement</a><br />
+<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
+<a href="html/libxml-tree.html#xmlValidateNCName">xmlValidateNCName</a><br />
+<a href="html/libxml-tree.html#xmlValidateNMToken">xmlValidateNMToken</a><br />
+<a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
+<a href="html/libxml-valid.html#xmlValidateNameValue">xmlValidateNameValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNamesValue">xmlValidateNamesValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokenValue">xmlValidateNmtokenValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNmtokensValue">xmlValidateNmtokensValue</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
+<a href="html/libxml-valid.html#xmlValidateNotationUse">xmlValidateNotationUse</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#xmlValidatePopElement">xmlValidatePopElement</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushCData">xmlValidatePushCData</a><br />
+<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
+<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
+<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
+<a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
+<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeCtxt">xmlXIncludeCtxt</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeFreeContext">xmlXIncludeFreeContext</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeNewContext">xmlXIncludeNewContext</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a><br />
+<a href="html/libxml-xinclude.html#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a><br />
+<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 />
+<a href="html/libxml-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxis">xmlXPathAxis</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisPtr">xmlXPathAxisPtr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastBooleanToNumber">xmlXPathCastBooleanToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastBooleanToString">xmlXPathCastBooleanToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToBoolean">xmlXPathCastNodeSetToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToNumber">xmlXPathCastNodeSetToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeSetToString">xmlXPathCastNodeSetToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToNumber">xmlXPathCastNodeToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNodeToString">xmlXPathCastNodeToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNumberToBoolean">xmlXPathCastNumberToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastNumberToString">xmlXPathCastNumberToString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastStringToBoolean">xmlXPathCastStringToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastStringToNumber">xmlXPathCastStringToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToBoolean">xmlXPathCastToBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToNumber">xmlXPathCastToNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCastToString">xmlXPathCastToString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCheckError">xmlXPathCheckError</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCmpNodes">xmlXPathCmpNodes</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompExpr">xmlXPathCompExpr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompile">xmlXPathCompile</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCompiledEval">xmlXPathCompiledEval</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathConcatFunction">xmlXPathConcatFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathContainsFunction">xmlXPathContainsFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathContext">xmlXPathContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertBoolean">xmlXPathConvertBoolean</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertFunc">xmlXPathConvertFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertNumber">xmlXPathConvertNumber</a><br />
+<a href="html/libxml-xpath.html#xmlXPathConvertString">xmlXPathConvertString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCountFunction">xmlXPathCountFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathCtxtCompile">xmlXPathCtxtCompile</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDifference">xmlXPathDifference</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEmptyNodeSet">xmlXPathEmptyNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEqualValues">xmlXPathEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathErr">xmlXPathErr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathError">xmlXPathError</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvalExpr">xmlXPathEvalExpr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalFunc">xmlXPathEvalFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFalseFunction">xmlXPathFalseFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeCompExpr">xmlXPathFreeCompExpr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeContext">xmlXPathFreeContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSet">xmlXPathFreeNodeSet</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFreeObject">xmlXPathFreeObject</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFreeParserContext">xmlXPathFreeParserContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFuncPtr">xmlXPathFuncPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFunct">xmlXPathFunct</a><br />
+<a href="html/libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetContextNode">xmlXPathGetContextNode</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetDocument">xmlXPathGetDocument</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathGetError">xmlXPathGetError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathInit">xmlXPathInit</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathIsNodeType">xmlXPathIsNodeType</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathLastFunction">xmlXPathLastFunction</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#xmlXPathLocalNameFunction">xmlXPathLocalNameFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathModValues">xmlXPathModValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathMultValues">xmlXPathMultValues</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNAN">xmlXPathNAN</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNINF">xmlXPathNINF</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNamespaceURIFunction">xmlXPathNamespaceURIFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewBoolean">xmlXPathNewBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewCString">xmlXPathNewCString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewFloat">xmlXPathNewFloat</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewString">xmlXPathNewString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<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#xmlXPathNextAttribute">xmlXPathNextAttribute</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextChild">xmlXPathNextChild</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendant">xmlXPathNextDescendant</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextParent">xmlXPathNextParent</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeading">xmlXPathNodeLeading</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetContains">xmlXPathNodeSetContains</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetIsEmpty">xmlXPathNodeSetIsEmpty</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetSort">xmlXPathNodeSetSort</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#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNotFunction">xmlXPathNotFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNsLookup">xmlXPathNsLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNumberFunction">xmlXPathNumberFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObject">xmlXPathObject</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectCopy">xmlXPathObjectCopy</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathObjectType">xmlXPathObjectType</a><br />
+<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+<a href="html/libxml-xpath.html#xmlXPathPINF">xmlXPathPINF</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseNCName">xmlXPathParseNCName</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathParseName">xmlXPathParseName</a><br />
+<a href="html/libxml-xpath.html#xmlXPathParserContext">xmlXPathParserContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopBoolean">xmlXPathPopBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopExternal">xmlXPathPopExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopNumber">xmlXPathPopNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPopString">xmlXPathPopString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathPositionFunction">xmlXPathPositionFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterAllFunctions">xmlXPathRegisterAllFunctions</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncLookup">xmlXPathRegisterFuncLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterNs">xmlXPathRegisterNs</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariable">xmlXPathRegisterVariable</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableLookup">xmlXPathRegisterVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableNS">xmlXPathRegisterVariableNS</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredFuncsCleanup">xmlXPathRegisteredFuncsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredNsCleanup">xmlXPathRegisteredNsCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredVariablesCleanup">xmlXPathRegisteredVariablesCleanup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnBoolean">xmlXPathReturnBoolean</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnEmptyNodeSet">xmlXPathReturnEmptyNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnEmptyString">xmlXPathReturnEmptyString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnExternal">xmlXPathReturnExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnFalse">xmlXPathReturnFalse</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnNodeSet">xmlXPathReturnNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnNumber">xmlXPathReturnNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnString">xmlXPathReturnString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathReturnTrue">xmlXPathReturnTrue</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoot">xmlXPathRoot</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSetArityError">xmlXPathSetArityError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSetError">xmlXPathSetError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSetTypeError">xmlXPathSetTypeError</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStackIsExternal">xmlXPathStackIsExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStackIsNodeSet">xmlXPathStackIsNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStartsWithFunction">xmlXPathStartsWithFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathSumFunction">xmlXPathSumFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathTrueFunction">xmlXPathTrueFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathType">xmlXPathType</a><br />
+<a href="html/libxml-xpath.html#xmlXPathTypePtr">xmlXPathTypePtr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
+<a href="html/libxml-xpath.html#xmlXPathVariable">xmlXPathVariable</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookup">xmlXPathVariableLookup</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupNS">xmlXPathVariableLookupNS</a><br />
+<a href="html/libxml-xpath.html#xmlXPathVariablePtr">xmlXPathVariablePtr</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapCString">xmlXPathWrapCString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapExternal">xmlXPathWrapExternal</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathWrapString">xmlXPathWrapString</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPatherror">xmlXPatherror</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetCreate">xmlXPtrLocationSetCreate</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodeSet">xmlXPtrNewLocationSetNodeSet</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRange">xmlXPtrNewRange</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangeNodes">xmlXPtrNewRangeNodes</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrRangeToFunction">xmlXPtrRangeToFunction</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrWrapLocationSet">xmlXPtrWrapLocationSet</a><br />
+</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/DOM.gif b/doc/DOM.gif
new file mode 100644
index 0000000..a44882f
--- /dev/null
+++ b/doc/DOM.gif
Binary files differ
diff --git a/doc/DOM.html b/doc/DOM.html
new file mode 100644
index 0000000..4076b64
--- /dev/null
+++ b/doc/DOM.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>DOM Principles</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>DOM Principles</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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><a href="http://www.w3.org/DOM/">DOM</a> stands for the <em>Document
+Object Model</em>; this is an API for accessing XML or HTML structured
+documents. Native support for DOM in Gnome is on the way (module gnome-dom),
+and will be based on gnome-xml. This will be a far cleaner interface to
+manipulate XML files within Gnome since it won't expose the internal
+structure.</p><p>The current DOM implementation on top of libxml2 is the <a href="http://cvs.gnome.org/lxr/source/gdome2/">gdome2 Gnome module</a>, this
+is a full DOM interface, thanks to Paolo Casarini, check the <a href="http://www.cs.unibo.it/~casarini/gdome2/">Gdome2 homepage</a> for more
+informations.</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/FAQ.html b/doc/FAQ.html
new file mode 100644
index 0000000..472863f
--- /dev/null
+++ b/doc/FAQ.html
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>FAQ</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>FAQ</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Contents:</p><ul><li><a href="FAQ.html#License">License(s)</a></li>
+ <li><a href="FAQ.html#Installati">Installation</a></li>
+ <li><a href="FAQ.html#Compilatio">Compilation</a></li>
+ <li><a href="FAQ.html#Developer">Developer corner</a></li>
+</ul><h3><a name="License" id="License">License</a>(s)</h3><ol><li><em>Licensing Terms for libxml</em>
+ <p>libxml2 is released under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
+ License</a>; see the file Copyright in the distribution for the precise
+ wording</p>
+ </li>
+ <li><em>Can I embed libxml2 in a proprietary application ?</em>
+ <p>Yes. The MIT License allows you to keep proprietary the changes you
+ made to libxml, but it would be graceful to send-back bug fixes and
+ improvements as patches for possible incorporation in the main
+ development tree.</p>
+ </li>
+</ol><h3><a name="Installati" id="Installati">Installation</a></h3><ol><li><strong><span style="background-color: #FF0000">Do Not Use
+ libxml1</span></strong>, use libxml2</li>
+ <li><em>Where can I get libxml</em> ?
+ <p>The original distribution comes from <a href="ftp://rpmfind.net/pub/libxml/">rpmfind.net</a> or <a href="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/">gnome.org</a></p>
+ <p>Most Linux and BSD distributions include libxml, this is probably the
+ safer way for end-users to use libxml.</p>
+ <p>David Doolin provides precompiled Windows versions at <a href="http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/ ">http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/</a></p>
+ </li>
+ <li><em>I see libxml and libxml2 releases, which one should I install ?</em>
+ <ul><li>If you are not constrained by backward compatibility issues with
+ existing applications, install libxml2 only</li>
+ <li>If you are not doing development, you can safely install both.
+ Usually the packages <a href="http://rpmfind.net/linux/RPM/libxml.html">libxml</a> and <a href="http://rpmfind.net/linux/RPM/libxml2.html">libxml2</a> are
+ compatible (this is not the case for development packages).</li>
+ <li>If you are a developer and your system provides separate packaging
+ for shared libraries and the development components, it is possible
+ to install libxml and libxml2, and also <a href="http://rpmfind.net/linux/RPM/libxml-devel.html">libxml-devel</a>
+ and <a href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml2-devel</a>
+ too for libxml2 &gt;= 2.3.0</li>
+ <li>If you are developing a new application, please develop against
+ libxml2(-devel)</li>
+ </ul></li>
+ <li><em>I can't install the libxml package, it conflicts with libxml0</em>
+ <p>You probably have an old libxml0 package used to provide the shared
+ library for libxml.so.0, you can probably safely remove it. The libxml
+ packages provided on <a href="ftp://rpmfind.net/pub/libxml/">rpmfind.net</a> provide
+ libxml.so.0</p>
+ </li>
+ <li><em>I can't install the libxml(2) RPM package due to failed
+ dependencies</em>
+ <p>The most generic solution is to re-fetch the latest src.rpm , and
+ rebuild it locally with</p>
+ <p><code>rpm --rebuild libxml(2)-xxx.src.rpm</code>.</p>
+ <p>If everything goes well it will generate two binary rpm packages (one
+ providing the shared libs and xmllint, and the other one, the -devel
+ package, providing includes, static libraries and scripts needed to build
+ applications with libxml(2)) that you can install locally.</p>
+ </li>
+</ol><h3><a name="Compilatio" id="Compilatio">Compilation</a></h3><ol><li><em>What is the process to compile libxml2 ?</em>
+ <p>As most UNIX libraries libxml2 follows the "standard":</p>
+ <p><code>gunzip -c xxx.tar.gz | tar xvf -</code></p>
+ <p><code>cd libxml-xxxx</code></p>
+ <p><code>./configure --help</code></p>
+ <p>to see the options, then the compilation/installation proper</p>
+ <p><code>./configure [possible options]</code></p>
+ <p><code>make</code></p>
+ <p><code>make install</code></p>
+ <p>At that point you may have to rerun ldconfig or a similar utility to
+ update your list of installed shared libs.</p>
+ </li>
+ <li><em>What other libraries are needed to compile/install libxml2 ?</em>
+ <p>Libxml2 does not require any other library, the normal C ANSI API
+ should be sufficient (please report any violation to this rule you may
+ find).</p>
+ <p>However if found at configuration time libxml2 will detect and use the
+ following libs:</p>
+ <ul><li><a href="http://www.info-zip.org/pub/infozip/zlib/">libz</a> : a
+ highly portable and available widely compression library.</li>
+ <li>iconv: a powerful character encoding conversion library. It is
+ included by default in recent glibc libraries, so it doesn't need to
+ be installed specifically on Linux. It now seems a <a href="http://www.opennc.org/onlinepubs/7908799/xsh/iconv.html">part
+ of the official UNIX</a> specification. Here is one <a href="http://www.gnu.org/software/libiconv/">implementation of the
+ library</a> which source can be found <a href="ftp://ftp.ilog.fr/pub/Users/haible/gnu/">here</a>.</li>
+ </ul></li>
+ <li><em>Make check fails on some platforms</em>
+ <p>Sometimes the regression tests' results don't completely match the
+ value produced by the parser, and the makefile uses diff to print the
+ delta. On some platforms the diff return breaks the compilation process;
+ if the diff is small this is probably not a serious problem.</p>
+ <p>Sometimes (especially on Solaris) make checks fail due to limitations
+ in make. Try using GNU-make instead.</p>
+ </li>
+ <li><em>I use the CVS version and there is no configure script</em>
+ <p>The configure script (and other Makefiles) are generated. Use the
+ autogen.sh script to regenerate the configure script and Makefiles,
+ like:</p>
+ <p><code>./autogen.sh --prefix=/usr --disable-shared</code></p>
+ </li>
+ <li><em>I have troubles when running make tests with gcc-3.0</em>
+ <p>It seems the initial release of gcc-3.0 has a problem with the
+ optimizer which miscompiles the URI module. Please use another
+ compiler.</p>
+ </li>
+</ol><h3><a name="Developer" id="Developer">Developer</a> corner</h3><ol><li><em>Troubles compiling or linking programs using libxml2</em>
+ <p>Usually the problem comes from the fact that the compiler doesn't get
+ the right compilation or linking flags. There is a small shell script
+ <code>xml2-config</code> which is installed as part of libxml2 usual
+ install process which provides those flags. Use</p>
+ <p><code>xml2-config --cflags</code></p>
+ <p>to get the compilation flags and</p>
+ <p><code>xml2-config --libs</code></p>
+ <p>to get the linker flags. Usually this is done directly from the
+ Makefile as:</p>
+ <p><code>CFLAGS=`xml2-config --cflags`</code></p>
+ <p><code>LIBS=`xml2-config --libs`</code></p>
+ </li>
+ <li><em>xmlDocDump() generates output on one line.</em>
+ <p>Libxml2 will not <strong>invent</strong> spaces in the content of a
+ document since <strong>all spaces in the content of a document are
+ significant</strong>. If you build a tree from the API and want
+ indentation:</p>
+ <ol><li>the correct way is to generate those yourself too.</li>
+ <li>the dangerous way is to ask libxml2 to add those blanks to your
+ content <strong>modifying the content of your document in the
+ process</strong>. The result may not be what you expect. There is
+ <strong>NO</strong> way to guarantee that such a modification won't
+ affect other parts of the content of your document. See <a href="http://xmlsoft.org/html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault
+ ()</a> and <a href="http://xmlsoft.org/html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile
+ ()</a></li>
+ </ol></li>
+ <li>Extra nodes in the document:
+ <p><em>For a XML file as below:</em></p>
+ <pre>&lt;?xml version="1.0"?&gt;
+&lt;PLAN xmlns="http://www.argus.ca/autotest/1.0/"&gt;
+&lt;NODE CommFlag="0"/&gt;
+&lt;NODE CommFlag="1"/&gt;
+&lt;/PLAN&gt;</pre>
+ <p><em>after parsing it with the function
+ pxmlDoc=xmlParseFile(...);</em></p>
+ <p><em>I want to the get the content of the first node (node with the
+ CommFlag="0")</em></p>
+ <p><em>so I did it as following;</em></p>
+ <pre>xmlNodePtr pnode;
+pnode=pxmlDoc-&gt;children-&gt;children;</pre>
+ <p><em>but it does not work. If I change it to</em></p>
+ <pre>pnode=pxmlDoc-&gt;children-&gt;children-&gt;next;</pre>
+ <p><em>then it works. Can someone explain it to me.</em></p>
+ <p></p>
+ <p>In XML all characters in the content of the document are significant
+ <strong>including blanks and formatting line breaks</strong>.</p>
+ <p>The extra nodes you are wondering about are just that, text nodes with
+ the formatting spaces which are part of the document but that people tend
+ to forget. There is a function <a href="http://xmlsoft.org/html/libxml-parser.html">xmlKeepBlanksDefault
+ ()</a> to remove those at parse time, but that's an heuristic, and its
+ use should be limited to cases where you are certain there is no
+ mixed-content in the document.</p>
+ </li>
+ <li><em>I get compilation errors of existing code like when accessing
+ <strong>root</strong> or <strong>child fields</strong> of nodes.</em>
+ <p>You are compiling code developed for libxml version 1 and using a
+ libxml2 development environment. Either switch back to libxml v1 devel or
+ even better fix the code to compile with libxml2 (or both) by <a href="upgrade.html">following the instructions</a>.</p>
+ </li>
+ <li><em>I get compilation errors about non existing
+ <strong>xmlRootNode</strong> or <strong>xmlChildrenNode</strong>
+ fields.</em>
+ <p>The source code you are using has been <a href="upgrade.html">upgraded</a> to be able to compile with both libxml
+ and libxml2, but you need to install a more recent version:
+ libxml(-devel) &gt;= 1.8.8 or libxml2(-devel) &gt;= 2.1.0</p>
+ </li>
+ <li><em>XPath implementation looks seriously broken</em>
+ <p>XPath implementation prior to 2.3.0 was really incomplete. Upgrade to
+ a recent version, there are no known bugs in the current version.</p>
+ </li>
+ <li><em>The example provided in the web page does not compile.</em>
+ <p>It's hard to maintain the documentation in sync with the code
+ &lt;grin/&gt; ...</p>
+ <p>Check the previous points 1/ and 2/ raised before, and please send
+ patches.</p>
+ </li>
+ <li><em>Where can I get more examples and information than provided on the
+ web page?</em>
+ <p>Ideally a libxml2 book would be nice. I have no such plan ... But you
+ can:</p>
+ <ul><li>check more deeply the <a href="html/libxml-lib.html">existing
+ generated doc</a></li>
+ <li>have a look at <a href="examples/index.html">the set of
+ examples</a>.</li>
+ <li>look for examples of use for libxml2 function using the Gnome code.
+ For example the following will query the full Gnome CVS base for the
+ use of the <strong>xmlAddChild()</strong> function:
+ <p><a href="http://cvs.gnome.org/lxr/search?string=xmlAddChild">http://cvs.gnome.org/lxr/search?string=xmlAddChild</a></p>
+ <p>This may be slow, a large hardware donation to the gnome project
+ could cure this :-)</p>
+ </li>
+ <li><a href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&amp;dir=gnome-xml">Browse
+ the libxml2 source</a> , I try to write code as clean and documented
+ as possible, so looking at it may be helpful. In particular the code
+ of xmllint.c and of the various testXXX.c test programs should
+ provide good examples of how to do things with the library.</li>
+ </ul></li>
+ <li>What about C++ ?
+ <p>libxml2 is written in pure C in order to allow easy reuse on a number
+ of platforms, including embedded systems. I don't intend to convert to
+ C++.</p>
+ <p>There is however a C++ wrapper which may fulfill your needs:</p>
+ <ul><li>by Ari Johnson &lt;ari@btigate.com&gt;:
+ <p>Website: <a href="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</a></p>
+ <p>Download: <a href="http://sourceforge.net/project/showfiles.php?group_id=12999">http://sourceforge.net/project/showfiles.php?group_id=12999</a></p>
+ </li>
+ <!-- Website is currently unavailable as of 2003-08-02
+ <li>by Peter Jones &lt;pjones@pmade.org&gt;
+ <p>Website: <a
+ href="http://pmade.org/pjones/software/xmlwrapp/">http://pmade.org/pjones/software/xmlwrapp/</a></p>
+ </li>
+ --></ul></li>
+ <li>How to validate a document a posteriori ?
+ <p>It is possible to validate documents which had not been validated at
+ initial parsing time or documents which have been built from scratch
+ using the API. Use the <a href="http://xmlsoft.org/html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd()</a>
+ function. It is also possible to simply add a DTD to an existing
+ document:</p>
+ <pre>xmlDocPtr doc; /* your existing document */
+xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */
+
+ dtd-&gt;name = xmlStrDup((xmlChar*)"root_name"); /* use the given root */
+
+ doc-&gt;intSubset = dtd;
+ if (doc-&gt;children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd);
+ else xmlAddPrevSibling(doc-&gt;children, (xmlNodePtr)dtd);
+ </pre>
+ </li>
+ <li>So what is this funky "xmlChar" used all the time?
+ <p>It is a null terminated sequence of utf-8 characters. And only utf-8!
+ You need to convert strings encoded in different ways to utf-8 before
+ passing them to the API. This can be accomplished with the iconv library
+ for instance.</p>
+ </li>
+ <li>etc ...</li>
+</ol><p></p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/Libxml2-Logo-180x168.gif b/doc/Libxml2-Logo-180x168.gif
new file mode 100644
index 0000000..ebded4f
--- /dev/null
+++ b/doc/Libxml2-Logo-180x168.gif
Binary files differ
diff --git a/doc/Libxml2-Logo-90x34.gif b/doc/Libxml2-Logo-90x34.gif
new file mode 100644
index 0000000..b96fff0
--- /dev/null
+++ b/doc/Libxml2-Logo-90x34.gif
Binary files differ
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..e2d2fa6
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,108 @@
+## Process this file with automake to produce Makefile.in
+SUBDIRS=examples
+
+# The top-level SGML file.
+DOC_MAIN_XML_FILE=gnome-xml.xml
+
+# The directory containing the source code (if it contains documentation).
+DOC_SOURCE_DIR=..
+
+# A file in win32 depends upon one of the doc files
+WIN32_DIR=$(top_srcdir)/win32
+
+PAGES= architecture.html bugs.html contribs.html docs.html DOM.html \
+ downloads.html entities.html example.html help.html index.html \
+ interface.html intro.html library.html namespaces.html news.html \
+ tree.html xmldtd.html XMLinfo.html XSLT.html
+APIPAGES=APIconstructors.html APIfiles.html APIfunctions.html \
+ APIsymbols.html APIchunk0.html
+EXTRA_DIST=xmlcatalog_man.xml tutorial/*.html tutorial/*.c tutorial/*.pdf \
+ tutorial/images/*.png tutorial/images/callouts/*.png \
+ API*.html *.1 *.xsl *.html *.gif w3c.png html/*.html \
+ html/*.png libxml2-api.xml index.py search.php \
+ apibuild.py libxml2.xsa xmllint.xml xmlcatalog_man.xml \
+ README.docs
+
+
+man_MANS = xmllint.1 xmlcatalog.1
+
+all: web $(top_srcdir)/NEWS libxml2.xsa $(man_MANS)
+
+api: libxml2-api.xml libxml2-refs.xml $(APIPAGES) $(srcdir)/html/index.html $(WIN32_DIR)/libxml2.def.src
+
+web: $(PAGES)
+
+$(PAGES): xml.html site.xsl
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ echo "Rebuilding the HTML Web pages from xml.html" ; \
+ $(bindir)/xsltproc --nonet --html $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/xml.html > index.html ; fi );
+ -@(if [ -x $(bindir)/xmllint ] ; then \
+ echo "Validating the HTML Web pages" ; \
+ $(bindir)/xmllint --nonet --valid --noout $(PAGES) ; fi );
+
+$(top_srcdir)/NEWS: $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ $(bindir)/xsltproc --nonet $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html > $(top_srcdir)/NEWS ; fi );
+
+libxml2.xsa: $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ $(bindir)/xsltproc --nonet $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html > libxml2.xsa ; fi );
+
+$(APIPAGES): libxml2-api.xml libxml2-refs.xml $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/api.xsl
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ echo "Rebuilding the HTML API pages from libxml2-refs.xml" ; \
+ $(bindir)/xsltproc --nonet --html $(top_srcdir)/doc/api.xsl \
+ $(top_srcdir)/doc/xml.html ; fi );
+ -@(if [ -x $(bindir)/xmllint ] ; then \
+ echo "Validating the HTML API pages" ; \
+ $(bindir)/xmllint --nonet --valid --noout API*.html ; fi );
+
+$(srcdir)/html/index.html: libxml2-api.xml $(srcdir)/newapi.xsl
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ echo "Rebuilding the HTML pages from the XML API" ; \
+ $(bindir)/xsltproc \
+ --nonet $(srcdir)/newapi.xsl libxml2-api.xml ; fi )
+ -@(if [ -x $(bindir)/xmllint ] ; then \
+ echo "Validating the resulting XHTML pages" ; \
+ $(bindir)/xmllint --nonet --valid --noout html/*.html ; fi );
+
+$(WIN32_DIR)/libxml2.def.src: libxml2-api.xml
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ $(bindir)/xsltproc -o $(WIN32_DIR)/libxml2.def.src \
+ --nonet $(WIN32_DIR)/defgen.xsl libxml2-api.xml ; fi )
+
+libxml2-api.xml libxml2-refs.xml: apibuild.py ../include/libxml/*.h ../*.c
+ -(./apibuild.py)
+
+xmllint.1: xmllint.xml
+ -@(xsltproc --nonet xmllint.xml)
+
+xmlcatalog.1: xmlcatalog_man.xml
+ -@(xsltproc --nonet xmlcatalog_man.xml)
+
+clean-local:
+ rm -f *~ *.bak *.hierarchy *.signals *-unused.txt
+
+maintainer-clean-local: clean
+ rm -rf libxml-decl-list.txt libxml-decl.txt
+
+rebuild: api all
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/xml.html $(srcdir)/encoding.html $(srcdir)/FAQ.html $(srcdir)/structure.gif $(srcdir)/DOM.gif $(srcdir)/smallfootonly.gif $(srcdir)/redhat.gif $(srcdir)/libxml.gif $(srcdir)/w3c.png $(srcdir)/Libxml2-Logo-180x168.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/html
+ -@INSTALL@ -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html
+ -@INSTALL@ -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html
+ -@INSTALL@ -m 0644 $(srcdir)/html/index.sgml $(DESTDIR)$(HTML_DIR)/html
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial
+ -@INSTALL@ -m 0644 $(srcdir)/tutorial/*.* \
+ $(DESTDIR)$(HTML_DIR)/tutorial
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial/images
+ -@INSTALL@ -m 0644 $(srcdir)/tutorial/images/*.* \
+ $(DESTDIR)$(HTML_DIR)/tutorial/images
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
+ -@INSTALL@ -m 0644 $(srcdir)/tutorial/images/callouts/*.* \
+ $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
+
+.PHONY : html xml templates scan
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..5b90845
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,708 @@
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+man1dir = $(mandir)/man1
+am__installdirs = $(DESTDIR)$(man1dir)
+NROFF = nroff
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+C14N_OBJ = @C14N_OBJ@
+CATALOG_OBJ = @CATALOG_OBJ@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_OBJ = @DEBUG_OBJ@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOCB_OBJ = @DOCB_OBJ@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FTP_OBJ = @FTP_OBJ@
+HAVE_ISINF = @HAVE_ISINF@
+HAVE_ISNAN = @HAVE_ISNAN@
+HTML_DIR = @HTML_DIR@
+HTML_OBJ = @HTML_OBJ@
+HTTP_OBJ = @HTTP_OBJ@
+ICONV_LIBS = @ICONV_LIBS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
+LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
+LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
+LIBXML_VERSION = @LIBXML_VERSION@
+LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
+LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MV = @MV@
+M_LIBS = @M_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATTERN_TEST = @PATTERN_TEST@
+PYTHON = @PYTHON@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
+PYTHON_SUBDIR = @PYTHON_SUBDIR@
+PYTHON_TESTS = @PYTHON_TESTS@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RDL_LIBS = @RDL_LIBS@
+READER_TEST = @READER_TEST@
+RELDATE = @RELDATE@
+RM = @RM@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STATIC_BINARIES = @STATIC_BINARIES@
+STRIP = @STRIP@
+TAR = @TAR@
+TEST_C14N = @TEST_C14N@
+TEST_CATALOG = @TEST_CATALOG@
+TEST_DEBUG = @TEST_DEBUG@
+TEST_HTML = @TEST_HTML@
+TEST_PHTML = @TEST_PHTML@
+TEST_PUSH = @TEST_PUSH@
+TEST_REGEXPS = @TEST_REGEXPS@
+TEST_SAX = @TEST_SAX@
+TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_THREADS = @TEST_THREADS@
+TEST_VALID = @TEST_VALID@
+TEST_VTIME = @TEST_VTIME@
+TEST_XINCLUDE = @TEST_XINCLUDE@
+TEST_XPATH = @TEST_XPATH@
+TEST_XPTR = @TEST_XPTR@
+THREADS_W32 = @THREADS_W32@
+THREAD_CFLAGS = @THREAD_CFLAGS@
+THREAD_LIBS = @THREAD_LIBS@
+U = @U@
+VERSION = @VERSION@
+WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
+WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
+WITH_C14N = @WITH_C14N@
+WITH_CATALOG = @WITH_CATALOG@
+WITH_DEBUG = @WITH_DEBUG@
+WITH_DOCB = @WITH_DOCB@
+WITH_FTP = @WITH_FTP@
+WITH_HTML = @WITH_HTML@
+WITH_HTTP = @WITH_HTTP@
+WITH_ICONV = @WITH_ICONV@
+WITH_ISO8859X = @WITH_ISO8859X@
+WITH_LEGACY = @WITH_LEGACY@
+WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
+WITH_OUTPUT = @WITH_OUTPUT@
+WITH_PATTERN = @WITH_PATTERN@
+WITH_PUSH = @WITH_PUSH@
+WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
+WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
+WITH_READER = @WITH_READER@
+WITH_REGEXPS = @WITH_REGEXPS@
+WITH_SAX1 = @WITH_SAX1@
+WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_THREADS = @WITH_THREADS@
+WITH_TREE = @WITH_TREE@
+WITH_TRIO = @WITH_TRIO@
+WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
+WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
+WITH_VALID = @WITH_VALID@
+WITH_WRITER = @WITH_WRITER@
+WITH_XINCLUDE = @WITH_XINCLUDE@
+WITH_XPATH = @WITH_XPATH@
+WITH_XPTR = @WITH_XPTR@
+XINCLUDE_OBJ = @XINCLUDE_OBJ@
+XML_CFLAGS = @XML_CFLAGS@
+XML_INCLUDEDIR = @XML_INCLUDEDIR@
+XML_LIBDIR = @XML_LIBDIR@
+XML_LIBS = @XML_LIBS@
+XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
+XPATH_OBJ = @XPATH_OBJ@
+XPTR_OBJ = @XPTR_OBJ@
+Z_CFLAGS = @Z_CFLAGS@
+Z_LIBS = @Z_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = examples
+
+# The top-level SGML file.
+DOC_MAIN_XML_FILE = gnome-xml.xml
+
+# The directory containing the source code (if it contains documentation).
+DOC_SOURCE_DIR = ..
+
+# A file in win32 depends upon one of the doc files
+WIN32_DIR = $(top_srcdir)/win32
+PAGES = architecture.html bugs.html contribs.html docs.html DOM.html \
+ downloads.html entities.html example.html help.html index.html \
+ interface.html intro.html library.html namespaces.html news.html \
+ tree.html xmldtd.html XMLinfo.html XSLT.html
+
+APIPAGES = APIconstructors.html APIfiles.html APIfunctions.html \
+ APIsymbols.html APIchunk0.html
+
+EXTRA_DIST = xmlcatalog_man.xml tutorial/*.html tutorial/*.c tutorial/*.pdf \
+ tutorial/images/*.png tutorial/images/callouts/*.png \
+ API*.html *.1 *.xsl *.html *.gif w3c.png html/*.html \
+ html/*.png libxml2-api.xml index.py search.php \
+ apibuild.py libxml2.xsa xmllint.xml xmlcatalog_man.xml \
+ README.docs
+
+man_MANS = xmllint.1 xmlcatalog.1
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(man1dir)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
+ rm -f $(DESTDIR)$(man1dir)/$$inst; \
+ done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if (etags --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ else \
+ include_option=--include; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(mkdir_p) $(distdir)/html $(distdir)/tutorial $(distdir)/tutorial/images $(distdir)/tutorial/images/callouts
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || mkdir "$(distdir)/$$subdir" \
+ || exit 1; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="../$(top_distdir)" \
+ distdir="../$(distdir)/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(MANS)
+installdirs: installdirs-recursive
+installdirs-am:
+ $(mkdir_p) $(DESTDIR)$(man1dir)
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-data-local install-man
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-man
+
+uninstall-info: uninstall-info-recursive
+
+uninstall-man: uninstall-man1
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-local clean-recursive \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-recursive distclean-tags distdir \
+ dvi dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-man1 install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-local \
+ maintainer-clean-recursive mostlyclean mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am uninstall-info-am \
+ uninstall-man uninstall-man1
+
+
+all: web $(top_srcdir)/NEWS libxml2.xsa $(man_MANS)
+
+api: libxml2-api.xml libxml2-refs.xml $(APIPAGES) $(srcdir)/html/index.html $(WIN32_DIR)/libxml2.def.src
+
+web: $(PAGES)
+
+$(PAGES): xml.html site.xsl
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ echo "Rebuilding the HTML Web pages from xml.html" ; \
+ $(bindir)/xsltproc --nonet --html $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/xml.html > index.html ; fi );
+ -@(if [ -x $(bindir)/xmllint ] ; then \
+ echo "Validating the HTML Web pages" ; \
+ $(bindir)/xmllint --nonet --valid --noout $(PAGES) ; fi );
+
+$(top_srcdir)/NEWS: $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ $(bindir)/xsltproc --nonet $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html > $(top_srcdir)/NEWS ; fi );
+
+libxml2.xsa: $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ $(bindir)/xsltproc --nonet $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html > libxml2.xsa ; fi );
+
+$(APIPAGES): libxml2-api.xml libxml2-refs.xml $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/api.xsl
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ echo "Rebuilding the HTML API pages from libxml2-refs.xml" ; \
+ $(bindir)/xsltproc --nonet --html $(top_srcdir)/doc/api.xsl \
+ $(top_srcdir)/doc/xml.html ; fi );
+ -@(if [ -x $(bindir)/xmllint ] ; then \
+ echo "Validating the HTML API pages" ; \
+ $(bindir)/xmllint --nonet --valid --noout API*.html ; fi );
+
+$(srcdir)/html/index.html: libxml2-api.xml $(srcdir)/newapi.xsl
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ echo "Rebuilding the HTML pages from the XML API" ; \
+ $(bindir)/xsltproc \
+ --nonet $(srcdir)/newapi.xsl libxml2-api.xml ; fi )
+ -@(if [ -x $(bindir)/xmllint ] ; then \
+ echo "Validating the resulting XHTML pages" ; \
+ $(bindir)/xmllint --nonet --valid --noout html/*.html ; fi );
+
+$(WIN32_DIR)/libxml2.def.src: libxml2-api.xml
+ -@(if [ -x $(bindir)/xsltproc ] ; then \
+ $(bindir)/xsltproc -o $(WIN32_DIR)/libxml2.def.src \
+ --nonet $(WIN32_DIR)/defgen.xsl libxml2-api.xml ; fi )
+
+libxml2-api.xml libxml2-refs.xml: apibuild.py ../include/libxml/*.h ../*.c
+ -(./apibuild.py)
+
+xmllint.1: xmllint.xml
+ -@(xsltproc --nonet xmllint.xml)
+
+xmlcatalog.1: xmlcatalog_man.xml
+ -@(xsltproc --nonet xmlcatalog_man.xml)
+
+clean-local:
+ rm -f *~ *.bak *.hierarchy *.signals *-unused.txt
+
+maintainer-clean-local: clean
+ rm -rf libxml-decl-list.txt libxml-decl.txt
+
+rebuild: api all
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/xml.html $(srcdir)/encoding.html $(srcdir)/FAQ.html $(srcdir)/structure.gif $(srcdir)/DOM.gif $(srcdir)/smallfootonly.gif $(srcdir)/redhat.gif $(srcdir)/libxml.gif $(srcdir)/w3c.png $(srcdir)/Libxml2-Logo-180x168.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/html
+ -@INSTALL@ -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html
+ -@INSTALL@ -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html
+ -@INSTALL@ -m 0644 $(srcdir)/html/index.sgml $(DESTDIR)$(HTML_DIR)/html
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial
+ -@INSTALL@ -m 0644 $(srcdir)/tutorial/*.* \
+ $(DESTDIR)$(HTML_DIR)/tutorial
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial/images
+ -@INSTALL@ -m 0644 $(srcdir)/tutorial/images/*.* \
+ $(DESTDIR)$(HTML_DIR)/tutorial/images
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
+ -@INSTALL@ -m 0644 $(srcdir)/tutorial/images/callouts/*.* \
+ $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
+
+.PHONY : html xml templates scan
+# 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/doc/README.docs b/doc/README.docs
new file mode 100644
index 0000000..d0b993c
--- /dev/null
+++ b/doc/README.docs
@@ -0,0 +1,24 @@
+
+ XML toolkit from the GNOME project
+
+Full documentation is available on-line at
+ http://xmlsoft.org/
+
+This code is released under the MIT Licence see the Copyright file.
+
+To report bugs, follow the instructions at:
+ http://xmlsoft.org/bugs.html
+
+A mailing-list xml@gnome.org is available, to subscribe:
+ http://mail.gnome.org/mailman/listinfo/xml
+
+The list archive is at:
+ http://mail.gnome.org/archives/xml/
+
+All technical answers asked privately will be automatically answered on
+the list and archived for public access unless pricacy is explicitely
+required and justified.
+
+Daniel Veillard
+
+$Id: README.docs,v 1.1 2003/09/01 04:58:15 wbrack Exp $
diff --git a/doc/XMLinfo.html b/doc/XMLinfo.html
new file mode 100644
index 0000000..2642bcb
--- /dev/null
+++ b/doc/XMLinfo.html
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>XML</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>XML</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="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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><a href="http://www.w3.org/TR/REC-xml">XML is a standard</a> for
+markup-based structured documents. Here is <a name="example" id="example">an example XML
+document</a>:</p><pre>&lt;?xml version="1.0"?&gt;
+&lt;EXAMPLE prop1="gnome is great" prop2="&amp;amp; linux too"&gt;
+ &lt;head&gt;
+ &lt;title&gt;Welcome to Gnome&lt;/title&gt;
+ &lt;/head&gt;
+ &lt;chapter&gt;
+ &lt;title&gt;The Linux adventure&lt;/title&gt;
+ &lt;p&gt;bla bla bla ...&lt;/p&gt;
+ &lt;image href="linus.gif"/&gt;
+ &lt;p&gt;...&lt;/p&gt;
+ &lt;/chapter&gt;
+&lt;/EXAMPLE&gt;</pre><p>The first line specifies that it is an XML document and gives useful
+information about its encoding. Then the rest of the document is a text
+format whose structure is specified by tags between brackets. <strong>Each
+tag opened has to be closed</strong>. XML is pedantic about this. However, if
+a tag is empty (no content), a single tag can serve as both the opening and
+closing tag if it ends with <code>/&gt;</code> rather than with
+<code>&gt;</code>. Note that, for example, the image tag has no content (just
+an attribute) and is closed by ending the tag with <code>/&gt;</code>.</p><p>XML can be applied successfully to a wide range of tasks, ranging from
+long term structured document maintenance (where it follows the steps of
+SGML) to simple data encoding mechanisms like configuration file formatting
+(glade), spreadsheets (gnumeric), or even shorter lived documents such as
+WebDAV where it is used to encode remote calls between a client and a
+server.</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/XSLT.html b/doc/XSLT.html
new file mode 100644
index 0000000..00f4b49
--- /dev/null
+++ b/doc/XSLT.html
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>XSLT</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>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="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>
diff --git a/doc/api.xsl b/doc/api.xsl
new file mode 100644
index 0000000..2b7bd71
--- /dev/null
+++ b/doc/api.xsl
@@ -0,0 +1,394 @@
+<?xml version="1.0"?>
+<!-- this stylesheet builds the API*.html , it works based on libxml2-refs.xml
+ -->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ extension-element-prefixes="exsl"
+ exclude-result-prefixes="exsl">
+
+ <!-- Import the resto of the site stylesheets -->
+ <xsl:import href="site.xsl"/>
+
+ <!-- Generate XHTML-1.0 transitional -->
+ <xsl:output method="xml" encoding="ISO-8859-1" indent="yes"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
+
+ <xsl:variable name="href_base" select="''"/>
+ <xsl:variable name="apirefs" select="document('libxml2-refs.xml')"/>
+ <xsl:variable name="module" select="$apirefs/apirefs/@name"/>
+ <xsl:key name="refhref" match="reference" use="@name"/>
+
+ <xsl:template match="ref" mode="anchor">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="document('libxml2-refs.xml')">
+ <a href="{key('refhref', $name)/@href}"><xsl:value-of select="$name"/></a><br/>
+ </xsl:for-each>
+ </xsl:template>
+ <xsl:template match="type" mode="reflist">
+ <h2>Type <xsl:value-of select="@name"/>:</h2>
+ <p>
+ <xsl:for-each select="ref">
+ <xsl:apply-templates mode="anchor" select="."/>
+ <xsl:text>
+</xsl:text>
+ </xsl:for-each>
+ </p>
+ </xsl:template>
+ <xsl:template match="letter" mode="reflist">
+ <h2>Letter <xsl:value-of select="@name"/>:</h2>
+ <p>
+ <xsl:for-each select="ref">
+ <xsl:apply-templates mode="anchor" select="."/>
+ <xsl:text>
+</xsl:text>
+ </xsl:for-each>
+ </p>
+ </xsl:template>
+ <xsl:template match="file" mode="reflist">
+ <h2><a name="{@name}">Module <xsl:value-of select="@name"/></a>:</h2>
+ <p>
+ <xsl:for-each select="ref">
+ <xsl:apply-templates mode="anchor" select="."/>
+ <xsl:text>
+</xsl:text>
+ </xsl:for-each>
+ </p>
+ </xsl:template>
+ <xsl:template match="letter" mode="wordlist">
+ <h2>Letter <xsl:value-of select="@name"/>:</h2>
+ <dl>
+ <xsl:for-each select="word">
+ <dt><xsl:value-of select="@name"/></dt>
+ <dd>
+ <xsl:for-each select="ref">
+ <xsl:apply-templates mode="anchor" select="."/>
+ <xsl:text>
+</xsl:text>
+ </xsl:for-each>
+ </dd>
+ </xsl:for-each>
+ </dl>
+ </xsl:template>
+
+ <xsl:template match="constructors">
+ <xsl:message>Generating API Constructors</xsl:message>
+ <xsl:variable name="title">List of constructors for <xsl:value-of select="$module"/></xsl:variable>
+ <xsl:document href="APIconstructors.html" method="xml" encoding="ISO-8859-1"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:element name="title">
+ <xsl:value-of select="$title"/>
+ </xsl:element>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="$title"/>
+ </xsl:call-template>
+ <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">
+ <xsl:call-template name="develtoc"/>
+ </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">
+ <xsl:apply-templates mode="reflist" select="type"/>
+ <p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:document>
+ </xsl:template>
+ <xsl:template match="files">
+ <xsl:message>Generating API List of synbols per file</xsl:message>
+ <xsl:variable name="title">List of Symbols per Module for <xsl:value-of select="$module"/></xsl:variable>
+ <xsl:document href="APIfiles.html" method="xml" encoding="ISO-8859-1"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:element name="title">
+ <xsl:value-of select="$title"/>
+ </xsl:element>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="$title"/>
+ </xsl:call-template>
+ <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">
+ <xsl:call-template name="develtoc"/>
+ </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">
+ <xsl:apply-templates mode="reflist" select="file"/>
+ <p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:document>
+ </xsl:template>
+ <xsl:template match="functions">
+ <xsl:message>Generating API Functions by Type</xsl:message>
+ <xsl:variable name="title">List of function manipulating types in <xsl:value-of select="$module"/></xsl:variable>
+ <xsl:document href="APIfunctions.html" method="xml" encoding="ISO-8859-1"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:element name="title">
+ <xsl:value-of select="$title"/>
+ </xsl:element>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="$title"/>
+ </xsl:call-template>
+ <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">
+ <xsl:call-template name="develtoc"/>
+ </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">
+ <xsl:apply-templates mode="reflist" select="type"/>
+ <p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:document>
+ </xsl:template>
+ <xsl:template match="alpha">
+ <xsl:message>Generating API Alphabetic list</xsl:message>
+ <xsl:variable name="title">Alphabetic List of Symbols in <xsl:value-of select="$module"/></xsl:variable>
+ <xsl:document href="APIsymbols.html" method="xml" encoding="ISO-8859-1"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:element name="title">
+ <xsl:value-of select="$title"/>
+ </xsl:element>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="$title"/>
+ </xsl:call-template>
+ <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">
+ <xsl:call-template name="develtoc"/>
+ </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">
+ <xsl:apply-templates mode="reflist" select="letter"/>
+ <p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:document>
+ </xsl:template>
+ <xsl:template name="apichunks">
+ <h2 align="center">
+ <xsl:for-each select="/apirefs/index/chunks/chunk">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="start" select="@start"/>
+ <xsl:variable name="end" select="@end"/>
+ <xsl:variable name="block" select="concat($start, '-', $end)"/>
+ <a href="API{$name}.html"><xsl:value-of select="$block"/></a>
+ <xsl:text>
+</xsl:text>
+ </xsl:for-each>
+ </h2>
+ </xsl:template>
+ <xsl:template match="chunk">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="start" select="@start"/>
+ <xsl:variable name="end" select="@end"/>
+ <xsl:variable name="block" select="concat($start, '-', $end)"/>
+ <xsl:variable name="target" select="/apirefs/index/chunk[@name = $name]"/>
+ <xsl:variable name="title">API Alphabetic Index <xsl:value-of select="$block"/> for <xsl:value-of select="$module"/></xsl:variable>
+ <xsl:document href="API{$name}.html" method="xml" encoding="ISO-8859-1"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:element name="title">
+ <xsl:value-of select="$title"/>
+ </xsl:element>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="$title"/>
+ </xsl:call-template>
+ <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">
+ <xsl:call-template name="develtoc"/>
+ </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">
+ <xsl:call-template name="apichunks"/>
+ <xsl:apply-templates mode="wordlist"
+ select="$target/letter"/>
+ <xsl:call-template name="apichunks"/>
+ <p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:document>
+ </xsl:template>
+
+ <xsl:template match="index">
+ <xsl:message>Generating API Index</xsl:message>
+ <xsl:apply-templates select="chunks/chunk"/>
+ </xsl:template>
+
+ <xsl:template match="apirefs">
+ <xsl:message>Generating API Cross References</xsl:message>
+ <xsl:apply-templates select="constructors"/>
+ <xsl:apply-templates select="functions"/>
+ <xsl:apply-templates select="alpha"/>
+ <xsl:apply-templates select="files"/>
+ <xsl:apply-templates select="index"/>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <xsl:apply-templates select="$apirefs/apirefs"/>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/apibuild.py b/doc/apibuild.py
new file mode 100755
index 0000000..688403f
--- /dev/null
+++ b/doc/apibuild.py
@@ -0,0 +1,1913 @@
+#!/usr/bin/python -u
+#
+# This is the API builder, it parses the C sources and build the
+# API formal description in XML.
+#
+# See Copyright for the status of this software.
+#
+# daniel@veillard.com
+#
+import os, sys
+import string
+import glob
+
+debug=0
+
+#
+# C parser analysis code
+#
+ignored_files = {
+ "trio": "too many non standard macros",
+ "trio.c": "too many non standard macros",
+ "trionan.c": "too many non standard macros",
+ "triostr.c": "too many non standard macros",
+ "acconfig.h": "generated portability layer",
+ "config.h": "generated portability layer",
+ "libxml.h": "internal only",
+ "testOOM.c": "out of memory tester",
+ "testOOMlib.h": "out of memory tester",
+ "testOOMlib.c": "out of memory tester",
+ "rngparser.c": "not yet integrated",
+ "rngparser.h": "not yet integrated",
+}
+
+ignored_words = {
+ "WINAPI": (0, "Windows keyword"),
+ "LIBXML_DLL_IMPORT": (0, "Special macro to flag external keywords"),
+ "XMLPUBVAR": (0, "Special macro for extern vars for win32"),
+ "XSLTPUBVAR": (0, "Special macro for extern vars for win32"),
+ "EXSLTPUBVAR": (0, "Special macro for extern vars for win32"),
+ "XMLPUBFUN": (0, "Special macro for extern funcs for win32"),
+ "XSLTPUBFUN": (0, "Special macro for extern funcs for win32"),
+ "EXSLTPUBFUN": (0, "Special macro for extern funcs for win32"),
+ "XMLCALL": (0, "Special macro for win32 calls"),
+ "XSLTCALL": (0, "Special macro for win32 calls"),
+ "EXSLTCALL": (0, "Special macro for win32 calls"),
+ "__declspec": (3, "Windows keyword"),
+ "ATTRIBUTE_UNUSED": (0, "macro keyword"),
+ "LIBEXSLT_PUBLIC": (0, "macro keyword"),
+ "X_IN_Y": (5, "macro function builder"),
+}
+
+def escape(raw):
+ raw = string.replace(raw, '&', '&amp;')
+ raw = string.replace(raw, '<', '&lt;')
+ raw = string.replace(raw, '>', '&gt;')
+ raw = string.replace(raw, "'", '&apos;')
+ raw = string.replace(raw, '"', '&quot;')
+ return raw
+
+def uniq(items):
+ d = {}
+ for item in items:
+ d[item]=1
+ return d.keys()
+
+class identifier:
+ def __init__(self, name, module=None, type=None, lineno = 0,
+ info=None, extra=None):
+ self.name = name
+ self.module = module
+ self.type = type
+ self.info = info
+ self.extra = extra
+ self.lineno = lineno
+ self.static = 0
+
+ def __repr__(self):
+ r = "%s %s:" % (self.type, self.name)
+ if self.static:
+ r = r + " static"
+ if self.module != None:
+ r = r + " from %s" % (self.module)
+ if self.info != None:
+ r = r + " " + `self.info`
+ if self.extra != None:
+ r = r + " " + `self.extra`
+ return r
+
+
+ def set_module(self, module):
+ self.module = module
+ def set_type(self, type):
+ self.type = type
+ def set_info(self, info):
+ self.info = info
+ def set_extra(self, extra):
+ self.extra = extra
+ def set_lineno(self, lineno):
+ self.lineno = lineno
+ def set_static(self, static):
+ self.static = static
+
+ def get_name(self):
+ return self.name
+ def get_module(self):
+ return self.module
+ def get_type(self):
+ return self.type
+ def get_info(self):
+ return self.info
+ def get_lineno(self):
+ return self.lineno
+ def get_extra(self):
+ return self.extra
+ def get_static(self):
+ return self.static
+
+ def update(self, module, type = None, info = None, extra=None):
+ if module != None and self.module == None:
+ self.set_module(module)
+ if type != None and self.type == None:
+ self.set_type(type)
+ if info != None:
+ self.set_info(info)
+ if extra != None:
+ self.set_extra(extra)
+
+
+class index:
+ def __init__(self, name = "noname"):
+ self.name = name
+ self.identifiers = {}
+ self.functions = {}
+ self.variables = {}
+ self.includes = {}
+ self.structs = {}
+ self.enums = {}
+ self.typedefs = {}
+ self.macros = {}
+ self.references = {}
+ self.info = {}
+
+ def add_ref(self, name, module, static, type, lineno, info=None, extra=None):
+ if name[0:2] == '__':
+ return None
+ d = None
+ try:
+ d = self.identifiers[name]
+ d.update(module, type, lineno, info, extra)
+ except:
+ d = identifier(name, module, type, lineno, info, extra)
+ self.identifiers[name] = d
+
+ if d != None and static == 1:
+ d.set_static(1)
+
+ if d != None and name != None and type != None:
+ self.references[name] = d
+
+ def add(self, name, module, static, type, lineno, info=None, extra=None):
+ if name[0:2] == '__':
+ return None
+ d = None
+ try:
+ d = self.identifiers[name]
+ d.update(module, type, lineno, info, extra)
+ except:
+ d = identifier(name, module, type, lineno, info, extra)
+ self.identifiers[name] = d
+
+ if d != None and static == 1:
+ d.set_static(1)
+
+ if d != None and name != None and type != None:
+ if type == "function":
+ self.functions[name] = d
+ elif type == "functype":
+ self.functions[name] = d
+ elif type == "variable":
+ self.variables[name] = d
+ elif type == "include":
+ self.includes[name] = d
+ elif type == "struct":
+ self.structs[name] = d
+ elif type == "enum":
+ self.enums[name] = d
+ elif type == "typedef":
+ self.typedefs[name] = d
+ elif type == "macro":
+ self.macros[name] = d
+ else:
+ print "Unable to register type ", type
+ return d
+
+ def merge(self, idx):
+ for id in idx.functions.keys():
+ #
+ # macro might be used to override functions or variables
+ # definitions
+ #
+ if self.macros.has_key(id):
+ del self.macros[id]
+ if self.functions.has_key(id):
+ print "function %s from %s redeclared in %s" % (
+ id, self.functions[id].module, idx.functions[id].module)
+ else:
+ self.functions[id] = idx.functions[id]
+ self.identifiers[id] = idx.functions[id]
+ for id in idx.variables.keys():
+ #
+ # macro might be used to override functions or variables
+ # definitions
+ #
+ if self.macros.has_key(id):
+ del self.macros[id]
+ if self.variables.has_key(id):
+ print "variable %s from %s redeclared in %s" % (
+ id, self.variables[id].module, idx.variables[id].module)
+ else:
+ self.variables[id] = idx.variables[id]
+ self.identifiers[id] = idx.variables[id]
+ for id in idx.structs.keys():
+ if self.structs.has_key(id):
+ print "struct %s from %s redeclared in %s" % (
+ id, self.structs[id].module, idx.structs[id].module)
+ else:
+ self.structs[id] = idx.structs[id]
+ self.identifiers[id] = idx.structs[id]
+ for id in idx.typedefs.keys():
+ if self.typedefs.has_key(id):
+ print "typedef %s from %s redeclared in %s" % (
+ id, self.typedefs[id].module, idx.typedefs[id].module)
+ else:
+ self.typedefs[id] = idx.typedefs[id]
+ self.identifiers[id] = idx.typedefs[id]
+ for id in idx.macros.keys():
+ #
+ # macro might be used to override functions or variables
+ # definitions
+ #
+ if self.variables.has_key(id):
+ continue
+ if self.functions.has_key(id):
+ continue
+ if self.enums.has_key(id):
+ continue
+ if self.macros.has_key(id):
+ print "macro %s from %s redeclared in %s" % (
+ id, self.macros[id].module, idx.macros[id].module)
+ else:
+ self.macros[id] = idx.macros[id]
+ self.identifiers[id] = idx.macros[id]
+ for id in idx.enums.keys():
+ if self.enums.has_key(id):
+ print "enum %s from %s redeclared in %s" % (
+ id, self.enums[id].module, idx.enums[id].module)
+ else:
+ self.enums[id] = idx.enums[id]
+ self.identifiers[id] = idx.enums[id]
+
+ def merge_public(self, idx):
+ for id in idx.functions.keys():
+ if self.functions.has_key(id):
+ up = idx.functions[id]
+ self.functions[id].update(None, up.type, up.info, up.extra)
+ # else:
+ # print "Function %s from %s is not declared in headers" % (
+ # id, idx.functions[id].module)
+ # TODO: do the same for variables.
+
+ def analyze_dict(self, type, dict):
+ count = 0
+ public = 0
+ for name in dict.keys():
+ id = dict[name]
+ count = count + 1
+ if id.static == 0:
+ public = public + 1
+ if count != public:
+ print " %d %s , %d public" % (count, type, public)
+ elif count != 0:
+ print " %d public %s" % (count, type)
+
+
+ def analyze(self):
+ self.analyze_dict("functions", self.functions)
+ self.analyze_dict("variables", self.variables)
+ self.analyze_dict("structs", self.structs)
+ self.analyze_dict("typedefs", self.typedefs)
+ self.analyze_dict("macros", self.macros)
+
+class CLexer:
+ """A lexer for the C language, tokenize the input by reading and
+ analyzing it line by line"""
+ def __init__(self, input):
+ self.input = input
+ self.tokens = []
+ self.line = ""
+ self.lineno = 0
+
+ def getline(self):
+ line = ''
+ while line == '':
+ line = self.input.readline()
+ if not line:
+ return None
+ self.lineno = self.lineno + 1
+ line = string.lstrip(line)
+ line = string.rstrip(line)
+ if line == '':
+ continue
+ while line[-1] == '\\':
+ line = line[:-1]
+ n = self.input.readline()
+ self.lineno = self.lineno + 1
+ n = string.lstrip(n)
+ n = string.rstrip(n)
+ if not n:
+ break
+ else:
+ line = line + n
+ return line
+
+ def getlineno(self):
+ return self.lineno
+
+ def push(self, token):
+ self.tokens.insert(0, token);
+
+ def debug(self):
+ print "Last token: ", self.last
+ print "Token queue: ", self.tokens
+ print "Line %d end: " % (self.lineno), self.line
+
+ def token(self):
+ while self.tokens == []:
+ if self.line == "":
+ line = self.getline()
+ else:
+ line = self.line
+ self.line = ""
+ if line == None:
+ return None
+
+ if line[0] == '#':
+ self.tokens = map((lambda x: ('preproc', x)),
+ string.split(line))
+ break;
+ l = len(line)
+ if line[0] == '"' or line[0] == "'":
+ end = line[0]
+ line = line[1:]
+ found = 0
+ tok = ""
+ while found == 0:
+ i = 0
+ l = len(line)
+ while i < l:
+ if line[i] == end:
+ self.line = line[i+1:]
+ line = line[:i]
+ l = i
+ found = 1
+ break
+ if line[i] == '\\':
+ i = i + 1
+ i = i + 1
+ tok = tok + line
+ if found == 0:
+ line = self.getline()
+ if line == None:
+ return None
+ self.last = ('string', tok)
+ return self.last
+
+ if l >= 2 and line[0] == '/' and line[1] == '*':
+ line = line[2:]
+ found = 0
+ tok = ""
+ while found == 0:
+ i = 0
+ l = len(line)
+ while i < l:
+ if line[i] == '*' and i+1 < l and line[i+1] == '/':
+ self.line = line[i+2:]
+ line = line[:i-1]
+ l = i
+ found = 1
+ break
+ i = i + 1
+ if tok != "":
+ tok = tok + "\n"
+ tok = tok + line
+ if found == 0:
+ line = self.getline()
+ if line == None:
+ return None
+ self.last = ('comment', tok)
+ return self.last
+ if l >= 2 and line[0] == '/' and line[1] == '/':
+ line = line[2:]
+ self.last = ('comment', line)
+ return self.last
+ i = 0
+ while i < l:
+ if line[i] == '/' and i+1 < l and line[i+1] == '/':
+ self.line = line[i:]
+ line = line[:i]
+ break
+ if line[i] == '/' and i+1 < l and line[i+1] == '*':
+ self.line = line[i:]
+ line = line[:i]
+ break
+ if line[i] == '"' or line[i] == "'":
+ self.line = line[i:]
+ line = line[:i]
+ break
+ i = i + 1
+ l = len(line)
+ i = 0
+ while i < l:
+ if line[i] == ' ' or line[i] == '\t':
+ i = i + 1
+ continue
+ o = ord(line[i])
+ if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
+ (o >= 48 and o <= 57):
+ s = i
+ while i < l:
+ o = ord(line[i])
+ if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
+ (o >= 48 and o <= 57) or string.find(
+ " \t(){}:;,+-*/%&!|[]=><", line[i]) == -1:
+ i = i + 1
+ else:
+ break
+ self.tokens.append(('name', line[s:i]))
+ continue
+ if string.find("(){}:;,[]", line[i]) != -1:
+# if line[i] == '(' or line[i] == ')' or line[i] == '{' or \
+# line[i] == '}' or line[i] == ':' or line[i] == ';' or \
+# line[i] == ',' or line[i] == '[' or line[i] == ']':
+ self.tokens.append(('sep', line[i]))
+ i = i + 1
+ continue
+ if string.find("+-*><=/%&!|.", line[i]) != -1:
+# if line[i] == '+' or line[i] == '-' or line[i] == '*' or \
+# line[i] == '>' or line[i] == '<' or line[i] == '=' or \
+# line[i] == '/' or line[i] == '%' or line[i] == '&' or \
+# line[i] == '!' or line[i] == '|' or line[i] == '.':
+ if line[i] == '.' and i + 2 < l and \
+ line[i+1] == '.' and line[i+2] == '.':
+ self.tokens.append(('name', '...'))
+ i = i + 3
+ continue
+
+ j = i + 1
+ if j < l and (
+ string.find("+-*><=/%&!|", line[j]) != -1):
+# line[j] == '+' or line[j] == '-' or line[j] == '*' or \
+# line[j] == '>' or line[j] == '<' or line[j] == '=' or \
+# line[j] == '/' or line[j] == '%' or line[j] == '&' or \
+# line[j] == '!' or line[j] == '|'):
+ self.tokens.append(('op', line[i:j+1]))
+ i = j + 1
+ else:
+ self.tokens.append(('op', line[i]))
+ i = i + 1
+ continue
+ s = i
+ while i < l:
+ o = ord(line[i])
+ if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
+ (o >= 48 and o <= 57) or (
+ string.find(" \t(){}:;,+-*/%&!|[]=><", line[i]) == -1):
+# line[i] != ' ' and line[i] != '\t' and
+# line[i] != '(' and line[i] != ')' and
+# line[i] != '{' and line[i] != '}' and
+# line[i] != ':' and line[i] != ';' and
+# line[i] != ',' and line[i] != '+' and
+# line[i] != '-' and line[i] != '*' and
+# line[i] != '/' and line[i] != '%' and
+# line[i] != '&' and line[i] != '!' and
+# line[i] != '|' and line[i] != '[' and
+# line[i] != ']' and line[i] != '=' and
+# line[i] != '*' and line[i] != '>' and
+# line[i] != '<'):
+ i = i + 1
+ else:
+ break
+ self.tokens.append(('name', line[s:i]))
+
+ tok = self.tokens[0]
+ self.tokens = self.tokens[1:]
+ self.last = tok
+ return tok
+
+class CParser:
+ """The C module parser"""
+ def __init__(self, filename, idx = None):
+ self.filename = filename
+ if len(filename) > 2 and filename[-2:] == '.h':
+ self.is_header = 1
+ else:
+ self.is_header = 0
+ self.input = open(filename)
+ self.lexer = CLexer(self.input)
+ if idx == None:
+ self.index = index()
+ else:
+ self.index = idx
+ self.top_comment = ""
+ self.last_comment = ""
+ self.comment = None
+ self.collect_ref = 0
+ self.no_error = 0
+
+ def collect_references(self):
+ self.collect_ref = 1
+
+ def stop_error(self):
+ self.no_error = 1
+
+ def start_error(self):
+ self.no_error = 0
+
+ def lineno(self):
+ return self.lexer.getlineno()
+
+ def index_add(self, name, module, static, type, info=None, extra = None):
+ self.index.add(name, module, static, type, self.lineno(),
+ info, extra)
+
+ def index_add_ref(self, name, module, static, type, info=None,
+ extra = None):
+ self.index.add_ref(name, module, static, type, self.lineno(),
+ info, extra)
+
+ def warning(self, msg):
+ if self.no_error:
+ return
+ print msg
+
+ def error(self, msg, token=-1):
+ if self.no_error:
+ return
+
+ print "Parse Error: " + msg
+ if token != -1:
+ print "Got token ", token
+ self.lexer.debug()
+ sys.exit(1)
+
+ def debug(self, msg, token=-1):
+ print "Debug: " + msg
+ if token != -1:
+ print "Got token ", token
+ self.lexer.debug()
+
+ def parseTopComment(self, comment):
+ res = {}
+ lines = string.split(comment, "\n")
+ item = None
+ for line in lines:
+ while line != "" and (line[0] == ' ' or line[0] == '\t'):
+ line = line[1:]
+ while line != "" and line[0] == '*':
+ line = line[1:]
+ while line != "" and (line[0] == ' ' or line[0] == '\t'):
+ line = line[1:]
+ try:
+ (it, line) = string.split(line, ":", 1)
+ item = it
+ while line != "" and (line[0] == ' ' or line[0] == '\t'):
+ line = line[1:]
+ if res.has_key(item):
+ res[item] = res[item] + " " + line
+ else:
+ res[item] = line
+ except:
+ if item != None:
+ if res.has_key(item):
+ res[item] = res[item] + " " + line
+ else:
+ res[item] = line
+ self.index.info = res
+
+ def parseComment(self, token):
+ if self.top_comment == "":
+ self.top_comment = token[1]
+ if self.comment == None or token[1][0] == '*':
+ self.comment = token[1];
+ else:
+ self.comment = self.comment + token[1]
+ token = self.lexer.token()
+
+ if string.find(self.comment, "DOC_DISABLE") != -1:
+ self.stop_error()
+
+ if string.find(self.comment, "DOC_ENABLE") != -1:
+ self.start_error()
+
+ return token
+
+ #
+ # Parse a comment block associate to a macro
+ #
+ def parseMacroComment(self, name, quiet = 0):
+ if name[0:2] == '__':
+ quiet = 1
+
+ args = []
+ desc = ""
+
+ if self.comment == None:
+ if not quiet:
+ self.warning("Missing comment for macro %s" % (name))
+ return((args, desc))
+ if self.comment[0] != '*':
+ if not quiet:
+ self.warning("Missing * in macro comment for %s" % (name))
+ return((args, desc))
+ lines = string.split(self.comment, '\n')
+ if lines[0] == '*':
+ del lines[0]
+ if lines[0] != "* %s:" % (name):
+ if not quiet:
+ self.warning("Misformatted macro comment for %s" % (name))
+ self.warning(" Expecting '* %s:' got '%s'" % (name, lines[0]))
+ return((args, desc))
+ del lines[0]
+ while lines[0] == '*':
+ del lines[0]
+ while len(lines) > 0 and lines[0][0:3] == '* @':
+ l = lines[0][3:]
+ try:
+ (arg, desc) = string.split(l, ':', 1)
+ desc=string.strip(desc)
+ arg=string.strip(arg)
+ except:
+ if not quiet:
+ self.warning("Misformatted macro comment for %s" % (name))
+ self.warning(" problem with '%s'" % (lines[0]))
+ del lines[0]
+ continue
+ del lines[0]
+ l = string.strip(lines[0])
+ while len(l) > 2 and l[0:3] != '* @':
+ while l[0] == '*':
+ l = l[1:]
+ desc = desc + ' ' + string.strip(l)
+ del lines[0]
+ if len(lines) == 0:
+ break
+ l = lines[0]
+ args.append((arg, desc))
+ while len(lines) > 0 and lines[0] == '*':
+ del lines[0]
+ desc = ""
+ while len(lines) > 0:
+ l = lines[0]
+ while len(l) > 0 and l[0] == '*':
+ l = l[1:]
+ l = string.strip(l)
+ desc = desc + " " + l
+ del lines[0]
+
+ desc = string.strip(desc)
+
+ if quiet == 0:
+ if desc == "":
+ self.warning("Macro comment for %s lack description of the macro" % (name))
+
+ return((args, desc))
+
+ #
+ # Parse a comment block and merge the informations found in the
+ # parameters descriptions, finally returns a block as complete
+ # as possible
+ #
+ def mergeFunctionComment(self, name, description, quiet = 0):
+ if name == 'main':
+ quiet = 1
+ if name[0:2] == '__':
+ quiet = 1
+
+ (ret, args) = description
+ desc = ""
+ retdesc = ""
+
+ if self.comment == None:
+ if not quiet:
+ self.warning("Missing comment for function %s" % (name))
+ return(((ret[0], retdesc), args, desc))
+ if self.comment[0] != '*':
+ if not quiet:
+ self.warning("Missing * in function comment for %s" % (name))
+ return(((ret[0], retdesc), args, desc))
+ lines = string.split(self.comment, '\n')
+ if lines[0] == '*':
+ del lines[0]
+ if lines[0] != "* %s:" % (name):
+ if not quiet:
+ self.warning("Misformatted function comment for %s" % (name))
+ self.warning(" Expecting '* %s:' got '%s'" % (name, lines[0]))
+ return(((ret[0], retdesc), args, desc))
+ del lines[0]
+ while lines[0] == '*':
+ del lines[0]
+ nbargs = len(args)
+ while len(lines) > 0 and lines[0][0:3] == '* @':
+ l = lines[0][3:]
+ try:
+ (arg, desc) = string.split(l, ':', 1)
+ desc=string.strip(desc)
+ arg=string.strip(arg)
+ except:
+ if not quiet:
+ self.warning("Misformatted function comment for %s" % (name))
+ self.warning(" problem with '%s'" % (lines[0]))
+ del lines[0]
+ continue
+ del lines[0]
+ l = string.strip(lines[0])
+ while len(l) > 2 and l[0:3] != '* @':
+ while l[0] == '*':
+ l = l[1:]
+ desc = desc + ' ' + string.strip(l)
+ del lines[0]
+ if len(lines) == 0:
+ break
+ l = lines[0]
+ i = 0
+ while i < nbargs:
+ if args[i][1] == arg:
+ args[i] = (args[i][0], arg, desc)
+ break;
+ i = i + 1
+ if i >= nbargs:
+ if not quiet:
+ self.warning("Unable to find arg %s from function comment for %s" % (
+ arg, name))
+ while len(lines) > 0 and lines[0] == '*':
+ del lines[0]
+ desc = ""
+ while len(lines) > 0:
+ l = lines[0]
+ while len(l) > 0 and l[0] == '*':
+ l = l[1:]
+ l = string.strip(l)
+ if len(l) >= 6 and l[0:6] == "return" or l[0:6] == "Return":
+ try:
+ l = string.split(l, ' ', 1)[1]
+ except:
+ l = ""
+ retdesc = string.strip(l)
+ del lines[0]
+ while len(lines) > 0:
+ l = lines[0]
+ while len(l) > 0 and l[0] == '*':
+ l = l[1:]
+ l = string.strip(l)
+ retdesc = retdesc + " " + l
+ del lines[0]
+ else:
+ desc = desc + " " + l
+ del lines[0]
+
+ retdesc = string.strip(retdesc)
+ desc = string.strip(desc)
+
+ if quiet == 0:
+ #
+ # report missing comments
+ #
+ i = 0
+ while i < nbargs:
+ if args[i][2] == None and args[i][0] != "void" and args[i][1] != None:
+ self.warning("Function comment for %s lack description of arg %s" % (name, args[i][1]))
+ i = i + 1
+ if retdesc == "" and ret[0] != "void":
+ self.warning("Function comment for %s lack description of return value" % (name))
+ if desc == "":
+ self.warning("Function comment for %s lack description of the function" % (name))
+
+
+ return(((ret[0], retdesc), args, desc))
+
+ def parsePreproc(self, token):
+ name = token[1]
+ if name == "#include":
+ token = self.lexer.token()
+ if token == None:
+ return None
+ if token[0] == 'preproc':
+ self.index_add(token[1], self.filename, not self.is_header,
+ "include")
+ return self.lexer.token()
+ return token
+ if name == "#define":
+ token = self.lexer.token()
+ if token == None:
+ return None
+ if token[0] == 'preproc':
+ # TODO macros with arguments
+ name = token[1]
+ lst = []
+ token = self.lexer.token()
+ while token != None and token[0] == 'preproc' and \
+ token[1][0] != '#':
+ lst.append(token[1])
+ token = self.lexer.token()
+ try:
+ name = string.split(name, '(') [0]
+ except:
+ pass
+ info = self.parseMacroComment(name, not self.is_header)
+ self.index_add(name, self.filename, not self.is_header,
+ "macro", info)
+ return token
+ token = self.lexer.token()
+ while token != None and token[0] == 'preproc' and \
+ token[1][0] != '#':
+ token = self.lexer.token()
+ return token
+
+ #
+ # token acquisition on top of the lexer, it handle internally
+ # preprocessor and comments since they are logically not part of
+ # the program structure.
+ #
+ def token(self):
+ global ignored_words
+
+ token = self.lexer.token()
+ while token != None:
+ if token[0] == 'comment':
+ token = self.parseComment(token)
+ continue
+ elif token[0] == 'preproc':
+ token = self.parsePreproc(token)
+ continue
+ elif token[0] == "name" and ignored_words.has_key(token[1]):
+ (n, info) = ignored_words[token[1]]
+ i = 0
+ while i < n:
+ token = self.lexer.token()
+ i = i + 1
+ token = self.lexer.token()
+ continue
+ else:
+ if debug:
+ print "=> ", token
+ return token
+ return None
+
+ #
+ # Parse a typedef, it records the type and its name.
+ #
+ def parseTypedef(self, token):
+ if token == None:
+ return None
+ token = self.parseType(token)
+ if token == None:
+ self.error("parsing typedef")
+ return None
+ base_type = self.type
+ type = base_type
+ #self.debug("end typedef type", token)
+ while token != None:
+ if token[0] == "name":
+ name = token[1]
+ signature = self.signature
+ if signature != None:
+ type = string.split(type, '(')[0]
+ d = self.mergeFunctionComment(name,
+ ((type, None), signature), 1)
+ self.index_add(name, self.filename, not self.is_header,
+ "functype", d)
+ else:
+ if base_type == "struct":
+ self.index_add(name, self.filename, not self.is_header,
+ "struct", type)
+ base_type = "struct " + name
+ else:
+ self.index_add(name, self.filename, not self.is_header,
+ "typedef", type)
+ token = self.token()
+ else:
+ self.error("parsing typedef: expecting a name")
+ return token
+ #self.debug("end typedef", token)
+ if token != None and token[0] == 'sep' and token[1] == ',':
+ type = base_type
+ token = self.token()
+ while token != None and token[0] == "op":
+ type = type + token[1]
+ token = self.token()
+ elif token != None and token[0] == 'sep' and token[1] == ';':
+ break;
+ elif token != None and token[0] == 'name':
+ type = base_type
+ continue;
+ else:
+ self.error("parsing typedef: expecting ';'", token)
+ return token
+ token = self.token()
+ return token
+
+ #
+ # Parse a C code block, used for functions it parse till
+ # the balancing } included
+ #
+ def parseBlock(self, token):
+ while token != None:
+ if token[0] == "sep" and token[1] == "{":
+ token = self.token()
+ token = self.parseBlock(token)
+ elif token[0] == "sep" and token[1] == "}":
+ self.comment = None
+ token = self.token()
+ return token
+ else:
+ if self.collect_ref == 1:
+ oldtok = token
+ token = self.token()
+ if oldtok[0] == "name" and oldtok[1][0:3] == "xml":
+ if token[0] == "sep" and token[1] == "(":
+ self.index_add_ref(oldtok[1], self.filename,
+ 0, "function")
+ token = self.token()
+ elif token[0] == "name":
+ token = self.token()
+ if token[0] == "sep" and (token[1] == ";" or
+ token[1] == "," or token[1] == "="):
+ self.index_add_ref(oldtok[1], self.filename,
+ 0, "type")
+ elif oldtok[0] == "name" and oldtok[1][0:4] == "XML_":
+ self.index_add_ref(oldtok[1], self.filename,
+ 0, "typedef")
+ elif oldtok[0] == "name" and oldtok[1][0:7] == "LIBXML_":
+ self.index_add_ref(oldtok[1], self.filename,
+ 0, "typedef")
+
+ else:
+ token = self.token()
+ return token
+
+ #
+ # Parse a C struct definition till the balancing }
+ #
+ def parseStruct(self, token):
+ fields = []
+ #self.debug("start parseStruct", token)
+ while token != None:
+ if token[0] == "sep" and token[1] == "{":
+ token = self.token()
+ token = self.parseTypeBlock(token)
+ elif token[0] == "sep" and token[1] == "}":
+ self.struct_fields = fields
+ #self.debug("end parseStruct", token)
+ #print fields
+ token = self.token()
+ return token
+ else:
+ base_type = self.type
+ #self.debug("before parseType", token)
+ token = self.parseType(token)
+ #self.debug("after parseType", token)
+ if token != None and token[0] == "name":
+ fname = token[1]
+ token = self.token()
+ if token[0] == "sep" and token[1] == ";":
+ self.comment = None
+ token = self.token()
+ fields.append((self.type, fname, self.comment))
+ self.comment = None
+ else:
+ self.error("parseStruct: expecting ;", token)
+ elif token != None and token[0] == "sep" and token[1] == "{":
+ token = self.token()
+ token = self.parseTypeBlock(token)
+ if token != None and token[0] == "name":
+ token = self.token()
+ if token != None and token[0] == "sep" and token[1] == ";":
+ token = self.token()
+ else:
+ self.error("parseStruct: expecting ;", token)
+ else:
+ self.error("parseStruct: name", token)
+ token = self.token()
+ self.type = base_type;
+ self.struct_fields = fields
+ #self.debug("end parseStruct", token)
+ #print fields
+ return token
+
+ #
+ # Parse a C enum block, parse till the balancing }
+ #
+ def parseEnumBlock(self, token):
+ self.enums = []
+ name = None
+ self.comment = None
+ comment = ""
+ value = "0"
+ while token != None:
+ if token[0] == "sep" and token[1] == "{":
+ token = self.token()
+ token = self.parseTypeBlock(token)
+ elif token[0] == "sep" and token[1] == "}":
+ if name != None:
+ if self.comment != None:
+ comment = self.comment
+ self.comment = None
+ self.enums.append((name, value, comment))
+ token = self.token()
+ return token
+ elif token[0] == "name":
+ if name != None:
+ if self.comment != None:
+ comment = string.strip(self.comment)
+ self.comment = None
+ self.enums.append((name, value, comment))
+ name = token[1]
+ comment = ""
+ token = self.token()
+ if token[0] == "op" and token[1][0] == "=":
+ value = ""
+ if len(token[1]) > 1:
+ value = token[1][1:]
+ token = self.token()
+ while token[0] != "sep" or (token[1] != ',' and
+ token[1] != '}'):
+ value = value + token[1]
+ token = self.token()
+ else:
+ try:
+ value = "%d" % (int(value) + 1)
+ except:
+ self.warning("Failed to compute value of enum %s" % (name))
+ value=""
+ if token[0] == "sep" and token[1] == ",":
+ token = self.token()
+ else:
+ token = self.token()
+ return token
+
+ #
+ # Parse a C definition block, used for structs it parse till
+ # the balancing }
+ #
+ def parseTypeBlock(self, token):
+ while token != None:
+ if token[0] == "sep" and token[1] == "{":
+ token = self.token()
+ token = self.parseTypeBlock(token)
+ elif token[0] == "sep" and token[1] == "}":
+ token = self.token()
+ return token
+ else:
+ token = self.token()
+ return token
+
+ #
+ # Parse a type: the fact that the type name can either occur after
+ # the definition or within the definition makes it a little harder
+ # if inside, the name token is pushed back before returning
+ #
+ def parseType(self, token):
+ self.type = ""
+ self.struct_fields = []
+ self.signature = None
+ if token == None:
+ return token
+
+ while token[0] == "name" and (
+ token[1] == "const" or token[1] == "unsigned"):
+ if self.type == "":
+ self.type = token[1]
+ else:
+ self.type = self.type + " " + token[1]
+ token = self.token()
+
+ if token[0] == "name" and (token[1] == "long" or token[1] == "short"):
+ if self.type == "":
+ self.type = token[1]
+ else:
+ self.type = self.type + " " + token[1]
+ if token[0] == "name" and token[1] == "int":
+ if self.type == "":
+ self.type = tmp[1]
+ else:
+ self.type = self.type + " " + tmp[1]
+
+ elif token[0] == "name" and token[1] == "struct":
+ if self.type == "":
+ self.type = token[1]
+ else:
+ self.type = self.type + " " + token[1]
+ token = self.token()
+ nametok = None
+ if token[0] == "name":
+ nametok = token
+ token = self.token()
+ if token != None and token[0] == "sep" and token[1] == "{":
+ token = self.token()
+ token = self.parseStruct(token)
+ elif token != None and token[0] == "op" and token[1] == "*":
+ self.type = self.type + " " + nametok[1] + " *"
+ token = self.token()
+ while token != None and token[0] == "op" and token[1] == "*":
+ self.type = self.type + " *"
+ token = self.token()
+ if token[0] == "name":
+ nametok = token
+ token = self.token()
+ else:
+ self.error("struct : expecting name", token)
+ return token
+ elif token != None and token[0] == "name" and nametok != None:
+ self.type = self.type + " " + nametok[1]
+ return token
+
+ if nametok != None:
+ self.lexer.push(token)
+ token = nametok
+ return token
+
+ elif token[0] == "name" and token[1] == "enum":
+ if self.type == "":
+ self.type = token[1]
+ else:
+ self.type = self.type + " " + token[1]
+ self.enums = []
+ token = self.token()
+ if token != None and token[0] == "sep" and token[1] == "{":
+ token = self.token()
+ token = self.parseEnumBlock(token)
+ else:
+ self.error("parsing enum: expecting '{'", token)
+ enum_type = None
+ if token != None and token[0] != "name":
+ self.lexer.push(token)
+ token = ("name", "enum")
+ else:
+ enum_type = token[1]
+ for enum in self.enums:
+ self.index_add(enum[0], self.filename,
+ not self.is_header, "enum",
+ (enum[1], enum[2], enum_type))
+ return token
+
+ elif token[0] == "name":
+ if self.type == "":
+ self.type = token[1]
+ else:
+ self.type = self.type + " " + token[1]
+ else:
+ self.error("parsing type %s: expecting a name" % (self.type),
+ token)
+ return token
+ token = self.token()
+ while token != None and (token[0] == "op" or
+ token[0] == "name" and token[1] == "const"):
+ self.type = self.type + " " + token[1]
+ token = self.token()
+
+ #
+ # if there is a parenthesis here, this means a function type
+ #
+ if token != None and token[0] == "sep" and token[1] == '(':
+ self.type = self.type + token[1]
+ token = self.token()
+ while token != None and token[0] == "op" and token[1] == '*':
+ self.type = self.type + token[1]
+ token = self.token()
+ if token == None or token[0] != "name" :
+ self.error("parsing function type, name expected", token);
+ return token
+ self.type = self.type + token[1]
+ nametok = token
+ token = self.token()
+ if token != None and token[0] == "sep" and token[1] == ')':
+ self.type = self.type + token[1]
+ token = self.token()
+ if token != None and token[0] == "sep" and token[1] == '(':
+ token = self.token()
+ type = self.type;
+ token = self.parseSignature(token);
+ self.type = type;
+ else:
+ self.error("parsing function type, '(' expected", token);
+ return token
+ else:
+ self.error("parsing function type, ')' expected", token);
+ return token
+ self.lexer.push(token)
+ token = nametok
+ return token
+
+ #
+ # do some lookahead for arrays
+ #
+ if token != None and token[0] == "name":
+ nametok = token
+ token = self.token()
+ if token != None and token[0] == "sep" and token[1] == '[':
+ self.type = self.type + nametok[1]
+ while token != None and token[0] == "sep" and token[1] == '[':
+ self.type = self.type + token[1]
+ token = self.token()
+ while token != None and token[0] != 'sep' and \
+ token[1] != ']' and token[1] != ';':
+ self.type = self.type + token[1]
+ token = self.token()
+ if token != None and token[0] == 'sep' and token[1] == ']':
+ self.type = self.type + token[1]
+ token = self.token()
+ else:
+ self.error("parsing array type, ']' expected", token);
+ return token
+ elif token != None and token[0] == "sep" and token[1] == ':':
+ # remove :12 in case it's a limited int size
+ token = self.token()
+ token = self.token()
+ self.lexer.push(token)
+ token = nametok
+
+ return token
+
+ #
+ # Parse a signature: '(' has been parsed and we scan the type definition
+ # up to the ')' included
+ def parseSignature(self, token):
+ signature = []
+ if token != None and token[0] == "sep" and token[1] == ')':
+ self.signature = []
+ token = self.token()
+ return token
+ while token != None:
+ token = self.parseType(token)
+ if token != None and token[0] == "name":
+ signature.append((self.type, token[1], None))
+ token = self.token()
+ elif token != None and token[0] == "sep" and token[1] == ',':
+ token = self.token()
+ continue
+ elif token != None and token[0] == "sep" and token[1] == ')':
+ # only the type was provided
+ if self.type == "...":
+ signature.append((self.type, "...", None))
+ else:
+ signature.append((self.type, None, None))
+ if token != None and token[0] == "sep":
+ if token[1] == ',':
+ token = self.token()
+ continue
+ elif token[1] == ')':
+ token = self.token()
+ break
+ self.signature = signature
+ return token
+
+ #
+ # Parse a global definition, be it a type, variable or function
+ # the extern "C" blocks are a bit nasty and require it to recurse.
+ #
+ def parseGlobal(self, token):
+ static = 0
+ if token[1] == 'extern':
+ token = self.token()
+ if token == None:
+ return token
+ if token[0] == 'string':
+ if token[1] == 'C':
+ token = self.token()
+ if token == None:
+ return token
+ if token[0] == 'sep' and token[1] == "{":
+ token = self.token()
+# print 'Entering extern "C line ', self.lineno()
+ while token != None and (token[0] != 'sep' or
+ token[1] != "}"):
+ if token[0] == 'name':
+ token = self.parseGlobal(token)
+ else:
+ self.error(
+ "token %s %s unexpected at the top level" % (
+ token[0], token[1]))
+ token = self.parseGlobal(token)
+# print 'Exiting extern "C" line', self.lineno()
+ token = self.token()
+ return token
+ else:
+ return token
+ elif token[1] == 'static':
+ static = 1
+ token = self.token()
+ if token == None or token[0] != 'name':
+ return token
+
+ if token[1] == 'typedef':
+ token = self.token()
+ return self.parseTypedef(token)
+ else:
+ token = self.parseType(token)
+ type_orig = self.type
+ if token == None or token[0] != "name":
+ return token
+ type = type_orig
+ self.name = token[1]
+ token = self.token()
+ while token != None and (token[0] == "sep" or token[0] == "op"):
+ if token[0] == "sep":
+ if token[1] == "[":
+ type = type + token[1]
+ token = self.token()
+ while token != None and (token[0] != "sep" or \
+ token[1] != ";"):
+ type = type + token[1]
+ token = self.token()
+
+ if token != None and token[0] == "op" and token[1] == "=":
+ #
+ # Skip the initialization of the variable
+ #
+ token = self.token()
+ if token[0] == 'sep' and token[1] == '{':
+ token = self.token()
+ token = self.parseBlock(token)
+ else:
+ self.comment = None
+ while token != None and (token[0] != "sep" or \
+ (token[1] != ';' and token[1] != ',')):
+ token = self.token()
+ self.comment = None
+ if token == None or token[0] != "sep" or (token[1] != ';' and
+ token[1] != ','):
+ self.error("missing ';' or ',' after value")
+
+ if token != None and token[0] == "sep":
+ if token[1] == ";":
+ self.comment = None
+ token = self.token()
+ if type == "struct":
+ self.index_add(self.name, self.filename,
+ not self.is_header, "struct", self.struct_fields)
+ else:
+ self.index_add(self.name, self.filename,
+ not self.is_header, "variable", type)
+ break
+ elif token[1] == "(":
+ token = self.token()
+ token = self.parseSignature(token)
+ if token == None:
+ return None
+ if token[0] == "sep" and token[1] == ";":
+ d = self.mergeFunctionComment(self.name,
+ ((type, None), self.signature), 1)
+ self.index_add(self.name, self.filename, static,
+ "function", d)
+ token = self.token()
+ elif token[0] == "sep" and token[1] == "{":
+ d = self.mergeFunctionComment(self.name,
+ ((type, None), self.signature), static)
+ self.index_add(self.name, self.filename, static,
+ "function", d)
+ token = self.token()
+ token = self.parseBlock(token);
+ elif token[1] == ',':
+ self.comment = None
+ self.index_add(self.name, self.filename, static,
+ "variable", type)
+ type = type_orig
+ token = self.token()
+ while token != None and token[0] == "sep":
+ type = type + token[1]
+ token = self.token()
+ if token != None and token[0] == "name":
+ self.name = token[1]
+ token = self.token()
+ else:
+ break
+
+ return token
+
+ def parse(self):
+ self.warning("Parsing %s" % (self.filename))
+ token = self.token()
+ while token != None:
+ if token[0] == 'name':
+ token = self.parseGlobal(token)
+ else:
+ self.error("token %s %s unexpected at the top level" % (
+ token[0], token[1]))
+ token = self.parseGlobal(token)
+ return
+ self.parseTopComment(self.top_comment)
+ return self.index
+
+
+class docBuilder:
+ """A documentation builder"""
+ def __init__(self, name, directories=['.'], excludes=[]):
+ self.name = name
+ self.directories = directories
+ self.excludes = excludes + ignored_files.keys()
+ self.modules = {}
+ self.headers = {}
+ self.idx = index()
+ self.xref = {}
+ self.index = {}
+ if name == 'libxml2':
+ self.basename = 'libxml'
+ else:
+ self.basename = name
+
+ def indexString(self, id, str):
+ if str == None:
+ return
+ str = string.replace(str, "'", ' ')
+ str = string.replace(str, '"', ' ')
+ str = string.replace(str, "/", ' ')
+ str = string.replace(str, '*', ' ')
+ str = string.replace(str, "[", ' ')
+ str = string.replace(str, "]", ' ')
+ str = string.replace(str, "(", ' ')
+ str = string.replace(str, ")", ' ')
+ str = string.replace(str, "<", ' ')
+ str = string.replace(str, '>', ' ')
+ str = string.replace(str, "&", ' ')
+ str = string.replace(str, '#', ' ')
+ str = string.replace(str, ",", ' ')
+ str = string.replace(str, '.', ' ')
+ str = string.replace(str, ';', ' ')
+ tokens = string.split(str)
+ for token in tokens:
+ try:
+ c = token[0]
+ if string.find(string.letters, c) < 0:
+ pass
+ elif len(token) < 3:
+ pass
+ else:
+ lower = string.lower(token)
+ # TODO: generalize this a bit
+ if lower == 'and' or lower == 'the':
+ pass
+ elif self.xref.has_key(token):
+ self.xref[token].append(id)
+ else:
+ self.xref[token] = [id]
+ except:
+ pass
+
+ def analyze(self):
+ print "Project %s : %d headers, %d modules" % (self.name, len(self.headers.keys()), len(self.modules.keys()))
+ self.idx.analyze()
+
+ def scanHeaders(self):
+ for header in self.headers.keys():
+ parser = CParser(header)
+ idx = parser.parse()
+ self.headers[header] = idx;
+ self.idx.merge(idx)
+
+ def scanModules(self):
+ for module in self.modules.keys():
+ parser = CParser(module)
+ idx = parser.parse()
+ # idx.analyze()
+ self.modules[module] = idx
+ self.idx.merge_public(idx)
+
+ def scan(self):
+ for directory in self.directories:
+ files = glob.glob(directory + "/*.c")
+ for file in files:
+ skip = 0
+ for excl in self.excludes:
+ if string.find(file, excl) != -1:
+ skip = 1;
+ break
+ if skip == 0:
+ self.modules[file] = None;
+ files = glob.glob(directory + "/*.h")
+ for file in files:
+ skip = 0
+ for excl in self.excludes:
+ if string.find(file, excl) != -1:
+ skip = 1;
+ break
+ if skip == 0:
+ self.headers[file] = None;
+ self.scanHeaders()
+ self.scanModules()
+
+ def modulename_file(self, file):
+ module = os.path.basename(file)
+ if module[-2:] == '.h':
+ module = module[:-2]
+ return module
+
+ def serialize_enum(self, output, name):
+ id = self.idx.enums[name]
+ output.write(" <enum name='%s' file='%s'" % (name,
+ self.modulename_file(id.module)))
+ if id.info != None:
+ info = id.info
+ if info[0] != None and info[0] != '':
+ try:
+ val = eval(info[0])
+ except:
+ val = info[0]
+ output.write(" value='%s'" % (val));
+ if info[2] != None and info[2] != '':
+ output.write(" type='%s'" % info[2]);
+ if info[1] != None and info[1] != '':
+ output.write(" info='%s'" % escape(info[1]));
+ output.write("/>\n")
+
+ def serialize_macro(self, output, name):
+ id = self.idx.macros[name]
+ output.write(" <macro name='%s' file='%s'>\n" % (name,
+ self.modulename_file(id.module)))
+ if id.info != None:
+ try:
+ (args, desc) = id.info
+ if desc != None and desc != "":
+ output.write(" <info>%s</info>\n" % (escape(desc)))
+ self.indexString(name, desc)
+ for arg in args:
+ (name, desc) = arg
+ if desc != None and desc != "":
+ output.write(" <arg name='%s' info='%s'/>\n" % (
+ name, escape(desc)))
+ self.indexString(name, desc)
+ else:
+ output.write(" <arg name='%s'/>\n" % (name))
+ except:
+ pass
+ output.write(" </macro>\n")
+
+ def serialize_typedef(self, output, name):
+ id = self.idx.typedefs[name]
+ if id.info[0:7] == 'struct ':
+ output.write(" <struct name='%s' file='%s' type='%s'" % (
+ name, self.modulename_file(id.module), id.info))
+ name = id.info[7:]
+ if self.idx.structs.has_key(name) and ( \
+ type(self.idx.structs[name].info) == type(()) or
+ type(self.idx.structs[name].info) == type([])):
+ output.write(">\n");
+ try:
+ for field in self.idx.structs[name].info:
+ desc = field[2]
+ self.indexString(name, desc)
+ if desc == None:
+ desc = ''
+ else:
+ desc = escape(desc)
+ output.write(" <field name='%s' type='%s' info='%s'/>\n" % (field[1] , field[0], desc))
+ except:
+ print "Failed to serialize struct %s" % (name)
+ output.write(" </struct>\n")
+ else:
+ output.write("/>\n");
+ else :
+ output.write(" <typedef name='%s' file='%s' type='%s'/>\n" % (
+ name, self.modulename_file(id.module), id.info))
+
+ def serialize_variable(self, output, name):
+ id = self.idx.variables[name]
+ if id.info != None:
+ output.write(" <variable name='%s' file='%s' type='%s'/>\n" % (
+ name, self.modulename_file(id.module), id.info))
+ else:
+ output.write(" <variable name='%s' file='%s'/>\n" % (
+ name, self.modulename_file(id.module)))
+
+ def serialize_function(self, output, name):
+ id = self.idx.functions[name]
+ output.write(" <%s name='%s' file='%s'>\n" % (id.type, name,
+ self.modulename_file(id.module)))
+ try:
+ (ret, params, desc) = id.info
+ output.write(" <info>%s</info>\n" % (escape(desc)))
+ self.indexString(name, desc)
+ if ret[0] != None:
+ if ret[0] == "void":
+ output.write(" <return type='void'/>\n")
+ else:
+ output.write(" <return type='%s' info='%s'/>\n" % (
+ ret[0], escape(ret[1])))
+ self.indexString(name, ret[1])
+ for param in params:
+ if param[0] == 'void':
+ continue
+ if param[2] == None:
+ output.write(" <arg name='%s' type='%s' info=''/>\n" % (param[1], param[0]))
+ else:
+ output.write(" <arg name='%s' type='%s' info='%s'/>\n" % (param[1], param[0], escape(param[2])))
+ self.indexString(name, param[2])
+ except:
+ print "Failed to save function %s info: " % name, `id.info`
+ output.write(" </%s>\n" % (id.type))
+
+ def serialize_exports(self, output, file):
+ module = self.modulename_file(file)
+ output.write(" <file name='%s'>\n" % (module))
+ dict = self.headers[file]
+ if dict.info != None:
+ for data in ('Summary', 'Description', 'Author'):
+ try:
+ output.write(" <%s>%s</%s>\n" % (
+ string.lower(data),
+ escape(dict.info[data]),
+ string.lower(data)))
+ except:
+ print "Header %s lacks a %s description" % (module, data)
+ if dict.info.has_key('Description'):
+ desc = dict.info['Description']
+ if string.find(desc, "DEPRECATED") != -1:
+ output.write(" <deprecated/>\n")
+
+ ids = dict.macros.keys()
+ ids.sort()
+ for id in uniq(ids):
+ # Macros are sometime used to masquerade other types.
+ if dict.functions.has_key(id):
+ continue
+ if dict.variables.has_key(id):
+ continue
+ if dict.typedefs.has_key(id):
+ continue
+ if dict.structs.has_key(id):
+ continue
+ if dict.enums.has_key(id):
+ continue
+ output.write(" <exports symbol='%s' type='macro'/>\n" % (id))
+ ids = dict.enums.keys()
+ ids.sort()
+ for id in uniq(ids):
+ output.write(" <exports symbol='%s' type='enum'/>\n" % (id))
+ ids = dict.typedefs.keys()
+ ids.sort()
+ for id in uniq(ids):
+ output.write(" <exports symbol='%s' type='typedef'/>\n" % (id))
+ ids = dict.structs.keys()
+ ids.sort()
+ for id in uniq(ids):
+ output.write(" <exports symbol='%s' type='struct'/>\n" % (id))
+ ids = dict.variables.keys()
+ ids.sort()
+ for id in uniq(ids):
+ output.write(" <exports symbol='%s' type='variable'/>\n" % (id))
+ ids = dict.functions.keys()
+ ids.sort()
+ for id in uniq(ids):
+ output.write(" <exports symbol='%s' type='function'/>\n" % (id))
+ output.write(" </file>\n")
+
+ def serialize_xrefs_files(self, output):
+ headers = self.headers.keys()
+ headers.sort()
+ for file in headers:
+ module = self.modulename_file(file)
+ output.write(" <file name='%s'>\n" % (module))
+ dict = self.headers[file]
+ ids = uniq(dict.functions.keys() + dict.variables.keys() + \
+ dict.macros.keys() + dict.typedefs.keys() + \
+ dict.structs.keys() + dict.enums.keys())
+ ids.sort()
+ for id in ids:
+ output.write(" <ref name='%s'/>\n" % (id))
+ output.write(" </file>\n")
+ pass
+
+ def serialize_xrefs_functions(self, output):
+ funcs = {}
+ for name in self.idx.functions.keys():
+ id = self.idx.functions[name]
+ try:
+ (ret, params, desc) = id.info
+ for param in params:
+ if param[0] == 'void':
+ continue
+ if funcs.has_key(param[0]):
+ funcs[param[0]].append(name)
+ else:
+ funcs[param[0]] = [name]
+ except:
+ pass
+ typ = funcs.keys()
+ typ.sort()
+ for type in typ:
+ if type == '' or type == 'void' or type == "int" or \
+ type == "char *" or type == "const char *" :
+ continue
+ output.write(" <type name='%s'>\n" % (type))
+ ids = funcs[type]
+ ids.sort()
+ pid = '' # not sure why we have dups, but get rid of them!
+ for id in ids:
+ if id != pid:
+ output.write(" <ref name='%s'/>\n" % (id))
+ pid = id
+ output.write(" </type>\n")
+
+ def serialize_xrefs_constructors(self, output):
+ funcs = {}
+ for name in self.idx.functions.keys():
+ id = self.idx.functions[name]
+ try:
+ (ret, params, desc) = id.info
+ if ret[0] == "void":
+ continue
+ if funcs.has_key(ret[0]):
+ funcs[ret[0]].append(name)
+ else:
+ funcs[ret[0]] = [name]
+ except:
+ pass
+ typ = funcs.keys()
+ typ.sort()
+ for type in typ:
+ if type == '' or type == 'void' or type == "int" or \
+ type == "char *" or type == "const char *" :
+ continue
+ output.write(" <type name='%s'>\n" % (type))
+ ids = funcs[type]
+ ids.sort()
+ for id in ids:
+ output.write(" <ref name='%s'/>\n" % (id))
+ output.write(" </type>\n")
+
+ def serialize_xrefs_alpha(self, output):
+ letter = None
+ ids = self.idx.identifiers.keys()
+ ids.sort()
+ for id in ids:
+ if id[0] != letter:
+ if letter != None:
+ output.write(" </letter>\n")
+ letter = id[0]
+ output.write(" <letter name='%s'>\n" % (letter))
+ output.write(" <ref name='%s'/>\n" % (id))
+ if letter != None:
+ output.write(" </letter>\n")
+
+ def serialize_xrefs_references(self, output):
+ typ = self.idx.identifiers.keys()
+ typ.sort()
+ for id in typ:
+ idf = self.idx.identifiers[id]
+ module = idf.module
+ output.write(" <reference name='%s' href='%s'/>\n" % (id,
+ 'html/' + self.basename + '-' +
+ self.modulename_file(module) + '.html#' +
+ id))
+
+ def serialize_xrefs_index(self, output):
+ index = self.xref
+ typ = index.keys()
+ typ.sort()
+ letter = None
+ count = 0
+ chunk = 0
+ chunks = []
+ for id in typ:
+ if len(index[id]) > 30:
+ continue
+ if id[0] != letter:
+ if letter == None or count > 200:
+ if letter != None:
+ output.write(" </letter>\n")
+ output.write(" </chunk>\n")
+ count = 0
+ chunks.append(["chunk%s" % (chunk -1), first_letter, letter])
+ output.write(" <chunk name='chunk%s'>\n" % (chunk))
+ first_letter = id[0]
+ chunk = chunk + 1
+ elif letter != None:
+ output.write(" </letter>\n")
+ letter = id[0]
+ output.write(" <letter name='%s'>\n" % (letter))
+ output.write(" <word name='%s'>\n" % (id))
+ tokens = index[id];
+ tokens.sort()
+ tok = None
+ for token in tokens:
+ if tok == token:
+ continue
+ tok = token
+ output.write(" <ref name='%s'/>\n" % (token))
+ count = count + 1
+ output.write(" </word>\n")
+ if letter != None:
+ output.write(" </letter>\n")
+ output.write(" </chunk>\n")
+ if count != 0:
+ chunks.append(["chunk%s" % (chunk -1), first_letter, letter])
+ output.write(" <chunks>\n")
+ for ch in chunks:
+ output.write(" <chunk name='%s' start='%s' end='%s'/>\n" % (
+ ch[0], ch[1], ch[2]))
+ output.write(" </chunks>\n")
+
+ def serialize_xrefs(self, output):
+ output.write(" <references>\n")
+ self.serialize_xrefs_references(output)
+ output.write(" </references>\n")
+ output.write(" <alpha>\n")
+ self.serialize_xrefs_alpha(output)
+ output.write(" </alpha>\n")
+ output.write(" <constructors>\n")
+ self.serialize_xrefs_constructors(output)
+ output.write(" </constructors>\n")
+ output.write(" <functions>\n")
+ self.serialize_xrefs_functions(output)
+ output.write(" </functions>\n")
+ output.write(" <files>\n")
+ self.serialize_xrefs_files(output)
+ output.write(" </files>\n")
+ output.write(" <index>\n")
+ self.serialize_xrefs_index(output)
+ output.write(" </index>\n")
+
+ def serialize(self):
+ filename = "%s-api.xml" % self.name
+ print "Saving XML description %s" % (filename)
+ output = open(filename, "w")
+ output.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n')
+ output.write("<api name='%s'>\n" % self.name)
+ output.write(" <files>\n")
+ headers = self.headers.keys()
+ headers.sort()
+ for file in headers:
+ self.serialize_exports(output, file)
+ output.write(" </files>\n")
+ output.write(" <symbols>\n")
+ macros = self.idx.macros.keys()
+ macros.sort()
+ for macro in macros:
+ self.serialize_macro(output, macro)
+ enums = self.idx.enums.keys()
+ enums.sort()
+ for enum in enums:
+ self.serialize_enum(output, enum)
+ typedefs = self.idx.typedefs.keys()
+ typedefs.sort()
+ for typedef in typedefs:
+ self.serialize_typedef(output, typedef)
+ variables = self.idx.variables.keys()
+ variables.sort()
+ for variable in variables:
+ self.serialize_variable(output, variable)
+ functions = self.idx.functions.keys()
+ functions.sort()
+ for function in functions:
+ self.serialize_function(output, function)
+ output.write(" </symbols>\n")
+ output.write("</api>\n")
+ output.close()
+
+ filename = "%s-refs.xml" % self.name
+ print "Saving XML Cross References %s" % (filename)
+ output = open(filename, "w")
+ output.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n')
+ output.write("<apirefs name='%s'>\n" % self.name)
+ self.serialize_xrefs(output)
+ output.write("</apirefs>\n")
+ output.close()
+
+
+def rebuild():
+ builder = None
+ if glob.glob("parser.c") != [] :
+ print "Rebuilding API description for libxml2"
+ builder = docBuilder("libxml2", [".", "."],
+ ["xmlwin32version.h", "tst.c"])
+ elif glob.glob("../parser.c") != [] :
+ print "Rebuilding API description for libxml2"
+ builder = docBuilder("libxml2", ["..", "../include/libxml"],
+ ["xmlwin32version.h", "tst.c"])
+ elif glob.glob("../libxslt/transform.c") != [] :
+ print "Rebuilding API description for libxslt"
+ builder = docBuilder("libxslt", ["../libxslt"],
+ ["win32config.h", "libxslt.h", "tst.c"])
+ else:
+ print "rebuild() failed, unable to guess the module"
+ return None
+ builder.scan()
+ builder.analyze()
+ builder.serialize()
+ if glob.glob("../libexslt/exslt.c") != [] :
+ extra = docBuilder("libexslt", ["../libexslt"], ["libexslt.h"])
+ extra.scan()
+ extra.analyze()
+ extra.serialize()
+ return builder
+
+#
+# for debugging the parser
+#
+def parse(filename):
+ parser = CParser(filename)
+ idx = parser.parse()
+ return idx
+
+if __name__ == "__main__":
+ rebuild()
diff --git a/doc/architecture.html b/doc/architecture.html
new file mode 100644
index 0000000..8a9c897
--- /dev/null
+++ b/doc/architecture.html
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>libxml2 architecture</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>libxml2 architecture</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Libxml2 is made of multiple components; some of them are optional, and
+most of the block interfaces are public. The main components are:</p><ul><li>an Input/Output layer</li>
+ <li>FTP and HTTP client layers (optional)</li>
+ <li>an Internationalization layer managing the encodings support</li>
+ <li>a URI module</li>
+ <li>the XML parser and its basic SAX interface</li>
+ <li>an HTML parser using the same SAX interface (optional)</li>
+ <li>a SAX tree module to build an in-memory DOM representation</li>
+ <li>a tree module to manipulate the DOM representation</li>
+ <li>a validation module using the DOM representation (optional)</li>
+ <li>an XPath module for global lookup in a DOM representation
+ (optional)</li>
+ <li>a debug module (optional)</li>
+</ul><p>Graphically this gives the following:</p><p><img src="libxml.gif" alt="a graphical view of the various" /></p><p></p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/bugs.html b/doc/bugs.html
new file mode 100644
index 0000000..270912b
--- /dev/null
+++ b/doc/bugs.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Reporting bugs and getting help</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Reporting bugs and getting help</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>Well, bugs or missing features are always possible, and I will make a
+point of fixing them in a timely fashion. The best way to report a bug is to
+use the <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Gnome
+bug tracking database</a> (make sure to use the "libxml2" module name). I
+look at reports there regularly and it's good to have a reminder when a bug
+is still open. Be sure to specify that the bug is for the package libxml2.</p><p>For small problems you can try to get help on IRC, the #xml channel on
+irc.gnome.org (port 6667) usually have a few person subscribed which may help
+(but there is no garantee and if a real issue is raised it should go on the
+mailing-list for archival).</p><p>There is also a mailing-list <a href="mailto:xml@gnome.org">xml@gnome.org</a> for libxml, with an <a href="http://mail.gnome.org/archives/xml/">on-line archive</a> (<a href="http://xmlsoft.org/messages">old</a>). To subscribe to this list,
+please visit the <a href="http://mail.gnome.org/mailman/listinfo/xml">associated Web</a> page and
+follow the instructions. <strong>Do not send code, I won't debug it</strong>
+(but patches are really appreciated!).</p><p>Check the following <strong><span style="color: #FF0000">before
+posting</span></strong>:</p><ul><li>Read the <a href="FAQ.html">FAQ</a> and <a href="search.php">use the
+ search engine</a> to get information related to your problem.</li>
+ <li>Make sure you are <a href="ftp://xmlsoft.org/">using a recent
+ version</a>, and that the problem still shows up in a recent version.</li>
+ <li>Check the <a href="http://mail.gnome.org/archives/xml/">list
+ archives</a> to see if the problem was reported already. In this case
+ there is probably a fix available, similarly check the <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">registered
+ open bugs</a>.</li>
+ <li>Make sure you can reproduce the bug with xmllint or one of the test
+ programs found in source in the distribution.</li>
+ <li>Please send the command showing the error as well as the input (as an
+ attachment)</li>
+</ul><p>Then send the bug with associated information to reproduce it to the <a href="mailto:xml@gnome.org">xml@gnome.org</a> list; if it's really libxml
+related I will approve it. Please do not send mail to me directly, it makes
+things really hard to track and in some cases I am not the best person to
+answer a given question, ask on the list.</p><p>To <span style="color: #E50000">be really clear about support</span>:</p><ul><li>Support or help <span style="color: #E50000">requests MUST be sent to
+ the list or on bugzilla</span> in case of problems, so that the Question
+ and Answers can be shared publicly. Failing to do so carries the implicit
+ message "I want free support but I don't want to share the benefits with
+ others" and is not welcome. I will automatically Carbon-Copy the
+ xml@gnome.org mailing list for any technical reply made about libxml2 or
+ libxslt.</li>
+ <li>There is <span style="color: #E50000">no garantee of support</span>, if
+ your question remains unanswered after a week, repost it, making sure you
+ gave all the detail needed and the information requested.</li>
+ <li>Failing to provide information as requested or double checking first
+ for prior feedback also carries the implicit message "the time of the
+ library maintainers is less valuable than my time" and might not be
+ welcome.</li>
+</ul><p>Of course, bugs reported with a suggested patch for fixing them will
+probably be processed faster than those without.</p><p>If you're looking for help, a quick look at <a href="http://mail.gnome.org/archives/xml/">the list archive</a> may actually
+provide the answer. I usually send source samples when answering libxml2
+usage questions. The <a href="http://xmlsoft.org/html/book1.html">auto-generated documentation</a> is
+not as polished as I would like (i need to learn more about DocBook), but
+it's a good starting point.</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/catalog.gif b/doc/catalog.gif
new file mode 100644
index 0000000..f2e2bd3
--- /dev/null
+++ b/doc/catalog.gif
Binary files differ
diff --git a/doc/catalog.html b/doc/catalog.html
new file mode 100644
index 0000000..3044446
--- /dev/null
+++ b/doc/catalog.html
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Catalog support</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Catalog support</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol><li><a href="General2">General overview</a></li>
+ <li><a href="#definition">The definition</a></li>
+ <li><a href="#Simple">Using catalogs</a></li>
+ <li><a href="#Some">Some examples</a></li>
+ <li><a href="#reference">How to tune catalog usage</a></li>
+ <li><a href="#validate">How to debug catalog processing</a></li>
+ <li><a href="#Declaring">How to create and maintain catalogs</a></li>
+ <li><a href="#implemento">The implementor corner quick review of the
+ API</a></li>
+ <li><a href="#Other">Other resources</a></li>
+</ol><h3><a name="General2" id="General2">General overview</a></h3><p>What is a catalog? Basically it's a lookup mechanism used when an entity
+(a file or a remote resource) references another entity. The catalog lookup
+is inserted between the moment the reference is recognized by the software
+(XML parser, stylesheet processing, or even images referenced for inclusion
+in a rendering) and the time where loading that resource is actually
+started.</p><p>It is basically used for 3 things:</p><ul><li>mapping from "logical" names, the public identifiers and a more
+ concrete name usable for download (and URI). For example it can associate
+ the logical name
+ <p>"-//OASIS//DTD DocBook XML V4.1.2//EN"</p>
+ <p>of the DocBook 4.1.2 XML DTD with the actual URL where it can be
+ downloaded</p>
+ <p>http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd</p>
+ </li>
+ <li>remapping from a given URL to another one, like an HTTP indirection
+ saying that
+ <p>"http://www.oasis-open.org/committes/tr.xsl"</p>
+ <p>should really be looked at</p>
+ <p>"http://www.oasis-open.org/committes/entity/stylesheets/base/tr.xsl"</p>
+ </li>
+ <li>providing a local cache mechanism allowing to load the entities
+ associated to public identifiers or remote resources, this is a really
+ important feature for any significant deployment of XML or SGML since it
+ allows to avoid the aleas and delays associated to fetching remote
+ resources.</li>
+</ul><h3><a name="definition" id="definition">The definitions</a></h3><p>Libxml, as of 2.4.3 implements 2 kind of catalogs:</p><ul><li>the older SGML catalogs, the official spec is SGML Open Technical
+ Resolution TR9401:1997, but is better understood by reading <a href="http://www.jclark.com/sp/catalog.htm">the SP Catalog page</a> from
+ James Clark. This is relatively old and not the preferred mode of
+ operation of libxml.</li>
+ <li><a href="http://www.oasis-open.org/committees/entity/spec.html">XML
+ Catalogs</a> is far more flexible, more recent, uses an XML syntax and
+ should scale quite better. This is the default option of libxml.</li>
+</ul><p></p><h3><a name="Simple" id="Simple">Using catalog</a></h3><p>In a normal environment libxml2 will by default check the presence of a
+catalog in /etc/xml/catalog, and assuming it has been correctly populated,
+the processing is completely transparent to the document user. To take a
+concrete example, suppose you are authoring a DocBook document, this one
+starts with the following DOCTYPE definition:</p><pre>&lt;?xml version='1.0'?&gt;
+&lt;!DOCTYPE book PUBLIC "-//Norman Walsh//DTD DocBk XML V3.1.4//EN"
+ "http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd"&gt;</pre><p>When validating the document with libxml, the catalog will be
+automatically consulted to lookup the public identifier "-//Norman Walsh//DTD
+DocBk XML V3.1.4//EN" and the system identifier
+"http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd", and if these entities have
+been installed on your system and the catalogs actually point to them, libxml
+will fetch them from the local disk.</p><p style="font-size: 10pt"><strong>Note</strong>: Really don't use this
+DOCTYPE example it's a really old version, but is fine as an example.</p><p>Libxml2 will check the catalog each time that it is requested to load an
+entity, this includes DTD, external parsed entities, stylesheets, etc ... If
+your system is correctly configured all the authoring phase and processing
+should use only local files, even if your document stays portable because it
+uses the canonical public and system ID, referencing the remote document.</p><h3><a name="Some" id="Some">Some examples:</a></h3><p>Here is a couple of fragments from XML Catalogs used in libxml2 early
+regression tests in <code>test/catalogs</code> :</p><pre>&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE catalog PUBLIC
+ "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
+&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"&gt;
+ &lt;public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
+ uri="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/&gt;
+...</pre><p>This is the beginning of a catalog for DocBook 4.1.2, XML Catalogs are
+written in XML, there is a specific namespace for catalog elements
+"urn:oasis:names:tc:entity:xmlns:xml:catalog". The first entry in this
+catalog is a <code>public</code> mapping it allows to associate a Public
+Identifier with an URI.</p><pre>...
+ &lt;rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/"
+ rewritePrefix="file:///usr/share/xml/docbook/"/&gt;
+...</pre><p>A <code>rewriteSystem</code> is a very powerful instruction, it says that
+any URI starting with a given prefix should be looked at another URI
+constructed by replacing the prefix with an new one. In effect this acts like
+a cache system for a full area of the Web. In practice it is extremely useful
+with a file prefix if you have installed a copy of those resources on your
+local system.</p><pre>...
+&lt;delegatePublic publicIdStartString="-//OASIS//DTD XML Catalog //"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+&lt;delegatePublic publicIdStartString="-//OASIS//ENTITIES DocBook XML"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+&lt;delegatePublic publicIdStartString="-//OASIS//DTD DocBook XML"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+&lt;delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+&lt;delegateURI uriStartString="http://www.oasis-open.org/docbook/"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+...</pre><p>Delegation is the core features which allows to build a tree of catalogs,
+easier to maintain than a single catalog, based on Public Identifier, System
+Identifier or URI prefixes it instructs the catalog software to look up
+entries in another resource. This feature allow to build hierarchies of
+catalogs, the set of entries presented should be sufficient to redirect the
+resolution of all DocBook references to the specific catalog in
+<code>/usr/share/xml/docbook.xml</code> this one in turn could delegate all
+references for DocBook 4.2.1 to a specific catalog installed at the same time
+as the DocBook resources on the local machine.</p><h3><a name="reference" id="reference">How to tune catalog usage:</a></h3><p>The user can change the default catalog behaviour by redirecting queries
+to its own set of catalogs, this can be done by setting the
+<code>XML_CATALOG_FILES</code> environment variable to a list of catalogs, an
+empty one should deactivate loading the default <code>/etc/xml/catalog</code>
+default catalog</p><h3><a name="validate" id="validate">How to debug catalog processing:</a></h3><p>Setting up the <code>XML_DEBUG_CATALOG</code> environment variable will
+make libxml2 output debugging informations for each catalog operations, for
+example:</p><pre>orchis:~/XML -&gt; xmllint --memory --noout test/ent2
+warning: failed to load external entity "title.xml"
+orchis:~/XML -&gt; export XML_DEBUG_CATALOG=
+orchis:~/XML -&gt; xmllint --memory --noout test/ent2
+Failed to parse catalog /etc/xml/catalog
+Failed to parse catalog /etc/xml/catalog
+warning: failed to load external entity "title.xml"
+Catalogs cleanup
+orchis:~/XML -&gt; </pre><p>The test/ent2 references an entity, running the parser from memory makes
+the base URI unavailable and the the "title.xml" entity cannot be loaded.
+Setting up the debug environment variable allows to detect that an attempt is
+made to load the <code>/etc/xml/catalog</code> but since it's not present the
+resolution fails.</p><p>But the most advanced way to debug XML catalog processing is to use the
+<strong>xmlcatalog</strong> command shipped with libxml2, it allows to load
+catalogs and make resolution queries to see what is going on. This is also
+used for the regression tests:</p><pre>orchis:~/XML -&gt; ./xmlcatalog test/catalogs/docbook.xml \
+ "-//OASIS//DTD DocBook XML V4.1.2//EN"
+http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+orchis:~/XML -&gt; </pre><p>For debugging what is going on, adding one -v flags increase the verbosity
+level to indicate the processing done (adding a second flag also indicate
+what elements are recognized at parsing):</p><pre>orchis:~/XML -&gt; ./xmlcatalog -v test/catalogs/docbook.xml \
+ "-//OASIS//DTD DocBook XML V4.1.2//EN"
+Parsing catalog test/catalogs/docbook.xml's content
+Found public match -//OASIS//DTD DocBook XML V4.1.2//EN
+http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+Catalogs cleanup
+orchis:~/XML -&gt; </pre><p>A shell interface is also available to debug and process multiple queries
+(and for regression tests):</p><pre>orchis:~/XML -&gt; ./xmlcatalog -shell test/catalogs/docbook.xml \
+ "-//OASIS//DTD DocBook XML V4.1.2//EN"
+&gt; help
+Commands available:
+public PublicID: make a PUBLIC identifier lookup
+system SystemID: make a SYSTEM identifier lookup
+resolve PublicID SystemID: do a full resolver lookup
+add 'type' 'orig' 'replace' : add an entry
+del 'values' : remove values
+dump: print the current catalog state
+debug: increase the verbosity level
+quiet: decrease the verbosity level
+exit: quit the shell
+&gt; public "-//OASIS//DTD DocBook XML V4.1.2//EN"
+http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+&gt; quit
+orchis:~/XML -&gt; </pre><p>This should be sufficient for most debugging purpose, this was actually
+used heavily to debug the XML Catalog implementation itself.</p><h3><a name="Declaring" id="Declaring">How to create and maintain</a> catalogs:</h3><p>Basically XML Catalogs are XML files, you can either use XML tools to
+manage them or use <strong>xmlcatalog</strong> for this. The basic step is
+to create a catalog the -create option provide this facility:</p><pre>orchis:~/XML -&gt; ./xmlcatalog --create tst.xml
+&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
+&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"/&gt;
+orchis:~/XML -&gt; </pre><p>By default xmlcatalog does not overwrite the original catalog and save the
+result on the standard output, this can be overridden using the -noout
+option. The <code>-add</code> command allows to add entries in the
+catalog:</p><pre>orchis:~/XML -&gt; ./xmlcatalog --noout --create --add "public" \
+ "-//OASIS//DTD DocBook XML V4.1.2//EN" \
+ http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd tst.xml
+orchis:~/XML -&gt; cat tst.xml
+&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" \
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
+&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"&gt;
+&lt;public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
+ uri="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/&gt;
+&lt;/catalog&gt;
+orchis:~/XML -&gt; </pre><p>The <code>-add</code> option will always take 3 parameters even if some of
+the XML Catalog constructs (like nextCatalog) will have only a single
+argument, just pass a third empty string, it will be ignored.</p><p>Similarly the <code>-del</code> option remove matching entries from the
+catalog:</p><pre>orchis:~/XML -&gt; ./xmlcatalog --del \
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" tst.xml
+&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
+&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"/&gt;
+orchis:~/XML -&gt; </pre><p>The catalog is now empty. Note that the matching of <code>-del</code> is
+exact and would have worked in a similar fashion with the Public ID
+string.</p><p>This is rudimentary but should be sufficient to manage a not too complex
+catalog tree of resources.</p><h3><a name="implemento" id="implemento">The implementor corner quick review of the
+API:</a></h3><p>First, and like for every other module of libxml, there is an
+automatically generated <a href="html/libxml-catalog.html">API page for
+catalog support</a>.</p><p>The header for the catalog interfaces should be included as:</p><pre>#include &lt;libxml/catalog.h&gt;</pre><p>The API is voluntarily kept very simple. First it is not obvious that
+applications really need access to it since it is the default behaviour of
+libxml2 (Note: it is possible to completely override libxml2 default catalog
+by using <a href="html/libxml-parser.html">xmlSetExternalEntityLoader</a> to
+plug an application specific resolver).</p><p>Basically libxml2 support 2 catalog lists:</p><ul><li>the default one, global shared by all the application</li>
+ <li>a per-document catalog, this one is built if the document uses the
+ <code>oasis-xml-catalog</code> PIs to specify its own catalog list, it is
+ associated to the parser context and destroyed when the parsing context
+ is destroyed.</li>
+</ul><p>the document one will be used first if it exists.</p><h4>Initialization routines:</h4><p>xmlInitializeCatalog(), xmlLoadCatalog() and xmlLoadCatalogs() should be
+used at startup to initialize the catalog, if the catalog should be
+initialized with specific values xmlLoadCatalog() or xmlLoadCatalogs()
+should be called before xmlInitializeCatalog() which would otherwise do a
+default initialization first.</p><p>The xmlCatalogAddLocal() call is used by the parser to grow the document
+own catalog list if needed.</p><h4>Preferences setup:</h4><p>The XML Catalog spec requires the possibility to select default
+preferences between public and system delegation,
+xmlCatalogSetDefaultPrefer() allows this, xmlCatalogSetDefaults() and
+xmlCatalogGetDefaults() allow to control if XML Catalogs resolution should
+be forbidden, allowed for global catalog, for document catalog or both, the
+default is to allow both.</p><p>And of course xmlCatalogSetDebug() allows to generate debug messages
+(through the xmlGenericError() mechanism).</p><h4>Querying routines:</h4><p>xmlCatalogResolve(), xmlCatalogResolveSystem(), xmlCatalogResolvePublic()
+and xmlCatalogResolveURI() are relatively explicit if you read the XML
+Catalog specification they correspond to section 7 algorithms, they should
+also work if you have loaded an SGML catalog with a simplified semantic.</p><p>xmlCatalogLocalResolve() and xmlCatalogLocalResolveURI() are the same but
+operate on the document catalog list</p><h4>Cleanup and Miscellaneous:</h4><p>xmlCatalogCleanup() free-up the global catalog, xmlCatalogFreeLocal() is
+the per-document equivalent.</p><p>xmlCatalogAdd() and xmlCatalogRemove() are used to dynamically modify the
+first catalog in the global list, and xmlCatalogDump() allows to dump a
+catalog state, those routines are primarily designed for xmlcatalog, I'm not
+sure that exposing more complex interfaces (like navigation ones) would be
+really useful.</p><p>The xmlParseCatalogFile() is a function used to load XML Catalog files,
+it's similar as xmlParseFile() except it bypass all catalog lookups, it's
+provided because this functionality may be useful for client tools.</p><h4>threaded environments:</h4><p>Since the catalog tree is built progressively, some care has been taken to
+try to avoid troubles in multithreaded environments. The code is now thread
+safe assuming that the libxml2 library has been compiled with threads
+support.</p><p></p><h3><a name="Other" id="Other">Other resources</a></h3><p>The XML Catalog specification is relatively recent so there isn't much
+literature to point at:</p><ul><li>You can find a good rant from Norm Walsh about <a href="http://www.arbortext.com/Think_Tank/XML_Resources/Issue_Three/issue_three.html">the
+ need for catalogs</a>, it provides a lot of context informations even if
+ I don't agree with everything presented. Norm also wrote a more recent
+ article <a href="http://wwws.sun.com/software/xml/developers/resolver/article/">XML
+ entities and URI resolvers</a> describing them.</li>
+ <li>An <a href="http://home.ccil.org/~cowan/XML/XCatalog.html">old XML
+ catalog proposal</a> from John Cowan</li>
+ <li>The <a href="http://www.rddl.org/">Resource Directory Description
+ Language</a> (RDDL) another catalog system but more oriented toward
+ providing metadata for XML namespaces.</li>
+ <li>the page from the OASIS Technical <a href="http://www.oasis-open.org/committees/entity/">Committee on Entity
+ Resolution</a> who maintains XML Catalog, you will find pointers to the
+ specification update, some background and pointers to others tools
+ providing XML Catalog support</li>
+ <li>There is a <a href="buildDocBookCatalog">shell script</a> to generate
+ XML Catalogs for DocBook 4.1.2 . If it can write to the /etc/xml/
+ directory, it will set-up /etc/xml/catalog and /etc/xml/docbook based on
+ the resources found on the system. Otherwise it will just create
+ ~/xmlcatalog and ~/dbkxmlcatalog and doing:
+ <p><code>export XML_CATALOG_FILES=$HOME/xmlcatalog</code></p>
+ <p>should allow to process DocBook documentations without requiring
+ network accesses for the DTD or stylesheets</p>
+ </li>
+ <li>I have uploaded <a href="ftp://xmlsoft.org/test/dbk412catalog.tar.gz">a
+ small tarball</a> containing XML Catalogs for DocBook 4.1.2 which seems
+ to work fine for me too</li>
+ <li>The <a href="http://www.xmlsoft.org/xmlcatalog_man.html">xmlcatalog
+ manual page</a></li>
+</ul><p>If you have suggestions for corrections or additions, simply contact
+me:</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/contribs.html b/doc/contribs.html
new file mode 100644
index 0000000..844d29e
--- /dev/null
+++ b/doc/contribs.html
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Contributions</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Contributions</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><ul><li>Bjorn Reese, William Brack and Thomas Broyer have provided a number of
+ patches, Gary Pennington worked on the validation API, threading support
+ and Solaris port.</li>
+ <li>John Fleck helps maintaining the documentation and man pages.</li>
+ <li><a href="mailto:igor@zlatkovic.com">Igor Zlatkovic</a> is now the
+ maintainer of the Windows port, <a href="http://www.zlatkovic.com/projects/libxml/index.html">he provides
+ binaries</a></li>
+ <li><a href="mailto:Gary.Pennington@sun.com">Gary Pennington</a> provides
+ <a href="http://garypennington.net/libxml2/">Solaris binaries</a></li>
+ <li><a href="http://mail.gnome.org/archives/xml/2001-March/msg00014.html">Matt
+ Sergeant</a> developed <a href="http://axkit.org/download/">XML::LibXSLT</a>, a Perl wrapper for
+ libxml2/libxslt as part of the <a href="http://axkit.com/">AxKit XML
+ application server</a></li>
+ <li><a href="mailto:fnatter@gmx.net">Felix Natter</a> and <a href="mailto:geertk@ai.rug.nl">Geert Kloosterman</a> provide <a href="libxml-doc.el">an emacs module</a> to lookup libxml(2) functions
+ documentation</li>
+ <li><a href="mailto:sherwin@nlm.nih.gov">Ziying Sherwin</a> provided <a href="http://xmlsoft.org/messages/0488.html">man pages</a></li>
+ <li>there is a module for <a href="http://acs-misc.sourceforge.net/nsxml.html">libxml/libxslt support
+ in OpenNSD/AOLServer</a></li>
+ <li><a href="mailto:dkuhlman@cutter.rexx.com">Dave Kuhlman</a> provided the
+ first version of libxml/libxslt <a href="http://www.rexx.com/~dkuhlman">wrappers for Python</a></li>
+ <li>Petr Kozelka provides <a href="http://sourceforge.net/projects/libxml2-pas">Pascal units to glue
+ libxml2</a> with Kylix and Delphi and other Pascal compilers</li>
+ <li><a href="mailto:aleksey@aleksey.com">Aleksey Sanin</a> implemented the
+ <a href="http://www.w3.org/Signature/">XML Canonicalization and XML
+ Digital Signature</a> <a href="http://www.aleksey.com/xmlsec/">implementations for libxml2</a></li>
+ <li><a href="mailto:Steve.Ball@zveno.com">Steve Ball</a>, <a href="http://www.zveno.com/">Zveno</a> and contributors maintain <a href="http://tclxml.sourceforge.net/">tcl bindings for libxml2 and
+ libxslt</a>, as well as <a href="http://tclxml.sf.net/tkxmllint.html">tkxmllint</a> a GUI for
+ xmllint and <a href="http://tclxml.sf.net/tkxsltproc.html">tkxsltproc</a>
+ a GUI for xsltproc.</li>
+</ul><p></p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/docs.html b/doc/docs.html
new file mode 100644
index 0000000..f486c13
--- /dev/null
+++ b/doc/docs.html
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Developer Menu</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Developer Menu</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>There are several on-line resources related to using libxml:</p><ol><li>Use the <a href="search.php">search engine</a> to look up
+ information.</li>
+ <li>Check the <a href="FAQ.html">FAQ.</a></li>
+ <li>Check the <a href="http://xmlsoft.org/html/libxml-lib.html">extensive
+ documentation</a> automatically extracted from code comments.</li>
+ <li>Look at the documentation about <a href="encoding.html">libxml
+ internationalization support</a>.</li>
+ <li>This page provides a global overview and <a href="example.html">some
+ examples</a> on how to use libxml.</li>
+ <li><a href="examples/index.html">Code examples</a></li>
+ <li>John Fleck's libxml2 tutorial: <a href="tutorial/index.html">html</a>
+ or <a href="tutorial/xmltutorial.pdf">pdf</a>.</li>
+ <li>If you need to parse large files, check the <a href="xmlreader.html">xmlReader</a> API tutorial</li>
+ <li><a href="mailto:james@daa.com.au">James Henstridge</a> wrote <a href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">some nice
+ documentation</a> explaining how to use the libxml SAX interface.</li>
+ <li>George Lebl wrote <a href="http://www-106.ibm.com/developerworks/library/l-gnome3/">an article
+ for IBM developerWorks</a> about using libxml.</li>
+ <li>Check <a href="http://cvs.gnome.org/lxr/source/gnome-xml/TODO">the TODO
+ file</a>.</li>
+ <li>Read the <a href="upgrade.html">1.x to 2.x upgrade path</a>
+ description. If you are starting a new project using libxml you should
+ really use the 2.x version.</li>
+ <li>And don't forget to look at the <a href="http://mail.gnome.org/archives/xml/">mailing-list archive</a>.</li>
+</ol><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/downloads.html b/doc/downloads.html
new file mode 100644
index 0000000..dc418c1
--- /dev/null
+++ b/doc/downloads.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Downloads</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Downloads</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="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>The latest versions of libxml2 can be found on <a href="ftp://xmlsoft.org/">xmlsoft.org</a> (<a href="ftp://speakeasy.rpmfind.net/pub/libxml/">Seattle</a>, <a href="ftp://fr.rpmfind.net/pub/libxml/">France</a>) or on the <a href="ftp://ftp.gnome.org/pub/GNOME/MIRRORS.html">Gnome FTP server</a> either
+as a <a href="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/">source
+archive</a><!-- commenting this out because they seem to have disappeared or <a
+href="ftp://ftp.gnome.org/pub/GNOME/stable/redhat/i386/libxml/">RPM
+packages</a> -->
+ , Antonin Sprinzl also provide <a href="ftp://gd.tuwien.ac.at/pub/libxml/">a
+mirror in Austria</a>. (NOTE that you need both the <a href="http://rpmfind.net/linux/RPM/libxml2.html">libxml(2)</a> and <a href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml(2)-devel</a>
+packages installed to compile applications using libxml.)</p><p>Binary ports:</p><ul><li>Red Hat RPMs for i386 are available directly on <a href="ftp://xmlsoft.org/">xmlsoft.org</a>, the source RPM will compile on
+ any architecture supported by Red Hat.</li>
+ <li><p><a href="mailto:igor@zlatkovic.com">Igor Zlatkovic</a></p>
+ is now the maintainer of the Windows port, <a href="http://www.zlatkovic.com/projects/libxml/index.html">he provides
+ binaries</a>.</li>
+ <li><a href="mailto:Gary.Pennington@sun.com">Gary Pennington</a> provides
+ <a href="http://garypennington.net/libxml2/">Solaris binaries</a>.</li>
+ <li><a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides <a href="http://www.zveno.com/open_source/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>
+</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 gnome-xml <a href="ftp://xmlsoft.org/cvs-snapshot.tar.gz">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
+platform, get in touch with me to upload the package, wrappers for various
+languages have been provided, and can be found in the <a href="contribs.html">contrib section</a></p><p>Libxml2 is also available from CVS:</p><ul><li><p>The <a href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&amp;dir=gnome-xml">Gnome
+ CVS base</a>. Check the <a href="http://developer.gnome.org/tools/cvs.html">Gnome CVS Tools</a>
+ page; the CVS module is <b>gnome-xml</b>.</p>
+ </li>
+ <li>The <strong>libxslt</strong> module is also present there</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/encoding.html b/doc/encoding.html
new file mode 100644
index 0000000..3b7e5a3
--- /dev/null
+++ b/doc/encoding.html
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Encodings support</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Encodings support</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol><li><a href="encoding.html#What">What does internationalization support
+ mean ?</a></li>
+ <li><a href="encoding.html#internal">The internal encoding, how and
+ why</a></li>
+ <li><a href="encoding.html#implemente">How is it implemented ?</a></li>
+ <li><a href="encoding.html#Default">Default supported encodings</a></li>
+ <li><a href="encoding.html#extend">How to extend the existing
+ support</a></li>
+</ol><h3><a name="What" id="What">What does internationalization support mean ?</a></h3><p>If you are not really familiar with Internationalization (usual shortcut
+is I18N) , Unicode, characters and glyphs, I suggest you read a <a href="http://www.tbray.org/ongoing/When/200x/2003/04/06/Unicode">presentation</a>
+by Tim Bray on Unicode and why you should care about it.</p><p>XML was designed from the start to allow the support of any character set
+by using Unicode. Any conformant XML parser has to support the UTF-8 and
+UTF-16 default encodings which can both express the full unicode ranges. UTF8
+is a variable length encoding whose greatest points are to reuse the same
+encoding for ASCII and to save space for Western encodings, but it is a bit
+more complex to handle in practice. UTF-16 use 2 bytes per character (and
+sometimes combines two pairs), it makes implementation easier, but looks a
+bit overkill for Western languages encoding. Moreover the XML specification
+allows the document to be encoded in other encodings at the condition that
+they are clearly labeled as such. For example the following is a wellformed
+XML document encoded in ISO-8859-1 and using accentuated letters that we
+French like for both markup and content:</p><pre>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
+&lt;très&gt;là&lt;/très&gt;</pre><p>Having internationalization support in libxml2 means the following:</p><ul><li>the document is properly parsed</li>
+ <li>informations about it's encoding are saved</li>
+ <li>it can be modified</li>
+ <li>it can be saved in its original encoding</li>
+ <li>it can also be saved in another encoding supported by libxml2 (for
+ example straight UTF8 or even an ASCII form)</li>
+</ul><p>Another very important point is that the whole libxml2 API, with the
+exception of a few routines to read with a specific encoding or save to a
+specific encoding, is completely agnostic about the original encoding of the
+document.</p><p>It should be noted too that the HTML parser embedded in libxml2 now obey
+the same rules too, the following document will be (as of 2.2.2) handled in
+an internationalized fashion by libxml2 too:</p><pre>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+ "http://www.w3.org/TR/REC-html40/loose.dtd"&gt;
+&lt;html lang="fr"&gt;
+&lt;head&gt;
+ &lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p&gt;W3C crée des standards pour le Web.&lt;/body&gt;
+&lt;/html&gt;</pre><h3><a name="internal" id="internal">The internal encoding, how and why</a></h3><p>One of the core decisions was to force all documents to be converted to a
+default internal encoding, and that encoding to be UTF-8, here are the
+rationales for those choices:</p><ul><li>keeping the native encoding in the internal form would force the libxml
+ users (or the code associated) to be fully aware of the encoding of the
+ original document, for examples when adding a text node to a document,
+ the content would have to be provided in the document encoding, i.e. the
+ client code would have to check it before hand, make sure it's conformant
+ to the encoding, etc ... Very hard in practice, though in some specific
+ cases this may make sense.</li>
+ <li>the second decision was which encoding. From the XML spec only UTF8 and
+ UTF16 really makes sense as being the two only encodings for which there
+ is mandatory support. UCS-4 (32 bits fixed size encoding) could be
+ considered an intelligent choice too since it's a direct Unicode mapping
+ support. I selected UTF-8 on the basis of efficiency and compatibility
+ with surrounding software:
+ <ul><li>UTF-8 while a bit more complex to convert from/to (i.e. slightly
+ more costly to import and export CPU wise) is also far more compact
+ than UTF-16 (and UCS-4) for a majority of the documents I see it used
+ for right now (RPM RDF catalogs, advogato data, various configuration
+ file formats, etc.) and the key point for today's computer
+ architecture is efficient uses of caches. If one nearly double the
+ memory requirement to store the same amount of data, this will trash
+ caches (main memory/external caches/internal caches) and my take is
+ that this harms the system far more than the CPU requirements needed
+ for the conversion to UTF-8</li>
+ <li>Most of libxml2 version 1 users were using it with straight ASCII
+ most of the time, doing the conversion with an internal encoding
+ requiring all their code to be rewritten was a serious show-stopper
+ for using UTF-16 or UCS-4.</li>
+ <li>UTF-8 is being used as the de-facto internal encoding standard for
+ related code like the <a href="http://www.pango.org/">pango</a>
+ upcoming Gnome text widget, and a lot of Unix code (yet another place
+ where Unix programmer base takes a different approach from Microsoft
+ - they are using UTF-16)</li>
+ </ul></li>
+</ul><p>What does this mean in practice for the libxml2 user:</p><ul><li>xmlChar, the libxml2 data type is a byte, those bytes must be assembled
+ as UTF-8 valid strings. The proper way to terminate an xmlChar * string
+ is simply to append 0 byte, as usual.</li>
+ <li>One just need to make sure that when using chars outside the ASCII set,
+ the values has been properly converted to UTF-8</li>
+</ul><h3><a name="implemente" id="implemente">How is it implemented ?</a></h3><p>Let's describe how all this works within libxml, basically the I18N
+(internationalization) support get triggered only during I/O operation, i.e.
+when reading a document or saving one. Let's look first at the reading
+sequence:</p><ol><li>when a document is processed, we usually don't know the encoding, a
+ simple heuristic allows to detect UTF-16 and UCS-4 from encodings where
+ the ASCII range (0-0x7F) maps with ASCII</li>
+ <li>the xml declaration if available is parsed, including the encoding
+ declaration. At that point, if the autodetected encoding is different
+ from the one declared a call to xmlSwitchEncoding() is issued.</li>
+ <li>If there is no encoding declaration, then the input has to be in either
+ UTF-8 or UTF-16, if it is not then at some point when processing the
+ input, the converter/checker of UTF-8 form will raise an encoding error.
+ You may end-up with a garbled document, or no document at all ! Example:
+ <pre>~/XML -&gt; ./xmllint err.xml
+err.xml:1: error: Input is not proper UTF-8, indicate encoding !
+&lt;très&gt;là&lt;/très&gt;
+ ^
+err.xml:1: error: Bytes: 0xE8 0x73 0x3E 0x6C
+&lt;très&gt;là&lt;/très&gt;
+ ^</pre>
+ </li>
+ <li>xmlSwitchEncoding() does an encoding name lookup, canonicalize it, and
+ then search the default registered encoding converters for that encoding.
+ If it's not within the default set and iconv() support has been compiled
+ it, it will ask iconv for such an encoder. If this fails then the parser
+ will report an error and stops processing:
+ <pre>~/XML -&gt; ./xmllint err2.xml
+err2.xml:1: error: Unsupported encoding UnsupportedEnc
+&lt;?xml version="1.0" encoding="UnsupportedEnc"?&gt;
+ ^</pre>
+ </li>
+ <li>From that point the encoder processes progressively the input (it is
+ plugged as a front-end to the I/O module) for that entity. It captures
+ and converts on-the-fly the document to be parsed to UTF-8. The parser
+ itself just does UTF-8 checking of this input and process it
+ transparently. The only difference is that the encoding information has
+ been added to the parsing context (more precisely to the input
+ corresponding to this entity).</li>
+ <li>The result (when using DOM) is an internal form completely in UTF-8
+ with just an encoding information on the document node.</li>
+</ol><p>Ok then what happens when saving the document (assuming you
+collected/built an xmlDoc DOM like structure) ? It depends on the function
+called, xmlSaveFile() will just try to save in the original encoding, while
+xmlSaveFileTo() and xmlSaveFileEnc() can optionally save to a given
+encoding:</p><ol><li>if no encoding is given, libxml2 will look for an encoding value
+ associated to the document and if it exists will try to save to that
+ encoding,
+ <p>otherwise everything is written in the internal form, i.e. UTF-8</p>
+ </li>
+ <li>so if an encoding was specified, either at the API level or on the
+ document, libxml2 will again canonicalize the encoding name, lookup for a
+ converter in the registered set or through iconv. If not found the
+ function will return an error code</li>
+ <li>the converter is placed before the I/O buffer layer, as another kind of
+ buffer, then libxml2 will simply push the UTF-8 serialization to through
+ that buffer, which will then progressively be converted and pushed onto
+ the I/O layer.</li>
+ <li>It is possible that the converter code fails on some input, for example
+ trying to push an UTF-8 encoded Chinese character through the UTF-8 to
+ ISO-8859-1 converter won't work. Since the encoders are progressive they
+ will just report the error and the number of bytes converted, at that
+ point libxml2 will decode the offending character, remove it from the
+ buffer and replace it with the associated charRef encoding &amp;#123; and
+ resume the conversion. This guarantees that any document will be saved
+ without losses (except for markup names where this is not legal, this is
+ a problem in the current version, in practice avoid using non-ascii
+ characters for tag or attribute names). A special "ascii" encoding name
+ is used to save documents to a pure ascii form can be used when
+ portability is really crucial</li>
+</ol><p>Here are a few examples based on the same test document:</p><pre>~/XML -&gt; ./xmllint isolat1
+&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
+&lt;très&gt;là&lt;/très&gt;
+~/XML -&gt; ./xmllint --encode UTF-8 isolat1
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;très&gt;là  &lt;/très&gt;
+~/XML -&gt; </pre><p>The same processing is applied (and reuse most of the code) for HTML I18N
+processing. Looking up and modifying the content encoding is a bit more
+difficult since it is located in a &lt;meta&gt; tag under the &lt;head&gt;,
+so a couple of functions htmlGetMetaEncoding() and htmlSetMetaEncoding() have
+been provided. The parser also attempts to switch encoding on the fly when
+detecting such a tag on input. Except for that the processing is the same
+(and again reuses the same code).</p><h3><a name="Default" id="Default">Default supported encodings</a></h3><p>libxml2 has a set of default converters for the following encodings
+(located in encoding.c):</p><ol><li>UTF-8 is supported by default (null handlers)</li>
+ <li>UTF-16, both little and big endian</li>
+ <li>ISO-Latin-1 (ISO-8859-1) covering most western languages</li>
+ <li>ASCII, useful mostly for saving</li>
+ <li>HTML, a specific handler for the conversion of UTF-8 to ASCII with HTML
+ predefined entities like &amp;copy; for the Copyright sign.</li>
+</ol><p>More over when compiled on an Unix platform with iconv support the full
+set of encodings supported by iconv can be instantly be used by libxml. On a
+linux machine with glibc-2.1 the list of supported encodings and aliases fill
+3 full pages, and include UCS-4, the full set of ISO-Latin encodings, and the
+various Japanese ones.</p><h4>Encoding aliases</h4><p>From 2.2.3, libxml2 has support to register encoding names aliases. The
+goal is to be able to parse document whose encoding is supported but where
+the name differs (for example from the default set of names accepted by
+iconv). The following functions allow to register and handle new aliases for
+existing encodings. Once registered libxml2 will automatically lookup the
+aliases when handling a document:</p><ul><li>int xmlAddEncodingAlias(const char *name, const char *alias);</li>
+ <li>int xmlDelEncodingAlias(const char *alias);</li>
+ <li>const char * xmlGetEncodingAlias(const char *alias);</li>
+ <li>void xmlCleanupEncodingAliases(void);</li>
+</ul><h3><a name="extend" id="extend">How to extend the existing support</a></h3><p>Well adding support for new encoding, or overriding one of the encoders
+(assuming it is buggy) should not be hard, just write input and output
+conversion routines to/from UTF-8, and register them using
+xmlNewCharEncodingHandler(name, xxxToUTF8, UTF8Toxxx), and they will be
+called automatically if the parser(s) encounter such an encoding name
+(register it uppercase, this will help). The description of the encoders,
+their arguments and expected return values are described in the encoding.h
+header.</p><p>A quick note on the topic of subverting the parser to use a different
+internal encoding than UTF-8, in some case people will absolutely want to
+keep the internal encoding different, I think it's still possible (but the
+encoding must be compliant with ASCII on the same subrange) though I didn't
+tried it. The key is to override the default conversion routines (by
+registering null encoders/decoders for your charsets), and bypass the UTF-8
+checking of the parser by setting the parser context charset
+(ctxt-&gt;charset) to something different than XML_CHAR_ENCODING_UTF8, but
+there is no guarantee that this will work. You may also have some troubles
+saving back.</p><p>Basically proper I18N support is important, this requires at least
+libxml-2.0.0, but a lot of features and corrections are really available only
+starting 2.2.</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/entities.html b/doc/entities.html
new file mode 100644
index 0000000..563def4
--- /dev/null
+++ b/doc/entities.html
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Entities or no entities</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Entities or no entities</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>Entities in principle are similar to simple C macros. An entity defines an
+abbreviation for a given string that you can reuse many times throughout the
+content of your document. Entities are especially useful when a given string
+may occur frequently within a document, or to confine the change needed to a
+document to a restricted area in the internal subset of the document (at the
+beginning). Example:</p><pre>1 &lt;?xml version="1.0"?&gt;
+2 &lt;!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+3 &lt;!ENTITY xml "Extensible Markup Language"&gt;
+4 ]&gt;
+5 &lt;EXAMPLE&gt;
+6 &amp;xml;
+7 &lt;/EXAMPLE&gt;</pre><p>Line 3 declares the xml entity. Line 6 uses the xml entity, by prefixing
+its name with '&amp;' and following it by ';' without any spaces added. There
+are 5 predefined entities in libxml2 allowing you to escape characters with
+predefined meaning in some parts of the xml document content:
+<strong>&amp;lt;</strong> for the character '&lt;', <strong>&amp;gt;</strong>
+for the character '&gt;', <strong>&amp;apos;</strong> for the character ''',
+<strong>&amp;quot;</strong> for the character '"', and
+<strong>&amp;amp;</strong> for the character '&amp;'.</p><p>One of the problems related to entities is that you may want the parser to
+substitute an entity's content so that you can see the replacement text in
+your application. Or you may prefer to keep entity references as such in the
+content to be able to save the document back without losing this usually
+precious information (if the user went through the pain of explicitly
+defining entities, he may have a a rather negative attitude if you blindly
+substitute them as saving time). The <a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault()</a>
+function allows you to check and change the behaviour, which is to not
+substitute entities by default.</p><p>Here is the DOM tree built by libxml2 for the previous document in the
+default case:</p><pre>/gnome/src/gnome-xml -&gt; ./xmllint --debug test/ent1
+DOCUMENT
+version=1.0
+ ELEMENT EXAMPLE
+ TEXT
+ content=
+ ENTITY_REF
+ INTERNAL_GENERAL_ENTITY xml
+ content=Extensible Markup Language
+ TEXT
+ content=</pre><p>And here is the result when substituting entities:</p><pre>/gnome/src/gnome-xml -&gt; ./tester --debug --noent test/ent1
+DOCUMENT
+version=1.0
+ ELEMENT EXAMPLE
+ TEXT
+ content= Extensible Markup Language</pre><p>So, entities or no entities? Basically, it depends on your use case. I
+suggest that you keep the non-substituting default behaviour and avoid using
+entities in your XML document or data if you are not willing to handle the
+entity references elements in the DOM tree.</p><p>Note that at save time libxml2 enforces the conversion of the predefined
+entities where necessary to prevent well-formedness problems, and will also
+transparently replace those with chars (i.e. it will not generate entity
+reference elements in the DOM tree or call the reference() SAX callback when
+finding them in the input).</p><p><span style="background-color: #FF0000">WARNING</span>: handling entities
+on top of the libxml2 SAX interface is difficult!!! If you plan to use
+non-predefined entities in your documents, then the learning curve to handle
+then using the SAX API may be long. If you plan to use complex documents, I
+strongly suggest you consider using the DOM interface instead and let libxml
+deal with the complexity rather than trying to do it yourself.</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/example.html b/doc/example.html
new file mode 100644
index 0000000..b84524f
--- /dev/null
+++ b/doc/example.html
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>A real example</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>A real example</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>Here is a real size example, where the actual content of the application
+data is not kept in the DOM tree but uses internal structures. It is based on
+a proposal to keep a database of jobs related to Gnome, with an XML based
+storage structure. Here is an <a href="gjobs.xml">XML encoded jobs
+base</a>:</p><pre>&lt;?xml version="1.0"?&gt;
+&lt;gjob:Helping xmlns:gjob="http://www.gnome.org/some-location"&gt;
+ &lt;gjob:Jobs&gt;
+
+ &lt;gjob:Job&gt;
+ &lt;gjob:Project ID="3"/&gt;
+ &lt;gjob:Application&gt;GBackup&lt;/gjob:Application&gt;
+ &lt;gjob:Category&gt;Development&lt;/gjob:Category&gt;
+
+ &lt;gjob:Update&gt;
+ &lt;gjob:Status&gt;Open&lt;/gjob:Status&gt;
+ &lt;gjob:Modified&gt;Mon, 07 Jun 1999 20:27:45 -0400 MET DST&lt;/gjob:Modified&gt;
+ &lt;gjob:Salary&gt;USD 0.00&lt;/gjob:Salary&gt;
+ &lt;/gjob:Update&gt;
+
+ &lt;gjob:Developers&gt;
+ &lt;gjob:Developer&gt;
+ &lt;/gjob:Developer&gt;
+ &lt;/gjob:Developers&gt;
+
+ &lt;gjob:Contact&gt;
+ &lt;gjob:Person&gt;Nathan Clemons&lt;/gjob:Person&gt;
+ &lt;gjob:Email&gt;nathan@windsofstorm.net&lt;/gjob:Email&gt;
+ &lt;gjob:Company&gt;
+ &lt;/gjob:Company&gt;
+ &lt;gjob:Organisation&gt;
+ &lt;/gjob:Organisation&gt;
+ &lt;gjob:Webpage&gt;
+ &lt;/gjob:Webpage&gt;
+ &lt;gjob:Snailmail&gt;
+ &lt;/gjob:Snailmail&gt;
+ &lt;gjob:Phone&gt;
+ &lt;/gjob:Phone&gt;
+ &lt;/gjob:Contact&gt;
+
+ &lt;gjob:Requirements&gt;
+ The program should be released as free software, under the GPL.
+ &lt;/gjob:Requirements&gt;
+
+ &lt;gjob:Skills&gt;
+ &lt;/gjob:Skills&gt;
+
+ &lt;gjob:Details&gt;
+ A GNOME based system that will allow a superuser to configure
+ compressed and uncompressed files and/or file systems to be backed
+ up with a supported media in the system. This should be able to
+ perform via find commands generating a list of files that are passed
+ to tar, dd, cpio, cp, gzip, etc., to be directed to the tape machine
+ or via operations performed on the filesystem itself. Email
+ notification and GUI status display very important.
+ &lt;/gjob:Details&gt;
+
+ &lt;/gjob:Job&gt;
+
+ &lt;/gjob:Jobs&gt;
+&lt;/gjob:Helping&gt;</pre><p>While loading the XML file into an internal DOM tree is a matter of
+calling only a couple of functions, browsing the tree to gather the data and
+generate the internal structures is harder, and more error prone.</p><p>The suggested principle is to be tolerant with respect to the input
+structure. For example, the ordering of the attributes is not significant,
+the XML specification is clear about it. It's also usually a good idea not to
+depend on the order of the children of a given node, unless it really makes
+things harder. Here is some code to parse the information for a person:</p><pre>/*
+ * A person record
+ */
+typedef struct person {
+ char *name;
+ char *email;
+ char *company;
+ char *organisation;
+ char *smail;
+ char *webPage;
+ char *phone;
+} person, *personPtr;
+
+/*
+ * And the code needed to parse it
+ */
+personPtr parsePerson(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) {
+ personPtr ret = NULL;
+
+DEBUG("parsePerson\n");
+ /*
+ * allocate the struct
+ */
+ ret = (personPtr) malloc(sizeof(person));
+ if (ret == NULL) {
+ fprintf(stderr,"out of memory\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(person));
+
+ /* We don't care what the top level element name is */
+ cur = cur-&gt;xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!strcmp(cur-&gt;name, "Person")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;name = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ if ((!strcmp(cur-&gt;name, "Email")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;email = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ cur = cur-&gt;next;
+ }
+
+ return(ret);
+}</pre><p>Here are a couple of things to notice:</p><ul><li>Usually a recursive parsing style is the more convenient one: XML data
+ is by nature subject to repetitive constructs and usually exhibits highly
+ structured patterns.</li>
+ <li>The two arguments of type <em>xmlDocPtr</em> and <em>xmlNsPtr</em>,
+ i.e. the pointer to the global XML document and the namespace reserved to
+ the application. Document wide information are needed for example to
+ decode entities and it's a good coding practice to define a namespace for
+ your application set of data and test that the element and attributes
+ you're analyzing actually pertains to your application space. This is
+ done by a simple equality test (cur-&gt;ns == ns).</li>
+ <li>To retrieve text and attributes value, you can use the function
+ <em>xmlNodeListGetString</em> to gather all the text and entity reference
+ nodes generated by the DOM output and produce an single text string.</li>
+</ul><p>Here is another piece of code used to parse another level of the
+structure:</p><pre>#include &lt;libxml/tree.h&gt;
+/*
+ * a Description for a Job
+ */
+typedef struct job {
+ char *projectID;
+ char *application;
+ char *category;
+ personPtr contact;
+ int nbDevelopers;
+ personPtr developers[100]; /* using dynamic alloc is left as an exercise */
+} job, *jobPtr;
+
+/*
+ * And the code needed to parse it
+ */
+jobPtr parseJob(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) {
+ jobPtr ret = NULL;
+
+DEBUG("parseJob\n");
+ /*
+ * allocate the struct
+ */
+ ret = (jobPtr) malloc(sizeof(job));
+ if (ret == NULL) {
+ fprintf(stderr,"out of memory\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(job));
+
+ /* We don't care what the top level element name is */
+ cur = cur-&gt;xmlChildrenNode;
+ while (cur != NULL) {
+
+ if ((!strcmp(cur-&gt;name, "Project")) &amp;&amp; (cur-&gt;ns == ns)) {
+ ret-&gt;projectID = xmlGetProp(cur, "ID");
+ if (ret-&gt;projectID == NULL) {
+ fprintf(stderr, "Project has no ID\n");
+ }
+ }
+ if ((!strcmp(cur-&gt;name, "Application")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;application = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ if ((!strcmp(cur-&gt;name, "Category")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;category = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ if ((!strcmp(cur-&gt;name, "Contact")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;contact = parsePerson(doc, ns, cur);
+ cur = cur-&gt;next;
+ }
+
+ return(ret);
+}</pre><p>Once you are used to it, writing this kind of code is quite simple, but
+boring. Ultimately, it could be possible to write stubbers taking either C
+data structure definitions, a set of XML examples or an XML DTD and produce
+the code needed to import and export the content between C data and XML
+storage. This is left as an exercise to the reader :-)</p><p>Feel free to use <a href="example/gjobread.c">the code for the full C
+parsing example</a> as a template, it is also available with Makefile in the
+Gnome CVS base under gnome-xml/example</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/examples/Makefile.am b/doc/examples/Makefile.am
new file mode 100644
index 0000000..754e663
--- /dev/null
+++ b/doc/examples/Makefile.am
@@ -0,0 +1,93 @@
+# Beware this is autogenerated by index.py
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
+DEPS = $(top_builddir)/libxml2.la
+LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
+
+rebuild: examples.xml index.html
+
+examples.xml: index.py *.c
+ -@($(srcdir)/index.py)
+
+index.html: examples.xml examples.xsl
+ -@(xsltproc examples.xsl examples.xml && echo "Rebuilt web page" && xmllint --valid --noout index.html)
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
+
+EXTRA_DIST=examples.xsl index.py test1.xml examples.xml test2.xml writer.xml test3.xml reader1.res reader3.res tree1.res tree2.res io1.res
+
+noinst_PROGRAMS=xpath1 parse1 parse2 tree1 tree2 testWriter reader1 reader2 reader3 io1
+
+xpath1_SOURCES=xpath1.c
+xpath1_LDFLAGS=
+xpath1_DEPENDENCIES= $(DEPS)
+xpath1_LDADD= @RDL_LIBS@ $(LDADDS)
+
+parse1_SOURCES=parse1.c
+parse1_LDFLAGS=
+parse1_DEPENDENCIES= $(DEPS)
+parse1_LDADD= @RDL_LIBS@ $(LDADDS)
+
+parse2_SOURCES=parse2.c
+parse2_LDFLAGS=
+parse2_DEPENDENCIES= $(DEPS)
+parse2_LDADD= @RDL_LIBS@ $(LDADDS)
+
+tree1_SOURCES=tree1.c
+tree1_LDFLAGS=
+tree1_DEPENDENCIES= $(DEPS)
+tree1_LDADD= @RDL_LIBS@ $(LDADDS)
+
+tree2_SOURCES=tree2.c
+tree2_LDFLAGS=
+tree2_DEPENDENCIES= $(DEPS)
+tree2_LDADD= @RDL_LIBS@ $(LDADDS)
+
+testWriter_SOURCES=testWriter.c
+testWriter_LDFLAGS=
+testWriter_DEPENDENCIES= $(DEPS)
+testWriter_LDADD= @RDL_LIBS@ $(LDADDS)
+
+reader1_SOURCES=reader1.c
+reader1_LDFLAGS=
+reader1_DEPENDENCIES= $(DEPS)
+reader1_LDADD= @RDL_LIBS@ $(LDADDS)
+
+reader2_SOURCES=reader2.c
+reader2_LDFLAGS=
+reader2_DEPENDENCIES= $(DEPS)
+reader2_LDADD= @RDL_LIBS@ $(LDADDS)
+
+reader3_SOURCES=reader3.c
+reader3_LDFLAGS=
+reader3_DEPENDENCIES= $(DEPS)
+reader3_LDADD= @RDL_LIBS@ $(LDADDS)
+
+io1_SOURCES=io1.c
+io1_LDFLAGS=
+io1_DEPENDENCIES= $(DEPS)
+io1_LDADD= @RDL_LIBS@ $(LDADDS)
+
+tests: $(noinst_PROGRAMS)
+ @(echo > .memdump)
+ @(./parse1 test1.xml)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./parse2 test2.xml)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+
+
diff --git a/doc/examples/Makefile.in b/doc/examples/Makefile.in
new file mode 100644
index 0000000..7c1478f
--- /dev/null
+++ b/doc/examples/Makefile.in
@@ -0,0 +1,665 @@
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(io1_SOURCES) $(parse1_SOURCES) $(parse2_SOURCES) $(reader1_SOURCES) $(reader2_SOURCES) $(reader3_SOURCES) $(testWriter_SOURCES) $(tree1_SOURCES) $(tree2_SOURCES) $(xpath1_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+noinst_PROGRAMS = xpath1$(EXEEXT) parse1$(EXEEXT) parse2$(EXEEXT) \
+ tree1$(EXEEXT) tree2$(EXEEXT) testWriter$(EXEEXT) \
+ reader1$(EXEEXT) reader2$(EXEEXT) reader3$(EXEEXT) \
+ io1$(EXEEXT)
+subdir = doc/examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_io1_OBJECTS = io1.$(OBJEXT)
+io1_OBJECTS = $(am_io1_OBJECTS)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1)
+am_parse1_OBJECTS = parse1.$(OBJEXT)
+parse1_OBJECTS = $(am_parse1_OBJECTS)
+am_parse2_OBJECTS = parse2.$(OBJEXT)
+parse2_OBJECTS = $(am_parse2_OBJECTS)
+am_reader1_OBJECTS = reader1.$(OBJEXT)
+reader1_OBJECTS = $(am_reader1_OBJECTS)
+am_reader2_OBJECTS = reader2.$(OBJEXT)
+reader2_OBJECTS = $(am_reader2_OBJECTS)
+am_reader3_OBJECTS = reader3.$(OBJEXT)
+reader3_OBJECTS = $(am_reader3_OBJECTS)
+am_testWriter_OBJECTS = testWriter.$(OBJEXT)
+testWriter_OBJECTS = $(am_testWriter_OBJECTS)
+am_tree1_OBJECTS = tree1.$(OBJEXT)
+tree1_OBJECTS = $(am_tree1_OBJECTS)
+am_tree2_OBJECTS = tree2.$(OBJEXT)
+tree2_OBJECTS = $(am_tree2_OBJECTS)
+am_xpath1_OBJECTS = xpath1.$(OBJEXT)
+xpath1_OBJECTS = $(am_xpath1_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/io1.Po ./$(DEPDIR)/parse1.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/parse2.Po ./$(DEPDIR)/reader1.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/reader2.Po ./$(DEPDIR)/reader3.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/testWriter.Po ./$(DEPDIR)/tree1.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/tree2.Po ./$(DEPDIR)/xpath1.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(io1_SOURCES) $(parse1_SOURCES) $(parse2_SOURCES) \
+ $(reader1_SOURCES) $(reader2_SOURCES) $(reader3_SOURCES) \
+ $(testWriter_SOURCES) $(tree1_SOURCES) $(tree2_SOURCES) \
+ $(xpath1_SOURCES)
+DIST_SOURCES = $(io1_SOURCES) $(parse1_SOURCES) $(parse2_SOURCES) \
+ $(reader1_SOURCES) $(reader2_SOURCES) $(reader3_SOURCES) \
+ $(testWriter_SOURCES) $(tree1_SOURCES) $(tree2_SOURCES) \
+ $(xpath1_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+C14N_OBJ = @C14N_OBJ@
+CATALOG_OBJ = @CATALOG_OBJ@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_OBJ = @DEBUG_OBJ@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOCB_OBJ = @DOCB_OBJ@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FTP_OBJ = @FTP_OBJ@
+HAVE_ISINF = @HAVE_ISINF@
+HAVE_ISNAN = @HAVE_ISNAN@
+HTML_DIR = @HTML_DIR@
+HTML_OBJ = @HTML_OBJ@
+HTTP_OBJ = @HTTP_OBJ@
+ICONV_LIBS = @ICONV_LIBS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
+LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
+LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
+LIBXML_VERSION = @LIBXML_VERSION@
+LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
+LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MV = @MV@
+M_LIBS = @M_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATTERN_TEST = @PATTERN_TEST@
+PYTHON = @PYTHON@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
+PYTHON_SUBDIR = @PYTHON_SUBDIR@
+PYTHON_TESTS = @PYTHON_TESTS@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RDL_LIBS = @RDL_LIBS@
+READER_TEST = @READER_TEST@
+RELDATE = @RELDATE@
+RM = @RM@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STATIC_BINARIES = @STATIC_BINARIES@
+STRIP = @STRIP@
+TAR = @TAR@
+TEST_C14N = @TEST_C14N@
+TEST_CATALOG = @TEST_CATALOG@
+TEST_DEBUG = @TEST_DEBUG@
+TEST_HTML = @TEST_HTML@
+TEST_PHTML = @TEST_PHTML@
+TEST_PUSH = @TEST_PUSH@
+TEST_REGEXPS = @TEST_REGEXPS@
+TEST_SAX = @TEST_SAX@
+TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_THREADS = @TEST_THREADS@
+TEST_VALID = @TEST_VALID@
+TEST_VTIME = @TEST_VTIME@
+TEST_XINCLUDE = @TEST_XINCLUDE@
+TEST_XPATH = @TEST_XPATH@
+TEST_XPTR = @TEST_XPTR@
+THREADS_W32 = @THREADS_W32@
+THREAD_CFLAGS = @THREAD_CFLAGS@
+THREAD_LIBS = @THREAD_LIBS@
+U = @U@
+VERSION = @VERSION@
+WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
+WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
+WITH_C14N = @WITH_C14N@
+WITH_CATALOG = @WITH_CATALOG@
+WITH_DEBUG = @WITH_DEBUG@
+WITH_DOCB = @WITH_DOCB@
+WITH_FTP = @WITH_FTP@
+WITH_HTML = @WITH_HTML@
+WITH_HTTP = @WITH_HTTP@
+WITH_ICONV = @WITH_ICONV@
+WITH_ISO8859X = @WITH_ISO8859X@
+WITH_LEGACY = @WITH_LEGACY@
+WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
+WITH_OUTPUT = @WITH_OUTPUT@
+WITH_PATTERN = @WITH_PATTERN@
+WITH_PUSH = @WITH_PUSH@
+WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
+WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
+WITH_READER = @WITH_READER@
+WITH_REGEXPS = @WITH_REGEXPS@
+WITH_SAX1 = @WITH_SAX1@
+WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_THREADS = @WITH_THREADS@
+WITH_TREE = @WITH_TREE@
+WITH_TRIO = @WITH_TRIO@
+WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
+WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
+WITH_VALID = @WITH_VALID@
+WITH_WRITER = @WITH_WRITER@
+WITH_XINCLUDE = @WITH_XINCLUDE@
+WITH_XPATH = @WITH_XPATH@
+WITH_XPTR = @WITH_XPTR@
+XINCLUDE_OBJ = @XINCLUDE_OBJ@
+XML_CFLAGS = @XML_CFLAGS@
+XML_INCLUDEDIR = @XML_INCLUDEDIR@
+XML_LIBDIR = @XML_LIBDIR@
+XML_LIBS = @XML_LIBS@
+XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
+XPATH_OBJ = @XPATH_OBJ@
+XPTR_OBJ = @XPTR_OBJ@
+Z_CFLAGS = @Z_CFLAGS@
+Z_LIBS = @Z_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+# Beware this is autogenerated by index.py
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
+DEPS = $(top_builddir)/libxml2.la
+LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
+EXTRA_DIST = examples.xsl index.py test1.xml examples.xml test2.xml writer.xml test3.xml reader1.res reader3.res tree1.res tree2.res io1.res
+xpath1_SOURCES = xpath1.c
+xpath1_LDFLAGS =
+xpath1_DEPENDENCIES = $(DEPS)
+xpath1_LDADD = @RDL_LIBS@ $(LDADDS)
+parse1_SOURCES = parse1.c
+parse1_LDFLAGS =
+parse1_DEPENDENCIES = $(DEPS)
+parse1_LDADD = @RDL_LIBS@ $(LDADDS)
+parse2_SOURCES = parse2.c
+parse2_LDFLAGS =
+parse2_DEPENDENCIES = $(DEPS)
+parse2_LDADD = @RDL_LIBS@ $(LDADDS)
+tree1_SOURCES = tree1.c
+tree1_LDFLAGS =
+tree1_DEPENDENCIES = $(DEPS)
+tree1_LDADD = @RDL_LIBS@ $(LDADDS)
+tree2_SOURCES = tree2.c
+tree2_LDFLAGS =
+tree2_DEPENDENCIES = $(DEPS)
+tree2_LDADD = @RDL_LIBS@ $(LDADDS)
+testWriter_SOURCES = testWriter.c
+testWriter_LDFLAGS =
+testWriter_DEPENDENCIES = $(DEPS)
+testWriter_LDADD = @RDL_LIBS@ $(LDADDS)
+reader1_SOURCES = reader1.c
+reader1_LDFLAGS =
+reader1_DEPENDENCIES = $(DEPS)
+reader1_LDADD = @RDL_LIBS@ $(LDADDS)
+reader2_SOURCES = reader2.c
+reader2_LDFLAGS =
+reader2_DEPENDENCIES = $(DEPS)
+reader2_LDADD = @RDL_LIBS@ $(LDADDS)
+reader3_SOURCES = reader3.c
+reader3_LDFLAGS =
+reader3_DEPENDENCIES = $(DEPS)
+reader3_LDADD = @RDL_LIBS@ $(LDADDS)
+io1_SOURCES = io1.c
+io1_LDFLAGS =
+io1_DEPENDENCIES = $(DEPS)
+io1_LDADD = @RDL_LIBS@ $(LDADDS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/examples/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+io1$(EXEEXT): $(io1_OBJECTS) $(io1_DEPENDENCIES)
+ @rm -f io1$(EXEEXT)
+ $(LINK) $(io1_LDFLAGS) $(io1_OBJECTS) $(io1_LDADD) $(LIBS)
+parse1$(EXEEXT): $(parse1_OBJECTS) $(parse1_DEPENDENCIES)
+ @rm -f parse1$(EXEEXT)
+ $(LINK) $(parse1_LDFLAGS) $(parse1_OBJECTS) $(parse1_LDADD) $(LIBS)
+parse2$(EXEEXT): $(parse2_OBJECTS) $(parse2_DEPENDENCIES)
+ @rm -f parse2$(EXEEXT)
+ $(LINK) $(parse2_LDFLAGS) $(parse2_OBJECTS) $(parse2_LDADD) $(LIBS)
+reader1$(EXEEXT): $(reader1_OBJECTS) $(reader1_DEPENDENCIES)
+ @rm -f reader1$(EXEEXT)
+ $(LINK) $(reader1_LDFLAGS) $(reader1_OBJECTS) $(reader1_LDADD) $(LIBS)
+reader2$(EXEEXT): $(reader2_OBJECTS) $(reader2_DEPENDENCIES)
+ @rm -f reader2$(EXEEXT)
+ $(LINK) $(reader2_LDFLAGS) $(reader2_OBJECTS) $(reader2_LDADD) $(LIBS)
+reader3$(EXEEXT): $(reader3_OBJECTS) $(reader3_DEPENDENCIES)
+ @rm -f reader3$(EXEEXT)
+ $(LINK) $(reader3_LDFLAGS) $(reader3_OBJECTS) $(reader3_LDADD) $(LIBS)
+testWriter$(EXEEXT): $(testWriter_OBJECTS) $(testWriter_DEPENDENCIES)
+ @rm -f testWriter$(EXEEXT)
+ $(LINK) $(testWriter_LDFLAGS) $(testWriter_OBJECTS) $(testWriter_LDADD) $(LIBS)
+tree1$(EXEEXT): $(tree1_OBJECTS) $(tree1_DEPENDENCIES)
+ @rm -f tree1$(EXEEXT)
+ $(LINK) $(tree1_LDFLAGS) $(tree1_OBJECTS) $(tree1_LDADD) $(LIBS)
+tree2$(EXEEXT): $(tree2_OBJECTS) $(tree2_DEPENDENCIES)
+ @rm -f tree2$(EXEEXT)
+ $(LINK) $(tree2_LDFLAGS) $(tree2_OBJECTS) $(tree2_LDADD) $(LIBS)
+xpath1$(EXEEXT): $(xpath1_OBJECTS) $(xpath1_DEPENDENCIES)
+ @rm -f xpath1$(EXEEXT)
+ $(LINK) $(xpath1_LDFLAGS) $(xpath1_OBJECTS) $(xpath1_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testWriter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpath1.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-data-local install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am
+
+
+rebuild: examples.xml index.html
+
+examples.xml: index.py *.c
+ -@($(srcdir)/index.py)
+
+index.html: examples.xml examples.xsl
+ -@(xsltproc examples.xsl examples.xml && echo "Rebuilt web page" && xmllint --valid --noout index.html)
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
+
+tests: $(noinst_PROGRAMS)
+ @(echo > .memdump)
+ @(./parse1 test1.xml)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./parse2 test2.xml)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+ @(./io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp)
+ @(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/examples/examples.xml b/doc/examples/examples.xml
new file mode 100644
index 0000000..9c14221
--- /dev/null
+++ b/doc/examples/examples.xml
@@ -0,0 +1,602 @@
+<examples>
+ <example filename='xpath1.c'>
+ <synopsis>Evaluate XPath expression and prints result node set.</synopsis>
+ <purpose>Shows how to evaluate XPath expression and register known namespaces in XPath context.</purpose>
+ <usage>xpath1 &lt;xml-file&gt; &lt;xpath-expr&gt; [&lt;known-ns-list&gt;]</usage>
+ <author>Aleksey Sanin</author>
+ <copy>see Copyright for the status of this software. </copy>
+ <section>XPath</section>
+ <includes>
+ <include>&lt;libxml/xpath.h&gt;</include>
+ <include>&lt;libxml/parser.h&gt;</include>
+ <include>&lt;libxml/xpathInternals.h&gt;</include>
+ <include>&lt;libxml/tree.h&gt;</include>
+ </includes>
+ <uses>
+ <enum line='228' file='tree' name='XML_ELEMENT_NODE'/>
+ <typedef line='87' file='xpath' name='xmlXPathObjectPtr'/>
+ <function line='53' file='xmlmemory' name='xmlMemoryDump'/>
+ <function line='116' file='xpath' name='xmlXPathEvalExpression'/>
+ <function line='185' file='xpathInternals' name='xmlXPathRegisterNs'/>
+ <function line='128' file='xpath' name='xmlXPathFreeObject'/>
+ <typedef line='85' file='tree' name='xmlDocPtr'/>
+ <typedef line='217' file='tree' name='xmlNsPtr'/>
+ <function line='100' file='xpath' name='xmlXPathNewContext'/>
+ <typedef line='205' file='tree' name='xmlNodePtr'/>
+ <function line='48' file='parser' name='xmlCleanupParser'/>
+ <macro line='42' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+ <typedef line='86' file='xpath' name='xmlXPathContextPtr'/>
+ <function line='129' file='xpath' name='xmlXPathFreeContext'/>
+ <function line='38' file='parser' name='xmlInitParser'/>
+ <function line='155' file='xmlstring' name='xmlStrdup'/>
+ <function line='130' file='tree' name='xmlFreeDoc'/>
+ <function line='179' file='xmlstring' name='xmlStrchr'/>
+ <variable line='192' file='globals' name='xmlFree'/>
+ <function line='93' file='parser' name='xmlParseFile'/>
+ <enum line='216' file='tree' name='XML_NAMESPACE_DECL'/>
+ </uses>
+ </example>
+ <example filename='parse1.c'>
+ <synopsis>Parse an XML file to a tree and free it</synopsis>
+ <purpose>Demonstrate the use of xmlReadFile() to read an XML file into a tree and and xmlFreeDoc() to free the resulting tree</purpose>
+ <usage>parse1 test1.xml</usage>
+ <test>parse1 test1.xml</test>
+ <author>Daniel Veillard</author>
+ <copy>see Copyright for the status of this software. </copy>
+ <section>Parsing</section>
+ <includes>
+ <include>&lt;libxml/tree.h&gt;</include>
+ <include>&lt;libxml/parser.h&gt;</include>
+ </includes>
+ <uses>
+ <function line='50' file='parser' name='xmlCleanupParser'/>
+ <macro line='45' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+ <typedef line='24' file='tree' name='xmlDocPtr'/>
+ <function line='31' file='tree' name='xmlFreeDoc'/>
+ <function line='26' file='parser' name='xmlReadFile'/>
+ <function line='54' file='xmlmemory' name='xmlMemoryDump'/>
+ </uses>
+ </example>
+ <example filename='parse2.c'>
+ <synopsis>Parse and validate an XML file to a tree and free the result</synopsis>
+ <purpose>Create a parser context for an XML file, then parse and validate the file, creating a tree, check the validation result and xmlFreeDoc() to free the resulting tree.</purpose>
+ <usage>parse2 test2.xml</usage>
+ <test>parse2 test2.xml</test>
+ <author>Daniel Veillard</author>
+ <copy>see Copyright for the status of this software. </copy>
+ <section>Parsing</section>
+ <includes>
+ <include>&lt;libxml/tree.h&gt;</include>
+ <include>&lt;libxml/parser.h&gt;</include>
+ </includes>
+ <uses>
+ <function line='47' file='parser' name='xmlFreeParserCtxt'/>
+ <macro line='61' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+ <enum line='35' file='parser' name='XML_PARSE_DTDVALID'/>
+ <function line='29' file='parser' name='xmlNewParserCtxt'/>
+ <function line='66' file='parser' name='xmlCleanupParser'/>
+ <typedef line='25' file='tree' name='xmlParserCtxtPtr'/>
+ <function line='35' file='parser' name='xmlCtxtReadFile'/>
+ <function line='44' file='tree' name='xmlFreeDoc'/>
+ <typedef line='26' file='tree' name='xmlDocPtr'/>
+ <function line='70' file='xmlmemory' name='xmlMemoryDump'/>
+ </uses>
+ </example>
+ <example filename='tree1.c'>
+ <synopsis>Navigates a tree to print element names</synopsis>
+ <purpose>Parse a file to a tree, use xmlDocGetRootElement() to get the root element, then walk the document and print all the element name in document order.</purpose>
+ <usage>tree1 filename_or_URL</usage>
+ <test>tree1 test2.xml &gt; tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp</test>
+ <author>Dodji Seketeli</author>
+ <copy>see Copyright for the status of this software. </copy>
+ <section>Tree</section>
+ <includes>
+ <include>&lt;libxml/tree.h&gt;</include>
+ <include>&lt;libxml/parser.h&gt;</include>
+ </includes>
+ <uses>
+ <function line='85' file='parser' name='xmlCleanupParser'/>
+ <macro line='67' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+ <enum line='36' file='tree' name='XML_ELEMENT_NODE'/>
+ <function line='79' file='tree' name='xmlFreeDoc'/>
+ <function line='67' file='parser' name='xmlParseFile'/>
+ <function line='74' file='tree' name='xmlDocGetRootElement'/>
+ </uses>
+ </example>
+ <example filename='tree2.c'>
+ <synopsis>Creates a tree</synopsis>
+ <purpose>Shows how to create document, nodes and dump it to stdout or file.</purpose>
+ <usage>tree2 &lt;filename&gt; -Default output: stdout</usage>
+ <test>tree2 &gt; tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp</test>
+ <author>Lucas Brasilino &lt;brasilino@recife.pe.gov.br&gt;</author>
+ <copy>see Copyright for the status of this software </copy>
+ <section>Tree</section>
+ <includes>
+ <include>&lt;libxml/tree.h&gt;</include>
+ <include>&lt;libxml/parser.h&gt;</include>
+ </includes>
+ <uses>
+ <function line='75' file='tree' name='xmlNewText'/>
+ <function line='110' file='xmlmemory' name='xmlMemoryDump'/>
+ <function line='96' file='tree' name='xmlSaveFormatFileEnc'/>
+ <function line='78' file='tree' name='xmlAddChild'/>
+ <function line='41' file='tree' name='xmlDocSetRootElement'/>
+ <function line='105' file='parser' name='xmlCleanupParser'/>
+ <macro line='34' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+ <function line='89' file='tree' name='xmlNewProp'/>
+ <function line='88' file='tree' name='xmlNewChild'/>
+ <function line='74' file='tree' name='xmlNewNode'/>
+ <function line='46' file='tree' name='xmlCreateIntSubset'/>
+ <function line='99' file='tree' name='xmlFreeDoc'/>
+ <function line='39' file='tree' name='xmlNewDoc'/>
+ </uses>
+ </example>
+ <example filename='testWriter.c'>
+ <synopsis>use various APIs for the xmlWriter</synopsis>
+ <purpose>tests a number of APIs for the xmlWriter, especially the various methods to write to a filename, to a memory buffer, to a new document, or to a subtree. It shows how to do encoding string conversions too. The resulting documents are then serialized.</purpose>
+ <usage>testWriter</usage>
+ <test>testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res</test>
+ <author>Alfred Mickautsch</author>
+ <copy>see Copyright for the status of this software. </copy>
+ <section>xmlWriter</section>
+ <includes>
+ <include>&lt;libxml/encoding.h&gt;</include>
+ <include>&lt;libxml/xmlwriter.h&gt;</include>
+ </includes>
+ <uses>
+ <function line='1111' file='xmlwriter' name='xmlTextWriterEndElement'/>
+ <function line='901' file='tree' name='xmlDocSetRootElement'/>
+ <function line='913' file='xmlwriter' name='xmlTextWriterStartDocument'/>
+ <function line='1121' file='xmlwriter' name='xmlTextWriterEndDocument'/>
+ <function line='959' file='xmlwriter' name='xmlTextWriterWriteFormatComment'/>
+ <function line='925' file='xmlwriter' name='xmlTextWriterWriteComment'/>
+ <function line='54' file='parser' name='xmlCleanupParser'/>
+ <variable line='1166' file='globals' name='xmlMalloc'/>
+ <function line='1073' file='xmlwriter' name='xmlTextWriterWriteFormatElement'/>
+ <function line='1156' file='encoding' name='xmlFindCharEncodingHandler'/>
+ <typedef line='1151' file='encoding' name='xmlCharEncodingHandlerPtr'/>
+ <function line='904' file='xmlwriter' name='xmlNewTextWriterTree'/>
+ <function line='76' file='xmlwriter' name='xmlNewTextWriterFilename'/>
+ <function line='1131' file='tree' name='xmlFreeDoc'/>
+ <typedef line='880' file='tree' name='xmlNodePtr'/>
+ <typedef line='879' file='tree' name='xmlDocPtr'/>
+ <typedef line='341' file='tree' name='xmlBufferPtr'/>
+ <function line='632' file='xmlwriter' name='xmlNewTextWriterDoc'/>
+ <function line='894' file='tree' name='xmlNewDocNode'/>
+ <function line='1129' file='tree' name='xmlSaveFileEnc'/>
+ <function line='58' file='xmlmemory' name='xmlMemoryDump'/>
+ <macro line='885' file='parser' name='XML_DEFAULT_VERSION'/>
+ <function line='355' file='xmlwriter' name='xmlNewTextWriterMemory'/>
+ <variable line='1180' file='globals' name='xmlFree'/>
+ <function line='1096' file='xmlwriter' name='xmlTextWriterStartElement'/>
+ <function line='1127' file='xmlwriter' name='xmlFreeTextWriter'/>
+ <function line='347' file='tree' name='xmlBufferCreate'/>
+ <macro line='40' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+ <function line='613' file='tree' name='xmlBufferFree'/>
+ <typedef line='878' file='xmlwriter' name='xmlTextWriterPtr'/>
+ <function line='1103' file='xmlwriter' name='xmlTextWriterWriteElement'/>
+ <function line='949' file='xmlwriter' name='xmlTextWriterWriteAttribute'/>
+ <variable line='1183' file='globals' name='xmlRealloc'/>
+ <function line='885' file='tree' name='xmlNewDoc'/>
+ </uses>
+ </example>
+ <example filename='reader1.c'>
+ <synopsis>Parse an XML file with an xmlReader</synopsis>
+ <purpose>Demonstrate the use of xmlReaderForFile() to parse an XML file and dump the informations about the nodes found in the process. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
+ <usage>reader1 &lt;filename&gt;</usage>
+ <test>reader1 test2.xml &gt; reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp</test>
+ <author>Daniel Veillard</author>
+ <copy>see Copyright for the status of this software. </copy>
+ <section>xmlReader</section>
+ <includes>
+ <include>&lt;libxml/xmlreader.h&gt;</include>
+ </includes>
+ <uses>
+ <function line='44' file='xmlstring' name='xmlStrlen'/>
+ <function line='37' file='xmlreader' name='xmlTextReaderNodeType'/>
+ <typedef line='59' file='xmlreader' name='xmlTextReaderPtr'/>
+ <function line='98' file='xmlmemory' name='xmlMemoryDump'/>
+ <function line='33' file='xmlreader' name='xmlTextReaderConstValue'/>
+ <function line='36' file='xmlreader' name='xmlTextReaderDepth'/>
+ <function line='69' file='xmlreader' name='xmlFreeTextReader'/>
+ <function line='29' file='xmlreader' name='xmlTextReaderConstName'/>
+ <function line='40' file='xmlreader' name='xmlTextReaderHasValue'/>
+ <function line='67' file='xmlreader' name='xmlTextReaderRead'/>
+ <function line='39' file='xmlreader' name='xmlTextReaderIsEmptyElement'/>
+ <function line='62' file='xmlreader' name='xmlReaderForFile'/>
+ </uses>
+ </example>
+ <example filename='reader2.c'>
+ <synopsis>Parse and validate an XML file with an xmlReader</synopsis>
+ <purpose>Demonstrate the use of xmlReaderForFile() to parse an XML file validating the content in the process and activating options like entities substitution, and DTD attributes defaulting. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
+ <usage>reader2 &lt;valid_xml_filename&gt;</usage>
+ <test>reader2 test2.xml &gt; reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp</test>
+ <author>Daniel Veillard</author>
+ <copy>see Copyright for the status of this software. </copy>
+ <section>xmlReader</section>
+ <includes>
+ <include>&lt;libxml/xmlreader.h&gt;</include>
+ </includes>
+ <uses>
+ <function line='45' file='xmlstring' name='xmlStrlen'/>
+ <function line='38' file='xmlreader' name='xmlTextReaderNodeType'/>
+ <typedef line='60' file='xmlreader' name='xmlTextReaderPtr'/>
+ <function line='34' file='xmlreader' name='xmlTextReaderConstValue'/>
+ <enum line='70' file='parser' name='XML_PARSE_NOENT'/>
+ <function line='37' file='xmlreader' name='xmlTextReaderDepth'/>
+ <enum line='71' file='parser' name='XML_PARSE_DTDVALID'/>
+ <enum line='69' file='parser' name='XML_PARSE_DTDATTR'/>
+ <function line='84' file='xmlreader' name='xmlFreeTextReader'/>
+ <function line='30' file='xmlreader' name='xmlTextReaderConstName'/>
+ <function line='41' file='xmlreader' name='xmlTextReaderHasValue'/>
+ <function line='76' file='xmlreader' name='xmlTextReaderRead'/>
+ <function line='40' file='xmlreader' name='xmlTextReaderIsEmptyElement'/>
+ <function line='68' file='xmlreader' name='xmlReaderForFile'/>
+ <function line='81' file='xmlreader' name='xmlTextReaderIsValid'/>
+ </uses>
+ </example>
+ <example filename='reader3.c'>
+ <synopsis>Show how to extract subdocuments with xmlReader</synopsis>
+ <purpose>Demonstrate the use of xmlTextReaderPreservePattern() to parse an XML file with the xmlReader while collecting only some subparts of the document. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
+ <usage>reader3</usage>
+ <test>reader3 &gt; reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp</test>
+ <author>Daniel Veillard</author>
+ <copy>see Copyright for the status of this software. </copy>
+ <section>xmlReader</section>
+ <includes>
+ <include>&lt;libxml/xmlreader.h&gt;</include>
+ </includes>
+ <uses>
+ <typedef line='31' file='xmlreader' name='xmlTextReaderPtr'/>
+ <function line='37' file='xmlreader' name='xmlReaderForFile'/>
+ <function line='65' file='xmlreader' name='xmlFreeTextReader'/>
+ <function line='95' file='tree' name='xmlDocDump'/>
+ <function line='51' file='xmlreader' name='xmlTextReaderRead'/>
+ <function line='61' file='xmlreader' name='xmlTextReaderCurrentDoc'/>
+ <function line='42' file='xmlreader' name='xmlTextReaderPreservePattern'/>
+ <typedef line='76' file='tree' name='xmlDocPtr'/>
+ </uses>
+ </example>
+ <example filename='io1.c'>
+ <synopsis>Example of custom Input/Output</synopsis>
+ <purpose>Demonstrate the use of xmlRegisterInputCallbacks to build a custom I/O layer, this is used in an XInclude method context to show how dynamic document can be built in a clean way.</purpose>
+ <usage>io1</usage>
+ <test>io1 &gt; io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp</test>
+ <author>Daniel Veillard</author>
+ <copy>see Copyright for the status of this software. </copy>
+ <section>InputOutput</section>
+ <includes>
+ <include>&lt;libxml/parser.h&gt;</include>
+ <include>&lt;libxml/xinclude.h&gt;</include>
+ <include>&lt;libxml/tree.h&gt;</include>
+ <include>&lt;libxml/xmlIO.h&gt;</include>
+ </includes>
+ <uses>
+ <function line='143' file='tree' name='xmlDocDump'/>
+ <function line='134' file='xinclude' name='xmlXIncludeProcess'/>
+ <function line='117' file='xmlIO' name='xmlRegisterInputCallbacks'/>
+ <function line='124' file='parser' name='xmlReadMemory'/>
+ <typedef line='105' file='tree' name='xmlDocPtr'/>
+ </uses>
+ </example>
+ <symbols>
+ <symbol name='LIBXML_TEST_VERSION'>
+ <ref filename='xpath1.c'/>
+ <ref filename='parse1.c'/>
+ <ref filename='parse2.c'/>
+ <ref filename='tree1.c'/>
+ <ref filename='tree2.c'/>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='XML_DEFAULT_VERSION'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='XML_ELEMENT_NODE'>
+ <ref filename='xpath1.c'/>
+ <ref filename='tree1.c'/>
+ </symbol>
+ <symbol name='XML_NAMESPACE_DECL'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='XML_PARSE_DTDATTR'>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='XML_PARSE_DTDVALID'>
+ <ref filename='parse2.c'/>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='XML_PARSE_NOENT'>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='xmlAddChild'>
+ <ref filename='tree2.c'/>
+ </symbol>
+ <symbol name='xmlBufferCreate'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlBufferFree'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlBufferPtr'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlCharEncodingHandlerPtr'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlCleanupParser'>
+ <ref filename='xpath1.c'/>
+ <ref filename='parse1.c'/>
+ <ref filename='parse2.c'/>
+ <ref filename='tree1.c'/>
+ <ref filename='tree2.c'/>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlCreateIntSubset'>
+ <ref filename='tree2.c'/>
+ </symbol>
+ <symbol name='xmlCtxtReadFile'>
+ <ref filename='parse2.c'/>
+ </symbol>
+ <symbol name='xmlDocDump'>
+ <ref filename='reader3.c'/>
+ <ref filename='io1.c'/>
+ </symbol>
+ <symbol name='xmlDocGetRootElement'>
+ <ref filename='tree1.c'/>
+ </symbol>
+ <symbol name='xmlDocPtr'>
+ <ref filename='xpath1.c'/>
+ <ref filename='parse1.c'/>
+ <ref filename='parse2.c'/>
+ <ref filename='testWriter.c'/>
+ <ref filename='reader3.c'/>
+ <ref filename='io1.c'/>
+ </symbol>
+ <symbol name='xmlDocSetRootElement'>
+ <ref filename='tree2.c'/>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlFindCharEncodingHandler'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlFree'>
+ <ref filename='xpath1.c'/>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlFreeDoc'>
+ <ref filename='xpath1.c'/>
+ <ref filename='parse1.c'/>
+ <ref filename='parse2.c'/>
+ <ref filename='tree1.c'/>
+ <ref filename='tree2.c'/>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlFreeParserCtxt'>
+ <ref filename='parse2.c'/>
+ </symbol>
+ <symbol name='xmlFreeTextReader'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ <ref filename='reader3.c'/>
+ </symbol>
+ <symbol name='xmlFreeTextWriter'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlInitParser'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlMalloc'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlMemoryDump'>
+ <ref filename='xpath1.c'/>
+ <ref filename='parse1.c'/>
+ <ref filename='parse2.c'/>
+ <ref filename='tree2.c'/>
+ <ref filename='testWriter.c'/>
+ <ref filename='reader1.c'/>
+ </symbol>
+ <symbol name='xmlNewChild'>
+ <ref filename='tree2.c'/>
+ </symbol>
+ <symbol name='xmlNewDoc'>
+ <ref filename='tree2.c'/>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlNewDocNode'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlNewNode'>
+ <ref filename='tree2.c'/>
+ </symbol>
+ <symbol name='xmlNewParserCtxt'>
+ <ref filename='parse2.c'/>
+ </symbol>
+ <symbol name='xmlNewProp'>
+ <ref filename='tree2.c'/>
+ </symbol>
+ <symbol name='xmlNewText'>
+ <ref filename='tree2.c'/>
+ </symbol>
+ <symbol name='xmlNewTextWriterDoc'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlNewTextWriterFilename'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlNewTextWriterMemory'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlNewTextWriterTree'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlNodePtr'>
+ <ref filename='xpath1.c'/>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlNsPtr'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlParseFile'>
+ <ref filename='xpath1.c'/>
+ <ref filename='tree1.c'/>
+ </symbol>
+ <symbol name='xmlParserCtxtPtr'>
+ <ref filename='parse2.c'/>
+ </symbol>
+ <symbol name='xmlReadFile'>
+ <ref filename='parse1.c'/>
+ </symbol>
+ <symbol name='xmlReadMemory'>
+ <ref filename='io1.c'/>
+ </symbol>
+ <symbol name='xmlReaderForFile'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ <ref filename='reader3.c'/>
+ </symbol>
+ <symbol name='xmlRealloc'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlRegisterInputCallbacks'>
+ <ref filename='io1.c'/>
+ </symbol>
+ <symbol name='xmlSaveFileEnc'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlSaveFormatFileEnc'>
+ <ref filename='tree2.c'/>
+ </symbol>
+ <symbol name='xmlStrchr'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlStrdup'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlStrlen'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderConstName'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderConstValue'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderCurrentDoc'>
+ <ref filename='reader3.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderDepth'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderHasValue'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderIsEmptyElement'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderIsValid'>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderNodeType'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderPreservePattern'>
+ <ref filename='reader3.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderPtr'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ <ref filename='reader3.c'/>
+ </symbol>
+ <symbol name='xmlTextReaderRead'>
+ <ref filename='reader1.c'/>
+ <ref filename='reader2.c'/>
+ <ref filename='reader3.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterEndDocument'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterEndElement'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterPtr'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterStartDocument'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterStartElement'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterWriteAttribute'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterWriteComment'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterWriteElement'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterWriteFormatComment'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlTextWriterWriteFormatElement'>
+ <ref filename='testWriter.c'/>
+ </symbol>
+ <symbol name='xmlXIncludeProcess'>
+ <ref filename='io1.c'/>
+ </symbol>
+ <symbol name='xmlXPathContextPtr'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlXPathEvalExpression'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlXPathFreeContext'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlXPathFreeObject'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlXPathNewContext'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlXPathObjectPtr'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ <symbol name='xmlXPathRegisterNs'>
+ <ref filename='xpath1.c'/>
+ </symbol>
+ </symbols>
+ <sections>
+ <section name='InputOutput'>
+ <example filename='io1.c'/>
+ </section>
+ <section name='Parsing'>
+ <example filename='parse1.c'/>
+ <example filename='parse2.c'/>
+ </section>
+ <section name='Tree'>
+ <example filename='tree1.c'/>
+ <example filename='tree2.c'/>
+ </section>
+ <section name='XPath'>
+ <example filename='xpath1.c'/>
+ </section>
+ <section name='xmlReader'>
+ <example filename='reader1.c'/>
+ <example filename='reader2.c'/>
+ <example filename='reader3.c'/>
+ </section>
+ <section name='xmlWriter'>
+ <example filename='testWriter.c'/>
+ </section>
+ </sections>
+</examples>
diff --git a/doc/examples/examples.xsl b/doc/examples/examples.xsl
new file mode 100644
index 0000000..e4ccfd3
--- /dev/null
+++ b/doc/examples/examples.xsl
@@ -0,0 +1,169 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ extension-element-prefixes="exsl"
+ exclude-result-prefixes="exsl">
+
+ <xsl:import href="../site.xsl"/>
+
+ <xsl:variable name="href_base">../</xsl:variable>
+ <xsl:variable name="menu_name">Examples Menu</xsl:variable>
+
+ <xsl:variable name="toc">
+ <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><!-- style="margin-left: -1em" -->
+ <li><a href="{$href_base}index.html">Home</a></li>
+ <li><a style="font-weight:bold"
+ href="{$href_base}docs.html">Developer Menu</a></li>
+ <li><a style="font-weight:bold"
+ href="{$href_base}html/index.html">API Menu</a></li>
+ <xsl:for-each select="/examples/sections/section">
+ <li><a href="#{@name}"><xsl:value-of select="@name"/> Examples</a></li>
+ </xsl:for-each>
+ <li><a href="{$href_base}guidelines.html">XML Guidelines</a></li>
+ </ul>
+ </xsl:variable>
+
+ <xsl:template match="include">
+ <xsl:variable name="header" select="substring-before(substring-after(., '/'), '&gt;')"/>
+ <xsl:variable name="doc" select="concat('../html/libxml-', $header, 'tml')"/>
+ <li><a href="{$doc}"><xsl:value-of select="."/></a></li>
+ </xsl:template>
+
+ <xsl:template match="typedef">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="header" select="concat(@file, '.h')"/>
+ <xsl:variable name="doc" select="concat('../html/libxml-', @file, '.html#', $name)"/>
+ <li> line <xsl:value-of select="@line"/>: Type <a href="{$doc}"><xsl:value-of select="$name"/></a> from <xsl:value-of select="$header"/></li>
+ </xsl:template>
+
+ <xsl:template match="function">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="header" select="concat(@file, '.h')"/>
+ <xsl:variable name="doc" select="concat('../html/libxml-', @file, '.html#', $name)"/>
+ <li> line <xsl:value-of select="@line"/>: Function <a href="{$doc}"><xsl:value-of select="$name"/></a> from <xsl:value-of select="$header"/></li>
+ </xsl:template>
+
+ <xsl:template match="macro">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="header" select="concat(@file, '.h')"/>
+ <xsl:variable name="doc" select="concat('../html/libxml-', @file, '.html#', $name)"/>
+ <li> line <xsl:value-of select="@line"/>: Macro <a href="{$doc}"><xsl:value-of select="$name"/></a> from <xsl:value-of select="$header"/></li>
+ </xsl:template>
+
+ <xsl:template match="example">
+ <xsl:variable name="filename" select="string(@filename)"/>
+ <h3><a name="{$filename}" href="{$filename}"><xsl:value-of select="$filename"/></a>: <xsl:value-of select="synopsis"/></h3>
+ <p><xsl:value-of select="purpose"/></p>
+ <p>Includes:</p>
+ <ul>
+ <xsl:for-each select="includes/include">
+ <xsl:apply-templates select='.'/>
+ </xsl:for-each>
+ </ul>
+ <p>Uses:</p>
+ <ul>
+ <xsl:for-each select="uses/*">
+ <xsl:sort select="@line" data-type="number"/>
+ <xsl:apply-templates select='.'/>
+ </xsl:for-each>
+ </ul>
+ <p>Usage:</p>
+ <p><xsl:value-of select="usage"/></p>
+ <p>Author: <xsl:value-of select="author"/></p>
+ </xsl:template>
+
+ <xsl:template match="section">
+ <li><p> <a href="#{@name}"><xsl:value-of select="@name"/></a> :</p>
+ <ul>
+ <xsl:for-each select="example">
+ <xsl:sort select='.'/>
+ <xsl:variable name="filename" select="@filename"/>
+ <li> <a href="#{$filename}"><xsl:value-of select="$filename"/></a>: <xsl:value-of select="/examples/example[@filename = $filename]/synopsis"/></li>
+ </xsl:for-each>
+ </ul>
+ </li>
+ </xsl:template>
+
+ <xsl:template match="sections">
+ <p> The examples are stored per section depending on the main focus
+ of the example:</p>
+ <ul>
+ <xsl:for-each select="section">
+ <xsl:sort select='.'/>
+ <xsl:apply-templates select='.'/>
+ </xsl:for-each>
+ </ul>
+ </xsl:template>
+
+ <xsl:template name="sections-list">
+ <xsl:for-each select="sections/section">
+ <xsl:variable name="section" select="@name"/>
+ <h2> <a name="{$section}"></a><xsl:value-of select="$section"/> Examples</h2>
+ <xsl:apply-templates select='/examples/example[section = $section]'/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template match="examples">
+ <xsl:variable name="title">Libxml2 set of examples</xsl:variable>
+ <xsl:document href="index.html" method="xml" encoding="ISO-8859-1"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:element name="title">
+ <xsl:value-of select="$title"/>
+ </xsl:element>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="$title"/>
+ </xsl:call-template>
+ <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">
+ <xsl:call-template name="toc"/>
+ </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">
+ <xsl:apply-templates select="sections"/>
+ <xsl:call-template name="sections-list"/>
+ <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>
+ </xsl:document>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/examples/index.py b/doc/examples/index.py
new file mode 100755
index 0000000..c3a85de
--- /dev/null
+++ b/doc/examples/index.py
@@ -0,0 +1,296 @@
+#!/usr/bin/python -u
+#
+# Indexes the examples and build an XML description
+#
+import string
+import glob
+import sys
+try:
+ import libxml2
+except:
+ sys.exit(1)
+sys.path.append("..")
+from apibuild import CParser, escape
+
+examples = []
+extras = ['examples.xsl', 'index.py']
+tests = []
+sections = {}
+symbols = {}
+api_dict = None
+api_doc = None
+
+def load_api():
+ global api_dict
+ global api_doc
+
+ if api_dict != None:
+ return
+ api_dict = {}
+ try:
+ print "loading ../libxml2-api.xml"
+ api_doc = libxml2.parseFile("../libxml2-api.xml")
+ except:
+ print "failed to parse ../libxml2-api.xml"
+ sys.exit(1)
+
+def find_symbol(name):
+ global api_dict
+ global api_doc
+
+ if api_doc == None:
+ load_api()
+
+ if name == None:
+ return
+ if api_dict.has_key(name):
+ return api_dict[name]
+ ctxt = api_doc.xpathNewContext()
+ res = ctxt.xpathEval("/api/symbols/*[@name = '%s']" % (name))
+ if type(res) == type([]) and len(res) >= 1:
+ if len(res) > 1:
+ print "Found %d references to %s in the API" % (len(res), name)
+ node = res[0]
+ typ = node.name
+ file = node.xpathEval("string(@file)")
+ info = node.xpathEval("string(info)")
+ else:
+ print "Reference %s not found in the API" % (name)
+ return None
+ ret = (typ, file, info)
+ api_dict[name] = ret
+ return ret
+
+def parse_top_comment(filename, comment):
+ res = {}
+ lines = string.split(comment, "\n")
+ item = None
+ for line in lines:
+ while line != "" and (line[0] == ' ' or line[0] == '\t'):
+ line = line[1:]
+ while line != "" and line[0] == '*':
+ line = line[1:]
+ while line != "" and (line[0] == ' ' or line[0] == '\t'):
+ line = line[1:]
+ try:
+ (it, line) = string.split(line, ":", 1)
+ item = it
+ while line != "" and (line[0] == ' ' or line[0] == '\t'):
+ line = line[1:]
+ if res.has_key(item):
+ res[item] = res[item] + " " + line
+ else:
+ res[item] = line
+ except:
+ if item != None:
+ if res.has_key(item):
+ res[item] = res[item] + " " + line
+ else:
+ res[item] = line
+ return res
+
+def parse(filename, output):
+ global symbols
+ global sections
+
+ parser = CParser(filename)
+ parser.collect_references()
+ idx = parser.parse()
+ info = parse_top_comment(filename, parser.top_comment)
+ output.write(" <example filename='%s'>\n" % filename)
+ try:
+ synopsis = info['synopsis']
+ output.write(" <synopsis>%s</synopsis>\n" % escape(synopsis));
+ except:
+ print "Example %s lacks a synopsis description" % (filename)
+ try:
+ purpose = info['purpose']
+ output.write(" <purpose>%s</purpose>\n" % escape(purpose));
+ except:
+ print "Example %s lacks a purpose description" % (filename)
+ try:
+ usage = info['usage']
+ output.write(" <usage>%s</usage>\n" % escape(usage));
+ except:
+ print "Example %s lacks an usage description" % (filename)
+ try:
+ test = info['test']
+ output.write(" <test>%s</test>\n" % escape(test));
+ progname=filename[0:-2]
+ command=string.replace(test, progname, './' + progname, 1)
+ tests.append(command)
+ except:
+ pass
+ try:
+ author = info['author']
+ output.write(" <author>%s</author>\n" % escape(author));
+ except:
+ print "Example %s lacks an author description" % (filename)
+ try:
+ copy = info['copy']
+ output.write(" <copy>%s</copy>\n" % escape(copy));
+ except:
+ print "Example %s lacks a copyright description" % (filename)
+ try:
+ section = info['section']
+ output.write(" <section>%s</section>\n" % escape(section));
+ if sections.has_key(section):
+ sections[section].append(filename)
+ else:
+ sections[section] = [filename]
+ except:
+ print "Example %s lacks a section description" % (filename)
+ for topic in info.keys():
+ if topic != "purpose" and topic != "usage" and \
+ topic != "author" and topic != "copy" and \
+ topic != "section" and topic != "synopsis" and topic != "test":
+ str = info[topic]
+ output.write(" <extra topic='%s'>%s</extra>\n" % (
+ escape(topic), escape(str)))
+ output.write(" <includes>\n")
+ for include in idx.includes.keys():
+ if include.find("libxml") != -1:
+ output.write(" <include>%s</include>\n" % (escape(include)))
+ output.write(" </includes>\n")
+ output.write(" <uses>\n")
+ for ref in idx.references.keys():
+ id = idx.references[ref]
+ name = id.get_name()
+ line = id.get_lineno()
+ if symbols.has_key(name):
+ sinfo = symbols[name]
+ refs = sinfo[0]
+ # gather at most 5 references per symbols
+ if refs > 5:
+ continue
+ sinfo.append(filename)
+ sinfo[0] = refs + 1
+ else:
+ symbols[name] = [1, filename]
+ info = find_symbol(name)
+ if info != None:
+ type = info[0]
+ file = info[1]
+ output.write(" <%s line='%d' file='%s' name='%s'/>\n" % (type,
+ line, file, name))
+ else:
+ type = id.get_type()
+ output.write(" <%s line='%d' name='%s'/>\n" % (type,
+ line, name))
+
+ output.write(" </uses>\n")
+ output.write(" </example>\n")
+
+ return idx
+
+def dump_symbols(output):
+ global symbols
+
+ output.write(" <symbols>\n")
+ keys = symbols.keys()
+ keys.sort()
+ for symbol in keys:
+ output.write(" <symbol name='%s'>\n" % (symbol))
+ info = symbols[symbol]
+ i = 1
+ while i < len(info):
+ output.write(" <ref filename='%s'/>\n" % (info[i]))
+ i = i + 1
+ output.write(" </symbol>\n")
+ output.write(" </symbols>\n")
+
+def dump_sections(output):
+ global sections
+
+ output.write(" <sections>\n")
+ keys = sections.keys()
+ keys.sort()
+ for section in keys:
+ output.write(" <section name='%s'>\n" % (section))
+ info = sections[section]
+ i = 0
+ while i < len(info):
+ output.write(" <example filename='%s'/>\n" % (info[i]))
+ i = i + 1
+ output.write(" </section>\n")
+ output.write(" </sections>\n")
+
+def dump_Makefile():
+ for file in glob.glob('*.xml'):
+ extras.append(file)
+ for file in glob.glob('*.res'):
+ extras.append(file)
+ Makefile="""# Beware this is autogenerated by index.py
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
+DEPS = $(top_builddir)/libxml2.la
+LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
+
+rebuild: examples.xml index.html
+
+examples.xml: index.py *.c
+ -@($(srcdir)/index.py)
+
+index.html: examples.xml examples.xsl
+ -@(xsltproc examples.xsl examples.xml && echo "Rebuilt web page" && xmllint --valid --noout index.html)
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
+ -@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
+
+"""
+ EXTRA_DIST=""
+ for extra in extras:
+ EXTRA_DIST = EXTRA_DIST + extra + " "
+ Makefile = Makefile + "EXTRA_DIST=%s\n\n" % (EXTRA_DIST)
+ noinst_PROGRAMS=""
+ for example in examples:
+ noinst_PROGRAMS = noinst_PROGRAMS + example + " "
+ Makefile = Makefile + "noinst_PROGRAMS=%s\n\n" % (noinst_PROGRAMS)
+ for example in examples:
+ Makefile = Makefile + "%s_SOURCES=%s.c\n%s_LDFLAGS=\n%s_DEPENDENCIES= $(DEPS)\n%s_LDADD= @RDL_LIBS@ $(LDADDS)\n\n" % (example, example, example,
+ example, example)
+ Makefile = Makefile + "tests: $(noinst_PROGRAMS)\n"
+ Makefile = Makefile + "\t@(echo > .memdump)\n"
+ for test in tests:
+ Makefile = Makefile + "\t@(%s)\n" % (test)
+ Makefile = Makefile + '\t@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)\n'
+ Makefile = Makefile + "\n\n"
+ try:
+ old = open("Makefile.am", "r").read()
+ if old != Makefile:
+ n = open("Makefile.am", "w").write(Makefile)
+ print "Updated Makefile.am"
+ except:
+ print "Failed to read or save Makefile.am"
+ #
+ # Autogenerate the .cvsignore too ...
+ #
+ ignore = """.memdump
+Makefile.in
+Makefile
+"""
+ for example in examples:
+ ignore = ignore + "%s\n" % (example)
+ try:
+ old = open(".cvsignore", "r").read()
+ if old != ignore:
+ n = open(".cvsignore", "w").write(ignore)
+ print "Updated .cvsignore"
+ except:
+ print "Failed to read or save .cvsignore"
+
+if __name__ == "__main__":
+ load_api()
+ output = open("examples.xml", "w")
+ output.write("<examples>\n")
+
+ for file in glob.glob('*.c'):
+ parse(file, output)
+ examples.append(file[:-2])
+
+ dump_symbols(output)
+ dump_sections(output)
+ output.write("</examples>\n")
+ output.close()
+ dump_Makefile()
+
diff --git a/doc/examples/io1.c b/doc/examples/io1.c
new file mode 100644
index 0000000..c8a47e3
--- /dev/null
+++ b/doc/examples/io1.c
@@ -0,0 +1,166 @@
+/**
+ * section: InputOutput
+ * synopsis: Example of custom Input/Output
+ * purpose: Demonstrate the use of xmlRegisterInputCallbacks
+ * to build a custom I/O layer, this is used in an
+ * XInclude method context to show how dynamic document can
+ * be built in a clean way.
+ * usage: io1
+ * test: io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp
+ * author: Daniel Veillard
+ * copy: see Copyright for the status of this software.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <libxml/xinclude.h>
+#include <libxml/xmlIO.h>
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+static const char *result = "<list><people>a</people><people>b</people></list>";
+static const char *cur = NULL;
+static int rlen;
+
+/**
+ * sqlMatch:
+ * @URI: an URI to test
+ *
+ * Check for an sql: query
+ *
+ * Returns 1 if yes and 0 if another Input module should be used
+ */
+static int
+sqlMatch(const char * URI) {
+ if ((URI != NULL) && (!strncmp(URI, "sql:", 4)))
+ return(1);
+ return(0);
+}
+
+/**
+ * sqlOpen:
+ * @URI: an URI to test
+ *
+ * Return a pointer to the sql: query handler, in this example simply
+ * the current pointer...
+ *
+ * Returns an Input context or NULL in case or error
+ */
+static void *
+sqlOpen(const char * URI) {
+ if ((URI == NULL) || (strncmp(URI, "sql:", 4)))
+ return(NULL);
+ cur = result;
+ rlen = strlen(result);
+ return((void *) cur);
+}
+
+/**
+ * sqlClose:
+ * @context: the read context
+ *
+ * Close the sql: query handler
+ *
+ * Returns 0 or -1 in case of error
+ */
+static int
+sqlClose(void * context) {
+ if (context == NULL) return(-1);
+ cur = NULL;
+ rlen = 0;
+ return(0);
+}
+
+/**
+ * sqlRead:
+ * @context: the read context
+ * @buffer: where to store data
+ * @len: number of bytes to read
+ *
+ * Implement an sql: query read.
+ *
+ * Returns the number of bytes read or -1 in case of error
+ */
+static int
+sqlRead(void * context, char * buffer, int len) {
+ const char *ptr = (const char *) context;
+
+ if ((context == NULL) || (buffer == NULL) || (len < 0))
+ return(-1);
+
+ if (len > rlen) len = rlen;
+ memcpy(buffer, ptr, len);
+ rlen -= len;
+ return(len);
+}
+
+const char *include = "<?xml version='1.0'?>\n\
+<document xmlns:xi=\"http://www.w3.org/2003/XInclude\">\n\
+ <p>List of people:</p>\n\
+ <xi:include href=\"sql:select_name_from_people\"/>\n\
+</document>\n";
+
+int main(void) {
+ xmlDocPtr doc;
+
+ /*
+ * this initialize the library and check potential ABI mismatches
+ * between the version it was compiled for and the actual shared
+ * library used.
+ */
+ LIBXML_TEST_VERSION
+
+ /*
+ * register the new I/O handlers
+ */
+ if (xmlRegisterInputCallbacks(sqlMatch, sqlOpen, sqlRead, sqlClose) < 0) {
+ fprintf(stderr, "failed to register SQL handler\n");
+ exit(1);
+ }
+ /*
+ * parse include into a document
+ */
+ doc = xmlReadMemory(include, strlen(include), "include.xml", NULL, 0);
+ if (doc == NULL) {
+ fprintf(stderr, "failed to parse the including file\n");
+ exit(1);
+ }
+
+ /*
+ * apply the XInclude process, this should trigger the I/O just
+ * registered.
+ */
+ if (xmlXIncludeProcess(doc) <= 0) {
+ fprintf(stderr, "XInclude processing failed\n");
+ exit(1);
+ }
+
+#ifdef LIBXML_OUTPUT_ENABLED
+ /*
+ * save the output for checking to stdout
+ */
+ xmlDocDump(stdout, doc);
+#endif
+
+ /*
+ * Free the document
+ */
+ xmlFreeDoc(doc);
+
+ /*
+ * Cleanup function for the XML library.
+ */
+ xmlCleanupParser();
+ /*
+ * this is to debug memory for regression tests
+ */
+ xmlMemoryDump();
+ return(0);
+}
+#else
+int main(void) {
+ fprintf(stderr, "XInclude support not compiled in\n");
+ exit(1);
+}
+#endif
diff --git a/doc/examples/io1.res b/doc/examples/io1.res
new file mode 100644
index 0000000..4a4c036
--- /dev/null
+++ b/doc/examples/io1.res
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<document xmlns:xi="http://www.w3.org/2003/XInclude">
+ <p>List of people:</p>
+ <list><people>a</people><people>b</people></list>
+</document>
diff --git a/doc/examples/parse1.c b/doc/examples/parse1.c
new file mode 100644
index 0000000..b44b03b
--- /dev/null
+++ b/doc/examples/parse1.c
@@ -0,0 +1,56 @@
+/**
+ * section: Parsing
+ * synopsis: Parse an XML file to a tree and free it
+ * purpose: Demonstrate the use of xmlReadFile() to read an XML file
+ * into a tree and and xmlFreeDoc() to free the resulting tree
+ * usage: parse1 test1.xml
+ * test: parse1 test1.xml
+ * author: Daniel Veillard
+ * copy: see Copyright for the status of this software.
+ */
+
+#include <stdio.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+/**
+ * example1Func:
+ * @filename: a filename or an URL
+ *
+ * Parse the resource and free the resulting tree
+ */
+static void
+example1Func(const char *filename) {
+ xmlDocPtr doc; /* the resulting document tree */
+
+ doc = xmlReadFile(filename, NULL, 0);
+ if (doc == NULL) {
+ fprintf(stderr, "Failed to parse %s\n", filename);
+ return;
+ }
+ xmlFreeDoc(doc);
+}
+
+int main(int argc, char **argv) {
+ if (argc != 2)
+ return(1);
+
+ /*
+ * this initialize the library and check potential ABI mismatches
+ * between the version it was compiled for and the actual shared
+ * library used.
+ */
+ LIBXML_TEST_VERSION
+
+ example1Func(argv[1]);
+
+ /*
+ * Cleanup function for the XML library.
+ */
+ xmlCleanupParser();
+ /*
+ * this is to debug memory for regression tests
+ */
+ xmlMemoryDump();
+ return(0);
+}
diff --git a/doc/examples/parse2.c b/doc/examples/parse2.c
new file mode 100644
index 0000000..aed7676
--- /dev/null
+++ b/doc/examples/parse2.c
@@ -0,0 +1,72 @@
+/**
+ * section: Parsing
+ * synopsis: Parse and validate an XML file to a tree and free the result
+ * purpose: Create a parser context for an XML file, then parse and validate
+ * the file, creating a tree, check the validation result
+ * and xmlFreeDoc() to free the resulting tree.
+ * usage: parse2 test2.xml
+ * test: parse2 test2.xml
+ * author: Daniel Veillard
+ * copy: see Copyright for the status of this software.
+ */
+
+#include <stdio.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+/**
+ * exampleFunc:
+ * @filename: a filename or an URL
+ *
+ * Parse and validate the resource and free the resulting tree
+ */
+static void
+exampleFunc(const char *filename) {
+ xmlParserCtxtPtr ctxt; /* the parser context */
+ xmlDocPtr doc; /* the resulting document tree */
+
+ /* create a parser context */
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ fprintf(stderr, "Failed to allocate parser context\n");
+ return;
+ }
+ /* parse the file, activating the DTD validation option */
+ doc = xmlCtxtReadFile(ctxt, filename, NULL, XML_PARSE_DTDVALID);
+ /* check if parsing suceeded */
+ if (doc == NULL) {
+ fprintf(stderr, "Failed to parse %s\n", filename);
+ } else {
+ /* check if validation suceeded */
+ if (ctxt->valid == 0)
+ fprintf(stderr, "Failed to validate %s\n", filename);
+ /* free up the resulting document */
+ xmlFreeDoc(doc);
+ }
+ /* free up the parser context */
+ xmlFreeParserCtxt(ctxt);
+}
+
+int main(int argc, char **argv) {
+ if (argc != 2)
+ return(1);
+
+ /*
+ * this initialize the library and check potential ABI mismatches
+ * between the version it was compiled for and the actual shared
+ * library used.
+ */
+ LIBXML_TEST_VERSION
+
+ exampleFunc(argv[1]);
+
+ /*
+ * Cleanup function for the XML library.
+ */
+ xmlCleanupParser();
+ /*
+ * this is to debug memory for regression tests
+ */
+ xmlMemoryDump();
+ return(0);
+}
diff --git a/doc/examples/reader1.c b/doc/examples/reader1.c
new file mode 100644
index 0000000..90db2a1
--- /dev/null
+++ b/doc/examples/reader1.c
@@ -0,0 +1,107 @@
+/**
+ * section: xmlReader
+ * synopsis: Parse an XML file with an xmlReader
+ * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file
+ * and dump the informations about the nodes found in the process.
+ * (Note that the XMLReader functions require libxml2 version later
+ * than 2.6.)
+ * usage: reader1 <filename>
+ * test: reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp
+ * author: Daniel Veillard
+ * copy: see Copyright for the status of this software.
+ */
+
+#include <stdio.h>
+#include <libxml/xmlreader.h>
+
+#ifdef LIBXML_READER_ENABLED
+
+/**
+ * processNode:
+ * @reader: the xmlReader
+ *
+ * Dump information about the current node
+ */
+static void
+processNode(xmlTextReaderPtr reader) {
+ const xmlChar *name, *value;
+
+ name = xmlTextReaderConstName(reader);
+ if (name == NULL)
+ name = BAD_CAST "--";
+
+ value = xmlTextReaderConstValue(reader);
+
+ printf("%d %d %s %d %d",
+ xmlTextReaderDepth(reader),
+ xmlTextReaderNodeType(reader),
+ name,
+ xmlTextReaderIsEmptyElement(reader),
+ xmlTextReaderHasValue(reader));
+ if (value == NULL)
+ printf("\n");
+ else {
+ if (xmlStrlen(value) > 40)
+ printf(" %.40s...\n", value);
+ else
+ printf(" %s\n", value);
+ }
+}
+
+/**
+ * streamFile:
+ * @filename: the file name to parse
+ *
+ * Parse and print information about an XML file.
+ */
+static void
+streamFile(const char *filename) {
+ xmlTextReaderPtr reader;
+ int ret;
+
+ reader = xmlReaderForFile(filename, NULL, 0);
+ if (reader != NULL) {
+ ret = xmlTextReaderRead(reader);
+ while (ret == 1) {
+ processNode(reader);
+ ret = xmlTextReaderRead(reader);
+ }
+ xmlFreeTextReader(reader);
+ if (ret != 0) {
+ fprintf(stderr, "%s : failed to parse\n", filename);
+ }
+ } else {
+ fprintf(stderr, "Unable to open %s\n", filename);
+ }
+}
+
+int main(int argc, char **argv) {
+ if (argc != 2)
+ return(1);
+
+ /*
+ * this initialize the library and check potential ABI mismatches
+ * between the version it was compiled for and the actual shared
+ * library used.
+ */
+ LIBXML_TEST_VERSION
+
+ streamFile(argv[1]);
+
+ /*
+ * Cleanup function for the XML library.
+ */
+ xmlCleanupParser();
+ /*
+ * this is to debug memory for regression tests
+ */
+ xmlMemoryDump();
+ return(0);
+}
+
+#else
+int main(void) {
+ fprintf(stderr, "XInclude support not compiled in\n");
+ exit(1);
+}
+#endif
diff --git a/doc/examples/reader1.res b/doc/examples/reader1.res
new file mode 100644
index 0000000..eb48d85
--- /dev/null
+++ b/doc/examples/reader1.res
@@ -0,0 +1,14 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 1 src 1 0
+1 14 #text 0 1
+
+1 1 dest 1 0
+1 14 #text 0 1
+
+1 1 src 1 0
+1 14 #text 0 1
+
+0 15 doc 0 0
diff --git a/doc/examples/reader2.c b/doc/examples/reader2.c
new file mode 100644
index 0000000..c32ada5
--- /dev/null
+++ b/doc/examples/reader2.c
@@ -0,0 +1,122 @@
+/**
+ * section: xmlReader
+ * synopsis: Parse and validate an XML file with an xmlReader
+ * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file
+ * validating the content in the process and activating options
+ * like entities substitution, and DTD attributes defaulting.
+ * (Note that the XMLReader functions require libxml2 version later
+ * than 2.6.)
+ * usage: reader2 <valid_xml_filename>
+ * test: reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp
+ * author: Daniel Veillard
+ * copy: see Copyright for the status of this software.
+ */
+
+#include <stdio.h>
+#include <libxml/xmlreader.h>
+
+#ifdef LIBXML_READER_ENABLED
+
+/**
+ * processNode:
+ * @reader: the xmlReader
+ *
+ * Dump information about the current node
+ */
+static void
+processNode(xmlTextReaderPtr reader) {
+ const xmlChar *name, *value;
+
+ name = xmlTextReaderConstName(reader);
+ if (name == NULL)
+ name = BAD_CAST "--";
+
+ value = xmlTextReaderConstValue(reader);
+
+ printf("%d %d %s %d %d",
+ xmlTextReaderDepth(reader),
+ xmlTextReaderNodeType(reader),
+ name,
+ xmlTextReaderIsEmptyElement(reader),
+ xmlTextReaderHasValue(reader));
+ if (value == NULL)
+ printf("\n");
+ else {
+ if (xmlStrlen(value) > 40)
+ printf(" %.40s...\n", value);
+ else
+ printf(" %s\n", value);
+ }
+}
+
+/**
+ * streamFile:
+ * @filename: the file name to parse
+ *
+ * Parse, validate and print information about an XML file.
+ */
+static void
+streamFile(const char *filename) {
+ xmlTextReaderPtr reader;
+ int ret;
+
+
+ /*
+ * Pass some special parsing options to activate DTD attribute defaulting,
+ * entities substitution and DTD validation
+ */
+ reader = xmlReaderForFile(filename, NULL,
+ XML_PARSE_DTDATTR | /* default DTD attributes */
+ XML_PARSE_NOENT | /* substitute entities */
+ XML_PARSE_DTDVALID); /* validate with the DTD */
+ if (reader != NULL) {
+ ret = xmlTextReaderRead(reader);
+ while (ret == 1) {
+ processNode(reader);
+ ret = xmlTextReaderRead(reader);
+ }
+ /*
+ * Once the document has been fully parsed check the validation results
+ */
+ if (xmlTextReaderIsValid(reader) != 1) {
+ fprintf(stderr, "Document %s does not validate\n", filename);
+ }
+ xmlFreeTextReader(reader);
+ if (ret != 0) {
+ fprintf(stderr, "%s : failed to parse\n", filename);
+ }
+ } else {
+ fprintf(stderr, "Unable to open %s\n", filename);
+ }
+}
+
+int main(int argc, char **argv) {
+ if (argc != 2)
+ return(1);
+
+ /*
+ * this initialize the library and check potential ABI mismatches
+ * between the version it was compiled for and the actual shared
+ * library used.
+ */
+ LIBXML_TEST_VERSION
+
+ streamFile(argv[1]);
+
+ /*
+ * Cleanup function for the XML library.
+ */
+ xmlCleanupParser();
+ /*
+ * this is to debug memory for regression tests
+ */
+ xmlMemoryDump();
+ return(0);
+}
+
+#else
+int main(void) {
+ fprintf(stderr, "XInclude support not compiled in\n");
+ exit(1);
+}
+#endif
diff --git a/doc/examples/reader3.c b/doc/examples/reader3.c
new file mode 100644
index 0000000..2da7532
--- /dev/null
+++ b/doc/examples/reader3.c
@@ -0,0 +1,119 @@
+/**
+ * section: xmlReader
+ * synopsis: Show how to extract subdocuments with xmlReader
+ * purpose: Demonstrate the use of xmlTextReaderPreservePattern()
+ * to parse an XML file with the xmlReader while collecting
+ * only some subparts of the document.
+ * (Note that the XMLReader functions require libxml2 version later
+ * than 2.6.)
+ * usage: reader3
+ * test: reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp
+ * author: Daniel Veillard
+ * copy: see Copyright for the status of this software.
+ */
+
+#include <stdio.h>
+#include <libxml/xmlreader.h>
+
+#ifdef LIBXML_READER_ENABLED
+
+/**
+ * streamFile:
+ * @filename: the file name to parse
+ *
+ * Parse and print information about an XML file.
+ *
+ * Returns the resulting doc with just the elements preserved.
+ */
+static xmlDocPtr
+extractFile(const char *filename, const xmlChar *pattern) {
+ xmlDocPtr doc;
+ xmlTextReaderPtr reader;
+ int ret;
+
+ /*
+ * build an xmlReader for that file
+ */
+ reader = xmlReaderForFile(filename, NULL, 0);
+ if (reader != NULL) {
+ /*
+ * add the pattern to preserve
+ */
+ if (xmlTextReaderPreservePattern(reader, pattern, NULL) < 0) {
+ fprintf(stderr, "%s : failed add preserve pattern %s\n",
+ filename, (const char *) pattern);
+ }
+ /*
+ * Parse and traverse the tree, collecting the nodes in the process
+ */
+ ret = xmlTextReaderRead(reader);
+ while (ret == 1) {
+ ret = xmlTextReaderRead(reader);
+ }
+ if (ret != 0) {
+ fprintf(stderr, "%s : failed to parse\n", filename);
+ xmlFreeTextReader(reader);
+ return(NULL);
+ }
+ /*
+ * get the resulting nodes
+ */
+ doc = xmlTextReaderCurrentDoc(reader);
+ /*
+ * Free up the reader
+ */
+ xmlFreeTextReader(reader);
+ } else {
+ fprintf(stderr, "Unable to open %s\n", filename);
+ return(NULL);
+ }
+ return(doc);
+}
+
+int main(int argc, char **argv) {
+ const char *filename = "test3.xml";
+ const char *pattern = "preserved";
+ xmlDocPtr doc;
+
+ if (argc == 3) {
+ filename = argv[1];
+ pattern = argv[2];
+ }
+
+ /*
+ * this initialize the library and check potential ABI mismatches
+ * between the version it was compiled for and the actual shared
+ * library used.
+ */
+ LIBXML_TEST_VERSION
+
+ doc = extractFile(filename, (const xmlChar *) pattern);
+ if (doc != NULL) {
+ /*
+ * ouptut the result.
+ */
+ xmlDocDump(stdout, doc);
+ /*
+ * don't forget to free up the doc
+ */
+ xmlFreeDoc(doc);
+ }
+
+
+ /*
+ * Cleanup function for the XML library.
+ */
+ xmlCleanupParser();
+ /*
+ * this is to debug memory for regression tests
+ */
+ xmlMemoryDump();
+ return(0);
+}
+
+#else
+int main(void) {
+ fprintf(stderr, "XInclude support not compiled in\n");
+ exit(1);
+}
+#endif
diff --git a/doc/examples/reader3.res b/doc/examples/reader3.res
new file mode 100644
index 0000000..20e2e82
--- /dev/null
+++ b/doc/examples/reader3.res
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<doc><parent><preserved/><preserved>
+ content1
+ <child1/>
+ <child2>content2</child2>
+ <preserved>too</preserved>
+ <child2>content3</child2>
+ <preserved/>
+ <child2>content4</child2>
+ <preserved/>
+ <child2>content5</child2>
+ content6
+ </preserved><preserved/><preserved/></parent></doc>
diff --git a/doc/examples/test1.xml b/doc/examples/test1.xml
new file mode 100644
index 0000000..69d62f2
--- /dev/null
+++ b/doc/examples/test1.xml
@@ -0,0 +1 @@
+<doc/>
diff --git a/doc/examples/test2.xml b/doc/examples/test2.xml
new file mode 100644
index 0000000..7390f5e
--- /dev/null
+++ b/doc/examples/test2.xml
@@ -0,0 +1,13 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (src | dest)*>
+<!ELEMENT src EMPTY>
+<!ELEMENT dest EMPTY>
+<!ATTLIST src ref IDREF #IMPLIED>
+<!ATTLIST dest id ID #IMPLIED>
+]>
+<doc>
+ <src ref="foo"/>
+ <dest id="foo"/>
+ <src ref="foo"/>
+</doc>
+
diff --git a/doc/examples/test3.xml b/doc/examples/test3.xml
new file mode 100644
index 0000000..4d0828f
--- /dev/null
+++ b/doc/examples/test3.xml
@@ -0,0 +1,39 @@
+<doc>
+ <parent>
+ <discarded>
+ <discarded/>
+ </discarded>
+ <preserved/>
+ This text node must be discarded
+ <discarded>
+ <discarded/>
+ </discarded>
+ <preserved>
+ content1
+ <child1></child1>
+ <child2>content2</child2>
+ <preserved>too</preserved>
+ <child2>content3</child2>
+ <preserved></preserved>
+ <child2>content4</child2>
+ <preserved/>
+ <child2>content5</child2>
+ content6
+ </preserved>
+ This text node must be discarded
+ <discarded>
+ <discarded/>
+ </discarded>
+ This text node must be discarded
+ <preserved></preserved>
+ This text node must be discarded
+ <preserved/>
+ This text node must be discarded
+ <discarded>
+ <discarded/>
+ </discarded>
+ This text node must be discarded
+ </parent>
+</doc>
+
+
diff --git a/doc/examples/testWriter.c b/doc/examples/testWriter.c
new file mode 100644
index 0000000..02f9eb7
--- /dev/null
+++ b/doc/examples/testWriter.c
@@ -0,0 +1,1198 @@
+/**
+ * section: xmlWriter
+ * synopsis: use various APIs for the xmlWriter
+ * purpose: tests a number of APIs for the xmlWriter, especially
+ * the various methods to write to a filename, to a memory
+ * buffer, to a new document, or to a subtree. It shows how to
+ * do encoding string conversions too. The resulting
+ * documents are then serialized.
+ * usage: testWriter
+ * test: testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res
+ * author: Alfred Mickautsch
+ * copy: see Copyright for the status of this software.
+ */
+#include <stdio.h>
+#include <string.h>
+#include <libxml/encoding.h>
+#include <libxml/xmlwriter.h>
+
+#if defined(LIBXML_WRITER_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+
+#define MY_ENCODING "ISO-8859-1"
+
+void testXmlwriterFilename(const char *uri);
+void testXmlwriterMemory(const char *file);
+void testXmlwriterDoc(const char *file);
+void testXmlwriterTree(const char *file);
+xmlChar *ConvertInput(const char *in, const char *encoding);
+
+int
+main(void)
+{
+ /*
+ * this initialize the library and check potential ABI mismatches
+ * between the version it was compiled for and the actual shared
+ * library used.
+ */
+ LIBXML_TEST_VERSION
+
+ /* first, the file version */
+ testXmlwriterFilename("writer1.res");
+
+ /* next, the memory version */
+ testXmlwriterMemory("writer2.res");
+
+ /* next, the DOM version */
+ testXmlwriterDoc("writer3.res");
+
+ /* next, the tree version */
+ testXmlwriterTree("writer4.res");
+
+ /*
+ * Cleanup function for the XML library.
+ */
+ xmlCleanupParser();
+ /*
+ * this is to debug memory for regression tests
+ */
+ xmlMemoryDump();
+ return 0;
+}
+
+/**
+ * testXmlwriterFilename:
+ * @uri: the output URI
+ *
+ * test the xmlWriter interface when writing to a new file
+ */
+void
+testXmlwriterFilename(const char *uri)
+{
+ int rc;
+ xmlTextWriterPtr writer;
+ xmlChar *tmp;
+
+ /* Create a new XmlWriter for uri, with no compression. */
+ writer = xmlNewTextWriterFilename(uri, 0);
+ if (writer == NULL) {
+ printf("testXmlwriterFilename: Error creating the xml writer\n");
+ return;
+ }
+
+ /* Start the document with the xml default for the version,
+ * encoding ISO 8858-1 and the default for the standalone
+ * declaration. */
+ rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterStartDocument\n");
+ return;
+ }
+
+ /* Start an element named "EXAMPLE". Since thist is the first
+ * element, this will be the root element of the document. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write a comment as child of EXAMPLE.
+ * Please observe, that the input to the xmlTextWriter functions
+ * HAS to be in UTF-8, even if the output XML is encoded
+ * in iso-8859-1 */
+ tmp = ConvertInput("This is a comment with special chars: <äöü>",
+ MY_ENCODING);
+ rc = xmlTextWriterWriteComment(writer, tmp);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteComment\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Start an element named "ORDER" as child of EXAMPLE. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Add an attribute with name "version" and value "1.0" to ORDER. */
+ rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
+ BAD_CAST "1.0");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteAttribute\n");
+ return;
+ }
+
+ /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
+ rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
+ BAD_CAST "de");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteAttribute\n");
+ return;
+ }
+
+ /* Write a comment as child of ORDER */
+ tmp = ConvertInput("<äöü>", MY_ENCODING);
+ rc = xmlTextWriterWriteFormatComment(writer,
+ "This is another comment with special chars: %s",
+ tmp);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatComment\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Start an element named "HEADER" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "X_ORDER_ID" as child of HEADER. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
+ "%010d", 53535L);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Write an element named "CUSTOMER_ID" as child of HEADER. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
+ "%d", 1010);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Write an element named "NAME_1" as child of HEADER. */
+ tmp = ConvertInput("Müller", MY_ENCODING);
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Write an element named "NAME_2" as child of HEADER. */
+ tmp = ConvertInput("Jörg", MY_ENCODING);
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Close the element named HEADER. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRIES" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRY" as child of ENTRIES. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "ARTICLE" as child of ENTRY. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
+ BAD_CAST "<Test>");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Write an element named "ENTRY_NO" as child of ENTRY. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
+ 10);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRY. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRY" as child of ENTRIES. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "ARTICLE" as child of ENTRY. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
+ BAD_CAST "<Test 2>");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Write an element named "ENTRY_NO" as child of ENTRY. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
+ 20);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRY. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRIES. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "FOOTER" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "TEXT" as child of FOOTER. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
+ BAD_CAST "This is a text.");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Close the element named FOOTER. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Here we could close the elements ORDER and EXAMPLE using the
+ * function xmlTextWriterEndElement, but since we do not want to
+ * write any other elements, we simply call xmlTextWriterEndDocument,
+ * which will do all the work. */
+ rc = xmlTextWriterEndDocument(writer);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterFilename: Error at xmlTextWriterEndDocument\n");
+ return;
+ }
+
+ xmlFreeTextWriter(writer);
+}
+
+/**
+ * testXmlwriterMemory:
+ * @file: the output file
+ *
+ * test the xmlWriter interface when writing to memory
+ */
+void
+testXmlwriterMemory(const char *file)
+{
+ int rc;
+ xmlTextWriterPtr writer;
+ xmlBufferPtr buf;
+ xmlChar *tmp;
+ FILE *fp;
+
+ /* Create a new XML buffer, to which the XML document will be
+ * written */
+ buf = xmlBufferCreate();
+ if (buf == NULL) {
+ printf("testXmlwriterMemory: Error creating the xml buffer\n");
+ return;
+ }
+
+ /* Create a new XmlWriter for memory, with no compression.
+ * Remark: there is no compression for this kind of xmlTextWriter */
+ writer = xmlNewTextWriterMemory(buf, 0);
+ if (writer == NULL) {
+ printf("testXmlwriterMemory: Error creating the xml writer\n");
+ return;
+ }
+
+ /* Start the document with the xml default for the version,
+ * encoding ISO 8858-1 and the default for the standalone
+ * declaration. */
+ rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterStartDocument\n");
+ return;
+ }
+
+ /* Start an element named "EXAMPLE". Since thist is the first
+ * element, this will be the root element of the document. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write a comment as child of EXAMPLE.
+ * Please observe, that the input to the xmlTextWriter functions
+ * HAS to be in UTF-8, even if the output XML is encoded
+ * in iso-8859-1 */
+ tmp = ConvertInput("This is a comment with special chars: <äöü>",
+ MY_ENCODING);
+ rc = xmlTextWriterWriteComment(writer, tmp);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteComment\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Start an element named "ORDER" as child of EXAMPLE. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Add an attribute with name "version" and value "1.0" to ORDER. */
+ rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
+ BAD_CAST "1.0");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteAttribute\n");
+ return;
+ }
+
+ /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
+ rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
+ BAD_CAST "de");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteAttribute\n");
+ return;
+ }
+
+ /* Write a comment as child of ORDER */
+ tmp = ConvertInput("<äöü>", MY_ENCODING);
+ rc = xmlTextWriterWriteFormatComment(writer,
+ "This is another comment with special chars: %s",
+ tmp);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatComment\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Start an element named "HEADER" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "X_ORDER_ID" as child of HEADER. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
+ "%010d", 53535L);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Write an element named "CUSTOMER_ID" as child of HEADER. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
+ "%d", 1010);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Write an element named "NAME_1" as child of HEADER. */
+ tmp = ConvertInput("Müller", MY_ENCODING);
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Write an element named "NAME_2" as child of HEADER. */
+ tmp = ConvertInput("Jörg", MY_ENCODING);
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
+
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Close the element named HEADER. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRIES" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRY" as child of ENTRIES. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "ARTICLE" as child of ENTRY. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
+ BAD_CAST "<Test>");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Write an element named "ENTRY_NO" as child of ENTRY. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
+ 10);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRY. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRY" as child of ENTRIES. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "ARTICLE" as child of ENTRY. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
+ BAD_CAST "<Test 2>");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Write an element named "ENTRY_NO" as child of ENTRY. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
+ 20);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRY. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRIES. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "FOOTER" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "TEXT" as child of FOOTER. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
+ BAD_CAST "This is a text.");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterMemory: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Close the element named FOOTER. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterMemory: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Here we could close the elements ORDER and EXAMPLE using the
+ * function xmlTextWriterEndElement, but since we do not want to
+ * write any other elements, we simply call xmlTextWriterEndDocument,
+ * which will do all the work. */
+ rc = xmlTextWriterEndDocument(writer);
+ if (rc < 0) {
+ printf("testXmlwriterMemory: Error at xmlTextWriterEndDocument\n");
+ return;
+ }
+
+ xmlFreeTextWriter(writer);
+
+ fp = fopen(file, "w");
+ if (fp == NULL) {
+ printf("testXmlwriterMemory: Error at fopen\n");
+ return;
+ }
+
+ fprintf(fp, "%s", (const char *) buf->content);
+
+ fclose(fp);
+
+ xmlBufferFree(buf);
+}
+
+/**
+ * testXmlwriterDoc:
+ * @file: the output file
+ *
+ * test the xmlWriter interface when creating a new document
+ */
+void
+testXmlwriterDoc(const char *file)
+{
+ int rc;
+ xmlTextWriterPtr writer;
+ xmlChar *tmp;
+ xmlDocPtr doc;
+
+
+ /* Create a new XmlWriter for DOM, with no compression. */
+ writer = xmlNewTextWriterDoc(&doc, 0);
+ if (writer == NULL) {
+ printf("testXmlwriterDoc: Error creating the xml writer\n");
+ return;
+ }
+
+ /* Start the document with the xml default for the version,
+ * encoding ISO 8858-1 and the default for the standalone
+ * declaration. */
+ rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterStartDocument\n");
+ return;
+ }
+
+ /* Start an element named "EXAMPLE". Since thist is the first
+ * element, this will be the root element of the document. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "EXAMPLE");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write a comment as child of EXAMPLE.
+ * Please observe, that the input to the xmlTextWriter functions
+ * HAS to be in UTF-8, even if the output XML is encoded
+ * in iso-8859-1 */
+ tmp = ConvertInput("This is a comment with special chars: <äöü>",
+ MY_ENCODING);
+ rc = xmlTextWriterWriteComment(writer, tmp);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterWriteComment\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Start an element named "ORDER" as child of EXAMPLE. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Add an attribute with name "version" and value "1.0" to ORDER. */
+ rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
+ BAD_CAST "1.0");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterWriteAttribute\n");
+ return;
+ }
+
+ /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
+ rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
+ BAD_CAST "de");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterWriteAttribute\n");
+ return;
+ }
+
+ /* Write a comment as child of ORDER */
+ tmp = ConvertInput("<äöü>", MY_ENCODING);
+ rc = xmlTextWriterWriteFormatComment(writer,
+ "This is another comment with special chars: %s",
+ tmp);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatComment\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Start an element named "HEADER" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "X_ORDER_ID" as child of HEADER. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
+ "%010d", 53535L);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Write an element named "CUSTOMER_ID" as child of HEADER. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
+ "%d", 1010);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Write an element named "NAME_1" as child of HEADER. */
+ tmp = ConvertInput("Müller", MY_ENCODING);
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Write an element named "NAME_2" as child of HEADER. */
+ tmp = ConvertInput("Jörg", MY_ENCODING);
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Close the element named HEADER. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRIES" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRY" as child of ENTRIES. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "ARTICLE" as child of ENTRY. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
+ BAD_CAST "<Test>");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Write an element named "ENTRY_NO" as child of ENTRY. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
+ 10);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRY. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRY" as child of ENTRIES. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "ARTICLE" as child of ENTRY. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
+ BAD_CAST "<Test 2>");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Write an element named "ENTRY_NO" as child of ENTRY. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
+ 20);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterDoc: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRY. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRIES. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "FOOTER" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "TEXT" as child of FOOTER. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
+ BAD_CAST "This is a text.");
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Close the element named FOOTER. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Here we could close the elements ORDER and EXAMPLE using the
+ * function xmlTextWriterEndElement, but since we do not want to
+ * write any other elements, we simply call xmlTextWriterEndDocument,
+ * which will do all the work. */
+ rc = xmlTextWriterEndDocument(writer);
+ if (rc < 0) {
+ printf("testXmlwriterDoc: Error at xmlTextWriterEndDocument\n");
+ return;
+ }
+
+ xmlFreeTextWriter(writer);
+
+ xmlSaveFileEnc(file, doc, MY_ENCODING);
+
+ xmlFreeDoc(doc);
+}
+
+/**
+ * testXmlwriterTree:
+ * @file: the output file
+ *
+ * test the xmlWriter interface when writing to a subtree
+ */
+void
+testXmlwriterTree(const char *file)
+{
+ int rc;
+ xmlTextWriterPtr writer;
+ xmlDocPtr doc;
+ xmlNodePtr node;
+ xmlChar *tmp;
+
+ /* Create a new XML DOM tree, to which the XML document will be
+ * written */
+ doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION);
+ if (doc == NULL) {
+ printf
+ ("testXmlwriterTree: Error creating the xml document tree\n");
+ return;
+ }
+
+ /* Create a new XML node, to which the XML document will be
+ * appended */
+ node = xmlNewDocNode(doc, NULL, BAD_CAST "EXAMPLE", NULL);
+ if (node == NULL) {
+ printf("testXmlwriterTree: Error creating the xml node\n");
+ return;
+ }
+
+ /* Make ELEMENT the root node of the tree */
+ xmlDocSetRootElement(doc, node);
+
+ /* Create a new XmlWriter for DOM tree, with no compression. */
+ writer = xmlNewTextWriterTree(doc, node, 0);
+ if (writer == NULL) {
+ printf("testXmlwriterTree: Error creating the xml writer\n");
+ return;
+ }
+
+ /* Start the document with the xml default for the version,
+ * encoding ISO 8858-1 and the default for the standalone
+ * declaration. */
+ rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterStartDocument\n");
+ return;
+ }
+
+ /* Write a comment as child of EXAMPLE.
+ * Please observe, that the input to the xmlTextWriter functions
+ * HAS to be in UTF-8, even if the output XML is encoded
+ * in iso-8859-1 */
+ tmp = ConvertInput("This is a comment with special chars: <äöü>",
+ MY_ENCODING);
+ rc = xmlTextWriterWriteComment(writer, tmp);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterWriteComment\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Start an element named "ORDER" as child of EXAMPLE. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ORDER");
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Add an attribute with name "version" and value "1.0" to ORDER. */
+ rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "version",
+ BAD_CAST "1.0");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterTree: Error at xmlTextWriterWriteAttribute\n");
+ return;
+ }
+
+ /* Add an attribute with name "xml:lang" and value "de" to ORDER. */
+ rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang",
+ BAD_CAST "de");
+ if (rc < 0) {
+ printf
+ ("testXmlwriterTree: Error at xmlTextWriterWriteAttribute\n");
+ return;
+ }
+
+ /* Write a comment as child of ORDER */
+ tmp = ConvertInput("<äöü>", MY_ENCODING);
+ rc = xmlTextWriterWriteFormatComment(writer,
+ "This is another comment with special chars: %s",
+ tmp);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterTree: Error at xmlTextWriterWriteFormatComment\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Start an element named "HEADER" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "HEADER");
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "X_ORDER_ID" as child of HEADER. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "X_ORDER_ID",
+ "%010d", 53535L);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Write an element named "CUSTOMER_ID" as child of HEADER. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "CUSTOMER_ID",
+ "%d", 1010);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Write an element named "NAME_1" as child of HEADER. */
+ tmp = ConvertInput("Müller", MY_ENCODING);
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_1", tmp);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Write an element named "NAME_2" as child of HEADER. */
+ tmp = ConvertInput("Jörg", MY_ENCODING);
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "NAME_2", tmp);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+ if (tmp != NULL) xmlFree(tmp);
+
+ /* Close the element named HEADER. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRIES" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRIES");
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRY" as child of ENTRIES. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "ARTICLE" as child of ENTRY. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
+ BAD_CAST "<Test>");
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Write an element named "ENTRY_NO" as child of ENTRY. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
+ 10);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRY. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "ENTRY" as child of ENTRIES. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "ENTRY");
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "ARTICLE" as child of ENTRY. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "ARTICLE",
+ BAD_CAST "<Test 2>");
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Write an element named "ENTRY_NO" as child of ENTRY. */
+ rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENTRY_NO", "%d",
+ 20);
+ if (rc < 0) {
+ printf
+ ("testXmlwriterTree: Error at xmlTextWriterWriteFormatElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRY. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Close the element named ENTRIES. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Start an element named "FOOTER" as child of ORDER. */
+ rc = xmlTextWriterStartElement(writer, BAD_CAST "FOOTER");
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterStartElement\n");
+ return;
+ }
+
+ /* Write an element named "TEXT" as child of FOOTER. */
+ rc = xmlTextWriterWriteElement(writer, BAD_CAST "TEXT",
+ BAD_CAST "This is a text.");
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterWriteElement\n");
+ return;
+ }
+
+ /* Close the element named FOOTER. */
+ rc = xmlTextWriterEndElement(writer);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterEndElement\n");
+ return;
+ }
+
+ /* Here we could close the elements ORDER and EXAMPLE using the
+ * function xmlTextWriterEndElement, but since we do not want to
+ * write any other elements, we simply call xmlTextWriterEndDocument,
+ * which will do all the work. */
+ rc = xmlTextWriterEndDocument(writer);
+ if (rc < 0) {
+ printf("testXmlwriterTree: Error at xmlTextWriterEndDocument\n");
+ return;
+ }
+
+ xmlFreeTextWriter(writer);
+
+ xmlSaveFileEnc(file, doc, MY_ENCODING);
+
+ xmlFreeDoc(doc);
+}
+
+/**
+ * ConvertInput:
+ * @in: string in a given encoding
+ * @encoding: the encoding used
+ *
+ * Converts @in into UTF-8 for processing with libxml2 APIs
+ *
+ * Returns the converted UTF-8 string, or NULL in case of error.
+ */
+xmlChar *
+ConvertInput(const char *in, const char *encoding)
+{
+ xmlChar *out;
+ int ret;
+ int size;
+ int out_size;
+ int temp;
+ xmlCharEncodingHandlerPtr handler;
+
+ if (in == 0)
+ return 0;
+
+ handler = xmlFindCharEncodingHandler(encoding);
+
+ if (!handler) {
+ printf("ConvertInput: no encoding handler found for '%s'\n",
+ encoding ? encoding : "");
+ return 0;
+ }
+
+ size = (int) strlen(in) + 1;
+ out_size = size * 2 - 1;
+ out = (unsigned char *) xmlMalloc((size_t) out_size);
+
+ if (out != 0) {
+ temp = size - 1;
+ ret = handler->input(out, &out_size, (const xmlChar *) in, &temp);
+ if (ret || temp - size + 1) {
+ if (ret) {
+ printf("ConvertInput: conversion wasn't successful.\n");
+ } else {
+ printf
+ ("ConvertInput: conversion wasn't successful. converted: %i octets.\n",
+ temp);
+ }
+
+ xmlFree(out);
+ out = 0;
+ } else {
+ out = (unsigned char *) xmlRealloc(out, out_size + 1);
+ out[out_size] = 0; /*null terminating out */
+ }
+ } else {
+ printf("ConvertInput: no mem\n");
+ }
+
+ return out;
+}
+
+#else
+int main(void) {
+ fprintf(stderr, "Writer or output support not compiled in\n");
+ exit(1);
+}
+#endif
diff --git a/doc/examples/tree1.c b/doc/examples/tree1.c
new file mode 100644
index 0000000..8a303e2
--- /dev/null
+++ b/doc/examples/tree1.c
@@ -0,0 +1,94 @@
+/**
+ * section: Tree
+ * synopsis: Navigates a tree to print element names
+ * purpose: Parse a file to a tree, use xmlDocGetRootElement() to
+ * get the root element, then walk the document and print
+ * all the element name in document order.
+ * usage: tree1 filename_or_URL
+ * test: tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp
+ * author: Dodji Seketeli
+ * copy: see Copyright for the status of this software.
+ */
+#include <stdio.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_TREE_ENABLED
+
+/*
+ *To compile this file using gcc you can type
+ *gcc `xml2-config --cflags --libs` -o xmlexample libxml2-example.c
+ */
+
+/**
+ * print_element_names:
+ * @a_node: the initial xml node to consider.
+ *
+ * Prints the names of the all the xml elements
+ * that are siblings or children of a given xml node.
+ */
+static void
+print_element_names(xmlNode * a_node)
+{
+ xmlNode *cur_node = NULL;
+
+ for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
+ if (cur_node->type == XML_ELEMENT_NODE) {
+ printf("node type: Element, name: %s\n", cur_node->name);
+ }
+
+ print_element_names(cur_node->children);
+ }
+}
+
+
+/**
+ * Simple example to parse a file called "file.xml",
+ * walk down the DOM, and print the name of the
+ * xml elements nodes.
+ */
+int
+main(int argc, char **argv)
+{
+ xmlDoc *doc = NULL;
+ xmlNode *root_element = NULL;
+
+ if (argc != 2)
+ return(1);
+
+ /*
+ * this initialize the library and check potential ABI mismatches
+ * between the version it was compiled for and the actual shared
+ * library used.
+ */
+ LIBXML_TEST_VERSION
+
+ /*parse the file and get the DOM */
+ doc = xmlParseFile(argv[1]);
+
+ if (doc == NULL) {
+ printf("error: could not parse file file.xml\n");
+ }
+
+ /*Get the root element node */
+ root_element = xmlDocGetRootElement(doc);
+
+ print_element_names(root_element);
+
+ /*free the document */
+ xmlFreeDoc(doc);
+
+ /*
+ *Free the global variables that may
+ *have been allocated by the parser.
+ */
+ xmlCleanupParser();
+
+ return 0;
+}
+#else
+int main(void) {
+ fprintf(stderr, "Tree support not compiled in\n");
+ exit(1);
+}
+#endif
diff --git a/doc/examples/tree1.res b/doc/examples/tree1.res
new file mode 100644
index 0000000..7b14ad0
--- /dev/null
+++ b/doc/examples/tree1.res
@@ -0,0 +1,4 @@
+node type: Element, name: doc
+node type: Element, name: src
+node type: Element, name: dest
+node type: Element, name: src
diff --git a/doc/examples/tree2.c b/doc/examples/tree2.c
new file mode 100644
index 0000000..3ab2179
--- /dev/null
+++ b/doc/examples/tree2.c
@@ -0,0 +1,118 @@
+/*
+ * section: Tree
+ * synopsis: Creates a tree
+ * purpose: Shows how to create document, nodes and dump it to stdout or file.
+ * usage: tree2 <filename> -Default output: stdout
+ * test: tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp
+ * author: Lucas Brasilino <brasilino@recife.pe.gov.br>
+ * copy: see Copyright for the status of this software
+ */
+
+#include <stdio.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_TREE_ENABLED
+
+/*
+ *To compile this file using gcc you can type
+ *gcc `xml2-config --cflags --libs` -o tree2 tree2.c
+ */
+
+/* A simple example how to create DOM. Libxml2 automagically
+ * allocates the necessary amount of memory to it.
+*/
+int
+main(int argc, char **argv)
+{
+ xmlDocPtr doc = NULL; /* document pointer */
+ xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;/* node pointers */
+ xmlDtdPtr dtd = NULL; /* DTD pointer */
+ char buff[256];
+ int i, j;
+
+ LIBXML_TEST_VERSION;
+
+ /*
+ * Creates a new document, a node and set it as a root node
+ */
+ doc = xmlNewDoc(BAD_CAST "1.0");
+ root_node = xmlNewNode(NULL, BAD_CAST "root");
+ xmlDocSetRootElement(doc, root_node);
+
+ /*
+ * Creates a DTD declaration. Isn't mandatory.
+ */
+ dtd = xmlCreateIntSubset(doc, BAD_CAST "root", NULL, BAD_CAST "tree2.dtd");
+
+ /*
+ * xmlNewChild() creates a new node, which is "attached" as child node
+ * of root_node node.
+ */
+ xmlNewChild(root_node, NULL, BAD_CAST "node1",
+ BAD_CAST "content of node 1");
+ /*
+ * The same as above, but the new child node doesn't have a content
+ */
+ xmlNewChild(root_node, NULL, BAD_CAST "node2", NULL);
+
+ /*
+ * xmlNewProp() creates attributes, which is "attached" to an node.
+ * It returns xmlAttrPtr, which isn't used here.
+ */
+ node =
+ xmlNewChild(root_node, NULL, BAD_CAST "node3",
+ BAD_CAST "this node has attributes");
+ xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");
+ xmlNewProp(node, BAD_CAST "foo", BAD_CAST "bar");
+
+ /*
+ * Here goes another way to create nodes. xmlNewNode() and xmlNewText
+ * creates a node and a text node separately. They are "attached"
+ * by xmlAddChild()
+ */
+ node = xmlNewNode(NULL, BAD_CAST "node4");
+ node1 = xmlNewText(BAD_CAST
+ "other way to create content (which is also a node)");
+ xmlAddChild(node, node1);
+ xmlAddChild(root_node, node);
+
+ /*
+ * A simple loop that "automates" nodes creation
+ */
+ for (i = 5; i < 7; i++) {
+ sprintf(buff, "node%d", i);
+ node = xmlNewChild(root_node, NULL, BAD_CAST buff, NULL);
+ for (j = 1; j < 4; j++) {
+ sprintf(buff, "node%d%d", i, j);
+ node1 = xmlNewChild(node, NULL, BAD_CAST buff, NULL);
+ xmlNewProp(node1, BAD_CAST "odd", BAD_CAST((j % 2) ? "no" : "yes"));
+ }
+ }
+
+ /*
+ * Dumping document to stdio or file
+ */
+ xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);
+
+ /*free the document */
+ xmlFreeDoc(doc);
+
+ /*
+ *Free the global variables that may
+ *have been allocated by the parser.
+ */
+ xmlCleanupParser();
+
+ /*
+ * this is to debug memory for regression tests
+ */
+ xmlMemoryDump();
+ return(0);
+}
+#else
+int main(void) {
+ fprintf(stderr, "tree support not compiled in\n");
+ exit(1);
+}
+#endif
diff --git a/doc/examples/tree2.res b/doc/examples/tree2.res
new file mode 100644
index 0000000..ed00195
--- /dev/null
+++ b/doc/examples/tree2.res
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE root SYSTEM "tree2.dtd">
+<root>
+ <node1>content of node 1</node1>
+ <node2/>
+ <node3 attribute="yes" foo="bar">this node has attributes</node3>
+ <node4>other way to create content (which is also a node)</node4>
+ <node5>
+ <node51 odd="no"/>
+ <node52 odd="yes"/>
+ <node53 odd="no"/>
+ </node5>
+ <node6>
+ <node61 odd="no"/>
+ <node62 odd="yes"/>
+ <node63 odd="no"/>
+ </node6>
+</root>
diff --git a/doc/examples/writer.xml b/doc/examples/writer.xml
new file mode 100644
index 0000000..6ab05fd
--- /dev/null
+++ b/doc/examples/writer.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<EXAMPLE><!--This is a comment with special chars: <äöü>--><ORDER version="1.0" xml:lang="de"><!--This is another comment with special chars: <äöü>--><HEADER><X_ORDER_ID>0000053535</X_ORDER_ID><CUSTOMER_ID>1010</CUSTOMER_ID><NAME_1>Müller</NAME_1><NAME_2>Jörg</NAME_2></HEADER><ENTRIES><ENTRY><ARTICLE>&lt;Test&gt;</ARTICLE><ENTRY_NO>10</ENTRY_NO></ENTRY><ENTRY><ARTICLE>&lt;Test 2&gt;</ARTICLE><ENTRY_NO>20</ENTRY_NO></ENTRY></ENTRIES><FOOTER><TEXT>This is a text.</TEXT></FOOTER></ORDER></EXAMPLE>
diff --git a/doc/examples/xpath1.c b/doc/examples/xpath1.c
new file mode 100644
index 0000000..0e49737
--- /dev/null
+++ b/doc/examples/xpath1.c
@@ -0,0 +1,249 @@
+/**
+ * section: XPath
+ * synopsis: Evaluate XPath expression and prints result node set.
+ * purpose: Shows how to evaluate XPath expression and register
+ * known namespaces in XPath context.
+ * usage: xpath1 <xml-file> <xpath-expr> [<known-ns-list>]
+ * author: Aleksey Sanin
+ * copy: see Copyright for the status of this software.
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+
+#ifdef LIBXML_XPATH_ENABLED
+
+
+void usage(const char *name);
+int execute_xpath_expression(const char* filename, const xmlChar* xpathExpr, const xmlChar* nsList);
+int register_namespaces(xmlXPathContextPtr xpathCtx, const xmlChar* nsList);
+void print_xpath_nodes(xmlNodeSetPtr nodes, FILE* output);
+
+int
+main(int argc, char **argv) {
+ /* Parse command line and process file */
+ if((argc < 3) || (argc > 4)) {
+ fprintf(stderr, "Error: wrong number of arguments.\n");
+ usage(argv[0]);
+ return(-1);
+ }
+
+ /* Init libxml */
+ xmlInitParser();
+ LIBXML_TEST_VERSION
+
+ /* Do the main job */
+ if(execute_xpath_expression(argv[1], BAD_CAST argv[2], (argc > 3) ? BAD_CAST argv[3] : NULL) < 0) {
+ usage(argv[0]);
+ return(-1);
+ }
+
+ /* Shutdown libxml */
+ xmlCleanupParser();
+
+ /*
+ * this is to debug memory for regression tests
+ */
+ xmlMemoryDump();
+ return 0;
+}
+
+/**
+ * usage:
+ * @name: the program name.
+ *
+ * Prints usage information.
+ */
+void
+usage(const char *name) {
+ assert(name);
+
+ fprintf(stderr, "Usage: %s <xml-file> <xpath-expr> [<known-ns-list>]\n", name);
+ fprintf(stderr, "where <known-ns-list> is a list of known namespaces\n");
+ fprintf(stderr, "in \"<prefix1>=<href1> <prefix2>=href2> ...\" format\n");
+}
+
+/**
+ * execute_xpath_expression:
+ * @filename: the input XML filename.
+ * @xpathExpr: the xpath expression for evaluation.
+ * @nsList: the optional list of known namespaces in
+ * "<prefix1>=<href1> <prefix2>=href2> ..." format.
+ *
+ * Parses input XML file, evaluates XPath expression and prints results.
+ *
+ * Returns 0 on success and a negative value otherwise.
+ */
+int
+execute_xpath_expression(const char* filename, const xmlChar* xpathExpr, const xmlChar* nsList) {
+ xmlDocPtr doc;
+ xmlXPathContextPtr xpathCtx;
+ xmlXPathObjectPtr xpathObj;
+
+ assert(filename);
+ assert(xpathExpr);
+
+ /* Load XML document */
+ doc = xmlParseFile(filename);
+ if (doc == NULL) {
+ fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
+ return(-1);
+ }
+
+ /* Create xpath evaluation context */
+ xpathCtx = xmlXPathNewContext(doc);
+ if(xpathCtx == NULL) {
+ fprintf(stderr,"Error: unable to create new XPath context\n");
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+
+ /* Register namespaces from list (if any) */
+ if((nsList != NULL) && (register_namespaces(xpathCtx, nsList) < 0)) {
+ fprintf(stderr,"Error: failed to register namespaces list \"%s\"\n", nsList);
+ xmlXPathFreeContext(xpathCtx);
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+
+ /* Evaluate xpath expression */
+ xpathObj = xmlXPathEvalExpression(xpathExpr, xpathCtx);
+ if(xpathObj == NULL) {
+ fprintf(stderr,"Error: unable to evaluate xpath expression \"%s\"\n", xpathExpr);
+ xmlXPathFreeContext(xpathCtx);
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+
+ /* Print results */
+ print_xpath_nodes(xpathObj->nodesetval, stdout);
+
+ /* Cleanup */
+ xmlXPathFreeObject(xpathObj);
+ xmlXPathFreeContext(xpathCtx);
+ xmlFreeDoc(doc);
+
+ return(0);
+}
+
+/**
+ * register_namespaces:
+ * @xpathCtx: the pointer to an XPath context.
+ * @nsList: the list of known namespaces in
+ * "<prefix1>=<href1> <prefix2>=href2> ..." format.
+ *
+ * Registers namespaces from @nsList in @xpathCtx.
+ *
+ * Returns 0 on success and a negative value otherwise.
+ */
+int
+register_namespaces(xmlXPathContextPtr xpathCtx, const xmlChar* nsList) {
+ xmlChar* nsListDup;
+ xmlChar* prefix;
+ xmlChar* href;
+ xmlChar* next;
+
+ assert(xpathCtx);
+ assert(nsList);
+
+ nsListDup = xmlStrdup(nsList);
+ if(nsListDup == NULL) {
+ fprintf(stderr, "Error: unable to strdup namespaces list\n");
+ return(-1);
+ }
+
+ next = nsListDup;
+ while(next != NULL) {
+ /* skip spaces */
+ while((*next) == ' ') next++;
+ if((*next) == '\0') break;
+
+ /* find prefix */
+ prefix = next;
+ next = (xmlChar*)xmlStrchr(next, '=');
+ if(next == NULL) {
+ fprintf(stderr,"Error: invalid namespaces list format\n");
+ xmlFree(nsListDup);
+ return(-1);
+ }
+ *(next++) = '\0';
+
+ /* find href */
+ href = next;
+ next = (xmlChar*)xmlStrchr(next, ' ');
+ if(next != NULL) {
+ *(next++) = '\0';
+ }
+
+ /* do register namespace */
+ if(xmlXPathRegisterNs(xpathCtx, prefix, href) != 0) {
+ fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", prefix, href);
+ xmlFree(nsListDup);
+ return(-1);
+ }
+ }
+
+ xmlFree(nsListDup);
+ return(0);
+}
+
+/**
+ * print_xpath_nodes:
+ * @nodes: the nodes set.
+ * @output: the output file handle.
+ *
+ * Prints the @nodes content to @output.
+ */
+void
+print_xpath_nodes(xmlNodeSetPtr nodes, FILE* output) {
+ xmlNodePtr cur;
+ int size;
+ int i;
+
+ assert(output);
+ size = (nodes) ? nodes->nodeNr : 0;
+
+ fprintf(output, "Result (%d nodes):\n", size);
+ for(i = 0; i < size; ++i) {
+ assert(nodes->nodeTab[i]);
+
+ if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns;
+
+ ns = (xmlNsPtr)nodes->nodeTab[i];
+ cur = (xmlNodePtr)ns->next;
+ if(cur->ns) {
+ fprintf(output, "= namespace \"%s\"=\"%s\" for node %s:%s\n",
+ ns->prefix, ns->href, cur->ns->href, cur->name);
+ } else {
+ fprintf(output, "= namespace \"%s\"=\"%s\" for node %s\n",
+ ns->prefix, ns->href, cur->name);
+ }
+ } else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) {
+ cur = nodes->nodeTab[i];
+ if(cur->ns) {
+ fprintf(output, "= element node \"%s:%s\"\n",
+ cur->ns->href, cur->name);
+ } else {
+ fprintf(output, "= element node \"%s\"\n",
+ cur->name);
+ }
+ } else {
+ cur = nodes->nodeTab[i];
+ fprintf(output, "= node \"%s\": type %d\n", cur->name, cur->type);
+ }
+ }
+}
+
+#else
+int main(void) {
+ fprintf(stderr, "XPath support not compiled in\n");
+ exit(1);
+}
+#endif
diff --git a/doc/guidelines.html b/doc/guidelines.html
new file mode 100644
index 0000000..092eaf1
--- /dev/null
+++ b/doc/guidelines.html
@@ -0,0 +1,374 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html">
+ <style type="text/css"></style>
+<!--
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+ </style>
+-->
+ <title>XML resources publication guidelines</title>
+</head>
+
+<body bgcolor="#fffacd" text="#000000">
+<h1 align="center">XML resources publication guidelines</h1>
+
+<p></p>
+
+<p>The goal of this document is to provide a set of guidelines and tips
+helping the publication and deployment of <a
+href="http://www.w3.org.XML/">XML</a> resources for the <a
+href="http://www.gnome.org/">GNOME project</a>. However it is not tied to
+GNOME and might be helpful more generally. I welcome <a
+href="mailto:veillard@redhat.com">feedback</a> on this document.</p>
+
+<p>The intended audience is the software developers who started using XML
+for some of the resources of their project, as a storage format, for data
+exchange, checking or transformations. There have been an increasing number
+of new XML formats defined, but not all steps have been taken, possibly because of
+lack of documentation, to truly gain all the benefits of the use of XML.
+These guidelines hope to improve the matter and provide a better overview of
+the overall XML processing and associated steps needed to deploy it
+successfully:</p>
+
+<p>Table of contents:</p>
+<ol>
+ <li><a href="#Design">Design guidelines</a></li>
+ <li><a href="#Canonical">Canonical URL</a></li>
+ <li><a href="#Catalog">Catalog setup</a></li>
+ <li><a href="#Package">Package integration</a></li>
+</ol>
+
+<h2><a name="Design">Design guidelines</a></h2>
+
+<p>This part intends to focus on the format itself of XML. It may arrive
+a bit too late since the structure of the document may already be cast in
+existing and deployed code. Still, here are a few rules which might be helpful
+when designing a new XML vocabulary or making the revision of an existing
+format:</p>
+
+<h3>Reuse existing formats:</h3>
+
+<p>This may sounds a bit simplistic, but before designing your own format,
+try to lookup existing XML vocabularies on similar data. Ideally this allows
+you to reuse them, in which case a lot of the existing tools like DTD, schemas
+and stylesheets may already be available. If you are looking at a
+documentation format, <a href="http://www.docbook.org/">DocBook</a> should
+handle your needs. If reuse is not possible because some semantic or use case
+aspects are too different this will be helpful avoiding design errors like
+targeting the vocabulary to the wrong abstraction level. In this format
+design phase try to be synthetic and be sure to express the real content of
+your data and use the XML structure to express the semantic and context of
+those data.</p>
+
+<h3>DTD rules:</h3>
+
+<p>Building a DTD (Document Type Definition) or a Schema describing the
+structure allowed by instances is the core of the design process of the
+vocabulary. Here are a few tips:</p>
+<ul>
+ <li>use significant words for the element and attributes names.</li>
+ <li>do not use attributes for general textual content, attributes
+ will be modified by the parser before reaching the application,
+ spaces and line informations will be modified.</li>
+ <li>use single elements for every string that might be subject to
+ localization. The canonical way to localize XML content is to use
+ siblings element carrying different xml:lang attributes like in the
+ following:
+ <pre>&lt;welcome&gt;
+ &lt;msg xml:lang="en"&gt;hello&lt;/msg&gt;
+ &lt;msg xml:lang="fr"&gt;bonjour&lt;/msg&gt;
+&lt;/welcome&gt;</pre>
+ </li>
+ <li>use attributes to refine the content of an element but avoid them for
+ more complex tasks, attribute parsing is not cheaper than an element and
+ it is far easier to make an element content more complex while attribute
+ will have to remain very simple.</li>
+</ul>
+
+<h3>Versioning:</h3>
+
+<p>As part of the design, make sure the structure you define will be usable
+for future extension that you may not consider for the current version. There
+are two parts to this:</p>
+<ul>
+ <li>Make sure the instance contains a version number which will allow to
+ make backward compatibility easy. Something as simple as having a
+ <code>version="1.0"</code> on the root document of the instance is
+ sufficient.</li>
+ <li>While designing the code doing the analysis of the data provided by the
+ XML parser, make sure you can work with unknown versions, generate a UI
+ warning and process only the tags recognized by your version but keep in
+ mind that you should not break on unknown elements if the version
+ attribute was not in the recognized set.</li>
+</ul>
+
+<h3>Other design parts:</h3>
+
+<p>While defining you vocabulary, try to think in term of other usage of your
+data, for example how using XSLT stylesheets could be used to make an HTML
+view of your data, or to convert it into a different format. Checking XML
+Schemas and looking at defining an XML Schema with a more complete
+validation and datatyping of your data structures is important, this helps
+avoiding some mistakes in the design phase.</p>
+
+<h3>Namespace:</h3>
+
+<p>If you expect your XML vocabulary to be used or recognized outside of your
+application (for example binding a specific processing from a graphic shell
+like Nautilus to an instance of your data) then you should really define an <a
+href="http://www.w3.org/TR/REC-xml-names/">XML namespace</a> for your
+vocabulary. A namespace name is an URL (absolute URI more precisely). It is
+generally recommended to anchor it as an HTTP resource to a server associated
+with the software project. See the next section about this. In practice this
+will mean that XML parsers will not handle your element names as-is but as a
+couple based on the namespace name and the element name. This allows it to
+recognize and disambiguate processing. Unicity of the namespace name can be
+for the most part guaranteed by the use of the DNS registry. Namespace can
+also be used to carry versioning information like:</p>
+
+<p><code>"http://www.gnome.org/project/projectname/1.0/"</code></p>
+
+<p>An easy way to use them is to make them the default namespace on the
+root element of the XML instance like:</p>
+<pre>&lt;structure xmlns="http://www.gnome.org/project/projectname/1.0/"&gt;
+ &lt;data&gt;
+ ...
+ &lt;/data&gt;
+&lt;/structure&gt;</pre>
+
+<p>In that document, structure and all descendant elements like data are in
+the given namespace.</p>
+
+<h2><a name="Canonical">Canonical URL</a></h2>
+
+<p>As seen in the previous namespace section, while XML processing is not
+tied to the Web there is a natural synergy between both. XML was designed to
+be available on the Web, and keeping the infrastructure that way helps
+deploying the XML resources. The core of this issue is the notion of
+"Canonical URL" of an XML resource. The resource can be an XML document, a
+DTD, a stylesheet, a schema, or even non-XML data associated with an XML
+resource, the canonical URL is the URL where the "master" copy of that
+resource is expected to be present on the Web. Usually when processing XML a
+copy of the resource will be present on the local disk, maybe in
+/usr/share/xml or /usr/share/sgml maybe in /opt or even on C:\projectname\
+(horror !). The key point is that the way to name that resource should be
+independent of the actual place where it resides on disk if it is available,
+and the fact that the processing will still work if there is no local copy
+(and that the machine where the processing is connected to the Internet).</p>
+
+<p>What this really means is that one should never use the local name of a
+resource to reference it but always use the canonical URL. For example in a
+DocBook instance the following should not be used:</p>
+<pre>&lt;!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"<br>
+
+
+ "/usr/share/xml/docbook/4.2/docbookx.dtd"&gt;</pre>
+
+<p>But always reference the canonical URL for the DTD:</p>
+<pre>&lt;!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"<br>
+
+
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"&gt; </pre>
+
+<p>Similarly, the document instance may reference the <a
+href="http://www.w3.org/TR/xslt">XSLT</a> stylesheets needed to process it to
+generate HTML, and the canonical URL should be used:</p>
+<pre>&lt;?xml-stylesheet
+ href="http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"
+ type="text/xsl"?&gt;</pre>
+
+<p>Defining the canonical URL for the resources needed should obey a few
+simple rules similar to those used to design namespace names:</p>
+<ul>
+ <li>use a DNS name you know is associated to the project and will be
+ available on the long term</li>
+ <li>within that server space, reserve the right to the subtree where you
+ intend to keep those data</li>
+ <li>version the URL so that multiple concurrent versions of the resources
+ can be hosted simultaneously</li>
+</ul>
+
+<h2><a name="Catalog">Catalog setup</a></h2>
+
+<h3>How catalogs work:</h3>
+
+<p>The catalogs are the technical mechanism which allow the XML processing
+tools to use a local copy of the resources if it is available even if the
+instance document references the canonical URL. <a
+href="http://www.oasis-open.org/committees/entity/">XML Catalogs</a> are
+anchored in the root catalog (usually <code>/etc/xml/catalog</code> or
+defined by the user). They are a tree of XML documents defining the mappings
+between the canonical naming space and the local installed ones, this can be
+seen as a static cache structure.</p>
+
+<p>When the XML processor is asked to process a resource it will
+automatically test for a locally available version in the catalog, starting
+from the root catalog, and possibly fetching sub-catalog resources until it
+finds that the catalog has that resource or not. If not the default
+processing of fetching the resource from the Web is done, allowing in most
+case to recover from a catalog miss. The key point is that the document
+instances are totally independent of the availability of a catalog or from
+the actual place where the local resource they reference may be installed.
+This greatly improves the management of the documents in the long run, making
+them independent of the platform or toolchain used to process them. The
+figure below tries to express that mechanism:<img src="catalog.gif"
+alt="Picture describing the catalog "></p>
+
+<h3>Usual catalog setup:</h3>
+
+<p>Usually catalogs for a project are setup as a 2 level hierarchical cache,
+the root catalog containing only "delegates" indicating a separate subcatalog
+dedicated to the project. The goal is to keep the root catalog clean and
+simplify the maintenance of the catalog by using separate catalogs per
+project. For example when creating a catalog for the <a
+href="http://www.w3.org/TR/xhtml1">XHTML1</a> DTDs, only 3 items are added to
+the root catalog:</p>
+<pre> &lt;delegatePublic publicIdStartString="-//W3C//DTD XHTML 1.0"
+ catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/&gt;
+ &lt;delegateSystem systemIdStartString="http://www.w3.org/TR/xhtml1/DTD"
+ catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/&gt;
+ &lt;delegateURI uriStartString="http://www.w3.org/TR/xhtml1/DTD"
+ catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/&gt;</pre>
+
+<p>They are all "delegates" meaning that if the catalog system is asked to
+resolve a reference corresponding to them, it has to lookup a sub catalog.
+Here the subcatalog was installed as
+<code>/usr/share/sgml/xhtml1/xmlcatalog</code> in the local tree. That
+decision is left to the sysadmin or the packager for that system and may
+obey different rules, but the actual place on the filesystem (or on a
+resource cache on the local network) will not influence the processing as
+long as it is available. The first rule indicate that if the reference uses a
+PUBLIC identifier beginning with the</p>
+
+<p><code>"-//W3C//DTD XHTML 1.0"</code></p>
+
+<p>substring, then the catalog lookup should be limited to the specific given
+lookup catalog. Similarly the second and third entries indicate those
+delegation rules for SYSTEM, DOCTYPE or normal URI references when the URL
+starts with the <code>"http://www.w3.org/TR/xhtml1/DTD"</code> substring
+which indicates the location on the W3C server where the XHTML1 resources are
+stored. Those are the beginning of all Canonical URLs for XHTML1 resources.
+Those three rules are sufficient in practice to capture all references to XHTML1
+resources and direct the processing tools to the right subcatalog.</p>
+
+<h3>A subcatalog example:</h3>
+
+<p>Here is the complete subcatalog used for XHTML1:</p>
+<pre>&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
+&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"&gt;
+ &lt;public publicId="-//W3C//DTD XHTML 1.0 Strict//EN"
+ uri="xhtml1-20020801/DTD/xhtml1-strict.dtd"/&gt;
+ &lt;public publicId="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ uri="xhtml1-20020801/DTD/xhtml1-transitional.dtd"/&gt;
+ &lt;public publicId="-//W3C//DTD XHTML 1.0 Frameset//EN"
+ uri="xhtml1-20020801/DTD/xhtml1-frameset.dtd"/&gt;
+ &lt;rewriteSystem systemIdStartString="http://www.w3.org/TR/xhtml1/DTD"
+ rewritePrefix="xhtml1-20020801/DTD"/&gt;
+ &lt;rewriteURI uriStartString="http://www.w3.org/TR/xhtml1/DTD"
+ rewritePrefix="xhtml1-20020801/DTD"/&gt;
+&lt;/catalog&gt;</pre>
+
+<p>There are a few things to notice:</p>
+<ul>
+ <li>this is an XML resource, it points to the DTD using Canonical URLs, the
+ root element defines a namespace (but based on an URN not an HTTP
+ URL).</li>
+ <li>it contains 5 rules, the 3 first ones are direct mapping for the 3
+ PUBLIC identifiers defined by the XHTML1 specification and associating
+ them with the local resource containing the DTD, the 2 last ones are
+ rewrite rules allowing to build the local filename for any URL based on
+ "http://www.w3.org/TR/xhtml1/DTD", the local cache simplifies the rules by
+ keeping the same structure as the on-line server at the Canonical URL</li>
+ <li>the local resources are designated using URI references (the uri or
+ rewritePrefix attributes), the base being the containing sub-catalog URL,
+ which means that in practice the copy of the XHTML1 strict DTD is stored
+ locally in
+ <code>/usr/share/sgml/xhtml1/xmlcatalog/xhtml1-20020801/DTD/xhtml1-strict.dtd</code></li>
+</ul>
+
+<p>Those 5 rules are sufficient to cover all references to the resources held
+at the Canonical URL for the XHTML1 DTDs.</p>
+
+<h2><a name="Package">Package integration</a></h2>
+
+<p>Creating and removing catalogs should be handled as part of the process of
+(un)installing the local copy of the resources. The catalog files being XML
+resources should be processed with XML based tools to avoid problems with the
+generated files, the xmlcatalog command coming with libxml2 allows you to create
+catalogs, and add or remove rules at that time. Here is a complete example
+coming from the RPM for the XHTML1 DTDs post install script. While this example
+is platform and packaging specific, this can be useful as a an example in
+other contexts:</p>
+<pre>%post
+CATALOG=/usr/share/sgml/xhtml1/xmlcatalog
+#
+# Register it in the super catalog with the appropriate delegates
+#
+ROOTCATALOG=/etc/xml/catalog
+
+if [ ! -r $ROOTCATALOG ]
+then
+ /usr/bin/xmlcatalog --noout --create $ROOTCATALOG
+fi
+
+if [ -w $ROOTCATALOG ]
+then
+ /usr/bin/xmlcatalog --noout --add "delegatePublic" \
+ "-//W3C//DTD XHTML 1.0" \
+ "file://$CATALOG" $ROOTCATALOG
+ /usr/bin/xmlcatalog --noout --add "delegateSystem" \
+ "http://www.w3.org/TR/xhtml1/DTD" \
+ "file://$CATALOG" $ROOTCATALOG
+ /usr/bin/xmlcatalog --noout --add "delegateURI" \
+ "http://www.w3.org/TR/xhtml1/DTD" \
+ "file://$CATALOG" $ROOTCATALOG
+fi</pre>
+
+<p>The XHTML1 subcatalog is not created on-the-fly in that case, it is
+installed as part of the files of the packages. So the only work needed is to
+make sure the root catalog exists and register the delegate rules.</p>
+
+<p>Similarly, the script for the post-uninstall just remove the rules from the
+catalog:</p>
+<pre>%postun
+#
+# On removal, unregister the xmlcatalog from the supercatalog
+#
+if [ "$1" = 0 ]; then
+ CATALOG=/usr/share/sgml/xhtml1/xmlcatalog
+ ROOTCATALOG=/etc/xml/catalog
+
+ if [ -w $ROOTCATALOG ]
+ then
+ /usr/bin/xmlcatalog --noout --del \
+ "-//W3C//DTD XHTML 1.0" $ROOTCATALOG
+ /usr/bin/xmlcatalog --noout --del \
+ "http://www.w3.org/TR/xhtml1/DTD" $ROOTCATALOG
+ /usr/bin/xmlcatalog --noout --del \
+ "http://www.w3.org/TR/xhtml1/DTD" $ROOTCATALOG
+ fi
+fi</pre>
+
+<p>Note the test against $1, this is needed to not remove the delegate rules
+in case of upgrade of the package.</p>
+
+<p>Following the set of guidelines and tips provided in this document should
+help deploy the XML resources in the GNOME framework without much pain and
+ensure a smooth evolution of the resource and instances.</p>
+
+<p><a href="mailto:veillard@redhat.com">Daniel Veillard</a></p>
+
+<p>$Id: guidelines.html,v 1.5 2003/09/01 22:17:39 wbrack Exp $</p>
+
+<p></p>
+</body>
+</html>
diff --git a/doc/help.html b/doc/help.html
new file mode 100644
index 0000000..12c19bb
--- /dev/null
+++ b/doc/help.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>How to help</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>How to help</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>You can help the project in various ways, the best thing to do first is to
+subscribe to the mailing-list as explained before, check the <a href="http://mail.gnome.org/archives/xml/">archives </a>and the <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Gnome bug
+database</a>:</p><ol><li>Provide patches when you find problems.</li>
+ <li>Provide the diffs when you port libxml2 to a new platform. They may not
+ be integrated in all cases but help pinpointing portability problems
+ and</li>
+ <li>Provide documentation fixes (either as patches to the code comments or
+ as HTML diffs).</li>
+ <li>Provide new documentations pieces (translations, examples, etc
+ ...).</li>
+ <li>Check the TODO file and try to close one of the items.</li>
+ <li>Take one of the points raised in the archive or the bug database and
+ provide a fix. <a href="mailto:daniel@veillard.com">Get in touch with me
+ </a>before to avoid synchronization problems and check that the suggested
+ fix will fit in nicely :-)</li>
+</ol><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/book1.html b/doc/html/book1.html
new file mode 100644
index 0000000..5edc0f7
--- /dev/null
+++ b/doc/html/book1.html
@@ -0,0 +1,13 @@
+<?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>Reference Manual for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-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/home.png b/doc/html/home.png
new file mode 100644
index 0000000..1700361
--- /dev/null
+++ b/doc/html/home.png
Binary files differ
diff --git a/doc/html/index.html b/doc/html/index.html
new file mode 100644
index 0000000..5edc0f7
--- /dev/null
+++ b/doc/html/index.html
@@ -0,0 +1,13 @@
+<?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>Reference Manual for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-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/left.png b/doc/html/left.png
new file mode 100644
index 0000000..2d05b3d
--- /dev/null
+++ b/doc/html/left.png
Binary files differ
diff --git a/doc/html/libxml-DOCBparser.html b/doc/html/libxml-DOCBparser.html
new file mode 100644
index 0000000..3df83f5
--- /dev/null
+++ b/doc/html/libxml-DOCBparser.html
@@ -0,0 +1,51 @@
+<?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 DOCBparser from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module DOCBparser 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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="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-HTMLparser.html">HTMLparser</a></th><td><a accesskey="n" href="libxml-HTMLparser.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><h2 style="font-weight:bold;color:red;text-align:center">This module is deprecated</h2><p>interface for a DocBook SGML non-verifying parser This code is DEPRECATED, and should not be used anymore. </p><div class="deprecated"><h2>Table of Contents</h2><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserInput">xmlParserInput</a> <a name="docbParserInput" id="docbParserInput">docbParserInput</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a name="docbParserInputPtr" id="docbParserInputPtr">docbParserInputPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserCtxt">xmlParserCtxt</a> <a name="docbParserCtxt" id="docbParserCtxt">docbParserCtxt</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a name="docbParserCtxtPtr" id="docbParserCtxtPtr">docbParserCtxtPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a name="docbDocPtr" id="docbDocPtr">docbDocPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> <a name="docbSAXHandler" id="docbSAXHandler">docbSAXHandler</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> <a name="docbSAXHandlerPtr" id="docbSAXHandlerPtr">docbSAXHandlerPtr</a>
+</pre><pre class="programlisting"><a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> <a href="#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a> (<a href="libxml-DOCBparser.html#docbSAXHandlerPtr">docbSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * chunk, <br /> int size, <br /> const char * filename, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting">int <a href="#docbEncodeEntities">docbEncodeEntities</a> (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen, <br /> int quoteChar)</pre>
+<pre class="programlisting"><a href="libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a> <a href="#docbParseFile">docbParseFile</a> (const char * filename, <br /> const char * encoding)</pre>
+<pre class="programlisting">int <a href="#docbParseDocument">docbParseDocument</a> (<a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> <a href="#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a> (const char * filename, <br /> const char * encoding)</pre>
+<pre class="programlisting"><a href="libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a> <a href="#docbParseDoc">docbParseDoc</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * encoding)</pre>
+<pre class="programlisting"><a href="libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a> <a href="#docbSAXParseDoc">docbSAXParseDoc</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * encoding, <br /> <a href="libxml-DOCBparser.html#docbSAXHandlerPtr">docbSAXHandlerPtr</a> sax, <br /> void * userData)</pre>
+<pre class="programlisting"><a href="libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a> <a href="#docbSAXParseFile">docbSAXParseFile</a> (const char * filename, <br /> const char * encoding, <br /> <a href="libxml-DOCBparser.html#docbSAXHandlerPtr">docbSAXHandlerPtr</a> sax, <br /> void * userData)</pre>
+<pre class="programlisting">int <a href="#docbParseChunk">docbParseChunk</a> (<a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> ctxt, <br /> const char * chunk, <br /> int size, <br /> int terminate)</pre>
+<pre class="programlisting">void <a href="#docbFreeParserCtxt">docbFreeParserCtxt</a> (<a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> ctxt)</pre>
+<h2>Description</h2>
+<h3><a name="docbCreatePushParserCtxt" id="docbCreatePushParserCtxt"></a>Function: docbCreatePushParserCtxt</h3><pre class="programlisting"><a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> docbCreatePushParserCtxt (<a href="libxml-DOCBparser.html#docbSAXHandlerPtr">docbSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * chunk, <br /> int size, <br /> const char * filename, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a parser context for using the DocBook SGML parser in push mode To allow content encoding detection, @size should be &gt;= 4 The value of @filename is used for fetching external entities and error/warning reports.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>a SAX handler</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>The user data returned on SAX callbacks</td></tr><tr><td><span class="term"><i><tt>chunk</tt></i>:</span></td><td>a pointer to an array of chars</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>number of chars in the array</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>an optional file name or URI</td></tr><tr><td><span class="term"><i><tt>enc</tt></i>:</span></td><td>an optional encoding</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser context or NULL</td></tr></tbody></table></div><h3><a name="docbEncodeEntities" id="docbEncodeEntities"></a>Function: docbEncodeEntities</h3><pre class="programlisting">int docbEncodeEntities (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen, <br /> int quoteChar)<br />
+</pre><p>Take a block of UTF-8 chars in and try to convert it to an ASCII plus SGML entities block of chars out.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a pointer to an array of bytes to store the result</td></tr><tr><td><span class="term"><i><tt>outlen</tt></i>:</span></td><td>the length of @out</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a pointer to an array of UTF-8 chars</td></tr><tr><td><span class="term"><i><tt>inlen</tt></i>:</span></td><td>the length of @in</td></tr><tr><td><span class="term"><i><tt>quoteChar</tt></i>:</span></td><td>the quote character to escape (' or ") or zero.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed as the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.</td></tr></tbody></table></div><h3><a name="docbParseFile" id="docbParseFile"></a>Function: docbParseFile</h3><pre class="programlisting"><a href="libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a> docbParseFile (const char * filename, <br /> const char * encoding)<br />
+</pre><p>parse a Docbook SGML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>a free form C string describing document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="docbParseDocument" id="docbParseDocument"></a>Function: docbParseDocument</h3><pre class="programlisting">int docbParseDocument (<a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an SGML document (and build a tree if using the standard SAX interface).</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 SGML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0, -1 in case of error. the parser context is augmented as a result of the parsing.</td></tr></tbody></table></div><h3><a name="docbCreateFileParserCtxt" id="docbCreateFileParserCtxt"></a>Function: docbCreateFileParserCtxt</h3><pre class="programlisting"><a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> docbCreateFileParserCtxt (const char * filename, <br /> const char * encoding)<br />
+</pre><p>Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the SGML document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser context or NULL</td></tr></tbody></table></div><h3><a name="docbParseDoc" id="docbParseDoc"></a>Function: docbParseDoc</h3><pre class="programlisting"><a href="libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a> docbParseDoc (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * encoding)<br />
+</pre><p>parse an SGML in-memory document and build a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>a free form C string describing the SGML document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="docbSAXParseDoc" id="docbSAXParseDoc"></a>Function: docbSAXParseDoc</h3><pre class="programlisting"><a href="libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a> docbSAXParseDoc (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * encoding, <br /> <a href="libxml-DOCBparser.html#docbSAXHandlerPtr">docbSAXHandlerPtr</a> sax, <br /> void * userData)<br />
+</pre><p>parse an SGML in-memory document and build a tree. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>a free form C string describing the SGML document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>the SAX handler block</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>if using SAX, this pointer will be provided on callbacks.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="docbSAXParseFile" id="docbSAXParseFile"></a>Function: docbSAXParseFile</h3><pre class="programlisting"><a href="libxml-DOCBparser.html#docbDocPtr">docbDocPtr</a> docbSAXParseFile (const char * filename, <br /> const char * encoding, <br /> <a href="libxml-DOCBparser.html#docbSAXHandlerPtr">docbSAXHandlerPtr</a> sax, <br /> void * userData)<br />
+</pre><p>parse an SGML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>a free form C string describing the SGML document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>the SAX handler block</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>if using SAX, this pointer will be provided on callbacks.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="docbParseChunk" id="docbParseChunk"></a>Function: docbParseChunk</h3><pre class="programlisting">int docbParseChunk (<a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> ctxt, <br /> const char * chunk, <br /> int size, <br /> int terminate)<br />
+</pre><p>Parse a Chunk of 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>an XML parser context</td></tr><tr><td><span class="term"><i><tt>chunk</tt></i>:</span></td><td>an char array</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size in byte of the chunk</td></tr><tr><td><span class="term"><i><tt>terminate</tt></i>:</span></td><td>last chunk indicator</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>zero if no error, the <a href="libxml-xmlerror.html#xmlParserErrors">xmlParserErrors</a> otherwise.</td></tr></tbody></table></div><h3><a name="docbFreeParserCtxt" id="docbFreeParserCtxt"></a>Function: docbFreeParserCtxt</h3><pre class="programlisting">void docbFreeParserCtxt (<a href="libxml-DOCBparser.html#docbParserCtxtPtr">docbParserCtxtPtr</a> ctxt)<br />
+</pre><p>Free all the memory used by a parser context. However the parsed document in ctxt-&gt;myDoc is not freed.</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 SGML parser context</td></tr></tbody></table></div></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-HTMLparser.html b/doc/html/libxml-HTMLparser.html
new file mode 100644
index 0000000..fc3b126
--- /dev/null
+++ b/doc/html/libxml-HTMLparser.html
@@ -0,0 +1,176 @@
+<?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 HTMLparser from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module HTMLparser 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-DOCBparser.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-DOCBparser.html">DOCBparser</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-HTMLtree.html">HTMLtree</a></th><td><a accesskey="n" href="libxml-HTMLtree.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module implements an HTML 4.0 non-verifying parser with API compatible with the XML parser ones. It should be able to parse "real world" HTML, even if severely broken from a specification point of view. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#htmlDefaultSubelement">htmlDefaultSubelement</a></pre><pre class="programlisting">#define <a href="#htmlElementAllowedHereDesc">htmlElementAllowedHereDesc</a></pre><pre class="programlisting">#define <a href="#htmlRequiredAttrs">htmlRequiredAttrs</a></pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a name="htmlDocPtr" id="htmlDocPtr">htmlDocPtr</a>
+</pre><pre class="programlisting">Structure <a href="#htmlElemDesc">htmlElemDesc</a><br />struct _htmlElemDesc
+</pre><pre class="programlisting">Typedef <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * <a name="htmlElemDescPtr" id="htmlElemDescPtr">htmlElemDescPtr</a>
+</pre><pre class="programlisting">Structure <a href="#htmlEntityDesc">htmlEntityDesc</a><br />struct _htmlEntityDesc
+</pre><pre class="programlisting">Typedef <a href="libxml-HTMLparser.html#htmlEntityDesc">htmlEntityDesc</a> * <a name="htmlEntityDescPtr" id="htmlEntityDescPtr">htmlEntityDescPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a name="htmlNodePtr" id="htmlNodePtr">htmlNodePtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserCtxt">xmlParserCtxt</a> <a name="htmlParserCtxt" id="htmlParserCtxt">htmlParserCtxt</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a name="htmlParserCtxtPtr" id="htmlParserCtxtPtr">htmlParserCtxtPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserInput">xmlParserInput</a> <a name="htmlParserInput" id="htmlParserInput">htmlParserInput</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a name="htmlParserInputPtr" id="htmlParserInputPtr">htmlParserInputPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a> <a name="htmlParserNodeInfo" id="htmlParserNodeInfo">htmlParserNodeInfo</a>
+</pre><pre class="programlisting">Enum <a href="#htmlParserOption">htmlParserOption</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> <a name="htmlSAXHandler" id="htmlSAXHandler">htmlSAXHandler</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> <a name="htmlSAXHandlerPtr" id="htmlSAXHandlerPtr">htmlSAXHandlerPtr</a>
+</pre><pre class="programlisting">Enum <a href="#htmlStatus">htmlStatus</a>
+</pre><pre class="programlisting">int <a href="#UTF8ToHtml">UTF8ToHtml</a> (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlStatus">htmlStatus</a> <a href="#htmlAttrAllowed">htmlAttrAllowed</a> (const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * elt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * attr, <br /> int legacy)</pre>
+<pre class="programlisting">int <a href="#htmlAutoCloseTag">htmlAutoCloseTag</a> (<a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> elem)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> <a href="#htmlCreateMemoryParserCtxt">htmlCreateMemoryParserCtxt</a> (const char * buffer, <br /> int size)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> <a href="#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a> (<a href="libxml-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * chunk, <br /> int size, <br /> const char * filename, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadDoc">htmlCtxtReadDoc</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadFd">htmlCtxtReadFd</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadFile">htmlCtxtReadFile</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const char * filename, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadIO">htmlCtxtReadIO</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadMemory">htmlCtxtReadMemory</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting">void <a href="#htmlCtxtReset">htmlCtxtReset</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#htmlCtxtUseOptions">htmlCtxtUseOptions</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> int options)</pre>
+<pre class="programlisting">int <a href="#htmlElementAllowedHere">htmlElementAllowedHere</a> (const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * parent, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elt)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlStatus">htmlStatus</a> <a href="#htmlElementStatusHere">htmlElementStatusHere</a> (const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * parent, <br /> const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * elt)</pre>
+<pre class="programlisting">int <a href="#htmlEncodeEntities">htmlEncodeEntities</a> (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen, <br /> int quoteChar)</pre>
+<pre class="programlisting">const <a href="libxml-HTMLparser.html#htmlEntityDesc">htmlEntityDesc</a> * <a href="#htmlEntityLookup">htmlEntityLookup</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">const <a href="libxml-HTMLparser.html#htmlEntityDesc">htmlEntityDesc</a> * <a href="#htmlEntityValueLookup">htmlEntityValueLookup</a> (unsigned int value)</pre>
+<pre class="programlisting">void <a href="#htmlFreeParserCtxt">htmlFreeParserCtxt</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#htmlHandleOmittedElem">htmlHandleOmittedElem</a> (int val)</pre>
+<pre class="programlisting">int <a href="#htmlIsAutoClosed">htmlIsAutoClosed</a> (<a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> doc, <br /> <a href="libxml-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> elem)</pre>
+<pre class="programlisting">int <a href="#htmlIsScriptAttribute">htmlIsScriptAttribute</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlStatus">htmlStatus</a> <a href="#htmlNodeStatus">htmlNodeStatus</a> (const <a href="libxml-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> node, <br /> int legacy)</pre>
+<pre class="programlisting">int <a href="#htmlParseCharRef">htmlParseCharRef</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#htmlParseChunk">htmlParseChunk</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const char * chunk, <br /> int size, <br /> int terminate)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlParseDoc">htmlParseDoc</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * encoding)</pre>
+<pre class="programlisting">int <a href="#htmlParseDocument">htmlParseDocument</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#htmlParseElement">htmlParseElement</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">const <a href="libxml-HTMLparser.html#htmlEntityDesc">htmlEntityDesc</a> * <a href="#htmlParseEntityRef">htmlParseEntityRef</a> (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** str)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlParseFile">htmlParseFile</a> (const char * filename, <br /> const char * encoding)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlReadDoc">htmlReadDoc</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlReadFd">htmlReadFd</a> (int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlReadFile">htmlReadFile</a> (const char * filename, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlReadIO">htmlReadIO</a> (<a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlReadMemory">htmlReadMemory</a> (const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlSAXParseDoc">htmlSAXParseDoc</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * encoding, <br /> <a href="libxml-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a> sax, <br /> void * userData)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlSAXParseFile">htmlSAXParseFile</a> (const char * filename, <br /> const char * encoding, <br /> <a href="libxml-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a> sax, <br /> void * userData)</pre>
+<pre class="programlisting">const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * <a href="#htmlTagLookup">htmlTagLookup</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * tag)</pre>
+<h2>Description</h2>
+<h3><a name="htmlDefaultSubelement" id="htmlDefaultSubelement"></a>Macro: htmlDefaultSubelement</h3><pre>#define htmlDefaultSubelement</pre><p>Returns the default subelement for this element</p>
+<h3><a name="htmlElementAllowedHereDesc" id="htmlElementAllowedHereDesc"></a>Macro: htmlElementAllowedHereDesc</h3><pre>#define htmlElementAllowedHereDesc</pre><p>Checks whether an HTML element description may be a direct child of the specified element. Returns 1 if allowed; 0 otherwise.</p>
+<h3><a name="htmlRequiredAttrs" id="htmlRequiredAttrs"></a>Macro: htmlRequiredAttrs</h3><pre>#define htmlRequiredAttrs</pre><p>Returns the attributes required for the specified element.</p>
+<h3><a name="htmlElemDesc" id="htmlElemDesc">Structure htmlElemDesc</a></h3><pre class="programlisting">Structure htmlElemDesc<br />struct _htmlElemDesc {
+ const char * name : The tag name
+ char startTag : Whether the start tag can be implied
+ char endTag : Whether the end tag can be implied
+ char saveEndTag : Whether the end tag should be saved
+ char empty : Is this an empty element ?
+ char depr : Is this a deprecated element ?
+ char dtd : 1: only in Loose DTD, 2: only Frameset
+ char isinline : is this a block 0 or inline 1 element
+ const char * desc : the description NRK Jan.2003 * New fiel
+ const char ** subelts : allowed sub-elements of this element
+ const char * defaultsubelt : subelement for suggested auto-repair if
+ const char ** attrs_opt : Optional Attributes
+ const char ** attrs_depr : Additional deprecated attributes
+ const char ** attrs_req : Required attributes
+}</pre><h3><a name="htmlEntityDesc" id="htmlEntityDesc">Structure htmlEntityDesc</a></h3><pre class="programlisting">Structure htmlEntityDesc<br />struct _htmlEntityDesc {
+ unsigned int value : the UNICODE value for the character
+ 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_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
+}
+</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
+ <a name="HTML_INVALID" id="HTML_INVALID">HTML_INVALID</a> = 1
+ <a name="HTML_DEPRECATED" id="HTML_DEPRECATED">HTML_DEPRECATED</a> = 2
+ <a name="HTML_VALID" id="HTML_VALID">HTML_VALID</a> = 4
+ <a name="HTML_REQUIRED" id="HTML_REQUIRED">HTML_REQUIRED</a> = 12 : VALID bit set so ( &amp; <a href="libxml-HTMLparser.html#HTML_VALID">HTML_VALID</a> ) is TRUE
+}
+</pre><h3><a name="UTF8ToHtml" id="UTF8ToHtml"></a>Function: UTF8ToHtml</h3><pre class="programlisting">int UTF8ToHtml (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)<br />
+</pre><p>Take a block of UTF-8 chars in and try to convert it to an ASCII plus HTML entities block of chars out.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a pointer to an array of bytes to store the result</td></tr><tr><td><span class="term"><i><tt>outlen</tt></i>:</span></td><td>the length of @out</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a pointer to an array of UTF-8 chars</td></tr><tr><td><span class="term"><i><tt>inlen</tt></i>:</span></td><td>the length of @in</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed as the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.</td></tr></tbody></table></div><h3><a name="htmlAttrAllowed" id="htmlAttrAllowed"></a>Function: htmlAttrAllowed</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlStatus">htmlStatus</a> htmlAttrAllowed (const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * elt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * attr, <br /> int legacy)<br />
+</pre><p>Checks whether an <a href="libxml-SAX.html#attribute">attribute</a> is valid for an element Has full knowledge of Required and Deprecated attributes</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>elt</tt></i>:</span></td><td>HTML element</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>HTML <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>legacy</tt></i>:</span></td><td>whether to allow deprecated attributes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>one of HTML_REQUIRED, HTML_VALID, HTML_DEPRECATED, <a href="libxml-HTMLparser.html#HTML_INVALID">HTML_INVALID</a></td></tr></tbody></table></div><h3><a name="htmlAutoCloseTag" id="htmlAutoCloseTag"></a>Function: htmlAutoCloseTag</h3><pre class="programlisting">int htmlAutoCloseTag (<a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> elem)<br />
+</pre><p>The HTML DTD allows a tag to implicitly close other tags. The list is kept in htmlStartClose array. This function checks if the element or one of it's children would autoclose the given tag.</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 HTML document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The tag name</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the HTML element</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if autoclose, 0 otherwise</td></tr></tbody></table></div><h3><a name="htmlCreateMemoryParserCtxt" id="htmlCreateMemoryParserCtxt"></a>Function: htmlCreateMemoryParserCtxt</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> htmlCreateMemoryParserCtxt (const char * buffer, <br /> int size)<br />
+</pre><p>Create a parser context for an HTML in-memory document.</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</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 new parser context or NULL</td></tr></tbody></table></div><h3><a name="htmlCreatePushParserCtxt" id="htmlCreatePushParserCtxt"></a>Function: htmlCreatePushParserCtxt</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> htmlCreatePushParserCtxt (<a href="libxml-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * chunk, <br /> int size, <br /> const char * filename, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a parser context for using the HTML parser in push mode The value of @filename is used for fetching external entities and error/warning reports.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>a SAX handler</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>The user data returned on SAX callbacks</td></tr><tr><td><span class="term"><i><tt>chunk</tt></i>:</span></td><td>a pointer to an array of chars</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>number of chars in the array</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>an optional file name or URI</td></tr><tr><td><span class="term"><i><tt>enc</tt></i>:</span></td><td>an optional encoding</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser context or NULL</td></tr></tbody></table></div><h3><a name="htmlCtxtReadDoc" id="htmlCtxtReadDoc"></a>Function: htmlCtxtReadDoc</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlCtxtReadDoc (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML in-memory document and build a tree. This reuses the existing @ctxt 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>an HTML parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to a zero terminated string</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlCtxtReadFd" id="htmlCtxtReadFd"></a>Function: htmlCtxtReadFd</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlCtxtReadFd (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML from a file descriptor and build a tree. This reuses the existing @ctxt 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>an HTML parser context</td></tr><tr><td><span class="term"><i><tt>fd</tt></i>:</span></td><td>an open file descriptor</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlCtxtReadFile" id="htmlCtxtReadFile"></a>Function: htmlCtxtReadFile</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlCtxtReadFile (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const char * filename, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML file from the filesystem or the network. This reuses the existing @ctxt 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>an HTML parser context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file or URL</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlCtxtReadIO" id="htmlCtxtReadIO"></a>Function: htmlCtxtReadIO</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlCtxtReadIO (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an HTML document from I/O functions and source and build a tree. This reuses the existing @ctxt 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>an HTML parser context</td></tr><tr><td><span class="term"><i><tt>ioread</tt></i>:</span></td><td>an I/O read function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlCtxtReadMemory" id="htmlCtxtReadMemory"></a>Function: htmlCtxtReadMemory</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlCtxtReadMemory (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML in-memory document and build a tree. This reuses the existing @ctxt 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>an HTML parser context</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>a pointer to a char array</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>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlCtxtReset" id="htmlCtxtReset"></a>Function: htmlCtxtReset</h3><pre class="programlisting">void htmlCtxtReset (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Reset a 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>an HTML parser context</td></tr></tbody></table></div><h3><a name="htmlCtxtUseOptions" id="htmlCtxtUseOptions"></a>Function: htmlCtxtUseOptions</h3><pre class="programlisting">int htmlCtxtUseOptions (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> int options)<br />
+</pre><p>Applies the options to the 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>an HTML parser context</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, the set of unknown or unimplemented options in case of error.</td></tr></tbody></table></div><h3><a name="htmlElementAllowedHere" id="htmlElementAllowedHere"></a>Function: htmlElementAllowedHere</h3><pre class="programlisting">int htmlElementAllowedHere (const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * parent, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elt)<br />
+</pre><p>Checks whether an HTML element may be a direct child of a parent element. Note - doesn't check for deprecated elements</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>HTML parent element</td></tr><tr><td><span class="term"><i><tt>elt</tt></i>:</span></td><td>HTML element</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if allowed; 0 otherwise.</td></tr></tbody></table></div><h3><a name="htmlElementStatusHere" id="htmlElementStatusHere"></a>Function: htmlElementStatusHere</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlStatus">htmlStatus</a> htmlElementStatusHere (const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * parent, <br /> const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * elt)<br />
+</pre><p>Checks whether an HTML element may be a direct child of a parent element. and if so whether it is valid or deprecated.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>HTML parent element</td></tr><tr><td><span class="term"><i><tt>elt</tt></i>:</span></td><td>HTML element</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>one of HTML_VALID, HTML_DEPRECATED, <a href="libxml-HTMLparser.html#HTML_INVALID">HTML_INVALID</a></td></tr></tbody></table></div><h3><a name="htmlEncodeEntities" id="htmlEncodeEntities"></a>Function: htmlEncodeEntities</h3><pre class="programlisting">int htmlEncodeEntities (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen, <br /> int quoteChar)<br />
+</pre><p>Take a block of UTF-8 chars in and try to convert it to an ASCII plus HTML entities block of chars out.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a pointer to an array of bytes to store the result</td></tr><tr><td><span class="term"><i><tt>outlen</tt></i>:</span></td><td>the length of @out</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a pointer to an array of UTF-8 chars</td></tr><tr><td><span class="term"><i><tt>inlen</tt></i>:</span></td><td>the length of @in</td></tr><tr><td><span class="term"><i><tt>quoteChar</tt></i>:</span></td><td>the quote character to escape (' or ") or zero.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed as the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.</td></tr></tbody></table></div><h3><a name="htmlEntityLookup" id="htmlEntityLookup"></a>Function: htmlEntityLookup</h3><pre class="programlisting">const <a href="libxml-HTMLparser.html#htmlEntityDesc">htmlEntityDesc</a> * htmlEntityLookup (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed.</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 entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the associated <a href="libxml-HTMLparser.html#htmlEntityDescPtr">htmlEntityDescPtr</a> if found, NULL otherwise.</td></tr></tbody></table></div><h3><a name="htmlEntityValueLookup" id="htmlEntityValueLookup"></a>Function: htmlEntityValueLookup</h3><pre class="programlisting">const <a href="libxml-HTMLparser.html#htmlEntityDesc">htmlEntityDesc</a> * htmlEntityValueLookup (unsigned int value)<br />
+</pre><p>Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the entity's unicode value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the associated <a href="libxml-HTMLparser.html#htmlEntityDescPtr">htmlEntityDescPtr</a> if found, NULL otherwise.</td></tr></tbody></table></div><h3><a name="htmlFreeParserCtxt" id="htmlFreeParserCtxt"></a>Function: htmlFreeParserCtxt</h3><pre class="programlisting">void htmlFreeParserCtxt (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Free all the memory used by a parser context. However the parsed document in ctxt-&gt;myDoc is not freed.</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 HTML parser context</td></tr></tbody></table></div><h3><a name="htmlHandleOmittedElem" id="htmlHandleOmittedElem"></a>Function: htmlHandleOmittedElem</h3><pre class="programlisting">int htmlHandleOmittedElem (int val)<br />
+</pre><p>Set and return the previous value for handling HTML omitted tags.</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 handling, 1 for auto insertion.</td></tr></tbody></table></div><h3><a name="htmlIsAutoClosed" id="htmlIsAutoClosed"></a>Function: htmlIsAutoClosed</h3><pre class="programlisting">int htmlIsAutoClosed (<a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> doc, <br /> <a href="libxml-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> elem)<br />
+</pre><p>The HTML DTD allows a tag to implicitly close other tags. The list is kept in htmlStartClose array. This function checks if a tag is autoclosed by one of it's child</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 HTML document</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the HTML element</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if autoclosed, 0 otherwise</td></tr></tbody></table></div><h3><a name="htmlIsScriptAttribute" id="htmlIsScriptAttribute"></a>Function: htmlIsScriptAttribute</h3><pre class="programlisting">int htmlIsScriptAttribute (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Check if an <a href="libxml-SAX.html#attribute">attribute</a> is of content type Script</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>an <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 is the <a href="libxml-SAX.html#attribute">attribute</a> is a script 0 otherwise</td></tr></tbody></table></div><h3><a name="htmlNodeStatus" id="htmlNodeStatus"></a>Function: htmlNodeStatus</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlStatus">htmlStatus</a> htmlNodeStatus (const <a href="libxml-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> node, <br /> int legacy)<br />
+</pre><p>Checks whether the tree node is valid. Experimental (the author only uses the HTML enhancements in a SAX parser)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>an <a href="libxml-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> in a tree</td></tr><tr><td><span class="term"><i><tt>legacy</tt></i>:</span></td><td>whether to allow deprecated elements (YES is faster here for Element nodes)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>for Element nodes, a return from <a href="libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a> (if legacy allowed) or <a href="libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a> (otherwise). for Attribute nodes, a return from <a href="libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a> for other nodes, <a href="libxml-HTMLparser.html#HTML_NA">HTML_NA</a> (no checks performed)</td></tr></tbody></table></div><h3><a name="htmlParseCharRef" id="htmlParseCharRef"></a>Function: htmlParseCharRef</h3><pre class="programlisting">int htmlParseCharRef (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse Reference declarations [66] CharRef ::= '&amp;#' [0-9]+ ';' | '&amp;#x' [0-9a-fA-F]+ ';'</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 HTML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value parsed (as an int)</td></tr></tbody></table></div><h3><a name="htmlParseChunk" id="htmlParseChunk"></a>Function: htmlParseChunk</h3><pre class="programlisting">int htmlParseChunk (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const char * chunk, <br /> int size, <br /> int terminate)<br />
+</pre><p>Parse a Chunk of 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>an HTML parser context</td></tr><tr><td><span class="term"><i><tt>chunk</tt></i>:</span></td><td>an char array</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size in byte of the chunk</td></tr><tr><td><span class="term"><i><tt>terminate</tt></i>:</span></td><td>last chunk indicator</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>zero if no error, the <a href="libxml-xmlerror.html#xmlParserErrors">xmlParserErrors</a> otherwise.</td></tr></tbody></table></div><h3><a name="htmlParseDoc" id="htmlParseDoc"></a>Function: htmlParseDoc</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlParseDoc (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * encoding)<br />
+</pre><p>parse an HTML in-memory document and build a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>a free form C string describing the HTML document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlParseDocument" id="htmlParseDocument"></a>Function: htmlParseDocument</h3><pre class="programlisting">int htmlParseDocument (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an HTML document (and build a tree if using the standard SAX interface).</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 HTML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0, -1 in case of error. the parser context is augmented as a result of the parsing.</td></tr></tbody></table></div><h3><a name="htmlParseElement" id="htmlParseElement"></a>Function: htmlParseElement</h3><pre class="programlisting">void htmlParseElement (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an HTML element, this is highly recursive [39] element ::= EmptyElemTag | STag content ETag [41] Attribute ::= Name Eq AttValue</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 HTML parser context</td></tr></tbody></table></div><h3><a name="htmlParseEntityRef" id="htmlParseEntityRef"></a>Function: htmlParseEntityRef</h3><pre class="programlisting">const <a href="libxml-HTMLparser.html#htmlEntityDesc">htmlEntityDesc</a> * htmlParseEntityRef (<a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** str)<br />
+</pre><p>parse an HTML ENTITY references [68] EntityRef ::= '&amp;' Name ';'</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 HTML parser context</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>location to store the entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the associated <a href="libxml-HTMLparser.html#htmlEntityDescPtr">htmlEntityDescPtr</a> if found, or NULL otherwise, if non-NULL *str will have to be freed by the caller.</td></tr></tbody></table></div><h3><a name="htmlParseFile" id="htmlParseFile"></a>Function: htmlParseFile</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlParseFile (const char * filename, <br /> const char * encoding)<br />
+</pre><p>parse an HTML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>a free form C string describing the HTML document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlReadDoc" id="htmlReadDoc"></a>Function: htmlReadDoc</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlReadDoc (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML in-memory document and build a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to a zero terminated string</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlReadFd" id="htmlReadFd"></a>Function: htmlReadFd</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlReadFd (int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML from a file descriptor and build a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>fd</tt></i>:</span></td><td>an open file descriptor</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlReadFile" id="htmlReadFile"></a>Function: htmlReadFile</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlReadFile (const char * filename, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML file from the filesystem or the network.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file or URL</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlReadIO" id="htmlReadIO"></a>Function: htmlReadIO</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlReadIO (<a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an HTML document from I/O functions and source and build a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ioread</tt></i>:</span></td><td>an I/O read function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlReadMemory" id="htmlReadMemory"></a>Function: htmlReadMemory</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlReadMemory (const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML in-memory document and build a tree.</p>
+<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</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>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of htmlParserOption(s)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="htmlSAXParseDoc" id="htmlSAXParseDoc"></a>Function: htmlSAXParseDoc</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlSAXParseDoc (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * encoding, <br /> <a href="libxml-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a> sax, <br /> void * userData)<br />
+</pre><p>Parse an HTML in-memory document. If sax is not NULL, use the SAX callbacks to handle parse events. If sax is NULL, fallback to the default DOM behavior and return a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>a free form C string describing the HTML document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>the SAX handler block</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>if using SAX, this pointer will be provided on callbacks.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree unless SAX is NULL or the document is not well formed.</td></tr></tbody></table></div><h3><a name="htmlSAXParseFile" id="htmlSAXParseFile"></a>Function: htmlSAXParseFile</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlSAXParseFile (const char * filename, <br /> const char * encoding, <br /> <a href="libxml-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a> sax, <br /> void * userData)<br />
+</pre><p>parse an HTML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>a free form C string describing the HTML document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>the SAX handler block</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>if using SAX, this pointer will be provided on callbacks.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree unless SAX is NULL or the document is not well formed.</td></tr></tbody></table></div><h3><a name="htmlTagLookup" id="htmlTagLookup"></a>Function: htmlTagLookup</h3><pre class="programlisting">const <a href="libxml-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * htmlTagLookup (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * tag)<br />
+</pre><p>Lookup the HTML tag in the ElementTable</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tag</tt></i>:</span></td><td>The tag name in lowercase</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the related <a href="libxml-HTMLparser.html#htmlElemDescPtr">htmlElemDescPtr</a> or NULL if not found.</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-HTMLtree.html b/doc/html/libxml-HTMLtree.html
new file mode 100644
index 0000000..19ca975
--- /dev/null
+++ b/doc/html/libxml-HTMLtree.html
@@ -0,0 +1,70 @@
+<?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 HTMLtree from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module HTMLtree 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-HTMLparser.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-HTMLparser.html">HTMLparser</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-SAX.html">SAX</a></th><td><a accesskey="n" href="libxml-SAX.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module implements a few function needed to process tree in an HTML specific way. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#HTML_COMMENT_NODE">HTML_COMMENT_NODE</a></pre><pre class="programlisting">#define <a href="#HTML_ENTITY_REF_NODE">HTML_ENTITY_REF_NODE</a></pre><pre class="programlisting">#define <a href="#HTML_PI_NODE">HTML_PI_NODE</a></pre><pre class="programlisting">#define <a href="#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a></pre><pre class="programlisting">#define <a href="#HTML_TEXT_NODE">HTML_TEXT_NODE</a></pre><pre class="programlisting">void <a href="#htmlDocContentDumpFormatOutput">htmlDocContentDumpFormatOutput</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)</pre>
+<pre class="programlisting">void <a href="#htmlDocContentDumpOutput">htmlDocContentDumpOutput</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)</pre>
+<pre class="programlisting">int <a href="#htmlDocDump">htmlDocDump</a> (FILE * f, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#htmlDocDumpMemory">htmlDocDumpMemory</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br /> int * size)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#htmlGetMetaEncoding">htmlGetMetaEncoding</a> (<a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> doc)</pre>
+<pre class="programlisting">int <a href="#htmlIsBooleanAttr">htmlIsBooleanAttr</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlNewDoc">htmlNewDoc</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID)</pre>
+<pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlNewDocNoDtD">htmlNewDocNoDtD</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID)</pre>
+<pre class="programlisting">int <a href="#htmlNodeDump">htmlNodeDump</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#htmlNodeDumpFile">htmlNodeDumpFile</a> (FILE * out, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">int <a href="#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a> (FILE * out, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const char * encoding, <br /> int format)</pre>
+<pre class="programlisting">void <a href="#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const char * encoding, <br /> int format)</pre>
+<pre class="programlisting">void <a href="#htmlNodeDumpOutput">htmlNodeDumpOutput</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const char * encoding)</pre>
+<pre class="programlisting">int <a href="#htmlSaveFile">htmlSaveFile</a> (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)</pre>
+<pre class="programlisting">int <a href="#htmlSaveFileEnc">htmlSaveFileEnc</a> (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)</pre>
+<pre class="programlisting">int <a href="#htmlSaveFileFormat">htmlSaveFileFormat</a> (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)</pre>
+<pre class="programlisting">int <a href="#htmlSetMetaEncoding">htmlSetMetaEncoding</a> (<a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * encoding)</pre>
+<h2>Description</h2>
+<h3><a name="HTML_COMMENT_NODE" id="HTML_COMMENT_NODE"></a>Macro: HTML_COMMENT_NODE</h3><pre>#define HTML_COMMENT_NODE</pre><p>Macro. A <a href="libxml-SAX.html#comment">comment</a> in a HTML document is really implemented the same way as a <a href="libxml-SAX.html#comment">comment</a> in an XML document.</p>
+<h3><a name="HTML_ENTITY_REF_NODE" id="HTML_ENTITY_REF_NODE"></a>Macro: HTML_ENTITY_REF_NODE</h3><pre>#define HTML_ENTITY_REF_NODE</pre><p>Macro. An entity <a href="libxml-SAX.html#reference">reference</a> in a HTML document is really implemented the same way as an entity <a href="libxml-SAX.html#reference">reference</a> in an XML document.</p>
+<h3><a name="HTML_PI_NODE" id="HTML_PI_NODE"></a>Macro: HTML_PI_NODE</h3><pre>#define HTML_PI_NODE</pre><p>Macro. A processing instruction in a HTML document is really implemented the same way as a processing instruction in an XML document.</p>
+<h3><a name="HTML_PRESERVE_NODE" id="HTML_PRESERVE_NODE"></a>Macro: HTML_PRESERVE_NODE</h3><pre>#define HTML_PRESERVE_NODE</pre><p>Macro. A preserved node in a HTML document is really implemented the same way as a CDATA section in an XML document.</p>
+<h3><a name="HTML_TEXT_NODE" id="HTML_TEXT_NODE"></a>Macro: HTML_TEXT_NODE</h3><pre>#define HTML_TEXT_NODE</pre><p>Macro. A text node in a HTML document is really implemented the same way as a text node in an XML document.</p>
+<h3><a name="htmlDocContentDumpFormatOutput" id="htmlDocContentDumpFormatOutput"></a>Function: htmlDocContentDumpFormatOutput</h3><pre class="programlisting">void htmlDocContentDumpFormatOutput (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)<br />
+</pre><p>Dump an HTML document.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the HTML buffer output</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding string</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr></tbody></table></div><h3><a name="htmlDocContentDumpOutput" id="htmlDocContentDumpOutput"></a>Function: htmlDocContentDumpOutput</h3><pre class="programlisting">void htmlDocContentDumpOutput (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)<br />
+</pre><p>Dump an HTML document. Formating return/spaces are added.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the HTML buffer output</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding string</td></tr></tbody></table></div><h3><a name="htmlDocDump" id="htmlDocDump"></a>Function: htmlDocDump</h3><pre class="programlisting">int htmlDocDump (FILE * f, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)<br />
+</pre><p>Dump an HTML document to an open FILE.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the FILE*</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="htmlDocDumpMemory" id="htmlDocDumpMemory"></a>Function: htmlDocDumpMemory</h3><pre class="programlisting">void htmlDocDumpMemory (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br /> int * size)<br />
+</pre><p>Dump an HTML document in memory and return the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * and it's size. It's up to the caller to free the memory.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>mem</tt></i>:</span></td><td>OUT: the memory pointer</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>OUT: the memory length</td></tr></tbody></table></div><h3><a name="htmlGetMetaEncoding" id="htmlGetMetaEncoding"></a>Function: htmlGetMetaEncoding</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * htmlGetMetaEncoding (<a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> doc)<br />
+</pre><p>Encoding definition lookup in the Meta tags</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the current encoding as flagged in the HTML source</td></tr></tbody></table></div><h3><a name="htmlIsBooleanAttr" id="htmlIsBooleanAttr"></a>Function: htmlIsBooleanAttr</h3><pre class="programlisting">int htmlIsBooleanAttr (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Determine if a given <a href="libxml-SAX.html#attribute">attribute</a> is a boolean attribute.</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 name of the <a href="libxml-SAX.html#attribute">attribute</a> to check</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>false if the <a href="libxml-SAX.html#attribute">attribute</a> is not boolean, true otherwise.</td></tr></tbody></table></div><h3><a name="htmlNewDoc" id="htmlNewDoc"></a>Function: htmlNewDoc</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlNewDoc (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID)<br />
+</pre><p>Creates a new HTML document</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>URI for the dtd, or NULL</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external ID of the DTD, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new document</td></tr></tbody></table></div><h3><a name="htmlNewDocNoDtD" id="htmlNewDocNoDtD"></a>Function: htmlNewDocNoDtD</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlNewDocNoDtD (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID)<br />
+</pre><p>Creates a new HTML document without a DTD node if @URI and @ExternalID are NULL</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>URI for the dtd, or NULL</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external ID of the DTD, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new document, do not initialize the DTD if not provided</td></tr></tbody></table></div><h3><a name="htmlNodeDump" id="htmlNodeDump"></a>Function: htmlNodeDump</h3><pre class="programlisting">int htmlNodeDump (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the HTML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error</td></tr></tbody></table></div><h3><a name="htmlNodeDumpFile" id="htmlNodeDumpFile"></a>Function: htmlNodeDumpFile</h3><pre class="programlisting">void htmlNodeDumpFile (FILE * out, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>the FILE pointer</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr></tbody></table></div><h3><a name="htmlNodeDumpFileFormat" id="htmlNodeDumpFileFormat"></a>Function: htmlNodeDumpFileFormat</h3><pre class="programlisting">int htmlNodeDumpFileFormat (FILE * out, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const char * encoding, <br /> int format)<br />
+</pre><p>Dump an HTML node, recursive behaviour,children are printed too. TODO: if encoding == NULL try to save in the doc encoding</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>the FILE pointer</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="htmlNodeDumpFormatOutput" id="htmlNodeDumpFormatOutput"></a>Function: htmlNodeDumpFormatOutput</h3><pre class="programlisting">void htmlNodeDumpFormatOutput (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const char * encoding, <br /> int format)<br />
+</pre><p>Dump an HTML node, recursive behaviour,children are printed too.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the HTML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding string</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr></tbody></table></div><h3><a name="htmlNodeDumpOutput" id="htmlNodeDumpOutput"></a>Function: htmlNodeDumpOutput</h3><pre class="programlisting">void htmlNodeDumpOutput (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const char * encoding)<br />
+</pre><p>Dump an HTML node, recursive behaviour,children are printed too, and formatting returns/spaces are added.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the HTML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding string</td></tr></tbody></table></div><h3><a name="htmlSaveFile" id="htmlSaveFile"></a>Function: htmlSaveFile</h3><pre class="programlisting">int htmlSaveFile (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)<br />
+</pre><p>Dump an HTML document to a file. If @filename is "-" the stdout file is used.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename (or URL)</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="htmlSaveFileEnc" id="htmlSaveFileEnc"></a>Function: htmlSaveFileEnc</h3><pre class="programlisting">int htmlSaveFileEnc (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)<br />
+</pre><p>Dump an HTML document to a file using a given encoding and formatting returns/spaces are added.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="htmlSaveFileFormat" id="htmlSaveFileFormat"></a>Function: htmlSaveFileFormat</h3><pre class="programlisting">int htmlSaveFileFormat (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)<br />
+</pre><p>Dump an HTML document to a file using a given encoding.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="htmlSetMetaEncoding" id="htmlSetMetaEncoding"></a>Function: htmlSetMetaEncoding</h3><pre class="programlisting">int htmlSetMetaEncoding (<a href="libxml-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * encoding)<br />
+</pre><p>Sets the current encoding in the Meta tags NOTE: this will not change the document content encoding, just the META flag associated.</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>encoding</tt></i>:</span></td><td>the encoding string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><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-SAX.html b/doc/html/libxml-SAX.html
new file mode 100644
index 0000000..60646f8
--- /dev/null
+++ b/doc/html/libxml-SAX.html
@@ -0,0 +1,125 @@
+<?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 SAX from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module SAX 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-HTMLtree.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-HTMLtree.html">HTMLtree</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-SAX2.html">SAX2</a></th><td><a accesskey="n" href="libxml-SAX2.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><h2 style="font-weight:bold;color:red;text-align:center">This module is deprecated</h2><p>DEPRECATED set of SAX version 1 interfaces used to build the DOM tree. </p><div class="deprecated"><h2>Table of Contents</h2><pre class="programlisting">void <a href="#cdataBlock">cdataBlock</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#comment">comment</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#checkNamespace">checkNamespace</a> (void * ctx, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespace)</pre>
+<pre class="programlisting">void <a href="#startElement">startElement</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** atts)</pre>
+<pre class="programlisting">void <a href="#inithtmlDefaultSAXHandler">inithtmlDefaultSAXHandler</a> (<a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> * hdlr)</pre>
+<pre class="programlisting">int <a href="#getColumnNumber">getColumnNumber</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#endElement">endElement</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#attribute">attribute</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">void <a href="#namespaceDecl">namespaceDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> <a href="#getNamespace">getNamespace</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#initdocbDefaultSAXHandler">initdocbDefaultSAXHandler</a> (<a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> * hdlr)</pre>
+<pre class="programlisting">void <a href="#setDocumentLocator">setDocumentLocator</a> (void * ctx, <br /> <a href="libxml-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a> loc)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#getPublicId">getPublicId</a> (void * ctx)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#getEntity">getEntity</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#characters">characters</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#elementDecl">elementDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content)</pre>
+<pre class="programlisting">void <a href="#ignorableWhitespace">ignorableWhitespace</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#hasExternalSubset">hasExternalSubset</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#isStandalone">isStandalone</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#unparsedEntityDecl">unparsedEntityDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * notationName)</pre>
+<pre class="programlisting">void <a href="#reference">reference</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#globalNamespace">globalNamespace</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting">void <a href="#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a> (<a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> * hdlr, <br /> int warning)</pre>
+<pre class="programlisting">int <a href="#hasInternalSubset">hasInternalSubset</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#processingInstruction">processingInstruction</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#getParameterEntity">getParameterEntity</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#attributeDecl">attributeDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> int type, <br /> int def, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defaultValue, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> tree)</pre>
+<pre class="programlisting">void <a href="#notationDecl">notationDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)</pre>
+<pre class="programlisting">void <a href="#entityDecl">entityDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">void <a href="#setNamespace">setNamespace</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#externalSubset">externalSubset</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#resolveEntity">resolveEntity</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#getSystemId">getSystemId</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#startDocument">startDocument</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#internalSubset">internalSubset</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting">void <a href="#endDocument">endDocument</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#getLineNumber">getLineNumber</a> (void * ctx)</pre>
+<h2>Description</h2>
+<h3><a name="cdataBlock" id="cdataBlock"></a>Function: cdataBlock</h3><pre class="programlisting">void cdataBlock (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int len)<br />
+</pre><p>called when a pcdata block has been parsed DEPRECATED: use xmlSAX2CDataBlock()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>The pcdata content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the block length</td></tr></tbody></table></div><h3><a name="comment" id="comment"></a>Function: comment</h3><pre class="programlisting">void comment (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>A <a href="libxml-SAX.html#comment">comment</a> has been parsed. DEPRECATED: use xmlSAX2Comment()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the <a href="libxml-SAX.html#comment">comment</a> content</td></tr></tbody></table></div><h3><a name="checkNamespace" id="checkNamespace"></a>Function: checkNamespace</h3><pre class="programlisting">int checkNamespace (void * ctx, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespace)<br />
+</pre><p>Check that the current element namespace is the same as the one read upon parsing. DEPRECATED</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>namespace</tt></i>:</span></td><td>the namespace to check against</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="startElement" id="startElement"></a>Function: startElement</h3><pre class="programlisting">void startElement (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** atts)<br />
+</pre><p>called when an opening tag has been processed. DEPRECATED: use xmlSAX2StartElement()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>fullname</tt></i>:</span></td><td>The element name, including namespace prefix</td></tr><tr><td><span class="term"><i><tt>atts</tt></i>:</span></td><td>An array of name/value attributes pairs, NULL terminated</td></tr></tbody></table></div><h3><a name="inithtmlDefaultSAXHandler" id="inithtmlDefaultSAXHandler"></a>Function: inithtmlDefaultSAXHandler</h3><pre class="programlisting">void inithtmlDefaultSAXHandler (<a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> * hdlr)<br />
+</pre><p>Initialize the default HTML SAX version 1 handler DEPRECATED: use xmlSAX2InitHtmlDefaultSAXHandler() for the new SAX2 blocks</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>hdlr</tt></i>:</span></td><td>the SAX handler</td></tr></tbody></table></div><h3><a name="getColumnNumber" id="getColumnNumber"></a>Function: getColumnNumber</h3><pre class="programlisting">int getColumnNumber (void * ctx)<br />
+</pre><p>Provide the column number of the current parsing point. DEPRECATED: use xmlSAX2GetColumnNumber()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an int</td></tr></tbody></table></div><h3><a name="endElement" id="endElement"></a>Function: endElement</h3><pre class="programlisting">void endElement (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>called when the end of an element has been detected. DEPRECATED: use xmlSAX2EndElement()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The element name</td></tr></tbody></table></div><h3><a name="attribute" id="attribute"></a>Function: attribute</h3><pre class="programlisting">void attribute (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Handle an <a href="libxml-SAX.html#attribute">attribute</a> that has been read by the parser. The default handling is to convert the <a href="libxml-SAX.html#attribute">attribute</a> into an DOM subtree and past it in a new <a href="libxml-tree.html#xmlAttr">xmlAttr</a> element added to the element. DEPRECATED: use xmlSAX2Attribute()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>fullname</tt></i>:</span></td><td>The <a href="libxml-SAX.html#attribute">attribute</a> name, including namespace prefix</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>The <a href="libxml-SAX.html#attribute">attribute</a> value</td></tr></tbody></table></div><h3><a name="namespaceDecl" id="namespaceDecl"></a>Function: namespaceDecl</h3><pre class="programlisting">void namespaceDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p>A namespace has been parsed. DEPRECATED</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>href</tt></i>:</span></td><td>the namespace associated URN</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the namespace prefix</td></tr></tbody></table></div><h3><a name="getNamespace" id="getNamespace"></a>Function: getNamespace</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> getNamespace (void * ctx)<br />
+</pre><p>Get the current element namespace. DEPRECATED</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> or NULL if none</td></tr></tbody></table></div><h3><a name="initdocbDefaultSAXHandler" id="initdocbDefaultSAXHandler"></a>Function: initdocbDefaultSAXHandler</h3><pre class="programlisting">void initdocbDefaultSAXHandler (<a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> * hdlr)<br />
+</pre><p>Initialize the default DocBook SAX version 1 handler DEPRECATED: use xmlSAX2InitDocbDefaultSAXHandler() for the new SAX2 blocks</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>hdlr</tt></i>:</span></td><td>the SAX handler</td></tr></tbody></table></div><h3><a name="setDocumentLocator" id="setDocumentLocator"></a>Function: setDocumentLocator</h3><pre class="programlisting">void setDocumentLocator (void * ctx, <br /> <a href="libxml-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a> loc)<br />
+</pre><p>Receive the document locator at startup, actually <a href="libxml-globals.html#xmlDefaultSAXLocator">xmlDefaultSAXLocator</a> Everything is available on the context, so this is useless in our case. DEPRECATED</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>loc</tt></i>:</span></td><td>A SAX Locator</td></tr></tbody></table></div><h3><a name="getPublicId" id="getPublicId"></a>Function: getPublicId</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * getPublicId (void * ctx)<br />
+</pre><p>Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN" DEPRECATED: use xmlSAX2GetPublicId()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr></tbody></table></div><h3><a name="getEntity" id="getEntity"></a>Function: getEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> getEntity (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Get an entity by name DEPRECATED: use xmlSAX2GetEntity()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> if found.</td></tr></tbody></table></div><h3><a name="characters" id="characters"></a>Function: characters</h3><pre class="programlisting">void characters (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)<br />
+</pre><p>receiving some chars from the parser. DEPRECATED: use xmlSAX2Characters()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr></tbody></table></div><h3><a name="elementDecl" id="elementDecl"></a>Function: elementDecl</h3><pre class="programlisting">void elementDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content)<br />
+</pre><p>An element definition has been parsed DEPRECATED: use xmlSAX2ElementDecl()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the element type</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the element value tree</td></tr></tbody></table></div><h3><a name="ignorableWhitespace" id="ignorableWhitespace"></a>Function: ignorableWhitespace</h3><pre class="programlisting">void ignorableWhitespace (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)<br />
+</pre><p>receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use <a href="libxml-SAX.html#characters">characters</a> DEPRECATED: use xmlSAX2IgnorableWhitespace()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr></tbody></table></div><h3><a name="hasExternalSubset" id="hasExternalSubset"></a>Function: hasExternalSubset</h3><pre class="programlisting">int hasExternalSubset (void * ctx)<br />
+</pre><p>Does this document has an external subset DEPRECATED: use xmlSAX2HasExternalSubset()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true</td></tr></tbody></table></div><h3><a name="isStandalone" id="isStandalone"></a>Function: isStandalone</h3><pre class="programlisting">int isStandalone (void * ctx)<br />
+</pre><p>Is this document tagged standalone ? DEPRECATED: use xmlSAX2IsStandalone()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true</td></tr></tbody></table></div><h3><a name="unparsedEntityDecl" id="unparsedEntityDecl"></a>Function: unparsedEntityDecl</h3><pre class="programlisting">void unparsedEntityDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * notationName)<br />
+</pre><p>What to do when an unparsed entity declaration is parsed DEPRECATED: use xmlSAX2UnparsedEntityDecl()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The name of the entity</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr><tr><td><span class="term"><i><tt>notationName</tt></i>:</span></td><td>the name of the notation</td></tr></tbody></table></div><h3><a name="reference" id="reference"></a>Function: reference</h3><pre class="programlisting">void reference (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>called when an entity <a href="libxml-SAX.html#reference">reference</a> is detected. DEPRECATED: use xmlSAX2Reference()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The entity name</td></tr></tbody></table></div><h3><a name="globalNamespace" id="globalNamespace"></a>Function: globalNamespace</h3><pre class="programlisting">void globalNamespace (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p>An old global namespace has been parsed. DEPRECATED</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>href</tt></i>:</span></td><td>the namespace associated URN</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the namespace prefix</td></tr></tbody></table></div><h3><a name="initxmlDefaultSAXHandler" id="initxmlDefaultSAXHandler"></a>Function: initxmlDefaultSAXHandler</h3><pre class="programlisting">void initxmlDefaultSAXHandler (<a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> * hdlr, <br /> int warning)<br />
+</pre><p>Initialize the default XML SAX version 1 handler DEPRECATED: use xmlSAX2InitDefaultSAXHandler() for the new SAX2 blocks</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>hdlr</tt></i>:</span></td><td>the SAX handler</td></tr><tr><td><span class="term"><i><tt>warning</tt></i>:</span></td><td>flag if non-zero sets the handler warning procedure</td></tr></tbody></table></div><h3><a name="hasInternalSubset" id="hasInternalSubset"></a>Function: hasInternalSubset</h3><pre class="programlisting">int hasInternalSubset (void * ctx)<br />
+</pre><p>Does this document has an internal subset DEPRECATED: use xmlSAX2HasInternalSubset()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true</td></tr></tbody></table></div><h3><a name="processingInstruction" id="processingInstruction"></a>Function: processingInstruction</h3><pre class="programlisting">void processingInstruction (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data)<br />
+</pre><p>A processing instruction has been parsed. DEPRECATED: use xmlSAX2ProcessingInstruction()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>the target name</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the PI data's</td></tr></tbody></table></div><h3><a name="getParameterEntity" id="getParameterEntity"></a>Function: getParameterEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> getParameterEntity (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Get a parameter entity by name DEPRECATED: use xmlSAX2GetParameterEntity()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> if found.</td></tr></tbody></table></div><h3><a name="attributeDecl" id="attributeDecl"></a>Function: attributeDecl</h3><pre class="programlisting">void attributeDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> int type, <br /> int def, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defaultValue, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> tree)<br />
+</pre><p>An <a href="libxml-SAX.html#attribute">attribute</a> definition has been parsed DEPRECATED: use xmlSAX2AttributeDecl()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the name of the element</td></tr><tr><td><span class="term"><i><tt>fullname</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> type</td></tr><tr><td><span class="term"><i><tt>def</tt></i>:</span></td><td>the type of default value</td></tr><tr><td><span class="term"><i><tt>defaultValue</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> default value</td></tr><tr><td><span class="term"><i><tt>tree</tt></i>:</span></td><td>the tree of enumerated value set</td></tr></tbody></table></div><h3><a name="notationDecl" id="notationDecl"></a>Function: notationDecl</h3><pre class="programlisting">void notationDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)<br />
+</pre><p>What to do when a notation declaration has been parsed. DEPRECATED: use xmlSAX2NotationDecl()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The name of the notation</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr></tbody></table></div><h3><a name="entityDecl" id="entityDecl"></a>Function: entityDecl</h3><pre class="programlisting">void entityDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>An entity definition has been parsed DEPRECATED: use xmlSAX2EntityDecl()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the entity type</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the entity value (without processing).</td></tr></tbody></table></div><h3><a name="setNamespace" id="setNamespace"></a>Function: setNamespace</h3><pre class="programlisting">void setNamespace (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Set the current element namespace. DEPRECATED</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the namespace prefix</td></tr></tbody></table></div><h3><a name="externalSubset" id="externalSubset"></a>Function: externalSubset</h3><pre class="programlisting">void externalSubset (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>Callback on external subset declaration. DEPRECATED: use xmlSAX2ExternalSubset()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the root element name</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external ID</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the SYSTEM ID (e.g. filename or URL)</td></tr></tbody></table></div><h3><a name="resolveEntity" id="resolveEntity"></a>Function: resolveEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> resolveEntity (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)<br />
+</pre><p>The entity loader, to control the loading of external entities, the application can either: - override this resolveEntity() callback in the SAX block - or better use the xmlSetExternalEntityLoader() function to set up it's own entity resolution routine DEPRECATED: use xmlSAX2ResolveEntity()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> if inlined or NULL for DOM behaviour.</td></tr></tbody></table></div><h3><a name="getSystemId" id="getSystemId"></a>Function: getSystemId</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * getSystemId (void * ctx)<br />
+</pre><p>Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd DEPRECATED: use xmlSAX2GetSystemId()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr></tbody></table></div><h3><a name="startDocument" id="startDocument"></a>Function: startDocument</h3><pre class="programlisting">void startDocument (void * ctx)<br />
+</pre><p>called when the document start being processed. DEPRECATED: use xmlSAX2StartDocument()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr></tbody></table></div><h3><a name="internalSubset" id="internalSubset"></a>Function: internalSubset</h3><pre class="programlisting">void internalSubset (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>Callback on internal subset declaration. DEPRECATED: use xmlSAX2InternalSubset()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the root element name</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external ID</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the SYSTEM ID (e.g. filename or URL)</td></tr></tbody></table></div><h3><a name="endDocument" id="endDocument"></a>Function: endDocument</h3><pre class="programlisting">void endDocument (void * ctx)<br />
+</pre><p>called when the document end has been detected. DEPRECATED: use xmlSAX2EndDocument()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr></tbody></table></div><h3><a name="getLineNumber" id="getLineNumber"></a>Function: getLineNumber</h3><pre class="programlisting">int getLineNumber (void * ctx)<br />
+</pre><p>Provide the line number of the current parsing point. DEPRECATED: use xmlSAX2GetLineNumber()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an int</td></tr></tbody></table></div></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-SAX2.html b/doc/html/libxml-SAX2.html
new file mode 100644
index 0000000..2b9055e
--- /dev/null
+++ b/doc/html/libxml-SAX2.html
@@ -0,0 +1,143 @@
+<?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 SAX2 from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module SAX2 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-SAX.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-SAX.html">SAX</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-c14n.html">c14n</a></th><td><a accesskey="n" href="libxml-c14n.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>those are the default SAX2 interfaces used by the library when building DOM tree. </p><h2>Table of Contents</h2><pre class="programlisting">void <a href="#docbDefaultSAXHandlerInit">docbDefaultSAXHandlerInit</a> (void)</pre>
+<pre class="programlisting">void <a href="#htmlDefaultSAXHandlerInit">htmlDefaultSAXHandlerInit</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlDefaultSAXHandlerInit">xmlDefaultSAXHandlerInit</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2AttributeDecl">xmlSAX2AttributeDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> int type, <br /> int def, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defaultValue, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> tree)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2CDataBlock">xmlSAX2CDataBlock</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2Characters">xmlSAX2Characters</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlSAX2CheckNamespace">xmlSAX2CheckNamespace</a> (void * ctx, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2Comment">xmlSAX2Comment</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2ElementDecl">xmlSAX2ElementDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2EndDocument">xmlSAX2EndDocument</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2EndElement">xmlSAX2EndElement</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2EndElementNs">xmlSAX2EndElementNs</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2EntityDecl">xmlSAX2EntityDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2ExternalSubset">xmlSAX2ExternalSubset</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting">int <a href="#xmlSAX2GetColumnNumber">xmlSAX2GetColumnNumber</a> (void * ctx)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlSAX2GetEntity">xmlSAX2GetEntity</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlSAX2GetLineNumber">xmlSAX2GetLineNumber</a> (void * ctx)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> <a href="#xmlSAX2GetNamespace">xmlSAX2GetNamespace</a> (void * ctx)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlSAX2GetParameterEntity">xmlSAX2GetParameterEntity</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlSAX2GetPublicId">xmlSAX2GetPublicId</a> (void * ctx)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2GlobalNamespace">xmlSAX2GlobalNamespace</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting">int <a href="#xmlSAX2HasExternalSubset">xmlSAX2HasExternalSubset</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlSAX2HasInternalSubset">xmlSAX2HasInternalSubset</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a> (<a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> * hdlr, <br /> int warning)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2InitDocbDefaultSAXHandler">xmlSAX2InitDocbDefaultSAXHandler</a> (<a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> * hdlr)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2InitHtmlDefaultSAXHandler">xmlSAX2InitHtmlDefaultSAXHandler</a> (<a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> * hdlr)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2InternalSubset">xmlSAX2InternalSubset</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting">int <a href="#xmlSAX2IsStandalone">xmlSAX2IsStandalone</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2NamespaceDecl">xmlSAX2NamespaceDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2NotationDecl">xmlSAX2NotationDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2ProcessingInstruction">xmlSAX2ProcessingInstruction</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2Reference">xmlSAX2Reference</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a> (void * ctx, <br /> <a href="libxml-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a> loc)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2SetNamespace">xmlSAX2SetNamespace</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2StartDocument">xmlSAX2StartDocument</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2StartElement">xmlSAX2StartElement</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** atts)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> int nb_namespaces, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces, <br /> int nb_attributes, <br /> int nb_defaulted, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** attributes)</pre>
+<pre class="programlisting">void <a href="#xmlSAX2UnparsedEntityDecl">xmlSAX2UnparsedEntityDecl</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * notationName)</pre>
+<pre class="programlisting">int <a href="#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a> (int version)</pre>
+<pre class="programlisting">int <a href="#xmlSAXVersion">xmlSAXVersion</a> (<a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> * hdlr, <br /> int version)</pre>
+<h2>Description</h2>
+<h3><a name="docbDefaultSAXHandlerInit" id="docbDefaultSAXHandlerInit"></a>Function: docbDefaultSAXHandlerInit</h3><pre class="programlisting">void docbDefaultSAXHandlerInit (void)<br />
+</pre><p>Initialize the default SAX handler</p>
+<h3><a name="htmlDefaultSAXHandlerInit" id="htmlDefaultSAXHandlerInit"></a>Function: htmlDefaultSAXHandlerInit</h3><pre class="programlisting">void htmlDefaultSAXHandlerInit (void)<br />
+</pre><p>Initialize the default SAX handler</p>
+<h3><a name="xmlDefaultSAXHandlerInit" id="xmlDefaultSAXHandlerInit"></a>Function: xmlDefaultSAXHandlerInit</h3><pre class="programlisting">void xmlDefaultSAXHandlerInit (void)<br />
+</pre><p>Initialize the default SAX2 handler</p>
+<h3><a name="xmlSAX2AttributeDecl" id="xmlSAX2AttributeDecl"></a>Function: xmlSAX2AttributeDecl</h3><pre class="programlisting">void xmlSAX2AttributeDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> int type, <br /> int def, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defaultValue, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> tree)<br />
+</pre><p>An <a href="libxml-SAX.html#attribute">attribute</a> definition has been parsed</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the name of the element</td></tr><tr><td><span class="term"><i><tt>fullname</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> type</td></tr><tr><td><span class="term"><i><tt>def</tt></i>:</span></td><td>the type of default value</td></tr><tr><td><span class="term"><i><tt>defaultValue</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> default value</td></tr><tr><td><span class="term"><i><tt>tree</tt></i>:</span></td><td>the tree of enumerated value set</td></tr></tbody></table></div><h3><a name="xmlSAX2CDataBlock" id="xmlSAX2CDataBlock"></a>Function: xmlSAX2CDataBlock</h3><pre class="programlisting">void xmlSAX2CDataBlock (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int len)<br />
+</pre><p>called when a pcdata block has been parsed</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>The pcdata content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the block length</td></tr></tbody></table></div><h3><a name="xmlSAX2Characters" id="xmlSAX2Characters"></a>Function: xmlSAX2Characters</h3><pre class="programlisting">void xmlSAX2Characters (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)<br />
+</pre><p>receiving some chars from the parser.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr></tbody></table></div><h3><a name="xmlSAX2CheckNamespace" id="xmlSAX2CheckNamespace"></a>Function: xmlSAX2CheckNamespace</h3><pre class="programlisting">int xmlSAX2CheckNamespace (void * ctx, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<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>nameSpace</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlSAX2Comment" id="xmlSAX2Comment"></a>Function: xmlSAX2Comment</h3><pre class="programlisting">void xmlSAX2Comment (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>A <a href="libxml-SAX2.html#xmlSAX2Comment">xmlSAX2Comment</a> has been parsed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the <a href="libxml-SAX2.html#xmlSAX2Comment">xmlSAX2Comment</a> content</td></tr></tbody></table></div><h3><a name="xmlSAX2ElementDecl" id="xmlSAX2ElementDecl"></a>Function: xmlSAX2ElementDecl</h3><pre class="programlisting">void xmlSAX2ElementDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content)<br />
+</pre><p>An element definition has been parsed</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the element type</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the element value tree</td></tr></tbody></table></div><h3><a name="xmlSAX2EndDocument" id="xmlSAX2EndDocument"></a>Function: xmlSAX2EndDocument</h3><pre class="programlisting">void xmlSAX2EndDocument (void * ctx)<br />
+</pre><p>called when the document end has been detected.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr></tbody></table></div><h3><a name="xmlSAX2EndElement" id="xmlSAX2EndElement"></a>Function: xmlSAX2EndElement</h3><pre class="programlisting">void xmlSAX2EndElement (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>called when the end of an element has been detected.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The element name</td></tr></tbody></table></div><h3><a name="xmlSAX2EndElementNs" id="xmlSAX2EndElementNs"></a>Function: xmlSAX2EndElementNs</h3><pre class="programlisting">void xmlSAX2EndElementNs (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)<br />
+</pre><p>SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>localname</tt></i>:</span></td><td>the local name of the element</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the element namespace prefix if available</td></tr><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the element namespace name if available</td></tr></tbody></table></div><h3><a name="xmlSAX2EntityDecl" id="xmlSAX2EntityDecl"></a>Function: xmlSAX2EntityDecl</h3><pre class="programlisting">void xmlSAX2EntityDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>An entity definition has been parsed</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the entity type</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the entity value (without processing).</td></tr></tbody></table></div><h3><a name="xmlSAX2ExternalSubset" id="xmlSAX2ExternalSubset"></a>Function: xmlSAX2ExternalSubset</h3><pre class="programlisting">void xmlSAX2ExternalSubset (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>Callback on external subset declaration.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the root element name</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external ID</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the SYSTEM ID (e.g. filename or URL)</td></tr></tbody></table></div><h3><a name="xmlSAX2GetColumnNumber" id="xmlSAX2GetColumnNumber"></a>Function: xmlSAX2GetColumnNumber</h3><pre class="programlisting">int xmlSAX2GetColumnNumber (void * ctx)<br />
+</pre><p>Provide the column number of the current parsing point.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an int</td></tr></tbody></table></div><h3><a name="xmlSAX2GetEntity" id="xmlSAX2GetEntity"></a>Function: xmlSAX2GetEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlSAX2GetEntity (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Get an entity by name</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> if found.</td></tr></tbody></table></div><h3><a name="xmlSAX2GetLineNumber" id="xmlSAX2GetLineNumber"></a>Function: xmlSAX2GetLineNumber</h3><pre class="programlisting">int xmlSAX2GetLineNumber (void * ctx)<br />
+</pre><p>Provide the line number of the current parsing point.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an int</td></tr></tbody></table></div><h3><a name="xmlSAX2GetNamespace" id="xmlSAX2GetNamespace"></a>Function: xmlSAX2GetNamespace</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> xmlSAX2GetNamespace (void * ctx)<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>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlSAX2GetParameterEntity" id="xmlSAX2GetParameterEntity"></a>Function: xmlSAX2GetParameterEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlSAX2GetParameterEntity (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Get a parameter entity by name</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> if found.</td></tr></tbody></table></div><h3><a name="xmlSAX2GetPublicId" id="xmlSAX2GetPublicId"></a>Function: xmlSAX2GetPublicId</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlSAX2GetPublicId (void * ctx)<br />
+</pre><p>Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr></tbody></table></div><h3><a name="xmlSAX2GetSystemId" id="xmlSAX2GetSystemId"></a>Function: xmlSAX2GetSystemId</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlSAX2GetSystemId (void * ctx)<br />
+</pre><p>Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr></tbody></table></div><h3><a name="xmlSAX2GlobalNamespace" id="xmlSAX2GlobalNamespace"></a>Function: xmlSAX2GlobalNamespace</h3><pre class="programlisting">void xmlSAX2GlobalNamespace (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p></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>href</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlSAX2HasExternalSubset" id="xmlSAX2HasExternalSubset"></a>Function: xmlSAX2HasExternalSubset</h3><pre class="programlisting">int xmlSAX2HasExternalSubset (void * ctx)<br />
+</pre><p>Does this document has an external subset</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true</td></tr></tbody></table></div><h3><a name="xmlSAX2HasInternalSubset" id="xmlSAX2HasInternalSubset"></a>Function: xmlSAX2HasInternalSubset</h3><pre class="programlisting">int xmlSAX2HasInternalSubset (void * ctx)<br />
+</pre><p>Does this document has an internal subset</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true</td></tr></tbody></table></div><h3><a name="xmlSAX2IgnorableWhitespace" id="xmlSAX2IgnorableWhitespace"></a>Function: xmlSAX2IgnorableWhitespace</h3><pre class="programlisting">void xmlSAX2IgnorableWhitespace (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)<br />
+</pre><p>receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use <a href="libxml-SAX2.html#xmlSAX2Characters">xmlSAX2Characters</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr></tbody></table></div><h3><a name="xmlSAX2InitDefaultSAXHandler" id="xmlSAX2InitDefaultSAXHandler"></a>Function: xmlSAX2InitDefaultSAXHandler</h3><pre class="programlisting">void xmlSAX2InitDefaultSAXHandler (<a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> * hdlr, <br /> int warning)<br />
+</pre><p>Initialize the default XML SAX2 handler</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>hdlr</tt></i>:</span></td><td>the SAX handler</td></tr><tr><td><span class="term"><i><tt>warning</tt></i>:</span></td><td>flag if non-zero sets the handler warning procedure</td></tr></tbody></table></div><h3><a name="xmlSAX2InitDocbDefaultSAXHandler" id="xmlSAX2InitDocbDefaultSAXHandler"></a>Function: xmlSAX2InitDocbDefaultSAXHandler</h3><pre class="programlisting">void xmlSAX2InitDocbDefaultSAXHandler (<a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> * hdlr)<br />
+</pre><p>Initialize the default DocBook SAX2 handler</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>hdlr</tt></i>:</span></td><td>the SAX handler</td></tr></tbody></table></div><h3><a name="xmlSAX2InitHtmlDefaultSAXHandler" id="xmlSAX2InitHtmlDefaultSAXHandler"></a>Function: xmlSAX2InitHtmlDefaultSAXHandler</h3><pre class="programlisting">void xmlSAX2InitHtmlDefaultSAXHandler (<a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> * hdlr)<br />
+</pre><p>Initialize the default HTML SAX2 handler</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>hdlr</tt></i>:</span></td><td>the SAX handler</td></tr></tbody></table></div><h3><a name="xmlSAX2InternalSubset" id="xmlSAX2InternalSubset"></a>Function: xmlSAX2InternalSubset</h3><pre class="programlisting">void xmlSAX2InternalSubset (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>Callback on internal subset declaration.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the root element name</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external ID</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the SYSTEM ID (e.g. filename or URL)</td></tr></tbody></table></div><h3><a name="xmlSAX2IsStandalone" id="xmlSAX2IsStandalone"></a>Function: xmlSAX2IsStandalone</h3><pre class="programlisting">int xmlSAX2IsStandalone (void * ctx)<br />
+</pre><p>Is this document tagged standalone ?</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true</td></tr></tbody></table></div><h3><a name="xmlSAX2NamespaceDecl" id="xmlSAX2NamespaceDecl"></a>Function: xmlSAX2NamespaceDecl</h3><pre class="programlisting">void xmlSAX2NamespaceDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p></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>href</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlSAX2NotationDecl" id="xmlSAX2NotationDecl"></a>Function: xmlSAX2NotationDecl</h3><pre class="programlisting">void xmlSAX2NotationDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)<br />
+</pre><p>What to do when a notation declaration has been parsed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The name of the notation</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr></tbody></table></div><h3><a name="xmlSAX2ProcessingInstruction" id="xmlSAX2ProcessingInstruction"></a>Function: xmlSAX2ProcessingInstruction</h3><pre class="programlisting">void xmlSAX2ProcessingInstruction (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data)<br />
+</pre><p>A processing instruction has been parsed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>the target name</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the PI data's</td></tr></tbody></table></div><h3><a name="xmlSAX2Reference" id="xmlSAX2Reference"></a>Function: xmlSAX2Reference</h3><pre class="programlisting">void xmlSAX2Reference (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>called when an entity <a href="libxml-SAX2.html#xmlSAX2Reference">xmlSAX2Reference</a> is detected.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The entity name</td></tr></tbody></table></div><h3><a name="xmlSAX2ResolveEntity" id="xmlSAX2ResolveEntity"></a>Function: xmlSAX2ResolveEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlSAX2ResolveEntity (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)<br />
+</pre><p>The entity loader, to control the loading of external entities, the application can either: - override this xmlSAX2ResolveEntity() callback in the SAX block - or better use the xmlSetExternalEntityLoader() function to set up it's own entity resolution routine</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> if inlined or NULL for DOM behaviour.</td></tr></tbody></table></div><h3><a name="xmlSAX2SetDocumentLocator" id="xmlSAX2SetDocumentLocator"></a>Function: xmlSAX2SetDocumentLocator</h3><pre class="programlisting">void xmlSAX2SetDocumentLocator (void * ctx, <br /> <a href="libxml-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a> loc)<br />
+</pre><p>Receive the document locator at startup, actually <a href="libxml-globals.html#xmlDefaultSAXLocator">xmlDefaultSAXLocator</a> Everything is available on the context, so this is useless in our case.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>loc</tt></i>:</span></td><td>A SAX Locator</td></tr></tbody></table></div><h3><a name="xmlSAX2SetNamespace" id="xmlSAX2SetNamespace"></a>Function: xmlSAX2SetNamespace</h3><pre class="programlisting">void xmlSAX2SetNamespace (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<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>name</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlSAX2StartDocument" id="xmlSAX2StartDocument"></a>Function: xmlSAX2StartDocument</h3><pre class="programlisting">void xmlSAX2StartDocument (void * ctx)<br />
+</pre><p>called when the document start being processed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr></tbody></table></div><h3><a name="xmlSAX2StartElement" id="xmlSAX2StartElement"></a>Function: xmlSAX2StartElement</h3><pre class="programlisting">void xmlSAX2StartElement (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** atts)<br />
+</pre><p>called when an opening tag has been processed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>fullname</tt></i>:</span></td><td>The element name, including namespace prefix</td></tr><tr><td><span class="term"><i><tt>atts</tt></i>:</span></td><td>An array of name/value attributes pairs, NULL terminated</td></tr></tbody></table></div><h3><a name="xmlSAX2StartElementNs" id="xmlSAX2StartElementNs"></a>Function: xmlSAX2StartElementNs</h3><pre class="programlisting">void xmlSAX2StartElementNs (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> int nb_namespaces, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces, <br /> int nb_attributes, <br /> int nb_defaulted, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** attributes)<br />
+</pre><p>SAX2 callback when an element start has been detected by the parser. It provides the namespace informations for the element, as well as the new namespace declarations on the element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>localname</tt></i>:</span></td><td>the local name of the element</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the element namespace prefix if available</td></tr><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the element namespace name if available</td></tr><tr><td><span class="term"><i><tt>nb_namespaces</tt></i>:</span></td><td>number of namespace definitions on that node</td></tr><tr><td><span class="term"><i><tt>namespaces</tt></i>:</span></td><td>pointer to the array of prefix/URI pairs namespace definitions</td></tr><tr><td><span class="term"><i><tt>nb_attributes</tt></i>:</span></td><td>the number of attributes on that node</td></tr><tr><td><span class="term"><i><tt>nb_defaulted</tt></i>:</span></td><td>the number of defaulted attributes.</td></tr><tr><td><span class="term"><i><tt>attributes</tt></i>:</span></td><td>pointer to the array of (localname/prefix/URI/value/end) <a href="libxml-SAX.html#attribute">attribute</a> values.</td></tr></tbody></table></div><h3><a name="xmlSAX2UnparsedEntityDecl" id="xmlSAX2UnparsedEntityDecl"></a>Function: xmlSAX2UnparsedEntityDecl</h3><pre class="programlisting">void xmlSAX2UnparsedEntityDecl (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * notationName)<br />
+</pre><p>What to do when an unparsed entity declaration is parsed</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The name of the entity</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr><tr><td><span class="term"><i><tt>notationName</tt></i>:</span></td><td>the name of the notation</td></tr></tbody></table></div><h3><a name="xmlSAXDefaultVersion" id="xmlSAXDefaultVersion"></a>Function: xmlSAXDefaultVersion</h3><pre class="programlisting">int xmlSAXDefaultVersion (int version)<br />
+</pre><p>Set the default version of SAX used globally by the library. Note that this may not be a good thing to do from a library it is better to use xmlSAXVersion() to set up specifically the version for a given parsing context.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>version</tt></i>:</span></td><td>the version, 1 or 2</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the previous value in case of success and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlSAXVersion" id="xmlSAXVersion"></a>Function: xmlSAXVersion</h3><pre class="programlisting">int xmlSAXVersion (<a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> * hdlr, <br /> int version)<br />
+</pre><p>Initialize the default XML SAX handler according to the version</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>hdlr</tt></i>:</span></td><td>the SAX handler</td></tr><tr><td><span class="term"><i><tt>version</tt></i>:</span></td><td>the version, 1 or 2</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div><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-c14n.html b/doc/html/libxml-c14n.html
new file mode 100644
index 0000000..ea440c5
--- /dev/null
+++ b/doc/html/libxml-c14n.html
@@ -0,0 +1,32 @@
+<?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 c14n from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module c14n 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-SAX2.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-SAX2.html">SAX2</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-catalog.html">catalog</a></th><td><a accesskey="n" href="libxml-catalog.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>the c14n modules provides a "Canonical XML" implementation</p><h2>Table of Contents</h2><pre class="programlisting">int <a href="#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> int exclusive, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** inclusive_ns_prefixes, <br /> int with_comments, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr)</pre>
+<pre class="programlisting">int <a href="#xmlC14NDocSave">xmlC14NDocSave</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> int exclusive, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** inclusive_ns_prefixes, <br /> int with_comments, <br /> const char * filename, <br /> int compression)</pre>
+<pre class="programlisting">int <a href="#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> int exclusive, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** inclusive_ns_prefixes, <br /> int with_comments, <br /> <a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf)</pre>
+<pre class="programlisting">int <a href="#xmlC14NExecute">xmlC14NExecute</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-c14n.html#xmlC14NIsVisibleCallback">xmlC14NIsVisibleCallback</a> is_visible_callback, <br /> void * user_data, <br /> int exclusive, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** inclusive_ns_prefixes, <br /> int with_comments, <br /> <a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf)</pre>
+<pre class="programlisting">Function type: <a href="#xmlC14NIsVisibleCallback">xmlC14NIsVisibleCallback</a>
+int <a href="#xmlC14NIsVisibleCallback">xmlC14NIsVisibleCallback</a> (void * user_data, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent)
+</pre>
+<h2>Description</h2>
+<h3><a name="xmlC14NDocDumpMemory" id="xmlC14NDocDumpMemory"></a>Function: xmlC14NDocDumpMemory</h3><pre class="programlisting">int xmlC14NDocDumpMemory (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> int exclusive, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** inclusive_ns_prefixes, <br /> int with_comments, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr)<br />
+</pre><p>Dumps the canonized image of given XML document into memory. For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document for canonization</td></tr><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>the nodes set to be included in the canonized image or NULL if all document nodes should be included</td></tr><tr><td><span class="term"><i><tt>exclusive</tt></i>:</span></td><td>the exclusive flag (0 - non-exclusive canonicalization; otherwise - exclusive canonicalization)</td></tr><tr><td><span class="term"><i><tt>inclusive_ns_prefixes</tt></i>:</span></td><td>the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise)</td></tr><tr><td><span class="term"><i><tt>with_comments</tt></i>:</span></td><td>include comments in the result (!=0) or not (==0)</td></tr><tr><td><span class="term"><i><tt>doc_txt_ptr</tt></i>:</span></td><td>the memory pointer for allocated canonical XML text; the caller of this functions is responsible for calling xmlFree() to free allocated memory</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written on success or a negative value on fail</td></tr></tbody></table></div><h3><a name="xmlC14NDocSave" id="xmlC14NDocSave"></a>Function: xmlC14NDocSave</h3><pre class="programlisting">int xmlC14NDocSave (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> int exclusive, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** inclusive_ns_prefixes, <br /> int with_comments, <br /> const char * filename, <br /> int compression)<br />
+</pre><p>Dumps the canonized image of given XML document into the file. For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document for canonization</td></tr><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>the nodes set to be included in the canonized image or NULL if all document nodes should be included</td></tr><tr><td><span class="term"><i><tt>exclusive</tt></i>:</span></td><td>the exclusive flag (0 - non-exclusive canonicalization; otherwise - exclusive canonicalization)</td></tr><tr><td><span class="term"><i><tt>inclusive_ns_prefixes</tt></i>:</span></td><td>the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise)</td></tr><tr><td><span class="term"><i><tt>with_comments</tt></i>:</span></td><td>include comments in the result (!=0) or not (==0)</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename to store canonical XML image</td></tr><tr><td><span class="term"><i><tt>compression</tt></i>:</span></td><td>the compression level (zlib requred): -1 - libxml default, 0 - uncompressed, &gt;0 - compression level</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written success or a negative value on fail</td></tr></tbody></table></div><h3><a name="xmlC14NDocSaveTo" id="xmlC14NDocSaveTo"></a>Function: xmlC14NDocSaveTo</h3><pre class="programlisting">int xmlC14NDocSaveTo (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> int exclusive, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** inclusive_ns_prefixes, <br /> int with_comments, <br /> <a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf)<br />
+</pre><p>Dumps the canonized image of given XML document into the provided buffer. For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document for canonization</td></tr><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>the nodes set to be included in the canonized image or NULL if all document nodes should be included</td></tr><tr><td><span class="term"><i><tt>exclusive</tt></i>:</span></td><td>the exclusive flag (0 - non-exclusive canonicalization; otherwise - exclusive canonicalization)</td></tr><tr><td><span class="term"><i><tt>inclusive_ns_prefixes</tt></i>:</span></td><td>the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise)</td></tr><tr><td><span class="term"><i><tt>with_comments</tt></i>:</span></td><td>include comments in the result (!=0) or not (==0)</td></tr><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the output buffer to store canonical XML; this buffer MUST have encoder==NULL because C14N requires UTF-8 output</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>non-negative value on success or a negative value on fail</td></tr></tbody></table></div><h3><a name="xmlC14NExecute" id="xmlC14NExecute"></a>Function: xmlC14NExecute</h3><pre class="programlisting">int xmlC14NExecute (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-c14n.html#xmlC14NIsVisibleCallback">xmlC14NIsVisibleCallback</a> is_visible_callback, <br /> void * user_data, <br /> int exclusive, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** inclusive_ns_prefixes, <br /> int with_comments, <br /> <a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf)<br />
+</pre><p>Dumps the canonized image of given XML document into the provided buffer. For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document for canonization</td></tr><tr><td><span class="term"><i><tt>is_visible_callback</tt></i>:</span></td><td>the function to use to determine is node visible or not</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>the first parameter for @is_visible_callback function (in most cases, it is nodes set)</td></tr><tr><td><span class="term"><i><tt>exclusive</tt></i>:</span></td><td>the exclusive flag (0 - non-exclusive canonicalization; otherwise - exclusive canonicalization)</td></tr><tr><td><span class="term"><i><tt>inclusive_ns_prefixes</tt></i>:</span></td><td>the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise)</td></tr><tr><td><span class="term"><i><tt>with_comments</tt></i>:</span></td><td>include comments in the result (!=0) or not (==0)</td></tr><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the output buffer to store canonical XML; this buffer MUST have encoder==NULL because C14N requires UTF-8 output</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>non-negative value on success or a negative value on fail</td></tr></tbody></table></div><h3><a name="xmlC14NIsVisibleCallback" id="xmlC14NIsVisibleCallback"></a>Function type: xmlC14NIsVisibleCallback</h3><pre class="programlisting">Function type: xmlC14NIsVisibleCallback
+int xmlC14NIsVisibleCallback (void * user_data, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent)
+</pre><p></p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</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-catalog.html b/doc/html/libxml-catalog.html
new file mode 100644
index 0000000..59345bd
--- /dev/null
+++ b/doc/html/libxml-catalog.html
@@ -0,0 +1,142 @@
+<?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 catalog from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module catalog 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-c14n.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-c14n.html">c14n</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-chvalid.html">chvalid</a></th><td><a accesskey="n" href="libxml-chvalid.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>the catalog module implements the support for XML Catalogs and SGML catalogs </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#XML_CATALOGS_NAMESPACE">XML_CATALOGS_NAMESPACE</a></pre><pre class="programlisting">#define <a href="#XML_CATALOG_PI">XML_CATALOG_PI</a></pre><pre class="programlisting">Structure <a href="#xmlCatalog">xmlCatalog</a><br />struct _xmlCatalog
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Enum <a href="#xmlCatalogAllow">xmlCatalogAllow</a>
+</pre><pre class="programlisting">Enum <a href="#xmlCatalogPrefer">xmlCatalogPrefer</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-catalog.html#xmlCatalog">xmlCatalog</a> * <a name="xmlCatalogPtr" id="xmlCatalogPtr">xmlCatalogPtr</a>
+</pre><pre class="programlisting">int <a href="#xmlACatalogAdd">xmlACatalogAdd</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * orig, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * replace)</pre>
+<pre class="programlisting">void <a href="#xmlACatalogDump">xmlACatalogDump</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> FILE * out)</pre>
+<pre class="programlisting">int <a href="#xmlACatalogRemove">xmlACatalogRemove</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlACatalogResolve">xmlACatalogResolve</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlACatalogResolvePublic">xmlACatalogResolvePublic</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlACatalogResolveSystem">xmlACatalogResolveSystem</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlACatalogResolveURI">xmlACatalogResolveURI</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)</pre>
+<pre class="programlisting">int <a href="#xmlCatalogAdd">xmlCatalogAdd</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * orig, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * replace)</pre>
+<pre class="programlisting">void * <a href="#xmlCatalogAddLocal">xmlCatalogAddLocal</a> (void * catalogs, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URL)</pre>
+<pre class="programlisting">void <a href="#xmlCatalogCleanup">xmlCatalogCleanup</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlCatalogConvert">xmlCatalogConvert</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlCatalogDump">xmlCatalogDump</a> (FILE * out)</pre>
+<pre class="programlisting">void <a href="#xmlCatalogFreeLocal">xmlCatalogFreeLocal</a> (void * catalogs)</pre>
+<pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogAllow">xmlCatalogAllow</a> <a href="#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a> (void)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCatalogGetPublic">xmlCatalogGetPublic</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCatalogGetSystem">xmlCatalogGetSystem</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)</pre>
+<pre class="programlisting">int <a href="#xmlCatalogIsEmpty">xmlCatalogIsEmpty</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a> (void * catalogs, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCatalogLocalResolveURI">xmlCatalogLocalResolveURI</a> (void * catalogs, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)</pre>
+<pre class="programlisting">int <a href="#xmlCatalogRemove">xmlCatalogRemove</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCatalogResolve">xmlCatalogResolve</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCatalogResolvePublic">xmlCatalogResolvePublic</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCatalogResolveSystem">xmlCatalogResolveSystem</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCatalogResolveURI">xmlCatalogResolveURI</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)</pre>
+<pre class="programlisting">int <a href="#xmlCatalogSetDebug">xmlCatalogSetDebug</a> (int level)</pre>
+<pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogPrefer">xmlCatalogPrefer</a> <a href="#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a> (<a href="libxml-catalog.html#xmlCatalogPrefer">xmlCatalogPrefer</a> prefer)</pre>
+<pre class="programlisting">void <a href="#xmlCatalogSetDefaults">xmlCatalogSetDefaults</a> (<a href="libxml-catalog.html#xmlCatalogAllow">xmlCatalogAllow</a> allow)</pre>
+<pre class="programlisting">int <a href="#xmlConvertSGMLCatalog">xmlConvertSGMLCatalog</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal)</pre>
+<pre class="programlisting">void <a href="#xmlFreeCatalog">xmlFreeCatalog</a> (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal)</pre>
+<pre class="programlisting">void <a href="#xmlInitializeCatalog">xmlInitializeCatalog</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> <a href="#xmlLoadACatalog">xmlLoadACatalog</a> (const char * filename)</pre>
+<pre class="programlisting">int <a href="#xmlLoadCatalog">xmlLoadCatalog</a> (const char * filename)</pre>
+<pre class="programlisting">void <a href="#xmlLoadCatalogs">xmlLoadCatalogs</a> (const char * pathss)</pre>
+<pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> <a href="#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a> (const char * filename)</pre>
+<pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> <a href="#xmlNewCatalog">xmlNewCatalog</a> (int sgml)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlParseCatalogFile">xmlParseCatalogFile</a> (const char * filename)</pre>
+<h2>Description</h2>
+<h3><a name="XML_CATALOGS_NAMESPACE" id="XML_CATALOGS_NAMESPACE"></a>Macro: XML_CATALOGS_NAMESPACE</h3><pre>#define XML_CATALOGS_NAMESPACE</pre><p>The namespace for the XML Catalogs elements.</p>
+<h3><a name="XML_CATALOG_PI" id="XML_CATALOG_PI"></a>Macro: XML_CATALOG_PI</h3><pre>#define XML_CATALOG_PI</pre><p>The specific XML Catalog Processing Instuction name.</p>
+<h3><a name="xmlCatalog" id="xmlCatalog">Structure xmlCatalog</a></h3><pre class="programlisting">Structure xmlCatalog<br />struct _xmlCatalog {
+The content of this structure is not made public by the API.
+}</pre><h3>Enum <a name="xmlCatalogAllow" id="xmlCatalogAllow">xmlCatalogAllow</a></h3><pre class="programlisting">Enum xmlCatalogAllow {
+ <a name="XML_CATA_ALLOW_NONE" id="XML_CATA_ALLOW_NONE">XML_CATA_ALLOW_NONE</a> = 0
+ <a name="XML_CATA_ALLOW_GLOBAL" id="XML_CATA_ALLOW_GLOBAL">XML_CATA_ALLOW_GLOBAL</a> = 1
+ <a name="XML_CATA_ALLOW_DOCUMENT" id="XML_CATA_ALLOW_DOCUMENT">XML_CATA_ALLOW_DOCUMENT</a> = 2
+ <a name="XML_CATA_ALLOW_ALL" id="XML_CATA_ALLOW_ALL">XML_CATA_ALLOW_ALL</a> = 3
+}
+</pre><h3>Enum <a name="xmlCatalogPrefer" id="xmlCatalogPrefer">xmlCatalogPrefer</a></h3><pre class="programlisting">Enum xmlCatalogPrefer {
+ <a name="XML_CATA_PREFER_NONE" id="XML_CATA_PREFER_NONE">XML_CATA_PREFER_NONE</a> = 0
+ <a name="XML_CATA_PREFER_PUBLIC" id="XML_CATA_PREFER_PUBLIC">XML_CATA_PREFER_PUBLIC</a> = 1
+ <a name="XML_CATA_PREFER_SYSTEM" id="XML_CATA_PREFER_SYSTEM">XML_CATA_PREFER_SYSTEM</a> = 2
+}
+</pre><h3><a name="xmlACatalogAdd" id="xmlACatalogAdd"></a>Function: xmlACatalogAdd</h3><pre class="programlisting">int xmlACatalogAdd (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * orig, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * replace)<br />
+</pre><p>Add an entry in the catalog, it may overwrite existing but different entries.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>a Catalog</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the type of record to add to the catalog</td></tr><tr><td><span class="term"><i><tt>orig</tt></i>:</span></td><td>the system, public or prefix to match</td></tr><tr><td><span class="term"><i><tt>replace</tt></i>:</span></td><td>the replacement value for the match</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if successful, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlACatalogDump" id="xmlACatalogDump"></a>Function: xmlACatalogDump</h3><pre class="programlisting">void xmlACatalogDump (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> FILE * out)<br />
+</pre><p>Free up all the memory associated with catalogs</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>a Catalog</td></tr><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>the file.</td></tr></tbody></table></div><h3><a name="xmlACatalogRemove" id="xmlACatalogRemove"></a>Function: xmlACatalogRemove</h3><pre class="programlisting">int xmlACatalogRemove (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Remove an entry from the catalog</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>a Catalog</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value to remove</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries removed if successful, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlACatalogResolve" id="xmlACatalogResolve"></a>Function: xmlACatalogResolve</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlACatalogResolve (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)<br />
+</pre><p>Do a complete resolution lookup of an External Identifier</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>a Catalog</td></tr><tr><td><span class="term"><i><tt>pubID</tt></i>:</span></td><td>the public ID string</td></tr><tr><td><span class="term"><i><tt>sysID</tt></i>:</span></td><td>the system ID string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the URI of the resource or NULL if not found, it must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlACatalogResolvePublic" id="xmlACatalogResolvePublic"></a>Function: xmlACatalogResolvePublic</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlACatalogResolvePublic (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID)<br />
+</pre><p>Try to lookup the catalog local <a href="libxml-SAX.html#reference">reference</a> associated to a public ID in that catalog</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>a Catalog</td></tr><tr><td><span class="term"><i><tt>pubID</tt></i>:</span></td><td>the public ID string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the local resource if found or NULL otherwise, the value returned must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlACatalogResolveSystem" id="xmlACatalogResolveSystem"></a>Function: xmlACatalogResolveSystem</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlACatalogResolveSystem (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)<br />
+</pre><p>Try to lookup the catalog resource for a system ID</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>a Catalog</td></tr><tr><td><span class="term"><i><tt>sysID</tt></i>:</span></td><td>the system ID string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resource if found or NULL otherwise, the value returned must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlACatalogResolveURI" id="xmlACatalogResolveURI"></a>Function: xmlACatalogResolveURI</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlACatalogResolveURI (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)<br />
+</pre><p>Do a complete resolution lookup of an URI</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>a Catalog</td></tr><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the URI of the resource or NULL if not found, it must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlCatalogAdd" id="xmlCatalogAdd"></a>Function: xmlCatalogAdd</h3><pre class="programlisting">int xmlCatalogAdd (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * orig, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * replace)<br />
+</pre><p>Add an entry in the catalog, it may overwrite existing but different entries. If called before any other catalog routine, allows to override the default shared catalog put in place by xmlInitializeCatalog();</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the type of record to add to the catalog</td></tr><tr><td><span class="term"><i><tt>orig</tt></i>:</span></td><td>the system, public or prefix to match</td></tr><tr><td><span class="term"><i><tt>replace</tt></i>:</span></td><td>the replacement value for the match</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if successful, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlCatalogAddLocal" id="xmlCatalogAddLocal"></a>Function: xmlCatalogAddLocal</h3><pre class="programlisting">void * xmlCatalogAddLocal (void * catalogs, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URL)<br />
+</pre><p>Add the new entry to the catalog list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catalogs</tt></i>:</span></td><td>a document's list of catalogs</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the URL to a new local catalog</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the updated list</td></tr></tbody></table></div><h3><a name="xmlCatalogCleanup" id="xmlCatalogCleanup"></a>Function: xmlCatalogCleanup</h3><pre class="programlisting">void xmlCatalogCleanup (void)<br />
+</pre><p>Free up all the memory associated with catalogs</p>
+<h3><a name="xmlCatalogConvert" id="xmlCatalogConvert"></a>Function: xmlCatalogConvert</h3><pre class="programlisting">int xmlCatalogConvert (void)<br />
+</pre><p>Convert all the SGML catalog entries as XML ones</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries converted if successful, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlCatalogDump" id="xmlCatalogDump"></a>Function: xmlCatalogDump</h3><pre class="programlisting">void xmlCatalogDump (FILE * out)<br />
+</pre><p>Free up all the memory associated with catalogs</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>the file.</td></tr></tbody></table></div><h3><a name="xmlCatalogFreeLocal" id="xmlCatalogFreeLocal"></a>Function: xmlCatalogFreeLocal</h3><pre class="programlisting">void xmlCatalogFreeLocal (void * catalogs)<br />
+</pre><p>Free up the memory associated to the catalog list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catalogs</tt></i>:</span></td><td>a document's list of catalogs</td></tr></tbody></table></div><h3><a name="xmlCatalogGetDefaults" id="xmlCatalogGetDefaults"></a>Function: xmlCatalogGetDefaults</h3><pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogAllow">xmlCatalogAllow</a> xmlCatalogGetDefaults (void)<br />
+</pre><p>Used to get the user preference w.r.t. to what catalogs should be accepted</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the current <a href="libxml-catalog.html#xmlCatalogAllow">xmlCatalogAllow</a> value</td></tr></tbody></table></div><h3><a name="xmlCatalogGetPublic" id="xmlCatalogGetPublic"></a>Function: xmlCatalogGetPublic</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCatalogGetPublic (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID)<br />
+</pre><p>Try to lookup the catalog <a href="libxml-SAX.html#reference">reference</a> associated to a public ID DEPRECATED, use xmlCatalogResolvePublic()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pubID</tt></i>:</span></td><td>the public ID string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resource if found or NULL otherwise.</td></tr></tbody></table></div><h3><a name="xmlCatalogGetSystem" id="xmlCatalogGetSystem"></a>Function: xmlCatalogGetSystem</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCatalogGetSystem (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)<br />
+</pre><p>Try to lookup the catalog <a href="libxml-SAX.html#reference">reference</a> associated to a system ID DEPRECATED, use xmlCatalogResolveSystem()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sysID</tt></i>:</span></td><td>the system ID string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resource if found or NULL otherwise.</td></tr></tbody></table></div><h3><a name="xmlCatalogIsEmpty" id="xmlCatalogIsEmpty"></a>Function: xmlCatalogIsEmpty</h3><pre class="programlisting">int xmlCatalogIsEmpty (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal)<br />
+</pre><p>Check is a catalog is empty</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>should this create an SGML catalog</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the catalog is empty, 0 if not, amd -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlCatalogLocalResolve" id="xmlCatalogLocalResolve"></a>Function: xmlCatalogLocalResolve</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCatalogLocalResolve (void * catalogs, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)<br />
+</pre><p>Do a complete resolution lookup of an External Identifier using a document's private catalog list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catalogs</tt></i>:</span></td><td>a document's list of catalogs</td></tr><tr><td><span class="term"><i><tt>pubID</tt></i>:</span></td><td>the public ID string</td></tr><tr><td><span class="term"><i><tt>sysID</tt></i>:</span></td><td>the system ID string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the URI of the resource or NULL if not found, it must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlCatalogLocalResolveURI" id="xmlCatalogLocalResolveURI"></a>Function: xmlCatalogLocalResolveURI</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCatalogLocalResolveURI (void * catalogs, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)<br />
+</pre><p>Do a complete resolution lookup of an URI using a document's private catalog list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catalogs</tt></i>:</span></td><td>a document's list of catalogs</td></tr><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the URI of the resource or NULL if not found, it must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlCatalogRemove" id="xmlCatalogRemove"></a>Function: xmlCatalogRemove</h3><pre class="programlisting">int xmlCatalogRemove (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Remove an entry from the catalog</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value to remove</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries removed if successful, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlCatalogResolve" id="xmlCatalogResolve"></a>Function: xmlCatalogResolve</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCatalogResolve (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)<br />
+</pre><p>Do a complete resolution lookup of an External Identifier</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pubID</tt></i>:</span></td><td>the public ID string</td></tr><tr><td><span class="term"><i><tt>sysID</tt></i>:</span></td><td>the system ID string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the URI of the resource or NULL if not found, it must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlCatalogResolvePublic" id="xmlCatalogResolvePublic"></a>Function: xmlCatalogResolvePublic</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCatalogResolvePublic (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubID)<br />
+</pre><p>Try to lookup the catalog <a href="libxml-SAX.html#reference">reference</a> associated to a public ID</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pubID</tt></i>:</span></td><td>the public ID string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resource if found or NULL otherwise, the value returned must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlCatalogResolveSystem" id="xmlCatalogResolveSystem"></a>Function: xmlCatalogResolveSystem</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCatalogResolveSystem (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysID)<br />
+</pre><p>Try to lookup the catalog resource for a system ID</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sysID</tt></i>:</span></td><td>the system ID string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resource if found or NULL otherwise, the value returned must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlCatalogResolveURI" id="xmlCatalogResolveURI"></a>Function: xmlCatalogResolveURI</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCatalogResolveURI (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)<br />
+</pre><p>Do a complete resolution lookup of an URI</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the URI of the resource or NULL if not found, it must be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlCatalogSetDebug" id="xmlCatalogSetDebug"></a>Function: xmlCatalogSetDebug</h3><pre class="programlisting">int xmlCatalogSetDebug (int level)<br />
+</pre><p>Used to set the debug level for catalog operation, 0 disable debugging, 1 enable it</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the debug level of catalogs required</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the previous value of the catalog debugging level</td></tr></tbody></table></div><h3><a name="xmlCatalogSetDefaultPrefer" id="xmlCatalogSetDefaultPrefer"></a>Function: xmlCatalogSetDefaultPrefer</h3><pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogPrefer">xmlCatalogPrefer</a> xmlCatalogSetDefaultPrefer (<a href="libxml-catalog.html#xmlCatalogPrefer">xmlCatalogPrefer</a> prefer)<br />
+</pre><p>Allows to set the preference between public and system for deletion in XML Catalog resolution. C.f. section 4.1.1 of the spec Values accepted are <a href="libxml-catalog.html#XML_CATA_PREFER_PUBLIC">XML_CATA_PREFER_PUBLIC</a> or <a href="libxml-catalog.html#XML_CATA_PREFER_SYSTEM">XML_CATA_PREFER_SYSTEM</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>prefer</tt></i>:</span></td><td>the default preference for delegation</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the previous value of the default preference for delegation</td></tr></tbody></table></div><h3><a name="xmlCatalogSetDefaults" id="xmlCatalogSetDefaults"></a>Function: xmlCatalogSetDefaults</h3><pre class="programlisting">void xmlCatalogSetDefaults (<a href="libxml-catalog.html#xmlCatalogAllow">xmlCatalogAllow</a> allow)<br />
+</pre><p>Used to set the user preference w.r.t. to what catalogs should be accepted</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>allow</tt></i>:</span></td><td>what catalogs should be accepted</td></tr></tbody></table></div><h3><a name="xmlConvertSGMLCatalog" id="xmlConvertSGMLCatalog"></a>Function: xmlConvertSGMLCatalog</h3><pre class="programlisting">int xmlConvertSGMLCatalog (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal)<br />
+</pre><p>Convert all the SGML catalog entries as XML ones</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>the catalog</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries converted if successful, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlFreeCatalog" id="xmlFreeCatalog"></a>Function: xmlFreeCatalog</h3><pre class="programlisting">void xmlFreeCatalog (<a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> catal)<br />
+</pre><p>Free the memory allocated to a Catalog</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>catal</tt></i>:</span></td><td>a Catalog</td></tr></tbody></table></div><h3><a name="xmlInitializeCatalog" id="xmlInitializeCatalog"></a>Function: xmlInitializeCatalog</h3><pre class="programlisting">void xmlInitializeCatalog (void)<br />
+</pre><p>Do the catalog initialization. this function is not thread safe, catalog initialization should preferably be done once at startup</p>
+<h3><a name="xmlLoadACatalog" id="xmlLoadACatalog"></a>Function: xmlLoadACatalog</h3><pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> xmlLoadACatalog (const char * filename)<br />
+</pre><p>Load the catalog and build the associated data structures. This can be either an XML Catalog or an SGML Catalog It will recurse in SGML CATALOG entries. On the other hand XML Catalogs are not handled recursively.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file path</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the catalog parsed or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlLoadCatalog" id="xmlLoadCatalog"></a>Function: xmlLoadCatalog</h3><pre class="programlisting">int xmlLoadCatalog (const char * filename)<br />
+</pre><p>Load the catalog and makes its definitions effective for the default external entity loader. It will recurse in SGML CATALOG entries. this function is not thread safe, catalog initialization should preferably be done once at startup</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file path</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlLoadCatalogs" id="xmlLoadCatalogs"></a>Function: xmlLoadCatalogs</h3><pre class="programlisting">void xmlLoadCatalogs (const char * pathss)<br />
+</pre><p>Load the catalogs and makes their definitions effective for the default external entity loader. this function is not thread safe, catalog initialization should preferably be done once at startup</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pathss</tt></i>:</span></td><td>a list of directories separated by a colon or a space.</td></tr></tbody></table></div><h3><a name="xmlLoadSGMLSuperCatalog" id="xmlLoadSGMLSuperCatalog"></a>Function: xmlLoadSGMLSuperCatalog</h3><pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> xmlLoadSGMLSuperCatalog (const char * filename)<br />
+</pre><p>Load an SGML super catalog. It won't expand CATALOG or DELEGATE references. This is only needed for manipulating SGML Super Catalogs like adding and removing CATALOG or DELEGATE entries.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file path</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the catalog parsed or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlNewCatalog" id="xmlNewCatalog"></a>Function: xmlNewCatalog</h3><pre class="programlisting"><a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> xmlNewCatalog (int sgml)<br />
+</pre><p>create a new Catalog.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sgml</tt></i>:</span></td><td>should this create an SGML catalog</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-catalog.html#xmlCatalogPtr">xmlCatalogPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlParseCatalogFile" id="xmlParseCatalogFile"></a>Function: xmlParseCatalogFile</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlParseCatalogFile (const char * filename)<br />
+</pre><p>parse an XML file and build a tree. It's like xmlParseFile() except it bypass all catalog lookups.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree or NULL in case of error</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-chvalid.html b/doc/html/libxml-chvalid.html
new file mode 100644
index 0000000..86aa593
--- /dev/null
+++ b/doc/html/libxml-chvalid.html
@@ -0,0 +1,72 @@
+<?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 chvalid from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module chvalid 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-catalog.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-catalog.html">catalog</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-debugXML.html">debugXML</a></th><td><a accesskey="n" href="libxml-debugXML.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module exports interfaces for the character range validation APIs This file is automatically generated from the cvs source definition files using the genChRanges.py Python script </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#xmlIsBaseCharQ">xmlIsBaseCharQ</a></pre><pre class="programlisting">#define <a href="#xmlIsBaseChar_ch">xmlIsBaseChar_ch</a></pre><pre class="programlisting">#define <a href="#xmlIsBlankQ">xmlIsBlankQ</a></pre><pre class="programlisting">#define <a href="#xmlIsBlank_ch">xmlIsBlank_ch</a></pre><pre class="programlisting">#define <a href="#xmlIsCharQ">xmlIsCharQ</a></pre><pre class="programlisting">#define <a href="#xmlIsChar_ch">xmlIsChar_ch</a></pre><pre class="programlisting">#define <a href="#xmlIsCombiningQ">xmlIsCombiningQ</a></pre><pre class="programlisting">#define <a href="#xmlIsDigitQ">xmlIsDigitQ</a></pre><pre class="programlisting">#define <a href="#xmlIsDigit_ch">xmlIsDigit_ch</a></pre><pre class="programlisting">#define <a href="#xmlIsExtenderQ">xmlIsExtenderQ</a></pre><pre class="programlisting">#define <a href="#xmlIsExtender_ch">xmlIsExtender_ch</a></pre><pre class="programlisting">#define <a href="#xmlIsIdeographicQ">xmlIsIdeographicQ</a></pre><pre class="programlisting">#define <a href="#xmlIsPubidCharQ">xmlIsPubidCharQ</a></pre><pre class="programlisting">#define <a href="#xmlIsPubidChar_ch">xmlIsPubidChar_ch</a></pre><pre class="programlisting">Structure <a href="#xmlChLRange">xmlChLRange</a><br />struct _xmlChLRange
+</pre><pre class="programlisting">Typedef <a href="libxml-chvalid.html#xmlChLRange">xmlChLRange</a> * <a name="xmlChLRangePtr" id="xmlChLRangePtr">xmlChLRangePtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlChRangeGroup">xmlChRangeGroup</a><br />struct _xmlChRangeGroup
+</pre><pre class="programlisting">Typedef <a href="libxml-chvalid.html#xmlChRangeGroup">xmlChRangeGroup</a> * <a name="xmlChRangeGroupPtr" id="xmlChRangeGroupPtr">xmlChRangeGroupPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlChSRange">xmlChSRange</a><br />struct _xmlChSRange
+</pre><pre class="programlisting">Typedef <a href="libxml-chvalid.html#xmlChSRange">xmlChSRange</a> * <a name="xmlChSRangePtr" id="xmlChSRangePtr">xmlChSRangePtr</a>
+</pre><pre class="programlisting">int <a href="#xmlCharInRange">xmlCharInRange</a> (unsigned int val, <br /> const <a href="libxml-chvalid.html#xmlChRangeGroupPtr">xmlChRangeGroupPtr</a> rptr)</pre>
+<pre class="programlisting">int <a href="#xmlIsBaseChar">xmlIsBaseChar</a> (unsigned int ch)</pre>
+<pre class="programlisting">int <a href="#xmlIsBlank">xmlIsBlank</a> (unsigned int ch)</pre>
+<pre class="programlisting">int <a href="#xmlIsChar">xmlIsChar</a> (unsigned int ch)</pre>
+<pre class="programlisting">int <a href="#xmlIsCombining">xmlIsCombining</a> (unsigned int ch)</pre>
+<pre class="programlisting">int <a href="#xmlIsDigit">xmlIsDigit</a> (unsigned int ch)</pre>
+<pre class="programlisting">int <a href="#xmlIsExtender">xmlIsExtender</a> (unsigned int ch)</pre>
+<pre class="programlisting">int <a href="#xmlIsIdeographic">xmlIsIdeographic</a> (unsigned int ch)</pre>
+<pre class="programlisting">int <a href="#xmlIsPubidChar">xmlIsPubidChar</a> (unsigned int ch)</pre>
+<h2>Description</h2>
+<h3><a name="xmlIsBaseCharQ" id="xmlIsBaseCharQ"></a>Macro: xmlIsBaseCharQ</h3><pre>#define xmlIsBaseCharQ</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsBaseChar_ch" id="xmlIsBaseChar_ch"></a>Macro: xmlIsBaseChar_ch</h3><pre>#define xmlIsBaseChar_ch</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsBlankQ" id="xmlIsBlankQ"></a>Macro: xmlIsBlankQ</h3><pre>#define xmlIsBlankQ</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsBlank_ch" id="xmlIsBlank_ch"></a>Macro: xmlIsBlank_ch</h3><pre>#define xmlIsBlank_ch</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsCharQ" id="xmlIsCharQ"></a>Macro: xmlIsCharQ</h3><pre>#define xmlIsCharQ</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsChar_ch" id="xmlIsChar_ch"></a>Macro: xmlIsChar_ch</h3><pre>#define xmlIsChar_ch</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsCombiningQ" id="xmlIsCombiningQ"></a>Macro: xmlIsCombiningQ</h3><pre>#define xmlIsCombiningQ</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsDigitQ" id="xmlIsDigitQ"></a>Macro: xmlIsDigitQ</h3><pre>#define xmlIsDigitQ</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsDigit_ch" id="xmlIsDigit_ch"></a>Macro: xmlIsDigit_ch</h3><pre>#define xmlIsDigit_ch</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsExtenderQ" id="xmlIsExtenderQ"></a>Macro: xmlIsExtenderQ</h3><pre>#define xmlIsExtenderQ</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsExtender_ch" id="xmlIsExtender_ch"></a>Macro: xmlIsExtender_ch</h3><pre>#define xmlIsExtender_ch</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsIdeographicQ" id="xmlIsIdeographicQ"></a>Macro: xmlIsIdeographicQ</h3><pre>#define xmlIsIdeographicQ</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsPubidCharQ" id="xmlIsPubidCharQ"></a>Macro: xmlIsPubidCharQ</h3><pre>#define xmlIsPubidCharQ</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlIsPubidChar_ch" id="xmlIsPubidChar_ch"></a>Macro: xmlIsPubidChar_ch</h3><pre>#define xmlIsPubidChar_ch</pre><p>Automatically generated by genChRanges.py</p>
+<h3><a name="xmlChLRange" id="xmlChLRange">Structure xmlChLRange</a></h3><pre class="programlisting">Structure xmlChLRange<br />struct _xmlChLRange {
+ unsigned int low
+ unsigned int high
+}</pre><h3><a name="xmlChRangeGroup" id="xmlChRangeGroup">Structure xmlChRangeGroup</a></h3><pre class="programlisting">Structure xmlChRangeGroup<br />struct _xmlChRangeGroup {
+ int nbShortRange
+ int nbLongRange
+ <a href="libxml-chvalid.html#xmlChSRangePtr">xmlChSRangePtr</a> shortRange : points to an array of ranges
+ <a href="libxml-chvalid.html#xmlChLRangePtr">xmlChLRangePtr</a> longRange
+}</pre><h3><a name="xmlChSRange" id="xmlChSRange">Structure xmlChSRange</a></h3><pre class="programlisting">Structure xmlChSRange<br />struct _xmlChSRange {
+ unsigned short low
+ unsigned short high
+}</pre><h3><a name="xmlCharInRange" id="xmlCharInRange"></a>Function: xmlCharInRange</h3><pre class="programlisting">int xmlCharInRange (unsigned int val, <br /> const <a href="libxml-chvalid.html#xmlChRangeGroupPtr">xmlChRangeGroupPtr</a> rptr)<br />
+</pre><p>Does a binary search of the range table to determine if char is valid</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>character to be validated</td></tr><tr><td><span class="term"><i><tt>rptr</tt></i>:</span></td><td>pointer to range to be used to validate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true if character valid, false otherwise</td></tr></tbody></table></div><h3><a name="xmlIsBaseChar" id="xmlIsBaseChar"></a>Function: xmlIsBaseChar</h3><pre class="programlisting">int xmlIsBaseChar (unsigned int ch)<br />
+</pre><p>This function is DEPRECATED. Use <a href="libxml-chvalid.html#xmlIsBaseChar_ch">xmlIsBaseChar_ch</a> or <a href="libxml-chvalid.html#xmlIsBaseCharQ">xmlIsBaseCharQ</a> instead</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>character to validate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true if argument valid, false otherwise</td></tr></tbody></table></div><h3><a name="xmlIsBlank" id="xmlIsBlank"></a>Function: xmlIsBlank</h3><pre class="programlisting">int xmlIsBlank (unsigned int ch)<br />
+</pre><p>This function is DEPRECATED. Use <a href="libxml-chvalid.html#xmlIsBlank_ch">xmlIsBlank_ch</a> or <a href="libxml-chvalid.html#xmlIsBlankQ">xmlIsBlankQ</a> instead</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>character to validate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true if argument valid, false otherwise</td></tr></tbody></table></div><h3><a name="xmlIsChar" id="xmlIsChar"></a>Function: xmlIsChar</h3><pre class="programlisting">int xmlIsChar (unsigned int ch)<br />
+</pre><p>This function is DEPRECATED. Use <a href="libxml-chvalid.html#xmlIsChar_ch">xmlIsChar_ch</a> or <a href="libxml-chvalid.html#xmlIsCharQ">xmlIsCharQ</a> instead</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>character to validate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true if argument valid, false otherwise</td></tr></tbody></table></div><h3><a name="xmlIsCombining" id="xmlIsCombining"></a>Function: xmlIsCombining</h3><pre class="programlisting">int xmlIsCombining (unsigned int ch)<br />
+</pre><p>This function is DEPRECATED. Use <a href="libxml-chvalid.html#xmlIsCombiningQ">xmlIsCombiningQ</a> instead</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>character to validate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true if argument valid, false otherwise</td></tr></tbody></table></div><h3><a name="xmlIsDigit" id="xmlIsDigit"></a>Function: xmlIsDigit</h3><pre class="programlisting">int xmlIsDigit (unsigned int ch)<br />
+</pre><p>This function is DEPRECATED. Use <a href="libxml-chvalid.html#xmlIsDigit_ch">xmlIsDigit_ch</a> or <a href="libxml-chvalid.html#xmlIsDigitQ">xmlIsDigitQ</a> instead</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>character to validate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true if argument valid, false otherwise</td></tr></tbody></table></div><h3><a name="xmlIsExtender" id="xmlIsExtender"></a>Function: xmlIsExtender</h3><pre class="programlisting">int xmlIsExtender (unsigned int ch)<br />
+</pre><p>This function is DEPRECATED. Use <a href="libxml-chvalid.html#xmlIsExtender_ch">xmlIsExtender_ch</a> or <a href="libxml-chvalid.html#xmlIsExtenderQ">xmlIsExtenderQ</a> instead</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>character to validate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true if argument valid, false otherwise</td></tr></tbody></table></div><h3><a name="xmlIsIdeographic" id="xmlIsIdeographic"></a>Function: xmlIsIdeographic</h3><pre class="programlisting">int xmlIsIdeographic (unsigned int ch)<br />
+</pre><p>This function is DEPRECATED. Use <a href="libxml-chvalid.html#xmlIsIdeographicQ">xmlIsIdeographicQ</a> instead</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>character to validate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true if argument valid, false otherwise</td></tr></tbody></table></div><h3><a name="xmlIsPubidChar" id="xmlIsPubidChar"></a>Function: xmlIsPubidChar</h3><pre class="programlisting">int xmlIsPubidChar (unsigned int ch)<br />
+</pre><p>This function is DEPRECATED. Use <a href="libxml-chvalid.html#xmlIsPubidChar_ch">xmlIsPubidChar_ch</a> or <a href="libxml-chvalid.html#xmlIsPubidCharQ">xmlIsPubidCharQ</a> instead</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>character to validate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true if argument valid, false otherwise</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-debugXML.html b/doc/html/libxml-debugXML.html
new file mode 100644
index 0000000..6695a89
--- /dev/null
+++ b/doc/html/libxml-debugXML.html
@@ -0,0 +1,117 @@
+<?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 debugXML from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module debugXML 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-chvalid.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-chvalid.html">chvalid</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-dict.html">dict</a></th><td><a accesskey="n" href="libxml-dict.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>Interfaces to a set of routines used for debugging the tree produced by the XML parser. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlShellCtxt">xmlShellCtxt</a><br />struct _xmlShellCtxt
+</pre><pre class="programlisting">Typedef <a href="libxml-debugXML.html#xmlShellCtxt">xmlShellCtxt</a> * <a name="xmlShellCtxtPtr" id="xmlShellCtxtPtr">xmlShellCtxtPtr</a>
+</pre><pre class="programlisting">const char * <a href="#xmlBoolToText">xmlBoolToText</a> (int boolval)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpAttr">xmlDebugDumpAttr</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br /> int depth)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpAttrList">xmlDebugDumpAttrList</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br /> int depth)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpDTD">xmlDebugDumpDTD</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpDocument">xmlDebugDumpDocument</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpDocumentHead">xmlDebugDumpDocumentHead</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpEntities">xmlDebugDumpEntities</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpNode">xmlDebugDumpNode</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int depth)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int depth)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int depth)</pre>
+<pre class="programlisting">void <a href="#xmlDebugDumpString">xmlDebugDumpString</a> (FILE * output, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting">int <a href="#xmlLsCountNode">xmlLsCountNode</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">void <a href="#xmlLsOneNode">xmlLsOneNode</a> (FILE * output, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">void <a href="#xmlShell">xmlShell</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> char * filename, <br /> <a href="libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a> input, <br /> FILE * output)</pre>
+<pre class="programlisting">int <a href="#xmlShellBase">xmlShellBase</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting">int <a href="#xmlShellCat">xmlShellCat</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting">Function type: <a href="#xmlShellCmd">xmlShellCmd</a>
+int <a href="#xmlShellCmd">xmlShellCmd</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)
+</pre>
+<pre class="programlisting">int <a href="#xmlShellDir">xmlShellDir</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting">int <a href="#xmlShellDu">xmlShellDu</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting">int <a href="#xmlShellList">xmlShellList</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting">int <a href="#xmlShellLoad">xmlShellLoad</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * filename, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting">void <a href="#xmlShellPrintNode">xmlShellPrintNode</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">void <a href="#xmlShellPrintXPathError">xmlShellPrintXPathError</a> (int errorType, <br /> const char * arg)</pre>
+<pre class="programlisting">void <a href="#xmlShellPrintXPathResult">xmlShellPrintXPathResult</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> list)</pre>
+<pre class="programlisting">int <a href="#xmlShellPwd">xmlShellPwd</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * buffer, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting">Function type: <a href="#xmlShellReadlineFunc">xmlShellReadlineFunc</a>
+char * <a href="#xmlShellReadlineFunc">xmlShellReadlineFunc</a> (char * prompt)
+</pre>
+<pre class="programlisting">int <a href="#xmlShellSave">xmlShellSave</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * filename, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting">int <a href="#xmlShellValidate">xmlShellValidate</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * dtd, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting">int <a href="#xmlShellWrite">xmlShellWrite</a> (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * filename, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<h2>Description</h2>
+<h3><a name="xmlShellCtxt" id="xmlShellCtxt">Structure xmlShellCtxt</a></h3><pre class="programlisting">Structure xmlShellCtxt<br />struct _xmlShellCtxt {
+ char * filename
+ <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node
+ <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> pctxt
+ int loaded
+ FILE * output
+ <a href="libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a> input
+}</pre><h3><a name="xmlBoolToText" id="xmlBoolToText"></a>Function: xmlBoolToText</h3><pre class="programlisting">const char * xmlBoolToText (int boolval)<br />
+</pre><p>Convenient way to turn bool into text</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>boolval</tt></i>:</span></td><td>a bool to turn into text</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to either "True" or "False"</td></tr></tbody></table></div><h3><a name="xmlDebugDumpAttr" id="xmlDebugDumpAttr"></a>Function: xmlDebugDumpAttr</h3><pre class="programlisting">void xmlDebugDumpAttr (FILE * output, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br /> int depth)<br />
+</pre><p>Dumps debug information for the <a href="libxml-SAX.html#attribute">attribute</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>the indentation level.</td></tr></tbody></table></div><h3><a name="xmlDebugDumpAttrList" id="xmlDebugDumpAttrList"></a>Function: xmlDebugDumpAttrList</h3><pre class="programlisting">void xmlDebugDumpAttrList (FILE * output, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br /> int depth)<br />
+</pre><p>Dumps debug information for the <a href="libxml-SAX.html#attribute">attribute</a> list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> list</td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>the indentation level.</td></tr></tbody></table></div><h3><a name="xmlDebugDumpDTD" id="xmlDebugDumpDTD"></a>Function: xmlDebugDumpDTD</h3><pre class="programlisting">void xmlDebugDumpDTD (FILE * output, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd)<br />
+</pre><p>Dumps debug information for the DTD</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>the DTD</td></tr></tbody></table></div><h3><a name="xmlDebugDumpDocument" id="xmlDebugDumpDocument"></a>Function: xmlDebugDumpDocument</h3><pre class="programlisting">void xmlDebugDumpDocument (FILE * output, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Dumps debug information for the document, it's recursive</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr></tbody></table></div><h3><a name="xmlDebugDumpDocumentHead" id="xmlDebugDumpDocumentHead"></a>Function: xmlDebugDumpDocumentHead</h3><pre class="programlisting">void xmlDebugDumpDocumentHead (FILE * output, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Dumps debug information cncerning the document, not recursive</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr></tbody></table></div><h3><a name="xmlDebugDumpEntities" id="xmlDebugDumpEntities"></a>Function: xmlDebugDumpEntities</h3><pre class="programlisting">void xmlDebugDumpEntities (FILE * output, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Dumps debug information for all the entities in use by the document</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr></tbody></table></div><h3><a name="xmlDebugDumpNode" id="xmlDebugDumpNode"></a>Function: xmlDebugDumpNode</h3><pre class="programlisting">void xmlDebugDumpNode (FILE * output, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int depth)<br />
+</pre><p>Dumps debug information for the element node, it is recursive</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>the indentation level.</td></tr></tbody></table></div><h3><a name="xmlDebugDumpNodeList" id="xmlDebugDumpNodeList"></a>Function: xmlDebugDumpNodeList</h3><pre class="programlisting">void xmlDebugDumpNodeList (FILE * output, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int depth)<br />
+</pre><p>Dumps debug information for the list of element node, it is recursive</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node list</td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>the indentation level.</td></tr></tbody></table></div><h3><a name="xmlDebugDumpOneNode" id="xmlDebugDumpOneNode"></a>Function: xmlDebugDumpOneNode</h3><pre class="programlisting">void xmlDebugDumpOneNode (FILE * output, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int depth)<br />
+</pre><p>Dumps debug information for the element node, it is not recursive</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>the indentation level.</td></tr></tbody></table></div><h3><a name="xmlDebugDumpString" id="xmlDebugDumpString"></a>Function: xmlDebugDumpString</h3><pre class="programlisting">void xmlDebugDumpString (FILE * output, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>Dumps informations about the string, shorten it if necessary</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the string</td></tr></tbody></table></div><h3><a name="xmlLsCountNode" id="xmlLsCountNode"></a>Function: xmlLsCountNode</h3><pre class="programlisting">int xmlLsCountNode (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Count the children of @node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to count</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of children of @node.</td></tr></tbody></table></div><h3><a name="xmlLsOneNode" id="xmlLsOneNode"></a>Function: xmlLsOneNode</h3><pre class="programlisting">void xmlLsOneNode (FILE * output, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Dump to @output the type and name of @node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to dump</td></tr></tbody></table></div><h3><a name="xmlShell" id="xmlShell"></a>Function: xmlShell</h3><pre class="programlisting">void xmlShell (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> char * filename, <br /> <a href="libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a> input, <br /> FILE * output)<br />
+</pre><p>Implements the XML shell This allow to load, validate, view, modify and save a document using a environment similar to a UNIX commandline.</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 initial document</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the output buffer</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>the line reading function</td></tr><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the output FILE*, defaults to stdout if NULL</td></tr></tbody></table></div><h3><a name="xmlShellBase" id="xmlShellBase"></a>Function: xmlShellBase</h3><pre class="programlisting">int xmlShellBase (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "base" dumps the current XML base of the node</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 shell context</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>unused</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>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0</td></tr></tbody></table></div><h3><a name="xmlShellCat" id="xmlShellCat"></a>Function: xmlShellCat</h3><pre class="programlisting">int xmlShellCat (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "cat" dumps the serialization node content (XML or HTML).</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 shell context</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>unused</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>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0</td></tr></tbody></table></div><h3><a name="xmlShellCmd" id="xmlShellCmd"></a>Function type: xmlShellCmd</h3><pre class="programlisting">Function type: xmlShellCmd
+int xmlShellCmd (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)
+</pre><p>This is a generic signature for the XML shell functions.</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 shell context</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>a string argument</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a first node</td></tr><tr><td><span class="term"><i><tt>node2</tt></i>:</span></td><td>a second node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an int, negative returns indicating errors.</td></tr></tbody></table></div><br />
+<h3><a name="xmlShellDir" id="xmlShellDir"></a>Function: xmlShellDir</h3><pre class="programlisting">int xmlShellDir (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "dir" dumps informations about the node (namespace, attributes, content).</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 shell context</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>unused</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>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0</td></tr></tbody></table></div><h3><a name="xmlShellDu" id="xmlShellDu"></a>Function: xmlShellDu</h3><pre class="programlisting">int xmlShellDu (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "du" show the structure of the subtree under node @tree If @tree is null, the command works on the current node.</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 shell context</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>tree</tt></i>:</span></td><td>a node defining a subtree</td></tr><tr><td><span class="term"><i><tt>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlShellList" id="xmlShellList"></a>Function: xmlShellList</h3><pre class="programlisting">int xmlShellList (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * arg, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "ls" Does an Unix like listing of the given node (like a directory)</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 shell context</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>unused</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>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0</td></tr></tbody></table></div><h3><a name="xmlShellLoad" id="xmlShellLoad"></a>Function: xmlShellLoad</h3><pre class="programlisting">int xmlShellLoad (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * filename, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "load" loads a new document specified by the filename</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 shell context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the file name</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 if loading failed</td></tr></tbody></table></div><h3><a name="xmlShellPrintNode" id="xmlShellPrintNode"></a>Function: xmlShellPrintNode</h3><pre class="programlisting">void xmlShellPrintNode (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Print node to the output FILE</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a non-null node to print to the output FILE</td></tr></tbody></table></div><h3><a name="xmlShellPrintXPathError" id="xmlShellPrintXPathError"></a>Function: xmlShellPrintXPathError</h3><pre class="programlisting">void xmlShellPrintXPathError (int errorType, <br /> const char * arg)<br />
+</pre><p>Print the xpath error to libxml default error channel</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>errorType</tt></i>:</span></td><td>valid xpath error id</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>the argument that cause xpath to fail</td></tr></tbody></table></div><h3><a name="xmlShellPrintXPathResult" id="xmlShellPrintXPathResult"></a>Function: xmlShellPrintXPathResult</h3><pre class="programlisting">void xmlShellPrintXPathResult (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> list)<br />
+</pre><p>Prints result to the output FILE</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>a valid result generated by an xpath evaluation</td></tr></tbody></table></div><h3><a name="xmlShellPwd" id="xmlShellPwd"></a>Function: xmlShellPwd</h3><pre class="programlisting">int xmlShellPwd (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * buffer, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "pwd" Show the full path from the root to the node, if needed building thumblers when similar elements exists at a given ancestor level. The output is compatible with XPath commands.</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 shell context</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>the output buffer</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>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlShellReadlineFunc" id="xmlShellReadlineFunc"></a>Function type: xmlShellReadlineFunc</h3><pre class="programlisting">Function type: xmlShellReadlineFunc
+char * xmlShellReadlineFunc (char * prompt)
+</pre><p>This is a generic signature for the XML shell input function.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>prompt</tt></i>:</span></td><td>a string prompt</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a string which will be freed by the Shell.</td></tr></tbody></table></div><br />
+<h3><a name="xmlShellSave" id="xmlShellSave"></a>Function: xmlShellSave</h3><pre class="programlisting">int xmlShellSave (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * filename, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "save" Write the current document to the filename, or it's original name</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 shell context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the file name (optional)</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlShellValidate" id="xmlShellValidate"></a>Function: xmlShellValidate</h3><pre class="programlisting">int xmlShellValidate (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * dtd, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "validate" Validate the document, if a DTD path is provided, then the validation is done against the given DTD.</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 shell context</td></tr><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>the DTD URI (optional)</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlShellWrite" id="xmlShellWrite"></a>Function: xmlShellWrite</h3><pre class="programlisting">int xmlShellWrite (<a href="libxml-debugXML.html#xmlShellCtxtPtr">xmlShellCtxtPtr</a> ctxt, <br /> char * filename, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Implements the XML shell function "write" Write the current node to the filename, it saves the serialization of the subtree under the @node specified</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 shell context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the file name</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node in the tree</td></tr><tr><td><span class="term"><i><tt>node2</tt></i>:</span></td><td>unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-dict.html b/doc/html/libxml-dict.html
new file mode 100644
index 0000000..ec5bb37
--- /dev/null
+++ b/doc/html/libxml-dict.html
@@ -0,0 +1,43 @@
+<?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 dict from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module dict 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-debugXML.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-debugXML.html">debugXML</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-encoding.html">encoding</a></th><td><a accesskey="n" href="libxml-encoding.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>dictionary of reusable strings, just used to avoid allocation and freeing operations. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlDict">xmlDict</a><br />struct _xmlDict
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-dict.html#xmlDict">xmlDict</a> * <a name="xmlDictPtr" id="xmlDictPtr">xmlDictPtr</a>
+</pre><pre class="programlisting"><a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> <a href="#xmlDictCreate">xmlDictCreate</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> <a href="#xmlDictCreateSub">xmlDictCreateSub</a> (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> sub)</pre>
+<pre class="programlisting">void <a href="#xmlDictFree">xmlDictFree</a> (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlDictLookup">xmlDictLookup</a> (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlDictOwns">xmlDictOwns</a> (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlDictQLookup">xmlDictQLookup</a> (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlDictReference">xmlDictReference</a> (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
+<pre class="programlisting">int <a href="#xmlDictSize">xmlDictSize</a> (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
+<h2>Description</h2>
+<h3><a name="xmlDict" id="xmlDict">Structure xmlDict</a></h3><pre class="programlisting">Structure xmlDict<br />struct _xmlDict {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlDictCreate" id="xmlDictCreate"></a>Function: xmlDictCreate</h3><pre class="programlisting"><a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> xmlDictCreate (void)<br />
+</pre><p>Create a new dictionary</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created dictionnary, or NULL if an error occured.</td></tr></tbody></table></div><h3><a name="xmlDictCreateSub" id="xmlDictCreateSub"></a>Function: xmlDictCreateSub</h3><pre class="programlisting"><a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> xmlDictCreateSub (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> sub)<br />
+</pre><p>Create a new dictionary, inheriting strings from the read-only dictionnary @sub. On lookup, strings are first searched in the new dictionnary, then in @sub, and if not found are created in the new dictionnary.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sub</tt></i>:</span></td><td>an existing dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created dictionnary, or NULL if an error occured.</td></tr></tbody></table></div><h3><a name="xmlDictFree" id="xmlDictFree"></a>Function: xmlDictFree</h3><pre class="programlisting">void xmlDictFree (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
+</pre><p>Free the hash @dict and its contents. The userdata is deallocated with @f if provided.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr></tbody></table></div><h3><a name="xmlDictLookup" id="xmlDictLookup"></a>Function: xmlDictLookup</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlDictLookup (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int len)<br />
+</pre><p>Add the @name to the hash @dict if not present.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the name, if -1 it is recomputed</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal copy of the name or NULL in case of internal error</td></tr></tbody></table></div><h3><a name="xmlDictOwns" id="xmlDictOwns"></a>Function: xmlDictOwns</h3><pre class="programlisting">int xmlDictOwns (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>check if a string is owned by the disctionary</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the string</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 error -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlDictQLookup" id="xmlDictQLookup"></a>Function: xmlDictQLookup</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlDictQLookup (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Add the QName @prefix:@name to the hash @dict if not present.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal copy of the QName or NULL in case of internal error</td></tr></tbody></table></div><h3><a name="xmlDictReference" id="xmlDictReference"></a>Function: xmlDictReference</h3><pre class="programlisting">int xmlDictReference (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
+</pre><p>Increment the <a href="libxml-SAX.html#reference">reference</a> counter of a dictionary</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlDictSize" id="xmlDictSize"></a>Function: xmlDictSize</h3><pre class="programlisting">int xmlDictSize (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
+</pre><p>Query the number of elements installed in the hash @dict.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements in the dictionnary or -1 in case of error</td></tr></tbody></table></div><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-encoding.html b/doc/html/libxml-encoding.html
new file mode 100644
index 0000000..e2e61b6
--- /dev/null
+++ b/doc/html/libxml-encoding.html
@@ -0,0 +1,118 @@
+<?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 encoding from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module encoding 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-dict.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-dict.html">dict</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-entities.html">entities</a></th><td><a accesskey="n" href="libxml-entities.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>interface for the encoding conversion functions needed for XML basic encoding and iconv() support. Related specs are rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies [ISO-10646] UTF-8 and UTF-16 in Annexes [ISO-8859-1] ISO Latin-1 characters codes. [UNICODE] The Unicode Consortium, "The Unicode Standard -- Worldwide Character Encoding -- Version 1.0", Addison- Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is described in Unicode Technical Report #4. [US-ASCII] Coded Character Set--7-bit American Standard Code for Information Interchange, ANSI X3.4-1986. </p><h2>Table of Contents</h2><pre class="programlisting">Enum <a href="#xmlCharEncoding">xmlCharEncoding</a>
+</pre><pre class="programlisting">Structure <a href="#xmlCharEncodingHandler">xmlCharEncodingHandler</a><br />struct _xmlCharEncodingHandler
+</pre><pre class="programlisting">Typedef <a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * <a name="xmlCharEncodingHandlerPtr" id="xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a>
+</pre><pre class="programlisting">int <a href="#UTF8Toisolat1">UTF8Toisolat1</a> (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)</pre>
+<pre class="programlisting">int <a href="#isolat1ToUTF8">isolat1ToUTF8</a> (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)</pre>
+<pre class="programlisting">int <a href="#xmlAddEncodingAlias">xmlAddEncodingAlias</a> (const char * name, <br /> const char * alias)</pre>
+<pre class="programlisting">int <a href="#xmlCharEncCloseFunc">xmlCharEncCloseFunc</a> (<a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * handler)</pre>
+<pre class="programlisting">int <a href="#xmlCharEncFirstLine">xmlCharEncFirstLine</a> (<a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * handler, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> out, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> in)</pre>
+<pre class="programlisting">int <a href="#xmlCharEncInFunc">xmlCharEncInFunc</a> (<a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * handler, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> out, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> in)</pre>
+<pre class="programlisting">int <a href="#xmlCharEncOutFunc">xmlCharEncOutFunc</a> (<a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * handler, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> out, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> in)</pre>
+<pre class="programlisting">Function type: <a href="#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a>
+int <a href="#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a> (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a>
+int <a href="#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)
+</pre>
+<pre class="programlisting">void <a href="#xmlCleanupCharEncodingHandlers">xmlCleanupCharEncodingHandlers</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlCleanupEncodingAliases">xmlCleanupEncodingAliases</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlDelEncodingAlias">xmlDelEncodingAlias</a> (const char * alias)</pre>
+<pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> <a href="#xmlDetectCharEncoding">xmlDetectCharEncoding</a> (const unsigned char * in, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> <a href="#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a> (const char * name)</pre>
+<pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> <a href="#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a> (<a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting">const char * <a href="#xmlGetCharEncodingName">xmlGetCharEncodingName</a> (<a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting">const char * <a href="#xmlGetEncodingAlias">xmlGetEncodingAlias</a> (const char * alias)</pre>
+<pre class="programlisting">void <a href="#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> <a href="#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a> (const char * name, <br /> <a href="libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> output)</pre>
+<pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> <a href="#xmlParseCharEncoding">xmlParseCharEncoding</a> (const char * name)</pre>
+<pre class="programlisting">void <a href="#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a> (<a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler)</pre>
+<h2>Description</h2>
+<h3>Enum <a name="xmlCharEncoding" id="xmlCharEncoding">xmlCharEncoding</a></h3><pre class="programlisting">Enum xmlCharEncoding {
+ <a name="XML_CHAR_ENCODING_ERROR" id="XML_CHAR_ENCODING_ERROR">XML_CHAR_ENCODING_ERROR</a> = -1 : No char encoding detected
+ <a name="XML_CHAR_ENCODING_NONE" id="XML_CHAR_ENCODING_NONE">XML_CHAR_ENCODING_NONE</a> = 0 : No char encoding detected
+ <a name="XML_CHAR_ENCODING_UTF8" id="XML_CHAR_ENCODING_UTF8">XML_CHAR_ENCODING_UTF8</a> = 1 : UTF-8
+ <a name="XML_CHAR_ENCODING_UTF16LE" id="XML_CHAR_ENCODING_UTF16LE">XML_CHAR_ENCODING_UTF16LE</a> = 2 : UTF-16 little endian
+ <a name="XML_CHAR_ENCODING_UTF16BE" id="XML_CHAR_ENCODING_UTF16BE">XML_CHAR_ENCODING_UTF16BE</a> = 3 : UTF-16 big endian
+ <a name="XML_CHAR_ENCODING_UCS4LE" id="XML_CHAR_ENCODING_UCS4LE">XML_CHAR_ENCODING_UCS4LE</a> = 4 : UCS-4 little endian
+ <a name="XML_CHAR_ENCODING_UCS4BE" id="XML_CHAR_ENCODING_UCS4BE">XML_CHAR_ENCODING_UCS4BE</a> = 5 : UCS-4 big endian
+ <a name="XML_CHAR_ENCODING_EBCDIC" id="XML_CHAR_ENCODING_EBCDIC">XML_CHAR_ENCODING_EBCDIC</a> = 6 : EBCDIC uh!
+ <a name="XML_CHAR_ENCODING_UCS4_2143" id="XML_CHAR_ENCODING_UCS4_2143">XML_CHAR_ENCODING_UCS4_2143</a> = 7 : UCS-4 unusual ordering
+ <a name="XML_CHAR_ENCODING_UCS4_3412" id="XML_CHAR_ENCODING_UCS4_3412">XML_CHAR_ENCODING_UCS4_3412</a> = 8 : UCS-4 unusual ordering
+ <a name="XML_CHAR_ENCODING_UCS2" id="XML_CHAR_ENCODING_UCS2">XML_CHAR_ENCODING_UCS2</a> = 9 : UCS-2
+ <a name="XML_CHAR_ENCODING_8859_1" id="XML_CHAR_ENCODING_8859_1">XML_CHAR_ENCODING_8859_1</a> = 10 : ISO-8859-1 ISO Latin 1
+ <a name="XML_CHAR_ENCODING_8859_2" id="XML_CHAR_ENCODING_8859_2">XML_CHAR_ENCODING_8859_2</a> = 11 : ISO-8859-2 ISO Latin 2
+ <a name="XML_CHAR_ENCODING_8859_3" id="XML_CHAR_ENCODING_8859_3">XML_CHAR_ENCODING_8859_3</a> = 12 : ISO-8859-3
+ <a name="XML_CHAR_ENCODING_8859_4" id="XML_CHAR_ENCODING_8859_4">XML_CHAR_ENCODING_8859_4</a> = 13 : ISO-8859-4
+ <a name="XML_CHAR_ENCODING_8859_5" id="XML_CHAR_ENCODING_8859_5">XML_CHAR_ENCODING_8859_5</a> = 14 : ISO-8859-5
+ <a name="XML_CHAR_ENCODING_8859_6" id="XML_CHAR_ENCODING_8859_6">XML_CHAR_ENCODING_8859_6</a> = 15 : ISO-8859-6
+ <a name="XML_CHAR_ENCODING_8859_7" id="XML_CHAR_ENCODING_8859_7">XML_CHAR_ENCODING_8859_7</a> = 16 : ISO-8859-7
+ <a name="XML_CHAR_ENCODING_8859_8" id="XML_CHAR_ENCODING_8859_8">XML_CHAR_ENCODING_8859_8</a> = 17 : ISO-8859-8
+ <a name="XML_CHAR_ENCODING_8859_9" id="XML_CHAR_ENCODING_8859_9">XML_CHAR_ENCODING_8859_9</a> = 18 : ISO-8859-9
+ <a name="XML_CHAR_ENCODING_2022_JP" id="XML_CHAR_ENCODING_2022_JP">XML_CHAR_ENCODING_2022_JP</a> = 19 : ISO-2022-JP
+ <a name="XML_CHAR_ENCODING_SHIFT_JIS" id="XML_CHAR_ENCODING_SHIFT_JIS">XML_CHAR_ENCODING_SHIFT_JIS</a> = 20 : Shift_JIS
+ <a name="XML_CHAR_ENCODING_EUC_JP" id="XML_CHAR_ENCODING_EUC_JP">XML_CHAR_ENCODING_EUC_JP</a> = 21 : EUC-JP
+ <a name="XML_CHAR_ENCODING_ASCII" id="XML_CHAR_ENCODING_ASCII">XML_CHAR_ENCODING_ASCII</a> = 22 : pure ASCII
+}
+</pre><h3><a name="xmlCharEncodingHandler" id="xmlCharEncodingHandler">Structure xmlCharEncodingHandler</a></h3><pre class="programlisting">Structure xmlCharEncodingHandler<br />struct _xmlCharEncodingHandler {
+ char * name
+ <a href="libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a> input
+ <a href="libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> output
+ iconv_t iconv_in
+ iconv_t iconv_out
+}</pre><h3><a name="UTF8Toisolat1" id="UTF8Toisolat1"></a>Function: UTF8Toisolat1</h3><pre class="programlisting">int UTF8Toisolat1 (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)<br />
+</pre><p>Take a block of UTF-8 chars in and try to convert it to an ISO Latin 1 block of chars out.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a pointer to an array of bytes to store the result</td></tr><tr><td><span class="term"><i><tt>outlen</tt></i>:</span></td><td>the length of @out</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a pointer to an array of UTF-8 chars</td></tr><tr><td><span class="term"><i><tt>inlen</tt></i>:</span></td><td>the length of @in</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.</td></tr></tbody></table></div><h3><a name="isolat1ToUTF8" id="isolat1ToUTF8"></a>Function: isolat1ToUTF8</h3><pre class="programlisting">int isolat1ToUTF8 (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)<br />
+</pre><p>Take a block of ISO Latin 1 chars in and try to convert it to an UTF-8 block of chars out.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a pointer to an array of bytes to store the result</td></tr><tr><td><span class="term"><i><tt>outlen</tt></i>:</span></td><td>the length of @out</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a pointer to an array of ISO Latin 1 chars</td></tr><tr><td><span class="term"><i><tt>inlen</tt></i>:</span></td><td>the length of @in</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if success, or -1 otherwise The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.</td></tr></tbody></table></div><h3><a name="xmlAddEncodingAlias" id="xmlAddEncodingAlias"></a>Function: xmlAddEncodingAlias</h3><pre class="programlisting">int xmlAddEncodingAlias (const char * name, <br /> const char * alias)<br />
+</pre><p>Registers an alias @alias for an encoding named @name. Existing alias will be overwritten.</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 encoding name as parsed, in UTF-8 format (ASCII actually)</td></tr><tr><td><span class="term"><i><tt>alias</tt></i>:</span></td><td>the alias name as parsed, in UTF-8 format (ASCII actually)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlCharEncCloseFunc" id="xmlCharEncCloseFunc"></a>Function: xmlCharEncCloseFunc</h3><pre class="programlisting">int xmlCharEncCloseFunc (<a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * handler)<br />
+</pre><p>Generic front-end for encoding handler close function</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>char enconding transformation data structure</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if success, or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlCharEncFirstLine" id="xmlCharEncFirstLine"></a>Function: xmlCharEncFirstLine</h3><pre class="programlisting">int xmlCharEncFirstLine (<a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * handler, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> out, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> in)<br />
+</pre><p>Front-end for the encoding handler input function, but handle only the very first line, i.e. limit itself to 45 chars.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>char enconding transformation data structure</td></tr><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> for the output.</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> for the input</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or</td></tr></tbody></table></div><h3><a name="xmlCharEncInFunc" id="xmlCharEncInFunc"></a>Function: xmlCharEncInFunc</h3><pre class="programlisting">int xmlCharEncInFunc (<a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * handler, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> out, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> in)<br />
+</pre><p>Generic front-end for the encoding handler input function</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>char encoding transformation data structure</td></tr><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> for the output.</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> for the input</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or</td></tr></tbody></table></div><h3><a name="xmlCharEncOutFunc" id="xmlCharEncOutFunc"></a>Function: xmlCharEncOutFunc</h3><pre class="programlisting">int xmlCharEncOutFunc (<a href="libxml-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * handler, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> out, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> in)<br />
+</pre><p>Generic front-end for the encoding handler output function a first call with @in == NULL has to be made firs to initiate the output in case of non-stateless encoding needing to initiate their state or the output (like the BOM in UTF16). In case of UTF8 sequence conversion errors for the given encoder, the content will be automatically remapped to a CharRef sequence.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>char enconding transformation data structure</td></tr><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> for the output.</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> for the input</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or</td></tr></tbody></table></div><h3><a name="xmlCharEncodingInputFunc" id="xmlCharEncodingInputFunc"></a>Function type: xmlCharEncodingInputFunc</h3><pre class="programlisting">Function type: xmlCharEncodingInputFunc
+int xmlCharEncodingInputFunc (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)
+</pre><p>Take a block of chars in the original encoding and try to convert it to an UTF-8 block of chars out.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a pointer to an array of bytes to store the UTF-8 result</td></tr><tr><td><span class="term"><i><tt>outlen</tt></i>:</span></td><td>the length of @out</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a pointer to an array of chars in the original encoding</td></tr><tr><td><span class="term"><i><tt>inlen</tt></i>:</span></td><td>the length of @in</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written, -1 if lack of space, or -2 if the transcoding failed. The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictiable. The value of @outlen after return is the number of octets consumed.</td></tr></tbody></table></div><br />
+<h3><a name="xmlCharEncodingOutputFunc" id="xmlCharEncodingOutputFunc"></a>Function type: xmlCharEncodingOutputFunc</h3><pre class="programlisting">Function type: xmlCharEncodingOutputFunc
+int xmlCharEncodingOutputFunc (unsigned char * out, <br /> int * outlen, <br /> const unsigned char * in, <br /> int * inlen)
+</pre><p>Take a block of UTF-8 chars in and try to convert it to another encoding. Note: a first call designed to produce heading info is called with in = NULL. If stateful this should also initialize the encoder state.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a pointer to an array of bytes to store the result</td></tr><tr><td><span class="term"><i><tt>outlen</tt></i>:</span></td><td>the length of @out</td></tr><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a pointer to an array of UTF-8 chars</td></tr><tr><td><span class="term"><i><tt>inlen</tt></i>:</span></td><td>the length of @in</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written, -1 if lack of space, or -2 if the transcoding failed. The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictiable. The value of @outlen after return is the number of octets produced.</td></tr></tbody></table></div><br />
+<h3><a name="xmlCleanupCharEncodingHandlers" id="xmlCleanupCharEncodingHandlers"></a>Function: xmlCleanupCharEncodingHandlers</h3><pre class="programlisting">void xmlCleanupCharEncodingHandlers (void)<br />
+</pre><p>Cleanup the memory allocated for the char encoding support, it unregisters all the encoding handlers and the aliases.</p>
+<h3><a name="xmlCleanupEncodingAliases" id="xmlCleanupEncodingAliases"></a>Function: xmlCleanupEncodingAliases</h3><pre class="programlisting">void xmlCleanupEncodingAliases (void)<br />
+</pre><p>Unregisters all aliases</p>
+<h3><a name="xmlDelEncodingAlias" id="xmlDelEncodingAlias"></a>Function: xmlDelEncodingAlias</h3><pre class="programlisting">int xmlDelEncodingAlias (const char * alias)<br />
+</pre><p>Unregisters an encoding alias @alias</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>alias</tt></i>:</span></td><td>the alias name as parsed, in UTF-8 format (ASCII actually)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlDetectCharEncoding" id="xmlDetectCharEncoding"></a>Function: xmlDetectCharEncoding</h3><pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> xmlDetectCharEncoding (const unsigned char * in, <br /> int len)<br />
+</pre><p>Guess the encoding of the entity using the first bytes of the entity content according to the non-normative appendix F of the XML-1.0 recommendation.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a pointer to the first bytes of the XML entity, must be at least 2 bytes long (at least 4 if encoding is UTF4 variant).</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>pointer to the length of the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>one of the XML_CHAR_ENCODING_... values.</td></tr></tbody></table></div><h3><a name="xmlFindCharEncodingHandler" id="xmlFindCharEncodingHandler"></a>Function: xmlFindCharEncodingHandler</h3><pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> xmlFindCharEncodingHandler (const char * name)<br />
+</pre><p>Search in the registered set the handler able to read/write that encoding.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>a string describing the char encoding.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the handler or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlGetCharEncodingHandler" id="xmlGetCharEncodingHandler"></a>Function: xmlGetCharEncodingHandler</h3><pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> xmlGetCharEncodingHandler (<a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Search in the registered set the handler able to read/write that encoding.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>enc</tt></i>:</span></td><td>an <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> value.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the handler or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlGetCharEncodingName" id="xmlGetCharEncodingName"></a>Function: xmlGetCharEncodingName</h3><pre class="programlisting">const char * xmlGetCharEncodingName (<a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>The "canonical" name for XML encoding. C.f. http://www.w3.org/TR/REC-xml#charencoding Section 4.3.3 Character Encoding in Entities</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>enc</tt></i>:</span></td><td>the encoding</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the canonical name for the given encoding</td></tr></tbody></table></div><h3><a name="xmlGetEncodingAlias" id="xmlGetEncodingAlias"></a>Function: xmlGetEncodingAlias</h3><pre class="programlisting">const char * xmlGetEncodingAlias (const char * alias)<br />
+</pre><p>Lookup an encoding name for the given alias.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>alias</tt></i>:</span></td><td>the alias name as parsed, in UTF-8 format (ASCII actually)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not found, otherwise the original name</td></tr></tbody></table></div><h3><a name="xmlInitCharEncodingHandlers" id="xmlInitCharEncodingHandlers"></a>Function: xmlInitCharEncodingHandlers</h3><pre class="programlisting">void xmlInitCharEncodingHandlers (void)<br />
+</pre><p>Initialize the char encoding support, it registers the default encoding supported. NOTE: while public, this function usually doesn't need to be called in normal processing.</p>
+<h3><a name="xmlNewCharEncodingHandler" id="xmlNewCharEncodingHandler"></a>Function: xmlNewCharEncodingHandler</h3><pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> xmlNewCharEncodingHandler (const char * name, <br /> <a href="libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> output)<br />
+</pre><p>Create and registers an xmlCharEncodingHandler.</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 encoding name, in UTF-8 format (ASCII actually)</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>the <a href="libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a> to read that encoding</td></tr><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the <a href="libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> to write that encoding</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> created (or NULL in case of error).</td></tr></tbody></table></div><h3><a name="xmlParseCharEncoding" id="xmlParseCharEncoding"></a>Function: xmlParseCharEncoding</h3><pre class="programlisting"><a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> xmlParseCharEncoding (const char * name)<br />
+</pre><p>Compare the string to the encoding schemes already known. Note that the comparison is case insensitive accordingly to the section [XML] 4.3.3 Character Encoding in Entities.</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 encoding name as parsed, in UTF-8 format (ASCII actually)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>one of the XML_CHAR_ENCODING_... values or <a href="libxml-encoding.html#XML_CHAR_ENCODING_NONE">XML_CHAR_ENCODING_NONE</a> if not recognized.</td></tr></tbody></table></div><h3><a name="xmlRegisterCharEncodingHandler" id="xmlRegisterCharEncodingHandler"></a>Function: xmlRegisterCharEncodingHandler</h3><pre class="programlisting">void xmlRegisterCharEncodingHandler (<a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler)<br />
+</pre><p>Register the char encoding handler, surprising, isn't it ?</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler block</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-entities.html b/doc/html/libxml-entities.html
new file mode 100644
index 0000000..f45a876
--- /dev/null
+++ b/doc/html/libxml-entities.html
@@ -0,0 +1,76 @@
+<?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 entities from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module entities 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-encoding.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-encoding.html">encoding</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-globals.html">globals</a></th><td><a accesskey="n" href="libxml-globals.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module provides some of the entity API needed for the parser and applications. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlEntitiesTable">xmlEntitiesTable</a><br />struct _xmlHashTable
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-entities.html#xmlEntitiesTable">xmlEntitiesTable</a> * <a name="xmlEntitiesTablePtr" id="xmlEntitiesTablePtr">xmlEntitiesTablePtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlEntityType">xmlEntityType</a>
+</pre><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlAddDocEntity">xmlAddDocEntity</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlAddDtdEntity">xmlAddDtdEntity</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">void <a href="#xmlCleanupPredefinedEntities">xmlCleanupPredefinedEntities</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> <a href="#xmlCopyEntitiesTable">xmlCopyEntitiesTable</a> (<a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table)</pre>
+<pre class="programlisting"><a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> <a href="#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlDumpEntitiesTable">xmlDumpEntitiesTable</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table)</pre>
+<pre class="programlisting">void <a href="#xmlDumpEntityDecl">xmlDumpEntityDecl</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> ent)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlEncodeEntities">xmlEncodeEntities</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)</pre>
+<pre class="programlisting">void <a href="#xmlFreeEntitiesTable">xmlFreeEntitiesTable</a> (<a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlGetDocEntity">xmlGetDocEntity</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlGetDtdEntity">xmlGetDtdEntity</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlGetParameterEntity">xmlGetParameterEntity</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlGetPredefinedEntity">xmlGetPredefinedEntity</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#xmlInitializePredefinedEntities">xmlInitializePredefinedEntities</a> (void)</pre>
+<h2>Description</h2>
+<h3><a name="xmlEntitiesTable" id="xmlEntitiesTable">Structure xmlEntitiesTable</a></h3><pre class="programlisting">Structure xmlEntitiesTable<br />struct _xmlHashTable {
+The content of this structure is not made public by the API.
+}</pre><h3>Enum <a name="xmlEntityType" id="xmlEntityType">xmlEntityType</a></h3><pre class="programlisting">Enum xmlEntityType {
+ <a name="XML_INTERNAL_GENERAL_ENTITY" id="XML_INTERNAL_GENERAL_ENTITY">XML_INTERNAL_GENERAL_ENTITY</a> = 1
+ <a name="XML_EXTERNAL_GENERAL_PARSED_ENTITY" id="XML_EXTERNAL_GENERAL_PARSED_ENTITY">XML_EXTERNAL_GENERAL_PARSED_ENTITY</a> = 2
+ <a name="XML_EXTERNAL_GENERAL_UNPARSED_ENTITY" id="XML_EXTERNAL_GENERAL_UNPARSED_ENTITY">XML_EXTERNAL_GENERAL_UNPARSED_ENTITY</a> = 3
+ <a name="XML_INTERNAL_PARAMETER_ENTITY" id="XML_INTERNAL_PARAMETER_ENTITY">XML_INTERNAL_PARAMETER_ENTITY</a> = 4
+ <a name="XML_EXTERNAL_PARAMETER_ENTITY" id="XML_EXTERNAL_PARAMETER_ENTITY">XML_EXTERNAL_PARAMETER_ENTITY</a> = 5
+ <a name="XML_INTERNAL_PREDEFINED_ENTITY" id="XML_INTERNAL_PREDEFINED_ENTITY">XML_INTERNAL_PREDEFINED_ENTITY</a> = 6
+}
+</pre><h3><a name="xmlAddDocEntity" id="xmlAddDocEntity"></a>Function: xmlAddDocEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlAddDocEntity (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Register a new entity for this document.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the entity type XML_xxx_yyy_ENTITY</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the entity external ID if available</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the entity system ID if available</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the entity content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the entity or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlAddDtdEntity" id="xmlAddDtdEntity"></a>Function: xmlAddDtdEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlAddDtdEntity (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Register a new entity for this document DTD external subset.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the entity type XML_xxx_yyy_ENTITY</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the entity external ID if available</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the entity system ID if available</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the entity content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the entity or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlCleanupPredefinedEntities" id="xmlCleanupPredefinedEntities"></a>Function: xmlCleanupPredefinedEntities</h3><pre class="programlisting">void xmlCleanupPredefinedEntities (void)<br />
+</pre><p>Cleanup up the predefined entities table. Deprecated call</p>
+<h3><a name="xmlCopyEntitiesTable" id="xmlCopyEntitiesTable"></a>Function: xmlCopyEntitiesTable</h3><pre class="programlisting"><a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> xmlCopyEntitiesTable (<a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table)<br />
+</pre><p>Build a copy of an entity table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An entity table</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCreateEntitiesTable" id="xmlCreateEntitiesTable"></a>Function: xmlCreateEntitiesTable</h3><pre class="programlisting"><a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> xmlCreateEntitiesTable (void)<br />
+</pre><p>create and initialize an empty entities hash table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> just created or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlDumpEntitiesTable" id="xmlDumpEntitiesTable"></a>Function: xmlDumpEntitiesTable</h3><pre class="programlisting">void xmlDumpEntitiesTable (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table)<br />
+</pre><p>This will dump the content of the entity table as an XML DTD definition</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>An XML buffer.</td></tr><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An entity table</td></tr></tbody></table></div><h3><a name="xmlDumpEntityDecl" id="xmlDumpEntityDecl"></a>Function: xmlDumpEntityDecl</h3><pre class="programlisting">void xmlDumpEntityDecl (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> ent)<br />
+</pre><p>This will dump the content of the entity table as an XML DTD definition</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>An XML buffer.</td></tr><tr><td><span class="term"><i><tt>ent</tt></i>:</span></td><td>An entity table</td></tr></tbody></table></div><h3><a name="xmlEncodeEntities" id="xmlEncodeEntities"></a>Function: xmlEncodeEntities</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlEncodeEntities (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)<br />
+</pre><p>TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary compatibility People must migrate their code to <a href="libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a> ! This routine will issue a warning when encountered.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the string</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>A string to convert to XML.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL</td></tr></tbody></table></div><h3><a name="xmlEncodeEntitiesReentrant" id="xmlEncodeEntitiesReentrant"></a>Function: xmlEncodeEntitiesReentrant</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlEncodeEntitiesReentrant (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)<br />
+</pre><p>Do a global encoding of a string, replacing the predefined entities and non ASCII values with their entities and CharRef counterparts. Contrary to xmlEncodeEntities, this routine is reentrant, and result must be deallocated.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the string</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>A string to convert to XML.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done.</td></tr></tbody></table></div><h3><a name="xmlEncodeSpecialChars" id="xmlEncodeSpecialChars"></a>Function: xmlEncodeSpecialChars</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlEncodeSpecialChars (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)<br />
+</pre><p>Do a global encoding of a string, replacing the predefined entities this routine is reentrant, and result must be deallocated.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the string</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>A string to convert to XML.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done.</td></tr></tbody></table></div><h3><a name="xmlFreeEntitiesTable" id="xmlFreeEntitiesTable"></a>Function: xmlFreeEntitiesTable</h3><pre class="programlisting">void xmlFreeEntitiesTable (<a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table)<br />
+</pre><p>Deallocate the memory used by an entities hash table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An entity table</td></tr></tbody></table></div><h3><a name="xmlGetDocEntity" id="xmlGetDocEntity"></a>Function: xmlGetDocEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlGetDocEntity (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Do an entity lookup in the document entity hash table and</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document referencing the entity</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the corresponding entity, otherwise a lookup is done in the predefined entities too. Returns A pointer to the entity structure or NULL if not found.</td></tr></tbody></table></div><h3><a name="xmlGetDtdEntity" id="xmlGetDtdEntity"></a>Function: xmlGetDtdEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlGetDtdEntity (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Do an entity lookup in the DTD entity hash table and</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document referencing the entity</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the corresponding entity, if found. Note: the first argument is the document node, not the DTD node. Returns A pointer to the entity structure or NULL if not found.</td></tr></tbody></table></div><h3><a name="xmlGetParameterEntity" id="xmlGetParameterEntity"></a>Function: xmlGetParameterEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlGetParameterEntity (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Do an entity lookup in the internal and external subsets and</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document referencing the entity</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the corresponding parameter entity, if found. Returns A pointer to the entity structure or NULL if not found.</td></tr></tbody></table></div><h3><a name="xmlGetPredefinedEntity" id="xmlGetPredefinedEntity"></a>Function: xmlGetPredefinedEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlGetPredefinedEntity (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Check whether this name is an predefined entity.</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 entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not, otherwise the entity</td></tr></tbody></table></div><h3><a name="xmlInitializePredefinedEntities" id="xmlInitializePredefinedEntities"></a>Function: xmlInitializePredefinedEntities</h3><pre class="programlisting">void xmlInitializePredefinedEntities (void)<br />
+</pre><p>Set up the predefined entities. Deprecated call</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/html/libxml-globals.html b/doc/html/libxml-globals.html
new file mode 100644
index 0000000..33cb383
--- /dev/null
+++ b/doc/html/libxml-globals.html
@@ -0,0 +1,125 @@
+<?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 globals from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module globals 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-entities.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-entities.html">entities</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-hash.html">hash</a></th><td><a accesskey="n" href="libxml-hash.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>all the global variables and thread handling for those variables is handled by this module. The bottom of this file is automatically generated by build_glob.py based on the description file global.data </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlGlobalState">xmlGlobalState</a><br />struct _xmlGlobalState
+</pre><pre class="programlisting">Typedef <a href="libxml-globals.html#xmlGlobalState">xmlGlobalState</a> * <a name="xmlGlobalStatePtr" id="xmlGlobalStatePtr">xmlGlobalStatePtr</a>
+</pre><pre class="programlisting">void <a href="#xmlCleanupGlobals">xmlCleanupGlobals</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> <a href="#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a> (<a href="libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func)</pre>
+<pre class="programlisting">Function type: <a href="#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a>
+void <a href="#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)
+</pre>
+<pre class="programlisting">void <a href="#xmlInitGlobals">xmlInitGlobals</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlInitializeGlobalState">xmlInitializeGlobalState</a> (<a href="libxml-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> gs)</pre>
+<pre class="programlisting"><a href="libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> <a href="#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a> (<a href="libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func)</pre>
+<pre class="programlisting">Function type: <a href="#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a>
+void <a href="#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)
+</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> <a href="#xmlThrDefBufferAllocScheme">xmlThrDefBufferAllocScheme</a> (<a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> v)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefDefaultBufferSize">xmlThrDefDefaultBufferSize</a> (int v)</pre>
+<pre class="programlisting"><a href="libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> <a href="#xmlThrDefDeregisterNodeDefault">xmlThrDefDeregisterNodeDefault</a> (<a href="libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefDoValidityCheckingDefaultValue">xmlThrDefDoValidityCheckingDefaultValue</a> (int v)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefGetWarningsDefaultValue">xmlThrDefGetWarningsDefaultValue</a> (int v)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefIndentTreeOutput">xmlThrDefIndentTreeOutput</a> (int v)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefKeepBlanksDefaultValue">xmlThrDefKeepBlanksDefaultValue</a> (int v)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefLineNumbersDefaultValue">xmlThrDefLineNumbersDefaultValue</a> (int v)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefLoadExtDtdDefaultValue">xmlThrDefLoadExtDtdDefaultValue</a> (int v)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefParserDebugEntities">xmlThrDefParserDebugEntities</a> (int v)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefPedanticParserDefaultValue">xmlThrDefPedanticParserDefaultValue</a> (int v)</pre>
+<pre class="programlisting"><a href="libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> <a href="#xmlThrDefRegisterNodeDefault">xmlThrDefRegisterNodeDefault</a> (<a href="libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefSaveNoEmptyTags">xmlThrDefSaveNoEmptyTags</a> (int v)</pre>
+<pre class="programlisting">void <a href="#xmlThrDefSetGenericErrorFunc">xmlThrDefSetGenericErrorFunc</a> (void * ctx, <br /> <a href="libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> handler)</pre>
+<pre class="programlisting">void <a href="#xmlThrDefSetStructuredErrorFunc">xmlThrDefSetStructuredErrorFunc</a> (void * ctx, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> handler)</pre>
+<pre class="programlisting">int <a href="#xmlThrDefSubstituteEntitiesDefaultValue">xmlThrDefSubstituteEntitiesDefaultValue</a> (int v)</pre>
+<pre class="programlisting">const char * <a href="#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a> (const char * v)</pre>
+<h2>Description</h2>
+<h3><a name="xmlGlobalState" id="xmlGlobalState">Structure xmlGlobalState</a></h3><pre class="programlisting">Structure xmlGlobalState<br />struct _xmlGlobalState {
+ const char * xmlParserVersion
+ <a href="libxml-tree.html#xmlSAXLocator">xmlSAXLocator</a> xmlDefaultSAXLocator
+ <a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> xmlDefaultSAXHandler
+ <a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> docbDefaultSAXHandler
+ <a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> htmlDefaultSAXHandler
+ <a href="libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> xmlFree
+ <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> xmlMalloc
+ <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> xmlMemStrdup
+ <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> xmlRealloc
+ <a href="libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> xmlGenericError
+ <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> xmlStructuredError
+ void * xmlGenericErrorContext
+ int oldXMLWDcompatibility
+ <a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> xmlBufferAllocScheme
+ int xmlDefaultBufferSize
+ int xmlSubstituteEntitiesDefaultValue
+ int xmlDoValidityCheckingDefaultValue
+ int xmlGetWarningsDefaultValue
+ int xmlKeepBlanksDefaultValue
+ int xmlLineNumbersDefaultValue
+ int xmlLoadExtDtdDefaultValue
+ int xmlParserDebugEntities
+ int xmlPedanticParserDefaultValue
+ int xmlSaveNoEmptyTags
+ int xmlIndentTreeOutput
+ const char * xmlTreeIndentString
+ <a href="libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> xmlRegisterNodeDefaultValue
+ <a href="libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> xmlDeregisterNodeDefaultValue
+ <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> xmlMallocAtomic
+ <a href="libxml-xmlerror.html#xmlError">xmlError</a> xmlLastError
+}</pre><h3><a name="xmlCleanupGlobals" id="xmlCleanupGlobals"></a>Function: xmlCleanupGlobals</h3><pre class="programlisting">void xmlCleanupGlobals (void)<br />
+</pre><p>Additional cleanup for multi-threading</p>
+<h3><a name="xmlDeregisterNodeDefault" id="xmlDeregisterNodeDefault"></a>Function: xmlDeregisterNodeDefault</h3><pre class="programlisting"><a href="libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> xmlDeregisterNodeDefault (<a href="libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func)<br />
+</pre><p>Registers a callback for node destruction</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>func</tt></i>:</span></td><td>function pointer to the new DeregisterNodeFunc</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the previous value of the deregistration function</td></tr></tbody></table></div><h3><a name="xmlDeregisterNodeFunc" id="xmlDeregisterNodeFunc"></a>Function type: xmlDeregisterNodeFunc</h3><pre class="programlisting">Function type: xmlDeregisterNodeFunc
+void xmlDeregisterNodeFunc (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)
+</pre><p></p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td></td></tr></tbody></table></div><br />
+<h3><a name="xmlInitGlobals" id="xmlInitGlobals"></a>Function: xmlInitGlobals</h3><pre class="programlisting">void xmlInitGlobals (void)<br />
+</pre><p>Additional initialisation for multi-threading</p>
+<h3><a name="xmlInitializeGlobalState" id="xmlInitializeGlobalState"></a>Function: xmlInitializeGlobalState</h3><pre class="programlisting">void xmlInitializeGlobalState (<a href="libxml-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> gs)<br />
+</pre><p>xmlInitializeGlobalState() initialize a global state with all the default values of the library.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>gs</tt></i>:</span></td><td>a pointer to a newly allocated global state</td></tr></tbody></table></div><h3><a name="xmlRegisterNodeDefault" id="xmlRegisterNodeDefault"></a>Function: xmlRegisterNodeDefault</h3><pre class="programlisting"><a href="libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> xmlRegisterNodeDefault (<a href="libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func)<br />
+</pre><p>Registers a callback for node creation</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>func</tt></i>:</span></td><td>function pointer to the new RegisterNodeFunc</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the old value of the registration function</td></tr></tbody></table></div><h3><a name="xmlRegisterNodeFunc" id="xmlRegisterNodeFunc"></a>Function type: xmlRegisterNodeFunc</h3><pre class="programlisting">Function type: xmlRegisterNodeFunc
+void xmlRegisterNodeFunc (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)
+</pre><p></p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td></td></tr></tbody></table></div><br />
+<h3><a name="xmlThrDefBufferAllocScheme" id="xmlThrDefBufferAllocScheme"></a>Function: xmlThrDefBufferAllocScheme</h3><pre class="programlisting"><a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> xmlThrDefBufferAllocScheme (<a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefDefaultBufferSize" id="xmlThrDefDefaultBufferSize"></a>Function: xmlThrDefDefaultBufferSize</h3><pre class="programlisting">int xmlThrDefDefaultBufferSize (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefDeregisterNodeDefault" id="xmlThrDefDeregisterNodeDefault"></a>Function: xmlThrDefDeregisterNodeDefault</h3><pre class="programlisting"><a href="libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> xmlThrDefDeregisterNodeDefault (<a href="libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>func</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefDoValidityCheckingDefaultValue" id="xmlThrDefDoValidityCheckingDefaultValue"></a>Function: xmlThrDefDoValidityCheckingDefaultValue</h3><pre class="programlisting">int xmlThrDefDoValidityCheckingDefaultValue (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefGetWarningsDefaultValue" id="xmlThrDefGetWarningsDefaultValue"></a>Function: xmlThrDefGetWarningsDefaultValue</h3><pre class="programlisting">int xmlThrDefGetWarningsDefaultValue (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefIndentTreeOutput" id="xmlThrDefIndentTreeOutput"></a>Function: xmlThrDefIndentTreeOutput</h3><pre class="programlisting">int xmlThrDefIndentTreeOutput (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefKeepBlanksDefaultValue" id="xmlThrDefKeepBlanksDefaultValue"></a>Function: xmlThrDefKeepBlanksDefaultValue</h3><pre class="programlisting">int xmlThrDefKeepBlanksDefaultValue (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefLineNumbersDefaultValue" id="xmlThrDefLineNumbersDefaultValue"></a>Function: xmlThrDefLineNumbersDefaultValue</h3><pre class="programlisting">int xmlThrDefLineNumbersDefaultValue (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefLoadExtDtdDefaultValue" id="xmlThrDefLoadExtDtdDefaultValue"></a>Function: xmlThrDefLoadExtDtdDefaultValue</h3><pre class="programlisting">int xmlThrDefLoadExtDtdDefaultValue (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefParserDebugEntities" id="xmlThrDefParserDebugEntities"></a>Function: xmlThrDefParserDebugEntities</h3><pre class="programlisting">int xmlThrDefParserDebugEntities (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefPedanticParserDefaultValue" id="xmlThrDefPedanticParserDefaultValue"></a>Function: xmlThrDefPedanticParserDefaultValue</h3><pre class="programlisting">int xmlThrDefPedanticParserDefaultValue (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefRegisterNodeDefault" id="xmlThrDefRegisterNodeDefault"></a>Function: xmlThrDefRegisterNodeDefault</h3><pre class="programlisting"><a href="libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> xmlThrDefRegisterNodeDefault (<a href="libxml-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>func</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefSaveNoEmptyTags" id="xmlThrDefSaveNoEmptyTags"></a>Function: xmlThrDefSaveNoEmptyTags</h3><pre class="programlisting">int xmlThrDefSaveNoEmptyTags (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefSetGenericErrorFunc" id="xmlThrDefSetGenericErrorFunc"></a>Function: xmlThrDefSetGenericErrorFunc</h3><pre class="programlisting">void xmlThrDefSetGenericErrorFunc (void * ctx, <br /> <a href="libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> handler)<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>handler</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefSetStructuredErrorFunc" id="xmlThrDefSetStructuredErrorFunc"></a>Function: xmlThrDefSetStructuredErrorFunc</h3><pre class="programlisting">void xmlThrDefSetStructuredErrorFunc (void * ctx, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> handler)<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>handler</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefSubstituteEntitiesDefaultValue" id="xmlThrDefSubstituteEntitiesDefaultValue"></a>Function: xmlThrDefSubstituteEntitiesDefaultValue</h3><pre class="programlisting">int xmlThrDefSubstituteEntitiesDefaultValue (int v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><h3><a name="xmlThrDefTreeIndentString" id="xmlThrDefTreeIndentString"></a>Function: xmlThrDefTreeIndentString</h3><pre class="programlisting">const char * xmlThrDefTreeIndentString (const char * v)<br />
+</pre><p></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>v</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td></td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-hash.html b/doc/html/libxml-hash.html
new file mode 100644
index 0000000..217b12e
--- /dev/null
+++ b/doc/html/libxml-hash.html
@@ -0,0 +1,112 @@
+<?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 hash from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module hash 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-globals.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-globals.html">globals</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-list.html">list</a></th><td><a accesskey="n" href="libxml-list.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlHashTable">xmlHashTable</a><br />struct _xmlHashTable
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-hash.html#xmlHashTable">xmlHashTable</a> * <a name="xmlHashTablePtr" id="xmlHashTablePtr">xmlHashTablePtr</a>
+</pre><pre class="programlisting">int <a href="#xmlHashAddEntry">xmlHashAddEntry</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> void * userdata)</pre>
+<pre class="programlisting">int <a href="#xmlHashAddEntry2">xmlHashAddEntry2</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> void * userdata)</pre>
+<pre class="programlisting">int <a href="#xmlHashAddEntry3">xmlHashAddEntry3</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> void * userdata)</pre>
+<pre class="programlisting">Function type: <a href="#xmlHashCopier">xmlHashCopier</a>
+void * <a href="#xmlHashCopier">xmlHashCopier</a> (void * payload, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre>
+<pre class="programlisting"><a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> <a href="#xmlHashCopy">xmlHashCopy</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> <a href="libxml-hash.html#xmlHashCopier">xmlHashCopier</a> f)</pre>
+<pre class="programlisting"><a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> <a href="#xmlHashCreate">xmlHashCreate</a> (int size)</pre>
+<pre class="programlisting">Function type: <a href="#xmlHashDeallocator">xmlHashDeallocator</a>
+void <a href="#xmlHashDeallocator">xmlHashDeallocator</a> (void * payload, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre>
+<pre class="programlisting">void <a href="#xmlHashFree">xmlHashFree</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)</pre>
+<pre class="programlisting">void * <a href="#xmlHashLookup">xmlHashLookup</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void * <a href="#xmlHashLookup2">xmlHashLookup2</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2)</pre>
+<pre class="programlisting">void * <a href="#xmlHashLookup3">xmlHashLookup3</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3)</pre>
+<pre class="programlisting">void * <a href="#xmlHashQLookup">xmlHashQLookup</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void * <a href="#xmlHashQLookup2">xmlHashQLookup2</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2)</pre>
+<pre class="programlisting">void * <a href="#xmlHashQLookup3">xmlHashQLookup3</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix3, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3)</pre>
+<pre class="programlisting">int <a href="#xmlHashRemoveEntry">xmlHashRemoveEntry</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)</pre>
+<pre class="programlisting">int <a href="#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)</pre>
+<pre class="programlisting">int <a href="#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)</pre>
+<pre class="programlisting">void <a href="#xmlHashScan">xmlHashScan</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> <a href="libxml-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br /> void * data)</pre>
+<pre class="programlisting">void <a href="#xmlHashScan3">xmlHashScan3</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> <a href="libxml-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br /> void * data)</pre>
+<pre class="programlisting">void <a href="#xmlHashScanFull">xmlHashScanFull</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> <a href="libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br /> void * data)</pre>
+<pre class="programlisting">void <a href="#xmlHashScanFull3">xmlHashScanFull3</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> <a href="libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br /> void * data)</pre>
+<pre class="programlisting">Function type: <a href="#xmlHashScanner">xmlHashScanner</a>
+void <a href="#xmlHashScanner">xmlHashScanner</a> (void * payload, <br /> void * data, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlHashScannerFull">xmlHashScannerFull</a>
+void <a href="#xmlHashScannerFull">xmlHashScannerFull</a> (void * payload, <br /> void * data, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3)
+</pre>
+<pre class="programlisting">int <a href="#xmlHashSize">xmlHashSize</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table)</pre>
+<pre class="programlisting">int <a href="#xmlHashUpdateEntry">xmlHashUpdateEntry</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> void * userdata, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)</pre>
+<pre class="programlisting">int <a href="#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> void * userdata, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)</pre>
+<pre class="programlisting">int <a href="#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a> (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> void * userdata, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)</pre>
+<h2>Description</h2>
+<h3><a name="xmlHashTable" id="xmlHashTable">Structure xmlHashTable</a></h3><pre class="programlisting">Structure xmlHashTable<br />struct _xmlHashTable {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlHashAddEntry" id="xmlHashAddEntry"></a>Function: xmlHashAddEntry</h3><pre class="programlisting">int xmlHashAddEntry (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> void * userdata)<br />
+</pre><p>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Duplicate names generate errors.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>userdata</tt></i>:</span></td><td>a pointer to the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 the addition succeeded and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlHashAddEntry2" id="xmlHashAddEntry2"></a>Function: xmlHashAddEntry2</h3><pre class="programlisting">int xmlHashAddEntry2 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> void * userdata)<br />
+</pre><p>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Duplicate tuples generate errors.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>userdata</tt></i>:</span></td><td>a pointer to the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 the addition succeeded and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlHashAddEntry3" id="xmlHashAddEntry3"></a>Function: xmlHashAddEntry3</h3><pre class="programlisting">int xmlHashAddEntry3 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> void * userdata)<br />
+</pre><p>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>a third name of the userdata</td></tr><tr><td><span class="term"><i><tt>userdata</tt></i>:</span></td><td>a pointer to the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 the addition succeeded and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlHashCopier" id="xmlHashCopier"></a>Function type: xmlHashCopier</h3><pre class="programlisting">Function type: xmlHashCopier
+void * xmlHashCopier (void * payload, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre><p>Callback to copy data from a hash.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a copy of the data or NULL in case of error.</td></tr></tbody></table></div><br />
+<h3><a name="xmlHashCopy" id="xmlHashCopy"></a>Function: xmlHashCopy</h3><pre class="programlisting"><a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> xmlHashCopy (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> <a href="libxml-hash.html#xmlHashCopier">xmlHashCopier</a> f)<br />
+</pre><p>Scan the hash @table and applied @f to each value.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the copier function for items in the hash</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new table or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlHashCreate" id="xmlHashCreate"></a>Function: xmlHashCreate</h3><pre class="programlisting"><a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> xmlHashCreate (int size)<br />
+</pre><p>Create a new xmlHashTablePtr.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size of the hash table</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object, or NULL if an error occured.</td></tr></tbody></table></div><h3><a name="xmlHashDeallocator" id="xmlHashDeallocator"></a>Function type: xmlHashDeallocator</h3><pre class="programlisting">Function type: xmlHashDeallocator
+void xmlHashDeallocator (void * payload, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre><p>Callback to free data from a hash.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr></tbody></table></div><br />
+<h3><a name="xmlHashFree" id="xmlHashFree"></a>Function: xmlHashFree</h3><pre class="programlisting">void xmlHashFree (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br />
+</pre><p>Free the hash @table and its contents. The userdata is deallocated with @f if provided.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the deallocator function for items in the hash</td></tr></tbody></table></div><h3><a name="xmlHashLookup" id="xmlHashLookup"></a>Function: xmlHashLookup</h3><pre class="programlisting">void * xmlHashLookup (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Find the userdata specified by the @name.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the pointer to the userdata</td></tr></tbody></table></div><h3><a name="xmlHashLookup2" id="xmlHashLookup2"></a>Function: xmlHashLookup2</h3><pre class="programlisting">void * xmlHashLookup2 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2)<br />
+</pre><p>Find the userdata specified by the (@name, @name2) tuple.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the pointer to the userdata</td></tr></tbody></table></div><h3><a name="xmlHashLookup3" id="xmlHashLookup3"></a>Function: xmlHashLookup3</h3><pre class="programlisting">void * xmlHashLookup3 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3)<br />
+</pre><p>Find the userdata specified by the (@name, @name2, @name3) tuple.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>a third name of the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the a pointer to the userdata</td></tr></tbody></table></div><h3><a name="xmlHashQLookup" id="xmlHashQLookup"></a>Function: xmlHashQLookup</h3><pre class="programlisting">void * xmlHashQLookup (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Find the userdata specified by the QName @prefix:@name/@name.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix of the userdata</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the pointer to the userdata</td></tr></tbody></table></div><h3><a name="xmlHashQLookup2" id="xmlHashQLookup2"></a>Function: xmlHashQLookup2</h3><pre class="programlisting">void * xmlHashQLookup2 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2)<br />
+</pre><p>Find the userdata specified by the QNames tuple</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix of the userdata</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>prefix2</tt></i>:</span></td><td>the second prefix of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the pointer to the userdata</td></tr></tbody></table></div><h3><a name="xmlHashQLookup3" id="xmlHashQLookup3"></a>Function: xmlHashQLookup3</h3><pre class="programlisting">void * xmlHashQLookup3 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix3, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3)<br />
+</pre><p>Find the userdata specified by the (@name, @name2, @name3) tuple.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix of the userdata</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>prefix2</tt></i>:</span></td><td>the second prefix of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>prefix3</tt></i>:</span></td><td>the third prefix of the userdata</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>a third name of the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the a pointer to the userdata</td></tr></tbody></table></div><h3><a name="xmlHashRemoveEntry" id="xmlHashRemoveEntry"></a>Function: xmlHashRemoveEntry</h3><pre class="programlisting">int xmlHashRemoveEntry (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br />
+</pre><p>Find the userdata specified by the @name and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the deallocator function for removed item (if any)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the removal succeeded and -1 in case of error or not found.</td></tr></tbody></table></div><h3><a name="xmlHashRemoveEntry2" id="xmlHashRemoveEntry2"></a>Function: xmlHashRemoveEntry2</h3><pre class="programlisting">int xmlHashRemoveEntry2 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br />
+</pre><p>Find the userdata specified by the (@name, @name2) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the deallocator function for removed item (if any)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the removal succeeded and -1 in case of error or not found.</td></tr></tbody></table></div><h3><a name="xmlHashRemoveEntry3" id="xmlHashRemoveEntry3"></a>Function: xmlHashRemoveEntry3</h3><pre class="programlisting">int xmlHashRemoveEntry3 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br />
+</pre><p>Find the userdata specified by the (@name, @name2, @name3) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>a third name of the userdata</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the deallocator function for removed item (if any)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the removal succeeded and -1 in case of error or not found.</td></tr></tbody></table></div><h3><a name="xmlHashScan" id="xmlHashScan"></a>Function: xmlHashScan</h3><pre class="programlisting">void xmlHashScan (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> <a href="libxml-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br /> void * data)<br />
+</pre><p>Scan the hash @table and applied @f to each value.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the scanner function for items in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra data passed to f</td></tr></tbody></table></div><h3><a name="xmlHashScan3" id="xmlHashScan3"></a>Function: xmlHashScan3</h3><pre class="programlisting">void xmlHashScan3 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> <a href="libxml-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br /> void * data)<br />
+</pre><p>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata or NULL</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata or NULL</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>a third name of the userdata or NULL</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the scanner function for items in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra data passed to f</td></tr></tbody></table></div><h3><a name="xmlHashScanFull" id="xmlHashScanFull"></a>Function: xmlHashScanFull</h3><pre class="programlisting">void xmlHashScanFull (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> <a href="libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br /> void * data)<br />
+</pre><p>Scan the hash @table and applied @f to each value.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the scanner function for items in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra data passed to f</td></tr></tbody></table></div><h3><a name="xmlHashScanFull3" id="xmlHashScanFull3"></a>Function: xmlHashScanFull3</h3><pre class="programlisting">void xmlHashScanFull3 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> <a href="libxml-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br /> void * data)<br />
+</pre><p>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata or NULL</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata or NULL</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>a third name of the userdata or NULL</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the scanner function for items in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra data passed to f</td></tr></tbody></table></div><h3><a name="xmlHashScanner" id="xmlHashScanner"></a>Function type: xmlHashScanner</h3><pre class="programlisting">Function type: xmlHashScanner
+void xmlHashScanner (void * payload, <br /> void * data, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre><p>Callback when scanning data in a hash with the simple scanner.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra scannner data</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr></tbody></table></div><br />
+<h3><a name="xmlHashScannerFull" id="xmlHashScannerFull"></a>Function type: xmlHashScannerFull</h3><pre class="programlisting">Function type: xmlHashScannerFull
+void xmlHashScannerFull (void * payload, <br /> void * data, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3)
+</pre><p>Callback when scanning data in a hash with the full scanner.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>payload</tt></i>:</span></td><td>the data in the hash</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>extra scannner data</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name associated</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>the second name associated</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>the third name associated</td></tr></tbody></table></div><br />
+<h3><a name="xmlHashSize" id="xmlHashSize"></a>Function: xmlHashSize</h3><pre class="programlisting">int xmlHashSize (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table)<br />
+</pre><p>Query the number of elements installed in the hash @table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements in the hash table or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlHashUpdateEntry" id="xmlHashUpdateEntry"></a>Function: xmlHashUpdateEntry</h3><pre class="programlisting">int xmlHashUpdateEntry (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> void * userdata, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br />
+</pre><p>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Existing entry for this @name will be removed and freed with @f if found.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>userdata</tt></i>:</span></td><td>a pointer to the userdata</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the deallocator function for replaced item (if any)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 the addition succeeded and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlHashUpdateEntry2" id="xmlHashUpdateEntry2"></a>Function: xmlHashUpdateEntry2</h3><pre class="programlisting">int xmlHashUpdateEntry2 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> void * userdata, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br />
+</pre><p>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Existing entry for this tuple will be removed and freed with @f if found.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>userdata</tt></i>:</span></td><td>a pointer to the userdata</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the deallocator function for replaced item (if any)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 the addition succeeded and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlHashUpdateEntry3" id="xmlHashUpdateEntry3"></a>Function: xmlHashUpdateEntry3</h3><pre class="programlisting">int xmlHashUpdateEntry3 (<a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name2, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name3, <br /> void * userdata, <br /> <a href="libxml-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br />
+</pre><p>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Existing entry for this tuple will be removed and freed with @f if found.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>the hash table</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>name2</tt></i>:</span></td><td>a second name of the userdata</td></tr><tr><td><span class="term"><i><tt>name3</tt></i>:</span></td><td>a third name of the userdata</td></tr><tr><td><span class="term"><i><tt>userdata</tt></i>:</span></td><td>a pointer to the userdata</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the deallocator function for replaced item (if any)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 the addition succeeded and -1 in case of error.</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-lib.html b/doc/html/libxml-lib.html
new file mode 100644
index 0000000..5edc0f7
--- /dev/null
+++ b/doc/html/libxml-lib.html
@@ -0,0 +1,13 @@
+<?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>Reference Manual for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-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-list.html b/doc/html/libxml-list.html
new file mode 100644
index 0000000..e9f0e03
--- /dev/null
+++ b/doc/html/libxml-list.html
@@ -0,0 +1,120 @@
+<?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 list from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module list 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-hash.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-hash.html">hash</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-nanoftp.html">nanoftp</a></th><td><a accesskey="n" href="libxml-nanoftp.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module implement the list support used in various place in the library. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlLink">xmlLink</a><br />struct _xmlLink
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-list.html#xmlLink">xmlLink</a> * <a name="xmlLinkPtr" id="xmlLinkPtr">xmlLinkPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlList">xmlList</a><br />struct _xmlList
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-list.html#xmlList">xmlList</a> * <a name="xmlListPtr" id="xmlListPtr">xmlListPtr</a>
+</pre><pre class="programlisting">void * <a href="#xmlLinkGetData">xmlLinkGetData</a> (<a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> lk)</pre>
+<pre class="programlisting">int <a href="#xmlListAppend">xmlListAppend</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)</pre>
+<pre class="programlisting">void <a href="#xmlListClear">xmlListClear</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting">int <a href="#xmlListCopy">xmlListCopy</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> cur, <br /> const <a href="libxml-list.html#xmlListPtr">xmlListPtr</a> old)</pre>
+<pre class="programlisting"><a href="libxml-list.html#xmlListPtr">xmlListPtr</a> <a href="#xmlListCreate">xmlListCreate</a> (<a href="libxml-list.html#xmlListDeallocator">xmlListDeallocator</a> deallocator, <br /> <a href="libxml-list.html#xmlListDataCompare">xmlListDataCompare</a> compare)</pre>
+<pre class="programlisting">Function type: <a href="#xmlListDataCompare">xmlListDataCompare</a>
+int <a href="#xmlListDataCompare">xmlListDataCompare</a> (const void * data0, <br /> const void * data1)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlListDeallocator">xmlListDeallocator</a>
+void <a href="#xmlListDeallocator">xmlListDeallocator</a> (<a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> lk)
+</pre>
+<pre class="programlisting">void <a href="#xmlListDelete">xmlListDelete</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting"><a href="libxml-list.html#xmlListPtr">xmlListPtr</a> <a href="#xmlListDup">xmlListDup</a> (const <a href="libxml-list.html#xmlListPtr">xmlListPtr</a> old)</pre>
+<pre class="programlisting">int <a href="#xmlListEmpty">xmlListEmpty</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting"><a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> <a href="#xmlListEnd">xmlListEnd</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting"><a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> <a href="#xmlListFront">xmlListFront</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting">int <a href="#xmlListInsert">xmlListInsert</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)</pre>
+<pre class="programlisting">void <a href="#xmlListMerge">xmlListMerge</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l1, <br /> <a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l2)</pre>
+<pre class="programlisting">void <a href="#xmlListPopBack">xmlListPopBack</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting">void <a href="#xmlListPopFront">xmlListPopFront</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting">int <a href="#xmlListPushBack">xmlListPushBack</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)</pre>
+<pre class="programlisting">int <a href="#xmlListPushFront">xmlListPushFront</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)</pre>
+<pre class="programlisting">int <a href="#xmlListRemoveAll">xmlListRemoveAll</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)</pre>
+<pre class="programlisting">int <a href="#xmlListRemoveFirst">xmlListRemoveFirst</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)</pre>
+<pre class="programlisting">int <a href="#xmlListRemoveLast">xmlListRemoveLast</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)</pre>
+<pre class="programlisting">void <a href="#xmlListReverse">xmlListReverse</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting">void * <a href="#xmlListReverseSearch">xmlListReverseSearch</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)</pre>
+<pre class="programlisting">void <a href="#xmlListReverseWalk">xmlListReverseWalk</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br /> const void * user)</pre>
+<pre class="programlisting">void * <a href="#xmlListSearch">xmlListSearch</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)</pre>
+<pre class="programlisting">int <a href="#xmlListSize">xmlListSize</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting">void <a href="#xmlListSort">xmlListSort</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)</pre>
+<pre class="programlisting">void <a href="#xmlListWalk">xmlListWalk</a> (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br /> const void * user)</pre>
+<pre class="programlisting">Function type: <a href="#xmlListWalker">xmlListWalker</a>
+int <a href="#xmlListWalker">xmlListWalker</a> (const void * data, <br /> const void * user)
+</pre>
+<h2>Description</h2>
+<h3><a name="xmlLink" id="xmlLink">Structure xmlLink</a></h3><pre class="programlisting">Structure xmlLink<br />struct _xmlLink {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlList" id="xmlList">Structure xmlList</a></h3><pre class="programlisting">Structure xmlList<br />struct _xmlList {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlLinkGetData" id="xmlLinkGetData"></a>Function: xmlLinkGetData</h3><pre class="programlisting">void * xmlLinkGetData (<a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> lk)<br />
+</pre><p>See Returns.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>lk</tt></i>:</span></td><td>a link</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the data referenced from this link</td></tr></tbody></table></div><h3><a name="xmlListAppend" id="xmlListAppend"></a>Function: xmlListAppend</h3><pre class="programlisting">int xmlListAppend (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)<br />
+</pre><p>Insert data in the ordered list at the end for this value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, 1 in case of failure</td></tr></tbody></table></div><h3><a name="xmlListClear" id="xmlListClear"></a>Function: xmlListClear</h3><pre class="programlisting">void xmlListClear (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Remove the all data in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListCopy" id="xmlListCopy"></a>Function: xmlListCopy</h3><pre class="programlisting">int xmlListCopy (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> cur, <br /> const <a href="libxml-list.html#xmlListPtr">xmlListPtr</a> old)<br />
+</pre><p>Move all the element from the old list in the new list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the new list</td></tr><tr><td><span class="term"><i><tt>old</tt></i>:</span></td><td>the old list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success 1 in case of error</td></tr></tbody></table></div><h3><a name="xmlListCreate" id="xmlListCreate"></a>Function: xmlListCreate</h3><pre class="programlisting"><a href="libxml-list.html#xmlListPtr">xmlListPtr</a> xmlListCreate (<a href="libxml-list.html#xmlListDeallocator">xmlListDeallocator</a> deallocator, <br /> <a href="libxml-list.html#xmlListDataCompare">xmlListDataCompare</a> compare)<br />
+</pre><p>Create a new list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>deallocator</tt></i>:</span></td><td>an optional deallocator function</td></tr><tr><td><span class="term"><i><tt>compare</tt></i>:</span></td><td>an optional comparison function</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new list or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlListDataCompare" id="xmlListDataCompare"></a>Function type: xmlListDataCompare</h3><pre class="programlisting">Function type: xmlListDataCompare
+int xmlListDataCompare (const void * data0, <br /> const void * data1)
+</pre><p>Callback function used to compare 2 data.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>data0</tt></i>:</span></td><td>the first data</td></tr><tr><td><span class="term"><i><tt>data1</tt></i>:</span></td><td>the second data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 is equality, -1 or 1 otherwise depending on the ordering.</td></tr></tbody></table></div><br />
+<h3><a name="xmlListDeallocator" id="xmlListDeallocator"></a>Function type: xmlListDeallocator</h3><pre class="programlisting">Function type: xmlListDeallocator
+void xmlListDeallocator (<a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> lk)
+</pre><p>Callback function used to free data from a list.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>lk</tt></i>:</span></td><td>the data to deallocate</td></tr></tbody></table></div><br />
+<h3><a name="xmlListDelete" id="xmlListDelete"></a>Function: xmlListDelete</h3><pre class="programlisting">void xmlListDelete (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Deletes the list and its associated data</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListDup" id="xmlListDup"></a>Function: xmlListDup</h3><pre class="programlisting"><a href="libxml-list.html#xmlListPtr">xmlListPtr</a> xmlListDup (const <a href="libxml-list.html#xmlListPtr">xmlListPtr</a> old)<br />
+</pre><p>Duplicate the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>old</tt></i>:</span></td><td>the list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new copy of the list or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlListEmpty" id="xmlListEmpty"></a>Function: xmlListEmpty</h3><pre class="programlisting">int xmlListEmpty (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Is the list empty ?</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the list is empty, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlListEnd" id="xmlListEnd"></a>Function: xmlListEnd</h3><pre class="programlisting"><a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> xmlListEnd (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Get the last element in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the last element in the list, or NULL</td></tr></tbody></table></div><h3><a name="xmlListFront" id="xmlListFront"></a>Function: xmlListFront</h3><pre class="programlisting"><a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> xmlListFront (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Get the first element in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the first element in the list, or NULL</td></tr></tbody></table></div><h3><a name="xmlListInsert" id="xmlListInsert"></a>Function: xmlListInsert</h3><pre class="programlisting">int xmlListInsert (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)<br />
+</pre><p>Insert data in the ordered list at the beginning for this value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, 1 in case of failure</td></tr></tbody></table></div><h3><a name="xmlListMerge" id="xmlListMerge"></a>Function: xmlListMerge</h3><pre class="programlisting">void xmlListMerge (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l1, <br /> <a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l2)<br />
+</pre><p>include all the elements of the second list in the first one and clear the second list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l1</tt></i>:</span></td><td>the original list</td></tr><tr><td><span class="term"><i><tt>l2</tt></i>:</span></td><td>the new list</td></tr></tbody></table></div><h3><a name="xmlListPopBack" id="xmlListPopBack"></a>Function: xmlListPopBack</h3><pre class="programlisting">void xmlListPopBack (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Removes the last element in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListPopFront" id="xmlListPopFront"></a>Function: xmlListPopFront</h3><pre class="programlisting">void xmlListPopFront (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Removes the first element in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListPushBack" id="xmlListPushBack"></a>Function: xmlListPushBack</h3><pre class="programlisting">int xmlListPushBack (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)<br />
+</pre><p>add the new data at the end of the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>new data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if successful, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlListPushFront" id="xmlListPushFront"></a>Function: xmlListPushFront</h3><pre class="programlisting">int xmlListPushFront (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)<br />
+</pre><p>add the new data at the beginning of the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>new data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if successful, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlListRemoveAll" id="xmlListRemoveAll"></a>Function: xmlListRemoveAll</h3><pre class="programlisting">int xmlListRemoveAll (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)<br />
+</pre><p>Remove the all instance associated to data in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>list data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of deallocation, or 0 if not found</td></tr></tbody></table></div><h3><a name="xmlListRemoveFirst" id="xmlListRemoveFirst"></a>Function: xmlListRemoveFirst</h3><pre class="programlisting">int xmlListRemoveFirst (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)<br />
+</pre><p>Remove the first instance associated to data in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>list data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if a deallocation occured, or 0 if not found</td></tr></tbody></table></div><h3><a name="xmlListRemoveLast" id="xmlListRemoveLast"></a>Function: xmlListRemoveLast</h3><pre class="programlisting">int xmlListRemoveLast (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)<br />
+</pre><p>Remove the last instance associated to data in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>list data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if a deallocation occured, or 0 if not found</td></tr></tbody></table></div><h3><a name="xmlListReverse" id="xmlListReverse"></a>Function: xmlListReverse</h3><pre class="programlisting">void xmlListReverse (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Reverse the order of the elements in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListReverseSearch" id="xmlListReverseSearch"></a>Function: xmlListReverseSearch</h3><pre class="programlisting">void * xmlListReverseSearch (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)<br />
+</pre><p>Search the list in reverse order for an existing value of @data</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>a search value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value associated to @data or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlListReverseWalk" id="xmlListReverseWalk"></a>Function: xmlListReverseWalk</h3><pre class="programlisting">void xmlListReverseWalk (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br /> const void * user)<br />
+</pre><p>Walk all the element of the list in reverse order and apply the walker function to it</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>walker</tt></i>:</span></td><td>a processing function</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>a user parameter passed to the walker function</td></tr></tbody></table></div><h3><a name="xmlListSearch" id="xmlListSearch"></a>Function: xmlListSearch</h3><pre class="programlisting">void * xmlListSearch (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> void * data)<br />
+</pre><p>Search the list for an existing value of @data</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>a search value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value associated to @data or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlListSize" id="xmlListSize"></a>Function: xmlListSize</h3><pre class="programlisting">int xmlListSize (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Get the number of elements in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements in the list</td></tr></tbody></table></div><h3><a name="xmlListSort" id="xmlListSort"></a>Function: xmlListSort</h3><pre class="programlisting">void xmlListSort (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+</pre><p>Sort all the elements in the list</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListWalk" id="xmlListWalk"></a>Function: xmlListWalk</h3><pre class="programlisting">void xmlListWalk (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br /> const void * user)<br />
+</pre><p>Walk all the element of the first from first to last and apply the walker function to it</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>walker</tt></i>:</span></td><td>a processing function</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>a user parameter passed to the walker function</td></tr></tbody></table></div><h3><a name="xmlListWalker" id="xmlListWalker"></a>Function type: xmlListWalker</h3><pre class="programlisting">Function type: xmlListWalker
+int xmlListWalker (const void * data, <br /> const void * user)
+</pre><p>Callback function used when walking a list with xmlListWalk().</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the data found in the list</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>extra user provided data to the walker</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 to stop walking the list, 1 otherwise.</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-nanoftp.html b/doc/html/libxml-nanoftp.html
new file mode 100644
index 0000000..afcd4d5
--- /dev/null
+++ b/doc/html/libxml-nanoftp.html
@@ -0,0 +1,92 @@
+<?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 nanoftp from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module nanoftp 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-list.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-list.html">list</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-nanohttp.html">nanohttp</a></th><td><a accesskey="n" href="libxml-nanohttp.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>minimal FTP implementation allowing to fetch resources like external subset. </p><h2>Table of Contents</h2><pre class="programlisting">Function type: <a href="#ftpDataCallback">ftpDataCallback</a>
+void <a href="#ftpDataCallback">ftpDataCallback</a> (void * userData, <br /> const char * data, <br /> int len)
+</pre>
+<pre class="programlisting">Function type: <a href="#ftpListCallback">ftpListCallback</a>
+void <a href="#ftpListCallback">ftpListCallback</a> (void * userData, <br /> const char * filename, <br /> const char * attrib, <br /> const char * owner, <br /> const char * group, <br /> unsigned long size, <br /> int links, <br /> int year, <br /> const char * month, <br /> int day, <br /> int hour, <br /> int minute)
+</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#xmlNanoFTPCleanup">xmlNanoFTPCleanup</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPClose">xmlNanoFTPClose</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPCloseConnection">xmlNanoFTPCloseConnection</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPConnect">xmlNanoFTPConnect</a> (void * ctx)</pre>
+<pre class="programlisting">void * <a href="#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a> (const char * server, <br /> int port)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPCwd">xmlNanoFTPCwd</a> (void * ctx, <br /> char * directory)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPDele">xmlNanoFTPDele</a> (void * ctx, <br /> char * file)</pre>
+<pre class="programlisting">void <a href="#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPGet">xmlNanoFTPGet</a> (void * ctx, <br /> <a href="libxml-nanoftp.html#ftpDataCallback">ftpDataCallback</a> callback, <br /> void * userData, <br /> const char * filename)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a> (void * ctx, <br /> const char * filename)</pre>
+<pre class="programlisting">void <a href="#xmlNanoFTPInit">xmlNanoFTPInit</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPList">xmlNanoFTPList</a> (void * ctx, <br /> <a href="libxml-nanoftp.html#ftpListCallback">ftpListCallback</a> callback, <br /> void * userData, <br /> char * filename)</pre>
+<pre class="programlisting">void * <a href="#xmlNanoFTPNewCtxt">xmlNanoFTPNewCtxt</a> (const char * URL)</pre>
+<pre class="programlisting">void * <a href="#xmlNanoFTPOpen">xmlNanoFTPOpen</a> (const char * URL)</pre>
+<pre class="programlisting">void <a href="#xmlNanoFTPProxy">xmlNanoFTPProxy</a> (const char * host, <br /> int port, <br /> const char * user, <br /> const char * passwd, <br /> int type)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPQuit">xmlNanoFTPQuit</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPRead">xmlNanoFTPRead</a> (void * ctx, <br /> void * dest, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a> (const char * URL)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a> (void * ctx, <br /> const char * URL)</pre>
+<h2>Description</h2>
+<h3><a name="ftpDataCallback" id="ftpDataCallback"></a>Function type: ftpDataCallback</h3><pre class="programlisting">Function type: ftpDataCallback
+void ftpDataCallback (void * userData, <br /> const char * data, <br /> int len)
+</pre><p>A callback for the <a href="libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a> command.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>the user provided context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the data received</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>its size in bytes</td></tr></tbody></table></div><br />
+<h3><a name="ftpListCallback" id="ftpListCallback"></a>Function type: ftpListCallback</h3><pre class="programlisting">Function type: ftpListCallback
+void ftpListCallback (void * userData, <br /> const char * filename, <br /> const char * attrib, <br /> const char * owner, <br /> const char * group, <br /> unsigned long size, <br /> int links, <br /> int year, <br /> const char * month, <br /> int day, <br /> int hour, <br /> int minute)
+</pre><p>A callback for the <a href="libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a> command. Note that only one of year and day:minute are specified.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>user provided data for the callback</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the file name (including "-&gt;" when links are shown)</td></tr><tr><td><span class="term"><i><tt>attrib</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> string</td></tr><tr><td><span class="term"><i><tt>owner</tt></i>:</span></td><td>the owner string</td></tr><tr><td><span class="term"><i><tt>group</tt></i>:</span></td><td>the group string</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the file size</td></tr><tr><td><span class="term"><i><tt>links</tt></i>:</span></td><td>the link count</td></tr><tr><td><span class="term"><i><tt>year</tt></i>:</span></td><td>the year</td></tr><tr><td><span class="term"><i><tt>month</tt></i>:</span></td><td>the month</td></tr><tr><td><span class="term"><i><tt>day</tt></i>:</span></td><td>the day</td></tr><tr><td><span class="term"><i><tt>hour</tt></i>:</span></td><td>the hour</td></tr><tr><td><span class="term"><i><tt>minute</tt></i>:</span></td><td>the minute</td></tr></tbody></table></div><br />
+<h3><a name="xmlNanoFTPCheckResponse" id="xmlNanoFTPCheckResponse"></a>Function: xmlNanoFTPCheckResponse</h3><pre class="programlisting">int xmlNanoFTPCheckResponse (void * ctx)<br />
+</pre><p>Check if there is a response from the FTP server after a command.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the code number, or 0</td></tr></tbody></table></div><h3><a name="xmlNanoFTPCleanup" id="xmlNanoFTPCleanup"></a>Function: xmlNanoFTPCleanup</h3><pre class="programlisting">void xmlNanoFTPCleanup (void)<br />
+</pre><p>Cleanup the FTP protocol layer. This cleanup proxy informations.</p>
+<h3><a name="xmlNanoFTPClose" id="xmlNanoFTPClose"></a>Function: xmlNanoFTPClose</h3><pre class="programlisting">int xmlNanoFTPClose (void * ctx)<br />
+</pre><p>Close the connection and both control and transport</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlNanoFTPCloseConnection" id="xmlNanoFTPCloseConnection"></a>Function: xmlNanoFTPCloseConnection</h3><pre class="programlisting">int xmlNanoFTPCloseConnection (void * ctx)<br />
+</pre><p>Close the data connection from the server</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlNanoFTPConnect" id="xmlNanoFTPConnect"></a>Function: xmlNanoFTPConnect</h3><pre class="programlisting">int xmlNanoFTPConnect (void * ctx)<br />
+</pre><p>Tries to open a control connection</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP 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="xmlNanoFTPConnectTo" id="xmlNanoFTPConnectTo"></a>Function: xmlNanoFTPConnectTo</h3><pre class="programlisting">void * xmlNanoFTPConnectTo (const char * server, <br /> int port)<br />
+</pre><p>Tries to open a control connection to the given server/port</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>server</tt></i>:</span></td><td>an FTP server name</td></tr><tr><td><span class="term"><i><tt>port</tt></i>:</span></td><td>the port (use 21 if 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an fTP context or NULL if it failed</td></tr></tbody></table></div><h3><a name="xmlNanoFTPCwd" id="xmlNanoFTPCwd"></a>Function: xmlNanoFTPCwd</h3><pre class="programlisting">int xmlNanoFTPCwd (void * ctx, <br /> char * directory)<br />
+</pre><p>Tries to change the remote directory</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>directory</tt></i>:</span></td><td>a directory on the server</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 1 if CWD worked, 0 if it failed</td></tr></tbody></table></div><h3><a name="xmlNanoFTPDele" id="xmlNanoFTPDele"></a>Function: xmlNanoFTPDele</h3><pre class="programlisting">int xmlNanoFTPDele (void * ctx, <br /> char * file)<br />
+</pre><p>Tries to delete an item (file or directory) from server</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>a file or directory on the server</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 1 if DELE worked, 0 if it failed</td></tr></tbody></table></div><h3><a name="xmlNanoFTPFreeCtxt" id="xmlNanoFTPFreeCtxt"></a>Function: xmlNanoFTPFreeCtxt</h3><pre class="programlisting">void xmlNanoFTPFreeCtxt (void * ctx)<br />
+</pre><p>Frees the context after closing the connection.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr></tbody></table></div><h3><a name="xmlNanoFTPGet" id="xmlNanoFTPGet"></a>Function: xmlNanoFTPGet</h3><pre class="programlisting">int xmlNanoFTPGet (void * ctx, <br /> <a href="libxml-nanoftp.html#ftpDataCallback">ftpDataCallback</a> callback, <br /> void * userData, <br /> const char * filename)<br />
+</pre><p>Fetch the given file from the server. All data are passed back in the callbacks. The last callback has a size of 0 block.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>callback</tt></i>:</span></td><td>the user callback</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>the user callback data</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the file to retrieve</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlNanoFTPGetConnection" id="xmlNanoFTPGetConnection"></a>Function: xmlNanoFTPGetConnection</h3><pre class="programlisting">int xmlNanoFTPGetConnection (void * ctx)<br />
+</pre><p>Try to open a data connection to the server. Currently only passive mode is supported.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlNanoFTPGetResponse" id="xmlNanoFTPGetResponse"></a>Function: xmlNanoFTPGetResponse</h3><pre class="programlisting">int xmlNanoFTPGetResponse (void * ctx)<br />
+</pre><p>Get the response from the FTP server after a command.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the code number</td></tr></tbody></table></div><h3><a name="xmlNanoFTPGetSocket" id="xmlNanoFTPGetSocket"></a>Function: xmlNanoFTPGetSocket</h3><pre class="programlisting">int xmlNanoFTPGetSocket (void * ctx, <br /> const char * filename)<br />
+</pre><p>Initiate fetch of the given file from the server.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the file to retrieve (or NULL if path is in context).</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the socket for the data connection, or &lt;0 in case of error</td></tr></tbody></table></div><h3><a name="xmlNanoFTPInit" id="xmlNanoFTPInit"></a>Function: xmlNanoFTPInit</h3><pre class="programlisting">void xmlNanoFTPInit (void)<br />
+</pre><p>Initialize the FTP protocol layer. Currently it just checks for proxy informations, and get the hostname</p>
+<h3><a name="xmlNanoFTPList" id="xmlNanoFTPList"></a>Function: xmlNanoFTPList</h3><pre class="programlisting">int xmlNanoFTPList (void * ctx, <br /> <a href="libxml-nanoftp.html#ftpListCallback">ftpListCallback</a> callback, <br /> void * userData, <br /> char * filename)<br />
+</pre><p>Do a listing on the server. All files info are passed back in the callbacks.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>callback</tt></i>:</span></td><td>the user callback</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>the user callback data</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>optional files to list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlNanoFTPNewCtxt" id="xmlNanoFTPNewCtxt"></a>Function: xmlNanoFTPNewCtxt</h3><pre class="programlisting">void * xmlNanoFTPNewCtxt (const char * URL)<br />
+</pre><p>Allocate and initialize a new FTP context.</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 used to initialize the context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an FTP context or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlNanoFTPOpen" id="xmlNanoFTPOpen"></a>Function: xmlNanoFTPOpen</h3><pre class="programlisting">void * xmlNanoFTPOpen (const char * URL)<br />
+</pre><p>Start to fetch the given ftp:// resource</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 to the resource</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an FTP context, or NULL</td></tr></tbody></table></div><h3><a name="xmlNanoFTPProxy" id="xmlNanoFTPProxy"></a>Function: xmlNanoFTPProxy</h3><pre class="programlisting">void xmlNanoFTPProxy (const char * host, <br /> int port, <br /> const char * user, <br /> const char * passwd, <br /> int type)<br />
+</pre><p>Setup the FTP proxy informations. This can also be done by using ftp_proxy ftp_proxy_user and ftp_proxy_password environment variables.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>host</tt></i>:</span></td><td>the proxy host name</td></tr><tr><td><span class="term"><i><tt>port</tt></i>:</span></td><td>the proxy port</td></tr><tr><td><span class="term"><i><tt>user</tt></i>:</span></td><td>the proxy user name</td></tr><tr><td><span class="term"><i><tt>passwd</tt></i>:</span></td><td>the proxy password</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the type of proxy 1 for using SITE, 2 for USER a@b</td></tr></tbody></table></div><h3><a name="xmlNanoFTPQuit" id="xmlNanoFTPQuit"></a>Function: xmlNanoFTPQuit</h3><pre class="programlisting">int xmlNanoFTPQuit (void * ctx)<br />
+</pre><p>Send a QUIT command to the server</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP 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="xmlNanoFTPRead" id="xmlNanoFTPRead"></a>Function: xmlNanoFTPRead</h3><pre class="programlisting">int xmlNanoFTPRead (void * ctx, <br /> void * dest, <br /> int len)<br />
+</pre><p>This function tries to read @len bytes from the existing FTP connection and saves them in @dest. This is a blocking call.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the FTP context</td></tr><tr><td><span class="term"><i><tt>dest</tt></i>:</span></td><td>a buffer</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the buffer length</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte read. 0 is an indication of an end of connection. -1 indicates a parameter error.</td></tr></tbody></table></div><h3><a name="xmlNanoFTPScanProxy" id="xmlNanoFTPScanProxy"></a>Function: xmlNanoFTPScanProxy</h3><pre class="programlisting">void xmlNanoFTPScanProxy (const char * URL)<br />
+</pre><p>(Re)Initialize the FTP Proxy context by parsing the URL and finding the protocol host port it indicates. Should be like ftp://myproxy/ or ftp://myproxy:3128/ A NULL URL cleans up proxy informations.</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 proxy URL used to initialize the proxy context</td></tr></tbody></table></div><h3><a name="xmlNanoFTPUpdateURL" id="xmlNanoFTPUpdateURL"></a>Function: xmlNanoFTPUpdateURL</h3><pre class="programlisting">int xmlNanoFTPUpdateURL (void * ctx, <br /> const char * URL)<br />
+</pre><p>Update an FTP context by parsing the URL and finding new path it indicates. If there is an error in the protocol, hostname, port or other information, the error is raised. It indicates a new connection has to be established.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>The URL used to update the context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if Ok, -1 in case of error (other host).</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-nanohttp.html b/doc/html/libxml-nanohttp.html
new file mode 100644
index 0000000..236ce02
--- /dev/null
+++ b/doc/html/libxml-nanohttp.html
@@ -0,0 +1,62 @@
+<?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 nanohttp from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module nanohttp 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-nanoftp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-nanoftp.html">nanoftp</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-parser.html">parser</a></th><td><a accesskey="n" href="libxml-parser.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>minimal HTTP implementation allowing to fetch resources like external subset. </p><h2>Table of Contents</h2><pre class="programlisting">const char * <a href="#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#xmlNanoHTTPCleanup">xmlNanoHTTPCleanup</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlNanoHTTPClose">xmlNanoHTTPClose</a> (void * ctx)</pre>
+<pre class="programlisting">const char * <a href="#xmlNanoHTTPEncoding">xmlNanoHTTPEncoding</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a> (const char * URL, <br /> const char * filename, <br /> char ** contentType)</pre>
+<pre class="programlisting">void <a href="#xmlNanoHTTPInit">xmlNanoHTTPInit</a> (void)</pre>
+<pre class="programlisting">void * <a href="#xmlNanoHTTPMethod">xmlNanoHTTPMethod</a> (const char * URL, <br /> const char * method, <br /> const char * input, <br /> char ** contentType, <br /> const char * headers, <br /> int ilen)</pre>
+<pre class="programlisting">void * <a href="#xmlNanoHTTPMethodRedir">xmlNanoHTTPMethodRedir</a> (const char * URL, <br /> const char * method, <br /> const char * input, <br /> char ** contentType, <br /> char ** redir, <br /> const char * headers, <br /> int ilen)</pre>
+<pre class="programlisting">const char * <a href="#xmlNanoHTTPMimeType">xmlNanoHTTPMimeType</a> (void * ctx)</pre>
+<pre class="programlisting">void * <a href="#xmlNanoHTTPOpen">xmlNanoHTTPOpen</a> (const char * URL, <br /> char ** contentType)</pre>
+<pre class="programlisting">void * <a href="#xmlNanoHTTPOpenRedir">xmlNanoHTTPOpenRedir</a> (const char * URL, <br /> char ** contentType, <br /> char ** redir)</pre>
+<pre class="programlisting">int <a href="#xmlNanoHTTPRead">xmlNanoHTTPRead</a> (void * ctx, <br /> void * dest, <br /> int len)</pre>
+<pre class="programlisting">const char * <a href="#xmlNanoHTTPRedir">xmlNanoHTTPRedir</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a> (void * ctx)</pre>
+<pre class="programlisting">int <a href="#xmlNanoHTTPSave">xmlNanoHTTPSave</a> (void * ctxt, <br /> const char * filename)</pre>
+<pre class="programlisting">void <a href="#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a> (const char * URL)</pre>
+<h2>Description</h2>
+<h3><a name="xmlNanoHTTPAuthHeader" id="xmlNanoHTTPAuthHeader"></a>Function: xmlNanoHTTPAuthHeader</h3><pre class="programlisting">const char * xmlNanoHTTPAuthHeader (void * ctx)<br />
+</pre><p>Get the authentication header of an HTTP context</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the HTTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the stashed value of the WWW-Authenticate or Proxy-Authenticate header.</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPCleanup" id="xmlNanoHTTPCleanup"></a>Function: xmlNanoHTTPCleanup</h3><pre class="programlisting">void xmlNanoHTTPCleanup (void)<br />
+</pre><p>Cleanup the HTTP protocol layer.</p>
+<h3><a name="xmlNanoHTTPClose" id="xmlNanoHTTPClose"></a>Function: xmlNanoHTTPClose</h3><pre class="programlisting">void xmlNanoHTTPClose (void * ctx)<br />
+</pre><p>This function closes an HTTP context, it ends up the connection and free all data related to it.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the HTTP context</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPEncoding" id="xmlNanoHTTPEncoding"></a>Function: xmlNanoHTTPEncoding</h3><pre class="programlisting">const char * xmlNanoHTTPEncoding (void * ctx)<br />
+</pre><p>Provides the specified encoding if specified in the HTTP headers.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the HTTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the specified encoding or NULL if not available</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPFetch" id="xmlNanoHTTPFetch"></a>Function: xmlNanoHTTPFetch</h3><pre class="programlisting">int xmlNanoHTTPFetch (const char * URL, <br /> const char * filename, <br /> char ** contentType)<br />
+</pre><p>This function try to fetch the indicated resource via HTTP GET and save it's content in the 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 URL to load</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename where the content should be saved</td></tr><tr><td><span class="term"><i><tt>contentType</tt></i>:</span></td><td>if available the Content-Type information will be returned at that location</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of failure, 0 incase of success. The contentType, if provided must be freed by the caller</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPInit" id="xmlNanoHTTPInit"></a>Function: xmlNanoHTTPInit</h3><pre class="programlisting">void xmlNanoHTTPInit (void)<br />
+</pre><p>Initialize the HTTP protocol layer. Currently it just checks for proxy informations</p>
+<h3><a name="xmlNanoHTTPMethod" id="xmlNanoHTTPMethod"></a>Function: xmlNanoHTTPMethod</h3><pre class="programlisting">void * xmlNanoHTTPMethod (const char * URL, <br /> const char * method, <br /> const char * input, <br /> char ** contentType, <br /> const char * headers, <br /> int ilen)<br />
+</pre><p>This function try to open a connection to the indicated resource via HTTP using the given @method, adding the given extra headers and the input buffer for the request content.</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 to load</td></tr><tr><td><span class="term"><i><tt>method</tt></i>:</span></td><td>the HTTP method to use</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>the input string if any</td></tr><tr><td><span class="term"><i><tt>contentType</tt></i>:</span></td><td>the Content-Type information IN and OUT</td></tr><tr><td><span class="term"><i><tt>headers</tt></i>:</span></td><td>the extra headers</td></tr><tr><td><span class="term"><i><tt>ilen</tt></i>:</span></td><td>input length</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPMethodRedir" id="xmlNanoHTTPMethodRedir"></a>Function: xmlNanoHTTPMethodRedir</h3><pre class="programlisting">void * xmlNanoHTTPMethodRedir (const char * URL, <br /> const char * method, <br /> const char * input, <br /> char ** contentType, <br /> char ** redir, <br /> const char * headers, <br /> int ilen)<br />
+</pre><p>This function try to open a connection to the indicated resource via HTTP using the given @method, adding the given extra headers and the input buffer for the request content.</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 to load</td></tr><tr><td><span class="term"><i><tt>method</tt></i>:</span></td><td>the HTTP method to use</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>the input string if any</td></tr><tr><td><span class="term"><i><tt>contentType</tt></i>:</span></td><td>the Content-Type information IN and OUT</td></tr><tr><td><span class="term"><i><tt>redir</tt></i>:</span></td><td>the redirected URL OUT</td></tr><tr><td><span class="term"><i><tt>headers</tt></i>:</span></td><td>the extra headers</td></tr><tr><td><span class="term"><i><tt>ilen</tt></i>:</span></td><td>input length</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of failure, otherwise a request handler. The contentType, or redir, if provided must be freed by the caller</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPMimeType" id="xmlNanoHTTPMimeType"></a>Function: xmlNanoHTTPMimeType</h3><pre class="programlisting">const char * xmlNanoHTTPMimeType (void * ctx)<br />
+</pre><p>Provides the specified Mime-Type if specified in the HTTP headers.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the HTTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the specified Mime-Type or NULL if not available</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPOpen" id="xmlNanoHTTPOpen"></a>Function: xmlNanoHTTPOpen</h3><pre class="programlisting">void * xmlNanoHTTPOpen (const char * URL, <br /> char ** contentType)<br />
+</pre><p>This function try to open a connection to the indicated resource via HTTP GET.</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 to load</td></tr><tr><td><span class="term"><i><tt>contentType</tt></i>:</span></td><td>if available the Content-Type information will be returned at that location</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPOpenRedir" id="xmlNanoHTTPOpenRedir"></a>Function: xmlNanoHTTPOpenRedir</h3><pre class="programlisting">void * xmlNanoHTTPOpenRedir (const char * URL, <br /> char ** contentType, <br /> char ** redir)<br />
+</pre><p>This function try to open a connection to the indicated resource via HTTP GET.</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 to load</td></tr><tr><td><span class="term"><i><tt>contentType</tt></i>:</span></td><td>if available the Content-Type information will be returned at that location</td></tr><tr><td><span class="term"><i><tt>redir</tt></i>:</span></td><td>if available the redirected URL will be returned</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPRead" id="xmlNanoHTTPRead"></a>Function: xmlNanoHTTPRead</h3><pre class="programlisting">int xmlNanoHTTPRead (void * ctx, <br /> void * dest, <br /> int len)<br />
+</pre><p>This function tries to read @len bytes from the existing HTTP connection and saves them in @dest. This is a blocking call.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the HTTP context</td></tr><tr><td><span class="term"><i><tt>dest</tt></i>:</span></td><td>a buffer</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the buffer length</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte read. 0 is an indication of an end of connection. -1 indicates a parameter error.</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPRedir" id="xmlNanoHTTPRedir"></a>Function: xmlNanoHTTPRedir</h3><pre class="programlisting">const char * xmlNanoHTTPRedir (void * ctx)<br />
+</pre><p>Provides the specified redirection URL if available from the HTTP header.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the HTTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the specified redirection URL or NULL if not redirected.</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPReturnCode" id="xmlNanoHTTPReturnCode"></a>Function: xmlNanoHTTPReturnCode</h3><pre class="programlisting">int xmlNanoHTTPReturnCode (void * ctx)<br />
+</pre><p>Get the latest HTTP return code received</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the HTTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the HTTP return code for the request.</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPSave" id="xmlNanoHTTPSave"></a>Function: xmlNanoHTTPSave</h3><pre class="programlisting">int xmlNanoHTTPSave (void * ctxt, <br /> const char * filename)<br />
+</pre><p>This function saves the output of the HTTP transaction to a file It closes and free the context at the end</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 HTTP context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename where the content should be saved</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of failure, 0 incase of success.</td></tr></tbody></table></div><h3><a name="xmlNanoHTTPScanProxy" id="xmlNanoHTTPScanProxy"></a>Function: xmlNanoHTTPScanProxy</h3><pre class="programlisting">void xmlNanoHTTPScanProxy (const char * URL)<br />
+</pre><p>(Re)Initialize the HTTP Proxy context by parsing the URL and finding the protocol host port it indicates. Should be like http://myproxy/ or http://myproxy:3128/ A NULL URL cleans up proxy informations.</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 proxy URL used to initialize the proxy context</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-parser.html b/doc/html/libxml-parser.html
new file mode 100644
index 0000000..876fc56
--- /dev/null
+++ b/doc/html/libxml-parser.html
@@ -0,0 +1,499 @@
+<?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 parser from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>
+</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>
+</pre><pre class="programlisting">Structure <a href="#xmlParserNodeInfoSeq">xmlParserNodeInfoSeq</a><br />struct _xmlParserNodeInfoSeq
+</pre><pre class="programlisting">Typedef <a href="libxml-parser.html#xmlParserNodeInfoSeq">xmlParserNodeInfoSeq</a> * <a name="xmlParserNodeInfoSeqPtr" id="xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlParserOption">xmlParserOption</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSAXHandlerV1">xmlSAXHandlerV1</a><br />struct _xmlSAXHandlerV1
+</pre><pre class="programlisting">Typedef <a href="libxml-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> * <a name="xmlSAXHandlerV1Ptr" id="xmlSAXHandlerV1Ptr">xmlSAXHandlerV1Ptr</a>
+</pre><pre class="programlisting">Function type: <a href="#attributeDeclSAXFunc">attributeDeclSAXFunc</a>
+void <a href="#attributeDeclSAXFunc">attributeDeclSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> int type, <br /> int def, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defaultValue, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> tree)
+</pre>
+<pre class="programlisting">Function type: <a href="#attributeSAXFunc">attributeSAXFunc</a>
+void <a href="#attributeSAXFunc">attributeSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)
+</pre>
+<pre class="programlisting">Function type: <a href="#cdataBlockSAXFunc">cdataBlockSAXFunc</a>
+void <a href="#cdataBlockSAXFunc">cdataBlockSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int len)
+</pre>
+<pre class="programlisting">Function type: <a href="#charactersSAXFunc">charactersSAXFunc</a>
+void <a href="#charactersSAXFunc">charactersSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)
+</pre>
+<pre class="programlisting">Function type: <a href="#commentSAXFunc">commentSAXFunc</a>
+void <a href="#commentSAXFunc">commentSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)
+</pre>
+<pre class="programlisting">Function type: <a href="#elementDeclSAXFunc">elementDeclSAXFunc</a>
+void <a href="#elementDeclSAXFunc">elementDeclSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content)
+</pre>
+<pre class="programlisting">Function type: <a href="#endDocumentSAXFunc">endDocumentSAXFunc</a>
+void <a href="#endDocumentSAXFunc">endDocumentSAXFunc</a> (void * ctx)
+</pre>
+<pre class="programlisting">Function type: <a href="#endElementNsSAX2Func">endElementNsSAX2Func</a>
+void <a href="#endElementNsSAX2Func">endElementNsSAX2Func</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)
+</pre>
+<pre class="programlisting">Function type: <a href="#endElementSAXFunc">endElementSAXFunc</a>
+void <a href="#endElementSAXFunc">endElementSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre>
+<pre class="programlisting">Function type: <a href="#entityDeclSAXFunc">entityDeclSAXFunc</a>
+void <a href="#entityDeclSAXFunc">entityDeclSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)
+</pre>
+<pre class="programlisting">Function type: <a href="#errorSAXFunc">errorSAXFunc</a>
+void <a href="#errorSAXFunc">errorSAXFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<pre class="programlisting">Function type: <a href="#externalSubsetSAXFunc">externalSubsetSAXFunc</a>
+void <a href="#externalSubsetSAXFunc">externalSubsetSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)
+</pre>
+<pre class="programlisting">Function type: <a href="#fatalErrorSAXFunc">fatalErrorSAXFunc</a>
+void <a href="#fatalErrorSAXFunc">fatalErrorSAXFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<pre class="programlisting">Function type: <a href="#getEntitySAXFunc">getEntitySAXFunc</a>
+<a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#getEntitySAXFunc">getEntitySAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre>
+<pre class="programlisting">Function type: <a href="#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a>
+<a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre>
+<pre class="programlisting">Function type: <a href="#hasExternalSubsetSAXFunc">hasExternalSubsetSAXFunc</a>
+int <a href="#hasExternalSubsetSAXFunc">hasExternalSubsetSAXFunc</a> (void * ctx)
+</pre>
+<pre class="programlisting">Function type: <a href="#hasInternalSubsetSAXFunc">hasInternalSubsetSAXFunc</a>
+int <a href="#hasInternalSubsetSAXFunc">hasInternalSubsetSAXFunc</a> (void * ctx)
+</pre>
+<pre class="programlisting">Function type: <a href="#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a>
+void <a href="#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)
+</pre>
+<pre class="programlisting">Function type: <a href="#internalSubsetSAXFunc">internalSubsetSAXFunc</a>
+void <a href="#internalSubsetSAXFunc">internalSubsetSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)
+</pre>
+<pre class="programlisting">Function type: <a href="#isStandaloneSAXFunc">isStandaloneSAXFunc</a>
+int <a href="#isStandaloneSAXFunc">isStandaloneSAXFunc</a> (void * ctx)
+</pre>
+<pre class="programlisting">Function type: <a href="#notationDeclSAXFunc">notationDeclSAXFunc</a>
+void <a href="#notationDeclSAXFunc">notationDeclSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)
+</pre>
+<pre class="programlisting">Function type: <a href="#processingInstructionSAXFunc">processingInstructionSAXFunc</a>
+void <a href="#processingInstructionSAXFunc">processingInstructionSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data)
+</pre>
+<pre class="programlisting">Function type: <a href="#referenceSAXFunc">referenceSAXFunc</a>
+void <a href="#referenceSAXFunc">referenceSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre>
+<pre class="programlisting">Function type: <a href="#resolveEntitySAXFunc">resolveEntitySAXFunc</a>
+<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#resolveEntitySAXFunc">resolveEntitySAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)
+</pre>
+<pre class="programlisting">Function type: <a href="#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a>
+void <a href="#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a> (void * ctx, <br /> <a href="libxml-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a> loc)
+</pre>
+<pre class="programlisting">Function type: <a href="#startDocumentSAXFunc">startDocumentSAXFunc</a>
+void <a href="#startDocumentSAXFunc">startDocumentSAXFunc</a> (void * ctx)
+</pre>
+<pre class="programlisting">Function type: <a href="#startElementNsSAX2Func">startElementNsSAX2Func</a>
+void <a href="#startElementNsSAX2Func">startElementNsSAX2Func</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> int nb_namespaces, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces, <br /> int nb_attributes, <br /> int nb_defaulted, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** attributes)
+</pre>
+<pre class="programlisting">Function type: <a href="#startElementSAXFunc">startElementSAXFunc</a>
+void <a href="#startElementSAXFunc">startElementSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** atts)
+</pre>
+<pre class="programlisting">Function type: <a href="#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a>
+void <a href="#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a> (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * notationName)
+</pre>
+<pre class="programlisting">Function type: <a href="#warningSAXFunc">warningSAXFunc</a>
+void <a href="#warningSAXFunc">warningSAXFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<pre class="programlisting">long <a href="#xmlByteConsumed">xmlByteConsumed</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlCleanupParser">xmlCleanupParser</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a> (<a href="libxml-parser.html#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a> seq)</pre>
+<pre class="programlisting">void <a href="#xmlClearParserCtxt">xmlClearParserCtxt</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreateDocParserCtxt">xmlCreateDocParserCtxt</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * chunk, <br /> int size, <br /> const char * filename)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadDoc">xmlCtxtReadDoc</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadFd">xmlCtxtReadFd</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadFile">xmlCtxtReadFile</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * filename, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadIO">xmlCtxtReadIO</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadMemory">xmlCtxtReadMemory</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting">void <a href="#xmlCtxtReset">xmlCtxtReset</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlCtxtResetPush">xmlCtxtResetPush</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * chunk, <br /> int size, <br /> const char * filename, <br /> const char * encoding)</pre>
+<pre class="programlisting">int <a href="#xmlCtxtUseOptions">xmlCtxtUseOptions</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int options)</pre>
+<pre class="programlisting">Function type: <a href="#xmlExternalEntityLoader">xmlExternalEntityLoader</a>
+<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlExternalEntityLoader">xmlExternalEntityLoader</a> (const char * URL, <br /> const char * ID, <br /> <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> context)
+</pre>
+<pre class="programlisting">void <a href="#xmlFreeParserCtxt">xmlFreeParserCtxt</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<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"><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>
+<pre class="programlisting">int <a href="#xmlInitParserCtxt">xmlInitParserCtxt</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a> (int val)</pre>
+<pre class="programlisting">int <a href="#xmlLineNumbersDefault">xmlLineNumbersDefault</a> (int val)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlLoadExternalEntity">xmlLoadExternalEntity</a> (const char * URL, <br /> const char * ID, <br /> <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlNewIOInputStream">xmlNewIOInputStream</a> (<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)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlNewParserCtxt">xmlNewParserCtxt</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> int depth, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * lst)</pre>
+<pre class="programlisting">int <a href="#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> int depth, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * lst, <br /> int recover)</pre>
+<pre class="programlisting">int <a href="#xmlParseChunk">xmlParseChunk</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * chunk, <br /> int size, <br /> int terminate)</pre>
+<pre class="programlisting">int <a href="#xmlParseCtxtExternalEntity">xmlParseCtxtExternalEntity</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URL, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * lst)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlParseDTD">xmlParseDTD</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlParseDoc">xmlParseDoc</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur)</pre>
+<pre class="programlisting">int <a href="#xmlParseDocument">xmlParseDocument</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlParseEntity">xmlParseEntity</a> (const char * filename)</pre>
+<pre class="programlisting">int <a href="#xmlParseExtParsedEnt">xmlParseExtParsedEnt</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlParseExternalEntity">xmlParseExternalEntity</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> int depth, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URL, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * lst)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlParseFile">xmlParseFile</a> (const char * filename)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlParseMemory">xmlParseMemory</a> (const char * buffer, <br /> int size)</pre>
+<pre class="programlisting">void <a href="#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-parser.html#xmlParserNodeInfoPtr">xmlParserNodeInfoPtr</a> info)</pre>
+<pre class="programlisting">const <a href="libxml-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a> * <a href="#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a> (const <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctx, <br /> const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">unsigned long <a href="#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a> (const <a href="libxml-parser.html#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a> seq, <br /> const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">Function type: <a href="#xmlParserInputDeallocate">xmlParserInputDeallocate</a>
+void <a href="#xmlParserInputDeallocate">xmlParserInputDeallocate</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)
+</pre>
+<pre class="programlisting">int <a href="#xmlParserInputGrow">xmlParserInputGrow</a> (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlParserInputRead">xmlParserInputRead</a> (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlPedanticParserDefault">xmlPedanticParserDefault</a> (int val)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlReadDoc">xmlReadDoc</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlReadFd">xmlReadFd</a> (int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlReadFile">xmlReadFile</a> (const char * filename, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlReadIO">xmlReadIO</a> (<a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlReadMemory">xmlReadMemory</a> (const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlRecoverDoc">xmlRecoverDoc</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlRecoverFile">xmlRecoverFile</a> (const char * filename)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlRecoverMemory">xmlRecoverMemory</a> (const char * buffer, <br /> int size)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlSAXParseDTD">xmlSAXParseDTD</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlSAXParseDoc">xmlSAXParseDoc</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> int recovery)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlSAXParseEntity">xmlSAXParseEntity</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * filename)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlSAXParseFile">xmlSAXParseFile</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * filename, <br /> int recovery)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * filename, <br /> int recovery, <br /> void * data)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlSAXParseMemory">xmlSAXParseMemory</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * buffer, <br /> int size, <br /> int recovery)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * buffer, <br /> int size, <br /> int recovery, <br /> void * data)</pre>
+<pre class="programlisting">int <a href="#xmlSAXUserParseFile">xmlSAXUserParseFile</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * filename)</pre>
+<pre class="programlisting">int <a href="#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * buffer, <br /> int size)</pre>
+<pre class="programlisting">void <a href="#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</a> (<a href="libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a> f)</pre>
+<pre class="programlisting">int <a href="#xmlSetFeature">xmlSetFeature</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * name, <br /> void * value)</pre>
+<pre class="programlisting">void <a href="#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * buffer, <br /> const char * filename)</pre>
+<pre class="programlisting">void <a href="#xmlStopParser">xmlStopParser</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a> (int val)</pre>
+<h2>Description</h2>
+<h3><a name="XML_COMPLETE_ATTRS" id="XML_COMPLETE_ATTRS"></a>Macro: XML_COMPLETE_ATTRS</h3><pre>#define XML_COMPLETE_ATTRS</pre><p>Bit in the loadsubset context field to tell to do complete the elements attributes lists with the ones defaulted from the DTDs. Use it to initialize xmlLoadExtDtdDefaultValue.</p>
+<h3><a name="XML_DEFAULT_VERSION" id="XML_DEFAULT_VERSION"></a>Macro: XML_DEFAULT_VERSION</h3><pre>#define XML_DEFAULT_VERSION</pre><p>The default version of XML used: 1.0</p>
+<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 {
+ <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
+ <a name="XML_PARSER_PI" id="XML_PARSER_PI">XML_PARSER_PI</a> = 2 : Within a processing instruction
+ <a name="XML_PARSER_DTD" id="XML_PARSER_DTD">XML_PARSER_DTD</a> = 3 : within some DTD content
+ <a name="XML_PARSER_PROLOG" id="XML_PARSER_PROLOG">XML_PARSER_PROLOG</a> = 4 : Misc* after internal subset
+ <a name="XML_PARSER_COMMENT" id="XML_PARSER_COMMENT">XML_PARSER_COMMENT</a> = 5 : within a <a href="libxml-SAX.html#comment">comment</a>
+ <a name="XML_PARSER_START_TAG" id="XML_PARSER_START_TAG">XML_PARSER_START_TAG</a> = 6 : within a start tag
+ <a name="XML_PARSER_CONTENT" id="XML_PARSER_CONTENT">XML_PARSER_CONTENT</a> = 7 : within the content
+ <a name="XML_PARSER_CDATA_SECTION" id="XML_PARSER_CDATA_SECTION">XML_PARSER_CDATA_SECTION</a> = 8 : within a CDATA section
+ <a name="XML_PARSER_END_TAG" id="XML_PARSER_END_TAG">XML_PARSER_END_TAG</a> = 9 : within a closing tag
+ <a name="XML_PARSER_ENTITY_DECL" id="XML_PARSER_ENTITY_DECL">XML_PARSER_ENTITY_DECL</a> = 10 : within an entity declaration
+ <a name="XML_PARSER_ENTITY_VALUE" id="XML_PARSER_ENTITY_VALUE">XML_PARSER_ENTITY_VALUE</a> = 11 : within an entity value in a decl
+ <a name="XML_PARSER_ATTRIBUTE_VALUE" id="XML_PARSER_ATTRIBUTE_VALUE">XML_PARSER_ATTRIBUTE_VALUE</a> = 12 : within an <a href="libxml-SAX.html#attribute">attribute</a> value
+ <a name="XML_PARSER_SYSTEM_LITERAL" id="XML_PARSER_SYSTEM_LITERAL">XML_PARSER_SYSTEM_LITERAL</a> = 13 : within a SYSTEM value
+ <a name="XML_PARSER_EPILOG" id="XML_PARSER_EPILOG">XML_PARSER_EPILOG</a> = 14 : the Misc* after the last end tag
+ <a name="XML_PARSER_IGNORE" id="XML_PARSER_IGNORE">XML_PARSER_IGNORE</a> = 15 : within an IGNORED section
+ <a name="XML_PARSER_PUBLIC_LITERAL" id="XML_PARSER_PUBLIC_LITERAL">XML_PARSER_PUBLIC_LITERAL</a> = 16 : within a PUBLIC value
+}
+</pre><h3><a name="xmlParserNodeInfo" id="xmlParserNodeInfo">Structure xmlParserNodeInfo</a></h3><pre class="programlisting">Structure xmlParserNodeInfo<br />struct _xmlParserNodeInfo {
+ const struct _xmlNode * node : Position &amp; line # that text that create
+ unsigned long begin_pos
+ unsigned long begin_line
+ unsigned long end_pos
+ unsigned long end_line
+}</pre><h3><a name="xmlParserNodeInfoSeq" id="xmlParserNodeInfoSeq">Structure xmlParserNodeInfoSeq</a></h3><pre class="programlisting">Structure xmlParserNodeInfoSeq<br />struct _xmlParserNodeInfoSeq {
+ unsigned long maximum
+ unsigned long length
+ <a href="libxml-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a> * buffer
+}</pre><h3>Enum <a name="xmlParserOption" id="xmlParserOption">xmlParserOption</a></h3><pre class="programlisting">Enum xmlParserOption {
+ <a name="XML_PARSE_RECOVER" id="XML_PARSE_RECOVER">XML_PARSE_RECOVER</a> = 1 : recover on errors
+ <a name="XML_PARSE_NOENT" id="XML_PARSE_NOENT">XML_PARSE_NOENT</a> = 2 : substitute entities
+ <a name="XML_PARSE_DTDLOAD" id="XML_PARSE_DTDLOAD">XML_PARSE_DTDLOAD</a> = 4 : load the external subset
+ <a name="XML_PARSE_DTDATTR" id="XML_PARSE_DTDATTR">XML_PARSE_DTDATTR</a> = 8 : default DTD attributes
+ <a name="XML_PARSE_DTDVALID" id="XML_PARSE_DTDVALID">XML_PARSE_DTDVALID</a> = 16 : validate with the DTD
+ <a name="XML_PARSE_NOERROR" id="XML_PARSE_NOERROR">XML_PARSE_NOERROR</a> = 32 : suppress error reports
+ <a name="XML_PARSE_NOWARNING" id="XML_PARSE_NOWARNING">XML_PARSE_NOWARNING</a> = 64 : suppress warning reports
+ <a name="XML_PARSE_PEDANTIC" id="XML_PARSE_PEDANTIC">XML_PARSE_PEDANTIC</a> = 128 : pedantic error reporting
+ <a name="XML_PARSE_NOBLANKS" id="XML_PARSE_NOBLANKS">XML_PARSE_NOBLANKS</a> = 256 : remove blank nodes
+ <a name="XML_PARSE_SAX1" id="XML_PARSE_SAX1">XML_PARSE_SAX1</a> = 512 : use the SAX1 interface internally
+ <a name="XML_PARSE_XINCLUDE" id="XML_PARSE_XINCLUDE">XML_PARSE_XINCLUDE</a> = 1024 : Implement XInclude substitition
+ <a name="XML_PARSE_NONET" id="XML_PARSE_NONET">XML_PARSE_NONET</a> = 2048 : Forbid network access
+ <a name="XML_PARSE_NODICT" id="XML_PARSE_NODICT">XML_PARSE_NODICT</a> = 4096 : Do not reuse the context dictionnary
+ <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
+}
+</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
+ <a href="libxml-parser.html#isStandaloneSAXFunc">isStandaloneSAXFunc</a> isStandalone
+ <a href="libxml-parser.html#hasInternalSubsetSAXFunc">hasInternalSubsetSAXFunc</a> hasInternalSubset
+ <a href="libxml-parser.html#hasExternalSubsetSAXFunc">hasExternalSubsetSAXFunc</a> hasExternalSubset
+ <a href="libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a> resolveEntity
+ <a href="libxml-parser.html#getEntitySAXFunc">getEntitySAXFunc</a> getEntity
+ <a href="libxml-parser.html#entityDeclSAXFunc">entityDeclSAXFunc</a> entityDecl
+ <a href="libxml-parser.html#notationDeclSAXFunc">notationDeclSAXFunc</a> notationDecl
+ <a href="libxml-parser.html#attributeDeclSAXFunc">attributeDeclSAXFunc</a> attributeDecl
+ <a href="libxml-parser.html#elementDeclSAXFunc">elementDeclSAXFunc</a> elementDecl
+ <a href="libxml-parser.html#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a> unparsedEntityDecl
+ <a href="libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a> setDocumentLocator
+ <a href="libxml-parser.html#startDocumentSAXFunc">startDocumentSAXFunc</a> startDocument
+ <a href="libxml-parser.html#endDocumentSAXFunc">endDocumentSAXFunc</a> endDocument
+ <a href="libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a> startElement
+ <a href="libxml-parser.html#endElementSAXFunc">endElementSAXFunc</a> endElement
+ <a href="libxml-parser.html#referenceSAXFunc">referenceSAXFunc</a> reference
+ <a href="libxml-parser.html#charactersSAXFunc">charactersSAXFunc</a> characters
+ <a href="libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a> ignorableWhitespace
+ <a href="libxml-parser.html#processingInstructionSAXFunc">processingInstructionSAXFunc</a> processingInstruction
+ <a href="libxml-parser.html#commentSAXFunc">commentSAXFunc</a> comment
+ <a href="libxml-parser.html#warningSAXFunc">warningSAXFunc</a> warning
+ <a href="libxml-parser.html#errorSAXFunc">errorSAXFunc</a> error
+ <a href="libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a> fatalError : unused error() get all the errors
+ <a href="libxml-parser.html#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a> getParameterEntity
+ <a href="libxml-parser.html#cdataBlockSAXFunc">cdataBlockSAXFunc</a> cdataBlock
+ <a href="libxml-parser.html#externalSubsetSAXFunc">externalSubsetSAXFunc</a> externalSubset
+ unsigned int initialized
+}</pre><h3><a name="attributeDeclSAXFunc" id="attributeDeclSAXFunc"></a>Function type: attributeDeclSAXFunc</h3><pre class="programlisting">Function type: attributeDeclSAXFunc
+void attributeDeclSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * fullname, <br /> int type, <br /> int def, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defaultValue, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> tree)
+</pre><p>An <a href="libxml-SAX.html#attribute">attribute</a> definition has been parsed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the name of the element</td></tr><tr><td><span class="term"><i><tt>fullname</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> type</td></tr><tr><td><span class="term"><i><tt>def</tt></i>:</span></td><td>the type of default value</td></tr><tr><td><span class="term"><i><tt>defaultValue</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> default value</td></tr><tr><td><span class="term"><i><tt>tree</tt></i>:</span></td><td>the tree of enumerated value set</td></tr></tbody></table></div><br />
+<h3><a name="attributeSAXFunc" id="attributeSAXFunc"></a>Function type: attributeSAXFunc</h3><pre class="programlisting">Function type: attributeSAXFunc
+void attributeSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)
+</pre><p>Handle an <a href="libxml-SAX.html#attribute">attribute</a> that has been read by the parser. The default handling is to convert the <a href="libxml-SAX.html#attribute">attribute</a> into an DOM subtree and past it in a new <a href="libxml-tree.html#xmlAttr">xmlAttr</a> element added to the element.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The <a href="libxml-SAX.html#attribute">attribute</a> name, including namespace prefix</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>The <a href="libxml-SAX.html#attribute">attribute</a> value</td></tr></tbody></table></div><br />
+<h3><a name="cdataBlockSAXFunc" id="cdataBlockSAXFunc"></a>Function type: cdataBlockSAXFunc</h3><pre class="programlisting">Function type: cdataBlockSAXFunc
+void cdataBlockSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int len)
+</pre><p>Called when a pcdata block has been parsed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>The pcdata content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the block length</td></tr></tbody></table></div><br />
+<h3><a name="charactersSAXFunc" id="charactersSAXFunc"></a>Function type: charactersSAXFunc</h3><pre class="programlisting">Function type: charactersSAXFunc
+void charactersSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)
+</pre><p>Receiving some chars from the parser.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr></tbody></table></div><br />
+<h3><a name="commentSAXFunc" id="commentSAXFunc"></a>Function type: commentSAXFunc</h3><pre class="programlisting">Function type: commentSAXFunc
+void commentSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)
+</pre><p>A <a href="libxml-SAX.html#comment">comment</a> has been parsed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the <a href="libxml-SAX.html#comment">comment</a> content</td></tr></tbody></table></div><br />
+<h3><a name="elementDeclSAXFunc" id="elementDeclSAXFunc"></a>Function type: elementDeclSAXFunc</h3><pre class="programlisting">Function type: elementDeclSAXFunc
+void elementDeclSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content)
+</pre><p>An element definition has been parsed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the element type</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the element value tree</td></tr></tbody></table></div><br />
+<h3><a name="endDocumentSAXFunc" id="endDocumentSAXFunc"></a>Function type: endDocumentSAXFunc</h3><pre class="programlisting">Function type: endDocumentSAXFunc
+void endDocumentSAXFunc (void * ctx)
+</pre><p>Called when the document end has been detected.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr></tbody></table></div><br />
+<h3><a name="endElementNsSAX2Func" id="endElementNsSAX2Func"></a>Function type: endElementNsSAX2Func</h3><pre class="programlisting">Function type: endElementNsSAX2Func
+void endElementNsSAX2Func (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI)
+</pre><p>SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>localname</tt></i>:</span></td><td>the local name of the element</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the element namespace prefix if available</td></tr><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the element namespace name if available</td></tr></tbody></table></div><br />
+<h3><a name="endElementSAXFunc" id="endElementSAXFunc"></a>Function type: endElementSAXFunc</h3><pre class="programlisting">Function type: endElementSAXFunc
+void endElementSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre><p>Called when the end of an element has been detected.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The element name</td></tr></tbody></table></div><br />
+<h3><a name="entityDeclSAXFunc" id="entityDeclSAXFunc"></a>Function type: entityDeclSAXFunc</h3><pre class="programlisting">Function type: entityDeclSAXFunc
+void entityDeclSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)
+</pre><p>An entity definition has been parsed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the entity type</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the entity value (without processing).</td></tr></tbody></table></div><br />
+<h3><a name="errorSAXFunc" id="errorSAXFunc"></a>Function type: errorSAXFunc</h3><pre class="programlisting">Function type: errorSAXFunc
+void errorSAXFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p>Display and format an error messages, callback.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message to display/transmit</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the message display</td></tr></tbody></table></div><br />
+<h3><a name="externalSubsetSAXFunc" id="externalSubsetSAXFunc"></a>Function type: externalSubsetSAXFunc</h3><pre class="programlisting">Function type: externalSubsetSAXFunc
+void externalSubsetSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)
+</pre><p>Callback on external subset declaration.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the root element name</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external ID</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the SYSTEM ID (e.g. filename or URL)</td></tr></tbody></table></div><br />
+<h3><a name="fatalErrorSAXFunc" id="fatalErrorSAXFunc"></a>Function type: fatalErrorSAXFunc</h3><pre class="programlisting">Function type: fatalErrorSAXFunc
+void fatalErrorSAXFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p>Display and format fatal error messages, callback. Note: so far fatalError() SAX callbacks are not used, error() get all the callbacks for errors.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message to display/transmit</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the message display</td></tr></tbody></table></div><br />
+<h3><a name="getEntitySAXFunc" id="getEntitySAXFunc"></a>Function type: getEntitySAXFunc</h3><pre class="programlisting">Function type: getEntitySAXFunc
+<a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> getEntitySAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre><p>Get an entity by name.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> if found.</td></tr></tbody></table></div><br />
+<h3><a name="getParameterEntitySAXFunc" id="getParameterEntitySAXFunc"></a>Function type: getParameterEntitySAXFunc</h3><pre class="programlisting">Function type: getParameterEntitySAXFunc
+<a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> getParameterEntitySAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre><p>Get a parameter entity by name.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> if found.</td></tr></tbody></table></div><br />
+<h3><a name="hasExternalSubsetSAXFunc" id="hasExternalSubsetSAXFunc"></a>Function type: hasExternalSubsetSAXFunc</h3><pre class="programlisting">Function type: hasExternalSubsetSAXFunc
+int hasExternalSubsetSAXFunc (void * ctx)
+</pre><p>Does this document has an external subset?</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true</td></tr></tbody></table></div><br />
+<h3><a name="hasInternalSubsetSAXFunc" id="hasInternalSubsetSAXFunc"></a>Function type: hasInternalSubsetSAXFunc</h3><pre class="programlisting">Function type: hasInternalSubsetSAXFunc
+int hasInternalSubsetSAXFunc (void * ctx)
+</pre><p>Does this document has an internal subset.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true</td></tr></tbody></table></div><br />
+<h3><a name="ignorableWhitespaceSAXFunc" id="ignorableWhitespaceSAXFunc"></a>Function type: ignorableWhitespaceSAXFunc</h3><pre class="programlisting">Function type: ignorableWhitespaceSAXFunc
+void ignorableWhitespaceSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ch, <br /> int len)
+</pre><p>Receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use characters.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>ch</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr></tbody></table></div><br />
+<h3><a name="internalSubsetSAXFunc" id="internalSubsetSAXFunc"></a>Function type: internalSubsetSAXFunc</h3><pre class="programlisting">Function type: internalSubsetSAXFunc
+void internalSubsetSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)
+</pre><p>Callback on internal subset declaration.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the root element name</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external ID</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the SYSTEM ID (e.g. filename or URL)</td></tr></tbody></table></div><br />
+<h3><a name="isStandaloneSAXFunc" id="isStandaloneSAXFunc"></a>Function type: isStandaloneSAXFunc</h3><pre class="programlisting">Function type: isStandaloneSAXFunc
+int isStandaloneSAXFunc (void * ctx)
+</pre><p>Is this document tagged standalone?</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true</td></tr></tbody></table></div><br />
+<h3><a name="notationDeclSAXFunc" id="notationDeclSAXFunc"></a>Function type: notationDeclSAXFunc</h3><pre class="programlisting">Function type: notationDeclSAXFunc
+void notationDeclSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)
+</pre><p>What to do when a notation declaration has been parsed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The name of the notation</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr></tbody></table></div><br />
+<h3><a name="processingInstructionSAXFunc" id="processingInstructionSAXFunc"></a>Function type: processingInstructionSAXFunc</h3><pre class="programlisting">Function type: processingInstructionSAXFunc
+void processingInstructionSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data)
+</pre><p>A processing instruction has been parsed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>the target name</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the PI data's</td></tr></tbody></table></div><br />
+<h3><a name="referenceSAXFunc" id="referenceSAXFunc"></a>Function type: referenceSAXFunc</h3><pre class="programlisting">Function type: referenceSAXFunc
+void referenceSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)
+</pre><p>Called when an entity <a href="libxml-SAX.html#reference">reference</a> is detected.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The entity name</td></tr></tbody></table></div><br />
+<h3><a name="resolveEntitySAXFunc" id="resolveEntitySAXFunc"></a>Function type: resolveEntitySAXFunc</h3><pre class="programlisting">Function type: resolveEntitySAXFunc
+<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> resolveEntitySAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId)
+</pre><p>Callback: The entity loader, to control the loading of external entities, the application can either: - override this resolveEntity() callback in the SAX block - or better use the xmlSetExternalEntityLoader() function to set up it's own entity resolution routine</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> if inlined or NULL for DOM behaviour.</td></tr></tbody></table></div><br />
+<h3><a name="setDocumentLocatorSAXFunc" id="setDocumentLocatorSAXFunc"></a>Function type: setDocumentLocatorSAXFunc</h3><pre class="programlisting">Function type: setDocumentLocatorSAXFunc
+void setDocumentLocatorSAXFunc (void * ctx, <br /> <a href="libxml-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a> loc)
+</pre><p>Receive the document locator at startup, actually xmlDefaultSAXLocator. Everything is available on the context, so this is useless in our case.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>loc</tt></i>:</span></td><td>A SAX Locator</td></tr></tbody></table></div><br />
+<h3><a name="startDocumentSAXFunc" id="startDocumentSAXFunc"></a>Function type: startDocumentSAXFunc</h3><pre class="programlisting">Function type: startDocumentSAXFunc
+void startDocumentSAXFunc (void * ctx)
+</pre><p>Called when the document start being processed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr></tbody></table></div><br />
+<h3><a name="startElementNsSAX2Func" id="startElementNsSAX2Func"></a>Function type: startElementNsSAX2Func</h3><pre class="programlisting">Function type: startElementNsSAX2Func
+void startElementNsSAX2Func (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> int nb_namespaces, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces, <br /> int nb_attributes, <br /> int nb_defaulted, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** attributes)
+</pre><p>SAX2 callback when an element start has been detected by the parser. It provides the namespace informations for the element, as well as the new namespace declarations on the element.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>localname</tt></i>:</span></td><td>the local name of the element</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the element namespace prefix if available</td></tr><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the element namespace name if available</td></tr><tr><td><span class="term"><i><tt>nb_namespaces</tt></i>:</span></td><td>number of namespace definitions on that node</td></tr><tr><td><span class="term"><i><tt>namespaces</tt></i>:</span></td><td>pointer to the array of prefix/URI pairs namespace definitions</td></tr><tr><td><span class="term"><i><tt>nb_attributes</tt></i>:</span></td><td>the number of attributes on that node</td></tr><tr><td><span class="term"><i><tt>nb_defaulted</tt></i>:</span></td><td>the number of defaulted attributes. The defaulted ones are at the end of the array</td></tr><tr><td><span class="term"><i><tt>attributes</tt></i>:</span></td><td>pointer to the array of (localname/prefix/URI/value/end) <a href="libxml-SAX.html#attribute">attribute</a> values.</td></tr></tbody></table></div><br />
+<h3><a name="startElementSAXFunc" id="startElementSAXFunc"></a>Function type: startElementSAXFunc</h3><pre class="programlisting">Function type: startElementSAXFunc
+void startElementSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** atts)
+</pre><p>Called when an opening tag has been processed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The element name, including namespace prefix</td></tr><tr><td><span class="term"><i><tt>atts</tt></i>:</span></td><td>An array of name/value attributes pairs, NULL terminated</td></tr></tbody></table></div><br />
+<h3><a name="unparsedEntityDeclSAXFunc" id="unparsedEntityDeclSAXFunc"></a>Function type: unparsedEntityDeclSAXFunc</h3><pre class="programlisting">Function type: unparsedEntityDeclSAXFunc
+void unparsedEntityDeclSAXFunc (void * ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemId, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * notationName)
+</pre><p>What to do when an unparsed entity declaration is parsed.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the user data (XML parser context)</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>The name of the entity</td></tr><tr><td><span class="term"><i><tt>publicId</tt></i>:</span></td><td>The public ID of the entity</td></tr><tr><td><span class="term"><i><tt>systemId</tt></i>:</span></td><td>The system ID of the entity</td></tr><tr><td><span class="term"><i><tt>notationName</tt></i>:</span></td><td>the name of the notation</td></tr></tbody></table></div><br />
+<h3><a name="warningSAXFunc" id="warningSAXFunc"></a>Function type: warningSAXFunc</h3><pre class="programlisting">Function type: warningSAXFunc
+void warningSAXFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p>Display and format a warning messages, callback.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message to display/transmit</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the message display</td></tr></tbody></table></div><br />
+<h3><a name="xmlByteConsumed" id="xmlByteConsumed"></a>Function: xmlByteConsumed</h3><pre class="programlisting">long xmlByteConsumed (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>This function provides the current index of the parser relative to the start of the current entity. This function is computed in bytes from the beginning starting at zero and finishing at the size in byte of the file if parsing a file. The function is of constant cost if the input is UTF-8 but can be costly if run on non-UTF-8 input.</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>Returns</tt></i>:</span></td><td>the index in bytes from the beginning of the entity or -1 in case the index could not be computed.</td></tr></tbody></table></div><h3><a name="xmlCleanupParser" id="xmlCleanupParser"></a>Function: xmlCleanupParser</h3><pre class="programlisting">void xmlCleanupParser (void)<br />
+</pre><p>Cleanup function for the XML library. It tries to reclaim all parsing related global memory allocated for the library processing. It doesn't deallocate any document related memory. Calling this function should not prevent reusing the library but one should call xmlCleanupParser() only when the process has finished using the library or XML document built with it.</p>
+<h3><a name="xmlClearNodeInfoSeq" id="xmlClearNodeInfoSeq"></a>Function: xmlClearNodeInfoSeq</h3><pre class="programlisting">void xmlClearNodeInfoSeq (<a href="libxml-parser.html#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a> seq)<br />
+</pre><p>-- Clear (release memory and reinitialize) node info sequence</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>seq</tt></i>:</span></td><td>a node info sequence pointer</td></tr></tbody></table></div><h3><a name="xmlClearParserCtxt" id="xmlClearParserCtxt"></a>Function: xmlClearParserCtxt</h3><pre class="programlisting">void xmlClearParserCtxt (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Clear (release owned resources) and reinitialize a 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>an XML parser context</td></tr></tbody></table></div><h3><a name="xmlCreateDocParserCtxt" id="xmlCreateDocParserCtxt"></a>Function: xmlCreateDocParserCtxt</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlCreateDocParserCtxt (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur)<br />
+</pre><p>Creates a parser context for an XML in-memory document.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser context or NULL</td></tr></tbody></table></div><h3><a name="xmlCreateIOParserCtxt" id="xmlCreateIOParserCtxt"></a>Function: xmlCreateIOParserCtxt</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlCreateIOParserCtxt (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a parser context for using the XML parser with an existing I/O stream</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>a SAX handler</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>The user data returned on SAX callbacks</td></tr><tr><td><span class="term"><i><tt>ioread</tt></i>:</span></td><td>an I/O read function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>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 parser context or NULL</td></tr></tbody></table></div><h3><a name="xmlCreatePushParserCtxt" id="xmlCreatePushParserCtxt"></a>Function: xmlCreatePushParserCtxt</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlCreatePushParserCtxt (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * chunk, <br /> int size, <br /> const char * filename)<br />
+</pre><p>Create a parser context for using the XML parser in push mode. If @buffer and @size are non-NULL, the data is used to detect the encoding. The remaining <a href="libxml-SAX.html#characters">characters</a> will be parsed so they don't need to be fed in again through xmlParseChunk. To allow content encoding detection, @size should be &gt;= 4 The value of @filename is used for fetching external entities and error/warning reports.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>a SAX handler</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>The user data returned on SAX callbacks</td></tr><tr><td><span class="term"><i><tt>chunk</tt></i>:</span></td><td>a pointer to an array of chars</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>number of chars in the array</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>an optional file name or URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser context or NULL</td></tr></tbody></table></div><h3><a name="xmlCtxtReadDoc" id="xmlCtxtReadDoc"></a>Function: xmlCtxtReadDoc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlCtxtReadDoc (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML in-memory document and build a tree. This reuses the existing @ctxt 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>an XML parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to a zero terminated string</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlCtxtReadFd" id="xmlCtxtReadFd"></a>Function: xmlCtxtReadFd</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlCtxtReadFd (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML from a file descriptor and build a tree. This reuses the existing @ctxt parser context NOTE that the file descriptor will not be closed when the reader is closed or reset.</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>fd</tt></i>:</span></td><td>an open file descriptor</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlCtxtReadFile" id="xmlCtxtReadFile"></a>Function: xmlCtxtReadFile</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlCtxtReadFile (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * filename, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML file from the filesystem or the network. This reuses the existing @ctxt 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>an XML parser context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file or URL</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlCtxtReadIO" id="xmlCtxtReadIO"></a>Function: xmlCtxtReadIO</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlCtxtReadIO (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML document from I/O functions and source and build a tree. This reuses the existing @ctxt 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>an XML parser context</td></tr><tr><td><span class="term"><i><tt>ioread</tt></i>:</span></td><td>an I/O read function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlCtxtReadMemory" id="xmlCtxtReadMemory"></a>Function: xmlCtxtReadMemory</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlCtxtReadMemory (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML in-memory document and build a tree. This reuses the existing @ctxt 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>an XML parser context</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>a pointer to a char array</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>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlCtxtReset" id="xmlCtxtReset"></a>Function: xmlCtxtReset</h3><pre class="programlisting">void xmlCtxtReset (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Reset a 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>an XML parser context</td></tr></tbody></table></div><h3><a name="xmlCtxtResetPush" id="xmlCtxtResetPush"></a>Function: xmlCtxtResetPush</h3><pre class="programlisting">int xmlCtxtResetPush (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * chunk, <br /> int size, <br /> const char * filename, <br /> const char * encoding)<br />
+</pre><p>Reset a push 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>an XML parser context</td></tr><tr><td><span class="term"><i><tt>chunk</tt></i>:</span></td><td>a pointer to an array of chars</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>number of chars in the array</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>an optional file name or URI</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and 1 in case of error</td></tr></tbody></table></div><h3><a name="xmlCtxtUseOptions" id="xmlCtxtUseOptions"></a>Function: xmlCtxtUseOptions</h3><pre class="programlisting">int xmlCtxtUseOptions (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int options)<br />
+</pre><p>Applies the options to the 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>an XML parser context</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, the set of unknown or unimplemented options in case of error.</td></tr></tbody></table></div><h3><a name="xmlExternalEntityLoader" id="xmlExternalEntityLoader"></a>Function type: xmlExternalEntityLoader</h3><pre class="programlisting">Function type: xmlExternalEntityLoader
+<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlExternalEntityLoader (const char * URL, <br /> const char * ID, <br /> <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> context)
+</pre><p>External entity loaders types.</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 System ID of the resource requested</td></tr><tr><td><span class="term"><i><tt>ID</tt></i>:</span></td><td>The Public ID of the resource requested</td></tr><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>the XML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the entity input parser.</td></tr></tbody></table></div><br />
+<h3><a name="xmlFreeParserCtxt" id="xmlFreeParserCtxt"></a>Function: xmlFreeParserCtxt</h3><pre class="programlisting">void xmlFreeParserCtxt (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Free all the memory used by a parser context. However the parsed document in ctxt-&gt;myDoc is not freed.</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></tbody></table></div><h3><a name="xmlGetExternalEntityLoader" id="xmlGetExternalEntityLoader"></a>Function: xmlGetExternalEntityLoader</h3><pre class="programlisting"><a href="libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a> xmlGetExternalEntityLoader (void)<br />
+</pre><p>Get the default external entity resolver function for the application</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a> function pointer</td></tr></tbody></table></div><h3><a name="xmlGetFeature" id="xmlGetFeature"></a>Function: xmlGetFeature</h3><pre class="programlisting">int xmlGetFeature (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * name, <br /> void * result)<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 />
+</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>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>seq</tt></i>:</span></td><td>a node info sequence pointer</td></tr></tbody></table></div><h3><a name="xmlInitParser" id="xmlInitParser"></a>Function: xmlInitParser</h3><pre class="programlisting">void xmlInitParser (void)<br />
+</pre><p>Initialization function for the XML parser. This is not reentrant. Call once before processing in case of use in multithreaded programs.</p>
+<h3><a name="xmlInitParserCtxt" id="xmlInitParserCtxt"></a>Function: xmlInitParserCtxt</h3><pre class="programlisting">int xmlInitParserCtxt (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Initialize a 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>an XML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlKeepBlanksDefault" id="xmlKeepBlanksDefault"></a>Function: xmlKeepBlanksDefault</h3><pre class="programlisting">int xmlKeepBlanksDefault (int val)<br />
+</pre><p>Set and return the previous value for default blanks text nodes support. The 1.x version of the parser used an heuristic to try to detect ignorable white spaces. As a result the SAX callback was generating xmlSAX2IgnorableWhitespace() callbacks instead of characters() one, and when using the DOM output text nodes containing those blanks were not generated. The 2.x and later version will switch to the XML standard way and ignorableWhitespace() are only generated when running the parser in validating mode and when the current element doesn't allow CDATA or mixed content. This function is provided as a way to force the standard behavior on 1.X libs and to switch back to the old mode for compatibility when running 1.X client code on 2.X . Upgrade of 1.X code should be done by using xmlIsBlankNode() commodity function to detect the "empty" nodes generated. This value also affect autogeneration of indentation when saving code if blanks sections are kept, indentation is not generated.</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="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>
+<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 />
+</pre><p>Allocate and initialize a new parser context.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> or NULL</td></tr></tbody></table></div><h3><a name="xmlParseBalancedChunkMemory" id="xmlParseBalancedChunkMemory"></a>Function: xmlParseBalancedChunkMemory</h3><pre class="programlisting">int xmlParseBalancedChunkMemory (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> int depth, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * lst)<br />
+</pre><p>Parse a well-balanced chunk of an XML document called by the parser The allowed sequence for the Well Balanced Chunk is the one defined by the content production in the XML grammar: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document the chunk pertains to</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>the SAX handler bloc (possibly NULL)</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>The user data returned on SAX callbacks (possibly NULL)</td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>Used for loop detection, use 0</td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>the input string in UTF8 or ISO-Latin (zero terminated)</td></tr><tr><td><span class="term"><i><tt>lst</tt></i>:</span></td><td>the return value for the set of parsed nodes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the chunk is well balanced, -1 in case of args problem and the parser error code otherwise</td></tr></tbody></table></div><h3><a name="xmlParseBalancedChunkMemoryRecover" id="xmlParseBalancedChunkMemoryRecover"></a>Function: xmlParseBalancedChunkMemoryRecover</h3><pre class="programlisting">int xmlParseBalancedChunkMemoryRecover (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> int depth, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * lst, <br /> int recover)<br />
+</pre><p>Parse a well-balanced chunk of an XML document called by the parser The allowed sequence for the Well Balanced Chunk is the one defined by the content production in the XML grammar: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document the chunk pertains to</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>the SAX handler bloc (possibly NULL)</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>The user data returned on SAX callbacks (possibly NULL)</td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>Used for loop detection, use 0</td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>the input string in UTF8 or ISO-Latin (zero terminated)</td></tr><tr><td><span class="term"><i><tt>lst</tt></i>:</span></td><td>the return value for the set of parsed nodes</td></tr><tr><td><span class="term"><i><tt>recover</tt></i>:</span></td><td>return nodes even if the data is broken (use 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the chunk is well balanced, -1 in case of args problem and the parser error code otherwise In case recover is set to 1, the nodelist will not be empty even if the parsed chunk is not well balanced.</td></tr></tbody></table></div><h3><a name="xmlParseChunk" id="xmlParseChunk"></a>Function: xmlParseChunk</h3><pre class="programlisting">int xmlParseChunk (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * chunk, <br /> int size, <br /> int terminate)<br />
+</pre><p>Parse a Chunk of 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>an XML parser context</td></tr><tr><td><span class="term"><i><tt>chunk</tt></i>:</span></td><td>an char array</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size in byte of the chunk</td></tr><tr><td><span class="term"><i><tt>terminate</tt></i>:</span></td><td>last chunk indicator</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>zero if no error, the <a href="libxml-xmlerror.html#xmlParserErrors">xmlParserErrors</a> otherwise.</td></tr></tbody></table></div><h3><a name="xmlParseCtxtExternalEntity" id="xmlParseCtxtExternalEntity"></a>Function: xmlParseCtxtExternalEntity</h3><pre class="programlisting">int xmlParseCtxtExternalEntity (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctx, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URL, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * lst)<br />
+</pre><p>Parse an external general entity within an existing parsing context An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the existing parsing context</td></tr><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 System ID for the entity to load</td></tr><tr><td><span class="term"><i><tt>lst</tt></i>:</span></td><td>the return value for the set of parsed nodes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the entity is well formed, -1 in case of args problem and the parser error code otherwise</td></tr></tbody></table></div><h3><a name="xmlParseDTD" id="xmlParseDTD"></a>Function: xmlParseDTD</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> xmlParseDTD (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>Load and parse an external subset.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>a NAME* containing the External ID of the DTD</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>a NAME* containing the URL to the DTD</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.</td></tr></tbody></table></div><h3><a name="xmlParseDoc" id="xmlParseDoc"></a>Function: xmlParseDoc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlParseDoc (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur)<br />
+</pre><p>parse an XML in-memory document and build a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlParseDocument" id="xmlParseDocument"></a>Function: xmlParseDocument</h3><pre class="programlisting">int xmlParseDocument (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML document (and build a tree if using the standard SAX interface). [1] document ::= prolog element Misc* [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?</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>Returns</tt></i>:</span></td><td>0, -1 in case of error. the parser context is augmented as a result of the parsing.</td></tr></tbody></table></div><h3><a name="xmlParseEntity" id="xmlParseEntity"></a>Function: xmlParseEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlParseEntity (const char * filename)<br />
+</pre><p>parse an XML external entity out of context and build a tree. [78] extParsedEnt ::= TextDecl? content This correspond to a "Well Balanced" chunk</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlParseExtParsedEnt" id="xmlParseExtParsedEnt"></a>Function: xmlParseExtParsedEnt</h3><pre class="programlisting">int xmlParseExtParsedEnt (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse a general parsed entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content</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>Returns</tt></i>:</span></td><td>0, -1 in case of error. the parser context is augmented as a result of the parsing.</td></tr></tbody></table></div><h3><a name="xmlParseExternalEntity" id="xmlParseExternalEntity"></a>Function: xmlParseExternalEntity</h3><pre class="programlisting">int xmlParseExternalEntity (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> int depth, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URL, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * lst)<br />
+</pre><p>Parse an external general entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document the chunk pertains to</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>the SAX handler bloc (possibly NULL)</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>The user data returned on SAX callbacks (possibly NULL)</td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>Used for loop detection, use 0</td></tr><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 System ID for the entity to load</td></tr><tr><td><span class="term"><i><tt>lst</tt></i>:</span></td><td>the return value for the set of parsed nodes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the entity is well formed, -1 in case of args problem and the parser error code otherwise</td></tr></tbody></table></div><h3><a name="xmlParseFile" id="xmlParseFile"></a>Function: xmlParseFile</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlParseFile (const char * filename)<br />
+</pre><p>parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree if the file was wellformed, NULL otherwise.</td></tr></tbody></table></div><h3><a name="xmlParseMemory" id="xmlParseMemory"></a>Function: xmlParseMemory</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlParseMemory (const char * buffer, <br /> int size)<br />
+</pre><p>parse an XML in-memory block and build a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>an pointer to a char array</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 resulting document tree</td></tr></tbody></table></div><h3><a name="xmlParserAddNodeInfo" id="xmlParserAddNodeInfo"></a>Function: xmlParserAddNodeInfo</h3><pre class="programlisting">void xmlParserAddNodeInfo (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-parser.html#xmlParserNodeInfoPtr">xmlParserNodeInfoPtr</a> info)<br />
+</pre><p>Insert node info record into the sorted sequence</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>info</tt></i>:</span></td><td>a node info sequence pointer</td></tr></tbody></table></div><h3><a name="xmlParserFindNodeInfo" id="xmlParserFindNodeInfo"></a>Function: xmlParserFindNodeInfo</h3><pre class="programlisting">const <a href="libxml-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a> * xmlParserFindNodeInfo (const <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctx, <br /> const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Find the parser node info struct for a given node</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>an XML node within the tree</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an <a href="libxml-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a> block pointer or NULL</td></tr></tbody></table></div><h3><a name="xmlParserFindNodeInfoIndex" id="xmlParserFindNodeInfoIndex"></a>Function: xmlParserFindNodeInfoIndex</h3><pre class="programlisting">unsigned long xmlParserFindNodeInfoIndex (const <a href="libxml-parser.html#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a> seq, <br /> const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p><a href="libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a> : Find the index that the info record for the given node is or should be at in a sorted sequence</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>seq</tt></i>:</span></td><td>a node info sequence pointer</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>an XML node pointer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a long indicating the position of the record</td></tr></tbody></table></div><h3><a name="xmlParserInputDeallocate" id="xmlParserInputDeallocate"></a>Function type: xmlParserInputDeallocate</h3><pre class="programlisting">Function type: xmlParserInputDeallocate
+void xmlParserInputDeallocate (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)
+</pre><p>Callback for freeing some parser input allocations.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the string to deallocate</td></tr></tbody></table></div><br />
+<h3><a name="xmlParserInputGrow" id="xmlParserInputGrow"></a>Function: xmlParserInputGrow</h3><pre class="programlisting">int xmlParserInputGrow (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in, <br /> int len)<br />
+</pre><p>This function increase the input for the parser. It tries to preserve pointers to the input buffer, and keep already read data</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity</td></tr></tbody></table></div><h3><a name="xmlParserInputRead" id="xmlParserInputRead"></a>Function: xmlParserInputRead</h3><pre class="programlisting">int xmlParserInputRead (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in, <br /> int len)<br />
+</pre><p>This function refresh the input for the parser. It doesn't try to preserve pointers to the input buffer, and discard already read data</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity</td></tr></tbody></table></div><h3><a name="xmlPedanticParserDefault" id="xmlPedanticParserDefault"></a>Function: xmlPedanticParserDefault</h3><pre class="programlisting">int xmlPedanticParserDefault (int val)<br />
+</pre><p>Set and return the previous value for enabling pedantic warnings.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>int 0 or 1</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the last value for 0 for no substitution, 1 for substitution.</td></tr></tbody></table></div><h3><a name="xmlReadDoc" id="xmlReadDoc"></a>Function: xmlReadDoc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlReadDoc (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML in-memory document and build a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to a zero terminated string</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlReadFd" id="xmlReadFd"></a>Function: xmlReadFd</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlReadFd (int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML from a file descriptor and build a tree. NOTE that the file descriptor will not be closed when the reader is closed or reset.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>fd</tt></i>:</span></td><td>an open file descriptor</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlReadFile" id="xmlReadFile"></a>Function: xmlReadFile</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlReadFile (const char * filename, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML file from the filesystem or the network.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file or URL</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlReadIO" id="xmlReadIO"></a>Function: xmlReadIO</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlReadIO (<a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML document from I/O functions and source and build a tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ioread</tt></i>:</span></td><td>an I/O read function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlReadMemory" id="xmlReadMemory"></a>Function: xmlReadMemory</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlReadMemory (const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML in-memory document and build a tree.</p>
+<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</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>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlRecoverDoc" id="xmlRecoverDoc"></a>Function: xmlRecoverDoc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlRecoverDoc (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur)<br />
+</pre><p>parse an XML in-memory document and build a tree. In the case the document is not Well Formed, a tree is built anyway</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlRecoverFile" id="xmlRecoverFile"></a>Function: xmlRecoverFile</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlRecoverFile (const char * filename)<br />
+</pre><p>parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. In the case the document is not Well Formed, a tree is built anyway</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlRecoverMemory" id="xmlRecoverMemory"></a>Function: xmlRecoverMemory</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlRecoverMemory (const char * buffer, <br /> int size)<br />
+</pre><p>parse an XML in-memory block and build a tree. In the case the document is not Well Formed, a tree is built anyway</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>an pointer to a char array</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 resulting document tree</td></tr></tbody></table></div><h3><a name="xmlSAXParseDTD" id="xmlSAXParseDTD"></a>Function: xmlSAXParseDTD</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> xmlSAXParseDTD (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>Load and parse an external subset.</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</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>a NAME* containing the External ID of the DTD</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>a NAME* containing the URL to the DTD</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.</td></tr></tbody></table></div><h3><a name="xmlSAXParseDoc" id="xmlSAXParseDoc"></a>Function: xmlSAXParseDoc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlSAXParseDoc (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> int recovery)<br />
+</pre><p>parse an XML in-memory document and build a tree. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</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</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>recovery</tt></i>:</span></td><td>work in recovery mode, i.e. tries to read no Well Formed documents</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlSAXParseEntity" id="xmlSAXParseEntity"></a>Function: xmlSAXParseEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlSAXParseEntity (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * filename)<br />
+</pre><p>parse an XML external entity out of context and build a tree. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines. [78] extParsedEnt ::= TextDecl? content This correspond to a "Well Balanced" chunk</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</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlSAXParseFile" id="xmlSAXParseFile"></a>Function: xmlSAXParseFile</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlSAXParseFile (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * filename, <br /> int recovery)<br />
+</pre><p>parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</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</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>recovery</tt></i>:</span></td><td>work in recovery mode, i.e. tries to read no Well Formed documents</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlSAXParseFileWithData" id="xmlSAXParseFileWithData"></a>Function: xmlSAXParseFileWithData</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlSAXParseFileWithData (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * filename, <br /> int recovery, <br /> void * data)<br />
+</pre><p>parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines. User data (void *) is stored within the parser context in the context's _private member, so it is available nearly everywhere in libxml</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</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>recovery</tt></i>:</span></td><td>work in recovery mode, i.e. tries to read no Well Formed documents</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlSAXParseMemory" id="xmlSAXParseMemory"></a>Function: xmlSAXParseMemory</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlSAXParseMemory (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * buffer, <br /> int size, <br /> int recovery)<br />
+</pre><p>parse an XML in-memory block and use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</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</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>an pointer to a char array</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>recovery</tt></i>:</span></td><td>work in recovery mode, i.e. tries to read not Well Formed documents</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlSAXParseMemoryWithData" id="xmlSAXParseMemoryWithData"></a>Function: xmlSAXParseMemoryWithData</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlSAXParseMemoryWithData (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> const char * buffer, <br /> int size, <br /> int recovery, <br /> void * data)<br />
+</pre><p>parse an XML in-memory block and use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines. User data (void *) is stored within the parser context in the context's _private member, so it is available nearly everywhere in libxml</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</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>an pointer to a char array</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>recovery</tt></i>:</span></td><td>work in recovery mode, i.e. tries to read no Well Formed documents</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the userdata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting document tree</td></tr></tbody></table></div><h3><a name="xmlSAXUserParseFile" id="xmlSAXUserParseFile"></a>Function: xmlSAXUserParseFile</h3><pre class="programlisting">int xmlSAXUserParseFile (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * filename)<br />
+</pre><p>parse an XML file and call the given SAX handler routines. Automatic support for ZLIB/Compress compressed document is provided</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>a SAX handler</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>The user data returned on SAX callbacks</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success or a error number otherwise</td></tr></tbody></table></div><h3><a name="xmlSAXUserParseMemory" id="xmlSAXUserParseMemory"></a>Function: xmlSAXUserParseMemory</h3><pre class="programlisting">int xmlSAXUserParseMemory (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data, <br /> const char * buffer, <br /> int size)<br />
+</pre><p>A better SAX parsing routine. parse an XML in-memory buffer and call the given SAX handler routines.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>a SAX handler</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>The user data returned on SAX callbacks</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>an in-memory XML document input</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the length of the XML document in bytes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success or a error number otherwise</td></tr></tbody></table></div><h3><a name="xmlSetExternalEntityLoader" id="xmlSetExternalEntityLoader"></a>Function: xmlSetExternalEntityLoader</h3><pre class="programlisting">void xmlSetExternalEntityLoader (<a href="libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a> f)<br />
+</pre><p>Changes the defaultexternal entity resolver function for the application</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the new entity resolver function</td></tr></tbody></table></div><h3><a name="xmlSetFeature" id="xmlSetFeature"></a>Function: xmlSetFeature</h3><pre class="programlisting">int xmlSetFeature (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * name, <br /> void * value)<br />
+</pre><p>Change 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>value</tt></i>:</span></td><td>pointer to the location of the new value</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="xmlSetupParserForBuffer" id="xmlSetupParserForBuffer"></a>Function: xmlSetupParserForBuffer</h3><pre class="programlisting">void xmlSetupParserForBuffer (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * buffer, <br /> const char * filename)<br />
+</pre><p>Setup the parser context to parse a new buffer; Clears any prior contents from the parser context. The buffer parameter must not be NULL, but the filename parameter can be</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>buffer</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * buffer</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file name</td></tr></tbody></table></div><h3><a name="xmlStopParser" id="xmlStopParser"></a>Function: xmlStopParser</h3><pre class="programlisting">void xmlStopParser (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Blocks further parser processing</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></tbody></table></div><h3><a name="xmlSubstituteEntitiesDefault" id="xmlSubstituteEntitiesDefault"></a>Function: xmlSubstituteEntitiesDefault</h3><pre class="programlisting">int xmlSubstituteEntitiesDefault (int val)<br />
+</pre><p>Set and return the previous value for default entity support. Initially the parser always keep entity references instead of substituting entity values in the output. This function has to be used to change the default parser behavior SAX::substituteEntities() has to be used for changing that on a file by file basis.</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><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-parserInternals.html b/doc/html/libxml-parserInternals.html
new file mode 100644
index 0000000..2af6f2a
--- /dev/null
+++ b/doc/html/libxml-parserInternals.html
@@ -0,0 +1,316 @@
+<?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 parserInternals from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module parserInternals from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-parser.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-parser.html">parser</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-pattern.html">pattern</a></th><td><a accesskey="n" href="libxml-pattern.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module exports a number of internal parsing routines they are not really all intended for applications but can prove useful doing low level processing. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#INPUT_CHUNK">INPUT_CHUNK</a></pre><pre class="programlisting">#define <a href="#IS_BASECHAR">IS_BASECHAR</a></pre><pre class="programlisting">#define <a href="#IS_BLANK">IS_BLANK</a></pre><pre class="programlisting">#define <a href="#IS_BLANK_CH">IS_BLANK_CH</a></pre><pre class="programlisting">#define <a href="#IS_BYTE_CHAR">IS_BYTE_CHAR</a></pre><pre class="programlisting">#define <a href="#IS_CHAR">IS_CHAR</a></pre><pre class="programlisting">#define <a href="#IS_CHAR_CH">IS_CHAR_CH</a></pre><pre class="programlisting">#define <a href="#IS_COMBINING">IS_COMBINING</a></pre><pre class="programlisting">#define <a href="#IS_COMBINING_CH">IS_COMBINING_CH</a></pre><pre class="programlisting">#define <a href="#IS_DIGIT">IS_DIGIT</a></pre><pre class="programlisting">#define <a href="#IS_DIGIT_CH">IS_DIGIT_CH</a></pre><pre class="programlisting">#define <a href="#IS_EXTENDER">IS_EXTENDER</a></pre><pre class="programlisting">#define <a href="#IS_EXTENDER_CH">IS_EXTENDER_CH</a></pre><pre class="programlisting">#define <a href="#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a></pre><pre class="programlisting">#define <a href="#IS_LETTER">IS_LETTER</a></pre><pre class="programlisting">#define <a href="#IS_LETTER_CH">IS_LETTER_CH</a></pre><pre class="programlisting">#define <a href="#IS_PUBIDCHAR">IS_PUBIDCHAR</a></pre><pre class="programlisting">#define <a href="#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a></pre><pre class="programlisting">#define <a href="#MOVETO_ENDTAG">MOVETO_ENDTAG</a></pre><pre class="programlisting">#define <a href="#MOVETO_STARTTAG">MOVETO_STARTTAG</a></pre><pre class="programlisting">#define <a href="#SKIP_EOL">SKIP_EOL</a></pre><pre class="programlisting">#define <a href="#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a></pre><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> <a href="#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a> (const char * filename, <br /> const char * encoding)</pre>
+<pre class="programlisting">void <a href="#htmlInitAutoClose">htmlInitAutoClose</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#inputPop">inputPop</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#inputPush">inputPush</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> value)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#namePop">namePop</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#namePush">namePush</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#nodePop">nodePop</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#nodePush">nodePush</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> value)</pre>
+<pre class="programlisting">int <a href="#xmlCheckLanguageID">xmlCheckLanguageID</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * lang)</pre>
+<pre class="programlisting">int <a href="#xmlCopyChar">xmlCopyChar</a> (int len, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * out, <br /> int val)</pre>
+<pre class="programlisting">int <a href="#xmlCopyCharMultiByte">xmlCopyCharMultiByte</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * out, <br /> int val)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreateEntityParserCtxt">xmlCreateEntityParserCtxt</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URL, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * base)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreateFileParserCtxt">xmlCreateFileParserCtxt</a> (const char * filename)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreateMemoryParserCtxt">xmlCreateMemoryParserCtxt</a> (const char * buffer, <br /> int size)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</a> (const char * filename, <br /> int options)</pre>
+<pre class="programlisting">int <a href="#xmlCurrentChar">xmlCurrentChar</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int * len)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlDecodeEntities">xmlDecodeEntities</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int len, <br /> int what, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end2, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end3)</pre>
+<pre class="programlisting">Function type: <a href="#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a>
+void <a href="#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a> (<a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> ent, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> firstNode, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> lastNode)
+</pre>
+<pre class="programlisting">void <a href="#xmlErrMemory">xmlErrMemory</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * extra)</pre>
+<pre class="programlisting">void <a href="#xmlFreeInputStream">xmlFreeInputStream</a> (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input)</pre>
+<pre class="programlisting">void <a href="#xmlHandleEntity">xmlHandleEntity</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> entity)</pre>
+<pre class="programlisting">int <a href="#xmlIsLetter">xmlIsLetter</a> (int c)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNamespaceParseNCName">xmlNamespaceParseNCName</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNamespaceParseNSDef">xmlNamespaceParseNSDef</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNamespaceParseQName">xmlNamespaceParseQName</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** prefix)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlNewEntityInputStream">xmlNewEntityInputStream</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> entity)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlNewInputFromFile">xmlNewInputFromFile</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * filename)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlNewInputStream">xmlNewInputStream</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlNewStringInputStream">xmlNewStringInputStream</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * buffer)</pre>
+<pre class="programlisting">void <a href="#xmlNextChar">xmlNextChar</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseAttValue">xmlParseAttValue</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseAttribute">xmlParseAttribute</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** value)</pre>
+<pre class="programlisting">void <a href="#xmlParseAttributeListDecl">xmlParseAttributeListDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlParseAttributeType">xmlParseAttributeType</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> * tree)</pre>
+<pre class="programlisting">void <a href="#xmlParseCDSect">xmlParseCDSect</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseCharData">xmlParseCharData</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int cdata)</pre>
+<pre class="programlisting">int <a href="#xmlParseCharRef">xmlParseCharRef</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseComment">xmlParseComment</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseContent">xmlParseContent</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlParseDefaultDecl">xmlParseDefaultDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** value)</pre>
+<pre class="programlisting">void <a href="#xmlParseDocTypeDecl">xmlParseDocTypeDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseElement">xmlParseElement</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> <a href="#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int inputchk)</pre>
+<pre class="programlisting">int <a href="#xmlParseElementContentDecl">xmlParseElementContentDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> * result)</pre>
+<pre class="programlisting">int <a href="#xmlParseElementDecl">xmlParseElementDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> <a href="#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int inputchk)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseEncName">xmlParseEncName</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseEncodingDecl">xmlParseEncodingDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseEndTag">xmlParseEndTag</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseEntityDecl">xmlParseEntityDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlParseEntityRef">xmlParseEntityRef</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseEntityValue">xmlParseEntityValue</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** orig)</pre>
+<pre class="programlisting">int <a href="#xmlParseEnumeratedType">xmlParseEnumeratedType</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> * tree)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> <a href="#xmlParseEnumerationType">xmlParseEnumerationType</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseExternalID">xmlParseExternalID</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** publicID, <br /> int strict)</pre>
+<pre class="programlisting">void <a href="#xmlParseExternalSubset">xmlParseExternalSubset</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting">void <a href="#xmlParseMarkupDecl">xmlParseMarkupDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseMisc">xmlParseMisc</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseName">xmlParseName</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseNamespace">xmlParseNamespace</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseNmtoken">xmlParseNmtoken</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseNotationDecl">xmlParseNotationDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> <a href="#xmlParseNotationType">xmlParseNotationType</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParsePEReference">xmlParsePEReference</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParsePI">xmlParsePI</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParsePITarget">xmlParsePITarget</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParsePubidLiteral">xmlParsePubidLiteral</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseQuotedString">xmlParseQuotedString</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseReference">xmlParseReference</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlParseSDDecl">xmlParseSDDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseStartTag">xmlParseStartTag</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseSystemLiteral">xmlParseSystemLiteral</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseTextDecl">xmlParseTextDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseVersionInfo">xmlParseVersionInfo</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlParseVersionNum">xmlParseVersionNum</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParseXMLDecl">xmlParseXMLDecl</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParserHandlePEReference">xmlParserHandlePEReference</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParserHandleReference">xmlParserHandleReference</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlParserInputShrink">xmlParserInputShrink</a> (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> <a href="#xmlPopInput">xmlPopInput</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlPushInput">xmlPushInput</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlScanName">xmlScanName</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a> (<a href="libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a> func)</pre>
+<pre class="programlisting">int <a href="#xmlSkipBlankChars">xmlSkipBlankChars</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlSplitQName">xmlSplitQName</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** prefix)</pre>
+<pre class="programlisting">int <a href="#xmlStringCurrentChar">xmlStringCurrentChar</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> int * len)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStringDecodeEntities">xmlStringDecodeEntities</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int what, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end2, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end3)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int len, <br /> int what, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end2, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end3)</pre>
+<pre class="programlisting">int <a href="#xmlSwitchEncoding">xmlSwitchEncoding</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting">int <a href="#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler)</pre>
+<pre class="programlisting">int <a href="#xmlSwitchToEncoding">xmlSwitchToEncoding</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler)</pre>
+<h2>Description</h2>
+<h3><a name="INPUT_CHUNK" id="INPUT_CHUNK"></a>Macro: INPUT_CHUNK</h3><pre>#define INPUT_CHUNK</pre><p>The parser tries to always have that amount of input ready. One of the point is providing context when reporting errors.</p>
+<h3><a name="IS_BASECHAR" id="IS_BASECHAR"></a>Macro: IS_BASECHAR</h3><pre>#define IS_BASECHAR</pre><p>Macro to check the following production in the XML spec: [85] BaseChar ::= ... long list see REC ...</p>
+<h3><a name="IS_BLANK" id="IS_BLANK"></a>Macro: IS_BLANK</h3><pre>#define IS_BLANK</pre><p>Macro to check the following production in the XML spec: [3] S ::= (#x20 | #x9 | #xD | #xA)+</p>
+<h3><a name="IS_BLANK_CH" id="IS_BLANK_CH"></a>Macro: IS_BLANK_CH</h3><pre>#define IS_BLANK_CH</pre><p>Behaviour same as <a href="libxml-parserInternals.html#IS_BLANK">IS_BLANK</a></p>
+<h3><a name="IS_BYTE_CHAR" id="IS_BYTE_CHAR"></a>Macro: IS_BYTE_CHAR</h3><pre>#define IS_BYTE_CHAR</pre><p>Macro to check the following production in the XML spec: [2] Char ::= #x9 | #xA | #xD | [#x20...] any byte character in the accepted range</p>
+<h3><a name="IS_CHAR" id="IS_CHAR"></a>Macro: IS_CHAR</h3><pre>#define IS_CHAR</pre><p>Macro to check the following production in the XML spec: [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.</p>
+<h3><a name="IS_CHAR_CH" id="IS_CHAR_CH"></a>Macro: IS_CHAR_CH</h3><pre>#define IS_CHAR_CH</pre><p>Behaves like <a href="libxml-parserInternals.html#IS_CHAR">IS_CHAR</a> on single-byte value</p>
+<h3><a name="IS_COMBINING" id="IS_COMBINING"></a>Macro: IS_COMBINING</h3><pre>#define IS_COMBINING</pre><p>Macro to check the following production in the XML spec: [87] CombiningChar ::= ... long list see REC ...</p>
+<h3><a name="IS_COMBINING_CH" id="IS_COMBINING_CH"></a>Macro: IS_COMBINING_CH</h3><pre>#define IS_COMBINING_CH</pre><p>Always false (all combining chars &gt; 0xff)</p>
+<h3><a name="IS_DIGIT" id="IS_DIGIT"></a>Macro: IS_DIGIT</h3><pre>#define IS_DIGIT</pre><p>Macro to check the following production in the XML spec: [88] Digit ::= ... long list see REC ...</p>
+<h3><a name="IS_DIGIT_CH" id="IS_DIGIT_CH"></a>Macro: IS_DIGIT_CH</h3><pre>#define IS_DIGIT_CH</pre><p>Behaves like <a href="libxml-parserInternals.html#IS_DIGIT">IS_DIGIT</a> but with a single byte argument</p>
+<h3><a name="IS_EXTENDER" id="IS_EXTENDER"></a>Macro: IS_EXTENDER</h3><pre>#define IS_EXTENDER</pre><p>Macro to check the following production in the XML spec: [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]</p>
+<h3><a name="IS_EXTENDER_CH" id="IS_EXTENDER_CH"></a>Macro: IS_EXTENDER_CH</h3><pre>#define IS_EXTENDER_CH</pre><p>Behaves like <a href="libxml-parserInternals.html#IS_EXTENDER">IS_EXTENDER</a> but with a single-byte argument</p>
+<h3><a name="IS_IDEOGRAPHIC" id="IS_IDEOGRAPHIC"></a>Macro: IS_IDEOGRAPHIC</h3><pre>#define IS_IDEOGRAPHIC</pre><p>Macro to check the following production in the XML spec: [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]</p>
+<h3><a name="IS_LETTER" id="IS_LETTER"></a>Macro: IS_LETTER</h3><pre>#define IS_LETTER</pre><p>Macro to check the following production in the XML spec: [84] Letter ::= BaseChar | Ideographic</p>
+<h3><a name="IS_LETTER_CH" id="IS_LETTER_CH"></a>Macro: IS_LETTER_CH</h3><pre>#define IS_LETTER_CH</pre><p>Macro behaves like IS_LETTER, but only check base chars</p>
+<h3><a name="IS_PUBIDCHAR" id="IS_PUBIDCHAR"></a>Macro: IS_PUBIDCHAR</h3><pre>#define IS_PUBIDCHAR</pre><p>Macro to check the following production in the XML spec: [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]</p>
+<h3><a name="IS_PUBIDCHAR_CH" id="IS_PUBIDCHAR_CH"></a>Macro: IS_PUBIDCHAR_CH</h3><pre>#define IS_PUBIDCHAR_CH</pre><p>Same as <a href="libxml-parserInternals.html#IS_PUBIDCHAR">IS_PUBIDCHAR</a> but for single-byte value</p>
+<h3><a name="MOVETO_ENDTAG" id="MOVETO_ENDTAG"></a>Macro: MOVETO_ENDTAG</h3><pre>#define MOVETO_ENDTAG</pre><p>Skips to the next '&gt;' char.</p>
+<h3><a name="MOVETO_STARTTAG" id="MOVETO_STARTTAG"></a>Macro: MOVETO_STARTTAG</h3><pre>#define MOVETO_STARTTAG</pre><p>Skips to the next '&lt;' char.</p>
+<h3><a name="SKIP_EOL" id="SKIP_EOL"></a>Macro: SKIP_EOL</h3><pre>#define SKIP_EOL</pre><p>Skips the end of line chars.</p>
+<h3><a name="XML_MAX_NAMELEN" id="XML_MAX_NAMELEN"></a>Macro: XML_MAX_NAMELEN</h3><pre>#define XML_MAX_NAMELEN</pre><p>Identifiers can be longer, but this will be more costly at runtime.</p>
+<h3><a name="XML_SUBSTITUTE_BOTH" id="XML_SUBSTITUTE_BOTH"></a>Macro: XML_SUBSTITUTE_BOTH</h3><pre>#define XML_SUBSTITUTE_BOTH</pre><p>Both general and parameter entities need to be substituted.</p>
+<h3><a name="XML_SUBSTITUTE_NONE" id="XML_SUBSTITUTE_NONE"></a>Macro: XML_SUBSTITUTE_NONE</h3><pre>#define XML_SUBSTITUTE_NONE</pre><p>If no entities need to be substituted.</p>
+<h3><a name="XML_SUBSTITUTE_PEREF" id="XML_SUBSTITUTE_PEREF"></a>Macro: XML_SUBSTITUTE_PEREF</h3><pre>#define XML_SUBSTITUTE_PEREF</pre><p>Whether parameter entities need to be substituted.</p>
+<h3><a name="XML_SUBSTITUTE_REF" id="XML_SUBSTITUTE_REF"></a>Macro: XML_SUBSTITUTE_REF</h3><pre>#define XML_SUBSTITUTE_REF</pre><p>Whether general entities need to be substituted.</p>
+<h3><a name="htmlCreateFileParserCtxt" id="htmlCreateFileParserCtxt"></a>Function: htmlCreateFileParserCtxt</h3><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> htmlCreateFileParserCtxt (const char * filename, <br /> const char * encoding)<br />
+</pre><p>Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>a free form C string describing the HTML document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser context or NULL</td></tr></tbody></table></div><h3><a name="htmlInitAutoClose" id="htmlInitAutoClose"></a>Function: htmlInitAutoClose</h3><pre class="programlisting">void htmlInitAutoClose (void)<br />
+</pre><p>Initialize the htmlStartCloseIndex for fast lookup of closing tags names. This is not reentrant. Call xmlInitParser() once before processing in case of use in multithreaded programs.</p>
+<h3><a name="inputPop" id="inputPop"></a>Function: inputPop</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> inputPop (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Pops the top parser input from the input stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the input just removed</td></tr></tbody></table></div><h3><a name="inputPush" id="inputPush"></a>Function: inputPush</h3><pre class="programlisting">int inputPush (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> value)<br />
+</pre><p>Pushes a new parser input on top of the input stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the parser input</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of error, the index in the stack otherwise</td></tr></tbody></table></div><h3><a name="namePop" id="namePop"></a>Function: namePop</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namePop (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Pops the top element name from the name stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the name just removed</td></tr></tbody></table></div><h3><a name="namePush" id="namePush"></a>Function: namePush</h3><pre class="programlisting">int namePush (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Pushes a new element name on top of the name stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, the index in the stack otherwise</td></tr></tbody></table></div><h3><a name="nodePop" id="nodePop"></a>Function: nodePop</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> nodePop (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Pops the top element node from the node stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node just removed</td></tr></tbody></table></div><h3><a name="nodePush" id="nodePush"></a>Function: nodePush</h3><pre class="programlisting">int nodePush (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> value)<br />
+</pre><p>Pushes a new element node on top of the node stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the element node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of error, the index in the stack otherwise</td></tr></tbody></table></div><h3><a name="xmlCheckLanguageID" id="xmlCheckLanguageID"></a>Function: xmlCheckLanguageID</h3><pre class="programlisting">int xmlCheckLanguageID (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * lang)<br />
+</pre><p>Checks that the value conforms to the LanguageID production: NOTE: this is somewhat deprecated, those productions were removed from the XML Second edition. [33] LanguageID ::= Langcode ('-' Subcode)* [34] Langcode ::= ISO639Code | IanaCode | UserCode [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z]) [36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+ [37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+ [38] Subcode ::= ([a-z] | [A-Z])+</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>lang</tt></i>:</span></td><td>pointer to the string value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if correct 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlCopyChar" id="xmlCopyChar"></a>Function: xmlCopyChar</h3><pre class="programlisting">int xmlCopyChar (int len, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * out, <br /> int val)<br />
+</pre><p>append the char value in the 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>Ignored, compatibility</td></tr><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the char value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> written</td></tr></tbody></table></div><h3><a name="xmlCopyCharMultiByte" id="xmlCopyCharMultiByte"></a>Function: xmlCopyCharMultiByte</h3><pre class="programlisting">int xmlCopyCharMultiByte (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * out, <br /> int val)<br />
+</pre><p>append the char value in the array</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>pointer to an array of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a></td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the char value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> written</td></tr></tbody></table></div><h3><a name="xmlCreateEntityParserCtxt" id="xmlCreateEntityParserCtxt"></a>Function: xmlCreateEntityParserCtxt</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlCreateEntityParserCtxt (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URL, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * base)<br />
+</pre><p>Create a parser context for an external entity Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</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 entity URL</td></tr><tr><td><span class="term"><i><tt>ID</tt></i>:</span></td><td>the entity PUBLIC ID</td></tr><tr><td><span class="term"><i><tt>base</tt></i>:</span></td><td>a possible base for the target URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser context or NULL</td></tr></tbody></table></div><h3><a name="xmlCreateFileParserCtxt" id="xmlCreateFileParserCtxt"></a>Function: xmlCreateFileParserCtxt</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlCreateFileParserCtxt (const char * filename)<br />
+</pre><p>Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser context or NULL</td></tr></tbody></table></div><h3><a name="xmlCreateMemoryParserCtxt" id="xmlCreateMemoryParserCtxt"></a>Function: xmlCreateMemoryParserCtxt</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlCreateMemoryParserCtxt (const char * buffer, <br /> int size)<br />
+</pre><p>Create a parser context for an XML in-memory document.</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</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 new parser context or NULL</td></tr></tbody></table></div><h3><a name="xmlCreateURLParserCtxt" id="xmlCreateURLParserCtxt"></a>Function: xmlCreateURLParserCtxt</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlCreateURLParserCtxt (const char * filename, <br /> int options)<br />
+</pre><p>Create a parser context for a file or URL content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time and for file accesses</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename or URL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser context or NULL</td></tr></tbody></table></div><h3><a name="xmlCurrentChar" id="xmlCurrentChar"></a>Function: xmlCurrentChar</h3><pre class="programlisting">int xmlCurrentChar (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int * len)<br />
+</pre><p>The current char value, if using UTF-8 this may actually span multiple bytes in the input buffer. Implement the end of line normalization: 2.11 End-of-Line Handling Wherever an external parsed entity or the literal entity value of an internal parsed entity contains either the literal two-character sequence "#xD#xA" or a standalone literal #xD, an XML processor must pass to the application the single character #xA. This behavior can conveniently be produced by normalizing all line breaks to #xA on input, before parsing.)</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 XML parser context</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>pointer to the length of the char read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the current char value and its length</td></tr></tbody></table></div><h3><a name="xmlDecodeEntities" id="xmlDecodeEntities"></a>Function: xmlDecodeEntities</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlDecodeEntities (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int len, <br /> int what, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end2, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end3)<br />
+</pre><p>This function is deprecated, we now always process entities content through <a href="libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a> TODO: remove it in next major release. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';'</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 parser context</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the len to decode (in bytes !), -1 for no size limit</td></tr><tr><td><span class="term"><i><tt>what</tt></i>:</span></td><td>combination of <a href="libxml-parserInternals.html#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a> and <a href="libxml-parserInternals.html#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a></td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>an end marker xmlChar, 0 if none</td></tr><tr><td><span class="term"><i><tt>end2</tt></i>:</span></td><td>an end marker xmlChar, 0 if none</td></tr><tr><td><span class="term"><i><tt>end3</tt></i>:</span></td><td>an end marker xmlChar, 0 if none</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done. The caller must deallocate it !</td></tr></tbody></table></div><h3><a name="xmlEntityReferenceFunc" id="xmlEntityReferenceFunc"></a>Function type: xmlEntityReferenceFunc</h3><pre class="programlisting">Function type: xmlEntityReferenceFunc
+void xmlEntityReferenceFunc (<a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> ent, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> firstNode, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> lastNode)
+</pre><p>Callback function used when one needs to be able to track back the provenance of a chunk of nodes inherited from an entity replacement.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ent</tt></i>:</span></td><td>the entity</td></tr><tr><td><span class="term"><i><tt>firstNode</tt></i>:</span></td><td>the fist node in the chunk</td></tr><tr><td><span class="term"><i><tt>lastNode</tt></i>:</span></td><td>the last nod in the chunk</td></tr></tbody></table></div><br />
+<h3><a name="xmlErrMemory" id="xmlErrMemory"></a>Function: xmlErrMemory</h3><pre class="programlisting">void xmlErrMemory (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * extra)<br />
+</pre><p>Handle a redefinition of <a href="libxml-SAX.html#attribute">attribute</a> error</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>extra</tt></i>:</span></td><td>extra informations</td></tr></tbody></table></div><h3><a name="xmlFreeInputStream" id="xmlFreeInputStream"></a>Function: xmlFreeInputStream</h3><pre class="programlisting">void xmlFreeInputStream (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input)<br />
+</pre><p>Free up an input stream.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a></td></tr></tbody></table></div><h3><a name="xmlHandleEntity" id="xmlHandleEntity"></a>Function: xmlHandleEntity</h3><pre class="programlisting">void xmlHandleEntity (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> entity)<br />
+</pre><p>Default handling of defined entities, when should we define a new input stream ? When do we just handle that as a set of chars ? OBSOLETE: to be removed at some point.</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>entity</tt></i>:</span></td><td>an XML entity pointer.</td></tr></tbody></table></div><h3><a name="xmlIsLetter" id="xmlIsLetter"></a>Function: xmlIsLetter</h3><pre class="programlisting">int xmlIsLetter (int c)<br />
+</pre><p>Check whether the character is allowed by the production [84] Letter ::= BaseChar | Ideographic</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>c</tt></i>:</span></td><td>an unicode character (int)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if not, non-zero otherwise</td></tr></tbody></table></div><h3><a name="xmlNamespaceParseNCName" id="xmlNamespaceParseNCName"></a>Function: xmlNamespaceParseNCName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNamespaceParseNCName (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML namespace name. TODO: this seems not in use anymore, the namespace handling is done on top of the SAX interfaces, i.e. not on raw input. [NS 3] NCName ::= (Letter | '_') (NCNameChar)* [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender</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>Returns</tt></i>:</span></td><td>the namespace name or NULL</td></tr></tbody></table></div><h3><a name="xmlNamespaceParseNSDef" id="xmlNamespaceParseNSDef"></a>Function: xmlNamespaceParseNSDef</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNamespaceParseNSDef (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse a namespace prefix declaration TODO: this seems not in use anymore, the namespace handling is done on top of the SAX interfaces, i.e. not on raw input. [NS 1] NSDef ::= PrefixDef Eq SystemLiteral [NS 2] PrefixDef ::= 'xmlns' (':' NCName)?</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>Returns</tt></i>:</span></td><td>the namespace name</td></tr></tbody></table></div><h3><a name="xmlNamespaceParseQName" id="xmlNamespaceParseQName"></a>Function: xmlNamespaceParseQName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNamespaceParseQName (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** prefix)<br />
+</pre><p>TODO: this seems not in use anymore, the namespace handling is done on top of the SAX interfaces, i.e. not on raw input. parse an XML qualified name [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>ctxt</tt></i>:</span></td><td>an XML parser context</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>the local part, and prefix is updated to get the Prefix if any.</td></tr></tbody></table></div><h3><a name="xmlNewEntityInputStream" id="xmlNewEntityInputStream"></a>Function: xmlNewEntityInputStream</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlNewEntityInputStream (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> entity)<br />
+</pre><p>Create a new input stream based on an <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a></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>entity</tt></i>:</span></td><td>an Entity pointer</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="xmlNewInputFromFile" id="xmlNewInputFromFile"></a>Function: xmlNewInputFromFile</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlNewInputFromFile (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * filename)<br />
+</pre><p>Create a new input stream based on a file or an URL.</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>filename</tt></i>:</span></td><td>the filename to use as entity</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new input stream or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlNewInputStream" id="xmlNewInputStream"></a>Function: xmlNewInputStream</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlNewInputStream (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Create a new input stream structure</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>Returns</tt></i>:</span></td><td>the new input stream or NULL</td></tr></tbody></table></div><h3><a name="xmlNewStringInputStream" id="xmlNewStringInputStream"></a>Function: xmlNewStringInputStream</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlNewStringInputStream (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * buffer)<br />
+</pre><p>Create a new input stream based on a memory buffer.</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>buffer</tt></i>:</span></td><td>an memory buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new input stream</td></tr></tbody></table></div><h3><a name="xmlNextChar" id="xmlNextChar"></a>Function: xmlNextChar</h3><pre class="programlisting">void xmlNextChar (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Skip to the next char input char.</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 XML parser context</td></tr></tbody></table></div><h3><a name="xmlParseAttValue" id="xmlParseAttValue"></a>Function: xmlParseAttValue</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseAttValue (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse a value for an <a href="libxml-SAX.html#attribute">attribute</a> Note: the parser won't do substitution of entities here, this will be handled later in <a href="libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a> [10] AttValue ::= '"' ([^&lt;&amp;"] | Reference)* '"' | "'" ([^&lt;&amp;'] | Reference)* "'" 3.3.3 Attribute-Value Normalization: Before the value of an <a href="libxml-SAX.html#attribute">attribute</a> is passed to the application or checked for validity, the XML processor must normalize it as follows: - a character <a href="libxml-SAX.html#reference">reference</a> is processed by appending the referenced character to the <a href="libxml-SAX.html#attribute">attribute</a> value - an entity <a href="libxml-SAX.html#reference">reference</a> is processed by recursively processing the replacement text of the entity - a whitespace character (#x20, #xD, #xA, #x9) is processed by appending #x20 to the normalized value, except that only a single #x20 is appended for a "#xD#xA" sequence that is part of an external parsed entity or the literal entity value of an internal parsed entity - other <a href="libxml-SAX.html#characters">characters</a> are processed by appending them to the normalized value If the declared value is not CDATA, then the XML processor must further process the normalized <a href="libxml-SAX.html#attribute">attribute</a> value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) <a href="libxml-SAX.html#characters">characters</a> by a single space (#x20) character. All attributes for which no declaration has been read should be treated by a non-validating parser as if declared CDATA.</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>Returns</tt></i>:</span></td><td>the AttValue parsed or NULL. The value has to be freed by the caller.</td></tr></tbody></table></div><h3><a name="xmlParseAttribute" id="xmlParseAttribute"></a>Function: xmlParseAttribute</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseAttribute (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** value)<br />
+</pre><p>parse an <a href="libxml-SAX.html#attribute">attribute</a> [41] Attribute ::= Name Eq AttValue [ WFC: No External Entity References ] Attribute values cannot contain direct or indirect entity references to external entities. [ WFC: No &lt; in Attribute Values ] The replacement text of any entity referred to directly or indirectly in an <a href="libxml-SAX.html#attribute">attribute</a> value (other than "&amp;lt;") must not contain a &lt;. [ VC: Attribute Value Type ] The <a href="libxml-SAX.html#attribute">attribute</a> must have been declared; the value must be of the type declared for it. [25] Eq ::= S? '=' S? With namespace: [NS 11] Attribute ::= QName Eq AttValue Also the case QName == xmlns:??? is handled independently as a namespace definition.</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>value</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** used to store 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>the <a href="libxml-SAX.html#attribute">attribute</a> name, and the value in *value.</td></tr></tbody></table></div><h3><a name="xmlParseAttributeListDecl" id="xmlParseAttributeListDecl"></a>Function: xmlParseAttributeListDecl</h3><pre class="programlisting">void xmlParseAttributeListDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>: parse the Attribute list def for an element [52] AttlistDecl ::= '&lt;!ATTLIST' S Name AttDef* S? '&gt;' [53] AttDef ::= S Name S AttType S DefaultDecl</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></tbody></table></div><h3><a name="xmlParseAttributeType" id="xmlParseAttributeType"></a>Function: xmlParseAttributeType</h3><pre class="programlisting">int xmlParseAttributeType (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> * tree)<br />
+</pre><p>parse the Attribute list def for an element [54] AttType ::= StringType | TokenizedType | EnumeratedType [55] StringType ::= 'CDATA' [56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS' Validity constraints for <a href="libxml-SAX.html#attribute">attribute</a> values syntax are checked in xmlValidateAttributeValue() [ VC: ID ] Values of type ID must match the Name production. A name must not appear more than once in an XML document as a value of this type; i.e., ID values must uniquely identify the elements which bear them. [ VC: One ID per Element Type ] No element type may have more than one ID <a href="libxml-SAX.html#attribute">attribute</a> specified. [ VC: ID Attribute Default ] An ID <a href="libxml-SAX.html#attribute">attribute</a> must have a declared default of #IMPLIED or #REQUIRED. [ VC: IDREF ] Values of type IDREF must match the Name production, and values of type IDREFS must match Names; each IDREF Name must match the value of an ID <a href="libxml-SAX.html#attribute">attribute</a> on some element in the XML document; i.e. IDREF values must match the value of some ID attribute. [ VC: Entity Name ] Values of type ENTITY must match the Name production, values of type ENTITIES must match Names; each Entity Name must match the name of an unparsed entity declared in the DTD. [ VC: Name Token ] Values of type NMTOKEN must match the Nmtoken production; values of type NMTOKENS must match Nmtokens.</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>tree</tt></i>:</span></td><td>the enumeration tree built while parsing</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> type</td></tr></tbody></table></div><h3><a name="xmlParseCDSect" id="xmlParseCDSect"></a>Function: xmlParseCDSect</h3><pre class="programlisting">void xmlParseCDSect (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Parse escaped pure raw content. [18] CDSect ::= CDStart CData CDEnd [19] CDStart ::= '&lt;![CDATA[' [20] Data ::= (Char* - (Char* ']]&gt;' Char*)) [21] CDEnd ::= ']]&gt;'</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></tbody></table></div><h3><a name="xmlParseCharData" id="xmlParseCharData"></a>Function: xmlParseCharData</h3><pre class="programlisting">void xmlParseCharData (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int cdata)<br />
+</pre><p>parse a CharData section. if we are within a CDATA section ']]&gt;' marks an end of section. The right angle bracket (&gt;) may be represented using the string "&amp;gt;", and must, for compatibility, be escaped using "&amp;gt;" or a character <a href="libxml-SAX.html#reference">reference</a> when it appears in the string "]]&gt;" in content, when that string is not marking the end of a CDATA section. [14] CharData ::= [^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)</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>cdata</tt></i>:</span></td><td>int indicating whether we are within a CDATA section</td></tr></tbody></table></div><h3><a name="xmlParseCharRef" id="xmlParseCharRef"></a>Function: xmlParseCharRef</h3><pre class="programlisting">int xmlParseCharRef (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse Reference declarations [66] CharRef ::= '&amp;#' [0-9]+ ';' | '&amp;#x' [0-9a-fA-F]+ ';' [ WFC: Legal Character ] Characters referred to using character references must match the production for Char.</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>Returns</tt></i>:</span></td><td>the value parsed (as an int), 0 in case of error</td></tr></tbody></table></div><h3><a name="xmlParseComment" id="xmlParseComment"></a>Function: xmlParseComment</h3><pre class="programlisting">void xmlParseComment (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Skip an XML (SGML) <a href="libxml-SAX.html#comment">comment</a> &lt;!-- .... --&gt; The spec says that "For compatibility, the string "--" (double-hyphen) must not occur within comments. " [15] Comment ::= '&lt;!--' ((Char - '-') | ('-' (Char - '-')))* '--&gt;'</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></tbody></table></div><h3><a name="xmlParseContent" id="xmlParseContent"></a>Function: xmlParseContent</h3><pre class="programlisting">void xmlParseContent (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Parse a content: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*</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></tbody></table></div><h3><a name="xmlParseDefaultDecl" id="xmlParseDefaultDecl"></a>Function: xmlParseDefaultDecl</h3><pre class="programlisting">int xmlParseDefaultDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** value)<br />
+</pre><p>Parse an <a href="libxml-SAX.html#attribute">attribute</a> default declaration [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue) [ VC: Required Attribute ] if the default declaration is the keyword #REQUIRED, then the <a href="libxml-SAX.html#attribute">attribute</a> must be specified for all elements of the type in the attribute-list declaration. [ VC: Attribute Default Legal ] The declared default value must meet the lexical constraints of the declared <a href="libxml-SAX.html#attribute">attribute</a> type c.f. xmlValidateAttributeDecl() [ VC: Fixed Attribute Default ] if an <a href="libxml-SAX.html#attribute">attribute</a> has a default value declared with the #FIXED keyword, instances of that <a href="libxml-SAX.html#attribute">attribute</a> must match the default value. [ WFC: No &lt; in Attribute Values ] handled in xmlParseAttValue()</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>value</tt></i>:</span></td><td>Receive a possible fixed default value for the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>XML_ATTRIBUTE_NONE, XML_ATTRIBUTE_REQUIRED, <a href="libxml-tree.html#XML_ATTRIBUTE_IMPLIED">XML_ATTRIBUTE_IMPLIED</a> or XML_ATTRIBUTE_FIXED.</td></tr></tbody></table></div><h3><a name="xmlParseDocTypeDecl" id="xmlParseDocTypeDecl"></a>Function: xmlParseDocTypeDecl</h3><pre class="programlisting">void xmlParseDocTypeDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse a DOCTYPE declaration [28] doctypedecl ::= '&lt;!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '&gt;' [ VC: Root Element Type ] The Name in the document type declaration must match the element type of the root element.</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></tbody></table></div><h3><a name="xmlParseElement" id="xmlParseElement"></a>Function: xmlParseElement</h3><pre class="programlisting">void xmlParseElement (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML element, this is highly recursive [39] element ::= EmptyElemTag | STag content ETag [ WFC: Element Type Match ] The Name in an element's end-tag must match the element type in the start-tag.</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></tbody></table></div><h3><a name="xmlParseElementChildrenContentDecl" id="xmlParseElementChildrenContentDecl"></a>Function: xmlParseElementChildrenContentDecl</h3><pre class="programlisting"><a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> xmlParseElementChildrenContentDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int inputchk)<br />
+</pre><p>parse the declaration for a Mixed Element content The leading '(' and spaces have been skipped in <a href="libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a> [47] children ::= (choice | seq) ('?' | '*' | '+')? [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')? [49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')' [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')' [ VC: Proper Group/PE Nesting ] applies to [49] and [50] TODO Parameter-entity replacement text must be properly nested with parenthesized groups. That is to say, if either of the opening or closing parentheses in a choice, seq, or Mixed construct is contained in the replacement text for a parameter entity, both must be contained in the same replacement text. For interoperability, if a parameter-entity <a href="libxml-SAX.html#reference">reference</a> appears in a choice, seq, or Mixed construct, its replacement text should not be empty, and neither the first nor last non-blank character of the replacement text should be a connector (| or ,).</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>inputchk</tt></i>:</span></td><td>the input used for the current entity, needed for boundary checks</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the tree of <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> describing the element hierarchy.</td></tr></tbody></table></div><h3><a name="xmlParseElementContentDecl" id="xmlParseElementContentDecl"></a>Function: xmlParseElementContentDecl</h3><pre class="programlisting">int xmlParseElementContentDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> * result)<br />
+</pre><p>parse the declaration for an Element content either Mixed or Children, the cases EMPTY and ANY are handled directly in <a href="libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a> [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children</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>name</tt></i>:</span></td><td>the name of the element being defined.</td></tr><tr><td><span class="term"><i><tt>result</tt></i>:</span></td><td>the Element Content pointer will be stored here if any</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the type of element content XML_ELEMENT_TYPE_xxx</td></tr></tbody></table></div><h3><a name="xmlParseElementDecl" id="xmlParseElementDecl"></a>Function: xmlParseElementDecl</h3><pre class="programlisting">int xmlParseElementDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an Element declaration. [45] elementdecl ::= '&lt;!ELEMENT' S Name S contentspec S? '&gt;' [ VC: Unique Element Type Declaration ] No element type may be declared more than once</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>Returns</tt></i>:</span></td><td>the type of the element, or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlParseElementMixedContentDecl" id="xmlParseElementMixedContentDecl"></a>Function: xmlParseElementMixedContentDecl</h3><pre class="programlisting"><a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> xmlParseElementMixedContentDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int inputchk)<br />
+</pre><p>parse the declaration for a Mixed Element content The leading '(' and spaces have been skipped in <a href="libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a> [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')' [ VC: Proper Group/PE Nesting ] applies to [51] too (see [49]) [ VC: No Duplicate Types ] The same name must not appear more than once in a single mixed-content declaration.</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>inputchk</tt></i>:</span></td><td>the input used for the current entity, needed for boundary checks</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the list of the <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> describing the element choices</td></tr></tbody></table></div><h3><a name="xmlParseEncName" id="xmlParseEncName"></a>Function: xmlParseEncName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseEncName (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse the XML encoding name [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*</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>Returns</tt></i>:</span></td><td>the encoding name value or NULL</td></tr></tbody></table></div><h3><a name="xmlParseEncodingDecl" id="xmlParseEncodingDecl"></a>Function: xmlParseEncodingDecl</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseEncodingDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse the XML encoding declaration [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'") this setups the conversion filters.</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>Returns</tt></i>:</span></td><td>the encoding value or NULL</td></tr></tbody></table></div><h3><a name="xmlParseEndTag" id="xmlParseEndTag"></a>Function: xmlParseEndTag</h3><pre class="programlisting">void xmlParseEndTag (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an end of tag [42] ETag ::= '&lt;/' Name S? '&gt;' With namespace [NS 9] ETag ::= '&lt;/' QName S? '&gt;'</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></tbody></table></div><h3><a name="xmlParseEntityDecl" id="xmlParseEntityDecl"></a>Function: xmlParseEntityDecl</h3><pre class="programlisting">void xmlParseEntityDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse &lt;!ENTITY declarations [70] EntityDecl ::= GEDecl | PEDecl [71] GEDecl ::= '&lt;!ENTITY' S Name S EntityDef S? '&gt;' [72] PEDecl ::= '&lt;!ENTITY' S '%' S Name S PEDef S? '&gt;' [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?) [74] PEDef ::= EntityValue | ExternalID [76] NDataDecl ::= S 'NDATA' S Name [ VC: Notation Declared ] The Name must match the declared name of a notation.</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></tbody></table></div><h3><a name="xmlParseEntityRef" id="xmlParseEntityRef"></a>Function: xmlParseEntityRef</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlParseEntityRef (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse ENTITY references declarations [68] EntityRef ::= '&amp;' Name ';' [ WFC: Entity Declared ] In a document without any DTD, a document with only an internal DTD subset which contains no parameter entity references, or a document with "standalone='yes'", the Name given in the entity <a href="libxml-SAX.html#reference">reference</a> must match that in an entity declaration, except that well-formed documents need not declare any of the following entities: amp, lt, gt, apos, quot. The declaration of a parameter entity must precede any <a href="libxml-SAX.html#reference">reference</a> to it. Similarly, the declaration of a general entity must precede any <a href="libxml-SAX.html#reference">reference</a> to it which appears in a default value in an attribute-list declaration. Note that if entities are declared in the external subset or in external parameter entities, a non-validating processor is not obligated to read and process their declarations; for such documents, the rule that an entity must be declared is a well-formedness constraint only if standalone='yes'. [ WFC: Parsed Entity ] An entity <a href="libxml-SAX.html#reference">reference</a> must not contain the name of an unparsed entity</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>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> if found, or NULL otherwise.</td></tr></tbody></table></div><h3><a name="xmlParseEntityValue" id="xmlParseEntityValue"></a>Function: xmlParseEntityValue</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseEntityValue (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** orig)<br />
+</pre><p>parse a value for ENTITY declarations [9] EntityValue ::= '"' ([^%&amp;"] | PEReference | Reference)* '"' | "'" ([^%&amp;'] | PEReference | Reference)* "'"</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>orig</tt></i>:</span></td><td>if non-NULL store a copy of the original entity value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the EntityValue parsed with <a href="libxml-SAX.html#reference">reference</a> substituted or NULL</td></tr></tbody></table></div><h3><a name="xmlParseEnumeratedType" id="xmlParseEnumeratedType"></a>Function: xmlParseEnumeratedType</h3><pre class="programlisting">int xmlParseEnumeratedType (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> * tree)<br />
+</pre><p>parse an Enumerated <a href="libxml-SAX.html#attribute">attribute</a> type. [57] EnumeratedType ::= NotationType | Enumeration [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'</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>tree</tt></i>:</span></td><td>the enumeration tree built while parsing</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td><a href="libxml-tree.html#XML_ATTRIBUTE_ENUMERATION">XML_ATTRIBUTE_ENUMERATION</a> or <a href="libxml-tree.html#XML_ATTRIBUTE_NOTATION">XML_ATTRIBUTE_NOTATION</a></td></tr></tbody></table></div><h3><a name="xmlParseEnumerationType" id="xmlParseEnumerationType"></a>Function: xmlParseEnumerationType</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> xmlParseEnumerationType (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an Enumeration <a href="libxml-SAX.html#attribute">attribute</a> type. [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' [ VC: Enumeration ] Values of this type must match one of the Nmtoken tokens in the declaration</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>Returns</tt></i>:</span></td><td>the enumeration <a href="libxml-SAX.html#attribute">attribute</a> tree built while parsing</td></tr></tbody></table></div><h3><a name="xmlParseExternalID" id="xmlParseExternalID"></a>Function: xmlParseExternalID</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseExternalID (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** publicID, <br /> int strict)<br />
+</pre><p>Parse an External ID or a Public ID NOTE: Productions [75] and [83] interact badly since [75] can generate 'PUBLIC' S PubidLiteral S SystemLiteral [75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral [83] PublicID ::= 'PUBLIC' S PubidLiteral</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>publicID</tt></i>:</span></td><td>a xmlChar** receiving PubidLiteral</td></tr><tr><td><span class="term"><i><tt>strict</tt></i>:</span></td><td>indicate whether we should restrict parsing to only production [75], see NOTE below</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the function returns SystemLiteral and in the second case publicID receives PubidLiteral, is strict is off it is possible to return NULL and have publicID set.</td></tr></tbody></table></div><h3><a name="xmlParseExternalSubset" id="xmlParseExternalSubset"></a>Function: xmlParseExternalSubset</h3><pre class="programlisting">void xmlParseExternalSubset (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>parse Markup declarations from an external subset [30] extSubset ::= textDecl? extSubsetDecl [31] extSubsetDecl ::= (markupdecl | conditionalSect | PEReference | S) *</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>ExternalID</tt></i>:</span></td><td>the external identifier</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the system identifier (or URL)</td></tr></tbody></table></div><h3><a name="xmlParseMarkupDecl" id="xmlParseMarkupDecl"></a>Function: xmlParseMarkupDecl</h3><pre class="programlisting">void xmlParseMarkupDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse Markup declarations [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment [ VC: Proper Declaration/PE Nesting ] Parameter-entity replacement text must be properly nested with markup declarations. That is to say, if either the first character or the last character of a markup declaration (markupdecl above) is contained in the replacement text for a parameter-entity reference, both must be contained in the same replacement text. [ WFC: PEs in Internal Subset ] In the internal DTD subset, parameter-entity references can occur only where markup declarations can occur, not within markup declarations. (This does not apply to references that occur in external parameter entities or to the external subset.)</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></tbody></table></div><h3><a name="xmlParseMisc" id="xmlParseMisc"></a>Function: xmlParseMisc</h3><pre class="programlisting">void xmlParseMisc (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML Misc* optional field. [27] Misc ::= Comment | PI | S</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></tbody></table></div><h3><a name="xmlParseName" id="xmlParseName"></a>Function: xmlParseName</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseName (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML name. [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* [6] Names ::= Name (S Name)*</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>Returns</tt></i>:</span></td><td>the Name parsed or NULL</td></tr></tbody></table></div><h3><a name="xmlParseNamespace" id="xmlParseNamespace"></a>Function: xmlParseNamespace</h3><pre class="programlisting">void xmlParseNamespace (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>xmlParseNamespace: parse specific PI '&lt;?namespace ...' constructs. This is what the older xml-name Working Draft specified, a bunch of other stuff may still rely on it, so support is still here as if it was declared on the root of the Tree:-( TODO: remove from library To be removed at next drop of binary compatibility</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></tbody></table></div><h3><a name="xmlParseNmtoken" id="xmlParseNmtoken"></a>Function: xmlParseNmtoken</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseNmtoken (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML Nmtoken. [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (S Nmtoken)*</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>Returns</tt></i>:</span></td><td>the Nmtoken parsed or NULL</td></tr></tbody></table></div><h3><a name="xmlParseNotationDecl" id="xmlParseNotationDecl"></a>Function: xmlParseNotationDecl</h3><pre class="programlisting">void xmlParseNotationDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse a notation declaration [82] NotationDecl ::= '&lt;!NOTATION' S Name S (ExternalID | PublicID) S? '&gt;' Hence there is actually 3 choices: 'PUBLIC' S PubidLiteral 'PUBLIC' S PubidLiteral S SystemLiteral and 'SYSTEM' S SystemLiteral See the NOTE on xmlParseExternalID().</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></tbody></table></div><h3><a name="xmlParseNotationType" id="xmlParseNotationType"></a>Function: xmlParseNotationType</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> xmlParseNotationType (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an Notation <a href="libxml-SAX.html#attribute">attribute</a> type. Note: the leading 'NOTATION' S part has already being parsed... [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' [ VC: Notation Attributes ] Values of this type must match one of the notation names included in the declaration; all notation names in the declaration must be declared.</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>Returns</tt></i>:</span></td><td>the notation <a href="libxml-SAX.html#attribute">attribute</a> tree built while parsing</td></tr></tbody></table></div><h3><a name="xmlParsePEReference" id="xmlParsePEReference"></a>Function: xmlParsePEReference</h3><pre class="programlisting">void xmlParsePEReference (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse PEReference declarations The entity content is handled directly by pushing it's content as a new input stream. [69] PEReference ::= '%' Name ';' [ WFC: No Recursion ] A parsed entity must not contain a recursive <a href="libxml-SAX.html#reference">reference</a> to itself, either directly or indirectly. [ WFC: Entity Declared ] In a document without any DTD, a document with only an internal DTD subset which contains no parameter entity references, or a document with "standalone='yes'", ... ... The declaration of a parameter entity must precede any <a href="libxml-SAX.html#reference">reference</a> to it... [ VC: Entity Declared ] In a document with an external subset or external parameter entities with "standalone='no'", ... ... The declaration of a parameter entity must precede any <a href="libxml-SAX.html#reference">reference</a> to it... [ WFC: In DTD ] Parameter-entity references may only appear in the DTD. NOTE: misleading but this is handled.</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></tbody></table></div><h3><a name="xmlParsePI" id="xmlParsePI"></a>Function: xmlParsePI</h3><pre class="programlisting">void xmlParsePI (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML Processing Instruction. [16] PI ::= '&lt;?' PITarget (S (Char* - (Char* '?&gt;' Char*)))? '?&gt;' The processing is transfered to SAX once parsed.</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></tbody></table></div><h3><a name="xmlParsePITarget" id="xmlParsePITarget"></a>Function: xmlParsePITarget</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParsePITarget (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse the name of a PI [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))</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>Returns</tt></i>:</span></td><td>the PITarget name or NULL</td></tr></tbody></table></div><h3><a name="xmlParsePubidLiteral" id="xmlParsePubidLiteral"></a>Function: xmlParsePubidLiteral</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParsePubidLiteral (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML public literal [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"</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>Returns</tt></i>:</span></td><td>the PubidLiteral parsed or NULL.</td></tr></tbody></table></div><h3><a name="xmlParseQuotedString" id="xmlParseQuotedString"></a>Function: xmlParseQuotedString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseQuotedString (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Parse and return a string between quotes or doublequotes TODO: Deprecated, to be removed at next drop of binary compatibility</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>Returns</tt></i>:</span></td><td>the string parser or NULL.</td></tr></tbody></table></div><h3><a name="xmlParseReference" id="xmlParseReference"></a>Function: xmlParseReference</h3><pre class="programlisting">void xmlParseReference (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse and handle entity references in content, depending on the SAX interface, this may end-up in a call to character() if this is a CharRef, a predefined entity, if there is no reference() callback. or if the parser was asked to switch to that mode. [67] Reference ::= EntityRef | CharRef</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></tbody></table></div><h3><a name="xmlParseSDDecl" id="xmlParseSDDecl"></a>Function: xmlParseSDDecl</h3><pre class="programlisting">int xmlParseSDDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse the XML standalone declaration [32] SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no')'"')) [ VC: Standalone Document Declaration ] TODO The standalone document declaration must have the value "no" if any external markup declarations contain declarations of: - attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or - entities (other than amp, lt, gt, apos, quot), if references to those entities appear in the document, or - attributes with values subject to normalization, where the <a href="libxml-SAX.html#attribute">attribute</a> appears in the document with a value which will change as a result of normalization, or - element types with element content, if white space occurs directly within any instance of those types.</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>Returns</tt></i>:</span></td><td>1 if standalone, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlParseStartTag" id="xmlParseStartTag"></a>Function: xmlParseStartTag</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseStartTag (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse a start of tag either for rule element or EmptyElement. In both case we don't parse the tag closing chars. [40] STag ::= '&lt;' Name (S Attribute)* S? '&gt;' [ WFC: Unique Att Spec ] No <a href="libxml-SAX.html#attribute">attribute</a> name may appear more than once in the same start-tag or empty-element tag. [44] EmptyElemTag ::= '&lt;' Name (S Attribute)* S? '/&gt;' [ WFC: Unique Att Spec ] No <a href="libxml-SAX.html#attribute">attribute</a> name may appear more than once in the same start-tag or empty-element tag. With namespace: [NS 8] STag ::= '&lt;' QName (S Attribute)* S? '&gt;' [NS 10] EmptyElement ::= '&lt;' QName (S Attribute)* S? '/&gt;'</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>Returns</tt></i>:</span></td><td>the element name parsed</td></tr></tbody></table></div><h3><a name="xmlParseSystemLiteral" id="xmlParseSystemLiteral"></a>Function: xmlParseSystemLiteral</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseSystemLiteral (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML Literal [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")</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>Returns</tt></i>:</span></td><td>the SystemLiteral parsed or NULL</td></tr></tbody></table></div><h3><a name="xmlParseTextDecl" id="xmlParseTextDecl"></a>Function: xmlParseTextDecl</h3><pre class="programlisting">void xmlParseTextDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML declaration header for external entities [77] TextDecl ::= '&lt;?xml' VersionInfo? EncodingDecl S? '?&gt;' Question: Seems that EncodingDecl is mandatory ? Is that a typo ?</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></tbody></table></div><h3><a name="xmlParseVersionInfo" id="xmlParseVersionInfo"></a>Function: xmlParseVersionInfo</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseVersionInfo (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse the XML version. [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ") [25] Eq ::= S? '=' S?</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>Returns</tt></i>:</span></td><td>the version string, e.g. "1.0"</td></tr></tbody></table></div><h3><a name="xmlParseVersionNum" id="xmlParseVersionNum"></a>Function: xmlParseVersionNum</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlParseVersionNum (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse the XML version value. [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+</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>Returns</tt></i>:</span></td><td>the string giving the XML version number, or NULL</td></tr></tbody></table></div><h3><a name="xmlParseXMLDecl" id="xmlParseXMLDecl"></a>Function: xmlParseXMLDecl</h3><pre class="programlisting">void xmlParseXMLDecl (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse an XML declaration header [23] XMLDecl ::= '&lt;?xml' VersionInfo EncodingDecl? SDDecl? S? '?&gt;'</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></tbody></table></div><h3><a name="xmlParserHandlePEReference" id="xmlParserHandlePEReference"></a>Function: xmlParserHandlePEReference</h3><pre class="programlisting">void xmlParserHandlePEReference (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>[69] PEReference ::= '%' Name ';' [ WFC: No Recursion ] A parsed entity must not contain a recursive <a href="libxml-SAX.html#reference">reference</a> to itself, either directly or indirectly. [ WFC: Entity Declared ] In a document without any DTD, a document with only an internal DTD subset which contains no parameter entity references, or a document with "standalone='yes'", ... ... The declaration of a parameter entity must precede any <a href="libxml-SAX.html#reference">reference</a> to it... [ VC: Entity Declared ] In a document with an external subset or external parameter entities with "standalone='no'", ... ... The declaration of a parameter entity must precede any <a href="libxml-SAX.html#reference">reference</a> to it... [ WFC: In DTD ] Parameter-entity references may only appear in the DTD. NOTE: misleading but this is handled. A PEReference may have been detected in the current input stream the handling is done accordingly to http://www.w3.org/TR/REC-xml#entproc i.e. - Included in literal in entity values - Included as Parameter Entity <a href="libxml-SAX.html#reference">reference</a> within DTDs</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 parser context</td></tr></tbody></table></div><h3><a name="xmlParserHandleReference" id="xmlParserHandleReference"></a>Function: xmlParserHandleReference</h3><pre class="programlisting">void xmlParserHandleReference (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>TODO: Remove, now deprecated ... the test is done directly in the content parsing routines. [67] Reference ::= EntityRef | CharRef [68] EntityRef ::= '&amp;' Name ';' [ WFC: Entity Declared ] the Name given in the entity <a href="libxml-SAX.html#reference">reference</a> must match that in an entity declaration, except that well-formed documents need not declare any of the following entities: amp, lt, gt, apos, quot. [ WFC: Parsed Entity ] An entity <a href="libxml-SAX.html#reference">reference</a> must not contain the name of an unparsed entity [66] CharRef ::= '&amp;#' [0-9]+ ';' | '&amp;#x' [0-9a-fA-F]+ ';' A PEReference may have been detected in the current input stream the handling is done accordingly to http://www.w3.org/TR/REC-xml#entproc</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 parser context</td></tr></tbody></table></div><h3><a name="xmlParserInputShrink" id="xmlParserInputShrink"></a>Function: xmlParserInputShrink</h3><pre class="programlisting">void xmlParserInputShrink (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in)<br />
+</pre><p>This function removes used input for the parser.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr></tbody></table></div><h3><a name="xmlPopInput" id="xmlPopInput"></a>Function: xmlPopInput</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> xmlPopInput (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>xmlPopInput: the current input pointed by ctxt-&gt;input came to an end pop it and return the next char.</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>Returns</tt></i>:</span></td><td>the current <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> in the parser context</td></tr></tbody></table></div><h3><a name="xmlPushInput" id="xmlPushInput"></a>Function: xmlPushInput</h3><pre class="programlisting">void xmlPushInput (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input)<br />
+</pre><p>xmlPushInput: switch to a new input stream which is stacked on top of the previous one(s).</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 XML parser input fragment (entity, XML fragment ...).</td></tr></tbody></table></div><h3><a name="xmlScanName" id="xmlScanName"></a>Function: xmlScanName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlScanName (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>Trickery: parse an XML name but without consuming the input flow Needed for rollback cases. Used only when parsing entities references. TODO: seems deprecated now, only used in the default part of <a href="libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a> [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* [6] Names ::= Name (S Name)*</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>Returns</tt></i>:</span></td><td>the Name parsed or NULL</td></tr></tbody></table></div><h3><a name="xmlSetEntityReferenceFunc" id="xmlSetEntityReferenceFunc"></a>Function: xmlSetEntityReferenceFunc</h3><pre class="programlisting">void xmlSetEntityReferenceFunc (<a href="libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a> func)<br />
+</pre><p>Set the function to call call back when a xml <a href="libxml-SAX.html#reference">reference</a> has been made</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>func</tt></i>:</span></td><td>A valid function</td></tr></tbody></table></div><h3><a name="xmlSkipBlankChars" id="xmlSkipBlankChars"></a>Function: xmlSkipBlankChars</h3><pre class="programlisting">int xmlSkipBlankChars (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>skip all blanks character found at that point in the input streams. It pops up finished entities in the process if allowable at that point.</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 XML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of space chars skipped</td></tr></tbody></table></div><h3><a name="xmlSplitQName" id="xmlSplitQName"></a>Function: xmlSplitQName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlSplitQName (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** prefix)<br />
+</pre><p>parse an UTF8 encoded 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>ctxt</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>an XML parser context</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>the local part, and prefix is updated to get the Prefix if any.</td></tr></tbody></table></div><h3><a name="xmlStringCurrentChar" id="xmlStringCurrentChar"></a>Function: xmlStringCurrentChar</h3><pre class="programlisting">int xmlStringCurrentChar (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> int * len)<br />
+</pre><p>The current char value, if using UTF-8 this may actually span multiple bytes in the input buffer.</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 XML parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>pointer to the beginning of the char</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>pointer to the length of the char read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the current char value and its length</td></tr></tbody></table></div><h3><a name="xmlStringDecodeEntities" id="xmlStringDecodeEntities"></a>Function: xmlStringDecodeEntities</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStringDecodeEntities (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int what, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end2, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end3)<br />
+</pre><p>Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';'</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 parser context</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the input string</td></tr><tr><td><span class="term"><i><tt>what</tt></i>:</span></td><td>combination of <a href="libxml-parserInternals.html#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a> and <a href="libxml-parserInternals.html#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a></td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>an end marker xmlChar, 0 if none</td></tr><tr><td><span class="term"><i><tt>end2</tt></i>:</span></td><td>an end marker xmlChar, 0 if none</td></tr><tr><td><span class="term"><i><tt>end3</tt></i>:</span></td><td>an end marker xmlChar, 0 if none</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done. The caller must deallocate it !</td></tr></tbody></table></div><h3><a name="xmlStringLenDecodeEntities" id="xmlStringLenDecodeEntities"></a>Function: xmlStringLenDecodeEntities</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStringLenDecodeEntities (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int len, <br /> int what, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end2, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> end3)<br />
+</pre><p>Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';'</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 parser context</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the input string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the string length</td></tr><tr><td><span class="term"><i><tt>what</tt></i>:</span></td><td>combination of <a href="libxml-parserInternals.html#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a> and <a href="libxml-parserInternals.html#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a></td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>an end marker xmlChar, 0 if none</td></tr><tr><td><span class="term"><i><tt>end2</tt></i>:</span></td><td>an end marker xmlChar, 0 if none</td></tr><tr><td><span class="term"><i><tt>end3</tt></i>:</span></td><td>an end marker xmlChar, 0 if none</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done. The caller must deallocate it !</td></tr></tbody></table></div><h3><a name="xmlSwitchEncoding" id="xmlSwitchEncoding"></a>Function: xmlSwitchEncoding</h3><pre class="programlisting">int xmlSwitchEncoding (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>change the input functions when discovering the character encoding of a given entity.</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 parser context</td></tr><tr><td><span class="term"><i><tt>enc</tt></i>:</span></td><td>the encoding value (number)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlSwitchInputEncoding" id="xmlSwitchInputEncoding"></a>Function: xmlSwitchInputEncoding</h3><pre class="programlisting">int xmlSwitchInputEncoding (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler)<br />
+</pre><p>change the input functions when discovering the character encoding of a given entity.</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 parser context</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>the input stream</td></tr><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the encoding handler</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlSwitchToEncoding" id="xmlSwitchToEncoding"></a>Function: xmlSwitchToEncoding</h3><pre class="programlisting">int xmlSwitchToEncoding (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler)<br />
+</pre><p>change the input functions when discovering the character encoding of a given entity.</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 parser context</td></tr><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the encoding handler</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 otherwise</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-pattern.html b/doc/html/libxml-pattern.html
new file mode 100644
index 0000000..6c06a93
--- /dev/null
+++ b/doc/html/libxml-pattern.html
@@ -0,0 +1,31 @@
+<?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 pattern from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module pattern 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-parserInternals.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-parserInternals.html">parserInternals</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-relaxng.html">relaxng</a></th><td><a accesskey="n" href="libxml-relaxng.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>allows to compile and test pattern expressions for nodes either in a tree or based on a parser state. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlPattern">xmlPattern</a><br />struct _xmlPattern
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-pattern.html#xmlPattern">xmlPattern</a> * <a name="xmlPatternPtr" id="xmlPatternPtr">xmlPatternPtr</a>
+</pre><pre class="programlisting">void <a href="#xmlFreePattern">xmlFreePattern</a> (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)</pre>
+<pre class="programlisting">void <a href="#xmlFreePatternList">xmlFreePatternList</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"><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>
+<h2>Description</h2>
+<h3><a name="xmlPattern" id="xmlPattern">Structure xmlPattern</a></h3><pre class="programlisting">Structure xmlPattern<br />struct _xmlPattern {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlFreePattern" id="xmlFreePattern"></a>Function: xmlFreePattern</h3><pre class="programlisting">void xmlFreePattern (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)<br />
+</pre><p>Free up the memory allocated by @comp</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>an XSLT comp</td></tr></tbody></table></div><h3><a name="xmlFreePatternList" id="xmlFreePatternList"></a>Function: xmlFreePatternList</h3><pre class="programlisting">void xmlFreePatternList (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)<br />
+</pre><p>Free up the memory allocated by all the elements of @comp</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>an XSLT comp list</td></tr></tbody></table></div><h3><a name="xmlPatternMatch" id="xmlPatternMatch"></a>Function: xmlPatternMatch</h3><pre class="programlisting">int xmlPatternMatch (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Test wether 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="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 dictionnary 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 for of the pattern or NULL in case of error</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-relaxng.html b/doc/html/libxml-relaxng.html
new file mode 100644
index 0000000..7644e44
--- /dev/null
+++ b/doc/html/libxml-relaxng.html
@@ -0,0 +1,153 @@
+<?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 relaxng from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module relaxng 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-pattern.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-pattern.html">pattern</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-schemasInternals.html">schemasInternals</a></th><td><a accesskey="n" href="libxml-schemasInternals.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>implementation of the Relax-NG validation </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlRelaxNG">xmlRelaxNG</a><br />struct _xmlRelaxNG
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Structure <a href="#xmlRelaxNGParserCtxt">xmlRelaxNGParserCtxt</a><br />struct _xmlRelaxNGParserCtxt
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-relaxng.html#xmlRelaxNGParserCtxt">xmlRelaxNGParserCtxt</a> * <a name="xmlRelaxNGParserCtxtPtr" id="xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlRelaxNGParserFlag">xmlRelaxNGParserFlag</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-relaxng.html#xmlRelaxNG">xmlRelaxNG</a> * <a name="xmlRelaxNGPtr" id="xmlRelaxNGPtr">xmlRelaxNGPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlRelaxNGValidCtxt">xmlRelaxNGValidCtxt</a><br />struct _xmlRelaxNGValidCtxt
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-relaxng.html#xmlRelaxNGValidCtxt">xmlRelaxNGValidCtxt</a> * <a name="xmlRelaxNGValidCtxtPtr" id="xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlRelaxNGValidErr">xmlRelaxNGValidErr</a>
+</pre><pre class="programlisting">void <a href="#xmlRelaxNGCleanupTypes">xmlRelaxNGCleanupTypes</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlRelaxNGDump">xmlRelaxNGDump</a> (FILE * output, <br /> <a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)</pre>
+<pre class="programlisting">void <a href="#xmlRelaxNGDumpTree">xmlRelaxNGDumpTree</a> (FILE * output, <br /> <a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)</pre>
+<pre class="programlisting">void <a href="#xmlRelaxNGFree">xmlRelaxNGFree</a> (<a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)</pre>
+<pre class="programlisting">void <a href="#xmlRelaxNGFreeParserCtxt">xmlRelaxNGFreeParserCtxt</a> (<a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlRelaxNGFreeValidCtxt">xmlRelaxNGFreeValidCtxt</a> (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</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">int <a href="#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</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"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> <a href="#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> <a href="#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a> (const char * buffer, <br /> int size)</pre>
+<pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> <a href="#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a> (const char * URL)</pre>
+<pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> <a href="#xmlRelaxNGNewValidCtxt">xmlRelaxNGNewValidCtxt</a> (<a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)</pre>
+<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">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>
+<pre class="programlisting">int <a href="#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a> (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</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">Function type: <a href="#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a>
+void <a href="#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a>
+void <a href="#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<pre class="programlisting">int <a href="#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a> (<a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> ctxt, <br /> int flags)</pre>
+<h2>Description</h2>
+<h3><a name="xmlRelaxNG" id="xmlRelaxNG">Structure xmlRelaxNG</a></h3><pre class="programlisting">Structure xmlRelaxNG<br />struct _xmlRelaxNG {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlRelaxNGParserCtxt" id="xmlRelaxNGParserCtxt">Structure xmlRelaxNGParserCtxt</a></h3><pre class="programlisting">Structure xmlRelaxNGParserCtxt<br />struct _xmlRelaxNGParserCtxt {
+The content of this structure is not made public by the API.
+}</pre><h3>Enum <a name="xmlRelaxNGParserFlag" id="xmlRelaxNGParserFlag">xmlRelaxNGParserFlag</a></h3><pre class="programlisting">Enum xmlRelaxNGParserFlag {
+ <a name="XML_RELAXNGP_NONE" id="XML_RELAXNGP_NONE">XML_RELAXNGP_NONE</a> = 0
+ <a name="XML_RELAXNGP_FREE_DOC" id="XML_RELAXNGP_FREE_DOC">XML_RELAXNGP_FREE_DOC</a> = 1
+ <a name="XML_RELAXNGP_CRNG" id="XML_RELAXNGP_CRNG">XML_RELAXNGP_CRNG</a> = 2
+}
+</pre><h3><a name="xmlRelaxNGValidCtxt" id="xmlRelaxNGValidCtxt">Structure xmlRelaxNGValidCtxt</a></h3><pre class="programlisting">Structure xmlRelaxNGValidCtxt<br />struct _xmlRelaxNGValidCtxt {
+The content of this structure is not made public by the API.
+}</pre><h3>Enum <a name="xmlRelaxNGValidErr" id="xmlRelaxNGValidErr">xmlRelaxNGValidErr</a></h3><pre class="programlisting">Enum xmlRelaxNGValidErr {
+ <a name="XML_RELAXNG_OK" id="XML_RELAXNG_OK">XML_RELAXNG_OK</a> = 0
+ <a name="XML_RELAXNG_ERR_MEMORY" id="XML_RELAXNG_ERR_MEMORY">XML_RELAXNG_ERR_MEMORY</a> = 1
+ <a name="XML_RELAXNG_ERR_TYPE" id="XML_RELAXNG_ERR_TYPE">XML_RELAXNG_ERR_TYPE</a> = 2
+ <a name="XML_RELAXNG_ERR_TYPEVAL" id="XML_RELAXNG_ERR_TYPEVAL">XML_RELAXNG_ERR_TYPEVAL</a> = 3
+ <a name="XML_RELAXNG_ERR_DUPID" id="XML_RELAXNG_ERR_DUPID">XML_RELAXNG_ERR_DUPID</a> = 4
+ <a name="XML_RELAXNG_ERR_TYPECMP" id="XML_RELAXNG_ERR_TYPECMP">XML_RELAXNG_ERR_TYPECMP</a> = 5
+ <a name="XML_RELAXNG_ERR_NOSTATE" id="XML_RELAXNG_ERR_NOSTATE">XML_RELAXNG_ERR_NOSTATE</a> = 6
+ <a name="XML_RELAXNG_ERR_NODEFINE" id="XML_RELAXNG_ERR_NODEFINE">XML_RELAXNG_ERR_NODEFINE</a> = 7
+ <a name="XML_RELAXNG_ERR_LISTEXTRA" id="XML_RELAXNG_ERR_LISTEXTRA">XML_RELAXNG_ERR_LISTEXTRA</a> = 8
+ <a name="XML_RELAXNG_ERR_LISTEMPTY" id="XML_RELAXNG_ERR_LISTEMPTY">XML_RELAXNG_ERR_LISTEMPTY</a> = 9
+ <a name="XML_RELAXNG_ERR_INTERNODATA" id="XML_RELAXNG_ERR_INTERNODATA">XML_RELAXNG_ERR_INTERNODATA</a> = 10
+ <a name="XML_RELAXNG_ERR_INTERSEQ" id="XML_RELAXNG_ERR_INTERSEQ">XML_RELAXNG_ERR_INTERSEQ</a> = 11
+ <a name="XML_RELAXNG_ERR_INTEREXTRA" id="XML_RELAXNG_ERR_INTEREXTRA">XML_RELAXNG_ERR_INTEREXTRA</a> = 12
+ <a name="XML_RELAXNG_ERR_ELEMNAME" id="XML_RELAXNG_ERR_ELEMNAME">XML_RELAXNG_ERR_ELEMNAME</a> = 13
+ <a name="XML_RELAXNG_ERR_ATTRNAME" id="XML_RELAXNG_ERR_ATTRNAME">XML_RELAXNG_ERR_ATTRNAME</a> = 14
+ <a name="XML_RELAXNG_ERR_ELEMNONS" id="XML_RELAXNG_ERR_ELEMNONS">XML_RELAXNG_ERR_ELEMNONS</a> = 15
+ <a name="XML_RELAXNG_ERR_ATTRNONS" id="XML_RELAXNG_ERR_ATTRNONS">XML_RELAXNG_ERR_ATTRNONS</a> = 16
+ <a name="XML_RELAXNG_ERR_ELEMWRONGNS" id="XML_RELAXNG_ERR_ELEMWRONGNS">XML_RELAXNG_ERR_ELEMWRONGNS</a> = 17
+ <a name="XML_RELAXNG_ERR_ATTRWRONGNS" id="XML_RELAXNG_ERR_ATTRWRONGNS">XML_RELAXNG_ERR_ATTRWRONGNS</a> = 18
+ <a name="XML_RELAXNG_ERR_ELEMEXTRANS" id="XML_RELAXNG_ERR_ELEMEXTRANS">XML_RELAXNG_ERR_ELEMEXTRANS</a> = 19
+ <a name="XML_RELAXNG_ERR_ATTREXTRANS" id="XML_RELAXNG_ERR_ATTREXTRANS">XML_RELAXNG_ERR_ATTREXTRANS</a> = 20
+ <a name="XML_RELAXNG_ERR_ELEMNOTEMPTY" id="XML_RELAXNG_ERR_ELEMNOTEMPTY">XML_RELAXNG_ERR_ELEMNOTEMPTY</a> = 21
+ <a name="XML_RELAXNG_ERR_NOELEM" id="XML_RELAXNG_ERR_NOELEM">XML_RELAXNG_ERR_NOELEM</a> = 22
+ <a name="XML_RELAXNG_ERR_NOTELEM" id="XML_RELAXNG_ERR_NOTELEM">XML_RELAXNG_ERR_NOTELEM</a> = 23
+ <a name="XML_RELAXNG_ERR_ATTRVALID" id="XML_RELAXNG_ERR_ATTRVALID">XML_RELAXNG_ERR_ATTRVALID</a> = 24
+ <a name="XML_RELAXNG_ERR_CONTENTVALID" id="XML_RELAXNG_ERR_CONTENTVALID">XML_RELAXNG_ERR_CONTENTVALID</a> = 25
+ <a name="XML_RELAXNG_ERR_EXTRACONTENT" id="XML_RELAXNG_ERR_EXTRACONTENT">XML_RELAXNG_ERR_EXTRACONTENT</a> = 26
+ <a name="XML_RELAXNG_ERR_INVALIDATTR" id="XML_RELAXNG_ERR_INVALIDATTR">XML_RELAXNG_ERR_INVALIDATTR</a> = 27
+ <a name="XML_RELAXNG_ERR_DATAELEM" id="XML_RELAXNG_ERR_DATAELEM">XML_RELAXNG_ERR_DATAELEM</a> = 28
+ <a name="XML_RELAXNG_ERR_VALELEM" id="XML_RELAXNG_ERR_VALELEM">XML_RELAXNG_ERR_VALELEM</a> = 29
+ <a name="XML_RELAXNG_ERR_LISTELEM" id="XML_RELAXNG_ERR_LISTELEM">XML_RELAXNG_ERR_LISTELEM</a> = 30
+ <a name="XML_RELAXNG_ERR_DATATYPE" id="XML_RELAXNG_ERR_DATATYPE">XML_RELAXNG_ERR_DATATYPE</a> = 31
+ <a name="XML_RELAXNG_ERR_VALUE" id="XML_RELAXNG_ERR_VALUE">XML_RELAXNG_ERR_VALUE</a> = 32
+ <a name="XML_RELAXNG_ERR_LIST" id="XML_RELAXNG_ERR_LIST">XML_RELAXNG_ERR_LIST</a> = 33
+ <a name="XML_RELAXNG_ERR_NOGRAMMAR" id="XML_RELAXNG_ERR_NOGRAMMAR">XML_RELAXNG_ERR_NOGRAMMAR</a> = 34
+ <a name="XML_RELAXNG_ERR_EXTRADATA" id="XML_RELAXNG_ERR_EXTRADATA">XML_RELAXNG_ERR_EXTRADATA</a> = 35
+ <a name="XML_RELAXNG_ERR_LACKDATA" id="XML_RELAXNG_ERR_LACKDATA">XML_RELAXNG_ERR_LACKDATA</a> = 36
+ <a name="XML_RELAXNG_ERR_INTERNAL" id="XML_RELAXNG_ERR_INTERNAL">XML_RELAXNG_ERR_INTERNAL</a> = 37
+ <a name="XML_RELAXNG_ERR_ELEMWRONG" id="XML_RELAXNG_ERR_ELEMWRONG">XML_RELAXNG_ERR_ELEMWRONG</a> = 38
+ <a name="XML_RELAXNG_ERR_TEXTWRONG" id="XML_RELAXNG_ERR_TEXTWRONG">XML_RELAXNG_ERR_TEXTWRONG</a> = 39
+}
+</pre><h3><a name="xmlRelaxNGCleanupTypes" id="xmlRelaxNGCleanupTypes"></a>Function: xmlRelaxNGCleanupTypes</h3><pre class="programlisting">void xmlRelaxNGCleanupTypes (void)<br />
+</pre><p>Cleanup the default Schemas type library associated to RelaxNG</p>
+<h3><a name="xmlRelaxNGDump" id="xmlRelaxNGDump"></a>Function: xmlRelaxNGDump</h3><pre class="programlisting">void xmlRelaxNGDump (FILE * output, <br /> <a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)<br />
+</pre><p>Dump a RelaxNG structure back</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the file output</td></tr><tr><td><span class="term"><i><tt>schema</tt></i>:</span></td><td>a schema structure</td></tr></tbody></table></div><h3><a name="xmlRelaxNGDumpTree" id="xmlRelaxNGDumpTree"></a>Function: xmlRelaxNGDumpTree</h3><pre class="programlisting">void xmlRelaxNGDumpTree (FILE * output, <br /> <a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)<br />
+</pre><p>Dump the transformed RelaxNG tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the file output</td></tr><tr><td><span class="term"><i><tt>schema</tt></i>:</span></td><td>a schema structure</td></tr></tbody></table></div><h3><a name="xmlRelaxNGFree" id="xmlRelaxNGFree"></a>Function: xmlRelaxNGFree</h3><pre class="programlisting">void xmlRelaxNGFree (<a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)<br />
+</pre><p>Deallocate a RelaxNG 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="xmlRelaxNGFreeParserCtxt" id="xmlRelaxNGFreeParserCtxt"></a>Function: xmlRelaxNGFreeParserCtxt</h3><pre class="programlisting">void xmlRelaxNGFreeParserCtxt (<a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</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="xmlRelaxNGFreeValidCtxt" id="xmlRelaxNGFreeValidCtxt"></a>Function: xmlRelaxNGFreeValidCtxt</h3><pre class="programlisting">void xmlRelaxNGFreeValidCtxt (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</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="xmlRelaxNGGetParserErrors" id="xmlRelaxNGGetParserErrors"></a>Function: xmlRelaxNGGetParserErrors</h3><pre class="programlisting">int xmlRelaxNGGetParserErrors (<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)<br />
+</pre><p>Get the callback information 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 result</td></tr><tr><td><span class="term"><i><tt>warn</tt></i>:</span></td><td>the warning callback result</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>contextual data for the callbacks result</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of failure, 0 otherwise.</td></tr></tbody></table></div><h3><a name="xmlRelaxNGGetValidErrors" id="xmlRelaxNGGetValidErrors"></a>Function: xmlRelaxNGGetValidErrors</h3><pre class="programlisting">int xmlRelaxNGGetValidErrors (<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>Get 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 result</td></tr><tr><td><span class="term"><i><tt>warn</tt></i>:</span></td><td>the warning function result</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the functions context result</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error and 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlRelaxNGNewDocParserCtxt" id="xmlRelaxNGNewDocParserCtxt"></a>Function: xmlRelaxNGNewDocParserCtxt</h3><pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> xmlRelaxNGNewDocParserCtxt (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Create an XML RelaxNGs parser context for that document. Note: since the process of compiling a RelaxNG schemas modifies the document, the @doc parameter is duplicated internally.</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="xmlRelaxNGNewMemParserCtxt" id="xmlRelaxNGNewMemParserCtxt"></a>Function: xmlRelaxNGNewMemParserCtxt</h3><pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> xmlRelaxNGNewMemParserCtxt (const char * buffer, <br /> int size)<br />
+</pre><p>Create an XML RelaxNGs parse context for that memory buffer expected to contain an XML RelaxNGs 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="xmlRelaxNGNewParserCtxt" id="xmlRelaxNGNewParserCtxt"></a>Function: xmlRelaxNGNewParserCtxt</h3><pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> xmlRelaxNGNewParserCtxt (const char * URL)<br />
+</pre><p>Create an XML RelaxNGs parse context for that file/resource expected to contain an XML RelaxNGs 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="xmlRelaxNGNewValidCtxt" id="xmlRelaxNGNewValidCtxt"></a>Function: xmlRelaxNGNewValidCtxt</h3><pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> xmlRelaxNGNewValidCtxt (<a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)<br />
+</pre><p>Create an XML RelaxNGs 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 RelaxNGs</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="xmlRelaxNGParse" id="xmlRelaxNGParse"></a>Function: xmlRelaxNGParse</h3><pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> xmlRelaxNGParse (<a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances. *WARNING* this interface is highly subject to change</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 parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal XML RelaxNG structure built from the resource or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlRelaxNGSetParserErrors" id="xmlRelaxNGSetParserErrors"></a>Function: xmlRelaxNGSetParserErrors</h3><pre class="programlisting">void xmlRelaxNGSetParserErrors (<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)<br />
+</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 />
+</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>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidatePopElement" id="xmlRelaxNGValidatePopElement"></a>Function: xmlRelaxNGValidatePopElement</h3><pre class="programlisting">int xmlRelaxNGValidatePopElement (<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>Pop the element end from the RelaxNG validation stack.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the RelaxNG validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidatePushCData" id="xmlRelaxNGValidatePushCData"></a>Function: xmlRelaxNGValidatePushCData</h3><pre class="programlisting">int xmlRelaxNGValidatePushCData (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data, <br /> int len)<br />
+</pre><p>check the CData parsed for validation in the current stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the RelaxNG validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the lenght of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidatePushElement" id="xmlRelaxNGValidatePushElement"></a>Function: xmlRelaxNGValidatePushElement</h3><pre class="programlisting">int xmlRelaxNGValidatePushElement (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br />
+</pre><p>Push a new element start on the RelaxNG validation stack.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 if validating the element requires a full node, and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidityErrorFunc" id="xmlRelaxNGValidityErrorFunc"></a>Function type: xmlRelaxNGValidityErrorFunc</h3><pre class="programlisting">Function type: xmlRelaxNGValidityErrorFunc
+void xmlRelaxNGValidityErrorFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</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="xmlRelaxNGValidityWarningFunc" id="xmlRelaxNGValidityWarningFunc"></a>Function type: xmlRelaxNGValidityWarningFunc</h3><pre class="programlisting">Function type: xmlRelaxNGValidityWarningFunc
+void xmlRelaxNGValidityWarningFunc (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="xmlRelaxParserSetFlag" id="xmlRelaxParserSetFlag"></a>Function: xmlRelaxParserSetFlag</h3><pre class="programlisting">int xmlRelaxParserSetFlag (<a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> ctxt, <br /> int flags)<br />
+</pre><p>Semi private function used to pass informations to a parser context which are a combination of <a href="libxml-relaxng.html#xmlRelaxNGParserFlag">xmlRelaxNGParserFlag</a> .</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 RelaxNG parser context</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>a set of flags values</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if success and -1 in case of error</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-schemasInternals.html b/doc/html/libxml-schemasInternals.html
new file mode 100644
index 0000000..096373e
--- /dev/null
+++ b/doc/html/libxml-schemasInternals.html
@@ -0,0 +1,191 @@
+<?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 schemasInternals from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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_ATTR_NSDEFAULT">XML_SCHEMAS_ATTR_NSDEFAULT</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_DEFAULT">XML_SCHEMAS_ELEM_DEFAULT</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_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_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_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_MIXED">XML_SCHEMAS_TYPE_MIXED</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
+</pre><pre class="programlisting">Typedef <a href="libxml-schemasInternals.html#xmlSchemaAttributeGroup">xmlSchemaAttributeGroup</a> * <a name="xmlSchemaAttributeGroupPtr" id="xmlSchemaAttributeGroupPtr">xmlSchemaAttributeGroupPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-schemasInternals.html#xmlSchemaAttribute">xmlSchemaAttribute</a> * <a name="xmlSchemaAttributePtr" id="xmlSchemaAttributePtr">xmlSchemaAttributePtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlSchemaContentType">xmlSchemaContentType</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSchemaElement">xmlSchemaElement</a><br />struct _xmlSchemaElement
+</pre><pre class="programlisting">Typedef <a href="libxml-schemasInternals.html#xmlSchemaElement">xmlSchemaElement</a> * <a name="xmlSchemaElementPtr" id="xmlSchemaElementPtr">xmlSchemaElementPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSchemaFacet">xmlSchemaFacet</a><br />struct _xmlSchemaFacet
+</pre><pre class="programlisting">Typedef <a href="libxml-schemasInternals.html#xmlSchemaFacet">xmlSchemaFacet</a> * <a name="xmlSchemaFacetPtr" id="xmlSchemaFacetPtr">xmlSchemaFacetPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSchemaNotation">xmlSchemaNotation</a><br />struct _xmlSchemaNotation
+</pre><pre class="programlisting">Typedef <a href="libxml-schemasInternals.html#xmlSchemaNotation">xmlSchemaNotation</a> * <a name="xmlSchemaNotationPtr" id="xmlSchemaNotationPtr">xmlSchemaNotationPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSchemaType">xmlSchemaType</a><br />struct _xmlSchemaType
+</pre><pre class="programlisting">Typedef <a href="libxml-schemasInternals.html#xmlSchemaType">xmlSchemaType</a> * <a name="xmlSchemaTypePtr" id="xmlSchemaTypePtr">xmlSchemaTypePtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlSchemaTypeType">xmlSchemaTypeType</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSchemaVal">xmlSchemaVal</a><br />struct _xmlSchemaVal
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-schemasInternals.html#xmlSchemaVal">xmlSchemaVal</a> * <a name="xmlSchemaValPtr" id="xmlSchemaValPtr">xmlSchemaValPtr</a>
+</pre><pre class="programlisting">void <a href="#xmlSchemaFreeType">xmlSchemaFreeType</a> (<a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> type)</pre>
+<h2>Description</h2>
+<h3><a name="XML_SCHEMAS_ANYATTR_LAX" id="XML_SCHEMAS_ANYATTR_LAX"></a>Macro: XML_SCHEMAS_ANYATTR_LAX</h3><pre>#define XML_SCHEMAS_ANYATTR_LAX</pre><p>Ignore validation non definition on attributes</p>
+<h3><a name="XML_SCHEMAS_ANYATTR_SKIP" id="XML_SCHEMAS_ANYATTR_SKIP"></a>Macro: XML_SCHEMAS_ANYATTR_SKIP</h3><pre>#define XML_SCHEMAS_ANYATTR_SKIP</pre><p>Skip unknown <a href="libxml-SAX.html#attribute">attribute</a> from validation</p>
+<h3><a name="XML_SCHEMAS_ANYATTR_STRICT" id="XML_SCHEMAS_ANYATTR_STRICT"></a>Macro: XML_SCHEMAS_ANYATTR_STRICT</h3><pre>#define XML_SCHEMAS_ANYATTR_STRICT</pre><p>Apply strict validation rules on attributes</p>
+<h3><a name="XML_SCHEMAS_ATTR_NSDEFAULT" id="XML_SCHEMAS_ATTR_NSDEFAULT"></a>Macro: XML_SCHEMAS_ATTR_NSDEFAULT</h3><pre>#define XML_SCHEMAS_ATTR_NSDEFAULT</pre><p>allow elements in no namespace</p>
+<h3><a name="XML_SCHEMAS_ELEM_ABSTRACT" id="XML_SCHEMAS_ELEM_ABSTRACT"></a>Macro: XML_SCHEMAS_ELEM_ABSTRACT</h3><pre>#define XML_SCHEMAS_ELEM_ABSTRACT</pre><p>the element is abstract</p>
+<h3><a name="XML_SCHEMAS_ELEM_DEFAULT" id="XML_SCHEMAS_ELEM_DEFAULT"></a>Macro: XML_SCHEMAS_ELEM_DEFAULT</h3><pre>#define XML_SCHEMAS_ELEM_DEFAULT</pre><p>the element has a default value</p>
+<h3><a name="XML_SCHEMAS_ELEM_FIXED" id="XML_SCHEMAS_ELEM_FIXED"></a>Macro: XML_SCHEMAS_ELEM_FIXED</h3><pre>#define XML_SCHEMAS_ELEM_FIXED</pre><p>the element has a fixed value</p>
+<h3><a name="XML_SCHEMAS_ELEM_GLOBAL" id="XML_SCHEMAS_ELEM_GLOBAL"></a>Macro: XML_SCHEMAS_ELEM_GLOBAL</h3><pre>#define XML_SCHEMAS_ELEM_GLOBAL</pre><p>the element is global</p>
+<h3><a name="XML_SCHEMAS_ELEM_NILLABLE" id="XML_SCHEMAS_ELEM_NILLABLE"></a>Macro: XML_SCHEMAS_ELEM_NILLABLE</h3><pre>#define XML_SCHEMAS_ELEM_NILLABLE</pre><p>the element is nillable</p>
+<h3><a name="XML_SCHEMAS_ELEM_NSDEFAULT" id="XML_SCHEMAS_ELEM_NSDEFAULT"></a>Macro: XML_SCHEMAS_ELEM_NSDEFAULT</h3><pre>#define XML_SCHEMAS_ELEM_NSDEFAULT</pre><p>allow elements in no namespace</p>
+<h3><a name="XML_SCHEMAS_ELEM_REF" id="XML_SCHEMAS_ELEM_REF"></a>Macro: XML_SCHEMAS_ELEM_REF</h3><pre>#define XML_SCHEMAS_ELEM_REF</pre><p>the element is a <a href="libxml-SAX.html#reference">reference</a> to a type</p>
+<h3><a name="XML_SCHEMAS_ELEM_TOPLEVEL" id="XML_SCHEMAS_ELEM_TOPLEVEL"></a>Macro: XML_SCHEMAS_ELEM_TOPLEVEL</h3><pre>#define XML_SCHEMAS_ELEM_TOPLEVEL</pre><p>the element is top level</p>
+<h3><a name="XML_SCHEMAS_FACET_COLLAPSE" id="XML_SCHEMAS_FACET_COLLAPSE"></a>Macro: XML_SCHEMAS_FACET_COLLAPSE</h3><pre>#define XML_SCHEMAS_FACET_COLLAPSE</pre><p>collapse the types of the facet</p>
+<h3><a name="XML_SCHEMAS_FACET_PRESERVE" id="XML_SCHEMAS_FACET_PRESERVE"></a>Macro: XML_SCHEMAS_FACET_PRESERVE</h3><pre>#define XML_SCHEMAS_FACET_PRESERVE</pre><p>preserve the type of the facet</p>
+<h3><a name="XML_SCHEMAS_FACET_REPLACE" id="XML_SCHEMAS_FACET_REPLACE"></a>Macro: XML_SCHEMAS_FACET_REPLACE</h3><pre>#define XML_SCHEMAS_FACET_REPLACE</pre><p>replace the type of the facet</p>
+<h3><a name="XML_SCHEMAS_FACET_UNKNOWN" id="XML_SCHEMAS_FACET_UNKNOWN"></a>Macro: XML_SCHEMAS_FACET_UNKNOWN</h3><pre>#define XML_SCHEMAS_FACET_UNKNOWN</pre><p>unknown facet handling</p>
+<h3><a name="XML_SCHEMAS_QUALIF_ATTR" id="XML_SCHEMAS_QUALIF_ATTR"></a>Macro: XML_SCHEMAS_QUALIF_ATTR</h3><pre>#define XML_SCHEMAS_QUALIF_ATTR</pre><p>the shemas requires qualified attributes</p>
+<h3><a name="XML_SCHEMAS_QUALIF_ELEM" id="XML_SCHEMAS_QUALIF_ELEM"></a>Macro: XML_SCHEMAS_QUALIF_ELEM</h3><pre>#define XML_SCHEMAS_QUALIF_ELEM</pre><p>the shemas requires qualified elements</p>
+<h3><a name="XML_SCHEMAS_TYPE_MIXED" id="XML_SCHEMAS_TYPE_MIXED"></a>Macro: XML_SCHEMAS_TYPE_MIXED</h3><pre>#define XML_SCHEMAS_TYPE_MIXED</pre><p>the element content type is mixed</p>
+<h3><a name="xmlSchemaAnnot" id="xmlSchemaAnnot">Structure xmlSchemaAnnot</a></h3><pre class="programlisting">Structure xmlSchemaAnnot<br />struct _xmlSchemaAnnot {
+ struct _xmlSchemaAnnot * next
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> content : the annotation
+}</pre><h3><a name="xmlSchemaAttribute" id="xmlSchemaAttribute">Structure xmlSchemaAttribute</a></h3><pre class="programlisting">Structure xmlSchemaAttribute<br />struct _xmlSchemaAttribute {
+ <a href="libxml-schemasInternals.html#xmlSchemaTypeType">xmlSchemaTypeType</a> type : The kind of type
+ struct _xmlSchemaAttribute * next : the next <a href="libxml-SAX.html#attribute">attribute</a> if in a group ...
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * id
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ref
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * refNs
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * typeName
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * typeNs
+ <a href="libxml-schemasInternals.html#xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a> annot
+ <a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> base
+ int occurs
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defValue
+ <a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> subtypes
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * targetNamespace
+ int flags
+}</pre><h3><a name="xmlSchemaAttributeGroup" id="xmlSchemaAttributeGroup">Structure xmlSchemaAttributeGroup</a></h3><pre class="programlisting">Structure xmlSchemaAttributeGroup<br />struct _xmlSchemaAttributeGroup {
+ <a href="libxml-schemasInternals.html#xmlSchemaTypeType">xmlSchemaTypeType</a> type : The kind of type
+ struct _xmlSchemaAttribute * next : the next <a href="libxml-SAX.html#attribute">attribute</a> if in a group ...
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * id
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ref
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * refNs
+ <a href="libxml-schemasInternals.html#xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a> annot
+ <a href="libxml-schemasInternals.html#xmlSchemaAttributePtr">xmlSchemaAttributePtr</a> attributes
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node
+}</pre><h3>Enum <a name="xmlSchemaContentType" id="xmlSchemaContentType">xmlSchemaContentType</a></h3><pre class="programlisting">Enum xmlSchemaContentType {
+ <a name="XML_SCHEMA_CONTENT_UNKNOWN" id="XML_SCHEMA_CONTENT_UNKNOWN">XML_SCHEMA_CONTENT_UNKNOWN</a> = 0
+ <a name="XML_SCHEMA_CONTENT_EMPTY" id="XML_SCHEMA_CONTENT_EMPTY">XML_SCHEMA_CONTENT_EMPTY</a> = 1
+ <a name="XML_SCHEMA_CONTENT_ELEMENTS" id="XML_SCHEMA_CONTENT_ELEMENTS">XML_SCHEMA_CONTENT_ELEMENTS</a> = 2
+ <a name="XML_SCHEMA_CONTENT_MIXED" id="XML_SCHEMA_CONTENT_MIXED">XML_SCHEMA_CONTENT_MIXED</a> = 3
+ <a name="XML_SCHEMA_CONTENT_SIMPLE" id="XML_SCHEMA_CONTENT_SIMPLE">XML_SCHEMA_CONTENT_SIMPLE</a> = 4
+ <a name="XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS" id="XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS">XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS</a> = 5
+ <a name="XML_SCHEMA_CONTENT_BASIC" id="XML_SCHEMA_CONTENT_BASIC">XML_SCHEMA_CONTENT_BASIC</a> = 6
+ <a name="XML_SCHEMA_CONTENT_ANY" id="XML_SCHEMA_CONTENT_ANY">XML_SCHEMA_CONTENT_ANY</a> = 7
+}
+</pre><h3><a name="xmlSchemaElement" id="xmlSchemaElement">Structure xmlSchemaElement</a></h3><pre class="programlisting">Structure xmlSchemaElement<br />struct _xmlSchemaElement {
+ <a href="libxml-schemasInternals.html#xmlSchemaTypeType">xmlSchemaTypeType</a> type : The kind of type
+ struct _xmlSchemaType * next : the next type if in a sequence ...
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * id
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ref
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * refNs
+ <a href="libxml-schemasInternals.html#xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a> annot
+ <a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> subtypes
+ <a href="libxml-schemasInternals.html#xmlSchemaAttributePtr">xmlSchemaAttributePtr</a> attributes
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node
+ int minOccurs
+ int maxOccurs
+ int flags
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * targetNamespace
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namedType
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namedTypeNs
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * substGroup
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * substGroupNs
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * scope
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value
+ struct _xmlSchemaElement * refDecl
+ <a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> contModel
+ <a href="libxml-schemasInternals.html#xmlSchemaContentType">xmlSchemaContentType</a> contentType
+}</pre><h3><a name="xmlSchemaFacet" id="xmlSchemaFacet">Structure xmlSchemaFacet</a></h3><pre class="programlisting">Structure xmlSchemaFacet<br />struct _xmlSchemaFacet {
+ <a href="libxml-schemasInternals.html#xmlSchemaTypeType">xmlSchemaTypeType</a> type : The kind of type
+ struct _xmlSchemaFacet * next : the next type if in a sequence ...
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * id
+ <a href="libxml-schemasInternals.html#xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a> annot
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node
+ int fixed
+ int whitespace
+ <a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> val
+ <a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> regexp
+}</pre><h3><a name="xmlSchemaNotation" id="xmlSchemaNotation">Structure xmlSchemaNotation</a></h3><pre class="programlisting">Structure xmlSchemaNotation<br />struct _xmlSchemaNotation {
+ <a href="libxml-schemasInternals.html#xmlSchemaTypeType">xmlSchemaTypeType</a> type : The kind of type
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name
+ <a href="libxml-schemasInternals.html#xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a> annot
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * identifier
+}</pre><h3><a name="xmlSchemaType" id="xmlSchemaType">Structure xmlSchemaType</a></h3><pre class="programlisting">Structure xmlSchemaType<br />struct _xmlSchemaType {
+ <a href="libxml-schemasInternals.html#xmlSchemaTypeType">xmlSchemaTypeType</a> type : The kind of type
+ struct _xmlSchemaType * next : the next type if in a sequence ...
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * id
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ref
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * refNs
+ <a href="libxml-schemasInternals.html#xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a> annot
+ <a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> subtypes
+ <a href="libxml-schemasInternals.html#xmlSchemaAttributePtr">xmlSchemaAttributePtr</a> attributes
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node
+ int minOccurs
+ int maxOccurs
+ int flags
+ <a href="libxml-schemasInternals.html#xmlSchemaContentType">xmlSchemaContentType</a> contentType
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * base
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * baseNs
+ <a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> baseType
+ <a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> facets
+ struct _xmlSchemaType * redef : possible redefinitions for the type
+}</pre><h3>Enum <a name="xmlSchemaTypeType" id="xmlSchemaTypeType">xmlSchemaTypeType</a></h3><pre class="programlisting">Enum xmlSchemaTypeType {
+ <a name="XML_SCHEMA_TYPE_BASIC" id="XML_SCHEMA_TYPE_BASIC">XML_SCHEMA_TYPE_BASIC</a> = 1
+ <a name="XML_SCHEMA_TYPE_ANY" id="XML_SCHEMA_TYPE_ANY">XML_SCHEMA_TYPE_ANY</a> = 2
+ <a name="XML_SCHEMA_TYPE_FACET" id="XML_SCHEMA_TYPE_FACET">XML_SCHEMA_TYPE_FACET</a> = 3
+ <a name="XML_SCHEMA_TYPE_SIMPLE" id="XML_SCHEMA_TYPE_SIMPLE">XML_SCHEMA_TYPE_SIMPLE</a> = 4
+ <a name="XML_SCHEMA_TYPE_COMPLEX" id="XML_SCHEMA_TYPE_COMPLEX">XML_SCHEMA_TYPE_COMPLEX</a> = 5
+ <a name="XML_SCHEMA_TYPE_SEQUENCE" id="XML_SCHEMA_TYPE_SEQUENCE">XML_SCHEMA_TYPE_SEQUENCE</a> = 6
+ <a name="XML_SCHEMA_TYPE_CHOICE" id="XML_SCHEMA_TYPE_CHOICE">XML_SCHEMA_TYPE_CHOICE</a> = 7
+ <a name="XML_SCHEMA_TYPE_ALL" id="XML_SCHEMA_TYPE_ALL">XML_SCHEMA_TYPE_ALL</a> = 8
+ <a name="XML_SCHEMA_TYPE_SIMPLE_CONTENT" id="XML_SCHEMA_TYPE_SIMPLE_CONTENT">XML_SCHEMA_TYPE_SIMPLE_CONTENT</a> = 9
+ <a name="XML_SCHEMA_TYPE_COMPLEX_CONTENT" id="XML_SCHEMA_TYPE_COMPLEX_CONTENT">XML_SCHEMA_TYPE_COMPLEX_CONTENT</a> = 10
+ <a name="XML_SCHEMA_TYPE_UR" id="XML_SCHEMA_TYPE_UR">XML_SCHEMA_TYPE_UR</a> = 11
+ <a name="XML_SCHEMA_TYPE_RESTRICTION" id="XML_SCHEMA_TYPE_RESTRICTION">XML_SCHEMA_TYPE_RESTRICTION</a> = 12
+ <a name="XML_SCHEMA_TYPE_EXTENSION" id="XML_SCHEMA_TYPE_EXTENSION">XML_SCHEMA_TYPE_EXTENSION</a> = 13
+ <a name="XML_SCHEMA_TYPE_ELEMENT" id="XML_SCHEMA_TYPE_ELEMENT">XML_SCHEMA_TYPE_ELEMENT</a> = 14
+ <a name="XML_SCHEMA_TYPE_ATTRIBUTE" id="XML_SCHEMA_TYPE_ATTRIBUTE">XML_SCHEMA_TYPE_ATTRIBUTE</a> = 15
+ <a name="XML_SCHEMA_TYPE_ATTRIBUTEGROUP" id="XML_SCHEMA_TYPE_ATTRIBUTEGROUP">XML_SCHEMA_TYPE_ATTRIBUTEGROUP</a> = 16
+ <a name="XML_SCHEMA_TYPE_GROUP" id="XML_SCHEMA_TYPE_GROUP">XML_SCHEMA_TYPE_GROUP</a> = 17
+ <a name="XML_SCHEMA_TYPE_NOTATION" id="XML_SCHEMA_TYPE_NOTATION">XML_SCHEMA_TYPE_NOTATION</a> = 18
+ <a name="XML_SCHEMA_TYPE_LIST" id="XML_SCHEMA_TYPE_LIST">XML_SCHEMA_TYPE_LIST</a> = 19
+ <a name="XML_SCHEMA_TYPE_UNION" id="XML_SCHEMA_TYPE_UNION">XML_SCHEMA_TYPE_UNION</a> = 20
+ <a name="XML_SCHEMA_FACET_MININCLUSIVE" id="XML_SCHEMA_FACET_MININCLUSIVE">XML_SCHEMA_FACET_MININCLUSIVE</a> = 1000
+ <a name="XML_SCHEMA_FACET_MINEXCLUSIVE" id="XML_SCHEMA_FACET_MINEXCLUSIVE">XML_SCHEMA_FACET_MINEXCLUSIVE</a> = 1001
+ <a name="XML_SCHEMA_FACET_MAXINCLUSIVE" id="XML_SCHEMA_FACET_MAXINCLUSIVE">XML_SCHEMA_FACET_MAXINCLUSIVE</a> = 1002
+ <a name="XML_SCHEMA_FACET_MAXEXCLUSIVE" id="XML_SCHEMA_FACET_MAXEXCLUSIVE">XML_SCHEMA_FACET_MAXEXCLUSIVE</a> = 1003
+ <a name="XML_SCHEMA_FACET_TOTALDIGITS" id="XML_SCHEMA_FACET_TOTALDIGITS">XML_SCHEMA_FACET_TOTALDIGITS</a> = 1004
+ <a name="XML_SCHEMA_FACET_FRACTIONDIGITS" id="XML_SCHEMA_FACET_FRACTIONDIGITS">XML_SCHEMA_FACET_FRACTIONDIGITS</a> = 1005
+ <a name="XML_SCHEMA_FACET_PATTERN" id="XML_SCHEMA_FACET_PATTERN">XML_SCHEMA_FACET_PATTERN</a> = 1006
+ <a name="XML_SCHEMA_FACET_ENUMERATION" id="XML_SCHEMA_FACET_ENUMERATION">XML_SCHEMA_FACET_ENUMERATION</a> = 1007
+ <a name="XML_SCHEMA_FACET_WHITESPACE" id="XML_SCHEMA_FACET_WHITESPACE">XML_SCHEMA_FACET_WHITESPACE</a> = 1008
+ <a name="XML_SCHEMA_FACET_LENGTH" id="XML_SCHEMA_FACET_LENGTH">XML_SCHEMA_FACET_LENGTH</a> = 1009
+ <a name="XML_SCHEMA_FACET_MAXLENGTH" id="XML_SCHEMA_FACET_MAXLENGTH">XML_SCHEMA_FACET_MAXLENGTH</a> = 1010
+ <a name="XML_SCHEMA_FACET_MINLENGTH" id="XML_SCHEMA_FACET_MINLENGTH">XML_SCHEMA_FACET_MINLENGTH</a> = 1011
+}
+</pre><h3><a name="xmlSchemaVal" id="xmlSchemaVal">Structure xmlSchemaVal</a></h3><pre class="programlisting">Structure xmlSchemaVal<br />struct _xmlSchemaVal {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlSchemaFreeType" id="xmlSchemaFreeType"></a>Function: xmlSchemaFreeType</h3><pre class="programlisting">void xmlSchemaFreeType (<a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> type)<br />
+</pre><p>Deallocate a Schema Type structure.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>a schema type structure</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-threads.html b/doc/html/libxml-threads.html
new file mode 100644
index 0000000..21baa68
--- /dev/null
+++ b/doc/html/libxml-threads.html
@@ -0,0 +1,69 @@
+<?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 threads from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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
+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
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-threads.html#xmlRMutex">xmlRMutex</a> * <a name="xmlRMutexPtr" id="xmlRMutexPtr">xmlRMutexPtr</a>
+</pre><pre class="programlisting">void <a href="#xmlCleanupThreads">xmlCleanupThreads</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlFreeMutex">xmlFreeMutex</a> (<a href="libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a> tok)</pre>
+<pre class="programlisting">void <a href="#xmlFreeRMutex">xmlFreeRMutex</a> (<a href="libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a> tok)</pre>
+<pre class="programlisting"><a href="libxml-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> <a href="#xmlGetGlobalState">xmlGetGlobalState</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlGetThreadId">xmlGetThreadId</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlInitThreads">xmlInitThreads</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlIsMainThread">xmlIsMainThread</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlLockLibrary">xmlLockLibrary</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlMutexLock">xmlMutexLock</a> (<a href="libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a> tok)</pre>
+<pre class="programlisting">void <a href="#xmlMutexUnlock">xmlMutexUnlock</a> (<a href="libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a> tok)</pre>
+<pre class="programlisting"><a href="libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a> <a href="#xmlNewMutex">xmlNewMutex</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a> <a href="#xmlNewRMutex">xmlNewRMutex</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlRMutexLock">xmlRMutexLock</a> (<a href="libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a> tok)</pre>
+<pre class="programlisting">void <a href="#xmlRMutexUnlock">xmlRMutexUnlock</a> (<a href="libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a> tok)</pre>
+<pre class="programlisting">void <a href="#xmlUnlockLibrary">xmlUnlockLibrary</a> (void)</pre>
+<h2>Description</h2>
+<h3><a name="xmlMutex" id="xmlMutex">Structure xmlMutex</a></h3><pre class="programlisting">Structure xmlMutex<br />struct _xmlMutex {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlRMutex" id="xmlRMutex">Structure xmlRMutex</a></h3><pre class="programlisting">Structure xmlRMutex<br />struct _xmlRMutex {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlCleanupThreads" id="xmlCleanupThreads"></a>Function: xmlCleanupThreads</h3><pre class="programlisting">void xmlCleanupThreads (void)<br />
+</pre><p>xmlCleanupThreads() is used to to cleanup all the thread related data of the libxml2 library once processing has ended.</p>
+<h3><a name="xmlFreeMutex" id="xmlFreeMutex"></a>Function: xmlFreeMutex</h3><pre class="programlisting">void xmlFreeMutex (<a href="libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a> tok)<br />
+</pre><p>xmlFreeMutex() is used to reclaim resources associated with a libxml2 token struct.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tok</tt></i>:</span></td><td>the simple mutex</td></tr></tbody></table></div><h3><a name="xmlFreeRMutex" id="xmlFreeRMutex"></a>Function: xmlFreeRMutex</h3><pre class="programlisting">void xmlFreeRMutex (<a href="libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a> tok)<br />
+</pre><p>xmlRFreeMutex() is used to reclaim resources associated with a reentrant mutex.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tok</tt></i>:</span></td><td>the reentrant mutex</td></tr></tbody></table></div><h3><a name="xmlGetGlobalState" id="xmlGetGlobalState"></a>Function: xmlGetGlobalState</h3><pre class="programlisting"><a href="libxml-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> xmlGetGlobalState (void)<br />
+</pre><p>xmlGetGlobalState() is called to retrieve the global state for a thread.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the thread global state or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlGetThreadId" id="xmlGetThreadId"></a>Function: xmlGetThreadId</h3><pre class="programlisting">int xmlGetThreadId (void)<br />
+</pre><p>xmlGetThreadId() find the current thread ID number</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the current thread ID number</td></tr></tbody></table></div><h3><a name="xmlInitThreads" id="xmlInitThreads"></a>Function: xmlInitThreads</h3><pre class="programlisting">void xmlInitThreads (void)<br />
+</pre><p>xmlInitThreads() is used to to initialize all the thread related data of the libxml2 library.</p>
+<h3><a name="xmlIsMainThread" id="xmlIsMainThread"></a>Function: xmlIsMainThread</h3><pre class="programlisting">int xmlIsMainThread (void)<br />
+</pre><p>xmlIsMainThread() check whether the current thread is the main thread.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the current thread is the main thread, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlLockLibrary" id="xmlLockLibrary"></a>Function: xmlLockLibrary</h3><pre class="programlisting">void xmlLockLibrary (void)<br />
+</pre><p>xmlLockLibrary() is used to take out a re-entrant lock on the libxml2 library.</p>
+<h3><a name="xmlMutexLock" id="xmlMutexLock"></a>Function: xmlMutexLock</h3><pre class="programlisting">void xmlMutexLock (<a href="libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a> tok)<br />
+</pre><p>xmlMutexLock() is used to lock a libxml2 token.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tok</tt></i>:</span></td><td>the simple mutex</td></tr></tbody></table></div><h3><a name="xmlMutexUnlock" id="xmlMutexUnlock"></a>Function: xmlMutexUnlock</h3><pre class="programlisting">void xmlMutexUnlock (<a href="libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a> tok)<br />
+</pre><p>xmlMutexUnlock() is used to unlock a libxml2 token.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tok</tt></i>:</span></td><td>the simple mutex</td></tr></tbody></table></div><h3><a name="xmlNewMutex" id="xmlNewMutex"></a>Function: xmlNewMutex</h3><pre class="programlisting"><a href="libxml-threads.html#xmlMutexPtr">xmlMutexPtr</a> xmlNewMutex (void)<br />
+</pre><p>xmlNewMutex() is used to allocate a libxml2 token struct for use in synchronizing access to data.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new simple mutex pointer or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlNewRMutex" id="xmlNewRMutex"></a>Function: xmlNewRMutex</h3><pre class="programlisting"><a href="libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a> xmlNewRMutex (void)<br />
+</pre><p>xmlRNewMutex() is used to allocate a reentrant mutex for use in synchronizing access to data. token_r is a re-entrant lock and thus useful for synchronizing access to data structures that may be manipulated in a recursive fashion.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new reentrant mutex pointer or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlRMutexLock" id="xmlRMutexLock"></a>Function: xmlRMutexLock</h3><pre class="programlisting">void xmlRMutexLock (<a href="libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a> tok)<br />
+</pre><p>xmlRMutexLock() is used to lock a libxml2 token_r.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tok</tt></i>:</span></td><td>the reentrant mutex</td></tr></tbody></table></div><h3><a name="xmlRMutexUnlock" id="xmlRMutexUnlock"></a>Function: xmlRMutexUnlock</h3><pre class="programlisting">void xmlRMutexUnlock (<a href="libxml-threads.html#xmlRMutexPtr">xmlRMutexPtr</a> tok)<br />
+</pre><p>xmlRMutexUnlock() is used to unlock a libxml2 token_r.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tok</tt></i>:</span></td><td>the reentrant mutex</td></tr></tbody></table></div><h3><a name="xmlUnlockLibrary" id="xmlUnlockLibrary"></a>Function: xmlUnlockLibrary</h3><pre class="programlisting">void xmlUnlockLibrary (void)<br />
+</pre><p>xmlUnlockLibrary() is used to release a re-entrant lock on the libxml2 library.</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/html/libxml-tree.html b/doc/html/libxml-tree.html
new file mode 100644
index 0000000..b952919
--- /dev/null
+++ b/doc/html/libxml-tree.html
@@ -0,0 +1,881 @@
+<?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 tree from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module tree from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-threads.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-threads.html">threads</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-uri.html">uri</a></th><td><a accesskey="n" href="libxml-uri.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module describes the structures found in an tree resulting from an XML or HTML parsing, as well as the API provided for various processing on that tree </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#BASE_BUFFER_SIZE">BASE_BUFFER_SIZE</a></pre><pre class="programlisting">#define <a href="#XML_GET_CONTENT">XML_GET_CONTENT</a></pre><pre class="programlisting">#define <a href="#XML_GET_LINE">XML_GET_LINE</a></pre><pre class="programlisting">#define <a href="#XML_LOCAL_NAMESPACE">XML_LOCAL_NAMESPACE</a></pre><pre class="programlisting">#define <a href="#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a></pre><pre class="programlisting">#define <a href="#xmlChildrenNode">xmlChildrenNode</a></pre><pre class="programlisting">#define <a href="#xmlRootNode">xmlRootNode</a></pre><pre class="programlisting">Structure <a href="#xmlAttr">xmlAttr</a><br />struct _xmlAttr
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlAttr">xmlAttr</a> * <a name="xmlAttrPtr" id="xmlAttrPtr">xmlAttrPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlAttribute">xmlAttribute</a><br />struct _xmlAttribute
+</pre><pre class="programlisting">Enum <a href="#xmlAttributeDefault">xmlAttributeDefault</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlAttribute">xmlAttribute</a> * <a name="xmlAttributePtr" id="xmlAttributePtr">xmlAttributePtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlAttributeType">xmlAttributeType</a>
+</pre><pre class="programlisting">Structure <a href="#xmlBuffer">xmlBuffer</a><br />struct _xmlBuffer
+</pre><pre class="programlisting">Enum <a href="#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> * <a name="xmlBufferPtr" id="xmlBufferPtr">xmlBufferPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlDoc">xmlDoc</a><br />struct _xmlDoc
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * <a name="xmlDocPtr" id="xmlDocPtr">xmlDocPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlDtd">xmlDtd</a><br />struct _xmlDtd
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlDtd">xmlDtd</a> * <a name="xmlDtdPtr" id="xmlDtdPtr">xmlDtdPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlElement">xmlElement</a><br />struct _xmlElement
+</pre><pre class="programlisting">Structure <a href="#xmlElementContent">xmlElementContent</a><br />struct _xmlElementContent
+</pre><pre class="programlisting">Enum <a href="#xmlElementContentOccur">xmlElementContentOccur</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlElementContent">xmlElementContent</a> * <a name="xmlElementContentPtr" id="xmlElementContentPtr">xmlElementContentPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlElementContentType">xmlElementContentType</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlElement">xmlElement</a> * <a name="xmlElementPtr" id="xmlElementPtr">xmlElementPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlElementType">xmlElementType</a>
+</pre><pre class="programlisting">Enum <a href="#xmlElementTypeVal">xmlElementTypeVal</a>
+</pre><pre class="programlisting">Structure <a href="#xmlEntity">xmlEntity</a><br />struct _xmlEntity
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlEntity">xmlEntity</a> * <a name="xmlEntityPtr" id="xmlEntityPtr">xmlEntityPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlEnumeration">xmlEnumeration</a><br />struct _xmlEnumeration
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlEnumeration">xmlEnumeration</a> * <a name="xmlEnumerationPtr" id="xmlEnumerationPtr">xmlEnumerationPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlID">xmlID</a><br />struct _xmlID
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlID">xmlID</a> * <a name="xmlIDPtr" id="xmlIDPtr">xmlIDPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlNode">xmlNode</a><br />struct _xmlNode
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlNode">xmlNode</a> * <a name="xmlNodePtr" id="xmlNodePtr">xmlNodePtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlNotation">xmlNotation</a><br />struct _xmlNotation
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlNotation">xmlNotation</a> * <a name="xmlNotationPtr" id="xmlNotationPtr">xmlNotationPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlNs">xmlNs</a><br />struct _xmlNs
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlNs">xmlNs</a> * <a name="xmlNsPtr" id="xmlNsPtr">xmlNsPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlElementType">xmlElementType</a> <a name="xmlNsType" id="xmlNsType">xmlNsType</a>
+</pre><pre class="programlisting">Structure <a href="#xmlOutputBuffer">xmlOutputBuffer</a><br />struct _xmlOutputBuffer
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlOutputBuffer">xmlOutputBuffer</a> * <a name="xmlOutputBufferPtr" id="xmlOutputBufferPtr">xmlOutputBufferPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlParserCtxt">xmlParserCtxt</a><br />struct _xmlParserCtxt
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserCtxt">xmlParserCtxt</a> * <a name="xmlParserCtxtPtr" id="xmlParserCtxtPtr">xmlParserCtxtPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlParserInput">xmlParserInput</a><br />struct _xmlParserInput
+</pre><pre class="programlisting">Structure <a href="#xmlParserInputBuffer">xmlParserInputBuffer</a><br />struct _xmlParserInputBuffer
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserInputBuffer">xmlParserInputBuffer</a> * <a name="xmlParserInputBufferPtr" id="xmlParserInputBufferPtr">xmlParserInputBufferPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlParserInput">xmlParserInput</a> * <a name="xmlParserInputPtr" id="xmlParserInputPtr">xmlParserInputPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlRef">xmlRef</a><br />struct _xmlRef
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlRef">xmlRef</a> * <a name="xmlRefPtr" id="xmlRefPtr">xmlRefPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSAXHandler">xmlSAXHandler</a><br />struct _xmlSAXHandler
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlSAXHandler">xmlSAXHandler</a> * <a name="xmlSAXHandlerPtr" id="xmlSAXHandlerPtr">xmlSAXHandlerPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSAXLocator">xmlSAXLocator</a><br />struct _xmlSAXLocator
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlSAXLocator">xmlSAXLocator</a> * <a name="xmlSAXLocatorPtr" id="xmlSAXLocatorPtr">xmlSAXLocatorPtr</a>
+</pre><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlAddChild">xmlAddChild</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlAddChildList">xmlAddChildList</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlAddNextSibling">xmlAddNextSibling</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlAddPrevSibling">xmlAddPrevSibling</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlAddSibling">xmlAddSibling</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)</pre>
+<pre class="programlisting">void <a href="#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string)</pre>
+<pre class="programlisting">void <a href="#xmlBufferAdd">xmlBufferAdd</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#xmlBufferAddHead">xmlBufferAddHead</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#xmlBufferCCat">xmlBufferCCat</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const char * str)</pre>
+<pre class="programlisting">void <a href="#xmlBufferCat">xmlBufferCat</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlBufferContent">xmlBufferContent</a> (const <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> <a href="#xmlBufferCreate">xmlBufferCreate</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> <a href="#xmlBufferCreateSize">xmlBufferCreateSize</a> (size_t size)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> <a href="#xmlBufferCreateStatic">xmlBufferCreateStatic</a> (void * mem, <br /> size_t size)</pre>
+<pre class="programlisting">int <a href="#xmlBufferDump">xmlBufferDump</a> (FILE * file, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)</pre>
+<pre class="programlisting">void <a href="#xmlBufferEmpty">xmlBufferEmpty</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)</pre>
+<pre class="programlisting">void <a href="#xmlBufferFree">xmlBufferFree</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)</pre>
+<pre class="programlisting">int <a href="#xmlBufferGrow">xmlBufferGrow</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> unsigned int len)</pre>
+<pre class="programlisting">int <a href="#xmlBufferLength">xmlBufferLength</a> (const <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)</pre>
+<pre class="programlisting">int <a href="#xmlBufferResize">xmlBufferResize</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> unsigned int size)</pre>
+<pre class="programlisting">void <a href="#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> scheme)</pre>
+<pre class="programlisting">int <a href="#xmlBufferShrink">xmlBufferShrink</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> unsigned int len)</pre>
+<pre class="programlisting">void <a href="#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string)</pre>
+<pre class="programlisting">void <a href="#xmlBufferWriteChar">xmlBufferWriteChar</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const char * string)</pre>
+<pre class="programlisting">void <a href="#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlBuildQName">xmlBuildQName</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ncname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * memory, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCopyDoc">xmlCopyDoc</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> int recursive)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlCopyDtd">xmlCopyDtd</a> (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> <a href="#xmlCopyNamespace">xmlCopyNamespace</a> (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> <a href="#xmlCopyNamespaceList">xmlCopyNamespaceList</a> (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlCopyNode">xmlCopyNode</a> (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int extended)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlCopyNodeList">xmlCopyNodeList</a> (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlCopyProp">xmlCopyProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> target, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlCopyPropList">xmlCopyPropList</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> target, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlCreateIntSubset">xmlCreateIntSubset</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlDocCopyNode">xmlDocCopyNode</a> (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> int extended)</pre>
+<pre class="programlisting">int <a href="#xmlDocDump">xmlDocDump</a> (FILE * f, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br /> int * size, <br /> int format)</pre>
+<pre class="programlisting">void <a href="#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> out_doc, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr, <br /> int * doc_txt_len, <br /> const char * txt_encoding, <br /> int format)</pre>
+<pre class="programlisting">void <a href="#xmlDocDumpMemory">xmlDocDumpMemory</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br /> int * size)</pre>
+<pre class="programlisting">void <a href="#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> out_doc, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr, <br /> int * doc_txt_len, <br /> const char * txt_encoding)</pre>
+<pre class="programlisting">int <a href="#xmlDocFormatDump">xmlDocFormatDump</a> (FILE * f, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> int format)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlDocGetRootElement">xmlDocGetRootElement</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlDocSetRootElement">xmlDocSetRootElement</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> root)</pre>
+<pre class="programlisting">void <a href="#xmlElemDump">xmlElemDump</a> (FILE * f, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreeDoc">xmlFreeDoc</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreeDtd">xmlFreeDtd</a> (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreeNode">xmlFreeNode</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreeNodeList">xmlFreeNodeList</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreeNs">xmlFreeNs</a> (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreeNsList">xmlFreeNsList</a> (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreeProp">xmlFreeProp</a> (<a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreePropList">xmlFreePropList</a> (<a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> <a href="#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlGetCompressMode">xmlGetCompressMode</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlGetDocCompressMode">xmlGetDocCompressMode</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlGetIntSubset">xmlGetIntSubset</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlGetLastChild">xmlGetLastChild</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent)</pre>
+<pre class="programlisting">long <a href="#xmlGetLineNo">xmlGetLineNo</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetNoNsProp">xmlGetNoNsProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetNodePath">xmlGetNodePath</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> * <a href="#xmlGetNsList">xmlGetNsList</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetNsProp">xmlGetNsProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetProp">xmlGetProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlHasNsProp">xmlHasNsProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlHasProp">xmlHasProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlIsBlankNode">xmlIsBlankNode</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">int <a href="#xmlIsXHTML">xmlIsXHTML</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicID)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewCDataBlock">xmlNewCDataBlock</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewCharRef">xmlNewCharRef</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewChild">xmlNewChild</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewComment">xmlNewComment</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlNewDoc">xmlNewDoc</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * version)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewDocComment">xmlNewDocComment</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewDocFragment">xmlNewDocFragment</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewDocNode">xmlNewDocNode</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlNewDocProp">xmlNewDocProp</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewDocRawNode">xmlNewDocRawNode</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewDocText">xmlNewDocText</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewDocTextLen">xmlNewDocTextLen</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlNewDtd">xmlNewDtd</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> <a href="#xmlNewGlobalNs">xmlNewGlobalNs</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewNode">xmlNewNode</a> (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewNodeEatName">xmlNewNodeEatName</a> (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> <a href="#xmlNewNs">xmlNewNs</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlNewNsProp">xmlNewNsProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlNewNsPropEatName">xmlNewNsPropEatName</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewPI">xmlNewPI</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlNewProp">xmlNewProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewReference">xmlNewReference</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewText">xmlNewText</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewTextChild">xmlNewTextChild</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlNewTextLen">xmlNewTextLen</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#xmlNodeAddContent">xmlNodeAddContent</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">void <a href="#xmlNodeAddContentLen">xmlNodeAddContentLen</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlNodeBufGetContent">xmlNodeBufGetContent</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">int <a href="#xmlNodeDump">xmlNodeDump</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> int level, <br /> int format)</pre>
+<pre class="programlisting">void <a href="#xmlNodeDumpOutput">xmlNodeDumpOutput</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> int level, <br /> int format, <br /> const char * encoding)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeGetBase">xmlNodeGetBase</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeGetContent">xmlNodeGetContent</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeGetLang">xmlNodeGetLang</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">int <a href="#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">int <a href="#xmlNodeIsText">xmlNodeIsText</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeListGetRawString">xmlNodeListGetRawString</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br /> int inLine)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeListGetString">xmlNodeListGetString</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br /> int inLine)</pre>
+<pre class="programlisting">void <a href="#xmlNodeSetBase">xmlNodeSetBase</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * uri)</pre>
+<pre class="programlisting">void <a href="#xmlNodeSetContent">xmlNodeSetContent</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">void <a href="#xmlNodeSetContentLen">xmlNodeSetContentLen</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#xmlNodeSetLang">xmlNodeSetLang</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * lang)</pre>
+<pre class="programlisting">void <a href="#xmlNodeSetName">xmlNodeSetName</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> int val)</pre>
+<pre class="programlisting">int <a href="#xmlReconciliateNs">xmlReconciliateNs</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree)</pre>
+<pre class="programlisting">int <a href="#xmlRemoveProp">xmlRemoveProp</a> (<a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlReplaceNode">xmlReplaceNode</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> old, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">int <a href="#xmlSaveFile">xmlSaveFile</a> (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)</pre>
+<pre class="programlisting">int <a href="#xmlSaveFileEnc">xmlSaveFileEnc</a> (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)</pre>
+<pre class="programlisting">int <a href="#xmlSaveFileTo">xmlSaveFileTo</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)</pre>
+<pre class="programlisting">int <a href="#xmlSaveFormatFile">xmlSaveFormatFile</a> (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> int format)</pre>
+<pre class="programlisting">int <a href="#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a> (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)</pre>
+<pre class="programlisting">int <a href="#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> <a href="#xmlSearchNs">xmlSearchNs</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> <a href="#xmlSearchNsByHref">xmlSearchNsByHref</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href)</pre>
+<pre class="programlisting">void <a href="#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a> (<a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> scheme)</pre>
+<pre class="programlisting">void <a href="#xmlSetCompressMode">xmlSetCompressMode</a> (int mode)</pre>
+<pre class="programlisting">void <a href="#xmlSetDocCompressMode">xmlSetDocCompressMode</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> int mode)</pre>
+<pre class="programlisting">void <a href="#xmlSetListDoc">xmlSetListDoc</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">void <a href="#xmlSetNs">xmlSetNs</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlSetNsProp">xmlSetNsProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlSetProp">xmlSetProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">void <a href="#xmlSetTreeDoc">xmlSetTreeDoc</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlSplitQName2">xmlSplitQName2</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** prefix)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlSplitQName3">xmlSplitQName3</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int * len)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlStringGetNodeList">xmlStringGetNodeList</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlTextConcat">xmlTextConcat</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlTextMerge">xmlTextMerge</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> first, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> second)</pre>
+<pre class="programlisting">void <a href="#xmlUnlinkNode">xmlUnlinkNode</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">int <a href="#xmlUnsetNsProp">xmlUnsetNsProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlUnsetProp">xmlUnsetProp</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlValidateNCName">xmlValidateNCName</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int space)</pre>
+<pre class="programlisting">int <a href="#xmlValidateNMToken">xmlValidateNMToken</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int space)</pre>
+<pre class="programlisting">int <a href="#xmlValidateName">xmlValidateName</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int space)</pre>
+<pre class="programlisting">int <a href="#xmlValidateQName">xmlValidateQName</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int space)</pre>
+<h2>Description</h2>
+<h3><a name="BASE_BUFFER_SIZE" id="BASE_BUFFER_SIZE"></a>Macro: BASE_BUFFER_SIZE</h3><pre>#define BASE_BUFFER_SIZE</pre><p>default buffer size 4000.</p>
+<h3><a name="XML_GET_CONTENT" id="XML_GET_CONTENT"></a>Macro: XML_GET_CONTENT</h3><pre>#define XML_GET_CONTENT</pre><p>Macro to extract the content pointer of a node.</p>
+<h3><a name="XML_GET_LINE" id="XML_GET_LINE"></a>Macro: XML_GET_LINE</h3><pre>#define XML_GET_LINE</pre><p>Macro to extract the line number of an element node.</p>
+<h3><a name="XML_LOCAL_NAMESPACE" id="XML_LOCAL_NAMESPACE"></a>Macro: XML_LOCAL_NAMESPACE</h3><pre>#define XML_LOCAL_NAMESPACE</pre><p>A namespace declaration node.</p>
+<h3><a name="XML_XML_NAMESPACE" id="XML_XML_NAMESPACE"></a>Macro: XML_XML_NAMESPACE</h3><pre>#define XML_XML_NAMESPACE</pre><p>This is the namespace for the special xml: prefix predefined in the XML Namespace specification.</p>
+<h3><a name="xmlChildrenNode" id="xmlChildrenNode"></a>Macro: xmlChildrenNode</h3><pre>#define xmlChildrenNode</pre><p>Macro for compatibility naming layer with libxml1. Maps to "children."</p>
+<h3><a name="xmlRootNode" id="xmlRootNode"></a>Macro: xmlRootNode</h3><pre>#define xmlRootNode</pre><p>Macro for compatibility naming layer with libxml1. Maps to "children".</p>
+<h3><a name="xmlAttr" id="xmlAttr">Structure xmlAttr</a></h3><pre class="programlisting">Structure xmlAttr<br />struct _xmlAttr {
+ void * _private : application data
+ <a href="libxml-tree.html#xmlElementType">xmlElementType</a> type : XML_ATTRIBUTE_NODE, must be second !
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : the name of the property
+ struct _xmlNode * children : the value of the property
+ struct _xmlNode * last : NULL
+ struct _xmlNode * parent : child-&gt;parent link
+ struct _xmlAttr * next : next sibling link
+ struct _xmlAttr * prev : previous sibling link
+ struct _xmlDoc * doc : the containing document
+ <a href="libxml-tree.html#xmlNs">xmlNs</a> * ns : pointer to the associated namespace
+ <a href="libxml-tree.html#xmlAttributeType">xmlAttributeType</a> atype : the <a href="libxml-SAX.html#attribute">attribute</a> type if validating
+ void * psvi : for type/PSVI informations
+}</pre><h3><a name="xmlAttribute" id="xmlAttribute">Structure xmlAttribute</a></h3><pre class="programlisting">Structure xmlAttribute<br />struct _xmlAttribute {
+ void * _private : application data
+ <a href="libxml-tree.html#xmlElementType">xmlElementType</a> type : XML_ATTRIBUTE_DECL, must be second !
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : Attribute name
+ struct _xmlNode * children : NULL
+ struct _xmlNode * last : NULL
+ struct _xmlDtd * parent : -&gt; DTD
+ struct _xmlNode * next : next sibling link
+ struct _xmlNode * prev : previous sibling link
+ struct _xmlDoc * doc : the containing document
+ struct _xmlAttribute * nexth : next in hash table
+ <a href="libxml-tree.html#xmlAttributeType">xmlAttributeType</a> atype : The <a href="libxml-SAX.html#attribute">attribute</a> type
+ <a href="libxml-tree.html#xmlAttributeDefault">xmlAttributeDefault</a> def : the default
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defaultValue : or the default value
+ <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> tree : or the enumeration tree if any
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix : the namespace prefix if any
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem : Element holding the <a href="libxml-SAX.html#attribute">attribute</a>
+}</pre><h3>Enum <a name="xmlAttributeDefault" id="xmlAttributeDefault">xmlAttributeDefault</a></h3><pre class="programlisting">Enum xmlAttributeDefault {
+ <a name="XML_ATTRIBUTE_NONE" id="XML_ATTRIBUTE_NONE">XML_ATTRIBUTE_NONE</a> = 1
+ <a name="XML_ATTRIBUTE_REQUIRED" id="XML_ATTRIBUTE_REQUIRED">XML_ATTRIBUTE_REQUIRED</a> = 2
+ <a name="XML_ATTRIBUTE_IMPLIED" id="XML_ATTRIBUTE_IMPLIED">XML_ATTRIBUTE_IMPLIED</a> = 3
+ <a name="XML_ATTRIBUTE_FIXED" id="XML_ATTRIBUTE_FIXED">XML_ATTRIBUTE_FIXED</a> = 4
+}
+</pre><h3>Enum <a name="xmlAttributeType" id="xmlAttributeType">xmlAttributeType</a></h3><pre class="programlisting">Enum xmlAttributeType {
+ <a name="XML_ATTRIBUTE_CDATA" id="XML_ATTRIBUTE_CDATA">XML_ATTRIBUTE_CDATA</a> = 1
+ <a name="XML_ATTRIBUTE_ID" id="XML_ATTRIBUTE_ID">XML_ATTRIBUTE_ID</a> = 2
+ <a name="XML_ATTRIBUTE_IDREF" id="XML_ATTRIBUTE_IDREF">XML_ATTRIBUTE_IDREF</a> = 3
+ <a name="XML_ATTRIBUTE_IDREFS" id="XML_ATTRIBUTE_IDREFS">XML_ATTRIBUTE_IDREFS</a> = 4
+ <a name="XML_ATTRIBUTE_ENTITY" id="XML_ATTRIBUTE_ENTITY">XML_ATTRIBUTE_ENTITY</a> = 5
+ <a name="XML_ATTRIBUTE_ENTITIES" id="XML_ATTRIBUTE_ENTITIES">XML_ATTRIBUTE_ENTITIES</a> = 6
+ <a name="XML_ATTRIBUTE_NMTOKEN" id="XML_ATTRIBUTE_NMTOKEN">XML_ATTRIBUTE_NMTOKEN</a> = 7
+ <a name="XML_ATTRIBUTE_NMTOKENS" id="XML_ATTRIBUTE_NMTOKENS">XML_ATTRIBUTE_NMTOKENS</a> = 8
+ <a name="XML_ATTRIBUTE_ENUMERATION" id="XML_ATTRIBUTE_ENUMERATION">XML_ATTRIBUTE_ENUMERATION</a> = 9
+ <a name="XML_ATTRIBUTE_NOTATION" id="XML_ATTRIBUTE_NOTATION">XML_ATTRIBUTE_NOTATION</a> = 10
+}
+</pre><h3><a name="xmlBuffer" id="xmlBuffer">Structure xmlBuffer</a></h3><pre class="programlisting">Structure xmlBuffer<br />struct _xmlBuffer {
+ <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content : The buffer content UTF8
+ unsigned int use : The buffer size used
+ unsigned int size : The buffer size
+ <a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> alloc : The realloc method
+}</pre><h3>Enum <a name="xmlBufferAllocationScheme" id="xmlBufferAllocationScheme">xmlBufferAllocationScheme</a></h3><pre class="programlisting">Enum xmlBufferAllocationScheme {
+ <a name="XML_BUFFER_ALLOC_DOUBLEIT" id="XML_BUFFER_ALLOC_DOUBLEIT">XML_BUFFER_ALLOC_DOUBLEIT</a> = 1
+ <a name="XML_BUFFER_ALLOC_EXACT" id="XML_BUFFER_ALLOC_EXACT">XML_BUFFER_ALLOC_EXACT</a> = 2
+ <a name="XML_BUFFER_ALLOC_IMMUTABLE" id="XML_BUFFER_ALLOC_IMMUTABLE">XML_BUFFER_ALLOC_IMMUTABLE</a> = 3
+}
+</pre><h3><a name="xmlDoc" id="xmlDoc">Structure xmlDoc</a></h3><pre class="programlisting">Structure xmlDoc<br />struct _xmlDoc {
+ void * _private : application data
+ <a href="libxml-tree.html#xmlElementType">xmlElementType</a> type : XML_DOCUMENT_NODE, must be second !
+ char * name : name/filename/URI of the document
+ struct _xmlNode * children : the document tree
+ struct _xmlNode * last : last child link
+ struct _xmlNode * parent : child-&gt;parent link
+ struct _xmlNode * next : next sibling link
+ struct _xmlNode * prev : previous sibling link
+ struct _xmlDoc * doc : autoreference to itself End of common p
+ int compression : level of zlib compression
+ int standalone : standalone document (no external refs)
+ struct _xmlDtd * intSubset : the document internal subset
+ struct _xmlDtd * extSubset : the document external subset
+ struct _xmlNs * oldNs : Global namespace, the old way
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * version : the XML version string
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * encoding : external initial encoding, if any
+ void * ids : Hash table for ID attributes if any
+ void * refs : Hash table for IDREFs attributes if any
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URL : The URI for that document
+ int charset : encoding of the in-memory content actua
+ struct _xmlDict * dict : dict used to allocate names or NULL
+ void * psvi : for type/PSVI informations
+}</pre><h3><a name="xmlDtd" id="xmlDtd">Structure xmlDtd</a></h3><pre class="programlisting">Structure xmlDtd<br />struct _xmlDtd {
+ void * _private : application data
+ <a href="libxml-tree.html#xmlElementType">xmlElementType</a> type : XML_DTD_NODE, must be second !
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : Name of the DTD
+ struct _xmlNode * children : the value of the property link
+ struct _xmlNode * last : last child link
+ struct _xmlDoc * parent : child-&gt;parent link
+ struct _xmlNode * next : next sibling link
+ struct _xmlNode * prev : previous sibling link
+ struct _xmlDoc * doc : the containing document End of common p
+ void * notations : Hash table for notations if any
+ void * elements : Hash table for elements if any
+ void * attributes : Hash table for attributes if any
+ void * entities : Hash table for entities if any
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID : External identifier for PUBLIC DTD
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID : URI for a SYSTEM or PUBLIC DTD
+ void * pentities : Hash table for param entities if any
+}</pre><h3><a name="xmlElement" id="xmlElement">Structure xmlElement</a></h3><pre class="programlisting">Structure xmlElement<br />struct _xmlElement {
+ void * _private : application data
+ <a href="libxml-tree.html#xmlElementType">xmlElementType</a> type : XML_ELEMENT_DECL, must be second !
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : Element name
+ struct _xmlNode * children : NULL
+ struct _xmlNode * last : NULL
+ struct _xmlDtd * parent : -&gt; DTD
+ struct _xmlNode * next : next sibling link
+ struct _xmlNode * prev : previous sibling link
+ struct _xmlDoc * doc : the containing document
+ <a href="libxml-tree.html#xmlElementTypeVal">xmlElementTypeVal</a> etype : The type
+ <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content : the allowed element content
+ <a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> attributes : List of the declared attributes
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix : the namespace prefix if any
+ <a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> contModel : the validating regexp
+ void * contModel
+}</pre><h3><a name="xmlElementContent" id="xmlElementContent">Structure xmlElementContent</a></h3><pre class="programlisting">Structure xmlElementContent<br />struct _xmlElementContent {
+ <a href="libxml-tree.html#xmlElementContentType">xmlElementContentType</a> type : PCDATA, ELEMENT, SEQ or OR
+ <a href="libxml-tree.html#xmlElementContentOccur">xmlElementContentOccur</a> ocur : ONCE, OPT, MULT or PLUS
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : Element name
+ struct _xmlElementContent * c1 : first child
+ struct _xmlElementContent * c2 : second child
+ struct _xmlElementContent * parent : parent
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix : Namespace prefix
+}</pre><h3>Enum <a name="xmlElementContentOccur" id="xmlElementContentOccur">xmlElementContentOccur</a></h3><pre class="programlisting">Enum xmlElementContentOccur {
+ <a name="XML_ELEMENT_CONTENT_ONCE" id="XML_ELEMENT_CONTENT_ONCE">XML_ELEMENT_CONTENT_ONCE</a> = 1
+ <a name="XML_ELEMENT_CONTENT_OPT" id="XML_ELEMENT_CONTENT_OPT">XML_ELEMENT_CONTENT_OPT</a> = 2
+ <a name="XML_ELEMENT_CONTENT_MULT" id="XML_ELEMENT_CONTENT_MULT">XML_ELEMENT_CONTENT_MULT</a> = 3
+ <a name="XML_ELEMENT_CONTENT_PLUS" id="XML_ELEMENT_CONTENT_PLUS">XML_ELEMENT_CONTENT_PLUS</a> = 4
+}
+</pre><h3>Enum <a name="xmlElementContentType" id="xmlElementContentType">xmlElementContentType</a></h3><pre class="programlisting">Enum xmlElementContentType {
+ <a name="XML_ELEMENT_CONTENT_PCDATA" id="XML_ELEMENT_CONTENT_PCDATA">XML_ELEMENT_CONTENT_PCDATA</a> = 1
+ <a name="XML_ELEMENT_CONTENT_ELEMENT" id="XML_ELEMENT_CONTENT_ELEMENT">XML_ELEMENT_CONTENT_ELEMENT</a> = 2
+ <a name="XML_ELEMENT_CONTENT_SEQ" id="XML_ELEMENT_CONTENT_SEQ">XML_ELEMENT_CONTENT_SEQ</a> = 3
+ <a name="XML_ELEMENT_CONTENT_OR" id="XML_ELEMENT_CONTENT_OR">XML_ELEMENT_CONTENT_OR</a> = 4
+}
+</pre><h3>Enum <a name="xmlElementType" id="xmlElementType">xmlElementType</a></h3><pre class="programlisting">Enum xmlElementType {
+ <a name="XML_ELEMENT_NODE" id="XML_ELEMENT_NODE">XML_ELEMENT_NODE</a> = 1
+ <a name="XML_ATTRIBUTE_NODE" id="XML_ATTRIBUTE_NODE">XML_ATTRIBUTE_NODE</a> = 2
+ <a name="XML_TEXT_NODE" id="XML_TEXT_NODE">XML_TEXT_NODE</a> = 3
+ <a name="XML_CDATA_SECTION_NODE" id="XML_CDATA_SECTION_NODE">XML_CDATA_SECTION_NODE</a> = 4
+ <a name="XML_ENTITY_REF_NODE" id="XML_ENTITY_REF_NODE">XML_ENTITY_REF_NODE</a> = 5
+ <a name="XML_ENTITY_NODE" id="XML_ENTITY_NODE">XML_ENTITY_NODE</a> = 6
+ <a name="XML_PI_NODE" id="XML_PI_NODE">XML_PI_NODE</a> = 7
+ <a name="XML_COMMENT_NODE" id="XML_COMMENT_NODE">XML_COMMENT_NODE</a> = 8
+ <a name="XML_DOCUMENT_NODE" id="XML_DOCUMENT_NODE">XML_DOCUMENT_NODE</a> = 9
+ <a name="XML_DOCUMENT_TYPE_NODE" id="XML_DOCUMENT_TYPE_NODE">XML_DOCUMENT_TYPE_NODE</a> = 10
+ <a name="XML_DOCUMENT_FRAG_NODE" id="XML_DOCUMENT_FRAG_NODE">XML_DOCUMENT_FRAG_NODE</a> = 11
+ <a name="XML_NOTATION_NODE" id="XML_NOTATION_NODE">XML_NOTATION_NODE</a> = 12
+ <a name="XML_HTML_DOCUMENT_NODE" id="XML_HTML_DOCUMENT_NODE">XML_HTML_DOCUMENT_NODE</a> = 13
+ <a name="XML_DTD_NODE" id="XML_DTD_NODE">XML_DTD_NODE</a> = 14
+ <a name="XML_ELEMENT_DECL" id="XML_ELEMENT_DECL">XML_ELEMENT_DECL</a> = 15
+ <a name="XML_ATTRIBUTE_DECL" id="XML_ATTRIBUTE_DECL">XML_ATTRIBUTE_DECL</a> = 16
+ <a name="XML_ENTITY_DECL" id="XML_ENTITY_DECL">XML_ENTITY_DECL</a> = 17
+ <a name="XML_NAMESPACE_DECL" id="XML_NAMESPACE_DECL">XML_NAMESPACE_DECL</a> = 18
+ <a name="XML_XINCLUDE_START" id="XML_XINCLUDE_START">XML_XINCLUDE_START</a> = 19
+ <a name="XML_XINCLUDE_END" id="XML_XINCLUDE_END">XML_XINCLUDE_END</a> = 20
+ <a name="XML_DOCB_DOCUMENT_NODE" id="XML_DOCB_DOCUMENT_NODE">XML_DOCB_DOCUMENT_NODE</a> = 21
+}
+</pre><h3>Enum <a name="xmlElementTypeVal" id="xmlElementTypeVal">xmlElementTypeVal</a></h3><pre class="programlisting">Enum xmlElementTypeVal {
+ <a name="XML_ELEMENT_TYPE_UNDEFINED" id="XML_ELEMENT_TYPE_UNDEFINED">XML_ELEMENT_TYPE_UNDEFINED</a> = 0
+ <a name="XML_ELEMENT_TYPE_EMPTY" id="XML_ELEMENT_TYPE_EMPTY">XML_ELEMENT_TYPE_EMPTY</a> = 1
+ <a name="XML_ELEMENT_TYPE_ANY" id="XML_ELEMENT_TYPE_ANY">XML_ELEMENT_TYPE_ANY</a> = 2
+ <a name="XML_ELEMENT_TYPE_MIXED" id="XML_ELEMENT_TYPE_MIXED">XML_ELEMENT_TYPE_MIXED</a> = 3
+ <a name="XML_ELEMENT_TYPE_ELEMENT" id="XML_ELEMENT_TYPE_ELEMENT">XML_ELEMENT_TYPE_ELEMENT</a> = 4
+}
+</pre><h3><a name="xmlEntity" id="xmlEntity">Structure xmlEntity</a></h3><pre class="programlisting">Structure xmlEntity<br />struct _xmlEntity {
+ void * _private : application data
+ <a href="libxml-tree.html#xmlElementType">xmlElementType</a> type : XML_ENTITY_DECL, must be second !
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : Entity name
+ struct _xmlNode * children : First child link
+ struct _xmlNode * last : Last child link
+ struct _xmlDtd * parent : -&gt; DTD
+ struct _xmlNode * next : next sibling link
+ struct _xmlNode * prev : previous sibling link
+ struct _xmlDoc * doc : the containing document
+ <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * orig : content without ref substitution
+ <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content : content or ndata if unparsed
+ int length : the content length
+ <a href="libxml-entities.html#xmlEntityType">xmlEntityType</a> etype : The entity type
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID : External identifier for PUBLIC
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID : URI for a SYSTEM or PUBLIC Entity
+ struct _xmlEntity * nexte : unused
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI : the full URI as computed
+ int owner : does the entity own the childrens
+}</pre><h3><a name="xmlEnumeration" id="xmlEnumeration">Structure xmlEnumeration</a></h3><pre class="programlisting">Structure xmlEnumeration<br />struct _xmlEnumeration {
+ struct _xmlEnumeration * next : next one
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : Enumeration name
+}</pre><h3><a name="xmlID" id="xmlID">Structure xmlID</a></h3><pre class="programlisting">Structure xmlID<br />struct _xmlID {
+ struct _xmlID * next : next ID
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value : The ID name
+ <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr : The <a href="libxml-SAX.html#attribute">attribute</a> holding it
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : The <a href="libxml-SAX.html#attribute">attribute</a> if attr is not available
+ int lineno : The line number if attr is not availabl
+ struct _xmlDoc * doc : The document holding the ID
+}</pre><h3><a name="xmlNode" id="xmlNode">Structure xmlNode</a></h3><pre class="programlisting">Structure xmlNode<br />struct _xmlNode {
+ void * _private : application data
+ <a href="libxml-tree.html#xmlElementType">xmlElementType</a> type : type number, must be second !
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : the name of the node, or the entity
+ struct _xmlNode * children : parent-&gt;childs link
+ struct _xmlNode * last : last child link
+ struct _xmlNode * parent : child-&gt;parent link
+ struct _xmlNode * next : next sibling link
+ struct _xmlNode * prev : previous sibling link
+ struct _xmlDoc * doc : the containing document End of common p
+ <a href="libxml-tree.html#xmlNs">xmlNs</a> * ns : pointer to the associated namespace
+ <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content : the content
+ struct _xmlAttr * properties : properties list
+ <a href="libxml-tree.html#xmlNs">xmlNs</a> * nsDef : namespace definitions on this node
+ void * psvi : for type/PSVI informations
+ unsigned short line : line number
+ unsigned short extra : extra data for XPath/XSLT
+}</pre><h3><a name="xmlNotation" id="xmlNotation">Structure xmlNotation</a></h3><pre class="programlisting">Structure xmlNotation<br />struct _xmlNotation {
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : Notation name
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * PublicID : Public identifier, if any
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID : System identifier, if any
+}</pre><h3><a name="xmlNs" id="xmlNs">Structure xmlNs</a></h3><pre class="programlisting">Structure xmlNs<br />struct _xmlNs {
+ struct _xmlNs * next : next Ns link for this node
+ <a href="libxml-tree.html#xmlNsType">xmlNsType</a> type : global or local
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href : URL for the namespace
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix : prefix for the namespace
+ void * _private : application data
+}</pre><h3><a name="xmlOutputBuffer" id="xmlOutputBuffer">Structure xmlOutputBuffer</a></h3><pre class="programlisting">Structure xmlOutputBuffer<br />struct _xmlOutputBuffer {
+ void * context
+ <a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> writecallback
+ <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> closecallback
+ <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder : I18N conversions to UTF-8
+ <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer : Local buffer encoded in UTF-8 or ISOLat
+ <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> conv : if encoder != NULL buffer for output
+ int written : total number of byte written
+ int error
+}</pre><h3><a name="xmlParserCtxt" id="xmlParserCtxt">Structure xmlParserCtxt</a></h3><pre class="programlisting">Structure xmlParserCtxt<br />struct _xmlParserCtxt {
+ struct _xmlSAXHandler * sax : The SAX handler
+ void * userData : For SAX interface only, used by DOM bui
+ <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> myDoc : the document being built
+ int wellFormed : is the document well formed
+ int replaceEntities : shall we replace entities ?
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * version : the XML version string
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * encoding : the declared encoding, if any
+ int standalone : standalone document
+ int html : an HTML(1)/Docbook(2) document Input st
+ <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input : Current input stream
+ int inputNr : Number of current input streams
+ int inputMax : Max number of input streams
+ <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> * inputTab : stack of inputs Node analysis stack onl
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node : Current parsed Node
+ int nodeNr : Depth of the parsing stack
+ int nodeMax : Max depth of the parsing stack
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * nodeTab : array of nodes
+ int record_info : Whether node info should be kept
+ <a href="libxml-parser.html#xmlParserNodeInfoSeq">xmlParserNodeInfoSeq</a> node_seq : info about each node parsed
+ int errNo : error code
+ int hasExternalSubset : <a href="libxml-SAX.html#reference">reference</a> and external subset
+ int hasPErefs : the internal subset has PE refs
+ int external : are we parsing an external entity
+ int valid : is the document valid
+ int validate : shall we try to validate ?
+ <a href="libxml-valid.html#xmlValidCtxt">xmlValidCtxt</a> vctxt : The validity context
+ <a href="libxml-parser.html#xmlParserInputState">xmlParserInputState</a> instate : current type of input
+ int token : next char look-ahead
+ char * directory : the data directory Node name stack
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : Current parsed Node
+ int nameNr : Depth of the parsing stack
+ int nameMax : Max depth of the parsing stack
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * * nameTab : array of nodes
+ long nbChars : number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> processed
+ long checkIndex : used by progressive parsing lookup
+ int keepBlanks : ugly but ...
+ int disableSAX : SAX callbacks are disabled
+ int inSubset : Parsing is in int 1/ext 2 subset
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * intSubName : name of subset
+ <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * extSubURI : URI of external subset
+ <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * extSubSystem : SYSTEM ID of external subset xml:space
+ int * space : Should the parser preserve spaces
+ int spaceNr : Depth of the parsing stack
+ int spaceMax : Max depth of the parsing stack
+ int * spaceTab : array of space infos
+ int depth : to prevent entity substitution loops
+ <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> entity : used to check entities boundaries
+ int charset : encoding of the in-memory content actua
+ int nodelen : Those two fields are there to
+ int nodemem : Speed up large node parsing
+ int pedantic : signal pedantic warnings
+ void * _private : For user data, libxml won't touch it
+ int loadsubset : should the external subset be loaded
+ int linenumbers : set line number in element content
+ void * catalogs : document's own catalog
+ int recovery : run in recovery mode
+ int progressive : is this a progressive parsing
+ <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict : dictionnary for the parser
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * * atts : array for the attributes callbacks
+ int maxatts : the size of the array
+ int docdict : * pre-interned strings *
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str_xml
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str_xmlns
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str_xml_ns : * Everything below is used only by the n
+ int sax2 : operating in the new SAX mode
+ int nsNr : the number of inherited namespaces
+ int nsMax : the size of the arrays
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * * nsTab : the array of prefix/namespace name
+ int * attallocs : which <a href="libxml-SAX.html#attribute">attribute</a> were allocated
+ void * * pushTab : array of data for push
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> attsDefault : defaulted attributes if any
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> attsSpecial : non-CDATA attributes if any
+ int nsWellFormed : is the document XML Nanespace okay
+ int options : * Those fields are needed only for tream
+ int dictNames : Use dictionary names for the tree
+ int freeElemsNr : number of freed element nodes
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> freeElems : List of freed element nodes
+ int freeAttrsNr : number of freed attributes nodes
+ <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> freeAttrs : * the complete error informations for th
+ <a href="libxml-xmlerror.html#xmlError">xmlError</a> lastError
+}</pre><h3><a name="xmlParserInput" id="xmlParserInput">Structure xmlParserInput</a></h3><pre class="programlisting">Structure xmlParserInput<br />struct _xmlParserInput {
+ <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> buf : UTF-8 encoded buffer
+ const char * filename : The file analyzed, if any
+ const char * directory : the directory/base of the file
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * base : Base of the array to parse
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur : Current char being parsed
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * end : end of the array to parse
+ int length : length if known
+ int line : Current line
+ int col : * NOTE: consumed is only tested for equa
+ unsigned long consumed : How many xmlChars already consumed
+ <a href="libxml-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a> free : function to deallocate the base
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * encoding : the encoding string for entity
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * version : the version string for entity
+ int standalone : Was that entity marked standalone
+ int id : an unique identifier for the entity
+}</pre><h3><a name="xmlParserInputBuffer" id="xmlParserInputBuffer">Structure xmlParserInputBuffer</a></h3><pre class="programlisting">Structure xmlParserInputBuffer<br />struct _xmlParserInputBuffer {
+ void * context
+ <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> readcallback
+ <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> closecallback
+ <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder : I18N conversions to UTF-8
+ <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer : Local buffer encoded in UTF-8
+ <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> raw : if encoder != NULL buffer for raw input
+ int compressed : -1=unknown, 0=not compressed, 1=compres
+ int error
+ unsigned long rawconsumed : amount consumed from raw
+}</pre><h3><a name="xmlRef" id="xmlRef">Structure xmlRef</a></h3><pre class="programlisting">Structure xmlRef<br />struct _xmlRef {
+ struct _xmlRef * next : next Ref
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value : The Ref name
+ <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr : The <a href="libxml-SAX.html#attribute">attribute</a> holding it
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : The <a href="libxml-SAX.html#attribute">attribute</a> if attr is not available
+ int lineno : The line number if attr is not availabl
+}</pre><h3><a name="xmlSAXHandler" id="xmlSAXHandler">Structure xmlSAXHandler</a></h3><pre class="programlisting">Structure xmlSAXHandler<br />struct _xmlSAXHandler {
+ <a href="libxml-parser.html#internalSubsetSAXFunc">internalSubsetSAXFunc</a> internalSubset
+ <a href="libxml-parser.html#isStandaloneSAXFunc">isStandaloneSAXFunc</a> isStandalone
+ <a href="libxml-parser.html#hasInternalSubsetSAXFunc">hasInternalSubsetSAXFunc</a> hasInternalSubset
+ <a href="libxml-parser.html#hasExternalSubsetSAXFunc">hasExternalSubsetSAXFunc</a> hasExternalSubset
+ <a href="libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a> resolveEntity
+ <a href="libxml-parser.html#getEntitySAXFunc">getEntitySAXFunc</a> getEntity
+ <a href="libxml-parser.html#entityDeclSAXFunc">entityDeclSAXFunc</a> entityDecl
+ <a href="libxml-parser.html#notationDeclSAXFunc">notationDeclSAXFunc</a> notationDecl
+ <a href="libxml-parser.html#attributeDeclSAXFunc">attributeDeclSAXFunc</a> attributeDecl
+ <a href="libxml-parser.html#elementDeclSAXFunc">elementDeclSAXFunc</a> elementDecl
+ <a href="libxml-parser.html#unparsedEntityDeclSAXFunc">unparsedEntityDeclSAXFunc</a> unparsedEntityDecl
+ <a href="libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a> setDocumentLocator
+ <a href="libxml-parser.html#startDocumentSAXFunc">startDocumentSAXFunc</a> startDocument
+ <a href="libxml-parser.html#endDocumentSAXFunc">endDocumentSAXFunc</a> endDocument
+ <a href="libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a> startElement
+ <a href="libxml-parser.html#endElementSAXFunc">endElementSAXFunc</a> endElement
+ <a href="libxml-parser.html#referenceSAXFunc">referenceSAXFunc</a> reference
+ <a href="libxml-parser.html#charactersSAXFunc">charactersSAXFunc</a> characters
+ <a href="libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a> ignorableWhitespace
+ <a href="libxml-parser.html#processingInstructionSAXFunc">processingInstructionSAXFunc</a> processingInstruction
+ <a href="libxml-parser.html#commentSAXFunc">commentSAXFunc</a> comment
+ <a href="libxml-parser.html#warningSAXFunc">warningSAXFunc</a> warning
+ <a href="libxml-parser.html#errorSAXFunc">errorSAXFunc</a> error
+ <a href="libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a> fatalError : unused error() get all the errors
+ <a href="libxml-parser.html#getParameterEntitySAXFunc">getParameterEntitySAXFunc</a> getParameterEntity
+ <a href="libxml-parser.html#cdataBlockSAXFunc">cdataBlockSAXFunc</a> cdataBlock
+ <a href="libxml-parser.html#externalSubsetSAXFunc">externalSubsetSAXFunc</a> externalSubset
+ unsigned int initialized : The following fields are extensions ava
+ void * _private
+ <a href="libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a> startElementNs
+ <a href="libxml-parser.html#endElementNsSAX2Func">endElementNsSAX2Func</a> endElementNs
+ <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> serror
+}</pre><h3><a name="xmlSAXLocator" id="xmlSAXLocator">Structure xmlSAXLocator</a></h3><pre class="programlisting">Structure xmlSAXLocator<br />struct _xmlSAXLocator {
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *(*getPublicId) getPublicId
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *(*getSystemId) getSystemId
+ int(*getLineNumber) getLineNumber
+ int(*getColumnNumber) getColumnNumber
+}</pre><h3><a name="xmlAddChild" id="xmlAddChild"></a>Function: xmlAddChild</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlAddChild (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Add a new node to @parent, at the end of the child (or property) list merging adjacent TEXT nodes (in which case @cur is freed) If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an <a href="libxml-SAX.html#attribute">attribute</a> with equal name, it is first destroyed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>the parent node</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the child node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the child or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlAddChildList" id="xmlAddChildList"></a>Function: xmlAddChildList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlAddChildList (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Add a list of node at the end of the child list of the parent merging adjacent TEXT nodes (@cur may be freed)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>the parent node</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the first node in the list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the last child or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlAddNextSibling" id="xmlAddNextSibling"></a>Function: xmlAddNextSibling</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlAddNextSibling (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br />
+</pre><p>Add a new node @elem as the next sibling of @cur If the new node was already inserted in a document it is first unlinked from its existing context. As a result of text merging @elem may be freed. If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an <a href="libxml-SAX.html#attribute">attribute</a> with equal name, it is first destroyed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the child node</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the new node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new node or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlAddPrevSibling" id="xmlAddPrevSibling"></a>Function: xmlAddPrevSibling</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlAddPrevSibling (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br />
+</pre><p>Add a new node @elem as the previous sibling of @cur merging adjacent TEXT nodes (@elem may be freed) If the new node was already inserted in a document it is first unlinked from its existing context. If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an <a href="libxml-SAX.html#attribute">attribute</a> with equal name, it is first destroyed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the child node</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the new node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new node or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlAddSibling" id="xmlAddSibling"></a>Function: xmlAddSibling</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlAddSibling (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br />
+</pre><p>Add a new element @elem to the list of siblings of @cur merging adjacent TEXT nodes (@elem may be freed) If the new element was already inserted in a document it is first unlinked from its existing context.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the child node</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the new node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new element or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlAttrSerializeTxtContent" id="xmlAttrSerializeTxtContent"></a>Function: xmlAttrSerializeTxtContent</h3><pre class="programlisting">void xmlAttrSerializeTxtContent (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string)<br />
+</pre><p>Serialize text <a href="libxml-SAX.html#attribute">attribute</a> values to an xml simple buffer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> node</td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>the text content</td></tr></tbody></table></div><h3><a name="xmlBufferAdd" id="xmlBufferAdd"></a>Function: xmlBufferAdd</h3><pre class="programlisting">void xmlBufferAdd (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int len)<br />
+</pre><p>Add a string range to an XML buffer. if len == -1, the length of str is recomputed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the #xmlChar string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of #xmlChar to add</td></tr></tbody></table></div><h3><a name="xmlBufferAddHead" id="xmlBufferAddHead"></a>Function: xmlBufferAddHead</h3><pre class="programlisting">void xmlBufferAddHead (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int len)<br />
+</pre><p>Add a string range to the beginning of an XML buffer. if len == -1, the length of @str is recomputed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the #xmlChar string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of #xmlChar to add</td></tr></tbody></table></div><h3><a name="xmlBufferCCat" id="xmlBufferCCat"></a>Function: xmlBufferCCat</h3><pre class="programlisting">void xmlBufferCCat (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const char * str)<br />
+</pre><p>Append a zero terminated C string to an XML buffer.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the C char string</td></tr></tbody></table></div><h3><a name="xmlBufferCat" id="xmlBufferCat"></a>Function: xmlBufferCat</h3><pre class="programlisting">void xmlBufferCat (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>Append a zero terminated string to an XML buffer.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the #xmlChar string</td></tr></tbody></table></div><h3><a name="xmlBufferContent" id="xmlBufferContent"></a>Function: xmlBufferContent</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlBufferContent (const <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)<br />
+</pre><p>Function to extract the content of a buffer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal content</td></tr></tbody></table></div><h3><a name="xmlBufferCreate" id="xmlBufferCreate"></a>Function: xmlBufferCreate</h3><pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> xmlBufferCreate (void)<br />
+</pre><p>routine to create an XML buffer.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new structure.</td></tr></tbody></table></div><h3><a name="xmlBufferCreateSize" id="xmlBufferCreateSize"></a>Function: xmlBufferCreateSize</h3><pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> xmlBufferCreateSize (size_t size)<br />
+</pre><p>routine to create an XML buffer.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>initial size of buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new structure.</td></tr></tbody></table></div><h3><a name="xmlBufferCreateStatic" id="xmlBufferCreateStatic"></a>Function: xmlBufferCreateStatic</h3><pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> xmlBufferCreateStatic (void * mem, <br /> size_t size)<br />
+</pre><p>routine to create an XML buffer from an immutable memory area. The area won't be modified nor copied, and is expected to be present until the end of the buffer lifetime.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>mem</tt></i>:</span></td><td>the memory area</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size in byte</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new structure.</td></tr></tbody></table></div><h3><a name="xmlBufferDump" id="xmlBufferDump"></a>Function: xmlBufferDump</h3><pre class="programlisting">int xmlBufferDump (FILE * file, <br /> <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)<br />
+</pre><p>Dumps an XML buffer to a FILE *.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>the file output</td></tr><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of #xmlChar written</td></tr></tbody></table></div><h3><a name="xmlBufferEmpty" id="xmlBufferEmpty"></a>Function: xmlBufferEmpty</h3><pre class="programlisting">void xmlBufferEmpty (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)<br />
+</pre><p>empty a buffer.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr></tbody></table></div><h3><a name="xmlBufferFree" id="xmlBufferFree"></a>Function: xmlBufferFree</h3><pre class="programlisting">void xmlBufferFree (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)<br />
+</pre><p>Frees an XML buffer. It frees both the content and the structure which encapsulate it.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to free</td></tr></tbody></table></div><h3><a name="xmlBufferGrow" id="xmlBufferGrow"></a>Function: xmlBufferGrow</h3><pre class="programlisting">int xmlBufferGrow (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> unsigned int len)<br />
+</pre><p>Grow the available space of an XML buffer.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the minimum free size to allocate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new available space or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlBufferLength" id="xmlBufferLength"></a>Function: xmlBufferLength</h3><pre class="programlisting">int xmlBufferLength (const <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)<br />
+</pre><p>Function to get the length of a buffer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the length of data in the internal content</td></tr></tbody></table></div><h3><a name="xmlBufferResize" id="xmlBufferResize"></a>Function: xmlBufferResize</h3><pre class="programlisting">int xmlBufferResize (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> unsigned int size)<br />
+</pre><p>Resize a buffer to accommodate minimum size of @size.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to resize</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the desired size</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of problems, 1 otherwise</td></tr></tbody></table></div><h3><a name="xmlBufferSetAllocationScheme" id="xmlBufferSetAllocationScheme"></a>Function: xmlBufferSetAllocationScheme</h3><pre class="programlisting">void xmlBufferSetAllocationScheme (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> scheme)<br />
+</pre><p>Sets the allocation scheme for this buffer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to tune</td></tr><tr><td><span class="term"><i><tt>scheme</tt></i>:</span></td><td>allocation scheme to use</td></tr></tbody></table></div><h3><a name="xmlBufferShrink" id="xmlBufferShrink"></a>Function: xmlBufferShrink</h3><pre class="programlisting">int xmlBufferShrink (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> unsigned int len)<br />
+</pre><p>Remove the beginning of an XML buffer.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> to remove</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of #xmlChar removed, or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlBufferWriteCHAR" id="xmlBufferWriteCHAR"></a>Function: xmlBufferWriteCHAR</h3><pre class="programlisting">void xmlBufferWriteCHAR (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string)<br />
+</pre><p>routine which manages and grows an output buffer. This one adds xmlChars at the end of 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>the XML buffer</td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>the string to add</td></tr></tbody></table></div><h3><a name="xmlBufferWriteChar" id="xmlBufferWriteChar"></a>Function: xmlBufferWriteChar</h3><pre class="programlisting">void xmlBufferWriteChar (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const char * string)<br />
+</pre><p>routine which manage and grows an output buffer. This one add C chars at the end of the array.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>the string to add</td></tr></tbody></table></div><h3><a name="xmlBufferWriteQuotedString" id="xmlBufferWriteQuotedString"></a>Function: xmlBufferWriteQuotedString</h3><pre class="programlisting">void xmlBufferWriteQuotedString (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string)<br />
+</pre><p>routine which manage and grows an output buffer. This one writes a quoted or double quoted #xmlChar string, checking first if it holds quote or double-quotes internally</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>the string to add</td></tr></tbody></table></div><h3><a name="xmlBuildQName" id="xmlBuildQName"></a>Function: xmlBuildQName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlBuildQName (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ncname, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * memory, <br /> int len)<br />
+</pre><p>Builds the QName @prefix:@ncname in @memory if there is enough space and prefix is not NULL nor empty, otherwise allocate a new string. If prefix is NULL or empty it returns ncname.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ncname</tt></i>:</span></td><td>the Name</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix</td></tr><tr><td><span class="term"><i><tt>memory</tt></i>:</span></td><td>preallocated memory</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>preallocated memory length</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new string which must be freed by the caller if different from @memory and @ncname or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlCopyDoc" id="xmlCopyDoc"></a>Function: xmlCopyDoc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlCopyDoc (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> int recursive)<br />
+</pre><p>Do a copy of the document info. If recursive, the content tree will be copied too as well as DTD, namespaces and entities.</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>recursive</tt></i>:</span></td><td>if not zero do a recursive copy.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlDocPtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyDtd" id="xmlCopyDtd"></a>Function: xmlCopyDtd</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> xmlCopyDtd (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd)<br />
+</pre><p>Do a copy of the dtd.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>the dtd</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlDtdPtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNamespace" id="xmlCopyNamespace"></a>Function: xmlCopyNamespace</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> xmlCopyNamespace (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)<br />
+</pre><p>Do a copy of the namespace.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNsPtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNamespaceList" id="xmlCopyNamespaceList"></a>Function: xmlCopyNamespaceList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> xmlCopyNamespaceList (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)<br />
+</pre><p>Do a copy of an namespace list.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the first namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNsPtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNode" id="xmlCopyNode"></a>Function: xmlCopyNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlCopyNode (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int extended)<br />
+</pre><p>Do a copy of the node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>extended</tt></i>:</span></td><td>if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNodeList" id="xmlCopyNodeList"></a>Function: xmlCopyNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlCopyNodeList (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Do a recursive copy of the node list.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the first node in the list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyProp" id="xmlCopyProp"></a>Function: xmlCopyProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlCopyProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> target, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)<br />
+</pre><p>Do a copy of the attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>the element where the <a href="libxml-SAX.html#attribute">attribute</a> will be grafted</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>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 new #xmlAttrPtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyPropList" id="xmlCopyPropList"></a>Function: xmlCopyPropList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlCopyPropList (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> target, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)<br />
+</pre><p>Do a copy of an <a href="libxml-SAX.html#attribute">attribute</a> list.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>the element where the attributes will be grafted</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the first <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlAttrPtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCreateIntSubset" id="xmlCreateIntSubset"></a>Function: xmlCreateIntSubset</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> xmlCreateIntSubset (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>Create the internal subset of a document</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document pointer</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the DTD name</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external (PUBLIC) ID</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the system ID</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new DTD structure</td></tr></tbody></table></div><h3><a name="xmlDocCopyNode" id="xmlDocCopyNode"></a>Function: xmlDocCopyNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlDocCopyNode (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> int extended)<br />
+</pre><p>Do a copy of the node to a given document.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>extended</tt></i>:</span></td><td>if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlDocDump" id="xmlDocDump"></a>Function: xmlDocDump</h3><pre class="programlisting">int xmlDocDump (FILE * f, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)<br />
+</pre><p>Dump an XML document to an open FILE.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the FILE*</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlDocDumpFormatMemory" id="xmlDocDumpFormatMemory"></a>Function: xmlDocDumpFormatMemory</h3><pre class="programlisting">void xmlDocDumpFormatMemory (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br /> int * size, <br /> int format)<br />
+</pre><p>Dump an XML document in memory and return the #xmlChar * and it's size. It's up to the caller to free the memory with xmlFree(). Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>mem</tt></i>:</span></td><td>OUT: the memory pointer</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>OUT: the memory length</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr></tbody></table></div><h3><a name="xmlDocDumpFormatMemoryEnc" id="xmlDocDumpFormatMemoryEnc"></a>Function: xmlDocDumpFormatMemoryEnc</h3><pre class="programlisting">void xmlDocDumpFormatMemoryEnc (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> out_doc, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr, <br /> int * doc_txt_len, <br /> const char * txt_encoding, <br /> int format)<br />
+</pre><p>Dump the current DOM tree into memory using the character encoding specified by the caller. Note it is up to the caller of this function to free the allocated memory with xmlFree(). Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out_doc</tt></i>:</span></td><td>Document to generate XML text from</td></tr><tr><td><span class="term"><i><tt>doc_txt_ptr</tt></i>:</span></td><td>Memory pointer for allocated XML text</td></tr><tr><td><span class="term"><i><tt>doc_txt_len</tt></i>:</span></td><td>Length of the generated XML text</td></tr><tr><td><span class="term"><i><tt>txt_encoding</tt></i>:</span></td><td>Character encoding to use when generating XML text</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr></tbody></table></div><h3><a name="xmlDocDumpMemory" id="xmlDocDumpMemory"></a>Function: xmlDocDumpMemory</h3><pre class="programlisting">void xmlDocDumpMemory (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br /> int * size)<br />
+</pre><p>Dump an XML document in memory and return the #xmlChar * and it's size in bytes. It's up to the caller to free the memory with xmlFree(). The resulting byte array is zero terminated, though the last 0 is not included in the returned size.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>mem</tt></i>:</span></td><td>OUT: the memory pointer</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>OUT: the memory length</td></tr></tbody></table></div><h3><a name="xmlDocDumpMemoryEnc" id="xmlDocDumpMemoryEnc"></a>Function: xmlDocDumpMemoryEnc</h3><pre class="programlisting">void xmlDocDumpMemoryEnc (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> out_doc, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr, <br /> int * doc_txt_len, <br /> const char * txt_encoding)<br />
+</pre><p>Dump the current DOM tree into memory using the character encoding specified by the caller. Note it is up to the caller of this function to free the allocated memory with xmlFree().</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out_doc</tt></i>:</span></td><td>Document to generate XML text from</td></tr><tr><td><span class="term"><i><tt>doc_txt_ptr</tt></i>:</span></td><td>Memory pointer for allocated XML text</td></tr><tr><td><span class="term"><i><tt>doc_txt_len</tt></i>:</span></td><td>Length of the generated XML text</td></tr><tr><td><span class="term"><i><tt>txt_encoding</tt></i>:</span></td><td>Character encoding to use when generating XML text</td></tr></tbody></table></div><h3><a name="xmlDocFormatDump" id="xmlDocFormatDump"></a>Function: xmlDocFormatDump</h3><pre class="programlisting">int xmlDocFormatDump (FILE * f, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> int format)<br />
+</pre><p>Dump an XML document to an open FILE.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the FILE*</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</td></tr></tbody></table></div><h3><a name="xmlDocGetRootElement" id="xmlDocGetRootElement"></a>Function: xmlDocGetRootElement</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlDocGetRootElement (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Get the root element of the document (doc-&gt;children is a list containing possibly comments, PIs, etc ...).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the #xmlNodePtr for the root or NULL</td></tr></tbody></table></div><h3><a name="xmlDocSetRootElement" id="xmlDocSetRootElement"></a>Function: xmlDocSetRootElement</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlDocSetRootElement (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> root)<br />
+</pre><p>Set the root element of the document (doc-&gt;children is a list containing possibly comments, PIs, etc ...).</p>
+<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>root</tt></i>:</span></td><td>the new document root element</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the old root element if any was found</td></tr></tbody></table></div><h3><a name="xmlElemDump" id="xmlElemDump"></a>Function: xmlElemDump</h3><pre class="programlisting">void xmlElemDump (FILE * f, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Dump an XML/HTML node, recursive behaviour, children are printed too.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr></tbody></table></div><h3><a name="xmlFreeDoc" id="xmlFreeDoc"></a>Function: xmlFreeDoc</h3><pre class="programlisting">void xmlFreeDoc (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)<br />
+</pre><p>Free up all the structures used by a document, tree included.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>pointer to the document</td></tr></tbody></table></div><h3><a name="xmlFreeDtd" id="xmlFreeDtd"></a>Function: xmlFreeDtd</h3><pre class="programlisting">void xmlFreeDtd (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> cur)<br />
+</pre><p>Free a DTD structure.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the DTD structure to free up</td></tr></tbody></table></div><h3><a name="xmlFreeNode" id="xmlFreeNode"></a>Function: xmlFreeNode</h3><pre class="programlisting">void xmlFreeNode (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Free a node, this is a recursive behaviour, all the children are freed too. This doesn't unlink the child from the list, use xmlUnlinkNode() first.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node</td></tr></tbody></table></div><h3><a name="xmlFreeNodeList" id="xmlFreeNodeList"></a>Function: xmlFreeNodeList</h3><pre class="programlisting">void xmlFreeNodeList (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Free a node and all its siblings, this is a recursive behaviour, all the children are freed too.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the first node in the list</td></tr></tbody></table></div><h3><a name="xmlFreeNs" id="xmlFreeNs"></a>Function: xmlFreeNs</h3><pre class="programlisting">void xmlFreeNs (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)<br />
+</pre><p>Free up the structures associated to a namespace</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the namespace pointer</td></tr></tbody></table></div><h3><a name="xmlFreeNsList" id="xmlFreeNsList"></a>Function: xmlFreeNsList</h3><pre class="programlisting">void xmlFreeNsList (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)<br />
+</pre><p>Free up all the structures associated to the chained namespaces.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the first namespace pointer</td></tr></tbody></table></div><h3><a name="xmlFreeProp" id="xmlFreeProp"></a>Function: xmlFreeProp</h3><pre class="programlisting">void xmlFreeProp (<a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)<br />
+</pre><p>Free one attribute, all the content is freed too</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>an <a href="libxml-SAX.html#attribute">attribute</a></td></tr></tbody></table></div><h3><a name="xmlFreePropList" id="xmlFreePropList"></a>Function: xmlFreePropList</h3><pre class="programlisting">void xmlFreePropList (<a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)<br />
+</pre><p>Free a property and all its siblings, all the children are freed too.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the first property in the list</td></tr></tbody></table></div><h3><a name="xmlGetBufferAllocationScheme" id="xmlGetBufferAllocationScheme"></a>Function: xmlGetBufferAllocationScheme</h3><pre class="programlisting"><a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> xmlGetBufferAllocationScheme (void)<br />
+</pre><p>Types are <a href="libxml-tree.html#XML_BUFFER_ALLOC_EXACT">XML_BUFFER_ALLOC_EXACT</a> - use exact sizes, keeps memory usage down <a href="libxml-tree.html#XML_BUFFER_ALLOC_DOUBLEIT">XML_BUFFER_ALLOC_DOUBLEIT</a> - double buffer when extra needed, improves performance</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the current allocation scheme</td></tr></tbody></table></div><h3><a name="xmlGetCompressMode" id="xmlGetCompressMode"></a>Function: xmlGetCompressMode</h3><pre class="programlisting">int xmlGetCompressMode (void)<br />
+</pre><p>get the default compression mode used, ZLIB based.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 (uncompressed) to 9 (max compression)</td></tr></tbody></table></div><h3><a name="xmlGetDocCompressMode" id="xmlGetDocCompressMode"></a>Function: xmlGetDocCompressMode</h3><pre class="programlisting">int xmlGetDocCompressMode (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>get the compression ratio for a document, ZLIB based</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 (uncompressed) to 9 (max compression)</td></tr></tbody></table></div><h3><a name="xmlGetIntSubset" id="xmlGetIntSubset"></a>Function: xmlGetIntSubset</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> xmlGetIntSubset (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Get the internal subset of a document</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document pointer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the DTD structure or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlGetLastChild" id="xmlGetLastChild"></a>Function: xmlGetLastChild</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlGetLastChild (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent)<br />
+</pre><p>Search the last child of a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>the parent node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the last child or NULL if none.</td></tr></tbody></table></div><h3><a name="xmlGetLineNo" id="xmlGetLineNo"></a>Function: xmlGetLineNo</h3><pre class="programlisting">long xmlGetLineNo (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Get line number of @node. This requires activation of this option before invoking the parser by calling xmlLineNumbersDefault(1)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>valid node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the line number if successful, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlGetNoNsProp" id="xmlGetNoNsProp"></a>Function: xmlGetNoNsProp</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlGetNoNsProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Search and get the value of an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This does the entity substitution. This function looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off. This function is similar to <a href="libxml-tree.html#xmlGetProp">xmlGetProp</a> except it will accept only an <a href="libxml-SAX.html#attribute">attribute</a> in no namespace.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlGetNodePath" id="xmlGetNodePath"></a>Function: xmlGetNodePath</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlGetNodePath (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Build a structure based Path for the given node</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new path or NULL in case of error. The caller must free the returned string</td></tr></tbody></table></div><h3><a name="xmlGetNsList" id="xmlGetNsList"></a>Function: xmlGetNsList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> * xmlGetNsList (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Search all the namespace applying to a given element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an NULL terminated array of all the #xmlNsPtr found that need to be freed by the caller or NULL if no namespace if defined</td></tr></tbody></table></div><h3><a name="xmlGetNsProp" id="xmlGetNsProp"></a>Function: xmlGetNsProp</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlGetNsProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br />
+</pre><p>Search and get the value of an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This <a href="libxml-SAX.html#attribute">attribute</a> has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the URI of the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlGetProp" id="xmlGetProp"></a>Function: xmlGetProp</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlGetProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Search and get the value of an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This does the entity substitution. This function looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off. NOTE: this function acts independently of namespaces associated to the attribute. Use xmlGetNsProp() or xmlGetNoNsProp() for namespace aware processing.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlHasNsProp" id="xmlHasNsProp"></a>Function: xmlHasNsProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlHasNsProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br />
+</pre><p>Search for an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This <a href="libxml-SAX.html#attribute">attribute</a> has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the URI of the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> or the <a href="libxml-SAX.html#attribute">attribute</a> declaration or NULL if neither was found.</td></tr></tbody></table></div><h3><a name="xmlHasProp" id="xmlHasProp"></a>Function: xmlHasProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlHasProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Search an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This function also looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> or the <a href="libxml-SAX.html#attribute">attribute</a> declaration or NULL if neither was found.</td></tr></tbody></table></div><h3><a name="xmlIsBlankNode" id="xmlIsBlankNode"></a>Function: xmlIsBlankNode</h3><pre class="programlisting">int xmlIsBlankNode (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Checks whether this node is an empty or whitespace only (and possibly ignorable) text-node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 yes, 0 no</td></tr></tbody></table></div><h3><a name="xmlIsXHTML" id="xmlIsXHTML"></a>Function: xmlIsXHTML</h3><pre class="programlisting">int xmlIsXHTML (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicID)<br />
+</pre><p>Try to find if the document correspond to an XHTML DTD</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>systemID</tt></i>:</span></td><td>the system identifier</td></tr><tr><td><span class="term"><i><tt>publicID</tt></i>:</span></td><td>the public identifier</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true, 0 if not and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlNewCDataBlock" id="xmlNewCDataBlock"></a>Function: xmlNewCDataBlock</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewCDataBlock (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)<br />
+</pre><p>Creation of a new node containing a CDATA block.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the CDATA block content content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the block</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewCharRef" id="xmlNewCharRef"></a>Function: xmlNewCharRef</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewCharRef (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Creation of a new character <a href="libxml-SAX.html#reference">reference</a> node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the char ref string, starting with # or "&amp;# ... ;"</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewChild" id="xmlNewChild"></a>Function: xmlNewChild</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewChild (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a new child element, added at the end of @parent children list. @ns and @content parameters are optional (NULL). If @ns is NULL, the newly created element inherits the namespace of @parent. If @content is non NULL, a child list containing the TEXTs and ENTITY_REFs node will be created. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references. XML special chars must be escaped first by using xmlEncodeEntitiesReentrant(), or xmlNewTextChild() should be used.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>the parent node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the child</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the XML content of the child if any.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewComment" id="xmlNewComment"></a>Function: xmlNewComment</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewComment (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a new node containing a comment.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the <a href="libxml-SAX.html#comment">comment</a> content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDoc" id="xmlNewDoc"></a>Function: xmlNewDoc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlNewDoc (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * version)<br />
+</pre><p>Creates a new XML document</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>version</tt></i>:</span></td><td><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string giving the version of XML "1.0"</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new document</td></tr></tbody></table></div><h3><a name="xmlNewDocComment" id="xmlNewDocComment"></a>Function: xmlNewDocComment</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewDocComment (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a new node containing a <a href="libxml-SAX.html#comment">comment</a> within a document.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the <a href="libxml-SAX.html#comment">comment</a> content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDocFragment" id="xmlNewDocFragment"></a>Function: xmlNewDocFragment</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewDocFragment (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Creation of a new Fragment node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document owning the fragment</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDocNode" id="xmlNewDocNode"></a>Function: xmlNewDocNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewDocNode (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a new node element within a document. @ns and @content are optional (NULL). NOTE: @content is supposed to be a piece of XML CDATA, so it allow entities references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you don't need entities support.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the XML text content if any</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDocNodeEatName" id="xmlNewDocNodeEatName"></a>Function: xmlNewDocNodeEatName</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewDocNodeEatName (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a new node element within a document. @ns and @content are optional (NULL). NOTE: @content is supposed to be a piece of XML CDATA, so it allow entities references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you don't need entities support.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the XML text content if any</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDocProp" id="xmlNewDocProp"></a>Function: xmlNewDocProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlNewDocProp (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Create a new property carried by a document.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the <a href="libxml-SAX.html#attribute">attribute</a></td></tr></tbody></table></div><h3><a name="xmlNewDocRawNode" id="xmlNewDocRawNode"></a>Function: xmlNewDocRawNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewDocRawNode (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a new node element within a document. @ns and @content are optional (NULL).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content if any</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDocText" id="xmlNewDocText"></a>Function: xmlNewDocText</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewDocText (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a new text node within a document.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDocTextLen" id="xmlNewDocTextLen"></a>Function: xmlNewDocTextLen</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewDocTextLen (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)<br />
+</pre><p>Creation of a new text node with an extra content length parameter. The text node pertain to a given document.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the text len.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDtd" id="xmlNewDtd"></a>Function: xmlNewDtd</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> xmlNewDtd (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>Creation of a new DTD for the external subset. To create an internal subset, use xmlCreateIntSubset().</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document pointer</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the DTD name</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external ID</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the system ID</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new DTD structure</td></tr></tbody></table></div><h3><a name="xmlNewGlobalNs" id="xmlNewGlobalNs"></a>Function: xmlNewGlobalNs</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> xmlNewGlobalNs (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p>Creation of a Namespace, the old way using PI and without scoping DEPRECATED !!! It now create a namespace on the root element of the document if found.</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 carrying the namespace</td></tr><tr><td><span class="term"><i><tt>href</tt></i>:</span></td><td>the URI associated</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix for the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL this functionality had been removed</td></tr></tbody></table></div><h3><a name="xmlNewNode" id="xmlNewNode"></a>Function: xmlNewNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewNode (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Creation of a new node element. @ns is optional (NULL).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object. Uses xmlStrdup() to make copy of @name.</td></tr></tbody></table></div><h3><a name="xmlNewNodeEatName" id="xmlNewNodeEatName"></a>Function: xmlNewNodeEatName</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewNodeEatName (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Creation of a new node element. @ns is optional (NULL).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object, with pointer @name as new node's name. Use xmlNewNode() if a copy of @name string is is needed as new node's name.</td></tr></tbody></table></div><h3><a name="xmlNewNs" id="xmlNewNs"></a>Function: xmlNewNs</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> xmlNewNs (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p>Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. We use href==NULL in the case of an element creation where the namespace was not defined.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the element carrying the namespace</td></tr><tr><td><span class="term"><i><tt>href</tt></i>:</span></td><td>the URI associated</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix for the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new namespace pointer or NULL</td></tr></tbody></table></div><h3><a name="xmlNewNsProp" id="xmlNewNsProp"></a>Function: xmlNewNsProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlNewNsProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Create a new property tagged with a namespace and carried by a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the holding node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>the namespace</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the <a href="libxml-SAX.html#attribute">attribute</a></td></tr></tbody></table></div><h3><a name="xmlNewNsPropEatName" id="xmlNewNsPropEatName"></a>Function: xmlNewNsPropEatName</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlNewNsPropEatName (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Create a new property tagged with a namespace and carried by a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the holding node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>the namespace</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the <a href="libxml-SAX.html#attribute">attribute</a></td></tr></tbody></table></div><h3><a name="xmlNewPI" id="xmlNewPI"></a>Function: xmlNewPI</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewPI (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a processing instruction element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the processing instruction name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the PI content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewProp" id="xmlNewProp"></a>Function: xmlNewProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlNewProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Create a new property carried by a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the holding node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the <a href="libxml-SAX.html#attribute">attribute</a></td></tr></tbody></table></div><h3><a name="xmlNewReference" id="xmlNewReference"></a>Function: xmlNewReference</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewReference (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Creation of a new <a href="libxml-SAX.html#reference">reference</a> node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#reference">reference</a> name, or the <a href="libxml-SAX.html#reference">reference</a> string with &amp; and ;</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewText" id="xmlNewText"></a>Function: xmlNewText</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewText (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a new text node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewTextChild" id="xmlNewTextChild"></a>Function: xmlNewTextChild</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewTextChild (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Creation of a new child element, added at the end of @parent children list. @ns and @content parameters are optional (NULL). If @ns is NULL, the newly created element inherits the namespace of @parent. If @content is non NULL, a child TEXT node will be created containing the string @content. NOTE: Use xmlNewChild() if @content will contain entities that need to be preserved. Use this function, xmlNewTextChild(), if you need to ensure that reserved XML chars that might appear in @content, such as the ampersand, greater-than or less-than signs, are automatically replaced by their XML escaped entity representations.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>the parent node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the child</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content of the child if any.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewTextLen" id="xmlNewTextLen"></a>Function: xmlNewTextLen</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlNewTextLen (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)<br />
+</pre><p>Creation of a new text node with an extra parameter for the content's length</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the text len.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNodeAddContent" id="xmlNodeAddContent"></a>Function: xmlNodeAddContent</h3><pre class="programlisting">void xmlNodeAddContent (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Append the extra substring to the node content.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being modified</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>extra content</td></tr></tbody></table></div><h3><a name="xmlNodeAddContentLen" id="xmlNodeAddContentLen"></a>Function: xmlNodeAddContentLen</h3><pre class="programlisting">void xmlNodeAddContentLen (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)<br />
+</pre><p>Append the extra substring to the node content.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being modified</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>extra content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the size of @content</td></tr></tbody></table></div><h3><a name="xmlNodeBufGetContent" id="xmlNodeBufGetContent"></a>Function: xmlNodeBufGetContent</h3><pre class="programlisting">int xmlNodeBufGetContent (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Read the value of a node @cur, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buffer with this value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>a buffer</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlNodeDump" id="xmlNodeDump"></a>Function: xmlNodeDump</h3><pre class="programlisting">int xmlNodeDump (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> int level, <br /> int format)<br />
+</pre><p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the imbrication level for indenting</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>is formatting allowed</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written to the buffer or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlNodeDumpOutput" id="xmlNodeDumpOutput"></a>Function: xmlNodeDumpOutput</h3><pre class="programlisting">void xmlNodeDumpOutput (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> int level, <br /> int format, <br /> const char * encoding)<br />
+</pre><p>Dump an XML node, recursive behaviour, children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the imbrication level for indenting</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>is formatting allowed</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>an optional encoding string</td></tr></tbody></table></div><h3><a name="xmlNodeGetBase" id="xmlNodeGetBase"></a>Function: xmlNodeGetBase</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeGetBase (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Searches for the BASE URL. The code should work on both XML and HTML document even if base mechanisms are completely different. It returns the base as defined in RFC 2396 sections 5.1.1. Base URI within Document Content and 5.1.2. Base URI from the Encapsulating Entity However it does not return the document base (5.1.3), use xmlDocumentGetBase() for this</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document the node pertains to</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the base URL, or NULL if not found It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeGetContent" id="xmlNodeGetContent"></a>Function: xmlNodeGetContent</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeGetContent (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Read the value of a node, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlChar * or NULL if no content is available. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeGetLang" id="xmlNodeGetLang"></a>Function: xmlNodeGetLang</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeGetLang (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Searches the language of a node, i.e. the values of the xml:lang <a href="libxml-SAX.html#attribute">attribute</a> or the one carried by the nearest ancestor.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the lang value, or NULL if not found It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeGetSpacePreserve" id="xmlNodeGetSpacePreserve"></a>Function: xmlNodeGetSpacePreserve</h3><pre class="programlisting">int xmlNodeGetSpacePreserve (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Searches the space preserving behaviour of a node, i.e. the values of the xml:space <a href="libxml-SAX.html#attribute">attribute</a> or the one carried by the nearest ancestor.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 if xml:space is not inherited, 0 if "default", 1 if "preserve"</td></tr></tbody></table></div><h3><a name="xmlNodeIsText" id="xmlNodeIsText"></a>Function: xmlNodeIsText</h3><pre class="programlisting">int xmlNodeIsText (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Is this node a Text node ?</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 yes, 0 no</td></tr></tbody></table></div><h3><a name="xmlNodeListGetRawString" id="xmlNodeListGetRawString"></a>Function: xmlNodeListGetRawString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeListGetRawString (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br /> int inLine)<br />
+</pre><p>Builds the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString() this function doesn't do any character encoding handling.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>a Node list</td></tr><tr><td><span class="term"><i><tt>inLine</tt></i>:</span></td><td>should we replace entity contents or show their external form</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the string copy, the caller must free it with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeListGetString" id="xmlNodeListGetString"></a>Function: xmlNodeListGetString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeListGetString (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br /> int inLine)<br />
+</pre><p>Build the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>a Node list</td></tr><tr><td><span class="term"><i><tt>inLine</tt></i>:</span></td><td>should we replace entity contents or show their external form</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the string copy, the caller must free it with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeSetBase" id="xmlNodeSetBase"></a>Function: xmlNodeSetBase</h3><pre class="programlisting">void xmlNodeSetBase (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * uri)<br />
+</pre><p>Set (or reset) the base URI of a node, i.e. the value of the xml:base attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being changed</td></tr><tr><td><span class="term"><i><tt>uri</tt></i>:</span></td><td>the new base URI</td></tr></tbody></table></div><h3><a name="xmlNodeSetContent" id="xmlNodeSetContent"></a>Function: xmlNodeSetContent</h3><pre class="programlisting">void xmlNodeSetContent (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Replace the content of a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being modified</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the new value of the content</td></tr></tbody></table></div><h3><a name="xmlNodeSetContentLen" id="xmlNodeSetContentLen"></a>Function: xmlNodeSetContentLen</h3><pre class="programlisting">void xmlNodeSetContentLen (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)<br />
+</pre><p>Replace the content of a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being modified</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the new value of the content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the size of @content</td></tr></tbody></table></div><h3><a name="xmlNodeSetLang" id="xmlNodeSetLang"></a>Function: xmlNodeSetLang</h3><pre class="programlisting">void xmlNodeSetLang (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * lang)<br />
+</pre><p>Set the language of a node, i.e. the values of the xml:lang attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being changed</td></tr><tr><td><span class="term"><i><tt>lang</tt></i>:</span></td><td>the language description</td></tr></tbody></table></div><h3><a name="xmlNodeSetName" id="xmlNodeSetName"></a>Function: xmlNodeSetName</h3><pre class="programlisting">void xmlNodeSetName (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Set (or reset) the name of a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being changed</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the new tag name</td></tr></tbody></table></div><h3><a name="xmlNodeSetSpacePreserve" id="xmlNodeSetSpacePreserve"></a>Function: xmlNodeSetSpacePreserve</h3><pre class="programlisting">void xmlNodeSetSpacePreserve (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br /> int val)<br />
+</pre><p>Set (or reset) the space preserving behaviour of a node, i.e. the value of the xml:space attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being changed</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the xml:space value ("0": default, 1: "preserve")</td></tr></tbody></table></div><h3><a name="xmlReconciliateNs" id="xmlReconciliateNs"></a>Function: xmlReconciliateNs</h3><pre class="programlisting">int xmlReconciliateNs (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree)<br />
+</pre><p>This function checks that all the namespaces declared within the given tree are properly declared. This is needed for example after Copy or Cut and then paste operations. The subtree may still hold pointers to namespace declarations outside the subtree or invalid/masked. As much as possible the function try to reuse the existing namespaces found in the new environment. If not possible the new namespaces are redeclared on @tree at the top of the given subtree.</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>tree</tt></i>:</span></td><td>a node defining the subtree to reconciliate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of namespace declarations created or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlRemoveProp" id="xmlRemoveProp"></a>Function: xmlRemoveProp</h3><pre class="programlisting">int xmlRemoveProp (<a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)<br />
+</pre><p>Unlink and free one attribute, all the content is freed too Note this doesn't work for namespace definition attributes</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>an <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if success and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlReplaceNode" id="xmlReplaceNode"></a>Function: xmlReplaceNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlReplaceNode (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> old, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Unlink the old node from its current context, prune the new one at the same place. If @cur was already inserted in a document it is first unlinked from its existing context.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>old</tt></i>:</span></td><td>the old node</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the @old node</td></tr></tbody></table></div><h3><a name="xmlSaveFile" id="xmlSaveFile"></a>Function: xmlSaveFile</h3><pre class="programlisting">int xmlSaveFile (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)<br />
+</pre><p>Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is "-" the stdout file is used.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename (or URL)</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSaveFileEnc" id="xmlSaveFileEnc"></a>Function: xmlSaveFileEnc</h3><pre class="programlisting">int xmlSaveFileEnc (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)<br />
+</pre><p>Dump an XML document, converting it to the given encoding</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename (or URL)</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the name of an encoding (or NULL)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSaveFileTo" id="xmlSaveFileTo"></a>Function: xmlSaveFileTo</h3><pre class="programlisting">int xmlSaveFileTo (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)<br />
+</pre><p>Dump an XML document to an I/O 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>an output I/O buffer</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding if any assuming the I/O layer handles the trancoding</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSaveFormatFile" id="xmlSaveFormatFile"></a>Function: xmlSaveFormatFile</h3><pre class="programlisting">int xmlSaveFormatFile (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> int format)<br />
+</pre><p>Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is "-" the stdout file is used. If @format is set then the document will be indented on output. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename (or URL)</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSaveFormatFileEnc" id="xmlSaveFormatFileEnc"></a>Function: xmlSaveFormatFileEnc</h3><pre class="programlisting">int xmlSaveFormatFileEnc (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)<br />
+</pre><p>Dump an XML document to a file or an URL.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename or URL to output</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document being saved</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the name of the encoding to use or NULL.</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces be added.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of error. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</td></tr></tbody></table></div><h3><a name="xmlSaveFormatFileTo" id="xmlSaveFormatFileTo"></a>Function: xmlSaveFormatFileTo</h3><pre class="programlisting">int xmlSaveFormatFileTo (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)<br />
+</pre><p>Dump an XML document to an I/O buffer. NOTE: the I/O buffer is closed as part of the call.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>an output I/O buffer</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding if any assuming the I/O layer handles the trancoding</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSearchNs" id="xmlSearchNs"></a>Function: xmlSearchNs</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> xmlSearchNs (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br />
+</pre><p>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't allow to cross entities boundaries. If you don't declare the namespace within those you will be in troubles !!! A warning is generated to cover this case.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the namespace prefix</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the namespace pointer or NULL.</td></tr></tbody></table></div><h3><a name="xmlSearchNsByHref" id="xmlSearchNsByHref"></a>Function: xmlSearchNsByHref</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> xmlSearchNsByHref (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href)<br />
+</pre><p>Search a Ns aliasing a given URI. Recurse on the parents until it finds the defined namespace or return NULL otherwise.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>href</tt></i>:</span></td><td>the namespace value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the namespace pointer or NULL.</td></tr></tbody></table></div><h3><a name="xmlSetBufferAllocationScheme" id="xmlSetBufferAllocationScheme"></a>Function: xmlSetBufferAllocationScheme</h3><pre class="programlisting">void xmlSetBufferAllocationScheme (<a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> scheme)<br />
+</pre><p>Set the buffer allocation method. Types are <a href="libxml-tree.html#XML_BUFFER_ALLOC_EXACT">XML_BUFFER_ALLOC_EXACT</a> - use exact sizes, keeps memory usage down <a href="libxml-tree.html#XML_BUFFER_ALLOC_DOUBLEIT">XML_BUFFER_ALLOC_DOUBLEIT</a> - double buffer when extra needed, improves performance</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>scheme</tt></i>:</span></td><td>allocation method to use</td></tr></tbody></table></div><h3><a name="xmlSetCompressMode" id="xmlSetCompressMode"></a>Function: xmlSetCompressMode</h3><pre class="programlisting">void xmlSetCompressMode (int mode)<br />
+</pre><p>set the default compression mode used, ZLIB based Correct values: 0 (uncompressed) to 9 (max compression)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>mode</tt></i>:</span></td><td>the compression ratio</td></tr></tbody></table></div><h3><a name="xmlSetDocCompressMode" id="xmlSetDocCompressMode"></a>Function: xmlSetDocCompressMode</h3><pre class="programlisting">void xmlSetDocCompressMode (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> int mode)<br />
+</pre><p>set the compression ratio for a document, ZLIB based Correct values: 0 (uncompressed) to 9 (max compression)</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>mode</tt></i>:</span></td><td>the compression ratio</td></tr></tbody></table></div><h3><a name="xmlSetListDoc" id="xmlSetListDoc"></a>Function: xmlSetListDoc</h3><pre class="programlisting">void xmlSetListDoc (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>update all nodes in the list to point to the right document</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>the first element</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr></tbody></table></div><h3><a name="xmlSetNs" id="xmlSetNs"></a>Function: xmlSetNs</h3><pre class="programlisting">void xmlSetNs (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)<br />
+</pre><p>Associate a namespace to a node, a posteriori.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node in the document</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a namespace pointer</td></tr></tbody></table></div><h3><a name="xmlSetNsProp" id="xmlSetNsProp"></a>Function: xmlSetNsProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlSetNsProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Set (or reset) an <a href="libxml-SAX.html#attribute">attribute</a> carried by a node. The ns structure must be in scope, this is not checked.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>the namespace definition</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> pointer.</td></tr></tbody></table></div><h3><a name="xmlSetProp" id="xmlSetProp"></a>Function: xmlSetProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlSetProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Set (or reset) an <a href="libxml-SAX.html#attribute">attribute</a> carried by a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> pointer.</td></tr></tbody></table></div><h3><a name="xmlSetTreeDoc" id="xmlSetTreeDoc"></a>Function: xmlSetTreeDoc</h3><pre class="programlisting">void xmlSetTreeDoc (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>update all nodes under the tree to point to the right document</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tree</tt></i>:</span></td><td>the top element</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr></tbody></table></div><h3><a name="xmlSplitQName2" id="xmlSplitQName2"></a>Function: xmlSplitQName2</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlSplitQName2 (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** prefix)<br />
+</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 />
+</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>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the text</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the string value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the first child</td></tr></tbody></table></div><h3><a name="xmlTextConcat" id="xmlTextConcat"></a>Function: xmlTextConcat</h3><pre class="programlisting">int xmlTextConcat (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)<br />
+</pre><p>Concat the given string at the end of the existing node content</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>@content length</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlTextMerge" id="xmlTextMerge"></a>Function: xmlTextMerge</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlTextMerge (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> first, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> second)<br />
+</pre><p>Merge two text nodes into one</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>first</tt></i>:</span></td><td>the first text node</td></tr><tr><td><span class="term"><i><tt>second</tt></i>:</span></td><td>the second text node being merged</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the first text node augmented</td></tr></tbody></table></div><h3><a name="xmlUnlinkNode" id="xmlUnlinkNode"></a>Function: xmlUnlinkNode</h3><pre class="programlisting">void xmlUnlinkNode (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Unlink a node from it's current context, the node is not freed</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node</td></tr></tbody></table></div><h3><a name="xmlUnsetNsProp" id="xmlUnsetNsProp"></a>Function: xmlUnsetNsProp</h3><pre class="programlisting">int xmlUnsetNsProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Remove an <a href="libxml-SAX.html#attribute">attribute</a> carried by a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>the namespace definition</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if successful, -1 if not found</td></tr></tbody></table></div><h3><a name="xmlUnsetProp" id="xmlUnsetProp"></a>Function: xmlUnsetProp</h3><pre class="programlisting">int xmlUnsetProp (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Remove an <a href="libxml-SAX.html#attribute">attribute</a> carried by a node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if successful, -1 if not found</td></tr></tbody></table></div><h3><a name="xmlValidateNCName" id="xmlValidateNCName"></a>Function: xmlValidateNCName</h3><pre class="programlisting">int xmlValidateNCName (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int space)<br />
+</pre><p>Check that a value conforms to the lexical space of NCName</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value to check</td></tr><tr><td><span class="term"><i><tt>space</tt></i>:</span></td><td>allow spaces in front and end of the string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlValidateNMToken" id="xmlValidateNMToken"></a>Function: xmlValidateNMToken</h3><pre class="programlisting">int xmlValidateNMToken (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int space)<br />
+</pre><p>Check that a value conforms to the lexical space of NMToken</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value to check</td></tr><tr><td><span class="term"><i><tt>space</tt></i>:</span></td><td>allow spaces in front and end of the string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlValidateName" id="xmlValidateName"></a>Function: xmlValidateName</h3><pre class="programlisting">int xmlValidateName (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int space)<br />
+</pre><p>Check that a value conforms to the lexical space of Name</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value to check</td></tr><tr><td><span class="term"><i><tt>space</tt></i>:</span></td><td>allow spaces in front and end of the string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlValidateQName" id="xmlValidateQName"></a>Function: xmlValidateQName</h3><pre class="programlisting">int xmlValidateQName (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> int space)<br />
+</pre><p>Check that a value conforms to the lexical space of QName</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value to check</td></tr><tr><td><span class="term"><i><tt>space</tt></i>:</span></td><td>allow spaces in front and end of the string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-uri.html b/doc/html/libxml-uri.html
new file mode 100644
index 0000000..6d909d6
--- /dev/null
+++ b/doc/html/libxml-uri.html
@@ -0,0 +1,63 @@
+<?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 uri from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module uri 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-tree.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-tree.html">tree</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-valid.html">valid</a></th><td><a accesskey="n" href="libxml-valid.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>library of generic URI related routines Implements RFC 2396 </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlURI">xmlURI</a><br />struct _xmlURI
+</pre><pre class="programlisting">Typedef <a href="libxml-uri.html#xmlURI">xmlURI</a> * <a name="xmlURIPtr" id="xmlURIPtr">xmlURIPtr</a>
+</pre><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlBuildURI">xmlBuildURI</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * base)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCanonicPath">xmlCanonicPath</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * path)</pre>
+<pre class="programlisting"><a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> <a href="#xmlCreateURI">xmlCreateURI</a> (void)</pre>
+<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">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>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlURIEscape">xmlURIEscape</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlURIEscapeStr">xmlURIEscapeStr</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * list)</pre>
+<pre class="programlisting">char * <a href="#xmlURIUnescapeString">xmlURIUnescapeString</a> (const char * str, <br /> int len, <br /> char * target)</pre>
+<h2>Description</h2>
+<h3><a name="xmlURI" id="xmlURI">Structure xmlURI</a></h3><pre class="programlisting">Structure xmlURI<br />struct _xmlURI {
+ char * scheme : the URI scheme
+ char * opaque : opaque part
+ char * authority : the authority part
+ char * server : the server part
+ char * user : the user part
+ int port : the port number
+ char * path : the path string
+ char * query : the query string
+ char * fragment : the fragment identifier
+ int cleanup : parsing potentially unclean URI
+}</pre><h3><a name="xmlBuildURI" id="xmlBuildURI"></a>Function: xmlBuildURI</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlBuildURI (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * URI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * base)<br />
+</pre><p>Computes he final URI of the <a href="libxml-SAX.html#reference">reference</a> done by checking that the given URI is valid, and building the final URI using the base URI. This is processed according to section 5.2 of the RFC 2396 5.2. Resolving Relative References to Absolute Form</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the URI instance found in the document</td></tr><tr><td><span class="term"><i><tt>base</tt></i>:</span></td><td>the base value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new URI string (to be freed by the caller) or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCanonicPath" id="xmlCanonicPath"></a>Function: xmlCanonicPath</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCanonicPath (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * path)<br />
+</pre><p>Constructs a canonic path from the specified path.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>path</tt></i>:</span></td><td>the resource locator in a filesystem notation</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new canonic path, or a duplicate of the path parameter if the construction fails. The caller is responsible for freeing the memory occupied by the returned string. If there is insufficient memory available, or the argument is NULL, the function returns NULL.</td></tr></tbody></table></div><h3><a name="xmlCreateURI" id="xmlCreateURI"></a>Function: xmlCreateURI</h3><pre class="programlisting"><a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> xmlCreateURI (void)<br />
+</pre><p>Simply creates an empty <a href="libxml-uri.html#xmlURI">xmlURI</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new structure or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlFreeURI" id="xmlFreeURI"></a>Function: xmlFreeURI</h3><pre class="programlisting">void xmlFreeURI (<a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> uri)<br />
+</pre><p>Free up the <a href="libxml-uri.html#xmlURI">xmlURI</a> struct</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 <a href="libxml-uri.html#xmlURI">xmlURI</a></td></tr></tbody></table></div><h3><a name="xmlNormalizeURIPath" id="xmlNormalizeURIPath"></a>Function: xmlNormalizeURIPath</h3><pre class="programlisting">int xmlNormalizeURIPath (char * path)<br />
+</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 build <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 @steam.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>stream</tt></i>:</span></td><td>a FILE* for the output</td></tr><tr><td><span class="term"><i><tt>uri</tt></i>:</span></td><td>pointer to an <a href="libxml-uri.html#xmlURI">xmlURI</a></td></tr></tbody></table></div><h3><a name="xmlSaveUri" id="xmlSaveUri"></a>Function: xmlSaveUri</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlSaveUri (<a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> uri)<br />
+</pre><p>Save the URI as an escaped string</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 <a href="libxml-uri.html#xmlURI">xmlURI</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new string (to be deallocated by caller)</td></tr></tbody></table></div><h3><a name="xmlURIEscape" id="xmlURIEscape"></a>Function: xmlURIEscape</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlURIEscape (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>Escaping routine, does not do validity checks ! It will try to escape the chars needing this, but this is heuristic based it's impossible to be sure.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the string of the URI to escape</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an copy of the string, but escaped 25 May 2001 Uses <a href="libxml-uri.html#xmlParseURI">xmlParseURI</a> and <a href="libxml-uri.html#xmlURIEscapeStr">xmlURIEscapeStr</a> to try to escape correctly according to RFC2396. - Carl Douglas</td></tr></tbody></table></div><h3><a name="xmlURIEscapeStr" id="xmlURIEscapeStr"></a>Function: xmlURIEscapeStr</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlURIEscapeStr (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * list)<br />
+</pre><p>This routine escapes a string to hex, ignoring reserved <a href="libxml-SAX.html#characters">characters</a> (a-z) and the <a href="libxml-SAX.html#characters">characters</a> in the exception list.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>string to escape</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>exception list string of chars not to escape</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new escaped string or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlURIUnescapeString" id="xmlURIUnescapeString"></a>Function: xmlURIUnescapeString</h3><pre class="programlisting">char * xmlURIUnescapeString (const char * str, <br /> int len, <br /> char * target)<br />
+</pre><p>Unescaping routine, does not do validity checks ! Output is direct unsigned char translation of %XX values (no encoding)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the string to unescape</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length in bytes to unescape (or &lt;= 0 to indicate full string)</td></tr><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>optional destination buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an copy of the string, but unescaped</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-valid.html b/doc/html/libxml-valid.html
new file mode 100644
index 0000000..a305f64
--- /dev/null
+++ b/doc/html/libxml-valid.html
@@ -0,0 +1,278 @@
+<?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 valid from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module valid 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-uri.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-uri.html">uri</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-xinclude.html">xinclude</a></th><td><a accesskey="n" href="libxml-xinclude.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>API for the DTD handling and the validity checking </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlAttributeTable">xmlAttributeTable</a><br />struct _xmlHashTable
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-valid.html#xmlAttributeTable">xmlAttributeTable</a> * <a name="xmlAttributeTablePtr" id="xmlAttributeTablePtr">xmlAttributeTablePtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlElementTable">xmlElementTable</a><br />struct _xmlHashTable
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-valid.html#xmlElementTable">xmlElementTable</a> * <a name="xmlElementTablePtr" id="xmlElementTablePtr">xmlElementTablePtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlIDTable">xmlIDTable</a><br />struct _xmlHashTable
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-valid.html#xmlIDTable">xmlIDTable</a> * <a name="xmlIDTablePtr" id="xmlIDTablePtr">xmlIDTablePtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlNotationTable">xmlNotationTable</a><br />struct _xmlHashTable
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-valid.html#xmlNotationTable">xmlNotationTable</a> * <a name="xmlNotationTablePtr" id="xmlNotationTablePtr">xmlNotationTablePtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlRefTable">xmlRefTable</a><br />struct _xmlHashTable
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-valid.html#xmlRefTable">xmlRefTable</a> * <a name="xmlRefTablePtr" id="xmlRefTablePtr">xmlRefTablePtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlValidCtxt">xmlValidCtxt</a><br />struct _xmlValidCtxt
+</pre><pre class="programlisting">Typedef <a href="libxml-valid.html#xmlValidCtxt">xmlValidCtxt</a> * <a name="xmlValidCtxtPtr" id="xmlValidCtxtPtr">xmlValidCtxtPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlValidState">xmlValidState</a><br />struct _xmlValidState
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-valid.html#xmlValidState">xmlValidState</a> * <a name="xmlValidStatePtr" id="xmlValidStatePtr">xmlValidStatePtr</a>
+</pre><pre class="programlisting"><a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> <a href="#xmlAddAttributeDecl">xmlAddAttributeDecl</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns, <br /> <a href="libxml-tree.html#xmlAttributeType">xmlAttributeType</a> type, <br /> <a href="libxml-tree.html#xmlAttributeDefault">xmlAttributeDefault</a> def, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defaultValue, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> tree)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> <a href="#xmlAddElementDecl">xmlAddElementDecl</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-tree.html#xmlElementTypeVal">xmlElementTypeVal</a> type, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlIDPtr">xmlIDPtr</a> <a href="#xmlAddID">xmlAddID</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a> <a href="#xmlAddNotationDecl">xmlAddNotationDecl</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * PublicID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlRefPtr">xmlRefPtr</a> <a href="#xmlAddRef">xmlAddRef</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)</pre>
+<pre class="programlisting"><a href="libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a> <a href="#xmlCopyAttributeTable">xmlCopyAttributeTable</a> (<a href="libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a> table)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> <a href="#xmlCopyElementContent">xmlCopyElementContent</a> (<a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a> <a href="#xmlCopyElementTable">xmlCopyElementTable</a> (<a href="libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a> table)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> <a href="#xmlCopyEnumeration">xmlCopyEnumeration</a> (<a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a> <a href="#xmlCopyNotationTable">xmlCopyNotationTable</a> (<a href="libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a> table)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> <a href="#xmlCreateEnumeration">xmlCreateEnumeration</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#xmlDumpAttributeDecl">xmlDumpAttributeDecl</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> attr)</pre>
+<pre class="programlisting">void <a href="#xmlDumpAttributeTable">xmlDumpAttributeTable</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a> table)</pre>
+<pre class="programlisting">void <a href="#xmlDumpElementDecl">xmlDumpElementDecl</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> elem)</pre>
+<pre class="programlisting">void <a href="#xmlDumpElementTable">xmlDumpElementTable</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a> table)</pre>
+<pre class="programlisting">void <a href="#xmlDumpNotationDecl">xmlDumpNotationDecl</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a> nota)</pre>
+<pre class="programlisting">void <a href="#xmlDumpNotationTable">xmlDumpNotationTable</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a> table)</pre>
+<pre class="programlisting">void <a href="#xmlFreeAttributeTable">xmlFreeAttributeTable</a> (<a href="libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a> table)</pre>
+<pre class="programlisting">void <a href="#xmlFreeElementContent">xmlFreeElementContent</a> (<a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreeElementTable">xmlFreeElementTable</a> (<a href="libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a> table)</pre>
+<pre class="programlisting">void <a href="#xmlFreeEnumeration">xmlFreeEnumeration</a> (<a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> cur)</pre>
+<pre class="programlisting">void <a href="#xmlFreeIDTable">xmlFreeIDTable</a> (<a href="libxml-valid.html#xmlIDTablePtr">xmlIDTablePtr</a> table)</pre>
+<pre class="programlisting">void <a href="#xmlFreeNotationTable">xmlFreeNotationTable</a> (<a href="libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a> table)</pre>
+<pre class="programlisting">void <a href="#xmlFreeRefTable">xmlFreeRefTable</a> (<a href="libxml-valid.html#xmlRefTablePtr">xmlRefTablePtr</a> table)</pre>
+<pre class="programlisting">void <a href="#xmlFreeValidCtxt">xmlFreeValidCtxt</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> <a href="#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a> (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> <a href="#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a> (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a> <a href="#xmlGetDtdNotationDesc">xmlGetDtdNotationDesc</a> (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> <a href="#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a> (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> <a href="#xmlGetDtdQElementDesc">xmlGetDtdQElementDesc</a> (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> <a href="#xmlGetID">xmlGetID</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID)</pre>
+<pre class="programlisting"><a href="libxml-list.html#xmlListPtr">xmlListPtr</a> <a href="#xmlGetRefs">xmlGetRefs</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID)</pre>
+<pre class="programlisting">int <a href="#xmlIsID">xmlIsID</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)</pre>
+<pre class="programlisting">int <a href="#xmlIsMixedElement">xmlIsMixedElement</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlIsRef">xmlIsRef</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> <a href="#xmlNewElementContent">xmlNewElementContent</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-tree.html#xmlElementContentType">xmlElementContentType</a> type)</pre>
+<pre class="programlisting"><a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> <a href="#xmlNewValidCtxt">xmlNewValidCtxt</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlRemoveID">xmlRemoveID</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)</pre>
+<pre class="programlisting">int <a href="#xmlRemoveRef">xmlRemoveRef</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)</pre>
+<pre class="programlisting">void <a href="#xmlSnprintfElementContent">xmlSnprintfElementContent</a> (char * buf, <br /> int size, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content, <br /> int glob)</pre>
+<pre class="programlisting">void <a href="#xmlSprintfElementContent">xmlSprintfElementContent</a> (char * buf, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content, <br /> int glob)</pre>
+<pre class="programlisting">int <a href="#xmlValidBuildContentModel">xmlValidBuildContentModel</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> elem)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a> (<a href="libxml-tree.html#xmlElementContent">xmlElementContent</a> * ctree, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** list, <br /> int * len, <br /> int max)</pre>
+<pre class="programlisting">int <a href="#xmlValidGetValidElements">xmlValidGetValidElements</a> (<a href="libxml-tree.html#xmlNode">xmlNode</a> * prev, <br /> <a href="libxml-tree.html#xmlNode">xmlNode</a> * next, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** list, <br /> int max)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> attr)</pre>
+<pre class="programlisting">int <a href="#xmlValidateAttributeValue">xmlValidateAttributeValue</a> (<a href="libxml-tree.html#xmlAttributeType">xmlAttributeType</a> type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#xmlValidateDocument">xmlValidateDocument</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">int <a href="#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">int <a href="#xmlValidateDtd">xmlValidateDtd</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd)</pre>
+<pre class="programlisting">int <a href="#xmlValidateDtdFinal">xmlValidateDtdFinal</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">int <a href="#xmlValidateElement">xmlValidateElement</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)</pre>
+<pre class="programlisting">int <a href="#xmlValidateElementDecl">xmlValidateElementDecl</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> elem)</pre>
+<pre class="programlisting">int <a href="#xmlValidateNameValue">xmlValidateNameValue</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#xmlValidateNamesValue">xmlValidateNamesValue</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#xmlValidateNmtokenValue">xmlValidateNmtokenValue</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#xmlValidateNmtokensValue">xmlValidateNmtokensValue</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#xmlValidateNotationDecl">xmlValidateNotationDecl</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a> nota)</pre>
+<pre class="programlisting">int <a href="#xmlValidateNotationUse">xmlValidateNotationUse</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * notationName)</pre>
+<pre class="programlisting">int <a href="#xmlValidateOneAttribute">xmlValidateOneAttribute</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#xmlValidateOneElement">xmlValidateOneElement</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)</pre>
+<pre class="programlisting">int <a href="#xmlValidateOneNamespace">xmlValidateOneNamespace</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting">int <a href="#xmlValidatePopElement">xmlValidatePopElement</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * qname)</pre>
+<pre class="programlisting">int <a href="#xmlValidatePushCData">xmlValidatePushCData</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlValidatePushElement">xmlValidatePushElement</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * qname)</pre>
+<pre class="programlisting">int <a href="#xmlValidateRoot">xmlValidateRoot</a> (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">Function type: <a href="#xmlValidityErrorFunc">xmlValidityErrorFunc</a>
+void <a href="#xmlValidityErrorFunc">xmlValidityErrorFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlValidityWarningFunc">xmlValidityWarningFunc</a>
+void <a href="#xmlValidityWarningFunc">xmlValidityWarningFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<h2>Description</h2>
+<h3><a name="xmlAttributeTable" id="xmlAttributeTable">Structure xmlAttributeTable</a></h3><pre class="programlisting">Structure xmlAttributeTable<br />struct _xmlHashTable {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlElementTable" id="xmlElementTable">Structure xmlElementTable</a></h3><pre class="programlisting">Structure xmlElementTable<br />struct _xmlHashTable {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlIDTable" id="xmlIDTable">Structure xmlIDTable</a></h3><pre class="programlisting">Structure xmlIDTable<br />struct _xmlHashTable {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlNotationTable" id="xmlNotationTable">Structure xmlNotationTable</a></h3><pre class="programlisting">Structure xmlNotationTable<br />struct _xmlHashTable {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlRefTable" id="xmlRefTable">Structure xmlRefTable</a></h3><pre class="programlisting">Structure xmlRefTable<br />struct _xmlHashTable {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlValidCtxt" id="xmlValidCtxt">Structure xmlValidCtxt</a></h3><pre class="programlisting">Structure xmlValidCtxt<br />struct _xmlValidCtxt {
+ void * userData : user specific data block
+ <a href="libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a> error : the callback in case of errors
+ <a href="libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a> warning : the callback in case of warning Node an
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node : Current parsed Node
+ int nodeNr : Depth of the parsing stack
+ int nodeMax : Max depth of the parsing stack
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * nodeTab : array of nodes
+ int finishDtd : finished validating the Dtd ?
+ <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc : the document
+ int valid : temporary validity check result state s
+ <a href="libxml-valid.html#xmlValidState">xmlValidState</a> * vstate : current state
+ int vstateNr : Depth of the validation stack
+ int vstateMax : Max depth of the validation stack
+ <a href="libxml-valid.html#xmlValidState">xmlValidState</a> * vstateTab : array of validation states
+ <a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am : the automata
+ <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> state : used to build the automata
+ void * am
+ void * state
+}</pre><h3><a name="xmlValidState" id="xmlValidState">Structure xmlValidState</a></h3><pre class="programlisting">Structure xmlValidState<br />struct _xmlValidState {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlAddAttributeDecl" id="xmlAddAttributeDecl"></a>Function: xmlAddAttributeDecl</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> xmlAddAttributeDecl (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns, <br /> <a href="libxml-tree.html#xmlAttributeType">xmlAttributeType</a> type, <br /> <a href="libxml-tree.html#xmlAttributeDefault">xmlAttributeDefault</a> def, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * defaultValue, <br /> <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> tree)<br />
+</pre><p>Register a new <a href="libxml-SAX.html#attribute">attribute</a> declaration Note that @tree becomes the ownership of the DTD</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>pointer to the DTD</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> namespace prefix</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> type</td></tr><tr><td><span class="term"><i><tt>def</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> default type</td></tr><tr><td><span class="term"><i><tt>defaultValue</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> default value</td></tr><tr><td><span class="term"><i><tt>tree</tt></i>:</span></td><td>if it's an enumeration, the associated list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not new, otherwise the <a href="libxml-SAX.html#attribute">attribute</a> decl</td></tr></tbody></table></div><h3><a name="xmlAddElementDecl" id="xmlAddElementDecl"></a>Function: xmlAddElementDecl</h3><pre class="programlisting"><a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> xmlAddElementDecl (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-tree.html#xmlElementTypeVal">xmlElementTypeVal</a> type, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content)<br />
+</pre><p>Register a new element declaration</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>pointer to the DTD</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the element type</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the element content tree or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not, otherwise the entity</td></tr></tbody></table></div><h3><a name="xmlAddID" id="xmlAddID"></a>Function: xmlAddID</h3><pre class="programlisting"><a href="libxml-tree.html#xmlIDPtr">xmlIDPtr</a> xmlAddID (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)<br />
+</pre><p>Register a new id declaration</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>pointer to the document</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value name</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> holding the ID</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not, otherwise the new <a href="libxml-tree.html#xmlIDPtr">xmlIDPtr</a></td></tr></tbody></table></div><h3><a name="xmlAddNotationDecl" id="xmlAddNotationDecl"></a>Function: xmlAddNotationDecl</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a> xmlAddNotationDecl (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * PublicID, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)<br />
+</pre><p>Register a new notation declaration</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>pointer to the DTD</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>PublicID</tt></i>:</span></td><td>the public identifier or NULL</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the system identifier or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not, otherwise the entity</td></tr></tbody></table></div><h3><a name="xmlAddRef" id="xmlAddRef"></a>Function: xmlAddRef</h3><pre class="programlisting"><a href="libxml-tree.html#xmlRefPtr">xmlRefPtr</a> xmlAddRef (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)<br />
+</pre><p>Register a new ref declaration</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>pointer to the document</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value name</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> holding the Ref</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not, otherwise the new <a href="libxml-tree.html#xmlRefPtr">xmlRefPtr</a></td></tr></tbody></table></div><h3><a name="xmlCopyAttributeTable" id="xmlCopyAttributeTable"></a>Function: xmlCopyAttributeTable</h3><pre class="programlisting"><a href="libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a> xmlCopyAttributeTable (<a href="libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a> table)<br />
+</pre><p>Build a copy of an <a href="libxml-SAX.html#attribute">attribute</a> table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An <a href="libxml-SAX.html#attribute">attribute</a> table</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a> or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyElementContent" id="xmlCopyElementContent"></a>Function: xmlCopyElementContent</h3><pre class="programlisting"><a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> xmlCopyElementContent (<a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> cur)<br />
+</pre><p>Build a copy of an element content description.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>An element content pointer.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyElementTable" id="xmlCopyElementTable"></a>Function: xmlCopyElementTable</h3><pre class="programlisting"><a href="libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a> xmlCopyElementTable (<a href="libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a> table)<br />
+</pre><p>Build a copy of an element table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An element table</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a> or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyEnumeration" id="xmlCopyEnumeration"></a>Function: xmlCopyEnumeration</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> xmlCopyEnumeration (<a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> cur)<br />
+</pre><p>Copy an enumeration <a href="libxml-SAX.html#attribute">attribute</a> node (recursive).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the tree to copy.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> just created or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNotationTable" id="xmlCopyNotationTable"></a>Function: xmlCopyNotationTable</h3><pre class="programlisting"><a href="libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a> xmlCopyNotationTable (<a href="libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a> table)<br />
+</pre><p>Build a copy of a notation table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>A notation table</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a> or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCreateEnumeration" id="xmlCreateEnumeration"></a>Function: xmlCreateEnumeration</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> xmlCreateEnumeration (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>create and initialize an enumeration <a href="libxml-SAX.html#attribute">attribute</a> node.</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 enumeration name or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> just created or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlDumpAttributeDecl" id="xmlDumpAttributeDecl"></a>Function: xmlDumpAttributeDecl</h3><pre class="programlisting">void xmlDumpAttributeDecl (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> attr)<br />
+</pre><p>This will dump the content of the <a href="libxml-SAX.html#attribute">attribute</a> declaration as an XML DTD definition</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>An <a href="libxml-SAX.html#attribute">attribute</a> declaration</td></tr></tbody></table></div><h3><a name="xmlDumpAttributeTable" id="xmlDumpAttributeTable"></a>Function: xmlDumpAttributeTable</h3><pre class="programlisting">void xmlDumpAttributeTable (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a> table)<br />
+</pre><p>This will dump the content of the <a href="libxml-SAX.html#attribute">attribute</a> table as an XML DTD definition</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An <a href="libxml-SAX.html#attribute">attribute</a> table</td></tr></tbody></table></div><h3><a name="xmlDumpElementDecl" id="xmlDumpElementDecl"></a>Function: xmlDumpElementDecl</h3><pre class="programlisting">void xmlDumpElementDecl (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> elem)<br />
+</pre><p>This will dump the content of the element declaration as an XML DTD definition</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>An element table</td></tr></tbody></table></div><h3><a name="xmlDumpElementTable" id="xmlDumpElementTable"></a>Function: xmlDumpElementTable</h3><pre class="programlisting">void xmlDumpElementTable (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a> table)<br />
+</pre><p>This will dump the content of the element table as an XML DTD definition</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An element table</td></tr></tbody></table></div><h3><a name="xmlDumpNotationDecl" id="xmlDumpNotationDecl"></a>Function: xmlDumpNotationDecl</h3><pre class="programlisting">void xmlDumpNotationDecl (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a> nota)<br />
+</pre><p>This will dump the content the notation declaration as an XML DTD definition</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>nota</tt></i>:</span></td><td>A notation declaration</td></tr></tbody></table></div><h3><a name="xmlDumpNotationTable" id="xmlDumpNotationTable"></a>Function: xmlDumpNotationTable</h3><pre class="programlisting">void xmlDumpNotationTable (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a> table)<br />
+</pre><p>This will dump the content of the notation table as an XML DTD definition</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>A notation table</td></tr></tbody></table></div><h3><a name="xmlFreeAttributeTable" id="xmlFreeAttributeTable"></a>Function: xmlFreeAttributeTable</h3><pre class="programlisting">void xmlFreeAttributeTable (<a href="libxml-valid.html#xmlAttributeTablePtr">xmlAttributeTablePtr</a> table)<br />
+</pre><p>Deallocate the memory used by an entities hash table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An <a href="libxml-SAX.html#attribute">attribute</a> table</td></tr></tbody></table></div><h3><a name="xmlFreeElementContent" id="xmlFreeElementContent"></a>Function: xmlFreeElementContent</h3><pre class="programlisting">void xmlFreeElementContent (<a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> cur)<br />
+</pre><p>Free an element content structure. This is a recursive call !</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the element content tree to free</td></tr></tbody></table></div><h3><a name="xmlFreeElementTable" id="xmlFreeElementTable"></a>Function: xmlFreeElementTable</h3><pre class="programlisting">void xmlFreeElementTable (<a href="libxml-valid.html#xmlElementTablePtr">xmlElementTablePtr</a> table)<br />
+</pre><p>Deallocate the memory used by an element hash table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An element table</td></tr></tbody></table></div><h3><a name="xmlFreeEnumeration" id="xmlFreeEnumeration"></a>Function: xmlFreeEnumeration</h3><pre class="programlisting">void xmlFreeEnumeration (<a href="libxml-tree.html#xmlEnumerationPtr">xmlEnumerationPtr</a> cur)<br />
+</pre><p>free an enumeration <a href="libxml-SAX.html#attribute">attribute</a> node (recursive).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the tree to free.</td></tr></tbody></table></div><h3><a name="xmlFreeIDTable" id="xmlFreeIDTable"></a>Function: xmlFreeIDTable</h3><pre class="programlisting">void xmlFreeIDTable (<a href="libxml-valid.html#xmlIDTablePtr">xmlIDTablePtr</a> table)<br />
+</pre><p>Deallocate the memory used by an ID hash table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An id table</td></tr></tbody></table></div><h3><a name="xmlFreeNotationTable" id="xmlFreeNotationTable"></a>Function: xmlFreeNotationTable</h3><pre class="programlisting">void xmlFreeNotationTable (<a href="libxml-valid.html#xmlNotationTablePtr">xmlNotationTablePtr</a> table)<br />
+</pre><p>Deallocate the memory used by an entities hash table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An notation table</td></tr></tbody></table></div><h3><a name="xmlFreeRefTable" id="xmlFreeRefTable"></a>Function: xmlFreeRefTable</h3><pre class="programlisting">void xmlFreeRefTable (<a href="libxml-valid.html#xmlRefTablePtr">xmlRefTablePtr</a> table)<br />
+</pre><p>Deallocate the memory used by an Ref hash table.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An ref table</td></tr></tbody></table></div><h3><a name="xmlFreeValidCtxt" id="xmlFreeValidCtxt"></a>Function: xmlFreeValidCtxt</h3><pre class="programlisting">void xmlFreeValidCtxt (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> cur)<br />
+</pre><p>Free a validation context structure.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the validation context to free</td></tr></tbody></table></div><h3><a name="xmlGetDtdAttrDesc" id="xmlGetDtdAttrDesc"></a>Function: xmlGetDtdAttrDesc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> xmlGetDtdAttrDesc (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Search the DTD for the description of this <a href="libxml-SAX.html#attribute">attribute</a> on this element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>a pointer to the DtD to search</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> if found or NULL</td></tr></tbody></table></div><h3><a name="xmlGetDtdElementDesc" id="xmlGetDtdElementDesc"></a>Function: xmlGetDtdElementDesc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> xmlGetDtdElementDesc (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Search the DTD for the description of this element</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>a pointer to the DtD to search</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> if found or NULL</td></tr></tbody></table></div><h3><a name="xmlGetDtdNotationDesc" id="xmlGetDtdNotationDesc"></a>Function: xmlGetDtdNotationDesc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a> xmlGetDtdNotationDesc (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Search the DTD for the description of this notation</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>a pointer to the DtD to search</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the notation name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a> if found or NULL</td></tr></tbody></table></div><h3><a name="xmlGetDtdQAttrDesc" id="xmlGetDtdQAttrDesc"></a>Function: xmlGetDtdQAttrDesc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> xmlGetDtdQAttrDesc (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p>Search the DTD for the description of this qualified <a href="libxml-SAX.html#attribute">attribute</a> on this element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>a pointer to the DtD to search</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> namespace prefix</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> if found or NULL</td></tr></tbody></table></div><h3><a name="xmlGetDtdQElementDesc" id="xmlGetDtdQElementDesc"></a>Function: xmlGetDtdQElementDesc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> xmlGetDtdQElementDesc (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p>Search the DTD for the description of this element</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>a pointer to the DtD to search</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the element namespace prefix</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> if found or NULL</td></tr></tbody></table></div><h3><a name="xmlGetID" id="xmlGetID"></a>Function: xmlGetID</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlGetID (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID)<br />
+</pre><p>Search the <a href="libxml-SAX.html#attribute">attribute</a> declaring the given ID</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>pointer to the document</td></tr><tr><td><span class="term"><i><tt>ID</tt></i>:</span></td><td>the ID value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not found, otherwise the <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> defining the ID</td></tr></tbody></table></div><h3><a name="xmlGetRefs" id="xmlGetRefs"></a>Function: xmlGetRefs</h3><pre class="programlisting"><a href="libxml-list.html#xmlListPtr">xmlListPtr</a> xmlGetRefs (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ID)<br />
+</pre><p>Find the set of references for the supplied ID.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>pointer to the document</td></tr><tr><td><span class="term"><i><tt>ID</tt></i>:</span></td><td>the ID value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not found, otherwise node set for the ID.</td></tr></tbody></table></div><h3><a name="xmlIsID" id="xmlIsID"></a>Function: xmlIsID</h3><pre class="programlisting">int xmlIsID (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)<br />
+</pre><p>Determine whether an <a href="libxml-SAX.html#attribute">attribute</a> is of type ID. In case we have DTD(s) then this is done if DTD loading has been requested. In the case of HTML documents parsed with the HTML parser, then ID detection is done systematically.</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>elem</tt></i>:</span></td><td>the element carrying the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or 1 depending on the lookup result</td></tr></tbody></table></div><h3><a name="xmlIsMixedElement" id="xmlIsMixedElement"></a>Function: xmlIsMixedElement</h3><pre class="programlisting">int xmlIsMixedElement (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Search in the DtDs whether an element accept Mixed content (or ANY) basically if it is supposed to accept text childs</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the element name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if no, 1 if yes, and -1 if no element description is available</td></tr></tbody></table></div><h3><a name="xmlIsRef" id="xmlIsRef"></a>Function: xmlIsRef</h3><pre class="programlisting">int xmlIsRef (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)<br />
+</pre><p>Determine whether an <a href="libxml-SAX.html#attribute">attribute</a> is of type Ref. In case we have DTD(s) then this is simple, otherwise we use an heuristic: name Ref (upper or lowercase).</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>elem</tt></i>:</span></td><td>the element carrying the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or 1 depending on the lookup result</td></tr></tbody></table></div><h3><a name="xmlNewElementContent" id="xmlNewElementContent"></a>Function: xmlNewElementContent</h3><pre class="programlisting"><a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> xmlNewElementContent (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-tree.html#xmlElementContentType">xmlElementContentType</a> type)<br />
+</pre><p>Allocate an element content structure.</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 subelement name or NULL</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the type of element content decl</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not, otherwise the new element content structure</td></tr></tbody></table></div><h3><a name="xmlNewValidCtxt" id="xmlNewValidCtxt"></a>Function: xmlNewValidCtxt</h3><pre class="programlisting"><a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> xmlNewValidCtxt (void)<br />
+</pre><p>Allocate a validation context structure.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not, otherwise the new validation context structure</td></tr></tbody></table></div><h3><a name="xmlRemoveID" id="xmlRemoveID"></a>Function: xmlRemoveID</h3><pre class="programlisting">int xmlRemoveID (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)<br />
+</pre><p>Remove the given <a href="libxml-SAX.html#attribute">attribute</a> from the ID table maintained internally.</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>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 if the lookup failed and 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlRemoveRef" id="xmlRemoveRef"></a>Function: xmlRemoveRef</h3><pre class="programlisting">int xmlRemoveRef (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr)<br />
+</pre><p>Remove the given <a href="libxml-SAX.html#attribute">attribute</a> from the Ref table maintained internally.</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>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 if the lookup failed and 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlSnprintfElementContent" id="xmlSnprintfElementContent"></a>Function: xmlSnprintfElementContent</h3><pre class="programlisting">void xmlSnprintfElementContent (char * buf, <br /> int size, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content, <br /> int glob)<br />
+</pre><p>This will dump the content of the element content definition Intended just for the debug routine</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>an output buffer</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the buffer size</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>An element table</td></tr><tr><td><span class="term"><i><tt>glob</tt></i>:</span></td><td>1 if one must print the englobing parenthesis, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlSprintfElementContent" id="xmlSprintfElementContent"></a>Function: xmlSprintfElementContent</h3><pre class="programlisting">void xmlSprintfElementContent (char * buf, <br /> <a href="libxml-tree.html#xmlElementContentPtr">xmlElementContentPtr</a> content, <br /> int glob)<br />
+</pre><p>Deprecated, unsafe, use <a href="libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>an output buffer</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>An element table</td></tr><tr><td><span class="term"><i><tt>glob</tt></i>:</span></td><td>1 if one must print the englobing parenthesis, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidBuildContentModel" id="xmlValidBuildContentModel"></a>Function: xmlValidBuildContentModel</h3><pre class="programlisting">int xmlValidBuildContentModel (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> elem)<br />
+</pre><p>(Re)Build the automata associated to the content model of this element</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 validation context</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element declaration node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 in case of success, 0 in case of error</td></tr></tbody></table></div><h3><a name="xmlValidCtxtNormalizeAttributeValue" id="xmlValidCtxtNormalizeAttributeValue"></a>Function: xmlValidCtxtNormalizeAttributeValue</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlValidCtxtNormalizeAttributeValue (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Does the validation related extra step of the normalization of <a href="libxml-SAX.html#attribute">attribute</a> values: If the declared value is not CDATA, then the XML processor must further process the normalized <a href="libxml-SAX.html#attribute">attribute</a> value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) <a href="libxml-SAX.html#characters">characters</a> by single space (#x20) character. Also check VC: Standalone Document Declaration in P32, and update ctxt-&gt;valid accordingly</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context or NULL</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the parent</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new normalized string if normalization is needed, NULL otherwise the caller must free the returned value.</td></tr></tbody></table></div><h3><a name="xmlValidGetPotentialChildren" id="xmlValidGetPotentialChildren"></a>Function: xmlValidGetPotentialChildren</h3><pre class="programlisting">int xmlValidGetPotentialChildren (<a href="libxml-tree.html#xmlElementContent">xmlElementContent</a> * ctree, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** list, <br /> int * len, <br /> int max)<br />
+</pre><p>Build/extend a list of potential children allowed by the content tree</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctree</tt></i>:</span></td><td>an element content tree</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>an array to store the list of child names</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>a pointer to the number of element in the list</td></tr><tr><td><span class="term"><i><tt>max</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 number of element in the list, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlValidGetValidElements" id="xmlValidGetValidElements"></a>Function: xmlValidGetValidElements</h3><pre class="programlisting">int xmlValidGetValidElements (<a href="libxml-tree.html#xmlNode">xmlNode</a> * prev, <br /> <a href="libxml-tree.html#xmlNode">xmlNode</a> * next, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** list, <br /> int max)<br />
+</pre><p>This function returns the list of authorized children to insert within an existing tree while respecting the validity constraints forced by the Dtd. The insertion point is defined using @prev and @next in the following ways: to insert before 'node': xmlValidGetValidElements(node-&gt;prev, node, ... to insert next 'node': xmlValidGetValidElements(node, node-&gt;next, ... to replace 'node': xmlValidGetValidElements(node-&gt;prev, node-&gt;next, ... to prepend a child to 'node': xmlValidGetValidElements(NULL, node-&gt;childs, to append a child to 'node': xmlValidGetValidElements(node-&gt;last, NULL, ... pointers to the element names are inserted at the beginning of the array and do not need to be freed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>prev</tt></i>:</span></td><td>an element to insert after</td></tr><tr><td><span class="term"><i><tt>next</tt></i>:</span></td><td>an element to insert next</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>an array to store the list of child names</td></tr><tr><td><span class="term"><i><tt>max</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 number of element in the list, or -1 in case of error. If the function returns the value @max the caller is invited to grow the receiving array and retry.</td></tr></tbody></table></div><h3><a name="xmlValidNormalizeAttributeValue" id="xmlValidNormalizeAttributeValue"></a>Function: xmlValidNormalizeAttributeValue</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlValidNormalizeAttributeValue (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Does the validation related extra step of the normalization of <a href="libxml-SAX.html#attribute">attribute</a> values: If the declared value is not CDATA, then the XML processor must further process the normalized <a href="libxml-SAX.html#attribute">attribute</a> value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) <a href="libxml-SAX.html#characters">characters</a> by single space (#x20) character.</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>elem</tt></i>:</span></td><td>the parent</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new normalized string if normalization is needed, NULL otherwise the caller must free the returned value.</td></tr></tbody></table></div><h3><a name="xmlValidateAttributeDecl" id="xmlValidateAttributeDecl"></a>Function: xmlValidateAttributeDecl</h3><pre class="programlisting">int xmlValidateAttributeDecl (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a> attr)<br />
+</pre><p>Try to validate a single <a href="libxml-SAX.html#attribute">attribute</a> definition basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Default Legal ] - [ VC: Enumeration ] - [ VC: ID Attribute Default ] The ID/IDREF uniqueness and matching are done separately</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>an <a href="libxml-SAX.html#attribute">attribute</a> definition</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateAttributeValue" id="xmlValidateAttributeValue"></a>Function: xmlValidateAttributeValue</h3><pre class="programlisting">int xmlValidateAttributeValue (<a href="libxml-tree.html#xmlAttributeType">xmlAttributeType</a> type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Validate that the given <a href="libxml-SAX.html#attribute">attribute</a> value match the proper production [ VC: ID ] Values of type ID must match the Name production.... [ VC: IDREF ] Values of type IDREF must match the Name production, and values of type IDREFS must match Names ... [ VC: Entity Name ] Values of type ENTITY must match the Name production, values of type ENTITIES must match Names ... [ VC: Name Token ] Values of type NMTOKEN must match the Nmtoken production; values of type NMTOKENS must match Nmtokens.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>an <a href="libxml-SAX.html#attribute">attribute</a> type</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>an <a href="libxml-SAX.html#attribute">attribute</a> value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateDocument" id="xmlValidateDocument"></a>Function: xmlValidateDocument</h3><pre class="programlisting">int xmlValidateDocument (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Try to validate the document instance basically it does the all the checks described by the XML Rec i.e. validates the internal and external subset (if present) and validate the document tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateDocumentFinal" id="xmlValidateDocumentFinal"></a>Function: xmlValidateDocumentFinal</h3><pre class="programlisting">int xmlValidateDocumentFinal (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Does the final step for the document validation once all the incremental validation steps have been completed basically it does the following checks described by the XML Rec Check all the IDREF/IDREFS attributes definition for validity</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateDtd" id="xmlValidateDtd"></a>Function: xmlValidateDtd</h3><pre class="programlisting">int xmlValidateDtd (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd)<br />
+</pre><p>Try to validate the document against the dtd instance basically it does check all the definitions in the DtD.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>dtd</tt></i>:</span></td><td>a dtd instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateDtdFinal" id="xmlValidateDtdFinal"></a>Function: xmlValidateDtdFinal</h3><pre class="programlisting">int xmlValidateDtdFinal (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Does the final step for the dtds validation once all the subsets have been parsed basically it does the following checks described by the XML Rec - check that ENTITY and ENTITIES type attributes default or possible values matches one of the defined entities. - check that NOTATION type attributes default or possible values matches one of the defined notations.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 if invalid and -1 if not well-formed</td></tr></tbody></table></div><h3><a name="xmlValidateElement" id="xmlValidateElement"></a>Function: xmlValidateElement</h3><pre class="programlisting">int xmlValidateElement (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br />
+</pre><p>Try to validate the subtree under an element</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateElementDecl" id="xmlValidateElementDecl"></a>Function: xmlValidateElementDecl</h3><pre class="programlisting">int xmlValidateElementDecl (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlElementPtr">xmlElementPtr</a> elem)<br />
+</pre><p>Try to validate a single element definition basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: One ID per Element Type ] - [ VC: No Duplicate Types ] - [ VC: Unique Element Type Declaration ]</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element definition</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateNameValue" id="xmlValidateNameValue"></a>Function: xmlValidateNameValue</h3><pre class="programlisting">int xmlValidateNameValue (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Validate that the given value match Name production</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>an Name value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateNamesValue" id="xmlValidateNamesValue"></a>Function: xmlValidateNamesValue</h3><pre class="programlisting">int xmlValidateNamesValue (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Validate that the given value match Names production</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>an Names value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateNmtokenValue" id="xmlValidateNmtokenValue"></a>Function: xmlValidateNmtokenValue</h3><pre class="programlisting">int xmlValidateNmtokenValue (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Validate that the given value match Nmtoken production [ VC: Name Token ]</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>an Nmtoken value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateNmtokensValue" id="xmlValidateNmtokensValue"></a>Function: xmlValidateNmtokensValue</h3><pre class="programlisting">int xmlValidateNmtokensValue (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Validate that the given value match Nmtokens production [ VC: Name Token ]</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>an Nmtokens value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateNotationDecl" id="xmlValidateNotationDecl"></a>Function: xmlValidateNotationDecl</h3><pre class="programlisting">int xmlValidateNotationDecl (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNotationPtr">xmlNotationPtr</a> nota)<br />
+</pre><p>Try to validate a single notation definition basically it does the following checks as described by the XML-1.0 recommendation: - it seems that no validity constraint exists on notation declarations But this function get called anyway ...</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>nota</tt></i>:</span></td><td>a notation definition</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateNotationUse" id="xmlValidateNotationUse"></a>Function: xmlValidateNotationUse</h3><pre class="programlisting">int xmlValidateNotationUse (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * notationName)<br />
+</pre><p>Validate that the given name match a notation declaration. - [ VC: Notation Declared ]</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>notationName</tt></i>:</span></td><td>the notation name to check</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateOneAttribute" id="xmlValidateOneAttribute"></a>Function: xmlValidateOneAttribute</h3><pre class="programlisting">int xmlValidateOneAttribute (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Try to validate a single <a href="libxml-SAX.html#attribute">attribute</a> for an element basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Value Type ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity Name ] - [ VC: Notation Attributes ] The ID/IDREF uniqueness and matching are done separately</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>an <a href="libxml-SAX.html#attribute">attribute</a> instance</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value (without entities processing)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateOneElement" id="xmlValidateOneElement"></a>Function: xmlValidateOneElement</h3><pre class="programlisting">int xmlValidateOneElement (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br />
+</pre><p>Try to validate a single element and it's attributes, basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Element Valid ] - [ VC: Required Attribute ] Then call xmlValidateOneAttribute() for each <a href="libxml-SAX.html#attribute">attribute</a> present. The ID/IDREF checkings are done separately</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateOneNamespace" id="xmlValidateOneNamespace"></a>Function: xmlValidateOneNamespace</h3><pre class="programlisting">int xmlValidateOneNamespace (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+</pre><p>Try to validate a single namespace declaration for an element basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Value Type ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity Name ] - [ VC: Notation Attributes ] The ID/IDREF uniqueness and matching are done separately</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the namespace prefix</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>an namespace declaration instance</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value (without entities processing)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidatePopElement" id="xmlValidatePopElement"></a>Function: xmlValidatePopElement</h3><pre class="programlisting">int xmlValidatePopElement (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * qname)<br />
+</pre><p>Pop the element end from the validation stack.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>qname</tt></i>:</span></td><td>the qualified name as appearing in the serialization</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidatePushCData" id="xmlValidatePushCData"></a>Function: xmlValidatePushCData</h3><pre class="programlisting">int xmlValidatePushCData (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data, <br /> int len)<br />
+</pre><p>check the CData parsed for validation in the current stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the lenght of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidatePushElement" id="xmlValidatePushElement"></a>Function: xmlValidatePushElement</h3><pre class="programlisting">int xmlValidatePushElement (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * qname)<br />
+</pre><p>Push a new element start on the validation stack.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>qname</tt></i>:</span></td><td>the qualified name as appearing in the serialization</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateRoot" id="xmlValidateRoot"></a>Function: xmlValidateRoot</h3><pre class="programlisting">int xmlValidateRoot (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Try to validate a the root element basically it does the following check as described by the XML-1.0 recommendation: - [ VC: Root Element Type ] it doesn't try to recurse or apply other check to the element</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if valid or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidityErrorFunc" id="xmlValidityErrorFunc"></a>Function type: xmlValidityErrorFunc</h3><pre class="programlisting">Function type: xmlValidityErrorFunc
+void xmlValidityErrorFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p>Callback called when a validity error is found. This is a message oriented function similar to an *printf function.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an <a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> validity error context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the string to format *printf like vararg</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>remaining arguments to the format</td></tr></tbody></table></div><br />
+<h3><a name="xmlValidityWarningFunc" id="xmlValidityWarningFunc"></a>Function type: xmlValidityWarningFunc</h3><pre class="programlisting">Function type: xmlValidityWarningFunc
+void xmlValidityWarningFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p>Callback called when a validity warning is found. This is a message oriented function similar to an *printf function.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an <a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> validity error context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the string to format *printf like vararg</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>remaining arguments to the format</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-xinclude.html b/doc/html/libxml-xinclude.html
new file mode 100644
index 0000000..4690e6e
--- /dev/null
+++ b/doc/html/libxml-xinclude.html
@@ -0,0 +1,53 @@
+<?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 xinclude from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xinclude 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-valid.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-valid.html">valid</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-xlink.html">xlink</a></th><td><a accesskey="n" href="libxml-xlink.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>API to handle XInclude processing, implements the World Wide Web Consortium Last Call Working Draft 10 November 2003</p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#XINCLUDE_FALLBACK">XINCLUDE_FALLBACK</a></pre><pre class="programlisting">#define <a href="#XINCLUDE_HREF">XINCLUDE_HREF</a></pre><pre class="programlisting">#define <a href="#XINCLUDE_NODE">XINCLUDE_NODE</a></pre><pre class="programlisting">#define <a href="#XINCLUDE_NS">XINCLUDE_NS</a></pre><pre class="programlisting">#define <a href="#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a></pre><pre class="programlisting">#define <a href="#XINCLUDE_PARSE">XINCLUDE_PARSE</a></pre><pre class="programlisting">#define <a href="#XINCLUDE_PARSE_ENCODING">XINCLUDE_PARSE_ENCODING</a></pre><pre class="programlisting">#define <a href="#XINCLUDE_PARSE_TEXT">XINCLUDE_PARSE_TEXT</a></pre><pre class="programlisting">#define <a href="#XINCLUDE_PARSE_XML">XINCLUDE_PARSE_XML</a></pre><pre class="programlisting">#define <a href="#XINCLUDE_PARSE_XPOINTER">XINCLUDE_PARSE_XPOINTER</a></pre><pre class="programlisting">Structure <a href="#xmlXIncludeCtxt">xmlXIncludeCtxt</a><br />struct _xmlXIncludeCtxt
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xinclude.html#xmlXIncludeCtxt">xmlXIncludeCtxt</a> * <a name="xmlXIncludeCtxtPtr" id="xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a>
+</pre><pre class="programlisting">void <a href="#xmlXIncludeFreeContext">xmlXIncludeFreeContext</a> (<a href="libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a> <a href="#xmlXIncludeNewContext">xmlXIncludeNewContext</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">int <a href="#xmlXIncludeProcess">xmlXIncludeProcess</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">int <a href="#xmlXIncludeProcessFlags">xmlXIncludeProcessFlags</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> int flags)</pre>
+<pre class="programlisting">int <a href="#xmlXIncludeProcessNode">xmlXIncludeProcessNode</a> (<a href="libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">int <a href="#xmlXIncludeProcessTree">xmlXIncludeProcessTree</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree)</pre>
+<pre class="programlisting">int <a href="#xmlXIncludeProcessTreeFlags">xmlXIncludeProcessTreeFlags</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree, <br /> int flags)</pre>
+<pre class="programlisting">int <a href="#xmlXIncludeSetFlags">xmlXIncludeSetFlags</a> (<a href="libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a> ctxt, <br /> int flags)</pre>
+<h2>Description</h2>
+<h3><a name="XINCLUDE_FALLBACK" id="XINCLUDE_FALLBACK"></a>Macro: XINCLUDE_FALLBACK</h3><pre>#define XINCLUDE_FALLBACK</pre><p>Macro defining "fallback"</p>
+<h3><a name="XINCLUDE_HREF" id="XINCLUDE_HREF"></a>Macro: XINCLUDE_HREF</h3><pre>#define XINCLUDE_HREF</pre><p>Macro defining "href"</p>
+<h3><a name="XINCLUDE_NODE" id="XINCLUDE_NODE"></a>Macro: XINCLUDE_NODE</h3><pre>#define XINCLUDE_NODE</pre><p>Macro defining "include"</p>
+<h3><a name="XINCLUDE_NS" id="XINCLUDE_NS"></a>Macro: XINCLUDE_NS</h3><pre>#define XINCLUDE_NS</pre><p>Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude</p>
+<h3><a name="XINCLUDE_OLD_NS" id="XINCLUDE_OLD_NS"></a>Macro: XINCLUDE_OLD_NS</h3><pre>#define XINCLUDE_OLD_NS</pre><p>Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude</p>
+<h3><a name="XINCLUDE_PARSE" id="XINCLUDE_PARSE"></a>Macro: XINCLUDE_PARSE</h3><pre>#define XINCLUDE_PARSE</pre><p>Macro defining "parse"</p>
+<h3><a name="XINCLUDE_PARSE_ENCODING" id="XINCLUDE_PARSE_ENCODING"></a>Macro: XINCLUDE_PARSE_ENCODING</h3><pre>#define XINCLUDE_PARSE_ENCODING</pre><p>Macro defining "encoding"</p>
+<h3><a name="XINCLUDE_PARSE_TEXT" id="XINCLUDE_PARSE_TEXT"></a>Macro: XINCLUDE_PARSE_TEXT</h3><pre>#define XINCLUDE_PARSE_TEXT</pre><p>Macro defining "text"</p>
+<h3><a name="XINCLUDE_PARSE_XML" id="XINCLUDE_PARSE_XML"></a>Macro: XINCLUDE_PARSE_XML</h3><pre>#define XINCLUDE_PARSE_XML</pre><p>Macro defining "xml"</p>
+<h3><a name="XINCLUDE_PARSE_XPOINTER" id="XINCLUDE_PARSE_XPOINTER"></a>Macro: XINCLUDE_PARSE_XPOINTER</h3><pre>#define XINCLUDE_PARSE_XPOINTER</pre><p>Macro defining "xpointer"</p>
+<h3><a name="xmlXIncludeCtxt" id="xmlXIncludeCtxt">Structure xmlXIncludeCtxt</a></h3><pre class="programlisting">Structure xmlXIncludeCtxt<br />struct _xmlXIncludeCtxt {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlXIncludeFreeContext" id="xmlXIncludeFreeContext"></a>Function: xmlXIncludeFreeContext</h3><pre class="programlisting">void xmlXIncludeFreeContext (<a href="libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a> ctxt)<br />
+</pre><p>Free an XInclude 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 XInclude context</td></tr></tbody></table></div><h3><a name="xmlXIncludeNewContext" id="xmlXIncludeNewContext"></a>Function: xmlXIncludeNewContext</h3><pre class="programlisting"><a href="libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a> xmlXIncludeNewContext (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Creates a new XInclude context</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>an XML Document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new set</td></tr></tbody></table></div><h3><a name="xmlXIncludeProcess" id="xmlXIncludeProcess"></a>Function: xmlXIncludeProcess</h3><pre class="programlisting">int xmlXIncludeProcess (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Implement the XInclude substitution on the XML document @doc</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>an XML document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if no substitution were done, -1 if some processing failed or the number of substitutions done.</td></tr></tbody></table></div><h3><a name="xmlXIncludeProcessFlags" id="xmlXIncludeProcessFlags"></a>Function: xmlXIncludeProcessFlags</h3><pre class="programlisting">int xmlXIncludeProcessFlags (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> int flags)<br />
+</pre><p>Implement the XInclude substitution on the XML document @doc</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>an XML document</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>a set of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a> used for parsing XML includes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if no substitution were done, -1 if some processing failed or the number of substitutions done.</td></tr></tbody></table></div><h3><a name="xmlXIncludeProcessNode" id="xmlXIncludeProcessNode"></a>Function: xmlXIncludeProcessNode</h3><pre class="programlisting">int xmlXIncludeProcessNode (<a href="libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Implement the XInclude substitution for the given subtree reusing the informations and data coming from the given 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 existing XInclude context</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node in an XML document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if no substitution were done, -1 if some processing failed or the number of substitutions done.</td></tr></tbody></table></div><h3><a name="xmlXIncludeProcessTree" id="xmlXIncludeProcessTree"></a>Function: xmlXIncludeProcessTree</h3><pre class="programlisting">int xmlXIncludeProcessTree (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree)<br />
+</pre><p>Implement the XInclude substitution for the given subtree</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tree</tt></i>:</span></td><td>a node in an XML document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if no substitution were done, -1 if some processing failed or the number of substitutions done.</td></tr></tbody></table></div><h3><a name="xmlXIncludeProcessTreeFlags" id="xmlXIncludeProcessTreeFlags"></a>Function: xmlXIncludeProcessTreeFlags</h3><pre class="programlisting">int xmlXIncludeProcessTreeFlags (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree, <br /> int flags)<br />
+</pre><p>Implement the XInclude substitution for the given subtree</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>tree</tt></i>:</span></td><td>a node in an XML document</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>a set of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a> used for parsing XML includes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if no substitution were done, -1 if some processing failed or the number of substitutions done.</td></tr></tbody></table></div><h3><a name="xmlXIncludeSetFlags" id="xmlXIncludeSetFlags"></a>Function: xmlXIncludeSetFlags</h3><pre class="programlisting">int xmlXIncludeSetFlags (<a href="libxml-xinclude.html#xmlXIncludeCtxtPtr">xmlXIncludeCtxtPtr</a> ctxt, <br /> int flags)<br />
+</pre><p>Set the flags used for further processing of XML resources.</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 XInclude processing context</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>a set of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a> used for parsing XML includes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div><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-xlink.html b/doc/html/libxml-xlink.html
new file mode 100644
index 0000000..52fb234
--- /dev/null
+++ b/doc/html/libxml-xlink.html
@@ -0,0 +1,82 @@
+<?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 xlink from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xlink 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xinclude.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xinclude.html">xinclude</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-xmlIO.html">xmlIO</a></th><td><a accesskey="n" href="libxml-xmlIO.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>unfinished XLink detection module </p><h2>Table of Contents</h2><pre class="programlisting">Enum <a href="#xlinkActuate">xlinkActuate</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a name="xlinkHRef" id="xlinkHRef">xlinkHRef</a>
+</pre><pre class="programlisting">Structure <a href="#xlinkHandler">xlinkHandler</a><br />struct _xlinkHandler
+</pre><pre class="programlisting">Typedef <a href="libxml-xlink.html#xlinkHandler">xlinkHandler</a> * <a name="xlinkHandlerPtr" id="xlinkHandlerPtr">xlinkHandlerPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a name="xlinkRole" id="xlinkRole">xlinkRole</a>
+</pre><pre class="programlisting">Enum <a href="#xlinkShow">xlinkShow</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a name="xlinkTitle" id="xlinkTitle">xlinkTitle</a>
+</pre><pre class="programlisting">Enum <a href="#xlinkType">xlinkType</a>
+</pre><pre class="programlisting">Function type: <a href="#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a>
+void <a href="#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a> (void * ctx, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int nbLocators, <br /> const <a href="libxml-xlink.html#xlinkHRef">xlinkHRef</a> * hrefs, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> * roles, <br /> int nbArcs, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> * from, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> * to, <br /> <a href="libxml-xlink.html#xlinkShow">xlinkShow</a> * show, <br /> <a href="libxml-xlink.html#xlinkActuate">xlinkActuate</a> * actuate, <br /> int nbTitles, <br /> const <a href="libxml-xlink.html#xlinkTitle">xlinkTitle</a> * titles, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** langs)
+</pre>
+<pre class="programlisting">Function type: <a href="#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a>
+void <a href="#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a> (void * ctx, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int nbLocators, <br /> const <a href="libxml-xlink.html#xlinkHRef">xlinkHRef</a> * hrefs, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> * roles, <br /> int nbTitles, <br /> const <a href="libxml-xlink.html#xlinkTitle">xlinkTitle</a> * titles, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** langs)
+</pre>
+<pre class="programlisting"><a href="libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a> <a href="#xlinkGetDefaultDetect">xlinkGetDefaultDetect</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-xlink.html#xlinkHandlerPtr">xlinkHandlerPtr</a> <a href="#xlinkGetDefaultHandler">xlinkGetDefaultHandler</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-xlink.html#xlinkType">xlinkType</a> <a href="#xlinkIsLink">xlinkIsLink</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">Function type: <a href="#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a>
+void <a href="#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a> (void * ctx, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)
+</pre>
+<pre class="programlisting">void <a href="#xlinkSetDefaultDetect">xlinkSetDefaultDetect</a> (<a href="libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a> func)</pre>
+<pre class="programlisting">void <a href="#xlinkSetDefaultHandler">xlinkSetDefaultHandler</a> (<a href="libxml-xlink.html#xlinkHandlerPtr">xlinkHandlerPtr</a> handler)</pre>
+<pre class="programlisting">Function type: <a href="#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a>
+void <a href="#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a> (void * ctx, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xlink.html#xlinkHRef">xlinkHRef</a> href, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> role, <br /> const <a href="libxml-xlink.html#xlinkTitle">xlinkTitle</a> title)
+</pre>
+<h2>Description</h2>
+<h3>Enum <a name="xlinkActuate" id="xlinkActuate">xlinkActuate</a></h3><pre class="programlisting">Enum xlinkActuate {
+ <a name="XLINK_ACTUATE_NONE" id="XLINK_ACTUATE_NONE">XLINK_ACTUATE_NONE</a> = 0
+ <a name="XLINK_ACTUATE_AUTO" id="XLINK_ACTUATE_AUTO">XLINK_ACTUATE_AUTO</a> = 1
+ <a name="XLINK_ACTUATE_ONREQUEST" id="XLINK_ACTUATE_ONREQUEST">XLINK_ACTUATE_ONREQUEST</a> = 2
+}
+</pre><h3><a name="xlinkHandler" id="xlinkHandler">Structure xlinkHandler</a></h3><pre class="programlisting">Structure xlinkHandler<br />struct _xlinkHandler {
+ <a href="libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a> simple
+ <a href="libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a> extended
+ <a href="libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a> set
+}</pre><h3>Enum <a name="xlinkShow" id="xlinkShow">xlinkShow</a></h3><pre class="programlisting">Enum xlinkShow {
+ <a name="XLINK_SHOW_NONE" id="XLINK_SHOW_NONE">XLINK_SHOW_NONE</a> = 0
+ <a name="XLINK_SHOW_NEW" id="XLINK_SHOW_NEW">XLINK_SHOW_NEW</a> = 1
+ <a name="XLINK_SHOW_EMBED" id="XLINK_SHOW_EMBED">XLINK_SHOW_EMBED</a> = 2
+ <a name="XLINK_SHOW_REPLACE" id="XLINK_SHOW_REPLACE">XLINK_SHOW_REPLACE</a> = 3
+}
+</pre><h3>Enum <a name="xlinkType" id="xlinkType">xlinkType</a></h3><pre class="programlisting">Enum xlinkType {
+ <a name="XLINK_TYPE_NONE" id="XLINK_TYPE_NONE">XLINK_TYPE_NONE</a> = 0
+ <a name="XLINK_TYPE_SIMPLE" id="XLINK_TYPE_SIMPLE">XLINK_TYPE_SIMPLE</a> = 1
+ <a name="XLINK_TYPE_EXTENDED" id="XLINK_TYPE_EXTENDED">XLINK_TYPE_EXTENDED</a> = 2
+ <a name="XLINK_TYPE_EXTENDED_SET" id="XLINK_TYPE_EXTENDED_SET">XLINK_TYPE_EXTENDED_SET</a> = 3
+}
+</pre><h3><a name="xlinkExtendedLinkFunk" id="xlinkExtendedLinkFunk"></a>Function type: xlinkExtendedLinkFunk</h3><pre class="programlisting">Function type: xlinkExtendedLinkFunk
+void xlinkExtendedLinkFunk (void * ctx, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int nbLocators, <br /> const <a href="libxml-xlink.html#xlinkHRef">xlinkHRef</a> * hrefs, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> * roles, <br /> int nbArcs, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> * from, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> * to, <br /> <a href="libxml-xlink.html#xlinkShow">xlinkShow</a> * show, <br /> <a href="libxml-xlink.html#xlinkActuate">xlinkActuate</a> * actuate, <br /> int nbTitles, <br /> const <a href="libxml-xlink.html#xlinkTitle">xlinkTitle</a> * titles, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** langs)
+</pre><p>This is the prototype for a extended link detection callback.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>user data pointer</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node carrying the link</td></tr><tr><td><span class="term"><i><tt>nbLocators</tt></i>:</span></td><td>the number of locators detected on the link</td></tr><tr><td><span class="term"><i><tt>hrefs</tt></i>:</span></td><td>pointer to the array of locator hrefs</td></tr><tr><td><span class="term"><i><tt>roles</tt></i>:</span></td><td>pointer to the array of locator roles</td></tr><tr><td><span class="term"><i><tt>nbArcs</tt></i>:</span></td><td>the number of arcs detected on the link</td></tr><tr><td><span class="term"><i><tt>from</tt></i>:</span></td><td>pointer to the array of source roles found on the arcs</td></tr><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>pointer to the array of target roles found on the arcs</td></tr><tr><td><span class="term"><i><tt>show</tt></i>:</span></td><td>array of values for the show attributes found on the arcs</td></tr><tr><td><span class="term"><i><tt>actuate</tt></i>:</span></td><td>array of values for the actuate attributes found on the arcs</td></tr><tr><td><span class="term"><i><tt>nbTitles</tt></i>:</span></td><td>the number of titles detected on the link</td></tr><tr><td><span class="term"><i><tt>titles</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>langs</tt></i>:</span></td><td>array of xml:lang values for the titles</td></tr></tbody></table></div><br />
+<h3><a name="xlinkExtendedLinkSetFunk" id="xlinkExtendedLinkSetFunk"></a>Function type: xlinkExtendedLinkSetFunk</h3><pre class="programlisting">Function type: xlinkExtendedLinkSetFunk
+void xlinkExtendedLinkSetFunk (void * ctx, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int nbLocators, <br /> const <a href="libxml-xlink.html#xlinkHRef">xlinkHRef</a> * hrefs, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> * roles, <br /> int nbTitles, <br /> const <a href="libxml-xlink.html#xlinkTitle">xlinkTitle</a> * titles, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** langs)
+</pre><p>This is the prototype for a extended link set detection callback.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>user data pointer</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node carrying the link</td></tr><tr><td><span class="term"><i><tt>nbLocators</tt></i>:</span></td><td>the number of locators detected on the link</td></tr><tr><td><span class="term"><i><tt>hrefs</tt></i>:</span></td><td>pointer to the array of locator hrefs</td></tr><tr><td><span class="term"><i><tt>roles</tt></i>:</span></td><td>pointer to the array of locator roles</td></tr><tr><td><span class="term"><i><tt>nbTitles</tt></i>:</span></td><td>the number of titles detected on the link</td></tr><tr><td><span class="term"><i><tt>titles</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>langs</tt></i>:</span></td><td>array of xml:lang values for the titles</td></tr></tbody></table></div><br />
+<h3><a name="xlinkGetDefaultDetect" id="xlinkGetDefaultDetect"></a>Function: xlinkGetDefaultDetect</h3><pre class="programlisting"><a href="libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a> xlinkGetDefaultDetect (void)<br />
+</pre><p>Get the default xlink detection routine</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the current function or NULL;</td></tr></tbody></table></div><h3><a name="xlinkGetDefaultHandler" id="xlinkGetDefaultHandler"></a>Function: xlinkGetDefaultHandler</h3><pre class="programlisting"><a href="libxml-xlink.html#xlinkHandlerPtr">xlinkHandlerPtr</a> xlinkGetDefaultHandler (void)<br />
+</pre><p>Get the default xlink handler.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the current <a href="libxml-xlink.html#xlinkHandlerPtr">xlinkHandlerPtr</a> value.</td></tr></tbody></table></div><h3><a name="xlinkIsLink" id="xlinkIsLink"></a>Function: xlinkIsLink</h3><pre class="programlisting"><a href="libxml-xlink.html#xlinkType">xlinkType</a> xlinkIsLink (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Check whether the given node carries the attributes needed to be a link element (or is one of the linking elements issued from the (X)HTML DtDs). This routine don't try to do full checking of the link validity but tries to detect and return the appropriate link type.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the node</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node pointer itself</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xlink.html#xlinkType">xlinkType</a> of the node (XLINK_TYPE_NONE if there is no link detected.</td></tr></tbody></table></div><h3><a name="xlinkNodeDetectFunc" id="xlinkNodeDetectFunc"></a>Function type: xlinkNodeDetectFunc</h3><pre class="programlisting">Function type: xlinkNodeDetectFunc
+void xlinkNodeDetectFunc (void * ctx, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)
+</pre><p>This is the prototype for the link detection routine. It calls the default link detection callbacks upon link detection.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>user data pointer</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to check</td></tr></tbody></table></div><br />
+<h3><a name="xlinkSetDefaultDetect" id="xlinkSetDefaultDetect"></a>Function: xlinkSetDefaultDetect</h3><pre class="programlisting">void xlinkSetDefaultDetect (<a href="libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a> func)<br />
+</pre><p>Set the default xlink detection routine</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>func</tt></i>:</span></td><td>pointer to the new detection routine.</td></tr></tbody></table></div><h3><a name="xlinkSetDefaultHandler" id="xlinkSetDefaultHandler"></a>Function: xlinkSetDefaultHandler</h3><pre class="programlisting">void xlinkSetDefaultHandler (<a href="libxml-xlink.html#xlinkHandlerPtr">xlinkHandlerPtr</a> handler)<br />
+</pre><p>Set the default xlink handlers</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the new value for the xlink handler block</td></tr></tbody></table></div><h3><a name="xlinkSimpleLinkFunk" id="xlinkSimpleLinkFunk"></a>Function type: xlinkSimpleLinkFunk</h3><pre class="programlisting">Function type: xlinkSimpleLinkFunk
+void xlinkSimpleLinkFunk (void * ctx, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xlink.html#xlinkHRef">xlinkHRef</a> href, <br /> const <a href="libxml-xlink.html#xlinkRole">xlinkRole</a> role, <br /> const <a href="libxml-xlink.html#xlinkTitle">xlinkTitle</a> title)
+</pre><p>This is the prototype for a simple link detection callback.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>user data pointer</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node carrying the link</td></tr><tr><td><span class="term"><i><tt>href</tt></i>:</span></td><td>the target of the link</td></tr><tr><td><span class="term"><i><tt>role</tt></i>:</span></td><td>the role string</td></tr><tr><td><span class="term"><i><tt>title</tt></i>:</span></td><td>the link title</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-xmlIO.html b/doc/html/libxml-xmlIO.html
new file mode 100644
index 0000000..e9f84d9
--- /dev/null
+++ b/doc/html/libxml-xmlIO.html
@@ -0,0 +1,197 @@
+<?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 xmlIO from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlIO 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xlink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xlink.html">xlink</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-xmlautomata.html">xmlautomata</a></th><td><a accesskey="n" href="libxml-xmlautomata.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>interface for the I/O interfaces used by the parser </p><h2>Table of Contents</h2><pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlAllocOutputBuffer">xmlAllocOutputBuffer</a> (<a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a> (<a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting">int <a href="#xmlCheckFilename">xmlCheckFilename</a> (const char * path)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlCheckHTTPInput">xmlCheckHTTPInput</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> ret)</pre>
+<pre class="programlisting">void <a href="#xmlCleanupInputCallbacks">xmlCleanupInputCallbacks</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlFileClose">xmlFileClose</a> (void * context)</pre>
+<pre class="programlisting">int <a href="#xmlFileMatch">xmlFileMatch</a> (const char * filename)</pre>
+<pre class="programlisting">void * <a href="#xmlFileOpen">xmlFileOpen</a> (const char * filename)</pre>
+<pre class="programlisting">int <a href="#xmlFileRead">xmlFileRead</a> (void * context, <br /> char * buffer, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#xmlFreeParserInputBuffer">xmlFreeParserInputBuffer</a> (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in)</pre>
+<pre class="programlisting">int <a href="#xmlIOFTPClose">xmlIOFTPClose</a> (void * context)</pre>
+<pre class="programlisting">int <a href="#xmlIOFTPMatch">xmlIOFTPMatch</a> (const char * filename)</pre>
+<pre class="programlisting">void * <a href="#xmlIOFTPOpen">xmlIOFTPOpen</a> (const char * filename)</pre>
+<pre class="programlisting">int <a href="#xmlIOFTPRead">xmlIOFTPRead</a> (void * context, <br /> char * buffer, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlIOHTTPClose">xmlIOHTTPClose</a> (void * context)</pre>
+<pre class="programlisting">int <a href="#xmlIOHTTPMatch">xmlIOHTTPMatch</a> (const char * filename)</pre>
+<pre class="programlisting">void * <a href="#xmlIOHTTPOpen">xmlIOHTTPOpen</a> (const char * filename)</pre>
+<pre class="programlisting">void * <a href="#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a> (const char * post_uri, <br /> int compression)</pre>
+<pre class="programlisting">int <a href="#xmlIOHTTPRead">xmlIOHTTPRead</a> (void * context, <br /> char * buffer, <br /> int len)</pre>
+<pre class="programlisting">Function type: <a href="#xmlInputCloseCallback">xmlInputCloseCallback</a>
+int <a href="#xmlInputCloseCallback">xmlInputCloseCallback</a> (void * context)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlInputMatchCallback">xmlInputMatchCallback</a>
+int <a href="#xmlInputMatchCallback">xmlInputMatchCallback</a> (char const * filename)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlInputOpenCallback">xmlInputOpenCallback</a>
+void * <a href="#xmlInputOpenCallback">xmlInputOpenCallback</a> (char const * filename)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlInputReadCallback">xmlInputReadCallback</a>
+int <a href="#xmlInputReadCallback">xmlInputReadCallback</a> (void * context, <br /> char * buffer, <br /> int len)
+</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a> (const char * URL, <br /> const char * ID, <br /> <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * path)</pre>
+<pre class="programlisting">int <a href="#xmlOutputBufferClose">xmlOutputBufferClose</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a> (int fd, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a> (FILE * file, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a> (const char * URI, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder, <br /> int compression)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a> (<a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br /> <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)</pre>
+<pre class="programlisting">int <a href="#xmlOutputBufferFlush">xmlOutputBufferFlush</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)</pre>
+<pre class="programlisting">int <a href="#xmlOutputBufferWrite">xmlOutputBufferWrite</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br /> int len, <br /> const char * buf)</pre>
+<pre class="programlisting">int <a href="#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br /> const char * str)</pre>
+<pre class="programlisting">Function type: <a href="#xmlOutputCloseCallback">xmlOutputCloseCallback</a>
+int <a href="#xmlOutputCloseCallback">xmlOutputCloseCallback</a> (void * context)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlOutputMatchCallback">xmlOutputMatchCallback</a>
+int <a href="#xmlOutputMatchCallback">xmlOutputMatchCallback</a> (char const * filename)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlOutputOpenCallback">xmlOutputOpenCallback</a>
+void * <a href="#xmlOutputOpenCallback">xmlOutputOpenCallback</a> (char const * filename)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlOutputWriteCallback">xmlOutputWriteCallback</a>
+int <a href="#xmlOutputWriteCallback">xmlOutputWriteCallback</a> (void * context, <br /> const char * buffer, <br /> int len)
+</pre>
+<pre class="programlisting">char * <a href="#xmlParserGetDirectory">xmlParserGetDirectory</a> (const char * filename)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a> (int fd, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a> (FILE * file, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a> (const char * URI, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a> (<a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a> (const char * mem, <br /> int size, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a> (const char * mem, <br /> int size, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
+<pre class="programlisting">int <a href="#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a> (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlParserInputBufferPush">xmlParserInputBufferPush</a> (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in, <br /> int len, <br /> const char * buf)</pre>
+<pre class="programlisting">int <a href="#xmlParserInputBufferRead">xmlParserInputBufferRead</a> (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in, <br /> int len)</pre>
+<pre class="programlisting">void <a href="#xmlRegisterDefaultInputCallbacks">xmlRegisterDefaultInputCallbacks</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlRegisterDefaultOutputCallbacks">xmlRegisterDefaultOutputCallbacks</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a> (<a href="libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a> matchFunc, <br /> <a href="libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a> openFunc, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> readFunc, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> closeFunc)</pre>
+<pre class="programlisting">int <a href="#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a> (<a href="libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a> matchFunc, <br /> <a href="libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a> openFunc, <br /> <a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> writeFunc, <br /> <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> closeFunc)</pre>
+<h2>Description</h2>
+<h3><a name="xmlAllocOutputBuffer" id="xmlAllocOutputBuffer"></a>Function: xmlAllocOutputBuffer</h3><pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> xmlAllocOutputBuffer (<a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)<br />
+</pre><p>Create a buffered parser output</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>encoder</tt></i>:</span></td><td>the encoding converter or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser output or NULL</td></tr></tbody></table></div><h3><a name="xmlAllocParserInputBuffer" id="xmlAllocParserInputBuffer"></a>Function: xmlAllocParserInputBuffer</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlAllocParserInputBuffer (<a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a buffered parser input for progressive parsing</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><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 parser input or NULL</td></tr></tbody></table></div><h3><a name="xmlCheckFilename" id="xmlCheckFilename"></a>Function: xmlCheckFilename</h3><pre class="programlisting">int xmlCheckFilename (const char * path)<br />
+</pre><p>function checks to see if @path is a valid source (file, socket...) for XML. if stat is not available on the target machine,</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>path</tt></i>:</span></td><td>the path to check</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1. if stat fails, returns 0 (if calling stat on the filename fails, it can't be right). if stat succeeds and the file is a directory, returns 2. otherwise returns 1.</td></tr></tbody></table></div><h3><a name="xmlCheckHTTPInput" id="xmlCheckHTTPInput"></a>Function: xmlCheckHTTPInput</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlCheckHTTPInput (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> ret)<br />
+</pre><p>Check an input in case it was created from an HTTP stream, in that case it will handle encoding and update of the base URL in case of redirection. It also checks for HTTP errors in which case the input is cleanly freed up and an appropriate error is raised in 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 XML parser context</td></tr><tr><td><span class="term"><i><tt>ret</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the input or NULL in case of HTTP error.</td></tr></tbody></table></div><h3><a name="xmlCleanupInputCallbacks" id="xmlCleanupInputCallbacks"></a>Function: xmlCleanupInputCallbacks</h3><pre class="programlisting">void xmlCleanupInputCallbacks (void)<br />
+</pre><p>clears the entire input callback table. this includes the compiled-in I/O.</p>
+<h3><a name="xmlCleanupOutputCallbacks" id="xmlCleanupOutputCallbacks"></a>Function: xmlCleanupOutputCallbacks</h3><pre class="programlisting">void xmlCleanupOutputCallbacks (void)<br />
+</pre><p>clears the entire output callback table. this includes the compiled-in I/O callbacks.</p>
+<h3><a name="xmlFileClose" id="xmlFileClose"></a>Function: xmlFileClose</h3><pre class="programlisting">int xmlFileClose (void * context)<br />
+</pre><p>Close an I/O channel</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>the I/O context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlFileMatch" id="xmlFileMatch"></a>Function: xmlFileMatch</h3><pre class="programlisting">int xmlFileMatch (const char * filename)<br />
+</pre><p>input from FILE *</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the URI for matching</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if matches, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlFileOpen" id="xmlFileOpen"></a>Function: xmlFileOpen</h3><pre class="programlisting">void * xmlFileOpen (const char * filename)<br />
+</pre><p>Wrapper around xmlFileOpen_real that try it with an unescaped version of @filename, if this fails fallback to @filename</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the URI for matching</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a handler or NULL in case or failure</td></tr></tbody></table></div><h3><a name="xmlFileRead" id="xmlFileRead"></a>Function: xmlFileRead</h3><pre class="programlisting">int xmlFileRead (void * context, <br /> char * buffer, <br /> int len)<br />
+</pre><p>Read @len bytes to @buffer from the I/O channel.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>the I/O context</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>where to drop data</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>number of bytes to write</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written</td></tr></tbody></table></div><h3><a name="xmlFreeParserInputBuffer" id="xmlFreeParserInputBuffer"></a>Function: xmlFreeParserInputBuffer</h3><pre class="programlisting">void xmlFreeParserInputBuffer (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in)<br />
+</pre><p>Free up the memory used by a buffered parser input</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a buffered parser input</td></tr></tbody></table></div><h3><a name="xmlIOFTPClose" id="xmlIOFTPClose"></a>Function: xmlIOFTPClose</h3><pre class="programlisting">int xmlIOFTPClose (void * context)<br />
+</pre><p>Close an FTP I/O channel</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>the I/O context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0</td></tr></tbody></table></div><h3><a name="xmlIOFTPMatch" id="xmlIOFTPMatch"></a>Function: xmlIOFTPMatch</h3><pre class="programlisting">int xmlIOFTPMatch (const char * filename)<br />
+</pre><p>check if the URI matches an FTP one</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the URI for matching</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if matches, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlIOFTPOpen" id="xmlIOFTPOpen"></a>Function: xmlIOFTPOpen</h3><pre class="programlisting">void * xmlIOFTPOpen (const char * filename)<br />
+</pre><p>open an FTP I/O channel</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the URI for matching</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an I/O context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlIOFTPRead" id="xmlIOFTPRead"></a>Function: xmlIOFTPRead</h3><pre class="programlisting">int xmlIOFTPRead (void * context, <br /> char * buffer, <br /> int len)<br />
+</pre><p>Read @len bytes to @buffer from the I/O channel.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>the I/O context</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>where to drop data</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>number of bytes to write</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written</td></tr></tbody></table></div><h3><a name="xmlIOHTTPClose" id="xmlIOHTTPClose"></a>Function: xmlIOHTTPClose</h3><pre class="programlisting">int xmlIOHTTPClose (void * context)<br />
+</pre><p>Close an HTTP I/O channel</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>the I/O context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0</td></tr></tbody></table></div><h3><a name="xmlIOHTTPMatch" id="xmlIOHTTPMatch"></a>Function: xmlIOHTTPMatch</h3><pre class="programlisting">int xmlIOHTTPMatch (const char * filename)<br />
+</pre><p>check if the URI matches an HTTP one</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the URI for matching</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if matches, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlIOHTTPOpen" id="xmlIOHTTPOpen"></a>Function: xmlIOHTTPOpen</h3><pre class="programlisting">void * xmlIOHTTPOpen (const char * filename)<br />
+</pre><p>open an HTTP I/O channel</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the URI for matching</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an I/O context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlIOHTTPOpenW" id="xmlIOHTTPOpenW"></a>Function: xmlIOHTTPOpenW</h3><pre class="programlisting">void * xmlIOHTTPOpenW (const char * post_uri, <br /> int compression)<br />
+</pre><p>Open a temporary buffer to collect the document for a subsequent HTTP POST request. Non-static as is called from the output buffer creation routine.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>post_uri</tt></i>:</span></td><td>The destination URI for the document</td></tr><tr><td><span class="term"><i><tt>compression</tt></i>:</span></td><td>The compression desired for the document.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an I/O context or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlIOHTTPRead" id="xmlIOHTTPRead"></a>Function: xmlIOHTTPRead</h3><pre class="programlisting">int xmlIOHTTPRead (void * context, <br /> char * buffer, <br /> int len)<br />
+</pre><p>Read @len bytes to @buffer from the I/O channel.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>the I/O context</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>where to drop data</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>number of bytes to write</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written</td></tr></tbody></table></div><h3><a name="xmlInputCloseCallback" id="xmlInputCloseCallback"></a>Function type: xmlInputCloseCallback</h3><pre class="programlisting">Function type: xmlInputCloseCallback
+int xmlInputCloseCallback (void * context)
+</pre><p>Callback used in the I/O Input API to close the resource</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>an Input context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><br />
+<h3><a name="xmlInputMatchCallback" id="xmlInputMatchCallback"></a>Function type: xmlInputMatchCallback</h3><pre class="programlisting">Function type: xmlInputMatchCallback
+int xmlInputMatchCallback (char const * filename)
+</pre><p>Callback used in the I/O Input API to detect if the current handler can provide input fonctionnalities for this resource.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename or URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if yes and 0 if another Input module should be used</td></tr></tbody></table></div><br />
+<h3><a name="xmlInputOpenCallback" id="xmlInputOpenCallback"></a>Function type: xmlInputOpenCallback</h3><pre class="programlisting">Function type: xmlInputOpenCallback
+void * xmlInputOpenCallback (char const * filename)
+</pre><p>Callback used in the I/O Input API to open the resource</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename or URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an Input context or NULL in case or error</td></tr></tbody></table></div><br />
+<h3><a name="xmlInputReadCallback" id="xmlInputReadCallback"></a>Function type: xmlInputReadCallback</h3><pre class="programlisting">Function type: xmlInputReadCallback
+int xmlInputReadCallback (void * context, <br /> char * buffer, <br /> int len)
+</pre><p>Callback used in the I/O Input API to read the resource</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>an Input context</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>the buffer to store data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the buffer in bytes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes read or -1 in case of error</td></tr></tbody></table></div><br />
+<h3><a name="xmlNoNetExternalEntityLoader" id="xmlNoNetExternalEntityLoader"></a>Function: xmlNoNetExternalEntityLoader</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlNoNetExternalEntityLoader (const char * URL, <br /> const char * ID, <br /> <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
+</pre><p>A specific entity loader disabling network accesses, though still allowing local catalog accesses for resolution.</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 System 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>a new allocated xmlParserInputPtr, or NULL.</td></tr></tbody></table></div><h3><a name="xmlNormalizeWindowsPath" id="xmlNormalizeWindowsPath"></a>Function: xmlNormalizeWindowsPath</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNormalizeWindowsPath (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * path)<br />
+</pre><p>This function is obsolete. Please see xmlURIFromPath in uri.c for a better solution.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>path</tt></i>:</span></td><td>the input file path</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a canonicalized version of the path</td></tr></tbody></table></div><h3><a name="xmlOutputBufferClose" id="xmlOutputBufferClose"></a>Function: xmlOutputBufferClose</h3><pre class="programlisting">int xmlOutputBufferClose (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)<br />
+</pre><p>flushes and close the output I/O channel and free up all the associated resources</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a buffered output</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlOutputBufferCreateFd" id="xmlOutputBufferCreateFd"></a>Function: xmlOutputBufferCreateFd</h3><pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> xmlOutputBufferCreateFd (int fd, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)<br />
+</pre><p>Create a buffered output for the progressive saving to a file descriptor</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>fd</tt></i>:</span></td><td>a file descriptor number</td></tr><tr><td><span class="term"><i><tt>encoder</tt></i>:</span></td><td>the encoding converter or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser output or NULL</td></tr></tbody></table></div><h3><a name="xmlOutputBufferCreateFile" id="xmlOutputBufferCreateFile"></a>Function: xmlOutputBufferCreateFile</h3><pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> xmlOutputBufferCreateFile (FILE * file, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)<br />
+</pre><p>Create a buffered output for the progressive saving to a FILE * buffered C I/O</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>a FILE*</td></tr><tr><td><span class="term"><i><tt>encoder</tt></i>:</span></td><td>the encoding converter or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser output or NULL</td></tr></tbody></table></div><h3><a name="xmlOutputBufferCreateFilename" id="xmlOutputBufferCreateFilename"></a>Function: xmlOutputBufferCreateFilename</h3><pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> xmlOutputBufferCreateFilename (const char * URI, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder, <br /> int compression)<br />
+</pre><p>Create a buffered output for the progressive saving of a file If filename is "-' then we use stdout as the output. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. TODO: currently if compression is set, the library only support writing to a local file.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>a C string containing the URI or filename</td></tr><tr><td><span class="term"><i><tt>encoder</tt></i>:</span></td><td>the encoding converter or NULL</td></tr><tr><td><span class="term"><i><tt>compression</tt></i>:</span></td><td>the compression ration (0 none, 9 max).</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new output or NULL</td></tr></tbody></table></div><h3><a name="xmlOutputBufferCreateIO" id="xmlOutputBufferCreateIO"></a>Function: xmlOutputBufferCreateIO</h3><pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> xmlOutputBufferCreateIO (<a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br /> <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)<br />
+</pre><p>Create a buffered output for the progressive saving to an I/O handler</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iowrite</tt></i>:</span></td><td>an I/O write function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>encoder</tt></i>:</span></td><td>the charset encoding if known</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser output or NULL</td></tr></tbody></table></div><h3><a name="xmlOutputBufferFlush" id="xmlOutputBufferFlush"></a>Function: xmlOutputBufferFlush</h3><pre class="programlisting">int xmlOutputBufferFlush (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)<br />
+</pre><p>flushes the output I/O channel</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a buffered output</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlOutputBufferWrite" id="xmlOutputBufferWrite"></a>Function: xmlOutputBufferWrite</h3><pre class="programlisting">int xmlOutputBufferWrite (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br /> int len, <br /> const char * buf)<br />
+</pre><p>Write the content of the array in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a buffered parser output</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the size in bytes of the array.</td></tr><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>an char array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of chars immediately written, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlOutputBufferWriteString" id="xmlOutputBufferWriteString"></a>Function: xmlOutputBufferWriteString</h3><pre class="programlisting">int xmlOutputBufferWriteString (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br /> const char * str)<br />
+</pre><p>Write the content of the string in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a buffered parser output</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>a zero terminated C string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of chars immediately written, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlOutputCloseCallback" id="xmlOutputCloseCallback"></a>Function type: xmlOutputCloseCallback</h3><pre class="programlisting">Function type: xmlOutputCloseCallback
+int xmlOutputCloseCallback (void * context)
+</pre><p>Callback used in the I/O Output API to close the resource</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>an Output context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><br />
+<h3><a name="xmlOutputMatchCallback" id="xmlOutputMatchCallback"></a>Function type: xmlOutputMatchCallback</h3><pre class="programlisting">Function type: xmlOutputMatchCallback
+int xmlOutputMatchCallback (char const * filename)
+</pre><p>Callback used in the I/O Output API to detect if the current handler can provide output fonctionnalities for this resource.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename or URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if yes and 0 if another Output module should be used</td></tr></tbody></table></div><br />
+<h3><a name="xmlOutputOpenCallback" id="xmlOutputOpenCallback"></a>Function type: xmlOutputOpenCallback</h3><pre class="programlisting">Function type: xmlOutputOpenCallback
+void * xmlOutputOpenCallback (char const * filename)
+</pre><p>Callback used in the I/O Output API to open the resource</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename or URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an Output context or NULL in case or error</td></tr></tbody></table></div><br />
+<h3><a name="xmlOutputWriteCallback" id="xmlOutputWriteCallback"></a>Function type: xmlOutputWriteCallback</h3><pre class="programlisting">Function type: xmlOutputWriteCallback
+int xmlOutputWriteCallback (void * context, <br /> const char * buffer, <br /> int len)
+</pre><p>Callback used in the I/O Output API to write to the resource</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>context</tt></i>:</span></td><td>an Output context</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>the buffer of data to write</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the buffer in bytes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of error</td></tr></tbody></table></div><br />
+<h3><a name="xmlParserGetDirectory" id="xmlParserGetDirectory"></a>Function: xmlParserGetDirectory</h3><pre class="programlisting">char * xmlParserGetDirectory (const char * filename)<br />
+</pre><p>lookup the directory for that file</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the path to a file</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new allocated string containing the directory, or NULL.</td></tr></tbody></table></div><h3><a name="xmlParserInputBufferCreateFd" id="xmlParserInputBufferCreateFd"></a>Function: xmlParserInputBufferCreateFd</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlParserInputBufferCreateFd (int fd, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a buffered parser input for the progressive parsing for the input from a file descriptor</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>fd</tt></i>:</span></td><td>a file descriptor number</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 parser input or NULL</td></tr></tbody></table></div><h3><a name="xmlParserInputBufferCreateFile" id="xmlParserInputBufferCreateFile"></a>Function: xmlParserInputBufferCreateFile</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlParserInputBufferCreateFile (FILE * file, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a buffered parser input for the progressive parsing of a FILE * buffered C I/O</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>a FILE*</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 parser input or NULL</td></tr></tbody></table></div><h3><a name="xmlParserInputBufferCreateFilename" id="xmlParserInputBufferCreateFilename"></a>Function: xmlParserInputBufferCreateFilename</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlParserInputBufferCreateFilename (const char * URI, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a buffered parser input for the progressive parsing of a file If filename is "-' then we use stdin as the input. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. Do an encoding check if enc == <a href="libxml-encoding.html#XML_CHAR_ENCODING_NONE">XML_CHAR_ENCODING_NONE</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>a C string containing the URI or filename</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 parser input or NULL</td></tr></tbody></table></div><h3><a name="xmlParserInputBufferCreateIO" id="xmlParserInputBufferCreateIO"></a>Function: xmlParserInputBufferCreateIO</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlParserInputBufferCreateIO (<a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a buffered parser input for the progressive parsing for the input from an I/O handler</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ioread</tt></i>:</span></td><td>an I/O read function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>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 parser input or NULL</td></tr></tbody></table></div><h3><a name="xmlParserInputBufferCreateMem" id="xmlParserInputBufferCreateMem"></a>Function: xmlParserInputBufferCreateMem</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlParserInputBufferCreateMem (const char * mem, <br /> int size, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a buffered parser input for the progressive parsing for the input from a memory area.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>mem</tt></i>:</span></td><td>the memory input</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the length of the memory block</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 parser input or NULL</td></tr></tbody></table></div><h3><a name="xmlParserInputBufferCreateStatic" id="xmlParserInputBufferCreateStatic"></a>Function: xmlParserInputBufferCreateStatic</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlParserInputBufferCreateStatic (const char * mem, <br /> int size, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+</pre><p>Create a buffered parser input for the progressive parsing for the input from an immutable memory area. This will not copy the memory area to the buffer, but the memory is expected to be available until the end of the parsing, this is useful for example when using mmap'ed file.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>mem</tt></i>:</span></td><td>the memory input</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the length of the memory block</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 parser input or NULL</td></tr></tbody></table></div><h3><a name="xmlParserInputBufferGrow" id="xmlParserInputBufferGrow"></a>Function: xmlParserInputBufferGrow</h3><pre class="programlisting">int xmlParserInputBufferGrow (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in, <br /> int len)<br />
+</pre><p>Grow up the content of the input buffer, the old data are preserved This routine handle the I18N transcoding to internal UTF-8 This routine is used when operating the parser in normal (pull) mode TODO: one should be able to remove one extra copy by copying directly onto in-&gt;buffer or in-&gt;raw</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a buffered parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>indicative value of the amount of chars to read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of chars read and stored in the buffer, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlParserInputBufferPush" id="xmlParserInputBufferPush"></a>Function: xmlParserInputBufferPush</h3><pre class="programlisting">int xmlParserInputBufferPush (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in, <br /> int len, <br /> const char * buf)<br />
+</pre><p>Push the content of the arry in the input buffer This routine handle the I18N transcoding to internal UTF-8 This is used when operating the parser in progressive (push) mode.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a buffered parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the size in bytes of the array.</td></tr><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>an char array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of chars read and stored in the buffer, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlParserInputBufferRead" id="xmlParserInputBufferRead"></a>Function: xmlParserInputBufferRead</h3><pre class="programlisting">int xmlParserInputBufferRead (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in, <br /> int len)<br />
+</pre><p>Refresh the content of the input buffer, the old data are considered consumed This routine handle the I18N transcoding to internal UTF-8</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>a buffered parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>indicative value of the amount of chars to read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of chars read and stored in the buffer, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlRegisterDefaultInputCallbacks" id="xmlRegisterDefaultInputCallbacks"></a>Function: xmlRegisterDefaultInputCallbacks</h3><pre class="programlisting">void xmlRegisterDefaultInputCallbacks (void)<br />
+</pre><p>Registers the default compiled-in I/O handlers.</p>
+<h3><a name="xmlRegisterDefaultOutputCallbacks" id="xmlRegisterDefaultOutputCallbacks"></a>Function: xmlRegisterDefaultOutputCallbacks</h3><pre class="programlisting">void xmlRegisterDefaultOutputCallbacks (void)<br />
+</pre><p>Registers the default compiled-in I/O handlers.</p>
+<h3><a name="xmlRegisterHTTPPostCallbacks" id="xmlRegisterHTTPPostCallbacks"></a>Function: xmlRegisterHTTPPostCallbacks</h3><pre class="programlisting">void xmlRegisterHTTPPostCallbacks (void)<br />
+</pre><p>By default, libxml submits HTTP output requests using the "PUT" method. Calling this method changes the HTTP output method to use the "POST" method instead.</p>
+<h3><a name="xmlRegisterInputCallbacks" id="xmlRegisterInputCallbacks"></a>Function: xmlRegisterInputCallbacks</h3><pre class="programlisting">int xmlRegisterInputCallbacks (<a href="libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a> matchFunc, <br /> <a href="libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a> openFunc, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> readFunc, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> closeFunc)<br />
+</pre><p>Register a new set of I/O callback for handling parser input.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>matchFunc</tt></i>:</span></td><td>the <a href="libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a></td></tr><tr><td><span class="term"><i><tt>openFunc</tt></i>:</span></td><td>the <a href="libxml-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a></td></tr><tr><td><span class="term"><i><tt>readFunc</tt></i>:</span></td><td>the <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a></td></tr><tr><td><span class="term"><i><tt>closeFunc</tt></i>:</span></td><td>the <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the registered handler number or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlRegisterOutputCallbacks" id="xmlRegisterOutputCallbacks"></a>Function: xmlRegisterOutputCallbacks</h3><pre class="programlisting">int xmlRegisterOutputCallbacks (<a href="libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a> matchFunc, <br /> <a href="libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a> openFunc, <br /> <a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> writeFunc, <br /> <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> closeFunc)<br />
+</pre><p>Register a new set of I/O callback for handling output.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>matchFunc</tt></i>:</span></td><td>the <a href="libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a></td></tr><tr><td><span class="term"><i><tt>openFunc</tt></i>:</span></td><td>the <a href="libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a></td></tr><tr><td><span class="term"><i><tt>writeFunc</tt></i>:</span></td><td>the <a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a></td></tr><tr><td><span class="term"><i><tt>closeFunc</tt></i>:</span></td><td>the <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the registered handler number or -1 in case of error</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xmlautomata.html b/doc/html/libxml-xmlautomata.html
new file mode 100644
index 0000000..0521376
--- /dev/null
+++ b/doc/html/libxml-xmlautomata.html
@@ -0,0 +1,72 @@
+<?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 xmlautomata from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlautomata 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlIO.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlIO.html">xmlIO</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-xmlerror.html">xmlerror</a></th><td><a accesskey="n" href="libxml-xmlerror.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>the API to build regexp automata </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlAutomata">xmlAutomata</a><br />struct _xmlAutomata
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlautomata.html#xmlAutomata">xmlAutomata</a> * <a name="xmlAutomataPtr" id="xmlAutomataPtr">xmlAutomataPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlAutomataState">xmlAutomataState</a><br />struct _xmlAutomataState
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlautomata.html#xmlAutomataState">xmlAutomataState</a> * <a name="xmlAutomataStatePtr" id="xmlAutomataStatePtr">xmlAutomataStatePtr</a>
+</pre><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> <a href="#xmlAutomataCompile">xmlAutomataCompile</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)</pre>
+<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataGetInitState">xmlAutomataGetInitState</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)</pre>
+<pre class="programlisting">int <a href="#xmlAutomataIsDeterminist">xmlAutomataIsDeterminist</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)</pre>
+<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</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 lax)</pre>
+<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</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="#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</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">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="#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="#xmlAutomataNewState">xmlAutomataNewState</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)</pre>
+<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewTransition">xmlAutomataNewTransition</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 /> void * data)</pre>
+<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewTransition2">xmlAutomataNewTransition2</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">int <a href="#xmlAutomataSetFinalState">xmlAutomataSetFinalState</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> state)</pre>
+<pre class="programlisting">void <a href="#xmlFreeAutomata">xmlFreeAutomata</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)</pre>
+<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> <a href="#xmlNewAutomata">xmlNewAutomata</a> (void)</pre>
+<h2>Description</h2>
+<h3><a name="xmlAutomata" id="xmlAutomata">Structure xmlAutomata</a></h3><pre class="programlisting">Structure xmlAutomata<br />struct _xmlAutomata {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlAutomataState" id="xmlAutomataState">Structure xmlAutomataState</a></h3><pre class="programlisting">Structure xmlAutomataState<br />struct _xmlAutomataState {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlAutomataCompile" id="xmlAutomataCompile"></a>Function: xmlAutomataCompile</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> xmlAutomataCompile (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)<br />
+</pre><p>Compile the automata into a Reg Exp ready for being executed. The automata should be free after this point.</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>Returns</tt></i>:</span></td><td>the compiled regexp or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlAutomataGetInitState" id="xmlAutomataGetInitState"></a>Function: xmlAutomataGetInitState</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataGetInitState (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)<br />
+</pre><p>Initial state lookup</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>Returns</tt></i>:</span></td><td>the initial state of the automata</td></tr></tbody></table></div><h3><a name="xmlAutomataIsDeterminist" id="xmlAutomataIsDeterminist"></a>Function: xmlAutomataIsDeterminist</h3><pre class="programlisting">int xmlAutomataIsDeterminist (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)<br />
+</pre><p>Checks if an automata is determinist.</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>Returns</tt></i>:</span></td><td>1 if true, 0 if not, and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlAutomataNewAllTrans" id="xmlAutomataNewAllTrans"></a>Function: xmlAutomataNewAllTrans</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewAllTrans (<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 lax)<br />
+</pre><p>If @to is NULL, this create first a new target state in the automata and then adds a an ALL transition from the @from state to the target state. That transition is an epsilon transition allowed only when all transitions from the @from node have been activated.</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>lax</tt></i>:</span></td><td>allow to transition if not all all transitions have been 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="xmlAutomataNewCountTrans" id="xmlAutomataNewCountTrans"></a>Function: xmlAutomataNewCountTrans</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewCountTrans (<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 create 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</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="xmlAutomataNewCountedTrans" id="xmlAutomataNewCountedTrans"></a>Function: xmlAutomataNewCountedTrans</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewCountedTrans (<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)<br />
+</pre><p>If @to is NULL, this create first a new target state in the automata and then adds an epsilon transition from the @from state to the target state which will increment the counter provided</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="xmlAutomataNewCounter" id="xmlAutomataNewCounter"></a>Function: xmlAutomataNewCounter</h3><pre class="programlisting">int xmlAutomataNewCounter (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> int min, <br /> int max)<br />
+</pre><p>Create a new counter</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>min</tt></i>:</span></td><td>the minimal value on the counter</td></tr><tr><td><span class="term"><i><tt>max</tt></i>:</span></td><td>the maximal value on the counter</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the counter number or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlAutomataNewCounterTrans" id="xmlAutomataNewCounterTrans"></a>Function: xmlAutomataNewCounterTrans</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewCounterTrans (<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)<br />
+</pre><p>If @to is NULL, this create 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 create first a new target state in the automata and then adds a 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 />
+</pre><p>If @to is NULL, this create 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 transistion 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="xmlAutomataNewState" id="xmlAutomataNewState"></a>Function: xmlAutomataNewState</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewState (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)<br />
+</pre><p>Create a new disconnected state in the automata</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>Returns</tt></i>:</span></td><td>the new state or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlAutomataNewTransition" id="xmlAutomataNewTransition"></a>Function: xmlAutomataNewTransition</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewTransition (<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 /> void * data)<br />
+</pre><p>If @to is NULL, this create first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token</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>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="xmlAutomataNewTransition2" id="xmlAutomataNewTransition2"></a>Function: xmlAutomataNewTransition2</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewTransition2 (<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 create first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token</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="xmlAutomataSetFinalState" id="xmlAutomataSetFinalState"></a>Function: xmlAutomataSetFinalState</h3><pre class="programlisting">int xmlAutomataSetFinalState (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> state)<br />
+</pre><p>Makes that state a final 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>state</tt></i>:</span></td><td>a state in this automata</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlFreeAutomata" id="xmlFreeAutomata"></a>Function: xmlFreeAutomata</h3><pre class="programlisting">void xmlFreeAutomata (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)<br />
+</pre><p>Free an automata</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></tbody></table></div><h3><a name="xmlNewAutomata" id="xmlNewAutomata"></a>Function: xmlNewAutomata</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> xmlNewAutomata (void)<br />
+</pre><p>Create a new automata</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new object or NULL in case of failure</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xmlerror.html b/doc/html/libxml-xmlerror.html
new file mode 100644
index 0000000..f054620
--- /dev/null
+++ b/doc/html/libxml-xmlerror.html
@@ -0,0 +1,615 @@
+<?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 xmlerror from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlerror 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlautomata.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlautomata.html">xmlautomata</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-xmlexports.html">xmlexports</a></th><td><a accesskey="n" href="libxml-xmlexports.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>the API used to report errors </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlError">xmlError</a><br />struct _xmlError
+</pre><pre class="programlisting">Enum <a href="#xmlErrorDomain">xmlErrorDomain</a>
+</pre><pre class="programlisting">Enum <a href="#xmlErrorLevel">xmlErrorLevel</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlerror.html#xmlError">xmlError</a> * <a name="xmlErrorPtr" id="xmlErrorPtr">xmlErrorPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlParserErrors">xmlParserErrors</a>
+</pre><pre class="programlisting">void <a href="#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a> (<a href="libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> * handler)</pre>
+<pre class="programlisting">int <a href="#xmlCopyError">xmlCopyError</a> (<a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> from, <br /> <a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> to)</pre>
+<pre class="programlisting"><a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> <a href="#xmlCtxtGetLastError">xmlCtxtGetLastError</a> (void * ctx)</pre>
+<pre class="programlisting">void <a href="#xmlCtxtResetLastError">xmlCtxtResetLastError</a> (void * ctx)</pre>
+<pre class="programlisting">Function type: <a href="#xmlGenericErrorFunc">xmlGenericErrorFunc</a>
+void <a href="#xmlGenericErrorFunc">xmlGenericErrorFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<pre class="programlisting"><a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> <a href="#xmlGetLastError">xmlGetLastError</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlParserError">xmlParserError</a> (void * ctx, <br /> const char * msg, <br /> ... ...)</pre>
+<pre class="programlisting">void <a href="#xmlParserPrintFileContext">xmlParserPrintFileContext</a> (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input)</pre>
+<pre class="programlisting">void <a href="#xmlParserPrintFileInfo">xmlParserPrintFileInfo</a> (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input)</pre>
+<pre class="programlisting">void <a href="#xmlParserValidityError">xmlParserValidityError</a> (void * ctx, <br /> const char * msg, <br /> ... ...)</pre>
+<pre class="programlisting">void <a href="#xmlParserValidityWarning">xmlParserValidityWarning</a> (void * ctx, <br /> const char * msg, <br /> ... ...)</pre>
+<pre class="programlisting">void <a href="#xmlParserWarning">xmlParserWarning</a> (void * ctx, <br /> const char * msg, <br /> ... ...)</pre>
+<pre class="programlisting">void <a href="#xmlResetError">xmlResetError</a> (<a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> err)</pre>
+<pre class="programlisting">void <a href="#xmlResetLastError">xmlResetLastError</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a> (void * ctx, <br /> <a href="libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> handler)</pre>
+<pre class="programlisting">void <a href="#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a> (void * ctx, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> handler)</pre>
+<pre class="programlisting">Function type: <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a>
+void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void * userData, <br /> <a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> error)
+</pre>
+<h2>Description</h2>
+<h3><a name="xmlError" id="xmlError">Structure xmlError</a></h3><pre class="programlisting">Structure xmlError<br />struct _xmlError {
+ int domain : What part of the library raised this er
+ int code : The error code, e.g. an <a href="libxml-xmlerror.html#xmlParserError">xmlParserError</a>
+ char * message : human-readable informative error messag
+ <a href="libxml-xmlerror.html#xmlErrorLevel">xmlErrorLevel</a> level : how consequent is the error
+ char * file : the filename
+ int line : the line number if available
+ char * str1 : extra string information
+ char * str2 : extra string information
+ char * str3 : extra string information
+ int int1 : extra number information
+ int int2 : extra number information
+ void * ctxt : the parser context if available
+ void * node : the node in the tree
+}</pre><h3>Enum <a name="xmlErrorDomain" id="xmlErrorDomain">xmlErrorDomain</a></h3><pre class="programlisting">Enum xmlErrorDomain {
+ <a name="XML_FROM_NONE" id="XML_FROM_NONE">XML_FROM_NONE</a> = 0
+ <a name="XML_FROM_PARSER" id="XML_FROM_PARSER">XML_FROM_PARSER</a> = 1 : The XML parser
+ <a name="XML_FROM_TREE" id="XML_FROM_TREE">XML_FROM_TREE</a> = 2 : The tree module
+ <a name="XML_FROM_NAMESPACE" id="XML_FROM_NAMESPACE">XML_FROM_NAMESPACE</a> = 3 : The XML Namespace module
+ <a name="XML_FROM_DTD" id="XML_FROM_DTD">XML_FROM_DTD</a> = 4 : The XML DTD validation with parser contex
+ <a name="XML_FROM_HTML" id="XML_FROM_HTML">XML_FROM_HTML</a> = 5 : The HTML parser
+ <a name="XML_FROM_MEMORY" id="XML_FROM_MEMORY">XML_FROM_MEMORY</a> = 6 : The memory allocator
+ <a name="XML_FROM_OUTPUT" id="XML_FROM_OUTPUT">XML_FROM_OUTPUT</a> = 7 : The serialization code
+ <a name="XML_FROM_IO" id="XML_FROM_IO">XML_FROM_IO</a> = 8 : The Input/Output stack
+ <a name="XML_FROM_FTP" id="XML_FROM_FTP">XML_FROM_FTP</a> = 9 : The FTP module
+ <a name="XML_FROM_HTTP" id="XML_FROM_HTTP">XML_FROM_HTTP</a> = 10 : The FTP module
+ <a name="XML_FROM_XINCLUDE" id="XML_FROM_XINCLUDE">XML_FROM_XINCLUDE</a> = 11 : The XInclude processing
+ <a name="XML_FROM_XPATH" id="XML_FROM_XPATH">XML_FROM_XPATH</a> = 12 : The XPath module
+ <a name="XML_FROM_XPOINTER" id="XML_FROM_XPOINTER">XML_FROM_XPOINTER</a> = 13 : The XPointer module
+ <a name="XML_FROM_REGEXP" id="XML_FROM_REGEXP">XML_FROM_REGEXP</a> = 14 : The regular expressions module
+ <a name="XML_FROM_DATATYPE" id="XML_FROM_DATATYPE">XML_FROM_DATATYPE</a> = 15 : The W3C XML Schemas Datatype module
+ <a name="XML_FROM_SCHEMASP" id="XML_FROM_SCHEMASP">XML_FROM_SCHEMASP</a> = 16 : The W3C XML Schemas parser module
+ <a name="XML_FROM_SCHEMASV" id="XML_FROM_SCHEMASV">XML_FROM_SCHEMASV</a> = 17 : The W3C XML Schemas validation module
+ <a name="XML_FROM_RELAXNGP" id="XML_FROM_RELAXNGP">XML_FROM_RELAXNGP</a> = 18 : The Relax-NG parser module
+ <a name="XML_FROM_RELAXNGV" id="XML_FROM_RELAXNGV">XML_FROM_RELAXNGV</a> = 19 : The Relax-NG validator module
+ <a name="XML_FROM_CATALOG" id="XML_FROM_CATALOG">XML_FROM_CATALOG</a> = 20 : The Catalog module
+ <a name="XML_FROM_C14N" id="XML_FROM_C14N">XML_FROM_C14N</a> = 21 : The Canonicalization module
+ <a name="XML_FROM_XSLT" id="XML_FROM_XSLT">XML_FROM_XSLT</a> = 22 : The XSLT engine from libxslt
+ <a name="XML_FROM_VALID" id="XML_FROM_VALID">XML_FROM_VALID</a> = 23 : The XML DTD validation with valid context
+}
+</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
+ <a name="XML_ERR_WARNING" id="XML_ERR_WARNING">XML_ERR_WARNING</a> = 1 : A simple warning
+ <a name="XML_ERR_ERROR" id="XML_ERR_ERROR">XML_ERR_ERROR</a> = 2 : A recoverable error
+ <a name="XML_ERR_FATAL" id="XML_ERR_FATAL">XML_ERR_FATAL</a> = 3 : A fatal error
+}
+</pre><h3>Enum <a name="xmlParserErrors" id="xmlParserErrors">xmlParserErrors</a></h3><pre class="programlisting">Enum xmlParserErrors {
+ <a name="XML_ERR_OK" id="XML_ERR_OK">XML_ERR_OK</a> = 0
+ <a name="XML_ERR_INTERNAL_ERROR" id="XML_ERR_INTERNAL_ERROR">XML_ERR_INTERNAL_ERROR</a> = 1 : 1
+ <a name="XML_ERR_NO_MEMORY" id="XML_ERR_NO_MEMORY">XML_ERR_NO_MEMORY</a> = 2 : 2
+ <a name="XML_ERR_DOCUMENT_START" id="XML_ERR_DOCUMENT_START">XML_ERR_DOCUMENT_START</a> = 3 : 3
+ <a name="XML_ERR_DOCUMENT_EMPTY" id="XML_ERR_DOCUMENT_EMPTY">XML_ERR_DOCUMENT_EMPTY</a> = 4 : 4
+ <a name="XML_ERR_DOCUMENT_END" id="XML_ERR_DOCUMENT_END">XML_ERR_DOCUMENT_END</a> = 5 : 5
+ <a name="XML_ERR_INVALID_HEX_CHARREF" id="XML_ERR_INVALID_HEX_CHARREF">XML_ERR_INVALID_HEX_CHARREF</a> = 6 : 6
+ <a name="XML_ERR_INVALID_DEC_CHARREF" id="XML_ERR_INVALID_DEC_CHARREF">XML_ERR_INVALID_DEC_CHARREF</a> = 7 : 7
+ <a name="XML_ERR_INVALID_CHARREF" id="XML_ERR_INVALID_CHARREF">XML_ERR_INVALID_CHARREF</a> = 8 : 8
+ <a name="XML_ERR_INVALID_CHAR" id="XML_ERR_INVALID_CHAR">XML_ERR_INVALID_CHAR</a> = 9 : 9
+ <a name="XML_ERR_CHARREF_AT_EOF" id="XML_ERR_CHARREF_AT_EOF">XML_ERR_CHARREF_AT_EOF</a> = 10 : 10
+ <a name="XML_ERR_CHARREF_IN_PROLOG" id="XML_ERR_CHARREF_IN_PROLOG">XML_ERR_CHARREF_IN_PROLOG</a> = 11 : 11
+ <a name="XML_ERR_CHARREF_IN_EPILOG" id="XML_ERR_CHARREF_IN_EPILOG">XML_ERR_CHARREF_IN_EPILOG</a> = 12 : 12
+ <a name="XML_ERR_CHARREF_IN_DTD" id="XML_ERR_CHARREF_IN_DTD">XML_ERR_CHARREF_IN_DTD</a> = 13 : 13
+ <a name="XML_ERR_ENTITYREF_AT_EOF" id="XML_ERR_ENTITYREF_AT_EOF">XML_ERR_ENTITYREF_AT_EOF</a> = 14 : 14
+ <a name="XML_ERR_ENTITYREF_IN_PROLOG" id="XML_ERR_ENTITYREF_IN_PROLOG">XML_ERR_ENTITYREF_IN_PROLOG</a> = 15 : 15
+ <a name="XML_ERR_ENTITYREF_IN_EPILOG" id="XML_ERR_ENTITYREF_IN_EPILOG">XML_ERR_ENTITYREF_IN_EPILOG</a> = 16 : 16
+ <a name="XML_ERR_ENTITYREF_IN_DTD" id="XML_ERR_ENTITYREF_IN_DTD">XML_ERR_ENTITYREF_IN_DTD</a> = 17 : 17
+ <a name="XML_ERR_PEREF_AT_EOF" id="XML_ERR_PEREF_AT_EOF">XML_ERR_PEREF_AT_EOF</a> = 18 : 18
+ <a name="XML_ERR_PEREF_IN_PROLOG" id="XML_ERR_PEREF_IN_PROLOG">XML_ERR_PEREF_IN_PROLOG</a> = 19 : 19
+ <a name="XML_ERR_PEREF_IN_EPILOG" id="XML_ERR_PEREF_IN_EPILOG">XML_ERR_PEREF_IN_EPILOG</a> = 20 : 20
+ <a name="XML_ERR_PEREF_IN_INT_SUBSET" id="XML_ERR_PEREF_IN_INT_SUBSET">XML_ERR_PEREF_IN_INT_SUBSET</a> = 21 : 21
+ <a name="XML_ERR_ENTITYREF_NO_NAME" id="XML_ERR_ENTITYREF_NO_NAME">XML_ERR_ENTITYREF_NO_NAME</a> = 22 : 22
+ <a name="XML_ERR_ENTITYREF_SEMICOL_MISSING" id="XML_ERR_ENTITYREF_SEMICOL_MISSING">XML_ERR_ENTITYREF_SEMICOL_MISSING</a> = 23 : 23
+ <a name="XML_ERR_PEREF_NO_NAME" id="XML_ERR_PEREF_NO_NAME">XML_ERR_PEREF_NO_NAME</a> = 24 : 24
+ <a name="XML_ERR_PEREF_SEMICOL_MISSING" id="XML_ERR_PEREF_SEMICOL_MISSING">XML_ERR_PEREF_SEMICOL_MISSING</a> = 25 : 25
+ <a name="XML_ERR_UNDECLARED_ENTITY" id="XML_ERR_UNDECLARED_ENTITY">XML_ERR_UNDECLARED_ENTITY</a> = 26 : 26
+ <a name="XML_WAR_UNDECLARED_ENTITY" id="XML_WAR_UNDECLARED_ENTITY">XML_WAR_UNDECLARED_ENTITY</a> = 27 : 27
+ <a name="XML_ERR_UNPARSED_ENTITY" id="XML_ERR_UNPARSED_ENTITY">XML_ERR_UNPARSED_ENTITY</a> = 28 : 28
+ <a name="XML_ERR_ENTITY_IS_EXTERNAL" id="XML_ERR_ENTITY_IS_EXTERNAL">XML_ERR_ENTITY_IS_EXTERNAL</a> = 29 : 29
+ <a name="XML_ERR_ENTITY_IS_PARAMETER" id="XML_ERR_ENTITY_IS_PARAMETER">XML_ERR_ENTITY_IS_PARAMETER</a> = 30 : 30
+ <a name="XML_ERR_UNKNOWN_ENCODING" id="XML_ERR_UNKNOWN_ENCODING">XML_ERR_UNKNOWN_ENCODING</a> = 31 : 31
+ <a name="XML_ERR_UNSUPPORTED_ENCODING" id="XML_ERR_UNSUPPORTED_ENCODING">XML_ERR_UNSUPPORTED_ENCODING</a> = 32 : 32
+ <a name="XML_ERR_STRING_NOT_STARTED" id="XML_ERR_STRING_NOT_STARTED">XML_ERR_STRING_NOT_STARTED</a> = 33 : 33
+ <a name="XML_ERR_STRING_NOT_CLOSED" id="XML_ERR_STRING_NOT_CLOSED">XML_ERR_STRING_NOT_CLOSED</a> = 34 : 34
+ <a name="XML_ERR_NS_DECL_ERROR" id="XML_ERR_NS_DECL_ERROR">XML_ERR_NS_DECL_ERROR</a> = 35 : 35
+ <a name="XML_ERR_ENTITY_NOT_STARTED" id="XML_ERR_ENTITY_NOT_STARTED">XML_ERR_ENTITY_NOT_STARTED</a> = 36 : 36
+ <a name="XML_ERR_ENTITY_NOT_FINISHED" id="XML_ERR_ENTITY_NOT_FINISHED">XML_ERR_ENTITY_NOT_FINISHED</a> = 37 : 37
+ <a name="XML_ERR_LT_IN_ATTRIBUTE" id="XML_ERR_LT_IN_ATTRIBUTE">XML_ERR_LT_IN_ATTRIBUTE</a> = 38 : 38
+ <a name="XML_ERR_ATTRIBUTE_NOT_STARTED" id="XML_ERR_ATTRIBUTE_NOT_STARTED">XML_ERR_ATTRIBUTE_NOT_STARTED</a> = 39 : 39
+ <a name="XML_ERR_ATTRIBUTE_NOT_FINISHED" id="XML_ERR_ATTRIBUTE_NOT_FINISHED">XML_ERR_ATTRIBUTE_NOT_FINISHED</a> = 40 : 40
+ <a name="XML_ERR_ATTRIBUTE_WITHOUT_VALUE" id="XML_ERR_ATTRIBUTE_WITHOUT_VALUE">XML_ERR_ATTRIBUTE_WITHOUT_VALUE</a> = 41 : 41
+ <a name="XML_ERR_ATTRIBUTE_REDEFINED" id="XML_ERR_ATTRIBUTE_REDEFINED">XML_ERR_ATTRIBUTE_REDEFINED</a> = 42 : 42
+ <a name="XML_ERR_LITERAL_NOT_STARTED" id="XML_ERR_LITERAL_NOT_STARTED">XML_ERR_LITERAL_NOT_STARTED</a> = 43 : 43
+ <a name="XML_ERR_LITERAL_NOT_FINISHED" id="XML_ERR_LITERAL_NOT_FINISHED">XML_ERR_LITERAL_NOT_FINISHED</a> = 44 : 44
+ <a name="XML_ERR_COMMENT_NOT_FINISHED" id="XML_ERR_COMMENT_NOT_FINISHED">XML_ERR_COMMENT_NOT_FINISHED</a> = 45 : 45
+ <a name="XML_ERR_PI_NOT_STARTED" id="XML_ERR_PI_NOT_STARTED">XML_ERR_PI_NOT_STARTED</a> = 46 : 46
+ <a name="XML_ERR_PI_NOT_FINISHED" id="XML_ERR_PI_NOT_FINISHED">XML_ERR_PI_NOT_FINISHED</a> = 47 : 47
+ <a name="XML_ERR_NOTATION_NOT_STARTED" id="XML_ERR_NOTATION_NOT_STARTED">XML_ERR_NOTATION_NOT_STARTED</a> = 48 : 48
+ <a name="XML_ERR_NOTATION_NOT_FINISHED" id="XML_ERR_NOTATION_NOT_FINISHED">XML_ERR_NOTATION_NOT_FINISHED</a> = 49 : 49
+ <a name="XML_ERR_ATTLIST_NOT_STARTED" id="XML_ERR_ATTLIST_NOT_STARTED">XML_ERR_ATTLIST_NOT_STARTED</a> = 50 : 50
+ <a name="XML_ERR_ATTLIST_NOT_FINISHED" id="XML_ERR_ATTLIST_NOT_FINISHED">XML_ERR_ATTLIST_NOT_FINISHED</a> = 51 : 51
+ <a name="XML_ERR_MIXED_NOT_STARTED" id="XML_ERR_MIXED_NOT_STARTED">XML_ERR_MIXED_NOT_STARTED</a> = 52 : 52
+ <a name="XML_ERR_MIXED_NOT_FINISHED" id="XML_ERR_MIXED_NOT_FINISHED">XML_ERR_MIXED_NOT_FINISHED</a> = 53 : 53
+ <a name="XML_ERR_ELEMCONTENT_NOT_STARTED" id="XML_ERR_ELEMCONTENT_NOT_STARTED">XML_ERR_ELEMCONTENT_NOT_STARTED</a> = 54 : 54
+ <a name="XML_ERR_ELEMCONTENT_NOT_FINISHED" id="XML_ERR_ELEMCONTENT_NOT_FINISHED">XML_ERR_ELEMCONTENT_NOT_FINISHED</a> = 55 : 55
+ <a name="XML_ERR_XMLDECL_NOT_STARTED" id="XML_ERR_XMLDECL_NOT_STARTED">XML_ERR_XMLDECL_NOT_STARTED</a> = 56 : 56
+ <a name="XML_ERR_XMLDECL_NOT_FINISHED" id="XML_ERR_XMLDECL_NOT_FINISHED">XML_ERR_XMLDECL_NOT_FINISHED</a> = 57 : 57
+ <a name="XML_ERR_CONDSEC_NOT_STARTED" id="XML_ERR_CONDSEC_NOT_STARTED">XML_ERR_CONDSEC_NOT_STARTED</a> = 58 : 58
+ <a name="XML_ERR_CONDSEC_NOT_FINISHED" id="XML_ERR_CONDSEC_NOT_FINISHED">XML_ERR_CONDSEC_NOT_FINISHED</a> = 59 : 59
+ <a name="XML_ERR_EXT_SUBSET_NOT_FINISHED" id="XML_ERR_EXT_SUBSET_NOT_FINISHED">XML_ERR_EXT_SUBSET_NOT_FINISHED</a> = 60 : 60
+ <a name="XML_ERR_DOCTYPE_NOT_FINISHED" id="XML_ERR_DOCTYPE_NOT_FINISHED">XML_ERR_DOCTYPE_NOT_FINISHED</a> = 61 : 61
+ <a name="XML_ERR_MISPLACED_CDATA_END" id="XML_ERR_MISPLACED_CDATA_END">XML_ERR_MISPLACED_CDATA_END</a> = 62 : 62
+ <a name="XML_ERR_CDATA_NOT_FINISHED" id="XML_ERR_CDATA_NOT_FINISHED">XML_ERR_CDATA_NOT_FINISHED</a> = 63 : 63
+ <a name="XML_ERR_RESERVED_XML_NAME" id="XML_ERR_RESERVED_XML_NAME">XML_ERR_RESERVED_XML_NAME</a> = 64 : 64
+ <a name="XML_ERR_SPACE_REQUIRED" id="XML_ERR_SPACE_REQUIRED">XML_ERR_SPACE_REQUIRED</a> = 65 : 65
+ <a name="XML_ERR_SEPARATOR_REQUIRED" id="XML_ERR_SEPARATOR_REQUIRED">XML_ERR_SEPARATOR_REQUIRED</a> = 66 : 66
+ <a name="XML_ERR_NMTOKEN_REQUIRED" id="XML_ERR_NMTOKEN_REQUIRED">XML_ERR_NMTOKEN_REQUIRED</a> = 67 : 67
+ <a name="XML_ERR_NAME_REQUIRED" id="XML_ERR_NAME_REQUIRED">XML_ERR_NAME_REQUIRED</a> = 68 : 68
+ <a name="XML_ERR_PCDATA_REQUIRED" id="XML_ERR_PCDATA_REQUIRED">XML_ERR_PCDATA_REQUIRED</a> = 69 : 69
+ <a name="XML_ERR_URI_REQUIRED" id="XML_ERR_URI_REQUIRED">XML_ERR_URI_REQUIRED</a> = 70 : 70
+ <a name="XML_ERR_PUBID_REQUIRED" id="XML_ERR_PUBID_REQUIRED">XML_ERR_PUBID_REQUIRED</a> = 71 : 71
+ <a name="XML_ERR_LT_REQUIRED" id="XML_ERR_LT_REQUIRED">XML_ERR_LT_REQUIRED</a> = 72 : 72
+ <a name="XML_ERR_GT_REQUIRED" id="XML_ERR_GT_REQUIRED">XML_ERR_GT_REQUIRED</a> = 73 : 73
+ <a name="XML_ERR_LTSLASH_REQUIRED" id="XML_ERR_LTSLASH_REQUIRED">XML_ERR_LTSLASH_REQUIRED</a> = 74 : 74
+ <a name="XML_ERR_EQUAL_REQUIRED" id="XML_ERR_EQUAL_REQUIRED">XML_ERR_EQUAL_REQUIRED</a> = 75 : 75
+ <a name="XML_ERR_TAG_NAME_MISMATCH" id="XML_ERR_TAG_NAME_MISMATCH">XML_ERR_TAG_NAME_MISMATCH</a> = 76 : 76
+ <a name="XML_ERR_TAG_NOT_FINISHED" id="XML_ERR_TAG_NOT_FINISHED">XML_ERR_TAG_NOT_FINISHED</a> = 77 : 77
+ <a name="XML_ERR_STANDALONE_VALUE" id="XML_ERR_STANDALONE_VALUE">XML_ERR_STANDALONE_VALUE</a> = 78 : 78
+ <a name="XML_ERR_ENCODING_NAME" id="XML_ERR_ENCODING_NAME">XML_ERR_ENCODING_NAME</a> = 79 : 79
+ <a name="XML_ERR_HYPHEN_IN_COMMENT" id="XML_ERR_HYPHEN_IN_COMMENT">XML_ERR_HYPHEN_IN_COMMENT</a> = 80 : 80
+ <a name="XML_ERR_INVALID_ENCODING" id="XML_ERR_INVALID_ENCODING">XML_ERR_INVALID_ENCODING</a> = 81 : 81
+ <a name="XML_ERR_EXT_ENTITY_STANDALONE" id="XML_ERR_EXT_ENTITY_STANDALONE">XML_ERR_EXT_ENTITY_STANDALONE</a> = 82 : 82
+ <a name="XML_ERR_CONDSEC_INVALID" id="XML_ERR_CONDSEC_INVALID">XML_ERR_CONDSEC_INVALID</a> = 83 : 83
+ <a name="XML_ERR_VALUE_REQUIRED" id="XML_ERR_VALUE_REQUIRED">XML_ERR_VALUE_REQUIRED</a> = 84 : 84
+ <a name="XML_ERR_NOT_WELL_BALANCED" id="XML_ERR_NOT_WELL_BALANCED">XML_ERR_NOT_WELL_BALANCED</a> = 85 : 85
+ <a name="XML_ERR_EXTRA_CONTENT" id="XML_ERR_EXTRA_CONTENT">XML_ERR_EXTRA_CONTENT</a> = 86 : 86
+ <a name="XML_ERR_ENTITY_CHAR_ERROR" id="XML_ERR_ENTITY_CHAR_ERROR">XML_ERR_ENTITY_CHAR_ERROR</a> = 87 : 87
+ <a name="XML_ERR_ENTITY_PE_INTERNAL" id="XML_ERR_ENTITY_PE_INTERNAL">XML_ERR_ENTITY_PE_INTERNAL</a> = 88 : 88
+ <a name="XML_ERR_ENTITY_LOOP" id="XML_ERR_ENTITY_LOOP">XML_ERR_ENTITY_LOOP</a> = 89 : 89
+ <a name="XML_ERR_ENTITY_BOUNDARY" id="XML_ERR_ENTITY_BOUNDARY">XML_ERR_ENTITY_BOUNDARY</a> = 90 : 90
+ <a name="XML_ERR_INVALID_URI" id="XML_ERR_INVALID_URI">XML_ERR_INVALID_URI</a> = 91 : 91
+ <a name="XML_ERR_URI_FRAGMENT" id="XML_ERR_URI_FRAGMENT">XML_ERR_URI_FRAGMENT</a> = 92 : 92
+ <a name="XML_WAR_CATALOG_PI" id="XML_WAR_CATALOG_PI">XML_WAR_CATALOG_PI</a> = 93 : 93
+ <a name="XML_ERR_NO_DTD" id="XML_ERR_NO_DTD">XML_ERR_NO_DTD</a> = 94 : 94
+ <a name="XML_ERR_CONDSEC_INVALID_KEYWORD" id="XML_ERR_CONDSEC_INVALID_KEYWORD">XML_ERR_CONDSEC_INVALID_KEYWORD</a> = 95 : 95
+ <a name="XML_ERR_VERSION_MISSING" id="XML_ERR_VERSION_MISSING">XML_ERR_VERSION_MISSING</a> = 96 : 96
+ <a name="XML_WAR_UNKNOWN_VERSION" id="XML_WAR_UNKNOWN_VERSION">XML_WAR_UNKNOWN_VERSION</a> = 97 : 97
+ <a name="XML_WAR_LANG_VALUE" id="XML_WAR_LANG_VALUE">XML_WAR_LANG_VALUE</a> = 98 : 98
+ <a name="XML_WAR_NS_URI" id="XML_WAR_NS_URI">XML_WAR_NS_URI</a> = 99 : 99
+ <a name="XML_WAR_NS_URI_RELATIVE" id="XML_WAR_NS_URI_RELATIVE">XML_WAR_NS_URI_RELATIVE</a> = 100 : 100
+ <a name="XML_ERR_MISSING_ENCODING" id="XML_ERR_MISSING_ENCODING">XML_ERR_MISSING_ENCODING</a> = 101 : 101
+ <a name="XML_NS_ERR_XML_NAMESPACE" id="XML_NS_ERR_XML_NAMESPACE">XML_NS_ERR_XML_NAMESPACE</a> = 200
+ <a name="XML_NS_ERR_UNDEFINED_NAMESPACE" id="XML_NS_ERR_UNDEFINED_NAMESPACE">XML_NS_ERR_UNDEFINED_NAMESPACE</a> = 201 : 201
+ <a name="XML_NS_ERR_QNAME" id="XML_NS_ERR_QNAME">XML_NS_ERR_QNAME</a> = 202 : 202
+ <a name="XML_NS_ERR_ATTRIBUTE_REDEFINED" id="XML_NS_ERR_ATTRIBUTE_REDEFINED">XML_NS_ERR_ATTRIBUTE_REDEFINED</a> = 203 : 203
+ <a name="XML_DTD_ATTRIBUTE_DEFAULT" id="XML_DTD_ATTRIBUTE_DEFAULT">XML_DTD_ATTRIBUTE_DEFAULT</a> = 500
+ <a name="XML_DTD_ATTRIBUTE_REDEFINED" id="XML_DTD_ATTRIBUTE_REDEFINED">XML_DTD_ATTRIBUTE_REDEFINED</a> = 501 : 501
+ <a name="XML_DTD_ATTRIBUTE_VALUE" id="XML_DTD_ATTRIBUTE_VALUE">XML_DTD_ATTRIBUTE_VALUE</a> = 502 : 502
+ <a name="XML_DTD_CONTENT_ERROR" id="XML_DTD_CONTENT_ERROR">XML_DTD_CONTENT_ERROR</a> = 503 : 503
+ <a name="XML_DTD_CONTENT_MODEL" id="XML_DTD_CONTENT_MODEL">XML_DTD_CONTENT_MODEL</a> = 504 : 504
+ <a name="XML_DTD_CONTENT_NOT_DETERMINIST" id="XML_DTD_CONTENT_NOT_DETERMINIST">XML_DTD_CONTENT_NOT_DETERMINIST</a> = 505 : 505
+ <a name="XML_DTD_DIFFERENT_PREFIX" id="XML_DTD_DIFFERENT_PREFIX">XML_DTD_DIFFERENT_PREFIX</a> = 506 : 506
+ <a name="XML_DTD_ELEM_DEFAULT_NAMESPACE" id="XML_DTD_ELEM_DEFAULT_NAMESPACE">XML_DTD_ELEM_DEFAULT_NAMESPACE</a> = 507 : 507
+ <a name="XML_DTD_ELEM_NAMESPACE" id="XML_DTD_ELEM_NAMESPACE">XML_DTD_ELEM_NAMESPACE</a> = 508 : 508
+ <a name="XML_DTD_ELEM_REDEFINED" id="XML_DTD_ELEM_REDEFINED">XML_DTD_ELEM_REDEFINED</a> = 509 : 509
+ <a name="XML_DTD_EMPTY_NOTATION" id="XML_DTD_EMPTY_NOTATION">XML_DTD_EMPTY_NOTATION</a> = 510 : 510
+ <a name="XML_DTD_ENTITY_TYPE" id="XML_DTD_ENTITY_TYPE">XML_DTD_ENTITY_TYPE</a> = 511 : 511
+ <a name="XML_DTD_ID_FIXED" id="XML_DTD_ID_FIXED">XML_DTD_ID_FIXED</a> = 512 : 512
+ <a name="XML_DTD_ID_REDEFINED" id="XML_DTD_ID_REDEFINED">XML_DTD_ID_REDEFINED</a> = 513 : 513
+ <a name="XML_DTD_ID_SUBSET" id="XML_DTD_ID_SUBSET">XML_DTD_ID_SUBSET</a> = 514 : 514
+ <a name="XML_DTD_INVALID_CHILD" id="XML_DTD_INVALID_CHILD">XML_DTD_INVALID_CHILD</a> = 515 : 515
+ <a name="XML_DTD_INVALID_DEFAULT" id="XML_DTD_INVALID_DEFAULT">XML_DTD_INVALID_DEFAULT</a> = 516 : 516
+ <a name="XML_DTD_LOAD_ERROR" id="XML_DTD_LOAD_ERROR">XML_DTD_LOAD_ERROR</a> = 517 : 517
+ <a name="XML_DTD_MISSING_ATTRIBUTE" id="XML_DTD_MISSING_ATTRIBUTE">XML_DTD_MISSING_ATTRIBUTE</a> = 518 : 518
+ <a name="XML_DTD_MIXED_CORRUPT" id="XML_DTD_MIXED_CORRUPT">XML_DTD_MIXED_CORRUPT</a> = 519 : 519
+ <a name="XML_DTD_MULTIPLE_ID" id="XML_DTD_MULTIPLE_ID">XML_DTD_MULTIPLE_ID</a> = 520 : 520
+ <a name="XML_DTD_NO_DOC" id="XML_DTD_NO_DOC">XML_DTD_NO_DOC</a> = 521 : 521
+ <a name="XML_DTD_NO_DTD" id="XML_DTD_NO_DTD">XML_DTD_NO_DTD</a> = 522 : 522
+ <a name="XML_DTD_NO_ELEM_NAME" id="XML_DTD_NO_ELEM_NAME">XML_DTD_NO_ELEM_NAME</a> = 523 : 523
+ <a name="XML_DTD_NO_PREFIX" id="XML_DTD_NO_PREFIX">XML_DTD_NO_PREFIX</a> = 524 : 524
+ <a name="XML_DTD_NO_ROOT" id="XML_DTD_NO_ROOT">XML_DTD_NO_ROOT</a> = 525 : 525
+ <a name="XML_DTD_NOTATION_REDEFINED" id="XML_DTD_NOTATION_REDEFINED">XML_DTD_NOTATION_REDEFINED</a> = 526 : 526
+ <a name="XML_DTD_NOTATION_VALUE" id="XML_DTD_NOTATION_VALUE">XML_DTD_NOTATION_VALUE</a> = 527 : 527
+ <a name="XML_DTD_NOT_EMPTY" id="XML_DTD_NOT_EMPTY">XML_DTD_NOT_EMPTY</a> = 528 : 528
+ <a name="XML_DTD_NOT_PCDATA" id="XML_DTD_NOT_PCDATA">XML_DTD_NOT_PCDATA</a> = 529 : 529
+ <a name="XML_DTD_NOT_STANDALONE" id="XML_DTD_NOT_STANDALONE">XML_DTD_NOT_STANDALONE</a> = 530 : 530
+ <a name="XML_DTD_ROOT_NAME" id="XML_DTD_ROOT_NAME">XML_DTD_ROOT_NAME</a> = 531 : 531
+ <a name="XML_DTD_STANDALONE_WHITE_SPACE" id="XML_DTD_STANDALONE_WHITE_SPACE">XML_DTD_STANDALONE_WHITE_SPACE</a> = 532 : 532
+ <a name="XML_DTD_UNKNOWN_ATTRIBUTE" id="XML_DTD_UNKNOWN_ATTRIBUTE">XML_DTD_UNKNOWN_ATTRIBUTE</a> = 533 : 533
+ <a name="XML_DTD_UNKNOWN_ELEM" id="XML_DTD_UNKNOWN_ELEM">XML_DTD_UNKNOWN_ELEM</a> = 534 : 534
+ <a name="XML_DTD_UNKNOWN_ENTITY" id="XML_DTD_UNKNOWN_ENTITY">XML_DTD_UNKNOWN_ENTITY</a> = 535 : 535
+ <a name="XML_DTD_UNKNOWN_ID" id="XML_DTD_UNKNOWN_ID">XML_DTD_UNKNOWN_ID</a> = 536 : 536
+ <a name="XML_DTD_UNKNOWN_NOTATION" id="XML_DTD_UNKNOWN_NOTATION">XML_DTD_UNKNOWN_NOTATION</a> = 537 : 537
+ <a name="XML_DTD_STANDALONE_DEFAULTED" id="XML_DTD_STANDALONE_DEFAULTED">XML_DTD_STANDALONE_DEFAULTED</a> = 538 : 538
+ <a name="XML_HTML_STRUCURE_ERROR" id="XML_HTML_STRUCURE_ERROR">XML_HTML_STRUCURE_ERROR</a> = 800
+ <a name="XML_HTML_UNKNOWN_TAG" id="XML_HTML_UNKNOWN_TAG">XML_HTML_UNKNOWN_TAG</a> = 801 : 801
+ <a name="XML_RNGP_ANYNAME_ATTR_ANCESTOR" id="XML_RNGP_ANYNAME_ATTR_ANCESTOR">XML_RNGP_ANYNAME_ATTR_ANCESTOR</a> = 1000
+ <a name="XML_RNGP_ATTR_CONFLICT" id="XML_RNGP_ATTR_CONFLICT">XML_RNGP_ATTR_CONFLICT</a> = 1001 : 1001
+ <a name="XML_RNGP_ATTRIBUTE_CHILDREN" id="XML_RNGP_ATTRIBUTE_CHILDREN">XML_RNGP_ATTRIBUTE_CHILDREN</a> = 1002 : 1002
+ <a name="XML_RNGP_ATTRIBUTE_CONTENT" id="XML_RNGP_ATTRIBUTE_CONTENT">XML_RNGP_ATTRIBUTE_CONTENT</a> = 1003 : 1003
+ <a name="XML_RNGP_ATTRIBUTE_EMPTY" id="XML_RNGP_ATTRIBUTE_EMPTY">XML_RNGP_ATTRIBUTE_EMPTY</a> = 1004 : 1004
+ <a name="XML_RNGP_ATTRIBUTE_NOOP" id="XML_RNGP_ATTRIBUTE_NOOP">XML_RNGP_ATTRIBUTE_NOOP</a> = 1005 : 1005
+ <a name="XML_RNGP_CHOICE_CONTENT" id="XML_RNGP_CHOICE_CONTENT">XML_RNGP_CHOICE_CONTENT</a> = 1006 : 1006
+ <a name="XML_RNGP_CHOICE_EMPTY" id="XML_RNGP_CHOICE_EMPTY">XML_RNGP_CHOICE_EMPTY</a> = 1007 : 1007
+ <a name="XML_RNGP_CREATE_FAILURE" id="XML_RNGP_CREATE_FAILURE">XML_RNGP_CREATE_FAILURE</a> = 1008 : 1008
+ <a name="XML_RNGP_DATA_CONTENT" id="XML_RNGP_DATA_CONTENT">XML_RNGP_DATA_CONTENT</a> = 1009 : 1009
+ <a name="XML_RNGP_DEF_CHOICE_AND_INTERLEAVE" id="XML_RNGP_DEF_CHOICE_AND_INTERLEAVE">XML_RNGP_DEF_CHOICE_AND_INTERLEAVE</a> = 1010 : 1010
+ <a name="XML_RNGP_DEFINE_CREATE_FAILED" id="XML_RNGP_DEFINE_CREATE_FAILED">XML_RNGP_DEFINE_CREATE_FAILED</a> = 1011 : 1011
+ <a name="XML_RNGP_DEFINE_EMPTY" id="XML_RNGP_DEFINE_EMPTY">XML_RNGP_DEFINE_EMPTY</a> = 1012 : 1012
+ <a name="XML_RNGP_DEFINE_MISSING" id="XML_RNGP_DEFINE_MISSING">XML_RNGP_DEFINE_MISSING</a> = 1013 : 1013
+ <a name="XML_RNGP_DEFINE_NAME_MISSING" id="XML_RNGP_DEFINE_NAME_MISSING">XML_RNGP_DEFINE_NAME_MISSING</a> = 1014 : 1014
+ <a name="XML_RNGP_ELEM_CONTENT_EMPTY" id="XML_RNGP_ELEM_CONTENT_EMPTY">XML_RNGP_ELEM_CONTENT_EMPTY</a> = 1015 : 1015
+ <a name="XML_RNGP_ELEM_CONTENT_ERROR" id="XML_RNGP_ELEM_CONTENT_ERROR">XML_RNGP_ELEM_CONTENT_ERROR</a> = 1016 : 1016
+ <a name="XML_RNGP_ELEMENT_EMPTY" id="XML_RNGP_ELEMENT_EMPTY">XML_RNGP_ELEMENT_EMPTY</a> = 1017 : 1017
+ <a name="XML_RNGP_ELEMENT_CONTENT" id="XML_RNGP_ELEMENT_CONTENT">XML_RNGP_ELEMENT_CONTENT</a> = 1018 : 1018
+ <a name="XML_RNGP_ELEMENT_NAME" id="XML_RNGP_ELEMENT_NAME">XML_RNGP_ELEMENT_NAME</a> = 1019 : 1019
+ <a name="XML_RNGP_ELEMENT_NO_CONTENT" id="XML_RNGP_ELEMENT_NO_CONTENT">XML_RNGP_ELEMENT_NO_CONTENT</a> = 1020 : 1020
+ <a name="XML_RNGP_ELEM_TEXT_CONFLICT" id="XML_RNGP_ELEM_TEXT_CONFLICT">XML_RNGP_ELEM_TEXT_CONFLICT</a> = 1021 : 1021
+ <a name="XML_RNGP_EMPTY" id="XML_RNGP_EMPTY">XML_RNGP_EMPTY</a> = 1022 : 1022
+ <a name="XML_RNGP_EMPTY_CONSTRUCT" id="XML_RNGP_EMPTY_CONSTRUCT">XML_RNGP_EMPTY_CONSTRUCT</a> = 1023 : 1023
+ <a name="XML_RNGP_EMPTY_CONTENT" id="XML_RNGP_EMPTY_CONTENT">XML_RNGP_EMPTY_CONTENT</a> = 1024 : 1024
+ <a name="XML_RNGP_EMPTY_NOT_EMPTY" id="XML_RNGP_EMPTY_NOT_EMPTY">XML_RNGP_EMPTY_NOT_EMPTY</a> = 1025 : 1025
+ <a name="XML_RNGP_ERROR_TYPE_LIB" id="XML_RNGP_ERROR_TYPE_LIB">XML_RNGP_ERROR_TYPE_LIB</a> = 1026 : 1026
+ <a name="XML_RNGP_EXCEPT_EMPTY" id="XML_RNGP_EXCEPT_EMPTY">XML_RNGP_EXCEPT_EMPTY</a> = 1027 : 1027
+ <a name="XML_RNGP_EXCEPT_MISSING" id="XML_RNGP_EXCEPT_MISSING">XML_RNGP_EXCEPT_MISSING</a> = 1028 : 1028
+ <a name="XML_RNGP_EXCEPT_MULTIPLE" id="XML_RNGP_EXCEPT_MULTIPLE">XML_RNGP_EXCEPT_MULTIPLE</a> = 1029 : 1029
+ <a name="XML_RNGP_EXCEPT_NO_CONTENT" id="XML_RNGP_EXCEPT_NO_CONTENT">XML_RNGP_EXCEPT_NO_CONTENT</a> = 1030 : 1030
+ <a name="XML_RNGP_EXTERNALREF_EMTPY" id="XML_RNGP_EXTERNALREF_EMTPY">XML_RNGP_EXTERNALREF_EMTPY</a> = 1031 : 1031
+ <a name="XML_RNGP_EXTERNAL_REF_FAILURE" id="XML_RNGP_EXTERNAL_REF_FAILURE">XML_RNGP_EXTERNAL_REF_FAILURE</a> = 1032 : 1032
+ <a name="XML_RNGP_EXTERNALREF_RECURSE" id="XML_RNGP_EXTERNALREF_RECURSE">XML_RNGP_EXTERNALREF_RECURSE</a> = 1033 : 1033
+ <a name="XML_RNGP_FORBIDDEN_ATTRIBUTE" id="XML_RNGP_FORBIDDEN_ATTRIBUTE">XML_RNGP_FORBIDDEN_ATTRIBUTE</a> = 1034 : 1034
+ <a name="XML_RNGP_FOREIGN_ELEMENT" id="XML_RNGP_FOREIGN_ELEMENT">XML_RNGP_FOREIGN_ELEMENT</a> = 1035 : 1035
+ <a name="XML_RNGP_GRAMMAR_CONTENT" id="XML_RNGP_GRAMMAR_CONTENT">XML_RNGP_GRAMMAR_CONTENT</a> = 1036 : 1036
+ <a name="XML_RNGP_GRAMMAR_EMPTY" id="XML_RNGP_GRAMMAR_EMPTY">XML_RNGP_GRAMMAR_EMPTY</a> = 1037 : 1037
+ <a name="XML_RNGP_GRAMMAR_MISSING" id="XML_RNGP_GRAMMAR_MISSING">XML_RNGP_GRAMMAR_MISSING</a> = 1038 : 1038
+ <a name="XML_RNGP_GRAMMAR_NO_START" id="XML_RNGP_GRAMMAR_NO_START">XML_RNGP_GRAMMAR_NO_START</a> = 1039 : 1039
+ <a name="XML_RNGP_GROUP_ATTR_CONFLICT" id="XML_RNGP_GROUP_ATTR_CONFLICT">XML_RNGP_GROUP_ATTR_CONFLICT</a> = 1040 : 1040
+ <a name="XML_RNGP_HREF_ERROR" id="XML_RNGP_HREF_ERROR">XML_RNGP_HREF_ERROR</a> = 1041 : 1041
+ <a name="XML_RNGP_INCLUDE_EMPTY" id="XML_RNGP_INCLUDE_EMPTY">XML_RNGP_INCLUDE_EMPTY</a> = 1042 : 1042
+ <a name="XML_RNGP_INCLUDE_FAILURE" id="XML_RNGP_INCLUDE_FAILURE">XML_RNGP_INCLUDE_FAILURE</a> = 1043 : 1043
+ <a name="XML_RNGP_INCLUDE_RECURSE" id="XML_RNGP_INCLUDE_RECURSE">XML_RNGP_INCLUDE_RECURSE</a> = 1044 : 1044
+ <a name="XML_RNGP_INTERLEAVE_ADD" id="XML_RNGP_INTERLEAVE_ADD">XML_RNGP_INTERLEAVE_ADD</a> = 1045 : 1045
+ <a name="XML_RNGP_INTERLEAVE_CREATE_FAILED" id="XML_RNGP_INTERLEAVE_CREATE_FAILED">XML_RNGP_INTERLEAVE_CREATE_FAILED</a> = 1046 : 1046
+ <a name="XML_RNGP_INTERLEAVE_EMPTY" id="XML_RNGP_INTERLEAVE_EMPTY">XML_RNGP_INTERLEAVE_EMPTY</a> = 1047 : 1047
+ <a name="XML_RNGP_INTERLEAVE_NO_CONTENT" id="XML_RNGP_INTERLEAVE_NO_CONTENT">XML_RNGP_INTERLEAVE_NO_CONTENT</a> = 1048 : 1048
+ <a name="XML_RNGP_INVALID_DEFINE_NAME" id="XML_RNGP_INVALID_DEFINE_NAME">XML_RNGP_INVALID_DEFINE_NAME</a> = 1049 : 1049
+ <a name="XML_RNGP_INVALID_URI" id="XML_RNGP_INVALID_URI">XML_RNGP_INVALID_URI</a> = 1050 : 1050
+ <a name="XML_RNGP_INVALID_VALUE" id="XML_RNGP_INVALID_VALUE">XML_RNGP_INVALID_VALUE</a> = 1051 : 1051
+ <a name="XML_RNGP_MISSING_HREF" id="XML_RNGP_MISSING_HREF">XML_RNGP_MISSING_HREF</a> = 1052 : 1052
+ <a name="XML_RNGP_NAME_MISSING" id="XML_RNGP_NAME_MISSING">XML_RNGP_NAME_MISSING</a> = 1053 : 1053
+ <a name="XML_RNGP_NEED_COMBINE" id="XML_RNGP_NEED_COMBINE">XML_RNGP_NEED_COMBINE</a> = 1054 : 1054
+ <a name="XML_RNGP_NOTALLOWED_NOT_EMPTY" id="XML_RNGP_NOTALLOWED_NOT_EMPTY">XML_RNGP_NOTALLOWED_NOT_EMPTY</a> = 1055 : 1055
+ <a name="XML_RNGP_NSNAME_ATTR_ANCESTOR" id="XML_RNGP_NSNAME_ATTR_ANCESTOR">XML_RNGP_NSNAME_ATTR_ANCESTOR</a> = 1056 : 1056
+ <a name="XML_RNGP_NSNAME_NO_NS" id="XML_RNGP_NSNAME_NO_NS">XML_RNGP_NSNAME_NO_NS</a> = 1057 : 1057
+ <a name="XML_RNGP_PARAM_FORBIDDEN" id="XML_RNGP_PARAM_FORBIDDEN">XML_RNGP_PARAM_FORBIDDEN</a> = 1058 : 1058
+ <a name="XML_RNGP_PARAM_NAME_MISSING" id="XML_RNGP_PARAM_NAME_MISSING">XML_RNGP_PARAM_NAME_MISSING</a> = 1059 : 1059
+ <a name="XML_RNGP_PARENTREF_CREATE_FAILED" id="XML_RNGP_PARENTREF_CREATE_FAILED">XML_RNGP_PARENTREF_CREATE_FAILED</a> = 1060 : 1060
+ <a name="XML_RNGP_PARENTREF_NAME_INVALID" id="XML_RNGP_PARENTREF_NAME_INVALID">XML_RNGP_PARENTREF_NAME_INVALID</a> = 1061 : 1061
+ <a name="XML_RNGP_PARENTREF_NO_NAME" id="XML_RNGP_PARENTREF_NO_NAME">XML_RNGP_PARENTREF_NO_NAME</a> = 1062 : 1062
+ <a name="XML_RNGP_PARENTREF_NO_PARENT" id="XML_RNGP_PARENTREF_NO_PARENT">XML_RNGP_PARENTREF_NO_PARENT</a> = 1063 : 1063
+ <a name="XML_RNGP_PARENTREF_NOT_EMPTY" id="XML_RNGP_PARENTREF_NOT_EMPTY">XML_RNGP_PARENTREF_NOT_EMPTY</a> = 1064 : 1064
+ <a name="XML_RNGP_PARSE_ERROR" id="XML_RNGP_PARSE_ERROR">XML_RNGP_PARSE_ERROR</a> = 1065 : 1065
+ <a name="XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME" id="XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME">XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME</a> = 1066 : 1066
+ <a name="XML_RNGP_PAT_ATTR_ATTR" id="XML_RNGP_PAT_ATTR_ATTR">XML_RNGP_PAT_ATTR_ATTR</a> = 1067 : 1067
+ <a name="XML_RNGP_PAT_ATTR_ELEM" id="XML_RNGP_PAT_ATTR_ELEM">XML_RNGP_PAT_ATTR_ELEM</a> = 1068 : 1068
+ <a name="XML_RNGP_PAT_DATA_EXCEPT_ATTR" id="XML_RNGP_PAT_DATA_EXCEPT_ATTR">XML_RNGP_PAT_DATA_EXCEPT_ATTR</a> = 1069 : 1069
+ <a name="XML_RNGP_PAT_DATA_EXCEPT_ELEM" id="XML_RNGP_PAT_DATA_EXCEPT_ELEM">XML_RNGP_PAT_DATA_EXCEPT_ELEM</a> = 1070 : 1070
+ <a name="XML_RNGP_PAT_DATA_EXCEPT_EMPTY" id="XML_RNGP_PAT_DATA_EXCEPT_EMPTY">XML_RNGP_PAT_DATA_EXCEPT_EMPTY</a> = 1071 : 1071
+ <a name="XML_RNGP_PAT_DATA_EXCEPT_GROUP" id="XML_RNGP_PAT_DATA_EXCEPT_GROUP">XML_RNGP_PAT_DATA_EXCEPT_GROUP</a> = 1072 : 1072
+ <a name="XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE" id="XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE">XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE</a> = 1073 : 1073
+ <a name="XML_RNGP_PAT_DATA_EXCEPT_LIST" id="XML_RNGP_PAT_DATA_EXCEPT_LIST">XML_RNGP_PAT_DATA_EXCEPT_LIST</a> = 1074 : 1074
+ <a name="XML_RNGP_PAT_DATA_EXCEPT_ONEMORE" id="XML_RNGP_PAT_DATA_EXCEPT_ONEMORE">XML_RNGP_PAT_DATA_EXCEPT_ONEMORE</a> = 1075 : 1075
+ <a name="XML_RNGP_PAT_DATA_EXCEPT_REF" id="XML_RNGP_PAT_DATA_EXCEPT_REF">XML_RNGP_PAT_DATA_EXCEPT_REF</a> = 1076 : 1076
+ <a name="XML_RNGP_PAT_DATA_EXCEPT_TEXT" id="XML_RNGP_PAT_DATA_EXCEPT_TEXT">XML_RNGP_PAT_DATA_EXCEPT_TEXT</a> = 1077 : 1077
+ <a name="XML_RNGP_PAT_LIST_ATTR" id="XML_RNGP_PAT_LIST_ATTR">XML_RNGP_PAT_LIST_ATTR</a> = 1078 : 1078
+ <a name="XML_RNGP_PAT_LIST_ELEM" id="XML_RNGP_PAT_LIST_ELEM">XML_RNGP_PAT_LIST_ELEM</a> = 1079 : 1079
+ <a name="XML_RNGP_PAT_LIST_INTERLEAVE" id="XML_RNGP_PAT_LIST_INTERLEAVE">XML_RNGP_PAT_LIST_INTERLEAVE</a> = 1080 : 1080
+ <a name="XML_RNGP_PAT_LIST_LIST" id="XML_RNGP_PAT_LIST_LIST">XML_RNGP_PAT_LIST_LIST</a> = 1081 : 1081
+ <a name="XML_RNGP_PAT_LIST_REF" id="XML_RNGP_PAT_LIST_REF">XML_RNGP_PAT_LIST_REF</a> = 1082 : 1082
+ <a name="XML_RNGP_PAT_LIST_TEXT" id="XML_RNGP_PAT_LIST_TEXT">XML_RNGP_PAT_LIST_TEXT</a> = 1083 : 1083
+ <a name="XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME" id="XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME">XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME</a> = 1084 : 1084
+ <a name="XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME" id="XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME">XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME</a> = 1085 : 1085
+ <a name="XML_RNGP_PAT_ONEMORE_GROUP_ATTR" id="XML_RNGP_PAT_ONEMORE_GROUP_ATTR">XML_RNGP_PAT_ONEMORE_GROUP_ATTR</a> = 1086 : 1086
+ <a name="XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR" id="XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR">XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR</a> = 1087 : 1087
+ <a name="XML_RNGP_PAT_START_ATTR" id="XML_RNGP_PAT_START_ATTR">XML_RNGP_PAT_START_ATTR</a> = 1088 : 1088
+ <a name="XML_RNGP_PAT_START_DATA" id="XML_RNGP_PAT_START_DATA">XML_RNGP_PAT_START_DATA</a> = 1089 : 1089
+ <a name="XML_RNGP_PAT_START_EMPTY" id="XML_RNGP_PAT_START_EMPTY">XML_RNGP_PAT_START_EMPTY</a> = 1090 : 1090
+ <a name="XML_RNGP_PAT_START_GROUP" id="XML_RNGP_PAT_START_GROUP">XML_RNGP_PAT_START_GROUP</a> = 1091 : 1091
+ <a name="XML_RNGP_PAT_START_INTERLEAVE" id="XML_RNGP_PAT_START_INTERLEAVE">XML_RNGP_PAT_START_INTERLEAVE</a> = 1092 : 1092
+ <a name="XML_RNGP_PAT_START_LIST" id="XML_RNGP_PAT_START_LIST">XML_RNGP_PAT_START_LIST</a> = 1093 : 1093
+ <a name="XML_RNGP_PAT_START_ONEMORE" id="XML_RNGP_PAT_START_ONEMORE">XML_RNGP_PAT_START_ONEMORE</a> = 1094 : 1094
+ <a name="XML_RNGP_PAT_START_TEXT" id="XML_RNGP_PAT_START_TEXT">XML_RNGP_PAT_START_TEXT</a> = 1095 : 1095
+ <a name="XML_RNGP_PAT_START_VALUE" id="XML_RNGP_PAT_START_VALUE">XML_RNGP_PAT_START_VALUE</a> = 1096 : 1096
+ <a name="XML_RNGP_PREFIX_UNDEFINED" id="XML_RNGP_PREFIX_UNDEFINED">XML_RNGP_PREFIX_UNDEFINED</a> = 1097 : 1097
+ <a name="XML_RNGP_REF_CREATE_FAILED" id="XML_RNGP_REF_CREATE_FAILED">XML_RNGP_REF_CREATE_FAILED</a> = 1098 : 1098
+ <a name="XML_RNGP_REF_CYCLE" id="XML_RNGP_REF_CYCLE">XML_RNGP_REF_CYCLE</a> = 1099 : 1099
+ <a name="XML_RNGP_REF_NAME_INVALID" id="XML_RNGP_REF_NAME_INVALID">XML_RNGP_REF_NAME_INVALID</a> = 1100 : 1100
+ <a name="XML_RNGP_REF_NO_DEF" id="XML_RNGP_REF_NO_DEF">XML_RNGP_REF_NO_DEF</a> = 1101 : 1101
+ <a name="XML_RNGP_REF_NO_NAME" id="XML_RNGP_REF_NO_NAME">XML_RNGP_REF_NO_NAME</a> = 1102 : 1102
+ <a name="XML_RNGP_REF_NOT_EMPTY" id="XML_RNGP_REF_NOT_EMPTY">XML_RNGP_REF_NOT_EMPTY</a> = 1103 : 1103
+ <a name="XML_RNGP_START_CHOICE_AND_INTERLEAVE" id="XML_RNGP_START_CHOICE_AND_INTERLEAVE">XML_RNGP_START_CHOICE_AND_INTERLEAVE</a> = 1104 : 1104
+ <a name="XML_RNGP_START_CONTENT" id="XML_RNGP_START_CONTENT">XML_RNGP_START_CONTENT</a> = 1105 : 1105
+ <a name="XML_RNGP_START_EMPTY" id="XML_RNGP_START_EMPTY">XML_RNGP_START_EMPTY</a> = 1106 : 1106
+ <a name="XML_RNGP_START_MISSING" id="XML_RNGP_START_MISSING">XML_RNGP_START_MISSING</a> = 1107 : 1107
+ <a name="XML_RNGP_TEXT_EXPECTED" id="XML_RNGP_TEXT_EXPECTED">XML_RNGP_TEXT_EXPECTED</a> = 1108 : 1108
+ <a name="XML_RNGP_TEXT_HAS_CHILD" id="XML_RNGP_TEXT_HAS_CHILD">XML_RNGP_TEXT_HAS_CHILD</a> = 1109 : 1109
+ <a name="XML_RNGP_TYPE_MISSING" id="XML_RNGP_TYPE_MISSING">XML_RNGP_TYPE_MISSING</a> = 1110 : 1110
+ <a name="XML_RNGP_TYPE_NOT_FOUND" id="XML_RNGP_TYPE_NOT_FOUND">XML_RNGP_TYPE_NOT_FOUND</a> = 1111 : 1111
+ <a name="XML_RNGP_TYPE_VALUE" id="XML_RNGP_TYPE_VALUE">XML_RNGP_TYPE_VALUE</a> = 1112 : 1112
+ <a name="XML_RNGP_UNKNOWN_ATTRIBUTE" id="XML_RNGP_UNKNOWN_ATTRIBUTE">XML_RNGP_UNKNOWN_ATTRIBUTE</a> = 1113 : 1113
+ <a name="XML_RNGP_UNKNOWN_COMBINE" id="XML_RNGP_UNKNOWN_COMBINE">XML_RNGP_UNKNOWN_COMBINE</a> = 1114 : 1114
+ <a name="XML_RNGP_UNKNOWN_CONSTRUCT" id="XML_RNGP_UNKNOWN_CONSTRUCT">XML_RNGP_UNKNOWN_CONSTRUCT</a> = 1115 : 1115
+ <a name="XML_RNGP_UNKNOWN_TYPE_LIB" id="XML_RNGP_UNKNOWN_TYPE_LIB">XML_RNGP_UNKNOWN_TYPE_LIB</a> = 1116 : 1116
+ <a name="XML_RNGP_URI_FRAGMENT" id="XML_RNGP_URI_FRAGMENT">XML_RNGP_URI_FRAGMENT</a> = 1117 : 1117
+ <a name="XML_RNGP_URI_NOT_ABSOLUTE" id="XML_RNGP_URI_NOT_ABSOLUTE">XML_RNGP_URI_NOT_ABSOLUTE</a> = 1118 : 1118
+ <a name="XML_RNGP_VALUE_EMPTY" id="XML_RNGP_VALUE_EMPTY">XML_RNGP_VALUE_EMPTY</a> = 1119 : 1119
+ <a name="XML_RNGP_VALUE_NO_CONTENT" id="XML_RNGP_VALUE_NO_CONTENT">XML_RNGP_VALUE_NO_CONTENT</a> = 1120 : 1120
+ <a name="XML_RNGP_XMLNS_NAME" id="XML_RNGP_XMLNS_NAME">XML_RNGP_XMLNS_NAME</a> = 1121 : 1121
+ <a name="XML_RNGP_XML_NS" id="XML_RNGP_XML_NS">XML_RNGP_XML_NS</a> = 1122 : 1122
+ <a name="XML_XPATH_EXPRESSION_OK" id="XML_XPATH_EXPRESSION_OK">XML_XPATH_EXPRESSION_OK</a> = 1200
+ <a name="XML_XPATH_NUMBER_ERROR" id="XML_XPATH_NUMBER_ERROR">XML_XPATH_NUMBER_ERROR</a> = 1201 : 1201
+ <a name="XML_XPATH_UNFINISHED_LITERAL_ERROR" id="XML_XPATH_UNFINISHED_LITERAL_ERROR">XML_XPATH_UNFINISHED_LITERAL_ERROR</a> = 1202 : 1202
+ <a name="XML_XPATH_START_LITERAL_ERROR" id="XML_XPATH_START_LITERAL_ERROR">XML_XPATH_START_LITERAL_ERROR</a> = 1203 : 1203
+ <a name="XML_XPATH_VARIABLE_REF_ERROR" id="XML_XPATH_VARIABLE_REF_ERROR">XML_XPATH_VARIABLE_REF_ERROR</a> = 1204 : 1204
+ <a name="XML_XPATH_UNDEF_VARIABLE_ERROR" id="XML_XPATH_UNDEF_VARIABLE_ERROR">XML_XPATH_UNDEF_VARIABLE_ERROR</a> = 1205 : 1205
+ <a name="XML_XPATH_INVALID_PREDICATE_ERROR" id="XML_XPATH_INVALID_PREDICATE_ERROR">XML_XPATH_INVALID_PREDICATE_ERROR</a> = 1206 : 1206
+ <a name="XML_XPATH_EXPR_ERROR" id="XML_XPATH_EXPR_ERROR">XML_XPATH_EXPR_ERROR</a> = 1207 : 1207
+ <a name="XML_XPATH_UNCLOSED_ERROR" id="XML_XPATH_UNCLOSED_ERROR">XML_XPATH_UNCLOSED_ERROR</a> = 1208 : 1208
+ <a name="XML_XPATH_UNKNOWN_FUNC_ERROR" id="XML_XPATH_UNKNOWN_FUNC_ERROR">XML_XPATH_UNKNOWN_FUNC_ERROR</a> = 1209 : 1209
+ <a name="XML_XPATH_INVALID_OPERAND" id="XML_XPATH_INVALID_OPERAND">XML_XPATH_INVALID_OPERAND</a> = 1210 : 1210
+ <a name="XML_XPATH_INVALID_TYPE" id="XML_XPATH_INVALID_TYPE">XML_XPATH_INVALID_TYPE</a> = 1211 : 1211
+ <a name="XML_XPATH_INVALID_ARITY" id="XML_XPATH_INVALID_ARITY">XML_XPATH_INVALID_ARITY</a> = 1212 : 1212
+ <a name="XML_XPATH_INVALID_CTXT_SIZE" id="XML_XPATH_INVALID_CTXT_SIZE">XML_XPATH_INVALID_CTXT_SIZE</a> = 1213 : 1213
+ <a name="XML_XPATH_INVALID_CTXT_POSITION" id="XML_XPATH_INVALID_CTXT_POSITION">XML_XPATH_INVALID_CTXT_POSITION</a> = 1214 : 1214
+ <a name="XML_XPATH_MEMORY_ERROR" id="XML_XPATH_MEMORY_ERROR">XML_XPATH_MEMORY_ERROR</a> = 1215 : 1215
+ <a name="XML_XPTR_SYNTAX_ERROR" id="XML_XPTR_SYNTAX_ERROR">XML_XPTR_SYNTAX_ERROR</a> = 1216 : 1216
+ <a name="XML_XPTR_RESOURCE_ERROR" id="XML_XPTR_RESOURCE_ERROR">XML_XPTR_RESOURCE_ERROR</a> = 1217 : 1217
+ <a name="XML_XPTR_SUB_RESOURCE_ERROR" id="XML_XPTR_SUB_RESOURCE_ERROR">XML_XPTR_SUB_RESOURCE_ERROR</a> = 1218 : 1218
+ <a name="XML_XPATH_UNDEF_PREFIX_ERROR" id="XML_XPATH_UNDEF_PREFIX_ERROR">XML_XPATH_UNDEF_PREFIX_ERROR</a> = 1219 : 1219
+ <a name="XML_XPATH_ENCODING_ERROR" id="XML_XPATH_ENCODING_ERROR">XML_XPATH_ENCODING_ERROR</a> = 1220 : 1220
+ <a name="XML_XPATH_INVALID_CHAR_ERROR" id="XML_XPATH_INVALID_CHAR_ERROR">XML_XPATH_INVALID_CHAR_ERROR</a> = 1221 : 1221
+ <a name="XML_TREE_INVALID_HEX" id="XML_TREE_INVALID_HEX">XML_TREE_INVALID_HEX</a> = 1300
+ <a name="XML_TREE_INVALID_DEC" id="XML_TREE_INVALID_DEC">XML_TREE_INVALID_DEC</a> = 1301 : 1301
+ <a name="XML_TREE_UNTERMINATED_ENTITY" id="XML_TREE_UNTERMINATED_ENTITY">XML_TREE_UNTERMINATED_ENTITY</a> = 1302 : 1302
+ <a name="XML_SAVE_NOT_UTF8" id="XML_SAVE_NOT_UTF8">XML_SAVE_NOT_UTF8</a> = 1400
+ <a name="XML_SAVE_CHAR_INVALID" id="XML_SAVE_CHAR_INVALID">XML_SAVE_CHAR_INVALID</a> = 1401 : 1401
+ <a name="XML_SAVE_NO_DOCTYPE" id="XML_SAVE_NO_DOCTYPE">XML_SAVE_NO_DOCTYPE</a> = 1402 : 1402
+ <a name="XML_SAVE_UNKNOWN_ENCODING" id="XML_SAVE_UNKNOWN_ENCODING">XML_SAVE_UNKNOWN_ENCODING</a> = 1403 : 1403
+ <a name="XML_REGEXP_COMPILE_ERROR" id="XML_REGEXP_COMPILE_ERROR">XML_REGEXP_COMPILE_ERROR</a> = 1450
+ <a name="XML_IO_UNKNOWN" id="XML_IO_UNKNOWN">XML_IO_UNKNOWN</a> = 1500
+ <a name="XML_IO_EACCES" id="XML_IO_EACCES">XML_IO_EACCES</a> = 1501 : 1501
+ <a name="XML_IO_EAGAIN" id="XML_IO_EAGAIN">XML_IO_EAGAIN</a> = 1502 : 1502
+ <a name="XML_IO_EBADF" id="XML_IO_EBADF">XML_IO_EBADF</a> = 1503 : 1503
+ <a name="XML_IO_EBADMSG" id="XML_IO_EBADMSG">XML_IO_EBADMSG</a> = 1504 : 1504
+ <a name="XML_IO_EBUSY" id="XML_IO_EBUSY">XML_IO_EBUSY</a> = 1505 : 1505
+ <a name="XML_IO_ECANCELED" id="XML_IO_ECANCELED">XML_IO_ECANCELED</a> = 1506 : 1506
+ <a name="XML_IO_ECHILD" id="XML_IO_ECHILD">XML_IO_ECHILD</a> = 1507 : 1507
+ <a name="XML_IO_EDEADLK" id="XML_IO_EDEADLK">XML_IO_EDEADLK</a> = 1508 : 1508
+ <a name="XML_IO_EDOM" id="XML_IO_EDOM">XML_IO_EDOM</a> = 1509 : 1509
+ <a name="XML_IO_EEXIST" id="XML_IO_EEXIST">XML_IO_EEXIST</a> = 1510 : 1510
+ <a name="XML_IO_EFAULT" id="XML_IO_EFAULT">XML_IO_EFAULT</a> = 1511 : 1511
+ <a name="XML_IO_EFBIG" id="XML_IO_EFBIG">XML_IO_EFBIG</a> = 1512 : 1512
+ <a name="XML_IO_EINPROGRESS" id="XML_IO_EINPROGRESS">XML_IO_EINPROGRESS</a> = 1513 : 1513
+ <a name="XML_IO_EINTR" id="XML_IO_EINTR">XML_IO_EINTR</a> = 1514 : 1514
+ <a name="XML_IO_EINVAL" id="XML_IO_EINVAL">XML_IO_EINVAL</a> = 1515 : 1515
+ <a name="XML_IO_EIO" id="XML_IO_EIO">XML_IO_EIO</a> = 1516 : 1516
+ <a name="XML_IO_EISDIR" id="XML_IO_EISDIR">XML_IO_EISDIR</a> = 1517 : 1517
+ <a name="XML_IO_EMFILE" id="XML_IO_EMFILE">XML_IO_EMFILE</a> = 1518 : 1518
+ <a name="XML_IO_EMLINK" id="XML_IO_EMLINK">XML_IO_EMLINK</a> = 1519 : 1519
+ <a name="XML_IO_EMSGSIZE" id="XML_IO_EMSGSIZE">XML_IO_EMSGSIZE</a> = 1520 : 1520
+ <a name="XML_IO_ENAMETOOLONG" id="XML_IO_ENAMETOOLONG">XML_IO_ENAMETOOLONG</a> = 1521 : 1521
+ <a name="XML_IO_ENFILE" id="XML_IO_ENFILE">XML_IO_ENFILE</a> = 1522 : 1522
+ <a name="XML_IO_ENODEV" id="XML_IO_ENODEV">XML_IO_ENODEV</a> = 1523 : 1523
+ <a name="XML_IO_ENOENT" id="XML_IO_ENOENT">XML_IO_ENOENT</a> = 1524 : 1524
+ <a name="XML_IO_ENOEXEC" id="XML_IO_ENOEXEC">XML_IO_ENOEXEC</a> = 1525 : 1525
+ <a name="XML_IO_ENOLCK" id="XML_IO_ENOLCK">XML_IO_ENOLCK</a> = 1526 : 1526
+ <a name="XML_IO_ENOMEM" id="XML_IO_ENOMEM">XML_IO_ENOMEM</a> = 1527 : 1527
+ <a name="XML_IO_ENOSPC" id="XML_IO_ENOSPC">XML_IO_ENOSPC</a> = 1528 : 1528
+ <a name="XML_IO_ENOSYS" id="XML_IO_ENOSYS">XML_IO_ENOSYS</a> = 1529 : 1529
+ <a name="XML_IO_ENOTDIR" id="XML_IO_ENOTDIR">XML_IO_ENOTDIR</a> = 1530 : 1530
+ <a name="XML_IO_ENOTEMPTY" id="XML_IO_ENOTEMPTY">XML_IO_ENOTEMPTY</a> = 1531 : 1531
+ <a name="XML_IO_ENOTSUP" id="XML_IO_ENOTSUP">XML_IO_ENOTSUP</a> = 1532 : 1532
+ <a name="XML_IO_ENOTTY" id="XML_IO_ENOTTY">XML_IO_ENOTTY</a> = 1533 : 1533
+ <a name="XML_IO_ENXIO" id="XML_IO_ENXIO">XML_IO_ENXIO</a> = 1534 : 1534
+ <a name="XML_IO_EPERM" id="XML_IO_EPERM">XML_IO_EPERM</a> = 1535 : 1535
+ <a name="XML_IO_EPIPE" id="XML_IO_EPIPE">XML_IO_EPIPE</a> = 1536 : 1536
+ <a name="XML_IO_ERANGE" id="XML_IO_ERANGE">XML_IO_ERANGE</a> = 1537 : 1537
+ <a name="XML_IO_EROFS" id="XML_IO_EROFS">XML_IO_EROFS</a> = 1538 : 1538
+ <a name="XML_IO_ESPIPE" id="XML_IO_ESPIPE">XML_IO_ESPIPE</a> = 1539 : 1539
+ <a name="XML_IO_ESRCH" id="XML_IO_ESRCH">XML_IO_ESRCH</a> = 1540 : 1540
+ <a name="XML_IO_ETIMEDOUT" id="XML_IO_ETIMEDOUT">XML_IO_ETIMEDOUT</a> = 1541 : 1541
+ <a name="XML_IO_EXDEV" id="XML_IO_EXDEV">XML_IO_EXDEV</a> = 1542 : 1542
+ <a name="XML_IO_NETWORK_ATTEMPT" id="XML_IO_NETWORK_ATTEMPT">XML_IO_NETWORK_ATTEMPT</a> = 1543 : 1543
+ <a name="XML_IO_ENCODER" id="XML_IO_ENCODER">XML_IO_ENCODER</a> = 1544 : 1544
+ <a name="XML_IO_FLUSH" id="XML_IO_FLUSH">XML_IO_FLUSH</a> = 1545 : 1545
+ <a name="XML_IO_WRITE" id="XML_IO_WRITE">XML_IO_WRITE</a> = 1546 : 1546
+ <a name="XML_IO_NO_INPUT" id="XML_IO_NO_INPUT">XML_IO_NO_INPUT</a> = 1547 : 1547
+ <a name="XML_IO_BUFFER_FULL" id="XML_IO_BUFFER_FULL">XML_IO_BUFFER_FULL</a> = 1548 : 1548
+ <a name="XML_IO_LOAD_ERROR" id="XML_IO_LOAD_ERROR">XML_IO_LOAD_ERROR</a> = 1549 : 1549
+ <a name="XML_IO_ENOTSOCK" id="XML_IO_ENOTSOCK">XML_IO_ENOTSOCK</a> = 1550 : 1550
+ <a name="XML_IO_EISCONN" id="XML_IO_EISCONN">XML_IO_EISCONN</a> = 1551 : 1551
+ <a name="XML_IO_ECONNREFUSED" id="XML_IO_ECONNREFUSED">XML_IO_ECONNREFUSED</a> = 1552 : 1552
+ <a name="XML_IO_ENETUNREACH" id="XML_IO_ENETUNREACH">XML_IO_ENETUNREACH</a> = 1553 : 1553
+ <a name="XML_IO_EADDRINUSE" id="XML_IO_EADDRINUSE">XML_IO_EADDRINUSE</a> = 1554 : 1554
+ <a name="XML_IO_EALREADY" id="XML_IO_EALREADY">XML_IO_EALREADY</a> = 1555 : 1555
+ <a name="XML_IO_EAFNOSUPPORT" id="XML_IO_EAFNOSUPPORT">XML_IO_EAFNOSUPPORT</a> = 1556 : 1556
+ <a name="XML_XINCLUDE_RECURSION" id="XML_XINCLUDE_RECURSION">XML_XINCLUDE_RECURSION</a> = 1600
+ <a name="XML_XINCLUDE_PARSE_VALUE" id="XML_XINCLUDE_PARSE_VALUE">XML_XINCLUDE_PARSE_VALUE</a> = 1601 : 1601
+ <a name="XML_XINCLUDE_ENTITY_DEF_MISMATCH" id="XML_XINCLUDE_ENTITY_DEF_MISMATCH">XML_XINCLUDE_ENTITY_DEF_MISMATCH</a> = 1602 : 1602
+ <a name="XML_XINCLUDE_NO_HREF" id="XML_XINCLUDE_NO_HREF">XML_XINCLUDE_NO_HREF</a> = 1603 : 1603
+ <a name="XML_XINCLUDE_NO_FALLBACK" id="XML_XINCLUDE_NO_FALLBACK">XML_XINCLUDE_NO_FALLBACK</a> = 1604 : 1604
+ <a name="XML_XINCLUDE_HREF_URI" id="XML_XINCLUDE_HREF_URI">XML_XINCLUDE_HREF_URI</a> = 1605 : 1605
+ <a name="XML_XINCLUDE_TEXT_FRAGMENT" id="XML_XINCLUDE_TEXT_FRAGMENT">XML_XINCLUDE_TEXT_FRAGMENT</a> = 1606 : 1606
+ <a name="XML_XINCLUDE_TEXT_DOCUMENT" id="XML_XINCLUDE_TEXT_DOCUMENT">XML_XINCLUDE_TEXT_DOCUMENT</a> = 1607 : 1607
+ <a name="XML_XINCLUDE_INVALID_CHAR" id="XML_XINCLUDE_INVALID_CHAR">XML_XINCLUDE_INVALID_CHAR</a> = 1608 : 1608
+ <a name="XML_XINCLUDE_BUILD_FAILED" id="XML_XINCLUDE_BUILD_FAILED">XML_XINCLUDE_BUILD_FAILED</a> = 1609 : 1609
+ <a name="XML_XINCLUDE_UNKNOWN_ENCODING" id="XML_XINCLUDE_UNKNOWN_ENCODING">XML_XINCLUDE_UNKNOWN_ENCODING</a> = 1610 : 1610
+ <a name="XML_XINCLUDE_MULTIPLE_ROOT" id="XML_XINCLUDE_MULTIPLE_ROOT">XML_XINCLUDE_MULTIPLE_ROOT</a> = 1611 : 1611
+ <a name="XML_XINCLUDE_XPTR_FAILED" id="XML_XINCLUDE_XPTR_FAILED">XML_XINCLUDE_XPTR_FAILED</a> = 1612 : 1612
+ <a name="XML_XINCLUDE_XPTR_RESULT" id="XML_XINCLUDE_XPTR_RESULT">XML_XINCLUDE_XPTR_RESULT</a> = 1613 : 1613
+ <a name="XML_XINCLUDE_INCLUDE_IN_INCLUDE" id="XML_XINCLUDE_INCLUDE_IN_INCLUDE">XML_XINCLUDE_INCLUDE_IN_INCLUDE</a> = 1614 : 1614
+ <a name="XML_XINCLUDE_FALLBACKS_IN_INCLUDE" id="XML_XINCLUDE_FALLBACKS_IN_INCLUDE">XML_XINCLUDE_FALLBACKS_IN_INCLUDE</a> = 1615 : 1615
+ <a name="XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE" id="XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE">XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE</a> = 1616 : 1616
+ <a name="XML_XINCLUDE_DEPRECATED_NS" id="XML_XINCLUDE_DEPRECATED_NS">XML_XINCLUDE_DEPRECATED_NS</a> = 1617 : 1617
+ <a name="XML_XINCLUDE_FRAGMENT_ID" id="XML_XINCLUDE_FRAGMENT_ID">XML_XINCLUDE_FRAGMENT_ID</a> = 1618 : 1618
+ <a name="XML_CATALOG_MISSING_ATTR" id="XML_CATALOG_MISSING_ATTR">XML_CATALOG_MISSING_ATTR</a> = 1650
+ <a name="XML_CATALOG_ENTRY_BROKEN" id="XML_CATALOG_ENTRY_BROKEN">XML_CATALOG_ENTRY_BROKEN</a> = 1651 : 1651
+ <a name="XML_CATALOG_PREFER_VALUE" id="XML_CATALOG_PREFER_VALUE">XML_CATALOG_PREFER_VALUE</a> = 1652 : 1652
+ <a name="XML_CATALOG_NOT_CATALOG" id="XML_CATALOG_NOT_CATALOG">XML_CATALOG_NOT_CATALOG</a> = 1653 : 1653
+ <a name="XML_CATALOG_RECURSION" id="XML_CATALOG_RECURSION">XML_CATALOG_RECURSION</a> = 1654 : 1654
+ <a name="XML_SCHEMAP_PREFIX_UNDEFINED" id="XML_SCHEMAP_PREFIX_UNDEFINED">XML_SCHEMAP_PREFIX_UNDEFINED</a> = 1700
+ <a name="XML_SCHEMAP_ATTRFORMDEFAULT_VALUE" id="XML_SCHEMAP_ATTRFORMDEFAULT_VALUE">XML_SCHEMAP_ATTRFORMDEFAULT_VALUE</a> = 1701 : 1701
+ <a name="XML_SCHEMAP_ATTRGRP_NONAME_NOREF" id="XML_SCHEMAP_ATTRGRP_NONAME_NOREF">XML_SCHEMAP_ATTRGRP_NONAME_NOREF</a> = 1702 : 1702
+ <a name="XML_SCHEMAP_ATTR_NONAME_NOREF" id="XML_SCHEMAP_ATTR_NONAME_NOREF">XML_SCHEMAP_ATTR_NONAME_NOREF</a> = 1703 : 1703
+ <a name="XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF" id="XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF">XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF</a> = 1704 : 1704
+ <a name="XML_SCHEMAP_ELEMFORMDEFAULT_VALUE" id="XML_SCHEMAP_ELEMFORMDEFAULT_VALUE">XML_SCHEMAP_ELEMFORMDEFAULT_VALUE</a> = 1705 : 1705
+ <a name="XML_SCHEMAP_ELEM_NONAME_NOREF" id="XML_SCHEMAP_ELEM_NONAME_NOREF">XML_SCHEMAP_ELEM_NONAME_NOREF</a> = 1706 : 1706
+ <a name="XML_SCHEMAP_EXTENSION_NO_BASE" id="XML_SCHEMAP_EXTENSION_NO_BASE">XML_SCHEMAP_EXTENSION_NO_BASE</a> = 1707 : 1707
+ <a name="XML_SCHEMAP_FACET_NO_VALUE" id="XML_SCHEMAP_FACET_NO_VALUE">XML_SCHEMAP_FACET_NO_VALUE</a> = 1708 : 1708
+ <a name="XML_SCHEMAP_FAILED_BUILD_IMPORT" id="XML_SCHEMAP_FAILED_BUILD_IMPORT">XML_SCHEMAP_FAILED_BUILD_IMPORT</a> = 1709 : 1709
+ <a name="XML_SCHEMAP_GROUP_NONAME_NOREF" id="XML_SCHEMAP_GROUP_NONAME_NOREF">XML_SCHEMAP_GROUP_NONAME_NOREF</a> = 1710 : 1710
+ <a name="XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI" id="XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI">XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI</a> = 1711 : 1711
+ <a name="XML_SCHEMAP_IMPORT_REDEFINE_NSNAME" id="XML_SCHEMAP_IMPORT_REDEFINE_NSNAME">XML_SCHEMAP_IMPORT_REDEFINE_NSNAME</a> = 1712 : 1712
+ <a name="XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI" id="XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI">XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI</a> = 1713 : 1713
+ <a name="XML_SCHEMAP_INVALID_BOOLEAN" id="XML_SCHEMAP_INVALID_BOOLEAN">XML_SCHEMAP_INVALID_BOOLEAN</a> = 1714 : 1714
+ <a name="XML_SCHEMAP_INVALID_ENUM" id="XML_SCHEMAP_INVALID_ENUM">XML_SCHEMAP_INVALID_ENUM</a> = 1715 : 1715
+ <a name="XML_SCHEMAP_INVALID_FACET" id="XML_SCHEMAP_INVALID_FACET">XML_SCHEMAP_INVALID_FACET</a> = 1716 : 1716
+ <a name="XML_SCHEMAP_INVALID_FACET_VALUE" id="XML_SCHEMAP_INVALID_FACET_VALUE">XML_SCHEMAP_INVALID_FACET_VALUE</a> = 1717 : 1717
+ <a name="XML_SCHEMAP_INVALID_MAXOCCURS" id="XML_SCHEMAP_INVALID_MAXOCCURS">XML_SCHEMAP_INVALID_MAXOCCURS</a> = 1718 : 1718
+ <a name="XML_SCHEMAP_INVALID_MINOCCURS" id="XML_SCHEMAP_INVALID_MINOCCURS">XML_SCHEMAP_INVALID_MINOCCURS</a> = 1719 : 1719
+ <a name="XML_SCHEMAP_INVALID_REF_AND_SUBTYPE" id="XML_SCHEMAP_INVALID_REF_AND_SUBTYPE">XML_SCHEMAP_INVALID_REF_AND_SUBTYPE</a> = 1720 : 1720
+ <a name="XML_SCHEMAP_INVALID_WHITE_SPACE" id="XML_SCHEMAP_INVALID_WHITE_SPACE">XML_SCHEMAP_INVALID_WHITE_SPACE</a> = 1721 : 1721
+ <a name="XML_SCHEMAP_NOATTR_NOREF" id="XML_SCHEMAP_NOATTR_NOREF">XML_SCHEMAP_NOATTR_NOREF</a> = 1722 : 1722
+ <a name="XML_SCHEMAP_NOTATION_NO_NAME" id="XML_SCHEMAP_NOTATION_NO_NAME">XML_SCHEMAP_NOTATION_NO_NAME</a> = 1723 : 1723
+ <a name="XML_SCHEMAP_NOTYPE_NOREF" id="XML_SCHEMAP_NOTYPE_NOREF">XML_SCHEMAP_NOTYPE_NOREF</a> = 1724 : 1724
+ <a name="XML_SCHEMAP_REF_AND_SUBTYPE" id="XML_SCHEMAP_REF_AND_SUBTYPE">XML_SCHEMAP_REF_AND_SUBTYPE</a> = 1725 : 1725
+ <a name="XML_SCHEMAP_RESTRICTION_NONAME_NOREF" id="XML_SCHEMAP_RESTRICTION_NONAME_NOREF">XML_SCHEMAP_RESTRICTION_NONAME_NOREF</a> = 1726 : 1726
+ <a name="XML_SCHEMAP_SIMPLETYPE_NONAME" id="XML_SCHEMAP_SIMPLETYPE_NONAME">XML_SCHEMAP_SIMPLETYPE_NONAME</a> = 1727 : 1727
+ <a name="XML_SCHEMAP_TYPE_AND_SUBTYPE" id="XML_SCHEMAP_TYPE_AND_SUBTYPE">XML_SCHEMAP_TYPE_AND_SUBTYPE</a> = 1728 : 1728
+ <a name="XML_SCHEMAP_UNKNOWN_ALL_CHILD" id="XML_SCHEMAP_UNKNOWN_ALL_CHILD">XML_SCHEMAP_UNKNOWN_ALL_CHILD</a> = 1729 : 1729
+ <a name="XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD" id="XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD">XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD</a> = 1730 : 1730
+ <a name="XML_SCHEMAP_UNKNOWN_ATTR_CHILD" id="XML_SCHEMAP_UNKNOWN_ATTR_CHILD">XML_SCHEMAP_UNKNOWN_ATTR_CHILD</a> = 1731 : 1731
+ <a name="XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD" id="XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD">XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD</a> = 1732 : 1732
+ <a name="XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP" id="XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP">XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP</a> = 1733 : 1733
+ <a name="XML_SCHEMAP_UNKNOWN_BASE_TYPE" id="XML_SCHEMAP_UNKNOWN_BASE_TYPE">XML_SCHEMAP_UNKNOWN_BASE_TYPE</a> = 1734 : 1734
+ <a name="XML_SCHEMAP_UNKNOWN_CHOICE_CHILD" id="XML_SCHEMAP_UNKNOWN_CHOICE_CHILD">XML_SCHEMAP_UNKNOWN_CHOICE_CHILD</a> = 1735 : 1735
+ <a name="XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD" id="XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD">XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD</a> = 1736 : 1736
+ <a name="XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD" id="XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD">XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD</a> = 1737 : 1737
+ <a name="XML_SCHEMAP_UNKNOWN_ELEM_CHILD" id="XML_SCHEMAP_UNKNOWN_ELEM_CHILD">XML_SCHEMAP_UNKNOWN_ELEM_CHILD</a> = 1738 : 1738
+ <a name="XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD" id="XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD">XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD</a> = 1739 : 1739
+ <a name="XML_SCHEMAP_UNKNOWN_FACET_CHILD" id="XML_SCHEMAP_UNKNOWN_FACET_CHILD">XML_SCHEMAP_UNKNOWN_FACET_CHILD</a> = 1740 : 1740
+ <a name="XML_SCHEMAP_UNKNOWN_FACET_TYPE" id="XML_SCHEMAP_UNKNOWN_FACET_TYPE">XML_SCHEMAP_UNKNOWN_FACET_TYPE</a> = 1741 : 1741
+ <a name="XML_SCHEMAP_UNKNOWN_GROUP_CHILD" id="XML_SCHEMAP_UNKNOWN_GROUP_CHILD">XML_SCHEMAP_UNKNOWN_GROUP_CHILD</a> = 1742 : 1742
+ <a name="XML_SCHEMAP_UNKNOWN_IMPORT_CHILD" id="XML_SCHEMAP_UNKNOWN_IMPORT_CHILD">XML_SCHEMAP_UNKNOWN_IMPORT_CHILD</a> = 1743 : 1743
+ <a name="XML_SCHEMAP_UNKNOWN_LIST_CHILD" id="XML_SCHEMAP_UNKNOWN_LIST_CHILD">XML_SCHEMAP_UNKNOWN_LIST_CHILD</a> = 1744 : 1744
+ <a name="XML_SCHEMAP_UNKNOWN_NOTATION_CHILD" id="XML_SCHEMAP_UNKNOWN_NOTATION_CHILD">XML_SCHEMAP_UNKNOWN_NOTATION_CHILD</a> = 1745 : 1745
+ <a name="XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD" id="XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD">XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD</a> = 1746 : 1746
+ <a name="XML_SCHEMAP_UNKNOWN_REF" id="XML_SCHEMAP_UNKNOWN_REF">XML_SCHEMAP_UNKNOWN_REF</a> = 1747 : 1747
+ <a name="XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD" id="XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD">XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD</a> = 1748 : 1748
+ <a name="XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD" id="XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD">XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD</a> = 1749 : 1749
+ <a name="XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD" id="XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD">XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD</a> = 1750 : 1750
+ <a name="XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD" id="XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD">XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD</a> = 1751 : 1751
+ <a name="XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD" id="XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD">XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD</a> = 1752 : 1752
+ <a name="XML_SCHEMAP_UNKNOWN_TYPE" id="XML_SCHEMAP_UNKNOWN_TYPE">XML_SCHEMAP_UNKNOWN_TYPE</a> = 1753 : 1753
+ <a name="XML_SCHEMAP_UNKNOWN_UNION_CHILD" id="XML_SCHEMAP_UNKNOWN_UNION_CHILD">XML_SCHEMAP_UNKNOWN_UNION_CHILD</a> = 1754 : 1754
+ <a name="XML_SCHEMAP_ELEM_DEFAULT_FIXED" id="XML_SCHEMAP_ELEM_DEFAULT_FIXED">XML_SCHEMAP_ELEM_DEFAULT_FIXED</a> = 1755 : 1755
+ <a name="XML_SCHEMAP_REGEXP_INVALID" id="XML_SCHEMAP_REGEXP_INVALID">XML_SCHEMAP_REGEXP_INVALID</a> = 1756 : 1756
+ <a name="XML_SCHEMAP_FAILED_LOAD" id="XML_SCHEMAP_FAILED_LOAD">XML_SCHEMAP_FAILED_LOAD</a> = 1757 : 1756
+ <a name="XML_SCHEMAP_NOTHING_TO_PARSE" id="XML_SCHEMAP_NOTHING_TO_PARSE">XML_SCHEMAP_NOTHING_TO_PARSE</a> = 1758 : 1757
+ <a name="XML_SCHEMAP_NOROOT" id="XML_SCHEMAP_NOROOT">XML_SCHEMAP_NOROOT</a> = 1759 : 1758
+ <a name="XML_SCHEMAP_REDEFINED_GROUP" id="XML_SCHEMAP_REDEFINED_GROUP">XML_SCHEMAP_REDEFINED_GROUP</a> = 1760 : 1759
+ <a name="XML_SCHEMAP_REDEFINED_TYPE" id="XML_SCHEMAP_REDEFINED_TYPE">XML_SCHEMAP_REDEFINED_TYPE</a> = 1761 : 1760
+ <a name="XML_SCHEMAP_REDEFINED_ELEMENT" id="XML_SCHEMAP_REDEFINED_ELEMENT">XML_SCHEMAP_REDEFINED_ELEMENT</a> = 1762 : 1761
+ <a name="XML_SCHEMAP_REDEFINED_ATTRGROUP" id="XML_SCHEMAP_REDEFINED_ATTRGROUP">XML_SCHEMAP_REDEFINED_ATTRGROUP</a> = 1763 : 1762
+ <a name="XML_SCHEMAP_REDEFINED_ATTR" id="XML_SCHEMAP_REDEFINED_ATTR">XML_SCHEMAP_REDEFINED_ATTR</a> = 1764 : 1763
+ <a name="XML_SCHEMAP_REDEFINED_NOTATION" id="XML_SCHEMAP_REDEFINED_NOTATION">XML_SCHEMAP_REDEFINED_NOTATION</a> = 1765 : 1764
+ <a name="XML_SCHEMAP_FAILED_PARSE" id="XML_SCHEMAP_FAILED_PARSE">XML_SCHEMAP_FAILED_PARSE</a> = 1766 : 1765
+ <a name="XML_SCHEMAP_UNKNOWN_PREFIX" id="XML_SCHEMAP_UNKNOWN_PREFIX">XML_SCHEMAP_UNKNOWN_PREFIX</a> = 1767 : 1766
+ <a name="XML_SCHEMAP_DEF_AND_PREFIX" id="XML_SCHEMAP_DEF_AND_PREFIX">XML_SCHEMAP_DEF_AND_PREFIX</a> = 1768 : 1767
+ <a name="XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD" id="XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD">XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD</a> = 1769 : 1768
+ <a name="XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI" id="XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI">XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI</a> = 1770 : 1769
+ <a name="XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI" id="XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI">XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI</a> = 1771 : 1770
+ <a name="XML_SCHEMAP_NOT_SCHEMA" id="XML_SCHEMAP_NOT_SCHEMA">XML_SCHEMAP_NOT_SCHEMA</a> = 1772 : 1771
+ <a name="XML_SCHEMAV_NOROOT" id="XML_SCHEMAV_NOROOT">XML_SCHEMAV_NOROOT</a> = 1800
+ <a name="XML_SCHEMAV_UNDECLAREDELEM" id="XML_SCHEMAV_UNDECLAREDELEM">XML_SCHEMAV_UNDECLAREDELEM</a> = 1801 : 1801
+ <a name="XML_SCHEMAV_NOTTOPLEVEL" id="XML_SCHEMAV_NOTTOPLEVEL">XML_SCHEMAV_NOTTOPLEVEL</a> = 1802 : 1802
+ <a name="XML_SCHEMAV_MISSING" id="XML_SCHEMAV_MISSING">XML_SCHEMAV_MISSING</a> = 1803 : 1803
+ <a name="XML_SCHEMAV_WRONGELEM" id="XML_SCHEMAV_WRONGELEM">XML_SCHEMAV_WRONGELEM</a> = 1804 : 1804
+ <a name="XML_SCHEMAV_NOTYPE" id="XML_SCHEMAV_NOTYPE">XML_SCHEMAV_NOTYPE</a> = 1805 : 1805
+ <a name="XML_SCHEMAV_NOROLLBACK" id="XML_SCHEMAV_NOROLLBACK">XML_SCHEMAV_NOROLLBACK</a> = 1806 : 1806
+ <a name="XML_SCHEMAV_ISABSTRACT" id="XML_SCHEMAV_ISABSTRACT">XML_SCHEMAV_ISABSTRACT</a> = 1807 : 1807
+ <a name="XML_SCHEMAV_NOTEMPTY" id="XML_SCHEMAV_NOTEMPTY">XML_SCHEMAV_NOTEMPTY</a> = 1808 : 1808
+ <a name="XML_SCHEMAV_ELEMCONT" id="XML_SCHEMAV_ELEMCONT">XML_SCHEMAV_ELEMCONT</a> = 1809 : 1809
+ <a name="XML_SCHEMAV_HAVEDEFAULT" id="XML_SCHEMAV_HAVEDEFAULT">XML_SCHEMAV_HAVEDEFAULT</a> = 1810 : 1810
+ <a name="XML_SCHEMAV_NOTNILLABLE" id="XML_SCHEMAV_NOTNILLABLE">XML_SCHEMAV_NOTNILLABLE</a> = 1811 : 1811
+ <a name="XML_SCHEMAV_EXTRACONTENT" id="XML_SCHEMAV_EXTRACONTENT">XML_SCHEMAV_EXTRACONTENT</a> = 1812 : 1812
+ <a name="XML_SCHEMAV_INVALIDATTR" id="XML_SCHEMAV_INVALIDATTR">XML_SCHEMAV_INVALIDATTR</a> = 1813 : 1813
+ <a name="XML_SCHEMAV_INVALIDELEM" id="XML_SCHEMAV_INVALIDELEM">XML_SCHEMAV_INVALIDELEM</a> = 1814 : 1814
+ <a name="XML_SCHEMAV_NOTDETERMINIST" id="XML_SCHEMAV_NOTDETERMINIST">XML_SCHEMAV_NOTDETERMINIST</a> = 1815 : 1815
+ <a name="XML_SCHEMAV_CONSTRUCT" id="XML_SCHEMAV_CONSTRUCT">XML_SCHEMAV_CONSTRUCT</a> = 1816 : 1816
+ <a name="XML_SCHEMAV_INTERNAL" id="XML_SCHEMAV_INTERNAL">XML_SCHEMAV_INTERNAL</a> = 1817 : 1817
+ <a name="XML_SCHEMAV_NOTSIMPLE" id="XML_SCHEMAV_NOTSIMPLE">XML_SCHEMAV_NOTSIMPLE</a> = 1818 : 1818
+ <a name="XML_SCHEMAV_ATTRUNKNOWN" id="XML_SCHEMAV_ATTRUNKNOWN">XML_SCHEMAV_ATTRUNKNOWN</a> = 1819 : 1819
+ <a name="XML_SCHEMAV_ATTRINVALID" id="XML_SCHEMAV_ATTRINVALID">XML_SCHEMAV_ATTRINVALID</a> = 1820 : 1820
+ <a name="XML_SCHEMAV_VALUE" id="XML_SCHEMAV_VALUE">XML_SCHEMAV_VALUE</a> = 1821 : 1821
+ <a name="XML_SCHEMAV_FACET" id="XML_SCHEMAV_FACET">XML_SCHEMAV_FACET</a> = 1822 : 1822
+ <a name="XML_XPTR_UNKNOWN_SCHEME" id="XML_XPTR_UNKNOWN_SCHEME">XML_XPTR_UNKNOWN_SCHEME</a> = 1900
+ <a name="XML_XPTR_CHILDSEQ_START" id="XML_XPTR_CHILDSEQ_START">XML_XPTR_CHILDSEQ_START</a> = 1901 : 1901
+ <a name="XML_XPTR_EVAL_FAILED" id="XML_XPTR_EVAL_FAILED">XML_XPTR_EVAL_FAILED</a> = 1902 : 1902
+ <a name="XML_XPTR_EXTRA_OBJECTS" id="XML_XPTR_EXTRA_OBJECTS">XML_XPTR_EXTRA_OBJECTS</a> = 1903 : 1903
+ <a name="XML_C14N_CREATE_CTXT" id="XML_C14N_CREATE_CTXT">XML_C14N_CREATE_CTXT</a> = 1950
+ <a name="XML_C14N_REQUIRES_UTF8" id="XML_C14N_REQUIRES_UTF8">XML_C14N_REQUIRES_UTF8</a> = 1951 : 1951
+ <a name="XML_C14N_CREATE_STACK" id="XML_C14N_CREATE_STACK">XML_C14N_CREATE_STACK</a> = 1952 : 1952
+ <a name="XML_C14N_INVALID_NODE" id="XML_C14N_INVALID_NODE">XML_C14N_INVALID_NODE</a> = 1953 : 1953
+ <a name="XML_FTP_PASV_ANSWER" id="XML_FTP_PASV_ANSWER">XML_FTP_PASV_ANSWER</a> = 2000
+ <a name="XML_FTP_EPSV_ANSWER" id="XML_FTP_EPSV_ANSWER">XML_FTP_EPSV_ANSWER</a> = 2001 : 2001
+ <a name="XML_FTP_ACCNT" id="XML_FTP_ACCNT">XML_FTP_ACCNT</a> = 2002 : 2002
+ <a name="XML_HTTP_URL_SYNTAX" id="XML_HTTP_URL_SYNTAX">XML_HTTP_URL_SYNTAX</a> = 2020
+ <a name="XML_HTTP_USE_IP" id="XML_HTTP_USE_IP">XML_HTTP_USE_IP</a> = 2021 : 2021
+ <a name="XML_HTTP_UNKNOWN_HOST" id="XML_HTTP_UNKNOWN_HOST">XML_HTTP_UNKNOWN_HOST</a> = 2022 : 2022
+}
+</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>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the handler</td></tr></tbody></table></div><h3><a name="xmlCopyError" id="xmlCopyError"></a>Function: xmlCopyError</h3><pre class="programlisting">int xmlCopyError (<a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> from, <br /> <a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> to)<br />
+</pre><p>Save the original error to the new place.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>from</tt></i>:</span></td><td>a source error</td></tr><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>a target error</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlCtxtGetLastError" id="xmlCtxtGetLastError"></a>Function: xmlCtxtGetLastError</h3><pre class="programlisting"><a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> xmlCtxtGetLastError (void * ctx)<br />
+</pre><p>Get the last parsing error registered.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if no error occured or a pointer to the error</td></tr></tbody></table></div><h3><a name="xmlCtxtResetLastError" id="xmlCtxtResetLastError"></a>Function: xmlCtxtResetLastError</h3><pre class="programlisting">void xmlCtxtResetLastError (void * ctx)<br />
+</pre><p>Cleanup the last global error registered. For parsing error this does not change the well-formedness result.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr></tbody></table></div><h3><a name="xmlGenericErrorFunc" id="xmlGenericErrorFunc"></a>Function type: xmlGenericErrorFunc</h3><pre class="programlisting">Function type: xmlGenericErrorFunc
+void xmlGenericErrorFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p>Signature of the function to use when there is an error and no parsing or validity context available .</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>a parsing context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>the extra arguments of the varags to format the message</td></tr></tbody></table></div><br />
+<h3><a name="xmlGetLastError" id="xmlGetLastError"></a>Function: xmlGetLastError</h3><pre class="programlisting"><a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> xmlGetLastError (void)<br />
+</pre><p>Get the last global error registered. This is per thread if compiled with thread support.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if no error occured or a pointer to the error</td></tr></tbody></table></div><h3><a name="xmlParserError" id="xmlParserError"></a>Function: xmlParserError</h3><pre class="programlisting">void xmlParserError (void * ctx, <br /> const char * msg, <br /> ... ...)<br />
+</pre><p>Display and format an error messages, gives file, line, position and extra parameters.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message to display/transmit</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the message display</td></tr></tbody></table></div><h3><a name="xmlParserPrintFileContext" id="xmlParserPrintFileContext"></a>Function: xmlParserPrintFileContext</h3><pre class="programlisting">void xmlParserPrintFileContext (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input)<br />
+</pre><p>Displays current context within the input content for error tracking</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input</td></tr></tbody></table></div><h3><a name="xmlParserPrintFileInfo" id="xmlParserPrintFileInfo"></a>Function: xmlParserPrintFileInfo</h3><pre class="programlisting">void xmlParserPrintFileInfo (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input)<br />
+</pre><p>Displays the associated file and line informations for the current input</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input</td></tr></tbody></table></div><h3><a name="xmlParserValidityError" id="xmlParserValidityError"></a>Function: xmlParserValidityError</h3><pre class="programlisting">void xmlParserValidityError (void * ctx, <br /> const char * msg, <br /> ... ...)<br />
+</pre><p>Display and format an validity error messages, gives file, line, position and extra parameters.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message to display/transmit</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the message display</td></tr></tbody></table></div><h3><a name="xmlParserValidityWarning" id="xmlParserValidityWarning"></a>Function: xmlParserValidityWarning</h3><pre class="programlisting">void xmlParserValidityWarning (void * ctx, <br /> const char * msg, <br /> ... ...)<br />
+</pre><p>Display and format a validity warning messages, gives file, line, position and extra parameters.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message to display/transmit</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the message display</td></tr></tbody></table></div><h3><a name="xmlParserWarning" id="xmlParserWarning"></a>Function: xmlParserWarning</h3><pre class="programlisting">void xmlParserWarning (void * ctx, <br /> const char * msg, <br /> ... ...)<br />
+</pre><p>Display and format a warning messages, gives file, line, position and extra parameters.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message to display/transmit</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the message display</td></tr></tbody></table></div><h3><a name="xmlResetError" id="xmlResetError"></a>Function: xmlResetError</h3><pre class="programlisting">void xmlResetError (<a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> err)<br />
+</pre><p>Cleanup the error.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>pointer to the error.</td></tr></tbody></table></div><h3><a name="xmlResetLastError" id="xmlResetLastError"></a>Function: xmlResetLastError</h3><pre class="programlisting">void xmlResetLastError (void)<br />
+</pre><p>Cleanup the last global error registered. For parsing error this does not change the well-formedness result.</p>
+<h3><a name="xmlSetGenericErrorFunc" id="xmlSetGenericErrorFunc"></a>Function: xmlSetGenericErrorFunc</h3><pre class="programlisting">void xmlSetGenericErrorFunc (void * ctx, <br /> <a href="libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> handler)<br />
+</pre><p>Function to reset the handler and the error context for out of context error messages. This simply means that @handler will be called for subsequent error messages while not parsing nor validating. And @ctx will be passed as first argument to @handler One can simply force messages to be emitted to another FILE * than stderr by setting @ctx to this file handle and @handler to NULL.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the new error handling context</td></tr><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the new handler function</td></tr></tbody></table></div><h3><a name="xmlSetStructuredErrorFunc" id="xmlSetStructuredErrorFunc"></a>Function: xmlSetStructuredErrorFunc</h3><pre class="programlisting">void xmlSetStructuredErrorFunc (void * ctx, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> handler)<br />
+</pre><p>Function to reset the handler and the error context for out of context structured error messages. This simply means that @handler will be called for subsequent error messages while not parsing nor validating. And @ctx will be passed as first argument to @handler</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the new error handling context</td></tr><tr><td><span class="term"><i><tt>handler</tt></i>:</span></td><td>the new handler function</td></tr></tbody></table></div><h3><a name="xmlStructuredErrorFunc" id="xmlStructuredErrorFunc"></a>Function type: xmlStructuredErrorFunc</h3><pre class="programlisting">Function type: xmlStructuredErrorFunc
+void xmlStructuredErrorFunc (void * userData, <br /> <a href="libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> error)
+</pre><p>Signature of the function to use when there is an error and the module handles the new error reporting mechanism.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>user provided data for the error callback</td></tr><tr><td><span class="term"><i><tt>error</tt></i>:</span></td><td>the error being raised.</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-xmlexports.html b/doc/html/libxml-xmlexports.html
new file mode 100644
index 0000000..c534f61
--- /dev/null
+++ b/doc/html/libxml-xmlexports.html
@@ -0,0 +1,19 @@
+<?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 xmlexports from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>
+<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="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>
+<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-xmlmemory.html b/doc/html/libxml-xmlmemory.html
new file mode 100644
index 0000000..22f0956
--- /dev/null
+++ b/doc/html/libxml-xmlmemory.html
@@ -0,0 +1,101 @@
+<?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 xmlmemory from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlmemory 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlexports.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlexports.html">xmlexports</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-xmlreader.html">xmlreader</a></th><td><a accesskey="n" href="libxml-xmlreader.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>provides interfaces for the memory allocator, including debugging capabilities. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#DEBUG_MEMORY">DEBUG_MEMORY</a></pre><pre class="programlisting">Variable <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> <a name="xmlMalloc" id="xmlMalloc"></a>xmlMalloc
+
+</pre><pre class="programlisting">Variable <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> <a name="xmlMallocAtomic" id="xmlMallocAtomic"></a>xmlMallocAtomic
+
+</pre><pre class="programlisting">Variable <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> <a name="xmlMemStrdup" id="xmlMemStrdup"></a>xmlMemStrdup
+
+</pre><pre class="programlisting">Variable <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> <a name="xmlRealloc" id="xmlRealloc"></a>xmlRealloc
+
+</pre><pre class="programlisting">void <a href="#xmlCleanupMemory">xmlCleanupMemory</a> (void)</pre>
+<pre class="programlisting">Function type: <a href="#xmlFreeFunc">xmlFreeFunc</a>
+void <a href="#xmlFreeFunc">xmlFreeFunc</a> (void * mem)
+</pre>
+<pre class="programlisting">int <a href="#xmlGcMemGet">xmlGcMemGet</a> (<a href="libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> * freeFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> * mallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> * mallocAtomicFunc, <br /> <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> * reallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> * strdupFunc)</pre>
+<pre class="programlisting">int <a href="#xmlGcMemSetup">xmlGcMemSetup</a> (<a href="libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> freeFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> mallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> mallocAtomicFunc, <br /> <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> reallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> strdupFunc)</pre>
+<pre class="programlisting">int <a href="#xmlInitMemory">xmlInitMemory</a> (void)</pre>
+<pre class="programlisting">void * <a href="#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a> (size_t size, <br /> const char * file, <br /> int line)</pre>
+<pre class="programlisting">Function type: <a href="#xmlMallocFunc">xmlMallocFunc</a>
+void * <a href="#xmlMallocFunc">xmlMallocFunc</a> (size_t size)
+</pre>
+<pre class="programlisting">void * <a href="#xmlMallocLoc">xmlMallocLoc</a> (size_t size, <br /> const char * file, <br /> int line)</pre>
+<pre class="programlisting">void <a href="#xmlMemDisplay">xmlMemDisplay</a> (FILE * fp)</pre>
+<pre class="programlisting">void <a href="#xmlMemFree">xmlMemFree</a> (void * ptr)</pre>
+<pre class="programlisting">int <a href="#xmlMemGet">xmlMemGet</a> (<a href="libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> * freeFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> * mallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> * reallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> * strdupFunc)</pre>
+<pre class="programlisting">void * <a href="#xmlMemMalloc">xmlMemMalloc</a> (size_t size)</pre>
+<pre class="programlisting">void * <a href="#xmlMemRealloc">xmlMemRealloc</a> (void * ptr, <br /> size_t size)</pre>
+<pre class="programlisting">int <a href="#xmlMemSetup">xmlMemSetup</a> (<a href="libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> freeFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> mallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> reallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> strdupFunc)</pre>
+<pre class="programlisting">void <a href="#xmlMemShow">xmlMemShow</a> (FILE * fp, <br /> int nr)</pre>
+<pre class="programlisting">char * <a href="#xmlMemStrdupLoc">xmlMemStrdupLoc</a> (const char * str, <br /> const char * file, <br /> int line)</pre>
+<pre class="programlisting">int <a href="#xmlMemUsed">xmlMemUsed</a> (void)</pre>
+<pre class="programlisting">void <a href="#xmlMemoryDump">xmlMemoryDump</a> (void)</pre>
+<pre class="programlisting">char * <a href="#xmlMemoryStrdup">xmlMemoryStrdup</a> (const char * str)</pre>
+<pre class="programlisting">Function type: <a href="#xmlReallocFunc">xmlReallocFunc</a>
+void * <a href="#xmlReallocFunc">xmlReallocFunc</a> (void * mem, <br /> size_t size)
+</pre>
+<pre class="programlisting">void * <a href="#xmlReallocLoc">xmlReallocLoc</a> (void * ptr, <br /> size_t size, <br /> const char * file, <br /> int line)</pre>
+<pre class="programlisting">Function type: <a href="#xmlStrdupFunc">xmlStrdupFunc</a>
+char * <a href="#xmlStrdupFunc">xmlStrdupFunc</a> (const char * str)
+</pre>
+<h2>Description</h2>
+<h3><a name="DEBUG_MEMORY" id="DEBUG_MEMORY"></a>Macro: DEBUG_MEMORY</h3><pre>#define DEBUG_MEMORY</pre><p><a href="libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a> replaces the allocator with a collect and debug shell to the libc allocator. <a href="libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a> should only be activated when debugging libxml i.e. if libxml has been configured with --with-debug-mem too. #define DEBUG_MEMORY_FREED #define <a href="libxml-xmlversion.html#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a></p>
+<h3><a name="xmlCleanupMemory" id="xmlCleanupMemory"></a>Function: xmlCleanupMemory</h3><pre class="programlisting">void xmlCleanupMemory (void)<br />
+</pre><p>Free up all the memory associated with memorys</p>
+<h3><a name="xmlFreeFunc" id="xmlFreeFunc"></a>Function type: xmlFreeFunc</h3><pre class="programlisting">Function type: xmlFreeFunc
+void xmlFreeFunc (void * mem)
+</pre><p>Signature for a free() implementation.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>mem</tt></i>:</span></td><td>an already allocated block of memory</td></tr></tbody></table></div><br />
+<h3><a name="xmlGcMemGet" id="xmlGcMemGet"></a>Function: xmlGcMemGet</h3><pre class="programlisting">int xmlGcMemGet (<a href="libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> * freeFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> * mallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> * mallocAtomicFunc, <br /> <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> * reallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> * strdupFunc)<br />
+</pre><p>Provides the memory access functions set currently in use The mallocAtomicFunc is specialized for atomic block allocations (i.e. of areas useful for garbage collected memory allocators</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>freeFunc</tt></i>:</span></td><td>place to save the free() function in use</td></tr><tr><td><span class="term"><i><tt>mallocFunc</tt></i>:</span></td><td>place to save the malloc() function in use</td></tr><tr><td><span class="term"><i><tt>mallocAtomicFunc</tt></i>:</span></td><td>place to save the atomic malloc() function in use</td></tr><tr><td><span class="term"><i><tt>reallocFunc</tt></i>:</span></td><td>place to save the realloc() function in use</td></tr><tr><td><span class="term"><i><tt>strdupFunc</tt></i>:</span></td><td>place to save the strdup() function in use</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success</td></tr></tbody></table></div><h3><a name="xmlGcMemSetup" id="xmlGcMemSetup"></a>Function: xmlGcMemSetup</h3><pre class="programlisting">int xmlGcMemSetup (<a href="libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> freeFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> mallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> mallocAtomicFunc, <br /> <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> reallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> strdupFunc)<br />
+</pre><p>Override the default memory access functions with a new set This has to be called before any other libxml routines ! The mallocAtomicFunc is specialized for atomic block allocations (i.e. of areas useful for garbage collected memory allocators Should this be blocked if there was already some allocations done ?</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>freeFunc</tt></i>:</span></td><td>the free() function to use</td></tr><tr><td><span class="term"><i><tt>mallocFunc</tt></i>:</span></td><td>the malloc() function to use</td></tr><tr><td><span class="term"><i><tt>mallocAtomicFunc</tt></i>:</span></td><td>the malloc() function to use for atomic allocations</td></tr><tr><td><span class="term"><i><tt>reallocFunc</tt></i>:</span></td><td>the realloc() function to use</td></tr><tr><td><span class="term"><i><tt>strdupFunc</tt></i>:</span></td><td>the strdup() function to use</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success</td></tr></tbody></table></div><h3><a name="xmlInitMemory" id="xmlInitMemory"></a>Function: xmlInitMemory</h3><pre class="programlisting">int xmlInitMemory (void)<br />
+</pre><p>Initialize the memory layer.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success</td></tr></tbody></table></div><h3><a name="xmlMallocAtomicLoc" id="xmlMallocAtomicLoc"></a>Function: xmlMallocAtomicLoc</h3><pre class="programlisting">void * xmlMallocAtomicLoc (size_t size, <br /> const char * file, <br /> int line)<br />
+</pre><p>a malloc() equivalent, with logging of the allocation info.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>an int specifying the size in byte to allocate.</td></tr><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>the file name or NULL</td></tr><tr><td><span class="term"><i><tt>line</tt></i>:</span></td><td>the line number</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the allocated area or NULL in case of lack of memory.</td></tr></tbody></table></div><h3><a name="xmlMallocFunc" id="xmlMallocFunc"></a>Function type: xmlMallocFunc</h3><pre class="programlisting">Function type: xmlMallocFunc
+void * xmlMallocFunc (size_t size)
+</pre><p>Signature for a malloc() implementation.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size requested in bytes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the newly allocated block or NULL in case of error.</td></tr></tbody></table></div><br />
+<h3><a name="xmlMallocLoc" id="xmlMallocLoc"></a>Function: xmlMallocLoc</h3><pre class="programlisting">void * xmlMallocLoc (size_t size, <br /> const char * file, <br /> int line)<br />
+</pre><p>a malloc() equivalent, with logging of the allocation info.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>an int specifying the size in byte to allocate.</td></tr><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>the file name or NULL</td></tr><tr><td><span class="term"><i><tt>line</tt></i>:</span></td><td>the line number</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the allocated area or NULL in case of lack of memory.</td></tr></tbody></table></div><h3><a name="xmlMemDisplay" id="xmlMemDisplay"></a>Function: xmlMemDisplay</h3><pre class="programlisting">void xmlMemDisplay (FILE * fp)<br />
+</pre><p>show in-extenso the memory blocks allocated</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>fp</tt></i>:</span></td><td>a FILE descriptor used as the output file, if NULL, the result is written to the file .memorylist</td></tr></tbody></table></div><h3><a name="xmlMemFree" id="xmlMemFree"></a>Function: xmlMemFree</h3><pre class="programlisting">void xmlMemFree (void * ptr)<br />
+</pre><p>a free() equivalent, with error checking.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ptr</tt></i>:</span></td><td>the memory block pointer</td></tr></tbody></table></div><h3><a name="xmlMemGet" id="xmlMemGet"></a>Function: xmlMemGet</h3><pre class="programlisting">int xmlMemGet (<a href="libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> * freeFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> * mallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> * reallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> * strdupFunc)<br />
+</pre><p>Provides the memory access functions set currently in use</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>freeFunc</tt></i>:</span></td><td>place to save the free() function in use</td></tr><tr><td><span class="term"><i><tt>mallocFunc</tt></i>:</span></td><td>place to save the malloc() function in use</td></tr><tr><td><span class="term"><i><tt>reallocFunc</tt></i>:</span></td><td>place to save the realloc() function in use</td></tr><tr><td><span class="term"><i><tt>strdupFunc</tt></i>:</span></td><td>place to save the strdup() function in use</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success</td></tr></tbody></table></div><h3><a name="xmlMemMalloc" id="xmlMemMalloc"></a>Function: xmlMemMalloc</h3><pre class="programlisting">void * xmlMemMalloc (size_t size)<br />
+</pre><p>a malloc() equivalent, with logging of the allocation info.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>an int specifying the size in byte to allocate.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the allocated area or NULL in case of lack of memory.</td></tr></tbody></table></div><h3><a name="xmlMemRealloc" id="xmlMemRealloc"></a>Function: xmlMemRealloc</h3><pre class="programlisting">void * xmlMemRealloc (void * ptr, <br /> size_t size)<br />
+</pre><p>a realloc() equivalent, with logging of the allocation info.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ptr</tt></i>:</span></td><td>the initial memory block pointer</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>an int specifying the size in byte to allocate.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the allocated area or NULL in case of lack of memory.</td></tr></tbody></table></div><h3><a name="xmlMemSetup" id="xmlMemSetup"></a>Function: xmlMemSetup</h3><pre class="programlisting">int xmlMemSetup (<a href="libxml-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> freeFunc, <br /> <a href="libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> mallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> reallocFunc, <br /> <a href="libxml-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> strdupFunc)<br />
+</pre><p>Override the default memory access functions with a new set This has to be called before any other libxml routines ! Should this be blocked if there was already some allocations done ?</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>freeFunc</tt></i>:</span></td><td>the free() function to use</td></tr><tr><td><span class="term"><i><tt>mallocFunc</tt></i>:</span></td><td>the malloc() function to use</td></tr><tr><td><span class="term"><i><tt>reallocFunc</tt></i>:</span></td><td>the realloc() function to use</td></tr><tr><td><span class="term"><i><tt>strdupFunc</tt></i>:</span></td><td>the strdup() function to use</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success</td></tr></tbody></table></div><h3><a name="xmlMemShow" id="xmlMemShow"></a>Function: xmlMemShow</h3><pre class="programlisting">void xmlMemShow (FILE * fp, <br /> int nr)<br />
+</pre><p>show a show display of the memory allocated, and dump the @nr last allocated areas which were not freed</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>fp</tt></i>:</span></td><td>a FILE descriptor used as the output file</td></tr><tr><td><span class="term"><i><tt>nr</tt></i>:</span></td><td>number of entries to dump</td></tr></tbody></table></div><h3><a name="xmlMemStrdupLoc" id="xmlMemStrdupLoc"></a>Function: xmlMemStrdupLoc</h3><pre class="programlisting">char * xmlMemStrdupLoc (const char * str, <br /> const char * file, <br /> int line)<br />
+</pre><p>a strdup() equivalent, with logging of the allocation info.</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 initial string pointer</td></tr><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>the file name or NULL</td></tr><tr><td><span class="term"><i><tt>line</tt></i>:</span></td><td>the line number</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new string or NULL if allocation error occurred.</td></tr></tbody></table></div><h3><a name="xmlMemUsed" id="xmlMemUsed"></a>Function: xmlMemUsed</h3><pre class="programlisting">int xmlMemUsed (void)<br />
+</pre><p>Provides the amount of memory currently allocated</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an int representing the amount of memory allocated.</td></tr></tbody></table></div><h3><a name="xmlMemoryDump" id="xmlMemoryDump"></a>Function: xmlMemoryDump</h3><pre class="programlisting">void xmlMemoryDump (void)<br />
+</pre><p>Dump in-extenso the memory blocks allocated to the file .memorylist</p>
+<h3><a name="xmlMemoryStrdup" id="xmlMemoryStrdup"></a>Function: xmlMemoryStrdup</h3><pre class="programlisting">char * xmlMemoryStrdup (const char * str)<br />
+</pre><p>a strdup() equivalent, with logging of the allocation info.</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 initial string pointer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new string or NULL if allocation error occurred.</td></tr></tbody></table></div><h3><a name="xmlReallocFunc" id="xmlReallocFunc"></a>Function type: xmlReallocFunc</h3><pre class="programlisting">Function type: xmlReallocFunc
+void * xmlReallocFunc (void * mem, <br /> size_t size)
+</pre><p>Signature for a realloc() implementation.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>mem</tt></i>:</span></td><td>an already allocated block of memory</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the new size requested in bytes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the newly reallocated block or NULL in case of error.</td></tr></tbody></table></div><br />
+<h3><a name="xmlReallocLoc" id="xmlReallocLoc"></a>Function: xmlReallocLoc</h3><pre class="programlisting">void * xmlReallocLoc (void * ptr, <br /> size_t size, <br /> const char * file, <br /> int line)<br />
+</pre><p>a realloc() equivalent, with logging of the allocation info.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ptr</tt></i>:</span></td><td>the initial memory block pointer</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>an int specifying the size in byte to allocate.</td></tr><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>the file name or NULL</td></tr><tr><td><span class="term"><i><tt>line</tt></i>:</span></td><td>the line number</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the allocated area or NULL in case of lack of memory.</td></tr></tbody></table></div><h3><a name="xmlStrdupFunc" id="xmlStrdupFunc"></a>Function type: xmlStrdupFunc</h3><pre class="programlisting">Function type: xmlStrdupFunc
+char * xmlStrdupFunc (const char * str)
+</pre><p>Signature for an strdup() implementation.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>a zero terminated string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the copy of the string or NULL in case of error.</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-xmlreader.html b/doc/html/libxml-xmlreader.html
new file mode 100644
index 0000000..5f98b1c
--- /dev/null
+++ b/doc/html/libxml-xmlreader.html
@@ -0,0 +1,283 @@
+<?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 xmlreader from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlreader 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlmemory.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlmemory.html">xmlmemory</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-xmlregexp.html">xmlregexp</a></th><td><a accesskey="n" href="libxml-xmlregexp.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>API of the XML streaming API based on C# interfaces. </p><h2>Table of Contents</h2><pre class="programlisting">Enum <a href="#xmlParserProperties">xmlParserProperties</a>
+</pre><pre class="programlisting">Enum <a href="#xmlParserSeverities">xmlParserSeverities</a>
+</pre><pre class="programlisting">Enum <a href="#xmlReaderTypes">xmlReaderTypes</a>
+</pre><pre class="programlisting">Structure <a href="#xmlTextReader">xmlTextReader</a><br />struct _xmlTextReader
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef void * <a name="xmlTextReaderLocatorPtr" id="xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlreader.html#xmlTextReader">xmlTextReader</a> * <a name="xmlTextReaderPtr" id="xmlTextReaderPtr">xmlTextReaderPtr</a>
+</pre><pre class="programlisting">void <a href="#xmlFreeTextReader">xmlFreeTextReader</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> <a href="#xmlNewTextReader">xmlNewTextReader</a> (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br /> const char * URI)</pre>
+<pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> <a href="#xmlNewTextReaderFilename">xmlNewTextReaderFilename</a> (const char * URI)</pre>
+<pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> <a href="#xmlReaderForDoc">xmlReaderForDoc</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> <a href="#xmlReaderForFd">xmlReaderForFd</a> (int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> <a href="#xmlReaderForFile">xmlReaderForFile</a> (const char * filename, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> <a href="#xmlReaderForIO">xmlReaderForIO</a> (<a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> <a href="#xmlReaderForMemory">xmlReaderForMemory</a> (const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting">int <a href="#xmlReaderNewDoc">xmlReaderNewDoc</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting">int <a href="#xmlReaderNewFd">xmlReaderNewFd</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting">int <a href="#xmlReaderNewFile">xmlReaderNewFile</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const char * filename, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting">int <a href="#xmlReaderNewIO">xmlReaderNewIO</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting">int <a href="#xmlReaderNewMemory">xmlReaderNewMemory</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting">int <a href="#xmlReaderNewWalker">xmlReaderNewWalker</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> <a href="#xmlReaderWalker">xmlReaderWalker</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderAttributeCount">xmlTextReaderAttributeCount</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderBaseUri">xmlTextReaderBaseUri</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderClose">xmlTextReaderClose</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderConstBaseUri">xmlTextReaderConstBaseUri</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderConstLocalName">xmlTextReaderConstLocalName</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderConstName">xmlTextReaderConstName</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderConstNamespaceUri">xmlTextReaderConstNamespaceUri</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderConstPrefix">xmlTextReaderConstPrefix</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderConstString">xmlTextReaderConstString</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderConstValue">xmlTextReaderConstValue</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderConstXmlLang">xmlTextReaderConstXmlLang</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderDepth">xmlTextReaderDepth</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">Function type: <a href="#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a>
+void <a href="#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a> (void * arg, <br /> const char * msg, <br /> <a href="libxml-xmlreader.html#xmlParserSeverities">xmlParserSeverities</a> severity, <br /> <a href="libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a> locator)
+</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlTextReaderExpand">xmlTextReaderExpand</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderGetAttribute">xmlTextReaderGetAttribute</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderGetAttributeNo">xmlTextReaderGetAttributeNo</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int no)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderGetAttributeNs">xmlTextReaderGetAttributeNs</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localName, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)</pre>
+<pre class="programlisting">void <a href="#xmlTextReaderGetErrorHandler">xmlTextReaderGetErrorHandler</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a> * f, <br /> void ** arg)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderGetParserProp">xmlTextReaderGetParserProp</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int prop)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderHasAttributes">xmlTextReaderHasAttributes</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderHasValue">xmlTextReaderHasValue</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderIsDefault">xmlTextReaderIsDefault</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderIsEmptyElement">xmlTextReaderIsEmptyElement</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderIsValid">xmlTextReaderIsValid</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderLocalName">xmlTextReaderLocalName</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderLocatorBaseURI">xmlTextReaderLocatorBaseURI</a> (<a href="libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a> locator)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderLocatorLineNumber">xmlTextReaderLocatorLineNumber</a> (<a href="libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a> locator)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderMoveToAttribute">xmlTextReaderMoveToAttribute</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderMoveToAttributeNo">xmlTextReaderMoveToAttributeNo</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int no)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderMoveToAttributeNs">xmlTextReaderMoveToAttributeNs</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localName, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderMoveToElement">xmlTextReaderMoveToElement</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderMoveToFirstAttribute">xmlTextReaderMoveToFirstAttribute</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderMoveToNextAttribute">xmlTextReaderMoveToNextAttribute</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderName">xmlTextReaderName</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderNamespaceUri">xmlTextReaderNamespaceUri</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderNext">xmlTextReaderNext</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderNodeType">xmlTextReaderNodeType</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderNormalization">xmlTextReaderNormalization</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderPrefix">xmlTextReaderPrefix</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlTextReaderPreserve">xmlTextReaderPreserve</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pattern, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderQuoteChar">xmlTextReaderQuoteChar</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderRead">xmlTextReaderRead</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderReadAttributeValue">xmlTextReaderReadAttributeValue</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderReadState">xmlTextReaderReadState</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderReadString">xmlTextReaderReadString</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const char * rng)</pre>
+<pre class="programlisting">void <a href="#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a> f, <br /> void * arg)</pre>
+<pre class="programlisting">int <a href="#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int prop, <br /> int value)</pre>
+<pre class="programlisting">void <a href="#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> f, <br /> void * arg)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderValue">xmlTextReaderValue</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a> (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)</pre>
+<h2>Description</h2>
+<h3>Enum <a name="xmlParserProperties" id="xmlParserProperties">xmlParserProperties</a></h3><pre class="programlisting">Enum xmlParserProperties {
+ <a name="XML_PARSER_LOADDTD" id="XML_PARSER_LOADDTD">XML_PARSER_LOADDTD</a> = 1
+ <a name="XML_PARSER_DEFAULTATTRS" id="XML_PARSER_DEFAULTATTRS">XML_PARSER_DEFAULTATTRS</a> = 2
+ <a name="XML_PARSER_VALIDATE" id="XML_PARSER_VALIDATE">XML_PARSER_VALIDATE</a> = 3
+ <a name="XML_PARSER_SUBST_ENTITIES" id="XML_PARSER_SUBST_ENTITIES">XML_PARSER_SUBST_ENTITIES</a> = 4
+}
+</pre><h3>Enum <a name="xmlParserSeverities" id="xmlParserSeverities">xmlParserSeverities</a></h3><pre class="programlisting">Enum xmlParserSeverities {
+ <a name="XML_PARSER_SEVERITY_VALIDITY_WARNING" id="XML_PARSER_SEVERITY_VALIDITY_WARNING">XML_PARSER_SEVERITY_VALIDITY_WARNING</a> = 1
+ <a name="XML_PARSER_SEVERITY_VALIDITY_ERROR" id="XML_PARSER_SEVERITY_VALIDITY_ERROR">XML_PARSER_SEVERITY_VALIDITY_ERROR</a> = 2
+ <a name="XML_PARSER_SEVERITY_WARNING" id="XML_PARSER_SEVERITY_WARNING">XML_PARSER_SEVERITY_WARNING</a> = 3
+ <a name="XML_PARSER_SEVERITY_ERROR" id="XML_PARSER_SEVERITY_ERROR">XML_PARSER_SEVERITY_ERROR</a> = 4
+}
+</pre><h3>Enum <a name="xmlReaderTypes" id="xmlReaderTypes">xmlReaderTypes</a></h3><pre class="programlisting">Enum xmlReaderTypes {
+ <a name="XML_READER_TYPE_NONE" id="XML_READER_TYPE_NONE">XML_READER_TYPE_NONE</a> = 0
+ <a name="XML_READER_TYPE_ELEMENT" id="XML_READER_TYPE_ELEMENT">XML_READER_TYPE_ELEMENT</a> = 1
+ <a name="XML_READER_TYPE_ATTRIBUTE" id="XML_READER_TYPE_ATTRIBUTE">XML_READER_TYPE_ATTRIBUTE</a> = 2
+ <a name="XML_READER_TYPE_TEXT" id="XML_READER_TYPE_TEXT">XML_READER_TYPE_TEXT</a> = 3
+ <a name="XML_READER_TYPE_CDATA" id="XML_READER_TYPE_CDATA">XML_READER_TYPE_CDATA</a> = 4
+ <a name="XML_READER_TYPE_ENTITY_REFERENCE" id="XML_READER_TYPE_ENTITY_REFERENCE">XML_READER_TYPE_ENTITY_REFERENCE</a> = 5
+ <a name="XML_READER_TYPE_ENTITY" id="XML_READER_TYPE_ENTITY">XML_READER_TYPE_ENTITY</a> = 6
+ <a name="XML_READER_TYPE_PROCESSING_INSTRUCTION" id="XML_READER_TYPE_PROCESSING_INSTRUCTION">XML_READER_TYPE_PROCESSING_INSTRUCTION</a> = 7
+ <a name="XML_READER_TYPE_COMMENT" id="XML_READER_TYPE_COMMENT">XML_READER_TYPE_COMMENT</a> = 8
+ <a name="XML_READER_TYPE_DOCUMENT" id="XML_READER_TYPE_DOCUMENT">XML_READER_TYPE_DOCUMENT</a> = 9
+ <a name="XML_READER_TYPE_DOCUMENT_TYPE" id="XML_READER_TYPE_DOCUMENT_TYPE">XML_READER_TYPE_DOCUMENT_TYPE</a> = 10
+ <a name="XML_READER_TYPE_DOCUMENT_FRAGMENT" id="XML_READER_TYPE_DOCUMENT_FRAGMENT">XML_READER_TYPE_DOCUMENT_FRAGMENT</a> = 11
+ <a name="XML_READER_TYPE_NOTATION" id="XML_READER_TYPE_NOTATION">XML_READER_TYPE_NOTATION</a> = 12
+ <a name="XML_READER_TYPE_WHITESPACE" id="XML_READER_TYPE_WHITESPACE">XML_READER_TYPE_WHITESPACE</a> = 13
+ <a name="XML_READER_TYPE_SIGNIFICANT_WHITESPACE" id="XML_READER_TYPE_SIGNIFICANT_WHITESPACE">XML_READER_TYPE_SIGNIFICANT_WHITESPACE</a> = 14
+ <a name="XML_READER_TYPE_END_ELEMENT" id="XML_READER_TYPE_END_ELEMENT">XML_READER_TYPE_END_ELEMENT</a> = 15
+ <a name="XML_READER_TYPE_END_ENTITY" id="XML_READER_TYPE_END_ENTITY">XML_READER_TYPE_END_ENTITY</a> = 16
+ <a name="XML_READER_TYPE_XML_DECLARATION" id="XML_READER_TYPE_XML_DECLARATION">XML_READER_TYPE_XML_DECLARATION</a> = 17
+}
+</pre><h3><a name="xmlTextReader" id="xmlTextReader">Structure xmlTextReader</a></h3><pre class="programlisting">Structure xmlTextReader<br />struct _xmlTextReader {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlFreeTextReader" id="xmlFreeTextReader"></a>Function: xmlFreeTextReader</h3><pre class="programlisting">void xmlFreeTextReader (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Deallocate all the resources associated to the reader</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a></td></tr></tbody></table></div><h3><a name="xmlNewTextReader" id="xmlNewTextReader"></a>Function: xmlNewTextReader</h3><pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> xmlNewTextReader (<a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br /> const char * URI)<br />
+</pre><p>Create an <a href="libxml-xmlreader.html#xmlTextReader">xmlTextReader</a> structure fed with @input</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> used to read data</td></tr><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the URI information for the source if available</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlNewTextReaderFilename" id="xmlNewTextReaderFilename"></a>Function: xmlNewTextReaderFilename</h3><pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> xmlNewTextReaderFilename (const char * URI)<br />
+</pre><p>Create an <a href="libxml-xmlreader.html#xmlTextReader">xmlTextReader</a> structure fed with the resource at @URI</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>URI</tt></i>:</span></td><td>the URI of the resource to process</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlReaderForDoc" id="xmlReaderForDoc"></a>Function: xmlReaderForDoc</h3><pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> xmlReaderForDoc (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to a zero terminated string</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new reader or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlReaderForFd" id="xmlReaderForFd"></a>Function: xmlReaderForFd</h3><pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> xmlReaderForFd (int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Create an xmltextReader for an XML from a file descriptor. The parsing flags @options are a combination of xmlParserOption. NOTE that the file descriptor will not be closed when the reader is closed or reset.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>fd</tt></i>:</span></td><td>an open file descriptor</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new reader or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlReaderForFile" id="xmlReaderForFile"></a>Function: xmlReaderForFile</h3><pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> xmlReaderForFile (const char * filename, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML file from the filesystem or the network. The parsing flags @options are a combination of xmlParserOption.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file or URL</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new reader or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlReaderForIO" id="xmlReaderForIO"></a>Function: xmlReaderForIO</h3><pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> xmlReaderForIO (<a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Create an xmltextReader for an XML document from I/O functions and source. The parsing flags @options are a combination of xmlParserOption.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ioread</tt></i>:</span></td><td>an I/O read function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new reader or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlReaderForMemory" id="xmlReaderForMemory"></a>Function: xmlReaderForMemory</h3><pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> xmlReaderForMemory (const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption.</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</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>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new reader or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlReaderNewDoc" id="xmlReaderNewDoc"></a>Function: xmlReaderNewDoc</h3><pre class="programlisting">int xmlReaderNewDoc (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Setup an xmltextReader to parse an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>an XML reader</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>a pointer to a zero terminated string</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlReaderNewFd" id="xmlReaderNewFd"></a>Function: xmlReaderNewFd</h3><pre class="programlisting">int xmlReaderNewFd (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int fd, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Setup an xmltextReader to parse an XML from a file descriptor. NOTE that the file descriptor will not be closed when the reader is closed or reset. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>an XML reader</td></tr><tr><td><span class="term"><i><tt>fd</tt></i>:</span></td><td>an open file descriptor</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlReaderNewFile" id="xmlReaderNewFile"></a>Function: xmlReaderNewFile</h3><pre class="programlisting">int xmlReaderNewFile (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const char * filename, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>parse an XML file from the filesystem or the network. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>an XML reader</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file or URL</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlReaderNewIO" id="xmlReaderNewIO"></a>Function: xmlReaderNewIO</h3><pre class="programlisting">int xmlReaderNewIO (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br /> <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Setup an xmltextReader to parse an XML document from I/O functions and source. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>an XML reader</td></tr><tr><td><span class="term"><i><tt>ioread</tt></i>:</span></td><td>an I/O read function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlReaderNewMemory" id="xmlReaderNewMemory"></a>Function: xmlReaderNewMemory</h3><pre class="programlisting">int xmlReaderNewMemory (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const char * buffer, <br /> int size, <br /> const char * URL, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Setup an xmltextReader to parse an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>an XML reader</td></tr><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>a pointer to a char array</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>URL</tt></i>:</span></td><td>the base URL to use for the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the document encoding, or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a combination of <a href="libxml-parser.html#xmlParserOption">xmlParserOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlReaderNewWalker" id="xmlReaderNewWalker"></a>Function: xmlReaderNewWalker</h3><pre class="programlisting">int xmlReaderNewWalker (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Setup an xmltextReader to parse a preparsed XML document. This reuses the existing @reader xmlTextReader.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>an XML reader</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a preparsed document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlReaderWalker" id="xmlReaderWalker"></a>Function: xmlReaderWalker</h3><pre class="programlisting"><a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> xmlReaderWalker (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Create an xmltextReader for a preparsed document.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a preparsed document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new reader or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderAttributeCount" id="xmlTextReaderAttributeCount"></a>Function: xmlTextReaderAttributeCount</h3><pre class="programlisting">int xmlTextReaderAttributeCount (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Provides the number of attributes of the current node</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 i no attributes, -1 in case of error or the <a href="libxml-SAX.html#attribute">attribute</a> count</td></tr></tbody></table></div><h3><a name="xmlTextReaderBaseUri" id="xmlTextReaderBaseUri"></a>Function: xmlTextReaderBaseUri</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderBaseUri (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The base URI of the node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the base URI or NULL if not available</td></tr></tbody></table></div><h3><a name="xmlTextReaderClose" id="xmlTextReaderClose"></a>Function: xmlTextReaderClose</h3><pre class="programlisting">int xmlTextReaderClose (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>This method releases any resources allocated by the current instance changes the state to Closed and close any underlying input.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderConstBaseUri" id="xmlTextReaderConstBaseUri"></a>Function: xmlTextReaderConstBaseUri</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderConstBaseUri (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The base URI of the node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the base URI or NULL if not available, the string will be deallocated with the reader</td></tr></tbody></table></div><h3><a name="xmlTextReaderConstLocalName" id="xmlTextReaderConstLocalName"></a>Function: xmlTextReaderConstLocalName</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderConstLocalName (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The local name of the node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the local name or NULL if not available, the string will be deallocated with the reader.</td></tr></tbody></table></div><h3><a name="xmlTextReaderConstName" id="xmlTextReaderConstName"></a>Function: xmlTextReaderConstName</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderConstName (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The qualified name of the node, equal to Prefix :LocalName.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the local name or NULL if not available, the string is deallocated with the reader.</td></tr></tbody></table></div><h3><a name="xmlTextReaderConstNamespaceUri" id="xmlTextReaderConstNamespaceUri"></a>Function: xmlTextReaderConstNamespaceUri</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderConstNamespaceUri (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The URI defining the namespace associated with the node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the namespace URI or NULL if not available, the string will be deallocated with the reader</td></tr></tbody></table></div><h3><a name="xmlTextReaderConstPrefix" id="xmlTextReaderConstPrefix"></a>Function: xmlTextReaderConstPrefix</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderConstPrefix (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>A shorthand <a href="libxml-SAX.html#reference">reference</a> to the namespace associated with the node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the prefix or NULL if not available, the string is deallocated with the reader.</td></tr></tbody></table></div><h3><a name="xmlTextReaderConstString" id="xmlTextReaderConstString"></a>Function: xmlTextReaderConstString</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderConstString (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>Get an interned string from the reader, allows for example to speedup string name comparisons</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the string to intern.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an interned copy of the string or NULL in case of error. The string will be deallocated with the reader.</td></tr></tbody></table></div><h3><a name="xmlTextReaderConstValue" id="xmlTextReaderConstValue"></a>Function: xmlTextReaderConstValue</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderConstValue (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Provides the text value of the node if present</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the string or NULL if not available. The result will be deallocated on the next Read() operation.</td></tr></tbody></table></div><h3><a name="xmlTextReaderConstXmlLang" id="xmlTextReaderConstXmlLang"></a>Function: xmlTextReaderConstXmlLang</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderConstXmlLang (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The xml:lang scope within which the node resides.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the xml:lang value or NULL if none exists.</td></tr></tbody></table></div><h3><a name="xmlTextReaderCurrentDoc" id="xmlTextReaderCurrentDoc"></a>Function: xmlTextReaderCurrentDoc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlTextReaderCurrentDoc (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Hacking interface allowing to get the <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> correponding to the current document being accessed by the xmlTextReader. NOTE: as a result of this call, the reader will not destroy the associated XML document and calling xmlFreeDoc() on the result is needed once the reader parsing has finished.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderCurrentNode" id="xmlTextReaderCurrentNode"></a>Function: xmlTextReaderCurrentNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlTextReaderCurrentNode (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Hacking interface allowing to get the <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> correponding to the current node being accessed by the xmlTextReader. This is dangerous because the underlying node may be destroyed on the next Reads.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderDepth" id="xmlTextReaderDepth"></a>Function: xmlTextReaderDepth</h3><pre class="programlisting">int xmlTextReaderDepth (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The depth of the node in the tree.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the depth or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderErrorFunc" id="xmlTextReaderErrorFunc"></a>Function type: xmlTextReaderErrorFunc</h3><pre class="programlisting">Function type: xmlTextReaderErrorFunc
+void xmlTextReaderErrorFunc (void * arg, <br /> const char * msg, <br /> <a href="libxml-xmlreader.html#xmlParserSeverities">xmlParserSeverities</a> severity, <br /> <a href="libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a> locator)
+</pre><p></p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>arg</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>severity</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>locator</tt></i>:</span></td><td></td></tr></tbody></table></div><br />
+<h3><a name="xmlTextReaderExpand" id="xmlTextReaderExpand"></a>Function: xmlTextReaderExpand</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlTextReaderExpand (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Reads the contents of the current node and the full subtree. It then makes the subtree available until the next xmlTextReaderRead() call</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a node pointer valid until the next xmlTextReaderRead() call or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderGetAttribute" id="xmlTextReaderGetAttribute"></a>Function: xmlTextReaderGetAttribute</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderGetAttribute (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Provides the value of the <a href="libxml-SAX.html#attribute">attribute</a> with the specified qualified name.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the qualified name of the attribute.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a string containing the value of the specified attribute, or NULL in case of error. The string must be deallocated by the caller.</td></tr></tbody></table></div><h3><a name="xmlTextReaderGetAttributeNo" id="xmlTextReaderGetAttributeNo"></a>Function: xmlTextReaderGetAttributeNo</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderGetAttributeNo (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int no)<br />
+</pre><p>Provides the value of the <a href="libxml-SAX.html#attribute">attribute</a> with the specified index relative to the containing element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>no</tt></i>:</span></td><td>the zero-based index of the <a href="libxml-SAX.html#attribute">attribute</a> relative to the containing element</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a string containing the value of the specified attribute, or NULL in case of error. The string must be deallocated by the caller.</td></tr></tbody></table></div><h3><a name="xmlTextReaderGetAttributeNs" id="xmlTextReaderGetAttributeNs"></a>Function: xmlTextReaderGetAttributeNs</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderGetAttributeNs (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localName, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)<br />
+</pre><p>Provides the value of the specified <a href="libxml-SAX.html#attribute">attribute</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>localName</tt></i>:</span></td><td>the local name of the attribute.</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>the namespace URI of the attribute.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a string containing the value of the specified attribute, or NULL in case of error. The string must be deallocated by the caller.</td></tr></tbody></table></div><h3><a name="xmlTextReaderGetErrorHandler" id="xmlTextReaderGetErrorHandler"></a>Function: xmlTextReaderGetErrorHandler</h3><pre class="programlisting">void xmlTextReaderGetErrorHandler (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a> * f, <br /> void ** arg)<br />
+</pre><p>Retrieve the error callback function and user argument.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the callback function or NULL is no callback has been registered</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>a user argument</td></tr></tbody></table></div><h3><a name="xmlTextReaderGetParserProp" id="xmlTextReaderGetParserProp"></a>Function: xmlTextReaderGetParserProp</h3><pre class="programlisting">int xmlTextReaderGetParserProp (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int prop)<br />
+</pre><p>Read the parser internal property.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>prop</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlParserProperties">xmlParserProperties</a> to get</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value, usually 0 or 1, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderGetRemainder" id="xmlTextReaderGetRemainder"></a>Function: xmlTextReaderGetRemainder</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlTextReaderGetRemainder (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Method to get the remainder of the buffered XML. this method stops the parser, set its state to End Of File and return the input stream with what is left that the parser did not use.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> attached to the XML or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderHasAttributes" id="xmlTextReaderHasAttributes"></a>Function: xmlTextReaderHasAttributes</h3><pre class="programlisting">int xmlTextReaderHasAttributes (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Whether the node has attributes.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</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 or error</td></tr></tbody></table></div><h3><a name="xmlTextReaderHasValue" id="xmlTextReaderHasValue"></a>Function: xmlTextReaderHasValue</h3><pre class="programlisting">int xmlTextReaderHasValue (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Whether the node can have a text value.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</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 or error</td></tr></tbody></table></div><h3><a name="xmlTextReaderIsDefault" id="xmlTextReaderIsDefault"></a>Function: xmlTextReaderIsDefault</h3><pre class="programlisting">int xmlTextReaderIsDefault (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Whether an Attribute node was generated from the default value defined in the DTD or schema.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if not defaulted, 1 if defaulted, and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderIsEmptyElement" id="xmlTextReaderIsEmptyElement"></a>Function: xmlTextReaderIsEmptyElement</h3><pre class="programlisting">int xmlTextReaderIsEmptyElement (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Check if the current node is empty</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if empty, 0 if not and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderIsValid" id="xmlTextReaderIsValid"></a>Function: xmlTextReaderIsValid</h3><pre class="programlisting">int xmlTextReaderIsValid (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Retrieve the validity status from the parser context</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the flag value 1 if valid, 0 if no, and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderLocalName" id="xmlTextReaderLocalName"></a>Function: xmlTextReaderLocalName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderLocalName (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The local name of the node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the local name or NULL if not available</td></tr></tbody></table></div><h3><a name="xmlTextReaderLocatorBaseURI" id="xmlTextReaderLocatorBaseURI"></a>Function: xmlTextReaderLocatorBaseURI</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderLocatorBaseURI (<a href="libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a> locator)<br />
+</pre><p>Obtain the base URI for the given locator.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>locator</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the base URI or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderLocatorLineNumber" id="xmlTextReaderLocatorLineNumber"></a>Function: xmlTextReaderLocatorLineNumber</h3><pre class="programlisting">int xmlTextReaderLocatorLineNumber (<a href="libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a> locator)<br />
+</pre><p>Obtain the line number for the given locator.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>locator</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderLocatorPtr">xmlTextReaderLocatorPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the line number or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderLookupNamespace" id="xmlTextReaderLookupNamespace"></a>Function: xmlTextReaderLookupNamespace</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderLookupNamespace (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p>Resolves a namespace prefix in the scope of the current element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix whose namespace URI is to be resolved. To return the default namespace, specify NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a string containing the namespace URI to which the prefix maps or NULL in case of error. The string must be deallocated by the caller.</td></tr></tbody></table></div><h3><a name="xmlTextReaderMoveToAttribute" id="xmlTextReaderMoveToAttribute"></a>Function: xmlTextReaderMoveToAttribute</h3><pre class="programlisting">int xmlTextReaderMoveToAttribute (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Moves the position of the current instance to the <a href="libxml-SAX.html#attribute">attribute</a> with the specified qualified name.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the qualified name of the attribute.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 in case of success, -1 in case of error, 0 if not found</td></tr></tbody></table></div><h3><a name="xmlTextReaderMoveToAttributeNo" id="xmlTextReaderMoveToAttributeNo"></a>Function: xmlTextReaderMoveToAttributeNo</h3><pre class="programlisting">int xmlTextReaderMoveToAttributeNo (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int no)<br />
+</pre><p>Moves the position of the current instance to the <a href="libxml-SAX.html#attribute">attribute</a> with the specified index relative to the containing element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>no</tt></i>:</span></td><td>the zero-based index of the <a href="libxml-SAX.html#attribute">attribute</a> relative to the containing element.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 in case of success, -1 in case of error, 0 if not found</td></tr></tbody></table></div><h3><a name="xmlTextReaderMoveToAttributeNs" id="xmlTextReaderMoveToAttributeNs"></a>Function: xmlTextReaderMoveToAttributeNs</h3><pre class="programlisting">int xmlTextReaderMoveToAttributeNs (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * localName, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)<br />
+</pre><p>Moves the position of the current instance to the <a href="libxml-SAX.html#attribute">attribute</a> with the specified local name and namespace URI.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>localName</tt></i>:</span></td><td>the local name of the attribute.</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>the namespace URI of the attribute.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 in case of success, -1 in case of error, 0 if not found</td></tr></tbody></table></div><h3><a name="xmlTextReaderMoveToElement" id="xmlTextReaderMoveToElement"></a>Function: xmlTextReaderMoveToElement</h3><pre class="programlisting">int xmlTextReaderMoveToElement (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Moves the position of the current instance to the node that contains the current Attribute node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 in case of success, -1 in case of error, 0 if not moved</td></tr></tbody></table></div><h3><a name="xmlTextReaderMoveToFirstAttribute" id="xmlTextReaderMoveToFirstAttribute"></a>Function: xmlTextReaderMoveToFirstAttribute</h3><pre class="programlisting">int xmlTextReaderMoveToFirstAttribute (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Moves the position of the current instance to the first <a href="libxml-SAX.html#attribute">attribute</a> associated with the current node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 in case of success, -1 in case of error, 0 if not found</td></tr></tbody></table></div><h3><a name="xmlTextReaderMoveToNextAttribute" id="xmlTextReaderMoveToNextAttribute"></a>Function: xmlTextReaderMoveToNextAttribute</h3><pre class="programlisting">int xmlTextReaderMoveToNextAttribute (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Moves the position of the current instance to the next <a href="libxml-SAX.html#attribute">attribute</a> associated with the current node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 in case of success, -1 in case of error, 0 if not found</td></tr></tbody></table></div><h3><a name="xmlTextReaderName" id="xmlTextReaderName"></a>Function: xmlTextReaderName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderName (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The qualified name of the node, equal to Prefix :LocalName.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the local name or NULL if not available</td></tr></tbody></table></div><h3><a name="xmlTextReaderNamespaceUri" id="xmlTextReaderNamespaceUri"></a>Function: xmlTextReaderNamespaceUri</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderNamespaceUri (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The URI defining the namespace associated with the node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the namespace URI or NULL if not available</td></tr></tbody></table></div><h3><a name="xmlTextReaderNext" id="xmlTextReaderNext"></a>Function: xmlTextReaderNext</h3><pre class="programlisting">int xmlTextReaderNext (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Skip to the node following the current one in document order while avoiding the subtree if any.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderNextSibling" id="xmlTextReaderNextSibling"></a>Function: xmlTextReaderNextSibling</h3><pre class="programlisting">int xmlTextReaderNextSibling (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Skip to the node following the current one in document order while avoiding the subtree if any. Currently implemented only for Readers built on a document</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderNodeType" id="xmlTextReaderNodeType"></a>Function: xmlTextReaderNodeType</h3><pre class="programlisting">int xmlTextReaderNodeType (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Get the node type of the current node Reference: http://dotgnu.org/pnetlib-doc/System/Xml/XmlNodeType.html</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the xmlNodeType of the current node or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderNormalization" id="xmlTextReaderNormalization"></a>Function: xmlTextReaderNormalization</h3><pre class="programlisting">int xmlTextReaderNormalization (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The value indicating whether to normalize white space and <a href="libxml-SAX.html#attribute">attribute</a> values. Since <a href="libxml-SAX.html#attribute">attribute</a> value and end of line normalizations are a MUST in the XML specification only the value true is accepted. The broken bahaviour of accepting out of range character entities like &amp;#0; is of course not supported either.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderPrefix" id="xmlTextReaderPrefix"></a>Function: xmlTextReaderPrefix</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderPrefix (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>A shorthand <a href="libxml-SAX.html#reference">reference</a> to the namespace associated with the node.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the prefix or NULL if not available</td></tr></tbody></table></div><h3><a name="xmlTextReaderPreserve" id="xmlTextReaderPreserve"></a>Function: xmlTextReaderPreserve</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlTextReaderPreserve (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>current node being accessed by the xmlTextReader. This is dangerous because the underlying node may be destroyed on the next Reads.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderPreservePattern" id="xmlTextReaderPreservePattern"></a>Function: xmlTextReaderPreservePattern</h3><pre class="programlisting">int xmlTextReaderPreservePattern (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pattern, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces)<br />
+</pre><p>This tells the XML Reader to preserve all nodes matched by the pattern. The caller must also use xmlTextReaderCurrentDoc() to keep an handle on the resulting document once parsing has finished</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>pattern</tt></i>:</span></td><td>an XPath subset pattern</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>a positive number in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderQuoteChar" id="xmlTextReaderQuoteChar"></a>Function: xmlTextReaderQuoteChar</h3><pre class="programlisting">int xmlTextReaderQuoteChar (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The quotation mark character used to enclose the value of an attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>" or ' and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderRead" id="xmlTextReaderRead"></a>Function: xmlTextReaderRead</h3><pre class="programlisting">int xmlTextReaderRead (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Moves the position of the current instance to the next node in the stream, exposing its properties.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderReadAttributeValue" id="xmlTextReaderReadAttributeValue"></a>Function: xmlTextReaderReadAttributeValue</h3><pre class="programlisting">int xmlTextReaderReadAttributeValue (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Parses an <a href="libxml-SAX.html#attribute">attribute</a> value into one or more Text and EntityReference nodes.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 in case of success, 0 if the reader was not positionned on an ttribute node or all the <a href="libxml-SAX.html#attribute">attribute</a> values have been read, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderReadInnerXml" id="xmlTextReaderReadInnerXml"></a>Function: xmlTextReaderReadInnerXml</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderReadInnerXml (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Reads the contents of the current node, including child nodes and markup.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a string containing the XML content, or NULL if the current node is neither an element nor attribute, or has no child nodes. The string must be deallocated by the caller.</td></tr></tbody></table></div><h3><a name="xmlTextReaderReadOuterXml" id="xmlTextReaderReadOuterXml"></a>Function: xmlTextReaderReadOuterXml</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderReadOuterXml (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Reads the contents of the current node, including child nodes and markup.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a string containing the XML content, or NULL if the current node is neither an element nor attribute, or has no child nodes. The string must be deallocated by the caller.</td></tr></tbody></table></div><h3><a name="xmlTextReaderReadState" id="xmlTextReaderReadState"></a>Function: xmlTextReaderReadState</h3><pre class="programlisting">int xmlTextReaderReadState (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Gets the read state of the reader.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the state value, or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderReadString" id="xmlTextReaderReadString"></a>Function: xmlTextReaderReadString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderReadString (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Reads the contents of an element or a text node as a string.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a string containing the contents of the Element or Text node, or NULL if the reader is positioned on any other type of node. The string must be deallocated by the caller.</td></tr></tbody></table></div><h3><a name="xmlTextReaderRelaxNGSetSchema" id="xmlTextReaderRelaxNGSetSchema"></a>Function: xmlTextReaderRelaxNGSetSchema</h3><pre class="programlisting">int xmlTextReaderRelaxNGSetSchema (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> schema)<br />
+</pre><p>Use RelaxNG to validate the document as it is processed. Activation is only possible before the first Read(). if @schema is NULL, then RelaxNG validation is desactivated. @ The @schema should not be freed until the reader is deallocated or its use has been deactivated.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>schema</tt></i>:</span></td><td>a precompiled RelaxNG schema</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case the RelaxNG validation could be (des)activated and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderRelaxNGValidate" id="xmlTextReaderRelaxNGValidate"></a>Function: xmlTextReaderRelaxNGValidate</h3><pre class="programlisting">int xmlTextReaderRelaxNGValidate (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> const char * rng)<br />
+</pre><p>Use RelaxNG to validate the document as it is processed. Activation is only possible before the first Read(). if @rng is NULL, then RelaxNG validation is desactivated.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>rng</tt></i>:</span></td><td>the path to a RelaxNG schema or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case the RelaxNG validation could be (des)activated and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlTextReaderSetErrorHandler" id="xmlTextReaderSetErrorHandler"></a>Function: xmlTextReaderSetErrorHandler</h3><pre class="programlisting">void xmlTextReaderSetErrorHandler (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a> f, <br /> void * arg)<br />
+</pre><p>Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the callback function to call on error and warnings</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>a user argument to pass to the callback function</td></tr></tbody></table></div><h3><a name="xmlTextReaderSetParserProp" id="xmlTextReaderSetParserProp"></a>Function: xmlTextReaderSetParserProp</h3><pre class="programlisting">int xmlTextReaderSetParserProp (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> int prop, <br /> int value)<br />
+</pre><p>Change the parser processing behaviour by changing some of its internal properties. Note that some properties can only be changed before any read has been done.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>prop</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlParserProperties">xmlParserProperties</a> to set</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>usually 0 or 1 to (de)activate it</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the call was successful, or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextReaderSetStructuredErrorHandler" id="xmlTextReaderSetStructuredErrorHandler"></a>Function: xmlTextReaderSetStructuredErrorHandler</h3><pre class="programlisting">void xmlTextReaderSetStructuredErrorHandler (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> f, <br /> void * arg)<br />
+</pre><p>Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the callback function to call on error and warnings</td></tr><tr><td><span class="term"><i><tt>arg</tt></i>:</span></td><td>a user argument to pass to the callback function</td></tr></tbody></table></div><h3><a name="xmlTextReaderValue" id="xmlTextReaderValue"></a>Function: xmlTextReaderValue</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderValue (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>Provides the text value of the node if present</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the string or NULL if not available. The result must be deallocated with xmlFree()</td></tr></tbody></table></div><h3><a name="xmlTextReaderXmlLang" id="xmlTextReaderXmlLang"></a>Function: xmlTextReaderXmlLang</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlTextReaderXmlLang (<a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader)<br />
+</pre><p>The xml:lang scope within which the node resides.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>reader</tt></i>:</span></td><td>the <a href="libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> used</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the xml:lang value or NULL if none exists.</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xmlregexp.html b/doc/html/libxml-xmlregexp.html
new file mode 100644
index 0000000..4c371eb
--- /dev/null
+++ b/doc/html/libxml-xmlregexp.html
@@ -0,0 +1,57 @@
+<?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 xmlregexp from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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
+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>
+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="#xmlRegExecPushString">xmlRegExecPushString</a> (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> void * data)</pre>
+<pre class="programlisting">int <a href="#xmlRegExecPushString2">xmlRegExecPushString2</a> (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value2, <br /> void * data)</pre>
+<pre class="programlisting">void <a href="#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a> (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec)</pre>
+<pre class="programlisting">void <a href="#xmlRegFreeRegexp">xmlRegFreeRegexp</a> (<a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> regexp)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> <a href="#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a> (<a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> comp, <br /> <a href="libxml-xmlregexp.html#xmlRegExecCallbacks">xmlRegExecCallbacks</a> callback, <br /> void * data)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> <a href="#xmlRegexpCompile">xmlRegexpCompile</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * regexp)</pre>
+<pre class="programlisting">int <a href="#xmlRegexpExec">xmlRegexpExec</a> (<a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> comp, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<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 {
+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
+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="xmlRegExecPushString" id="xmlRegExecPushString"></a>Function: xmlRegExecPushString</h3><pre class="programlisting">int xmlRegExecPushString (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> void * data)<br />
+</pre><p>Push one input token in the execution context</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>exec</tt></i>:</span></td><td>a regexp execution context or NULL to indicate the end</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>a string token input</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>data associated to the token to reuse in callbacks</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the regexp reached a final state, 0 if non-final, and a negative value in case of error.</td></tr></tbody></table></div><h3><a name="xmlRegExecPushString2" id="xmlRegExecPushString2"></a>Function: xmlRegExecPushString2</h3><pre class="programlisting">int xmlRegExecPushString2 (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value2, <br /> void * data)<br />
+</pre><p>Push one input token in the execution context</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>exec</tt></i>:</span></td><td>a regexp execution context or NULL to indicate the end</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the first string token input</td></tr><tr><td><span class="term"><i><tt>value2</tt></i>:</span></td><td>the second string token input</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>data associated to the token to reuse in callbacks</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the regexp reached a final state, 0 if non-final, and a negative value in case of error.</td></tr></tbody></table></div><h3><a name="xmlRegFreeExecCtxt" id="xmlRegFreeExecCtxt"></a>Function: xmlRegFreeExecCtxt</h3><pre class="programlisting">void xmlRegFreeExecCtxt (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec)<br />
+</pre><p>Free the structures associated to a regular expression evaulation context.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>exec</tt></i>:</span></td><td>a regular expression evaulation context</td></tr></tbody></table></div><h3><a name="xmlRegFreeRegexp" id="xmlRegFreeRegexp"></a>Function: xmlRegFreeRegexp</h3><pre class="programlisting">void xmlRegFreeRegexp (<a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> regexp)<br />
+</pre><p>Free a regexp</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>regexp</tt></i>:</span></td><td>the regexp</td></tr></tbody></table></div><h3><a name="xmlRegNewExecCtxt" id="xmlRegNewExecCtxt"></a>Function: xmlRegNewExecCtxt</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> xmlRegNewExecCtxt (<a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> comp, <br /> <a href="libxml-xmlregexp.html#xmlRegExecCallbacks">xmlRegExecCallbacks</a> callback, <br /> void * data)<br />
+</pre><p>Build a context used for progressive evaluation of a regexp.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>a precompiled regular expression</td></tr><tr><td><span class="term"><i><tt>callback</tt></i>:</span></td><td>a callback function used for handling progresses in the automata matching phase</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the context data associated to the callback in this context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new context</td></tr></tbody></table></div><h3><a name="xmlRegexpCompile" id="xmlRegexpCompile"></a>Function: xmlRegexpCompile</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> xmlRegexpCompile (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * regexp)<br />
+</pre><p>Parses a regular expression conforming to XML Schemas Part 2 Datatype Appendix F and build an automata suitable for testing strings against that regular expression</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>regexp</tt></i>:</span></td><td>a regular expression string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the compiled expression or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlRegexpExec" id="xmlRegexpExec"></a>Function: xmlRegexpExec</h3><pre class="programlisting">int xmlRegexpExec (<a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> comp, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Check if the regular expression generate the value</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 compiled regular expression</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the value to check against the regular expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if it matches, 0 if not and a negativa value in case of error</td></tr></tbody></table></div><h3><a name="xmlRegexpIsDeterminist" id="xmlRegexpIsDeterminist"></a>Function: xmlRegexpIsDeterminist</h3><pre class="programlisting">int xmlRegexpIsDeterminist (<a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> comp)<br />
+</pre><p>Check if the regular expression is determinist</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 compiled regular expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if it yes, 0 if not and a negativa value in case of error</td></tr></tbody></table></div><h3><a name="xmlRegexpPrint" id="xmlRegexpPrint"></a>Function: xmlRegexpPrint</h3><pre class="programlisting">void xmlRegexpPrint (FILE * output, <br /> <a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> regexp)<br />
+</pre><p>Print the content of the compiled regular expression</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the file for the output debug</td></tr><tr><td><span class="term"><i><tt>regexp</tt></i>:</span></td><td>the compiled regexp</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xmlsave.html b/doc/html/libxml-xmlsave.html
new file mode 100644
index 0000000..9af9c19
--- /dev/null
+++ b/doc/html/libxml-xmlsave.html
@@ -0,0 +1,43 @@
+<?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 xmlsave from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlsave 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlregexp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlregexp.html">xmlregexp</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-xmlschemas.html">xmlschemas</a></th><td><a accesskey="n" href="libxml-xmlschemas.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>API to save document or subtree of document </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlSaveCtxt">xmlSaveCtxt</a><br />struct _xmlSaveCtxt
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlsave.html#xmlSaveCtxt">xmlSaveCtxt</a> * <a name="xmlSaveCtxtPtr" id="xmlSaveCtxtPtr">xmlSaveCtxtPtr</a>
+</pre><pre class="programlisting">int <a href="#xmlSaveClose">xmlSaveClose</a> (<a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">long <a href="#xmlSaveDoc">xmlSaveDoc</a> (<a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">int <a href="#xmlSaveFlush">xmlSaveFlush</a> (<a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToBuffer">xmlSaveToBuffer</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToFd">xmlSaveToFd</a> (int fd, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToFilename">xmlSaveToFilename</a> (const char * filename, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToIO">xmlSaveToIO</a> (<a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br /> <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * encoding, <br /> int options)</pre>
+<pre class="programlisting">long <a href="#xmlSaveTree">xmlSaveTree</a> (<a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<h2>Description</h2>
+<h3><a name="xmlSaveCtxt" id="xmlSaveCtxt">Structure xmlSaveCtxt</a></h3><pre class="programlisting">Structure xmlSaveCtxt<br />struct _xmlSaveCtxt {
+The content of this structure is not made public by the API.
+}</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>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a document saving context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlSaveDoc" id="xmlSaveDoc"></a>Function: xmlSaveDoc</h3><pre class="programlisting">long xmlSaveDoc (<a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Save a full document to a saving 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 document saving context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlSaveFlush" id="xmlSaveFlush"></a>Function: xmlSaveFlush</h3><pre class="programlisting">int xmlSaveFlush (<a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt)<br />
+</pre><p>Flush a document saving context, i.e. make sure that all bytes have been output.</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 document saving context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlSaveToBuffer" id="xmlSaveToBuffer"></a>Function: xmlSaveToBuffer</h3><pre class="programlisting"><a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> xmlSaveToBuffer (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Create a document saving context serializing to a buffer with the encoding and the options given</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>a buffer</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding name to use or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a set of xmlSaveOptions</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new serialization context or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlSaveToFd" id="xmlSaveToFd"></a>Function: xmlSaveToFd</h3><pre class="programlisting"><a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> xmlSaveToFd (int fd, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Create a document saving context serializing to a file descriptor with the encoding and the options given.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>fd</tt></i>:</span></td><td>a file descriptor number</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding name to use or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a set of xmlSaveOptions</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new serialization context or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlSaveToFilename" id="xmlSaveToFilename"></a>Function: xmlSaveToFilename</h3><pre class="programlisting"><a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> xmlSaveToFilename (const char * filename, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Create a document saving context serializing to a filename or possibly to an URL (but this is less reliable) with the encoding and the options given.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>a file name or an URL</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding name to use or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a set of xmlSaveOptions</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new serialization context or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlSaveToIO" id="xmlSaveToIO"></a>Function: xmlSaveToIO</h3><pre class="programlisting"><a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> xmlSaveToIO (<a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br /> <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br /> void * ioctx, <br /> const char * encoding, <br /> int options)<br />
+</pre><p>Create a document saving context serializing to a file descriptor with the encoding and the options given</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iowrite</tt></i>:</span></td><td>an I/O write function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding name to use or NULL</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a set of xmlSaveOptions</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new serialization context or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlSaveTree" id="xmlSaveTree"></a>Function: xmlSaveTree</h3><pre class="programlisting">long xmlSaveTree (<a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Save a subtree starting at the node parameter to a saving 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 document saving context</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error</td></tr></tbody></table></div><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-xmlschemas.html b/doc/html/libxml-xmlschemas.html
new file mode 100644
index 0000000..68584f1
--- /dev/null
+++ b/doc/html/libxml-xmlschemas.html
@@ -0,0 +1,125 @@
+<?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 xmlschemas from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlschemas 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlsave.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlsave.html">xmlsave</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-xmlschemastypes.html">xmlschemastypes</a></th><td><a accesskey="n" href="libxml-xmlschemastypes.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>interface to the XML Schemas handling and schema validity checking, it is incomplete right now. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlSchema">xmlSchema</a><br />struct _xmlSchema
+</pre><pre class="programlisting">Structure <a href="#xmlSchemaParserCtxt">xmlSchemaParserCtxt</a><br />struct _xmlSchemaParserCtxt
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlschemas.html#xmlSchemaParserCtxt">xmlSchemaParserCtxt</a> * <a name="xmlSchemaParserCtxtPtr" id="xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlschemas.html#xmlSchema">xmlSchema</a> * <a name="xmlSchemaPtr" id="xmlSchemaPtr">xmlSchemaPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSchemaValidCtxt">xmlSchemaValidCtxt</a><br />struct _xmlSchemaValidCtxt
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlschemas.html#xmlSchemaValidCtxt">xmlSchemaValidCtxt</a> * <a name="xmlSchemaValidCtxtPtr" id="xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlSchemaValidError">xmlSchemaValidError</a>
+</pre><pre class="programlisting">void <a href="#xmlSchemaDump">xmlSchemaDump</a> (FILE * output, <br /> <a href="libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> schema)</pre>
+<pre class="programlisting">void <a href="#xmlSchemaFree">xmlSchemaFree</a> (<a href="libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> schema)</pre>
+<pre class="programlisting">void <a href="#xmlSchemaFreeParserCtxt">xmlSchemaFreeParserCtxt</a> (<a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlSchemaFreeValidCtxt">xmlSchemaFreeValidCtxt</a> (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> <a href="#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> <a href="#xmlSchemaNewMemParserCtxt">xmlSchemaNewMemParserCtxt</a> (const char * buffer, <br /> int size)</pre>
+<pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> <a href="#xmlSchemaNewParserCtxt">xmlSchemaNewParserCtxt</a> (const char * URL)</pre>
+<pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> <a href="#xmlSchemaNewValidCtxt">xmlSchemaNewValidCtxt</a> (<a href="libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> schema)</pre>
+<pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> <a href="#xmlSchemaParse">xmlSchemaParse</a> (<a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt)</pre>
+<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="#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="#xmlSchemaValidateStream">xmlSchemaValidateStream</a> (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc, <br /> <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data)</pre>
+<pre class="programlisting">Function type: <a href="#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a>
+void <a href="#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a>
+void <a href="#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<h2>Description</h2>
+<h3><a name="xmlSchema" id="xmlSchema">Structure xmlSchema</a></h3><pre class="programlisting">Structure xmlSchema<br />struct _xmlSchema {
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : schema name
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * targetNamespace : the target namespace
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * version
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * id
+ <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc
+ <a href="libxml-schemasInternals.html#xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a> annot
+ int flags
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> typeDecl
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> attrDecl
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> attrgrpDecl
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> elemDecl
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> notaDecl
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> schemasImports
+ void * _private : unused by the library for users or bind
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> groupDecl
+ <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict
+ void * includes : the includes, this is opaque for now
+ int preserve : whether to free the document
+}</pre><h3><a name="xmlSchemaParserCtxt" id="xmlSchemaParserCtxt">Structure xmlSchemaParserCtxt</a></h3><pre class="programlisting">Structure xmlSchemaParserCtxt<br />struct _xmlSchemaParserCtxt {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlSchemaValidCtxt" id="xmlSchemaValidCtxt">Structure xmlSchemaValidCtxt</a></h3><pre class="programlisting">Structure xmlSchemaValidCtxt<br />struct _xmlSchemaValidCtxt {
+The content of this structure is not made public by the API.
+}</pre><h3>Enum <a name="xmlSchemaValidError" id="xmlSchemaValidError">xmlSchemaValidError</a></h3><pre class="programlisting">Enum xmlSchemaValidError {
+ <a name="XML_SCHEMAS_ERR_OK" id="XML_SCHEMAS_ERR_OK">XML_SCHEMAS_ERR_OK</a> = 0
+ <a name="XML_SCHEMAS_ERR_NOROOT" id="XML_SCHEMAS_ERR_NOROOT">XML_SCHEMAS_ERR_NOROOT</a> = 1
+ <a name="XML_SCHEMAS_ERR_UNDECLAREDELEM" id="XML_SCHEMAS_ERR_UNDECLAREDELEM">XML_SCHEMAS_ERR_UNDECLAREDELEM</a> = 2
+ <a name="XML_SCHEMAS_ERR_NOTTOPLEVEL" id="XML_SCHEMAS_ERR_NOTTOPLEVEL">XML_SCHEMAS_ERR_NOTTOPLEVEL</a> = 3
+ <a name="XML_SCHEMAS_ERR_MISSING" id="XML_SCHEMAS_ERR_MISSING">XML_SCHEMAS_ERR_MISSING</a> = 4
+ <a name="XML_SCHEMAS_ERR_WRONGELEM" id="XML_SCHEMAS_ERR_WRONGELEM">XML_SCHEMAS_ERR_WRONGELEM</a> = 5
+ <a name="XML_SCHEMAS_ERR_NOTYPE" id="XML_SCHEMAS_ERR_NOTYPE">XML_SCHEMAS_ERR_NOTYPE</a> = 6
+ <a name="XML_SCHEMAS_ERR_NOROLLBACK" id="XML_SCHEMAS_ERR_NOROLLBACK">XML_SCHEMAS_ERR_NOROLLBACK</a> = 7
+ <a name="XML_SCHEMAS_ERR_ISABSTRACT" id="XML_SCHEMAS_ERR_ISABSTRACT">XML_SCHEMAS_ERR_ISABSTRACT</a> = 8
+ <a name="XML_SCHEMAS_ERR_NOTEMPTY" id="XML_SCHEMAS_ERR_NOTEMPTY">XML_SCHEMAS_ERR_NOTEMPTY</a> = 9
+ <a name="XML_SCHEMAS_ERR_ELEMCONT" id="XML_SCHEMAS_ERR_ELEMCONT">XML_SCHEMAS_ERR_ELEMCONT</a> = 10
+ <a name="XML_SCHEMAS_ERR_HAVEDEFAULT" id="XML_SCHEMAS_ERR_HAVEDEFAULT">XML_SCHEMAS_ERR_HAVEDEFAULT</a> = 11
+ <a name="XML_SCHEMAS_ERR_NOTNILLABLE" id="XML_SCHEMAS_ERR_NOTNILLABLE">XML_SCHEMAS_ERR_NOTNILLABLE</a> = 12
+ <a name="XML_SCHEMAS_ERR_EXTRACONTENT" id="XML_SCHEMAS_ERR_EXTRACONTENT">XML_SCHEMAS_ERR_EXTRACONTENT</a> = 13
+ <a name="XML_SCHEMAS_ERR_INVALIDATTR" id="XML_SCHEMAS_ERR_INVALIDATTR">XML_SCHEMAS_ERR_INVALIDATTR</a> = 14
+ <a name="XML_SCHEMAS_ERR_INVALIDELEM" id="XML_SCHEMAS_ERR_INVALIDELEM">XML_SCHEMAS_ERR_INVALIDELEM</a> = 15
+ <a name="XML_SCHEMAS_ERR_NOTDETERMINIST" id="XML_SCHEMAS_ERR_NOTDETERMINIST">XML_SCHEMAS_ERR_NOTDETERMINIST</a> = 16
+ <a name="XML_SCHEMAS_ERR_CONSTRUCT" id="XML_SCHEMAS_ERR_CONSTRUCT">XML_SCHEMAS_ERR_CONSTRUCT</a> = 17
+ <a name="XML_SCHEMAS_ERR_INTERNAL" id="XML_SCHEMAS_ERR_INTERNAL">XML_SCHEMAS_ERR_INTERNAL</a> = 18
+ <a name="XML_SCHEMAS_ERR_NOTSIMPLE" id="XML_SCHEMAS_ERR_NOTSIMPLE">XML_SCHEMAS_ERR_NOTSIMPLE</a> = 19
+ <a name="XML_SCHEMAS_ERR_ATTRUNKNOWN" id="XML_SCHEMAS_ERR_ATTRUNKNOWN">XML_SCHEMAS_ERR_ATTRUNKNOWN</a> = 20
+ <a name="XML_SCHEMAS_ERR_ATTRINVALID" id="XML_SCHEMAS_ERR_ATTRINVALID">XML_SCHEMAS_ERR_ATTRINVALID</a> = 21
+ <a name="XML_SCHEMAS_ERR_VALUE" id="XML_SCHEMAS_ERR_VALUE">XML_SCHEMAS_ERR_VALUE</a> = 22
+ <a name="XML_SCHEMAS_ERR_FACET" id="XML_SCHEMAS_ERR_FACET">XML_SCHEMAS_ERR_FACET</a> = 23
+ <a name="XML_SCHEMAS_ERR_" id="XML_SCHEMAS_ERR_">XML_SCHEMAS_ERR_</a> = 24
+ <a name="XML_SCHEMAS_ERR_XXX" id="XML_SCHEMAS_ERR_XXX">XML_SCHEMAS_ERR_XXX</a> = 25
+}
+</pre><h3><a name="xmlSchemaDump" id="xmlSchemaDump"></a>Function: xmlSchemaDump</h3><pre class="programlisting">void xmlSchemaDump (FILE * output, <br /> <a href="libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> schema)<br />
+</pre><p>Dump a Schema structure.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the file output</td></tr><tr><td><span class="term"><i><tt>schema</tt></i>:</span></td><td>a schema structure</td></tr></tbody></table></div><h3><a name="xmlSchemaFree" id="xmlSchemaFree"></a>Function: xmlSchemaFree</h3><pre class="programlisting">void xmlSchemaFree (<a href="libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> schema)<br />
+</pre><p>Deallocate a Schema 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="xmlSchemaFreeParserCtxt" id="xmlSchemaFreeParserCtxt"></a>Function: xmlSchemaFreeParserCtxt</h3><pre class="programlisting">void xmlSchemaFreeParserCtxt (<a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</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="xmlSchemaFreeValidCtxt" id="xmlSchemaFreeValidCtxt"></a>Function: xmlSchemaFreeValidCtxt</h3><pre class="programlisting">void xmlSchemaFreeValidCtxt (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</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="xmlSchemaNewDocParserCtxt" id="xmlSchemaNewDocParserCtxt"></a>Function: xmlSchemaNewDocParserCtxt</h3><pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> xmlSchemaNewDocParserCtxt (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Create an XML Schemas 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="xmlSchemaNewMemParserCtxt" id="xmlSchemaNewMemParserCtxt"></a>Function: xmlSchemaNewMemParserCtxt</h3><pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> xmlSchemaNewMemParserCtxt (const char * buffer, <br /> int size)<br />
+</pre><p>Create an XML Schemas parse context for that memory buffer expected to contain an XML Schemas 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="xmlSchemaNewParserCtxt" id="xmlSchemaNewParserCtxt"></a>Function: xmlSchemaNewParserCtxt</h3><pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> xmlSchemaNewParserCtxt (const char * URL)<br />
+</pre><p>Create an XML Schemas parse context for that file/resource expected to contain an XML Schemas 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="xmlSchemaNewValidCtxt" id="xmlSchemaNewValidCtxt"></a>Function: xmlSchemaNewValidCtxt</h3><pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> xmlSchemaNewValidCtxt (<a href="libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> schema)<br />
+</pre><p>Create an XML Schemas 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 Schemas</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="xmlSchemaParse" id="xmlSchemaParse"></a>Function: xmlSchemaParse</h3><pre class="programlisting"><a href="libxml-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> xmlSchemaParse (<a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances. *WARNING* this interface is highly subject to change</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 Schema structure built from the resource or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlSchemaSetParserErrors" id="xmlSchemaSetParserErrors"></a>Function: xmlSchemaSetParserErrors</h3><pre class="programlisting">void xmlSchemaSetParserErrors (<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)<br />
+</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 schema 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="xmlSchemaSetValidErrors" id="xmlSchemaSetValidErrors"></a>Function: xmlSchemaSetValidErrors</h3><pre class="programlisting">void xmlSchemaSetValidErrors (<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)<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 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="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>
+<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>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 schemas valid, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidateStream" id="xmlSchemaValidateStream"></a>Function: xmlSchemaValidateStream</h3><pre class="programlisting">int xmlSchemaValidateStream (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc, <br /> <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> void * user_data)<br />
+</pre><p>Validate 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 schema validation context</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>the input to use for reading the data</td></tr><tr><td><span class="term"><i><tt>enc</tt></i>:</span></td><td>an optional encoding information</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>a SAX handler for the resulting events</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>the context to provide to the SAX handler.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the document is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidityErrorFunc" id="xmlSchemaValidityErrorFunc"></a>Function type: xmlSchemaValidityErrorFunc</h3><pre class="programlisting">Function type: xmlSchemaValidityErrorFunc
+void xmlSchemaValidityErrorFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p></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="xmlSchemaValidityWarningFunc" id="xmlSchemaValidityWarningFunc"></a>Function type: xmlSchemaValidityWarningFunc</h3><pre class="programlisting">Function type: xmlSchemaValidityWarningFunc
+void xmlSchemaValidityWarningFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p></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-xmlschemastypes.html b/doc/html/libxml-xmlschemastypes.html
new file mode 100644
index 0000000..0e54b2d
--- /dev/null
+++ b/doc/html/libxml-xmlschemastypes.html
@@ -0,0 +1,47 @@
+<?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 xmlschemastypes from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlschemastypes 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlschemas.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlschemas.html">xmlschemas</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-xmlstring.html">xmlstring</a></th><td><a accesskey="n" href="libxml-xmlstring.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>module providing the XML Schema Datatypes implementation both definition and validity checking </p><h2>Table of Contents</h2><pre class="programlisting">int <a href="#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a> (<a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> facet, <br /> <a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> typeDecl, <br /> <a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#xmlSchemaCleanupTypes">xmlSchemaCleanupTypes</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlSchemaCompareValues">xmlSchemaCompareValues</a> (<a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> x, <br /> <a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> y)</pre>
+<pre class="programlisting">void <a href="#xmlSchemaFreeFacet">xmlSchemaFreeFacet</a> (<a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> facet)</pre>
+<pre class="programlisting">void <a href="#xmlSchemaFreeValue">xmlSchemaFreeValue</a> (<a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> value)</pre>
+<pre class="programlisting"><a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> <a href="#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a> (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">void <a href="#xmlSchemaInitTypes">xmlSchemaInitTypes</a> (void)</pre>
+<pre class="programlisting"><a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> <a href="#xmlSchemaNewFacet">xmlSchemaNewFacet</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlSchemaValPredefTypeNode">xmlSchemaValPredefTypeNode</a> (<a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> * val, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">int <a href="#xmlSchemaValidateFacet">xmlSchemaValidateFacet</a> (<a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> base, <br /> <a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> facet, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> val)</pre>
+<pre class="programlisting">int <a href="#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a> (<a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> * val)</pre>
+<h2>Description</h2>
+<h3><a name="xmlSchemaCheckFacet" id="xmlSchemaCheckFacet"></a>Function: xmlSchemaCheckFacet</h3><pre class="programlisting">int xmlSchemaCheckFacet (<a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> facet, <br /> <a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> typeDecl, <br /> <a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Checks the default values types, especially for facets</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>facet</tt></i>:</span></td><td>the facet</td></tr><tr><td><span class="term"><i><tt>typeDecl</tt></i>:</span></td><td>the schema type definition</td></tr><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the schema parser context or NULL</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>name of the type</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if okay or -1 in cae of error</td></tr></tbody></table></div><h3><a name="xmlSchemaCleanupTypes" id="xmlSchemaCleanupTypes"></a>Function: xmlSchemaCleanupTypes</h3><pre class="programlisting">void xmlSchemaCleanupTypes (void)<br />
+</pre><p>Cleanup the default XML Schemas type library</p>
+<h3><a name="xmlSchemaCompareValues" id="xmlSchemaCompareValues"></a>Function: xmlSchemaCompareValues</h3><pre class="programlisting">int xmlSchemaCompareValues (<a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> x, <br /> <a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> y)<br />
+</pre><p>Compare 2 values</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>x</tt></i>:</span></td><td>a first value</td></tr><tr><td><span class="term"><i><tt>y</tt></i>:</span></td><td>a second value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 if x &lt; y, 0 if x == y, 1 if x &gt; y, 2 if x &lt;&gt; y, and -2 in case of error</td></tr></tbody></table></div><h3><a name="xmlSchemaFreeFacet" id="xmlSchemaFreeFacet"></a>Function: xmlSchemaFreeFacet</h3><pre class="programlisting">void xmlSchemaFreeFacet (<a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> facet)<br />
+</pre><p>Deallocate a Schema Facet structure.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>facet</tt></i>:</span></td><td>a schema facet structure</td></tr></tbody></table></div><h3><a name="xmlSchemaFreeValue" id="xmlSchemaFreeValue"></a>Function: xmlSchemaFreeValue</h3><pre class="programlisting">void xmlSchemaFreeValue (<a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> value)<br />
+</pre><p>Cleanup the default XML Schemas type library</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value to free</td></tr></tbody></table></div><h3><a name="xmlSchemaGetPredefinedType" id="xmlSchemaGetPredefinedType"></a>Function: xmlSchemaGetPredefinedType</h3><pre class="programlisting"><a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> xmlSchemaGetPredefinedType (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns)<br />
+</pre><p>Lookup a type in the default XML Schemas type library</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 type name</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>the URI of the namespace usually "http://www.w3.org/2001/XMLSchema"</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the type if found, NULL otherwise</td></tr></tbody></table></div><h3><a name="xmlSchemaInitTypes" id="xmlSchemaInitTypes"></a>Function: xmlSchemaInitTypes</h3><pre class="programlisting">void xmlSchemaInitTypes (void)<br />
+</pre><p>Initialize the default XML Schemas type library</p>
+<h3><a name="xmlSchemaNewFacet" id="xmlSchemaNewFacet"></a>Function: xmlSchemaNewFacet</h3><pre class="programlisting"><a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> xmlSchemaNewFacet (void)<br />
+</pre><p>Allocate a new Facet structure.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly allocated structure or NULL in case or error</td></tr></tbody></table></div><h3><a name="xmlSchemaValPredefTypeNode" id="xmlSchemaValPredefTypeNode"></a>Function: xmlSchemaValPredefTypeNode</h3><pre class="programlisting">int xmlSchemaValPredefTypeNode (<a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> * val, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the predefined type</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value to check</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the return computed value</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node containing the value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidateFacet" id="xmlSchemaValidateFacet"></a>Function: xmlSchemaValidateFacet</h3><pre class="programlisting">int xmlSchemaValidateFacet (<a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> base, <br /> <a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> facet, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> val)<br />
+</pre><p>Check a value against a facet condition</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>base</tt></i>:</span></td><td>the base type</td></tr><tr><td><span class="term"><i><tt>facet</tt></i>:</span></td><td>the facet to check</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the lexical repr of the value to validate</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the precomputed value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the element is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidatePredefinedType" id="xmlSchemaValidatePredefinedType"></a>Function: xmlSchemaValidatePredefinedType</h3><pre class="programlisting">int xmlSchemaValidatePredefinedType (<a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a> type, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br /> <a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> * val)<br />
+</pre><p>Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the predefined type</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value to check</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the return computed value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xmlstring.html b/doc/html/libxml-xmlstring.html
new file mode 100644
index 0000000..4b6acd8
--- /dev/null
+++ b/doc/html/libxml-xmlstring.html
@@ -0,0 +1,106 @@
+<?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 xmlstring from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlstring 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlschemastypes.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlschemastypes.html">xmlschemastypes</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-xmlunicode.html">xmlunicode</a></th><td><a accesskey="n" href="libxml-xmlunicode.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>type and interfaces needed for the internal string handling of the library, especially UTF8 processing. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#BAD_CAST">BAD_CAST</a></pre><pre class="programlisting">Typedef unsigned char <a name="xmlChar" id="xmlChar">xmlChar</a>
+</pre><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCharStrdup">xmlCharStrdup</a> (const char * cur)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlCharStrndup">xmlCharStrndup</a> (const char * cur, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlCheckUTF8">xmlCheckUTF8</a> (const unsigned char * utf)</pre>
+<pre class="programlisting">int <a href="#xmlGetUTF8Char">xmlGetUTF8Char</a> (const unsigned char * utf, <br /> int * len)</pre>
+<pre class="programlisting">int <a href="#xmlStrEqual">xmlStrEqual</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2)</pre>
+<pre class="programlisting">int <a href="#xmlStrPrintf">xmlStrPrintf</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * buf, <br /> int len, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * msg, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlStrQEqual">xmlStrQEqual</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pref, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting">int <a href="#xmlStrVPrintf">xmlStrVPrintf</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * buf, <br /> int len, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * msg, <br /> va_list ap)</pre>
+<pre class="programlisting">int <a href="#xmlStrcasecmp">xmlStrcasecmp</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStrcasestr">xmlStrcasestr</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStrcat">xmlStrcat</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * add)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStrchr">xmlStrchr</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> val)</pre>
+<pre class="programlisting">int <a href="#xmlStrcmp">xmlStrcmp</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStrdup">xmlStrdup</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur)</pre>
+<pre class="programlisting">int <a href="#xmlStrlen">xmlStrlen</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting">int <a href="#xmlStrncasecmp">xmlStrncasecmp</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStrncat">xmlStrncat</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * add, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStrncatNew">xmlStrncatNew</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlStrncmp">xmlStrncmp</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStrndup">xmlStrndup</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> int len)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStrstr">xmlStrstr</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlStrsub">xmlStrsub</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int start, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlUTF8Charcmp">xmlUTF8Charcmp</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf2)</pre>
+<pre class="programlisting">int <a href="#xmlUTF8Size">xmlUTF8Size</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf)</pre>
+<pre class="programlisting">int <a href="#xmlUTF8Strlen">xmlUTF8Strlen</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf)</pre>
+<pre class="programlisting">int <a href="#xmlUTF8Strloc">xmlUTF8Strloc</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utfchar)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlUTF8Strndup">xmlUTF8Strndup</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlUTF8Strpos">xmlUTF8Strpos</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> int pos)</pre>
+<pre class="programlisting">int <a href="#xmlUTF8Strsize">xmlUTF8Strsize</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlUTF8Strsub">xmlUTF8Strsub</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> int start, <br /> int len)</pre>
+<h2>Description</h2>
+<h3><a name="BAD_CAST" id="BAD_CAST"></a>Macro: BAD_CAST</h3><pre>#define BAD_CAST</pre><p>Macro to cast a string to an <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * when one know its safe.</p>
+<h3><a name="xmlCharStrdup" id="xmlCharStrdup"></a>Function: xmlCharStrdup</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCharStrdup (const char * cur)<br />
+</pre><p>a strdup for char's to xmlChar's</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the input char *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * or NULL</td></tr></tbody></table></div><h3><a name="xmlCharStrndup" id="xmlCharStrndup"></a>Function: xmlCharStrndup</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlCharStrndup (const char * cur, <br /> int len)<br />
+</pre><p>a strndup for char's to xmlChar's</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the input char *</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the len of @cur</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * or NULL</td></tr></tbody></table></div><h3><a name="xmlCheckUTF8" id="xmlCheckUTF8"></a>Function: xmlCheckUTF8</h3><pre class="programlisting">int xmlCheckUTF8 (const unsigned char * utf)<br />
+</pre><p>Checks @utf for being valid UTF-8. @utf is assumed to be null-terminated. This function is not super-strict, as it will allow longer UTF-8 sequences than necessary. Note that Java is capable of producing these sequences if provoked. Also note, this routine checks for the 4-byte maximum size, but does not check for 0x10ffff maximum value.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf</tt></i>:</span></td><td>Pointer to putative UTF-8 encoded string.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>value: true if @utf is valid.</td></tr></tbody></table></div><h3><a name="xmlGetUTF8Char" id="xmlGetUTF8Char"></a>Function: xmlGetUTF8Char</h3><pre class="programlisting">int xmlGetUTF8Char (const unsigned char * utf, <br /> int * len)<br />
+</pre><p>Read one UTF8 Char from @utf</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf</tt></i>:</span></td><td>a sequence of UTF-8 encoded bytes</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>a pointer to @bytes len</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the char value or -1 in case of error, and updates *len with the number of bytes consumed</td></tr></tbody></table></div><h3><a name="xmlStrEqual" id="xmlStrEqual"></a>Function: xmlStrEqual</h3><pre class="programlisting">int xmlStrEqual (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2)<br />
+</pre><p>Check if both string are equal of have same content Should be a bit more readable and faster than xmlStrEqual()</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str1</tt></i>:</span></td><td>the first <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>str2</tt></i>:</span></td><td>the second <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if they are equal, 0 if they are different</td></tr></tbody></table></div><h3><a name="xmlStrPrintf" id="xmlStrPrintf"></a>Function: xmlStrPrintf</h3><pre class="programlisting">int xmlStrPrintf (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * buf, <br /> int len, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * msg, <br /> ... ...)<br />
+</pre><p>Formats @msg and places result into @buf.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the result buffer.</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the result buffer length.</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message with printf formatting.</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the message.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of <a href="libxml-SAX.html#characters">characters</a> written to @buf or -1 if an error occurs.</td></tr></tbody></table></div><h3><a name="xmlStrQEqual" id="xmlStrQEqual"></a>Function: xmlStrQEqual</h3><pre class="programlisting">int xmlStrQEqual (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pref, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>Check if a QName is Equal to a given string</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pref</tt></i>:</span></td><td>the prefix of the QName</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the localname of the QName</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the second <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if they are equal, 0 if they are different</td></tr></tbody></table></div><h3><a name="xmlStrVPrintf" id="xmlStrVPrintf"></a>Function: xmlStrVPrintf</h3><pre class="programlisting">int xmlStrVPrintf (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * buf, <br /> int len, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * msg, <br /> va_list ap)<br />
+</pre><p>Formats @msg and places result into @buf.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the result buffer.</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the result buffer length.</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message with printf formatting.</td></tr><tr><td><span class="term"><i><tt>ap</tt></i>:</span></td><td>extra parameters for the message.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of <a href="libxml-SAX.html#characters">characters</a> written to @buf or -1 if an error occurs.</td></tr></tbody></table></div><h3><a name="xmlStrcasecmp" id="xmlStrcasecmp"></a>Function: xmlStrcasecmp</h3><pre class="programlisting">int xmlStrcasecmp (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2)<br />
+</pre><p>a strcasecmp for xmlChar's</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str1</tt></i>:</span></td><td>the first <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>str2</tt></i>:</span></td><td>the second <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the integer result of the comparison</td></tr></tbody></table></div><h3><a name="xmlStrcasestr" id="xmlStrcasestr"></a>Function: xmlStrcasestr</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStrcasestr (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)<br />
+</pre><p>a case-ignoring strstr for xmlChar's</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 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * array (haystack)</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> to search (needle)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * for the first occurrence or NULL.</td></tr></tbody></table></div><h3><a name="xmlStrcat" id="xmlStrcat"></a>Function: xmlStrcat</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStrcat (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * add)<br />
+</pre><p>a strcat for array of xmlChar's. Since they are supposed to be encoded in UTF-8 or an encoding with 8bit based chars, we assume a termination mark of '0'.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the original <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * array</td></tr><tr><td><span class="term"><i><tt>add</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * array added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * containing the concatenated string.</td></tr></tbody></table></div><h3><a name="xmlStrchr" id="xmlStrchr"></a>Function: xmlStrchr</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStrchr (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> val)<br />
+</pre><p>a strchr for xmlChar's</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 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * array</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> to search</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * for the first occurrence or NULL.</td></tr></tbody></table></div><h3><a name="xmlStrcmp" id="xmlStrcmp"></a>Function: xmlStrcmp</h3><pre class="programlisting">int xmlStrcmp (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2)<br />
+</pre><p>a strcmp for xmlChar's</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str1</tt></i>:</span></td><td>the first <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>str2</tt></i>:</span></td><td>the second <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the integer result of the comparison</td></tr></tbody></table></div><h3><a name="xmlStrdup" id="xmlStrdup"></a>Function: xmlStrdup</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStrdup (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur)<br />
+</pre><p>a strdup for array of xmlChar's. Since they are supposed to be encoded in UTF-8 or an encoding with 8bit based chars, we assume a termination mark of '0'.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the input <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * or NULL</td></tr></tbody></table></div><h3><a name="xmlStrlen" id="xmlStrlen"></a>Function: xmlStrlen</h3><pre class="programlisting">int xmlStrlen (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>length of a xmlChar's string</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 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> contained in the ARRAY.</td></tr></tbody></table></div><h3><a name="xmlStrncasecmp" id="xmlStrncasecmp"></a>Function: xmlStrncasecmp</h3><pre class="programlisting">int xmlStrncasecmp (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2, <br /> int len)<br />
+</pre><p>a strncasecmp for xmlChar's</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str1</tt></i>:</span></td><td>the first <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>str2</tt></i>:</span></td><td>the second <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the max comparison length</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the integer result of the comparison</td></tr></tbody></table></div><h3><a name="xmlStrncat" id="xmlStrncat"></a>Function: xmlStrncat</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStrncat (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * add, <br /> int len)<br />
+</pre><p>a strncat for array of xmlChar's, it will extend @cur with the len first bytes of @add.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the original <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * array</td></tr><tr><td><span class="term"><i><tt>add</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * array added</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of @add</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *, the original @cur is reallocated if needed and should not be freed</td></tr></tbody></table></div><h3><a name="xmlStrncatNew" id="xmlStrncatNew"></a>Function: xmlStrncatNew</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStrncatNew (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2, <br /> int len)<br />
+</pre><p>same as xmlStrncat, but creates a new string. The original two strings are not freed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str1</tt></i>:</span></td><td>first <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>str2</tt></i>:</span></td><td>second <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the len of @str2</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * or NULL</td></tr></tbody></table></div><h3><a name="xmlStrncmp" id="xmlStrncmp"></a>Function: xmlStrncmp</h3><pre class="programlisting">int xmlStrncmp (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str2, <br /> int len)<br />
+</pre><p>a strncmp for xmlChar's</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str1</tt></i>:</span></td><td>the first <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>str2</tt></i>:</span></td><td>the second <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the max comparison length</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the integer result of the comparison</td></tr></tbody></table></div><h3><a name="xmlStrndup" id="xmlStrndup"></a>Function: xmlStrndup</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStrndup (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br /> int len)<br />
+</pre><p>a strndup for array of xmlChar's</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the input <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the len of @cur</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * or NULL</td></tr></tbody></table></div><h3><a name="xmlStrstr" id="xmlStrstr"></a>Function: xmlStrstr</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStrstr (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)<br />
+</pre><p>a strstr for xmlChar's</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 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * array (haystack)</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> to search (needle)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * for the first occurrence or NULL.</td></tr></tbody></table></div><h3><a name="xmlStrsub" id="xmlStrsub"></a>Function: xmlStrsub</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlStrsub (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> int start, <br /> int len)<br />
+</pre><p>Extract a substring of a given string</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 <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * array (haystack)</td></tr><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the index of the first char (zero based)</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the substring</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * for the first occurrence or NULL.</td></tr></tbody></table></div><h3><a name="xmlUTF8Charcmp" id="xmlUTF8Charcmp"></a>Function: xmlUTF8Charcmp</h3><pre class="programlisting">int xmlUTF8Charcmp (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf1, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf2)<br />
+</pre><p>compares the two UCS4 values</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf1</tt></i>:</span></td><td>pointer to first UTF8 char</td></tr><tr><td><span class="term"><i><tt>utf2</tt></i>:</span></td><td>pointer to second UTF8 char</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>result of the compare as with <a href="libxml-xmlstring.html#xmlStrncmp">xmlStrncmp</a></td></tr></tbody></table></div><h3><a name="xmlUTF8Size" id="xmlUTF8Size"></a>Function: xmlUTF8Size</h3><pre class="programlisting">int xmlUTF8Size (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf)<br />
+</pre><p>calculates the internal size of a UTF8 character</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf</tt></i>:</span></td><td>pointer to the UTF8 character</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the numbers of bytes in the character, -1 on format error</td></tr></tbody></table></div><h3><a name="xmlUTF8Strlen" id="xmlUTF8Strlen"></a>Function: xmlUTF8Strlen</h3><pre class="programlisting">int xmlUTF8Strlen (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf)<br />
+</pre><p>compute the length of an UTF8 string, it doesn't do a full UTF8 checking of the content of the string.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf</tt></i>:</span></td><td>a sequence of UTF-8 encoded bytes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of <a href="libxml-SAX.html#characters">characters</a> in the string or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlUTF8Strloc" id="xmlUTF8Strloc"></a>Function: xmlUTF8Strloc</h3><pre class="programlisting">int xmlUTF8Strloc (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utfchar)<br />
+</pre><p>a function to provide the relative location of a UTF8 char</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf</tt></i>:</span></td><td>the input UTF8 *</td></tr><tr><td><span class="term"><i><tt>utfchar</tt></i>:</span></td><td>the UTF8 character to be found</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the relative character position of the desired char or -1 if not found</td></tr></tbody></table></div><h3><a name="xmlUTF8Strndup" id="xmlUTF8Strndup"></a>Function: xmlUTF8Strndup</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlUTF8Strndup (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> int len)<br />
+</pre><p>a strndup for array of UTF8's</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf</tt></i>:</span></td><td>the input UTF8 *</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the len of @utf (in chars)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new UTF8 * or NULL</td></tr></tbody></table></div><h3><a name="xmlUTF8Strpos" id="xmlUTF8Strpos"></a>Function: xmlUTF8Strpos</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlUTF8Strpos (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> int pos)<br />
+</pre><p>a function to provide the equivalent of fetching a character from a string array</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf</tt></i>:</span></td><td>the input UTF8 *</td></tr><tr><td><span class="term"><i><tt>pos</tt></i>:</span></td><td>the position of the desired UTF8 char (in chars)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the UTF8 character or NULL</td></tr></tbody></table></div><h3><a name="xmlUTF8Strsize" id="xmlUTF8Strsize"></a>Function: xmlUTF8Strsize</h3><pre class="programlisting">int xmlUTF8Strsize (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> int len)<br />
+</pre><p>storage size of an UTF8 string</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf</tt></i>:</span></td><td>a sequence of UTF-8 encoded bytes</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml-SAX.html#characters">characters</a> in the array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the storage size of the first 'len' <a href="libxml-SAX.html#characters">characters</a> of ARRAY</td></tr></tbody></table></div><h3><a name="xmlUTF8Strsub" id="xmlUTF8Strsub"></a>Function: xmlUTF8Strsub</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlUTF8Strsub (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * utf, <br /> int start, <br /> int len)<br />
+</pre><p>Create a substring from a given UTF-8 string Note: positions are given in units of UTF-8 chars</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>utf</tt></i>:</span></td><td>a sequence of UTF-8 encoded bytes</td></tr><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>relative pos of first char</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>total number to copy</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to a newly created string or NULL if any problem</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xmlunicode.html b/doc/html/libxml-xmlunicode.html
new file mode 100644
index 0000000..8250406
--- /dev/null
+++ b/doc/html/libxml-xmlunicode.html
@@ -0,0 +1,512 @@
+<?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 xmlunicode from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlunicode 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlstring.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlstring.html">xmlstring</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-xmlversion.html">xmlversion</a></th><td><a accesskey="n" href="libxml-xmlversion.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>API for the Unicode character APIs This file is automatically generated from the UCS description files of the Unicode Character Database</p><h2>Table of Contents</h2><pre class="programlisting">int <a href="#xmlUCSIsAegeanNumbers">xmlUCSIsAegeanNumbers</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsAlphabeticPresentationForms">xmlUCSIsAlphabeticPresentationForms</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsArabic">xmlUCSIsArabic</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsArabicPresentationFormsA">xmlUCSIsArabicPresentationFormsA</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsArabicPresentationFormsB">xmlUCSIsArabicPresentationFormsB</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsArmenian">xmlUCSIsArmenian</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsArrows">xmlUCSIsArrows</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsBasicLatin">xmlUCSIsBasicLatin</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsBengali">xmlUCSIsBengali</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsBlock">xmlUCSIsBlock</a> (int code, <br /> const char * block)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsBlockElements">xmlUCSIsBlockElements</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsBopomofo">xmlUCSIsBopomofo</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsBopomofoExtended">xmlUCSIsBopomofoExtended</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsBoxDrawing">xmlUCSIsBoxDrawing</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsBraillePatterns">xmlUCSIsBraillePatterns</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsBuhid">xmlUCSIsBuhid</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsByzantineMusicalSymbols">xmlUCSIsByzantineMusicalSymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCJKCompatibility">xmlUCSIsCJKCompatibility</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCJKCompatibilityForms">xmlUCSIsCJKCompatibilityForms</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCJKCompatibilityIdeographs">xmlUCSIsCJKCompatibilityIdeographs</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCJKCompatibilityIdeographsSupplement">xmlUCSIsCJKCompatibilityIdeographsSupplement</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCJKRadicalsSupplement">xmlUCSIsCJKRadicalsSupplement</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCJKSymbolsandPunctuation">xmlUCSIsCJKSymbolsandPunctuation</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCJKUnifiedIdeographs">xmlUCSIsCJKUnifiedIdeographs</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCJKUnifiedIdeographsExtensionA">xmlUCSIsCJKUnifiedIdeographsExtensionA</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCJKUnifiedIdeographsExtensionB">xmlUCSIsCJKUnifiedIdeographsExtensionB</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCat">xmlUCSIsCat</a> (int code, <br /> const char * cat)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatC">xmlUCSIsCatC</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatCc">xmlUCSIsCatCc</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatCf">xmlUCSIsCatCf</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatCo">xmlUCSIsCatCo</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatCs">xmlUCSIsCatCs</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatL">xmlUCSIsCatL</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatLl">xmlUCSIsCatLl</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatLm">xmlUCSIsCatLm</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatLo">xmlUCSIsCatLo</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatLt">xmlUCSIsCatLt</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatLu">xmlUCSIsCatLu</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatM">xmlUCSIsCatM</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatMc">xmlUCSIsCatMc</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatMe">xmlUCSIsCatMe</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatMn">xmlUCSIsCatMn</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatN">xmlUCSIsCatN</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatNd">xmlUCSIsCatNd</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatNl">xmlUCSIsCatNl</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatNo">xmlUCSIsCatNo</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatP">xmlUCSIsCatP</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatPc">xmlUCSIsCatPc</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatPd">xmlUCSIsCatPd</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatPe">xmlUCSIsCatPe</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatPf">xmlUCSIsCatPf</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatPi">xmlUCSIsCatPi</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatPo">xmlUCSIsCatPo</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatPs">xmlUCSIsCatPs</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatS">xmlUCSIsCatS</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatSc">xmlUCSIsCatSc</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatSk">xmlUCSIsCatSk</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatSm">xmlUCSIsCatSm</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatSo">xmlUCSIsCatSo</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatZ">xmlUCSIsCatZ</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatZl">xmlUCSIsCatZl</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatZp">xmlUCSIsCatZp</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCatZs">xmlUCSIsCatZs</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCherokee">xmlUCSIsCherokee</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCombiningDiacriticalMarks">xmlUCSIsCombiningDiacriticalMarks</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCombiningDiacriticalMarksforSymbols">xmlUCSIsCombiningDiacriticalMarksforSymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCombiningHalfMarks">xmlUCSIsCombiningHalfMarks</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCombiningMarksforSymbols">xmlUCSIsCombiningMarksforSymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsControlPictures">xmlUCSIsControlPictures</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCurrencySymbols">xmlUCSIsCurrencySymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCypriotSyllabary">xmlUCSIsCypriotSyllabary</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCyrillic">xmlUCSIsCyrillic</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsCyrillicSupplement">xmlUCSIsCyrillicSupplement</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsDeseret">xmlUCSIsDeseret</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsDevanagari">xmlUCSIsDevanagari</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsDingbats">xmlUCSIsDingbats</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsEnclosedAlphanumerics">xmlUCSIsEnclosedAlphanumerics</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsEnclosedCJKLettersandMonths">xmlUCSIsEnclosedCJKLettersandMonths</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsEthiopic">xmlUCSIsEthiopic</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsGeneralPunctuation">xmlUCSIsGeneralPunctuation</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsGeometricShapes">xmlUCSIsGeometricShapes</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsGeorgian">xmlUCSIsGeorgian</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsGothic">xmlUCSIsGothic</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsGreek">xmlUCSIsGreek</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsGreekExtended">xmlUCSIsGreekExtended</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsGreekandCoptic">xmlUCSIsGreekandCoptic</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsGujarati">xmlUCSIsGujarati</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsGurmukhi">xmlUCSIsGurmukhi</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsHalfwidthandFullwidthForms">xmlUCSIsHalfwidthandFullwidthForms</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsHangulCompatibilityJamo">xmlUCSIsHangulCompatibilityJamo</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsHangulJamo">xmlUCSIsHangulJamo</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsHangulSyllables">xmlUCSIsHangulSyllables</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsHanunoo">xmlUCSIsHanunoo</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsHebrew">xmlUCSIsHebrew</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsHighPrivateUseSurrogates">xmlUCSIsHighPrivateUseSurrogates</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsHighSurrogates">xmlUCSIsHighSurrogates</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsHiragana">xmlUCSIsHiragana</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsIPAExtensions">xmlUCSIsIPAExtensions</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsIdeographicDescriptionCharacters">xmlUCSIsIdeographicDescriptionCharacters</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsKanbun">xmlUCSIsKanbun</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsKangxiRadicals">xmlUCSIsKangxiRadicals</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsKannada">xmlUCSIsKannada</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsKatakana">xmlUCSIsKatakana</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsKatakanaPhoneticExtensions">xmlUCSIsKatakanaPhoneticExtensions</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsKhmer">xmlUCSIsKhmer</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsKhmerSymbols">xmlUCSIsKhmerSymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLao">xmlUCSIsLao</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLatin1Supplement">xmlUCSIsLatin1Supplement</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLatinExtendedA">xmlUCSIsLatinExtendedA</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLatinExtendedAdditional">xmlUCSIsLatinExtendedAdditional</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLatinExtendedB">xmlUCSIsLatinExtendedB</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLetterlikeSymbols">xmlUCSIsLetterlikeSymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLimbu">xmlUCSIsLimbu</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLinearBIdeograms">xmlUCSIsLinearBIdeograms</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLinearBSyllabary">xmlUCSIsLinearBSyllabary</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsLowSurrogates">xmlUCSIsLowSurrogates</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMalayalam">xmlUCSIsMalayalam</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMathematicalAlphanumericSymbols">xmlUCSIsMathematicalAlphanumericSymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMathematicalOperators">xmlUCSIsMathematicalOperators</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMiscellaneousMathematicalSymbolsA">xmlUCSIsMiscellaneousMathematicalSymbolsA</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMiscellaneousMathematicalSymbolsB">xmlUCSIsMiscellaneousMathematicalSymbolsB</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMiscellaneousSymbols">xmlUCSIsMiscellaneousSymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMiscellaneousSymbolsandArrows">xmlUCSIsMiscellaneousSymbolsandArrows</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMiscellaneousTechnical">xmlUCSIsMiscellaneousTechnical</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMongolian">xmlUCSIsMongolian</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMusicalSymbols">xmlUCSIsMusicalSymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsMyanmar">xmlUCSIsMyanmar</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsNumberForms">xmlUCSIsNumberForms</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsOgham">xmlUCSIsOgham</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsOldItalic">xmlUCSIsOldItalic</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsOpticalCharacterRecognition">xmlUCSIsOpticalCharacterRecognition</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsOriya">xmlUCSIsOriya</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsOsmanya">xmlUCSIsOsmanya</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsPhoneticExtensions">xmlUCSIsPhoneticExtensions</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsPrivateUse">xmlUCSIsPrivateUse</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsPrivateUseArea">xmlUCSIsPrivateUseArea</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsRunic">xmlUCSIsRunic</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsShavian">xmlUCSIsShavian</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSinhala">xmlUCSIsSinhala</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSmallFormVariants">xmlUCSIsSmallFormVariants</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSpacingModifierLetters">xmlUCSIsSpacingModifierLetters</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSpecials">xmlUCSIsSpecials</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSuperscriptsandSubscripts">xmlUCSIsSuperscriptsandSubscripts</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSupplementalArrowsA">xmlUCSIsSupplementalArrowsA</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSupplementalArrowsB">xmlUCSIsSupplementalArrowsB</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSupplementalMathematicalOperators">xmlUCSIsSupplementalMathematicalOperators</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSupplementaryPrivateUseAreaA">xmlUCSIsSupplementaryPrivateUseAreaA</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSupplementaryPrivateUseAreaB">xmlUCSIsSupplementaryPrivateUseAreaB</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsSyriac">xmlUCSIsSyriac</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsTagalog">xmlUCSIsTagalog</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsTagbanwa">xmlUCSIsTagbanwa</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsTags">xmlUCSIsTags</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsTaiLe">xmlUCSIsTaiLe</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsTaiXuanJingSymbols">xmlUCSIsTaiXuanJingSymbols</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsTamil">xmlUCSIsTamil</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsTelugu">xmlUCSIsTelugu</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsThaana">xmlUCSIsThaana</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsThai">xmlUCSIsThai</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsTibetan">xmlUCSIsTibetan</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsUgaritic">xmlUCSIsUgaritic</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsUnifiedCanadianAboriginalSyllabics">xmlUCSIsUnifiedCanadianAboriginalSyllabics</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsVariationSelectors">xmlUCSIsVariationSelectors</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsVariationSelectorsSupplement">xmlUCSIsVariationSelectorsSupplement</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsYiRadicals">xmlUCSIsYiRadicals</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsYiSyllables">xmlUCSIsYiSyllables</a> (int code)</pre>
+<pre class="programlisting">int <a href="#xmlUCSIsYijingHexagramSymbols">xmlUCSIsYijingHexagramSymbols</a> (int code)</pre>
+<h2>Description</h2>
+<h3><a name="xmlUCSIsAegeanNumbers" id="xmlUCSIsAegeanNumbers"></a>Function: xmlUCSIsAegeanNumbers</h3><pre class="programlisting">int xmlUCSIsAegeanNumbers (int code)<br />
+</pre><p>Check whether the character is part of AegeanNumbers UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsAlphabeticPresentationForms" id="xmlUCSIsAlphabeticPresentationForms"></a>Function: xmlUCSIsAlphabeticPresentationForms</h3><pre class="programlisting">int xmlUCSIsAlphabeticPresentationForms (int code)<br />
+</pre><p>Check whether the character is part of AlphabeticPresentationForms UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsArabic" id="xmlUCSIsArabic"></a>Function: xmlUCSIsArabic</h3><pre class="programlisting">int xmlUCSIsArabic (int code)<br />
+</pre><p>Check whether the character is part of Arabic UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsArabicPresentationFormsA" id="xmlUCSIsArabicPresentationFormsA"></a>Function: xmlUCSIsArabicPresentationFormsA</h3><pre class="programlisting">int xmlUCSIsArabicPresentationFormsA (int code)<br />
+</pre><p>Check whether the character is part of ArabicPresentationForms-A UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsArabicPresentationFormsB" id="xmlUCSIsArabicPresentationFormsB"></a>Function: xmlUCSIsArabicPresentationFormsB</h3><pre class="programlisting">int xmlUCSIsArabicPresentationFormsB (int code)<br />
+</pre><p>Check whether the character is part of ArabicPresentationForms-B UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsArmenian" id="xmlUCSIsArmenian"></a>Function: xmlUCSIsArmenian</h3><pre class="programlisting">int xmlUCSIsArmenian (int code)<br />
+</pre><p>Check whether the character is part of Armenian UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsArrows" id="xmlUCSIsArrows"></a>Function: xmlUCSIsArrows</h3><pre class="programlisting">int xmlUCSIsArrows (int code)<br />
+</pre><p>Check whether the character is part of Arrows UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsBasicLatin" id="xmlUCSIsBasicLatin"></a>Function: xmlUCSIsBasicLatin</h3><pre class="programlisting">int xmlUCSIsBasicLatin (int code)<br />
+</pre><p>Check whether the character is part of BasicLatin UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsBengali" id="xmlUCSIsBengali"></a>Function: xmlUCSIsBengali</h3><pre class="programlisting">int xmlUCSIsBengali (int code)<br />
+</pre><p>Check whether the character is part of Bengali UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsBlock" id="xmlUCSIsBlock"></a>Function: xmlUCSIsBlock</h3><pre class="programlisting">int xmlUCSIsBlock (int code, <br /> const char * block)<br />
+</pre><p>Check whether the character is part of the UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>block</tt></i>:</span></td><td>UCS block name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true, 0 if false and -1 on unknown block</td></tr></tbody></table></div><h3><a name="xmlUCSIsBlockElements" id="xmlUCSIsBlockElements"></a>Function: xmlUCSIsBlockElements</h3><pre class="programlisting">int xmlUCSIsBlockElements (int code)<br />
+</pre><p>Check whether the character is part of BlockElements UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsBopomofo" id="xmlUCSIsBopomofo"></a>Function: xmlUCSIsBopomofo</h3><pre class="programlisting">int xmlUCSIsBopomofo (int code)<br />
+</pre><p>Check whether the character is part of Bopomofo UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsBopomofoExtended" id="xmlUCSIsBopomofoExtended"></a>Function: xmlUCSIsBopomofoExtended</h3><pre class="programlisting">int xmlUCSIsBopomofoExtended (int code)<br />
+</pre><p>Check whether the character is part of BopomofoExtended UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsBoxDrawing" id="xmlUCSIsBoxDrawing"></a>Function: xmlUCSIsBoxDrawing</h3><pre class="programlisting">int xmlUCSIsBoxDrawing (int code)<br />
+</pre><p>Check whether the character is part of BoxDrawing UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsBraillePatterns" id="xmlUCSIsBraillePatterns"></a>Function: xmlUCSIsBraillePatterns</h3><pre class="programlisting">int xmlUCSIsBraillePatterns (int code)<br />
+</pre><p>Check whether the character is part of BraillePatterns UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsBuhid" id="xmlUCSIsBuhid"></a>Function: xmlUCSIsBuhid</h3><pre class="programlisting">int xmlUCSIsBuhid (int code)<br />
+</pre><p>Check whether the character is part of Buhid UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsByzantineMusicalSymbols" id="xmlUCSIsByzantineMusicalSymbols"></a>Function: xmlUCSIsByzantineMusicalSymbols</h3><pre class="programlisting">int xmlUCSIsByzantineMusicalSymbols (int code)<br />
+</pre><p>Check whether the character is part of ByzantineMusicalSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCJKCompatibility" id="xmlUCSIsCJKCompatibility"></a>Function: xmlUCSIsCJKCompatibility</h3><pre class="programlisting">int xmlUCSIsCJKCompatibility (int code)<br />
+</pre><p>Check whether the character is part of CJKCompatibility UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCJKCompatibilityForms" id="xmlUCSIsCJKCompatibilityForms"></a>Function: xmlUCSIsCJKCompatibilityForms</h3><pre class="programlisting">int xmlUCSIsCJKCompatibilityForms (int code)<br />
+</pre><p>Check whether the character is part of CJKCompatibilityForms UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCJKCompatibilityIdeographs" id="xmlUCSIsCJKCompatibilityIdeographs"></a>Function: xmlUCSIsCJKCompatibilityIdeographs</h3><pre class="programlisting">int xmlUCSIsCJKCompatibilityIdeographs (int code)<br />
+</pre><p>Check whether the character is part of CJKCompatibilityIdeographs UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCJKCompatibilityIdeographsSupplement" id="xmlUCSIsCJKCompatibilityIdeographsSupplement"></a>Function: xmlUCSIsCJKCompatibilityIdeographsSupplement</h3><pre class="programlisting">int xmlUCSIsCJKCompatibilityIdeographsSupplement (int code)<br />
+</pre><p>Check whether the character is part of CJKCompatibilityIdeographsSupplement UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCJKRadicalsSupplement" id="xmlUCSIsCJKRadicalsSupplement"></a>Function: xmlUCSIsCJKRadicalsSupplement</h3><pre class="programlisting">int xmlUCSIsCJKRadicalsSupplement (int code)<br />
+</pre><p>Check whether the character is part of CJKRadicalsSupplement UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCJKSymbolsandPunctuation" id="xmlUCSIsCJKSymbolsandPunctuation"></a>Function: xmlUCSIsCJKSymbolsandPunctuation</h3><pre class="programlisting">int xmlUCSIsCJKSymbolsandPunctuation (int code)<br />
+</pre><p>Check whether the character is part of CJKSymbolsandPunctuation UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCJKUnifiedIdeographs" id="xmlUCSIsCJKUnifiedIdeographs"></a>Function: xmlUCSIsCJKUnifiedIdeographs</h3><pre class="programlisting">int xmlUCSIsCJKUnifiedIdeographs (int code)<br />
+</pre><p>Check whether the character is part of CJKUnifiedIdeographs UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCJKUnifiedIdeographsExtensionA" id="xmlUCSIsCJKUnifiedIdeographsExtensionA"></a>Function: xmlUCSIsCJKUnifiedIdeographsExtensionA</h3><pre class="programlisting">int xmlUCSIsCJKUnifiedIdeographsExtensionA (int code)<br />
+</pre><p>Check whether the character is part of CJKUnifiedIdeographsExtensionA UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCJKUnifiedIdeographsExtensionB" id="xmlUCSIsCJKUnifiedIdeographsExtensionB"></a>Function: xmlUCSIsCJKUnifiedIdeographsExtensionB</h3><pre class="programlisting">int xmlUCSIsCJKUnifiedIdeographsExtensionB (int code)<br />
+</pre><p>Check whether the character is part of CJKUnifiedIdeographsExtensionB UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCat" id="xmlUCSIsCat"></a>Function: xmlUCSIsCat</h3><pre class="programlisting">int xmlUCSIsCat (int code, <br /> const char * cat)<br />
+</pre><p>Check whether the character is part of the UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>cat</tt></i>:</span></td><td>UCS Category name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true, 0 if false and -1 on unknown category</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatC" id="xmlUCSIsCatC"></a>Function: xmlUCSIsCatC</h3><pre class="programlisting">int xmlUCSIsCatC (int code)<br />
+</pre><p>Check whether the character is part of C UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatCc" id="xmlUCSIsCatCc"></a>Function: xmlUCSIsCatCc</h3><pre class="programlisting">int xmlUCSIsCatCc (int code)<br />
+</pre><p>Check whether the character is part of Cc UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatCf" id="xmlUCSIsCatCf"></a>Function: xmlUCSIsCatCf</h3><pre class="programlisting">int xmlUCSIsCatCf (int code)<br />
+</pre><p>Check whether the character is part of Cf UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatCo" id="xmlUCSIsCatCo"></a>Function: xmlUCSIsCatCo</h3><pre class="programlisting">int xmlUCSIsCatCo (int code)<br />
+</pre><p>Check whether the character is part of Co UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatCs" id="xmlUCSIsCatCs"></a>Function: xmlUCSIsCatCs</h3><pre class="programlisting">int xmlUCSIsCatCs (int code)<br />
+</pre><p>Check whether the character is part of Cs UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatL" id="xmlUCSIsCatL"></a>Function: xmlUCSIsCatL</h3><pre class="programlisting">int xmlUCSIsCatL (int code)<br />
+</pre><p>Check whether the character is part of L UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatLl" id="xmlUCSIsCatLl"></a>Function: xmlUCSIsCatLl</h3><pre class="programlisting">int xmlUCSIsCatLl (int code)<br />
+</pre><p>Check whether the character is part of Ll UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatLm" id="xmlUCSIsCatLm"></a>Function: xmlUCSIsCatLm</h3><pre class="programlisting">int xmlUCSIsCatLm (int code)<br />
+</pre><p>Check whether the character is part of Lm UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatLo" id="xmlUCSIsCatLo"></a>Function: xmlUCSIsCatLo</h3><pre class="programlisting">int xmlUCSIsCatLo (int code)<br />
+</pre><p>Check whether the character is part of Lo UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatLt" id="xmlUCSIsCatLt"></a>Function: xmlUCSIsCatLt</h3><pre class="programlisting">int xmlUCSIsCatLt (int code)<br />
+</pre><p>Check whether the character is part of Lt UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatLu" id="xmlUCSIsCatLu"></a>Function: xmlUCSIsCatLu</h3><pre class="programlisting">int xmlUCSIsCatLu (int code)<br />
+</pre><p>Check whether the character is part of Lu UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatM" id="xmlUCSIsCatM"></a>Function: xmlUCSIsCatM</h3><pre class="programlisting">int xmlUCSIsCatM (int code)<br />
+</pre><p>Check whether the character is part of M UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatMc" id="xmlUCSIsCatMc"></a>Function: xmlUCSIsCatMc</h3><pre class="programlisting">int xmlUCSIsCatMc (int code)<br />
+</pre><p>Check whether the character is part of Mc UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatMe" id="xmlUCSIsCatMe"></a>Function: xmlUCSIsCatMe</h3><pre class="programlisting">int xmlUCSIsCatMe (int code)<br />
+</pre><p>Check whether the character is part of Me UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatMn" id="xmlUCSIsCatMn"></a>Function: xmlUCSIsCatMn</h3><pre class="programlisting">int xmlUCSIsCatMn (int code)<br />
+</pre><p>Check whether the character is part of Mn UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatN" id="xmlUCSIsCatN"></a>Function: xmlUCSIsCatN</h3><pre class="programlisting">int xmlUCSIsCatN (int code)<br />
+</pre><p>Check whether the character is part of N UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatNd" id="xmlUCSIsCatNd"></a>Function: xmlUCSIsCatNd</h3><pre class="programlisting">int xmlUCSIsCatNd (int code)<br />
+</pre><p>Check whether the character is part of Nd UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatNl" id="xmlUCSIsCatNl"></a>Function: xmlUCSIsCatNl</h3><pre class="programlisting">int xmlUCSIsCatNl (int code)<br />
+</pre><p>Check whether the character is part of Nl UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatNo" id="xmlUCSIsCatNo"></a>Function: xmlUCSIsCatNo</h3><pre class="programlisting">int xmlUCSIsCatNo (int code)<br />
+</pre><p>Check whether the character is part of No UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatP" id="xmlUCSIsCatP"></a>Function: xmlUCSIsCatP</h3><pre class="programlisting">int xmlUCSIsCatP (int code)<br />
+</pre><p>Check whether the character is part of P UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatPc" id="xmlUCSIsCatPc"></a>Function: xmlUCSIsCatPc</h3><pre class="programlisting">int xmlUCSIsCatPc (int code)<br />
+</pre><p>Check whether the character is part of Pc UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatPd" id="xmlUCSIsCatPd"></a>Function: xmlUCSIsCatPd</h3><pre class="programlisting">int xmlUCSIsCatPd (int code)<br />
+</pre><p>Check whether the character is part of Pd UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatPe" id="xmlUCSIsCatPe"></a>Function: xmlUCSIsCatPe</h3><pre class="programlisting">int xmlUCSIsCatPe (int code)<br />
+</pre><p>Check whether the character is part of Pe UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatPf" id="xmlUCSIsCatPf"></a>Function: xmlUCSIsCatPf</h3><pre class="programlisting">int xmlUCSIsCatPf (int code)<br />
+</pre><p>Check whether the character is part of Pf UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatPi" id="xmlUCSIsCatPi"></a>Function: xmlUCSIsCatPi</h3><pre class="programlisting">int xmlUCSIsCatPi (int code)<br />
+</pre><p>Check whether the character is part of Pi UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatPo" id="xmlUCSIsCatPo"></a>Function: xmlUCSIsCatPo</h3><pre class="programlisting">int xmlUCSIsCatPo (int code)<br />
+</pre><p>Check whether the character is part of Po UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatPs" id="xmlUCSIsCatPs"></a>Function: xmlUCSIsCatPs</h3><pre class="programlisting">int xmlUCSIsCatPs (int code)<br />
+</pre><p>Check whether the character is part of Ps UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatS" id="xmlUCSIsCatS"></a>Function: xmlUCSIsCatS</h3><pre class="programlisting">int xmlUCSIsCatS (int code)<br />
+</pre><p>Check whether the character is part of S UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatSc" id="xmlUCSIsCatSc"></a>Function: xmlUCSIsCatSc</h3><pre class="programlisting">int xmlUCSIsCatSc (int code)<br />
+</pre><p>Check whether the character is part of Sc UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatSk" id="xmlUCSIsCatSk"></a>Function: xmlUCSIsCatSk</h3><pre class="programlisting">int xmlUCSIsCatSk (int code)<br />
+</pre><p>Check whether the character is part of Sk UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatSm" id="xmlUCSIsCatSm"></a>Function: xmlUCSIsCatSm</h3><pre class="programlisting">int xmlUCSIsCatSm (int code)<br />
+</pre><p>Check whether the character is part of Sm UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatSo" id="xmlUCSIsCatSo"></a>Function: xmlUCSIsCatSo</h3><pre class="programlisting">int xmlUCSIsCatSo (int code)<br />
+</pre><p>Check whether the character is part of So UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatZ" id="xmlUCSIsCatZ"></a>Function: xmlUCSIsCatZ</h3><pre class="programlisting">int xmlUCSIsCatZ (int code)<br />
+</pre><p>Check whether the character is part of Z UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatZl" id="xmlUCSIsCatZl"></a>Function: xmlUCSIsCatZl</h3><pre class="programlisting">int xmlUCSIsCatZl (int code)<br />
+</pre><p>Check whether the character is part of Zl UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatZp" id="xmlUCSIsCatZp"></a>Function: xmlUCSIsCatZp</h3><pre class="programlisting">int xmlUCSIsCatZp (int code)<br />
+</pre><p>Check whether the character is part of Zp UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCatZs" id="xmlUCSIsCatZs"></a>Function: xmlUCSIsCatZs</h3><pre class="programlisting">int xmlUCSIsCatZs (int code)<br />
+</pre><p>Check whether the character is part of Zs UCS Category</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCherokee" id="xmlUCSIsCherokee"></a>Function: xmlUCSIsCherokee</h3><pre class="programlisting">int xmlUCSIsCherokee (int code)<br />
+</pre><p>Check whether the character is part of Cherokee UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCombiningDiacriticalMarks" id="xmlUCSIsCombiningDiacriticalMarks"></a>Function: xmlUCSIsCombiningDiacriticalMarks</h3><pre class="programlisting">int xmlUCSIsCombiningDiacriticalMarks (int code)<br />
+</pre><p>Check whether the character is part of CombiningDiacriticalMarks UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCombiningDiacriticalMarksforSymbols" id="xmlUCSIsCombiningDiacriticalMarksforSymbols"></a>Function: xmlUCSIsCombiningDiacriticalMarksforSymbols</h3><pre class="programlisting">int xmlUCSIsCombiningDiacriticalMarksforSymbols (int code)<br />
+</pre><p>Check whether the character is part of CombiningDiacriticalMarksforSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCombiningHalfMarks" id="xmlUCSIsCombiningHalfMarks"></a>Function: xmlUCSIsCombiningHalfMarks</h3><pre class="programlisting">int xmlUCSIsCombiningHalfMarks (int code)<br />
+</pre><p>Check whether the character is part of CombiningHalfMarks UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCombiningMarksforSymbols" id="xmlUCSIsCombiningMarksforSymbols"></a>Function: xmlUCSIsCombiningMarksforSymbols</h3><pre class="programlisting">int xmlUCSIsCombiningMarksforSymbols (int code)<br />
+</pre><p>Check whether the character is part of CombiningMarksforSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsControlPictures" id="xmlUCSIsControlPictures"></a>Function: xmlUCSIsControlPictures</h3><pre class="programlisting">int xmlUCSIsControlPictures (int code)<br />
+</pre><p>Check whether the character is part of ControlPictures UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCurrencySymbols" id="xmlUCSIsCurrencySymbols"></a>Function: xmlUCSIsCurrencySymbols</h3><pre class="programlisting">int xmlUCSIsCurrencySymbols (int code)<br />
+</pre><p>Check whether the character is part of CurrencySymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCypriotSyllabary" id="xmlUCSIsCypriotSyllabary"></a>Function: xmlUCSIsCypriotSyllabary</h3><pre class="programlisting">int xmlUCSIsCypriotSyllabary (int code)<br />
+</pre><p>Check whether the character is part of CypriotSyllabary UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCyrillic" id="xmlUCSIsCyrillic"></a>Function: xmlUCSIsCyrillic</h3><pre class="programlisting">int xmlUCSIsCyrillic (int code)<br />
+</pre><p>Check whether the character is part of Cyrillic UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsCyrillicSupplement" id="xmlUCSIsCyrillicSupplement"></a>Function: xmlUCSIsCyrillicSupplement</h3><pre class="programlisting">int xmlUCSIsCyrillicSupplement (int code)<br />
+</pre><p>Check whether the character is part of CyrillicSupplement UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsDeseret" id="xmlUCSIsDeseret"></a>Function: xmlUCSIsDeseret</h3><pre class="programlisting">int xmlUCSIsDeseret (int code)<br />
+</pre><p>Check whether the character is part of Deseret UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsDevanagari" id="xmlUCSIsDevanagari"></a>Function: xmlUCSIsDevanagari</h3><pre class="programlisting">int xmlUCSIsDevanagari (int code)<br />
+</pre><p>Check whether the character is part of Devanagari UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsDingbats" id="xmlUCSIsDingbats"></a>Function: xmlUCSIsDingbats</h3><pre class="programlisting">int xmlUCSIsDingbats (int code)<br />
+</pre><p>Check whether the character is part of Dingbats UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsEnclosedAlphanumerics" id="xmlUCSIsEnclosedAlphanumerics"></a>Function: xmlUCSIsEnclosedAlphanumerics</h3><pre class="programlisting">int xmlUCSIsEnclosedAlphanumerics (int code)<br />
+</pre><p>Check whether the character is part of EnclosedAlphanumerics UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsEnclosedCJKLettersandMonths" id="xmlUCSIsEnclosedCJKLettersandMonths"></a>Function: xmlUCSIsEnclosedCJKLettersandMonths</h3><pre class="programlisting">int xmlUCSIsEnclosedCJKLettersandMonths (int code)<br />
+</pre><p>Check whether the character is part of EnclosedCJKLettersandMonths UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsEthiopic" id="xmlUCSIsEthiopic"></a>Function: xmlUCSIsEthiopic</h3><pre class="programlisting">int xmlUCSIsEthiopic (int code)<br />
+</pre><p>Check whether the character is part of Ethiopic UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsGeneralPunctuation" id="xmlUCSIsGeneralPunctuation"></a>Function: xmlUCSIsGeneralPunctuation</h3><pre class="programlisting">int xmlUCSIsGeneralPunctuation (int code)<br />
+</pre><p>Check whether the character is part of GeneralPunctuation UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsGeometricShapes" id="xmlUCSIsGeometricShapes"></a>Function: xmlUCSIsGeometricShapes</h3><pre class="programlisting">int xmlUCSIsGeometricShapes (int code)<br />
+</pre><p>Check whether the character is part of GeometricShapes UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsGeorgian" id="xmlUCSIsGeorgian"></a>Function: xmlUCSIsGeorgian</h3><pre class="programlisting">int xmlUCSIsGeorgian (int code)<br />
+</pre><p>Check whether the character is part of Georgian UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsGothic" id="xmlUCSIsGothic"></a>Function: xmlUCSIsGothic</h3><pre class="programlisting">int xmlUCSIsGothic (int code)<br />
+</pre><p>Check whether the character is part of Gothic UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsGreek" id="xmlUCSIsGreek"></a>Function: xmlUCSIsGreek</h3><pre class="programlisting">int xmlUCSIsGreek (int code)<br />
+</pre><p>Check whether the character is part of Greek UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsGreekExtended" id="xmlUCSIsGreekExtended"></a>Function: xmlUCSIsGreekExtended</h3><pre class="programlisting">int xmlUCSIsGreekExtended (int code)<br />
+</pre><p>Check whether the character is part of GreekExtended UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsGreekandCoptic" id="xmlUCSIsGreekandCoptic"></a>Function: xmlUCSIsGreekandCoptic</h3><pre class="programlisting">int xmlUCSIsGreekandCoptic (int code)<br />
+</pre><p>Check whether the character is part of GreekandCoptic UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsGujarati" id="xmlUCSIsGujarati"></a>Function: xmlUCSIsGujarati</h3><pre class="programlisting">int xmlUCSIsGujarati (int code)<br />
+</pre><p>Check whether the character is part of Gujarati UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsGurmukhi" id="xmlUCSIsGurmukhi"></a>Function: xmlUCSIsGurmukhi</h3><pre class="programlisting">int xmlUCSIsGurmukhi (int code)<br />
+</pre><p>Check whether the character is part of Gurmukhi UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsHalfwidthandFullwidthForms" id="xmlUCSIsHalfwidthandFullwidthForms"></a>Function: xmlUCSIsHalfwidthandFullwidthForms</h3><pre class="programlisting">int xmlUCSIsHalfwidthandFullwidthForms (int code)<br />
+</pre><p>Check whether the character is part of HalfwidthandFullwidthForms UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsHangulCompatibilityJamo" id="xmlUCSIsHangulCompatibilityJamo"></a>Function: xmlUCSIsHangulCompatibilityJamo</h3><pre class="programlisting">int xmlUCSIsHangulCompatibilityJamo (int code)<br />
+</pre><p>Check whether the character is part of HangulCompatibilityJamo UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsHangulJamo" id="xmlUCSIsHangulJamo"></a>Function: xmlUCSIsHangulJamo</h3><pre class="programlisting">int xmlUCSIsHangulJamo (int code)<br />
+</pre><p>Check whether the character is part of HangulJamo UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsHangulSyllables" id="xmlUCSIsHangulSyllables"></a>Function: xmlUCSIsHangulSyllables</h3><pre class="programlisting">int xmlUCSIsHangulSyllables (int code)<br />
+</pre><p>Check whether the character is part of HangulSyllables UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsHanunoo" id="xmlUCSIsHanunoo"></a>Function: xmlUCSIsHanunoo</h3><pre class="programlisting">int xmlUCSIsHanunoo (int code)<br />
+</pre><p>Check whether the character is part of Hanunoo UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsHebrew" id="xmlUCSIsHebrew"></a>Function: xmlUCSIsHebrew</h3><pre class="programlisting">int xmlUCSIsHebrew (int code)<br />
+</pre><p>Check whether the character is part of Hebrew UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsHighPrivateUseSurrogates" id="xmlUCSIsHighPrivateUseSurrogates"></a>Function: xmlUCSIsHighPrivateUseSurrogates</h3><pre class="programlisting">int xmlUCSIsHighPrivateUseSurrogates (int code)<br />
+</pre><p>Check whether the character is part of HighPrivateUseSurrogates UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsHighSurrogates" id="xmlUCSIsHighSurrogates"></a>Function: xmlUCSIsHighSurrogates</h3><pre class="programlisting">int xmlUCSIsHighSurrogates (int code)<br />
+</pre><p>Check whether the character is part of HighSurrogates UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsHiragana" id="xmlUCSIsHiragana"></a>Function: xmlUCSIsHiragana</h3><pre class="programlisting">int xmlUCSIsHiragana (int code)<br />
+</pre><p>Check whether the character is part of Hiragana UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsIPAExtensions" id="xmlUCSIsIPAExtensions"></a>Function: xmlUCSIsIPAExtensions</h3><pre class="programlisting">int xmlUCSIsIPAExtensions (int code)<br />
+</pre><p>Check whether the character is part of IPAExtensions UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsIdeographicDescriptionCharacters" id="xmlUCSIsIdeographicDescriptionCharacters"></a>Function: xmlUCSIsIdeographicDescriptionCharacters</h3><pre class="programlisting">int xmlUCSIsIdeographicDescriptionCharacters (int code)<br />
+</pre><p>Check whether the character is part of IdeographicDescriptionCharacters UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsKanbun" id="xmlUCSIsKanbun"></a>Function: xmlUCSIsKanbun</h3><pre class="programlisting">int xmlUCSIsKanbun (int code)<br />
+</pre><p>Check whether the character is part of Kanbun UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsKangxiRadicals" id="xmlUCSIsKangxiRadicals"></a>Function: xmlUCSIsKangxiRadicals</h3><pre class="programlisting">int xmlUCSIsKangxiRadicals (int code)<br />
+</pre><p>Check whether the character is part of KangxiRadicals UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsKannada" id="xmlUCSIsKannada"></a>Function: xmlUCSIsKannada</h3><pre class="programlisting">int xmlUCSIsKannada (int code)<br />
+</pre><p>Check whether the character is part of Kannada UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsKatakana" id="xmlUCSIsKatakana"></a>Function: xmlUCSIsKatakana</h3><pre class="programlisting">int xmlUCSIsKatakana (int code)<br />
+</pre><p>Check whether the character is part of Katakana UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsKatakanaPhoneticExtensions" id="xmlUCSIsKatakanaPhoneticExtensions"></a>Function: xmlUCSIsKatakanaPhoneticExtensions</h3><pre class="programlisting">int xmlUCSIsKatakanaPhoneticExtensions (int code)<br />
+</pre><p>Check whether the character is part of KatakanaPhoneticExtensions UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsKhmer" id="xmlUCSIsKhmer"></a>Function: xmlUCSIsKhmer</h3><pre class="programlisting">int xmlUCSIsKhmer (int code)<br />
+</pre><p>Check whether the character is part of Khmer UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsKhmerSymbols" id="xmlUCSIsKhmerSymbols"></a>Function: xmlUCSIsKhmerSymbols</h3><pre class="programlisting">int xmlUCSIsKhmerSymbols (int code)<br />
+</pre><p>Check whether the character is part of KhmerSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLao" id="xmlUCSIsLao"></a>Function: xmlUCSIsLao</h3><pre class="programlisting">int xmlUCSIsLao (int code)<br />
+</pre><p>Check whether the character is part of Lao UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLatin1Supplement" id="xmlUCSIsLatin1Supplement"></a>Function: xmlUCSIsLatin1Supplement</h3><pre class="programlisting">int xmlUCSIsLatin1Supplement (int code)<br />
+</pre><p>Check whether the character is part of Latin-1Supplement UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLatinExtendedA" id="xmlUCSIsLatinExtendedA"></a>Function: xmlUCSIsLatinExtendedA</h3><pre class="programlisting">int xmlUCSIsLatinExtendedA (int code)<br />
+</pre><p>Check whether the character is part of LatinExtended-A UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLatinExtendedAdditional" id="xmlUCSIsLatinExtendedAdditional"></a>Function: xmlUCSIsLatinExtendedAdditional</h3><pre class="programlisting">int xmlUCSIsLatinExtendedAdditional (int code)<br />
+</pre><p>Check whether the character is part of LatinExtendedAdditional UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLatinExtendedB" id="xmlUCSIsLatinExtendedB"></a>Function: xmlUCSIsLatinExtendedB</h3><pre class="programlisting">int xmlUCSIsLatinExtendedB (int code)<br />
+</pre><p>Check whether the character is part of LatinExtended-B UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLetterlikeSymbols" id="xmlUCSIsLetterlikeSymbols"></a>Function: xmlUCSIsLetterlikeSymbols</h3><pre class="programlisting">int xmlUCSIsLetterlikeSymbols (int code)<br />
+</pre><p>Check whether the character is part of LetterlikeSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLimbu" id="xmlUCSIsLimbu"></a>Function: xmlUCSIsLimbu</h3><pre class="programlisting">int xmlUCSIsLimbu (int code)<br />
+</pre><p>Check whether the character is part of Limbu UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLinearBIdeograms" id="xmlUCSIsLinearBIdeograms"></a>Function: xmlUCSIsLinearBIdeograms</h3><pre class="programlisting">int xmlUCSIsLinearBIdeograms (int code)<br />
+</pre><p>Check whether the character is part of LinearBIdeograms UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLinearBSyllabary" id="xmlUCSIsLinearBSyllabary"></a>Function: xmlUCSIsLinearBSyllabary</h3><pre class="programlisting">int xmlUCSIsLinearBSyllabary (int code)<br />
+</pre><p>Check whether the character is part of LinearBSyllabary UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsLowSurrogates" id="xmlUCSIsLowSurrogates"></a>Function: xmlUCSIsLowSurrogates</h3><pre class="programlisting">int xmlUCSIsLowSurrogates (int code)<br />
+</pre><p>Check whether the character is part of LowSurrogates UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMalayalam" id="xmlUCSIsMalayalam"></a>Function: xmlUCSIsMalayalam</h3><pre class="programlisting">int xmlUCSIsMalayalam (int code)<br />
+</pre><p>Check whether the character is part of Malayalam UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMathematicalAlphanumericSymbols" id="xmlUCSIsMathematicalAlphanumericSymbols"></a>Function: xmlUCSIsMathematicalAlphanumericSymbols</h3><pre class="programlisting">int xmlUCSIsMathematicalAlphanumericSymbols (int code)<br />
+</pre><p>Check whether the character is part of MathematicalAlphanumericSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMathematicalOperators" id="xmlUCSIsMathematicalOperators"></a>Function: xmlUCSIsMathematicalOperators</h3><pre class="programlisting">int xmlUCSIsMathematicalOperators (int code)<br />
+</pre><p>Check whether the character is part of MathematicalOperators UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMiscellaneousMathematicalSymbolsA" id="xmlUCSIsMiscellaneousMathematicalSymbolsA"></a>Function: xmlUCSIsMiscellaneousMathematicalSymbolsA</h3><pre class="programlisting">int xmlUCSIsMiscellaneousMathematicalSymbolsA (int code)<br />
+</pre><p>Check whether the character is part of MiscellaneousMathematicalSymbols-A UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMiscellaneousMathematicalSymbolsB" id="xmlUCSIsMiscellaneousMathematicalSymbolsB"></a>Function: xmlUCSIsMiscellaneousMathematicalSymbolsB</h3><pre class="programlisting">int xmlUCSIsMiscellaneousMathematicalSymbolsB (int code)<br />
+</pre><p>Check whether the character is part of MiscellaneousMathematicalSymbols-B UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMiscellaneousSymbols" id="xmlUCSIsMiscellaneousSymbols"></a>Function: xmlUCSIsMiscellaneousSymbols</h3><pre class="programlisting">int xmlUCSIsMiscellaneousSymbols (int code)<br />
+</pre><p>Check whether the character is part of MiscellaneousSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMiscellaneousSymbolsandArrows" id="xmlUCSIsMiscellaneousSymbolsandArrows"></a>Function: xmlUCSIsMiscellaneousSymbolsandArrows</h3><pre class="programlisting">int xmlUCSIsMiscellaneousSymbolsandArrows (int code)<br />
+</pre><p>Check whether the character is part of MiscellaneousSymbolsandArrows UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMiscellaneousTechnical" id="xmlUCSIsMiscellaneousTechnical"></a>Function: xmlUCSIsMiscellaneousTechnical</h3><pre class="programlisting">int xmlUCSIsMiscellaneousTechnical (int code)<br />
+</pre><p>Check whether the character is part of MiscellaneousTechnical UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMongolian" id="xmlUCSIsMongolian"></a>Function: xmlUCSIsMongolian</h3><pre class="programlisting">int xmlUCSIsMongolian (int code)<br />
+</pre><p>Check whether the character is part of Mongolian UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMusicalSymbols" id="xmlUCSIsMusicalSymbols"></a>Function: xmlUCSIsMusicalSymbols</h3><pre class="programlisting">int xmlUCSIsMusicalSymbols (int code)<br />
+</pre><p>Check whether the character is part of MusicalSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsMyanmar" id="xmlUCSIsMyanmar"></a>Function: xmlUCSIsMyanmar</h3><pre class="programlisting">int xmlUCSIsMyanmar (int code)<br />
+</pre><p>Check whether the character is part of Myanmar UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsNumberForms" id="xmlUCSIsNumberForms"></a>Function: xmlUCSIsNumberForms</h3><pre class="programlisting">int xmlUCSIsNumberForms (int code)<br />
+</pre><p>Check whether the character is part of NumberForms UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsOgham" id="xmlUCSIsOgham"></a>Function: xmlUCSIsOgham</h3><pre class="programlisting">int xmlUCSIsOgham (int code)<br />
+</pre><p>Check whether the character is part of Ogham UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsOldItalic" id="xmlUCSIsOldItalic"></a>Function: xmlUCSIsOldItalic</h3><pre class="programlisting">int xmlUCSIsOldItalic (int code)<br />
+</pre><p>Check whether the character is part of OldItalic UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsOpticalCharacterRecognition" id="xmlUCSIsOpticalCharacterRecognition"></a>Function: xmlUCSIsOpticalCharacterRecognition</h3><pre class="programlisting">int xmlUCSIsOpticalCharacterRecognition (int code)<br />
+</pre><p>Check whether the character is part of OpticalCharacterRecognition UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsOriya" id="xmlUCSIsOriya"></a>Function: xmlUCSIsOriya</h3><pre class="programlisting">int xmlUCSIsOriya (int code)<br />
+</pre><p>Check whether the character is part of Oriya UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsOsmanya" id="xmlUCSIsOsmanya"></a>Function: xmlUCSIsOsmanya</h3><pre class="programlisting">int xmlUCSIsOsmanya (int code)<br />
+</pre><p>Check whether the character is part of Osmanya UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsPhoneticExtensions" id="xmlUCSIsPhoneticExtensions"></a>Function: xmlUCSIsPhoneticExtensions</h3><pre class="programlisting">int xmlUCSIsPhoneticExtensions (int code)<br />
+</pre><p>Check whether the character is part of PhoneticExtensions UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsPrivateUse" id="xmlUCSIsPrivateUse"></a>Function: xmlUCSIsPrivateUse</h3><pre class="programlisting">int xmlUCSIsPrivateUse (int code)<br />
+</pre><p>Check whether the character is part of PrivateUse UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsPrivateUseArea" id="xmlUCSIsPrivateUseArea"></a>Function: xmlUCSIsPrivateUseArea</h3><pre class="programlisting">int xmlUCSIsPrivateUseArea (int code)<br />
+</pre><p>Check whether the character is part of PrivateUseArea UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsRunic" id="xmlUCSIsRunic"></a>Function: xmlUCSIsRunic</h3><pre class="programlisting">int xmlUCSIsRunic (int code)<br />
+</pre><p>Check whether the character is part of Runic UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsShavian" id="xmlUCSIsShavian"></a>Function: xmlUCSIsShavian</h3><pre class="programlisting">int xmlUCSIsShavian (int code)<br />
+</pre><p>Check whether the character is part of Shavian UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSinhala" id="xmlUCSIsSinhala"></a>Function: xmlUCSIsSinhala</h3><pre class="programlisting">int xmlUCSIsSinhala (int code)<br />
+</pre><p>Check whether the character is part of Sinhala UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSmallFormVariants" id="xmlUCSIsSmallFormVariants"></a>Function: xmlUCSIsSmallFormVariants</h3><pre class="programlisting">int xmlUCSIsSmallFormVariants (int code)<br />
+</pre><p>Check whether the character is part of SmallFormVariants UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSpacingModifierLetters" id="xmlUCSIsSpacingModifierLetters"></a>Function: xmlUCSIsSpacingModifierLetters</h3><pre class="programlisting">int xmlUCSIsSpacingModifierLetters (int code)<br />
+</pre><p>Check whether the character is part of SpacingModifierLetters UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSpecials" id="xmlUCSIsSpecials"></a>Function: xmlUCSIsSpecials</h3><pre class="programlisting">int xmlUCSIsSpecials (int code)<br />
+</pre><p>Check whether the character is part of Specials UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSuperscriptsandSubscripts" id="xmlUCSIsSuperscriptsandSubscripts"></a>Function: xmlUCSIsSuperscriptsandSubscripts</h3><pre class="programlisting">int xmlUCSIsSuperscriptsandSubscripts (int code)<br />
+</pre><p>Check whether the character is part of SuperscriptsandSubscripts UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSupplementalArrowsA" id="xmlUCSIsSupplementalArrowsA"></a>Function: xmlUCSIsSupplementalArrowsA</h3><pre class="programlisting">int xmlUCSIsSupplementalArrowsA (int code)<br />
+</pre><p>Check whether the character is part of SupplementalArrows-A UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSupplementalArrowsB" id="xmlUCSIsSupplementalArrowsB"></a>Function: xmlUCSIsSupplementalArrowsB</h3><pre class="programlisting">int xmlUCSIsSupplementalArrowsB (int code)<br />
+</pre><p>Check whether the character is part of SupplementalArrows-B UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSupplementalMathematicalOperators" id="xmlUCSIsSupplementalMathematicalOperators"></a>Function: xmlUCSIsSupplementalMathematicalOperators</h3><pre class="programlisting">int xmlUCSIsSupplementalMathematicalOperators (int code)<br />
+</pre><p>Check whether the character is part of SupplementalMathematicalOperators UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSupplementaryPrivateUseAreaA" id="xmlUCSIsSupplementaryPrivateUseAreaA"></a>Function: xmlUCSIsSupplementaryPrivateUseAreaA</h3><pre class="programlisting">int xmlUCSIsSupplementaryPrivateUseAreaA (int code)<br />
+</pre><p>Check whether the character is part of SupplementaryPrivateUseArea-A UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSupplementaryPrivateUseAreaB" id="xmlUCSIsSupplementaryPrivateUseAreaB"></a>Function: xmlUCSIsSupplementaryPrivateUseAreaB</h3><pre class="programlisting">int xmlUCSIsSupplementaryPrivateUseAreaB (int code)<br />
+</pre><p>Check whether the character is part of SupplementaryPrivateUseArea-B UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsSyriac" id="xmlUCSIsSyriac"></a>Function: xmlUCSIsSyriac</h3><pre class="programlisting">int xmlUCSIsSyriac (int code)<br />
+</pre><p>Check whether the character is part of Syriac UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsTagalog" id="xmlUCSIsTagalog"></a>Function: xmlUCSIsTagalog</h3><pre class="programlisting">int xmlUCSIsTagalog (int code)<br />
+</pre><p>Check whether the character is part of Tagalog UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsTagbanwa" id="xmlUCSIsTagbanwa"></a>Function: xmlUCSIsTagbanwa</h3><pre class="programlisting">int xmlUCSIsTagbanwa (int code)<br />
+</pre><p>Check whether the character is part of Tagbanwa UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsTags" id="xmlUCSIsTags"></a>Function: xmlUCSIsTags</h3><pre class="programlisting">int xmlUCSIsTags (int code)<br />
+</pre><p>Check whether the character is part of Tags UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsTaiLe" id="xmlUCSIsTaiLe"></a>Function: xmlUCSIsTaiLe</h3><pre class="programlisting">int xmlUCSIsTaiLe (int code)<br />
+</pre><p>Check whether the character is part of TaiLe UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsTaiXuanJingSymbols" id="xmlUCSIsTaiXuanJingSymbols"></a>Function: xmlUCSIsTaiXuanJingSymbols</h3><pre class="programlisting">int xmlUCSIsTaiXuanJingSymbols (int code)<br />
+</pre><p>Check whether the character is part of TaiXuanJingSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsTamil" id="xmlUCSIsTamil"></a>Function: xmlUCSIsTamil</h3><pre class="programlisting">int xmlUCSIsTamil (int code)<br />
+</pre><p>Check whether the character is part of Tamil UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsTelugu" id="xmlUCSIsTelugu"></a>Function: xmlUCSIsTelugu</h3><pre class="programlisting">int xmlUCSIsTelugu (int code)<br />
+</pre><p>Check whether the character is part of Telugu UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsThaana" id="xmlUCSIsThaana"></a>Function: xmlUCSIsThaana</h3><pre class="programlisting">int xmlUCSIsThaana (int code)<br />
+</pre><p>Check whether the character is part of Thaana UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsThai" id="xmlUCSIsThai"></a>Function: xmlUCSIsThai</h3><pre class="programlisting">int xmlUCSIsThai (int code)<br />
+</pre><p>Check whether the character is part of Thai UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsTibetan" id="xmlUCSIsTibetan"></a>Function: xmlUCSIsTibetan</h3><pre class="programlisting">int xmlUCSIsTibetan (int code)<br />
+</pre><p>Check whether the character is part of Tibetan UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsUgaritic" id="xmlUCSIsUgaritic"></a>Function: xmlUCSIsUgaritic</h3><pre class="programlisting">int xmlUCSIsUgaritic (int code)<br />
+</pre><p>Check whether the character is part of Ugaritic UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsUnifiedCanadianAboriginalSyllabics" id="xmlUCSIsUnifiedCanadianAboriginalSyllabics"></a>Function: xmlUCSIsUnifiedCanadianAboriginalSyllabics</h3><pre class="programlisting">int xmlUCSIsUnifiedCanadianAboriginalSyllabics (int code)<br />
+</pre><p>Check whether the character is part of UnifiedCanadianAboriginalSyllabics UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsVariationSelectors" id="xmlUCSIsVariationSelectors"></a>Function: xmlUCSIsVariationSelectors</h3><pre class="programlisting">int xmlUCSIsVariationSelectors (int code)<br />
+</pre><p>Check whether the character is part of VariationSelectors UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsVariationSelectorsSupplement" id="xmlUCSIsVariationSelectorsSupplement"></a>Function: xmlUCSIsVariationSelectorsSupplement</h3><pre class="programlisting">int xmlUCSIsVariationSelectorsSupplement (int code)<br />
+</pre><p>Check whether the character is part of VariationSelectorsSupplement UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsYiRadicals" id="xmlUCSIsYiRadicals"></a>Function: xmlUCSIsYiRadicals</h3><pre class="programlisting">int xmlUCSIsYiRadicals (int code)<br />
+</pre><p>Check whether the character is part of YiRadicals UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsYiSyllables" id="xmlUCSIsYiSyllables"></a>Function: xmlUCSIsYiSyllables</h3><pre class="programlisting">int xmlUCSIsYiSyllables (int code)<br />
+</pre><p>Check whether the character is part of YiSyllables UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlUCSIsYijingHexagramSymbols" id="xmlUCSIsYijingHexagramSymbols"></a>Function: xmlUCSIsYijingHexagramSymbols</h3><pre class="programlisting">int xmlUCSIsYijingHexagramSymbols (int code)<br />
+</pre><p>Check whether the character is part of YijingHexagramSymbols UCS Block</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>code</tt></i>:</span></td><td>UCS code point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xmlversion.html b/doc/html/libxml-xmlversion.html
new file mode 100644
index 0000000..8b5c554
--- /dev/null
+++ b/doc/html/libxml-xmlversion.html
@@ -0,0 +1,51 @@
+<?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 xmlversion from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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_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_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_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>
+<h3><a name="LIBXML_AUTOMATA_ENABLED" id="LIBXML_AUTOMATA_ENABLED"></a>Macro: LIBXML_AUTOMATA_ENABLED</h3><pre>#define LIBXML_AUTOMATA_ENABLED</pre><p>Whether the automata interfaces are compiled in</p>
+<h3><a name="LIBXML_C14N_ENABLED" id="LIBXML_C14N_ENABLED"></a>Macro: LIBXML_C14N_ENABLED</h3><pre>#define LIBXML_C14N_ENABLED</pre><p>Whether the Canonicalization support is configured in</p>
+<h3><a name="LIBXML_CATALOG_ENABLED" id="LIBXML_CATALOG_ENABLED"></a>Macro: LIBXML_CATALOG_ENABLED</h3><pre>#define LIBXML_CATALOG_ENABLED</pre><p>Whether the Catalog support is configured in</p>
+<h3><a name="LIBXML_DEBUG_ENABLED" id="LIBXML_DEBUG_ENABLED"></a>Macro: LIBXML_DEBUG_ENABLED</h3><pre>#define LIBXML_DEBUG_ENABLED</pre><p>Whether Debugging module 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_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>
+<h3><a name="LIBXML_ICONV_ENABLED" id="LIBXML_ICONV_ENABLED"></a>Macro: LIBXML_ICONV_ENABLED</h3><pre>#define LIBXML_ICONV_ENABLED</pre><p>Whether iconv support is available</p>
+<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_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>
+<h3><a name="LIBXML_READER_ENABLED" id="LIBXML_READER_ENABLED"></a>Macro: LIBXML_READER_ENABLED</h3><pre>#define LIBXML_READER_ENABLED</pre><p>Whether the xmlReader parsing interface is configured in</p>
+<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_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>
+<h3><a name="LIBXML_UNICODE_ENABLED" id="LIBXML_UNICODE_ENABLED"></a>Macro: LIBXML_UNICODE_ENABLED</h3><pre>#define LIBXML_UNICODE_ENABLED</pre><p>Whether the Unicode related interfaces are compiled in</p>
+<h3><a name="LIBXML_VALID_ENABLED" id="LIBXML_VALID_ENABLED"></a>Macro: LIBXML_VALID_ENABLED</h3><pre>#define LIBXML_VALID_ENABLED</pre><p>Whether the DTD validation support is configured in</p>
+<h3><a name="LIBXML_VERSION" id="LIBXML_VERSION"></a>Macro: LIBXML_VERSION</h3><pre>#define LIBXML_VERSION</pre><p>the version number: 1.2.3 value is 1002003</p>
+<h3><a name="LIBXML_VERSION_STRING" id="LIBXML_VERSION_STRING"></a>Macro: LIBXML_VERSION_STRING</h3><pre>#define LIBXML_VERSION_STRING</pre><p>the version number string, 1.2.3 value is "1002003"</p>
+<h3><a name="LIBXML_WRITER_ENABLED" id="LIBXML_WRITER_ENABLED"></a>Macro: LIBXML_WRITER_ENABLED</h3><pre>#define LIBXML_WRITER_ENABLED</pre><p>Whether the xmlWriter saving interface is configured in</p>
+<h3><a name="LIBXML_XINCLUDE_ENABLED" id="LIBXML_XINCLUDE_ENABLED"></a>Macro: LIBXML_XINCLUDE_ENABLED</h3><pre>#define LIBXML_XINCLUDE_ENABLED</pre><p>Whether XInclude is configured in</p>
+<h3><a name="LIBXML_XPATH_ENABLED" id="LIBXML_XPATH_ENABLED"></a>Macro: LIBXML_XPATH_ENABLED</h3><pre>#define LIBXML_XPATH_ENABLED</pre><p>Whether XPath is configured in</p>
+<h3><a name="LIBXML_XPTR_ENABLED" id="LIBXML_XPTR_ENABLED"></a>Macro: LIBXML_XPTR_ENABLED</h3><pre>#define LIBXML_XPTR_ENABLED</pre><p>Whether XPointer is configured in</p>
+<h3><a name="WITHOUT_TRIO" id="WITHOUT_TRIO"></a>Macro: WITHOUT_TRIO</h3><pre>#define WITHOUT_TRIO</pre><p>defined if the trio support should not be configured in</p>
+<h3><a name="WITH_TRIO" id="WITH_TRIO"></a>Macro: WITH_TRIO</h3><pre>#define WITH_TRIO</pre><p>defined if the trio support need to be configured in</p>
+<h3><a name="xmlCheckVersion" id="xmlCheckVersion"></a>Function: xmlCheckVersion</h3><pre class="programlisting">void xmlCheckVersion (int version)<br />
+</pre><p>check the compiled lib version against the include one. This can warn or immediately kill the application</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>version</tt></i>:</span></td><td>the include version number</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xmlwriter.html b/doc/html/libxml-xmlwriter.html
new file mode 100644
index 0000000..458262c
--- /dev/null
+++ b/doc/html/libxml-xmlwriter.html
@@ -0,0 +1,258 @@
+<?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 xmlwriter from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlwriter 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xmlversion.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlversion.html">xmlversion</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-xpath.html">xpath</a></th><td><a accesskey="n" href="libxml-xpath.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>text writing API for XML </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#xmlTextWriterWriteDocType">xmlTextWriterWriteDocType</a></pre><pre class="programlisting">#define <a href="#xmlTextWriterWriteProcessingInstruction">xmlTextWriterWriteProcessingInstruction</a></pre><pre class="programlisting">Structure <a href="#xmlTextWriter">xmlTextWriter</a><br />struct _xmlTextWriter
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlwriter.html#xmlTextWriter">xmlTextWriter</a> * <a name="xmlTextWriterPtr" id="xmlTextWriterPtr">xmlTextWriterPtr</a>
+</pre><pre class="programlisting">void <a href="#xmlFreeTextWriter">xmlFreeTextWriter</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> <a href="#xmlNewTextWriter">xmlNewTextWriter</a> (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)</pre>
+<pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> <a href="#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> * doc, <br /> int compression)</pre>
+<pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> <a href="#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a> (const char * uri, <br /> int compression)</pre>
+<pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> <a href="#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> int compression)</pre>
+<pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> <a href="#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int compression)</pre>
+<pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> <a href="#xmlNewTextWriterTree">xmlNewTextWriterTree</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int compression)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndAttribute">xmlTextWriterEndAttribute</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndCDATA">xmlTextWriterEndCDATA</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndComment">xmlTextWriterEndComment</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndDTD">xmlTextWriterEndDTD</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndDTDAttlist">xmlTextWriterEndDTDAttlist</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndDTDElement">xmlTextWriterEndDTDElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndDTDEntity">xmlTextWriterEndDTDEntity</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndElement">xmlTextWriterEndElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterEndPI">xmlTextWriterEndPI</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterFlush">xmlTextWriterFlush</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int indent)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartComment">xmlTextWriterStartComment</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartDTD">xmlTextWriterStartDTD</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartDTDAttlist">xmlTextWriterStartDTDAttlist</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartDTDElement">xmlTextWriterStartDTDElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * version, <br /> const char * encoding, <br /> const char * standalone)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartElement">xmlTextWriterStartElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartElementNS">xmlTextWriterStartElementNS</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterStartPI">xmlTextWriterStartPI</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteAttribute">xmlTextWriterWriteAttribute</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteAttributeNS">xmlTextWriterWriteAttributeNS</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * data, <br /> int start, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * data, <br /> int start, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteCDATA">xmlTextWriterWriteCDATA</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteComment">xmlTextWriterWriteComment</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteDTD">xmlTextWriterWriteDTD</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * subset)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteDTDAttlist">xmlTextWriterWriteDTDAttlist</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteDTDElement">xmlTextWriterWriteDTDElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteDTDEntity">xmlTextWriterWriteDTDEntity</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ndataid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteDTDExternalEntity">xmlTextWriterWriteDTDExternalEntity</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ndataid)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteDTDExternalEntityContents">xmlTextWriterWriteDTDExternalEntityContents</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ndataid)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteDTDInternalEntity">xmlTextWriterWriteDTDInternalEntity</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteDTDNotation">xmlTextWriterWriteDTDNotation</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteElement">xmlTextWriterWriteElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteElementNS">xmlTextWriterWriteElementNS</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatAttribute">xmlTextWriterWriteFormatAttribute</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatAttributeNS">xmlTextWriterWriteFormatAttributeNS</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatCDATA">xmlTextWriterWriteFormatCDATA</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatDTD">xmlTextWriterWriteFormatDTD</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatDTDAttlist">xmlTextWriterWriteFormatDTDAttlist</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatDTDElement">xmlTextWriterWriteFormatDTDElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatDTDInternalEntity">xmlTextWriterWriteFormatDTDInternalEntity</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatElementNS">xmlTextWriterWriteFormatElementNS</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatPI">xmlTextWriterWriteFormatPI</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatRaw">xmlTextWriterWriteFormatRaw</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteFormatString">xmlTextWriterWriteFormatString</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> ... ...)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWritePI">xmlTextWriterWritePI</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteRaw">xmlTextWriterWriteRaw</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteString">xmlTextWriterWriteString</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatAttribute">xmlTextWriterWriteVFormatAttribute</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatCDATA">xmlTextWriterWriteVFormatCDATA</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatComment">xmlTextWriterWriteVFormatComment</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatDTD">xmlTextWriterWriteVFormatDTD</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatDTDElement">xmlTextWriterWriteVFormatDTDElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatDTDInternalEntity">xmlTextWriterWriteVFormatDTDInternalEntity</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatElement">xmlTextWriterWriteVFormatElement</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatElementNS">xmlTextWriterWriteVFormatElementNS</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatPI">xmlTextWriterWriteVFormatPI</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatRaw">xmlTextWriterWriteVFormatRaw</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> va_list argptr)</pre>
+<pre class="programlisting">int <a href="#xmlTextWriterWriteVFormatString">xmlTextWriterWriteVFormatString</a> (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> va_list argptr)</pre>
+<h2>Description</h2>
+<h3><a name="xmlTextWriterWriteDocType" id="xmlTextWriterWriteDocType"></a>Macro: xmlTextWriterWriteDocType</h3><pre>#define xmlTextWriterWriteDocType</pre><p>this macro maps to <a href="libxml-xmlwriter.html#xmlTextWriterWriteDTD">xmlTextWriterWriteDTD</a></p>
+<h3><a name="xmlTextWriterWriteProcessingInstruction" id="xmlTextWriterWriteProcessingInstruction"></a>Macro: xmlTextWriterWriteProcessingInstruction</h3><pre>#define xmlTextWriterWriteProcessingInstruction</pre><p>This macro maps to <a href="libxml-xmlwriter.html#xmlTextWriterWritePI">xmlTextWriterWritePI</a></p>
+<h3><a name="xmlTextWriter" id="xmlTextWriter">Structure xmlTextWriter</a></h3><pre class="programlisting">Structure xmlTextWriter<br />struct _xmlTextWriter {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlFreeTextWriter" id="xmlFreeTextWriter"></a>Function: xmlFreeTextWriter</h3><pre class="programlisting">void xmlFreeTextWriter (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>Deallocate all the resources associated to the writer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr></tbody></table></div><h3><a name="xmlNewTextWriter" id="xmlNewTextWriter"></a>Function: xmlNewTextWriter</h3><pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> xmlNewTextWriter (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)<br />
+</pre><p>Create a new <a href="libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a> structure using an <a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlNewTextWriterDoc" id="xmlNewTextWriterDoc"></a>Function: xmlNewTextWriterDoc</h3><pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> xmlNewTextWriterDoc (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> * doc, <br /> int compression)<br />
+</pre><p>Create a new <a href="libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a> structure with @*doc as output</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>address of a <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> to hold the new XML document tree</td></tr><tr><td><span class="term"><i><tt>compression</tt></i>:</span></td><td>compress the output?</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlNewTextWriterFilename" id="xmlNewTextWriterFilename"></a>Function: xmlNewTextWriterFilename</h3><pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> xmlNewTextWriterFilename (const char * uri, <br /> int compression)<br />
+</pre><p>Create a new <a href="libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a> structure with @uri as output</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>uri</tt></i>:</span></td><td>the URI of the resource for the output</td></tr><tr><td><span class="term"><i><tt>compression</tt></i>:</span></td><td>compress the output?</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlNewTextWriterMemory" id="xmlNewTextWriterMemory"></a>Function: xmlNewTextWriterMemory</h3><pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> xmlNewTextWriterMemory (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> int compression)<br />
+</pre><p>Create a new <a href="libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a> structure with @buf as output TODO: handle compression</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 href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a></td></tr><tr><td><span class="term"><i><tt>compression</tt></i>:</span></td><td>compress the output?</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlNewTextWriterPushParser" id="xmlNewTextWriterPushParser"></a>Function: xmlNewTextWriterPushParser</h3><pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> xmlNewTextWriterPushParser (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> int compression)<br />
+</pre><p>Create a new <a href="libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a> structure with @ctxt as output TODO: handle compression</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 href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> to hold the new XML document tree</td></tr><tr><td><span class="term"><i><tt>compression</tt></i>:</span></td><td>compress the output?</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlNewTextWriterTree" id="xmlNewTextWriterTree"></a>Function: xmlNewTextWriterTree</h3><pre class="programlisting"><a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> xmlNewTextWriterTree (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> int compression)<br />
+</pre><p>Create a new <a href="libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a> structure with @doc as output starting at @node</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a></td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> or NULL for doc-&gt;children</td></tr><tr><td><span class="term"><i><tt>compression</tt></i>:</span></td><td>compress the output?</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndAttribute" id="xmlTextWriterEndAttribute"></a>Function: xmlTextWriterEndAttribute</h3><pre class="programlisting">int xmlTextWriterEndAttribute (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End the current xml element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndCDATA" id="xmlTextWriterEndCDATA"></a>Function: xmlTextWriterEndCDATA</h3><pre class="programlisting">int xmlTextWriterEndCDATA (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End an xml CDATA section.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndComment" id="xmlTextWriterEndComment"></a>Function: xmlTextWriterEndComment</h3><pre class="programlisting">int xmlTextWriterEndComment (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End the current xml coment.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndDTD" id="xmlTextWriterEndDTD"></a>Function: xmlTextWriterEndDTD</h3><pre class="programlisting">int xmlTextWriterEndDTD (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End an xml DTD.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndDTDAttlist" id="xmlTextWriterEndDTDAttlist"></a>Function: xmlTextWriterEndDTDAttlist</h3><pre class="programlisting">int xmlTextWriterEndDTDAttlist (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End an xml DTD <a href="libxml-SAX.html#attribute">attribute</a> list.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndDTDElement" id="xmlTextWriterEndDTDElement"></a>Function: xmlTextWriterEndDTDElement</h3><pre class="programlisting">int xmlTextWriterEndDTDElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End an xml DTD element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndDTDEntity" id="xmlTextWriterEndDTDEntity"></a>Function: xmlTextWriterEndDTDEntity</h3><pre class="programlisting">int xmlTextWriterEndDTDEntity (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End an xml DTD entity.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndDocument" id="xmlTextWriterEndDocument"></a>Function: xmlTextWriterEndDocument</h3><pre class="programlisting">int xmlTextWriterEndDocument (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End an xml document. All open elements are closed</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndElement" id="xmlTextWriterEndElement"></a>Function: xmlTextWriterEndElement</h3><pre class="programlisting">int xmlTextWriterEndElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End the current xml element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterEndPI" id="xmlTextWriterEndPI"></a>Function: xmlTextWriterEndPI</h3><pre class="programlisting">int xmlTextWriterEndPI (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End the current xml PI.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterFlush" id="xmlTextWriterFlush"></a>Function: xmlTextWriterFlush</h3><pre class="programlisting">int xmlTextWriterFlush (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>Flush the output buffer.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterFullEndElement" id="xmlTextWriterFullEndElement"></a>Function: xmlTextWriterFullEndElement</h3><pre class="programlisting">int xmlTextWriterFullEndElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>End the current xml element. Writes an end tag even if the element is empty</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterSetIndent" id="xmlTextWriterSetIndent"></a>Function: xmlTextWriterSetIndent</h3><pre class="programlisting">int xmlTextWriterSetIndent (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int indent)<br />
+</pre><p>Set indentation output. indent = 0 do not indentation. indent &gt; 0 do indentation.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>indent</tt></i>:</span></td><td>do indentation?</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 on error or 0 otherwise.</td></tr></tbody></table></div><h3><a name="xmlTextWriterSetIndentString" id="xmlTextWriterSetIndentString"></a>Function: xmlTextWriterSetIndentString</h3><pre class="programlisting">int xmlTextWriterSetIndentString (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>Set string indentation.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 on error or 0 otherwise.</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartAttribute" id="xmlTextWriterStartAttribute"></a>Function: xmlTextWriterStartAttribute</h3><pre class="programlisting">int xmlTextWriterStartAttribute (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Start an xml attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartAttributeNS" id="xmlTextWriterStartAttributeNS"></a>Function: xmlTextWriterStartAttributeNS</h3><pre class="programlisting">int xmlTextWriterStartAttributeNS (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)<br />
+</pre><p>Start an xml <a href="libxml-SAX.html#attribute">attribute</a> with namespace support.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>namespace prefix or NULL</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element local name</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>namespace URI or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartCDATA" id="xmlTextWriterStartCDATA"></a>Function: xmlTextWriterStartCDATA</h3><pre class="programlisting">int xmlTextWriterStartCDATA (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>Start an xml CDATA section.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartComment" id="xmlTextWriterStartComment"></a>Function: xmlTextWriterStartComment</h3><pre class="programlisting">int xmlTextWriterStartComment (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)<br />
+</pre><p>Start an xml comment.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartDTD" id="xmlTextWriterStartDTD"></a>Function: xmlTextWriterStartDTD</h3><pre class="programlisting">int xmlTextWriterStartDTD (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid)<br />
+</pre><p>Start an xml DTD.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD</td></tr><tr><td><span class="term"><i><tt>pubid</tt></i>:</span></td><td>the public identifier, which is an alternative to the system identifier</td></tr><tr><td><span class="term"><i><tt>sysid</tt></i>:</span></td><td>the system identifier, which is the URI of the DTD</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartDTDAttlist" id="xmlTextWriterStartDTDAttlist"></a>Function: xmlTextWriterStartDTDAttlist</h3><pre class="programlisting">int xmlTextWriterStartDTDAttlist (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Start an xml DTD ATTLIST.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD ATTLIST</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartDTDElement" id="xmlTextWriterStartDTDElement"></a>Function: xmlTextWriterStartDTDElement</h3><pre class="programlisting">int xmlTextWriterStartDTDElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Start an xml DTD element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD element</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartDTDEntity" id="xmlTextWriterStartDTDEntity"></a>Function: xmlTextWriterStartDTDEntity</h3><pre class="programlisting">int xmlTextWriterStartDTDEntity (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Start an xml DTD ATTLIST.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>pe</tt></i>:</span></td><td>TRUE if this is a parameter entity, FALSE if not</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD ATTLIST</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartDocument" id="xmlTextWriterStartDocument"></a>Function: xmlTextWriterStartDocument</h3><pre class="programlisting">int xmlTextWriterStartDocument (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * version, <br /> const char * encoding, <br /> const char * standalone)<br />
+</pre><p>Start a new xml document</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>version</tt></i>:</span></td><td>the xml version ("1.0") or NULL for default ("1.0")</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding or NULL for default</td></tr><tr><td><span class="term"><i><tt>standalone</tt></i>:</span></td><td>"yes" or "no" or NULL for default</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartElement" id="xmlTextWriterStartElement"></a>Function: xmlTextWriterStartElement</h3><pre class="programlisting">int xmlTextWriterStartElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Start an xml element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartElementNS" id="xmlTextWriterStartElementNS"></a>Function: xmlTextWriterStartElementNS</h3><pre class="programlisting">int xmlTextWriterStartElementNS (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)<br />
+</pre><p>Start an xml element with namespace support.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>namespace prefix or NULL</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element local name</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>namespace URI or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartPI" id="xmlTextWriterStartPI"></a>Function: xmlTextWriterStartPI</h3><pre class="programlisting">int xmlTextWriterStartPI (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target)<br />
+</pre><p>Start an xml PI.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>PI target</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteAttribute" id="xmlTextWriterWriteAttribute"></a>Function: xmlTextWriterWriteAttribute</h3><pre class="programlisting">int xmlTextWriterWriteAttribute (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write an xml attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td><a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td><a href="libxml-SAX.html#attribute">attribute</a> content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteAttributeNS" id="xmlTextWriterWriteAttributeNS"></a>Function: xmlTextWriterWriteAttributeNS</h3><pre class="programlisting">int xmlTextWriterWriteAttributeNS (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write an xml attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>namespace prefix</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td><a href="libxml-SAX.html#attribute">attribute</a> local name</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>namespace URI</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td><a href="libxml-SAX.html#attribute">attribute</a> content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteBase64" id="xmlTextWriterWriteBase64"></a>Function: xmlTextWriterWriteBase64</h3><pre class="programlisting">int xmlTextWriterWriteBase64 (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * data, <br /> int start, <br /> int len)<br />
+</pre><p>Write an base64 encoded xml text.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>binary data</td></tr><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the position within the data of the first byte to encode</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of bytes to encode</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteBinHex" id="xmlTextWriterWriteBinHex"></a>Function: xmlTextWriterWriteBinHex</h3><pre class="programlisting">int xmlTextWriterWriteBinHex (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * data, <br /> int start, <br /> int len)<br />
+</pre><p>Write a BinHex encoded xml text.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>binary data</td></tr><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the position within the data of the first byte to encode</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of bytes to encode</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteCDATA" id="xmlTextWriterWriteCDATA"></a>Function: xmlTextWriterWriteCDATA</h3><pre class="programlisting">int xmlTextWriterWriteCDATA (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write an xml CDATA.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>CDATA content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteComment" id="xmlTextWriterWriteComment"></a>Function: xmlTextWriterWriteComment</h3><pre class="programlisting">int xmlTextWriterWriteComment (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write an xml comment.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td><a href="libxml-SAX.html#comment">comment</a> string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteDTD" id="xmlTextWriterWriteDTD"></a>Function: xmlTextWriterWriteDTD</h3><pre class="programlisting">int xmlTextWriterWriteDTD (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * subset)<br />
+</pre><p>Write a DTD.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD</td></tr><tr><td><span class="term"><i><tt>pubid</tt></i>:</span></td><td>the public identifier, which is an alternative to the system identifier</td></tr><tr><td><span class="term"><i><tt>sysid</tt></i>:</span></td><td>the system identifier, which is the URI of the DTD</td></tr><tr><td><span class="term"><i><tt>subset</tt></i>:</span></td><td>string content of the DTD</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteDTDAttlist" id="xmlTextWriterWriteDTDAttlist"></a>Function: xmlTextWriterWriteDTDAttlist</h3><pre class="programlisting">int xmlTextWriterWriteDTDAttlist (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write a DTD ATTLIST.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD ATTLIST</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>content of the ATTLIST</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteDTDElement" id="xmlTextWriterWriteDTDElement"></a>Function: xmlTextWriterWriteDTDElement</h3><pre class="programlisting">int xmlTextWriterWriteDTDElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write a DTD element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD element</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>content of the element</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteDTDEntity" id="xmlTextWriterWriteDTDEntity"></a>Function: xmlTextWriterWriteDTDEntity</h3><pre class="programlisting">int xmlTextWriterWriteDTDEntity (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ndataid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write a DTD entity.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>pe</tt></i>:</span></td><td>TRUE if this is a parameter entity, FALSE if not</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD entity</td></tr><tr><td><span class="term"><i><tt>pubid</tt></i>:</span></td><td>the public identifier, which is an alternative to the system identifier</td></tr><tr><td><span class="term"><i><tt>sysid</tt></i>:</span></td><td>the system identifier, which is the URI of the DTD</td></tr><tr><td><span class="term"><i><tt>ndataid</tt></i>:</span></td><td>the xml notation name.</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>content of the entity</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteDTDExternalEntity" id="xmlTextWriterWriteDTDExternalEntity"></a>Function: xmlTextWriterWriteDTDExternalEntity</h3><pre class="programlisting">int xmlTextWriterWriteDTDExternalEntity (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ndataid)<br />
+</pre><p>Write a DTD external entity. The entity must have been started with <a href="libxml-xmlwriter.html#xmlTextWriterStartDTDEntity">xmlTextWriterStartDTDEntity</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>pe</tt></i>:</span></td><td>TRUE if this is a parameter entity, FALSE if not</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD entity</td></tr><tr><td><span class="term"><i><tt>pubid</tt></i>:</span></td><td>the public identifier, which is an alternative to the system identifier</td></tr><tr><td><span class="term"><i><tt>sysid</tt></i>:</span></td><td>the system identifier, which is the URI of the DTD</td></tr><tr><td><span class="term"><i><tt>ndataid</tt></i>:</span></td><td>the xml notation name.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteDTDExternalEntityContents" id="xmlTextWriterWriteDTDExternalEntityContents"></a>Function: xmlTextWriterWriteDTDExternalEntityContents</h3><pre class="programlisting">int xmlTextWriterWriteDTDExternalEntityContents (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ndataid)<br />
+</pre><p>Write the contents of a DTD external entity.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>pubid</tt></i>:</span></td><td>the public identifier, which is an alternative to the system identifier</td></tr><tr><td><span class="term"><i><tt>sysid</tt></i>:</span></td><td>the system identifier, which is the URI of the DTD</td></tr><tr><td><span class="term"><i><tt>ndataid</tt></i>:</span></td><td>the xml notation name.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteDTDInternalEntity" id="xmlTextWriterWriteDTDInternalEntity"></a>Function: xmlTextWriterWriteDTDInternalEntity</h3><pre class="programlisting">int xmlTextWriterWriteDTDInternalEntity (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write a DTD internal entity.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>pe</tt></i>:</span></td><td>TRUE if this is a parameter entity, FALSE if not</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD entity</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>content of the entity</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteDTDNotation" id="xmlTextWriterWriteDTDNotation"></a>Function: xmlTextWriterWriteDTDNotation</h3><pre class="programlisting">int xmlTextWriterWriteDTDNotation (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid)<br />
+</pre><p>Write a DTD entity.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the xml notation</td></tr><tr><td><span class="term"><i><tt>pubid</tt></i>:</span></td><td>the public identifier, which is an alternative to the system identifier</td></tr><tr><td><span class="term"><i><tt>sysid</tt></i>:</span></td><td>the system identifier, which is the URI of the DTD</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteElement" id="xmlTextWriterWriteElement"></a>Function: xmlTextWriterWriteElement</h3><pre class="programlisting">int xmlTextWriterWriteElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write an xml element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>element content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteElementNS" id="xmlTextWriterWriteElementNS"></a>Function: xmlTextWriterWriteElementNS</h3><pre class="programlisting">int xmlTextWriterWriteElementNS (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write an xml element with namespace support.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>namespace prefix</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element local name</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>namespace URI</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>element content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatAttribute" id="xmlTextWriterWriteFormatAttribute"></a>Function: xmlTextWriterWriteFormatAttribute</h3><pre class="programlisting">int xmlTextWriterWriteFormatAttribute (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted xml attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td><a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatAttributeNS" id="xmlTextWriterWriteFormatAttributeNS"></a>Function: xmlTextWriterWriteFormatAttributeNS</h3><pre class="programlisting">int xmlTextWriterWriteFormatAttributeNS (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted xml attribute.with namespace support</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>namespace prefix</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td><a href="libxml-SAX.html#attribute">attribute</a> local name</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>namespace URI</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatCDATA" id="xmlTextWriterWriteFormatCDATA"></a>Function: xmlTextWriterWriteFormatCDATA</h3><pre class="programlisting">int xmlTextWriterWriteFormatCDATA (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted xml CDATA.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatComment" id="xmlTextWriterWriteFormatComment"></a>Function: xmlTextWriterWriteFormatComment</h3><pre class="programlisting">int xmlTextWriterWriteFormatComment (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write an xml comment.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatDTD" id="xmlTextWriterWriteFormatDTD"></a>Function: xmlTextWriterWriteFormatDTD</h3><pre class="programlisting">int xmlTextWriterWriteFormatDTD (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a DTD with a formatted markup declarations part.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD</td></tr><tr><td><span class="term"><i><tt>pubid</tt></i>:</span></td><td>the public identifier, which is an alternative to the system identifier</td></tr><tr><td><span class="term"><i><tt>sysid</tt></i>:</span></td><td>the system identifier, which is the URI of the DTD</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatDTDAttlist" id="xmlTextWriterWriteFormatDTDAttlist"></a>Function: xmlTextWriterWriteFormatDTDAttlist</h3><pre class="programlisting">int xmlTextWriterWriteFormatDTDAttlist (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted DTD ATTLIST.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD ATTLIST</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatDTDElement" id="xmlTextWriterWriteFormatDTDElement"></a>Function: xmlTextWriterWriteFormatDTDElement</h3><pre class="programlisting">int xmlTextWriterWriteFormatDTDElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted DTD element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD element</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatDTDInternalEntity" id="xmlTextWriterWriteFormatDTDInternalEntity"></a>Function: xmlTextWriterWriteFormatDTDInternalEntity</h3><pre class="programlisting">int xmlTextWriterWriteFormatDTDInternalEntity (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted DTD internal entity.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>pe</tt></i>:</span></td><td>TRUE if this is a parameter entity, FALSE if not</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD entity</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatElement" id="xmlTextWriterWriteFormatElement"></a>Function: xmlTextWriterWriteFormatElement</h3><pre class="programlisting">int xmlTextWriterWriteFormatElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted xml element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element name</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatElementNS" id="xmlTextWriterWriteFormatElementNS"></a>Function: xmlTextWriterWriteFormatElementNS</h3><pre class="programlisting">int xmlTextWriterWriteFormatElementNS (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted xml element with namespace support.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>namespace prefix</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element local name</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>namespace URI</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatPI" id="xmlTextWriterWriteFormatPI"></a>Function: xmlTextWriterWriteFormatPI</h3><pre class="programlisting">int xmlTextWriterWriteFormatPI (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted PI.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>PI target</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatRaw" id="xmlTextWriterWriteFormatRaw"></a>Function: xmlTextWriterWriteFormatRaw</h3><pre class="programlisting">int xmlTextWriterWriteFormatRaw (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted raw xml text.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteFormatString" id="xmlTextWriterWriteFormatString"></a>Function: xmlTextWriterWriteFormatString</h3><pre class="programlisting">int xmlTextWriterWriteFormatString (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> ... ...)<br />
+</pre><p>Write a formatted xml text.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra parameters for the format</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWritePI" id="xmlTextWriterWritePI"></a>Function: xmlTextWriterWritePI</h3><pre class="programlisting">int xmlTextWriterWritePI (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write an xml PI.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>PI target</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>PI content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteRaw" id="xmlTextWriterWriteRaw"></a>Function: xmlTextWriterWriteRaw</h3><pre class="programlisting">int xmlTextWriterWriteRaw (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write a raw xml text.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>text string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteRawLen" id="xmlTextWriterWriteRawLen"></a>Function: xmlTextWriterWriteRawLen</h3><pre class="programlisting">int xmlTextWriterWriteRawLen (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br /> int len)<br />
+</pre><p>Write an xml text. TODO: what about entities and special chars??</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>text string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>length of the text string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteString" id="xmlTextWriterWriteString"></a>Function: xmlTextWriterWriteString</h3><pre class="programlisting">int xmlTextWriterWriteString (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+</pre><p>Write an xml text.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>text string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatAttribute" id="xmlTextWriterWriteVFormatAttribute"></a>Function: xmlTextWriterWriteVFormatAttribute</h3><pre class="programlisting">int xmlTextWriterWriteVFormatAttribute (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted xml attribute.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td><a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatAttributeNS" id="xmlTextWriterWriteVFormatAttributeNS"></a>Function: xmlTextWriterWriteVFormatAttributeNS</h3><pre class="programlisting">int xmlTextWriterWriteVFormatAttributeNS (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted xml attribute.with namespace support</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>namespace prefix</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td><a href="libxml-SAX.html#attribute">attribute</a> local name</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>namespace URI</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatCDATA" id="xmlTextWriterWriteVFormatCDATA"></a>Function: xmlTextWriterWriteVFormatCDATA</h3><pre class="programlisting">int xmlTextWriterWriteVFormatCDATA (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted xml CDATA.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatComment" id="xmlTextWriterWriteVFormatComment"></a>Function: xmlTextWriterWriteVFormatComment</h3><pre class="programlisting">int xmlTextWriterWriteVFormatComment (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write an xml comment.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatDTD" id="xmlTextWriterWriteVFormatDTD"></a>Function: xmlTextWriterWriteVFormatDTD</h3><pre class="programlisting">int xmlTextWriterWriteVFormatDTD (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a DTD with a formatted markup declarations part.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD</td></tr><tr><td><span class="term"><i><tt>pubid</tt></i>:</span></td><td>the public identifier, which is an alternative to the system identifier</td></tr><tr><td><span class="term"><i><tt>sysid</tt></i>:</span></td><td>the system identifier, which is the URI of the DTD</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatDTDAttlist" id="xmlTextWriterWriteVFormatDTDAttlist"></a>Function: xmlTextWriterWriteVFormatDTDAttlist</h3><pre class="programlisting">int xmlTextWriterWriteVFormatDTDAttlist (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted DTD ATTLIST.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD ATTLIST</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatDTDElement" id="xmlTextWriterWriteVFormatDTDElement"></a>Function: xmlTextWriterWriteVFormatDTDElement</h3><pre class="programlisting">int xmlTextWriterWriteVFormatDTDElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted DTD element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD element</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatDTDInternalEntity" id="xmlTextWriterWriteVFormatDTDInternalEntity"></a>Function: xmlTextWriterWriteVFormatDTDInternalEntity</h3><pre class="programlisting">int xmlTextWriterWriteVFormatDTDInternalEntity (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> int pe, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted DTD internal entity.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>pe</tt></i>:</span></td><td>TRUE if this is a parameter entity, FALSE if not</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the DTD entity</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatElement" id="xmlTextWriterWriteVFormatElement"></a>Function: xmlTextWriterWriteVFormatElement</h3><pre class="programlisting">int xmlTextWriterWriteVFormatElement (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted xml element.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element name</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatElementNS" id="xmlTextWriterWriteVFormatElementNS"></a>Function: xmlTextWriterWriteVFormatElementNS</h3><pre class="programlisting">int xmlTextWriterWriteVFormatElementNS (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted xml element with namespace support.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>namespace prefix</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element local name</td></tr><tr><td><span class="term"><i><tt>namespaceURI</tt></i>:</span></td><td>namespace URI</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatPI" id="xmlTextWriterWriteVFormatPI"></a>Function: xmlTextWriterWriteVFormatPI</h3><pre class="programlisting">int xmlTextWriterWriteVFormatPI (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * target, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted xml PI.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>target</tt></i>:</span></td><td>PI target</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatRaw" id="xmlTextWriterWriteVFormatRaw"></a>Function: xmlTextWriterWriteVFormatRaw</h3><pre class="programlisting">int xmlTextWriterWriteVFormatRaw (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted raw xml text.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterWriteVFormatString" id="xmlTextWriterWriteVFormatString"></a>Function: xmlTextWriterWriteVFormatString</h3><pre class="programlisting">int xmlTextWriterWriteVFormatString (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br /> const char * format, <br /> va_list argptr)<br />
+</pre><p>Write a formatted xml text.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>format string (see printf)</td></tr><tr><td><span class="term"><i><tt>argptr</tt></i>:</span></td><td>pointer to the first member of the variable argument list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><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-xpath.html b/doc/html/libxml-xpath.html
new file mode 100644
index 0000000..373c1ae
--- /dev/null
+++ b/doc/html/libxml-xpath.html
@@ -0,0 +1,284 @@
+<?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 xpath from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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
+</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>
+</pre><pre class="programlisting">Structure <a href="#xmlXPathCompExpr">xmlXPathCompExpr</a><br />struct _xmlXPathCompExpr
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xpath.html#xmlXPathCompExpr">xmlXPathCompExpr</a> * <a name="xmlXPathCompExprPtr" id="xmlXPathCompExprPtr">xmlXPathCompExprPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlXPathContext">xmlXPathContext</a><br />struct _xmlXPathContext
+</pre><pre class="programlisting">Typedef <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a> * <a name="xmlXPathContextPtr" id="xmlXPathContextPtr">xmlXPathContextPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlXPathError">xmlXPathError</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-xpath.html#xmlXPathFunct">xmlXPathFunct</a> * <a name="xmlXPathFuncPtr" id="xmlXPathFuncPtr">xmlXPathFuncPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlXPathFunct">xmlXPathFunct</a><br />struct _xmlXPathFunct
+</pre><pre class="programlisting">Structure <a href="#xmlXPathObject">xmlXPathObject</a><br />struct _xmlXPathObject
+</pre><pre class="programlisting">Typedef <a href="libxml-xpath.html#xmlXPathObject">xmlXPathObject</a> * <a name="xmlXPathObjectPtr" id="xmlXPathObjectPtr">xmlXPathObjectPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlXPathObjectType">xmlXPathObjectType</a>
+</pre><pre class="programlisting">Structure <a href="#xmlXPathParserContext">xmlXPathParserContext</a><br />struct _xmlXPathParserContext
+</pre><pre class="programlisting">Typedef <a href="libxml-xpath.html#xmlXPathParserContext">xmlXPathParserContext</a> * <a name="xmlXPathParserContextPtr" id="xmlXPathParserContextPtr">xmlXPathParserContextPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlXPathType">xmlXPathType</a><br />struct _xmlXPathType
+</pre><pre class="programlisting">Typedef <a href="libxml-xpath.html#xmlXPathType">xmlXPathType</a> * <a name="xmlXPathTypePtr" id="xmlXPathTypePtr">xmlXPathTypePtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlXPathVariable">xmlXPathVariable</a><br />struct _xmlXPathVariable
+</pre><pre class="programlisting">Typedef <a href="libxml-xpath.html#xmlXPathVariable">xmlXPathVariable</a> * <a name="xmlXPathVariablePtr" id="xmlXPathVariablePtr">xmlXPathVariablePtr</a>
+</pre><pre class="programlisting">Function type: <a href="#xmlXPathAxisFunc">xmlXPathAxisFunc</a>
+<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathAxisFunc">xmlXPathAxisFunc</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> cur)
+</pre>
+<pre class="programlisting">double <a href="#xmlXPathCastBooleanToNumber">xmlXPathCastBooleanToNumber</a> (int val)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathCastBooleanToString">xmlXPathCastBooleanToString</a> (int val)</pre>
+<pre class="programlisting">int <a href="#xmlXPathCastNodeSetToBoolean">xmlXPathCastNodeSetToBoolean</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> ns)</pre>
+<pre class="programlisting">double <a href="#xmlXPathCastNodeSetToNumber">xmlXPathCastNodeSetToNumber</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> ns)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathCastNodeSetToString">xmlXPathCastNodeSetToString</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> ns)</pre>
+<pre class="programlisting">double <a href="#xmlXPathCastNodeToNumber">xmlXPathCastNodeToNumber</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathCastNodeToString">xmlXPathCastNodeToString</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">int <a href="#xmlXPathCastNumberToBoolean">xmlXPathCastNumberToBoolean</a> (double val)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathCastNumberToString">xmlXPathCastNumberToString</a> (double val)</pre>
+<pre class="programlisting">int <a href="#xmlXPathCastStringToBoolean">xmlXPathCastStringToBoolean</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)</pre>
+<pre class="programlisting">double <a href="#xmlXPathCastStringToNumber">xmlXPathCastStringToNumber</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)</pre>
+<pre class="programlisting">int <a href="#xmlXPathCastToBoolean">xmlXPathCastToBoolean</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting">double <a href="#xmlXPathCastToNumber">xmlXPathCastToNumber</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathCastToString">xmlXPathCastToString</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting">int <a href="#xmlXPathCmpNodes">xmlXPathCmpNodes</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node1, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> <a href="#xmlXPathCompile">xmlXPathCompile</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathCompiledEval">xmlXPathCompiledEval</a> (<a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> comp, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathConvertBoolean">xmlXPathConvertBoolean</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting">Function type: <a href="#xmlXPathConvertFunc">xmlXPathConvertFunc</a>
+int <a href="#xmlXPathConvertFunc">xmlXPathConvertFunc</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> obj, <br /> int type)
+</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathConvertNumber">xmlXPathConvertNumber</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathConvertString">xmlXPathConvertString</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> <a href="#xmlXPathCtxtCompile">xmlXPathCtxtCompile</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathEval">xmlXPathEval</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathEvalExpression">xmlXPathEvalExpression</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)</pre>
+<pre class="programlisting">Function type: <a href="#xmlXPathEvalFunc">xmlXPathEvalFunc</a>
+void <a href="#xmlXPathEvalFunc">xmlXPathEvalFunc</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)
+</pre>
+<pre class="programlisting">int <a href="#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> res)</pre>
+<pre class="programlisting">void <a href="#xmlXPathFreeCompExpr">xmlXPathFreeCompExpr</a> (<a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> comp)</pre>
+<pre class="programlisting">void <a href="#xmlXPathFreeContext">xmlXPathFreeContext</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathFreeNodeSet">xmlXPathFreeNodeSet</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> obj)</pre>
+<pre class="programlisting">void <a href="#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> obj)</pre>
+<pre class="programlisting">void <a href="#xmlXPathFreeObject">xmlXPathFreeObject</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> obj)</pre>
+<pre class="programlisting">Function type: <a href="#xmlXPathFunction">xmlXPathFunction</a>
+void <a href="#xmlXPathFunction">xmlXPathFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)
+</pre>
+<pre class="programlisting">void <a href="#xmlXPathInit">xmlXPathInit</a> (void)</pre>
+<pre class="programlisting">int <a href="#xmlXPathIsInf">xmlXPathIsInf</a> (double val)</pre>
+<pre class="programlisting">int <a href="#xmlXPathIsNaN">xmlXPathIsNaN</a> (double val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> <a href="#xmlXPathNewContext">xmlXPathNewContext</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathObjectCopy">xmlXPathObjectCopy</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting">long <a href="#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<h2>Description</h2>
+<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>
+<h3><a name="xmlNodeSet" id="xmlNodeSet">Structure xmlNodeSet</a></h3><pre class="programlisting">Structure xmlNodeSet<br />struct _xmlNodeSet {
+ int nodeNr : number of nodes in the set
+ int nodeMax : size of the array as allocated
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * nodeTab : array of nodes in no particular order @
+}</pre><h3><a name="xmlXPathAxis" id="xmlXPathAxis">Structure xmlXPathAxis</a></h3><pre class="programlisting">Structure xmlXPathAxis<br />struct _xmlXPathAxis {
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : the axis name
+ <a href="libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a> func : the search function
+}</pre><h3><a name="xmlXPathCompExpr" id="xmlXPathCompExpr">Structure xmlXPathCompExpr</a></h3><pre class="programlisting">Structure xmlXPathCompExpr<br />struct _xmlXPathCompExpr {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlXPathContext" id="xmlXPathContext">Structure xmlXPathContext</a></h3><pre class="programlisting">Structure xmlXPathContext<br />struct _xmlXPathContext {
+ <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc : The current document
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node : The current node
+ int nb_variables_unused : unused (hash table)
+ int max_variables_unused : unused (hash table)
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> varHash : Hash table of defined variables
+ int nb_types : number of defined types
+ int max_types : max number of types
+ <a href="libxml-xpath.html#xmlXPathTypePtr">xmlXPathTypePtr</a> types : Array of defined types
+ int nb_funcs_unused : unused (hash table)
+ int max_funcs_unused : unused (hash table)
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> funcHash : Hash table of defined funcs
+ int nb_axis : number of defined axis
+ int max_axis : max number of axis
+ <a href="libxml-xpath.html#xmlXPathAxisPtr">xmlXPathAxisPtr</a> axis : Array of defined axis the namespace nod
+ <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> * namespaces : Array of namespaces
+ int nsNr : number of namespace in scope
+ void * user : function to free extra variables
+ int contextSize : the context size
+ int proximityPosition : the proximity position extra stuff for
+ int xptr : it this an XPointer context
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> here : for here()
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> origin : for origin() the set of namespace decla
+ <a href="libxml-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> nsHash : The namespaces hash table
+ void * varLookupFunc : variable lookup func
+ void * varLookupData : variable lookup data Possibility to lin
+ void * extra : needed for XSLT The function name and U
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * function
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * functionURI : function lookup function and data
+ void * funcLookupFunc : function lookup func
+ void * funcLookupData : function lookup data temporary namespac
+ <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> * tmpNsList : Array of namespaces
+ int tmpNsNr : number of namespace in scope error repo
+ void * userData : user specific data block
+ <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> error : the callback in case of errors
+ <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
+}</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
+ <a name="XPATH_UNFINISHED_LITERAL_ERROR" id="XPATH_UNFINISHED_LITERAL_ERROR">XPATH_UNFINISHED_LITERAL_ERROR</a> = 2
+ <a name="XPATH_START_LITERAL_ERROR" id="XPATH_START_LITERAL_ERROR">XPATH_START_LITERAL_ERROR</a> = 3
+ <a name="XPATH_VARIABLE_REF_ERROR" id="XPATH_VARIABLE_REF_ERROR">XPATH_VARIABLE_REF_ERROR</a> = 4
+ <a name="XPATH_UNDEF_VARIABLE_ERROR" id="XPATH_UNDEF_VARIABLE_ERROR">XPATH_UNDEF_VARIABLE_ERROR</a> = 5
+ <a name="XPATH_INVALID_PREDICATE_ERROR" id="XPATH_INVALID_PREDICATE_ERROR">XPATH_INVALID_PREDICATE_ERROR</a> = 6
+ <a name="XPATH_EXPR_ERROR" id="XPATH_EXPR_ERROR">XPATH_EXPR_ERROR</a> = 7
+ <a name="XPATH_UNCLOSED_ERROR" id="XPATH_UNCLOSED_ERROR">XPATH_UNCLOSED_ERROR</a> = 8
+ <a name="XPATH_UNKNOWN_FUNC_ERROR" id="XPATH_UNKNOWN_FUNC_ERROR">XPATH_UNKNOWN_FUNC_ERROR</a> = 9
+ <a name="XPATH_INVALID_OPERAND" id="XPATH_INVALID_OPERAND">XPATH_INVALID_OPERAND</a> = 10
+ <a name="XPATH_INVALID_TYPE" id="XPATH_INVALID_TYPE">XPATH_INVALID_TYPE</a> = 11
+ <a name="XPATH_INVALID_ARITY" id="XPATH_INVALID_ARITY">XPATH_INVALID_ARITY</a> = 12
+ <a name="XPATH_INVALID_CTXT_SIZE" id="XPATH_INVALID_CTXT_SIZE">XPATH_INVALID_CTXT_SIZE</a> = 13
+ <a name="XPATH_INVALID_CTXT_POSITION" id="XPATH_INVALID_CTXT_POSITION">XPATH_INVALID_CTXT_POSITION</a> = 14
+ <a name="XPATH_MEMORY_ERROR" id="XPATH_MEMORY_ERROR">XPATH_MEMORY_ERROR</a> = 15
+ <a name="XPTR_SYNTAX_ERROR" id="XPTR_SYNTAX_ERROR">XPTR_SYNTAX_ERROR</a> = 16
+ <a name="XPTR_RESOURCE_ERROR" id="XPTR_RESOURCE_ERROR">XPTR_RESOURCE_ERROR</a> = 17
+ <a name="XPTR_SUB_RESOURCE_ERROR" id="XPTR_SUB_RESOURCE_ERROR">XPTR_SUB_RESOURCE_ERROR</a> = 18
+ <a name="XPATH_UNDEF_PREFIX_ERROR" id="XPATH_UNDEF_PREFIX_ERROR">XPATH_UNDEF_PREFIX_ERROR</a> = 19
+ <a name="XPATH_ENCODING_ERROR" id="XPATH_ENCODING_ERROR">XPATH_ENCODING_ERROR</a> = 20
+ <a name="XPATH_INVALID_CHAR_ERROR" id="XPATH_INVALID_CHAR_ERROR">XPATH_INVALID_CHAR_ERROR</a> = 21
+}
+</pre><h3><a name="xmlXPathFunct" id="xmlXPathFunct">Structure xmlXPathFunct</a></h3><pre class="programlisting">Structure xmlXPathFunct<br />struct _xmlXPathFunct {
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : the function name
+ <a href="libxml-xpath.html#xmlXPathEvalFunc">xmlXPathEvalFunc</a> func : the evaluation function
+}</pre><h3><a name="xmlXPathObject" id="xmlXPathObject">Structure xmlXPathObject</a></h3><pre class="programlisting">Structure xmlXPathObject<br />struct _xmlXPathObject {
+ <a href="libxml-xpath.html#xmlXPathObjectType">xmlXPathObjectType</a> type
+ <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodesetval
+ int boolval
+ double floatval
+ <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * stringval
+ void * user
+ int index
+ void * user2
+ int index2
+}</pre><h3>Enum <a name="xmlXPathObjectType" id="xmlXPathObjectType">xmlXPathObjectType</a></h3><pre class="programlisting">Enum xmlXPathObjectType {
+ <a name="XPATH_UNDEFINED" id="XPATH_UNDEFINED">XPATH_UNDEFINED</a> = 0
+ <a name="XPATH_NODESET" id="XPATH_NODESET">XPATH_NODESET</a> = 1
+ <a name="XPATH_BOOLEAN" id="XPATH_BOOLEAN">XPATH_BOOLEAN</a> = 2
+ <a name="XPATH_NUMBER" id="XPATH_NUMBER">XPATH_NUMBER</a> = 3
+ <a name="XPATH_STRING" id="XPATH_STRING">XPATH_STRING</a> = 4
+ <a name="XPATH_POINT" id="XPATH_POINT">XPATH_POINT</a> = 5
+ <a name="XPATH_RANGE" id="XPATH_RANGE">XPATH_RANGE</a> = 6
+ <a name="XPATH_LOCATIONSET" id="XPATH_LOCATIONSET">XPATH_LOCATIONSET</a> = 7
+ <a name="XPATH_USERS" id="XPATH_USERS">XPATH_USERS</a> = 8
+ <a name="XPATH_XSLT_TREE" id="XPATH_XSLT_TREE">XPATH_XSLT_TREE</a> = 9 : An XSLT value tree, non modifiable
+}
+</pre><h3><a name="xmlXPathParserContext" id="xmlXPathParserContext">Structure xmlXPathParserContext</a></h3><pre class="programlisting">Structure xmlXPathParserContext<br />struct _xmlXPathParserContext {
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur : the current char being parsed
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * base : the full expression
+ int error : error code
+ <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> context : the evaluation context
+ <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> value : the current value
+ int valueNr : number of values stacked
+ int valueMax : max number of values stacked
+ <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> * valueTab : stack of values
+ <a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> comp : the precompiled expression
+ int xptr : it this an XPointer expression
+ <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> ancestor : used for walking preceding axis
+}</pre><h3><a name="xmlXPathType" id="xmlXPathType">Structure xmlXPathType</a></h3><pre class="programlisting">Structure xmlXPathType<br />struct _xmlXPathType {
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : the type name
+ <a href="libxml-xpath.html#xmlXPathConvertFunc">xmlXPathConvertFunc</a> func : the conversion function
+}</pre><h3><a name="xmlXPathVariable" id="xmlXPathVariable">Structure xmlXPathVariable</a></h3><pre class="programlisting">Structure xmlXPathVariable<br />struct _xmlXPathVariable {
+ const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name : the variable name
+ <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> value : the value
+}</pre><h3><a name="xmlXPathAxisFunc" id="xmlXPathAxisFunc"></a>Function type: xmlXPathAxisFunc</h3><pre class="programlisting">Function type: xmlXPathAxisFunc
+<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathAxisFunc (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> cur)
+</pre><p>An axis traversal function. To traverse an axis, the engine calls the first time with cur == NULL and repeat until the function returns NULL indicating the end of the axis traversal.</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 XPath interpreter context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the previous node being explored on that axis</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next node in that axis or NULL if at the end of the axis.</td></tr></tbody></table></div><br />
+<h3><a name="xmlXPathCastBooleanToNumber" id="xmlXPathCastBooleanToNumber"></a>Function: xmlXPathCastBooleanToNumber</h3><pre class="programlisting">double xmlXPathCastBooleanToNumber (int val)<br />
+</pre><p>Converts a boolean to its number value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a boolean</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number value</td></tr></tbody></table></div><h3><a name="xmlXPathCastBooleanToString" id="xmlXPathCastBooleanToString"></a>Function: xmlXPathCastBooleanToString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlXPathCastBooleanToString (int val)<br />
+</pre><p>Converts a boolean to its string value.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a boolean</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a newly allocated string.</td></tr></tbody></table></div><h3><a name="xmlXPathCastNodeSetToBoolean" id="xmlXPathCastNodeSetToBoolean"></a>Function: xmlXPathCastNodeSetToBoolean</h3><pre class="programlisting">int xmlXPathCastNodeSetToBoolean (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> ns)<br />
+</pre><p>Converts a node-set to its boolean value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the boolean value</td></tr></tbody></table></div><h3><a name="xmlXPathCastNodeSetToNumber" id="xmlXPathCastNodeSetToNumber"></a>Function: xmlXPathCastNodeSetToNumber</h3><pre class="programlisting">double xmlXPathCastNodeSetToNumber (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> ns)<br />
+</pre><p>Converts a node-set to its number value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number value</td></tr></tbody></table></div><h3><a name="xmlXPathCastNodeSetToString" id="xmlXPathCastNodeSetToString"></a>Function: xmlXPathCastNodeSetToString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlXPathCastNodeSetToString (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> ns)<br />
+</pre><p>Converts a node-set to its string value.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a newly allocated string.</td></tr></tbody></table></div><h3><a name="xmlXPathCastNodeToNumber" id="xmlXPathCastNodeToNumber"></a>Function: xmlXPathCastNodeToNumber</h3><pre class="programlisting">double xmlXPathCastNodeToNumber (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Converts a node to its number value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number value</td></tr></tbody></table></div><h3><a name="xmlXPathCastNodeToString" id="xmlXPathCastNodeToString"></a>Function: xmlXPathCastNodeToString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlXPathCastNodeToString (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Converts a node to its string value.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a newly allocated string.</td></tr></tbody></table></div><h3><a name="xmlXPathCastNumberToBoolean" id="xmlXPathCastNumberToBoolean"></a>Function: xmlXPathCastNumberToBoolean</h3><pre class="programlisting">int xmlXPathCastNumberToBoolean (double val)<br />
+</pre><p>Converts a number to its boolean value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a number</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the boolean value</td></tr></tbody></table></div><h3><a name="xmlXPathCastNumberToString" id="xmlXPathCastNumberToString"></a>Function: xmlXPathCastNumberToString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlXPathCastNumberToString (double val)<br />
+</pre><p>Converts a number to its string value.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a number</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a newly allocated string.</td></tr></tbody></table></div><h3><a name="xmlXPathCastStringToBoolean" id="xmlXPathCastStringToBoolean"></a>Function: xmlXPathCastStringToBoolean</h3><pre class="programlisting">int xmlXPathCastStringToBoolean (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)<br />
+</pre><p>Converts a string to its boolean value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the boolean value</td></tr></tbody></table></div><h3><a name="xmlXPathCastStringToNumber" id="xmlXPathCastStringToNumber"></a>Function: xmlXPathCastStringToNumber</h3><pre class="programlisting">double xmlXPathCastStringToNumber (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)<br />
+</pre><p>Converts a string to its number value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number value</td></tr></tbody></table></div><h3><a name="xmlXPathCastToBoolean" id="xmlXPathCastToBoolean"></a>Function: xmlXPathCastToBoolean</h3><pre class="programlisting">int xmlXPathCastToBoolean (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>Converts an XPath object to its boolean value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an XPath object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the boolean value</td></tr></tbody></table></div><h3><a name="xmlXPathCastToNumber" id="xmlXPathCastToNumber"></a>Function: xmlXPathCastToNumber</h3><pre class="programlisting">double xmlXPathCastToNumber (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>Converts an XPath object to its number value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an XPath object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number value</td></tr></tbody></table></div><h3><a name="xmlXPathCastToString" id="xmlXPathCastToString"></a>Function: xmlXPathCastToString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlXPathCastToString (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>Converts an existing object to its string() equivalent</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an XPath object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the string value of the object, NULL in case of error. A new string is allocated only if needed (@val isn't a string object).</td></tr></tbody></table></div><h3><a name="xmlXPathCmpNodes" id="xmlXPathCmpNodes"></a>Function: xmlXPathCmpNodes</h3><pre class="programlisting">int xmlXPathCmpNodes (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node1, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node2)<br />
+</pre><p>Compare two nodes w.r.t document order</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node1</tt></i>:</span></td><td>the first node</td></tr><tr><td><span class="term"><i><tt>node2</tt></i>:</span></td><td>the second node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-2 in case of error 1 if first point &lt; second point, 0 if it's the same node, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathCompile" id="xmlXPathCompile"></a>Function: xmlXPathCompile</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> xmlXPathCompile (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>Compile an XPath expression</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 XPath expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> resulting from the compilation or NULL. the caller has to free the object.</td></tr></tbody></table></div><h3><a name="xmlXPathCompiledEval" id="xmlXPathCompiledEval"></a>Function: xmlXPathCompiledEval</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathCompiledEval (<a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> comp, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)<br />
+</pre><p>Evaluate the Precompiled XPath expression in the given context.</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 compiled XPath expression</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the XPath context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> resulting from the evaluation or NULL. the caller has to free the object.</td></tr></tbody></table></div><h3><a name="xmlXPathConvertBoolean" id="xmlXPathConvertBoolean"></a>Function: xmlXPathConvertBoolean</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathConvertBoolean (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>Converts an existing object to its boolean() equivalent</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an XPath object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new object, the old one is freed (or the operation is done directly on @val)</td></tr></tbody></table></div><h3><a name="xmlXPathConvertFunc" id="xmlXPathConvertFunc"></a>Function type: xmlXPathConvertFunc</h3><pre class="programlisting">Function type: xmlXPathConvertFunc
+int xmlXPathConvertFunc (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> obj, <br /> int type)
+</pre><p>A conversion function is associated to a type and used to cast the new type to primitive values.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>obj</tt></i>:</span></td><td>an XPath object</td></tr><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the number of the target type</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><br />
+<h3><a name="xmlXPathConvertNumber" id="xmlXPathConvertNumber"></a>Function: xmlXPathConvertNumber</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathConvertNumber (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>Converts an existing object to its number() equivalent</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an XPath object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new object, the old one is freed (or the operation is done directly on @val)</td></tr></tbody></table></div><h3><a name="xmlXPathConvertString" id="xmlXPathConvertString"></a>Function: xmlXPathConvertString</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathConvertString (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>Converts an existing object to its string() equivalent</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an XPath object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new object, the old one is freed (or the operation is done directly on @val)</td></tr></tbody></table></div><h3><a name="xmlXPathCtxtCompile" id="xmlXPathCtxtCompile"></a>Function: xmlXPathCtxtCompile</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> xmlXPathCtxtCompile (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>Compile an XPath 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>an XPath context</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the XPath expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> resulting from the compilation or NULL. the caller has to free the object.</td></tr></tbody></table></div><h3><a name="xmlXPathEval" id="xmlXPathEval"></a>Function: xmlXPathEval</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathEval (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)<br />
+</pre><p>Evaluate the XPath Location Path in the given context.</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 XPath expression</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the XPath context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> resulting from the evaluation or NULL. the caller has to free the object.</td></tr></tbody></table></div><h3><a name="xmlXPathEvalExpression" id="xmlXPathEvalExpression"></a>Function: xmlXPathEvalExpression</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathEvalExpression (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)<br />
+</pre><p>Evaluate the XPath expression in the given context.</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 XPath expression</td></tr><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the XPath context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> resulting from the evaluation or NULL. the caller has to free the object.</td></tr></tbody></table></div><h3><a name="xmlXPathEvalFunc" id="xmlXPathEvalFunc"></a>Function type: xmlXPathEvalFunc</h3><pre class="programlisting">Function type: xmlXPathEvalFunc
+void xmlXPathEvalFunc (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)
+</pre><p>An XPath evaluation function, the parameters are on the XPath context stack.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments passed to the function</td></tr></tbody></table></div><br />
+<h3><a name="xmlXPathEvalPredicate" id="xmlXPathEvalPredicate"></a>Function: xmlXPathEvalPredicate</h3><pre class="programlisting">int xmlXPathEvalPredicate (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> res)<br />
+</pre><p>Evaluate a predicate result for the current node. A PredicateExpr is evaluated by evaluating the Expr and converting the result to a boolean. If the result is a number, the result will be converted to true if the number is equal to the position of the context node in the context node list (as returned by the position function) and will be converted to false otherwise; if the result is not a number, then the result will be converted as if by a call to the boolean function.</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 XPath context</td></tr><tr><td><span class="term"><i><tt>res</tt></i>:</span></td><td>the Predicate Expression evaluation result</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if predicate is true, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathFreeCompExpr" id="xmlXPathFreeCompExpr"></a>Function: xmlXPathFreeCompExpr</h3><pre class="programlisting">void xmlXPathFreeCompExpr (<a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> comp)<br />
+</pre><p>Free up the memory allocated by @comp</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>an XPATH comp</td></tr></tbody></table></div><h3><a name="xmlXPathFreeContext" id="xmlXPathFreeContext"></a>Function: xmlXPathFreeContext</h3><pre class="programlisting">void xmlXPathFreeContext (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)<br />
+</pre><p>Free up an <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the context to free</td></tr></tbody></table></div><h3><a name="xmlXPathFreeNodeSet" id="xmlXPathFreeNodeSet"></a>Function: xmlXPathFreeNodeSet</h3><pre class="programlisting">void xmlXPathFreeNodeSet (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> obj)<br />
+</pre><p>Free the NodeSet compound (not the actual nodes !).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>obj</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> to free</td></tr></tbody></table></div><h3><a name="xmlXPathFreeNodeSetList" id="xmlXPathFreeNodeSetList"></a>Function: xmlXPathFreeNodeSetList</h3><pre class="programlisting">void xmlXPathFreeNodeSetList (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> obj)<br />
+</pre><p>Free up the <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> @obj but don't deallocate the objects in the list contrary to xmlXPathFreeObject().</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>obj</tt></i>:</span></td><td>an existing NodeSetList object</td></tr></tbody></table></div><h3><a name="xmlXPathFreeObject" id="xmlXPathFreeObject"></a>Function: xmlXPathFreeObject</h3><pre class="programlisting">void xmlXPathFreeObject (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> obj)<br />
+</pre><p>Free up an <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> object.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>obj</tt></i>:</span></td><td>the object to free</td></tr></tbody></table></div><h3><a name="xmlXPathFunction" id="xmlXPathFunction"></a>Function type: xmlXPathFunction</h3><pre class="programlisting">Function type: xmlXPathFunction
+void xmlXPathFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)
+</pre><p>An XPath function. The arguments (if any) are popped out from the context stack and the result is pushed on the stack.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the XPath interprestation context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><br />
+<h3><a name="xmlXPathInit" id="xmlXPathInit"></a>Function: xmlXPathInit</h3><pre class="programlisting">void xmlXPathInit (void)<br />
+</pre><p>Initialize the XPath environment</p>
+<h3><a name="xmlXPathIsInf" id="xmlXPathIsInf"></a>Function: xmlXPathIsInf</h3><pre class="programlisting">int xmlXPathIsInf (double val)<br />
+</pre><p>Provides a portable isinf() function to detect whether a double is a +Infinite or -Infinite. Based on trio code http://sourceforge.net/projects/ctrio/</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathIsNaN" id="xmlXPathIsNaN"></a>Function: xmlXPathIsNaN</h3><pre class="programlisting">int xmlXPathIsNaN (double val)<br />
+</pre><p>Provides a portable isnan() function to detect whether a double is a NotaNumber. Based on trio code http://sourceforge.net/projects/ctrio/</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the value is a NaN, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathNewContext" id="xmlXPathNewContext"></a>Function: xmlXPathNewContext</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> xmlXPathNewContext (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a> just allocated. The caller will need to free it.</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetCreate" id="xmlXPathNodeSetCreate"></a>Function: xmlXPathNodeSetCreate</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathNodeSetCreate (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> of type double and of value @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an initial xmlNodePtr, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathObjectCopy" id="xmlXPathObjectCopy"></a>Function: xmlXPathObjectCopy</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathObjectCopy (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>allocate a new copy of a given object</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the original object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathOrderDocElems" id="xmlXPathOrderDocElems"></a>Function: xmlXPathOrderDocElems</h3><pre class="programlisting">long xmlXPathOrderDocElems (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Call this routine to speed up XPath computation on static documents. This stamps all the element nodes with the document order Like for line information, the order is kept in the element-&gt;content field, the value stored is actually - the node number (starting at -1) to be able to differentiate from line numbers.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>an input document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements found in the document or -1 in case of error.</td></tr></tbody></table></div><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-xpathInternals.html b/doc/html/libxml-xpathInternals.html
new file mode 100644
index 0000000..8168ad4
--- /dev/null
+++ b/doc/html/libxml-xpathInternals.html
@@ -0,0 +1,406 @@
+<?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 xpathInternals from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xpathInternals 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xpath.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xpath.html">xpath</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-xpointer.html">xpointer</a></th><td><a accesskey="n" href="libxml-xpointer.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>internal interfaces for XML Path Language implementation used to build new modules on top of XPath like XPointer and XSLT </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#CAST_TO_BOOLEAN">CAST_TO_BOOLEAN</a></pre><pre class="programlisting">#define <a href="#CAST_TO_NUMBER">CAST_TO_NUMBER</a></pre><pre class="programlisting">#define <a href="#CAST_TO_STRING">CAST_TO_STRING</a></pre><pre class="programlisting">#define <a href="#CHECK_ARITY">CHECK_ARITY</a></pre><pre class="programlisting">#define <a href="#CHECK_ERROR">CHECK_ERROR</a></pre><pre class="programlisting">#define <a href="#CHECK_ERROR0">CHECK_ERROR0</a></pre><pre class="programlisting">#define <a href="#CHECK_TYPE">CHECK_TYPE</a></pre><pre class="programlisting">#define <a href="#CHECK_TYPE0">CHECK_TYPE0</a></pre><pre class="programlisting">#define <a href="#XP_ERROR">XP_ERROR</a></pre><pre class="programlisting">#define <a href="#XP_ERROR0">XP_ERROR0</a></pre><pre class="programlisting">#define <a href="#xmlXPathCheckError">xmlXPathCheckError</a></pre><pre class="programlisting">#define <a href="#xmlXPathEmptyNodeSet">xmlXPathEmptyNodeSet</a></pre><pre class="programlisting">#define <a href="#xmlXPathGetContextNode">xmlXPathGetContextNode</a></pre><pre class="programlisting">#define <a href="#xmlXPathGetDocument">xmlXPathGetDocument</a></pre><pre class="programlisting">#define <a href="#xmlXPathGetError">xmlXPathGetError</a></pre><pre class="programlisting">#define <a href="#xmlXPathReturnBoolean">xmlXPathReturnBoolean</a></pre><pre class="programlisting">#define <a href="#xmlXPathReturnEmptyNodeSet">xmlXPathReturnEmptyNodeSet</a></pre><pre class="programlisting">#define <a href="#xmlXPathReturnEmptyString">xmlXPathReturnEmptyString</a></pre><pre class="programlisting">#define <a href="#xmlXPathReturnExternal">xmlXPathReturnExternal</a></pre><pre class="programlisting">#define <a href="#xmlXPathReturnFalse">xmlXPathReturnFalse</a></pre><pre class="programlisting">#define <a href="#xmlXPathReturnNodeSet">xmlXPathReturnNodeSet</a></pre><pre class="programlisting">#define <a href="#xmlXPathReturnNumber">xmlXPathReturnNumber</a></pre><pre class="programlisting">#define <a href="#xmlXPathReturnString">xmlXPathReturnString</a></pre><pre class="programlisting">#define <a href="#xmlXPathReturnTrue">xmlXPathReturnTrue</a></pre><pre class="programlisting">#define <a href="#xmlXPathSetArityError">xmlXPathSetArityError</a></pre><pre class="programlisting">#define <a href="#xmlXPathSetError">xmlXPathSetError</a></pre><pre class="programlisting">#define <a href="#xmlXPathSetTypeError">xmlXPathSetTypeError</a></pre><pre class="programlisting">#define <a href="#xmlXPathStackIsExternal">xmlXPathStackIsExternal</a></pre><pre class="programlisting">#define <a href="#xmlXPathStackIsNodeSet">xmlXPathStackIsNodeSet</a></pre><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#valuePop">valuePop</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#valuePush">valuePush</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> value)</pre>
+<pre class="programlisting">void <a href="#xmlXPathAddValues">xmlXPathAddValues</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">int <a href="#xmlXPathCompareValues">xmlXPathCompareValues</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int inf, <br /> int strict)</pre>
+<pre class="programlisting">void <a href="#xmlXPathConcatFunction">xmlXPathConcatFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathContainsFunction">xmlXPathContainsFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathCountFunction">xmlXPathCountFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a> (FILE * output, <br /> <a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> comp, <br /> int depth)</pre>
+<pre class="programlisting">void <a href="#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a> (FILE * output, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> cur, <br /> int depth)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathDifference">xmlXPathDifference</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathDistinct">xmlXPathDistinct</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes)</pre>
+<pre class="programlisting">void <a href="#xmlXPathDivValues">xmlXPathDivValues</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlXPathEqualValues">xmlXPathEqualValues</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathErr">xmlXPathErr</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int error)</pre>
+<pre class="programlisting">void <a href="#xmlXPathEvalExpr">xmlXPathEvalExpr</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> res)</pre>
+<pre class="programlisting">void <a href="#xmlXPathFalseFunction">xmlXPathFalseFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathFloorFunction">xmlXPathFloorFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathFreeParserContext">xmlXPathFreeParserContext</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">Function type: <a href="#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a>
+<a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> <a href="#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</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>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> <a href="#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> <a href="#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> 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>
+<pre class="programlisting">int <a href="#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)</pre>
+<pre class="programlisting">void <a href="#xmlXPathIdFunction">xmlXPathIdFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathIntersection">xmlXPathIntersection</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)</pre>
+<pre class="programlisting">int <a href="#xmlXPathIsNodeType">xmlXPathIsNodeType</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">void <a href="#xmlXPathLangFunction">xmlXPathLangFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathLastFunction">xmlXPathLastFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathLeading">xmlXPathLeading</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathLeadingSorted">xmlXPathLeadingSorted</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)</pre>
+<pre class="programlisting">void <a href="#xmlXPathLocalNameFunction">xmlXPathLocalNameFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathModValues">xmlXPathModValues</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathMultValues">xmlXPathMultValues</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNamespaceURIFunction">xmlXPathNamespaceURIFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathNewBoolean">xmlXPathNewBoolean</a> (int val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathNewCString">xmlXPathNewCString</a> (const char * val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathNewFloat">xmlXPathNewFloat</a> (double val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathNewNodeSet">xmlXPathNewNodeSet</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> <a href="#xmlXPathNewParserContext">xmlXPathNewParserContext</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathNewString">xmlXPathNewString</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathNewValueTree">xmlXPathNewValueTree</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextAncestor">xmlXPathNextAncestor</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextAncestorOrSelf">xmlXPathNextAncestorOrSelf</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextAttribute">xmlXPathNextAttribute</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextChild">xmlXPathNextChild</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextDescendant">xmlXPathNextDescendant</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextFollowing">xmlXPathNextFollowing</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextFollowingSibling">xmlXPathNextFollowingSibling</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextNamespace">xmlXPathNextNamespace</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextParent">xmlXPathNextParent</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextPreceding">xmlXPathNextPreceding</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPathNextSelf">xmlXPathNextSelf</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathNodeLeading">xmlXPathNodeLeading</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
+<pre class="programlisting">int <a href="#xmlXPathNodeSetContains">xmlXPathNodeSetContains</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a> (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathNodeSetMerge">xmlXPathNodeSetMerge</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> val1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> val2)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNodeSetRemove">xmlXPathNodeSetRemove</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> int val)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNodeSetSort">xmlXPathNodeSetSort</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> set)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">int <a href="#xmlXPathNotEqualValues">xmlXPathNotEqualValues</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNotFunction">xmlXPathNotFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathNsLookup">xmlXPathNsLookup</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
+<pre class="programlisting">void <a href="#xmlXPathNumberFunction">xmlXPathNumberFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathParseNCName">xmlXPathParseNCName</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathParseName">xmlXPathParseName</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlXPathPopBoolean">xmlXPathPopBoolean</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void * <a href="#xmlXPathPopExternal">xmlXPathPopExternal</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathPopNodeSet">xmlXPathPopNodeSet</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">double <a href="#xmlXPathPopNumber">xmlXPathPopNumber</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathPopString">xmlXPathPopString</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathPositionFunction">xmlXPathPositionFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathRegisterAllFunctions">xmlXPathRegisterAllFunctions</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> f)</pre>
+<pre class="programlisting">void <a href="#xmlXPathRegisterFuncLookup">xmlXPathRegisterFuncLookup</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> <a href="libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a> f, <br /> void * funcCtxt)</pre>
+<pre class="programlisting">int <a href="#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri, <br /> <a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> f)</pre>
+<pre class="programlisting">int <a href="#xmlXPathRegisterNs">xmlXPathRegisterNs</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri)</pre>
+<pre class="programlisting">int <a href="#xmlXPathRegisterVariable">xmlXPathRegisterVariable</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> value)</pre>
+<pre class="programlisting">void <a href="#xmlXPathRegisterVariableLookup">xmlXPathRegisterVariableLookup</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> <a href="libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a> f, <br /> void * data)</pre>
+<pre class="programlisting">int <a href="#xmlXPathRegisterVariableNS">xmlXPathRegisterVariableNS</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> value)</pre>
+<pre class="programlisting">void <a href="#xmlXPathRegisteredFuncsCleanup">xmlXPathRegisteredFuncsCleanup</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathRegisteredNsCleanup">xmlXPathRegisteredNsCleanup</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathRegisteredVariablesCleanup">xmlXPathRegisteredVariablesCleanup</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathRoot">xmlXPathRoot</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathRoundFunction">xmlXPathRoundFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathStartsWithFunction">xmlXPathStartsWithFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">double <a href="#xmlXPathStringEvalNumber">xmlXPathStringEvalNumber</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting">void <a href="#xmlXPathStringFunction">xmlXPathStringFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathSubValues">xmlXPathSubValues</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathSumFunction">xmlXPathSumFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathTrailing">xmlXPathTrailing</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> <a href="#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)</pre>
+<pre class="programlisting">void <a href="#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathTrueFunction">xmlXPathTrueFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting">void <a href="#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathVariableLookup">xmlXPathVariableLookup</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">Function type: <a href="#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a>
+<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a> (void * ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri)
+</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathVariableLookupNS">xmlXPathVariableLookupNS</a> (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> 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>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathWrapCString">xmlXPathWrapCString</a> (char * val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathWrapExternal">xmlXPathWrapExternal</a> (void * val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPathWrapString">xmlXPathWrapString</a> (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)</pre>
+<pre class="programlisting">void <a href="#xmlXPatherror">xmlXPatherror</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> const char * file, <br /> int line, <br /> int no)</pre>
+<h2>Description</h2>
+<h3><a name="CAST_TO_BOOLEAN" id="CAST_TO_BOOLEAN"></a>Macro: CAST_TO_BOOLEAN</h3><pre>#define CAST_TO_BOOLEAN</pre><p>Macro to try to cast the value on the top of the XPath stack to a boolean.</p>
+<h3><a name="CAST_TO_NUMBER" id="CAST_TO_NUMBER"></a>Macro: CAST_TO_NUMBER</h3><pre>#define CAST_TO_NUMBER</pre><p>Macro to try to cast the value on the top of the XPath stack to a number.</p>
+<h3><a name="CAST_TO_STRING" id="CAST_TO_STRING"></a>Macro: CAST_TO_STRING</h3><pre>#define CAST_TO_STRING</pre><p>Macro to try to cast the value on the top of the XPath stack to a string.</p>
+<h3><a name="CHECK_ARITY" id="CHECK_ARITY"></a>Macro: CHECK_ARITY</h3><pre>#define CHECK_ARITY</pre><p>Macro to check that the number of args passed to an XPath function matches.</p>
+<h3><a name="CHECK_ERROR" id="CHECK_ERROR"></a>Macro: CHECK_ERROR</h3><pre>#define CHECK_ERROR</pre><p>Macro to return from the function if an XPath error was detected.</p>
+<h3><a name="CHECK_ERROR0" id="CHECK_ERROR0"></a>Macro: CHECK_ERROR0</h3><pre>#define CHECK_ERROR0</pre><p>Macro to return 0 from the function if an XPath error was detected.</p>
+<h3><a name="CHECK_TYPE" id="CHECK_TYPE"></a>Macro: CHECK_TYPE</h3><pre>#define CHECK_TYPE</pre><p>Macro to check that the value on top of the XPath stack is of a given type.</p>
+<h3><a name="CHECK_TYPE0" id="CHECK_TYPE0"></a>Macro: CHECK_TYPE0</h3><pre>#define CHECK_TYPE0</pre><p>Macro to check that the value on top of the XPath stack is of a given type. Return(0) in case of failure</p>
+<h3><a name="XP_ERROR" id="XP_ERROR"></a>Macro: XP_ERROR</h3><pre>#define XP_ERROR</pre><p>Macro to raise an XPath error and return.</p>
+<h3><a name="XP_ERROR0" id="XP_ERROR0"></a>Macro: XP_ERROR0</h3><pre>#define XP_ERROR0</pre><p>Macro to raise an XPath error and return 0.</p>
+<h3><a name="xmlXPathCheckError" id="xmlXPathCheckError"></a>Macro: xmlXPathCheckError</h3><pre>#define xmlXPathCheckError</pre><p>Check if an XPath error was raised. Returns true if an error has been raised, false otherwise.</p>
+<h3><a name="xmlXPathEmptyNodeSet" id="xmlXPathEmptyNodeSet"></a>Macro: xmlXPathEmptyNodeSet</h3><pre>#define xmlXPathEmptyNodeSet</pre><p>Empties a node-set.</p>
+<h3><a name="xmlXPathGetContextNode" id="xmlXPathGetContextNode"></a>Macro: xmlXPathGetContextNode</h3><pre>#define xmlXPathGetContextNode</pre><p>Get the context node of an XPath context. Returns the context node.</p>
+<h3><a name="xmlXPathGetDocument" id="xmlXPathGetDocument"></a>Macro: xmlXPathGetDocument</h3><pre>#define xmlXPathGetDocument</pre><p>Get the document of an XPath context. Returns the context document.</p>
+<h3><a name="xmlXPathGetError" id="xmlXPathGetError"></a>Macro: xmlXPathGetError</h3><pre>#define xmlXPathGetError</pre><p>Get the error code of an XPath context. Returns the context error.</p>
+<h3><a name="xmlXPathReturnBoolean" id="xmlXPathReturnBoolean"></a>Macro: xmlXPathReturnBoolean</h3><pre>#define xmlXPathReturnBoolean</pre><p>Pushes the boolean @val on the context stack.</p>
+<h3><a name="xmlXPathReturnEmptyNodeSet" id="xmlXPathReturnEmptyNodeSet"></a>Macro: xmlXPathReturnEmptyNodeSet</h3><pre>#define xmlXPathReturnEmptyNodeSet</pre><p>Pushes an empty node-set on the context stack.</p>
+<h3><a name="xmlXPathReturnEmptyString" id="xmlXPathReturnEmptyString"></a>Macro: xmlXPathReturnEmptyString</h3><pre>#define xmlXPathReturnEmptyString</pre><p>Pushes an empty string on the stack.</p>
+<h3><a name="xmlXPathReturnExternal" id="xmlXPathReturnExternal"></a>Macro: xmlXPathReturnExternal</h3><pre>#define xmlXPathReturnExternal</pre><p>Pushes user data on the context stack.</p>
+<h3><a name="xmlXPathReturnFalse" id="xmlXPathReturnFalse"></a>Macro: xmlXPathReturnFalse</h3><pre>#define xmlXPathReturnFalse</pre><p>Pushes false on the context stack.</p>
+<h3><a name="xmlXPathReturnNodeSet" id="xmlXPathReturnNodeSet"></a>Macro: xmlXPathReturnNodeSet</h3><pre>#define xmlXPathReturnNodeSet</pre><p>Pushes the node-set @ns on the context stack.</p>
+<h3><a name="xmlXPathReturnNumber" id="xmlXPathReturnNumber"></a>Macro: xmlXPathReturnNumber</h3><pre>#define xmlXPathReturnNumber</pre><p>Pushes the double @val on the context stack.</p>
+<h3><a name="xmlXPathReturnString" id="xmlXPathReturnString"></a>Macro: xmlXPathReturnString</h3><pre>#define xmlXPathReturnString</pre><p>Pushes the string @str on the context stack.</p>
+<h3><a name="xmlXPathReturnTrue" id="xmlXPathReturnTrue"></a>Macro: xmlXPathReturnTrue</h3><pre>#define xmlXPathReturnTrue</pre><p>Pushes true on the context stack.</p>
+<h3><a name="xmlXPathSetArityError" id="xmlXPathSetArityError"></a>Macro: xmlXPathSetArityError</h3><pre>#define xmlXPathSetArityError</pre><p>Raises an <a href="libxml-xpath.html#XPATH_INVALID_ARITY">XPATH_INVALID_ARITY</a> error.</p>
+<h3><a name="xmlXPathSetError" id="xmlXPathSetError"></a>Macro: xmlXPathSetError</h3><pre>#define xmlXPathSetError</pre><p>Raises an error.</p>
+<h3><a name="xmlXPathSetTypeError" id="xmlXPathSetTypeError"></a>Macro: xmlXPathSetTypeError</h3><pre>#define xmlXPathSetTypeError</pre><p>Raises an <a href="libxml-xpath.html#XPATH_INVALID_TYPE">XPATH_INVALID_TYPE</a> error.</p>
+<h3><a name="xmlXPathStackIsExternal" id="xmlXPathStackIsExternal"></a>Macro: xmlXPathStackIsExternal</h3><pre>#define xmlXPathStackIsExternal</pre><p>Checks if the current value on the XPath stack is an external object. Returns true if the current object on the stack is an external object.</p>
+<h3><a name="xmlXPathStackIsNodeSet" id="xmlXPathStackIsNodeSet"></a>Macro: xmlXPathStackIsNodeSet</h3><pre>#define xmlXPathStackIsNodeSet</pre><p>Check if the current value on the XPath stack is a node set or an XSLT value tree. Returns true if the current object on the stack is a node-set.</p>
+<h3><a name="valuePop" id="valuePop"></a>Function: valuePop</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> valuePop (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Pops the top XPath object from the value stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath evaluation context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the XPath object just removed</td></tr></tbody></table></div><h3><a name="valuePush" id="valuePush"></a>Function: valuePush</h3><pre class="programlisting">int valuePush (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> value)<br />
+</pre><p>Pushes a new XPath object on top of the value stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath evaluation context</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the XPath object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of items on the value stack</td></tr></tbody></table></div><h3><a name="xmlXPathAddValues" id="xmlXPathAddValues"></a>Function: xmlXPathAddValues</h3><pre class="programlisting">void xmlXPathAddValues (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Implement the add operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.</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 XPath Parser context</td></tr></tbody></table></div><h3><a name="xmlXPathBooleanFunction" id="xmlXPathBooleanFunction"></a>Function: xmlXPathBooleanFunction</h3><pre class="programlisting">void xmlXPathBooleanFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the boolean() XPath function boolean boolean(object) The boolean function converts its argument to a boolean as follows: - a number is true if and only if it is neither positive or negative zero nor NaN - a node-set is true if and only if it is non-empty - a string is true if and only if its length is non-zero</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathCeilingFunction" id="xmlXPathCeilingFunction"></a>Function: xmlXPathCeilingFunction</h3><pre class="programlisting">void xmlXPathCeilingFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the ceiling() XPath function number ceiling(number) The ceiling function returns the smallest (closest to negative infinity) number that is not less than the argument and that is an integer.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathCompareValues" id="xmlXPathCompareValues"></a>Function: xmlXPathCompareValues</h3><pre class="programlisting">int xmlXPathCompareValues (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int inf, <br /> int strict)<br />
+</pre><p>Implement the compare operation on XPath objects: @arg1 &lt; @arg2 (1, 1, ... @arg1 &lt;= @arg2 (1, 0, ... @arg1 &gt; @arg2 (0, 1, ... @arg1 &gt;= @arg2 (0, 0, ... When neither object to be compared is a node-set and the operator is &lt;=, &lt;, &gt;=, &gt;, then the objects are compared by converted both objects to numbers and comparing the numbers according to IEEE 754. The &lt; comparison will be true if and only if the first number is less than the second number. The &lt;= comparison will be true if and only if the first number is less than or equal to the second number. The &gt; comparison will be true if and only if the first number is greater than the second number. The &gt;= comparison will be true if and only if the first number is greater than or equal to the second number.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>inf</tt></i>:</span></td><td>less than (1) or greater than (0)</td></tr><tr><td><span class="term"><i><tt>strict</tt></i>:</span></td><td>is the comparison strict</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the comparison succeeded, 0 if it failed</td></tr></tbody></table></div><h3><a name="xmlXPathConcatFunction" id="xmlXPathConcatFunction"></a>Function: xmlXPathConcatFunction</h3><pre class="programlisting">void xmlXPathConcatFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the concat() XPath function string concat(string, string, string*) The concat function returns the concatenation of its arguments.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathContainsFunction" id="xmlXPathContainsFunction"></a>Function: xmlXPathContainsFunction</h3><pre class="programlisting">void xmlXPathContainsFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the contains() XPath function boolean contains(string, string) The contains function returns true if the first argument string contains the second argument string, and otherwise returns false.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathCountFunction" id="xmlXPathCountFunction"></a>Function: xmlXPathCountFunction</h3><pre class="programlisting">void xmlXPathCountFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the count() XPath function number count(node-set)</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathDebugDumpCompExpr" id="xmlXPathDebugDumpCompExpr"></a>Function: xmlXPathDebugDumpCompExpr</h3><pre class="programlisting">void xmlXPathDebugDumpCompExpr (FILE * output, <br /> <a href="libxml-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> comp, <br /> int depth)<br />
+</pre><p>Dumps the tree of the compiled XPath expression.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * for the output</td></tr><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>the precompiled XPath expression</td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>the indentation level.</td></tr></tbody></table></div><h3><a name="xmlXPathDebugDumpObject" id="xmlXPathDebugDumpObject"></a>Function: xmlXPathDebugDumpObject</h3><pre class="programlisting">void xmlXPathDebugDumpObject (FILE * output, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> cur, <br /> int depth)<br />
+</pre><p>Dump the content of the object for debugging purposes</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>output</tt></i>:</span></td><td>the FILE * to dump the output</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the object to inspect</td></tr><tr><td><span class="term"><i><tt>depth</tt></i>:</span></td><td>indentation level</td></tr></tbody></table></div><h3><a name="xmlXPathDifference" id="xmlXPathDifference"></a>Function: xmlXPathDifference</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathDifference (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)<br />
+</pre><p>Implements the EXSLT - Sets difference() function: node-set set:difference (node-set, node-set)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes1</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>nodes2</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the difference between the two node sets, or nodes1 if nodes2 is empty</td></tr></tbody></table></div><h3><a name="xmlXPathDistinct" id="xmlXPathDistinct"></a>Function: xmlXPathDistinct</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathDistinct (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes)<br />
+</pre><p>Implements the EXSLT - Sets distinct() function: node-set set:distinct (node-set) @nodes is sorted by document order, then #exslSetsDistinctSorted is called with the sorted node-set</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a subset of the nodes contained in @nodes, or @nodes if it is empty</td></tr></tbody></table></div><h3><a name="xmlXPathDistinctSorted" id="xmlXPathDistinctSorted"></a>Function: xmlXPathDistinctSorted</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathDistinctSorted (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes)<br />
+</pre><p>Implements the EXSLT - Sets distinct() function: node-set set:distinct (node-set)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a subset of the nodes contained in @nodes, or @nodes if it is empty</td></tr></tbody></table></div><h3><a name="xmlXPathDivValues" id="xmlXPathDivValues"></a>Function: xmlXPathDivValues</h3><pre class="programlisting">void xmlXPathDivValues (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Implement the div operation on XPath objects @arg1 / @arg2: The numeric operators convert their operands to numbers as if by calling the number function.</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 XPath Parser context</td></tr></tbody></table></div><h3><a name="xmlXPathEqualValues" id="xmlXPathEqualValues"></a>Function: xmlXPathEqualValues</h3><pre class="programlisting">int xmlXPathEqualValues (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Implement the equal operation on XPath objects content: @arg1 == @arg2</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or 1 depending on the results of the test.</td></tr></tbody></table></div><h3><a name="xmlXPathErr" id="xmlXPathErr"></a>Function: xmlXPathErr</h3><pre class="programlisting">void xmlXPathErr (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int error)<br />
+</pre><p>Handle a Relax NG Parsing error</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 XPath parser context</td></tr><tr><td><span class="term"><i><tt>error</tt></i>:</span></td><td>the error code</td></tr></tbody></table></div><h3><a name="xmlXPathEvalExpr" id="xmlXPathEvalExpr"></a>Function: xmlXPathEvalExpr</h3><pre class="programlisting">void xmlXPathEvalExpr (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Parse and evaluate an XPath expression in the given context, then push the result on the context stack</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the XPath Parser context</td></tr></tbody></table></div><h3><a name="xmlXPathEvaluatePredicateResult" id="xmlXPathEvaluatePredicateResult"></a>Function: xmlXPathEvaluatePredicateResult</h3><pre class="programlisting">int xmlXPathEvaluatePredicateResult (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> res)<br />
+</pre><p>Evaluate a predicate result for the current node. A PredicateExpr is evaluated by evaluating the Expr and converting the result to a boolean. If the result is a number, the result will be converted to true if the number is equal to the position of the context node in the context node list (as returned by the position function) and will be converted to false otherwise; if the result is not a number, then the result will be converted as if by a call to the boolean function.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>res</tt></i>:</span></td><td>the Predicate Expression evaluation result</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if predicate is true, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathFalseFunction" id="xmlXPathFalseFunction"></a>Function: xmlXPathFalseFunction</h3><pre class="programlisting">void xmlXPathFalseFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the false() XPath function boolean false()</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathFloorFunction" id="xmlXPathFloorFunction"></a>Function: xmlXPathFloorFunction</h3><pre class="programlisting">void xmlXPathFloorFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the floor() XPath function number floor(number) The floor function returns the largest (closest to positive infinity) number that is not greater than the argument and that is an integer.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathFreeParserContext" id="xmlXPathFreeParserContext"></a>Function: xmlXPathFreeParserContext</h3><pre class="programlisting">void xmlXPathFreeParserContext (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Free up an <a href="libxml-xpath.html#xmlXPathParserContext">xmlXPathParserContext</a></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 context to free</td></tr></tbody></table></div><h3><a name="xmlXPathFuncLookupFunc" id="xmlXPathFuncLookupFunc"></a>Function type: xmlXPathFuncLookupFunc</h3><pre class="programlisting">Function type: xmlXPathFuncLookupFunc
+<a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> xmlXPathFuncLookupFunc (void * ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri)
+</pre><p>Prototype for callbacks used to plug function lookup in the XPath engine.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>name of the function</td></tr><tr><td><span class="term"><i><tt>ns_uri</tt></i>:</span></td><td>the namespace name hosting this function</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the XPath function or NULL if not found.</td></tr></tbody></table></div><br />
+<h3><a name="xmlXPathFunctionLookup" id="xmlXPathFunctionLookup"></a>Function: xmlXPathFunctionLookup</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> xmlXPathFunctionLookup (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Search in the Function array of the context for the given function.</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 XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the function name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlXPathFunctionLookupNS" id="xmlXPathFunctionLookupNS"></a>Function: xmlXPathFunctionLookupNS</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> xmlXPathFunctionLookupNS (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri)<br />
+</pre><p>Search in the Function array of the context for the given function.</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 XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the function name</td></tr><tr><td><span class="term"><i><tt>ns_uri</tt></i>:</span></td><td>the function namespace URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlXPathHasSameNodes" id="xmlXPathHasSameNodes"></a>Function: xmlXPathHasSameNodes</h3><pre class="programlisting">int xmlXPathHasSameNodes (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)<br />
+</pre><p>Implements the EXSLT - Sets has-same-nodes function: boolean set:has-same-node(node-set, node-set)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes1</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>nodes2</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true (1) if @nodes1 shares any node with @nodes2, false (0) otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathIdFunction" id="xmlXPathIdFunction"></a>Function: xmlXPathIdFunction</h3><pre class="programlisting">void xmlXPathIdFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the id() XPath function node-set id(object) The id function selects elements by their unique ID (see [5.2.1 Unique IDs]). When the argument to id is of type node-set, then the result is the union of the result of applying id to the string value of each of the nodes in the argument node-set. When the argument to id is of any other type, the argument is converted to a string as if by a call to the string function; the string is split into a whitespace-separated list of tokens (whitespace is any sequence of <a href="libxml-SAX.html#characters">characters</a> matching the production S); the result is a node-set containing the elements in the same document as the context node that have a unique ID equal to any of the tokens in the list.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathIntersection" id="xmlXPathIntersection"></a>Function: xmlXPathIntersection</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathIntersection (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)<br />
+</pre><p>Implements the EXSLT - Sets intersection() function: node-set set:intersection (node-set, node-set)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes1</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>nodes2</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a node set comprising the nodes that are within both the node sets passed as arguments</td></tr></tbody></table></div><h3><a name="xmlXPathIsNodeType" id="xmlXPathIsNodeType"></a>Function: xmlXPathIsNodeType</h3><pre class="programlisting">int xmlXPathIsNodeType (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Is the name given a NodeType one. [38] NodeType ::= 'comment' | 'text' | 'processing-instruction' | 'node'</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>a name string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathLangFunction" id="xmlXPathLangFunction"></a>Function: xmlXPathLangFunction</h3><pre class="programlisting">void xmlXPathLangFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the lang() XPath function boolean lang(string) The lang function returns true or false depending on whether the language of the context node as specified by xml:lang attributes is the same as or is a sublanguage of the language specified by the argument string. The language of the context node is determined by the value of the xml:lang <a href="libxml-SAX.html#attribute">attribute</a> on the context node, or, if the context node has no xml:lang attribute, by the value of the xml:lang <a href="libxml-SAX.html#attribute">attribute</a> on the nearest ancestor of the context node that has an xml:lang attribute. If there is no such attribute, then lang</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathLastFunction" id="xmlXPathLastFunction"></a>Function: xmlXPathLastFunction</h3><pre class="programlisting">void xmlXPathLastFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the last() XPath function number last() The last function returns the number of nodes in the context node 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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathLeading" id="xmlXPathLeading"></a>Function: xmlXPathLeading</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathLeading (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)<br />
+</pre><p>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set) @nodes1 and @nodes2 are sorted by document order, then #exslSetsLeadingSorted is called.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes1</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>nodes2</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes1 that precede the first node in @nodes2 in document order, @nodes1 if @nodes2 is NULL or empty or an empty node-set if @nodes1 doesn't contain @nodes2</td></tr></tbody></table></div><h3><a name="xmlXPathLeadingSorted" id="xmlXPathLeadingSorted"></a>Function: xmlXPathLeadingSorted</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathLeadingSorted (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)<br />
+</pre><p>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes1</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>nodes2</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes1 that precede the first node in @nodes2 in document order, @nodes1 if @nodes2 is NULL or empty or an empty node-set if @nodes1 doesn't contain @nodes2</td></tr></tbody></table></div><h3><a name="xmlXPathLocalNameFunction" id="xmlXPathLocalNameFunction"></a>Function: xmlXPathLocalNameFunction</h3><pre class="programlisting">void xmlXPathLocalNameFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the local-name() XPath function string local-name(node-set?) The local-name function returns a string containing the local part of the name of the node in the argument node-set that is first in document order. If the node-set is empty or the first node has no name, an empty string is returned. If the argument is omitted it defaults to the context node.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathModValues" id="xmlXPathModValues"></a>Function: xmlXPathModValues</h3><pre class="programlisting">void xmlXPathModValues (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Implement the mod operation on XPath objects: @arg1 / @arg2 The numeric operators convert their operands to numbers as if by calling the number function.</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 XPath Parser context</td></tr></tbody></table></div><h3><a name="xmlXPathMultValues" id="xmlXPathMultValues"></a>Function: xmlXPathMultValues</h3><pre class="programlisting">void xmlXPathMultValues (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Implement the multiply operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.</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 XPath Parser context</td></tr></tbody></table></div><h3><a name="xmlXPathNamespaceURIFunction" id="xmlXPathNamespaceURIFunction"></a>Function: xmlXPathNamespaceURIFunction</h3><pre class="programlisting">void xmlXPathNamespaceURIFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the namespace-uri() XPath function string namespace-uri(node-set?) The namespace-uri function returns a string containing the namespace URI of the expanded name of the node in the argument node-set that is first in document order. If the node-set is empty, the first node has no name, or the expanded name has no namespace URI, an empty string is returned. If the argument is omitted it defaults to the context node.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathNewBoolean" id="xmlXPathNewBoolean"></a>Function: xmlXPathNewBoolean</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathNewBoolean (int val)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type boolean and of value @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the boolean value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathNewCString" id="xmlXPathNewCString"></a>Function: xmlXPathNewCString</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathNewCString (const char * val)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type string and of value @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the char * value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathNewFloat" id="xmlXPathNewFloat"></a>Function: xmlXPathNewFloat</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathNewFloat (double val)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type double and of value @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathNewNodeSet" id="xmlXPathNewNodeSet"></a>Function: xmlXPathNewNodeSet</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathNewNodeSet (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type NodeSet and initialize it with the single Node @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the NodePtr value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathNewNodeSetList" id="xmlXPathNewNodeSetList"></a>Function: xmlXPathNewNodeSetList</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathNewNodeSetList (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> val)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type NodeSet and initialize it with the Nodeset @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an existing NodeSet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathNewParserContext" id="xmlXPathNewParserContext"></a>Function: xmlXPathNewParserContext</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> xmlXPathNewParserContext (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathParserContext">xmlXPathParserContext</a></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 XPath expression</td></tr><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the XPath context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathParserContext">xmlXPathParserContext</a> just allocated.</td></tr></tbody></table></div><h3><a name="xmlXPathNewString" id="xmlXPathNewString"></a>Function: xmlXPathNewString</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathNewString (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type string and of value @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathNewValueTree" id="xmlXPathNewValueTree"></a>Function: xmlXPathNewValueTree</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathNewValueTree (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type Value Tree (XSLT) and initialize it with the tree root @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the NodePtr value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathNextAncestor" id="xmlXPathNextAncestor"></a>Function: xmlXPathNextAncestor</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextAncestor (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "ancestor" direction the ancestor axis contains the ancestors of the context node; the ancestors of the context node consist of the parent of context node and the parent's parent and so on; the nodes are ordered in reverse document order; thus the parent is the first node on the axis, and the parent's parent is the second node on the axis</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextAncestorOrSelf" id="xmlXPathNextAncestorOrSelf"></a>Function: xmlXPathNextAncestorOrSelf</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextAncestorOrSelf (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "ancestor-or-self" direction he ancestor-or-self axis contains the context node and ancestors of the context node in reverse document order; thus the context node is the first node on the axis, and the context node's parent the second; parent here is defined the same as with the parent axis.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextAttribute" id="xmlXPathNextAttribute"></a>Function: xmlXPathNextAttribute</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextAttribute (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "attribute" direction TODO: support DTD inherited default attributes</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current <a href="libxml-SAX.html#attribute">attribute</a> in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextChild" id="xmlXPathNextChild"></a>Function: xmlXPathNextChild</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextChild (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "child" direction The child axis contains the children of the context node in document order.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextDescendant" id="xmlXPathNextDescendant"></a>Function: xmlXPathNextDescendant</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextDescendant (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "descendant" direction the descendant axis contains the descendants of the context node in document order; a descendant is a child or a child of a child and so on.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextDescendantOrSelf" id="xmlXPathNextDescendantOrSelf"></a>Function: xmlXPathNextDescendantOrSelf</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextDescendantOrSelf (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "descendant-or-self" direction the descendant-or-self axis contains the context node and the descendants of the context node in document order; thus the context node is the first node on the axis, and the first child of the context node is the second node on the axis</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextFollowing" id="xmlXPathNextFollowing"></a>Function: xmlXPathNextFollowing</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextFollowing (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "following" direction The following axis contains all nodes in the same document as the context node that are after the context node in document order, excluding any descendants and excluding <a href="libxml-SAX.html#attribute">attribute</a> nodes and namespace nodes; the nodes are ordered in document order</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextFollowingSibling" id="xmlXPathNextFollowingSibling"></a>Function: xmlXPathNextFollowingSibling</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextFollowingSibling (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "following-sibling" direction The following-sibling axis contains the following siblings of the context node in document order.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextNamespace" id="xmlXPathNextNamespace"></a>Function: xmlXPathNextNamespace</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextNamespace (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "namespace" direction the namespace axis contains the namespace nodes of the context node; the order of nodes on this axis is implementation-defined; the axis will be empty unless the context node is an element We keep the XML namespace node at the end of the list.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current <a href="libxml-SAX.html#attribute">attribute</a> in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextParent" id="xmlXPathNextParent"></a>Function: xmlXPathNextParent</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextParent (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "parent" direction The parent axis contains the parent of the context node, if there is one.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextPreceding" id="xmlXPathNextPreceding"></a>Function: xmlXPathNextPreceding</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextPreceding (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "preceding" direction the preceding axis contains all nodes in the same document as the context node that are before the context node in document order, excluding any ancestors and excluding <a href="libxml-SAX.html#attribute">attribute</a> nodes and namespace nodes; the nodes are ordered in reverse document order</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextPrecedingSibling" id="xmlXPathNextPrecedingSibling"></a>Function: xmlXPathNextPrecedingSibling</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextPrecedingSibling (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "preceding-sibling" direction The preceding-sibling axis contains the preceding siblings of the context node in reverse document order; the first preceding sibling is first on the axis; the sibling preceding that node is the second on the axis and so on.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNextSelf" id="xmlXPathNextSelf"></a>Function: xmlXPathNextSelf</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPathNextSelf (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+</pre><p>Traversal function for the "self" direction The self axis contains just the context node itself</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node in the traversal</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the next element following that axis</td></tr></tbody></table></div><h3><a name="xmlXPathNodeLeading" id="xmlXPathNodeLeading"></a>Function: xmlXPathNodeLeading</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathNodeLeading (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set) @nodes is sorted by document order, then #exslSetsNodeLeadingSorted is called.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes that precede @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn't contain @node</td></tr></tbody></table></div><h3><a name="xmlXPathNodeLeadingSorted" id="xmlXPathNodeLeadingSorted"></a>Function: xmlXPathNodeLeadingSorted</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathNodeLeadingSorted (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes that precede @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn't contain @node</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetAdd" id="xmlXPathNodeSetAdd"></a>Function: xmlXPathNodeSetAdd</h3><pre class="programlisting">void xmlXPathNodeSetAdd (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+</pre><p>add a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> to an existing NodeSet</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetAddNs" id="xmlXPathNodeSetAddNs"></a>Function: xmlXPathNodeSetAddNs</h3><pre class="programlisting">void xmlXPathNodeSetAddNs (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)<br />
+</pre><p>add a new namespace node to an existing NodeSet</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the hosting node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a the namespace node</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetAddUnique" id="xmlXPathNodeSetAddUnique"></a>Function: xmlXPathNodeSetAddUnique</h3><pre class="programlisting">void xmlXPathNodeSetAddUnique (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+</pre><p>add a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> to an existing NodeSet, optimized version when we are sure the node is not already in the set.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetContains" id="xmlXPathNodeSetContains"></a>Function: xmlXPathNodeSetContains</h3><pre class="programlisting">int xmlXPathNodeSetContains (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+</pre><p>checks whether @cur contains @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node-set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true (1) if @cur contains @val, false (0) otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetDel" id="xmlXPathNodeSetDel"></a>Function: xmlXPathNodeSetDel</h3><pre class="programlisting">void xmlXPathNodeSetDel (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+</pre><p>Removes an <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> from an existing NodeSet</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetFreeNs" id="xmlXPathNodeSetFreeNs"></a>Function: xmlXPathNodeSetFreeNs</h3><pre class="programlisting">void xmlXPathNodeSetFreeNs (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)<br />
+</pre><p>Namespace nodes in libxml don't match the XPath semantic. In a node set the namespace nodes are duplicated and the next pointer is set to the parent node in the XPath semantic. Check if such a node needs to be freed</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>the XPath namespace node found in a nodeset.</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetMerge" id="xmlXPathNodeSetMerge"></a>Function: xmlXPathNodeSetMerge</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathNodeSetMerge (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> val1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> val2)<br />
+</pre><p>Merges two nodesets, all nodes from @val2 are added to @val1 if @val1 is NULL, a new set is created and copied from @val2</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val1</tt></i>:</span></td><td>the first NodeSet or NULL</td></tr><tr><td><span class="term"><i><tt>val2</tt></i>:</span></td><td>the second NodeSet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>@val1 once extended or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetRemove" id="xmlXPathNodeSetRemove"></a>Function: xmlXPathNodeSetRemove</h3><pre class="programlisting">void xmlXPathNodeSetRemove (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br /> int val)<br />
+</pre><p>Removes an entry from an existing NodeSet list.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the index to remove</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetSort" id="xmlXPathNodeSetSort"></a>Function: xmlXPathNodeSetSort</h3><pre class="programlisting">void xmlXPathNodeSetSort (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> set)<br />
+</pre><p>Sort the node set in document order</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>set</tt></i>:</span></td><td>the node set</td></tr></tbody></table></div><h3><a name="xmlXPathNodeTrailing" id="xmlXPathNodeTrailing"></a>Function: xmlXPathNodeTrailing</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathNodeTrailing (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set) @nodes is sorted by document order, then #xmlXPathNodeTrailingSorted is called.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes that follow @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn't contain @node</td></tr></tbody></table></div><h3><a name="xmlXPathNodeTrailingSorted" id="xmlXPathNodeTrailingSorted"></a>Function: xmlXPathNodeTrailingSorted</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathNodeTrailingSorted (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+</pre><p>Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes that follow @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn't contain @node</td></tr></tbody></table></div><h3><a name="xmlXPathNormalizeFunction" id="xmlXPathNormalizeFunction"></a>Function: xmlXPathNormalizeFunction</h3><pre class="programlisting">void xmlXPathNormalizeFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the normalize-space() XPath function string normalize-space(string?) The normalize-space function returns the argument string with white space normalized by stripping leading and trailing whitespace and replacing sequences of whitespace <a href="libxml-SAX.html#characters">characters</a> by a single space. Whitespace <a href="libxml-SAX.html#characters">characters</a> are the same allowed by the S production in XML. If the argument is omitted, it defaults to the context node converted to a string, in other words the value of the context node.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathNotEqualValues" id="xmlXPathNotEqualValues"></a>Function: xmlXPathNotEqualValues</h3><pre class="programlisting">int xmlXPathNotEqualValues (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Implement the equal operation on XPath objects content: @arg1 == @arg2</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or 1 depending on the results of the test.</td></tr></tbody></table></div><h3><a name="xmlXPathNotFunction" id="xmlXPathNotFunction"></a>Function: xmlXPathNotFunction</h3><pre class="programlisting">void xmlXPathNotFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the not() XPath function boolean not(boolean) The not function returns true if its argument is false, and false otherwise.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathNsLookup" id="xmlXPathNsLookup"></a>Function: xmlXPathNsLookup</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlXPathNsLookup (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
+</pre><p>Search in the namespace declaration array of the context for the given namespace name associated to the given prefix</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 XPath context</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the namespace prefix value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlXPathNumberFunction" id="xmlXPathNumberFunction"></a>Function: xmlXPathNumberFunction</h3><pre class="programlisting">void xmlXPathNumberFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the number() XPath function number number(object?)</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathParseNCName" id="xmlXPathParseNCName"></a>Function: xmlXPathParseNCName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlXPathParseNCName (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>parse an XML namespace non qualified name. [NS 3] NCName ::= (Letter | '_') (NCNameChar)* [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the namespace name or NULL</td></tr></tbody></table></div><h3><a name="xmlXPathParseName" id="xmlXPathParseName"></a>Function: xmlXPathParseName</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlXPathParseName (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>parse an XML name [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)*</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the namespace name or NULL</td></tr></tbody></table></div><h3><a name="xmlXPathPopBoolean" id="xmlXPathPopBoolean"></a>Function: xmlXPathPopBoolean</h3><pre class="programlisting">int xmlXPathPopBoolean (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Pops a boolean from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the boolean</td></tr></tbody></table></div><h3><a name="xmlXPathPopExternal" id="xmlXPathPopExternal"></a>Function: xmlXPathPopExternal</h3><pre class="programlisting">void * xmlXPathPopExternal (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Pops an external object from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the object</td></tr></tbody></table></div><h3><a name="xmlXPathPopNodeSet" id="xmlXPathPopNodeSet"></a>Function: xmlXPathPopNodeSet</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathPopNodeSet (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Pops a node-set from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node-set</td></tr></tbody></table></div><h3><a name="xmlXPathPopNumber" id="xmlXPathPopNumber"></a>Function: xmlXPathPopNumber</h3><pre class="programlisting">double xmlXPathPopNumber (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Pops a number from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number</td></tr></tbody></table></div><h3><a name="xmlXPathPopString" id="xmlXPathPopString"></a>Function: xmlXPathPopString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlXPathPopString (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Pops a string from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the string</td></tr></tbody></table></div><h3><a name="xmlXPathPositionFunction" id="xmlXPathPositionFunction"></a>Function: xmlXPathPositionFunction</h3><pre class="programlisting">void xmlXPathPositionFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the position() XPath function number position() The position function returns the position of the context node in the context node list. The first position is 1, and so the last position will be equal to last().</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathRegisterAllFunctions" id="xmlXPathRegisterAllFunctions"></a>Function: xmlXPathRegisterAllFunctions</h3><pre class="programlisting">void xmlXPathRegisterAllFunctions (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)<br />
+</pre><p>Registers all default XPath functions in this 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 XPath context</td></tr></tbody></table></div><h3><a name="xmlXPathRegisterFunc" id="xmlXPathRegisterFunc"></a>Function: xmlXPathRegisterFunc</h3><pre class="programlisting">int xmlXPathRegisterFunc (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> f)<br />
+</pre><p>Register a new function. If @f is NULL it unregisters the function</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 XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the function name</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the function implementation or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlXPathRegisterFuncLookup" id="xmlXPathRegisterFuncLookup"></a>Function: xmlXPathRegisterFuncLookup</h3><pre class="programlisting">void xmlXPathRegisterFuncLookup (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> <a href="libxml-xpathInternals.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a> f, <br /> void * funcCtxt)<br />
+</pre><p>Registers an external mechanism to do function lookup.</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 XPath context</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the lookup function</td></tr><tr><td><span class="term"><i><tt>funcCtxt</tt></i>:</span></td><td>the lookup data</td></tr></tbody></table></div><h3><a name="xmlXPathRegisterFuncNS" id="xmlXPathRegisterFuncNS"></a>Function: xmlXPathRegisterFuncNS</h3><pre class="programlisting">int xmlXPathRegisterFuncNS (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri, <br /> <a href="libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a> f)<br />
+</pre><p>Register a new function. If @f is NULL it unregisters the function</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 XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the function name</td></tr><tr><td><span class="term"><i><tt>ns_uri</tt></i>:</span></td><td>the function namespace URI</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the function implementation or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlXPathRegisterNs" id="xmlXPathRegisterNs"></a>Function: xmlXPathRegisterNs</h3><pre class="programlisting">int xmlXPathRegisterNs (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri)<br />
+</pre><p>Register a new namespace. If @ns_uri is NULL it unregisters the namespace</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 XPath context</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the namespace prefix</td></tr><tr><td><span class="term"><i><tt>ns_uri</tt></i>:</span></td><td>the namespace name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlXPathRegisterVariable" id="xmlXPathRegisterVariable"></a>Function: xmlXPathRegisterVariable</h3><pre class="programlisting">int xmlXPathRegisterVariable (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> value)<br />
+</pre><p>Register a new variable value. If @value is NULL it unregisters the variable</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 XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the variable name</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the variable value or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlXPathRegisterVariableLookup" id="xmlXPathRegisterVariableLookup"></a>Function: xmlXPathRegisterVariableLookup</h3><pre class="programlisting">void xmlXPathRegisterVariableLookup (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> <a href="libxml-xpathInternals.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a> f, <br /> void * data)<br />
+</pre><p>register an external mechanism to do variable lookup</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 XPath context</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the lookup function</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>the lookup data</td></tr></tbody></table></div><h3><a name="xmlXPathRegisterVariableNS" id="xmlXPathRegisterVariableNS"></a>Function: xmlXPathRegisterVariableNS</h3><pre class="programlisting">int xmlXPathRegisterVariableNS (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> value)<br />
+</pre><p>Register a new variable value. If @value is NULL it unregisters the variable</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 XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the variable name</td></tr><tr><td><span class="term"><i><tt>ns_uri</tt></i>:</span></td><td>the variable namespace URI</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the variable value or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlXPathRegisteredFuncsCleanup" id="xmlXPathRegisteredFuncsCleanup"></a>Function: xmlXPathRegisteredFuncsCleanup</h3><pre class="programlisting">void xmlXPathRegisteredFuncsCleanup (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)<br />
+</pre><p>Cleanup the XPath context data associated to registered functions</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 XPath context</td></tr></tbody></table></div><h3><a name="xmlXPathRegisteredNsCleanup" id="xmlXPathRegisteredNsCleanup"></a>Function: xmlXPathRegisteredNsCleanup</h3><pre class="programlisting">void xmlXPathRegisteredNsCleanup (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)<br />
+</pre><p>Cleanup the XPath context data associated to registered variables</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 XPath context</td></tr></tbody></table></div><h3><a name="xmlXPathRegisteredVariablesCleanup" id="xmlXPathRegisteredVariablesCleanup"></a>Function: xmlXPathRegisteredVariablesCleanup</h3><pre class="programlisting">void xmlXPathRegisteredVariablesCleanup (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt)<br />
+</pre><p>Cleanup the XPath context data associated to registered variables</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 XPath context</td></tr></tbody></table></div><h3><a name="xmlXPathRoot" id="xmlXPathRoot"></a>Function: xmlXPathRoot</h3><pre class="programlisting">void xmlXPathRoot (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Initialize the context to the root of the document</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 XPath Parser context</td></tr></tbody></table></div><h3><a name="xmlXPathRoundFunction" id="xmlXPathRoundFunction"></a>Function: xmlXPathRoundFunction</h3><pre class="programlisting">void xmlXPathRoundFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the round() XPath function number round(number) The round function returns the number that is closest to the argument and that is an integer. If there are two such numbers, then the one that is even is returned.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathStartsWithFunction" id="xmlXPathStartsWithFunction"></a>Function: xmlXPathStartsWithFunction</h3><pre class="programlisting">void xmlXPathStartsWithFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the starts-with() XPath function boolean starts-with(string, string) The starts-with function returns true if the first argument string starts with the second argument string, and otherwise returns false.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathStringEvalNumber" id="xmlXPathStringEvalNumber"></a>Function: xmlXPathStringEvalNumber</h3><pre class="programlisting">double xmlXPathStringEvalNumber (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
+</pre><p>[30a] Float ::= Number ('e' Digits?)? [30] Number ::= Digits ('.' Digits?)? | '.' Digits [31] Digits ::= [0-9]+ Compile a Number in the string In complement of the Number expression, this function also handles negative values : '-' Number.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>A string to scan</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the double value.</td></tr></tbody></table></div><h3><a name="xmlXPathStringFunction" id="xmlXPathStringFunction"></a>Function: xmlXPathStringFunction</h3><pre class="programlisting">void xmlXPathStringFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the string() XPath function string string(object?) The string function converts an object to a string as follows: - A node-set is converted to a string by returning the value of the node in the node-set that is first in document order. If the node-set is empty, an empty string is returned. - A number is converted to a string as follows + NaN is converted to the string NaN + positive zero is converted to the string 0 + negative zero is converted to the string 0 + positive infinity is converted to the string Infinity + negative infinity is converted to the string -Infinity + if the number is an integer, the number is represented in decimal form as a Number with no decimal point and no leading zeros, preceded by a minus sign (-) if the number is negative + otherwise, the number is represented in decimal form as a Number including a decimal point with at least one digit before the decimal point and at least one digit after the decimal point, preceded by a minus sign (-) if the number is negative; there must be no leading zeros before the decimal point apart possibly from the one required digit immediately before the decimal point; beyond the one required digit after the decimal point there must be as many, but only as many, more digits as are needed to uniquely distinguish the number from all other IEEE 754 numeric values. - The boolean false value is converted to the string false. The boolean true value is converted to the string true. If the argument is omitted, it defaults to a node-set with the context node as its only member.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathStringLengthFunction" id="xmlXPathStringLengthFunction"></a>Function: xmlXPathStringLengthFunction</h3><pre class="programlisting">void xmlXPathStringLengthFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the string-length() XPath function number string-length(string?) The string-length returns the number of <a href="libxml-SAX.html#characters">characters</a> in the string (see [3.6 Strings]). If the argument is omitted, it defaults to the context node converted to a string, in other words the value of the context node.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathSubValues" id="xmlXPathSubValues"></a>Function: xmlXPathSubValues</h3><pre class="programlisting">void xmlXPathSubValues (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Implement the subtraction operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.</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 XPath Parser context</td></tr></tbody></table></div><h3><a name="xmlXPathSubstringAfterFunction" id="xmlXPathSubstringAfterFunction"></a>Function: xmlXPathSubstringAfterFunction</h3><pre class="programlisting">void xmlXPathSubstringAfterFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the substring-after() XPath function string substring-after(string, string) The substring-after function returns the substring of the first argument string that follows the first occurrence of the second argument string in the first argument string, or the empty stringi if the first argument string does not contain the second argument string. For example, substring-after("1999/04/01","/") returns 04/01, and substring-after("1999/04/01","19") returns 99/04/01.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathSubstringBeforeFunction" id="xmlXPathSubstringBeforeFunction"></a>Function: xmlXPathSubstringBeforeFunction</h3><pre class="programlisting">void xmlXPathSubstringBeforeFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the substring-before() XPath function string substring-before(string, string) The substring-before function returns the substring of the first argument string that precedes the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string. For example, substring-before("1999/04/01","/") returns 1999.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathSubstringFunction" id="xmlXPathSubstringFunction"></a>Function: xmlXPathSubstringFunction</h3><pre class="programlisting">void xmlXPathSubstringFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the substring() XPath function string substring(string, number, number?) The substring function returns the substring of the first argument starting at the position specified in the second argument with length specified in the third argument. For example, substring("12345",2,3) returns "234". If the third argument is not specified, it returns the substring starting at the position specified in the second argument and continuing to the end of the string. For example, substring("12345",2) returns "2345". More precisely, each character in the string (see [3.6 Strings]) is considered to have a numeric position: the position of the first character is 1, the position of the second character is 2 and so on. The returned substring contains those <a href="libxml-SAX.html#characters">characters</a> for which the position of the character is greater than or equal to the second argument and, if the third argument is specified, less than the sum of the second and third arguments; the comparisons and addition used for the above follow the standard IEEE 754 rules. Thus: - substring("12345", 1.5, 2.6) returns "234" - substring("12345", 0, 3) returns "12" - substring("12345", 0 div 0, 3) returns "" - substring("12345", 1, 0 div 0) returns "" - substring("12345", -42, 1 div 0) returns "12345" - substring("12345", -1 div 0, 1 div 0) returns ""</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathSumFunction" id="xmlXPathSumFunction"></a>Function: xmlXPathSumFunction</h3><pre class="programlisting">void xmlXPathSumFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the sum() XPath function number sum(node-set) The sum function returns the sum of the values of the nodes in the argument node-set.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathTrailing" id="xmlXPathTrailing"></a>Function: xmlXPathTrailing</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathTrailing (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)<br />
+</pre><p>Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set) @nodes1 and @nodes2 are sorted by document order, then #xmlXPathTrailingSorted is called.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes1</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>nodes2</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes1 that follow the first node in @nodes2 in document order, @nodes1 if @nodes2 is NULL or empty or an empty node-set if @nodes1 doesn't contain @nodes2</td></tr></tbody></table></div><h3><a name="xmlXPathTrailingSorted" id="xmlXPathTrailingSorted"></a>Function: xmlXPathTrailingSorted</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> xmlXPathTrailingSorted (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br /> <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2)<br />
+</pre><p>Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set)</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes1</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>nodes2</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes1 that follow the first node in @nodes2 in document order, @nodes1 if @nodes2 is NULL or empty or an empty node-set if @nodes1 doesn't contain @nodes2</td></tr></tbody></table></div><h3><a name="xmlXPathTranslateFunction" id="xmlXPathTranslateFunction"></a>Function: xmlXPathTranslateFunction</h3><pre class="programlisting">void xmlXPathTranslateFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the translate() XPath function string translate(string, string, string) The translate function returns the first argument string with occurrences of <a href="libxml-SAX.html#characters">characters</a> in the second argument string replaced by the character at the corresponding position in the third argument string. For example, translate("bar","abc","ABC") returns the string BAr. If there is a character in the second argument string with no character at a corresponding position in the third argument string (because the second argument string is longer than the third argument string), then occurrences of that character in the first argument string are removed. For example, translate("--aaa--","abc-","ABC")</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathTrueFunction" id="xmlXPathTrueFunction"></a>Function: xmlXPathTrueFunction</h3><pre class="programlisting">void xmlXPathTrueFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the true() XPath function boolean true()</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of arguments</td></tr></tbody></table></div><h3><a name="xmlXPathValueFlipSign" id="xmlXPathValueFlipSign"></a>Function: xmlXPathValueFlipSign</h3><pre class="programlisting">void xmlXPathValueFlipSign (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>Implement the unary - operation on an XPath object The numeric operators convert their operands to numbers as if by calling the number function.</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 XPath Parser context</td></tr></tbody></table></div><h3><a name="xmlXPathVariableLookup" id="xmlXPathVariableLookup"></a>Function: xmlXPathVariableLookup</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathVariableLookup (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+</pre><p>Search in the Variable array of the context for the given variable value.</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 XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the variable name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a copy of the value or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlXPathVariableLookupFunc" id="xmlXPathVariableLookupFunc"></a>Function type: xmlXPathVariableLookupFunc</h3><pre class="programlisting">Function type: xmlXPathVariableLookupFunc
+<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathVariableLookupFunc (void * ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri)
+</pre><p>Prototype for callbacks used to plug variable lookup in the XPath engine.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>name of the variable</td></tr><tr><td><span class="term"><i><tt>ns_uri</tt></i>:</span></td><td>the namespace name hosting this variable</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the XPath object value or NULL if not found.</td></tr></tbody></table></div><br />
+<h3><a name="xmlXPathVariableLookupNS" id="xmlXPathVariableLookupNS"></a>Function: xmlXPathVariableLookupNS</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathVariableLookupNS (<a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri)<br />
+</pre><p>Search in the Variable array of the context for the given variable value.</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 XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the variable name</td></tr><tr><td><span class="term"><i><tt>ns_uri</tt></i>:</span></td><td>the variable namespace URI</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the a copy of the value or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlXPathWrapCString" id="xmlXPathWrapCString"></a>Function: xmlXPathWrapCString</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathWrapCString (char * val)<br />
+</pre><p>Wraps a string into an XPath object.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the char * value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathWrapExternal" id="xmlXPathWrapExternal"></a>Function: xmlXPathWrapExternal</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathWrapExternal (void * val)<br />
+</pre><p>Wraps the @val data into an XPath object.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the user data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathWrapNodeSet" id="xmlXPathWrapNodeSet"></a>Function: xmlXPathWrapNodeSet</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathWrapNodeSet (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> val)<br />
+</pre><p>Wrap the Nodeset @val in a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the NodePtr value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathWrapString" id="xmlXPathWrapString"></a>Function: xmlXPathWrapString</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathWrapString (<a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * val)<br />
+</pre><p>Wraps the @val string into an XPath object.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPatherror" id="xmlXPatherror"></a>Function: xmlXPatherror</h3><pre class="programlisting">void xmlXPatherror (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> const char * file, <br /> int line, <br /> int no)<br />
+</pre><p>Formats an error message.</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 XPath Parser context</td></tr><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>the file name</td></tr><tr><td><span class="term"><i><tt>line</tt></i>:</span></td><td>the line number</td></tr><tr><td><span class="term"><i><tt>no</tt></i>:</span></td><td>the error number</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/libxml-xpointer.html b/doc/html/libxml-xpointer.html
new file mode 100644
index 0000000..94944a0
--- /dev/null
+++ b/doc/html/libxml-xpointer.html
@@ -0,0 +1,83 @@
+<?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 xpointer from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xpointer 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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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-xpathInternals.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xpathInternals.html">xpathInternals</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></tr></table><p>API to handle XML Pointers Base implementation was made accordingly to W3C Candidate Recommendation 7 June 2000</p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlLocationSet">xmlLocationSet</a><br />struct _xmlLocationSet
+</pre><pre class="programlisting">Typedef <a href="libxml-xpointer.html#xmlLocationSet">xmlLocationSet</a> * <a name="xmlLocationSetPtr" id="xmlLocationSetPtr">xmlLocationSetPtr</a>
+</pre><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> obj)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrEval">xmlXPtrEval</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)</pre>
+<pre class="programlisting">void <a href="#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a> (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> obj)</pre>
+<pre class="programlisting">void <a href="#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a> (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> cur, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> <a href="#xmlXPtrLocationSetCreate">xmlXPtrLocationSetCreate</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting">void <a href="#xmlXPtrLocationSetDel">xmlXPtrLocationSetDel</a> (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> cur, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
+<pre class="programlisting"><a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> <a href="#xmlXPtrLocationSetMerge">xmlXPtrLocationSetMerge</a> (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> val1, <br /> <a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> val2)</pre>
+<pre class="programlisting">void <a href="#xmlXPtrLocationSetRemove">xmlXPtrLocationSetRemove</a> (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> cur, <br /> int val)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> <a href="#xmlXPtrNewContext">xmlXPtrNewContext</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> here, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> origin)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrNewLocationSetNodeSet">xmlXPtrNewLocationSetNodeSet</a> (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> set)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> end)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrNewRange">xmlXPtrNewRange</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> int startindex, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> end, <br /> int endindex)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrNewRangeNodeObject">xmlXPtrNewRangeNodeObject</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> end)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrNewRangeNodePoint">xmlXPtrNewRangeNodePoint</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> end)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrNewRangeNodes">xmlXPtrNewRangeNodes</a> (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> end)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrNewRangePointNode">xmlXPtrNewRangePointNode</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> start, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> end)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a> (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> start, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> end)</pre>
+<pre class="programlisting">void <a href="#xmlXPtrRangeToFunction">xmlXPtrRangeToFunction</a> (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> <a href="#xmlXPtrWrapLocationSet">xmlXPtrWrapLocationSet</a> (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> val)</pre>
+<h2>Description</h2>
+<h3><a name="xmlLocationSet" id="xmlLocationSet">Structure xmlLocationSet</a></h3><pre class="programlisting">Structure xmlLocationSet<br />struct _xmlLocationSet {
+ int locNr : number of locations in the set
+ int locMax : size of the array as allocated
+ <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> * locTab : array of locations
+}</pre><h3><a name="xmlXPtrBuildNodeList" id="xmlXPtrBuildNodeList"></a>Function: xmlXPtrBuildNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> xmlXPtrBuildNodeList (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> obj)<br />
+</pre><p>Build a node list tree copy of the XPointer result. This will drop Attributes and Namespace declarations.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>obj</tt></i>:</span></td><td>the XPointer result from the evaluation.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list or NULL. the caller has to free the node tree.</td></tr></tbody></table></div><h3><a name="xmlXPtrEval" id="xmlXPtrEval"></a>Function: xmlXPtrEval</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrEval (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br /> <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)<br />
+</pre><p>Evaluate the XPath Location Path in the given context.</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 XPointer expression</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the XPointer context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> resulting from the evaluation or NULL. the caller has to free the object.</td></tr></tbody></table></div><h3><a name="xmlXPtrEvalRangePredicate" id="xmlXPtrEvalRangePredicate"></a>Function: xmlXPtrEvalRangePredicate</h3><pre class="programlisting">void xmlXPtrEvalRangePredicate (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt)<br />
+</pre><p>[8] Predicate ::= '[' PredicateExpr ']' [9] PredicateExpr ::= Expr Evaluate a predicate as in xmlXPathEvalPredicate() but for a Location Set instead of a node set</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 XPointer Parser context</td></tr></tbody></table></div><h3><a name="xmlXPtrFreeLocationSet" id="xmlXPtrFreeLocationSet"></a>Function: xmlXPtrFreeLocationSet</h3><pre class="programlisting">void xmlXPtrFreeLocationSet (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> obj)<br />
+</pre><p>Free the LocationSet compound (not the actual ranges !).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>obj</tt></i>:</span></td><td>the <a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> to free</td></tr></tbody></table></div><h3><a name="xmlXPtrLocationSetAdd" id="xmlXPtrLocationSetAdd"></a>Function: xmlXPtrLocationSetAdd</h3><pre class="programlisting">void xmlXPtrLocationSetAdd (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> cur, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>add a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> to an existing LocationSet If the location already exist in the set @val is freed.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial range set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a></td></tr></tbody></table></div><h3><a name="xmlXPtrLocationSetCreate" id="xmlXPtrLocationSetCreate"></a>Function: xmlXPtrLocationSetCreate</h3><pre class="programlisting"><a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> xmlXPtrLocationSetCreate (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>Create a new <a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> of type double and of value @val</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an initial xmlXPathObjectPtr, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrLocationSetDel" id="xmlXPtrLocationSetDel"></a>Function: xmlXPtrLocationSetDel</h3><pre class="programlisting">void xmlXPtrLocationSetDel (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> cur, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
+</pre><p>Removes an <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> from an existing LocationSet</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial range set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a></td></tr></tbody></table></div><h3><a name="xmlXPtrLocationSetMerge" id="xmlXPtrLocationSetMerge"></a>Function: xmlXPtrLocationSetMerge</h3><pre class="programlisting"><a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> xmlXPtrLocationSetMerge (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> val1, <br /> <a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> val2)<br />
+</pre><p>Merges two rangesets, all ranges from @val2 are added to @val1</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val1</tt></i>:</span></td><td>the first LocationSet</td></tr><tr><td><span class="term"><i><tt>val2</tt></i>:</span></td><td>the second LocationSet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>val1 once extended or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlXPtrLocationSetRemove" id="xmlXPtrLocationSetRemove"></a>Function: xmlXPtrLocationSetRemove</h3><pre class="programlisting">void xmlXPtrLocationSetRemove (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> cur, <br /> int val)<br />
+</pre><p>Removes an entry from an existing LocationSet list.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial range set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the index to remove</td></tr></tbody></table></div><h3><a name="xmlXPtrNewCollapsedRange" id="xmlXPtrNewCollapsedRange"></a>Function: xmlXPtrNewCollapsedRange</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrNewCollapsedRange (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type range using a single nodes</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the starting and ending node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrNewContext" id="xmlXPtrNewContext"></a>Function: xmlXPtrNewContext</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> xmlXPtrNewContext (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> here, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> origin)<br />
+</pre><p>Create a new XPointer context</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document</td></tr><tr><td><span class="term"><i><tt>here</tt></i>:</span></td><td>the node that directly contains the XPointer being evaluated or NULL</td></tr><tr><td><span class="term"><i><tt>origin</tt></i>:</span></td><td>the element from which a user or program initiated traversal of the link, or NULL.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a> just allocated.</td></tr></tbody></table></div><h3><a name="xmlXPtrNewLocationSetNodeSet" id="xmlXPtrNewLocationSetNodeSet"></a>Function: xmlXPtrNewLocationSetNodeSet</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrNewLocationSetNodeSet (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> set)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type LocationSet and initialize it with all the nodes from @set</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>set</tt></i>:</span></td><td>a node set</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrNewLocationSetNodes" id="xmlXPtrNewLocationSetNodes"></a>Function: xmlXPtrNewLocationSetNodes</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrNewLocationSetNodes (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> end)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type LocationSet and initialize it with the single range made of the two nodes @start and @end</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the start NodePtr value</td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>the end NodePtr value or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrNewRange" id="xmlXPtrNewRange"></a>Function: xmlXPtrNewRange</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrNewRange (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> int startindex, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> end, <br /> int endindex)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type range</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the starting node</td></tr><tr><td><span class="term"><i><tt>startindex</tt></i>:</span></td><td>the start index</td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>the ending point</td></tr><tr><td><span class="term"><i><tt>endindex</tt></i>:</span></td><td>the ending index</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrNewRangeNodeObject" id="xmlXPtrNewRangeNodeObject"></a>Function: xmlXPtrNewRangeNodeObject</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrNewRangeNodeObject (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> end)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type range from a not to an object</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the starting node</td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>the ending object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrNewRangeNodePoint" id="xmlXPtrNewRangeNodePoint"></a>Function: xmlXPtrNewRangeNodePoint</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrNewRangeNodePoint (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> end)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type range from a node to a point</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the starting node</td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>the ending point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrNewRangeNodes" id="xmlXPtrNewRangeNodes"></a>Function: xmlXPtrNewRangeNodes</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrNewRangeNodes (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> start, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> end)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type range using 2 nodes</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the starting node</td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>the ending node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrNewRangePointNode" id="xmlXPtrNewRangePointNode"></a>Function: xmlXPtrNewRangePointNode</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrNewRangePointNode (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> start, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> end)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type range from a point to a node</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the starting point</td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>the ending node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrNewRangePoints" id="xmlXPtrNewRangePoints"></a>Function: xmlXPtrNewRangePoints</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrNewRangePoints (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> start, <br /> <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> end)<br />
+</pre><p>Create a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> of type range using 2 Points</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>start</tt></i>:</span></td><td>the starting point</td></tr><tr><td><span class="term"><i><tt>end</tt></i>:</span></td><td>the ending point</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPtrRangeToFunction" id="xmlXPtrRangeToFunction"></a>Function: xmlXPtrRangeToFunction</h3><pre class="programlisting">void xmlXPtrRangeToFunction (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br /> int nargs)<br />
+</pre><p>Implement the range-to() XPointer function</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 XPointer Parser context</td></tr><tr><td><span class="term"><i><tt>nargs</tt></i>:</span></td><td>the number of args</td></tr></tbody></table></div><h3><a name="xmlXPtrWrapLocationSet" id="xmlXPtrWrapLocationSet"></a>Function: xmlXPtrWrapLocationSet</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPtrWrapLocationSet (<a href="libxml-xpointer.html#xmlLocationSetPtr">xmlLocationSetPtr</a> val)<br />
+</pre><p>Wrap the LocationSet @val in a new <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a></p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the LocationSet value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/html/right.png b/doc/html/right.png
new file mode 100644
index 0000000..92832e3
--- /dev/null
+++ b/doc/html/right.png
Binary files differ
diff --git a/doc/html/up.png b/doc/html/up.png
new file mode 100644
index 0000000..85b3e2a
--- /dev/null
+++ b/doc/html/up.png
Binary files differ
diff --git a/doc/index.html b/doc/index.html
new file mode 100644
index 0000000..263551d
--- /dev/null
+++ b/doc/index.html
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <link rel="SHORTCUT ICON" href="/favicon.ico" />
+ <style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style>
+ <title>The XML C parser and toolkit of Gnome</title>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <table border="0" width="100%" cellpadding="5" cellspacing="0" align="center">
+ <tr>
+ <td width="120">
+ <a href="http://swpat.ffii.org/">
+ <img src="epatents.png" alt="Action against software patents" />
+ </a>
+ </td>
+ <td width="180">
+ <a href="http://www.gnome.org/">
+ <img src="gnome2.png" alt="Gnome2 Logo" />
+ </a>
+ <a href="http://www.w3.org/Status">
+ <img src="w3c.png" alt="W3C Logo" />
+ </a>
+ <a href="http://www.redhat.com/">
+ <img src="redhat.gif" alt="Red Hat Logo" />
+ </a>
+ <div align="left">
+ <a href="http://xmlsoft.org/">
+ <img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" />
+ </a>
+ </div>
+ </td>
+ <td>
+ <table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000">
+ <tr>
+ <td>
+ <table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd">
+ <tr>
+ <td align="center">
+ <h1>The XML C parser and toolkit of Gnome</h1>
+ <h2>libxml</h2>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="4" cellspacing="0" width="100%" align="center">
+ <tr>
+ <td bgcolor="#8b7765">
+ <table border="0" cellspacing="0" cellpadding="2" width="100%">
+ <tr>
+ <td valign="top" width="200" bgcolor="#8b7765">
+ <table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000">
+ <tr>
+ <td>
+ <table width="100%" border="0" cellspacing="1" cellpadding="3">
+ <tr>
+ <td colspan="1" bgcolor="#eecfa1" align="center">
+ <center>
+ <b>Main Menu</b>
+ </center>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="#fffacd">
+ <form action="search.php" enctype="application/x-www-form-urlencoded" method="get">
+ <input name="query" type="text" size="20" value="" />
+ <input name="submit" type="submit" value="Search ..." />
+ </form>
+ <ul>
+ <li>
+ <a href="index.html">Home</a>
+ </li>
+ <li>
+ <a href="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">News</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>
+ </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://garypennington.net/libxml2/">Solaris binaries</a>
+ </li>
+ <li>
+ <a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a>
+ </li>
+ <li>
+ <a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a>
+ </li>
+ <li>
+ <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a>
+ </li>
+ </ul>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td valign="top" bgcolor="#8b7765">
+ <table border="0" cellspacing="0" cellpadding="1" width="100%">
+ <tr>
+ <td>
+ <table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000">
+ <tr>
+ <td>
+ <table border="0" cellpadding="3" cellspacing="1" width="100%">
+ <tr>
+ <td bgcolor="#fffacd">
+ <p></p>
+ <p style="text-align: right; font-style: italic; font-size: 10pt">"Programming
+with libxml2 is like the thrilling embrace of an exotic stranger." <a href="http://diveintomark.org/archives/2004/02/18/libxml2">Mark
+Pilgrim</a></p>
+ <p>Libxml2 is the XML C parser and toolkit developed for the Gnome project
+(but usable outside of the Gnome platform), it is free software available
+under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
+License</a>. XML itself is a metalanguage to design markup languages, i.e.
+text language where semantic and structure are added to the content using
+extra "markup" information enclosed between angle brackets. HTML is the most
+well-known markup language. Though the library is written in C <a href="python.html">a variety of language bindings</a> make it available in
+other environments.</p>
+ <p>Libxml2 is known to be very portable, the library should build and work
+without serious troubles on a variety of systems (Linux, Unix, Windows,
+CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, ...)</p>
+ <p>Libxml2 implements a number of existing standards related to markup
+languages:</p>
+ <ul><li>the XML standard: <a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a></li>
+ <li>Namespaces in XML: <a href="http://www.w3.org/TR/REC-xml-names/">http://www.w3.org/TR/REC-xml-names/</a></li>
+ <li>XML Base: <a href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a></li>
+ <li><a href="http://www.cis.ohio-state.edu/rfc/rfc2396.txt">RFC 2396</a> :
+ Uniform Resource Identifiers <a href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt</a></li>
+ <li>XML Path Language (XPath) 1.0: <a href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath</a></li>
+ <li>HTML4 parser: <a href="http://www.w3.org/TR/html401/">http://www.w3.org/TR/html401/</a></li>
+ <li>XML Pointer Language (XPointer) Version 1.0: <a href="http://www.w3.org/TR/xptr">http://www.w3.org/TR/xptr</a></li>
+ <li>XML Inclusions (XInclude) Version 1.0: <a href="http://www.w3.org/TR/xinclude/">http://www.w3.org/TR/xinclude/</a></li>
+ <li>ISO-8859-x encodings, as well as <a href="http://www.cis.ohio-state.edu/rfc/rfc2044.txt">rfc2044</a> [UTF-8]
+ and <a href="http://www.cis.ohio-state.edu/rfc/rfc2781.txt">rfc2781</a>
+ [UTF-16] Unicode encodings, and more if using iconv support</li>
+ <li>part of SGML Open Technical Resolution TR9401:1997</li>
+ <li>XML Catalogs Working Draft 06 August 2001: <a href="http://www.oasis-open.org/committees/entity/spec-2001-08-06.html">http://www.oasis-open.org/committees/entity/spec-2001-08-06.html</a></li>
+ <li>Canonical XML Version 1.0: <a href="http://www.w3.org/TR/xml-c14n">http://www.w3.org/TR/xml-c14n</a>
+ and the Exclusive XML Canonicalization CR draft <a href="http://www.w3.org/TR/xml-exc-c14n">http://www.w3.org/TR/xml-exc-c14n</a></li>
+ <li>Relax NG, ISO/IEC 19757-2:2003, <a href="http://www.oasis-open.org/committees/relax-ng/spec-20011203.html">http://www.oasis-open.org/committees/relax-ng/spec-20011203.html</a></li>
+ <li>W3C XML Schemas Part 2: Datatypes <a href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">REC 02 May
+ 2001</a></li>
+</ul>
+ <p>In most cases libxml2 tries to implement the specifications in a
+relatively strictly compliant way. As of release 2.4.16, libxml2 passes all
+1800+ tests from the <a href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
+Suite</a>.</p>
+ <p>To some extent libxml2 provides support for the following additional
+specifications but doesn't claim to implement them completely:</p>
+ <ul><li>Document Object Model (DOM) <a href="http://www.w3.org/TR/DOM-Level-2-Core/">http://www.w3.org/TR/DOM-Level-2-Core/</a>
+ it doesn't implement the API itself, gdome2 does this on top of
+ libxml2</li>
+ <li><a href="http://www.cis.ohio-state.edu/rfc/rfc959.txt">RFC 959</a> :
+ libxml2 implements a basic FTP client code</li>
+ <li><a href="http://www.cis.ohio-state.edu/rfc/rfc1945.txt">RFC 1945</a> :
+ HTTP/1.0, again a basic HTTP client code</li>
+ <li>SAX: a minimal SAX implementation compatible with early expat
+ versions</li>
+ <li>DocBook SGML v4: libxml2 includes a hackish parser to transition to
+ XML</li>
+</ul>
+ <p>A partial implementation of <a href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML Schemas Part
+1: Structure</a> is being worked on but it would be far too early to make any
+conformance statement about it at the moment.</p>
+ <p>Separate documents:</p>
+ <ul><li><a href="http://xmlsoft.org/XSLT/">the libxslt page</a> providing an
+ implementation of XSLT 1.0 and common extensions like EXSLT for
+ libxml2</li>
+ <li><a href="http://www.cs.unibo.it/~casarini/gdome2/">the gdome2 page</a>
+ : a standard DOM2 implementation for libxml2</li>
+ <li><a href="http://www.aleksey.com/xmlsec/">the XMLSec page</a>: an
+ implementation of <a href="http://www.w3.org/TR/xmldsig-core/">W3C XML
+ Digital Signature</a> for libxml2</li>
+ <li>also check the related links section below for more related and active
+ projects.</li>
+</ul>
+ <p>Logo designed by <a href="mailto:liyanage@access.ch">Marc Liyanage</a>.</p>
+ <p>
+ <a href="bugs.html">Daniel Veillard</a>
+ </p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/doc/index.py b/doc/index.py
new file mode 100755
index 0000000..470f1b2
--- /dev/null
+++ b/doc/index.py
@@ -0,0 +1,1249 @@
+#!/usr/bin/python -u
+#
+# imports the API description and fills up a database with
+# name relevance to modules, functions or web pages
+#
+# Operation needed:
+# =================
+#
+# install mysqld, the python wrappers for mysql and libxml2, start mysqld
+# Change the root passwd of mysql:
+# mysqladmin -u root password new_password
+# Create the new database xmlsoft
+# mysqladmin -p create xmlsoft
+# Create a database user 'veillard' and give him passord access
+# change veillard and abcde with the right user name and passwd
+# mysql -p
+# password:
+# mysql> GRANT ALL PRIVILEGES ON xmlsoft TO veillard@localhost
+# IDENTIFIED BY 'abcde' WITH GRANT OPTION;
+#
+# As the user check the access:
+# mysql -p xmlsoft
+# Enter password:
+# Welcome to the MySQL monitor....
+# mysql> use xmlsoft
+# Database changed
+# mysql> quit
+# Bye
+#
+# Then run the script in the doc subdir, it will create the symbols and
+# word tables and populate them with informations extracted from
+# the libxml2-api.xml API description, and make then accessible read-only
+# by nobody@loaclhost the user expected to be Apache's one
+#
+# On the Apache configuration, make sure you have php support enabled
+#
+
+import MySQLdb
+import libxml2
+import sys
+import string
+import os
+
+#
+# We are not interested in parsing errors here
+#
+def callback(ctx, str):
+ return
+libxml2.registerErrorHandler(callback, None)
+
+#
+# The dictionnary of tables required and the SQL command needed
+# to create them
+#
+TABLES={
+ "symbols" : """CREATE TABLE symbols (
+ name varchar(255) BINARY NOT NULL,
+ module varchar(255) BINARY NOT NULL,
+ type varchar(25) NOT NULL,
+ descr varchar(255),
+ UNIQUE KEY name (name),
+ KEY module (module))""",
+ "words" : """CREATE TABLE words (
+ name varchar(50) BINARY NOT NULL,
+ symbol varchar(255) BINARY NOT NULL,
+ relevance int,
+ KEY name (name),
+ KEY symbol (symbol),
+ UNIQUE KEY ID (name, symbol))""",
+ "wordsHTML" : """CREATE TABLE wordsHTML (
+ name varchar(50) BINARY NOT NULL,
+ resource varchar(255) BINARY NOT NULL,
+ section varchar(255),
+ id varchar(50),
+ relevance int,
+ KEY name (name),
+ KEY resource (resource),
+ UNIQUE KEY ref (name, resource))""",
+ "wordsArchive" : """CREATE TABLE wordsArchive (
+ name varchar(50) BINARY NOT NULL,
+ ID int(11) NOT NULL,
+ relevance int,
+ KEY name (name),
+ UNIQUE KEY ref (name, ID))""",
+ "pages" : """CREATE TABLE pages (
+ resource varchar(255) BINARY NOT NULL,
+ title varchar(255) BINARY NOT NULL,
+ UNIQUE KEY name (resource))""",
+ "archives" : """CREATE TABLE archives (
+ ID int(11) NOT NULL auto_increment,
+ resource varchar(255) BINARY NOT NULL,
+ title varchar(255) BINARY NOT NULL,
+ UNIQUE KEY id (ID,resource(255)),
+ INDEX (ID),
+ INDEX (resource))""",
+ "Queries" : """CREATE TABLE Queries (
+ ID int(11) NOT NULL auto_increment,
+ Value varchar(50) NOT NULL,
+ Count int(11) NOT NULL,
+ UNIQUE KEY id (ID,Value(35)),
+ INDEX (ID))""",
+}
+
+#
+# The XML API description file to parse
+#
+API="libxml2-api.xml"
+DB=None
+
+#########################################################################
+# #
+# MySQL database interfaces #
+# #
+#########################################################################
+def createTable(db, name):
+ global TABLES
+
+ if db == None:
+ return -1
+ if name == None:
+ return -1
+ c = db.cursor()
+
+ ret = c.execute("DROP TABLE IF EXISTS %s" % (name))
+ if ret == 1:
+ print "Removed table %s" % (name)
+ print "Creating table %s" % (name)
+ try:
+ ret = c.execute(TABLES[name])
+ except:
+ print "Failed to create table %s" % (name)
+ return -1
+ return ret
+
+def checkTables(db):
+ global TABLES
+
+ if db == None:
+ return -1
+ c = db.cursor()
+ nbtables = c.execute("show tables")
+ print "Found %d tables" % (nbtables)
+ tables = {}
+ i = 0
+ while i < nbtables:
+ l = c.fetchone()
+ name = l[0]
+ tables[name] = {}
+ i = i + 1
+
+ for table in TABLES.keys():
+ if not tables.has_key(table):
+ print "table %s missing" % (table)
+ createTable(db, table)
+ try:
+ ret = c.execute("SELECT count(*) from %s" % table);
+ row = c.fetchone()
+ print "Table %s contains %d records" % (table, row[0])
+ except:
+ print "Troubles with table %s : repairing" % (table)
+ ret = c.execute("repair table %s" % table);
+ print "repairing returned %d" % (ret)
+ ret = c.execute("SELECT count(*) from %s" % table);
+ row = c.fetchone()
+ print "Table %s contains %d records" % (table, row[0])
+ print "checkTables finished"
+
+ # make sure apache can access the tables read-only
+ try:
+ ret = c.execute("GRANT SELECT ON xmlsoft.* TO nobody@localhost")
+ ret = c.execute("GRANT INSERT,SELECT,UPDATE ON xmlsoft.Queries TO nobody@localhost")
+ except:
+ pass
+ return 0
+
+def openMySQL(db="xmlsoft", passwd=None):
+ global DB
+
+ if passwd == None:
+ try:
+ passwd = os.environ["MySQL_PASS"]
+ except:
+ print "No password available, set environment MySQL_PASS"
+ sys.exit(1)
+
+ DB = MySQLdb.connect(passwd=passwd, db=db)
+ if DB == None:
+ return -1
+ ret = checkTables(DB)
+ return ret
+
+def updateWord(name, symbol, relevance):
+ global DB
+
+ if DB == None:
+ openMySQL()
+ if DB == None:
+ return -1
+ if name == None:
+ return -1
+ if symbol == None:
+ return -1
+
+ c = DB.cursor()
+ try:
+ ret = c.execute(
+"""INSERT INTO words (name, symbol, relevance) VALUES ('%s','%s', %d)""" %
+ (name, symbol, relevance))
+ except:
+ try:
+ ret = c.execute(
+ """UPDATE words SET relevance = %d where name = '%s' and symbol = '%s'""" %
+ (relevance, name, symbol))
+ except:
+ print "Update word (%s, %s, %s) failed command" % (name, symbol, relevance)
+ print "UPDATE words SET relevance = %d where name = '%s' and symbol = '%s'" % (relevance, name, symbol)
+ print sys.exc_type, sys.exc_value
+ return -1
+
+ return ret
+
+def updateSymbol(name, module, type, desc):
+ global DB
+
+ updateWord(name, name, 50)
+ if DB == None:
+ openMySQL()
+ if DB == None:
+ return -1
+ if name == None:
+ return -1
+ if module == None:
+ return -1
+ if type == None:
+ return -1
+
+ try:
+ desc = string.replace(desc, "'", " ")
+ l = string.split(desc, ".")
+ desc = l[0]
+ desc = desc[0:99]
+ except:
+ desc = ""
+
+ c = DB.cursor()
+ try:
+ ret = c.execute(
+"""INSERT INTO symbols (name, module, type, descr) VALUES ('%s','%s', '%s', '%s')""" %
+ (name, module, type, desc))
+ except:
+ try:
+ ret = c.execute(
+"""UPDATE symbols SET module='%s', type='%s', descr='%s' where name='%s'""" %
+ (module, type, desc, name))
+ except:
+ print "Update symbol (%s, %s, %s) failed command" % (name, module, type)
+ print """UPDATE symbols SET module='%s', type='%s', descr='%s' where name='%s'""" % (module, type, desc, name)
+ print sys.exc_type, sys.exc_value
+ return -1
+
+ return ret
+
+def addFunction(name, module, desc = ""):
+ return updateSymbol(name, module, 'function', desc)
+
+def addMacro(name, module, desc = ""):
+ return updateSymbol(name, module, 'macro', desc)
+
+def addEnum(name, module, desc = ""):
+ return updateSymbol(name, module, 'enum', desc)
+
+def addStruct(name, module, desc = ""):
+ return updateSymbol(name, module, 'struct', desc)
+
+def addConst(name, module, desc = ""):
+ return updateSymbol(name, module, 'const', desc)
+
+def addType(name, module, desc = ""):
+ return updateSymbol(name, module, 'type', desc)
+
+def addFunctype(name, module, desc = ""):
+ return updateSymbol(name, module, 'functype', desc)
+
+def addPage(resource, title):
+ global DB
+
+ if DB == None:
+ openMySQL()
+ if DB == None:
+ return -1
+ if resource == None:
+ return -1
+
+ c = DB.cursor()
+ try:
+ ret = c.execute(
+ """INSERT INTO pages (resource, title) VALUES ('%s','%s')""" %
+ (resource, title))
+ except:
+ try:
+ ret = c.execute(
+ """UPDATE pages SET title='%s' WHERE resource='%s'""" %
+ (title, resource))
+ except:
+ print "Update symbol (%s, %s, %s) failed command" % (name, module, type)
+ print """UPDATE pages SET title='%s' WHERE resource='%s'""" % (title, resource)
+ print sys.exc_type, sys.exc_value
+ return -1
+
+ return ret
+
+def updateWordHTML(name, resource, desc, id, relevance):
+ global DB
+
+ if DB == None:
+ openMySQL()
+ if DB == None:
+ return -1
+ if name == None:
+ return -1
+ if resource == None:
+ return -1
+ if id == None:
+ id = ""
+ if desc == None:
+ desc = ""
+ else:
+ try:
+ desc = string.replace(desc, "'", " ")
+ desc = desc[0:99]
+ except:
+ desc = ""
+
+ c = DB.cursor()
+ try:
+ ret = c.execute(
+"""INSERT INTO wordsHTML (name, resource, section, id, relevance) VALUES ('%s','%s', '%s', '%s', '%d')""" %
+ (name, resource, desc, id, relevance))
+ except:
+ try:
+ ret = c.execute(
+"""UPDATE wordsHTML SET section='%s', id='%s', relevance='%d' where name='%s' and resource='%s'""" %
+ (desc, id, relevance, name, resource))
+ except:
+ print "Update symbol (%s, %s, %d) failed command" % (name, resource, relevance)
+ print """UPDATE wordsHTML SET section='%s', id='%s', relevance='%d' where name='%s' and resource='%s'""" % (desc, id, relevance, name, resource)
+ print sys.exc_type, sys.exc_value
+ return -1
+
+ return ret
+
+def checkXMLMsgArchive(url):
+ global DB
+
+ if DB == None:
+ openMySQL()
+ if DB == None:
+ return -1
+ if url == None:
+ return -1
+
+ c = DB.cursor()
+ try:
+ ret = c.execute(
+ """SELECT ID FROM archives WHERE resource='%s'""" % (url))
+ row = c.fetchone()
+ if row == None:
+ return -1
+ except:
+ return -1
+
+ return row[0]
+
+def addXMLMsgArchive(url, title):
+ global DB
+
+ if DB == None:
+ openMySQL()
+ if DB == None:
+ return -1
+ if url == None:
+ return -1
+ if title == None:
+ title = ""
+ else:
+ title = string.replace(title, "'", " ")
+ title = title[0:99]
+
+ c = DB.cursor()
+ try:
+ cmd = """INSERT INTO archives (resource, title) VALUES ('%s','%s')""" % (url, title)
+ ret = c.execute(cmd)
+ cmd = """SELECT ID FROM archives WHERE resource='%s'""" % (url)
+ ret = c.execute(cmd)
+ row = c.fetchone()
+ if row == None:
+ print "addXMLMsgArchive failed to get the ID: %s" % (url)
+ return -1
+ except:
+ print "addXMLMsgArchive failed command: %s" % (cmd)
+ return -1
+
+ return((int)(row[0]))
+
+def updateWordArchive(name, id, relevance):
+ global DB
+
+ if DB == None:
+ openMySQL()
+ if DB == None:
+ return -1
+ if name == None:
+ return -1
+ if id == None:
+ return -1
+
+ c = DB.cursor()
+ try:
+ ret = c.execute(
+"""INSERT INTO wordsArchive (name, id, relevance) VALUES ('%s', '%d', '%d')""" %
+ (name, id, relevance))
+ except:
+ try:
+ ret = c.execute(
+"""UPDATE wordsArchive SET relevance='%d' where name='%s' and ID='%d'""" %
+ (relevance, name, id))
+ except:
+ print "Update word archive (%s, %d, %d) failed command" % (name, id, relevance)
+ print """UPDATE wordsArchive SET relevance='%d' where name='%s' and ID='%d'""" % (relevance, name, id)
+ print sys.exc_type, sys.exc_value
+ return -1
+
+ return ret
+
+#########################################################################
+# #
+# Word dictionnary and analysis routines #
+# #
+#########################################################################
+
+#
+# top 100 english word without the one len < 3 + own set
+#
+dropWords = {
+ 'the':0, 'this':0, 'can':0, 'man':0, 'had':0, 'him':0, 'only':0,
+ 'and':0, 'not':0, 'been':0, 'other':0, 'even':0, 'are':0, 'was':0,
+ 'new':0, 'most':0, 'but':0, 'when':0, 'some':0, 'made':0, 'from':0,
+ 'who':0, 'could':0, 'after':0, 'that':0, 'will':0, 'time':0, 'also':0,
+ 'have':0, 'more':0, 'these':0, 'did':0, 'was':0, 'two':0, 'many':0,
+ 'they':0, 'may':0, 'before':0, 'for':0, 'which':0, 'out':0, 'then':0,
+ 'must':0, 'one':0, 'through':0, 'with':0, 'you':0, 'said':0,
+ 'first':0, 'back':0, 'were':0, 'what':0, 'any':0, 'years':0, 'his':0,
+ 'her':0, 'where':0, 'all':0, 'its':0, 'now':0, 'much':0, 'she':0,
+ 'about':0, 'such':0, 'your':0, 'there':0, 'into':0, 'like':0, 'may':0,
+ 'would':0, 'than':0, 'our':0, 'well':0, 'their':0, 'them':0, 'over':0,
+ 'down':0,
+ 'net':0, 'www':0, 'bad':0, 'Okay':0, 'bin':0, 'cur':0,
+}
+
+wordsDict = {}
+wordsDictHTML = {}
+wordsDictArchive = {}
+
+def cleanupWordsString(str):
+ str = string.replace(str, ".", " ")
+ str = string.replace(str, "!", " ")
+ str = string.replace(str, "?", " ")
+ str = string.replace(str, ",", " ")
+ str = string.replace(str, "'", " ")
+ str = string.replace(str, '"', " ")
+ str = string.replace(str, ";", " ")
+ str = string.replace(str, "(", " ")
+ str = string.replace(str, ")", " ")
+ str = string.replace(str, "{", " ")
+ str = string.replace(str, "}", " ")
+ str = string.replace(str, "<", " ")
+ str = string.replace(str, ">", " ")
+ str = string.replace(str, "=", " ")
+ str = string.replace(str, "/", " ")
+ str = string.replace(str, "*", " ")
+ str = string.replace(str, ":", " ")
+ str = string.replace(str, "#", " ")
+ str = string.replace(str, "\\", " ")
+ str = string.replace(str, "\n", " ")
+ str = string.replace(str, "\r", " ")
+ str = string.replace(str, "\xc2", " ")
+ str = string.replace(str, "\xa0", " ")
+ return str
+
+def cleanupDescrString(str):
+ str = string.replace(str, "'", " ")
+ str = string.replace(str, "\n", " ")
+ str = string.replace(str, "\r", " ")
+ str = string.replace(str, "\xc2", " ")
+ str = string.replace(str, "\xa0", " ")
+ l = string.split(str)
+ str = string.join(str)
+ return str
+
+def splitIdentifier(str):
+ ret = []
+ while str != "":
+ cur = string.lower(str[0])
+ str = str[1:]
+ if ((cur < 'a') or (cur > 'z')):
+ continue
+ while (str != "") and (str[0] >= 'A') and (str[0] <= 'Z'):
+ cur = cur + string.lower(str[0])
+ str = str[1:]
+ while (str != "") and (str[0] >= 'a') and (str[0] <= 'z'):
+ cur = cur + str[0]
+ str = str[1:]
+ while (str != "") and (str[0] >= '0') and (str[0] <= '9'):
+ str = str[1:]
+ ret.append(cur)
+ return ret
+
+def addWord(word, module, symbol, relevance):
+ global wordsDict
+
+ if word == None or len(word) < 3:
+ return -1
+ if module == None or symbol == None:
+ return -1
+ if dropWords.has_key(word):
+ return 0
+ if ord(word[0]) > 0x80:
+ return 0
+
+ if wordsDict.has_key(word):
+ d = wordsDict[word]
+ if d == None:
+ return 0
+ if len(d) > 500:
+ wordsDict[word] = None
+ return 0
+ try:
+ relevance = relevance + d[(module, symbol)]
+ except:
+ pass
+ else:
+ wordsDict[word] = {}
+ wordsDict[word][(module, symbol)] = relevance
+ return relevance
+
+def addString(str, module, symbol, relevance):
+ if str == None or len(str) < 3:
+ return -1
+ ret = 0
+ str = cleanupWordsString(str)
+ l = string.split(str)
+ for word in l:
+ if len(word) > 2:
+ ret = ret + addWord(word, module, symbol, 5)
+
+ return ret
+
+def addWordHTML(word, resource, id, section, relevance):
+ global wordsDictHTML
+
+ if word == None or len(word) < 3:
+ return -1
+ if resource == None or section == None:
+ return -1
+ if dropWords.has_key(word):
+ return 0
+ if ord(word[0]) > 0x80:
+ return 0
+
+ section = cleanupDescrString(section)
+
+ if wordsDictHTML.has_key(word):
+ d = wordsDictHTML[word]
+ if d == None:
+ print "skipped %s" % (word)
+ return 0
+ try:
+ (r,i,s) = d[resource]
+ if i != None:
+ id = i
+ if s != None:
+ section = s
+ relevance = relevance + r
+ except:
+ pass
+ else:
+ wordsDictHTML[word] = {}
+ d = wordsDictHTML[word];
+ d[resource] = (relevance, id, section)
+ return relevance
+
+def addStringHTML(str, resource, id, section, relevance):
+ if str == None or len(str) < 3:
+ return -1
+ ret = 0
+ str = cleanupWordsString(str)
+ l = string.split(str)
+ for word in l:
+ if len(word) > 2:
+ try:
+ r = addWordHTML(word, resource, id, section, relevance)
+ if r < 0:
+ print "addWordHTML failed: %s %s" % (word, resource)
+ ret = ret + r
+ except:
+ print "addWordHTML failed: %s %s %d" % (word, resource, relevance)
+ print sys.exc_type, sys.exc_value
+
+ return ret
+
+def addWordArchive(word, id, relevance):
+ global wordsDictArchive
+
+ if word == None or len(word) < 3:
+ return -1
+ if id == None or id == -1:
+ return -1
+ if dropWords.has_key(word):
+ return 0
+ if ord(word[0]) > 0x80:
+ return 0
+
+ if wordsDictArchive.has_key(word):
+ d = wordsDictArchive[word]
+ if d == None:
+ print "skipped %s" % (word)
+ return 0
+ try:
+ r = d[id]
+ relevance = relevance + r
+ except:
+ pass
+ else:
+ wordsDictArchive[word] = {}
+ d = wordsDictArchive[word];
+ d[id] = relevance
+ return relevance
+
+def addStringArchive(str, id, relevance):
+ if str == None or len(str) < 3:
+ return -1
+ ret = 0
+ str = cleanupWordsString(str)
+ l = string.split(str)
+ for word in l:
+ i = len(word)
+ if i > 2:
+ try:
+ r = addWordArchive(word, id, relevance)
+ if r < 0:
+ print "addWordArchive failed: %s %s" % (word, id)
+ else:
+ ret = ret + r
+ except:
+ print "addWordArchive failed: %s %s %d" % (word, id, relevance)
+ print sys.exc_type, sys.exc_value
+ return ret
+
+#########################################################################
+# #
+# XML API description analysis #
+# #
+#########################################################################
+
+def loadAPI(filename):
+ doc = libxml2.parseFile(filename)
+ print "loaded %s" % (filename)
+ return doc
+
+def foundExport(file, symbol):
+ if file == None:
+ return 0
+ if symbol == None:
+ return 0
+ addFunction(symbol, file)
+ l = splitIdentifier(symbol)
+ for word in l:
+ addWord(word, file, symbol, 10)
+ return 1
+
+def analyzeAPIFile(top):
+ count = 0
+ name = top.prop("name")
+ cur = top.children
+ while cur != None:
+ if cur.type == 'text':
+ cur = cur.next
+ continue
+ if cur.name == "exports":
+ count = count + foundExport(name, cur.prop("symbol"))
+ else:
+ print "unexpected element %s in API doc <file name='%s'>" % (name)
+ cur = cur.next
+ return count
+
+def analyzeAPIFiles(top):
+ count = 0
+ cur = top.children
+
+ while cur != None:
+ if cur.type == 'text':
+ cur = cur.next
+ continue
+ if cur.name == "file":
+ count = count + analyzeAPIFile(cur)
+ else:
+ print "unexpected element %s in API doc <files>" % (cur.name)
+ cur = cur.next
+ return count
+
+def analyzeAPIEnum(top):
+ file = top.prop("file")
+ if file == None:
+ return 0
+ symbol = top.prop("name")
+ if symbol == None:
+ return 0
+
+ addEnum(symbol, file)
+ l = splitIdentifier(symbol)
+ for word in l:
+ addWord(word, file, symbol, 10)
+
+ return 1
+
+def analyzeAPIConst(top):
+ file = top.prop("file")
+ if file == None:
+ return 0
+ symbol = top.prop("name")
+ if symbol == None:
+ return 0
+
+ addConst(symbol, file)
+ l = splitIdentifier(symbol)
+ for word in l:
+ addWord(word, file, symbol, 10)
+
+ return 1
+
+def analyzeAPIType(top):
+ file = top.prop("file")
+ if file == None:
+ return 0
+ symbol = top.prop("name")
+ if symbol == None:
+ return 0
+
+ addType(symbol, file)
+ l = splitIdentifier(symbol)
+ for word in l:
+ addWord(word, file, symbol, 10)
+ return 1
+
+def analyzeAPIFunctype(top):
+ file = top.prop("file")
+ if file == None:
+ return 0
+ symbol = top.prop("name")
+ if symbol == None:
+ return 0
+
+ addFunctype(symbol, file)
+ l = splitIdentifier(symbol)
+ for word in l:
+ addWord(word, file, symbol, 10)
+ return 1
+
+def analyzeAPIStruct(top):
+ file = top.prop("file")
+ if file == None:
+ return 0
+ symbol = top.prop("name")
+ if symbol == None:
+ return 0
+
+ addStruct(symbol, file)
+ l = splitIdentifier(symbol)
+ for word in l:
+ addWord(word, file, symbol, 10)
+
+ info = top.prop("info")
+ if info != None:
+ info = string.replace(info, "'", " ")
+ info = string.strip(info)
+ l = string.split(info)
+ for word in l:
+ if len(word) > 2:
+ addWord(word, file, symbol, 5)
+ return 1
+
+def analyzeAPIMacro(top):
+ file = top.prop("file")
+ if file == None:
+ return 0
+ symbol = top.prop("name")
+ if symbol == None:
+ return 0
+ symbol = string.replace(symbol, "'", " ")
+ symbol = string.strip(symbol)
+
+ info = None
+ cur = top.children
+ while cur != None:
+ if cur.type == 'text':
+ cur = cur.next
+ continue
+ if cur.name == "info":
+ info = cur.content
+ break
+ cur = cur.next
+
+ l = splitIdentifier(symbol)
+ for word in l:
+ addWord(word, file, symbol, 10)
+
+ if info == None:
+ addMacro(symbol, file)
+ print "Macro %s description has no <info>" % (symbol)
+ return 0
+
+ info = string.replace(info, "'", " ")
+ info = string.strip(info)
+ addMacro(symbol, file, info)
+ l = string.split(info)
+ for word in l:
+ if len(word) > 2:
+ addWord(word, file, symbol, 5)
+ return 1
+
+def analyzeAPIFunction(top):
+ file = top.prop("file")
+ if file == None:
+ return 0
+ symbol = top.prop("name")
+ if symbol == None:
+ return 0
+
+ symbol = string.replace(symbol, "'", " ")
+ symbol = string.strip(symbol)
+ info = None
+ cur = top.children
+ while cur != None:
+ if cur.type == 'text':
+ cur = cur.next
+ continue
+ if cur.name == "info":
+ info = cur.content
+ elif cur.name == "return":
+ rinfo = cur.prop("info")
+ if rinfo != None:
+ rinfo = string.replace(rinfo, "'", " ")
+ rinfo = string.strip(rinfo)
+ addString(rinfo, file, symbol, 7)
+ elif cur.name == "arg":
+ ainfo = cur.prop("info")
+ if ainfo != None:
+ ainfo = string.replace(ainfo, "'", " ")
+ ainfo = string.strip(ainfo)
+ addString(ainfo, file, symbol, 5)
+ name = cur.prop("name")
+ if name != None:
+ name = string.replace(name, "'", " ")
+ name = string.strip(name)
+ addWord(name, file, symbol, 7)
+ cur = cur.next
+ if info == None:
+ print "Function %s description has no <info>" % (symbol)
+ addFunction(symbol, file, "")
+ else:
+ info = string.replace(info, "'", " ")
+ info = string.strip(info)
+ addFunction(symbol, file, info)
+ addString(info, file, symbol, 5)
+
+ l = splitIdentifier(symbol)
+ for word in l:
+ addWord(word, file, symbol, 10)
+
+ return 1
+
+def analyzeAPISymbols(top):
+ count = 0
+ cur = top.children
+
+ while cur != None:
+ if cur.type == 'text':
+ cur = cur.next
+ continue
+ if cur.name == "macro":
+ count = count + analyzeAPIMacro(cur)
+ elif cur.name == "function":
+ count = count + analyzeAPIFunction(cur)
+ elif cur.name == "const":
+ count = count + analyzeAPIConst(cur)
+ elif cur.name == "typedef":
+ count = count + analyzeAPIType(cur)
+ elif cur.name == "struct":
+ count = count + analyzeAPIStruct(cur)
+ elif cur.name == "enum":
+ count = count + analyzeAPIEnum(cur)
+ elif cur.name == "functype":
+ count = count + analyzeAPIFunctype(cur)
+ else:
+ print "unexpected element %s in API doc <files>" % (cur.name)
+ cur = cur.next
+ return count
+
+def analyzeAPI(doc):
+ count = 0
+ if doc == None:
+ return -1
+ root = doc.getRootElement()
+ if root.name != "api":
+ print "Unexpected root name"
+ return -1
+ cur = root.children
+ while cur != None:
+ if cur.type == 'text':
+ cur = cur.next
+ continue
+ if cur.name == "files":
+ pass
+# count = count + analyzeAPIFiles(cur)
+ elif cur.name == "symbols":
+ count = count + analyzeAPISymbols(cur)
+ else:
+ print "unexpected element %s in API doc" % (cur.name)
+ cur = cur.next
+ return count
+
+#########################################################################
+# #
+# Web pages parsing and analysis #
+# #
+#########################################################################
+
+import glob
+
+def analyzeHTMLText(doc, resource, p, section, id):
+ words = 0
+ try:
+ content = p.content
+ words = words + addStringHTML(content, resource, id, section, 5)
+ except:
+ return -1
+ return words
+
+def analyzeHTMLPara(doc, resource, p, section, id):
+ words = 0
+ try:
+ content = p.content
+ words = words + addStringHTML(content, resource, id, section, 5)
+ except:
+ return -1
+ return words
+
+def analyzeHTMLPre(doc, resource, p, section, id):
+ words = 0
+ try:
+ content = p.content
+ words = words + addStringHTML(content, resource, id, section, 5)
+ except:
+ return -1
+ return words
+
+def analyzeHTML(doc, resource, p, section, id):
+ words = 0
+ try:
+ content = p.content
+ words = words + addStringHTML(content, resource, id, section, 5)
+ except:
+ return -1
+ return words
+
+def analyzeHTML(doc, resource):
+ para = 0;
+ ctxt = doc.xpathNewContext()
+ try:
+ res = ctxt.xpathEval("//head/title")
+ title = res[0].content
+ except:
+ title = "Page %s" % (resource)
+ addPage(resource, title)
+ try:
+ items = ctxt.xpathEval("//h1 | //h2 | //h3 | //text()")
+ section = title
+ id = ""
+ for item in items:
+ if item.name == 'h1' or item.name == 'h2' or item.name == 'h3':
+ section = item.content
+ if item.prop("id"):
+ id = item.prop("id")
+ elif item.prop("name"):
+ id = item.prop("name")
+ elif item.type == 'text':
+ analyzeHTMLText(doc, resource, item, section, id)
+ para = para + 1
+ elif item.name == 'p':
+ analyzeHTMLPara(doc, resource, item, section, id)
+ para = para + 1
+ elif item.name == 'pre':
+ analyzeHTMLPre(doc, resource, item, section, id)
+ para = para + 1
+ else:
+ print "Page %s, unexpected %s element" % (resource, item.name)
+ except:
+ print "Page %s: problem analyzing" % (resource)
+ print sys.exc_type, sys.exc_value
+
+ return para
+
+def analyzeHTMLPages():
+ ret = 0
+ HTMLfiles = glob.glob("*.html") + glob.glob("tutorial/*.html")
+ for html in HTMLfiles:
+ if html[0:3] == "API":
+ continue
+ if html == "xml.html":
+ continue
+ try:
+ doc = libxml2.parseFile(html)
+ except:
+ doc = libxml2.htmlParseFile(html, None)
+ try:
+ res = analyzeHTML(doc, html)
+ print "Parsed %s : %d paragraphs" % (html, res)
+ ret = ret + 1
+ except:
+ print "could not parse %s" % (html)
+ return ret
+
+#########################################################################
+# #
+# Mail archives parsing and analysis #
+# #
+#########################################################################
+
+import time
+
+def getXMLDateArchive(t = None):
+ if t == None:
+ t = time.time()
+ T = time.gmtime(t)
+ month = time.strftime("%B", T)
+ year = T[0]
+ url = "http://mail.gnome.org/archives/xml/%d-%s/date.html" % (year, month)
+ return url
+
+def scanXMLMsgArchive(url, title, force = 0):
+ if url == None or title == None:
+ return 0
+
+ ID = checkXMLMsgArchive(url)
+ if force == 0 and ID != -1:
+ return 0
+
+ if ID == -1:
+ ID = addXMLMsgArchive(url, title)
+ if ID == -1:
+ return 0
+
+ try:
+ print "Loading %s" % (url)
+ doc = libxml2.htmlParseFile(url, None);
+ except:
+ doc = None
+ if doc == None:
+ print "Failed to parse %s" % (url)
+ return 0
+
+ addStringArchive(title, ID, 20)
+ ctxt = doc.xpathNewContext()
+ texts = ctxt.xpathEval("//pre//text()")
+ for text in texts:
+ addStringArchive(text.content, ID, 5)
+
+ return 1
+
+def scanXMLDateArchive(t = None, force = 0):
+ global wordsDictArchive
+
+ wordsDictArchive = {}
+
+ url = getXMLDateArchive(t)
+ print "loading %s" % (url)
+ try:
+ doc = libxml2.htmlParseFile(url, None);
+ except:
+ doc = None
+ if doc == None:
+ print "Failed to parse %s" % (url)
+ return -1
+ ctxt = doc.xpathNewContext()
+ anchors = ctxt.xpathEval("//a[@href]")
+ links = 0
+ newmsg = 0
+ for anchor in anchors:
+ href = anchor.prop("href")
+ if href == None or href[0:3] != "msg":
+ continue
+ try:
+ links = links + 1
+
+ msg = libxml2.buildURI(href, url)
+ title = anchor.content
+ if title != None and title[0:4] == 'Re: ':
+ title = title[4:]
+ if title != None and title[0:6] == '[xml] ':
+ title = title[6:]
+ newmsg = newmsg + scanXMLMsgArchive(msg, title, force)
+
+ except:
+ pass
+
+ return newmsg
+
+
+#########################################################################
+# #
+# Main code: open the DB, the API XML and analyze it #
+# #
+#########################################################################
+try:
+ openMySQL()
+except:
+ print "Failed to open the database"
+ print sys.exc_type, sys.exc_value
+ sys.exit(1)
+
+def analyzeArchives(t = None, force = 0):
+ global wordsDictArchive
+
+ ret = scanXMLDateArchive(t, force)
+ print "Indexed %d words in %d archive pages" % (len(wordsDictArchive), ret)
+
+ i = 0
+ skipped = 0
+ for word in wordsDictArchive.keys():
+ refs = wordsDictArchive[word]
+ if refs == None:
+ skipped = skipped + 1
+ continue;
+ for id in refs.keys():
+ relevance = refs[id]
+ updateWordArchive(word, id, relevance)
+ i = i + 1
+
+ print "Found %d associations in HTML pages" % (i)
+
+def analyzeHTMLTop():
+ global wordsDictHTML
+
+ ret = analyzeHTMLPages()
+ print "Indexed %d words in %d HTML pages" % (len(wordsDictHTML), ret)
+
+ i = 0
+ skipped = 0
+ for word in wordsDictHTML.keys():
+ refs = wordsDictHTML[word]
+ if refs == None:
+ skipped = skipped + 1
+ continue;
+ for resource in refs.keys():
+ (relevance, id, section) = refs[resource]
+ updateWordHTML(word, resource, section, id, relevance)
+ i = i + 1
+
+ print "Found %d associations in HTML pages" % (i)
+
+def analyzeAPITop():
+ global wordsDict
+ global API
+
+ try:
+ doc = loadAPI(API)
+ ret = analyzeAPI(doc)
+ print "Analyzed %d blocs" % (ret)
+ doc.freeDoc()
+ except:
+ print "Failed to parse and analyze %s" % (API)
+ print sys.exc_type, sys.exc_value
+ sys.exit(1)
+
+ print "Indexed %d words" % (len(wordsDict))
+ i = 0
+ skipped = 0
+ for word in wordsDict.keys():
+ refs = wordsDict[word]
+ if refs == None:
+ skipped = skipped + 1
+ continue;
+ for (module, symbol) in refs.keys():
+ updateWord(word, symbol, refs[(module, symbol)])
+ i = i + 1
+
+ print "Found %d associations, skipped %d words" % (i, skipped)
+
+def usage():
+ print "Usage index.py [--force] [--archive] [--archive-year year] [--archive-month month] [--API] [--docs]"
+ sys.exit(1)
+
+def main():
+ args = sys.argv[1:]
+ force = 0
+ if args:
+ i = 0
+ while i < len(args):
+ if args[i] == '--force':
+ force = 1
+ elif args[i] == '--archive':
+ analyzeArchives(None, force)
+ elif args[i] == '--archive-year':
+ i = i + 1;
+ year = args[i]
+ months = ["January" , "February", "March", "April", "May",
+ "June", "July", "August", "September", "October",
+ "November", "December"];
+ for month in months:
+ try:
+ str = "%s-%s" % (year, month)
+ T = time.strptime(str, "%Y-%B")
+ t = time.mktime(T) + 3600 * 24 * 10;
+ analyzeArchives(t, force)
+ except:
+ print "Failed to index month archive:"
+ print sys.exc_type, sys.exc_value
+ elif args[i] == '--archive-month':
+ i = i + 1;
+ month = args[i]
+ try:
+ T = time.strptime(month, "%Y-%B")
+ t = time.mktime(T) + 3600 * 24 * 10;
+ analyzeArchives(t, force)
+ except:
+ print "Failed to index month archive:"
+ print sys.exc_type, sys.exc_value
+ elif args[i] == '--API':
+ analyzeAPITop()
+ elif args[i] == '--docs':
+ analyzeHTMLTop()
+ else:
+ usage()
+ i = i + 1
+ else:
+ usage()
+
+if __name__ == "__main__":
+ main()
diff --git a/doc/interface.html b/doc/interface.html
new file mode 100644
index 0000000..e9e04fb
--- /dev/null
+++ b/doc/interface.html
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>The SAX interface</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>The SAX interface</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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>Sometimes the DOM tree output is just too large to fit reasonably into
+memory. In that case (and if you don't expect to save back the XML document
+loaded using libxml), it's better to use the SAX interface of libxml. SAX is
+a <strong>callback-based interface</strong> to the parser. Before parsing,
+the application layer registers a customized set of callbacks which are
+called by the library as it progresses through the XML input.</p><p>To get more detailed step-by-step guidance on using the SAX interface of
+libxml, see the <a href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">nice
+documentation</a>.written by <a href="mailto:james@daa.com.au">James
+Henstridge</a>.</p><p>You can debug the SAX behaviour by using the <strong>testSAX</strong>
+program located in the gnome-xml module (it's usually not shipped in the
+binary packages of libxml, but you can find it in the tar source
+distribution). Here is the sequence of callbacks that would be reported by
+testSAX when parsing the example XML document shown earlier:</p><pre>SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.getEntity(amp)
+SAX.startElement(EXAMPLE, prop1='gnome is great', prop2='&amp;amp; linux too')
+SAX.characters( , 3)
+SAX.startElement(head)
+SAX.characters( , 4)
+SAX.startElement(title)
+SAX.characters(Welcome to Gnome, 16)
+SAX.endElement(title)
+SAX.characters( , 3)
+SAX.endElement(head)
+SAX.characters( , 3)
+SAX.startElement(chapter)
+SAX.characters( , 4)
+SAX.startElement(title)
+SAX.characters(The Linux adventure, 19)
+SAX.endElement(title)
+SAX.characters( , 4)
+SAX.startElement(p)
+SAX.characters(bla bla bla ..., 15)
+SAX.endElement(p)
+SAX.characters( , 4)
+SAX.startElement(image, href='linus.gif')
+SAX.endElement(image)
+SAX.characters( , 4)
+SAX.startElement(p)
+SAX.characters(..., 3)
+SAX.endElement(p)
+SAX.characters( , 3)
+SAX.endElement(chapter)
+SAX.characters( , 1)
+SAX.endElement(EXAMPLE)
+SAX.endDocument()</pre><p>Most of the other interfaces of libxml2 are based on the DOM tree-building
+facility, so nearly everything up to the end of this document presupposes the
+use of the standard DOM tree build. Note that the DOM tree itself is built by
+a set of registered default callbacks, without internal specific
+interface.</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/intro.html b/doc/intro.html
new file mode 100644
index 0000000..37991d0
--- /dev/null
+++ b/doc/intro.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Introduction</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Introduction</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>This document describes libxml, the <a href="http://www.w3.org/XML/">XML</a> C parser and toolkit developed for the
+<a href="http://www.gnome.org/">Gnome</a> project. <a href="http://www.w3.org/XML/">XML is a standard</a> for building tag-based
+structured documents/data.</p><p>Here are some key points about libxml:</p><ul><li>Libxml2 exports Push (progressive) and Pull (blocking) type parser
+ interfaces for both XML and HTML.</li>
+ <li>Libxml2 can do DTD validation at parse time, using a parsed document
+ instance, or with an arbitrary DTD.</li>
+ <li>Libxml2 includes complete <a href="http://www.w3.org/TR/xpath">XPath</a>, <a href="http://www.w3.org/TR/xptr">XPointer</a> and <a href="http://www.w3.org/TR/xinclude">XInclude</a> implementations.</li>
+ <li>It is written in plain C, making as few assumptions as possible, and
+ sticking closely to ANSI C/POSIX for easy embedding. Works on
+ Linux/Unix/Windows, ported to a number of other platforms.</li>
+ <li>Basic support for HTTP and FTP client allowing applications to fetch
+ remote resources.</li>
+ <li>The design is modular, most of the extensions can be compiled out.</li>
+ <li>The internal document representation is as close as possible to the <a href="http://www.w3.org/DOM/">DOM</a> interfaces.</li>
+ <li>Libxml2 also has a <a href="http://www.megginson.com/SAX/index.html">SAX like interface</a>;
+ the interface is designed to be compatible with <a href="http://www.jclark.com/xml/expat.html">Expat</a>.</li>
+ <li>This library is released under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
+ License</a>. See the Copyright file in the distribution for the precise
+ wording.</li>
+</ul><p>Warning: unless you are forced to because your application links with a
+Gnome-1.X library requiring it, <strong><span style="background-color: #FF0000">Do Not Use libxml1</span></strong>, use
+libxml2</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/library.html b/doc/library.html
new file mode 100644
index 0000000..842dea1
--- /dev/null
+++ b/doc/library.html
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>The parser interfaces</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>The parser interfaces</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>This section is directly intended to help programmers getting bootstrapped
+using the XML tollkit from the C language. It is not intended to be
+extensive. I hope the automatically generated documents will provide the
+completeness required, but as a separate set of documents. The interfaces of
+the XML parser are by principle low level, Those interested in a higher level
+API should <a href="#DOM">look at DOM</a>.</p><p>The <a href="html/libxml-parser.html">parser interfaces for XML</a> are
+separated from the <a href="html/libxml-htmlparser.html">HTML parser
+interfaces</a>. Let's have a look at how the XML parser can be called:</p><h3><a name="Invoking" id="Invoking">Invoking the parser : the pull method</a></h3><p>Usually, the first thing to do is to read an XML input. The parser accepts
+documents either from in-memory strings or from files. The functions are
+defined in "parser.h":</p><dl><dt><code>xmlDocPtr xmlParseMemory(char *buffer, int size);</code></dt>
+ <dd><p>Parse a null-terminated string containing the document.</p>
+ </dd>
+</dl><dl><dt><code>xmlDocPtr xmlParseFile(const char *filename);</code></dt>
+ <dd><p>Parse an XML document contained in a (possibly compressed)
+ file.</p>
+ </dd>
+</dl><p>The parser returns a pointer to the document structure (or NULL in case of
+failure).</p><h3 id="Invoking1">Invoking the parser: the push method</h3><p>In order for the application to keep the control when the document is
+being fetched (which is common for GUI based programs) libxml2 provides a
+push interface, too, as of version 1.8.3. Here are the interface
+functions:</p><pre>xmlParserCtxtPtr xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *chunk,
+ int size,
+ const char *filename);
+int xmlParseChunk (xmlParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ int terminate);</pre><p>and here is a simple example showing how to use the interface:</p><pre> FILE *f;
+
+ f = fopen(filename, "r");
+ if (f != NULL) {
+ int res, size = 1024;
+ char chars[1024];
+ xmlParserCtxtPtr ctxt;
+
+ res = fread(chars, 1, 4, f);
+ if (res &gt; 0) {
+ ctxt = xmlCreatePushParserCtxt(NULL, NULL,
+ chars, res, filename);
+ while ((res = fread(chars, 1, size, f)) &gt; 0) {
+ xmlParseChunk(ctxt, chars, res, 0);
+ }
+ xmlParseChunk(ctxt, chars, 0, 1);
+ doc = ctxt-&gt;myDoc;
+ xmlFreeParserCtxt(ctxt);
+ }
+ }</pre><p>The HTML parser embedded into libxml2 also has a push interface; the
+functions are just prefixed by "html" rather than "xml".</p><h3 id="Invoking2">Invoking the parser: the SAX interface</h3><p>The tree-building interface makes the parser memory-hungry, first loading
+the document in memory and then building the tree itself. Reading a document
+without building the tree is possible using the SAX interfaces (see SAX.h and
+<a href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">James
+Henstridge's documentation</a>). Note also that the push interface can be
+limited to SAX: just use the two first arguments of
+<code>xmlCreatePushParserCtxt()</code>.</p><h3><a name="Building" id="Building">Building a tree from scratch</a></h3><p>The other way to get an XML tree in memory is by building it. Basically
+there is a set of functions dedicated to building new elements. (These are
+also described in &lt;libxml/tree.h&gt;.) For example, here is a piece of
+code that produces the XML document used in the previous examples:</p><pre> #include &lt;libxml/tree.h&gt;
+ xmlDocPtr doc;
+ xmlNodePtr tree, subtree;
+
+ doc = xmlNewDoc("1.0");
+ doc-&gt;children = xmlNewDocNode(doc, NULL, "EXAMPLE", NULL);
+ xmlSetProp(doc-&gt;children, "prop1", "gnome is great");
+ xmlSetProp(doc-&gt;children, "prop2", "&amp; linux too");
+ tree = xmlNewChild(doc-&gt;children, NULL, "head", NULL);
+ subtree = xmlNewChild(tree, NULL, "title", "Welcome to Gnome");
+ tree = xmlNewChild(doc-&gt;children, NULL, "chapter", NULL);
+ subtree = xmlNewChild(tree, NULL, "title", "The Linux adventure");
+ subtree = xmlNewChild(tree, NULL, "p", "bla bla bla ...");
+ subtree = xmlNewChild(tree, NULL, "image", NULL);
+ xmlSetProp(subtree, "href", "linus.gif");</pre><p>Not really rocket science ...</p><h3><a name="Traversing" id="Traversing">Traversing the tree</a></h3><p>Basically by <a href="html/libxml-tree.html">including "tree.h"</a> your
+code has access to the internal structure of all the elements of the tree.
+The names should be somewhat simple like <strong>parent</strong>,
+<strong>children</strong>, <strong>next</strong>, <strong>prev</strong>,
+<strong>properties</strong>, etc... For example, still with the previous
+example:</p><pre><code>doc-&gt;children-&gt;children-&gt;children</code></pre><p>points to the title element,</p><pre>doc-&gt;children-&gt;children-&gt;next-&gt;children-&gt;children</pre><p>points to the text node containing the chapter title "The Linux
+adventure".</p><p><strong>NOTE</strong>: XML allows <em>PI</em>s and <em>comments</em> to be
+present before the document root, so <code>doc-&gt;children</code> may point
+to an element which is not the document Root Element; a function
+<code>xmlDocGetRootElement()</code> was added for this purpose.</p><h3><a name="Modifying" id="Modifying">Modifying the tree</a></h3><p>Functions are provided for reading and writing the document content. Here
+is an excerpt from the <a href="html/libxml-tree.html">tree API</a>:</p><dl><dt><code>xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar *name, const
+ xmlChar *value);</code></dt>
+ <dd><p>This sets (or changes) an attribute carried by an ELEMENT node.
+ The value can be NULL.</p>
+ </dd>
+</dl><dl><dt><code>const xmlChar *xmlGetProp(xmlNodePtr node, const xmlChar
+ *name);</code></dt>
+ <dd><p>This function returns a pointer to new copy of the property
+ content. Note that the user must deallocate the result.</p>
+ </dd>
+</dl><p>Two functions are provided for reading and writing the text associated
+with elements:</p><dl><dt><code>xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const xmlChar
+ *value);</code></dt>
+ <dd><p>This function takes an "external" string and converts it to one
+ text node or possibly to a list of entity and text nodes. All
+ non-predefined entity references like &amp;Gnome; will be stored
+ internally as entity nodes, hence the result of the function may not be
+ a single node.</p>
+ </dd>
+</dl><dl><dt><code>xmlChar *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int
+ inLine);</code></dt>
+ <dd><p>This function is the inverse of
+ <code>xmlStringGetNodeList()</code>. It generates a new string
+ containing the content of the text and entity nodes. Note the extra
+ argument inLine. If this argument is set to 1, the function will expand
+ entity references. For example, instead of returning the &amp;Gnome;
+ XML encoding in the string, it will substitute it with its value (say,
+ "GNU Network Object Model Environment").</p>
+ </dd>
+</dl><h3><a name="Saving" id="Saving">Saving a tree</a></h3><p>Basically 3 options are possible:</p><dl><dt><code>void xmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int
+ *size);</code></dt>
+ <dd><p>Returns a buffer into which the document has been saved.</p>
+ </dd>
+</dl><dl><dt><code>extern void xmlDocDump(FILE *f, xmlDocPtr doc);</code></dt>
+ <dd><p>Dumps a document to an open file descriptor.</p>
+ </dd>
+</dl><dl><dt><code>int xmlSaveFile(const char *filename, xmlDocPtr cur);</code></dt>
+ <dd><p>Saves the document to a file. In this case, the compression
+ interface is triggered if it has been turned on.</p>
+ </dd>
+</dl><h3><a name="Compressio" id="Compressio">Compression</a></h3><p>The library transparently handles compression when doing file-based
+accesses. The level of compression on saves can be turned on either globally
+or individually for one file:</p><dl><dt><code>int xmlGetDocCompressMode (xmlDocPtr doc);</code></dt>
+ <dd><p>Gets the document compression ratio (0-9).</p>
+ </dd>
+</dl><dl><dt><code>void xmlSetDocCompressMode (xmlDocPtr doc, int mode);</code></dt>
+ <dd><p>Sets the document compression ratio.</p>
+ </dd>
+</dl><dl><dt><code>int xmlGetCompressMode(void);</code></dt>
+ <dd><p>Gets the default compression ratio.</p>
+ </dd>
+</dl><dl><dt><code>void xmlSetCompressMode(int mode);</code></dt>
+ <dd><p>Sets the default compression ratio.</p>
+ </dd>
+</dl><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/libxml.gif b/doc/libxml.gif
new file mode 100644
index 0000000..e24adf8
--- /dev/null
+++ b/doc/libxml.gif
Binary files differ
diff --git a/doc/libxml2-api.xml b/doc/libxml2-api.xml
new file mode 100644
index 0000000..3546b0c
--- /dev/null
+++ b/doc/libxml2-api.xml
@@ -0,0 +1,14791 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<api name='libxml2'>
+ <files>
+ <file name='DOCBparser'>
+ <summary>old DocBook SGML parser</summary>
+ <description>interface for a DocBook SGML non-verifying parser This code is DEPRECATED, and should not be used anymore. </description>
+ <author>Daniel Veillard </author>
+ <deprecated/>
+ <exports symbol='docbParserInput' type='typedef'/>
+ <exports symbol='docbParserInputPtr' type='typedef'/>
+ <exports symbol='docbParserCtxt' type='typedef'/>
+ <exports symbol='docbParserCtxtPtr' type='typedef'/>
+ <exports symbol='docbDocPtr' type='typedef'/>
+ <exports symbol='docbSAXHandler' type='typedef'/>
+ <exports symbol='docbSAXHandlerPtr' type='typedef'/>
+ <exports symbol='docbCreatePushParserCtxt' type='function'/>
+ <exports symbol='docbEncodeEntities' type='function'/>
+ <exports symbol='docbParseFile' type='function'/>
+ <exports symbol='docbParseDocument' type='function'/>
+ <exports symbol='docbCreateFileParserCtxt' type='function'/>
+ <exports symbol='docbParseDoc' type='function'/>
+ <exports symbol='docbSAXParseDoc' type='function'/>
+ <exports symbol='docbSAXParseFile' type='function'/>
+ <exports symbol='docbParseChunk' type='function'/>
+ <exports symbol='docbFreeParserCtxt' type='function'/>
+ </file>
+ <file name='HTMLparser'>
+ <summary>interface for an HTML 4.0 non-verifying parser</summary>
+ <description>this module implements an HTML 4.0 non-verifying parser with API compatible with the XML parser ones. It should be able to parse &quot;real world&quot; HTML, even if severely broken from a specification point of view. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='htmlDefaultSubelement' type='macro'/>
+ <exports symbol='htmlElementAllowedHereDesc' type='macro'/>
+ <exports symbol='htmlRequiredAttrs' type='macro'/>
+ <exports symbol='HTML_REQUIRED' type='enum'/>
+ <exports symbol='HTML_DEPRECATED' type='enum'/>
+ <exports symbol='HTML_INVALID' type='enum'/>
+ <exports symbol='HTML_PARSE_NONET' type='enum'/>
+ <exports symbol='HTML_PARSE_PEDANTIC' type='enum'/>
+ <exports symbol='HTML_NA' type='enum'/>
+ <exports symbol='HTML_VALID' type='enum'/>
+ <exports symbol='HTML_PARSE_NOWARNING' type='enum'/>
+ <exports symbol='HTML_PARSE_NOBLANKS' type='enum'/>
+ <exports symbol='HTML_PARSE_NOERROR' type='enum'/>
+ <exports symbol='htmlParserNodeInfo' type='typedef'/>
+ <exports symbol='htmlParserInput' type='typedef'/>
+ <exports symbol='htmlParserCtxtPtr' type='typedef'/>
+ <exports symbol='htmlEntityDesc' type='typedef'/>
+ <exports symbol='htmlDocPtr' type='typedef'/>
+ <exports symbol='htmlSAXHandlerPtr' type='typedef'/>
+ <exports symbol='htmlStatus' type='typedef'/>
+ <exports symbol='htmlNodePtr' type='typedef'/>
+ <exports symbol='htmlElemDescPtr' type='typedef'/>
+ <exports symbol='htmlElemDesc' type='typedef'/>
+ <exports symbol='htmlSAXHandler' type='typedef'/>
+ <exports symbol='htmlParserInputPtr' type='typedef'/>
+ <exports symbol='htmlParserOption' type='typedef'/>
+ <exports symbol='htmlEntityDescPtr' type='typedef'/>
+ <exports symbol='htmlParserCtxt' type='typedef'/>
+ <exports symbol='_htmlEntityDesc' type='struct'/>
+ <exports symbol='_htmlElemDesc' type='struct'/>
+ <exports symbol='htmlParseChunk' type='function'/>
+ <exports symbol='htmlNodeStatus' type='function'/>
+ <exports symbol='htmlAttrAllowed' type='function'/>
+ <exports symbol='htmlIsScriptAttribute' type='function'/>
+ <exports symbol='htmlHandleOmittedElem' type='function'/>
+ <exports symbol='htmlReadFd' type='function'/>
+ <exports symbol='htmlSAXParseFile' type='function'/>
+ <exports symbol='htmlParseEntityRef' type='function'/>
+ <exports symbol='htmlSAXParseDoc' type='function'/>
+ <exports symbol='htmlParseFile' type='function'/>
+ <exports symbol='htmlReadIO' type='function'/>
+ <exports symbol='htmlCtxtReadDoc' type='function'/>
+ <exports symbol='htmlElementStatusHere' type='function'/>
+ <exports symbol='htmlEntityLookup' type='function'/>
+ <exports symbol='htmlEntityValueLookup' type='function'/>
+ <exports symbol='htmlParseElement' type='function'/>
+ <exports symbol='htmlAutoCloseTag' type='function'/>
+ <exports symbol='UTF8ToHtml' type='function'/>
+ <exports symbol='htmlTagLookup' type='function'/>
+ <exports symbol='htmlCreateMemoryParserCtxt' type='function'/>
+ <exports symbol='htmlCtxtReset' type='function'/>
+ <exports symbol='htmlFreeParserCtxt' type='function'/>
+ <exports symbol='htmlCtxtReadMemory' type='function'/>
+ <exports symbol='htmlCtxtReadFd' type='function'/>
+ <exports symbol='htmlElementAllowedHere' type='function'/>
+ <exports symbol='htmlCtxtReadIO' type='function'/>
+ <exports symbol='htmlReadFile' type='function'/>
+ <exports symbol='htmlCtxtReadFile' type='function'/>
+ <exports symbol='htmlCreatePushParserCtxt' type='function'/>
+ <exports symbol='htmlReadMemory' type='function'/>
+ <exports symbol='htmlParseDocument' type='function'/>
+ <exports symbol='htmlIsAutoClosed' type='function'/>
+ <exports symbol='htmlParseCharRef' type='function'/>
+ <exports symbol='htmlCtxtUseOptions' type='function'/>
+ <exports symbol='htmlReadDoc' type='function'/>
+ <exports symbol='htmlParseDoc' type='function'/>
+ <exports symbol='htmlEncodeEntities' type='function'/>
+ </file>
+ <file name='HTMLtree'>
+ <summary>specific APIs to process HTML tree, especially serialization</summary>
+ <description>this module implements a few function needed to process tree in an HTML specific way. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='HTML_ENTITY_REF_NODE' type='macro'/>
+ <exports symbol='HTML_COMMENT_NODE' type='macro'/>
+ <exports symbol='HTML_PRESERVE_NODE' type='macro'/>
+ <exports symbol='HTML_TEXT_NODE' type='macro'/>
+ <exports symbol='HTML_PI_NODE' type='macro'/>
+ <exports symbol='htmlDocDumpMemory' type='function'/>
+ <exports symbol='htmlSaveFile' type='function'/>
+ <exports symbol='htmlNewDocNoDtD' type='function'/>
+ <exports symbol='htmlDocDump' type='function'/>
+ <exports symbol='htmlNodeDump' type='function'/>
+ <exports symbol='htmlDocContentDumpFormatOutput' type='function'/>
+ <exports symbol='htmlSetMetaEncoding' type='function'/>
+ <exports symbol='htmlSaveFileEnc' type='function'/>
+ <exports symbol='htmlNodeDumpOutput' type='function'/>
+ <exports symbol='htmlIsBooleanAttr' type='function'/>
+ <exports symbol='htmlNodeDumpFormatOutput' type='function'/>
+ <exports symbol='htmlNewDoc' type='function'/>
+ <exports symbol='htmlGetMetaEncoding' type='function'/>
+ <exports symbol='htmlNodeDumpFile' type='function'/>
+ <exports symbol='htmlNodeDumpFileFormat' type='function'/>
+ <exports symbol='htmlSaveFileFormat' type='function'/>
+ <exports symbol='htmlDocContentDumpOutput' type='function'/>
+ </file>
+ <file name='SAX'>
+ <summary>Old SAX version 1 handler, deprecated</summary>
+ <description>DEPRECATED set of SAX version 1 interfaces used to build the DOM tree. </description>
+ <author>Daniel Veillard </author>
+ <deprecated/>
+ <exports symbol='cdataBlock' type='function'/>
+ <exports symbol='comment' type='function'/>
+ <exports symbol='checkNamespace' type='function'/>
+ <exports symbol='startElement' type='function'/>
+ <exports symbol='inithtmlDefaultSAXHandler' type='function'/>
+ <exports symbol='getColumnNumber' type='function'/>
+ <exports symbol='endElement' type='function'/>
+ <exports symbol='attribute' type='function'/>
+ <exports symbol='namespaceDecl' type='function'/>
+ <exports symbol='getNamespace' type='function'/>
+ <exports symbol='initdocbDefaultSAXHandler' type='function'/>
+ <exports symbol='setDocumentLocator' type='function'/>
+ <exports symbol='getPublicId' type='function'/>
+ <exports symbol='getEntity' type='function'/>
+ <exports symbol='characters' type='function'/>
+ <exports symbol='elementDecl' type='function'/>
+ <exports symbol='ignorableWhitespace' type='function'/>
+ <exports symbol='hasExternalSubset' type='function'/>
+ <exports symbol='isStandalone' type='function'/>
+ <exports symbol='unparsedEntityDecl' type='function'/>
+ <exports symbol='reference' type='function'/>
+ <exports symbol='globalNamespace' type='function'/>
+ <exports symbol='initxmlDefaultSAXHandler' type='function'/>
+ <exports symbol='hasInternalSubset' type='function'/>
+ <exports symbol='processingInstruction' type='function'/>
+ <exports symbol='getParameterEntity' type='function'/>
+ <exports symbol='attributeDecl' type='function'/>
+ <exports symbol='notationDecl' type='function'/>
+ <exports symbol='entityDecl' type='function'/>
+ <exports symbol='setNamespace' type='function'/>
+ <exports symbol='externalSubset' type='function'/>
+ <exports symbol='resolveEntity' type='function'/>
+ <exports symbol='getSystemId' type='function'/>
+ <exports symbol='startDocument' type='function'/>
+ <exports symbol='internalSubset' type='function'/>
+ <exports symbol='endDocument' type='function'/>
+ <exports symbol='getLineNumber' type='function'/>
+ </file>
+ <file name='SAX2'>
+ <summary>SAX2 parser interface used to build the DOM tree</summary>
+ <description>those are the default SAX2 interfaces used by the library when building DOM tree. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlSAX2CheckNamespace' type='function'/>
+ <exports symbol='xmlSAX2EndElementNs' type='function'/>
+ <exports symbol='xmlSAX2Reference' type='function'/>
+ <exports symbol='xmlSAX2GetNamespace' type='function'/>
+ <exports symbol='xmlSAX2ElementDecl' type='function'/>
+ <exports symbol='xmlSAX2NamespaceDecl' type='function'/>
+ <exports symbol='xmlSAX2AttributeDecl' type='function'/>
+ <exports symbol='xmlSAX2EntityDecl' type='function'/>
+ <exports symbol='xmlSAX2GetColumnNumber' type='function'/>
+ <exports symbol='xmlSAX2GetEntity' type='function'/>
+ <exports symbol='xmlSAX2UnparsedEntityDecl' type='function'/>
+ <exports symbol='xmlSAX2InitDocbDefaultSAXHandler' type='function'/>
+ <exports symbol='xmlSAXVersion' type='function'/>
+ <exports symbol='xmlSAX2IgnorableWhitespace' type='function'/>
+ <exports symbol='xmlSAX2NotationDecl' type='function'/>
+ <exports symbol='xmlDefaultSAXHandlerInit' type='function'/>
+ <exports symbol='xmlSAX2StartDocument' type='function'/>
+ <exports symbol='xmlSAX2EndElement' type='function'/>
+ <exports symbol='xmlSAX2ResolveEntity' type='function'/>
+ <exports symbol='xmlSAX2ExternalSubset' type='function'/>
+ <exports symbol='xmlSAX2GetPublicId' type='function'/>
+ <exports symbol='xmlSAX2SetNamespace' type='function'/>
+ <exports symbol='xmlSAX2IsStandalone' type='function'/>
+ <exports symbol='xmlSAX2EndDocument' type='function'/>
+ <exports symbol='xmlSAX2ProcessingInstruction' type='function'/>
+ <exports symbol='xmlSAX2InternalSubset' type='function'/>
+ <exports symbol='xmlSAX2Characters' type='function'/>
+ <exports symbol='xmlSAX2Comment' type='function'/>
+ <exports symbol='xmlSAX2StartElement' type='function'/>
+ <exports symbol='xmlSAX2SetDocumentLocator' type='function'/>
+ <exports symbol='xmlSAX2CDataBlock' type='function'/>
+ <exports symbol='htmlDefaultSAXHandlerInit' type='function'/>
+ <exports symbol='xmlSAX2HasExternalSubset' type='function'/>
+ <exports symbol='xmlSAX2StartElementNs' type='function'/>
+ <exports symbol='xmlSAX2GlobalNamespace' type='function'/>
+ <exports symbol='xmlSAX2GetLineNumber' type='function'/>
+ <exports symbol='xmlSAX2HasInternalSubset' type='function'/>
+ <exports symbol='xmlSAX2InitHtmlDefaultSAXHandler' type='function'/>
+ <exports symbol='docbDefaultSAXHandlerInit' type='function'/>
+ <exports symbol='xmlSAXDefaultVersion' type='function'/>
+ <exports symbol='xmlSAX2InitDefaultSAXHandler' type='function'/>
+ <exports symbol='xmlSAX2GetParameterEntity' type='function'/>
+ <exports symbol='xmlSAX2GetSystemId' type='function'/>
+ </file>
+ <file name='c14n'>
+ <summary>Provide Canonical XML and Exclusive XML Canonicalization</summary>
+ <description>the c14n modules provides a &quot;Canonical XML&quot; implementation</description>
+ <author>Aleksey Sanin &lt;aleksey@aleksey.com&gt; </author>
+ <exports symbol='xmlC14NExecute' type='function'/>
+ <exports symbol='xmlC14NDocSaveTo' type='function'/>
+ <exports symbol='xmlC14NIsVisibleCallback' type='function'/>
+ <exports symbol='xmlC14NDocSave' type='function'/>
+ <exports symbol='xmlC14NDocDumpMemory' type='function'/>
+ </file>
+ <file name='catalog'>
+ <summary>interfaces to the Catalog handling system</summary>
+ <description>the catalog module implements the support for XML Catalogs and SGML catalogs </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_CATALOG_PI' type='macro'/>
+ <exports symbol='XML_CATALOGS_NAMESPACE' type='macro'/>
+ <exports symbol='XML_CATA_ALLOW_DOCUMENT' type='enum'/>
+ <exports symbol='XML_CATA_ALLOW_NONE' type='enum'/>
+ <exports symbol='XML_CATA_PREFER_NONE' type='enum'/>
+ <exports symbol='XML_CATA_ALLOW_ALL' type='enum'/>
+ <exports symbol='XML_CATA_PREFER_SYSTEM' type='enum'/>
+ <exports symbol='XML_CATA_ALLOW_GLOBAL' type='enum'/>
+ <exports symbol='XML_CATA_PREFER_PUBLIC' type='enum'/>
+ <exports symbol='xmlCatalogAllow' type='typedef'/>
+ <exports symbol='xmlCatalogPrefer' type='typedef'/>
+ <exports symbol='xmlCatalog' type='typedef'/>
+ <exports symbol='xmlCatalogPtr' type='typedef'/>
+ <exports symbol='xmlCatalogConvert' type='function'/>
+ <exports symbol='xmlFreeCatalog' type='function'/>
+ <exports symbol='xmlLoadCatalogs' type='function'/>
+ <exports symbol='xmlCatalogLocalResolve' type='function'/>
+ <exports symbol='xmlACatalogAdd' type='function'/>
+ <exports symbol='xmlACatalogResolvePublic' type='function'/>
+ <exports symbol='xmlCatalogGetDefaults' type='function'/>
+ <exports symbol='xmlInitializeCatalog' type='function'/>
+ <exports symbol='xmlLoadACatalog' type='function'/>
+ <exports symbol='xmlCatalogAddLocal' type='function'/>
+ <exports symbol='xmlCatalogLocalResolveURI' type='function'/>
+ <exports symbol='xmlCatalogSetDefaultPrefer' type='function'/>
+ <exports symbol='xmlCatalogDump' type='function'/>
+ <exports symbol='xmlACatalogResolveURI' type='function'/>
+ <exports symbol='xmlCatalogCleanup' type='function'/>
+ <exports symbol='xmlCatalogAdd' type='function'/>
+ <exports symbol='xmlConvertSGMLCatalog' type='function'/>
+ <exports symbol='xmlCatalogResolvePublic' type='function'/>
+ <exports symbol='xmlCatalogGetSystem' type='function'/>
+ <exports symbol='xmlACatalogRemove' type='function'/>
+ <exports symbol='xmlNewCatalog' type='function'/>
+ <exports symbol='xmlLoadCatalog' type='function'/>
+ <exports symbol='xmlCatalogResolve' type='function'/>
+ <exports symbol='xmlParseCatalogFile' type='function'/>
+ <exports symbol='xmlCatalogSetDebug' type='function'/>
+ <exports symbol='xmlCatalogRemove' type='function'/>
+ <exports symbol='xmlCatalogIsEmpty' type='function'/>
+ <exports symbol='xmlCatalogGetPublic' type='function'/>
+ <exports symbol='xmlACatalogResolveSystem' type='function'/>
+ <exports symbol='xmlACatalogDump' type='function'/>
+ <exports symbol='xmlCatalogSetDefaults' type='function'/>
+ <exports symbol='xmlCatalogFreeLocal' type='function'/>
+ <exports symbol='xmlACatalogResolve' type='function'/>
+ <exports symbol='xmlCatalogResolveURI' type='function'/>
+ <exports symbol='xmlCatalogResolveSystem' type='function'/>
+ <exports symbol='xmlLoadSGMLSuperCatalog' type='function'/>
+ </file>
+ <file name='chvalid'>
+ <summary>Unicode character range checking</summary>
+ <description>this module exports interfaces for the character range validation APIs This file is automatically generated from the cvs source definition files using the genChRanges.py Python script </description>
+ <author>William Brack &lt;wbrack@mmm.com.hk&gt; </author>
+ <exports symbol='xmlIsExtender_ch' type='macro'/>
+ <exports symbol='xmlIsPubidCharQ' type='macro'/>
+ <exports symbol='xmlIsIdeographicQ' type='macro'/>
+ <exports symbol='xmlIsExtenderQ' type='macro'/>
+ <exports symbol='xmlIsCombiningQ' type='macro'/>
+ <exports symbol='xmlIsDigitQ' type='macro'/>
+ <exports symbol='xmlIsDigit_ch' type='macro'/>
+ <exports symbol='xmlIsBaseChar_ch' type='macro'/>
+ <exports symbol='xmlIsPubidChar_ch' type='macro'/>
+ <exports symbol='xmlIsBlankQ' type='macro'/>
+ <exports symbol='xmlIsCharQ' type='macro'/>
+ <exports symbol='xmlIsBaseCharQ' type='macro'/>
+ <exports symbol='xmlIsBlank_ch' type='macro'/>
+ <exports symbol='xmlIsChar_ch' type='macro'/>
+ <exports symbol='xmlChRangeGroupPtr' type='typedef'/>
+ <exports symbol='xmlChSRange' type='typedef'/>
+ <exports symbol='xmlChLRange' type='typedef'/>
+ <exports symbol='xmlChSRangePtr' type='typedef'/>
+ <exports symbol='xmlChRangeGroup' type='typedef'/>
+ <exports symbol='xmlChLRangePtr' type='typedef'/>
+ <exports symbol='_xmlChSRange' type='struct'/>
+ <exports symbol='_xmlChLRange' type='struct'/>
+ <exports symbol='_xmlChRangeGroup' type='struct'/>
+ <exports symbol='xmlIsDigitGroup' type='variable'/>
+ <exports symbol='xmlIsExtenderGroup' type='variable'/>
+ <exports symbol='xmlIsBaseCharGroup' type='variable'/>
+ <exports symbol='xmlIsPubidChar_tab' type='variable'/>
+ <exports symbol='xmlIsCharGroup' type='variable'/>
+ <exports symbol='xmlIsCombiningGroup' type='variable'/>
+ <exports symbol='xmlIsIdeographicGroup' type='variable'/>
+ <exports symbol='xmlIsPubidChar' type='function'/>
+ <exports symbol='xmlIsChar' type='function'/>
+ <exports symbol='xmlIsDigit' type='function'/>
+ <exports symbol='xmlIsCombining' type='function'/>
+ <exports symbol='xmlIsIdeographic' type='function'/>
+ <exports symbol='xmlIsExtender' type='function'/>
+ <exports symbol='xmlCharInRange' type='function'/>
+ <exports symbol='xmlIsBaseChar' type='function'/>
+ <exports symbol='xmlIsBlank' type='function'/>
+ </file>
+ <file name='debugXML'>
+ <summary>Tree debugging APIs</summary>
+ <description>Interfaces to a set of routines used for debugging the tree produced by the XML parser. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlShellCtxt' type='typedef'/>
+ <exports symbol='xmlShellCtxtPtr' type='typedef'/>
+ <exports symbol='_xmlShellCtxt' type='struct'/>
+ <exports symbol='xmlDebugDumpEntities' type='function'/>
+ <exports symbol='xmlShellBase' type='function'/>
+ <exports symbol='xmlShellCat' type='function'/>
+ <exports symbol='xmlDebugDumpDTD' type='function'/>
+ <exports symbol='xmlDebugDumpNode' type='function'/>
+ <exports symbol='xmlDebugDumpAttrList' type='function'/>
+ <exports symbol='xmlShellPrintNode' type='function'/>
+ <exports symbol='xmlLsOneNode' type='function'/>
+ <exports symbol='xmlShellReadlineFunc' type='function'/>
+ <exports symbol='xmlShellSave' type='function'/>
+ <exports symbol='xmlShellPwd' type='function'/>
+ <exports symbol='xmlBoolToText' type='function'/>
+ <exports symbol='xmlShellWrite' type='function'/>
+ <exports symbol='xmlDebugDumpString' type='function'/>
+ <exports symbol='xmlDebugDumpAttr' type='function'/>
+ <exports symbol='xmlShellDu' type='function'/>
+ <exports symbol='xmlDebugDumpNodeList' type='function'/>
+ <exports symbol='xmlDebugDumpDocument' type='function'/>
+ <exports symbol='xmlLsCountNode' type='function'/>
+ <exports symbol='xmlShellValidate' type='function'/>
+ <exports symbol='xmlShellPrintXPathError' type='function'/>
+ <exports symbol='xmlShellDir' type='function'/>
+ <exports symbol='xmlShellPrintXPathResult' type='function'/>
+ <exports symbol='xmlDebugDumpDocumentHead' type='function'/>
+ <exports symbol='xmlDebugDumpOneNode' type='function'/>
+ <exports symbol='xmlShellCmd' type='function'/>
+ <exports symbol='xmlShellList' type='function'/>
+ <exports symbol='xmlShell' type='function'/>
+ <exports symbol='xmlShellLoad' type='function'/>
+ </file>
+ <file name='dict'>
+ <summary>string dictionnary</summary>
+ <description>dictionary of reusable strings, just used to avoid allocation and freeing operations. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlDict' type='typedef'/>
+ <exports symbol='xmlDictPtr' type='typedef'/>
+ <exports symbol='xmlDictQLookup' type='function'/>
+ <exports symbol='xmlDictReference' type='function'/>
+ <exports symbol='xmlDictCreateSub' type='function'/>
+ <exports symbol='xmlDictCreate' type='function'/>
+ <exports symbol='xmlDictSize' type='function'/>
+ <exports symbol='xmlDictLookup' type='function'/>
+ <exports symbol='xmlDictFree' type='function'/>
+ <exports symbol='xmlDictOwns' type='function'/>
+ </file>
+ <file name='encoding'>
+ <summary>interface for the encoding conversion functions</summary>
+ <description>interface for the encoding conversion functions needed for XML basic encoding and iconv() support. Related specs are rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies [ISO-10646] UTF-8 and UTF-16 in Annexes [ISO-8859-1] ISO Latin-1 characters codes. [UNICODE] The Unicode Consortium, &quot;The Unicode Standard -- Worldwide Character Encoding -- Version 1.0&quot;, Addison- Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is described in Unicode Technical Report #4. [US-ASCII] Coded Character Set--7-bit American Standard Code for Information Interchange, ANSI X3.4-1986. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_CHAR_ENCODING_UCS4LE' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_ERROR' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_8859_5' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_EBCDIC' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_ASCII' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_NONE' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_UCS4BE' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_UTF16LE' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_UCS4_2143' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_8859_8' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_8859_9' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_8859_6' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_8859_7' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_8859_4' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_EUC_JP' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_8859_2' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_8859_3' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_8859_1' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_UCS4_3412' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_UTF16BE' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_2022_JP' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_UTF8' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_SHIFT_JIS' type='enum'/>
+ <exports symbol='XML_CHAR_ENCODING_UCS2' type='enum'/>
+ <exports symbol='xmlCharEncoding' type='typedef'/>
+ <exports symbol='xmlCharEncodingHandler' type='typedef'/>
+ <exports symbol='xmlCharEncodingHandlerPtr' type='typedef'/>
+ <exports symbol='_xmlCharEncodingHandler' type='struct'/>
+ <exports symbol='xmlDelEncodingAlias' type='function'/>
+ <exports symbol='xmlGetEncodingAlias' type='function'/>
+ <exports symbol='xmlRegisterCharEncodingHandler' type='function'/>
+ <exports symbol='UTF8Toisolat1' type='function'/>
+ <exports symbol='xmlInitCharEncodingHandlers' type='function'/>
+ <exports symbol='xmlAddEncodingAlias' type='function'/>
+ <exports symbol='xmlCleanupEncodingAliases' type='function'/>
+ <exports symbol='xmlCharEncOutFunc' type='function'/>
+ <exports symbol='xmlParseCharEncoding' type='function'/>
+ <exports symbol='xmlCharEncodingInputFunc' type='function'/>
+ <exports symbol='xmlCleanupCharEncodingHandlers' type='function'/>
+ <exports symbol='xmlNewCharEncodingHandler' type='function'/>
+ <exports symbol='xmlCharEncodingOutputFunc' type='function'/>
+ <exports symbol='isolat1ToUTF8' type='function'/>
+ <exports symbol='xmlFindCharEncodingHandler' type='function'/>
+ <exports symbol='xmlCharEncInFunc' type='function'/>
+ <exports symbol='xmlGetCharEncodingHandler' type='function'/>
+ <exports symbol='xmlCharEncFirstLine' type='function'/>
+ <exports symbol='xmlDetectCharEncoding' type='function'/>
+ <exports symbol='xmlCharEncCloseFunc' type='function'/>
+ <exports symbol='xmlGetCharEncodingName' type='function'/>
+ </file>
+ <file name='entities'>
+ <summary>interface for the XML entities handling</summary>
+ <description>this module provides some of the entity API needed for the parser and applications. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_EXTERNAL_GENERAL_PARSED_ENTITY' type='enum'/>
+ <exports symbol='XML_INTERNAL_PARAMETER_ENTITY' type='enum'/>
+ <exports symbol='XML_INTERNAL_GENERAL_ENTITY' type='enum'/>
+ <exports symbol='XML_EXTERNAL_GENERAL_UNPARSED_ENTITY' type='enum'/>
+ <exports symbol='XML_INTERNAL_PREDEFINED_ENTITY' type='enum'/>
+ <exports symbol='XML_EXTERNAL_PARAMETER_ENTITY' type='enum'/>
+ <exports symbol='xmlEntityType' type='typedef'/>
+ <exports symbol='xmlEntitiesTable' type='typedef'/>
+ <exports symbol='xmlEntitiesTablePtr' type='typedef'/>
+ <exports symbol='_xmlEntity' type='struct'/>
+ <exports symbol='xmlAddDocEntity' type='function'/>
+ <exports symbol='xmlEncodeEntitiesReentrant' type='function'/>
+ <exports symbol='xmlCreateEntitiesTable' type='function'/>
+ <exports symbol='xmlGetDtdEntity' type='function'/>
+ <exports symbol='xmlAddDtdEntity' type='function'/>
+ <exports symbol='xmlCopyEntitiesTable' type='function'/>
+ <exports symbol='xmlFreeEntitiesTable' type='function'/>
+ <exports symbol='xmlGetParameterEntity' type='function'/>
+ <exports symbol='xmlDumpEntitiesTable' type='function'/>
+ <exports symbol='xmlDumpEntityDecl' type='function'/>
+ <exports symbol='xmlCleanupPredefinedEntities' type='function'/>
+ <exports symbol='xmlEncodeSpecialChars' type='function'/>
+ <exports symbol='xmlEncodeEntities' type='function'/>
+ <exports symbol='xmlGetDocEntity' type='function'/>
+ <exports symbol='xmlInitializePredefinedEntities' type='function'/>
+ <exports symbol='xmlGetPredefinedEntity' type='function'/>
+ </file>
+ <file name='globals'>
+ <summary>interface for all global variables of the library</summary>
+ <description>all the global variables and thread handling for those variables is handled by this module. The bottom of this file is automatically generated by build_glob.py based on the description file global.data </description>
+ <author>Gary Pennington &lt;Gary.Pennington@uk.sun.com&gt;, Daniel Veillard </author>
+ <exports symbol='xmlGlobalStatePtr' type='typedef'/>
+ <exports symbol='xmlGlobalState' type='typedef'/>
+ <exports symbol='_xmlGlobalState' type='struct'/>
+ <exports symbol='xmlRealloc' type='variable'/>
+ <exports symbol='xmlStructuredError' type='variable'/>
+ <exports symbol='xmlLastError' type='variable'/>
+ <exports symbol='xmlDefaultSAXLocator' type='variable'/>
+ <exports symbol='xmlTreeIndentString' type='variable'/>
+ <exports symbol='xmlMemStrdup' type='variable'/>
+ <exports symbol='htmlDefaultSAXHandler' type='variable'/>
+ <exports symbol='xmlIndentTreeOutput' type='variable'/>
+ <exports symbol='xmlSaveNoEmptyTags' type='variable'/>
+ <exports symbol='xmlDefaultBufferSize' type='variable'/>
+ <exports symbol='xmlRegisterNodeDefaultValue' type='variable'/>
+ <exports symbol='xmlKeepBlanksDefaultValue' type='variable'/>
+ <exports symbol='xmlGetWarningsDefaultValue' type='variable'/>
+ <exports symbol='xmlMallocAtomic' type='variable'/>
+ <exports symbol='xmlSubstituteEntitiesDefaultValue' type='variable'/>
+ <exports symbol='xmlBufferAllocScheme' type='variable'/>
+ <exports symbol='docbDefaultSAXHandler' type='variable'/>
+ <exports symbol='xmlGenericErrorContext' type='variable'/>
+ <exports symbol='oldXMLWDcompatibility' type='variable'/>
+ <exports symbol='xmlFree' type='variable'/>
+ <exports symbol='xmlLoadExtDtdDefaultValue' type='variable'/>
+ <exports symbol='xmlDeregisterNodeDefaultValue' type='variable'/>
+ <exports symbol='xmlGenericError' type='variable'/>
+ <exports symbol='xmlMalloc' type='variable'/>
+ <exports symbol='xmlLineNumbersDefaultValue' type='variable'/>
+ <exports symbol='xmlParserVersion' type='variable'/>
+ <exports symbol='xmlDoValidityCheckingDefaultValue' type='variable'/>
+ <exports symbol='xmlDefaultSAXHandler' type='variable'/>
+ <exports symbol='xmlPedanticParserDefaultValue' type='variable'/>
+ <exports symbol='xmlParserDebugEntities' type='variable'/>
+ <exports symbol='xmlThrDefSetStructuredErrorFunc' type='function'/>
+ <exports symbol='xmlCleanupGlobals' type='function'/>
+ <exports symbol='xmlThrDefRegisterNodeDefault' type='function'/>
+ <exports symbol='xmlInitializeGlobalState' type='function'/>
+ <exports symbol='xmlThrDefBufferAllocScheme' type='function'/>
+ <exports symbol='xmlThrDefSetGenericErrorFunc' type='function'/>
+ <exports symbol='xmlThrDefDoValidityCheckingDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefPedanticParserDefaultValue' type='function'/>
+ <exports symbol='xmlRegisterNodeDefault' type='function'/>
+ <exports symbol='xmlThrDefGetWarningsDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefDeregisterNodeDefault' type='function'/>
+ <exports symbol='xmlThrDefSubstituteEntitiesDefaultValue' type='function'/>
+ <exports symbol='xmlRegisterNodeFunc' type='function'/>
+ <exports symbol='xmlThrDefSaveNoEmptyTags' type='function'/>
+ <exports symbol='xmlThrDefIndentTreeOutput' type='function'/>
+ <exports symbol='xmlThrDefDefaultBufferSize' type='function'/>
+ <exports symbol='xmlDeregisterNodeDefault' type='function'/>
+ <exports symbol='xmlInitGlobals' type='function'/>
+ <exports symbol='xmlThrDefLoadExtDtdDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefLineNumbersDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefKeepBlanksDefaultValue' type='function'/>
+ <exports symbol='xmlDeregisterNodeFunc' type='function'/>
+ <exports symbol='xmlThrDefParserDebugEntities' type='function'/>
+ <exports symbol='xmlThrDefTreeIndentString' type='function'/>
+ </file>
+ <file name='hash'>
+ <summary>chained hash tables</summary>
+ <author>Bjorn Reese &lt;bjorn.reese@systematic.dk&gt; </author>
+ <exports symbol='xmlHashTable' type='typedef'/>
+ <exports symbol='xmlHashTablePtr' type='typedef'/>
+ <exports symbol='xmlHashScanFull' type='function'/>
+ <exports symbol='xmlHashDeallocator' type='function'/>
+ <exports symbol='xmlHashScannerFull' type='function'/>
+ <exports symbol='xmlHashCopy' type='function'/>
+ <exports symbol='xmlHashScanFull3' type='function'/>
+ <exports symbol='xmlHashUpdateEntry3' type='function'/>
+ <exports symbol='xmlHashScan' type='function'/>
+ <exports symbol='xmlHashLookup3' type='function'/>
+ <exports symbol='xmlHashLookup2' type='function'/>
+ <exports symbol='xmlHashUpdateEntry' type='function'/>
+ <exports symbol='xmlHashRemoveEntry' type='function'/>
+ <exports symbol='xmlHashRemoveEntry2' type='function'/>
+ <exports symbol='xmlHashQLookup3' type='function'/>
+ <exports symbol='xmlHashQLookup2' type='function'/>
+ <exports symbol='xmlHashAddEntry3' type='function'/>
+ <exports symbol='xmlHashScan3' type='function'/>
+ <exports symbol='xmlHashScanner' type='function'/>
+ <exports symbol='xmlHashAddEntry' type='function'/>
+ <exports symbol='xmlHashCopier' type='function'/>
+ <exports symbol='xmlHashCreate' type='function'/>
+ <exports symbol='xmlHashFree' type='function'/>
+ <exports symbol='xmlHashLookup' type='function'/>
+ <exports symbol='xmlHashQLookup' type='function'/>
+ <exports symbol='xmlHashUpdateEntry2' type='function'/>
+ <exports symbol='xmlHashAddEntry2' type='function'/>
+ <exports symbol='xmlHashRemoveEntry3' type='function'/>
+ <exports symbol='xmlHashSize' type='function'/>
+ </file>
+ <file name='list'>
+ <summary>lists interfaces</summary>
+ <description>this module implement the list support used in various place in the library. </description>
+ <author>Gary Pennington &lt;Gary.Pennington@uk.sun.com&gt; </author>
+ <exports symbol='xmlLink' type='typedef'/>
+ <exports symbol='xmlLinkPtr' type='typedef'/>
+ <exports symbol='xmlList' type='typedef'/>
+ <exports symbol='xmlListPtr' type='typedef'/>
+ <exports symbol='xmlListWalker' type='function'/>
+ <exports symbol='xmlListRemoveFirst' type='function'/>
+ <exports symbol='xmlListReverseWalk' type='function'/>
+ <exports symbol='xmlLinkGetData' type='function'/>
+ <exports symbol='xmlListInsert' type='function'/>
+ <exports symbol='xmlListEmpty' type='function'/>
+ <exports symbol='xmlListFront' type='function'/>
+ <exports symbol='xmlListSort' type='function'/>
+ <exports symbol='xmlListClear' type='function'/>
+ <exports symbol='xmlListDeallocator' type='function'/>
+ <exports symbol='xmlListMerge' type='function'/>
+ <exports symbol='xmlListCreate' type='function'/>
+ <exports symbol='xmlListAppend' type='function'/>
+ <exports symbol='xmlListRemoveAll' type='function'/>
+ <exports symbol='xmlListDup' type='function'/>
+ <exports symbol='xmlListReverse' type='function'/>
+ <exports symbol='xmlListRemoveLast' type='function'/>
+ <exports symbol='xmlListWalk' type='function'/>
+ <exports symbol='xmlListDataCompare' type='function'/>
+ <exports symbol='xmlListSize' type='function'/>
+ <exports symbol='xmlListPushFront' type='function'/>
+ <exports symbol='xmlListEnd' type='function'/>
+ <exports symbol='xmlListCopy' type='function'/>
+ <exports symbol='xmlListPopBack' type='function'/>
+ <exports symbol='xmlListPushBack' type='function'/>
+ <exports symbol='xmlListPopFront' type='function'/>
+ <exports symbol='xmlListDelete' type='function'/>
+ <exports symbol='xmlListReverseSearch' type='function'/>
+ <exports symbol='xmlListSearch' type='function'/>
+ </file>
+ <file name='nanoftp'>
+ <summary>minimal FTP implementation</summary>
+ <description>minimal FTP implementation allowing to fetch resources like external subset. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlNanoFTPScanProxy' type='function'/>
+ <exports symbol='xmlNanoFTPQuit' type='function'/>
+ <exports symbol='xmlNanoFTPClose' type='function'/>
+ <exports symbol='ftpDataCallback' type='function'/>
+ <exports symbol='xmlNanoFTPGetResponse' type='function'/>
+ <exports symbol='ftpListCallback' type='function'/>
+ <exports symbol='xmlNanoFTPCwd' type='function'/>
+ <exports symbol='xmlNanoFTPCloseConnection' type='function'/>
+ <exports symbol='xmlNanoFTPProxy' type='function'/>
+ <exports symbol='xmlNanoFTPInit' type='function'/>
+ <exports symbol='xmlNanoFTPConnectTo' type='function'/>
+ <exports symbol='xmlNanoFTPList' type='function'/>
+ <exports symbol='xmlNanoFTPUpdateURL' type='function'/>
+ <exports symbol='xmlNanoFTPOpen' type='function'/>
+ <exports symbol='xmlNanoFTPConnect' type='function'/>
+ <exports symbol='xmlNanoFTPDele' type='function'/>
+ <exports symbol='xmlNanoFTPGet' type='function'/>
+ <exports symbol='xmlNanoFTPGetSocket' type='function'/>
+ <exports symbol='xmlNanoFTPNewCtxt' type='function'/>
+ <exports symbol='xmlNanoFTPCheckResponse' type='function'/>
+ <exports symbol='xmlNanoFTPRead' type='function'/>
+ <exports symbol='xmlNanoFTPFreeCtxt' type='function'/>
+ <exports symbol='xmlNanoFTPCleanup' type='function'/>
+ <exports symbol='xmlNanoFTPGetConnection' type='function'/>
+ </file>
+ <file name='nanohttp'>
+ <summary>minimal HTTP implementation</summary>
+ <description>minimal HTTP implementation allowing to fetch resources like external subset. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlNanoHTTPSave' type='function'/>
+ <exports symbol='xmlNanoHTTPRedir' type='function'/>
+ <exports symbol='xmlNanoHTTPAuthHeader' type='function'/>
+ <exports symbol='xmlNanoHTTPFetch' type='function'/>
+ <exports symbol='xmlNanoHTTPInit' type='function'/>
+ <exports symbol='xmlNanoHTTPMimeType' type='function'/>
+ <exports symbol='xmlNanoHTTPClose' type='function'/>
+ <exports symbol='xmlNanoHTTPCleanup' type='function'/>
+ <exports symbol='xmlNanoHTTPMethod' type='function'/>
+ <exports symbol='xmlNanoHTTPRead' type='function'/>
+ <exports symbol='xmlNanoHTTPOpen' type='function'/>
+ <exports symbol='xmlNanoHTTPOpenRedir' type='function'/>
+ <exports symbol='xmlNanoHTTPMethodRedir' type='function'/>
+ <exports symbol='xmlNanoHTTPScanProxy' type='function'/>
+ <exports symbol='xmlNanoHTTPEncoding' type='function'/>
+ <exports symbol='xmlNanoHTTPReturnCode' type='function'/>
+ </file>
+ <file name='parser'>
+ <summary>the core parser module</summary>
+ <description>Interfaces, constants and types related to the XML parser </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_COMPLETE_ATTRS' type='macro'/>
+ <exports symbol='XML_SKIP_IDS' type='macro'/>
+ <exports symbol='XML_SAX2_MAGIC' type='macro'/>
+ <exports symbol='XML_DETECT_IDS' type='macro'/>
+ <exports symbol='XML_DEFAULT_VERSION' type='macro'/>
+ <exports symbol='XML_PARSE_NODICT' type='enum'/>
+ <exports symbol='XML_PARSER_ENTITY_DECL' type='enum'/>
+ <exports symbol='XML_PARSER_CONTENT' type='enum'/>
+ <exports symbol='XML_PARSE_NOBLANKS' type='enum'/>
+ <exports symbol='XML_PARSE_NOENT' type='enum'/>
+ <exports symbol='XML_PARSER_ENTITY_VALUE' type='enum'/>
+ <exports symbol='XML_PARSE_DTDLOAD' type='enum'/>
+ <exports symbol='XML_PARSER_SYSTEM_LITERAL' type='enum'/>
+ <exports symbol='XML_PARSER_PI' type='enum'/>
+ <exports symbol='XML_PARSE_NOWARNING' type='enum'/>
+ <exports symbol='XML_PARSE_NOERROR' type='enum'/>
+ <exports symbol='XML_PARSE_DTDATTR' type='enum'/>
+ <exports symbol='XML_PARSE_NSCLEAN' 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_END_TAG' type='enum'/>
+ <exports symbol='XML_PARSE_NOCDATA' type='enum'/>
+ <exports symbol='XML_PARSE_SAX1' type='enum'/>
+ <exports symbol='XML_PARSE_DTDVALID' type='enum'/>
+ <exports symbol='XML_PARSER_DTD' type='enum'/>
+ <exports symbol='XML_PARSER_MISC' type='enum'/>
+ <exports symbol='XML_PARSER_ATTRIBUTE_VALUE' type='enum'/>
+ <exports symbol='XML_PARSER_START' type='enum'/>
+ <exports symbol='XML_PARSE_PEDANTIC' type='enum'/>
+ <exports symbol='XML_PARSER_START_TAG' type='enum'/>
+ <exports symbol='XML_PARSER_IGNORE' type='enum'/>
+ <exports symbol='XML_PARSER_EOF' type='enum'/>
+ <exports symbol='XML_PARSER_COMMENT' type='enum'/>
+ <exports symbol='XML_PARSER_PUBLIC_LITERAL' type='enum'/>
+ <exports symbol='XML_PARSER_CDATA_SECTION' type='enum'/>
+ <exports symbol='XML_PARSE_XINCLUDE' type='enum'/>
+ <exports symbol='XML_PARSE_RECOVER' type='enum'/>
+ <exports symbol='xmlParserNodeInfoSeqPtr' type='typedef'/>
+ <exports symbol='xmlSAXHandlerV1Ptr' type='typedef'/>
+ <exports symbol='xmlSAXHandlerV1' type='typedef'/>
+ <exports symbol='xmlParserInputState' type='typedef'/>
+ <exports symbol='xmlParserOption' type='typedef'/>
+ <exports symbol='xmlParserNodeInfoPtr' type='typedef'/>
+ <exports symbol='xmlParserNodeInfo' type='typedef'/>
+ <exports symbol='xmlParserNodeInfoSeq' type='typedef'/>
+ <exports symbol='_xmlParserNodeInfo' type='struct'/>
+ <exports symbol='_xmlSAXHandler' type='struct'/>
+ <exports symbol='_xmlParserNodeInfoSeq' type='struct'/>
+ <exports symbol='_xmlParserCtxt' type='struct'/>
+ <exports symbol='_xmlSAXHandlerV1' type='struct'/>
+ <exports symbol='_xmlParserInput' type='struct'/>
+ <exports symbol='_xmlSAXLocator' type='struct'/>
+ <exports symbol='xmlParseDoc' type='function'/>
+ <exports symbol='xmlCtxtReadFile' type='function'/>
+ <exports symbol='xmlSetupParserForBuffer' type='function'/>
+ <exports symbol='xmlParseCtxtExternalEntity' type='function'/>
+ <exports symbol='xmlRecoverFile' type='function'/>
+ <exports symbol='attributeDeclSAXFunc' type='function'/>
+ <exports symbol='getEntitySAXFunc' type='function'/>
+ <exports symbol='xmlLineNumbersDefault' type='function'/>
+ <exports symbol='xmlGetExternalEntityLoader' type='function'/>
+ <exports symbol='elementDeclSAXFunc' type='function'/>
+ <exports symbol='startElementSAXFunc' type='function'/>
+ <exports symbol='charactersSAXFunc' type='function'/>
+ <exports symbol='xmlClearNodeInfoSeq' type='function'/>
+ <exports symbol='xmlParseChunk' type='function'/>
+ <exports symbol='xmlCtxtUseOptions' type='function'/>
+ <exports symbol='xmlParseEntity' type='function'/>
+ <exports symbol='xmlCreatePushParserCtxt' type='function'/>
+ <exports symbol='xmlParserAddNodeInfo' type='function'/>
+ <exports symbol='xmlCtxtReadFd' type='function'/>
+ <exports symbol='internalSubsetSAXFunc' type='function'/>
+ <exports symbol='xmlNewParserCtxt' type='function'/>
+ <exports symbol='endDocumentSAXFunc' type='function'/>
+ <exports symbol='xmlParseFile' type='function'/>
+ <exports symbol='unparsedEntityDeclSAXFunc' type='function'/>
+ <exports symbol='xmlParseDocument' type='function'/>
+ <exports symbol='xmlCreateIOParserCtxt' type='function'/>
+ <exports symbol='referenceSAXFunc' type='function'/>
+ <exports symbol='getParameterEntitySAXFunc' type='function'/>
+ <exports symbol='ignorableWhitespaceSAXFunc' type='function'/>
+ <exports symbol='xmlSAXParseDoc' type='function'/>
+ <exports symbol='xmlReadMemory' type='function'/>
+ <exports symbol='xmlInitNodeInfoSeq' type='function'/>
+ <exports symbol='xmlParseMemory' type='function'/>
+ <exports symbol='xmlSubstituteEntitiesDefault' type='function'/>
+ <exports symbol='endElementSAXFunc' type='function'/>
+ <exports symbol='xmlCtxtReadMemory' type='function'/>
+ <exports symbol='xmlParserFindNodeInfoIndex' type='function'/>
+ <exports symbol='xmlByteConsumed' type='function'/>
+ <exports symbol='xmlCtxtReset' type='function'/>
+ <exports symbol='xmlRecoverDoc' type='function'/>
+ <exports symbol='xmlNewIOInputStream' type='function'/>
+ <exports symbol='xmlKeepBlanksDefault' type='function'/>
+ <exports symbol='xmlReadFile' type='function'/>
+ <exports symbol='xmlParserInputRead' type='function'/>
+ <exports symbol='xmlInitParser' type='function'/>
+ <exports symbol='xmlGetFeaturesList' type='function'/>
+ <exports symbol='xmlCreateDocParserCtxt' type='function'/>
+ <exports symbol='xmlSetFeature' type='function'/>
+ <exports symbol='errorSAXFunc' type='function'/>
+ <exports symbol='xmlCtxtReadDoc' type='function'/>
+ <exports symbol='xmlSAXParseMemory' type='function'/>
+ <exports symbol='xmlRecoverMemory' type='function'/>
+ <exports symbol='xmlExternalEntityLoader' type='function'/>
+ <exports symbol='startElementNsSAX2Func' type='function'/>
+ <exports symbol='xmlSAXUserParseFile' type='function'/>
+ <exports symbol='hasInternalSubsetSAXFunc' type='function'/>
+ <exports symbol='fatalErrorSAXFunc' type='function'/>
+ <exports symbol='xmlSAXParseDTD' type='function'/>
+ <exports symbol='cdataBlockSAXFunc' type='function'/>
+ <exports symbol='xmlParserFindNodeInfo' type='function'/>
+ <exports symbol='xmlSAXParseFile' type='function'/>
+ <exports symbol='entityDeclSAXFunc' type='function'/>
+ <exports symbol='xmlLoadExternalEntity' type='function'/>
+ <exports symbol='xmlParserInputDeallocate' type='function'/>
+ <exports symbol='xmlCtxtReadIO' type='function'/>
+ <exports symbol='xmlStopParser' type='function'/>
+ <exports symbol='xmlReadFd' type='function'/>
+ <exports symbol='xmlSAXParseMemoryWithData' type='function'/>
+ <exports symbol='processingInstructionSAXFunc' type='function'/>
+ <exports symbol='xmlParseExtParsedEnt' type='function'/>
+ <exports symbol='xmlReadIO' type='function'/>
+ <exports symbol='xmlGetFeature' type='function'/>
+ <exports symbol='xmlParseBalancedChunkMemoryRecover' type='function'/>
+ <exports symbol='xmlIOParseDTD' type='function'/>
+ <exports symbol='xmlFreeParserCtxt' type='function'/>
+ <exports symbol='xmlReadDoc' type='function'/>
+ <exports symbol='xmlSAXUserParseMemory' type='function'/>
+ <exports symbol='xmlParseDTD' type='function'/>
+ <exports symbol='xmlParseBalancedChunkMemory' type='function'/>
+ <exports symbol='notationDeclSAXFunc' type='function'/>
+ <exports symbol='endElementNsSAX2Func' type='function'/>
+ <exports symbol='commentSAXFunc' type='function'/>
+ <exports symbol='xmlCleanupParser' type='function'/>
+ <exports symbol='attributeSAXFunc' type='function'/>
+ <exports symbol='hasExternalSubsetSAXFunc' type='function'/>
+ <exports symbol='isStandaloneSAXFunc' type='function'/>
+ <exports symbol='startDocumentSAXFunc' type='function'/>
+ <exports symbol='xmlInitParserCtxt' type='function'/>
+ <exports symbol='xmlClearParserCtxt' type='function'/>
+ <exports symbol='xmlParserInputGrow' type='function'/>
+ <exports symbol='xmlParseExternalEntity' type='function'/>
+ <exports symbol='xmlCtxtResetPush' type='function'/>
+ <exports symbol='externalSubsetSAXFunc' type='function'/>
+ <exports symbol='xmlSAXParseFileWithData' type='function'/>
+ <exports symbol='resolveEntitySAXFunc' type='function'/>
+ <exports symbol='setDocumentLocatorSAXFunc' type='function'/>
+ <exports symbol='xmlPedanticParserDefault' type='function'/>
+ <exports symbol='warningSAXFunc' type='function'/>
+ <exports symbol='xmlSAXParseEntity' type='function'/>
+ <exports symbol='xmlSetExternalEntityLoader' type='function'/>
+ </file>
+ <file name='parserInternals'>
+ <summary>internals routines exported by the parser.</summary>
+ <description>this module exports a number of internal parsing routines they are not really all intended for applications but can prove useful doing low level processing. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_SUBSTITUTE_REF' type='macro'/>
+ <exports symbol='IS_BLANK' type='macro'/>
+ <exports symbol='IS_EXTENDER_CH' type='macro'/>
+ <exports symbol='IS_BYTE_CHAR' type='macro'/>
+ <exports symbol='IS_DIGIT' type='macro'/>
+ <exports symbol='IS_PUBIDCHAR' type='macro'/>
+ <exports symbol='XML_SUBSTITUTE_PEREF' type='macro'/>
+ <exports symbol='MOVETO_ENDTAG' type='macro'/>
+ <exports symbol='IS_DIGIT_CH' type='macro'/>
+ <exports symbol='SKIP_EOL' type='macro'/>
+ <exports symbol='IS_EXTENDER' type='macro'/>
+ <exports symbol='IS_CHAR' type='macro'/>
+ <exports symbol='IS_COMBINING_CH' type='macro'/>
+ <exports symbol='IS_PUBIDCHAR_CH' type='macro'/>
+ <exports symbol='IS_LETTER_CH' type='macro'/>
+ <exports symbol='XML_SUBSTITUTE_NONE' type='macro'/>
+ <exports symbol='IS_BLANK_CH' type='macro'/>
+ <exports symbol='IS_COMBINING' type='macro'/>
+ <exports symbol='XML_MAX_NAMELEN' type='macro'/>
+ <exports symbol='IS_LETTER' type='macro'/>
+ <exports symbol='IS_BASECHAR' type='macro'/>
+ <exports symbol='INPUT_CHUNK' type='macro'/>
+ <exports symbol='IS_IDEOGRAPHIC' type='macro'/>
+ <exports symbol='MOVETO_STARTTAG' type='macro'/>
+ <exports symbol='IS_CHAR_CH' type='macro'/>
+ <exports symbol='XML_SUBSTITUTE_BOTH' type='macro'/>
+ <exports symbol='xmlStringTextNoenc' type='variable'/>
+ <exports symbol='xmlStringComment' type='variable'/>
+ <exports symbol='xmlStringText' type='variable'/>
+ <exports symbol='xmlParserMaxDepth' type='variable'/>
+ <exports symbol='xmlParseAttValue' type='function'/>
+ <exports symbol='xmlCreateMemoryParserCtxt' type='function'/>
+ <exports symbol='xmlParseAttributeListDecl' type='function'/>
+ <exports symbol='nodePop' type='function'/>
+ <exports symbol='xmlParseName' type='function'/>
+ <exports symbol='xmlParseEncName' type='function'/>
+ <exports symbol='xmlParseEntityRef' type='function'/>
+ <exports symbol='nodePush' type='function'/>
+ <exports symbol='xmlSwitchEncoding' type='function'/>
+ <exports symbol='xmlParseNotationDecl' type='function'/>
+ <exports symbol='xmlParseExternalSubset' type='function'/>
+ <exports symbol='xmlSwitchToEncoding' type='function'/>
+ <exports symbol='xmlParseMisc' type='function'/>
+ <exports symbol='xmlSwitchInputEncoding' type='function'/>
+ <exports symbol='xmlNewStringInputStream' type='function'/>
+ <exports symbol='xmlParseExternalID' type='function'/>
+ <exports symbol='xmlSkipBlankChars' type='function'/>
+ <exports symbol='xmlScanName' type='function'/>
+ <exports symbol='xmlParseElementDecl' type='function'/>
+ <exports symbol='xmlParseAttribute' type='function'/>
+ <exports symbol='xmlParseEndTag' type='function'/>
+ <exports symbol='xmlParseEncodingDecl' type='function'/>
+ <exports symbol='htmlInitAutoClose' type='function'/>
+ <exports symbol='xmlParseMarkupDecl' type='function'/>
+ <exports symbol='htmlCreateFileParserCtxt' type='function'/>
+ <exports symbol='xmlCreateEntityParserCtxt' type='function'/>
+ <exports symbol='inputPush' type='function'/>
+ <exports symbol='namePush' type='function'/>
+ <exports symbol='xmlStringLenDecodeEntities' type='function'/>
+ <exports symbol='xmlNewEntityInputStream' type='function'/>
+ <exports symbol='namePop' type='function'/>
+ <exports symbol='xmlSplitQName' type='function'/>
+ <exports symbol='xmlParseContent' type='function'/>
+ <exports symbol='xmlParseNamespace' type='function'/>
+ <exports symbol='xmlNewInputStream' type='function'/>
+ <exports symbol='xmlParserHandleReference' type='function'/>
+ <exports symbol='xmlNamespaceParseQName' type='function'/>
+ <exports symbol='xmlParsePITarget' type='function'/>
+ <exports symbol='xmlParseElementContentDecl' type='function'/>
+ <exports symbol='xmlNewInputFromFile' type='function'/>
+ <exports symbol='xmlDecodeEntities' type='function'/>
+ <exports symbol='xmlParserHandlePEReference' type='function'/>
+ <exports symbol='xmlPopInput' type='function'/>
+ <exports symbol='xmlParsePubidLiteral' type='function'/>
+ <exports symbol='xmlPushInput' type='function'/>
+ <exports symbol='xmlParseEntityValue' type='function'/>
+ <exports symbol='xmlStringDecodeEntities' type='function'/>
+ <exports symbol='xmlCreateFileParserCtxt' type='function'/>
+ <exports symbol='xmlParseCharRef' type='function'/>
+ <exports symbol='xmlParseVersionNum' type='function'/>
+ <exports symbol='xmlParseElement' type='function'/>
+ <exports symbol='xmlParseTextDecl' type='function'/>
+ <exports symbol='xmlParseXMLDecl' type='function'/>
+ <exports symbol='xmlEntityReferenceFunc' type='function'/>
+ <exports symbol='xmlParseElementMixedContentDecl' type='function'/>
+ <exports symbol='xmlCopyCharMultiByte' type='function'/>
+ <exports symbol='xmlParseElementChildrenContentDecl' type='function'/>
+ <exports symbol='xmlParseQuotedString' type='function'/>
+ <exports symbol='xmlParseCharData' type='function'/>
+ <exports symbol='xmlNamespaceParseNSDef' type='function'/>
+ <exports symbol='xmlParseCDSect' type='function'/>
+ <exports symbol='xmlParseVersionInfo' type='function'/>
+ <exports symbol='xmlStringCurrentChar' type='function'/>
+ <exports symbol='xmlParseEnumeratedType' type='function'/>
+ <exports symbol='xmlErrMemory' type='function'/>
+ <exports symbol='xmlHandleEntity' type='function'/>
+ <exports symbol='xmlCurrentChar' type='function'/>
+ <exports symbol='xmlNamespaceParseNCName' type='function'/>
+ <exports symbol='xmlParseNmtoken' type='function'/>
+ <exports symbol='xmlParseNotationType' type='function'/>
+ <exports symbol='xmlParserInputShrink' type='function'/>
+ <exports symbol='xmlParseReference' type='function'/>
+ <exports symbol='xmlSetEntityReferenceFunc' type='function'/>
+ <exports symbol='xmlFreeInputStream' type='function'/>
+ <exports symbol='xmlParsePEReference' type='function'/>
+ <exports symbol='xmlParseDefaultDecl' type='function'/>
+ <exports symbol='xmlParseDocTypeDecl' type='function'/>
+ <exports symbol='xmlIsLetter' type='function'/>
+ <exports symbol='xmlCheckLanguageID' type='function'/>
+ <exports symbol='xmlCopyChar' type='function'/>
+ <exports symbol='inputPop' type='function'/>
+ <exports symbol='xmlNextChar' type='function'/>
+ <exports symbol='xmlParseEnumerationType' type='function'/>
+ <exports symbol='xmlParseSDDecl' type='function'/>
+ <exports symbol='xmlParseAttributeType' type='function'/>
+ <exports symbol='xmlParseComment' type='function'/>
+ <exports symbol='xmlParsePI' type='function'/>
+ <exports symbol='xmlCreateURLParserCtxt' type='function'/>
+ <exports symbol='xmlParseStartTag' type='function'/>
+ <exports symbol='xmlParseSystemLiteral' type='function'/>
+ <exports symbol='xmlParseEntityDecl' type='function'/>
+ </file>
+ <file name='pattern'>
+ <summary>pattern expression handling</summary>
+ <description>allows to compile and test pattern expressions for nodes either in a tree or based on a parser state. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlPattern' type='typedef'/>
+ <exports symbol='xmlPatternPtr' type='typedef'/>
+ <exports symbol='xmlPatterncompile' type='function'/>
+ <exports symbol='xmlFreePattern' type='function'/>
+ <exports symbol='xmlPatternMatch' type='function'/>
+ <exports symbol='xmlFreePatternList' type='function'/>
+ </file>
+ <file name='relaxng'>
+ <summary>implementation of the Relax-NG validation</summary>
+ <description>implementation of the Relax-NG validation </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_RELAXNG_ERR_DUPID' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_VALELEM' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ATTRVALID' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_LISTELEM' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_LISTEXTRA' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ATTRNONS' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_EXTRADATA' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ELEMNONS' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ELEMEXTRANS' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_INTERNODATA' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_TYPECMP' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_VALUE' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_DATAELEM' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_INTERSEQ' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_LACKDATA' type='enum'/>
+ <exports symbol='XML_RELAXNGP_FREE_DOC' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ATTRNAME' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ELEMNOTEMPTY' type='enum'/>
+ <exports symbol='XML_RELAXNG_OK' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_DATATYPE' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ATTRWRONGNS' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_EXTRACONTENT' type='enum'/>
+ <exports symbol='XML_RELAXNGP_NONE' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ELEMWRONG' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_LISTEMPTY' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ATTREXTRANS' type='enum'/>
+ <exports symbol='XML_RELAXNGP_CRNG' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_TEXTWRONG' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_INVALIDATTR' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ELEMWRONGNS' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_CONTENTVALID' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_TYPEVAL' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_LIST' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_TYPE' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_NOELEM' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_MEMORY' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_ELEMNAME' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_NOGRAMMAR' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_NODEFINE' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_NOSTATE' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_INTEREXTRA' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_INTERNAL' type='enum'/>
+ <exports symbol='XML_RELAXNG_ERR_NOTELEM' type='enum'/>
+ <exports symbol='xmlRelaxNG' type='typedef'/>
+ <exports symbol='xmlRelaxNGParserCtxt' type='typedef'/>
+ <exports symbol='xmlRelaxNGParserCtxtPtr' type='typedef'/>
+ <exports symbol='xmlRelaxNGParserFlag' type='typedef'/>
+ <exports symbol='xmlRelaxNGValidErr' type='typedef'/>
+ <exports symbol='xmlRelaxNGValidCtxt' type='typedef'/>
+ <exports symbol='xmlRelaxNGValidCtxtPtr' type='typedef'/>
+ <exports symbol='xmlRelaxNGPtr' type='typedef'/>
+ <exports symbol='xmlRelaxNGFreeValidCtxt' type='function'/>
+ <exports symbol='xmlRelaxNGValidateFullElement' type='function'/>
+ <exports symbol='xmlRelaxNGNewDocParserCtxt' type='function'/>
+ <exports symbol='xmlRelaxNGSetValidErrors' type='function'/>
+ <exports symbol='xmlRelaxNGValidatePopElement' type='function'/>
+ <exports symbol='xmlRelaxNGFree' type='function'/>
+ <exports symbol='xmlRelaxNGNewParserCtxt' type='function'/>
+ <exports symbol='xmlRelaxNGValidateDoc' type='function'/>
+ <exports symbol='xmlRelaxNGGetParserErrors' type='function'/>
+ <exports symbol='xmlRelaxNGFreeParserCtxt' type='function'/>
+ <exports symbol='xmlRelaxNGSetParserErrors' type='function'/>
+ <exports symbol='xmlRelaxNGNewValidCtxt' type='function'/>
+ <exports symbol='xmlRelaxNGGetValidErrors' type='function'/>
+ <exports symbol='xmlRelaxNGNewMemParserCtxt' type='function'/>
+ <exports symbol='xmlRelaxNGDump' type='function'/>
+ <exports symbol='xmlRelaxNGValidityErrorFunc' type='function'/>
+ <exports symbol='xmlRelaxNGParse' type='function'/>
+ <exports symbol='xmlRelaxNGDumpTree' type='function'/>
+ <exports symbol='xmlRelaxNGValidatePushElement' type='function'/>
+ <exports symbol='xmlRelaxNGCleanupTypes' type='function'/>
+ <exports symbol='xmlRelaxNGValidatePushCData' type='function'/>
+ <exports symbol='xmlRelaxParserSetFlag' type='function'/>
+ <exports symbol='xmlRelaxNGValidityWarningFunc' type='function'/>
+ </file>
+ <file name='schemasInternals'>
+ <summary>internal interfaces for XML Schemas</summary>
+ <description>internal interfaces for the XML Schemas handling and schema validity checking </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_SCHEMAS_FACET_UNKNOWN' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ANYATTR_LAX' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ELEM_TOPLEVEL' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ELEM_ABSTRACT' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ANYATTR_STRICT' type='macro'/>
+ <exports symbol='XML_SCHEMAS_QUALIF_ATTR' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ELEM_FIXED' type='macro'/>
+ <exports symbol='XML_SCHEMAS_FACET_COLLAPSE' type='macro'/>
+ <exports symbol='XML_SCHEMAS_QUALIF_ELEM' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ELEM_NSDEFAULT' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ELEM_GLOBAL' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ATTR_NSDEFAULT' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ANYATTR_SKIP' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ELEM_DEFAULT' type='macro'/>
+ <exports symbol='XML_SCHEMAS_TYPE_MIXED' type='macro'/>
+ <exports symbol='XML_SCHEMAS_FACET_REPLACE' type='macro'/>
+ <exports symbol='XML_SCHEMAS_FACET_PRESERVE' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ELEM_REF' type='macro'/>
+ <exports symbol='XML_SCHEMAS_ELEM_NILLABLE' type='macro'/>
+ <exports symbol='XML_SCHEMA_TYPE_SIMPLE' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_GROUP' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_SEQUENCE' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_SIMPLE_CONTENT' type='enum'/>
+ <exports symbol='XML_SCHEMA_CONTENT_ELEMENTS' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_MININCLUSIVE' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_WHITESPACE' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_MINEXCLUSIVE' type='enum'/>
+ <exports symbol='XML_SCHEMA_CONTENT_MIXED' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_MAXEXCLUSIVE' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_FACET' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_COMPLEX' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_LIST' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_ATTRIBUTEGROUP' type='enum'/>
+ <exports symbol='XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_ALL' type='enum'/>
+ <exports symbol='XML_SCHEMA_CONTENT_EMPTY' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_BASIC' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_EXTENSION' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_CHOICE' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_MAXINCLUSIVE' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_ATTRIBUTE' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_UNION' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_ELEMENT' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_TOTALDIGITS' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_UR' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_NOTATION' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_LENGTH' type='enum'/>
+ <exports symbol='XML_SCHEMA_CONTENT_SIMPLE' type='enum'/>
+ <exports symbol='XML_SCHEMA_CONTENT_ANY' type='enum'/>
+ <exports symbol='XML_SCHEMA_CONTENT_BASIC' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_MINLENGTH' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_COMPLEX_CONTENT' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_FRACTIONDIGITS' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_PATTERN' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_MAXLENGTH' type='enum'/>
+ <exports symbol='XML_SCHEMA_FACET_ENUMERATION' type='enum'/>
+ <exports symbol='XML_SCHEMA_CONTENT_UNKNOWN' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_ANY' type='enum'/>
+ <exports symbol='XML_SCHEMA_TYPE_RESTRICTION' type='enum'/>
+ <exports symbol='xmlSchemaValPtr' type='typedef'/>
+ <exports symbol='xmlSchemaAttributeGroup' type='typedef'/>
+ <exports symbol='xmlSchemaAttributePtr' type='typedef'/>
+ <exports symbol='xmlSchemaElement' type='typedef'/>
+ <exports symbol='xmlSchemaElementPtr' type='typedef'/>
+ <exports symbol='xmlSchemaFacet' type='typedef'/>
+ <exports symbol='xmlSchemaType' type='typedef'/>
+ <exports symbol='xmlSchemaContentType' type='typedef'/>
+ <exports symbol='xmlSchemaTypeType' type='typedef'/>
+ <exports symbol='xmlSchemaAttribute' type='typedef'/>
+ <exports symbol='xmlSchemaFacetPtr' type='typedef'/>
+ <exports symbol='xmlSchemaNotation' type='typedef'/>
+ <exports symbol='xmlSchemaNotationPtr' type='typedef'/>
+ <exports symbol='xmlSchemaAnnot' type='typedef'/>
+ <exports symbol='xmlSchemaAnnotPtr' type='typedef'/>
+ <exports symbol='xmlSchemaVal' type='typedef'/>
+ <exports symbol='xmlSchemaTypePtr' type='typedef'/>
+ <exports symbol='xmlSchemaAttributeGroupPtr' type='typedef'/>
+ <exports symbol='_xmlSchemaAttribute' type='struct'/>
+ <exports symbol='_xmlSchemaType' type='struct'/>
+ <exports symbol='_xmlSchemaAttributeGroup' type='struct'/>
+ <exports symbol='_xmlSchemaNotation' type='struct'/>
+ <exports symbol='_xmlSchemaElement' type='struct'/>
+ <exports symbol='_xmlSchema' type='struct'/>
+ <exports symbol='_xmlSchemaAnnot' type='struct'/>
+ <exports symbol='_xmlSchemaFacet' type='struct'/>
+ <exports symbol='xmlSchemaFreeType' 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>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlMutex' type='typedef'/>
+ <exports symbol='xmlRMutex' type='typedef'/>
+ <exports symbol='xmlRMutexPtr' type='typedef'/>
+ <exports symbol='xmlMutexPtr' type='typedef'/>
+ <exports symbol='xmlFreeRMutex' type='function'/>
+ <exports symbol='xmlGetThreadId' type='function'/>
+ <exports symbol='xmlFreeMutex' type='function'/>
+ <exports symbol='xmlCleanupThreads' type='function'/>
+ <exports symbol='xmlMutexUnlock' type='function'/>
+ <exports symbol='xmlNewRMutex' type='function'/>
+ <exports symbol='xmlMutexLock' type='function'/>
+ <exports symbol='xmlIsMainThread' type='function'/>
+ <exports symbol='xmlRMutexUnlock' type='function'/>
+ <exports symbol='xmlGetGlobalState' type='function'/>
+ <exports symbol='xmlNewMutex' type='function'/>
+ <exports symbol='xmlRMutexLock' type='function'/>
+ <exports symbol='xmlInitThreads' type='function'/>
+ <exports symbol='xmlUnlockLibrary' type='function'/>
+ <exports symbol='xmlLockLibrary' type='function'/>
+ </file>
+ <file name='tree'>
+ <summary>interfaces for tree manipulation</summary>
+ <description>this module describes the structures found in an tree resulting from an XML or HTML parsing, as well as the API provided for various processing on that tree </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_LOCAL_NAMESPACE' type='macro'/>
+ <exports symbol='XML_GET_CONTENT' type='macro'/>
+ <exports symbol='XML_XML_NAMESPACE' type='macro'/>
+ <exports symbol='BASE_BUFFER_SIZE' type='macro'/>
+ <exports symbol='xmlRootNode' type='macro'/>
+ <exports symbol='xmlChildrenNode' type='macro'/>
+ <exports symbol='XML_GET_LINE' type='macro'/>
+ <exports symbol='XML_ATTRIBUTE_IMPLIED' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_IDREF' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_IDREFS' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_REQUIRED' type='enum'/>
+ <exports symbol='XML_XINCLUDE_END' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_NODE' type='enum'/>
+ <exports symbol='XML_ELEMENT_CONTENT_ELEMENT' type='enum'/>
+ <exports symbol='XML_ELEMENT_TYPE_ELEMENT' type='enum'/>
+ <exports symbol='XML_CDATA_SECTION_NODE' type='enum'/>
+ <exports symbol='XML_ELEMENT_NODE' type='enum'/>
+ <exports symbol='XML_ELEMENT_DECL' type='enum'/>
+ <exports symbol='XML_ELEMENT_CONTENT_SEQ' type='enum'/>
+ <exports symbol='XML_BUFFER_ALLOC_DOUBLEIT' type='enum'/>
+ <exports symbol='XML_DOCUMENT_FRAG_NODE' type='enum'/>
+ <exports symbol='XML_ELEMENT_TYPE_ANY' type='enum'/>
+ <exports symbol='XML_ELEMENT_CONTENT_ONCE' type='enum'/>
+ <exports symbol='XML_ELEMENT_CONTENT_PCDATA' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_FIXED' type='enum'/>
+ <exports symbol='XML_DOCUMENT_TYPE_NODE' type='enum'/>
+ <exports symbol='XML_ELEMENT_CONTENT_OPT' type='enum'/>
+ <exports symbol='XML_NAMESPACE_DECL' type='enum'/>
+ <exports symbol='XML_ENTITY_NODE' type='enum'/>
+ <exports symbol='XML_ELEMENT_TYPE_MIXED' type='enum'/>
+ <exports symbol='XML_XINCLUDE_START' type='enum'/>
+ <exports symbol='XML_TEXT_NODE' type='enum'/>
+ <exports symbol='XML_BUFFER_ALLOC_EXACT' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_ENTITIES' type='enum'/>
+ <exports symbol='XML_BUFFER_ALLOC_IMMUTABLE' type='enum'/>
+ <exports symbol='XML_NOTATION_NODE' type='enum'/>
+ <exports symbol='XML_ENTITY_REF_NODE' type='enum'/>
+ <exports symbol='XML_ELEMENT_TYPE_EMPTY' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_ENUMERATION' type='enum'/>
+ <exports symbol='XML_HTML_DOCUMENT_NODE' type='enum'/>
+ <exports symbol='XML_ELEMENT_TYPE_UNDEFINED' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_NONE' type='enum'/>
+ <exports symbol='XML_DOCB_DOCUMENT_NODE' type='enum'/>
+ <exports symbol='XML_COMMENT_NODE' type='enum'/>
+ <exports symbol='XML_DOCUMENT_NODE' type='enum'/>
+ <exports symbol='XML_DTD_NODE' type='enum'/>
+ <exports symbol='XML_ELEMENT_CONTENT_OR' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_NMTOKEN' type='enum'/>
+ <exports symbol='XML_PI_NODE' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_NMTOKENS' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_NOTATION' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_ENTITY' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_DECL' type='enum'/>
+ <exports symbol='XML_ENTITY_DECL' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_ID' type='enum'/>
+ <exports symbol='XML_ATTRIBUTE_CDATA' type='enum'/>
+ <exports symbol='XML_ELEMENT_CONTENT_MULT' type='enum'/>
+ <exports symbol='XML_ELEMENT_CONTENT_PLUS' type='enum'/>
+ <exports symbol='xmlNs' type='typedef'/>
+ <exports symbol='xmlBufferPtr' type='typedef'/>
+ <exports symbol='xmlEnumerationPtr' type='typedef'/>
+ <exports symbol='xmlBuffer' type='typedef'/>
+ <exports symbol='xmlSAXLocatorPtr' type='typedef'/>
+ <exports symbol='xmlParserInput' type='typedef'/>
+ <exports symbol='xmlElement' type='typedef'/>
+ <exports symbol='xmlElementType' type='typedef'/>
+ <exports symbol='xmlBufferAllocationScheme' type='typedef'/>
+ <exports symbol='xmlRef' type='typedef'/>
+ <exports symbol='xmlDocPtr' type='typedef'/>
+ <exports symbol='xmlElementContent' type='typedef'/>
+ <exports symbol='xmlAttributeType' type='typedef'/>
+ <exports symbol='xmlRefPtr' type='typedef'/>
+ <exports symbol='xmlParserInputBuffer' type='typedef'/>
+ <exports symbol='xmlNode' type='typedef'/>
+ <exports symbol='xmlDoc' type='typedef'/>
+ <exports symbol='xmlParserCtxt' type='typedef'/>
+ <exports symbol='xmlDtdPtr' type='typedef'/>
+ <exports symbol='xmlAttributeDefault' type='typedef'/>
+ <exports symbol='xmlNotation' type='typedef'/>
+ <exports symbol='xmlNsType' type='typedef'/>
+ <exports symbol='xmlEntity' type='typedef'/>
+ <exports symbol='xmlAttr' type='typedef'/>
+ <exports symbol='xmlAttributePtr' type='typedef'/>
+ <exports symbol='xmlElementTypeVal' type='typedef'/>
+ <exports symbol='xmlElementPtr' type='typedef'/>
+ <exports symbol='xmlElementContentOccur' type='typedef'/>
+ <exports symbol='xmlIDPtr' type='typedef'/>
+ <exports symbol='xmlAttrPtr' type='typedef'/>
+ <exports symbol='xmlParserInputPtr' type='typedef'/>
+ <exports symbol='xmlID' type='typedef'/>
+ <exports symbol='xmlParserCtxtPtr' type='typedef'/>
+ <exports symbol='xmlEntityPtr' type='typedef'/>
+ <exports symbol='xmlEnumeration' type='typedef'/>
+ <exports symbol='xmlElementContentType' type='typedef'/>
+ <exports symbol='xmlNsPtr' type='typedef'/>
+ <exports symbol='xmlParserInputBufferPtr' type='typedef'/>
+ <exports symbol='xmlSAXHandler' type='typedef'/>
+ <exports symbol='xmlOutputBuffer' type='typedef'/>
+ <exports symbol='xmlSAXLocator' type='typedef'/>
+ <exports symbol='xmlElementContentPtr' type='typedef'/>
+ <exports symbol='xmlNotationPtr' type='typedef'/>
+ <exports symbol='xmlNodePtr' type='typedef'/>
+ <exports symbol='xmlDtd' type='typedef'/>
+ <exports symbol='xmlAttribute' type='typedef'/>
+ <exports symbol='xmlOutputBufferPtr' type='typedef'/>
+ <exports symbol='xmlSAXHandlerPtr' type='typedef'/>
+ <exports symbol='_xmlBuffer' type='struct'/>
+ <exports symbol='_xmlAttribute' type='struct'/>
+ <exports symbol='_xmlEnumeration' type='struct'/>
+ <exports symbol='_xmlNs' type='struct'/>
+ <exports symbol='_xmlNode' type='struct'/>
+ <exports symbol='_xmlID' type='struct'/>
+ <exports symbol='_xmlElement' type='struct'/>
+ <exports symbol='_xmlDoc' type='struct'/>
+ <exports symbol='_xmlNotation' type='struct'/>
+ <exports symbol='_xmlDtd' type='struct'/>
+ <exports symbol='_xmlRef' type='struct'/>
+ <exports symbol='_xmlAttr' type='struct'/>
+ <exports symbol='_xmlElementContent' type='struct'/>
+ <exports symbol='xmlNodeSetContentLen' type='function'/>
+ <exports symbol='xmlDocCopyNode' type='function'/>
+ <exports symbol='xmlAddSibling' type='function'/>
+ <exports symbol='xmlGetProp' type='function'/>
+ <exports symbol='xmlNewNsPropEatName' type='function'/>
+ <exports symbol='xmlSearchNs' type='function'/>
+ <exports symbol='xmlStringGetNodeList' type='function'/>
+ <exports symbol='xmlBufferWriteQuotedString' type='function'/>
+ <exports symbol='xmlCopyProp' type='function'/>
+ <exports symbol='xmlNodeListGetString' type='function'/>
+ <exports symbol='xmlNewDocRawNode' type='function'/>
+ <exports symbol='xmlNodeGetBase' type='function'/>
+ <exports symbol='xmlGetLineNo' type='function'/>
+ <exports symbol='xmlBufferEmpty' type='function'/>
+ <exports symbol='xmlSetDocCompressMode' type='function'/>
+ <exports symbol='xmlBuildQName' type='function'/>
+ <exports symbol='xmlCopyNode' type='function'/>
+ <exports symbol='xmlUnlinkNode' type='function'/>
+ <exports symbol='xmlSplitQName3' type='function'/>
+ <exports symbol='xmlRemoveProp' type='function'/>
+ <exports symbol='xmlDocSetRootElement' type='function'/>
+ <exports symbol='xmlNodeSetName' type='function'/>
+ <exports symbol='xmlNewDocFragment' type='function'/>
+ <exports symbol='xmlDocGetRootElement' type='function'/>
+ <exports symbol='xmlNodeAddContentLen' type='function'/>
+ <exports symbol='xmlValidateName' type='function'/>
+ <exports symbol='xmlAddChild' type='function'/>
+ <exports symbol='xmlGetDocCompressMode' type='function'/>
+ <exports symbol='xmlSetBufferAllocationScheme' type='function'/>
+ <exports symbol='xmlGetNsProp' type='function'/>
+ <exports symbol='xmlNewDocProp' type='function'/>
+ <exports symbol='xmlFreeNode' type='function'/>
+ <exports symbol='xmlFreeNs' type='function'/>
+ <exports symbol='xmlBufferContent' type='function'/>
+ <exports symbol='xmlAddPrevSibling' type='function'/>
+ <exports symbol='xmlNodeGetLang' type='function'/>
+ <exports symbol='xmlBufferAddHead' type='function'/>
+ <exports symbol='xmlSetListDoc' type='function'/>
+ <exports symbol='xmlNewPI' type='function'/>
+ <exports symbol='xmlValidateNMToken' type='function'/>
+ <exports symbol='xmlBufferSetAllocationScheme' type='function'/>
+ <exports symbol='xmlGetCompressMode' type='function'/>
+ <exports symbol='xmlNewChild' type='function'/>
+ <exports symbol='xmlNodeListGetRawString' type='function'/>
+ <exports symbol='xmlStringLenGetNodeList' type='function'/>
+ <exports symbol='xmlSaveFormatFile' type='function'/>
+ <exports symbol='xmlSaveFormatFileEnc' type='function'/>
+ <exports symbol='xmlGetNodePath' type='function'/>
+ <exports symbol='xmlElemDump' type='function'/>
+ <exports symbol='xmlCopyPropList' type='function'/>
+ <exports symbol='xmlBufferWriteCHAR' type='function'/>
+ <exports symbol='xmlSaveFormatFileTo' type='function'/>
+ <exports symbol='xmlDocFormatDump' type='function'/>
+ <exports symbol='xmlGetIntSubset' type='function'/>
+ <exports symbol='xmlNodeSetSpacePreserve' type='function'/>
+ <exports symbol='xmlHasProp' type='function'/>
+ <exports symbol='xmlNodeBufGetContent' type='function'/>
+ <exports symbol='xmlBufferWriteChar' type='function'/>
+ <exports symbol='xmlBufferFree' type='function'/>
+ <exports symbol='xmlReplaceNode' type='function'/>
+ <exports symbol='xmlNewNode' type='function'/>
+ <exports symbol='xmlBufferCat' type='function'/>
+ <exports symbol='xmlSaveFileTo' type='function'/>
+ <exports symbol='xmlCreateIntSubset' type='function'/>
+ <exports symbol='xmlNewTextChild' type='function'/>
+ <exports symbol='xmlNewDoc' type='function'/>
+ <exports symbol='xmlNodeSetContent' type='function'/>
+ <exports symbol='xmlBufferAdd' type='function'/>
+ <exports symbol='xmlNewCharRef' type='function'/>
+ <exports symbol='xmlNodeDumpOutput' type='function'/>
+ <exports symbol='xmlCopyNamespace' type='function'/>
+ <exports symbol='xmlSearchNsByHref' type='function'/>
+ <exports symbol='xmlCopyNamespaceList' type='function'/>
+ <exports symbol='xmlNewNodeEatName' type='function'/>
+ <exports symbol='xmlTextMerge' type='function'/>
+ <exports symbol='xmlSplitQName2' type='function'/>
+ <exports symbol='xmlUnsetProp' type='function'/>
+ <exports symbol='xmlBufferResize' type='function'/>
+ <exports symbol='xmlValidateQName' type='function'/>
+ <exports symbol='xmlNodeSetBase' type='function'/>
+ <exports symbol='xmlNewComment' type='function'/>
+ <exports symbol='xmlValidateNCName' type='function'/>
+ <exports symbol='xmlBufferLength' type='function'/>
+ <exports symbol='xmlNewDocComment' type='function'/>
+ <exports symbol='xmlNewText' type='function'/>
+ <exports symbol='xmlNodeDump' type='function'/>
+ <exports symbol='xmlGetBufferAllocationScheme' type='function'/>
+ <exports symbol='xmlSaveFile' type='function'/>
+ <exports symbol='xmlSetNs' type='function'/>
+ <exports symbol='xmlBufferCreateSize' type='function'/>
+ <exports symbol='xmlNewNs' type='function'/>
+ <exports symbol='xmlHasNsProp' type='function'/>
+ <exports symbol='xmlNewCDataBlock' type='function'/>
+ <exports symbol='xmlSetCompressMode' type='function'/>
+ <exports symbol='xmlSetTreeDoc' type='function'/>
+ <exports symbol='xmlAttrSerializeTxtContent' type='function'/>
+ <exports symbol='xmlBufferCreate' type='function'/>
+ <exports symbol='xmlCopyNodeList' type='function'/>
+ <exports symbol='xmlNewDocNodeEatName' type='function'/>
+ <exports symbol='xmlCopyDtd' type='function'/>
+ <exports symbol='xmlNewDocText' type='function'/>
+ <exports symbol='xmlAddChildList' type='function'/>
+ <exports symbol='xmlBufferCreateStatic' type='function'/>
+ <exports symbol='xmlFreePropList' type='function'/>
+ <exports symbol='xmlNodeAddContent' type='function'/>
+ <exports symbol='xmlUnsetNsProp' type='function'/>
+ <exports symbol='xmlNewReference' type='function'/>
+ <exports symbol='xmlReconciliateNs' type='function'/>
+ <exports symbol='xmlBufferCCat' type='function'/>
+ <exports symbol='xmlAddNextSibling' type='function'/>
+ <exports symbol='xmlGetNsList' type='function'/>
+ <exports symbol='xmlBufferGrow' type='function'/>
+ <exports symbol='xmlNodeIsText' type='function'/>
+ <exports symbol='xmlSetProp' type='function'/>
+ <exports symbol='xmlNewGlobalNs' type='function'/>
+ <exports symbol='xmlBufferDump' type='function'/>
+ <exports symbol='xmlNodeGetContent' type='function'/>
+ <exports symbol='xmlIsXHTML' type='function'/>
+ <exports symbol='xmlNodeSetLang' type='function'/>
+ <exports symbol='xmlDocDumpMemoryEnc' type='function'/>
+ <exports symbol='xmlFreeDtd' type='function'/>
+ <exports symbol='xmlFreeNodeList' type='function'/>
+ <exports symbol='xmlFreeDoc' type='function'/>
+ <exports symbol='xmlDocDumpMemory' type='function'/>
+ <exports symbol='xmlNewTextLen' type='function'/>
+ <exports symbol='xmlCopyDoc' type='function'/>
+ <exports symbol='xmlNewDocNode' type='function'/>
+ <exports symbol='xmlDocDump' type='function'/>
+ <exports symbol='xmlSaveFileEnc' type='function'/>
+ <exports symbol='xmlFreeProp' type='function'/>
+ <exports symbol='xmlSetNsProp' type='function'/>
+ <exports symbol='xmlIsBlankNode' type='function'/>
+ <exports symbol='xmlDocDumpFormatMemory' type='function'/>
+ <exports symbol='xmlGetNoNsProp' type='function'/>
+ <exports symbol='xmlDocDumpFormatMemoryEnc' type='function'/>
+ <exports symbol='xmlNewProp' type='function'/>
+ <exports symbol='xmlTextConcat' type='function'/>
+ <exports symbol='xmlNodeGetSpacePreserve' type='function'/>
+ <exports symbol='xmlNewDocTextLen' type='function'/>
+ <exports symbol='xmlNewDtd' type='function'/>
+ <exports symbol='xmlBufferShrink' type='function'/>
+ <exports symbol='xmlNewNsProp' type='function'/>
+ <exports symbol='xmlFreeNsList' type='function'/>
+ <exports symbol='xmlGetLastChild' type='function'/>
+ </file>
+ <file name='uri'>
+ <summary>library of generic URI related routines</summary>
+ <description>library of generic URI related routines Implements RFC 2396 </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlURI' type='typedef'/>
+ <exports symbol='xmlURIPtr' type='typedef'/>
+ <exports symbol='_xmlURI' type='struct'/>
+ <exports symbol='xmlNormalizeURIPath' type='function'/>
+ <exports symbol='xmlPrintURI' type='function'/>
+ <exports symbol='xmlURIUnescapeString' type='function'/>
+ <exports symbol='xmlParseURI' type='function'/>
+ <exports symbol='xmlCreateURI' type='function'/>
+ <exports symbol='xmlURIEscapeStr' type='function'/>
+ <exports symbol='xmlCanonicPath' type='function'/>
+ <exports symbol='xmlFreeURI' type='function'/>
+ <exports symbol='xmlParseURIReference' type='function'/>
+ <exports symbol='xmlSaveUri' type='function'/>
+ <exports symbol='xmlURIEscape' type='function'/>
+ <exports symbol='xmlBuildURI' type='function'/>
+ </file>
+ <file name='valid'>
+ <summary>The DTD validation</summary>
+ <description>API for the DTD handling and the validity checking </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlElementTable' type='typedef'/>
+ <exports symbol='xmlValidStatePtr' type='typedef'/>
+ <exports symbol='xmlIDTablePtr' type='typedef'/>
+ <exports symbol='xmlNotationTablePtr' type='typedef'/>
+ <exports symbol='xmlAttributeTable' type='typedef'/>
+ <exports symbol='xmlElementTablePtr' type='typedef'/>
+ <exports symbol='xmlRefTablePtr' type='typedef'/>
+ <exports symbol='xmlNotationTable' type='typedef'/>
+ <exports symbol='xmlRefTable' type='typedef'/>
+ <exports symbol='xmlValidState' type='typedef'/>
+ <exports symbol='xmlValidCtxt' type='typedef'/>
+ <exports symbol='xmlAttributeTablePtr' type='typedef'/>
+ <exports symbol='xmlIDTable' type='typedef'/>
+ <exports symbol='xmlValidCtxtPtr' type='typedef'/>
+ <exports symbol='_xmlValidCtxt' type='struct'/>
+ <exports symbol='xmlFreeNotationTable' type='function'/>
+ <exports symbol='xmlValidateNameValue' type='function'/>
+ <exports symbol='xmlValidateElement' type='function'/>
+ <exports symbol='xmlAddRef' type='function'/>
+ <exports symbol='xmlDumpAttributeDecl' type='function'/>
+ <exports symbol='xmlValidateDocumentFinal' type='function'/>
+ <exports symbol='xmlValidateDtdFinal' type='function'/>
+ <exports symbol='xmlDumpAttributeTable' type='function'/>
+ <exports symbol='xmlCreateEnumeration' type='function'/>
+ <exports symbol='xmlValidateOneAttribute' type='function'/>
+ <exports symbol='xmlValidGetValidElements' type='function'/>
+ <exports symbol='xmlDumpNotationTable' type='function'/>
+ <exports symbol='xmlFreeAttributeTable' type='function'/>
+ <exports symbol='xmlIsID' type='function'/>
+ <exports symbol='xmlGetDtdQAttrDesc' type='function'/>
+ <exports symbol='xmlDumpNotationDecl' type='function'/>
+ <exports symbol='xmlValidityErrorFunc' type='function'/>
+ <exports symbol='xmlGetDtdQElementDesc' type='function'/>
+ <exports symbol='xmlGetRefs' type='function'/>
+ <exports symbol='xmlCopyNotationTable' type='function'/>
+ <exports symbol='xmlValidateDocument' type='function'/>
+ <exports symbol='xmlValidGetPotentialChildren' type='function'/>
+ <exports symbol='xmlAddNotationDecl' type='function'/>
+ <exports symbol='xmlValidateElementDecl' type='function'/>
+ <exports symbol='xmlAddAttributeDecl' type='function'/>
+ <exports symbol='xmlGetID' type='function'/>
+ <exports symbol='xmlAddID' type='function'/>
+ <exports symbol='xmlValidateAttributeDecl' type='function'/>
+ <exports symbol='xmlSprintfElementContent' type='function'/>
+ <exports symbol='xmlValidateOneElement' type='function'/>
+ <exports symbol='xmlValidateNmtokenValue' type='function'/>
+ <exports symbol='xmlRemoveRef' type='function'/>
+ <exports symbol='xmlValidateNmtokensValue' type='function'/>
+ <exports symbol='xmlAddElementDecl' type='function'/>
+ <exports symbol='xmlSnprintfElementContent' type='function'/>
+ <exports symbol='xmlValidateOneNamespace' type='function'/>
+ <exports symbol='xmlValidatePushElement' type='function'/>
+ <exports symbol='xmlIsRef' type='function'/>
+ <exports symbol='xmlDumpElementTable' type='function'/>
+ <exports symbol='xmlCopyElementTable' type='function'/>
+ <exports symbol='xmlFreeRefTable' type='function'/>
+ <exports symbol='xmlFreeElementContent' type='function'/>
+ <exports symbol='xmlRemoveID' type='function'/>
+ <exports symbol='xmlFreeElementTable' type='function'/>
+ <exports symbol='xmlFreeIDTable' type='function'/>
+ <exports symbol='xmlFreeValidCtxt' type='function'/>
+ <exports symbol='xmlCopyAttributeTable' type='function'/>
+ <exports symbol='xmlCopyElementContent' type='function'/>
+ <exports symbol='xmlValidateAttributeValue' type='function'/>
+ <exports symbol='xmlValidCtxtNormalizeAttributeValue' type='function'/>
+ <exports symbol='xmlValidityWarningFunc' type='function'/>
+ <exports symbol='xmlValidatePopElement' type='function'/>
+ <exports symbol='xmlFreeEnumeration' type='function'/>
+ <exports symbol='xmlValidateNamesValue' type='function'/>
+ <exports symbol='xmlCopyEnumeration' type='function'/>
+ <exports symbol='xmlGetDtdAttrDesc' type='function'/>
+ <exports symbol='xmlValidateDtd' type='function'/>
+ <exports symbol='xmlNewValidCtxt' type='function'/>
+ <exports symbol='xmlIsMixedElement' type='function'/>
+ <exports symbol='xmlDumpElementDecl' type='function'/>
+ <exports symbol='xmlValidNormalizeAttributeValue' type='function'/>
+ <exports symbol='xmlValidBuildContentModel' type='function'/>
+ <exports symbol='xmlValidateNotationUse' type='function'/>
+ <exports symbol='xmlValidateRoot' type='function'/>
+ <exports symbol='xmlValidateNotationDecl' type='function'/>
+ <exports symbol='xmlNewElementContent' type='function'/>
+ <exports symbol='xmlGetDtdElementDesc' type='function'/>
+ <exports symbol='xmlGetDtdNotationDesc' type='function'/>
+ <exports symbol='xmlValidatePushCData' type='function'/>
+ </file>
+ <file name='xinclude'>
+ <summary>implementation of XInclude</summary>
+ <description>API to handle XInclude processing, implements the World Wide Web Consortium Last Call Working Draft 10 November 2003</description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XINCLUDE_PARSE_TEXT' type='macro'/>
+ <exports symbol='XINCLUDE_PARSE_XPOINTER' type='macro'/>
+ <exports symbol='XINCLUDE_NODE' type='macro'/>
+ <exports symbol='XINCLUDE_PARSE_XML' type='macro'/>
+ <exports symbol='XINCLUDE_HREF' type='macro'/>
+ <exports symbol='XINCLUDE_PARSE_ENCODING' type='macro'/>
+ <exports symbol='XINCLUDE_FALLBACK' type='macro'/>
+ <exports symbol='XINCLUDE_NS' type='macro'/>
+ <exports symbol='XINCLUDE_PARSE' type='macro'/>
+ <exports symbol='XINCLUDE_OLD_NS' type='macro'/>
+ <exports symbol='xmlXIncludeCtxt' type='typedef'/>
+ <exports symbol='xmlXIncludeCtxtPtr' type='typedef'/>
+ <exports symbol='xmlXIncludeProcessTree' type='function'/>
+ <exports symbol='xmlXIncludeProcessNode' type='function'/>
+ <exports symbol='xmlXIncludeFreeContext' type='function'/>
+ <exports symbol='xmlXIncludeSetFlags' type='function'/>
+ <exports symbol='xmlXIncludeProcess' type='function'/>
+ <exports symbol='xmlXIncludeNewContext' type='function'/>
+ <exports symbol='xmlXIncludeProcessTreeFlags' type='function'/>
+ <exports symbol='xmlXIncludeProcessFlags' type='function'/>
+ </file>
+ <file name='xlink'>
+ <summary>unfinished XLink detection module</summary>
+ <description>unfinished XLink detection module </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XLINK_ACTUATE_NONE' type='enum'/>
+ <exports symbol='XLINK_SHOW_NEW' type='enum'/>
+ <exports symbol='XLINK_TYPE_EXTENDED' type='enum'/>
+ <exports symbol='XLINK_TYPE_NONE' type='enum'/>
+ <exports symbol='XLINK_SHOW_REPLACE' type='enum'/>
+ <exports symbol='XLINK_ACTUATE_ONREQUEST' type='enum'/>
+ <exports symbol='XLINK_SHOW_NONE' type='enum'/>
+ <exports symbol='XLINK_TYPE_EXTENDED_SET' type='enum'/>
+ <exports symbol='XLINK_ACTUATE_AUTO' type='enum'/>
+ <exports symbol='XLINK_SHOW_EMBED' type='enum'/>
+ <exports symbol='XLINK_TYPE_SIMPLE' type='enum'/>
+ <exports symbol='xlinkHandler' type='typedef'/>
+ <exports symbol='xlinkRole' type='typedef'/>
+ <exports symbol='xlinkShow' type='typedef'/>
+ <exports symbol='xlinkHandlerPtr' type='typedef'/>
+ <exports symbol='xlinkHRef' type='typedef'/>
+ <exports symbol='xlinkType' type='typedef'/>
+ <exports symbol='xlinkTitle' type='typedef'/>
+ <exports symbol='xlinkActuate' type='typedef'/>
+ <exports symbol='_xlinkHandler' type='struct'/>
+ <exports symbol='xlinkNodeDetectFunc' type='function'/>
+ <exports symbol='xlinkGetDefaultHandler' type='function'/>
+ <exports symbol='xlinkIsLink' type='function'/>
+ <exports symbol='xlinkSimpleLinkFunk' type='function'/>
+ <exports symbol='xlinkSetDefaultHandler' type='function'/>
+ <exports symbol='xlinkSetDefaultDetect' type='function'/>
+ <exports symbol='xlinkExtendedLinkFunk' type='function'/>
+ <exports symbol='xlinkExtendedLinkSetFunk' type='function'/>
+ <exports symbol='xlinkGetDefaultDetect' type='function'/>
+ </file>
+ <file name='xmlIO'>
+ <summary>interface for the I/O interfaces used by the parser</summary>
+ <description>interface for the I/O interfaces used by the parser </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='_xmlParserInputBuffer' type='struct'/>
+ <exports symbol='_xmlOutputBuffer' type='struct'/>
+ <exports symbol='xmlIOHTTPRead' type='function'/>
+ <exports symbol='xmlInputMatchCallback' type='function'/>
+ <exports symbol='xmlRegisterDefaultOutputCallbacks' type='function'/>
+ <exports symbol='xmlFileClose' type='function'/>
+ <exports symbol='xmlOutputMatchCallback' type='function'/>
+ <exports symbol='xmlIOFTPRead' type='function'/>
+ <exports symbol='xmlRegisterHTTPPostCallbacks' type='function'/>
+ <exports symbol='xmlIOFTPOpen' type='function'/>
+ <exports symbol='xmlIOFTPClose' type='function'/>
+ <exports symbol='xmlFileOpen' type='function'/>
+ <exports symbol='xmlOutputBufferCreateFile' type='function'/>
+ <exports symbol='xmlCheckFilename' type='function'/>
+ <exports symbol='xmlOutputOpenCallback' type='function'/>
+ <exports symbol='xmlParserInputBufferCreateFilename' type='function'/>
+ <exports symbol='xmlOutputBufferClose' type='function'/>
+ <exports symbol='xmlParserInputBufferCreateFd' type='function'/>
+ <exports symbol='xmlOutputBufferCreateIO' type='function'/>
+ <exports symbol='xmlOutputWriteCallback' type='function'/>
+ <exports symbol='xmlOutputBufferFlush' type='function'/>
+ <exports symbol='xmlCheckHTTPInput' type='function'/>
+ <exports symbol='xmlRegisterOutputCallbacks' type='function'/>
+ <exports symbol='xmlParserInputBufferCreateMem' type='function'/>
+ <exports symbol='xmlIOFTPMatch' type='function'/>
+ <exports symbol='xmlRegisterInputCallbacks' type='function'/>
+ <exports symbol='xmlFreeParserInputBuffer' type='function'/>
+ <exports symbol='xmlRegisterDefaultInputCallbacks' type='function'/>
+ <exports symbol='xmlParserInputBufferGrow' type='function'/>
+ <exports symbol='xmlAllocOutputBuffer' type='function'/>
+ <exports symbol='xmlNoNetExternalEntityLoader' type='function'/>
+ <exports symbol='xmlOutputCloseCallback' type='function'/>
+ <exports symbol='xmlIOHTTPMatch' type='function'/>
+ <exports symbol='xmlIOHTTPOpen' type='function'/>
+ <exports symbol='xmlParserInputBufferCreateIO' type='function'/>
+ <exports symbol='xmlOutputBufferCreateFd' type='function'/>
+ <exports symbol='xmlNormalizeWindowsPath' type='function'/>
+ <exports symbol='xmlInputReadCallback' type='function'/>
+ <exports symbol='xmlParserInputBufferCreateStatic' type='function'/>
+ <exports symbol='xmlIOHTTPClose' type='function'/>
+ <exports symbol='xmlParserInputBufferPush' type='function'/>
+ <exports symbol='xmlOutputBufferCreateFilename' type='function'/>
+ <exports symbol='xmlCleanupOutputCallbacks' type='function'/>
+ <exports symbol='xmlInputOpenCallback' type='function'/>
+ <exports symbol='xmlParserInputBufferRead' type='function'/>
+ <exports symbol='xmlOutputBufferWriteString' type='function'/>
+ <exports symbol='xmlFileMatch' type='function'/>
+ <exports symbol='xmlFileRead' type='function'/>
+ <exports symbol='xmlParserInputBufferCreateFile' type='function'/>
+ <exports symbol='xmlParserGetDirectory' type='function'/>
+ <exports symbol='xmlOutputBufferWrite' type='function'/>
+ <exports symbol='xmlCleanupInputCallbacks' type='function'/>
+ <exports symbol='xmlInputCloseCallback' type='function'/>
+ <exports symbol='xmlIOHTTPOpenW' type='function'/>
+ <exports symbol='xmlAllocParserInputBuffer' type='function'/>
+ </file>
+ <file name='xmlautomata'>
+ <summary>API to build regexp automata</summary>
+ <description>the API to build regexp automata </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlAutomataStatePtr' type='typedef'/>
+ <exports symbol='xmlAutomata' type='typedef'/>
+ <exports symbol='xmlAutomataPtr' type='typedef'/>
+ <exports symbol='xmlAutomataState' type='typedef'/>
+ <exports symbol='xmlFreeAutomata' type='function'/>
+ <exports symbol='xmlAutomataNewCounter' type='function'/>
+ <exports symbol='xmlAutomataGetInitState' type='function'/>
+ <exports symbol='xmlAutomataNewTransition2' type='function'/>
+ <exports symbol='xmlAutomataNewCountTrans' type='function'/>
+ <exports symbol='xmlAutomataNewAllTrans' type='function'/>
+ <exports symbol='xmlAutomataNewState' type='function'/>
+ <exports symbol='xmlAutomataNewCounterTrans' type='function'/>
+ <exports symbol='xmlAutomataCompile' type='function'/>
+ <exports symbol='xmlNewAutomata' type='function'/>
+ <exports symbol='xmlAutomataNewEpsilon' type='function'/>
+ <exports symbol='xmlAutomataNewCountedTrans' type='function'/>
+ <exports symbol='xmlAutomataSetFinalState' type='function'/>
+ <exports symbol='xmlAutomataNewOnceTrans' type='function'/>
+ <exports symbol='xmlAutomataNewTransition' type='function'/>
+ <exports symbol='xmlAutomataIsDeterminist' type='function'/>
+ </file>
+ <file name='xmlerror'>
+ <summary>error handling</summary>
+ <description>the API used to report errors </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_DTD_CONTENT_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAV_NOROOT' type='enum'/>
+ <exports symbol='XML_DTD_ATTRIBUTE_VALUE' type='enum'/>
+ <exports symbol='XML_ERR_INVALID_DEC_CHARREF' type='enum'/>
+ <exports symbol='XML_RNGP_PARENTREF_NO_PARENT' type='enum'/>
+ <exports symbol='XML_ERR_CDATA_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_XINCLUDE_INCLUDE_IN_INCLUDE' type='enum'/>
+ <exports symbol='XML_ERR_DOCUMENT_END' type='enum'/>
+ <exports symbol='XML_ERR_ENTITY_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_ERR_CHARREF_IN_PROLOG' type='enum'/>
+ <exports symbol='XML_RNGP_INVALID_DEFINE_NAME' type='enum'/>
+ <exports symbol='XML_SAVE_UNKNOWN_ENCODING' type='enum'/>
+ <exports symbol='XML_ERR_CONDSEC_INVALID_KEYWORD' type='enum'/>
+ <exports symbol='XML_CATALOG_MISSING_ATTR' type='enum'/>
+ <exports symbol='XML_ERR_NO_MEMORY' type='enum'/>
+ <exports symbol='XML_ERR_PEREF_SEMICOL_MISSING' type='enum'/>
+ <exports symbol='XML_ERR_DOCUMENT_START' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_TEXT' type='enum'/>
+ <exports symbol='XML_FROM_IO' type='enum'/>
+ <exports symbol='XML_HTML_UNKNOWN_TAG' type='enum'/>
+ <exports symbol='XML_DTD_NOT_STANDALONE' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_ATTR' type='enum'/>
+ <exports symbol='XML_SCHEMAV_NOTEMPTY' type='enum'/>
+ <exports symbol='XML_RNGP_NEED_COMBINE' type='enum'/>
+ <exports symbol='XML_IO_EROFS' type='enum'/>
+ <exports symbol='XML_ERR_DOCTYPE_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_ERR_XMLDECL_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_IO_EXDEV' type='enum'/>
+ <exports symbol='XML_XINCLUDE_NO_FALLBACK' type='enum'/>
+ <exports symbol='XML_RNGP_URI_FRAGMENT' type='enum'/>
+ <exports symbol='XML_FROM_MEMORY' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INVALID_MAXOCCURS' type='enum'/>
+ <exports symbol='XML_ERR_MISSING_ENCODING' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_ATTR_CHILD' type='enum'/>
+ <exports symbol='XML_RNGP_ELEMENT_CONTENT' type='enum'/>
+ <exports symbol='XML_ERR_LT_IN_ATTRIBUTE' type='enum'/>
+ <exports symbol='XML_XINCLUDE_ENTITY_DEF_MISMATCH' type='enum'/>
+ <exports symbol='XML_XPTR_RESOURCE_ERROR' type='enum'/>
+ <exports symbol='XML_IO_EISCONN' type='enum'/>
+ <exports symbol='XML_ERR_GT_REQUIRED' type='enum'/>
+ <exports symbol='XML_SCHEMAP_FACET_NO_VALUE' type='enum'/>
+ <exports symbol='XML_HTTP_UNKNOWN_HOST' type='enum'/>
+ <exports symbol='XML_XPTR_EXTRA_OBJECTS' type='enum'/>
+ <exports symbol='XML_ERR_ENTITY_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD' type='enum'/>
+ <exports symbol='XML_IO_UNKNOWN' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_ONEMORE_GROUP_ATTR' type='enum'/>
+ <exports symbol='XML_ERR_VALUE_REQUIRED' type='enum'/>
+ <exports symbol='XML_RNGP_INTERLEAVE_EMPTY' type='enum'/>
+ <exports symbol='XML_IO_ECHILD' type='enum'/>
+ <exports symbol='XML_RNGP_URI_NOT_ABSOLUTE' type='enum'/>
+ <exports symbol='XML_RNGP_NAME_MISSING' type='enum'/>
+ <exports symbol='XML_ERR_CONDSEC_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_RNGP_START_MISSING' type='enum'/>
+ <exports symbol='XML_ERR_PEREF_IN_EPILOG' type='enum'/>
+ <exports symbol='XML_IO_EINTR' type='enum'/>
+ <exports symbol='XML_FROM_VALID' type='enum'/>
+ <exports symbol='XML_FTP_PASV_ANSWER' type='enum'/>
+ <exports symbol='XML_RNGP_ATTRIBUTE_NOOP' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_ELEM_CHILD' type='enum'/>
+ <exports symbol='XML_CATALOG_RECURSION' type='enum'/>
+ <exports symbol='XML_SCHEMAP_REDEFINED_GROUP' type='enum'/>
+ <exports symbol='XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI' type='enum'/>
+ <exports symbol='XML_ERR_CHARREF_IN_EPILOG' type='enum'/>
+ <exports symbol='XML_DTD_ELEM_DEFAULT_NAMESPACE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_FAILED_BUILD_IMPORT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD' type='enum'/>
+ <exports symbol='XML_SCHEMAP_REGEXP_INVALID' type='enum'/>
+ <exports symbol='XML_XPTR_CHILDSEQ_START' type='enum'/>
+ <exports symbol='XML_C14N_CREATE_STACK' type='enum'/>
+ <exports symbol='XML_XINCLUDE_TEXT_FRAGMENT' type='enum'/>
+ <exports symbol='XML_ERR_EXT_SUBSET_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_RNGP_PARENTREF_NAME_INVALID' type='enum'/>
+ <exports symbol='XML_FROM_DTD' type='enum'/>
+ <exports symbol='XML_SCHEMAV_CONSTRUCT' type='enum'/>
+ <exports symbol='XML_RNGP_EXTERNALREF_RECURSE' type='enum'/>
+ <exports symbol='XML_DTD_ATTRIBUTE_DEFAULT' type='enum'/>
+ <exports symbol='XML_RNGP_UNKNOWN_COMBINE' type='enum'/>
+ <exports symbol='XML_RNGP_START_EMPTY' type='enum'/>
+ <exports symbol='XML_RNGP_ELEM_CONTENT_EMPTY' type='enum'/>
+ <exports symbol='XML_XPATH_EXPRESSION_OK' type='enum'/>
+ <exports symbol='XML_IO_EMLINK' type='enum'/>
+ <exports symbol='XML_ERR_NMTOKEN_REQUIRED' type='enum'/>
+ <exports symbol='XML_RNGP_ANYNAME_ATTR_ANCESTOR' type='enum'/>
+ <exports symbol='XML_ERR_ENTITY_IS_EXTERNAL' type='enum'/>
+ <exports symbol='XML_WAR_UNDECLARED_ENTITY' type='enum'/>
+ <exports symbol='XML_ERR_PI_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_RNGP_START_CONTENT' type='enum'/>
+ <exports symbol='XML_RNGP_GROUP_ATTR_CONFLICT' type='enum'/>
+ <exports symbol='XML_RNGP_EMPTY' type='enum'/>
+ <exports symbol='XML_SCHEMAV_ATTRUNKNOWN' type='enum'/>
+ <exports symbol='XML_IO_ENODEV' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_REF' type='enum'/>
+ <exports symbol='XML_FROM_PARSER' type='enum'/>
+ <exports symbol='XML_XINCLUDE_RECURSION' type='enum'/>
+ <exports symbol='XML_C14N_CREATE_CTXT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_ATTRGRP_NONAME_NOREF' type='enum'/>
+ <exports symbol='XML_SCHEMAP_RESTRICTION_NONAME_NOREF' type='enum'/>
+ <exports symbol='XML_XINCLUDE_TEXT_DOCUMENT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_PREFIX' type='enum'/>
+ <exports symbol='XML_XINCLUDE_FALLBACKS_IN_INCLUDE' type='enum'/>
+ <exports symbol='XML_ERR_STANDALONE_VALUE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_REDEFINED_ATTR' type='enum'/>
+ <exports symbol='XML_ERR_ENTITY_LOOP' type='enum'/>
+ <exports symbol='XML_XPATH_INVALID_TYPE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD' type='enum'/>
+ <exports symbol='XML_IO_EINPROGRESS' type='enum'/>
+ <exports symbol='XML_IO_FLUSH' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD' type='enum'/>
+ <exports symbol='XML_C14N_INVALID_NODE' type='enum'/>
+ <exports symbol='XML_IO_EFAULT' type='enum'/>
+ <exports symbol='XML_XPATH_INVALID_CTXT_POSITION' type='enum'/>
+ <exports symbol='XML_ERR_NOTATION_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_DTD_STANDALONE_DEFAULTED' type='enum'/>
+ <exports symbol='XML_DTD_INVALID_DEFAULT' type='enum'/>
+ <exports symbol='XML_DTD_UNKNOWN_ELEM' type='enum'/>
+ <exports symbol='XML_SCHEMAP_REDEFINED_TYPE' type='enum'/>
+ <exports symbol='XML_SCHEMAV_NOTYPE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_FACET_CHILD' type='enum'/>
+ <exports symbol='XML_SCHEMAP_NOTATION_NO_NAME' type='enum'/>
+ <exports symbol='XML_DTD_EMPTY_NOTATION' type='enum'/>
+ <exports symbol='XML_RNGP_ELEMENT_EMPTY' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_LIST_TEXT' type='enum'/>
+ <exports symbol='XML_XPATH_START_LITERAL_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI' type='enum'/>
+ <exports symbol='XML_ERR_ELEMCONTENT_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_RNGP_INCLUDE_FAILURE' type='enum'/>
+ <exports symbol='XML_RNGP_INVALID_VALUE' type='enum'/>
+ <exports symbol='XML_ERR_COMMENT_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_SCHEMAP_REDEFINED_ATTRGROUP' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD' type='enum'/>
+ <exports symbol='XML_IO_EMSGSIZE' type='enum'/>
+ <exports symbol='XML_FROM_CATALOG' type='enum'/>
+ <exports symbol='XML_SCHEMAV_ATTRINVALID' type='enum'/>
+ <exports symbol='XML_SCHEMAV_VALUE' type='enum'/>
+ <exports symbol='XML_IO_LOAD_ERROR' type='enum'/>
+ <exports symbol='XML_FROM_HTML' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_LIST' type='enum'/>
+ <exports symbol='XML_ERR_LT_REQUIRED' type='enum'/>
+ <exports symbol='XML_ERR_ATTLIST_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_RNGP_ELEMENT_NAME' type='enum'/>
+ <exports symbol='XML_ERR_PCDATA_REQUIRED' type='enum'/>
+ <exports symbol='XML_SCHEMAV_INTERNAL' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_VALUE' type='enum'/>
+ <exports symbol='XML_ERR_STRING_NOT_CLOSED' type='enum'/>
+ <exports symbol='XML_ERR_ENTITYREF_IN_DTD' type='enum'/>
+ <exports symbol='XML_SCHEMAV_HAVEDEFAULT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_REDEFINED_NOTATION' type='enum'/>
+ <exports symbol='XML_RNGP_ERROR_TYPE_LIB' type='enum'/>
+ <exports symbol='XML_XPTR_EVAL_FAILED' type='enum'/>
+ <exports symbol='XML_DTD_NO_ROOT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_IMPORT_REDEFINE_NSNAME' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME' type='enum'/>
+ <exports symbol='XML_IO_ECANCELED' type='enum'/>
+ <exports symbol='XML_ERR_UNKNOWN_ENCODING' type='enum'/>
+ <exports symbol='XML_HTTP_URL_SYNTAX' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INVALID_FACET' type='enum'/>
+ <exports symbol='XML_DTD_CONTENT_MODEL' type='enum'/>
+ <exports symbol='XML_XPATH_UNDEF_PREFIX_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_REF_AND_SUBTYPE' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR' type='enum'/>
+ <exports symbol='XML_IO_EADDRINUSE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_LIST_CHILD' type='enum'/>
+ <exports symbol='XML_CATALOG_ENTRY_BROKEN' type='enum'/>
+ <exports symbol='XML_WAR_NS_URI_RELATIVE' type='enum'/>
+ <exports symbol='XML_DTD_UNKNOWN_ID' type='enum'/>
+ <exports symbol='XML_RNGP_TEXT_EXPECTED' type='enum'/>
+ <exports symbol='XML_WAR_NS_URI' type='enum'/>
+ <exports symbol='XML_XPATH_UNDEF_VARIABLE_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAV_ELEMCONT' type='enum'/>
+ <exports symbol='XML_IO_EDOM' type='enum'/>
+ <exports symbol='XML_SCHEMAV_FACET' type='enum'/>
+ <exports symbol='XML_RNGP_PARAM_NAME_MISSING' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_BASE_TYPE' type='enum'/>
+ <exports symbol='XML_RNGP_INVALID_URI' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_LIST_LIST' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_LIST' type='enum'/>
+ <exports symbol='XML_RNGP_EXCEPT_NO_CONTENT' type='enum'/>
+ <exports symbol='XML_RNGP_EXCEPT_EMPTY' type='enum'/>
+ <exports symbol='XML_XPATH_UNFINISHED_LITERAL_ERROR' type='enum'/>
+ <exports symbol='XML_RNGP_EXTERNALREF_EMTPY' type='enum'/>
+ <exports symbol='XML_ERR_SPACE_REQUIRED' type='enum'/>
+ <exports symbol='XML_SCHEMAV_EXTRACONTENT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD' type='enum'/>
+ <exports symbol='XML_DTD_DIFFERENT_PREFIX' type='enum'/>
+ <exports symbol='XML_RNGP_INTERLEAVE_NO_CONTENT' type='enum'/>
+ <exports symbol='XML_SCHEMAV_NOTDETERMINIST' type='enum'/>
+ <exports symbol='XML_ERR_INVALID_HEX_CHARREF' type='enum'/>
+ <exports symbol='XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_INTERLEAVE' type='enum'/>
+ <exports symbol='XML_HTML_STRUCURE_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAV_MISSING' type='enum'/>
+ <exports symbol='XML_RNGP_GRAMMAR_CONTENT' type='enum'/>
+ <exports symbol='XML_XINCLUDE_XPTR_FAILED' type='enum'/>
+ <exports symbol='XML_IO_ENFILE' type='enum'/>
+ <exports symbol='XML_RNGP_PARENTREF_CREATE_FAILED' type='enum'/>
+ <exports symbol='XML_ERR_ENTITY_IS_PARAMETER' type='enum'/>
+ <exports symbol='XML_ERR_RESERVED_XML_NAME' type='enum'/>
+ <exports symbol='XML_SCHEMAV_NOTSIMPLE' type='enum'/>
+ <exports symbol='XML_RNGP_PARENTREF_NO_NAME' type='enum'/>
+ <exports symbol='XML_IO_EPERM' type='enum'/>
+ <exports symbol='XML_IO_ENETUNREACH' type='enum'/>
+ <exports symbol='XML_ERR_CHARREF_AT_EOF' type='enum'/>
+ <exports symbol='XML_IO_ENOMEM' type='enum'/>
+ <exports symbol='XML_IO_ENOSPC' type='enum'/>
+ <exports symbol='XML_RNGP_ATTR_CONFLICT' type='enum'/>
+ <exports symbol='XML_RNGP_TYPE_VALUE' type='enum'/>
+ <exports symbol='XML_FROM_REGEXP' type='enum'/>
+ <exports symbol='XML_XINCLUDE_UNKNOWN_ENCODING' type='enum'/>
+ <exports symbol='XML_RNGP_DEF_CHOICE_AND_INTERLEAVE' type='enum'/>
+ <exports symbol='XML_TREE_UNTERMINATED_ENTITY' type='enum'/>
+ <exports symbol='XML_ERR_URI_REQUIRED' type='enum'/>
+ <exports symbol='XML_FROM_TREE' type='enum'/>
+ <exports symbol='XML_CATALOG_PREFER_VALUE' type='enum'/>
+ <exports symbol='XML_ERR_HYPHEN_IN_COMMENT' type='enum'/>
+ <exports symbol='XML_TREE_INVALID_HEX' type='enum'/>
+ <exports symbol='XML_C14N_REQUIRES_UTF8' type='enum'/>
+ <exports symbol='XML_FROM_XINCLUDE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_TYPE_AND_SUBTYPE' type='enum'/>
+ <exports symbol='XML_RNGP_GRAMMAR_EMPTY' type='enum'/>
+ <exports symbol='XML_IO_ENOTDIR' type='enum'/>
+ <exports symbol='XML_SAVE_CHAR_INVALID' type='enum'/>
+ <exports symbol='XML_RNGP_ELEMENT_NO_CONTENT' type='enum'/>
+ <exports symbol='XML_ERR_ENTITYREF_NO_NAME' type='enum'/>
+ <exports symbol='XML_DTD_ID_FIXED' type='enum'/>
+ <exports symbol='XML_XINCLUDE_NO_HREF' type='enum'/>
+ <exports symbol='XML_XPATH_INVALID_OPERAND' type='enum'/>
+ <exports symbol='XML_IO_ENOEXEC' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_LIST_REF' type='enum'/>
+ <exports symbol='XML_XINCLUDE_HREF_URI' type='enum'/>
+ <exports symbol='XML_ERR_EXTRA_CONTENT' type='enum'/>
+ <exports symbol='XML_ERR_EXT_ENTITY_STANDALONE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_FAILED_PARSE' type='enum'/>
+ <exports symbol='XML_RNGP_REF_CYCLE' type='enum'/>
+ <exports symbol='XML_RNGP_HREF_ERROR' type='enum'/>
+ <exports symbol='XML_FROM_NONE' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_GROUP' type='enum'/>
+ <exports symbol='XML_ERR_LITERAL_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INVALID_REF_AND_SUBTYPE' type='enum'/>
+ <exports symbol='XML_RNGP_ELEM_TEXT_CONFLICT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_ATTR_NONAME_NOREF' type='enum'/>
+ <exports symbol='XML_SCHEMAP_ELEM_NONAME_NOREF' type='enum'/>
+ <exports symbol='XML_DTD_ID_SUBSET' type='enum'/>
+ <exports symbol='XML_ERR_ENTITY_CHAR_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_EMPTY' type='enum'/>
+ <exports symbol='XML_DTD_UNKNOWN_ENTITY' type='enum'/>
+ <exports symbol='XML_RNGP_PARSE_ERROR' type='enum'/>
+ <exports symbol='XML_RNGP_XML_NS' type='enum'/>
+ <exports symbol='XML_ERR_MISPLACED_CDATA_END' type='enum'/>
+ <exports symbol='XML_FROM_HTTP' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_ONEMORE' type='enum'/>
+ <exports symbol='XML_WAR_LANG_VALUE' type='enum'/>
+ <exports symbol='XML_RNGP_REF_CREATE_FAILED' type='enum'/>
+ <exports symbol='XML_ERR_SEPARATOR_REQUIRED' type='enum'/>
+ <exports symbol='XML_DTD_ROOT_NAME' type='enum'/>
+ <exports symbol='XML_RNGP_UNKNOWN_TYPE_LIB' type='enum'/>
+ <exports symbol='XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE' type='enum'/>
+ <exports symbol='XML_RNGP_ATTRIBUTE_CONTENT' type='enum'/>
+ <exports symbol='XML_RNGP_REF_NOT_EMPTY' type='enum'/>
+ <exports symbol='XML_XPATH_VARIABLE_REF_ERROR' type='enum'/>
+ <exports symbol='XML_RNGP_INTERLEAVE_ADD' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_CHOICE_CHILD' type='enum'/>
+ <exports symbol='XML_DTD_NOTATION_REDEFINED' type='enum'/>
+ <exports symbol='XML_RNGP_ELEM_CONTENT_ERROR' type='enum'/>
+ <exports symbol='XML_DTD_ATTRIBUTE_REDEFINED' type='enum'/>
+ <exports symbol='XML_RNGP_UNKNOWN_ATTRIBUTE' type='enum'/>
+ <exports symbol='XML_ERR_UNDECLARED_ENTITY' type='enum'/>
+ <exports symbol='XML_ERR_PUBID_REQUIRED' type='enum'/>
+ <exports symbol='XML_IO_ENOTSOCK' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_GROUP' type='enum'/>
+ <exports symbol='XML_RNGP_NOTALLOWED_NOT_EMPTY' 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'/>
+ <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_ATTR' type='enum'/>
+ <exports symbol='XML_FTP_ACCNT' type='enum'/>
+ <exports symbol='XML_FROM_RELAXNGV' type='enum'/>
+ <exports symbol='XML_RNGP_REF_NAME_INVALID' type='enum'/>
+ <exports symbol='XML_SCHEMAV_NOTTOPLEVEL' type='enum'/>
+ <exports symbol='XML_IO_ENOENT' type='enum'/>
+ <exports symbol='XML_ERR_NO_DTD' type='enum'/>
+ <exports symbol='XML_FROM_C14N' type='enum'/>
+ <exports symbol='XML_FROM_XSLT' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_LIST_ATTR' type='enum'/>
+ <exports symbol='XML_IO_EIO' type='enum'/>
+ <exports symbol='XML_IO_EACCES' type='enum'/>
+ <exports symbol='XML_DTD_NOT_PCDATA' type='enum'/>
+ <exports symbol='XML_SCHEMAP_PREFIX_UNDEFINED' type='enum'/>
+ <exports symbol='XML_WAR_UNKNOWN_VERSION' type='enum'/>
+ <exports symbol='XML_RNGP_PARAM_FORBIDDEN' type='enum'/>
+ <exports symbol='XML_ERR_OK' type='enum'/>
+ <exports symbol='XML_SCHEMAP_NOTHING_TO_PARSE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD' type='enum'/>
+ <exports symbol='XML_ERR_UNSUPPORTED_ENCODING' type='enum'/>
+ <exports symbol='XML_SCHEMAP_GROUP_NONAME_NOREF' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME' type='enum'/>
+ <exports symbol='XML_ERR_ENTITYREF_IN_PROLOG' type='enum'/>
+ <exports symbol='XML_ERR_CHARREF_IN_DTD' type='enum'/>
+ <exports symbol='XML_DTD_LOAD_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_NOTATION_CHILD' type='enum'/>
+ <exports symbol='XML_IO_ENOTTY' type='enum'/>
+ <exports symbol='XML_RNGP_EMPTY_CONTENT' type='enum'/>
+ <exports symbol='XML_IO_EALREADY' type='enum'/>
+ <exports symbol='XML_DTD_NO_DTD' type='enum'/>
+ <exports symbol='XML_IO_ERANGE' type='enum'/>
+ <exports symbol='XML_DTD_UNKNOWN_NOTATION' type='enum'/>
+ <exports symbol='XML_IO_ENOSYS' type='enum'/>
+ <exports symbol='XML_FROM_DATATYPE' type='enum'/>
+ <exports symbol='XML_ERR_WARNING' type='enum'/>
+ <exports symbol='XML_SCHEMAP_ATTRFORMDEFAULT_VALUE' type='enum'/>
+ <exports symbol='XML_IO_EISDIR' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE' type='enum'/>
+ <exports symbol='XML_ERR_VERSION_MISSING' type='enum'/>
+ <exports symbol='XML_XINCLUDE_MULTIPLE_ROOT' type='enum'/>
+ <exports symbol='XML_XPATH_INVALID_CTXT_SIZE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_UNION_CHILD' type='enum'/>
+ <exports symbol='XML_ERR_PEREF_AT_EOF' type='enum'/>
+ <exports symbol='XML_XPATH_MEMORY_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_NOROOT' type='enum'/>
+ <exports symbol='XML_XPATH_EXPR_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI' type='enum'/>
+ <exports symbol='XML_RNGP_DEFINE_EMPTY' type='enum'/>
+ <exports symbol='XML_ERR_ATTRIBUTE_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_XPATH_UNCLOSED_ERROR' type='enum'/>
+ <exports symbol='XML_WAR_CATALOG_PI' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INVALID_MINOCCURS' type='enum'/>
+ <exports symbol='XML_IO_ENOLCK' type='enum'/>
+ <exports symbol='XML_XINCLUDE_DEPRECATED_NS' type='enum'/>
+ <exports symbol='XML_RNGP_CHOICE_EMPTY' type='enum'/>
+ <exports symbol='XML_ERR_LITERAL_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_ERR_ENTITYREF_SEMICOL_MISSING' type='enum'/>
+ <exports symbol='XML_DTD_MULTIPLE_ID' type='enum'/>
+ <exports symbol='XML_FROM_XPATH' type='enum'/>
+ <exports symbol='XML_IO_EPIPE' type='enum'/>
+ <exports symbol='XML_TREE_INVALID_DEC' type='enum'/>
+ <exports symbol='XML_SCHEMAP_EXTENSION_NO_BASE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_NOTYPE_NOREF' type='enum'/>
+ <exports symbol='XML_RNGP_ATTRIBUTE_EMPTY' type='enum'/>
+ <exports symbol='XML_SCHEMAV_ISABSTRACT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP' type='enum'/>
+ <exports symbol='XML_DTD_NOT_EMPTY' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_LIST_ELEM' type='enum'/>
+ <exports symbol='XML_SCHEMAV_UNDECLAREDELEM' type='enum'/>
+ <exports symbol='XML_RNGP_CREATE_FAILURE' type='enum'/>
+ <exports symbol='XML_IO_EBADF' type='enum'/>
+ <exports symbol='XML_ERR_CONDSEC_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_RNGP_PREFIX_UNDEFINED' type='enum'/>
+ <exports symbol='XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI' type='enum'/>
+ <exports symbol='XML_ERR_EQUAL_REQUIRED' type='enum'/>
+ <exports symbol='XML_XPATH_UNKNOWN_FUNC_ERROR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INVALID_WHITE_SPACE' type='enum'/>
+ <exports symbol='XML_RNGP_INCLUDE_EMPTY' type='enum'/>
+ <exports symbol='XML_IO_ENOTSUP' type='enum'/>
+ <exports symbol='XML_DTD_UNKNOWN_ATTRIBUTE' type='enum'/>
+ <exports symbol='XML_XPTR_SUB_RESOURCE_ERROR' type='enum'/>
+ <exports symbol='XML_RNGP_VALUE_EMPTY' type='enum'/>
+ <exports symbol='XML_RNGP_INTERLEAVE_CREATE_FAILED' type='enum'/>
+ <exports symbol='XML_DTD_NO_PREFIX' type='enum'/>
+ <exports symbol='XML_IO_EAGAIN' type='enum'/>
+ <exports symbol='XML_RNGP_UNKNOWN_CONSTRUCT' type='enum'/>
+ <exports symbol='XML_ERR_UNPARSED_ENTITY' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_IMPORT_CHILD' type='enum'/>
+ <exports symbol='XML_FTP_EPSV_ANSWER' type='enum'/>
+ <exports symbol='XML_DTD_ENTITY_TYPE' type='enum'/>
+ <exports symbol='XML_ERR_FATAL' type='enum'/>
+ <exports symbol='XML_DTD_ID_REDEFINED' type='enum'/>
+ <exports symbol='XML_XPATH_ENCODING_ERROR' type='enum'/>
+ <exports symbol='XML_RNGP_REF_NO_NAME' type='enum'/>
+ <exports symbol='XML_ERR_NONE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD' type='enum'/>
+ <exports symbol='XML_RNGP_NSNAME_ATTR_ANCESTOR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_FACET_TYPE' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_ONEMORE' type='enum'/>
+ <exports symbol='XML_ERR_CONDSEC_INVALID' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_ATTR_ATTR' type='enum'/>
+ <exports symbol='XML_XPTR_UNKNOWN_SCHEME' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INVALID_FACET_VALUE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INVALID_BOOLEAN' type='enum'/>
+ <exports symbol='XML_ERR_ENTITYREF_IN_EPILOG' type='enum'/>
+ <exports symbol='XML_SCHEMAP_NOATTR_NOREF' type='enum'/>
+ <exports symbol='XML_RNGP_GRAMMAR_MISSING' type='enum'/>
+ <exports symbol='XML_DTD_CONTENT_NOT_DETERMINIST' type='enum'/>
+ <exports symbol='XML_DTD_NO_ELEM_NAME' type='enum'/>
+ <exports symbol='XML_RNGP_GRAMMAR_NO_START' type='enum'/>
+ <exports symbol='XML_RNGP_VALUE_NO_CONTENT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD' type='enum'/>
+ <exports symbol='XML_IO_EAFNOSUPPORT' type='enum'/>
+ <exports symbol='XML_XPTR_SYNTAX_ERROR' type='enum'/>
+ <exports symbol='XML_CATALOG_NOT_CATALOG' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_REF' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_EMPTY' type='enum'/>
+ <exports symbol='XML_IO_EFBIG' type='enum'/>
+ <exports symbol='XML_ERR_NS_DECL_ERROR' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_DATA' type='enum'/>
+ <exports symbol='XML_ERR_ERROR' 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'/>
+ <exports symbol='XML_DTD_ELEM_NAMESPACE' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_ATTR_ELEM' type='enum'/>
+ <exports symbol='XML_XINCLUDE_FRAGMENT_ID' type='enum'/>
+ <exports symbol='XML_IO_NO_INPUT' type='enum'/>
+ <exports symbol='XML_NS_ERR_UNDEFINED_NAMESPACE' type='enum'/>
+ <exports symbol='XML_XPATH_INVALID_ARITY' type='enum'/>
+ <exports symbol='XML_XPATH_INVALID_CHAR_ERROR' type='enum'/>
+ <exports symbol='XML_REGEXP_COMPILE_ERROR' type='enum'/>
+ <exports symbol='XML_IO_WRITE' type='enum'/>
+ <exports symbol='XML_ERR_ENTITY_PE_INTERNAL' type='enum'/>
+ <exports symbol='XML_RNGP_DEFINE_MISSING' type='enum'/>
+ <exports symbol='XML_ERR_NOTATION_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_ERR_INTERNAL_ERROR' type='enum'/>
+ <exports symbol='XML_IO_EBADMSG' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_LIST_INTERLEAVE' type='enum'/>
+ <exports symbol='XML_ERR_DOCUMENT_EMPTY' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_ELEM' type='enum'/>
+ <exports symbol='XML_IO_NETWORK_ATTEMPT' type='enum'/>
+ <exports symbol='XML_FROM_OUTPUT' type='enum'/>
+ <exports symbol='XML_FROM_NAMESPACE' type='enum'/>
+ <exports symbol='XML_IO_EBUSY' type='enum'/>
+ <exports symbol='XML_ERR_ATTLIST_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_RNGP_INCLUDE_RECURSE' type='enum'/>
+ <exports symbol='XML_ERR_INVALID_URI' type='enum'/>
+ <exports symbol='XML_SCHEMAP_INVALID_ENUM' type='enum'/>
+ <exports symbol='XML_SCHEMAV_INVALIDATTR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_FAILED_LOAD' type='enum'/>
+ <exports symbol='XML_IO_ESRCH' type='enum'/>
+ <exports symbol='XML_IO_ENXIO' type='enum'/>
+ <exports symbol='XML_FROM_XPOINTER' type='enum'/>
+ <exports symbol='XML_ERR_ATTRIBUTE_WITHOUT_VALUE' type='enum'/>
+ <exports symbol='XML_RNGP_TEXT_HAS_CHILD' type='enum'/>
+ <exports symbol='XML_DTD_ELEM_REDEFINED' type='enum'/>
+ <exports symbol='XML_SCHEMAV_NOTNILLABLE' type='enum'/>
+ <exports symbol='XML_SCHEMAP_ELEM_DEFAULT_FIXED' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_TYPE' type='enum'/>
+ <exports symbol='XML_RNGP_REF_NO_DEF' type='enum'/>
+ <exports symbol='XML_ERR_NOT_WELL_BALANCED' type='enum'/>
+ <exports symbol='XML_NS_ERR_XML_NAMESPACE' type='enum'/>
+ <exports symbol='XML_ERR_INVALID_CHARREF' type='enum'/>
+ <exports symbol='XML_ERR_INVALID_CHAR' type='enum'/>
+ <exports symbol='XML_RNGP_FOREIGN_ELEMENT' type='enum'/>
+ <exports symbol='XML_XINCLUDE_PARSE_VALUE' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME' type='enum'/>
+ <exports symbol='XML_RNGP_NSNAME_NO_NS' type='enum'/>
+ <exports symbol='XML_ERR_MIXED_NOT_STARTED' type='enum'/>
+ <exports symbol='XML_SCHEMAV_INVALIDELEM' type='enum'/>
+ <exports symbol='XML_NS_ERR_QNAME' type='enum'/>
+ <exports symbol='XML_DTD_NOTATION_VALUE' type='enum'/>
+ <exports symbol='XML_ERR_INVALID_ENCODING' type='enum'/>
+ <exports symbol='XML_RNGP_EXCEPT_MISSING' type='enum'/>
+ <exports symbol='XML_ERR_TAG_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_RNGP_XMLNS_NAME' type='enum'/>
+ <exports symbol='XML_ERR_LTSLASH_REQUIRED' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_ALL_CHILD' type='enum'/>
+ <exports symbol='XML_DTD_MIXED_CORRUPT' type='enum'/>
+ <exports symbol='XML_RNGP_DEFINE_CREATE_FAILED' type='enum'/>
+ <exports symbol='XML_ERR_ENTITY_BOUNDARY' type='enum'/>
+ <exports symbol='XML_SCHEMAP_ELEMFORMDEFAULT_VALUE' type='enum'/>
+ <exports symbol='XML_ERR_PEREF_IN_INT_SUBSET' 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'/>
+ <exports symbol='XML_IO_EDEADLK' type='enum'/>
+ <exports symbol='XML_ERR_ATTRIBUTE_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_IO_EINVAL' type='enum'/>
+ <exports symbol='XML_IO_ENAMETOOLONG' type='enum'/>
+ <exports symbol='XML_ERR_PEREF_IN_PROLOG' type='enum'/>
+ <exports symbol='XML_RNGP_EXTERNAL_REF_FAILURE' type='enum'/>
+ <exports symbol='XML_SCHEMAV_NOROLLBACK' type='enum'/>
+ <exports symbol='XML_FROM_FTP' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_TEXT' type='enum'/>
+ <exports symbol='XML_SAVE_NOT_UTF8' type='enum'/>
+ <exports symbol='XML_DTD_INVALID_CHILD' type='enum'/>
+ <exports symbol='XML_RNGP_TYPE_MISSING' type='enum'/>
+ <exports symbol='XML_ERR_TAG_NAME_MISMATCH' type='enum'/>
+ <exports symbol='XML_ERR_ENCODING_NAME' type='enum'/>
+ <exports symbol='XML_ERR_ATTRIBUTE_REDEFINED' type='enum'/>
+ <exports symbol='XML_IO_ECONNREFUSED' type='enum'/>
+ <exports symbol='XML_ERR_XMLDECL_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_XINCLUDE_XPTR_RESULT' type='enum'/>
+ <exports symbol='XML_SCHEMAP_SIMPLETYPE_NONAME' type='enum'/>
+ <exports symbol='XML_SCHEMAP_UNKNOWN_GROUP_CHILD' type='enum'/>
+ <exports symbol='XML_XINCLUDE_BUILD_FAILED' type='enum'/>
+ <exports symbol='XML_RNGP_PARENTREF_NOT_EMPTY' type='enum'/>
+ <exports symbol='XML_ERR_PEREF_NO_NAME' type='enum'/>
+ <exports symbol='XML_ERR_ENTITYREF_AT_EOF' type='enum'/>
+ <exports symbol='XML_NS_ERR_ATTRIBUTE_REDEFINED' type='enum'/>
+ <exports symbol='XML_ERR_NAME_REQUIRED' type='enum'/>
+ <exports symbol='XML_IO_ETIMEDOUT' type='enum'/>
+ <exports symbol='XML_RNGP_ATTRIBUTE_CHILDREN' type='enum'/>
+ <exports symbol='XML_RNGP_DEFINE_NAME_MISSING' type='enum'/>
+ <exports symbol='XML_XPATH_NUMBER_ERROR' type='enum'/>
+ <exports symbol='XML_SAVE_NO_DOCTYPE' type='enum'/>
+ <exports symbol='XML_RNGP_CHOICE_CONTENT' type='enum'/>
+ <exports symbol='XML_RNGP_EMPTY_CONSTRUCT' type='enum'/>
+ <exports symbol='XML_RNGP_FORBIDDEN_ATTRIBUTE' type='enum'/>
+ <exports symbol='XML_ERR_ELEMCONTENT_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_SCHEMAP_REDEFINED_ELEMENT' type='enum'/>
+ <exports symbol='XML_ERR_URI_FRAGMENT' type='enum'/>
+ <exports symbol='XML_IO_ESPIPE' type='enum'/>
+ <exports symbol='XML_DTD_NO_DOC' type='enum'/>
+ <exports symbol='XML_IO_EEXIST' type='enum'/>
+ <exports symbol='XML_SCHEMAP_NOT_SCHEMA' type='enum'/>
+ <exports symbol='XML_FROM_SCHEMASV' type='enum'/>
+ <exports symbol='XML_FROM_SCHEMASP' type='enum'/>
+ <exports symbol='XML_ERR_MIXED_NOT_FINISHED' type='enum'/>
+ <exports symbol='XML_SCHEMAP_DEF_AND_PREFIX' type='enum'/>
+ <exports symbol='XML_DTD_STANDALONE_WHITE_SPACE' type='enum'/>
+ <exports symbol='XML_HTTP_USE_IP' type='enum'/>
+ <exports symbol='XML_IO_ENCODER' type='enum'/>
+ <exports symbol='XML_IO_ENOTEMPTY' type='enum'/>
+ <exports symbol='XML_SCHEMAV_WRONGELEM' type='enum'/>
+ <exports symbol='XML_RNGP_START_CHOICE_AND_INTERLEAVE' type='enum'/>
+ <exports symbol='XML_XPATH_INVALID_PREDICATE_ERROR' type='enum'/>
+ <exports symbol='XML_XINCLUDE_INVALID_CHAR' type='enum'/>
+ <exports symbol='XML_RNGP_TYPE_NOT_FOUND' type='enum'/>
+ <exports symbol='XML_IO_BUFFER_FULL' type='enum'/>
+ <exports symbol='xmlErrorPtr' type='typedef'/>
+ <exports symbol='xmlErrorLevel' type='typedef'/>
+ <exports symbol='xmlParserErrors' type='typedef'/>
+ <exports symbol='xmlErrorDomain' type='typedef'/>
+ <exports symbol='xmlError' type='typedef'/>
+ <exports symbol='_xmlError' type='struct'/>
+ <exports symbol='xmlParserValidityError' type='function'/>
+ <exports symbol='xmlGenericErrorFunc' type='function'/>
+ <exports symbol='xmlSetGenericErrorFunc' type='function'/>
+ <exports symbol='xmlParserPrintFileInfo' type='function'/>
+ <exports symbol='xmlCtxtResetLastError' type='function'/>
+ <exports symbol='xmlResetLastError' type='function'/>
+ <exports symbol='initGenericErrorDefaultFunc' type='function'/>
+ <exports symbol='xmlCopyError' type='function'/>
+ <exports symbol='xmlParserValidityWarning' type='function'/>
+ <exports symbol='xmlParserPrintFileContext' type='function'/>
+ <exports symbol='xmlGetLastError' type='function'/>
+ <exports symbol='xmlParserWarning' type='function'/>
+ <exports symbol='xmlStructuredErrorFunc' type='function'/>
+ <exports symbol='xmlSetStructuredErrorFunc' type='function'/>
+ <exports symbol='xmlResetError' type='function'/>
+ <exports symbol='xmlParserError' type='function'/>
+ <exports symbol='xmlCtxtGetLastError' type='function'/>
+ </file>
+ <file name='xmlexports'>
+ <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='XMLPUBVAR' type='macro'/>
+ <exports symbol='LIBXML_DLL_IMPORT' type='macro'/>
+ </file>
+ <file name='xmlmemory'>
+ <summary>interface for the memory allocator</summary>
+ <description>provides interfaces for the memory allocator, including debugging capabilities. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlRealloc' type='macro'/>
+ <exports symbol='xmlMalloc' type='macro'/>
+ <exports symbol='xmlMallocAtomic' type='macro'/>
+ <exports symbol='DEBUG_MEMORY' type='macro'/>
+ <exports symbol='xmlMemStrdup' type='macro'/>
+ <exports symbol='xmlMemRealloc' type='function'/>
+ <exports symbol='xmlMemMalloc' type='function'/>
+ <exports symbol='xmlGcMemGet' type='function'/>
+ <exports symbol='xmlStrdupFunc' type='function'/>
+ <exports symbol='xmlFreeFunc' type='function'/>
+ <exports symbol='xmlInitMemory' type='function'/>
+ <exports symbol='xmlMemFree' type='function'/>
+ <exports symbol='xmlMallocAtomicLoc' type='function'/>
+ <exports symbol='xmlReallocLoc' type='function'/>
+ <exports symbol='xmlCleanupMemory' type='function'/>
+ <exports symbol='xmlMemUsed' type='function'/>
+ <exports symbol='xmlMemSetup' type='function'/>
+ <exports symbol='xmlMemGet' type='function'/>
+ <exports symbol='xmlMemoryDump' type='function'/>
+ <exports symbol='xmlMallocLoc' type='function'/>
+ <exports symbol='xmlReallocFunc' type='function'/>
+ <exports symbol='xmlMallocFunc' type='function'/>
+ <exports symbol='xmlMemDisplay' type='function'/>
+ <exports symbol='xmlGcMemSetup' type='function'/>
+ <exports symbol='xmlMemShow' type='function'/>
+ <exports symbol='xmlMemoryStrdup' type='function'/>
+ <exports symbol='xmlMemStrdupLoc' type='function'/>
+ </file>
+ <file name='xmlreader'>
+ <summary>the XMLReader implementation</summary>
+ <description>API of the XML streaming API based on C# interfaces. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_READER_TYPE_DOCUMENT_FRAGMENT' type='enum'/>
+ <exports symbol='XML_READER_TYPE_COMMENT' type='enum'/>
+ <exports symbol='XML_PARSER_SEVERITY_ERROR' type='enum'/>
+ <exports symbol='XML_PARSER_LOADDTD' type='enum'/>
+ <exports symbol='XML_READER_TYPE_ENTITY' type='enum'/>
+ <exports symbol='XML_READER_TYPE_SIGNIFICANT_WHITESPACE' type='enum'/>
+ <exports symbol='XML_READER_TYPE_TEXT' type='enum'/>
+ <exports symbol='XML_READER_TYPE_PROCESSING_INSTRUCTION' type='enum'/>
+ <exports symbol='XML_READER_TYPE_END_ENTITY' type='enum'/>
+ <exports symbol='XML_READER_TYPE_XML_DECLARATION' type='enum'/>
+ <exports symbol='XML_PARSER_DEFAULTATTRS' type='enum'/>
+ <exports symbol='XML_READER_TYPE_NONE' type='enum'/>
+ <exports symbol='XML_PARSER_SEVERITY_VALIDITY_ERROR' type='enum'/>
+ <exports symbol='XML_PARSER_VALIDATE' type='enum'/>
+ <exports symbol='XML_PARSER_SEVERITY_WARNING' type='enum'/>
+ <exports symbol='XML_PARSER_SEVERITY_VALIDITY_WARNING' type='enum'/>
+ <exports symbol='XML_READER_TYPE_ATTRIBUTE' type='enum'/>
+ <exports symbol='XML_READER_TYPE_ELEMENT' type='enum'/>
+ <exports symbol='XML_READER_TYPE_DOCUMENT' type='enum'/>
+ <exports symbol='XML_READER_TYPE_DOCUMENT_TYPE' type='enum'/>
+ <exports symbol='XML_READER_TYPE_CDATA' type='enum'/>
+ <exports symbol='XML_READER_TYPE_END_ELEMENT' type='enum'/>
+ <exports symbol='XML_READER_TYPE_WHITESPACE' type='enum'/>
+ <exports symbol='XML_READER_TYPE_NOTATION' type='enum'/>
+ <exports symbol='XML_PARSER_SUBST_ENTITIES' type='enum'/>
+ <exports symbol='XML_READER_TYPE_ENTITY_REFERENCE' type='enum'/>
+ <exports symbol='xmlParserProperties' type='typedef'/>
+ <exports symbol='xmlTextReaderPtr' type='typedef'/>
+ <exports symbol='xmlParserSeverities' type='typedef'/>
+ <exports symbol='xmlTextReader' type='typedef'/>
+ <exports symbol='xmlTextReaderLocatorPtr' type='typedef'/>
+ <exports symbol='xmlReaderTypes' type='typedef'/>
+ <exports symbol='xmlTextReaderBaseUri' type='function'/>
+ <exports symbol='xmlTextReaderValue' type='function'/>
+ <exports symbol='xmlNewTextReaderFilename' type='function'/>
+ <exports symbol='xmlTextReaderRead' type='function'/>
+ <exports symbol='xmlTextReaderReadString' type='function'/>
+ <exports symbol='xmlTextReaderMoveToAttributeNo' type='function'/>
+ <exports symbol='xmlTextReaderDepth' type='function'/>
+ <exports symbol='xmlTextReaderErrorFunc' type='function'/>
+ <exports symbol='xmlTextReaderHasAttributes' type='function'/>
+ <exports symbol='xmlReaderNewWalker' type='function'/>
+ <exports symbol='xmlTextReaderSetErrorHandler' type='function'/>
+ <exports symbol='xmlTextReaderLocatorLineNumber' type='function'/>
+ <exports symbol='xmlTextReaderLookupNamespace' type='function'/>
+ <exports symbol='xmlTextReaderMoveToAttributeNs' type='function'/>
+ <exports symbol='xmlTextReaderNext' type='function'/>
+ <exports symbol='xmlTextReaderReadAttributeValue' type='function'/>
+ <exports symbol='xmlTextReaderIsDefault' type='function'/>
+ <exports symbol='xmlReaderForFile' type='function'/>
+ <exports symbol='xmlTextReaderConstNamespaceUri' type='function'/>
+ <exports symbol='xmlTextReaderMoveToNextAttribute' type='function'/>
+ <exports symbol='xmlTextReaderQuoteChar' type='function'/>
+ <exports symbol='xmlTextReaderReadOuterXml' type='function'/>
+ <exports symbol='xmlTextReaderNamespaceUri' type='function'/>
+ <exports symbol='xmlTextReaderExpand' type='function'/>
+ <exports symbol='xmlReaderNewDoc' type='function'/>
+ <exports symbol='xmlTextReaderXmlLang' type='function'/>
+ <exports symbol='xmlReaderForDoc' type='function'/>
+ <exports symbol='xmlReaderNewIO' type='function'/>
+ <exports symbol='xmlTextReaderMoveToElement' type='function'/>
+ <exports symbol='xmlTextReaderSetStructuredErrorHandler' type='function'/>
+ <exports symbol='xmlTextReaderClose' type='function'/>
+ <exports symbol='xmlTextReaderReadInnerXml' type='function'/>
+ <exports symbol='xmlReaderWalker' type='function'/>
+ <exports symbol='xmlReaderForIO' type='function'/>
+ <exports symbol='xmlTextReaderIsValid' type='function'/>
+ <exports symbol='xmlTextReaderConstXmlLang' type='function'/>
+ <exports symbol='xmlTextReaderConstString' type='function'/>
+ <exports symbol='xmlTextReaderNodeType' type='function'/>
+ <exports symbol='xmlTextReaderNormalization' type='function'/>
+ <exports symbol='xmlTextReaderGetErrorHandler' type='function'/>
+ <exports symbol='xmlTextReaderConstPrefix' type='function'/>
+ <exports symbol='xmlTextReaderGetParserProp' type='function'/>
+ <exports symbol='xmlTextReaderGetRemainder' type='function'/>
+ <exports symbol='xmlReaderNewFile' type='function'/>
+ <exports symbol='xmlFreeTextReader' type='function'/>
+ <exports symbol='xmlTextReaderMoveToAttribute' type='function'/>
+ <exports symbol='xmlTextReaderRelaxNGSetSchema' type='function'/>
+ <exports symbol='xmlTextReaderName' type='function'/>
+ <exports symbol='xmlReaderNewFd' type='function'/>
+ <exports symbol='xmlTextReaderNextSibling' type='function'/>
+ <exports symbol='xmlTextReaderRelaxNGValidate' type='function'/>
+ <exports symbol='xmlTextReaderIsEmptyElement' type='function'/>
+ <exports symbol='xmlTextReaderCurrentDoc' type='function'/>
+ <exports symbol='xmlReaderForMemory' type='function'/>
+ <exports symbol='xmlTextReaderConstBaseUri' type='function'/>
+ <exports symbol='xmlReaderForFd' type='function'/>
+ <exports symbol='xmlTextReaderMoveToFirstAttribute' type='function'/>
+ <exports symbol='xmlTextReaderPrefix' type='function'/>
+ <exports symbol='xmlTextReaderPreservePattern' type='function'/>
+ <exports symbol='xmlTextReaderLocatorBaseURI' type='function'/>
+ <exports symbol='xmlTextReaderGetAttribute' type='function'/>
+ <exports symbol='xmlReaderNewMemory' type='function'/>
+ <exports symbol='xmlTextReaderConstValue' type='function'/>
+ <exports symbol='xmlNewTextReader' type='function'/>
+ <exports symbol='xmlTextReaderGetAttributeNo' type='function'/>
+ <exports symbol='xmlTextReaderLocalName' type='function'/>
+ <exports symbol='xmlTextReaderGetAttributeNs' type='function'/>
+ <exports symbol='xmlTextReaderConstName' type='function'/>
+ <exports symbol='xmlTextReaderHasValue' type='function'/>
+ <exports symbol='xmlTextReaderPreserve' type='function'/>
+ <exports symbol='xmlTextReaderAttributeCount' type='function'/>
+ <exports symbol='xmlTextReaderReadState' type='function'/>
+ <exports symbol='xmlTextReaderCurrentNode' type='function'/>
+ <exports symbol='xmlTextReaderConstLocalName' type='function'/>
+ <exports symbol='xmlTextReaderSetParserProp' type='function'/>
+ </file>
+ <file name='xmlregexp'>
+ <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='xmlRegExecCtxtPtr' type='typedef'/>
+ <exports symbol='xmlRegexp' type='typedef'/>
+ <exports symbol='xmlRegexpPtr' type='typedef'/>
+ <exports symbol='xmlRegExecCtxt' type='typedef'/>
+ <exports symbol='xmlRegFreeExecCtxt' type='function'/>
+ <exports symbol='xmlRegexpCompile' type='function'/>
+ <exports symbol='xmlRegExecCallbacks' type='function'/>
+ <exports symbol='xmlRegNewExecCtxt' type='function'/>
+ <exports symbol='xmlRegexpIsDeterminist' type='function'/>
+ <exports symbol='xmlRegExecPushString2' type='function'/>
+ <exports symbol='xmlRegExecPushString' type='function'/>
+ <exports symbol='xmlRegexpExec' type='function'/>
+ <exports symbol='xmlRegFreeRegexp' 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='xmlSaveCtxt' type='typedef'/>
+ <exports symbol='xmlSaveCtxtPtr' type='typedef'/>
+ <exports symbol='xmlSaveToIO' type='function'/>
+ <exports symbol='xmlSaveToBuffer' type='function'/>
+ <exports symbol='xmlSaveToFd' type='function'/>
+ <exports symbol='xmlSaveToFilename' type='function'/>
+ <exports symbol='xmlSaveClose' type='function'/>
+ <exports symbol='xmlSaveFlush' type='function'/>
+ <exports symbol='xmlSaveDoc' type='function'/>
+ <exports symbol='xmlSaveTree' type='function'/>
+ </file>
+ <file name='xmlschemas'>
+ <summary>incomplete XML Schemas structure implementation</summary>
+ <description>interface to the XML Schemas handling and schema validity checking, it is incomplete right now. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_SCHEMAS_ERR_NOTNILLABLE' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_OK' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_NOROLLBACK' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_XXX' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_VALUE' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_NOTTOPLEVEL' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_NOTEMPTY' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_NOROOT' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_INVALIDELEM' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_ISABSTRACT' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_ATTRINVALID' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_ATTRUNKNOWN' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_EXTRACONTENT' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_NOTDETERMINIST' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_NOTSIMPLE' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_INTERNAL' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_UNDECLAREDELEM' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_WRONGELEM' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_MISSING' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_INVALIDATTR' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_HAVEDEFAULT' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_CONSTRUCT' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_FACET' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_ELEMCONT' type='enum'/>
+ <exports symbol='XML_SCHEMAS_ERR_NOTYPE' type='enum'/>
+ <exports symbol='xmlSchemaPtr' type='typedef'/>
+ <exports symbol='xmlSchemaParserCtxt' type='typedef'/>
+ <exports symbol='xmlSchemaValidCtxtPtr' type='typedef'/>
+ <exports symbol='xmlSchemaParserCtxtPtr' type='typedef'/>
+ <exports symbol='xmlSchema' type='typedef'/>
+ <exports symbol='xmlSchemaValidError' type='typedef'/>
+ <exports symbol='xmlSchemaValidCtxt' type='typedef'/>
+ <exports symbol='xmlSchemaValidateStream' type='function'/>
+ <exports symbol='xmlSchemaSetParserErrors' type='function'/>
+ <exports symbol='xmlSchemaValidityWarningFunc' type='function'/>
+ <exports symbol='xmlSchemaValidateDoc' type='function'/>
+ <exports symbol='xmlSchemaNewDocParserCtxt' type='function'/>
+ <exports symbol='xmlSchemaFree' type='function'/>
+ <exports symbol='xmlSchemaNewParserCtxt' type='function'/>
+ <exports symbol='xmlSchemaParse' type='function'/>
+ <exports symbol='xmlSchemaNewMemParserCtxt' type='function'/>
+ <exports symbol='xmlSchemaFreeParserCtxt' type='function'/>
+ <exports symbol='xmlSchemaFreeValidCtxt' type='function'/>
+ <exports symbol='xmlSchemaNewValidCtxt' type='function'/>
+ <exports symbol='xmlSchemaDump' type='function'/>
+ <exports symbol='xmlSchemaSetValidErrors' type='function'/>
+ <exports symbol='xmlSchemaValidityErrorFunc' type='function'/>
+ </file>
+ <file name='xmlschemastypes'>
+ <summary>implementation of XML Schema Datatypes</summary>
+ <description>module providing the XML Schema Datatypes implementation both definition and validity checking </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlSchemaNewFacet' type='function'/>
+ <exports symbol='xmlSchemaValPredefTypeNode' type='function'/>
+ <exports symbol='xmlSchemaFreeFacet' type='function'/>
+ <exports symbol='xmlSchemaValidatePredefinedType' type='function'/>
+ <exports symbol='xmlSchemaCompareValues' type='function'/>
+ <exports symbol='xmlSchemaValidateFacet' type='function'/>
+ <exports symbol='xmlSchemaCleanupTypes' type='function'/>
+ <exports symbol='xmlSchemaInitTypes' type='function'/>
+ <exports symbol='xmlSchemaFreeValue' type='function'/>
+ <exports symbol='xmlSchemaGetPredefinedType' type='function'/>
+ <exports symbol='xmlSchemaCheckFacet' type='function'/>
+ </file>
+ <file name='xmlstring'>
+ <summary>set of routines to process strings</summary>
+ <description>type and interfaces needed for the internal string handling of the library, especially UTF8 processing. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='BAD_CAST' type='macro'/>
+ <exports symbol='xmlChar' type='typedef'/>
+ <exports symbol='xmlStrcmp' type='function'/>
+ <exports symbol='xmlStrncmp' type='function'/>
+ <exports symbol='xmlUTF8Strloc' type='function'/>
+ <exports symbol='xmlCharStrndup' type='function'/>
+ <exports symbol='xmlStrsub' type='function'/>
+ <exports symbol='xmlStrncat' type='function'/>
+ <exports symbol='xmlGetUTF8Char' type='function'/>
+ <exports symbol='xmlStrcasestr' type='function'/>
+ <exports symbol='xmlStrcat' type='function'/>
+ <exports symbol='xmlStrcasecmp' type='function'/>
+ <exports symbol='xmlStrstr' type='function'/>
+ <exports symbol='xmlStrPrintf' type='function'/>
+ <exports symbol='xmlStrndup' type='function'/>
+ <exports symbol='xmlStrVPrintf' type='function'/>
+ <exports symbol='xmlUTF8Size' type='function'/>
+ <exports symbol='xmlCheckUTF8' type='function'/>
+ <exports symbol='xmlStrQEqual' type='function'/>
+ <exports symbol='xmlStrncasecmp' type='function'/>
+ <exports symbol='xmlUTF8Strlen' type='function'/>
+ <exports symbol='xmlUTF8Strsub' type='function'/>
+ <exports symbol='xmlStrncatNew' type='function'/>
+ <exports symbol='xmlUTF8Strpos' type='function'/>
+ <exports symbol='xmlStrEqual' type='function'/>
+ <exports symbol='xmlStrlen' type='function'/>
+ <exports symbol='xmlUTF8Charcmp' type='function'/>
+ <exports symbol='xmlUTF8Strndup' type='function'/>
+ <exports symbol='xmlUTF8Strsize' type='function'/>
+ <exports symbol='xmlStrdup' type='function'/>
+ <exports symbol='xmlCharStrdup' type='function'/>
+ <exports symbol='xmlStrchr' type='function'/>
+ </file>
+ <file name='xmlunicode'>
+ <summary>Unicode character APIs</summary>
+ <description>API for the Unicode character APIs This file is automatically generated from the UCS description files of the Unicode Character Database</description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlUCSIsBlockElements' type='function'/>
+ <exports symbol='xmlUCSIsVariationSelectorsSupplement' type='function'/>
+ <exports symbol='xmlUCSIsTags' type='function'/>
+ <exports symbol='xmlUCSIsEnclosedAlphanumerics' type='function'/>
+ <exports symbol='xmlUCSIsBopomofo' type='function'/>
+ <exports symbol='xmlUCSIsSinhala' type='function'/>
+ <exports symbol='xmlUCSIsDingbats' type='function'/>
+ <exports symbol='xmlUCSIsLatinExtendedB' type='function'/>
+ <exports symbol='xmlUCSIsCombiningHalfMarks' type='function'/>
+ <exports symbol='xmlUCSIsSupplementalArrowsA' type='function'/>
+ <exports symbol='xmlUCSIsLatinExtendedA' type='function'/>
+ <exports symbol='xmlUCSIsYiRadicals' type='function'/>
+ <exports symbol='xmlUCSIsCombiningDiacriticalMarks' type='function'/>
+ <exports symbol='xmlUCSIsCombiningMarksforSymbols' type='function'/>
+ <exports symbol='xmlUCSIsHalfwidthandFullwidthForms' type='function'/>
+ <exports symbol='xmlUCSIsBasicLatin' type='function'/>
+ <exports symbol='xmlUCSIsOldItalic' type='function'/>
+ <exports symbol='xmlUCSIsLimbu' type='function'/>
+ <exports symbol='xmlUCSIsCat' type='function'/>
+ <exports symbol='xmlUCSIsCatSo' type='function'/>
+ <exports symbol='xmlUCSIsCatLu' type='function'/>
+ <exports symbol='xmlUCSIsCatLt' type='function'/>
+ <exports symbol='xmlUCSIsYiSyllables' type='function'/>
+ <exports symbol='xmlUCSIsCatSk' type='function'/>
+ <exports symbol='xmlUCSIsCatLo' type='function'/>
+ <exports symbol='xmlUCSIsKhmerSymbols' type='function'/>
+ <exports symbol='xmlUCSIsCatLm' type='function'/>
+ <exports symbol='xmlUCSIsAlphabeticPresentationForms' type='function'/>
+ <exports symbol='xmlUCSIsMiscellaneousTechnical' type='function'/>
+ <exports symbol='xmlUCSIsMongolian' type='function'/>
+ <exports symbol='xmlUCSIsUgaritic' type='function'/>
+ <exports symbol='xmlUCSIsCJKCompatibilityIdeographsSupplement' type='function'/>
+ <exports symbol='xmlUCSIsKannada' type='function'/>
+ <exports symbol='xmlUCSIsMalayalam' type='function'/>
+ <exports symbol='xmlUCSIsCypriotSyllabary' type='function'/>
+ <exports symbol='xmlUCSIsTamil' type='function'/>
+ <exports symbol='xmlUCSIsCatC' type='function'/>
+ <exports symbol='xmlUCSIsUnifiedCanadianAboriginalSyllabics' type='function'/>
+ <exports symbol='xmlUCSIsCatN' type='function'/>
+ <exports symbol='xmlUCSIsCatLl' type='function'/>
+ <exports symbol='xmlUCSIsCatL' type='function'/>
+ <exports symbol='xmlUCSIsCatM' type='function'/>
+ <exports symbol='xmlUCSIsTelugu' type='function'/>
+ <exports symbol='xmlUCSIsMathematicalAlphanumericSymbols' type='function'/>
+ <exports symbol='xmlUCSIsLowSurrogates' type='function'/>
+ <exports symbol='xmlUCSIsOsmanya' type='function'/>
+ <exports symbol='xmlUCSIsGreek' type='function'/>
+ <exports symbol='xmlUCSIsEthiopic' type='function'/>
+ <exports symbol='xmlUCSIsCatP' type='function'/>
+ <exports symbol='xmlUCSIsBoxDrawing' type='function'/>
+ <exports symbol='xmlUCSIsGeorgian' type='function'/>
+ <exports symbol='xmlUCSIsOgham' type='function'/>
+ <exports symbol='xmlUCSIsCatZ' type='function'/>
+ <exports symbol='xmlUCSIsGreekandCoptic' type='function'/>
+ <exports symbol='xmlUCSIsIPAExtensions' type='function'/>
+ <exports symbol='xmlUCSIsByzantineMusicalSymbols' type='function'/>
+ <exports symbol='xmlUCSIsKangxiRadicals' type='function'/>
+ <exports symbol='xmlUCSIsEnclosedCJKLettersandMonths' type='function'/>
+ <exports symbol='xmlUCSIsCJKCompatibilityForms' type='function'/>
+ <exports symbol='xmlUCSIsCatCs' type='function'/>
+ <exports symbol='xmlUCSIsHanunoo' type='function'/>
+ <exports symbol='xmlUCSIsGreekExtended' type='function'/>
+ <exports symbol='xmlUCSIsCJKRadicalsSupplement' type='function'/>
+ <exports symbol='xmlUCSIsArmenian' type='function'/>
+ <exports symbol='xmlUCSIsCatCf' type='function'/>
+ <exports symbol='xmlUCSIsSmallFormVariants' type='function'/>
+ <exports symbol='xmlUCSIsHangulCompatibilityJamo' type='function'/>
+ <exports symbol='xmlUCSIsSupplementaryPrivateUseAreaB' type='function'/>
+ <exports symbol='xmlUCSIsCatCc' type='function'/>
+ <exports symbol='xmlUCSIsSupplementaryPrivateUseAreaA' type='function'/>
+ <exports symbol='xmlUCSIsCatCo' type='function'/>
+ <exports symbol='xmlUCSIsCherokee' type='function'/>
+ <exports symbol='xmlUCSIsCatPe' type='function'/>
+ <exports symbol='xmlUCSIsKatakanaPhoneticExtensions' type='function'/>
+ <exports symbol='xmlUCSIsLinearBSyllabary' type='function'/>
+ <exports symbol='xmlUCSIsGothic' type='function'/>
+ <exports symbol='xmlUCSIsLetterlikeSymbols' type='function'/>
+ <exports symbol='xmlUCSIsKhmer' type='function'/>
+ <exports symbol='xmlUCSIsCatNd' type='function'/>
+ <exports symbol='xmlUCSIsPhoneticExtensions' type='function'/>
+ <exports symbol='xmlUCSIsTaiLe' type='function'/>
+ <exports symbol='xmlUCSIsArabic' type='function'/>
+ <exports symbol='xmlUCSIsHebrew' type='function'/>
+ <exports symbol='xmlUCSIsMiscellaneousMathematicalSymbolsB' type='function'/>
+ <exports symbol='xmlUCSIsCombiningDiacriticalMarksforSymbols' type='function'/>
+ <exports symbol='xmlUCSIsVariationSelectors' type='function'/>
+ <exports symbol='xmlUCSIsArabicPresentationFormsA' type='function'/>
+ <exports symbol='xmlUCSIsCatZp' type='function'/>
+ <exports symbol='xmlUCSIsCatZs' type='function'/>
+ <exports symbol='xmlUCSIsArabicPresentationFormsB' type='function'/>
+ <exports symbol='xmlUCSIsGeometricShapes' type='function'/>
+ <exports symbol='xmlUCSIsCatZl' type='function'/>
+ <exports symbol='xmlUCSIsTagalog' type='function'/>
+ <exports symbol='xmlUCSIsSpecials' type='function'/>
+ <exports symbol='xmlUCSIsGujarati' type='function'/>
+ <exports symbol='xmlUCSIsLinearBIdeograms' type='function'/>
+ <exports symbol='xmlUCSIsMiscellaneousMathematicalSymbolsA' type='function'/>
+ <exports symbol='xmlUCSIsBlock' type='function'/>
+ <exports symbol='xmlUCSIsBopomofoExtended' type='function'/>
+ <exports symbol='xmlUCSIsThaana' type='function'/>
+ <exports symbol='xmlUCSIsIdeographicDescriptionCharacters' type='function'/>
+ <exports symbol='xmlUCSIsHangulJamo' type='function'/>
+ <exports symbol='xmlUCSIsShavian' type='function'/>
+ <exports symbol='xmlUCSIsTagbanwa' type='function'/>
+ <exports symbol='xmlUCSIsGeneralPunctuation' type='function'/>
+ <exports symbol='xmlUCSIsCyrillic' type='function'/>
+ <exports symbol='xmlUCSIsArrows' type='function'/>
+ <exports symbol='xmlUCSIsControlPictures' type='function'/>
+ <exports symbol='xmlUCSIsYijingHexagramSymbols' type='function'/>
+ <exports symbol='xmlUCSIsCJKUnifiedIdeographs' type='function'/>
+ <exports symbol='xmlUCSIsCatNl' type='function'/>
+ <exports symbol='xmlUCSIsCatNo' type='function'/>
+ <exports symbol='xmlUCSIsDeseret' type='function'/>
+ <exports symbol='xmlUCSIsCatSm' type='function'/>
+ <exports symbol='xmlUCSIsBengali' type='function'/>
+ <exports symbol='xmlUCSIsPrivateUse' type='function'/>
+ <exports symbol='xmlUCSIsMusicalSymbols' type='function'/>
+ <exports symbol='xmlUCSIsBuhid' type='function'/>
+ <exports symbol='xmlUCSIsHangulSyllables' type='function'/>
+ <exports symbol='xmlUCSIsCJKCompatibility' type='function'/>
+ <exports symbol='xmlUCSIsCJKCompatibilityIdeographs' type='function'/>
+ <exports symbol='xmlUCSIsOpticalCharacterRecognition' type='function'/>
+ <exports symbol='xmlUCSIsLatin1Supplement' type='function'/>
+ <exports symbol='xmlUCSIsAegeanNumbers' type='function'/>
+ <exports symbol='xmlUCSIsKatakana' type='function'/>
+ <exports symbol='xmlUCSIsCJKSymbolsandPunctuation' type='function'/>
+ <exports symbol='xmlUCSIsTaiXuanJingSymbols' type='function'/>
+ <exports symbol='xmlUCSIsGurmukhi' type='function'/>
+ <exports symbol='xmlUCSIsMiscellaneousSymbols' type='function'/>
+ <exports symbol='xmlUCSIsDevanagari' type='function'/>
+ <exports symbol='xmlUCSIsPrivateUseArea' type='function'/>
+ <exports symbol='xmlUCSIsMathematicalOperators' type='function'/>
+ <exports symbol='xmlUCSIsMiscellaneousSymbolsandArrows' type='function'/>
+ <exports symbol='xmlUCSIsSupplementalArrowsB' type='function'/>
+ <exports symbol='xmlUCSIsCurrencySymbols' type='function'/>
+ <exports symbol='xmlUCSIsNumberForms' type='function'/>
+ <exports symbol='xmlUCSIsTibetan' type='function'/>
+ <exports symbol='xmlUCSIsSupplementalMathematicalOperators' type='function'/>
+ <exports symbol='xmlUCSIsCJKUnifiedIdeographsExtensionA' type='function'/>
+ <exports symbol='xmlUCSIsKanbun' type='function'/>
+ <exports symbol='xmlUCSIsCJKUnifiedIdeographsExtensionB' type='function'/>
+ <exports symbol='xmlUCSIsThai' type='function'/>
+ <exports symbol='xmlUCSIsSpacingModifierLetters' type='function'/>
+ <exports symbol='xmlUCSIsRunic' type='function'/>
+ <exports symbol='xmlUCSIsCatSc' type='function'/>
+ <exports symbol='xmlUCSIsCatPc' type='function'/>
+ <exports symbol='xmlUCSIsCatMc' type='function'/>
+ <exports symbol='xmlUCSIsCatPf' type='function'/>
+ <exports symbol='xmlUCSIsCyrillicSupplement' type='function'/>
+ <exports symbol='xmlUCSIsCatPd' type='function'/>
+ <exports symbol='xmlUCSIsMyanmar' type='function'/>
+ <exports symbol='xmlUCSIsCatPi' type='function'/>
+ <exports symbol='xmlUCSIsHiragana' type='function'/>
+ <exports symbol='xmlUCSIsCatPo' type='function'/>
+ <exports symbol='xmlUCSIsHighPrivateUseSurrogates' type='function'/>
+ <exports symbol='xmlUCSIsLatinExtendedAdditional' type='function'/>
+ <exports symbol='xmlUCSIsCatPs' type='function'/>
+ <exports symbol='xmlUCSIsSyriac' type='function'/>
+ <exports symbol='xmlUCSIsSuperscriptsandSubscripts' type='function'/>
+ <exports symbol='xmlUCSIsHighSurrogates' type='function'/>
+ <exports symbol='xmlUCSIsCatMn' type='function'/>
+ <exports symbol='xmlUCSIsLao' type='function'/>
+ <exports symbol='xmlUCSIsOriya' type='function'/>
+ <exports symbol='xmlUCSIsBraillePatterns' type='function'/>
+ <exports symbol='xmlUCSIsCatMe' type='function'/>
+ <exports symbol='xmlUCSIsCatS' type='function'/>
+ </file>
+ <file name='xmlversion'>
+ <summary>compile-time version informations</summary>
+ <description>compile-time version informations for the XML library </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='LIBXML_VERSION_STRING' type='macro'/>
+ <exports symbol='LIBXML_DOCB_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_CATALOG_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_LEGACY_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_REGEXP_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_XPTR_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_READER_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_ICONV_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_HTML_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_DOTTED_VERSION' type='macro'/>
+ <exports symbol='LIBXML_UNICODE_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_ISO8859X_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_DEBUG_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_XINCLUDE_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_FTP_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_AUTOMATA_ENABLED' type='macro'/>
+ <exports symbol='ATTRIBUTE_UNUSED' type='macro'/>
+ <exports symbol='LIBXML_WRITER_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_PUSH_ENABLED' type='macro'/>
+ <exports symbol='WITHOUT_TRIO' type='macro'/>
+ <exports symbol='LIBXML_C14N_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_SCHEMAS_ENABLED' type='macro'/>
+ <exports symbol='DEBUG_MEMORY_LOCATION' type='macro'/>
+ <exports symbol='LIBXML_SAX1_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_TEST_VERSION' type='macro'/>
+ <exports symbol='LIBXML_HTTP_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_OUTPUT_ENABLED' type='macro'/>
+ <exports symbol='WITH_TRIO' type='macro'/>
+ <exports symbol='LIBXML_THREAD_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_XPATH_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_VERSION' type='macro'/>
+ <exports symbol='LIBXML_VALID_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_TREE_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_PATTERN_ENABLED' type='macro'/>
+ <exports symbol='xmlCheckVersion' type='function'/>
+ </file>
+ <file name='xmlwriter'>
+ <summary>text writing API for XML</summary>
+ <description>text writing API for XML </description>
+ <author>Alfred Mickautsch &lt;alfred@mickautsch.de&gt; </author>
+ <exports symbol='xmlTextWriterWriteProcessingInstruction' type='macro'/>
+ <exports symbol='xmlTextWriterWriteDocType' type='macro'/>
+ <exports symbol='xmlTextWriter' type='typedef'/>
+ <exports symbol='xmlTextWriterPtr' type='typedef'/>
+ <exports symbol='xmlTextWriterStartDocument' type='function'/>
+ <exports symbol='xmlTextWriterEndPI' type='function'/>
+ <exports symbol='xmlTextWriterWriteBase64' type='function'/>
+ <exports symbol='xmlTextWriterSetIndentString' type='function'/>
+ <exports symbol='xmlTextWriterStartAttribute' type='function'/>
+ <exports symbol='xmlTextWriterEndComment' type='function'/>
+ <exports symbol='xmlTextWriterWriteRawLen' type='function'/>
+ <exports symbol='xmlTextWriterWriteDTDExternalEntityContents' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatCDATA' type='function'/>
+ <exports symbol='xmlTextWriterStartAttributeNS' type='function'/>
+ <exports symbol='xmlNewTextWriterPushParser' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatAttributeNS' type='function'/>
+ <exports symbol='xmlTextWriterWriteDTDEntity' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatPI' type='function'/>
+ <exports symbol='xmlTextWriterWriteBinHex' type='function'/>
+ <exports symbol='xmlTextWriterEndAttribute' type='function'/>
+ <exports symbol='xmlTextWriterSetIndent' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatPI' type='function'/>
+ <exports symbol='xmlTextWriterWriteDTDAttlist' type='function'/>
+ <exports symbol='xmlTextWriterStartComment' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatDTD' type='function'/>
+ <exports symbol='xmlTextWriterEndCDATA' type='function'/>
+ <exports symbol='xmlTextWriterStartElementNS' type='function'/>
+ <exports symbol='xmlTextWriterEndDTDEntity' type='function'/>
+ <exports symbol='xmlNewTextWriter' type='function'/>
+ <exports symbol='xmlFreeTextWriter' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatDTDAttlist' type='function'/>
+ <exports symbol='xmlTextWriterStartPI' type='function'/>
+ <exports symbol='xmlTextWriterStartElement' type='function'/>
+ <exports symbol='xmlTextWriterWriteDTDExternalEntity' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatRaw' type='function'/>
+ <exports symbol='xmlTextWriterWritePI' type='function'/>
+ <exports symbol='xmlTextWriterWriteCDATA' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatDTDInternalEntity' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatAttribute' type='function'/>
+ <exports symbol='xmlTextWriterEndDTDElement' type='function'/>
+ <exports symbol='xmlTextWriterWriteComment' type='function'/>
+ <exports symbol='xmlTextWriterWriteElement' type='function'/>
+ <exports symbol='xmlTextWriterEndElement' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatComment' type='function'/>
+ <exports symbol='xmlTextWriterStartCDATA' type='function'/>
+ <exports symbol='xmlNewTextWriterFilename' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatElement' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatComment' type='function'/>
+ <exports symbol='xmlTextWriterWriteAttributeNS' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatDTDInternalEntity' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatRaw' type='function'/>
+ <exports symbol='xmlTextWriterEndDocument' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatString' type='function'/>
+ <exports symbol='xmlTextWriterWriteDTDInternalEntity' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatElementNS' type='function'/>
+ <exports symbol='xmlTextWriterWriteDTDNotation' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatElement' type='function'/>
+ <exports symbol='xmlTextWriterWriteElementNS' type='function'/>
+ <exports symbol='xmlTextWriterWriteString' type='function'/>
+ <exports symbol='xmlTextWriterFullEndElement' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatAttributeNS' type='function'/>
+ <exports symbol='xmlTextWriterFlush' type='function'/>
+ <exports symbol='xmlTextWriterStartDTD' type='function'/>
+ <exports symbol='xmlTextWriterWriteAttribute' type='function'/>
+ <exports symbol='xmlNewTextWriterDoc' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatDTDElement' type='function'/>
+ <exports symbol='xmlTextWriterEndDTDAttlist' type='function'/>
+ <exports symbol='xmlNewTextWriterTree' type='function'/>
+ <exports symbol='xmlNewTextWriterMemory' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatCDATA' type='function'/>
+ <exports symbol='xmlTextWriterStartDTDAttlist' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatString' type='function'/>
+ <exports symbol='xmlTextWriterEndDTD' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatDTD' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatDTDAttlist' type='function'/>
+ <exports symbol='xmlTextWriterWriteRaw' type='function'/>
+ <exports symbol='xmlTextWriterWriteDTDElement' type='function'/>
+ <exports symbol='xmlTextWriterWriteDTD' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatAttribute' type='function'/>
+ <exports symbol='xmlTextWriterStartDTDEntity' type='function'/>
+ <exports symbol='xmlTextWriterWriteVFormatDTDElement' type='function'/>
+ <exports symbol='xmlTextWriterStartDTDElement' type='function'/>
+ <exports symbol='xmlTextWriterWriteFormatElementNS' type='function'/>
+ </file>
+ <file name='xpath'>
+ <summary>XML Path Language implementation</summary>
+ <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='xmlXPathNodeSetItem' type='macro'/>
+ <exports symbol='XPATH_NUMBER_ERROR' type='enum'/>
+ <exports symbol='XPATH_UNKNOWN_FUNC_ERROR' type='enum'/>
+ <exports symbol='XPATH_BOOLEAN' type='enum'/>
+ <exports symbol='XPATH_START_LITERAL_ERROR' type='enum'/>
+ <exports symbol='XPATH_RANGE' type='enum'/>
+ <exports symbol='XPTR_SYNTAX_ERROR' type='enum'/>
+ <exports symbol='XPATH_LOCATIONSET' type='enum'/>
+ <exports symbol='XPATH_INVALID_CHAR_ERROR' type='enum'/>
+ <exports symbol='XPATH_UNDEF_VARIABLE_ERROR' type='enum'/>
+ <exports symbol='XPATH_UNCLOSED_ERROR' type='enum'/>
+ <exports symbol='XPATH_POINT' type='enum'/>
+ <exports symbol='XPATH_INVALID_ARITY' type='enum'/>
+ <exports symbol='XPATH_STRING' type='enum'/>
+ <exports symbol='XPATH_EXPRESSION_OK' type='enum'/>
+ <exports symbol='XPATH_NODESET' type='enum'/>
+ <exports symbol='XPTR_SUB_RESOURCE_ERROR' type='enum'/>
+ <exports symbol='XPATH_INVALID_PREDICATE_ERROR' type='enum'/>
+ <exports symbol='XPATH_XSLT_TREE' type='enum'/>
+ <exports symbol='XPATH_EXPR_ERROR' type='enum'/>
+ <exports symbol='XPATH_VARIABLE_REF_ERROR' type='enum'/>
+ <exports symbol='XPATH_INVALID_TYPE' type='enum'/>
+ <exports symbol='XPATH_INVALID_CTXT_SIZE' type='enum'/>
+ <exports symbol='XPATH_INVALID_CTXT_POSITION' type='enum'/>
+ <exports symbol='XPATH_UNDEFINED' type='enum'/>
+ <exports symbol='XPATH_MEMORY_ERROR' type='enum'/>
+ <exports symbol='XPATH_UNFINISHED_LITERAL_ERROR' type='enum'/>
+ <exports symbol='XPATH_NUMBER' type='enum'/>
+ <exports symbol='XPATH_UNDEF_PREFIX_ERROR' type='enum'/>
+ <exports symbol='XPATH_ENCODING_ERROR' type='enum'/>
+ <exports symbol='XPATH_USERS' type='enum'/>
+ <exports symbol='XPATH_INVALID_OPERAND' type='enum'/>
+ <exports symbol='XPTR_RESOURCE_ERROR' type='enum'/>
+ <exports symbol='xmlXPathObjectType' type='typedef'/>
+ <exports symbol='xmlXPathVariablePtr' type='typedef'/>
+ <exports symbol='xmlXPathContext' type='typedef'/>
+ <exports symbol='xmlXPathFuncPtr' type='typedef'/>
+ <exports symbol='xmlXPathObjectPtr' type='typedef'/>
+ <exports symbol='xmlXPathTypePtr' type='typedef'/>
+ <exports symbol='xmlXPathType' type='typedef'/>
+ <exports symbol='xmlXPathAxisPtr' type='typedef'/>
+ <exports symbol='xmlXPathFunct' type='typedef'/>
+ <exports symbol='xmlXPathCompExprPtr' type='typedef'/>
+ <exports symbol='xmlXPathError' type='typedef'/>
+ <exports symbol='xmlXPathObject' type='typedef'/>
+ <exports symbol='xmlXPathCompExpr' type='typedef'/>
+ <exports symbol='xmlXPathContextPtr' type='typedef'/>
+ <exports symbol='xmlXPathParserContextPtr' type='typedef'/>
+ <exports symbol='xmlNodeSet' type='typedef'/>
+ <exports symbol='xmlXPathVariable' type='typedef'/>
+ <exports symbol='xmlXPathAxis' type='typedef'/>
+ <exports symbol='xmlNodeSetPtr' type='typedef'/>
+ <exports symbol='xmlXPathParserContext' type='typedef'/>
+ <exports symbol='_xmlXPathFunct' type='struct'/>
+ <exports symbol='_xmlXPathVariable' type='struct'/>
+ <exports symbol='_xmlXPathObject' type='struct'/>
+ <exports symbol='_xmlXPathParserContext' type='struct'/>
+ <exports symbol='_xmlXPathContext' type='struct'/>
+ <exports symbol='_xmlXPathAxis' type='struct'/>
+ <exports symbol='_xmlXPathType' type='struct'/>
+ <exports symbol='_xmlNodeSet' type='struct'/>
+ <exports symbol='xmlXPathNAN' type='variable'/>
+ <exports symbol='xmlXPathPINF' type='variable'/>
+ <exports symbol='xmlXPathNINF' type='variable'/>
+ <exports symbol='xmlXPathCastNodeSetToString' type='function'/>
+ <exports symbol='xmlXPathCastNodeSetToBoolean' type='function'/>
+ <exports symbol='xmlXPathCompiledEval' type='function'/>
+ <exports symbol='xmlXPathCastNodeToString' type='function'/>
+ <exports symbol='xmlXPathEvalExpression' type='function'/>
+ <exports symbol='xmlXPathConvertString' type='function'/>
+ <exports symbol='xmlXPathConvertBoolean' type='function'/>
+ <exports symbol='xmlXPathInit' type='function'/>
+ <exports symbol='xmlXPathCastStringToBoolean' type='function'/>
+ <exports symbol='xmlXPathConvertFunc' type='function'/>
+ <exports symbol='xmlXPathIsInf' type='function'/>
+ <exports symbol='xmlXPathOrderDocElems' type='function'/>
+ <exports symbol='xmlXPathFunction' type='function'/>
+ <exports symbol='xmlXPathFreeNodeSetList' type='function'/>
+ <exports symbol='xmlXPathCmpNodes' type='function'/>
+ <exports symbol='xmlXPathCastBooleanToNumber' type='function'/>
+ <exports symbol='xmlXPathCastToString' type='function'/>
+ <exports symbol='xmlXPathCtxtCompile' type='function'/>
+ <exports symbol='xmlXPathCastStringToNumber' type='function'/>
+ <exports symbol='xmlXPathAxisFunc' type='function'/>
+ <exports symbol='xmlXPathCastToNumber' type='function'/>
+ <exports symbol='xmlXPathCastBooleanToString' type='function'/>
+ <exports symbol='xmlXPathCastNodeToNumber' type='function'/>
+ <exports symbol='xmlXPathCastNumberToBoolean' type='function'/>
+ <exports symbol='xmlXPathIsNaN' type='function'/>
+ <exports symbol='xmlXPathEvalFunc' type='function'/>
+ <exports symbol='xmlXPathFreeCompExpr' type='function'/>
+ <exports symbol='xmlXPathObjectCopy' type='function'/>
+ <exports symbol='xmlXPathNewContext' type='function'/>
+ <exports symbol='xmlXPathEvalPredicate' type='function'/>
+ <exports symbol='xmlXPathConvertNumber' type='function'/>
+ <exports symbol='xmlXPathCompile' type='function'/>
+ <exports symbol='xmlXPathFreeObject' type='function'/>
+ <exports symbol='xmlXPathNodeSetCreate' type='function'/>
+ <exports symbol='xmlXPathFreeNodeSet' type='function'/>
+ <exports symbol='xmlXPathCastNodeSetToNumber' type='function'/>
+ <exports symbol='xmlXPathFreeContext' type='function'/>
+ <exports symbol='xmlXPathEval' type='function'/>
+ <exports symbol='xmlXPathCastNumberToString' type='function'/>
+ <exports symbol='xmlXPathCastToBoolean' type='function'/>
+ </file>
+ <file name='xpathInternals'>
+ <summary>internal interfaces for XML Path Language implementation</summary>
+ <description>internal interfaces for XML Path Language implementation used to build new modules on top of XPath like XPointer and XSLT </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlXPathStackIsNodeSet' type='macro'/>
+ <exports symbol='xmlXPathStackIsExternal' type='macro'/>
+ <exports symbol='xmlXPathReturnEmptyString' type='macro'/>
+ <exports symbol='XP_ERROR0' type='macro'/>
+ <exports symbol='xmlXPathCheckError' type='macro'/>
+ <exports symbol='xmlXPathSetError' type='macro'/>
+ <exports symbol='CHECK_ERROR' type='macro'/>
+ <exports symbol='xmlXPathSetTypeError' type='macro'/>
+ <exports symbol='xmlXPathReturnEmptyNodeSet' type='macro'/>
+ <exports symbol='xmlXPathReturnString' type='macro'/>
+ <exports symbol='xmlXPathReturnTrue' type='macro'/>
+ <exports symbol='CAST_TO_BOOLEAN' type='macro'/>
+ <exports symbol='xmlXPathSetArityError' type='macro'/>
+ <exports symbol='xmlXPathReturnBoolean' type='macro'/>
+ <exports symbol='CHECK_TYPE' type='macro'/>
+ <exports symbol='xmlXPathGetContextNode' type='macro'/>
+ <exports symbol='xmlXPathReturnFalse' type='macro'/>
+ <exports symbol='xmlXPathReturnNumber' type='macro'/>
+ <exports symbol='CAST_TO_NUMBER' type='macro'/>
+ <exports symbol='CHECK_ERROR0' type='macro'/>
+ <exports symbol='xmlXPathReturnExternal' type='macro'/>
+ <exports symbol='xmlXPathGetDocument' type='macro'/>
+ <exports symbol='xmlXPathGetError' type='macro'/>
+ <exports symbol='XP_ERROR' type='macro'/>
+ <exports symbol='CHECK_ARITY' type='macro'/>
+ <exports symbol='CHECK_TYPE0' type='macro'/>
+ <exports symbol='CAST_TO_STRING' type='macro'/>
+ <exports symbol='xmlXPathEmptyNodeSet' type='macro'/>
+ <exports symbol='xmlXPathReturnNodeSet' type='macro'/>
+ <exports symbol='xmlXPathNodeSetMerge' type='function'/>
+ <exports symbol='xmlXPathRoundFunction' type='function'/>
+ <exports symbol='xmlXPathSubstringAfterFunction' type='function'/>
+ <exports symbol='xmlXPathNumberFunction' type='function'/>
+ <exports symbol='xmlXPathPopNodeSet' type='function'/>
+ <exports symbol='xmlXPathNsLookup' type='function'/>
+ <exports symbol='xmlXPathCountFunction' type='function'/>
+ <exports symbol='xmlXPathParseNCName' type='function'/>
+ <exports symbol='xmlXPathNewNodeSet' type='function'/>
+ <exports symbol='xmlXPathVariableLookupNS' type='function'/>
+ <exports symbol='xmlXPathNextAncestorOrSelf' type='function'/>
+ <exports symbol='xmlXPathNewBoolean' type='function'/>
+ <exports symbol='xmlXPathNodeSetRemove' type='function'/>
+ <exports symbol='xmlXPathSubValues' type='function'/>
+ <exports symbol='xmlXPathNewNodeSetList' type='function'/>
+ <exports symbol='xmlXPathPopBoolean' type='function'/>
+ <exports symbol='xmlXPathEqualValues' type='function'/>
+ <exports symbol='xmlXPathNewString' type='function'/>
+ <exports symbol='xmlXPathTrailingSorted' type='function'/>
+ <exports symbol='xmlXPathMultValues' type='function'/>
+ <exports symbol='xmlXPathModValues' type='function'/>
+ <exports symbol='xmlXPathNodeLeadingSorted' type='function'/>
+ <exports symbol='xmlXPathNextChild' type='function'/>
+ <exports symbol='xmlXPathNextFollowingSibling' type='function'/>
+ <exports symbol='xmlXPathPopString' type='function'/>
+ <exports symbol='xmlXPathNewParserContext' type='function'/>
+ <exports symbol='xmlXPathNamespaceURIFunction' type='function'/>
+ <exports symbol='xmlXPathWrapNodeSet' type='function'/>
+ <exports symbol='xmlXPathRoot' type='function'/>
+ <exports symbol='xmlXPathLangFunction' type='function'/>
+ <exports symbol='xmlXPathRegisterFuncNS' type='function'/>
+ <exports symbol='xmlXPathCompareValues' type='function'/>
+ <exports symbol='xmlXPathIsNodeType' type='function'/>
+ <exports symbol='xmlXPathNodeSetAddNs' type='function'/>
+ <exports symbol='xmlXPathNodeSetContains' type='function'/>
+ <exports symbol='xmlXPatherror' type='function'/>
+ <exports symbol='xmlXPathNextAncestor' type='function'/>
+ <exports symbol='xmlXPathNextFollowing' type='function'/>
+ <exports symbol='xmlXPathRegisterVariableNS' type='function'/>
+ <exports symbol='xmlXPathRegisteredNsCleanup' type='function'/>
+ <exports symbol='xmlXPathConcatFunction' type='function'/>
+ <exports symbol='xmlXPathLocalNameFunction' type='function'/>
+ <exports symbol='xmlXPathAddValues' type='function'/>
+ <exports symbol='xmlXPathDifference' type='function'/>
+ <exports symbol='xmlXPathRegisterVariable' type='function'/>
+ <exports symbol='valuePop' type='function'/>
+ <exports symbol='xmlXPathCeilingFunction' type='function'/>
+ <exports symbol='xmlXPathIntersection' type='function'/>
+ <exports symbol='xmlXPathLeadingSorted' type='function'/>
+ <exports symbol='xmlXPathContainsFunction' type='function'/>
+ <exports symbol='xmlXPathNextPrecedingSibling' type='function'/>
+ <exports symbol='xmlXPathNodeSetSort' type='function'/>
+ <exports symbol='xmlXPathStartsWithFunction' type='function'/>
+ <exports symbol='xmlXPathBooleanFunction' type='function'/>
+ <exports symbol='xmlXPathPopExternal' type='function'/>
+ <exports symbol='xmlXPathNormalizeFunction' type='function'/>
+ <exports symbol='xmlXPathNodeLeading' type='function'/>
+ <exports symbol='xmlXPathSumFunction' type='function'/>
+ <exports symbol='xmlXPathRegisterVariableLookup' type='function'/>
+ <exports symbol='xmlXPathNotEqualValues' type='function'/>
+ <exports symbol='xmlXPathNodeSetDel' type='function'/>
+ <exports symbol='xmlXPathWrapString' type='function'/>
+ <exports symbol='xmlXPathEvaluatePredicateResult' type='function'/>
+ <exports symbol='xmlXPathNodeTrailingSorted' type='function'/>
+ <exports symbol='xmlXPathErr' type='function'/>
+ <exports symbol='xmlXPathNextPreceding' type='function'/>
+ <exports symbol='xmlXPathFunctionLookupNS' type='function'/>
+ <exports symbol='xmlXPathFuncLookupFunc' type='function'/>
+ <exports symbol='xmlXPathRegisteredFuncsCleanup' type='function'/>
+ <exports symbol='xmlXPathRegisterAllFunctions' type='function'/>
+ <exports symbol='xmlXPathNewCString' type='function'/>
+ <exports symbol='xmlXPathRegisterFunc' type='function'/>
+ <exports symbol='xmlXPathPositionFunction' type='function'/>
+ <exports symbol='xmlXPathVariableLookupFunc' type='function'/>
+ <exports symbol='xmlXPathSubstringBeforeFunction' type='function'/>
+ <exports symbol='xmlXPathRegisteredVariablesCleanup' type='function'/>
+ <exports symbol='xmlXPathNextDescendant' type='function'/>
+ <exports symbol='xmlXPathNextNamespace' type='function'/>
+ <exports symbol='xmlXPathWrapCString' type='function'/>
+ <exports symbol='xmlXPathNewFloat' type='function'/>
+ <exports symbol='xmlXPathRegisterNs' type='function'/>
+ <exports symbol='xmlXPathWrapExternal' type='function'/>
+ <exports symbol='xmlXPathNextParent' type='function'/>
+ <exports symbol='xmlXPathNodeSetFreeNs' type='function'/>
+ <exports symbol='xmlXPathTrailing' type='function'/>
+ <exports symbol='xmlXPathHasSameNodes' type='function'/>
+ <exports symbol='xmlXPathDistinctSorted' type='function'/>
+ <exports symbol='xmlXPathFreeParserContext' type='function'/>
+ <exports symbol='xmlXPathNodeTrailing' type='function'/>
+ <exports symbol='xmlXPathFunctionLookup' type='function'/>
+ <exports symbol='valuePush' type='function'/>
+ <exports symbol='xmlXPathNodeSetAdd' type='function'/>
+ <exports symbol='xmlXPathSubstringFunction' type='function'/>
+ <exports symbol='xmlXPathStringFunction' type='function'/>
+ <exports symbol='xmlXPathFloorFunction' type='function'/>
+ <exports symbol='xmlXPathNodeSetAddUnique' type='function'/>
+ <exports symbol='xmlXPathNewValueTree' type='function'/>
+ <exports symbol='xmlXPathDistinct' type='function'/>
+ <exports symbol='xmlXPathIdFunction' type='function'/>
+ <exports symbol='xmlXPathVariableLookup' type='function'/>
+ <exports symbol='xmlXPathNotFunction' type='function'/>
+ <exports symbol='xmlXPathStringEvalNumber' type='function'/>
+ <exports symbol='xmlXPathNextDescendantOrSelf' type='function'/>
+ <exports symbol='xmlXPathRegisterFuncLookup' type='function'/>
+ <exports symbol='xmlXPathNextAttribute' type='function'/>
+ <exports symbol='xmlXPathDivValues' type='function'/>
+ <exports symbol='xmlXPathStringLengthFunction' type='function'/>
+ <exports symbol='xmlXPathLastFunction' type='function'/>
+ <exports symbol='xmlXPathNextSelf' type='function'/>
+ <exports symbol='xmlXPathDebugDumpCompExpr' type='function'/>
+ <exports symbol='xmlXPathEvalExpr' type='function'/>
+ <exports symbol='xmlXPathFalseFunction' type='function'/>
+ <exports symbol='xmlXPathDebugDumpObject' type='function'/>
+ <exports symbol='xmlXPathValueFlipSign' type='function'/>
+ <exports symbol='xmlXPathTranslateFunction' type='function'/>
+ <exports symbol='xmlXPathLeading' type='function'/>
+ <exports symbol='xmlXPathParseName' type='function'/>
+ <exports symbol='xmlXPathTrueFunction' type='function'/>
+ <exports symbol='xmlXPathPopNumber' type='function'/>
+ </file>
+ <file name='xpointer'>
+ <summary>API to handle XML Pointers</summary>
+ <description>API to handle XML Pointers Base implementation was made accordingly to W3C Candidate Recommendation 7 June 2000</description>
+ <author>Daniel Veillard </author>
+ <exports symbol='xmlLocationSet' type='typedef'/>
+ <exports symbol='xmlLocationSetPtr' type='typedef'/>
+ <exports symbol='_xmlLocationSet' type='struct'/>
+ <exports symbol='xmlXPtrNewRange' type='function'/>
+ <exports symbol='xmlXPtrFreeLocationSet' type='function'/>
+ <exports symbol='xmlXPtrWrapLocationSet' type='function'/>
+ <exports symbol='xmlXPtrEvalRangePredicate' type='function'/>
+ <exports symbol='xmlXPtrBuildNodeList' type='function'/>
+ <exports symbol='xmlXPtrLocationSetAdd' type='function'/>
+ <exports symbol='xmlXPtrNewRangeNodes' type='function'/>
+ <exports symbol='xmlXPtrEval' type='function'/>
+ <exports symbol='xmlXPtrRangeToFunction' type='function'/>
+ <exports symbol='xmlXPtrNewCollapsedRange' type='function'/>
+ <exports symbol='xmlXPtrNewRangePoints' type='function'/>
+ <exports symbol='xmlXPtrNewLocationSetNodeSet' type='function'/>
+ <exports symbol='xmlXPtrNewRangePointNode' type='function'/>
+ <exports symbol='xmlXPtrNewContext' type='function'/>
+ <exports symbol='xmlXPtrNewRangeNodeObject' type='function'/>
+ <exports symbol='xmlXPtrLocationSetRemove' type='function'/>
+ <exports symbol='xmlXPtrNewRangeNodePoint' type='function'/>
+ <exports symbol='xmlXPtrLocationSetDel' type='function'/>
+ <exports symbol='xmlXPtrLocationSetMerge' type='function'/>
+ <exports symbol='xmlXPtrLocationSetCreate' type='function'/>
+ <exports symbol='xmlXPtrNewLocationSetNodes' type='function'/>
+ </file>
+ </files>
+ <symbols>
+ <macro name='ATTRIBUTE_UNUSED' file='xmlversion'>
+ <info>Macro used to signal to GCC unused function parameters</info>
+ </macro>
+ <macro name='BAD_CAST' file='xmlstring'>
+ <info>Macro to cast a string to an xmlChar * when one know its safe.</info>
+ </macro>
+ <macro name='BASE_BUFFER_SIZE' file='tree'>
+ <info>default buffer size 4000.</info>
+ </macro>
+ <macro name='CAST_TO_BOOLEAN' file='xpathInternals'>
+ <info>Macro to try to cast the value on the top of the XPath stack to a boolean.</info>
+ </macro>
+ <macro name='CAST_TO_NUMBER' file='xpathInternals'>
+ <info>Macro to try to cast the value on the top of the XPath stack to a number.</info>
+ </macro>
+ <macro name='CAST_TO_STRING' file='xpathInternals'>
+ <info>Macro to try to cast the value on the top of the XPath stack to a string.</info>
+ </macro>
+ <macro name='CHECK_ARITY' file='xpathInternals'>
+ <info>Macro to check that the number of args passed to an XPath function matches.</info>
+ <arg name='x' info='the number of expected args'/>
+ </macro>
+ <macro name='CHECK_ERROR' file='xpathInternals'>
+ <info>Macro to return from the function if an XPath error was detected.</info>
+ </macro>
+ <macro name='CHECK_ERROR0' file='xpathInternals'>
+ <info>Macro to return 0 from the function if an XPath error was detected.</info>
+ </macro>
+ <macro name='CHECK_TYPE' file='xpathInternals'>
+ <info>Macro to check that the value on top of the XPath stack is of a given type.</info>
+ <arg name='typeval' info='the XPath type'/>
+ </macro>
+ <macro name='CHECK_TYPE0' file='xpathInternals'>
+ <info>Macro to check that the value on top of the XPath stack is of a given type. Return(0) in case of failure</info>
+ <arg name='typeval' info='the XPath type'/>
+ </macro>
+ <macro name='DEBUG_MEMORY' file='xmlmemory'>
+ <info>DEBUG_MEMORY replaces the allocator with a collect and debug shell to the libc allocator. DEBUG_MEMORY should only be activated when debugging libxml i.e. if libxml has been configured with --with-debug-mem too. #define DEBUG_MEMORY_FREED #define DEBUG_MEMORY_LOCATION</info>
+ </macro>
+ <macro name='DEBUG_MEMORY_LOCATION' file='xmlversion'>
+ <info>Whether the memory debugging is configured in</info>
+ </macro>
+ <macro name='HTML_COMMENT_NODE' file='HTMLtree'>
+ <info>Macro. A comment in a HTML document is really implemented the same way as a comment in an XML document.</info>
+ </macro>
+ <macro name='HTML_ENTITY_REF_NODE' file='HTMLtree'>
+ <info>Macro. An entity reference in a HTML document is really implemented the same way as an entity reference in an XML document.</info>
+ </macro>
+ <macro name='HTML_PI_NODE' file='HTMLtree'>
+ <info>Macro. A processing instruction in a HTML document is really implemented the same way as a processing instruction in an XML document.</info>
+ </macro>
+ <macro name='HTML_PRESERVE_NODE' file='HTMLtree'>
+ <info>Macro. A preserved node in a HTML document is really implemented the same way as a CDATA section in an XML document.</info>
+ </macro>
+ <macro name='HTML_TEXT_NODE' file='HTMLtree'>
+ <info>Macro. A text node in a HTML document is really implemented the same way as a text node in an XML document.</info>
+ </macro>
+ <macro name='INPUT_CHUNK' file='parserInternals'>
+ <info>The parser tries to always have that amount of input ready. One of the point is providing context when reporting errors.</info>
+ </macro>
+ <macro name='IS_BASECHAR' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [85] BaseChar ::= ... long list see REC ...</info>
+ <arg name='c' info='an UNICODE value (int)'/>
+ </macro>
+ <macro name='IS_BLANK' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [3] S ::= (#x20 | #x9 | #xD | #xA)+</info>
+ <arg name='c' info='an UNICODE value (int)'/>
+ </macro>
+ <macro name='IS_BLANK_CH' file='parserInternals'>
+ <info>Behaviour same as IS_BLANK</info>
+ <arg name='c' info='an xmlChar value (normally unsigned char)'/>
+ </macro>
+ <macro name='IS_BYTE_CHAR' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [2] Char ::= #x9 | #xA | #xD | [#x20...] any byte character in the accepted range</info>
+ <arg name='c' info='an byte value (int)'/>
+ </macro>
+ <macro name='IS_CHAR' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.</info>
+ <arg name='c' info='an UNICODE value (int)'/>
+ </macro>
+ <macro name='IS_CHAR_CH' file='parserInternals'>
+ <info>Behaves like IS_CHAR on single-byte value</info>
+ <arg name='c' info='an xmlChar (usually an unsigned char)'/>
+ </macro>
+ <macro name='IS_COMBINING' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [87] CombiningChar ::= ... long list see REC ...</info>
+ <arg name='c' info='an UNICODE value (int)'/>
+ </macro>
+ <macro name='IS_COMBINING_CH' file='parserInternals'>
+ <info>Always false (all combining chars &gt; 0xff)</info>
+ <arg name='c' info='an xmlChar (usually an unsigned char)'/>
+ </macro>
+ <macro name='IS_DIGIT' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [88] Digit ::= ... long list see REC ...</info>
+ <arg name='c' info='an UNICODE value (int)'/>
+ </macro>
+ <macro name='IS_DIGIT_CH' file='parserInternals'>
+ <info>Behaves like IS_DIGIT but with a single byte argument</info>
+ <arg name='c' info='an xmlChar value (usually an unsigned char)'/>
+ </macro>
+ <macro name='IS_EXTENDER' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]</info>
+ <arg name='c' info='an UNICODE value (int)'/>
+ </macro>
+ <macro name='IS_EXTENDER_CH' file='parserInternals'>
+ <info>Behaves like IS_EXTENDER but with a single-byte argument</info>
+ <arg name='c' info='an xmlChar value (usually an unsigned char)'/>
+ </macro>
+ <macro name='IS_IDEOGRAPHIC' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]</info>
+ <arg name='c' info='an UNICODE value (int)'/>
+ </macro>
+ <macro name='IS_LETTER' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [84] Letter ::= BaseChar | Ideographic</info>
+ <arg name='c' info='an UNICODE value (int)'/>
+ </macro>
+ <macro name='IS_LETTER_CH' file='parserInternals'>
+ <info>Macro behaves like IS_LETTER, but only check base chars</info>
+ <arg name='c' info='an xmlChar value (normally unsigned char)'/>
+ </macro>
+ <macro name='IS_PUBIDCHAR' file='parserInternals'>
+ <info>Macro to check the following production in the XML spec: [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-&apos;()+,./:=?;!*#@$_%]</info>
+ <arg name='c' info='an UNICODE value (int)'/>
+ </macro>
+ <macro name='IS_PUBIDCHAR_CH' file='parserInternals'>
+ <info>Same as IS_PUBIDCHAR but for single-byte value</info>
+ <arg name='c' info='an xmlChar value (normally unsigned char)'/>
+ </macro>
+ <macro name='LIBXML_AUTOMATA_ENABLED' file='xmlversion'>
+ <info>Whether the automata interfaces are compiled in</info>
+ </macro>
+ <macro name='LIBXML_C14N_ENABLED' file='xmlversion'>
+ <info>Whether the Canonicalization support is configured in</info>
+ </macro>
+ <macro name='LIBXML_CATALOG_ENABLED' file='xmlversion'>
+ <info>Whether the Catalog support is configured in</info>
+ </macro>
+ <macro name='LIBXML_DEBUG_ENABLED' file='xmlversion'>
+ <info>Whether Debugging module is configured in</info>
+ </macro>
+ <macro name='LIBXML_DLL_IMPORT' file='xmlexports'>
+ </macro>
+ <macro name='LIBXML_DOCB_ENABLED' file='xmlversion'>
+ <info>Whether the SGML Docbook support is configured in</info>
+ </macro>
+ <macro name='LIBXML_DOTTED_VERSION' file='xmlversion'>
+ <info>the version string like &quot;1.2.3&quot;</info>
+ </macro>
+ <macro name='LIBXML_FTP_ENABLED' file='xmlversion'>
+ <info>Whether the FTP support is configured in</info>
+ </macro>
+ <macro name='LIBXML_HTML_ENABLED' file='xmlversion'>
+ <info>Whether the HTML support is configured in</info>
+ </macro>
+ <macro name='LIBXML_HTTP_ENABLED' file='xmlversion'>
+ <info>Whether the HTTP support is configured in</info>
+ </macro>
+ <macro name='LIBXML_ICONV_ENABLED' file='xmlversion'>
+ <info>Whether iconv support is available</info>
+ </macro>
+ <macro name='LIBXML_ISO8859X_ENABLED' file='xmlversion'>
+ <info>Whether ISO-8859-* support is made available in case iconv is not</info>
+ </macro>
+ <macro name='LIBXML_LEGACY_ENABLED' file='xmlversion'>
+ <info>Whether the deprecated APIs are compiled in for compatibility</info>
+ </macro>
+ <macro name='LIBXML_OUTPUT_ENABLED' file='xmlversion'>
+ <info>Whether the serialization/saving support is configured in</info>
+ </macro>
+ <macro name='LIBXML_PATTERN_ENABLED' file='xmlversion'>
+ <info>Whether the xmlPattern node selection interface is configured in</info>
+ </macro>
+ <macro name='LIBXML_PUSH_ENABLED' file='xmlversion'>
+ <info>Whether the push parsing interfaces are configured in</info>
+ </macro>
+ <macro name='LIBXML_READER_ENABLED' file='xmlversion'>
+ <info>Whether the xmlReader parsing interface is configured in</info>
+ </macro>
+ <macro name='LIBXML_REGEXP_ENABLED' file='xmlversion'>
+ <info>Whether the regular expressions interfaces are compiled in</info>
+ </macro>
+ <macro name='LIBXML_SAX1_ENABLED' file='xmlversion'>
+ <info>Whether the older SAX1 interface is configured in</info>
+ </macro>
+ <macro name='LIBXML_SCHEMAS_ENABLED' file='xmlversion'>
+ <info>Whether the Schemas 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>
+ <macro name='LIBXML_THREAD_ENABLED' file='xmlversion'>
+ <info>Whether the thread support is configured in</info>
+ </macro>
+ <macro name='LIBXML_TREE_ENABLED' file='xmlversion'>
+ <info>Whether the DOM like tree manipulation API support is configured in</info>
+ </macro>
+ <macro name='LIBXML_UNICODE_ENABLED' file='xmlversion'>
+ <info>Whether the Unicode related interfaces are compiled in</info>
+ </macro>
+ <macro name='LIBXML_VALID_ENABLED' file='xmlversion'>
+ <info>Whether the DTD validation support is configured in</info>
+ </macro>
+ <macro name='LIBXML_VERSION' file='xmlversion'>
+ <info>the version number: 1.2.3 value is 1002003</info>
+ </macro>
+ <macro name='LIBXML_VERSION_STRING' file='xmlversion'>
+ <info>the version number string, 1.2.3 value is &quot;1002003&quot;</info>
+ </macro>
+ <macro name='LIBXML_WRITER_ENABLED' file='xmlversion'>
+ <info>Whether the xmlWriter saving interface is configured in</info>
+ </macro>
+ <macro name='LIBXML_XINCLUDE_ENABLED' file='xmlversion'>
+ <info>Whether XInclude is configured in</info>
+ </macro>
+ <macro name='LIBXML_XPATH_ENABLED' file='xmlversion'>
+ <info>Whether XPath is configured in</info>
+ </macro>
+ <macro name='LIBXML_XPTR_ENABLED' file='xmlversion'>
+ <info>Whether XPointer is configured in</info>
+ </macro>
+ <macro name='MOVETO_ENDTAG' file='parserInternals'>
+ <info>Skips to the next &apos;&gt;&apos; char.</info>
+ <arg name='p' info='and UTF8 string pointer'/>
+ </macro>
+ <macro name='MOVETO_STARTTAG' file='parserInternals'>
+ <info>Skips to the next &apos;&lt;&apos; char.</info>
+ <arg name='p' info='and UTF8 string pointer'/>
+ </macro>
+ <macro name='SKIP_EOL' file='parserInternals'>
+ <info>Skips the end of line chars.</info>
+ <arg name='p' info='and UTF8 string pointer'/>
+ </macro>
+ <macro name='WITHOUT_TRIO' file='xmlversion'>
+ <info>defined if the trio support should not be configured in</info>
+ </macro>
+ <macro name='WITH_TRIO' file='xmlversion'>
+ <info>defined if the trio support need to be configured in</info>
+ </macro>
+ <macro name='XINCLUDE_FALLBACK' file='xinclude'>
+ <info>Macro defining &quot;fallback&quot;</info>
+ </macro>
+ <macro name='XINCLUDE_HREF' file='xinclude'>
+ <info>Macro defining &quot;href&quot;</info>
+ </macro>
+ <macro name='XINCLUDE_NODE' file='xinclude'>
+ <info>Macro defining &quot;include&quot;</info>
+ </macro>
+ <macro name='XINCLUDE_NS' file='xinclude'>
+ <info>Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude</info>
+ </macro>
+ <macro name='XINCLUDE_OLD_NS' file='xinclude'>
+ <info>Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude</info>
+ </macro>
+ <macro name='XINCLUDE_PARSE' file='xinclude'>
+ <info>Macro defining &quot;parse&quot;</info>
+ </macro>
+ <macro name='XINCLUDE_PARSE_ENCODING' file='xinclude'>
+ <info>Macro defining &quot;encoding&quot;</info>
+ </macro>
+ <macro name='XINCLUDE_PARSE_TEXT' file='xinclude'>
+ <info>Macro defining &quot;text&quot;</info>
+ </macro>
+ <macro name='XINCLUDE_PARSE_XML' file='xinclude'>
+ <info>Macro defining &quot;xml&quot;</info>
+ </macro>
+ <macro name='XINCLUDE_PARSE_XPOINTER' file='xinclude'>
+ <info>Macro defining &quot;xpointer&quot;</info>
+ </macro>
+ <macro name='XMLCALL' file='xmlexports'>
+ </macro>
+ <macro name='XMLPUBFUN' file='xmlexports'>
+ </macro>
+ <macro name='XMLPUBVAR' file='xmlexports'>
+ </macro>
+ <macro name='XML_CATALOGS_NAMESPACE' file='catalog'>
+ <info>The namespace for the XML Catalogs elements.</info>
+ </macro>
+ <macro name='XML_CATALOG_PI' file='catalog'>
+ <info>The specific XML Catalog Processing Instuction name.</info>
+ </macro>
+ <macro name='XML_COMPLETE_ATTRS' file='parser'>
+ <info>Bit in the loadsubset context field to tell to do complete the elements attributes lists with the ones defaulted from the DTDs. Use it to initialize xmlLoadExtDtdDefaultValue.</info>
+ </macro>
+ <macro name='XML_DEFAULT_VERSION' file='parser'>
+ <info>The default version of XML used: 1.0</info>
+ </macro>
+ <macro name='XML_DETECT_IDS' file='parser'>
+ <info>Bit in the loadsubset context field to tell to do ID/REFs lookups. Use it to initialize xmlLoadExtDtdDefaultValue.</info>
+ </macro>
+ <macro name='XML_GET_CONTENT' file='tree'>
+ <info>Macro to extract the content pointer of a node.</info>
+ </macro>
+ <macro name='XML_GET_LINE' file='tree'>
+ <info>Macro to extract the line number of an element node.</info>
+ </macro>
+ <macro name='XML_LOCAL_NAMESPACE' file='tree'>
+ <info>A namespace declaration node.</info>
+ </macro>
+ <macro name='XML_MAX_NAMELEN' file='parserInternals'>
+ <info>Identifiers can be longer, but this will be more costly at runtime.</info>
+ </macro>
+ <macro name='XML_SAX2_MAGIC' file='parser'>
+ <info>Special constant found in SAX2 blocks initialized fields</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ANYATTR_LAX' file='schemasInternals'>
+ <info>Ignore validation non definition on attributes</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ANYATTR_SKIP' file='schemasInternals'>
+ <info>Skip unknown attribute from validation</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ANYATTR_STRICT' file='schemasInternals'>
+ <info>Apply strict validation rules on attributes</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ATTR_NSDEFAULT' file='schemasInternals'>
+ <info>allow elements in no namespace</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ELEM_ABSTRACT' file='schemasInternals'>
+ <info>the element is abstract</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ELEM_DEFAULT' file='schemasInternals'>
+ <info>the element has a default value</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ELEM_FIXED' file='schemasInternals'>
+ <info>the element has a fixed value</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ELEM_GLOBAL' file='schemasInternals'>
+ <info>the element is global</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ELEM_NILLABLE' file='schemasInternals'>
+ <info>the element is nillable</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ELEM_NSDEFAULT' file='schemasInternals'>
+ <info>allow elements in no namespace</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ELEM_REF' file='schemasInternals'>
+ <info>the element is a reference to a type</info>
+ </macro>
+ <macro name='XML_SCHEMAS_ELEM_TOPLEVEL' file='schemasInternals'>
+ <info>the element is top level</info>
+ </macro>
+ <macro name='XML_SCHEMAS_FACET_COLLAPSE' file='schemasInternals'>
+ <info>collapse the types of the facet</info>
+ </macro>
+ <macro name='XML_SCHEMAS_FACET_PRESERVE' file='schemasInternals'>
+ <info>preserve the type of the facet</info>
+ </macro>
+ <macro name='XML_SCHEMAS_FACET_REPLACE' file='schemasInternals'>
+ <info>replace the type of the facet</info>
+ </macro>
+ <macro name='XML_SCHEMAS_FACET_UNKNOWN' file='schemasInternals'>
+ <info>unknown facet handling</info>
+ </macro>
+ <macro name='XML_SCHEMAS_QUALIF_ATTR' file='schemasInternals'>
+ <info>the shemas requires qualified attributes</info>
+ </macro>
+ <macro name='XML_SCHEMAS_QUALIF_ELEM' file='schemasInternals'>
+ <info>the shemas requires qualified elements</info>
+ </macro>
+ <macro name='XML_SCHEMAS_TYPE_MIXED' file='schemasInternals'>
+ <info>the element content type is mixed</info>
+ </macro>
+ <macro name='XML_SKIP_IDS' file='parser'>
+ <info>Bit in the loadsubset context field to tell to not do ID/REFs registration. Used to initialize xmlLoadExtDtdDefaultValue in some special cases.</info>
+ </macro>
+ <macro name='XML_SUBSTITUTE_BOTH' file='parserInternals'>
+ <info>Both general and parameter entities need to be substituted.</info>
+ </macro>
+ <macro name='XML_SUBSTITUTE_NONE' file='parserInternals'>
+ <info>If no entities need to be substituted.</info>
+ </macro>
+ <macro name='XML_SUBSTITUTE_PEREF' file='parserInternals'>
+ <info>Whether parameter entities need to be substituted.</info>
+ </macro>
+ <macro name='XML_SUBSTITUTE_REF' file='parserInternals'>
+ <info>Whether general entities need to be substituted.</info>
+ </macro>
+ <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='XP_ERROR' file='xpathInternals'>
+ <info>Macro to raise an XPath error and return.</info>
+ <arg name='X' info='the error code'/>
+ </macro>
+ <macro name='XP_ERROR0' file='xpathInternals'>
+ <info>Macro to raise an XPath error and return 0.</info>
+ <arg name='X' info='the error code'/>
+ </macro>
+ <macro name='_REENTRANT' file='xmlexports'>
+ </macro>
+ <macro name='htmlDefaultSubelement' file='HTMLparser'>
+ <info>Returns the default subelement for this element</info>
+ <arg name='elt' info='HTML element'/>
+ </macro>
+ <macro name='htmlElementAllowedHereDesc' file='HTMLparser'>
+ <info>Checks whether an HTML element description may be a direct child of the specified element. Returns 1 if allowed; 0 otherwise.</info>
+ <arg name='parent' info='HTML parent element'/>
+ <arg name='elt' info='HTML element'/>
+ </macro>
+ <macro name='htmlRequiredAttrs' file='HTMLparser'>
+ <info>Returns the attributes required for the specified element.</info>
+ <arg name='elt' info='HTML element'/>
+ </macro>
+ <macro name='xmlChildrenNode' file='tree'>
+ <info>Macro for compatibility naming layer with libxml1. Maps to &quot;children.&quot;</info>
+ </macro>
+ <macro name='xmlIsBaseCharQ' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsBaseChar_ch' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsBlankQ' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsBlank_ch' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsCharQ' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsChar_ch' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsCombiningQ' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsDigitQ' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsDigit_ch' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsExtenderQ' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsExtender_ch' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsIdeographicQ' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsPubidCharQ' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlIsPubidChar_ch' file='chvalid'>
+ <info>Automatically generated by genChRanges.py</info>
+ <arg name='c' info='char to validate'/>
+ </macro>
+ <macro name='xmlRootNode' file='tree'>
+ <info>Macro for compatibility naming layer with libxml1. Maps to &quot;children&quot;.</info>
+ </macro>
+ <macro name='xmlTextWriterWriteDocType' file='xmlwriter'>
+ <info>this macro maps to xmlTextWriterWriteDTD</info>
+ </macro>
+ <macro name='xmlTextWriterWriteProcessingInstruction' file='xmlwriter'>
+ <info>This macro maps to xmlTextWriterWritePI</info>
+ </macro>
+ <macro name='xmlXPathCheckError' file='xpathInternals'>
+ <info>Check if an XPath error was raised. Returns true if an error has been raised, false otherwise.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathEmptyNodeSet' file='xpathInternals'>
+ <info>Empties a node-set.</info>
+ <arg name='ns' info='a node-set'/>
+ </macro>
+ <macro name='xmlXPathGetContextNode' file='xpathInternals'>
+ <info>Get the context node of an XPath context. Returns the context node.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathGetDocument' file='xpathInternals'>
+ <info>Get the document of an XPath context. Returns the context document.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathGetError' file='xpathInternals'>
+ <info>Get the error code of an XPath context. Returns the context error.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathNodeSetGetLength' file='xpath'>
+ <info>Implement a functionality similar to the DOM NodeList.length. Returns the number of nodes in the node-set.</info>
+ <arg name='ns' info='a node-set'/>
+ </macro>
+ <macro name='xmlXPathNodeSetIsEmpty' file='xpath'>
+ <info>Checks whether @ns is empty or not. Returns %TRUE if @ns is an empty node-set.</info>
+ <arg name='ns' info='a node-set'/>
+ </macro>
+ <macro name='xmlXPathNodeSetItem' file='xpath'>
+ <info>Implements a functionality similar to the DOM NodeList.item(). Returns the xmlNodePtr at the given @index in @ns or NULL if @index is out of range (0 to length-1)</info>
+ <arg name='ns' info='a node-set'/>
+ <arg name='index' info='index of a node in the set'/>
+ </macro>
+ <macro name='xmlXPathReturnBoolean' file='xpathInternals'>
+ <info>Pushes the boolean @val on the context stack.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ <arg name='val' info='a boolean'/>
+ </macro>
+ <macro name='xmlXPathReturnEmptyNodeSet' file='xpathInternals'>
+ <info>Pushes an empty node-set on the context stack.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathReturnEmptyString' file='xpathInternals'>
+ <info>Pushes an empty string on the stack.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathReturnExternal' file='xpathInternals'>
+ <info>Pushes user data on the context stack.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ <arg name='val' info='user data'/>
+ </macro>
+ <macro name='xmlXPathReturnFalse' file='xpathInternals'>
+ <info>Pushes false on the context stack.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathReturnNodeSet' file='xpathInternals'>
+ <info>Pushes the node-set @ns on the context stack.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ <arg name='ns' info='a node-set'/>
+ </macro>
+ <macro name='xmlXPathReturnNumber' file='xpathInternals'>
+ <info>Pushes the double @val on the context stack.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ <arg name='val' info='a double'/>
+ </macro>
+ <macro name='xmlXPathReturnString' file='xpathInternals'>
+ <info>Pushes the string @str on the context stack.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ <arg name='str' info='a string'/>
+ </macro>
+ <macro name='xmlXPathReturnTrue' file='xpathInternals'>
+ <info>Pushes true on the context stack.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathSetArityError' file='xpathInternals'>
+ <info>Raises an XPATH_INVALID_ARITY error.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathSetError' file='xpathInternals'>
+ <info>Raises an error.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ <arg name='err' info='an xmlXPathError code'/>
+ </macro>
+ <macro name='xmlXPathSetTypeError' file='xpathInternals'>
+ <info>Raises an XPATH_INVALID_TYPE error.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathStackIsExternal' file='xpathInternals'>
+ <info>Checks if the current value on the XPath stack is an external object. Returns true if the current object on the stack is an external object.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <macro name='xmlXPathStackIsNodeSet' file='xpathInternals'>
+ <info>Check if the current value on the XPath stack is a node set or an XSLT value tree. Returns true if the current object on the stack is a node-set.</info>
+ <arg name='ctxt' info='an XPath parser context'/>
+ </macro>
+ <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_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_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_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'/>
+ <enum name='XLINK_ACTUATE_NONE' file='xlink' value='0' type='xlinkActuate'/>
+ <enum name='XLINK_ACTUATE_ONREQUEST' file='xlink' value='2' type='xlinkActuate'/>
+ <enum name='XLINK_SHOW_EMBED' file='xlink' value='2' type='xlinkShow'/>
+ <enum name='XLINK_SHOW_NEW' file='xlink' value='1' type='xlinkShow'/>
+ <enum name='XLINK_SHOW_NONE' file='xlink' value='0' type='xlinkShow'/>
+ <enum name='XLINK_SHOW_REPLACE' file='xlink' value='3' type='xlinkShow'/>
+ <enum name='XLINK_TYPE_EXTENDED' file='xlink' value='2' type='xlinkType'/>
+ <enum name='XLINK_TYPE_EXTENDED_SET' file='xlink' value='3' type='xlinkType'/>
+ <enum name='XLINK_TYPE_NONE' file='xlink' value='0' type='xlinkType'/>
+ <enum name='XLINK_TYPE_SIMPLE' file='xlink' value='1' type='xlinkType'/>
+ <enum name='XML_ATTRIBUTE_CDATA' file='tree' value='1' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_DECL' file='tree' value='16' type='xmlElementType'/>
+ <enum name='XML_ATTRIBUTE_ENTITIES' file='tree' value='6' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_ENTITY' file='tree' value='5' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_ENUMERATION' file='tree' value='9' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_FIXED' file='tree' value='4' type='xmlAttributeDefault'/>
+ <enum name='XML_ATTRIBUTE_ID' file='tree' value='2' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_IDREF' file='tree' value='3' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_IDREFS' file='tree' value='4' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_IMPLIED' file='tree' value='3' type='xmlAttributeDefault'/>
+ <enum name='XML_ATTRIBUTE_NMTOKEN' file='tree' value='7' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_NMTOKENS' file='tree' value='8' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_NODE' file='tree' value='2' type='xmlElementType'/>
+ <enum name='XML_ATTRIBUTE_NONE' file='tree' value='1' type='xmlAttributeDefault'/>
+ <enum name='XML_ATTRIBUTE_NOTATION' file='tree' value='10' type='xmlAttributeType'/>
+ <enum name='XML_ATTRIBUTE_REQUIRED' file='tree' value='2' type='xmlAttributeDefault'/>
+ <enum name='XML_BUFFER_ALLOC_DOUBLEIT' file='tree' value='1' type='xmlBufferAllocationScheme'/>
+ <enum name='XML_BUFFER_ALLOC_EXACT' file='tree' value='2' type='xmlBufferAllocationScheme'/>
+ <enum name='XML_BUFFER_ALLOC_IMMUTABLE' file='tree' value='3' type='xmlBufferAllocationScheme'/>
+ <enum name='XML_C14N_CREATE_CTXT' file='xmlerror' value='1950' type='xmlParserErrors'/>
+ <enum name='XML_C14N_CREATE_STACK' file='xmlerror' value='1952' type='xmlParserErrors' info='1952'/>
+ <enum name='XML_C14N_INVALID_NODE' file='xmlerror' value='1953' type='xmlParserErrors' info='1953'/>
+ <enum name='XML_C14N_REQUIRES_UTF8' file='xmlerror' value='1951' type='xmlParserErrors' info='1951'/>
+ <enum name='XML_CATALOG_ENTRY_BROKEN' file='xmlerror' value='1651' type='xmlParserErrors' info='1651'/>
+ <enum name='XML_CATALOG_MISSING_ATTR' file='xmlerror' value='1650' type='xmlParserErrors'/>
+ <enum name='XML_CATALOG_NOT_CATALOG' file='xmlerror' value='1653' type='xmlParserErrors' info='1653'/>
+ <enum name='XML_CATALOG_PREFER_VALUE' file='xmlerror' value='1652' type='xmlParserErrors' info='1652'/>
+ <enum name='XML_CATALOG_RECURSION' file='xmlerror' value='1654' type='xmlParserErrors' info='1654'/>
+ <enum name='XML_CATA_ALLOW_ALL' file='catalog' value='3' type='xmlCatalogAllow'/>
+ <enum name='XML_CATA_ALLOW_DOCUMENT' file='catalog' value='2' type='xmlCatalogAllow'/>
+ <enum name='XML_CATA_ALLOW_GLOBAL' file='catalog' value='1' type='xmlCatalogAllow'/>
+ <enum name='XML_CATA_ALLOW_NONE' file='catalog' value='0' type='xmlCatalogAllow'/>
+ <enum name='XML_CATA_PREFER_NONE' file='catalog' value='0' type='xmlCatalogPrefer'/>
+ <enum name='XML_CATA_PREFER_PUBLIC' file='catalog' value='1' type='xmlCatalogPrefer'/>
+ <enum name='XML_CATA_PREFER_SYSTEM' file='catalog' value='2' type='xmlCatalogPrefer'/>
+ <enum name='XML_CDATA_SECTION_NODE' file='tree' value='4' type='xmlElementType'/>
+ <enum name='XML_CHAR_ENCODING_2022_JP' file='encoding' value='19' type='xmlCharEncoding' info='ISO-2022-JP'/>
+ <enum name='XML_CHAR_ENCODING_8859_1' file='encoding' value='10' type='xmlCharEncoding' info='ISO-8859-1 ISO Latin 1'/>
+ <enum name='XML_CHAR_ENCODING_8859_2' file='encoding' value='11' type='xmlCharEncoding' info='ISO-8859-2 ISO Latin 2'/>
+ <enum name='XML_CHAR_ENCODING_8859_3' file='encoding' value='12' type='xmlCharEncoding' info='ISO-8859-3'/>
+ <enum name='XML_CHAR_ENCODING_8859_4' file='encoding' value='13' type='xmlCharEncoding' info='ISO-8859-4'/>
+ <enum name='XML_CHAR_ENCODING_8859_5' file='encoding' value='14' type='xmlCharEncoding' info='ISO-8859-5'/>
+ <enum name='XML_CHAR_ENCODING_8859_6' file='encoding' value='15' type='xmlCharEncoding' info='ISO-8859-6'/>
+ <enum name='XML_CHAR_ENCODING_8859_7' file='encoding' value='16' type='xmlCharEncoding' info='ISO-8859-7'/>
+ <enum name='XML_CHAR_ENCODING_8859_8' file='encoding' value='17' type='xmlCharEncoding' info='ISO-8859-8'/>
+ <enum name='XML_CHAR_ENCODING_8859_9' file='encoding' value='18' type='xmlCharEncoding' info='ISO-8859-9'/>
+ <enum name='XML_CHAR_ENCODING_ASCII' file='encoding' value='22' type='xmlCharEncoding' info=' pure ASCII'/>
+ <enum name='XML_CHAR_ENCODING_EBCDIC' file='encoding' value='6' type='xmlCharEncoding' info='EBCDIC uh!'/>
+ <enum name='XML_CHAR_ENCODING_ERROR' file='encoding' value='-1' type='xmlCharEncoding' info='No char encoding detected'/>
+ <enum name='XML_CHAR_ENCODING_EUC_JP' file='encoding' value='21' type='xmlCharEncoding' info='EUC-JP'/>
+ <enum name='XML_CHAR_ENCODING_NONE' file='encoding' value='0' type='xmlCharEncoding' info='No char encoding detected'/>
+ <enum name='XML_CHAR_ENCODING_SHIFT_JIS' file='encoding' value='20' type='xmlCharEncoding' info='Shift_JIS'/>
+ <enum name='XML_CHAR_ENCODING_UCS2' file='encoding' value='9' type='xmlCharEncoding' info='UCS-2'/>
+ <enum name='XML_CHAR_ENCODING_UCS4BE' file='encoding' value='5' type='xmlCharEncoding' info='UCS-4 big endian'/>
+ <enum name='XML_CHAR_ENCODING_UCS4LE' file='encoding' value='4' type='xmlCharEncoding' info='UCS-4 little endian'/>
+ <enum name='XML_CHAR_ENCODING_UCS4_2143' file='encoding' value='7' type='xmlCharEncoding' info='UCS-4 unusual ordering'/>
+ <enum name='XML_CHAR_ENCODING_UCS4_3412' file='encoding' value='8' type='xmlCharEncoding' info='UCS-4 unusual ordering'/>
+ <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_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'/>
+ <enum name='XML_DOCUMENT_NODE' file='tree' value='9' type='xmlElementType'/>
+ <enum name='XML_DOCUMENT_TYPE_NODE' file='tree' value='10' type='xmlElementType'/>
+ <enum name='XML_DTD_ATTRIBUTE_DEFAULT' file='xmlerror' value='500' type='xmlParserErrors'/>
+ <enum name='XML_DTD_ATTRIBUTE_REDEFINED' file='xmlerror' value='501' type='xmlParserErrors' info='501'/>
+ <enum name='XML_DTD_ATTRIBUTE_VALUE' file='xmlerror' value='502' type='xmlParserErrors' info='502'/>
+ <enum name='XML_DTD_CONTENT_ERROR' file='xmlerror' value='503' type='xmlParserErrors' info='503'/>
+ <enum name='XML_DTD_CONTENT_MODEL' file='xmlerror' value='504' type='xmlParserErrors' info='504'/>
+ <enum name='XML_DTD_CONTENT_NOT_DETERMINIST' file='xmlerror' value='505' type='xmlParserErrors' info='505'/>
+ <enum name='XML_DTD_DIFFERENT_PREFIX' file='xmlerror' value='506' type='xmlParserErrors' info='506'/>
+ <enum name='XML_DTD_ELEM_DEFAULT_NAMESPACE' file='xmlerror' value='507' type='xmlParserErrors' info='507'/>
+ <enum name='XML_DTD_ELEM_NAMESPACE' file='xmlerror' value='508' type='xmlParserErrors' info='508'/>
+ <enum name='XML_DTD_ELEM_REDEFINED' file='xmlerror' value='509' type='xmlParserErrors' info='509'/>
+ <enum name='XML_DTD_EMPTY_NOTATION' file='xmlerror' value='510' type='xmlParserErrors' info='510'/>
+ <enum name='XML_DTD_ENTITY_TYPE' file='xmlerror' value='511' type='xmlParserErrors' info='511'/>
+ <enum name='XML_DTD_ID_FIXED' file='xmlerror' value='512' type='xmlParserErrors' info='512'/>
+ <enum name='XML_DTD_ID_REDEFINED' file='xmlerror' value='513' type='xmlParserErrors' info='513'/>
+ <enum name='XML_DTD_ID_SUBSET' file='xmlerror' value='514' type='xmlParserErrors' info='514'/>
+ <enum name='XML_DTD_INVALID_CHILD' file='xmlerror' value='515' type='xmlParserErrors' info='515'/>
+ <enum name='XML_DTD_INVALID_DEFAULT' file='xmlerror' value='516' type='xmlParserErrors' info='516'/>
+ <enum name='XML_DTD_LOAD_ERROR' file='xmlerror' value='517' type='xmlParserErrors' info='517'/>
+ <enum name='XML_DTD_MISSING_ATTRIBUTE' file='xmlerror' value='518' type='xmlParserErrors' info='518'/>
+ <enum name='XML_DTD_MIXED_CORRUPT' file='xmlerror' value='519' type='xmlParserErrors' info='519'/>
+ <enum name='XML_DTD_MULTIPLE_ID' file='xmlerror' value='520' type='xmlParserErrors' info='520'/>
+ <enum name='XML_DTD_NODE' file='tree' value='14' type='xmlElementType'/>
+ <enum name='XML_DTD_NOTATION_REDEFINED' file='xmlerror' value='526' type='xmlParserErrors' info='526'/>
+ <enum name='XML_DTD_NOTATION_VALUE' file='xmlerror' value='527' type='xmlParserErrors' info='527'/>
+ <enum name='XML_DTD_NOT_EMPTY' file='xmlerror' value='528' type='xmlParserErrors' info='528'/>
+ <enum name='XML_DTD_NOT_PCDATA' file='xmlerror' value='529' type='xmlParserErrors' info='529'/>
+ <enum name='XML_DTD_NOT_STANDALONE' file='xmlerror' value='530' type='xmlParserErrors' info='530'/>
+ <enum name='XML_DTD_NO_DOC' file='xmlerror' value='521' type='xmlParserErrors' info='521'/>
+ <enum name='XML_DTD_NO_DTD' file='xmlerror' value='522' type='xmlParserErrors' info='522'/>
+ <enum name='XML_DTD_NO_ELEM_NAME' file='xmlerror' value='523' type='xmlParserErrors' info='523'/>
+ <enum name='XML_DTD_NO_PREFIX' file='xmlerror' value='524' type='xmlParserErrors' info='524'/>
+ <enum name='XML_DTD_NO_ROOT' file='xmlerror' value='525' type='xmlParserErrors' info='525'/>
+ <enum name='XML_DTD_ROOT_NAME' file='xmlerror' value='531' type='xmlParserErrors' info='531'/>
+ <enum name='XML_DTD_STANDALONE_DEFAULTED' file='xmlerror' value='538' type='xmlParserErrors' info='538'/>
+ <enum name='XML_DTD_STANDALONE_WHITE_SPACE' file='xmlerror' value='532' type='xmlParserErrors' info='532'/>
+ <enum name='XML_DTD_UNKNOWN_ATTRIBUTE' file='xmlerror' value='533' type='xmlParserErrors' info='533'/>
+ <enum name='XML_DTD_UNKNOWN_ELEM' file='xmlerror' value='534' type='xmlParserErrors' info='534'/>
+ <enum name='XML_DTD_UNKNOWN_ENTITY' file='xmlerror' value='535' type='xmlParserErrors' info='535'/>
+ <enum name='XML_DTD_UNKNOWN_ID' file='xmlerror' value='536' type='xmlParserErrors' info='536'/>
+ <enum name='XML_DTD_UNKNOWN_NOTATION' file='xmlerror' value='537' type='xmlParserErrors' info='537'/>
+ <enum name='XML_ELEMENT_CONTENT_ELEMENT' file='tree' value='2' type='xmlElementContentType'/>
+ <enum name='XML_ELEMENT_CONTENT_MULT' file='tree' value='3' type='xmlElementContentOccur'/>
+ <enum name='XML_ELEMENT_CONTENT_ONCE' file='tree' value='1' type='xmlElementContentOccur'/>
+ <enum name='XML_ELEMENT_CONTENT_OPT' file='tree' value='2' type='xmlElementContentOccur'/>
+ <enum name='XML_ELEMENT_CONTENT_OR' file='tree' value='4' type='xmlElementContentType'/>
+ <enum name='XML_ELEMENT_CONTENT_PCDATA' file='tree' value='1' type='xmlElementContentType'/>
+ <enum name='XML_ELEMENT_CONTENT_PLUS' file='tree' value='4' type='xmlElementContentOccur'/>
+ <enum name='XML_ELEMENT_CONTENT_SEQ' file='tree' value='3' type='xmlElementContentType'/>
+ <enum name='XML_ELEMENT_DECL' file='tree' value='15' type='xmlElementType'/>
+ <enum name='XML_ELEMENT_NODE' file='tree' value='1' type='xmlElementType'/>
+ <enum name='XML_ELEMENT_TYPE_ANY' file='tree' value='2' type='xmlElementTypeVal'/>
+ <enum name='XML_ELEMENT_TYPE_ELEMENT' file='tree' value='4' type='xmlElementTypeVal'/>
+ <enum name='XML_ELEMENT_TYPE_EMPTY' file='tree' value='1' type='xmlElementTypeVal'/>
+ <enum name='XML_ELEMENT_TYPE_MIXED' file='tree' value='3' type='xmlElementTypeVal'/>
+ <enum name='XML_ELEMENT_TYPE_UNDEFINED' file='tree' value='0' type='xmlElementTypeVal'/>
+ <enum name='XML_ENTITY_DECL' file='tree' value='17' type='xmlElementType'/>
+ <enum name='XML_ENTITY_NODE' file='tree' value='6' type='xmlElementType'/>
+ <enum name='XML_ENTITY_REF_NODE' file='tree' value='5' type='xmlElementType'/>
+ <enum name='XML_ERR_ATTLIST_NOT_FINISHED' file='xmlerror' value='51' type='xmlParserErrors' info='51'/>
+ <enum name='XML_ERR_ATTLIST_NOT_STARTED' file='xmlerror' value='50' type='xmlParserErrors' info='50'/>
+ <enum name='XML_ERR_ATTRIBUTE_NOT_FINISHED' file='xmlerror' value='40' type='xmlParserErrors' info='40'/>
+ <enum name='XML_ERR_ATTRIBUTE_NOT_STARTED' file='xmlerror' value='39' type='xmlParserErrors' info='39'/>
+ <enum name='XML_ERR_ATTRIBUTE_REDEFINED' file='xmlerror' value='42' type='xmlParserErrors' info='42'/>
+ <enum name='XML_ERR_ATTRIBUTE_WITHOUT_VALUE' file='xmlerror' value='41' type='xmlParserErrors' info='41'/>
+ <enum name='XML_ERR_CDATA_NOT_FINISHED' file='xmlerror' value='63' type='xmlParserErrors' info='63'/>
+ <enum name='XML_ERR_CHARREF_AT_EOF' file='xmlerror' value='10' type='xmlParserErrors' info='10'/>
+ <enum name='XML_ERR_CHARREF_IN_DTD' file='xmlerror' value='13' type='xmlParserErrors' info='13'/>
+ <enum name='XML_ERR_CHARREF_IN_EPILOG' file='xmlerror' value='12' type='xmlParserErrors' info='12'/>
+ <enum name='XML_ERR_CHARREF_IN_PROLOG' file='xmlerror' value='11' type='xmlParserErrors' info='11'/>
+ <enum name='XML_ERR_COMMENT_NOT_FINISHED' file='xmlerror' value='45' type='xmlParserErrors' info='45'/>
+ <enum name='XML_ERR_CONDSEC_INVALID' file='xmlerror' value='83' type='xmlParserErrors' info='83'/>
+ <enum name='XML_ERR_CONDSEC_INVALID_KEYWORD' file='xmlerror' value='95' type='xmlParserErrors' info='95'/>
+ <enum name='XML_ERR_CONDSEC_NOT_FINISHED' file='xmlerror' value='59' type='xmlParserErrors' info='59'/>
+ <enum name='XML_ERR_CONDSEC_NOT_STARTED' file='xmlerror' value='58' type='xmlParserErrors' info='58'/>
+ <enum name='XML_ERR_DOCTYPE_NOT_FINISHED' file='xmlerror' value='61' type='xmlParserErrors' info='61'/>
+ <enum name='XML_ERR_DOCUMENT_EMPTY' file='xmlerror' value='4' type='xmlParserErrors' info='4'/>
+ <enum name='XML_ERR_DOCUMENT_END' file='xmlerror' value='5' type='xmlParserErrors' info='5'/>
+ <enum name='XML_ERR_DOCUMENT_START' file='xmlerror' value='3' type='xmlParserErrors' info='3'/>
+ <enum name='XML_ERR_ELEMCONTENT_NOT_FINISHED' file='xmlerror' value='55' type='xmlParserErrors' info='55'/>
+ <enum name='XML_ERR_ELEMCONTENT_NOT_STARTED' file='xmlerror' value='54' type='xmlParserErrors' info='54'/>
+ <enum name='XML_ERR_ENCODING_NAME' file='xmlerror' value='79' type='xmlParserErrors' info='79'/>
+ <enum name='XML_ERR_ENTITYREF_AT_EOF' file='xmlerror' value='14' type='xmlParserErrors' info='14'/>
+ <enum name='XML_ERR_ENTITYREF_IN_DTD' file='xmlerror' value='17' type='xmlParserErrors' info='17'/>
+ <enum name='XML_ERR_ENTITYREF_IN_EPILOG' file='xmlerror' value='16' type='xmlParserErrors' info='16'/>
+ <enum name='XML_ERR_ENTITYREF_IN_PROLOG' file='xmlerror' value='15' type='xmlParserErrors' info='15'/>
+ <enum name='XML_ERR_ENTITYREF_NO_NAME' file='xmlerror' value='22' type='xmlParserErrors' info='22'/>
+ <enum name='XML_ERR_ENTITYREF_SEMICOL_MISSING' file='xmlerror' value='23' type='xmlParserErrors' info='23'/>
+ <enum name='XML_ERR_ENTITY_BOUNDARY' file='xmlerror' value='90' type='xmlParserErrors' info='90'/>
+ <enum name='XML_ERR_ENTITY_CHAR_ERROR' file='xmlerror' value='87' type='xmlParserErrors' info='87'/>
+ <enum name='XML_ERR_ENTITY_IS_EXTERNAL' file='xmlerror' value='29' type='xmlParserErrors' info='29'/>
+ <enum name='XML_ERR_ENTITY_IS_PARAMETER' file='xmlerror' value='30' type='xmlParserErrors' info='30'/>
+ <enum name='XML_ERR_ENTITY_LOOP' file='xmlerror' value='89' type='xmlParserErrors' info='89'/>
+ <enum name='XML_ERR_ENTITY_NOT_FINISHED' file='xmlerror' value='37' type='xmlParserErrors' info='37'/>
+ <enum name='XML_ERR_ENTITY_NOT_STARTED' file='xmlerror' value='36' type='xmlParserErrors' info='36'/>
+ <enum name='XML_ERR_ENTITY_PE_INTERNAL' file='xmlerror' value='88' type='xmlParserErrors' info='88'/>
+ <enum name='XML_ERR_EQUAL_REQUIRED' file='xmlerror' value='75' type='xmlParserErrors' info='75'/>
+ <enum name='XML_ERR_ERROR' file='xmlerror' value='2' type='xmlErrorLevel' info='A recoverable error'/>
+ <enum name='XML_ERR_EXTRA_CONTENT' file='xmlerror' value='86' type='xmlParserErrors' info='86'/>
+ <enum name='XML_ERR_EXT_ENTITY_STANDALONE' file='xmlerror' value='82' type='xmlParserErrors' info='82'/>
+ <enum name='XML_ERR_EXT_SUBSET_NOT_FINISHED' file='xmlerror' value='60' type='xmlParserErrors' info='60'/>
+ <enum name='XML_ERR_FATAL' file='xmlerror' value='3' type='xmlErrorLevel' info=' A fatal error'/>
+ <enum name='XML_ERR_GT_REQUIRED' file='xmlerror' value='73' type='xmlParserErrors' info='73'/>
+ <enum name='XML_ERR_HYPHEN_IN_COMMENT' file='xmlerror' value='80' type='xmlParserErrors' info='80'/>
+ <enum name='XML_ERR_INTERNAL_ERROR' file='xmlerror' value='1' type='xmlParserErrors' info='1'/>
+ <enum name='XML_ERR_INVALID_CHAR' file='xmlerror' value='9' type='xmlParserErrors' info='9'/>
+ <enum name='XML_ERR_INVALID_CHARREF' file='xmlerror' value='8' type='xmlParserErrors' info='8'/>
+ <enum name='XML_ERR_INVALID_DEC_CHARREF' file='xmlerror' value='7' type='xmlParserErrors' info='7'/>
+ <enum name='XML_ERR_INVALID_ENCODING' file='xmlerror' value='81' type='xmlParserErrors' info='81'/>
+ <enum name='XML_ERR_INVALID_HEX_CHARREF' file='xmlerror' value='6' type='xmlParserErrors' info='6'/>
+ <enum name='XML_ERR_INVALID_URI' file='xmlerror' value='91' type='xmlParserErrors' info='91'/>
+ <enum name='XML_ERR_LITERAL_NOT_FINISHED' file='xmlerror' value='44' type='xmlParserErrors' info='44'/>
+ <enum name='XML_ERR_LITERAL_NOT_STARTED' file='xmlerror' value='43' type='xmlParserErrors' info='43'/>
+ <enum name='XML_ERR_LTSLASH_REQUIRED' file='xmlerror' value='74' type='xmlParserErrors' info='74'/>
+ <enum name='XML_ERR_LT_IN_ATTRIBUTE' file='xmlerror' value='38' type='xmlParserErrors' info='38'/>
+ <enum name='XML_ERR_LT_REQUIRED' file='xmlerror' value='72' type='xmlParserErrors' info='72'/>
+ <enum name='XML_ERR_MISPLACED_CDATA_END' file='xmlerror' value='62' type='xmlParserErrors' info='62'/>
+ <enum name='XML_ERR_MISSING_ENCODING' file='xmlerror' value='101' type='xmlParserErrors' info='101'/>
+ <enum name='XML_ERR_MIXED_NOT_FINISHED' file='xmlerror' value='53' type='xmlParserErrors' info='53'/>
+ <enum name='XML_ERR_MIXED_NOT_STARTED' file='xmlerror' value='52' type='xmlParserErrors' info='52'/>
+ <enum name='XML_ERR_NAME_REQUIRED' file='xmlerror' value='68' type='xmlParserErrors' info='68'/>
+ <enum name='XML_ERR_NMTOKEN_REQUIRED' file='xmlerror' value='67' type='xmlParserErrors' info='67'/>
+ <enum name='XML_ERR_NONE' file='xmlerror' value='0' type='xmlErrorLevel'/>
+ <enum name='XML_ERR_NOTATION_NOT_FINISHED' file='xmlerror' value='49' type='xmlParserErrors' info='49'/>
+ <enum name='XML_ERR_NOTATION_NOT_STARTED' file='xmlerror' value='48' type='xmlParserErrors' info='48'/>
+ <enum name='XML_ERR_NOT_WELL_BALANCED' file='xmlerror' value='85' type='xmlParserErrors' info='85'/>
+ <enum name='XML_ERR_NO_DTD' file='xmlerror' value='94' type='xmlParserErrors' info='94'/>
+ <enum name='XML_ERR_NO_MEMORY' file='xmlerror' value='2' type='xmlParserErrors' info='2'/>
+ <enum name='XML_ERR_NS_DECL_ERROR' file='xmlerror' value='35' type='xmlParserErrors' info='35'/>
+ <enum name='XML_ERR_OK' file='xmlerror' value='0' type='xmlParserErrors'/>
+ <enum name='XML_ERR_PCDATA_REQUIRED' file='xmlerror' value='69' type='xmlParserErrors' info='69'/>
+ <enum name='XML_ERR_PEREF_AT_EOF' file='xmlerror' value='18' type='xmlParserErrors' info='18'/>
+ <enum name='XML_ERR_PEREF_IN_EPILOG' file='xmlerror' value='20' type='xmlParserErrors' info='20'/>
+ <enum name='XML_ERR_PEREF_IN_INT_SUBSET' file='xmlerror' value='21' type='xmlParserErrors' info='21'/>
+ <enum name='XML_ERR_PEREF_IN_PROLOG' file='xmlerror' value='19' type='xmlParserErrors' info='19'/>
+ <enum name='XML_ERR_PEREF_NO_NAME' file='xmlerror' value='24' type='xmlParserErrors' info='24'/>
+ <enum name='XML_ERR_PEREF_SEMICOL_MISSING' file='xmlerror' value='25' type='xmlParserErrors' info='25'/>
+ <enum name='XML_ERR_PI_NOT_FINISHED' file='xmlerror' value='47' type='xmlParserErrors' info='47'/>
+ <enum name='XML_ERR_PI_NOT_STARTED' file='xmlerror' value='46' type='xmlParserErrors' info='46'/>
+ <enum name='XML_ERR_PUBID_REQUIRED' file='xmlerror' value='71' type='xmlParserErrors' info='71'/>
+ <enum name='XML_ERR_RESERVED_XML_NAME' file='xmlerror' value='64' type='xmlParserErrors' info='64'/>
+ <enum name='XML_ERR_SEPARATOR_REQUIRED' file='xmlerror' value='66' type='xmlParserErrors' info='66'/>
+ <enum name='XML_ERR_SPACE_REQUIRED' file='xmlerror' value='65' type='xmlParserErrors' info='65'/>
+ <enum name='XML_ERR_STANDALONE_VALUE' file='xmlerror' value='78' type='xmlParserErrors' info='78'/>
+ <enum name='XML_ERR_STRING_NOT_CLOSED' file='xmlerror' value='34' type='xmlParserErrors' info='34'/>
+ <enum name='XML_ERR_STRING_NOT_STARTED' file='xmlerror' value='33' type='xmlParserErrors' info='33'/>
+ <enum name='XML_ERR_TAG_NAME_MISMATCH' file='xmlerror' value='76' type='xmlParserErrors' info='76'/>
+ <enum name='XML_ERR_TAG_NOT_FINISHED' file='xmlerror' value='77' type='xmlParserErrors' info='77'/>
+ <enum name='XML_ERR_UNDECLARED_ENTITY' file='xmlerror' value='26' type='xmlParserErrors' info='26'/>
+ <enum name='XML_ERR_UNKNOWN_ENCODING' file='xmlerror' value='31' type='xmlParserErrors' info='31'/>
+ <enum name='XML_ERR_UNPARSED_ENTITY' file='xmlerror' value='28' type='xmlParserErrors' info='28'/>
+ <enum name='XML_ERR_UNSUPPORTED_ENCODING' file='xmlerror' value='32' type='xmlParserErrors' info='32'/>
+ <enum name='XML_ERR_URI_FRAGMENT' file='xmlerror' value='92' type='xmlParserErrors' info='92'/>
+ <enum name='XML_ERR_URI_REQUIRED' file='xmlerror' value='70' type='xmlParserErrors' info='70'/>
+ <enum name='XML_ERR_VALUE_REQUIRED' file='xmlerror' value='84' type='xmlParserErrors' info='84'/>
+ <enum name='XML_ERR_VERSION_MISSING' file='xmlerror' value='96' type='xmlParserErrors' info='96'/>
+ <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_EXTERNAL_GENERAL_PARSED_ENTITY' file='entities' value='2' type='xmlEntityType'/>
+ <enum name='XML_EXTERNAL_GENERAL_UNPARSED_ENTITY' file='entities' value='3' type='xmlEntityType'/>
+ <enum name='XML_EXTERNAL_PARAMETER_ENTITY' file='entities' value='5' type='xmlEntityType'/>
+ <enum name='XML_FROM_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_DATATYPE' file='xmlerror' value='15' type='xmlErrorDomain' info='The W3C XML Schemas Datatype module'/>
+ <enum name='XML_FROM_DTD' file='xmlerror' value='4' type='xmlErrorDomain' info='The XML DTD validation with parser contex'/>
+ <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 FTP module'/>
+ <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_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'/>
+ <enum name='XML_FROM_PARSER' file='xmlerror' value='1' type='xmlErrorDomain' info='The XML parser'/>
+ <enum name='XML_FROM_REGEXP' file='xmlerror' value='14' type='xmlErrorDomain' info='The regular expressions module'/>
+ <enum name='XML_FROM_RELAXNGP' file='xmlerror' value='18' type='xmlErrorDomain' info='The Relax-NG parser module'/>
+ <enum name='XML_FROM_RELAXNGV' file='xmlerror' value='19' type='xmlErrorDomain' info='The Relax-NG validator module'/>
+ <enum name='XML_FROM_SCHEMASP' file='xmlerror' value='16' type='xmlErrorDomain' info='The W3C XML Schemas parser module'/>
+ <enum name='XML_FROM_SCHEMASV' file='xmlerror' value='17' type='xmlErrorDomain' info='The W3C XML Schemas validation module'/>
+ <enum name='XML_FROM_TREE' file='xmlerror' value='2' type='xmlErrorDomain' info='The tree module'/>
+ <enum name='XML_FROM_VALID' file='xmlerror' value='23' type='xmlErrorDomain' info=' The XML DTD validation with valid context'/>
+ <enum name='XML_FROM_XINCLUDE' file='xmlerror' value='11' type='xmlErrorDomain' info='The XInclude processing'/>
+ <enum name='XML_FROM_XPATH' file='xmlerror' value='12' type='xmlErrorDomain' info='The XPath module'/>
+ <enum name='XML_FROM_XPOINTER' file='xmlerror' value='13' type='xmlErrorDomain' info='The XPointer module'/>
+ <enum name='XML_FROM_XSLT' file='xmlerror' value='22' type='xmlErrorDomain' info='The XSLT engine from libxslt'/>
+ <enum name='XML_FTP_ACCNT' file='xmlerror' value='2002' type='xmlParserErrors' info='2002'/>
+ <enum name='XML_FTP_EPSV_ANSWER' file='xmlerror' value='2001' type='xmlParserErrors' info='2001'/>
+ <enum name='XML_FTP_PASV_ANSWER' file='xmlerror' value='2000' type='xmlParserErrors'/>
+ <enum name='XML_HTML_DOCUMENT_NODE' file='tree' value='13' type='xmlElementType'/>
+ <enum name='XML_HTML_STRUCURE_ERROR' file='xmlerror' value='800' type='xmlParserErrors'/>
+ <enum name='XML_HTML_UNKNOWN_TAG' file='xmlerror' value='801' type='xmlParserErrors' info='801'/>
+ <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_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'/>
+ <enum name='XML_IO_BUFFER_FULL' file='xmlerror' value='1548' type='xmlParserErrors' info='1548'/>
+ <enum name='XML_IO_EACCES' file='xmlerror' value='1501' type='xmlParserErrors' info='1501'/>
+ <enum name='XML_IO_EADDRINUSE' file='xmlerror' value='1554' type='xmlParserErrors' info='1554'/>
+ <enum name='XML_IO_EAFNOSUPPORT' file='xmlerror' value='1556' type='xmlParserErrors' info='1556'/>
+ <enum name='XML_IO_EAGAIN' file='xmlerror' value='1502' type='xmlParserErrors' info='1502'/>
+ <enum name='XML_IO_EALREADY' file='xmlerror' value='1555' type='xmlParserErrors' info='1555'/>
+ <enum name='XML_IO_EBADF' file='xmlerror' value='1503' type='xmlParserErrors' info='1503'/>
+ <enum name='XML_IO_EBADMSG' file='xmlerror' value='1504' type='xmlParserErrors' info='1504'/>
+ <enum name='XML_IO_EBUSY' file='xmlerror' value='1505' type='xmlParserErrors' info='1505'/>
+ <enum name='XML_IO_ECANCELED' file='xmlerror' value='1506' type='xmlParserErrors' info='1506'/>
+ <enum name='XML_IO_ECHILD' file='xmlerror' value='1507' type='xmlParserErrors' info='1507'/>
+ <enum name='XML_IO_ECONNREFUSED' file='xmlerror' value='1552' type='xmlParserErrors' info='1552'/>
+ <enum name='XML_IO_EDEADLK' file='xmlerror' value='1508' type='xmlParserErrors' info='1508'/>
+ <enum name='XML_IO_EDOM' file='xmlerror' value='1509' type='xmlParserErrors' info='1509'/>
+ <enum name='XML_IO_EEXIST' file='xmlerror' value='1510' type='xmlParserErrors' info='1510'/>
+ <enum name='XML_IO_EFAULT' file='xmlerror' value='1511' type='xmlParserErrors' info='1511'/>
+ <enum name='XML_IO_EFBIG' file='xmlerror' value='1512' type='xmlParserErrors' info='1512'/>
+ <enum name='XML_IO_EINPROGRESS' file='xmlerror' value='1513' type='xmlParserErrors' info='1513'/>
+ <enum name='XML_IO_EINTR' file='xmlerror' value='1514' type='xmlParserErrors' info='1514'/>
+ <enum name='XML_IO_EINVAL' file='xmlerror' value='1515' type='xmlParserErrors' info='1515'/>
+ <enum name='XML_IO_EIO' file='xmlerror' value='1516' type='xmlParserErrors' info='1516'/>
+ <enum name='XML_IO_EISCONN' file='xmlerror' value='1551' type='xmlParserErrors' info='1551'/>
+ <enum name='XML_IO_EISDIR' file='xmlerror' value='1517' type='xmlParserErrors' info='1517'/>
+ <enum name='XML_IO_EMFILE' file='xmlerror' value='1518' type='xmlParserErrors' info='1518'/>
+ <enum name='XML_IO_EMLINK' file='xmlerror' value='1519' type='xmlParserErrors' info='1519'/>
+ <enum name='XML_IO_EMSGSIZE' file='xmlerror' value='1520' type='xmlParserErrors' info='1520'/>
+ <enum name='XML_IO_ENAMETOOLONG' file='xmlerror' value='1521' type='xmlParserErrors' info='1521'/>
+ <enum name='XML_IO_ENCODER' file='xmlerror' value='1544' type='xmlParserErrors' info='1544'/>
+ <enum name='XML_IO_ENETUNREACH' file='xmlerror' value='1553' type='xmlParserErrors' info='1553'/>
+ <enum name='XML_IO_ENFILE' file='xmlerror' value='1522' type='xmlParserErrors' info='1522'/>
+ <enum name='XML_IO_ENODEV' file='xmlerror' value='1523' type='xmlParserErrors' info='1523'/>
+ <enum name='XML_IO_ENOENT' file='xmlerror' value='1524' type='xmlParserErrors' info='1524'/>
+ <enum name='XML_IO_ENOEXEC' file='xmlerror' value='1525' type='xmlParserErrors' info='1525'/>
+ <enum name='XML_IO_ENOLCK' file='xmlerror' value='1526' type='xmlParserErrors' info='1526'/>
+ <enum name='XML_IO_ENOMEM' file='xmlerror' value='1527' type='xmlParserErrors' info='1527'/>
+ <enum name='XML_IO_ENOSPC' file='xmlerror' value='1528' type='xmlParserErrors' info='1528'/>
+ <enum name='XML_IO_ENOSYS' file='xmlerror' value='1529' type='xmlParserErrors' info='1529'/>
+ <enum name='XML_IO_ENOTDIR' file='xmlerror' value='1530' type='xmlParserErrors' info='1530'/>
+ <enum name='XML_IO_ENOTEMPTY' file='xmlerror' value='1531' type='xmlParserErrors' info='1531'/>
+ <enum name='XML_IO_ENOTSOCK' file='xmlerror' value='1550' type='xmlParserErrors' info='1550'/>
+ <enum name='XML_IO_ENOTSUP' file='xmlerror' value='1532' type='xmlParserErrors' info='1532'/>
+ <enum name='XML_IO_ENOTTY' file='xmlerror' value='1533' type='xmlParserErrors' info='1533'/>
+ <enum name='XML_IO_ENXIO' file='xmlerror' value='1534' type='xmlParserErrors' info='1534'/>
+ <enum name='XML_IO_EPERM' file='xmlerror' value='1535' type='xmlParserErrors' info='1535'/>
+ <enum name='XML_IO_EPIPE' file='xmlerror' value='1536' type='xmlParserErrors' info='1536'/>
+ <enum name='XML_IO_ERANGE' file='xmlerror' value='1537' type='xmlParserErrors' info='1537'/>
+ <enum name='XML_IO_EROFS' file='xmlerror' value='1538' type='xmlParserErrors' info='1538'/>
+ <enum name='XML_IO_ESPIPE' file='xmlerror' value='1539' type='xmlParserErrors' info='1539'/>
+ <enum name='XML_IO_ESRCH' file='xmlerror' value='1540' type='xmlParserErrors' info='1540'/>
+ <enum name='XML_IO_ETIMEDOUT' file='xmlerror' value='1541' type='xmlParserErrors' info='1541'/>
+ <enum name='XML_IO_EXDEV' file='xmlerror' value='1542' type='xmlParserErrors' info='1542'/>
+ <enum name='XML_IO_FLUSH' file='xmlerror' value='1545' type='xmlParserErrors' info='1545'/>
+ <enum name='XML_IO_LOAD_ERROR' file='xmlerror' value='1549' type='xmlParserErrors' info='1549'/>
+ <enum name='XML_IO_NETWORK_ATTEMPT' file='xmlerror' value='1543' type='xmlParserErrors' info='1543'/>
+ <enum name='XML_IO_NO_INPUT' file='xmlerror' value='1547' type='xmlParserErrors' info='1547'/>
+ <enum name='XML_IO_UNKNOWN' file='xmlerror' value='1500' type='xmlParserErrors'/>
+ <enum name='XML_IO_WRITE' file='xmlerror' value='1546' type='xmlParserErrors' info='1546'/>
+ <enum name='XML_NAMESPACE_DECL' file='tree' value='18' type='xmlElementType'/>
+ <enum name='XML_NOTATION_NODE' file='tree' value='12' type='xmlElementType'/>
+ <enum name='XML_NS_ERR_ATTRIBUTE_REDEFINED' file='xmlerror' value='203' type='xmlParserErrors' info='203'/>
+ <enum name='XML_NS_ERR_QNAME' file='xmlerror' value='202' type='xmlParserErrors' info='202'/>
+ <enum name='XML_NS_ERR_UNDEFINED_NAMESPACE' file='xmlerror' value='201' type='xmlParserErrors' info='201'/>
+ <enum name='XML_NS_ERR_XML_NAMESPACE' file='xmlerror' value='200' type='xmlParserErrors'/>
+ <enum name='XML_PARSER_ATTRIBUTE_VALUE' file='parser' value='12' type='xmlParserInputState' info='within an attribute value'/>
+ <enum name='XML_PARSER_CDATA_SECTION' file='parser' value='8' type='xmlParserInputState' info='within a CDATA section'/>
+ <enum name='XML_PARSER_COMMENT' file='parser' value='5' type='xmlParserInputState' info='within a comment'/>
+ <enum name='XML_PARSER_CONTENT' file='parser' value='7' type='xmlParserInputState' info='within the content'/>
+ <enum name='XML_PARSER_DEFAULTATTRS' file='xmlreader' value='2' type='xmlParserProperties'/>
+ <enum name='XML_PARSER_DTD' file='parser' value='3' type='xmlParserInputState' info='within some DTD content'/>
+ <enum name='XML_PARSER_END_TAG' file='parser' value='9' type='xmlParserInputState' info='within a closing tag'/>
+ <enum name='XML_PARSER_ENTITY_DECL' file='parser' value='10' type='xmlParserInputState' info='within an entity declaration'/>
+ <enum name='XML_PARSER_ENTITY_VALUE' file='parser' value='11' type='xmlParserInputState' info='within an entity value in a decl'/>
+ <enum name='XML_PARSER_EOF' file='parser' value='-1' type='xmlParserInputState' info='nothing is to be parsed'/>
+ <enum name='XML_PARSER_EPILOG' file='parser' value='14' type='xmlParserInputState' info='the Misc* after the last end tag'/>
+ <enum name='XML_PARSER_IGNORE' file='parser' value='15' type='xmlParserInputState' info='within an IGNORED section'/>
+ <enum name='XML_PARSER_LOADDTD' file='xmlreader' value='1' type='xmlParserProperties'/>
+ <enum name='XML_PARSER_MISC' file='parser' value='1' type='xmlParserInputState' info='Misc* before int subset'/>
+ <enum name='XML_PARSER_PI' file='parser' value='2' type='xmlParserInputState' info='Within a processing instruction'/>
+ <enum name='XML_PARSER_PROLOG' file='parser' value='4' type='xmlParserInputState' info='Misc* after internal subset'/>
+ <enum name='XML_PARSER_PUBLIC_LITERAL' file='parser' value='16' type='xmlParserInputState' info=' within a PUBLIC value'/>
+ <enum name='XML_PARSER_SEVERITY_ERROR' file='xmlreader' value='4' type='xmlParserSeverities'/>
+ <enum name='XML_PARSER_SEVERITY_VALIDITY_ERROR' file='xmlreader' value='2' type='xmlParserSeverities'/>
+ <enum name='XML_PARSER_SEVERITY_VALIDITY_WARNING' file='xmlreader' value='1' type='xmlParserSeverities'/>
+ <enum name='XML_PARSER_SEVERITY_WARNING' file='xmlreader' value='3' type='xmlParserSeverities'/>
+ <enum name='XML_PARSER_START' file='parser' value='0' type='xmlParserInputState' info='nothing has been parsed'/>
+ <enum name='XML_PARSER_START_TAG' file='parser' value='6' type='xmlParserInputState' info='within a start tag'/>
+ <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_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'/>
+ <enum name='XML_PARSE_DTDVALID' file='parser' value='16' type='xmlParserOption' info='validate with the DTD'/>
+ <enum name='XML_PARSE_NOBLANKS' file='parser' value='256' type='xmlParserOption' info='remove blank nodes'/>
+ <enum name='XML_PARSE_NOCDATA' file='parser' value='16384' type='xmlParserOption' info=' merge CDATA as text nodes'/>
+ <enum name='XML_PARSE_NODICT' file='parser' value='4096' type='xmlParserOption' info='Do not reuse the context dictionnary'/>
+ <enum name='XML_PARSE_NOENT' file='parser' value='2' type='xmlParserOption' info='substitute entities'/>
+ <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_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_RECOVER' file='parser' value='1' type='xmlParserOption' info='recover on errors'/>
+ <enum name='XML_PARSE_SAX1' file='parser' value='512' type='xmlParserOption' info='use the SAX1 interface internally'/>
+ <enum name='XML_PARSE_XINCLUDE' file='parser' value='1024' type='xmlParserOption' info='Implement XInclude substitition'/>
+ <enum name='XML_PI_NODE' file='tree' value='7' type='xmlElementType'/>
+ <enum name='XML_READER_TYPE_ATTRIBUTE' file='xmlreader' value='2' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_CDATA' file='xmlreader' value='4' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_COMMENT' file='xmlreader' value='8' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_DOCUMENT' file='xmlreader' value='9' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_DOCUMENT_FRAGMENT' file='xmlreader' value='11' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_DOCUMENT_TYPE' file='xmlreader' value='10' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_ELEMENT' file='xmlreader' value='1' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_END_ELEMENT' file='xmlreader' value='15' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_END_ENTITY' file='xmlreader' value='16' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_ENTITY' file='xmlreader' value='6' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_ENTITY_REFERENCE' file='xmlreader' value='5' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_NONE' file='xmlreader' value='0' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_NOTATION' file='xmlreader' value='12' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_PROCESSING_INSTRUCTION' file='xmlreader' value='7' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_SIGNIFICANT_WHITESPACE' file='xmlreader' value='14' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_TEXT' file='xmlreader' value='3' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_WHITESPACE' file='xmlreader' value='13' type='xmlReaderTypes'/>
+ <enum name='XML_READER_TYPE_XML_DECLARATION' file='xmlreader' value='17' type='xmlReaderTypes'/>
+ <enum name='XML_REGEXP_COMPILE_ERROR' file='xmlerror' value='1450' type='xmlParserErrors'/>
+ <enum name='XML_RELAXNGP_CRNG' file='relaxng' value='2' type='xmlRelaxNGParserFlag'/>
+ <enum name='XML_RELAXNGP_FREE_DOC' file='relaxng' value='1' type='xmlRelaxNGParserFlag'/>
+ <enum name='XML_RELAXNGP_NONE' file='relaxng' value='0' type='xmlRelaxNGParserFlag'/>
+ <enum name='XML_RELAXNG_ERR_ATTREXTRANS' file='relaxng' value='20' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ATTRNAME' file='relaxng' value='14' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ATTRNONS' file='relaxng' value='16' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ATTRVALID' file='relaxng' value='24' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ATTRWRONGNS' file='relaxng' value='18' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_CONTENTVALID' file='relaxng' value='25' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_DATAELEM' file='relaxng' value='28' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_DATATYPE' file='relaxng' value='31' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_DUPID' file='relaxng' value='4' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ELEMEXTRANS' file='relaxng' value='19' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ELEMNAME' file='relaxng' value='13' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ELEMNONS' file='relaxng' value='15' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ELEMNOTEMPTY' file='relaxng' value='21' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ELEMWRONG' file='relaxng' value='38' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_ELEMWRONGNS' file='relaxng' value='17' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_EXTRACONTENT' file='relaxng' value='26' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_EXTRADATA' file='relaxng' value='35' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_INTEREXTRA' file='relaxng' value='12' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_INTERNAL' file='relaxng' value='37' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_INTERNODATA' file='relaxng' value='10' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_INTERSEQ' file='relaxng' value='11' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_INVALIDATTR' file='relaxng' value='27' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_LACKDATA' file='relaxng' value='36' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_LIST' file='relaxng' value='33' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_LISTELEM' file='relaxng' value='30' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_LISTEMPTY' file='relaxng' value='9' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_LISTEXTRA' file='relaxng' value='8' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_MEMORY' file='relaxng' value='1' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_NODEFINE' file='relaxng' value='7' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_NOELEM' file='relaxng' value='22' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_NOGRAMMAR' file='relaxng' value='34' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_NOSTATE' file='relaxng' value='6' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_NOTELEM' file='relaxng' value='23' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_TEXTWRONG' file='relaxng' value='39' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_TYPE' file='relaxng' value='2' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_TYPECMP' file='relaxng' value='5' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_TYPEVAL' file='relaxng' value='3' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_VALELEM' file='relaxng' value='29' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_ERR_VALUE' file='relaxng' value='32' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RELAXNG_OK' file='relaxng' value='0' type='xmlRelaxNGValidErr'/>
+ <enum name='XML_RNGP_ANYNAME_ATTR_ANCESTOR' file='xmlerror' value='1000' type='xmlParserErrors'/>
+ <enum name='XML_RNGP_ATTRIBUTE_CHILDREN' file='xmlerror' value='1002' type='xmlParserErrors' info='1002'/>
+ <enum name='XML_RNGP_ATTRIBUTE_CONTENT' file='xmlerror' value='1003' type='xmlParserErrors' info='1003'/>
+ <enum name='XML_RNGP_ATTRIBUTE_EMPTY' file='xmlerror' value='1004' type='xmlParserErrors' info='1004'/>
+ <enum name='XML_RNGP_ATTRIBUTE_NOOP' file='xmlerror' value='1005' type='xmlParserErrors' info='1005'/>
+ <enum name='XML_RNGP_ATTR_CONFLICT' file='xmlerror' value='1001' type='xmlParserErrors' info='1001'/>
+ <enum name='XML_RNGP_CHOICE_CONTENT' file='xmlerror' value='1006' type='xmlParserErrors' info='1006'/>
+ <enum name='XML_RNGP_CHOICE_EMPTY' file='xmlerror' value='1007' type='xmlParserErrors' info='1007'/>
+ <enum name='XML_RNGP_CREATE_FAILURE' file='xmlerror' value='1008' type='xmlParserErrors' info='1008'/>
+ <enum name='XML_RNGP_DATA_CONTENT' file='xmlerror' value='1009' type='xmlParserErrors' info='1009'/>
+ <enum name='XML_RNGP_DEFINE_CREATE_FAILED' file='xmlerror' value='1011' type='xmlParserErrors' info='1011'/>
+ <enum name='XML_RNGP_DEFINE_EMPTY' file='xmlerror' value='1012' type='xmlParserErrors' info='1012'/>
+ <enum name='XML_RNGP_DEFINE_MISSING' file='xmlerror' value='1013' type='xmlParserErrors' info='1013'/>
+ <enum name='XML_RNGP_DEFINE_NAME_MISSING' file='xmlerror' value='1014' type='xmlParserErrors' info='1014'/>
+ <enum name='XML_RNGP_DEF_CHOICE_AND_INTERLEAVE' file='xmlerror' value='1010' type='xmlParserErrors' info='1010'/>
+ <enum name='XML_RNGP_ELEMENT_CONTENT' file='xmlerror' value='1018' type='xmlParserErrors' info='1018'/>
+ <enum name='XML_RNGP_ELEMENT_EMPTY' file='xmlerror' value='1017' type='xmlParserErrors' info='1017'/>
+ <enum name='XML_RNGP_ELEMENT_NAME' file='xmlerror' value='1019' type='xmlParserErrors' info='1019'/>
+ <enum name='XML_RNGP_ELEMENT_NO_CONTENT' file='xmlerror' value='1020' type='xmlParserErrors' info='1020'/>
+ <enum name='XML_RNGP_ELEM_CONTENT_EMPTY' file='xmlerror' value='1015' type='xmlParserErrors' info='1015'/>
+ <enum name='XML_RNGP_ELEM_CONTENT_ERROR' file='xmlerror' value='1016' type='xmlParserErrors' info='1016'/>
+ <enum name='XML_RNGP_ELEM_TEXT_CONFLICT' file='xmlerror' value='1021' type='xmlParserErrors' info='1021'/>
+ <enum name='XML_RNGP_EMPTY' file='xmlerror' value='1022' type='xmlParserErrors' info='1022'/>
+ <enum name='XML_RNGP_EMPTY_CONSTRUCT' file='xmlerror' value='1023' type='xmlParserErrors' info='1023'/>
+ <enum name='XML_RNGP_EMPTY_CONTENT' file='xmlerror' value='1024' type='xmlParserErrors' info='1024'/>
+ <enum name='XML_RNGP_EMPTY_NOT_EMPTY' file='xmlerror' value='1025' type='xmlParserErrors' info='1025'/>
+ <enum name='XML_RNGP_ERROR_TYPE_LIB' file='xmlerror' value='1026' type='xmlParserErrors' info='1026'/>
+ <enum name='XML_RNGP_EXCEPT_EMPTY' file='xmlerror' value='1027' type='xmlParserErrors' info='1027'/>
+ <enum name='XML_RNGP_EXCEPT_MISSING' file='xmlerror' value='1028' type='xmlParserErrors' info='1028'/>
+ <enum name='XML_RNGP_EXCEPT_MULTIPLE' file='xmlerror' value='1029' type='xmlParserErrors' info='1029'/>
+ <enum name='XML_RNGP_EXCEPT_NO_CONTENT' file='xmlerror' value='1030' type='xmlParserErrors' info='1030'/>
+ <enum name='XML_RNGP_EXTERNALREF_EMTPY' file='xmlerror' value='1031' type='xmlParserErrors' info='1031'/>
+ <enum name='XML_RNGP_EXTERNALREF_RECURSE' file='xmlerror' value='1033' type='xmlParserErrors' info='1033'/>
+ <enum name='XML_RNGP_EXTERNAL_REF_FAILURE' file='xmlerror' value='1032' type='xmlParserErrors' info='1032'/>
+ <enum name='XML_RNGP_FORBIDDEN_ATTRIBUTE' file='xmlerror' value='1034' type='xmlParserErrors' info='1034'/>
+ <enum name='XML_RNGP_FOREIGN_ELEMENT' file='xmlerror' value='1035' type='xmlParserErrors' info='1035'/>
+ <enum name='XML_RNGP_GRAMMAR_CONTENT' file='xmlerror' value='1036' type='xmlParserErrors' info='1036'/>
+ <enum name='XML_RNGP_GRAMMAR_EMPTY' file='xmlerror' value='1037' type='xmlParserErrors' info='1037'/>
+ <enum name='XML_RNGP_GRAMMAR_MISSING' file='xmlerror' value='1038' type='xmlParserErrors' info='1038'/>
+ <enum name='XML_RNGP_GRAMMAR_NO_START' file='xmlerror' value='1039' type='xmlParserErrors' info='1039'/>
+ <enum name='XML_RNGP_GROUP_ATTR_CONFLICT' file='xmlerror' value='1040' type='xmlParserErrors' info='1040'/>
+ <enum name='XML_RNGP_HREF_ERROR' file='xmlerror' value='1041' type='xmlParserErrors' info='1041'/>
+ <enum name='XML_RNGP_INCLUDE_EMPTY' file='xmlerror' value='1042' type='xmlParserErrors' info='1042'/>
+ <enum name='XML_RNGP_INCLUDE_FAILURE' file='xmlerror' value='1043' type='xmlParserErrors' info='1043'/>
+ <enum name='XML_RNGP_INCLUDE_RECURSE' file='xmlerror' value='1044' type='xmlParserErrors' info='1044'/>
+ <enum name='XML_RNGP_INTERLEAVE_ADD' file='xmlerror' value='1045' type='xmlParserErrors' info='1045'/>
+ <enum name='XML_RNGP_INTERLEAVE_CREATE_FAILED' file='xmlerror' value='1046' type='xmlParserErrors' info='1046'/>
+ <enum name='XML_RNGP_INTERLEAVE_EMPTY' file='xmlerror' value='1047' type='xmlParserErrors' info='1047'/>
+ <enum name='XML_RNGP_INTERLEAVE_NO_CONTENT' file='xmlerror' value='1048' type='xmlParserErrors' info='1048'/>
+ <enum name='XML_RNGP_INVALID_DEFINE_NAME' file='xmlerror' value='1049' type='xmlParserErrors' info='1049'/>
+ <enum name='XML_RNGP_INVALID_URI' file='xmlerror' value='1050' type='xmlParserErrors' info='1050'/>
+ <enum name='XML_RNGP_INVALID_VALUE' file='xmlerror' value='1051' type='xmlParserErrors' info='1051'/>
+ <enum name='XML_RNGP_MISSING_HREF' file='xmlerror' value='1052' type='xmlParserErrors' info='1052'/>
+ <enum name='XML_RNGP_NAME_MISSING' file='xmlerror' value='1053' type='xmlParserErrors' info='1053'/>
+ <enum name='XML_RNGP_NEED_COMBINE' file='xmlerror' value='1054' type='xmlParserErrors' info='1054'/>
+ <enum name='XML_RNGP_NOTALLOWED_NOT_EMPTY' file='xmlerror' value='1055' type='xmlParserErrors' info='1055'/>
+ <enum name='XML_RNGP_NSNAME_ATTR_ANCESTOR' file='xmlerror' value='1056' type='xmlParserErrors' info='1056'/>
+ <enum name='XML_RNGP_NSNAME_NO_NS' file='xmlerror' value='1057' type='xmlParserErrors' info='1057'/>
+ <enum name='XML_RNGP_PARAM_FORBIDDEN' file='xmlerror' value='1058' type='xmlParserErrors' info='1058'/>
+ <enum name='XML_RNGP_PARAM_NAME_MISSING' file='xmlerror' value='1059' type='xmlParserErrors' info='1059'/>
+ <enum name='XML_RNGP_PARENTREF_CREATE_FAILED' file='xmlerror' value='1060' type='xmlParserErrors' info='1060'/>
+ <enum name='XML_RNGP_PARENTREF_NAME_INVALID' file='xmlerror' value='1061' type='xmlParserErrors' info='1061'/>
+ <enum name='XML_RNGP_PARENTREF_NOT_EMPTY' file='xmlerror' value='1064' type='xmlParserErrors' info='1064'/>
+ <enum name='XML_RNGP_PARENTREF_NO_NAME' file='xmlerror' value='1062' type='xmlParserErrors' info='1062'/>
+ <enum name='XML_RNGP_PARENTREF_NO_PARENT' file='xmlerror' value='1063' type='xmlParserErrors' info='1063'/>
+ <enum name='XML_RNGP_PARSE_ERROR' file='xmlerror' value='1065' type='xmlParserErrors' info='1065'/>
+ <enum name='XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME' file='xmlerror' value='1066' type='xmlParserErrors' info='1066'/>
+ <enum name='XML_RNGP_PAT_ATTR_ATTR' file='xmlerror' value='1067' type='xmlParserErrors' info='1067'/>
+ <enum name='XML_RNGP_PAT_ATTR_ELEM' file='xmlerror' value='1068' type='xmlParserErrors' info='1068'/>
+ <enum name='XML_RNGP_PAT_DATA_EXCEPT_ATTR' file='xmlerror' value='1069' type='xmlParserErrors' info='1069'/>
+ <enum name='XML_RNGP_PAT_DATA_EXCEPT_ELEM' file='xmlerror' value='1070' type='xmlParserErrors' info='1070'/>
+ <enum name='XML_RNGP_PAT_DATA_EXCEPT_EMPTY' file='xmlerror' value='1071' type='xmlParserErrors' info='1071'/>
+ <enum name='XML_RNGP_PAT_DATA_EXCEPT_GROUP' file='xmlerror' value='1072' type='xmlParserErrors' info='1072'/>
+ <enum name='XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE' file='xmlerror' value='1073' type='xmlParserErrors' info='1073'/>
+ <enum name='XML_RNGP_PAT_DATA_EXCEPT_LIST' file='xmlerror' value='1074' type='xmlParserErrors' info='1074'/>
+ <enum name='XML_RNGP_PAT_DATA_EXCEPT_ONEMORE' file='xmlerror' value='1075' type='xmlParserErrors' info='1075'/>
+ <enum name='XML_RNGP_PAT_DATA_EXCEPT_REF' file='xmlerror' value='1076' type='xmlParserErrors' info='1076'/>
+ <enum name='XML_RNGP_PAT_DATA_EXCEPT_TEXT' file='xmlerror' value='1077' type='xmlParserErrors' info='1077'/>
+ <enum name='XML_RNGP_PAT_LIST_ATTR' file='xmlerror' value='1078' type='xmlParserErrors' info='1078'/>
+ <enum name='XML_RNGP_PAT_LIST_ELEM' file='xmlerror' value='1079' type='xmlParserErrors' info='1079'/>
+ <enum name='XML_RNGP_PAT_LIST_INTERLEAVE' file='xmlerror' value='1080' type='xmlParserErrors' info='1080'/>
+ <enum name='XML_RNGP_PAT_LIST_LIST' file='xmlerror' value='1081' type='xmlParserErrors' info='1081'/>
+ <enum name='XML_RNGP_PAT_LIST_REF' file='xmlerror' value='1082' type='xmlParserErrors' info='1082'/>
+ <enum name='XML_RNGP_PAT_LIST_TEXT' file='xmlerror' value='1083' type='xmlParserErrors' info='1083'/>
+ <enum name='XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME' file='xmlerror' value='1084' type='xmlParserErrors' info='1084'/>
+ <enum name='XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME' file='xmlerror' value='1085' type='xmlParserErrors' info='1085'/>
+ <enum name='XML_RNGP_PAT_ONEMORE_GROUP_ATTR' file='xmlerror' value='1086' type='xmlParserErrors' info='1086'/>
+ <enum name='XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR' file='xmlerror' value='1087' type='xmlParserErrors' info='1087'/>
+ <enum name='XML_RNGP_PAT_START_ATTR' file='xmlerror' value='1088' type='xmlParserErrors' info='1088'/>
+ <enum name='XML_RNGP_PAT_START_DATA' file='xmlerror' value='1089' type='xmlParserErrors' info='1089'/>
+ <enum name='XML_RNGP_PAT_START_EMPTY' file='xmlerror' value='1090' type='xmlParserErrors' info='1090'/>
+ <enum name='XML_RNGP_PAT_START_GROUP' file='xmlerror' value='1091' type='xmlParserErrors' info='1091'/>
+ <enum name='XML_RNGP_PAT_START_INTERLEAVE' file='xmlerror' value='1092' type='xmlParserErrors' info='1092'/>
+ <enum name='XML_RNGP_PAT_START_LIST' file='xmlerror' value='1093' type='xmlParserErrors' info='1093'/>
+ <enum name='XML_RNGP_PAT_START_ONEMORE' file='xmlerror' value='1094' type='xmlParserErrors' info='1094'/>
+ <enum name='XML_RNGP_PAT_START_TEXT' file='xmlerror' value='1095' type='xmlParserErrors' info='1095'/>
+ <enum name='XML_RNGP_PAT_START_VALUE' file='xmlerror' value='1096' type='xmlParserErrors' info='1096'/>
+ <enum name='XML_RNGP_PREFIX_UNDEFINED' file='xmlerror' value='1097' type='xmlParserErrors' info='1097'/>
+ <enum name='XML_RNGP_REF_CREATE_FAILED' file='xmlerror' value='1098' type='xmlParserErrors' info='1098'/>
+ <enum name='XML_RNGP_REF_CYCLE' file='xmlerror' value='1099' type='xmlParserErrors' info='1099'/>
+ <enum name='XML_RNGP_REF_NAME_INVALID' file='xmlerror' value='1100' type='xmlParserErrors' info='1100'/>
+ <enum name='XML_RNGP_REF_NOT_EMPTY' file='xmlerror' value='1103' type='xmlParserErrors' info='1103'/>
+ <enum name='XML_RNGP_REF_NO_DEF' file='xmlerror' value='1101' type='xmlParserErrors' info='1101'/>
+ <enum name='XML_RNGP_REF_NO_NAME' file='xmlerror' value='1102' type='xmlParserErrors' info='1102'/>
+ <enum name='XML_RNGP_START_CHOICE_AND_INTERLEAVE' file='xmlerror' value='1104' type='xmlParserErrors' info='1104'/>
+ <enum name='XML_RNGP_START_CONTENT' file='xmlerror' value='1105' type='xmlParserErrors' info='1105'/>
+ <enum name='XML_RNGP_START_EMPTY' file='xmlerror' value='1106' type='xmlParserErrors' info='1106'/>
+ <enum name='XML_RNGP_START_MISSING' file='xmlerror' value='1107' type='xmlParserErrors' info='1107'/>
+ <enum name='XML_RNGP_TEXT_EXPECTED' file='xmlerror' value='1108' type='xmlParserErrors' info='1108'/>
+ <enum name='XML_RNGP_TEXT_HAS_CHILD' file='xmlerror' value='1109' type='xmlParserErrors' info='1109'/>
+ <enum name='XML_RNGP_TYPE_MISSING' file='xmlerror' value='1110' type='xmlParserErrors' info='1110'/>
+ <enum name='XML_RNGP_TYPE_NOT_FOUND' file='xmlerror' value='1111' type='xmlParserErrors' info='1111'/>
+ <enum name='XML_RNGP_TYPE_VALUE' file='xmlerror' value='1112' type='xmlParserErrors' info='1112'/>
+ <enum name='XML_RNGP_UNKNOWN_ATTRIBUTE' file='xmlerror' value='1113' type='xmlParserErrors' info='1113'/>
+ <enum name='XML_RNGP_UNKNOWN_COMBINE' file='xmlerror' value='1114' type='xmlParserErrors' info='1114'/>
+ <enum name='XML_RNGP_UNKNOWN_CONSTRUCT' file='xmlerror' value='1115' type='xmlParserErrors' info='1115'/>
+ <enum name='XML_RNGP_UNKNOWN_TYPE_LIB' file='xmlerror' value='1116' type='xmlParserErrors' info='1116'/>
+ <enum name='XML_RNGP_URI_FRAGMENT' file='xmlerror' value='1117' type='xmlParserErrors' info='1117'/>
+ <enum name='XML_RNGP_URI_NOT_ABSOLUTE' file='xmlerror' value='1118' type='xmlParserErrors' info='1118'/>
+ <enum name='XML_RNGP_VALUE_EMPTY' file='xmlerror' value='1119' type='xmlParserErrors' info='1119'/>
+ <enum name='XML_RNGP_VALUE_NO_CONTENT' file='xmlerror' value='1120' type='xmlParserErrors' info='1120'/>
+ <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_NOT_UTF8' file='xmlerror' value='1400' type='xmlParserErrors'/>
+ <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'/>
+ <enum name='XML_SCHEMAP_ATTRGRP_NONAME_NOREF' file='xmlerror' value='1702' type='xmlParserErrors' info='1702'/>
+ <enum name='XML_SCHEMAP_ATTR_NONAME_NOREF' file='xmlerror' value='1703' type='xmlParserErrors' info='1703'/>
+ <enum name='XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF' file='xmlerror' value='1704' type='xmlParserErrors' info='1704'/>
+ <enum name='XML_SCHEMAP_DEF_AND_PREFIX' file='xmlerror' value='1768' type='xmlParserErrors' info='1767'/>
+ <enum name='XML_SCHEMAP_ELEMFORMDEFAULT_VALUE' file='xmlerror' value='1705' type='xmlParserErrors' info='1705'/>
+ <enum name='XML_SCHEMAP_ELEM_DEFAULT_FIXED' file='xmlerror' value='1755' type='xmlParserErrors' info='1755'/>
+ <enum name='XML_SCHEMAP_ELEM_NONAME_NOREF' file='xmlerror' value='1706' type='xmlParserErrors' info='1706'/>
+ <enum name='XML_SCHEMAP_EXTENSION_NO_BASE' file='xmlerror' value='1707' type='xmlParserErrors' info='1707'/>
+ <enum name='XML_SCHEMAP_FACET_NO_VALUE' file='xmlerror' value='1708' type='xmlParserErrors' info='1708'/>
+ <enum name='XML_SCHEMAP_FAILED_BUILD_IMPORT' file='xmlerror' value='1709' type='xmlParserErrors' info='1709'/>
+ <enum name='XML_SCHEMAP_FAILED_LOAD' file='xmlerror' value='1757' type='xmlParserErrors' info='1756'/>
+ <enum name='XML_SCHEMAP_FAILED_PARSE' file='xmlerror' value='1766' type='xmlParserErrors' info='1765'/>
+ <enum name='XML_SCHEMAP_GROUP_NONAME_NOREF' file='xmlerror' value='1710' type='xmlParserErrors' info='1710'/>
+ <enum name='XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI' file='xmlerror' value='1711' type='xmlParserErrors' info='1711'/>
+ <enum name='XML_SCHEMAP_IMPORT_REDEFINE_NSNAME' file='xmlerror' value='1712' type='xmlParserErrors' info='1712'/>
+ <enum name='XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI' file='xmlerror' value='1713' type='xmlParserErrors' info='1713'/>
+ <enum name='XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI' file='xmlerror' value='1770' type='xmlParserErrors' info='1769'/>
+ <enum name='XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI' file='xmlerror' value='1771' type='xmlParserErrors' info='1770'/>
+ <enum name='XML_SCHEMAP_INVALID_BOOLEAN' file='xmlerror' value='1714' type='xmlParserErrors' info='1714'/>
+ <enum name='XML_SCHEMAP_INVALID_ENUM' file='xmlerror' value='1715' type='xmlParserErrors' info='1715'/>
+ <enum name='XML_SCHEMAP_INVALID_FACET' file='xmlerror' value='1716' type='xmlParserErrors' info='1716'/>
+ <enum name='XML_SCHEMAP_INVALID_FACET_VALUE' file='xmlerror' value='1717' type='xmlParserErrors' info='1717'/>
+ <enum name='XML_SCHEMAP_INVALID_MAXOCCURS' file='xmlerror' value='1718' type='xmlParserErrors' info='1718'/>
+ <enum name='XML_SCHEMAP_INVALID_MINOCCURS' file='xmlerror' value='1719' type='xmlParserErrors' info='1719'/>
+ <enum name='XML_SCHEMAP_INVALID_REF_AND_SUBTYPE' file='xmlerror' value='1720' type='xmlParserErrors' info='1720'/>
+ <enum name='XML_SCHEMAP_INVALID_WHITE_SPACE' file='xmlerror' value='1721' type='xmlParserErrors' info='1721'/>
+ <enum name='XML_SCHEMAP_NOATTR_NOREF' file='xmlerror' value='1722' type='xmlParserErrors' info='1722'/>
+ <enum name='XML_SCHEMAP_NOROOT' file='xmlerror' value='1759' type='xmlParserErrors' info='1758'/>
+ <enum name='XML_SCHEMAP_NOTATION_NO_NAME' file='xmlerror' value='1723' type='xmlParserErrors' info='1723'/>
+ <enum name='XML_SCHEMAP_NOTHING_TO_PARSE' file='xmlerror' value='1758' type='xmlParserErrors' info='1757'/>
+ <enum name='XML_SCHEMAP_NOTYPE_NOREF' file='xmlerror' value='1724' type='xmlParserErrors' info='1724'/>
+ <enum name='XML_SCHEMAP_NOT_SCHEMA' file='xmlerror' value='1772' type='xmlParserErrors' info='1771'/>
+ <enum name='XML_SCHEMAP_PREFIX_UNDEFINED' file='xmlerror' value='1700' type='xmlParserErrors'/>
+ <enum name='XML_SCHEMAP_REDEFINED_ATTR' file='xmlerror' value='1764' type='xmlParserErrors' info='1763'/>
+ <enum name='XML_SCHEMAP_REDEFINED_ATTRGROUP' file='xmlerror' value='1763' type='xmlParserErrors' info='1762'/>
+ <enum name='XML_SCHEMAP_REDEFINED_ELEMENT' file='xmlerror' value='1762' type='xmlParserErrors' info='1761'/>
+ <enum name='XML_SCHEMAP_REDEFINED_GROUP' file='xmlerror' value='1760' type='xmlParserErrors' info='1759'/>
+ <enum name='XML_SCHEMAP_REDEFINED_NOTATION' file='xmlerror' value='1765' type='xmlParserErrors' info='1764'/>
+ <enum name='XML_SCHEMAP_REDEFINED_TYPE' file='xmlerror' value='1761' type='xmlParserErrors' info='1760'/>
+ <enum name='XML_SCHEMAP_REF_AND_SUBTYPE' file='xmlerror' value='1725' type='xmlParserErrors' info='1725'/>
+ <enum name='XML_SCHEMAP_REGEXP_INVALID' file='xmlerror' value='1756' type='xmlParserErrors' info='1756'/>
+ <enum name='XML_SCHEMAP_RESTRICTION_NONAME_NOREF' file='xmlerror' value='1726' type='xmlParserErrors' info='1726'/>
+ <enum name='XML_SCHEMAP_SIMPLETYPE_NONAME' file='xmlerror' value='1727' type='xmlParserErrors' info='1727'/>
+ <enum name='XML_SCHEMAP_TYPE_AND_SUBTYPE' file='xmlerror' value='1728' type='xmlParserErrors' info='1728'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_ALL_CHILD' file='xmlerror' value='1729' type='xmlParserErrors' info='1729'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD' file='xmlerror' value='1730' type='xmlParserErrors' info='1730'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD' file='xmlerror' value='1732' type='xmlParserErrors' info='1732'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP' file='xmlerror' value='1733' type='xmlParserErrors' info='1733'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_ATTR_CHILD' file='xmlerror' value='1731' type='xmlParserErrors' info='1731'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_BASE_TYPE' file='xmlerror' value='1734' type='xmlParserErrors' info='1734'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_CHOICE_CHILD' file='xmlerror' value='1735' type='xmlParserErrors' info='1735'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD' file='xmlerror' value='1736' type='xmlParserErrors' info='1736'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD' file='xmlerror' value='1737' type='xmlParserErrors' info='1737'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_ELEM_CHILD' file='xmlerror' value='1738' type='xmlParserErrors' info='1738'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD' file='xmlerror' value='1739' type='xmlParserErrors' info='1739'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_FACET_CHILD' file='xmlerror' value='1740' type='xmlParserErrors' info='1740'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_FACET_TYPE' file='xmlerror' value='1741' type='xmlParserErrors' info='1741'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_GROUP_CHILD' file='xmlerror' value='1742' type='xmlParserErrors' info='1742'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_IMPORT_CHILD' file='xmlerror' value='1743' type='xmlParserErrors' info='1743'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD' file='xmlerror' value='1769' type='xmlParserErrors' info='1768'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_LIST_CHILD' file='xmlerror' value='1744' type='xmlParserErrors' info='1744'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_NOTATION_CHILD' file='xmlerror' value='1745' type='xmlParserErrors' info='1745'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_PREFIX' file='xmlerror' value='1767' type='xmlParserErrors' info='1766'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD' file='xmlerror' value='1746' type='xmlParserErrors' info='1746'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_REF' file='xmlerror' value='1747' type='xmlParserErrors' info='1747'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD' file='xmlerror' value='1748' type='xmlParserErrors' info='1748'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD' file='xmlerror' value='1749' type='xmlParserErrors' info='1749'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD' file='xmlerror' value='1750' type='xmlParserErrors' info='1750'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD' file='xmlerror' value='1751' type='xmlParserErrors' info='1751'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD' file='xmlerror' value='1752' type='xmlParserErrors' info='1752'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_TYPE' file='xmlerror' value='1753' type='xmlParserErrors' info='1753'/>
+ <enum name='XML_SCHEMAP_UNKNOWN_UNION_CHILD' file='xmlerror' value='1754' type='xmlParserErrors' info='1754'/>
+ <enum name='XML_SCHEMAS_ERR_' file='xmlschemas' value='24' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_ATTRINVALID' file='xmlschemas' value='21' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_ATTRUNKNOWN' file='xmlschemas' value='20' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_CONSTRUCT' file='xmlschemas' value='17' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_ELEMCONT' file='xmlschemas' value='10' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_EXTRACONTENT' file='xmlschemas' value='13' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_FACET' file='xmlschemas' value='23' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_HAVEDEFAULT' file='xmlschemas' value='11' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_INTERNAL' file='xmlschemas' value='18' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_INVALIDATTR' file='xmlschemas' value='14' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_INVALIDELEM' file='xmlschemas' value='15' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_ISABSTRACT' file='xmlschemas' value='8' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_MISSING' file='xmlschemas' value='4' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_NOROLLBACK' file='xmlschemas' value='7' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_NOROOT' file='xmlschemas' value='1' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_NOTDETERMINIST' file='xmlschemas' value='16' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_NOTEMPTY' file='xmlschemas' value='9' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_NOTNILLABLE' file='xmlschemas' value='12' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_NOTSIMPLE' file='xmlschemas' value='19' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_NOTTOPLEVEL' file='xmlschemas' value='3' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_NOTYPE' file='xmlschemas' value='6' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_OK' file='xmlschemas' value='0' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_UNDECLAREDELEM' file='xmlschemas' value='2' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_VALUE' file='xmlschemas' value='22' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_WRONGELEM' file='xmlschemas' value='5' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAS_ERR_XXX' file='xmlschemas' value='25' type='xmlSchemaValidError'/>
+ <enum name='XML_SCHEMAV_ATTRINVALID' file='xmlerror' value='1820' type='xmlParserErrors' info='1820'/>
+ <enum name='XML_SCHEMAV_ATTRUNKNOWN' file='xmlerror' value='1819' type='xmlParserErrors' info='1819'/>
+ <enum name='XML_SCHEMAV_CONSTRUCT' file='xmlerror' value='1816' type='xmlParserErrors' info='1816'/>
+ <enum name='XML_SCHEMAV_ELEMCONT' file='xmlerror' value='1809' type='xmlParserErrors' info='1809'/>
+ <enum name='XML_SCHEMAV_EXTRACONTENT' file='xmlerror' value='1812' type='xmlParserErrors' info='1812'/>
+ <enum name='XML_SCHEMAV_FACET' file='xmlerror' value='1822' type='xmlParserErrors' info='1822'/>
+ <enum name='XML_SCHEMAV_HAVEDEFAULT' file='xmlerror' value='1810' type='xmlParserErrors' info='1810'/>
+ <enum name='XML_SCHEMAV_INTERNAL' file='xmlerror' value='1817' type='xmlParserErrors' info='1817'/>
+ <enum name='XML_SCHEMAV_INVALIDATTR' file='xmlerror' value='1813' type='xmlParserErrors' info='1813'/>
+ <enum name='XML_SCHEMAV_INVALIDELEM' file='xmlerror' value='1814' type='xmlParserErrors' info='1814'/>
+ <enum name='XML_SCHEMAV_ISABSTRACT' file='xmlerror' value='1807' type='xmlParserErrors' info='1807'/>
+ <enum name='XML_SCHEMAV_MISSING' file='xmlerror' value='1803' type='xmlParserErrors' info='1803'/>
+ <enum name='XML_SCHEMAV_NOROLLBACK' file='xmlerror' value='1806' type='xmlParserErrors' info='1806'/>
+ <enum name='XML_SCHEMAV_NOROOT' file='xmlerror' value='1800' type='xmlParserErrors'/>
+ <enum name='XML_SCHEMAV_NOTDETERMINIST' file='xmlerror' value='1815' type='xmlParserErrors' info='1815'/>
+ <enum name='XML_SCHEMAV_NOTEMPTY' file='xmlerror' value='1808' type='xmlParserErrors' info='1808'/>
+ <enum name='XML_SCHEMAV_NOTNILLABLE' file='xmlerror' value='1811' type='xmlParserErrors' info='1811'/>
+ <enum name='XML_SCHEMAV_NOTSIMPLE' file='xmlerror' value='1818' type='xmlParserErrors' info='1818'/>
+ <enum name='XML_SCHEMAV_NOTTOPLEVEL' file='xmlerror' value='1802' type='xmlParserErrors' info='1802'/>
+ <enum name='XML_SCHEMAV_NOTYPE' file='xmlerror' value='1805' type='xmlParserErrors' info='1805'/>
+ <enum name='XML_SCHEMAV_UNDECLAREDELEM' file='xmlerror' value='1801' type='xmlParserErrors' info='1801'/>
+ <enum name='XML_SCHEMAV_VALUE' file='xmlerror' value='1821' type='xmlParserErrors' info='1821'/>
+ <enum name='XML_SCHEMAV_WRONGELEM' file='xmlerror' value='1804' type='xmlParserErrors' info='1804'/>
+ <enum name='XML_SCHEMA_CONTENT_ANY' file='schemasInternals' value='7' type='xmlSchemaContentType'/>
+ <enum name='XML_SCHEMA_CONTENT_BASIC' file='schemasInternals' value='6' type='xmlSchemaContentType'/>
+ <enum name='XML_SCHEMA_CONTENT_ELEMENTS' file='schemasInternals' value='2' type='xmlSchemaContentType'/>
+ <enum name='XML_SCHEMA_CONTENT_EMPTY' file='schemasInternals' value='1' type='xmlSchemaContentType'/>
+ <enum name='XML_SCHEMA_CONTENT_MIXED' file='schemasInternals' value='3' type='xmlSchemaContentType'/>
+ <enum name='XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS' file='schemasInternals' value='5' type='xmlSchemaContentType'/>
+ <enum name='XML_SCHEMA_CONTENT_SIMPLE' file='schemasInternals' value='4' type='xmlSchemaContentType'/>
+ <enum name='XML_SCHEMA_CONTENT_UNKNOWN' file='schemasInternals' value='0' type='xmlSchemaContentType'/>
+ <enum name='XML_SCHEMA_FACET_ENUMERATION' file='schemasInternals' value='1007' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_FRACTIONDIGITS' file='schemasInternals' value='1005' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_LENGTH' file='schemasInternals' value='1009' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_MAXEXCLUSIVE' file='schemasInternals' value='1003' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_MAXINCLUSIVE' file='schemasInternals' value='1002' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_MAXLENGTH' file='schemasInternals' value='1010' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_MINEXCLUSIVE' file='schemasInternals' value='1001' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_MININCLUSIVE' file='schemasInternals' value='1000' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_MINLENGTH' file='schemasInternals' value='1011' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_PATTERN' file='schemasInternals' value='1006' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_TOTALDIGITS' file='schemasInternals' value='1004' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_FACET_WHITESPACE' file='schemasInternals' value='1008' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_ALL' file='schemasInternals' value='8' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_ANY' file='schemasInternals' value='2' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_ATTRIBUTE' file='schemasInternals' value='15' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_ATTRIBUTEGROUP' file='schemasInternals' value='16' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_BASIC' file='schemasInternals' value='1' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_CHOICE' file='schemasInternals' value='7' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_COMPLEX' file='schemasInternals' value='5' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_COMPLEX_CONTENT' file='schemasInternals' value='10' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_ELEMENT' file='schemasInternals' value='14' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_EXTENSION' file='schemasInternals' value='13' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_FACET' file='schemasInternals' value='3' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_GROUP' file='schemasInternals' value='17' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_LIST' file='schemasInternals' value='19' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_NOTATION' file='schemasInternals' value='18' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_RESTRICTION' file='schemasInternals' value='12' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_SEQUENCE' file='schemasInternals' value='6' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_SIMPLE' file='schemasInternals' value='4' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_SIMPLE_CONTENT' file='schemasInternals' value='9' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_UNION' file='schemasInternals' value='20' type='xmlSchemaTypeType'/>
+ <enum name='XML_SCHEMA_TYPE_UR' file='schemasInternals' value='11' type='xmlSchemaTypeType'/>
+ <enum name='XML_TEXT_NODE' file='tree' value='3' type='xmlElementType'/>
+ <enum name='XML_TREE_INVALID_DEC' file='xmlerror' value='1301' type='xmlParserErrors' info='1301'/>
+ <enum name='XML_TREE_INVALID_HEX' file='xmlerror' value='1300' type='xmlParserErrors'/>
+ <enum name='XML_TREE_UNTERMINATED_ENTITY' file='xmlerror' value='1302' type='xmlParserErrors' info='1302'/>
+ <enum name='XML_WAR_CATALOG_PI' file='xmlerror' value='93' type='xmlParserErrors' info='93'/>
+ <enum name='XML_WAR_LANG_VALUE' file='xmlerror' value='98' type='xmlParserErrors' info='98'/>
+ <enum name='XML_WAR_NS_URI' file='xmlerror' value='99' type='xmlParserErrors' info='99'/>
+ <enum name='XML_WAR_NS_URI_RELATIVE' file='xmlerror' value='100' type='xmlParserErrors' info='100'/>
+ <enum name='XML_WAR_UNDECLARED_ENTITY' file='xmlerror' value='27' type='xmlParserErrors' info='27'/>
+ <enum name='XML_WAR_UNKNOWN_VERSION' file='xmlerror' value='97' type='xmlParserErrors' info='97'/>
+ <enum name='XML_XINCLUDE_BUILD_FAILED' file='xmlerror' value='1609' type='xmlParserErrors' info='1609'/>
+ <enum name='XML_XINCLUDE_DEPRECATED_NS' file='xmlerror' value='1617' type='xmlParserErrors' info='1617'/>
+ <enum name='XML_XINCLUDE_END' file='tree' value='20' type='xmlElementType'/>
+ <enum name='XML_XINCLUDE_ENTITY_DEF_MISMATCH' file='xmlerror' value='1602' type='xmlParserErrors' info='1602'/>
+ <enum name='XML_XINCLUDE_FALLBACKS_IN_INCLUDE' file='xmlerror' value='1615' type='xmlParserErrors' info='1615'/>
+ <enum name='XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE' file='xmlerror' value='1616' type='xmlParserErrors' info='1616'/>
+ <enum name='XML_XINCLUDE_FRAGMENT_ID' file='xmlerror' value='1618' type='xmlParserErrors' info='1618'/>
+ <enum name='XML_XINCLUDE_HREF_URI' file='xmlerror' value='1605' type='xmlParserErrors' info='1605'/>
+ <enum name='XML_XINCLUDE_INCLUDE_IN_INCLUDE' file='xmlerror' value='1614' type='xmlParserErrors' info='1614'/>
+ <enum name='XML_XINCLUDE_INVALID_CHAR' file='xmlerror' value='1608' type='xmlParserErrors' info='1608'/>
+ <enum name='XML_XINCLUDE_MULTIPLE_ROOT' file='xmlerror' value='1611' type='xmlParserErrors' info='1611'/>
+ <enum name='XML_XINCLUDE_NO_FALLBACK' file='xmlerror' value='1604' type='xmlParserErrors' info='1604'/>
+ <enum name='XML_XINCLUDE_NO_HREF' file='xmlerror' value='1603' type='xmlParserErrors' info='1603'/>
+ <enum name='XML_XINCLUDE_PARSE_VALUE' file='xmlerror' value='1601' type='xmlParserErrors' info='1601'/>
+ <enum name='XML_XINCLUDE_RECURSION' file='xmlerror' value='1600' type='xmlParserErrors'/>
+ <enum name='XML_XINCLUDE_START' file='tree' value='19' type='xmlElementType'/>
+ <enum name='XML_XINCLUDE_TEXT_DOCUMENT' file='xmlerror' value='1607' type='xmlParserErrors' info='1607'/>
+ <enum name='XML_XINCLUDE_TEXT_FRAGMENT' file='xmlerror' value='1606' type='xmlParserErrors' info='1606'/>
+ <enum name='XML_XINCLUDE_UNKNOWN_ENCODING' file='xmlerror' value='1610' type='xmlParserErrors' info='1610'/>
+ <enum name='XML_XINCLUDE_XPTR_FAILED' file='xmlerror' value='1612' type='xmlParserErrors' info='1612'/>
+ <enum name='XML_XINCLUDE_XPTR_RESULT' file='xmlerror' value='1613' type='xmlParserErrors' info='1613'/>
+ <enum name='XML_XPATH_ENCODING_ERROR' file='xmlerror' value='1220' type='xmlParserErrors' info='1220'/>
+ <enum name='XML_XPATH_EXPRESSION_OK' file='xmlerror' value='1200' type='xmlParserErrors'/>
+ <enum name='XML_XPATH_EXPR_ERROR' file='xmlerror' value='1207' type='xmlParserErrors' info='1207'/>
+ <enum name='XML_XPATH_INVALID_ARITY' file='xmlerror' value='1212' type='xmlParserErrors' info='1212'/>
+ <enum name='XML_XPATH_INVALID_CHAR_ERROR' file='xmlerror' value='1221' type='xmlParserErrors' info='1221'/>
+ <enum name='XML_XPATH_INVALID_CTXT_POSITION' file='xmlerror' value='1214' type='xmlParserErrors' info='1214'/>
+ <enum name='XML_XPATH_INVALID_CTXT_SIZE' file='xmlerror' value='1213' type='xmlParserErrors' info='1213'/>
+ <enum name='XML_XPATH_INVALID_OPERAND' file='xmlerror' value='1210' type='xmlParserErrors' info='1210'/>
+ <enum name='XML_XPATH_INVALID_PREDICATE_ERROR' file='xmlerror' value='1206' type='xmlParserErrors' info='1206'/>
+ <enum name='XML_XPATH_INVALID_TYPE' file='xmlerror' value='1211' type='xmlParserErrors' info='1211'/>
+ <enum name='XML_XPATH_MEMORY_ERROR' file='xmlerror' value='1215' type='xmlParserErrors' info='1215'/>
+ <enum name='XML_XPATH_NUMBER_ERROR' file='xmlerror' value='1201' type='xmlParserErrors' info='1201'/>
+ <enum name='XML_XPATH_START_LITERAL_ERROR' file='xmlerror' value='1203' type='xmlParserErrors' info='1203'/>
+ <enum name='XML_XPATH_UNCLOSED_ERROR' file='xmlerror' value='1208' type='xmlParserErrors' info='1208'/>
+ <enum name='XML_XPATH_UNDEF_PREFIX_ERROR' file='xmlerror' value='1219' type='xmlParserErrors' info='1219'/>
+ <enum name='XML_XPATH_UNDEF_VARIABLE_ERROR' file='xmlerror' value='1205' type='xmlParserErrors' info='1205'/>
+ <enum name='XML_XPATH_UNFINISHED_LITERAL_ERROR' file='xmlerror' value='1202' type='xmlParserErrors' info='1202'/>
+ <enum name='XML_XPATH_UNKNOWN_FUNC_ERROR' file='xmlerror' value='1209' type='xmlParserErrors' info='1209'/>
+ <enum name='XML_XPATH_VARIABLE_REF_ERROR' file='xmlerror' value='1204' type='xmlParserErrors' info='1204'/>
+ <enum name='XML_XPTR_CHILDSEQ_START' file='xmlerror' value='1901' type='xmlParserErrors' info='1901'/>
+ <enum name='XML_XPTR_EVAL_FAILED' file='xmlerror' value='1902' type='xmlParserErrors' info='1902'/>
+ <enum name='XML_XPTR_EXTRA_OBJECTS' file='xmlerror' value='1903' type='xmlParserErrors' info='1903'/>
+ <enum name='XML_XPTR_RESOURCE_ERROR' file='xmlerror' value='1217' type='xmlParserErrors' info='1217'/>
+ <enum name='XML_XPTR_SUB_RESOURCE_ERROR' file='xmlerror' value='1218' type='xmlParserErrors' info='1218'/>
+ <enum name='XML_XPTR_SYNTAX_ERROR' file='xmlerror' value='1216' type='xmlParserErrors' info='1216'/>
+ <enum name='XML_XPTR_UNKNOWN_SCHEME' file='xmlerror' value='1900' type='xmlParserErrors'/>
+ <enum name='XPATH_BOOLEAN' file='xpath' value='2' type='xmlXPathObjectType'/>
+ <enum name='XPATH_ENCODING_ERROR' file='xpath' value='20' type='xmlXPathError'/>
+ <enum name='XPATH_EXPRESSION_OK' file='xpath' value='0' type='xmlXPathError'/>
+ <enum name='XPATH_EXPR_ERROR' file='xpath' value='7' type='xmlXPathError'/>
+ <enum name='XPATH_INVALID_ARITY' file='xpath' value='12' type='xmlXPathError'/>
+ <enum name='XPATH_INVALID_CHAR_ERROR' file='xpath' value='21' type='xmlXPathError'/>
+ <enum name='XPATH_INVALID_CTXT_POSITION' file='xpath' value='14' type='xmlXPathError'/>
+ <enum name='XPATH_INVALID_CTXT_SIZE' file='xpath' value='13' type='xmlXPathError'/>
+ <enum name='XPATH_INVALID_OPERAND' file='xpath' value='10' type='xmlXPathError'/>
+ <enum name='XPATH_INVALID_PREDICATE_ERROR' file='xpath' value='6' type='xmlXPathError'/>
+ <enum name='XPATH_INVALID_TYPE' file='xpath' value='11' type='xmlXPathError'/>
+ <enum name='XPATH_LOCATIONSET' file='xpath' value='7' type='xmlXPathObjectType'/>
+ <enum name='XPATH_MEMORY_ERROR' file='xpath' value='15' type='xmlXPathError'/>
+ <enum name='XPATH_NODESET' file='xpath' value='1' type='xmlXPathObjectType'/>
+ <enum name='XPATH_NUMBER' file='xpath' value='3' type='xmlXPathObjectType'/>
+ <enum name='XPATH_NUMBER_ERROR' file='xpath' value='1' type='xmlXPathError'/>
+ <enum name='XPATH_POINT' file='xpath' value='5' type='xmlXPathObjectType'/>
+ <enum name='XPATH_RANGE' file='xpath' value='6' type='xmlXPathObjectType'/>
+ <enum name='XPATH_START_LITERAL_ERROR' file='xpath' value='3' type='xmlXPathError'/>
+ <enum name='XPATH_STRING' file='xpath' value='4' type='xmlXPathObjectType'/>
+ <enum name='XPATH_UNCLOSED_ERROR' file='xpath' value='8' type='xmlXPathError'/>
+ <enum name='XPATH_UNDEFINED' file='xpath' value='0' type='xmlXPathObjectType'/>
+ <enum name='XPATH_UNDEF_PREFIX_ERROR' file='xpath' value='19' type='xmlXPathError'/>
+ <enum name='XPATH_UNDEF_VARIABLE_ERROR' file='xpath' value='5' type='xmlXPathError'/>
+ <enum name='XPATH_UNFINISHED_LITERAL_ERROR' file='xpath' value='2' type='xmlXPathError'/>
+ <enum name='XPATH_UNKNOWN_FUNC_ERROR' file='xpath' value='9' type='xmlXPathError'/>
+ <enum name='XPATH_USERS' file='xpath' value='8' type='xmlXPathObjectType'/>
+ <enum name='XPATH_VARIABLE_REF_ERROR' file='xpath' value='4' type='xmlXPathError'/>
+ <enum name='XPATH_XSLT_TREE' file='xpath' value='9' type='xmlXPathObjectType' info=' An XSLT value tree, non modifiable'/>
+ <enum name='XPTR_RESOURCE_ERROR' file='xpath' value='17' type='xmlXPathError'/>
+ <enum name='XPTR_SUB_RESOURCE_ERROR' file='xpath' value='18' type='xmlXPathError'/>
+ <enum name='XPTR_SYNTAX_ERROR' file='xpath' value='16' type='xmlXPathError'/>
+ <typedef name='docbDocPtr' file='DOCBparser' type='xmlDocPtr'/>
+ <typedef name='docbParserCtxt' file='DOCBparser' type='xmlParserCtxt'/>
+ <typedef name='docbParserCtxtPtr' file='DOCBparser' type='xmlParserCtxtPtr'/>
+ <typedef name='docbParserInput' file='DOCBparser' type='xmlParserInput'/>
+ <typedef name='docbParserInputPtr' file='DOCBparser' type='xmlParserInputPtr'/>
+ <typedef name='docbSAXHandler' file='DOCBparser' type='xmlSAXHandler'/>
+ <typedef name='docbSAXHandlerPtr' file='DOCBparser' type='xmlSAXHandlerPtr'/>
+ <typedef name='htmlDocPtr' file='HTMLparser' type='xmlDocPtr'/>
+ <struct name='htmlElemDesc' file='HTMLparser' type='struct _htmlElemDesc'>
+ <field name='name' type='const char *' info=' The tag name'/>
+ <field name='startTag' type='char' info=' Whether the start tag can be implied'/>
+ <field name='endTag' type='char' info=' Whether the end tag can be implied'/>
+ <field name='saveEndTag' type='char' info=' Whether the end tag should be saved'/>
+ <field name='empty' type='char' info=' Is this an empty element ?'/>
+ <field name='depr' type='char' info=' Is this a deprecated element ?'/>
+ <field name='dtd' type='char' info=' 1: only in Loose DTD, 2: only Frameset one'/>
+ <field name='isinline' type='char' info=' is this a block 0 or inline 1 element'/>
+ <field name='desc' type='const char *' info=' the description NRK Jan.2003
+* New fields encapsulating HTML structure
+*
+* Bugs:
+* This is a very limited representation. It fails to tell us when
+* an element *requires* subelements (we only have whether they&apos;re
+* allowed or not), and it doesn&apos;t tell us where CDATA and PCDATA
+* are allowed. Some element relationships are not fully represented:
+* these are flagged with the word MODIFIER
+*'/>
+ <field name='subelts' type='const char **' info=' allowed sub-elements of this element'/>
+ <field name='defaultsubelt' type='const char *' info=' subelement for suggested auto-repair
+if necessary or NULL'/>
+ <field name='attrs_opt' type='const char **' info=' Optional Attributes'/>
+ <field name='attrs_depr' type='const char **' info=' Additional deprecated attributes'/>
+ <field name='attrs_req' type='const char **' info=' Required attributes'/>
+ </struct>
+ <typedef name='htmlElemDescPtr' file='HTMLparser' type='htmlElemDesc *'/>
+ <struct name='htmlEntityDesc' file='HTMLparser' type='struct _htmlEntityDesc'>
+ <field name='value' type='unsigned int' info=' the UNICODE value for the character'/>
+ <field name='name' type='const char *' info=' The entity name'/>
+ <field name='desc' type='const char *' info=' the description'/>
+ </struct>
+ <typedef name='htmlEntityDescPtr' file='HTMLparser' type='htmlEntityDesc *'/>
+ <typedef name='htmlNodePtr' file='HTMLparser' type='xmlNodePtr'/>
+ <typedef name='htmlParserCtxt' file='HTMLparser' type='xmlParserCtxt'/>
+ <typedef name='htmlParserCtxtPtr' file='HTMLparser' type='xmlParserCtxtPtr'/>
+ <typedef name='htmlParserInput' file='HTMLparser' type='xmlParserInput'/>
+ <typedef name='htmlParserInputPtr' file='HTMLparser' type='xmlParserInputPtr'/>
+ <typedef name='htmlParserNodeInfo' file='HTMLparser' type='xmlParserNodeInfo'/>
+ <typedef name='htmlParserOption' file='HTMLparser' type='enum'/>
+ <typedef name='htmlSAXHandler' file='HTMLparser' type='xmlSAXHandler'/>
+ <typedef name='htmlSAXHandlerPtr' file='HTMLparser' type='xmlSAXHandlerPtr'/>
+ <typedef name='htmlStatus' file='HTMLparser' type='enum'/>
+ <typedef name='xlinkActuate' file='xlink' type='enum'/>
+ <typedef name='xlinkHRef' file='xlink' type='xmlChar *'/>
+ <struct name='xlinkHandler' file='xlink' type='struct _xlinkHandler'>
+ <field name='simple' type='xlinkSimpleLinkFunk' info=''/>
+ <field name='extended' type='xlinkExtendedLinkFunk' info=''/>
+ <field name='set' type='xlinkExtendedLinkSetFunk' info=''/>
+ </struct>
+ <typedef name='xlinkHandlerPtr' file='xlink' type='xlinkHandler *'/>
+ <typedef name='xlinkRole' file='xlink' type='xmlChar *'/>
+ <typedef name='xlinkShow' file='xlink' type='enum'/>
+ <typedef name='xlinkTitle' file='xlink' type='xmlChar *'/>
+ <typedef name='xlinkType' file='xlink' type='enum'/>
+ <struct name='xmlAttr' file='tree' type='struct _xmlAttr'>
+ <field name='_private' type='void *' info=' application data'/>
+ <field name='type' type='xmlElementType' info=' XML_ATTRIBUTE_NODE, must be second !'/>
+ <field name='name' type='const xmlChar *' info=' the name of the property'/>
+ <field name='children' type='struct _xmlNode *' info=' the value of the property'/>
+ <field name='last' type='struct _xmlNode *' info=' NULL'/>
+ <field name='parent' type='struct _xmlNode *' info=' child-&gt;parent link'/>
+ <field name='next' type='struct _xmlAttr *' info=' next sibling link '/>
+ <field name='prev' type='struct _xmlAttr *' info=' previous sibling link '/>
+ <field name='doc' type='struct _xmlDoc *' info=' the containing document'/>
+ <field name='ns' type='xmlNs *' info=' pointer to the associated namespace'/>
+ <field name='atype' type='xmlAttributeType' info=' the attribute type if validating'/>
+ <field name='psvi' type='void *' info=' for type/PSVI informations'/>
+ </struct>
+ <typedef name='xmlAttrPtr' file='tree' type='xmlAttr *'/>
+ <struct name='xmlAttribute' file='tree' type='struct _xmlAttribute'>
+ <field name='_private' type='void *' info=' application data'/>
+ <field name='type' type='xmlElementType' info=' XML_ATTRIBUTE_DECL, must be second !'/>
+ <field name='name' type='const xmlChar *' info=' Attribute name'/>
+ <field name='children' type='struct _xmlNode *' info=' NULL'/>
+ <field name='last' type='struct _xmlNode *' info=' NULL'/>
+ <field name='parent' type='struct _xmlDtd *' info=' -&gt; DTD'/>
+ <field name='next' type='struct _xmlNode *' info=' next sibling link '/>
+ <field name='prev' type='struct _xmlNode *' info=' previous sibling link '/>
+ <field name='doc' type='struct _xmlDoc *' info=' the containing document'/>
+ <field name='nexth' type='struct _xmlAttribute *' info=' next in hash table'/>
+ <field name='atype' type='xmlAttributeType' info=' The attribute type'/>
+ <field name='def' type='xmlAttributeDefault' info=' the default'/>
+ <field name='defaultValue' type='const xmlChar *' info=' or the default value'/>
+ <field name='tree' type='xmlEnumerationPtr' info=' or the enumeration tree if any'/>
+ <field name='prefix' type='const xmlChar *' info=' the namespace prefix if any'/>
+ <field name='elem' type='const xmlChar *' info=' Element holding the attribute'/>
+ </struct>
+ <typedef name='xmlAttributeDefault' file='tree' type='enum'/>
+ <typedef name='xmlAttributePtr' file='tree' type='xmlAttribute *'/>
+ <struct name='xmlAttributeTable' file='valid' type='struct _xmlHashTable'/>
+ <typedef name='xmlAttributeTablePtr' file='valid' type='xmlAttributeTable *'/>
+ <typedef name='xmlAttributeType' file='tree' type='enum'/>
+ <struct name='xmlAutomata' file='xmlautomata' type='struct _xmlAutomata'/>
+ <typedef name='xmlAutomataPtr' file='xmlautomata' type='xmlAutomata *'/>
+ <struct name='xmlAutomataState' file='xmlautomata' type='struct _xmlAutomataState'/>
+ <typedef name='xmlAutomataStatePtr' file='xmlautomata' type='xmlAutomataState *'/>
+ <struct name='xmlBuffer' file='tree' type='struct _xmlBuffer'>
+ <field name='content' type='xmlChar *' info=' The buffer content UTF8'/>
+ <field name='use' type='unsigned int' info=' The buffer size used'/>
+ <field name='size' type='unsigned int' info=' The buffer size'/>
+ <field name='alloc' type='xmlBufferAllocationScheme' info=' The realloc method'/>
+ </struct>
+ <typedef name='xmlBufferAllocationScheme' file='tree' type='enum'/>
+ <typedef name='xmlBufferPtr' file='tree' type='xmlBuffer *'/>
+ <struct name='xmlCatalog' file='catalog' type='struct _xmlCatalog'/>
+ <typedef name='xmlCatalogAllow' file='catalog' type='enum'/>
+ <typedef name='xmlCatalogPrefer' file='catalog' type='enum'/>
+ <typedef name='xmlCatalogPtr' file='catalog' type='xmlCatalog *'/>
+ <struct name='xmlChLRange' file='chvalid' type='struct _xmlChLRange'>
+ <field name='low' type='unsigned int' info=''/>
+ <field name='high' type='unsigned int' info=''/>
+ </struct>
+ <typedef name='xmlChLRangePtr' file='chvalid' type='xmlChLRange *'/>
+ <struct name='xmlChRangeGroup' file='chvalid' type='struct _xmlChRangeGroup'>
+ <field name='nbShortRange' type='int' info=''/>
+ <field name='nbLongRange' type='int' info=''/>
+ <field name='shortRange' type='xmlChSRangePtr' info=' points to an array of ranges'/>
+ <field name='longRange' type='xmlChLRangePtr' info=''/>
+ </struct>
+ <typedef name='xmlChRangeGroupPtr' file='chvalid' type='xmlChRangeGroup *'/>
+ <struct name='xmlChSRange' file='chvalid' type='struct _xmlChSRange'>
+ <field name='low' type='unsigned short' info=''/>
+ <field name='high' type='unsigned short' info=''/>
+ </struct>
+ <typedef name='xmlChSRangePtr' file='chvalid' type='xmlChSRange *'/>
+ <typedef name='xmlChar' file='xmlstring' type='unsigned char'/>
+ <typedef name='xmlCharEncoding' file='encoding' type='enum'/>
+ <struct name='xmlCharEncodingHandler' file='encoding' type='struct _xmlCharEncodingHandler'>
+ <field name='name' type='char *' info=''/>
+ <field name='input' type='xmlCharEncodingInputFunc' info=''/>
+ <field name='output' type='xmlCharEncodingOutputFunc' info=''/>
+ <field name='iconv_in' type='iconv_t' info=''/>
+ <field name='iconv_out' type='iconv_t' info=''/>
+ </struct>
+ <typedef name='xmlCharEncodingHandlerPtr' file='encoding' type='xmlCharEncodingHandler *'/>
+ <struct name='xmlDict' file='dict' type='struct _xmlDict'/>
+ <typedef name='xmlDictPtr' file='dict' type='xmlDict *'/>
+ <struct name='xmlDoc' file='tree' type='struct _xmlDoc'>
+ <field name='_private' type='void *' info=' application data'/>
+ <field name='type' type='xmlElementType' info=' XML_DOCUMENT_NODE, must be second !'/>
+ <field name='name' type='char *' info=' name/filename/URI of the document'/>
+ <field name='children' type='struct _xmlNode *' info=' the document tree'/>
+ <field name='last' type='struct _xmlNode *' info=' last child link'/>
+ <field name='parent' type='struct _xmlNode *' info=' child-&gt;parent link'/>
+ <field name='next' type='struct _xmlNode *' info=' next sibling link '/>
+ <field name='prev' type='struct _xmlNode *' info=' previous sibling link '/>
+ <field name='doc' type='struct _xmlDoc *' info=' autoreference to itself End of common part'/>
+ <field name='compression' type='int' info=' level of zlib compression'/>
+ <field name='standalone' type='int' info=' standalone document (no external refs)'/>
+ <field name='intSubset' type='struct _xmlDtd *' info=' the document internal subset'/>
+ <field name='extSubset' type='struct _xmlDtd *' info=' the document external subset'/>
+ <field name='oldNs' type='struct _xmlNs *' info=' Global namespace, the old way'/>
+ <field name='version' type='const xmlChar *' info=' the XML version string'/>
+ <field name='encoding' type='const xmlChar *' info=' external initial encoding, if any'/>
+ <field name='ids' type='void *' info=' Hash table for ID attributes if any'/>
+ <field name='refs' type='void *' info=' Hash table for IDREFs attributes if any'/>
+ <field name='URL' type='const xmlChar *' info=' The URI for that document'/>
+ <field name='charset' type='int' info=' encoding of the in-memory content
+actually an xmlCharEncoding'/>
+ <field name='dict' type='struct _xmlDict *' info=' dict used to allocate names or NULL'/>
+ <field name='psvi' type='void *' info=' for type/PSVI informations'/>
+ </struct>
+ <typedef name='xmlDocPtr' file='tree' type='xmlDoc *'/>
+ <struct name='xmlDtd' file='tree' type='struct _xmlDtd'>
+ <field name='_private' type='void *' info=' application data'/>
+ <field name='type' type='xmlElementType' info=' XML_DTD_NODE, must be second !'/>
+ <field name='name' type='const xmlChar *' info=' Name of the DTD'/>
+ <field name='children' type='struct _xmlNode *' info=' the value of the property link'/>
+ <field name='last' type='struct _xmlNode *' info=' last child link'/>
+ <field name='parent' type='struct _xmlDoc *' info=' child-&gt;parent link'/>
+ <field name='next' type='struct _xmlNode *' info=' next sibling link '/>
+ <field name='prev' type='struct _xmlNode *' info=' previous sibling link '/>
+ <field name='doc' type='struct _xmlDoc *' info=' the containing document End of common part'/>
+ <field name='notations' type='void *' info=' Hash table for notations if any'/>
+ <field name='elements' type='void *' info=' Hash table for elements if any'/>
+ <field name='attributes' type='void *' info=' Hash table for attributes if any'/>
+ <field name='entities' type='void *' info=' Hash table for entities if any'/>
+ <field name='ExternalID' type='const xmlChar *' info=' External identifier for PUBLIC DTD'/>
+ <field name='SystemID' type='const xmlChar *' info=' URI for a SYSTEM or PUBLIC DTD'/>
+ <field name='pentities' type='void *' info=' Hash table for param entities if any'/>
+ </struct>
+ <typedef name='xmlDtdPtr' file='tree' type='xmlDtd *'/>
+ <struct name='xmlElement' file='tree' type='struct _xmlElement'>
+ <field name='_private' type='void *' info=' application data'/>
+ <field name='type' type='xmlElementType' info=' XML_ELEMENT_DECL, must be second !'/>
+ <field name='name' type='const xmlChar *' info=' Element name'/>
+ <field name='children' type='struct _xmlNode *' info=' NULL'/>
+ <field name='last' type='struct _xmlNode *' info=' NULL'/>
+ <field name='parent' type='struct _xmlDtd *' info=' -&gt; DTD'/>
+ <field name='next' type='struct _xmlNode *' info=' next sibling link '/>
+ <field name='prev' type='struct _xmlNode *' info=' previous sibling link '/>
+ <field name='doc' type='struct _xmlDoc *' info=' the containing document'/>
+ <field name='etype' type='xmlElementTypeVal' info=' The type'/>
+ <field name='content' type='xmlElementContentPtr' info=' the allowed element content'/>
+ <field name='attributes' type='xmlAttributePtr' info=' List of the declared attributes'/>
+ <field name='prefix' type='const xmlChar *' info=' the namespace prefix if any'/>
+ <field name='contModel' type='xmlRegexpPtr' info=' the validating regexp'/>
+ <field name='contModel' type='void *' info=''/>
+ </struct>
+ <struct name='xmlElementContent' file='tree' type='struct _xmlElementContent'>
+ <field name='type' type='xmlElementContentType' info=' PCDATA, ELEMENT, SEQ or OR'/>
+ <field name='ocur' type='xmlElementContentOccur' info=' ONCE, OPT, MULT or PLUS'/>
+ <field name='name' type='const xmlChar *' info=' Element name'/>
+ <field name='c1' type='struct _xmlElementContent *' info=' first child'/>
+ <field name='c2' type='struct _xmlElementContent *' info=' second child'/>
+ <field name='parent' type='struct _xmlElementContent *' info=' parent'/>
+ <field name='prefix' type='const xmlChar *' info=' Namespace prefix'/>
+ </struct>
+ <typedef name='xmlElementContentOccur' file='tree' type='enum'/>
+ <typedef name='xmlElementContentPtr' file='tree' type='xmlElementContent *'/>
+ <typedef name='xmlElementContentType' file='tree' type='enum'/>
+ <typedef name='xmlElementPtr' file='tree' type='xmlElement *'/>
+ <struct name='xmlElementTable' file='valid' type='struct _xmlHashTable'/>
+ <typedef name='xmlElementTablePtr' file='valid' type='xmlElementTable *'/>
+ <typedef name='xmlElementType' file='tree' type='enum'/>
+ <typedef name='xmlElementTypeVal' file='tree' type='enum'/>
+ <struct name='xmlEntitiesTable' file='entities' type='struct _xmlHashTable'/>
+ <typedef name='xmlEntitiesTablePtr' file='entities' type='xmlEntitiesTable *'/>
+ <struct name='xmlEntity' file='tree' type='struct _xmlEntity'>
+ <field name='_private' type='void *' info=' application data'/>
+ <field name='type' type='xmlElementType' info=' XML_ENTITY_DECL, must be second !'/>
+ <field name='name' type='const xmlChar *' info=' Entity name'/>
+ <field name='children' type='struct _xmlNode *' info=' First child link'/>
+ <field name='last' type='struct _xmlNode *' info=' Last child link'/>
+ <field name='parent' type='struct _xmlDtd *' info=' -&gt; DTD'/>
+ <field name='next' type='struct _xmlNode *' info=' next sibling link '/>
+ <field name='prev' type='struct _xmlNode *' info=' previous sibling link '/>
+ <field name='doc' type='struct _xmlDoc *' info=' the containing document'/>
+ <field name='orig' type='xmlChar *' info=' content without ref substitution'/>
+ <field name='content' type='xmlChar *' info=' content or ndata if unparsed'/>
+ <field name='length' type='int' info=' the content length'/>
+ <field name='etype' type='xmlEntityType' info=' The entity type'/>
+ <field name='ExternalID' type='const xmlChar *' info=' External identifier for PUBLIC'/>
+ <field name='SystemID' type='const xmlChar *' info=' URI for a SYSTEM or PUBLIC Entity'/>
+ <field name='nexte' type='struct _xmlEntity *' info=' unused'/>
+ <field name='URI' type='const xmlChar *' info=' the full URI as computed'/>
+ <field name='owner' type='int' info=' does the entity own the childrens'/>
+ </struct>
+ <typedef name='xmlEntityPtr' file='tree' type='xmlEntity *'/>
+ <typedef name='xmlEntityType' file='entities' type='enum'/>
+ <struct name='xmlEnumeration' file='tree' type='struct _xmlEnumeration'>
+ <field name='next' type='struct _xmlEnumeration *' info=' next one'/>
+ <field name='name' type='const xmlChar *' info=' Enumeration name'/>
+ </struct>
+ <typedef name='xmlEnumerationPtr' file='tree' type='xmlEnumeration *'/>
+ <struct name='xmlError' file='xmlerror' type='struct _xmlError'>
+ <field name='domain' type='int' info=' What part of the library raised this error'/>
+ <field name='code' type='int' info=' The error code, e.g. an xmlParserError'/>
+ <field name='message' type='char *' info=' human-readable informative error message'/>
+ <field name='level' type='xmlErrorLevel' info=' how consequent is the error'/>
+ <field name='file' type='char *' info=' the filename'/>
+ <field name='line' type='int' info=' the line number if available'/>
+ <field name='str1' type='char *' info=' extra string information'/>
+ <field name='str2' type='char *' info=' extra string information'/>
+ <field name='str3' type='char *' info=' extra string information'/>
+ <field name='int1' type='int' info=' extra number information'/>
+ <field name='int2' type='int' info=' extra number information'/>
+ <field name='ctxt' type='void *' info=' the parser context if available'/>
+ <field name='node' type='void *' info=' the node in the tree'/>
+ </struct>
+ <typedef name='xmlErrorDomain' file='xmlerror' type='enum'/>
+ <typedef name='xmlErrorLevel' file='xmlerror' type='enum'/>
+ <typedef name='xmlErrorPtr' file='xmlerror' type='xmlError *'/>
+ <struct name='xmlGlobalState' file='globals' type='struct _xmlGlobalState'>
+ <field name='xmlParserVersion' type='const char *' info=''/>
+ <field name='xmlDefaultSAXLocator' type='xmlSAXLocator' info=''/>
+ <field name='xmlDefaultSAXHandler' type='xmlSAXHandlerV1' info=''/>
+ <field name='docbDefaultSAXHandler' type='xmlSAXHandlerV1' info=''/>
+ <field name='htmlDefaultSAXHandler' type='xmlSAXHandlerV1' info=''/>
+ <field name='xmlFree' type='xmlFreeFunc' info=''/>
+ <field name='xmlMalloc' type='xmlMallocFunc' info=''/>
+ <field name='xmlMemStrdup' type='xmlStrdupFunc' info=''/>
+ <field name='xmlRealloc' type='xmlReallocFunc' info=''/>
+ <field name='xmlGenericError' type='xmlGenericErrorFunc' info=''/>
+ <field name='xmlStructuredError' type='xmlStructuredErrorFunc' info=''/>
+ <field name='xmlGenericErrorContext' type='void *' info=''/>
+ <field name='oldXMLWDcompatibility' type='int' info=''/>
+ <field name='xmlBufferAllocScheme' type='xmlBufferAllocationScheme' info=''/>
+ <field name='xmlDefaultBufferSize' type='int' info=''/>
+ <field name='xmlSubstituteEntitiesDefaultValue' type='int' info=''/>
+ <field name='xmlDoValidityCheckingDefaultValue' type='int' info=''/>
+ <field name='xmlGetWarningsDefaultValue' type='int' info=''/>
+ <field name='xmlKeepBlanksDefaultValue' type='int' info=''/>
+ <field name='xmlLineNumbersDefaultValue' type='int' info=''/>
+ <field name='xmlLoadExtDtdDefaultValue' type='int' info=''/>
+ <field name='xmlParserDebugEntities' type='int' info=''/>
+ <field name='xmlPedanticParserDefaultValue' type='int' info=''/>
+ <field name='xmlSaveNoEmptyTags' type='int' info=''/>
+ <field name='xmlIndentTreeOutput' type='int' info=''/>
+ <field name='xmlTreeIndentString' type='const char *' info=''/>
+ <field name='xmlRegisterNodeDefaultValue' type='xmlRegisterNodeFunc' info=''/>
+ <field name='xmlDeregisterNodeDefaultValue' type='xmlDeregisterNodeFunc' info=''/>
+ <field name='xmlMallocAtomic' type='xmlMallocFunc' info=''/>
+ <field name='xmlLastError' type='xmlError' info=''/>
+ </struct>
+ <typedef name='xmlGlobalStatePtr' file='globals' type='xmlGlobalState *'/>
+ <struct name='xmlHashTable' file='hash' type='struct _xmlHashTable'/>
+ <typedef name='xmlHashTablePtr' file='hash' type='xmlHashTable *'/>
+ <struct name='xmlID' file='tree' type='struct _xmlID'>
+ <field name='next' type='struct _xmlID *' info=' next ID'/>
+ <field name='value' type='const xmlChar *' info=' The ID name'/>
+ <field name='attr' type='xmlAttrPtr' info=' The attribute holding it'/>
+ <field name='name' type='const xmlChar *' info=' The attribute if attr is not available'/>
+ <field name='lineno' type='int' info=' The line number if attr is not available'/>
+ <field name='doc' type='struct _xmlDoc *' info=' The document holding the ID'/>
+ </struct>
+ <typedef name='xmlIDPtr' file='tree' type='xmlID *'/>
+ <struct name='xmlIDTable' file='valid' type='struct _xmlHashTable'/>
+ <typedef name='xmlIDTablePtr' file='valid' type='xmlIDTable *'/>
+ <struct name='xmlLink' file='list' type='struct _xmlLink'/>
+ <typedef name='xmlLinkPtr' file='list' type='xmlLink *'/>
+ <struct name='xmlList' file='list' type='struct _xmlList'/>
+ <typedef name='xmlListPtr' file='list' type='xmlList *'/>
+ <struct name='xmlLocationSet' file='xpointer' type='struct _xmlLocationSet'>
+ <field name='locNr' type='int' info=' number of locations in the set'/>
+ <field name='locMax' type='int' info=' size of the array as allocated'/>
+ <field name='locTab' type='xmlXPathObjectPtr *' info=' array of locations'/>
+ </struct>
+ <typedef name='xmlLocationSetPtr' file='xpointer' type='xmlLocationSet *'/>
+ <struct name='xmlMutex' file='threads' type='struct _xmlMutex'/>
+ <typedef name='xmlMutexPtr' file='threads' type='xmlMutex *'/>
+ <struct name='xmlNode' file='tree' type='struct _xmlNode'>
+ <field name='_private' type='void *' info=' application data'/>
+ <field name='type' type='xmlElementType' info=' type number, must be second !'/>
+ <field name='name' type='const xmlChar *' info=' the name of the node, or the entity'/>
+ <field name='children' type='struct _xmlNode *' info=' parent-&gt;childs link'/>
+ <field name='last' type='struct _xmlNode *' info=' last child link'/>
+ <field name='parent' type='struct _xmlNode *' info=' child-&gt;parent link'/>
+ <field name='next' type='struct _xmlNode *' info=' next sibling link '/>
+ <field name='prev' type='struct _xmlNode *' info=' previous sibling link '/>
+ <field name='doc' type='struct _xmlDoc *' info=' the containing document End of common part'/>
+ <field name='ns' type='xmlNs *' info=' pointer to the associated namespace'/>
+ <field name='content' type='xmlChar *' info=' the content'/>
+ <field name='properties' type='struct _xmlAttr *' info=' properties list'/>
+ <field name='nsDef' type='xmlNs *' info=' namespace definitions on this node'/>
+ <field name='psvi' type='void *' info=' for type/PSVI informations'/>
+ <field name='line' type='unsigned short' info=' line number'/>
+ <field name='extra' type='unsigned short' info=' extra data for XPath/XSLT'/>
+ </struct>
+ <typedef name='xmlNodePtr' file='tree' type='xmlNode *'/>
+ <struct name='xmlNodeSet' file='xpath' type='struct _xmlNodeSet'>
+ <field name='nodeNr' type='int' info=' number of nodes in the set'/>
+ <field name='nodeMax' type='int' info=' size of the array as allocated'/>
+ <field name='nodeTab' type='xmlNodePtr *' info=' array of nodes in no particular order @@ with_ns to check wether namespace nodes should be looked at @@'/>
+ </struct>
+ <typedef name='xmlNodeSetPtr' file='xpath' type='xmlNodeSet *'/>
+ <struct name='xmlNotation' file='tree' type='struct _xmlNotation'>
+ <field name='name' type='const xmlChar *' info=' Notation name'/>
+ <field name='PublicID' type='const xmlChar *' info=' Public identifier, if any'/>
+ <field name='SystemID' type='const xmlChar *' info=' System identifier, if any'/>
+ </struct>
+ <typedef name='xmlNotationPtr' file='tree' type='xmlNotation *'/>
+ <struct name='xmlNotationTable' file='valid' type='struct _xmlHashTable'/>
+ <typedef name='xmlNotationTablePtr' file='valid' type='xmlNotationTable *'/>
+ <struct name='xmlNs' file='tree' type='struct _xmlNs'>
+ <field name='next' type='struct _xmlNs *' info=' next Ns link for this node '/>
+ <field name='type' type='xmlNsType' info=' global or local'/>
+ <field name='href' type='const xmlChar *' info=' URL for the namespace'/>
+ <field name='prefix' type='const xmlChar *' info=' prefix for the namespace'/>
+ <field name='_private' type='void *' info=' application data'/>
+ </struct>
+ <typedef name='xmlNsPtr' file='tree' type='xmlNs *'/>
+ <typedef name='xmlNsType' file='tree' type='xmlElementType'/>
+ <struct name='xmlOutputBuffer' file='tree' type='struct _xmlOutputBuffer'>
+ <field name='context' type='void *' info=''/>
+ <field name='writecallback' type='xmlOutputWriteCallback' info=''/>
+ <field name='closecallback' type='xmlOutputCloseCallback' info=''/>
+ <field name='encoder' type='xmlCharEncodingHandlerPtr' info=' I18N conversions to UTF-8'/>
+ <field name='buffer' type='xmlBufferPtr' info=' Local buffer encoded in UTF-8 or ISOLatin'/>
+ <field name='conv' type='xmlBufferPtr' info=' if encoder != NULL buffer for output'/>
+ <field name='written' type='int' info=' total number of byte written'/>
+ <field name='error' type='int' info=''/>
+ </struct>
+ <typedef name='xmlOutputBufferPtr' file='tree' type='xmlOutputBuffer *'/>
+ <struct name='xmlParserCtxt' file='tree' type='struct _xmlParserCtxt'>
+ <field name='sax' type='struct _xmlSAXHandler *' info=' The SAX handler'/>
+ <field name='userData' type='void *' info=' For SAX interface only, used by DOM build'/>
+ <field name='myDoc' type='xmlDocPtr' info=' the document being built'/>
+ <field name='wellFormed' type='int' info=' is the document well formed'/>
+ <field name='replaceEntities' type='int' info=' shall we replace entities ?'/>
+ <field name='version' type='const xmlChar *' info=' the XML version string'/>
+ <field name='encoding' type='const xmlChar *' info=' the declared encoding, if any'/>
+ <field name='standalone' type='int' info=' standalone document'/>
+ <field name='html' type='int' info=' an HTML(1)/Docbook(2) document Input stream stack'/>
+ <field name='input' type='xmlParserInputPtr' info=' Current input stream'/>
+ <field name='inputNr' type='int' info=' Number of current input streams'/>
+ <field name='inputMax' type='int' info=' Max number of input streams'/>
+ <field name='inputTab' type='xmlParserInputPtr *' info=' stack of inputs Node analysis stack only used for DOM building'/>
+ <field name='node' type='xmlNodePtr' info=' Current parsed Node'/>
+ <field name='nodeNr' type='int' info=' Depth of the parsing stack'/>
+ <field name='nodeMax' type='int' info=' Max depth of the parsing stack'/>
+ <field name='nodeTab' type='xmlNodePtr *' info=' array of nodes'/>
+ <field name='record_info' type='int' info=' Whether node info should be kept'/>
+ <field name='node_seq' type='xmlParserNodeInfoSeq' info=' info about each node parsed'/>
+ <field name='errNo' type='int' info=' error code'/>
+ <field name='hasExternalSubset' type='int' info=' reference and external subset'/>
+ <field name='hasPErefs' type='int' info=' the internal subset has PE refs'/>
+ <field name='external' type='int' info=' are we parsing an external entity'/>
+ <field name='valid' type='int' info=' is the document valid'/>
+ <field name='validate' type='int' info=' shall we try to validate ?'/>
+ <field name='vctxt' type='xmlValidCtxt' info=' The validity context'/>
+ <field name='instate' type='xmlParserInputState' info=' current type of input'/>
+ <field name='token' type='int' info=' next char look-ahead'/>
+ <field name='directory' type='char *' info=' the data directory Node name stack'/>
+ <field name='name' type='const xmlChar *' info=' Current parsed Node'/>
+ <field name='nameNr' type='int' info=' Depth of the parsing stack'/>
+ <field name='nameMax' type='int' info=' Max depth of the parsing stack'/>
+ <field name='nameTab' type='const xmlChar * *' info=' array of nodes'/>
+ <field name='nbChars' type='long' info=' number of xmlChar processed'/>
+ <field name='checkIndex' type='long' info=' used by progressive parsing lookup'/>
+ <field name='keepBlanks' type='int' info=' ugly but ...'/>
+ <field name='disableSAX' type='int' info=' SAX callbacks are disabled'/>
+ <field name='inSubset' type='int' info=' Parsing is in int 1/ext 2 subset'/>
+ <field name='intSubName' type='const xmlChar *' info=' name of subset'/>
+ <field name='extSubURI' type='xmlChar *' info=' URI of external subset'/>
+ <field name='extSubSystem' type='xmlChar *' info=' SYSTEM ID of external subset xml:space values'/>
+ <field name='space' type='int *' info=' Should the parser preserve spaces'/>
+ <field name='spaceNr' type='int' info=' Depth of the parsing stack'/>
+ <field name='spaceMax' type='int' info=' Max depth of the parsing stack'/>
+ <field name='spaceTab' type='int *' info=' array of space infos'/>
+ <field name='depth' type='int' info=' to prevent entity substitution loops'/>
+ <field name='entity' type='xmlParserInputPtr' info=' used to check entities boundaries'/>
+ <field name='charset' type='int' info=' encoding of the in-memory content
+actually an xmlCharEncoding'/>
+ <field name='nodelen' type='int' info=' Those two fields are there to'/>
+ <field name='nodemem' type='int' info=' Speed up large node parsing'/>
+ <field name='pedantic' type='int' info=' signal pedantic warnings'/>
+ <field name='_private' type='void *' info=' For user data, libxml won&apos;t touch it'/>
+ <field name='loadsubset' type='int' info=' should the external subset be loaded'/>
+ <field name='linenumbers' type='int' info=' set line number in element content'/>
+ <field name='catalogs' type='void *' info=' document&apos;s own catalog'/>
+ <field name='recovery' type='int' info=' run in recovery mode'/>
+ <field name='progressive' type='int' info=' is this a progressive parsing'/>
+ <field name='dict' type='xmlDictPtr' info=' dictionnary for the parser'/>
+ <field name='atts' type='const xmlChar * *' info=' array for the attributes callbacks'/>
+ <field name='maxatts' type='int' info=' the size of the array'/>
+ <field name='docdict' type='int' info='* pre-interned strings
+*'/>
+ <field name='str_xml' type='const xmlChar *' info=''/>
+ <field name='str_xmlns' type='const xmlChar *' info=''/>
+ <field name='str_xml_ns' type='const xmlChar *' info='* Everything below is used only by the new SAX mode
+*'/>
+ <field name='sax2' type='int' info=' operating in the new SAX mode'/>
+ <field name='nsNr' type='int' info=' the number of inherited namespaces'/>
+ <field name='nsMax' type='int' info=' the size of the arrays'/>
+ <field name='nsTab' type='const xmlChar * *' info=' the array of prefix/namespace name'/>
+ <field name='attallocs' type='int *' info=' which attribute were allocated'/>
+ <field name='pushTab' type='void * *' info=' array of data for push'/>
+ <field name='attsDefault' type='xmlHashTablePtr' info=' defaulted attributes if any'/>
+ <field name='attsSpecial' type='xmlHashTablePtr' info=' non-CDATA attributes if any'/>
+ <field name='nsWellFormed' type='int' info=' is the document XML Nanespace okay'/>
+ <field name='options' type='int' info='* Those fields are needed only for treaming parsing so far
+*'/>
+ <field name='dictNames' type='int' info=' Use dictionary names for the tree'/>
+ <field name='freeElemsNr' type='int' info=' number of freed element nodes'/>
+ <field name='freeElems' type='xmlNodePtr' info=' List of freed element nodes'/>
+ <field name='freeAttrsNr' type='int' info=' number of freed attributes nodes'/>
+ <field name='freeAttrs' type='xmlAttrPtr' info='* the complete error informations for the last error.
+*'/>
+ <field name='lastError' type='xmlError' info=''/>
+ </struct>
+ <typedef name='xmlParserCtxtPtr' file='tree' type='xmlParserCtxt *'/>
+ <typedef name='xmlParserErrors' file='xmlerror' type='enum'/>
+ <struct name='xmlParserInput' file='tree' type='struct _xmlParserInput'>
+ <field name='buf' type='xmlParserInputBufferPtr' info=' UTF-8 encoded buffer'/>
+ <field name='filename' type='const char *' info=' The file analyzed, if any'/>
+ <field name='directory' type='const char *' info=' the directory/base of the file'/>
+ <field name='base' type='const xmlChar *' info=' Base of the array to parse'/>
+ <field name='cur' type='const xmlChar *' info=' Current char being parsed'/>
+ <field name='end' type='const xmlChar *' info=' end of the array to parse'/>
+ <field name='length' type='int' info=' length if known'/>
+ <field name='line' type='int' info=' Current line'/>
+ <field name='col' type='int' info='* NOTE: consumed is only tested for equality in the parser code,
+* so even if there is an overflow this should not give troubles
+* for parsing very large instances.
+*'/>
+ <field name='consumed' type='unsigned long' info=' How many xmlChars already consumed'/>
+ <field name='free' type='xmlParserInputDeallocate' info=' function to deallocate the base'/>
+ <field name='encoding' type='const xmlChar *' info=' the encoding string for entity'/>
+ <field name='version' type='const xmlChar *' info=' the version string for entity'/>
+ <field name='standalone' type='int' info=' Was that entity marked standalone'/>
+ <field name='id' type='int' info=' an unique identifier for the entity'/>
+ </struct>
+ <struct name='xmlParserInputBuffer' file='tree' type='struct _xmlParserInputBuffer'>
+ <field name='context' type='void *' info=''/>
+ <field name='readcallback' type='xmlInputReadCallback' info=''/>
+ <field name='closecallback' type='xmlInputCloseCallback' info=''/>
+ <field name='encoder' type='xmlCharEncodingHandlerPtr' info=' I18N conversions to UTF-8'/>
+ <field name='buffer' type='xmlBufferPtr' info=' Local buffer encoded in UTF-8'/>
+ <field name='raw' type='xmlBufferPtr' info=' if encoder != NULL buffer for raw input'/>
+ <field name='compressed' type='int' info=' -1=unknown, 0=not compressed, 1=compressed'/>
+ <field name='error' type='int' info=''/>
+ <field name='rawconsumed' type='unsigned long' info=' amount consumed from raw'/>
+ </struct>
+ <typedef name='xmlParserInputBufferPtr' file='tree' type='xmlParserInputBuffer *'/>
+ <typedef name='xmlParserInputPtr' file='tree' type='xmlParserInput *'/>
+ <typedef name='xmlParserInputState' file='parser' type='enum'/>
+ <struct name='xmlParserNodeInfo' file='parser' type='struct _xmlParserNodeInfo'>
+ <field name='node' type='const struct _xmlNode *' info=' Position &amp; line # that text that created the node begins &amp; ends on'/>
+ <field name='begin_pos' type='unsigned long' info=''/>
+ <field name='begin_line' type='unsigned long' info=''/>
+ <field name='end_pos' type='unsigned long' info=''/>
+ <field name='end_line' type='unsigned long' info=''/>
+ </struct>
+ <typedef name='xmlParserNodeInfoPtr' file='parser' type='xmlParserNodeInfo *'/>
+ <struct name='xmlParserNodeInfoSeq' file='parser' type='struct _xmlParserNodeInfoSeq'>
+ <field name='maximum' type='unsigned long' info=''/>
+ <field name='length' type='unsigned long' info=''/>
+ <field name='buffer' type='xmlParserNodeInfo *' info=''/>
+ </struct>
+ <typedef name='xmlParserNodeInfoSeqPtr' file='parser' type='xmlParserNodeInfoSeq *'/>
+ <typedef name='xmlParserOption' file='parser' type='enum'/>
+ <typedef name='xmlParserProperties' file='xmlreader' type='enum'/>
+ <typedef name='xmlParserSeverities' file='xmlreader' type='enum'/>
+ <struct name='xmlPattern' file='pattern' type='struct _xmlPattern'/>
+ <typedef name='xmlPatternPtr' file='pattern' type='xmlPattern *'/>
+ <struct name='xmlRMutex' file='threads' type='struct _xmlRMutex'/>
+ <typedef name='xmlRMutexPtr' file='threads' type='xmlRMutex *'/>
+ <typedef name='xmlReaderTypes' file='xmlreader' type='enum'/>
+ <struct name='xmlRef' file='tree' type='struct _xmlRef'>
+ <field name='next' type='struct _xmlRef *' info=' next Ref'/>
+ <field name='value' type='const xmlChar *' info=' The Ref name'/>
+ <field name='attr' type='xmlAttrPtr' info=' The attribute holding it'/>
+ <field name='name' type='const xmlChar *' info=' The attribute if attr is not available'/>
+ <field name='lineno' type='int' info=' The line number if attr is not available'/>
+ </struct>
+ <typedef name='xmlRefPtr' file='tree' type='xmlRef *'/>
+ <struct name='xmlRefTable' file='valid' type='struct _xmlHashTable'/>
+ <typedef name='xmlRefTablePtr' file='valid' type='xmlRefTable *'/>
+ <struct name='xmlRegExecCtxt' file='xmlregexp' type='struct _xmlRegExecCtxt'/>
+ <typedef name='xmlRegExecCtxtPtr' file='xmlregexp' type='xmlRegExecCtxt *'/>
+ <struct name='xmlRegexp' file='xmlregexp' type='struct _xmlRegexp'/>
+ <typedef name='xmlRegexpPtr' file='xmlregexp' type='xmlRegexp *'/>
+ <struct name='xmlRelaxNG' file='relaxng' type='struct _xmlRelaxNG'/>
+ <struct name='xmlRelaxNGParserCtxt' file='relaxng' type='struct _xmlRelaxNGParserCtxt'/>
+ <typedef name='xmlRelaxNGParserCtxtPtr' file='relaxng' type='xmlRelaxNGParserCtxt *'/>
+ <typedef name='xmlRelaxNGParserFlag' file='relaxng' type='enum'/>
+ <typedef name='xmlRelaxNGPtr' file='relaxng' type='xmlRelaxNG *'/>
+ <struct name='xmlRelaxNGValidCtxt' file='relaxng' type='struct _xmlRelaxNGValidCtxt'/>
+ <typedef name='xmlRelaxNGValidCtxtPtr' file='relaxng' type='xmlRelaxNGValidCtxt *'/>
+ <typedef name='xmlRelaxNGValidErr' file='relaxng' type='enum'/>
+ <struct name='xmlSAXHandler' file='tree' type='struct _xmlSAXHandler'>
+ <field name='internalSubset' type='internalSubsetSAXFunc' info=''/>
+ <field name='isStandalone' type='isStandaloneSAXFunc' info=''/>
+ <field name='hasInternalSubset' type='hasInternalSubsetSAXFunc' info=''/>
+ <field name='hasExternalSubset' type='hasExternalSubsetSAXFunc' info=''/>
+ <field name='resolveEntity' type='resolveEntitySAXFunc' info=''/>
+ <field name='getEntity' type='getEntitySAXFunc' info=''/>
+ <field name='entityDecl' type='entityDeclSAXFunc' info=''/>
+ <field name='notationDecl' type='notationDeclSAXFunc' info=''/>
+ <field name='attributeDecl' type='attributeDeclSAXFunc' info=''/>
+ <field name='elementDecl' type='elementDeclSAXFunc' info=''/>
+ <field name='unparsedEntityDecl' type='unparsedEntityDeclSAXFunc' info=''/>
+ <field name='setDocumentLocator' type='setDocumentLocatorSAXFunc' info=''/>
+ <field name='startDocument' type='startDocumentSAXFunc' info=''/>
+ <field name='endDocument' type='endDocumentSAXFunc' info=''/>
+ <field name='startElement' type='startElementSAXFunc' info=''/>
+ <field name='endElement' type='endElementSAXFunc' info=''/>
+ <field name='reference' type='referenceSAXFunc' info=''/>
+ <field name='characters' type='charactersSAXFunc' info=''/>
+ <field name='ignorableWhitespace' type='ignorableWhitespaceSAXFunc' info=''/>
+ <field name='processingInstruction' type='processingInstructionSAXFunc' info=''/>
+ <field name='comment' type='commentSAXFunc' info=''/>
+ <field name='warning' type='warningSAXFunc' info=''/>
+ <field name='error' type='errorSAXFunc' info=''/>
+ <field name='fatalError' type='fatalErrorSAXFunc' info=' unused error() get all the errors'/>
+ <field name='getParameterEntity' type='getParameterEntitySAXFunc' info=''/>
+ <field name='cdataBlock' type='cdataBlockSAXFunc' info=''/>
+ <field name='externalSubset' type='externalSubsetSAXFunc' info=''/>
+ <field name='initialized' type='unsigned int' info=' The following fields are extensions available only on version 2'/>
+ <field name='_private' type='void *' info=''/>
+ <field name='startElementNs' type='startElementNsSAX2Func' info=''/>
+ <field name='endElementNs' type='endElementNsSAX2Func' info=''/>
+ <field name='serror' type='xmlStructuredErrorFunc' info=''/>
+ </struct>
+ <typedef name='xmlSAXHandlerPtr' file='tree' type='xmlSAXHandler *'/>
+ <struct name='xmlSAXHandlerV1' file='parser' type='struct _xmlSAXHandlerV1'>
+ <field name='internalSubset' type='internalSubsetSAXFunc' info=''/>
+ <field name='isStandalone' type='isStandaloneSAXFunc' info=''/>
+ <field name='hasInternalSubset' type='hasInternalSubsetSAXFunc' info=''/>
+ <field name='hasExternalSubset' type='hasExternalSubsetSAXFunc' info=''/>
+ <field name='resolveEntity' type='resolveEntitySAXFunc' info=''/>
+ <field name='getEntity' type='getEntitySAXFunc' info=''/>
+ <field name='entityDecl' type='entityDeclSAXFunc' info=''/>
+ <field name='notationDecl' type='notationDeclSAXFunc' info=''/>
+ <field name='attributeDecl' type='attributeDeclSAXFunc' info=''/>
+ <field name='elementDecl' type='elementDeclSAXFunc' info=''/>
+ <field name='unparsedEntityDecl' type='unparsedEntityDeclSAXFunc' info=''/>
+ <field name='setDocumentLocator' type='setDocumentLocatorSAXFunc' info=''/>
+ <field name='startDocument' type='startDocumentSAXFunc' info=''/>
+ <field name='endDocument' type='endDocumentSAXFunc' info=''/>
+ <field name='startElement' type='startElementSAXFunc' info=''/>
+ <field name='endElement' type='endElementSAXFunc' info=''/>
+ <field name='reference' type='referenceSAXFunc' info=''/>
+ <field name='characters' type='charactersSAXFunc' info=''/>
+ <field name='ignorableWhitespace' type='ignorableWhitespaceSAXFunc' info=''/>
+ <field name='processingInstruction' type='processingInstructionSAXFunc' info=''/>
+ <field name='comment' type='commentSAXFunc' info=''/>
+ <field name='warning' type='warningSAXFunc' info=''/>
+ <field name='error' type='errorSAXFunc' info=''/>
+ <field name='fatalError' type='fatalErrorSAXFunc' info=' unused error() get all the errors'/>
+ <field name='getParameterEntity' type='getParameterEntitySAXFunc' info=''/>
+ <field name='cdataBlock' type='cdataBlockSAXFunc' info=''/>
+ <field name='externalSubset' type='externalSubsetSAXFunc' info=''/>
+ <field name='initialized' type='unsigned int' info=''/>
+ </struct>
+ <typedef name='xmlSAXHandlerV1Ptr' file='parser' type='xmlSAXHandlerV1 *'/>
+ <struct name='xmlSAXLocator' file='tree' type='struct _xmlSAXLocator'>
+ <field name='getPublicId' type='const xmlChar *(*getPublicId)' info=''/>
+ <field name='getSystemId' type='const xmlChar *(*getSystemId)' info=''/>
+ <field name='getLineNumber' type='int(*getLineNumber)' info=''/>
+ <field name='getColumnNumber' type='int(*getColumnNumber)' info=''/>
+ </struct>
+ <typedef name='xmlSAXLocatorPtr' file='tree' type='xmlSAXLocator *'/>
+ <struct name='xmlSaveCtxt' file='xmlsave' type='struct _xmlSaveCtxt'/>
+ <typedef name='xmlSaveCtxtPtr' file='xmlsave' type='xmlSaveCtxt *'/>
+ <struct name='xmlSchema' file='xmlschemas' type='struct _xmlSchema'>
+ <field name='name' type='const xmlChar *' info=' schema name'/>
+ <field name='targetNamespace' type='const xmlChar *' info=' the target namespace'/>
+ <field name='version' type='const xmlChar *' info=''/>
+ <field name='id' type='const xmlChar *' info=''/>
+ <field name='doc' type='xmlDocPtr' info=''/>
+ <field name='annot' type='xmlSchemaAnnotPtr' info=''/>
+ <field name='flags' type='int' info=''/>
+ <field name='typeDecl' type='xmlHashTablePtr' info=''/>
+ <field name='attrDecl' type='xmlHashTablePtr' info=''/>
+ <field name='attrgrpDecl' type='xmlHashTablePtr' info=''/>
+ <field name='elemDecl' type='xmlHashTablePtr' info=''/>
+ <field name='notaDecl' type='xmlHashTablePtr' info=''/>
+ <field name='schemasImports' type='xmlHashTablePtr' info=''/>
+ <field name='_private' type='void *' info=' unused by the library for users or bindings'/>
+ <field name='groupDecl' type='xmlHashTablePtr' info=''/>
+ <field name='dict' type='xmlDictPtr' info=''/>
+ <field name='includes' type='void *' info=' the includes, this is opaque for now'/>
+ <field name='preserve' type='int' info=' whether to free the document'/>
+ </struct>
+ <struct name='xmlSchemaAnnot' file='schemasInternals' type='struct _xmlSchemaAnnot'>
+ <field name='next' type='struct _xmlSchemaAnnot *' info=''/>
+ <field name='content' type='xmlNodePtr' info=' the annotation'/>
+ </struct>
+ <typedef name='xmlSchemaAnnotPtr' file='schemasInternals' type='xmlSchemaAnnot *'/>
+ <struct name='xmlSchemaAttribute' file='schemasInternals' type='struct _xmlSchemaAttribute'>
+ <field name='type' type='xmlSchemaTypeType' info=' The kind of type'/>
+ <field name='next' type='struct _xmlSchemaAttribute *' info=' the next attribute if in a group ...'/>
+ <field name='name' type='const xmlChar *' info=''/>
+ <field name='id' type='const xmlChar *' info=''/>
+ <field name='ref' type='const xmlChar *' info=''/>
+ <field name='refNs' type='const xmlChar *' info=''/>
+ <field name='typeName' type='const xmlChar *' info=''/>
+ <field name='typeNs' type='const xmlChar *' info=''/>
+ <field name='annot' type='xmlSchemaAnnotPtr' info=''/>
+ <field name='base' type='xmlSchemaTypePtr' info=''/>
+ <field name='occurs' type='int' info=''/>
+ <field name='defValue' type='const xmlChar *' info=''/>
+ <field name='subtypes' type='xmlSchemaTypePtr' info=''/>
+ <field name='node' type='xmlNodePtr' info=''/>
+ <field name='targetNamespace' type='const xmlChar *' info=''/>
+ <field name='flags' type='int' info=''/>
+ </struct>
+ <struct name='xmlSchemaAttributeGroup' file='schemasInternals' type='struct _xmlSchemaAttributeGroup'>
+ <field name='type' type='xmlSchemaTypeType' info=' The kind of type'/>
+ <field name='next' type='struct _xmlSchemaAttribute *' info=' the next attribute if in a group ...'/>
+ <field name='name' type='const xmlChar *' info=''/>
+ <field name='id' type='const xmlChar *' info=''/>
+ <field name='ref' type='const xmlChar *' info=''/>
+ <field name='refNs' type='const xmlChar *' info=''/>
+ <field name='annot' type='xmlSchemaAnnotPtr' info=''/>
+ <field name='attributes' type='xmlSchemaAttributePtr' info=''/>
+ <field name='node' type='xmlNodePtr' info=''/>
+ </struct>
+ <typedef name='xmlSchemaAttributeGroupPtr' file='schemasInternals' type='xmlSchemaAttributeGroup *'/>
+ <typedef name='xmlSchemaAttributePtr' file='schemasInternals' type='xmlSchemaAttribute *'/>
+ <typedef name='xmlSchemaContentType' file='schemasInternals' type='enum'/>
+ <struct name='xmlSchemaElement' file='schemasInternals' type='struct _xmlSchemaElement'>
+ <field name='type' type='xmlSchemaTypeType' info=' The kind of type'/>
+ <field name='next' type='struct _xmlSchemaType *' info=' the next type if in a sequence ...'/>
+ <field name='name' type='const xmlChar *' info=''/>
+ <field name='id' type='const xmlChar *' info=''/>
+ <field name='ref' type='const xmlChar *' info=''/>
+ <field name='refNs' type='const xmlChar *' info=''/>
+ <field name='annot' type='xmlSchemaAnnotPtr' info=''/>
+ <field name='subtypes' type='xmlSchemaTypePtr' info=''/>
+ <field name='attributes' type='xmlSchemaAttributePtr' info=''/>
+ <field name='node' type='xmlNodePtr' info=''/>
+ <field name='minOccurs' type='int' info=''/>
+ <field name='maxOccurs' type='int' info=''/>
+ <field name='flags' type='int' info=''/>
+ <field name='targetNamespace' type='const xmlChar *' info=''/>
+ <field name='namedType' type='const xmlChar *' info=''/>
+ <field name='namedTypeNs' type='const xmlChar *' info=''/>
+ <field name='substGroup' type='const xmlChar *' info=''/>
+ <field name='substGroupNs' type='const xmlChar *' info=''/>
+ <field name='scope' type='const xmlChar *' info=''/>
+ <field name='value' type='const xmlChar *' info=''/>
+ <field name='refDecl' type='struct _xmlSchemaElement *' info=''/>
+ <field name='contModel' type='xmlRegexpPtr' info=''/>
+ <field name='contentType' type='xmlSchemaContentType' info=''/>
+ </struct>
+ <typedef name='xmlSchemaElementPtr' file='schemasInternals' type='xmlSchemaElement *'/>
+ <struct name='xmlSchemaFacet' file='schemasInternals' type='struct _xmlSchemaFacet'>
+ <field name='type' type='xmlSchemaTypeType' info=' The kind of type'/>
+ <field name='next' type='struct _xmlSchemaFacet *' info=' the next type if in a sequence ...'/>
+ <field name='value' type='const xmlChar *' info=''/>
+ <field name='id' type='const xmlChar *' info=''/>
+ <field name='annot' type='xmlSchemaAnnotPtr' info=''/>
+ <field name='node' type='xmlNodePtr' info=''/>
+ <field name='fixed' type='int' info=''/>
+ <field name='whitespace' type='int' info=''/>
+ <field name='val' type='xmlSchemaValPtr' info=''/>
+ <field name='regexp' type='xmlRegexpPtr' info=''/>
+ </struct>
+ <typedef name='xmlSchemaFacetPtr' file='schemasInternals' type='xmlSchemaFacet *'/>
+ <struct name='xmlSchemaNotation' file='schemasInternals' type='struct _xmlSchemaNotation'>
+ <field name='type' type='xmlSchemaTypeType' info=' The kind of type'/>
+ <field name='name' type='const xmlChar *' info=''/>
+ <field name='annot' type='xmlSchemaAnnotPtr' info=''/>
+ <field name='identifier' type='const xmlChar *' info=''/>
+ </struct>
+ <typedef name='xmlSchemaNotationPtr' file='schemasInternals' type='xmlSchemaNotation *'/>
+ <struct name='xmlSchemaParserCtxt' file='xmlschemas' type='struct _xmlSchemaParserCtxt'/>
+ <typedef name='xmlSchemaParserCtxtPtr' file='xmlschemas' type='xmlSchemaParserCtxt *'/>
+ <typedef name='xmlSchemaPtr' file='xmlschemas' type='xmlSchema *'/>
+ <struct name='xmlSchemaType' file='schemasInternals' type='struct _xmlSchemaType'>
+ <field name='type' type='xmlSchemaTypeType' info=' The kind of type'/>
+ <field name='next' type='struct _xmlSchemaType *' info=' the next type if in a sequence ...'/>
+ <field name='name' type='const xmlChar *' info=''/>
+ <field name='id' type='const xmlChar *' info=''/>
+ <field name='ref' type='const xmlChar *' info=''/>
+ <field name='refNs' type='const xmlChar *' info=''/>
+ <field name='annot' type='xmlSchemaAnnotPtr' info=''/>
+ <field name='subtypes' type='xmlSchemaTypePtr' info=''/>
+ <field name='attributes' type='xmlSchemaAttributePtr' info=''/>
+ <field name='node' type='xmlNodePtr' info=''/>
+ <field name='minOccurs' type='int' info=''/>
+ <field name='maxOccurs' type='int' info=''/>
+ <field name='flags' type='int' info=''/>
+ <field name='contentType' type='xmlSchemaContentType' info=''/>
+ <field name='base' type='const xmlChar *' info=''/>
+ <field name='baseNs' type='const xmlChar *' info=''/>
+ <field name='baseType' type='xmlSchemaTypePtr' info=''/>
+ <field name='facets' type='xmlSchemaFacetPtr' info=''/>
+ <field name='redef' type='struct _xmlSchemaType *' info=' possible redefinitions for the type'/>
+ </struct>
+ <typedef name='xmlSchemaTypePtr' file='schemasInternals' type='xmlSchemaType *'/>
+ <typedef name='xmlSchemaTypeType' file='schemasInternals' type='enum'/>
+ <struct name='xmlSchemaVal' file='schemasInternals' type='struct _xmlSchemaVal'/>
+ <typedef name='xmlSchemaValPtr' file='schemasInternals' type='xmlSchemaVal *'/>
+ <struct name='xmlSchemaValidCtxt' file='xmlschemas' type='struct _xmlSchemaValidCtxt'/>
+ <typedef name='xmlSchemaValidCtxtPtr' file='xmlschemas' type='xmlSchemaValidCtxt *'/>
+ <typedef name='xmlSchemaValidError' file='xmlschemas' type='enum'/>
+ <struct name='xmlShellCtxt' file='debugXML' type='struct _xmlShellCtxt'>
+ <field name='filename' type='char *' info=''/>
+ <field name='doc' type='xmlDocPtr' info=''/>
+ <field name='node' type='xmlNodePtr' info=''/>
+ <field name='pctxt' type='xmlXPathContextPtr' info=''/>
+ <field name='loaded' type='int' info=''/>
+ <field name='output' type='FILE *' info=''/>
+ <field name='input' type='xmlShellReadlineFunc' info=''/>
+ </struct>
+ <typedef name='xmlShellCtxtPtr' file='debugXML' type='xmlShellCtxt *'/>
+ <struct name='xmlTextReader' file='xmlreader' type='struct _xmlTextReader'/>
+ <typedef name='xmlTextReaderLocatorPtr' file='xmlreader' type='void *'/>
+ <typedef name='xmlTextReaderPtr' file='xmlreader' type='xmlTextReader *'/>
+ <struct name='xmlTextWriter' file='xmlwriter' type='struct _xmlTextWriter'/>
+ <typedef name='xmlTextWriterPtr' file='xmlwriter' type='xmlTextWriter *'/>
+ <struct name='xmlURI' file='uri' type='struct _xmlURI'>
+ <field name='scheme' type='char *' info=' the URI scheme'/>
+ <field name='opaque' type='char *' info=' opaque part'/>
+ <field name='authority' type='char *' info=' the authority part'/>
+ <field name='server' type='char *' info=' the server part'/>
+ <field name='user' type='char *' info=' the user part'/>
+ <field name='port' type='int' info=' the port number'/>
+ <field name='path' type='char *' info=' the path string'/>
+ <field name='query' type='char *' info=' the query string'/>
+ <field name='fragment' type='char *' info=' the fragment identifier'/>
+ <field name='cleanup' type='int' info=' parsing potentially unclean URI'/>
+ </struct>
+ <typedef name='xmlURIPtr' file='uri' type='xmlURI *'/>
+ <struct name='xmlValidCtxt' file='valid' type='struct _xmlValidCtxt'>
+ <field name='userData' type='void *' info=' user specific data block'/>
+ <field name='error' type='xmlValidityErrorFunc' info=' the callback in case of errors'/>
+ <field name='warning' type='xmlValidityWarningFunc' info=' the callback in case of warning Node analysis stack used when validating within entities'/>
+ <field name='node' type='xmlNodePtr' info=' Current parsed Node'/>
+ <field name='nodeNr' type='int' info=' Depth of the parsing stack'/>
+ <field name='nodeMax' type='int' info=' Max depth of the parsing stack'/>
+ <field name='nodeTab' type='xmlNodePtr *' info=' array of nodes'/>
+ <field name='finishDtd' type='int' info=' finished validating the Dtd ?'/>
+ <field name='doc' type='xmlDocPtr' info=' the document'/>
+ <field name='valid' type='int' info=' temporary validity check result state state used for non-determinist content validation'/>
+ <field name='vstate' type='xmlValidState *' info=' current state'/>
+ <field name='vstateNr' type='int' info=' Depth of the validation stack'/>
+ <field name='vstateMax' type='int' info=' Max depth of the validation stack'/>
+ <field name='vstateTab' type='xmlValidState *' info=' array of validation states'/>
+ <field name='am' type='xmlAutomataPtr' info=' the automata'/>
+ <field name='state' type='xmlAutomataStatePtr' info=' used to build the automata'/>
+ <field name='am' type='void *' info=''/>
+ <field name='state' type='void *' info=''/>
+ </struct>
+ <typedef name='xmlValidCtxtPtr' file='valid' type='xmlValidCtxt *'/>
+ <struct name='xmlValidState' file='valid' type='struct _xmlValidState'/>
+ <typedef name='xmlValidStatePtr' file='valid' type='xmlValidState *'/>
+ <struct name='xmlXIncludeCtxt' file='xinclude' type='struct _xmlXIncludeCtxt'/>
+ <typedef name='xmlXIncludeCtxtPtr' file='xinclude' type='xmlXIncludeCtxt *'/>
+ <struct name='xmlXPathAxis' file='xpath' type='struct _xmlXPathAxis'>
+ <field name='name' type='const xmlChar *' info=' the axis name'/>
+ <field name='func' type='xmlXPathAxisFunc' info=' the search function'/>
+ </struct>
+ <typedef name='xmlXPathAxisPtr' file='xpath' type='xmlXPathAxis *'/>
+ <struct name='xmlXPathCompExpr' file='xpath' type='struct _xmlXPathCompExpr'/>
+ <typedef name='xmlXPathCompExprPtr' file='xpath' type='xmlXPathCompExpr *'/>
+ <struct name='xmlXPathContext' file='xpath' type='struct _xmlXPathContext'>
+ <field name='doc' type='xmlDocPtr' info=' The current document'/>
+ <field name='node' type='xmlNodePtr' info=' The current node'/>
+ <field name='nb_variables_unused' type='int' info=' unused (hash table)'/>
+ <field name='max_variables_unused' type='int' info=' unused (hash table)'/>
+ <field name='varHash' type='xmlHashTablePtr' info=' Hash table of defined variables'/>
+ <field name='nb_types' type='int' info=' number of defined types'/>
+ <field name='max_types' type='int' info=' max number of types'/>
+ <field name='types' type='xmlXPathTypePtr' info=' Array of defined types'/>
+ <field name='nb_funcs_unused' type='int' info=' unused (hash table)'/>
+ <field name='max_funcs_unused' type='int' info=' unused (hash table)'/>
+ <field name='funcHash' type='xmlHashTablePtr' info=' Hash table of defined funcs'/>
+ <field name='nb_axis' type='int' info=' number of defined axis'/>
+ <field name='max_axis' type='int' info=' max number of axis'/>
+ <field name='axis' type='xmlXPathAxisPtr' info=' Array of defined axis the namespace nodes of the context node'/>
+ <field name='namespaces' type='xmlNsPtr *' info=' Array of namespaces'/>
+ <field name='nsNr' type='int' info=' number of namespace in scope'/>
+ <field name='user' type='void *' info=' function to free extra variables'/>
+ <field name='contextSize' type='int' info=' the context size'/>
+ <field name='proximityPosition' type='int' info=' the proximity position extra stuff for XPointer'/>
+ <field name='xptr' type='int' info=' it this an XPointer context'/>
+ <field name='here' type='xmlNodePtr' info=' for here()'/>
+ <field name='origin' type='xmlNodePtr' info=' for origin() the set of namespace declarations in scope for the expression'/>
+ <field name='nsHash' type='xmlHashTablePtr' info=' The namespaces hash table'/>
+ <field name='varLookupFunc' type='void *' info=' variable lookup func'/>
+ <field name='varLookupData' type='void *' info=' variable lookup data Possibility to link in an extra item'/>
+ <field name='extra' type='void *' info=' needed for XSLT The function name and URI when calling a function'/>
+ <field name='function' type='const xmlChar *' info=''/>
+ <field name='functionURI' type='const xmlChar *' info=' function lookup function and data'/>
+ <field name='funcLookupFunc' type='void *' info=' function lookup func'/>
+ <field name='funcLookupData' type='void *' info=' function lookup data temporary namespace lists kept for walking the namespace axis'/>
+ <field name='tmpNsList' type='xmlNsPtr *' info=' Array of namespaces'/>
+ <field name='tmpNsNr' type='int' info=' number of namespace in scope error reporting mechanism'/>
+ <field name='userData' type='void *' info=' user specific data block'/>
+ <field name='error' type='xmlStructuredErrorFunc' info=' the callback in case of errors'/>
+ <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'/>
+ </struct>
+ <typedef name='xmlXPathContextPtr' file='xpath' type='xmlXPathContext *'/>
+ <typedef name='xmlXPathError' file='xpath' type='enum'/>
+ <typedef name='xmlXPathFuncPtr' file='xpath' type='xmlXPathFunct *'/>
+ <struct name='xmlXPathFunct' file='xpath' type='struct _xmlXPathFunct'>
+ <field name='name' type='const xmlChar *' info=' the function name'/>
+ <field name='func' type='xmlXPathEvalFunc' info=' the evaluation function'/>
+ </struct>
+ <struct name='xmlXPathObject' file='xpath' type='struct _xmlXPathObject'>
+ <field name='type' type='xmlXPathObjectType' info=''/>
+ <field name='nodesetval' type='xmlNodeSetPtr' info=''/>
+ <field name='boolval' type='int' info=''/>
+ <field name='floatval' type='double' info=''/>
+ <field name='stringval' type='xmlChar *' info=''/>
+ <field name='user' type='void *' info=''/>
+ <field name='index' type='int' info=''/>
+ <field name='user2' type='void *' info=''/>
+ <field name='index2' type='int' info=''/>
+ </struct>
+ <typedef name='xmlXPathObjectPtr' file='xpath' type='xmlXPathObject *'/>
+ <typedef name='xmlXPathObjectType' file='xpath' type='enum'/>
+ <struct name='xmlXPathParserContext' file='xpath' type='struct _xmlXPathParserContext'>
+ <field name='cur' type='const xmlChar *' info=' the current char being parsed'/>
+ <field name='base' type='const xmlChar *' info=' the full expression'/>
+ <field name='error' type='int' info=' error code'/>
+ <field name='context' type='xmlXPathContextPtr' info=' the evaluation context'/>
+ <field name='value' type='xmlXPathObjectPtr' info=' the current value'/>
+ <field name='valueNr' type='int' info=' number of values stacked'/>
+ <field name='valueMax' type='int' info=' max number of values stacked'/>
+ <field name='valueTab' type='xmlXPathObjectPtr *' info=' stack of values'/>
+ <field name='comp' type='xmlXPathCompExprPtr' info=' the precompiled expression'/>
+ <field name='xptr' type='int' info=' it this an XPointer expression'/>
+ <field name='ancestor' type='xmlNodePtr' info=' used for walking preceding axis'/>
+ </struct>
+ <typedef name='xmlXPathParserContextPtr' file='xpath' type='xmlXPathParserContext *'/>
+ <struct name='xmlXPathType' file='xpath' type='struct _xmlXPathType'>
+ <field name='name' type='const xmlChar *' info=' the type name'/>
+ <field name='func' type='xmlXPathConvertFunc' info=' the conversion function'/>
+ </struct>
+ <typedef name='xmlXPathTypePtr' file='xpath' type='xmlXPathType *'/>
+ <struct name='xmlXPathVariable' file='xpath' type='struct _xmlXPathVariable'>
+ <field name='name' type='const xmlChar *' info=' the variable name'/>
+ <field name='value' type='xmlXPathObjectPtr' info=' the value'/>
+ </struct>
+ <typedef name='xmlXPathVariablePtr' file='xpath' type='xmlXPathVariable *'/>
+ <variable name='docbDefaultSAXHandler' file='globals' type='xmlSAXHandlerV1'/>
+ <variable name='htmlDefaultSAXHandler' file='globals' type='xmlSAXHandlerV1'/>
+ <variable name='oldXMLWDcompatibility' file='globals' type='int'/>
+ <variable name='xmlBufferAllocScheme' file='globals' type='xmlBufferAllocationScheme'/>
+ <variable name='xmlDefaultBufferSize' file='globals' type='int'/>
+ <variable name='xmlDefaultSAXHandler' file='globals' type='xmlSAXHandlerV1'/>
+ <variable name='xmlDefaultSAXLocator' file='globals' type='xmlSAXLocator'/>
+ <variable name='xmlDeregisterNodeDefaultValue' file='globals' type='xmlDeregisterNodeFunc'/>
+ <variable name='xmlDoValidityCheckingDefaultValue' file='globals' type='int'/>
+ <variable name='xmlFree' file='globals' type='xmlFreeFunc'/>
+ <variable name='xmlGenericError' file='globals' type='xmlGenericErrorFunc'/>
+ <variable name='xmlGenericErrorContext' file='globals' type='void *'/>
+ <variable name='xmlGetWarningsDefaultValue' file='globals' type='int'/>
+ <variable name='xmlIndentTreeOutput' file='globals' type='int'/>
+ <variable name='xmlIsBaseCharGroup' file='chvalid' type='xmlChRangeGroup'/>
+ <variable name='xmlIsCharGroup' file='chvalid' type='xmlChRangeGroup'/>
+ <variable name='xmlIsCombiningGroup' file='chvalid' type='xmlChRangeGroup'/>
+ <variable name='xmlIsDigitGroup' file='chvalid' type='xmlChRangeGroup'/>
+ <variable name='xmlIsExtenderGroup' file='chvalid' type='xmlChRangeGroup'/>
+ <variable name='xmlIsIdeographicGroup' file='chvalid' type='xmlChRangeGroup'/>
+ <variable name='xmlIsPubidChar_tab' file='chvalid' type='unsigned charxmlIsPubidChar_tab[256]'/>
+ <variable name='xmlKeepBlanksDefaultValue' file='globals' type='int'/>
+ <variable name='xmlLastError' file='globals' type='xmlError'/>
+ <variable name='xmlLineNumbersDefaultValue' file='globals' type='int'/>
+ <variable name='xmlLoadExtDtdDefaultValue' file='globals' type='int'/>
+ <variable name='xmlMalloc' file='globals' type='xmlMallocFunc'/>
+ <variable name='xmlMallocAtomic' file='globals' type='xmlMallocFunc'/>
+ <variable name='xmlMemStrdup' file='globals' type='xmlStrdupFunc'/>
+ <variable name='xmlParserDebugEntities' file='globals' type='int'/>
+ <variable name='xmlParserMaxDepth' file='parserInternals' type='unsigned int'/>
+ <variable name='xmlParserVersion' file='globals' type='const char *'/>
+ <variable name='xmlPedanticParserDefaultValue' file='globals' type='int'/>
+ <variable name='xmlRealloc' file='globals' type='xmlReallocFunc'/>
+ <variable name='xmlRegisterNodeDefaultValue' file='globals' type='xmlRegisterNodeFunc'/>
+ <variable name='xmlSaveNoEmptyTags' file='globals' type='int'/>
+ <variable name='xmlStringComment' file='parserInternals' type='const xmlCharxmlStringComment[]'/>
+ <variable name='xmlStringText' file='parserInternals' type='const xmlCharxmlStringText[]'/>
+ <variable name='xmlStringTextNoenc' file='parserInternals' type='const xmlCharxmlStringTextNoenc[]'/>
+ <variable name='xmlStructuredError' file='globals' type='xmlStructuredErrorFunc'/>
+ <variable name='xmlSubstituteEntitiesDefaultValue' file='globals' type='int'/>
+ <variable name='xmlTreeIndentString' file='globals' type='const char *'/>
+ <variable name='xmlXPathNAN' file='xpath' type='double'/>
+ <variable name='xmlXPathNINF' file='xpath' type='double'/>
+ <variable name='xmlXPathPINF' file='xpath' type='double'/>
+ <function name='UTF8ToHtml' file='HTMLparser'>
+ <info>Take a block of UTF-8 chars in and try to convert it to an ASCII plus HTML entities block of chars out.</info>
+ <return type='int' info='0 if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed as the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.'/>
+ <arg name='out' type='unsigned char *' info='a pointer to an array of bytes to store the result'/>
+ <arg name='outlen' type='int *' info='the length of @out'/>
+ <arg name='in' type='const unsigned char *' info='a pointer to an array of UTF-8 chars'/>
+ <arg name='inlen' type='int *' info='the length of @in'/>
+ </function>
+ <function name='UTF8Toisolat1' file='encoding'>
+ <info>Take a block of UTF-8 chars in and try to convert it to an ISO Latin 1 block of chars out.</info>
+ <return type='int' info='0 if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.'/>
+ <arg name='out' type='unsigned char *' info='a pointer to an array of bytes to store the result'/>
+ <arg name='outlen' type='int *' info='the length of @out'/>
+ <arg name='in' type='const unsigned char *' info='a pointer to an array of UTF-8 chars'/>
+ <arg name='inlen' type='int *' info='the length of @in'/>
+ </function>
+ <function name='attribute' file='SAX'>
+ <info>Handle an attribute that has been read by the parser. The default handling is to convert the attribute into an DOM subtree and past it in a new xmlAttr element added to the element. DEPRECATED: use xmlSAX2Attribute()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='fullname' type='const xmlChar *' info='The attribute name, including namespace prefix'/>
+ <arg name='value' type='const xmlChar *' info='The attribute value'/>
+ </function>
+ <function name='attributeDecl' file='SAX'>
+ <info>An attribute definition has been parsed DEPRECATED: use xmlSAX2AttributeDecl()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='elem' type='const xmlChar *' info='the name of the element'/>
+ <arg name='fullname' type='const xmlChar *' info='the attribute name'/>
+ <arg name='type' type='int' info='the attribute type'/>
+ <arg name='def' type='int' info='the type of default value'/>
+ <arg name='defaultValue' type='const xmlChar *' info='the attribute default value'/>
+ <arg name='tree' type='xmlEnumerationPtr' info='the tree of enumerated value set'/>
+ </function>
+ <functype name='attributeDeclSAXFunc' file='parser'>
+ <info>An attribute definition has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='elem' type='const xmlChar *' info='the name of the element'/>
+ <arg name='fullname' type='const xmlChar *' info='the attribute name'/>
+ <arg name='type' type='int' info='the attribute type'/>
+ <arg name='def' type='int' info='the type of default value'/>
+ <arg name='defaultValue' type='const xmlChar *' info='the attribute default value'/>
+ <arg name='tree' type='xmlEnumerationPtr' info='the tree of enumerated value set'/>
+ </functype>
+ <functype name='attributeSAXFunc' file='parser'>
+ <info>Handle an attribute that has been read by the parser. The default handling is to convert the attribute into an DOM subtree and past it in a new xmlAttr element added to the element.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The attribute name, including namespace prefix'/>
+ <arg name='value' type='const xmlChar *' info='The attribute value'/>
+ </functype>
+ <function name='cdataBlock' file='SAX'>
+ <info>called when a pcdata block has been parsed DEPRECATED: use xmlSAX2CDataBlock()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='value' type='const xmlChar *' info='The pcdata content'/>
+ <arg name='len' type='int' info='the block length'/>
+ </function>
+ <functype name='cdataBlockSAXFunc' file='parser'>
+ <info>Called when a pcdata block has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='value' type='const xmlChar *' info='The pcdata content'/>
+ <arg name='len' type='int' info='the block length'/>
+ </functype>
+ <function name='characters' file='SAX'>
+ <info>receiving some chars from the parser. DEPRECATED: use xmlSAX2Characters()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='ch' type='const xmlChar *' info='a xmlChar string'/>
+ <arg name='len' type='int' info='the number of xmlChar'/>
+ </function>
+ <functype name='charactersSAXFunc' file='parser'>
+ <info>Receiving some chars from the parser.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='ch' type='const xmlChar *' info='a xmlChar string'/>
+ <arg name='len' type='int' info='the number of xmlChar'/>
+ </functype>
+ <function name='checkNamespace' file='SAX'>
+ <info>Check that the current element namespace is the same as the one read upon parsing. DEPRECATED</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='namespace' type='xmlChar *' info='the namespace to check against'/>
+ </function>
+ <function name='comment' file='SAX'>
+ <info>A comment has been parsed. DEPRECATED: use xmlSAX2Comment()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='value' type='const xmlChar *' info='the comment content'/>
+ </function>
+ <functype name='commentSAXFunc' file='parser'>
+ <info>A comment has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='value' type='const xmlChar *' info='the comment content'/>
+ </functype>
+ <function name='docbCreateFileParserCtxt' file='DOCBparser'>
+ <info>Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</info>
+ <return type='docbParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='encoding' type='const char *' info='the SGML document encoding, or NULL'/>
+ </function>
+ <function name='docbCreatePushParserCtxt' file='DOCBparser'>
+ <info>Create a parser context for using the DocBook SGML parser in push mode To allow content encoding detection, @size should be &gt;= 4 The value of @filename is used for fetching external entities and error/warning reports.</info>
+ <return type='docbParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='sax' type='docbSAXHandlerPtr' info='a SAX handler'/>
+ <arg name='user_data' type='void *' info='The user data returned on SAX callbacks'/>
+ <arg name='chunk' type='const char *' info='a pointer to an array of chars'/>
+ <arg name='size' type='int' info='number of chars in the array'/>
+ <arg name='filename' type='const char *' info='an optional file name or URI'/>
+ <arg name='enc' type='xmlCharEncoding' info='an optional encoding'/>
+ </function>
+ <function name='docbDefaultSAXHandlerInit' file='SAX2'>
+ <info>Initialize the default SAX handler</info>
+ <return type='void'/>
+ </function>
+ <function name='docbEncodeEntities' file='DOCBparser'>
+ <info>Take a block of UTF-8 chars in and try to convert it to an ASCII plus SGML entities block of chars out.</info>
+ <return type='int' info='0 if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed as the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.'/>
+ <arg name='out' type='unsigned char *' info='a pointer to an array of bytes to store the result'/>
+ <arg name='outlen' type='int *' info='the length of @out'/>
+ <arg name='in' type='const unsigned char *' info='a pointer to an array of UTF-8 chars'/>
+ <arg name='inlen' type='int *' info='the length of @in'/>
+ <arg name='quoteChar' type='int' info='the quote character to escape (&apos; or &quot;) or zero.'/>
+ </function>
+ <function name='docbFreeParserCtxt' file='DOCBparser'>
+ <info>Free all the memory used by a parser context. However the parsed document in ctxt-&gt;myDoc is not freed.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='docbParserCtxtPtr' info='an SGML parser context'/>
+ </function>
+ <function name='docbParseChunk' file='DOCBparser'>
+ <info>Parse a Chunk of memory</info>
+ <return type='int' info='zero if no error, the xmlParserErrors otherwise.'/>
+ <arg name='ctxt' type='docbParserCtxtPtr' info='an XML parser context'/>
+ <arg name='chunk' type='const char *' info='an char array'/>
+ <arg name='size' type='int' info='the size in byte of the chunk'/>
+ <arg name='terminate' type='int' info='last chunk indicator'/>
+ </function>
+ <function name='docbParseDoc' file='DOCBparser'>
+ <info>parse an SGML in-memory document and build a tree.</info>
+ <return type='docbDocPtr' info='the resulting document tree'/>
+ <arg name='cur' type='xmlChar *' info='a pointer to an array of xmlChar'/>
+ <arg name='encoding' type='const char *' info='a free form C string describing the SGML document encoding, or NULL'/>
+ </function>
+ <function name='docbParseDocument' file='DOCBparser'>
+ <info>parse an SGML document (and build a tree if using the standard SAX interface).</info>
+ <return type='int' info='0, -1 in case of error. the parser context is augmented as a result of the parsing.'/>
+ <arg name='ctxt' type='docbParserCtxtPtr' info='an SGML parser context'/>
+ </function>
+ <function name='docbParseFile' file='DOCBparser'>
+ <info>parse a Docbook SGML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</info>
+ <return type='docbDocPtr' info='the resulting document tree'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='encoding' type='const char *' info='a free form C string describing document encoding, or NULL'/>
+ </function>
+ <function name='docbSAXParseDoc' file='DOCBparser'>
+ <info>parse an SGML in-memory document and build a tree. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</info>
+ <return type='docbDocPtr' info='the resulting document tree'/>
+ <arg name='cur' type='xmlChar *' info='a pointer to an array of xmlChar'/>
+ <arg name='encoding' type='const char *' info='a free form C string describing the SGML document encoding, or NULL'/>
+ <arg name='sax' type='docbSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='userData' type='void *' info='if using SAX, this pointer will be provided on callbacks.'/>
+ </function>
+ <function name='docbSAXParseFile' file='DOCBparser'>
+ <info>parse an SGML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</info>
+ <return type='docbDocPtr' info='the resulting document tree'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='encoding' type='const char *' info='a free form C string describing the SGML document encoding, or NULL'/>
+ <arg name='sax' type='docbSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='userData' type='void *' info='if using SAX, this pointer will be provided on callbacks.'/>
+ </function>
+ <function name='elementDecl' file='SAX'>
+ <info>An element definition has been parsed DEPRECATED: use xmlSAX2ElementDecl()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the element name'/>
+ <arg name='type' type='int' info='the element type'/>
+ <arg name='content' type='xmlElementContentPtr' info='the element value tree'/>
+ </function>
+ <functype name='elementDeclSAXFunc' file='parser'>
+ <info>An element definition has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the element name'/>
+ <arg name='type' type='int' info='the element type'/>
+ <arg name='content' type='xmlElementContentPtr' info='the element value tree'/>
+ </functype>
+ <function name='endDocument' file='SAX'>
+ <info>called when the document end has been detected. DEPRECATED: use xmlSAX2EndDocument()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <functype name='endDocumentSAXFunc' file='parser'>
+ <info>Called when the document end has been detected.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </functype>
+ <function name='endElement' file='SAX'>
+ <info>called when the end of an element has been detected. DEPRECATED: use xmlSAX2EndElement()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The element name'/>
+ </function>
+ <functype name='endElementNsSAX2Func' file='parser'>
+ <info>SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='localname' type='const xmlChar *' info='the local name of the element'/>
+ <arg name='prefix' type='const xmlChar *' info='the element namespace prefix if available'/>
+ <arg name='URI' type='const xmlChar *' info='the element namespace name if available'/>
+ </functype>
+ <functype name='endElementSAXFunc' file='parser'>
+ <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)'/>
+ <arg name='name' type='const xmlChar *' info='The element name'/>
+ </functype>
+ <function name='entityDecl' file='SAX'>
+ <info>An entity definition has been parsed DEPRECATED: use xmlSAX2EntityDecl()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ <arg name='type' type='int' info='the entity type'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ <arg name='content' type='xmlChar *' info='the entity value (without processing).'/>
+ </function>
+ <functype name='entityDeclSAXFunc' file='parser'>
+ <info>An entity definition has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ <arg name='type' type='int' info='the entity type'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ <arg name='content' type='xmlChar *' info='the entity value (without processing).'/>
+ </functype>
+ <functype name='errorSAXFunc' file='parser'>
+ <info>Display and format an error messages, callback.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an XML parser context'/>
+ <arg name='msg' type='const char *' info='the message to display/transmit'/>
+ <arg name='...' type='...' info='extra parameters for the message display'/>
+ </functype>
+ <function name='externalSubset' file='SAX'>
+ <info>Callback on external subset declaration. DEPRECATED: use xmlSAX2ExternalSubset()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the root element name'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external ID'/>
+ <arg name='SystemID' type='const xmlChar *' info='the SYSTEM ID (e.g. filename or URL)'/>
+ </function>
+ <functype name='externalSubsetSAXFunc' file='parser'>
+ <info>Callback on external subset declaration.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the root element name'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external ID'/>
+ <arg name='SystemID' type='const xmlChar *' info='the SYSTEM ID (e.g. filename or URL)'/>
+ </functype>
+ <functype name='fatalErrorSAXFunc' file='parser'>
+ <info>Display and format fatal error messages, callback. Note: so far fatalError() SAX callbacks are not used, error() get all the callbacks for errors.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an XML parser context'/>
+ <arg name='msg' type='const char *' info='the message to display/transmit'/>
+ <arg name='...' type='...' info='extra parameters for the message display'/>
+ </functype>
+ <functype name='ftpDataCallback' file='nanoftp'>
+ <info>A callback for the xmlNanoFTPGet command.</info>
+ <return type='void'/>
+ <arg name='userData' type='void *' info='the user provided context'/>
+ <arg name='data' type='const char *' info='the data received'/>
+ <arg name='len' type='int' info='its size in bytes'/>
+ </functype>
+ <functype name='ftpListCallback' file='nanoftp'>
+ <info>A callback for the xmlNanoFTPList command. Note that only one of year and day:minute are specified.</info>
+ <return type='void'/>
+ <arg name='userData' type='void *' info='user provided data for the callback'/>
+ <arg name='filename' type='const char *' info='the file name (including &quot;-&gt;&quot; when links are shown)'/>
+ <arg name='attrib' type='const char *' info='the attribute string'/>
+ <arg name='owner' type='const char *' info='the owner string'/>
+ <arg name='group' type='const char *' info='the group string'/>
+ <arg name='size' type='unsigned long' info='the file size'/>
+ <arg name='links' type='int' info='the link count'/>
+ <arg name='year' type='int' info='the year'/>
+ <arg name='month' type='const char *' info='the month'/>
+ <arg name='day' type='int' info='the day'/>
+ <arg name='hour' type='int' info='the hour'/>
+ <arg name='minute' type='int' info='the minute'/>
+ </functype>
+ <function name='getColumnNumber' file='SAX'>
+ <info>Provide the column number of the current parsing point. DEPRECATED: use xmlSAX2GetColumnNumber()</info>
+ <return type='int' info='an int'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='getEntity' file='SAX'>
+ <info>Get an entity by name DEPRECATED: use xmlSAX2GetEntity()</info>
+ <return type='xmlEntityPtr' info='the xmlEntityPtr if found.'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The entity name'/>
+ </function>
+ <functype name='getEntitySAXFunc' file='parser'>
+ <info>Get an entity by name.</info>
+ <return type='xmlEntityPtr' info='the xmlEntityPtr if found.'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The entity name'/>
+ </functype>
+ <function name='getLineNumber' file='SAX'>
+ <info>Provide the line number of the current parsing point. DEPRECATED: use xmlSAX2GetLineNumber()</info>
+ <return type='int' info='an int'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='getNamespace' file='SAX'>
+ <info>Get the current element namespace. DEPRECATED</info>
+ <return type='xmlNsPtr' info='the xmlNsPtr or NULL if none'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='getParameterEntity' file='SAX'>
+ <info>Get a parameter entity by name DEPRECATED: use xmlSAX2GetParameterEntity()</info>
+ <return type='xmlEntityPtr' info='the xmlEntityPtr if found.'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The entity name'/>
+ </function>
+ <functype name='getParameterEntitySAXFunc' file='parser'>
+ <info>Get a parameter entity by name.</info>
+ <return type='xmlEntityPtr' info='the xmlEntityPtr if found.'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The entity name'/>
+ </functype>
+ <function name='getPublicId' file='SAX'>
+ <info>Provides the public ID e.g. &quot;-//SGMLSOURCE//DTD DEMO//EN&quot; DEPRECATED: use xmlSAX2GetPublicId()</info>
+ <return type='const xmlChar *' info='a xmlChar *'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='getSystemId' file='SAX'>
+ <info>Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd DEPRECATED: use xmlSAX2GetSystemId()</info>
+ <return type='const xmlChar *' info='a xmlChar *'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='globalNamespace' file='SAX'>
+ <info>An old global namespace has been parsed. DEPRECATED</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='href' type='const xmlChar *' info='the namespace associated URN'/>
+ <arg name='prefix' type='const xmlChar *' info='the namespace prefix'/>
+ </function>
+ <function name='hasExternalSubset' file='SAX'>
+ <info>Does this document has an external subset DEPRECATED: use xmlSAX2HasExternalSubset()</info>
+ <return type='int' info='1 if true'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <functype name='hasExternalSubsetSAXFunc' file='parser'>
+ <info>Does this document has an external subset?</info>
+ <return type='int' info='1 if true'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </functype>
+ <function name='hasInternalSubset' file='SAX'>
+ <info>Does this document has an internal subset DEPRECATED: use xmlSAX2HasInternalSubset()</info>
+ <return type='int' info='1 if true'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <functype name='hasInternalSubsetSAXFunc' file='parser'>
+ <info>Does this document has an internal subset.</info>
+ <return type='int' info='1 if true'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </functype>
+ <function name='htmlAttrAllowed' file='HTMLparser'>
+ <info>Checks whether an attribute is valid for an element Has full knowledge of Required and Deprecated attributes</info>
+ <return type='htmlStatus' info='one of HTML_REQUIRED, HTML_VALID, HTML_DEPRECATED, HTML_INVALID'/>
+ <arg name='elt' type='const htmlElemDesc *' info='HTML element'/>
+ <arg name='attr' type='const xmlChar *' info='HTML attribute'/>
+ <arg name='legacy' type='int' info='whether to allow deprecated attributes'/>
+ </function>
+ <function name='htmlAutoCloseTag' file='HTMLparser'>
+ <info>The HTML DTD allows a tag to implicitly close other tags. The list is kept in htmlStartClose array. This function checks if the element or one of it&apos;s children would autoclose the given tag.</info>
+ <return type='int' info='1 if autoclose, 0 otherwise'/>
+ <arg name='doc' type='htmlDocPtr' info='the HTML document'/>
+ <arg name='name' type='const xmlChar *' info='The tag name'/>
+ <arg name='elem' type='htmlNodePtr' info='the HTML element'/>
+ </function>
+ <function name='htmlCreateFileParserCtxt' file='parserInternals'>
+ <info>Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</info>
+ <return type='htmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='encoding' type='const char *' info='a free form C string describing the HTML document encoding, or NULL'/>
+ </function>
+ <function name='htmlCreateMemoryParserCtxt' file='HTMLparser'>
+ <info>Create a parser context for an HTML in-memory document.</info>
+ <return type='htmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='buffer' type='const char *' info='a pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ </function>
+ <function name='htmlCreatePushParserCtxt' file='HTMLparser'>
+ <info>Create a parser context for using the HTML parser in push mode The value of @filename is used for fetching external entities and error/warning reports.</info>
+ <return type='htmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='sax' type='htmlSAXHandlerPtr' info='a SAX handler'/>
+ <arg name='user_data' type='void *' info='The user data returned on SAX callbacks'/>
+ <arg name='chunk' type='const char *' info='a pointer to an array of chars'/>
+ <arg name='size' type='int' info='number of chars in the array'/>
+ <arg name='filename' type='const char *' info='an optional file name or URI'/>
+ <arg name='enc' type='xmlCharEncoding' info='an optional encoding'/>
+ </function>
+ <function name='htmlCtxtReadDoc' file='HTMLparser'>
+ <info>parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ <arg name='cur' type='const xmlChar *' info='a pointer to a zero terminated string'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlCtxtReadFd' file='HTMLparser'>
+ <info>parse an XML from a file descriptor and build a tree. This reuses the existing @ctxt parser context</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ <arg name='fd' type='int' info='an open file descriptor'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlCtxtReadFile' file='HTMLparser'>
+ <info>parse an XML file from the filesystem or the network. This reuses the existing @ctxt parser context</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ <arg name='filename' type='const char *' info='a file or URL'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlCtxtReadIO' file='HTMLparser'>
+ <info>parse an HTML document from I/O functions and source and build a tree. This reuses the existing @ctxt parser context</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ <arg name='ioread' type='xmlInputReadCallback' info='an I/O read function'/>
+ <arg name='ioclose' type='xmlInputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlCtxtReadMemory' file='HTMLparser'>
+ <info>parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ <arg name='buffer' type='const char *' info='a pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlCtxtReset' file='HTMLparser'>
+ <info>Reset a parser context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ </function>
+ <function name='htmlCtxtUseOptions' file='HTMLparser'>
+ <info>Applies the options to the parser context</info>
+ <return type='int' info='0 in case of success, the set of unknown or unimplemented options in case of error.'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlDefaultSAXHandlerInit' file='SAX2'>
+ <info>Initialize the default SAX handler</info>
+ <return type='void'/>
+ </function>
+ <function name='htmlDocContentDumpFormatOutput' file='HTMLtree'>
+ <info>Dump an HTML document.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlOutputBufferPtr' info='the HTML buffer output'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='encoding' type='const char *' info='the encoding string'/>
+ <arg name='format' type='int' info='should formatting spaces been added'/>
+ </function>
+ <function name='htmlDocContentDumpOutput' file='HTMLtree'>
+ <info>Dump an HTML document. Formating return/spaces are added.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlOutputBufferPtr' info='the HTML buffer output'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='encoding' type='const char *' info='the encoding string'/>
+ </function>
+ <function name='htmlDocDump' file='HTMLtree'>
+ <info>Dump an HTML document to an open FILE.</info>
+ <return type='int' info='the number of byte written or -1 in case of failure.'/>
+ <arg name='f' type='FILE *' info='the FILE*'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='htmlDocDumpMemory' file='HTMLtree'>
+ <info>Dump an HTML document in memory and return the xmlChar * and it&apos;s size. It&apos;s up to the caller to free the memory.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='mem' type='xmlChar **' info='OUT: the memory pointer'/>
+ <arg name='size' type='int *' info='OUT: the memory length'/>
+ </function>
+ <function name='htmlElementAllowedHere' file='HTMLparser'>
+ <info>Checks whether an HTML element may be a direct child of a parent element. Note - doesn&apos;t check for deprecated elements</info>
+ <return type='int' info='1 if allowed; 0 otherwise.'/>
+ <arg name='parent' type='const htmlElemDesc *' info='HTML parent element'/>
+ <arg name='elt' type='const xmlChar *' info='HTML element'/>
+ </function>
+ <function name='htmlElementStatusHere' file='HTMLparser'>
+ <info>Checks whether an HTML element may be a direct child of a parent element. and if so whether it is valid or deprecated.</info>
+ <return type='htmlStatus' info='one of HTML_VALID, HTML_DEPRECATED, HTML_INVALID'/>
+ <arg name='parent' type='const htmlElemDesc *' info='HTML parent element'/>
+ <arg name='elt' type='const htmlElemDesc *' info='HTML element'/>
+ </function>
+ <function name='htmlEncodeEntities' file='HTMLparser'>
+ <info>Take a block of UTF-8 chars in and try to convert it to an ASCII plus HTML entities block of chars out.</info>
+ <return type='int' info='0 if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed as the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.'/>
+ <arg name='out' type='unsigned char *' info='a pointer to an array of bytes to store the result'/>
+ <arg name='outlen' type='int *' info='the length of @out'/>
+ <arg name='in' type='const unsigned char *' info='a pointer to an array of UTF-8 chars'/>
+ <arg name='inlen' type='int *' info='the length of @in'/>
+ <arg name='quoteChar' type='int' info='the quote character to escape (&apos; or &quot;) or zero.'/>
+ </function>
+ <function name='htmlEntityLookup' file='HTMLparser'>
+ <info>Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed.</info>
+ <return type='const htmlEntityDesc *' info='the associated htmlEntityDescPtr if found, NULL otherwise.'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ </function>
+ <function name='htmlEntityValueLookup' file='HTMLparser'>
+ <info>Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed.</info>
+ <return type='const htmlEntityDesc *' info='the associated htmlEntityDescPtr if found, NULL otherwise.'/>
+ <arg name='value' type='unsigned int' info='the entity&apos;s unicode value'/>
+ </function>
+ <function name='htmlFreeParserCtxt' file='HTMLparser'>
+ <info>Free all the memory used by a parser context. However the parsed document in ctxt-&gt;myDoc is not freed.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ </function>
+ <function name='htmlGetMetaEncoding' file='HTMLtree'>
+ <info>Encoding definition lookup in the Meta tags</info>
+ <return type='const xmlChar *' info='the current encoding as flagged in the HTML source'/>
+ <arg name='doc' type='htmlDocPtr' info='the document'/>
+ </function>
+ <function name='htmlHandleOmittedElem' file='HTMLparser'>
+ <info>Set and return the previous value for handling HTML omitted tags.</info>
+ <return type='int' info='the last value for 0 for no handling, 1 for auto insertion.'/>
+ <arg name='val' type='int' info='int 0 or 1'/>
+ </function>
+ <function name='htmlInitAutoClose' file='parserInternals'>
+ <info>Initialize the htmlStartCloseIndex for fast lookup of closing tags names. This is not reentrant. Call xmlInitParser() once before processing in case of use in multithreaded programs.</info>
+ <return type='void'/>
+ </function>
+ <function name='htmlIsAutoClosed' file='HTMLparser'>
+ <info>The HTML DTD allows a tag to implicitly close other tags. The list is kept in htmlStartClose array. This function checks if a tag is autoclosed by one of it&apos;s child</info>
+ <return type='int' info='1 if autoclosed, 0 otherwise'/>
+ <arg name='doc' type='htmlDocPtr' info='the HTML document'/>
+ <arg name='elem' type='htmlNodePtr' info='the HTML element'/>
+ </function>
+ <function name='htmlIsBooleanAttr' file='HTMLtree'>
+ <info>Determine if a given attribute is a boolean attribute.</info>
+ <return type='int' info='false if the attribute is not boolean, true otherwise.'/>
+ <arg name='name' type='const xmlChar *' info='the name of the attribute to check'/>
+ </function>
+ <function name='htmlIsScriptAttribute' file='HTMLparser'>
+ <info>Check if an attribute is of content type Script</info>
+ <return type='int' info='1 is the attribute is a script 0 otherwise'/>
+ <arg name='name' type='const xmlChar *' info='an attribute name'/>
+ </function>
+ <function name='htmlNewDoc' file='HTMLtree'>
+ <info>Creates a new HTML document</info>
+ <return type='htmlDocPtr' info='a new document'/>
+ <arg name='URI' type='const xmlChar *' info='URI for the dtd, or NULL'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external ID of the DTD, or NULL'/>
+ </function>
+ <function name='htmlNewDocNoDtD' file='HTMLtree'>
+ <info>Creates a new HTML document without a DTD node if @URI and @ExternalID are NULL</info>
+ <return type='htmlDocPtr' info='a new document, do not initialize the DTD if not provided'/>
+ <arg name='URI' type='const xmlChar *' info='URI for the dtd, or NULL'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external ID of the DTD, or NULL'/>
+ </function>
+ <function name='htmlNodeDump' file='HTMLtree'>
+ <info>Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added.</info>
+ <return type='int' info='the number of byte written or -1 in case of error'/>
+ <arg name='buf' type='xmlBufferPtr' info='the HTML buffer output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node'/>
+ </function>
+ <function name='htmlNodeDumpFile' file='HTMLtree'>
+ <info>Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added.</info>
+ <return type='void'/>
+ <arg name='out' type='FILE *' info='the FILE pointer'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node'/>
+ </function>
+ <function name='htmlNodeDumpFileFormat' file='HTMLtree'>
+ <info>Dump an HTML node, recursive behaviour,children are printed too. TODO: if encoding == NULL try to save in the doc encoding</info>
+ <return type='int' info='the number of byte written or -1 in case of failure.'/>
+ <arg name='out' type='FILE *' info='the FILE pointer'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node'/>
+ <arg name='encoding' type='const char *' info='the document encoding'/>
+ <arg name='format' type='int' info='should formatting spaces been added'/>
+ </function>
+ <function name='htmlNodeDumpFormatOutput' file='HTMLtree'>
+ <info>Dump an HTML node, recursive behaviour,children are printed too.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlOutputBufferPtr' info='the HTML buffer output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node'/>
+ <arg name='encoding' type='const char *' info='the encoding string'/>
+ <arg name='format' type='int' info='should formatting spaces been added'/>
+ </function>
+ <function name='htmlNodeDumpOutput' file='HTMLtree'>
+ <info>Dump an HTML node, recursive behaviour,children are printed too, and formatting returns/spaces are added.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlOutputBufferPtr' info='the HTML buffer output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node'/>
+ <arg name='encoding' type='const char *' info='the encoding string'/>
+ </function>
+ <function name='htmlNodeStatus' file='HTMLparser'>
+ <info>Checks whether the tree node is valid. Experimental (the author only uses the HTML enhancements in a SAX parser)</info>
+ <return type='htmlStatus' info='for Element nodes, a return from htmlElementAllowedHere (if legacy allowed) or htmlElementStatusHere (otherwise). for Attribute nodes, a return from htmlAttrAllowed for other nodes, HTML_NA (no checks performed)'/>
+ <arg name='node' type='const htmlNodePtr' info='an htmlNodePtr in a tree'/>
+ <arg name='legacy' type='int' info='whether to allow deprecated elements (YES is faster here for Element nodes)'/>
+ </function>
+ <function name='htmlParseCharRef' file='HTMLparser'>
+ <info>parse Reference declarations [66] CharRef ::= &apos;&amp;#&apos; [0-9]+ &apos;;&apos; | &apos;&amp;#x&apos; [0-9a-fA-F]+ &apos;;&apos;</info>
+ <return type='int' info='the value parsed (as an int)'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ </function>
+ <function name='htmlParseChunk' file='HTMLparser'>
+ <info>Parse a Chunk of memory</info>
+ <return type='int' info='zero if no error, the xmlParserErrors otherwise.'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ <arg name='chunk' type='const char *' info='an char array'/>
+ <arg name='size' type='int' info='the size in byte of the chunk'/>
+ <arg name='terminate' type='int' info='last chunk indicator'/>
+ </function>
+ <function name='htmlParseDoc' file='HTMLparser'>
+ <info>parse an HTML in-memory document and build a tree.</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='cur' type='xmlChar *' info='a pointer to an array of xmlChar'/>
+ <arg name='encoding' type='const char *' info='a free form C string describing the HTML document encoding, or NULL'/>
+ </function>
+ <function name='htmlParseDocument' file='HTMLparser'>
+ <info>parse an HTML document (and build a tree if using the standard SAX interface).</info>
+ <return type='int' info='0, -1 in case of error. the parser context is augmented as a result of the parsing.'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ </function>
+ <function name='htmlParseElement' file='HTMLparser'>
+ <info>parse an HTML element, this is highly recursive [39] element ::= EmptyElemTag | STag content ETag [41] Attribute ::= Name Eq AttValue</info>
+ <return type='void'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ </function>
+ <function name='htmlParseEntityRef' file='HTMLparser'>
+ <info>parse an HTML ENTITY references [68] EntityRef ::= &apos;&amp;&apos; Name &apos;;&apos;</info>
+ <return type='const htmlEntityDesc *' info='the associated htmlEntityDescPtr if found, or NULL otherwise, if non-NULL *str will have to be freed by the caller.'/>
+ <arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
+ <arg name='str' type='const xmlChar **' info='location to store the entity name'/>
+ </function>
+ <function name='htmlParseFile' file='HTMLparser'>
+ <info>parse an HTML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='encoding' type='const char *' info='a free form C string describing the HTML document encoding, or NULL'/>
+ </function>
+ <function name='htmlReadDoc' file='HTMLparser'>
+ <info>parse an XML in-memory document and build a tree.</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='cur' type='const xmlChar *' info='a pointer to a zero terminated string'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlReadFd' file='HTMLparser'>
+ <info>parse an XML from a file descriptor and build a tree.</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='fd' type='int' info='an open file descriptor'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlReadFile' file='HTMLparser'>
+ <info>parse an XML file from the filesystem or the network.</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='filename' type='const char *' info='a file or URL'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlReadIO' file='HTMLparser'>
+ <info>parse an HTML document from I/O functions and source and build a tree.</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='ioread' type='xmlInputReadCallback' info='an I/O read function'/>
+ <arg name='ioclose' type='xmlInputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlReadMemory' file='HTMLparser'>
+ <info>parse an XML in-memory document and build a tree.</info>
+ <return type='htmlDocPtr' info='the resulting document tree'/>
+ <arg name='buffer' type='const char *' info='a pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
+ </function>
+ <function name='htmlSAXParseDoc' file='HTMLparser'>
+ <info>Parse an HTML in-memory document. If sax is not NULL, use the SAX callbacks to handle parse events. If sax is NULL, fallback to the default DOM behavior and return a tree.</info>
+ <return type='htmlDocPtr' info='the resulting document tree unless SAX is NULL or the document is not well formed.'/>
+ <arg name='cur' type='xmlChar *' info='a pointer to an array of xmlChar'/>
+ <arg name='encoding' type='const char *' info='a free form C string describing the HTML document encoding, or NULL'/>
+ <arg name='sax' type='htmlSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='userData' type='void *' info='if using SAX, this pointer will be provided on callbacks.'/>
+ </function>
+ <function name='htmlSAXParseFile' file='HTMLparser'>
+ <info>parse an HTML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</info>
+ <return type='htmlDocPtr' info='the resulting document tree unless SAX is NULL or the document is not well formed.'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='encoding' type='const char *' info='a free form C string describing the HTML document encoding, or NULL'/>
+ <arg name='sax' type='htmlSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='userData' type='void *' info='if using SAX, this pointer will be provided on callbacks.'/>
+ </function>
+ <function name='htmlSaveFile' file='HTMLtree'>
+ <info>Dump an HTML document to a file. If @filename is &quot;-&quot; the stdout file is used.</info>
+ <return type='int' info='the number of byte written or -1 in case of failure.'/>
+ <arg name='filename' type='const char *' info='the filename (or URL)'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='htmlSaveFileEnc' file='HTMLtree'>
+ <info>Dump an HTML document to a file using a given encoding and formatting returns/spaces are added.</info>
+ <return type='int' info='the number of byte written or -1 in case of failure.'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding'/>
+ </function>
+ <function name='htmlSaveFileFormat' file='HTMLtree'>
+ <info>Dump an HTML document to a file using a given encoding.</info>
+ <return type='int' info='the number of byte written or -1 in case of failure.'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding'/>
+ <arg name='format' type='int' info='should formatting spaces been added'/>
+ </function>
+ <function name='htmlSetMetaEncoding' file='HTMLtree'>
+ <info>Sets the current encoding in the Meta tags NOTE: this will not change the document content encoding, just the META flag associated.</info>
+ <return type='int' info='0 in case of success and -1 in case of error'/>
+ <arg name='doc' type='htmlDocPtr' info='the document'/>
+ <arg name='encoding' type='const xmlChar *' info='the encoding string'/>
+ </function>
+ <function name='htmlTagLookup' file='HTMLparser'>
+ <info>Lookup the HTML tag in the ElementTable</info>
+ <return type='const htmlElemDesc *' info='the related htmlElemDescPtr or NULL if not found.'/>
+ <arg name='tag' type='const xmlChar *' info='The tag name in lowercase'/>
+ </function>
+ <function name='ignorableWhitespace' file='SAX'>
+ <info>receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use characters DEPRECATED: use xmlSAX2IgnorableWhitespace()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='ch' type='const xmlChar *' info='a xmlChar string'/>
+ <arg name='len' type='int' info='the number of xmlChar'/>
+ </function>
+ <functype name='ignorableWhitespaceSAXFunc' file='parser'>
+ <info>Receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use characters.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='ch' type='const xmlChar *' info='a xmlChar string'/>
+ <arg name='len' type='int' info='the number of xmlChar'/>
+ </functype>
+ <function name='initGenericErrorDefaultFunc' file='xmlerror'>
+ <info>Set or reset (if NULL) the default handler for generic errors to the builtin error function.</info>
+ <return type='void'/>
+ <arg name='handler' type='xmlGenericErrorFunc *' info='the handler'/>
+ </function>
+ <function name='initdocbDefaultSAXHandler' file='SAX'>
+ <info>Initialize the default DocBook SAX version 1 handler DEPRECATED: use xmlSAX2InitDocbDefaultSAXHandler() for the new SAX2 blocks</info>
+ <return type='void'/>
+ <arg name='hdlr' type='xmlSAXHandlerV1 *' info='the SAX handler'/>
+ </function>
+ <function name='inithtmlDefaultSAXHandler' file='SAX'>
+ <info>Initialize the default HTML SAX version 1 handler DEPRECATED: use xmlSAX2InitHtmlDefaultSAXHandler() for the new SAX2 blocks</info>
+ <return type='void'/>
+ <arg name='hdlr' type='xmlSAXHandlerV1 *' info='the SAX handler'/>
+ </function>
+ <function name='initxmlDefaultSAXHandler' file='SAX'>
+ <info>Initialize the default XML SAX version 1 handler DEPRECATED: use xmlSAX2InitDefaultSAXHandler() for the new SAX2 blocks</info>
+ <return type='void'/>
+ <arg name='hdlr' type='xmlSAXHandlerV1 *' info='the SAX handler'/>
+ <arg name='warning' type='int' info='flag if non-zero sets the handler warning procedure'/>
+ </function>
+ <function name='inputPop' file='parserInternals'>
+ <info>Pops the top parser input from the input stack</info>
+ <return type='xmlParserInputPtr' info='the input just removed'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='inputPush' file='parserInternals'>
+ <info>Pushes a new parser input on top of the input stack</info>
+ <return type='int' info='0 in case of error, the index in the stack otherwise'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='value' type='xmlParserInputPtr' info='the parser input'/>
+ </function>
+ <function name='internalSubset' file='SAX'>
+ <info>Callback on internal subset declaration. DEPRECATED: use xmlSAX2InternalSubset()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the root element name'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external ID'/>
+ <arg name='SystemID' type='const xmlChar *' info='the SYSTEM ID (e.g. filename or URL)'/>
+ </function>
+ <functype name='internalSubsetSAXFunc' file='parser'>
+ <info>Callback on internal subset declaration.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the root element name'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external ID'/>
+ <arg name='SystemID' type='const xmlChar *' info='the SYSTEM ID (e.g. filename or URL)'/>
+ </functype>
+ <function name='isStandalone' file='SAX'>
+ <info>Is this document tagged standalone ? DEPRECATED: use xmlSAX2IsStandalone()</info>
+ <return type='int' info='1 if true'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <functype name='isStandaloneSAXFunc' file='parser'>
+ <info>Is this document tagged standalone?</info>
+ <return type='int' info='1 if true'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </functype>
+ <function name='isolat1ToUTF8' file='encoding'>
+ <info>Take a block of ISO Latin 1 chars in and try to convert it to an UTF-8 block of chars out.</info>
+ <return type='int' info='0 if success, or -1 otherwise The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets consumed.'/>
+ <arg name='out' type='unsigned char *' info='a pointer to an array of bytes to store the result'/>
+ <arg name='outlen' type='int *' info='the length of @out'/>
+ <arg name='in' type='const unsigned char *' info='a pointer to an array of ISO Latin 1 chars'/>
+ <arg name='inlen' type='int *' info='the length of @in'/>
+ </function>
+ <function name='namePop' file='parserInternals'>
+ <info>Pops the top element name from the name stack</info>
+ <return type='const xmlChar *' info='the name just removed'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='namePush' file='parserInternals'>
+ <info>Pushes a new element name on top of the name stack</info>
+ <return type='int' info='-1 in case of error, the index in the stack otherwise'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='value' type='const xmlChar *' info='the element name'/>
+ </function>
+ <function name='namespaceDecl' file='SAX'>
+ <info>A namespace has been parsed. DEPRECATED</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='href' type='const xmlChar *' info='the namespace associated URN'/>
+ <arg name='prefix' type='const xmlChar *' info='the namespace prefix'/>
+ </function>
+ <function name='nodePop' file='parserInternals'>
+ <info>Pops the top element node from the node stack</info>
+ <return type='xmlNodePtr' info='the node just removed'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='nodePush' file='parserInternals'>
+ <info>Pushes a new element node on top of the node stack</info>
+ <return type='int' info='0 in case of error, the index in the stack otherwise'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='value' type='xmlNodePtr' info='the element node'/>
+ </function>
+ <function name='notationDecl' file='SAX'>
+ <info>What to do when a notation declaration has been parsed. DEPRECATED: use xmlSAX2NotationDecl()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The name of the notation'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ </function>
+ <functype name='notationDeclSAXFunc' file='parser'>
+ <info>What to do when a notation declaration has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The name of the notation'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ </functype>
+ <function name='processingInstruction' file='SAX'>
+ <info>A processing instruction has been parsed. DEPRECATED: use xmlSAX2ProcessingInstruction()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='target' type='const xmlChar *' info='the target name'/>
+ <arg name='data' type='const xmlChar *' info='the PI data&apos;s'/>
+ </function>
+ <functype name='processingInstructionSAXFunc' file='parser'>
+ <info>A processing instruction has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='target' type='const xmlChar *' info='the target name'/>
+ <arg name='data' type='const xmlChar *' info='the PI data&apos;s'/>
+ </functype>
+ <function name='reference' file='SAX'>
+ <info>called when an entity reference is detected. DEPRECATED: use xmlSAX2Reference()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The entity name'/>
+ </function>
+ <functype name='referenceSAXFunc' file='parser'>
+ <info>Called when an entity reference is detected.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The entity name'/>
+ </functype>
+ <function name='resolveEntity' file='SAX'>
+ <info>The entity loader, to control the loading of external entities, the application can either: - override this resolveEntity() callback in the SAX block - or better use the xmlSetExternalEntityLoader() function to set up it&apos;s own entity resolution routine DEPRECATED: use xmlSAX2ResolveEntity()</info>
+ <return type='xmlParserInputPtr' info='the xmlParserInputPtr if inlined or NULL for DOM behaviour.'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ </function>
+ <functype name='resolveEntitySAXFunc' file='parser'>
+ <info>Callback: The entity loader, to control the loading of external entities, the application can either: - override this resolveEntity() callback in the SAX block - or better use the xmlSetExternalEntityLoader() function to set up it&apos;s own entity resolution routine</info>
+ <return type='xmlParserInputPtr' info='the xmlParserInputPtr if inlined or NULL for DOM behaviour.'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ </functype>
+ <function name='setDocumentLocator' file='SAX'>
+ <info>Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case. DEPRECATED</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='loc' type='xmlSAXLocatorPtr' info='A SAX Locator'/>
+ </function>
+ <functype name='setDocumentLocatorSAXFunc' file='parser'>
+ <info>Receive the document locator at startup, actually xmlDefaultSAXLocator. Everything is available on the context, so this is useless in our case.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='loc' type='xmlSAXLocatorPtr' info='A SAX Locator'/>
+ </functype>
+ <function name='setNamespace' file='SAX'>
+ <info>Set the current element namespace. DEPRECATED</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the namespace prefix'/>
+ </function>
+ <function name='startDocument' file='SAX'>
+ <info>called when the document start being processed. DEPRECATED: use xmlSAX2StartDocument()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <functype name='startDocumentSAXFunc' file='parser'>
+ <info>Called when the document start being processed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </functype>
+ <function name='startElement' file='SAX'>
+ <info>called when an opening tag has been processed. DEPRECATED: use xmlSAX2StartElement()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='fullname' type='const xmlChar *' info='The element name, including namespace prefix'/>
+ <arg name='atts' type='const xmlChar **' info='An array of name/value attributes pairs, NULL terminated'/>
+ </function>
+ <functype name='startElementNsSAX2Func' file='parser'>
+ <info>SAX2 callback when an element start has been detected by the parser. It provides the namespace informations for the element, as well as the new namespace declarations on the element.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='localname' type='const xmlChar *' info='the local name of the element'/>
+ <arg name='prefix' type='const xmlChar *' info='the element namespace prefix if available'/>
+ <arg name='URI' type='const xmlChar *' info='the element namespace name if available'/>
+ <arg name='nb_namespaces' type='int' info='number of namespace definitions on that node'/>
+ <arg name='namespaces' type='const xmlChar **' info='pointer to the array of prefix/URI pairs namespace definitions'/>
+ <arg name='nb_attributes' type='int' info='the number of attributes on that node'/>
+ <arg name='nb_defaulted' type='int' info='the number of defaulted attributes. The defaulted ones are at the end of the array'/>
+ <arg name='attributes' type='const xmlChar **' info='pointer to the array of (localname/prefix/URI/value/end) attribute values.'/>
+ </functype>
+ <functype name='startElementSAXFunc' file='parser'>
+ <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)'/>
+ <arg name='name' type='const xmlChar *' info='The element name, including namespace prefix'/>
+ <arg name='atts' type='const xmlChar **' info='An array of name/value attributes pairs, NULL terminated'/>
+ </functype>
+ <function name='unparsedEntityDecl' file='SAX'>
+ <info>What to do when an unparsed entity declaration is parsed DEPRECATED: use xmlSAX2UnparsedEntityDecl()</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The name of the entity'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ <arg name='notationName' type='const xmlChar *' info='the name of the notation'/>
+ </function>
+ <functype name='unparsedEntityDeclSAXFunc' file='parser'>
+ <info>What to do when an unparsed entity declaration is parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The name of the entity'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ <arg name='notationName' type='const xmlChar *' info='the name of the notation'/>
+ </functype>
+ <function name='valuePop' file='xpathInternals'>
+ <info>Pops the top XPath object from the value stack</info>
+ <return type='xmlXPathObjectPtr' info='the XPath object just removed'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='an XPath evaluation context'/>
+ </function>
+ <function name='valuePush' file='xpathInternals'>
+ <info>Pushes a new XPath object on top of the value stack</info>
+ <return type='int' info='the number of items on the value stack'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='an XPath evaluation context'/>
+ <arg name='value' type='xmlXPathObjectPtr' info='the XPath object'/>
+ </function>
+ <functype name='warningSAXFunc' file='parser'>
+ <info>Display and format a warning messages, callback.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an XML parser context'/>
+ <arg name='msg' type='const char *' info='the message to display/transmit'/>
+ <arg name='...' type='...' info='extra parameters for the message display'/>
+ </functype>
+ <functype name='xlinkExtendedLinkFunk' file='xlink'>
+ <info>This is the prototype for a extended link detection callback.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='user data pointer'/>
+ <arg name='node' type='xmlNodePtr' info='the node carrying the link'/>
+ <arg name='nbLocators' type='int' info='the number of locators detected on the link'/>
+ <arg name='hrefs' type='const xlinkHRef *' info='pointer to the array of locator hrefs'/>
+ <arg name='roles' type='const xlinkRole *' info='pointer to the array of locator roles'/>
+ <arg name='nbArcs' type='int' info='the number of arcs detected on the link'/>
+ <arg name='from' type='const xlinkRole *' info='pointer to the array of source roles found on the arcs'/>
+ <arg name='to' type='const xlinkRole *' info='pointer to the array of target roles found on the arcs'/>
+ <arg name='show' type='xlinkShow *' info='array of values for the show attributes found on the arcs'/>
+ <arg name='actuate' type='xlinkActuate *' info='array of values for the actuate attributes found on the arcs'/>
+ <arg name='nbTitles' type='int' info='the number of titles detected on the link'/>
+ <arg name='titles' type='const xlinkTitle *' info=''/>
+ <arg name='langs' type='const xmlChar **' info='array of xml:lang values for the titles'/>
+ </functype>
+ <functype name='xlinkExtendedLinkSetFunk' file='xlink'>
+ <info>This is the prototype for a extended link set detection callback.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='user data pointer'/>
+ <arg name='node' type='xmlNodePtr' info='the node carrying the link'/>
+ <arg name='nbLocators' type='int' info='the number of locators detected on the link'/>
+ <arg name='hrefs' type='const xlinkHRef *' info='pointer to the array of locator hrefs'/>
+ <arg name='roles' type='const xlinkRole *' info='pointer to the array of locator roles'/>
+ <arg name='nbTitles' type='int' info='the number of titles detected on the link'/>
+ <arg name='titles' type='const xlinkTitle *' info=''/>
+ <arg name='langs' type='const xmlChar **' info='array of xml:lang values for the titles'/>
+ </functype>
+ <function name='xlinkGetDefaultDetect' file='xlink'>
+ <info>Get the default xlink detection routine</info>
+ <return type='xlinkNodeDetectFunc' info='the current function or NULL;'/>
+ </function>
+ <function name='xlinkGetDefaultHandler' file='xlink'>
+ <info>Get the default xlink handler.</info>
+ <return type='xlinkHandlerPtr' info='the current xlinkHandlerPtr value.'/>
+ </function>
+ <function name='xlinkIsLink' file='xlink'>
+ <info>Check whether the given node carries the attributes needed to be a link element (or is one of the linking elements issued from the (X)HTML DtDs). This routine don&apos;t try to do full checking of the link validity but tries to detect and return the appropriate link type.</info>
+ <return type='xlinkType' info='the xlinkType of the node (XLINK_TYPE_NONE if there is no link detected.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document containing the node'/>
+ <arg name='node' type='xmlNodePtr' info='the node pointer itself'/>
+ </function>
+ <functype name='xlinkNodeDetectFunc' file='xlink'>
+ <info>This is the prototype for the link detection routine. It calls the default link detection callbacks upon link detection.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='user data pointer'/>
+ <arg name='node' type='xmlNodePtr' info='the node to check'/>
+ </functype>
+ <function name='xlinkSetDefaultDetect' file='xlink'>
+ <info>Set the default xlink detection routine</info>
+ <return type='void'/>
+ <arg name='func' type='xlinkNodeDetectFunc' info='pointer to the new detection routine.'/>
+ </function>
+ <function name='xlinkSetDefaultHandler' file='xlink'>
+ <info>Set the default xlink handlers</info>
+ <return type='void'/>
+ <arg name='handler' type='xlinkHandlerPtr' info='the new value for the xlink handler block'/>
+ </function>
+ <functype name='xlinkSimpleLinkFunk' file='xlink'>
+ <info>This is the prototype for a simple link detection callback.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='user data pointer'/>
+ <arg name='node' type='xmlNodePtr' info='the node carrying the link'/>
+ <arg name='href' type='const xlinkHRef' info='the target of the link'/>
+ <arg name='role' type='const xlinkRole' info='the role string'/>
+ <arg name='title' type='const xlinkTitle' info='the link title'/>
+ </functype>
+ <function name='xmlACatalogAdd' file='catalog'>
+ <info>Add an entry in the catalog, it may overwrite existing but different entries.</info>
+ <return type='int' info='0 if successful, -1 otherwise'/>
+ <arg name='catal' type='xmlCatalogPtr' info='a Catalog'/>
+ <arg name='type' type='const xmlChar *' info='the type of record to add to the catalog'/>
+ <arg name='orig' type='const xmlChar *' info='the system, public or prefix to match'/>
+ <arg name='replace' type='const xmlChar *' info='the replacement value for the match'/>
+ </function>
+ <function name='xmlACatalogDump' file='catalog'>
+ <info>Free up all the memory associated with catalogs</info>
+ <return type='void'/>
+ <arg name='catal' type='xmlCatalogPtr' info='a Catalog'/>
+ <arg name='out' type='FILE *' info='the file.'/>
+ </function>
+ <function name='xmlACatalogRemove' file='catalog'>
+ <info>Remove an entry from the catalog</info>
+ <return type='int' info='the number of entries removed if successful, -1 otherwise'/>
+ <arg name='catal' type='xmlCatalogPtr' info='a Catalog'/>
+ <arg name='value' type='const xmlChar *' info='the value to remove'/>
+ </function>
+ <function name='xmlACatalogResolve' file='catalog'>
+ <info>Do a complete resolution lookup of an External Identifier</info>
+ <return type='xmlChar *' info='the URI of the resource or NULL if not found, it must be freed by the caller.'/>
+ <arg name='catal' type='xmlCatalogPtr' info='a Catalog'/>
+ <arg name='pubID' type='const xmlChar *' info='the public ID string'/>
+ <arg name='sysID' type='const xmlChar *' info='the system ID string'/>
+ </function>
+ <function name='xmlACatalogResolvePublic' file='catalog'>
+ <info>Try to lookup the catalog local reference associated to a public ID in that catalog</info>
+ <return type='xmlChar *' info='the local resource if found or NULL otherwise, the value returned must be freed by the caller.'/>
+ <arg name='catal' type='xmlCatalogPtr' info='a Catalog'/>
+ <arg name='pubID' type='const xmlChar *' info='the public ID string'/>
+ </function>
+ <function name='xmlACatalogResolveSystem' file='catalog'>
+ <info>Try to lookup the catalog resource for a system ID</info>
+ <return type='xmlChar *' info='the resource if found or NULL otherwise, the value returned must be freed by the caller.'/>
+ <arg name='catal' type='xmlCatalogPtr' info='a Catalog'/>
+ <arg name='sysID' type='const xmlChar *' info='the system ID string'/>
+ </function>
+ <function name='xmlACatalogResolveURI' file='catalog'>
+ <info>Do a complete resolution lookup of an URI</info>
+ <return type='xmlChar *' info='the URI of the resource or NULL if not found, it must be freed by the caller.'/>
+ <arg name='catal' type='xmlCatalogPtr' info='a Catalog'/>
+ <arg name='URI' type='const xmlChar *' info='the URI'/>
+ </function>
+ <function name='xmlAddAttributeDecl' file='valid'>
+ <info>Register a new attribute declaration Note that @tree becomes the ownership of the DTD</info>
+ <return type='xmlAttributePtr' info='NULL if not new, otherwise the attribute decl'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='dtd' type='xmlDtdPtr' info='pointer to the DTD'/>
+ <arg name='elem' type='const xmlChar *' info='the element name'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ <arg name='ns' type='const xmlChar *' info='the attribute namespace prefix'/>
+ <arg name='type' type='xmlAttributeType' info='the attribute type'/>
+ <arg name='def' type='xmlAttributeDefault' info='the attribute default type'/>
+ <arg name='defaultValue' type='const xmlChar *' info='the attribute default value'/>
+ <arg name='tree' type='xmlEnumerationPtr' info='if it&apos;s an enumeration, the associated list'/>
+ </function>
+ <function name='xmlAddChild' file='tree'>
+ <info>Add a new node to @parent, at the end of the child (or property) list merging adjacent TEXT nodes (in which case @cur is freed) If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.</info>
+ <return type='xmlNodePtr' info='the child or NULL in case of error.'/>
+ <arg name='parent' type='xmlNodePtr' info='the parent node'/>
+ <arg name='cur' type='xmlNodePtr' info='the child node'/>
+ </function>
+ <function name='xmlAddChildList' file='tree'>
+ <info>Add a list of node at the end of the child list of the parent merging adjacent TEXT nodes (@cur may be freed)</info>
+ <return type='xmlNodePtr' info='the last child or NULL in case of error.'/>
+ <arg name='parent' type='xmlNodePtr' info='the parent node'/>
+ <arg name='cur' type='xmlNodePtr' info='the first node in the list'/>
+ </function>
+ <function name='xmlAddDocEntity' file='entities'>
+ <info>Register a new entity for this document.</info>
+ <return type='xmlEntityPtr' info='a pointer to the entity or NULL in case of error'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ <arg name='type' type='int' info='the entity type XML_xxx_yyy_ENTITY'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the entity external ID if available'/>
+ <arg name='SystemID' type='const xmlChar *' info='the entity system ID if available'/>
+ <arg name='content' type='const xmlChar *' info='the entity content'/>
+ </function>
+ <function name='xmlAddDtdEntity' file='entities'>
+ <info>Register a new entity for this document DTD external subset.</info>
+ <return type='xmlEntityPtr' info='a pointer to the entity or NULL in case of error'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ <arg name='type' type='int' info='the entity type XML_xxx_yyy_ENTITY'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the entity external ID if available'/>
+ <arg name='SystemID' type='const xmlChar *' info='the entity system ID if available'/>
+ <arg name='content' type='const xmlChar *' info='the entity content'/>
+ </function>
+ <function name='xmlAddElementDecl' file='valid'>
+ <info>Register a new element declaration</info>
+ <return type='xmlElementPtr' info='NULL if not, otherwise the entity'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='dtd' type='xmlDtdPtr' info='pointer to the DTD'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ <arg name='type' type='xmlElementTypeVal' info='the element type'/>
+ <arg name='content' type='xmlElementContentPtr' info='the element content tree or NULL'/>
+ </function>
+ <function name='xmlAddEncodingAlias' file='encoding'>
+ <info>Registers an alias @alias for an encoding named @name. Existing alias will be overwritten.</info>
+ <return type='int' info='0 in case of success, -1 in case of error'/>
+ <arg name='name' type='const char *' info='the encoding name as parsed, in UTF-8 format (ASCII actually)'/>
+ <arg name='alias' type='const char *' info='the alias name as parsed, in UTF-8 format (ASCII actually)'/>
+ </function>
+ <function name='xmlAddID' file='valid'>
+ <info>Register a new id declaration</info>
+ <return type='xmlIDPtr' info='NULL if not, otherwise the new xmlIDPtr'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='pointer to the document'/>
+ <arg name='value' type='const xmlChar *' info='the value name'/>
+ <arg name='attr' type='xmlAttrPtr' info='the attribute holding the ID'/>
+ </function>
+ <function name='xmlAddNextSibling' file='tree'>
+ <info>Add a new node @elem as the next sibling of @cur If the new node was already inserted in a document it is first unlinked from its existing context. As a result of text merging @elem may be freed. If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.</info>
+ <return type='xmlNodePtr' info='the new node or NULL in case of error.'/>
+ <arg name='cur' type='xmlNodePtr' info='the child node'/>
+ <arg name='elem' type='xmlNodePtr' info='the new node'/>
+ </function>
+ <function name='xmlAddNotationDecl' file='valid'>
+ <info>Register a new notation declaration</info>
+ <return type='xmlNotationPtr' info='NULL if not, otherwise the entity'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='dtd' type='xmlDtdPtr' info='pointer to the DTD'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ <arg name='PublicID' type='const xmlChar *' info='the public identifier or NULL'/>
+ <arg name='SystemID' type='const xmlChar *' info='the system identifier or NULL'/>
+ </function>
+ <function name='xmlAddPrevSibling' file='tree'>
+ <info>Add a new node @elem as the previous sibling of @cur merging adjacent TEXT nodes (@elem may be freed) If the new node was already inserted in a document it is first unlinked from its existing context. If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.</info>
+ <return type='xmlNodePtr' info='the new node or NULL in case of error.'/>
+ <arg name='cur' type='xmlNodePtr' info='the child node'/>
+ <arg name='elem' type='xmlNodePtr' info='the new node'/>
+ </function>
+ <function name='xmlAddRef' file='valid'>
+ <info>Register a new ref declaration</info>
+ <return type='xmlRefPtr' info='NULL if not, otherwise the new xmlRefPtr'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='pointer to the document'/>
+ <arg name='value' type='const xmlChar *' info='the value name'/>
+ <arg name='attr' type='xmlAttrPtr' info='the attribute holding the Ref'/>
+ </function>
+ <function name='xmlAddSibling' file='tree'>
+ <info>Add a new element @elem to the list of siblings of @cur merging adjacent TEXT nodes (@elem may be freed) If the new element was already inserted in a document it is first unlinked from its existing context.</info>
+ <return type='xmlNodePtr' info='the new element or NULL in case of error.'/>
+ <arg name='cur' type='xmlNodePtr' info='the child node'/>
+ <arg name='elem' type='xmlNodePtr' info='the new node'/>
+ </function>
+ <function name='xmlAllocOutputBuffer' file='xmlIO'>
+ <info>Create a buffered parser output</info>
+ <return type='xmlOutputBufferPtr' info='the new parser output or NULL'/>
+ <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the encoding converter or NULL'/>
+ </function>
+ <function name='xmlAllocParserInputBuffer' file='xmlIO'>
+ <info>Create a buffered parser input for progressive parsing</info>
+ <return type='xmlParserInputBufferPtr' info='the new parser input or NULL'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlAttrSerializeTxtContent' file='tree'>
+ <info>Serialize text attribute values to an xml simple buffer</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='attr' type='xmlAttrPtr' info='the attribute node'/>
+ <arg name='string' type='const xmlChar *' info='the text content'/>
+ </function>
+ <function name='xmlAutomataCompile' file='xmlautomata'>
+ <info>Compile the automata into a Reg Exp ready for being executed. The automata should be free after this point.</info>
+ <return type='xmlRegexpPtr' info='the compiled regexp or NULL in case of error'/>
+ <arg name='am' type='xmlAutomataPtr' info='an automata'/>
+ </function>
+ <function name='xmlAutomataGetInitState' file='xmlautomata'>
+ <info>Initial state lookup</info>
+ <return type='xmlAutomataStatePtr' info='the initial state of the automata'/>
+ <arg name='am' type='xmlAutomataPtr' info='an automata'/>
+ </function>
+ <function name='xmlAutomataIsDeterminist' file='xmlautomata'>
+ <info>Checks if an automata is determinist.</info>
+ <return type='int' info='1 if true, 0 if not, and -1 in case of error'/>
+ <arg name='am' type='xmlAutomataPtr' info='an automata'/>
+ </function>
+ <function name='xmlAutomataNewAllTrans' file='xmlautomata'>
+ <info>If @to is NULL, this create first a new target state in the automata and then adds a an ALL transition from the @from state to the target state. That transition is an epsilon transition allowed only when all transitions from the @from node have been activated.</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='lax' type='int' info='allow to transition if not all all transitions have been activated'/>
+ </function>
+ <function name='xmlAutomataNewCountTrans' file='xmlautomata'>
+ <info>If @to is NULL, this create 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</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 input string associated to that transition'/>
+ <arg name='min' type='int' info='the minimum successive occurences of token'/>
+ <arg name='max' type='int' info='the maximum successive occurences of token'/>
+ <arg name='data' type='void *' info='data associated to the transition'/>
+ </function>
+ <function name='xmlAutomataNewCountedTrans' file='xmlautomata'>
+ <info>If @to is NULL, this create first a new target state in the automata and then adds an epsilon transition from the @from state to the target state which will increment the counter provided</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='counter' type='int' info='the counter associated to that transition'/>
+ </function>
+ <function name='xmlAutomataNewCounter' file='xmlautomata'>
+ <info>Create a new counter</info>
+ <return type='int' info='the counter number or -1 in case of error'/>
+ <arg name='am' type='xmlAutomataPtr' info='an automata'/>
+ <arg name='min' type='int' info='the minimal value on the counter'/>
+ <arg name='max' type='int' info='the maximal value on the counter'/>
+ </function>
+ <function name='xmlAutomataNewCounterTrans' file='xmlautomata'>
+ <info>If @to is NULL, this create 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.</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='counter' type='int' info='the counter associated to that transition'/>
+ </function>
+ <function name='xmlAutomataNewEpsilon' file='xmlautomata'>
+ <info>If @to is NULL, this create first a new target state in the automata and then adds a an epsilon transition from the @from state to the target state</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'/>
+ </function>
+ <function name='xmlAutomataNewOnceTrans' file='xmlautomata'>
+ <info>If @to is NULL, this create 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 transistion can only be crossed once.</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 input string associated to that transition'/>
+ <arg name='min' type='int' info='the minimum successive occurences of token'/>
+ <arg name='max' type='int' info='the maximum successive occurences of token'/>
+ <arg name='data' type='void *' info='data associated to the transition'/>
+ </function>
+ <function name='xmlAutomataNewState' file='xmlautomata'>
+ <info>Create a new disconnected state in the automata</info>
+ <return type='xmlAutomataStatePtr' info='the new state or NULL in case of error'/>
+ <arg name='am' type='xmlAutomataPtr' info='an automata'/>
+ </function>
+ <function name='xmlAutomataNewTransition' file='xmlautomata'>
+ <info>If @to is NULL, this create first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token</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 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='xmlAutomataNewTransition2' file='xmlautomata'>
+ <info>If @to is NULL, this create first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token</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='xmlAutomataSetFinalState' file='xmlautomata'>
+ <info>Makes that state a final state</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='am' type='xmlAutomataPtr' info='an automata'/>
+ <arg name='state' type='xmlAutomataStatePtr' info='a state in this automata'/>
+ </function>
+ <function name='xmlBoolToText' file='debugXML'>
+ <info>Convenient way to turn bool into text</info>
+ <return type='const char *' info='a pointer to either &quot;True&quot; or &quot;False&quot;'/>
+ <arg name='boolval' type='int' info='a bool to turn into text'/>
+ </function>
+ <function name='xmlBufferAdd' file='tree'>
+ <info>Add a string range to an XML buffer. if len == -1, the length of str is recomputed.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer to dump'/>
+ <arg name='str' type='const xmlChar *' info='the #xmlChar string'/>
+ <arg name='len' type='int' info='the number of #xmlChar to add'/>
+ </function>
+ <function name='xmlBufferAddHead' file='tree'>
+ <info>Add a string range to the beginning of an XML buffer. if len == -1, the length of @str is recomputed.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer'/>
+ <arg name='str' type='const xmlChar *' info='the #xmlChar string'/>
+ <arg name='len' type='int' info='the number of #xmlChar to add'/>
+ </function>
+ <function name='xmlBufferCCat' file='tree'>
+ <info>Append a zero terminated C string to an XML buffer.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer to dump'/>
+ <arg name='str' type='const char *' info='the C char string'/>
+ </function>
+ <function name='xmlBufferCat' file='tree'>
+ <info>Append a zero terminated string to an XML buffer.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer to dump'/>
+ <arg name='str' type='const xmlChar *' info='the #xmlChar string'/>
+ </function>
+ <function name='xmlBufferContent' file='tree'>
+ <info>Function to extract the content of a buffer</info>
+ <return type='const xmlChar *' info='the internal content'/>
+ <arg name='buf' type='const xmlBufferPtr' info='the buffer'/>
+ </function>
+ <function name='xmlBufferCreate' file='tree'>
+ <info>routine to create an XML buffer.</info>
+ <return type='xmlBufferPtr' info='the new structure.'/>
+ </function>
+ <function name='xmlBufferCreateSize' file='tree'>
+ <info>routine to create an XML buffer.</info>
+ <return type='xmlBufferPtr' info='the new structure.'/>
+ <arg name='size' type='size_t' info='initial size of buffer'/>
+ </function>
+ <function name='xmlBufferCreateStatic' file='tree'>
+ <info>routine to create an XML buffer from an immutable memory area. The area won&apos;t be modified nor copied, and is expected to be present until the end of the buffer lifetime.</info>
+ <return type='xmlBufferPtr' info='the new structure.'/>
+ <arg name='mem' type='void *' info='the memory area'/>
+ <arg name='size' type='size_t' info='the size in byte'/>
+ </function>
+ <function name='xmlBufferDump' file='tree'>
+ <info>Dumps an XML buffer to a FILE *.</info>
+ <return type='int' info='the number of #xmlChar written'/>
+ <arg name='file' type='FILE *' info='the file output'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer to dump'/>
+ </function>
+ <function name='xmlBufferEmpty' file='tree'>
+ <info>empty a buffer.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer'/>
+ </function>
+ <function name='xmlBufferFree' file='tree'>
+ <info>Frees an XML buffer. It frees both the content and the structure which encapsulate it.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer to free'/>
+ </function>
+ <function name='xmlBufferGrow' file='tree'>
+ <info>Grow the available space of an XML buffer.</info>
+ <return type='int' info='the new available space or -1 in case of error'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer'/>
+ <arg name='len' type='unsigned int' info='the minimum free size to allocate'/>
+ </function>
+ <function name='xmlBufferLength' file='tree'>
+ <info>Function to get the length of a buffer</info>
+ <return type='int' info='the length of data in the internal content'/>
+ <arg name='buf' type='const xmlBufferPtr' info='the buffer'/>
+ </function>
+ <function name='xmlBufferResize' file='tree'>
+ <info>Resize a buffer to accommodate minimum size of @size.</info>
+ <return type='int' info='0 in case of problems, 1 otherwise'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer to resize'/>
+ <arg name='size' type='unsigned int' info='the desired size'/>
+ </function>
+ <function name='xmlBufferSetAllocationScheme' file='tree'>
+ <info>Sets the allocation scheme for this buffer</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer to tune'/>
+ <arg name='scheme' type='xmlBufferAllocationScheme' info='allocation scheme to use'/>
+ </function>
+ <function name='xmlBufferShrink' file='tree'>
+ <info>Remove the beginning of an XML buffer.</info>
+ <return type='int' info='the number of #xmlChar removed, or -1 in case of failure.'/>
+ <arg name='buf' type='xmlBufferPtr' info='the buffer to dump'/>
+ <arg name='len' type='unsigned int' info='the number of xmlChar to remove'/>
+ </function>
+ <function name='xmlBufferWriteCHAR' file='tree'>
+ <info>routine which manages and grows an output buffer. This one adds xmlChars at the end of the buffer.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer'/>
+ <arg name='string' type='const xmlChar *' info='the string to add'/>
+ </function>
+ <function name='xmlBufferWriteChar' file='tree'>
+ <info>routine which manage and grows an output buffer. This one add C chars at the end of the array.</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='string' type='const char *' info='the string to add'/>
+ </function>
+ <function name='xmlBufferWriteQuotedString' file='tree'>
+ <info>routine which manage and grows an output buffer. This one writes a quoted or double quoted #xmlChar string, checking first if it holds quote or double-quotes internally</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='string' type='const xmlChar *' info='the string to add'/>
+ </function>
+ <function name='xmlBuildQName' file='tree'>
+ <info>Builds the QName @prefix:@ncname in @memory if there is enough space and prefix is not NULL nor empty, otherwise allocate a new string. If prefix is NULL or empty it returns ncname.</info>
+ <return type='xmlChar *' info='the new string which must be freed by the caller if different from @memory and @ncname or NULL in case of error'/>
+ <arg name='ncname' type='const xmlChar *' info='the Name'/>
+ <arg name='prefix' type='const xmlChar *' info='the prefix'/>
+ <arg name='memory' type='xmlChar *' info='preallocated memory'/>
+ <arg name='len' type='int' info='preallocated memory length'/>
+ </function>
+ <function name='xmlBuildURI' file='uri'>
+ <info>Computes he final URI of the reference done by checking that the given URI is valid, and building the final URI using the base URI. This is processed according to section 5.2 of the RFC 2396 5.2. Resolving Relative References to Absolute Form</info>
+ <return type='xmlChar *' info='a new URI string (to be freed by the caller) or NULL in case of error.'/>
+ <arg name='URI' type='const xmlChar *' info='the URI instance found in the document'/>
+ <arg name='base' type='const xmlChar *' info='the base value'/>
+ </function>
+ <function name='xmlByteConsumed' file='parser'>
+ <info>This function provides the current index of the parser relative to the start of the current entity. This function is computed in bytes from the beginning starting at zero and finishing at the size in byte of the file if parsing a file. The function is of constant cost if the input is UTF-8 but can be costly if run on non-UTF-8 input.</info>
+ <return type='long' info='the index in bytes from the beginning of the entity or -1 in case the index could not be computed.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlC14NDocDumpMemory' file='c14n'>
+ <info>Dumps the canonized image of given XML document into memory. For details see &quot;Canonical XML&quot; (http://www.w3.org/TR/xml-c14n) or &quot;Exclusive XML Canonicalization&quot; (http://www.w3.org/TR/xml-exc-c14n)</info>
+ <return type='int' info='the number of bytes written on success or a negative value on fail'/>
+ <arg name='doc' type='xmlDocPtr' info='the XML document for canonization'/>
+ <arg name='nodes' type='xmlNodeSetPtr' info='the nodes set to be included in the canonized image or NULL if all document nodes should be included'/>
+ <arg name='exclusive' type='int' info='the exclusive flag (0 - non-exclusive canonicalization; otherwise - exclusive canonicalization)'/>
+ <arg name='inclusive_ns_prefixes' type='xmlChar **' info='the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise)'/>
+ <arg name='with_comments' type='int' info='include comments in the result (!=0) or not (==0)'/>
+ <arg name='doc_txt_ptr' type='xmlChar **' info='the memory pointer for allocated canonical XML text; the caller of this functions is responsible for calling xmlFree() to free allocated memory'/>
+ </function>
+ <function name='xmlC14NDocSave' file='c14n'>
+ <info>Dumps the canonized image of given XML document into the file. For details see &quot;Canonical XML&quot; (http://www.w3.org/TR/xml-c14n) or &quot;Exclusive XML Canonicalization&quot; (http://www.w3.org/TR/xml-exc-c14n)</info>
+ <return type='int' info='the number of bytes written success or a negative value on fail'/>
+ <arg name='doc' type='xmlDocPtr' info='the XML document for canonization'/>
+ <arg name='nodes' type='xmlNodeSetPtr' info='the nodes set to be included in the canonized image or NULL if all document nodes should be included'/>
+ <arg name='exclusive' type='int' info='the exclusive flag (0 - non-exclusive canonicalization; otherwise - exclusive canonicalization)'/>
+ <arg name='inclusive_ns_prefixes' type='xmlChar **' info='the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise)'/>
+ <arg name='with_comments' type='int' info='include comments in the result (!=0) or not (==0)'/>
+ <arg name='filename' type='const char *' info='the filename to store canonical XML image'/>
+ <arg name='compression' type='int' info='the compression level (zlib requred): -1 - libxml default, 0 - uncompressed, &gt;0 - compression level'/>
+ </function>
+ <function name='xmlC14NDocSaveTo' file='c14n'>
+ <info>Dumps the canonized image of given XML document into the provided buffer. For details see &quot;Canonical XML&quot; (http://www.w3.org/TR/xml-c14n) or &quot;Exclusive XML Canonicalization&quot; (http://www.w3.org/TR/xml-exc-c14n)</info>
+ <return type='int' info='non-negative value on success or a negative value on fail'/>
+ <arg name='doc' type='xmlDocPtr' info='the XML document for canonization'/>
+ <arg name='nodes' type='xmlNodeSetPtr' info='the nodes set to be included in the canonized image or NULL if all document nodes should be included'/>
+ <arg name='exclusive' type='int' info='the exclusive flag (0 - non-exclusive canonicalization; otherwise - exclusive canonicalization)'/>
+ <arg name='inclusive_ns_prefixes' type='xmlChar **' info='the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise)'/>
+ <arg name='with_comments' type='int' info='include comments in the result (!=0) or not (==0)'/>
+ <arg name='buf' type='xmlOutputBufferPtr' info='the output buffer to store canonical XML; this buffer MUST have encoder==NULL because C14N requires UTF-8 output'/>
+ </function>
+ <function name='xmlC14NExecute' file='c14n'>
+ <info>Dumps the canonized image of given XML document into the provided buffer. For details see &quot;Canonical XML&quot; (http://www.w3.org/TR/xml-c14n) or &quot;Exclusive XML Canonicalization&quot; (http://www.w3.org/TR/xml-exc-c14n)</info>
+ <return type='int' info='non-negative value on success or a negative value on fail'/>
+ <arg name='doc' type='xmlDocPtr' info='the XML document for canonization'/>
+ <arg name='is_visible_callback' type='xmlC14NIsVisibleCallback' info='the function to use to determine is node visible or not'/>
+ <arg name='user_data' type='void *' info='the first parameter for @is_visible_callback function (in most cases, it is nodes set)'/>
+ <arg name='exclusive' type='int' info='the exclusive flag (0 - non-exclusive canonicalization; otherwise - exclusive canonicalization)'/>
+ <arg name='inclusive_ns_prefixes' type='xmlChar **' info='the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise)'/>
+ <arg name='with_comments' type='int' info='include comments in the result (!=0) or not (==0)'/>
+ <arg name='buf' type='xmlOutputBufferPtr' info='the output buffer to store canonical XML; this buffer MUST have encoder==NULL because C14N requires UTF-8 output'/>
+ </function>
+ <functype name='xmlC14NIsVisibleCallback' file='c14n'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='user_data' type='void *' info=''/>
+ <arg name='node' type='xmlNodePtr' info=''/>
+ <arg name='parent' type='xmlNodePtr' info=''/>
+ </functype>
+ <function name='xmlCanonicPath' file='uri'>
+ <info>Constructs a canonic path from the specified path.</info>
+ <return type='xmlChar *' info='a new canonic path, or a duplicate of the path parameter if the construction fails. The caller is responsible for freeing the memory occupied by the returned string. If there is insufficient memory available, or the argument is NULL, the function returns NULL.'/>
+ <arg name='path' type='const xmlChar *' info='the resource locator in a filesystem notation'/>
+ </function>
+ <function name='xmlCatalogAdd' file='catalog'>
+ <info>Add an entry in the catalog, it may overwrite existing but different entries. If called before any other catalog routine, allows to override the default shared catalog put in place by xmlInitializeCatalog();</info>
+ <return type='int' info='0 if successful, -1 otherwise'/>
+ <arg name='type' type='const xmlChar *' info='the type of record to add to the catalog'/>
+ <arg name='orig' type='const xmlChar *' info='the system, public or prefix to match'/>
+ <arg name='replace' type='const xmlChar *' info='the replacement value for the match'/>
+ </function>
+ <function name='xmlCatalogAddLocal' file='catalog'>
+ <info>Add the new entry to the catalog list</info>
+ <return type='void *' info='the updated list'/>
+ <arg name='catalogs' type='void *' info='a document&apos;s list of catalogs'/>
+ <arg name='URL' type='const xmlChar *' info='the URL to a new local catalog'/>
+ </function>
+ <function name='xmlCatalogCleanup' file='catalog'>
+ <info>Free up all the memory associated with catalogs</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlCatalogConvert' file='catalog'>
+ <info>Convert all the SGML catalog entries as XML ones</info>
+ <return type='int' info='the number of entries converted if successful, -1 otherwise'/>
+ </function>
+ <function name='xmlCatalogDump' file='catalog'>
+ <info>Free up all the memory associated with catalogs</info>
+ <return type='void'/>
+ <arg name='out' type='FILE *' info='the file.'/>
+ </function>
+ <function name='xmlCatalogFreeLocal' file='catalog'>
+ <info>Free up the memory associated to the catalog list</info>
+ <return type='void'/>
+ <arg name='catalogs' type='void *' info='a document&apos;s list of catalogs'/>
+ </function>
+ <function name='xmlCatalogGetDefaults' file='catalog'>
+ <info>Used to get the user preference w.r.t. to what catalogs should be accepted</info>
+ <return type='xmlCatalogAllow' info='the current xmlCatalogAllow value'/>
+ </function>
+ <function name='xmlCatalogGetPublic' file='catalog'>
+ <info>Try to lookup the catalog reference associated to a public ID DEPRECATED, use xmlCatalogResolvePublic()</info>
+ <return type='const xmlChar *' info='the resource if found or NULL otherwise.'/>
+ <arg name='pubID' type='const xmlChar *' info='the public ID string'/>
+ </function>
+ <function name='xmlCatalogGetSystem' file='catalog'>
+ <info>Try to lookup the catalog reference associated to a system ID DEPRECATED, use xmlCatalogResolveSystem()</info>
+ <return type='const xmlChar *' info='the resource if found or NULL otherwise.'/>
+ <arg name='sysID' type='const xmlChar *' info='the system ID string'/>
+ </function>
+ <function name='xmlCatalogIsEmpty' file='catalog'>
+ <info>Check is a catalog is empty</info>
+ <return type='int' info='1 if the catalog is empty, 0 if not, amd -1 in case of error.'/>
+ <arg name='catal' type='xmlCatalogPtr' info='should this create an SGML catalog'/>
+ </function>
+ <function name='xmlCatalogLocalResolve' file='catalog'>
+ <info>Do a complete resolution lookup of an External Identifier using a document&apos;s private catalog list</info>
+ <return type='xmlChar *' info='the URI of the resource or NULL if not found, it must be freed by the caller.'/>
+ <arg name='catalogs' type='void *' info='a document&apos;s list of catalogs'/>
+ <arg name='pubID' type='const xmlChar *' info='the public ID string'/>
+ <arg name='sysID' type='const xmlChar *' info='the system ID string'/>
+ </function>
+ <function name='xmlCatalogLocalResolveURI' file='catalog'>
+ <info>Do a complete resolution lookup of an URI using a document&apos;s private catalog list</info>
+ <return type='xmlChar *' info='the URI of the resource or NULL if not found, it must be freed by the caller.'/>
+ <arg name='catalogs' type='void *' info='a document&apos;s list of catalogs'/>
+ <arg name='URI' type='const xmlChar *' info='the URI'/>
+ </function>
+ <function name='xmlCatalogRemove' file='catalog'>
+ <info>Remove an entry from the catalog</info>
+ <return type='int' info='the number of entries removed if successful, -1 otherwise'/>
+ <arg name='value' type='const xmlChar *' info='the value to remove'/>
+ </function>
+ <function name='xmlCatalogResolve' file='catalog'>
+ <info>Do a complete resolution lookup of an External Identifier</info>
+ <return type='xmlChar *' info='the URI of the resource or NULL if not found, it must be freed by the caller.'/>
+ <arg name='pubID' type='const xmlChar *' info='the public ID string'/>
+ <arg name='sysID' type='const xmlChar *' info='the system ID string'/>
+ </function>
+ <function name='xmlCatalogResolvePublic' file='catalog'>
+ <info>Try to lookup the catalog reference associated to a public ID</info>
+ <return type='xmlChar *' info='the resource if found or NULL otherwise, the value returned must be freed by the caller.'/>
+ <arg name='pubID' type='const xmlChar *' info='the public ID string'/>
+ </function>
+ <function name='xmlCatalogResolveSystem' file='catalog'>
+ <info>Try to lookup the catalog resource for a system ID</info>
+ <return type='xmlChar *' info='the resource if found or NULL otherwise, the value returned must be freed by the caller.'/>
+ <arg name='sysID' type='const xmlChar *' info='the system ID string'/>
+ </function>
+ <function name='xmlCatalogResolveURI' file='catalog'>
+ <info>Do a complete resolution lookup of an URI</info>
+ <return type='xmlChar *' info='the URI of the resource or NULL if not found, it must be freed by the caller.'/>
+ <arg name='URI' type='const xmlChar *' info='the URI'/>
+ </function>
+ <function name='xmlCatalogSetDebug' file='catalog'>
+ <info>Used to set the debug level for catalog operation, 0 disable debugging, 1 enable it</info>
+ <return type='int' info='the previous value of the catalog debugging level'/>
+ <arg name='level' type='int' info='the debug level of catalogs required'/>
+ </function>
+ <function name='xmlCatalogSetDefaultPrefer' file='catalog'>
+ <info>Allows to set the preference between public and system for deletion in XML Catalog resolution. C.f. section 4.1.1 of the spec Values accepted are XML_CATA_PREFER_PUBLIC or XML_CATA_PREFER_SYSTEM</info>
+ <return type='xmlCatalogPrefer' info='the previous value of the default preference for delegation'/>
+ <arg name='prefer' type='xmlCatalogPrefer' info='the default preference for delegation'/>
+ </function>
+ <function name='xmlCatalogSetDefaults' file='catalog'>
+ <info>Used to set the user preference w.r.t. to what catalogs should be accepted</info>
+ <return type='void'/>
+ <arg name='allow' type='xmlCatalogAllow' info='what catalogs should be accepted'/>
+ </function>
+ <function name='xmlCharEncCloseFunc' file='encoding'>
+ <info>Generic front-end for encoding handler close function</info>
+ <return type='int' info='0 if success, or -1 in case of error'/>
+ <arg name='handler' type='xmlCharEncodingHandler *' info='char enconding transformation data structure'/>
+ </function>
+ <function name='xmlCharEncFirstLine' file='encoding'>
+ <info>Front-end for the encoding handler input function, but handle only the very first line, i.e. limit itself to 45 chars.</info>
+ <return type='int' info='the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can&apos;t fit into the encoding we want), or'/>
+ <arg name='handler' type='xmlCharEncodingHandler *' info='char enconding transformation data structure'/>
+ <arg name='out' type='xmlBufferPtr' info='an xmlBuffer for the output.'/>
+ <arg name='in' type='xmlBufferPtr' info='an xmlBuffer for the input'/>
+ </function>
+ <function name='xmlCharEncInFunc' file='encoding'>
+ <info>Generic front-end for the encoding handler input function</info>
+ <return type='int' info='the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can&apos;t fit into the encoding we want), or'/>
+ <arg name='handler' type='xmlCharEncodingHandler *' info='char encoding transformation data structure'/>
+ <arg name='out' type='xmlBufferPtr' info='an xmlBuffer for the output.'/>
+ <arg name='in' type='xmlBufferPtr' info='an xmlBuffer for the input'/>
+ </function>
+ <function name='xmlCharEncOutFunc' file='encoding'>
+ <info>Generic front-end for the encoding handler output function a first call with @in == NULL has to be made firs to initiate the output in case of non-stateless encoding needing to initiate their state or the output (like the BOM in UTF16). In case of UTF8 sequence conversion errors for the given encoder, the content will be automatically remapped to a CharRef sequence.</info>
+ <return type='int' info='the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can&apos;t fit into the encoding we want), or'/>
+ <arg name='handler' type='xmlCharEncodingHandler *' info='char enconding transformation data structure'/>
+ <arg name='out' type='xmlBufferPtr' info='an xmlBuffer for the output.'/>
+ <arg name='in' type='xmlBufferPtr' info='an xmlBuffer for the input'/>
+ </function>
+ <functype name='xmlCharEncodingInputFunc' file='encoding'>
+ <info>Take a block of chars in the original encoding and try to convert it to an UTF-8 block of chars out.</info>
+ <return type='int' info='the number of bytes written, -1 if lack of space, or -2 if the transcoding failed. The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictiable. The value of @outlen after return is the number of octets consumed.'/>
+ <arg name='out' type='unsigned char *' info='a pointer to an array of bytes to store the UTF-8 result'/>
+ <arg name='outlen' type='int *' info='the length of @out'/>
+ <arg name='in' type='const unsigned char *' info='a pointer to an array of chars in the original encoding'/>
+ <arg name='inlen' type='int *' info='the length of @in'/>
+ </functype>
+ <functype name='xmlCharEncodingOutputFunc' file='encoding'>
+ <info>Take a block of UTF-8 chars in and try to convert it to another encoding. Note: a first call designed to produce heading info is called with in = NULL. If stateful this should also initialize the encoder state.</info>
+ <return type='int' info='the number of bytes written, -1 if lack of space, or -2 if the transcoding failed. The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictiable. The value of @outlen after return is the number of octets produced.'/>
+ <arg name='out' type='unsigned char *' info='a pointer to an array of bytes to store the result'/>
+ <arg name='outlen' type='int *' info='the length of @out'/>
+ <arg name='in' type='const unsigned char *' info='a pointer to an array of UTF-8 chars'/>
+ <arg name='inlen' type='int *' info='the length of @in'/>
+ </functype>
+ <function name='xmlCharInRange' file='chvalid'>
+ <info>Does a binary search of the range table to determine if char is valid</info>
+ <return type='int' info='true if character valid, false otherwise'/>
+ <arg name='val' type='unsigned int' info='character to be validated'/>
+ <arg name='rptr' type='const xmlChRangeGroupPtr' info='pointer to range to be used to validate'/>
+ </function>
+ <function name='xmlCharStrdup' file='xmlstring'>
+ <info>a strdup for char&apos;s to xmlChar&apos;s</info>
+ <return type='xmlChar *' info='a new xmlChar * or NULL'/>
+ <arg name='cur' type='const char *' info='the input char *'/>
+ </function>
+ <function name='xmlCharStrndup' file='xmlstring'>
+ <info>a strndup for char&apos;s to xmlChar&apos;s</info>
+ <return type='xmlChar *' info='a new xmlChar * or NULL'/>
+ <arg name='cur' type='const char *' info='the input char *'/>
+ <arg name='len' type='int' info='the len of @cur'/>
+ </function>
+ <function name='xmlCheckFilename' file='xmlIO'>
+ <info>function checks to see if @path is a valid source (file, socket...) for XML. if stat is not available on the target machine,</info>
+ <return type='int' info='1. if stat fails, returns 0 (if calling stat on the filename fails, it can&apos;t be right). if stat succeeds and the file is a directory, returns 2. otherwise returns 1.'/>
+ <arg name='path' type='const char *' info='the path to check'/>
+ </function>
+ <function name='xmlCheckHTTPInput' file='xmlIO'>
+ <info>Check an input in case it was created from an HTTP stream, in that case it will handle encoding and update of the base URL in case of redirection. It also checks for HTTP errors in which case the input is cleanly freed up and an appropriate error is raised in context</info>
+ <return type='xmlParserInputPtr' info='the input or NULL in case of HTTP error.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='ret' type='xmlParserInputPtr' info='an XML parser input'/>
+ </function>
+ <function name='xmlCheckLanguageID' file='parserInternals'>
+ <info>Checks that the value conforms to the LanguageID production: NOTE: this is somewhat deprecated, those productions were removed from the XML Second edition. [33] LanguageID ::= Langcode (&apos;-&apos; Subcode)* [34] Langcode ::= ISO639Code | IanaCode | UserCode [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z]) [36] IanaCode ::= (&apos;i&apos; | &apos;I&apos;) &apos;-&apos; ([a-z] | [A-Z])+ [37] UserCode ::= (&apos;x&apos; | &apos;X&apos;) &apos;-&apos; ([a-z] | [A-Z])+ [38] Subcode ::= ([a-z] | [A-Z])+</info>
+ <return type='int' info='1 if correct 0 otherwise'/>
+ <arg name='lang' type='const xmlChar *' info='pointer to the string value'/>
+ </function>
+ <function name='xmlCheckUTF8' file='xmlstring'>
+ <info>Checks @utf for being valid UTF-8. @utf is assumed to be null-terminated. This function is not super-strict, as it will allow longer UTF-8 sequences than necessary. Note that Java is capable of producing these sequences if provoked. Also note, this routine checks for the 4-byte maximum size, but does not check for 0x10ffff maximum value.</info>
+ <return type='int' info='value: true if @utf is valid.'/>
+ <arg name='utf' type='const unsigned char *' info='Pointer to putative UTF-8 encoded string.'/>
+ </function>
+ <function name='xmlCheckVersion' file='xmlversion'>
+ <info>check the compiled lib version against the include one. This can warn or immediately kill the application</info>
+ <return type='void'/>
+ <arg name='version' type='int' info='the include version number'/>
+ </function>
+ <function name='xmlCleanupCharEncodingHandlers' file='encoding'>
+ <info>Cleanup the memory allocated for the char encoding support, it unregisters all the encoding handlers and the aliases.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlCleanupEncodingAliases' file='encoding'>
+ <info>Unregisters all aliases</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlCleanupGlobals' file='globals'>
+ <info>Additional cleanup for multi-threading</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlCleanupInputCallbacks' file='xmlIO'>
+ <info>clears the entire input callback table. this includes the compiled-in I/O.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlCleanupMemory' file='xmlmemory'>
+ <info>Free up all the memory associated with memorys</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlCleanupOutputCallbacks' file='xmlIO'>
+ <info>clears the entire output callback table. this includes the compiled-in I/O callbacks.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlCleanupParser' file='parser'>
+ <info>Cleanup function for the XML library. It tries to reclaim all parsing related global memory allocated for the library processing. It doesn&apos;t deallocate any document related memory. Calling this function should not prevent reusing the library but one should call xmlCleanupParser() only when the process has finished using the library or XML document built with it.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlCleanupPredefinedEntities' file='entities'>
+ <info>Cleanup up the predefined entities table. Deprecated call</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlCleanupThreads' file='threads'>
+ <info>xmlCleanupThreads() is used to to cleanup all the thread related data of the libxml2 library once processing has ended.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlClearNodeInfoSeq' file='parser'>
+ <info>-- Clear (release memory and reinitialize) node info sequence</info>
+ <return type='void'/>
+ <arg name='seq' type='xmlParserNodeInfoSeqPtr' info='a node info sequence pointer'/>
+ </function>
+ <function name='xmlClearParserCtxt' file='parser'>
+ <info>Clear (release owned resources) and reinitialize a parser context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlConvertSGMLCatalog' file='catalog'>
+ <info>Convert all the SGML catalog entries as XML ones</info>
+ <return type='int' info='the number of entries converted if successful, -1 otherwise'/>
+ <arg name='catal' type='xmlCatalogPtr' info='the catalog'/>
+ </function>
+ <function name='xmlCopyAttributeTable' file='valid'>
+ <info>Build a copy of an attribute table.</info>
+ <return type='xmlAttributeTablePtr' info='the new xmlAttributeTablePtr or NULL in case of error.'/>
+ <arg name='table' type='xmlAttributeTablePtr' info='An attribute table'/>
+ </function>
+ <function name='xmlCopyChar' file='parserInternals'>
+ <info>append the char value in the array</info>
+ <return type='int' info='the number of xmlChar written'/>
+ <arg name='len' type='int' info='Ignored, compatibility'/>
+ <arg name='out' type='xmlChar *' info='pointer to an array of xmlChar'/>
+ <arg name='val' type='int' info='the char value'/>
+ </function>
+ <function name='xmlCopyCharMultiByte' file='parserInternals'>
+ <info>append the char value in the array</info>
+ <return type='int' info='the number of xmlChar written'/>
+ <arg name='out' type='xmlChar *' info='pointer to an array of xmlChar'/>
+ <arg name='val' type='int' info='the char value'/>
+ </function>
+ <function name='xmlCopyDoc' file='tree'>
+ <info>Do a copy of the document info. If recursive, the content tree will be copied too as well as DTD, namespaces and entities.</info>
+ <return type='xmlDocPtr' info='a new #xmlDocPtr, or NULL in case of error.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='recursive' type='int' info='if not zero do a recursive copy.'/>
+ </function>
+ <function name='xmlCopyDtd' file='tree'>
+ <info>Do a copy of the dtd.</info>
+ <return type='xmlDtdPtr' info='a new #xmlDtdPtr, or NULL in case of error.'/>
+ <arg name='dtd' type='xmlDtdPtr' info='the dtd'/>
+ </function>
+ <function name='xmlCopyElementContent' file='valid'>
+ <info>Build a copy of an element content description.</info>
+ <return type='xmlElementContentPtr' info='the new xmlElementContentPtr or NULL in case of error.'/>
+ <arg name='cur' type='xmlElementContentPtr' info='An element content pointer.'/>
+ </function>
+ <function name='xmlCopyElementTable' file='valid'>
+ <info>Build a copy of an element table.</info>
+ <return type='xmlElementTablePtr' info='the new xmlElementTablePtr or NULL in case of error.'/>
+ <arg name='table' type='xmlElementTablePtr' info='An element table'/>
+ </function>
+ <function name='xmlCopyEntitiesTable' file='entities'>
+ <info>Build a copy of an entity table.</info>
+ <return type='xmlEntitiesTablePtr' info='the new xmlEntitiesTablePtr or NULL in case of error.'/>
+ <arg name='table' type='xmlEntitiesTablePtr' info='An entity table'/>
+ </function>
+ <function name='xmlCopyEnumeration' file='valid'>
+ <info>Copy an enumeration attribute node (recursive).</info>
+ <return type='xmlEnumerationPtr' info='the xmlEnumerationPtr just created or NULL in case of error.'/>
+ <arg name='cur' type='xmlEnumerationPtr' info='the tree to copy.'/>
+ </function>
+ <function name='xmlCopyError' file='xmlerror'>
+ <info>Save the original error to the new place.</info>
+ <return type='int' info='0 in case of success and -1 in case of error.'/>
+ <arg name='from' type='xmlErrorPtr' info='a source error'/>
+ <arg name='to' type='xmlErrorPtr' info='a target error'/>
+ </function>
+ <function name='xmlCopyNamespace' file='tree'>
+ <info>Do a copy of the namespace.</info>
+ <return type='xmlNsPtr' info='a new #xmlNsPtr, or NULL in case of error.'/>
+ <arg name='cur' type='xmlNsPtr' info='the namespace'/>
+ </function>
+ <function name='xmlCopyNamespaceList' file='tree'>
+ <info>Do a copy of an namespace list.</info>
+ <return type='xmlNsPtr' info='a new #xmlNsPtr, or NULL in case of error.'/>
+ <arg name='cur' type='xmlNsPtr' info='the first namespace'/>
+ </function>
+ <function name='xmlCopyNode' file='tree'>
+ <info>Do a copy of the node.</info>
+ <return type='xmlNodePtr' info='a new #xmlNodePtr, or NULL in case of error.'/>
+ <arg name='node' type='const xmlNodePtr' info='the node'/>
+ <arg name='extended' type='int' info='if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)'/>
+ </function>
+ <function name='xmlCopyNodeList' file='tree'>
+ <info>Do a recursive copy of the node list.</info>
+ <return type='xmlNodePtr' info='a new #xmlNodePtr, or NULL in case of error.'/>
+ <arg name='node' type='const xmlNodePtr' info='the first node in the list.'/>
+ </function>
+ <function name='xmlCopyNotationTable' file='valid'>
+ <info>Build a copy of a notation table.</info>
+ <return type='xmlNotationTablePtr' info='the new xmlNotationTablePtr or NULL in case of error.'/>
+ <arg name='table' type='xmlNotationTablePtr' info='A notation table'/>
+ </function>
+ <function name='xmlCopyProp' file='tree'>
+ <info>Do a copy of the attribute.</info>
+ <return type='xmlAttrPtr' info='a new #xmlAttrPtr, or NULL in case of error.'/>
+ <arg name='target' type='xmlNodePtr' info='the element where the attribute will be grafted'/>
+ <arg name='cur' type='xmlAttrPtr' info='the attribute'/>
+ </function>
+ <function name='xmlCopyPropList' file='tree'>
+ <info>Do a copy of an attribute list.</info>
+ <return type='xmlAttrPtr' info='a new #xmlAttrPtr, or NULL in case of error.'/>
+ <arg name='target' type='xmlNodePtr' info='the element where the attributes will be grafted'/>
+ <arg name='cur' type='xmlAttrPtr' info='the first attribute'/>
+ </function>
+ <function name='xmlCreateDocParserCtxt' file='parser'>
+ <info>Creates a parser context for an XML in-memory document.</info>
+ <return type='xmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='cur' type='const xmlChar *' info='a pointer to an array of xmlChar'/>
+ </function>
+ <function name='xmlCreateEntitiesTable' file='entities'>
+ <info>create and initialize an empty entities hash table.</info>
+ <return type='xmlEntitiesTablePtr' info='the xmlEntitiesTablePtr just created or NULL in case of error.'/>
+ </function>
+ <function name='xmlCreateEntityParserCtxt' file='parserInternals'>
+ <info>Create a parser context for an external entity Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</info>
+ <return type='xmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='URL' type='const xmlChar *' info='the entity URL'/>
+ <arg name='ID' type='const xmlChar *' info='the entity PUBLIC ID'/>
+ <arg name='base' type='const xmlChar *' info='a possible base for the target URI'/>
+ </function>
+ <function name='xmlCreateEnumeration' file='valid'>
+ <info>create and initialize an enumeration attribute node.</info>
+ <return type='xmlEnumerationPtr' info='the xmlEnumerationPtr just created or NULL in case of error.'/>
+ <arg name='name' type='const xmlChar *' info='the enumeration name or NULL'/>
+ </function>
+ <function name='xmlCreateFileParserCtxt' file='parserInternals'>
+ <info>Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</info>
+ <return type='xmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ </function>
+ <function name='xmlCreateIOParserCtxt' file='parser'>
+ <info>Create a parser context for using the XML parser with an existing I/O stream</info>
+ <return type='xmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='a SAX handler'/>
+ <arg name='user_data' type='void *' info='The user data returned on SAX callbacks'/>
+ <arg name='ioread' type='xmlInputReadCallback' info='an I/O read function'/>
+ <arg name='ioclose' type='xmlInputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlCreateIntSubset' file='tree'>
+ <info>Create the internal subset of a document</info>
+ <return type='xmlDtdPtr' info='a pointer to the new DTD structure'/>
+ <arg name='doc' type='xmlDocPtr' info='the document pointer'/>
+ <arg name='name' type='const xmlChar *' info='the DTD name'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external (PUBLIC) ID'/>
+ <arg name='SystemID' type='const xmlChar *' info='the system ID'/>
+ </function>
+ <function name='xmlCreateMemoryParserCtxt' file='parserInternals'>
+ <info>Create a parser context for an XML in-memory document.</info>
+ <return type='xmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='buffer' type='const char *' info='a pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ </function>
+ <function name='xmlCreatePushParserCtxt' file='parser'>
+ <info>Create a parser context for using the XML parser in push mode. If @buffer and @size are non-NULL, the data is used to detect the encoding. The remaining characters will be parsed so they don&apos;t need to be fed in again through xmlParseChunk. To allow content encoding detection, @size should be &gt;= 4 The value of @filename is used for fetching external entities and error/warning reports.</info>
+ <return type='xmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='a SAX handler'/>
+ <arg name='user_data' type='void *' info='The user data returned on SAX callbacks'/>
+ <arg name='chunk' type='const char *' info='a pointer to an array of chars'/>
+ <arg name='size' type='int' info='number of chars in the array'/>
+ <arg name='filename' type='const char *' info='an optional file name or URI'/>
+ </function>
+ <function name='xmlCreateURI' file='uri'>
+ <info>Simply creates an empty xmlURI</info>
+ <return type='xmlURIPtr' info='the new structure or NULL in case of error'/>
+ </function>
+ <function name='xmlCreateURLParserCtxt' file='parserInternals'>
+ <info>Create a parser context for a file or URL content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time and for file accesses</info>
+ <return type='xmlParserCtxtPtr' info='the new parser context or NULL'/>
+ <arg name='filename' type='const char *' info='the filename or URL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlCtxtGetLastError' file='xmlerror'>
+ <info>Get the last parsing error registered.</info>
+ <return type='xmlErrorPtr' info='NULL if no error occured or a pointer to the error'/>
+ <arg name='ctx' type='void *' info='an XML parser context'/>
+ </function>
+ <function name='xmlCtxtReadDoc' file='parser'>
+ <info>parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='cur' type='const xmlChar *' info='a pointer to a zero terminated string'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlCtxtReadFd' file='parser'>
+ <info>parse an XML from a file descriptor and build a tree. This reuses the existing @ctxt parser context NOTE that the file descriptor will not be closed when the reader is closed or reset.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='fd' type='int' info='an open file descriptor'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlCtxtReadFile' file='parser'>
+ <info>parse an XML file from the filesystem or the network. This reuses the existing @ctxt parser context</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='filename' type='const char *' info='a file or URL'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlCtxtReadIO' file='parser'>
+ <info>parse an XML document from I/O functions and source and build a tree. This reuses the existing @ctxt parser context</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='ioread' type='xmlInputReadCallback' info='an I/O read function'/>
+ <arg name='ioclose' type='xmlInputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlCtxtReadMemory' file='parser'>
+ <info>parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='buffer' type='const char *' info='a pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlCtxtReset' file='parser'>
+ <info>Reset a parser context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlCtxtResetLastError' file='xmlerror'>
+ <info>Cleanup the last global error registered. For parsing error this does not change the well-formedness result.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an XML parser context'/>
+ </function>
+ <function name='xmlCtxtResetPush' file='parser'>
+ <info>Reset a push parser context</info>
+ <return type='int' info='0 in case of success and 1 in case of error'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='chunk' type='const char *' info='a pointer to an array of chars'/>
+ <arg name='size' type='int' info='number of chars in the array'/>
+ <arg name='filename' type='const char *' info='an optional file name or URI'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ </function>
+ <function name='xmlCtxtUseOptions' file='parser'>
+ <info>Applies the options to the parser context</info>
+ <return type='int' info='0 in case of success, the set of unknown or unimplemented options in case of error.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlCurrentChar' file='parserInternals'>
+ <info>The current char value, if using UTF-8 this may actually span multiple bytes in the input buffer. Implement the end of line normalization: 2.11 End-of-Line Handling Wherever an external parsed entity or the literal entity value of an internal parsed entity contains either the literal two-character sequence &quot;#xD#xA&quot; or a standalone literal #xD, an XML processor must pass to the application the single character #xA. This behavior can conveniently be produced by normalizing all line breaks to #xA on input, before parsing.)</info>
+ <return type='int' info='the current char value and its length'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the XML parser context'/>
+ <arg name='len' type='int *' info='pointer to the length of the char read'/>
+ </function>
+ <function name='xmlDebugDumpAttr' file='debugXML'>
+ <info>Dumps debug information for the attribute</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='attr' type='xmlAttrPtr' info='the attribute'/>
+ <arg name='depth' type='int' info='the indentation level.'/>
+ </function>
+ <function name='xmlDebugDumpAttrList' file='debugXML'>
+ <info>Dumps debug information for the attribute list</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='attr' type='xmlAttrPtr' info='the attribute list'/>
+ <arg name='depth' type='int' info='the indentation level.'/>
+ </function>
+ <function name='xmlDebugDumpDTD' file='debugXML'>
+ <info>Dumps debug information for the DTD</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='dtd' type='xmlDtdPtr' info='the DTD'/>
+ </function>
+ <function name='xmlDebugDumpDocument' file='debugXML'>
+ <info>Dumps debug information for the document, it&apos;s recursive</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='xmlDebugDumpDocumentHead' file='debugXML'>
+ <info>Dumps debug information cncerning the document, not recursive</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='xmlDebugDumpEntities' file='debugXML'>
+ <info>Dumps debug information for all the entities in use by the document</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='xmlDebugDumpNode' file='debugXML'>
+ <info>Dumps debug information for the element node, it is recursive</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='depth' type='int' info='the indentation level.'/>
+ </function>
+ <function name='xmlDebugDumpNodeList' file='debugXML'>
+ <info>Dumps debug information for the list of element node, it is recursive</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='node' type='xmlNodePtr' info='the node list'/>
+ <arg name='depth' type='int' info='the indentation level.'/>
+ </function>
+ <function name='xmlDebugDumpOneNode' file='debugXML'>
+ <info>Dumps debug information for the element node, it is not recursive</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='depth' type='int' info='the indentation level.'/>
+ </function>
+ <function name='xmlDebugDumpString' file='debugXML'>
+ <info>Dumps informations about the string, shorten it if necessary</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='str' type='const xmlChar *' info='the string'/>
+ </function>
+ <function name='xmlDecodeEntities' file='parserInternals'>
+ <info>This function is deprecated, we now always process entities content through xmlStringDecodeEntities TODO: remove it in next major release. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= &apos;%&apos; Name &apos;;&apos;</info>
+ <return type='xmlChar *' info='A newly allocated string with the substitution done. The caller must deallocate it !'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='len' type='int' info='the len to decode (in bytes !), -1 for no size limit'/>
+ <arg name='what' type='int' info='combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF'/>
+ <arg name='end' type='xmlChar' info='an end marker xmlChar, 0 if none'/>
+ <arg name='end2' type='xmlChar' info='an end marker xmlChar, 0 if none'/>
+ <arg name='end3' type='xmlChar' info='an end marker xmlChar, 0 if none'/>
+ </function>
+ <function name='xmlDefaultSAXHandlerInit' file='SAX2'>
+ <info>Initialize the default SAX2 handler</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlDelEncodingAlias' file='encoding'>
+ <info>Unregisters an encoding alias @alias</info>
+ <return type='int' info='0 in case of success, -1 in case of error'/>
+ <arg name='alias' type='const char *' info='the alias name as parsed, in UTF-8 format (ASCII actually)'/>
+ </function>
+ <function name='xmlDeregisterNodeDefault' file='globals'>
+ <info>Registers a callback for node destruction</info>
+ <return type='xmlDeregisterNodeFunc' info='the previous value of the deregistration function'/>
+ <arg name='func' type='xmlDeregisterNodeFunc' info='function pointer to the new DeregisterNodeFunc'/>
+ </function>
+ <functype name='xmlDeregisterNodeFunc' file='globals'>
+ <info></info>
+ <return type='void'/>
+ <arg name='node' type='xmlNodePtr' info=''/>
+ </functype>
+ <function name='xmlDetectCharEncoding' file='encoding'>
+ <info>Guess the encoding of the entity using the first bytes of the entity content according to the non-normative appendix F of the XML-1.0 recommendation.</info>
+ <return type='xmlCharEncoding' info='one of the XML_CHAR_ENCODING_... values.'/>
+ <arg name='in' type='const unsigned char *' info='a pointer to the first bytes of the XML entity, must be at least 2 bytes long (at least 4 if encoding is UTF4 variant).'/>
+ <arg name='len' type='int' info='pointer to the length of the buffer'/>
+ </function>
+ <function name='xmlDictCreate' file='dict'>
+ <info>Create a new dictionary</info>
+ <return type='xmlDictPtr' info='the newly created dictionnary, or NULL if an error occured.'/>
+ </function>
+ <function name='xmlDictCreateSub' file='dict'>
+ <info>Create a new dictionary, inheriting strings from the read-only dictionnary @sub. On lookup, strings are first searched in the new dictionnary, then in @sub, and if not found are created in the new dictionnary.</info>
+ <return type='xmlDictPtr' info='the newly created dictionnary, or NULL if an error occured.'/>
+ <arg name='sub' type='xmlDictPtr' info='an existing dictionnary'/>
+ </function>
+ <function name='xmlDictFree' file='dict'>
+ <info>Free the hash @dict and its contents. The userdata is deallocated with @f if provided.</info>
+ <return type='void'/>
+ <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
+ </function>
+ <function name='xmlDictLookup' file='dict'>
+ <info>Add the @name to the hash @dict if not present.</info>
+ <return type='const xmlChar *' info='the internal copy of the name or NULL in case of internal error'/>
+ <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='len' type='int' info='the length of the name, if -1 it is recomputed'/>
+ </function>
+ <function name='xmlDictOwns' file='dict'>
+ <info>check if a string is owned by the disctionary</info>
+ <return type='int' info='1 if true, 0 if false and -1 in case of error -1 in case of error'/>
+ <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
+ <arg name='str' type='const xmlChar *' info='the string'/>
+ </function>
+ <function name='xmlDictQLookup' file='dict'>
+ <info>Add the QName @prefix:@name to the hash @dict if not present.</info>
+ <return type='const xmlChar *' info='the internal copy of the QName or NULL in case of internal error'/>
+ <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
+ <arg name='prefix' type='const xmlChar *' info='the prefix'/>
+ <arg name='name' type='const xmlChar *' info='the name'/>
+ </function>
+ <function name='xmlDictReference' file='dict'>
+ <info>Increment the reference counter of a dictionary</info>
+ <return type='int' info='0 in case of success and -1 in case of error'/>
+ <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
+ </function>
+ <function name='xmlDictSize' file='dict'>
+ <info>Query the number of elements installed in the hash @dict.</info>
+ <return type='int' info='the number of elements in the dictionnary or -1 in case of error'/>
+ <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
+ </function>
+ <function name='xmlDocCopyNode' file='tree'>
+ <info>Do a copy of the node to a given document.</info>
+ <return type='xmlNodePtr' info='a new #xmlNodePtr, or NULL in case of error.'/>
+ <arg name='node' type='const xmlNodePtr' info='the node'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='extended' type='int' info='if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)'/>
+ </function>
+ <function name='xmlDocDump' file='tree'>
+ <info>Dump an XML document to an open FILE.</info>
+ <return type='int' info='the number of bytes written or -1 in case of failure.'/>
+ <arg name='f' type='FILE *' info='the FILE*'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='xmlDocDumpFormatMemory' file='tree'>
+ <info>Dump an XML document in memory and return the #xmlChar * and it&apos;s size. It&apos;s up to the caller to free the memory with xmlFree(). Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='mem' type='xmlChar **' info='OUT: the memory pointer'/>
+ <arg name='size' type='int *' info='OUT: the memory length'/>
+ <arg name='format' type='int' info='should formatting spaces been added'/>
+ </function>
+ <function name='xmlDocDumpFormatMemoryEnc' file='tree'>
+ <info>Dump the current DOM tree into memory using the character encoding specified by the caller. Note it is up to the caller of this function to free the allocated memory with xmlFree(). Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</info>
+ <return type='void'/>
+ <arg name='out_doc' type='xmlDocPtr' info='Document to generate XML text from'/>
+ <arg name='doc_txt_ptr' type='xmlChar **' info='Memory pointer for allocated XML text'/>
+ <arg name='doc_txt_len' type='int *' info='Length of the generated XML text'/>
+ <arg name='txt_encoding' type='const char *' info='Character encoding to use when generating XML text'/>
+ <arg name='format' type='int' info='should formatting spaces been added'/>
+ </function>
+ <function name='xmlDocDumpMemory' file='tree'>
+ <info>Dump an XML document in memory and return the #xmlChar * and it&apos;s size in bytes. It&apos;s up to the caller to free the memory with xmlFree(). The resulting byte array is zero terminated, though the last 0 is not included in the returned size.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='mem' type='xmlChar **' info='OUT: the memory pointer'/>
+ <arg name='size' type='int *' info='OUT: the memory length'/>
+ </function>
+ <function name='xmlDocDumpMemoryEnc' file='tree'>
+ <info>Dump the current DOM tree into memory using the character encoding specified by the caller. Note it is up to the caller of this function to free the allocated memory with xmlFree().</info>
+ <return type='void'/>
+ <arg name='out_doc' type='xmlDocPtr' info='Document to generate XML text from'/>
+ <arg name='doc_txt_ptr' type='xmlChar **' info='Memory pointer for allocated XML text'/>
+ <arg name='doc_txt_len' type='int *' info='Length of the generated XML text'/>
+ <arg name='txt_encoding' type='const char *' info='Character encoding to use when generating XML text'/>
+ </function>
+ <function name='xmlDocFormatDump' file='tree'>
+ <info>Dump an XML document to an open FILE.</info>
+ <return type='int' info='the number of bytes written or -1 in case of failure. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called'/>
+ <arg name='f' type='FILE *' info='the FILE*'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='format' type='int' info='should formatting spaces been added'/>
+ </function>
+ <function name='xmlDocGetRootElement' file='tree'>
+ <info>Get the root element of the document (doc-&gt;children is a list containing possibly comments, PIs, etc ...).</info>
+ <return type='xmlNodePtr' info='the #xmlNodePtr for the root or NULL'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='xmlDocSetRootElement' file='tree'>
+ <info>Set the root element of the document (doc-&gt;children is a list containing possibly comments, PIs, etc ...).</info>
+ <return type='xmlNodePtr' info='the old root element if any was found'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='root' type='xmlNodePtr' info='the new document root element'/>
+ </function>
+ <function name='xmlDumpAttributeDecl' file='valid'>
+ <info>This will dump the content of the attribute declaration as an XML DTD definition</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='attr' type='xmlAttributePtr' info='An attribute declaration'/>
+ </function>
+ <function name='xmlDumpAttributeTable' file='valid'>
+ <info>This will dump the content of the attribute table as an XML DTD definition</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='table' type='xmlAttributeTablePtr' info='An attribute table'/>
+ </function>
+ <function name='xmlDumpElementDecl' file='valid'>
+ <info>This will dump the content of the element declaration as an XML DTD definition</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='elem' type='xmlElementPtr' info='An element table'/>
+ </function>
+ <function name='xmlDumpElementTable' file='valid'>
+ <info>This will dump the content of the element table as an XML DTD definition</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='table' type='xmlElementTablePtr' info='An element table'/>
+ </function>
+ <function name='xmlDumpEntitiesTable' file='entities'>
+ <info>This will dump the content of the entity table as an XML DTD definition</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='An XML buffer.'/>
+ <arg name='table' type='xmlEntitiesTablePtr' info='An entity table'/>
+ </function>
+ <function name='xmlDumpEntityDecl' file='entities'>
+ <info>This will dump the content of the entity table as an XML DTD definition</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='An XML buffer.'/>
+ <arg name='ent' type='xmlEntityPtr' info='An entity table'/>
+ </function>
+ <function name='xmlDumpNotationDecl' file='valid'>
+ <info>This will dump the content the notation declaration as an XML DTD definition</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='nota' type='xmlNotationPtr' info='A notation declaration'/>
+ </function>
+ <function name='xmlDumpNotationTable' file='valid'>
+ <info>This will dump the content of the notation table as an XML DTD definition</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='table' type='xmlNotationTablePtr' info='A notation table'/>
+ </function>
+ <function name='xmlElemDump' file='tree'>
+ <info>Dump an XML/HTML node, recursive behaviour, children are printed too.</info>
+ <return type='void'/>
+ <arg name='f' type='FILE *' info='the FILE * for the output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node'/>
+ </function>
+ <function name='xmlEncodeEntities' file='entities'>
+ <info>TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary compatibility People must migrate their code to xmlEncodeEntitiesReentrant ! This routine will issue a warning when encountered.</info>
+ <return type='const xmlChar *' info='NULL'/>
+ <arg name='doc' type='xmlDocPtr' info='the document containing the string'/>
+ <arg name='input' type='const xmlChar *' info='A string to convert to XML.'/>
+ </function>
+ <function name='xmlEncodeEntitiesReentrant' file='entities'>
+ <info>Do a global encoding of a string, replacing the predefined entities and non ASCII values with their entities and CharRef counterparts. Contrary to xmlEncodeEntities, this routine is reentrant, and result must be deallocated.</info>
+ <return type='xmlChar *' info='A newly allocated string with the substitution done.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document containing the string'/>
+ <arg name='input' type='const xmlChar *' info='A string to convert to XML.'/>
+ </function>
+ <function name='xmlEncodeSpecialChars' file='entities'>
+ <info>Do a global encoding of a string, replacing the predefined entities this routine is reentrant, and result must be deallocated.</info>
+ <return type='xmlChar *' info='A newly allocated string with the substitution done.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document containing the string'/>
+ <arg name='input' type='const xmlChar *' info='A string to convert to XML.'/>
+ </function>
+ <functype name='xmlEntityReferenceFunc' file='parserInternals'>
+ <info>Callback function used when one needs to be able to track back the provenance of a chunk of nodes inherited from an entity replacement.</info>
+ <return type='void'/>
+ <arg name='ent' type='xmlEntityPtr' info='the entity'/>
+ <arg name='firstNode' type='xmlNodePtr' info='the fist node in the chunk'/>
+ <arg name='lastNode' type='xmlNodePtr' info='the last nod in the chunk'/>
+ </functype>
+ <function name='xmlErrMemory' file='parserInternals'>
+ <info>Handle a redefinition of attribute error</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='extra' type='const char *' info='extra informations'/>
+ </function>
+ <functype name='xmlExternalEntityLoader' file='parser'>
+ <info>External entity loaders types.</info>
+ <return type='xmlParserInputPtr' info='the entity input parser.'/>
+ <arg name='URL' type='const char *' info='The System ID of the resource requested'/>
+ <arg name='ID' type='const char *' info='The Public ID of the resource requested'/>
+ <arg name='context' type='xmlParserCtxtPtr' info='the XML parser context'/>
+ </functype>
+ <function name='xmlFileClose' file='xmlIO'>
+ <info>Close an I/O channel</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='context' type='void *' info='the I/O context'/>
+ </function>
+ <function name='xmlFileMatch' file='xmlIO'>
+ <info>input from FILE *</info>
+ <return type='int' info='1 if matches, 0 otherwise'/>
+ <arg name='filename' type='const char *' info='the URI for matching'/>
+ </function>
+ <function name='xmlFileOpen' file='xmlIO'>
+ <info>Wrapper around xmlFileOpen_real that try it with an unescaped version of @filename, if this fails fallback to @filename</info>
+ <return type='void *' info='a handler or NULL in case or failure'/>
+ <arg name='filename' type='const char *' info='the URI for matching'/>
+ </function>
+ <function name='xmlFileRead' file='xmlIO'>
+ <info>Read @len bytes to @buffer from the I/O channel.</info>
+ <return type='int' info='the number of bytes written'/>
+ <arg name='context' type='void *' info='the I/O context'/>
+ <arg name='buffer' type='char *' info='where to drop data'/>
+ <arg name='len' type='int' info='number of bytes to write'/>
+ </function>
+ <function name='xmlFindCharEncodingHandler' file='encoding'>
+ <info>Search in the registered set the handler able to read/write that encoding.</info>
+ <return type='xmlCharEncodingHandlerPtr' info='the handler or NULL if not found'/>
+ <arg name='name' type='const char *' info='a string describing the char encoding.'/>
+ </function>
+ <function name='xmlFreeAttributeTable' file='valid'>
+ <info>Deallocate the memory used by an entities hash table.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlAttributeTablePtr' info='An attribute table'/>
+ </function>
+ <function name='xmlFreeAutomata' file='xmlautomata'>
+ <info>Free an automata</info>
+ <return type='void'/>
+ <arg name='am' type='xmlAutomataPtr' info='an automata'/>
+ </function>
+ <function name='xmlFreeCatalog' file='catalog'>
+ <info>Free the memory allocated to a Catalog</info>
+ <return type='void'/>
+ <arg name='catal' type='xmlCatalogPtr' info='a Catalog'/>
+ </function>
+ <function name='xmlFreeDoc' file='tree'>
+ <info>Free up all the structures used by a document, tree included.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlDocPtr' info='pointer to the document'/>
+ </function>
+ <function name='xmlFreeDtd' file='tree'>
+ <info>Free a DTD structure.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlDtdPtr' info='the DTD structure to free up'/>
+ </function>
+ <function name='xmlFreeElementContent' file='valid'>
+ <info>Free an element content structure. This is a recursive call !</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlElementContentPtr' info='the element content tree to free'/>
+ </function>
+ <function name='xmlFreeElementTable' file='valid'>
+ <info>Deallocate the memory used by an element hash table.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlElementTablePtr' info='An element table'/>
+ </function>
+ <function name='xmlFreeEntitiesTable' file='entities'>
+ <info>Deallocate the memory used by an entities hash table.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlEntitiesTablePtr' info='An entity table'/>
+ </function>
+ <function name='xmlFreeEnumeration' file='valid'>
+ <info>free an enumeration attribute node (recursive).</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlEnumerationPtr' info='the tree to free.'/>
+ </function>
+ <functype name='xmlFreeFunc' file='xmlmemory'>
+ <info>Signature for a free() implementation.</info>
+ <return type='void'/>
+ <arg name='mem' type='void *' info='an already allocated block of memory'/>
+ </functype>
+ <function name='xmlFreeIDTable' file='valid'>
+ <info>Deallocate the memory used by an ID hash table.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlIDTablePtr' info='An id table'/>
+ </function>
+ <function name='xmlFreeInputStream' file='parserInternals'>
+ <info>Free up an input stream.</info>
+ <return type='void'/>
+ <arg name='input' type='xmlParserInputPtr' info='an xmlParserInputPtr'/>
+ </function>
+ <function name='xmlFreeMutex' file='threads'>
+ <info>xmlFreeMutex() is used to reclaim resources associated with a libxml2 token struct.</info>
+ <return type='void'/>
+ <arg name='tok' type='xmlMutexPtr' info='the simple mutex'/>
+ </function>
+ <function name='xmlFreeNode' file='tree'>
+ <info>Free a node, this is a recursive behaviour, all the children are freed too. This doesn&apos;t unlink the child from the list, use xmlUnlinkNode() first.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node'/>
+ </function>
+ <function name='xmlFreeNodeList' file='tree'>
+ <info>Free a node and all its siblings, this is a recursive behaviour, all the children are freed too.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the first node in the list'/>
+ </function>
+ <function name='xmlFreeNotationTable' file='valid'>
+ <info>Deallocate the memory used by an entities hash table.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlNotationTablePtr' info='An notation table'/>
+ </function>
+ <function name='xmlFreeNs' file='tree'>
+ <info>Free up the structures associated to a namespace</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNsPtr' info='the namespace pointer'/>
+ </function>
+ <function name='xmlFreeNsList' file='tree'>
+ <info>Free up all the structures associated to the chained namespaces.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNsPtr' info='the first namespace pointer'/>
+ </function>
+ <function name='xmlFreeParserCtxt' file='parser'>
+ <info>Free all the memory used by a parser context. However the parsed document in ctxt-&gt;myDoc is not freed.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlFreeParserInputBuffer' file='xmlIO'>
+ <info>Free up the memory used by a buffered parser input</info>
+ <return type='void'/>
+ <arg name='in' type='xmlParserInputBufferPtr' info='a buffered parser input'/>
+ </function>
+ <function name='xmlFreePattern' file='pattern'>
+ <info>Free up the memory allocated by @comp</info>
+ <return type='void'/>
+ <arg name='comp' type='xmlPatternPtr' info='an XSLT comp'/>
+ </function>
+ <function name='xmlFreePatternList' file='pattern'>
+ <info>Free up the memory allocated by all the elements of @comp</info>
+ <return type='void'/>
+ <arg name='comp' type='xmlPatternPtr' info='an XSLT comp list'/>
+ </function>
+ <function name='xmlFreeProp' file='tree'>
+ <info>Free one attribute, all the content is freed too</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlAttrPtr' info='an attribute'/>
+ </function>
+ <function name='xmlFreePropList' file='tree'>
+ <info>Free a property and all its siblings, all the children are freed too.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlAttrPtr' info='the first property in the list'/>
+ </function>
+ <function name='xmlFreeRMutex' file='threads'>
+ <info>xmlRFreeMutex() is used to reclaim resources associated with a reentrant mutex.</info>
+ <return type='void'/>
+ <arg name='tok' type='xmlRMutexPtr' info='the reentrant mutex'/>
+ </function>
+ <function name='xmlFreeRefTable' file='valid'>
+ <info>Deallocate the memory used by an Ref hash table.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlRefTablePtr' info='An ref table'/>
+ </function>
+ <function name='xmlFreeTextReader' file='xmlreader'>
+ <info>Deallocate all the resources associated to the reader</info>
+ <return type='void'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr'/>
+ </function>
+ <function name='xmlFreeTextWriter' file='xmlwriter'>
+ <info>Deallocate all the resources associated to the writer</info>
+ <return type='void'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlFreeURI' file='uri'>
+ <info>Free up the xmlURI struct</info>
+ <return type='void'/>
+ <arg name='uri' type='xmlURIPtr' info='pointer to an xmlURI'/>
+ </function>
+ <function name='xmlFreeValidCtxt' file='valid'>
+ <info>Free a validation context structure.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlValidCtxtPtr' info='the validation context to free'/>
+ </function>
+ <function name='xmlGcMemGet' file='xmlmemory'>
+ <info>Provides the memory access functions set currently in use The mallocAtomicFunc is specialized for atomic block allocations (i.e. of areas useful for garbage collected memory allocators</info>
+ <return type='int' info='0 on success'/>
+ <arg name='freeFunc' type='xmlFreeFunc *' info='place to save the free() function in use'/>
+ <arg name='mallocFunc' type='xmlMallocFunc *' info='place to save the malloc() function in use'/>
+ <arg name='mallocAtomicFunc' type='xmlMallocFunc *' info='place to save the atomic malloc() function in use'/>
+ <arg name='reallocFunc' type='xmlReallocFunc *' info='place to save the realloc() function in use'/>
+ <arg name='strdupFunc' type='xmlStrdupFunc *' info='place to save the strdup() function in use'/>
+ </function>
+ <function name='xmlGcMemSetup' file='xmlmemory'>
+ <info>Override the default memory access functions with a new set This has to be called before any other libxml routines ! The mallocAtomicFunc is specialized for atomic block allocations (i.e. of areas useful for garbage collected memory allocators Should this be blocked if there was already some allocations done ?</info>
+ <return type='int' info='0 on success'/>
+ <arg name='freeFunc' type='xmlFreeFunc' info='the free() function to use'/>
+ <arg name='mallocFunc' type='xmlMallocFunc' info='the malloc() function to use'/>
+ <arg name='mallocAtomicFunc' type='xmlMallocFunc' info='the malloc() function to use for atomic allocations'/>
+ <arg name='reallocFunc' type='xmlReallocFunc' info='the realloc() function to use'/>
+ <arg name='strdupFunc' type='xmlStrdupFunc' info='the strdup() function to use'/>
+ </function>
+ <functype name='xmlGenericErrorFunc' file='xmlerror'>
+ <info>Signature of the function to use when there is an error and no parsing or validity context available .</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='a parsing context'/>
+ <arg name='msg' type='const char *' info='the message'/>
+ <arg name='...' type='...' info='the extra arguments of the varags to format the message'/>
+ </functype>
+ <function name='xmlGetBufferAllocationScheme' file='tree'>
+ <info>Types are XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed, improves performance</info>
+ <return type='xmlBufferAllocationScheme' info='the current allocation scheme'/>
+ </function>
+ <function name='xmlGetCharEncodingHandler' file='encoding'>
+ <info>Search in the registered set the handler able to read/write that encoding.</info>
+ <return type='xmlCharEncodingHandlerPtr' info='the handler or NULL if not found'/>
+ <arg name='enc' type='xmlCharEncoding' info='an xmlCharEncoding value.'/>
+ </function>
+ <function name='xmlGetCharEncodingName' file='encoding'>
+ <info>The &quot;canonical&quot; name for XML encoding. C.f. http://www.w3.org/TR/REC-xml#charencoding Section 4.3.3 Character Encoding in Entities</info>
+ <return type='const char *' info='the canonical name for the given encoding'/>
+ <arg name='enc' type='xmlCharEncoding' info='the encoding'/>
+ </function>
+ <function name='xmlGetCompressMode' file='tree'>
+ <info>get the default compression mode used, ZLIB based.</info>
+ <return type='int' info='0 (uncompressed) to 9 (max compression)'/>
+ </function>
+ <function name='xmlGetDocCompressMode' file='tree'>
+ <info>get the compression ratio for a document, ZLIB based</info>
+ <return type='int' info='0 (uncompressed) to 9 (max compression)'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='xmlGetDocEntity' file='entities'>
+ <info>Do an entity lookup in the document entity hash table and</info>
+ <return type='xmlEntityPtr' info='the corresponding entity, otherwise a lookup is done in the predefined entities too. Returns A pointer to the entity structure or NULL if not found.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document referencing the entity'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ </function>
+ <function name='xmlGetDtdAttrDesc' file='valid'>
+ <info>Search the DTD for the description of this attribute on this element.</info>
+ <return type='xmlAttributePtr' info='the xmlAttributePtr if found or NULL'/>
+ <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
+ <arg name='elem' type='const xmlChar *' info='the element name'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ </function>
+ <function name='xmlGetDtdElementDesc' file='valid'>
+ <info>Search the DTD for the description of this element</info>
+ <return type='xmlElementPtr' info='the xmlElementPtr if found or NULL'/>
+ <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
+ <arg name='name' type='const xmlChar *' info='the element name'/>
+ </function>
+ <function name='xmlGetDtdEntity' file='entities'>
+ <info>Do an entity lookup in the DTD entity hash table and</info>
+ <return type='xmlEntityPtr' info='the corresponding entity, if found. Note: the first argument is the document node, not the DTD node. Returns A pointer to the entity structure or NULL if not found.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document referencing the entity'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ </function>
+ <function name='xmlGetDtdNotationDesc' file='valid'>
+ <info>Search the DTD for the description of this notation</info>
+ <return type='xmlNotationPtr' info='the xmlNotationPtr if found or NULL'/>
+ <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
+ <arg name='name' type='const xmlChar *' info='the notation name'/>
+ </function>
+ <function name='xmlGetDtdQAttrDesc' file='valid'>
+ <info>Search the DTD for the description of this qualified attribute on this element.</info>
+ <return type='xmlAttributePtr' info='the xmlAttributePtr if found or NULL'/>
+ <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
+ <arg name='elem' type='const xmlChar *' info='the element name'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ <arg name='prefix' type='const xmlChar *' info='the attribute namespace prefix'/>
+ </function>
+ <function name='xmlGetDtdQElementDesc' file='valid'>
+ <info>Search the DTD for the description of this element</info>
+ <return type='xmlElementPtr' info='the xmlElementPtr if found or NULL'/>
+ <arg name='dtd' type='xmlDtdPtr' info='a pointer to the DtD to search'/>
+ <arg name='name' type='const xmlChar *' info='the element name'/>
+ <arg name='prefix' type='const xmlChar *' info='the element namespace prefix'/>
+ </function>
+ <function name='xmlGetEncodingAlias' file='encoding'>
+ <info>Lookup an encoding name for the given alias.</info>
+ <return type='const char *' info='NULL if not found, otherwise the original name'/>
+ <arg name='alias' type='const char *' info='the alias name as parsed, in UTF-8 format (ASCII actually)'/>
+ </function>
+ <function name='xmlGetExternalEntityLoader' file='parser'>
+ <info>Get the default external entity resolver function for the application</info>
+ <return type='xmlExternalEntityLoader' info='the xmlExternalEntityLoader function pointer'/>
+ </function>
+ <function name='xmlGetFeature' file='parser'>
+ <info>Read the current value of one feature of this parser instance</info>
+ <return type='int' info='-1 in case or error, 0 otherwise'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML/HTML parser context'/>
+ <arg name='name' type='const char *' info='the feature name'/>
+ <arg name='result' type='void *' info='location to store the result'/>
+ </function>
+ <function name='xmlGetFeaturesList' file='parser'>
+ <info>Copy at most *@len feature names into the @result array</info>
+ <return type='int' info='-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'/>
+ <arg name='len' type='int *' info='the length of the features name array (input/output)'/>
+ <arg name='result' type='const char **' info='an array of string to be filled with the features name.'/>
+ </function>
+ <function name='xmlGetGlobalState' file='threads'>
+ <info>xmlGetGlobalState() is called to retrieve the global state for a thread.</info>
+ <return type='xmlGlobalStatePtr' info='the thread global state or NULL in case of error'/>
+ </function>
+ <function name='xmlGetID' file='valid'>
+ <info>Search the attribute declaring the given ID</info>
+ <return type='xmlAttrPtr' info='NULL if not found, otherwise the xmlAttrPtr defining the ID'/>
+ <arg name='doc' type='xmlDocPtr' info='pointer to the document'/>
+ <arg name='ID' type='const xmlChar *' info='the ID value'/>
+ </function>
+ <function name='xmlGetIntSubset' file='tree'>
+ <info>Get the internal subset of a document</info>
+ <return type='xmlDtdPtr' info='a pointer to the DTD structure or NULL if not found'/>
+ <arg name='doc' type='xmlDocPtr' info='the document pointer'/>
+ </function>
+ <function name='xmlGetLastChild' file='tree'>
+ <info>Search the last child of a node.</info>
+ <return type='xmlNodePtr' info='the last child or NULL if none.'/>
+ <arg name='parent' type='xmlNodePtr' info='the parent node'/>
+ </function>
+ <function name='xmlGetLastError' file='xmlerror'>
+ <info>Get the last global error registered. This is per thread if compiled with thread support.</info>
+ <return type='xmlErrorPtr' info='NULL if no error occured or a pointer to the error'/>
+ </function>
+ <function name='xmlGetLineNo' file='tree'>
+ <info>Get line number of @node. This requires activation of this option before invoking the parser by calling xmlLineNumbersDefault(1)</info>
+ <return type='long' info='the line number if successful, -1 otherwise'/>
+ <arg name='node' type='xmlNodePtr' info='valid node'/>
+ </function>
+ <function name='xmlGetNoNsProp' file='tree'>
+ <info>Search and get the value of an attribute associated to a node This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. This function is similar to xmlGetProp except it will accept only an attribute in no namespace.</info>
+ <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory with xmlFree().'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ </function>
+ <function name='xmlGetNodePath' file='tree'>
+ <info>Build a structure based Path for the given node</info>
+ <return type='xmlChar *' info='the new path or NULL in case of error. The caller must free the returned string'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ </function>
+ <function name='xmlGetNsList' file='tree'>
+ <info>Search all the namespace applying to a given element.</info>
+ <return type='xmlNsPtr *' info='an NULL terminated array of all the #xmlNsPtr found that need to be freed by the caller or NULL if no namespace if defined'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='node' type='xmlNodePtr' info='the current node'/>
+ </function>
+ <function name='xmlGetNsProp' file='tree'>
+ <info>Search and get the value of an attribute associated to a node This attribute has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off.</info>
+ <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory with xmlFree().'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ <arg name='nameSpace' type='const xmlChar *' info='the URI of the namespace'/>
+ </function>
+ <function name='xmlGetParameterEntity' file='entities'>
+ <info>Do an entity lookup in the internal and external subsets and</info>
+ <return type='xmlEntityPtr' info='the corresponding parameter entity, if found. Returns A pointer to the entity structure or NULL if not found.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document referencing the entity'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ </function>
+ <function name='xmlGetPredefinedEntity' file='entities'>
+ <info>Check whether this name is an predefined entity.</info>
+ <return type='xmlEntityPtr' info='NULL if not, otherwise the entity'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ </function>
+ <function name='xmlGetProp' file='tree'>
+ <info>Search and get the value of an attribute associated to a node This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. NOTE: this function acts independently of namespaces associated to the attribute. Use xmlGetNsProp() or xmlGetNoNsProp() for namespace aware processing.</info>
+ <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory with xmlFree().'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ </function>
+ <function name='xmlGetRefs' file='valid'>
+ <info>Find the set of references for the supplied ID.</info>
+ <return type='xmlListPtr' info='NULL if not found, otherwise node set for the ID.'/>
+ <arg name='doc' type='xmlDocPtr' info='pointer to the document'/>
+ <arg name='ID' type='const xmlChar *' info='the ID value'/>
+ </function>
+ <function name='xmlGetThreadId' file='threads'>
+ <info>xmlGetThreadId() find the current thread ID number</info>
+ <return type='int' info='the current thread ID number'/>
+ </function>
+ <function name='xmlGetUTF8Char' file='xmlstring'>
+ <info>Read one UTF8 Char from @utf</info>
+ <return type='int' info='the char value or -1 in case of error, and updates *len with the number of bytes consumed'/>
+ <arg name='utf' type='const unsigned char *' info='a sequence of UTF-8 encoded bytes'/>
+ <arg name='len' type='int *' info='a pointer to @bytes len'/>
+ </function>
+ <function name='xmlHandleEntity' file='parserInternals'>
+ <info>Default handling of defined entities, when should we define a new input stream ? When do we just handle that as a set of chars ? OBSOLETE: to be removed at some point.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='entity' type='xmlEntityPtr' info='an XML entity pointer.'/>
+ </function>
+ <function name='xmlHasNsProp' file='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.</info>
+ <return type='xmlAttrPtr' info='the attribute or the attribute declaration or NULL if neither was found.'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ <arg name='nameSpace' type='const xmlChar *' info='the URI of the namespace'/>
+ </function>
+ <function name='xmlHasProp' file='tree'>
+ <info>Search an attribute associated to a node This function also looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off.</info>
+ <return type='xmlAttrPtr' info='the attribute or the attribute declaration or NULL if neither was found.'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ </function>
+ <function name='xmlHashAddEntry' file='hash'>
+ <info>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Duplicate names generate errors.</info>
+ <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='userdata' type='void *' info='a pointer to the userdata'/>
+ </function>
+ <function name='xmlHashAddEntry2' file='hash'>
+ <info>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Duplicate tuples generate errors.</info>
+ <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <arg name='userdata' type='void *' info='a pointer to the userdata'/>
+ </function>
+ <function name='xmlHashAddEntry3' file='hash'>
+ <info>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors.</info>
+ <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
+ <arg name='userdata' type='void *' info='a pointer to the userdata'/>
+ </function>
+ <functype name='xmlHashCopier' file='hash'>
+ <info>Callback to copy data from a hash.</info>
+ <return type='void *' info='a copy of the data or NULL in case of error.'/>
+ <arg name='payload' type='void *' info='the data in the hash'/>
+ <arg name='name' type='xmlChar *' info='the name associated'/>
+ </functype>
+ <function name='xmlHashCopy' file='hash'>
+ <info>Scan the hash @table and applied @f to each value.</info>
+ <return type='xmlHashTablePtr' info='the new table or NULL in case of error.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='f' type='xmlHashCopier' info='the copier function for items in the hash'/>
+ </function>
+ <function name='xmlHashCreate' file='hash'>
+ <info>Create a new xmlHashTablePtr.</info>
+ <return type='xmlHashTablePtr' info='the newly created object, or NULL if an error occured.'/>
+ <arg name='size' type='int' info='the size of the hash table'/>
+ </function>
+ <functype name='xmlHashDeallocator' file='hash'>
+ <info>Callback to free data from a hash.</info>
+ <return type='void'/>
+ <arg name='payload' type='void *' info='the data in the hash'/>
+ <arg name='name' type='xmlChar *' info='the name associated'/>
+ </functype>
+ <function name='xmlHashFree' file='hash'>
+ <info>Free the hash @table and its contents. The userdata is deallocated with @f if provided.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='f' type='xmlHashDeallocator' info='the deallocator function for items in the hash'/>
+ </function>
+ <function name='xmlHashLookup' file='hash'>
+ <info>Find the userdata specified by the @name.</info>
+ <return type='void *' info='the pointer to the userdata'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ </function>
+ <function name='xmlHashLookup2' file='hash'>
+ <info>Find the userdata specified by the (@name, @name2) tuple.</info>
+ <return type='void *' info='the pointer to the userdata'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ </function>
+ <function name='xmlHashLookup3' file='hash'>
+ <info>Find the userdata specified by the (@name, @name2, @name3) tuple.</info>
+ <return type='void *' info='the a pointer to the userdata'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
+ </function>
+ <function name='xmlHashQLookup' file='hash'>
+ <info>Find the userdata specified by the QName @prefix:@name/@name.</info>
+ <return type='void *' info='the pointer to the userdata'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='prefix' type='const xmlChar *' info='the prefix of the userdata'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ </function>
+ <function name='xmlHashQLookup2' file='hash'>
+ <info>Find the userdata specified by the QNames tuple</info>
+ <return type='void *' info='the pointer to the userdata'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='prefix' type='const xmlChar *' info='the prefix of the userdata'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='prefix2' type='const xmlChar *' info='the second prefix of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ </function>
+ <function name='xmlHashQLookup3' file='hash'>
+ <info>Find the userdata specified by the (@name, @name2, @name3) tuple.</info>
+ <return type='void *' info='the a pointer to the userdata'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='prefix' type='const xmlChar *' info='the prefix of the userdata'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='prefix2' type='const xmlChar *' info='the second prefix of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <arg name='prefix3' type='const xmlChar *' info='the third prefix of the userdata'/>
+ <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
+ </function>
+ <function name='xmlHashRemoveEntry' file='hash'>
+ <info>Find the userdata specified by the @name and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</info>
+ <return type='int' info='0 if the removal succeeded and -1 in case of error or not found.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='f' type='xmlHashDeallocator' info='the deallocator function for removed item (if any)'/>
+ </function>
+ <function name='xmlHashRemoveEntry2' file='hash'>
+ <info>Find the userdata specified by the (@name, @name2) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</info>
+ <return type='int' info='0 if the removal succeeded and -1 in case of error or not found.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <arg name='f' type='xmlHashDeallocator' info='the deallocator function for removed item (if any)'/>
+ </function>
+ <function name='xmlHashRemoveEntry3' file='hash'>
+ <info>Find the userdata specified by the (@name, @name2, @name3) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</info>
+ <return type='int' info='0 if the removal succeeded and -1 in case of error or not found.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
+ <arg name='f' type='xmlHashDeallocator' info='the deallocator function for removed item (if any)'/>
+ </function>
+ <function name='xmlHashScan' file='hash'>
+ <info>Scan the hash @table and applied @f to each value.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='f' type='xmlHashScanner' info='the scanner function for items in the hash'/>
+ <arg name='data' type='void *' info='extra data passed to f'/>
+ </function>
+ <function name='xmlHashScan3' file='hash'>
+ <info>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata or NULL'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata or NULL'/>
+ <arg name='name3' type='const xmlChar *' info='a third name of the userdata or NULL'/>
+ <arg name='f' type='xmlHashScanner' info='the scanner function for items in the hash'/>
+ <arg name='data' type='void *' info='extra data passed to f'/>
+ </function>
+ <function name='xmlHashScanFull' file='hash'>
+ <info>Scan the hash @table and applied @f to each value.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='f' type='xmlHashScannerFull' info='the scanner function for items in the hash'/>
+ <arg name='data' type='void *' info='extra data passed to f'/>
+ </function>
+ <function name='xmlHashScanFull3' file='hash'>
+ <info>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</info>
+ <return type='void'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata or NULL'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata or NULL'/>
+ <arg name='name3' type='const xmlChar *' info='a third name of the userdata or NULL'/>
+ <arg name='f' type='xmlHashScannerFull' info='the scanner function for items in the hash'/>
+ <arg name='data' type='void *' info='extra data passed to f'/>
+ </function>
+ <functype name='xmlHashScanner' file='hash'>
+ <info>Callback when scanning data in a hash with the simple scanner.</info>
+ <return type='void'/>
+ <arg name='payload' type='void *' info='the data in the hash'/>
+ <arg name='data' type='void *' info='extra scannner data'/>
+ <arg name='name' type='xmlChar *' info='the name associated'/>
+ </functype>
+ <functype name='xmlHashScannerFull' file='hash'>
+ <info>Callback when scanning data in a hash with the full scanner.</info>
+ <return type='void'/>
+ <arg name='payload' type='void *' info='the data in the hash'/>
+ <arg name='data' type='void *' info='extra scannner data'/>
+ <arg name='name' type='const xmlChar *' info='the name associated'/>
+ <arg name='name2' type='const xmlChar *' info='the second name associated'/>
+ <arg name='name3' type='const xmlChar *' info='the third name associated'/>
+ </functype>
+ <function name='xmlHashSize' file='hash'>
+ <info>Query the number of elements installed in the hash @table.</info>
+ <return type='int' info='the number of elements in the hash table or -1 in case of error'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ </function>
+ <function name='xmlHashUpdateEntry' file='hash'>
+ <info>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Existing entry for this @name will be removed and freed with @f if found.</info>
+ <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='userdata' type='void *' info='a pointer to the userdata'/>
+ <arg name='f' type='xmlHashDeallocator' info='the deallocator function for replaced item (if any)'/>
+ </function>
+ <function name='xmlHashUpdateEntry2' file='hash'>
+ <info>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Existing entry for this tuple will be removed and freed with @f if found.</info>
+ <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <arg name='userdata' type='void *' info='a pointer to the userdata'/>
+ <arg name='f' type='xmlHashDeallocator' info='the deallocator function for replaced item (if any)'/>
+ </function>
+ <function name='xmlHashUpdateEntry3' file='hash'>
+ <info>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Existing entry for this tuple will be removed and freed with @f if found.</info>
+ <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
+ <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
+ <arg name='userdata' type='void *' info='a pointer to the userdata'/>
+ <arg name='f' type='xmlHashDeallocator' info='the deallocator function for replaced item (if any)'/>
+ </function>
+ <function name='xmlIOFTPClose' file='xmlIO'>
+ <info>Close an FTP I/O channel</info>
+ <return type='int' info='0'/>
+ <arg name='context' type='void *' info='the I/O context'/>
+ </function>
+ <function name='xmlIOFTPMatch' file='xmlIO'>
+ <info>check if the URI matches an FTP one</info>
+ <return type='int' info='1 if matches, 0 otherwise'/>
+ <arg name='filename' type='const char *' info='the URI for matching'/>
+ </function>
+ <function name='xmlIOFTPOpen' file='xmlIO'>
+ <info>open an FTP I/O channel</info>
+ <return type='void *' info='an I/O context or NULL in case of error'/>
+ <arg name='filename' type='const char *' info='the URI for matching'/>
+ </function>
+ <function name='xmlIOFTPRead' file='xmlIO'>
+ <info>Read @len bytes to @buffer from the I/O channel.</info>
+ <return type='int' info='the number of bytes written'/>
+ <arg name='context' type='void *' info='the I/O context'/>
+ <arg name='buffer' type='char *' info='where to drop data'/>
+ <arg name='len' type='int' info='number of bytes to write'/>
+ </function>
+ <function name='xmlIOHTTPClose' file='xmlIO'>
+ <info>Close an HTTP I/O channel</info>
+ <return type='int' info='0'/>
+ <arg name='context' type='void *' info='the I/O context'/>
+ </function>
+ <function name='xmlIOHTTPMatch' file='xmlIO'>
+ <info>check if the URI matches an HTTP one</info>
+ <return type='int' info='1 if matches, 0 otherwise'/>
+ <arg name='filename' type='const char *' info='the URI for matching'/>
+ </function>
+ <function name='xmlIOHTTPOpen' file='xmlIO'>
+ <info>open an HTTP I/O channel</info>
+ <return type='void *' info='an I/O context or NULL in case of error'/>
+ <arg name='filename' type='const char *' info='the URI for matching'/>
+ </function>
+ <function name='xmlIOHTTPOpenW' file='xmlIO'>
+ <info>Open a temporary buffer to collect the document for a subsequent HTTP POST request. Non-static as is called from the output buffer creation routine.</info>
+ <return type='void *' info='an I/O context or NULL in case of error.'/>
+ <arg name='post_uri' type='const char *' info='The destination URI for the document'/>
+ <arg name='compression' type='int' info='The compression desired for the document.'/>
+ </function>
+ <function name='xmlIOHTTPRead' file='xmlIO'>
+ <info>Read @len bytes to @buffer from the I/O channel.</info>
+ <return type='int' info='the number of bytes written'/>
+ <arg name='context' type='void *' info='the I/O context'/>
+ <arg name='buffer' type='char *' info='where to drop data'/>
+ <arg name='len' type='int' info='number of bytes to write'/>
+ </function>
+ <function name='xmlIOParseDTD' file='parser'>
+ <info>Load and parse a DTD</info>
+ <return type='xmlDtdPtr' info='the resulting xmlDtdPtr or NULL in case of error. @input will be freed at parsing end.'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler block or NULL'/>
+ <arg name='input' type='xmlParserInputBufferPtr' info='an Input Buffer'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlInitCharEncodingHandlers' file='encoding'>
+ <info>Initialize the char encoding support, it registers the default encoding supported. NOTE: while public, this function usually doesn&apos;t need to be called in normal processing.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlInitGlobals' file='globals'>
+ <info>Additional initialisation for multi-threading</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlInitMemory' file='xmlmemory'>
+ <info>Initialize the memory layer.</info>
+ <return type='int' info='0 on success'/>
+ </function>
+ <function name='xmlInitNodeInfoSeq' file='parser'>
+ <info>-- Initialize (set to initial state) node info sequence</info>
+ <return type='void'/>
+ <arg name='seq' type='xmlParserNodeInfoSeqPtr' info='a node info sequence pointer'/>
+ </function>
+ <function name='xmlInitParser' file='parser'>
+ <info>Initialization function for the XML parser. This is not reentrant. Call once before processing in case of use in multithreaded programs.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlInitParserCtxt' file='parser'>
+ <info>Initialize a parser context</info>
+ <return type='int' info='0 in case of success and -1 in case of error'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlInitThreads' file='threads'>
+ <info>xmlInitThreads() is used to to initialize all the thread related data of the libxml2 library.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlInitializeCatalog' file='catalog'>
+ <info>Do the catalog initialization. this function is not thread safe, catalog initialization should preferably be done once at startup</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlInitializeGlobalState' file='globals'>
+ <info>xmlInitializeGlobalState() initialize a global state with all the default values of the library.</info>
+ <return type='void'/>
+ <arg name='gs' type='xmlGlobalStatePtr' info='a pointer to a newly allocated global state'/>
+ </function>
+ <function name='xmlInitializePredefinedEntities' file='entities'>
+ <info>Set up the predefined entities. Deprecated call</info>
+ <return type='void'/>
+ </function>
+ <functype name='xmlInputCloseCallback' file='xmlIO'>
+ <info>Callback used in the I/O Input API to close the resource</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='context' type='void *' info='an Input context'/>
+ </functype>
+ <functype name='xmlInputMatchCallback' file='xmlIO'>
+ <info>Callback used in the I/O Input API to detect if the current handler can provide input fonctionnalities for this resource.</info>
+ <return type='int' info='1 if yes and 0 if another Input module should be used'/>
+ <arg name='filename' type='char const *' info='the filename or URI'/>
+ </functype>
+ <functype name='xmlInputOpenCallback' file='xmlIO'>
+ <info>Callback used in the I/O Input API to open the resource</info>
+ <return type='void *' info='an Input context or NULL in case or error'/>
+ <arg name='filename' type='char const *' info='the filename or URI'/>
+ </functype>
+ <functype name='xmlInputReadCallback' file='xmlIO'>
+ <info>Callback used in the I/O Input API to read the resource</info>
+ <return type='int' info='the number of bytes read or -1 in case of error'/>
+ <arg name='context' type='void *' info='an Input context'/>
+ <arg name='buffer' type='char *' info='the buffer to store data read'/>
+ <arg name='len' type='int' info='the length of the buffer in bytes'/>
+ </functype>
+ <function name='xmlIsBaseChar' file='chvalid'>
+ <info>This function is DEPRECATED. Use xmlIsBaseChar_ch or xmlIsBaseCharQ instead</info>
+ <return type='int' info='true if argument valid, false otherwise'/>
+ <arg name='ch' type='unsigned int' info='character to validate'/>
+ </function>
+ <function name='xmlIsBlank' file='chvalid'>
+ <info>This function is DEPRECATED. Use xmlIsBlank_ch or xmlIsBlankQ instead</info>
+ <return type='int' info='true if argument valid, false otherwise'/>
+ <arg name='ch' type='unsigned int' info='character to validate'/>
+ </function>
+ <function name='xmlIsBlankNode' file='tree'>
+ <info>Checks whether this node is an empty or whitespace only (and possibly ignorable) text-node.</info>
+ <return type='int' info='1 yes, 0 no'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ </function>
+ <function name='xmlIsChar' file='chvalid'>
+ <info>This function is DEPRECATED. Use xmlIsChar_ch or xmlIsCharQ instead</info>
+ <return type='int' info='true if argument valid, false otherwise'/>
+ <arg name='ch' type='unsigned int' info='character to validate'/>
+ </function>
+ <function name='xmlIsCombining' file='chvalid'>
+ <info>This function is DEPRECATED. Use xmlIsCombiningQ instead</info>
+ <return type='int' info='true if argument valid, false otherwise'/>
+ <arg name='ch' type='unsigned int' info='character to validate'/>
+ </function>
+ <function name='xmlIsDigit' file='chvalid'>
+ <info>This function is DEPRECATED. Use xmlIsDigit_ch or xmlIsDigitQ instead</info>
+ <return type='int' info='true if argument valid, false otherwise'/>
+ <arg name='ch' type='unsigned int' info='character to validate'/>
+ </function>
+ <function name='xmlIsExtender' file='chvalid'>
+ <info>This function is DEPRECATED. Use xmlIsExtender_ch or xmlIsExtenderQ instead</info>
+ <return type='int' info='true if argument valid, false otherwise'/>
+ <arg name='ch' type='unsigned int' info='character to validate'/>
+ </function>
+ <function name='xmlIsID' file='valid'>
+ <info>Determine whether an attribute is of type ID. In case we have DTD(s) then this is done if DTD loading has been requested. In the case of HTML documents parsed with the HTML parser, then ID detection is done systematically.</info>
+ <return type='int' info='0 or 1 depending on the lookup result'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='elem' type='xmlNodePtr' info='the element carrying the attribute'/>
+ <arg name='attr' type='xmlAttrPtr' info='the attribute'/>
+ </function>
+ <function name='xmlIsIdeographic' file='chvalid'>
+ <info>This function is DEPRECATED. Use xmlIsIdeographicQ instead</info>
+ <return type='int' info='true if argument valid, false otherwise'/>
+ <arg name='ch' type='unsigned int' info='character to validate'/>
+ </function>
+ <function name='xmlIsLetter' file='parserInternals'>
+ <info>Check whether the character is allowed by the production [84] Letter ::= BaseChar | Ideographic</info>
+ <return type='int' info='0 if not, non-zero otherwise'/>
+ <arg name='c' type='int' info='an unicode character (int)'/>
+ </function>
+ <function name='xmlIsMainThread' file='threads'>
+ <info>xmlIsMainThread() check whether the current thread is the main thread.</info>
+ <return type='int' info='1 if the current thread is the main thread, 0 otherwise'/>
+ </function>
+ <function name='xmlIsMixedElement' file='valid'>
+ <info>Search in the DtDs whether an element accept Mixed content (or ANY) basically if it is supposed to accept text childs</info>
+ <return type='int' info='0 if no, 1 if yes, and -1 if no element description is available'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='name' type='const xmlChar *' info='the element name'/>
+ </function>
+ <function name='xmlIsPubidChar' file='chvalid'>
+ <info>This function is DEPRECATED. Use xmlIsPubidChar_ch or xmlIsPubidCharQ instead</info>
+ <return type='int' info='true if argument valid, false otherwise'/>
+ <arg name='ch' type='unsigned int' info='character to validate'/>
+ </function>
+ <function name='xmlIsRef' file='valid'>
+ <info>Determine whether an attribute is of type Ref. In case we have DTD(s) then this is simple, otherwise we use an heuristic: name Ref (upper or lowercase).</info>
+ <return type='int' info='0 or 1 depending on the lookup result'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='elem' type='xmlNodePtr' info='the element carrying the attribute'/>
+ <arg name='attr' type='xmlAttrPtr' info='the attribute'/>
+ </function>
+ <function name='xmlIsXHTML' file='tree'>
+ <info>Try to find if the document correspond to an XHTML DTD</info>
+ <return type='int' info='1 if true, 0 if not and -1 in case of error'/>
+ <arg name='systemID' type='const xmlChar *' info='the system identifier'/>
+ <arg name='publicID' type='const xmlChar *' info='the public identifier'/>
+ </function>
+ <function name='xmlKeepBlanksDefault' file='parser'>
+ <info>Set and return the previous value for default blanks text nodes support. The 1.x version of the parser used an heuristic to try to detect ignorable white spaces. As a result the SAX callback was generating xmlSAX2IgnorableWhitespace() callbacks instead of characters() one, and when using the DOM output text nodes containing those blanks were not generated. The 2.x and later version will switch to the XML standard way and ignorableWhitespace() are only generated when running the parser in validating mode and when the current element doesn&apos;t allow CDATA or mixed content. This function is provided as a way to force the standard behavior on 1.X libs and to switch back to the old mode for compatibility when running 1.X client code on 2.X . Upgrade of 1.X code should be done by using xmlIsBlankNode() commodity function to detect the &quot;empty&quot; nodes generated. This value also affect autogeneration of indentation when saving code if blanks sections are kept, indentation is not generated.</info>
+ <return type='int' info='the last value for 0 for no substitution, 1 for substitution.'/>
+ <arg name='val' type='int' info='int 0 or 1'/>
+ </function>
+ <function name='xmlLineNumbersDefault' file='parser'>
+ <info>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.</info>
+ <return type='int' info='the last value for 0 for no substitution, 1 for substitution.'/>
+ <arg name='val' type='int' info='int 0 or 1'/>
+ </function>
+ <function name='xmlLinkGetData' file='list'>
+ <info>See Returns.</info>
+ <return type='void *' info='a pointer to the data referenced from this link'/>
+ <arg name='lk' type='xmlLinkPtr' info='a link'/>
+ </function>
+ <function name='xmlListAppend' file='list'>
+ <info>Insert data in the ordered list at the end for this value</info>
+ <return type='int' info='0 in case of success, 1 in case of failure'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='data' type='void *' info='the data'/>
+ </function>
+ <function name='xmlListClear' file='list'>
+ <info>Remove the all data in the list</info>
+ <return type='void'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListCopy' file='list'>
+ <info>Move all the element from the old list in the new list</info>
+ <return type='int' info='0 in case of success 1 in case of error'/>
+ <arg name='cur' type='xmlListPtr' info='the new list'/>
+ <arg name='old' type='const xmlListPtr' info='the old list'/>
+ </function>
+ <function name='xmlListCreate' file='list'>
+ <info>Create a new list</info>
+ <return type='xmlListPtr' info='the new list or NULL in case of error'/>
+ <arg name='deallocator' type='xmlListDeallocator' info='an optional deallocator function'/>
+ <arg name='compare' type='xmlListDataCompare' info='an optional comparison function'/>
+ </function>
+ <functype name='xmlListDataCompare' file='list'>
+ <info>Callback function used to compare 2 data.</info>
+ <return type='int' info='0 is equality, -1 or 1 otherwise depending on the ordering.'/>
+ <arg name='data0' type='const void *' info='the first data'/>
+ <arg name='data1' type='const void *' info='the second data'/>
+ </functype>
+ <functype name='xmlListDeallocator' file='list'>
+ <info>Callback function used to free data from a list.</info>
+ <return type='void'/>
+ <arg name='lk' type='xmlLinkPtr' info='the data to deallocate'/>
+ </functype>
+ <function name='xmlListDelete' file='list'>
+ <info>Deletes the list and its associated data</info>
+ <return type='void'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListDup' file='list'>
+ <info>Duplicate the list</info>
+ <return type='xmlListPtr' info='a new copy of the list or NULL in case of error'/>
+ <arg name='old' type='const xmlListPtr' info='the list'/>
+ </function>
+ <function name='xmlListEmpty' file='list'>
+ <info>Is the list empty ?</info>
+ <return type='int' info='1 if the list is empty, 0 otherwise'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListEnd' file='list'>
+ <info>Get the last element in the list</info>
+ <return type='xmlLinkPtr' info='the last element in the list, or NULL'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListFront' file='list'>
+ <info>Get the first element in the list</info>
+ <return type='xmlLinkPtr' info='the first element in the list, or NULL'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListInsert' file='list'>
+ <info>Insert data in the ordered list at the beginning for this value</info>
+ <return type='int' info='0 in case of success, 1 in case of failure'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='data' type='void *' info='the data'/>
+ </function>
+ <function name='xmlListMerge' file='list'>
+ <info>include all the elements of the second list in the first one and clear the second list</info>
+ <return type='void'/>
+ <arg name='l1' type='xmlListPtr' info='the original list'/>
+ <arg name='l2' type='xmlListPtr' info='the new list'/>
+ </function>
+ <function name='xmlListPopBack' file='list'>
+ <info>Removes the last element in the list</info>
+ <return type='void'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListPopFront' file='list'>
+ <info>Removes the first element in the list</info>
+ <return type='void'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListPushBack' file='list'>
+ <info>add the new data at the end of the list</info>
+ <return type='int' info='1 if successful, 0 otherwise'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='data' type='void *' info='new data'/>
+ </function>
+ <function name='xmlListPushFront' file='list'>
+ <info>add the new data at the beginning of the list</info>
+ <return type='int' info='1 if successful, 0 otherwise'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='data' type='void *' info='new data'/>
+ </function>
+ <function name='xmlListRemoveAll' file='list'>
+ <info>Remove the all instance associated to data in the list</info>
+ <return type='int' info='the number of deallocation, or 0 if not found'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='data' type='void *' info='list data'/>
+ </function>
+ <function name='xmlListRemoveFirst' file='list'>
+ <info>Remove the first instance associated to data in the list</info>
+ <return type='int' info='1 if a deallocation occured, or 0 if not found'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='data' type='void *' info='list data'/>
+ </function>
+ <function name='xmlListRemoveLast' file='list'>
+ <info>Remove the last instance associated to data in the list</info>
+ <return type='int' info='1 if a deallocation occured, or 0 if not found'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='data' type='void *' info='list data'/>
+ </function>
+ <function name='xmlListReverse' file='list'>
+ <info>Reverse the order of the elements in the list</info>
+ <return type='void'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListReverseSearch' file='list'>
+ <info>Search the list in reverse order for an existing value of @data</info>
+ <return type='void *' info='the value associated to @data or NULL in case of error'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='data' type='void *' info='a search value'/>
+ </function>
+ <function name='xmlListReverseWalk' file='list'>
+ <info>Walk all the element of the list in reverse order and apply the walker function to it</info>
+ <return type='void'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='walker' type='xmlListWalker' info='a processing function'/>
+ <arg name='user' type='const void *' info='a user parameter passed to the walker function'/>
+ </function>
+ <function name='xmlListSearch' file='list'>
+ <info>Search the list for an existing value of @data</info>
+ <return type='void *' info='the value associated to @data or NULL in case of error'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='data' type='void *' info='a search value'/>
+ </function>
+ <function name='xmlListSize' file='list'>
+ <info>Get the number of elements in the list</info>
+ <return type='int' info='the number of elements in the list'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListSort' file='list'>
+ <info>Sort all the elements in the list</info>
+ <return type='void'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ </function>
+ <function name='xmlListWalk' file='list'>
+ <info>Walk all the element of the first from first to last and apply the walker function to it</info>
+ <return type='void'/>
+ <arg name='l' type='xmlListPtr' info='a list'/>
+ <arg name='walker' type='xmlListWalker' info='a processing function'/>
+ <arg name='user' type='const void *' info='a user parameter passed to the walker function'/>
+ </function>
+ <functype name='xmlListWalker' file='list'>
+ <info>Callback function used when walking a list with xmlListWalk().</info>
+ <return type='int' info='0 to stop walking the list, 1 otherwise.'/>
+ <arg name='data' type='const void *' info='the data found in the list'/>
+ <arg name='user' type='const void *' info='extra user provided data to the walker'/>
+ </functype>
+ <function name='xmlLoadACatalog' file='catalog'>
+ <info>Load the catalog and build the associated data structures. This can be either an XML Catalog or an SGML Catalog It will recurse in SGML CATALOG entries. On the other hand XML Catalogs are not handled recursively.</info>
+ <return type='xmlCatalogPtr' info='the catalog parsed or NULL in case of error'/>
+ <arg name='filename' type='const char *' info='a file path'/>
+ </function>
+ <function name='xmlLoadCatalog' file='catalog'>
+ <info>Load the catalog and makes its definitions effective for the default external entity loader. It will recurse in SGML CATALOG entries. this function is not thread safe, catalog initialization should preferably be done once at startup</info>
+ <return type='int' info='0 in case of success -1 in case of error'/>
+ <arg name='filename' type='const char *' info='a file path'/>
+ </function>
+ <function name='xmlLoadCatalogs' file='catalog'>
+ <info>Load the catalogs and makes their definitions effective for the default external entity loader. this function is not thread safe, catalog initialization should preferably be done once at startup</info>
+ <return type='void'/>
+ <arg name='pathss' type='const char *' info='a list of directories separated by a colon or a space.'/>
+ </function>
+ <function name='xmlLoadExternalEntity' file='parser'>
+ <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>
+ <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'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the context in which the entity is called or NULL'/>
+ </function>
+ <function name='xmlLoadSGMLSuperCatalog' file='catalog'>
+ <info>Load an SGML super catalog. It won&apos;t expand CATALOG or DELEGATE references. This is only needed for manipulating SGML Super Catalogs like adding and removing CATALOG or DELEGATE entries.</info>
+ <return type='xmlCatalogPtr' info='the catalog parsed or NULL in case of error'/>
+ <arg name='filename' type='const char *' info='a file path'/>
+ </function>
+ <function name='xmlLockLibrary' file='threads'>
+ <info>xmlLockLibrary() is used to take out a re-entrant lock on the libxml2 library.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlLsCountNode' file='debugXML'>
+ <info>Count the children of @node.</info>
+ <return type='int' info='the number of children of @node.'/>
+ <arg name='node' type='xmlNodePtr' info='the node to count'/>
+ </function>
+ <function name='xmlLsOneNode' file='debugXML'>
+ <info>Dump to @output the type and name of @node.</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='node' type='xmlNodePtr' info='the node to dump'/>
+ </function>
+ <function name='xmlMallocAtomicLoc' file='xmlmemory'>
+ <info>a malloc() equivalent, with logging of the allocation info.</info>
+ <return type='void *' info='a pointer to the allocated area or NULL in case of lack of memory.'/>
+ <arg name='size' type='size_t' info='an int specifying the size in byte to allocate.'/>
+ <arg name='file' type='const char *' info='the file name or NULL'/>
+ <arg name='line' type='int' info='the line number'/>
+ </function>
+ <functype name='xmlMallocFunc' file='xmlmemory'>
+ <info>Signature for a malloc() implementation.</info>
+ <return type='void *' info='a pointer to the newly allocated block or NULL in case of error.'/>
+ <arg name='size' type='size_t' info='the size requested in bytes'/>
+ </functype>
+ <function name='xmlMallocLoc' file='xmlmemory'>
+ <info>a malloc() equivalent, with logging of the allocation info.</info>
+ <return type='void *' info='a pointer to the allocated area or NULL in case of lack of memory.'/>
+ <arg name='size' type='size_t' info='an int specifying the size in byte to allocate.'/>
+ <arg name='file' type='const char *' info='the file name or NULL'/>
+ <arg name='line' type='int' info='the line number'/>
+ </function>
+ <function name='xmlMemDisplay' file='xmlmemory'>
+ <info>show in-extenso the memory blocks allocated</info>
+ <return type='void'/>
+ <arg name='fp' type='FILE *' info='a FILE descriptor used as the output file, if NULL, the result is written to the file .memorylist'/>
+ </function>
+ <function name='xmlMemFree' file='xmlmemory'>
+ <info>a free() equivalent, with error checking.</info>
+ <return type='void'/>
+ <arg name='ptr' type='void *' info='the memory block pointer'/>
+ </function>
+ <function name='xmlMemGet' file='xmlmemory'>
+ <info>Provides the memory access functions set currently in use</info>
+ <return type='int' info='0 on success'/>
+ <arg name='freeFunc' type='xmlFreeFunc *' info='place to save the free() function in use'/>
+ <arg name='mallocFunc' type='xmlMallocFunc *' info='place to save the malloc() function in use'/>
+ <arg name='reallocFunc' type='xmlReallocFunc *' info='place to save the realloc() function in use'/>
+ <arg name='strdupFunc' type='xmlStrdupFunc *' info='place to save the strdup() function in use'/>
+ </function>
+ <function name='xmlMemMalloc' file='xmlmemory'>
+ <info>a malloc() equivalent, with logging of the allocation info.</info>
+ <return type='void *' info='a pointer to the allocated area or NULL in case of lack of memory.'/>
+ <arg name='size' type='size_t' info='an int specifying the size in byte to allocate.'/>
+ </function>
+ <function name='xmlMemRealloc' file='xmlmemory'>
+ <info>a realloc() equivalent, with logging of the allocation info.</info>
+ <return type='void *' info='a pointer to the allocated area or NULL in case of lack of memory.'/>
+ <arg name='ptr' type='void *' info='the initial memory block pointer'/>
+ <arg name='size' type='size_t' info='an int specifying the size in byte to allocate.'/>
+ </function>
+ <function name='xmlMemSetup' file='xmlmemory'>
+ <info>Override the default memory access functions with a new set This has to be called before any other libxml routines ! Should this be blocked if there was already some allocations done ?</info>
+ <return type='int' info='0 on success'/>
+ <arg name='freeFunc' type='xmlFreeFunc' info='the free() function to use'/>
+ <arg name='mallocFunc' type='xmlMallocFunc' info='the malloc() function to use'/>
+ <arg name='reallocFunc' type='xmlReallocFunc' info='the realloc() function to use'/>
+ <arg name='strdupFunc' type='xmlStrdupFunc' info='the strdup() function to use'/>
+ </function>
+ <function name='xmlMemShow' file='xmlmemory'>
+ <info>show a show display of the memory allocated, and dump the @nr last allocated areas which were not freed</info>
+ <return type='void'/>
+ <arg name='fp' type='FILE *' info='a FILE descriptor used as the output file'/>
+ <arg name='nr' type='int' info='number of entries to dump'/>
+ </function>
+ <function name='xmlMemStrdupLoc' file='xmlmemory'>
+ <info>a strdup() equivalent, with logging of the allocation info.</info>
+ <return type='char *' info='a pointer to the new string or NULL if allocation error occurred.'/>
+ <arg name='str' type='const char *' info='the initial string pointer'/>
+ <arg name='file' type='const char *' info='the file name or NULL'/>
+ <arg name='line' type='int' info='the line number'/>
+ </function>
+ <function name='xmlMemUsed' file='xmlmemory'>
+ <info>Provides the amount of memory currently allocated</info>
+ <return type='int' info='an int representing the amount of memory allocated.'/>
+ </function>
+ <function name='xmlMemoryDump' file='xmlmemory'>
+ <info>Dump in-extenso the memory blocks allocated to the file .memorylist</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlMemoryStrdup' file='xmlmemory'>
+ <info>a strdup() equivalent, with logging of the allocation info.</info>
+ <return type='char *' info='a pointer to the new string or NULL if allocation error occurred.'/>
+ <arg name='str' type='const char *' info='the initial string pointer'/>
+ </function>
+ <function name='xmlMutexLock' file='threads'>
+ <info>xmlMutexLock() is used to lock a libxml2 token.</info>
+ <return type='void'/>
+ <arg name='tok' type='xmlMutexPtr' info='the simple mutex'/>
+ </function>
+ <function name='xmlMutexUnlock' file='threads'>
+ <info>xmlMutexUnlock() is used to unlock a libxml2 token.</info>
+ <return type='void'/>
+ <arg name='tok' type='xmlMutexPtr' info='the simple mutex'/>
+ </function>
+ <function name='xmlNamespaceParseNCName' file='parserInternals'>
+ <info>parse an XML namespace name. TODO: this seems not in use anymore, the namespace handling is done on top of the SAX interfaces, i.e. not on raw input. [NS 3] NCName ::= (Letter | &apos;_&apos;) (NCNameChar)* [NS 4] NCNameChar ::= Letter | Digit | &apos;.&apos; | &apos;-&apos; | &apos;_&apos; | CombiningChar | Extender</info>
+ <return type='xmlChar *' info='the namespace name or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlNamespaceParseNSDef' file='parserInternals'>
+ <info>parse a namespace prefix declaration TODO: this seems not in use anymore, the namespace handling is done on top of the SAX interfaces, i.e. not on raw input. [NS 1] NSDef ::= PrefixDef Eq SystemLiteral [NS 2] PrefixDef ::= &apos;xmlns&apos; (&apos;:&apos; NCName)?</info>
+ <return type='xmlChar *' info='the namespace name'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlNamespaceParseQName' file='parserInternals'>
+ <info>TODO: this seems not in use anymore, the namespace handling is done on top of the SAX interfaces, i.e. not on raw input. parse an XML qualified name [NS 5] QName ::= (Prefix &apos;:&apos;)? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName</info>
+ <return type='xmlChar *' info='the local part, and prefix is updated to get the Prefix if any.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='prefix' type='xmlChar **' info='a xmlChar **'/>
+ </function>
+ <function name='xmlNanoFTPCheckResponse' file='nanoftp'>
+ <info>Check if there is a response from the FTP server after a command.</info>
+ <return type='int' info='the code number, or 0'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ </function>
+ <function name='xmlNanoFTPCleanup' file='nanoftp'>
+ <info>Cleanup the FTP protocol layer. This cleanup proxy informations.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlNanoFTPClose' file='nanoftp'>
+ <info>Close the connection and both control and transport</info>
+ <return type='int' info='-1 incase of error, 0 otherwise'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ </function>
+ <function name='xmlNanoFTPCloseConnection' file='nanoftp'>
+ <info>Close the data connection from the server</info>
+ <return type='int' info='-1 incase of error, 0 otherwise'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ </function>
+ <function name='xmlNanoFTPConnect' file='nanoftp'>
+ <info>Tries to open a control connection</info>
+ <return type='int' info='-1 in case of error, 0 otherwise'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ </function>
+ <function name='xmlNanoFTPConnectTo' file='nanoftp'>
+ <info>Tries to open a control connection to the given server/port</info>
+ <return type='void *' info='an fTP context or NULL if it failed'/>
+ <arg name='server' type='const char *' info='an FTP server name'/>
+ <arg name='port' type='int' info='the port (use 21 if 0)'/>
+ </function>
+ <function name='xmlNanoFTPCwd' file='nanoftp'>
+ <info>Tries to change the remote directory</info>
+ <return type='int' info='-1 incase of error, 1 if CWD worked, 0 if it failed'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ <arg name='directory' type='char *' info='a directory on the server'/>
+ </function>
+ <function name='xmlNanoFTPDele' file='nanoftp'>
+ <info>Tries to delete an item (file or directory) from server</info>
+ <return type='int' info='-1 incase of error, 1 if DELE worked, 0 if it failed'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ <arg name='file' type='char *' info='a file or directory on the server'/>
+ </function>
+ <function name='xmlNanoFTPFreeCtxt' file='nanoftp'>
+ <info>Frees the context after closing the connection.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ </function>
+ <function name='xmlNanoFTPGet' file='nanoftp'>
+ <info>Fetch the given file from the server. All data are passed back in the callbacks. The last callback has a size of 0 block.</info>
+ <return type='int' info='-1 incase of error, 0 otherwise'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ <arg name='callback' type='ftpDataCallback' info='the user callback'/>
+ <arg name='userData' type='void *' info='the user callback data'/>
+ <arg name='filename' type='const char *' info='the file to retrieve'/>
+ </function>
+ <function name='xmlNanoFTPGetConnection' file='nanoftp'>
+ <info>Try to open a data connection to the server. Currently only passive mode is supported.</info>
+ <return type='int' info='-1 incase of error, 0 otherwise'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ </function>
+ <function name='xmlNanoFTPGetResponse' file='nanoftp'>
+ <info>Get the response from the FTP server after a command.</info>
+ <return type='int' info='the code number'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ </function>
+ <function name='xmlNanoFTPGetSocket' file='nanoftp'>
+ <info>Initiate fetch of the given file from the server.</info>
+ <return type='int' info='the socket for the data connection, or &lt;0 in case of error'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ <arg name='filename' type='const char *' info='the file to retrieve (or NULL if path is in context).'/>
+ </function>
+ <function name='xmlNanoFTPInit' file='nanoftp'>
+ <info>Initialize the FTP protocol layer. Currently it just checks for proxy informations, and get the hostname</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlNanoFTPList' file='nanoftp'>
+ <info>Do a listing on the server. All files info are passed back in the callbacks.</info>
+ <return type='int' info='-1 incase of error, 0 otherwise'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ <arg name='callback' type='ftpListCallback' info='the user callback'/>
+ <arg name='userData' type='void *' info='the user callback data'/>
+ <arg name='filename' type='char *' info='optional files to list'/>
+ </function>
+ <function name='xmlNanoFTPNewCtxt' file='nanoftp'>
+ <info>Allocate and initialize a new FTP context.</info>
+ <return type='void *' info='an FTP context or NULL in case of error.'/>
+ <arg name='URL' type='const char *' info='The URL used to initialize the context'/>
+ </function>
+ <function name='xmlNanoFTPOpen' file='nanoftp'>
+ <info>Start to fetch the given ftp:// resource</info>
+ <return type='void *' info='an FTP context, or NULL'/>
+ <arg name='URL' type='const char *' info='the URL to the resource'/>
+ </function>
+ <function name='xmlNanoFTPProxy' file='nanoftp'>
+ <info>Setup the FTP proxy informations. This can also be done by using ftp_proxy ftp_proxy_user and ftp_proxy_password environment variables.</info>
+ <return type='void'/>
+ <arg name='host' type='const char *' info='the proxy host name'/>
+ <arg name='port' type='int' info='the proxy port'/>
+ <arg name='user' type='const char *' info='the proxy user name'/>
+ <arg name='passwd' type='const char *' info='the proxy password'/>
+ <arg name='type' type='int' info='the type of proxy 1 for using SITE, 2 for USER a@b'/>
+ </function>
+ <function name='xmlNanoFTPQuit' file='nanoftp'>
+ <info>Send a QUIT command to the server</info>
+ <return type='int' info='-1 in case of error, 0 otherwise'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ </function>
+ <function name='xmlNanoFTPRead' file='nanoftp'>
+ <info>This function tries to read @len bytes from the existing FTP connection and saves them in @dest. This is a blocking call.</info>
+ <return type='int' info='the number of byte read. 0 is an indication of an end of connection. -1 indicates a parameter error.'/>
+ <arg name='ctx' type='void *' info='the FTP context'/>
+ <arg name='dest' type='void *' info='a buffer'/>
+ <arg name='len' type='int' info='the buffer length'/>
+ </function>
+ <function name='xmlNanoFTPScanProxy' file='nanoftp'>
+ <info>(Re)Initialize the FTP Proxy context by parsing the URL and finding the protocol host port it indicates. Should be like ftp://myproxy/ or ftp://myproxy:3128/ A NULL URL cleans up proxy informations.</info>
+ <return type='void'/>
+ <arg name='URL' type='const char *' info='The proxy URL used to initialize the proxy context'/>
+ </function>
+ <function name='xmlNanoFTPUpdateURL' file='nanoftp'>
+ <info>Update an FTP context by parsing the URL and finding new path it indicates. If there is an error in the protocol, hostname, port or other information, the error is raised. It indicates a new connection has to be established.</info>
+ <return type='int' info='0 if Ok, -1 in case of error (other host).'/>
+ <arg name='ctx' type='void *' info='an FTP context'/>
+ <arg name='URL' type='const char *' info='The URL used to update the context'/>
+ </function>
+ <function name='xmlNanoHTTPAuthHeader' file='nanohttp'>
+ <info>Get the authentication header of an HTTP context</info>
+ <return type='const char *' info='the stashed value of the WWW-Authenticate or Proxy-Authenticate header.'/>
+ <arg name='ctx' type='void *' info='the HTTP context'/>
+ </function>
+ <function name='xmlNanoHTTPCleanup' file='nanohttp'>
+ <info>Cleanup the HTTP protocol layer.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlNanoHTTPClose' file='nanohttp'>
+ <info>This function closes an HTTP context, it ends up the connection and free all data related to it.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the HTTP context'/>
+ </function>
+ <function name='xmlNanoHTTPEncoding' file='nanohttp'>
+ <info>Provides the specified encoding if specified in the HTTP headers.</info>
+ <return type='const char *' info='the specified encoding or NULL if not available'/>
+ <arg name='ctx' type='void *' info='the HTTP context'/>
+ </function>
+ <function name='xmlNanoHTTPFetch' file='nanohttp'>
+ <info>This function try to fetch the indicated resource via HTTP GET and save it&apos;s content in the file.</info>
+ <return type='int' info='-1 in case of failure, 0 incase of success. The contentType, if provided must be freed by the caller'/>
+ <arg name='URL' type='const char *' info='The URL to load'/>
+ <arg name='filename' type='const char *' info='the filename where the content should be saved'/>
+ <arg name='contentType' type='char **' info='if available the Content-Type information will be returned at that location'/>
+ </function>
+ <function name='xmlNanoHTTPInit' file='nanohttp'>
+ <info>Initialize the HTTP protocol layer. Currently it just checks for proxy informations</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlNanoHTTPMethod' file='nanohttp'>
+ <info>This function try to open a connection to the indicated resource via HTTP using the given @method, adding the given extra headers and the input buffer for the request content.</info>
+ <return type='void *' info='NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller'/>
+ <arg name='URL' type='const char *' info='The URL to load'/>
+ <arg name='method' type='const char *' info='the HTTP method to use'/>
+ <arg name='input' type='const char *' info='the input string if any'/>
+ <arg name='contentType' type='char **' info='the Content-Type information IN and OUT'/>
+ <arg name='headers' type='const char *' info='the extra headers'/>
+ <arg name='ilen' type='int' info='input length'/>
+ </function>
+ <function name='xmlNanoHTTPMethodRedir' file='nanohttp'>
+ <info>This function try to open a connection to the indicated resource via HTTP using the given @method, adding the given extra headers and the input buffer for the request content.</info>
+ <return type='void *' info='NULL in case of failure, otherwise a request handler. The contentType, or redir, if provided must be freed by the caller'/>
+ <arg name='URL' type='const char *' info='The URL to load'/>
+ <arg name='method' type='const char *' info='the HTTP method to use'/>
+ <arg name='input' type='const char *' info='the input string if any'/>
+ <arg name='contentType' type='char **' info='the Content-Type information IN and OUT'/>
+ <arg name='redir' type='char **' info='the redirected URL OUT'/>
+ <arg name='headers' type='const char *' info='the extra headers'/>
+ <arg name='ilen' type='int' info='input length'/>
+ </function>
+ <function name='xmlNanoHTTPMimeType' file='nanohttp'>
+ <info>Provides the specified Mime-Type if specified in the HTTP headers.</info>
+ <return type='const char *' info='the specified Mime-Type or NULL if not available'/>
+ <arg name='ctx' type='void *' info='the HTTP context'/>
+ </function>
+ <function name='xmlNanoHTTPOpen' file='nanohttp'>
+ <info>This function try to open a connection to the indicated resource via HTTP GET.</info>
+ <return type='void *' info='NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller'/>
+ <arg name='URL' type='const char *' info='The URL to load'/>
+ <arg name='contentType' type='char **' info='if available the Content-Type information will be returned at that location'/>
+ </function>
+ <function name='xmlNanoHTTPOpenRedir' file='nanohttp'>
+ <info>This function try to open a connection to the indicated resource via HTTP GET.</info>
+ <return type='void *' info='NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller'/>
+ <arg name='URL' type='const char *' info='The URL to load'/>
+ <arg name='contentType' type='char **' info='if available the Content-Type information will be returned at that location'/>
+ <arg name='redir' type='char **' info='if available the redirected URL will be returned'/>
+ </function>
+ <function name='xmlNanoHTTPRead' file='nanohttp'>
+ <info>This function tries to read @len bytes from the existing HTTP connection and saves them in @dest. This is a blocking call.</info>
+ <return type='int' info='the number of byte read. 0 is an indication of an end of connection. -1 indicates a parameter error.'/>
+ <arg name='ctx' type='void *' info='the HTTP context'/>
+ <arg name='dest' type='void *' info='a buffer'/>
+ <arg name='len' type='int' info='the buffer length'/>
+ </function>
+ <function name='xmlNanoHTTPRedir' file='nanohttp'>
+ <info>Provides the specified redirection URL if available from the HTTP header.</info>
+ <return type='const char *' info='the specified redirection URL or NULL if not redirected.'/>
+ <arg name='ctx' type='void *' info='the HTTP context'/>
+ </function>
+ <function name='xmlNanoHTTPReturnCode' file='nanohttp'>
+ <info>Get the latest HTTP return code received</info>
+ <return type='int' info='the HTTP return code for the request.'/>
+ <arg name='ctx' type='void *' info='the HTTP context'/>
+ </function>
+ <function name='xmlNanoHTTPSave' file='nanohttp'>
+ <info>This function saves the output of the HTTP transaction to a file It closes and free the context at the end</info>
+ <return type='int' info='-1 in case of failure, 0 incase of success.'/>
+ <arg name='ctxt' type='void *' info='the HTTP context'/>
+ <arg name='filename' type='const char *' info='the filename where the content should be saved'/>
+ </function>
+ <function name='xmlNanoHTTPScanProxy' file='nanohttp'>
+ <info>(Re)Initialize the HTTP Proxy context by parsing the URL and finding the protocol host port it indicates. Should be like http://myproxy/ or http://myproxy:3128/ A NULL URL cleans up proxy informations.</info>
+ <return type='void'/>
+ <arg name='URL' type='const char *' info='The proxy URL used to initialize the proxy context'/>
+ </function>
+ <function name='xmlNewAutomata' file='xmlautomata'>
+ <info>Create a new automata</info>
+ <return type='xmlAutomataPtr' info='the new object or NULL in case of failure'/>
+ </function>
+ <function name='xmlNewCDataBlock' file='tree'>
+ <info>Creation of a new node containing a CDATA block.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='content' type='const xmlChar *' info='the CDATA block content content'/>
+ <arg name='len' type='int' info='the length of the block'/>
+ </function>
+ <function name='xmlNewCatalog' file='catalog'>
+ <info>create a new Catalog.</info>
+ <return type='xmlCatalogPtr' info='the xmlCatalogPtr or NULL in case of error'/>
+ <arg name='sgml' type='int' info='should this create an SGML catalog'/>
+ </function>
+ <function name='xmlNewCharEncodingHandler' file='encoding'>
+ <info>Create and registers an xmlCharEncodingHandler.</info>
+ <return type='xmlCharEncodingHandlerPtr' info='the xmlCharEncodingHandlerPtr created (or NULL in case of error).'/>
+ <arg name='name' type='const char *' info='the encoding name, in UTF-8 format (ASCII actually)'/>
+ <arg name='input' type='xmlCharEncodingInputFunc' info='the xmlCharEncodingInputFunc to read that encoding'/>
+ <arg name='output' type='xmlCharEncodingOutputFunc' info='the xmlCharEncodingOutputFunc to write that encoding'/>
+ </function>
+ <function name='xmlNewCharRef' file='tree'>
+ <info>Creation of a new character reference node.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='name' type='const xmlChar *' info='the char ref string, starting with # or &quot;&amp;# ... ;&quot;'/>
+ </function>
+ <function name='xmlNewChild' file='tree'>
+ <info>Creation of a new child element, added at the end of @parent children list. @ns and @content parameters are optional (NULL). If @ns is NULL, the newly created element inherits the namespace of @parent. If @content is non NULL, a child list containing the TEXTs and ENTITY_REFs node will be created. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references. XML special chars must be escaped first by using xmlEncodeEntitiesReentrant(), or xmlNewTextChild() should be used.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='parent' type='xmlNodePtr' info='the parent node'/>
+ <arg name='ns' type='xmlNsPtr' info='a namespace if any'/>
+ <arg name='name' type='const xmlChar *' info='the name of the child'/>
+ <arg name='content' type='const xmlChar *' info='the XML content of the child if any.'/>
+ </function>
+ <function name='xmlNewComment' file='tree'>
+ <info>Creation of a new node containing a comment.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='content' type='const xmlChar *' info='the comment content'/>
+ </function>
+ <function name='xmlNewDoc' file='tree'>
+ <info>Creates a new XML document</info>
+ <return type='xmlDocPtr' info='a new document'/>
+ <arg name='version' type='const xmlChar *' info='xmlChar string giving the version of XML &quot;1.0&quot;'/>
+ </function>
+ <function name='xmlNewDocComment' file='tree'>
+ <info>Creation of a new node containing a comment within a document.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='content' type='const xmlChar *' info='the comment content'/>
+ </function>
+ <function name='xmlNewDocFragment' file='tree'>
+ <info>Creation of a new Fragment node.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document owning the fragment'/>
+ </function>
+ <function name='xmlNewDocNode' file='tree'>
+ <info>Creation of a new node element within a document. @ns and @content are optional (NULL). NOTE: @content is supposed to be a piece of XML CDATA, so it allow entities references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you don&apos;t need entities support.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='ns' type='xmlNsPtr' info='namespace if any'/>
+ <arg name='name' type='const xmlChar *' info='the node name'/>
+ <arg name='content' type='const xmlChar *' info='the XML text content if any'/>
+ </function>
+ <function name='xmlNewDocNodeEatName' file='tree'>
+ <info>Creation of a new node element within a document. @ns and @content are optional (NULL). NOTE: @content is supposed to be a piece of XML CDATA, so it allow entities references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you don&apos;t need entities support.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='ns' type='xmlNsPtr' info='namespace if any'/>
+ <arg name='name' type='xmlChar *' info='the node name'/>
+ <arg name='content' type='const xmlChar *' info='the XML text content if any'/>
+ </function>
+ <function name='xmlNewDocProp' file='tree'>
+ <info>Create a new property carried by a document.</info>
+ <return type='xmlAttrPtr' info='a pointer to the attribute'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='name' type='const xmlChar *' info='the name of the attribute'/>
+ <arg name='value' type='const xmlChar *' info='the value of the attribute'/>
+ </function>
+ <function name='xmlNewDocRawNode' file='tree'>
+ <info>Creation of a new node element within a document. @ns and @content are optional (NULL).</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='ns' type='xmlNsPtr' info='namespace if any'/>
+ <arg name='name' type='const xmlChar *' info='the node name'/>
+ <arg name='content' type='const xmlChar *' info='the text content if any'/>
+ </function>
+ <function name='xmlNewDocText' file='tree'>
+ <info>Creation of a new text node within a document.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='content' type='const xmlChar *' info='the text content'/>
+ </function>
+ <function name='xmlNewDocTextLen' file='tree'>
+ <info>Creation of a new text node with an extra content length parameter. The text node pertain to a given document.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='content' type='const xmlChar *' info='the text content'/>
+ <arg name='len' type='int' info='the text len.'/>
+ </function>
+ <function name='xmlNewDtd' file='tree'>
+ <info>Creation of a new DTD for the external subset. To create an internal subset, use xmlCreateIntSubset().</info>
+ <return type='xmlDtdPtr' info='a pointer to the new DTD structure'/>
+ <arg name='doc' type='xmlDocPtr' info='the document pointer'/>
+ <arg name='name' type='const xmlChar *' info='the DTD name'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external ID'/>
+ <arg name='SystemID' type='const xmlChar *' info='the system ID'/>
+ </function>
+ <function name='xmlNewElementContent' file='valid'>
+ <info>Allocate an element content structure.</info>
+ <return type='xmlElementContentPtr' info='NULL if not, otherwise the new element content structure'/>
+ <arg name='name' type='const xmlChar *' info='the subelement name or NULL'/>
+ <arg name='type' type='xmlElementContentType' info='the type of element content decl'/>
+ </function>
+ <function name='xmlNewEntityInputStream' file='parserInternals'>
+ <info>Create a new input stream based on an xmlEntityPtr</info>
+ <return type='xmlParserInputPtr' info='the new input stream or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='entity' type='xmlEntityPtr' info='an Entity pointer'/>
+ </function>
+ <function name='xmlNewGlobalNs' file='tree'>
+ <info>Creation of a Namespace, the old way using PI and without scoping DEPRECATED !!! It now create a namespace on the root element of the document if found.</info>
+ <return type='xmlNsPtr' info='NULL this functionality had been removed'/>
+ <arg name='doc' type='xmlDocPtr' info='the document carrying the namespace'/>
+ <arg name='href' type='const xmlChar *' info='the URI associated'/>
+ <arg name='prefix' type='const xmlChar *' info='the prefix for the namespace'/>
+ </function>
+ <function name='xmlNewIOInputStream' file='parser'>
+ <info>Create a new input stream structure encapsulating the @input into a stream suitable for the parser.</info>
+ <return type='xmlParserInputPtr' info='the new input stream or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='input' type='xmlParserInputBufferPtr' info='an I/O Input'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlNewInputFromFile' file='parserInternals'>
+ <info>Create a new input stream based on a file or an URL.</info>
+ <return type='xmlParserInputPtr' info='the new input stream or NULL in case of error'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='filename' type='const char *' info='the filename to use as entity'/>
+ </function>
+ <function name='xmlNewInputStream' file='parserInternals'>
+ <info>Create a new input stream structure</info>
+ <return type='xmlParserInputPtr' info='the new input stream or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlNewMutex' file='threads'>
+ <info>xmlNewMutex() is used to allocate a libxml2 token struct for use in synchronizing access to data.</info>
+ <return type='xmlMutexPtr' info='a new simple mutex pointer or NULL in case of error'/>
+ </function>
+ <function name='xmlNewNode' file='tree'>
+ <info>Creation of a new node element. @ns is optional (NULL).</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object. Uses xmlStrdup() to make copy of @name.'/>
+ <arg name='ns' type='xmlNsPtr' info='namespace if any'/>
+ <arg name='name' type='const xmlChar *' info='the node name'/>
+ </function>
+ <function name='xmlNewNodeEatName' file='tree'>
+ <info>Creation of a new node element. @ns is optional (NULL).</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object, with pointer @name as new node&apos;s name. Use xmlNewNode() if a copy of @name string is is needed as new node&apos;s name.'/>
+ <arg name='ns' type='xmlNsPtr' info='namespace if any'/>
+ <arg name='name' type='xmlChar *' info='the node name'/>
+ </function>
+ <function name='xmlNewNs' file='tree'>
+ <info>Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. We use href==NULL in the case of an element creation where the namespace was not defined.</info>
+ <return type='xmlNsPtr' info='a new namespace pointer or NULL'/>
+ <arg name='node' type='xmlNodePtr' info='the element carrying the namespace'/>
+ <arg name='href' type='const xmlChar *' info='the URI associated'/>
+ <arg name='prefix' type='const xmlChar *' info='the prefix for the namespace'/>
+ </function>
+ <function name='xmlNewNsProp' file='tree'>
+ <info>Create a new property tagged with a namespace and carried by a node.</info>
+ <return type='xmlAttrPtr' info='a pointer to the attribute'/>
+ <arg name='node' type='xmlNodePtr' info='the holding node'/>
+ <arg name='ns' type='xmlNsPtr' info='the namespace'/>
+ <arg name='name' type='const xmlChar *' info='the name of the attribute'/>
+ <arg name='value' type='const xmlChar *' info='the value of the attribute'/>
+ </function>
+ <function name='xmlNewNsPropEatName' file='tree'>
+ <info>Create a new property tagged with a namespace and carried by a node.</info>
+ <return type='xmlAttrPtr' info='a pointer to the attribute'/>
+ <arg name='node' type='xmlNodePtr' info='the holding node'/>
+ <arg name='ns' type='xmlNsPtr' info='the namespace'/>
+ <arg name='name' type='xmlChar *' info='the name of the attribute'/>
+ <arg name='value' type='const xmlChar *' info='the value of the attribute'/>
+ </function>
+ <function name='xmlNewPI' file='tree'>
+ <info>Creation of a processing instruction element.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='name' type='const xmlChar *' info='the processing instruction name'/>
+ <arg name='content' type='const xmlChar *' info='the PI content'/>
+ </function>
+ <function name='xmlNewParserCtxt' file='parser'>
+ <info>Allocate and initialize a new parser context.</info>
+ <return type='xmlParserCtxtPtr' info='the xmlParserCtxtPtr or NULL'/>
+ </function>
+ <function name='xmlNewProp' file='tree'>
+ <info>Create a new property carried by a node.</info>
+ <return type='xmlAttrPtr' info='a pointer to the attribute'/>
+ <arg name='node' type='xmlNodePtr' info='the holding node'/>
+ <arg name='name' type='const xmlChar *' info='the name of the attribute'/>
+ <arg name='value' type='const xmlChar *' info='the value of the attribute'/>
+ </function>
+ <function name='xmlNewRMutex' file='threads'>
+ <info>xmlRNewMutex() is used to allocate a reentrant mutex for use in synchronizing access to data. token_r is a re-entrant lock and thus useful for synchronizing access to data structures that may be manipulated in a recursive fashion.</info>
+ <return type='xmlRMutexPtr' info='the new reentrant mutex pointer or NULL in case of error'/>
+ </function>
+ <function name='xmlNewReference' file='tree'>
+ <info>Creation of a new reference node.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='name' type='const xmlChar *' info='the reference name, or the reference string with &amp; and ;'/>
+ </function>
+ <function name='xmlNewStringInputStream' file='parserInternals'>
+ <info>Create a new input stream based on a memory buffer.</info>
+ <return type='xmlParserInputPtr' info='the new input stream'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='buffer' type='const xmlChar *' info='an memory buffer'/>
+ </function>
+ <function name='xmlNewText' file='tree'>
+ <info>Creation of a new text node.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='content' type='const xmlChar *' info='the text content'/>
+ </function>
+ <function name='xmlNewTextChild' file='tree'>
+ <info>Creation of a new child element, added at the end of @parent children list. @ns and @content parameters are optional (NULL). If @ns is NULL, the newly created element inherits the namespace of @parent. If @content is non NULL, a child TEXT node will be created containing the string @content. NOTE: Use xmlNewChild() if @content will contain entities that need to be preserved. Use this function, xmlNewTextChild(), if you need to ensure that reserved XML chars that might appear in @content, such as the ampersand, greater-than or less-than signs, are automatically replaced by their XML escaped entity representations.</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='parent' type='xmlNodePtr' info='the parent node'/>
+ <arg name='ns' type='xmlNsPtr' info='a namespace if any'/>
+ <arg name='name' type='const xmlChar *' info='the name of the child'/>
+ <arg name='content' type='const xmlChar *' info='the text content of the child if any.'/>
+ </function>
+ <function name='xmlNewTextLen' file='tree'>
+ <info>Creation of a new text node with an extra parameter for the content&apos;s length</info>
+ <return type='xmlNodePtr' info='a pointer to the new node object.'/>
+ <arg name='content' type='const xmlChar *' info='the text content'/>
+ <arg name='len' type='int' info='the text len.'/>
+ </function>
+ <function name='xmlNewTextReader' file='xmlreader'>
+ <info>Create an xmlTextReader structure fed with @input</info>
+ <return type='xmlTextReaderPtr' info='the new xmlTextReaderPtr or NULL in case of error'/>
+ <arg name='input' type='xmlParserInputBufferPtr' info='the xmlParserInputBufferPtr used to read data'/>
+ <arg name='URI' type='const char *' info='the URI information for the source if available'/>
+ </function>
+ <function name='xmlNewTextReaderFilename' file='xmlreader'>
+ <info>Create an xmlTextReader structure fed with the resource at @URI</info>
+ <return type='xmlTextReaderPtr' info='the new xmlTextReaderPtr or NULL in case of error'/>
+ <arg name='URI' type='const char *' info='the URI of the resource to process'/>
+ </function>
+ <function name='xmlNewTextWriter' file='xmlwriter'>
+ <info>Create a new xmlNewTextWriter structure using an xmlOutputBufferPtr</info>
+ <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
+ <arg name='out' type='xmlOutputBufferPtr' info='an xmlOutputBufferPtr'/>
+ </function>
+ <function name='xmlNewTextWriterDoc' file='xmlwriter'>
+ <info>Create a new xmlNewTextWriter structure with @*doc as output</info>
+ <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
+ <arg name='doc' type='xmlDocPtr *' info='address of a xmlDocPtr to hold the new XML document tree'/>
+ <arg name='compression' type='int' info='compress the output?'/>
+ </function>
+ <function name='xmlNewTextWriterFilename' file='xmlwriter'>
+ <info>Create a new xmlNewTextWriter structure with @uri as output</info>
+ <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
+ <arg name='uri' type='const char *' info='the URI of the resource for the output'/>
+ <arg name='compression' type='int' info='compress the output?'/>
+ </function>
+ <function name='xmlNewTextWriterMemory' file='xmlwriter'>
+ <info>Create a new xmlNewTextWriter structure with @buf as output TODO: handle compression</info>
+ <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
+ <arg name='buf' type='xmlBufferPtr' info='xmlBufferPtr'/>
+ <arg name='compression' type='int' info='compress the output?'/>
+ </function>
+ <function name='xmlNewTextWriterPushParser' file='xmlwriter'>
+ <info>Create a new xmlNewTextWriter structure with @ctxt as output TODO: handle compression</info>
+ <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='xmlParserCtxtPtr to hold the new XML document tree'/>
+ <arg name='compression' type='int' info='compress the output?'/>
+ </function>
+ <function name='xmlNewTextWriterTree' file='xmlwriter'>
+ <info>Create a new xmlNewTextWriter structure with @doc as output starting at @node</info>
+ <return type='xmlTextWriterPtr' info='the new xmlTextWriterPtr or NULL in case of error'/>
+ <arg name='doc' type='xmlDocPtr' info='xmlDocPtr'/>
+ <arg name='node' type='xmlNodePtr' info='xmlNodePtr or NULL for doc-&gt;children'/>
+ <arg name='compression' type='int' info='compress the output?'/>
+ </function>
+ <function name='xmlNewValidCtxt' file='valid'>
+ <info>Allocate a validation context structure.</info>
+ <return type='xmlValidCtxtPtr' info='NULL if not, otherwise the new validation context structure'/>
+ </function>
+ <function name='xmlNextChar' file='parserInternals'>
+ <info>Skip to the next char input char.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the XML parser context'/>
+ </function>
+ <function name='xmlNoNetExternalEntityLoader' file='xmlIO'>
+ <info>A specific entity loader disabling network accesses, though still allowing local catalog accesses for resolution.</info>
+ <return type='xmlParserInputPtr' info='a new allocated 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 System ID for the entity to load'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the context in which the entity is called or NULL'/>
+ </function>
+ <function name='xmlNodeAddContent' file='tree'>
+ <info>Append the extra substring to the node content.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being modified'/>
+ <arg name='content' type='const xmlChar *' info='extra content'/>
+ </function>
+ <function name='xmlNodeAddContentLen' file='tree'>
+ <info>Append the extra substring to the node content.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being modified'/>
+ <arg name='content' type='const xmlChar *' info='extra content'/>
+ <arg name='len' type='int' info='the size of @content'/>
+ </function>
+ <function name='xmlNodeBufGetContent' file='tree'>
+ <info>Read the value of a node @cur, this can be either the text carried directly by this node if it&apos;s a TEXT node or the aggregate string of the values carried by this node child&apos;s (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buffer with this value</info>
+ <return type='int' info='0 in case of success and -1 in case of error.'/>
+ <arg name='buffer' type='xmlBufferPtr' info='a buffer'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being read'/>
+ </function>
+ <function name='xmlNodeDump' file='tree'>
+ <info>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</info>
+ <return type='int' info='the number of bytes written to the buffer or -1 in case of error'/>
+ <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node'/>
+ <arg name='level' type='int' info='the imbrication level for indenting'/>
+ <arg name='format' type='int' info='is formatting allowed'/>
+ </function>
+ <function name='xmlNodeDumpOutput' file='tree'>
+ <info>Dump an XML node, recursive behaviour, children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlOutputBufferPtr' info='the XML buffer output'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node'/>
+ <arg name='level' type='int' info='the imbrication level for indenting'/>
+ <arg name='format' type='int' info='is formatting allowed'/>
+ <arg name='encoding' type='const char *' info='an optional encoding string'/>
+ </function>
+ <function name='xmlNodeGetBase' file='tree'>
+ <info>Searches for the BASE URL. The code should work on both XML and HTML document even if base mechanisms are completely different. It returns the base as defined in RFC 2396 sections 5.1.1. Base URI within Document Content and 5.1.2. Base URI from the Encapsulating Entity However it does not return the document base (5.1.3), use xmlDocumentGetBase() for this</info>
+ <return type='xmlChar *' info='a pointer to the base URL, or NULL if not found It&apos;s up to the caller to free the memory with xmlFree().'/>
+ <arg name='doc' type='xmlDocPtr' info='the document the node pertains to'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being checked'/>
+ </function>
+ <function name='xmlNodeGetContent' file='tree'>
+ <info>Read the value of a node, this can be either the text carried directly by this node if it&apos;s a TEXT node or the aggregate string of the values carried by this node child&apos;s (TEXT and ENTITY_REF). Entity references are substituted.</info>
+ <return type='xmlChar *' info='a new #xmlChar * or NULL if no content is available. It&apos;s up to the caller to free the memory with xmlFree().'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being read'/>
+ </function>
+ <function name='xmlNodeGetLang' file='tree'>
+ <info>Searches the language of a node, i.e. the values of the xml:lang attribute or the one carried by the nearest ancestor.</info>
+ <return type='xmlChar *' info='a pointer to the lang value, or NULL if not found It&apos;s up to the caller to free the memory with xmlFree().'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being checked'/>
+ </function>
+ <function name='xmlNodeGetSpacePreserve' file='tree'>
+ <info>Searches the space preserving behaviour of a node, i.e. the values of the xml:space attribute or the one carried by the nearest ancestor.</info>
+ <return type='int' info='-1 if xml:space is not inherited, 0 if &quot;default&quot;, 1 if &quot;preserve&quot;'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being checked'/>
+ </function>
+ <function name='xmlNodeIsText' file='tree'>
+ <info>Is this node a Text node ?</info>
+ <return type='int' info='1 yes, 0 no'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ </function>
+ <function name='xmlNodeListGetRawString' file='tree'>
+ <info>Builds the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString() this function doesn&apos;t do any character encoding handling.</info>
+ <return type='xmlChar *' info='a pointer to the string copy, the caller must free it with xmlFree().'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='list' type='xmlNodePtr' info='a Node list'/>
+ <arg name='inLine' type='int' info='should we replace entity contents or show their external form'/>
+ </function>
+ <function name='xmlNodeListGetString' file='tree'>
+ <info>Build the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs</info>
+ <return type='xmlChar *' info='a pointer to the string copy, the caller must free it with xmlFree().'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='list' type='xmlNodePtr' info='a Node list'/>
+ <arg name='inLine' type='int' info='should we replace entity contents or show their external form'/>
+ </function>
+ <function name='xmlNodeSetBase' file='tree'>
+ <info>Set (or reset) the base URI of a node, i.e. the value of the xml:base attribute.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being changed'/>
+ <arg name='uri' type='const xmlChar *' info='the new base URI'/>
+ </function>
+ <function name='xmlNodeSetContent' file='tree'>
+ <info>Replace the content of a node.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being modified'/>
+ <arg name='content' type='const xmlChar *' info='the new value of the content'/>
+ </function>
+ <function name='xmlNodeSetContentLen' file='tree'>
+ <info>Replace the content of a node.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being modified'/>
+ <arg name='content' type='const xmlChar *' info='the new value of the content'/>
+ <arg name='len' type='int' info='the size of @content'/>
+ </function>
+ <function name='xmlNodeSetLang' file='tree'>
+ <info>Set the language of a node, i.e. the values of the xml:lang attribute.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being changed'/>
+ <arg name='lang' type='const xmlChar *' info='the language description'/>
+ </function>
+ <function name='xmlNodeSetName' file='tree'>
+ <info>Set (or reset) the name of a node.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being changed'/>
+ <arg name='name' type='const xmlChar *' info='the new tag name'/>
+ </function>
+ <function name='xmlNodeSetSpacePreserve' file='tree'>
+ <info>Set (or reset) the space preserving behaviour of a node, i.e. the value of the xml:space attribute.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node being changed'/>
+ <arg name='val' type='int' info='the xml:space value (&quot;0&quot;: default, 1: &quot;preserve&quot;)'/>
+ </function>
+ <function name='xmlNormalizeURIPath' file='uri'>
+ <info>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</info>
+ <return type='int' info='0 or an error code'/>
+ <arg name='path' type='char *' info='pointer to the path string'/>
+ </function>
+ <function name='xmlNormalizeWindowsPath' file='xmlIO'>
+ <info>This function is obsolete. Please see xmlURIFromPath in uri.c for a better solution.</info>
+ <return type='xmlChar *' info='a canonicalized version of the path'/>
+ <arg name='path' type='const xmlChar *' info='the input file path'/>
+ </function>
+ <function name='xmlOutputBufferClose' file='xmlIO'>
+ <info>flushes and close the output I/O channel and free up all the associated resources</info>
+ <return type='int' info='the number of byte written or -1 in case of error.'/>
+ <arg name='out' type='xmlOutputBufferPtr' info='a buffered output'/>
+ </function>
+ <function name='xmlOutputBufferCreateFd' file='xmlIO'>
+ <info>Create a buffered output for the progressive saving to a file descriptor</info>
+ <return type='xmlOutputBufferPtr' info='the new parser output or NULL'/>
+ <arg name='fd' type='int' info='a file descriptor number'/>
+ <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the encoding converter or NULL'/>
+ </function>
+ <function name='xmlOutputBufferCreateFile' file='xmlIO'>
+ <info>Create a buffered output for the progressive saving to a FILE * buffered C I/O</info>
+ <return type='xmlOutputBufferPtr' info='the new parser output or NULL'/>
+ <arg name='file' type='FILE *' info='a FILE*'/>
+ <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the encoding converter or NULL'/>
+ </function>
+ <function name='xmlOutputBufferCreateFilename' file='xmlIO'>
+ <info>Create a buffered output for the progressive saving of a file If filename is &quot;-&apos; then we use stdout as the output. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. TODO: currently if compression is set, the library only support writing to a local file.</info>
+ <return type='xmlOutputBufferPtr' info='the new output or NULL'/>
+ <arg name='URI' type='const char *' info='a C string containing the URI or filename'/>
+ <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the encoding converter or NULL'/>
+ <arg name='compression' type='int' info='the compression ration (0 none, 9 max).'/>
+ </function>
+ <function name='xmlOutputBufferCreateIO' file='xmlIO'>
+ <info>Create a buffered output for the progressive saving to an I/O handler</info>
+ <return type='xmlOutputBufferPtr' info='the new parser output or NULL'/>
+ <arg name='iowrite' type='xmlOutputWriteCallback' info='an I/O write function'/>
+ <arg name='ioclose' type='xmlOutputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlOutputBufferFlush' file='xmlIO'>
+ <info>flushes the output I/O channel</info>
+ <return type='int' info='the number of byte written or -1 in case of error.'/>
+ <arg name='out' type='xmlOutputBufferPtr' info='a buffered output'/>
+ </function>
+ <function name='xmlOutputBufferWrite' file='xmlIO'>
+ <info>Write the content of the array in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.</info>
+ <return type='int' info='the number of chars immediately written, or -1 in case of error.'/>
+ <arg name='out' type='xmlOutputBufferPtr' info='a buffered parser output'/>
+ <arg name='len' type='int' info='the size in bytes of the array.'/>
+ <arg name='buf' type='const char *' info='an char array'/>
+ </function>
+ <function name='xmlOutputBufferWriteString' file='xmlIO'>
+ <info>Write the content of the string in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.</info>
+ <return type='int' info='the number of chars immediately written, or -1 in case of error.'/>
+ <arg name='out' type='xmlOutputBufferPtr' info='a buffered parser output'/>
+ <arg name='str' type='const char *' info='a zero terminated C string'/>
+ </function>
+ <functype name='xmlOutputCloseCallback' file='xmlIO'>
+ <info>Callback used in the I/O Output API to close the resource</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='context' type='void *' info='an Output context'/>
+ </functype>
+ <functype name='xmlOutputMatchCallback' file='xmlIO'>
+ <info>Callback used in the I/O Output API to detect if the current handler can provide output fonctionnalities for this resource.</info>
+ <return type='int' info='1 if yes and 0 if another Output module should be used'/>
+ <arg name='filename' type='char const *' info='the filename or URI'/>
+ </functype>
+ <functype name='xmlOutputOpenCallback' file='xmlIO'>
+ <info>Callback used in the I/O Output API to open the resource</info>
+ <return type='void *' info='an Output context or NULL in case or error'/>
+ <arg name='filename' type='char const *' info='the filename or URI'/>
+ </functype>
+ <functype name='xmlOutputWriteCallback' file='xmlIO'>
+ <info>Callback used in the I/O Output API to write to the resource</info>
+ <return type='int' info='the number of bytes written or -1 in case of error'/>
+ <arg name='context' type='void *' info='an Output context'/>
+ <arg name='buffer' type='const char *' info='the buffer of data to write'/>
+ <arg name='len' type='int' info='the length of the buffer in bytes'/>
+ </functype>
+ <function name='xmlParseAttValue' file='parserInternals'>
+ <info>parse a value for an attribute Note: the parser won&apos;t do substitution of entities here, this will be handled later in xmlStringGetNodeList [10] AttValue ::= &apos;&quot;&apos; ([^&lt;&amp;&quot;] | Reference)* &apos;&quot;&apos; | &quot;&apos;&quot; ([^&lt;&amp;&apos;] | Reference)* &quot;&apos;&quot; 3.3.3 Attribute-Value Normalization: Before the value of an attribute is passed to the application or checked for validity, the XML processor must normalize it as follows: - a character reference is processed by appending the referenced character to the attribute value - an entity reference is processed by recursively processing the replacement text of the entity - a whitespace character (#x20, #xD, #xA, #x9) is processed by appending #x20 to the normalized value, except that only a single #x20 is appended for a &quot;#xD#xA&quot; sequence that is part of an external parsed entity or the literal entity value of an internal parsed entity - other characters are processed by appending them to the normalized value If the declared value is not CDATA, then the XML processor must further process the normalized attribute value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) characters by a single space (#x20) character. All attributes for which no declaration has been read should be treated by a non-validating parser as if declared CDATA.</info>
+ <return type='xmlChar *' info='the AttValue parsed or NULL. The value has to be freed by the caller.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseAttribute' file='parserInternals'>
+ <info>parse an attribute [41] Attribute ::= Name Eq AttValue [ WFC: No External Entity References ] Attribute values cannot contain direct or indirect entity references to external entities. [ WFC: No &lt; in Attribute Values ] The replacement text of any entity referred to directly or indirectly in an attribute value (other than &quot;&amp;lt;&quot;) must not contain a &lt;. [ VC: Attribute Value Type ] The attribute must have been declared; the value must be of the type declared for it. [25] Eq ::= S? &apos;=&apos; S? With namespace: [NS 11] Attribute ::= QName Eq AttValue Also the case QName == xmlns:??? is handled independently as a namespace definition.</info>
+ <return type='const xmlChar *' info='the attribute name, and the value in *value.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='value' type='xmlChar **' info='a xmlChar ** used to store the value of the attribute'/>
+ </function>
+ <function name='xmlParseAttributeListDecl' file='parserInternals'>
+ <info>: parse the Attribute list def for an element [52] AttlistDecl ::= &apos;&lt;!ATTLIST&apos; S Name AttDef* S? &apos;&gt;&apos; [53] AttDef ::= S Name S AttType S DefaultDecl</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseAttributeType' file='parserInternals'>
+ <info>parse the Attribute list def for an element [54] AttType ::= StringType | TokenizedType | EnumeratedType [55] StringType ::= &apos;CDATA&apos; [56] TokenizedType ::= &apos;ID&apos; | &apos;IDREF&apos; | &apos;IDREFS&apos; | &apos;ENTITY&apos; | &apos;ENTITIES&apos; | &apos;NMTOKEN&apos; | &apos;NMTOKENS&apos; Validity constraints for attribute values syntax are checked in xmlValidateAttributeValue() [ VC: ID ] Values of type ID must match the Name production. A name must not appear more than once in an XML document as a value of this type; i.e., ID values must uniquely identify the elements which bear them. [ VC: One ID per Element Type ] No element type may have more than one ID attribute specified. [ VC: ID Attribute Default ] An ID attribute must have a declared default of #IMPLIED or #REQUIRED. [ VC: IDREF ] Values of type IDREF must match the Name production, and values of type IDREFS must match Names; each IDREF Name must match the value of an ID attribute on some element in the XML document; i.e. IDREF values must match the value of some ID attribute. [ VC: Entity Name ] Values of type ENTITY must match the Name production, values of type ENTITIES must match Names; each Entity Name must match the name of an unparsed entity declared in the DTD. [ VC: Name Token ] Values of type NMTOKEN must match the Nmtoken production; values of type NMTOKENS must match Nmtokens.</info>
+ <return type='int' info='the attribute type'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='tree' type='xmlEnumerationPtr *' info='the enumeration tree built while parsing'/>
+ </function>
+ <function name='xmlParseBalancedChunkMemory' file='parser'>
+ <info>Parse a well-balanced chunk of an XML document called by the parser The allowed sequence for the Well Balanced Chunk is the one defined by the content production in the XML grammar: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*</info>
+ <return type='int' info='0 if the chunk is well balanced, -1 in case of args problem and the parser error code otherwise'/>
+ <arg name='doc' type='xmlDocPtr' info='the document the chunk pertains to'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler bloc (possibly NULL)'/>
+ <arg name='user_data' type='void *' info='The user data returned on SAX callbacks (possibly NULL)'/>
+ <arg name='depth' type='int' info='Used for loop detection, use 0'/>
+ <arg name='string' type='const xmlChar *' info='the input string in UTF8 or ISO-Latin (zero terminated)'/>
+ <arg name='lst' type='xmlNodePtr *' info='the return value for the set of parsed nodes'/>
+ </function>
+ <function name='xmlParseBalancedChunkMemoryRecover' file='parser'>
+ <info>Parse a well-balanced chunk of an XML document called by the parser The allowed sequence for the Well Balanced Chunk is the one defined by the content production in the XML grammar: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*</info>
+ <return type='int' info='0 if the chunk is well balanced, -1 in case of args problem and the parser error code otherwise In case recover is set to 1, the nodelist will not be empty even if the parsed chunk is not well balanced.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document the chunk pertains to'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler bloc (possibly NULL)'/>
+ <arg name='user_data' type='void *' info='The user data returned on SAX callbacks (possibly NULL)'/>
+ <arg name='depth' type='int' info='Used for loop detection, use 0'/>
+ <arg name='string' type='const xmlChar *' info='the input string in UTF8 or ISO-Latin (zero terminated)'/>
+ <arg name='lst' type='xmlNodePtr *' info='the return value for the set of parsed nodes'/>
+ <arg name='recover' type='int' info='return nodes even if the data is broken (use 0)'/>
+ </function>
+ <function name='xmlParseCDSect' file='parserInternals'>
+ <info>Parse escaped pure raw content. [18] CDSect ::= CDStart CData CDEnd [19] CDStart ::= &apos;&lt;![CDATA[&apos; [20] Data ::= (Char* - (Char* &apos;]]&gt;&apos; Char*)) [21] CDEnd ::= &apos;]]&gt;&apos;</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseCatalogFile' file='catalog'>
+ <info>parse an XML file and build a tree. It&apos;s like xmlParseFile() except it bypass all catalog lookups.</info>
+ <return type='xmlDocPtr' info='the resulting document tree or NULL in case of error'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ </function>
+ <function name='xmlParseCharData' file='parserInternals'>
+ <info>parse a CharData section. if we are within a CDATA section &apos;]]&gt;&apos; marks an end of section. The right angle bracket (&gt;) may be represented using the string &quot;&amp;gt;&quot;, and must, for compatibility, be escaped using &quot;&amp;gt;&quot; or a character reference when it appears in the string &quot;]]&gt;&quot; in content, when that string is not marking the end of a CDATA section. [14] CharData ::= [^&lt;&amp;]* - ([^&lt;&amp;]* &apos;]]&gt;&apos; [^&lt;&amp;]*)</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='cdata' type='int' info='int indicating whether we are within a CDATA section'/>
+ </function>
+ <function name='xmlParseCharEncoding' file='encoding'>
+ <info>Compare the string to the encoding schemes already known. Note that the comparison is case insensitive accordingly to the section [XML] 4.3.3 Character Encoding in Entities.</info>
+ <return type='xmlCharEncoding' info='one of the XML_CHAR_ENCODING_... values or XML_CHAR_ENCODING_NONE if not recognized.'/>
+ <arg name='name' type='const char *' info='the encoding name as parsed, in UTF-8 format (ASCII actually)'/>
+ </function>
+ <function name='xmlParseCharRef' file='parserInternals'>
+ <info>parse Reference declarations [66] CharRef ::= &apos;&amp;#&apos; [0-9]+ &apos;;&apos; | &apos;&amp;#x&apos; [0-9a-fA-F]+ &apos;;&apos; [ WFC: Legal Character ] Characters referred to using character references must match the production for Char.</info>
+ <return type='int' info='the value parsed (as an int), 0 in case of error'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseChunk' file='parser'>
+ <info>Parse a Chunk of memory</info>
+ <return type='int' info='zero if no error, the xmlParserErrors otherwise.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='chunk' type='const char *' info='an char array'/>
+ <arg name='size' type='int' info='the size in byte of the chunk'/>
+ <arg name='terminate' type='int' info='last chunk indicator'/>
+ </function>
+ <function name='xmlParseComment' file='parserInternals'>
+ <info>Skip an XML (SGML) comment &lt;!-- .... --&gt; The spec says that &quot;For compatibility, the string &quot;--&quot; (double-hyphen) must not occur within comments. &quot; [15] Comment ::= &apos;&lt;!--&apos; ((Char - &apos;-&apos;) | (&apos;-&apos; (Char - &apos;-&apos;)))* &apos;--&gt;&apos;</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseContent' file='parserInternals'>
+ <info>Parse a content: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseCtxtExternalEntity' file='parser'>
+ <info>Parse an external general entity within an existing parsing context An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content</info>
+ <return type='int' info='0 if the entity is well formed, -1 in case of args problem and the parser error code otherwise'/>
+ <arg name='ctx' type='xmlParserCtxtPtr' info='the existing parsing context'/>
+ <arg name='URL' type='const xmlChar *' info='the URL for the entity to load'/>
+ <arg name='ID' type='const xmlChar *' info='the System ID for the entity to load'/>
+ <arg name='lst' type='xmlNodePtr *' info='the return value for the set of parsed nodes'/>
+ </function>
+ <function name='xmlParseDTD' file='parser'>
+ <info>Load and parse an external subset.</info>
+ <return type='xmlDtdPtr' info='the resulting xmlDtdPtr or NULL in case of error.'/>
+ <arg name='ExternalID' type='const xmlChar *' info='a NAME* containing the External ID of the DTD'/>
+ <arg name='SystemID' type='const xmlChar *' info='a NAME* containing the URL to the DTD'/>
+ </function>
+ <function name='xmlParseDefaultDecl' file='parserInternals'>
+ <info>Parse an attribute default declaration [60] DefaultDecl ::= &apos;#REQUIRED&apos; | &apos;#IMPLIED&apos; | ((&apos;#FIXED&apos; S)? AttValue) [ VC: Required Attribute ] if the default declaration is the keyword #REQUIRED, then the attribute must be specified for all elements of the type in the attribute-list declaration. [ VC: Attribute Default Legal ] The declared default value must meet the lexical constraints of the declared attribute type c.f. xmlValidateAttributeDecl() [ VC: Fixed Attribute Default ] if an attribute has a default value declared with the #FIXED keyword, instances of that attribute must match the default value. [ WFC: No &lt; in Attribute Values ] handled in xmlParseAttValue()</info>
+ <return type='int' info='XML_ATTRIBUTE_NONE, XML_ATTRIBUTE_REQUIRED, XML_ATTRIBUTE_IMPLIED or XML_ATTRIBUTE_FIXED.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='value' type='xmlChar **' info='Receive a possible fixed default value for the attribute'/>
+ </function>
+ <function name='xmlParseDoc' file='parser'>
+ <info>parse an XML in-memory document and build a tree.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='cur' type='xmlChar *' info='a pointer to an array of xmlChar'/>
+ </function>
+ <function name='xmlParseDocTypeDecl' file='parserInternals'>
+ <info>parse a DOCTYPE declaration [28] doctypedecl ::= &apos;&lt;!DOCTYPE&apos; S Name (S ExternalID)? S? (&apos;[&apos; (markupdecl | PEReference | S)* &apos;]&apos; S?)? &apos;&gt;&apos; [ VC: Root Element Type ] The Name in the document type declaration must match the element type of the root element.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseDocument' file='parser'>
+ <info>parse an XML document (and build a tree if using the standard SAX interface). [1] document ::= prolog element Misc* [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?</info>
+ <return type='int' info='0, -1 in case of error. the parser context is augmented as a result of the parsing.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseElement' file='parserInternals'>
+ <info>parse an XML element, this is highly recursive [39] element ::= EmptyElemTag | STag content ETag [ WFC: Element Type Match ] The Name in an element&apos;s end-tag must match the element type in the start-tag.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseElementChildrenContentDecl' file='parserInternals'>
+ <info>parse the declaration for a Mixed Element content The leading &apos;(&apos; and spaces have been skipped in xmlParseElementContentDecl [47] children ::= (choice | seq) (&apos;?&apos; | &apos;*&apos; | &apos;+&apos;)? [48] cp ::= (Name | choice | seq) (&apos;?&apos; | &apos;*&apos; | &apos;+&apos;)? [49] choice ::= &apos;(&apos; S? cp ( S? &apos;|&apos; S? cp )* S? &apos;)&apos; [50] seq ::= &apos;(&apos; S? cp ( S? &apos;,&apos; S? cp )* S? &apos;)&apos; [ VC: Proper Group/PE Nesting ] applies to [49] and [50] TODO Parameter-entity replacement text must be properly nested with parenthesized groups. That is to say, if either of the opening or closing parentheses in a choice, seq, or Mixed construct is contained in the replacement text for a parameter entity, both must be contained in the same replacement text. For interoperability, if a parameter-entity reference appears in a choice, seq, or Mixed construct, its replacement text should not be empty, and neither the first nor last non-blank character of the replacement text should be a connector (| or ,).</info>
+ <return type='xmlElementContentPtr' info='the tree of xmlElementContentPtr describing the element hierarchy.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='inputchk' type='int' info='the input used for the current entity, needed for boundary checks'/>
+ </function>
+ <function name='xmlParseElementContentDecl' file='parserInternals'>
+ <info>parse the declaration for an Element content either Mixed or Children, the cases EMPTY and ANY are handled directly in xmlParseElementDecl [46] contentspec ::= &apos;EMPTY&apos; | &apos;ANY&apos; | Mixed | children</info>
+ <return type='int' info='the type of element content XML_ELEMENT_TYPE_xxx'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='name' type='const xmlChar *' info='the name of the element being defined.'/>
+ <arg name='result' type='xmlElementContentPtr *' info='the Element Content pointer will be stored here if any'/>
+ </function>
+ <function name='xmlParseElementDecl' file='parserInternals'>
+ <info>parse an Element declaration. [45] elementdecl ::= &apos;&lt;!ELEMENT&apos; S Name S contentspec S? &apos;&gt;&apos; [ VC: Unique Element Type Declaration ] No element type may be declared more than once</info>
+ <return type='int' info='the type of the element, or -1 in case of error'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseElementMixedContentDecl' file='parserInternals'>
+ <info>parse the declaration for a Mixed Element content The leading &apos;(&apos; and spaces have been skipped in xmlParseElementContentDecl [51] Mixed ::= &apos;(&apos; S? &apos;#PCDATA&apos; (S? &apos;|&apos; S? Name)* S? &apos;)*&apos; | &apos;(&apos; S? &apos;#PCDATA&apos; S? &apos;)&apos; [ VC: Proper Group/PE Nesting ] applies to [51] too (see [49]) [ VC: No Duplicate Types ] The same name must not appear more than once in a single mixed-content declaration.</info>
+ <return type='xmlElementContentPtr' info='the list of the xmlElementContentPtr describing the element choices'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='inputchk' type='int' info='the input used for the current entity, needed for boundary checks'/>
+ </function>
+ <function name='xmlParseEncName' file='parserInternals'>
+ <info>parse the XML encoding name [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | &apos;-&apos;)*</info>
+ <return type='xmlChar *' info='the encoding name value or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseEncodingDecl' file='parserInternals'>
+ <info>parse the XML encoding declaration [80] EncodingDecl ::= S &apos;encoding&apos; Eq (&apos;&quot;&apos; EncName &apos;&quot;&apos; | &quot;&apos;&quot; EncName &quot;&apos;&quot;) this setups the conversion filters.</info>
+ <return type='const xmlChar *' info='the encoding value or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseEndTag' file='parserInternals'>
+ <info>parse an end of tag [42] ETag ::= &apos;&lt;/&apos; Name S? &apos;&gt;&apos; With namespace [NS 9] ETag ::= &apos;&lt;/&apos; QName S? &apos;&gt;&apos;</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseEntity' file='parser'>
+ <info>parse an XML external entity out of context and build a tree. [78] extParsedEnt ::= TextDecl? content This correspond to a &quot;Well Balanced&quot; chunk</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ </function>
+ <function name='xmlParseEntityDecl' file='parserInternals'>
+ <info>parse &lt;!ENTITY declarations [70] EntityDecl ::= GEDecl | PEDecl [71] GEDecl ::= &apos;&lt;!ENTITY&apos; S Name S EntityDef S? &apos;&gt;&apos; [72] PEDecl ::= &apos;&lt;!ENTITY&apos; S &apos;%&apos; S Name S PEDef S? &apos;&gt;&apos; [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?) [74] PEDef ::= EntityValue | ExternalID [76] NDataDecl ::= S &apos;NDATA&apos; S Name [ VC: Notation Declared ] The Name must match the declared name of a notation.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseEntityRef' file='parserInternals'>
+ <info>parse ENTITY references declarations [68] EntityRef ::= &apos;&amp;&apos; Name &apos;;&apos; [ WFC: Entity Declared ] In a document without any DTD, a document with only an internal DTD subset which contains no parameter entity references, or a document with &quot;standalone=&apos;yes&apos;&quot;, the Name given in the entity reference must match that in an entity declaration, except that well-formed documents need not declare any of the following entities: amp, lt, gt, apos, quot. The declaration of a parameter entity must precede any reference to it. Similarly, the declaration of a general entity must precede any reference to it which appears in a default value in an attribute-list declaration. Note that if entities are declared in the external subset or in external parameter entities, a non-validating processor is not obligated to read and process their declarations; for such documents, the rule that an entity must be declared is a well-formedness constraint only if standalone=&apos;yes&apos;. [ WFC: Parsed Entity ] An entity reference must not contain the name of an unparsed entity</info>
+ <return type='xmlEntityPtr' info='the xmlEntityPtr if found, or NULL otherwise.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseEntityValue' file='parserInternals'>
+ <info>parse a value for ENTITY declarations [9] EntityValue ::= &apos;&quot;&apos; ([^%&amp;&quot;] | PEReference | Reference)* &apos;&quot;&apos; | &quot;&apos;&quot; ([^%&amp;&apos;] | PEReference | Reference)* &quot;&apos;&quot;</info>
+ <return type='xmlChar *' info='the EntityValue parsed with reference substituted or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='orig' type='xmlChar **' info='if non-NULL store a copy of the original entity value'/>
+ </function>
+ <function name='xmlParseEnumeratedType' file='parserInternals'>
+ <info>parse an Enumerated attribute type. [57] EnumeratedType ::= NotationType | Enumeration [58] NotationType ::= &apos;NOTATION&apos; S &apos;(&apos; S? Name (S? &apos;|&apos; S? Name)* S? &apos;)&apos;</info>
+ <return type='int' info='XML_ATTRIBUTE_ENUMERATION or XML_ATTRIBUTE_NOTATION'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='tree' type='xmlEnumerationPtr *' info='the enumeration tree built while parsing'/>
+ </function>
+ <function name='xmlParseEnumerationType' file='parserInternals'>
+ <info>parse an Enumeration attribute type. [59] Enumeration ::= &apos;(&apos; S? Nmtoken (S? &apos;|&apos; S? Nmtoken)* S? &apos;)&apos; [ VC: Enumeration ] Values of this type must match one of the Nmtoken tokens in the declaration</info>
+ <return type='xmlEnumerationPtr' info='the enumeration attribute tree built while parsing'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseExtParsedEnt' file='parser'>
+ <info>parse a general parsed entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content</info>
+ <return type='int' info='0, -1 in case of error. the parser context is augmented as a result of the parsing.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseExternalEntity' file='parser'>
+ <info>Parse an external general entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content</info>
+ <return type='int' info='0 if the entity is well formed, -1 in case of args problem and the parser error code otherwise'/>
+ <arg name='doc' type='xmlDocPtr' info='the document the chunk pertains to'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler bloc (possibly NULL)'/>
+ <arg name='user_data' type='void *' info='The user data returned on SAX callbacks (possibly NULL)'/>
+ <arg name='depth' type='int' info='Used for loop detection, use 0'/>
+ <arg name='URL' type='const xmlChar *' info='the URL for the entity to load'/>
+ <arg name='ID' type='const xmlChar *' info='the System ID for the entity to load'/>
+ <arg name='lst' type='xmlNodePtr *' info='the return value for the set of parsed nodes'/>
+ </function>
+ <function name='xmlParseExternalID' file='parserInternals'>
+ <info>Parse an External ID or a Public ID NOTE: Productions [75] and [83] interact badly since [75] can generate &apos;PUBLIC&apos; S PubidLiteral S SystemLiteral [75] ExternalID ::= &apos;SYSTEM&apos; S SystemLiteral | &apos;PUBLIC&apos; S PubidLiteral S SystemLiteral [83] PublicID ::= &apos;PUBLIC&apos; S PubidLiteral</info>
+ <return type='xmlChar *' info='the function returns SystemLiteral and in the second case publicID receives PubidLiteral, is strict is off it is possible to return NULL and have publicID set.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='publicID' type='xmlChar **' info='a xmlChar** receiving PubidLiteral'/>
+ <arg name='strict' type='int' info='indicate whether we should restrict parsing to only production [75], see NOTE below'/>
+ </function>
+ <function name='xmlParseExternalSubset' file='parserInternals'>
+ <info>parse Markup declarations from an external subset [30] extSubset ::= textDecl? extSubsetDecl [31] extSubsetDecl ::= (markupdecl | conditionalSect | PEReference | S) *</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external identifier'/>
+ <arg name='SystemID' type='const xmlChar *' info='the system identifier (or URL)'/>
+ </function>
+ <function name='xmlParseFile' file='parser'>
+ <info>parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.</info>
+ <return type='xmlDocPtr' info='the resulting document tree if the file was wellformed, NULL otherwise.'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ </function>
+ <function name='xmlParseMarkupDecl' file='parserInternals'>
+ <info>parse Markup declarations [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment [ VC: Proper Declaration/PE Nesting ] Parameter-entity replacement text must be properly nested with markup declarations. That is to say, if either the first character or the last character of a markup declaration (markupdecl above) is contained in the replacement text for a parameter-entity reference, both must be contained in the same replacement text. [ WFC: PEs in Internal Subset ] In the internal DTD subset, parameter-entity references can occur only where markup declarations can occur, not within markup declarations. (This does not apply to references that occur in external parameter entities or to the external subset.)</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseMemory' file='parser'>
+ <info>parse an XML in-memory block and build a tree.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='buffer' type='const char *' info='an pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ </function>
+ <function name='xmlParseMisc' file='parserInternals'>
+ <info>parse an XML Misc* optional field. [27] Misc ::= Comment | PI | S</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseName' file='parserInternals'>
+ <info>parse an XML name. [4] NameChar ::= Letter | Digit | &apos;.&apos; | &apos;-&apos; | &apos;_&apos; | &apos;:&apos; | CombiningChar | Extender [5] Name ::= (Letter | &apos;_&apos; | &apos;:&apos;) (NameChar)* [6] Names ::= Name (S Name)*</info>
+ <return type='const xmlChar *' info='the Name parsed or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseNamespace' file='parserInternals'>
+ <info>xmlParseNamespace: parse specific PI &apos;&lt;?namespace ...&apos; constructs. This is what the older xml-name Working Draft specified, a bunch of other stuff may still rely on it, so support is still here as if it was declared on the root of the Tree:-( TODO: remove from library To be removed at next drop of binary compatibility</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseNmtoken' file='parserInternals'>
+ <info>parse an XML Nmtoken. [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (S Nmtoken)*</info>
+ <return type='xmlChar *' info='the Nmtoken parsed or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseNotationDecl' file='parserInternals'>
+ <info>parse a notation declaration [82] NotationDecl ::= &apos;&lt;!NOTATION&apos; S Name S (ExternalID | PublicID) S? &apos;&gt;&apos; Hence there is actually 3 choices: &apos;PUBLIC&apos; S PubidLiteral &apos;PUBLIC&apos; S PubidLiteral S SystemLiteral and &apos;SYSTEM&apos; S SystemLiteral See the NOTE on xmlParseExternalID().</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseNotationType' file='parserInternals'>
+ <info>parse an Notation attribute type. Note: the leading &apos;NOTATION&apos; S part has already being parsed... [58] NotationType ::= &apos;NOTATION&apos; S &apos;(&apos; S? Name (S? &apos;|&apos; S? Name)* S? &apos;)&apos; [ VC: Notation Attributes ] Values of this type must match one of the notation names included in the declaration; all notation names in the declaration must be declared.</info>
+ <return type='xmlEnumerationPtr' info='the notation attribute tree built while parsing'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParsePEReference' file='parserInternals'>
+ <info>parse PEReference declarations The entity content is handled directly by pushing it&apos;s content as a new input stream. [69] PEReference ::= &apos;%&apos; Name &apos;;&apos; [ WFC: No Recursion ] A parsed entity must not contain a recursive reference to itself, either directly or indirectly. [ WFC: Entity Declared ] In a document without any DTD, a document with only an internal DTD subset which contains no parameter entity references, or a document with &quot;standalone=&apos;yes&apos;&quot;, ... ... The declaration of a parameter entity must precede any reference to it... [ VC: Entity Declared ] In a document with an external subset or external parameter entities with &quot;standalone=&apos;no&apos;&quot;, ... ... The declaration of a parameter entity must precede any reference to it... [ WFC: In DTD ] Parameter-entity references may only appear in the DTD. NOTE: misleading but this is handled.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParsePI' file='parserInternals'>
+ <info>parse an XML Processing Instruction. [16] PI ::= &apos;&lt;?&apos; PITarget (S (Char* - (Char* &apos;?&gt;&apos; Char*)))? &apos;?&gt;&apos; The processing is transfered to SAX once parsed.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParsePITarget' file='parserInternals'>
+ <info>parse the name of a PI [17] PITarget ::= Name - ((&apos;X&apos; | &apos;x&apos;) (&apos;M&apos; | &apos;m&apos;) (&apos;L&apos; | &apos;l&apos;))</info>
+ <return type='const xmlChar *' info='the PITarget name or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParsePubidLiteral' file='parserInternals'>
+ <info>parse an XML public literal [12] PubidLiteral ::= &apos;&quot;&apos; PubidChar* &apos;&quot;&apos; | &quot;&apos;&quot; (PubidChar - &quot;&apos;&quot;)* &quot;&apos;&quot;</info>
+ <return type='xmlChar *' info='the PubidLiteral parsed or NULL.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseQuotedString' file='parserInternals'>
+ <info>Parse and return a string between quotes or doublequotes TODO: Deprecated, to be removed at next drop of binary compatibility</info>
+ <return type='xmlChar *' info='the string parser or NULL.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseReference' file='parserInternals'>
+ <info>parse and handle entity references in content, depending on the SAX interface, this may end-up in a call to character() if this is a CharRef, a predefined entity, if there is no reference() callback. or if the parser was asked to switch to that mode. [67] Reference ::= EntityRef | CharRef</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseSDDecl' file='parserInternals'>
+ <info>parse the XML standalone declaration [32] SDDecl ::= S &apos;standalone&apos; Eq ((&quot;&apos;&quot; (&apos;yes&apos; | &apos;no&apos;) &quot;&apos;&quot;) | (&apos;&quot;&apos; (&apos;yes&apos; | &apos;no&apos;)&apos;&quot;&apos;)) [ VC: Standalone Document Declaration ] TODO The standalone document declaration must have the value &quot;no&quot; if any external markup declarations contain declarations of: - attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or - entities (other than amp, lt, gt, apos, quot), if references to those entities appear in the document, or - attributes with values subject to normalization, where the attribute appears in the document with a value which will change as a result of normalization, or - element types with element content, if white space occurs directly within any instance of those types.</info>
+ <return type='int' info='1 if standalone, 0 otherwise'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseStartTag' file='parserInternals'>
+ <info>parse a start of tag either for rule element or EmptyElement. In both case we don&apos;t parse the tag closing chars. [40] STag ::= &apos;&lt;&apos; Name (S Attribute)* S? &apos;&gt;&apos; [ WFC: Unique Att Spec ] No attribute name may appear more than once in the same start-tag or empty-element tag. [44] EmptyElemTag ::= &apos;&lt;&apos; Name (S Attribute)* S? &apos;/&gt;&apos; [ WFC: Unique Att Spec ] No attribute name may appear more than once in the same start-tag or empty-element tag. With namespace: [NS 8] STag ::= &apos;&lt;&apos; QName (S Attribute)* S? &apos;&gt;&apos; [NS 10] EmptyElement ::= &apos;&lt;&apos; QName (S Attribute)* S? &apos;/&gt;&apos;</info>
+ <return type='const xmlChar *' info='the element name parsed'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseSystemLiteral' file='parserInternals'>
+ <info>parse an XML Literal [11] SystemLiteral ::= (&apos;&quot;&apos; [^&quot;]* &apos;&quot;&apos;) | (&quot;&apos;&quot; [^&apos;]* &quot;&apos;&quot;)</info>
+ <return type='xmlChar *' info='the SystemLiteral parsed or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseTextDecl' file='parserInternals'>
+ <info>parse an XML declaration header for external entities [77] TextDecl ::= &apos;&lt;?xml&apos; VersionInfo? EncodingDecl S? &apos;?&gt;&apos; Question: Seems that EncodingDecl is mandatory ? Is that a typo ?</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseURI' file='uri'>
+ <info>Parse an URI URI-reference = [ absoluteURI | relativeURI ] [ &quot;#&quot; fragment ]</info>
+ <return type='xmlURIPtr' info='a newly build xmlURIPtr or NULL in case of error'/>
+ <arg name='str' type='const char *' info='the URI string to analyze'/>
+ </function>
+ <function name='xmlParseURIReference' file='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'/>
+ <arg name='uri' type='xmlURIPtr' info='pointer to an URI structure'/>
+ <arg name='str' type='const char *' info='the string to analyze'/>
+ </function>
+ <function name='xmlParseVersionInfo' file='parserInternals'>
+ <info>parse the XML version. [24] VersionInfo ::= S &apos;version&apos; Eq (&apos; VersionNum &apos; | &quot; VersionNum &quot;) [25] Eq ::= S? &apos;=&apos; S?</info>
+ <return type='xmlChar *' info='the version string, e.g. &quot;1.0&quot;'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseVersionNum' file='parserInternals'>
+ <info>parse the XML version value. [26] VersionNum ::= ([a-zA-Z0-9_.:] | &apos;-&apos;)+</info>
+ <return type='xmlChar *' info='the string giving the XML version number, or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParseXMLDecl' file='parserInternals'>
+ <info>parse an XML declaration header [23] XMLDecl ::= &apos;&lt;?xml&apos; VersionInfo EncodingDecl? SDDecl? S? &apos;?&gt;&apos;</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlParserAddNodeInfo' file='parser'>
+ <info>Insert node info record into the sorted sequence</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='info' type='const xmlParserNodeInfoPtr' info='a node info sequence pointer'/>
+ </function>
+ <function name='xmlParserError' file='xmlerror'>
+ <info>Display and format an error messages, gives file, line, position and extra parameters.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an XML parser context'/>
+ <arg name='msg' type='const char *' info='the message to display/transmit'/>
+ <arg name='...' type='...' info='extra parameters for the message display'/>
+ </function>
+ <function name='xmlParserFindNodeInfo' file='parser'>
+ <info>Find the parser node info struct for a given node</info>
+ <return type='const xmlParserNodeInfo *' info='an xmlParserNodeInfo block pointer or NULL'/>
+ <arg name='ctx' type='const xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='node' type='const xmlNodePtr' info='an XML node within the tree'/>
+ </function>
+ <function name='xmlParserFindNodeInfoIndex' file='parser'>
+ <info>xmlParserFindNodeInfoIndex : Find the index that the info record for the given node is or should be at in a sorted sequence</info>
+ <return type='unsigned long' info='a long indicating the position of the record'/>
+ <arg name='seq' type='const xmlParserNodeInfoSeqPtr' info='a node info sequence pointer'/>
+ <arg name='node' type='const xmlNodePtr' info='an XML node pointer'/>
+ </function>
+ <function name='xmlParserGetDirectory' file='xmlIO'>
+ <info>lookup the directory for that file</info>
+ <return type='char *' info='a new allocated string containing the directory, or NULL.'/>
+ <arg name='filename' type='const char *' info='the path to a file'/>
+ </function>
+ <function name='xmlParserHandlePEReference' file='parserInternals'>
+ <info>[69] PEReference ::= &apos;%&apos; Name &apos;;&apos; [ WFC: No Recursion ] A parsed entity must not contain a recursive reference to itself, either directly or indirectly. [ WFC: Entity Declared ] In a document without any DTD, a document with only an internal DTD subset which contains no parameter entity references, or a document with &quot;standalone=&apos;yes&apos;&quot;, ... ... The declaration of a parameter entity must precede any reference to it... [ VC: Entity Declared ] In a document with an external subset or external parameter entities with &quot;standalone=&apos;no&apos;&quot;, ... ... The declaration of a parameter entity must precede any reference to it... [ WFC: In DTD ] Parameter-entity references may only appear in the DTD. NOTE: misleading but this is handled. A PEReference may have been detected in the current input stream the handling is done accordingly to http://www.w3.org/TR/REC-xml#entproc i.e. - Included in literal in entity values - Included as Parameter Entity reference within DTDs</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ </function>
+ <function name='xmlParserHandleReference' file='parserInternals'>
+ <info>TODO: Remove, now deprecated ... the test is done directly in the content parsing routines. [67] Reference ::= EntityRef | CharRef [68] EntityRef ::= &apos;&amp;&apos; Name &apos;;&apos; [ WFC: Entity Declared ] the Name given in the entity reference must match that in an entity declaration, except that well-formed documents need not declare any of the following entities: amp, lt, gt, apos, quot. [ WFC: Parsed Entity ] An entity reference must not contain the name of an unparsed entity [66] CharRef ::= &apos;&amp;#&apos; [0-9]+ &apos;;&apos; | &apos;&amp;#x&apos; [0-9a-fA-F]+ &apos;;&apos; A PEReference may have been detected in the current input stream the handling is done accordingly to http://www.w3.org/TR/REC-xml#entproc</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ </function>
+ <function name='xmlParserInputBufferCreateFd' file='xmlIO'>
+ <info>Create a buffered parser input for the progressive parsing for the input from a file descriptor</info>
+ <return type='xmlParserInputBufferPtr' info='the new parser input or NULL'/>
+ <arg name='fd' type='int' info='a file descriptor number'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlParserInputBufferCreateFile' file='xmlIO'>
+ <info>Create a buffered parser input for the progressive parsing of a FILE * buffered C I/O</info>
+ <return type='xmlParserInputBufferPtr' info='the new parser input or NULL'/>
+ <arg name='file' type='FILE *' info='a FILE*'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlParserInputBufferCreateFilename' file='xmlIO'>
+ <info>Create a buffered parser input for the progressive parsing of a file If filename is &quot;-&apos; then we use stdin as the input. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. Do an encoding check if enc == XML_CHAR_ENCODING_NONE</info>
+ <return type='xmlParserInputBufferPtr' info='the new parser input or NULL'/>
+ <arg name='URI' type='const char *' info='a C string containing the URI or filename'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlParserInputBufferCreateIO' file='xmlIO'>
+ <info>Create a buffered parser input for the progressive parsing for the input from an I/O handler</info>
+ <return type='xmlParserInputBufferPtr' info='the new parser input or NULL'/>
+ <arg name='ioread' type='xmlInputReadCallback' info='an I/O read function'/>
+ <arg name='ioclose' type='xmlInputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlParserInputBufferCreateMem' file='xmlIO'>
+ <info>Create a buffered parser input for the progressive parsing for the input from a memory area.</info>
+ <return type='xmlParserInputBufferPtr' info='the new parser input or NULL'/>
+ <arg name='mem' type='const char *' info='the memory input'/>
+ <arg name='size' type='int' info='the length of the memory block'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlParserInputBufferCreateStatic' file='xmlIO'>
+ <info>Create a buffered parser input for the progressive parsing for the input from an immutable memory area. This will not copy the memory area to the buffer, but the memory is expected to be available until the end of the parsing, this is useful for example when using mmap&apos;ed file.</info>
+ <return type='xmlParserInputBufferPtr' info='the new parser input or NULL'/>
+ <arg name='mem' type='const char *' info='the memory input'/>
+ <arg name='size' type='int' info='the length of the memory block'/>
+ <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
+ </function>
+ <function name='xmlParserInputBufferGrow' file='xmlIO'>
+ <info>Grow up the content of the input buffer, the old data are preserved This routine handle the I18N transcoding to internal UTF-8 This routine is used when operating the parser in normal (pull) mode TODO: one should be able to remove one extra copy by copying directly onto in-&gt;buffer or in-&gt;raw</info>
+ <return type='int' info='the number of chars read and stored in the buffer, or -1 in case of error.'/>
+ <arg name='in' type='xmlParserInputBufferPtr' info='a buffered parser input'/>
+ <arg name='len' type='int' info='indicative value of the amount of chars to read'/>
+ </function>
+ <function name='xmlParserInputBufferPush' file='xmlIO'>
+ <info>Push the content of the arry in the input buffer This routine handle the I18N transcoding to internal UTF-8 This is used when operating the parser in progressive (push) mode.</info>
+ <return type='int' info='the number of chars read and stored in the buffer, or -1 in case of error.'/>
+ <arg name='in' type='xmlParserInputBufferPtr' info='a buffered parser input'/>
+ <arg name='len' type='int' info='the size in bytes of the array.'/>
+ <arg name='buf' type='const char *' info='an char array'/>
+ </function>
+ <function name='xmlParserInputBufferRead' file='xmlIO'>
+ <info>Refresh the content of the input buffer, the old data are considered consumed This routine handle the I18N transcoding to internal UTF-8</info>
+ <return type='int' info='the number of chars read and stored in the buffer, or -1 in case of error.'/>
+ <arg name='in' type='xmlParserInputBufferPtr' info='a buffered parser input'/>
+ <arg name='len' type='int' info='indicative value of the amount of chars to read'/>
+ </function>
+ <functype name='xmlParserInputDeallocate' file='parser'>
+ <info>Callback for freeing some parser input allocations.</info>
+ <return type='void'/>
+ <arg name='str' type='xmlChar *' info='the string to deallocate'/>
+ </functype>
+ <function name='xmlParserInputGrow' file='parser'>
+ <info>This function increase the input for the parser. It tries to preserve pointers to the input buffer, and keep already read data</info>
+ <return type='int' info='the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity'/>
+ <arg name='in' type='xmlParserInputPtr' info='an XML parser input'/>
+ <arg name='len' type='int' info='an indicative size for the lookahead'/>
+ </function>
+ <function name='xmlParserInputRead' file='parser'>
+ <info>This function refresh the input for the parser. It doesn&apos;t try to preserve pointers to the input buffer, and discard already read data</info>
+ <return type='int' info='the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity'/>
+ <arg name='in' type='xmlParserInputPtr' info='an XML parser input'/>
+ <arg name='len' type='int' info='an indicative size for the lookahead'/>
+ </function>
+ <function name='xmlParserInputShrink' file='parserInternals'>
+ <info>This function removes used input for the parser.</info>
+ <return type='void'/>
+ <arg name='in' type='xmlParserInputPtr' info='an XML parser input'/>
+ </function>
+ <function name='xmlParserPrintFileContext' file='xmlerror'>
+ <info>Displays current context within the input content for error tracking</info>
+ <return type='void'/>
+ <arg name='input' type='xmlParserInputPtr' info='an xmlParserInputPtr input'/>
+ </function>
+ <function name='xmlParserPrintFileInfo' file='xmlerror'>
+ <info>Displays the associated file and line informations for the current input</info>
+ <return type='void'/>
+ <arg name='input' type='xmlParserInputPtr' info='an xmlParserInputPtr input'/>
+ </function>
+ <function name='xmlParserValidityError' file='xmlerror'>
+ <info>Display and format an validity error messages, gives file, line, position and extra parameters.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an XML parser context'/>
+ <arg name='msg' type='const char *' info='the message to display/transmit'/>
+ <arg name='...' type='...' info='extra parameters for the message display'/>
+ </function>
+ <function name='xmlParserValidityWarning' file='xmlerror'>
+ <info>Display and format a validity warning messages, gives file, line, position and extra parameters.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an XML parser context'/>
+ <arg name='msg' type='const char *' info='the message to display/transmit'/>
+ <arg name='...' type='...' info='extra parameters for the message display'/>
+ </function>
+ <function name='xmlParserWarning' file='xmlerror'>
+ <info>Display and format a warning messages, gives file, line, position and extra parameters.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an XML parser context'/>
+ <arg name='msg' type='const char *' info='the message to display/transmit'/>
+ <arg name='...' type='...' info='extra parameters for the message display'/>
+ </function>
+ <function name='xmlPatternMatch' file='pattern'>
+ <info>Test wether the node matches the pattern</info>
+ <return type='int' info='1 if it matches, 0 if it doesn&apos;t and -1 in case of failure'/>
+ <arg name='comp' type='xmlPatternPtr' info='the precompiled pattern'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ </function>
+ <function name='xmlPatterncompile' file='pattern'>
+ <info>Compile a pattern.</info>
+ <return type='xmlPatternPtr' info='the compiled for 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 dictionnary for interned strings'/>
+ <arg name='flags' type='int' info='compilation flags, undefined yet'/>
+ <arg name='namespaces' type='const xmlChar **' info='the prefix definitions, array of [URI, prefix] or NULL'/>
+ </function>
+ <function name='xmlPedanticParserDefault' file='parser'>
+ <info>Set and return the previous value for enabling pedantic warnings.</info>
+ <return type='int' info='the last value for 0 for no substitution, 1 for substitution.'/>
+ <arg name='val' type='int' info='int 0 or 1'/>
+ </function>
+ <function name='xmlPopInput' file='parserInternals'>
+ <info>xmlPopInput: the current input pointed by ctxt-&gt;input came to an end pop it and return the next char.</info>
+ <return type='xmlChar' info='the current xmlChar in the parser context'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlPrintURI' file='uri'>
+ <info>Prints the URI in the stream @steam.</info>
+ <return type='void'/>
+ <arg name='stream' type='FILE *' info='a FILE* for the output'/>
+ <arg name='uri' type='xmlURIPtr' info='pointer to an xmlURI'/>
+ </function>
+ <function name='xmlPushInput' file='parserInternals'>
+ <info>xmlPushInput: switch to a new input stream which is stacked on top of the previous one(s).</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='input' type='xmlParserInputPtr' info='an XML parser input fragment (entity, XML fragment ...).'/>
+ </function>
+ <function name='xmlRMutexLock' file='threads'>
+ <info>xmlRMutexLock() is used to lock a libxml2 token_r.</info>
+ <return type='void'/>
+ <arg name='tok' type='xmlRMutexPtr' info='the reentrant mutex'/>
+ </function>
+ <function name='xmlRMutexUnlock' file='threads'>
+ <info>xmlRMutexUnlock() is used to unlock a libxml2 token_r.</info>
+ <return type='void'/>
+ <arg name='tok' type='xmlRMutexPtr' info='the reentrant mutex'/>
+ </function>
+ <function name='xmlReadDoc' file='parser'>
+ <info>parse an XML in-memory document and build a tree.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='cur' type='const xmlChar *' info='a pointer to a zero terminated string'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReadFd' file='parser'>
+ <info>parse an XML from a file descriptor and build a tree. NOTE that the file descriptor will not be closed when the reader is closed or reset.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='fd' type='int' info='an open file descriptor'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReadFile' file='parser'>
+ <info>parse an XML file from the filesystem or the network.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='filename' type='const char *' info='a file or URL'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReadIO' file='parser'>
+ <info>parse an XML document from I/O functions and source and build a tree.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='ioread' type='xmlInputReadCallback' info='an I/O read function'/>
+ <arg name='ioclose' type='xmlInputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReadMemory' file='parser'>
+ <info>parse an XML in-memory document and build a tree.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='buffer' type='const char *' info='a pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderForDoc' file='xmlreader'>
+ <info>Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption.</info>
+ <return type='xmlTextReaderPtr' info='the new reader or NULL in case of error.'/>
+ <arg name='cur' type='const xmlChar *' info='a pointer to a zero terminated string'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderForFd' file='xmlreader'>
+ <info>Create an xmltextReader for an XML from a file descriptor. The parsing flags @options are a combination of xmlParserOption. NOTE that the file descriptor will not be closed when the reader is closed or reset.</info>
+ <return type='xmlTextReaderPtr' info='the new reader or NULL in case of error.'/>
+ <arg name='fd' type='int' info='an open file descriptor'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderForFile' file='xmlreader'>
+ <info>parse an XML file from the filesystem or the network. The parsing flags @options are a combination of xmlParserOption.</info>
+ <return type='xmlTextReaderPtr' info='the new reader or NULL in case of error.'/>
+ <arg name='filename' type='const char *' info='a file or URL'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderForIO' file='xmlreader'>
+ <info>Create an xmltextReader for an XML document from I/O functions and source. The parsing flags @options are a combination of xmlParserOption.</info>
+ <return type='xmlTextReaderPtr' info='the new reader or NULL in case of error.'/>
+ <arg name='ioread' type='xmlInputReadCallback' info='an I/O read function'/>
+ <arg name='ioclose' type='xmlInputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderForMemory' file='xmlreader'>
+ <info>Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption.</info>
+ <return type='xmlTextReaderPtr' info='the new reader or NULL in case of error.'/>
+ <arg name='buffer' type='const char *' info='a pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderNewDoc' file='xmlreader'>
+ <info>Setup an xmltextReader to parse an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</info>
+ <return type='int' info='0 in case of success and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='an XML reader'/>
+ <arg name='cur' type='const xmlChar *' info='a pointer to a zero terminated string'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderNewFd' file='xmlreader'>
+ <info>Setup an xmltextReader to parse an XML from a file descriptor. NOTE that the file descriptor will not be closed when the reader is closed or reset. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</info>
+ <return type='int' info='0 in case of success and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='an XML reader'/>
+ <arg name='fd' type='int' info='an open file descriptor'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderNewFile' file='xmlreader'>
+ <info>parse an XML file from the filesystem or the network. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</info>
+ <return type='int' info='0 in case of success and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='an XML reader'/>
+ <arg name='filename' type='const char *' info='a file or URL'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderNewIO' file='xmlreader'>
+ <info>Setup an xmltextReader to parse an XML document from I/O functions and source. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</info>
+ <return type='int' info='0 in case of success and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='an XML reader'/>
+ <arg name='ioread' type='xmlInputReadCallback' info='an I/O read function'/>
+ <arg name='ioclose' type='xmlInputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderNewMemory' file='xmlreader'>
+ <info>Setup an xmltextReader to parse an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.</info>
+ <return type='int' info='0 in case of success and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='an XML reader'/>
+ <arg name='buffer' type='const char *' info='a pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ <arg name='URL' type='const char *' info='the base URL to use for the document'/>
+ <arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
+ <arg name='options' type='int' info='a combination of xmlParserOption'/>
+ </function>
+ <function name='xmlReaderNewWalker' file='xmlreader'>
+ <info>Setup an xmltextReader to parse a preparsed XML document. This reuses the existing @reader xmlTextReader.</info>
+ <return type='int' info='0 in case of success and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='an XML reader'/>
+ <arg name='doc' type='xmlDocPtr' info='a preparsed document'/>
+ </function>
+ <function name='xmlReaderWalker' file='xmlreader'>
+ <info>Create an xmltextReader for a preparsed document.</info>
+ <return type='xmlTextReaderPtr' info='the new reader or NULL in case of error.'/>
+ <arg name='doc' type='xmlDocPtr' info='a preparsed document'/>
+ </function>
+ <functype name='xmlReallocFunc' file='xmlmemory'>
+ <info>Signature for a realloc() implementation.</info>
+ <return type='void *' info='a pointer to the newly reallocated block or NULL in case of error.'/>
+ <arg name='mem' type='void *' info='an already allocated block of memory'/>
+ <arg name='size' type='size_t' info='the new size requested in bytes'/>
+ </functype>
+ <function name='xmlReallocLoc' file='xmlmemory'>
+ <info>a realloc() equivalent, with logging of the allocation info.</info>
+ <return type='void *' info='a pointer to the allocated area or NULL in case of lack of memory.'/>
+ <arg name='ptr' type='void *' info='the initial memory block pointer'/>
+ <arg name='size' type='size_t' info='an int specifying the size in byte to allocate.'/>
+ <arg name='file' type='const char *' info='the file name or NULL'/>
+ <arg name='line' type='int' info='the line number'/>
+ </function>
+ <function name='xmlReconciliateNs' file='tree'>
+ <info>This function checks that all the namespaces declared within the given tree are properly declared. This is needed for example after Copy or Cut and then paste operations. The subtree may still hold pointers to namespace declarations outside the subtree or invalid/masked. As much as possible the function try to reuse the existing namespaces found in the new environment. If not possible the new namespaces are redeclared on @tree at the top of the given subtree.</info>
+ <return type='int' info='the number of namespace declarations created or -1 in case of error.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='tree' type='xmlNodePtr' info='a node defining the subtree to reconciliate'/>
+ </function>
+ <function name='xmlRecoverDoc' file='parser'>
+ <info>parse an XML in-memory document and build a tree. In the case the document is not Well Formed, a tree is built anyway</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='cur' type='xmlChar *' info='a pointer to an array of xmlChar'/>
+ </function>
+ <function name='xmlRecoverFile' file='parser'>
+ <info>parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. In the case the document is not Well Formed, a tree is built anyway</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ </function>
+ <function name='xmlRecoverMemory' file='parser'>
+ <info>parse an XML in-memory block and build a tree. In the case the document is not Well Formed, a tree is built anyway</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='buffer' type='const char *' info='an pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ </function>
+ <functype name='xmlRegExecCallbacks' file='xmlregexp'>
+ <info></info>
+ <return type='void'/>
+ <arg name='exec' type='xmlRegExecCtxtPtr' info=''/>
+ <arg name='token' type='const xmlChar *' info=''/>
+ <arg name='transdata' type='void *' info=''/>
+ <arg name='inputdata' type='void *' info=''/>
+ </functype>
+ <function name='xmlRegExecPushString' file='xmlregexp'>
+ <info>Push one input token in the execution context</info>
+ <return type='int' info='1 if the regexp reached a final state, 0 if non-final, and a negative value in case of error.'/>
+ <arg name='exec' type='xmlRegExecCtxtPtr' info='a regexp execution context or NULL to indicate the end'/>
+ <arg name='value' type='const xmlChar *' info='a string token input'/>
+ <arg name='data' type='void *' info='data associated to the token to reuse in callbacks'/>
+ </function>
+ <function name='xmlRegExecPushString2' file='xmlregexp'>
+ <info>Push one input token in the execution context</info>
+ <return type='int' info='1 if the regexp reached a final state, 0 if non-final, and a negative value in case of error.'/>
+ <arg name='exec' type='xmlRegExecCtxtPtr' info='a regexp execution context or NULL to indicate the end'/>
+ <arg name='value' type='const xmlChar *' info='the first string token input'/>
+ <arg name='value2' type='const xmlChar *' info='the second string token input'/>
+ <arg name='data' type='void *' info='data associated to the token to reuse in callbacks'/>
+ </function>
+ <function name='xmlRegFreeExecCtxt' file='xmlregexp'>
+ <info>Free the structures associated to a regular expression evaulation context.</info>
+ <return type='void'/>
+ <arg name='exec' type='xmlRegExecCtxtPtr' info='a regular expression evaulation context'/>
+ </function>
+ <function name='xmlRegFreeRegexp' file='xmlregexp'>
+ <info>Free a regexp</info>
+ <return type='void'/>
+ <arg name='regexp' type='xmlRegexpPtr' info='the regexp'/>
+ </function>
+ <function name='xmlRegNewExecCtxt' file='xmlregexp'>
+ <info>Build a context used for progressive evaluation of a regexp.</info>
+ <return type='xmlRegExecCtxtPtr' info='the new context'/>
+ <arg name='comp' type='xmlRegexpPtr' info='a precompiled regular expression'/>
+ <arg name='callback' type='xmlRegExecCallbacks' info='a callback function used for handling progresses in the automata matching phase'/>
+ <arg name='data' type='void *' info='the context data associated to the callback in this context'/>
+ </function>
+ <function name='xmlRegexpCompile' file='xmlregexp'>
+ <info>Parses a regular expression conforming to XML Schemas Part 2 Datatype Appendix F and build an automata suitable for testing strings against that regular expression</info>
+ <return type='xmlRegexpPtr' info='the compiled expression or NULL in case of error'/>
+ <arg name='regexp' type='const xmlChar *' info='a regular expression string'/>
+ </function>
+ <function name='xmlRegexpExec' file='xmlregexp'>
+ <info>Check if the regular expression generate the value</info>
+ <return type='int' info='1 if it matches, 0 if not and a negativa value in case of error'/>
+ <arg name='comp' type='xmlRegexpPtr' info='the compiled regular expression'/>
+ <arg name='content' type='const xmlChar *' info='the value to check against the regular expression'/>
+ </function>
+ <function name='xmlRegexpIsDeterminist' file='xmlregexp'>
+ <info>Check if the regular expression is determinist</info>
+ <return type='int' info='1 if it yes, 0 if not and a negativa value in case of error'/>
+ <arg name='comp' type='xmlRegexpPtr' info='the compiled regular expression'/>
+ </function>
+ <function name='xmlRegexpPrint' file='xmlregexp'>
+ <info>Print the content of the compiled regular expression</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the file for the output debug'/>
+ <arg name='regexp' type='xmlRegexpPtr' info='the compiled regexp'/>
+ </function>
+ <function name='xmlRegisterCharEncodingHandler' file='encoding'>
+ <info>Register the char encoding handler, surprising, isn&apos;t it ?</info>
+ <return type='void'/>
+ <arg name='handler' type='xmlCharEncodingHandlerPtr' info='the xmlCharEncodingHandlerPtr handler block'/>
+ </function>
+ <function name='xmlRegisterDefaultInputCallbacks' file='xmlIO'>
+ <info>Registers the default compiled-in I/O handlers.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlRegisterDefaultOutputCallbacks' file='xmlIO'>
+ <info>Registers the default compiled-in I/O handlers.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlRegisterHTTPPostCallbacks' file='xmlIO'>
+ <info>By default, libxml submits HTTP output requests using the &quot;PUT&quot; method. Calling this method changes the HTTP output method to use the &quot;POST&quot; method instead.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlRegisterInputCallbacks' file='xmlIO'>
+ <info>Register a new set of I/O callback for handling parser input.</info>
+ <return type='int' info='the registered handler number or -1 in case of error'/>
+ <arg name='matchFunc' type='xmlInputMatchCallback' info='the xmlInputMatchCallback'/>
+ <arg name='openFunc' type='xmlInputOpenCallback' info='the xmlInputOpenCallback'/>
+ <arg name='readFunc' type='xmlInputReadCallback' info='the xmlInputReadCallback'/>
+ <arg name='closeFunc' type='xmlInputCloseCallback' info='the xmlInputCloseCallback'/>
+ </function>
+ <function name='xmlRegisterNodeDefault' file='globals'>
+ <info>Registers a callback for node creation</info>
+ <return type='xmlRegisterNodeFunc' info='the old value of the registration function'/>
+ <arg name='func' type='xmlRegisterNodeFunc' info='function pointer to the new RegisterNodeFunc'/>
+ </function>
+ <functype name='xmlRegisterNodeFunc' file='globals'>
+ <info></info>
+ <return type='void'/>
+ <arg name='node' type='xmlNodePtr' info=''/>
+ </functype>
+ <function name='xmlRegisterOutputCallbacks' file='xmlIO'>
+ <info>Register a new set of I/O callback for handling output.</info>
+ <return type='int' info='the registered handler number or -1 in case of error'/>
+ <arg name='matchFunc' type='xmlOutputMatchCallback' info='the xmlOutputMatchCallback'/>
+ <arg name='openFunc' type='xmlOutputOpenCallback' info='the xmlOutputOpenCallback'/>
+ <arg name='writeFunc' type='xmlOutputWriteCallback' info='the xmlOutputWriteCallback'/>
+ <arg name='closeFunc' type='xmlOutputCloseCallback' info='the xmlOutputCloseCallback'/>
+ </function>
+ <function name='xmlRelaxNGCleanupTypes' file='relaxng'>
+ <info>Cleanup the default Schemas type library associated to RelaxNG</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlRelaxNGDump' file='relaxng'>
+ <info>Dump a RelaxNG structure back</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the file output'/>
+ <arg name='schema' type='xmlRelaxNGPtr' info='a schema structure'/>
+ </function>
+ <function name='xmlRelaxNGDumpTree' file='relaxng'>
+ <info>Dump the transformed RelaxNG tree.</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the file output'/>
+ <arg name='schema' type='xmlRelaxNGPtr' info='a schema structure'/>
+ </function>
+ <function name='xmlRelaxNGFree' file='relaxng'>
+ <info>Deallocate a RelaxNG structure.</info>
+ <return type='void'/>
+ <arg name='schema' type='xmlRelaxNGPtr' info='a schema structure'/>
+ </function>
+ <function name='xmlRelaxNGFreeParserCtxt' file='relaxng'>
+ <info>Free the resources associated to the schema parser context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlRelaxNGParserCtxtPtr' info='the schema parser context'/>
+ </function>
+ <function name='xmlRelaxNGFreeValidCtxt' file='relaxng'>
+ <info>Free the resources associated to the schema validation context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='the schema validation context'/>
+ </function>
+ <function name='xmlRelaxNGGetParserErrors' file='relaxng'>
+ <info>Get the callback information used to handle errors for a validation context</info>
+ <return type='int' info='-1 in case of failure, 0 otherwise.'/>
+ <arg name='ctxt' type='xmlRelaxNGParserCtxtPtr' info='a Relax-NG validation context'/>
+ <arg name='err' type='xmlRelaxNGValidityErrorFunc *' info='the error callback result'/>
+ <arg name='warn' type='xmlRelaxNGValidityWarningFunc *' info='the warning callback result'/>
+ <arg name='ctx' type='void **' info='contextual data for the callbacks result'/>
+ </function>
+ <function name='xmlRelaxNGGetValidErrors' file='relaxng'>
+ <info>Get the error and warning callback informations</info>
+ <return type='int' info='-1 in case of error and 0 otherwise'/>
+ <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='a Relax-NG validation context'/>
+ <arg name='err' type='xmlRelaxNGValidityErrorFunc *' info='the error function result'/>
+ <arg name='warn' type='xmlRelaxNGValidityWarningFunc *' info='the warning function result'/>
+ <arg name='ctx' type='void **' info='the functions context result'/>
+ </function>
+ <function name='xmlRelaxNGNewDocParserCtxt' file='relaxng'>
+ <info>Create an XML RelaxNGs parser context for that document. Note: since the process of compiling a RelaxNG schemas modifies the document, the @doc parameter is duplicated internally.</info>
+ <return type='xmlRelaxNGParserCtxtPtr' info='the parser context or NULL in case of error'/>
+ <arg name='doc' type='xmlDocPtr' info='a preparsed document tree'/>
+ </function>
+ <function name='xmlRelaxNGNewMemParserCtxt' file='relaxng'>
+ <info>Create an XML RelaxNGs parse context for that memory buffer expected to contain an XML RelaxNGs file.</info>
+ <return type='xmlRelaxNGParserCtxtPtr' 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='xmlRelaxNGNewParserCtxt' file='relaxng'>
+ <info>Create an XML RelaxNGs parse context for that file/resource expected to contain an XML RelaxNGs file.</info>
+ <return type='xmlRelaxNGParserCtxtPtr' 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='xmlRelaxNGNewValidCtxt' file='relaxng'>
+ <info>Create an XML RelaxNGs validation context based on the given schema</info>
+ <return type='xmlRelaxNGValidCtxtPtr' info='the validation context or NULL in case of error'/>
+ <arg name='schema' type='xmlRelaxNGPtr' info='a precompiled XML RelaxNGs'/>
+ </function>
+ <function name='xmlRelaxNGParse' file='relaxng'>
+ <info>parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances. *WARNING* this interface is highly subject to change</info>
+ <return type='xmlRelaxNGPtr' info='the internal XML RelaxNG structure built from the resource or NULL in case of error'/>
+ <arg name='ctxt' type='xmlRelaxNGParserCtxtPtr' info='a Relax-NG parser context'/>
+ </function>
+ <function name='xmlRelaxNGSetParserErrors' file='relaxng'>
+ <info>Set the callback functions used to handle errors for a validation context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlRelaxNGParserCtxtPtr' info='a Relax-NG validation context'/>
+ <arg name='err' type='xmlRelaxNGValidityErrorFunc' info='the error callback'/>
+ <arg name='warn' type='xmlRelaxNGValidityWarningFunc' info='the warning callback'/>
+ <arg name='ctx' type='void *' info='contextual data for the callbacks'/>
+ </function>
+ <function name='xmlRelaxNGSetValidErrors' file='relaxng'>
+ <info>Set the error and warning callback informations</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='a Relax-NG validation context'/>
+ <arg name='err' type='xmlRelaxNGValidityErrorFunc' info='the error function'/>
+ <arg name='warn' type='xmlRelaxNGValidityWarningFunc' info='the warning function'/>
+ <arg name='ctx' type='void *' info='the functions context'/>
+ </function>
+ <function name='xmlRelaxNGValidateDoc' file='relaxng'>
+ <info>Validate a document tree in memory.</info>
+ <return type='int' info='0 if the document is valid, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='a Relax-NG validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a parsed document tree'/>
+ </function>
+ <function name='xmlRelaxNGValidateFullElement' file='relaxng'>
+ <info>Validate a full subtree when xmlRelaxNGValidatePushElement() returned 0 and the content of the node has been expanded.</info>
+ <return type='int' info='1 if no validation problem was found or -1 in case of error.'/>
+ <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlNodePtr' info='an element instance'/>
+ </function>
+ <function name='xmlRelaxNGValidatePopElement' file='relaxng'>
+ <info>Pop the element end from the RelaxNG validation stack.</info>
+ <return type='int' info='1 if no validation problem was found or 0 otherwise'/>
+ <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='the RelaxNG validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlNodePtr' info='an element instance'/>
+ </function>
+ <function name='xmlRelaxNGValidatePushCData' file='relaxng'>
+ <info>check the CData parsed for validation in the current stack</info>
+ <return type='int' info='1 if no validation problem was found or -1 otherwise'/>
+ <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='the RelaxNG validation context'/>
+ <arg name='data' type='const xmlChar *' info='some character data read'/>
+ <arg name='len' type='int' info='the lenght of the data'/>
+ </function>
+ <function name='xmlRelaxNGValidatePushElement' file='relaxng'>
+ <info>Push a new element start on the RelaxNG validation stack.</info>
+ <return type='int' info='1 if no validation problem was found or 0 if validating the element requires a full node, and -1 in case of error.'/>
+ <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlNodePtr' info='an element instance'/>
+ </function>
+ <functype name='xmlRelaxNGValidityErrorFunc' file='relaxng'>
+ <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='xmlRelaxNGValidityWarningFunc' file='relaxng'>
+ <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='xmlRelaxParserSetFlag' file='relaxng'>
+ <info>Semi private function used to pass informations to a parser context which are a combination of xmlRelaxNGParserFlag .</info>
+ <return type='int' info='0 if success and -1 in case of error'/>
+ <arg name='ctxt' type='xmlRelaxNGParserCtxtPtr' info='a RelaxNG parser context'/>
+ <arg name='flags' type='int' info='a set of flags values'/>
+ </function>
+ <function name='xmlRemoveID' file='valid'>
+ <info>Remove the given attribute from the ID table maintained internally.</info>
+ <return type='int' info='-1 if the lookup failed and 0 otherwise'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='attr' type='xmlAttrPtr' info='the attribute'/>
+ </function>
+ <function name='xmlRemoveProp' file='tree'>
+ <info>Unlink and free one attribute, all the content is freed too Note this doesn&apos;t work for namespace definition attributes</info>
+ <return type='int' info='0 if success and -1 in case of error.'/>
+ <arg name='cur' type='xmlAttrPtr' info='an attribute'/>
+ </function>
+ <function name='xmlRemoveRef' file='valid'>
+ <info>Remove the given attribute from the Ref table maintained internally.</info>
+ <return type='int' info='-1 if the lookup failed and 0 otherwise'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='attr' type='xmlAttrPtr' info='the attribute'/>
+ </function>
+ <function name='xmlReplaceNode' file='tree'>
+ <info>Unlink the old node from its current context, prune the new one at the same place. If @cur was already inserted in a document it is first unlinked from its existing context.</info>
+ <return type='xmlNodePtr' info='the @old node'/>
+ <arg name='old' type='xmlNodePtr' info='the old node'/>
+ <arg name='cur' type='xmlNodePtr' info='the node'/>
+ </function>
+ <function name='xmlResetError' file='xmlerror'>
+ <info>Cleanup the error.</info>
+ <return type='void'/>
+ <arg name='err' type='xmlErrorPtr' info='pointer to the error.'/>
+ </function>
+ <function name='xmlResetLastError' file='xmlerror'>
+ <info>Cleanup the last global error registered. For parsing error this does not change the well-formedness result.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlSAX2AttributeDecl' file='SAX2'>
+ <info>An attribute definition has been parsed</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='elem' type='const xmlChar *' info='the name of the element'/>
+ <arg name='fullname' type='const xmlChar *' info='the attribute name'/>
+ <arg name='type' type='int' info='the attribute type'/>
+ <arg name='def' type='int' info='the type of default value'/>
+ <arg name='defaultValue' type='const xmlChar *' info='the attribute default value'/>
+ <arg name='tree' type='xmlEnumerationPtr' info='the tree of enumerated value set'/>
+ </function>
+ <function name='xmlSAX2CDataBlock' file='SAX2'>
+ <info>called when a pcdata block has been parsed</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='value' type='const xmlChar *' info='The pcdata content'/>
+ <arg name='len' type='int' info='the block length'/>
+ </function>
+ <function name='xmlSAX2Characters' file='SAX2'>
+ <info>receiving some chars from the parser.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='ch' type='const xmlChar *' info='a xmlChar string'/>
+ <arg name='len' type='int' info='the number of xmlChar'/>
+ </function>
+ <function name='xmlSAX2CheckNamespace' file='SAX2'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='ctx' type='void *' info=''/>
+ <arg name='nameSpace' type='xmlChar *' info=''/>
+ </function>
+ <function name='xmlSAX2Comment' file='SAX2'>
+ <info>A xmlSAX2Comment has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='value' type='const xmlChar *' info='the xmlSAX2Comment content'/>
+ </function>
+ <function name='xmlSAX2ElementDecl' file='SAX2'>
+ <info>An element definition has been parsed</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the element name'/>
+ <arg name='type' type='int' info='the element type'/>
+ <arg name='content' type='xmlElementContentPtr' info='the element value tree'/>
+ </function>
+ <function name='xmlSAX2EndDocument' file='SAX2'>
+ <info>called when the document end has been detected.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='xmlSAX2EndElement' file='SAX2'>
+ <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)'/>
+ <arg name='name' type='const xmlChar *' info='The element name'/>
+ </function>
+ <function name='xmlSAX2EndElementNs' file='SAX2'>
+ <info>SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='localname' type='const xmlChar *' info='the local name of the element'/>
+ <arg name='prefix' type='const xmlChar *' info='the element namespace prefix if available'/>
+ <arg name='URI' type='const xmlChar *' info='the element namespace name if available'/>
+ </function>
+ <function name='xmlSAX2EntityDecl' file='SAX2'>
+ <info>An entity definition has been parsed</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the entity name'/>
+ <arg name='type' type='int' info='the entity type'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ <arg name='content' type='xmlChar *' info='the entity value (without processing).'/>
+ </function>
+ <function name='xmlSAX2ExternalSubset' file='SAX2'>
+ <info>Callback on external subset declaration.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the root element name'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external ID'/>
+ <arg name='SystemID' type='const xmlChar *' info='the SYSTEM ID (e.g. filename or URL)'/>
+ </function>
+ <function name='xmlSAX2GetColumnNumber' file='SAX2'>
+ <info>Provide the column number of the current parsing point.</info>
+ <return type='int' info='an int'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='xmlSAX2GetEntity' file='SAX2'>
+ <info>Get an entity by name</info>
+ <return type='xmlEntityPtr' info='the xmlEntityPtr if found.'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The entity name'/>
+ </function>
+ <function name='xmlSAX2GetLineNumber' file='SAX2'>
+ <info>Provide the line number of the current parsing point.</info>
+ <return type='int' info='an int'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='xmlSAX2GetNamespace' file='SAX2'>
+ <info></info>
+ <return type='xmlNsPtr' info=''/>
+ <arg name='ctx' type='void *' info=''/>
+ </function>
+ <function name='xmlSAX2GetParameterEntity' file='SAX2'>
+ <info>Get a parameter entity by name</info>
+ <return type='xmlEntityPtr' info='the xmlEntityPtr if found.'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The entity name'/>
+ </function>
+ <function name='xmlSAX2GetPublicId' file='SAX2'>
+ <info>Provides the public ID e.g. &quot;-//SGMLSOURCE//DTD DEMO//EN&quot;</info>
+ <return type='const xmlChar *' info='a xmlChar *'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='xmlSAX2GetSystemId' file='SAX2'>
+ <info>Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd</info>
+ <return type='const xmlChar *' info='a xmlChar *'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='xmlSAX2GlobalNamespace' file='SAX2'>
+ <info></info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info=''/>
+ <arg name='href' type='const xmlChar *' info=''/>
+ <arg name='prefix' type='const xmlChar *' info=''/>
+ </function>
+ <function name='xmlSAX2HasExternalSubset' file='SAX2'>
+ <info>Does this document has an external subset</info>
+ <return type='int' info='1 if true'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='xmlSAX2HasInternalSubset' file='SAX2'>
+ <info>Does this document has an internal subset</info>
+ <return type='int' info='1 if true'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='xmlSAX2IgnorableWhitespace' file='SAX2'>
+ <info>receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use xmlSAX2Characters</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='ch' type='const xmlChar *' info='a xmlChar string'/>
+ <arg name='len' type='int' info='the number of xmlChar'/>
+ </function>
+ <function name='xmlSAX2InitDefaultSAXHandler' file='SAX2'>
+ <info>Initialize the default XML SAX2 handler</info>
+ <return type='void'/>
+ <arg name='hdlr' type='xmlSAXHandler *' info='the SAX handler'/>
+ <arg name='warning' type='int' info='flag if non-zero sets the handler warning procedure'/>
+ </function>
+ <function name='xmlSAX2InitDocbDefaultSAXHandler' file='SAX2'>
+ <info>Initialize the default DocBook SAX2 handler</info>
+ <return type='void'/>
+ <arg name='hdlr' type='xmlSAXHandler *' info='the SAX handler'/>
+ </function>
+ <function name='xmlSAX2InitHtmlDefaultSAXHandler' file='SAX2'>
+ <info>Initialize the default HTML SAX2 handler</info>
+ <return type='void'/>
+ <arg name='hdlr' type='xmlSAXHandler *' info='the SAX handler'/>
+ </function>
+ <function name='xmlSAX2InternalSubset' file='SAX2'>
+ <info>Callback on internal subset declaration.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='the root element name'/>
+ <arg name='ExternalID' type='const xmlChar *' info='the external ID'/>
+ <arg name='SystemID' type='const xmlChar *' info='the SYSTEM ID (e.g. filename or URL)'/>
+ </function>
+ <function name='xmlSAX2IsStandalone' file='SAX2'>
+ <info>Is this document tagged standalone ?</info>
+ <return type='int' info='1 if true'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='xmlSAX2NamespaceDecl' file='SAX2'>
+ <info></info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info=''/>
+ <arg name='href' type='const xmlChar *' info=''/>
+ <arg name='prefix' type='const xmlChar *' info=''/>
+ </function>
+ <function name='xmlSAX2NotationDecl' file='SAX2'>
+ <info>What to do when a notation declaration has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The name of the notation'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ </function>
+ <function name='xmlSAX2ProcessingInstruction' file='SAX2'>
+ <info>A processing instruction has been parsed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='target' type='const xmlChar *' info='the target name'/>
+ <arg name='data' type='const xmlChar *' info='the PI data&apos;s'/>
+ </function>
+ <function name='xmlSAX2Reference' file='SAX2'>
+ <info>called when an entity xmlSAX2Reference is detected.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The entity name'/>
+ </function>
+ <function name='xmlSAX2ResolveEntity' file='SAX2'>
+ <info>The entity loader, to control the loading of external entities, the application can either: - override this xmlSAX2ResolveEntity() callback in the SAX block - or better use the xmlSetExternalEntityLoader() function to set up it&apos;s own entity resolution routine</info>
+ <return type='xmlParserInputPtr' info='the xmlParserInputPtr if inlined or NULL for DOM behaviour.'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ </function>
+ <function name='xmlSAX2SetDocumentLocator' file='SAX2'>
+ <info>Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='loc' type='xmlSAXLocatorPtr' info='A SAX Locator'/>
+ </function>
+ <function name='xmlSAX2SetNamespace' file='SAX2'>
+ <info></info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info=''/>
+ <arg name='name' type='const xmlChar *' info=''/>
+ </function>
+ <function name='xmlSAX2StartDocument' file='SAX2'>
+ <info>called when the document start being processed.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ </function>
+ <function name='xmlSAX2StartElement' file='SAX2'>
+ <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)'/>
+ <arg name='fullname' type='const xmlChar *' info='The element name, including namespace prefix'/>
+ <arg name='atts' type='const xmlChar **' info='An array of name/value attributes pairs, NULL terminated'/>
+ </function>
+ <function name='xmlSAX2StartElementNs' file='SAX2'>
+ <info>SAX2 callback when an element start has been detected by the parser. It provides the namespace informations for the element, as well as the new namespace declarations on the element.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='localname' type='const xmlChar *' info='the local name of the element'/>
+ <arg name='prefix' type='const xmlChar *' info='the element namespace prefix if available'/>
+ <arg name='URI' type='const xmlChar *' info='the element namespace name if available'/>
+ <arg name='nb_namespaces' type='int' info='number of namespace definitions on that node'/>
+ <arg name='namespaces' type='const xmlChar **' info='pointer to the array of prefix/URI pairs namespace definitions'/>
+ <arg name='nb_attributes' type='int' info='the number of attributes on that node'/>
+ <arg name='nb_defaulted' type='int' info='the number of defaulted attributes.'/>
+ <arg name='attributes' type='const xmlChar **' info='pointer to the array of (localname/prefix/URI/value/end) attribute values.'/>
+ </function>
+ <function name='xmlSAX2UnparsedEntityDecl' file='SAX2'>
+ <info>What to do when an unparsed entity declaration is parsed</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
+ <arg name='name' type='const xmlChar *' info='The name of the entity'/>
+ <arg name='publicId' type='const xmlChar *' info='The public ID of the entity'/>
+ <arg name='systemId' type='const xmlChar *' info='The system ID of the entity'/>
+ <arg name='notationName' type='const xmlChar *' info='the name of the notation'/>
+ </function>
+ <function name='xmlSAXDefaultVersion' file='SAX2'>
+ <info>Set the default version of SAX used globally by the library. Note that this may not be a good thing to do from a library it is better to use xmlSAXVersion() to set up specifically the version for a given parsing context.</info>
+ <return type='int' info='the previous value in case of success and -1 in case of error.'/>
+ <arg name='version' type='int' info='the version, 1 or 2'/>
+ </function>
+ <function name='xmlSAXParseDTD' file='parser'>
+ <info>Load and parse an external subset.</info>
+ <return type='xmlDtdPtr' info='the resulting xmlDtdPtr or NULL in case of error.'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='ExternalID' type='const xmlChar *' info='a NAME* containing the External ID of the DTD'/>
+ <arg name='SystemID' type='const xmlChar *' info='a NAME* containing the URL to the DTD'/>
+ </function>
+ <function name='xmlSAXParseDoc' file='parser'>
+ <info>parse an XML in-memory document and build a tree. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='cur' type='xmlChar *' info='a pointer to an array of xmlChar'/>
+ <arg name='recovery' type='int' info='work in recovery mode, i.e. tries to read no Well Formed documents'/>
+ </function>
+ <function name='xmlSAXParseEntity' file='parser'>
+ <info>parse an XML external entity out of context and build a tree. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines. [78] extParsedEnt ::= TextDecl? content This correspond to a &quot;Well Balanced&quot; chunk</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ </function>
+ <function name='xmlSAXParseFile' file='parser'>
+ <info>parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='recovery' type='int' info='work in recovery mode, i.e. tries to read no Well Formed documents'/>
+ </function>
+ <function name='xmlSAXParseFileWithData' file='parser'>
+ <info>parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. It use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines. User data (void *) is stored within the parser context in the context&apos;s _private member, so it is available nearly everywhere in libxml</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='filename' type='const char *' info='the filename'/>
+ <arg name='recovery' type='int' info='work in recovery mode, i.e. tries to read no Well Formed documents'/>
+ <arg name='data' type='void *' info='the userdata'/>
+ </function>
+ <function name='xmlSAXParseMemory' file='parser'>
+ <info>parse an XML in-memory block and use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines.</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='buffer' type='const char *' info='an pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ <arg name='recovery' type='int' info='work in recovery mode, i.e. tries to read not Well Formed documents'/>
+ </function>
+ <function name='xmlSAXParseMemoryWithData' file='parser'>
+ <info>parse an XML in-memory block and use the given SAX function block to handle the parsing callback. If sax is NULL, fallback to the default DOM tree building routines. User data (void *) is stored within the parser context in the context&apos;s _private member, so it is available nearly everywhere in libxml</info>
+ <return type='xmlDocPtr' info='the resulting document tree'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler block'/>
+ <arg name='buffer' type='const char *' info='an pointer to a char array'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ <arg name='recovery' type='int' info='work in recovery mode, i.e. tries to read no Well Formed documents'/>
+ <arg name='data' type='void *' info='the userdata'/>
+ </function>
+ <function name='xmlSAXUserParseFile' file='parser'>
+ <info>parse an XML file and call the given SAX handler routines. Automatic support for ZLIB/Compress compressed document is provided</info>
+ <return type='int' info='0 in case of success or a error number otherwise'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='a SAX handler'/>
+ <arg name='user_data' type='void *' info='The user data returned on SAX callbacks'/>
+ <arg name='filename' type='const char *' info='a file name'/>
+ </function>
+ <function name='xmlSAXUserParseMemory' file='parser'>
+ <info>A better SAX parsing routine. parse an XML in-memory buffer and call the given SAX handler routines.</info>
+ <return type='int' info='0 in case of success or a error number otherwise'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='a SAX handler'/>
+ <arg name='user_data' type='void *' info='The user data returned on SAX callbacks'/>
+ <arg name='buffer' type='const char *' info='an in-memory XML document input'/>
+ <arg name='size' type='int' info='the length of the XML document in bytes'/>
+ </function>
+ <function name='xmlSAXVersion' file='SAX2'>
+ <info>Initialize the default XML SAX handler according to the version</info>
+ <return type='int' info='0 in case of success and -1 in case of error.'/>
+ <arg name='hdlr' type='xmlSAXHandler *' info='the SAX handler'/>
+ <arg name='version' type='int' info='the version, 1 or 2'/>
+ </function>
+ <function name='xmlSaveClose' file='xmlsave'>
+ <info>Close a document saving context, i.e. make sure that all bytes have been output and free the associated data.</info>
+ <return type='int' info='the number of byte written or -1 in case of error.'/>
+ <arg name='ctxt' type='xmlSaveCtxtPtr' info='a document saving context'/>
+ </function>
+ <function name='xmlSaveDoc' file='xmlsave'>
+ <info>Save a full document to a saving context</info>
+ <return type='long' info='the number of byte written or -1 in case of error'/>
+ <arg name='ctxt' type='xmlSaveCtxtPtr' info='a document saving context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document'/>
+ </function>
+ <function name='xmlSaveFile' file='tree'>
+ <info>Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is &quot;-&quot; the stdout file is used.</info>
+ <return type='int' info='the number of bytes written or -1 in case of failure.'/>
+ <arg name='filename' type='const char *' info='the filename (or URL)'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='xmlSaveFileEnc' file='tree'>
+ <info>Dump an XML document, converting it to the given encoding</info>
+ <return type='int' info='the number of bytes written or -1 in case of failure.'/>
+ <arg name='filename' type='const char *' info='the filename (or URL)'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='encoding' type='const char *' info='the name of an encoding (or NULL)'/>
+ </function>
+ <function name='xmlSaveFileTo' file='tree'>
+ <info>Dump an XML document to an I/O buffer.</info>
+ <return type='int' info='the number of bytes written or -1 in case of failure.'/>
+ <arg name='buf' type='xmlOutputBufferPtr' info='an output I/O buffer'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='encoding' type='const char *' info='the encoding if any assuming the I/O layer handles the trancoding'/>
+ </function>
+ <function name='xmlSaveFlush' file='xmlsave'>
+ <info>Flush a document saving context, i.e. make sure that all bytes have been output.</info>
+ <return type='int' info='the number of byte written or -1 in case of error.'/>
+ <arg name='ctxt' type='xmlSaveCtxtPtr' info='a document saving context'/>
+ </function>
+ <function name='xmlSaveFormatFile' file='tree'>
+ <info>Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is &quot;-&quot; the stdout file is used. If @format is set then the document will be indented on output. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</info>
+ <return type='int' info='the number of bytes written or -1 in case of failure.'/>
+ <arg name='filename' type='const char *' info='the filename (or URL)'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='format' type='int' info='should formatting spaces been added'/>
+ </function>
+ <function name='xmlSaveFormatFileEnc' file='tree'>
+ <info>Dump an XML document to a file or an URL.</info>
+ <return type='int' info='the number of bytes written or -1 in case of error. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called'/>
+ <arg name='filename' type='const char *' info='the filename or URL to output'/>
+ <arg name='cur' type='xmlDocPtr' info='the document being saved'/>
+ <arg name='encoding' type='const char *' info='the name of the encoding to use or NULL.'/>
+ <arg name='format' type='int' info='should formatting spaces be added.'/>
+ </function>
+ <function name='xmlSaveFormatFileTo' file='tree'>
+ <info>Dump an XML document to an I/O buffer. NOTE: the I/O buffer is closed as part of the call.</info>
+ <return type='int' info='the number of bytes written or -1 in case of failure.'/>
+ <arg name='buf' type='xmlOutputBufferPtr' info='an output I/O buffer'/>
+ <arg name='cur' type='xmlDocPtr' info='the document'/>
+ <arg name='encoding' type='const char *' info='the encoding if any assuming the I/O layer handles the trancoding'/>
+ <arg name='format' type='int' info='should formatting spaces been added'/>
+ </function>
+ <function name='xmlSaveToBuffer' file='xmlsave'>
+ <info>Create a document saving context serializing to a buffer with the encoding and the options given</info>
+ <return type='xmlSaveCtxtPtr' info='a new serialization context or NULL in case of error.'/>
+ <arg name='buffer' type='xmlBufferPtr' info='a buffer'/>
+ <arg name='encoding' type='const char *' info='the encoding name to use or NULL'/>
+ <arg name='options' type='int' info='a set of xmlSaveOptions'/>
+ </function>
+ <function name='xmlSaveToFd' file='xmlsave'>
+ <info>Create a document saving context serializing to a file descriptor with the encoding and the options given.</info>
+ <return type='xmlSaveCtxtPtr' info='a new serialization context or NULL in case of error.'/>
+ <arg name='fd' type='int' info='a file descriptor number'/>
+ <arg name='encoding' type='const char *' info='the encoding name to use or NULL'/>
+ <arg name='options' type='int' info='a set of xmlSaveOptions'/>
+ </function>
+ <function name='xmlSaveToFilename' file='xmlsave'>
+ <info>Create a document saving context serializing to a filename or possibly to an URL (but this is less reliable) with the encoding and the options given.</info>
+ <return type='xmlSaveCtxtPtr' info='a new serialization context or NULL in case of error.'/>
+ <arg name='filename' type='const char *' info='a file name or an URL'/>
+ <arg name='encoding' type='const char *' info='the encoding name to use or NULL'/>
+ <arg name='options' type='int' info='a set of xmlSaveOptions'/>
+ </function>
+ <function name='xmlSaveToIO' file='xmlsave'>
+ <info>Create a document saving context serializing to a file descriptor with the encoding and the options given</info>
+ <return type='xmlSaveCtxtPtr' info='a new serialization context or NULL in case of error.'/>
+ <arg name='iowrite' type='xmlOutputWriteCallback' info='an I/O write function'/>
+ <arg name='ioclose' type='xmlOutputCloseCallback' info='an I/O close function'/>
+ <arg name='ioctx' type='void *' info='an I/O handler'/>
+ <arg name='encoding' type='const char *' info='the encoding name to use or NULL'/>
+ <arg name='options' type='int' info='a set of xmlSaveOptions'/>
+ </function>
+ <function name='xmlSaveTree' file='xmlsave'>
+ <info>Save a subtree starting at the node parameter to a saving context</info>
+ <return type='long' info='the number of byte written or -1 in case of error'/>
+ <arg name='ctxt' type='xmlSaveCtxtPtr' info='a document saving context'/>
+ <arg name='node' type='xmlNodePtr' info='a document'/>
+ </function>
+ <function name='xmlSaveUri' file='uri'>
+ <info>Save the URI as an escaped string</info>
+ <return type='xmlChar *' info='a new string (to be deallocated by caller)'/>
+ <arg name='uri' type='xmlURIPtr' info='pointer to an xmlURI'/>
+ </function>
+ <function name='xmlScanName' file='parserInternals'>
+ <info>Trickery: parse an XML name but without consuming the input flow Needed for rollback cases. Used only when parsing entities references. TODO: seems deprecated now, only used in the default part of xmlParserHandleReference [4] NameChar ::= Letter | Digit | &apos;.&apos; | &apos;-&apos; | &apos;_&apos; | &apos;:&apos; | CombiningChar | Extender [5] Name ::= (Letter | &apos;_&apos; | &apos;:&apos;) (NameChar)* [6] Names ::= Name (S Name)*</info>
+ <return type='xmlChar *' info='the Name parsed or NULL'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlSchemaCheckFacet' file='xmlschemastypes'>
+ <info>Checks the default values types, especially for facets</info>
+ <return type='int' info='0 if okay or -1 in cae of error'/>
+ <arg name='facet' type='xmlSchemaFacetPtr' info='the facet'/>
+ <arg name='typeDecl' type='xmlSchemaTypePtr' info='the schema type definition'/>
+ <arg name='ctxt' type='xmlSchemaParserCtxtPtr' info='the schema parser context or NULL'/>
+ <arg name='name' type='const xmlChar *' info='name of the type'/>
+ </function>
+ <function name='xmlSchemaCleanupTypes' file='xmlschemastypes'>
+ <info>Cleanup the default XML Schemas type library</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlSchemaCompareValues' file='xmlschemastypes'>
+ <info>Compare 2 values</info>
+ <return type='int' info='-1 if x &lt; y, 0 if x == y, 1 if x &gt; y, 2 if x &lt;&gt; y, and -2 in case of error'/>
+ <arg name='x' type='xmlSchemaValPtr' info='a first value'/>
+ <arg name='y' type='xmlSchemaValPtr' info='a second value'/>
+ </function>
+ <function name='xmlSchemaDump' file='xmlschemas'>
+ <info>Dump a Schema structure.</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the file output'/>
+ <arg name='schema' type='xmlSchemaPtr' info='a schema structure'/>
+ </function>
+ <function name='xmlSchemaFree' file='xmlschemas'>
+ <info>Deallocate a Schema structure.</info>
+ <return type='void'/>
+ <arg name='schema' type='xmlSchemaPtr' info='a schema structure'/>
+ </function>
+ <function name='xmlSchemaFreeFacet' file='xmlschemastypes'>
+ <info>Deallocate a Schema Facet structure.</info>
+ <return type='void'/>
+ <arg name='facet' type='xmlSchemaFacetPtr' info='a schema facet structure'/>
+ </function>
+ <function name='xmlSchemaFreeParserCtxt' file='xmlschemas'>
+ <info>Free the resources associated to the schema parser context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlSchemaParserCtxtPtr' info='the schema parser context'/>
+ </function>
+ <function name='xmlSchemaFreeType' file='schemasInternals'>
+ <info>Deallocate a Schema Type structure.</info>
+ <return type='void'/>
+ <arg name='type' type='xmlSchemaTypePtr' info='a schema type structure'/>
+ </function>
+ <function name='xmlSchemaFreeValidCtxt' file='xmlschemas'>
+ <info>Free the resources associated to the schema validation context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlSchemaValidCtxtPtr' info='the schema validation context'/>
+ </function>
+ <function name='xmlSchemaFreeValue' file='xmlschemastypes'>
+ <info>Cleanup the default XML Schemas type library</info>
+ <return type='void'/>
+ <arg name='value' type='xmlSchemaValPtr' info='the value to free'/>
+ </function>
+ <function name='xmlSchemaGetPredefinedType' file='xmlschemastypes'>
+ <info>Lookup a type in the default XML Schemas type library</info>
+ <return type='xmlSchemaTypePtr' info='the type if found, NULL otherwise'/>
+ <arg name='name' type='const xmlChar *' info='the type name'/>
+ <arg name='ns' type='const xmlChar *' info='the URI of the namespace usually &quot;http://www.w3.org/2001/XMLSchema&quot;'/>
+ </function>
+ <function name='xmlSchemaInitTypes' file='xmlschemastypes'>
+ <info>Initialize the default XML Schemas type library</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlSchemaNewDocParserCtxt' file='xmlschemas'>
+ <info>Create an XML Schemas parse context for that document. NB. The document may be modified during the parsing process.</info>
+ <return type='xmlSchemaParserCtxtPtr' info='the parser context or NULL in case of error'/>
+ <arg name='doc' type='xmlDocPtr' info='a preparsed document tree'/>
+ </function>
+ <function name='xmlSchemaNewFacet' file='xmlschemastypes'>
+ <info>Allocate a new Facet structure.</info>
+ <return type='xmlSchemaFacetPtr' info='the newly allocated structure or NULL in case or error'/>
+ </function>
+ <function name='xmlSchemaNewMemParserCtxt' file='xmlschemas'>
+ <info>Create an XML Schemas parse context for that memory buffer expected to contain an XML Schemas file.</info>
+ <return type='xmlSchemaParserCtxtPtr' 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='xmlSchemaNewParserCtxt' file='xmlschemas'>
+ <info>Create an XML Schemas parse context for that file/resource expected to contain an XML Schemas file.</info>
+ <return type='xmlSchemaParserCtxtPtr' 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='xmlSchemaNewValidCtxt' file='xmlschemas'>
+ <info>Create an XML Schemas validation context based on the given schema</info>
+ <return type='xmlSchemaValidCtxtPtr' info='the validation context or NULL in case of error'/>
+ <arg name='schema' type='xmlSchemaPtr' info='a precompiled XML Schemas'/>
+ </function>
+ <function name='xmlSchemaParse' file='xmlschemas'>
+ <info>parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances. *WARNING* this interface is highly subject to change</info>
+ <return type='xmlSchemaPtr' info='the internal XML Schema structure built from the resource or NULL in case of error'/>
+ <arg name='ctxt' type='xmlSchemaParserCtxtPtr' info='a schema validation context'/>
+ </function>
+ <function name='xmlSchemaSetParserErrors' file='xmlschemas'>
+ <info>Set the callback functions used to handle errors for a validation context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlSchemaParserCtxtPtr' info='a schema validation context'/>
+ <arg name='err' type='xmlSchemaValidityErrorFunc' info='the error callback'/>
+ <arg name='warn' type='xmlSchemaValidityWarningFunc' info='the warning callback'/>
+ <arg name='ctx' type='void *' info='contextual data for the callbacks'/>
+ </function>
+ <function name='xmlSchemaSetValidErrors' file='xmlschemas'>
+ <info>Set the error and warning callback informations</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlSchemaValidCtxtPtr' info='a schema validation context'/>
+ <arg name='err' type='xmlSchemaValidityErrorFunc' info='the error function'/>
+ <arg name='warn' type='xmlSchemaValidityWarningFunc' info='the warning function'/>
+ <arg name='ctx' type='void *' info='the functions context'/>
+ </function>
+ <function name='xmlSchemaValPredefTypeNode' file='xmlschemastypes'>
+ <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>
+ <return type='int' info='0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='type' type='xmlSchemaTypePtr' info='the predefined type'/>
+ <arg name='value' type='const xmlChar *' info='the value to check'/>
+ <arg name='val' type='xmlSchemaValPtr *' info='the return computed value'/>
+ <arg name='node' type='xmlNodePtr' info='the node containing the value'/>
+ </function>
+ <function name='xmlSchemaValidateDoc' file='xmlschemas'>
+ <info>Validate a document tree in memory.</info>
+ <return type='int' info='0 if the document is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='ctxt' type='xmlSchemaValidCtxtPtr' info='a schema validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a parsed document tree'/>
+ </function>
+ <function name='xmlSchemaValidateFacet' file='xmlschemastypes'>
+ <info>Check a value against a facet condition</info>
+ <return type='int' info='0 if the element is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='base' type='xmlSchemaTypePtr' info='the base type'/>
+ <arg name='facet' type='xmlSchemaFacetPtr' info='the facet to check'/>
+ <arg name='value' type='const xmlChar *' info='the lexical repr of the value to validate'/>
+ <arg name='val' type='xmlSchemaValPtr' info='the precomputed value'/>
+ </function>
+ <function name='xmlSchemaValidatePredefinedType' file='xmlschemastypes'>
+ <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>
+ <return type='int' info='0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='type' type='xmlSchemaTypePtr' info='the predefined type'/>
+ <arg name='value' type='const xmlChar *' info='the value to check'/>
+ <arg name='val' type='xmlSchemaValPtr *' info='the return computed value'/>
+ </function>
+ <function name='xmlSchemaValidateStream' file='xmlschemas'>
+ <info>Validate a document tree in memory.</info>
+ <return type='int' info='0 if the document is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='ctxt' type='xmlSchemaValidCtxtPtr' info='a schema validation context'/>
+ <arg name='input' type='xmlParserInputBufferPtr' info='the input to use for reading the data'/>
+ <arg name='enc' type='xmlCharEncoding' info='an optional encoding information'/>
+ <arg name='sax' type='xmlSAXHandlerPtr' info='a SAX handler for the resulting events'/>
+ <arg name='user_data' type='void *' info='the context to provide to the SAX handler.'/>
+ </function>
+ <functype name='xmlSchemaValidityErrorFunc' file='xmlschemas'>
+ <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='xmlSchemaValidityWarningFunc' file='xmlschemas'>
+ <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'>
+ <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.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='node' type='xmlNodePtr' info='the current node'/>
+ <arg name='nameSpace' type='const xmlChar *' info='the namespace prefix'/>
+ </function>
+ <function name='xmlSearchNsByHref' file='tree'>
+ <info>Search a Ns aliasing a given URI. Recurse on the parents until it finds the defined namespace or return NULL otherwise.</info>
+ <return type='xmlNsPtr' info='the namespace pointer or NULL.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='node' type='xmlNodePtr' info='the current node'/>
+ <arg name='href' type='const xmlChar *' info='the namespace value'/>
+ </function>
+ <function name='xmlSetBufferAllocationScheme' file='tree'>
+ <info>Set the buffer allocation method. Types are XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed, improves performance</info>
+ <return type='void'/>
+ <arg name='scheme' type='xmlBufferAllocationScheme' info='allocation method to use'/>
+ </function>
+ <function name='xmlSetCompressMode' file='tree'>
+ <info>set the default compression mode used, ZLIB based Correct values: 0 (uncompressed) to 9 (max compression)</info>
+ <return type='void'/>
+ <arg name='mode' type='int' info='the compression ratio'/>
+ </function>
+ <function name='xmlSetDocCompressMode' file='tree'>
+ <info>set the compression ratio for a document, ZLIB based Correct values: 0 (uncompressed) to 9 (max compression)</info>
+ <return type='void'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='mode' type='int' info='the compression ratio'/>
+ </function>
+ <function name='xmlSetEntityReferenceFunc' file='parserInternals'>
+ <info>Set the function to call call back when a xml reference has been made</info>
+ <return type='void'/>
+ <arg name='func' type='xmlEntityReferenceFunc' info='A valid function'/>
+ </function>
+ <function name='xmlSetExternalEntityLoader' file='parser'>
+ <info>Changes the defaultexternal entity resolver function for the application</info>
+ <return type='void'/>
+ <arg name='f' type='xmlExternalEntityLoader' info='the new entity resolver function'/>
+ </function>
+ <function name='xmlSetFeature' file='parser'>
+ <info>Change the current value of one feature of this parser instance</info>
+ <return type='int' info='-1 in case or error, 0 otherwise'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML/HTML parser context'/>
+ <arg name='name' type='const char *' info='the feature name'/>
+ <arg name='value' type='void *' info='pointer to the location of the new value'/>
+ </function>
+ <function name='xmlSetGenericErrorFunc' file='xmlerror'>
+ <info>Function to reset the handler and the error context for out of context error messages. This simply means that @handler will be called for subsequent error messages while not parsing nor validating. And @ctx will be passed as first argument to @handler One can simply force messages to be emitted to another FILE * than stderr by setting @ctx to this file handle and @handler to NULL.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the new error handling context'/>
+ <arg name='handler' type='xmlGenericErrorFunc' info='the new handler function'/>
+ </function>
+ <function name='xmlSetListDoc' file='tree'>
+ <info>update all nodes in the list to point to the right document</info>
+ <return type='void'/>
+ <arg name='list' type='xmlNodePtr' info='the first element'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='xmlSetNs' file='tree'>
+ <info>Associate a namespace to a node, a posteriori.</info>
+ <return type='void'/>
+ <arg name='node' type='xmlNodePtr' info='a node in the document'/>
+ <arg name='ns' type='xmlNsPtr' info='a namespace pointer'/>
+ </function>
+ <function name='xmlSetNsProp' file='tree'>
+ <info>Set (or reset) an attribute carried by a node. The ns structure must be in scope, this is not checked.</info>
+ <return type='xmlAttrPtr' info='the attribute pointer.'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='ns' type='xmlNsPtr' info='the namespace definition'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ <arg name='value' type='const xmlChar *' info='the attribute value'/>
+ </function>
+ <function name='xmlSetProp' file='tree'>
+ <info>Set (or reset) an attribute carried by a node.</info>
+ <return type='xmlAttrPtr' info='the attribute pointer.'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ <arg name='value' type='const xmlChar *' info='the attribute value'/>
+ </function>
+ <function name='xmlSetStructuredErrorFunc' file='xmlerror'>
+ <info>Function to reset the handler and the error context for out of context structured error messages. This simply means that @handler will be called for subsequent error messages while not parsing nor validating. And @ctx will be passed as first argument to @handler</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='the new error handling context'/>
+ <arg name='handler' type='xmlStructuredErrorFunc' info='the new handler function'/>
+ </function>
+ <function name='xmlSetTreeDoc' file='tree'>
+ <info>update all nodes under the tree to point to the right document</info>
+ <return type='void'/>
+ <arg name='tree' type='xmlNodePtr' info='the top element'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ </function>
+ <function name='xmlSetupParserForBuffer' file='parser'>
+ <info>Setup the parser context to parse a new buffer; Clears any prior contents from the parser context. The buffer parameter must not be NULL, but the filename parameter can be</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='buffer' type='const xmlChar *' info='a xmlChar * buffer'/>
+ <arg name='filename' type='const char *' info='a file name'/>
+ </function>
+ <function name='xmlShell' file='debugXML'>
+ <info>Implements the XML shell This allow to load, validate, view, modify and save a document using a environment similar to a UNIX commandline.</info>
+ <return type='void'/>
+ <arg name='doc' type='xmlDocPtr' info='the initial document'/>
+ <arg name='filename' type='char *' info='the output buffer'/>
+ <arg name='input' type='xmlShellReadlineFunc' info='the line reading function'/>
+ <arg name='output' type='FILE *' info='the output FILE*, defaults to stdout if NULL'/>
+ </function>
+ <function name='xmlShellBase' file='debugXML'>
+ <info>Implements the XML shell function &quot;base&quot; dumps the current XML base of the node</info>
+ <return type='int' info='0'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='arg' type='char *' info='unused'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <function name='xmlShellCat' file='debugXML'>
+ <info>Implements the XML shell function &quot;cat&quot; dumps the serialization node content (XML or HTML).</info>
+ <return type='int' info='0'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='arg' type='char *' info='unused'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <functype name='xmlShellCmd' file='debugXML'>
+ <info>This is a generic signature for the XML shell functions.</info>
+ <return type='int' info='an int, negative returns indicating errors.'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='a shell context'/>
+ <arg name='arg' type='char *' info='a string argument'/>
+ <arg name='node' type='xmlNodePtr' info='a first node'/>
+ <arg name='node2' type='xmlNodePtr' info='a second node'/>
+ </functype>
+ <function name='xmlShellDir' file='debugXML'>
+ <info>Implements the XML shell function &quot;dir&quot; dumps informations about the node (namespace, attributes, content).</info>
+ <return type='int' info='0'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='arg' type='char *' info='unused'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <function name='xmlShellDu' file='debugXML'>
+ <info>Implements the XML shell function &quot;du&quot; show the structure of the subtree under node @tree If @tree is null, the command works on the current node.</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='arg' type='char *' info='unused'/>
+ <arg name='tree' type='xmlNodePtr' info='a node defining a subtree'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <function name='xmlShellList' file='debugXML'>
+ <info>Implements the XML shell function &quot;ls&quot; Does an Unix like listing of the given node (like a directory)</info>
+ <return type='int' info='0'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='arg' type='char *' info='unused'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <function name='xmlShellLoad' file='debugXML'>
+ <info>Implements the XML shell function &quot;load&quot; loads a new document specified by the filename</info>
+ <return type='int' info='0 or -1 if loading failed'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='filename' type='char *' info='the file name'/>
+ <arg name='node' type='xmlNodePtr' info='unused'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <function name='xmlShellPrintNode' file='debugXML'>
+ <info>Print node to the output FILE</info>
+ <return type='void'/>
+ <arg name='node' type='xmlNodePtr' info='a non-null node to print to the output FILE'/>
+ </function>
+ <function name='xmlShellPrintXPathError' file='debugXML'>
+ <info>Print the xpath error to libxml default error channel</info>
+ <return type='void'/>
+ <arg name='errorType' type='int' info='valid xpath error id'/>
+ <arg name='arg' type='const char *' info='the argument that cause xpath to fail'/>
+ </function>
+ <function name='xmlShellPrintXPathResult' file='debugXML'>
+ <info>Prints result to the output FILE</info>
+ <return type='void'/>
+ <arg name='list' type='xmlXPathObjectPtr' info='a valid result generated by an xpath evaluation'/>
+ </function>
+ <function name='xmlShellPwd' file='debugXML'>
+ <info>Implements the XML shell function &quot;pwd&quot; Show the full path from the root to the node, if needed building thumblers when similar elements exists at a given ancestor level. The output is compatible with XPath commands.</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='buffer' type='char *' info='the output buffer'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <functype name='xmlShellReadlineFunc' file='debugXML'>
+ <info>This is a generic signature for the XML shell input function.</info>
+ <return type='char *' info='a string which will be freed by the Shell.'/>
+ <arg name='prompt' type='char *' info='a string prompt'/>
+ </functype>
+ <function name='xmlShellSave' file='debugXML'>
+ <info>Implements the XML shell function &quot;save&quot; Write the current document to the filename, or it&apos;s original name</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='filename' type='char *' info='the file name (optional)'/>
+ <arg name='node' type='xmlNodePtr' info='unused'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <function name='xmlShellValidate' file='debugXML'>
+ <info>Implements the XML shell function &quot;validate&quot; Validate the document, if a DTD path is provided, then the validation is done against the given DTD.</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='dtd' type='char *' info='the DTD URI (optional)'/>
+ <arg name='node' type='xmlNodePtr' info='unused'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <function name='xmlShellWrite' file='debugXML'>
+ <info>Implements the XML shell function &quot;write&quot; Write the current node to the filename, it saves the serialization of the subtree under the @node specified</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='ctxt' type='xmlShellCtxtPtr' info='the shell context'/>
+ <arg name='filename' type='char *' info='the file name'/>
+ <arg name='node' type='xmlNodePtr' info='a node in the tree'/>
+ <arg name='node2' type='xmlNodePtr' info='unused'/>
+ </function>
+ <function name='xmlSkipBlankChars' file='parserInternals'>
+ <info>skip all blanks character found at that point in the input streams. It pops up finished entities in the process if allowable at that point.</info>
+ <return type='int' info='the number of space chars skipped'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the XML parser context'/>
+ </function>
+ <function name='xmlSnprintfElementContent' file='valid'>
+ <info>This will dump the content of the element content definition Intended just for the debug routine</info>
+ <return type='void'/>
+ <arg name='buf' type='char *' info='an output buffer'/>
+ <arg name='size' type='int' info='the buffer size'/>
+ <arg name='content' type='xmlElementContentPtr' info='An element table'/>
+ <arg name='glob' type='int' info='1 if one must print the englobing parenthesis, 0 otherwise'/>
+ </function>
+ <function name='xmlSplitQName' file='parserInternals'>
+ <info>parse an UTF8 encoded XML qualified name string [NS 5] QName ::= (Prefix &apos;:&apos;)? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName</info>
+ <return type='xmlChar *' info='the local part, and prefix is updated to get the Prefix if any.'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='name' type='const xmlChar *' info='an XML parser context'/>
+ <arg name='prefix' type='xmlChar **' info='a xmlChar **'/>
+ </function>
+ <function name='xmlSplitQName2' file='tree'>
+ <info>parse an XML qualified name string [NS 5] QName ::= (Prefix &apos;:&apos;)? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName</info>
+ <return type='xmlChar *' info='NULL if not a QName, otherwise the local part, and prefix is updated to get the Prefix if any.'/>
+ <arg name='name' type='const xmlChar *' info='the full QName'/>
+ <arg name='prefix' type='xmlChar **' info='a xmlChar **'/>
+ </function>
+ <function name='xmlSplitQName3' file='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'/>
+ <arg name='name' type='const xmlChar *' info='the full QName'/>
+ <arg name='len' type='int *' info='an int *'/>
+ </function>
+ <function name='xmlSprintfElementContent' file='valid'>
+ <info>Deprecated, unsafe, use xmlSnprintfElementContent</info>
+ <return type='void'/>
+ <arg name='buf' type='char *' info='an output buffer'/>
+ <arg name='content' type='xmlElementContentPtr' info='An element table'/>
+ <arg name='glob' type='int' info='1 if one must print the englobing parenthesis, 0 otherwise'/>
+ </function>
+ <function name='xmlStopParser' file='parser'>
+ <info>Blocks further parser processing</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ </function>
+ <function name='xmlStrEqual' file='xmlstring'>
+ <info>Check if both string are equal of have same content Should be a bit more readable and faster than xmlStrEqual()</info>
+ <return type='int' info='1 if they are equal, 0 if they are different'/>
+ <arg name='str1' type='const xmlChar *' info='the first xmlChar *'/>
+ <arg name='str2' type='const xmlChar *' info='the second xmlChar *'/>
+ </function>
+ <function name='xmlStrPrintf' file='xmlstring'>
+ <info>Formats @msg and places result into @buf.</info>
+ <return type='int' info='the number of characters written to @buf or -1 if an error occurs.'/>
+ <arg name='buf' type='xmlChar *' info='the result buffer.'/>
+ <arg name='len' type='int' info='the result buffer length.'/>
+ <arg name='msg' type='const xmlChar *' info='the message with printf formatting.'/>
+ <arg name='...' type='...' info='extra parameters for the message.'/>
+ </function>
+ <function name='xmlStrQEqual' file='xmlstring'>
+ <info>Check if a QName is Equal to a given string</info>
+ <return type='int' info='1 if they are equal, 0 if they are different'/>
+ <arg name='pref' type='const xmlChar *' info='the prefix of the QName'/>
+ <arg name='name' type='const xmlChar *' info='the localname of the QName'/>
+ <arg name='str' type='const xmlChar *' info='the second xmlChar *'/>
+ </function>
+ <function name='xmlStrVPrintf' file='xmlstring'>
+ <info>Formats @msg and places result into @buf.</info>
+ <return type='int' info='the number of characters written to @buf or -1 if an error occurs.'/>
+ <arg name='buf' type='xmlChar *' info='the result buffer.'/>
+ <arg name='len' type='int' info='the result buffer length.'/>
+ <arg name='msg' type='const xmlChar *' info='the message with printf formatting.'/>
+ <arg name='ap' type='va_list' info='extra parameters for the message.'/>
+ </function>
+ <function name='xmlStrcasecmp' file='xmlstring'>
+ <info>a strcasecmp for xmlChar&apos;s</info>
+ <return type='int' info='the integer result of the comparison'/>
+ <arg name='str1' type='const xmlChar *' info='the first xmlChar *'/>
+ <arg name='str2' type='const xmlChar *' info='the second xmlChar *'/>
+ </function>
+ <function name='xmlStrcasestr' file='xmlstring'>
+ <info>a case-ignoring strstr for xmlChar&apos;s</info>
+ <return type='const xmlChar *' info='the xmlChar * for the first occurrence or NULL.'/>
+ <arg name='str' type='const xmlChar *' info='the xmlChar * array (haystack)'/>
+ <arg name='val' type='xmlChar *' info='the xmlChar to search (needle)'/>
+ </function>
+ <function name='xmlStrcat' file='xmlstring'>
+ <info>a strcat for array of xmlChar&apos;s. Since they are supposed to be encoded in UTF-8 or an encoding with 8bit based chars, we assume a termination mark of &apos;0&apos;.</info>
+ <return type='xmlChar *' info='a new xmlChar * containing the concatenated string.'/>
+ <arg name='cur' type='xmlChar *' info='the original xmlChar * array'/>
+ <arg name='add' type='const xmlChar *' info='the xmlChar * array added'/>
+ </function>
+ <function name='xmlStrchr' file='xmlstring'>
+ <info>a strchr for xmlChar&apos;s</info>
+ <return type='const xmlChar *' info='the xmlChar * for the first occurrence or NULL.'/>
+ <arg name='str' type='const xmlChar *' info='the xmlChar * array'/>
+ <arg name='val' type='xmlChar' info='the xmlChar to search'/>
+ </function>
+ <function name='xmlStrcmp' file='xmlstring'>
+ <info>a strcmp for xmlChar&apos;s</info>
+ <return type='int' info='the integer result of the comparison'/>
+ <arg name='str1' type='const xmlChar *' info='the first xmlChar *'/>
+ <arg name='str2' type='const xmlChar *' info='the second xmlChar *'/>
+ </function>
+ <function name='xmlStrdup' file='xmlstring'>
+ <info>a strdup for array of xmlChar&apos;s. Since they are supposed to be encoded in UTF-8 or an encoding with 8bit based chars, we assume a termination mark of &apos;0&apos;.</info>
+ <return type='xmlChar *' info='a new xmlChar * or NULL'/>
+ <arg name='cur' type='const xmlChar *' info='the input xmlChar *'/>
+ </function>
+ <functype name='xmlStrdupFunc' file='xmlmemory'>
+ <info>Signature for an strdup() implementation.</info>
+ <return type='char *' info='the copy of the string or NULL in case of error.'/>
+ <arg name='str' type='const char *' info='a zero terminated string'/>
+ </functype>
+ <function name='xmlStringCurrentChar' file='parserInternals'>
+ <info>The current char value, if using UTF-8 this may actually span multiple bytes in the input buffer.</info>
+ <return type='int' info='the current char value and its length'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the XML parser context'/>
+ <arg name='cur' type='const xmlChar *' info='pointer to the beginning of the char'/>
+ <arg name='len' type='int *' info='pointer to the length of the char read'/>
+ </function>
+ <function name='xmlStringDecodeEntities' file='parserInternals'>
+ <info>Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= &apos;%&apos; Name &apos;;&apos;</info>
+ <return type='xmlChar *' info='A newly allocated string with the substitution done. The caller must deallocate it !'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='str' type='const xmlChar *' info='the input string'/>
+ <arg name='what' type='int' info='combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF'/>
+ <arg name='end' type='xmlChar' info='an end marker xmlChar, 0 if none'/>
+ <arg name='end2' type='xmlChar' info='an end marker xmlChar, 0 if none'/>
+ <arg name='end3' type='xmlChar' info='an end marker xmlChar, 0 if none'/>
+ </function>
+ <function name='xmlStringGetNodeList' file='tree'>
+ <info>Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.</info>
+ <return type='xmlNodePtr' info='a pointer to the first child'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='value' type='const xmlChar *' info='the value of the attribute'/>
+ </function>
+ <function name='xmlStringLenDecodeEntities' file='parserInternals'>
+ <info>Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= &apos;%&apos; Name &apos;;&apos;</info>
+ <return type='xmlChar *' info='A newly allocated string with the substitution done. The caller must deallocate it !'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='str' type='const xmlChar *' info='the input string'/>
+ <arg name='len' type='int' info='the string length'/>
+ <arg name='what' type='int' info='combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF'/>
+ <arg name='end' type='xmlChar' info='an end marker xmlChar, 0 if none'/>
+ <arg name='end2' type='xmlChar' info='an end marker xmlChar, 0 if none'/>
+ <arg name='end3' type='xmlChar' info='an end marker xmlChar, 0 if none'/>
+ </function>
+ <function name='xmlStringLenGetNodeList' file='tree'>
+ <info>Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.</info>
+ <return type='xmlNodePtr' info='a pointer to the first child'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='value' type='const xmlChar *' info='the value of the text'/>
+ <arg name='len' type='int' info='the length of the string value'/>
+ </function>
+ <function name='xmlStrlen' file='xmlstring'>
+ <info>length of a xmlChar&apos;s string</info>
+ <return type='int' info='the number of xmlChar contained in the ARRAY.'/>
+ <arg name='str' type='const xmlChar *' info='the xmlChar * array'/>
+ </function>
+ <function name='xmlStrncasecmp' file='xmlstring'>
+ <info>a strncasecmp for xmlChar&apos;s</info>
+ <return type='int' info='the integer result of the comparison'/>
+ <arg name='str1' type='const xmlChar *' info='the first xmlChar *'/>
+ <arg name='str2' type='const xmlChar *' info='the second xmlChar *'/>
+ <arg name='len' type='int' info='the max comparison length'/>
+ </function>
+ <function name='xmlStrncat' file='xmlstring'>
+ <info>a strncat for array of xmlChar&apos;s, it will extend @cur with the len first bytes of @add.</info>
+ <return type='xmlChar *' info='a new xmlChar *, the original @cur is reallocated if needed and should not be freed'/>
+ <arg name='cur' type='xmlChar *' info='the original xmlChar * array'/>
+ <arg name='add' type='const xmlChar *' info='the xmlChar * array added'/>
+ <arg name='len' type='int' info='the length of @add'/>
+ </function>
+ <function name='xmlStrncatNew' file='xmlstring'>
+ <info>same as xmlStrncat, but creates a new string. The original two strings are not freed.</info>
+ <return type='xmlChar *' info='a new xmlChar * or NULL'/>
+ <arg name='str1' type='const xmlChar *' info='first xmlChar string'/>
+ <arg name='str2' type='const xmlChar *' info='second xmlChar string'/>
+ <arg name='len' type='int' info='the len of @str2'/>
+ </function>
+ <function name='xmlStrncmp' file='xmlstring'>
+ <info>a strncmp for xmlChar&apos;s</info>
+ <return type='int' info='the integer result of the comparison'/>
+ <arg name='str1' type='const xmlChar *' info='the first xmlChar *'/>
+ <arg name='str2' type='const xmlChar *' info='the second xmlChar *'/>
+ <arg name='len' type='int' info='the max comparison length'/>
+ </function>
+ <function name='xmlStrndup' file='xmlstring'>
+ <info>a strndup for array of xmlChar&apos;s</info>
+ <return type='xmlChar *' info='a new xmlChar * or NULL'/>
+ <arg name='cur' type='const xmlChar *' info='the input xmlChar *'/>
+ <arg name='len' type='int' info='the len of @cur'/>
+ </function>
+ <function name='xmlStrstr' file='xmlstring'>
+ <info>a strstr for xmlChar&apos;s</info>
+ <return type='const xmlChar *' info='the xmlChar * for the first occurrence or NULL.'/>
+ <arg name='str' type='const xmlChar *' info='the xmlChar * array (haystack)'/>
+ <arg name='val' type='const xmlChar *' info='the xmlChar to search (needle)'/>
+ </function>
+ <function name='xmlStrsub' file='xmlstring'>
+ <info>Extract a substring of a given string</info>
+ <return type='xmlChar *' info='the xmlChar * for the first occurrence or NULL.'/>
+ <arg name='str' type='const xmlChar *' info='the xmlChar * array (haystack)'/>
+ <arg name='start' type='int' info='the index of the first char (zero based)'/>
+ <arg name='len' type='int' info='the length of the substring'/>
+ </function>
+ <functype name='xmlStructuredErrorFunc' file='xmlerror'>
+ <info>Signature of the function to use when there is an error and the module handles the new error reporting mechanism.</info>
+ <return type='void'/>
+ <arg name='userData' type='void *' info='user provided data for the error callback'/>
+ <arg name='error' type='xmlErrorPtr' info='the error being raised.'/>
+ </functype>
+ <function name='xmlSubstituteEntitiesDefault' file='parser'>
+ <info>Set and return the previous value for default entity support. Initially the parser always keep entity references instead of substituting entity values in the output. This function has to be used to change the default parser behavior SAX::substituteEntities() has to be used for changing that on a file by file basis.</info>
+ <return type='int' info='the last value for 0 for no substitution, 1 for substitution.'/>
+ <arg name='val' type='int' info='int 0 or 1'/>
+ </function>
+ <function name='xmlSwitchEncoding' file='parserInternals'>
+ <info>change the input functions when discovering the character encoding of a given entity.</info>
+ <return type='int' info='0 in case of success, -1 otherwise'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='enc' type='xmlCharEncoding' info='the encoding value (number)'/>
+ </function>
+ <function name='xmlSwitchInputEncoding' file='parserInternals'>
+ <info>change the input functions when discovering the character encoding of a given entity.</info>
+ <return type='int' info='0 in case of success, -1 otherwise'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='input' type='xmlParserInputPtr' info='the input stream'/>
+ <arg name='handler' type='xmlCharEncodingHandlerPtr' info='the encoding handler'/>
+ </function>
+ <function name='xmlSwitchToEncoding' file='parserInternals'>
+ <info>change the input functions when discovering the character encoding of a given entity.</info>
+ <return type='int' info='0 in case of success, -1 otherwise'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='handler' type='xmlCharEncodingHandlerPtr' info='the encoding handler'/>
+ </function>
+ <function name='xmlTextConcat' file='tree'>
+ <info>Concat the given string at the end of the existing node content</info>
+ <return type='int' info='-1 in case of error, 0 otherwise'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='content' type='const xmlChar *' info='the content'/>
+ <arg name='len' type='int' info='@content length'/>
+ </function>
+ <function name='xmlTextMerge' file='tree'>
+ <info>Merge two text nodes into one</info>
+ <return type='xmlNodePtr' info='the first text node augmented'/>
+ <arg name='first' type='xmlNodePtr' info='the first text node'/>
+ <arg name='second' type='xmlNodePtr' info='the second text node being merged'/>
+ </function>
+ <function name='xmlTextReaderAttributeCount' file='xmlreader'>
+ <info>Provides the number of attributes of the current node</info>
+ <return type='int' info='0 i no attributes, -1 in case of error or the attribute count'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderBaseUri' file='xmlreader'>
+ <info>The base URI of the node.</info>
+ <return type='xmlChar *' info='the base URI or NULL if not available'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderClose' file='xmlreader'>
+ <info>This method releases any resources allocated by the current instance changes the state to Closed and close any underlying input.</info>
+ <return type='int' info='0 or -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderConstBaseUri' file='xmlreader'>
+ <info>The base URI of the node.</info>
+ <return type='const xmlChar *' info='the base URI or NULL if not available, the string will be deallocated with the reader'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderConstLocalName' file='xmlreader'>
+ <info>The local name of the node.</info>
+ <return type='const xmlChar *' info='the local name or NULL if not available, the string will be deallocated with the reader.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderConstName' file='xmlreader'>
+ <info>The qualified name of the node, equal to Prefix :LocalName.</info>
+ <return type='const xmlChar *' info='the local name or NULL if not available, the string is deallocated with the reader.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderConstNamespaceUri' file='xmlreader'>
+ <info>The URI defining the namespace associated with the node.</info>
+ <return type='const xmlChar *' info='the namespace URI or NULL if not available, the string will be deallocated with the reader'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderConstPrefix' file='xmlreader'>
+ <info>A shorthand reference to the namespace associated with the node.</info>
+ <return type='const xmlChar *' info='the prefix or NULL if not available, the string is deallocated with the reader.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderConstString' file='xmlreader'>
+ <info>Get an interned string from the reader, allows for example to speedup string name comparisons</info>
+ <return type='const xmlChar *' info='an interned copy of the string or NULL in case of error. The string will be deallocated with the reader.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='str' type='const xmlChar *' info='the string to intern.'/>
+ </function>
+ <function name='xmlTextReaderConstValue' file='xmlreader'>
+ <info>Provides the text value of the node if present</info>
+ <return type='const xmlChar *' info='the string or NULL if not available. The result will be deallocated on the next Read() operation.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderConstXmlLang' file='xmlreader'>
+ <info>The xml:lang scope within which the node resides.</info>
+ <return type='const xmlChar *' info='the xml:lang value or NULL if none exists.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderCurrentDoc' file='xmlreader'>
+ <info>Hacking interface allowing to get the xmlDocPtr correponding to the current document being accessed by the xmlTextReader. NOTE: as a result of this call, the reader will not destroy the associated XML document and calling xmlFreeDoc() on the result is needed once the reader parsing has finished.</info>
+ <return type='xmlDocPtr' info='the xmlDocPtr or NULL in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderCurrentNode' file='xmlreader'>
+ <info>Hacking interface allowing to get the xmlNodePtr correponding to the current node being accessed by the xmlTextReader. This is dangerous because the underlying node may be destroyed on the next Reads.</info>
+ <return type='xmlNodePtr' info='the xmlNodePtr or NULL in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderDepth' file='xmlreader'>
+ <info>The depth of the node in the tree.</info>
+ <return type='int' info='the depth or -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <functype name='xmlTextReaderErrorFunc' file='xmlreader'>
+ <info></info>
+ <return type='void'/>
+ <arg name='arg' type='void *' info=''/>
+ <arg name='msg' type='const char *' info=''/>
+ <arg name='severity' type='xmlParserSeverities' info=''/>
+ <arg name='locator' type='xmlTextReaderLocatorPtr' info=''/>
+ </functype>
+ <function name='xmlTextReaderExpand' file='xmlreader'>
+ <info>Reads the contents of the current node and the full subtree. It then makes the subtree available until the next xmlTextReaderRead() call</info>
+ <return type='xmlNodePtr' info='a node pointer valid until the next xmlTextReaderRead() call or NULL in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderGetAttribute' file='xmlreader'>
+ <info>Provides the value of the attribute with the specified qualified name.</info>
+ <return type='xmlChar *' info='a string containing the value of the specified attribute, or NULL in case of error. The string must be deallocated by the caller.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='name' type='const xmlChar *' info='the qualified name of the attribute.'/>
+ </function>
+ <function name='xmlTextReaderGetAttributeNo' file='xmlreader'>
+ <info>Provides the value of the attribute with the specified index relative to the containing element.</info>
+ <return type='xmlChar *' info='a string containing the value of the specified attribute, or NULL in case of error. The string must be deallocated by the caller.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='no' type='int' info='the zero-based index of the attribute relative to the containing element'/>
+ </function>
+ <function name='xmlTextReaderGetAttributeNs' file='xmlreader'>
+ <info>Provides the value of the specified attribute</info>
+ <return type='xmlChar *' info='a string containing the value of the specified attribute, or NULL in case of error. The string must be deallocated by the caller.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='localName' type='const xmlChar *' info='the local name of the attribute.'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='the namespace URI of the attribute.'/>
+ </function>
+ <function name='xmlTextReaderGetErrorHandler' file='xmlreader'>
+ <info>Retrieve the error callback function and user argument.</info>
+ <return type='void'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='f' type='xmlTextReaderErrorFunc *' info='the callback function or NULL is no callback has been registered'/>
+ <arg name='arg' type='void **' info='a user argument'/>
+ </function>
+ <function name='xmlTextReaderGetParserProp' file='xmlreader'>
+ <info>Read the parser internal property.</info>
+ <return type='int' info='the value, usually 0 or 1, or -1 in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='prop' type='int' info='the xmlParserProperties to get'/>
+ </function>
+ <function name='xmlTextReaderGetRemainder' file='xmlreader'>
+ <info>Method to get the remainder of the buffered XML. this method stops the parser, set its state to End Of File and return the input stream with what is left that the parser did not use.</info>
+ <return type='xmlParserInputBufferPtr' info='the xmlParserInputBufferPtr attached to the XML or NULL in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderHasAttributes' file='xmlreader'>
+ <info>Whether the node has attributes.</info>
+ <return type='int' info='1 if true, 0 if false, and -1 in case or error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderHasValue' file='xmlreader'>
+ <info>Whether the node can have a text value.</info>
+ <return type='int' info='1 if true, 0 if false, and -1 in case or error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderIsDefault' file='xmlreader'>
+ <info>Whether an Attribute node was generated from the default value defined in the DTD or schema.</info>
+ <return type='int' info='0 if not defaulted, 1 if defaulted, and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderIsEmptyElement' file='xmlreader'>
+ <info>Check if the current node is empty</info>
+ <return type='int' info='1 if empty, 0 if not and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderIsValid' file='xmlreader'>
+ <info>Retrieve the validity status from the parser context</info>
+ <return type='int' info='the flag value 1 if valid, 0 if no, and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderLocalName' file='xmlreader'>
+ <info>The local name of the node.</info>
+ <return type='xmlChar *' info='the local name or NULL if not available'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderLocatorBaseURI' file='xmlreader'>
+ <info>Obtain the base URI for the given locator.</info>
+ <return type='xmlChar *' info='the base URI or NULL in case of error.'/>
+ <arg name='locator' type='xmlTextReaderLocatorPtr' info='the xmlTextReaderLocatorPtr used'/>
+ </function>
+ <function name='xmlTextReaderLocatorLineNumber' file='xmlreader'>
+ <info>Obtain the line number for the given locator.</info>
+ <return type='int' info='the line number or -1 in case of error.'/>
+ <arg name='locator' type='xmlTextReaderLocatorPtr' info='the xmlTextReaderLocatorPtr used'/>
+ </function>
+ <function name='xmlTextReaderLookupNamespace' file='xmlreader'>
+ <info>Resolves a namespace prefix in the scope of the current element.</info>
+ <return type='xmlChar *' info='a string containing the namespace URI to which the prefix maps or NULL in case of error. The string must be deallocated by the caller.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='prefix' type='const xmlChar *' info='the prefix whose namespace URI is to be resolved. To return the default namespace, specify NULL'/>
+ </function>
+ <function name='xmlTextReaderMoveToAttribute' file='xmlreader'>
+ <info>Moves the position of the current instance to the attribute with the specified qualified name.</info>
+ <return type='int' info='1 in case of success, -1 in case of error, 0 if not found'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='name' type='const xmlChar *' info='the qualified name of the attribute.'/>
+ </function>
+ <function name='xmlTextReaderMoveToAttributeNo' file='xmlreader'>
+ <info>Moves the position of the current instance to the attribute with the specified index relative to the containing element.</info>
+ <return type='int' info='1 in case of success, -1 in case of error, 0 if not found'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='no' type='int' info='the zero-based index of the attribute relative to the containing element.'/>
+ </function>
+ <function name='xmlTextReaderMoveToAttributeNs' file='xmlreader'>
+ <info>Moves the position of the current instance to the attribute with the specified local name and namespace URI.</info>
+ <return type='int' info='1 in case of success, -1 in case of error, 0 if not found'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='localName' type='const xmlChar *' info='the local name of the attribute.'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='the namespace URI of the attribute.'/>
+ </function>
+ <function name='xmlTextReaderMoveToElement' file='xmlreader'>
+ <info>Moves the position of the current instance to the node that contains the current Attribute node.</info>
+ <return type='int' info='1 in case of success, -1 in case of error, 0 if not moved'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderMoveToFirstAttribute' file='xmlreader'>
+ <info>Moves the position of the current instance to the first attribute associated with the current node.</info>
+ <return type='int' info='1 in case of success, -1 in case of error, 0 if not found'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderMoveToNextAttribute' file='xmlreader'>
+ <info>Moves the position of the current instance to the next attribute associated with the current node.</info>
+ <return type='int' info='1 in case of success, -1 in case of error, 0 if not found'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderName' file='xmlreader'>
+ <info>The qualified name of the node, equal to Prefix :LocalName.</info>
+ <return type='xmlChar *' info='the local name or NULL if not available'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderNamespaceUri' file='xmlreader'>
+ <info>The URI defining the namespace associated with the node.</info>
+ <return type='xmlChar *' info='the namespace URI or NULL if not available'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderNext' file='xmlreader'>
+ <info>Skip to the node following the current one in document order while avoiding the subtree if any.</info>
+ <return type='int' info='1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderNextSibling' file='xmlreader'>
+ <info>Skip to the node following the current one in document order while avoiding the subtree if any. Currently implemented only for Readers built on a document</info>
+ <return type='int' info='1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderNodeType' file='xmlreader'>
+ <info>Get the node type of the current node Reference: http://dotgnu.org/pnetlib-doc/System/Xml/XmlNodeType.html</info>
+ <return type='int' info='the xmlNodeType of the current node or -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderNormalization' file='xmlreader'>
+ <info>The value indicating whether to normalize white space and attribute values. Since attribute value and end of line normalizations are a MUST in the XML specification only the value true is accepted. The broken bahaviour of accepting out of range character entities like &amp;#0; is of course not supported either.</info>
+ <return type='int' info='1 or -1 in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderPrefix' file='xmlreader'>
+ <info>A shorthand reference to the namespace associated with the node.</info>
+ <return type='xmlChar *' info='the prefix or NULL if not available'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderPreserve' file='xmlreader'>
+ <info>current node being accessed by the xmlTextReader. This is dangerous because the underlying node may be destroyed on the next Reads.</info>
+ <return type='xmlNodePtr' info='the xmlNodePtr or NULL in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderPreservePattern' file='xmlreader'>
+ <info>This tells the XML Reader to preserve all nodes matched by the pattern. The caller must also use xmlTextReaderCurrentDoc() to keep an handle on the resulting document once parsing has finished</info>
+ <return type='int' info='a positive number in case of success and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='pattern' type='const xmlChar *' info='an XPath subset pattern'/>
+ <arg name='namespaces' type='const xmlChar **' info='the prefix definitions, array of [URI, prefix] or NULL'/>
+ </function>
+ <function name='xmlTextReaderQuoteChar' file='xmlreader'>
+ <info>The quotation mark character used to enclose the value of an attribute.</info>
+ <return type='int' info='&quot; or &apos; and -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderRead' file='xmlreader'>
+ <info>Moves the position of the current instance to the next node in the stream, exposing its properties.</info>
+ <return type='int' info='1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderReadAttributeValue' file='xmlreader'>
+ <info>Parses an attribute value into one or more Text and EntityReference nodes.</info>
+ <return type='int' info='1 in case of success, 0 if the reader was not positionned on an ttribute node or all the attribute values have been read, or -1 in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderReadInnerXml' file='xmlreader'>
+ <info>Reads the contents of the current node, including child nodes and markup.</info>
+ <return type='xmlChar *' info='a string containing the XML content, or NULL if the current node is neither an element nor attribute, or has no child nodes. The string must be deallocated by the caller.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderReadOuterXml' file='xmlreader'>
+ <info>Reads the contents of the current node, including child nodes and markup.</info>
+ <return type='xmlChar *' info='a string containing the XML content, or NULL if the current node is neither an element nor attribute, or has no child nodes. The string must be deallocated by the caller.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderReadState' file='xmlreader'>
+ <info>Gets the read state of the reader.</info>
+ <return type='int' info='the state value, or -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderReadString' file='xmlreader'>
+ <info>Reads the contents of an element or a text node as a string.</info>
+ <return type='xmlChar *' info='a string containing the contents of the Element or Text node, or NULL if the reader is positioned on any other type of node. The string must be deallocated by the caller.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderRelaxNGSetSchema' file='xmlreader'>
+ <info>Use RelaxNG to validate the document as it is processed. Activation is only possible before the first Read(). if @schema is NULL, then RelaxNG validation is desactivated. @ The @schema should not be freed until the reader is deallocated or its use has been deactivated.</info>
+ <return type='int' info='0 in case the RelaxNG validation could be (des)activated and -1 in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='schema' type='xmlRelaxNGPtr' info='a precompiled RelaxNG schema'/>
+ </function>
+ <function name='xmlTextReaderRelaxNGValidate' file='xmlreader'>
+ <info>Use RelaxNG to validate the document as it is processed. Activation is only possible before the first Read(). if @rng is NULL, then RelaxNG validation is desactivated.</info>
+ <return type='int' info='0 in case the RelaxNG validation could be (des)activated and -1 in case of error.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='rng' type='const char *' info='the path to a RelaxNG schema or NULL'/>
+ </function>
+ <function name='xmlTextReaderSetErrorHandler' file='xmlreader'>
+ <info>Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored.</info>
+ <return type='void'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='f' type='xmlTextReaderErrorFunc' info='the callback function to call on error and warnings'/>
+ <arg name='arg' type='void *' info='a user argument to pass to the callback function'/>
+ </function>
+ <function name='xmlTextReaderSetParserProp' file='xmlreader'>
+ <info>Change the parser processing behaviour by changing some of its internal properties. Note that some properties can only be changed before any read has been done.</info>
+ <return type='int' info='0 if the call was successful, or -1 in case of error'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='prop' type='int' info='the xmlParserProperties to set'/>
+ <arg name='value' type='int' info='usually 0 or 1 to (de)activate it'/>
+ </function>
+ <function name='xmlTextReaderSetStructuredErrorHandler' file='xmlreader'>
+ <info>Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored.</info>
+ <return type='void'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ <arg name='f' type='xmlStructuredErrorFunc' info='the callback function to call on error and warnings'/>
+ <arg name='arg' type='void *' info='a user argument to pass to the callback function'/>
+ </function>
+ <function name='xmlTextReaderValue' file='xmlreader'>
+ <info>Provides the text value of the node if present</info>
+ <return type='xmlChar *' info='the string or NULL if not available. The result must be deallocated with xmlFree()'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextReaderXmlLang' file='xmlreader'>
+ <info>The xml:lang scope within which the node resides.</info>
+ <return type='xmlChar *' info='the xml:lang value or NULL if none exists.'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='the xmlTextReaderPtr used'/>
+ </function>
+ <function name='xmlTextWriterEndAttribute' file='xmlwriter'>
+ <info>End the current xml element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterEndCDATA' file='xmlwriter'>
+ <info>End an xml CDATA section.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterEndComment' file='xmlwriter'>
+ <info>End the current xml coment.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterEndDTD' file='xmlwriter'>
+ <info>End an xml DTD.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterEndDTDAttlist' file='xmlwriter'>
+ <info>End an xml DTD attribute list.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterEndDTDElement' file='xmlwriter'>
+ <info>End an xml DTD element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterEndDTDEntity' file='xmlwriter'>
+ <info>End an xml DTD entity.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterEndDocument' file='xmlwriter'>
+ <info>End an xml document. All open elements are closed</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterEndElement' file='xmlwriter'>
+ <info>End the current xml element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterEndPI' file='xmlwriter'>
+ <info>End the current xml PI.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterFlush' file='xmlwriter'>
+ <info>Flush the output buffer.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterFullEndElement' file='xmlwriter'>
+ <info>End the current xml element. Writes an end tag even if the element is empty</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterSetIndent' file='xmlwriter'>
+ <info>Set indentation output. indent = 0 do not indentation. indent &gt; 0 do indentation.</info>
+ <return type='int' info='-1 on error or 0 otherwise.'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='indent' type='int' info='do indentation?'/>
+ </function>
+ <function name='xmlTextWriterSetIndentString' file='xmlwriter'>
+ <info>Set string indentation.</info>
+ <return type='int' info='-1 on error or 0 otherwise.'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='str' type='const xmlChar *' info='the xmlChar string'/>
+ </function>
+ <function name='xmlTextWriterStartAttribute' file='xmlwriter'>
+ <info>Start an xml attribute.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='element name'/>
+ </function>
+ <function name='xmlTextWriterStartAttributeNS' file='xmlwriter'>
+ <info>Start an xml attribute with namespace support.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='prefix' type='const xmlChar *' info='namespace prefix or NULL'/>
+ <arg name='name' type='const xmlChar *' info='element local name'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='namespace URI or NULL'/>
+ </function>
+ <function name='xmlTextWriterStartCDATA' file='xmlwriter'>
+ <info>Start an xml CDATA section.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterStartComment' file='xmlwriter'>
+ <info>Start an xml comment.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ </function>
+ <function name='xmlTextWriterStartDTD' file='xmlwriter'>
+ <info>Start an xml DTD.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD'/>
+ <arg name='pubid' type='const xmlChar *' info='the public identifier, which is an alternative to the system identifier'/>
+ <arg name='sysid' type='const xmlChar *' info='the system identifier, which is the URI of the DTD'/>
+ </function>
+ <function name='xmlTextWriterStartDTDAttlist' file='xmlwriter'>
+ <info>Start an xml DTD ATTLIST.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD ATTLIST'/>
+ </function>
+ <function name='xmlTextWriterStartDTDElement' file='xmlwriter'>
+ <info>Start an xml DTD element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD element'/>
+ </function>
+ <function name='xmlTextWriterStartDTDEntity' file='xmlwriter'>
+ <info>Start an xml DTD ATTLIST.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='pe' type='int' info='TRUE if this is a parameter entity, FALSE if not'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD ATTLIST'/>
+ </function>
+ <function name='xmlTextWriterStartDocument' file='xmlwriter'>
+ <info>Start a new xml document</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='version' type='const char *' info='the xml version (&quot;1.0&quot;) or NULL for default (&quot;1.0&quot;)'/>
+ <arg name='encoding' type='const char *' info='the encoding or NULL for default'/>
+ <arg name='standalone' type='const char *' info='&quot;yes&quot; or &quot;no&quot; or NULL for default'/>
+ </function>
+ <function name='xmlTextWriterStartElement' file='xmlwriter'>
+ <info>Start an xml element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='element name'/>
+ </function>
+ <function name='xmlTextWriterStartElementNS' file='xmlwriter'>
+ <info>Start an xml element with namespace support.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='prefix' type='const xmlChar *' info='namespace prefix or NULL'/>
+ <arg name='name' type='const xmlChar *' info='element local name'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='namespace URI or NULL'/>
+ </function>
+ <function name='xmlTextWriterStartPI' file='xmlwriter'>
+ <info>Start an xml PI.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='target' type='const xmlChar *' info='PI target'/>
+ </function>
+ <function name='xmlTextWriterWriteAttribute' file='xmlwriter'>
+ <info>Write an xml attribute.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='attribute name'/>
+ <arg name='content' type='const xmlChar *' info='attribute content'/>
+ </function>
+ <function name='xmlTextWriterWriteAttributeNS' file='xmlwriter'>
+ <info>Write an xml attribute.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='prefix' type='const xmlChar *' info='namespace prefix'/>
+ <arg name='name' type='const xmlChar *' info='attribute local name'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='namespace URI'/>
+ <arg name='content' type='const xmlChar *' info='attribute content'/>
+ </function>
+ <function name='xmlTextWriterWriteBase64' file='xmlwriter'>
+ <info>Write an base64 encoded xml text.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='data' type='const char *' info='binary data'/>
+ <arg name='start' type='int' info='the position within the data of the first byte to encode'/>
+ <arg name='len' type='int' info='the number of bytes to encode'/>
+ </function>
+ <function name='xmlTextWriterWriteBinHex' file='xmlwriter'>
+ <info>Write a BinHex encoded xml text.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='data' type='const char *' info='binary data'/>
+ <arg name='start' type='int' info='the position within the data of the first byte to encode'/>
+ <arg name='len' type='int' info='the number of bytes to encode'/>
+ </function>
+ <function name='xmlTextWriterWriteCDATA' file='xmlwriter'>
+ <info>Write an xml CDATA.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='content' type='const xmlChar *' info='CDATA content'/>
+ </function>
+ <function name='xmlTextWriterWriteComment' file='xmlwriter'>
+ <info>Write an xml comment.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='content' type='const xmlChar *' info='comment string'/>
+ </function>
+ <function name='xmlTextWriterWriteDTD' file='xmlwriter'>
+ <info>Write a DTD.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD'/>
+ <arg name='pubid' type='const xmlChar *' info='the public identifier, which is an alternative to the system identifier'/>
+ <arg name='sysid' type='const xmlChar *' info='the system identifier, which is the URI of the DTD'/>
+ <arg name='subset' type='const xmlChar *' info='string content of the DTD'/>
+ </function>
+ <function name='xmlTextWriterWriteDTDAttlist' file='xmlwriter'>
+ <info>Write a DTD ATTLIST.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD ATTLIST'/>
+ <arg name='content' type='const xmlChar *' info='content of the ATTLIST'/>
+ </function>
+ <function name='xmlTextWriterWriteDTDElement' file='xmlwriter'>
+ <info>Write a DTD element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD element'/>
+ <arg name='content' type='const xmlChar *' info='content of the element'/>
+ </function>
+ <function name='xmlTextWriterWriteDTDEntity' file='xmlwriter'>
+ <info>Write a DTD entity.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='pe' type='int' info='TRUE if this is a parameter entity, FALSE if not'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD entity'/>
+ <arg name='pubid' type='const xmlChar *' info='the public identifier, which is an alternative to the system identifier'/>
+ <arg name='sysid' type='const xmlChar *' info='the system identifier, which is the URI of the DTD'/>
+ <arg name='ndataid' type='const xmlChar *' info='the xml notation name.'/>
+ <arg name='content' type='const xmlChar *' info='content of the entity'/>
+ </function>
+ <function name='xmlTextWriterWriteDTDExternalEntity' file='xmlwriter'>
+ <info>Write a DTD external entity. The entity must have been started with xmlTextWriterStartDTDEntity</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='pe' type='int' info='TRUE if this is a parameter entity, FALSE if not'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD entity'/>
+ <arg name='pubid' type='const xmlChar *' info='the public identifier, which is an alternative to the system identifier'/>
+ <arg name='sysid' type='const xmlChar *' info='the system identifier, which is the URI of the DTD'/>
+ <arg name='ndataid' type='const xmlChar *' info='the xml notation name.'/>
+ </function>
+ <function name='xmlTextWriterWriteDTDExternalEntityContents' file='xmlwriter'>
+ <info>Write the contents of a DTD external entity.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='pubid' type='const xmlChar *' info='the public identifier, which is an alternative to the system identifier'/>
+ <arg name='sysid' type='const xmlChar *' info='the system identifier, which is the URI of the DTD'/>
+ <arg name='ndataid' type='const xmlChar *' info='the xml notation name.'/>
+ </function>
+ <function name='xmlTextWriterWriteDTDInternalEntity' file='xmlwriter'>
+ <info>Write a DTD internal entity.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='pe' type='int' info='TRUE if this is a parameter entity, FALSE if not'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD entity'/>
+ <arg name='content' type='const xmlChar *' info='content of the entity'/>
+ </function>
+ <function name='xmlTextWriterWriteDTDNotation' file='xmlwriter'>
+ <info>Write a DTD entity.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the xml notation'/>
+ <arg name='pubid' type='const xmlChar *' info='the public identifier, which is an alternative to the system identifier'/>
+ <arg name='sysid' type='const xmlChar *' info='the system identifier, which is the URI of the DTD'/>
+ </function>
+ <function name='xmlTextWriterWriteElement' file='xmlwriter'>
+ <info>Write an xml element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='element name'/>
+ <arg name='content' type='const xmlChar *' info='element content'/>
+ </function>
+ <function name='xmlTextWriterWriteElementNS' file='xmlwriter'>
+ <info>Write an xml element with namespace support.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='prefix' type='const xmlChar *' info='namespace prefix'/>
+ <arg name='name' type='const xmlChar *' info='element local name'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='namespace URI'/>
+ <arg name='content' type='const xmlChar *' info='element content'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatAttribute' file='xmlwriter'>
+ <info>Write a formatted xml attribute.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='attribute name'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatAttributeNS' file='xmlwriter'>
+ <info>Write a formatted xml attribute.with namespace support</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='prefix' type='const xmlChar *' info='namespace prefix'/>
+ <arg name='name' type='const xmlChar *' info='attribute local name'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='namespace URI'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatCDATA' file='xmlwriter'>
+ <info>Write a formatted xml CDATA.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatComment' file='xmlwriter'>
+ <info>Write an xml comment.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatDTD' file='xmlwriter'>
+ <info>Write a DTD with a formatted markup declarations part.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD'/>
+ <arg name='pubid' type='const xmlChar *' info='the public identifier, which is an alternative to the system identifier'/>
+ <arg name='sysid' type='const xmlChar *' info='the system identifier, which is the URI of the DTD'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatDTDAttlist' file='xmlwriter'>
+ <info>Write a formatted DTD ATTLIST.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD ATTLIST'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatDTDElement' file='xmlwriter'>
+ <info>Write a formatted DTD element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD element'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatDTDInternalEntity' file='xmlwriter'>
+ <info>Write a formatted DTD internal entity.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='pe' type='int' info='TRUE if this is a parameter entity, FALSE if not'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD entity'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatElement' file='xmlwriter'>
+ <info>Write a formatted xml element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='element name'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatElementNS' file='xmlwriter'>
+ <info>Write a formatted xml element with namespace support.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='prefix' type='const xmlChar *' info='namespace prefix'/>
+ <arg name='name' type='const xmlChar *' info='element local name'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='namespace URI'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatPI' file='xmlwriter'>
+ <info>Write a formatted PI.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='target' type='const xmlChar *' info='PI target'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatRaw' file='xmlwriter'>
+ <info>Write a formatted raw xml text.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWriteFormatString' file='xmlwriter'>
+ <info>Write a formatted xml text.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='...' type='...' info='extra parameters for the format'/>
+ </function>
+ <function name='xmlTextWriterWritePI' file='xmlwriter'>
+ <info>Write an xml PI.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='target' type='const xmlChar *' info='PI target'/>
+ <arg name='content' type='const xmlChar *' info='PI content'/>
+ </function>
+ <function name='xmlTextWriterWriteRaw' file='xmlwriter'>
+ <info>Write a raw xml text.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='content' type='const xmlChar *' info='text string'/>
+ </function>
+ <function name='xmlTextWriterWriteRawLen' file='xmlwriter'>
+ <info>Write an xml text. TODO: what about entities and special chars??</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='content' type='const xmlChar *' info='text string'/>
+ <arg name='len' type='int' info='length of the text string'/>
+ </function>
+ <function name='xmlTextWriterWriteString' file='xmlwriter'>
+ <info>Write an xml text.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='content' type='const xmlChar *' info='text string'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatAttribute' file='xmlwriter'>
+ <info>Write a formatted xml attribute.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='attribute name'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatAttributeNS' file='xmlwriter'>
+ <info>Write a formatted xml attribute.with namespace support</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='prefix' type='const xmlChar *' info='namespace prefix'/>
+ <arg name='name' type='const xmlChar *' info='attribute local name'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='namespace URI'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatCDATA' file='xmlwriter'>
+ <info>Write a formatted xml CDATA.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatComment' file='xmlwriter'>
+ <info>Write an xml comment.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatDTD' file='xmlwriter'>
+ <info>Write a DTD with a formatted markup declarations part.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD'/>
+ <arg name='pubid' type='const xmlChar *' info='the public identifier, which is an alternative to the system identifier'/>
+ <arg name='sysid' type='const xmlChar *' info='the system identifier, which is the URI of the DTD'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatDTDAttlist' file='xmlwriter'>
+ <info>Write a formatted DTD ATTLIST.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD ATTLIST'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatDTDElement' file='xmlwriter'>
+ <info>Write a formatted DTD element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD element'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatDTDInternalEntity' file='xmlwriter'>
+ <info>Write a formatted DTD internal entity.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='pe' type='int' info='TRUE if this is a parameter entity, FALSE if not'/>
+ <arg name='name' type='const xmlChar *' info='the name of the DTD entity'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatElement' file='xmlwriter'>
+ <info>Write a formatted xml element.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='name' type='const xmlChar *' info='element name'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatElementNS' file='xmlwriter'>
+ <info>Write a formatted xml element with namespace support.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='prefix' type='const xmlChar *' info='namespace prefix'/>
+ <arg name='name' type='const xmlChar *' info='element local name'/>
+ <arg name='namespaceURI' type='const xmlChar *' info='namespace URI'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatPI' file='xmlwriter'>
+ <info>Write a formatted xml PI.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='target' type='const xmlChar *' info='PI target'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatRaw' file='xmlwriter'>
+ <info>Write a formatted raw xml text.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlTextWriterWriteVFormatString' file='xmlwriter'>
+ <info>Write a formatted xml text.</info>
+ <return type='int' info='the bytes written (may be 0 because of buffering) or -1 in case of error'/>
+ <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+ <arg name='format' type='const char *' info='format string (see printf)'/>
+ <arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
+ </function>
+ <function name='xmlThrDefBufferAllocScheme' file='globals'>
+ <info></info>
+ <return type='xmlBufferAllocationScheme' info=''/>
+ <arg name='v' type='xmlBufferAllocationScheme' info=''/>
+ </function>
+ <function name='xmlThrDefDefaultBufferSize' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefDeregisterNodeDefault' file='globals'>
+ <info></info>
+ <return type='xmlDeregisterNodeFunc' info=''/>
+ <arg name='func' type='xmlDeregisterNodeFunc' info=''/>
+ </function>
+ <function name='xmlThrDefDoValidityCheckingDefaultValue' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefGetWarningsDefaultValue' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefIndentTreeOutput' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefKeepBlanksDefaultValue' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefLineNumbersDefaultValue' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefLoadExtDtdDefaultValue' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefParserDebugEntities' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefPedanticParserDefaultValue' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefRegisterNodeDefault' file='globals'>
+ <info></info>
+ <return type='xmlRegisterNodeFunc' info=''/>
+ <arg name='func' type='xmlRegisterNodeFunc' info=''/>
+ </function>
+ <function name='xmlThrDefSaveNoEmptyTags' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefSetGenericErrorFunc' file='globals'>
+ <info></info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info=''/>
+ <arg name='handler' type='xmlGenericErrorFunc' info=''/>
+ </function>
+ <function name='xmlThrDefSetStructuredErrorFunc' file='globals'>
+ <info></info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info=''/>
+ <arg name='handler' type='xmlStructuredErrorFunc' info=''/>
+ </function>
+ <function name='xmlThrDefSubstituteEntitiesDefaultValue' file='globals'>
+ <info></info>
+ <return type='int' info=''/>
+ <arg name='v' type='int' info=''/>
+ </function>
+ <function name='xmlThrDefTreeIndentString' file='globals'>
+ <info></info>
+ <return type='const char *' info=''/>
+ <arg name='v' type='const char *' info=''/>
+ </function>
+ <function name='xmlUCSIsAegeanNumbers' file='xmlunicode'>
+ <info>Check whether the character is part of AegeanNumbers UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsAlphabeticPresentationForms' file='xmlunicode'>
+ <info>Check whether the character is part of AlphabeticPresentationForms UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsArabic' file='xmlunicode'>
+ <info>Check whether the character is part of Arabic UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsArabicPresentationFormsA' file='xmlunicode'>
+ <info>Check whether the character is part of ArabicPresentationForms-A UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsArabicPresentationFormsB' file='xmlunicode'>
+ <info>Check whether the character is part of ArabicPresentationForms-B UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsArmenian' file='xmlunicode'>
+ <info>Check whether the character is part of Armenian UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsArrows' file='xmlunicode'>
+ <info>Check whether the character is part of Arrows UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsBasicLatin' file='xmlunicode'>
+ <info>Check whether the character is part of BasicLatin UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsBengali' file='xmlunicode'>
+ <info>Check whether the character is part of Bengali UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsBlock' file='xmlunicode'>
+ <info>Check whether the character is part of the UCS Block</info>
+ <return type='int' info='1 if true, 0 if false and -1 on unknown block'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ <arg name='block' type='const char *' info='UCS block name'/>
+ </function>
+ <function name='xmlUCSIsBlockElements' file='xmlunicode'>
+ <info>Check whether the character is part of BlockElements UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsBopomofo' file='xmlunicode'>
+ <info>Check whether the character is part of Bopomofo UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsBopomofoExtended' file='xmlunicode'>
+ <info>Check whether the character is part of BopomofoExtended UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsBoxDrawing' file='xmlunicode'>
+ <info>Check whether the character is part of BoxDrawing UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsBraillePatterns' file='xmlunicode'>
+ <info>Check whether the character is part of BraillePatterns UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsBuhid' file='xmlunicode'>
+ <info>Check whether the character is part of Buhid UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsByzantineMusicalSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of ByzantineMusicalSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCJKCompatibility' file='xmlunicode'>
+ <info>Check whether the character is part of CJKCompatibility UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCJKCompatibilityForms' file='xmlunicode'>
+ <info>Check whether the character is part of CJKCompatibilityForms UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCJKCompatibilityIdeographs' file='xmlunicode'>
+ <info>Check whether the character is part of CJKCompatibilityIdeographs UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCJKCompatibilityIdeographsSupplement' file='xmlunicode'>
+ <info>Check whether the character is part of CJKCompatibilityIdeographsSupplement UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCJKRadicalsSupplement' file='xmlunicode'>
+ <info>Check whether the character is part of CJKRadicalsSupplement UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCJKSymbolsandPunctuation' file='xmlunicode'>
+ <info>Check whether the character is part of CJKSymbolsandPunctuation UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCJKUnifiedIdeographs' file='xmlunicode'>
+ <info>Check whether the character is part of CJKUnifiedIdeographs UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCJKUnifiedIdeographsExtensionA' file='xmlunicode'>
+ <info>Check whether the character is part of CJKUnifiedIdeographsExtensionA UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCJKUnifiedIdeographsExtensionB' file='xmlunicode'>
+ <info>Check whether the character is part of CJKUnifiedIdeographsExtensionB UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCat' file='xmlunicode'>
+ <info>Check whether the character is part of the UCS Category</info>
+ <return type='int' info='1 if true, 0 if false and -1 on unknown category'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ <arg name='cat' type='const char *' info='UCS Category name'/>
+ </function>
+ <function name='xmlUCSIsCatC' file='xmlunicode'>
+ <info>Check whether the character is part of C UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatCc' file='xmlunicode'>
+ <info>Check whether the character is part of Cc UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatCf' file='xmlunicode'>
+ <info>Check whether the character is part of Cf UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatCo' file='xmlunicode'>
+ <info>Check whether the character is part of Co UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatCs' file='xmlunicode'>
+ <info>Check whether the character is part of Cs UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatL' file='xmlunicode'>
+ <info>Check whether the character is part of L UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatLl' file='xmlunicode'>
+ <info>Check whether the character is part of Ll UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatLm' file='xmlunicode'>
+ <info>Check whether the character is part of Lm UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatLo' file='xmlunicode'>
+ <info>Check whether the character is part of Lo UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatLt' file='xmlunicode'>
+ <info>Check whether the character is part of Lt UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatLu' file='xmlunicode'>
+ <info>Check whether the character is part of Lu UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatM' file='xmlunicode'>
+ <info>Check whether the character is part of M UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatMc' file='xmlunicode'>
+ <info>Check whether the character is part of Mc UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatMe' file='xmlunicode'>
+ <info>Check whether the character is part of Me UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatMn' file='xmlunicode'>
+ <info>Check whether the character is part of Mn UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatN' file='xmlunicode'>
+ <info>Check whether the character is part of N UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatNd' file='xmlunicode'>
+ <info>Check whether the character is part of Nd UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatNl' file='xmlunicode'>
+ <info>Check whether the character is part of Nl UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatNo' file='xmlunicode'>
+ <info>Check whether the character is part of No UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatP' file='xmlunicode'>
+ <info>Check whether the character is part of P UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatPc' file='xmlunicode'>
+ <info>Check whether the character is part of Pc UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatPd' file='xmlunicode'>
+ <info>Check whether the character is part of Pd UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatPe' file='xmlunicode'>
+ <info>Check whether the character is part of Pe UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatPf' file='xmlunicode'>
+ <info>Check whether the character is part of Pf UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatPi' file='xmlunicode'>
+ <info>Check whether the character is part of Pi UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatPo' file='xmlunicode'>
+ <info>Check whether the character is part of Po UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatPs' file='xmlunicode'>
+ <info>Check whether the character is part of Ps UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatS' file='xmlunicode'>
+ <info>Check whether the character is part of S UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatSc' file='xmlunicode'>
+ <info>Check whether the character is part of Sc UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatSk' file='xmlunicode'>
+ <info>Check whether the character is part of Sk UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatSm' file='xmlunicode'>
+ <info>Check whether the character is part of Sm UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatSo' file='xmlunicode'>
+ <info>Check whether the character is part of So UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatZ' file='xmlunicode'>
+ <info>Check whether the character is part of Z UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatZl' file='xmlunicode'>
+ <info>Check whether the character is part of Zl UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatZp' file='xmlunicode'>
+ <info>Check whether the character is part of Zp UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCatZs' file='xmlunicode'>
+ <info>Check whether the character is part of Zs UCS Category</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCherokee' file='xmlunicode'>
+ <info>Check whether the character is part of Cherokee UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCombiningDiacriticalMarks' file='xmlunicode'>
+ <info>Check whether the character is part of CombiningDiacriticalMarks UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCombiningDiacriticalMarksforSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of CombiningDiacriticalMarksforSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCombiningHalfMarks' file='xmlunicode'>
+ <info>Check whether the character is part of CombiningHalfMarks UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCombiningMarksforSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of CombiningMarksforSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsControlPictures' file='xmlunicode'>
+ <info>Check whether the character is part of ControlPictures UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCurrencySymbols' file='xmlunicode'>
+ <info>Check whether the character is part of CurrencySymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCypriotSyllabary' file='xmlunicode'>
+ <info>Check whether the character is part of CypriotSyllabary UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCyrillic' file='xmlunicode'>
+ <info>Check whether the character is part of Cyrillic UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsCyrillicSupplement' file='xmlunicode'>
+ <info>Check whether the character is part of CyrillicSupplement UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsDeseret' file='xmlunicode'>
+ <info>Check whether the character is part of Deseret UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsDevanagari' file='xmlunicode'>
+ <info>Check whether the character is part of Devanagari UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsDingbats' file='xmlunicode'>
+ <info>Check whether the character is part of Dingbats UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsEnclosedAlphanumerics' file='xmlunicode'>
+ <info>Check whether the character is part of EnclosedAlphanumerics UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsEnclosedCJKLettersandMonths' file='xmlunicode'>
+ <info>Check whether the character is part of EnclosedCJKLettersandMonths UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsEthiopic' file='xmlunicode'>
+ <info>Check whether the character is part of Ethiopic UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsGeneralPunctuation' file='xmlunicode'>
+ <info>Check whether the character is part of GeneralPunctuation UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsGeometricShapes' file='xmlunicode'>
+ <info>Check whether the character is part of GeometricShapes UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsGeorgian' file='xmlunicode'>
+ <info>Check whether the character is part of Georgian UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsGothic' file='xmlunicode'>
+ <info>Check whether the character is part of Gothic UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsGreek' file='xmlunicode'>
+ <info>Check whether the character is part of Greek UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsGreekExtended' file='xmlunicode'>
+ <info>Check whether the character is part of GreekExtended UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsGreekandCoptic' file='xmlunicode'>
+ <info>Check whether the character is part of GreekandCoptic UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsGujarati' file='xmlunicode'>
+ <info>Check whether the character is part of Gujarati UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsGurmukhi' file='xmlunicode'>
+ <info>Check whether the character is part of Gurmukhi UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsHalfwidthandFullwidthForms' file='xmlunicode'>
+ <info>Check whether the character is part of HalfwidthandFullwidthForms UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsHangulCompatibilityJamo' file='xmlunicode'>
+ <info>Check whether the character is part of HangulCompatibilityJamo UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsHangulJamo' file='xmlunicode'>
+ <info>Check whether the character is part of HangulJamo UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsHangulSyllables' file='xmlunicode'>
+ <info>Check whether the character is part of HangulSyllables UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsHanunoo' file='xmlunicode'>
+ <info>Check whether the character is part of Hanunoo UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsHebrew' file='xmlunicode'>
+ <info>Check whether the character is part of Hebrew UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsHighPrivateUseSurrogates' file='xmlunicode'>
+ <info>Check whether the character is part of HighPrivateUseSurrogates UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsHighSurrogates' file='xmlunicode'>
+ <info>Check whether the character is part of HighSurrogates UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsHiragana' file='xmlunicode'>
+ <info>Check whether the character is part of Hiragana UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsIPAExtensions' file='xmlunicode'>
+ <info>Check whether the character is part of IPAExtensions UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsIdeographicDescriptionCharacters' file='xmlunicode'>
+ <info>Check whether the character is part of IdeographicDescriptionCharacters UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsKanbun' file='xmlunicode'>
+ <info>Check whether the character is part of Kanbun UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsKangxiRadicals' file='xmlunicode'>
+ <info>Check whether the character is part of KangxiRadicals UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsKannada' file='xmlunicode'>
+ <info>Check whether the character is part of Kannada UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsKatakana' file='xmlunicode'>
+ <info>Check whether the character is part of Katakana UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsKatakanaPhoneticExtensions' file='xmlunicode'>
+ <info>Check whether the character is part of KatakanaPhoneticExtensions UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsKhmer' file='xmlunicode'>
+ <info>Check whether the character is part of Khmer UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsKhmerSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of KhmerSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLao' file='xmlunicode'>
+ <info>Check whether the character is part of Lao UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLatin1Supplement' file='xmlunicode'>
+ <info>Check whether the character is part of Latin-1Supplement UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLatinExtendedA' file='xmlunicode'>
+ <info>Check whether the character is part of LatinExtended-A UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLatinExtendedAdditional' file='xmlunicode'>
+ <info>Check whether the character is part of LatinExtendedAdditional UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLatinExtendedB' file='xmlunicode'>
+ <info>Check whether the character is part of LatinExtended-B UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLetterlikeSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of LetterlikeSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLimbu' file='xmlunicode'>
+ <info>Check whether the character is part of Limbu UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLinearBIdeograms' file='xmlunicode'>
+ <info>Check whether the character is part of LinearBIdeograms UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLinearBSyllabary' file='xmlunicode'>
+ <info>Check whether the character is part of LinearBSyllabary UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsLowSurrogates' file='xmlunicode'>
+ <info>Check whether the character is part of LowSurrogates UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMalayalam' file='xmlunicode'>
+ <info>Check whether the character is part of Malayalam UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMathematicalAlphanumericSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of MathematicalAlphanumericSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMathematicalOperators' file='xmlunicode'>
+ <info>Check whether the character is part of MathematicalOperators UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMiscellaneousMathematicalSymbolsA' file='xmlunicode'>
+ <info>Check whether the character is part of MiscellaneousMathematicalSymbols-A UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMiscellaneousMathematicalSymbolsB' file='xmlunicode'>
+ <info>Check whether the character is part of MiscellaneousMathematicalSymbols-B UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMiscellaneousSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of MiscellaneousSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMiscellaneousSymbolsandArrows' file='xmlunicode'>
+ <info>Check whether the character is part of MiscellaneousSymbolsandArrows UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMiscellaneousTechnical' file='xmlunicode'>
+ <info>Check whether the character is part of MiscellaneousTechnical UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMongolian' file='xmlunicode'>
+ <info>Check whether the character is part of Mongolian UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMusicalSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of MusicalSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsMyanmar' file='xmlunicode'>
+ <info>Check whether the character is part of Myanmar UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsNumberForms' file='xmlunicode'>
+ <info>Check whether the character is part of NumberForms UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsOgham' file='xmlunicode'>
+ <info>Check whether the character is part of Ogham UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsOldItalic' file='xmlunicode'>
+ <info>Check whether the character is part of OldItalic UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsOpticalCharacterRecognition' file='xmlunicode'>
+ <info>Check whether the character is part of OpticalCharacterRecognition UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsOriya' file='xmlunicode'>
+ <info>Check whether the character is part of Oriya UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsOsmanya' file='xmlunicode'>
+ <info>Check whether the character is part of Osmanya UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsPhoneticExtensions' file='xmlunicode'>
+ <info>Check whether the character is part of PhoneticExtensions UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsPrivateUse' file='xmlunicode'>
+ <info>Check whether the character is part of PrivateUse UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsPrivateUseArea' file='xmlunicode'>
+ <info>Check whether the character is part of PrivateUseArea UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsRunic' file='xmlunicode'>
+ <info>Check whether the character is part of Runic UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsShavian' file='xmlunicode'>
+ <info>Check whether the character is part of Shavian UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSinhala' file='xmlunicode'>
+ <info>Check whether the character is part of Sinhala UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSmallFormVariants' file='xmlunicode'>
+ <info>Check whether the character is part of SmallFormVariants UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSpacingModifierLetters' file='xmlunicode'>
+ <info>Check whether the character is part of SpacingModifierLetters UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSpecials' file='xmlunicode'>
+ <info>Check whether the character is part of Specials UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSuperscriptsandSubscripts' file='xmlunicode'>
+ <info>Check whether the character is part of SuperscriptsandSubscripts UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSupplementalArrowsA' file='xmlunicode'>
+ <info>Check whether the character is part of SupplementalArrows-A UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSupplementalArrowsB' file='xmlunicode'>
+ <info>Check whether the character is part of SupplementalArrows-B UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSupplementalMathematicalOperators' file='xmlunicode'>
+ <info>Check whether the character is part of SupplementalMathematicalOperators UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSupplementaryPrivateUseAreaA' file='xmlunicode'>
+ <info>Check whether the character is part of SupplementaryPrivateUseArea-A UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSupplementaryPrivateUseAreaB' file='xmlunicode'>
+ <info>Check whether the character is part of SupplementaryPrivateUseArea-B UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsSyriac' file='xmlunicode'>
+ <info>Check whether the character is part of Syriac UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsTagalog' file='xmlunicode'>
+ <info>Check whether the character is part of Tagalog UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsTagbanwa' file='xmlunicode'>
+ <info>Check whether the character is part of Tagbanwa UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsTags' file='xmlunicode'>
+ <info>Check whether the character is part of Tags UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsTaiLe' file='xmlunicode'>
+ <info>Check whether the character is part of TaiLe UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsTaiXuanJingSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of TaiXuanJingSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsTamil' file='xmlunicode'>
+ <info>Check whether the character is part of Tamil UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsTelugu' file='xmlunicode'>
+ <info>Check whether the character is part of Telugu UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsThaana' file='xmlunicode'>
+ <info>Check whether the character is part of Thaana UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsThai' file='xmlunicode'>
+ <info>Check whether the character is part of Thai UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsTibetan' file='xmlunicode'>
+ <info>Check whether the character is part of Tibetan UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsUgaritic' file='xmlunicode'>
+ <info>Check whether the character is part of Ugaritic UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsUnifiedCanadianAboriginalSyllabics' file='xmlunicode'>
+ <info>Check whether the character is part of UnifiedCanadianAboriginalSyllabics UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsVariationSelectors' file='xmlunicode'>
+ <info>Check whether the character is part of VariationSelectors UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsVariationSelectorsSupplement' file='xmlunicode'>
+ <info>Check whether the character is part of VariationSelectorsSupplement UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsYiRadicals' file='xmlunicode'>
+ <info>Check whether the character is part of YiRadicals UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsYiSyllables' file='xmlunicode'>
+ <info>Check whether the character is part of YiSyllables UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlUCSIsYijingHexagramSymbols' file='xmlunicode'>
+ <info>Check whether the character is part of YijingHexagramSymbols UCS Block</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='code' type='int' info='UCS code point'/>
+ </function>
+ <function name='xmlURIEscape' file='uri'>
+ <info>Escaping routine, does not do validity checks ! It will try to escape the chars needing this, but this is heuristic based it&apos;s impossible to be sure.</info>
+ <return type='xmlChar *' info='an copy of the string, but escaped 25 May 2001 Uses xmlParseURI and xmlURIEscapeStr to try to escape correctly according to RFC2396. - Carl Douglas'/>
+ <arg name='str' type='const xmlChar *' info='the string of the URI to escape'/>
+ </function>
+ <function name='xmlURIEscapeStr' file='uri'>
+ <info>This routine escapes a string to hex, ignoring reserved characters (a-z) and the characters in the exception list.</info>
+ <return type='xmlChar *' info='a new escaped string or NULL in case of error.'/>
+ <arg name='str' type='const xmlChar *' info='string to escape'/>
+ <arg name='list' type='const xmlChar *' info='exception list string of chars not to escape'/>
+ </function>
+ <function name='xmlURIUnescapeString' file='uri'>
+ <info>Unescaping routine, does not do validity checks ! Output is direct unsigned char translation of %XX values (no encoding)</info>
+ <return type='char *' info='an copy of the string, but unescaped'/>
+ <arg name='str' type='const char *' info='the string to unescape'/>
+ <arg name='len' type='int' info='the length in bytes to unescape (or &lt;= 0 to indicate full string)'/>
+ <arg name='target' type='char *' info='optional destination buffer'/>
+ </function>
+ <function name='xmlUTF8Charcmp' file='xmlstring'>
+ <info>compares the two UCS4 values</info>
+ <return type='int' info='result of the compare as with xmlStrncmp'/>
+ <arg name='utf1' type='const xmlChar *' info='pointer to first UTF8 char'/>
+ <arg name='utf2' type='const xmlChar *' info='pointer to second UTF8 char'/>
+ </function>
+ <function name='xmlUTF8Size' file='xmlstring'>
+ <info>calculates the internal size of a UTF8 character</info>
+ <return type='int' info='the numbers of bytes in the character, -1 on format error'/>
+ <arg name='utf' type='const xmlChar *' info='pointer to the UTF8 character'/>
+ </function>
+ <function name='xmlUTF8Strlen' file='xmlstring'>
+ <info>compute the length of an UTF8 string, it doesn&apos;t do a full UTF8 checking of the content of the string.</info>
+ <return type='int' info='the number of characters in the string or -1 in case of error'/>
+ <arg name='utf' type='const xmlChar *' info='a sequence of UTF-8 encoded bytes'/>
+ </function>
+ <function name='xmlUTF8Strloc' file='xmlstring'>
+ <info>a function to provide the relative location of a UTF8 char</info>
+ <return type='int' info='the relative character position of the desired char or -1 if not found'/>
+ <arg name='utf' type='const xmlChar *' info='the input UTF8 *'/>
+ <arg name='utfchar' type='const xmlChar *' info='the UTF8 character to be found'/>
+ </function>
+ <function name='xmlUTF8Strndup' file='xmlstring'>
+ <info>a strndup for array of UTF8&apos;s</info>
+ <return type='xmlChar *' info='a new UTF8 * or NULL'/>
+ <arg name='utf' type='const xmlChar *' info='the input UTF8 *'/>
+ <arg name='len' type='int' info='the len of @utf (in chars)'/>
+ </function>
+ <function name='xmlUTF8Strpos' file='xmlstring'>
+ <info>a function to provide the equivalent of fetching a character from a string array</info>
+ <return type='xmlChar *' info='a pointer to the UTF8 character or NULL'/>
+ <arg name='utf' type='const xmlChar *' info='the input UTF8 *'/>
+ <arg name='pos' type='int' info='the position of the desired UTF8 char (in chars)'/>
+ </function>
+ <function name='xmlUTF8Strsize' file='xmlstring'>
+ <info>storage size of an UTF8 string</info>
+ <return type='int' info='the storage size of the first &apos;len&apos; characters of ARRAY'/>
+ <arg name='utf' type='const xmlChar *' info='a sequence of UTF-8 encoded bytes'/>
+ <arg name='len' type='int' info='the number of characters in the array'/>
+ </function>
+ <function name='xmlUTF8Strsub' file='xmlstring'>
+ <info>Create a substring from a given UTF-8 string Note: positions are given in units of UTF-8 chars</info>
+ <return type='xmlChar *' info='a pointer to a newly created string or NULL if any problem'/>
+ <arg name='utf' type='const xmlChar *' info='a sequence of UTF-8 encoded bytes'/>
+ <arg name='start' type='int' info='relative pos of first char'/>
+ <arg name='len' type='int' info='total number to copy'/>
+ </function>
+ <function name='xmlUnlinkNode' file='tree'>
+ <info>Unlink a node from it&apos;s current context, the node is not freed</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodePtr' info='the node'/>
+ </function>
+ <function name='xmlUnlockLibrary' file='threads'>
+ <info>xmlUnlockLibrary() is used to release a re-entrant lock on the libxml2 library.</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlUnsetNsProp' file='tree'>
+ <info>Remove an attribute carried by a node.</info>
+ <return type='int' info='0 if successful, -1 if not found'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='ns' type='xmlNsPtr' info='the namespace definition'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ </function>
+ <function name='xmlUnsetProp' file='tree'>
+ <info>Remove an attribute carried by a node.</info>
+ <return type='int' info='0 if successful, -1 if not found'/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ </function>
+ <function name='xmlValidBuildContentModel' file='valid'>
+ <info>(Re)Build the automata associated to the content model of this element</info>
+ <return type='int' info='1 in case of success, 0 in case of error'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='a validation context'/>
+ <arg name='elem' type='xmlElementPtr' info='an element declaration node'/>
+ </function>
+ <function name='xmlValidCtxtNormalizeAttributeValue' file='valid'>
+ <info>Does the validation related extra step of the normalization of attribute values: If the declared value is not CDATA, then the XML processor must further process the normalized attribute value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) characters by single space (#x20) character. Also check VC: Standalone Document Declaration in P32, and update ctxt-&gt;valid accordingly</info>
+ <return type='xmlChar *' info='a new normalized string if normalization is needed, NULL otherwise the caller must free the returned value.'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context or NULL'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='elem' type='xmlNodePtr' info='the parent'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ <arg name='value' type='const xmlChar *' info='the attribute value'/>
+ </function>
+ <function name='xmlValidGetPotentialChildren' file='valid'>
+ <info>Build/extend a list of potential children allowed by the content tree</info>
+ <return type='int' info='the number of element in the list, or -1 in case of error.'/>
+ <arg name='ctree' type='xmlElementContent *' info='an element content tree'/>
+ <arg name='list' type='const xmlChar **' info='an array to store the list of child names'/>
+ <arg name='len' type='int *' info='a pointer to the number of element in the list'/>
+ <arg name='max' type='int' info='the size of the array'/>
+ </function>
+ <function name='xmlValidGetValidElements' file='valid'>
+ <info>This function returns the list of authorized children to insert within an existing tree while respecting the validity constraints forced by the Dtd. The insertion point is defined using @prev and @next in the following ways: to insert before &apos;node&apos;: xmlValidGetValidElements(node-&gt;prev, node, ... to insert next &apos;node&apos;: xmlValidGetValidElements(node, node-&gt;next, ... to replace &apos;node&apos;: xmlValidGetValidElements(node-&gt;prev, node-&gt;next, ... to prepend a child to &apos;node&apos;: xmlValidGetValidElements(NULL, node-&gt;childs, to append a child to &apos;node&apos;: xmlValidGetValidElements(node-&gt;last, NULL, ... pointers to the element names are inserted at the beginning of the array and do not need to be freed.</info>
+ <return type='int' info='the number of element in the list, or -1 in case of error. If the function returns the value @max the caller is invited to grow the receiving array and retry.'/>
+ <arg name='prev' type='xmlNode *' info='an element to insert after'/>
+ <arg name='next' type='xmlNode *' info='an element to insert next'/>
+ <arg name='list' type='const xmlChar **' info='an array to store the list of child names'/>
+ <arg name='max' type='int' info='the size of the array'/>
+ </function>
+ <function name='xmlValidNormalizeAttributeValue' file='valid'>
+ <info>Does the validation related extra step of the normalization of attribute values: If the declared value is not CDATA, then the XML processor must further process the normalized attribute value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) characters by single space (#x20) character.</info>
+ <return type='xmlChar *' info='a new normalized string if normalization is needed, NULL otherwise the caller must free the returned value.'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='elem' type='xmlNodePtr' info='the parent'/>
+ <arg name='name' type='const xmlChar *' info='the attribute name'/>
+ <arg name='value' type='const xmlChar *' info='the attribute value'/>
+ </function>
+ <function name='xmlValidateAttributeDecl' file='valid'>
+ <info>Try to validate a single attribute definition basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Default Legal ] - [ VC: Enumeration ] - [ VC: ID Attribute Default ] The ID/IDREF uniqueness and matching are done separately</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='attr' type='xmlAttributePtr' info='an attribute definition'/>
+ </function>
+ <function name='xmlValidateAttributeValue' file='valid'>
+ <info>Validate that the given attribute value match the proper production [ VC: ID ] Values of type ID must match the Name production.... [ VC: IDREF ] Values of type IDREF must match the Name production, and values of type IDREFS must match Names ... [ VC: Entity Name ] Values of type ENTITY must match the Name production, values of type ENTITIES must match Names ... [ VC: Name Token ] Values of type NMTOKEN must match the Nmtoken production; values of type NMTOKENS must match Nmtokens.</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='type' type='xmlAttributeType' info='an attribute type'/>
+ <arg name='value' type='const xmlChar *' info='an attribute value'/>
+ </function>
+ <function name='xmlValidateDocument' file='valid'>
+ <info>Try to validate the document instance basically it does the all the checks described by the XML Rec i.e. validates the internal and external subset (if present) and validate the document tree.</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ </function>
+ <function name='xmlValidateDocumentFinal' file='valid'>
+ <info>Does the final step for the document validation once all the incremental validation steps have been completed basically it does the following checks described by the XML Rec Check all the IDREF/IDREFS attributes definition for validity</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ </function>
+ <function name='xmlValidateDtd' file='valid'>
+ <info>Try to validate the document against the dtd instance basically it does check all the definitions in the DtD.</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='dtd' type='xmlDtdPtr' info='a dtd instance'/>
+ </function>
+ <function name='xmlValidateDtdFinal' file='valid'>
+ <info>Does the final step for the dtds validation once all the subsets have been parsed basically it does the following checks described by the XML Rec - check that ENTITY and ENTITIES type attributes default or possible values matches one of the defined entities. - check that NOTATION type attributes default or possible values matches one of the defined notations.</info>
+ <return type='int' info='1 if valid or 0 if invalid and -1 if not well-formed'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ </function>
+ <function name='xmlValidateElement' file='valid'>
+ <info>Try to validate the subtree under an element</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlNodePtr' info='an element instance'/>
+ </function>
+ <function name='xmlValidateElementDecl' file='valid'>
+ <info>Try to validate a single element definition basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: One ID per Element Type ] - [ VC: No Duplicate Types ] - [ VC: Unique Element Type Declaration ]</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlElementPtr' info='an element definition'/>
+ </function>
+ <function name='xmlValidateNCName' file='tree'>
+ <info>Check that a value conforms to the lexical space of NCName</info>
+ <return type='int' info='0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='value' type='const xmlChar *' info='the value to check'/>
+ <arg name='space' type='int' info='allow spaces in front and end of the string'/>
+ </function>
+ <function name='xmlValidateNMToken' file='tree'>
+ <info>Check that a value conforms to the lexical space of NMToken</info>
+ <return type='int' info='0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='value' type='const xmlChar *' info='the value to check'/>
+ <arg name='space' type='int' info='allow spaces in front and end of the string'/>
+ </function>
+ <function name='xmlValidateName' file='tree'>
+ <info>Check that a value conforms to the lexical space of Name</info>
+ <return type='int' info='0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='value' type='const xmlChar *' info='the value to check'/>
+ <arg name='space' type='int' info='allow spaces in front and end of the string'/>
+ </function>
+ <function name='xmlValidateNameValue' file='valid'>
+ <info>Validate that the given value match Name production</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='value' type='const xmlChar *' info='an Name value'/>
+ </function>
+ <function name='xmlValidateNamesValue' file='valid'>
+ <info>Validate that the given value match Names production</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='value' type='const xmlChar *' info='an Names value'/>
+ </function>
+ <function name='xmlValidateNmtokenValue' file='valid'>
+ <info>Validate that the given value match Nmtoken production [ VC: Name Token ]</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='value' type='const xmlChar *' info='an Nmtoken value'/>
+ </function>
+ <function name='xmlValidateNmtokensValue' file='valid'>
+ <info>Validate that the given value match Nmtokens production [ VC: Name Token ]</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='value' type='const xmlChar *' info='an Nmtokens value'/>
+ </function>
+ <function name='xmlValidateNotationDecl' file='valid'>
+ <info>Try to validate a single notation definition basically it does the following checks as described by the XML-1.0 recommendation: - it seems that no validity constraint exists on notation declarations But this function get called anyway ...</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='nota' type='xmlNotationPtr' info='a notation definition'/>
+ </function>
+ <function name='xmlValidateNotationUse' file='valid'>
+ <info>Validate that the given name match a notation declaration. - [ VC: Notation Declared ]</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='the document'/>
+ <arg name='notationName' type='const xmlChar *' info='the notation name to check'/>
+ </function>
+ <function name='xmlValidateOneAttribute' file='valid'>
+ <info>Try to validate a single attribute for an element basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Value Type ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity Name ] - [ VC: Notation Attributes ] The ID/IDREF uniqueness and matching are done separately</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlNodePtr' info='an element instance'/>
+ <arg name='attr' type='xmlAttrPtr' info='an attribute instance'/>
+ <arg name='value' type='const xmlChar *' info='the attribute value (without entities processing)'/>
+ </function>
+ <function name='xmlValidateOneElement' file='valid'>
+ <info>Try to validate a single element and it&apos;s attributes, basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Element Valid ] - [ VC: Required Attribute ] Then call xmlValidateOneAttribute() for each attribute present. The ID/IDREF checkings are done separately</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlNodePtr' info='an element instance'/>
+ </function>
+ <function name='xmlValidateOneNamespace' file='valid'>
+ <info>Try to validate a single namespace declaration for an element basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Value Type ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity Name ] - [ VC: Notation Attributes ] The ID/IDREF uniqueness and matching are done separately</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlNodePtr' info='an element instance'/>
+ <arg name='prefix' type='const xmlChar *' info='the namespace prefix'/>
+ <arg name='ns' type='xmlNsPtr' info='an namespace declaration instance'/>
+ <arg name='value' type='const xmlChar *' info='the attribute value (without entities processing)'/>
+ </function>
+ <function name='xmlValidatePopElement' file='valid'>
+ <info>Pop the element end from the validation stack.</info>
+ <return type='int' info='1 if no validation problem was found or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlNodePtr' info='an element instance'/>
+ <arg name='qname' type='const xmlChar *' info='the qualified name as appearing in the serialization'/>
+ </function>
+ <function name='xmlValidatePushCData' file='valid'>
+ <info>check the CData parsed for validation in the current stack</info>
+ <return type='int' info='1 if no validation problem was found or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='data' type='const xmlChar *' info='some character data read'/>
+ <arg name='len' type='int' info='the lenght of the data'/>
+ </function>
+ <function name='xmlValidatePushElement' file='valid'>
+ <info>Push a new element start on the validation stack.</info>
+ <return type='int' info='1 if no validation problem was found or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ <arg name='elem' type='xmlNodePtr' info='an element instance'/>
+ <arg name='qname' type='const xmlChar *' info='the qualified name as appearing in the serialization'/>
+ </function>
+ <function name='xmlValidateQName' file='tree'>
+ <info>Check that a value conforms to the lexical space of QName</info>
+ <return type='int' info='0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.'/>
+ <arg name='value' type='const xmlChar *' info='the value to check'/>
+ <arg name='space' type='int' info='allow spaces in front and end of the string'/>
+ </function>
+ <function name='xmlValidateRoot' file='valid'>
+ <info>Try to validate a the root element basically it does the following check as described by the XML-1.0 recommendation: - [ VC: Root Element Type ] it doesn&apos;t try to recurse or apply other check to the element</info>
+ <return type='int' info='1 if valid or 0 otherwise'/>
+ <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
+ <arg name='doc' type='xmlDocPtr' info='a document instance'/>
+ </function>
+ <functype name='xmlValidityErrorFunc' file='valid'>
+ <info>Callback called when a validity error is found. This is a message oriented function similar to an *printf function.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an xmlValidCtxtPtr validity error context'/>
+ <arg name='msg' type='const char *' info='the string to format *printf like vararg'/>
+ <arg name='...' type='...' info='remaining arguments to the format'/>
+ </functype>
+ <functype name='xmlValidityWarningFunc' file='valid'>
+ <info>Callback called when a validity warning is found. This is a message oriented function similar to an *printf function.</info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info='an xmlValidCtxtPtr validity error context'/>
+ <arg name='msg' type='const char *' info='the string to format *printf like vararg'/>
+ <arg name='...' type='...' info='remaining arguments to the format'/>
+ </functype>
+ <function name='xmlXIncludeFreeContext' file='xinclude'>
+ <info>Free an XInclude context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXIncludeCtxtPtr' info='the XInclude context'/>
+ </function>
+ <function name='xmlXIncludeNewContext' file='xinclude'>
+ <info>Creates a new XInclude context</info>
+ <return type='xmlXIncludeCtxtPtr' info='the new set'/>
+ <arg name='doc' type='xmlDocPtr' info='an XML Document'/>
+ </function>
+ <function name='xmlXIncludeProcess' file='xinclude'>
+ <info>Implement the XInclude substitution on the XML document @doc</info>
+ <return type='int' info='0 if no substitution were done, -1 if some processing failed or the number of substitutions done.'/>
+ <arg name='doc' type='xmlDocPtr' info='an XML document'/>
+ </function>
+ <function name='xmlXIncludeProcessFlags' file='xinclude'>
+ <info>Implement the XInclude substitution on the XML document @doc</info>
+ <return type='int' info='0 if no substitution were done, -1 if some processing failed or the number of substitutions done.'/>
+ <arg name='doc' type='xmlDocPtr' info='an XML document'/>
+ <arg name='flags' type='int' info='a set of xmlParserOption used for parsing XML includes'/>
+ </function>
+ <function name='xmlXIncludeProcessNode' file='xinclude'>
+ <info>Implement the XInclude substitution for the given subtree reusing the informations and data coming from the given context.</info>
+ <return type='int' info='0 if no substitution were done, -1 if some processing failed or the number of substitutions done.'/>
+ <arg name='ctxt' type='xmlXIncludeCtxtPtr' info='an existing XInclude context'/>
+ <arg name='node' type='xmlNodePtr' info='a node in an XML document'/>
+ </function>
+ <function name='xmlXIncludeProcessTree' file='xinclude'>
+ <info>Implement the XInclude substitution for the given subtree</info>
+ <return type='int' info='0 if no substitution were done, -1 if some processing failed or the number of substitutions done.'/>
+ <arg name='tree' type='xmlNodePtr' info='a node in an XML document'/>
+ </function>
+ <function name='xmlXIncludeProcessTreeFlags' file='xinclude'>
+ <info>Implement the XInclude substitution for the given subtree</info>
+ <return type='int' info='0 if no substitution were done, -1 if some processing failed or the number of substitutions done.'/>
+ <arg name='tree' type='xmlNodePtr' info='a node in an XML document'/>
+ <arg name='flags' type='int' info='a set of xmlParserOption used for parsing XML includes'/>
+ </function>
+ <function name='xmlXIncludeSetFlags' file='xinclude'>
+ <info>Set the flags used for further processing of XML resources.</info>
+ <return type='int' info='0 in case of success and -1 in case of error.'/>
+ <arg name='ctxt' type='xmlXIncludeCtxtPtr' info='an XInclude processing context'/>
+ <arg name='flags' type='int' info='a set of xmlParserOption used for parsing XML includes'/>
+ </function>
+ <function name='xmlXPathAddValues' file='xpathInternals'>
+ <info>Implement the add operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <functype name='xmlXPathAxisFunc' file='xpath'>
+ <info>An axis traversal function. To traverse an axis, the engine calls the first time with cur == NULL and repeat until the function returns NULL indicating the end of the axis traversal.</info>
+ <return type='xmlXPathObjectPtr' info='the next node in that axis or NULL if at the end of the axis.'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath interpreter context'/>
+ <arg name='cur' type='xmlXPathObjectPtr' info='the previous node being explored on that axis'/>
+ </functype>
+ <function name='xmlXPathBooleanFunction' file='xpathInternals'>
+ <info>Implement the boolean() XPath function boolean boolean(object) The boolean function converts its argument to a boolean as follows: - a number is true if and only if it is neither positive or negative zero nor NaN - a node-set is true if and only if it is non-empty - a string is true if and only if its length is non-zero</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathCastBooleanToNumber' file='xpath'>
+ <info>Converts a boolean to its number value</info>
+ <return type='double' info='the number value'/>
+ <arg name='val' type='int' info='a boolean'/>
+ </function>
+ <function name='xmlXPathCastBooleanToString' file='xpath'>
+ <info>Converts a boolean to its string value.</info>
+ <return type='xmlChar *' info='a newly allocated string.'/>
+ <arg name='val' type='int' info='a boolean'/>
+ </function>
+ <function name='xmlXPathCastNodeSetToBoolean' file='xpath'>
+ <info>Converts a node-set to its boolean value</info>
+ <return type='int' info='the boolean value'/>
+ <arg name='ns' type='xmlNodeSetPtr' info='a node-set'/>
+ </function>
+ <function name='xmlXPathCastNodeSetToNumber' file='xpath'>
+ <info>Converts a node-set to its number value</info>
+ <return type='double' info='the number value'/>
+ <arg name='ns' type='xmlNodeSetPtr' info='a node-set'/>
+ </function>
+ <function name='xmlXPathCastNodeSetToString' file='xpath'>
+ <info>Converts a node-set to its string value.</info>
+ <return type='xmlChar *' info='a newly allocated string.'/>
+ <arg name='ns' type='xmlNodeSetPtr' info='a node-set'/>
+ </function>
+ <function name='xmlXPathCastNodeToNumber' file='xpath'>
+ <info>Converts a node to its number value</info>
+ <return type='double' info='the number value'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ </function>
+ <function name='xmlXPathCastNodeToString' file='xpath'>
+ <info>Converts a node to its string value.</info>
+ <return type='xmlChar *' info='a newly allocated string.'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ </function>
+ <function name='xmlXPathCastNumberToBoolean' file='xpath'>
+ <info>Converts a number to its boolean value</info>
+ <return type='int' info='the boolean value'/>
+ <arg name='val' type='double' info='a number'/>
+ </function>
+ <function name='xmlXPathCastNumberToString' file='xpath'>
+ <info>Converts a number to its string value.</info>
+ <return type='xmlChar *' info='a newly allocated string.'/>
+ <arg name='val' type='double' info='a number'/>
+ </function>
+ <function name='xmlXPathCastStringToBoolean' file='xpath'>
+ <info>Converts a string to its boolean value</info>
+ <return type='int' info='the boolean value'/>
+ <arg name='val' type='const xmlChar *' info='a string'/>
+ </function>
+ <function name='xmlXPathCastStringToNumber' file='xpath'>
+ <info>Converts a string to its number value</info>
+ <return type='double' info='the number value'/>
+ <arg name='val' type='const xmlChar *' info='a string'/>
+ </function>
+ <function name='xmlXPathCastToBoolean' file='xpath'>
+ <info>Converts an XPath object to its boolean value</info>
+ <return type='int' info='the boolean value'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='an XPath object'/>
+ </function>
+ <function name='xmlXPathCastToNumber' file='xpath'>
+ <info>Converts an XPath object to its number value</info>
+ <return type='double' info='the number value'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='an XPath object'/>
+ </function>
+ <function name='xmlXPathCastToString' file='xpath'>
+ <info>Converts an existing object to its string() equivalent</info>
+ <return type='xmlChar *' info='the string value of the object, NULL in case of error. A new string is allocated only if needed (@val isn&apos;t a string object).'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='an XPath object'/>
+ </function>
+ <function name='xmlXPathCeilingFunction' file='xpathInternals'>
+ <info>Implement the ceiling() XPath function number ceiling(number) The ceiling function returns the smallest (closest to negative infinity) number that is not less than the argument and that is an integer.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathCmpNodes' file='xpath'>
+ <info>Compare two nodes w.r.t document order</info>
+ <return type='int' info='-2 in case of error 1 if first point &lt; second point, 0 if it&apos;s the same node, -1 otherwise'/>
+ <arg name='node1' type='xmlNodePtr' info='the first node'/>
+ <arg name='node2' type='xmlNodePtr' info='the second node'/>
+ </function>
+ <function name='xmlXPathCompareValues' file='xpathInternals'>
+ <info>Implement the compare operation on XPath objects: @arg1 &lt; @arg2 (1, 1, ... @arg1 &lt;= @arg2 (1, 0, ... @arg1 &gt; @arg2 (0, 1, ... @arg1 &gt;= @arg2 (0, 0, ... When neither object to be compared is a node-set and the operator is &lt;=, &lt;, &gt;=, &gt;, then the objects are compared by converted both objects to numbers and comparing the numbers according to IEEE 754. The &lt; comparison will be true if and only if the first number is less than the second number. The &lt;= comparison will be true if and only if the first number is less than or equal to the second number. The &gt; comparison will be true if and only if the first number is greater than the second number. The &gt;= comparison will be true if and only if the first number is greater than or equal to the second number.</info>
+ <return type='int' info='1 if the comparison succeeded, 0 if it failed'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='inf' type='int' info='less than (1) or greater than (0)'/>
+ <arg name='strict' type='int' info='is the comparison strict'/>
+ </function>
+ <function name='xmlXPathCompile' file='xpath'>
+ <info>Compile an XPath expression</info>
+ <return type='xmlXPathCompExprPtr' info='the xmlXPathCompExprPtr resulting from the compilation or NULL. the caller has to free the object.'/>
+ <arg name='str' type='const xmlChar *' info='the XPath expression'/>
+ </function>
+ <function name='xmlXPathCompiledEval' file='xpath'>
+ <info>Evaluate the Precompiled XPath expression in the given context.</info>
+ <return type='xmlXPathObjectPtr' info='the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.'/>
+ <arg name='comp' type='xmlXPathCompExprPtr' info='the compiled XPath expression'/>
+ <arg name='ctx' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathConcatFunction' file='xpathInternals'>
+ <info>Implement the concat() XPath function string concat(string, string, string*) The concat function returns the concatenation of its arguments.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathContainsFunction' file='xpathInternals'>
+ <info>Implement the contains() XPath function boolean contains(string, string) The contains function returns true if the first argument string contains the second argument string, and otherwise returns false.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathConvertBoolean' file='xpath'>
+ <info>Converts an existing object to its boolean() equivalent</info>
+ <return type='xmlXPathObjectPtr' info='the new object, the old one is freed (or the operation is done directly on @val)'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='an XPath object'/>
+ </function>
+ <functype name='xmlXPathConvertFunc' file='xpath'>
+ <info>A conversion function is associated to a type and used to cast the new type to primitive values.</info>
+ <return type='int' info='-1 in case of error, 0 otherwise'/>
+ <arg name='obj' type='xmlXPathObjectPtr' info='an XPath object'/>
+ <arg name='type' type='int' info='the number of the target type'/>
+ </functype>
+ <function name='xmlXPathConvertNumber' file='xpath'>
+ <info>Converts an existing object to its number() equivalent</info>
+ <return type='xmlXPathObjectPtr' info='the new object, the old one is freed (or the operation is done directly on @val)'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='an XPath object'/>
+ </function>
+ <function name='xmlXPathConvertString' file='xpath'>
+ <info>Converts an existing object to its string() equivalent</info>
+ <return type='xmlXPathObjectPtr' info='the new object, the old one is freed (or the operation is done directly on @val)'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='an XPath object'/>
+ </function>
+ <function name='xmlXPathCountFunction' file='xpathInternals'>
+ <info>Implement the count() XPath function number count(node-set)</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathCtxtCompile' file='xpath'>
+ <info>Compile an XPath expression</info>
+ <return type='xmlXPathCompExprPtr' info='the xmlXPathCompExprPtr resulting from the compilation or NULL. the caller has to free the object.'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='an XPath context'/>
+ <arg name='str' type='const xmlChar *' info='the XPath expression'/>
+ </function>
+ <function name='xmlXPathDebugDumpCompExpr' file='xpathInternals'>
+ <info>Dumps the tree of the compiled XPath expression.</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * for the output'/>
+ <arg name='comp' type='xmlXPathCompExprPtr' info='the precompiled XPath expression'/>
+ <arg name='depth' type='int' info='the indentation level.'/>
+ </function>
+ <function name='xmlXPathDebugDumpObject' file='xpathInternals'>
+ <info>Dump the content of the object for debugging purposes</info>
+ <return type='void'/>
+ <arg name='output' type='FILE *' info='the FILE * to dump the output'/>
+ <arg name='cur' type='xmlXPathObjectPtr' info='the object to inspect'/>
+ <arg name='depth' type='int' info='indentation level'/>
+ </function>
+ <function name='xmlXPathDifference' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets difference() function: node-set set:difference (node-set, node-set)</info>
+ <return type='xmlNodeSetPtr' info='the difference between the two node sets, or nodes1 if nodes2 is empty'/>
+ <arg name='nodes1' type='xmlNodeSetPtr' info='a node-set'/>
+ <arg name='nodes2' type='xmlNodeSetPtr' info='a node-set'/>
+ </function>
+ <function name='xmlXPathDistinct' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets distinct() function: node-set set:distinct (node-set) @nodes is sorted by document order, then #exslSetsDistinctSorted is called with the sorted node-set</info>
+ <return type='xmlNodeSetPtr' info='a subset of the nodes contained in @nodes, or @nodes if it is empty'/>
+ <arg name='nodes' type='xmlNodeSetPtr' info='a node-set'/>
+ </function>
+ <function name='xmlXPathDistinctSorted' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets distinct() function: node-set set:distinct (node-set)</info>
+ <return type='xmlNodeSetPtr' info='a subset of the nodes contained in @nodes, or @nodes if it is empty'/>
+ <arg name='nodes' type='xmlNodeSetPtr' info='a node-set, sorted by document order'/>
+ </function>
+ <function name='xmlXPathDivValues' file='xpathInternals'>
+ <info>Implement the div operation on XPath objects @arg1 / @arg2: The numeric operators convert their operands to numbers as if by calling the number function.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathEqualValues' file='xpathInternals'>
+ <info>Implement the equal operation on XPath objects content: @arg1 == @arg2</info>
+ <return type='int' info='0 or 1 depending on the results of the test.'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathErr' file='xpathInternals'>
+ <info>Handle a Relax NG Parsing error</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='a XPath parser context'/>
+ <arg name='error' type='int' info='the error code'/>
+ </function>
+ <function name='xmlXPathEval' file='xpath'>
+ <info>Evaluate the XPath Location Path in the given context.</info>
+ <return type='xmlXPathObjectPtr' info='the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.'/>
+ <arg name='str' type='const xmlChar *' info='the XPath expression'/>
+ <arg name='ctx' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathEvalExpr' file='xpathInternals'>
+ <info>Parse and evaluate an XPath expression in the given context, then push the result on the context stack</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathEvalExpression' file='xpath'>
+ <info>Evaluate the XPath expression in the given context.</info>
+ <return type='xmlXPathObjectPtr' info='the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.'/>
+ <arg name='str' type='const xmlChar *' info='the XPath expression'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <functype name='xmlXPathEvalFunc' file='xpath'>
+ <info>An XPath evaluation function, the parameters are on the XPath context stack.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='an XPath parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments passed to the function'/>
+ </functype>
+ <function name='xmlXPathEvalPredicate' file='xpath'>
+ <info>Evaluate a predicate result for the current node. A PredicateExpr is evaluated by evaluating the Expr and converting the result to a boolean. If the result is a number, the result will be converted to true if the number is equal to the position of the context node in the context node list (as returned by the position function) and will be converted to false otherwise; if the result is not a number, then the result will be converted as if by a call to the boolean function.</info>
+ <return type='int' info='1 if predicate is true, 0 otherwise'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='res' type='xmlXPathObjectPtr' info='the Predicate Expression evaluation result'/>
+ </function>
+ <function name='xmlXPathEvaluatePredicateResult' file='xpathInternals'>
+ <info>Evaluate a predicate result for the current node. A PredicateExpr is evaluated by evaluating the Expr and converting the result to a boolean. If the result is a number, the result will be converted to true if the number is equal to the position of the context node in the context node list (as returned by the position function) and will be converted to false otherwise; if the result is not a number, then the result will be converted as if by a call to the boolean function.</info>
+ <return type='int' info='1 if predicate is true, 0 otherwise'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='res' type='xmlXPathObjectPtr' info='the Predicate Expression evaluation result'/>
+ </function>
+ <function name='xmlXPathFalseFunction' file='xpathInternals'>
+ <info>Implement the false() XPath function boolean false()</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathFloorFunction' file='xpathInternals'>
+ <info>Implement the floor() XPath function number floor(number) The floor function returns the largest (closest to positive infinity) number that is not greater than the argument and that is an integer.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathFreeCompExpr' file='xpath'>
+ <info>Free up the memory allocated by @comp</info>
+ <return type='void'/>
+ <arg name='comp' type='xmlXPathCompExprPtr' info='an XPATH comp'/>
+ </function>
+ <function name='xmlXPathFreeContext' file='xpath'>
+ <info>Free up an xmlXPathContext</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the context to free'/>
+ </function>
+ <function name='xmlXPathFreeNodeSet' file='xpath'>
+ <info>Free the NodeSet compound (not the actual nodes !).</info>
+ <return type='void'/>
+ <arg name='obj' type='xmlNodeSetPtr' info='the xmlNodeSetPtr to free'/>
+ </function>
+ <function name='xmlXPathFreeNodeSetList' file='xpath'>
+ <info>Free up the xmlXPathObjectPtr @obj but don&apos;t deallocate the objects in the list contrary to xmlXPathFreeObject().</info>
+ <return type='void'/>
+ <arg name='obj' type='xmlXPathObjectPtr' info='an existing NodeSetList object'/>
+ </function>
+ <function name='xmlXPathFreeObject' file='xpath'>
+ <info>Free up an xmlXPathObjectPtr object.</info>
+ <return type='void'/>
+ <arg name='obj' type='xmlXPathObjectPtr' info='the object to free'/>
+ </function>
+ <function name='xmlXPathFreeParserContext' file='xpathInternals'>
+ <info>Free up an xmlXPathParserContext</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the context to free'/>
+ </function>
+ <functype name='xmlXPathFuncLookupFunc' file='xpathInternals'>
+ <info>Prototype for callbacks used to plug function lookup in the XPath engine.</info>
+ <return type='xmlXPathFunction' info='the XPath function or NULL if not found.'/>
+ <arg name='ctxt' type='void *' info='an XPath context'/>
+ <arg name='name' type='const xmlChar *' info='name of the function'/>
+ <arg name='ns_uri' type='const xmlChar *' info='the namespace name hosting this function'/>
+ </functype>
+ <functype name='xmlXPathFunction' file='xpath'>
+ <info>An XPath function. The arguments (if any) are popped out from the context stack and the result is pushed on the stack.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath interprestation context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </functype>
+ <function name='xmlXPathFunctionLookup' file='xpathInternals'>
+ <info>Search in the Function array of the context for the given function.</info>
+ <return type='xmlXPathFunction' info='the xmlXPathFunction or NULL if not found'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='name' type='const xmlChar *' info='the function name'/>
+ </function>
+ <function name='xmlXPathFunctionLookupNS' file='xpathInternals'>
+ <info>Search in the Function array of the context for the given function.</info>
+ <return type='xmlXPathFunction' info='the xmlXPathFunction or NULL if not found'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='name' type='const xmlChar *' info='the function name'/>
+ <arg name='ns_uri' type='const xmlChar *' info='the function namespace URI'/>
+ </function>
+ <function name='xmlXPathHasSameNodes' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets has-same-nodes function: boolean set:has-same-node(node-set, node-set)</info>
+ <return type='int' info='true (1) if @nodes1 shares any node with @nodes2, false (0) otherwise'/>
+ <arg name='nodes1' type='xmlNodeSetPtr' info='a node-set'/>
+ <arg name='nodes2' type='xmlNodeSetPtr' info='a node-set'/>
+ </function>
+ <function name='xmlXPathIdFunction' file='xpathInternals'>
+ <info>Implement the id() XPath function node-set id(object) The id function selects elements by their unique ID (see [5.2.1 Unique IDs]). When the argument to id is of type node-set, then the result is the union of the result of applying id to the string value of each of the nodes in the argument node-set. When the argument to id is of any other type, the argument is converted to a string as if by a call to the string function; the string is split into a whitespace-separated list of tokens (whitespace is any sequence of characters matching the production S); the result is a node-set containing the elements in the same document as the context node that have a unique ID equal to any of the tokens in the list.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathInit' file='xpath'>
+ <info>Initialize the XPath environment</info>
+ <return type='void'/>
+ </function>
+ <function name='xmlXPathIntersection' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets intersection() function: node-set set:intersection (node-set, node-set)</info>
+ <return type='xmlNodeSetPtr' info='a node set comprising the nodes that are within both the node sets passed as arguments'/>
+ <arg name='nodes1' type='xmlNodeSetPtr' info='a node-set'/>
+ <arg name='nodes2' type='xmlNodeSetPtr' info='a node-set'/>
+ </function>
+ <function name='xmlXPathIsInf' file='xpath'>
+ <info>Provides a portable isinf() function to detect whether a double is a +Infinite or -Infinite. Based on trio code http://sourceforge.net/projects/ctrio/</info>
+ <return type='int' info='1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise'/>
+ <arg name='val' type='double' info='a double value'/>
+ </function>
+ <function name='xmlXPathIsNaN' file='xpath'>
+ <info>Provides a portable isnan() function to detect whether a double is a NotaNumber. Based on trio code http://sourceforge.net/projects/ctrio/</info>
+ <return type='int' info='1 if the value is a NaN, 0 otherwise'/>
+ <arg name='val' type='double' info='a double value'/>
+ </function>
+ <function name='xmlXPathIsNodeType' file='xpathInternals'>
+ <info>Is the name given a NodeType one. [38] NodeType ::= &apos;comment&apos; | &apos;text&apos; | &apos;processing-instruction&apos; | &apos;node&apos;</info>
+ <return type='int' info='1 if true 0 otherwise'/>
+ <arg name='name' type='const xmlChar *' info='a name string'/>
+ </function>
+ <function name='xmlXPathLangFunction' file='xpathInternals'>
+ <info>Implement the lang() XPath function boolean lang(string) The lang function returns true or false depending on whether the language of the context node as specified by xml:lang attributes is the same as or is a sublanguage of the language specified by the argument string. The language of the context node is determined by the value of the xml:lang attribute on the context node, or, if the context node has no xml:lang attribute, by the value of the xml:lang attribute on the nearest ancestor of the context node that has an xml:lang attribute. If there is no such attribute, then lang</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathLastFunction' file='xpathInternals'>
+ <info>Implement the last() XPath function number last() The last function returns the number of nodes in the context node list.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathLeading' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set) @nodes1 and @nodes2 are sorted by document order, then #exslSetsLeadingSorted is called.</info>
+ <return type='xmlNodeSetPtr' info='the nodes in @nodes1 that precede the first node in @nodes2 in document order, @nodes1 if @nodes2 is NULL or empty or an empty node-set if @nodes1 doesn&apos;t contain @nodes2'/>
+ <arg name='nodes1' type='xmlNodeSetPtr' info='a node-set'/>
+ <arg name='nodes2' type='xmlNodeSetPtr' info='a node-set'/>
+ </function>
+ <function name='xmlXPathLeadingSorted' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)</info>
+ <return type='xmlNodeSetPtr' info='the nodes in @nodes1 that precede the first node in @nodes2 in document order, @nodes1 if @nodes2 is NULL or empty or an empty node-set if @nodes1 doesn&apos;t contain @nodes2'/>
+ <arg name='nodes1' type='xmlNodeSetPtr' info='a node-set, sorted by document order'/>
+ <arg name='nodes2' type='xmlNodeSetPtr' info='a node-set, sorted by document order'/>
+ </function>
+ <function name='xmlXPathLocalNameFunction' file='xpathInternals'>
+ <info>Implement the local-name() XPath function string local-name(node-set?) The local-name function returns a string containing the local part of the name of the node in the argument node-set that is first in document order. If the node-set is empty or the first node has no name, an empty string is returned. If the argument is omitted it defaults to the context node.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathModValues' file='xpathInternals'>
+ <info>Implement the mod operation on XPath objects: @arg1 / @arg2 The numeric operators convert their operands to numbers as if by calling the number function.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathMultValues' file='xpathInternals'>
+ <info>Implement the multiply operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathNamespaceURIFunction' file='xpathInternals'>
+ <info>Implement the namespace-uri() XPath function string namespace-uri(node-set?) The namespace-uri function returns a string containing the namespace URI of the expanded name of the node in the argument node-set that is first in document order. If the node-set is empty, the first node has no name, or the expanded name has no namespace URI, an empty string is returned. If the argument is omitted it defaults to the context node.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathNewBoolean' file='xpathInternals'>
+ <info>Create a new xmlXPathObjectPtr of type boolean and of value @val</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='int' info='the boolean value'/>
+ </function>
+ <function name='xmlXPathNewCString' file='xpathInternals'>
+ <info>Create a new xmlXPathObjectPtr of type string and of value @val</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='const char *' info='the char * value'/>
+ </function>
+ <function name='xmlXPathNewContext' file='xpath'>
+ <info>Create a new xmlXPathContext</info>
+ <return type='xmlXPathContextPtr' info='the xmlXPathContext just allocated. The caller will need to free it.'/>
+ <arg name='doc' type='xmlDocPtr' info='the XML document'/>
+ </function>
+ <function name='xmlXPathNewFloat' file='xpathInternals'>
+ <info>Create a new xmlXPathObjectPtr of type double and of value @val</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='double' info='the double value'/>
+ </function>
+ <function name='xmlXPathNewNodeSet' file='xpathInternals'>
+ <info>Create a new xmlXPathObjectPtr of type NodeSet and initialize it with the single Node @val</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='xmlNodePtr' info='the NodePtr value'/>
+ </function>
+ <function name='xmlXPathNewNodeSetList' file='xpathInternals'>
+ <info>Create a new xmlXPathObjectPtr of type NodeSet and initialize it with the Nodeset @val</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='xmlNodeSetPtr' info='an existing NodeSet'/>
+ </function>
+ <function name='xmlXPathNewParserContext' file='xpathInternals'>
+ <info>Create a new xmlXPathParserContext</info>
+ <return type='xmlXPathParserContextPtr' info='the xmlXPathParserContext just allocated.'/>
+ <arg name='str' type='const xmlChar *' info='the XPath expression'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathNewString' file='xpathInternals'>
+ <info>Create a new xmlXPathObjectPtr of type string and of value @val</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='const xmlChar *' info='the xmlChar * value'/>
+ </function>
+ <function name='xmlXPathNewValueTree' file='xpathInternals'>
+ <info>Create a new xmlXPathObjectPtr of type Value Tree (XSLT) and initialize it with the tree root @val</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='xmlNodePtr' info='the NodePtr value'/>
+ </function>
+ <function name='xmlXPathNextAncestor' file='xpathInternals'>
+ <info>Traversal function for the &quot;ancestor&quot; direction the ancestor axis contains the ancestors of the context node; the ancestors of the context node consist of the parent of context node and the parent&apos;s parent and so on; the nodes are ordered in reverse document order; thus the parent is the first node on the axis, and the parent&apos;s parent is the second node on the axis</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextAncestorOrSelf' file='xpathInternals'>
+ <info>Traversal function for the &quot;ancestor-or-self&quot; direction he ancestor-or-self axis contains the context node and ancestors of the context node in reverse document order; thus the context node is the first node on the axis, and the context node&apos;s parent the second; parent here is defined the same as with the parent axis.</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextAttribute' file='xpathInternals'>
+ <info>Traversal function for the &quot;attribute&quot; direction TODO: support DTD inherited default attributes</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current attribute in the traversal'/>
+ </function>
+ <function name='xmlXPathNextChild' file='xpathInternals'>
+ <info>Traversal function for the &quot;child&quot; direction The child axis contains the children of the context node in document order.</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextDescendant' file='xpathInternals'>
+ <info>Traversal function for the &quot;descendant&quot; direction the descendant axis contains the descendants of the context node in document order; a descendant is a child or a child of a child and so on.</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextDescendantOrSelf' file='xpathInternals'>
+ <info>Traversal function for the &quot;descendant-or-self&quot; direction the descendant-or-self axis contains the context node and the descendants of the context node in document order; thus the context node is the first node on the axis, and the first child of the context node is the second node on the axis</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextFollowing' file='xpathInternals'>
+ <info>Traversal function for the &quot;following&quot; direction The following axis contains all nodes in the same document as the context node that are after the context node in document order, excluding any descendants and excluding attribute nodes and namespace nodes; the nodes are ordered in document order</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextFollowingSibling' file='xpathInternals'>
+ <info>Traversal function for the &quot;following-sibling&quot; direction The following-sibling axis contains the following siblings of the context node in document order.</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextNamespace' file='xpathInternals'>
+ <info>Traversal function for the &quot;namespace&quot; direction the namespace axis contains the namespace nodes of the context node; the order of nodes on this axis is implementation-defined; the axis will be empty unless the context node is an element We keep the XML namespace node at the end of the list.</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current attribute in the traversal'/>
+ </function>
+ <function name='xmlXPathNextParent' file='xpathInternals'>
+ <info>Traversal function for the &quot;parent&quot; direction The parent axis contains the parent of the context node, if there is one.</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextPreceding' file='xpathInternals'>
+ <info>Traversal function for the &quot;preceding&quot; direction the preceding axis contains all nodes in the same document as the context node that are before the context node in document order, excluding any ancestors and excluding attribute nodes and namespace nodes; the nodes are ordered in reverse document order</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextPrecedingSibling' file='xpathInternals'>
+ <info>Traversal function for the &quot;preceding-sibling&quot; direction The preceding-sibling axis contains the preceding siblings of the context node in reverse document order; the first preceding sibling is first on the axis; the sibling preceding that node is the second on the axis and so on.</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNextSelf' file='xpathInternals'>
+ <info>Traversal function for the &quot;self&quot; direction The self axis contains just the context node itself</info>
+ <return type='xmlNodePtr' info='the next element following that axis'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
+ </function>
+ <function name='xmlXPathNodeLeading' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set) @nodes is sorted by document order, then #exslSetsNodeLeadingSorted is called.</info>
+ <return type='xmlNodeSetPtr' info='the nodes in @nodes that precede @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn&apos;t contain @node'/>
+ <arg name='nodes' type='xmlNodeSetPtr' info='a node-set'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ </function>
+ <function name='xmlXPathNodeLeadingSorted' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)</info>
+ <return type='xmlNodeSetPtr' info='the nodes in @nodes that precede @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn&apos;t contain @node'/>
+ <arg name='nodes' type='xmlNodeSetPtr' info='a node-set, sorted by document order'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ </function>
+ <function name='xmlXPathNodeSetAdd' file='xpathInternals'>
+ <info>add a new xmlNodePtr to an existing NodeSet</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodeSetPtr' info='the initial node set'/>
+ <arg name='val' type='xmlNodePtr' info='a new xmlNodePtr'/>
+ </function>
+ <function name='xmlXPathNodeSetAddNs' file='xpathInternals'>
+ <info>add a new namespace node to an existing NodeSet</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodeSetPtr' info='the initial node set'/>
+ <arg name='node' type='xmlNodePtr' info='the hosting node'/>
+ <arg name='ns' type='xmlNsPtr' info='a the namespace node'/>
+ </function>
+ <function name='xmlXPathNodeSetAddUnique' file='xpathInternals'>
+ <info>add a new xmlNodePtr to an existing NodeSet, optimized version when we are sure the node is not already in the set.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodeSetPtr' info='the initial node set'/>
+ <arg name='val' type='xmlNodePtr' info='a new xmlNodePtr'/>
+ </function>
+ <function name='xmlXPathNodeSetContains' file='xpathInternals'>
+ <info>checks whether @cur contains @val</info>
+ <return type='int' info='true (1) if @cur contains @val, false (0) otherwise'/>
+ <arg name='cur' type='xmlNodeSetPtr' info='the node-set'/>
+ <arg name='val' type='xmlNodePtr' info='the node'/>
+ </function>
+ <function name='xmlXPathNodeSetCreate' file='xpath'>
+ <info>Create a new xmlNodeSetPtr of type double and of value @val</info>
+ <return type='xmlNodeSetPtr' info='the newly created object.'/>
+ <arg name='val' type='xmlNodePtr' info='an initial xmlNodePtr, or NULL'/>
+ </function>
+ <function name='xmlXPathNodeSetDel' file='xpathInternals'>
+ <info>Removes an xmlNodePtr from an existing NodeSet</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodeSetPtr' info='the initial node set'/>
+ <arg name='val' type='xmlNodePtr' info='an xmlNodePtr'/>
+ </function>
+ <function name='xmlXPathNodeSetFreeNs' file='xpathInternals'>
+ <info>Namespace nodes in libxml don&apos;t match the XPath semantic. In a node set the namespace nodes are duplicated and the next pointer is set to the parent node in the XPath semantic. Check if such a node needs to be freed</info>
+ <return type='void'/>
+ <arg name='ns' type='xmlNsPtr' info='the XPath namespace node found in a nodeset.'/>
+ </function>
+ <function name='xmlXPathNodeSetMerge' file='xpathInternals'>
+ <info>Merges two nodesets, all nodes from @val2 are added to @val1 if @val1 is NULL, a new set is created and copied from @val2</info>
+ <return type='xmlNodeSetPtr' info='@val1 once extended or NULL in case of error.'/>
+ <arg name='val1' type='xmlNodeSetPtr' info='the first NodeSet or NULL'/>
+ <arg name='val2' type='xmlNodeSetPtr' info='the second NodeSet'/>
+ </function>
+ <function name='xmlXPathNodeSetRemove' file='xpathInternals'>
+ <info>Removes an entry from an existing NodeSet list.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlNodeSetPtr' info='the initial node set'/>
+ <arg name='val' type='int' info='the index to remove'/>
+ </function>
+ <function name='xmlXPathNodeSetSort' file='xpathInternals'>
+ <info>Sort the node set in document order</info>
+ <return type='void'/>
+ <arg name='set' type='xmlNodeSetPtr' info='the node set'/>
+ </function>
+ <function name='xmlXPathNodeTrailing' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set) @nodes is sorted by document order, then #xmlXPathNodeTrailingSorted is called.</info>
+ <return type='xmlNodeSetPtr' info='the nodes in @nodes that follow @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn&apos;t contain @node'/>
+ <arg name='nodes' type='xmlNodeSetPtr' info='a node-set'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ </function>
+ <function name='xmlXPathNodeTrailingSorted' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set)</info>
+ <return type='xmlNodeSetPtr' info='the nodes in @nodes that follow @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn&apos;t contain @node'/>
+ <arg name='nodes' type='xmlNodeSetPtr' info='a node-set, sorted by document order'/>
+ <arg name='node' type='xmlNodePtr' info='a node'/>
+ </function>
+ <function name='xmlXPathNormalizeFunction' file='xpathInternals'>
+ <info>Implement the normalize-space() XPath function string normalize-space(string?) The normalize-space function returns the argument string with white space normalized by stripping leading and trailing whitespace and replacing sequences of whitespace characters by a single space. Whitespace characters are the same allowed by the S production in XML. If the argument is omitted, it defaults to the context node converted to a string, in other words the value of the context node.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathNotEqualValues' file='xpathInternals'>
+ <info>Implement the equal operation on XPath objects content: @arg1 == @arg2</info>
+ <return type='int' info='0 or 1 depending on the results of the test.'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathNotFunction' file='xpathInternals'>
+ <info>Implement the not() XPath function boolean not(boolean) The not function returns true if its argument is false, and false otherwise.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathNsLookup' file='xpathInternals'>
+ <info>Search in the namespace declaration array of the context for the given namespace name associated to the given prefix</info>
+ <return type='const xmlChar *' info='the value or NULL if not found'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='prefix' type='const xmlChar *' info='the namespace prefix value'/>
+ </function>
+ <function name='xmlXPathNumberFunction' file='xpathInternals'>
+ <info>Implement the number() XPath function number number(object?)</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathObjectCopy' file='xpath'>
+ <info>allocate a new copy of a given object</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='the original object'/>
+ </function>
+ <function name='xmlXPathOrderDocElems' file='xpath'>
+ <info>Call this routine to speed up XPath computation on static documents. This stamps all the element nodes with the document order Like for line information, the order is kept in the element-&gt;content field, the value stored is actually - the node number (starting at -1) to be able to differentiate from line numbers.</info>
+ <return type='long' info='the number of elements found in the document or -1 in case of error.'/>
+ <arg name='doc' type='xmlDocPtr' info='an input document'/>
+ </function>
+ <function name='xmlXPathParseNCName' file='xpathInternals'>
+ <info>parse an XML namespace non qualified name. [NS 3] NCName ::= (Letter | &apos;_&apos;) (NCNameChar)* [NS 4] NCNameChar ::= Letter | Digit | &apos;.&apos; | &apos;-&apos; | &apos;_&apos; | CombiningChar | Extender</info>
+ <return type='xmlChar *' info='the namespace name or NULL'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathParseName' file='xpathInternals'>
+ <info>parse an XML name [4] NameChar ::= Letter | Digit | &apos;.&apos; | &apos;-&apos; | &apos;_&apos; | &apos;:&apos; | CombiningChar | Extender [5] Name ::= (Letter | &apos;_&apos; | &apos;:&apos;) (NameChar)*</info>
+ <return type='xmlChar *' info='the namespace name or NULL'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathPopBoolean' file='xpathInternals'>
+ <info>Pops a boolean from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</info>
+ <return type='int' info='the boolean'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='an XPath parser context'/>
+ </function>
+ <function name='xmlXPathPopExternal' file='xpathInternals'>
+ <info>Pops an external object from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</info>
+ <return type='void *' info='the object'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='an XPath parser context'/>
+ </function>
+ <function name='xmlXPathPopNodeSet' file='xpathInternals'>
+ <info>Pops a node-set from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</info>
+ <return type='xmlNodeSetPtr' info='the node-set'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='an XPath parser context'/>
+ </function>
+ <function name='xmlXPathPopNumber' file='xpathInternals'>
+ <info>Pops a number from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</info>
+ <return type='double' info='the number'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='an XPath parser context'/>
+ </function>
+ <function name='xmlXPathPopString' file='xpathInternals'>
+ <info>Pops a string from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.</info>
+ <return type='xmlChar *' info='the string'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='an XPath parser context'/>
+ </function>
+ <function name='xmlXPathPositionFunction' file='xpathInternals'>
+ <info>Implement the position() XPath function number position() The position function returns the position of the context node in the context node list. The first position is 1, and so the last position will be equal to last().</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathRegisterAllFunctions' file='xpathInternals'>
+ <info>Registers all default XPath functions in this context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathRegisterFunc' file='xpathInternals'>
+ <info>Register a new function. If @f is NULL it unregisters the function</info>
+ <return type='int' info='0 in case of success, -1 in case of error'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='name' type='const xmlChar *' info='the function name'/>
+ <arg name='f' type='xmlXPathFunction' info='the function implementation or NULL'/>
+ </function>
+ <function name='xmlXPathRegisterFuncLookup' file='xpathInternals'>
+ <info>Registers an external mechanism to do function lookup.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='f' type='xmlXPathFuncLookupFunc' info='the lookup function'/>
+ <arg name='funcCtxt' type='void *' info='the lookup data'/>
+ </function>
+ <function name='xmlXPathRegisterFuncNS' file='xpathInternals'>
+ <info>Register a new function. If @f is NULL it unregisters the function</info>
+ <return type='int' info='0 in case of success, -1 in case of error'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='name' type='const xmlChar *' info='the function name'/>
+ <arg name='ns_uri' type='const xmlChar *' info='the function namespace URI'/>
+ <arg name='f' type='xmlXPathFunction' info='the function implementation or NULL'/>
+ </function>
+ <function name='xmlXPathRegisterNs' file='xpathInternals'>
+ <info>Register a new namespace. If @ns_uri is NULL it unregisters the namespace</info>
+ <return type='int' info='0 in case of success, -1 in case of error'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='prefix' type='const xmlChar *' info='the namespace prefix'/>
+ <arg name='ns_uri' type='const xmlChar *' info='the namespace name'/>
+ </function>
+ <function name='xmlXPathRegisterVariable' file='xpathInternals'>
+ <info>Register a new variable value. If @value is NULL it unregisters the variable</info>
+ <return type='int' info='0 in case of success, -1 in case of error'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='name' type='const xmlChar *' info='the variable name'/>
+ <arg name='value' type='xmlXPathObjectPtr' info='the variable value or NULL'/>
+ </function>
+ <function name='xmlXPathRegisterVariableLookup' file='xpathInternals'>
+ <info>register an external mechanism to do variable lookup</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='f' type='xmlXPathVariableLookupFunc' info='the lookup function'/>
+ <arg name='data' type='void *' info='the lookup data'/>
+ </function>
+ <function name='xmlXPathRegisterVariableNS' file='xpathInternals'>
+ <info>Register a new variable value. If @value is NULL it unregisters the variable</info>
+ <return type='int' info='0 in case of success, -1 in case of error'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='name' type='const xmlChar *' info='the variable name'/>
+ <arg name='ns_uri' type='const xmlChar *' info='the variable namespace URI'/>
+ <arg name='value' type='xmlXPathObjectPtr' info='the variable value or NULL'/>
+ </function>
+ <function name='xmlXPathRegisteredFuncsCleanup' file='xpathInternals'>
+ <info>Cleanup the XPath context data associated to registered functions</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathRegisteredNsCleanup' file='xpathInternals'>
+ <info>Cleanup the XPath context data associated to registered variables</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathRegisteredVariablesCleanup' file='xpathInternals'>
+ <info>Cleanup the XPath context data associated to registered variables</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathRoot' file='xpathInternals'>
+ <info>Initialize the context to the root of the document</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathRoundFunction' file='xpathInternals'>
+ <info>Implement the round() XPath function number round(number) The round function returns the number that is closest to the argument and that is an integer. If there are two such numbers, then the one that is even is returned.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathStartsWithFunction' file='xpathInternals'>
+ <info>Implement the starts-with() XPath function boolean starts-with(string, string) The starts-with function returns true if the first argument string starts with the second argument string, and otherwise returns false.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathStringEvalNumber' file='xpathInternals'>
+ <info>[30a] Float ::= Number (&apos;e&apos; Digits?)? [30] Number ::= Digits (&apos;.&apos; Digits?)? | &apos;.&apos; Digits [31] Digits ::= [0-9]+ Compile a Number in the string In complement of the Number expression, this function also handles negative values : &apos;-&apos; Number.</info>
+ <return type='double' info='the double value.'/>
+ <arg name='str' type='const xmlChar *' info='A string to scan'/>
+ </function>
+ <function name='xmlXPathStringFunction' file='xpathInternals'>
+ <info>Implement the string() XPath function string string(object?) The string function converts an object to a string as follows: - A node-set is converted to a string by returning the value of the node in the node-set that is first in document order. If the node-set is empty, an empty string is returned. - A number is converted to a string as follows + NaN is converted to the string NaN + positive zero is converted to the string 0 + negative zero is converted to the string 0 + positive infinity is converted to the string Infinity + negative infinity is converted to the string -Infinity + if the number is an integer, the number is represented in decimal form as a Number with no decimal point and no leading zeros, preceded by a minus sign (-) if the number is negative + otherwise, the number is represented in decimal form as a Number including a decimal point with at least one digit before the decimal point and at least one digit after the decimal point, preceded by a minus sign (-) if the number is negative; there must be no leading zeros before the decimal point apart possibly from the one required digit immediately before the decimal point; beyond the one required digit after the decimal point there must be as many, but only as many, more digits as are needed to uniquely distinguish the number from all other IEEE 754 numeric values. - The boolean false value is converted to the string false. The boolean true value is converted to the string true. If the argument is omitted, it defaults to a node-set with the context node as its only member.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathStringLengthFunction' file='xpathInternals'>
+ <info>Implement the string-length() XPath function number string-length(string?) The string-length returns the number of characters in the string (see [3.6 Strings]). If the argument is omitted, it defaults to the context node converted to a string, in other words the value of the context node.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathSubValues' file='xpathInternals'>
+ <info>Implement the subtraction operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathSubstringAfterFunction' file='xpathInternals'>
+ <info>Implement the substring-after() XPath function string substring-after(string, string) The substring-after function returns the substring of the first argument string that follows the first occurrence of the second argument string in the first argument string, or the empty stringi if the first argument string does not contain the second argument string. For example, substring-after(&quot;1999/04/01&quot;,&quot;/&quot;) returns 04/01, and substring-after(&quot;1999/04/01&quot;,&quot;19&quot;) returns 99/04/01.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathSubstringBeforeFunction' file='xpathInternals'>
+ <info>Implement the substring-before() XPath function string substring-before(string, string) The substring-before function returns the substring of the first argument string that precedes the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string. For example, substring-before(&quot;1999/04/01&quot;,&quot;/&quot;) returns 1999.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathSubstringFunction' file='xpathInternals'>
+ <info>Implement the substring() XPath function string substring(string, number, number?) The substring function returns the substring of the first argument starting at the position specified in the second argument with length specified in the third argument. For example, substring(&quot;12345&quot;,2,3) returns &quot;234&quot;. If the third argument is not specified, it returns the substring starting at the position specified in the second argument and continuing to the end of the string. For example, substring(&quot;12345&quot;,2) returns &quot;2345&quot;. More precisely, each character in the string (see [3.6 Strings]) is considered to have a numeric position: the position of the first character is 1, the position of the second character is 2 and so on. The returned substring contains those characters for which the position of the character is greater than or equal to the second argument and, if the third argument is specified, less than the sum of the second and third arguments; the comparisons and addition used for the above follow the standard IEEE 754 rules. Thus: - substring(&quot;12345&quot;, 1.5, 2.6) returns &quot;234&quot; - substring(&quot;12345&quot;, 0, 3) returns &quot;12&quot; - substring(&quot;12345&quot;, 0 div 0, 3) returns &quot;&quot; - substring(&quot;12345&quot;, 1, 0 div 0) returns &quot;&quot; - substring(&quot;12345&quot;, -42, 1 div 0) returns &quot;12345&quot; - substring(&quot;12345&quot;, -1 div 0, 1 div 0) returns &quot;&quot;</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathSumFunction' file='xpathInternals'>
+ <info>Implement the sum() XPath function number sum(node-set) The sum function returns the sum of the values of the nodes in the argument node-set.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathTrailing' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set) @nodes1 and @nodes2 are sorted by document order, then #xmlXPathTrailingSorted is called.</info>
+ <return type='xmlNodeSetPtr' info='the nodes in @nodes1 that follow the first node in @nodes2 in document order, @nodes1 if @nodes2 is NULL or empty or an empty node-set if @nodes1 doesn&apos;t contain @nodes2'/>
+ <arg name='nodes1' type='xmlNodeSetPtr' info='a node-set'/>
+ <arg name='nodes2' type='xmlNodeSetPtr' info='a node-set'/>
+ </function>
+ <function name='xmlXPathTrailingSorted' file='xpathInternals'>
+ <info>Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set)</info>
+ <return type='xmlNodeSetPtr' info='the nodes in @nodes1 that follow the first node in @nodes2 in document order, @nodes1 if @nodes2 is NULL or empty or an empty node-set if @nodes1 doesn&apos;t contain @nodes2'/>
+ <arg name='nodes1' type='xmlNodeSetPtr' info='a node-set, sorted by document order'/>
+ <arg name='nodes2' type='xmlNodeSetPtr' info='a node-set, sorted by document order'/>
+ </function>
+ <function name='xmlXPathTranslateFunction' file='xpathInternals'>
+ <info>Implement the translate() XPath function string translate(string, string, string) The translate function returns the first argument string with occurrences of characters in the second argument string replaced by the character at the corresponding position in the third argument string. For example, translate(&quot;bar&quot;,&quot;abc&quot;,&quot;ABC&quot;) returns the string BAr. If there is a character in the second argument string with no character at a corresponding position in the third argument string (because the second argument string is longer than the third argument string), then occurrences of that character in the first argument string are removed. For example, translate(&quot;--aaa--&quot;,&quot;abc-&quot;,&quot;ABC&quot;)</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathTrueFunction' file='xpathInternals'>
+ <info>Implement the true() XPath function boolean true()</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='nargs' type='int' info='the number of arguments'/>
+ </function>
+ <function name='xmlXPathValueFlipSign' file='xpathInternals'>
+ <info>Implement the unary - operation on an XPath object The numeric operators convert their operands to numbers as if by calling the number function.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ </function>
+ <function name='xmlXPathVariableLookup' file='xpathInternals'>
+ <info>Search in the Variable array of the context for the given variable value.</info>
+ <return type='xmlXPathObjectPtr' info='a copy of the value or NULL if not found'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='name' type='const xmlChar *' info='the variable name'/>
+ </function>
+ <functype name='xmlXPathVariableLookupFunc' file='xpathInternals'>
+ <info>Prototype for callbacks used to plug variable lookup in the XPath engine.</info>
+ <return type='xmlXPathObjectPtr' info='the XPath object value or NULL if not found.'/>
+ <arg name='ctxt' type='void *' info='an XPath context'/>
+ <arg name='name' type='const xmlChar *' info='name of the variable'/>
+ <arg name='ns_uri' type='const xmlChar *' info='the namespace name hosting this variable'/>
+ </functype>
+ <function name='xmlXPathVariableLookupNS' file='xpathInternals'>
+ <info>Search in the Variable array of the context for the given variable value.</info>
+ <return type='xmlXPathObjectPtr' info='the a copy of the value or NULL if not found'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name='name' type='const xmlChar *' info='the variable name'/>
+ <arg name='ns_uri' type='const xmlChar *' info='the variable namespace URI'/>
+ </function>
+ <function name='xmlXPathWrapCString' file='xpathInternals'>
+ <info>Wraps a string into an XPath object.</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='char *' info='the char * value'/>
+ </function>
+ <function name='xmlXPathWrapExternal' file='xpathInternals'>
+ <info>Wraps the @val data into an XPath object.</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='void *' info='the user data'/>
+ </function>
+ <function name='xmlXPathWrapNodeSet' file='xpathInternals'>
+ <info>Wrap the Nodeset @val in a new xmlXPathObjectPtr</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='xmlNodeSetPtr' info='the NodePtr value'/>
+ </function>
+ <function name='xmlXPathWrapString' file='xpathInternals'>
+ <info>Wraps the @val string into an XPath object.</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='xmlChar *' info='the xmlChar * value'/>
+ </function>
+ <function name='xmlXPatherror' file='xpathInternals'>
+ <info>Formats an error message.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
+ <arg name='file' type='const char *' info='the file name'/>
+ <arg name='line' type='int' info='the line number'/>
+ <arg name='no' type='int' info='the error number'/>
+ </function>
+ <function name='xmlXPtrBuildNodeList' file='xpointer'>
+ <info>Build a node list tree copy of the XPointer result. This will drop Attributes and Namespace declarations.</info>
+ <return type='xmlNodePtr' info='an xmlNodePtr list or NULL. the caller has to free the node tree.'/>
+ <arg name='obj' type='xmlXPathObjectPtr' info='the XPointer result from the evaluation.'/>
+ </function>
+ <function name='xmlXPtrEval' file='xpointer'>
+ <info>Evaluate the XPath Location Path in the given context.</info>
+ <return type='xmlXPathObjectPtr' info='the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.'/>
+ <arg name='str' type='const xmlChar *' info='the XPointer expression'/>
+ <arg name='ctx' type='xmlXPathContextPtr' info='the XPointer context'/>
+ </function>
+ <function name='xmlXPtrEvalRangePredicate' file='xpointer'>
+ <info>[8] Predicate ::= &apos;[&apos; PredicateExpr &apos;]&apos; [9] PredicateExpr ::= Expr Evaluate a predicate as in xmlXPathEvalPredicate() but for a Location Set instead of a node set</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPointer Parser context'/>
+ </function>
+ <function name='xmlXPtrFreeLocationSet' file='xpointer'>
+ <info>Free the LocationSet compound (not the actual ranges !).</info>
+ <return type='void'/>
+ <arg name='obj' type='xmlLocationSetPtr' info='the xmlLocationSetPtr to free'/>
+ </function>
+ <function name='xmlXPtrLocationSetAdd' file='xpointer'>
+ <info>add a new xmlXPathObjectPtr to an existing LocationSet If the location already exist in the set @val is freed.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlLocationSetPtr' info='the initial range set'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='a new xmlXPathObjectPtr'/>
+ </function>
+ <function name='xmlXPtrLocationSetCreate' file='xpointer'>
+ <info>Create a new xmlLocationSetPtr of type double and of value @val</info>
+ <return type='xmlLocationSetPtr' info='the newly created object.'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='an initial xmlXPathObjectPtr, or NULL'/>
+ </function>
+ <function name='xmlXPtrLocationSetDel' file='xpointer'>
+ <info>Removes an xmlXPathObjectPtr from an existing LocationSet</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlLocationSetPtr' info='the initial range set'/>
+ <arg name='val' type='xmlXPathObjectPtr' info='an xmlXPathObjectPtr'/>
+ </function>
+ <function name='xmlXPtrLocationSetMerge' file='xpointer'>
+ <info>Merges two rangesets, all ranges from @val2 are added to @val1</info>
+ <return type='xmlLocationSetPtr' info='val1 once extended or NULL in case of error.'/>
+ <arg name='val1' type='xmlLocationSetPtr' info='the first LocationSet'/>
+ <arg name='val2' type='xmlLocationSetPtr' info='the second LocationSet'/>
+ </function>
+ <function name='xmlXPtrLocationSetRemove' file='xpointer'>
+ <info>Removes an entry from an existing LocationSet list.</info>
+ <return type='void'/>
+ <arg name='cur' type='xmlLocationSetPtr' info='the initial range set'/>
+ <arg name='val' type='int' info='the index to remove'/>
+ </function>
+ <function name='xmlXPtrNewCollapsedRange' file='xpointer'>
+ <info>Create a new xmlXPathObjectPtr of type range using a single nodes</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='start' type='xmlNodePtr' info='the starting and ending node'/>
+ </function>
+ <function name='xmlXPtrNewContext' file='xpointer'>
+ <info>Create a new XPointer context</info>
+ <return type='xmlXPathContextPtr' info='the xmlXPathContext just allocated.'/>
+ <arg name='doc' type='xmlDocPtr' info='the XML document'/>
+ <arg name='here' type='xmlNodePtr' info='the node that directly contains the XPointer being evaluated or NULL'/>
+ <arg name='origin' type='xmlNodePtr' info='the element from which a user or program initiated traversal of the link, or NULL.'/>
+ </function>
+ <function name='xmlXPtrNewLocationSetNodeSet' file='xpointer'>
+ <info>Create a new xmlXPathObjectPtr of type LocationSet and initialize it with all the nodes from @set</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='set' type='xmlNodeSetPtr' info='a node set'/>
+ </function>
+ <function name='xmlXPtrNewLocationSetNodes' file='xpointer'>
+ <info>Create a new xmlXPathObjectPtr of type LocationSet and initialize it with the single range made of the two nodes @start and @end</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='start' type='xmlNodePtr' info='the start NodePtr value'/>
+ <arg name='end' type='xmlNodePtr' info='the end NodePtr value or NULL'/>
+ </function>
+ <function name='xmlXPtrNewRange' file='xpointer'>
+ <info>Create a new xmlXPathObjectPtr of type range</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='start' type='xmlNodePtr' info='the starting node'/>
+ <arg name='startindex' type='int' info='the start index'/>
+ <arg name='end' type='xmlNodePtr' info='the ending point'/>
+ <arg name='endindex' type='int' info='the ending index'/>
+ </function>
+ <function name='xmlXPtrNewRangeNodeObject' file='xpointer'>
+ <info>Create a new xmlXPathObjectPtr of type range from a not to an object</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='start' type='xmlNodePtr' info='the starting node'/>
+ <arg name='end' type='xmlXPathObjectPtr' info='the ending object'/>
+ </function>
+ <function name='xmlXPtrNewRangeNodePoint' file='xpointer'>
+ <info>Create a new xmlXPathObjectPtr of type range from a node to a point</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='start' type='xmlNodePtr' info='the starting node'/>
+ <arg name='end' type='xmlXPathObjectPtr' info='the ending point'/>
+ </function>
+ <function name='xmlXPtrNewRangeNodes' file='xpointer'>
+ <info>Create a new xmlXPathObjectPtr of type range using 2 nodes</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='start' type='xmlNodePtr' info='the starting node'/>
+ <arg name='end' type='xmlNodePtr' info='the ending node'/>
+ </function>
+ <function name='xmlXPtrNewRangePointNode' file='xpointer'>
+ <info>Create a new xmlXPathObjectPtr of type range from a point to a node</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='start' type='xmlXPathObjectPtr' info='the starting point'/>
+ <arg name='end' type='xmlNodePtr' info='the ending node'/>
+ </function>
+ <function name='xmlXPtrNewRangePoints' file='xpointer'>
+ <info>Create a new xmlXPathObjectPtr of type range using 2 Points</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='start' type='xmlXPathObjectPtr' info='the starting point'/>
+ <arg name='end' type='xmlXPathObjectPtr' info='the ending point'/>
+ </function>
+ <function name='xmlXPtrRangeToFunction' file='xpointer'>
+ <info>Implement the range-to() XPointer function</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPointer Parser context'/>
+ <arg name='nargs' type='int' info='the number of args'/>
+ </function>
+ <function name='xmlXPtrWrapLocationSet' file='xpointer'>
+ <info>Wrap the LocationSet @val in a new xmlXPathObjectPtr</info>
+ <return type='xmlXPathObjectPtr' info='the newly created object.'/>
+ <arg name='val' type='xmlLocationSetPtr' info='the LocationSet value'/>
+ </function>
+ </symbols>
+</api>
diff --git a/doc/libxml2.xsa b/doc/libxml2.xsa
new file mode 100644
index 0000000..814f516
--- /dev/null
+++ b/doc/libxml2.xsa
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE xsa PUBLIC "-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML" "http://www.garshol.priv.no/download/xsa/xsa.dtd">
+<xsa>
+ <vendor>
+ <name>Daniel Veillard</name>
+ <email>daniel@veillard.com</email>
+ <url>http://veillard.com/</url>
+ </vendor>
+ <product id="libxml2">
+ <name>libxml2</name>
+ <version>2.6.8</version>
+ <last-release> Mar 23 2004</last-release>
+ <info-url>http://xmlsoft.org/</info-url>
+ <changes> - First step of the cleanup of the serialization code and APIs
+ - XML Schemas: mixed content (Adam Dickmeiss), QName handling fixes (Adam
+ Dickmeiss), anyURI for "" (John Belmonte)
+ - Python: Canonicalization C14N support added (Anthony Carrico)
+ - xmlDocCopyNode() extension (William)
+ - Relax-NG: fix when processing XInclude results (William), external
+ reference in interleave (William), missing error on &lt;choice&gt;
+ failure (William), memory leak in schemas datatype facets.
+ - xmlWriter: patch for better DTD support (Alfred Mickautsch)
+ - bug fixes: xmlXPathLangFunction memory leak (Mike Hommey and William
+ Brack), no ID errors if using HTML_PARSE_NOERROR, xmlcatalog fallbacks to
+ URI on SYSTEM lookup failure, XInclude parse flags inheritance (William),
+ XInclude and XPointer fixes for entities (William), XML parser bug
+ reported by Holger Rauch, nanohttp fd leak (William), regexps char
+ groups '-' handling (William), dictionnary reference counting problems,
+ do not close stderr.
+ - performance patches from Petr Pajas
+ - Documentation fixes: XML_CATALOG_FILES in man pages (Mike Hommey)
+ - compilation and portability fixes: --without-valid, catalog cleanups
+ (Peter Breitenlohner), MingW patch (Roland Schwingel), cross-compilation
+ to Windows (Christophe de Vienne), --with-html-dir fixup (Julio Merino
+ Vidal), Windows build (Eric Zurcher)
+
+</changes>
+ </product>
+</xsa>
diff --git a/doc/namespaces.html b/doc/namespaces.html
new file mode 100644
index 0000000..6b9ab99
--- /dev/null
+++ b/doc/namespaces.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Namespaces</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Namespaces</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="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>The libxml2 library implements <a href="http://www.w3.org/TR/REC-xml-names/">XML namespaces</a> support by
+recognizing namespace constructs in the input, and does namespace lookup
+automatically when building the DOM tree. A namespace declaration is
+associated with an in-memory structure and all elements or attributes within
+that namespace point to it. Hence testing the namespace is a simple and fast
+equality operation at the user level.</p><p>I suggest that people using libxml2 use a namespace, and declare it in the
+root element of their document as the default namespace. Then they don't need
+to use the prefix in the content but we will have a basis for future semantic
+refinement and merging of data from different sources. This doesn't increase
+the size of the XML output significantly, but significantly increases its
+value in the long-term. Example:</p><pre>&lt;mydoc xmlns="http://mydoc.example.org/schemas/"&gt;
+ &lt;elem1&gt;...&lt;/elem1&gt;
+ &lt;elem2&gt;...&lt;/elem2&gt;
+&lt;/mydoc&gt;</pre><p>The namespace value has to be an absolute URL, but the URL doesn't have to
+point to any existing resource on the Web. It will bind all the element and
+attributes with that URL. I suggest to use an URL within a domain you
+control, and that the URL should contain some kind of version information if
+possible. For example, <code>"http://www.gnome.org/gnumeric/1.0/"</code> is a
+good namespace scheme.</p><p>Then when you load a file, make sure that a namespace carrying the
+version-independent prefix is installed on the root element of your document,
+and if the version information don't match something you know, warn the user
+and be liberal in what you accept as the input. Also do *not* try to base
+namespace checking on the prefix value. &lt;foo:text&gt; may be exactly the
+same as &lt;bar:text&gt; in another document. What really matters is the URI
+associated with the element or the attribute, not the prefix string (which is
+just a shortcut for the full URI). In libxml, element and attributes have an
+<code>ns</code> field pointing to an xmlNs structure detailing the namespace
+prefix and its URI.</p><p>@@Interfaces@@</p><pre>xmlNodePtr node;
+if(!strncmp(node-&gt;name,"mytag",5)
+ &amp;&amp; node-&gt;ns
+ &amp;&amp; !strcmp(node-&gt;ns-&gt;href,"http://www.mysite.com/myns/1.0")) {
+ ...
+}</pre><p>Usually people object to using namespaces together with validity checking.
+I will try to make sure that using namespaces won't break validity checking,
+so even if you plan to use or currently are using validation I strongly
+suggest adding namespaces to your document. A default namespace scheme
+<code>xmlns="http://...."</code> should not break validity even on less
+flexible parsers. Using namespaces to mix and differentiate content coming
+from multiple DTDs will certainly break current validation schemes. To check
+such documents one needs to use schema-validation, which is supported in
+libxml2 as well. See <a href="http://www.relaxng.org/">relagx-ng</a> and <a href="http://www.w3c.org/XML/Schema">w3c-schema</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/newapi.xsl b/doc/newapi.xsl
new file mode 100644
index 0000000..ad3d403
--- /dev/null
+++ b/doc/newapi.xsl
@@ -0,0 +1,763 @@
+<?xml version="1.0"?>
+<!--
+ Stylesheet to generate the HTML documentation from an XML API descriptions:
+ xsltproc newapi.xsl libxml2-api.xml
+
+ Daniel Veillard
+-->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ xmlns:str="http://exslt.org/strings"
+ extension-element-prefixes="exsl str"
+ exclude-result-prefixes="exsl str">
+
+ <!-- Import the main part of the site stylesheets -->
+ <xsl:import href="site.xsl"/>
+
+ <!-- Generate XHTML-1.0 transitional -->
+ <xsl:output method="xml" encoding="ISO-8859-1" indent="yes"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
+
+ <!-- Build keys for all symbols -->
+ <xsl:key name="symbols" match="/api/symbols/*" use="@name"/>
+
+ <!-- the target directory for the HTML output -->
+ <xsl:variable name="htmldir">html</xsl:variable>
+ <xsl:variable name="href_base">../</xsl:variable>
+
+ <!-- The table of content for the HTML API pages -->
+ <xsl:variable name="menu_name">API Menu</xsl:variable>
+ <xsl:variable name="apitoc">
+ <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><!-- style="margin-left: -1em" -->
+ <li><a style="font-weight:bold"
+ href="{$href_base}index.html">Main Menu</a></li>
+ <li><a style="font-weight:bold"
+ href="{$href_base}docs.html">Developer Menu</a></li>
+ <li><a style="font-weight:bold"
+ href="{$href_base}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="{$href_base}guidelines.html">XML Guidelines</a></li>
+ </ul>
+ </xsl:variable>
+ <xsl:template name="apitoc">
+ <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><xsl:value-of select="$menu_name"/></b>
+ </center>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="#fffacd">
+ <xsl:copy-of select="$apitoc"/>
+ </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">
+ <xsl:copy-of select="$api"/>
+ </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">
+ <xsl:copy-of select="$related"/>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="docstyle">
+ <style type="text/css">
+ div.deprecated pre.programlisting {border-style: double;border-color:red}
+ pre.programlisting {border-style: double;background: #EECFA1}
+ </style>
+ </xsl:template>
+ <xsl:template name="navbar">
+ <xsl:variable name="previous" select="preceding-sibling::file[1]"/>
+ <xsl:variable name="next" select="following-sibling::file[1]"/>
+ <table class="navigation" width="100%" summary="Navigation header"
+ cellpadding="2" cellspacing="2">
+ <tr valign="middle">
+ <xsl:if test="$previous">
+ <td><a accesskey="p" href="libxml-{$previous/@name}.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></img></a></td>
+ <th align="left"><a href="libxml-{$previous/@name}.html"><xsl:value-of select="$previous/@name"/></a></th>
+ </xsl:if>
+ <td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></img></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"></img></a></td>
+ <th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th>
+ <xsl:if test="$next">
+ <th align="right"><a href="libxml-{$next/@name}.html"><xsl:value-of select="$next/@name"/></a></th>
+ <td><a accesskey="n" href="libxml-{$next/@name}.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></img></a></td>
+ </xsl:if>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <!-- This is convoluted but needed to force the current document to
+ be the API one and not the result tree from the tokenize() result,
+ because the keys are only defined on the main document -->
+ <xsl:template mode="dumptoken" match='*'>
+ <xsl:param name="token"/>
+ <xsl:variable name="ref" select="key('symbols', $token)"/>
+ <xsl:choose>
+ <xsl:when test="$ref">
+ <a href="libxml-{$ref/@file}.html#{$ref/@name}"><xsl:value-of select="$token"/></a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$token"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- dumps a string, making cross-reference links -->
+ <xsl:template name="dumptext">
+ <xsl:param name="text"/>
+ <xsl:variable name="ctxt" select='.'/>
+ <!-- <xsl:value-of select="$text"/> -->
+ <xsl:for-each select="str:tokenize($text, ' &#9;')">
+ <xsl:apply-templates select="$ctxt" mode='dumptoken'>
+ <xsl:with-param name="token" select="string(.)"/>
+ </xsl:apply-templates>
+ <xsl:if test="position() != last()">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template match="macro" mode="toc">
+ <pre class="programlisting">
+ <xsl:text>#define </xsl:text><a href="#{@name}"><xsl:value-of select="@name"/></a>
+ </pre>
+ </xsl:template>
+
+ <xsl:template match="variable" mode="toc">
+ <pre class="programlisting">
+ <xsl:text>Variable </xsl:text>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="string(@type)"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <a name="{@name}"></a>
+ <xsl:value-of select="@name"/>
+ <xsl:text>
+
+</xsl:text>
+ </pre>
+ </xsl:template>
+
+ <xsl:template match="typedef" mode="toc">
+ <xsl:variable name="name" select="string(@name)"/>
+ <pre class="programlisting">
+ <xsl:choose>
+ <xsl:when test="@type = 'enum'">
+ <xsl:text>Enum </xsl:text>
+ <a href="#{$name}"><xsl:value-of select="$name"/></a>
+ <xsl:text>
+</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Typedef </xsl:text>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="@type"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <a name="{$name}"><xsl:value-of select="$name"/></a>
+ <xsl:text>
+</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </pre>
+ </xsl:template>
+
+ <xsl:template match="typedef[@type = 'enum']">
+ <xsl:variable name="name" select="string(@name)"/>
+ <h3>Enum <a name="{$name}"><xsl:value-of select="$name"/></a></h3>
+ <pre class="programlisting">
+ <xsl:text>Enum </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text> {
+</xsl:text>
+ <xsl:for-each select="/api/symbols/enum[@type = $name]">
+ <xsl:sort select="@value" data-type="number" order="ascending"/>
+ <xsl:text> </xsl:text>
+ <a name="{@name}"><xsl:value-of select="@name"/></a>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:if test="@info != ''">
+ <xsl:text> : </xsl:text>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="@info"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:text>
+</xsl:text>
+ </xsl:for-each>
+ <xsl:text>}
+</xsl:text>
+ </pre>
+ </xsl:template>
+
+ <xsl:template match="struct" mode="toc">
+ <pre class="programlisting">
+ <xsl:text>Structure </xsl:text><a href="#{@name}"><xsl:value-of select="@name"/></a><br/>
+ <xsl:value-of select="@type"/><xsl:text>
+</xsl:text>
+ <xsl:if test="not(field)">
+ <xsl:text>The content of this structure is not made public by the API.
+</xsl:text>
+ </xsl:if>
+ </pre>
+ </xsl:template>
+
+ <xsl:template match="struct">
+ <h3><a name="{@name}">Structure <xsl:value-of select="@name"/></a></h3>
+ <pre class="programlisting">
+ <xsl:text>Structure </xsl:text><xsl:value-of select="@name"/><br/>
+ <xsl:value-of select="@type"/><xsl:text> {
+</xsl:text>
+ <xsl:if test="not(field)">
+ <xsl:text>The content of this structure is not made public by the API.
+</xsl:text>
+ </xsl:if>
+ <xsl:for-each select="field">
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="@type"/>
+ </xsl:call-template>
+ <xsl:text>&#9;</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="@info != ''">
+ <xsl:text>&#9;: </xsl:text>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="substring(@info, 1, 40)"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:text>
+</xsl:text>
+ </xsl:for-each>
+ <xsl:text>}</xsl:text>
+ </pre>
+ </xsl:template>
+
+ <xsl:template match="macro">
+ <xsl:variable name="name" select="string(@name)"/>
+ <h3><a name="{$name}"></a>Macro: <xsl:value-of select="$name"/></h3>
+ <pre><xsl:text>#define </xsl:text><xsl:value-of select="$name"/></pre>
+ <p>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="info"/>
+ </xsl:call-template>
+ </p><xsl:text>
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="function" mode="toc">
+ <xsl:variable name="name" select="string(@name)"/>
+ <xsl:variable name="nlen" select="string-length($name)"/>
+ <xsl:variable name="tlen" select="string-length(return/@type)"/>
+ <xsl:variable name="blen" select="(($nlen + 8) - (($nlen + 8) mod 8)) + (($tlen + 8) - (($tlen + 8) mod 8))"/>
+ <pre class="programlisting">
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="return/@type"/>
+ </xsl:call-template>
+ <xsl:text>&#9;</xsl:text>
+ <a href="#{@name}"><xsl:value-of select="@name"/></a>
+ <xsl:if test="$blen - 40 &lt; -8">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$blen - 40 &lt; 0">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:text>&#9;(</xsl:text>
+ <xsl:if test="not(arg)">
+ <xsl:text>void</xsl:text>
+ </xsl:if>
+ <xsl:for-each select="arg">
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="@type"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="position() != last()">
+ <xsl:text>, </xsl:text><br/>
+ <xsl:if test="$blen - 40 &gt; 8">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$blen - 40 &gt; 0">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:text>&#9;&#9;&#9;&#9;&#9; </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>)</xsl:text>
+ </pre><xsl:text>
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="functype" mode="toc">
+ <xsl:variable name="name" select="string(@name)"/>
+ <xsl:variable name="nlen" select="string-length($name)"/>
+ <xsl:variable name="tlen" select="string-length(return/@type)"/>
+ <xsl:variable name="blen" select="(($nlen + 8) - (($nlen + 8) mod 8)) + (($tlen + 8) - (($tlen + 8) mod 8))"/>
+ <pre class="programlisting">
+ <xsl:text>Function type: </xsl:text>
+ <a href="#{$name}"><xsl:value-of select="$name"/></a>
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="return/@type"/>
+ </xsl:call-template>
+ <xsl:text>&#9;</xsl:text>
+ <a href="#{$name}"><xsl:value-of select="$name"/></a>
+ <xsl:if test="$blen - 40 &lt; -8">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$blen - 40 &lt; 0">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:text>&#9;(</xsl:text>
+ <xsl:if test="not(arg)">
+ <xsl:text>void</xsl:text>
+ </xsl:if>
+ <xsl:for-each select="arg">
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="@type"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="position() != last()">
+ <xsl:text>, </xsl:text><br/>
+ <xsl:if test="$blen - 40 &gt; 8">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$blen - 40 &gt; 0">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:text>&#9;&#9;&#9;&#9;&#9; </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>)
+</xsl:text>
+ </pre>
+ <xsl:text>
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="functype">
+ <xsl:variable name="name" select="string(@name)"/>
+ <xsl:variable name="nlen" select="string-length($name)"/>
+ <xsl:variable name="tlen" select="string-length(return/@type)"/>
+ <xsl:variable name="blen" select="(($nlen + 8) - (($nlen + 8) mod 8)) + (($tlen + 8) - (($tlen + 8) mod 8))"/>
+ <h3>
+ <a name="{$name}"></a>
+ <xsl:text>Function type: </xsl:text>
+ <xsl:value-of select="$name"/>
+ </h3>
+ <pre class="programlisting">
+ <xsl:text>Function type: </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="return/@type"/>
+ </xsl:call-template>
+ <xsl:text>&#9;</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="$blen - 40 &lt; -8">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$blen - 40 &lt; 0">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:text>&#9;(</xsl:text>
+ <xsl:if test="not(arg)">
+ <xsl:text>void</xsl:text>
+ </xsl:if>
+ <xsl:for-each select="arg">
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="@type"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="position() != last()">
+ <xsl:text>, </xsl:text><br/>
+ <xsl:if test="$blen - 40 &gt; 8">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$blen - 40 &gt; 0">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:text>&#9;&#9;&#9;&#9;&#9; </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>)
+</xsl:text>
+ </pre>
+ <p>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="info"/>
+ </xsl:call-template>
+ </p>
+ <xsl:if test="arg | return">
+ <div class="variablelist"><table border="0"><col align="left"/><tbody>
+ <xsl:for-each select="arg">
+ <tr>
+ <td><span class="term"><i><tt><xsl:value-of select="@name"/></tt></i>:</span></td>
+ <td>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="@info"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </xsl:for-each>
+ <xsl:if test="return/@info">
+ <tr>
+ <td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+ <td>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="return/@info"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </xsl:if>
+ </tbody></table></div>
+ </xsl:if>
+ <br/>
+ <xsl:text>
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="function">
+ <xsl:variable name="name" select="string(@name)"/>
+ <xsl:variable name="nlen" select="string-length($name)"/>
+ <xsl:variable name="tlen" select="string-length(return/@type)"/>
+ <xsl:variable name="blen" select="(($nlen + 8) - (($nlen + 8) mod 8)) + (($tlen + 8) - (($tlen + 8) mod 8))"/>
+ <h3><a name="{$name}"></a>Function: <xsl:value-of select="$name"/></h3>
+ <pre class="programlisting">
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="return/@type"/>
+ </xsl:call-template>
+ <xsl:text>&#9;</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="$blen - 40 &lt; -8">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$blen - 40 &lt; 0">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:text>&#9;(</xsl:text>
+ <xsl:if test="not(arg)">
+ <xsl:text>void</xsl:text>
+ </xsl:if>
+ <xsl:for-each select="arg">
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="@type"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="position() != last()">
+ <xsl:text>, </xsl:text><br/>
+ <xsl:if test="$blen - 40 &gt; 8">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$blen - 40 &gt; 0">
+ <xsl:text>&#9;</xsl:text>
+ </xsl:if>
+ <xsl:text>&#9;&#9;&#9;&#9;&#9; </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>)</xsl:text><br/>
+ <xsl:text>
+</xsl:text>
+ </pre>
+ <p>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="info"/>
+ </xsl:call-template>
+ </p><xsl:text>
+</xsl:text>
+ <xsl:if test="arg | return/@info">
+ <div class="variablelist"><table border="0"><col align="left"/><tbody>
+ <xsl:for-each select="arg">
+ <tr>
+ <td><span class="term"><i><tt><xsl:value-of select="@name"/></tt></i>:</span></td>
+ <td>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="@info"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </xsl:for-each>
+ <xsl:if test="return/@info">
+ <tr>
+ <td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+ <td>
+ <xsl:call-template name="dumptext">
+ <xsl:with-param name="text" select="return/@info"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </xsl:if>
+ </tbody></table></div>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="exports" mode="toc">
+ <xsl:apply-templates select="key('symbols', string(@symbol))[1]" mode="toc"/>
+ </xsl:template>
+
+ <xsl:template match="exports">
+ <xsl:apply-templates select="key('symbols', string(@symbol))[1]"/>
+ </xsl:template>
+
+ <xsl:template name="description">
+ <xsl:if test="deprecated">
+ <h2 style="font-weight:bold;color:red;text-align:center">This module is deprecated</h2>
+ </xsl:if>
+ <xsl:if test="description">
+ <p><xsl:value-of select="description"/></p>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="docomponents">
+ <xsl:param name="mode"/>
+ <xsl:apply-templates select="exports[@type='macro']" mode="$mode">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='enum']" mode="$mode">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='typedef']" mode="$mode">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='struct']" mode="$mode">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='function']" mode="$mode">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ </xsl:template>
+
+ <xsl:template match="file">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="title">Module <xsl:value-of select="$name"/> from <xsl:value-of select="/api/@name"/></xsl:variable>
+ <xsl:document href="{$htmldir}/libxml-{$name}.html" method="xml" encoding="ISO-8859-1"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:call-template name="docstyle"/>
+ <title><xsl:value-of select="$title"/></title>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="$title"/>
+ </xsl:call-template>
+ <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">
+ <xsl:call-template name="apitoc"/>
+ </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">
+ <xsl:call-template name="navbar"/>
+ <xsl:call-template name="description"/>
+ <xsl:choose>
+ <xsl:when test="deprecated">
+ <div class="deprecated">
+ <h2>Table of Contents</h2>
+ <xsl:apply-templates select="exports" mode="toc"/>
+ <h2>Description</h2>
+ <xsl:text>
+</xsl:text>
+ <xsl:apply-templates select="exports"/>
+ </div>
+ </xsl:when>
+ <xsl:otherwise>
+ <h2>Table of Contents</h2>
+ <xsl:apply-templates select="exports[@type='macro']" mode="toc">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='enum']" mode="toc">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='typedef']" mode="toc">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='struct']" mode="toc">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='function']" mode="toc">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <h2>Description</h2>
+ <xsl:text>
+</xsl:text>
+ <xsl:apply-templates select="exports[@type='macro']">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='enum']">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='typedef']">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='struct']">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="exports[@type='function']">
+ <xsl:sort select='@symbol'/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ <p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:document>
+ </xsl:template>
+
+ <xsl:template match="file" mode="toc">
+ <xsl:variable name="name" select="@name"/>
+ <li>
+ <a href="libxml-{$name}.html"><xsl:value-of select="$name"/></a>
+ <xsl:text>: </xsl:text>
+ <xsl:value-of select="summary"/>
+ </li>
+ </xsl:template>
+
+ <xsl:template name="mainpage">
+ <xsl:param name="file" select="concat($htmldir, '/index.html')"/>
+ <xsl:variable name="title">Reference Manual for <xsl:value-of select="/api/@name"/></xsl:variable>
+ <xsl:document href="{$file}" method="xml" encoding="ISO-8859-1"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:call-template name="docstyle"/>
+ <title><xsl:value-of select="$title"/></title>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="$title"/>
+ </xsl:call-template>
+ <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">
+ <xsl:call-template name="apitoc"/>
+ </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>
+ <xsl:apply-templates select="/api/files/file" mode="toc"/>
+ </ul>
+ <p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </body>
+ </html>
+ </xsl:document>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <!-- Save the main index.html as well as a couple of copies -->
+ <xsl:call-template name="mainpage"/>
+ <xsl:call-template name="mainpage">
+ <xsl:with-param name="file" select="concat($htmldir, '/book1.html')"/>
+ </xsl:call-template>
+ <xsl:call-template name="mainpage">
+ <xsl:with-param name="file" select="concat($htmldir, '/libxml-lib.html')"/>
+ </xsl:call-template>
+ <!-- now build the file for each of the modules -->
+ <xsl:apply-templates select="/api/files/file"/>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/news.html b/doc/news.html
new file mode 100644
index 0000000..c383ea6
--- /dev/null
+++ b/doc/news.html
@@ -0,0 +1,892 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>News</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>News</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="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal 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"><h3>CVS only : check the <a href="http://cvs.gnome.org/lxr/source/gnome-xml/ChangeLog">Changelog</a> file
+for a really accurate description</h3><p>Items not finished and worked on, get in touch with the list if you want
+to test 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><h3>2.6.8: Mar 23 2004</h3><ul><li>First step of the cleanup of the serialization code and APIs</li>
+ <li>XML Schemas: mixed content (Adam Dickmeiss), QName handling fixes (Adam
+ Dickmeiss), anyURI for "" (John Belmonte)</li>
+ <li>Python: Canonicalization C14N support added (Anthony Carrico)</li>
+ <li>xmlDocCopyNode() extension (William)</li>
+ <li>Relax-NG: fix when processing XInclude results (William), external
+ reference in interleave (William), missing error on &lt;choice&gt;
+ failure (William), memory leak in schemas datatype facets.</li>
+ <li>xmlWriter: patch for better DTD support (Alfred Mickautsch)</li>
+ <li>bug fixes: xmlXPathLangFunction memory leak (Mike Hommey and William
+ Brack), no ID errors if using HTML_PARSE_NOERROR, xmlcatalog fallbacks to
+ URI on SYSTEM lookup failure, XInclude parse flags inheritance (William),
+ XInclude and XPointer fixes for entities (William), XML parser bug
+ reported by Holger Rauch, nanohttp fd leak (William), regexps char
+ groups '-' handling (William), dictionnary reference counting problems,
+ do not close stderr. </li>
+ <li>performance patches from Petr Pajas</li>
+ <li>Documentation fixes: XML_CATALOG_FILES in man pages (Mike Hommey)</li>
+ <li>compilation and portability fixes: --without-valid, catalog cleanups
+ (Peter Breitenlohner), MingW patch (Roland Schwingel), cross-compilation
+ to Windows (Christophe de Vienne), --with-html-dir fixup (Julio Merino
+ Vidal), Windows build (Eric Zurcher)</li>
+</ul><h3>2.6.7: Feb 23 2004</h3><ul><li>documentation: tutorial updates (John Fleck), benchmark results</li>
+ <li>xmlWriter: updates and fixes (Alfred Mickautsch, Lucas Brasilino)</li>
+ <li>XPath optimization (Petr Pajas)</li>
+ <li>DTD ID handling optimization</li>
+ <li>bugfixes: xpath number with &gt; 19 fractional (William Brack), push
+ mode with unescaped '&gt;' characters, fix xmllint --stream --timing, fix
+ xmllint --memory --stream memory usage, xmlAttrSerializeTxtContent
+ handling NULL, trying to fix Relax-NG/Perl interface.</li>
+ <li>python: 2.3 compatibility, whitespace fixes (Malcolm Tredinnick)</li>
+ <li>Added relaxng option to xmllint --shell</li>
+</ul><h3>2.6.6: Feb 12 2004</h3><ul><li>nanohttp and nanoftp: buffer overflow error on URI parsing (Igor and
+ William) reported by Yuuichi Teranishi</li>
+ <li>bugfixes: make test and path issues, xmlWriter attribute serialization
+ (William Brack), xmlWriter indentation (William), schemas validation
+ (Eric Haszlakiewicz), XInclude dictionnaries issues (William and Oleg
+ Paraschenko), XInclude empty fallback (William), HTML warnings (William),
+ XPointer in XInclude (William), Python namespace serialization,
+ isolat1ToUTF8 bound error (Alfred Mickautsch), output of parameter
+ entities in internal subset (William), internal subset bug in push mode,
+ &lt;xs:all&gt; fix (Alexey Sarytchev)</li>
+ <li>Build: fix for automake-1.8 (Alexander Winston), warnings removal
+ (Philip Ludlam), SOCKLEN_T detection fixes (Daniel Richard), fix
+ --with-minimum configuration.</li>
+ <li>XInclude: allow the 2001 namespace without warning.</li>
+ <li>Documentation: missing example/index.html (John Fleck), version
+ dependancies (John Fleck)</li>
+ <li>reader API: structured error reporting (Steve Ball)</li>
+ <li>Windows compilation: mingw, msys (Mikhail Grushinskiy), function
+ prototype (Cameron Johnson), MSVC6 compiler warnings, _WINSOCKAPI_
+ patch</li>
+ <li>Parsers: added xmlByteConsumed(ctxt) API to get the byte offest in
+ input.</li>
+</ul><h3>2.6.5: Jan 25 2004</h3><ul><li>Bugfixes: dictionnaries for schemas (William Brack), regexp segfault
+ (William), xs:all problem (William), a number of XPointer bugfixes
+ (William), xmllint error go to stderr, DTD validation problem with
+ namespace, memory leak (William), SAX1 cleanup and minimal options fixes
+ (Mark Vadoc), parser context reset on error (Shaun McCance), XPath union
+ evaluation problem (William) , xmlReallocLoc with NULL (Aleksey Sanin),
+ XML Schemas double free (Steve Ball), XInclude with no href, argument
+ callbacks order for XPath callbacks (Frederic Peters)</li>
+ <li>Documentation: python scripts (William Brack), xslt stylesheets (John
+ Fleck), doc (Sven Zimmerman), I/O example.</li>
+ <li>Python bindings: fixes (William), enum support (Stéphane Bidoul),
+ structured error reporting (Stéphane Bidoul)</li>
+ <li>XInclude: various fixes for conformance, problem related to dictionnary
+ references (William &amp; me), recursion (William)</li>
+ <li>xmlWriter: indentation (Lucas Brasilino), memory leaks (Alfred
+ Mickautsch),</li>
+ <li>xmlSchemas: normalizedString datatype (John Belmonte)</li>
+ <li>code cleanup for strings functions (William)</li>
+ <li>Windows: compiler patches (Mark Vakoc)</li>
+ <li>Parser optimizations, a few new XPath and dictionnary APIs for future
+ XSLT optimizations.</li>
+</ul><h3>2.6.4: Dec 24 2003</h3><ul><li>Windows build fixes (Igor Zlatkovic)</li>
+ <li>Some serious XInclude problems reported by Oleg Paraschenko and</li>
+ <li>Unix and Makefile packaging fixes (me, William Brack,</li>
+ <li>Documentation improvements (John Fleck, William Brack), example fix
+ (Lucas Brasilino)</li>
+ <li>bugfixes: xmlTextReaderExpand() with xmlReaderWalker, XPath handling of
+ NULL strings (William Brack) , API building reader or parser from
+ filedescriptor should not close it, changed XPath sorting to be stable
+ again (William Brack), xmlGetNodePath() generating '(null)' (William
+ Brack), DTD validation and namespace bug (William Brack), XML Schemas
+ double inclusion behaviour</li>
+</ul><h3>2.6.3: Dec 10 2003</h3><ul><li>documentation updates and cleanup (DV, William Brack, John Fleck)</li>
+ <li>added a repository of examples, examples from Aleksey Sanin, Dodji
+ Seketeli, Alfred Mickautsch</li>
+ <li>Windows updates: Mark Vakoc, Igor Zlatkovic, Eric Zurcher, Mingw
+ (Kenneth Haley)</li>
+ <li>Unicode range checking (William Brack)</li>
+ <li>code cleanup (William Brack)</li>
+ <li>Python bindings: doc (John Fleck), bug fixes</li>
+ <li>UTF-16 cleanup and BOM issues (William Brack)</li>
+ <li>bug fixes: ID and xmlReader validation, XPath (William Brack),
+ xmlWriter (Alfred Mickautsch), hash.h inclusion problem, HTML parser
+ (James Bursa), attribute defaulting and validation, some serialization
+ cleanups, XML_GET_LINE macro, memory debug when using threads (William
+ Brack), serialization of attributes and entities content, xmlWriter
+ (Daniel Schulman)</li>
+ <li>XInclude bugfix, new APIs and update to the last version including the
+ namespace change.</li>
+ <li>XML Schemas improvements: include (Robert Stepanek), import and
+ namespace handling, fixed the regression tests troubles, added examples
+ based on Eric van der Vlist book, regexp fixes</li>
+ <li>preliminary pattern support for streaming (needed for schemas
+ constraints), added xmlTextReaderPreservePattern() to collect subdocument
+ when streaming.</li>
+ <li>various fixes in the structured error handling</li>
+</ul><h3>2.6.2: Nov 4 2003</h3><ul><li>XPath context unregistration fixes</li>
+ <li>text node coalescing fixes (Mark Lilback)</li>
+ <li>API to screate a W3C Schemas from an existing document (Steve Ball)</li>
+ <li>BeOS patches (Marcin 'Shard' Konicki)</li>
+ <li>xmlStrVPrintf function added (Aleksey Sanin)</li>
+ <li>compilation fixes (Mark Vakoc)</li>
+ <li>stdin parsing fix (William Brack)</li>
+ <li>a posteriori DTD validation fixes</li>
+ <li>xmlReader bug fixes: Walker fixes, python bindings</li>
+ <li>fixed xmlStopParser() to really stop the parser and errors</li>
+ <li>always generate line numbers when using the new xmlReadxxx
+ functions</li>
+ <li>added XInclude support to the xmlReader interface</li>
+ <li>implemented XML_PARSE_NONET parser option</li>
+ <li>DocBook XSLT processing bug fixed</li>
+ <li>HTML serialization for &lt;p&gt; elements (William Brack and me)</li>
+ <li>XPointer failure in XInclude are now handled as resource errors</li>
+ <li>fixed xmllint --html to use the HTML serializer on output (added
+ --xmlout to implement the previous behaviour of saving it using the XML
+ serializer)</li>
+</ul><h3>2.6.1: Oct 28 2003</h3><ul><li>Mostly bugfixes after the big 2.6.0 changes</li>
+ <li>Unix compilation patches: libxml.m4 (Patrick Welche), warnings cleanup
+ (William Brack)</li>
+ <li>Windows compilation patches (Joachim Bauch, Stephane Bidoul, Igor
+ Zlatkovic)</li>
+ <li>xmlWriter bugfix (Alfred Mickautsch)</li>
+ <li>chvalid.[ch]: couple of fixes from Stephane Bidoul</li>
+ <li>context reset: error state reset, push parser reset (Graham
+ Bennett)</li>
+ <li>context reuse: generate errors if file is not readable</li>
+ <li>defaulted attributes for element coming from internal entities
+ (Stephane Bidoul)</li>
+ <li>Python: tab and spaces mix (William Brack)</li>
+ <li>Error handler could crash in DTD validation in 2.6.0</li>
+ <li>xmlReader: do not use the document or element _private field</li>
+ <li>testSAX.c: avoid a problem with some PIs (Massimo Morara)</li>
+ <li>general bug fixes: mandatory encoding in text decl, serializing
+ Document Fragment nodes, xmlSearchNs 2.6.0 problem (Kasimier Buchcik),
+ XPath errors not reported, slow HTML parsing of large documents.</li>
+</ul><h3>2.6.0: Oct 20 2003</h3><ul><li>Major revision release: should be API and ABI compatible but got a lot
+ of change</li>
+ <li>Increased the library modularity, far more options can be stripped out,
+ a --with-minimum configuration will weight around 160KBytes</li>
+ <li>Use per parser and per document dictionnary, allocate names and small
+ text nodes from the dictionnary</li>
+ <li>Switch to a SAX2 like parser rewrote most of the XML parser core,
+ provides namespace resolution and defaulted attributes, minimize memory
+ allocations and copies, namespace checking and specific error handling,
+ immutable buffers, make predefined entities static structures, etc...</li>
+ <li>rewrote all the error handling in the library, all errors can be
+ intercepted at a structured level, with precise information
+ available.</li>
+ <li>New simpler and more generic XML and HTML parser APIs, allowing to
+ easilly modify the parsing options and reuse parser context for multiple
+ consecutive documents.</li>
+ <li>Similar new APIs for the xmlReader, for options and reuse, provided new
+ functions to access content as const strings, use them for Python
+ bindings</li>
+ <li>a lot of other smaller API improvements: xmlStrPrintf (Aleksey Sanin),
+ Walker i.e. reader on a document tree based on Alfred Mickautsch code,
+ make room in nodes for line numbers, reference counting and future PSVI
+ extensions, generation of character ranges to be checked with faster
+ algorithm (William), xmlParserMaxDepth (Crutcher Dunnavant), buffer
+ access</li>
+ <li>New xmlWriter API provided by Alfred Mickautsch</li>
+ <li>Schemas: base64 support by Anthony Carrico</li>
+ <li>Parser&lt;-&gt;HTTP integration fix, proper processing of the Mime-Type
+ and charset informations if available.</li>
+ <li>Relax-NG: bug fixes including the one reported by Martijn Faassen and
+ zeroOrMore, better error reporting.</li>
+ <li>Python bindings (Stéphane Bidoul), never use stdout for errors
+ output</li>
+ <li>Portability: all the headers have macros for export and calling
+ convention definitions (Igor Zlatkovic), VMS update (Craig A. Berry),
+ Windows: threads (Jesse Pelton), Borland compiler (Eric Zurcher, Igor),
+ Mingw (Igor), typos (Mark Vakoc), beta version (Stephane Bidoul),
+ warning cleanups on AIX and MIPS compilers (William Brack), BeOS (Marcin
+ 'Shard' Konicki)</li>
+ <li>Documentation fixes and README (William Brack), search fix (William),
+ tutorial updates (John Fleck), namespace docs (Stefan Kost)</li>
+ <li>Bug fixes: xmlCleanupParser (Dave Beckett), threading uninitialized
+ mutexes, HTML doctype lowercase, SAX/IO (William), compression detection
+ and restore (William), attribute declaration in DTDs (William), namespace
+ on attribute in HTML output (William), input filename (Rob Richards),
+ namespace DTD validation, xmlReplaceNode (Chris Ryland), I/O callbacks
+ (Markus Keim), CDATA serialization (Shaun McCance), xmlReader (Peter
+ Derr), high codepoint charref like &amp;#x10FFFF;, buffer access in push
+ mode (Justin Fletcher), TLS threads on Windows (Jesse Pelton), XPath bug
+ (William), xmlCleanupParser (Marc Liyanage), CDATA output (William), HTTP
+ error handling.</li>
+ <li>xmllint options: --dtdvalidfpi for Tobias Reif, --sax1 for compat
+ testing, --nodict for building without tree dictionnary, --nocdata to
+ replace CDATA by text, --nsclean to remove surperfluous namespace
+ declarations</li>
+ <li>added xml2-config --libtool-libs option from Kevin P. Fleming</li>
+ <li>a lot of profiling and tuning of the code, speedup patch for
+ xmlSearchNs() by Luca Padovani. The xmlReader should do far less
+ allocation and it speed should get closer to SAX. Chris Anderson worked
+ on speeding and cleaning up repetitive checking code.</li>
+ <li>cleanup of "make tests"</li>
+ <li>libxml-2.0-uninstalled.pc from Malcolm Tredinnick</li>
+ <li>deactivated the broken docBook SGML parser code and plugged the XML
+ parser instead.</li>
+</ul><h3>2.5.11: Sep 9 2003</h3><p>A bugfix only release:</p><ul><li>risk of crash in Relax-NG</li>
+ <li>risk of crash when using multithreaded programs</li>
+</ul><h3>2.5.10: Aug 15 2003</h3><p>A bugfixes only release</p><ul><li>Windows Makefiles (William Brack)</li>
+ <li>UTF-16 support fixes (Mark Itzcovitz)</li>
+ <li>Makefile and portability (William Brack) automake, Linux alpha, Mingw
+ on Windows (Mikhail Grushinskiy)</li>
+ <li>HTML parser (Oliver Stoeneberg)</li>
+ <li>XInclude performance problem reported by Kevin Ruscoe</li>
+ <li>XML parser performance problem reported by Grant Goodale</li>
+ <li>xmlSAXParseDTD() bug fix from Malcolm Tredinnick</li>
+ <li>and a couple other cleanup</li>
+</ul><h3>2.5.9: Aug 9 2003</h3><ul><li>bugfixes: IPv6 portability, xmlHasNsProp (Markus Keim), Windows build
+ (Wiliam Brake, Jesse Pelton, Igor), Schemas (Peter Sobisch), threading
+ (Rob Richards), hexBinary type (), UTF-16 BOM (Dodji Seketeli),
+ xmlReader, Relax-NG schemas compilation, namespace handling, EXSLT (Sean
+ Griffin), HTML parsing problem (William Brack), DTD validation for mixed
+ content + namespaces, HTML serialization, library initialization,
+ progressive HTML parser</li>
+ <li>better interfaces for Relax-NG error handling (Joachim Bauch, )</li>
+ <li>adding xmlXIncludeProcessTree() for XInclud'ing in a subtree</li>
+ <li>doc fixes and improvements (John Fleck)</li>
+ <li>configure flag for -with-fexceptions when embedding in C++</li>
+ <li>couple of new UTF-8 helper functions (William Brack)</li>
+ <li>general encoding cleanup + ISO-8859-x without iconv (Peter Jacobi)</li>
+ <li>xmlTextReader cleanup + enum for node types (Bjorn Reese)</li>
+ <li>general compilation/warning cleanup Solaris/HP-UX/... (William
+ Brack)</li>
+</ul><h3>2.5.8: Jul 6 2003</h3><ul><li>bugfixes: XPath, XInclude, file/URI mapping, UTF-16 save (Mark
+ Itzcovitz), UTF-8 checking, URI saving, error printing (William Brack),
+ PI related memleak, compilation without schemas or without xpath (Joerg
+ Schmitz-Linneweber/Garry Pennington), xmlUnlinkNode problem with DTDs,
+ rpm problem on , i86_64, removed a few compilation problems from 2.5.7,
+ xmlIOParseDTD, and xmlSAXParseDTD (Malcolm Tredinnick)</li>
+ <li>portability: DJGPP (MsDos) , OpenVMS (Craig A. Berry)</li>
+ <li>William Brack fixed multithreading lock problems</li>
+ <li>IPv6 patch for FTP and HTTP accesses (Archana Shah/Wipro)</li>
+ <li>Windows fixes (Igor Zlatkovic, Eric Zurcher), threading (Stéphane
+ Bidoul)</li>
+ <li>A few W3C Schemas Structure improvements</li>
+ <li>W3C Schemas Datatype improvements (Charlie Bozeman)</li>
+ <li>Python bindings for thread globals (Stéphane Bidoul), and method/class
+ generator</li>
+ <li>added --nonet option to xmllint</li>
+ <li>documentation improvements (John Fleck)</li>
+</ul><h3>2.5.7: Apr 25 2003</h3><ul><li>Relax-NG: Compiling to regexp and streaming validation on top of the
+ xmlReader interface, added to xmllint --stream</li>
+ <li>xmlReader: Expand(), Next() and DOM access glue, bug fixes</li>
+ <li>Support for large files: RGN validated a 4.5GB instance</li>
+ <li>Thread support is now configured in by default</li>
+ <li>Fixes: update of the Trio code (Bjorn), WXS Date and Duration fixes
+ (Charles Bozeman), DTD and namespaces (Brent Hendricks), HTML push parser
+ and zero bytes handling, some missing Windows file path conversions,
+ behaviour of the parser and validator in the presence of "out of memory"
+ error conditions</li>
+ <li>extended the API to be able to plug a garbage collecting memory
+ allocator, added xmlMallocAtomic() and modified the allocations
+ accordingly.</li>
+ <li>Performances: removed excessive malloc() calls, speedup of the push and
+ xmlReader interfaces, removed excessive thread locking</li>
+ <li>Documentation: man page (John Fleck), xmlReader documentation</li>
+ <li>Python: adding binding for xmlCatalogAddLocal (Brent M Hendricks)</li>
+</ul><h3>2.5.6: Apr 1 2003</h3><ul><li>Fixed W3C XML Schemas datatype, should be compliant now except for
+ binHex and base64 which are not supported yet.</li>
+ <li>bug fixes: non-ASCII IDs, HTML output, XInclude on large docs and
+ XInclude entities handling, encoding detection on external subsets, XML
+ Schemas bugs and memory leaks, HTML parser (James Bursa)</li>
+ <li>portability: python/trio (Albert Chin), Sun compiler warnings</li>
+ <li>documentation: added --relaxng option to xmllint man page (John)</li>
+ <li>improved error reporting: xml:space, start/end tag mismatches, Relax NG
+ errors</li>
+</ul><h3>2.5.5: Mar 24 2003</h3><ul><li>Lot of fixes on the Relax NG implementation. More testing including
+ DocBook and TEI examples.</li>
+ <li>Increased the support for W3C XML Schemas datatype</li>
+ <li>Several bug fixes in the URI handling layer</li>
+ <li>Bug fixes: HTML parser, xmlReader, DTD validation, XPath, encoding
+ conversion, line counting in the parser.</li>
+ <li>Added support for $XMLLINT_INDENT environment variable, FTP delete</li>
+ <li>Fixed the RPM spec file name</li>
+</ul><h3>2.5.4: Feb 20 2003</h3><ul><li>Conformance testing and lot of fixes on Relax NG and XInclude
+ implementation</li>
+ <li>Implementation of XPointer element() scheme</li>
+ <li>Bug fixes: XML parser, XInclude entities merge, validity checking on
+ namespaces,
+ <p>2 serialization bugs, node info generation problems, a DTD regexp
+ generation problem.</p>
+ </li>
+ <li>Portability: windows updates and path canonicalization (Igor)</li>
+ <li>A few typo fixes (Kjartan Maraas)</li>
+ <li>Python bindings generator fixes (Stephane Bidoul)</li>
+</ul><h3>2.5.3: Feb 10 2003</h3><ul><li>RelaxNG and XML Schemas datatypes improvements, and added a first
+ version of RelaxNG Python bindings</li>
+ <li>Fixes: XLink (Sean Chittenden), XInclude (Sean Chittenden), API fix for
+ serializing namespace nodes, encoding conversion bug, XHTML1
+ serialization</li>
+ <li>Portability fixes: Windows (Igor), AMD 64bits RPM spec file</li>
+</ul><h3>2.5.2: Feb 5 2003</h3><ul><li>First implementation of RelaxNG, added --relaxng flag to xmllint</li>
+ <li>Schemas support now compiled in by default.</li>
+ <li>Bug fixes: DTD validation, namespace checking, XInclude and entities,
+ delegateURI in XML Catalogs, HTML parser, XML reader (Stéphane Bidoul),
+ XPath parser and evaluation, UTF8ToUTF8 serialization, XML reader memory
+ consumption, HTML parser, HTML serialization in the presence of
+ namespaces</li>
+ <li>added an HTML API to check elements and attributes.</li>
+ <li>Documentation improvement, PDF for the tutorial (John Fleck), doc
+ patches (Stefan Kost)</li>
+ <li>Portability fixes: NetBSD (Julio Merino), Windows (Igor Zlatkovic)</li>
+ <li>Added python bindings for XPointer, contextual error reporting
+ (Stéphane Bidoul)</li>
+ <li>URI/file escaping problems (Stefano Zacchiroli)</li>
+</ul><h3>2.5.1: Jan 8 2003</h3><ul><li>Fixes a memory leak and configuration/compilation problems in 2.5.0</li>
+ <li>documentation updates (John)</li>
+ <li>a couple of XmlTextReader fixes</li>
+</ul><h3>2.5.0: Jan 6 2003</h3><ul><li>New <a href="xmlreader.html">XmltextReader interface</a> based on C#
+ API (with help of Stéphane Bidoul)</li>
+ <li>Windows: more exports, including the new API (Igor)</li>
+ <li>XInclude fallback fix</li>
+ <li>Python: bindings for the new API, packaging (Stéphane Bidoul),
+ drv_libxml2.py Python xml.sax driver (Stéphane Bidoul), fixes, speedup
+ and iterators for Python-2.2 (Hannu Krosing)</li>
+ <li>Tutorial fixes (john Fleck and Niraj Tolia) xmllint man update
+ (John)</li>
+ <li>Fix an XML parser bug raised by Vyacheslav Pindyura</li>
+ <li>Fix for VMS serialization (Nigel Hall) and config (Craig A. Berry)</li>
+ <li>Entities handling fixes</li>
+ <li>new API to optionally track node creation and deletion (Lukas
+ Schroeder)</li>
+ <li>Added documentation for the XmltextReader interface and some <a href="guidelines.html">XML guidelines</a></li>
+</ul><h3>2.4.30: Dec 12 2002</h3><ul><li>2.4.29 broke the python bindings, rereleasing</li>
+ <li>Improvement/fixes of the XML API generator, and couple of minor code
+ fixes.</li>
+</ul><h3>2.4.29: Dec 11 2002</h3><ul><li>Windows fixes (Igor): Windows CE port, pthread linking, python bindings
+ (Stéphane Bidoul), Mingw (Magnus Henoch), and export list updates</li>
+ <li>Fix for prev in python bindings (ERDI Gergo)</li>
+ <li>Fix for entities handling (Marcus Clarke)</li>
+ <li>Refactored the XML and HTML dumps to a single code path, fixed XHTML1
+ dump</li>
+ <li>Fix for URI parsing when handling URNs with fragment identifiers</li>
+ <li>Fix for HTTP URL escaping problem</li>
+ <li>added an TextXmlReader (C#) like API (work in progress)</li>
+ <li>Rewrote the API in XML generation script, includes a C parser and saves
+ more informations needed for C# bindings</li>
+</ul><h3>2.4.28: Nov 22 2002</h3><ul><li>a couple of python binding fixes</li>
+ <li>2 bug fixes in the XML push parser</li>
+ <li>potential memory leak removed (Martin Stoilov)</li>
+ <li>fix to the configure script for Unix (Dimitri Papadopoulos)</li>
+ <li>added encoding support for XInclude parse="text"</li>
+ <li>autodetection of XHTML1 and specific serialization rules added</li>
+ <li>nasty threading bug fixed (William Brack)</li>
+</ul><h3>2.4.27: Nov 17 2002</h3><ul><li>fixes for the Python bindings</li>
+ <li>a number of bug fixes: SGML catalogs, xmlParseBalancedChunkMemory(),
+ HTML parser, Schemas (Charles Bozeman), document fragment support
+ (Christian Glahn), xmlReconciliateNs (Brian Stafford), XPointer,
+ xmlFreeNode(), xmlSAXParseMemory (Peter Jones), xmlGetNodePath (Petr
+ Pajas), entities processing</li>
+ <li>added grep to xmllint --shell</li>
+ <li>VMS update patch from Craig A. Berry</li>
+ <li>cleanup of the Windows build with support for more compilers (Igor),
+ better thread support on Windows</li>
+ <li>cleanup of Unix Makefiles and spec file</li>
+ <li>Improvements to the documentation (John Fleck)</li>
+</ul><h3>2.4.26: Oct 18 2002</h3><ul><li>Patches for Windows CE port, improvements on Windows paths handling</li>
+ <li>Fixes to the validation code (DTD and Schemas), xmlNodeGetPath() ,
+ HTML serialization, Namespace compliance, and a number of small
+ problems</li>
+</ul><h3>2.4.25: Sep 26 2002</h3><ul><li>A number of bug fixes: XPath, validation, Python bindings, DOM and
+ tree, xmlI/O, Html</li>
+ <li>Serious rewrite of XInclude</li>
+ <li>Made XML Schemas regexp part of the default build and APIs, small fix
+ and improvement of the regexp core</li>
+ <li>Changed the validation code to reuse XML Schemas regexp APIs</li>
+ <li>Better handling of Windows file paths, improvement of Makefiles (Igor,
+ Daniel Gehriger, Mark Vakoc)</li>
+ <li>Improved the python I/O bindings, the tests, added resolver and regexp
+ APIs</li>
+ <li>New logos from Marc Liyanage</li>
+ <li>Tutorial improvements: John Fleck, Christopher Harris</li>
+ <li>Makefile: Fixes for AMD x86_64 (Mandrake), DESTDIR (Christophe
+ Merlet)</li>
+ <li>removal of all stderr/perror use for error reporting</li>
+ <li>Better error reporting: XPath and DTD validation</li>
+ <li>update of the trio portability layer (Bjorn Reese)</li>
+</ul><p><strong>2.4.24: Aug 22 2002</strong></p><ul><li>XPath fixes (William), xf:escape-uri() (Wesley Terpstra)</li>
+ <li>Python binding fixes: makefiles (William), generator, rpm build, x86-64
+ (fcrozat)</li>
+ <li>HTML &lt;style&gt; and boolean attributes serializer fixes</li>
+ <li>C14N improvements by Aleksey</li>
+ <li>doc cleanups: Rick Jones</li>
+ <li>Windows compiler makefile updates: Igor and Elizabeth Barham</li>
+ <li>XInclude: implementation of fallback and xml:base fixup added</li>
+</ul><h3>2.4.23: July 6 2002</h3><ul><li>performances patches: Peter Jacobi</li>
+ <li>c14n fixes, testsuite and performances: Aleksey Sanin</li>
+ <li>added xmlDocFormatDump: Chema Celorio</li>
+ <li>new tutorial: John Fleck</li>
+ <li>new hash functions and performances: Sander Vesik, portability fix from
+ Peter Jacobi</li>
+ <li>a number of bug fixes: XPath (William Brack, Richard Jinks), XML and
+ HTML parsers, ID lookup function</li>
+ <li>removal of all remaining sprintf: Aleksey Sanin</li>
+</ul><h3>2.4.22: May 27 2002</h3><ul><li>a number of bug fixes: configure scripts, base handling, parser, memory
+ usage, HTML parser, XPath, documentation (Christian Cornelssen),
+ indentation, URI parsing</li>
+ <li>Optimizations for XMLSec, fixing and making public some of the network
+ protocol handlers (Aleksey)</li>
+ <li>performance patch from Gary Pennington</li>
+ <li>Charles Bozeman provided date and time support for XML Schemas
+ datatypes</li>
+</ul><h3>2.4.21: Apr 29 2002</h3><p>This release is both a bug fix release and also contains the early XML
+Schemas <a href="http://www.w3.org/TR/xmlschema-1/">structures</a> and <a href="http://www.w3.org/TR/xmlschema-2/">datatypes</a> code, beware, all
+interfaces are likely to change, there is huge holes, it is clearly a work in
+progress and don't even think of putting this code in a production system,
+it's actually not compiled in by default. The real fixes are:</p><ul><li>a couple of bugs or limitations introduced in 2.4.20</li>
+ <li>patches for Borland C++ and MSC by Igor</li>
+ <li>some fixes on XPath strings and conformance patches by Richard
+ Jinks</li>
+ <li>patch from Aleksey for the ExcC14N specification</li>
+ <li>OSF/1 bug fix by Bjorn</li>
+</ul><h3>2.4.20: Apr 15 2002</h3><ul><li>bug fixes: file descriptor leak, XPath, HTML output, DTD validation</li>
+ <li>XPath conformance testing by Richard Jinks</li>
+ <li>Portability fixes: Solaris, MPE/iX, Windows, OSF/1, python bindings,
+ libxml.m4</li>
+</ul><h3>2.4.19: Mar 25 2002</h3><ul><li>bug fixes: half a dozen XPath bugs, Validation, ISO-Latin to UTF8
+ encoder</li>
+ <li>portability fixes in the HTTP code</li>
+ <li>memory allocation checks using valgrind, and profiling tests</li>
+ <li>revamp of the Windows build and Makefiles</li>
+</ul><h3>2.4.18: Mar 18 2002</h3><ul><li>bug fixes: tree, SAX, canonicalization, validation, portability,
+ XPath</li>
+ <li>removed the --with-buffer option it was becoming unmaintainable</li>
+ <li>serious cleanup of the Python makefiles</li>
+ <li>speedup patch to XPath very effective for DocBook stylesheets</li>
+ <li>Fixes for Windows build, cleanup of the documentation</li>
+</ul><h3>2.4.17: Mar 8 2002</h3><ul><li>a lot of bug fixes, including "namespace nodes have no parents in
+ XPath"</li>
+ <li>fixed/improved the Python wrappers, added more examples and more
+ regression tests, XPath extension functions can now return node-sets</li>
+ <li>added the XML Canonicalization support from Aleksey Sanin</li>
+</ul><h3>2.4.16: Feb 20 2002</h3><ul><li>a lot of bug fixes, most of them were triggered by the XML Testsuite
+ from OASIS and W3C. Compliance has been significantly improved.</li>
+ <li>a couple of portability fixes too.</li>
+</ul><h3>2.4.15: Feb 11 2002</h3><ul><li>Fixed the Makefiles, especially the python module ones</li>
+ <li>A few bug fixes and cleanup</li>
+ <li>Includes cleanup</li>
+</ul><h3>2.4.14: Feb 8 2002</h3><ul><li>Change of License to the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
+ License</a> basically for integration in XFree86 codebase, and removing
+ confusion around the previous dual-licensing</li>
+ <li>added Python bindings, beta software but should already be quite
+ complete</li>
+ <li>a large number of fixes and cleanups, especially for all tree
+ manipulations</li>
+ <li>cleanup of the headers, generation of a reference API definition in
+ XML</li>
+</ul><h3>2.4.13: Jan 14 2002</h3><ul><li>update of the documentation: John Fleck and Charlie Bozeman</li>
+ <li>cleanup of timing code from Justin Fletcher</li>
+ <li>fixes for Windows and initial thread support on Win32: Igor and Serguei
+ Narojnyi</li>
+ <li>Cygwin patch from Robert Collins</li>
+ <li>added xmlSetEntityReferenceFunc() for Keith Isdale work on xsldbg</li>
+</ul><h3>2.4.12: Dec 7 2001</h3><ul><li>a few bug fixes: thread (Gary Pennington), xmllint (Geert Kloosterman),
+ XML parser (Robin Berjon), XPointer (Danny Jamshy), I/O cleanups
+ (robert)</li>
+ <li>Eric Lavigne contributed project files for MacOS</li>
+ <li>some makefiles cleanups</li>
+</ul><h3>2.4.11: Nov 26 2001</h3><ul><li>fixed a couple of errors in the includes, fixed a few bugs, some code
+ cleanups</li>
+ <li>xmllint man pages improvement by Heiko Rupp</li>
+ <li>updated VMS build instructions from John A Fotheringham</li>
+ <li>Windows Makefiles updates from Igor</li>
+</ul><h3>2.4.10: Nov 10 2001</h3><ul><li>URI escaping fix (Joel Young)</li>
+ <li>added xmlGetNodePath() (for paths or XPointers generation)</li>
+ <li>Fixes namespace handling problems when using DTD and validation</li>
+ <li>improvements on xmllint: Morus Walter patches for --format and
+ --encode, Stefan Kost and Heiko Rupp improvements on the --shell</li>
+ <li>fixes for xmlcatalog linking pointed by Weiqi Gao</li>
+ <li>fixes to the HTML parser</li>
+</ul><h3>2.4.9: Nov 6 2001</h3><ul><li>fixes more catalog bugs</li>
+ <li>avoid a compilation problem, improve xmlGetLineNo()</li>
+</ul><h3>2.4.8: Nov 4 2001</h3><ul><li>fixed SGML catalogs broken in previous release, updated xmlcatalog
+ tool</li>
+ <li>fixed a compile errors and some includes troubles.</li>
+</ul><h3>2.4.7: Oct 30 2001</h3><ul><li>exported some debugging interfaces</li>
+ <li>serious rewrite of the catalog code</li>
+ <li>integrated Gary Pennington thread safety patch, added configure option
+ and regression tests</li>
+ <li>removed an HTML parser bug</li>
+ <li>fixed a couple of potentially serious validation bugs</li>
+ <li>integrated the SGML DocBook support in xmllint</li>
+ <li>changed the nanoftp anonymous login passwd</li>
+ <li>some I/O cleanup and a couple of interfaces for Perl wrapper</li>
+ <li>general bug fixes</li>
+ <li>updated xmllint man page by John Fleck</li>
+ <li>some VMS and Windows updates</li>
+</ul><h3>2.4.6: Oct 10 2001</h3><ul><li>added an updated man pages by John Fleck</li>
+ <li>portability and configure fixes</li>
+ <li>an infinite loop on the HTML parser was removed (William)</li>
+ <li>Windows makefile patches from Igor</li>
+ <li>fixed half a dozen bugs reported for libxml or libxslt</li>
+ <li>updated xmlcatalog to be able to modify SGML super catalogs</li>
+</ul><h3>2.4.5: Sep 14 2001</h3><ul><li>Remove a few annoying bugs in 2.4.4</li>
+ <li>forces the HTML serializer to output decimal charrefs since some
+ version of Netscape can't handle hexadecimal ones</li>
+</ul><h3>1.8.16: Sep 14 2001</h3><ul><li>maintenance release of the old libxml1 branch, couple of bug and
+ portability fixes</li>
+</ul><h3>2.4.4: Sep 12 2001</h3><ul><li>added --convert to xmlcatalog, bug fixes and cleanups of XML
+ Catalog</li>
+ <li>a few bug fixes and some portability changes</li>
+ <li>some documentation cleanups</li>
+</ul><h3>2.4.3: Aug 23 2001</h3><ul><li>XML Catalog support see the doc</li>
+ <li>New NaN/Infinity floating point code</li>
+ <li>A few bug fixes</li>
+</ul><h3>2.4.2: Aug 15 2001</h3><ul><li>adds xmlLineNumbersDefault() to control line number generation</li>
+ <li>lot of bug fixes</li>
+ <li>the Microsoft MSC projects files should now be up to date</li>
+ <li>inheritance of namespaces from DTD defaulted attributes</li>
+ <li>fixes a serious potential security bug</li>
+ <li>added a --format option to xmllint</li>
+</ul><h3>2.4.1: July 24 2001</h3><ul><li>possibility to keep line numbers in the tree</li>
+ <li>some computation NaN fixes</li>
+ <li>extension of the XPath API</li>
+ <li>cleanup for alpha and ia64 targets</li>
+ <li>patch to allow saving through HTTP PUT or POST</li>
+</ul><h3>2.4.0: July 10 2001</h3><ul><li>Fixed a few bugs in XPath, validation, and tree handling.</li>
+ <li>Fixed XML Base implementation, added a couple of examples to the
+ regression tests</li>
+ <li>A bit of cleanup</li>
+</ul><h3>2.3.14: July 5 2001</h3><ul><li>fixed some entities problems and reduce memory requirement when
+ substituting them</li>
+ <li>lots of improvements in the XPath queries interpreter can be
+ substantially faster</li>
+ <li>Makefiles and configure cleanups</li>
+ <li>Fixes to XPath variable eval, and compare on empty node set</li>
+ <li>HTML tag closing bug fixed</li>
+ <li>Fixed an URI reference computation problem when validating</li>
+</ul><h3>2.3.13: June 28 2001</h3><ul><li>2.3.12 configure.in was broken as well as the push mode XML parser</li>
+ <li>a few more fixes for compilation on Windows MSC by Yon Derek</li>
+</ul><h3>1.8.14: June 28 2001</h3><ul><li>Zbigniew Chyla gave a patch to use the old XML parser in push mode</li>
+ <li>Small Makefile fix</li>
+</ul><h3>2.3.12: June 26 2001</h3><ul><li>lots of cleanup</li>
+ <li>a couple of validation fix</li>
+ <li>fixed line number counting</li>
+ <li>fixed serious problems in the XInclude processing</li>
+ <li>added support for UTF8 BOM at beginning of entities</li>
+ <li>fixed a strange gcc optimizer bugs in xpath handling of float, gcc-3.0
+ miscompile uri.c (William), Thomas Leitner provided a fix for the
+ optimizer on Tru64</li>
+ <li>incorporated Yon Derek and Igor Zlatkovic fixes and improvements for
+ compilation on Windows MSC</li>
+ <li>update of libxml-doc.el (Felix Natter)</li>
+ <li>fixed 2 bugs in URI normalization code</li>
+</ul><h3>2.3.11: June 17 2001</h3><ul><li>updates to trio, Makefiles and configure should fix some portability
+ problems (alpha)</li>
+ <li>fixed some HTML serialization problems (pre, script, and block/inline
+ handling), added encoding aware APIs, cleanup of this code</li>
+ <li>added xmlHasNsProp()</li>
+ <li>implemented a specific PI for encoding support in the DocBook SGML
+ parser</li>
+ <li>some XPath fixes (-Infinity, / as a function parameter and namespaces
+ node selection)</li>
+ <li>fixed a performance problem and an error in the validation code</li>
+ <li>fixed XInclude routine to implement the recursive behaviour</li>
+ <li>fixed xmlFreeNode problem when libxml is included statically twice</li>
+ <li>added --version to xmllint for bug reports</li>
+</ul><h3>2.3.10: June 1 2001</h3><ul><li>fixed the SGML catalog support</li>
+ <li>a number of reported bugs got fixed, in XPath, iconv detection,
+ XInclude processing</li>
+ <li>XPath string function should now handle unicode correctly</li>
+</ul><h3>2.3.9: May 19 2001</h3><p>Lots of bugfixes, and added a basic SGML catalog support:</p><ul><li>HTML push bugfix #54891 and another patch from Jonas Borgström</li>
+ <li>some serious speed optimization again</li>
+ <li>some documentation cleanups</li>
+ <li>trying to get better linking on Solaris (-R)</li>
+ <li>XPath API cleanup from Thomas Broyer</li>
+ <li>Validation bug fixed #54631, added a patch from Gary Pennington, fixed
+ xmlValidGetValidElements()</li>
+ <li>Added an INSTALL file</li>
+ <li>Attribute removal added to API: #54433</li>
+ <li>added a basic support for SGML catalogs</li>
+ <li>fixed xmlKeepBlanksDefault(0) API</li>
+ <li>bugfix in xmlNodeGetLang()</li>
+ <li>fixed a small configure portability problem</li>
+ <li>fixed an inversion of SYSTEM and PUBLIC identifier in HTML document</li>
+</ul><h3>1.8.13: May 14 2001</h3><ul><li>bugfixes release of the old libxml1 branch used by Gnome</li>
+</ul><h3>2.3.8: May 3 2001</h3><ul><li>Integrated an SGML DocBook parser for the Gnome project</li>
+ <li>Fixed a few things in the HTML parser</li>
+ <li>Fixed some XPath bugs raised by XSLT use, tried to fix the floating
+ point portability issue</li>
+ <li>Speed improvement (8M/s for SAX, 3M/s for DOM, 1.5M/s for
+ DOM+validation using the XML REC as input and a 700MHz celeron).</li>
+ <li>incorporated more Windows cleanup</li>
+ <li>added xmlSaveFormatFile()</li>
+ <li>fixed problems in copying nodes with entities references (gdome)</li>
+ <li>removed some troubles surrounding the new validation module</li>
+</ul><h3>2.3.7: April 22 2001</h3><ul><li>lots of small bug fixes, corrected XPointer</li>
+ <li>Non deterministic content model validation support</li>
+ <li>added xmlDocCopyNode for gdome2</li>
+ <li>revamped the way the HTML parser handles end of tags</li>
+ <li>XPath: corrections of namespaces support and number formatting</li>
+ <li>Windows: Igor Zlatkovic patches for MSC compilation</li>
+ <li>HTML output fixes from P C Chow and William M. Brack</li>
+ <li>Improved validation speed sensible for DocBook</li>
+ <li>fixed a big bug with ID declared in external parsed entities</li>
+ <li>portability fixes, update of Trio from Bjorn Reese</li>
+</ul><h3>2.3.6: April 8 2001</h3><ul><li>Code cleanup using extreme gcc compiler warning options, found and
+ cleared half a dozen potential problem</li>
+ <li>the Eazel team found an XML parser bug</li>
+ <li>cleaned up the user of some of the string formatting function. used the
+ trio library code to provide the one needed when the platform is missing
+ them</li>
+ <li>xpath: removed a memory leak and fixed the predicate evaluation
+ problem, extended the testsuite and cleaned up the result. XPointer seems
+ broken ...</li>
+</ul><h3>2.3.5: Mar 23 2001</h3><ul><li>Biggest change is separate parsing and evaluation of XPath expressions,
+ there is some new APIs for this too</li>
+ <li>included a number of bug fixes(XML push parser, 51876, notations,
+ 52299)</li>
+ <li>Fixed some portability issues</li>
+</ul><h3>2.3.4: Mar 10 2001</h3><ul><li>Fixed bugs #51860 and #51861</li>
+ <li>Added a global variable xmlDefaultBufferSize to allow default buffer
+ size to be application tunable.</li>
+ <li>Some cleanup in the validation code, still a bug left and this part
+ should probably be rewritten to support ambiguous content model :-\</li>
+ <li>Fix a couple of serious bugs introduced or raised by changes in 2.3.3
+ parser</li>
+ <li>Fixed another bug in xmlNodeGetContent()</li>
+ <li>Bjorn fixed XPath node collection and Number formatting</li>
+ <li>Fixed a loop reported in the HTML parsing</li>
+ <li>blank space are reported even if the Dtd content model proves that they
+ are formatting spaces, this is for XML conformance</li>
+</ul><h3>2.3.3: Mar 1 2001</h3><ul><li>small change in XPath for XSLT</li>
+ <li>documentation cleanups</li>
+ <li>fix in validation by Gary Pennington</li>
+ <li>serious parsing performances improvements</li>
+</ul><h3>2.3.2: Feb 24 2001</h3><ul><li>chasing XPath bugs, found a bunch, completed some TODO</li>
+ <li>fixed a Dtd parsing bug</li>
+ <li>fixed a bug in xmlNodeGetContent</li>
+ <li>ID/IDREF support partly rewritten by Gary Pennington</li>
+</ul><h3>2.3.1: Feb 15 2001</h3><ul><li>some XPath and HTML bug fixes for XSLT</li>
+ <li>small extension of the hash table interfaces for DOM gdome2
+ implementation</li>
+ <li>A few bug fixes</li>
+</ul><h3>2.3.0: Feb 8 2001 (2.2.12 was on 25 Jan but I didn't kept track)</h3><ul><li>Lots of XPath bug fixes</li>
+ <li>Add a mode with Dtd lookup but without validation error reporting for
+ XSLT</li>
+ <li>Add support for text node without escaping (XSLT)</li>
+ <li>bug fixes for xmlCheckFilename</li>
+ <li>validation code bug fixes from Gary Pennington</li>
+ <li>Patch from Paul D. Smith correcting URI path normalization</li>
+ <li>Patch to allow simultaneous install of libxml-devel and
+ libxml2-devel</li>
+ <li>the example Makefile is now fixed</li>
+ <li>added HTML to the RPM packages</li>
+ <li>tree copying bugfixes</li>
+ <li>updates to Windows makefiles</li>
+ <li>optimization patch from Bjorn Reese</li>
+</ul><h3>2.2.11: Jan 4 2001</h3><ul><li>bunch of bug fixes (memory I/O, xpath, ftp/http, ...)</li>
+ <li>added htmlHandleOmittedElem()</li>
+ <li>Applied Bjorn Reese's IPV6 first patch</li>
+ <li>Applied Paul D. Smith patches for validation of XInclude results</li>
+ <li>added XPointer xmlns() new scheme support</li>
+</ul><h3>2.2.10: Nov 25 2000</h3><ul><li>Fix the Windows problems of 2.2.8</li>
+ <li>integrate OpenVMS patches</li>
+ <li>better handling of some nasty HTML input</li>
+ <li>Improved the XPointer implementation</li>
+ <li>integrate a number of provided patches</li>
+</ul><h3>2.2.9: Nov 25 2000</h3><ul><li>erroneous release :-(</li>
+</ul><h3>2.2.8: Nov 13 2000</h3><ul><li>First version of <a href="http://www.w3.org/TR/xinclude">XInclude</a>
+ support</li>
+ <li>Patch in conditional section handling</li>
+ <li>updated MS compiler project</li>
+ <li>fixed some XPath problems</li>
+ <li>added an URI escaping function</li>
+ <li>some other bug fixes</li>
+</ul><h3>2.2.7: Oct 31 2000</h3><ul><li>added message redirection</li>
+ <li>XPath improvements (thanks TOM !)</li>
+ <li>xmlIOParseDTD() added</li>
+ <li>various small fixes in the HTML, URI, HTTP and XPointer support</li>
+ <li>some cleanup of the Makefile, autoconf and the distribution content</li>
+</ul><h3>2.2.6: Oct 25 2000:</h3><ul><li>Added an hash table module, migrated a number of internal structure to
+ those</li>
+ <li>Fixed a posteriori validation problems</li>
+ <li>HTTP module cleanups</li>
+ <li>HTML parser improvements (tag errors, script/style handling, attribute
+ normalization)</li>
+ <li>coalescing of adjacent text nodes</li>
+ <li>couple of XPath bug fixes, exported the internal API</li>
+</ul><h3>2.2.5: Oct 15 2000:</h3><ul><li>XPointer implementation and testsuite</li>
+ <li>Lot of XPath fixes, added variable and functions registration, more
+ tests</li>
+ <li>Portability fixes, lots of enhancements toward an easy Windows build
+ and release</li>
+ <li>Late validation fixes</li>
+ <li>Integrated a lot of contributed patches</li>
+ <li>added memory management docs</li>
+ <li>a performance problem when using large buffer seems fixed</li>
+</ul><h3>2.2.4: Oct 1 2000:</h3><ul><li>main XPath problem fixed</li>
+ <li>Integrated portability patches for Windows</li>
+ <li>Serious bug fixes on the URI and HTML code</li>
+</ul><h3>2.2.3: Sep 17 2000</h3><ul><li>bug fixes</li>
+ <li>cleanup of entity handling code</li>
+ <li>overall review of all loops in the parsers, all sprintf usage has been
+ checked too</li>
+ <li>Far better handling of larges Dtd. Validating against DocBook XML Dtd
+ works smoothly now.</li>
+</ul><h3>1.8.10: Sep 6 2000</h3><ul><li>bug fix release for some Gnome projects</li>
+</ul><h3>2.2.2: August 12 2000</h3><ul><li>mostly bug fixes</li>
+ <li>started adding routines to access xml parser context options</li>
+</ul><h3>2.2.1: July 21 2000</h3><ul><li>a purely bug fixes release</li>
+ <li>fixed an encoding support problem when parsing from a memory block</li>
+ <li>fixed a DOCTYPE parsing problem</li>
+ <li>removed a bug in the function allowing to override the memory
+ allocation routines</li>
+</ul><h3>2.2.0: July 14 2000</h3><ul><li>applied a lot of portability fixes</li>
+ <li>better encoding support/cleanup and saving (content is now always
+ encoded in UTF-8)</li>
+ <li>the HTML parser now correctly handles encodings</li>
+ <li>added xmlHasProp()</li>
+ <li>fixed a serious problem with &amp;#38;</li>
+ <li>propagated the fix to FTP client</li>
+ <li>cleanup, bugfixes, etc ...</li>
+ <li>Added a page about <a href="encoding.html">libxml Internationalization
+ support</a></li>
+</ul><h3>1.8.9: July 9 2000</h3><ul><li>fixed the spec the RPMs should be better</li>
+ <li>fixed a serious bug in the FTP implementation, released 1.8.9 to solve
+ rpmfind users problem</li>
+</ul><h3>2.1.1: July 1 2000</h3><ul><li>fixes a couple of bugs in the 2.1.0 packaging</li>
+ <li>improvements on the HTML parser</li>
+</ul><h3>2.1.0 and 1.8.8: June 29 2000</h3><ul><li>1.8.8 is mostly a commodity package for upgrading to libxml2 according
+ to <a href="upgrade.html">new instructions</a>. It fixes a nasty problem
+ about &amp;#38; charref parsing</li>
+ <li>2.1.0 also ease the upgrade from libxml v1 to the recent version. it
+ also contains numerous fixes and enhancements:
+ <ul><li>added xmlStopParser() to stop parsing</li>
+ <li>improved a lot parsing speed when there is large CDATA blocs</li>
+ <li>includes XPath patches provided by Picdar Technology</li>
+ <li>tried to fix as much as possible DTD validation and namespace
+ related problems</li>
+ <li>output to a given encoding has been added/tested</li>
+ <li>lot of various fixes</li>
+ </ul></li>
+</ul><h3>2.0.0: Apr 12 2000</h3><ul><li>First public release of libxml2. If you are using libxml, it's a good
+ idea to check the 1.x to 2.x upgrade instructions. NOTE: while initially
+ scheduled for Apr 3 the release occurred only on Apr 12 due to massive
+ workload.</li>
+ <li>The include are now located under $prefix/include/libxml (instead of
+ $prefix/include/gnome-xml), they also are referenced by
+ <pre>#include &lt;libxml/xxx.h&gt;</pre>
+ <p>instead of</p>
+ <pre>#include "xxx.h"</pre>
+ </li>
+ <li>a new URI module for parsing URIs and following strictly RFC 2396</li>
+ <li>the memory allocation routines used by libxml can now be overloaded
+ dynamically by using xmlMemSetup()</li>
+ <li>The previously CVS only tool tester has been renamed
+ <strong>xmllint</strong> and is now installed as part of the libxml2
+ package</li>
+ <li>The I/O interface has been revamped. There is now ways to plug in
+ specific I/O modules, either at the URI scheme detection level using
+ xmlRegisterInputCallbacks() or by passing I/O functions when creating a
+ parser context using xmlCreateIOParserCtxt()</li>
+ <li>there is a C preprocessor macro LIBXML_VERSION providing the version
+ number of the libxml module in use</li>
+ <li>a number of optional features of libxml can now be excluded at
+ configure time (FTP/HTTP/HTML/XPath/Debug)</li>
+</ul><h3>2.0.0beta: Mar 14 2000</h3><ul><li>This is a first Beta release of libxml version 2</li>
+ <li>It's available only from<a href="ftp://xmlsoft.org/">xmlsoft.org
+ FTP</a>, it's packaged as libxml2-2.0.0beta and available as tar and
+ RPMs</li>
+ <li>This version is now the head in the Gnome CVS base, the old one is
+ available under the tag LIB_XML_1_X</li>
+ <li>This includes a very large set of changes. From a programmatic point
+ of view applications should not have to be modified too much, check the
+ <a href="upgrade.html">upgrade page</a></li>
+ <li>Some interfaces may changes (especially a bit about encoding).</li>
+ <li>the updates includes:
+ <ul><li>fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
+ handled now</li>
+ <li>Better handling of entities, especially well-formedness checking
+ and proper PEref extensions in external subsets</li>
+ <li>DTD conditional sections</li>
+ <li>Validation now correctly handle entities content</li>
+ <li><a href="http://rpmfind.net/tools/gdome/messages/0039.html">change
+ structures to accommodate DOM</a></li>
+ </ul></li>
+ <li>Serious progress were made toward compliance, <a href="conf/result.html">here are the result of the test</a> against the
+ OASIS testsuite (except the Japanese tests since I don't support that
+ encoding yet). This URL is rebuilt every couple of hours using the CVS
+ head version.</li>
+</ul><h3>1.8.7: Mar 6 2000</h3><ul><li>This is a bug fix release:</li>
+ <li>It is possible to disable the ignorable blanks heuristic used by
+ libxml-1.x, a new function xmlKeepBlanksDefault(0) will allow this. Note
+ that for adherence to XML spec, this behaviour will be disabled by
+ default in 2.x . The same function will allow to keep compatibility for
+ old code.</li>
+ <li>Blanks in &lt;a&gt; &lt;/a&gt; constructs are not ignored anymore,
+ avoiding heuristic is really the Right Way :-\</li>
+ <li>The unchecked use of snprintf which was breaking libxml-1.8.6
+ compilation on some platforms has been fixed</li>
+ <li>nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when processing
+ URIs</li>
+</ul><h3>1.8.6: Jan 31 2000</h3><ul><li>added a nanoFTP transport module, debugged until the new version of <a href="http://rpmfind.net/linux/rpm2html/rpmfind.html">rpmfind</a> can use
+ it without troubles</li>
+</ul><h3>1.8.5: Jan 21 2000</h3><ul><li>adding APIs to parse a well balanced chunk of XML (production <a href="http://www.w3.org/TR/REC-xml#NT-content">[43] content</a> of the
+ XML spec)</li>
+ <li>fixed a hideous bug in xmlGetProp pointed by Rune.Djurhuus@fast.no</li>
+ <li>Jody Goldberg &lt;jgoldberg@home.com&gt; provided another patch trying
+ to solve the zlib checks problems</li>
+ <li>The current state in gnome CVS base is expected to ship as 1.8.5 with
+ gnumeric soon</li>
+</ul><h3>1.8.4: Jan 13 2000</h3><ul><li>bug fixes, reintroduced xmlNewGlobalNs(), fixed xmlNewNs()</li>
+ <li>all exit() call should have been removed from libxml</li>
+ <li>fixed a problem with INCLUDE_WINSOCK on WIN32 platform</li>
+ <li>added newDocFragment()</li>
+</ul><h3>1.8.3: Jan 5 2000</h3><ul><li>a Push interface for the XML and HTML parsers</li>
+ <li>a shell-like interface to the document tree (try tester --shell :-)</li>
+ <li>lots of bug fixes and improvement added over XMas holidays</li>
+ <li>fixed the DTD parsing code to work with the xhtml DTD</li>
+ <li>added xmlRemoveProp(), xmlRemoveID() and xmlRemoveRef()</li>
+ <li>Fixed bugs in xmlNewNs()</li>
+ <li>External entity loading code has been revamped, now it uses
+ xmlLoadExternalEntity(), some fix on entities processing were added</li>
+ <li>cleaned up WIN32 includes of socket stuff</li>
+</ul><h3>1.8.2: Dec 21 1999</h3><ul><li>I got another problem with includes and C++, I hope this issue is fixed
+ for good this time</li>
+ <li>Added a few tree modification functions: xmlReplaceNode,
+ xmlAddPrevSibling, xmlAddNextSibling, xmlNodeSetName and
+ xmlDocSetRootElement</li>
+ <li>Tried to improve the HTML output with help from <a href="mailto:clahey@umich.edu">Chris Lahey</a></li>
+</ul><h3>1.8.1: Dec 18 1999</h3><ul><li>various patches to avoid troubles when using libxml with C++ compilers
+ the "namespace" keyword and C escaping in include files</li>
+ <li>a problem in one of the core macros IS_CHAR was corrected</li>
+ <li>fixed a bug introduced in 1.8.0 breaking default namespace processing,
+ and more specifically the Dia application</li>
+ <li>fixed a posteriori validation (validation after parsing, or by using a
+ Dtd not specified in the original document)</li>
+ <li>fixed a bug in</li>
+</ul><h3>1.8.0: Dec 12 1999</h3><ul><li>cleanup, especially memory wise</li>
+ <li>the parser should be more reliable, especially the HTML one, it should
+ not crash, whatever the input !</li>
+ <li>Integrated various patches, especially a speedup improvement for large
+ dataset from <a href="mailto:cnygard@bellatlantic.net">Carl Nygard</a>,
+ configure with --with-buffers to enable them.</li>
+ <li>attribute normalization, oops should have been added long ago !</li>
+ <li>attributes defaulted from DTDs should be available, xmlSetProp() now
+ does entities escaping by default.</li>
+</ul><h3>1.7.4: Oct 25 1999</h3><ul><li>Lots of HTML improvement</li>
+ <li>Fixed some errors when saving both XML and HTML</li>
+ <li>More examples, the regression tests should now look clean</li>
+ <li>Fixed a bug with contiguous charref</li>
+</ul><h3>1.7.3: Sep 29 1999</h3><ul><li>portability problems fixed</li>
+ <li>snprintf was used unconditionally, leading to link problems on system
+ were it's not available, fixed</li>
+</ul><h3>1.7.1: Sep 24 1999</h3><ul><li>The basic type for strings manipulated by libxml has been renamed in
+ 1.7.1 from <strong>CHAR</strong> to <strong>xmlChar</strong>. The reason
+ is that CHAR was conflicting with a predefined type on Windows. However
+ on non WIN32 environment, compatibility is provided by the way of a
+ <strong>#define </strong>.</li>
+ <li>Changed another error : the use of a structure field called errno, and
+ leading to troubles on platforms where it's a macro</li>
+</ul><h3>1.7.0: Sep 23 1999</h3><ul><li>Added the ability to fetch remote DTD or parsed entities, see the <a href="html/libxml-nanohttp.html">nanohttp</a> module.</li>
+ <li>Added an errno to report errors by another mean than a simple printf
+ like callback</li>
+ <li>Finished ID/IDREF support and checking when validation</li>
+ <li>Serious memory leaks fixed (there is now a <a href="html/libxml-xmlmemory.html">memory wrapper</a> module)</li>
+ <li>Improvement of <a href="http://www.w3.org/TR/xpath">XPath</a>
+ implementation</li>
+ <li>Added an HTML parser front-end</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/news.xsl b/doc/news.xsl
new file mode 100644
index 0000000..2312e0d
--- /dev/null
+++ b/doc/news.xsl
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"
+ version="1.0">
+ <xsl:output method="text" encoding="ISO-8859-1"/>
+
+ <xsl:template match="/">
+ <xsl:text>
+ NEWS file for libxml2
+
+ Note that this is automatically generated from the news webpage at:
+ http://xmlsoft.org/news.html
+
+</xsl:text>
+ <xsl:apply-templates select="//xhtml:h3[1]/.."/>
+ </xsl:template>
+ <xsl:template match="xhtml:h3">
+ <xsl:text>
+</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>:
+</xsl:text>
+ </xsl:template>
+ <xsl:template match="xhtml:ul">
+ <xsl:apply-templates select=".//xhtml:li"/>
+ <xsl:text>
+</xsl:text>
+ </xsl:template>
+ <xsl:template match="xhtml:li">
+ <xsl:text> - </xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>
+</xsl:text>
+ </xsl:template>
+ <xsl:template match="xhtml:a">
+ <xsl:value-of select="."/>
+ <xsl:text> at
+</xsl:text>
+ <xsl:value-of select="@href"/>
+ <xsl:text>
+</xsl:text>
+ </xsl:template>
+</xsl:stylesheet>
+
diff --git a/doc/parsers.html b/doc/parsers.html
new file mode 100644
index 0000000..964be55
--- /dev/null
+++ b/doc/parsers.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html">
+ <style type="text/css">
+ </style>
+ <title>Libxml2 Parsers Interfaces tutorial</title>
+</head>
+
+<body bgcolor="#fffacd" text="#000000">
+<h1 align="center">Libxml2 Parsers Interfaces tutorial</h1>
+
+<p></p>
+
+<p>This document provides an overview of the the different parsers interfaces
+provided by libxml2. There is 2 parsers available to deal with both XML and
+HTML, which can be used with 3 groups of APIs offering callbacks, streaming
+or tree results, and then there is different ways to provide the data to the
+parser. This document describes the set of interfaces available in version
+2.6.5:</p>
+<ul>
+ <li><a href="#Descriptio">Description of the parsers</a></li>
+ <li><a href="#callback">The callback based SAX(2) interface</a></li>
+ <li><a href="#xmlReader">The xmlReader interface</a></li>
+ <li><a href="#tree">The tree interface</a></li>
+ <li><a href="#Parser">Parser in pull mode</a></li>
+ <li><a href="#Parser1">Parser in push mode</a></li>
+</ul>
+
+<h2><a name="Descriptio">Description of the parsers</a></h2>
+
+<p>The parser are the core piece of the library which consumes the data,
+analyze and check the content and structure and returns the the informations
+and errors in a structured fashion to the application. The C structure <a
+href="html/libxml-tree.html#xmlParserCtxt">xmlParserCtxt </a>driving this
+process is public but should rather be used through the available APIs. It is
+the same for the HTML and XML parsers though most of the data are used only
+for XML parsing.</p>
+
+<h2><a name="callback">The callback based SAX(2) interface</a></h2>
+
+<p>The SAX callback interface is the lowest level interface available from
+the parsers, all the other interfaces are actually built on top of this very
+low level layer. It is really fast but somewhat complex due to the callback
+programming model and lack of advanced features like validation. The
+principle is that as the parser is making progresses through the document
+data it will indicate the application of the informations found using
+callback registered when building the parser. </p>
+
+<h2><a name="xmlReader">The xmlReader interface</a></h2>
+
+<h2><a name="tree">The tree interface</a></h2>
+
+<h2><a name="Parser">Parser in pull mode</a></h2>
+
+<h2><a name="Parser1">Parser in push mode</a></h2>
+
+<p><a href="mailto:veillard@redhat.com">Daniel Veillard</a></p>
+
+<p>$Id$</p>
+
+<p></p>
+</body>
+</html>
diff --git a/doc/python.html b/doc/python.html
new file mode 100644
index 0000000..44e3d09
--- /dev/null
+++ b/doc/python.html
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Python and bindings</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Python and bindings</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>There are a number of language bindings and wrappers available for
+libxml2, the list below is not exhaustive. Please contact the <a href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
+(<a href="http://mail.gnome.org/archives/xml-bindings/">archives</a>) in
+order to get updates to this list or to discuss the specific topic of libxml2
+or libxslt wrappers or bindings:</p><ul><li><a href="http://libxmlplusplus.sourceforge.net/">Libxml++</a> seems the
+ most up-to-date C++ bindings for libxml2, check the <a href="http://libxmlplusplus.sourceforge.net/reference/html/hierarchy.html">documentation</a>
+ and the <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/libxmlplusplus/libxml%2b%2b/examples/">examples</a>.</li>
+ <li>There is another <a href="http://libgdome-cpp.berlios.de/">C++ wrapper
+ based on the gdome2 bindings</a> maintained by Tobias Peters.</li>
+ <li>and a third C++ wrapper by Peter Jones &lt;pjones@pmade.org&gt;
+ <p>Website: <a href="http://pmade.org/pjones/software/xmlwrapp/">http://pmade.org/pjones/software/xmlwrapp/</a></p>
+ </li>
+ <li><a href="http://mail.gnome.org/archives/xml/2001-March/msg00014.html">Matt
+ Sergeant</a> developed <a href="http://axkit.org/download/">XML::LibXSLT</a>, a Perl wrapper for
+ libxml2/libxslt as part of the <a href="http://axkit.com/">AxKit XML
+ application server</a>.</li>
+ <li>If you're interested into scripting XML processing, have a look at <a href="http://xsh.sourceforge.net/">XSH</a> an XML editing shell based on
+ Libxml2 Perl bindings.</li>
+ <li><a href="mailto:dkuhlman@cutter.rexx.com">Dave Kuhlman</a> provides an
+ earlier version of the libxml/libxslt <a href="http://www.rexx.com/~dkuhlman">wrappers for Python</a>.</li>
+ <li>Gopal.V and Peter Minten develop <a href="http://savannah.gnu.org/projects/libxmlsharp">libxml#</a>, a set of
+ C# libxml2 bindings.</li>
+ <li>Petr Kozelka provides <a href="http://sourceforge.net/projects/libxml2-pas">Pascal units to glue
+ libxml2</a> with Kylix, Delphi and other Pascal compilers.</li>
+ <li>Uwe Fechner also provides <a href="http://sourceforge.net/projects/idom2-pas/">idom2</a>, a DOM2
+ implementation for Kylix2/D5/D6 from Borland.</li>
+ <li>Wai-Sun "Squidster" Chia provides <a href="http://www.rubycolor.org/arc/redist/">bindings for Ruby</a> and
+ libxml2 bindings are also available in Ruby through the <a href="http://libgdome-ruby.berlios.de/">libgdome-ruby</a> module
+ maintained by Tobias Peters.</li>
+ <li>Steve Ball and contributors maintains <a href="http://tclxml.sourceforge.net/">libxml2 and libxslt bindings for
+ Tcl</a>.</li>
+ <li>There is support for libxml2 in the DOM module of PHP.</li>
+ <li><a href="http://savannah.gnu.org/projects/classpathx/">LibxmlJ</a> is
+ an effort to create a 100% JAXP-compatible Java wrapper for libxml2 and
+ libxslt as part of GNU ClasspathX project.</li>
+ <li>Patrick McPhee provides Rexx bindings fof libxml2 and libxslt, look for
+ <a href="http://www.interlog.com/~ptjm/software.html">RexxXML</a>.</li>
+</ul><p>The distribution includes a set of Python bindings, which are guaranteed
+to be maintained as part of the library in the future, though the Python
+interface have not yet reached the completeness of the C API.</p><p><a href="mailto:stephane.bidoul@softwareag.com">Stéphane Bidoul</a>
+maintains <a href="http://users.skynet.be/sbi/libxml-python/">a Windows port
+of the Python bindings</a>.</p><p>Note to people interested in building bindings, the API is formalized as
+<a href="libxml2-api.xml">an XML API description file</a> which allows to
+automate a large part of the Python bindings, this includes function
+descriptions, enums, structures, typedefs, etc... The Python script used to
+build the bindings is python/generator.py in the source distribution.</p><p>To install the Python bindings there are 2 options:</p><ul><li>If you use an RPM based distribution, simply install the <a href="http://rpmfind.net/linux/rpm2html/search.php?query=libxml2-python">libxml2-python
+ RPM</a> (and if needed the <a href="http://rpmfind.net/linux/rpm2html/search.php?query=libxslt-python">libxslt-python
+ RPM</a>).</li>
+ <li>Otherwise use the <a href="ftp://xmlsoft.org/python/">libxml2-python
+ module distribution</a> corresponding to your installed version of
+ libxml2 and libxslt. Note that to install it you will need both libxml2
+ and libxslt installed and run "python setup.py build install" in the
+ module tree.</li>
+</ul><p>The distribution includes a set of examples and regression tests for the
+python bindings in the <code>python/tests</code> directory. Here are some
+excerpts from those tests:</p><h3>tst.py:</h3><p>This is a basic test of the file interface and DOM navigation:</p><pre>import libxml2, sys
+
+doc = libxml2.parseFile("tst.xml")
+if doc.name != "tst.xml":
+ print "doc.name failed"
+ sys.exit(1)
+root = doc.children
+if root.name != "doc":
+ print "root.name failed"
+ sys.exit(1)
+child = root.children
+if child.name != "foo":
+ print "child.name failed"
+ sys.exit(1)
+doc.freeDoc()</pre><p>The Python module is called libxml2; parseFile is the equivalent of
+xmlParseFile (most of the bindings are automatically generated, and the xml
+prefix is removed and the casing convention are kept). All node seen at the
+binding level share the same subset of accessors:</p><ul><li><code>name</code> : returns the node name</li>
+ <li><code>type</code> : returns a string indicating the node type</li>
+ <li><code>content</code> : returns the content of the node, it is based on
+ xmlNodeGetContent() and hence is recursive.</li>
+ <li><code>parent</code> , <code>children</code>, <code>last</code>,
+ <code>next</code>, <code>prev</code>, <code>doc</code>,
+ <code>properties</code>: pointing to the associated element in the tree,
+ those may return None in case no such link exists.</li>
+</ul><p>Also note the need to explicitly deallocate documents with freeDoc() .
+Reference counting for libxml2 trees would need quite a lot of work to
+function properly, and rather than risk memory leaks if not implemented
+correctly it sounds safer to have an explicit function to free a tree. The
+wrapper python objects like doc, root or child are them automatically garbage
+collected.</p><h3>validate.py:</h3><p>This test check the validation interfaces and redirection of error
+messages:</p><pre>import libxml2
+
+#deactivate error messages from the validation
+def noerr(ctx, str):
+ pass
+
+libxml2.registerErrorHandler(noerr, None)
+
+ctxt = libxml2.createFileParserCtxt("invalid.xml")
+ctxt.validate(1)
+ctxt.parseDocument()
+doc = ctxt.doc()
+valid = ctxt.isValid()
+doc.freeDoc()
+if valid != 0:
+ print "validity check failed"</pre><p>The first thing to notice is the call to registerErrorHandler(), it
+defines a new error handler global to the library. It is used to avoid seeing
+the error messages when trying to validate the invalid document.</p><p>The main interest of that test is the creation of a parser context with
+createFileParserCtxt() and how the behaviour can be changed before calling
+parseDocument() . Similarly the informations resulting from the parsing phase
+are also available using context methods.</p><p>Contexts like nodes are defined as class and the libxml2 wrappers maps the
+C function interfaces in terms of objects method as much as possible. The
+best to get a complete view of what methods are supported is to look at the
+libxml2.py module containing all the wrappers.</p><h3>push.py:</h3><p>This test show how to activate the push parser interface:</p><pre>import libxml2
+
+ctxt = libxml2.createPushParser(None, "&lt;foo", 4, "test.xml")
+ctxt.parseChunk("/&gt;", 2, 1)
+doc = ctxt.doc()
+
+doc.freeDoc()</pre><p>The context is created with a special call based on the
+xmlCreatePushParser() from the C library. The first argument is an optional
+SAX callback object, then the initial set of data, the length and the name of
+the resource in case URI-References need to be computed by the parser.</p><p>Then the data are pushed using the parseChunk() method, the last call
+setting the third argument terminate to 1.</p><h3>pushSAX.py:</h3><p>this test show the use of the event based parsing interfaces. In this case
+the parser does not build a document, but provides callback information as
+the parser makes progresses analyzing the data being provided:</p><pre>import libxml2
+log = ""
+
+class callback:
+ def startDocument(self):
+ global log
+ log = log + "startDocument:"
+
+ def endDocument(self):
+ global log
+ log = log + "endDocument:"
+
+ def startElement(self, tag, attrs):
+ global log
+ log = log + "startElement %s %s:" % (tag, attrs)
+
+ def endElement(self, tag):
+ global log
+ log = log + "endElement %s:" % (tag)
+
+ def characters(self, data):
+ global log
+ log = log + "characters: %s:" % (data)
+
+ def warning(self, msg):
+ global log
+ log = log + "warning: %s:" % (msg)
+
+ def error(self, msg):
+ global log
+ log = log + "error: %s:" % (msg)
+
+ def fatalError(self, msg):
+ global log
+ log = log + "fatalError: %s:" % (msg)
+
+handler = callback()
+
+ctxt = libxml2.createPushParser(handler, "&lt;foo", 4, "test.xml")
+chunk = " url='tst'&gt;b"
+ctxt.parseChunk(chunk, len(chunk), 0)
+chunk = "ar&lt;/foo&gt;"
+ctxt.parseChunk(chunk, len(chunk), 1)
+
+reference = "startDocument:startElement foo {'url': 'tst'}:" + \
+ "characters: bar:endElement foo:endDocument:"
+if log != reference:
+ print "Error got: %s" % log
+ print "Expected: %s" % reference</pre><p>The key object in that test is the handler, it provides a number of entry
+points which can be called by the parser as it makes progresses to indicate
+the information set obtained. The full set of callback is larger than what
+the callback class in that specific example implements (see the SAX
+definition for a complete list). The wrapper will only call those supplied by
+the object when activated. The startElement receives the names of the element
+and a dictionary containing the attributes carried by this element.</p><p>Also note that the reference string generated from the callback shows a
+single character call even though the string "bar" is passed to the parser
+from 2 different call to parseChunk()</p><h3>xpath.py:</h3><p>This is a basic test of XPath wrappers support</p><pre>import libxml2
+
+doc = libxml2.parseFile("tst.xml")
+ctxt = doc.xpathNewContext()
+res = ctxt.xpathEval("//*")
+if len(res) != 2:
+ print "xpath query: wrong node set size"
+ sys.exit(1)
+if res[0].name != "doc" or res[1].name != "foo":
+ print "xpath query: wrong node set value"
+ sys.exit(1)
+doc.freeDoc()
+ctxt.xpathFreeContext()</pre><p>This test parses a file, then create an XPath context to evaluate XPath
+expression on it. The xpathEval() method execute an XPath query and returns
+the result mapped in a Python way. String and numbers are natively converted,
+and node sets are returned as a tuple of libxml2 Python nodes wrappers. Like
+the document, the XPath context need to be freed explicitly, also not that
+the result of the XPath query may point back to the document tree and hence
+the document must be freed after the result of the query is used.</p><h3>xpathext.py:</h3><p>This test shows how to extend the XPath engine with functions written in
+python:</p><pre>import libxml2
+
+def foo(ctx, x):
+ return x + 1
+
+doc = libxml2.parseFile("tst.xml")
+ctxt = doc.xpathNewContext()
+libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
+res = ctxt.xpathEval("foo(1)")
+if res != 2:
+ print "xpath extension failure"
+doc.freeDoc()
+ctxt.xpathFreeContext()</pre><p>Note how the extension function is registered with the context (but that
+part is not yet finalized, this may change slightly in the future).</p><h3>tstxpath.py:</h3><p>This test is similar to the previous one but shows how the extension
+function can access the XPath evaluation context:</p><pre>def foo(ctx, x):
+ global called
+
+ #
+ # test that access to the XPath evaluation contexts
+ #
+ pctxt = libxml2.xpathParserContext(_obj=ctx)
+ ctxt = pctxt.context()
+ called = ctxt.function()
+ return x + 1</pre><p>All the interfaces around the XPath parser(or rather evaluation) context
+are not finalized, but it should be sufficient to do contextual work at the
+evaluation point.</p><h3>Memory debugging:</h3><p>last but not least, all tests starts with the following prologue:</p><pre>#memory debug specific
+libxml2.debugMemory(1)</pre><p>and ends with the following epilogue:</p><pre>#memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()</pre><p>Those activate the memory debugging interface of libxml2 where all
+allocated block in the library are tracked. The prologue then cleans up the
+library state and checks that all allocated memory has been freed. If not it
+calls dumpMemory() which saves that list in a <code>.memdump</code> file.</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/redhat.gif b/doc/redhat.gif
new file mode 100644
index 0000000..eff3d73
--- /dev/null
+++ b/doc/redhat.gif
Binary files differ
diff --git a/doc/search.php b/doc/search.php
new file mode 100644
index 0000000..82ae003
--- /dev/null
+++ b/doc/search.php
@@ -0,0 +1,422 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel="SHORTCUT ICON" href="/favicon.ico">
+<style type="text/css"><!--
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+--></style>
+<title>Search the documentation on XMLSoft.org</title>
+</head>
+<body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+<table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr>
+<td width="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 library for Gnome</h1>
+<h2>Search engine</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"><ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="intro.html">Introduction</a></li>
+<li><a href="FAQ.html">FAQ</a></li>
+<li><a href="docs.html">Documentation</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">News</a></li>
+<li><a href="XMLinfo.html">XML</a></li>
+<li><a href="XSLT.html">XSLT</a></li>
+<li><a href="python.html">Python and bindings</a></li>
+<li><a href="architecture.html">libxml architecture</a></li>
+<li><a href="tree.html">The tree output</a></li>
+<li><a href="interface.html">The SAX interface</a></li>
+<li><a href="xmldtd.html">Validation &amp; DTDs</a></li>
+<li><a href="xmlmem.html">Memory Management</a></li>
+<li><a href="encoding.html">Encodings support</a></li>
+<li><a href="xmlio.html">I/O Interfaces</a></li>
+<li><a href="catalog.html">Catalog support</a></li>
+<li><a href="library.html">The parser interfaces</a></li>
+<li><a href="entities.html">Entities or no entities</a></li>
+<li><a href="namespaces.html">Namespaces</a></li>
+<li><a href="upgrade.html">Upgrading 1.x code</a></li>
+<li><a href="threads.html">Thread safety</a></li>
+<li><a href="DOM.html">DOM Principles</a></li>
+<li><a href="example.html">A real example</a></li>
+<li><a href="contribs.html">Contributions</a></li>
+<li><a href="tutorial/index.html">Tutorial</a></li>
+<li>
+<a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a>
+</li>
+</ul></td></tr>
+</table>
+<table width="100%" border="0" cellspacing="1" cellpadding="3">
+<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr>
+<tr><td bgcolor="#fffacd"><ul>
+<li><a href="APIchunk0.html">Alphabetic</a></li>
+<li><a href="APIconstructors.html">Constructors</a></li>
+<li><a href="APIfunctions.html">Functions/Types</a></li>
+<li><a href="APIfiles.html">Modules</a></li>
+<li><a href="APIsymbols.html">Symbols</a></li>
+</ul></td></tr>
+</table>
+<table width="100%" border="0" cellspacing="1" cellpadding="3">
+<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr>
+<tr><td bgcolor="#fffacd"><ul>
+<li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li>
+<li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li>
+<li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li>
+<li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li>
+<li><a href="ftp://xmlsoft.org/">FTP</a></li>
+<li><a href="http://ww.zlatkovic.com/projects/libxml/">Windows binaries</a></li>
+<li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li>
+<li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li>
+<li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li>
+<li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml&amp;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">
+<?php
+ $query = $HTTP_GET_VARS[ "query" ];
+ $scope = $HTTP_GET_VARS[ "scope" ];
+ // We handle only the first argument so far
+ $query = $_GET['query'];
+ $query = ltrim ($query);
+ if (! $query) {
+ echo "<h1 align='center'>Search the documentation on XMLSoft.org</h1>";
+ }
+ if ($scope == NULL)
+ $scope = "any";
+ $scope = ltrim ($scope);
+ if ($scope == "")
+ $scope = "any";
+
+?>
+<p> The search service indexes the libxml2 and libxslt APIs and documentation as well as the xml@gnome.org and xslt@gnome.org mailing-list archives. To use it simply provide a set of keywords:
+<p>
+<form action="<?php echo "$PHP_SELF", "?query=", rawurlencode($query) ?>"
+ enctype="application/x-www-form-urlencoded" method="GET">
+ <input name="query" type="TEXT" size="50" value="<?php echo $query?>">
+ <select name="scope">
+ <option value="any">Search All</option>
+ <option value="XML" <?php if ($scope == 'XML') print "selected"?>>XML resources</option>
+ <option value="XSLT" <?php if ($scope == 'XSLT') print "selected"?>>XSLT resources</option>
+ <option value="API" <?php if ($scope == 'API') print "selected"?>>Only the APIs</option>
+ <option value="XMLAPI" <?php if ($scope == 'XMLAPI') print "selected"?>>Only the XML API</option>
+ <option value="XSLTAPI" <?php if ($scope == 'XSLTAPI') print "selected"?>>Only the XSLT API</option>
+ <option value="DOCS" <?php if ($scope == 'DOCS') print "selected"?>>Only the Documentation</option>
+ <option value="XMLDOC" <?php if ($scope == 'XMLDOC') print "selected"?>>Only the XML Documentation</option>
+ <option value="XSLTDOC" <?php if ($scope == 'XSLTDOC') print "selected"?>>Only the XSLT Documentation</option>
+ <option value="LISTS" <?php if ($scope == 'LISTS') print "selected"?>>Only the lists archives</option>
+ <option value="XMLLIST" <?php if ($scope == 'XMLLIST') print "selected"?>>Only the XML list archive</option>
+ <option value="XSLTLIST" <?php if ($scope == 'XSLTLIST') print "selected"?>>Only the XSLT list archive</option>
+ </select>
+ <input name=submit type=submit value="Search ...">
+</form>
+<?php
+ function logQueryWord($word) {
+ $result = mysql_query ("SELECT ID,Count FROM Queries WHERE Value='$word'");
+ if ($result) {
+ $i = mysql_num_rows($result);
+ if ($i == 0) {
+ mysql_free_result($result);
+ mysql_query ("INSERT INTO Queries (Value,Count) VALUES ('$word',1)");
+ } else {
+ $id = mysql_result($result, 0, 0);
+ $count = mysql_result($result, 0, 1);
+ $count ++;
+ mysql_query ("UPDATE Queries SET Count=$count WHERE ID=$id");
+ }
+ } else {
+ mysql_query ("INSERT INTO Queries (Value,Count) VALUES ('$word',1)");
+ }
+ }
+ function queryWord($word) {
+ $result = NULL;
+ $j = 0;
+ if ($word) {
+ $result = mysql_query ("SELECT words.relevance, symbols.name, symbols.type, symbols.module, symbols.descr FROM words, symbols WHERE LCASE(words.name) LIKE LCASE('$word') and words.symbol = symbols.name ORDER BY words.relevance DESC LIMIT 75");
+ if ($result) {
+ $j = mysql_num_rows($result);
+ if ($j == 0)
+ mysql_free_result($result);
+ }
+ logQueryWord($word);
+ }
+ return array($result, $j);
+ }
+ function queryHTMLWord($word) {
+ $result = NULL;
+ $j = 0;
+ if ($word) {
+ $result = mysql_query ("SELECT relevance, name, id, resource, section FROM wordsHTML WHERE LCASE(name) LIKE LCASE('$word') ORDER BY relevance DESC LIMIT 75");
+ if ($result) {
+ $j = mysql_num_rows($result);
+ if ($j == 0)
+ mysql_free_result($result);
+ }
+ logQueryWord($word);
+ }
+ return array($result, $j);
+ }
+ function queryArchiveWord($word) {
+ $result = NULL;
+ $j = 0;
+ if ($word) {
+ $result = mysql_query ("SELECT wordsArchive.relevance, wordsArchive.name, 'xml-list', archives.resource, archives.title FROM wordsArchive, archives WHERE LCASE(wordsArchive.name) LIKE LCASE('$word') and wordsArchive.ID = archives.ID ORDER BY relevance DESC LIMIT 75");
+ if ($result) {
+ $j = mysql_num_rows($result);
+ if ($j == 0)
+ mysql_free_result($result);
+ }
+ logQueryWord($word);
+ }
+ return array($result, $j);
+ }
+ function XSLTqueryWord($word) {
+ $result = NULL;
+ $j = 0;
+ if ($word) {
+ $result = mysql_query ("SELECT XSLTwords.relevance, XSLTsymbols.name, XSLTsymbols.type, XSLTsymbols.module, XSLTsymbols.descr FROM XSLTwords, XSLTsymbols WHERE LCASE(XSLTwords.name) LIKE LCASE('$word') and XSLTwords.symbol = XSLTsymbols.name ORDER BY XSLTwords.relevance DESC LIMIT 75");
+ if ($result) {
+ $j = mysql_num_rows($result);
+ if ($j == 0)
+ mysql_free_result($result);
+ }
+ logQueryWord($word);
+ }
+ return array($result, $j);
+ }
+ function XSLTqueryHTMLWord($word) {
+ $result = NULL;
+ $j = 0;
+ if ($word) {
+ $result = mysql_query ("SELECT relevance, name, id, resource, section FROM XSLTwordsHTML WHERE LCASE(name) LIKE LCASE('$word') ORDER BY relevance DESC LIMIT 75");
+ if ($result) {
+ $j = mysql_num_rows($result);
+ if ($j == 0)
+ mysql_free_result($result);
+ }
+ logQueryWord($word);
+ }
+ return array($result, $j);
+ }
+ function XSLTqueryArchiveWord($word) {
+ $result = NULL;
+ $j = 0;
+ if ($word) {
+ $result = mysql_query ("SELECT XSLTwordsArchive.relevance, XSLTwordsArchive.name, 'xslt-list', archives.resource, archives.title FROM XSLTwordsArchive, archives WHERE LCASE(XSLTwordsArchive.name) LIKE LCASE('$word') and XSLTwordsArchive.ID = archives.ID ORDER BY relevance DESC LIMIT 75");
+ if ($result) {
+ $j = mysql_num_rows($result);
+ if ($j == 0)
+ mysql_free_result($result);
+ }
+ logQueryWord($word);
+ }
+ return array($result, $j);
+ }
+ function resSort ($a, $b) {
+ list($ra,$ta,$ma,$na,$da) = $a;
+ list($rb,$tb,$mb,$nb,$db) = $b;
+ if ($ra == $rb) return 0;
+ return ($ra > $rb) ? -1 : 1;
+ }
+ if (($query) && (strlen($query) <= 50)) {
+ $link = mysql_connect ("localhost", "nobody");
+ if (!$link) {
+ echo "<p> Could not connect to the database: ", mysql_error();
+ } else {
+ mysql_select_db("xmlsoft", $link);
+ $list = explode (" ", $query);
+ $results = array();
+ $number = 0;
+ for ($number = 0;$number < count($list);$number++) {
+
+ $word = $list[$number];
+ if (($scope == 'any') || ($scope == 'XML') ||
+ ($scope == 'API') || ($scope == 'XMLAPI')) {
+ list($result, $j) = queryWord($word);
+ if ($j > 0) {
+ for ($i = 0; $i < $j; $i++) {
+ $relevance = mysql_result($result, $i, 0);
+ $name = mysql_result($result, $i, 1);
+ $type = mysql_result($result, $i, 2);
+ $module = mysql_result($result, $i, 3);
+ $desc = mysql_result($result, $i, 4);
+ if (array_key_exists($name, $results)) {
+ list($r,$t,$m,$d,$w,$u) = $results[$name];
+ $results[$name] = array(($r + $relevance) * 2,
+ $t,$m,$d,$w,$u);
+ } else {
+ $id = $name;
+ $m = strtolower($module);
+ $url = "html/libxml-$module.html#$id";
+ $results[$name] = array($relevance,$type,
+ $module, $desc, $name, $url);
+ }
+ }
+ mysql_free_result($result);
+ }
+ }
+ if (($scope == 'any') || ($scope == 'XSLT') ||
+ ($scope == 'API') || ($scope == 'XSLTAPI')) {
+ list($result, $j) = XSLTqueryWord($word);
+ if ($j > 0) {
+ for ($i = 0; $i < $j; $i++) {
+ $relevance = mysql_result($result, $i, 0);
+ $name = mysql_result($result, $i, 1);
+ $type = mysql_result($result, $i, 2);
+ $module = mysql_result($result, $i, 3);
+ $desc = mysql_result($result, $i, 4);
+ if (array_key_exists($name, $results)) {
+ list($r,$t,$m,$d,$w,$u) = $results[$name];
+ $results[$name] = array(($r + $relevance) * 2,
+ $t,$m,$d,$w,$u);
+ } else {
+ $id = $name;
+ $m = strtolower($module);
+ $url = "XSLT/html/libxslt-$module.html#$id";
+ $results[$name] = array($relevance,$type,
+ $module, $desc, $name, $url);
+ }
+ }
+ mysql_free_result($result);
+ }
+ }
+ if (($scope == 'any') || ($scope == 'XML') ||
+ ($scope == 'DOCS') || ($scope == 'XMLDOC')) {
+ list($result, $k) = queryHTMLWord($word);
+ if ($k > 0) {
+ for ($i = 0; $i < $k; $i++) {
+ $relevance = mysql_result($result, $i, 0);
+ $name = mysql_result($result, $i, 1);
+ $id = mysql_result($result, $i, 2);
+ $module = mysql_result($result, $i, 3);
+ $desc = mysql_result($result, $i, 4);
+ $url = $module;
+ if ($id != "") {
+ $url = $url + "#$id";
+ }
+ $results["$name _html_ $number _ $i"] =
+ array($relevance, "XML docs",
+ $module, $desc, $name, $url);
+ }
+ mysql_free_result($result);
+ }
+ }
+ if (($scope == 'any') || ($scope == 'XSLT') ||
+ ($scope == 'DOCS') || ($scope == 'XSLTDOC')) {
+ list($result, $k) = XSLTqueryHTMLWord($word);
+ if ($k > 0) {
+ for ($i = 0; $i < $k; $i++) {
+ $relevance = mysql_result($result, $i, 0);
+ $name = mysql_result($result, $i, 1);
+ $id = mysql_result($result, $i, 2);
+ $module = mysql_result($result, $i, 3);
+ $desc = mysql_result($result, $i, 4);
+ $url = "XSLT/$module";
+ if ($id != "") {
+ $url = $url + "#$id";
+ }
+ $results["$name xslthtml $number _ $i "] =
+ array($relevance, "XSLT docs",
+ $module, $desc, $name, $url);
+ }
+ mysql_free_result($result);
+ }
+ }
+ if (($scope == 'any') || ($scope == 'XML') ||
+ ($scope == 'LISTS') || ($scope == 'XMLLIST')) {
+ list($result, $j) = queryArchiveWord($word);
+ if ($j > 0) {
+ for ($i = 0; $i < $j; $i++) {
+ $relevance = mysql_result($result, $i, 0);
+ $name = mysql_result($result, $i, 1);
+ $type = mysql_result($result, $i, 2);
+ $url = mysql_result($result, $i, 3);
+ $desc = mysql_result($result, $i, 4);
+ if (array_key_exists($url, $results)) {
+ list($r,$t,$m,$d,$w,$u) = $results[$url];
+ $results[$name] = array(($r + $relevance) * 2,
+ $t,$m,$d,$w,$u);
+ } else {
+ $id = $name;
+ $m = strtolower($module);
+ $u = str_replace(
+ "http://mail.gnome.org/archives/xml/", "", $url);
+ $results[$url] = array($relevance,$type,
+ $u, $desc, $name, $url);
+ }
+ }
+ mysql_free_result($result);
+ }
+ }
+ if (($scope == 'any') || ($scope == 'XSLT') ||
+ ($scope == 'LISTS') || ($scope == 'XSLTLIST')) {
+ list($result, $j) = XSLTqueryArchiveWord($word);
+ if ($j > 0) {
+ for ($i = 0; $i < $j; $i++) {
+ $relevance = mysql_result($result, $i, 0);
+ $name = mysql_result($result, $i, 1);
+ $type = mysql_result($result, $i, 2);
+ $url = mysql_result($result, $i, 3);
+ $desc = mysql_result($result, $i, 4);
+ if (array_key_exists($url, $results)) {
+ list($r,$t,$m,$d,$w,$u) = $results[$url];
+ $results[$name] = array(($r + $relevance) * 2,
+ $t,$m,$d,$w,$u);
+ } else {
+ $id = $name;
+ $m = strtolower($module);
+ $u = str_replace(
+ "http://mail.gnome.org/archives/xslt/", "", $url);
+ $results[$url] = array($relevance,$type,
+ $u, $desc, $name, $url);
+ }
+ }
+ mysql_free_result($result);
+ }
+ }
+ }
+ mysql_close($link);
+ $nb = count($results);
+ echo "<h3 align='center'>Found $nb results for query $query</h3>\n";
+ usort($results, "resSort");
+
+ if ($nb > 0) {
+ printf("<table><tbody>\n");
+ printf("<tr><td>Quality</td><td>Symbol</td><td>Type</td><td>module</td><td>Description</td></tr>\n");
+ $i = 0;
+ while (list ($name, $val) = each ($results)) {
+ list($r,$t,$m,$d,$s,$u) = $val;
+ $m = str_replace("<", "&lt;", $m);
+ $s = str_replace("<", "&lt;", $s);
+ $d = str_replace("<", "&lt;", $d);
+ echo "<tr><td>$r</td><td><a href='$u'>$s</a></td><td>$t</td><td>$m</td><td>$d</td></tr>";
+ $i = $i + 1;
+ if ($i > 75)
+ break;
+ }
+ printf("</tbody></table>\n");
+ }
+ }
+ }
+?>
+
+</td></tr></table></td></tr></table></td></tr></table></td>
+</tr></table></td></tr></table>
+</body>
+</html>
+
diff --git a/doc/site.xsl b/doc/site.xsl
new file mode 100644
index 0000000..504ddab
--- /dev/null
+++ b/doc/site.xsl
@@ -0,0 +1,730 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:output method="xml" encoding="ISO-8859-1" indent="yes"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
+
+ <xsl:variable name="href_base" select="''"/>
+ <xsl:variable name="menu_name">Main Menu</xsl:variable>
+<!--
+ - returns the filename associated to an ID in the original file
+ -->
+ <xsl:template name="tocfilename">
+ <xsl:param name="name" select="string(@href)"/>
+ <xsl:choose>
+ <xsl:when test="$name = '#Introducti'">
+ <xsl:text>intro.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Documentat'">
+ <xsl:text>docs.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Reporting'">
+ <xsl:text>bugs.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#help'">
+ <xsl:text>help.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Help'">
+ <xsl:text>help.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Downloads'">
+ <xsl:text>downloads.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#News'">
+ <xsl:text>news.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Contributi'">
+ <xsl:text>contribs.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#xsltproc'">
+ <xsl:text>xsltproc2.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#API'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#XSLT'">
+ <xsl:text>XSLT.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#XML'">
+ <xsl:text>XMLinfo.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Validation'">
+ <xsl:text>xmldtd.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#tree'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#library'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#interface'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Example'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Entities'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#architecture'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Namespaces'">
+ <xsl:text>namespaces.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#DOM'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Catalog'">
+ <xsl:text>catalog.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Upgrading'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Encodings'">
+ <xsl:text>encoding.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#IO'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Memory'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Thread'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#FAQ'">
+ <xsl:text>FAQ.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Python'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = ''">
+ <xsl:text>unknown.html</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="docfilename">
+ <xsl:param name="name" select="string(@href)"/>
+ <xsl:choose>
+ <xsl:when test="$name = '#Introducti'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Documentat'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Reporting'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#help'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Help'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Downloads'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#News'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Contributi'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#xsltproc'">
+ <xsl:text>xsltproc2.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#API'">
+ <xsl:text>API.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#XSLT'">
+ <xsl:text>XSLT.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#XML'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Validation'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#tree'">
+ <xsl:text>tree.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#library'">
+ <xsl:text>library.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#interface'">
+ <xsl:text>interface.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Example'">
+ <xsl:text>example.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Entities'">
+ <xsl:text>entities.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#architecture'">
+ <xsl:text>architecture.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Namespaces'">
+ <xsl:text>namespaces.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#DOM'">
+ <xsl:text>DOM.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Catalog'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Upgrading'">
+ <xsl:text>upgrade.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Encodings'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#IO'">
+ <xsl:text>xmlio.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Memory'">
+ <xsl:text>xmlmem.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Thread'">
+ <xsl:text>threads.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#FAQ'">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Python'">
+ <xsl:text>python.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = ''">
+ <xsl:text>unknown.html</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="filename">
+ <xsl:param name="name" select="string(@href)"/>
+ <xsl:choose>
+ <xsl:when test="$name = '#Introducti'">
+ <xsl:text>intro.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Documentat'">
+ <xsl:text>docs.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Reporting'">
+ <xsl:text>bugs.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#help'">
+ <xsl:text>help.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Help'">
+ <xsl:text>help.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Downloads'">
+ <xsl:text>downloads.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#News'">
+ <xsl:text>news.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Contributi'">
+ <xsl:text>contribs.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#xsltproc'">
+ <xsl:text>xsltproc2.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#API'">
+ <xsl:text>API.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#XSLT'">
+ <xsl:text>XSLT.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#XML'">
+ <xsl:text>XMLinfo.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Validation'">
+ <xsl:text>xmldtd.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#tree'">
+ <xsl:text>tree.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#library'">
+ <xsl:text>library.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#interface'">
+ <xsl:text>interface.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Example'">
+ <xsl:text>example.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Entities'">
+ <xsl:text>entities.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#architecture'">
+ <xsl:text>architecture.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Namespaces'">
+ <xsl:text>namespaces.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#DOM'">
+ <xsl:text>DOM.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Catalog'">
+ <xsl:text>catalog.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Upgrading'">
+ <xsl:text>upgrade.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Encodings'">
+ <xsl:text>encoding.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#IO'">
+ <xsl:text>xmlio.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Memory'">
+ <xsl:text>xmlmem.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Thread'">
+ <xsl:text>threads.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#FAQ'">
+ <xsl:text>FAQ.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = '#Python'">
+ <xsl:text>python.html</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name = ''">
+ <xsl:text>unknown.html</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+<!--
+ - The global title
+ -->
+ <xsl:variable name="globaltitle" select="string(/html/body/h1[1])"/>
+<!--
+ - The table of content
+ -->
+ <xsl:variable name="toc">
+ <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><!-- style="margin-left: -1em" -->
+ <li><a href="index.html">Home</a></li>
+ <xsl:for-each select="/html/body/h2">
+ <xsl:variable name="filename">
+ <xsl:call-template name="tocfilename">
+ <xsl:with-param name="name" select="concat('#', string(a[1]/@name))"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="$filename != ''">
+ <li>
+ <xsl:element name="a">
+ <xsl:attribute name="href">
+ <xsl:value-of select="$filename"/>
+ </xsl:attribute>
+ <xsl:if test="$filename = 'docs.html'">
+ <xsl:attribute name="style">font-weight:bold</xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </li>
+ </xsl:if>
+ </xsl:for-each>
+ <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>
+ </ul>
+ </xsl:variable>
+ <xsl:variable name="develtoc">
+ <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><!-- style="margin-left: -1em" -->
+ <li><a href="index.html" style="font-weight:bold">Main Menu</a></li>
+ <li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li>
+ <li><a href="guidelines.html">XML Guidelines</a></li>
+ <li><a href="tutorial/index.html">Tutorial</a></li>
+ <li><a href="xmlreader.html">The Reader Interface</a></li>
+ <xsl:for-each select="/html/body/h2">
+ <xsl:variable name="filename">
+ <xsl:call-template name="docfilename">
+ <xsl:with-param name="name" select="concat('#', string(a[1]/@name))"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="$filename != ''">
+ <li>
+ <xsl:element name="a">
+ <xsl:attribute name="href">
+ <xsl:value-of select="$filename"/>
+ </xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </li>
+ </xsl:if>
+ </xsl:for-each>
+ <li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li>
+ </ul>
+ </xsl:variable>
+ <xsl:variable name="api">
+ <ul><!-- style="margin-left: -1em" -->
+ <li><a href="{$href_base}APIchunk0.html">Alphabetic</a></li>
+ <li><a href="{$href_base}APIconstructors.html">Constructors</a></li>
+ <li><a href="{$href_base}APIfunctions.html">Functions/Types</a></li>
+ <li><a href="{$href_base}APIfiles.html">Modules</a></li>
+ <li><a href="{$href_base}APIsymbols.html">Symbols</a></li>
+ </ul>
+ </xsl:variable>
+ <xsl:variable name="related">
+ <ul><!-- style="margin-left: -1em" -->
+ <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://garypennington.net/libxml2/">Solaris binaries</a></li>
+ <li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li>
+ <li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li>
+ <li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li>
+ </ul>
+ </xsl:variable>
+ <xsl:template name="toc">
+ <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><xsl:value-of select="$menu_name"/></b>
+ </center>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="#fffacd">
+ <xsl:copy-of select="$toc"/>
+ </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">
+ <xsl:copy-of select="$related"/>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+ <xsl:template name="develtoc">
+ <table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000">
+ <tr>
+ <td>
+ <table width="100%" border="0" cellspacing="1" cellpadding="3">
+ <tr>
+ <td colspan="1" bgcolor="#eecfa1" align="center">
+ <center>
+ <b>Developer Menu</b>
+ </center>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="#fffacd">
+ <xsl:copy-of select="$develtoc"/>
+ </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">
+ <xsl:copy-of select="$api"/>
+ </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">
+ <xsl:copy-of select="$related"/>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+ <xsl:template mode="head" match="title">
+ <title>
+ <xsl:apply-templates/>
+ </title>
+ </xsl:template>
+ <xsl:template mode="head" match="meta">
+</xsl:template>
+<!--
+ - Write the styles in the head
+ -->
+ <xsl:template name="style">
+ <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>
+ </xsl:template>
+<!--
+ - Write the title box on top
+ -->
+ <xsl:template name="titlebox">
+ <xsl:param name="title" select="'Main Page'"/>
+ <table border="0" width="100%" cellpadding="5" cellspacing="0" align="center">
+ <tr>
+ <td width="120">
+ <a href="http://swpat.ffii.org/"><img src="{$href_base}epatents.png" alt="Action against software patents"/></a>
+ </td>
+ <td width="180">
+ <a href="http://www.gnome.org/"><img src="{$href_base}gnome2.png" alt="Gnome2 Logo"/></a>
+ <a href="http://www.w3.org/Status"><img src="{$href_base}w3c.png" alt="W3C Logo"/></a>
+ <a href="http://www.redhat.com/"><img src="{$href_base}redhat.gif" alt="Red Hat Logo"/></a>
+ <div align="left">
+ <a href="http://xmlsoft.org/"><img src="{$href_base}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">
+ <xsl:element name="h1">
+ <xsl:value-of select="$globaltitle"/>
+ </xsl:element>
+ <xsl:element name="h2">
+ <xsl:value-of select="$title"/>
+ </xsl:element>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+<!--
+ - Handling of nodes in the body before the first H2, table of content
+ - Everything is just copied over, except href which may get rewritten
+ - and h1/h2/a at the top level
+ -->
+ <xsl:template priority="2" mode="subcontent" match="a">
+ <xsl:variable name="filename">
+ <xsl:call-template name="filename">
+ <xsl:with-param name="name" select="string(@href)"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:copy>
+ <xsl:attribute name="href">
+ <xsl:value-of select="$filename"/>
+ </xsl:attribute>
+ <xsl:apply-templates mode="subcontent" select="node()"/>
+ </xsl:copy>
+ </xsl:template>
+ <xsl:template mode="subcontent" match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates mode="subcontent" select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+ <xsl:template mode="content" match="@*|node()">
+ <xsl:if test="name() != 'h1' and name() != 'h2'">
+ <xsl:copy>
+ <xsl:apply-templates mode="subcontent" select="@*|node()"/>
+ </xsl:copy>
+ </xsl:if>
+ </xsl:template>
+<!--
+ - Handling of nodes in the body after an H2
+ - Open a new file and dump all the siblings up to the next H2
+ -->
+ <xsl:template name="subfile">
+ <xsl:param name="header" select="following-sibling::h2[1]"/>
+ <xsl:variable name="filename">
+ <xsl:call-template name="filename">
+ <xsl:with-param name="name" select="concat('#', string($header/a[1]/@name))"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="tocfilename">
+ <xsl:call-template name="tocfilename">
+ <xsl:with-param name="name" select="concat('#', string($header/a[1]/@name))"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="title">
+ <xsl:value-of select="$header"/>
+ </xsl:variable>
+ <xsl:document href="{$filename}" method="xml" encoding="ISO-8859-1"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:element name="title">
+ <xsl:value-of select="$title"/>
+ </xsl:element>
+ </head>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="$title"/>
+ </xsl:call-template>
+ <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">
+ <xsl:choose>
+ <xsl:when test="$filename = 'docs.html'">
+ <xsl:call-template name="develtoc"/>
+ </xsl:when>
+ <xsl:when test="$tocfilename = ''">
+ <xsl:call-template name="develtoc"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="toc"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </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">
+ <xsl:apply-templates mode="subfile" select="$header/following-sibling::*[preceding-sibling::h2[1] = $header and name() != 'h2' ]"/>
+ <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>
+ </xsl:document>
+ </xsl:template>
+ <xsl:template mode="subfile" match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates mode="content" select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+<!--
+ - Handling of the initial body and head HTML document
+ -->
+ <xsl:template match="body">
+ <xsl:variable name="firsth2" select="./h2[1]"/>
+ <xsl:variable name="rest2" select="./h2[position()&gt;1]"/>
+ <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
+ <xsl:call-template name="titlebox">
+ <xsl:with-param name="title" select="'libxml'"/>
+ </xsl:call-template>
+ <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">
+ <xsl:call-template name="toc"/>
+ </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">
+ <xsl:apply-templates mode="content" select="($firsth2/preceding-sibling::*)"/>
+ <xsl:for-each select="./h2">
+ <xsl:call-template name="subfile">
+ <xsl:with-param name="header" select="."/>
+ </xsl:call-template>
+ </xsl:for-each>
+ <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>
+ </xsl:template>
+ <xsl:template match="head">
+ <head>
+ <xsl:call-template name="style"/>
+ <xsl:apply-templates mode="head"/>
+ </head>
+ </xsl:template>
+ <xsl:template match="html">
+ <xsl:message>Generating the Web pages</xsl:message>
+ <html>
+ <xsl:apply-templates/>
+ </html>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/doc/smallfootonly.gif b/doc/smallfootonly.gif
new file mode 100644
index 0000000..ddbb9ee
--- /dev/null
+++ b/doc/smallfootonly.gif
Binary files differ
diff --git a/doc/structure.gif b/doc/structure.gif
new file mode 100644
index 0000000..4b9a3e6
--- /dev/null
+++ b/doc/structure.gif
Binary files differ
diff --git a/doc/threads.html b/doc/threads.html
new file mode 100644
index 0000000..3eacf99
--- /dev/null
+++ b/doc/threads.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Thread safety</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Thread safety</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Starting with 2.4.7, libxml2 makes provisions to ensure that concurrent
+threads can safely work in parallel parsing different documents. There is
+however a couple of things to do to ensure it:</p><ul><li>configure the library accordingly using the --with-threads options</li>
+ <li>call xmlInitParser() in the "main" thread before using any of the
+ libxml2 API (except possibly selecting a different memory allocator)</li>
+</ul><p>Note that the thread safety cannot be ensured for multiple threads sharing
+the same document, the locking must be done at the application level, libxml
+exports a basic mutex and reentrant mutexes API in &lt;libxml/threads.h&gt;.
+The parts of the library checked for thread safety are:</p><ul><li>concurrent loading</li>
+ <li>file access resolution</li>
+ <li>catalog access</li>
+ <li>catalog building</li>
+ <li>entities lookup/accesses</li>
+ <li>validation</li>
+ <li>global variables per-thread override</li>
+ <li>memory handling</li>
+</ul><p>XPath is supposed to be thread safe now, but this wasn't tested
+seriously.</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/tree.html b/doc/tree.html
new file mode 100644
index 0000000..f432d6c
--- /dev/null
+++ b/doc/tree.html
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>The tree output</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>The tree output</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>The parser returns a tree built during the document analysis. The value
+returned is an <strong>xmlDocPtr</strong> (i.e., a pointer to an
+<strong>xmlDoc</strong> structure). This structure contains information such
+as the file name, the document type, and a <strong>children</strong> pointer
+which is the root of the document (or more exactly the first child under the
+root which is the document). The tree is made of <strong>xmlNode</strong>s,
+chained in double-linked lists of siblings and with a children&lt;-&gt;parent
+relationship. An xmlNode can also carry properties (a chain of xmlAttr
+structures). An attribute may have a value which is a list of TEXT or
+ENTITY_REF nodes.</p><p>Here is an example (erroneous with respect to the XML spec since there
+should be only one ELEMENT under the root):</p><p><img src="structure.gif" alt=" structure.gif " /></p><p>In the source package there is a small program (not installed by default)
+called <strong>xmllint</strong> which parses XML files given as argument and
+prints them back as parsed. This is useful for detecting errors both in XML
+code and in the XML parser itself. It has an option <strong>--debug</strong>
+which prints the actual in-memory structure of the document; here is the
+result with the <a href="#example">example</a> given before:</p><pre>DOCUMENT
+version=1.0
+standalone=true
+ ELEMENT EXAMPLE
+ ATTRIBUTE prop1
+ TEXT
+ content=gnome is great
+ ATTRIBUTE prop2
+ ENTITY_REF
+ TEXT
+ content= linux too
+ ELEMENT head
+ ELEMENT title
+ TEXT
+ content=Welcome to Gnome
+ ELEMENT chapter
+ ELEMENT title
+ TEXT
+ content=The Linux adventure
+ ELEMENT p
+ TEXT
+ content=bla bla bla ...
+ ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+ ELEMENT p
+ TEXT
+ content=...</pre><p>This should be useful for learning the internal representation model.</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/tutorial/apa.html b/doc/tutorial/apa.html
new file mode 100644
index 0000000..5c4c1c1
--- /dev/null
+++ b/doc/tutorial/apa.html
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>A. Compilation</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="ar01s09.html" title="Encoding Conversion"><link rel="next" href="apb.html" title="B. Sample Document"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">A. Compilation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ar01s09.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="apb.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="compilation"></a>A. Compilation</h2></div></div><div></div></div><p><a class="indexterm" name="id2509671"></a>
+ <span class="application">Libxml</span> includes a script,
+ <span class="application">xml2-config</span>, that can be used to generate
+ flags for compilation and linking of programs written with the
+ library. For pre-processor and compiler flags, use <b class="command">xml2-config
+ --cflags</b>. For library linking flags, use <b class="command">xml2-config
+ --libs</b>. Other options are available using <b class="command">xml2-config
+ --help</b>.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ar01s09.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="apb.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Encoding Conversion </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> B. Sample Document</td></tr></table></div></body></html>
diff --git a/doc/tutorial/apb.html b/doc/tutorial/apb.html
new file mode 100644
index 0000000..ef14066
--- /dev/null
+++ b/doc/tutorial/apb.html
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>B. Sample Document</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="apa.html" title="A. Compilation"><link rel="next" href="apc.html" title="C. Code for Keyword Example"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">B. Sample Document</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apa.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="apc.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="sampledoc"></a>B. Sample Document</h2></div></div><div></div></div><pre class="programlisting">
+&lt;?xml version="1.0"?&gt;
+&lt;story&gt;
+ &lt;storyinfo&gt;
+ &lt;author&gt;John Fleck&lt;/author&gt;
+ &lt;datewritten&gt;June 2, 2002&lt;/datewritten&gt;
+ &lt;keyword&gt;example keyword&lt;/keyword&gt;
+ &lt;/storyinfo&gt;
+ &lt;body&gt;
+ &lt;headline&gt;This is the headline&lt;/headline&gt;
+ &lt;para&gt;This is the body text.&lt;/para&gt;
+ &lt;/body&gt;
+&lt;/story&gt;
+</pre></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apa.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="apc.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">A. Compilation </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> C. Code for Keyword Example</td></tr></table></div></body></html>
diff --git a/doc/tutorial/apc.html b/doc/tutorial/apc.html
new file mode 100644
index 0000000..f8d9911
--- /dev/null
+++ b/doc/tutorial/apc.html
@@ -0,0 +1,82 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>C. Code for Keyword Example</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="apb.html" title="B. Sample Document"><link rel="next" href="apd.html" title="D. Code for XPath Example"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">C. Code for Keyword Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apb.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="apd.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="keywordappendix"></a>C. Code for Keyword Example</h2></div></div><div></div></div><p>
+ </p><pre class="programlisting">
+#include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;libxml/xmlmemory.h&gt;
+#include &lt;libxml/parser.h&gt;
+
+void
+parseStory (xmlDocPtr doc, xmlNodePtr cur) {
+
+ xmlChar *key;
+ cur = cur-&gt;xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur-&gt;name, (const xmlChar *)"keyword"))) {
+ key = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ printf("keyword: %s\n", key);
+ xmlFree(key);
+ }
+ cur = cur-&gt;next;
+ }
+ return;
+}
+
+static void
+parseDoc(char *docname) {
+
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return;
+ }
+
+ cur = xmlDocGetRootElement(doc);
+
+ if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ if (xmlStrcmp(cur-&gt;name, (const xmlChar *) "story")) {
+ fprintf(stderr,"document of the wrong type, root node != story");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ cur = cur-&gt;xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur-&gt;name, (const xmlChar *)"storyinfo"))){
+ parseStory (doc, cur);
+ }
+
+ cur = cur-&gt;next;
+ }
+
+ xmlFreeDoc(doc);
+ return;
+}
+
+int
+main(int argc, char **argv) {
+
+ char *docname;
+
+ if (argc &lt;= 1) {
+ printf("Usage: %s docname\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ parseDoc (docname);
+
+ return (1);
+}
+
+</pre><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apb.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="apd.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">B. Sample Document </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> D. Code for XPath Example</td></tr></table></div></body></html>
diff --git a/doc/tutorial/apd.html b/doc/tutorial/apd.html
new file mode 100644
index 0000000..f61470f
--- /dev/null
+++ b/doc/tutorial/apd.html
@@ -0,0 +1,68 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>D. Code for XPath Example</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="apc.html" title="C. Code for Keyword Example"><link rel="next" href="ape.html" title="E. Code for Add Keyword Example"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">D. Code for XPath Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apc.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ape.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="xpathappendix"></a>D. Code for XPath Example</h2></div></div><div></div></div><p>
+ </p><pre class="programlisting">
+#include &lt;libxml/parser.h&gt;
+#include &lt;libxml/xpath.h&gt;
+
+xmlDocPtr
+getdoc (char *docname) {
+ xmlDocPtr doc;
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return NULL;
+ }
+
+ return doc;
+}
+
+xmlXPathObjectPtr
+getnodeset (xmlDocPtr doc, xmlChar *xpath){
+
+ xmlXPathContextPtr context;
+ xmlXPathObjectPtr result;
+
+ context = xmlXPathNewContext(doc);
+ result = xmlXPathEvalExpression(xpath, context);
+ if(xmlXPathNodeSetIsEmpty(result-&gt;nodesetval)){
+ printf("No result\n");
+ return NULL;
+ }
+ xmlXPathFreeContext(context);
+ return result;
+}
+int
+main(int argc, char **argv) {
+
+ char *docname;
+ xmlDocPtr doc;
+ xmlChar *xpath = ("//keyword");
+ xmlNodeSetPtr nodeset;
+ xmlXPathObjectPtr result;
+ int i;
+ xmlChar *keyword;
+
+ if (argc &lt;= 1) {
+ printf("Usage: %s docname\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ doc = getdoc(docname);
+ result = getnodeset (doc, xpath);
+ if (result) {
+ nodeset = result-&gt;nodesetval;
+ for (i=0; i &lt; nodeset-&gt;nodeNr; i++) {
+ keyword = xmlNodeListGetString(doc, nodeset-&gt;nodeTab[i]-&gt;xmlChildrenNode, 1);
+ printf("keyword: %s\n", keyword);
+ xmlFree(keyword);
+ }
+ xmlXPathFreeObject (result);
+ }
+ xmlFreeDoc(doc);
+ xmlCleanupParser();
+ return (1);
+}
+
+</pre><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apc.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ape.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">C. Code for Keyword Example </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> E. Code for Add Keyword Example</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ape.html b/doc/tutorial/ape.html
new file mode 100644
index 0000000..200319a
--- /dev/null
+++ b/doc/tutorial/ape.html
@@ -0,0 +1,78 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>E. Code for Add Keyword Example</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="apd.html" title="D. Code for XPath Example"><link rel="next" href="apf.html" title="F. Code for Add Attribute Example"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">E. Code for Add Keyword Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apd.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="apf.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="addkeywordappendix"></a>E. Code for Add Keyword Example</h2></div></div><div></div></div><p>
+ </p><pre class="programlisting">
+#include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;libxml/xmlmemory.h&gt;
+#include &lt;libxml/parser.h&gt;
+
+void
+parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) {
+
+ xmlNewTextChild (cur, NULL, "keyword", keyword);
+ return;
+}
+
+xmlDocPtr
+parseDoc(char *docname, char *keyword) {
+
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return (NULL);
+ }
+
+ cur = xmlDocGetRootElement(doc);
+
+ if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ if (xmlStrcmp(cur-&gt;name, (const xmlChar *) "story")) {
+ fprintf(stderr,"document of the wrong type, root node != story");
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ cur = cur-&gt;xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur-&gt;name, (const xmlChar *)"storyinfo"))){
+ parseStory (doc, cur, keyword);
+ }
+
+ cur = cur-&gt;next;
+ }
+ return(doc);
+}
+
+int
+main(int argc, char **argv) {
+
+ char *docname;
+ char *keyword;
+ xmlDocPtr doc;
+
+ if (argc &lt;= 2) {
+ printf("Usage: %s docname, keyword\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ keyword = argv[2];
+ doc = parseDoc (docname, keyword);
+ if (doc != NULL) {
+ xmlSaveFormatFile (docname, doc, 0);
+ xmlFreeDoc(doc);
+ }
+
+ return (1);
+}
+
+</pre><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apd.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="apf.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">D. Code for XPath Example </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> F. Code for Add Attribute Example</td></tr></table></div></body></html>
diff --git a/doc/tutorial/apf.html b/doc/tutorial/apf.html
new file mode 100644
index 0000000..4848cdb
--- /dev/null
+++ b/doc/tutorial/apf.html
@@ -0,0 +1,67 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>F. Code for Add Attribute Example</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="ape.html" title="E. Code for Add Keyword Example"><link rel="next" href="apg.html" title="G. Code for Retrieving Attribute Value Example"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">F. Code for Add Attribute Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ape.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="apg.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="addattributeappendix"></a>F. Code for Add Attribute Example</h2></div></div><div></div></div><p>
+ </p><pre class="programlisting">
+#include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;libxml/xmlmemory.h&gt;
+#include &lt;libxml/parser.h&gt;
+
+
+xmlDocPtr
+parseDoc(char *docname, char *uri) {
+
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+ xmlNodePtr newnode;
+ xmlAttrPtr newattr;
+
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return (NULL);
+ }
+
+ cur = xmlDocGetRootElement(doc);
+
+ if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ if (xmlStrcmp(cur-&gt;name, (const xmlChar *) "story")) {
+ fprintf(stderr,"document of the wrong type, root node != story");
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ newnode = xmlNewTextChild (cur, NULL, "reference", NULL);
+ newattr = xmlNewProp (newnode, "uri", uri);
+ return(doc);
+}
+
+int
+main(int argc, char **argv) {
+
+ char *docname;
+ char *uri;
+ xmlDocPtr doc;
+
+ if (argc &lt;= 2) {
+ printf("Usage: %s docname, uri\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ uri = argv[2];
+ doc = parseDoc (docname, uri);
+ if (doc != NULL) {
+ xmlSaveFormatFile (docname, doc, 1);
+ xmlFreeDoc(doc);
+ }
+ return (1);
+}
+
+</pre><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ape.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="apg.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">E. Code for Add Keyword Example </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> G. Code for Retrieving Attribute Value Example</td></tr></table></div></body></html>
diff --git a/doc/tutorial/apg.html b/doc/tutorial/apg.html
new file mode 100644
index 0000000..fffa0ee
--- /dev/null
+++ b/doc/tutorial/apg.html
@@ -0,0 +1,75 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>G. Code for Retrieving Attribute Value Example</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="apf.html" title="F. Code for Add Attribute Example"><link rel="next" href="aph.html" title="H. Code for Encoding Conversion Example"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">G. Code for Retrieving Attribute Value Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apf.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="aph.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="getattributeappendix"></a>G. Code for Retrieving Attribute Value Example</h2></div></div><div></div></div><p>
+ </p><pre class="programlisting">
+#include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;libxml/xmlmemory.h&gt;
+#include &lt;libxml/parser.h&gt;
+
+void
+getReference (xmlDocPtr doc, xmlNodePtr cur) {
+
+ xmlChar *uri;
+ cur = cur-&gt;xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur-&gt;name, (const xmlChar *)"reference"))) {
+ uri = xmlGetProp(cur, "uri");
+ printf("uri: %s\n", uri);
+ xmlFree(uri);
+ }
+ cur = cur-&gt;next;
+ }
+ return;
+}
+
+
+void
+parseDoc(char *docname) {
+
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return;
+ }
+
+ cur = xmlDocGetRootElement(doc);
+
+ if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ if (xmlStrcmp(cur-&gt;name, (const xmlChar *) "story")) {
+ fprintf(stderr,"document of the wrong type, root node != story");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ getReference (doc, cur);
+ xmlFreeDoc(doc);
+ return;
+}
+
+int
+main(int argc, char **argv) {
+
+ char *docname;
+
+ if (argc &lt;= 1) {
+ printf("Usage: %s docname\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ parseDoc (docname);
+
+ return (1);
+}
+
+</pre><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apf.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="aph.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">F. Code for Add Attribute Example </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> H. Code for Encoding Conversion Example</td></tr></table></div></body></html>
diff --git a/doc/tutorial/aph.html b/doc/tutorial/aph.html
new file mode 100644
index 0000000..ef46605
--- /dev/null
+++ b/doc/tutorial/aph.html
@@ -0,0 +1,76 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>H. Code for Encoding Conversion Example</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="apg.html" title="G. Code for Retrieving Attribute Value Example"><link rel="next" href="api.html" title="I. Acknowledgements"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">H. Code for Encoding Conversion Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apg.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="convertappendix"></a>H. Code for Encoding Conversion Example</h2></div></div><div></div></div><p>
+ </p><pre class="programlisting">
+#include &lt;string.h&gt;
+#include &lt;libxml/parser.h&gt;
+
+
+unsigned char*
+convert (unsigned char *in, char *encoding)
+{
+ unsigned char *out;
+ int ret,size,out_size,temp;
+ xmlCharEncodingHandlerPtr handler;
+
+ size = (int)strlen(in)+1;
+ out_size = size*2-1;
+ out = malloc((size_t)out_size);
+
+ if (out) {
+ handler = xmlFindCharEncodingHandler(encoding);
+
+ if (!handler) {
+ free(out);
+ out = NULL;
+ }
+ }
+ if (out) {
+ temp=size-1;
+ ret = handler-&gt;input(out, &amp;out_size, in, &amp;temp);
+ if (ret || temp-size+1) {
+ if (ret) {
+ printf("conversion wasn't successful.\n");
+ } else {
+ printf("conversion wasn't successful. converted: %i octets.\n",temp);
+ }
+ free(out);
+ out = NULL;
+ } else {
+ out = realloc(out,out_size+1);
+ out[out_size]=0; /*null terminating out*/
+
+ }
+ } else {
+ printf("no mem\n");
+ }
+ return (out);
+}
+
+
+int
+main(int argc, char **argv) {
+
+ unsigned char *content, *out;
+ xmlDocPtr doc;
+ xmlNodePtr rootnode;
+ char *encoding = "ISO-8859-1";
+
+
+ if (argc &lt;= 1) {
+ printf("Usage: %s content\n", argv[0]);
+ return(0);
+ }
+
+ content = argv[1];
+
+ out = convert(content, encoding);
+
+ doc = xmlNewDoc ("1.0");
+ rootnode = xmlNewDocNode(doc, NULL, (const xmlChar*)"root", out);
+ xmlDocSetRootElement(doc, rootnode);
+
+ xmlSaveFormatFileEnc("-", doc, encoding, 1);
+ return (1);
+}
+
+</pre><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apg.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">G. Code for Retrieving Attribute Value Example </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> I. Acknowledgements</td></tr></table></div></body></html>
diff --git a/doc/tutorial/api.html b/doc/tutorial/api.html
new file mode 100644
index 0000000..0f54ba9
--- /dev/null
+++ b/doc/tutorial/api.html
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>I. Acknowledgements</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="aph.html" title="H. Code for Encoding Conversion Example"><link rel="next" href="ix01.html" title="Index"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">I. Acknowledgements</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="aph.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ix01.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id2510287"></a>I. Acknowledgements</h2></div></div><div></div></div><p>A number of people have generously offered feedback, code and
+ suggested improvements to this tutorial. In no particular order:
+ <span class="simplelist">Daniel Veillard, Marcus Labib Iskander, Christopher R. Harris, Igor Zlatkovic, Niraj Tolia, David Turover</span>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="aph.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ix01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">H. Code for Encoding Conversion Example </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Index</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ar01s02.html b/doc/tutorial/ar01s02.html
new file mode 100644
index 0000000..4cab38d
--- /dev/null
+++ b/doc/tutorial/ar01s02.html
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Data Types</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="index.html" title="Libxml Tutorial"><link rel="next" href="ar01s03.html" title="Parsing the file"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Data Types</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ar01s03.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xmltutorialdatatypes"></a>Data Types</h2></div></div><div></div></div><p><span class="application">Libxml</span> declares a number of data types we
+ will encounter repeatedly, hiding the messy stuff so you do not have to deal
+ with it unless you have some specific need.</p><p>
+ </p><div class="variablelist"><dl><dt><span class="term"><a class="indexterm" name="id2496072"></a>
+<a href="http://xmlsoft.org/html/libxml-tree.html#XMLCHAR" target="_top">xmlChar</a></span></dt><dd><p>A basic replacement for char, a byte in a UTF-8 encoded
+ string. If your data uses another encoding, it must be converted to
+ UTF-8 for use with <span class="application">libxml's</span>
+ functions. More information on encoding is available on the <a href="http://www.xmlsoft.org/encoding.html" target="_top"><span class="application">libxml</span> encoding support web page</a>.</p></dd><dt><span class="term"><a class="indexterm" name="id2448173"></a>
+ <a href="http://xmlsoft.org/html/libxml-tree.html#XMLDOC" target="_top">xmlDoc</a></span></dt><dd><p>A structure containing the tree created by a parsed doc. <a href="http://xmlsoft.org/html/libxml-tree.html#XMLDOCPTR" target="_top">xmlDocPtr</a>
+ is a pointer to the structure.</p></dd><dt><span class="term"><a class="indexterm" name="id2448206"></a>
+<a href="http://xmlsoft.org/html/libxml-tree.html#XMLNODEPTR" target="_top">xmlNodePtr</a>
+ and <a href="http://xmlsoft.org/html/libxml-tree.html#XMLNODE" target="_top">xmlNode</a></span></dt><dd><p>A structure containing a single node. <a href="http://xmlsoft.org/html/libxml-tree.html#XMLNODEPTR" target="_top">xmlNodePtr</a>
+ is a pointer to the structure, and is used in traversing the document tree.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ar01s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Libxml Tutorial </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Parsing the file</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ar01s03.html b/doc/tutorial/ar01s03.html
new file mode 100644
index 0000000..c824213
--- /dev/null
+++ b/doc/tutorial/ar01s03.html
@@ -0,0 +1,47 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Parsing the file</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="ar01s02.html" title="Data Types"><link rel="next" href="ar01s04.html" title="Retrieving Element Content"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Parsing the file</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ar01s02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ar01s04.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xmltutorialparsing"></a>Parsing the file</h2></div></div><div></div></div><p><a class="indexterm" name="fileparsing"></a>
+Parsing the file requires only the name of the file and a single
+ function call, plus error checking. Full code: <a href="apc.html" title="C. Code for Keyword Example">Appendix C, <i>Code for Keyword Example</i></a></p><p>
+ </p><pre class="programlisting">
+ <a name="declaredoc"></a><img src="images/callouts/1.png" alt="1" border="0"> xmlDocPtr doc;
+ <a name="declarenode"></a><img src="images/callouts/2.png" alt="2" border="0"> xmlNodePtr cur;
+
+ <a name="parsefile"></a><img src="images/callouts/3.png" alt="3" border="0"> doc = xmlParseFile(docname);
+
+ <a name="checkparseerror"></a><img src="images/callouts/4.png" alt="4" border="0"> if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return;
+ }
+
+ <a name="getrootelement"></a><img src="images/callouts/5.png" alt="5" border="0"> cur = xmlDocGetRootElement(doc);
+
+ <a name="checkemptyerror"></a><img src="images/callouts/6.png" alt="6" border="0"> if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ <a name="checkroottype"></a><img src="images/callouts/7.png" alt="7" border="0"> if (xmlStrcmp(cur-&gt;name, (const xmlChar *) "story")) {
+ fprintf(stderr,"document of the wrong type, root node != story");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ </pre><p>
+ </p><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><a href="#declaredoc"><img src="images/callouts/1.png" alt="1" border="0"></a> </td><td valign="top" align="left"><p>Declare the pointer that will point to your parsed document.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#declarenode"><img src="images/callouts/2.png" alt="2" border="0"></a> </td><td valign="top" align="left"><p>Declare a node pointer (you'll need this in order to
+ interact with individual nodes).</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#checkparseerror"><img src="images/callouts/4.png" alt="4" border="0"></a> </td><td valign="top" align="left"><p>Check to see that the document was successfully parsed. If it
+ was not, <span class="application">libxml</span> will at this point
+ register an error and stop.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td colspan="2" align="left" valign="top"><p><a class="indexterm" name="id2447307"></a>
+One common example of an error at this point is improper
+ handling of encoding. The <span class="acronym">XML</span> standard requires
+ documents stored with an encoding other than UTF-8 or UTF-16 to
+ contain an explicit declaration of their encoding. If the
+ declaration is there, <span class="application">libxml</span> will
+ automatically perform the necessary conversion to UTF-8 for
+ you. More information on <span class="acronym">XML's</span> encoding
+ requirements is contained in the <a href="http://www.w3.org/TR/REC-xml#charencoding" target="_top">standard</a>.</p></td></tr></table></div><p>
+ </p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#getrootelement"><img src="images/callouts/5.png" alt="5" border="0"></a> </td><td valign="top" align="left"><p>Retrieve the document's root element.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#checkemptyerror"><img src="images/callouts/6.png" alt="6" border="0"></a> </td><td valign="top" align="left"><p>Check to make sure the document actually contains something.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#checkroottype"><img src="images/callouts/7.png" alt="7" border="0"></a> </td><td valign="top" align="left"><p>In our case, we need to make sure the document is the right
+ type. "story" is the root type of the documents used in this
+ tutorial.</p></td></tr></table></div><p>
+ <a class="indexterm" name="id2447385"></a>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ar01s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ar01s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Data Types </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Retrieving Element Content</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ar01s04.html b/doc/tutorial/ar01s04.html
new file mode 100644
index 0000000..c14406a
--- /dev/null
+++ b/doc/tutorial/ar01s04.html
@@ -0,0 +1,54 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Retrieving Element Content</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="ar01s03.html" title="Parsing the file"><link rel="next" href="ar01s05.html" title="Using XPath to Retrieve Element Content"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Retrieving Element Content</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ar01s03.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ar01s05.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xmltutorialgettext"></a>Retrieving Element Content</h2></div></div><div></div></div><p><a class="indexterm" name="id2447408"></a>
+Retrieving the content of an element involves traversing the document
+ tree until you find what you are looking for. In this case, we are looking
+ for an element called "keyword" contained within element called "story". The
+ process to find the node we are interested in involves tediously walking the
+ tree. We assume you already have an xmlDocPtr called <tt class="varname">doc</tt>
+ and an xmlNodPtr called <tt class="varname">cur</tt>.</p><p>
+ </p><pre class="programlisting">
+ <a name="getchildnode"></a><img src="images/callouts/1.png" alt="1" border="0">cur = cur-&gt;xmlChildrenNode;
+ <a name="huntstoryinfo"></a><img src="images/callouts/2.png" alt="2" border="0">while (cur != NULL) {
+ if ((!xmlStrcmp(cur-&gt;name, (const xmlChar *)"storyinfo"))){
+ parseStory (doc, cur);
+ }
+
+ cur = cur-&gt;next;
+ }
+ </pre><p>
+
+ </p><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><a href="#getchildnode"><img src="images/callouts/1.png" alt="1" border="0"></a> </td><td valign="top" align="left"><p>Get the first child node of <tt class="varname">cur</tt>. At this
+ point, <tt class="varname">cur</tt> points at the document root, which is
+ the element "story".</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#huntstoryinfo"><img src="images/callouts/2.png" alt="2" border="0"></a> </td><td valign="top" align="left"><p>This loop iterates through the elements that are children of
+ "story", looking for one called "storyinfo". That
+ is the element that will contain the "keywords" we are
+ looking for. It uses the <span class="application">libxml</span> string
+ comparison
+ function, <tt class="function"><a href="http://xmlsoft.org/html/libxml-parser.html#XMLSTRCMP" target="_top">xmlStrcmp</a></tt>. If there is a match, it calls the function <tt class="function">parseStory</tt>.</p></td></tr></table></div><p>
+ </p><p>
+ </p><pre class="programlisting">
+void
+parseStory (xmlDocPtr doc, xmlNodePtr cur) {
+
+ xmlChar *key;
+ <a name="anothergetchild"></a><img src="images/callouts/1.png" alt="1" border="0"> cur = cur-&gt;xmlChildrenNode;
+ <a name="findkeyword"></a><img src="images/callouts/2.png" alt="2" border="0"> while (cur != NULL) {
+ if ((!xmlStrcmp(cur-&gt;name, (const xmlChar *)"keyword"))) {
+ <a name="foundkeyword"></a><img src="images/callouts/3.png" alt="3" border="0"> key = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ printf("keyword: %s\n", key);
+ xmlFree(key);
+ }
+ cur = cur-&gt;next;
+ }
+ return;
+}
+ </pre><p>
+ </p><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><a href="#anothergetchild"><img src="images/callouts/1.png" alt="1" border="0"></a> </td><td valign="top" align="left"><p>Again we get the first child node.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#findkeyword"><img src="images/callouts/2.png" alt="2" border="0"></a> </td><td valign="top" align="left"><p>Like the loop above, we then iterate through the nodes, looking
+ for one that matches the element we're interested in, in this case
+ "keyword".</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#foundkeyword"><img src="images/callouts/3.png" alt="3" border="0"></a> </td><td valign="top" align="left"><p>When we find the "keyword" element, we need to print
+ its contents. Remember that in <span class="acronym">XML</span>, the text
+ contained within an element is a child node of that element, so we
+ turn to <tt class="varname">cur-&gt;xmlChildrenNode</tt>. To retrieve it, we
+ use the function <tt class="function"><a href="http://xmlsoft.org/html/libxml-tree.html#XMLNODELISTGETSTRING" target="_top">xmlNodeListGetString</a></tt>, which also takes the <tt class="varname">doc</tt> pointer as an argument. In this case, we just print it out.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td colspan="2" align="left" valign="top"><p>Because <tt class="function">xmlNodeListGetString</tt> allocates
+ memory for the string it returns, you must use
+ <tt class="function">xmlFree</tt> to free it.</p></td></tr></table></div></td></tr></table></div><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ar01s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ar01s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Parsing the file </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Using XPath to Retrieve Element Content</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ar01s05.html b/doc/tutorial/ar01s05.html
new file mode 100644
index 0000000..04acc01
--- /dev/null
+++ b/doc/tutorial/ar01s05.html
@@ -0,0 +1,56 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Using XPath to Retrieve Element Content</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="ar01s04.html" title="Retrieving Element Content"><link rel="next" href="ar01s06.html" title="Writing element content"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using XPath to Retrieve Element Content</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ar01s04.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ar01s06.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xmltutorialxpath"></a>Using XPath to Retrieve Element Content</h2></div></div><div></div></div><p>In addition to walking the document tree to find an element,
+ <span class="application">Libxml2</span> includes support for
+ use of <span class="application">XPath</span> expressions to retrieve sets of
+ nodes that match a specified criteria. Full documentation of the
+ <span class="application">XPath</span> <span class="acronym">API</span> is <a href="http://xmlsoft.org/html/libxml-xpath.html" target="_top">here</a>.
+ </p><p><span class="application">XPath</span> allows searching through a document
+ for nodes that match specified criteria. In the example below we search
+ through a document for the contents of all <tt class="varname">keyword</tt>
+ elements.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td colspan="2" align="left" valign="top"><p>A full discussion of <span class="application">XPath</span> is beyond
+ the scope of this document. For details on its use, see the <a href="http://www.w3.org/TR/xpath" target="_top">XPath specification</a>.</p></td></tr></table></div><p>
+ Full code for this example is at <a href="apd.html" title="D. Code for XPath Example">Appendix D, <i>Code for XPath Example</i></a>.
+ </p><p>Using <span class="application">XPath</span> requires setting up an
+ xmlXPathContext and then supplying the <span class="application">XPath</span>
+ expression and the context to the
+ <tt class="function">xmlXPathEvalExpression</tt> function. The function returns
+ an xmlXPathObjectPtr, which includes the set of nodes satisfying the
+ <span class="application">XPath</span> expression.</p><p>
+ </p><pre class="programlisting">
+ xmlXPathObjectPtr
+ getnodeset (xmlDocPtr doc, xmlChar *xpath){
+
+ <a name="cocontext"></a><img src="images/callouts/1.png" alt="1" border="0">xmlXPathContextPtr context;
+ xmlXPathObjectPtr result;
+
+ <a name="cocreatecontext"></a><img src="images/callouts/2.png" alt="2" border="0">context = xmlXPathNewContext(doc);
+ <a name="corunxpath"></a><img src="images/callouts/3.png" alt="3" border="0">result = xmlXPathEvalExpression(xpath, context);
+ <a name="cocheckxpathresult"></a><img src="images/callouts/4.png" alt="4" border="0">if(xmlXPathNodeSetIsEmpty(result-&gt;nodesetval)){
+ printf("No result\n");
+ return NULL;
+ }
+ xmlXPathFreeContext(context);
+ return result;
+ </pre><p>
+ </p><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><a href="#cocontext"><img src="images/callouts/1.png" alt="1" border="0"></a> </td><td valign="top" align="left"><p>First we declare our variables.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#cocreatecontext"><img src="images/callouts/2.png" alt="2" border="0"></a> </td><td valign="top" align="left"><p>Initialize the <tt class="varname">context</tt> variable.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#corunxpath"><img src="images/callouts/3.png" alt="3" border="0"></a> </td><td valign="top" align="left"><p>Apply the <span class="application">XPath</span> expression.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#cocheckxpathresult"><img src="images/callouts/4.png" alt="4" border="0"></a> </td><td valign="top" align="left"><p>Check the result.</p></td></tr></table></div><p>
+ </p><p>The xmlPathObjectPtr returned by the function contains a set of nodes
+ and other information needed to iterate through the set and act on the
+ results. For this example, our functions returns the
+ <tt class="varname">xmlXPathObjectPtr</tt>. We use it to print the contents of
+ <tt class="varname">keyword</tt> nodes in our document. The node set object
+ includes the number of elements in the set (<tt class="varname">nodeNr</tt>) and
+ an array of nodes (<tt class="varname">nodeTab</tt>):
+ </p><pre class="programlisting">
+ <a name="conodesetcounter"></a><img src="images/callouts/1.png" alt="1" border="0">for (i=0; i &lt; nodeset-&gt;nodeNr; i++) {
+ <a name="coprintkeywords"></a><img src="images/callouts/2.png" alt="2" border="0">keyword = xmlNodeListGetString(doc, nodeset-&gt;nodeTab[i]-&gt;xmlChildrenNode, 1);
+ printf("keyword: %s\n", keyword);
+ xmlFree(keyword);
+ }
+ </pre><p>
+ </p><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><a href="#conodesetcounter"><img src="images/callouts/1.png" alt="1" border="0"></a> </td><td valign="top" align="left"><p>The value of <tt class="varname">nodeset-&gt;Nr</tt> holds the number of
+ elements in the node set. Here we use it to iterate through the array.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#coprintkeywords"><img src="images/callouts/2.png" alt="2" border="0"></a> </td><td valign="top" align="left"><p>Here we print the contents of each of the nodes returned.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td colspan="2" align="left" valign="top"><p>Note that we are printing the child node of the node that is
+ returned, because the contents of the <tt class="varname">keyword</tt>
+ element are a child text node.</p></td></tr></table></div><p>
+ </p></td></tr></table></div><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ar01s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ar01s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Retrieving Element Content </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing element content</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ar01s06.html b/doc/tutorial/ar01s06.html
new file mode 100644
index 0000000..fb8c8a7
--- /dev/null
+++ b/doc/tutorial/ar01s06.html
@@ -0,0 +1,35 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Writing element content</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="ar01s05.html" title="Using XPath to Retrieve Element Content"><link rel="next" href="ar01s07.html" title="Writing Attribute"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing element content</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ar01s05.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ar01s07.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xmltutorialwritingcontent"></a>Writing element content</h2></div></div><div></div></div><p><a class="indexterm" name="id2508968"></a>
+ Writing element content uses many of the same steps we used above
+ &#8212; parsing the document and walking the tree. We parse the document,
+ then traverse the tree to find the place we want to insert our element. For
+ this example, we want to again find the "storyinfo" element and
+ this time insert a keyword. Then we'll write the file to disk. Full code:
+ <a href="ape.html" title="E. Code for Add Keyword Example">Appendix E, <i>Code for Add Keyword Example</i></a></p><p>
+ The main difference in this example is in
+ <tt class="function">parseStory</tt>:
+
+ </p><pre class="programlisting">
+void
+parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) {
+
+ <a name="addkeyword"></a><img src="images/callouts/1.png" alt="1" border="0"> xmlNewTextChild (cur, NULL, "keyword", keyword);
+ return;
+}
+ </pre><p>
+ </p><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><a href="#addkeyword"><img src="images/callouts/1.png" alt="1" border="0"></a> </td><td valign="top" align="left"><p>The <tt class="function"><a href="http://xmlsoft.org/html/libxml-tree.html#XMLNEWTEXTCHILD" target="_top">xmlNewTextChild</a></tt>
+ function adds a new child element at the
+ current node pointer's location in the
+ tree, specified by <tt class="varname">cur</tt>.</p></td></tr></table></div><p>
+ </p><p>
+ <a class="indexterm" name="id2509052"></a>
+ Once the node has been added, we would like to write the document to
+ file. Is you want the element to have a namespace, you can add it here as
+ well. In our case, the namespace is NULL.
+ </p><pre class="programlisting">
+ xmlSaveFormatFile (docname, doc, 1);
+ </pre><p>
+ The first parameter is the name of the file to be written. You'll notice
+ it is the same as the file we just read. In this case, we just write over
+ the old file. The second parameter is a pointer to the xmlDoc
+ structure. Setting the third parameter equal to one ensures indenting on output.
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ar01s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ar01s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using XPath to Retrieve Element Content </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing Attribute</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ar01s07.html b/doc/tutorial/ar01s07.html
new file mode 100644
index 0000000..395b780
--- /dev/null
+++ b/doc/tutorial/ar01s07.html
@@ -0,0 +1,30 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Writing Attribute</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="ar01s06.html" title="Writing element content"><link rel="next" href="ar01s08.html" title="Retrieving Attributes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing Attribute</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ar01s06.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ar01s08.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xmltutorialwritingattribute"></a>Writing Attribute</h2></div></div><div></div></div><p><a class="indexterm" name="id2509094"></a>
+Writing an attribute is similar to writing text to a new element. In
+ this case, we'll add a reference <span class="acronym">URI</span> to our
+ document. Full code:<a href="apf.html" title="F. Code for Add Attribute Example">Appendix F, <i>Code for Add Attribute Example</i></a>.</p><p>
+ A <tt class="sgmltag-element">reference</tt> is a child of the <tt class="sgmltag-element">story</tt>
+ element, so finding the place to put our new element and attribute is
+ simple. As soon as we do the error-checking test in our
+ <tt class="function">parseDoc</tt>, we are in the right spot to add our
+ element. But before we do that, we need to make a declaration using a
+ data type we have not seen yet:
+ </p><pre class="programlisting">
+ xmlAttrPtr newattr;
+ </pre><p>
+ We also need an extra xmlNodePtr:
+ </p><pre class="programlisting">
+ xmlNodePtr newnode;
+ </pre><p>
+ </p><p>
+ The rest of <tt class="function">parseDoc</tt> is the same as before until we
+ check to see if our root element is <tt class="sgmltag-element">story</tt>. If it is,
+ then we know we are at the right spot to add our element:
+
+ </p><pre class="programlisting">
+ <a name="addreferencenode"></a><img src="images/callouts/1.png" alt="1" border="0"> newnode = xmlNewTextChild (cur, NULL, "reference", NULL);
+ <a name="addattributenode"></a><img src="images/callouts/2.png" alt="2" border="0"> newattr = xmlNewProp (newnode, "uri", uri);
+ </pre><p>
+ </p><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><a href="#addreferencenode"><img src="images/callouts/1.png" alt="1" border="0"></a> </td><td valign="top" align="left"><p>First we add a new node at the location of the current node
+ pointer, <tt class="varname">cur.</tt> using the <a href="http://xmlsoft.org/html/libxml-tree.html#XMLNEWTEXTCHILD" target="_top">xmlNewTextChild</a> function.</p></td></tr></table></div><p>
+ </p><p>Once the node is added, the file is written to disk just as in the
+ previous example in which we added an element with text content.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ar01s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ar01s08.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Writing element content </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Retrieving Attributes</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ar01s08.html b/doc/tutorial/ar01s08.html
new file mode 100644
index 0000000..f07f8ef
--- /dev/null
+++ b/doc/tutorial/ar01s08.html
@@ -0,0 +1,38 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Retrieving Attributes</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="ar01s07.html" title="Writing Attribute"><link rel="next" href="ar01s09.html" title="Encoding Conversion"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Retrieving Attributes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ar01s07.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ar01s09.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xmltutorialattribute"></a>Retrieving Attributes</h2></div></div><div></div></div><p><a class="indexterm" name="id2509236"></a>
+Retrieving the value of an attribute is similar to the previous
+ example in which we retrieved a node's text contents. In this case we'll
+ extract the value of the <span class="acronym">URI</span> we added in the previous
+ section. Full code: <a href="apg.html" title="G. Code for Retrieving Attribute Value Example">Appendix G, <i>Code for Retrieving Attribute Value Example</i></a>.</p><p>
+ The initial steps for this example are similar to the previous ones: parse
+ the doc, find the element you are interested in, then enter a function to
+ carry out the specific task required. In this case, we call
+ <tt class="function">getReference</tt>:
+ </p><pre class="programlisting">
+void
+getReference (xmlDocPtr doc, xmlNodePtr cur) {
+
+ xmlChar *uri;
+ cur = cur-&gt;xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur-&gt;name, (const xmlChar *)"reference"))) {
+ <a name="getattributevalue"></a><img src="images/callouts/1.png" alt="1" border="0"> uri = xmlGetProp(cur, "uri");
+ printf("uri: %s\n", uri);
+ xmlFree(uri);
+ }
+ cur = cur-&gt;next;
+ }
+ return;
+}
+ </pre><p>
+
+ </p><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><a href="#getattributevalue"><img src="images/callouts/1.png" alt="1" border="0"></a> </td><td valign="top" align="left"><p>
+ The key function is <tt class="function"><a href="http://xmlsoft.org/html/libxml-tree.html#XMLGETPROP" target="_top">xmlGetProp</a></tt>, which returns an
+ <tt class="varname">xmlChar</tt> containing the attribute's value. In this case,
+ we just print it out.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td colspan="2" align="left" valign="top"><p>
+ If you are using a <span class="acronym">DTD</span> that declares a fixed or
+ default value for the attribute, this function will retrieve it.
+ </p></td></tr></table></div><p>
+ </p></td></tr></table></div><p>
+
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ar01s07.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ar01s09.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Writing Attribute </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Encoding Conversion</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ar01s09.html b/doc/tutorial/ar01s09.html
new file mode 100644
index 0000000..76f52cc
--- /dev/null
+++ b/doc/tutorial/ar01s09.html
@@ -0,0 +1,63 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Encoding Conversion</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="ar01s08.html" title="Retrieving Attributes"><link rel="next" href="apa.html" title="A. Compilation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Encoding Conversion</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ar01s08.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="apa.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="xmltutorialconvert"></a>Encoding Conversion</h2></div></div><div></div></div><p><a class="indexterm" name="id2509349"></a>
+Data encoding compatibility problems are one of the most common
+ difficulties encountered by programmers new to <span class="acronym">XML</span> in
+ general and <span class="application">libxml</span> in particular. Thinking
+ through the design of your application in light of this issue will help
+ avoid difficulties later. Internally, <span class="application">libxml</span>
+ stores and manipulates data in the UTF-8 format. Data used by your program
+ in other formats, such as the commonly used ISO-8859-1 encoding, must be
+ converted to UTF-8 before passing it to <span class="application">libxml</span>
+ functions. If you want your program's output in an encoding other than
+ UTF-8, you also must convert it.</p><p><span class="application">Libxml</span> uses
+ <span class="application">iconv</span> if it is available to convert
+ data. Without <span class="application">iconv</span>, only UTF-8, UTF-16 and
+ ISO-8859-1 can be used as external formats. With
+ <span class="application">iconv</span>, any format can be used provided
+ <span class="application">iconv</span> is able to convert it to and from
+ UTF-8. Currently <span class="application">iconv</span> supports about 150
+ different character formats with ability to convert from any to any. While
+ the actual number of supported formats varies between implementations, every
+ <span class="application">iconv</span> implementation is almost guaranteed to
+ support every format anyone has ever heard of.</p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left">Warning</th></tr><tr><td colspan="2" align="left" valign="top"><p>A common mistake is to use different formats for the internal data
+ in different parts of one's code. The most common case is an application
+ that assumes ISO-8859-1 to be the internal data format, combined with
+ <span class="application">libxml</span>, which assumes UTF-8 to be the
+ internal data format. The result is an application that treats internal
+ data differently, depending on which code section is executing. The one or
+ the other part of code will then, naturally, misinterpret the data.
+ </p></td></tr></table></div><p>This example constructs a simple document, then adds content provided
+ at the command line to the document's root element and outputs the results
+ to <tt class="filename">stdout</tt> in the proper encoding. For this example, we
+ use ISO-8859-1 encoding. The encoding of the string input at the command
+ line is converted from ISO-8859-1 to UTF-8. Full code: <a href="aph.html" title="H. Code for Encoding Conversion Example">Appendix H, <i>Code for Encoding Conversion Example</i></a></p><p>The conversion, encapsulated in the example code in the
+ <tt class="function">convert</tt> function, uses
+ <span class="application">libxml's</span>
+ <tt class="function">xmlFindCharEncodingHandler</tt> function:
+ </p><pre class="programlisting">
+ <a name="handlerdatatype"></a><img src="images/callouts/1.png" alt="1" border="0">xmlCharEncodingHandlerPtr handler;
+ <a name="calcsize"></a><img src="images/callouts/2.png" alt="2" border="0">size = (int)strlen(in)+1;
+ out_size = size*2-1;
+ out = malloc((size_t)out_size);
+
+&#8230;
+ <a name="findhandlerfunction"></a><img src="images/callouts/3.png" alt="3" border="0">handler = xmlFindCharEncodingHandler(encoding);
+&#8230;
+ <a name="callconversionfunction"></a><img src="images/callouts/4.png" alt="4" border="0">handler-&gt;input(out, &amp;out_size, in, &amp;temp);
+&#8230;
+ <a name="outputencoding"></a><img src="images/callouts/5.png" alt="5" border="0">xmlSaveFormatFileEnc("-", doc, encoding, 1);
+ </pre><p>
+ </p><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><a href="#handlerdatatype"><img src="images/callouts/1.png" alt="1" border="0"></a> </td><td valign="top" align="left"><p><tt class="varname">handler</tt> is declared as a pointer to an
+ <tt class="function">xmlCharEncodingHandler</tt> function.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#calcsize"><img src="images/callouts/2.png" alt="2" border="0"></a> </td><td valign="top" align="left"><p>The <tt class="function">xmlCharEncodingHandler</tt> function needs
+ to be given the size of the input and output strings, which are
+ calculated here for strings <tt class="varname">in</tt> and
+ <tt class="varname">out</tt>.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#findhandlerfunction"><img src="images/callouts/3.png" alt="3" border="0"></a> </td><td valign="top" align="left"><p><tt class="function">xmlFindCharEncodingHandler</tt> takes as its
+ argument the data's initial encoding and searches
+ <span class="application">libxml's</span> built-in set of conversion
+ handlers, returning a pointer to the function or NULL if none is
+ found.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#callconversionfunction"><img src="images/callouts/4.png" alt="4" border="0"></a> </td><td valign="top" align="left"><p>The conversion function identified by <tt class="varname">handler</tt>
+ requires as its arguments pointers to the input and output strings,
+ along with the length of each. The lengths must be determined
+ separately by the application.</p></td></tr><tr><td width="5%" valign="top" align="left"><a href="#outputencoding"><img src="images/callouts/5.png" alt="5" border="0"></a> </td><td valign="top" align="left"><p>To output in a specified encoding rather than UTF-8, we use
+ <tt class="function">xmlSaveFormatFileEnc</tt>, specifying the
+ encoding.</p></td></tr></table></div><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ar01s08.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="apa.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Retrieving Attributes </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> A. Compilation</td></tr></table></div></body></html>
diff --git a/doc/tutorial/images/blank.png b/doc/tutorial/images/blank.png
new file mode 100644
index 0000000..764bf4f
--- /dev/null
+++ b/doc/tutorial/images/blank.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/1.png b/doc/tutorial/images/callouts/1.png
new file mode 100644
index 0000000..7d47343
--- /dev/null
+++ b/doc/tutorial/images/callouts/1.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/10.png b/doc/tutorial/images/callouts/10.png
new file mode 100644
index 0000000..997bbc8
--- /dev/null
+++ b/doc/tutorial/images/callouts/10.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/2.png b/doc/tutorial/images/callouts/2.png
new file mode 100644
index 0000000..5d09341
--- /dev/null
+++ b/doc/tutorial/images/callouts/2.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/3.png b/doc/tutorial/images/callouts/3.png
new file mode 100644
index 0000000..ef7b700
--- /dev/null
+++ b/doc/tutorial/images/callouts/3.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/4.png b/doc/tutorial/images/callouts/4.png
new file mode 100644
index 0000000..adb8364
--- /dev/null
+++ b/doc/tutorial/images/callouts/4.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/5.png b/doc/tutorial/images/callouts/5.png
new file mode 100644
index 0000000..4d7eb46
--- /dev/null
+++ b/doc/tutorial/images/callouts/5.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/6.png b/doc/tutorial/images/callouts/6.png
new file mode 100644
index 0000000..0ba694a
--- /dev/null
+++ b/doc/tutorial/images/callouts/6.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/7.png b/doc/tutorial/images/callouts/7.png
new file mode 100644
index 0000000..472e96f
--- /dev/null
+++ b/doc/tutorial/images/callouts/7.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/8.png b/doc/tutorial/images/callouts/8.png
new file mode 100644
index 0000000..5e60973
--- /dev/null
+++ b/doc/tutorial/images/callouts/8.png
Binary files differ
diff --git a/doc/tutorial/images/callouts/9.png b/doc/tutorial/images/callouts/9.png
new file mode 100644
index 0000000..a0676d2
--- /dev/null
+++ b/doc/tutorial/images/callouts/9.png
Binary files differ
diff --git a/doc/tutorial/images/caution.png b/doc/tutorial/images/caution.png
new file mode 100644
index 0000000..5b7809c
--- /dev/null
+++ b/doc/tutorial/images/caution.png
Binary files differ
diff --git a/doc/tutorial/images/draft.png b/doc/tutorial/images/draft.png
new file mode 100644
index 0000000..0084708
--- /dev/null
+++ b/doc/tutorial/images/draft.png
Binary files differ
diff --git a/doc/tutorial/images/home.png b/doc/tutorial/images/home.png
new file mode 100644
index 0000000..cbb711d
--- /dev/null
+++ b/doc/tutorial/images/home.png
Binary files differ
diff --git a/doc/tutorial/images/important.png b/doc/tutorial/images/important.png
new file mode 100644
index 0000000..12c90f6
--- /dev/null
+++ b/doc/tutorial/images/important.png
Binary files differ
diff --git a/doc/tutorial/images/next.png b/doc/tutorial/images/next.png
new file mode 100644
index 0000000..45835bf
--- /dev/null
+++ b/doc/tutorial/images/next.png
Binary files differ
diff --git a/doc/tutorial/images/note.png b/doc/tutorial/images/note.png
new file mode 100644
index 0000000..d0c3c64
--- /dev/null
+++ b/doc/tutorial/images/note.png
Binary files differ
diff --git a/doc/tutorial/images/prev.png b/doc/tutorial/images/prev.png
new file mode 100644
index 0000000..cf24654
--- /dev/null
+++ b/doc/tutorial/images/prev.png
Binary files differ
diff --git a/doc/tutorial/images/tip.png b/doc/tutorial/images/tip.png
new file mode 100644
index 0000000..5c4aab3
--- /dev/null
+++ b/doc/tutorial/images/tip.png
Binary files differ
diff --git a/doc/tutorial/images/toc-blank.png b/doc/tutorial/images/toc-blank.png
new file mode 100644
index 0000000..6ffad17
--- /dev/null
+++ b/doc/tutorial/images/toc-blank.png
Binary files differ
diff --git a/doc/tutorial/images/toc-minus.png b/doc/tutorial/images/toc-minus.png
new file mode 100644
index 0000000..abbb020
--- /dev/null
+++ b/doc/tutorial/images/toc-minus.png
Binary files differ
diff --git a/doc/tutorial/images/toc-plus.png b/doc/tutorial/images/toc-plus.png
new file mode 100644
index 0000000..941312c
--- /dev/null
+++ b/doc/tutorial/images/toc-plus.png
Binary files differ
diff --git a/doc/tutorial/images/up.png b/doc/tutorial/images/up.png
new file mode 100644
index 0000000..07634de
--- /dev/null
+++ b/doc/tutorial/images/up.png
Binary files differ
diff --git a/doc/tutorial/images/warning.png b/doc/tutorial/images/warning.png
new file mode 100644
index 0000000..1c33db8
--- /dev/null
+++ b/doc/tutorial/images/warning.png
Binary files differ
diff --git a/doc/tutorial/includeaddattribute.c b/doc/tutorial/includeaddattribute.c
new file mode 100644
index 0000000..bb6a18b
--- /dev/null
+++ b/doc/tutorial/includeaddattribute.c
@@ -0,0 +1,64 @@
+<![CDATA[
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+
+
+xmlDocPtr
+parseDoc(char *docname, char *uri) {
+
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+ xmlNodePtr newnode;
+ xmlAttrPtr newattr;
+
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return (NULL);
+ }
+
+ cur = xmlDocGetRootElement(doc);
+
+ if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
+ fprintf(stderr,"document of the wrong type, root node != story");
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ newnode = xmlNewTextChild (cur, NULL, "reference", NULL);
+ newattr = xmlNewProp (newnode, "uri", uri);
+ return(doc);
+}
+
+int
+main(int argc, char **argv) {
+
+ char *docname;
+ char *uri;
+ xmlDocPtr doc;
+
+ if (argc <= 2) {
+ printf("Usage: %s docname, uri\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ uri = argv[2];
+ doc = parseDoc (docname, uri);
+ if (doc != NULL) {
+ xmlSaveFormatFile (docname, doc, 1);
+ xmlFreeDoc(doc);
+ }
+ return (1);
+}
+]]>
diff --git a/doc/tutorial/includeaddkeyword.c b/doc/tutorial/includeaddkeyword.c
new file mode 100644
index 0000000..975168d
--- /dev/null
+++ b/doc/tutorial/includeaddkeyword.c
@@ -0,0 +1,75 @@
+<![CDATA[
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+
+void
+parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) {
+
+ xmlNewTextChild (cur, NULL, "keyword", keyword);
+ return;
+}
+
+xmlDocPtr
+parseDoc(char *docname, char *keyword) {
+
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return (NULL);
+ }
+
+ cur = xmlDocGetRootElement(doc);
+
+ if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
+ fprintf(stderr,"document of the wrong type, root node != story");
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ cur = cur->xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){
+ parseStory (doc, cur, keyword);
+ }
+
+ cur = cur->next;
+ }
+ return(doc);
+}
+
+int
+main(int argc, char **argv) {
+
+ char *docname;
+ char *keyword;
+ xmlDocPtr doc;
+
+ if (argc <= 2) {
+ printf("Usage: %s docname, keyword\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ keyword = argv[2];
+ doc = parseDoc (docname, keyword);
+ if (doc != NULL) {
+ xmlSaveFormatFile (docname, doc, 0);
+ xmlFreeDoc(doc);
+ }
+
+ return (1);
+}
+]]>
diff --git a/doc/tutorial/includeconvert.c b/doc/tutorial/includeconvert.c
new file mode 100644
index 0000000..482e56f
--- /dev/null
+++ b/doc/tutorial/includeconvert.c
@@ -0,0 +1,73 @@
+<![CDATA[
+#include <string.h>
+#include <libxml/parser.h>
+
+
+unsigned char*
+convert (unsigned char *in, char *encoding)
+{
+ unsigned char *out;
+ int ret,size,out_size,temp;
+ xmlCharEncodingHandlerPtr handler;
+
+ size = (int)strlen(in)+1;
+ out_size = size*2-1;
+ out = malloc((size_t)out_size);
+
+ if (out) {
+ handler = xmlFindCharEncodingHandler(encoding);
+
+ if (!handler) {
+ free(out);
+ out = NULL;
+ }
+ }
+ if (out) {
+ temp=size-1;
+ ret = handler->input(out, &out_size, in, &temp);
+ if (ret || temp-size+1) {
+ if (ret) {
+ printf("conversion wasn't successful.\n");
+ } else {
+ printf("conversion wasn't successful. converted: %i octets.\n",temp);
+ }
+ free(out);
+ out = NULL;
+ } else {
+ out = realloc(out,out_size+1);
+ out[out_size]=0; /*null terminating out*/
+
+ }
+ } else {
+ printf("no mem\n");
+ }
+ return (out);
+}
+
+
+int
+main(int argc, char **argv) {
+
+ unsigned char *content, *out;
+ xmlDocPtr doc;
+ xmlNodePtr rootnode;
+ char *encoding = "ISO-8859-1";
+
+
+ if (argc <= 1) {
+ printf("Usage: %s content\n", argv[0]);
+ return(0);
+ }
+
+ content = argv[1];
+
+ out = convert(content, encoding);
+
+ doc = xmlNewDoc ("1.0");
+ rootnode = xmlNewDocNode(doc, NULL, (const xmlChar*)"root", out);
+ xmlDocSetRootElement(doc, rootnode);
+
+ xmlSaveFormatFileEnc("-", doc, encoding, 1);
+ return (1);
+}
+]]>
diff --git a/doc/tutorial/includegetattribute.c b/doc/tutorial/includegetattribute.c
new file mode 100644
index 0000000..b2b7471
--- /dev/null
+++ b/doc/tutorial/includegetattribute.c
@@ -0,0 +1,72 @@
+<![CDATA[
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+
+void
+getReference (xmlDocPtr doc, xmlNodePtr cur) {
+
+ xmlChar *uri;
+ cur = cur->xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"reference"))) {
+ uri = xmlGetProp(cur, "uri");
+ printf("uri: %s\n", uri);
+ xmlFree(uri);
+ }
+ cur = cur->next;
+ }
+ return;
+}
+
+
+void
+parseDoc(char *docname) {
+
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return;
+ }
+
+ cur = xmlDocGetRootElement(doc);
+
+ if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
+ fprintf(stderr,"document of the wrong type, root node != story");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ getReference (doc, cur);
+ xmlFreeDoc(doc);
+ return;
+}
+
+int
+main(int argc, char **argv) {
+
+ char *docname;
+
+ if (argc <= 1) {
+ printf("Usage: %s docname\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ parseDoc (docname);
+
+ return (1);
+}
+]]>
diff --git a/doc/tutorial/includekeyword.c b/doc/tutorial/includekeyword.c
new file mode 100644
index 0000000..e9bb467
--- /dev/null
+++ b/doc/tutorial/includekeyword.c
@@ -0,0 +1,79 @@
+<![CDATA[
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+
+void
+parseStory (xmlDocPtr doc, xmlNodePtr cur) {
+
+ xmlChar *key;
+ cur = cur->xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"keyword"))) {
+ key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ printf("keyword: %s\n", key);
+ xmlFree(key);
+ }
+ cur = cur->next;
+ }
+ return;
+}
+
+static void
+parseDoc(char *docname) {
+
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return;
+ }
+
+ cur = xmlDocGetRootElement(doc);
+
+ if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
+ fprintf(stderr,"document of the wrong type, root node != story");
+ xmlFreeDoc(doc);
+ return;
+ }
+
+ cur = cur->xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){
+ parseStory (doc, cur);
+ }
+
+ cur = cur->next;
+ }
+
+ xmlFreeDoc(doc);
+ return;
+}
+
+int
+main(int argc, char **argv) {
+
+ char *docname;
+
+ if (argc <= 1) {
+ printf("Usage: %s docname\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ parseDoc (docname);
+
+ return (1);
+}
+]]>
diff --git a/doc/tutorial/includexpath.c b/doc/tutorial/includexpath.c
new file mode 100644
index 0000000..92c0944
--- /dev/null
+++ b/doc/tutorial/includexpath.c
@@ -0,0 +1,65 @@
+<![CDATA[
+#include <libxml/parser.h>
+#include <libxml/xpath.h>
+
+xmlDocPtr
+getdoc (char *docname) {
+ xmlDocPtr doc;
+ doc = xmlParseFile(docname);
+
+ if (doc == NULL ) {
+ fprintf(stderr,"Document not parsed successfully. \n");
+ return NULL;
+ }
+
+ return doc;
+}
+
+xmlXPathObjectPtr
+getnodeset (xmlDocPtr doc, xmlChar *xpath){
+
+ xmlXPathContextPtr context;
+ xmlXPathObjectPtr result;
+
+ context = xmlXPathNewContext(doc);
+ result = xmlXPathEvalExpression(xpath, context);
+ if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
+ printf("No result\n");
+ return NULL;
+ }
+ xmlXPathFreeContext(context);
+ return result;
+}
+int
+main(int argc, char **argv) {
+
+ char *docname;
+ xmlDocPtr doc;
+ xmlChar *xpath = ("//keyword");
+ xmlNodeSetPtr nodeset;
+ xmlXPathObjectPtr result;
+ int i;
+ xmlChar *keyword;
+
+ if (argc <= 1) {
+ printf("Usage: %s docname\n", argv[0]);
+ return(0);
+ }
+
+ docname = argv[1];
+ doc = getdoc(docname);
+ result = getnodeset (doc, xpath);
+ if (result) {
+ nodeset = result->nodesetval;
+ for (i=0; i < nodeset->nodeNr; i++) {
+ keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
+ printf("keyword: %s\n", keyword);
+ xmlFree(keyword);
+ }
+ xmlXPathFreeObject (result);
+ }
+ xmlFreeDoc(doc);
+ xmlCleanupParser();
+ return (1);
+}
+]]>
diff --git a/doc/tutorial/index.html b/doc/tutorial/index.html
new file mode 100644
index 0000000..7722005
--- /dev/null
+++ b/doc/tutorial/index.html
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Libxml Tutorial</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="next" href="ar01s02.html" title="Data Types"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Libxml Tutorial</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ar01s02.html">Next</a></td></tr></table><hr></div><div class="article" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id2393988"></a>Libxml Tutorial</h1></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="surname">Fleck</span></h3></div></div><div><p class="copyright">Copyright © 2002, 2003 John Fleck</p></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 1</td><td align="left">June 4, 2002</td></tr><tr><td align="left" colspan="2">Initial draft</td></tr><tr><td align="left">Revision 2</td><td align="left">June 12, 2002</td></tr><tr><td align="left" colspan="2">retrieving attribute value added</td></tr><tr><td align="left">Revision 3</td><td align="left">Aug. 31, 2002</td></tr><tr><td align="left" colspan="2">freeing memory fix</td></tr><tr><td align="left">Revision 4</td><td align="left">Nov. 10, 2002</td></tr><tr><td align="left" colspan="2">encoding discussion added</td></tr><tr><td align="left">Revision 5</td><td align="left">Dec. 15, 2002</td></tr><tr><td align="left" colspan="2">more memory freeing changes</td></tr><tr><td align="left">Revision 6</td><td align="left">Jan. 26. 2003</td></tr><tr><td align="left" colspan="2">add index</td></tr><tr><td align="left">Revision 7</td><td align="left">April 25, 2003</td></tr><tr><td align="left" colspan="2">add compilation appendix</td></tr><tr><td align="left">Revision 8</td><td align="left">July 24, 2003</td></tr><tr><td align="left" colspan="2">add XPath example</td></tr><tr><td align="left">Revision 9</td><td align="left">Feb. 14, 2004</td></tr><tr><td align="left" colspan="2">Fix bug in XPath example</td></tr></table></div></div></div><div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="index.html#introduction">Introduction</a></dt><dt><a href="ar01s02.html">Data Types</a></dt><dt><a href="ar01s03.html">Parsing the file</a></dt><dt><a href="ar01s04.html">Retrieving Element Content</a></dt><dt><a href="ar01s05.html">Using XPath to Retrieve Element Content</a></dt><dt><a href="ar01s06.html">Writing element content</a></dt><dt><a href="ar01s07.html">Writing Attribute</a></dt><dt><a href="ar01s08.html">Retrieving Attributes</a></dt><dt><a href="ar01s09.html">Encoding Conversion</a></dt><dt>A. <a href="apa.html">Compilation</a></dt><dt>B. <a href="apb.html">Sample Document</a></dt><dt>C. <a href="apc.html">Code for Keyword Example</a></dt><dt>D. <a href="apd.html">Code for XPath Example</a></dt><dt>E. <a href="ape.html">Code for Add Keyword Example</a></dt><dt>F. <a href="apf.html">Code for Add Attribute Example</a></dt><dt>G. <a href="apg.html">Code for Retrieving Attribute Value Example</a></dt><dt>H. <a href="aph.html">Code for Encoding Conversion Example</a></dt><dt>I. <a href="api.html">Acknowledgements</a></dt></dl></div><div class="abstract"><p class="title"><b>Abstract</b></p><p>Libxml is a freely licensed C language library for handling
+ <span class="acronym">XML</span>, portable across a large number of platforms. This
+ tutorial provides examples of its basic functions.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="introduction"></a>Introduction</h2></div></div><div></div></div><p>Libxml is a C language library implementing functions for reading,
+ creating and manipulating <span class="acronym">XML</span> data. This tutorial
+ provides example code and explanations of its basic functionality.</p><p>Libxml and more details about its use are available on <a href="http://www.xmlsoft.org/" target="_top">the project home page</a>. Included there is complete <a href="http://xmlsoft.org/html/libxml-lib.html" target="_top">
+ <span class="acronym">API</span> documentation</a>. This tutorial is not meant
+ to substitute for that complete documentation, but to illustrate the
+ functions needed to use the library to perform basic operations.
+
+</p><p>The tutorial is based on a simple <span class="acronym">XML</span> application I
+ use for articles I write. The format includes metadata and the body
+ of the article.</p><p>The example code in this tutorial demonstrates how to:
+ </p><div class="itemizedlist"><ul type="disc"><li><p>Parse the document.</p></li><li><p>Extract the text within a specified element.</p></li><li><p>Add an element and its content.</p></li><li><p>Add an attribute.</p></li><li><p>Extract the value of an attribute.</p></li></ul></div><p>
+ </p><p>Full code for the examples is included in the appendices.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ar01s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Data Types</td></tr></table></div></body></html>
diff --git a/doc/tutorial/ix01.html b/doc/tutorial/ix01.html
new file mode 100644
index 0000000..8a0687b
--- /dev/null
+++ b/doc/tutorial/ix01.html
@@ -0,0 +1 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Index</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="index.html" title="Libxml Tutorial"><link rel="up" href="index.html" title="Libxml Tutorial"><link rel="previous" href="api.html" title="I. Acknowledgements"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Index</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr></div><div class="index"><div class="titlepage"><div><div><h2 class="title"><a name="id2510579"></a>Index</h2></div></div><div></div></div><div class="index"><div class="indexdiv"><h3>A</h3><dl><dt>attribute</dt><dd><dl><dt>retrieving value, <a href="ar01s08.html">Retrieving Attributes</a></dt><dt>writing, <a href="ar01s07.html">Writing Attribute</a></dt></dl></dd></dl></div><div class="indexdiv"><h3>C</h3><dl><dt>compiler flags, <a href="apa.html">Compilation</a></dt></dl></div><div class="indexdiv"><h3>E</h3><dl><dt>element</dt><dd><dl><dt>retrieving content, <a href="ar01s04.html">Retrieving Element Content</a></dt><dt>writing content, <a href="ar01s06.html">Writing element content</a></dt></dl></dd><dt>encoding, <a href="ar01s03.html">Parsing the file</a>, <a href="ar01s09.html">Encoding Conversion</a></dt></dl></div><div class="indexdiv"><h3>F</h3><dl><dt>file</dt><dd><dl><dt>parsing, <a href="ar01s03.html">Parsing the file</a>-<a href="ar01s03.html">Parsing the file</a></dt><dt>saving, <a href="ar01s06.html">Writing element content</a></dt></dl></dd></dl></div><div class="indexdiv"><h3>X</h3><dl><dt>xmlChar, <a href="ar01s02.html">Data Types</a></dt><dt>xmlDoc, <a href="ar01s02.html">Data Types</a></dt><dt>xmlNodePtr, <a href="ar01s02.html">Data Types</a></dt></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">I. Acknowledgements </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/doc/tutorial/xmltutorial.pdf b/doc/tutorial/xmltutorial.pdf
new file mode 100644
index 0000000..345391f
--- /dev/null
+++ b/doc/tutorial/xmltutorial.pdf
@@ -0,0 +1,1342 @@
+%PDF-1.3
+%ª«¬­
+4 0 obj
+<< /Type /Info
+/Producer (FOP 0.20.5) >>
+endobj
+5 0 obj
+<< /Length 1822 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/*>Edeu'RnB3cso,c'tW.g@2QG"TnU@J&th%rK4?EgBjq>%flmBYnl<!UGSd6pAr></mjLBJdF!.`b@f.Z`U&Le$4)9u:VgKt6P+f;3(%(:_Z8s$(_A6k:FHdgKS"JWYlhbc?cU?N]BqCn5s,ZM+%ZLqMaNV=EM-P9!/kc<`u&1g=kRZH(\W6tKF`a/&CJ(iDpqG/FX/Z.helHh^?\0.F[A'=8<R:,?iISc[D%ZbpN[@h#u"=gQ#0&L0rkiE6,nF_*3uH"X)ri``Tp7GWUXIU:Ci;/C;1FBVZu]@Up?ma&0fH$)>j9`;PZeI]MV8//%QdUe>pQ>+;/.umddKkMt8p91ge85?B+i50(p+r!XPlU9i%bRl!/2qn]I@hU<G9lD`/J:jqHRQ[L<Hj)TuG5ED^_MeVg_@<K*EdV/aqg=emm48FP1^9HLErHB<.W\Bd3sAZEg\4[u_8W^3?5QA<?BqC^DA/2;r)'qI&8,836m=-uo\>Ron_LGcGf_%.A9b2<D-i6J7$9W=WB412-?\s6@e`tLp_1uVkD)bE^#6[EA_M9uDpC3g6o3&Qq"8XMt1/#,'7%s`ZG.>O'8P&easCDGR3nqYlU6NT5**7`>5'@%SD459t\>3.-57T19BV:CN^MSh_h=\T$H2V8WHZ,Ih3J4W+:m5q'U-]pHpkffZ.VH5e+a!JITB<`2OKHG&0K2n8"+qBuQ\CiYf9R$AY)\i5shsXPXSRNu\;[i=Ls%-,W!F'?)#^a?f5p-or<[Pj-q!LjQClG;V#.sh7SM64%;,c$e7:iRXWhiG7JWXceU&%/e`,P=VFB#<H4KRobJ#)Vr$*Q:8inNXZ/3-8oEQ7[k=H0ZnQ<Vl\`#LQe:KK^L.SU88'`#]CL`%_TjVW;-D@_7A9;=l,OFZkYr2!=OEl]DZ8lQ&@I!A[Ln\gNGVsBu]b-7si(\dgt,eDpdJ*JIBjO!^sklB16W@l!C"BjTon($^B7N#VL=,/&6r2F>iO@/1C4o4O0U??C^?=!;EZW0*cib07!2bDi@4Ek['oP)r<]^drH7%RiMci'EJ]/J2KOW*$Ef\6-K=A5MP%F,;<N#:ETlXlm[^)\GIc/PJ<#rPuMd+YS^;btW2ruZ!s/B5fuo*I0Z>$nWsEC[,uT+RNP$]e#sP]ia_]@_)d]MZRgDk-'D)Q)Co=gqRA^STedXN=:8jM&>iFLGkOkF<B\?UC7@G*\8:hG[4f+c$'WOHJQH_lQ8m$S,b:C@]9EI%?"Ik17_[M][`"(/=Ck>)CZXMsj_]AERp[bR!+*q[[BVR>.4)O!cOsIIcV`FKT;GLtG<J?9aI+K9+E7L/baNG)-%t+uM54)WrHQdWIL0j5so`D3,Dm-H5>N-h#E[V@alG&XHI(mIjo6aSn)GI.Y!LbNFL],)ms`Z#?K!^3L]\-9p^_VI/&lhB11(GV3G%a@.&oTjl>?42$$sU-8!_nn=.F_GKNIhRU/Wo0_mhoC56b<Y"5V[E+]nq]u-E<RJD#Q.HlfGOdh;##l@DH%H9?=X\;iSq-LASk.O^87(FI(5,UTIuTcNN<GDsnjhj>cj0/%2`NLq/01aJ<#U$$LFUEhJu?'=b5*h`eq[Y8m)PGqOBMGQG1m4k+GmQ"G1s=9qu680,ONs]W(T0@6<bWiR39`%]USu@'`&(Y;GY.B[m@H'rMJY[>H4d^<Y^QqnpVMlg?)ZNqsB;94;b9cC.EXI=aClSC@H%<h3(Qp*>a>5Q9cRIUX%6TR[l68LSQD".8?rd]iiSYWp=*ZB,QFDct^$?.ss)U<jNl\0,DG1p"i81T/3mN;R^]SgR;;^7f44FD]p2~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 5 0 R
+/Annots 7 0 R
+>>
+endobj
+7 0 obj
+[
+8 0 R
+10 0 R
+12 0 R
+14 0 R
+16 0 R
+18 0 R
+20 0 R
+22 0 R
+24 0 R
+26 0 R
+28 0 R
+30 0 R
+32 0 R
+34 0 R
+36 0 R
+38 0 R
+40 0 R
+42 0 R
+]
+endobj
+8 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 358.611 193.44 348.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 9 0 R
+/H /I
+>>
+endobj
+10 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 347.611 189.82 337.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 11 0 R
+/H /I
+>>
+endobj
+12 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 336.611 204.55 326.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+14 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 325.611 256.22 315.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+16 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 314.611 312.05 304.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 17 0 R
+/H /I
+>>
+endobj
+18 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 303.611 241.21 293.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 19 0 R
+/H /I
+>>
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 292.611 213.72 282.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 21 0 R
+/H /I
+>>
+endobj
+22 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 281.611 228.72 271.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 23 0 R
+/H /I
+>>
+endobj
+24 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 270.611 230.94 260.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 25 0 R
+/H /I
+>>
+endobj
+26 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 259.611 206.23 249.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 27 0 R
+/H /I
+>>
+endobj
+28 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 248.611 229.83 238.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 29 0 R
+/H /I
+>>
+endobj
+30 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 237.611 268.7 227.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 31 0 R
+/H /I
+>>
+endobj
+32 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 226.611 257.04 216.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 33 0 R
+/H /I
+>>
+endobj
+34 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 215.611 287.86 205.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 35 0 R
+/H /I
+>>
+endobj
+36 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 204.611 286.21 194.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 37 0 R
+/H /I
+>>
+endobj
+38 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 193.611 339.25 183.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 39 0 R
+/H /I
+>>
+endobj
+40 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 182.611 318.98 172.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 41 0 R
+/H /I
+>>
+endobj
+42 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 171.611 231.76 161.611 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 43 0 R
+/H /I
+>>
+endobj
+44 0 obj
+<< /Length 2063 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat=,h/D%;%"HT1Tspj`W`^F0jM&$9$Y4%2%e+uLgE+Yg3PJ4R<9]Xcs8Al@AQ"PqX@%Mg5O+898+LnR\%VY.A)r=o5E-:o]>%NppK)pTK"o+U,lYqZ=-:7T2W"/krI0/rfsWO0gmYg#jo+F\ItI''03H%WfK=$[iYWM(Re^)+j3CG4pN.rnH*>+BnItBFFA+23Dj`.VFl06H/N@@oWqI]k*1KhJF_+9iceNqU3<OtiIGHYl[45S%%<HPt9kC9'+TF'A8lGBIW%-9gjg[1"'u=Lgah6rs5(B"V$>#JeAShr1#(g?3>IR(e;f:(8&#R\iC\<l0S=_S.]"$ZX5Gn;r#cscqb^$]nfY`#"KOd4cn$TD@K:V:$c>X3&.ZHUeo5^W!9K#<)CtMNq+un/UAlNHE9\G91]=PH[d4>?I-[$sg7Ql89[4;Dr8E#]>#Oqg=rg1oaN^J5ZT3Y>U^DC,a@s7OJb0.NGK7>$i:UF<-6Dr.4-WjI_N:V?T@!f0DmFSs!UT!d5-io#Z3LV7\:o6hWS8&"45ulYgj/>t#_6W_JGQ$t&Hr,ENK@3m)-FfGG!^FNN`$,p)HVen.&MXmQ8I042hfesP#\UBWVC_Vi[d$a=AV;a5Zk^E[[)US.cnQ>g<QH?!<2KFWAHYDjUTZQ(NG]n7a2LZP@0'F'Hu?*nJ8Nr5g+;iJBhfcUo)WQ%K/nn;eIKuaaj*^],)gqh>h:g/aXL"UjrKX"&HpUgBkM3U?KuEOgLG$#p),rijucF@m.h2[QX"$A_^ZBAmKe5Rkh=7s-8g!V]=JQo-(F%-)7d"k0_+;Y_;I4hou*L]Il:T41Vs<@U<"eU&Mh78]3'9U+(_akRC=g\\+q+S\:uS$J:##1FtoK,igfa(hP?'-5<OLj\Qt;4ooo1CBY\a&#]XZdUN<b#=ra-RWF<W=1g)["D,JB%GU@DR=XI3_?<;;Qq0N#<b*BB:JO[,1=`G/UcPSmFZ56=ap@mcXM9c.+0?^1cVOF,3KM"Kt;<GD$=6s0da:`;->nn^<kOpkUIj_"0PX^*?6tl@Bl31neDphXK6DHOu\pJE(NhEPKFtT\#\1s2@*qL#aP`@b]af7SnFNYN=:E.Co6l%?liM.0q.>9rkj`M*u-`"2^J`0ZHjlqMf#?/u/9F;P]C(t7Ggei:Ocj$7emHW!jqn7M;e#0ci:l#WAE=b+.#L1>IAVJ,I):;:XN/WkF=-,5oK&3L%N^c,tfJE)DVo+ai*j5P=Zk'KrQbfZY*n1bpCq[]#*jfK2]&ON#&5K$#q:JK!8])-l*(8U:<'o(@k86Ui%%]-KFo1]OG%#HZ31Ib_ZctkC?rb1^##DU[XRMWt[q?UggG5N$,Qp&Qa%4#q+1,/:'O=InA.\Z')aoaq3.MTq%[uT+N,X`!RVCuo&%]10L1@bf,+:hQ6B!Z#S4<imP0I.>NnD4seb9S,je+HkA(5/JB6rJY1)19D3#3*)dOmYb*9YhlTa6a<EZ"ZCoYEmG-^8<2M?M),/J2TS,H'jsVJ[tA*qaF-Sg[un?@42Ucnf6m]W[)OaO2ma94Xuqbb\X<gE,6Ga;XJDALctDaJ3';T[e(.le3=7Fsj.%PKbf)>X&/72g@Zq[4p5-I'941?`giRj:*ETOet$H"+EGi:[Y6hch"CLdVKQ.02S_`""#5u/=:pR"c;GT?eg&lkIOXT>#u,An[0Uf7^+9',P^P52_6@1[T6dj5@mCkkNnC=@,s8oq/M"^LcdFHnjI!K&Y)"q&V;^*#c*3H*_,du&i*\$@bP_6ZN]Z*db,D!?lYfXB1V@g0Y@NSi^:INq87_Hrk<NH?Ut\`p86=mc81s:%lWBfZ&p-68-_uHLg'bZ2`0eBVln1k_U_=""iA+=71F?*"IM;afXQiC137J9Q8]5AZCh/6%,T9Bhf[\rEA]uEr,9.eM=l8GIDbP+%\cbC\\1#D5'[q@#\N9[S/?4W4?NSE:QKWKWrL!3KQIPbCp1S3&&$8h1kq;*;p@Qp48)kFmB:uLHFKHiJe7(t9sB@XnCgVja')HO4[2'loKi=DZg,gc;WtG.goE0O%p@7D,@GO-~>
+endstream
+endobj
+45 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 44 0 R
+/Annots 46 0 R
+>>
+endobj
+46 0 obj
+[
+47 0 R
+48 0 R
+49 0 R
+50 0 R
+51 0 R
+52 0 R
+53 0 R
+54 0 R
+55 0 R
+56 0 R
+57 0 R
+58 0 R
+]
+endobj
+47 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 384.46 642.674 473.05 632.674 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://www.xmlsoft.org/)
+/S /URI >>
+/H /I
+>>
+endobj
+48 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 253.694 631.674 331.744 621.674 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-lib.html)
+/S /URI >>
+/H /I
+>>
+endobj
+49 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 293.348 179.0 283.348 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLCHAR)
+/S /URI >>
+/H /I
+>>
+endobj
+50 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 352.782 249.348 469.722 239.348 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://www.xmlsoft.org/encoding.html)
+/S /URI >>
+/H /I
+>>
+endobj
+51 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 264.0 238.348 282.88 228.348 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://www.xmlsoft.org/encoding.html)
+/S /URI >>
+/H /I
+>>
+endobj
+52 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 217.348 176.22 207.348 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLDOC)
+/S /URI >>
+/H /I
+>>
+endobj
+53 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 283.44 206.348 327.33 196.348 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLDOCPTR)
+/S /URI >>
+/H /I
+>>
+endobj
+54 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 185.348 192.89 175.348 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLNODEPTR)
+/S /URI >>
+/H /I
+>>
+endobj
+55 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 212.33 185.348 231.22 175.348 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLNODE)
+/S /URI >>
+/H /I
+>>
+endobj
+56 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 174.348 165.66 164.348 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLNODE)
+/S /URI >>
+/H /I
+>>
+endobj
+57 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 424.512 185.348 473.402 175.348 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLNODEPTR)
+/S /URI >>
+/H /I
+>>
+endobj
+58 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 249.81 88.022 414.8 78.022 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 31 0 R
+/H /I
+>>
+endobj
+59 0 obj
+<< /Length 2226 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat$:fl#S'nD.HVnOr3mAgL;%MY82pOhu+eFFt@-qk-PdY@+KBTsWYn7K:%GSg.C\.PP7L7NB^%OSa'HpAJ2[>koH2<pS"u\%4Zm=!%;8.mFCA)5dL,UXa\"qWm-!LuZ\/hlHE'5a>Ir6P+JS8^d^ZQX0QY(EY\X\[m[3IfDjYM]_:/M"QR@&s+ZNCm,$=&I#DPi?]H4/Il4rhh[F<0mjXQ!FJ4q\iGL0\g>Gh+Vu_W>Li)KhppdLG'gbf*_K"7c(Fb=j?XL1`lW0]Oq*=moBH)iD7juVIl0I6,OEft5Y8%O^"J=Dkr-!eD-&J9?CZY_%m/?amZ</J@,K_4FDuRT$J)YT6X;nh,fFP@mL1p]mo,BI`Eoe:+I_gaD**fA9RGp:e#&/RO9EkY_.chX$4*gqf7QM@B&,u&]/MV59d<rKaSesUP)*;0kQ7.``R+QN#tODJmIVe68Y"!aSaH.,iulBR%"-<X;&GJG\,#l$0F!7MR:\iR6]sm9*?PFsnZq8:#Kou2oAK`q,Dr1W6'L1f;=+#)hH)r7M>guB"l?WB+?WtIF6&_WYU@`NNf-C]iG&%>=[XH``]`FISE*6+DTa#='YLtDh]DMoI_kh&YtIL\%#'q.HeONh)Nd#U-J+#E7$?oDlbb\+)-u6J#X?u07lCVXh(<qF&B?#If;told9@`LO<HKckMQFhnCP<od'9V:d:TbN]CdC5TL3Pke?JHo=eMf3@U52H\fq3OCRXpTF19Y-THU,?6JV8a4BL6O!iApn:q*Q1#??afF&CqLPZ>pci/nhH_]5^pMnbV/6WG2uH5n8024@CC=tb>OHb$qD[%D14M.Sk_5tpc_bDLWX0FXp\7^$%9cj(:4(.+Wi)JdPODp^;<Prc"((uc+q2JugFSHV1R`O+_>hl9XWs$6G+`AETuj5\6p([S;>#H<kFD@Hc.%mH]NLGH2[IS7IN@k[I3JVFJ&P$#hR_`RQl^I\cG+L.X8[HUs^4_^77mrl?`0`.%%p,1PH$`dUsGb\<WI-TKj)b3983#]`-Wnh"N4[[8+_&RSD$T@!/EgtS"&"Q1k.<l.u6s>`dIs&$IV+Ul>^;"hVgB!@?PR\qjk<gOtlS'Y>>>3$?6UW7a'r2j$f2A'<BrOBG/%&DV7c=N+`"3E3UhLh@C&R`T7=3#CP92#9mafaR]=^Jni%s&QI9dRC?SnXE,r+j<Njd3"5Chm,'`l]4(""K#ZReaN,EGs69N;4b#%J64):/VZDO=>C7ZMF9I4`aAYf5[YNphKcOfPd>5!^Slq^k?eVs]:tSW$>]:lG`"BNSWGEq/?ii.M=^>&@55_qj&C<e23\<"a^F6QG`i$cK&[H9&(9'XD(AM4]#fHq9"TW-0%SiUS;D_8X0%o2`&;@,\h*TaE^q)dKsGE'[P4U<H1j\@BbjV#eP*eqo8Ib`+>([BU25'PK%l/i?9I%F]m(oX(E]_K=.]+_d;#@iHJ$V_Zag9g^A@K+2\a/u3I0G7:LYbg2JFdU]"]GZm[4nP08mi+!$g2>J\oaBOqF$9U)Q2Y3/bP[2emfL8*G/pcCj!SB"3UB5[LX/PHpBO?6V+:cn&QJjh;F$pSXK8MW)?2a:'igUU178>qOo*L2YZ\&<,Wk<MhV/Xa*$&u3jZ<h2dr^UBR8/tnCP([A&#8cG/IE<QT?U7@WjErN"kjajecq+Eqf*58i"Vg)qK2C]-lb%4Qk!W+'Wd3Oq")H<#,+!FrQ5P\o6c.4E6do%2L2Ebcls$$R7/,e%N;CoR<-"ATcqt7d)B*Ek2\-AISDWX85TdlIEKEj:]f)(>JkQ@dIdA!jTWRF*CY(#;+hEW`IIEE:87Qp,3PT3f8%@BF3u%)p)V'mBH5t%'Tg^fu@o_q/LJ_QP#%2]BgT<j,iCC&90;eB7RFOY`n!"IMH!Xm^IL(!7_:l1)+`D6,k5B=Z+2^!)&JiG;IV<<'`a&,h\.%aF9A9\&)5@*IMqbZOjjSqidSUjN%T3\#Q`,IOF50O\AHoo)Rr5!l3</-*AL%Tem,^n.CaGcO]t>N)i79^tk_>G]-;YN^,bTe]jkJdr5[il9$,57ej\npC&s#dMbrc^H`mOcc%M?pu`l^5#q;t`.V-m$t/&?gMfE=\#AE)]]<YRr@"BO`OD"J57Cr&4"S+YHIoui;Q_^+k_G,7L>p0]3!C30+'fus&am=R);R3)Hp'BsgbDdVf?36a)d$(YU>=X4QO/%EfWqL%Q<qB'tt2fe~>
+endstream
+endobj
+60 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 59 0 R
+/Annots 61 0 R
+>>
+endobj
+61 0 obj
+[
+62 0 R
+]
+endobj
+62 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 361.83 277.506 395.71 267.506 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://www.w3.org/TR/REC-xml#charencoding)
+/S /URI >>
+/H /I
+>>
+endobj
+63 0 obj
+<< /Length 2423 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gau0ED/\/e&H88.i<C-b$jitYM(:KWm@'_9<ckI%%@HlUOm,u+/U<LaV\o-bGN=nG;3BBC_r*2\'7$eBh*_%Xr8d)WTD9Q"B(OQ02nM6CB-.!K=V+/:l3Am5BCkNWpTnm_5.aKNaZ`qEn&bNOo=f!tm;?oEm$l2eX*cEMka\BMg<MH]rl]H@=N3:Xo@(.KRnmV'W_XGoo(VnSm#Tit-Yl5<8NXS8AMMoDbF;PFQcl>1AR,l'@*dj1fhdoR.H(<f*(Bf^R,PqAR$!+S89"h>Z;SGY'S+*\^)JQL,*J$V^8p>ZPoo[mm\`R;S0!@-fBt5B,jACK%i6M5@)7mj`]++5ZIrBi(7&'f9hW28lZ0>=A5t;)gj7L$jU[R[BuK!^F4@52*&TO&0FV#:X6mH-EnOW2=-lp20k!]l7k=t]^m$O4@=`3OdR(>'a$L'dC;1K`2p=$h!D\E4f[R;cq_EuXr]%"&@Vn]uTcTtV9o+conV2T"iflT8ds+(42!O0^%9YC*TEe%>Q#>l5B;r0M:#63I]j!GgrcV!R_@kQ-B>+_OVXfI8<h$<*Q0$)XB?&[&$cfWdZFV'9J'>U_TiEZTC7ISM4jT$OCaE=UO`*-el1.C@@IBIB\j/5)@"cN:&;JH+1M\E%:i8/nbNc+NbA'HCR+!MQSNa_#T+6"MCes/QKri<;?J$u%?5%`4%0Jr:/G6T\j*du6Y:4lB[$:+clF<\FY&T+1obImVg"$m8[',A1EG(H9GGZnVC?jaS=i01:=jhMeWCd:nJ$=mbj7[f\*6a-W9mUDm45At(YpLj3,_oH=Z"#.e#!og[iF)jp/oWA<^$_hS;)2CrVS]9h7i\<U$ZYm\\m,`OK9Q4tnT:es63;V7Mmj^@P&;M!$#cK_3&=NT[cF[Q@gA!<`WDXl!H<R;s(nu-U("gI+WkF!,9>'f)71p*@^>YWPH^3AruPZDR^"gl.G)V"+Y04XCkRGCW-(mlH#GlO?VcA7nE%KE@(.EGrsA%6C!s6RTfl>JMDLRo-<-s''rleb:luKcGVj>b.peQZ#E\2`W`p^XnNh'7B7C%`-M!s#;9$++ZQQb^/c+K)X^1s,]3&%16m,/`.Pg)/j8B"gC4o\/R3/B#5pV&$$J.a2BAn?X[?8L4llT)f8>I;Ic4Ybd7(7*7#Ei&'#rBlT!=YS#4(6(ll1mG.V@0!Q@Ws]^N)\nCd2f:>)EaM;Y/.Fk-$XkA7LR*YL]47*AAND6BC&3hEN'+X8EDf'7r_u%K=e4jP_OARF-#ZWe4;7I$V.=R&=S0K9,!,kH9(d\BF^a-(_9V"'p$AS#P#4NTI]M$[%1;s*c9.:Pt_(#Ogd_T?`P63;(/%pUSKdgbpZ`a.jcJDBPZ%la/cLL>"U"l,^Sc-91S,R>ZN-RPuZSD.SZ3[nHsr&"JHII1Wt(l`_fqGrM`Sdf\QnA$$_D:&YVEeQiS3,p@Iq\SL4[D"ijLZ%V&\)FXSD_6rm(&A=I8//X]/JRM1W*?@PJX$[C0JLNaEq_hn$p.?XbWBkofM'<'MK%4"n9e]kCa7:G,A0\2Da^nCEu"LICV`(2<&9dr7=;p51&4U;@!96qj-k=8CNmg5;qN,%>aBK(I"I$cn!a'/,rc2N9I$Yt@)Jnm.!W!!uJo/frrW9qVK1Bo!3H8U3kV@L>QWAsM"H\4#[;I1d8jar_r]X_&2%J5N5=iKTo""@r6mV28JkC2L7;XZ\Oohm2Y6e>o(%fkHS4@*?2eD8UYe16+RJ@&YQ656ua.`WbBBKu#RGM/>NL;4$BR(+p06<4p!0d@),gs9NM_HVtrZ%m$[='d.UWcI$i+'U$JSqqYqP*So:T%kBX]M&PV!)W"YXt#D6VnrG#aCMMIo`0V[e8i/9D"]%Md(81$&SYM<Hp<Nl?pNP'((ie9[E=Dk0S7IH2Xf3L95,[D4'QJ+pQ[2`:4uJWi\PJT@P=uF:$k!lSGb-QBb]MMF`,(;B:pY[/k[`cL4a=Ta+o%P?:OQWg]^7$-c#^;L2]PDC#`AId77D!Ej!qc8miNJ<G_A%\Q)/hZ4FRYGHK]iG'.:9CjI(u$*;:<:`W5j9qF0jmWSZ'=pRc:RHP*?8V>B[<cm`=C]tQ1(i5M,;E3!c3>&cJLb[7`fY>,77Calsat"A:ABUKBafE+$<R[2S=g!s+MOjXu@gNed9g4((RN)o;EUe`R%G@]5cuj]9D7I.I)G8DN[<*qi"u(m_4QA%42f%cADF<KPUiSKogke7>j3MkpqhSu&7!(O%cs(jPCs2o%qOI0$F=0`9QXS,Mp\B!A)),t3`56(+##d3<6fIYX=u15d,]P#5I8QE:e)4T"gHSFPATF-:0YNpIr.Y0<WAp_nL1BF5E\&:q)_kQfr,V@;:*(T>j*hCmTrb0SMPjf[p&:EK],G.+6q7;tB3I_2QekjbZ:N0"XIt%Dq(R]e~>
+endstream
+endobj
+64 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 63 0 R
+/Annots 65 0 R
+>>
+endobj
+65 0 obj
+[
+66 0 R
+67 0 R
+68 0 R
+]
+endobj
+66 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 186.56 574.98 240.56 564.98 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-parser.html#XMLSTRCMP)
+/S /URI >>
+/H /I
+>>
+endobj
+67 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 262.18 290.36 382.18 280.36 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLNODELISTGETSTRING)
+/S /URI >>
+/H /I
+>>
+endobj
+68 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 363.98 122.574 381.19 112.574 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-xpath.html)
+/S /URI >>
+/H /I
+>>
+endobj
+69 0 obj
+<< /Length 2247 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat=-D/\/e&H88.@14""XGJ9]H>V78D458]Juh=FCd?eeZ:r;D(!2`>-J>X'5/)nE=gHj,5eoJPm[bZl:.P0Rr8bo!Ckd>`T?Yt8rp9=]c$]MGAge'J1I6SIP1fbNp@67;np"M#X4,b"g&+o((\Mg^9U^9i,=>(D7k3)9]i;j+&#A381L_tpE3-uqC.@pM;%dm8q*sAol0KB[Lmrn"m`NsU/(tbEgX<[=]R"G8J%j+Z`fd^:j!AuPX-KO7L010%l7ElTaYlu=W\-?;#G,L4eW'9?i)(1kO&gqqZkSCL8GN3QHD&<CJVgNUB9m9=Z%R_1$0/$g\0V;adirFFF!T'Nif[.MMuO"5Q.fQHUo7A1_HJp2D,UFt4QL_@'!-eN3O@aIgF]C*oYGS)SFs,un&,8;68&[OL_nO5#((<':eer5aRuIPeN^<3!ObWb['[F+G!_c/fUC?$6b[ZL+g'k5KJ>ukgY-XRg$usc.@"2g'dF4t/m;D0T0&-K]C!%SFO\LL(it:)pJ1@kJJ0[O8%@ZJ9e%T`ZDn5%+GqRnJ7c52XOMTgm@GcdBnBe1N,eddCL1<K,h"+W`a5*fY*O33($FVKqoCB'.3T<^b^?["F6T&=KF3u"L=6^b2-"E03LDY5Ip;n@$MKK;B6N]l6]6pMBiUDRM?$'R)Wib`#uPY2]SQ?!mmU5,AL?A]VRL=]#=fI6Hf!VN_a9b>>u?u7#oXd`n+%$i'#C!&7U"l=0SriA)#Mb\67@.Y(K,fmnoB%g.DF_LPCr*A*k'kniq/ia0aag$#JU/r/:ok<lQjN>\fuc#FAV8\Im39[f,c3dHY&H2c0re]`u\#E848U5,WY4J,@XSO>CPPtYf(`Qm^8etE<_?M@rS9Y(M>n6`'4;>'N#gR(RA87Gf5Eu5MJ2Sj5;8uQeHs\ck15j#[K+MG4Ash:Y=FqnnuVl(YY/GQTE2JlG]`^;PQ)TKpaXg^!+F8[\4GrMSHd&LQSiD<8Uj!#!.",JPa+BU-;`MRh+-&j.R?Fa9t[Dr&_Uq,7eF>ke1^:l,."DcNadY?JY,SZt!QO(-7s0Rm^$FNqJ>#:u[?j/SI355o!XeU<FRlW&r?kI*EV!01u@Mg1cM&mpJg!@tYJ5/';O3d_CPHh.0Ih..rbAe^>i>V!0#AI(:b=gcWU"."biX/>)PI9"YeMaoDA`9u@<:#8T?/$VFZ?8F^s,Q3u(1/eA8E<MK>E+Qg)Kp\d@CX^SI>ZRQj6b2k5t?()4fJqaDI`OY/2FsV[.];5;[!f"A.!4m(lJ;S(AYi^ab54NAD:i&(C<kK*\e$k<Xm&+16ob4Wo%Vo6*M/#^%BlZ\YjJJoggC7\D=lkPgFC2&)!mEpqNk@F'f!??A:U=ieX\MaS@D%N:IUkU-G7/[R94C^g'Oab=[4L'&C;tg@:UmOV2*'35NC?!*Or\ho)ZPHB0u%1$Jhhk\[U]-4)?]GG;36Kal;Ym[/4Pc48alKA,5u:u<?-IS#l(4u"d(<I,$UP5'n@FQ8JBDJ?*R@4CSF^n9hjjpe9^1!5T>-$Y;qenP[]0M]3>p;#uWd`9;6lC!V^?u9]/l%Sa2F+XnN!"bV*\P!!IN;AoBO%GXlFe$L[\hC`!54RjNV)pMOr$faBk%pU;",JtD/K]pD.",IKLZG.:Z`U;4sHZ2S7==`d']X$hHdTeH?,QDSj#P9&rF;)OIp%:&r*WSD5_*c^u^\DM`nes]:MLE_/pNVDS0rOo'[qjF\_N0f7Q`Sfb<pqi*U,Q2``;VpPL\S=Y]'S,:YWm;,.5<(dlPr6-c<l+O4ka$ch]jt#ZJ3=<uWb?>fdmA@Z&XMl$:A;E!76q6gh=a]/X<XF^OE``"I;.@8Ec2[-cCkragA2K9S)lrUK-1Y0d7moL>&0Tn>^c,D^s!W00?m?oGYF*uZ@b)7\Kc*%JT1OY/Jl/5fYt`D?[pAF>:M%g2<:8#UT^Plr>7&gZA]gOQ_FaGLOT"ri(-O'eUN$<^k'hufLI2?2WHTRP!Lr`h<Nt.I3a-u+S^]#IDgIFj@XBtM3eN>qR'F'pL)!Gg*@hc_`W'U5qlT#3b-:S]GO:6n%c)j]?E^<hm;FsCsAAZ/]gc*-p?ZD8ag>T4+[2:-[;:]jH`^)Qoa"Z@6a:d/#;bO`]Qop!4LcjKhac`JM8i6F#cJ\U4.8`5<";UpCZqkcS=od6Y>YJhbRS)6$:Jc$q5PTgAf699p`LZ>6FJWebo,ENn]@W&+;H>A=O`M0@]hCX6;bTD/;'~>
+endstream
+endobj
+70 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 69 0 R
+/Annots 71 0 R
+>>
+endobj
+71 0 obj
+[
+72 0 R
+73 0 R
+]
+endobj
+72 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 263.38 661.866 341.98 651.866 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://www.w3.org/TR/xpath)
+/S /URI >>
+/H /I
+>>
+endobj
+73 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 270.38 650.866 424.81 640.866 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 33 0 R
+/H /I
+>>
+endobj
+74 0 obj
+<< /Length 2413 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gasar99\+"%_g8m;#-9resPF&8LC?T2QlVjQ"8Ke\[LK;HH;Dk*K$ug@<j>fs1TTV&thX4>e9P42UDH8)irRNmEKjYK8o=\EM,5Eh2T&BFQ74Cpj&?.3US5;"31l!c1\C;rUrTaZpjZPgW`AUNh&"M<P5k"V)apCSJ*e`[0,r[c1YMK7^V\jO9R4od_.=;Jr13h$,[/@WTPN_d7BYCNeFPi%ASQYSf$-$O5%?Vd--*MXZ6_+-SpsX1XZg-ZhX=CpL?Z_>rRE(K>D1iWgJc69nL<)]Zk;2Z]6R^MQUt(-XAp16\mF+DJN`%L*+@3?5ms>D-Z[Mp:ZW0ok/?f^LUHBKOLNKcf.Ag$7qL`])mtd07,G@=R&SqP8nB1bGDkGC.p4nfrepPB?"B&CKo!4MagD>U(>;mgoY:pA9Sjs]*HU9)!JI*P:e>>UZ%$ME!.h_f%*Vc[BhNRaQIu92s3]]#o*[gNa4u14FAt]-X5aD;ms'hLed*%Z<T:D#hdE8>gD=#7kP`J?rrT`PN?dj1li-af3Q/@LbbHhmhst(O/C'X0223+D@.NO,(KfFj93S0aWEgC:i"_Y;0nfip_eK(<l0LYI(]"O?>V3@E58$:m,%,'D5p:ROPab*$(5f+BkfG:,H]Be-NHGdF1$bGs/nRm/*7!)-0+_M$_dAn&ic"Ldm)S2?T^8E*&pPBB_,-4K1R/'^DtCGg?c;WAg50i4%:p_(YHsbN3')!N,5]:[suaZs7e1prgN3D_FoMZ^K39"S92.<UT`1)$[`b.I55I"eMO2+q9o8P0?ROg37mkjpM\prpk%"D+_[&C5Fd(#-,$=lD\H<`2JlMs(DG3pE$P:#PQ"n]_(\)I_'$/HK8!O&e2bQmDq<3.&ij9ec<2d4G',rtW"5%Oql[!*[]i+-;dgcIFe1MnnZXbr"rV7i5nRsj:Q-`)'4Y+Y]\&Fa&W+hKePqsp[B4&7k\(@&>j?7G]e40!abn%;+X8J4eiSW2d:C5!0Hts/4KSbn\;u2*=#TAck4Rp<7EmiJZZt+hjmeRB1#<(Q!5lp4#fn$>p:=]%?n`TEJupm**TN>k44t*&&7J^(b2o^l8BGU<'3TB^EqZKV@JH^&[MleB=oDmCT#$JYLoV:ZZnMQ$hWV$%nQp\\;`,(9-ruf^<(V:-S#r(B8h^`XN^+c=g-[b2di+pb.8,HT)^3I$LZH\W+;H7q2tCq5%dp.jEbaomU9bUtL):rB.ASF'*UgdD:t$G,q\nd\.HJ@sp+)#f3_q4Ha4BQ*5)<.9.qU4oM#?*M]:s1HL61(r0t>b-_?(1eX^nQ<jWHC%-;2gdO;^>d*^9pVJ%D<_EgZE)gC6U,[%(uk9Q1^5MN/&`*'hN3I*dh`7soDt4R+!4FH>ojnb@SS\SXU>d9)>O`:Gn0.tmQb?p-#[]'Tcs9<58[BJFn=_EsCP2.&bVn:cE/FGROY5!K-;_?6s<HT]Tl%);usPEgq;"L'dngpD3j6+S/&-/(H0Nihl("RooLWT6JT6h<X`jr%#MRm/tdMKN(PgIb^a;`16&XC09rb`R&nK,Ah"Z"s0hbNFZ6dmN%Ba,bh;Vhb/XXc%t;ID0Unqa_>G(U@"jD3c$Fb`P:T3fKQf:mAP'!c?sO5+N(!Tu:**Wd0CX$3APg''5*LDJU7'9p(cC^Y6d)d)Jl4;i:)(+kuRl2VbPKl2?+g0VAo'(lo\]//,&$,jOt,;4i'hjGe4^S%KFfT:-]a9cgS.XAJ"bg3.u-`;@pX9Z"_[Ir-Rs]8>RI\X;L<a:D4@Ekdq(,+.dEEsAlmf6%*\dOQO[nVf^O9B_o)E%HJFiq""IgXR5!O-LBYZUL>G)GJ6+51Bio-9Bt,]Q.M-gcq-aG<?VDFpQ*cU@F^\KQn^-\l,p16,JN+SP.a`,<uBZFr>i>#Y78eitqj7&b?8?mc?rsOcLcE0..nq[lc"$8[5k8ouh/i13s-E-^dG;4$=.FfaB[mA?Qa0rke2(Y+pAoc8%6E6R#^I#o@tkVo%SW.3$==('#GuE'2^m"/q,Rqj(Z3ZiX+<N8ge_*<:d<"S)R).BbcUjM=+"0ZuNN)mSHq844FOp:;"#mR^Hk7^ch_@35'9R&>4sRgcUE=Wc9RZfER5lW0\Pl"HA?Tl+=S77CS;@(/SgagA+P5!oA-p[E0a9Ef[5G%V=AE1?].npG<A6)bU=@iCXc.3!WYO]prVq6UnYi)cYVYelG@04HFaSsR6M^.Wn2MBm;,1mp3,@=Td@b>L`VJ6g^)^H,9DfA*lBJOn&<Y\(m4>H,nM\0KF2)IEQa*RnjN_isjP6m&[a(%R?O=6tV%GTY$VerHrt5Ab?<`4qZD5K9B%j_<ZI@i%VBg$EVUIIh2(b_8O8MdRm-g_e:a><K^hnJTu&OGO<M0!Cs8-Wj^WZ:;3X5ZNuN=O@'KKa_.2~>
+endstream
+endobj
+75 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 74 0 R
+/Annots 76 0 R
+>>
+endobj
+76 0 obj
+[
+77 0 R
+78 0 R
+79 0 R
+80 0 R
+]
+endobj
+77 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 272.33 641.674 455.37 631.674 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 35 0 R
+/H /I
+>>
+endobj
+78 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 186.348 500.794 276.348 490.794 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLNEWTEXTCHILD)
+/S /URI >>
+/H /I
+>>
+endobj
+79 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 324.744 287.888 470.014 277.888 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 37 0 R
+/H /I
+>>
+endobj
+80 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 276.888 208.16 266.888 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 37 0 R
+/H /I
+>>
+endobj
+81 0 obj
+<< /Length 2391 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GatU5=`<@h&:Vs/0M#jj1u%dhZ3"aDTV,kIAO&cp&!!P8e#^U`qUd&[r-,.O]?21A&ddZr^RD=j]"5JqH*oj5jsmSTS(ZA=G@k'gB9$Q@T49mq&&cP/R1i`hKD"CfchW,.m=k5gNI;RHkG#Mkrj(*>J;e$#1%<4<Ze]RGTkV^H@GhHPG[0F!LZ*O14*($cNtm7icO3-b*7l9jno"Gn[&0K:#t%OIgHGA7WCjb.,SIOi"D(XZ!#IgXp.tU&4+kN#ad7XH*<4[!M$ntjZ<8/\QAli<-Xu&g!K5tM8&=YOE\"7"D7TQA>?p#,o(W'"c0sE=H]`7:LWt+qeLST,Is^pM^b9K;j#&JFroI\>k2O>n$jpj;,_JD1'+?')?r5Rcoa-8"Y02^V@U)/-k\<C`#Pa\K.XIe(ZcJUB`Gpbs@5q]*&p5E4ab(959O=0q:8Arh&i:t$LU#`*7-X%q+>:(.'kMr\Ejr7fJm@W"5'o[tMPB2f%i43cqjn3)2%tYKa8KHp"%1[ri`9BV5fLTF`F'iVbn%FhaJ>);p6GkYPBua`6(1E[cm-sr0]j9!X'EDoJFMr@JSce*"h)$H[&krRL9JPg<\tm1rS=G`kg(J?7'U]K<V+P2m)W4VT,oJ]ba]3<B^gQgWBGI7(YPBFib`6aJV8ro$&26_6qRh!6Bmas2arX=i)qNq6CJ1:b_*]l=O>sl&%o"JR&I=le5%8MN3)W;E8AK-fCJ''?>60?O864K,L:EOGu?C3HU@Ltk1t]dmgN[e$]9;%`ak>C"?5<_o!G!Y?Tt1p#rJ=c_&aUVdE=q%/g'#R*F**K*ieBu]?*HIO]#H,47]I=4@E?r'Bt5pl+/",pO]V]Bg[ooj3R99+c*8LXJNR?EuuP-<HRBsrV#2rhKYu4A)f^:Aj3*)J_HZ@D8N"J%>gr=]IuN5jf25`)3f^4/ePh!.UHr14]9#7_AXJlZPSB.d]qZ49m,%R]<Xmk;glZ55I")099QmK_Yua/=2DA@Z811Mq6#+37rmccYob=&ASp-PBMWI!G,;rB/(/f=Cg(.&A!/a9&GjU;$=460ll/-Q4^:N-XIKWiE7)gde?\#Wj^_k)2uF7rgG3!X]./Wa<BF(Mc"00;e%hFEk<O8?3s=3r#1C9UJ9,\nQI8eY_$,rP[hDWKm,)$a=lMJ8CYA1NYjC'IeXL<I0D=?J(i7O::1WF*8bL!#;9_=JU?5[7UhfNt%4+NZ6r7o)o8d1Cb1jM[fm'sKggmM</T3lGSaVEYiC3_XlfG)P8pe@1QlV[`T1cG[pQHUPf:CFs)d_`shNZ^>Zq8h?8,HgF-DMU.[r!`/r\H]D[I.?0mr`O^89qmEM28@/O+&h0#HrF:qa6-`1"X)@rV:Y0.(";.PZ2Wg>R8#;mjiYRnr`_mq-T3coRsMdU[-!m`!`70kZo`_<:]2L$de@o[a#B57dF9S#<H"(jHHN'4*:/68Xg)C5A`%6hm#e[6\l*R!q_,.Dhn>@#/\HDFaCt-6(2p\B_jl1jmY)Is4"Q3"4A;SPSr_20m!5VW+r7j]8bg[6igXPRn^.IE)#E(1%TcdZ)a>bblWNXQNLg*:POA^\(EDCh5@&U!I`%:cFF8*']Hn`AdaP<8ad""X1Gl%P,3'$)^W`%-aHLkSM'\^aS.%kSg+a:m"R,#Xn.VO!<Fe<RW@t'O6_SF:].J>baVNgd@T<%iN^:"U7la:K*9kW0A#LA@?)EOWMM9)U/&EAYUGt(,Wj]og61Jk9)I-bQ"MqR%MQZ7o)>T%p&Da*rMZZW\mbpK=i7k01KO^i1X->nUpe;fo5WuBfq*N21kPne%1Rsc1?[&f_kULm!lIEEI`(9:oc"&$hL'oRBZi2Fb]kqe[hJM5Ki-3=K8+<2Fu^-kbR0)iDXNu+/\aI67C9mn4W&!E\loF[]g2O(CrRCBXm"`$#4)Y;Z/aRiE6MSb[X_N?BI\I:(8#m.W3[S6MB+*s?=3]gUojL1j<dQDbp_=CZLUhgXgetRBHN=@e`@84SIJJ=a:3Z+R"-3[qr(S,6`IhN%4<1gG:JT]@L%<'`)7#-rko:.5Wbe(SSE)nr"cdtUc/go#*!QeoPadX+jk[7dm+H'HMtmFmh"\;:p4e__.tp&(d_Df"*8GaKk?niL4NCZPLf?#;<"?.lb+]1RQ*RiW:I#B]A#IpE!0D%Lt`!9G.CpDkYKS1V,`cgr$84tJuj%b\U-f/an;7)Bf_u?8T]UY4KiA!KY'-ERHhN[\KB'!]Vjm@"I1.EQ9d-r>CTb;9tfEnQN(rt6?J:t32D8,3[pE^f]mfkOE-.[.n;*_hQG0gl$o#_O8$Bd/dg1F)XaM'F)-!nbLrpRGp!cd3!&B)LX5neH<!Z?=EgF=)LCSlJ0)cnI0:r9=FnM?,<nL\rrJji)bL~>
+endstream
+endobj
+82 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 81 0 R
+/Annots 83 0 R
+>>
+endobj
+83 0 obj
+[
+84 0 R
+85 0 R
+86 0 R
+87 0 R
+]
+endobj
+84 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 204.89 616.56 279.89 606.56 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLNEWTEXTCHILD)
+/S /URI >>
+/H /I
+>>
+endobj
+85 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 338.334 508.234 471.934 498.234 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 39 0 R
+/H /I
+>>
+endobj
+86 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 144.0 497.234 242.88 487.234 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 39 0 R
+/H /I
+>>
+endobj
+87 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 246.998 245.614 306.998 235.614 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A << /URI (http://xmlsoft.org/html/libxml-tree.html#XMLGETPROP)
+/S /URI >>
+/H /I
+>>
+endobj
+88 0 obj
+<< /Length 3206 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat=.=cXf:&Up?Z+o!4mlY,"#+#XbIhKWE5M]As[IE2NqeY5Nm[(>?_k/a_:aXVHK>:n*90JE>fZ,iqSYukP_&"B&,mZLT.Hi@cd^[YA92o3X<J&*Uj@msuqkQTXSF'S\0rND^&g\etS2G.I4=hW_%h,+S%&UtCF+>ie47qhcdm?`"_#bAR#TbBp?WeT6pE0/n'b'm&Y5F)O@U8PG_,Z(qigCL?7Y;Um$gZJg*IE/dq[@1MBGd6`7iFE($IfAHt[s=PZ[t2`GVJLHVo<<E&j4FkpZ^!-qgZD@V_gJ&LFg6)'1Qq=LCp]DiH_lEh<l:[!C#Mjrj)gu]K1K9bT9$D'mDl(DWj_.TQiD@"@^Wp&nKaR^X@q_3(^BGTQYsk&1sUbKJ1rNdfIk-Z,Rbtg%0nJrjI*)gUY`(eU3DI%%Y1MTQB5Bg5e+$d<-kl%c'IG>CnE&h(V,i/!SA'coU$'T=aOOn-6aL"<Jt]GM1W-i2H(6ES_D"'_9^YNBZFPY_O@^b1OuR5QE6$$a/;5'`"KKVoY,0c"IpKe>\Vb+J_<?A`XQ\'l)?8,#MCu/-3gf37uXm:ct(k+e]Y6E;*%h]@ql6ZRIMX-,66B]d'f>FOG`bPC<)`VBbC'g[]9W=<Y&i<eO-TM\Ka'N_7j]GKZoU)KKkLQEiMgNA2:c\c!]*cMW/>SU'6M@a4%$TL>HL\(*\W56/oMpY1i?@T#IPLKBP]`^mRGEY,k8[_;[Kh=*6CEe2D4(;madQqh'.!+2&_.JJY!ei)I^`nDT%gamJ#sbi_?)QC81%AqVph1f;N-Aissj:Dh^O?&WQ-@ZKb;\W2f5U8rCm=n7.d9jZJpiCQX$Y#?uO+`KQonu,S`Quc_2^I[Ik(Y7!Rb*!b)HYSK8fUDGipgI-qcjUPf%)Zci0Beo?<5bFK-nANH&CQ<Q%,\_)N?im*3JPY]T;:[o"P^UapYXb;8eWVX-I($pUbk_ElAnh>mBc!pF)7N]eR^P13;%YLoY%\>*?[pN'Y,Z7No34_N`A<"s%&IZf+NgT5Zm+uQZ.*nd;8,/jD=J+I/7Htc?p,'+F1`tMLl51KO!HtMU:Ec@C&]79>T>AI)g\6V1S=FDEq&!2W/CIlWV6$B729gVI7*Uku:_1`q>K@@8)ucK#E=KSpQkhc2-r9a$1,Qm0ObCH"b*@KD^9$k&"YUdthBDf0h#k[oEOn'/5MBQOF-D1'#Hd(s$NFVaG#&FG/EpIl_u`U,>-*T#_ujE3/SHd6`XA-:hs_F=6sj4tDH*'L*jAb_#-18T6t4RkL]dET&J6,]!e*9OVI.@>eq%f.UpZb*-YGN^`5"%)kY#H;>S8<"06*9rOC).ZOXtMP_ttAN:686B=*J*<8cd#Wc]2:+ogb"4UP;rOBV<g/D#'bLYp#UE(Nt<fAtH(ctTIheX$6ou>sg:9m!B.OJ*,/D&m$;UAsD"(o[%*+@/[+&bS+1TV\0YoHjn6-[,a]C4Hoe7[R*-uBEWh<fN$oYG-D6a3$,$4P3Vb6GpG)5L1JQ@_]f`K4Qp$I?2<JR-@d@Fi8`!k1&H]=&_b7`)_(P%Q8[/['Y8<nOtS?L;i@(2)fACiZc?Jpu@?lLXQa$Z:kXQ3tijaTHii5bOG("L/HhhE3rqmb3[/_g]M[&5[.OT%M\7!$dkBr_&Gl\8q.,*?0b_NsL)2<]L</>hl**H[%>57K&WNe_iT]-o&@i%LYcND)ehpqmdPj0d57WCPZuD`Y;Q.'B=TX'm)$ZP]8Y52'JO%^*WRQae\37@X_KV+dS^R=I?'+3d'W_LrjV964*S2hD9]XBKXXO-HBFN4hVK];%`C.B+gH?]LUPVHIOg7.a#\$m5k@J7MakETKVd!=H^%Dmc5+nMd&-_eKm<'>]ltAmR8)fNXo`"p>'KZ>p@EorF2C'^njlP]^)c")<c:*a;m[jgf;VeUUmM[V>Ei<H*&mA7E)#Ioodun<q1)U\KG5*5j(+T$=j1[h1o]j<Th6BF&tco]V+^X"s&GtO#J/uIJ3qWim>j^;C6aC10gWYr[V^>5>h#YQW!Q"<;rk.UVZna56g#iQPFU=JP[%?TZ[&E>oZiDn9&u&Bq-lO)]H@nS.BU=,tM7s/,f*J^F9obN;"F>L4uR)fBAUQb>2I=C03l16=.q7f=gI**,H$9(iVKGn#(6hOt!(3fsLN0;cEhB,;LQiK.1%.9tC5/3Hac_\ua#@5?R))Y%i3:5orf<bt0.`aM,lg,k_:CbUe-o3F"strtk2Rn'&K,Y,\=%KDYCMh1!=b<[APLr+cC4!?&8G.TiTdCOBo(bnFePQT2XHa2/tgdPu?f.f3Ku_"poo[HOLV6cb-f0B'cHCW^siKP(Z>dp+t5U;Z*q8%7U(GP)Qf\A`(eb9gumo`YV#)7#bO0?rQKCp"hJ6*@*+@oq`L%?,no97u"?`L:I88!U^9h+Pmr:Co/gV@?UNBKoIWP"F?,h>kdALihH5]DicGebsDa",i/kpJS"O&OIq'@/=hq(i!)rOp&d2Pc]&J7P7,8;U#<6]%+)-pr)8&Ie>%NHU415``13j8g_rr4*2d-M6CaJ+>$.BQ+Kd4cNW/<_F`$?q"d8Z.WL=FY<3.lXdk.68GZ?8j:"9G6CU34>n-^emU=%<-o)W/!;('B4"f8eB/_1l,L4s&'tdk-JQJ@iG@W6o,n[g)?$QFhM5=C>ZeMabLKg^Gq$;UG_##J;P2?ceO6IU,!R[IN?uM8bHUiISSmKF98ZCCW[]ls0cHD-07c9])M>chn:S.p/k=p?fE?='h<i#3=Z.Zf:C/kE,W"!'/]NbMV8il:ar<jUO%%1k.@]nEdO@4WR^0Eal_U&Z8GM^qIgaLF[0ZdV*:B!FX*UXCnZX@X^45^A!*G=8V^^3;#UZ+>PI6=fB>c'F9mj#@,g%PIKm5<c$qPXplj_!8\DXi:o5l?kU1lo3R4RaH_n\VZ0-k@B8c1r"jR-:ks!6/O=jaP_:nlJ5YHuZO>jM:HZ,W^'ceEiCIQF3:.^n-_H&AX!@WFA<YV>0-R)u.RDffFtM8)bZ9&/Hnb:U6LbR:r2bLfHXSs4eb-rnW/^e,NH&mRb"B]RsKR=+`i)FJ31pQIF#;/S?r#;fH*EBoW/',^XD5\%F]"d91&S:1n26EHC_5r21;-#?%X1lQZ9FB]Z9q-Wg27J):+-@FH_GK1,B;qEGRZA2=^4B258!3E1DH?(W;k'X,\6*'^?PrWa@@&p"~>
+endstream
+endobj
+89 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 88 0 R
+/Annots 90 0 R
+>>
+endobj
+90 0 obj
+[
+91 0 R
+]
+endobj
+91 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 219.0 421.866 435.37 411.866 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 41 0 R
+/H /I
+>>
+endobj
+92 0 obj
+<< /Length 1620 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat=+gMZ%0&:O:SBO)=.MjP8O;4#l"7?_TrUqq54\5-*H'T'8PaHDmQF$\3'n*!*%Z7..LN!(=^F(XRY7HE!>1qTFsp(6brj_A=1lOgRApgFOl%^IZF@*!P[[G4r8?2TX.es(D#$5drfMsFia9=(QhMgT"4D(TZ,N*4d;28D8inHe\6DK5*mLR2i^=:QLq[4]licLqPteP;n]b?1RPl;DJL.[e:F^.R#2DRG<N[>L_a/KVEJhNp@PPR@)rjuF5TV9,mGBW_*;.RY*8;.qR_TuB&?;i2FoU7sbIM_**pdsS8UMNrMEM./'2D5h]M79W\r"+*eDNET=$Y!YF08A$.SF&Vt;_"eZQ`4RXV6=I;0V=g;1%\cu?(Dgha@HUOjJ_<C*GUHKVS,bR6oIXaE<&i?@g^ubQ;O"`u'@mCU$DNNk>BH\))_qHo/!>oA)@XSN=KMUDJE:iL&F:X&oT>6`ruFufe?[`W2-$Z988rG9'LC84AD5VKCk<XcK/+N/jB[=QGd][IL]cm\]TYTAH#:26;2>N<i3r2XrR#X-D0KhNLTOp@Ge`?cFT;mU;T$-I"[HmV49*f*)V8k9H/bP$)F'6:ZH&RQ`[5)bNA-[pAQ=Q<'1(d3K!((=lNsHaW]1T6rE:&ZUk'5?p=6#OMq_^)/*Ce**^@q_h)dEM@j=Gh8cn%QRh(G3IEiQA\^[3fS'5NVX;RJ\a?@oDaBtPIOY$9cbX@6;]pR-AKUE`f,QGR<Cm^\m)A3o-LjUV6;o2`TD+NE4_[VY>k[hJ1DUMECW'@c?Z!0cpq<Xbg[,M3*OTWY984;pS:j]@Yi\)%8cPcdnfT)")4YT&U`naUij'fldfNc)F?k.=@DgSV?p$oLQl*jacFjnpV[H[)GI?qkA7L)8N,Ka\8pq,t[Y)%X08^[ZWbe[1!`^4W>=hnDae:r%!9@'&]YrnuP_C<GCf$9_:b7+BYHj`L_`*icPpe;_VNKT2c&5!P#6p)2u@[82P;&O<TG[Hem1)AG>*JWb/8uU"1Lp[Ni!ahTAH4oaSKG1ckkL_bi(l[2`\M?oF\_]^m`"+OGIPU2NJ0Ic)#Zstc++#&&(Cb&H-%b<fMZ[o^7D<<t)8s',ILlI2B&Lk)GB`4Z,e38?iW7;ei,ke?LDM&J^\^XAgKiJ.Rn$\3fs;/1mA`\L&P:qlgl9a%32qC?*-1A(fDi*,;G]66f;8*l/ZW6(Fl2gbGa*@b_:iZE:6+T,*+3_ZP$-ZCEjZ6-A.UsTJFCZ8bf:VGL^[`Z0fr'/dZ*0I*)IbPc=+4;RIbpQAO.:qOM%L6EZ!=/V1i?4H:);5mffs6Z6^NC=*p(%?o>'Di@]i;&6:=@_+@qD>ZPg)Lpb.Dcj[]B6d4"l!;&@;?GFi0q/phoh:://4.hfH_sf@DKdfATTG1*fAO$o4NQ;A*J#K6Zf"p0-K/^3nL1<[]>f<#7C]!Tko0<sOf8*28mCUH)dB7"%^^#T%EB.(?<=+g)g7l\eU=SEiY4#r&I?lbb2sCH%OJ)apo:CkfC+R!CbL*fm0&MnKkJ6Tg4r!ZG*$6cKXjuWrdFHZm/V0BpJ/N%r0P6=tm+mq7\VG)s)J*N-DLIEuR6-dd'0:aJB74Q/n,ijd++H?G^A~>
+endstream
+endobj
+93 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 92 0 R
+>>
+endobj
+94 0 obj
+<< /Length 1178 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm;D/\/e&H;*)Tk#!J([6W$P+pHKrQll?:]s4q]"ihG+&n_Q%+p_5bADi?s*[C/N[UC&=((M6;**RWF3hPpm<ESqP6AsW"ln9d"nMa!N.)UO'%0Fl6;SMX=2C6^5GR.#(k:2%LuJu/Um@Babp[fS0ro3eHi*TJ>$_r-pU^:/.*CkP?Ko*rLXT^qNdgRMNAuTk<k=[+MUFX$NfB*lDf=*%HiC:J3#)(/,WUZ-T%VgKnoC$+2s"!XF)e?algh%*5lPUN:Xf7>d*Y=Ti#lU5O.s9A>#V4[Yr,TBLSt6tk]1J0*Xk@F0g?".'7f:6M-TjUR`T;M!VZ(YSuqWR#K@tFPaqrjHcR1;?arq(Dp#pZ&I,0'Q&1#fp>EObZrL!`?C)264a]1W5'O_(X^1r9dAT4i`RMGDk&=em[m(H[(;Q-+b+2K5,X7h])$u,KZ.qno+Ha^fVFk-ZR`0;^FT.C(mBO\XYU5V',cuDdk3T!=7YVOBmUKB\4Sq@!<mtiHc\dThl0,pD34=:/"Q!OtcHJb-ZI`>cPdlV]HG+$'''.HC-=R;H6s$DkerQXl-ULBqNn1Cq&VTp$$.rJp&TE#[J4(rOit7*Ca*91e&ZAun[5I34@1acEK<&gNVmYRqJBZ5!J9M\(Jj+ZG7^"is*\5#HdTm<8KB8:=#p(N,h@X2PC<s)SN8\KZF/^9s6JhC=o?WnBY$\S<J),4DKQY]QM2Mj#hnH>l4p#bu5]tMB%U!/a3EHddjg(2f(pLiNn]/i*at(-n0uIJYkgUDgENcsR5^U/N74LB/c+T(-CDFfT'nb5@P04dcTRnl+43='R%frF0\LSd9Ti0B2;$=d\oc.XPbR2fZs)jZn&"PZ2O4e8b]4GK]?%ok%0huBkC;BXVO\_9IGNQPE0"t3a?WOBKG^/6X'ib=?4K7C]9j[PYL_q7QHNrTqXu(T)a_6HE7-D.OG15]Z[F=f+6stS$*]WiN-O=`^WtIV&Zu8mUZQS,O$p.$@Uh%I"])[!Hn'*sbn74aKqO"4qNUc:AUWM?:UuK;AfgiK7M;E&\gZ@u4*&!='QjM2uL]4TbZ1sH<Og_L-!I$[Jr*=79'g7dHO9#mZ1F4A%3g^BU(qd9V#in8hKHd*]+R)q]Bl5H8g3SpI46%n%j@-NLgS9aaHd+^CTW5Agb]?iUenY$t4Djjj~>
+endstream
+endobj
+95 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 94 0 R
+>>
+endobj
+96 0 obj
+<< /Length 1305 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GatU3>Ar7S'Roe[&3:6(gZ4`';-]RjC[)>_Jh08p?pKq]`F^*,[cGPNlCd?j+)0-R`MEGd":6X@SF>7Imu[N.mL?@2J.\G^r7"*MXG6nRIrKoad4[lc2r_Yu&`!*g<N_6r&=eNsf_;<>jS^3G#faX0:5g'gLk(_Tds&8i8:cT>@^DI%FdJ?=Im!_4-KSN9\32eTL+A=Q.^ON&<iW6bM%.b.I'WE`A9_->BnNJLV"*o_S#),a&&*02<i&_%Tkrn:Q"QrIPcZ'llJ4`V.M+oiU>A4\(kl.qk<90i!8GY5XP33=<SeMj<dhAi`hie,^^\I5"1"Q#$%EY3oTIEgS#*PuV0SrMD-D.,cin?pL]Op.9V:<*=ZsgOWr-us=tIkKfOf/QC$2OL`e2/0&S>Km_1::s/rMP:2=?sg]\CsrcJBP<AKaAETlAKXp<1^?V\m]%_B+/-(7MRm\&Wr'.((/@WHM,K8@nE`E+Q'_:,if29R.V!TXJ=c1:I_P^hnLX,h:B#>4*"oMHNkYPI@@Fl@6ReKDLR3>qFtXCkWl4:"h.$.!K<ki#lf$3>CrP$U[2P`c3R3-iZ'#L;SMjldre:3bW'?GmFQA_(DWjM-3/lr)j;is0"#jBF%9ik.5V+4n^.SOS\f^$hh*)&1$+H\_/IMN;E?;UQ,$c,:Y9C.0/muSA2.gRJNn+rGgAV[GctipK<EF0DF\HVg'*d^b'-:IH6kJ'`t=0:6bu!&DCICI%3%IAq_<h@@.&2pE332IHHr/^+\3,0bk8AP?ZjkJp*0tl>ZC6+V>j^idb=GVoOcA^fHO%\Qj5Jh`MK5K1-AK4,KlJBVq##T_Am]1`1P3cRR4WdBnDtmV"J?mR0<N"O)nQMT9q2RdG'XY0(*Nq75!;T62+18nFMThPUnIQWoHHo4amR")uhSQFe@g1G1b@ZH9L"ePVDcn\U.h7(kV)Yniu(#pY7Z>=d=s90i:A`2qO_MdUF3&gdYNA!/-;!g0V_5?VQC6&>`q=I+#nAF&>_;QNh0pUsm8!r#qP@b984e!D0`U3!p`?IJl^+Ha42\';1l9&grb7\E*[]sT-+/EgGTVR0Z/_Pj)VSk`M9^[J.+^Dh$Q`H&-TRFGR[3f+EDn&mWZ+4=s\?V_WanAD8rVE$bG3fCur1SVp[NDdFGg.I6tU$([8cWak,^\0a):He<Cr`uHk?G-,B,-:7^-Xi<FdaT,/EUVfMHe0$$0FV3)=7[<o:PB.IH@PWPRdXtgT^dd';R9Z5HC*K)j-U/DD;arqb_n<G]Ar/Q06N$(LX8.;pJG<6+6+:(5Nn>VcN~>
+endstream
+endobj
+97 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 96 0 R
+>>
+endobj
+98 0 obj
+<< /Length 1243 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm;D/\/e&H;*)TbnX)'^:U\U:@?&d&nED"@]f0T;m:cCcW/?9-,Z422;)(;(n4`R?X&4#[g'MOa$O^GK33l(R+=N1;F/lYZO[tn1_ZZ14M:!N1%X]&r:e:fERs\:O0O_%dntgDaU:UJ<[Ih0%##g=604&*P;kZH13AVIG&Lead4(Wh(>f#j\>J[$pN`&e[&@!Zt6Li9WWHAr_gf">d*/QDXF')E$f`A>Y'F%3k3UrH=!O'`Oj04Za(hB48\O3p==P[2Vt=^=rY8<6apK']&aVCY2*hm*-?@9=(B9!n-7g#h%kZ17,%i>34^Xq"XtuDN,:Z[cJY9?>P/GejcTZ'B7X1gT;>f]M\o:D1#h-IZS>u%2Yici],bg9L%MWDI@b=U4DU+&OAm<8@$=:hl.RbFrpaq'Q!kPjJ4*MMbUEeH,eMpt1b7/ICgX9.ei-M0fjUqeU,sXDXbVd$X%N,Aj\kL?lbd=U"=o9fS"=9F\0i7%[EHqBZ:r8r%H]p0V_BV/-96_gHA43t*@Am8<UiSN([j;_bdKjikEZDaP.E(+],4@bR0XR_J:r[`[G;S<?KkM'N$6Ah#R%V:4P-TN2eR$Q()?u5?UG$m+YYoK"qEp)(N(S0]0\0[]*cF,57b?_XQJ3MkY_&V57q^NVu(MC)cZeAi[=qd4c$;e8jBeZ/fn$en>u6J_0U=\g%"Ajn+G#Lg3I70aXM*d2,joJr'bGM8-"r__^6*"-llf]EWI=)Dlno@MC`h6BpFs)eDlSr&5@2k``dZBlKZ?*7B(f.]':o>?%%XZWs^Q)ep18;nb$$);0h%s@XdR/#3cMUrdF7KbaTkt"F,#(&fC_^0FMY%N;.@u<9D"eH^olt6uSIi7VO.RL_1hn0C%8C8\h8$YO"]E%@'2IYdR,<>c)\r-Mh08f+P:2l_houJm\ntM:=+Y4HL]m!^$-6N4Sal.9fgL''4]i"P@u[Pq[=+5?Y(Ob<:L^C*i.Z:/4%@P6^bJ\+R@]0>Kk(SI4"S=>rB`Sj&or?WlD#%5_f^6b]7J3V!R.g4H&"W&>5Kqk/fRhg=,ie8!V_.K:R0G6l3=n[MCX$08pYnDNR6"lWJ`NsNgnO&_$RM0tXPWHkYU8MM;\n+2A4A'RAQm3'9]l%T$&rF5>ArCpBg!l<)%1MFu39e?KO"ma;!PIKX4,]CF@4#bUCrnQl*B'4%-Vf?=C,J8nOEA0a@9f?m=7dX-P]@M\H7n\OFX>qAdm\Kj_qXoJ:~>
+endstream
+endobj
+99 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 98 0 R
+>>
+endobj
+100 0 obj
+<< /Length 1217 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat=+=`<%a&:W67?r[o&"(f]i\D/,+)TO=((l$cp:Ji/IC*aPOTe<=s7a_7m+Xr.=MCYBT+[]MZ2odkt%c8oef*g[P++/";SbV&Z69H@iLdr/u6g7O2`*9+qVqJgdhIgd&q`l>2.4E_;(gS1VG3-CHr(?!c2']0&T8#&F/!sj4=C:UkJpB`c%4bcii\UWILdlgoBS&h_8eCF8DXreT*GffGHiA/oks(N2M8(%Q53hieSaI0ic'OHV^+1Dg5ff(On)Grk%^l7FbWcp*-I1T?h.YG-EhMD3fYlIgM%2L!Fk1XIIrV1d#Jo2/KKc<U21AGok2sX^#QG&"U7V>;'\YO3&-75!$As>SUPI9VMu!KglZ]HGKibVEEG[b;D`2m*X]%CONWoOi'<eRMkC5t%R>1hH3H_AkTp:gfDLbVM+?JFD(1e!o*K1(<#a"<[1=K#:SiP.aJ79P1WpLsUNFr_X$\5\E@Vd(OQgQA=IAg7T`/.gFN]`BpFeb'%^tWP^XZ['gqCMgD+7JVK_)"ZW]K52(!'qRqG)mYBDHAVFIVm;VMCCW_3\)chEpKDOTM>/c*25t?`V,B=049(1b,2'k2YNOG5dh,@3qK@j>kG6S!(G0C<#/"I/V@._Y+/mi^Zk=84>1Ud>m4Ihlnlp4E&jAR^5YEb/n]ek#m#$W6`9hPV:RqSEmE*+,tP)%(.L5'58rAjKD.j6?C)9h"J;5Z#n970A<]4Kn#t/-l+Z<MmCU1C_UCUtb$O(FqK'bjGZp=kG`eE;Zr7hD(G=E#-V]\,DO6F8]RDV][^1F0g"QOp4R[EU4mB_fC8H'#4?YM,6)agM;CY"plr>L24G<5%g-Vb?daE?0Yc^a5f2#'<>i%T_a_&mZo7"/NO&Mg_g?:*9e+p5E**s9^<-9fnA,D3X%jp2ghAh0P?,.u:2I>9k%bn]!hC%&8:?jp/-j@K0E$HPAKIt)]<Jk9QJ\pgE.$UlEZl7\!]/I:BIAO]pT>+^He;<[G[a'o:%HFN$/4<7QJOlX?`-`-U'e9F'I5>E/;l6;*g9@Y^TU.#0_&lYrIQJsT+,fees4Cb0.!dKUk#bVE33q_\b^BBMIs,t<,2JF;es#R&^6!G0EEc,GbK8Yd$V=VPOqSCO2,rIq?dED(48ECW^3Y>B-_!0Y=B7g4.Kgq7`HUuY>-7^s%UaRtOVP'`EI6654_jDS$%-a.h3?m#g?9oce+=_t3$om~>
+endstream
+endobj
+101 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 100 0 R
+>>
+endobj
+102 0 obj
+<< /Length 1207 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat%#>Ar7S'Roe[:gFKcMtTOa78iK\!c&_k(kNsT]Y.9m:i/6*TSl<5=b:)^]gk$I;Gh=?fFVbgn(^,K^"k4lf?,6h\B\^$E1OTEEErDQLFA%L!e5XdC_Gp[`@foB@A6iK/)ccq(Vb-STt,OF6pCX`E]uRSho?j'"f5sq_F/PIC'0P+#Wl0D$#g0p;8;T")710om.O8(Yd,Yh%&g7m7/IQi[sZcUq=1ZSlX88Fru1u;YM9n`JOaJ5a!CX?I*h3',[nEI@QeW^mdsQ@>LON#*Ws\`)V.BEOf/8^hD,;0aiXS3-R])3$+eN0@FDll'=JIu/&_br-&9:&CZZ07e1Z_rGao-JT%hos!DnJ?-#cX6kMfdUdt<X.Ad7R*SXW/77-WN8qmRQS^D-K?q!TmhoVBUaPG!T-D7Fm#P=)EIQ?V.>&op!O6>N:X;7_aF>q_\^*:mI#_>TipNLo,PpmeQSVl\<1#H;<8a3b^([,dmI>oH/:L+`"ckThr[<ZE9uQ"P*:^,/k%:B5/4nW62Oku19+f/e;Wo38o[7]5!,pRj8mqO?9mg'8.9`/5J'fG8)%Ja6)#L]H+SMC@r]_]H`(jHSmMo3;<r/J6Jha]l:Tl:hF#`B/1A1iXFo.1'l2X+0S.j>"IM+d,1\&DWU;g(4eZ0=Z7-dT17oaW[VM*RPShB'D#lKR+?.@'qh.es=.Pr61NRb,dBJJ[L2H]/NR8#G'b>X>[1ne.P39'9$((QaG5=oRP2Pmt46lFU.Eb0aQ4h\]^bait;Kg!t#Mh!d2/<F(Cca0`a4'QipcE:\gg_0t5X@otb2T29c`m")1,"'E'bo1Y2k$Cfo4".XdEF>WYmCK7=5WF)PRbL)&1mL?I<TH3srH@R%[1e%q_O!EG]K'K]DBM#uO[@%0[unYUE2]]N"V]Bqd/9&ZF#fmcBe;.oV5SfL4TYAateFR7b^a4ip"o5][r.h\EH\i@r\M^hN7DLF(E>CAX%M`?0;Se]m5[P<L2/rjrCPu\,W\i>Sl<\<8_N]^sCUFlc3LYFB'Y@:eK2`h`dk2OT@R>%>p+!(IiF`At<`EjpIr+T!4<@VU58I1Cij4K.$7`H`>q0+)L&R]>fs/XE(TDB"jC1?E>i5dS51T&#Dg=\.Y=M-6C./5_W;q[q'E0MioV?Xc;"pFReo#g8mO_6!Jj(Wp4ZYWOq8HiE:30rO)h;AsM6i%/[B*a1~>
+endstream
+endobj
+103 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 102 0 R
+>>
+endobj
+104 0 obj
+<< /Length 1276 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gasap>Ar7S'Roe[:d(nae+c>DM;m+ITj<:[#_lX?V^a)WRs"qePXihu]64.%UdS@M6TIR88#">kqp(2ADs!gq>7mPGib6%I`R/:NU=fC;#RP;WH&R<LBYKBg:@e'7RO,5(SRdr1]Bp]*?LIO?A9lP.)n">?94)(0W3Y[uN;VFcL$fF'Z>'%g/uq<g).unJnD@r%+3f:!6Gh4n-O*\q)G'2-c;h9t-=sTJ>$m:k`U^6sb4Ah^W2g0V^&4u?[IM!.ZM3nTU@=,?@c_=<\F,qmgcpOuVAOu"YaPRIC+4W^QJ'3l*)tl"&8>+NX:AF)au,SY&d"FZErUh>-irH3[?9#.E\4[u9BdhG!:`UL6p?=dN"H-5[k_qQQp>th$)LZ4&J.<'C'c48@)jP%aUQ@f'Slk$>N@8L,[5!k^$.9=Qf<_pqXIhT22kX(+`U%K/=8EL%L>RV)2*Tq]#_bRhHtV`Kq@`97Ms((En^l[&*77FJ*9kH0=tj%1<\2BZ58tMO7E0F5r-XapX5F'ih;ku`.4A[8h(Z'/f"pm#Nbdb'tOpfTd^*#1107nf&B8(f0fj?dNjC2qilJ>'Mti'N3WR?lBAik,n]-e;`d3>`+&fSF]@7NEC#d*"Q:o#]PRjFGH`]An,8e\(9>(h:qi6APe,'HeX-4s$fWHV"ro!"JAlE@Pt03WbWesu*&tiqb'1C"D@ca-HX0[Lc8P02'6Zo+UgdGQS,[27a&SZb4_Q*9JKSUdTZVYWjJq+J(I:J@;P5W8AK@encYM1!f>G-;Se0?3_ffV4GFASKR>6P&jsb7iQC$d<3)nkj`CUCca5/L4?<OSF/G"APV:#6@5?)[4+0`Tb`,1Ule_HJGqh83jV>dmnn2rO?"3-,sglf.,K+2)sjD8Q\BIiE5S5!@a!J=JSD*ujZ#o^3Y>i=:s*@-1*c;)a)DR&$ORk1V"I52@<O$hq0$"5_'*1H%[p%c.X;IR!8VsbfKKOumk>ce(LaX1:ZL;u43VYPKKj9t/B/5fEnk.d<=Zn7KL\apiZ-S??P(7U$<R;i2siU1R`Z2%)IY_4Y?6t3K#S/9"R/;AG">B18Ve5E^aFDX\0Bn\S3(n&VO+0UhMAJadf9s40oK#Q[XR[;'<mEU$AkbU^&P\,Kjee;TK6hBuO\*4fP1[FP\q&Q6UBo7G'+o<GUGOs3hbn#YW0QLn:6j27W;]V!dd<bH>k`,Q"_4FmuR$u;cb\3i'g]`+-?Q-orB!nE0_5uGf@N5#R2Dc%gGBCZH]fH1:p(?UAr=:5D&fL~>
+endstream
+endobj
+105 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 104 0 R
+>>
+endobj
+106 0 obj
+<< /Length 1470 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GatU3D/\/e&H;*)+W)'YGW$e(e6BP6BU].JOCh_Wm_e$lTOlj9,*<p83F.F=pJDQ?;2XG.(kMbIna<q(5'Ng[/Ono)Yle:i3fD8(Fg`OY\G?^s#R+BK\fM-NZcJ[6a\FUo2Ts3%&U[Acc3-@Qk(-_T:S(/'^K&N>09V"Nq5-^!EllAFZe&j8K<t@CM!mcpedGpt7"1-q:Ld,JS2RF_4/R.660*SVrdUV!_V.i6orCRU%;W[HU8Z58>\8k*]>9.e"<]`Pe>Em$i.\SY7T-gfLdDQfq$:A,J$%;?o;;>rrH*,P_A\bF!Cjm)g?KTs#_=*^m9!8LVBVuPR-FY.F7t<:#7#>?&;\[Fo)<%enA]n4J=]P^Of$B,;40.6']WE`1^Z*'mn_WU!5ea36VTJjnRE!?Y:`ENmRJ+e0'0TVbVGX[Ze`,$1%5Fh@5J#o!^dGh<?Wq8%hJnR>T3GU6pl7O)P.I%j'7ArY603'N;JPf^8s1&&J2KIAld5?'%s@`;n]kOSdcL@:(bN1#Yb1)T!L#HlTn5#QAT]o3M#FZoN)i!4p]EtI*U.JOo2:3XL1S'lp;f4k\,/jf!K!:Khu"^#HS"jN(h>S_,Hq]Fc3_0o8KmAI[Wch+4&nj!*P@CD";!RRg8%82!aT^<-YGB22SRSJ,j^_r$a!tC6-*A2&aXoW((-P$i>;FTr6RZ0/*B7Moa(u44G)!%7#<HBi,QGBPLu8l)e\8'n#4hK7XZmnFTC1pV:h?P'MiC*6J?A&;5ejRV]\,-,8[8KtXOf%tQf%1CsmZA26A'nMG>Zi+3dW'mk3rb\Wn4]j.t(heVdXQY5@,M1*bL6`5shdrQP_*Ht$(7r<aDd]B6<-]1:hK6V8:&3St.OZgAj1*c(AV=]r:Rq=dl6YiG=c=b^CLON$**!,C:c.P:eC-Iq"R3/npH@CPf(]l???VhbcXF2,WRd9OPiIrG2I>FH9gZ43LkEN-Y<N5O6RX]^FFhhC\M.!@T<b!<:!URD#k=g,_Xf-'Z`2:6);6`c.>P>!Ggm2b*Vc"4SqH"JM6Y/-R/`DH4onk"jZaMim.;DE[mo\_kG"Zo,"_?<!^[?!ljM$geJ#M&Ue+]G<)_9<=5I.F]TnHsPHM:S%CYiCh%a^5,`KDFIL:\`JE_YYr[d8Tb7ang4=3=EX]UlOM+,EUJ:4tQ:`E'YuJ8rr#i&ZA9-)In:XB>B!;6jG`h'82En0;V\IiqX)=;KLm@B'6l'(mOD/?q$LR3[8=bCrJ)Z*l=,Suo-^U-'9,[=tO9,isrfTlODPgnB/tUED=kkWD&`Xb6_(Bq\n/\o!J_s,U33*X&0Pe;7(dXU7M/Ab@QaNGqkIP<^n7YHMc+eXiQ?[?;#H@H+d_H'V-l0k>)%@ro0trE90AWko0!"MPqOjgV;*,]u#??UjK"em03[Mp^.F&V0$+\m[*P)ssr_V!duNhim92$U'XE_[dc+7VG6f0<a&1%f~>
+endstream
+endobj
+107 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 106 0 R
+/Annots 108 0 R
+>>
+endobj
+108 0 obj
+[
+]
+endobj
+109 0 obj
+<< /Length 453 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GasJO>u-),(kqGS'tn^GX8RM3mH/S#N7!:d'B98%1.h8.*DV*u*E5'.Oc[okk<.q7%BCbcflBIa(+@9LK(]dF`*F'kKaCX<`f*cZ<9WFY]g/bL\T87;-uiUbj&\s/36Pfg20aDt</72)G(GrQT&j%!RI6-fiE6],:gk?I-mjoG]Zki:LbXFHS'k95DS9`qb)XXg#d%fX@898)&'_DWDOpTt/"[##'gQ-7BP/aY0;\,3j[JW!CN^1DcL/]1="q++;A1$+hD;XI>:1T6'"g>Na#:J5W?A,LWBH8g1>d0;a6>aNmQNmrl"S@<ZO>e-.jfT>oDHJ(`Z2Yh].2G$W?#'33"S[@Om0<rAj&JuaRddFb[W`"[7R*Rr`AEE+=NP3Zh']sR5HCRSt]4?">HOSVU?o'9VG7l0A]r)J1$t+@uI^ac;4T6s!%NT]u@k[.0S'0.D=m=~>
+endstream
+endobj
+110 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 109 0 R
+/Annots 111 0 R
+>>
+endobj
+111 0 obj
+[
+]
+endobj
+114 0 obj
+<<
+ /Title (\376\377\0\114\0\151\0\142\0\170\0\155\0\154\0\40\0\124\0\165\0\164\0\157\0\162\0\151\0\141\0\154)
+ /Parent 112 0 R
+ /Next 116 0 R
+ /A 113 0 R
+>> endobj
+116 0 obj
+<<
+ /Title (\376\377\0\124\0\141\0\142\0\154\0\145\0\40\0\157\0\146\0\40\0\103\0\157\0\156\0\164\0\145\0\156\0\164\0\163)
+ /Parent 112 0 R
+ /Prev 114 0 R
+ /Next 117 0 R
+ /A 115 0 R
+>> endobj
+117 0 obj
+<<
+ /Title (\376\377\0\111\0\156\0\164\0\162\0\157\0\144\0\165\0\143\0\164\0\151\0\157\0\156)
+ /Parent 112 0 R
+ /Prev 116 0 R
+ /Next 118 0 R
+ /A 9 0 R
+>> endobj
+118 0 obj
+<<
+ /Title (\376\377\0\104\0\141\0\164\0\141\0\40\0\124\0\171\0\160\0\145\0\163)
+ /Parent 112 0 R
+ /Prev 117 0 R
+ /Next 119 0 R
+ /A 11 0 R
+>> endobj
+119 0 obj
+<<
+ /Title (\376\377\0\120\0\141\0\162\0\163\0\151\0\156\0\147\0\40\0\164\0\150\0\145\0\40\0\146\0\151\0\154\0\145)
+ /Parent 112 0 R
+ /Prev 118 0 R
+ /Next 120 0 R
+ /A 13 0 R
+>> endobj
+120 0 obj
+<<
+ /Title (\376\377\0\122\0\145\0\164\0\162\0\151\0\145\0\166\0\151\0\156\0\147\0\40\0\105\0\154\0\145\0\155\0\145\0\156\0\164\0\40\0\103\0\157\0\156\0\164\0\145\0\156\0\164)
+ /Parent 112 0 R
+ /Prev 119 0 R
+ /Next 121 0 R
+ /A 15 0 R
+>> endobj
+121 0 obj
+<<
+ /Title (\376\377\0\125\0\163\0\151\0\156\0\147\0\40\0\130\0\120\0\141\0\164\0\150\0\40\0\164\0\157\0\40\0\122\0\145\0\164\0\162\0\151\0\145\0\166\0\145\0\40\0\105\0\154\0\145\0\155\0\145\0\156\0\164\0\40\0\103\0\157\0\156\0\164\0\145\0\156\0\164)
+ /Parent 112 0 R
+ /Prev 120 0 R
+ /Next 122 0 R
+ /A 17 0 R
+>> endobj
+122 0 obj
+<<
+ /Title (\376\377\0\127\0\162\0\151\0\164\0\151\0\156\0\147\0\40\0\145\0\154\0\145\0\155\0\145\0\156\0\164\0\40\0\143\0\157\0\156\0\164\0\145\0\156\0\164)
+ /Parent 112 0 R
+ /Prev 121 0 R
+ /Next 123 0 R
+ /A 19 0 R
+>> endobj
+123 0 obj
+<<
+ /Title (\376\377\0\127\0\162\0\151\0\164\0\151\0\156\0\147\0\40\0\101\0\164\0\164\0\162\0\151\0\142\0\165\0\164\0\145)
+ /Parent 112 0 R
+ /Prev 122 0 R
+ /Next 124 0 R
+ /A 21 0 R
+>> endobj
+124 0 obj
+<<
+ /Title (\376\377\0\122\0\145\0\164\0\162\0\151\0\145\0\166\0\151\0\156\0\147\0\40\0\101\0\164\0\164\0\162\0\151\0\142\0\165\0\164\0\145\0\163)
+ /Parent 112 0 R
+ /Prev 123 0 R
+ /Next 125 0 R
+ /A 23 0 R
+>> endobj
+125 0 obj
+<<
+ /Title (\376\377\0\105\0\156\0\143\0\157\0\144\0\151\0\156\0\147\0\40\0\103\0\157\0\156\0\166\0\145\0\162\0\163\0\151\0\157\0\156)
+ /Parent 112 0 R
+ /Prev 124 0 R
+ /Next 126 0 R
+ /A 25 0 R
+>> endobj
+126 0 obj
+<<
+ /Title (\376\377\0\101\0\56\0\240\0\103\0\157\0\155\0\160\0\151\0\154\0\141\0\164\0\151\0\157\0\156)
+ /Parent 112 0 R
+ /Prev 125 0 R
+ /Next 127 0 R
+ /A 27 0 R
+>> endobj
+127 0 obj
+<<
+ /Title (\376\377\0\102\0\56\0\240\0\123\0\141\0\155\0\160\0\154\0\145\0\40\0\104\0\157\0\143\0\165\0\155\0\145\0\156\0\164)
+ /Parent 112 0 R
+ /Prev 126 0 R
+ /Next 128 0 R
+ /A 29 0 R
+>> endobj
+128 0 obj
+<<
+ /Title (\376\377\0\103\0\56\0\240\0\103\0\157\0\144\0\145\0\40\0\146\0\157\0\162\0\40\0\113\0\145\0\171\0\167\0\157\0\162\0\144\0\40\0\105\0\170\0\141\0\155\0\160\0\154\0\145)
+ /Parent 112 0 R
+ /Prev 127 0 R
+ /Next 129 0 R
+ /A 31 0 R
+>> endobj
+129 0 obj
+<<
+ /Title (\376\377\0\104\0\56\0\240\0\103\0\157\0\144\0\145\0\40\0\146\0\157\0\162\0\40\0\130\0\120\0\141\0\164\0\150\0\40\0\105\0\170\0\141\0\155\0\160\0\154\0\145)
+ /Parent 112 0 R
+ /Prev 128 0 R
+ /Next 130 0 R
+ /A 33 0 R
+>> endobj
+130 0 obj
+<<
+ /Title (\376\377\0\105\0\56\0\240\0\103\0\157\0\144\0\145\0\40\0\146\0\157\0\162\0\40\0\101\0\144\0\144\0\40\0\113\0\145\0\171\0\167\0\157\0\162\0\144\0\40\0\105\0\170\0\141\0\155\0\160\0\154\0\145)
+ /Parent 112 0 R
+ /Prev 129 0 R
+ /Next 131 0 R
+ /A 35 0 R
+>> endobj
+131 0 obj
+<<
+ /Title (\376\377\0\106\0\56\0\240\0\103\0\157\0\144\0\145\0\40\0\146\0\157\0\162\0\40\0\101\0\144\0\144\0\40\0\101\0\164\0\164\0\162\0\151\0\142\0\165\0\164\0\145\0\40\0\105\0\170\0\141\0\155\0\160\0\154\0\145)
+ /Parent 112 0 R
+ /Prev 130 0 R
+ /Next 132 0 R
+ /A 37 0 R
+>> endobj
+132 0 obj
+<<
+ /Title (\376\377\0\107\0\56\0\240\0\103\0\157\0\144\0\145\0\40\0\146\0\157\0\162\0\40\0\122\0\145\0\164\0\162\0\151\0\145\0\166\0\151\0\156\0\147\0\40\0\101\0\164\0\164\0\162\0\151\0\142\0\165\0\164\0\145\0\40\0\126\0\141\0\154\0\165\0\145\0\40\0\105\0\170\0\141\0\155\0\160\0\154\0\145)
+ /Parent 112 0 R
+ /Prev 131 0 R
+ /Next 133 0 R
+ /A 39 0 R
+>> endobj
+133 0 obj
+<<
+ /Title (\376\377\0\110\0\56\0\240\0\103\0\157\0\144\0\145\0\40\0\146\0\157\0\162\0\40\0\105\0\156\0\143\0\157\0\144\0\151\0\156\0\147\0\40\0\103\0\157\0\156\0\166\0\145\0\162\0\163\0\151\0\157\0\156\0\40\0\105\0\170\0\141\0\155\0\160\0\154\0\145)
+ /Parent 112 0 R
+ /Prev 132 0 R
+ /Next 134 0 R
+ /A 41 0 R
+>> endobj
+134 0 obj
+<<
+ /Title (\376\377\0\111\0\56\0\240\0\101\0\143\0\153\0\156\0\157\0\167\0\154\0\145\0\144\0\147\0\145\0\155\0\145\0\156\0\164\0\163)
+ /Parent 112 0 R
+ /Prev 133 0 R
+ /Next 136 0 R
+ /A 43 0 R
+>> endobj
+136 0 obj
+<<
+ /Title (\376\377\0\111\0\156\0\144\0\145\0\170)
+ /Parent 112 0 R
+ /Prev 134 0 R
+ /A 135 0 R
+>> endobj
+137 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+138 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F14
+/BaseFont /ZapfDingbats >>
+endobj
+139 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+140 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+141 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+142 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+143 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+1 0 obj
+<< /Type /Pages
+/Count 17
+/Kids [6 0 R 45 0 R 60 0 R 64 0 R 70 0 R 75 0 R 82 0 R 89 0 R 93 0 R 95 0 R 97 0 R 99 0 R 101 0 R 103 0 R 105 0 R 107 0 R 110 0 R ] >>
+endobj
+2 0 obj
+<< /Type /Catalog
+/Pages 1 0 R
+ /Outlines 112 0 R
+ /PageMode /UseOutlines
+ >>
+endobj
+3 0 obj
+<<
+/Font << /F3 137 0 R /F5 139 0 R /F14 138 0 R /F1 141 0 R /F6 140 0 R /F9 142 0 R /F7 143 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+9 0 obj
+<<
+/S /GoTo
+/D [45 0 R /XYZ 139.0 725.0 null]
+>>
+endobj
+11 0 obj
+<<
+/S /GoTo
+/D [45 0 R /XYZ 139.0 405.674 null]
+>>
+endobj
+13 0 obj
+<<
+/S /GoTo
+/D [45 0 R /XYZ 139.0 148.348 null]
+>>
+endobj
+15 0 obj
+<<
+/S /GoTo
+/D [60 0 R /XYZ 139.0 228.506 null]
+>>
+endobj
+17 0 obj
+<<
+/S /GoTo
+/D [64 0 R /XYZ 139.0 217.226 null]
+>>
+endobj
+19 0 obj
+<<
+/S /GoTo
+/D [75 0 R /XYZ 139.0 725.0 null]
+>>
+endobj
+21 0 obj
+<<
+/S /GoTo
+/D [75 0 R /XYZ 139.0 348.214 null]
+>>
+endobj
+23 0 obj
+<<
+/S /GoTo
+/D [82 0 R /XYZ 139.0 579.56 null]
+>>
+endobj
+25 0 obj
+<<
+/S /GoTo
+/D [82 0 R /XYZ 139.0 172.48 null]
+>>
+endobj
+27 0 obj
+<<
+/S /GoTo
+/D [93 0 R /XYZ 139.0 725.0 null]
+>>
+endobj
+29 0 obj
+<<
+/S /GoTo
+/D [93 0 R /XYZ 139.0 641.561 null]
+>>
+endobj
+31 0 obj
+<<
+/S /GoTo
+/D [93 0 R /XYZ 139.0 463.942 null]
+>>
+endobj
+33 0 obj
+<<
+/S /GoTo
+/D [95 0 R /XYZ 139.0 261.3 null]
+>>
+endobj
+35 0 obj
+<<
+/S /GoTo
+/D [97 0 R /XYZ 139.0 192.28 null]
+>>
+endobj
+37 0 obj
+<<
+/S /GoTo
+/D [101 0 R /XYZ 139.0 655.7 null]
+>>
+endobj
+39 0 obj
+<<
+/S /GoTo
+/D [103 0 R /XYZ 139.0 596.54 null]
+>>
+endobj
+41 0 obj
+<<
+/S /GoTo
+/D [105 0 R /XYZ 139.0 438.78 null]
+>>
+endobj
+43 0 obj
+<<
+/S /GoTo
+/D [107 0 R /XYZ 139.0 271.16 null]
+>>
+endobj
+112 0 obj
+<<
+ /First 114 0 R
+ /Last 136 0 R
+>> endobj
+113 0 obj
+<<
+/S /GoTo
+/D [6 0 R /XYZ 139.0 725.0 null]
+>>
+endobj
+115 0 obj
+<<
+/S /GoTo
+/D [6 0 R /XYZ 139.0 418.61 null]
+>>
+endobj
+135 0 obj
+<<
+/S /GoTo
+/D [107 0 R /XYZ 139.0 198.721 null]
+>>
+endobj
+xref
+0 144
+0000000000 65535 f
+0000046813 00000 n
+0000046989 00000 n
+0000047082 00000 n
+0000000015 00000 n
+0000000071 00000 n
+0000001985 00000 n
+0000002105 00000 n
+0000002249 00000 n
+0000047235 00000 n
+0000002383 00000 n
+0000047299 00000 n
+0000002519 00000 n
+0000047366 00000 n
+0000002655 00000 n
+0000047433 00000 n
+0000002791 00000 n
+0000047500 00000 n
+0000002927 00000 n
+0000047567 00000 n
+0000003063 00000 n
+0000047632 00000 n
+0000003199 00000 n
+0000047699 00000 n
+0000003335 00000 n
+0000047765 00000 n
+0000003471 00000 n
+0000047831 00000 n
+0000003607 00000 n
+0000047896 00000 n
+0000003743 00000 n
+0000047963 00000 n
+0000003878 00000 n
+0000048030 00000 n
+0000004014 00000 n
+0000048095 00000 n
+0000004150 00000 n
+0000048161 00000 n
+0000004286 00000 n
+0000048227 00000 n
+0000004422 00000 n
+0000048294 00000 n
+0000004558 00000 n
+0000048361 00000 n
+0000004694 00000 n
+0000006850 00000 n
+0000006973 00000 n
+0000007077 00000 n
+0000007252 00000 n
+0000007445 00000 n
+0000007643 00000 n
+0000007833 00000 n
+0000008020 00000 n
+0000008218 00000 n
+0000008420 00000 n
+0000008622 00000 n
+0000008822 00000 n
+0000009021 00000 n
+0000009226 00000 n
+0000009360 00000 n
+0000011679 00000 n
+0000011802 00000 n
+0000011829 00000 n
+0000012022 00000 n
+0000014538 00000 n
+0000014661 00000 n
+0000014702 00000 n
+0000014904 00000 n
+0000015115 00000 n
+0000015308 00000 n
+0000017648 00000 n
+0000017771 00000 n
+0000017805 00000 n
+0000017983 00000 n
+0000018120 00000 n
+0000020626 00000 n
+0000020749 00000 n
+0000020797 00000 n
+0000020934 00000 n
+0000021144 00000 n
+0000021283 00000 n
+0000021419 00000 n
+0000023903 00000 n
+0000024026 00000 n
+0000024074 00000 n
+0000024280 00000 n
+0000024419 00000 n
+0000024555 00000 n
+0000024760 00000 n
+0000028059 00000 n
+0000028182 00000 n
+0000028209 00000 n
+0000028345 00000 n
+0000030058 00000 n
+0000030166 00000 n
+0000031437 00000 n
+0000031545 00000 n
+0000032943 00000 n
+0000033051 00000 n
+0000034387 00000 n
+0000034495 00000 n
+0000035806 00000 n
+0000035916 00000 n
+0000037217 00000 n
+0000037327 00000 n
+0000038697 00000 n
+0000038807 00000 n
+0000040371 00000 n
+0000040497 00000 n
+0000040518 00000 n
+0000041064 00000 n
+0000041190 00000 n
+0000048428 00000 n
+0000048482 00000 n
+0000041211 00000 n
+0000048547 00000 n
+0000041386 00000 n
+0000041587 00000 n
+0000041758 00000 n
+0000041917 00000 n
+0000042111 00000 n
+0000042365 00000 n
+0000042694 00000 n
+0000042930 00000 n
+0000043131 00000 n
+0000043356 00000 n
+0000043569 00000 n
+0000043752 00000 n
+0000043958 00000 n
+0000044216 00000 n
+0000044462 00000 n
+0000044743 00000 n
+0000045036 00000 n
+0000045406 00000 n
+0000045735 00000 n
+0000048613 00000 n
+0000045948 00000 n
+0000046064 00000 n
+0000046178 00000 n
+0000046264 00000 n
+0000046375 00000 n
+0000046487 00000 n
+0000046596 00000 n
+0000046703 00000 n
+trailer
+<<
+/Size 144
+/Root 2 0 R
+/Info 4 0 R
+>>
+startxref
+48682
+%%EOF
diff --git a/doc/upgrade.html b/doc/upgrade.html
new file mode 100644
index 0000000..a7ea3e3
--- /dev/null
+++ b/doc/upgrade.html
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Upgrading 1.x code</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Upgrading 1.x code</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Incompatible changes:</p><p>Version 2 of libxml2 is the first version introducing serious backward
+incompatible changes. The main goals were:</p><ul><li>a general cleanup. A number of mistakes inherited from the very early
+ versions couldn't be changed due to compatibility constraints. Example
+ the "childs" element in the nodes.</li>
+ <li>Uniformization of the various nodes, at least for their header and link
+ parts (doc, parent, children, prev, next), the goal is a simpler
+ programming model and simplifying the task of the DOM implementors.</li>
+ <li>better conformances to the XML specification, for example version 1.x
+ had an heuristic to try to detect ignorable white spaces. As a result the
+ SAX event generated were ignorableWhitespace() while the spec requires
+ character() in that case. This also mean that a number of DOM node
+ containing blank text may populate the DOM tree which were not present
+ before.</li>
+</ul><h3>How to fix libxml-1.x code:</h3><p>So client code of libxml designed to run with version 1.x may have to be
+changed to compile against version 2.x of libxml. Here is a list of changes
+that I have collected, they may not be sufficient, so in case you find other
+change which are required, <a href="mailto:Daniel.Veillard@w3.org">drop me a
+mail</a>:</p><ol><li>The package name have changed from libxml to libxml2, the library name
+ is now -lxml2 . There is a new xml2-config script which should be used to
+ select the right parameters libxml2</li>
+ <li>Node <strong>childs</strong> field has been renamed
+ <strong>children</strong> so s/childs/children/g should be applied
+ (probability of having "childs" anywhere else is close to 0+</li>
+ <li>The document don't have anymore a <strong>root</strong> element it has
+ been replaced by <strong>children</strong> and usually you will get a
+ list of element here. For example a Dtd element for the internal subset
+ and it's declaration may be found in that list, as well as processing
+ instructions or comments found before or after the document root element.
+ Use <strong>xmlDocGetRootElement(doc)</strong> to get the root element of
+ a document. Alternatively if you are sure to not reference DTDs nor have
+ PIs or comments before or after the root element
+ s/-&gt;root/-&gt;children/g will probably do it.</li>
+ <li>The white space issue, this one is more complex, unless special case of
+ validating parsing, the line breaks and spaces usually used for indenting
+ and formatting the document content becomes significant. So they are
+ reported by SAX and if your using the DOM tree, corresponding nodes are
+ generated. Too approach can be taken:
+ <ol><li>lazy one, use the compatibility call
+ <strong>xmlKeepBlanksDefault(0)</strong> but be aware that you are
+ relying on a special (and possibly broken) set of heuristics of
+ libxml to detect ignorable blanks. Don't complain if it breaks or
+ make your application not 100% clean w.r.t. to it's input.</li>
+ <li>the Right Way: change you code to accept possibly insignificant
+ blanks characters, or have your tree populated with weird blank text
+ nodes. You can spot them using the commodity function
+ <strong>xmlIsBlankNode(node)</strong> returning 1 for such blank
+ nodes.</li>
+ </ol><p>Note also that with the new default the output functions don't add any
+ extra indentation when saving a tree in order to be able to round trip
+ (read and save) without inflating the document with extra formatting
+ chars.</p>
+ </li>
+ <li>The include path has changed to $prefix/libxml/ and the includes
+ themselves uses this new prefix in includes instructions... If you are
+ using (as expected) the
+ <pre>xml2-config --cflags</pre>
+ <p>output to generate you compile commands this will probably work out of
+ the box</p>
+ </li>
+ <li>xmlDetectCharEncoding takes an extra argument indicating the length in
+ byte of the head of the document available for character detection.</li>
+</ol><h3>Ensuring both libxml-1.x and libxml-2.x compatibility</h3><p>Two new version of libxml (1.8.11) and libxml2 (2.3.4) have been released
+to allow smooth upgrade of existing libxml v1code while retaining
+compatibility. They offers the following:</p><ol><li>similar include naming, one should use
+ <strong>#include&lt;libxml/...&gt;</strong> in both cases.</li>
+ <li>similar identifiers defined via macros for the child and root fields:
+ respectively <strong>xmlChildrenNode</strong> and
+ <strong>xmlRootNode</strong></li>
+ <li>a new macro <strong>LIBXML_TEST_VERSION</strong> which should be
+ inserted once in the client code</li>
+</ol><p>So the roadmap to upgrade your existing libxml applications is the
+following:</p><ol><li>install the libxml-1.8.8 (and libxml-devel-1.8.8) packages</li>
+ <li>find all occurrences where the xmlDoc <strong>root</strong> field is
+ used and change it to <strong>xmlRootNode</strong></li>
+ <li>similarly find all occurrences where the xmlNode
+ <strong>childs</strong> field is used and change it to
+ <strong>xmlChildrenNode</strong></li>
+ <li>add a <strong>LIBXML_TEST_VERSION</strong> macro somewhere in your
+ <strong>main()</strong> or in the library init entry point</li>
+ <li>Recompile, check compatibility, it should still work</li>
+ <li>Change your configure script to look first for xml2-config and fall
+ back using xml-config . Use the --cflags and --libs output of the command
+ as the Include and Linking parameters needed to use libxml.</li>
+ <li>install libxml2-2.3.x and libxml2-devel-2.3.x (libxml-1.8.y and
+ libxml-devel-1.8.y can be kept simultaneously)</li>
+ <li>remove your config.cache, relaunch your configuration mechanism, and
+ recompile, if steps 2 and 3 were done right it should compile as-is</li>
+ <li>Test that your application is still running correctly, if not this may
+ be due to extra empty nodes due to formating spaces being kept in libxml2
+ contrary to libxml1, in that case insert xmlKeepBlanksDefault(1) in your
+ code before calling the parser (next to
+ <strong>LIBXML_TEST_VERSION</strong> is a fine place).</li>
+</ol><p>Following those steps should work. It worked for some of my own code.</p><p>Let me put some emphasis on the fact that there is far more changes from
+libxml 1.x to 2.x than the ones you may have to patch for. The overall code
+has been considerably cleaned up and the conformance to the XML specification
+has been drastically improved too. Don't take those changes as an excuse to
+not upgrade, it may cost a lot on the long term ...</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/w3c.png b/doc/w3c.png
new file mode 100644
index 0000000..c541c20
--- /dev/null
+++ b/doc/w3c.png
Binary files differ
diff --git a/doc/xml.html b/doc/xml.html
new file mode 100644
index 0000000..909f76a
--- /dev/null
+++ b/doc/xml.html
@@ -0,0 +1,4452 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>The XML C parser and toolkit of Gnome</title>
+ <meta name="GENERATOR" content="amaya 5.1">
+ <meta http-equiv="Content-Type" content="text/html">
+</head>
+
+<body bgcolor="#ffffff">
+<h1 align="center">The XML C parser and toolkit of Gnome</h1>
+
+<h1>Note: this is the flat content of the <a href="index.html">web
+site</a></h1>
+
+<h1 style="text-align: center">libxml, a.k.a. gnome-xml</h1>
+
+<p></p>
+
+<p
+style="text-align: right; font-style: italic; font-size: 10pt">"Programming
+with libxml2 is like the thrilling embrace of an exotic stranger." <a
+href="http://diveintomark.org/archives/2004/02/18/libxml2">Mark
+Pilgrim</a></p>
+
+<p>Libxml2 is the XML C parser and toolkit developed for the Gnome project
+(but usable outside of the Gnome platform), it is free software available
+under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
+License</a>. XML itself is a metalanguage to design markup languages, i.e.
+text language where semantic and structure are added to the content using
+extra "markup" information enclosed between angle brackets. HTML is the most
+well-known markup language. Though the library is written in C <a
+href="python.html">a variety of language bindings</a> make it available in
+other environments.</p>
+
+<p>Libxml2 is known to be very portable, the library should build and work
+without serious troubles on a variety of systems (Linux, Unix, Windows,
+CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, ...)</p>
+
+<p>Libxml2 implements a number of existing standards related to markup
+languages:</p>
+<ul>
+ <li>the XML standard: <a
+ href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a></li>
+ <li>Namespaces in XML: <a
+ href="http://www.w3.org/TR/REC-xml-names/">http://www.w3.org/TR/REC-xml-names/</a></li>
+ <li>XML Base: <a
+ href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a></li>
+ <li><a href="http://www.cis.ohio-state.edu/rfc/rfc2396.txt">RFC 2396</a> :
+ Uniform Resource Identifiers <a
+ href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt</a></li>
+ <li>XML Path Language (XPath) 1.0: <a
+ href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath</a></li>
+ <li>HTML4 parser: <a
+ href="http://www.w3.org/TR/html401/">http://www.w3.org/TR/html401/</a></li>
+ <li>XML Pointer Language (XPointer) Version 1.0: <a
+ href="http://www.w3.org/TR/xptr">http://www.w3.org/TR/xptr</a></li>
+ <li>XML Inclusions (XInclude) Version 1.0: <a
+ href="http://www.w3.org/TR/xinclude/">http://www.w3.org/TR/xinclude/</a></li>
+ <li>ISO-8859-x encodings, as well as <a
+ href="http://www.cis.ohio-state.edu/rfc/rfc2044.txt">rfc2044</a> [UTF-8]
+ and <a href="http://www.cis.ohio-state.edu/rfc/rfc2781.txt">rfc2781</a>
+ [UTF-16] Unicode encodings, and more if using iconv support</li>
+ <li>part of SGML Open Technical Resolution TR9401:1997</li>
+ <li>XML Catalogs Working Draft 06 August 2001: <a
+ href="http://www.oasis-open.org/committees/entity/spec-2001-08-06.html">http://www.oasis-open.org/committees/entity/spec-2001-08-06.html</a></li>
+ <li>Canonical XML Version 1.0: <a
+ href="http://www.w3.org/TR/xml-c14n">http://www.w3.org/TR/xml-c14n</a>
+ and the Exclusive XML Canonicalization CR draft <a
+ href="http://www.w3.org/TR/xml-exc-c14n">http://www.w3.org/TR/xml-exc-c14n</a></li>
+ <li>Relax NG, ISO/IEC 19757-2:2003, <a
+ href="http://www.oasis-open.org/committees/relax-ng/spec-20011203.html">http://www.oasis-open.org/committees/relax-ng/spec-20011203.html</a></li>
+ <li>W3C XML Schemas Part 2: Datatypes <a
+ href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">REC 02 May
+ 2001</a></li>
+</ul>
+
+<p>In most cases libxml2 tries to implement the specifications in a
+relatively strictly compliant way. As of release 2.4.16, libxml2 passes all
+1800+ tests from the <a
+href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
+Suite</a>.</p>
+
+<p>To some extent libxml2 provides support for the following additional
+specifications but doesn't claim to implement them completely:</p>
+<ul>
+ <li>Document Object Model (DOM) <a
+ href="http://www.w3.org/TR/DOM-Level-2-Core/">http://www.w3.org/TR/DOM-Level-2-Core/</a>
+ it doesn't implement the API itself, gdome2 does this on top of
+ libxml2</li>
+ <li><a href="http://www.cis.ohio-state.edu/rfc/rfc959.txt">RFC 959</a> :
+ libxml2 implements a basic FTP client code</li>
+ <li><a href="http://www.cis.ohio-state.edu/rfc/rfc1945.txt">RFC 1945</a> :
+ HTTP/1.0, again a basic HTTP client code</li>
+ <li>SAX: a minimal SAX implementation compatible with early expat
+ versions</li>
+ <li>DocBook SGML v4: libxml2 includes a hackish parser to transition to
+ XML</li>
+</ul>
+
+<p>A partial implementation of <a
+href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML Schemas Part
+1: Structure</a> is being worked on but it would be far too early to make any
+conformance statement about it at the moment.</p>
+
+<p>Separate documents:</p>
+<ul>
+ <li><a href="http://xmlsoft.org/XSLT/">the libxslt page</a> providing an
+ implementation of XSLT 1.0 and common extensions like EXSLT for
+ libxml2</li>
+ <li><a href="http://www.cs.unibo.it/~casarini/gdome2/">the gdome2 page</a>
+ : a standard DOM2 implementation for libxml2</li>
+ <li><a href="http://www.aleksey.com/xmlsec/">the XMLSec page</a>: an
+ implementation of <a href="http://www.w3.org/TR/xmldsig-core/">W3C XML
+ Digital Signature</a> for libxml2</li>
+ <li>also check the related links section below for more related and active
+ projects.</li>
+</ul>
+<!----------------<p>Results of the <a
+href="http://xmlbench.sourceforge.net/results/benchmark/index.html">xmlbench
+benchmark</a> on sourceforge February 2004 (smaller is better):</p>
+
+<p align="center"><img src="benchmark.png"
+alt="benchmark results for Expat Xerces libxml2 Oracle and Sun toolkits"></p>
+-------------->
+
+
+<p>Logo designed by <a href="mailto:liyanage@access.ch">Marc Liyanage</a>.</p>
+
+<h2><a name="Introducti">Introduction</a></h2>
+
+<p>This document describes libxml, the <a
+href="http://www.w3.org/XML/">XML</a> C parser and toolkit developed for the
+<a href="http://www.gnome.org/">Gnome</a> project. <a
+href="http://www.w3.org/XML/">XML is a standard</a> for building tag-based
+structured documents/data.</p>
+
+<p>Here are some key points about libxml:</p>
+<ul>
+ <li>Libxml2 exports Push (progressive) and Pull (blocking) type parser
+ interfaces for both XML and HTML.</li>
+ <li>Libxml2 can do DTD validation at parse time, using a parsed document
+ instance, or with an arbitrary DTD.</li>
+ <li>Libxml2 includes complete <a
+ href="http://www.w3.org/TR/xpath">XPath</a>, <a
+ href="http://www.w3.org/TR/xptr">XPointer</a> and <a
+ href="http://www.w3.org/TR/xinclude">XInclude</a> implementations.</li>
+ <li>It is written in plain C, making as few assumptions as possible, and
+ sticking closely to ANSI C/POSIX for easy embedding. Works on
+ Linux/Unix/Windows, ported to a number of other platforms.</li>
+ <li>Basic support for HTTP and FTP client allowing applications to fetch
+ remote resources.</li>
+ <li>The design is modular, most of the extensions can be compiled out.</li>
+ <li>The internal document representation is as close as possible to the <a
+ href="http://www.w3.org/DOM/">DOM</a> interfaces.</li>
+ <li>Libxml2 also has a <a
+ href="http://www.megginson.com/SAX/index.html">SAX like interface</a>;
+ the interface is designed to be compatible with <a
+ href="http://www.jclark.com/xml/expat.html">Expat</a>.</li>
+ <li>This library is released under the <a
+ href="http://www.opensource.org/licenses/mit-license.html">MIT
+ License</a>. See the Copyright file in the distribution for the precise
+ wording.</li>
+</ul>
+
+<p>Warning: unless you are forced to because your application links with a
+Gnome-1.X library requiring it, <strong><span
+style="background-color: #FF0000">Do Not Use libxml1</span></strong>, use
+libxml2</p>
+
+<h2><a name="FAQ">FAQ</a></h2>
+
+<p>Table of Contents:</p>
+<ul>
+ <li><a href="FAQ.html#License">License(s)</a></li>
+ <li><a href="FAQ.html#Installati">Installation</a></li>
+ <li><a href="FAQ.html#Compilatio">Compilation</a></li>
+ <li><a href="FAQ.html#Developer">Developer corner</a></li>
+</ul>
+
+<h3><a name="License">License</a>(s)</h3>
+<ol>
+ <li><em>Licensing Terms for libxml</em>
+ <p>libxml2 is released under the <a
+ href="http://www.opensource.org/licenses/mit-license.html">MIT
+ License</a>; see the file Copyright in the distribution for the precise
+ wording</p>
+ </li>
+ <li><em>Can I embed libxml2 in a proprietary application ?</em>
+ <p>Yes. The MIT License allows you to keep proprietary the changes you
+ made to libxml, but it would be graceful to send-back bug fixes and
+ improvements as patches for possible incorporation in the main
+ development tree.</p>
+ </li>
+</ol>
+
+<h3><a name="Installati">Installation</a></h3>
+<ol>
+ <li><strong><span style="background-color: #FF0000">Do Not Use
+ libxml1</span></strong>, use libxml2</li>
+ <li><em>Where can I get libxml</em> ?
+ <p>The original distribution comes from <a
+ href="ftp://rpmfind.net/pub/libxml/">rpmfind.net</a> or <a
+ href="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/">gnome.org</a></p>
+ <p>Most Linux and BSD distributions include libxml, this is probably the
+ safer way for end-users to use libxml.</p>
+ <p>David Doolin provides precompiled Windows versions at <a
+ href="http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/ ">http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/</a></p>
+ </li>
+ <li><em>I see libxml and libxml2 releases, which one should I install ?</em>
+ <ul>
+ <li>If you are not constrained by backward compatibility issues with
+ existing applications, install libxml2 only</li>
+ <li>If you are not doing development, you can safely install both.
+ Usually the packages <a
+ href="http://rpmfind.net/linux/RPM/libxml.html">libxml</a> and <a
+ href="http://rpmfind.net/linux/RPM/libxml2.html">libxml2</a> are
+ compatible (this is not the case for development packages).</li>
+ <li>If you are a developer and your system provides separate packaging
+ for shared libraries and the development components, it is possible
+ to install libxml and libxml2, and also <a
+ href="http://rpmfind.net/linux/RPM/libxml-devel.html">libxml-devel</a>
+ and <a
+ href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml2-devel</a>
+ too for libxml2 &gt;= 2.3.0</li>
+ <li>If you are developing a new application, please develop against
+ libxml2(-devel)</li>
+ </ul>
+ </li>
+ <li><em>I can't install the libxml package, it conflicts with libxml0</em>
+ <p>You probably have an old libxml0 package used to provide the shared
+ library for libxml.so.0, you can probably safely remove it. The libxml
+ packages provided on <a
+ href="ftp://rpmfind.net/pub/libxml/">rpmfind.net</a> provide
+ libxml.so.0</p>
+ </li>
+ <li><em>I can't install the libxml(2) RPM package due to failed
+ dependencies</em>
+ <p>The most generic solution is to re-fetch the latest src.rpm , and
+ rebuild it locally with</p>
+ <p><code>rpm --rebuild libxml(2)-xxx.src.rpm</code>.</p>
+ <p>If everything goes well it will generate two binary rpm packages (one
+ providing the shared libs and xmllint, and the other one, the -devel
+ package, providing includes, static libraries and scripts needed to build
+ applications with libxml(2)) that you can install locally.</p>
+ </li>
+</ol>
+
+<h3><a name="Compilatio">Compilation</a></h3>
+<ol>
+ <li><em>What is the process to compile libxml2 ?</em>
+ <p>As most UNIX libraries libxml2 follows the "standard":</p>
+ <p><code>gunzip -c xxx.tar.gz | tar xvf -</code></p>
+ <p><code>cd libxml-xxxx</code></p>
+ <p><code>./configure --help</code></p>
+ <p>to see the options, then the compilation/installation proper</p>
+ <p><code>./configure [possible options]</code></p>
+ <p><code>make</code></p>
+ <p><code>make install</code></p>
+ <p>At that point you may have to rerun ldconfig or a similar utility to
+ update your list of installed shared libs.</p>
+ </li>
+ <li><em>What other libraries are needed to compile/install libxml2 ?</em>
+ <p>Libxml2 does not require any other library, the normal C ANSI API
+ should be sufficient (please report any violation to this rule you may
+ find).</p>
+ <p>However if found at configuration time libxml2 will detect and use the
+ following libs:</p>
+ <ul>
+ <li><a href="http://www.info-zip.org/pub/infozip/zlib/">libz</a> : a
+ highly portable and available widely compression library.</li>
+ <li>iconv: a powerful character encoding conversion library. It is
+ included by default in recent glibc libraries, so it doesn't need to
+ be installed specifically on Linux. It now seems a <a
+ href="http://www.opennc.org/onlinepubs/7908799/xsh/iconv.html">part
+ of the official UNIX</a> specification. Here is one <a
+ href="http://www.gnu.org/software/libiconv/">implementation of the
+ library</a> which source can be found <a
+ href="ftp://ftp.ilog.fr/pub/Users/haible/gnu/">here</a>.</li>
+ </ul>
+ </li>
+ <li><em>Make check fails on some platforms</em>
+ <p>Sometimes the regression tests' results don't completely match the
+ value produced by the parser, and the makefile uses diff to print the
+ delta. On some platforms the diff return breaks the compilation process;
+ if the diff is small this is probably not a serious problem.</p>
+ <p>Sometimes (especially on Solaris) make checks fail due to limitations
+ in make. Try using GNU-make instead.</p>
+ </li>
+ <li><em>I use the CVS version and there is no configure script</em>
+ <p>The configure script (and other Makefiles) are generated. Use the
+ autogen.sh script to regenerate the configure script and Makefiles,
+ like:</p>
+ <p><code>./autogen.sh --prefix=/usr --disable-shared</code></p>
+ </li>
+ <li><em>I have troubles when running make tests with gcc-3.0</em>
+ <p>It seems the initial release of gcc-3.0 has a problem with the
+ optimizer which miscompiles the URI module. Please use another
+ compiler.</p>
+ </li>
+</ol>
+
+<h3><a name="Developer">Developer</a> corner</h3>
+<ol>
+ <li><em>Troubles compiling or linking programs using libxml2</em>
+ <p>Usually the problem comes from the fact that the compiler doesn't get
+ the right compilation or linking flags. There is a small shell script
+ <code>xml2-config</code> which is installed as part of libxml2 usual
+ install process which provides those flags. Use</p>
+ <p><code>xml2-config --cflags</code></p>
+ <p>to get the compilation flags and</p>
+ <p><code>xml2-config --libs</code></p>
+ <p>to get the linker flags. Usually this is done directly from the
+ Makefile as:</p>
+ <p><code>CFLAGS=`xml2-config --cflags`</code></p>
+ <p><code>LIBS=`xml2-config --libs`</code></p>
+ </li>
+ <li><em>xmlDocDump() generates output on one line.</em>
+ <p>Libxml2 will not <strong>invent</strong> spaces in the content of a
+ document since <strong>all spaces in the content of a document are
+ significant</strong>. If you build a tree from the API and want
+ indentation:</p>
+ <ol>
+ <li>the correct way is to generate those yourself too.</li>
+ <li>the dangerous way is to ask libxml2 to add those blanks to your
+ content <strong>modifying the content of your document in the
+ process</strong>. The result may not be what you expect. There is
+ <strong>NO</strong> way to guarantee that such a modification won't
+ affect other parts of the content of your document. See <a
+ href="http://xmlsoft.org/html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault
+ ()</a> and <a
+ href="http://xmlsoft.org/html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile
+ ()</a></li>
+ </ol>
+ </li>
+ <li>Extra nodes in the document:
+ <p><em>For a XML file as below:</em></p>
+ <pre>&lt;?xml version="1.0"?&gt;
+&lt;PLAN xmlns="http://www.argus.ca/autotest/1.0/"&gt;
+&lt;NODE CommFlag="0"/&gt;
+&lt;NODE CommFlag="1"/&gt;
+&lt;/PLAN&gt;</pre>
+ <p><em>after parsing it with the function
+ pxmlDoc=xmlParseFile(...);</em></p>
+ <p><em>I want to the get the content of the first node (node with the
+ CommFlag="0")</em></p>
+ <p><em>so I did it as following;</em></p>
+ <pre>xmlNodePtr pnode;
+pnode=pxmlDoc-&gt;children-&gt;children;</pre>
+ <p><em>but it does not work. If I change it to</em></p>
+ <pre>pnode=pxmlDoc-&gt;children-&gt;children-&gt;next;</pre>
+ <p><em>then it works. Can someone explain it to me.</em></p>
+ <p></p>
+ <p>In XML all characters in the content of the document are significant
+ <strong>including blanks and formatting line breaks</strong>.</p>
+ <p>The extra nodes you are wondering about are just that, text nodes with
+ the formatting spaces which are part of the document but that people tend
+ to forget. There is a function <a
+ href="http://xmlsoft.org/html/libxml-parser.html">xmlKeepBlanksDefault
+ ()</a> to remove those at parse time, but that's an heuristic, and its
+ use should be limited to cases where you are certain there is no
+ mixed-content in the document.</p>
+ </li>
+ <li><em>I get compilation errors of existing code like when accessing
+ <strong>root</strong> or <strong>child fields</strong> of nodes.</em>
+ <p>You are compiling code developed for libxml version 1 and using a
+ libxml2 development environment. Either switch back to libxml v1 devel or
+ even better fix the code to compile with libxml2 (or both) by <a
+ href="upgrade.html">following the instructions</a>.</p>
+ </li>
+ <li><em>I get compilation errors about non existing
+ <strong>xmlRootNode</strong> or <strong>xmlChildrenNode</strong>
+ fields.</em>
+ <p>The source code you are using has been <a
+ href="upgrade.html">upgraded</a> to be able to compile with both libxml
+ and libxml2, but you need to install a more recent version:
+ libxml(-devel) &gt;= 1.8.8 or libxml2(-devel) &gt;= 2.1.0</p>
+ </li>
+ <li><em>XPath implementation looks seriously broken</em>
+ <p>XPath implementation prior to 2.3.0 was really incomplete. Upgrade to
+ a recent version, there are no known bugs in the current version.</p>
+ </li>
+ <li><em>The example provided in the web page does not compile.</em>
+ <p>It's hard to maintain the documentation in sync with the code
+ &lt;grin/&gt; ...</p>
+ <p>Check the previous points 1/ and 2/ raised before, and please send
+ patches.</p>
+ </li>
+ <li><em>Where can I get more examples and information than provided on the
+ web page?</em>
+ <p>Ideally a libxml2 book would be nice. I have no such plan ... But you
+ can:</p>
+ <ul>
+ <li>check more deeply the <a href="html/libxml-lib.html">existing
+ generated doc</a></li>
+ <li>have a look at <a href="examples/index.html">the set of
+ examples</a>.</li>
+ <li>look for examples of use for libxml2 function using the Gnome code.
+ For example the following will query the full Gnome CVS base for the
+ use of the <strong>xmlAddChild()</strong> function:
+ <p><a
+ href="http://cvs.gnome.org/lxr/search?string=xmlAddChild">http://cvs.gnome.org/lxr/search?string=xmlAddChild</a></p>
+ <p>This may be slow, a large hardware donation to the gnome project
+ could cure this :-)</p>
+ </li>
+ <li><a
+ href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&amp;dir=gnome-xml">Browse
+ the libxml2 source</a> , I try to write code as clean and documented
+ as possible, so looking at it may be helpful. In particular the code
+ of xmllint.c and of the various testXXX.c test programs should
+ provide good examples of how to do things with the library.</li>
+ </ul>
+ </li>
+ <li>What about C++ ?
+ <p>libxml2 is written in pure C in order to allow easy reuse on a number
+ of platforms, including embedded systems. I don't intend to convert to
+ C++.</p>
+ <p>There is however a C++ wrapper which may fulfill your needs:</p>
+ <ul>
+ <li>by Ari Johnson &lt;ari@btigate.com&gt;:
+ <p>Website: <a
+ href="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</a></p>
+ <p>Download: <a
+ href="http://sourceforge.net/project/showfiles.php?group_id=12999">http://sourceforge.net/project/showfiles.php?group_id=12999</a></p>
+ </li>
+ <!-- Website is currently unavailable as of 2003-08-02
+ <li>by Peter Jones &lt;pjones@pmade.org&gt;
+ <p>Website: <a
+ href="http://pmade.org/pjones/software/xmlwrapp/">http://pmade.org/pjones/software/xmlwrapp/</a></p>
+ </li>
+ -->
+ </ul>
+ </li>
+ <li>How to validate a document a posteriori ?
+ <p>It is possible to validate documents which had not been validated at
+ initial parsing time or documents which have been built from scratch
+ using the API. Use the <a
+ href="http://xmlsoft.org/html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd()</a>
+ function. It is also possible to simply add a DTD to an existing
+ document:</p>
+ <pre>xmlDocPtr doc; /* your existing document */
+xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */
+
+ dtd-&gt;name = xmlStrDup((xmlChar*)"root_name"); /* use the given root */
+
+ doc-&gt;intSubset = dtd;
+ if (doc-&gt;children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd);
+ else xmlAddPrevSibling(doc-&gt;children, (xmlNodePtr)dtd);
+ </pre>
+ </li>
+ <li>So what is this funky "xmlChar" used all the time?
+ <p>It is a null terminated sequence of utf-8 characters. And only utf-8!
+ You need to convert strings encoded in different ways to utf-8 before
+ passing them to the API. This can be accomplished with the iconv library
+ for instance.</p>
+ </li>
+ <li>etc ...</li>
+</ol>
+
+<p></p>
+
+<h2><a name="Documentat">Developer Menu</a></h2>
+
+<p>There are several on-line resources related to using libxml:</p>
+<ol>
+ <li>Use the <a href="search.php">search engine</a> to look up
+ information.</li>
+ <li>Check the <a href="FAQ.html">FAQ.</a></li>
+ <li>Check the <a href="http://xmlsoft.org/html/libxml-lib.html">extensive
+ documentation</a> automatically extracted from code comments.</li>
+ <li>Look at the documentation about <a href="encoding.html">libxml
+ internationalization support</a>.</li>
+ <li>This page provides a global overview and <a href="example.html">some
+ examples</a> on how to use libxml.</li>
+ <li><a href="examples/index.html">Code examples</a></li>
+ <li>John Fleck's libxml2 tutorial: <a href="tutorial/index.html">html</a>
+ or <a href="tutorial/xmltutorial.pdf">pdf</a>.</li>
+ <li>If you need to parse large files, check the <a
+ href="xmlreader.html">xmlReader</a> API tutorial</li>
+ <li><a href="mailto:james@daa.com.au">James Henstridge</a> wrote <a
+ href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">some nice
+ documentation</a> explaining how to use the libxml SAX interface.</li>
+ <li>George Lebl wrote <a
+ href="http://www-106.ibm.com/developerworks/library/l-gnome3/">an article
+ for IBM developerWorks</a> about using libxml.</li>
+ <li>Check <a href="http://cvs.gnome.org/lxr/source/gnome-xml/TODO">the TODO
+ file</a>.</li>
+ <li>Read the <a href="upgrade.html">1.x to 2.x upgrade path</a>
+ description. If you are starting a new project using libxml you should
+ really use the 2.x version.</li>
+ <li>And don't forget to look at the <a
+ href="http://mail.gnome.org/archives/xml/">mailing-list archive</a>.</li>
+</ol>
+
+<h2><a name="Reporting">Reporting bugs and getting help</a></h2>
+
+<p>Well, bugs or missing features are always possible, and I will make a
+point of fixing them in a timely fashion. The best way to report a bug is to
+use the <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Gnome
+bug tracking database</a> (make sure to use the "libxml2" module name). I
+look at reports there regularly and it's good to have a reminder when a bug
+is still open. Be sure to specify that the bug is for the package libxml2.</p>
+
+<p>For small problems you can try to get help on IRC, the #xml channel on
+irc.gnome.org (port 6667) usually have a few person subscribed which may help
+(but there is no garantee and if a real issue is raised it should go on the
+mailing-list for archival).</p>
+
+<p>There is also a mailing-list <a
+href="mailto:xml@gnome.org">xml@gnome.org</a> for libxml, with an <a
+href="http://mail.gnome.org/archives/xml/">on-line archive</a> (<a
+href="http://xmlsoft.org/messages">old</a>). To subscribe to this list,
+please visit the <a
+href="http://mail.gnome.org/mailman/listinfo/xml">associated Web</a> page and
+follow the instructions. <strong>Do not send code, I won't debug it</strong>
+(but patches are really appreciated!).</p>
+
+<p>Check the following <strong><span style="color: #FF0000">before
+posting</span></strong>:</p>
+<ul>
+ <li>Read the <a href="FAQ.html">FAQ</a> and <a href="search.php">use the
+ search engine</a> to get information related to your problem.</li>
+ <li>Make sure you are <a href="ftp://xmlsoft.org/">using a recent
+ version</a>, and that the problem still shows up in a recent version.</li>
+ <li>Check the <a href="http://mail.gnome.org/archives/xml/">list
+ archives</a> to see if the problem was reported already. In this case
+ there is probably a fix available, similarly check the <a
+ href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">registered
+ open bugs</a>.</li>
+ <li>Make sure you can reproduce the bug with xmllint or one of the test
+ programs found in source in the distribution.</li>
+ <li>Please send the command showing the error as well as the input (as an
+ attachment)</li>
+</ul>
+
+<p>Then send the bug with associated information to reproduce it to the <a
+href="mailto:xml@gnome.org">xml@gnome.org</a> list; if it's really libxml
+related I will approve it. Please do not send mail to me directly, it makes
+things really hard to track and in some cases I am not the best person to
+answer a given question, ask on the list.</p>
+
+<p>To <span style="color: #E50000">be really clear about support</span>:</p>
+<ul>
+ <li>Support or help <span style="color: #E50000">requests MUST be sent to
+ the list or on bugzilla</span> in case of problems, so that the Question
+ and Answers can be shared publicly. Failing to do so carries the implicit
+ message "I want free support but I don't want to share the benefits with
+ others" and is not welcome. I will automatically Carbon-Copy the
+ xml@gnome.org mailing list for any technical reply made about libxml2 or
+ libxslt.</li>
+ <li>There is <span style="color: #E50000">no garantee of support</span>, if
+ your question remains unanswered after a week, repost it, making sure you
+ gave all the detail needed and the information requested.</li>
+ <li>Failing to provide information as requested or double checking first
+ for prior feedback also carries the implicit message "the time of the
+ library maintainers is less valuable than my time" and might not be
+ welcome.</li>
+</ul>
+
+<p>Of course, bugs reported with a suggested patch for fixing them will
+probably be processed faster than those without.</p>
+
+<p>If you're looking for help, a quick look at <a
+href="http://mail.gnome.org/archives/xml/">the list archive</a> may actually
+provide the answer. I usually send source samples when answering libxml2
+usage questions. The <a
+href="http://xmlsoft.org/html/book1.html">auto-generated documentation</a> is
+not as polished as I would like (i need to learn more about DocBook), but
+it's a good starting point.</p>
+
+<h2><a name="help">How to help</a></h2>
+
+<p>You can help the project in various ways, the best thing to do first is to
+subscribe to the mailing-list as explained before, check the <a
+href="http://mail.gnome.org/archives/xml/">archives </a>and the <a
+href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Gnome bug
+database</a>:</p>
+<ol>
+ <li>Provide patches when you find problems.</li>
+ <li>Provide the diffs when you port libxml2 to a new platform. They may not
+ be integrated in all cases but help pinpointing portability problems
+ and</li>
+ <li>Provide documentation fixes (either as patches to the code comments or
+ as HTML diffs).</li>
+ <li>Provide new documentations pieces (translations, examples, etc
+ ...).</li>
+ <li>Check the TODO file and try to close one of the items.</li>
+ <li>Take one of the points raised in the archive or the bug database and
+ provide a fix. <a href="mailto:daniel@veillard.com">Get in touch with me
+ </a>before to avoid synchronization problems and check that the suggested
+ fix will fit in nicely :-)</li>
+</ol>
+
+<h2><a name="Downloads">Downloads</a></h2>
+
+<p>The latest versions of libxml2 can be found on <a
+href="ftp://xmlsoft.org/">xmlsoft.org</a> (<a
+href="ftp://speakeasy.rpmfind.net/pub/libxml/">Seattle</a>, <a
+href="ftp://fr.rpmfind.net/pub/libxml/">France</a>) or on the <a
+href="ftp://ftp.gnome.org/pub/GNOME/MIRRORS.html">Gnome FTP server</a> either
+as a <a href="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/">source
+archive</a><!-- commenting this out because they seem to have disappeared or <a
+href="ftp://ftp.gnome.org/pub/GNOME/stable/redhat/i386/libxml/">RPM
+packages</a> -->
+ , Antonin Sprinzl also provide <a href="ftp://gd.tuwien.ac.at/pub/libxml/">a
+mirror in Austria</a>. (NOTE that you need both the <a
+href="http://rpmfind.net/linux/RPM/libxml2.html">libxml(2)</a> and <a
+href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml(2)-devel</a>
+packages installed to compile applications using libxml.)</p>
+
+<p>Binary ports:</p>
+<ul>
+ <li>Red Hat RPMs for i386 are available directly on <a
+ href="ftp://xmlsoft.org/">xmlsoft.org</a>, the source RPM will compile on
+ any architecture supported by Red Hat.</li>
+ <li><p><a href="mailto:igor@zlatkovic.com">Igor Zlatkovic</a></p>
+ is now the maintainer of the Windows port, <a
+ href="http://www.zlatkovic.com/projects/libxml/index.html">he provides
+ binaries</a>.</li>
+ <li><a href="mailto:Gary.Pennington@sun.com">Gary Pennington</a> provides
+ <a href="http://garypennington.net/libxml2/">Solaris binaries</a>.</li>
+ <li><a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides <a
+ href="http://www.zveno.com/open_source/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>
+</ul>
+
+<p>If you know other supported binary ports, please <a
+href="http://veillard.com/">contact me</a>.</p>
+
+<p><a name="Snapshot">Snapshot:</a></p>
+<ul>
+ <li>Code from the W3C cvs base gnome-xml <a
+ href="ftp://xmlsoft.org/cvs-snapshot.tar.gz">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">Contributions:</a></p>
+
+<p>I do accept external contributions, especially if compiling on another
+platform, get in touch with me to upload the package, wrappers for various
+languages have been provided, and can be found in the <a
+href="contribs.html">contrib section</a></p>
+
+<p>Libxml2 is also available from CVS:</p>
+<ul>
+ <li><p>The <a
+ href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&amp;dir=gnome-xml">Gnome
+ CVS base</a>. Check the <a
+ href="http://developer.gnome.org/tools/cvs.html">Gnome CVS Tools</a>
+ page; the CVS module is <b>gnome-xml</b>.</p>
+ </li>
+ <li>The <strong>libxslt</strong> module is also present there</li>
+</ul>
+
+<h2><a name="News">News</a></h2>
+
+<h3>CVS only : check the <a
+href="http://cvs.gnome.org/lxr/source/gnome-xml/ChangeLog">Changelog</a> file
+for a really accurate description</h3>
+
+<p>Items not finished and worked on, get in touch with the list if you want
+to test 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>
+
+<h3>2.6.8: Mar 23 2004</h3>
+<ul>
+ <li>First step of the cleanup of the serialization code and APIs</li>
+ <li>XML Schemas: mixed content (Adam Dickmeiss), QName handling fixes (Adam
+ Dickmeiss), anyURI for "" (John Belmonte)</li>
+ <li>Python: Canonicalization C14N support added (Anthony Carrico)</li>
+ <li>xmlDocCopyNode() extension (William)</li>
+ <li>Relax-NG: fix when processing XInclude results (William), external
+ reference in interleave (William), missing error on &lt;choice&gt;
+ failure (William), memory leak in schemas datatype facets.</li>
+ <li>xmlWriter: patch for better DTD support (Alfred Mickautsch)</li>
+ <li>bug fixes: xmlXPathLangFunction memory leak (Mike Hommey and William
+ Brack), no ID errors if using HTML_PARSE_NOERROR, xmlcatalog fallbacks to
+ URI on SYSTEM lookup failure, XInclude parse flags inheritance (William),
+ XInclude and XPointer fixes for entities (William), XML parser bug
+ reported by Holger Rauch, nanohttp fd leak (William), regexps char
+ groups '-' handling (William), dictionnary reference counting problems,
+ do not close stderr. </li>
+ <li>performance patches from Petr Pajas</li>
+ <li>Documentation fixes: XML_CATALOG_FILES in man pages (Mike Hommey)</li>
+ <li>compilation and portability fixes: --without-valid, catalog cleanups
+ (Peter Breitenlohner), MingW patch (Roland Schwingel), cross-compilation
+ to Windows (Christophe de Vienne), --with-html-dir fixup (Julio Merino
+ Vidal), Windows build (Eric Zurcher)</li>
+</ul>
+
+<h3>2.6.7: Feb 23 2004</h3>
+<ul>
+ <li>documentation: tutorial updates (John Fleck), benchmark results</li>
+ <li>xmlWriter: updates and fixes (Alfred Mickautsch, Lucas Brasilino)</li>
+ <li>XPath optimization (Petr Pajas)</li>
+ <li>DTD ID handling optimization</li>
+ <li>bugfixes: xpath number with &gt; 19 fractional (William Brack), push
+ mode with unescaped '&gt;' characters, fix xmllint --stream --timing, fix
+ xmllint --memory --stream memory usage, xmlAttrSerializeTxtContent
+ handling NULL, trying to fix Relax-NG/Perl interface.</li>
+ <li>python: 2.3 compatibility, whitespace fixes (Malcolm Tredinnick)</li>
+ <li>Added relaxng option to xmllint --shell</li>
+</ul>
+
+<h3>2.6.6: Feb 12 2004</h3>
+<ul>
+ <li>nanohttp and nanoftp: buffer overflow error on URI parsing (Igor and
+ William) reported by Yuuichi Teranishi</li>
+ <li>bugfixes: make test and path issues, xmlWriter attribute serialization
+ (William Brack), xmlWriter indentation (William), schemas validation
+ (Eric Haszlakiewicz), XInclude dictionnaries issues (William and Oleg
+ Paraschenko), XInclude empty fallback (William), HTML warnings (William),
+ XPointer in XInclude (William), Python namespace serialization,
+ isolat1ToUTF8 bound error (Alfred Mickautsch), output of parameter
+ entities in internal subset (William), internal subset bug in push mode,
+ &lt;xs:all&gt; fix (Alexey Sarytchev)</li>
+ <li>Build: fix for automake-1.8 (Alexander Winston), warnings removal
+ (Philip Ludlam), SOCKLEN_T detection fixes (Daniel Richard), fix
+ --with-minimum configuration.</li>
+ <li>XInclude: allow the 2001 namespace without warning.</li>
+ <li>Documentation: missing example/index.html (John Fleck), version
+ dependancies (John Fleck)</li>
+ <li>reader API: structured error reporting (Steve Ball)</li>
+ <li>Windows compilation: mingw, msys (Mikhail Grushinskiy), function
+ prototype (Cameron Johnson), MSVC6 compiler warnings, _WINSOCKAPI_
+ patch</li>
+ <li>Parsers: added xmlByteConsumed(ctxt) API to get the byte offest in
+ input.</li>
+</ul>
+
+<h3>2.6.5: Jan 25 2004</h3>
+<ul>
+ <li>Bugfixes: dictionnaries for schemas (William Brack), regexp segfault
+ (William), xs:all problem (William), a number of XPointer bugfixes
+ (William), xmllint error go to stderr, DTD validation problem with
+ namespace, memory leak (William), SAX1 cleanup and minimal options fixes
+ (Mark Vadoc), parser context reset on error (Shaun McCance), XPath union
+ evaluation problem (William) , xmlReallocLoc with NULL (Aleksey Sanin),
+ XML Schemas double free (Steve Ball), XInclude with no href, argument
+ callbacks order for XPath callbacks (Frederic Peters)</li>
+ <li>Documentation: python scripts (William Brack), xslt stylesheets (John
+ Fleck), doc (Sven Zimmerman), I/O example.</li>
+ <li>Python bindings: fixes (William), enum support (Stéphane Bidoul),
+ structured error reporting (Stéphane Bidoul)</li>
+ <li>XInclude: various fixes for conformance, problem related to dictionnary
+ references (William &amp; me), recursion (William)</li>
+ <li>xmlWriter: indentation (Lucas Brasilino), memory leaks (Alfred
+ Mickautsch),</li>
+ <li>xmlSchemas: normalizedString datatype (John Belmonte)</li>
+ <li>code cleanup for strings functions (William)</li>
+ <li>Windows: compiler patches (Mark Vakoc)</li>
+ <li>Parser optimizations, a few new XPath and dictionnary APIs for future
+ XSLT optimizations.</li>
+</ul>
+
+<h3>2.6.4: Dec 24 2003</h3>
+<ul>
+ <li>Windows build fixes (Igor Zlatkovic)</li>
+ <li>Some serious XInclude problems reported by Oleg Paraschenko and</li>
+ <li>Unix and Makefile packaging fixes (me, William Brack,</li>
+ <li>Documentation improvements (John Fleck, William Brack), example fix
+ (Lucas Brasilino)</li>
+ <li>bugfixes: xmlTextReaderExpand() with xmlReaderWalker, XPath handling of
+ NULL strings (William Brack) , API building reader or parser from
+ filedescriptor should not close it, changed XPath sorting to be stable
+ again (William Brack), xmlGetNodePath() generating '(null)' (William
+ Brack), DTD validation and namespace bug (William Brack), XML Schemas
+ double inclusion behaviour</li>
+</ul>
+
+<h3>2.6.3: Dec 10 2003</h3>
+<ul>
+ <li>documentation updates and cleanup (DV, William Brack, John Fleck)</li>
+ <li>added a repository of examples, examples from Aleksey Sanin, Dodji
+ Seketeli, Alfred Mickautsch</li>
+ <li>Windows updates: Mark Vakoc, Igor Zlatkovic, Eric Zurcher, Mingw
+ (Kenneth Haley)</li>
+ <li>Unicode range checking (William Brack)</li>
+ <li>code cleanup (William Brack)</li>
+ <li>Python bindings: doc (John Fleck), bug fixes</li>
+ <li>UTF-16 cleanup and BOM issues (William Brack)</li>
+ <li>bug fixes: ID and xmlReader validation, XPath (William Brack),
+ xmlWriter (Alfred Mickautsch), hash.h inclusion problem, HTML parser
+ (James Bursa), attribute defaulting and validation, some serialization
+ cleanups, XML_GET_LINE macro, memory debug when using threads (William
+ Brack), serialization of attributes and entities content, xmlWriter
+ (Daniel Schulman)</li>
+ <li>XInclude bugfix, new APIs and update to the last version including the
+ namespace change.</li>
+ <li>XML Schemas improvements: include (Robert Stepanek), import and
+ namespace handling, fixed the regression tests troubles, added examples
+ based on Eric van der Vlist book, regexp fixes</li>
+ <li>preliminary pattern support for streaming (needed for schemas
+ constraints), added xmlTextReaderPreservePattern() to collect subdocument
+ when streaming.</li>
+ <li>various fixes in the structured error handling</li>
+</ul>
+
+<h3>2.6.2: Nov 4 2003</h3>
+<ul>
+ <li>XPath context unregistration fixes</li>
+ <li>text node coalescing fixes (Mark Lilback)</li>
+ <li>API to screate a W3C Schemas from an existing document (Steve Ball)</li>
+ <li>BeOS patches (Marcin 'Shard' Konicki)</li>
+ <li>xmlStrVPrintf function added (Aleksey Sanin)</li>
+ <li>compilation fixes (Mark Vakoc)</li>
+ <li>stdin parsing fix (William Brack)</li>
+ <li>a posteriori DTD validation fixes</li>
+ <li>xmlReader bug fixes: Walker fixes, python bindings</li>
+ <li>fixed xmlStopParser() to really stop the parser and errors</li>
+ <li>always generate line numbers when using the new xmlReadxxx
+ functions</li>
+ <li>added XInclude support to the xmlReader interface</li>
+ <li>implemented XML_PARSE_NONET parser option</li>
+ <li>DocBook XSLT processing bug fixed</li>
+ <li>HTML serialization for &lt;p&gt; elements (William Brack and me)</li>
+ <li>XPointer failure in XInclude are now handled as resource errors</li>
+ <li>fixed xmllint --html to use the HTML serializer on output (added
+ --xmlout to implement the previous behaviour of saving it using the XML
+ serializer)</li>
+</ul>
+
+<h3>2.6.1: Oct 28 2003</h3>
+<ul>
+ <li>Mostly bugfixes after the big 2.6.0 changes</li>
+ <li>Unix compilation patches: libxml.m4 (Patrick Welche), warnings cleanup
+ (William Brack)</li>
+ <li>Windows compilation patches (Joachim Bauch, Stephane Bidoul, Igor
+ Zlatkovic)</li>
+ <li>xmlWriter bugfix (Alfred Mickautsch)</li>
+ <li>chvalid.[ch]: couple of fixes from Stephane Bidoul</li>
+ <li>context reset: error state reset, push parser reset (Graham
+ Bennett)</li>
+ <li>context reuse: generate errors if file is not readable</li>
+ <li>defaulted attributes for element coming from internal entities
+ (Stephane Bidoul)</li>
+ <li>Python: tab and spaces mix (William Brack)</li>
+ <li>Error handler could crash in DTD validation in 2.6.0</li>
+ <li>xmlReader: do not use the document or element _private field</li>
+ <li>testSAX.c: avoid a problem with some PIs (Massimo Morara)</li>
+ <li>general bug fixes: mandatory encoding in text decl, serializing
+ Document Fragment nodes, xmlSearchNs 2.6.0 problem (Kasimier Buchcik),
+ XPath errors not reported, slow HTML parsing of large documents.</li>
+</ul>
+
+<h3>2.6.0: Oct 20 2003</h3>
+<ul>
+ <li>Major revision release: should be API and ABI compatible but got a lot
+ of change</li>
+ <li>Increased the library modularity, far more options can be stripped out,
+ a --with-minimum configuration will weight around 160KBytes</li>
+ <li>Use per parser and per document dictionnary, allocate names and small
+ text nodes from the dictionnary</li>
+ <li>Switch to a SAX2 like parser rewrote most of the XML parser core,
+ provides namespace resolution and defaulted attributes, minimize memory
+ allocations and copies, namespace checking and specific error handling,
+ immutable buffers, make predefined entities static structures, etc...</li>
+ <li>rewrote all the error handling in the library, all errors can be
+ intercepted at a structured level, with precise information
+ available.</li>
+ <li>New simpler and more generic XML and HTML parser APIs, allowing to
+ easilly modify the parsing options and reuse parser context for multiple
+ consecutive documents.</li>
+ <li>Similar new APIs for the xmlReader, for options and reuse, provided new
+ functions to access content as const strings, use them for Python
+ bindings</li>
+ <li>a lot of other smaller API improvements: xmlStrPrintf (Aleksey Sanin),
+ Walker i.e. reader on a document tree based on Alfred Mickautsch code,
+ make room in nodes for line numbers, reference counting and future PSVI
+ extensions, generation of character ranges to be checked with faster
+ algorithm (William), xmlParserMaxDepth (Crutcher Dunnavant), buffer
+ access</li>
+ <li>New xmlWriter API provided by Alfred Mickautsch</li>
+ <li>Schemas: base64 support by Anthony Carrico</li>
+ <li>Parser&lt;-&gt;HTTP integration fix, proper processing of the Mime-Type
+ and charset informations if available.</li>
+ <li>Relax-NG: bug fixes including the one reported by Martijn Faassen and
+ zeroOrMore, better error reporting.</li>
+ <li>Python bindings (Stéphane Bidoul), never use stdout for errors
+ output</li>
+ <li>Portability: all the headers have macros for export and calling
+ convention definitions (Igor Zlatkovic), VMS update (Craig A. Berry),
+ Windows: threads (Jesse Pelton), Borland compiler (Eric Zurcher, Igor),
+ Mingw (Igor), typos (Mark Vakoc), beta version (Stephane Bidoul),
+ warning cleanups on AIX and MIPS compilers (William Brack), BeOS (Marcin
+ 'Shard' Konicki)</li>
+ <li>Documentation fixes and README (William Brack), search fix (William),
+ tutorial updates (John Fleck), namespace docs (Stefan Kost)</li>
+ <li>Bug fixes: xmlCleanupParser (Dave Beckett), threading uninitialized
+ mutexes, HTML doctype lowercase, SAX/IO (William), compression detection
+ and restore (William), attribute declaration in DTDs (William), namespace
+ on attribute in HTML output (William), input filename (Rob Richards),
+ namespace DTD validation, xmlReplaceNode (Chris Ryland), I/O callbacks
+ (Markus Keim), CDATA serialization (Shaun McCance), xmlReader (Peter
+ Derr), high codepoint charref like &amp;#x10FFFF;, buffer access in push
+ mode (Justin Fletcher), TLS threads on Windows (Jesse Pelton), XPath bug
+ (William), xmlCleanupParser (Marc Liyanage), CDATA output (William), HTTP
+ error handling.</li>
+ <li>xmllint options: --dtdvalidfpi for Tobias Reif, --sax1 for compat
+ testing, --nodict for building without tree dictionnary, --nocdata to
+ replace CDATA by text, --nsclean to remove surperfluous namespace
+ declarations</li>
+ <li>added xml2-config --libtool-libs option from Kevin P. Fleming</li>
+ <li>a lot of profiling and tuning of the code, speedup patch for
+ xmlSearchNs() by Luca Padovani. The xmlReader should do far less
+ allocation and it speed should get closer to SAX. Chris Anderson worked
+ on speeding and cleaning up repetitive checking code.</li>
+ <li>cleanup of "make tests"</li>
+ <li>libxml-2.0-uninstalled.pc from Malcolm Tredinnick</li>
+ <li>deactivated the broken docBook SGML parser code and plugged the XML
+ parser instead.</li>
+</ul>
+
+<h3>2.5.11: Sep 9 2003</h3>
+
+<p>A bugfix only release:</p>
+<ul>
+ <li>risk of crash in Relax-NG</li>
+ <li>risk of crash when using multithreaded programs</li>
+</ul>
+
+<h3>2.5.10: Aug 15 2003</h3>
+
+<p>A bugfixes only release</p>
+<ul>
+ <li>Windows Makefiles (William Brack)</li>
+ <li>UTF-16 support fixes (Mark Itzcovitz)</li>
+ <li>Makefile and portability (William Brack) automake, Linux alpha, Mingw
+ on Windows (Mikhail Grushinskiy)</li>
+ <li>HTML parser (Oliver Stoeneberg)</li>
+ <li>XInclude performance problem reported by Kevin Ruscoe</li>
+ <li>XML parser performance problem reported by Grant Goodale</li>
+ <li>xmlSAXParseDTD() bug fix from Malcolm Tredinnick</li>
+ <li>and a couple other cleanup</li>
+</ul>
+
+<h3>2.5.9: Aug 9 2003</h3>
+<ul>
+ <li>bugfixes: IPv6 portability, xmlHasNsProp (Markus Keim), Windows build
+ (Wiliam Brake, Jesse Pelton, Igor), Schemas (Peter Sobisch), threading
+ (Rob Richards), hexBinary type (), UTF-16 BOM (Dodji Seketeli),
+ xmlReader, Relax-NG schemas compilation, namespace handling, EXSLT (Sean
+ Griffin), HTML parsing problem (William Brack), DTD validation for mixed
+ content + namespaces, HTML serialization, library initialization,
+ progressive HTML parser</li>
+ <li>better interfaces for Relax-NG error handling (Joachim Bauch, )</li>
+ <li>adding xmlXIncludeProcessTree() for XInclud'ing in a subtree</li>
+ <li>doc fixes and improvements (John Fleck)</li>
+ <li>configure flag for -with-fexceptions when embedding in C++</li>
+ <li>couple of new UTF-8 helper functions (William Brack)</li>
+ <li>general encoding cleanup + ISO-8859-x without iconv (Peter Jacobi)</li>
+ <li>xmlTextReader cleanup + enum for node types (Bjorn Reese)</li>
+ <li>general compilation/warning cleanup Solaris/HP-UX/... (William
+ Brack)</li>
+</ul>
+
+<h3>2.5.8: Jul 6 2003</h3>
+<ul>
+ <li>bugfixes: XPath, XInclude, file/URI mapping, UTF-16 save (Mark
+ Itzcovitz), UTF-8 checking, URI saving, error printing (William Brack),
+ PI related memleak, compilation without schemas or without xpath (Joerg
+ Schmitz-Linneweber/Garry Pennington), xmlUnlinkNode problem with DTDs,
+ rpm problem on , i86_64, removed a few compilation problems from 2.5.7,
+ xmlIOParseDTD, and xmlSAXParseDTD (Malcolm Tredinnick)</li>
+ <li>portability: DJGPP (MsDos) , OpenVMS (Craig A. Berry)</li>
+ <li>William Brack fixed multithreading lock problems</li>
+ <li>IPv6 patch for FTP and HTTP accesses (Archana Shah/Wipro)</li>
+ <li>Windows fixes (Igor Zlatkovic, Eric Zurcher), threading (Stéphane
+ Bidoul)</li>
+ <li>A few W3C Schemas Structure improvements</li>
+ <li>W3C Schemas Datatype improvements (Charlie Bozeman)</li>
+ <li>Python bindings for thread globals (Stéphane Bidoul), and method/class
+ generator</li>
+ <li>added --nonet option to xmllint</li>
+ <li>documentation improvements (John Fleck)</li>
+</ul>
+
+<h3>2.5.7: Apr 25 2003</h3>
+<ul>
+ <li>Relax-NG: Compiling to regexp and streaming validation on top of the
+ xmlReader interface, added to xmllint --stream</li>
+ <li>xmlReader: Expand(), Next() and DOM access glue, bug fixes</li>
+ <li>Support for large files: RGN validated a 4.5GB instance</li>
+ <li>Thread support is now configured in by default</li>
+ <li>Fixes: update of the Trio code (Bjorn), WXS Date and Duration fixes
+ (Charles Bozeman), DTD and namespaces (Brent Hendricks), HTML push parser
+ and zero bytes handling, some missing Windows file path conversions,
+ behaviour of the parser and validator in the presence of "out of memory"
+ error conditions</li>
+ <li>extended the API to be able to plug a garbage collecting memory
+ allocator, added xmlMallocAtomic() and modified the allocations
+ accordingly.</li>
+ <li>Performances: removed excessive malloc() calls, speedup of the push and
+ xmlReader interfaces, removed excessive thread locking</li>
+ <li>Documentation: man page (John Fleck), xmlReader documentation</li>
+ <li>Python: adding binding for xmlCatalogAddLocal (Brent M Hendricks)</li>
+</ul>
+
+<h3>2.5.6: Apr 1 2003</h3>
+<ul>
+ <li>Fixed W3C XML Schemas datatype, should be compliant now except for
+ binHex and base64 which are not supported yet.</li>
+ <li>bug fixes: non-ASCII IDs, HTML output, XInclude on large docs and
+ XInclude entities handling, encoding detection on external subsets, XML
+ Schemas bugs and memory leaks, HTML parser (James Bursa)</li>
+ <li>portability: python/trio (Albert Chin), Sun compiler warnings</li>
+ <li>documentation: added --relaxng option to xmllint man page (John)</li>
+ <li>improved error reporting: xml:space, start/end tag mismatches, Relax NG
+ errors</li>
+</ul>
+
+<h3>2.5.5: Mar 24 2003</h3>
+<ul>
+ <li>Lot of fixes on the Relax NG implementation. More testing including
+ DocBook and TEI examples.</li>
+ <li>Increased the support for W3C XML Schemas datatype</li>
+ <li>Several bug fixes in the URI handling layer</li>
+ <li>Bug fixes: HTML parser, xmlReader, DTD validation, XPath, encoding
+ conversion, line counting in the parser.</li>
+ <li>Added support for $XMLLINT_INDENT environment variable, FTP delete</li>
+ <li>Fixed the RPM spec file name</li>
+</ul>
+
+<h3>2.5.4: Feb 20 2003</h3>
+<ul>
+ <li>Conformance testing and lot of fixes on Relax NG and XInclude
+ implementation</li>
+ <li>Implementation of XPointer element() scheme</li>
+ <li>Bug fixes: XML parser, XInclude entities merge, validity checking on
+ namespaces,
+ <p>2 serialization bugs, node info generation problems, a DTD regexp
+ generation problem.</p>
+ </li>
+ <li>Portability: windows updates and path canonicalization (Igor)</li>
+ <li>A few typo fixes (Kjartan Maraas)</li>
+ <li>Python bindings generator fixes (Stephane Bidoul)</li>
+</ul>
+
+<h3>2.5.3: Feb 10 2003</h3>
+<ul>
+ <li>RelaxNG and XML Schemas datatypes improvements, and added a first
+ version of RelaxNG Python bindings</li>
+ <li>Fixes: XLink (Sean Chittenden), XInclude (Sean Chittenden), API fix for
+ serializing namespace nodes, encoding conversion bug, XHTML1
+ serialization</li>
+ <li>Portability fixes: Windows (Igor), AMD 64bits RPM spec file</li>
+</ul>
+
+<h3>2.5.2: Feb 5 2003</h3>
+<ul>
+ <li>First implementation of RelaxNG, added --relaxng flag to xmllint</li>
+ <li>Schemas support now compiled in by default.</li>
+ <li>Bug fixes: DTD validation, namespace checking, XInclude and entities,
+ delegateURI in XML Catalogs, HTML parser, XML reader (Stéphane Bidoul),
+ XPath parser and evaluation, UTF8ToUTF8 serialization, XML reader memory
+ consumption, HTML parser, HTML serialization in the presence of
+ namespaces</li>
+ <li>added an HTML API to check elements and attributes.</li>
+ <li>Documentation improvement, PDF for the tutorial (John Fleck), doc
+ patches (Stefan Kost)</li>
+ <li>Portability fixes: NetBSD (Julio Merino), Windows (Igor Zlatkovic)</li>
+ <li>Added python bindings for XPointer, contextual error reporting
+ (Stéphane Bidoul)</li>
+ <li>URI/file escaping problems (Stefano Zacchiroli)</li>
+</ul>
+
+<h3>2.5.1: Jan 8 2003</h3>
+<ul>
+ <li>Fixes a memory leak and configuration/compilation problems in 2.5.0</li>
+ <li>documentation updates (John)</li>
+ <li>a couple of XmlTextReader fixes</li>
+</ul>
+
+<h3>2.5.0: Jan 6 2003</h3>
+<ul>
+ <li>New <a href="xmlreader.html">XmltextReader interface</a> based on C#
+ API (with help of Stéphane Bidoul)</li>
+ <li>Windows: more exports, including the new API (Igor)</li>
+ <li>XInclude fallback fix</li>
+ <li>Python: bindings for the new API, packaging (Stéphane Bidoul),
+ drv_libxml2.py Python xml.sax driver (Stéphane Bidoul), fixes, speedup
+ and iterators for Python-2.2 (Hannu Krosing)</li>
+ <li>Tutorial fixes (john Fleck and Niraj Tolia) xmllint man update
+ (John)</li>
+ <li>Fix an XML parser bug raised by Vyacheslav Pindyura</li>
+ <li>Fix for VMS serialization (Nigel Hall) and config (Craig A. Berry)</li>
+ <li>Entities handling fixes</li>
+ <li>new API to optionally track node creation and deletion (Lukas
+ Schroeder)</li>
+ <li>Added documentation for the XmltextReader interface and some <a
+ href="guidelines.html">XML guidelines</a></li>
+</ul>
+
+<h3>2.4.30: Dec 12 2002</h3>
+<ul>
+ <li>2.4.29 broke the python bindings, rereleasing</li>
+ <li>Improvement/fixes of the XML API generator, and couple of minor code
+ fixes.</li>
+</ul>
+
+<h3>2.4.29: Dec 11 2002</h3>
+<ul>
+ <li>Windows fixes (Igor): Windows CE port, pthread linking, python bindings
+ (Stéphane Bidoul), Mingw (Magnus Henoch), and export list updates</li>
+ <li>Fix for prev in python bindings (ERDI Gergo)</li>
+ <li>Fix for entities handling (Marcus Clarke)</li>
+ <li>Refactored the XML and HTML dumps to a single code path, fixed XHTML1
+ dump</li>
+ <li>Fix for URI parsing when handling URNs with fragment identifiers</li>
+ <li>Fix for HTTP URL escaping problem</li>
+ <li>added an TextXmlReader (C#) like API (work in progress)</li>
+ <li>Rewrote the API in XML generation script, includes a C parser and saves
+ more informations needed for C# bindings</li>
+</ul>
+
+<h3>2.4.28: Nov 22 2002</h3>
+<ul>
+ <li>a couple of python binding fixes</li>
+ <li>2 bug fixes in the XML push parser</li>
+ <li>potential memory leak removed (Martin Stoilov)</li>
+ <li>fix to the configure script for Unix (Dimitri Papadopoulos)</li>
+ <li>added encoding support for XInclude parse="text"</li>
+ <li>autodetection of XHTML1 and specific serialization rules added</li>
+ <li>nasty threading bug fixed (William Brack)</li>
+</ul>
+
+<h3>2.4.27: Nov 17 2002</h3>
+<ul>
+ <li>fixes for the Python bindings</li>
+ <li>a number of bug fixes: SGML catalogs, xmlParseBalancedChunkMemory(),
+ HTML parser, Schemas (Charles Bozeman), document fragment support
+ (Christian Glahn), xmlReconciliateNs (Brian Stafford), XPointer,
+ xmlFreeNode(), xmlSAXParseMemory (Peter Jones), xmlGetNodePath (Petr
+ Pajas), entities processing</li>
+ <li>added grep to xmllint --shell</li>
+ <li>VMS update patch from Craig A. Berry</li>
+ <li>cleanup of the Windows build with support for more compilers (Igor),
+ better thread support on Windows</li>
+ <li>cleanup of Unix Makefiles and spec file</li>
+ <li>Improvements to the documentation (John Fleck)</li>
+</ul>
+
+<h3>2.4.26: Oct 18 2002</h3>
+<ul>
+ <li>Patches for Windows CE port, improvements on Windows paths handling</li>
+ <li>Fixes to the validation code (DTD and Schemas), xmlNodeGetPath() ,
+ HTML serialization, Namespace compliance, and a number of small
+ problems</li>
+</ul>
+
+<h3>2.4.25: Sep 26 2002</h3>
+<ul>
+ <li>A number of bug fixes: XPath, validation, Python bindings, DOM and
+ tree, xmlI/O, Html</li>
+ <li>Serious rewrite of XInclude</li>
+ <li>Made XML Schemas regexp part of the default build and APIs, small fix
+ and improvement of the regexp core</li>
+ <li>Changed the validation code to reuse XML Schemas regexp APIs</li>
+ <li>Better handling of Windows file paths, improvement of Makefiles (Igor,
+ Daniel Gehriger, Mark Vakoc)</li>
+ <li>Improved the python I/O bindings, the tests, added resolver and regexp
+ APIs</li>
+ <li>New logos from Marc Liyanage</li>
+ <li>Tutorial improvements: John Fleck, Christopher Harris</li>
+ <li>Makefile: Fixes for AMD x86_64 (Mandrake), DESTDIR (Christophe
+ Merlet)</li>
+ <li>removal of all stderr/perror use for error reporting</li>
+ <li>Better error reporting: XPath and DTD validation</li>
+ <li>update of the trio portability layer (Bjorn Reese)</li>
+</ul>
+
+<p><strong>2.4.24: Aug 22 2002</strong></p>
+<ul>
+ <li>XPath fixes (William), xf:escape-uri() (Wesley Terpstra)</li>
+ <li>Python binding fixes: makefiles (William), generator, rpm build, x86-64
+ (fcrozat)</li>
+ <li>HTML &lt;style&gt; and boolean attributes serializer fixes</li>
+ <li>C14N improvements by Aleksey</li>
+ <li>doc cleanups: Rick Jones</li>
+ <li>Windows compiler makefile updates: Igor and Elizabeth Barham</li>
+ <li>XInclude: implementation of fallback and xml:base fixup added</li>
+</ul>
+
+<h3>2.4.23: July 6 2002</h3>
+<ul>
+ <li>performances patches: Peter Jacobi</li>
+ <li>c14n fixes, testsuite and performances: Aleksey Sanin</li>
+ <li>added xmlDocFormatDump: Chema Celorio</li>
+ <li>new tutorial: John Fleck</li>
+ <li>new hash functions and performances: Sander Vesik, portability fix from
+ Peter Jacobi</li>
+ <li>a number of bug fixes: XPath (William Brack, Richard Jinks), XML and
+ HTML parsers, ID lookup function</li>
+ <li>removal of all remaining sprintf: Aleksey Sanin</li>
+</ul>
+
+<h3>2.4.22: May 27 2002</h3>
+<ul>
+ <li>a number of bug fixes: configure scripts, base handling, parser, memory
+ usage, HTML parser, XPath, documentation (Christian Cornelssen),
+ indentation, URI parsing</li>
+ <li>Optimizations for XMLSec, fixing and making public some of the network
+ protocol handlers (Aleksey)</li>
+ <li>performance patch from Gary Pennington</li>
+ <li>Charles Bozeman provided date and time support for XML Schemas
+ datatypes</li>
+</ul>
+
+<h3>2.4.21: Apr 29 2002</h3>
+
+<p>This release is both a bug fix release and also contains the early XML
+Schemas <a href="http://www.w3.org/TR/xmlschema-1/">structures</a> and <a
+href="http://www.w3.org/TR/xmlschema-2/">datatypes</a> code, beware, all
+interfaces are likely to change, there is huge holes, it is clearly a work in
+progress and don't even think of putting this code in a production system,
+it's actually not compiled in by default. The real fixes are:</p>
+<ul>
+ <li>a couple of bugs or limitations introduced in 2.4.20</li>
+ <li>patches for Borland C++ and MSC by Igor</li>
+ <li>some fixes on XPath strings and conformance patches by Richard
+ Jinks</li>
+ <li>patch from Aleksey for the ExcC14N specification</li>
+ <li>OSF/1 bug fix by Bjorn</li>
+</ul>
+
+<h3>2.4.20: Apr 15 2002</h3>
+<ul>
+ <li>bug fixes: file descriptor leak, XPath, HTML output, DTD validation</li>
+ <li>XPath conformance testing by Richard Jinks</li>
+ <li>Portability fixes: Solaris, MPE/iX, Windows, OSF/1, python bindings,
+ libxml.m4</li>
+</ul>
+
+<h3>2.4.19: Mar 25 2002</h3>
+<ul>
+ <li>bug fixes: half a dozen XPath bugs, Validation, ISO-Latin to UTF8
+ encoder</li>
+ <li>portability fixes in the HTTP code</li>
+ <li>memory allocation checks using valgrind, and profiling tests</li>
+ <li>revamp of the Windows build and Makefiles</li>
+</ul>
+
+<h3>2.4.18: Mar 18 2002</h3>
+<ul>
+ <li>bug fixes: tree, SAX, canonicalization, validation, portability,
+ XPath</li>
+ <li>removed the --with-buffer option it was becoming unmaintainable</li>
+ <li>serious cleanup of the Python makefiles</li>
+ <li>speedup patch to XPath very effective for DocBook stylesheets</li>
+ <li>Fixes for Windows build, cleanup of the documentation</li>
+</ul>
+
+<h3>2.4.17: Mar 8 2002</h3>
+<ul>
+ <li>a lot of bug fixes, including "namespace nodes have no parents in
+ XPath"</li>
+ <li>fixed/improved the Python wrappers, added more examples and more
+ regression tests, XPath extension functions can now return node-sets</li>
+ <li>added the XML Canonicalization support from Aleksey Sanin</li>
+</ul>
+
+<h3>2.4.16: Feb 20 2002</h3>
+<ul>
+ <li>a lot of bug fixes, most of them were triggered by the XML Testsuite
+ from OASIS and W3C. Compliance has been significantly improved.</li>
+ <li>a couple of portability fixes too.</li>
+</ul>
+
+<h3>2.4.15: Feb 11 2002</h3>
+<ul>
+ <li>Fixed the Makefiles, especially the python module ones</li>
+ <li>A few bug fixes and cleanup</li>
+ <li>Includes cleanup</li>
+</ul>
+
+<h3>2.4.14: Feb 8 2002</h3>
+<ul>
+ <li>Change of License to the <a
+ href="http://www.opensource.org/licenses/mit-license.html">MIT
+ License</a> basically for integration in XFree86 codebase, and removing
+ confusion around the previous dual-licensing</li>
+ <li>added Python bindings, beta software but should already be quite
+ complete</li>
+ <li>a large number of fixes and cleanups, especially for all tree
+ manipulations</li>
+ <li>cleanup of the headers, generation of a reference API definition in
+ XML</li>
+</ul>
+
+<h3>2.4.13: Jan 14 2002</h3>
+<ul>
+ <li>update of the documentation: John Fleck and Charlie Bozeman</li>
+ <li>cleanup of timing code from Justin Fletcher</li>
+ <li>fixes for Windows and initial thread support on Win32: Igor and Serguei
+ Narojnyi</li>
+ <li>Cygwin patch from Robert Collins</li>
+ <li>added xmlSetEntityReferenceFunc() for Keith Isdale work on xsldbg</li>
+</ul>
+
+<h3>2.4.12: Dec 7 2001</h3>
+<ul>
+ <li>a few bug fixes: thread (Gary Pennington), xmllint (Geert Kloosterman),
+ XML parser (Robin Berjon), XPointer (Danny Jamshy), I/O cleanups
+ (robert)</li>
+ <li>Eric Lavigne contributed project files for MacOS</li>
+ <li>some makefiles cleanups</li>
+</ul>
+
+<h3>2.4.11: Nov 26 2001</h3>
+<ul>
+ <li>fixed a couple of errors in the includes, fixed a few bugs, some code
+ cleanups</li>
+ <li>xmllint man pages improvement by Heiko Rupp</li>
+ <li>updated VMS build instructions from John A Fotheringham</li>
+ <li>Windows Makefiles updates from Igor</li>
+</ul>
+
+<h3>2.4.10: Nov 10 2001</h3>
+<ul>
+ <li>URI escaping fix (Joel Young)</li>
+ <li>added xmlGetNodePath() (for paths or XPointers generation)</li>
+ <li>Fixes namespace handling problems when using DTD and validation</li>
+ <li>improvements on xmllint: Morus Walter patches for --format and
+ --encode, Stefan Kost and Heiko Rupp improvements on the --shell</li>
+ <li>fixes for xmlcatalog linking pointed by Weiqi Gao</li>
+ <li>fixes to the HTML parser</li>
+</ul>
+
+<h3>2.4.9: Nov 6 2001</h3>
+<ul>
+ <li>fixes more catalog bugs</li>
+ <li>avoid a compilation problem, improve xmlGetLineNo()</li>
+</ul>
+
+<h3>2.4.8: Nov 4 2001</h3>
+<ul>
+ <li>fixed SGML catalogs broken in previous release, updated xmlcatalog
+ tool</li>
+ <li>fixed a compile errors and some includes troubles.</li>
+</ul>
+
+<h3>2.4.7: Oct 30 2001</h3>
+<ul>
+ <li>exported some debugging interfaces</li>
+ <li>serious rewrite of the catalog code</li>
+ <li>integrated Gary Pennington thread safety patch, added configure option
+ and regression tests</li>
+ <li>removed an HTML parser bug</li>
+ <li>fixed a couple of potentially serious validation bugs</li>
+ <li>integrated the SGML DocBook support in xmllint</li>
+ <li>changed the nanoftp anonymous login passwd</li>
+ <li>some I/O cleanup and a couple of interfaces for Perl wrapper</li>
+ <li>general bug fixes</li>
+ <li>updated xmllint man page by John Fleck</li>
+ <li>some VMS and Windows updates</li>
+</ul>
+
+<h3>2.4.6: Oct 10 2001</h3>
+<ul>
+ <li>added an updated man pages by John Fleck</li>
+ <li>portability and configure fixes</li>
+ <li>an infinite loop on the HTML parser was removed (William)</li>
+ <li>Windows makefile patches from Igor</li>
+ <li>fixed half a dozen bugs reported for libxml or libxslt</li>
+ <li>updated xmlcatalog to be able to modify SGML super catalogs</li>
+</ul>
+
+<h3>2.4.5: Sep 14 2001</h3>
+<ul>
+ <li>Remove a few annoying bugs in 2.4.4</li>
+ <li>forces the HTML serializer to output decimal charrefs since some
+ version of Netscape can't handle hexadecimal ones</li>
+</ul>
+
+<h3>1.8.16: Sep 14 2001</h3>
+<ul>
+ <li>maintenance release of the old libxml1 branch, couple of bug and
+ portability fixes</li>
+</ul>
+
+<h3>2.4.4: Sep 12 2001</h3>
+<ul>
+ <li>added --convert to xmlcatalog, bug fixes and cleanups of XML
+ Catalog</li>
+ <li>a few bug fixes and some portability changes</li>
+ <li>some documentation cleanups</li>
+</ul>
+
+<h3>2.4.3: Aug 23 2001</h3>
+<ul>
+ <li>XML Catalog support see the doc</li>
+ <li>New NaN/Infinity floating point code</li>
+ <li>A few bug fixes</li>
+</ul>
+
+<h3>2.4.2: Aug 15 2001</h3>
+<ul>
+ <li>adds xmlLineNumbersDefault() to control line number generation</li>
+ <li>lot of bug fixes</li>
+ <li>the Microsoft MSC projects files should now be up to date</li>
+ <li>inheritance of namespaces from DTD defaulted attributes</li>
+ <li>fixes a serious potential security bug</li>
+ <li>added a --format option to xmllint</li>
+</ul>
+
+<h3>2.4.1: July 24 2001</h3>
+<ul>
+ <li>possibility to keep line numbers in the tree</li>
+ <li>some computation NaN fixes</li>
+ <li>extension of the XPath API</li>
+ <li>cleanup for alpha and ia64 targets</li>
+ <li>patch to allow saving through HTTP PUT or POST</li>
+</ul>
+
+<h3>2.4.0: July 10 2001</h3>
+<ul>
+ <li>Fixed a few bugs in XPath, validation, and tree handling.</li>
+ <li>Fixed XML Base implementation, added a couple of examples to the
+ regression tests</li>
+ <li>A bit of cleanup</li>
+</ul>
+
+<h3>2.3.14: July 5 2001</h3>
+<ul>
+ <li>fixed some entities problems and reduce memory requirement when
+ substituting them</li>
+ <li>lots of improvements in the XPath queries interpreter can be
+ substantially faster</li>
+ <li>Makefiles and configure cleanups</li>
+ <li>Fixes to XPath variable eval, and compare on empty node set</li>
+ <li>HTML tag closing bug fixed</li>
+ <li>Fixed an URI reference computation problem when validating</li>
+</ul>
+
+<h3>2.3.13: June 28 2001</h3>
+<ul>
+ <li>2.3.12 configure.in was broken as well as the push mode XML parser</li>
+ <li>a few more fixes for compilation on Windows MSC by Yon Derek</li>
+</ul>
+
+<h3>1.8.14: June 28 2001</h3>
+<ul>
+ <li>Zbigniew Chyla gave a patch to use the old XML parser in push mode</li>
+ <li>Small Makefile fix</li>
+</ul>
+
+<h3>2.3.12: June 26 2001</h3>
+<ul>
+ <li>lots of cleanup</li>
+ <li>a couple of validation fix</li>
+ <li>fixed line number counting</li>
+ <li>fixed serious problems in the XInclude processing</li>
+ <li>added support for UTF8 BOM at beginning of entities</li>
+ <li>fixed a strange gcc optimizer bugs in xpath handling of float, gcc-3.0
+ miscompile uri.c (William), Thomas Leitner provided a fix for the
+ optimizer on Tru64</li>
+ <li>incorporated Yon Derek and Igor Zlatkovic fixes and improvements for
+ compilation on Windows MSC</li>
+ <li>update of libxml-doc.el (Felix Natter)</li>
+ <li>fixed 2 bugs in URI normalization code</li>
+</ul>
+
+<h3>2.3.11: June 17 2001</h3>
+<ul>
+ <li>updates to trio, Makefiles and configure should fix some portability
+ problems (alpha)</li>
+ <li>fixed some HTML serialization problems (pre, script, and block/inline
+ handling), added encoding aware APIs, cleanup of this code</li>
+ <li>added xmlHasNsProp()</li>
+ <li>implemented a specific PI for encoding support in the DocBook SGML
+ parser</li>
+ <li>some XPath fixes (-Infinity, / as a function parameter and namespaces
+ node selection)</li>
+ <li>fixed a performance problem and an error in the validation code</li>
+ <li>fixed XInclude routine to implement the recursive behaviour</li>
+ <li>fixed xmlFreeNode problem when libxml is included statically twice</li>
+ <li>added --version to xmllint for bug reports</li>
+</ul>
+
+<h3>2.3.10: June 1 2001</h3>
+<ul>
+ <li>fixed the SGML catalog support</li>
+ <li>a number of reported bugs got fixed, in XPath, iconv detection,
+ XInclude processing</li>
+ <li>XPath string function should now handle unicode correctly</li>
+</ul>
+
+<h3>2.3.9: May 19 2001</h3>
+
+<p>Lots of bugfixes, and added a basic SGML catalog support:</p>
+<ul>
+ <li>HTML push bugfix #54891 and another patch from Jonas Borgström</li>
+ <li>some serious speed optimization again</li>
+ <li>some documentation cleanups</li>
+ <li>trying to get better linking on Solaris (-R)</li>
+ <li>XPath API cleanup from Thomas Broyer</li>
+ <li>Validation bug fixed #54631, added a patch from Gary Pennington, fixed
+ xmlValidGetValidElements()</li>
+ <li>Added an INSTALL file</li>
+ <li>Attribute removal added to API: #54433</li>
+ <li>added a basic support for SGML catalogs</li>
+ <li>fixed xmlKeepBlanksDefault(0) API</li>
+ <li>bugfix in xmlNodeGetLang()</li>
+ <li>fixed a small configure portability problem</li>
+ <li>fixed an inversion of SYSTEM and PUBLIC identifier in HTML document</li>
+</ul>
+
+<h3>1.8.13: May 14 2001</h3>
+<ul>
+ <li>bugfixes release of the old libxml1 branch used by Gnome</li>
+</ul>
+
+<h3>2.3.8: May 3 2001</h3>
+<ul>
+ <li>Integrated an SGML DocBook parser for the Gnome project</li>
+ <li>Fixed a few things in the HTML parser</li>
+ <li>Fixed some XPath bugs raised by XSLT use, tried to fix the floating
+ point portability issue</li>
+ <li>Speed improvement (8M/s for SAX, 3M/s for DOM, 1.5M/s for
+ DOM+validation using the XML REC as input and a 700MHz celeron).</li>
+ <li>incorporated more Windows cleanup</li>
+ <li>added xmlSaveFormatFile()</li>
+ <li>fixed problems in copying nodes with entities references (gdome)</li>
+ <li>removed some troubles surrounding the new validation module</li>
+</ul>
+
+<h3>2.3.7: April 22 2001</h3>
+<ul>
+ <li>lots of small bug fixes, corrected XPointer</li>
+ <li>Non deterministic content model validation support</li>
+ <li>added xmlDocCopyNode for gdome2</li>
+ <li>revamped the way the HTML parser handles end of tags</li>
+ <li>XPath: corrections of namespaces support and number formatting</li>
+ <li>Windows: Igor Zlatkovic patches for MSC compilation</li>
+ <li>HTML output fixes from P C Chow and William M. Brack</li>
+ <li>Improved validation speed sensible for DocBook</li>
+ <li>fixed a big bug with ID declared in external parsed entities</li>
+ <li>portability fixes, update of Trio from Bjorn Reese</li>
+</ul>
+
+<h3>2.3.6: April 8 2001</h3>
+<ul>
+ <li>Code cleanup using extreme gcc compiler warning options, found and
+ cleared half a dozen potential problem</li>
+ <li>the Eazel team found an XML parser bug</li>
+ <li>cleaned up the user of some of the string formatting function. used the
+ trio library code to provide the one needed when the platform is missing
+ them</li>
+ <li>xpath: removed a memory leak and fixed the predicate evaluation
+ problem, extended the testsuite and cleaned up the result. XPointer seems
+ broken ...</li>
+</ul>
+
+<h3>2.3.5: Mar 23 2001</h3>
+<ul>
+ <li>Biggest change is separate parsing and evaluation of XPath expressions,
+ there is some new APIs for this too</li>
+ <li>included a number of bug fixes(XML push parser, 51876, notations,
+ 52299)</li>
+ <li>Fixed some portability issues</li>
+</ul>
+
+<h3>2.3.4: Mar 10 2001</h3>
+<ul>
+ <li>Fixed bugs #51860 and #51861</li>
+ <li>Added a global variable xmlDefaultBufferSize to allow default buffer
+ size to be application tunable.</li>
+ <li>Some cleanup in the validation code, still a bug left and this part
+ should probably be rewritten to support ambiguous content model :-\</li>
+ <li>Fix a couple of serious bugs introduced or raised by changes in 2.3.3
+ parser</li>
+ <li>Fixed another bug in xmlNodeGetContent()</li>
+ <li>Bjorn fixed XPath node collection and Number formatting</li>
+ <li>Fixed a loop reported in the HTML parsing</li>
+ <li>blank space are reported even if the Dtd content model proves that they
+ are formatting spaces, this is for XML conformance</li>
+</ul>
+
+<h3>2.3.3: Mar 1 2001</h3>
+<ul>
+ <li>small change in XPath for XSLT</li>
+ <li>documentation cleanups</li>
+ <li>fix in validation by Gary Pennington</li>
+ <li>serious parsing performances improvements</li>
+</ul>
+
+<h3>2.3.2: Feb 24 2001</h3>
+<ul>
+ <li>chasing XPath bugs, found a bunch, completed some TODO</li>
+ <li>fixed a Dtd parsing bug</li>
+ <li>fixed a bug in xmlNodeGetContent</li>
+ <li>ID/IDREF support partly rewritten by Gary Pennington</li>
+</ul>
+
+<h3>2.3.1: Feb 15 2001</h3>
+<ul>
+ <li>some XPath and HTML bug fixes for XSLT</li>
+ <li>small extension of the hash table interfaces for DOM gdome2
+ implementation</li>
+ <li>A few bug fixes</li>
+</ul>
+
+<h3>2.3.0: Feb 8 2001 (2.2.12 was on 25 Jan but I didn't kept track)</h3>
+<ul>
+ <li>Lots of XPath bug fixes</li>
+ <li>Add a mode with Dtd lookup but without validation error reporting for
+ XSLT</li>
+ <li>Add support for text node without escaping (XSLT)</li>
+ <li>bug fixes for xmlCheckFilename</li>
+ <li>validation code bug fixes from Gary Pennington</li>
+ <li>Patch from Paul D. Smith correcting URI path normalization</li>
+ <li>Patch to allow simultaneous install of libxml-devel and
+ libxml2-devel</li>
+ <li>the example Makefile is now fixed</li>
+ <li>added HTML to the RPM packages</li>
+ <li>tree copying bugfixes</li>
+ <li>updates to Windows makefiles</li>
+ <li>optimization patch from Bjorn Reese</li>
+</ul>
+
+<h3>2.2.11: Jan 4 2001</h3>
+<ul>
+ <li>bunch of bug fixes (memory I/O, xpath, ftp/http, ...)</li>
+ <li>added htmlHandleOmittedElem()</li>
+ <li>Applied Bjorn Reese's IPV6 first patch</li>
+ <li>Applied Paul D. Smith patches for validation of XInclude results</li>
+ <li>added XPointer xmlns() new scheme support</li>
+</ul>
+
+<h3>2.2.10: Nov 25 2000</h3>
+<ul>
+ <li>Fix the Windows problems of 2.2.8</li>
+ <li>integrate OpenVMS patches</li>
+ <li>better handling of some nasty HTML input</li>
+ <li>Improved the XPointer implementation</li>
+ <li>integrate a number of provided patches</li>
+</ul>
+
+<h3>2.2.9: Nov 25 2000</h3>
+<ul>
+ <li>erroneous release :-(</li>
+</ul>
+
+<h3>2.2.8: Nov 13 2000</h3>
+<ul>
+ <li>First version of <a href="http://www.w3.org/TR/xinclude">XInclude</a>
+ support</li>
+ <li>Patch in conditional section handling</li>
+ <li>updated MS compiler project</li>
+ <li>fixed some XPath problems</li>
+ <li>added an URI escaping function</li>
+ <li>some other bug fixes</li>
+</ul>
+
+<h3>2.2.7: Oct 31 2000</h3>
+<ul>
+ <li>added message redirection</li>
+ <li>XPath improvements (thanks TOM !)</li>
+ <li>xmlIOParseDTD() added</li>
+ <li>various small fixes in the HTML, URI, HTTP and XPointer support</li>
+ <li>some cleanup of the Makefile, autoconf and the distribution content</li>
+</ul>
+
+<h3>2.2.6: Oct 25 2000:</h3>
+<ul>
+ <li>Added an hash table module, migrated a number of internal structure to
+ those</li>
+ <li>Fixed a posteriori validation problems</li>
+ <li>HTTP module cleanups</li>
+ <li>HTML parser improvements (tag errors, script/style handling, attribute
+ normalization)</li>
+ <li>coalescing of adjacent text nodes</li>
+ <li>couple of XPath bug fixes, exported the internal API</li>
+</ul>
+
+<h3>2.2.5: Oct 15 2000:</h3>
+<ul>
+ <li>XPointer implementation and testsuite</li>
+ <li>Lot of XPath fixes, added variable and functions registration, more
+ tests</li>
+ <li>Portability fixes, lots of enhancements toward an easy Windows build
+ and release</li>
+ <li>Late validation fixes</li>
+ <li>Integrated a lot of contributed patches</li>
+ <li>added memory management docs</li>
+ <li>a performance problem when using large buffer seems fixed</li>
+</ul>
+
+<h3>2.2.4: Oct 1 2000:</h3>
+<ul>
+ <li>main XPath problem fixed</li>
+ <li>Integrated portability patches for Windows</li>
+ <li>Serious bug fixes on the URI and HTML code</li>
+</ul>
+
+<h3>2.2.3: Sep 17 2000</h3>
+<ul>
+ <li>bug fixes</li>
+ <li>cleanup of entity handling code</li>
+ <li>overall review of all loops in the parsers, all sprintf usage has been
+ checked too</li>
+ <li>Far better handling of larges Dtd. Validating against DocBook XML Dtd
+ works smoothly now.</li>
+</ul>
+
+<h3>1.8.10: Sep 6 2000</h3>
+<ul>
+ <li>bug fix release for some Gnome projects</li>
+</ul>
+
+<h3>2.2.2: August 12 2000</h3>
+<ul>
+ <li>mostly bug fixes</li>
+ <li>started adding routines to access xml parser context options</li>
+</ul>
+
+<h3>2.2.1: July 21 2000</h3>
+<ul>
+ <li>a purely bug fixes release</li>
+ <li>fixed an encoding support problem when parsing from a memory block</li>
+ <li>fixed a DOCTYPE parsing problem</li>
+ <li>removed a bug in the function allowing to override the memory
+ allocation routines</li>
+</ul>
+
+<h3>2.2.0: July 14 2000</h3>
+<ul>
+ <li>applied a lot of portability fixes</li>
+ <li>better encoding support/cleanup and saving (content is now always
+ encoded in UTF-8)</li>
+ <li>the HTML parser now correctly handles encodings</li>
+ <li>added xmlHasProp()</li>
+ <li>fixed a serious problem with &amp;#38;</li>
+ <li>propagated the fix to FTP client</li>
+ <li>cleanup, bugfixes, etc ...</li>
+ <li>Added a page about <a href="encoding.html">libxml Internationalization
+ support</a></li>
+</ul>
+
+<h3>1.8.9: July 9 2000</h3>
+<ul>
+ <li>fixed the spec the RPMs should be better</li>
+ <li>fixed a serious bug in the FTP implementation, released 1.8.9 to solve
+ rpmfind users problem</li>
+</ul>
+
+<h3>2.1.1: July 1 2000</h3>
+<ul>
+ <li>fixes a couple of bugs in the 2.1.0 packaging</li>
+ <li>improvements on the HTML parser</li>
+</ul>
+
+<h3>2.1.0 and 1.8.8: June 29 2000</h3>
+<ul>
+ <li>1.8.8 is mostly a commodity package for upgrading to libxml2 according
+ to <a href="upgrade.html">new instructions</a>. It fixes a nasty problem
+ about &amp;#38; charref parsing</li>
+ <li>2.1.0 also ease the upgrade from libxml v1 to the recent version. it
+ also contains numerous fixes and enhancements:
+ <ul>
+ <li>added xmlStopParser() to stop parsing</li>
+ <li>improved a lot parsing speed when there is large CDATA blocs</li>
+ <li>includes XPath patches provided by Picdar Technology</li>
+ <li>tried to fix as much as possible DTD validation and namespace
+ related problems</li>
+ <li>output to a given encoding has been added/tested</li>
+ <li>lot of various fixes</li>
+ </ul>
+ </li>
+</ul>
+
+<h3>2.0.0: Apr 12 2000</h3>
+<ul>
+ <li>First public release of libxml2. If you are using libxml, it's a good
+ idea to check the 1.x to 2.x upgrade instructions. NOTE: while initially
+ scheduled for Apr 3 the release occurred only on Apr 12 due to massive
+ workload.</li>
+ <li>The include are now located under $prefix/include/libxml (instead of
+ $prefix/include/gnome-xml), they also are referenced by
+ <pre>#include &lt;libxml/xxx.h&gt;</pre>
+ <p>instead of</p>
+ <pre>#include "xxx.h"</pre>
+ </li>
+ <li>a new URI module for parsing URIs and following strictly RFC 2396</li>
+ <li>the memory allocation routines used by libxml can now be overloaded
+ dynamically by using xmlMemSetup()</li>
+ <li>The previously CVS only tool tester has been renamed
+ <strong>xmllint</strong> and is now installed as part of the libxml2
+ package</li>
+ <li>The I/O interface has been revamped. There is now ways to plug in
+ specific I/O modules, either at the URI scheme detection level using
+ xmlRegisterInputCallbacks() or by passing I/O functions when creating a
+ parser context using xmlCreateIOParserCtxt()</li>
+ <li>there is a C preprocessor macro LIBXML_VERSION providing the version
+ number of the libxml module in use</li>
+ <li>a number of optional features of libxml can now be excluded at
+ configure time (FTP/HTTP/HTML/XPath/Debug)</li>
+</ul>
+
+<h3>2.0.0beta: Mar 14 2000</h3>
+<ul>
+ <li>This is a first Beta release of libxml version 2</li>
+ <li>It's available only from<a href="ftp://xmlsoft.org/">xmlsoft.org
+ FTP</a>, it's packaged as libxml2-2.0.0beta and available as tar and
+ RPMs</li>
+ <li>This version is now the head in the Gnome CVS base, the old one is
+ available under the tag LIB_XML_1_X</li>
+ <li>This includes a very large set of changes. From a programmatic point
+ of view applications should not have to be modified too much, check the
+ <a href="upgrade.html">upgrade page</a></li>
+ <li>Some interfaces may changes (especially a bit about encoding).</li>
+ <li>the updates includes:
+ <ul>
+ <li>fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
+ handled now</li>
+ <li>Better handling of entities, especially well-formedness checking
+ and proper PEref extensions in external subsets</li>
+ <li>DTD conditional sections</li>
+ <li>Validation now correctly handle entities content</li>
+ <li><a href="http://rpmfind.net/tools/gdome/messages/0039.html">change
+ structures to accommodate DOM</a></li>
+ </ul>
+ </li>
+ <li>Serious progress were made toward compliance, <a
+ href="conf/result.html">here are the result of the test</a> against the
+ OASIS testsuite (except the Japanese tests since I don't support that
+ encoding yet). This URL is rebuilt every couple of hours using the CVS
+ head version.</li>
+</ul>
+
+<h3>1.8.7: Mar 6 2000</h3>
+<ul>
+ <li>This is a bug fix release:</li>
+ <li>It is possible to disable the ignorable blanks heuristic used by
+ libxml-1.x, a new function xmlKeepBlanksDefault(0) will allow this. Note
+ that for adherence to XML spec, this behaviour will be disabled by
+ default in 2.x . The same function will allow to keep compatibility for
+ old code.</li>
+ <li>Blanks in &lt;a&gt; &lt;/a&gt; constructs are not ignored anymore,
+ avoiding heuristic is really the Right Way :-\</li>
+ <li>The unchecked use of snprintf which was breaking libxml-1.8.6
+ compilation on some platforms has been fixed</li>
+ <li>nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when processing
+ URIs</li>
+</ul>
+
+<h3>1.8.6: Jan 31 2000</h3>
+<ul>
+ <li>added a nanoFTP transport module, debugged until the new version of <a
+ href="http://rpmfind.net/linux/rpm2html/rpmfind.html">rpmfind</a> can use
+ it without troubles</li>
+</ul>
+
+<h3>1.8.5: Jan 21 2000</h3>
+<ul>
+ <li>adding APIs to parse a well balanced chunk of XML (production <a
+ href="http://www.w3.org/TR/REC-xml#NT-content">[43] content</a> of the
+ XML spec)</li>
+ <li>fixed a hideous bug in xmlGetProp pointed by Rune.Djurhuus@fast.no</li>
+ <li>Jody Goldberg &lt;jgoldberg@home.com&gt; provided another patch trying
+ to solve the zlib checks problems</li>
+ <li>The current state in gnome CVS base is expected to ship as 1.8.5 with
+ gnumeric soon</li>
+</ul>
+
+<h3>1.8.4: Jan 13 2000</h3>
+<ul>
+ <li>bug fixes, reintroduced xmlNewGlobalNs(), fixed xmlNewNs()</li>
+ <li>all exit() call should have been removed from libxml</li>
+ <li>fixed a problem with INCLUDE_WINSOCK on WIN32 platform</li>
+ <li>added newDocFragment()</li>
+</ul>
+
+<h3>1.8.3: Jan 5 2000</h3>
+<ul>
+ <li>a Push interface for the XML and HTML parsers</li>
+ <li>a shell-like interface to the document tree (try tester --shell :-)</li>
+ <li>lots of bug fixes and improvement added over XMas holidays</li>
+ <li>fixed the DTD parsing code to work with the xhtml DTD</li>
+ <li>added xmlRemoveProp(), xmlRemoveID() and xmlRemoveRef()</li>
+ <li>Fixed bugs in xmlNewNs()</li>
+ <li>External entity loading code has been revamped, now it uses
+ xmlLoadExternalEntity(), some fix on entities processing were added</li>
+ <li>cleaned up WIN32 includes of socket stuff</li>
+</ul>
+
+<h3>1.8.2: Dec 21 1999</h3>
+<ul>
+ <li>I got another problem with includes and C++, I hope this issue is fixed
+ for good this time</li>
+ <li>Added a few tree modification functions: xmlReplaceNode,
+ xmlAddPrevSibling, xmlAddNextSibling, xmlNodeSetName and
+ xmlDocSetRootElement</li>
+ <li>Tried to improve the HTML output with help from <a
+ href="mailto:clahey@umich.edu">Chris Lahey</a></li>
+</ul>
+
+<h3>1.8.1: Dec 18 1999</h3>
+<ul>
+ <li>various patches to avoid troubles when using libxml with C++ compilers
+ the "namespace" keyword and C escaping in include files</li>
+ <li>a problem in one of the core macros IS_CHAR was corrected</li>
+ <li>fixed a bug introduced in 1.8.0 breaking default namespace processing,
+ and more specifically the Dia application</li>
+ <li>fixed a posteriori validation (validation after parsing, or by using a
+ Dtd not specified in the original document)</li>
+ <li>fixed a bug in</li>
+</ul>
+
+<h3>1.8.0: Dec 12 1999</h3>
+<ul>
+ <li>cleanup, especially memory wise</li>
+ <li>the parser should be more reliable, especially the HTML one, it should
+ not crash, whatever the input !</li>
+ <li>Integrated various patches, especially a speedup improvement for large
+ dataset from <a href="mailto:cnygard@bellatlantic.net">Carl Nygard</a>,
+ configure with --with-buffers to enable them.</li>
+ <li>attribute normalization, oops should have been added long ago !</li>
+ <li>attributes defaulted from DTDs should be available, xmlSetProp() now
+ does entities escaping by default.</li>
+</ul>
+
+<h3>1.7.4: Oct 25 1999</h3>
+<ul>
+ <li>Lots of HTML improvement</li>
+ <li>Fixed some errors when saving both XML and HTML</li>
+ <li>More examples, the regression tests should now look clean</li>
+ <li>Fixed a bug with contiguous charref</li>
+</ul>
+
+<h3>1.7.3: Sep 29 1999</h3>
+<ul>
+ <li>portability problems fixed</li>
+ <li>snprintf was used unconditionally, leading to link problems on system
+ were it's not available, fixed</li>
+</ul>
+
+<h3>1.7.1: Sep 24 1999</h3>
+<ul>
+ <li>The basic type for strings manipulated by libxml has been renamed in
+ 1.7.1 from <strong>CHAR</strong> to <strong>xmlChar</strong>. The reason
+ is that CHAR was conflicting with a predefined type on Windows. However
+ on non WIN32 environment, compatibility is provided by the way of a
+ <strong>#define </strong>.</li>
+ <li>Changed another error : the use of a structure field called errno, and
+ leading to troubles on platforms where it's a macro</li>
+</ul>
+
+<h3>1.7.0: Sep 23 1999</h3>
+<ul>
+ <li>Added the ability to fetch remote DTD or parsed entities, see the <a
+ href="html/libxml-nanohttp.html">nanohttp</a> module.</li>
+ <li>Added an errno to report errors by another mean than a simple printf
+ like callback</li>
+ <li>Finished ID/IDREF support and checking when validation</li>
+ <li>Serious memory leaks fixed (there is now a <a
+ href="html/libxml-xmlmemory.html">memory wrapper</a> module)</li>
+ <li>Improvement of <a href="http://www.w3.org/TR/xpath">XPath</a>
+ implementation</li>
+ <li>Added an HTML parser front-end</li>
+</ul>
+
+<h2><a name="XML">XML</a></h2>
+
+<p><a href="http://www.w3.org/TR/REC-xml">XML is a standard</a> for
+markup-based structured documents. Here is <a name="example">an example XML
+document</a>:</p>
+<pre>&lt;?xml version="1.0"?&gt;
+&lt;EXAMPLE prop1="gnome is great" prop2="&amp;amp; linux too"&gt;
+ &lt;head&gt;
+ &lt;title&gt;Welcome to Gnome&lt;/title&gt;
+ &lt;/head&gt;
+ &lt;chapter&gt;
+ &lt;title&gt;The Linux adventure&lt;/title&gt;
+ &lt;p&gt;bla bla bla ...&lt;/p&gt;
+ &lt;image href="linus.gif"/&gt;
+ &lt;p&gt;...&lt;/p&gt;
+ &lt;/chapter&gt;
+&lt;/EXAMPLE&gt;</pre>
+
+<p>The first line specifies that it is an XML document and gives useful
+information about its encoding. Then the rest of the document is a text
+format whose structure is specified by tags between brackets. <strong>Each
+tag opened has to be closed</strong>. XML is pedantic about this. However, if
+a tag is empty (no content), a single tag can serve as both the opening and
+closing tag if it ends with <code>/&gt;</code> rather than with
+<code>&gt;</code>. Note that, for example, the image tag has no content (just
+an attribute) and is closed by ending the tag with <code>/&gt;</code>.</p>
+
+<p>XML can be applied successfully to a wide range of tasks, ranging from
+long term structured document maintenance (where it follows the steps of
+SGML) to simple data encoding mechanisms like configuration file formatting
+(glade), spreadsheets (gnumeric), or even shorter lived documents such as
+WebDAV where it is used to encode remote calls between a client and a
+server.</p>
+
+<h2><a name="XSLT">XSLT</a></h2>
+
+<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">Changelog</a>.</p>
+
+<h2><a name="Python">Python and bindings</a></h2>
+
+<p>There are a number of language bindings and wrappers available for
+libxml2, the list below is not exhaustive. Please contact the <a
+href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
+(<a href="http://mail.gnome.org/archives/xml-bindings/">archives</a>) in
+order to get updates to this list or to discuss the specific topic of libxml2
+or libxslt wrappers or bindings:</p>
+<ul>
+ <li><a href="http://libxmlplusplus.sourceforge.net/">Libxml++</a> seems the
+ most up-to-date C++ bindings for libxml2, check the <a
+ href="http://libxmlplusplus.sourceforge.net/reference/html/hierarchy.html">documentation</a>
+ and the <a
+ href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/libxmlplusplus/libxml%2b%2b/examples/">examples</a>.</li>
+ <li>There is another <a href="http://libgdome-cpp.berlios.de/">C++ wrapper
+ based on the gdome2 bindings</a> maintained by Tobias Peters.</li>
+ <li>and a third C++ wrapper by Peter Jones &lt;pjones@pmade.org&gt;
+ <p>Website: <a
+ href="http://pmade.org/pjones/software/xmlwrapp/">http://pmade.org/pjones/software/xmlwrapp/</a></p>
+ </li>
+ <li><a
+ href="http://mail.gnome.org/archives/xml/2001-March/msg00014.html">Matt
+ Sergeant</a> developed <a
+ href="http://axkit.org/download/">XML::LibXSLT</a>, a Perl wrapper for
+ libxml2/libxslt as part of the <a href="http://axkit.com/">AxKit XML
+ application server</a>.</li>
+ <li>If you're interested into scripting XML processing, have a look at <a
+ href="http://xsh.sourceforge.net/">XSH</a> an XML editing shell based on
+ Libxml2 Perl bindings.</li>
+ <li><a href="mailto:dkuhlman@cutter.rexx.com">Dave Kuhlman</a> provides an
+ earlier version of the libxml/libxslt <a
+ href="http://www.rexx.com/~dkuhlman">wrappers for Python</a>.</li>
+ <li>Gopal.V and Peter Minten develop <a
+ href="http://savannah.gnu.org/projects/libxmlsharp">libxml#</a>, a set of
+ C# libxml2 bindings.</li>
+ <li>Petr Kozelka provides <a
+ href="http://sourceforge.net/projects/libxml2-pas">Pascal units to glue
+ libxml2</a> with Kylix, Delphi and other Pascal compilers.</li>
+ <li>Uwe Fechner also provides <a
+ href="http://sourceforge.net/projects/idom2-pas/">idom2</a>, a DOM2
+ implementation for Kylix2/D5/D6 from Borland.</li>
+ <li>Wai-Sun "Squidster" Chia provides <a
+ href="http://www.rubycolor.org/arc/redist/">bindings for Ruby</a> and
+ libxml2 bindings are also available in Ruby through the <a
+ href="http://libgdome-ruby.berlios.de/">libgdome-ruby</a> module
+ maintained by Tobias Peters.</li>
+ <li>Steve Ball and contributors maintains <a
+ href="http://tclxml.sourceforge.net/">libxml2 and libxslt bindings for
+ Tcl</a>.</li>
+ <li>There is support for libxml2 in the DOM module of PHP.</li>
+ <li><a href="http://savannah.gnu.org/projects/classpathx/">LibxmlJ</a> is
+ an effort to create a 100% JAXP-compatible Java wrapper for libxml2 and
+ libxslt as part of GNU ClasspathX project.</li>
+ <li>Patrick McPhee provides Rexx bindings fof libxml2 and libxslt, look for
+ <a href="http://www.interlog.com/~ptjm/software.html">RexxXML</a>.</li>
+</ul>
+
+<p>The distribution includes a set of Python bindings, which are guaranteed
+to be maintained as part of the library in the future, though the Python
+interface have not yet reached the completeness of the C API.</p>
+
+<p><a href="mailto:stephane.bidoul@softwareag.com">Stéphane Bidoul</a>
+maintains <a href="http://users.skynet.be/sbi/libxml-python/">a Windows port
+of the Python bindings</a>.</p>
+
+<p>Note to people interested in building bindings, the API is formalized as
+<a href="libxml2-api.xml">an XML API description file</a> which allows to
+automate a large part of the Python bindings, this includes function
+descriptions, enums, structures, typedefs, etc... The Python script used to
+build the bindings is python/generator.py in the source distribution.</p>
+
+<p>To install the Python bindings there are 2 options:</p>
+<ul>
+ <li>If you use an RPM based distribution, simply install the <a
+ href="http://rpmfind.net/linux/rpm2html/search.php?query=libxml2-python">libxml2-python
+ RPM</a> (and if needed the <a
+ href="http://rpmfind.net/linux/rpm2html/search.php?query=libxslt-python">libxslt-python
+ RPM</a>).</li>
+ <li>Otherwise use the <a href="ftp://xmlsoft.org/python/">libxml2-python
+ module distribution</a> corresponding to your installed version of
+ libxml2 and libxslt. Note that to install it you will need both libxml2
+ and libxslt installed and run "python setup.py build install" in the
+ module tree.</li>
+</ul>
+
+<p>The distribution includes a set of examples and regression tests for the
+python bindings in the <code>python/tests</code> directory. Here are some
+excerpts from those tests:</p>
+
+<h3>tst.py:</h3>
+
+<p>This is a basic test of the file interface and DOM navigation:</p>
+<pre>import libxml2, sys
+
+doc = libxml2.parseFile("tst.xml")
+if doc.name != "tst.xml":
+ print "doc.name failed"
+ sys.exit(1)
+root = doc.children
+if root.name != "doc":
+ print "root.name failed"
+ sys.exit(1)
+child = root.children
+if child.name != "foo":
+ print "child.name failed"
+ sys.exit(1)
+doc.freeDoc()</pre>
+
+<p>The Python module is called libxml2; parseFile is the equivalent of
+xmlParseFile (most of the bindings are automatically generated, and the xml
+prefix is removed and the casing convention are kept). All node seen at the
+binding level share the same subset of accessors:</p>
+<ul>
+ <li><code>name</code> : returns the node name</li>
+ <li><code>type</code> : returns a string indicating the node type</li>
+ <li><code>content</code> : returns the content of the node, it is based on
+ xmlNodeGetContent() and hence is recursive.</li>
+ <li><code>parent</code> , <code>children</code>, <code>last</code>,
+ <code>next</code>, <code>prev</code>, <code>doc</code>,
+ <code>properties</code>: pointing to the associated element in the tree,
+ those may return None in case no such link exists.</li>
+</ul>
+
+<p>Also note the need to explicitly deallocate documents with freeDoc() .
+Reference counting for libxml2 trees would need quite a lot of work to
+function properly, and rather than risk memory leaks if not implemented
+correctly it sounds safer to have an explicit function to free a tree. The
+wrapper python objects like doc, root or child are them automatically garbage
+collected.</p>
+
+<h3>validate.py:</h3>
+
+<p>This test check the validation interfaces and redirection of error
+messages:</p>
+<pre>import libxml2
+
+#deactivate error messages from the validation
+def noerr(ctx, str):
+ pass
+
+libxml2.registerErrorHandler(noerr, None)
+
+ctxt = libxml2.createFileParserCtxt("invalid.xml")
+ctxt.validate(1)
+ctxt.parseDocument()
+doc = ctxt.doc()
+valid = ctxt.isValid()
+doc.freeDoc()
+if valid != 0:
+ print "validity check failed"</pre>
+
+<p>The first thing to notice is the call to registerErrorHandler(), it
+defines a new error handler global to the library. It is used to avoid seeing
+the error messages when trying to validate the invalid document.</p>
+
+<p>The main interest of that test is the creation of a parser context with
+createFileParserCtxt() and how the behaviour can be changed before calling
+parseDocument() . Similarly the informations resulting from the parsing phase
+are also available using context methods.</p>
+
+<p>Contexts like nodes are defined as class and the libxml2 wrappers maps the
+C function interfaces in terms of objects method as much as possible. The
+best to get a complete view of what methods are supported is to look at the
+libxml2.py module containing all the wrappers.</p>
+
+<h3>push.py:</h3>
+
+<p>This test show how to activate the push parser interface:</p>
+<pre>import libxml2
+
+ctxt = libxml2.createPushParser(None, "&lt;foo", 4, "test.xml")
+ctxt.parseChunk("/&gt;", 2, 1)
+doc = ctxt.doc()
+
+doc.freeDoc()</pre>
+
+<p>The context is created with a special call based on the
+xmlCreatePushParser() from the C library. The first argument is an optional
+SAX callback object, then the initial set of data, the length and the name of
+the resource in case URI-References need to be computed by the parser.</p>
+
+<p>Then the data are pushed using the parseChunk() method, the last call
+setting the third argument terminate to 1.</p>
+
+<h3>pushSAX.py:</h3>
+
+<p>this test show the use of the event based parsing interfaces. In this case
+the parser does not build a document, but provides callback information as
+the parser makes progresses analyzing the data being provided:</p>
+<pre>import libxml2
+log = ""
+
+class callback:
+ def startDocument(self):
+ global log
+ log = log + "startDocument:"
+
+ def endDocument(self):
+ global log
+ log = log + "endDocument:"
+
+ def startElement(self, tag, attrs):
+ global log
+ log = log + "startElement %s %s:" % (tag, attrs)
+
+ def endElement(self, tag):
+ global log
+ log = log + "endElement %s:" % (tag)
+
+ def characters(self, data):
+ global log
+ log = log + "characters: %s:" % (data)
+
+ def warning(self, msg):
+ global log
+ log = log + "warning: %s:" % (msg)
+
+ def error(self, msg):
+ global log
+ log = log + "error: %s:" % (msg)
+
+ def fatalError(self, msg):
+ global log
+ log = log + "fatalError: %s:" % (msg)
+
+handler = callback()
+
+ctxt = libxml2.createPushParser(handler, "&lt;foo", 4, "test.xml")
+chunk = " url='tst'&gt;b"
+ctxt.parseChunk(chunk, len(chunk), 0)
+chunk = "ar&lt;/foo&gt;"
+ctxt.parseChunk(chunk, len(chunk), 1)
+
+reference = "startDocument:startElement foo {'url': 'tst'}:" + \
+ "characters: bar:endElement foo:endDocument:"
+if log != reference:
+ print "Error got: %s" % log
+ print "Expected: %s" % reference</pre>
+
+<p>The key object in that test is the handler, it provides a number of entry
+points which can be called by the parser as it makes progresses to indicate
+the information set obtained. The full set of callback is larger than what
+the callback class in that specific example implements (see the SAX
+definition for a complete list). The wrapper will only call those supplied by
+the object when activated. The startElement receives the names of the element
+and a dictionary containing the attributes carried by this element.</p>
+
+<p>Also note that the reference string generated from the callback shows a
+single character call even though the string "bar" is passed to the parser
+from 2 different call to parseChunk()</p>
+
+<h3>xpath.py:</h3>
+
+<p>This is a basic test of XPath wrappers support</p>
+<pre>import libxml2
+
+doc = libxml2.parseFile("tst.xml")
+ctxt = doc.xpathNewContext()
+res = ctxt.xpathEval("//*")
+if len(res) != 2:
+ print "xpath query: wrong node set size"
+ sys.exit(1)
+if res[0].name != "doc" or res[1].name != "foo":
+ print "xpath query: wrong node set value"
+ sys.exit(1)
+doc.freeDoc()
+ctxt.xpathFreeContext()</pre>
+
+<p>This test parses a file, then create an XPath context to evaluate XPath
+expression on it. The xpathEval() method execute an XPath query and returns
+the result mapped in a Python way. String and numbers are natively converted,
+and node sets are returned as a tuple of libxml2 Python nodes wrappers. Like
+the document, the XPath context need to be freed explicitly, also not that
+the result of the XPath query may point back to the document tree and hence
+the document must be freed after the result of the query is used.</p>
+
+<h3>xpathext.py:</h3>
+
+<p>This test shows how to extend the XPath engine with functions written in
+python:</p>
+<pre>import libxml2
+
+def foo(ctx, x):
+ return x + 1
+
+doc = libxml2.parseFile("tst.xml")
+ctxt = doc.xpathNewContext()
+libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
+res = ctxt.xpathEval("foo(1)")
+if res != 2:
+ print "xpath extension failure"
+doc.freeDoc()
+ctxt.xpathFreeContext()</pre>
+
+<p>Note how the extension function is registered with the context (but that
+part is not yet finalized, this may change slightly in the future).</p>
+
+<h3>tstxpath.py:</h3>
+
+<p>This test is similar to the previous one but shows how the extension
+function can access the XPath evaluation context:</p>
+<pre>def foo(ctx, x):
+ global called
+
+ #
+ # test that access to the XPath evaluation contexts
+ #
+ pctxt = libxml2.xpathParserContext(_obj=ctx)
+ ctxt = pctxt.context()
+ called = ctxt.function()
+ return x + 1</pre>
+
+<p>All the interfaces around the XPath parser(or rather evaluation) context
+are not finalized, but it should be sufficient to do contextual work at the
+evaluation point.</p>
+
+<h3>Memory debugging:</h3>
+
+<p>last but not least, all tests starts with the following prologue:</p>
+<pre>#memory debug specific
+libxml2.debugMemory(1)</pre>
+
+<p>and ends with the following epilogue:</p>
+<pre>#memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()</pre>
+
+<p>Those activate the memory debugging interface of libxml2 where all
+allocated block in the library are tracked. The prologue then cleans up the
+library state and checks that all allocated memory has been freed. If not it
+calls dumpMemory() which saves that list in a <code>.memdump</code> file.</p>
+
+<h2><a name="architecture">libxml2 architecture</a></h2>
+
+<p>Libxml2 is made of multiple components; some of them are optional, and
+most of the block interfaces are public. The main components are:</p>
+<ul>
+ <li>an Input/Output layer</li>
+ <li>FTP and HTTP client layers (optional)</li>
+ <li>an Internationalization layer managing the encodings support</li>
+ <li>a URI module</li>
+ <li>the XML parser and its basic SAX interface</li>
+ <li>an HTML parser using the same SAX interface (optional)</li>
+ <li>a SAX tree module to build an in-memory DOM representation</li>
+ <li>a tree module to manipulate the DOM representation</li>
+ <li>a validation module using the DOM representation (optional)</li>
+ <li>an XPath module for global lookup in a DOM representation
+ (optional)</li>
+ <li>a debug module (optional)</li>
+</ul>
+
+<p>Graphically this gives the following:</p>
+
+<p><img src="libxml.gif" alt="a graphical view of the various"></p>
+
+<p></p>
+
+<h2><a name="tree">The tree output</a></h2>
+
+<p>The parser returns a tree built during the document analysis. The value
+returned is an <strong>xmlDocPtr</strong> (i.e., a pointer to an
+<strong>xmlDoc</strong> structure). This structure contains information such
+as the file name, the document type, and a <strong>children</strong> pointer
+which is the root of the document (or more exactly the first child under the
+root which is the document). The tree is made of <strong>xmlNode</strong>s,
+chained in double-linked lists of siblings and with a children&lt;-&gt;parent
+relationship. An xmlNode can also carry properties (a chain of xmlAttr
+structures). An attribute may have a value which is a list of TEXT or
+ENTITY_REF nodes.</p>
+
+<p>Here is an example (erroneous with respect to the XML spec since there
+should be only one ELEMENT under the root):</p>
+
+<p><img src="structure.gif" alt=" structure.gif "></p>
+
+<p>In the source package there is a small program (not installed by default)
+called <strong>xmllint</strong> which parses XML files given as argument and
+prints them back as parsed. This is useful for detecting errors both in XML
+code and in the XML parser itself. It has an option <strong>--debug</strong>
+which prints the actual in-memory structure of the document; here is the
+result with the <a href="#example">example</a> given before:</p>
+<pre>DOCUMENT
+version=1.0
+standalone=true
+ ELEMENT EXAMPLE
+ ATTRIBUTE prop1
+ TEXT
+ content=gnome is great
+ ATTRIBUTE prop2
+ ENTITY_REF
+ TEXT
+ content= linux too
+ ELEMENT head
+ ELEMENT title
+ TEXT
+ content=Welcome to Gnome
+ ELEMENT chapter
+ ELEMENT title
+ TEXT
+ content=The Linux adventure
+ ELEMENT p
+ TEXT
+ content=bla bla bla ...
+ ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+ ELEMENT p
+ TEXT
+ content=...</pre>
+
+<p>This should be useful for learning the internal representation model.</p>
+
+<h2><a name="interface">The SAX interface</a></h2>
+
+<p>Sometimes the DOM tree output is just too large to fit reasonably into
+memory. In that case (and if you don't expect to save back the XML document
+loaded using libxml), it's better to use the SAX interface of libxml. SAX is
+a <strong>callback-based interface</strong> to the parser. Before parsing,
+the application layer registers a customized set of callbacks which are
+called by the library as it progresses through the XML input.</p>
+
+<p>To get more detailed step-by-step guidance on using the SAX interface of
+libxml, see the <a
+href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">nice
+documentation</a>.written by <a href="mailto:james@daa.com.au">James
+Henstridge</a>.</p>
+
+<p>You can debug the SAX behaviour by using the <strong>testSAX</strong>
+program located in the gnome-xml module (it's usually not shipped in the
+binary packages of libxml, but you can find it in the tar source
+distribution). Here is the sequence of callbacks that would be reported by
+testSAX when parsing the example XML document shown earlier:</p>
+<pre>SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.getEntity(amp)
+SAX.startElement(EXAMPLE, prop1='gnome is great', prop2='&amp;amp; linux too')
+SAX.characters( , 3)
+SAX.startElement(head)
+SAX.characters( , 4)
+SAX.startElement(title)
+SAX.characters(Welcome to Gnome, 16)
+SAX.endElement(title)
+SAX.characters( , 3)
+SAX.endElement(head)
+SAX.characters( , 3)
+SAX.startElement(chapter)
+SAX.characters( , 4)
+SAX.startElement(title)
+SAX.characters(The Linux adventure, 19)
+SAX.endElement(title)
+SAX.characters( , 4)
+SAX.startElement(p)
+SAX.characters(bla bla bla ..., 15)
+SAX.endElement(p)
+SAX.characters( , 4)
+SAX.startElement(image, href='linus.gif')
+SAX.endElement(image)
+SAX.characters( , 4)
+SAX.startElement(p)
+SAX.characters(..., 3)
+SAX.endElement(p)
+SAX.characters( , 3)
+SAX.endElement(chapter)
+SAX.characters( , 1)
+SAX.endElement(EXAMPLE)
+SAX.endDocument()</pre>
+
+<p>Most of the other interfaces of libxml2 are based on the DOM tree-building
+facility, so nearly everything up to the end of this document presupposes the
+use of the standard DOM tree build. Note that the DOM tree itself is built by
+a set of registered default callbacks, without internal specific
+interface.</p>
+
+<h2><a name="Validation">Validation &amp; DTDs</a></h2>
+
+<p>Table of Content:</p>
+<ol>
+ <li><a href="#General5">General overview</a></li>
+ <li><a href="#definition">The definition</a></li>
+ <li><a href="#Simple">Simple rules</a>
+ <ol>
+ <li><a href="#reference">How to reference a DTD from a document</a></li>
+ <li><a href="#Declaring">Declaring elements</a></li>
+ <li><a href="#Declaring1">Declaring attributes</a></li>
+ </ol>
+ </li>
+ <li><a href="#Some">Some examples</a></li>
+ <li><a href="#validate">How to validate</a></li>
+ <li><a href="#Other">Other resources</a></li>
+</ol>
+
+<h3><a name="General5">General overview</a></h3>
+
+<p>Well what is validation and what is a DTD ?</p>
+
+<p>DTD is the acronym for Document Type Definition. This is a description of
+the content for a family of XML files. This is part of the XML 1.0
+specification, and allows one to describe and verify that a given document
+instance conforms to the set of rules detailing its structure and content.</p>
+
+<p>Validation is the process of checking a document against a DTD (more
+generally against a set of construction rules).</p>
+
+<p>The validation process and building DTDs are the two most difficult parts
+of the XML life cycle. Briefly a DTD defines all the possible elements to be
+found within your document, what is the formal shape of your document tree
+(by defining the allowed content of an element; either text, a regular
+expression for the allowed list of children, or mixed content i.e. both text
+and children). The DTD also defines the valid attributes for all elements and
+the types of those attributes.</p>
+
+<h3><a name="definition1">The definition</a></h3>
+
+<p>The <a href="http://www.w3.org/TR/REC-xml">W3C XML Recommendation</a> (<a
+href="http://www.xml.com/axml/axml.html">Tim Bray's annotated version of
+Rev1</a>):</p>
+<ul>
+ <li><a href="http://www.w3.org/TR/REC-xml#elemdecls">Declaring
+ elements</a></li>
+ <li><a href="http://www.w3.org/TR/REC-xml#attdecls">Declaring
+ attributes</a></li>
+</ul>
+
+<p>(unfortunately) all this is inherited from the SGML world, the syntax is
+ancient...</p>
+
+<h3><a name="Simple1">Simple rules</a></h3>
+
+<p>Writing DTDs can be done in many ways. The rules to build them if you need
+something permanent or something which can evolve over time can be radically
+different. Really complex DTDs like DocBook ones are flexible but quite
+harder to design. I will just focus on DTDs for a formats with a fixed simple
+structure. It is just a set of basic rules, and definitely not exhaustive nor
+usable for complex DTD design.</p>
+
+<h4><a name="reference1">How to reference a DTD from a document</a>:</h4>
+
+<p>Assuming the top element of the document is <code>spec</code> and the dtd
+is placed in the file <code>mydtd</code> in the subdirectory
+<code>dtds</code> of the directory from where the document were loaded:</p>
+
+<p><code>&lt;!DOCTYPE spec SYSTEM "dtds/mydtd"&gt;</code></p>
+
+<p>Notes:</p>
+<ul>
+ <li>The system string is actually an URI-Reference (as defined in <a
+ href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>) so you can use a
+ full URL string indicating the location of your DTD on the Web. This is a
+ really good thing to do if you want others to validate your document.</li>
+ <li>It is also possible to associate a <code>PUBLIC</code> identifier (a
+ magic string) so that the DTD is looked up in catalogs on the client side
+ without having to locate it on the web.</li>
+ <li>A DTD contains a set of element and attribute declarations, but they
+ don't define what the root of the document should be. This is explicitly
+ told to the parser/validator as the first element of the
+ <code>DOCTYPE</code> declaration.</li>
+</ul>
+
+<h4><a name="Declaring2">Declaring elements</a>:</h4>
+
+<p>The following declares an element <code>spec</code>:</p>
+
+<p><code>&lt;!ELEMENT spec (front, body, back?)&gt;</code></p>
+
+<p>It also expresses that the spec element contains one <code>front</code>,
+one <code>body</code> and one optional <code>back</code> children elements in
+this order. The declaration of one element of the structure and its content
+are done in a single declaration. Similarly the following declares
+<code>div1</code> elements:</p>
+
+<p><code>&lt;!ELEMENT div1 (head, (p | list | note)*, div2?)&gt;</code></p>
+
+<p>which means div1 contains one <code>head</code> then a series of optional
+<code>p</code>, <code>list</code>s and <code>note</code>s and then an
+optional <code>div2</code>. And last but not least an element can contain
+text:</p>
+
+<p><code>&lt;!ELEMENT b (#PCDATA)&gt;</code></p>
+
+<p><code>b</code> contains text or being of mixed content (text and elements
+in no particular order):</p>
+
+<p><code>&lt;!ELEMENT p (#PCDATA|a|ul|b|i|em)*&gt;</code></p>
+
+<p><code>p </code>can contain text or <code>a</code>, <code>ul</code>,
+<code>b</code>, <code>i </code>or <code>em</code> elements in no particular
+order.</p>
+
+<h4><a name="Declaring1">Declaring attributes</a>:</h4>
+
+<p>Again the attributes declaration includes their content definition:</p>
+
+<p><code>&lt;!ATTLIST termdef name CDATA #IMPLIED&gt;</code></p>
+
+<p>means that the element <code>termdef</code> can have a <code>name</code>
+attribute containing text (<code>CDATA</code>) and which is optional
+(<code>#IMPLIED</code>). The attribute value can also be defined within a
+set:</p>
+
+<p><code>&lt;!ATTLIST list type (bullets|ordered|glossary)
+"ordered"&gt;</code></p>
+
+<p>means <code>list</code> element have a <code>type</code> attribute with 3
+allowed values "bullets", "ordered" or "glossary" and which default to
+"ordered" if the attribute is not explicitly specified.</p>
+
+<p>The content type of an attribute can be text (<code>CDATA</code>),
+anchor/reference/references
+(<code>ID</code>/<code>IDREF</code>/<code>IDREFS</code>), entity(ies)
+(<code>ENTITY</code>/<code>ENTITIES</code>) or name(s)
+(<code>NMTOKEN</code>/<code>NMTOKENS</code>). The following defines that a
+<code>chapter</code> element can have an optional <code>id</code> attribute
+of type <code>ID</code>, usable for reference from attribute of type
+IDREF:</p>
+
+<p><code>&lt;!ATTLIST chapter id ID #IMPLIED&gt;</code></p>
+
+<p>The last value of an attribute definition can be <code>#REQUIRED
+</code>meaning that the attribute has to be given, <code>#IMPLIED</code>
+meaning that it is optional, or the default value (possibly prefixed by
+<code>#FIXED</code> if it is the only allowed).</p>
+
+<p>Notes:</p>
+<ul>
+ <li>Usually the attributes pertaining to a given element are declared in a
+ single expression, but it is just a convention adopted by a lot of DTD
+ writers:
+ <pre>&lt;!ATTLIST termdef
+ id ID #REQUIRED
+ name CDATA #IMPLIED&gt;</pre>
+ <p>The previous construct defines both <code>id</code> and
+ <code>name</code> attributes for the element <code>termdef</code>.</p>
+ </li>
+</ul>
+
+<h3><a name="Some1">Some examples</a></h3>
+
+<p>The directory <code>test/valid/dtds/</code> in the libxml2 distribution
+contains some complex DTD examples. The example in the file
+<code>test/valid/dia.xml</code> shows an XML file where the simple DTD is
+directly included within the document.</p>
+
+<h3><a name="validate1">How to validate</a></h3>
+
+<p>The simplest way is to use the xmllint program included with libxml. The
+<code>--valid</code> option turns-on validation of the files given as input.
+For example the following validates a copy of the first revision of the XML
+1.0 specification:</p>
+
+<p><code>xmllint --valid --noout test/valid/REC-xml-19980210.xml</code></p>
+
+<p>the -- noout is used to disable output of the resulting tree.</p>
+
+<p>The <code>--dtdvalid dtd</code> allows validation of the document(s)
+against a given DTD.</p>
+
+<p>Libxml2 exports an API to handle DTDs and validation, check the <a
+href="http://xmlsoft.org/html/libxml-valid.html">associated
+description</a>.</p>
+
+<h3><a name="Other1">Other resources</a></h3>
+
+<p>DTDs are as old as SGML. So there may be a number of examples on-line, I
+will just list one for now, others pointers welcome:</p>
+<ul>
+ <li><a href="http://www.xml101.com:8081/dtd/">XML-101 DTD</a></li>
+</ul>
+
+<p>I suggest looking at the examples found under test/valid/dtd and any of
+the large number of books available on XML. The dia example in test/valid
+should be both simple and complete enough to allow you to build your own.</p>
+
+<p></p>
+
+<h2><a name="Memory">Memory Management</a></h2>
+
+<p>Table of Content:</p>
+<ol>
+ <li><a href="#General3">General overview</a></li>
+ <li><a href="#setting">Setting libxml2 set of memory routines</a></li>
+ <li><a href="#cleanup">Cleaning up after parsing</a></li>
+ <li><a href="#Debugging">Debugging routines</a></li>
+ <li><a href="#General4">General memory requirements</a></li>
+</ol>
+
+<h3><a name="General3">General overview</a></h3>
+
+<p>The module <code><a
+href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlmemory.h</a></code>
+provides the interfaces to the libxml2 memory system:</p>
+<ul>
+ <li>libxml2 does not use the libc memory allocator directly but xmlFree(),
+ xmlMalloc() and xmlRealloc()</li>
+ <li>those routines can be reallocated to a specific set of routine, by
+ default the libc ones i.e. free(), malloc() and realloc()</li>
+ <li>the xmlmemory.c module includes a set of debugging routine</li>
+</ul>
+
+<h3><a name="setting">Setting libxml2 set of memory routines</a></h3>
+
+<p>It is sometimes useful to not use the default memory allocator, either for
+debugging, analysis or to implement a specific behaviour on memory management
+(like on embedded systems). Two function calls are available to do so:</p>
+<ul>
+ <li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemGet
+ ()</a> which return the current set of functions in use by the parser</li>
+ <li><a
+ href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemSetup()</a>
+ which allow to set up a new set of memory allocation functions</li>
+</ul>
+
+<p>Of course a call to xmlMemSetup() should probably be done before calling
+any other libxml2 routines (unless you are sure your allocations routines are
+compatibles).</p>
+
+<h3><a name="cleanup">Cleaning up after parsing</a></h3>
+
+<p>Libxml2 is not stateless, there is a few set of memory structures needing
+allocation before the parser is fully functional (some encoding structures
+for example). This also mean that once parsing is finished there is a tiny
+amount of memory (a few hundred bytes) which can be recollected if you don't
+reuse the parser immediately:</p>
+<ul>
+ <li><a href="http://xmlsoft.org/html/libxml-parser.html">xmlCleanupParser
+ ()</a> is a centralized routine to free the parsing states. Note that it
+ won't deallocate any produced tree if any (use the xmlFreeDoc() and
+ related routines for this).</li>
+ <li><a href="http://xmlsoft.org/html/libxml-parser.html">xmlInitParser
+ ()</a> is the dual routine allowing to preallocate the parsing state
+ which can be useful for example to avoid initialization reentrancy
+ problems when using libxml2 in multithreaded applications</li>
+</ul>
+
+<p>Generally xmlCleanupParser() is safe, if needed the state will be rebuild
+at the next invocation of parser routines, but be careful of the consequences
+in multithreaded applications.</p>
+
+<h3><a name="Debugging">Debugging routines</a></h3>
+
+<p>When configured using --with-mem-debug flag (off by default), libxml2 uses
+a set of memory allocation debugging routines keeping track of all allocated
+blocks and the location in the code where the routine was called. A couple of
+other debugging routines allow to dump the memory allocated infos to a file
+or call a specific routine when a given block number is allocated:</p>
+<ul>
+ <li><a
+ href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMallocLoc()</a>
+ <a
+ href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlReallocLoc()</a>
+ and <a
+ href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemStrdupLoc()</a>
+ are the memory debugging replacement allocation routines</li>
+ <li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemoryDump
+ ()</a> dumps all the informations about the allocated memory block lefts
+ in the <code>.memdump</code> file</li>
+</ul>
+
+<p>When developing libxml2 memory debug is enabled, the tests programs call
+xmlMemoryDump () and the "make test" regression tests will check for any
+memory leak during the full regression test sequence, this helps a lot
+ensuring that libxml2 does not leak memory and bullet proof memory
+allocations use (some libc implementations are known to be far too permissive
+resulting in major portability problems!).</p>
+
+<p>If the .memdump reports a leak, it displays the allocation function and
+also tries to give some informations about the content and structure of the
+allocated blocks left. This is sufficient in most cases to find the culprit,
+but not always. Assuming the allocation problem is reproducible, it is
+possible to find more easily:</p>
+<ol>
+ <li>write down the block number xxxx not allocated</li>
+ <li>export the environment variable XML_MEM_BREAKPOINT=xxxx , the easiest
+ when using GDB is to simply give the command
+ <p><code>set environment XML_MEM_BREAKPOINT xxxx</code></p>
+ <p>before running the program.</p>
+ </li>
+ <li>run the program under a debugger and set a breakpoint on
+ xmlMallocBreakpoint() a specific function called when this precise block
+ is allocated</li>
+ <li>when the breakpoint is reached you can then do a fine analysis of the
+ allocation an step to see the condition resulting in the missing
+ deallocation.</li>
+</ol>
+
+<p>I used to use a commercial tool to debug libxml2 memory problems but after
+noticing that it was not detecting memory leaks that simple mechanism was
+used and proved extremely efficient until now. Lately I have also used <a
+href="http://developer.kde.org/~sewardj/">valgrind</a> with quite some
+success, it is tied to the i386 architecture since it works by emulating the
+processor and instruction set, it is slow but extremely efficient, i.e. it
+spot memory usage errors in a very precise way.</p>
+
+<h3><a name="General4">General memory requirements</a></h3>
+
+<p>How much libxml2 memory require ? It's hard to tell in average it depends
+of a number of things:</p>
+<ul>
+ <li>the parser itself should work in a fixed amount of memory, except for
+ information maintained about the stacks of names and entities locations.
+ The I/O and encoding handlers will probably account for a few KBytes.
+ This is true for both the XML and HTML parser (though the HTML parser
+ need more state).</li>
+ <li>If you are generating the DOM tree then memory requirements will grow
+ nearly linear with the size of the data. In general for a balanced
+ textual document the internal memory requirement is about 4 times the
+ size of the UTF8 serialization of this document (example the XML-1.0
+ recommendation is a bit more of 150KBytes and takes 650KBytes of main
+ memory when parsed). Validation will add a amount of memory required for
+ maintaining the external Dtd state which should be linear with the
+ complexity of the content model defined by the Dtd</li>
+ <li>If you need to work with fixed memory requirements or don't need the
+ full DOM tree then using the <a href="xmlreader.html">xmlReader
+ interface</a> is probably the best way to proceed, it still allows to
+ validate or operate on subset of the tree if needed.</li>
+ <li>If you don't care about the advanced features of libxml2 like
+ validation, DOM, XPath or XPointer, don't use entities, need to work with
+ fixed memory requirements, and try to get the fastest parsing possible
+ then the SAX interface should be used, but it has known restrictions.</li>
+</ul>
+
+<p></p>
+
+<h2><a name="Encodings">Encodings support</a></h2>
+
+<p>Table of Content:</p>
+<ol>
+ <li><a href="encoding.html#What">What does internationalization support
+ mean ?</a></li>
+ <li><a href="encoding.html#internal">The internal encoding, how and
+ why</a></li>
+ <li><a href="encoding.html#implemente">How is it implemented ?</a></li>
+ <li><a href="encoding.html#Default">Default supported encodings</a></li>
+ <li><a href="encoding.html#extend">How to extend the existing
+ support</a></li>
+</ol>
+
+<h3><a name="What">What does internationalization support mean ?</a></h3>
+
+<p>If you are not really familiar with Internationalization (usual shortcut
+is I18N) , Unicode, characters and glyphs, I suggest you read a <a
+href="http://www.tbray.org/ongoing/When/200x/2003/04/06/Unicode">presentation</a>
+by Tim Bray on Unicode and why you should care about it.</p>
+
+<p>XML was designed from the start to allow the support of any character set
+by using Unicode. Any conformant XML parser has to support the UTF-8 and
+UTF-16 default encodings which can both express the full unicode ranges. UTF8
+is a variable length encoding whose greatest points are to reuse the same
+encoding for ASCII and to save space for Western encodings, but it is a bit
+more complex to handle in practice. UTF-16 use 2 bytes per character (and
+sometimes combines two pairs), it makes implementation easier, but looks a
+bit overkill for Western languages encoding. Moreover the XML specification
+allows the document to be encoded in other encodings at the condition that
+they are clearly labeled as such. For example the following is a wellformed
+XML document encoded in ISO-8859-1 and using accentuated letters that we
+French like for both markup and content:</p>
+<pre>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
+&lt;très&gt;là&lt;/très&gt;</pre>
+
+<p>Having internationalization support in libxml2 means the following:</p>
+<ul>
+ <li>the document is properly parsed</li>
+ <li>informations about it's encoding are saved</li>
+ <li>it can be modified</li>
+ <li>it can be saved in its original encoding</li>
+ <li>it can also be saved in another encoding supported by libxml2 (for
+ example straight UTF8 or even an ASCII form)</li>
+</ul>
+
+<p>Another very important point is that the whole libxml2 API, with the
+exception of a few routines to read with a specific encoding or save to a
+specific encoding, is completely agnostic about the original encoding of the
+document.</p>
+
+<p>It should be noted too that the HTML parser embedded in libxml2 now obey
+the same rules too, the following document will be (as of 2.2.2) handled in
+an internationalized fashion by libxml2 too:</p>
+<pre>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+ "http://www.w3.org/TR/REC-html40/loose.dtd"&gt;
+&lt;html lang="fr"&gt;
+&lt;head&gt;
+ &lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p&gt;W3C crée des standards pour le Web.&lt;/body&gt;
+&lt;/html&gt;</pre>
+
+<h3><a name="internal">The internal encoding, how and why</a></h3>
+
+<p>One of the core decisions was to force all documents to be converted to a
+default internal encoding, and that encoding to be UTF-8, here are the
+rationales for those choices:</p>
+<ul>
+ <li>keeping the native encoding in the internal form would force the libxml
+ users (or the code associated) to be fully aware of the encoding of the
+ original document, for examples when adding a text node to a document,
+ the content would have to be provided in the document encoding, i.e. the
+ client code would have to check it before hand, make sure it's conformant
+ to the encoding, etc ... Very hard in practice, though in some specific
+ cases this may make sense.</li>
+ <li>the second decision was which encoding. From the XML spec only UTF8 and
+ UTF16 really makes sense as being the two only encodings for which there
+ is mandatory support. UCS-4 (32 bits fixed size encoding) could be
+ considered an intelligent choice too since it's a direct Unicode mapping
+ support. I selected UTF-8 on the basis of efficiency and compatibility
+ with surrounding software:
+ <ul>
+ <li>UTF-8 while a bit more complex to convert from/to (i.e. slightly
+ more costly to import and export CPU wise) is also far more compact
+ than UTF-16 (and UCS-4) for a majority of the documents I see it used
+ for right now (RPM RDF catalogs, advogato data, various configuration
+ file formats, etc.) and the key point for today's computer
+ architecture is efficient uses of caches. If one nearly double the
+ memory requirement to store the same amount of data, this will trash
+ caches (main memory/external caches/internal caches) and my take is
+ that this harms the system far more than the CPU requirements needed
+ for the conversion to UTF-8</li>
+ <li>Most of libxml2 version 1 users were using it with straight ASCII
+ most of the time, doing the conversion with an internal encoding
+ requiring all their code to be rewritten was a serious show-stopper
+ for using UTF-16 or UCS-4.</li>
+ <li>UTF-8 is being used as the de-facto internal encoding standard for
+ related code like the <a href="http://www.pango.org/">pango</a>
+ upcoming Gnome text widget, and a lot of Unix code (yet another place
+ where Unix programmer base takes a different approach from Microsoft
+ - they are using UTF-16)</li>
+ </ul>
+ </li>
+</ul>
+
+<p>What does this mean in practice for the libxml2 user:</p>
+<ul>
+ <li>xmlChar, the libxml2 data type is a byte, those bytes must be assembled
+ as UTF-8 valid strings. The proper way to terminate an xmlChar * string
+ is simply to append 0 byte, as usual.</li>
+ <li>One just need to make sure that when using chars outside the ASCII set,
+ the values has been properly converted to UTF-8</li>
+</ul>
+
+<h3><a name="implemente">How is it implemented ?</a></h3>
+
+<p>Let's describe how all this works within libxml, basically the I18N
+(internationalization) support get triggered only during I/O operation, i.e.
+when reading a document or saving one. Let's look first at the reading
+sequence:</p>
+<ol>
+ <li>when a document is processed, we usually don't know the encoding, a
+ simple heuristic allows to detect UTF-16 and UCS-4 from encodings where
+ the ASCII range (0-0x7F) maps with ASCII</li>
+ <li>the xml declaration if available is parsed, including the encoding
+ declaration. At that point, if the autodetected encoding is different
+ from the one declared a call to xmlSwitchEncoding() is issued.</li>
+ <li>If there is no encoding declaration, then the input has to be in either
+ UTF-8 or UTF-16, if it is not then at some point when processing the
+ input, the converter/checker of UTF-8 form will raise an encoding error.
+ You may end-up with a garbled document, or no document at all ! Example:
+ <pre>~/XML -&gt; ./xmllint err.xml
+err.xml:1: error: Input is not proper UTF-8, indicate encoding !
+&lt;très&gt;là&lt;/très&gt;
+ ^
+err.xml:1: error: Bytes: 0xE8 0x73 0x3E 0x6C
+&lt;très&gt;là&lt;/très&gt;
+ ^</pre>
+ </li>
+ <li>xmlSwitchEncoding() does an encoding name lookup, canonicalize it, and
+ then search the default registered encoding converters for that encoding.
+ If it's not within the default set and iconv() support has been compiled
+ it, it will ask iconv for such an encoder. If this fails then the parser
+ will report an error and stops processing:
+ <pre>~/XML -&gt; ./xmllint err2.xml
+err2.xml:1: error: Unsupported encoding UnsupportedEnc
+&lt;?xml version="1.0" encoding="UnsupportedEnc"?&gt;
+ ^</pre>
+ </li>
+ <li>From that point the encoder processes progressively the input (it is
+ plugged as a front-end to the I/O module) for that entity. It captures
+ and converts on-the-fly the document to be parsed to UTF-8. The parser
+ itself just does UTF-8 checking of this input and process it
+ transparently. The only difference is that the encoding information has
+ been added to the parsing context (more precisely to the input
+ corresponding to this entity).</li>
+ <li>The result (when using DOM) is an internal form completely in UTF-8
+ with just an encoding information on the document node.</li>
+</ol>
+
+<p>Ok then what happens when saving the document (assuming you
+collected/built an xmlDoc DOM like structure) ? It depends on the function
+called, xmlSaveFile() will just try to save in the original encoding, while
+xmlSaveFileTo() and xmlSaveFileEnc() can optionally save to a given
+encoding:</p>
+<ol>
+ <li>if no encoding is given, libxml2 will look for an encoding value
+ associated to the document and if it exists will try to save to that
+ encoding,
+ <p>otherwise everything is written in the internal form, i.e. UTF-8</p>
+ </li>
+ <li>so if an encoding was specified, either at the API level or on the
+ document, libxml2 will again canonicalize the encoding name, lookup for a
+ converter in the registered set or through iconv. If not found the
+ function will return an error code</li>
+ <li>the converter is placed before the I/O buffer layer, as another kind of
+ buffer, then libxml2 will simply push the UTF-8 serialization to through
+ that buffer, which will then progressively be converted and pushed onto
+ the I/O layer.</li>
+ <li>It is possible that the converter code fails on some input, for example
+ trying to push an UTF-8 encoded Chinese character through the UTF-8 to
+ ISO-8859-1 converter won't work. Since the encoders are progressive they
+ will just report the error and the number of bytes converted, at that
+ point libxml2 will decode the offending character, remove it from the
+ buffer and replace it with the associated charRef encoding &amp;#123; and
+ resume the conversion. This guarantees that any document will be saved
+ without losses (except for markup names where this is not legal, this is
+ a problem in the current version, in practice avoid using non-ascii
+ characters for tag or attribute names). A special "ascii" encoding name
+ is used to save documents to a pure ascii form can be used when
+ portability is really crucial</li>
+</ol>
+
+<p>Here are a few examples based on the same test document:</p>
+<pre>~/XML -&gt; ./xmllint isolat1
+&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
+&lt;très&gt;là&lt;/très&gt;
+~/XML -&gt; ./xmllint --encode UTF-8 isolat1
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;très&gt;là  &lt;/très&gt;
+~/XML -&gt; </pre>
+
+<p>The same processing is applied (and reuse most of the code) for HTML I18N
+processing. Looking up and modifying the content encoding is a bit more
+difficult since it is located in a &lt;meta&gt; tag under the &lt;head&gt;,
+so a couple of functions htmlGetMetaEncoding() and htmlSetMetaEncoding() have
+been provided. The parser also attempts to switch encoding on the fly when
+detecting such a tag on input. Except for that the processing is the same
+(and again reuses the same code).</p>
+
+<h3><a name="Default">Default supported encodings</a></h3>
+
+<p>libxml2 has a set of default converters for the following encodings
+(located in encoding.c):</p>
+<ol>
+ <li>UTF-8 is supported by default (null handlers)</li>
+ <li>UTF-16, both little and big endian</li>
+ <li>ISO-Latin-1 (ISO-8859-1) covering most western languages</li>
+ <li>ASCII, useful mostly for saving</li>
+ <li>HTML, a specific handler for the conversion of UTF-8 to ASCII with HTML
+ predefined entities like &amp;copy; for the Copyright sign.</li>
+</ol>
+
+<p>More over when compiled on an Unix platform with iconv support the full
+set of encodings supported by iconv can be instantly be used by libxml. On a
+linux machine with glibc-2.1 the list of supported encodings and aliases fill
+3 full pages, and include UCS-4, the full set of ISO-Latin encodings, and the
+various Japanese ones.</p>
+
+<h4>Encoding aliases</h4>
+
+<p>From 2.2.3, libxml2 has support to register encoding names aliases. The
+goal is to be able to parse document whose encoding is supported but where
+the name differs (for example from the default set of names accepted by
+iconv). The following functions allow to register and handle new aliases for
+existing encodings. Once registered libxml2 will automatically lookup the
+aliases when handling a document:</p>
+<ul>
+ <li>int xmlAddEncodingAlias(const char *name, const char *alias);</li>
+ <li>int xmlDelEncodingAlias(const char *alias);</li>
+ <li>const char * xmlGetEncodingAlias(const char *alias);</li>
+ <li>void xmlCleanupEncodingAliases(void);</li>
+</ul>
+
+<h3><a name="extend">How to extend the existing support</a></h3>
+
+<p>Well adding support for new encoding, or overriding one of the encoders
+(assuming it is buggy) should not be hard, just write input and output
+conversion routines to/from UTF-8, and register them using
+xmlNewCharEncodingHandler(name, xxxToUTF8, UTF8Toxxx), and they will be
+called automatically if the parser(s) encounter such an encoding name
+(register it uppercase, this will help). The description of the encoders,
+their arguments and expected return values are described in the encoding.h
+header.</p>
+
+<p>A quick note on the topic of subverting the parser to use a different
+internal encoding than UTF-8, in some case people will absolutely want to
+keep the internal encoding different, I think it's still possible (but the
+encoding must be compliant with ASCII on the same subrange) though I didn't
+tried it. The key is to override the default conversion routines (by
+registering null encoders/decoders for your charsets), and bypass the UTF-8
+checking of the parser by setting the parser context charset
+(ctxt-&gt;charset) to something different than XML_CHAR_ENCODING_UTF8, but
+there is no guarantee that this will work. You may also have some troubles
+saving back.</p>
+
+<p>Basically proper I18N support is important, this requires at least
+libxml-2.0.0, but a lot of features and corrections are really available only
+starting 2.2.</p>
+
+<h2><a name="IO">I/O Interfaces</a></h2>
+
+<p>Table of Content:</p>
+<ol>
+ <li><a href="#General1">General overview</a></li>
+ <li><a href="#basic">The basic buffer type</a></li>
+ <li><a href="#Input">Input I/O handlers</a></li>
+ <li><a href="#Output">Output I/O handlers</a></li>
+ <li><a href="#entities">The entities loader</a></li>
+ <li><a href="#Example2">Example of customized I/O</a></li>
+</ol>
+
+<h3><a name="General1">General overview</a></h3>
+
+<p>The module <code><a
+href="http://xmlsoft.org/html/libxml-xmlio.html">xmlIO.h</a></code> provides
+the interfaces to the libxml2 I/O system. This consists of 4 main parts:</p>
+<ul>
+ <li>Entities loader, this is a routine which tries to fetch the entities
+ (files) based on their PUBLIC and SYSTEM identifiers. The default loader
+ don't look at the public identifier since libxml2 do not maintain a
+ catalog. You can redefine you own entity loader by using
+ <code>xmlGetExternalEntityLoader()</code> and
+ <code>xmlSetExternalEntityLoader()</code>. <a href="#entities">Check the
+ example</a>.</li>
+ <li>Input I/O buffers which are a commodity structure used by the parser(s)
+ input layer to handle fetching the informations to feed the parser. This
+ provides buffering and is also a placeholder where the encoding
+ converters to UTF8 are piggy-backed.</li>
+ <li>Output I/O buffers are similar to the Input ones and fulfill similar
+ task but when generating a serialization from a tree.</li>
+ <li>A mechanism to register sets of I/O callbacks and associate them with
+ specific naming schemes like the protocol part of the URIs.
+ <p>This affect the default I/O operations and allows to use specific I/O
+ handlers for certain names.</p>
+ </li>
+</ul>
+
+<p>The general mechanism used when loading http://rpmfind.net/xml.html for
+example in the HTML parser is the following:</p>
+<ol>
+ <li>The default entity loader calls <code>xmlNewInputFromFile()</code> with
+ the parsing context and the URI string.</li>
+ <li>the URI string is checked against the existing registered handlers
+ using their match() callback function, if the HTTP module was compiled
+ in, it is registered and its match() function will succeeds</li>
+ <li>the open() function of the handler is called and if successful will
+ return an I/O Input buffer</li>
+ <li>the parser will the start reading from this buffer and progressively
+ fetch information from the resource, calling the read() function of the
+ handler until the resource is exhausted</li>
+ <li>if an encoding change is detected it will be installed on the input
+ buffer, providing buffering and efficient use of the conversion
+ routines</li>
+ <li>once the parser has finished, the close() function of the handler is
+ called once and the Input buffer and associated resources are
+ deallocated.</li>
+</ol>
+
+<p>The user defined callbacks are checked first to allow overriding of the
+default libxml2 I/O routines.</p>
+
+<h3><a name="basic">The basic buffer type</a></h3>
+
+<p>All the buffer manipulation handling is done using the
+<code>xmlBuffer</code> type define in <code><a
+href="http://xmlsoft.org/html/libxml-tree.html">tree.h</a> </code>which is a
+resizable memory buffer. The buffer allocation strategy can be selected to be
+either best-fit or use an exponential doubling one (CPU vs. memory use
+trade-off). The values are <code>XML_BUFFER_ALLOC_EXACT</code> and
+<code>XML_BUFFER_ALLOC_DOUBLEIT</code>, and can be set individually or on a
+system wide basis using <code>xmlBufferSetAllocationScheme()</code>. A number
+of functions allows to manipulate buffers with names starting with the
+<code>xmlBuffer...</code> prefix.</p>
+
+<h3><a name="Input">Input I/O handlers</a></h3>
+
+<p>An Input I/O handler is a simple structure
+<code>xmlParserInputBuffer</code> containing a context associated to the
+resource (file descriptor, or pointer to a protocol handler), the read() and
+close() callbacks to use and an xmlBuffer. And extra xmlBuffer and a charset
+encoding handler are also present to support charset conversion when
+needed.</p>
+
+<h3><a name="Output">Output I/O handlers</a></h3>
+
+<p>An Output handler <code>xmlOutputBuffer</code> is completely similar to an
+Input one except the callbacks are write() and close().</p>
+
+<h3><a name="entities">The entities loader</a></h3>
+
+<p>The entity loader resolves requests for new entities and create inputs for
+the parser. Creating an input from a filename or an URI string is done
+through the xmlNewInputFromFile() routine. The default entity loader do not
+handle the PUBLIC identifier associated with an entity (if any). So it just
+calls xmlNewInputFromFile() with the SYSTEM identifier (which is mandatory in
+XML).</p>
+
+<p>If you want to hook up a catalog mechanism then you simply need to
+override the default entity loader, here is an example:</p>
+<pre>#include &lt;libxml/xmlIO.h&gt;
+
+xmlExternalEntityLoader defaultLoader = NULL;
+
+xmlParserInputPtr
+xmlMyExternalEntityLoader(const char *URL, const char *ID,
+ xmlParserCtxtPtr ctxt) {
+ xmlParserInputPtr ret;
+ const char *fileID = NULL;
+ /* lookup for the fileID depending on ID */
+
+ ret = xmlNewInputFromFile(ctxt, fileID);
+ if (ret != NULL)
+ return(ret);
+ if (defaultLoader != NULL)
+ ret = defaultLoader(URL, ID, ctxt);
+ return(ret);
+}
+
+int main(..) {
+ ...
+
+ /*
+ * Install our own entity loader
+ */
+ defaultLoader = xmlGetExternalEntityLoader();
+ xmlSetExternalEntityLoader(xmlMyExternalEntityLoader);
+
+ ...
+}</pre>
+
+<h3><a name="Example2">Example of customized I/O</a></h3>
+
+<p>This example come from <a href="http://xmlsoft.org/messages/0708.html">a
+real use case</a>, xmlDocDump() closes the FILE * passed by the application
+and this was a problem. The <a
+href="http://xmlsoft.org/messages/0711.html">solution</a> was to redefine a
+new output handler with the closing call deactivated:</p>
+<ol>
+ <li>First define a new I/O output allocator where the output don't close
+ the file:
+ <pre>xmlOutputBufferPtr
+xmlOutputBufferCreateOwn(FILE *file, xmlCharEncodingHandlerPtr encoder) {
+    xmlOutputBufferPtr ret;
+    
+    if (xmlOutputCallbackInitialized == 0)
+        xmlRegisterDefaultOutputCallbacks();
+
+    if (file == NULL) return(NULL);
+    ret = xmlAllocOutputBuffer(encoder);
+    if (ret != NULL) {
+        ret-&gt;context = file;
+        ret-&gt;writecallback = xmlFileWrite;
+        ret-&gt;closecallback = NULL; /* No close callback */
+    }
+    return(ret);
+} </pre>
+ </li>
+ <li>And then use it to save the document:
+ <pre>FILE *f;
+xmlOutputBufferPtr output;
+xmlDocPtr doc;
+int res;
+
+f = ...
+doc = ....
+
+output = xmlOutputBufferCreateOwn(f, NULL);
+res = xmlSaveFileTo(output, doc, NULL);
+ </pre>
+ </li>
+</ol>
+
+<h2><a name="Catalog">Catalog support</a></h2>
+
+<p>Table of Content:</p>
+<ol>
+ <li><a href="General2">General overview</a></li>
+ <li><a href="#definition">The definition</a></li>
+ <li><a href="#Simple">Using catalogs</a></li>
+ <li><a href="#Some">Some examples</a></li>
+ <li><a href="#reference">How to tune catalog usage</a></li>
+ <li><a href="#validate">How to debug catalog processing</a></li>
+ <li><a href="#Declaring">How to create and maintain catalogs</a></li>
+ <li><a href="#implemento">The implementor corner quick review of the
+ API</a></li>
+ <li><a href="#Other">Other resources</a></li>
+</ol>
+
+<h3><a name="General2">General overview</a></h3>
+
+<p>What is a catalog? Basically it's a lookup mechanism used when an entity
+(a file or a remote resource) references another entity. The catalog lookup
+is inserted between the moment the reference is recognized by the software
+(XML parser, stylesheet processing, or even images referenced for inclusion
+in a rendering) and the time where loading that resource is actually
+started.</p>
+
+<p>It is basically used for 3 things:</p>
+<ul>
+ <li>mapping from "logical" names, the public identifiers and a more
+ concrete name usable for download (and URI). For example it can associate
+ the logical name
+ <p>"-//OASIS//DTD DocBook XML V4.1.2//EN"</p>
+ <p>of the DocBook 4.1.2 XML DTD with the actual URL where it can be
+ downloaded</p>
+ <p>http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd</p>
+ </li>
+ <li>remapping from a given URL to another one, like an HTTP indirection
+ saying that
+ <p>"http://www.oasis-open.org/committes/tr.xsl"</p>
+ <p>should really be looked at</p>
+ <p>"http://www.oasis-open.org/committes/entity/stylesheets/base/tr.xsl"</p>
+ </li>
+ <li>providing a local cache mechanism allowing to load the entities
+ associated to public identifiers or remote resources, this is a really
+ important feature for any significant deployment of XML or SGML since it
+ allows to avoid the aleas and delays associated to fetching remote
+ resources.</li>
+</ul>
+
+<h3><a name="definition">The definitions</a></h3>
+
+<p>Libxml, as of 2.4.3 implements 2 kind of catalogs:</p>
+<ul>
+ <li>the older SGML catalogs, the official spec is SGML Open Technical
+ Resolution TR9401:1997, but is better understood by reading <a
+ href="http://www.jclark.com/sp/catalog.htm">the SP Catalog page</a> from
+ James Clark. This is relatively old and not the preferred mode of
+ operation of libxml.</li>
+ <li><a href="http://www.oasis-open.org/committees/entity/spec.html">XML
+ Catalogs</a> is far more flexible, more recent, uses an XML syntax and
+ should scale quite better. This is the default option of libxml.</li>
+</ul>
+
+<p></p>
+
+<h3><a name="Simple">Using catalog</a></h3>
+
+<p>In a normal environment libxml2 will by default check the presence of a
+catalog in /etc/xml/catalog, and assuming it has been correctly populated,
+the processing is completely transparent to the document user. To take a
+concrete example, suppose you are authoring a DocBook document, this one
+starts with the following DOCTYPE definition:</p>
+<pre>&lt;?xml version='1.0'?&gt;
+&lt;!DOCTYPE book PUBLIC "-//Norman Walsh//DTD DocBk XML V3.1.4//EN"
+ "http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd"&gt;</pre>
+
+<p>When validating the document with libxml, the catalog will be
+automatically consulted to lookup the public identifier "-//Norman Walsh//DTD
+DocBk XML V3.1.4//EN" and the system identifier
+"http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd", and if these entities have
+been installed on your system and the catalogs actually point to them, libxml
+will fetch them from the local disk.</p>
+
+<p style="font-size: 10pt"><strong>Note</strong>: Really don't use this
+DOCTYPE example it's a really old version, but is fine as an example.</p>
+
+<p>Libxml2 will check the catalog each time that it is requested to load an
+entity, this includes DTD, external parsed entities, stylesheets, etc ... If
+your system is correctly configured all the authoring phase and processing
+should use only local files, even if your document stays portable because it
+uses the canonical public and system ID, referencing the remote document.</p>
+
+<h3><a name="Some">Some examples:</a></h3>
+
+<p>Here is a couple of fragments from XML Catalogs used in libxml2 early
+regression tests in <code>test/catalogs</code> :</p>
+<pre>&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE catalog PUBLIC
+ "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
+&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"&gt;
+ &lt;public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
+ uri="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/&gt;
+...</pre>
+
+<p>This is the beginning of a catalog for DocBook 4.1.2, XML Catalogs are
+written in XML, there is a specific namespace for catalog elements
+"urn:oasis:names:tc:entity:xmlns:xml:catalog". The first entry in this
+catalog is a <code>public</code> mapping it allows to associate a Public
+Identifier with an URI.</p>
+<pre>...
+ &lt;rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/"
+ rewritePrefix="file:///usr/share/xml/docbook/"/&gt;
+...</pre>
+
+<p>A <code>rewriteSystem</code> is a very powerful instruction, it says that
+any URI starting with a given prefix should be looked at another URI
+constructed by replacing the prefix with an new one. In effect this acts like
+a cache system for a full area of the Web. In practice it is extremely useful
+with a file prefix if you have installed a copy of those resources on your
+local system.</p>
+<pre>...
+&lt;delegatePublic publicIdStartString="-//OASIS//DTD XML Catalog //"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+&lt;delegatePublic publicIdStartString="-//OASIS//ENTITIES DocBook XML"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+&lt;delegatePublic publicIdStartString="-//OASIS//DTD DocBook XML"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+&lt;delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+&lt;delegateURI uriStartString="http://www.oasis-open.org/docbook/"
+ catalog="file:///usr/share/xml/docbook.xml"/&gt;
+...</pre>
+
+<p>Delegation is the core features which allows to build a tree of catalogs,
+easier to maintain than a single catalog, based on Public Identifier, System
+Identifier or URI prefixes it instructs the catalog software to look up
+entries in another resource. This feature allow to build hierarchies of
+catalogs, the set of entries presented should be sufficient to redirect the
+resolution of all DocBook references to the specific catalog in
+<code>/usr/share/xml/docbook.xml</code> this one in turn could delegate all
+references for DocBook 4.2.1 to a specific catalog installed at the same time
+as the DocBook resources on the local machine.</p>
+
+<h3><a name="reference">How to tune catalog usage:</a></h3>
+
+<p>The user can change the default catalog behaviour by redirecting queries
+to its own set of catalogs, this can be done by setting the
+<code>XML_CATALOG_FILES</code> environment variable to a list of catalogs, an
+empty one should deactivate loading the default <code>/etc/xml/catalog</code>
+default catalog</p>
+
+<h3><a name="validate">How to debug catalog processing:</a></h3>
+
+<p>Setting up the <code>XML_DEBUG_CATALOG</code> environment variable will
+make libxml2 output debugging informations for each catalog operations, for
+example:</p>
+<pre>orchis:~/XML -&gt; xmllint --memory --noout test/ent2
+warning: failed to load external entity "title.xml"
+orchis:~/XML -&gt; export XML_DEBUG_CATALOG=
+orchis:~/XML -&gt; xmllint --memory --noout test/ent2
+Failed to parse catalog /etc/xml/catalog
+Failed to parse catalog /etc/xml/catalog
+warning: failed to load external entity "title.xml"
+Catalogs cleanup
+orchis:~/XML -&gt; </pre>
+
+<p>The test/ent2 references an entity, running the parser from memory makes
+the base URI unavailable and the the "title.xml" entity cannot be loaded.
+Setting up the debug environment variable allows to detect that an attempt is
+made to load the <code>/etc/xml/catalog</code> but since it's not present the
+resolution fails.</p>
+
+<p>But the most advanced way to debug XML catalog processing is to use the
+<strong>xmlcatalog</strong> command shipped with libxml2, it allows to load
+catalogs and make resolution queries to see what is going on. This is also
+used for the regression tests:</p>
+<pre>orchis:~/XML -&gt; ./xmlcatalog test/catalogs/docbook.xml \
+ "-//OASIS//DTD DocBook XML V4.1.2//EN"
+http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+orchis:~/XML -&gt; </pre>
+
+<p>For debugging what is going on, adding one -v flags increase the verbosity
+level to indicate the processing done (adding a second flag also indicate
+what elements are recognized at parsing):</p>
+<pre>orchis:~/XML -&gt; ./xmlcatalog -v test/catalogs/docbook.xml \
+ "-//OASIS//DTD DocBook XML V4.1.2//EN"
+Parsing catalog test/catalogs/docbook.xml's content
+Found public match -//OASIS//DTD DocBook XML V4.1.2//EN
+http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+Catalogs cleanup
+orchis:~/XML -&gt; </pre>
+
+<p>A shell interface is also available to debug and process multiple queries
+(and for regression tests):</p>
+<pre>orchis:~/XML -&gt; ./xmlcatalog -shell test/catalogs/docbook.xml \
+ "-//OASIS//DTD DocBook XML V4.1.2//EN"
+&gt; help
+Commands available:
+public PublicID: make a PUBLIC identifier lookup
+system SystemID: make a SYSTEM identifier lookup
+resolve PublicID SystemID: do a full resolver lookup
+add 'type' 'orig' 'replace' : add an entry
+del 'values' : remove values
+dump: print the current catalog state
+debug: increase the verbosity level
+quiet: decrease the verbosity level
+exit: quit the shell
+&gt; public "-//OASIS//DTD DocBook XML V4.1.2//EN"
+http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+&gt; quit
+orchis:~/XML -&gt; </pre>
+
+<p>This should be sufficient for most debugging purpose, this was actually
+used heavily to debug the XML Catalog implementation itself.</p>
+
+<h3><a name="Declaring">How to create and maintain</a> catalogs:</h3>
+
+<p>Basically XML Catalogs are XML files, you can either use XML tools to
+manage them or use <strong>xmlcatalog</strong> for this. The basic step is
+to create a catalog the -create option provide this facility:</p>
+<pre>orchis:~/XML -&gt; ./xmlcatalog --create tst.xml
+&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
+&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"/&gt;
+orchis:~/XML -&gt; </pre>
+
+<p>By default xmlcatalog does not overwrite the original catalog and save the
+result on the standard output, this can be overridden using the -noout
+option. The <code>-add</code> command allows to add entries in the
+catalog:</p>
+<pre>orchis:~/XML -&gt; ./xmlcatalog --noout --create --add "public" \
+ "-//OASIS//DTD DocBook XML V4.1.2//EN" \
+ http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd tst.xml
+orchis:~/XML -&gt; cat tst.xml
+&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" \
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
+&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"&gt;
+&lt;public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
+ uri="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/&gt;
+&lt;/catalog&gt;
+orchis:~/XML -&gt; </pre>
+
+<p>The <code>-add</code> option will always take 3 parameters even if some of
+the XML Catalog constructs (like nextCatalog) will have only a single
+argument, just pass a third empty string, it will be ignored.</p>
+
+<p>Similarly the <code>-del</code> option remove matching entries from the
+catalog:</p>
+<pre>orchis:~/XML -&gt; ./xmlcatalog --del \
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" tst.xml
+&lt;?xml version="1.0"?&gt;
+&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
+&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"/&gt;
+orchis:~/XML -&gt; </pre>
+
+<p>The catalog is now empty. Note that the matching of <code>-del</code> is
+exact and would have worked in a similar fashion with the Public ID
+string.</p>
+
+<p>This is rudimentary but should be sufficient to manage a not too complex
+catalog tree of resources.</p>
+
+<h3><a name="implemento">The implementor corner quick review of the
+API:</a></h3>
+
+<p>First, and like for every other module of libxml, there is an
+automatically generated <a href="html/libxml-catalog.html">API page for
+catalog support</a>.</p>
+
+<p>The header for the catalog interfaces should be included as:</p>
+<pre>#include &lt;libxml/catalog.h&gt;</pre>
+
+<p>The API is voluntarily kept very simple. First it is not obvious that
+applications really need access to it since it is the default behaviour of
+libxml2 (Note: it is possible to completely override libxml2 default catalog
+by using <a href="html/libxml-parser.html">xmlSetExternalEntityLoader</a> to
+plug an application specific resolver).</p>
+
+<p>Basically libxml2 support 2 catalog lists:</p>
+<ul>
+ <li>the default one, global shared by all the application</li>
+ <li>a per-document catalog, this one is built if the document uses the
+ <code>oasis-xml-catalog</code> PIs to specify its own catalog list, it is
+ associated to the parser context and destroyed when the parsing context
+ is destroyed.</li>
+</ul>
+
+<p>the document one will be used first if it exists.</p>
+
+<h4>Initialization routines:</h4>
+
+<p>xmlInitializeCatalog(), xmlLoadCatalog() and xmlLoadCatalogs() should be
+used at startup to initialize the catalog, if the catalog should be
+initialized with specific values xmlLoadCatalog() or xmlLoadCatalogs()
+should be called before xmlInitializeCatalog() which would otherwise do a
+default initialization first.</p>
+
+<p>The xmlCatalogAddLocal() call is used by the parser to grow the document
+own catalog list if needed.</p>
+
+<h4>Preferences setup:</h4>
+
+<p>The XML Catalog spec requires the possibility to select default
+preferences between public and system delegation,
+xmlCatalogSetDefaultPrefer() allows this, xmlCatalogSetDefaults() and
+xmlCatalogGetDefaults() allow to control if XML Catalogs resolution should
+be forbidden, allowed for global catalog, for document catalog or both, the
+default is to allow both.</p>
+
+<p>And of course xmlCatalogSetDebug() allows to generate debug messages
+(through the xmlGenericError() mechanism).</p>
+
+<h4>Querying routines:</h4>
+
+<p>xmlCatalogResolve(), xmlCatalogResolveSystem(), xmlCatalogResolvePublic()
+and xmlCatalogResolveURI() are relatively explicit if you read the XML
+Catalog specification they correspond to section 7 algorithms, they should
+also work if you have loaded an SGML catalog with a simplified semantic.</p>
+
+<p>xmlCatalogLocalResolve() and xmlCatalogLocalResolveURI() are the same but
+operate on the document catalog list</p>
+
+<h4>Cleanup and Miscellaneous:</h4>
+
+<p>xmlCatalogCleanup() free-up the global catalog, xmlCatalogFreeLocal() is
+the per-document equivalent.</p>
+
+<p>xmlCatalogAdd() and xmlCatalogRemove() are used to dynamically modify the
+first catalog in the global list, and xmlCatalogDump() allows to dump a
+catalog state, those routines are primarily designed for xmlcatalog, I'm not
+sure that exposing more complex interfaces (like navigation ones) would be
+really useful.</p>
+
+<p>The xmlParseCatalogFile() is a function used to load XML Catalog files,
+it's similar as xmlParseFile() except it bypass all catalog lookups, it's
+provided because this functionality may be useful for client tools.</p>
+
+<h4>threaded environments:</h4>
+
+<p>Since the catalog tree is built progressively, some care has been taken to
+try to avoid troubles in multithreaded environments. The code is now thread
+safe assuming that the libxml2 library has been compiled with threads
+support.</p>
+
+<p></p>
+
+<h3><a name="Other">Other resources</a></h3>
+
+<p>The XML Catalog specification is relatively recent so there isn't much
+literature to point at:</p>
+<ul>
+ <li>You can find a good rant from Norm Walsh about <a
+ href="http://www.arbortext.com/Think_Tank/XML_Resources/Issue_Three/issue_three.html">the
+ need for catalogs</a>, it provides a lot of context informations even if
+ I don't agree with everything presented. Norm also wrote a more recent
+ article <a
+ href="http://wwws.sun.com/software/xml/developers/resolver/article/">XML
+ entities and URI resolvers</a> describing them.</li>
+ <li>An <a href="http://home.ccil.org/~cowan/XML/XCatalog.html">old XML
+ catalog proposal</a> from John Cowan</li>
+ <li>The <a href="http://www.rddl.org/">Resource Directory Description
+ Language</a> (RDDL) another catalog system but more oriented toward
+ providing metadata for XML namespaces.</li>
+ <li>the page from the OASIS Technical <a
+ href="http://www.oasis-open.org/committees/entity/">Committee on Entity
+ Resolution</a> who maintains XML Catalog, you will find pointers to the
+ specification update, some background and pointers to others tools
+ providing XML Catalog support</li>
+ <li>There is a <a href="buildDocBookCatalog">shell script</a> to generate
+ XML Catalogs for DocBook 4.1.2 . If it can write to the /etc/xml/
+ directory, it will set-up /etc/xml/catalog and /etc/xml/docbook based on
+ the resources found on the system. Otherwise it will just create
+ ~/xmlcatalog and ~/dbkxmlcatalog and doing:
+ <p><code>export XML_CATALOG_FILES=$HOME/xmlcatalog</code></p>
+ <p>should allow to process DocBook documentations without requiring
+ network accesses for the DTD or stylesheets</p>
+ </li>
+ <li>I have uploaded <a href="ftp://xmlsoft.org/test/dbk412catalog.tar.gz">a
+ small tarball</a> containing XML Catalogs for DocBook 4.1.2 which seems
+ to work fine for me too</li>
+ <li>The <a href="http://www.xmlsoft.org/xmlcatalog_man.html">xmlcatalog
+ manual page</a></li>
+</ul>
+
+<p>If you have suggestions for corrections or additions, simply contact
+me:</p>
+
+<h2><a name="library">The parser interfaces</a></h2>
+
+<p>This section is directly intended to help programmers getting bootstrapped
+using the XML tollkit from the C language. It is not intended to be
+extensive. I hope the automatically generated documents will provide the
+completeness required, but as a separate set of documents. The interfaces of
+the XML parser are by principle low level, Those interested in a higher level
+API should <a href="#DOM">look at DOM</a>.</p>
+
+<p>The <a href="html/libxml-parser.html">parser interfaces for XML</a> are
+separated from the <a href="html/libxml-htmlparser.html">HTML parser
+interfaces</a>. Let's have a look at how the XML parser can be called:</p>
+
+<h3><a name="Invoking">Invoking the parser : the pull method</a></h3>
+
+<p>Usually, the first thing to do is to read an XML input. The parser accepts
+documents either from in-memory strings or from files. The functions are
+defined in "parser.h":</p>
+<dl>
+ <dt><code>xmlDocPtr xmlParseMemory(char *buffer, int size);</code></dt>
+ <dd><p>Parse a null-terminated string containing the document.</p>
+ </dd>
+</dl>
+<dl>
+ <dt><code>xmlDocPtr xmlParseFile(const char *filename);</code></dt>
+ <dd><p>Parse an XML document contained in a (possibly compressed)
+ file.</p>
+ </dd>
+</dl>
+
+<p>The parser returns a pointer to the document structure (or NULL in case of
+failure).</p>
+
+<h3 id="Invoking1">Invoking the parser: the push method</h3>
+
+<p>In order for the application to keep the control when the document is
+being fetched (which is common for GUI based programs) libxml2 provides a
+push interface, too, as of version 1.8.3. Here are the interface
+functions:</p>
+<pre>xmlParserCtxtPtr xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *chunk,
+ int size,
+ const char *filename);
+int xmlParseChunk (xmlParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ int terminate);</pre>
+
+<p>and here is a simple example showing how to use the interface:</p>
+<pre> FILE *f;
+
+ f = fopen(filename, "r");
+ if (f != NULL) {
+ int res, size = 1024;
+ char chars[1024];
+ xmlParserCtxtPtr ctxt;
+
+ res = fread(chars, 1, 4, f);
+ if (res &gt; 0) {
+ ctxt = xmlCreatePushParserCtxt(NULL, NULL,
+ chars, res, filename);
+ while ((res = fread(chars, 1, size, f)) &gt; 0) {
+ xmlParseChunk(ctxt, chars, res, 0);
+ }
+ xmlParseChunk(ctxt, chars, 0, 1);
+ doc = ctxt-&gt;myDoc;
+ xmlFreeParserCtxt(ctxt);
+ }
+ }</pre>
+
+<p>The HTML parser embedded into libxml2 also has a push interface; the
+functions are just prefixed by "html" rather than "xml".</p>
+
+<h3 id="Invoking2">Invoking the parser: the SAX interface</h3>
+
+<p>The tree-building interface makes the parser memory-hungry, first loading
+the document in memory and then building the tree itself. Reading a document
+without building the tree is possible using the SAX interfaces (see SAX.h and
+<a href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">James
+Henstridge's documentation</a>). Note also that the push interface can be
+limited to SAX: just use the two first arguments of
+<code>xmlCreatePushParserCtxt()</code>.</p>
+
+<h3><a name="Building">Building a tree from scratch</a></h3>
+
+<p>The other way to get an XML tree in memory is by building it. Basically
+there is a set of functions dedicated to building new elements. (These are
+also described in &lt;libxml/tree.h&gt;.) For example, here is a piece of
+code that produces the XML document used in the previous examples:</p>
+<pre> #include &lt;libxml/tree.h&gt;
+ xmlDocPtr doc;
+ xmlNodePtr tree, subtree;
+
+ doc = xmlNewDoc("1.0");
+ doc-&gt;children = xmlNewDocNode(doc, NULL, "EXAMPLE", NULL);
+ xmlSetProp(doc-&gt;children, "prop1", "gnome is great");
+ xmlSetProp(doc-&gt;children, "prop2", "&amp; linux too");
+ tree = xmlNewChild(doc-&gt;children, NULL, "head", NULL);
+ subtree = xmlNewChild(tree, NULL, "title", "Welcome to Gnome");
+ tree = xmlNewChild(doc-&gt;children, NULL, "chapter", NULL);
+ subtree = xmlNewChild(tree, NULL, "title", "The Linux adventure");
+ subtree = xmlNewChild(tree, NULL, "p", "bla bla bla ...");
+ subtree = xmlNewChild(tree, NULL, "image", NULL);
+ xmlSetProp(subtree, "href", "linus.gif");</pre>
+
+<p>Not really rocket science ...</p>
+
+<h3><a name="Traversing">Traversing the tree</a></h3>
+
+<p>Basically by <a href="html/libxml-tree.html">including "tree.h"</a> your
+code has access to the internal structure of all the elements of the tree.
+The names should be somewhat simple like <strong>parent</strong>,
+<strong>children</strong>, <strong>next</strong>, <strong>prev</strong>,
+<strong>properties</strong>, etc... For example, still with the previous
+example:</p>
+<pre><code>doc-&gt;children-&gt;children-&gt;children</code></pre>
+
+<p>points to the title element,</p>
+<pre>doc-&gt;children-&gt;children-&gt;next-&gt;children-&gt;children</pre>
+
+<p>points to the text node containing the chapter title "The Linux
+adventure".</p>
+
+<p><strong>NOTE</strong>: XML allows <em>PI</em>s and <em>comments</em> to be
+present before the document root, so <code>doc-&gt;children</code> may point
+to an element which is not the document Root Element; a function
+<code>xmlDocGetRootElement()</code> was added for this purpose.</p>
+
+<h3><a name="Modifying">Modifying the tree</a></h3>
+
+<p>Functions are provided for reading and writing the document content. Here
+is an excerpt from the <a href="html/libxml-tree.html">tree API</a>:</p>
+<dl>
+ <dt><code>xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar *name, const
+ xmlChar *value);</code></dt>
+ <dd><p>This sets (or changes) an attribute carried by an ELEMENT node.
+ The value can be NULL.</p>
+ </dd>
+</dl>
+<dl>
+ <dt><code>const xmlChar *xmlGetProp(xmlNodePtr node, const xmlChar
+ *name);</code></dt>
+ <dd><p>This function returns a pointer to new copy of the property
+ content. Note that the user must deallocate the result.</p>
+ </dd>
+</dl>
+
+<p>Two functions are provided for reading and writing the text associated
+with elements:</p>
+<dl>
+ <dt><code>xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const xmlChar
+ *value);</code></dt>
+ <dd><p>This function takes an "external" string and converts it to one
+ text node or possibly to a list of entity and text nodes. All
+ non-predefined entity references like &amp;Gnome; will be stored
+ internally as entity nodes, hence the result of the function may not be
+ a single node.</p>
+ </dd>
+</dl>
+<dl>
+ <dt><code>xmlChar *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int
+ inLine);</code></dt>
+ <dd><p>This function is the inverse of
+ <code>xmlStringGetNodeList()</code>. It generates a new string
+ containing the content of the text and entity nodes. Note the extra
+ argument inLine. If this argument is set to 1, the function will expand
+ entity references. For example, instead of returning the &amp;Gnome;
+ XML encoding in the string, it will substitute it with its value (say,
+ "GNU Network Object Model Environment").</p>
+ </dd>
+</dl>
+
+<h3><a name="Saving">Saving a tree</a></h3>
+
+<p>Basically 3 options are possible:</p>
+<dl>
+ <dt><code>void xmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int
+ *size);</code></dt>
+ <dd><p>Returns a buffer into which the document has been saved.</p>
+ </dd>
+</dl>
+<dl>
+ <dt><code>extern void xmlDocDump(FILE *f, xmlDocPtr doc);</code></dt>
+ <dd><p>Dumps a document to an open file descriptor.</p>
+ </dd>
+</dl>
+<dl>
+ <dt><code>int xmlSaveFile(const char *filename, xmlDocPtr cur);</code></dt>
+ <dd><p>Saves the document to a file. In this case, the compression
+ interface is triggered if it has been turned on.</p>
+ </dd>
+</dl>
+
+<h3><a name="Compressio">Compression</a></h3>
+
+<p>The library transparently handles compression when doing file-based
+accesses. The level of compression on saves can be turned on either globally
+or individually for one file:</p>
+<dl>
+ <dt><code>int xmlGetDocCompressMode (xmlDocPtr doc);</code></dt>
+ <dd><p>Gets the document compression ratio (0-9).</p>
+ </dd>
+</dl>
+<dl>
+ <dt><code>void xmlSetDocCompressMode (xmlDocPtr doc, int mode);</code></dt>
+ <dd><p>Sets the document compression ratio.</p>
+ </dd>
+</dl>
+<dl>
+ <dt><code>int xmlGetCompressMode(void);</code></dt>
+ <dd><p>Gets the default compression ratio.</p>
+ </dd>
+</dl>
+<dl>
+ <dt><code>void xmlSetCompressMode(int mode);</code></dt>
+ <dd><p>Sets the default compression ratio.</p>
+ </dd>
+</dl>
+
+<h2><a name="Entities">Entities or no entities</a></h2>
+
+<p>Entities in principle are similar to simple C macros. An entity defines an
+abbreviation for a given string that you can reuse many times throughout the
+content of your document. Entities are especially useful when a given string
+may occur frequently within a document, or to confine the change needed to a
+document to a restricted area in the internal subset of the document (at the
+beginning). Example:</p>
+<pre>1 &lt;?xml version="1.0"?&gt;
+2 &lt;!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+3 &lt;!ENTITY xml "Extensible Markup Language"&gt;
+4 ]&gt;
+5 &lt;EXAMPLE&gt;
+6 &amp;xml;
+7 &lt;/EXAMPLE&gt;</pre>
+
+<p>Line 3 declares the xml entity. Line 6 uses the xml entity, by prefixing
+its name with '&amp;' and following it by ';' without any spaces added. There
+are 5 predefined entities in libxml2 allowing you to escape characters with
+predefined meaning in some parts of the xml document content:
+<strong>&amp;lt;</strong> for the character '&lt;', <strong>&amp;gt;</strong>
+for the character '&gt;', <strong>&amp;apos;</strong> for the character ''',
+<strong>&amp;quot;</strong> for the character '"', and
+<strong>&amp;amp;</strong> for the character '&amp;'.</p>
+
+<p>One of the problems related to entities is that you may want the parser to
+substitute an entity's content so that you can see the replacement text in
+your application. Or you may prefer to keep entity references as such in the
+content to be able to save the document back without losing this usually
+precious information (if the user went through the pain of explicitly
+defining entities, he may have a a rather negative attitude if you blindly
+substitute them as saving time). The <a
+href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault()</a>
+function allows you to check and change the behaviour, which is to not
+substitute entities by default.</p>
+
+<p>Here is the DOM tree built by libxml2 for the previous document in the
+default case:</p>
+<pre>/gnome/src/gnome-xml -&gt; ./xmllint --debug test/ent1
+DOCUMENT
+version=1.0
+ ELEMENT EXAMPLE
+ TEXT
+ content=
+ ENTITY_REF
+ INTERNAL_GENERAL_ENTITY xml
+ content=Extensible Markup Language
+ TEXT
+ content=</pre>
+
+<p>And here is the result when substituting entities:</p>
+<pre>/gnome/src/gnome-xml -&gt; ./tester --debug --noent test/ent1
+DOCUMENT
+version=1.0
+ ELEMENT EXAMPLE
+ TEXT
+ content= Extensible Markup Language</pre>
+
+<p>So, entities or no entities? Basically, it depends on your use case. I
+suggest that you keep the non-substituting default behaviour and avoid using
+entities in your XML document or data if you are not willing to handle the
+entity references elements in the DOM tree.</p>
+
+<p>Note that at save time libxml2 enforces the conversion of the predefined
+entities where necessary to prevent well-formedness problems, and will also
+transparently replace those with chars (i.e. it will not generate entity
+reference elements in the DOM tree or call the reference() SAX callback when
+finding them in the input).</p>
+
+<p><span style="background-color: #FF0000">WARNING</span>: handling entities
+on top of the libxml2 SAX interface is difficult!!! If you plan to use
+non-predefined entities in your documents, then the learning curve to handle
+then using the SAX API may be long. If you plan to use complex documents, I
+strongly suggest you consider using the DOM interface instead and let libxml
+deal with the complexity rather than trying to do it yourself.</p>
+
+<h2><a name="Namespaces">Namespaces</a></h2>
+
+<p>The libxml2 library implements <a
+href="http://www.w3.org/TR/REC-xml-names/">XML namespaces</a> support by
+recognizing namespace constructs in the input, and does namespace lookup
+automatically when building the DOM tree. A namespace declaration is
+associated with an in-memory structure and all elements or attributes within
+that namespace point to it. Hence testing the namespace is a simple and fast
+equality operation at the user level.</p>
+
+<p>I suggest that people using libxml2 use a namespace, and declare it in the
+root element of their document as the default namespace. Then they don't need
+to use the prefix in the content but we will have a basis for future semantic
+refinement and merging of data from different sources. This doesn't increase
+the size of the XML output significantly, but significantly increases its
+value in the long-term. Example:</p>
+<pre>&lt;mydoc xmlns="http://mydoc.example.org/schemas/"&gt;
+ &lt;elem1&gt;...&lt;/elem1&gt;
+ &lt;elem2&gt;...&lt;/elem2&gt;
+&lt;/mydoc&gt;</pre>
+
+<p>The namespace value has to be an absolute URL, but the URL doesn't have to
+point to any existing resource on the Web. It will bind all the element and
+attributes with that URL. I suggest to use an URL within a domain you
+control, and that the URL should contain some kind of version information if
+possible. For example, <code>"http://www.gnome.org/gnumeric/1.0/"</code> is a
+good namespace scheme.</p>
+
+<p>Then when you load a file, make sure that a namespace carrying the
+version-independent prefix is installed on the root element of your document,
+and if the version information don't match something you know, warn the user
+and be liberal in what you accept as the input. Also do *not* try to base
+namespace checking on the prefix value. &lt;foo:text&gt; may be exactly the
+same as &lt;bar:text&gt; in another document. What really matters is the URI
+associated with the element or the attribute, not the prefix string (which is
+just a shortcut for the full URI). In libxml, element and attributes have an
+<code>ns</code> field pointing to an xmlNs structure detailing the namespace
+prefix and its URI.</p>
+
+<p>@@Interfaces@@</p>
+<pre>xmlNodePtr node;
+if(!strncmp(node-&gt;name,"mytag",5)
+ &amp;&amp; node-&gt;ns
+ &amp;&amp; !strcmp(node-&gt;ns-&gt;href,"http://www.mysite.com/myns/1.0")) {
+ ...
+}</pre>
+
+<p>Usually people object to using namespaces together with validity checking.
+I will try to make sure that using namespaces won't break validity checking,
+so even if you plan to use or currently are using validation I strongly
+suggest adding namespaces to your document. A default namespace scheme
+<code>xmlns="http://...."</code> should not break validity even on less
+flexible parsers. Using namespaces to mix and differentiate content coming
+from multiple DTDs will certainly break current validation schemes. To check
+such documents one needs to use schema-validation, which is supported in
+libxml2 as well. See <a href="http://www.relaxng.org/">relagx-ng</a> and <a
+href="http://www.w3c.org/XML/Schema">w3c-schema</a>.</p>
+
+<h2><a name="Upgrading">Upgrading 1.x code</a></h2>
+
+<p>Incompatible changes:</p>
+
+<p>Version 2 of libxml2 is the first version introducing serious backward
+incompatible changes. The main goals were:</p>
+<ul>
+ <li>a general cleanup. A number of mistakes inherited from the very early
+ versions couldn't be changed due to compatibility constraints. Example
+ the "childs" element in the nodes.</li>
+ <li>Uniformization of the various nodes, at least for their header and link
+ parts (doc, parent, children, prev, next), the goal is a simpler
+ programming model and simplifying the task of the DOM implementors.</li>
+ <li>better conformances to the XML specification, for example version 1.x
+ had an heuristic to try to detect ignorable white spaces. As a result the
+ SAX event generated were ignorableWhitespace() while the spec requires
+ character() in that case. This also mean that a number of DOM node
+ containing blank text may populate the DOM tree which were not present
+ before.</li>
+</ul>
+
+<h3>How to fix libxml-1.x code:</h3>
+
+<p>So client code of libxml designed to run with version 1.x may have to be
+changed to compile against version 2.x of libxml. Here is a list of changes
+that I have collected, they may not be sufficient, so in case you find other
+change which are required, <a href="mailto:Daniel.Veillard@w3.org">drop me a
+mail</a>:</p>
+<ol>
+ <li>The package name have changed from libxml to libxml2, the library name
+ is now -lxml2 . There is a new xml2-config script which should be used to
+ select the right parameters libxml2</li>
+ <li>Node <strong>childs</strong> field has been renamed
+ <strong>children</strong> so s/childs/children/g should be applied
+ (probability of having "childs" anywhere else is close to 0+</li>
+ <li>The document don't have anymore a <strong>root</strong> element it has
+ been replaced by <strong>children</strong> and usually you will get a
+ list of element here. For example a Dtd element for the internal subset
+ and it's declaration may be found in that list, as well as processing
+ instructions or comments found before or after the document root element.
+ Use <strong>xmlDocGetRootElement(doc)</strong> to get the root element of
+ a document. Alternatively if you are sure to not reference DTDs nor have
+ PIs or comments before or after the root element
+ s/-&gt;root/-&gt;children/g will probably do it.</li>
+ <li>The white space issue, this one is more complex, unless special case of
+ validating parsing, the line breaks and spaces usually used for indenting
+ and formatting the document content becomes significant. So they are
+ reported by SAX and if your using the DOM tree, corresponding nodes are
+ generated. Too approach can be taken:
+ <ol>
+ <li>lazy one, use the compatibility call
+ <strong>xmlKeepBlanksDefault(0)</strong> but be aware that you are
+ relying on a special (and possibly broken) set of heuristics of
+ libxml to detect ignorable blanks. Don't complain if it breaks or
+ make your application not 100% clean w.r.t. to it's input.</li>
+ <li>the Right Way: change you code to accept possibly insignificant
+ blanks characters, or have your tree populated with weird blank text
+ nodes. You can spot them using the commodity function
+ <strong>xmlIsBlankNode(node)</strong> returning 1 for such blank
+ nodes.</li>
+ </ol>
+ <p>Note also that with the new default the output functions don't add any
+ extra indentation when saving a tree in order to be able to round trip
+ (read and save) without inflating the document with extra formatting
+ chars.</p>
+ </li>
+ <li>The include path has changed to $prefix/libxml/ and the includes
+ themselves uses this new prefix in includes instructions... If you are
+ using (as expected) the
+ <pre>xml2-config --cflags</pre>
+ <p>output to generate you compile commands this will probably work out of
+ the box</p>
+ </li>
+ <li>xmlDetectCharEncoding takes an extra argument indicating the length in
+ byte of the head of the document available for character detection.</li>
+</ol>
+
+<h3>Ensuring both libxml-1.x and libxml-2.x compatibility</h3>
+
+<p>Two new version of libxml (1.8.11) and libxml2 (2.3.4) have been released
+to allow smooth upgrade of existing libxml v1code while retaining
+compatibility. They offers the following:</p>
+<ol>
+ <li>similar include naming, one should use
+ <strong>#include&lt;libxml/...&gt;</strong> in both cases.</li>
+ <li>similar identifiers defined via macros for the child and root fields:
+ respectively <strong>xmlChildrenNode</strong> and
+ <strong>xmlRootNode</strong></li>
+ <li>a new macro <strong>LIBXML_TEST_VERSION</strong> which should be
+ inserted once in the client code</li>
+</ol>
+
+<p>So the roadmap to upgrade your existing libxml applications is the
+following:</p>
+<ol>
+ <li>install the libxml-1.8.8 (and libxml-devel-1.8.8) packages</li>
+ <li>find all occurrences where the xmlDoc <strong>root</strong> field is
+ used and change it to <strong>xmlRootNode</strong></li>
+ <li>similarly find all occurrences where the xmlNode
+ <strong>childs</strong> field is used and change it to
+ <strong>xmlChildrenNode</strong></li>
+ <li>add a <strong>LIBXML_TEST_VERSION</strong> macro somewhere in your
+ <strong>main()</strong> or in the library init entry point</li>
+ <li>Recompile, check compatibility, it should still work</li>
+ <li>Change your configure script to look first for xml2-config and fall
+ back using xml-config . Use the --cflags and --libs output of the command
+ as the Include and Linking parameters needed to use libxml.</li>
+ <li>install libxml2-2.3.x and libxml2-devel-2.3.x (libxml-1.8.y and
+ libxml-devel-1.8.y can be kept simultaneously)</li>
+ <li>remove your config.cache, relaunch your configuration mechanism, and
+ recompile, if steps 2 and 3 were done right it should compile as-is</li>
+ <li>Test that your application is still running correctly, if not this may
+ be due to extra empty nodes due to formating spaces being kept in libxml2
+ contrary to libxml1, in that case insert xmlKeepBlanksDefault(1) in your
+ code before calling the parser (next to
+ <strong>LIBXML_TEST_VERSION</strong> is a fine place).</li>
+</ol>
+
+<p>Following those steps should work. It worked for some of my own code.</p>
+
+<p>Let me put some emphasis on the fact that there is far more changes from
+libxml 1.x to 2.x than the ones you may have to patch for. The overall code
+has been considerably cleaned up and the conformance to the XML specification
+has been drastically improved too. Don't take those changes as an excuse to
+not upgrade, it may cost a lot on the long term ...</p>
+
+<h2><a name="Thread">Thread safety</a></h2>
+
+<p>Starting with 2.4.7, libxml2 makes provisions to ensure that concurrent
+threads can safely work in parallel parsing different documents. There is
+however a couple of things to do to ensure it:</p>
+<ul>
+ <li>configure the library accordingly using the --with-threads options</li>
+ <li>call xmlInitParser() in the "main" thread before using any of the
+ libxml2 API (except possibly selecting a different memory allocator)</li>
+</ul>
+
+<p>Note that the thread safety cannot be ensured for multiple threads sharing
+the same document, the locking must be done at the application level, libxml
+exports a basic mutex and reentrant mutexes API in &lt;libxml/threads.h&gt;.
+The parts of the library checked for thread safety are:</p>
+<ul>
+ <li>concurrent loading</li>
+ <li>file access resolution</li>
+ <li>catalog access</li>
+ <li>catalog building</li>
+ <li>entities lookup/accesses</li>
+ <li>validation</li>
+ <li>global variables per-thread override</li>
+ <li>memory handling</li>
+</ul>
+
+<p>XPath is supposed to be thread safe now, but this wasn't tested
+seriously.</p>
+
+<h2><a name="DOM"></a><a name="Principles">DOM Principles</a></h2>
+
+<p><a href="http://www.w3.org/DOM/">DOM</a> stands for the <em>Document
+Object Model</em>; this is an API for accessing XML or HTML structured
+documents. Native support for DOM in Gnome is on the way (module gnome-dom),
+and will be based on gnome-xml. This will be a far cleaner interface to
+manipulate XML files within Gnome since it won't expose the internal
+structure.</p>
+
+<p>The current DOM implementation on top of libxml2 is the <a
+href="http://cvs.gnome.org/lxr/source/gdome2/">gdome2 Gnome module</a>, this
+is a full DOM interface, thanks to Paolo Casarini, check the <a
+href="http://www.cs.unibo.it/~casarini/gdome2/">Gdome2 homepage</a> for more
+informations.</p>
+
+<h2><a name="Example"></a><a name="real">A real example</a></h2>
+
+<p>Here is a real size example, where the actual content of the application
+data is not kept in the DOM tree but uses internal structures. It is based on
+a proposal to keep a database of jobs related to Gnome, with an XML based
+storage structure. Here is an <a href="gjobs.xml">XML encoded jobs
+base</a>:</p>
+<pre>&lt;?xml version="1.0"?&gt;
+&lt;gjob:Helping xmlns:gjob="http://www.gnome.org/some-location"&gt;
+ &lt;gjob:Jobs&gt;
+
+ &lt;gjob:Job&gt;
+ &lt;gjob:Project ID="3"/&gt;
+ &lt;gjob:Application&gt;GBackup&lt;/gjob:Application&gt;
+ &lt;gjob:Category&gt;Development&lt;/gjob:Category&gt;
+
+ &lt;gjob:Update&gt;
+ &lt;gjob:Status&gt;Open&lt;/gjob:Status&gt;
+ &lt;gjob:Modified&gt;Mon, 07 Jun 1999 20:27:45 -0400 MET DST&lt;/gjob:Modified&gt;
+ &lt;gjob:Salary&gt;USD 0.00&lt;/gjob:Salary&gt;
+ &lt;/gjob:Update&gt;
+
+ &lt;gjob:Developers&gt;
+ &lt;gjob:Developer&gt;
+ &lt;/gjob:Developer&gt;
+ &lt;/gjob:Developers&gt;
+
+ &lt;gjob:Contact&gt;
+ &lt;gjob:Person&gt;Nathan Clemons&lt;/gjob:Person&gt;
+ &lt;gjob:Email&gt;nathan@windsofstorm.net&lt;/gjob:Email&gt;
+ &lt;gjob:Company&gt;
+ &lt;/gjob:Company&gt;
+ &lt;gjob:Organisation&gt;
+ &lt;/gjob:Organisation&gt;
+ &lt;gjob:Webpage&gt;
+ &lt;/gjob:Webpage&gt;
+ &lt;gjob:Snailmail&gt;
+ &lt;/gjob:Snailmail&gt;
+ &lt;gjob:Phone&gt;
+ &lt;/gjob:Phone&gt;
+ &lt;/gjob:Contact&gt;
+
+ &lt;gjob:Requirements&gt;
+ The program should be released as free software, under the GPL.
+ &lt;/gjob:Requirements&gt;
+
+ &lt;gjob:Skills&gt;
+ &lt;/gjob:Skills&gt;
+
+ &lt;gjob:Details&gt;
+ A GNOME based system that will allow a superuser to configure
+ compressed and uncompressed files and/or file systems to be backed
+ up with a supported media in the system. This should be able to
+ perform via find commands generating a list of files that are passed
+ to tar, dd, cpio, cp, gzip, etc., to be directed to the tape machine
+ or via operations performed on the filesystem itself. Email
+ notification and GUI status display very important.
+ &lt;/gjob:Details&gt;
+
+ &lt;/gjob:Job&gt;
+
+ &lt;/gjob:Jobs&gt;
+&lt;/gjob:Helping&gt;</pre>
+
+<p>While loading the XML file into an internal DOM tree is a matter of
+calling only a couple of functions, browsing the tree to gather the data and
+generate the internal structures is harder, and more error prone.</p>
+
+<p>The suggested principle is to be tolerant with respect to the input
+structure. For example, the ordering of the attributes is not significant,
+the XML specification is clear about it. It's also usually a good idea not to
+depend on the order of the children of a given node, unless it really makes
+things harder. Here is some code to parse the information for a person:</p>
+<pre>/*
+ * A person record
+ */
+typedef struct person {
+ char *name;
+ char *email;
+ char *company;
+ char *organisation;
+ char *smail;
+ char *webPage;
+ char *phone;
+} person, *personPtr;
+
+/*
+ * And the code needed to parse it
+ */
+personPtr parsePerson(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) {
+ personPtr ret = NULL;
+
+DEBUG("parsePerson\n");
+ /*
+ * allocate the struct
+ */
+ ret = (personPtr) malloc(sizeof(person));
+ if (ret == NULL) {
+ fprintf(stderr,"out of memory\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(person));
+
+ /* We don't care what the top level element name is */
+ cur = cur-&gt;xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!strcmp(cur-&gt;name, "Person")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;name = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ if ((!strcmp(cur-&gt;name, "Email")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;email = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ cur = cur-&gt;next;
+ }
+
+ return(ret);
+}</pre>
+
+<p>Here are a couple of things to notice:</p>
+<ul>
+ <li>Usually a recursive parsing style is the more convenient one: XML data
+ is by nature subject to repetitive constructs and usually exhibits highly
+ structured patterns.</li>
+ <li>The two arguments of type <em>xmlDocPtr</em> and <em>xmlNsPtr</em>,
+ i.e. the pointer to the global XML document and the namespace reserved to
+ the application. Document wide information are needed for example to
+ decode entities and it's a good coding practice to define a namespace for
+ your application set of data and test that the element and attributes
+ you're analyzing actually pertains to your application space. This is
+ done by a simple equality test (cur-&gt;ns == ns).</li>
+ <li>To retrieve text and attributes value, you can use the function
+ <em>xmlNodeListGetString</em> to gather all the text and entity reference
+ nodes generated by the DOM output and produce an single text string.</li>
+</ul>
+
+<p>Here is another piece of code used to parse another level of the
+structure:</p>
+<pre>#include &lt;libxml/tree.h&gt;
+/*
+ * a Description for a Job
+ */
+typedef struct job {
+ char *projectID;
+ char *application;
+ char *category;
+ personPtr contact;
+ int nbDevelopers;
+ personPtr developers[100]; /* using dynamic alloc is left as an exercise */
+} job, *jobPtr;
+
+/*
+ * And the code needed to parse it
+ */
+jobPtr parseJob(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) {
+ jobPtr ret = NULL;
+
+DEBUG("parseJob\n");
+ /*
+ * allocate the struct
+ */
+ ret = (jobPtr) malloc(sizeof(job));
+ if (ret == NULL) {
+ fprintf(stderr,"out of memory\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(job));
+
+ /* We don't care what the top level element name is */
+ cur = cur-&gt;xmlChildrenNode;
+ while (cur != NULL) {
+
+ if ((!strcmp(cur-&gt;name, "Project")) &amp;&amp; (cur-&gt;ns == ns)) {
+ ret-&gt;projectID = xmlGetProp(cur, "ID");
+ if (ret-&gt;projectID == NULL) {
+ fprintf(stderr, "Project has no ID\n");
+ }
+ }
+ if ((!strcmp(cur-&gt;name, "Application")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;application = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ if ((!strcmp(cur-&gt;name, "Category")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;category = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
+ if ((!strcmp(cur-&gt;name, "Contact")) &amp;&amp; (cur-&gt;ns == ns))
+ ret-&gt;contact = parsePerson(doc, ns, cur);
+ cur = cur-&gt;next;
+ }
+
+ return(ret);
+}</pre>
+
+<p>Once you are used to it, writing this kind of code is quite simple, but
+boring. Ultimately, it could be possible to write stubbers taking either C
+data structure definitions, a set of XML examples or an XML DTD and produce
+the code needed to import and export the content between C data and XML
+storage. This is left as an exercise to the reader :-)</p>
+
+<p>Feel free to use <a href="example/gjobread.c">the code for the full C
+parsing example</a> as a template, it is also available with Makefile in the
+Gnome CVS base under gnome-xml/example</p>
+
+<h2><a name="Contributi">Contributions</a></h2>
+<ul>
+ <li>Bjorn Reese, William Brack and Thomas Broyer have provided a number of
+ patches, Gary Pennington worked on the validation API, threading support
+ and Solaris port.</li>
+ <li>John Fleck helps maintaining the documentation and man pages.</li>
+ <li><a href="mailto:igor@zlatkovic.com">Igor Zlatkovic</a> is now the
+ maintainer of the Windows port, <a
+ href="http://www.zlatkovic.com/projects/libxml/index.html">he provides
+ binaries</a></li>
+ <li><a href="mailto:Gary.Pennington@sun.com">Gary Pennington</a> provides
+ <a href="http://garypennington.net/libxml2/">Solaris binaries</a></li>
+ <li><a
+ href="http://mail.gnome.org/archives/xml/2001-March/msg00014.html">Matt
+ Sergeant</a> developed <a
+ href="http://axkit.org/download/">XML::LibXSLT</a>, a Perl wrapper for
+ libxml2/libxslt as part of the <a href="http://axkit.com/">AxKit XML
+ application server</a></li>
+ <li><a href="mailto:fnatter@gmx.net">Felix Natter</a> and <a
+ href="mailto:geertk@ai.rug.nl">Geert Kloosterman</a> provide <a
+ href="libxml-doc.el">an emacs module</a> to lookup libxml(2) functions
+ documentation</li>
+ <li><a href="mailto:sherwin@nlm.nih.gov">Ziying Sherwin</a> provided <a
+ href="http://xmlsoft.org/messages/0488.html">man pages</a></li>
+ <li>there is a module for <a
+ href="http://acs-misc.sourceforge.net/nsxml.html">libxml/libxslt support
+ in OpenNSD/AOLServer</a></li>
+ <li><a href="mailto:dkuhlman@cutter.rexx.com">Dave Kuhlman</a> provided the
+ first version of libxml/libxslt <a
+ href="http://www.rexx.com/~dkuhlman">wrappers for Python</a></li>
+ <li>Petr Kozelka provides <a
+ href="http://sourceforge.net/projects/libxml2-pas">Pascal units to glue
+ libxml2</a> with Kylix and Delphi and other Pascal compilers</li>
+ <li><a href="mailto:aleksey@aleksey.com">Aleksey Sanin</a> implemented the
+ <a href="http://www.w3.org/Signature/">XML Canonicalization and XML
+ Digital Signature</a> <a
+ href="http://www.aleksey.com/xmlsec/">implementations for libxml2</a></li>
+ <li><a href="mailto:Steve.Ball@zveno.com">Steve Ball</a>, <a
+ href="http://www.zveno.com/">Zveno</a> and contributors maintain <a
+ href="http://tclxml.sourceforge.net/">tcl bindings for libxml2 and
+ libxslt</a>, as well as <a
+ href="http://tclxml.sf.net/tkxmllint.html">tkxmllint</a> a GUI for
+ xmllint and <a href="http://tclxml.sf.net/tkxsltproc.html">tkxsltproc</a>
+ a GUI for xsltproc.</li>
+</ul>
+
+<p></p>
+</body>
+</html>
diff --git a/doc/xmlcatalog.1 b/doc/xmlcatalog.1
new file mode 100644
index 0000000..0f3af71
--- /dev/null
+++ b/doc/xmlcatalog.1
@@ -0,0 +1,148 @@
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "XMLCATALOG" 1 "" "" "xmlcatalog Manual"
+.SH NAME
+xmlcatalog \- Command line tool to parse and manipulate XML or SGML catalog files.
+.SH "SYNOPSIS"
+.ad l
+.hy 0
+.HP 11
+\fBxmlcatalog\fR [\fB\-\-shell\fR | \fB\-\-create\fR | \fB\-\-add\ \fItype\fR\ \fIorig\fR\ \fIreplace\fR\fR | \fB\-\-del\ \fIvalues\fR\fR | \fB\-\-noout\fR | \fB\-\-verbose\fR] [\fB\fIcatalogfile\fR\fR] [\fB\fIentities\fR\fR]
+.ad
+.hy
+
+.SH "INTRODUCTION"
+
+.PP
+ xmlcatalog is a command line application allowing users to monitor and manipulate XML and SGML catalogs\&. It is included in libxml2\&.
+
+.PP
+Its functions can be invoked from a single command from the command line, or it can perform multiple functions in interactive mode\&. It can operate on both XML and SGML files\&.
+
+.SH "COMMAND LINE OPTIONS"
+
+.TP
+\fB\-\-shell\fR \fIfilename\fR
+Run a shell allowing interactive queries on catalog file \fIfilename\fR\&.
+
+.TP
+\fB\-\-create\fR \fIfilename\fR
+Create a new XML catalog\&. Outputs to stdout, ignoring \fIfilename\fR unless \fB\-\-noout\fR is used, in which case it creates a new catalog file \fIfilename\fR\&.
+
+.TP
+\fB\-\-add\fR \fI'type'\fR \fI'orig'\fR \fI'replace'\fR \fIfilename\fR
+Add an entry to catalog file \fIfilename\fR\&. \fItype\fR indicates the type of entry\&. Possible types are 'public', 'system', 'rewriteSystem', 'delegatePublic', 'delegateSystem'amd 'rewriteURI'\&. \fI'orig'\fR is the original reference to be replaced, and \fI'replace'\fR is the URI of the replacement entity to be used\&. The \fB\-\-add\fR option will not overwrite \fIfilename\fR, outputing to stdout, unless \fB\-\-noout\fR is used\&. The \fB\-\-add\fR will always take three parameters even if some of the XML catalog constructs will have only a single argument\&.
+
+If the \fB\-\-add\fR option is used following the \fB\-\-sgml\fR option, only a single argument, a \fIfilename\fR, is used\&. This is used to add the name of a catalog file to an SGML supercatalog, a file that contains references to other included SGML catalog files\&.
+
+.TP
+\fB\-\-del\fR \fI'values'\fR \fIfilename\fR
+Remove entries from the catalog file \fIfilename\fR matching \fI'values'\fR\&. The \fB\-\-del\fR option will not overwrite \fIfilename\fR, outputing to stdout, unless \fB\-\-noout\fR is used\&.
+
+.TP
+\fB\-\-noout\fR
+Save output to the named file rather than outputing to stdout\&.
+
+.TP
+\fB\-\-sgml\fR
+Uses SGML Super catalogs for \-\-add and \-\-del options
+
+.TP
+\fB\-v\fR or \fB\-\-verbose\fR
+output debugging information\&.
+
+.SH "SHELL COMMANDS"
+
+.PP
+Invoking xmlcatalog with the \fB\-\-shell\fR \fIfilename\fR option opens a command line shell allowing interactive access to the catalog file identified by \fIfilename\fR\&. Invoking the shell provides a command line prompt after which commands can be entered\&.
+
+.TP
+\fBpublic\fR \fI'PublicID'\fR
+Execute a public identifier lookup of the catalog entry for \fI'PublicID'\fR\&. The corresponding entry will be output to the command line\&.
+
+.TP
+\fBsystem\fR \fI'SystemID'\fR
+Execute a public identifier lookup of the catalog entry for \fI'SystemID'\fR\&. The corresponding entry will be output to the command line\&.
+
+.TP
+\fBadd \fR \fI'type'\fR \fI'orig'\fR \fI'replace'\fR
+Add an entry to the catalog file\&. \fItype\fR indicates the type of entry\&. Possible types are 'public', 'system', 'rewriteSystem', 'delegatePublic' and 'delegateSystem'\&. \fI'orig'\fR is the original reference to be replaced, and \fI'replace'\fR is the URI of the replacement entity to be used\&.
+
+.TP
+\fBdel\fR \fI'values'\fR
+Remove the catalog entry corresponding to \fI'values'\fR\&.
+
+.TP
+\fBdump\fR
+Print the current catalog\&.
+
+.TP
+\fBdebug\fR
+Print debugging statements showing the steps xmlcatalog is executing\&.
+
+.TP
+\fBquiet\fR
+Stop printing debugging statements\&.
+
+.TP
+\fBexit\fR
+Quit the shell\&.
+
+.SH "RETURN VALUES"
+
+.PP
+xmlcatalog's return codes provide information that can be used when calling it from scripts\&.
+
+.PP
+0: normal
+
+.PP
+1: Failed to remove an entry from the catalog
+
+.PP
+2: Failed to save to the catalog, check file permissions
+
+.PP
+3: Failed to add an entry to the catalog
+
+.PP
+4: Failed to lookup and entry in the catalog
+
+.SH "CATALOGS"
+
+.PP
+Catalog behavior can be changed by redirecting queries to the user's own set of catalogs\&. This can be done by setting the \fIXML_CATALOG_FILES\fR environment variable to a list of catalogs\&. An empty one should deactivate loading the default \fI/etc/xml/catalog\fR default catalog\&.
+
+.SH "REFERENCES"
+
+.PP
+libxml web page: \fIhttp://www.xmlsoft.org/\fR
+
+.PP
+libxml catalog support web page:: \fIhttp://www.xmlsoft.org/catalog.html\fR
+
+.PP
+James Clark's SGML catalog page:: \fIhttp://www.jclark.com/sp/catalog.htm\fR
+
+.PP
+OASIS XML catalog specification: : \fIhttp://www.oasis-open.org/committees/entity/spec.html\fR
+
+.SH AUTHOR
+John Fleck.
diff --git a/doc/xmlcatalog_man.html b/doc/xmlcatalog_man.html
new file mode 100644
index 0000000..c27c1ef
--- /dev/null
+++ b/doc/xmlcatalog_man.html
@@ -0,0 +1,101 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xmlcatalog</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2431614"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xmlcatalog &#8212; Command line tool to parse and manipulate <span class="acronym">XML</span> or
+ <span class="acronym">SGML</span> catalog files.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xmlcatalog</tt> [[--shell] | [--create] | [--add <i class="replaceable"><tt>type</tt></i>
+ <i class="replaceable"><tt>orig</tt></i> <i class="replaceable"><tt>replace</tt></i>] | [--del <i class="replaceable"><tt>values</tt></i>] | [--noout] | [--verbose]] [<tt class="option"><i class="replaceable"><tt>catalogfile</tt></i></tt>] [<tt class="option"><i class="replaceable"><tt>entities</tt></i></tt>]</p></div></div><div class="refsect1" lang="en"><a name="introduction"></a><h2>Introduction</h2><p>
+ <span class="application">xmlcatalog</span> is a command line application
+ allowing users to monitor and manipulate <span class="acronym">XML</span> and
+ <span class="acronym">SGML</span> catalogs. It is included in
+ <span class="application">libxml2</span>.
+ </p><p>
+ Its functions can be invoked from a single command from the command line,
+ or it can perform multiple functions in interactive mode. It can operate
+ on both <span class="acronym">XML</span> and <span class="acronym">SGML</span> files.
+ </p></div><div class="refsect1" lang="en"><a name="cloptions"></a><h2>Command Line Options</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">--shell</tt> <i class="replaceable"><tt>filename</tt></i></span></dt><dd>
+ Run a shell
+ allowing interactive queries on catalog file
+ <i class="replaceable"><tt>filename</tt></i>.
+ </dd><dt><span class="term"><tt class="option">--create</tt> <i class="replaceable"><tt>filename</tt></i></span></dt><dd>
+ Create a new
+ <span class="acronym">XML</span> catalog. Outputs to stdout, ignoring
+ <i class="replaceable"><tt>filename</tt></i> unless <tt class="option">--noout</tt> is
+ used, in which case it creates a new catalog file
+ <i class="replaceable"><tt>filename</tt></i>.
+ </dd><dt><span class="term"><tt class="option">--add</tt> <i class="replaceable"><tt>'type'</tt></i> <i class="replaceable"><tt>'orig'</tt></i> <i class="replaceable"><tt>'replace'</tt></i> <i class="replaceable"><tt>filename</tt></i></span></dt><dd><p>
+ Add an entry to catalog file
+ <tt class="filename">filename</tt>. <i class="replaceable"><tt>type</tt></i>
+ indicates the type of entry. Possible types are 'public', 'system',
+ 'rewriteSystem', 'delegatePublic', 'delegateSystem'amd
+ 'rewriteURI'. <i class="replaceable"><tt>'orig'</tt></i> is the original
+ reference to be replaced, and <i class="replaceable"><tt>'replace'</tt></i>
+ is the <span class="acronym">URI</span> of the replacement entity to be
+ used. The <tt class="option">--add</tt> option will not overwrite
+ <i class="replaceable"><tt>filename</tt></i>, outputing to stdout, unless
+ <tt class="option">--noout</tt> is used. The <tt class="option">--add</tt> will
+ always take three parameters even if some of the
+ <span class="acronym">XML</span> catalog constructs will have only a single
+ argument.
+
+ </p><p>
+ If the <tt class="option">--add</tt> option is used following the
+ <tt class="option">--sgml</tt> option, only a single argument, a
+ <i class="replaceable"><tt>filename</tt></i>, is used. This is used to add
+ the name of a catalog file to an <span class="acronym">SGML</span>
+ supercatalog, a file that contains references to other included
+ <span class="acronym">SGML</span> catalog files.
+ </p></dd><dt><span class="term"><tt class="option">--del</tt> <i class="replaceable"><tt>'values'</tt></i> <i class="replaceable"><tt>filename</tt></i></span></dt><dd>
+ Remove entries from the catalog file
+ <i class="replaceable"><tt>filename</tt></i> matching
+ <i class="replaceable"><tt>'values'</tt></i>. The <tt class="option">--del</tt> option
+ will not overwrite <i class="replaceable"><tt>filename</tt></i>, outputing to
+ stdout, unless <tt class="option">--noout</tt> is used.
+ </dd><dt><span class="term"><tt class="option">--noout</tt></span></dt><dd>
+ Save output to the named file rather than
+ outputing to stdout.
+ </dd><dt><span class="term"><tt class="option">--sgml</tt></span></dt><dd>
+ Uses SGML Super catalogs for --add and --del options
+ </dd><dt><span class="term"><tt class="option">-v</tt> or <tt class="option">--verbose</tt></span></dt><dd>
+ output debugging
+ information.
+ </dd></dl></div></div><div class="refsect1" lang="en"><a name="shell"></a><h2>Shell Commands</h2><p>Invoking <span class="application">xmlcatalog</span> with the
+ <tt class="option">--shell</tt> <i class="replaceable"><tt>filename</tt></i> option opens
+ a command line shell allowing interactive access to the catalog file
+ identified by <i class="replaceable"><tt>filename</tt></i>. Invoking the shell
+ provides a command line prompt after which commands can be entered.
+ </p><div class="variablelist"><dl><dt><span class="term"><tt class="option">public</tt> <i class="replaceable"><tt>'PublicID'</tt></i></span></dt><dd>
+ Execute a
+ public identifier lookup of the catalog entry for
+ <i class="replaceable"><tt>'PublicID'</tt></i>. The corresponding entry will be
+ output to the command line.
+ </dd><dt><span class="term"><tt class="option">system</tt> <i class="replaceable"><tt>'SystemID'</tt></i></span></dt><dd>
+ Execute a
+ public identifier lookup of the catalog entry for
+ <i class="replaceable"><tt>'SystemID'</tt></i>. The corresponding entry will be
+ output to the command line.
+ </dd><dt><span class="term"><tt class="option">add </tt> <i class="replaceable"><tt>'type'</tt></i> <i class="replaceable"><tt>'orig'</tt></i> <i class="replaceable"><tt>'replace'</tt></i></span></dt><dd>
+ Add an entry to the catalog
+ file. <i class="replaceable"><tt>type</tt></i> indicates the type of
+ entry. Possible types are 'public', 'system', 'rewriteSystem',
+ 'delegatePublic' and 'delegateSystem'. <i class="replaceable"><tt>'orig'</tt></i>
+ is the original reference to be replaced, and
+ <i class="replaceable"><tt>'replace'</tt></i> is the <span class="acronym">URI</span> of the
+ replacement entity to be used.
+ </dd><dt><span class="term"><tt class="option">del</tt> <i class="replaceable"><tt>'values'</tt></i></span></dt><dd>
+ Remove the
+ catalog entry corresponding to <i class="replaceable"><tt>'values'</tt></i>.
+ </dd><dt><span class="term"><tt class="option">dump</tt></span></dt><dd>
+ Print the current catalog.
+ </dd><dt><span class="term"><tt class="option">debug</tt></span></dt><dd>
+ Print debugging statements showing the steps
+ <span class="application">xmlcatalog</span> is executing.
+ </dd><dt><span class="term"><tt class="option">quiet</tt></span></dt><dd>
+ Stop printing debugging statements.
+ </dd><dt><span class="term"><tt class="option">exit</tt></span></dt><dd>
+ Quit the shell.
+ </dd></dl></div></div><div class="refsect1" lang="en"><a name="return"></a><h2>Return values</h2><p><span class="application">xmlcatalog</span>'s return codes provide
+ information that can be used when calling it from scripts.</p><p>0: normal</p><p>1: Failed to remove an entry from the catalog</p><p>2: Failed to save to the catalog, check file permissions</p><p>3: Failed to add an entry to the catalog</p><p>4: Failed to lookup and entry in the catalog</p></div><div class="refsect1" lang="en"><h2>Catalogs</h2><p>Catalog behavior can be changed by redirecting
+ queries to the user's own set of catalogs. This can be done by setting the
+ <tt class="varname">XML_CATALOG_FILES</tt> environment variable to a list of
+ catalogs. An empty one should deactivate loading the default
+ <tt class="filename">/etc/xml/catalog</tt> default catalog.</p></div><div class="refsect1" lang="en"><h2>References</h2><p><a href="http://www.xmlsoft.org/" target="_top">libxml web page</a></p><p><a href="http://www.xmlsoft.org/catalog.html" target="_top"><span class="application">libxml</span>
+ catalog support web page:</a></p><p><a href="http://www.jclark.com/sp/catalog.htm" target="_top">James Clark's
+ <span class="acronym">SGML</span> catalog page:</a></p><p><a href="http://www.oasis-open.org/committees/entity/spec.html" target="_top"><span class="acronym">OASIS</span>
+ <span class="acronym">XML</span> catalog specification: </a></p></div></div></body></html>
diff --git a/doc/xmlcatalog_man.xml b/doc/xmlcatalog_man.xml
new file mode 100644
index 0000000..47ef084
--- /dev/null
+++ b/doc/xmlcatalog_man.xml
@@ -0,0 +1,298 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl"
+ href="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+]>
+<refentry>
+ <refentryinfo>
+ <title>xmlcatalog Manual</title>
+ <copyright>
+ <year>2001</year>
+ </copyright>
+ <copyright>
+ <year>2004</year>
+ </copyright>
+ <author>
+ <firstname>John</firstname>
+ <surname>Fleck</surname>
+ </author>
+ <address><email>jfleck@inkstain.net</email></address>
+
+ <releaseinfo>This is release 0.3 of the xmlcatalog Manual.</releaseinfo>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>xmlcatalog</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>xmlcatalog</refname>
+ <refpurpose>Command line tool to parse and manipulate <acronym>XML</acronym> or
+ <acronym>SGML</acronym> catalog files.</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>xmlcatalog</command>
+ <group>
+ <arg>--shell</arg>
+ <arg>--create</arg>
+ <arg>--add <replaceable>type</replaceable>
+ <replaceable>orig</replaceable> <replaceable>replace</replaceable></arg>
+ <arg>--del <replaceable>values</replaceable></arg>
+ <arg>--noout</arg>
+ <arg>--verbose</arg>
+ </group>
+ <arg><option><replaceable>catalogfile</replaceable></option></arg>
+ <arg><option><replaceable>entities</replaceable></option></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id="introduction">
+ <title>Introduction</title>
+ <para>
+ <application>xmlcatalog</application> is a command line application
+ allowing users to monitor and manipulate <acronym>XML</acronym> and
+ <acronym>SGML</acronym> catalogs. It is included in
+ <application>libxml2</application>.
+ </para>
+
+ <para>
+ Its functions can be invoked from a single command from the command line,
+ or it can perform multiple functions in interactive mode. It can operate
+ on both <acronym>XML</acronym> and <acronym>SGML</acronym> files.
+ </para>
+ </refsect1>
+
+ <refsect1 id="cloptions">
+ <title>Command Line Options</title>
+ <variablelist>
+ <varlistentry>
+ <term><option>--shell</option> <replaceable>filename</replaceable></term>
+ <listitem>
+ <simpara>
+ Run a shell
+ allowing interactive queries on catalog file
+ <replaceable>filename</replaceable>.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--create</option> <replaceable>filename</replaceable></term>
+ <listitem>
+ <simpara>
+ Create a new
+ <acronym>XML</acronym> catalog. Outputs to stdout, ignoring
+ <replaceable>filename</replaceable> unless <option>--noout</option> is
+ used, in which case it creates a new catalog file
+ <replaceable>filename</replaceable>.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--add</option> <replaceable>'type'</replaceable> <replaceable>'orig'</replaceable> <replaceable>'replace'</replaceable> <replaceable>filename</replaceable></term>
+ <listitem>
+ <simpara>
+ Add an entry to catalog file
+ <filename>filename</filename>. <replaceable>type</replaceable>
+ indicates the type of entry. Possible types are 'public', 'system',
+ 'rewriteSystem', 'delegatePublic', 'delegateSystem'amd
+ 'rewriteURI'. <replaceable>'orig'</replaceable> is the original
+ reference to be replaced, and <replaceable>'replace'</replaceable>
+ is the <acronym>URI</acronym> of the replacement entity to be
+ used. The <option>--add</option> option will not overwrite
+ <replaceable>filename</replaceable>, outputing to stdout, unless
+ <option>--noout</option> is used. The <option>--add</option> will
+ always take three parameters even if some of the
+ <acronym>XML</acronym> catalog constructs will have only a single
+ argument.
+<!--
+FIXME - Is my list of possible types correct? Are SGML types the same?
+-->
+ </simpara>
+ <simpara>
+ If the <option>--add</option> option is used following the
+ <option>--sgml</option> option, only a single argument, a
+ <replaceable>filename</replaceable>, is used. This is used to add
+ the name of a catalog file to an <acronym>SGML</acronym>
+ supercatalog, a file that contains references to other included
+ <acronym>SGML</acronym> catalog files.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--del</option> <replaceable>'values'</replaceable> <replaceable>filename</replaceable></term>
+ <listitem>
+ <simpara>
+ Remove entries from the catalog file
+ <replaceable>filename</replaceable> matching
+ <replaceable>'values'</replaceable>. The <option>--del</option> option
+ will not overwrite <replaceable>filename</replaceable>, outputing to
+ stdout, unless <option>--noout</option> is used.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--noout</option></term>
+ <listitem>
+ <simpara>
+ Save output to the named file rather than
+ outputing to stdout.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--sgml</option></term>
+ <listitem>
+ <simpara>
+ Uses SGML Super catalogs for --add and --del options
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v</option> or <option>--verbose</option></term>
+ <listitem>
+ <simpara>
+ output debugging
+ information.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id="shell">
+ <title>Shell Commands</title>
+ <para>Invoking <application>xmlcatalog</application> with the
+ <option>--shell</option> <replaceable>filename</replaceable> option opens
+ a command line shell allowing interactive access to the catalog file
+ identified by <replaceable>filename</replaceable>. Invoking the shell
+ provides a command line prompt after which commands can be entered.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>public</option> <replaceable>'PublicID'</replaceable></term>
+ <listitem>
+ <simpara>
+ Execute a
+ public identifier lookup of the catalog entry for
+ <replaceable>'PublicID'</replaceable>. The corresponding entry will be
+ output to the command line.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>system</option> <replaceable>'SystemID'</replaceable></term>
+ <listitem>
+ <simpara>
+ Execute a
+ public identifier lookup of the catalog entry for
+ <replaceable>'SystemID'</replaceable>. The corresponding entry will be
+ output to the command line.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>add </option> <replaceable>'type'</replaceable> <replaceable>'orig'</replaceable> <replaceable>'replace'</replaceable></term>
+ <listitem>
+ <simpara>
+ Add an entry to the catalog
+ file. <replaceable>type</replaceable> indicates the type of
+ entry. Possible types are 'public', 'system', 'rewriteSystem',
+ 'delegatePublic' and 'delegateSystem'. <replaceable>'orig'</replaceable>
+ is the original reference to be replaced, and
+ <replaceable>'replace'</replaceable> is the <acronym>URI</acronym> of the
+ replacement entity to be used.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>del</option> <replaceable>'values'</replaceable></term>
+ <listitem>
+ <simpara>
+ Remove the
+ catalog entry corresponding to <replaceable>'values'</replaceable>.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>dump</option></term>
+ <listitem>
+ <simpara>
+ Print the current catalog.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>debug</option></term>
+ <listitem>
+ <simpara>
+ Print debugging statements showing the steps
+ <application>xmlcatalog</application> is executing.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>quiet</option></term>
+ <listitem>
+ <simpara>
+ Stop printing debugging statements.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>exit</option></term>
+ <listitem>
+ <simpara>
+ Quit the shell.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ </refsect1>
+
+ <refsect1 id="return">
+ <title>Return values</title>
+ <para><application>xmlcatalog</application>'s return codes provide
+ information that can be used when calling it from scripts.</para>
+
+ <para>0: normal</para>
+ <para>1: Failed to remove an entry from the catalog</para>
+ <para>2: Failed to save to the catalog, check file permissions</para>
+ <para>3: Failed to add an entry to the catalog</para>
+ <para>4: Failed to lookup and entry in the catalog</para>
+ </refsect1>
+ <refsect1>
+ <title>Catalogs</title>
+ <para>Catalog behavior can be changed by redirecting
+ queries to the user's own set of catalogs. This can be done by setting the
+ <varname>XML_CATALOG_FILES</varname> environment variable to a list of
+ catalogs. An empty one should deactivate loading the default
+ <filename>/etc/xml/catalog</filename> default catalog.</para>
+ </refsect1>
+ <refsect1>
+ <title>References</title>
+ <para><ulink url="http://www.xmlsoft.org/">libxml web page</ulink></para>
+
+ <para><ulink url="http://www.xmlsoft.org/catalog.html"><application>libxml</application>
+ catalog support web page:</ulink></para>
+
+ <para><ulink url="http://www.jclark.com/sp/catalog.htm">James Clark's
+ <acronym>SGML</acronym> catalog page:</ulink></para>
+
+ <para><ulink
+ url="http://www.oasis-open.org/committees/entity/spec.html"><acronym>OASIS</acronym>
+ <acronym>XML</acronym> catalog specification: </ulink></para>
+</refsect1>
+
+
+</refentry>
diff --git a/doc/xmldtd.html b/doc/xmldtd.html
new file mode 100644
index 0000000..5287148
--- /dev/null
+++ b/doc/xmldtd.html
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Validation &amp; DTDs</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Validation &amp; DTDs</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="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">News</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></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://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol><li><a href="#General5">General overview</a></li>
+ <li><a href="#definition">The definition</a></li>
+ <li><a href="#Simple">Simple rules</a>
+ <ol><li><a href="#reference">How to reference a DTD from a document</a></li>
+ <li><a href="#Declaring">Declaring elements</a></li>
+ <li><a href="#Declaring1">Declaring attributes</a></li>
+ </ol></li>
+ <li><a href="#Some">Some examples</a></li>
+ <li><a href="#validate">How to validate</a></li>
+ <li><a href="#Other">Other resources</a></li>
+</ol><h3><a name="General5" id="General5">General overview</a></h3><p>Well what is validation and what is a DTD ?</p><p>DTD is the acronym for Document Type Definition. This is a description of
+the content for a family of XML files. This is part of the XML 1.0
+specification, and allows one to describe and verify that a given document
+instance conforms to the set of rules detailing its structure and content.</p><p>Validation is the process of checking a document against a DTD (more
+generally against a set of construction rules).</p><p>The validation process and building DTDs are the two most difficult parts
+of the XML life cycle. Briefly a DTD defines all the possible elements to be
+found within your document, what is the formal shape of your document tree
+(by defining the allowed content of an element; either text, a regular
+expression for the allowed list of children, or mixed content i.e. both text
+and children). The DTD also defines the valid attributes for all elements and
+the types of those attributes.</p><h3><a name="definition1" id="definition1">The definition</a></h3><p>The <a href="http://www.w3.org/TR/REC-xml">W3C XML Recommendation</a> (<a href="http://www.xml.com/axml/axml.html">Tim Bray's annotated version of
+Rev1</a>):</p><ul><li><a href="http://www.w3.org/TR/REC-xml#elemdecls">Declaring
+ elements</a></li>
+ <li><a href="http://www.w3.org/TR/REC-xml#attdecls">Declaring
+ attributes</a></li>
+</ul><p>(unfortunately) all this is inherited from the SGML world, the syntax is
+ancient...</p><h3><a name="Simple1" id="Simple1">Simple rules</a></h3><p>Writing DTDs can be done in many ways. The rules to build them if you need
+something permanent or something which can evolve over time can be radically
+different. Really complex DTDs like DocBook ones are flexible but quite
+harder to design. I will just focus on DTDs for a formats with a fixed simple
+structure. It is just a set of basic rules, and definitely not exhaustive nor
+usable for complex DTD design.</p><h4><a name="reference1" id="reference1">How to reference a DTD from a document</a>:</h4><p>Assuming the top element of the document is <code>spec</code> and the dtd
+is placed in the file <code>mydtd</code> in the subdirectory
+<code>dtds</code> of the directory from where the document were loaded:</p><p><code>&lt;!DOCTYPE spec SYSTEM "dtds/mydtd"&gt;</code></p><p>Notes:</p><ul><li>The system string is actually an URI-Reference (as defined in <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>) so you can use a
+ full URL string indicating the location of your DTD on the Web. This is a
+ really good thing to do if you want others to validate your document.</li>
+ <li>It is also possible to associate a <code>PUBLIC</code> identifier (a
+ magic string) so that the DTD is looked up in catalogs on the client side
+ without having to locate it on the web.</li>
+ <li>A DTD contains a set of element and attribute declarations, but they
+ don't define what the root of the document should be. This is explicitly
+ told to the parser/validator as the first element of the
+ <code>DOCTYPE</code> declaration.</li>
+</ul><h4><a name="Declaring2" id="Declaring2">Declaring elements</a>:</h4><p>The following declares an element <code>spec</code>:</p><p><code>&lt;!ELEMENT spec (front, body, back?)&gt;</code></p><p>It also expresses that the spec element contains one <code>front</code>,
+one <code>body</code> and one optional <code>back</code> children elements in
+this order. The declaration of one element of the structure and its content
+are done in a single declaration. Similarly the following declares
+<code>div1</code> elements:</p><p><code>&lt;!ELEMENT div1 (head, (p | list | note)*, div2?)&gt;</code></p><p>which means div1 contains one <code>head</code> then a series of optional
+<code>p</code>, <code>list</code>s and <code>note</code>s and then an
+optional <code>div2</code>. And last but not least an element can contain
+text:</p><p><code>&lt;!ELEMENT b (#PCDATA)&gt;</code></p><p><code>b</code> contains text or being of mixed content (text and elements
+in no particular order):</p><p><code>&lt;!ELEMENT p (#PCDATA|a|ul|b|i|em)*&gt;</code></p><p><code>p </code>can contain text or <code>a</code>, <code>ul</code>,
+<code>b</code>, <code>i </code>or <code>em</code> elements in no particular
+order.</p><h4><a name="Declaring1" id="Declaring1">Declaring attributes</a>:</h4><p>Again the attributes declaration includes their content definition:</p><p><code>&lt;!ATTLIST termdef name CDATA #IMPLIED&gt;</code></p><p>means that the element <code>termdef</code> can have a <code>name</code>
+attribute containing text (<code>CDATA</code>) and which is optional
+(<code>#IMPLIED</code>). The attribute value can also be defined within a
+set:</p><p><code>&lt;!ATTLIST list type (bullets|ordered|glossary)
+"ordered"&gt;</code></p><p>means <code>list</code> element have a <code>type</code> attribute with 3
+allowed values "bullets", "ordered" or "glossary" and which default to
+"ordered" if the attribute is not explicitly specified.</p><p>The content type of an attribute can be text (<code>CDATA</code>),
+anchor/reference/references
+(<code>ID</code>/<code>IDREF</code>/<code>IDREFS</code>), entity(ies)
+(<code>ENTITY</code>/<code>ENTITIES</code>) or name(s)
+(<code>NMTOKEN</code>/<code>NMTOKENS</code>). The following defines that a
+<code>chapter</code> element can have an optional <code>id</code> attribute
+of type <code>ID</code>, usable for reference from attribute of type
+IDREF:</p><p><code>&lt;!ATTLIST chapter id ID #IMPLIED&gt;</code></p><p>The last value of an attribute definition can be <code>#REQUIRED
+</code>meaning that the attribute has to be given, <code>#IMPLIED</code>
+meaning that it is optional, or the default value (possibly prefixed by
+<code>#FIXED</code> if it is the only allowed).</p><p>Notes:</p><ul><li>Usually the attributes pertaining to a given element are declared in a
+ single expression, but it is just a convention adopted by a lot of DTD
+ writers:
+ <pre>&lt;!ATTLIST termdef
+ id ID #REQUIRED
+ name CDATA #IMPLIED&gt;</pre>
+ <p>The previous construct defines both <code>id</code> and
+ <code>name</code> attributes for the element <code>termdef</code>.</p>
+ </li>
+</ul><h3><a name="Some1" id="Some1">Some examples</a></h3><p>The directory <code>test/valid/dtds/</code> in the libxml2 distribution
+contains some complex DTD examples. The example in the file
+<code>test/valid/dia.xml</code> shows an XML file where the simple DTD is
+directly included within the document.</p><h3><a name="validate1" id="validate1">How to validate</a></h3><p>The simplest way is to use the xmllint program included with libxml. The
+<code>--valid</code> option turns-on validation of the files given as input.
+For example the following validates a copy of the first revision of the XML
+1.0 specification:</p><p><code>xmllint --valid --noout test/valid/REC-xml-19980210.xml</code></p><p>the -- noout is used to disable output of the resulting tree.</p><p>The <code>--dtdvalid dtd</code> allows validation of the document(s)
+against a given DTD.</p><p>Libxml2 exports an API to handle DTDs and validation, check the <a href="http://xmlsoft.org/html/libxml-valid.html">associated
+description</a>.</p><h3><a name="Other1" id="Other1">Other resources</a></h3><p>DTDs are as old as SGML. So there may be a number of examples on-line, I
+will just list one for now, others pointers welcome:</p><ul><li><a href="http://www.xml101.com:8081/dtd/">XML-101 DTD</a></li>
+</ul><p>I suggest looking at the examples found under test/valid/dtd and any of
+the large number of books available on XML. The dia example in test/valid
+should be both simple and complete enough to allow you to build your own.</p><p></p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/xmlio.html b/doc/xmlio.html
new file mode 100644
index 0000000..21621b0
--- /dev/null
+++ b/doc/xmlio.html
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>I/O Interfaces</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>I/O Interfaces</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol><li><a href="#General1">General overview</a></li>
+ <li><a href="#basic">The basic buffer type</a></li>
+ <li><a href="#Input">Input I/O handlers</a></li>
+ <li><a href="#Output">Output I/O handlers</a></li>
+ <li><a href="#entities">The entities loader</a></li>
+ <li><a href="#Example2">Example of customized I/O</a></li>
+</ol><h3><a name="General1" id="General1">General overview</a></h3><p>The module <code><a href="http://xmlsoft.org/html/libxml-xmlio.html">xmlIO.h</a></code> provides
+the interfaces to the libxml2 I/O system. This consists of 4 main parts:</p><ul><li>Entities loader, this is a routine which tries to fetch the entities
+ (files) based on their PUBLIC and SYSTEM identifiers. The default loader
+ don't look at the public identifier since libxml2 do not maintain a
+ catalog. You can redefine you own entity loader by using
+ <code>xmlGetExternalEntityLoader()</code> and
+ <code>xmlSetExternalEntityLoader()</code>. <a href="#entities">Check the
+ example</a>.</li>
+ <li>Input I/O buffers which are a commodity structure used by the parser(s)
+ input layer to handle fetching the informations to feed the parser. This
+ provides buffering and is also a placeholder where the encoding
+ converters to UTF8 are piggy-backed.</li>
+ <li>Output I/O buffers are similar to the Input ones and fulfill similar
+ task but when generating a serialization from a tree.</li>
+ <li>A mechanism to register sets of I/O callbacks and associate them with
+ specific naming schemes like the protocol part of the URIs.
+ <p>This affect the default I/O operations and allows to use specific I/O
+ handlers for certain names.</p>
+ </li>
+</ul><p>The general mechanism used when loading http://rpmfind.net/xml.html for
+example in the HTML parser is the following:</p><ol><li>The default entity loader calls <code>xmlNewInputFromFile()</code> with
+ the parsing context and the URI string.</li>
+ <li>the URI string is checked against the existing registered handlers
+ using their match() callback function, if the HTTP module was compiled
+ in, it is registered and its match() function will succeeds</li>
+ <li>the open() function of the handler is called and if successful will
+ return an I/O Input buffer</li>
+ <li>the parser will the start reading from this buffer and progressively
+ fetch information from the resource, calling the read() function of the
+ handler until the resource is exhausted</li>
+ <li>if an encoding change is detected it will be installed on the input
+ buffer, providing buffering and efficient use of the conversion
+ routines</li>
+ <li>once the parser has finished, the close() function of the handler is
+ called once and the Input buffer and associated resources are
+ deallocated.</li>
+</ol><p>The user defined callbacks are checked first to allow overriding of the
+default libxml2 I/O routines.</p><h3><a name="basic" id="basic">The basic buffer type</a></h3><p>All the buffer manipulation handling is done using the
+<code>xmlBuffer</code> type define in <code><a href="http://xmlsoft.org/html/libxml-tree.html">tree.h</a> </code>which is a
+resizable memory buffer. The buffer allocation strategy can be selected to be
+either best-fit or use an exponential doubling one (CPU vs. memory use
+trade-off). The values are <code>XML_BUFFER_ALLOC_EXACT</code> and
+<code>XML_BUFFER_ALLOC_DOUBLEIT</code>, and can be set individually or on a
+system wide basis using <code>xmlBufferSetAllocationScheme()</code>. A number
+of functions allows to manipulate buffers with names starting with the
+<code>xmlBuffer...</code> prefix.</p><h3><a name="Input" id="Input">Input I/O handlers</a></h3><p>An Input I/O handler is a simple structure
+<code>xmlParserInputBuffer</code> containing a context associated to the
+resource (file descriptor, or pointer to a protocol handler), the read() and
+close() callbacks to use and an xmlBuffer. And extra xmlBuffer and a charset
+encoding handler are also present to support charset conversion when
+needed.</p><h3><a name="Output" id="Output">Output I/O handlers</a></h3><p>An Output handler <code>xmlOutputBuffer</code> is completely similar to an
+Input one except the callbacks are write() and close().</p><h3><a name="entities" id="entities">The entities loader</a></h3><p>The entity loader resolves requests for new entities and create inputs for
+the parser. Creating an input from a filename or an URI string is done
+through the xmlNewInputFromFile() routine. The default entity loader do not
+handle the PUBLIC identifier associated with an entity (if any). So it just
+calls xmlNewInputFromFile() with the SYSTEM identifier (which is mandatory in
+XML).</p><p>If you want to hook up a catalog mechanism then you simply need to
+override the default entity loader, here is an example:</p><pre>#include &lt;libxml/xmlIO.h&gt;
+
+xmlExternalEntityLoader defaultLoader = NULL;
+
+xmlParserInputPtr
+xmlMyExternalEntityLoader(const char *URL, const char *ID,
+ xmlParserCtxtPtr ctxt) {
+ xmlParserInputPtr ret;
+ const char *fileID = NULL;
+ /* lookup for the fileID depending on ID */
+
+ ret = xmlNewInputFromFile(ctxt, fileID);
+ if (ret != NULL)
+ return(ret);
+ if (defaultLoader != NULL)
+ ret = defaultLoader(URL, ID, ctxt);
+ return(ret);
+}
+
+int main(..) {
+ ...
+
+ /*
+ * Install our own entity loader
+ */
+ defaultLoader = xmlGetExternalEntityLoader();
+ xmlSetExternalEntityLoader(xmlMyExternalEntityLoader);
+
+ ...
+}</pre><h3><a name="Example2" id="Example2">Example of customized I/O</a></h3><p>This example come from <a href="http://xmlsoft.org/messages/0708.html">a
+real use case</a>, xmlDocDump() closes the FILE * passed by the application
+and this was a problem. The <a href="http://xmlsoft.org/messages/0711.html">solution</a> was to redefine a
+new output handler with the closing call deactivated:</p><ol><li>First define a new I/O output allocator where the output don't close
+ the file:
+ <pre>xmlOutputBufferPtr
+xmlOutputBufferCreateOwn(FILE *file, xmlCharEncodingHandlerPtr encoder) {
+    xmlOutputBufferPtr ret;
+    
+    if (xmlOutputCallbackInitialized == 0)
+        xmlRegisterDefaultOutputCallbacks();
+
+    if (file == NULL) return(NULL);
+    ret = xmlAllocOutputBuffer(encoder);
+    if (ret != NULL) {
+        ret-&gt;context = file;
+        ret-&gt;writecallback = xmlFileWrite;
+        ret-&gt;closecallback = NULL; /* No close callback */
+    }
+    return(ret);
+} </pre>
+ </li>
+ <li>And then use it to save the document:
+ <pre>FILE *f;
+xmlOutputBufferPtr output;
+xmlDocPtr doc;
+int res;
+
+f = ...
+doc = ....
+
+output = xmlOutputBufferCreateOwn(f, NULL);
+res = xmlSaveFileTo(output, doc, NULL);
+ </pre>
+ </li>
+</ol><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/xmllint.1 b/doc/xmllint.1
new file mode 100644
index 0000000..feff3df
--- /dev/null
+++ b/doc/xmllint.1
@@ -0,0 +1,281 @@
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "XMLLINT" 1 "" "" "xmllint Manual"
+.SH NAME
+xmllint \- command line XML tool
+.SH "SYNOPSIS"
+.ad l
+.hy 0
+.HP 8
+\fBxmllint\fR [\fB\-\-version\fR | \fB\-\-debug\fR | \fB\-\-shell\fR | \fB\-\-debugent\fR | \fB\-\-copy\fR | \fB\-\-recover\fR | \fB\-\-noent\fR | \fB\-\-nocdata\fR | \fB\-\-nsclean\fR | \fB\-\-noout\fR | \fB\-\-htmlout\fR | \fB\-\-nowrap\fR | \fB\-\-valid\fR | \fB\-\-postvalid\fR | \fB\-\-dtdvalid\ \fIURL\fR\fR | \fB\-\-dtdvalidfpi\ \fIFPI\fR\fR | \fB\-\-timing\fR | \fB\-\-repeat\fR | \fB\-\-insert\fR | \fB\-\-compress\fR | \fB\-\-html\fR | \fB\-\-push\fR | \fB\-\-memory\fR | \fB\-\-nowarning\fR | \fB\-\-noblanks\fR | \fB\-\-format\fR | \fB\-\-testIO\fR | \fB\-\-encode\ \fIencoding\fR\fR | \fB\-\-catalogs\fR | \fB\-\-nocatalogs\fR | \fB\-\-auto\fR | \fB\-\-xinclude\fR | \fB\-\-loaddtd\fR | \fB\-\-dtdattr\fR | \fB\-\-dropdtd\fR | \fB\-\-stream\fR | \fB\-\-chkregister\fR | \fB\-\-relaxng\fR | \fB\-\-schema\fR | \fB\-\-nonet\fR] [\fB\fIxmlfile\fR\fR]
+.ad
+.hy
+
+.SH "INTRODUCTION"
+
+.PP
+The xmllint program parses one or more XML files, specified on the command line as \fIxmlfile\fR\&. It prints various types of output, depending upon the options selected\&. It is useful for detecting errors both in XML code and in the XML parser itself\&.
+
+.PP
+It is included in libxml2\&.
+
+.SH "OPTIONS"
+
+.TP
+\fB\-\-version\fR
+Display the version of libxml2 used\&.
+
+.TP
+\fB\-\-debug\fR
+Parse a file and output an annotated tree of the in\-memory version of the document\&.
+
+.TP
+\fB\-\-shell\fR
+Run a navigating shell\&. Details on available commands in shell mode are below\&.
+
+.TP
+\fB\-\-debugent\fR
+Debug the entities defined in the document\&.
+
+.TP
+\fB\-\-copy\fR
+Test the internal copy implementation\&.
+
+.TP
+\fB\-\-recover\fR
+Output any parsable portions of an invalid document\&.
+
+.TP
+\fB\-\-noent\fR
+Substitute entity values for entity references\&. By default, xmllint leaves entity references in place\&.
+
+.TP
+\fB\-\-nocdata\fR
+Substitute CDATA section by equivalent text nodes\&.
+
+.TP
+\fB\-\-nsclean\fR
+Remove redundant namespace declarations\&.
+
+.TP
+\fB\-\-noout\fR
+Suppress output\&. By default, xmllint outputs the result tree\&.
+
+.TP
+\fB\-\-htmlout\fR
+Output results as an HTML file\&. This causes xmllint to output the necessary HTML tags surrounding the result tree output so the results can be displayed in a browser\&.
+
+.TP
+\fB\-\-nowrap \fR
+Do not output HTML doc wrapper\&.
+
+.TP
+\fB\-\-valid \fR
+Determine if the document is a valid instance of the included Document Type Definition (DTD)\&. A DTD to be validated against also can be specified at the command line using the \fB\-\-dtdvalid\fR option\&. By default, xmllint also checks to determine if the document is well\-formed\&.
+
+.TP
+\fB\-\-postvalid\fR
+Validate after parsing is completed\&.
+
+.TP
+\fB\-\-dtdvalid\fR \fIURL\fR
+Use the DTD specified by \fIURL\fR for validation\&.
+
+.TP
+\fB\-\-dtdvalidfpi\fR \fIFPI\fR
+Use the DTD specified by the Public Identifier \fIFPI\fR for validation, note that this will require a Catalog exporting that Public Identifier to work\&.
+
+.TP
+\fB\-\-timing\fR
+Output information about the time it takes xmllint to perform the various steps\&.
+
+.TP
+\fB\-\-repeat\fR
+Repeat 100 times, for timing or profiling\&.
+
+.TP
+\fB\-\-insert\fR
+Test for valid insertions\&.
+
+.TP
+\fB\-\-compress\fR
+Turn on gzip compression of output\&.
+
+.TP
+\fB\-\-html\fR
+Use the HTML parser\&.
+
+.TP
+\fB\-\-push\fR
+Use the push mode of the parser\&.
+
+.TP
+\fB\-\-memory\fR
+Parse from memory\&.
+
+.TP
+\fB\-\-nowarning\fR
+Do not emit warnings from the parser and/or validator\&.
+
+.TP
+\fB\-\-noblanks\fR
+Drop ignorable blank spaces\&.
+
+.TP
+\fB\-\-format\fR
+Reformat and reindent the output\&. The $XMLLINT_INDENT environment variable controls the indentation (default value is two spaces " ")\&.
+
+.TP
+\fB\-\-testIO\fR
+Test user input/output support\&.
+
+.TP
+\fB\-\-encode\fR \fIencoding\fR
+Output in the given encoding\&.
+
+.TP
+\fB\-\-catalogs\fR
+Use the catalogs from $SGML_CATALOG_FILES\&. Otherwise /etc/xml/catalog is used by default\&.
+
+.TP
+\fB\-\-nocatalogs\fR
+Do not use any catalogs\&.
+
+.TP
+\fB\-\-auto\fR
+Generate a small document for testing purposes\&.
+
+.TP
+\fB\-\-xinclude\fR
+Do XInclude processing\&.
+
+.TP
+\fB\-\-loaddtd\fR
+Fetch external DTD\&.
+
+.TP
+\fB\-\-dtdattr\fR
+Fetch external DTD and populate the tree with inherited attributes\&.
+
+.TP
+\fB\-\-dropdtd\fR
+Remove DTD from output\&.
+
+.TP
+\fB\-\-stream\fR
+Use streaming API \- useful when used in combination with \-\-relaxng or \-\-valid options for validation of files that are too large to be held in memory\&.
+
+.TP
+\fB\-\-chkregister\fR
+Turn on node registration\&. Useful for developeres testing libxml2 node tracking code\&.
+
+.TP
+\fB\-\-relaxng\fR \fIschema\fR
+Use RelaxNG file named \fIschema\fR for validation\&.
+
+.TP
+\fB\-\-schema\fR \fIschema\fR
+Use a W3C XML Schema file named \fIschema\fR for validation\&.
+
+.TP
+\fB\-\-nonet\fR
+Do not use the Internet to fetch DTD's or entities\&.
+
+.SH "SHELL"
+
+.PP
+ xmllint offers an interactive shell mode invoked with the \fB\-\-shell\fR command\&. Available commands in shell mode include:
+
+.TP
+\fBbase\fR
+display XML base of the node
+
+.TP
+\fBbye\fR
+leave shell
+
+.TP
+\fBcat \fInode\fR\fR
+Display node if given or current node\&.
+
+.TP
+\fBcd \fIpath\fR\fR
+Change the current node to \fIpath\fR (if given and unique) or root if no argument given\&.
+
+.TP
+\fBdir \fIpath\fR\fR
+Dumps information about the node (namespace, attributes, content)\&.
+
+.TP
+\fBdu \fIpath\fR\fR
+Show the structure of the subtree under path or the current node\&.
+
+.TP
+\fBexit\fR
+Leave the shell\&.
+
+.TP
+\fBhelp\fR
+Show this help\&.
+
+.TP
+\fBfree\fR
+Display memory usage\&.
+
+.TP
+\fBload \fIname\fR\fR
+Load a new document with the given name\&.
+
+.TP
+\fBls \fIpath\fR\fR
+List contents of \fIpath\fR (if given) or the current directory\&.
+
+.TP
+\fBpwd\fR
+Display the path to the current node\&.
+
+.TP
+\fBquit\fR
+Leave the shell\&.
+
+.TP
+\fBsave \fIname\fR\fR
+Saves the current document to \fIname\fR if given or to the original name\&.
+
+.TP
+\fBvalidate\fR
+Check the document for error\&.
+
+.TP
+\fBwrite \fIname\fR\fR
+Write the current node to the given filename\&.
+
+.SH "CATALOGS"
+
+.PP
+Catalog behavior can be changed by redirecting queries to the user's own set of catalogs\&. This can be done by setting the \fIXML_CATALOG_FILES\fR environment variable to a list of catalogs\&. An empty one should deactivate loading the default \fI/etc/xml/catalog\fR default catalog\&.
+
+.SH "DEBUGGING CATALOGS"
+
+.PP
+Setting the environment variable \fIXML_DEBUG_CATALOG\fR using the command \fB"export XML_DEBUG_CATALOG="\fR outputs debugging information related to catalog operations\&.
+
+.SH AUTHORS
+John Fleck, Ziying Sherwin, Heiko Rupp.
diff --git a/doc/xmllint.html b/doc/xmllint.html
new file mode 100644
index 0000000..855eaf7
--- /dev/null
+++ b/doc/xmllint.html
@@ -0,0 +1,153 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xmllint</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="id2431614"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2>Name</h2><p>xmllint &#8212; command line <span class="acronym">XML</span> tool</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><tt class="command">xmllint</tt> [[--version] | [--debug] | [--shell] | [--debugent] | [--copy] | [--recover] | [--noent] | [--nocdata] | [--nsclean] | [--noout] | [--htmlout] | [--nowrap] | [--valid] | [--postvalid] | [--dtdvalid <i class="replaceable"><tt>URL</tt></i>] | [--dtdvalidfpi <i class="replaceable"><tt>FPI</tt></i>] | [--timing] | [--repeat] | [--insert] | [--compress] | [--html] | [--push] | [--memory] | [--nowarning] | [--noblanks] | [--format] | [--testIO] | [--encode <i class="replaceable"><tt>encoding</tt></i>] | [--catalogs] | [--nocatalogs] | [--auto] | [--xinclude] | [--loaddtd] | [--dtdattr] | [--dropdtd] | [--stream] | [--chkregister] | [--relaxng] | [--schema] | [--nonet]] [<tt class="option"><i class="replaceable"><tt>xmlfile</tt></i></tt>]</p></div></div><div class="refsect1" lang="en"><a name="introduction"></a><h2>Introduction</h2><p>
+ The xmllint program parses one or more XML files, specified on the
+ command line as <i class="replaceable"><tt>xmlfile</tt></i>. It prints various
+ types of output, depending upon the options selected. It is useful for
+ detecting errors both in <span class="acronym">XML</span> code and in the
+ <span class="acronym">XML</span> parser itself.
+ </p><p>
+ It is included in <span class="application">libxml2</span>.
+ </p></div><div class="refsect1" lang="en"><a name="options"></a><h2>Options</h2><div class="variablelist"><dl><dt><span class="term"><tt class="option">--version</tt></span></dt><dd>
+ Display the version of
+ <span class="application">libxml2</span> used.
+ </dd><dt><span class="term"><tt class="option">--debug</tt></span></dt><dd>
+ Parse a file and output an annotated tree of the
+ in-memory version of the document.
+ </dd><dt><span class="term"><tt class="option">--shell</tt></span></dt><dd>
+ Run a navigating shell. Details on available commands in shell mode
+ are below.
+ </dd><dt><span class="term"><tt class="option">--debugent</tt></span></dt><dd>
+ Debug the entities defined in the document.
+ </dd><dt><span class="term"><tt class="option">--copy</tt> </span></dt><dd>
+ Test the internal copy implementation.
+ </dd><dt><span class="term"><tt class="option">--recover</tt></span></dt><dd>
+ Output any parsable portions of an invalid
+ document.
+ </dd><dt><span class="term"><tt class="option">--noent</tt></span></dt><dd>
+ Substitute entity values for entity
+ references. By default, <span class="application">xmllint</span> leaves entity
+ references in place.
+ </dd><dt><span class="term"><tt class="option">--nocdata</tt></span></dt><dd>
+ Substitute CDATA section by equivalent text nodes.
+ </dd><dt><span class="term"><tt class="option">--nsclean</tt></span></dt><dd>
+ Remove redundant namespace declarations.
+ </dd><dt><span class="term"><tt class="option">--noout</tt></span></dt><dd>
+ Suppress output. By default,
+ <span class="application">xmllint</span> outputs the result tree.
+ </dd><dt><span class="term"><tt class="option">--htmlout</tt></span></dt><dd>
+ Output results as an <span class="acronym">HTML</span>
+ file. This causes <span class="application">xmllint</span> to output
+ the necessary <span class="acronym">HTML</span> tags surrounding the result tree
+ output so the results can be displayed in a browser.
+ </dd><dt><span class="term"><tt class="option">--nowrap </tt></span></dt><dd>
+ Do not output HTML doc wrapper.
+ </dd><dt><span class="term"><tt class="option">--valid </tt></span></dt><dd>
+ Determine if the document is a valid instance
+ of the included Document Type Definition (<span class="acronym">DTD</span>). A
+ <span class="acronym">DTD</span> to be validated against also can be specified at
+ the command line using the <tt class="option">--dtdvalid</tt> option. By default,
+ <span class="application">xmllint</span> also checks to determine if the
+ document is well-formed.
+ </dd><dt><span class="term"><tt class="option">--postvalid</tt></span></dt><dd>
+ Validate after parsing is completed.
+ </dd><dt><span class="term"> <tt class="option">--dtdvalid</tt> <i class="replaceable"><tt>URL</tt></i></span></dt><dd>
+ Use the
+ <span class="acronym">DTD</span> specified by <i class="replaceable"><tt>URL</tt></i> for
+ validation.
+ </dd><dt><span class="term"> <tt class="option">--dtdvalidfpi</tt> <i class="replaceable"><tt>FPI</tt></i></span></dt><dd>
+ Use the
+ <span class="acronym">DTD</span> specified by the Public Identifier
+ <i class="replaceable"><tt>FPI</tt></i> for validation, note that this
+ will require a Catalog exporting that Public Identifier to work.
+ </dd><dt><span class="term"><tt class="option">--timing</tt></span></dt><dd>
+ Output information about the time it takes
+ <span class="application">xmllint</span> to perform the various steps.
+ </dd><dt><span class="term"><tt class="option">--repeat</tt></span></dt><dd>
+ Repeat 100 times, for timing or profiling.
+ </dd><dt><span class="term"><tt class="option">--insert</tt></span></dt><dd>
+ Test for valid insertions.
+ </dd><dt><span class="term"><tt class="option">--compress</tt></span></dt><dd>
+ Turn on gzip compression of output.
+ </dd><dt><span class="term"><tt class="option">--html</tt></span></dt><dd>
+ Use the <span class="acronym">HTML</span> parser.
+ </dd><dt><span class="term"><tt class="option">--push</tt></span></dt><dd>
+ Use the push mode of the parser.
+ </dd><dt><span class="term"><tt class="option">--memory</tt></span></dt><dd>
+ Parse from memory.
+ </dd><dt><span class="term"><tt class="option">--nowarning</tt></span></dt><dd>
+ Do not emit warnings from the parser and/or validator.
+ </dd><dt><span class="term"><tt class="option">--noblanks</tt></span></dt><dd>
+ Drop ignorable blank spaces.
+ </dd><dt><span class="term"><tt class="option">--format</tt></span></dt><dd>
+ Reformat and reindent the output. The $XMLLINT_INDENT
+ environment variable controls the indentation (default
+ value is two spaces " ").
+ </dd><dt><span class="term"><tt class="option">--testIO</tt></span></dt><dd>
+ Test user input/output support.
+ </dd><dt><span class="term"><tt class="option">--encode</tt> <i class="replaceable"><tt>encoding</tt></i></span></dt><dd>
+ Output in the given encoding.
+ </dd><dt><span class="term"><tt class="option">--catalogs</tt></span></dt><dd>
+ Use the catalogs from $SGML_CATALOG_FILES. Otherwise /etc/xml/catalog
+ is used by default.
+ </dd><dt><span class="term"><tt class="option">--nocatalogs</tt></span></dt><dd>
+ Do not use any catalogs.
+ </dd><dt><span class="term"><tt class="option">--auto</tt></span></dt><dd>
+ Generate a small document for testing purposes.
+ </dd><dt><span class="term"><tt class="option">--xinclude</tt></span></dt><dd>
+ Do XInclude processing.
+ </dd><dt><span class="term"><tt class="option">--loaddtd</tt></span></dt><dd>
+ Fetch external DTD.
+ </dd><dt><span class="term"><tt class="option">--dtdattr</tt></span></dt><dd>
+ Fetch external DTD and populate the tree with inherited attributes.
+ </dd><dt><span class="term"><tt class="option">--dropdtd</tt></span></dt><dd>
+ Remove <span class="acronym">DTD</span> from output.
+ </dd><dt><span class="term"><tt class="option">--stream</tt></span></dt><dd>Use streaming API - useful when used in combination with
+ --relaxng or --valid options for validation of files that are
+ too large to be held in memory.</dd><dt><span class="term"><tt class="option">--chkregister</tt></span></dt><dd>Turn on node registration. Useful for developeres testing
+ libxml2 node tracking code.</dd><dt><span class="term"><tt class="option">--relaxng</tt> <i class="replaceable"><tt>schema</tt></i></span></dt><dd>Use RelaxNG file named <i class="replaceable"><tt>schema</tt></i> for
+ validation.</dd><dt><span class="term"><tt class="option">--schema</tt> <i class="replaceable"><tt>schema</tt></i></span></dt><dd>Use a W3C XML Schema file named <i class="replaceable"><tt>schema</tt></i> for validation.</dd><dt><span class="term">
+ <tt class="option">--nonet</tt></span></dt><dd>Do not use the Internet to fetch DTD's or entities.</dd></dl></div></div><div class="refsect1" lang="en"><a name="shell"></a><h2>Shell</h2><p>
+ <span class="application">xmllint</span> offers an interactive shell mode
+ invoked with the <tt class="option">--shell</tt> command. Available commands in
+ shell mode include:
+ </p><div class="variablelist"><dl><dt><span class="term"><tt class="option">base</tt></span></dt><dd>
+ display XML base of the node
+ </dd><dt><span class="term"><tt class="option">bye</tt></span></dt><dd>
+ leave shell
+ </dd><dt><span class="term"><tt class="option">cat <i class="replaceable"><tt>node</tt></i></tt></span></dt><dd>
+ Display node if given or current node.
+ </dd><dt><span class="term"><tt class="option">cd <i class="replaceable"><tt>path</tt></i></tt></span></dt><dd>
+ Change the current node to <i class="replaceable"><tt>path</tt></i> (if given
+ and unique) or root if no argument given.
+ </dd><dt><span class="term"><tt class="option">dir <i class="replaceable"><tt>path</tt></i></tt></span></dt><dd>
+ Dumps information about the node (namespace, attributes, content).
+ </dd><dt><span class="term"><tt class="option">du <i class="replaceable"><tt>path</tt></i></tt></span></dt><dd>
+ Show the structure of the subtree under path or the current node.
+ </dd><dt><span class="term"><tt class="option">exit</tt></span></dt><dd>
+ Leave the shell.
+ </dd><dt><span class="term"><tt class="option">help</tt></span></dt><dd>
+ Show this help.
+ </dd><dt><span class="term"><tt class="option">free</tt></span></dt><dd>
+ Display memory usage.
+ </dd><dt><span class="term"><tt class="option">load <i class="replaceable"><tt>name</tt></i></tt></span></dt><dd>
+ Load a new document with the given name.
+ </dd><dt><span class="term"><tt class="option">ls <i class="replaceable"><tt>path</tt></i></tt></span></dt><dd>
+ List contents of <i class="replaceable"><tt>path</tt></i> (if given) or the
+ current directory.
+ </dd><dt><span class="term"><tt class="option">pwd</tt></span></dt><dd>
+ Display the path to the current node.
+ </dd><dt><span class="term"><tt class="option">quit</tt></span></dt><dd>
+ Leave the shell.
+ </dd><dt><span class="term"><tt class="option">save <i class="replaceable"><tt>name</tt></i></tt></span></dt><dd>
+ Saves the current document to <i class="replaceable"><tt>name</tt></i> if
+ given or to the original name.
+ </dd><dt><span class="term"><tt class="option">validate</tt></span></dt><dd>
+ Check the document for error.
+ </dd><dt><span class="term"><tt class="option">write <i class="replaceable"><tt>name</tt></i></tt></span></dt><dd>
+ Write the current node to the given filename.
+ </dd></dl></div></div><div class="refsect1" lang="en"><h2>Catalogs</h2><p>Catalog behavior can be changed by redirecting
+ queries to the user's own set of catalogs. This can be done by setting the
+ <tt class="varname">XML_CATALOG_FILES</tt> environment variable to a list of
+ catalogs. An empty one should deactivate loading the default
+ <tt class="filename">/etc/xml/catalog</tt> default catalog.</p></div><div class="refsect1" lang="en"><h2>Debugging Catalogs</h2><p>Setting the environment variable <tt class="varname">XML_DEBUG_CATALOG</tt>
+ using the command <b class="command">"export XML_DEBUG_CATALOG="</b>
+ outputs debugging information related to catalog operations.</p></div></div></body></html>
diff --git a/doc/xmllint.xml b/doc/xmllint.xml
new file mode 100644
index 0000000..ea881c7
--- /dev/null
+++ b/doc/xmllint.xml
@@ -0,0 +1,643 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl"
+ href="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+]>
+<refentry>
+ <refentryinfo>
+ <title>xmllint Manual</title>
+ <copyright>
+ <year>2001</year>
+ </copyright>
+ <copyright>
+ <year>2004</year>
+ </copyright>
+ <author>
+ <firstname>John</firstname>
+ <surname>Fleck</surname>
+ </author>
+ <address><email>jfleck@inkstain.net</email></address>
+ <author>
+ <firstname>Ziying</firstname>
+ <surname>Sherwin</surname>
+ </author>
+ <address><email>sherwin@nlm.nih.gov</email></address>
+ <author>
+ <firstname>Heiko</firstname>
+ <surname>Rupp</surname>
+ </author>
+ <address><email>hwr@pilhuhn.de</email></address>
+
+ <releaseinfo>This is release 0.3 of the xmllint Manual.</releaseinfo>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>xmllint</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>xmllint</refname>
+ <refpurpose>command line <acronym>XML</acronym> tool</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>xmllint</command>
+ <group>
+ <arg>--version</arg>
+ <arg>--debug</arg>
+ <arg>--shell</arg>
+ <arg>--debugent</arg>
+ <arg>--copy</arg>
+ <arg>--recover</arg>
+ <arg>--noent</arg>
+ <arg>--nocdata</arg>
+ <arg>--nsclean</arg>
+ <arg>--noout</arg>
+ <arg>--htmlout</arg>
+ <arg>--nowrap</arg>
+ <arg>--valid</arg>
+ <arg>--postvalid</arg>
+ <arg>--dtdvalid <replaceable>URL</replaceable></arg>
+ <arg>--dtdvalidfpi <replaceable>FPI</replaceable></arg>
+ <arg>--timing</arg>
+ <arg>--repeat</arg>
+ <arg>--insert</arg>
+ <arg>--compress</arg>
+ <arg>--html</arg>
+ <arg>--push</arg>
+ <arg>--memory</arg>
+ <arg>--nowarning</arg>
+ <arg>--noblanks</arg>
+ <arg>--format</arg>
+ <arg>--testIO</arg>
+ <arg>--encode <replaceable>encoding</replaceable></arg>
+ <arg>--catalogs</arg>
+ <arg>--nocatalogs</arg>
+ <arg>--auto</arg>
+ <arg>--xinclude</arg>
+ <arg>--loaddtd</arg>
+ <arg>--dtdattr</arg>
+ <arg>--dropdtd</arg>
+ <arg>--stream</arg>
+ <arg>--chkregister</arg>
+ <arg>--relaxng</arg>
+ <arg>--schema</arg>
+ <arg>--nonet</arg>
+ </group>
+ <arg><option><replaceable>xmlfile</replaceable></option></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id="introduction">
+ <title>Introduction</title>
+ <para>
+ The xmllint program parses one or more XML files, specified on the
+ command line as <replaceable>xmlfile</replaceable>. It prints various
+ types of output, depending upon the options selected. It is useful for
+ detecting errors both in <acronym>XML</acronym> code and in the
+ <acronym>XML</acronym> parser itself.
+ </para>
+
+ <para>
+ It is included in <application>libxml2</application>.
+ </para>
+ </refsect1>
+ <refsect1 id="options">
+ <title>Options</title>
+ <variablelist>
+ <varlistentry>
+ <term><option>--version</option></term>
+ <listitem>
+ <simpara>
+ Display the version of
+ <application>libxml2</application> used.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--debug</option></term>
+ <listitem>
+ <simpara>
+ Parse a file and output an annotated tree of the
+ in-memory version of the document.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--shell</option></term>
+ <listitem>
+ <simpara>
+ Run a navigating shell. Details on available commands in shell mode
+ are below.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--debugent</option></term>
+ <listitem>
+ <simpara>
+ Debug the entities defined in the document.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--copy</option> </term>
+ <listitem>
+ <simpara>
+ Test the internal copy implementation.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term><option>--recover</option></term>
+ <listitem>
+ <simpara>
+ Output any parsable portions of an invalid
+ document.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--noent</option></term>
+ <listitem>
+ <simpara>
+ Substitute entity values for entity
+ references. By default, <application>xmllint</application> leaves entity
+ references in place.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--nocdata</option></term>
+ <listitem>
+ <simpara>
+ Substitute CDATA section by equivalent text nodes.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--nsclean</option></term>
+ <listitem>
+ <simpara>
+ Remove redundant namespace declarations.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--noout</option></term>
+ <listitem>
+ <simpara>
+ Suppress output. By default,
+ <application>xmllint</application> outputs the result tree.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--htmlout</option></term>
+ <listitem>
+ <simpara>
+ Output results as an <acronym>HTML</acronym>
+ file. This causes <application>xmllint</application> to output
+ the necessary <acronym>HTML</acronym> tags surrounding the result tree
+ output so the results can be displayed in a browser.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--nowrap </option></term>
+ <listitem>
+ <simpara>
+ Do not output HTML doc wrapper.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+<varlistentry>
+ <term><option>--valid </option></term>
+ <listitem>
+ <simpara>
+ Determine if the document is a valid instance
+ of the included Document Type Definition (<acronym>DTD</acronym>). A
+ <acronym>DTD</acronym> to be validated against also can be specified at
+ the command line using the <option>--dtdvalid</option> option. By default,
+ <application>xmllint</application> also checks to determine if the
+ document is well-formed.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--postvalid</option></term>
+ <listitem>
+ <simpara>
+ Validate after parsing is completed.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term> <option>--dtdvalid</option> <replaceable>URL</replaceable></term>
+ <listitem>
+ <simpara>
+ Use the
+ <acronym>DTD</acronym> specified by <replaceable>URL</replaceable> for
+ validation.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term> <option>--dtdvalidfpi</option> <replaceable>FPI</replaceable></term>
+ <listitem>
+ <simpara>
+ Use the
+ <acronym>DTD</acronym> specified by the Public Identifier
+ <replaceable>FPI</replaceable> for validation, note that this
+ will require a Catalog exporting that Public Identifier to work.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--timing</option></term>
+ <listitem>
+ <simpara>
+ Output information about the time it takes
+ <application>xmllint</application> to perform the various steps.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--repeat</option></term>
+ <listitem>
+ <simpara>
+ Repeat 100 times, for timing or profiling.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--insert</option></term>
+ <listitem>
+ <simpara>
+ Test for valid insertions.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--compress</option></term>
+ <listitem>
+ <simpara>
+ Turn on gzip compression of output.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--html</option></term>
+ <listitem>
+ <simpara>
+ Use the <acronym>HTML</acronym> parser.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--push</option></term>
+ <listitem>
+ <simpara>
+ Use the push mode of the parser.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term><option>--memory</option></term>
+ <listitem>
+ <simpara>
+ Parse from memory.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--nowarning</option></term>
+ <listitem>
+ <simpara>
+ Do not emit warnings from the parser and/or validator.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--noblanks</option></term>
+ <listitem>
+ <simpara>
+ Drop ignorable blank spaces.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--format</option></term>
+ <listitem>
+ <simpara>
+ Reformat and reindent the output. The $XMLLINT_INDENT
+ environment variable controls the indentation (default
+ value is two spaces &quot; &quot;).
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--testIO</option></term>
+ <listitem>
+ <simpara>
+ Test user input/output support.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--encode</option> <replaceable>encoding</replaceable></term>
+ <listitem>
+ <simpara>
+ Output in the given encoding.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--catalogs</option></term>
+ <listitem>
+ <simpara>
+ Use the catalogs from $SGML_CATALOG_FILES. Otherwise /etc/xml/catalog
+ is used by default.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--nocatalogs</option></term>
+ <listitem>
+ <simpara>
+ Do not use any catalogs.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--auto</option></term>
+ <listitem>
+ <simpara>
+ Generate a small document for testing purposes.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--xinclude</option></term>
+ <listitem>
+ <simpara>
+ Do XInclude processing.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--loaddtd</option></term>
+ <listitem>
+ <simpara>
+ Fetch external DTD.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--dtdattr</option></term>
+ <listitem>
+ <simpara>
+ Fetch external DTD and populate the tree with inherited attributes.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--dropdtd</option></term>
+ <listitem>
+ <simpara>
+ Remove <acronym>DTD</acronym> from output.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--stream</option></term>
+ <listitem>
+ <simpara>Use streaming API - useful when used in combination with
+ --relaxng or --valid options for validation of files that are
+ too large to be held in memory.</simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--chkregister</option></term>
+ <listitem>
+ <simpara>Turn on node registration. Useful for developeres testing
+ libxml2 node tracking code.</simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--relaxng</option> <replaceable>schema</replaceable></term>
+ <listitem>
+ <simpara>Use RelaxNG file named <replaceable>schema</replaceable> for
+ validation.</simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--schema</option> <replaceable>schema</replaceable></term>
+ <listitem>
+ <simpara>Use a W3C XML Schema file named <replaceable>schema</replaceable> for validation.</simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>--nonet</option></term>
+ <listitem>
+ <simpara>Do not use the Internet to fetch DTD's or entities.</simpara>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id="shell">
+ <title>Shell</title>
+ <para>
+ <application>xmllint</application> offers an interactive shell mode
+ invoked with the <option>--shell</option> command. Available commands in
+ shell mode include:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><option>base</option></term>
+ <listitem>
+ <simpara>
+ display XML base of the node
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>bye</option></term>
+ <listitem>
+ <simpara>
+ leave shell
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>cat <replaceable>node</replaceable></option></term>
+ <listitem>
+ <simpara>
+ Display node if given or current node.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>cd <replaceable>path</replaceable></option></term>
+ <listitem>
+ <simpara>
+ Change the current node to <replaceable>path</replaceable> (if given
+ and unique) or root if no argument given.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>dir <replaceable>path</replaceable></option></term>
+ <listitem>
+ <simpara>
+ Dumps information about the node (namespace, attributes, content).
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>du <replaceable>path</replaceable></option></term>
+ <listitem>
+ <simpara>
+ Show the structure of the subtree under path or the current node.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>exit</option></term>
+ <listitem>
+ <simpara>
+ Leave the shell.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>help</option></term>
+ <listitem>
+ <simpara>
+ Show this help.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>free</option></term>
+ <listitem>
+ <simpara>
+ Display memory usage.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>load <replaceable>name</replaceable></option></term>
+ <listitem>
+ <simpara>
+ Load a new document with the given name.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>ls <replaceable>path</replaceable></option></term>
+ <listitem>
+ <simpara>
+ List contents of <replaceable>path</replaceable> (if given) or the
+ current directory.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>pwd</option></term>
+ <listitem>
+ <simpara>
+ Display the path to the current node.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>quit</option></term>
+ <listitem>
+ <simpara>
+ Leave the shell.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>save <replaceable>name</replaceable></option></term>
+ <listitem>
+ <simpara>
+ Saves the current document to <replaceable>name</replaceable> if
+ given or to the original name.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>validate</option></term>
+ <listitem>
+ <simpara>
+ Check the document for error.
+ </simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>write <replaceable>name</replaceable></option></term>
+ <listitem>
+ <simpara>
+ Write the current node to the given filename.
+ </simpara>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+<refsect1>
+ <title>Catalogs</title>
+ <para>Catalog behavior can be changed by redirecting
+ queries to the user's own set of catalogs. This can be done by setting the
+ <varname>XML_CATALOG_FILES</varname> environment variable to a list of
+ catalogs. An empty one should deactivate loading the default
+ <filename>/etc/xml/catalog</filename> default catalog.</para>
+ </refsect1>
+ <refsect1>
+ <title>Debugging Catalogs</title>
+ <para>Setting the environment variable <varname>XML_DEBUG_CATALOG</varname>
+ using the command <command>&quot;export XML_DEBUG_CATALOG=&quot;</command>
+ outputs debugging information related to catalog operations.</para>
+ </refsect1>
+</refentry>
diff --git a/doc/xmlmem.html b/doc/xmlmem.html
new file mode 100644
index 0000000..ba85307
--- /dev/null
+++ b/doc/xmlmem.html
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Memory Management</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Memory Management</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol><li><a href="#General3">General overview</a></li>
+ <li><a href="#setting">Setting libxml2 set of memory routines</a></li>
+ <li><a href="#cleanup">Cleaning up after parsing</a></li>
+ <li><a href="#Debugging">Debugging routines</a></li>
+ <li><a href="#General4">General memory requirements</a></li>
+</ol><h3><a name="General3" id="General3">General overview</a></h3><p>The module <code><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlmemory.h</a></code>
+provides the interfaces to the libxml2 memory system:</p><ul><li>libxml2 does not use the libc memory allocator directly but xmlFree(),
+ xmlMalloc() and xmlRealloc()</li>
+ <li>those routines can be reallocated to a specific set of routine, by
+ default the libc ones i.e. free(), malloc() and realloc()</li>
+ <li>the xmlmemory.c module includes a set of debugging routine</li>
+</ul><h3><a name="setting" id="setting">Setting libxml2 set of memory routines</a></h3><p>It is sometimes useful to not use the default memory allocator, either for
+debugging, analysis or to implement a specific behaviour on memory management
+(like on embedded systems). Two function calls are available to do so:</p><ul><li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemGet
+ ()</a> which return the current set of functions in use by the parser</li>
+ <li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemSetup()</a>
+ which allow to set up a new set of memory allocation functions</li>
+</ul><p>Of course a call to xmlMemSetup() should probably be done before calling
+any other libxml2 routines (unless you are sure your allocations routines are
+compatibles).</p><h3><a name="cleanup" id="cleanup">Cleaning up after parsing</a></h3><p>Libxml2 is not stateless, there is a few set of memory structures needing
+allocation before the parser is fully functional (some encoding structures
+for example). This also mean that once parsing is finished there is a tiny
+amount of memory (a few hundred bytes) which can be recollected if you don't
+reuse the parser immediately:</p><ul><li><a href="http://xmlsoft.org/html/libxml-parser.html">xmlCleanupParser
+ ()</a> is a centralized routine to free the parsing states. Note that it
+ won't deallocate any produced tree if any (use the xmlFreeDoc() and
+ related routines for this).</li>
+ <li><a href="http://xmlsoft.org/html/libxml-parser.html">xmlInitParser
+ ()</a> is the dual routine allowing to preallocate the parsing state
+ which can be useful for example to avoid initialization reentrancy
+ problems when using libxml2 in multithreaded applications</li>
+</ul><p>Generally xmlCleanupParser() is safe, if needed the state will be rebuild
+at the next invocation of parser routines, but be careful of the consequences
+in multithreaded applications.</p><h3><a name="Debugging" id="Debugging">Debugging routines</a></h3><p>When configured using --with-mem-debug flag (off by default), libxml2 uses
+a set of memory allocation debugging routines keeping track of all allocated
+blocks and the location in the code where the routine was called. A couple of
+other debugging routines allow to dump the memory allocated infos to a file
+or call a specific routine when a given block number is allocated:</p><ul><li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMallocLoc()</a>
+ <a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlReallocLoc()</a>
+ and <a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemStrdupLoc()</a>
+ are the memory debugging replacement allocation routines</li>
+ <li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemoryDump
+ ()</a> dumps all the informations about the allocated memory block lefts
+ in the <code>.memdump</code> file</li>
+</ul><p>When developing libxml2 memory debug is enabled, the tests programs call
+xmlMemoryDump () and the "make test" regression tests will check for any
+memory leak during the full regression test sequence, this helps a lot
+ensuring that libxml2 does not leak memory and bullet proof memory
+allocations use (some libc implementations are known to be far too permissive
+resulting in major portability problems!).</p><p>If the .memdump reports a leak, it displays the allocation function and
+also tries to give some informations about the content and structure of the
+allocated blocks left. This is sufficient in most cases to find the culprit,
+but not always. Assuming the allocation problem is reproducible, it is
+possible to find more easily:</p><ol><li>write down the block number xxxx not allocated</li>
+ <li>export the environment variable XML_MEM_BREAKPOINT=xxxx , the easiest
+ when using GDB is to simply give the command
+ <p><code>set environment XML_MEM_BREAKPOINT xxxx</code></p>
+ <p>before running the program.</p>
+ </li>
+ <li>run the program under a debugger and set a breakpoint on
+ xmlMallocBreakpoint() a specific function called when this precise block
+ is allocated</li>
+ <li>when the breakpoint is reached you can then do a fine analysis of the
+ allocation an step to see the condition resulting in the missing
+ deallocation.</li>
+</ol><p>I used to use a commercial tool to debug libxml2 memory problems but after
+noticing that it was not detecting memory leaks that simple mechanism was
+used and proved extremely efficient until now. Lately I have also used <a href="http://developer.kde.org/~sewardj/">valgrind</a> with quite some
+success, it is tied to the i386 architecture since it works by emulating the
+processor and instruction set, it is slow but extremely efficient, i.e. it
+spot memory usage errors in a very precise way.</p><h3><a name="General4" id="General4">General memory requirements</a></h3><p>How much libxml2 memory require ? It's hard to tell in average it depends
+of a number of things:</p><ul><li>the parser itself should work in a fixed amount of memory, except for
+ information maintained about the stacks of names and entities locations.
+ The I/O and encoding handlers will probably account for a few KBytes.
+ This is true for both the XML and HTML parser (though the HTML parser
+ need more state).</li>
+ <li>If you are generating the DOM tree then memory requirements will grow
+ nearly linear with the size of the data. In general for a balanced
+ textual document the internal memory requirement is about 4 times the
+ size of the UTF8 serialization of this document (example the XML-1.0
+ recommendation is a bit more of 150KBytes and takes 650KBytes of main
+ memory when parsed). Validation will add a amount of memory required for
+ maintaining the external Dtd state which should be linear with the
+ complexity of the content model defined by the Dtd</li>
+ <li>If you need to work with fixed memory requirements or don't need the
+ full DOM tree then using the <a href="xmlreader.html">xmlReader
+ interface</a> is probably the best way to proceed, it still allows to
+ validate or operate on subset of the tree if needed.</li>
+ <li>If you don't care about the advanced features of libxml2 like
+ validation, DOM, XPath or XPointer, don't use entities, need to work with
+ fixed memory requirements, and try to get the fastest parsing possible
+ then the SAX interface should be used, but it has known restrictions.</li>
+</ul><p></p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
diff --git a/doc/xmlreader.html b/doc/xmlreader.html
new file mode 100644
index 0000000..db711b8
--- /dev/null
+++ b/doc/xmlreader.html
@@ -0,0 +1,475 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html">
+ <style type="text/css"></style>
+<!--
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+ </style>
+-->
+ <title>Libxml2 XmlTextReader Interface tutorial</title>
+</head>
+
+<body bgcolor="#fffacd" text="#000000">
+<h1 align="center">Libxml2 XmlTextReader Interface tutorial</h1>
+
+<p></p>
+
+<p>This document describes the use of the XmlTextReader streaming API added
+to libxml2 in version 2.5.0 . This API is closely modeled after the <a
+href="http://dotgnu.org/pnetlib-doc/System/Xml/XmlTextReader.html">XmlTextReader</a>
+and <a
+href="http://dotgnu.org/pnetlib-doc/System/Xml/XmlReader.html">XmlReader</a>
+classes of the C# language.</p>
+
+<p>This tutorial will present the key points of this API, and working
+examples using both C and the Python bindings:</p>
+
+<p>Table of content:</p>
+<ul>
+ <li><a href="#Introducti">Introduction: why a new API</a></li>
+ <li><a href="#Walking">Walking a simple tree</a></li>
+ <li><a href="#Extracting">Extracting informations for the current
+ node</a></li>
+ <li><a href="#Extracting1">Extracting informations for the
+ attributes</a></li>
+ <li><a href="#Validating">Validating a document</a></li>
+ <li><a href="#Entities">Entities substitution</a></li>
+ <li><a href="#L1142">Relax-NG Validation</a></li>
+ <li><a href="#Mixing">Mixing the reader and tree or XPath
+ operations</a></li>
+</ul>
+
+<p></p>
+
+<h2><a name="Introducti">Introduction: why a new API</a></h2>
+
+<p>Libxml2 <a href="http://xmlsoft.org/html/libxml-tree.html">main API is
+tree based</a>, where the parsing operation results in a document loaded
+completely in memory, and expose it as a tree of nodes all availble at the
+same time. This is very simple and quite powerful, but has the major
+limitation that the size of the document that can be hamdled is limited by
+the size of the memory available. Libxml2 also provide a <a
+href="http://www.saxproject.org/">SAX</a> based API, but that version was
+designed upon one of the early <a
+href="http://www.jclark.com/xml/expat.html">expat</a> version of SAX, SAX is
+also not formally defined for C. SAX basically work by registering callbacks
+which are called directly by the parser as it progresses through the document
+streams. The problem is that this programming model is relatively complex,
+not well standardized, cannot provide validation directly, makes entity,
+namespace and base processing relatively hard.</p>
+
+<p>The <a
+href="http://dotgnu.org/pnetlib-doc/System/Xml/XmlTextReader.html">XmlTextReader
+API from C#</a> provides a far simpler programming model. The API acts as a
+cursor going forward on the document stream and stopping at each node in the
+way. The user's code keeps control of the progress and simply calls a
+Read() function repeatedly to progress to each node in sequence in document
+order. There is direct support for namespaces, xml:base, entity handling and
+adding DTD validation on top of it was relatively simple. This API is really
+close to the <a href="http://www.w3.org/TR/DOM-Level-2-Core/">DOM Core
+specification</a> This provides a far more standard, easy to use and powerful
+API than the existing SAX. Moreover integrating extension features based on
+the tree seems relatively easy.</p>
+
+<p>In a nutshell the XmlTextReader API provides a simpler, more standard and
+more extensible interface to handle large documents than the existing SAX
+version.</p>
+
+<h2><a name="Walking">Walking a simple tree</a></h2>
+
+<p>Basically the XmlTextReader API is a forward only tree walking interface.
+The basic steps are:</p>
+<ol>
+ <li>prepare a reader context operating on some input</li>
+ <li>run a loop iterating over all nodes in the document</li>
+ <li>free up the reader context</li>
+</ol>
+
+<p>Here is a basic C sample doing this:</p>
+<pre>#include &lt;libxml/xmlreader.h&gt;
+
+void processNode(xmlTextReaderPtr reader) {
+ /* handling of a node in the tree */
+}
+
+int streamFile(char *filename) {
+ xmlTextReaderPtr reader;
+ int ret;
+
+ reader = xmlNewTextReaderFilename(filename);
+ if (reader != NULL) {
+ ret = xmlTextReaderRead(reader);
+ while (ret == 1) {
+ processNode(reader);
+ ret = xmlTextReaderRead(reader);
+ }
+ xmlFreeTextReader(reader);
+ if (ret != 0) {
+ printf("%s : failed to parse\n", filename);
+ }
+ } else {
+ printf("Unable to open %s\n", filename);
+ }
+}</pre>
+
+<p>A few things to notice:</p>
+<ul>
+ <li>the include file needed : <code>libxml/xmlreader.h</code></li>
+ <li>the creation of the reader using a filename</li>
+ <li>the repeated call to xmlTextReaderRead() and how any return value
+ different from 1 should stop the loop</li>
+ <li>that a negative return means a parsing error</li>
+ <li>how xmlFreeTextReader() should be used to free up the resources used by
+ the reader.</li>
+</ul>
+
+<p>Here is similar code in python for exactly the same processing:</p>
+<pre>import libxml2
+
+def processNode(reader):
+ pass
+
+def streamFile(filename):
+ try:
+ reader = libxml2.newTextReaderFilename(filename)
+ except:
+ print "unable to open %s" % (filename)
+ return
+
+ ret = reader.Read()
+ while ret == 1:
+ processNode(reader)
+ ret = reader.Read()
+
+ if ret != 0:
+ print "%s : failed to parse" % (filename)</pre>
+
+<p>The only things worth adding are that the <a
+href="http://dotgnu.org/pnetlib-doc/System/Xml/XmlTextReader.html">xmlTextReader
+is abstracted as a class like in C#</a> with the same method names (but the
+properties are currently accessed with methods) and that one doesn't need to
+free the reader at the end of the processing. It will get garbage collected
+once all references have disapeared.</p>
+
+<h2><a name="Extracting">Extracting information for the current node</a></h2>
+
+<p>So far the example code did not indicate how information was extracted
+from the reader. It was abstrated as a call to the processNode() routine,
+with the reader as the argument. At each invocation, the parser is stopped on
+a given node and the reader can be used to query those node properties. Each
+<em>Property</em> is available at the C level as a function taking a single
+xmlTextReaderPtr argument whose name is
+<code>xmlTextReader</code><em>Property</em> , if the return type is an
+<code>xmlChar *</code> string then it must be deallocated with
+<code>xmlFree()</code> to avoid leaks. For the Python interface, there is a
+<em>Property</em> method to the reader class that can be called on the
+instance. The list of the properties is based on the <a
+href="http://dotgnu.org/pnetlib-doc/System/Xml/XmlTextReader.html">C#
+XmlTextReader class</a> set of properties and methods:</p>
+<ul>
+ <li><em>NodeType</em>: The node type, 1 for start element, 15 for end of
+ element, 2 for attributes, 3 for text nodes, 4 for CData sections, 5 for
+ entity references, 6 for entity declarations, 7 for PIs, 8 for comments,
+ 9 for the document nodes, 10 for DTD/Doctype nodes, 11 for document
+ fragment and 12 for notation nodes.</li>
+ <li><em>Name</em>: the <a
+ href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+ name</a> of the node, equal to (<em>Prefix</em>:)<em>LocalName</em>.</li>
+ <li><em>LocalName</em>: the <a
+ href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local name</a> of
+ the node.</li>
+ <li><em>Prefix</em>: a shorthand reference to the <a
+ href="http://www.w3.org/TR/REC-xml-names/">namespace</a> associated with
+ the node.</li>
+ <li><em>NamespaceUri</em>: the URI defining the <a
+ href="http://www.w3.org/TR/REC-xml-names/">namespace</a> associated with
+ the node.</li>
+ <li><em>BaseUri:</em> the base URI of the node. See the <a
+ href="http://www.w3.org/TR/xmlbase/">XML Base W3C specification</a>.</li>
+ <li><em>Depth:</em> the depth of the node in the tree, starts at 0 for the
+ root node.</li>
+ <li><em>HasAttributes</em>: whether the node has attributes.</li>
+ <li><em>HasValue</em>: whether the node can have a text value.</li>
+ <li><em>Value</em>: provides the text value of the node if present.</li>
+ <li><em>IsDefault</em>: whether an Attribute node was generated from the
+ default value defined in the DTD or schema (<em>unsupported
+ yet</em>).</li>
+ <li><em>XmlLang</em>: the <a
+ href="http://www.w3.org/TR/REC-xml#sec-lang-tag">xml:lang</a> scope
+ within which the node resides.</li>
+ <li><em>IsEmptyElement</em>: check if the current node is empty, this is a
+ bit bizarre in the sense that <code>&lt;a/&gt;</code> will be considered
+ empty while <code>&lt;a&gt;&lt;/a&gt;</code> will not.</li>
+ <li><em>AttributeCount</em>: provides the number of attributes of the
+ current node.</li>
+</ul>
+
+<p>Let's look first at a small example to get this in practice by redefining
+the processNode() function in the Python example:</p>
+<pre>def processNode(reader):
+ print "%d %d %s %d" % (reader.Depth(), reader.NodeType(),
+ reader.Name(), reader.IsEmptyElement())</pre>
+
+<p>and look at the result of calling streamFile("tst.xml") for various
+content of the XML test file.</p>
+
+<p>For the minimal document "<code>&lt;doc/&gt;</code>" we get:</p>
+<pre>0 1 doc 1</pre>
+
+<p>Only one node is found, its depth is 0, type 1 indicate an element start,
+of name "doc" and it is empty. Trying now with
+"<code>&lt;doc&gt;&lt;/doc&gt;</code>" instead leads to:</p>
+<pre>0 1 doc 0
+0 15 doc 0</pre>
+
+<p>The document root node is not flagged as empty anymore and both a start
+and an end of element are detected. The following document shows how
+character data are reported:</p>
+<pre>&lt;doc&gt;&lt;a/&gt;&lt;b&gt;some text&lt;/b&gt;
+&lt;c/&gt;&lt;/doc&gt;</pre>
+
+<p>We modifying the processNode() function to also report the node Value:</p>
+<pre>def processNode(reader):
+ print "%d %d %s %d %s" % (reader.Depth(), reader.NodeType(),
+ reader.Name(), reader.IsEmptyElement(),
+ reader.Value())</pre>
+
+<p>The result of the test is:</p>
+<pre>0 1 doc 0 None
+1 1 a 1 None
+1 1 b 0 None
+2 3 #text 0 some text
+1 15 b 0 None
+1 3 #text 0
+
+1 1 c 1 None
+0 15 doc 0 None</pre>
+
+<p>There are a few things to note:</p>
+<ul>
+ <li>the increase of the depth value (first row) as children nodes are
+ explored</li>
+ <li>the text node child of the b element, of type 3 and its content</li>
+ <li>the text node containing the line return between elements b and c</li>
+ <li>that elements have the Value None (or NULL in C)</li>
+</ul>
+
+<p>The equivalent routine for <code>processNode()</code> as used by
+<code>xmllint --stream --debug</code> is the following and can be found in
+the xmllint.c module in the source distribution:</p>
+<pre>static void processNode(xmlTextReaderPtr reader) {
+ xmlChar *name, *value;
+
+ name = xmlTextReaderName(reader);
+ if (name == NULL)
+ name = xmlStrdup(BAD_CAST "--");
+ value = xmlTextReaderValue(reader);
+
+ printf("%d %d %s %d",
+ xmlTextReaderDepth(reader),
+ xmlTextReaderNodeType(reader),
+ name,
+ xmlTextReaderIsEmptyElement(reader));
+ xmlFree(name);
+ if (value == NULL)
+ printf("\n");
+ else {
+ printf(" %s\n", value);
+ xmlFree(value);
+ }
+}</pre>
+
+<h2><a name="Extracting1">Extracting information for the attributes</a></h2>
+
+<p>The previous examples don't indicate how attributes are processed. The
+simple test "<code>&lt;doc a="b"/&gt;</code>" provides the following
+result:</p>
+<pre>0 1 doc 1 None</pre>
+
+<p>This proves that attribute nodes are not traversed by default. The
+<em>HasAttributes</em> property allow to detect their presence. To check
+their content the API has special instructions. Basically two kinds of operations
+are possible:</p>
+<ol>
+ <li>to move the reader to the attribute nodes of the current element, in
+ that case the cursor is positionned on the attribute node</li>
+ <li>to directly query the element node for the attribute value</li>
+</ol>
+
+<p>In both case the attribute can be designed either by its position in the
+list of attribute (<em>MoveToAttributeNo</em> or <em>GetAttributeNo</em>) or
+by their name (and namespace):</p>
+<ul>
+ <li><em>GetAttributeNo</em>(no): provides the value of the attribute with
+ the specified index no relative to the containing element.</li>
+ <li><em>GetAttribute</em>(name): provides the value of the attribute with
+ the specified qualified name.</li>
+ <li>GetAttributeNs(localName, namespaceURI): provides the value of the
+ attribute with the specified local name and namespace URI.</li>
+ <li><em>MoveToAttributeNo</em>(no): moves the position of the current
+ instance to the attribute with the specified index relative to the
+ containing element.</li>
+ <li><em>MoveToAttribute</em>(name): moves the position of the current
+ instance to the attribute with the specified qualified name.</li>
+ <li><em>MoveToAttributeNs</em>(localName, namespaceURI): moves the position
+ of the current instance to the attribute with the specified local name
+ and namespace URI.</li>
+ <li><em>MoveToFirstAttribute</em>: moves the position of the current
+ instance to the first attribute associated with the current node.</li>
+ <li><em>MoveToNextAttribute</em>: moves the position of the current
+ instance to the next attribute associated with the current node.</li>
+ <li><em>MoveToElement</em>: moves the position of the current instance to
+ the node that contains the current Attribute node.</li>
+</ul>
+
+<p>After modifying the processNode() function to show attributes:</p>
+<pre>def processNode(reader):
+ print "%d %d %s %d %s" % (reader.Depth(), reader.NodeType(),
+ reader.Name(), reader.IsEmptyElement(),
+ reader.Value())
+ if reader.NodeType() == 1: # Element
+ while reader.MoveToNextAttribute():
+ print "-- %d %d (%s) [%s]" % (reader.Depth(), reader.NodeType(),
+ reader.Name(),reader.Value())</pre>
+
+<p>The output for the same input document reflects the attribute:</p>
+<pre>0 1 doc 1 None
+-- 1 2 (a) [b]</pre>
+
+<p>There are a couple of things to note on the attribute processing:</p>
+<ul>
+ <li>Their depth is the one of the carrying element plus one.</li>
+ <li>Namespace declarations are seen as attributes, as in DOM.</li>
+</ul>
+
+<h2><a name="Validating">Validating a document</a></h2>
+
+<p>Libxml2 implementation adds some extra features on top of the XmlTextReader
+API. The main one is the ability to DTD validate the parsed document
+progressively. This is simply the activation of the associated feature of the
+parser used by the reader structure. There are a few options available
+defined as the enum xmlParserProperties in the libxml/xmlreader.h header
+file:</p>
+<ul>
+ <li>XML_PARSER_LOADDTD: force loading the DTD (without validating)</li>
+ <li>XML_PARSER_DEFAULTATTRS: force attribute defaulting (this also imply
+ loading the DTD)</li>
+ <li>XML_PARSER_VALIDATE: activate DTD validation (this also imply loading
+ the DTD)</li>
+ <li>XML_PARSER_SUBST_ENTITIES: substitute entities on the fly, entity
+ reference nodes are not generated and are replaced by their expanded
+ content.</li>
+ <li>more settings might be added, those were the one available at the 2.5.0
+ release...</li>
+</ul>
+
+<p>The GetParserProp() and SetParserProp() methods can then be used to get
+and set the values of those parser properties of the reader. For example</p>
+<pre>def parseAndValidate(file):
+ reader = libxml2.newTextReaderFilename(file)
+ reader.SetParserProp(libxml2.PARSER_VALIDATE, 1)
+ ret = reader.Read()
+ while ret == 1:
+ ret = reader.Read()
+ if ret != 0:
+ print "Error parsing and validating %s" % (file)</pre>
+
+<p>This routine will parse and validate the file. Error messages can be
+captured by registering an error handler. See python/tests/reader2.py for
+more complete Python examples. At the C level the equivalent call to cativate
+the validation feature is just:</p>
+<pre>ret = xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1)</pre>
+
+<p>and a return value of 0 indicates success.</p>
+
+<h2><a name="Entities">Entities substitution</a></h2>
+
+<p>By default the xmlReader will report entities as such and not replace them
+with their content. This default behaviour can however be overriden using:</p>
+
+<p><code>reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)</code></p>
+
+<h2><a name="L1142">Relax-NG Validation</a></h2>
+
+<p style="font-size: 10pt">Introduced in version 2.5.7</p>
+
+<p>Libxml2 can now validate the document being read using the xmlReader using
+Relax-NG schemas. While the Relax NG validator can't always work in a
+streamable mode, only subsets which cannot be reduced to regular expressions
+need to have their subtree expanded for validation. In practice it means
+that, unless the schemas for the top level element content is not expressable
+as a regexp, only chunk of the document needs to be parsed while
+validating.</p>
+
+<p>The steps to do so are:</p>
+<ul>
+ <li>create a reader working on a document as usual</li>
+ <li>before any call to read associate it to a Relax NG schemas, either the
+ preparsed schemas or the URL to the schemas to use</li>
+ <li>errors will be reported the usual way, and the validity status can be
+ obtained using the IsValid() interface of the reader like for DTDs.</li>
+</ul>
+
+<p>Example, assuming the reader has already being created and that the schema
+string contains the Relax-NG schemas:</p>
+<pre><code>rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))<br>
+rngs = rngp.relaxNGParse()<br>
+reader.RelaxNGSetSchema(rngs)<br>
+ret = reader.Read()<br>
+while ret == 1:<br>
+ ret = reader.Read()<br>
+if ret != 0:<br>
+ print "Error parsing the document"<br>
+if reader.IsValid() != 1:<br>
+ print "Document failed to validate"</code><br>
+</pre>
+
+<p>See <code>reader6.py</code> in the sources or documentation for a complete
+example.</p>
+
+<h2><a name="Mixing">Mixing the reader and tree or XPath operations</a></h2>
+
+<p style="font-size: 10pt">Introduced in version 2.5.7</p>
+
+<p>While the reader is a streaming interface, its underlying implementation
+is based on the DOM builder of libxml2. As a result it is relatively simple
+to mix operations based on both models under some constraints. To do so the
+reader has an Expand() operation allowing to grow the subtree under the
+current node. It returns a pointer to a standard node which can be
+manipulated in the usual ways. The node will get all its ancestors and the
+full subtree available. Usual operations like XPath queries can be used on
+that reduced view of the document. Here is an example extracted from
+reader5.py in the sources which extract and prints the bibliography for the
+"Dragon" compiler book from the XML 1.0 recommendation:</p>
+<pre>f = open('../../test/valid/REC-xml-19980210.xml')
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("REC")
+res=""
+while reader.Read():
+ while reader.Name() == 'bibl':
+ node = reader.Expand() # expand the subtree
+ if node.xpathEval("@id = 'Aho'"): # use XPath on it
+ res = res + node.serialize()
+ if reader.Next() != 1: # skip the subtree
+ break;</pre>
+
+<p>Note, however that the node instance returned by the Expand() call is only
+valid until the next Read() operation. The Expand() operation does not
+affects the Read() ones, however usually once processed the full subtree is
+not useful anymore, and the Next() operation allows to skip it completely and
+process to the successor or return 0 if the document end is reached.</p>
+
+<p><a href="mailto:veillard@redhat.com">Daniel Veillard</a></p>
+
+<p>$Id: xmlreader.html,v 1.8 2003/11/05 04:15:16 jfleck Exp $</p>
+
+<p></p>
+</body>
+</html>
diff --git a/doc/xsa.xsl b/doc/xsa.xsl
new file mode 100644
index 0000000..30151d4
--- /dev/null
+++ b/doc/xsa.xsl
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!--
+ Stylesheet generating the XSA entry for libxml2 based on the
+ latest News entry.
+ See http://www.garshol.priv.no/download/xsa/ for a description of XSA
+ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="xhtml">
+ <xsl:output method="xml"
+ doctype-public="-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
+ doctype-system="http://www.garshol.priv.no/download/xsa/xsa.dtd"
+ indent="yes"/>
+
+ <xsl:template match="/">
+<xsa>
+ <vendor>
+ <name>Daniel Veillard</name>
+ <email>daniel@veillard.com</email>
+ <url>http://veillard.com/</url>
+ </vendor>
+ <product id="libxml2">
+ <name>libxml2</name>
+ <version><xsl:value-of select="substring-before(//xhtml:h3[2], ':')"/></version>
+ <last-release><xsl:value-of select="substring-after(//xhtml:h3[2], ':')"/></last-release>
+ <info-url>http://xmlsoft.org/</info-url>
+ <changes>
+ <xsl:apply-templates select="//xhtml:h3[2]/following-sibling::*[1]"/>
+ </changes>
+ </product>
+</xsa>
+ </xsl:template>
+ <xsl:template match="xhtml:h3">
+ </xsl:template>
+ <xsl:template match="xhtml:ul">
+ <xsl:apply-templates select=".//xhtml:li"/>
+ <xsl:text>
+</xsl:text>
+ </xsl:template>
+ <xsl:template match="xhtml:li">
+ <xsl:text> - </xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>
+</xsl:text>
+ </xsl:template>
+ <xsl:template match="xhtml:a">
+ <xsl:value-of select="."/>
+ <xsl:text> at
+</xsl:text>
+ <xsl:value-of select="@href"/>
+ <xsl:text>
+</xsl:text>
+ </xsl:template>
+</xsl:stylesheet>
+
diff --git a/encoding.c b/encoding.c
new file mode 100644
index 0000000..58cc8c1
--- /dev/null
+++ b/encoding.c
@@ -0,0 +1,3237 @@
+/*
+ * encoding.c : implements the encoding conversion functions needed for XML
+ *
+ * Related specs:
+ * rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies
+ * rfc2781 UTF-16, an encoding of ISO 10646, P. Hoffman, F. Yergeau
+ * [ISO-10646] UTF-8 and UTF-16 in Annexes
+ * [ISO-8859-1] ISO Latin-1 characters codes.
+ * [UNICODE] The Unicode Consortium, "The Unicode Standard --
+ * Worldwide Character Encoding -- Version 1.0", Addison-
+ * Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is
+ * described in Unicode Technical Report #4.
+ * [US-ASCII] Coded Character Set--7-bit American Standard Code for
+ * Information Interchange, ANSI X3.4-1986.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ *
+ * Original code for IsoLatin1 and UTF-16 by "Martin J. Duerst" <duerst@w3.org>
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef LIBXML_ICONV_ENABLED
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#endif
+#include <libxml/encoding.h>
+#include <libxml/xmlmemory.h>
+#ifdef LIBXML_HTML_ENABLED
+#include <libxml/HTMLparser.h>
+#endif
+#include <libxml/globals.h>
+#include <libxml/xmlerror.h>
+
+static xmlCharEncodingHandlerPtr xmlUTF16LEHandler = NULL;
+static xmlCharEncodingHandlerPtr xmlUTF16BEHandler = NULL;
+
+typedef struct _xmlCharEncodingAlias xmlCharEncodingAlias;
+typedef xmlCharEncodingAlias *xmlCharEncodingAliasPtr;
+struct _xmlCharEncodingAlias {
+ const char *name;
+ const char *alias;
+};
+
+static xmlCharEncodingAliasPtr xmlCharEncodingAliases = NULL;
+static int xmlCharEncodingAliasesNb = 0;
+static int xmlCharEncodingAliasesMax = 0;
+
+#ifdef LIBXML_ICONV_ENABLED
+#if 0
+#define DEBUG_ENCODING /* Define this to get encoding traces */
+#endif
+#else
+#ifdef LIBXML_ISO8859X_ENABLED
+static void xmlRegisterCharEncodingHandlersISO8859x (void);
+#endif
+#endif
+
+static int xmlLittleEndian = 1;
+
+
+/************************************************************************
+ * *
+ * Conversions To/From UTF8 encoding *
+ * *
+ ************************************************************************/
+
+/**
+ * asciiToUTF8:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of ASCII chars
+ * @inlen: the length of @in
+ *
+ * Take a block of ASCII chars in and try to convert it to an UTF-8
+ * block of chars out.
+ * Returns 0 if success, or -1 otherwise
+ * The value of @inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+static int
+asciiToUTF8(unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ unsigned char* outstart = out;
+ const unsigned char* base = in;
+ const unsigned char* processed = in;
+ unsigned char* outend = out + *outlen;
+ const unsigned char* inend;
+ unsigned int c;
+ int bits;
+
+ inend = in + (*inlen);
+ while ((in < inend) && (out - outstart + 5 < *outlen)) {
+ c= *in++;
+
+ /* assertion: c is a single UTF-4 value */
+ if (out >= outend)
+ break;
+ if (c < 0x80) { *out++= c; bits= -6; }
+ else {
+ *outlen = out - outstart;
+ *inlen = processed - base;
+ return(-1);
+ }
+
+ for ( ; bits >= 0; bits-= 6) {
+ if (out >= outend)
+ break;
+ *out++= ((c >> bits) & 0x3F) | 0x80;
+ }
+ processed = (const unsigned char*) in;
+ }
+ *outlen = out - outstart;
+ *inlen = processed - base;
+ return(0);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * UTF8Toascii:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an ASCII
+ * block of chars out.
+ *
+ * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
+ * The value of @inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+static int
+UTF8Toascii(unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ const unsigned char* processed = in;
+ const unsigned char* outend;
+ const unsigned char* outstart = out;
+ const unsigned char* instart = in;
+ const unsigned char* inend;
+ unsigned int c, d;
+ int trailing;
+
+ if (in == NULL) {
+ /*
+ * initialization nothing to do
+ */
+ *outlen = 0;
+ *inlen = 0;
+ return(0);
+ }
+ inend = in + (*inlen);
+ outend = out + (*outlen);
+ while (in < inend) {
+ d = *in++;
+ if (d < 0x80) { c= d; trailing= 0; }
+ else if (d < 0xC0) {
+ /* trailing byte in leading position */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
+ else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
+ else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
+ else {
+ /* no chance for this in Ascii */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+
+ if (inend - in < trailing) {
+ break;
+ }
+
+ for ( ; trailing; trailing--) {
+ if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80))
+ break;
+ c <<= 6;
+ c |= d & 0x3F;
+ }
+
+ /* assertion: c is a single UTF-4 value */
+ if (c < 0x80) {
+ if (out >= outend)
+ break;
+ *out++ = c;
+ } else {
+ /* no chance for this in Ascii */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+ processed = in;
+ }
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(0);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * isolat1ToUTF8:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of ISO Latin 1 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of ISO Latin 1 chars in and try to convert it to an UTF-8
+ * block of chars out.
+ * Returns 0 if success, or -1 otherwise
+ * The value of @inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+int
+isolat1ToUTF8(unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ unsigned char* outstart = out;
+ const unsigned char* base = in;
+ unsigned char* outend = out + *outlen;
+ const unsigned char* inend;
+ const unsigned char* instop;
+
+ inend = in + (*inlen);
+ instop = inend;
+
+ while (in < inend && out < outend - 1) {
+ if (*in >= 0x80) {
+ *out++ = (((*in) >> 6) & 0x1F) | 0xC0;
+ *out++ = ((*in) & 0x3F) | 0x80;
+ ++in;
+ }
+ if (instop - in > outend - out) instop = in + (outend - out);
+ while (in < instop && *in < 0x80) {
+ *out++ = *in++;
+ }
+ }
+ if (in < inend && out < outend && *in < 0x80) {
+ *out++ = *in++;
+ }
+ *outlen = out - outstart;
+ *inlen = in - base;
+ return(0);
+}
+
+/**
+ * UTF8ToUTF8:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @inb: a pointer to an array of UTF-8 chars
+ * @inlenb: the length of @in in UTF-8 chars
+ *
+ * No op copy operation for UTF8 handling.
+ *
+ * Returns the number of bytes written, or -1 if lack of space.
+ * The value of *inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictable.
+ */
+static int
+UTF8ToUTF8(unsigned char* out, int *outlen,
+ const unsigned char* inb, int *inlenb)
+{
+ int len;
+
+ if ((out == NULL) || (inb == NULL) || (outlen == NULL) || (inlenb == NULL))
+ return(-1);
+ if (*outlen > *inlenb) {
+ len = *inlenb;
+ } else {
+ len = *outlen;
+ }
+ if (len < 0)
+ return(-1);
+
+ memcpy(out, inb, len);
+
+ *outlen = len;
+ *inlenb = len;
+ return(0);
+}
+
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * UTF8Toisolat1:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an ISO Latin 1
+ * block of chars out.
+ *
+ * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
+ * The value of @inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+int
+UTF8Toisolat1(unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ const unsigned char* processed = in;
+ const unsigned char* outend;
+ const unsigned char* outstart = out;
+ const unsigned char* instart = in;
+ const unsigned char* inend;
+ unsigned int c, d;
+ int trailing;
+
+ if (in == NULL) {
+ /*
+ * initialization nothing to do
+ */
+ *outlen = 0;
+ *inlen = 0;
+ return(0);
+ }
+ inend = in + (*inlen);
+ outend = out + (*outlen);
+ while (in < inend) {
+ d = *in++;
+ if (d < 0x80) { c= d; trailing= 0; }
+ else if (d < 0xC0) {
+ /* trailing byte in leading position */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
+ else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
+ else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
+ else {
+ /* no chance for this in IsoLat1 */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+
+ if (inend - in < trailing) {
+ break;
+ }
+
+ for ( ; trailing; trailing--) {
+ if (in >= inend)
+ break;
+ if (((d= *in++) & 0xC0) != 0x80) {
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+ c <<= 6;
+ c |= d & 0x3F;
+ }
+
+ /* assertion: c is a single UTF-4 value */
+ if (c <= 0xFF) {
+ if (out >= outend)
+ break;
+ *out++ = c;
+ } else {
+ /* no chance for this in IsoLat1 */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+ processed = in;
+ }
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(0);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * UTF16LEToUTF8:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @inb: a pointer to an array of UTF-16LE passwd as a byte array
+ * @inlenb: the length of @in in UTF-16LE chars
+ *
+ * Take a block of UTF-16LE ushorts in and try to convert it to an UTF-8
+ * block of chars out. This function assumes the endian property
+ * is the same between the native type of this machine and the
+ * inputed one.
+ *
+ * Returns the number of bytes written, or -1 if lack of space, or -2
+ * if the transcoding fails (if *in is not a valid utf16 string)
+ * The value of *inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictable.
+ */
+static int
+UTF16LEToUTF8(unsigned char* out, int *outlen,
+ const unsigned char* inb, int *inlenb)
+{
+ unsigned char* outstart = out;
+ const unsigned char* processed = inb;
+ unsigned char* outend = out + *outlen;
+ unsigned short* in = (unsigned short*) inb;
+ unsigned short* inend;
+ unsigned int c, d, inlen;
+ unsigned char *tmp;
+ int bits;
+
+ if ((*inlenb % 2) == 1)
+ (*inlenb)--;
+ inlen = *inlenb / 2;
+ inend = in + inlen;
+ while ((in < inend) && (out - outstart + 5 < *outlen)) {
+ if (xmlLittleEndian) {
+ c= *in++;
+ } else {
+ tmp = (unsigned char *) in;
+ c = *tmp++;
+ c = c | (((unsigned int)*tmp) << 8);
+ in++;
+ }
+ if ((c & 0xFC00) == 0xD800) { /* surrogates */
+ if (in >= inend) { /* (in > inend) shouldn't happens */
+ break;
+ }
+ if (xmlLittleEndian) {
+ d = *in++;
+ } else {
+ tmp = (unsigned char *) in;
+ d = *tmp++;
+ d = d | (((unsigned int)*tmp) << 8);
+ in++;
+ }
+ if ((d & 0xFC00) == 0xDC00) {
+ c &= 0x03FF;
+ c <<= 10;
+ c |= d & 0x03FF;
+ c += 0x10000;
+ }
+ else {
+ *outlen = out - outstart;
+ *inlenb = processed - inb;
+ return(-2);
+ }
+ }
+
+ /* assertion: c is a single UTF-4 value */
+ if (out >= outend)
+ break;
+ if (c < 0x80) { *out++= c; bits= -6; }
+ else if (c < 0x800) { *out++= ((c >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (c < 0x10000) { *out++= ((c >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else { *out++= ((c >> 18) & 0x07) | 0xF0; bits= 12; }
+
+ for ( ; bits >= 0; bits-= 6) {
+ if (out >= outend)
+ break;
+ *out++= ((c >> bits) & 0x3F) | 0x80;
+ }
+ processed = (const unsigned char*) in;
+ }
+ *outlen = out - outstart;
+ *inlenb = processed - inb;
+ return(0);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * UTF8ToUTF16LE:
+ * @outb: a pointer to an array of bytes to store the result
+ * @outlen: the length of @outb
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an UTF-16LE
+ * block of chars out.
+ *
+ * Returns the number of bytes written, or -1 if lack of space, or -2
+ * if the transcoding failed.
+ */
+static int
+UTF8ToUTF16LE(unsigned char* outb, int *outlen,
+ const unsigned char* in, int *inlen)
+{
+ unsigned short* out = (unsigned short*) outb;
+ const unsigned char* processed = in;
+ const unsigned char *const instart = in;
+ unsigned short* outstart= out;
+ unsigned short* outend;
+ const unsigned char* inend= in+*inlen;
+ unsigned int c, d;
+ int trailing;
+ unsigned char *tmp;
+ unsigned short tmp1, tmp2;
+
+ /* UTF16LE encoding has no BOM */
+ if (in == NULL) {
+ *outlen = 0;
+ *inlen = 0;
+ return(0);
+ }
+ outend = out + (*outlen / 2);
+ while (in < inend) {
+ d= *in++;
+ if (d < 0x80) { c= d; trailing= 0; }
+ else if (d < 0xC0) {
+ /* trailing byte in leading position */
+ *outlen = (out - outstart) * 2;
+ *inlen = processed - instart;
+ return(-2);
+ } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
+ else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
+ else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
+ else {
+ /* no chance for this in UTF-16 */
+ *outlen = (out - outstart) * 2;
+ *inlen = processed - instart;
+ return(-2);
+ }
+
+ if (inend - in < trailing) {
+ break;
+ }
+
+ for ( ; trailing; trailing--) {
+ if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80))
+ break;
+ c <<= 6;
+ c |= d & 0x3F;
+ }
+
+ /* assertion: c is a single UTF-4 value */
+ if (c < 0x10000) {
+ if (out >= outend)
+ break;
+ if (xmlLittleEndian) {
+ *out++ = c;
+ } else {
+ tmp = (unsigned char *) out;
+ *tmp = c ;
+ *(tmp + 1) = c >> 8 ;
+ out++;
+ }
+ }
+ else if (c < 0x110000) {
+ if (out+1 >= outend)
+ break;
+ c -= 0x10000;
+ if (xmlLittleEndian) {
+ *out++ = 0xD800 | (c >> 10);
+ *out++ = 0xDC00 | (c & 0x03FF);
+ } else {
+ tmp1 = 0xD800 | (c >> 10);
+ tmp = (unsigned char *) out;
+ *tmp = (unsigned char) tmp1;
+ *(tmp + 1) = tmp1 >> 8;
+ out++;
+
+ tmp2 = 0xDC00 | (c & 0x03FF);
+ tmp = (unsigned char *) out;
+ *tmp = (unsigned char) tmp2;
+ *(tmp + 1) = tmp2 >> 8;
+ out++;
+ }
+ }
+ else
+ break;
+ processed = in;
+ }
+ *outlen = (out - outstart) * 2;
+ *inlen = processed - instart;
+ return(0);
+}
+
+/**
+ * UTF8ToUTF16:
+ * @outb: a pointer to an array of bytes to store the result
+ * @outlen: the length of @outb
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an UTF-16
+ * block of chars out.
+ *
+ * Returns the number of bytes written, or -1 if lack of space, or -2
+ * if the transcoding failed.
+ */
+static int
+UTF8ToUTF16(unsigned char* outb, int *outlen,
+ const unsigned char* in, int *inlen)
+{
+ if (in == NULL) {
+ /*
+ * initialization, add the Byte Order Mark for UTF-16LE
+ */
+ if (*outlen >= 2) {
+ outb[0] = 0xFF;
+ outb[1] = 0xFE;
+ *outlen = 2;
+ *inlen = 0;
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "Added FFFE Byte Order Mark\n");
+#endif
+ return(2);
+ }
+ *outlen = 0;
+ *inlen = 0;
+ return(0);
+ }
+ return (UTF8ToUTF16LE(outb, outlen, in, inlen));
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * UTF16BEToUTF8:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @inb: a pointer to an array of UTF-16 passed as a byte array
+ * @inlenb: the length of @in in UTF-16 chars
+ *
+ * Take a block of UTF-16 ushorts in and try to convert it to an UTF-8
+ * block of chars out. This function assumes the endian property
+ * is the same between the native type of this machine and the
+ * inputed one.
+ *
+ * Returns the number of bytes written, or -1 if lack of space, or -2
+ * if the transcoding fails (if *in is not a valid utf16 string)
+ * The value of *inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictable.
+ */
+static int
+UTF16BEToUTF8(unsigned char* out, int *outlen,
+ const unsigned char* inb, int *inlenb)
+{
+ unsigned char* outstart = out;
+ const unsigned char* processed = inb;
+ unsigned char* outend = out + *outlen;
+ unsigned short* in = (unsigned short*) inb;
+ unsigned short* inend;
+ unsigned int c, d, inlen;
+ unsigned char *tmp;
+ int bits;
+
+ if ((*inlenb % 2) == 1)
+ (*inlenb)--;
+ inlen = *inlenb / 2;
+ inend= in + inlen;
+ while (in < inend) {
+ if (xmlLittleEndian) {
+ tmp = (unsigned char *) in;
+ c = *tmp++;
+ c = c << 8;
+ c = c | (unsigned int) *tmp;
+ in++;
+ } else {
+ c= *in++;
+ }
+ if ((c & 0xFC00) == 0xD800) { /* surrogates */
+ if (in >= inend) { /* (in > inend) shouldn't happens */
+ *outlen = out - outstart;
+ *inlenb = processed - inb;
+ return(-2);
+ }
+ if (xmlLittleEndian) {
+ tmp = (unsigned char *) in;
+ d = *tmp++;
+ d = d << 8;
+ d = d | (unsigned int) *tmp;
+ in++;
+ } else {
+ d= *in++;
+ }
+ if ((d & 0xFC00) == 0xDC00) {
+ c &= 0x03FF;
+ c <<= 10;
+ c |= d & 0x03FF;
+ c += 0x10000;
+ }
+ else {
+ *outlen = out - outstart;
+ *inlenb = processed - inb;
+ return(-2);
+ }
+ }
+
+ /* assertion: c is a single UTF-4 value */
+ if (out >= outend)
+ break;
+ if (c < 0x80) { *out++= c; bits= -6; }
+ else if (c < 0x800) { *out++= ((c >> 6) & 0x1F) | 0xC0; bits= 0; }
+ else if (c < 0x10000) { *out++= ((c >> 12) & 0x0F) | 0xE0; bits= 6; }
+ else { *out++= ((c >> 18) & 0x07) | 0xF0; bits= 12; }
+
+ for ( ; bits >= 0; bits-= 6) {
+ if (out >= outend)
+ break;
+ *out++= ((c >> bits) & 0x3F) | 0x80;
+ }
+ processed = (const unsigned char*) in;
+ }
+ *outlen = out - outstart;
+ *inlenb = processed - inb;
+ return(0);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * UTF8ToUTF16BE:
+ * @outb: a pointer to an array of bytes to store the result
+ * @outlen: the length of @outb
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an UTF-16BE
+ * block of chars out.
+ *
+ * Returns the number of byte written, or -1 by lack of space, or -2
+ * if the transcoding failed.
+ */
+static int
+UTF8ToUTF16BE(unsigned char* outb, int *outlen,
+ const unsigned char* in, int *inlen)
+{
+ unsigned short* out = (unsigned short*) outb;
+ const unsigned char* processed = in;
+ const unsigned char *const instart = in;
+ unsigned short* outstart= out;
+ unsigned short* outend;
+ const unsigned char* inend= in+*inlen;
+ unsigned int c, d;
+ int trailing;
+ unsigned char *tmp;
+ unsigned short tmp1, tmp2;
+
+ /* UTF-16BE has no BOM */
+ if (in == NULL) {
+ *outlen = 0;
+ *inlen = 0;
+ return(0);
+ }
+ outend = out + (*outlen / 2);
+ while (in < inend) {
+ d= *in++;
+ if (d < 0x80) { c= d; trailing= 0; }
+ else if (d < 0xC0) {
+ /* trailing byte in leading position */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
+ else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
+ else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
+ else {
+ /* no chance for this in UTF-16 */
+ *outlen = out - outstart;
+ *inlen = processed - instart;
+ return(-2);
+ }
+
+ if (inend - in < trailing) {
+ break;
+ }
+
+ for ( ; trailing; trailing--) {
+ if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80)) break;
+ c <<= 6;
+ c |= d & 0x3F;
+ }
+
+ /* assertion: c is a single UTF-4 value */
+ if (c < 0x10000) {
+ if (out >= outend) break;
+ if (xmlLittleEndian) {
+ tmp = (unsigned char *) out;
+ *tmp = c >> 8;
+ *(tmp + 1) = c;
+ out++;
+ } else {
+ *out++ = c;
+ }
+ }
+ else if (c < 0x110000) {
+ if (out+1 >= outend) break;
+ c -= 0x10000;
+ if (xmlLittleEndian) {
+ tmp1 = 0xD800 | (c >> 10);
+ tmp = (unsigned char *) out;
+ *tmp = tmp1 >> 8;
+ *(tmp + 1) = (unsigned char) tmp1;
+ out++;
+
+ tmp2 = 0xDC00 | (c & 0x03FF);
+ tmp = (unsigned char *) out;
+ *tmp = tmp2 >> 8;
+ *(tmp + 1) = (unsigned char) tmp2;
+ out++;
+ } else {
+ *out++ = 0xD800 | (c >> 10);
+ *out++ = 0xDC00 | (c & 0x03FF);
+ }
+ }
+ else
+ break;
+ processed = in;
+ }
+ *outlen = (out - outstart) * 2;
+ *inlen = processed - instart;
+ return(0);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ * *
+ * Generic encoding handling routines *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlDetectCharEncoding:
+ * @in: a pointer to the first bytes of the XML entity, must be at least
+ * 2 bytes long (at least 4 if encoding is UTF4 variant).
+ * @len: pointer to the length of the buffer
+ *
+ * Guess the encoding of the entity using the first bytes of the entity content
+ * according to the non-normative appendix F of the XML-1.0 recommendation.
+ *
+ * Returns one of the XML_CHAR_ENCODING_... values.
+ */
+xmlCharEncoding
+xmlDetectCharEncoding(const unsigned char* in, int len)
+{
+ if (len >= 4) {
+ if ((in[0] == 0x00) && (in[1] == 0x00) &&
+ (in[2] == 0x00) && (in[3] == 0x3C))
+ return(XML_CHAR_ENCODING_UCS4BE);
+ if ((in[0] == 0x3C) && (in[1] == 0x00) &&
+ (in[2] == 0x00) && (in[3] == 0x00))
+ return(XML_CHAR_ENCODING_UCS4LE);
+ if ((in[0] == 0x00) && (in[1] == 0x00) &&
+ (in[2] == 0x3C) && (in[3] == 0x00))
+ return(XML_CHAR_ENCODING_UCS4_2143);
+ if ((in[0] == 0x00) && (in[1] == 0x3C) &&
+ (in[2] == 0x00) && (in[3] == 0x00))
+ return(XML_CHAR_ENCODING_UCS4_3412);
+ if ((in[0] == 0x4C) && (in[1] == 0x6F) &&
+ (in[2] == 0xA7) && (in[3] == 0x94))
+ return(XML_CHAR_ENCODING_EBCDIC);
+ if ((in[0] == 0x3C) && (in[1] == 0x3F) &&
+ (in[2] == 0x78) && (in[3] == 0x6D))
+ return(XML_CHAR_ENCODING_UTF8);
+ /*
+ * Although not part of the recommendation, we also
+ * attempt an "auto-recognition" of UTF-16LE and
+ * UTF-16BE encodings.
+ */
+ if ((in[0] == 0x3C) && (in[1] == 0x00) &&
+ (in[2] == 0x3F) && (in[3] == 0x00))
+ return(XML_CHAR_ENCODING_UTF16LE);
+ if ((in[0] == 0x00) && (in[1] == 0x3C) &&
+ (in[2] == 0x00) && (in[3] == 0x3F))
+ return(XML_CHAR_ENCODING_UTF16BE);
+ }
+ if (len >= 3) {
+ /*
+ * Errata on XML-1.0 June 20 2001
+ * We now allow an UTF8 encoded BOM
+ */
+ if ((in[0] == 0xEF) && (in[1] == 0xBB) &&
+ (in[2] == 0xBF))
+ return(XML_CHAR_ENCODING_UTF8);
+ }
+ /* For UTF-16 we can recognize by the BOM */
+ if (len >= 2) {
+ if ((in[0] == 0xFE) && (in[1] == 0xFF))
+ return(XML_CHAR_ENCODING_UTF16BE);
+ if ((in[0] == 0xFF) && (in[1] == 0xFE))
+ return(XML_CHAR_ENCODING_UTF16LE);
+ }
+ return(XML_CHAR_ENCODING_NONE);
+}
+
+/**
+ * xmlCleanupEncodingAliases:
+ *
+ * Unregisters all aliases
+ */
+void
+xmlCleanupEncodingAliases(void) {
+ int i;
+
+ if (xmlCharEncodingAliases == NULL)
+ return;
+
+ for (i = 0;i < xmlCharEncodingAliasesNb;i++) {
+ if (xmlCharEncodingAliases[i].name != NULL)
+ xmlFree((char *) xmlCharEncodingAliases[i].name);
+ if (xmlCharEncodingAliases[i].alias != NULL)
+ xmlFree((char *) xmlCharEncodingAliases[i].alias);
+ }
+ xmlCharEncodingAliasesNb = 0;
+ xmlCharEncodingAliasesMax = 0;
+ xmlFree(xmlCharEncodingAliases);
+ xmlCharEncodingAliases = NULL;
+}
+
+/**
+ * xmlGetEncodingAlias:
+ * @alias: the alias name as parsed, in UTF-8 format (ASCII actually)
+ *
+ * Lookup an encoding name for the given alias.
+ *
+ * Returns NULL if not found, otherwise the original name
+ */
+const char *
+xmlGetEncodingAlias(const char *alias) {
+ int i;
+ char upper[100];
+
+ if (alias == NULL)
+ return(NULL);
+
+ if (xmlCharEncodingAliases == NULL)
+ return(NULL);
+
+ for (i = 0;i < 99;i++) {
+ upper[i] = toupper(alias[i]);
+ if (upper[i] == 0) break;
+ }
+ upper[i] = 0;
+
+ /*
+ * Walk down the list looking for a definition of the alias
+ */
+ for (i = 0;i < xmlCharEncodingAliasesNb;i++) {
+ if (!strcmp(xmlCharEncodingAliases[i].alias, upper)) {
+ return(xmlCharEncodingAliases[i].name);
+ }
+ }
+ return(NULL);
+}
+
+/**
+ * xmlAddEncodingAlias:
+ * @name: the encoding name as parsed, in UTF-8 format (ASCII actually)
+ * @alias: the alias name as parsed, in UTF-8 format (ASCII actually)
+ *
+ * Registers an alias @alias for an encoding named @name. Existing alias
+ * will be overwritten.
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+xmlAddEncodingAlias(const char *name, const char *alias) {
+ int i;
+ char upper[100];
+
+ if ((name == NULL) || (alias == NULL))
+ return(-1);
+
+ for (i = 0;i < 99;i++) {
+ upper[i] = toupper(alias[i]);
+ if (upper[i] == 0) break;
+ }
+ upper[i] = 0;
+
+ if (xmlCharEncodingAliases == NULL) {
+ xmlCharEncodingAliasesNb = 0;
+ xmlCharEncodingAliasesMax = 20;
+ xmlCharEncodingAliases = (xmlCharEncodingAliasPtr)
+ xmlMalloc(xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias));
+ if (xmlCharEncodingAliases == NULL)
+ return(-1);
+ } else if (xmlCharEncodingAliasesNb >= xmlCharEncodingAliasesMax) {
+ xmlCharEncodingAliasesMax *= 2;
+ xmlCharEncodingAliases = (xmlCharEncodingAliasPtr)
+ xmlRealloc(xmlCharEncodingAliases,
+ xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias));
+ }
+ /*
+ * Walk down the list looking for a definition of the alias
+ */
+ for (i = 0;i < xmlCharEncodingAliasesNb;i++) {
+ if (!strcmp(xmlCharEncodingAliases[i].alias, upper)) {
+ /*
+ * Replace the definition.
+ */
+ xmlFree((char *) xmlCharEncodingAliases[i].name);
+ xmlCharEncodingAliases[i].name = xmlMemStrdup(name);
+ return(0);
+ }
+ }
+ /*
+ * Add the definition
+ */
+ xmlCharEncodingAliases[xmlCharEncodingAliasesNb].name = xmlMemStrdup(name);
+ xmlCharEncodingAliases[xmlCharEncodingAliasesNb].alias = xmlMemStrdup(upper);
+ xmlCharEncodingAliasesNb++;
+ return(0);
+}
+
+/**
+ * xmlDelEncodingAlias:
+ * @alias: the alias name as parsed, in UTF-8 format (ASCII actually)
+ *
+ * Unregisters an encoding alias @alias
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+xmlDelEncodingAlias(const char *alias) {
+ int i;
+
+ if (alias == NULL)
+ return(-1);
+
+ if (xmlCharEncodingAliases == NULL)
+ return(-1);
+ /*
+ * Walk down the list looking for a definition of the alias
+ */
+ for (i = 0;i < xmlCharEncodingAliasesNb;i++) {
+ if (!strcmp(xmlCharEncodingAliases[i].alias, alias)) {
+ xmlFree((char *) xmlCharEncodingAliases[i].name);
+ xmlFree((char *) xmlCharEncodingAliases[i].alias);
+ xmlCharEncodingAliasesNb--;
+ memmove(&xmlCharEncodingAliases[i], &xmlCharEncodingAliases[i + 1],
+ sizeof(xmlCharEncodingAlias) * (xmlCharEncodingAliasesNb - i));
+ return(0);
+ }
+ }
+ return(-1);
+}
+
+/**
+ * xmlParseCharEncoding:
+ * @name: the encoding name as parsed, in UTF-8 format (ASCII actually)
+ *
+ * Compare the string to the encoding schemes already known. Note
+ * that the comparison is case insensitive accordingly to the section
+ * [XML] 4.3.3 Character Encoding in Entities.
+ *
+ * Returns one of the XML_CHAR_ENCODING_... values or XML_CHAR_ENCODING_NONE
+ * if not recognized.
+ */
+xmlCharEncoding
+xmlParseCharEncoding(const char* name)
+{
+ const char *alias;
+ char upper[500];
+ int i;
+
+ if (name == NULL)
+ return(XML_CHAR_ENCODING_NONE);
+
+ /*
+ * Do the alias resolution
+ */
+ alias = xmlGetEncodingAlias(name);
+ if (alias != NULL)
+ name = alias;
+
+ for (i = 0;i < 499;i++) {
+ upper[i] = toupper(name[i]);
+ if (upper[i] == 0) break;
+ }
+ upper[i] = 0;
+
+ if (!strcmp(upper, "")) return(XML_CHAR_ENCODING_NONE);
+ if (!strcmp(upper, "UTF-8")) return(XML_CHAR_ENCODING_UTF8);
+ if (!strcmp(upper, "UTF8")) return(XML_CHAR_ENCODING_UTF8);
+
+ /*
+ * NOTE: if we were able to parse this, the endianness of UTF16 is
+ * already found and in use
+ */
+ if (!strcmp(upper, "UTF-16")) return(XML_CHAR_ENCODING_UTF16LE);
+ if (!strcmp(upper, "UTF16")) return(XML_CHAR_ENCODING_UTF16LE);
+
+ if (!strcmp(upper, "ISO-10646-UCS-2")) return(XML_CHAR_ENCODING_UCS2);
+ if (!strcmp(upper, "UCS-2")) return(XML_CHAR_ENCODING_UCS2);
+ if (!strcmp(upper, "UCS2")) return(XML_CHAR_ENCODING_UCS2);
+
+ /*
+ * NOTE: if we were able to parse this, the endianness of UCS4 is
+ * already found and in use
+ */
+ if (!strcmp(upper, "ISO-10646-UCS-4")) return(XML_CHAR_ENCODING_UCS4LE);
+ if (!strcmp(upper, "UCS-4")) return(XML_CHAR_ENCODING_UCS4LE);
+ if (!strcmp(upper, "UCS4")) return(XML_CHAR_ENCODING_UCS4LE);
+
+
+ if (!strcmp(upper, "ISO-8859-1")) return(XML_CHAR_ENCODING_8859_1);
+ if (!strcmp(upper, "ISO-LATIN-1")) return(XML_CHAR_ENCODING_8859_1);
+ if (!strcmp(upper, "ISO LATIN 1")) return(XML_CHAR_ENCODING_8859_1);
+
+ if (!strcmp(upper, "ISO-8859-2")) return(XML_CHAR_ENCODING_8859_2);
+ if (!strcmp(upper, "ISO-LATIN-2")) return(XML_CHAR_ENCODING_8859_2);
+ if (!strcmp(upper, "ISO LATIN 2")) return(XML_CHAR_ENCODING_8859_2);
+
+ if (!strcmp(upper, "ISO-8859-3")) return(XML_CHAR_ENCODING_8859_3);
+ if (!strcmp(upper, "ISO-8859-4")) return(XML_CHAR_ENCODING_8859_4);
+ if (!strcmp(upper, "ISO-8859-5")) return(XML_CHAR_ENCODING_8859_5);
+ if (!strcmp(upper, "ISO-8859-6")) return(XML_CHAR_ENCODING_8859_6);
+ if (!strcmp(upper, "ISO-8859-7")) return(XML_CHAR_ENCODING_8859_7);
+ if (!strcmp(upper, "ISO-8859-8")) return(XML_CHAR_ENCODING_8859_8);
+ if (!strcmp(upper, "ISO-8859-9")) return(XML_CHAR_ENCODING_8859_9);
+
+ if (!strcmp(upper, "ISO-2022-JP")) return(XML_CHAR_ENCODING_2022_JP);
+ if (!strcmp(upper, "SHIFT_JIS")) return(XML_CHAR_ENCODING_SHIFT_JIS);
+ if (!strcmp(upper, "EUC-JP")) return(XML_CHAR_ENCODING_EUC_JP);
+
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext, "Unknown encoding %s\n", name);
+#endif
+ return(XML_CHAR_ENCODING_ERROR);
+}
+
+/**
+ * xmlGetCharEncodingName:
+ * @enc: the encoding
+ *
+ * The "canonical" name for XML encoding.
+ * C.f. http://www.w3.org/TR/REC-xml#charencoding
+ * Section 4.3.3 Character Encoding in Entities
+ *
+ * Returns the canonical name for the given encoding
+ */
+
+const char*
+xmlGetCharEncodingName(xmlCharEncoding enc) {
+ switch (enc) {
+ case XML_CHAR_ENCODING_ERROR:
+ return(NULL);
+ case XML_CHAR_ENCODING_NONE:
+ return(NULL);
+ case XML_CHAR_ENCODING_UTF8:
+ return("UTF-8");
+ case XML_CHAR_ENCODING_UTF16LE:
+ return("UTF-16");
+ case XML_CHAR_ENCODING_UTF16BE:
+ return("UTF-16");
+ case XML_CHAR_ENCODING_EBCDIC:
+ return("EBCDIC");
+ case XML_CHAR_ENCODING_UCS4LE:
+ return("ISO-10646-UCS-4");
+ case XML_CHAR_ENCODING_UCS4BE:
+ return("ISO-10646-UCS-4");
+ case XML_CHAR_ENCODING_UCS4_2143:
+ return("ISO-10646-UCS-4");
+ case XML_CHAR_ENCODING_UCS4_3412:
+ return("ISO-10646-UCS-4");
+ case XML_CHAR_ENCODING_UCS2:
+ return("ISO-10646-UCS-2");
+ case XML_CHAR_ENCODING_8859_1:
+ return("ISO-8859-1");
+ case XML_CHAR_ENCODING_8859_2:
+ return("ISO-8859-2");
+ case XML_CHAR_ENCODING_8859_3:
+ return("ISO-8859-3");
+ case XML_CHAR_ENCODING_8859_4:
+ return("ISO-8859-4");
+ case XML_CHAR_ENCODING_8859_5:
+ return("ISO-8859-5");
+ case XML_CHAR_ENCODING_8859_6:
+ return("ISO-8859-6");
+ case XML_CHAR_ENCODING_8859_7:
+ return("ISO-8859-7");
+ case XML_CHAR_ENCODING_8859_8:
+ return("ISO-8859-8");
+ case XML_CHAR_ENCODING_8859_9:
+ return("ISO-8859-9");
+ case XML_CHAR_ENCODING_2022_JP:
+ return("ISO-2022-JP");
+ case XML_CHAR_ENCODING_SHIFT_JIS:
+ return("Shift-JIS");
+ case XML_CHAR_ENCODING_EUC_JP:
+ return("EUC-JP");
+ case XML_CHAR_ENCODING_ASCII:
+ return(NULL);
+ }
+ return(NULL);
+}
+
+/************************************************************************
+ * *
+ * Char encoding handlers *
+ * *
+ ************************************************************************/
+
+
+/* the size should be growable, but it's not a big deal ... */
+#define MAX_ENCODING_HANDLERS 50
+static xmlCharEncodingHandlerPtr *handlers = NULL;
+static int nbCharEncodingHandler = 0;
+
+/*
+ * The default is UTF-8 for XML, that's also the default used for the
+ * parser internals, so the default encoding handler is NULL
+ */
+
+static xmlCharEncodingHandlerPtr xmlDefaultCharEncodingHandler = NULL;
+
+/**
+ * xmlNewCharEncodingHandler:
+ * @name: the encoding name, in UTF-8 format (ASCII actually)
+ * @input: the xmlCharEncodingInputFunc to read that encoding
+ * @output: the xmlCharEncodingOutputFunc to write that encoding
+ *
+ * Create and registers an xmlCharEncodingHandler.
+ *
+ * Returns the xmlCharEncodingHandlerPtr created (or NULL in case of error).
+ */
+xmlCharEncodingHandlerPtr
+xmlNewCharEncodingHandler(const char *name,
+ xmlCharEncodingInputFunc input,
+ xmlCharEncodingOutputFunc output) {
+ xmlCharEncodingHandlerPtr handler;
+ const char *alias;
+ char upper[500];
+ int i;
+ char *up = 0;
+
+ /*
+ * Do the alias resolution
+ */
+ alias = xmlGetEncodingAlias(name);
+ if (alias != NULL)
+ name = alias;
+
+ /*
+ * Keep only the uppercase version of the encoding.
+ */
+ if (name == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewCharEncodingHandler : no name !\n");
+ return(NULL);
+ }
+ for (i = 0;i < 499;i++) {
+ upper[i] = toupper(name[i]);
+ if (upper[i] == 0) break;
+ }
+ upper[i] = 0;
+ up = xmlMemStrdup(upper);
+ if (up == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewCharEncodingHandler : out of memory !\n");
+ return(NULL);
+ }
+
+ /*
+ * allocate and fill-up an handler block.
+ */
+ handler = (xmlCharEncodingHandlerPtr)
+ xmlMalloc(sizeof(xmlCharEncodingHandler));
+ if (handler == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewCharEncodingHandler : out of memory !\n");
+ return(NULL);
+ }
+ handler->input = input;
+ handler->output = output;
+ handler->name = up;
+
+#ifdef LIBXML_ICONV_ENABLED
+ handler->iconv_in = NULL;
+ handler->iconv_out = NULL;
+#endif /* LIBXML_ICONV_ENABLED */
+
+ /*
+ * registers and returns the handler.
+ */
+ xmlRegisterCharEncodingHandler(handler);
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "Registered encoding handler for %s\n", name);
+#endif
+ return(handler);
+}
+
+/**
+ * xmlInitCharEncodingHandlers:
+ *
+ * Initialize the char encoding support, it registers the default
+ * encoding supported.
+ * NOTE: while public, this function usually doesn't need to be called
+ * in normal processing.
+ */
+void
+xmlInitCharEncodingHandlers(void) {
+ unsigned short int tst = 0x1234;
+ unsigned char *ptr = (unsigned char *) &tst;
+
+ if (handlers != NULL) return;
+
+ handlers = (xmlCharEncodingHandlerPtr *)
+ xmlMalloc(MAX_ENCODING_HANDLERS * sizeof(xmlCharEncodingHandlerPtr));
+
+ if (*ptr == 0x12) xmlLittleEndian = 0;
+ else if (*ptr == 0x34) xmlLittleEndian = 1;
+ else xmlGenericError(xmlGenericErrorContext,
+ "Odd problem at endianness detection\n");
+
+ if (handlers == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlInitCharEncodingHandlers : out of memory !\n");
+ return;
+ }
+ xmlNewCharEncodingHandler("UTF-8", UTF8ToUTF8, UTF8ToUTF8);
+#ifdef LIBXML_OUTPUT_ENABLED
+ xmlUTF16LEHandler =
+ xmlNewCharEncodingHandler("UTF-16LE", UTF16LEToUTF8, UTF8ToUTF16LE);
+ xmlUTF16BEHandler =
+ xmlNewCharEncodingHandler("UTF-16BE", UTF16BEToUTF8, UTF8ToUTF16BE);
+ xmlNewCharEncodingHandler("UTF-16", UTF16LEToUTF8, UTF8ToUTF16);
+ xmlNewCharEncodingHandler("ISO-8859-1", isolat1ToUTF8, UTF8Toisolat1);
+ xmlNewCharEncodingHandler("ASCII", asciiToUTF8, UTF8Toascii);
+ xmlNewCharEncodingHandler("US-ASCII", asciiToUTF8, UTF8Toascii);
+#ifdef LIBXML_HTML_ENABLED
+ xmlNewCharEncodingHandler("HTML", NULL, UTF8ToHtml);
+#endif
+#else
+ xmlUTF16LEHandler =
+ xmlNewCharEncodingHandler("UTF-16LE", UTF16LEToUTF8, NULL);
+ xmlUTF16BEHandler =
+ xmlNewCharEncodingHandler("UTF-16BE", UTF16BEToUTF8, NULL);
+ xmlNewCharEncodingHandler("UTF-16", UTF16LEToUTF8, NULL);
+ xmlNewCharEncodingHandler("ISO-8859-1", isolat1ToUTF8, NULL);
+ xmlNewCharEncodingHandler("ASCII", asciiToUTF8, NULL);
+ xmlNewCharEncodingHandler("US-ASCII", asciiToUTF8, NULL);
+#endif /* LIBXML_OUTPUT_ENABLED */
+#ifndef LIBXML_ICONV_ENABLED
+#ifdef LIBXML_ISO8859X_ENABLED
+ xmlRegisterCharEncodingHandlersISO8859x ();
+#endif
+#endif
+
+}
+
+/**
+ * xmlCleanupCharEncodingHandlers:
+ *
+ * Cleanup the memory allocated for the char encoding support, it
+ * unregisters all the encoding handlers and the aliases.
+ */
+void
+xmlCleanupCharEncodingHandlers(void) {
+ xmlCleanupEncodingAliases();
+
+ if (handlers == NULL) return;
+
+ for (;nbCharEncodingHandler > 0;) {
+ nbCharEncodingHandler--;
+ if (handlers[nbCharEncodingHandler] != NULL) {
+ if (handlers[nbCharEncodingHandler]->name != NULL)
+ xmlFree(handlers[nbCharEncodingHandler]->name);
+ xmlFree(handlers[nbCharEncodingHandler]);
+ }
+ }
+ xmlFree(handlers);
+ handlers = NULL;
+ nbCharEncodingHandler = 0;
+ xmlDefaultCharEncodingHandler = NULL;
+}
+
+/**
+ * xmlRegisterCharEncodingHandler:
+ * @handler: the xmlCharEncodingHandlerPtr handler block
+ *
+ * Register the char encoding handler, surprising, isn't it ?
+ */
+void
+xmlRegisterCharEncodingHandler(xmlCharEncodingHandlerPtr handler) {
+ if (handlers == NULL) xmlInitCharEncodingHandlers();
+ if (handler == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRegisterCharEncodingHandler: NULL handler !\n");
+ return;
+ }
+
+ if (nbCharEncodingHandler >= MAX_ENCODING_HANDLERS) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRegisterCharEncodingHandler: Too many handler registered\n");
+ xmlGenericError(xmlGenericErrorContext,
+ "\tincrease MAX_ENCODING_HANDLERS : %s\n", __FILE__);
+ return;
+ }
+ handlers[nbCharEncodingHandler++] = handler;
+}
+
+/**
+ * xmlGetCharEncodingHandler:
+ * @enc: an xmlCharEncoding value.
+ *
+ * Search in the registered set the handler able to read/write that encoding.
+ *
+ * Returns the handler or NULL if not found
+ */
+xmlCharEncodingHandlerPtr
+xmlGetCharEncodingHandler(xmlCharEncoding enc) {
+ xmlCharEncodingHandlerPtr handler;
+
+ if (handlers == NULL) xmlInitCharEncodingHandlers();
+ switch (enc) {
+ case XML_CHAR_ENCODING_ERROR:
+ return(NULL);
+ case XML_CHAR_ENCODING_NONE:
+ return(NULL);
+ case XML_CHAR_ENCODING_UTF8:
+ return(NULL);
+ case XML_CHAR_ENCODING_UTF16LE:
+ return(xmlUTF16LEHandler);
+ case XML_CHAR_ENCODING_UTF16BE:
+ return(xmlUTF16BEHandler);
+ case XML_CHAR_ENCODING_EBCDIC:
+ handler = xmlFindCharEncodingHandler("EBCDIC");
+ if (handler != NULL) return(handler);
+ handler = xmlFindCharEncodingHandler("ebcdic");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_UCS4BE:
+ handler = xmlFindCharEncodingHandler("ISO-10646-UCS-4");
+ if (handler != NULL) return(handler);
+ handler = xmlFindCharEncodingHandler("UCS-4");
+ if (handler != NULL) return(handler);
+ handler = xmlFindCharEncodingHandler("UCS4");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_UCS4LE:
+ handler = xmlFindCharEncodingHandler("ISO-10646-UCS-4");
+ if (handler != NULL) return(handler);
+ handler = xmlFindCharEncodingHandler("UCS-4");
+ if (handler != NULL) return(handler);
+ handler = xmlFindCharEncodingHandler("UCS4");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_UCS4_2143:
+ break;
+ case XML_CHAR_ENCODING_UCS4_3412:
+ break;
+ case XML_CHAR_ENCODING_UCS2:
+ handler = xmlFindCharEncodingHandler("ISO-10646-UCS-2");
+ if (handler != NULL) return(handler);
+ handler = xmlFindCharEncodingHandler("UCS-2");
+ if (handler != NULL) return(handler);
+ handler = xmlFindCharEncodingHandler("UCS2");
+ if (handler != NULL) return(handler);
+ break;
+
+ /*
+ * We used to keep ISO Latin encodings native in the
+ * generated data. This led to so many problems that
+ * this has been removed. One can still change this
+ * back by registering no-ops encoders for those
+ */
+ case XML_CHAR_ENCODING_8859_1:
+ handler = xmlFindCharEncodingHandler("ISO-8859-1");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_8859_2:
+ handler = xmlFindCharEncodingHandler("ISO-8859-2");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_8859_3:
+ handler = xmlFindCharEncodingHandler("ISO-8859-3");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_8859_4:
+ handler = xmlFindCharEncodingHandler("ISO-8859-4");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_8859_5:
+ handler = xmlFindCharEncodingHandler("ISO-8859-5");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_8859_6:
+ handler = xmlFindCharEncodingHandler("ISO-8859-6");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_8859_7:
+ handler = xmlFindCharEncodingHandler("ISO-8859-7");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_8859_8:
+ handler = xmlFindCharEncodingHandler("ISO-8859-8");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_8859_9:
+ handler = xmlFindCharEncodingHandler("ISO-8859-9");
+ if (handler != NULL) return(handler);
+ break;
+
+
+ case XML_CHAR_ENCODING_2022_JP:
+ handler = xmlFindCharEncodingHandler("ISO-2022-JP");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_SHIFT_JIS:
+ handler = xmlFindCharEncodingHandler("SHIFT-JIS");
+ if (handler != NULL) return(handler);
+ handler = xmlFindCharEncodingHandler("SHIFT_JIS");
+ if (handler != NULL) return(handler);
+ handler = xmlFindCharEncodingHandler("Shift_JIS");
+ if (handler != NULL) return(handler);
+ break;
+ case XML_CHAR_ENCODING_EUC_JP:
+ handler = xmlFindCharEncodingHandler("EUC-JP");
+ if (handler != NULL) return(handler);
+ break;
+ default:
+ break;
+ }
+
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "No handler found for encoding %d\n", enc);
+#endif
+ return(NULL);
+}
+
+/**
+ * xmlFindCharEncodingHandler:
+ * @name: a string describing the char encoding.
+ *
+ * Search in the registered set the handler able to read/write that encoding.
+ *
+ * Returns the handler or NULL if not found
+ */
+xmlCharEncodingHandlerPtr
+xmlFindCharEncodingHandler(const char *name) {
+ const char *nalias;
+ const char *norig;
+ xmlCharEncoding alias;
+#ifdef LIBXML_ICONV_ENABLED
+ xmlCharEncodingHandlerPtr enc;
+ iconv_t icv_in, icv_out;
+#endif /* LIBXML_ICONV_ENABLED */
+ char upper[100];
+ int i;
+
+ if (handlers == NULL) xmlInitCharEncodingHandlers();
+ if (name == NULL) return(xmlDefaultCharEncodingHandler);
+ if (name[0] == 0) return(xmlDefaultCharEncodingHandler);
+
+ /*
+ * Do the alias resolution
+ */
+ norig = name;
+ nalias = xmlGetEncodingAlias(name);
+ if (nalias != NULL)
+ name = nalias;
+
+ /*
+ * Check first for directly registered encoding names
+ */
+ for (i = 0;i < 99;i++) {
+ upper[i] = toupper(name[i]);
+ if (upper[i] == 0) break;
+ }
+ upper[i] = 0;
+
+ for (i = 0;i < nbCharEncodingHandler; i++)
+ if (!strcmp(upper, handlers[i]->name)) {
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "Found registered handler for encoding %s\n", name);
+#endif
+ return(handlers[i]);
+ }
+
+#ifdef LIBXML_ICONV_ENABLED
+ /* check whether iconv can handle this */
+ icv_in = iconv_open("UTF-8", name);
+ icv_out = iconv_open(name, "UTF-8");
+ if ((icv_in != (iconv_t) -1) && (icv_out != (iconv_t) -1)) {
+ enc = (xmlCharEncodingHandlerPtr)
+ xmlMalloc(sizeof(xmlCharEncodingHandler));
+ if (enc == NULL) {
+ iconv_close(icv_in);
+ iconv_close(icv_out);
+ return(NULL);
+ }
+ enc->name = xmlMemStrdup(name);
+ enc->input = NULL;
+ enc->output = NULL;
+ enc->iconv_in = icv_in;
+ enc->iconv_out = icv_out;
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "Found iconv handler for encoding %s\n", name);
+#endif
+ return enc;
+ } else if ((icv_in != (iconv_t) -1) || icv_out != (iconv_t) -1) {
+ xmlGenericError(xmlGenericErrorContext,
+ "iconv : problems with filters for '%s'\n", name);
+ }
+#endif /* LIBXML_ICONV_ENABLED */
+
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "No handler found for encoding %s\n", name);
+#endif
+
+ /*
+ * Fallback using the canonical names
+ */
+ alias = xmlParseCharEncoding(norig);
+ if (alias != XML_CHAR_ENCODING_ERROR) {
+ const char* canon;
+ canon = xmlGetCharEncodingName(alias);
+ if ((canon != NULL) && (strcmp(name, canon))) {
+ return(xmlFindCharEncodingHandler(canon));
+ }
+ }
+
+ /* If "none of the above", give up */
+ return(NULL);
+}
+
+/************************************************************************
+ * *
+ * ICONV based generic conversion functions *
+ * *
+ ************************************************************************/
+
+#ifdef LIBXML_ICONV_ENABLED
+/**
+ * xmlIconvWrapper:
+ * @cd: iconv converter data structure
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of ISO Latin 1 chars
+ * @inlen: the length of @in
+ *
+ * Returns 0 if success, or
+ * -1 by lack of space, or
+ * -2 if the transcoding fails (for *in is not valid utf8 string or
+ * the result of transformation can't fit into the encoding we want), or
+ * -3 if there the last byte can't form a single output char.
+ *
+ * The value of @inlen after return is the number of octets consumed
+ * as the return value is positive, else unpredictable.
+ * The value of @outlen after return is the number of ocetes consumed.
+ */
+static int
+xmlIconvWrapper(iconv_t cd,
+ unsigned char *out, int *outlen,
+ const unsigned char *in, int *inlen) {
+
+ size_t icv_inlen = *inlen, icv_outlen = *outlen;
+ const char *icv_in = (const char *) in;
+ char *icv_out = (char *) out;
+ int ret;
+
+ ret = iconv(cd, (char **) &icv_in, &icv_inlen, &icv_out, &icv_outlen);
+ if (in != NULL) {
+ *inlen -= icv_inlen;
+ *outlen -= icv_outlen;
+ } else {
+ *inlen = 0;
+ *outlen = 0;
+ }
+ if ((icv_inlen != 0) || (ret == -1)) {
+#ifdef EILSEQ
+ if (errno == EILSEQ) {
+ return -2;
+ } else
+#endif
+#ifdef E2BIG
+ if (errno == E2BIG) {
+ return -1;
+ } else
+#endif
+#ifdef EINVAL
+ if (errno == EINVAL) {
+ return -3;
+ } else
+#endif
+ {
+ return -3;
+ }
+ }
+ return 0;
+}
+#endif /* LIBXML_ICONV_ENABLED */
+
+/************************************************************************
+ * *
+ * The real API used by libxml for on-the-fly conversion *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCharEncFirstLine:
+ * @handler: char enconding transformation data structure
+ * @out: an xmlBuffer for the output.
+ * @in: an xmlBuffer for the input
+ *
+ * Front-end for the encoding handler input function, but handle only
+ * the very first line, i.e. limit itself to 45 chars.
+ *
+ * Returns the number of byte written if success, or
+ * -1 general error
+ * -2 if the transcoding fails (for *in is not valid utf8 string or
+ * the result of transformation can't fit into the encoding we want), or
+ */
+int
+xmlCharEncFirstLine(xmlCharEncodingHandler *handler, xmlBufferPtr out,
+ xmlBufferPtr in) {
+ int ret = -2;
+ int written;
+ int toconv;
+
+ if (handler == NULL) return(-1);
+ if (out == NULL) return(-1);
+ if (in == NULL) return(-1);
+
+ written = out->size - out->use;
+ toconv = in->use;
+ if (toconv * 2 >= written) {
+ xmlBufferGrow(out, toconv);
+ written = out->size - out->use - 1;
+ }
+
+ /*
+ * echo '<?xml version="1.0" encoding="UCS4"?>' | wc -c => 38
+ * 45 chars should be sufficient to reach the end of the encoding
+ * declaration without going too far inside the document content.
+ */
+ written = 45;
+
+ if (handler->input != NULL) {
+ ret = handler->input(&out->content[out->use], &written,
+ in->content, &toconv);
+ xmlBufferShrink(in, toconv);
+ out->use += written;
+ out->content[out->use] = 0;
+ }
+#ifdef LIBXML_ICONV_ENABLED
+ else if (handler->iconv_in != NULL) {
+ ret = xmlIconvWrapper(handler->iconv_in, &out->content[out->use],
+ &written, in->content, &toconv);
+ xmlBufferShrink(in, toconv);
+ out->use += written;
+ out->content[out->use] = 0;
+ if (ret == -1) ret = -3;
+ }
+#endif /* LIBXML_ICONV_ENABLED */
+#ifdef DEBUG_ENCODING
+ switch (ret) {
+ case 0:
+ xmlGenericError(xmlGenericErrorContext,
+ "converted %d bytes to %d bytes of input\n",
+ toconv, written);
+ break;
+ case -1:
+ xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of input, %d left\n",
+ toconv, written, in->use);
+ break;
+ case -2:
+ xmlGenericError(xmlGenericErrorContext,
+ "input conversion failed due to input error\n");
+ break;
+ case -3:
+ xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of input, %d left\n",
+ toconv, written, in->use);
+ break;
+ default:
+ xmlGenericError(xmlGenericErrorContext,"Unknown input conversion failed %d\n", ret);
+ }
+#endif /* DEBUG_ENCODING */
+ /*
+ * Ignore when input buffer is not on a boundary
+ */
+ if (ret == -3) ret = 0;
+ if (ret == -1) ret = 0;
+ return(ret);
+}
+
+/**
+ * xmlCharEncInFunc:
+ * @handler: char encoding transformation data structure
+ * @out: an xmlBuffer for the output.
+ * @in: an xmlBuffer for the input
+ *
+ * Generic front-end for the encoding handler input function
+ *
+ * Returns the number of byte written if success, or
+ * -1 general error
+ * -2 if the transcoding fails (for *in is not valid utf8 string or
+ * the result of transformation can't fit into the encoding we want), or
+ */
+int
+xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out,
+ xmlBufferPtr in)
+{
+ int ret = -2;
+ int written;
+ int toconv;
+
+ if (handler == NULL)
+ return (-1);
+ if (out == NULL)
+ return (-1);
+ if (in == NULL)
+ return (-1);
+
+ toconv = in->use;
+ if (toconv == 0)
+ return (0);
+ written = out->size - out->use;
+ if (toconv * 2 >= written) {
+ xmlBufferGrow(out, out->size + toconv * 2);
+ written = out->size - out->use - 1;
+ }
+ if (handler->input != NULL) {
+ ret = handler->input(&out->content[out->use], &written,
+ in->content, &toconv);
+ xmlBufferShrink(in, toconv);
+ out->use += written;
+ out->content[out->use] = 0;
+ }
+#ifdef LIBXML_ICONV_ENABLED
+ else if (handler->iconv_in != NULL) {
+ ret = xmlIconvWrapper(handler->iconv_in, &out->content[out->use],
+ &written, in->content, &toconv);
+ xmlBufferShrink(in, toconv);
+ out->use += written;
+ out->content[out->use] = 0;
+ if (ret == -1)
+ ret = -3;
+ }
+#endif /* LIBXML_ICONV_ENABLED */
+ switch (ret) {
+ case 0:
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "converted %d bytes to %d bytes of input\n",
+ toconv, written);
+#endif
+ break;
+ case -1:
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "converted %d bytes to %d bytes of input, %d left\n",
+ toconv, written, in->use);
+#endif
+ break;
+ case -3:
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "converted %d bytes to %d bytes of input, %d left\n",
+ 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]);
+ }
+ /*
+ * Ignore when input buffer is not on a boundary
+ */
+ if (ret == -3)
+ ret = 0;
+ return (written);
+}
+
+/**
+ * xmlCharEncOutFunc:
+ * @handler: char enconding transformation data structure
+ * @out: an xmlBuffer for the output.
+ * @in: an xmlBuffer for the input
+ *
+ * Generic front-end for the encoding handler output function
+ * a first call with @in == NULL has to be made firs to initiate the
+ * output in case of non-stateless encoding needing to initiate their
+ * state or the output (like the BOM in UTF16).
+ * In case of UTF8 sequence conversion errors for the given encoder,
+ * the content will be automatically remapped to a CharRef sequence.
+ *
+ * Returns the number of byte written if success, or
+ * -1 general error
+ * -2 if the transcoding fails (for *in is not valid utf8 string or
+ * the result of transformation can't fit into the encoding we want), or
+ */
+int
+xmlCharEncOutFunc(xmlCharEncodingHandler *handler, xmlBufferPtr out,
+ xmlBufferPtr in) {
+ int ret = -2;
+ int written;
+ int writtentot = 0;
+ int toconv;
+ int output = 0;
+
+ if (handler == NULL) return(-1);
+ if (out == NULL) return(-1);
+
+retry:
+
+ written = out->size - out->use;
+
+ if (written > 0)
+ written--; /* Gennady: count '/0' */
+
+ /*
+ * First specific handling of in = NULL, i.e. the initialization call
+ */
+ if (in == NULL) {
+ toconv = 0;
+ if (handler->output != NULL) {
+ ret = handler->output(&out->content[out->use], &written,
+ NULL, &toconv);
+ if (ret >= 0) { /* Gennady: check return value */
+ out->use += written;
+ out->content[out->use] = 0;
+ }
+ }
+#ifdef LIBXML_ICONV_ENABLED
+ else if (handler->iconv_out != NULL) {
+ ret = xmlIconvWrapper(handler->iconv_out, &out->content[out->use],
+ &written, NULL, &toconv);
+ out->use += written;
+ out->content[out->use] = 0;
+ }
+#endif /* LIBXML_ICONV_ENABLED */
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "initialized encoder\n");
+#endif
+ return(0);
+ }
+
+ /*
+ * Conversion itself.
+ */
+ toconv = in->use;
+ if (toconv == 0)
+ return(0);
+ if (toconv * 2 >= written) {
+ xmlBufferGrow(out, toconv * 2);
+ written = out->size - out->use - 1;
+ }
+ if (handler->output != NULL) {
+ ret = handler->output(&out->content[out->use], &written,
+ in->content, &toconv);
+ xmlBufferShrink(in, toconv);
+ out->use += written;
+ writtentot += written;
+ out->content[out->use] = 0;
+ }
+#ifdef LIBXML_ICONV_ENABLED
+ else if (handler->iconv_out != NULL) {
+ ret = xmlIconvWrapper(handler->iconv_out, &out->content[out->use],
+ &written, in->content, &toconv);
+ xmlBufferShrink(in, toconv);
+ out->use += written;
+ writtentot += written;
+ out->content[out->use] = 0;
+ if (ret == -1) {
+ if (written > 0) {
+ /*
+ * Can be a limitation of iconv
+ */
+ goto retry;
+ }
+ ret = -3;
+ }
+ }
+#endif /* LIBXML_ICONV_ENABLED */
+ else {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlCharEncOutFunc: no output function !\n");
+ return(-1);
+ }
+
+ if (ret >= 0) output += ret;
+
+ /*
+ * Attempt to handle error cases
+ */
+ switch (ret) {
+ case 0:
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "converted %d bytes to %d bytes of output\n",
+ toconv, written);
+#endif
+ break;
+ case -1:
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "output conversion failed by lack of space\n");
+#endif
+ break;
+ case -3:
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of output %d left\n",
+ toconv, written, in->use);
+#endif
+ break;
+ case -2: {
+ int len = in->use;
+ const xmlChar *utf = (const xmlChar *) in->content;
+ int cur;
+
+ cur = xmlGetUTF8Char(utf, &len);
+ if (cur > 0) {
+ xmlChar charref[20];
+
+#ifdef DEBUG_ENCODING
+ xmlGenericError(xmlGenericErrorContext,
+ "handling output conversion error\n");
+ xmlGenericError(xmlGenericErrorContext,
+ "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
+ in->content[0], in->content[1],
+ in->content[2], in->content[3]);
+#endif
+ /*
+ * Removes the UTF8 sequence, and replace it by a charref
+ * and continue the transcoding phase, hoping the error
+ * did not mangle the encoder state.
+ */
+ snprintf((char *) charref, 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]);
+ in->content[0] = ' ';
+ }
+ break;
+ }
+ }
+ return(ret);
+}
+
+/**
+ * xmlCharEncCloseFunc:
+ * @handler: char enconding transformation data structure
+ *
+ * Generic front-end for encoding handler close function
+ *
+ * Returns 0 if success, or -1 in case of error
+ */
+int
+xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) {
+ int ret = 0;
+ if (handler == NULL) return(-1);
+ if (handler->name == NULL) return(-1);
+#ifdef LIBXML_ICONV_ENABLED
+ /*
+ * Iconv handlers can be used only once, free the whole block.
+ * and the associated icon resources.
+ */
+ if ((handler->iconv_out != NULL) || (handler->iconv_in != NULL)) {
+ if (handler->name != NULL)
+ xmlFree(handler->name);
+ handler->name = NULL;
+ if (handler->iconv_out != NULL) {
+ if (iconv_close(handler->iconv_out))
+ ret = -1;
+ handler->iconv_out = NULL;
+ }
+ if (handler->iconv_in != NULL) {
+ if (iconv_close(handler->iconv_in))
+ ret = -1;
+ handler->iconv_in = NULL;
+ }
+ xmlFree(handler);
+ }
+#endif /* LIBXML_ICONV_ENABLED */
+#ifdef DEBUG_ENCODING
+ if (ret)
+ xmlGenericError(xmlGenericErrorContext,
+ "failed to close the encoding handler\n");
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "closed the encoding handler\n");
+#endif
+
+ return(ret);
+}
+
+/**
+ * xmlByteConsumed:
+ * @ctxt: an XML parser context
+ *
+ * This function provides the current index of the parser relative
+ * to the start of the current entity. This function is computed in
+ * bytes from the beginning starting at zero and finishing at the
+ * size in byte of the file if parsing a file. The function is
+ * of constant cost if the input is UTF-8 but can be costly if run
+ * on non-UTF-8 input.
+ *
+ * Returns the index in bytes from the beginning of the entity or -1
+ * in case the index could not be computed.
+ */
+long
+xmlByteConsumed(xmlParserCtxtPtr ctxt) {
+ xmlParserInputPtr in;
+
+ if (ctxt == NULL) return(-1);
+ in = ctxt->input;
+ if (in == NULL) return(-1);
+ if ((in->buf != NULL) && (in->buf->encoder != NULL)) {
+ unsigned int unused = 0;
+ xmlCharEncodingHandler * handler = in->buf->encoder;
+ /*
+ * Encoding conversion, compute the number of unused original
+ * bytes from the input not consumed and substract that from
+ * the raw consumed value, this is not a cheap operation
+ */
+ if (in->end - in->cur > 0) {
+ static unsigned char convbuf[32000];
+ unsigned const char *cur = (unsigned const char *)in->cur;
+ int toconv = in->end - in->cur, written = 32000;
+
+ int ret;
+
+ if (handler->output != NULL) {
+ do {
+ toconv = in->end - cur;
+ written = 32000;
+ ret = handler->output(&convbuf[0], &written,
+ cur, &toconv);
+ if (ret == -1) return(-1);
+ unused += written;
+ cur += toconv;
+ } while (ret == -2);
+#ifdef LIBXML_ICONV_ENABLED
+ } else if (handler->iconv_out != NULL) {
+ do {
+ toconv = in->end - cur;
+ written = 32000;
+ ret = xmlIconvWrapper(handler->iconv_out, &convbuf[0],
+ &written, cur, &toconv);
+ if (ret == -1) {
+ if (written > 0)
+ ret = -2;
+ else
+ return(-1);
+ }
+ unused += written;
+ cur += toconv;
+ } while (ret == -2);
+#endif
+ } else {
+ /* could not find a converter */
+ return(-1);
+ }
+ }
+ if (in->buf->rawconsumed < unused)
+ return(-1);
+ return(in->buf->rawconsumed - unused);
+ }
+ return(in->consumed + (in->cur - in->base));
+}
+
+#ifndef LIBXML_ICONV_ENABLED
+#ifdef LIBXML_ISO8859X_ENABLED
+
+/**
+ * UTF8ToISO8859x:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ * @xlattable: the 2-level transcoding table
+ *
+ * Take a block of UTF-8 chars in and try to convert it to an ISO 8859-*
+ * block of chars out.
+ *
+ * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
+ * The value of @inlen after return is the number of octets consumed
+ * as the return value is positive, else unpredictable.
+ * The value of @outlen after return is the number of ocetes consumed.
+ */
+static int
+UTF8ToISO8859x(unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen,
+ unsigned char const *xlattable) {
+ const unsigned char* outstart = out;
+ const unsigned char* inend;
+ const unsigned char* instart = in;
+
+ if (in == NULL) {
+ /*
+ * initialization nothing to do
+ */
+ *outlen = 0;
+ *inlen = 0;
+ return(0);
+ }
+ inend = in + (*inlen);
+ while (in < inend) {
+ unsigned char d = *in++;
+ if (d < 0x80) {
+ *out++ = d;
+ } else if (d < 0xC0) {
+ /* trailing byte in leading position */
+ *outlen = out - outstart;
+ *inlen = in - instart - 1;
+ return(-2);
+ } else if (d < 0xE0) {
+ unsigned char c;
+ if (!(in < inend)) {
+ /* trailing byte not in input buffer */
+ *outlen = out - outstart;
+ *inlen = in - instart - 1;
+ return(-2);
+ }
+ c = *in++;
+ if ((c & 0xC0) != 0xC0) {
+ /* not a trailing byte */
+ *outlen = out - outstart;
+ *inlen = in - instart - 2;
+ return(-2);
+ }
+ c = c & 0x3F;
+ d = d & 0x1F;
+ d = xlattable [48 + c + xlattable [d] * 64];
+ if (d == 0) {
+ /* not in character set */
+ *outlen = out - outstart;
+ *inlen = in - instart - 2;
+ return(-2);
+ }
+ *out++ = d;
+ } else if (d < 0xF0) {
+ unsigned char c1;
+ unsigned char c2;
+ if (!(in < inend - 1)) {
+ /* trailing bytes not in input buffer */
+ *outlen = out - outstart;
+ *inlen = in - instart - 1;
+ return(-2);
+ }
+ c1 = *in++;
+ if ((c1 & 0xC0) != 0xC0) {
+ /* not a trailing byte (c1) */
+ *outlen = out - outstart;
+ *inlen = in - instart - 2;
+ return(-2);
+ }
+ c2 = *in++;
+ if ((c2 & 0xC0) != 0xC0) {
+ /* not a trailing byte (c2) */
+ *outlen = out - outstart;
+ *inlen = in - instart - 2;
+ return(-2);
+ }
+ c1 = c1 & 0x3F;
+ c2 = c2 & 0x3F;
+ d = d & 0x0F;
+ d = xlattable [48 + c2 + xlattable [48 + c1 + xlattable [32 + d] * 64] * 64];
+ if (d == 0) {
+ /* not in character set */
+ *outlen = out - outstart;
+ *inlen = in - instart - 3;
+ return(-2);
+ }
+ *out++ = d;
+ } else {
+ /* cannot transcode >= U+010000 */
+ *outlen = out - outstart;
+ *inlen = in - instart - 1;
+ return(-2);
+ }
+ }
+ *outlen = out - outstart;
+ *inlen = in - instart;
+ return(0);
+}
+
+/**
+ * ISO8859xToUTF8
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of ISO Latin 1 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of ISO 8859-* chars in and try to convert it to an UTF-8
+ * block of chars out.
+ * Returns 0 if success, or -1 otherwise
+ * The value of @inlen after return is the number of octets consumed
+ * The value of @outlen after return is the number of ocetes produced.
+ */
+static int
+ISO8859xToUTF8(unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen,
+ unsigned short const *unicodetable) {
+ unsigned char* outstart = out;
+ unsigned char* outend = out + *outlen;
+ const unsigned char* instart = in;
+ const unsigned char* inend = in + *inlen;
+ const unsigned char* instop = inend;
+ unsigned int c = *in;
+
+ while (in < inend && out < outend - 1) {
+ if (c >= 0x80) {
+ c = unicodetable [c - 0x80];
+ if (c == 0) {
+ /* undefined code point */
+ *outlen = out - outstart;
+ *inlen = in - instart;
+ return (-1);
+ }
+ if (c < 0x800) {
+ *out++ = ((c >> 6) & 0x1F) | 0xC0;
+ *out++ = (c & 0x3F) | 0x80;
+ } else {
+ *out++ = ((c >> 12) & 0x0F) | 0xE0;
+ *out++ = ((c >> 6) & 0x3F) | 0x80;
+ *out++ = (c & 0x3F) | 0x80;
+ }
+ ++in;
+ c = *in;
+ }
+ if (instop - in > outend - out) instop = in + (outend - out);
+ while (c < 0x80 && in < instop) {
+ *out++ = c;
+ ++in;
+ c = *in;
+ }
+ }
+ if (in < inend && out < outend && c < 0x80) {
+ *out++ = c;
+ ++in;
+ }
+ *outlen = out - outstart;
+ *inlen = in - instart;
+ return (0);
+}
+
+
+/************************************************************************
+ * Lookup tables for ISO-8859-2..ISO-8859-16 transcoding *
+ ************************************************************************/
+
+static unsigned short const xmlunicodetable_ISO8859_2 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7,
+ 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b,
+ 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7,
+ 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c,
+ 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7,
+ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e,
+ 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7,
+ 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df,
+ 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7,
+ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f,
+ 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7,
+ 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_2 [48 + 6 * 64] = {
+ "\x00\x00\x01\x05\x02\x04\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\x00\xa4\x00\x00\xa7\xa8\x00\x00\x00\x00\xad\x00\x00"
+ "\xb0\x00\x00\x00\xb4\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\xc3\xe3\xa1\xb1\xc6\xe6\x00\x00\x00\x00\xc8\xe8\xcf\xef"
+ "\xd0\xf0\x00\x00\x00\x00\x00\x00\xca\xea\xcc\xec\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\xe5\x00\x00\xa5\xb5\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xff\x00\xb2\x00\xbd\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\xa3\xb3\xd1\xf1\x00\x00\xd2\xf2\x00\x00\x00\x00\x00\x00\x00"
+ "\xd5\xf5\x00\x00\xc0\xe0\x00\x00\xd8\xf8\xa6\xb6\x00\x00\xaa\xba"
+ "\xa9\xb9\xde\xfe\xab\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xf9"
+ "\xdb\xfb\x00\x00\x00\x00\x00\x00\x00\xac\xbc\xaf\xbf\xae\xbe\x00"
+ "\x00\xc1\xc2\x00\xc4\x00\x00\xc7\x00\xc9\x00\xcb\x00\xcd\xce\x00"
+ "\x00\x00\x00\xd3\xd4\x00\xd6\xd7\x00\x00\xda\x00\xdc\xdd\x00\xdf"
+ "\x00\xe1\xe2\x00\xe4\x00\x00\xe7\x00\xe9\x00\xeb\x00\xed\xee\x00"
+ "\x00\x00\x00\xf3\xf4\x00\xf6\xf7\x00\x00\xfa\x00\xfc\xfd\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_3 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0x0000, 0x0124, 0x00a7,
+ 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0x0000, 0x017b,
+ 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7,
+ 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0x0000, 0x017c,
+ 0x00c0, 0x00c1, 0x00c2, 0x0000, 0x00c4, 0x010a, 0x0108, 0x00c7,
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+ 0x0000, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7,
+ 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x0000, 0x00e4, 0x010b, 0x0109, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x0000, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7,
+ 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_3 [48 + 7 * 64] = {
+ "\x04\x00\x01\x06\x02\x05\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\xa3\xa4\x00\x00\xa7\xa8\x00\x00\x00\x00\xad\x00\x00"
+ "\xb0\x00\xb2\xb3\xb4\xb5\x00\xb7\xb8\x00\x00\x00\x00\xbd\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\xc6\xe6\xc5\xe5\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xf8\xab\xbb"
+ "\xd5\xf5\x00\x00\xa6\xb6\xa1\xb1\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xa9\xb9\x00\x00\xac\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xff\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xfe\xaa\xba"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xfd\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\xbf\x00\x00\x00"
+ "\xc0\xc1\xc2\x00\xc4\x00\x00\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ "\x00\xd1\xd2\xd3\xd4\x00\xd6\xd7\x00\xd9\xda\xdb\xdc\x00\x00\xdf"
+ "\xe0\xe1\xe2\x00\xe4\x00\x00\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\x00\xf1\xf2\xf3\xf4\x00\xf6\xf7\x00\xf9\xfa\xfb\xfc\x00\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_4 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7,
+ 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af,
+ 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7,
+ 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b,
+ 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
+ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a,
+ 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
+ 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df,
+ 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
+ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b,
+ 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_4 [48 + 6 * 64] = {
+ "\x00\x00\x01\x05\x02\x03\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\x00\xa4\x00\x00\xa7\xa8\x00\x00\x00\x00\xad\x00\xaf"
+ "\xb0\x00\x00\x00\xb4\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00"
+ "\xc0\xe0\x00\x00\xa1\xb1\x00\x00\x00\x00\x00\x00\xc8\xe8\x00\x00"
+ "\xd0\xf0\xaa\xba\x00\x00\xcc\xec\xca\xea\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\xab\xbb\x00\x00\x00\x00\xa5\xb5\xcf\xef\x00\x00\xc7\xe7"
+ "\x00\x00\x00\x00\x00\x00\xd3\xf3\xa2\x00\x00\xa6\xb6\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xd1\xf1\x00\x00\x00\xbd\xbf\xd2\xf2\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\xa3\xb3\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xa9\xb9\x00\x00\x00\x00\xac\xbc\xdd\xfd\xde\xfe\x00\x00\x00\x00"
+ "\x00\x00\xd9\xf9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\xbe\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\xb2\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\xc1\xc2\xc3\xc4\xc5\xc6\x00\x00\xc9\x00\xcb\x00\xcd\xce\x00"
+ "\x00\x00\x00\x00\xd4\xd5\xd6\xd7\xd8\x00\xda\xdb\xdc\x00\x00\xdf"
+ "\x00\xe1\xe2\xe3\xe4\xe5\xe6\x00\x00\xe9\x00\xeb\x00\xed\xee\x00"
+ "\x00\x00\x00\x00\xf4\xf5\xf6\xf7\xf8\x00\xfa\xfb\xfc\x00\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_5 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
+ 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+ 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
+ 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_5 [48 + 6 * 64] = {
+ "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\x00\x00\x00\x00\xfd\x00\x00\x00\x00\x00\xad\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\x00\xae\xaf"
+ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
+ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\x00\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\x00\xfe\xff"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_6 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0000, 0x0000, 0x0000, 0x00a4, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x060c, 0x00ad, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f,
+ 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
+ 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
+ 0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
+ 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f,
+ 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_6 [48 + 5 * 64] = {
+ "\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbf"
+ "\x00\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\x00\x00\x00\x00\x00"
+ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\xf0\xf1\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_7 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x2018, 0x2019, 0x00a3, 0x0000, 0x0000, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x0000, 0x00ab, 0x00ac, 0x00ad, 0x0000, 0x2015,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7,
+ 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f,
+ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+ 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
+ 0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
+ 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af,
+ 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
+ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
+ 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7,
+ 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_7 [48 + 7 * 64] = {
+ "\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x06"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\xa3\x00\x00\xa6\xa7\xa8\xa9\x00\xab\xac\xad\x00\x00"
+ "\xb0\xb1\xb2\xb3\x00\x00\x00\xb7\x00\x00\x00\xbb\x00\xbd\x00\x00"
+ "\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xaf\x00\x00\xa1\xa2\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xb4\xb5\xb6\x00\xb8\xb9\xba\x00\xbc\x00\xbe\xbf"
+ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ "\xd0\xd1\x00\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
+ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_8 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0000, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
+ 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017,
+ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
+ 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
+ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
+ 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x200e, 0x200f, 0x0000,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_8 [48 + 7 * 64] = {
+ "\x02\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\x00\xab\xac\xad\xae\xaf"
+ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\x00\xbb\xbc\xbd\xbe\x00"
+ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xfe"
+ "\x00\x00\x00\x00\x00\x00\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_9 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
+ 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+ 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_9 [48 + 5 * 64] = {
+ "\x00\x00\x01\x02\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
+ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ "\x00\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\x00\x00\xdf"
+ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\x00\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\x00\x00\xff"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xf0"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xdd\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xfe"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_10 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7,
+ 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a,
+ 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7,
+ 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b,
+ 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
+ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf,
+ 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168,
+ 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+ 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
+ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169,
+ 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_10 [48 + 7 * 64] = {
+ "\x00\x00\x01\x06\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\xad\x00\x00"
+ "\xb0\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xc0\xe0\x00\x00\xa1\xb1\x00\x00\x00\x00\x00\x00\xc8\xe8\x00\x00"
+ "\xa9\xb9\xa2\xb2\x00\x00\xcc\xec\xca\xea\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\xa3\xb3\x00\x00\x00\x00\xa5\xb5\xa4\xb4\x00\x00\xc7\xe7"
+ "\x00\x00\x00\x00\x00\x00\xa6\xb6\xff\x00\x00\xa8\xb8\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xd1\xf1\x00\x00\x00\xaf\xbf\xd2\xf2\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xaa\xba\x00\x00\x00\x00\xab\xbb\xd7\xf7\xae\xbe\x00\x00\x00\x00"
+ "\x00\x00\xd9\xf9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\xbc\x00"
+ "\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\xc1\xc2\xc3\xc4\xc5\xc6\x00\x00\xc9\x00\xcb\x00\xcd\xce\xcf"
+ "\xd0\x00\x00\xd3\xd4\xd5\xd6\x00\xd8\x00\xda\xdb\xdc\xdd\xde\xdf"
+ "\x00\xe1\xe2\xe3\xe4\xe5\xe6\x00\x00\xe9\x00\xeb\x00\xed\xee\xef"
+ "\xf0\x00\x00\xf3\xf4\xf5\xf6\x00\xf8\x00\xfa\xfb\xfc\xfd\xfe\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_11 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
+ 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
+ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
+ 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
+ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
+ 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
+ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
+ 0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e3f,
+ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
+ 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
+ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+ 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x0000, 0x0000, 0x0000, 0x0000,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_11 [48 + 6 * 64] = {
+ "\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x03\x05\x00\x00\x00\x00\x00\x00"
+ "\x00\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
+ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\x00\x00\x00\x00\xdf"
+ "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_13 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7,
+ 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7,
+ 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6,
+ 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112,
+ 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b,
+ 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7,
+ 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df,
+ 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113,
+ 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c,
+ 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7,
+ 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_13 [48 + 7 * 64] = {
+ "\x00\x00\x01\x04\x06\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\xa2\xa3\xa4\x00\xa6\xa7\x00\xa9\x00\xab\xac\xad\xae\x00"
+ "\xb0\xb1\xb2\xb3\x00\xb5\xb6\xb7\x00\xb9\x00\xbb\xbc\xbd\xbe\x00"
+ "\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\xb4\xa1\xa5\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xc4\xc5\xaf\x00\x00\xc9\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\xd3\x00\xd5\xd6\xd7\xa8\x00\x00\x00\xdc\x00\x00\xdf"
+ "\x00\x00\x00\x00\xe4\xe5\xbf\x00\x00\xe9\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\xf3\x00\xf5\xf6\xf7\xb8\x00\x00\x00\xfc\x00\x00\x00"
+ "\x00\xd9\xf9\xd1\xf1\xd2\xf2\x00\x00\x00\x00\x00\xd4\xf4\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\xaa\xba\x00\x00\xda\xfa\x00\x00\x00\x00"
+ "\xd0\xf0\x00\x00\x00\x00\x00\x00\x00\x00\xdb\xfb\x00\x00\x00\x00"
+ "\x00\x00\xd8\xf8\x00\x00\x00\x00\x00\xca\xea\xdd\xfd\xde\xfe\x00"
+ "\xc2\xe2\x00\x00\xc0\xe0\xc3\xe3\x00\x00\x00\x00\xc8\xe8\x00\x00"
+ "\x00\x00\xc7\xe7\x00\x00\xcb\xeb\xc6\xe6\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\xcc\xec\x00\x00\x00\x00\x00\x00\xce\xee\x00\x00\xc1\xe1"
+ "\x00\x00\x00\x00\x00\x00\xcd\xed\x00\x00\x00\xcf\xef\x00\x00\x00"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_14 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7,
+ 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178,
+ 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56,
+ 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61,
+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+ 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_14 [48 + 10 * 64] = {
+ "\x00\x00\x01\x09\x04\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\xa3\x00\x00\x00\xa7\x00\xa9\x00\x00\x00\xad\xae\x00"
+ "\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x03\x08\x05\x06\x00\x00\x00\x00"
+ "\x00\x00\xa1\xa2\x00\x00\x00\x00\x00\x00\xa6\xab\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xb1"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xa5\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xb2\xb3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xa8\xb8\xaa\xba\xbd\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\xac\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xd0\xf0\xde\xfe\xaf\x00\x00\x00\x00\x00\x00\x00"
+ "\xb4\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\xb7\xb9\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xbb\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xf7\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ "\x00\xd1\xd2\xd3\xd4\xd5\xd6\x00\xd8\xd9\xda\xdb\xdc\xdd\x00\xdf"
+ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\x00\xf1\xf2\xf3\xf4\xf5\xf6\x00\xf8\xf9\xfa\xfb\xfc\xfd\x00\xff"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_15 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7,
+ 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7,
+ 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf,
+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+ 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_15 [48 + 6 * 64] = {
+ "\x00\x00\x01\x05\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\xa1\xa2\xa3\x00\xa5\x00\xa7\x00\xa9\xaa\xab\xac\xad\xae\xaf"
+ "\xb0\xb1\xb2\xb3\x00\xb5\xb6\xb7\x00\xb9\xba\xbb\x00\x00\x00\xbf"
+ "\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\xbc\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xa6\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x00\x00\x00\xb4\xb8\x00"
+ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
+ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
+};
+
+static unsigned short const xmlunicodetable_ISO8859_16 [128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7,
+ 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b,
+ 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7,
+ 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c,
+ 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7,
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+ 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a,
+ 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b,
+ 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff,
+};
+
+static unsigned char const xmltranscodetable_ISO8859_16 [48 + 9 * 64] = {
+ "\x00\x00\x01\x08\x02\x03\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\x00\x00\x00\x00\x00\x00\xa7\x00\xa9\x00\xab\x00\xad\x00\x00"
+ "\xb0\xb1\x00\x00\x00\x00\xb6\xb7\x00\x00\x00\xbb\x00\x00\x00\x00"
+ "\x00\x00\xc3\xe3\xa1\xa2\xc5\xe5\x00\x00\x00\x00\xb2\xb9\x00\x00"
+ "\xd0\xf0\x00\x00\x00\x00\x00\x00\xdd\xfd\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\xa3\xb3\xd1\xf1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xd5\xf5\xbc\xbd\x00\x00\x00\x00\x00\x00\xd7\xf7\x00\x00\x00\x00"
+ "\xa6\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xd8\xf8\x00\x00\x00\x00\x00\x00\xbe\xac\xae\xaf\xbf\xb4\xb8\x00"
+ "\x06\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xa5\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xba\xde\xfe\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xc0\xc1\xc2\x00\xc4\x00\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ "\x00\x00\xd2\xd3\xd4\x00\xd6\x00\x00\xd9\xda\xdb\xdc\x00\x00\xdf"
+ "\xe0\xe1\xe2\x00\xe4\x00\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ "\x00\x00\xf2\xf3\xf4\x00\xf6\x00\x00\xf9\xfa\xfb\xfc\x00\x00\xff"
+};
+
+
+/*
+ * auto-generated functions for ISO-8859-2 .. ISO-8859-16
+ */
+
+static int ISO8859_2ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_2);
+}
+static int UTF8ToISO8859_2 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_2);
+}
+
+static int ISO8859_3ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_3);
+}
+static int UTF8ToISO8859_3 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_3);
+}
+
+static int ISO8859_4ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_4);
+}
+static int UTF8ToISO8859_4 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_4);
+}
+
+static int ISO8859_5ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_5);
+}
+static int UTF8ToISO8859_5 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_5);
+}
+
+static int ISO8859_6ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_6);
+}
+static int UTF8ToISO8859_6 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_6);
+}
+
+static int ISO8859_7ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_7);
+}
+static int UTF8ToISO8859_7 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_7);
+}
+
+static int ISO8859_8ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_8);
+}
+static int UTF8ToISO8859_8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_8);
+}
+
+static int ISO8859_9ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_9);
+}
+static int UTF8ToISO8859_9 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_9);
+}
+
+static int ISO8859_10ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_10);
+}
+static int UTF8ToISO8859_10 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_10);
+}
+
+static int ISO8859_11ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_11);
+}
+static int UTF8ToISO8859_11 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_11);
+}
+
+static int ISO8859_13ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_13);
+}
+static int UTF8ToISO8859_13 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_13);
+}
+
+static int ISO8859_14ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_14);
+}
+static int UTF8ToISO8859_14 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_14);
+}
+
+static int ISO8859_15ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_15);
+}
+static int UTF8ToISO8859_15 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_15);
+}
+
+static int ISO8859_16ToUTF8 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_16);
+}
+static int UTF8ToISO8859_16 (unsigned char* out, int *outlen,
+ const unsigned char* in, int *inlen) {
+ return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_16);
+}
+
+static void
+xmlRegisterCharEncodingHandlersISO8859x (void) {
+ xmlNewCharEncodingHandler ("ISO-8859-2", ISO8859_2ToUTF8, UTF8ToISO8859_2);
+ xmlNewCharEncodingHandler ("ISO-8859-3", ISO8859_3ToUTF8, UTF8ToISO8859_3);
+ xmlNewCharEncodingHandler ("ISO-8859-4", ISO8859_4ToUTF8, UTF8ToISO8859_4);
+ xmlNewCharEncodingHandler ("ISO-8859-5", ISO8859_5ToUTF8, UTF8ToISO8859_5);
+ xmlNewCharEncodingHandler ("ISO-8859-6", ISO8859_6ToUTF8, UTF8ToISO8859_6);
+ xmlNewCharEncodingHandler ("ISO-8859-7", ISO8859_7ToUTF8, UTF8ToISO8859_7);
+ xmlNewCharEncodingHandler ("ISO-8859-8", ISO8859_8ToUTF8, UTF8ToISO8859_8);
+ xmlNewCharEncodingHandler ("ISO-8859-9", ISO8859_9ToUTF8, UTF8ToISO8859_9);
+ xmlNewCharEncodingHandler ("ISO-8859-10", ISO8859_10ToUTF8, UTF8ToISO8859_10);
+ xmlNewCharEncodingHandler ("ISO-8859-11", ISO8859_11ToUTF8, UTF8ToISO8859_11);
+ xmlNewCharEncodingHandler ("ISO-8859-13", ISO8859_13ToUTF8, UTF8ToISO8859_13);
+ xmlNewCharEncodingHandler ("ISO-8859-14", ISO8859_14ToUTF8, UTF8ToISO8859_14);
+ xmlNewCharEncodingHandler ("ISO-8859-15", ISO8859_15ToUTF8, UTF8ToISO8859_15);
+ xmlNewCharEncodingHandler ("ISO-8859-16", ISO8859_16ToUTF8, UTF8ToISO8859_16);
+}
+
+#endif
+#endif
+
+
diff --git a/entities.c b/entities.c
new file mode 100644
index 0000000..db1c4c9
--- /dev/null
+++ b/entities.c
@@ -0,0 +1,897 @@
+/*
+ * entities.c : implementation for the XML entities handling
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <libxml/xmlmemory.h>
+#include <libxml/hash.h>
+#include <libxml/entities.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/xmlerror.h>
+#include <libxml/globals.h>
+
+/*
+ * The XML predefined entities.
+ */
+
+static xmlEntity xmlEntityLt = {
+ NULL, XML_ENTITY_DECL, BAD_CAST "lt",
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ BAD_CAST "<", BAD_CAST "<", 1,
+ XML_INTERNAL_PREDEFINED_ENTITY,
+ NULL, NULL, NULL, NULL, 0
+};
+static xmlEntity xmlEntityGt = {
+ NULL, XML_ENTITY_DECL, BAD_CAST "gt",
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ BAD_CAST ">", BAD_CAST ">", 1,
+ XML_INTERNAL_PREDEFINED_ENTITY,
+ NULL, NULL, NULL, NULL, 0
+};
+static xmlEntity xmlEntityAmp = {
+ NULL, XML_ENTITY_DECL, BAD_CAST "amp",
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ BAD_CAST "&", BAD_CAST "&", 1,
+ XML_INTERNAL_PREDEFINED_ENTITY,
+ NULL, NULL, NULL, NULL, 0
+};
+static xmlEntity xmlEntityQuot = {
+ NULL, XML_ENTITY_DECL, BAD_CAST "quot",
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ BAD_CAST "\"", BAD_CAST "\"", 1,
+ XML_INTERNAL_PREDEFINED_ENTITY,
+ NULL, NULL, NULL, NULL, 0
+};
+static xmlEntity xmlEntityApos = {
+ NULL, XML_ENTITY_DECL, BAD_CAST "apos",
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ BAD_CAST "'", BAD_CAST "'", 1,
+ XML_INTERNAL_PREDEFINED_ENTITY,
+ NULL, NULL, NULL, NULL, 0
+};
+
+/*
+ * xmlFreeEntity : clean-up an entity record.
+ */
+static void xmlFreeEntity(xmlEntityPtr entity) {
+ if (entity == NULL) return;
+
+ if ((entity->children) && (entity->owner == 1) &&
+ (entity == (xmlEntityPtr) entity->children->parent))
+ xmlFreeNodeList(entity->children);
+ if (entity->name != NULL)
+ xmlFree((char *) entity->name);
+ if (entity->ExternalID != NULL)
+ xmlFree((char *) entity->ExternalID);
+ if (entity->SystemID != NULL)
+ xmlFree((char *) entity->SystemID);
+ if (entity->URI != NULL)
+ xmlFree((char *) entity->URI);
+ if (entity->content != NULL)
+ xmlFree((char *) entity->content);
+ if (entity->orig != NULL)
+ xmlFree((char *) entity->orig);
+ xmlFree(entity);
+}
+
+/*
+ * xmlAddEntity : register a new entity for an entities table.
+ */
+static xmlEntityPtr
+xmlAddEntity(xmlDtdPtr dtd, const xmlChar *name, int type,
+ const xmlChar *ExternalID, const xmlChar *SystemID,
+ const xmlChar *content) {
+ xmlEntitiesTablePtr table = NULL;
+ xmlEntityPtr ret;
+
+ if (name == NULL)
+ return(NULL);
+ switch (type) {
+ case XML_INTERNAL_GENERAL_ENTITY:
+ case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
+ case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
+ if (dtd->entities == NULL)
+ dtd->entities = xmlHashCreate(0);
+ table = dtd->entities;
+ break;
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ if (dtd->pentities == NULL)
+ dtd->pentities = xmlHashCreate(0);
+ table = dtd->pentities;
+ break;
+ case XML_INTERNAL_PREDEFINED_ENTITY:
+ return(NULL);
+ }
+ if (table == NULL)
+ return(NULL);
+ ret = (xmlEntityPtr) xmlMalloc(sizeof(xmlEntity));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddEntity: out of memory\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlEntity));
+ ret->type = XML_ENTITY_DECL;
+
+ /*
+ * fill the structure.
+ */
+ ret->name = xmlStrdup(name);
+ ret->etype = (xmlEntityType) type;
+ if (ExternalID != NULL)
+ ret->ExternalID = xmlStrdup(ExternalID);
+ if (SystemID != NULL)
+ ret->SystemID = xmlStrdup(SystemID);
+ if (content != NULL) {
+ ret->length = xmlStrlen(content);
+ ret->content = xmlStrndup(content, ret->length);
+ } else {
+ ret->length = 0;
+ ret->content = NULL;
+ }
+ ret->URI = NULL; /* to be computed by the layer knowing
+ the defining entity */
+ ret->orig = NULL;
+ ret->owner = 0;
+
+ if (xmlHashAddEntry(table, name, ret)) {
+ /*
+ * entity was already defined at another level.
+ */
+ xmlFreeEntity(ret);
+ return(NULL);
+ }
+ return(ret);
+}
+
+/**
+ * xmlGetPredefinedEntity:
+ * @name: the entity name
+ *
+ * Check whether this name is an predefined entity.
+ *
+ * Returns NULL if not, otherwise the entity
+ */
+xmlEntityPtr
+xmlGetPredefinedEntity(const xmlChar *name) {
+ if (name == NULL) return(NULL);
+ switch (name[0]) {
+ case 'l':
+ if (xmlStrEqual(name, BAD_CAST "lt"))
+ return(&xmlEntityLt);
+ break;
+ case 'g':
+ if (xmlStrEqual(name, BAD_CAST "gt"))
+ return(&xmlEntityGt);
+ break;
+ case 'a':
+ if (xmlStrEqual(name, BAD_CAST "amp"))
+ return(&xmlEntityAmp);
+ if (xmlStrEqual(name, BAD_CAST "apos"))
+ return(&xmlEntityApos);
+ break;
+ case 'q':
+ if (xmlStrEqual(name, BAD_CAST "quot"))
+ return(&xmlEntityQuot);
+ break;
+ default:
+ break;
+ }
+ return(NULL);
+}
+
+/**
+ * xmlAddDtdEntity:
+ * @doc: the document
+ * @name: the entity name
+ * @type: the entity type XML_xxx_yyy_ENTITY
+ * @ExternalID: the entity external ID if available
+ * @SystemID: the entity system ID if available
+ * @content: the entity content
+ *
+ * Register a new entity for this document DTD external subset.
+ *
+ * Returns a pointer to the entity or NULL in case of error
+ */
+xmlEntityPtr
+xmlAddDtdEntity(xmlDocPtr doc, const xmlChar *name, int type,
+ const xmlChar *ExternalID, const xmlChar *SystemID,
+ const xmlChar *content) {
+ xmlEntityPtr ret;
+ xmlDtdPtr dtd;
+
+ if (doc == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddDtdEntity: doc == NULL !\n");
+ return(NULL);
+ }
+ if (doc->extSubset == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddDtdEntity: document without external subset !\n");
+ return(NULL);
+ }
+ dtd = doc->extSubset;
+ ret = xmlAddEntity(dtd, name, type, ExternalID, SystemID, content);
+ if (ret == NULL) return(NULL);
+
+ /*
+ * Link it to the DTD
+ */
+ ret->parent = dtd;
+ ret->doc = dtd->doc;
+ if (dtd->last == NULL) {
+ dtd->children = dtd->last = (xmlNodePtr) ret;
+ } else {
+ dtd->last->next = (xmlNodePtr) ret;
+ ret->prev = dtd->last;
+ dtd->last = (xmlNodePtr) ret;
+ }
+ return(ret);
+}
+
+/**
+ * xmlAddDocEntity:
+ * @doc: the document
+ * @name: the entity name
+ * @type: the entity type XML_xxx_yyy_ENTITY
+ * @ExternalID: the entity external ID if available
+ * @SystemID: the entity system ID if available
+ * @content: the entity content
+ *
+ * Register a new entity for this document.
+ *
+ * Returns a pointer to the entity or NULL in case of error
+ */
+xmlEntityPtr
+xmlAddDocEntity(xmlDocPtr doc, const xmlChar *name, int type,
+ const xmlChar *ExternalID, const xmlChar *SystemID,
+ const xmlChar *content) {
+ xmlEntityPtr ret;
+ xmlDtdPtr dtd;
+
+ if (doc == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddDocEntity: document is NULL !\n");
+ return(NULL);
+ }
+ if (doc->intSubset == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddDocEntity: document without internal subset !\n");
+ return(NULL);
+ }
+ dtd = doc->intSubset;
+ ret = xmlAddEntity(dtd, name, type, ExternalID, SystemID, content);
+ if (ret == NULL) return(NULL);
+
+ /*
+ * Link it to the DTD
+ */
+ ret->parent = dtd;
+ ret->doc = dtd->doc;
+ if (dtd->last == NULL) {
+ dtd->children = dtd->last = (xmlNodePtr) ret;
+ } else {
+ dtd->last->next = (xmlNodePtr) ret;
+ ret->prev = dtd->last;
+ dtd->last = (xmlNodePtr) ret;
+ }
+ return(ret);
+}
+
+/**
+ * xmlGetEntityFromTable:
+ * @table: an entity table
+ * @name: the entity name
+ * @parameter: look for parameter entities
+ *
+ * Do an entity lookup in the table.
+ * returns the corresponding parameter entity, if found.
+ *
+ * Returns A pointer to the entity structure or NULL if not found.
+ */
+static xmlEntityPtr
+xmlGetEntityFromTable(xmlEntitiesTablePtr table, const xmlChar *name) {
+ return((xmlEntityPtr) xmlHashLookup(table, name));
+}
+
+/**
+ * xmlGetParameterEntity:
+ * @doc: the document referencing the entity
+ * @name: the entity name
+ *
+ * Do an entity lookup in the internal and external subsets and
+ * returns the corresponding parameter entity, if found.
+ *
+ * Returns A pointer to the entity structure or NULL if not found.
+ */
+xmlEntityPtr
+xmlGetParameterEntity(xmlDocPtr doc, const xmlChar *name) {
+ xmlEntitiesTablePtr table;
+ xmlEntityPtr ret;
+
+ if (doc == NULL)
+ return(NULL);
+ if ((doc->intSubset != NULL) && (doc->intSubset->pentities != NULL)) {
+ table = (xmlEntitiesTablePtr) doc->intSubset->pentities;
+ ret = xmlGetEntityFromTable(table, name);
+ if (ret != NULL)
+ return(ret);
+ }
+ if ((doc->extSubset != NULL) && (doc->extSubset->pentities != NULL)) {
+ table = (xmlEntitiesTablePtr) doc->extSubset->pentities;
+ return(xmlGetEntityFromTable(table, name));
+ }
+ return(NULL);
+}
+
+/**
+ * xmlGetDtdEntity:
+ * @doc: the document referencing the entity
+ * @name: the entity name
+ *
+ * Do an entity lookup in the DTD entity hash table and
+ * returns the corresponding entity, if found.
+ * Note: the first argument is the document node, not the DTD node.
+ *
+ * Returns A pointer to the entity structure or NULL if not found.
+ */
+xmlEntityPtr
+xmlGetDtdEntity(xmlDocPtr doc, const xmlChar *name) {
+ xmlEntitiesTablePtr table;
+
+ if (doc == NULL)
+ return(NULL);
+ if ((doc->extSubset != NULL) && (doc->extSubset->entities != NULL)) {
+ table = (xmlEntitiesTablePtr) doc->extSubset->entities;
+ return(xmlGetEntityFromTable(table, name));
+ }
+ return(NULL);
+}
+
+/**
+ * xmlGetDocEntity:
+ * @doc: the document referencing the entity
+ * @name: the entity name
+ *
+ * Do an entity lookup in the document entity hash table and
+ * returns the corresponding entity, otherwise a lookup is done
+ * in the predefined entities too.
+ *
+ * Returns A pointer to the entity structure or NULL if not found.
+ */
+xmlEntityPtr
+xmlGetDocEntity(xmlDocPtr doc, const xmlChar *name) {
+ xmlEntityPtr cur;
+ xmlEntitiesTablePtr table;
+
+ if (doc != NULL) {
+ if ((doc->intSubset != NULL) && (doc->intSubset->entities != NULL)) {
+ table = (xmlEntitiesTablePtr) doc->intSubset->entities;
+ cur = xmlGetEntityFromTable(table, name);
+ if (cur != NULL)
+ return(cur);
+ }
+ if (doc->standalone != 1) {
+ if ((doc->extSubset != NULL) &&
+ (doc->extSubset->entities != NULL)) {
+ table = (xmlEntitiesTablePtr) doc->extSubset->entities;
+ cur = xmlGetEntityFromTable(table, name);
+ if (cur != NULL)
+ return(cur);
+ }
+ }
+ }
+ return(xmlGetPredefinedEntity(name));
+}
+
+/*
+ * Macro used to grow the current buffer.
+ */
+#define growBufferReentrant() { \
+ buffer_size *= 2; \
+ buffer = (xmlChar *) \
+ xmlRealloc(buffer, buffer_size * sizeof(xmlChar)); \
+ if (buffer == NULL) { \
+ xmlGenericError(xmlGenericErrorContext, "realloc failed\n"); \
+ return(NULL); \
+ } \
+}
+
+
+/**
+ * xmlEncodeEntitiesReentrant:
+ * @doc: the document containing the string
+ * @input: A string to convert to XML.
+ *
+ * Do a global encoding of a string, replacing the predefined entities
+ * and non ASCII values with their entities and CharRef counterparts.
+ * Contrary to xmlEncodeEntities, this routine is reentrant, and result
+ * must be deallocated.
+ *
+ * Returns A newly allocated string with the substitution done.
+ */
+xmlChar *
+xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
+ const xmlChar *cur = input;
+ xmlChar *buffer = NULL;
+ xmlChar *out = NULL;
+ int buffer_size = 0;
+ int html = 0;
+
+ if (input == NULL) return(NULL);
+ if (doc != NULL)
+ html = (doc->type == XML_HTML_DOCUMENT_NODE);
+
+ /*
+ * allocate an translation buffer.
+ */
+ buffer_size = 1000;
+ buffer = (xmlChar *) xmlMalloc(buffer_size * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "malloc failed\n");
+ return(NULL);
+ }
+ out = buffer;
+
+ while (*cur != '\0') {
+ if (out - buffer > buffer_size - 100) {
+ int indx = out - buffer;
+
+ growBufferReentrant();
+ out = &buffer[indx];
+ }
+
+ /*
+ * By default one have to encode at least '<', '>', '"' and '&' !
+ */
+ if (*cur == '<') {
+ *out++ = '&';
+ *out++ = 'l';
+ *out++ = 't';
+ *out++ = ';';
+ } else if (*cur == '>') {
+ *out++ = '&';
+ *out++ = 'g';
+ *out++ = 't';
+ *out++ = ';';
+ } else if (*cur == '&') {
+ *out++ = '&';
+ *out++ = 'a';
+ *out++ = 'm';
+ *out++ = 'p';
+ *out++ = ';';
+ } else if (((*cur >= 0x20) && (*cur < 0x80)) ||
+ (*cur == '\n') || (*cur == '\t') || ((html) && (*cur == '\r'))) {
+ /*
+ * default case, just copy !
+ */
+ *out++ = *cur;
+ } else if (*cur >= 0x80) {
+ if (((doc != NULL) && (doc->encoding != NULL)) || (html)) {
+ /*
+ * Bjørn Reese <br@sseusa.com> provided the patch
+ xmlChar xc;
+ xc = (*cur & 0x3F) << 6;
+ if (cur[1] != 0) {
+ xc += *(++cur) & 0x3F;
+ *out++ = xc;
+ } else
+ */
+ *out++ = *cur;
+ } else {
+ /*
+ * We assume we have UTF-8 input.
+ */
+ char buf[11], *ptr;
+ int val = 0, l = 1;
+
+ if (*cur < 0xC0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlEncodeEntitiesReentrant : input not UTF-8\n");
+ if (doc != NULL)
+ doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
+ snprintf(buf, sizeof(buf), "&#%d;", *cur);
+ buf[sizeof(buf) - 1] = 0;
+ ptr = buf;
+ while (*ptr != 0) *out++ = *ptr++;
+ cur++;
+ continue;
+ } else if (*cur < 0xE0) {
+ val = (cur[0]) & 0x1F;
+ val <<= 6;
+ val |= (cur[1]) & 0x3F;
+ l = 2;
+ } else if (*cur < 0xF0) {
+ val = (cur[0]) & 0x0F;
+ val <<= 6;
+ val |= (cur[1]) & 0x3F;
+ val <<= 6;
+ val |= (cur[2]) & 0x3F;
+ l = 3;
+ } else if (*cur < 0xF8) {
+ val = (cur[0]) & 0x07;
+ val <<= 6;
+ val |= (cur[1]) & 0x3F;
+ val <<= 6;
+ val |= (cur[2]) & 0x3F;
+ val <<= 6;
+ val |= (cur[3]) & 0x3F;
+ l = 4;
+ }
+ if ((l == 1) || (!IS_CHAR(val))) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlEncodeEntitiesReentrant : char out of range\n");
+ if (doc != NULL)
+ doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
+ snprintf(buf, sizeof(buf), "&#%d;", *cur);
+ buf[sizeof(buf) - 1] = 0;
+ ptr = buf;
+ while (*ptr != 0) *out++ = *ptr++;
+ cur++;
+ continue;
+ }
+ /*
+ * We could do multiple things here. Just save as a char ref
+ */
+ if (html)
+ snprintf(buf, sizeof(buf), "&#%d;", val);
+ else
+ snprintf(buf, sizeof(buf), "&#x%X;", val);
+ buf[sizeof(buf) - 1] = 0;
+ ptr = buf;
+ while (*ptr != 0) *out++ = *ptr++;
+ cur += l;
+ continue;
+ }
+ } else if (IS_BYTE_CHAR(*cur)) {
+ char buf[11], *ptr;
+
+ snprintf(buf, sizeof(buf), "&#%d;", *cur);
+ buf[sizeof(buf) - 1] = 0;
+ ptr = buf;
+ while (*ptr != 0) *out++ = *ptr++;
+ }
+ cur++;
+ }
+ *out++ = 0;
+ return(buffer);
+}
+
+/**
+ * xmlEncodeSpecialChars:
+ * @doc: the document containing the string
+ * @input: A string to convert to XML.
+ *
+ * Do a global encoding of a string, replacing the predefined entities
+ * this routine is reentrant, and result must be deallocated.
+ *
+ * Returns A newly allocated string with the substitution done.
+ */
+xmlChar *
+xmlEncodeSpecialChars(xmlDocPtr doc ATTRIBUTE_UNUSED, const xmlChar *input) {
+ const xmlChar *cur = input;
+ xmlChar *buffer = NULL;
+ xmlChar *out = NULL;
+ int buffer_size = 0;
+ if (input == NULL) return(NULL);
+
+ /*
+ * allocate an translation buffer.
+ */
+ buffer_size = 1000;
+ buffer = (xmlChar *) xmlMalloc(buffer_size * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "malloc failed\n");
+ return(NULL);
+ }
+ out = buffer;
+
+ while (*cur != '\0') {
+ if (out - buffer > buffer_size - 10) {
+ int indx = out - buffer;
+
+ growBufferReentrant();
+ out = &buffer[indx];
+ }
+
+ /*
+ * By default one have to encode at least '<', '>', '"' and '&' !
+ */
+ if (*cur == '<') {
+ *out++ = '&';
+ *out++ = 'l';
+ *out++ = 't';
+ *out++ = ';';
+ } else if (*cur == '>') {
+ *out++ = '&';
+ *out++ = 'g';
+ *out++ = 't';
+ *out++ = ';';
+ } else if (*cur == '&') {
+ *out++ = '&';
+ *out++ = 'a';
+ *out++ = 'm';
+ *out++ = 'p';
+ *out++ = ';';
+#if 0
+ } else if (*cur == '"') {
+ *out++ = '&';
+ *out++ = 'q';
+ *out++ = 'u';
+ *out++ = 'o';
+ *out++ = 't';
+ *out++ = ';';
+#endif
+ } else if (*cur == '\r') {
+ *out++ = '&';
+ *out++ = '#';
+ *out++ = '1';
+ *out++ = '3';
+ *out++ = ';';
+ } else {
+ /*
+ * Works because on UTF-8, all extended sequences cannot
+ * result in bytes in the ASCII range.
+ */
+ *out++ = *cur;
+ }
+ cur++;
+ }
+ *out++ = 0;
+ return(buffer);
+}
+
+/**
+ * xmlCreateEntitiesTable:
+ *
+ * create and initialize an empty entities hash table.
+ *
+ * Returns the xmlEntitiesTablePtr just created or NULL in case of error.
+ */
+xmlEntitiesTablePtr
+xmlCreateEntitiesTable(void) {
+ return((xmlEntitiesTablePtr) xmlHashCreate(0));
+}
+
+/**
+ * xmlFreeEntityWrapper:
+ * @entity: An entity
+ * @name: its name
+ *
+ * Deallocate the memory used by an entities in the hash table.
+ */
+static void
+xmlFreeEntityWrapper(xmlEntityPtr entity,
+ const xmlChar *name ATTRIBUTE_UNUSED) {
+ if (entity != NULL)
+ xmlFreeEntity(entity);
+}
+
+/**
+ * xmlFreeEntitiesTable:
+ * @table: An entity table
+ *
+ * Deallocate the memory used by an entities hash table.
+ */
+void
+xmlFreeEntitiesTable(xmlEntitiesTablePtr table) {
+ xmlHashFree(table, (xmlHashDeallocator) xmlFreeEntityWrapper);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlCopyEntity:
+ * @ent: An entity
+ *
+ * Build a copy of an entity
+ *
+ * Returns the new xmlEntitiesPtr or NULL in case of error.
+ */
+static xmlEntityPtr
+xmlCopyEntity(xmlEntityPtr ent) {
+ xmlEntityPtr cur;
+
+ cur = (xmlEntityPtr) xmlMalloc(sizeof(xmlEntity));
+ if (cur == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlCopyEntity: out of memory !\n");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlEntity));
+ cur->type = XML_ENTITY_DECL;
+
+ cur->etype = ent->etype;
+ if (ent->name != NULL)
+ cur->name = xmlStrdup(ent->name);
+ if (ent->ExternalID != NULL)
+ cur->ExternalID = xmlStrdup(ent->ExternalID);
+ if (ent->SystemID != NULL)
+ cur->SystemID = xmlStrdup(ent->SystemID);
+ if (ent->content != NULL)
+ cur->content = xmlStrdup(ent->content);
+ if (ent->orig != NULL)
+ cur->orig = xmlStrdup(ent->orig);
+ if (ent->URI != NULL)
+ cur->URI = xmlStrdup(ent->URI);
+ return(cur);
+}
+
+/**
+ * xmlCopyEntitiesTable:
+ * @table: An entity table
+ *
+ * Build a copy of an entity table.
+ *
+ * Returns the new xmlEntitiesTablePtr or NULL in case of error.
+ */
+xmlEntitiesTablePtr
+xmlCopyEntitiesTable(xmlEntitiesTablePtr table) {
+ return(xmlHashCopy(table, (xmlHashCopier) xmlCopyEntity));
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+#ifdef LIBXML_OUTPUT_ENABLED
+
+/**
+ * xmlDumpEntityContent:
+ * @buf: An XML buffer.
+ * @content: The entity content.
+ *
+ * This will dump the quoted string value, taking care of the special
+ * treatment required by %
+ */
+static void
+xmlDumpEntityContent(xmlBufferPtr buf, const xmlChar *content) {
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
+ if (xmlStrchr(content, '%')) {
+ const xmlChar * base, *cur;
+
+ xmlBufferCCat(buf, "\"");
+ base = cur = content;
+ while (*cur != 0) {
+ if (*cur == '"') {
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&quot;", 6);
+ cur++;
+ base = cur;
+ } else if (*cur == '%') {
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&#x25;", 6);
+ cur++;
+ base = cur;
+ } else {
+ cur++;
+ }
+ }
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferCCat(buf, "\"");
+ } else {
+ xmlBufferWriteQuotedString(buf, content);
+ }
+}
+
+/**
+ * xmlDumpEntityDecl:
+ * @buf: An XML buffer.
+ * @ent: An entity table
+ *
+ * This will dump the content of the entity table as an XML DTD definition
+ */
+void
+xmlDumpEntityDecl(xmlBufferPtr buf, xmlEntityPtr ent) {
+ switch (ent->etype) {
+ case XML_INTERNAL_GENERAL_ENTITY:
+ xmlBufferWriteChar(buf, "<!ENTITY ");
+ xmlBufferWriteCHAR(buf, ent->name);
+ xmlBufferWriteChar(buf, " ");
+ if (ent->orig != NULL)
+ xmlBufferWriteQuotedString(buf, ent->orig);
+ else
+ xmlDumpEntityContent(buf, ent->content);
+ xmlBufferWriteChar(buf, ">\n");
+ break;
+ case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
+ xmlBufferWriteChar(buf, "<!ENTITY ");
+ xmlBufferWriteCHAR(buf, ent->name);
+ if (ent->ExternalID != NULL) {
+ xmlBufferWriteChar(buf, " PUBLIC ");
+ xmlBufferWriteQuotedString(buf, ent->ExternalID);
+ xmlBufferWriteChar(buf, " ");
+ xmlBufferWriteQuotedString(buf, ent->SystemID);
+ } else {
+ xmlBufferWriteChar(buf, " SYSTEM ");
+ xmlBufferWriteQuotedString(buf, ent->SystemID);
+ }
+ xmlBufferWriteChar(buf, ">\n");
+ break;
+ case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
+ xmlBufferWriteChar(buf, "<!ENTITY ");
+ xmlBufferWriteCHAR(buf, ent->name);
+ if (ent->ExternalID != NULL) {
+ xmlBufferWriteChar(buf, " PUBLIC ");
+ xmlBufferWriteQuotedString(buf, ent->ExternalID);
+ xmlBufferWriteChar(buf, " ");
+ xmlBufferWriteQuotedString(buf, ent->SystemID);
+ } else {
+ xmlBufferWriteChar(buf, " SYSTEM ");
+ xmlBufferWriteQuotedString(buf, ent->SystemID);
+ }
+ if (ent->content != NULL) { /* Should be true ! */
+ xmlBufferWriteChar(buf, " NDATA ");
+ if (ent->orig != NULL)
+ xmlBufferWriteCHAR(buf, ent->orig);
+ else
+ xmlBufferWriteCHAR(buf, ent->content);
+ }
+ xmlBufferWriteChar(buf, ">\n");
+ break;
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ xmlBufferWriteChar(buf, "<!ENTITY % ");
+ xmlBufferWriteCHAR(buf, ent->name);
+ xmlBufferWriteChar(buf, " ");
+ if (ent->orig == NULL)
+ xmlDumpEntityContent(buf, ent->content);
+ else
+ xmlBufferWriteQuotedString(buf, ent->orig);
+ xmlBufferWriteChar(buf, ">\n");
+ break;
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ xmlBufferWriteChar(buf, "<!ENTITY % ");
+ xmlBufferWriteCHAR(buf, ent->name);
+ if (ent->ExternalID != NULL) {
+ xmlBufferWriteChar(buf, " PUBLIC ");
+ xmlBufferWriteQuotedString(buf, ent->ExternalID);
+ xmlBufferWriteChar(buf, " ");
+ xmlBufferWriteQuotedString(buf, ent->SystemID);
+ } else {
+ xmlBufferWriteChar(buf, " SYSTEM ");
+ xmlBufferWriteQuotedString(buf, ent->SystemID);
+ }
+ xmlBufferWriteChar(buf, ">\n");
+ break;
+ default:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlDumpEntitiesDecl: internal: unknown type %d\n",
+ ent->etype);
+ }
+}
+
+/**
+ * xmlDumpEntityDeclScan:
+ * @ent: An entity table
+ * @buf: An XML buffer.
+ *
+ * When using the hash table scan function, arguments need to be reversed
+ */
+static void
+xmlDumpEntityDeclScan(xmlEntityPtr ent, xmlBufferPtr buf) {
+ xmlDumpEntityDecl(buf, ent);
+}
+
+/**
+ * xmlDumpEntitiesTable:
+ * @buf: An XML buffer.
+ * @table: An entity table
+ *
+ * This will dump the content of the entity table as an XML DTD definition
+ */
+void
+xmlDumpEntitiesTable(xmlBufferPtr buf, xmlEntitiesTablePtr table) {
+ xmlHashScan(table, (xmlHashScanner)xmlDumpEntityDeclScan, buf);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
diff --git a/error.c b/error.c
new file mode 100644
index 0000000..bd9b324
--- /dev/null
+++ b/error.c
@@ -0,0 +1,937 @@
+/*
+ * error.c: module displaying/handling XML parser errors
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <daniel@veillard.com>
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+#include <stdarg.h>
+#include <libxml/parser.h>
+#include <libxml/xmlerror.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/globals.h>
+
+void xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED,
+ const char *msg,
+ ...);
+
+#define XML_GET_VAR_STR(msg, str) { \
+ int size; \
+ int chars; \
+ char *larger; \
+ va_list ap; \
+ \
+ str = (char *) xmlMalloc(150); \
+ if (str != NULL) { \
+ \
+ size = 150; \
+ \
+ while (1) { \
+ va_start(ap, msg); \
+ chars = vsnprintf(str, size, msg, ap); \
+ va_end(ap); \
+ if ((chars > -1) && (chars < size)) \
+ break; \
+ if (chars > -1) \
+ size += chars + 1; \
+ else \
+ size += 100; \
+ if ((larger = (char *) xmlRealloc(str, size)) == NULL) {\
+ break; \
+ } \
+ str = larger; \
+ }} \
+}
+
+/************************************************************************
+ * *
+ * Handling of out of context errors *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlGenericErrorDefaultFunc:
+ * @ctx: an error context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Default handler for out of context error messages.
+ */
+void
+xmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
+ va_list args;
+
+ if (xmlGenericErrorContext == NULL)
+ xmlGenericErrorContext = (void *) stderr;
+
+ va_start(args, msg);
+ vfprintf((FILE *)xmlGenericErrorContext, msg, args);
+ va_end(args);
+}
+
+/**
+ * initGenericErrorDefaultFunc:
+ * @handler: the handler
+ *
+ * Set or reset (if NULL) the default handler for generic errors
+ * to the builtin error function.
+ */
+void
+initGenericErrorDefaultFunc(xmlGenericErrorFunc * handler)
+{
+ if (handler == NULL)
+ xmlGenericError = xmlGenericErrorDefaultFunc;
+ else
+ (*handler) = xmlGenericErrorDefaultFunc;
+}
+
+/**
+ * xmlSetGenericErrorFunc:
+ * @ctx: the new error handling context
+ * @handler: the new handler function
+ *
+ * Function to reset the handler and the error context for out of
+ * context error messages.
+ * This simply means that @handler will be called for subsequent
+ * error messages while not parsing nor validating. And @ctx will
+ * be passed as first argument to @handler
+ * One can simply force messages to be emitted to another FILE * than
+ * stderr by setting @ctx to this file handle and @handler to NULL.
+ */
+void
+xmlSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler) {
+ xmlGenericErrorContext = ctx;
+ if (handler != NULL)
+ xmlGenericError = handler;
+ else
+ xmlGenericError = xmlGenericErrorDefaultFunc;
+}
+
+/**
+ * xmlSetStructuredErrorFunc:
+ * @ctx: the new error handling context
+ * @handler: the new handler function
+ *
+ * Function to reset the handler and the error context for out of
+ * context structured error messages.
+ * This simply means that @handler will be called for subsequent
+ * error messages while not parsing nor validating. And @ctx will
+ * be passed as first argument to @handler
+ */
+void
+xmlSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) {
+ xmlGenericErrorContext = ctx;
+ xmlStructuredError = handler;
+}
+
+/************************************************************************
+ * *
+ * Handling of parsing errors *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlParserPrintFileInfo:
+ * @input: an xmlParserInputPtr input
+ *
+ * Displays the associated file and line informations for the current input
+ */
+
+void
+xmlParserPrintFileInfo(xmlParserInputPtr input) {
+ if (input != NULL) {
+ if (input->filename)
+ xmlGenericError(xmlGenericErrorContext,
+ "%s:%d: ", input->filename,
+ input->line);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "Entity: line %d: ", input->line);
+ }
+}
+
+/**
+ * xmlParserPrintFileContext:
+ * @input: an xmlParserInputPtr input
+ *
+ * Displays current context within the input content for error tracking
+ */
+
+static void
+xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
+ xmlGenericErrorFunc channel, void *data ) {
+ const xmlChar *cur, *base;
+ unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */
+ xmlChar content[81]; /* space for 80 chars + line terminator */
+ xmlChar *ctnt;
+
+ if (input == NULL) return;
+ cur = input->cur;
+ base = input->base;
+ /* skip backwards over any end-of-lines */
+ while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) {
+ cur--;
+ }
+ n = 0;
+ /* search backwards for beginning-of-line (to max buff size) */
+ while ((n++ < (sizeof(content)-1)) && (cur > base) &&
+ (*(cur) != '\n') && (*(cur) != '\r'))
+ cur--;
+ if ((*(cur) == '\n') || (*(cur) == '\r')) cur++;
+ /* calculate the error position in terms of the current position */
+ col = input->cur - cur;
+ /* search forward for end-of-line (to max buff size) */
+ n = 0;
+ ctnt = content;
+ /* copy selected text to our buffer */
+ while ((*cur != 0) && (*(cur) != '\n') &&
+ (*(cur) != '\r') && (n < sizeof(content)-1)) {
+ *ctnt++ = *cur++;
+ n++;
+ }
+ *ctnt = 0;
+ /* print out the selected text */
+ channel(data ,"%s\n", content);
+ /* create blank line with problem pointer */
+ n = 0;
+ ctnt = content;
+ /* (leave buffer space for pointer + line terminator) */
+ while ((n<col) && (n++ < sizeof(content)-2) && (*ctnt != 0)) {
+ if (*(ctnt) != '\t')
+ *(ctnt) = ' ';
+ ctnt++;
+ }
+ *ctnt++ = '^';
+ *ctnt = 0;
+ channel(data ,"%s\n", content);
+}
+
+/**
+ * xmlParserPrintFileContext:
+ * @input: an xmlParserInputPtr input
+ *
+ * Displays current context within the input content for error tracking
+ */
+void
+xmlParserPrintFileContext(xmlParserInputPtr input) {
+ xmlParserPrintFileContextInternal(input, xmlGenericError,
+ xmlGenericErrorContext);
+}
+
+/**
+ * xmlReportError:
+ * @err: the error
+ * @ctx: the parser context or NULL
+ * @str: the formatted error message
+ *
+ * Report an erro with its context, replace the 4 old error/warning
+ * routines.
+ */
+static void
+xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str,
+ xmlGenericErrorFunc channel, void *data)
+{
+ char *file = NULL;
+ int line = 0;
+ int code = -1;
+ int domain;
+ const xmlChar *name = NULL;
+ xmlNodePtr node;
+ xmlErrorLevel level;
+ xmlParserInputPtr input = NULL;
+ xmlParserInputPtr cur = NULL;
+
+ if (err == NULL)
+ return;
+
+ if (channel == NULL) {
+ channel = xmlGenericError;
+ data = xmlGenericErrorContext;
+ }
+ file = err->file;
+ line = err->line;
+ code = err->code;
+ domain = err->domain;
+ level = err->level;
+ node = err->node;
+
+ if (code == XML_ERR_OK)
+ return;
+
+ if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
+ name = node->name;
+
+ /*
+ * Maintain the compatibility with the legacy error handling
+ */
+ if (ctxt != NULL) {
+ input = ctxt->input;
+ if ((input != NULL) && (input->filename == NULL) &&
+ (ctxt->inputNr > 1)) {
+ cur = input;
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+ }
+ if (input != NULL) {
+ if (input->filename)
+ channel(data, "%s:%d: ", input->filename, input->line);
+ else if ((line != 0) && (domain == XML_FROM_PARSER))
+ channel(data, "Entity: line %d: ", input->line);
+ }
+ } else {
+ if (file != NULL)
+ channel(data, "%s:%d: ", file, line);
+ else if ((line != 0) && (domain == XML_FROM_PARSER))
+ channel(data, "Entity: line %d: ", line);
+ }
+ if (name != NULL) {
+ channel(data, "element %s: ", name);
+ }
+ if (code == XML_ERR_OK)
+ return;
+ switch (domain) {
+ case XML_FROM_PARSER:
+ channel(data, "parser ");
+ break;
+ case XML_FROM_NAMESPACE:
+ channel(data, "namespace ");
+ break;
+ case XML_FROM_DTD:
+ case XML_FROM_VALID:
+ channel(data, "validity ");
+ break;
+ case XML_FROM_HTML:
+ channel(data, "HTML parser ");
+ break;
+ case XML_FROM_MEMORY:
+ channel(data, "memory ");
+ break;
+ case XML_FROM_OUTPUT:
+ channel(data, "output ");
+ break;
+ case XML_FROM_IO:
+ channel(data, "I/O ");
+ break;
+ case XML_FROM_XINCLUDE:
+ channel(data, "XInclude ");
+ break;
+ case XML_FROM_XPATH:
+ channel(data, "XPath ");
+ break;
+ case XML_FROM_XPOINTER:
+ channel(data, "parser ");
+ break;
+ case XML_FROM_REGEXP:
+ channel(data, "regexp ");
+ break;
+ case XML_FROM_SCHEMASV:
+ channel(data, "Schemas validity ");
+ break;
+ case XML_FROM_SCHEMASP:
+ channel(data, "Schemas parser ");
+ break;
+ case XML_FROM_RELAXNGP:
+ channel(data, "Relax-NG parser ");
+ break;
+ case XML_FROM_RELAXNGV:
+ channel(data, "Relax-NG validity ");
+ break;
+ case XML_FROM_CATALOG:
+ channel(data, "Catalog ");
+ break;
+ case XML_FROM_C14N:
+ channel(data, "C14N ");
+ break;
+ case XML_FROM_XSLT:
+ channel(data, "XSLT ");
+ break;
+ default:
+ break;
+ }
+ if (code == XML_ERR_OK)
+ return;
+ switch (level) {
+ case XML_ERR_NONE:
+ channel(data, ": ");
+ break;
+ case XML_ERR_WARNING:
+ channel(data, "warning : ");
+ break;
+ case XML_ERR_ERROR:
+ channel(data, "error : ");
+ break;
+ case XML_ERR_FATAL:
+ channel(data, "error : ");
+ break;
+ }
+ if (code == XML_ERR_OK)
+ return;
+ if (str != NULL) {
+ int len;
+ len = xmlStrlen((const xmlChar *)str);
+ if ((len > 0) && (str[len - 1] != '\n'))
+ channel(data, "%s\n", str);
+ else
+ channel(data, "%s", str);
+ } else {
+ channel(data, "%s\n", "out of memory error");
+ }
+ if (code == XML_ERR_OK)
+ return;
+
+ if (ctxt != NULL) {
+ xmlParserPrintFileContextInternal(input, channel, data);
+ if (cur != NULL) {
+ if (cur->filename)
+ channel(data, "%s:%d: \n", cur->filename, cur->line);
+ else if ((line != 0) && (domain == XML_FROM_PARSER))
+ channel(data, "Entity: line %d: \n", cur->line);
+ xmlParserPrintFileContextInternal(cur, channel, data);
+ }
+ }
+ if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) &&
+ (err->int1 < 100) &&
+ (err->int1 < xmlStrlen((const xmlChar *)err->str1))) {
+ xmlChar buf[150];
+ int i;
+
+ channel(data, "%s\n", err->str1);
+ for (i=0;i < err->int1;i++)
+ buf[i] = ' ';
+ buf[i++] = '^';
+ buf[i] = 0;
+ channel(data, "%s\n", buf);
+ }
+}
+
+/**
+ * __xmlRaiseError:
+ * @channel: the structured callback channel
+ * @channel: the old callback channel
+ * @data: the callback data
+ * @ctx: the parser context or NULL
+ * @ctx: the parser context or NULL
+ * @domain: the domain for the error
+ * @code: the code for the error
+ * @level: the xmlErrorLevel for the error
+ * @file: the file source of the error (or NULL)
+ * @line: the line of the error or 0 if N/A
+ * @str1: extra string info
+ * @str2: extra string info
+ * @str3: extra string info
+ * @int1: extra int info
+ * @int2: extra int info
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Update teh appropriate global or contextual error structure,
+ * then forward the error message down the parser or generic
+ * error callback handler
+ */
+void
+__xmlRaiseError(xmlStructuredErrorFunc schannel,
+ xmlGenericErrorFunc channel, void *data, void *ctx,
+ void *nod, int domain, int code, xmlErrorLevel level,
+ const char *file, int line, const char *str1,
+ const char *str2, const char *str3, int int1, int int2,
+ const char *msg, ...)
+{
+ xmlParserCtxtPtr ctxt = NULL;
+ xmlNodePtr node = (xmlNodePtr) nod;
+ char *str = NULL;
+ xmlParserInputPtr input = NULL;
+ xmlErrorPtr to = &xmlLastError;
+ xmlChar *base = NULL;
+
+ if ((xmlGetWarningsDefaultValue == 0) && (level == XML_ERR_WARNING))
+ return;
+ if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) ||
+ (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
+ (domain == XML_FROM_IO)) {
+ ctxt = (xmlParserCtxtPtr) ctx;
+ if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) &&
+ (ctxt->sax->initialized == XML_SAX2_MAGIC))
+ schannel = ctxt->sax->serror;
+ }
+ if (schannel == NULL)
+ schannel = xmlStructuredError;
+ if ((domain == XML_FROM_VALID) &&
+ ((channel == xmlParserValidityError) ||
+ (channel == xmlParserValidityWarning))) {
+ ctxt = (xmlParserCtxtPtr) ctx;
+ if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) &&
+ (ctxt->sax->initialized == XML_SAX2_MAGIC))
+ schannel = ctxt->sax->serror;
+ }
+ if (code == XML_ERR_OK)
+ return;
+ /*
+ * Formatting the message
+ */
+ if (msg == NULL) {
+ str = (char *) xmlStrdup(BAD_CAST "No error message provided");
+ } else {
+ XML_GET_VAR_STR(msg, str);
+ }
+
+ /*
+ * specific processing if a parser context is provided
+ */
+ if (ctxt != NULL) {
+ if (file == NULL) {
+ input = ctxt->input;
+ if ((input != NULL) && (input->filename == NULL) &&
+ (ctxt->inputNr > 1)) {
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+ }
+ if (input != NULL) {
+ file = input->filename;
+ line = input->line;
+ }
+ }
+ to = &ctxt->lastError;
+ } else if ((node != NULL) && (file == NULL)) {
+ int i;
+
+ if ((node->doc != NULL) && (node->doc->URL != NULL))
+ base = xmlStrdup(node->doc->URL);
+ for (i = 0;
+ ((i < 10) && (node != NULL) && (node->type != XML_ELEMENT_NODE));
+ i++)
+ node = node->parent;
+ if ((base == NULL) && (node != NULL) &&
+ (node->doc != NULL) && (node->doc->URL != NULL))
+ base = xmlStrdup(node->doc->URL);
+
+ if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
+ line = node->line;
+ }
+
+ /*
+ * Save the informations about the error
+ */
+ xmlResetError(to);
+ to->domain = domain;
+ to->code = code;
+ to->message = str;
+ to->level = level;
+ if (file != NULL)
+ to->file = (char *) xmlStrdup((const xmlChar *) file);
+ else if (base != NULL) {
+ to->file = (char *) base;
+ file = (char *) base;
+ }
+ to->line = line;
+ if (str1 != NULL)
+ to->str1 = (char *) xmlStrdup((const xmlChar *) str1);
+ if (str2 != NULL)
+ to->str2 = (char *) xmlStrdup((const xmlChar *) str2);
+ if (str3 != NULL)
+ to->str3 = (char *) xmlStrdup((const xmlChar *) str3);
+ to->int1 = int1;
+ to->int2 = int2;
+ to->node = node;
+ to->ctxt = ctx;
+
+ if (to != &xmlLastError)
+ xmlCopyError(to,&xmlLastError);
+
+ /*
+ * Find the callback channel.
+ */
+ if ((ctxt != NULL) && (channel == NULL)) {
+ if (level == XML_ERR_WARNING)
+ channel = ctxt->sax->warning;
+ else
+ channel = ctxt->sax->error;
+ data = ctxt->userData;
+ } else if (channel == NULL) {
+ if (xmlStructuredError != NULL)
+ schannel = xmlStructuredError;
+ else
+ channel = xmlGenericError;
+ data = xmlGenericErrorContext;
+ }
+ if (schannel != NULL) {
+ schannel(data, to);
+ return;
+ }
+ if (channel == NULL)
+ return;
+
+ if ((channel == xmlParserError) ||
+ (channel == xmlParserWarning) ||
+ (channel == xmlParserValidityError) ||
+ (channel == xmlParserValidityWarning))
+ xmlReportError(to, ctxt, str, NULL, NULL);
+ else if ((channel == (xmlGenericErrorFunc) fprintf) ||
+ (channel == xmlGenericErrorDefaultFunc))
+ xmlReportError(to, ctxt, str, channel, data);
+ else
+ channel(data, "%s", str);
+}
+
+/**
+ * __xmlSimpleError:
+ * @domain: where the error comes from
+ * @code: the error code
+ * @node: the context node
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+void
+__xmlSimpleError(int domain, int code, xmlNodePtr node,
+ const char *msg, const char *extra)
+{
+
+ if (code == XML_ERR_NO_MEMORY) {
+ if (extra)
+ __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
+ NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+ else
+ __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
+ NULL, NULL, 0, 0, "Memory allocation failed\n");
+ } else {
+ __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
+ code, XML_ERR_ERROR, NULL, 0, extra,
+ NULL, NULL, 0, 0, msg, extra);
+ }
+}
+/**
+ * xmlParserError:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format an error messages, gives file, line, position and
+ * extra parameters.
+ */
+void
+xmlParserError(void *ctx, const char *msg, ...)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserInputPtr input = NULL;
+ xmlParserInputPtr cur = NULL;
+ char * str;
+
+ if (ctxt != NULL) {
+ input = ctxt->input;
+ if ((input != NULL) && (input->filename == NULL) &&
+ (ctxt->inputNr > 1)) {
+ cur = input;
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+ }
+ xmlParserPrintFileInfo(input);
+ }
+
+ xmlGenericError(xmlGenericErrorContext, "error: ");
+ XML_GET_VAR_STR(msg, str);
+ xmlGenericError(xmlGenericErrorContext, "%s", str);
+ if (str != NULL)
+ xmlFree(str);
+
+ if (ctxt != NULL) {
+ xmlParserPrintFileContext(input);
+ if (cur != NULL) {
+ xmlParserPrintFileInfo(cur);
+ xmlGenericError(xmlGenericErrorContext, "\n");
+ xmlParserPrintFileContext(cur);
+ }
+ }
+}
+
+/**
+ * xmlParserWarning:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a warning messages, gives file, line, position and
+ * extra parameters.
+ */
+void
+xmlParserWarning(void *ctx, const char *msg, ...)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserInputPtr input = NULL;
+ xmlParserInputPtr cur = NULL;
+ char * str;
+
+ if (ctxt != NULL) {
+ input = ctxt->input;
+ if ((input != NULL) && (input->filename == NULL) &&
+ (ctxt->inputNr > 1)) {
+ cur = input;
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+ }
+ xmlParserPrintFileInfo(input);
+ }
+
+ xmlGenericError(xmlGenericErrorContext, "warning: ");
+ XML_GET_VAR_STR(msg, str);
+ xmlGenericError(xmlGenericErrorContext, "%s", str);
+ if (str != NULL)
+ xmlFree(str);
+
+ if (ctxt != NULL) {
+ xmlParserPrintFileContext(input);
+ if (cur != NULL) {
+ xmlParserPrintFileInfo(cur);
+ xmlGenericError(xmlGenericErrorContext, "\n");
+ xmlParserPrintFileContext(cur);
+ }
+ }
+}
+
+/************************************************************************
+ * *
+ * Handling of validation errors *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlParserValidityError:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format an validity error messages, gives file,
+ * line, position and extra parameters.
+ */
+void
+xmlParserValidityError(void *ctx, const char *msg, ...)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserInputPtr input = NULL;
+ char * str;
+ int len = xmlStrlen((const xmlChar *) msg);
+ static int had_info = 0;
+
+ if ((len > 1) && (msg[len - 2] != ':')) {
+ if (ctxt != NULL) {
+ input = ctxt->input;
+ if ((input->filename == NULL) && (ctxt->inputNr > 1))
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+
+ if (had_info == 0) {
+ xmlParserPrintFileInfo(input);
+ }
+ }
+ xmlGenericError(xmlGenericErrorContext, "validity error: ");
+ had_info = 0;
+ } else {
+ had_info = 1;
+ }
+
+ XML_GET_VAR_STR(msg, str);
+ xmlGenericError(xmlGenericErrorContext, "%s", str);
+ if (str != NULL)
+ xmlFree(str);
+
+ if ((ctxt != NULL) && (input != NULL)) {
+ xmlParserPrintFileContext(input);
+ }
+}
+
+/**
+ * xmlParserValidityWarning:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a validity warning messages, gives file, line,
+ * position and extra parameters.
+ */
+void
+xmlParserValidityWarning(void *ctx, const char *msg, ...)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserInputPtr input = NULL;
+ char * str;
+ int len = xmlStrlen((const xmlChar *) msg);
+
+ if ((ctxt != NULL) && (len != 0) && (msg[len - 1] != ':')) {
+ input = ctxt->input;
+ if ((input->filename == NULL) && (ctxt->inputNr > 1))
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+
+ xmlParserPrintFileInfo(input);
+ }
+
+ xmlGenericError(xmlGenericErrorContext, "validity warning: ");
+ XML_GET_VAR_STR(msg, str);
+ xmlGenericError(xmlGenericErrorContext, "%s", str);
+ if (str != NULL)
+ xmlFree(str);
+
+ if (ctxt != NULL) {
+ xmlParserPrintFileContext(input);
+ }
+}
+
+
+/************************************************************************
+ * *
+ * Extended Error Handling *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlGetLastError:
+ *
+ * Get the last global error registered. This is per thread if compiled
+ * with thread support.
+ *
+ * Returns NULL if no error occured or a pointer to the error
+ */
+xmlErrorPtr
+xmlGetLastError(void)
+{
+ if (xmlLastError.code == XML_ERR_OK)
+ return (NULL);
+ return (&xmlLastError);
+}
+
+/**
+ * xmlResetError:
+ * @err: pointer to the error.
+ *
+ * Cleanup the error.
+ */
+void
+xmlResetError(xmlErrorPtr err)
+{
+ if (err == NULL)
+ return;
+ if (err->code == XML_ERR_OK)
+ return;
+ if (err->message != NULL)
+ xmlFree(err->message);
+ if (err->file != NULL)
+ xmlFree(err->file);
+ if (err->str1 != NULL)
+ xmlFree(err->str1);
+ if (err->str2 != NULL)
+ xmlFree(err->str2);
+ if (err->str3 != NULL)
+ xmlFree(err->str3);
+ memset(err, 0, sizeof(xmlError));
+ err->code = XML_ERR_OK;
+}
+
+/**
+ * xmlResetLastError:
+ *
+ * Cleanup the last global error registered. For parsing error
+ * this does not change the well-formedness result.
+ */
+void
+xmlResetLastError(void)
+{
+ if (xmlLastError.code == XML_ERR_OK)
+ return;
+ xmlResetError(&xmlLastError);
+}
+
+/**
+ * xmlCtxtGetLastError:
+ * @ctx: an XML parser context
+ *
+ * Get the last parsing error registered.
+ *
+ * Returns NULL if no error occured or a pointer to the error
+ */
+xmlErrorPtr
+xmlCtxtGetLastError(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+
+ if (ctxt == NULL)
+ return (NULL);
+ if (ctxt->lastError.code == XML_ERR_OK)
+ return (NULL);
+ return (&ctxt->lastError);
+}
+
+/**
+ * xmlCtxtResetLastError:
+ * @ctx: an XML parser context
+ *
+ * Cleanup the last global error registered. For parsing error
+ * this does not change the well-formedness result.
+ */
+void
+xmlCtxtResetLastError(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+
+ if (ctxt == NULL)
+ return;
+ if (ctxt->lastError.code == XML_ERR_OK)
+ return;
+ xmlResetError(&ctxt->lastError);
+}
+
+/**
+ * xmlCopyError:
+ * @from: a source error
+ * @to: a target error
+ *
+ * Save the original error to the new place.
+ *
+ * Returns 0 in case of success and -1 in case of error.
+ */
+int
+xmlCopyError(xmlErrorPtr from, xmlErrorPtr to) {
+ if ((from == NULL) || (to == NULL))
+ return(-1);
+ if (to->message != NULL)
+ xmlFree(to->message);
+ if (to->file != NULL)
+ xmlFree(to->file);
+ if (to->str1 != NULL)
+ xmlFree(to->str1);
+ if (to->str2 != NULL)
+ xmlFree(to->str2);
+ if (to->str3 != NULL)
+ xmlFree(to->str3);
+ to->domain = from->domain;
+ to->code = from->code;
+ to->level = from->level;
+ to->line = from->line;
+ to->node = from->node;
+ to->int1 = from->int1;
+ to->int2 = from->int2;
+ to->node = from->node;
+ to->ctxt = from->ctxt;
+ if (from->message != NULL)
+ to->message = (char *) xmlStrdup((xmlChar *) from->message);
+ else
+ to->message = NULL;
+ if (from->file != NULL)
+ to->file = (char *) xmlStrdup((xmlChar *) from->file);
+ else
+ to->file = NULL;
+ if (from->str1 != NULL)
+ to->str1 = (char *) xmlStrdup((xmlChar *) from->str1);
+ else
+ to->str1 = NULL;
+ if (from->str2 != NULL)
+ to->str2 = (char *) xmlStrdup((xmlChar *) from->str2);
+ else
+ to->str2 = NULL;
+ if (from->str3 != NULL)
+ to->str3 = (char *) xmlStrdup((xmlChar *) from->str3);
+ else
+ to->str3 = NULL;
+ return(0);
+}
+
diff --git a/example/Makefile.am b/example/Makefile.am
new file mode 100644
index 0000000..0138775
--- /dev/null
+++ b/example/Makefile.am
@@ -0,0 +1,10 @@
+noinst_PROGRAMS = gjobread
+
+INCLUDES = \
+ -I$(top_builddir) -I$(top_srcdir) \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include -I@srcdir@
+
+LDADD = $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
+
+
diff --git a/example/Makefile.in b/example/Makefile.in
new file mode 100644
index 0000000..19768e3
--- /dev/null
+++ b/example/Makefile.in
@@ -0,0 +1,527 @@
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = gjobread.c
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+noinst_PROGRAMS = gjobread$(EXEEXT)
+subdir = example
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+gjobread_SOURCES = gjobread.c
+gjobread_OBJECTS = gjobread.$(OBJEXT)
+gjobread_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+gjobread_DEPENDENCIES = $(top_builddir)/libxml2.la \
+ $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/gjobread.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = gjobread.c
+DIST_SOURCES = gjobread.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+C14N_OBJ = @C14N_OBJ@
+CATALOG_OBJ = @CATALOG_OBJ@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_OBJ = @DEBUG_OBJ@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOCB_OBJ = @DOCB_OBJ@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FTP_OBJ = @FTP_OBJ@
+HAVE_ISINF = @HAVE_ISINF@
+HAVE_ISNAN = @HAVE_ISNAN@
+HTML_DIR = @HTML_DIR@
+HTML_OBJ = @HTML_OBJ@
+HTTP_OBJ = @HTTP_OBJ@
+ICONV_LIBS = @ICONV_LIBS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
+LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
+LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
+LIBXML_VERSION = @LIBXML_VERSION@
+LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
+LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MV = @MV@
+M_LIBS = @M_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATTERN_TEST = @PATTERN_TEST@
+PYTHON = @PYTHON@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
+PYTHON_SUBDIR = @PYTHON_SUBDIR@
+PYTHON_TESTS = @PYTHON_TESTS@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RDL_LIBS = @RDL_LIBS@
+READER_TEST = @READER_TEST@
+RELDATE = @RELDATE@
+RM = @RM@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STATIC_BINARIES = @STATIC_BINARIES@
+STRIP = @STRIP@
+TAR = @TAR@
+TEST_C14N = @TEST_C14N@
+TEST_CATALOG = @TEST_CATALOG@
+TEST_DEBUG = @TEST_DEBUG@
+TEST_HTML = @TEST_HTML@
+TEST_PHTML = @TEST_PHTML@
+TEST_PUSH = @TEST_PUSH@
+TEST_REGEXPS = @TEST_REGEXPS@
+TEST_SAX = @TEST_SAX@
+TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_THREADS = @TEST_THREADS@
+TEST_VALID = @TEST_VALID@
+TEST_VTIME = @TEST_VTIME@
+TEST_XINCLUDE = @TEST_XINCLUDE@
+TEST_XPATH = @TEST_XPATH@
+TEST_XPTR = @TEST_XPTR@
+THREADS_W32 = @THREADS_W32@
+THREAD_CFLAGS = @THREAD_CFLAGS@
+THREAD_LIBS = @THREAD_LIBS@
+U = @U@
+VERSION = @VERSION@
+WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
+WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
+WITH_C14N = @WITH_C14N@
+WITH_CATALOG = @WITH_CATALOG@
+WITH_DEBUG = @WITH_DEBUG@
+WITH_DOCB = @WITH_DOCB@
+WITH_FTP = @WITH_FTP@
+WITH_HTML = @WITH_HTML@
+WITH_HTTP = @WITH_HTTP@
+WITH_ICONV = @WITH_ICONV@
+WITH_ISO8859X = @WITH_ISO8859X@
+WITH_LEGACY = @WITH_LEGACY@
+WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
+WITH_OUTPUT = @WITH_OUTPUT@
+WITH_PATTERN = @WITH_PATTERN@
+WITH_PUSH = @WITH_PUSH@
+WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
+WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
+WITH_READER = @WITH_READER@
+WITH_REGEXPS = @WITH_REGEXPS@
+WITH_SAX1 = @WITH_SAX1@
+WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_THREADS = @WITH_THREADS@
+WITH_TREE = @WITH_TREE@
+WITH_TRIO = @WITH_TRIO@
+WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
+WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
+WITH_VALID = @WITH_VALID@
+WITH_WRITER = @WITH_WRITER@
+WITH_XINCLUDE = @WITH_XINCLUDE@
+WITH_XPATH = @WITH_XPATH@
+WITH_XPTR = @WITH_XPTR@
+XINCLUDE_OBJ = @XINCLUDE_OBJ@
+XML_CFLAGS = @XML_CFLAGS@
+XML_INCLUDEDIR = @XML_INCLUDEDIR@
+XML_LIBDIR = @XML_LIBDIR@
+XML_LIBS = @XML_LIBS@
+XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
+XPATH_OBJ = @XPATH_OBJ@
+XPTR_OBJ = @XPTR_OBJ@
+Z_CFLAGS = @Z_CFLAGS@
+Z_LIBS = @Z_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+INCLUDES = \
+ -I$(top_builddir) -I$(top_srcdir) \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include -I@srcdir@
+
+LDADD = $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu example/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu example/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+gjobread$(EXEEXT): $(gjobread_OBJECTS) $(gjobread_DEPENDENCIES)
+ @rm -f gjobread$(EXEEXT)
+ $(LINK) $(gjobread_LDFLAGS) $(gjobread_OBJECTS) $(gjobread_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gjobread.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-info-am
+
+# 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/example/gjobread.c b/example/gjobread.c
new file mode 100644
index 0000000..b192bf4
--- /dev/null
+++ b/example/gjobread.c
@@ -0,0 +1,307 @@
+/*
+ * gjobread.c : a small test program for gnome jobs XML format
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel.Veillard@w3.org
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/*
+ * This example should compile and run indifferently with libxml-1.8.8 +
+ * and libxml2-2.1.0 +
+ * Check the COMPAT comments below
+ */
+
+/*
+ * COMPAT using xml-config --cflags to get the include path this will
+ * work with both
+ */
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+
+#define DEBUG(x) printf(x)
+
+/*
+ * A person record
+ * an xmlChar * is really an UTF8 encoded char string (0 terminated)
+ */
+typedef struct person {
+ xmlChar *name;
+ xmlChar *email;
+ xmlChar *company;
+ xmlChar *organisation;
+ xmlChar *smail;
+ xmlChar *webPage;
+ xmlChar *phone;
+} person, *personPtr;
+
+/*
+ * And the code needed to parse it
+ */
+static personPtr
+parsePerson(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) {
+ personPtr ret = NULL;
+
+DEBUG("parsePerson\n");
+ /*
+ * allocate the struct
+ */
+ ret = (personPtr) malloc(sizeof(person));
+ if (ret == NULL) {
+ fprintf(stderr,"out of memory\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(person));
+
+ /* We don't care what the top level element name is */
+ /* COMPAT xmlChildrenNode is a macro unifying libxml1 and libxml2 names */
+ cur = cur->xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"Person")) &&
+ (cur->ns == ns))
+ ret->name = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ if ((!xmlStrcmp(cur->name, (const xmlChar *)"Email")) &&
+ (cur->ns == ns))
+ ret->email = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ cur = cur->next;
+ }
+
+ return(ret);
+}
+
+/*
+ * and to print it
+ */
+static void
+printPerson(personPtr cur) {
+ if (cur == NULL) return;
+ printf("------ Person\n");
+ if (cur->name) printf(" name: %s\n", cur->name);
+ if (cur->email) printf(" email: %s\n", cur->email);
+ if (cur->company) printf(" company: %s\n", cur->company);
+ if (cur->organisation) printf(" organisation: %s\n", cur->organisation);
+ if (cur->smail) printf(" smail: %s\n", cur->smail);
+ if (cur->webPage) printf(" Web: %s\n", cur->webPage);
+ if (cur->phone) printf(" phone: %s\n", cur->phone);
+ printf("------\n");
+}
+
+/*
+ * a Description for a Job
+ */
+typedef struct job {
+ xmlChar *projectID;
+ xmlChar *application;
+ xmlChar *category;
+ personPtr contact;
+ int nbDevelopers;
+ personPtr developers[100]; /* using dynamic alloc is left as an exercise */
+} job, *jobPtr;
+
+/*
+ * And the code needed to parse it
+ */
+static jobPtr
+parseJob(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) {
+ jobPtr ret = NULL;
+
+DEBUG("parseJob\n");
+ /*
+ * allocate the struct
+ */
+ ret = (jobPtr) malloc(sizeof(job));
+ if (ret == NULL) {
+ fprintf(stderr,"out of memory\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(job));
+
+ /* We don't care what the top level element name is */
+ cur = cur->xmlChildrenNode;
+ while (cur != NULL) {
+
+ if ((!xmlStrcmp(cur->name, (const xmlChar *) "Project")) &&
+ (cur->ns == ns)) {
+ ret->projectID = xmlGetProp(cur, (const xmlChar *) "ID");
+ if (ret->projectID == NULL) {
+ fprintf(stderr, "Project has no ID\n");
+ }
+ }
+ if ((!xmlStrcmp(cur->name, (const xmlChar *) "Application")) &&
+ (cur->ns == ns))
+ ret->application =
+ xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ if ((!xmlStrcmp(cur->name, (const xmlChar *) "Category")) &&
+ (cur->ns == ns))
+ ret->category =
+ xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ if ((!xmlStrcmp(cur->name, (const xmlChar *) "Contact")) &&
+ (cur->ns == ns))
+ ret->contact = parsePerson(doc, ns, cur);
+ cur = cur->next;
+ }
+
+ return(ret);
+}
+
+/*
+ * and to print it
+ */
+static void
+printJob(jobPtr cur) {
+ int i;
+
+ if (cur == NULL) return;
+ printf("======= Job\n");
+ if (cur->projectID != NULL) printf("projectID: %s\n", cur->projectID);
+ if (cur->application != NULL) printf("application: %s\n", cur->application);
+ if (cur->category != NULL) printf("category: %s\n", cur->category);
+ if (cur->contact != NULL) printPerson(cur->contact);
+ printf("%d developers\n", cur->nbDevelopers);
+
+ for (i = 0;i < cur->nbDevelopers;i++) printPerson(cur->developers[i]);
+ printf("======= \n");
+}
+
+/*
+ * A pool of Gnome Jobs
+ */
+typedef struct gjob {
+ int nbJobs;
+ jobPtr jobs[500]; /* using dynamic alloc is left as an exercise */
+} gJob, *gJobPtr;
+
+
+static gJobPtr
+parseGjobFile(char *filename) {
+ xmlDocPtr doc;
+ gJobPtr ret;
+ jobPtr curjob;
+ xmlNsPtr ns;
+ xmlNodePtr cur;
+
+#ifdef LIBXML_SAX1_ENABLED
+ /*
+ * build an XML tree from a the file;
+ */
+ doc = xmlParseFile(filename);
+ if (doc == NULL) return(NULL);
+#else
+ /*
+ * the library has been compiled without some of the old interfaces
+ */
+ return(NULL);
+#endif /* LIBXML_SAX1_ENABLED */
+
+ /*
+ * Check the document is of the right kind
+ */
+
+ cur = xmlDocGetRootElement(doc);
+ if (cur == NULL) {
+ fprintf(stderr,"empty document\n");
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+ ns = xmlSearchNsByHref(doc, cur,
+ (const xmlChar *) "http://www.gnome.org/some-location");
+ if (ns == NULL) {
+ fprintf(stderr,
+ "document of the wrong type, GJob Namespace not found\n");
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+ if (xmlStrcmp(cur->name, (const xmlChar *) "Helping")) {
+ fprintf(stderr,"document of the wrong type, root node != Helping");
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+
+ /*
+ * Allocate the structure to be returned.
+ */
+ ret = (gJobPtr) malloc(sizeof(gJob));
+ if (ret == NULL) {
+ fprintf(stderr,"out of memory\n");
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(gJob));
+
+ /*
+ * Now, walk the tree.
+ */
+ /* First level we expect just Jobs */
+ cur = cur->xmlChildrenNode;
+ while ( cur && xmlIsBlankNode ( cur ) )
+ {
+ cur = cur -> next;
+ }
+ if ( cur == 0 )
+ return ( NULL );
+ if ((xmlStrcmp(cur->name, (const xmlChar *) "Jobs")) || (cur->ns != ns)) {
+ fprintf(stderr,"document of the wrong type, was '%s', Jobs expected",
+ cur->name);
+ fprintf(stderr,"xmlDocDump follows\n");
+#ifdef LIBXML_OUTPUT_ENABLED
+ xmlDocDump ( stderr, doc );
+ fprintf(stderr,"xmlDocDump finished\n");
+#endif /* LIBXML_OUTPUT_ENABLED */
+ xmlFreeDoc(doc);
+ free(ret);
+ return(NULL);
+ }
+
+ /* Second level is a list of Job, but be laxist */
+ cur = cur->xmlChildrenNode;
+ while (cur != NULL) {
+ if ((!xmlStrcmp(cur->name, (const xmlChar *) "Job")) &&
+ (cur->ns == ns)) {
+ curjob = parseJob(doc, ns, cur);
+ if (curjob != NULL)
+ ret->jobs[ret->nbJobs++] = curjob;
+ if (ret->nbJobs >= 500) break;
+ }
+ cur = cur->next;
+ }
+
+ return(ret);
+}
+
+static void
+handleGjob(gJobPtr cur) {
+ int i;
+
+ /*
+ * Do whatever you want and free the structure.
+ */
+ printf("%d Jobs registered\n", cur->nbJobs);
+ for (i = 0; i < cur->nbJobs; i++) printJob(cur->jobs[i]);
+}
+
+int main(int argc, char **argv) {
+ int i;
+ gJobPtr cur;
+
+ /* COMPAT: Do not genrate nodes for formatting spaces */
+ LIBXML_TEST_VERSION
+ xmlKeepBlanksDefault(0);
+
+ for (i = 1; i < argc ; i++) {
+ cur = parseGjobFile(argv[i]);
+ if ( cur )
+ handleGjob(cur);
+ else
+ fprintf( stderr, "Error parsing file '%s'\n", argv[i]);
+
+ }
+
+ /* Clean up everything else before quitting. */
+ xmlCleanupParser();
+
+ return(0);
+}
diff --git a/example/gjobs.xml b/example/gjobs.xml
new file mode 100644
index 0000000..8372976
--- /dev/null
+++ b/example/gjobs.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<gjob:Helping xmlns:gjob="http://www.gnome.org/some-location">
+ <gjob:Jobs>
+
+ <gjob:Job>
+ <gjob:Project ID="3"/>
+ <gjob:Application>GBackup</gjob:Application>
+ <gjob:Category>Development</gjob:Category>
+
+ <gjob:Update>
+ <gjob:Status>Open</gjob:Status>
+ <gjob:Modified>Mon, 07 Jun 1999 20:27:45 -0400 MET DST</gjob:Modified>
+ <gjob:Salary>USD 0.00</gjob:Salary>
+ </gjob:Update>
+
+ <gjob:Developers>
+ <gjob:Developer>
+ </gjob:Developer>
+ </gjob:Developers>
+
+ <gjob:Contact>
+ <gjob:Person>Nathan Clemons</gjob:Person>
+ <gjob:Email>nathan@windsofstorm.net</gjob:Email>
+ <gjob:Company>
+ </gjob:Company>
+ <gjob:Organisation>
+ </gjob:Organisation>
+ <gjob:Webpage>
+ </gjob:Webpage>
+ <gjob:Snailmail>
+ </gjob:Snailmail>
+ <gjob:Phone>
+ </gjob:Phone>
+ </gjob:Contact>
+
+ <gjob:Requirements>
+ The program should be released as free software, under the GPL.
+ </gjob:Requirements>
+
+ <gjob:Skills>
+ </gjob:Skills>
+
+ <gjob:Details>
+ A GNOME based system that will allow a superuser to configure
+ compressed and uncompressed files and/or file systems to be backed
+ up with a supported media in the system. This should be able to
+ perform via find commands generating a list of files that are passed
+ to tar, dd, cpio, cp, gzip, etc., to be directed to the tape machine
+ or via operations performed on the filesystem itself. Email
+ notification and GUI status display very important.
+ </gjob:Details>
+
+ </gjob:Job>
+
+ </gjob:Jobs>
+</gjob:Helping>
+
diff --git a/genUnicode.py b/genUnicode.py
new file mode 100755
index 0000000..40af350
--- /dev/null
+++ b/genUnicode.py
@@ -0,0 +1,470 @@
+#!/usr/bin/python -u
+#
+# Original script modified in November 2003 to take advantage of
+# the character-validation range routines, and updated to the
+# current Unicode information (Version 4.0.1)
+#
+# NOTE: there is an 'alias' facility for blocks which are not present in
+# the current release, but are needed for ABI compatibility. This
+# must be accomplished MANUALLY! Please see the comments below under
+# 'blockAliases'
+#
+import sys
+import string
+import time
+
+webpage = "http://www.unicode.org/Public/4.0-Update1/UCD-4.0.1d5b.html"
+sources = "Blocks-4.0.1d1b.txt UnicodeData-4.0.1d1b.txt"
+
+#
+# blockAliases is a small hack - it is used for mapping block names which
+# were were used in the 3.1 release, but are missing or changed in the current
+# release. The format is "OldBlockName:NewBlockName1[,NewBlockName2[,...]]"
+blockAliases = []
+blockAliases.append("CombiningMarksforSymbols:CombiningDiacriticalMarksforSymbols")
+blockAliases.append("Greek:GreekandCoptic")
+blockAliases.append("PrivateUse:PrivateUseArea,SupplementaryPrivateUseArea-A," +
+ "SupplementaryPrivateUseArea-B")
+
+# minTableSize gives the minimum number of ranges which must be present
+# before a range table is produced. If there are less than this
+# number, inline comparisons are generated
+minTableSize = 8
+
+(blockfile, catfile) = string.split(sources)
+
+
+#
+# Now process the "blocks" file, reducing it to a dictionary
+# indexed by blockname, containing a tuple with the applicable
+# block range
+#
+BlockNames = {}
+try:
+ blocks = open(blockfile, "r")
+except:
+ print "Missing %s, aborting ..." % blockfile
+ sys.exit(1)
+
+for line in blocks.readlines():
+ if line[0] == '#':
+ continue
+ line = string.strip(line)
+ if line == '':
+ continue
+ try:
+ fields = string.split(line, ';')
+ range = string.strip(fields[0])
+ (start, end) = string.split(range, "..")
+ name = string.strip(fields[1])
+ name = string.replace(name, ' ', '')
+ except:
+ print "Failed to process line: %s" % (line)
+ continue
+ start = "0x" + start
+ end = "0x" + end
+ try:
+ BlockNames[name].append((start, end))
+ except:
+ BlockNames[name] = [(start, end)]
+blocks.close()
+print "Parsed %d blocks descriptions" % (len(BlockNames.keys()))
+
+for block in blockAliases:
+ alias = string.split(block,':')
+ alist = string.split(alias[1],',')
+ for comp in alist:
+ if BlockNames.has_key(comp):
+ if alias[0] not in BlockNames:
+ BlockNames[alias[0]] = []
+ for r in BlockNames[comp]:
+ BlockNames[alias[0]].append(r)
+ else:
+ print "Alias %s: %s not in Blocks" % (alias[0], comp)
+ continue
+
+#
+# Next process the Categories file. This is more complex, since
+# the file is in code sequence, and we need to invert it. We use
+# a dictionary with index category-name, with each entry containing
+# all the ranges (codepoints) of that category. Note that category
+# names comprise two parts - the general category, and the "subclass"
+# within that category. Therefore, both "general category" (which is
+# the first character of the 2-character category-name) and the full
+# (2-character) name are entered into this dictionary.
+#
+try:
+ data = open(catfile, "r")
+except:
+ print "Missing %s, aborting ..." % catfile
+ sys.exit(1)
+
+nbchar = 0;
+Categories = {}
+for line in data.readlines():
+ if line[0] == '#':
+ continue
+ line = string.strip(line)
+ if line == '':
+ continue
+ try:
+ fields = string.split(line, ';')
+ point = string.strip(fields[0])
+ value = 0
+ while point != '':
+ value = value * 16
+ if point[0] >= '0' and point[0] <= '9':
+ value = value + ord(point[0]) - ord('0')
+ elif point[0] >= 'A' and point[0] <= 'F':
+ value = value + 10 + ord(point[0]) - ord('A')
+ elif point[0] >= 'a' and point[0] <= 'f':
+ value = value + 10 + ord(point[0]) - ord('a')
+ point = point[1:]
+ name = fields[2]
+ except:
+ print "Failed to process line: %s" % (line)
+ continue
+
+ nbchar = nbchar + 1
+ # update entry for "full name"
+ try:
+ Categories[name].append(value)
+ except:
+ try:
+ Categories[name] = [value]
+ except:
+ print "Failed to process line: %s" % (line)
+ # update "general category" name
+ try:
+ Categories[name[0]].append(value)
+ except:
+ try:
+ Categories[name[0]] = [value]
+ except:
+ print "Failed to process line: %s" % (line)
+
+blocks.close()
+print "Parsed %d char generating %d categories" % (nbchar, len(Categories.keys()))
+
+#
+# The data is now all read. Time to process it into a more useful form.
+#
+# reduce the number list into ranges
+for cat in Categories.keys():
+ list = Categories[cat]
+ start = -1
+ prev = -1
+ end = -1
+ ranges = []
+ for val in list:
+ if start == -1:
+ start = val
+ prev = val
+ continue
+ elif val == prev + 1:
+ prev = val
+ continue
+ elif prev == start:
+ ranges.append((prev, prev))
+ start = val
+ prev = val
+ continue
+ else:
+ ranges.append((start, prev))
+ start = val
+ prev = val
+ continue
+ if prev == start:
+ ranges.append((prev, prev))
+ else:
+ ranges.append((start, prev))
+ Categories[cat] = ranges
+
+#
+# Assure all data is in alphabetic order, since we will be doing binary
+# searches on the tables.
+#
+bkeys = BlockNames.keys()
+bkeys.sort()
+
+ckeys = Categories.keys()
+ckeys.sort()
+
+#
+# Generate the resulting files
+#
+try:
+ header = open("include/libxml/xmlunicode.h", "w")
+except:
+ print "Failed to open include/libxml/xmlunicode.h"
+ sys.exit(1)
+
+try:
+ output = open("xmlunicode.c", "w")
+except:
+ print "Failed to open xmlunicode.c"
+ sys.exit(1)
+
+date = time.asctime(time.localtime(time.time()))
+
+header.write(
+"""/*
+ * Summary: Unicode character APIs
+ * Description: API for the Unicode character APIs
+ *
+ * This file is automatically generated from the
+ * UCS description files of the Unicode Character Database
+ * %s
+ * using the genUnicode.py Python script.
+ *
+ * Generation date: %s
+ * Sources: %s
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_UNICODE_H__
+#define __XML_UNICODE_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+""" % (webpage, date, sources));
+
+output.write(
+"""/*
+ * xmlunicode.c: this module implements the Unicode character APIs
+ *
+ * This file is automatically generated from the
+ * UCS description files of the Unicode Character Database
+ * %s
+ * using the genUnicode.py Python script.
+ *
+ * Generation date: %s
+ * Sources: %s
+ * Daniel Veillard <veillard@redhat.com>
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_UNICODE_ENABLED
+
+#include <string.h>
+#include <libxml/xmlversion.h>
+#include <libxml/xmlunicode.h>
+#include <libxml/chvalid.h>
+
+typedef int (xmlIntFunc)(int); /* just to keep one's mind untwisted */
+
+typedef struct {
+ const char *rangename;
+ xmlIntFunc *func;
+} xmlUnicodeRange;
+
+typedef struct {
+ xmlUnicodeRange *table;
+ int numentries;
+} xmlUnicodeNameTable;
+
+
+static xmlIntFunc *xmlUnicodeLookup(xmlUnicodeNameTable *tptr, const char *tname);
+
+static xmlUnicodeRange xmlUnicodeBlocks[] = {
+""" % (webpage, date, sources));
+
+flag = 0
+for block in bkeys:
+ name = string.replace(block, '-', '')
+ if flag:
+ output.write(',\n')
+ else:
+ flag = 1
+ output.write(' {"%s", xmlUCSIs%s}' % (block, name))
+output.write('};\n\n')
+
+output.write('static xmlUnicodeRange xmlUnicodeCats[] = {\n')
+flag = 0;
+for name in ckeys:
+ if flag:
+ output.write(',\n')
+ else:
+ flag = 1
+ output.write(' {"%s", xmlUCSIsCat%s}' % (name, name))
+output.write('};\n\n')
+
+#
+# For any categories with more than minTableSize ranges we generate
+# a range table suitable for xmlCharInRange
+#
+for name in ckeys:
+ if len(Categories[name]) > minTableSize:
+ numshort = 0
+ numlong = 0
+ ranges = Categories[name]
+ sptr = "NULL"
+ lptr = "NULL"
+ for range in ranges:
+ (low, high) = range
+ if high < 0x10000:
+ if numshort == 0:
+ pline = "static xmlChSRange xml%sS[] = {" % name
+ sptr = "xml%sS" % name
+ else:
+ pline += ", "
+ numshort += 1
+ else:
+ if numlong == 0:
+ if numshort > 0:
+ output.write(pline + " };\n")
+ pline = "static xmlChLRange xml%sL[] = {" % name
+ lptr = "xml%sL" % name
+ else:
+ pline += ", "
+ numlong += 1
+ if len(pline) > 60:
+ output.write(pline + "\n")
+ pline = " "
+ pline += "{%s, %s}" % (hex(low), hex(high))
+ output.write(pline + " };\nstatic xmlChRangeGroup xml%sG = {%s,%s,%s,%s};\n\n"
+ % (name, numshort, numlong, sptr, lptr))
+
+
+output.write(
+"""xmlUnicodeNameTable xmlUnicodeBlockTbl = {xmlUnicodeBlocks, %s};
+xmlUnicodeNameTable xmlUnicodeCatTbl = {xmlUnicodeCats, %s};
+
+/**
+ * xmlUnicodeLookup:
+ * @tptr: pointer to the name table
+ * @name: name to be found
+ *
+ * binary table lookup for user-supplied name
+ *
+ * Returns pointer to range function if found, otherwise NULL
+ */
+static xmlIntFunc
+*xmlUnicodeLookup(xmlUnicodeNameTable *tptr, const char *tname) {
+ int low, high, mid, cmp;
+ xmlUnicodeRange *sptr;
+
+ low = 0;
+ high = tptr->numentries - 1;
+ sptr = tptr->table;
+ while (low <= high) {
+ mid = (low + high) / 2;
+ if ((cmp=strcmp(tname, sptr[mid].rangename)) == 0)
+ return (sptr[mid].func);
+ if (cmp < 0)
+ high = mid - 1;
+ else
+ low = mid + 1;
+ }
+ return (NULL);
+}
+
+""" % (len(BlockNames), len(Categories)) )
+
+for block in bkeys:
+ name = string.replace(block, '-', '')
+ header.write("XMLPUBFUN int XMLCALL xmlUCSIs%s\t(int code);\n" % name)
+ output.write("/**\n * xmlUCSIs%s:\n * @code: UCS code point\n" % (name))
+ output.write(" *\n * Check whether the character is part of %s UCS Block\n"%
+ (block))
+ output.write(" *\n * Returns 1 if true 0 otherwise\n */\n");
+ output.write("int\nxmlUCSIs%s(int code) {\n return(" % name)
+ flag = 0
+ for (start, end) in BlockNames[block]:
+ if flag:
+ output.write(" ||\n ")
+ else:
+ flag = 1
+ output.write("((code >= %s) && (code <= %s))" % (start, end))
+ output.write(");\n}\n\n")
+
+header.write("\nXMLPUBFUN int XMLCALL xmlUCSIsBlock\t(int code, const char *block);\n\n")
+output.write(
+"""/**
+ * xmlUCSIsBlock:
+ * @code: UCS code point
+ * @block: UCS block name
+ *
+ * Check whether the character is part of the UCS Block
+ *
+ * Returns 1 if true, 0 if false and -1 on unknown block
+ */
+int
+xmlUCSIsBlock(int code, const char *block) {
+ xmlIntFunc *func;
+
+ func = xmlUnicodeLookup(&xmlUnicodeBlockTbl, block);
+ if (func == NULL)
+ return (-1);
+ return (func(code));
+}
+
+""")
+
+for name in ckeys:
+ ranges = Categories[name]
+ header.write("XMLPUBFUN int XMLCALL xmlUCSIsCat%s\t(int code);\n" % name)
+ output.write("/**\n * xmlUCSIsCat%s:\n * @code: UCS code point\n" % (name))
+ output.write(" *\n * Check whether the character is part of %s UCS Category\n"%
+ (name))
+ output.write(" *\n * Returns 1 if true 0 otherwise\n */\n");
+ output.write("int\nxmlUCSIsCat%s(int code) {\n" % name)
+ if len(Categories[name]) > minTableSize:
+ output.write(" return(xmlCharInRange((unsigned int)code, &xml%sG)"
+ % name)
+ else:
+ start = 1
+ for range in ranges:
+ (begin, end) = range;
+ if start:
+ output.write(" return(");
+ start = 0
+ else:
+ output.write(" ||\n ");
+ if (begin == end):
+ output.write("(code == %s)" % (hex(begin)))
+ else:
+ output.write("((code >= %s) && (code <= %s))" % (
+ hex(begin), hex(end)))
+ output.write(");\n}\n\n")
+
+header.write("\nXMLPUBFUN int XMLCALL xmlUCSIsCat\t(int code, const char *cat);\n")
+output.write(
+"""/**
+ * xmlUCSIsCat:
+ * @code: UCS code point
+ * @cat: UCS Category name
+ *
+ * Check whether the character is part of the UCS Category
+ *
+ * Returns 1 if true, 0 if false and -1 on unknown category
+ */
+int
+xmlUCSIsCat(int code, const char *cat) {
+ xmlIntFunc *func;
+
+ func = xmlUnicodeLookup(&xmlUnicodeCatTbl, cat);
+ if (func == NULL)
+ return (-1);
+ return (func(code));
+}
+
+
+#endif /* LIBXML_UNICODE_ENABLED */
+""")
+
+header.write("""
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_UNICODE_H__ */
+""");
+
+header.close()
+output.close()
diff --git a/globals.c b/globals.c
new file mode 100644
index 0000000..f1aa150
--- /dev/null
+++ b/globals.c
@@ -0,0 +1,983 @@
+/*
+ * globals.c: definition and handling of the set of global variables
+ * of the library
+ *
+ * The bottom of this file is automatically generated by build_glob.py
+ * based on the description file global.data
+ *
+ * See Copyright for the status of this software.
+ *
+ * Gary Pennington <Gary.Pennington@uk.sun.com>
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <string.h>
+
+#include <libxml/globals.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/threads.h>
+
+/* #define DEBUG_GLOBALS */
+
+/*
+ * Helpful Macro
+ */
+#ifdef LIBXML_THREAD_ENABLED
+#define IS_MAIN_THREAD (xmlIsMainThread())
+#else
+#define IS_MAIN_THREAD 1
+#endif
+
+/*
+ * Mutex to protect "ForNewThreads" variables
+ */
+static xmlMutexPtr xmlThrDefMutex = NULL;
+
+/**
+ * xmlInitGlobals:
+ *
+ * Additional initialisation for multi-threading
+ */
+void xmlInitGlobals()
+{
+ xmlThrDefMutex = xmlNewMutex();
+}
+
+/**
+ * xmlCleanupGlobals:
+ *
+ * Additional cleanup for multi-threading
+ */
+void xmlCleanupGlobals()
+{
+ if (xmlThrDefMutex != NULL) {
+ xmlFreeMutex(xmlThrDefMutex);
+ xmlThrDefMutex = NULL;
+ }
+}
+
+/************************************************************************
+ * *
+ * All the user accessible global variables of the library *
+ * *
+ ************************************************************************/
+
+/*
+ * Memory allocation routines
+ */
+#if defined(DEBUG_MEMORY_LOCATION) || defined(DEBUG_MEMORY)
+#ifndef __DEBUG_MEMORY_ALLOC__
+extern void xmlMemFree(void *ptr);
+extern void * xmlMemMalloc(size_t size);
+extern void * xmlMemRealloc(void *ptr,size_t size);
+extern char * xmlMemoryStrdup(const char *str);
+#endif
+
+xmlFreeFunc xmlFree = (xmlFreeFunc) xmlMemFree;
+xmlMallocFunc xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
+xmlMallocFunc xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc;
+xmlReallocFunc xmlRealloc = (xmlReallocFunc) xmlMemRealloc;
+xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup;
+#else
+/**
+ * xmlFree:
+ * @mem: an already allocated block of memory
+ *
+ * The variable holding the libxml free() implementation
+ */
+xmlFreeFunc xmlFree = (xmlFreeFunc) free;
+/**
+ * xmlMalloc:
+ * @size: the size requested in bytes
+ *
+ * The variable holding the libxml malloc() implementation
+ *
+ * Returns a pointer to the newly allocated block or NULL in case of error
+ */
+xmlMallocFunc xmlMalloc = (xmlMallocFunc) malloc;
+/**
+ * xmlMallocAtomic:
+ * @size: the size requested in bytes
+ *
+ * The variable holding the libxml malloc() implementation for atomic
+ * data (i.e. blocks not containings pointers), useful when using a
+ * garbage collecting allocator.
+ *
+ * Returns a pointer to the newly allocated block or NULL in case of error
+ */
+xmlMallocFunc xmlMallocAtomic = (xmlMallocFunc) malloc;
+/**
+ * xmlRealloc:
+ * @mem: an already allocated block of memory
+ * @size: the new size requested in bytes
+ *
+ * The variable holding the libxml realloc() implementation
+ *
+ * Returns a pointer to the newly reallocated block or NULL in case of error
+ */
+xmlReallocFunc xmlRealloc = (xmlReallocFunc) realloc;
+/**
+ * xmlMemStrdup:
+ * @str: a zero terminated string
+ *
+ * The variable holding the libxml strdup() implementation
+ *
+ * Returns the copy of the string or NULL in case of error
+ */
+xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlStrdup;
+#endif /* DEBUG_MEMORY_LOCATION || DEBUG_MEMORY */
+
+#include <libxml/threads.h>
+#include <libxml/globals.h>
+#include <libxml/SAX.h>
+
+#undef docbDefaultSAXHandler
+#undef htmlDefaultSAXHandler
+#undef oldXMLWDcompatibility
+#undef xmlBufferAllocScheme
+#undef xmlDefaultBufferSize
+#undef xmlDefaultSAXHandler
+#undef xmlDefaultSAXLocator
+#undef xmlDoValidityCheckingDefaultValue
+#undef xmlGenericError
+#undef xmlStructuredError
+#undef xmlGenericErrorContext
+#undef xmlGetWarningsDefaultValue
+#undef xmlIndentTreeOutput
+#undef xmlTreeIndentString
+#undef xmlKeepBlanksDefaultValue
+#undef xmlLineNumbersDefaultValue
+#undef xmlLoadExtDtdDefaultValue
+#undef xmlParserDebugEntities
+#undef xmlParserVersion
+#undef xmlPedanticParserDefaultValue
+#undef xmlSaveNoEmptyTags
+#undef xmlSubstituteEntitiesDefaultValue
+#undef xmlRegisterNodeDefaultValue
+#undef xmlDeregisterNodeDefaultValue
+#undef xmlLastError
+
+#undef xmlFree
+#undef xmlMalloc
+#undef xmlMallocAtomic
+#undef xmlMemStrdup
+#undef xmlRealloc
+
+/**
+ * xmlParserVersion:
+ *
+ * Constant string describing the internal version of the library
+ */
+const char *xmlParserVersion = LIBXML_VERSION_STRING;
+
+/**
+ * xmlBufferAllocScheme:
+ *
+ * Global setting, default allocation policy for buffers, default is
+ * XML_BUFFER_ALLOC_EXACT
+ */
+xmlBufferAllocationScheme xmlBufferAllocScheme = XML_BUFFER_ALLOC_EXACT;
+static xmlBufferAllocationScheme xmlBufferAllocSchemeThrDef = XML_BUFFER_ALLOC_EXACT;
+/**
+ * xmlDefaultBufferSize:
+ *
+ * Global setting, default buffer size. Default value is BASE_BUFFER_SIZE
+ */
+int xmlDefaultBufferSize = BASE_BUFFER_SIZE;
+static int xmlDefaultBufferSizeThrDef = BASE_BUFFER_SIZE;
+
+/*
+ * Parser defaults
+ */
+
+/**
+ * oldXMLWDcompatibility:
+ *
+ * Global setting, DEPRECATED.
+ */
+int oldXMLWDcompatibility = 0; /* DEPRECATED */
+/**
+ * xmlParserDebugEntities:
+ *
+ * Global setting, asking the parser to print out debugging informations.
+ * while handling entities.
+ * Disabled by default
+ */
+int xmlParserDebugEntities = 0;
+static int xmlParserDebugEntitiesThrDef = 0;
+/**
+ * xmlDoValidityCheckingDefaultValue:
+ *
+ * Global setting, indicate that the parser should work in validating mode.
+ * Disabled by default.
+ */
+int xmlDoValidityCheckingDefaultValue = 0;
+static int xmlDoValidityCheckingDefaultValueThrDef = 0;
+/**
+ * xmlGetWarningsDefaultValue:
+ *
+ * Global setting, indicate that the parser should provide warnings.
+ * Activated by default.
+ */
+int xmlGetWarningsDefaultValue = 1;
+static int xmlGetWarningsDefaultValueThrDef = 1;
+/**
+ * xmlLoadExtDtdDefaultValue:
+ *
+ * Global setting, indicate that the parser should load DTD while not
+ * validating.
+ * Disabled by default.
+ */
+int xmlLoadExtDtdDefaultValue = 0;
+static int xmlLoadExtDtdDefaultValueThrDef = 0;
+/**
+ * xmlPedanticParserDefaultValue:
+ *
+ * Global setting, indicate that the parser be pedantic
+ * Disabled by default.
+ */
+int xmlPedanticParserDefaultValue = 0;
+static int xmlPedanticParserDefaultValueThrDef = 0;
+/**
+ * xmlLineNumbersDefaultValue:
+ *
+ * Global setting, indicate that the parser should store the line number
+ * in the content field of elements in the DOM tree.
+ * Disabled by default since this may not be safe for old classes of
+ * applicaton.
+ */
+int xmlLineNumbersDefaultValue = 0;
+static int xmlLineNumbersDefaultValueThrDef = 0;
+/**
+ * xmlKeepBlanksDefaultValue:
+ *
+ * Global setting, indicate that the parser should keep all blanks
+ * nodes found in the content
+ * Activated by default, this is actually needed to have the parser
+ * conformant to the XML Recommendation, however the option is kept
+ * for some applications since this was libxml1 default behaviour.
+ */
+int xmlKeepBlanksDefaultValue = 1;
+static int xmlKeepBlanksDefaultValueThrDef = 1;
+/**
+ * xmlSubstituteEntitiesDefaultValue:
+ *
+ * Global setting, indicate that the parser should not generate entity
+ * references but replace them with the actual content of the entity
+ * Disabled by default, this should be activated when using XPath since
+ * the XPath data model requires entities replacement and the XPath
+ * engine does not handle entities references transparently.
+ */
+int xmlSubstituteEntitiesDefaultValue = 0;
+static int xmlSubstituteEntitiesDefaultValueThrDef = 0;
+
+xmlRegisterNodeFunc xmlRegisterNodeDefaultValue = NULL;
+static xmlRegisterNodeFunc xmlRegisterNodeDefaultValueThrDef = NULL;
+xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue = NULL;
+static xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValueThrDef = NULL;
+
+/*
+ * Error handling
+ */
+
+/* xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc; */
+/* Must initialize xmlGenericError in xmlInitParser */
+void xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED,
+ const char *msg,
+ ...);
+/**
+ * xmlGenericError:
+ *
+ * Global setting: function used for generic error callbacks
+ */
+xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc;
+static xmlGenericErrorFunc xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc;
+/**
+ * xmlStructuredError:
+ *
+ * Global setting: function used for structured error callbacks
+ */
+xmlStructuredErrorFunc xmlStructuredError = NULL;
+static xmlStructuredErrorFunc xmlStructuredErrorThrDef = NULL;
+/**
+ * xmlGenericErrorContext:
+ *
+ * Global setting passed to generic error callbacks
+ */
+void *xmlGenericErrorContext = NULL;
+static void *xmlGenericErrorContextThrDef = NULL;
+xmlError xmlLastError;
+
+/*
+ * output defaults
+ */
+/**
+ * xmlIndentTreeOutput:
+ *
+ * Global setting, asking the serializer to indent the output tree by default
+ * Enabled by default
+ */
+int xmlIndentTreeOutput = 1;
+static int xmlIndentTreeOutputThrDef = 1;
+
+/**
+ * xmlTreeIndentString:
+ *
+ * The string used to do one-level indent. By default is equal to " " (two spaces)
+ */
+const char *xmlTreeIndentString = " ";
+static const char *xmlTreeIndentStringThrDef = " ";
+
+/**
+ * xmlSaveNoEmptyTags:
+ *
+ * Global setting, asking the serializer to not output empty tags
+ * as <empty/> but <empty></empty>. those two forms are undistinguishable
+ * once parsed.
+ * Disabled by default
+ */
+int xmlSaveNoEmptyTags = 0;
+int xmlSaveNoEmptyTagsThrDef = 0;
+
+#ifdef LIBXML_SAX1_ENABLED
+/**
+ * xmlDefaultSAXHandler:
+ *
+ * Default SAX version1 handler for XML, builds the DOM tree
+ */
+xmlSAXHandlerV1 xmlDefaultSAXHandler = {
+ xmlSAX2InternalSubset,
+ xmlSAX2IsStandalone,
+ xmlSAX2HasInternalSubset,
+ xmlSAX2HasExternalSubset,
+ xmlSAX2ResolveEntity,
+ xmlSAX2GetEntity,
+ xmlSAX2EntityDecl,
+ xmlSAX2NotationDecl,
+ xmlSAX2AttributeDecl,
+ xmlSAX2ElementDecl,
+ xmlSAX2UnparsedEntityDecl,
+ xmlSAX2SetDocumentLocator,
+ xmlSAX2StartDocument,
+ xmlSAX2EndDocument,
+ xmlSAX2StartElement,
+ xmlSAX2EndElement,
+ xmlSAX2Reference,
+ xmlSAX2Characters,
+ xmlSAX2Characters,
+ xmlSAX2ProcessingInstruction,
+ xmlSAX2Comment,
+ xmlParserWarning,
+ xmlParserError,
+ xmlParserError,
+ xmlSAX2GetParameterEntity,
+ xmlSAX2CDataBlock,
+ xmlSAX2ExternalSubset,
+ 0,
+};
+#endif /* LIBXML_SAX1_ENABLED */
+
+/**
+ * xmlDefaultSAXLocator:
+ *
+ * The default SAX Locator
+ * { getPublicId, getSystemId, getLineNumber, getColumnNumber}
+ */
+xmlSAXLocator xmlDefaultSAXLocator = {
+ xmlSAX2GetPublicId,
+ xmlSAX2GetSystemId,
+ xmlSAX2GetLineNumber,
+ xmlSAX2GetColumnNumber
+};
+
+#ifdef LIBXML_HTML_ENABLED
+/**
+ * htmlDefaultSAXHandler:
+ *
+ * Default old SAX v1 handler for HTML, builds the DOM tree
+ */
+xmlSAXHandlerV1 htmlDefaultSAXHandler = {
+ xmlSAX2InternalSubset,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ xmlSAX2GetEntity,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ xmlSAX2SetDocumentLocator,
+ xmlSAX2StartDocument,
+ xmlSAX2EndDocument,
+ xmlSAX2StartElement,
+ xmlSAX2EndElement,
+ NULL,
+ xmlSAX2Characters,
+ xmlSAX2IgnorableWhitespace,
+ NULL,
+ xmlSAX2Comment,
+ xmlParserWarning,
+ xmlParserError,
+ xmlParserError,
+ xmlSAX2GetParameterEntity,
+ xmlSAX2CDataBlock,
+ NULL,
+ 0,
+};
+#endif /* LIBXML_HTML_ENABLED */
+
+#ifdef LIBXML_DOCB_ENABLED
+/**
+ * docbDefaultSAXHandler:
+ *
+ * Default old SAX v1 handler for SGML DocBook, builds the DOM tree
+ */
+xmlSAXHandlerV1 docbDefaultSAXHandler = {
+ xmlSAX2InternalSubset,
+ xmlSAX2IsStandalone,
+ xmlSAX2HasInternalSubset,
+ xmlSAX2HasExternalSubset,
+ xmlSAX2ResolveEntity,
+ xmlSAX2GetEntity,
+ xmlSAX2EntityDecl,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ xmlSAX2SetDocumentLocator,
+ xmlSAX2StartDocument,
+ xmlSAX2EndDocument,
+ xmlSAX2StartElement,
+ xmlSAX2EndElement,
+ xmlSAX2Reference,
+ xmlSAX2Characters,
+ xmlSAX2IgnorableWhitespace,
+ NULL,
+ xmlSAX2Comment,
+ xmlParserWarning,
+ xmlParserError,
+ xmlParserError,
+ xmlSAX2GetParameterEntity,
+ NULL,
+ NULL,
+ 0,
+};
+#endif /* LIBXML_DOCB_ENABLED */
+
+/**
+ * xmlInitializeGlobalState:
+ * @gs: a pointer to a newly allocated global state
+ *
+ * xmlInitializeGlobalState() initialize a global state with all the
+ * default values of the library.
+ */
+void
+xmlInitializeGlobalState(xmlGlobalStatePtr gs)
+{
+#ifdef DEBUG_GLOBALS
+ fprintf(stderr, "Initializing globals at %lu for thread %d\n",
+ (unsigned long) gs, xmlGetThreadId());
+#endif
+
+ /*
+ * Perform initialization as required by libxml
+ */
+ if (xmlThrDefMutex == NULL)
+ xmlInitGlobals();
+
+ xmlMutexLock(xmlThrDefMutex);
+
+#ifdef LIBXML_DOCB_ENABLED
+ initdocbDefaultSAXHandler(&gs->docbDefaultSAXHandler);
+#endif
+#ifdef LIBXML_HTML_ENABLED
+ inithtmlDefaultSAXHandler(&gs->htmlDefaultSAXHandler);
+#endif
+
+ gs->oldXMLWDcompatibility = 0;
+ gs->xmlBufferAllocScheme = xmlBufferAllocSchemeThrDef;
+ gs->xmlDefaultBufferSize = xmlDefaultBufferSizeThrDef;
+#ifdef LIBXML_SAX1_ENABLED
+ initxmlDefaultSAXHandler(&gs->xmlDefaultSAXHandler, 1);
+#endif /* LIBXML_SAX1_ENABLED */
+ gs->xmlDefaultSAXLocator.getPublicId = xmlSAX2GetPublicId;
+ gs->xmlDefaultSAXLocator.getSystemId = xmlSAX2GetSystemId;
+ gs->xmlDefaultSAXLocator.getLineNumber = xmlSAX2GetLineNumber;
+ gs->xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber;
+ gs->xmlDoValidityCheckingDefaultValue =
+ xmlDoValidityCheckingDefaultValueThrDef;
+#if defined(DEBUG_MEMORY_LOCATION) | defined(DEBUG_MEMORY)
+ gs->xmlFree = (xmlFreeFunc) xmlMemFree;
+ gs->xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
+ gs->xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc;
+ gs->xmlRealloc = (xmlReallocFunc) xmlMemRealloc;
+ gs->xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup;
+#else
+ gs->xmlFree = (xmlFreeFunc) free;
+ gs->xmlMalloc = (xmlMallocFunc) malloc;
+ gs->xmlMallocAtomic = (xmlMallocFunc) malloc;
+ gs->xmlRealloc = (xmlReallocFunc) realloc;
+ gs->xmlMemStrdup = (xmlStrdupFunc) xmlStrdup;
+#endif
+ gs->xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef;
+ gs->xmlIndentTreeOutput = xmlIndentTreeOutputThrDef;
+ gs->xmlTreeIndentString = xmlTreeIndentStringThrDef;
+ gs->xmlKeepBlanksDefaultValue = xmlKeepBlanksDefaultValueThrDef;
+ gs->xmlLineNumbersDefaultValue = xmlLineNumbersDefaultValueThrDef;
+ gs->xmlLoadExtDtdDefaultValue = xmlLoadExtDtdDefaultValueThrDef;
+ gs->xmlParserDebugEntities = xmlParserDebugEntitiesThrDef;
+ gs->xmlParserVersion = LIBXML_VERSION_STRING;
+ gs->xmlPedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef;
+ gs->xmlSaveNoEmptyTags = xmlSaveNoEmptyTagsThrDef;
+ gs->xmlSubstituteEntitiesDefaultValue =
+ xmlSubstituteEntitiesDefaultValueThrDef;
+
+ gs->xmlGenericError = xmlGenericErrorThrDef;
+ gs->xmlStructuredError = xmlStructuredErrorThrDef;
+ gs->xmlGenericErrorContext = xmlGenericErrorContextThrDef;
+ gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef;
+ gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef;
+ memset(&gs->xmlLastError, 0, sizeof(xmlError));
+
+ xmlMutexUnlock(xmlThrDefMutex);
+}
+
+/**
+ * DOC_DISABLE : we ignore missing doc for the xmlThrDef functions,
+ * those are really internal work
+ */
+void
+xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler) {
+ xmlMutexLock(xmlThrDefMutex);
+ xmlGenericErrorContextThrDef = ctx;
+ if (handler != NULL)
+ xmlGenericErrorThrDef = handler;
+ else
+ xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc;
+ xmlMutexUnlock(xmlThrDefMutex);
+}
+
+void
+xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) {
+ xmlMutexLock(xmlThrDefMutex);
+ xmlGenericErrorContextThrDef = ctx;
+ xmlStructuredErrorThrDef = handler;
+ xmlMutexUnlock(xmlThrDefMutex);
+}
+
+/**
+ * xmlRegisterNodeDefault:
+ * @func: function pointer to the new RegisterNodeFunc
+ *
+ * Registers a callback for node creation
+ *
+ * Returns the old value of the registration function
+ */
+xmlRegisterNodeFunc
+xmlRegisterNodeDefault(xmlRegisterNodeFunc func)
+{
+ xmlRegisterNodeFunc old = xmlRegisterNodeDefaultValue;
+
+ __xmlRegisterCallbacks = 1;
+ xmlRegisterNodeDefaultValue = func;
+ return(old);
+}
+
+xmlRegisterNodeFunc
+xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func)
+{
+ xmlRegisterNodeFunc old;
+
+ xmlMutexLock(xmlThrDefMutex);
+ old = xmlRegisterNodeDefaultValueThrDef;
+
+ __xmlRegisterCallbacks = 1;
+ xmlRegisterNodeDefaultValueThrDef = func;
+ xmlMutexUnlock(xmlThrDefMutex);
+
+ return(old);
+}
+
+/**
+ * xmlDeregisterNodeDefault:
+ * @func: function pointer to the new DeregisterNodeFunc
+ *
+ * Registers a callback for node destruction
+ *
+ * Returns the previous value of the deregistration function
+ */
+xmlDeregisterNodeFunc
+xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func)
+{
+ xmlDeregisterNodeFunc old = xmlDeregisterNodeDefaultValue;
+
+ __xmlRegisterCallbacks = 1;
+ xmlDeregisterNodeDefaultValue = func;
+ return(old);
+}
+
+xmlDeregisterNodeFunc
+xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func)
+{
+ xmlDeregisterNodeFunc old;
+
+ xmlMutexLock(xmlThrDefMutex);
+ old = xmlDeregisterNodeDefaultValueThrDef;
+
+ __xmlRegisterCallbacks = 1;
+ xmlDeregisterNodeDefaultValueThrDef = func;
+ xmlMutexUnlock(xmlThrDefMutex);
+
+ return(old);
+}
+
+
+#ifdef LIBXML_DOCB_ENABLED
+#undef docbDefaultSAXHandler
+xmlSAXHandlerV1 *
+__docbDefaultSAXHandler(void) {
+ if (IS_MAIN_THREAD)
+ return (&docbDefaultSAXHandler);
+ else
+ return (&xmlGetGlobalState()->docbDefaultSAXHandler);
+}
+#endif
+
+#ifdef LIBXML_HTML_ENABLED
+#undef htmlDefaultSAXHandler
+xmlSAXHandlerV1 *
+__htmlDefaultSAXHandler(void) {
+ if (IS_MAIN_THREAD)
+ return (&htmlDefaultSAXHandler);
+ else
+ return (&xmlGetGlobalState()->htmlDefaultSAXHandler);
+}
+#endif
+
+#undef xmlLastError
+xmlError *
+__xmlLastError(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlLastError);
+ else
+ return (&xmlGetGlobalState()->xmlLastError);
+}
+
+/*
+ * Everything starting from the line below is
+ * Automatically generated by build_glob.py.
+ * Do not modify the previous line.
+ */
+
+
+#undef oldXMLWDcompatibility
+int *
+__oldXMLWDcompatibility(void) {
+ if (IS_MAIN_THREAD)
+ return (&oldXMLWDcompatibility);
+ else
+ return (&xmlGetGlobalState()->oldXMLWDcompatibility);
+}
+
+#undef xmlBufferAllocScheme
+xmlBufferAllocationScheme *
+__xmlBufferAllocScheme(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlBufferAllocScheme);
+ else
+ return (&xmlGetGlobalState()->xmlBufferAllocScheme);
+}
+xmlBufferAllocationScheme xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v) {
+ xmlBufferAllocationScheme ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlBufferAllocSchemeThrDef;
+ xmlBufferAllocSchemeThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlDefaultBufferSize
+int *
+__xmlDefaultBufferSize(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlDefaultBufferSize);
+ else
+ return (&xmlGetGlobalState()->xmlDefaultBufferSize);
+}
+int xmlThrDefDefaultBufferSize(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlDefaultBufferSizeThrDef;
+ xmlDefaultBufferSizeThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#ifdef LIBXML_SAX1_ENABLED
+#undef xmlDefaultSAXHandler
+xmlSAXHandlerV1 *
+__xmlDefaultSAXHandler(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlDefaultSAXHandler);
+ else
+ return (&xmlGetGlobalState()->xmlDefaultSAXHandler);
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+#undef xmlDefaultSAXLocator
+xmlSAXLocator *
+__xmlDefaultSAXLocator(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlDefaultSAXLocator);
+ else
+ return (&xmlGetGlobalState()->xmlDefaultSAXLocator);
+}
+
+#undef xmlDoValidityCheckingDefaultValue
+int *
+__xmlDoValidityCheckingDefaultValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlDoValidityCheckingDefaultValue);
+ else
+ return (&xmlGetGlobalState()->xmlDoValidityCheckingDefaultValue);
+}
+int xmlThrDefDoValidityCheckingDefaultValue(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlDoValidityCheckingDefaultValueThrDef;
+ xmlDoValidityCheckingDefaultValueThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlGenericError
+xmlGenericErrorFunc *
+__xmlGenericError(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlGenericError);
+ else
+ return (&xmlGetGlobalState()->xmlGenericError);
+}
+
+#undef xmlStructuredError
+xmlStructuredErrorFunc *
+__xmlStructuredError(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlStructuredError);
+ else
+ return (&xmlGetGlobalState()->xmlStructuredError);
+}
+
+#undef xmlGenericErrorContext
+void * *
+__xmlGenericErrorContext(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlGenericErrorContext);
+ else
+ return (&xmlGetGlobalState()->xmlGenericErrorContext);
+}
+
+#undef xmlGetWarningsDefaultValue
+int *
+__xmlGetWarningsDefaultValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlGetWarningsDefaultValue);
+ else
+ return (&xmlGetGlobalState()->xmlGetWarningsDefaultValue);
+}
+int xmlThrDefGetWarningsDefaultValue(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlGetWarningsDefaultValueThrDef;
+ xmlGetWarningsDefaultValueThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlIndentTreeOutput
+int *
+__xmlIndentTreeOutput(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlIndentTreeOutput);
+ else
+ return (&xmlGetGlobalState()->xmlIndentTreeOutput);
+}
+int xmlThrDefIndentTreeOutput(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlIndentTreeOutputThrDef;
+ xmlIndentTreeOutputThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlTreeIndentString
+const char * *
+__xmlTreeIndentString(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlTreeIndentString);
+ else
+ return (&xmlGetGlobalState()->xmlTreeIndentString);
+}
+const char * xmlThrDefTreeIndentString(const char * v) {
+ const char * ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlTreeIndentStringThrDef;
+ xmlTreeIndentStringThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlKeepBlanksDefaultValue
+int *
+__xmlKeepBlanksDefaultValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlKeepBlanksDefaultValue);
+ else
+ return (&xmlGetGlobalState()->xmlKeepBlanksDefaultValue);
+}
+int xmlThrDefKeepBlanksDefaultValue(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlKeepBlanksDefaultValueThrDef;
+ xmlKeepBlanksDefaultValueThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlLineNumbersDefaultValue
+int *
+__xmlLineNumbersDefaultValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlLineNumbersDefaultValue);
+ else
+ return (&xmlGetGlobalState()->xmlLineNumbersDefaultValue);
+}
+int xmlThrDefLineNumbersDefaultValue(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlLineNumbersDefaultValueThrDef;
+ xmlLineNumbersDefaultValueThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlLoadExtDtdDefaultValue
+int *
+__xmlLoadExtDtdDefaultValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlLoadExtDtdDefaultValue);
+ else
+ return (&xmlGetGlobalState()->xmlLoadExtDtdDefaultValue);
+}
+int xmlThrDefLoadExtDtdDefaultValue(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlLoadExtDtdDefaultValueThrDef;
+ xmlLoadExtDtdDefaultValueThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlParserDebugEntities
+int *
+__xmlParserDebugEntities(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlParserDebugEntities);
+ else
+ return (&xmlGetGlobalState()->xmlParserDebugEntities);
+}
+int xmlThrDefParserDebugEntities(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlParserDebugEntitiesThrDef;
+ xmlParserDebugEntitiesThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlParserVersion
+const char * *
+__xmlParserVersion(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlParserVersion);
+ else
+ return (&xmlGetGlobalState()->xmlParserVersion);
+}
+
+#undef xmlPedanticParserDefaultValue
+int *
+__xmlPedanticParserDefaultValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlPedanticParserDefaultValue);
+ else
+ return (&xmlGetGlobalState()->xmlPedanticParserDefaultValue);
+}
+int xmlThrDefPedanticParserDefaultValue(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlPedanticParserDefaultValueThrDef;
+ xmlPedanticParserDefaultValueThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlSaveNoEmptyTags
+int *
+__xmlSaveNoEmptyTags(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlSaveNoEmptyTags);
+ else
+ return (&xmlGetGlobalState()->xmlSaveNoEmptyTags);
+}
+int xmlThrDefSaveNoEmptyTags(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlSaveNoEmptyTagsThrDef;
+ xmlSaveNoEmptyTagsThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlSubstituteEntitiesDefaultValue
+int *
+__xmlSubstituteEntitiesDefaultValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlSubstituteEntitiesDefaultValue);
+ else
+ return (&xmlGetGlobalState()->xmlSubstituteEntitiesDefaultValue);
+}
+int xmlThrDefSubstituteEntitiesDefaultValue(int v) {
+ int ret;
+ xmlMutexLock(xmlThrDefMutex);
+ ret = xmlSubstituteEntitiesDefaultValueThrDef;
+ xmlSubstituteEntitiesDefaultValueThrDef = v;
+ xmlMutexUnlock(xmlThrDefMutex);
+ return ret;
+}
+
+#undef xmlRegisterNodeDefaultValue
+xmlRegisterNodeFunc *
+__xmlRegisterNodeDefaultValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlRegisterNodeDefaultValue);
+ else
+ return (&xmlGetGlobalState()->xmlRegisterNodeDefaultValue);
+}
+
+#undef xmlDeregisterNodeDefaultValue
+xmlDeregisterNodeFunc *
+__xmlDeregisterNodeDefaultValue(void) {
+ if (IS_MAIN_THREAD)
+ return (&xmlDeregisterNodeDefaultValue);
+ else
+ return (&xmlGetGlobalState()->xmlDeregisterNodeDefaultValue);
+}
diff --git a/hash.c b/hash.c
new file mode 100644
index 0000000..ff06b01
--- /dev/null
+++ b/hash.c
@@ -0,0 +1,949 @@
+/*
+ * hash.c: chained hash tables
+ *
+ * Reference: Your favorite introductory book on algorithms
+ *
+ * Copyright (C) 2000 Bjorn Reese and Daniel Veillard.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ * Author: breese@users.sourceforge.net
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+#include <libxml/parser.h>
+#include <libxml/hash.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/xmlerror.h>
+#include <libxml/globals.h>
+
+#define MAX_HASH_LEN 8
+
+/* #define DEBUG_GROW */
+
+/*
+ * A single entry in the hash table
+ */
+typedef struct _xmlHashEntry xmlHashEntry;
+typedef xmlHashEntry *xmlHashEntryPtr;
+struct _xmlHashEntry {
+ struct _xmlHashEntry *next;
+ xmlChar *name;
+ xmlChar *name2;
+ xmlChar *name3;
+ void *payload;
+ int valid;
+};
+
+/*
+ * The entire hash table
+ */
+struct _xmlHashTable {
+ struct _xmlHashEntry *table;
+ int size;
+ int nbElems;
+};
+
+/*
+ * xmlHashComputeKey:
+ * Calculate the hash key
+ */
+static unsigned long
+xmlHashComputeKey(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, const xmlChar *name3) {
+ unsigned long value = 0L;
+ char ch;
+
+ if (name != NULL) {
+ value += 30 * (*name);
+ while ((ch = *name++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ }
+ if (name2 != NULL) {
+ while ((ch = *name2++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ }
+ if (name3 != NULL) {
+ while ((ch = *name3++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ }
+ return (value % table->size);
+}
+
+static unsigned long
+xmlHashComputeQKey(xmlHashTablePtr table,
+ const xmlChar *prefix, const xmlChar *name,
+ const xmlChar *prefix2, const xmlChar *name2,
+ const xmlChar *prefix3, const xmlChar *name3) {
+ unsigned long value = 0L;
+ char ch;
+
+ if (prefix != NULL)
+ value += 30 * (*prefix);
+ else
+ value += 30 * (*name);
+
+ if (prefix != NULL) {
+ while ((ch = *prefix++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)':');
+ }
+ if (name != NULL) {
+ while ((ch = *name++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ }
+ if (prefix2 != NULL) {
+ while ((ch = *prefix2++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)':');
+ }
+ if (name2 != NULL) {
+ while ((ch = *name2++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ }
+ if (prefix3 != NULL) {
+ while ((ch = *prefix3++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)':');
+ }
+ if (name3 != NULL) {
+ while ((ch = *name3++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ }
+ return (value % table->size);
+}
+
+/**
+ * xmlHashCreate:
+ * @size: the size of the hash table
+ *
+ * Create a new xmlHashTablePtr.
+ *
+ * Returns the newly created object, or NULL if an error occured.
+ */
+xmlHashTablePtr
+xmlHashCreate(int size) {
+ xmlHashTablePtr table;
+
+ if (size <= 0)
+ size = 256;
+
+ table = xmlMalloc(sizeof(xmlHashTable));
+ if (table) {
+ table->size = size;
+ table->nbElems = 0;
+ table->table = xmlMalloc(size * sizeof(xmlHashEntry));
+ if (table->table) {
+ memset(table->table, 0, size * sizeof(xmlHashEntry));
+ return(table);
+ }
+ xmlFree(table);
+ }
+ return(NULL);
+}
+
+/**
+ * xmlHashGrow:
+ * @table: the hash table
+ * @size: the new size of the hash table
+ *
+ * resize the hash table
+ *
+ * Returns 0 in case of success, -1 in case of failure
+ */
+static int
+xmlHashGrow(xmlHashTablePtr table, int size) {
+ unsigned long key;
+ int oldsize, i;
+ xmlHashEntryPtr iter, next;
+ struct _xmlHashEntry *oldtable;
+#ifdef DEBUG_GROW
+ unsigned long nbElem = 0;
+#endif
+
+ if (table == NULL)
+ return(-1);
+ if (size < 8)
+ return(-1);
+ if (size > 8 * 2048)
+ return(-1);
+
+ oldsize = table->size;
+ oldtable = table->table;
+ if (oldtable == NULL)
+ return(-1);
+
+ table->table = xmlMalloc(size * sizeof(xmlHashEntry));
+ if (table->table == NULL) {
+ table->table = oldtable;
+ return(-1);
+ }
+ memset(table->table, 0, size * sizeof(xmlHashEntry));
+ table->size = size;
+
+ /* If the two loops are merged, there would be situations where
+ a new entry needs to allocated and data copied into it from
+ the main table. So instead, we run through the array twice, first
+ copying all the elements in the main array (where we can't get
+ conflicts) and then the rest, so we only free (and don't allocate)
+ */
+ for (i = 0; i < oldsize; i++) {
+ if (oldtable[i].valid == 0)
+ continue;
+ key = xmlHashComputeKey(table, oldtable[i].name, oldtable[i].name2,
+ oldtable[i].name3);
+ memcpy(&(table->table[key]), &(oldtable[i]), sizeof(xmlHashEntry));
+ table->table[key].next = NULL;
+ }
+
+ for (i = 0; i < oldsize; i++) {
+ iter = oldtable[i].next;
+ while (iter) {
+ next = iter->next;
+
+ /*
+ * put back the entry in the new table
+ */
+
+ key = xmlHashComputeKey(table, iter->name, iter->name2,
+ iter->name3);
+ if (table->table[key].valid == 0) {
+ memcpy(&(table->table[key]), iter, sizeof(xmlHashEntry));
+ table->table[key].next = NULL;
+ xmlFree(iter);
+ } else {
+ iter->next = table->table[key].next;
+ table->table[key].next = iter;
+ }
+
+#ifdef DEBUG_GROW
+ nbElem++;
+#endif
+
+ iter = next;
+ }
+ }
+
+ xmlFree(oldtable);
+
+#ifdef DEBUG_GROW
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlHashGrow : from %d to %d, %d elems\n", oldsize, size, nbElem);
+#endif
+
+ return(0);
+}
+
+/**
+ * xmlHashFree:
+ * @table: the hash table
+ * @f: the deallocator function for items in the hash
+ *
+ * Free the hash @table and its contents. The userdata is
+ * deallocated with @f if provided.
+ */
+void
+xmlHashFree(xmlHashTablePtr table, xmlHashDeallocator f) {
+ int i;
+ xmlHashEntryPtr iter;
+ xmlHashEntryPtr next;
+ int inside_table = 0;
+ int nbElems;
+
+ if (table == NULL)
+ return;
+ if (table->table) {
+ nbElems = table->nbElems;
+ for(i = 0; (i < table->size) && (nbElems > 0); i++) {
+ iter = &(table->table[i]);
+ if (iter->valid == 0)
+ continue;
+ inside_table = 1;
+ while (iter) {
+ next = iter->next;
+ if ((f != NULL) && (iter->payload != NULL))
+ f(iter->payload, iter->name);
+ if (iter->name)
+ xmlFree(iter->name);
+ if (iter->name2)
+ xmlFree(iter->name2);
+ if (iter->name3)
+ xmlFree(iter->name3);
+ iter->payload = NULL;
+ if (!inside_table)
+ xmlFree(iter);
+ nbElems--;
+ inside_table = 0;
+ iter = next;
+ }
+ inside_table = 0;
+ }
+ xmlFree(table->table);
+ }
+ xmlFree(table);
+}
+
+/**
+ * xmlHashAddEntry:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @userdata: a pointer to the userdata
+ *
+ * Add the @userdata to the hash @table. This can later be retrieved
+ * by using the @name. Duplicate names generate errors.
+ *
+ * Returns 0 the addition succeeded and -1 in case of error.
+ */
+int
+xmlHashAddEntry(xmlHashTablePtr table, const xmlChar *name, void *userdata) {
+ return(xmlHashAddEntry3(table, name, NULL, NULL, userdata));
+}
+
+/**
+ * xmlHashAddEntry2:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @name2: a second name of the userdata
+ * @userdata: a pointer to the userdata
+ *
+ * Add the @userdata to the hash @table. This can later be retrieved
+ * by using the (@name, @name2) tuple. Duplicate tuples generate errors.
+ *
+ * Returns 0 the addition succeeded and -1 in case of error.
+ */
+int
+xmlHashAddEntry2(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, void *userdata) {
+ return(xmlHashAddEntry3(table, name, name2, NULL, userdata));
+}
+
+/**
+ * xmlHashUpdateEntry:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @userdata: a pointer to the userdata
+ * @f: the deallocator function for replaced item (if any)
+ *
+ * Add the @userdata to the hash @table. This can later be retrieved
+ * by using the @name. Existing entry for this @name will be removed
+ * and freed with @f if found.
+ *
+ * Returns 0 the addition succeeded and -1 in case of error.
+ */
+int
+xmlHashUpdateEntry(xmlHashTablePtr table, const xmlChar *name,
+ void *userdata, xmlHashDeallocator f) {
+ return(xmlHashUpdateEntry3(table, name, NULL, NULL, userdata, f));
+}
+
+/**
+ * xmlHashUpdateEntry2:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @name2: a second name of the userdata
+ * @userdata: a pointer to the userdata
+ * @f: the deallocator function for replaced item (if any)
+ *
+ * Add the @userdata to the hash @table. This can later be retrieved
+ * by using the (@name, @name2) tuple. Existing entry for this tuple will
+ * be removed and freed with @f if found.
+ *
+ * Returns 0 the addition succeeded and -1 in case of error.
+ */
+int
+xmlHashUpdateEntry2(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, void *userdata,
+ xmlHashDeallocator f) {
+ return(xmlHashUpdateEntry3(table, name, name2, NULL, userdata, f));
+}
+
+/**
+ * xmlHashLookup:
+ * @table: the hash table
+ * @name: the name of the userdata
+ *
+ * Find the userdata specified by the @name.
+ *
+ * Returns the pointer to the userdata
+ */
+void *
+xmlHashLookup(xmlHashTablePtr table, const xmlChar *name) {
+ return(xmlHashLookup3(table, name, NULL, NULL));
+}
+
+/**
+ * xmlHashLookup2:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @name2: a second name of the userdata
+ *
+ * Find the userdata specified by the (@name, @name2) tuple.
+ *
+ * Returns the pointer to the userdata
+ */
+void *
+xmlHashLookup2(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2) {
+ return(xmlHashLookup3(table, name, name2, NULL));
+}
+
+/**
+ * xmlHashQLookup:
+ * @table: the hash table
+ * @prefix: the prefix of the userdata
+ * @name: the name of the userdata
+ *
+ * Find the userdata specified by the QName @prefix:@name/@name.
+ *
+ * Returns the pointer to the userdata
+ */
+void *
+xmlHashQLookup(xmlHashTablePtr table, const xmlChar *prefix,
+ const xmlChar *name) {
+ return(xmlHashQLookup3(table, prefix, name, NULL, NULL, NULL, NULL));
+}
+
+/**
+ * xmlHashQLookup2:
+ * @table: the hash table
+ * @prefix: the prefix of the userdata
+ * @name: the name of the userdata
+ * @prefix2: the second prefix of the userdata
+ * @name2: a second name of the userdata
+ *
+ * Find the userdata specified by the QNames tuple
+ *
+ * Returns the pointer to the userdata
+ */
+void *
+xmlHashQLookup2(xmlHashTablePtr table, const xmlChar *prefix,
+ const xmlChar *name, const xmlChar *prefix2,
+ const xmlChar *name2) {
+ return(xmlHashQLookup3(table, prefix, name, prefix2, name2, NULL, NULL));
+}
+
+/**
+ * xmlHashAddEntry3:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @name2: a second name of the userdata
+ * @name3: a third name of the userdata
+ * @userdata: a pointer to the userdata
+ *
+ * Add the @userdata to the hash @table. This can later be retrieved
+ * by using the tuple (@name, @name2, @name3). Duplicate entries generate
+ * errors.
+ *
+ * Returns 0 the addition succeeded and -1 in case of error.
+ */
+int
+xmlHashAddEntry3(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, const xmlChar *name3,
+ void *userdata) {
+ unsigned long key, len = 0;
+ xmlHashEntryPtr entry;
+ xmlHashEntryPtr insert;
+
+ if ((table == NULL) || name == NULL)
+ return(-1);
+
+ /*
+ * Check for duplicate and insertion location.
+ */
+ key = xmlHashComputeKey(table, name, name2, name3);
+ if (table->table[key].valid == 0) {
+ insert = NULL;
+ } else {
+ for (insert = &(table->table[key]); insert->next != NULL;
+ insert = insert->next) {
+ if ((xmlStrEqual(insert->name, name)) &&
+ (xmlStrEqual(insert->name2, name2)) &&
+ (xmlStrEqual(insert->name3, name3)))
+ return(-1);
+ len++;
+ }
+ if ((xmlStrEqual(insert->name, name)) &&
+ (xmlStrEqual(insert->name2, name2)) &&
+ (xmlStrEqual(insert->name3, name3)))
+ return(-1);
+ }
+
+ if (insert == NULL) {
+ entry = &(table->table[key]);
+ } else {
+ entry = xmlMalloc(sizeof(xmlHashEntry));
+ if (entry == NULL)
+ return(-1);
+ }
+
+ entry->name = xmlStrdup(name);
+ entry->name2 = xmlStrdup(name2);
+ entry->name3 = xmlStrdup(name3);
+ entry->payload = userdata;
+ entry->next = NULL;
+ entry->valid = 1;
+
+
+ if (insert != NULL)
+ insert->next = entry;
+
+ table->nbElems++;
+
+ if (len > MAX_HASH_LEN)
+ xmlHashGrow(table, MAX_HASH_LEN * table->size);
+
+ return(0);
+}
+
+/**
+ * xmlHashUpdateEntry3:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @name2: a second name of the userdata
+ * @name3: a third name of the userdata
+ * @userdata: a pointer to the userdata
+ * @f: the deallocator function for replaced item (if any)
+ *
+ * Add the @userdata to the hash @table. This can later be retrieved
+ * by using the tuple (@name, @name2, @name3). Existing entry for this tuple
+ * will be removed and freed with @f if found.
+ *
+ * Returns 0 the addition succeeded and -1 in case of error.
+ */
+int
+xmlHashUpdateEntry3(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, const xmlChar *name3,
+ void *userdata, xmlHashDeallocator f) {
+ unsigned long key;
+ xmlHashEntryPtr entry;
+ xmlHashEntryPtr insert;
+
+ if ((table == NULL) || name == NULL)
+ return(-1);
+
+ /*
+ * Check for duplicate and insertion location.
+ */
+ key = xmlHashComputeKey(table, name, name2, name3);
+ if (table->table[key].valid == 0) {
+ insert = NULL;
+ } else {
+ for (insert = &(table->table[key]); insert->next != NULL;
+ insert = insert->next) {
+ if ((xmlStrEqual(insert->name, name)) &&
+ (xmlStrEqual(insert->name2, name2)) &&
+ (xmlStrEqual(insert->name3, name3))) {
+ if (f)
+ f(insert->payload, insert->name);
+ insert->payload = userdata;
+ return(0);
+ }
+ }
+ if ((xmlStrEqual(insert->name, name)) &&
+ (xmlStrEqual(insert->name2, name2)) &&
+ (xmlStrEqual(insert->name3, name3))) {
+ if (f)
+ f(insert->payload, insert->name);
+ insert->payload = userdata;
+ return(0);
+ }
+ }
+
+ if (insert == NULL) {
+ entry = &(table->table[key]);
+ } else {
+ entry = xmlMalloc(sizeof(xmlHashEntry));
+ if (entry == NULL)
+ return(-1);
+ }
+
+ entry->name = xmlStrdup(name);
+ entry->name2 = xmlStrdup(name2);
+ entry->name3 = xmlStrdup(name3);
+ entry->payload = userdata;
+ entry->next = NULL;
+ entry->valid = 1;
+ table->nbElems++;
+
+
+ if (insert != NULL) {
+ insert->next = entry;
+ }
+ return(0);
+}
+
+/**
+ * xmlHashLookup3:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @name2: a second name of the userdata
+ * @name3: a third name of the userdata
+ *
+ * Find the userdata specified by the (@name, @name2, @name3) tuple.
+ *
+ * Returns the a pointer to the userdata
+ */
+void *
+xmlHashLookup3(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, const xmlChar *name3) {
+ unsigned long key;
+ xmlHashEntryPtr entry;
+
+ if (table == NULL)
+ return(NULL);
+ if (name == NULL)
+ return(NULL);
+ key = xmlHashComputeKey(table, name, name2, name3);
+ if (table->table[key].valid == 0)
+ return(NULL);
+ for (entry = &(table->table[key]); entry != NULL; entry = entry->next) {
+ if ((xmlStrEqual(entry->name, name)) &&
+ (xmlStrEqual(entry->name2, name2)) &&
+ (xmlStrEqual(entry->name3, name3)))
+ return(entry->payload);
+ }
+ return(NULL);
+}
+
+/**
+ * xmlHashQLookup3:
+ * @table: the hash table
+ * @prefix: the prefix of the userdata
+ * @name: the name of the userdata
+ * @prefix2: the second prefix of the userdata
+ * @name2: a second name of the userdata
+ * @prefix3: the third prefix of the userdata
+ * @name3: a third name of the userdata
+ *
+ * Find the userdata specified by the (@name, @name2, @name3) tuple.
+ *
+ * Returns the a pointer to the userdata
+ */
+void *
+xmlHashQLookup3(xmlHashTablePtr table,
+ const xmlChar *prefix, const xmlChar *name,
+ const xmlChar *prefix2, const xmlChar *name2,
+ const xmlChar *prefix3, const xmlChar *name3) {
+ unsigned long key;
+ xmlHashEntryPtr entry;
+
+ if (table == NULL)
+ return(NULL);
+ if (name == NULL)
+ return(NULL);
+ key = xmlHashComputeQKey(table, prefix, name, prefix2,
+ name2, prefix3, name3);
+ if (table->table[key].valid == 0)
+ return(NULL);
+ for (entry = &(table->table[key]); entry != NULL; entry = entry->next) {
+ if ((xmlStrQEqual(prefix, name, entry->name)) &&
+ (xmlStrQEqual(prefix2, name2, entry->name2)) &&
+ (xmlStrQEqual(prefix3, name3, entry->name3)))
+ return(entry->payload);
+ }
+ return(NULL);
+}
+
+typedef struct {
+ xmlHashScanner hashscanner;
+ void *data;
+} stubData;
+
+static void
+stubHashScannerFull (void *payload, void *data, const xmlChar *name,
+ const xmlChar *name2 ATTRIBUTE_UNUSED,
+ const xmlChar *name3 ATTRIBUTE_UNUSED) {
+ stubData *stubdata = (stubData *) data;
+ stubdata->hashscanner (payload, stubdata->data, (xmlChar *) name);
+}
+
+/**
+ * xmlHashScan:
+ * @table: the hash table
+ * @f: the scanner function for items in the hash
+ * @data: extra data passed to f
+ *
+ * Scan the hash @table and applied @f to each value.
+ */
+void
+xmlHashScan(xmlHashTablePtr table, xmlHashScanner f, void *data) {
+ stubData stubdata;
+ stubdata.data = data;
+ stubdata.hashscanner = f;
+ xmlHashScanFull (table, stubHashScannerFull, &stubdata);
+}
+
+/**
+ * xmlHashScanFull:
+ * @table: the hash table
+ * @f: the scanner function for items in the hash
+ * @data: extra data passed to f
+ *
+ * Scan the hash @table and applied @f to each value.
+ */
+void
+xmlHashScanFull(xmlHashTablePtr table, xmlHashScannerFull f, void *data) {
+ int i;
+ xmlHashEntryPtr iter;
+ xmlHashEntryPtr next;
+
+ if (table == NULL)
+ return;
+ if (f == NULL)
+ return;
+
+ if (table->table) {
+ for(i = 0; i < table->size; i++) {
+ if (table->table[i].valid == 0)
+ continue;
+ iter = &(table->table[i]);
+ while (iter) {
+ next = iter->next;
+ if ((f != NULL) && (iter->payload != NULL))
+ f(iter->payload, data, iter->name,
+ iter->name2, iter->name3);
+ iter = next;
+ }
+ }
+ }
+}
+
+/**
+ * xmlHashScan3:
+ * @table: the hash table
+ * @name: the name of the userdata or NULL
+ * @name2: a second name of the userdata or NULL
+ * @name3: a third name of the userdata or NULL
+ * @f: the scanner function for items in the hash
+ * @data: extra data passed to f
+ *
+ * Scan the hash @table and applied @f to each value matching
+ * (@name, @name2, @name3) tuple. If one of the names is null,
+ * the comparison is considered to match.
+ */
+void
+xmlHashScan3(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, const xmlChar *name3,
+ xmlHashScanner f, void *data) {
+ xmlHashScanFull3 (table, name, name2, name3,
+ (xmlHashScannerFull) f, data);
+}
+
+/**
+ * xmlHashScanFull3:
+ * @table: the hash table
+ * @name: the name of the userdata or NULL
+ * @name2: a second name of the userdata or NULL
+ * @name3: a third name of the userdata or NULL
+ * @f: the scanner function for items in the hash
+ * @data: extra data passed to f
+ *
+ * Scan the hash @table and applied @f to each value matching
+ * (@name, @name2, @name3) tuple. If one of the names is null,
+ * the comparison is considered to match.
+ */
+void
+xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, const xmlChar *name3,
+ xmlHashScannerFull f, void *data) {
+ int i;
+ xmlHashEntryPtr iter;
+ xmlHashEntryPtr next;
+
+ if (table == NULL)
+ return;
+ if (f == NULL)
+ return;
+
+ if (table->table) {
+ for(i = 0; i < table->size; i++) {
+ if (table->table[i].valid == 0)
+ continue;
+ iter = &(table->table[i]);
+ while (iter) {
+ next = iter->next;
+ if (((name == NULL) || (xmlStrEqual(name, iter->name))) &&
+ ((name2 == NULL) || (xmlStrEqual(name2, iter->name2))) &&
+ ((name3 == NULL) || (xmlStrEqual(name3, iter->name3))) &&
+ (iter->payload != NULL)) {
+ f(iter->payload, data, iter->name,
+ iter->name2, iter->name3);
+ }
+ iter = next;
+ }
+ }
+ }
+}
+
+/**
+ * xmlHashCopy:
+ * @table: the hash table
+ * @f: the copier function for items in the hash
+ *
+ * Scan the hash @table and applied @f to each value.
+ *
+ * Returns the new table or NULL in case of error.
+ */
+xmlHashTablePtr
+xmlHashCopy(xmlHashTablePtr table, xmlHashCopier f) {
+ int i;
+ xmlHashEntryPtr iter;
+ xmlHashEntryPtr next;
+ xmlHashTablePtr ret;
+
+ if (table == NULL)
+ return(NULL);
+ if (f == NULL)
+ return(NULL);
+
+ ret = xmlHashCreate(table->size);
+ if (table->table) {
+ for(i = 0; i < table->size; i++) {
+ if (table->table[i].valid == 0)
+ continue;
+ iter = &(table->table[i]);
+ while (iter) {
+ next = iter->next;
+ xmlHashAddEntry3(ret, iter->name, iter->name2,
+ iter->name3, f(iter->payload, iter->name));
+ iter = next;
+ }
+ }
+ }
+ ret->nbElems = table->nbElems;
+ return(ret);
+}
+
+/**
+ * xmlHashSize:
+ * @table: the hash table
+ *
+ * Query the number of elements installed in the hash @table.
+ *
+ * Returns the number of elements in the hash table or
+ * -1 in case of error
+ */
+int
+xmlHashSize(xmlHashTablePtr table) {
+ if (table == NULL)
+ return(-1);
+ return(table->nbElems);
+}
+
+/**
+ * xmlHashRemoveEntry:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @f: the deallocator function for removed item (if any)
+ *
+ * Find the userdata specified by the @name and remove
+ * it from the hash @table. Existing userdata for this tuple will be removed
+ * and freed with @f.
+ *
+ * Returns 0 if the removal succeeded and -1 in case of error or not found.
+ */
+int xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
+ xmlHashDeallocator f) {
+ return(xmlHashRemoveEntry3(table, name, NULL, NULL, f));
+}
+
+/**
+ * xmlHashRemoveEntry2:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @name2: a second name of the userdata
+ * @f: the deallocator function for removed item (if any)
+ *
+ * Find the userdata specified by the (@name, @name2) tuple and remove
+ * it from the hash @table. Existing userdata for this tuple will be removed
+ * and freed with @f.
+ *
+ * Returns 0 if the removal succeeded and -1 in case of error or not found.
+ */
+int
+xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, xmlHashDeallocator f) {
+ return(xmlHashRemoveEntry3(table, name, name2, NULL, f));
+}
+
+/**
+ * xmlHashRemoveEntry3:
+ * @table: the hash table
+ * @name: the name of the userdata
+ * @name2: a second name of the userdata
+ * @name3: a third name of the userdata
+ * @f: the deallocator function for removed item (if any)
+ *
+ * Find the userdata specified by the (@name, @name2, @name3) tuple and remove
+ * it from the hash @table. Existing userdata for this tuple will be removed
+ * and freed with @f.
+ *
+ * Returns 0 if the removal succeeded and -1 in case of error or not found.
+ */
+int
+xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, const xmlChar *name3, xmlHashDeallocator f) {
+ unsigned long key;
+ xmlHashEntryPtr entry;
+ xmlHashEntryPtr prev = NULL;
+
+ if (table == NULL || name == NULL)
+ return(-1);
+
+ key = xmlHashComputeKey(table, name, name2, name3);
+ if (table->table[key].valid == 0) {
+ return(-1);
+ } else {
+ for (entry = &(table->table[key]); entry != NULL; entry = entry->next) {
+ if (xmlStrEqual(entry->name, name) &&
+ xmlStrEqual(entry->name2, name2) &&
+ xmlStrEqual(entry->name3, name3)) {
+ if ((f != NULL) && (entry->payload != NULL))
+ f(entry->payload, entry->name);
+ entry->payload = NULL;
+ if(entry->name)
+ xmlFree(entry->name);
+ if(entry->name2)
+ xmlFree(entry->name2);
+ if(entry->name3)
+ xmlFree(entry->name3);
+ if(prev) {
+ prev->next = entry->next;
+ xmlFree(entry);
+ } else {
+ if (entry->next == NULL) {
+ entry->valid = 0;
+ } else {
+ entry = entry->next;
+ memcpy(&(table->table[key]), entry, sizeof(xmlHashEntry));
+ xmlFree(entry);
+ }
+ }
+ table->nbElems--;
+ return(0);
+ }
+ prev = entry;
+ }
+ return(-1);
+ }
+}
+
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644
index 0000000..7dbfaa5
--- /dev/null
+++ b/include/Makefile.am
@@ -0,0 +1,5 @@
+## Process this file with automake to produce Makefile.in
+SUBDIRS=libxml
+
+EXTRA_DIST = win32config.h wsockcompat.h
+
diff --git a/include/Makefile.in b/include/Makefile.in
new file mode 100644
index 0000000..87438c3
--- /dev/null
+++ b/include/Makefile.in
@@ -0,0 +1,547 @@
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = include
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+C14N_OBJ = @C14N_OBJ@
+CATALOG_OBJ = @CATALOG_OBJ@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_OBJ = @DEBUG_OBJ@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOCB_OBJ = @DOCB_OBJ@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FTP_OBJ = @FTP_OBJ@
+HAVE_ISINF = @HAVE_ISINF@
+HAVE_ISNAN = @HAVE_ISNAN@
+HTML_DIR = @HTML_DIR@
+HTML_OBJ = @HTML_OBJ@
+HTTP_OBJ = @HTTP_OBJ@
+ICONV_LIBS = @ICONV_LIBS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
+LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
+LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
+LIBXML_VERSION = @LIBXML_VERSION@
+LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
+LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MV = @MV@
+M_LIBS = @M_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATTERN_TEST = @PATTERN_TEST@
+PYTHON = @PYTHON@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
+PYTHON_SUBDIR = @PYTHON_SUBDIR@
+PYTHON_TESTS = @PYTHON_TESTS@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RDL_LIBS = @RDL_LIBS@
+READER_TEST = @READER_TEST@
+RELDATE = @RELDATE@
+RM = @RM@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STATIC_BINARIES = @STATIC_BINARIES@
+STRIP = @STRIP@
+TAR = @TAR@
+TEST_C14N = @TEST_C14N@
+TEST_CATALOG = @TEST_CATALOG@
+TEST_DEBUG = @TEST_DEBUG@
+TEST_HTML = @TEST_HTML@
+TEST_PHTML = @TEST_PHTML@
+TEST_PUSH = @TEST_PUSH@
+TEST_REGEXPS = @TEST_REGEXPS@
+TEST_SAX = @TEST_SAX@
+TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_THREADS = @TEST_THREADS@
+TEST_VALID = @TEST_VALID@
+TEST_VTIME = @TEST_VTIME@
+TEST_XINCLUDE = @TEST_XINCLUDE@
+TEST_XPATH = @TEST_XPATH@
+TEST_XPTR = @TEST_XPTR@
+THREADS_W32 = @THREADS_W32@
+THREAD_CFLAGS = @THREAD_CFLAGS@
+THREAD_LIBS = @THREAD_LIBS@
+U = @U@
+VERSION = @VERSION@
+WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
+WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
+WITH_C14N = @WITH_C14N@
+WITH_CATALOG = @WITH_CATALOG@
+WITH_DEBUG = @WITH_DEBUG@
+WITH_DOCB = @WITH_DOCB@
+WITH_FTP = @WITH_FTP@
+WITH_HTML = @WITH_HTML@
+WITH_HTTP = @WITH_HTTP@
+WITH_ICONV = @WITH_ICONV@
+WITH_ISO8859X = @WITH_ISO8859X@
+WITH_LEGACY = @WITH_LEGACY@
+WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
+WITH_OUTPUT = @WITH_OUTPUT@
+WITH_PATTERN = @WITH_PATTERN@
+WITH_PUSH = @WITH_PUSH@
+WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
+WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
+WITH_READER = @WITH_READER@
+WITH_REGEXPS = @WITH_REGEXPS@
+WITH_SAX1 = @WITH_SAX1@
+WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_THREADS = @WITH_THREADS@
+WITH_TREE = @WITH_TREE@
+WITH_TRIO = @WITH_TRIO@
+WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
+WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
+WITH_VALID = @WITH_VALID@
+WITH_WRITER = @WITH_WRITER@
+WITH_XINCLUDE = @WITH_XINCLUDE@
+WITH_XPATH = @WITH_XPATH@
+WITH_XPTR = @WITH_XPTR@
+XINCLUDE_OBJ = @XINCLUDE_OBJ@
+XML_CFLAGS = @XML_CFLAGS@
+XML_INCLUDEDIR = @XML_INCLUDEDIR@
+XML_LIBDIR = @XML_LIBDIR@
+XML_LIBS = @XML_LIBS@
+XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
+XPATH_OBJ = @XPATH_OBJ@
+XPTR_OBJ = @XPTR_OBJ@
+Z_CFLAGS = @Z_CFLAGS@
+Z_LIBS = @Z_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = libxml
+EXTRA_DIST = win32config.h wsockcompat.h
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu include/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if (etags --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ else \
+ include_option=--include; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || mkdir "$(distdir)/$$subdir" \
+ || exit 1; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="../$(top_distdir)" \
+ distdir="../$(distdir)/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-generic clean-libtool clean-recursive ctags \
+ ctags-recursive distclean distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-generic mostlyclean-libtool \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am
+
+# 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/include/libxml/DOCBparser.h b/include/libxml/DOCBparser.h
new file mode 100644
index 0000000..d30aaea
--- /dev/null
+++ b/include/libxml/DOCBparser.h
@@ -0,0 +1,90 @@
+/*
+ * Summary: old DocBook SGML parser
+ * Description: interface for a DocBook SGML non-verifying parser
+ * This code is DEPRECATED, and should not be used anymore.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __DOCB_PARSER_H__
+#define __DOCB_PARSER_H__
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+
+#ifndef IN_LIBXML
+#ifdef __GNUC__
+#warning "The DOCBparser module has been deprecated in libxml2-2.6.0"
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Most of the back-end structures from XML and SGML are shared.
+ */
+typedef xmlParserCtxt docbParserCtxt;
+typedef xmlParserCtxtPtr docbParserCtxtPtr;
+typedef xmlSAXHandler docbSAXHandler;
+typedef xmlSAXHandlerPtr docbSAXHandlerPtr;
+typedef xmlParserInput docbParserInput;
+typedef xmlParserInputPtr docbParserInputPtr;
+typedef xmlDocPtr docbDocPtr;
+
+/*
+ * There is only few public functions.
+ */
+XMLPUBFUN int XMLCALL
+ docbEncodeEntities(unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen, int quoteChar);
+
+XMLPUBFUN docbDocPtr XMLCALL
+ docbSAXParseDoc (xmlChar *cur,
+ const char *encoding,
+ docbSAXHandlerPtr sax,
+ void *userData);
+XMLPUBFUN docbDocPtr XMLCALL
+ docbParseDoc (xmlChar *cur,
+ const char *encoding);
+XMLPUBFUN docbDocPtr XMLCALL
+ docbSAXParseFile (const char *filename,
+ const char *encoding,
+ docbSAXHandlerPtr sax,
+ void *userData);
+XMLPUBFUN docbDocPtr XMLCALL
+ docbParseFile (const char *filename,
+ const char *encoding);
+
+/**
+ * Interfaces for the Push mode.
+ */
+XMLPUBFUN void XMLCALL
+ docbFreeParserCtxt (docbParserCtxtPtr ctxt);
+XMLPUBFUN docbParserCtxtPtr XMLCALL
+ docbCreatePushParserCtxt(docbSAXHandlerPtr sax,
+ void *user_data,
+ const char *chunk,
+ int size,
+ const char *filename,
+ xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL
+ docbParseChunk (docbParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ int terminate);
+XMLPUBFUN docbParserCtxtPtr XMLCALL
+ docbCreateFileParserCtxt(const char *filename,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ docbParseDocument (docbParserCtxtPtr ctxt);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __DOCB_PARSER_H__ */
diff --git a/include/libxml/HTMLparser.h b/include/libxml/HTMLparser.h
new file mode 100644
index 0000000..f39f0bb
--- /dev/null
+++ b/include/libxml/HTMLparser.h
@@ -0,0 +1,295 @@
+/*
+ * Summary: interface for an HTML 4.0 non-verifying parser
+ * Description: this module implements an HTML 4.0 non-verifying parser
+ * with API compatible with the XML parser ones. It should
+ * be able to parse "real world" HTML, even if severely
+ * broken from a specification point of view.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __HTML_PARSER_H__
+#define __HTML_PARSER_H__
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Most of the back-end structures from XML and HTML are shared.
+ */
+typedef xmlParserCtxt htmlParserCtxt;
+typedef xmlParserCtxtPtr htmlParserCtxtPtr;
+typedef xmlParserNodeInfo htmlParserNodeInfo;
+typedef xmlSAXHandler htmlSAXHandler;
+typedef xmlSAXHandlerPtr htmlSAXHandlerPtr;
+typedef xmlParserInput htmlParserInput;
+typedef xmlParserInputPtr htmlParserInputPtr;
+typedef xmlDocPtr htmlDocPtr;
+typedef xmlNodePtr htmlNodePtr;
+
+/*
+ * Internal description of an HTML element, representing HTML 4.01
+ * and XHTML 1.0 (which share the same structure).
+ */
+typedef struct _htmlElemDesc htmlElemDesc;
+typedef htmlElemDesc *htmlElemDescPtr;
+struct _htmlElemDesc {
+ const char *name; /* The tag name */
+ char startTag; /* Whether the start tag can be implied */
+ char endTag; /* Whether the end tag can be implied */
+ char saveEndTag; /* Whether the end tag should be saved */
+ char empty; /* Is this an empty element ? */
+ char depr; /* Is this a deprecated element ? */
+ char dtd; /* 1: only in Loose DTD, 2: only Frameset one */
+ char isinline; /* is this a block 0 or inline 1 element */
+ const char *desc; /* the description */
+
+/* NRK Jan.2003
+ * New fields encapsulating HTML structure
+ *
+ * Bugs:
+ * This is a very limited representation. It fails to tell us when
+ * an element *requires* subelements (we only have whether they're
+ * allowed or not), and it doesn't tell us where CDATA and PCDATA
+ * are allowed. Some element relationships are not fully represented:
+ * these are flagged with the word MODIFIER
+ */
+ const char** subelts; /* allowed sub-elements of this element */
+ const char* defaultsubelt; /* subelement for suggested auto-repair
+ if necessary or NULL */
+ const char** attrs_opt; /* Optional Attributes */
+ const char** attrs_depr; /* Additional deprecated attributes */
+ const char** attrs_req; /* Required attributes */
+};
+
+/*
+ * Internal description of an HTML entity.
+ */
+typedef struct _htmlEntityDesc htmlEntityDesc;
+typedef htmlEntityDesc *htmlEntityDescPtr;
+struct _htmlEntityDesc {
+ unsigned int value; /* the UNICODE value for the character */
+ const char *name; /* The entity name */
+ const char *desc; /* the description */
+};
+
+/*
+ * There is only few public functions.
+ */
+XMLPUBFUN const htmlElemDesc * XMLCALL
+ htmlTagLookup (const xmlChar *tag);
+XMLPUBFUN const htmlEntityDesc * XMLCALL
+ htmlEntityLookup(const xmlChar *name);
+XMLPUBFUN const htmlEntityDesc * XMLCALL
+ htmlEntityValueLookup(unsigned int value);
+
+XMLPUBFUN int XMLCALL
+ htmlIsAutoClosed(htmlDocPtr doc,
+ htmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ htmlAutoCloseTag(htmlDocPtr doc,
+ const xmlChar *name,
+ htmlNodePtr elem);
+XMLPUBFUN const htmlEntityDesc * XMLCALL
+ htmlParseEntityRef(htmlParserCtxtPtr ctxt,
+ const xmlChar **str);
+XMLPUBFUN int XMLCALL
+ htmlParseCharRef(htmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ htmlParseElement(htmlParserCtxtPtr ctxt);
+
+XMLPUBFUN htmlParserCtxtPtr XMLCALL
+ htmlCreateMemoryParserCtxt(const char *buffer,
+ int size);
+
+XMLPUBFUN int XMLCALL
+ htmlParseDocument(htmlParserCtxtPtr ctxt);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlSAXParseDoc (xmlChar *cur,
+ const char *encoding,
+ htmlSAXHandlerPtr sax,
+ void *userData);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlParseDoc (xmlChar *cur,
+ const char *encoding);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlSAXParseFile(const char *filename,
+ const char *encoding,
+ htmlSAXHandlerPtr sax,
+ void *userData);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlParseFile (const char *filename,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ UTF8ToHtml (unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen);
+XMLPUBFUN int XMLCALL
+ htmlEncodeEntities(unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen, int quoteChar);
+XMLPUBFUN int XMLCALL
+ htmlIsScriptAttribute(const xmlChar *name);
+XMLPUBFUN int XMLCALL
+ htmlHandleOmittedElem(int val);
+
+#ifdef LIBXML_PUSH_ENABLED
+/**
+ * Interfaces for the Push mode.
+ */
+XMLPUBFUN htmlParserCtxtPtr XMLCALL
+ htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *chunk,
+ int size,
+ const char *filename,
+ xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL
+ htmlParseChunk (htmlParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ int terminate);
+#endif /* LIBXML_PUSH_ENABLED */
+
+XMLPUBFUN void XMLCALL
+ htmlFreeParserCtxt (htmlParserCtxtPtr ctxt);
+
+/*
+ * New set of simpler/more flexible APIs
+ */
+/**
+ * xmlParserOption:
+ *
+ * This is the set of XML parser options that can be passed down
+ * to the xmlReadDoc() and similar calls.
+ */
+typedef enum {
+ 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 */
+} htmlParserOption;
+
+XMLPUBFUN void XMLCALL
+ htmlCtxtReset (htmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ htmlCtxtUseOptions (htmlParserCtxtPtr ctxt,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadDoc (const xmlChar *cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadFile (const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadMemory (const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadFd (int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlReadIO (xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadDoc (xmlParserCtxtPtr ctxt,
+ const xmlChar *cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadFile (xmlParserCtxtPtr ctxt,
+ const char *filename,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadMemory (xmlParserCtxtPtr ctxt,
+ const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadFd (xmlParserCtxtPtr ctxt,
+ int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlCtxtReadIO (xmlParserCtxtPtr ctxt,
+ xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+
+/* NRK/Jan2003: further knowledge of HTML structure
+ */
+typedef enum {
+ HTML_NA = 0 , /* something we don't check at all */
+ HTML_INVALID = 0x1 ,
+ HTML_DEPRECATED = 0x2 ,
+ HTML_VALID = 0x4 ,
+ HTML_REQUIRED = 0xc /* VALID bit set so ( & HTML_VALID ) is TRUE */
+} htmlStatus ;
+
+/* Using htmlElemDesc rather than name here, to emphasise the fact
+ that otherwise there's a lookup overhead
+*/
+XMLPUBFUN htmlStatus XMLCALL htmlAttrAllowed(const htmlElemDesc*, const xmlChar*, int) ;
+XMLPUBFUN int XMLCALL htmlElementAllowedHere(const htmlElemDesc*, const xmlChar*) ;
+XMLPUBFUN htmlStatus XMLCALL htmlElementStatusHere(const htmlElemDesc*, const htmlElemDesc*) ;
+XMLPUBFUN htmlStatus XMLCALL htmlNodeStatus(const htmlNodePtr, int) ;
+/**
+ * htmlDefaultSubelement:
+ * @elt: HTML element
+ *
+ * Returns the default subelement for this element
+ */
+#define htmlDefaultSubelement(elt) elt->defaultsubelt
+/**
+ * htmlElementAllowedHereDesc:
+ * @parent: HTML parent element
+ * @elt: HTML element
+ *
+ * Checks whether an HTML element description may be a
+ * direct child of the specified element.
+ *
+ * Returns 1 if allowed; 0 otherwise.
+ */
+#define htmlElementAllowedHereDesc(parent,elt) \
+ htmlElementAllowedHere((parent), (elt)->name)
+/**
+ * htmlRequiredAttrs:
+ * @elt: HTML element
+ *
+ * Returns the attributes required for the specified element.
+ */
+#define htmlRequiredAttrs(elt) (elt)->attrs_req
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HTML_PARSER_H__ */
diff --git a/include/libxml/HTMLtree.h b/include/libxml/HTMLtree.h
new file mode 100644
index 0000000..157aa67
--- /dev/null
+++ b/include/libxml/HTMLtree.h
@@ -0,0 +1,139 @@
+/*
+ * Summary: specific APIs to process HTML tree, especially serialization
+ * Description: this module implements a few function needed to process
+ * tree in an HTML specific way.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __HTML_TREE_H__
+#define __HTML_TREE_H__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/HTMLparser.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * HTML_TEXT_NODE:
+ *
+ * Macro. A text node in a HTML document is really implemented
+ * the same way as a text node in an XML document.
+ */
+#define HTML_TEXT_NODE XML_TEXT_NODE
+/**
+ * HTML_ENTITY_REF_NODE:
+ *
+ * Macro. An entity reference in a HTML document is really implemented
+ * the same way as an entity reference in an XML document.
+ */
+#define HTML_ENTITY_REF_NODE XML_ENTITY_REF_NODE
+/**
+ * HTML_COMMENT_NODE:
+ *
+ * Macro. A comment in a HTML document is really implemented
+ * the same way as a comment in an XML document.
+ */
+#define HTML_COMMENT_NODE XML_COMMENT_NODE
+/**
+ * HTML_PRESERVE_NODE:
+ *
+ * Macro. A preserved node in a HTML document is really implemented
+ * the same way as a CDATA section in an XML document.
+ */
+#define HTML_PRESERVE_NODE XML_CDATA_SECTION_NODE
+/**
+ * HTML_PI_NODE:
+ *
+ * Macro. A processing instruction in a HTML document is really implemented
+ * the same way as a processing instruction in an XML document.
+ */
+#define HTML_PI_NODE XML_PI_NODE
+
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlNewDoc (const xmlChar *URI,
+ const xmlChar *ExternalID);
+XMLPUBFUN htmlDocPtr XMLCALL
+ htmlNewDocNoDtD (const xmlChar *URI,
+ const xmlChar *ExternalID);
+XMLPUBFUN const xmlChar * XMLCALL
+ htmlGetMetaEncoding (htmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ htmlSetMetaEncoding (htmlDocPtr doc,
+ const xmlChar *encoding);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ htmlDocDumpMemory (xmlDocPtr cur,
+ xmlChar **mem,
+ int *size);
+XMLPUBFUN int XMLCALL
+ htmlDocDump (FILE *f,
+ xmlDocPtr cur);
+XMLPUBFUN int XMLCALL
+ htmlSaveFile (const char *filename,
+ xmlDocPtr cur);
+XMLPUBFUN int XMLCALL
+ htmlNodeDump (xmlBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur);
+XMLPUBFUN void XMLCALL
+ htmlNodeDumpFile (FILE *out,
+ xmlDocPtr doc,
+ xmlNodePtr cur);
+XMLPUBFUN int XMLCALL
+ htmlNodeDumpFileFormat (FILE *out,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ const char *encoding,
+ int format);
+XMLPUBFUN int XMLCALL
+ htmlSaveFileEnc (const char *filename,
+ xmlDocPtr cur,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ htmlSaveFileFormat (const char *filename,
+ xmlDocPtr cur,
+ const char *encoding,
+ int format);
+
+XMLPUBFUN void XMLCALL
+ htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ const char *encoding,
+ int format);
+XMLPUBFUN void XMLCALL
+ htmlDocContentDumpOutput(xmlOutputBufferPtr buf,
+ xmlDocPtr cur,
+ const char *encoding);
+XMLPUBFUN void XMLCALL
+ htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf,
+ xmlDocPtr cur,
+ const char *encoding,
+ int format);
+XMLPUBFUN void XMLCALL
+ htmlNodeDumpOutput (xmlOutputBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ const char *encoding);
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+XMLPUBFUN int XMLCALL
+ htmlIsBooleanAttr (const xmlChar *name);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HTML_TREE_H__ */
+
diff --git a/include/libxml/Makefile.am b/include/libxml/Makefile.am
new file mode 100644
index 0000000..70bf5f3
--- /dev/null
+++ b/include/libxml/Makefile.am
@@ -0,0 +1,55 @@
+## Process this file with automake to produce Makefile.in
+
+xmlincdir = $(includedir)/libxml2/libxml
+
+xmlinc_HEADERS = \
+ SAX.h \
+ entities.h \
+ encoding.h \
+ parser.h \
+ parserInternals.h \
+ xmlerror.h \
+ HTMLparser.h \
+ HTMLtree.h \
+ debugXML.h \
+ tree.h \
+ list.h \
+ hash.h \
+ xpath.h \
+ xpathInternals.h \
+ xpointer.h \
+ xinclude.h \
+ xmlIO.h \
+ xmlmemory.h \
+ nanohttp.h \
+ nanoftp.h \
+ uri.h \
+ valid.h \
+ xlink.h \
+ xmlversion.h \
+ DOCBparser.h \
+ catalog.h \
+ threads.h \
+ globals.h \
+ c14n.h \
+ xmlautomata.h \
+ xmlregexp.h \
+ xmlschemas.h \
+ schemasInternals.h \
+ xmlschemastypes.h \
+ xmlstring.h \
+ xmlunicode.h \
+ xmlreader.h \
+ relaxng.h \
+ dict.h \
+ SAX2.h \
+ xmlexports.h \
+ xmlwriter.h \
+ chvalid.h \
+ pattern.h \
+ xmlsave.h
+
+install-exec-hook:
+ $(mkinstalldirs) $(DESTDIR)$(xmlincdir)
+
+EXTRA_DIST = xmlversion.h.in
diff --git a/include/libxml/Makefile.in b/include/libxml/Makefile.in
new file mode 100644
index 0000000..416fa98
--- /dev/null
+++ b/include/libxml/Makefile.in
@@ -0,0 +1,530 @@
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = include/libxml
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/xmlversion.h.in $(xmlinc_HEADERS)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = xmlversion.h
+SOURCES =
+DIST_SOURCES =
+am__installdirs = $(DESTDIR)$(xmlincdir)
+xmlincHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(xmlinc_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+C14N_OBJ = @C14N_OBJ@
+CATALOG_OBJ = @CATALOG_OBJ@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_OBJ = @DEBUG_OBJ@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOCB_OBJ = @DOCB_OBJ@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FTP_OBJ = @FTP_OBJ@
+HAVE_ISINF = @HAVE_ISINF@
+HAVE_ISNAN = @HAVE_ISNAN@
+HTML_DIR = @HTML_DIR@
+HTML_OBJ = @HTML_OBJ@
+HTTP_OBJ = @HTTP_OBJ@
+ICONV_LIBS = @ICONV_LIBS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
+LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
+LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
+LIBXML_VERSION = @LIBXML_VERSION@
+LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
+LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MV = @MV@
+M_LIBS = @M_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATTERN_TEST = @PATTERN_TEST@
+PYTHON = @PYTHON@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
+PYTHON_SUBDIR = @PYTHON_SUBDIR@
+PYTHON_TESTS = @PYTHON_TESTS@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RDL_LIBS = @RDL_LIBS@
+READER_TEST = @READER_TEST@
+RELDATE = @RELDATE@
+RM = @RM@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STATIC_BINARIES = @STATIC_BINARIES@
+STRIP = @STRIP@
+TAR = @TAR@
+TEST_C14N = @TEST_C14N@
+TEST_CATALOG = @TEST_CATALOG@
+TEST_DEBUG = @TEST_DEBUG@
+TEST_HTML = @TEST_HTML@
+TEST_PHTML = @TEST_PHTML@
+TEST_PUSH = @TEST_PUSH@
+TEST_REGEXPS = @TEST_REGEXPS@
+TEST_SAX = @TEST_SAX@
+TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_THREADS = @TEST_THREADS@
+TEST_VALID = @TEST_VALID@
+TEST_VTIME = @TEST_VTIME@
+TEST_XINCLUDE = @TEST_XINCLUDE@
+TEST_XPATH = @TEST_XPATH@
+TEST_XPTR = @TEST_XPTR@
+THREADS_W32 = @THREADS_W32@
+THREAD_CFLAGS = @THREAD_CFLAGS@
+THREAD_LIBS = @THREAD_LIBS@
+U = @U@
+VERSION = @VERSION@
+WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
+WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
+WITH_C14N = @WITH_C14N@
+WITH_CATALOG = @WITH_CATALOG@
+WITH_DEBUG = @WITH_DEBUG@
+WITH_DOCB = @WITH_DOCB@
+WITH_FTP = @WITH_FTP@
+WITH_HTML = @WITH_HTML@
+WITH_HTTP = @WITH_HTTP@
+WITH_ICONV = @WITH_ICONV@
+WITH_ISO8859X = @WITH_ISO8859X@
+WITH_LEGACY = @WITH_LEGACY@
+WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
+WITH_OUTPUT = @WITH_OUTPUT@
+WITH_PATTERN = @WITH_PATTERN@
+WITH_PUSH = @WITH_PUSH@
+WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
+WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
+WITH_READER = @WITH_READER@
+WITH_REGEXPS = @WITH_REGEXPS@
+WITH_SAX1 = @WITH_SAX1@
+WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_THREADS = @WITH_THREADS@
+WITH_TREE = @WITH_TREE@
+WITH_TRIO = @WITH_TRIO@
+WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
+WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
+WITH_VALID = @WITH_VALID@
+WITH_WRITER = @WITH_WRITER@
+WITH_XINCLUDE = @WITH_XINCLUDE@
+WITH_XPATH = @WITH_XPATH@
+WITH_XPTR = @WITH_XPTR@
+XINCLUDE_OBJ = @XINCLUDE_OBJ@
+XML_CFLAGS = @XML_CFLAGS@
+XML_INCLUDEDIR = @XML_INCLUDEDIR@
+XML_LIBDIR = @XML_LIBDIR@
+XML_LIBS = @XML_LIBS@
+XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
+XPATH_OBJ = @XPATH_OBJ@
+XPTR_OBJ = @XPTR_OBJ@
+Z_CFLAGS = @Z_CFLAGS@
+Z_LIBS = @Z_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+xmlincdir = $(includedir)/libxml2/libxml
+xmlinc_HEADERS = \
+ SAX.h \
+ entities.h \
+ encoding.h \
+ parser.h \
+ parserInternals.h \
+ xmlerror.h \
+ HTMLparser.h \
+ HTMLtree.h \
+ debugXML.h \
+ tree.h \
+ list.h \
+ hash.h \
+ xpath.h \
+ xpathInternals.h \
+ xpointer.h \
+ xinclude.h \
+ xmlIO.h \
+ xmlmemory.h \
+ nanohttp.h \
+ nanoftp.h \
+ uri.h \
+ valid.h \
+ xlink.h \
+ xmlversion.h \
+ DOCBparser.h \
+ catalog.h \
+ threads.h \
+ globals.h \
+ c14n.h \
+ xmlautomata.h \
+ xmlregexp.h \
+ xmlschemas.h \
+ schemasInternals.h \
+ xmlschemastypes.h \
+ xmlstring.h \
+ xmlunicode.h \
+ xmlreader.h \
+ relaxng.h \
+ dict.h \
+ SAX2.h \
+ xmlexports.h \
+ xmlwriter.h \
+ chvalid.h \
+ pattern.h \
+ xmlsave.h
+
+EXTRA_DIST = xmlversion.h.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/libxml/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu include/libxml/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+xmlversion.h: $(top_builddir)/config.status $(srcdir)/xmlversion.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+install-xmlincHEADERS: $(xmlinc_HEADERS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(xmlincdir)
+ @list='$(xmlinc_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(xmlincHEADERS_INSTALL) $$d$$p $(DESTDIR)$(xmlincdir)/$$f"; \
+ $(xmlincHEADERS_INSTALL) $$d$$p $(DESTDIR)$(xmlincdir)/$$f; \
+ done
+
+uninstall-xmlincHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(xmlinc_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(xmlincdir)/$$f"; \
+ rm -f $(DESTDIR)$(xmlincdir)/$$f; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+ $(mkdir_p) $(DESTDIR)$(xmlincdir)
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-xmlincHEADERS
+
+install-exec-am:
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-xmlincHEADERS
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool ctags distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip \
+ install-xmlincHEADERS installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am \
+ uninstall-xmlincHEADERS
+
+
+install-exec-hook:
+ $(mkinstalldirs) $(DESTDIR)$(xmlincdir)
+# 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/include/libxml/SAX.h b/include/libxml/SAX.h
new file mode 100644
index 0000000..a305b69
--- /dev/null
+++ b/include/libxml/SAX.h
@@ -0,0 +1,165 @@
+/*
+ * Summary: Old SAX version 1 handler, deprecated
+ * Description: DEPRECATED set of SAX version 1 interfaces used to
+ * build the DOM tree.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SAX_H__
+#define __XML_SAX_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/xlink.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN const xmlChar * XMLCALL
+ getPublicId (void *ctx);
+XMLPUBFUN const xmlChar * XMLCALL
+ getSystemId (void *ctx);
+XMLPUBFUN void XMLCALL
+ setDocumentLocator (void *ctx,
+ xmlSAXLocatorPtr loc);
+
+XMLPUBFUN int XMLCALL
+ getLineNumber (void *ctx);
+XMLPUBFUN int XMLCALL
+ getColumnNumber (void *ctx);
+
+XMLPUBFUN int XMLCALL
+ isStandalone (void *ctx);
+XMLPUBFUN int XMLCALL
+ hasInternalSubset (void *ctx);
+XMLPUBFUN int XMLCALL
+ hasExternalSubset (void *ctx);
+
+XMLPUBFUN void XMLCALL
+ internalSubset (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN void XMLCALL
+ externalSubset (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ getEntity (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ getParameterEntity (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ resolveEntity (void *ctx,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+
+XMLPUBFUN void XMLCALL
+ entityDecl (void *ctx,
+ const xmlChar *name,
+ int type,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ xmlChar *content);
+XMLPUBFUN void XMLCALL
+ attributeDecl (void *ctx,
+ const xmlChar *elem,
+ const xmlChar *fullname,
+ int type,
+ int def,
+ const xmlChar *defaultValue,
+ xmlEnumerationPtr tree);
+XMLPUBFUN void XMLCALL
+ elementDecl (void *ctx,
+ const xmlChar *name,
+ int type,
+ xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL
+ notationDecl (void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+XMLPUBFUN void XMLCALL
+ unparsedEntityDecl (void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ const xmlChar *notationName);
+
+XMLPUBFUN void XMLCALL
+ startDocument (void *ctx);
+XMLPUBFUN void XMLCALL
+ endDocument (void *ctx);
+XMLPUBFUN void XMLCALL
+ attribute (void *ctx,
+ const xmlChar *fullname,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ startElement (void *ctx,
+ const xmlChar *fullname,
+ const xmlChar **atts);
+XMLPUBFUN void XMLCALL
+ endElement (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ reference (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ characters (void *ctx,
+ const xmlChar *ch,
+ int len);
+XMLPUBFUN void XMLCALL
+ ignorableWhitespace (void *ctx,
+ const xmlChar *ch,
+ int len);
+XMLPUBFUN void XMLCALL
+ processingInstruction (void *ctx,
+ const xmlChar *target,
+ const xmlChar *data);
+XMLPUBFUN void XMLCALL
+ globalNamespace (void *ctx,
+ const xmlChar *href,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ setNamespace (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlNsPtr XMLCALL
+ getNamespace (void *ctx);
+XMLPUBFUN int XMLCALL
+ checkNamespace (void *ctx,
+ xmlChar *nameSpace);
+XMLPUBFUN void XMLCALL
+ namespaceDecl (void *ctx,
+ const xmlChar *href,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ comment (void *ctx,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ cdataBlock (void *ctx,
+ const xmlChar *value,
+ int len);
+
+XMLPUBFUN void XMLCALL
+ initxmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr,
+ int warning);
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN void XMLCALL
+ inithtmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr);
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN void XMLCALL
+ initdocbDefaultSAXHandler (xmlSAXHandlerV1 *hdlr);
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_SAX_H__ */
diff --git a/include/libxml/SAX2.h b/include/libxml/SAX2.h
new file mode 100644
index 0000000..f5cc53c
--- /dev/null
+++ b/include/libxml/SAX2.h
@@ -0,0 +1,188 @@
+/*
+ * Summary: SAX2 parser interface used to build the DOM tree
+ * Description: those are the default SAX2 interfaces used by
+ * the library when building DOM tree.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SAX2_H__
+#define __XML_SAX2_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/xlink.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlSAX2GetPublicId (void *ctx);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlSAX2GetSystemId (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlSAX2SetDocumentLocator (void *ctx,
+ xmlSAXLocatorPtr loc);
+
+XMLPUBFUN int XMLCALL
+ xmlSAX2GetLineNumber (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSAX2GetColumnNumber (void *ctx);
+
+XMLPUBFUN int XMLCALL
+ xmlSAX2IsStandalone (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSAX2HasInternalSubset (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSAX2HasExternalSubset (void *ctx);
+
+XMLPUBFUN void XMLCALL
+ xmlSAX2InternalSubset (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN void XMLCALL
+ xmlSAX2ExternalSubset (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlSAX2GetEntity (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlSAX2GetParameterEntity (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlSAX2ResolveEntity (void *ctx,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+
+XMLPUBFUN void XMLCALL
+ xmlSAX2EntityDecl (void *ctx,
+ const xmlChar *name,
+ int type,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ xmlChar *content);
+XMLPUBFUN void XMLCALL
+ xmlSAX2AttributeDecl (void *ctx,
+ const xmlChar *elem,
+ const xmlChar *fullname,
+ int type,
+ int def,
+ const xmlChar *defaultValue,
+ xmlEnumerationPtr tree);
+XMLPUBFUN void XMLCALL
+ xmlSAX2ElementDecl (void *ctx,
+ const xmlChar *name,
+ int type,
+ xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL
+ xmlSAX2NotationDecl (void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+XMLPUBFUN void XMLCALL
+ xmlSAX2UnparsedEntityDecl (void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ const xmlChar *notationName);
+
+XMLPUBFUN void XMLCALL
+ xmlSAX2StartDocument (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlSAX2EndDocument (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlSAX2StartElement (void *ctx,
+ const xmlChar *fullname,
+ const xmlChar **atts);
+XMLPUBFUN void XMLCALL
+ xmlSAX2EndElement (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ xmlSAX2StartElementNs (void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI,
+ int nb_namespaces,
+ const xmlChar **namespaces,
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes);
+XMLPUBFUN void XMLCALL
+ xmlSAX2EndElementNs (void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI);
+XMLPUBFUN void XMLCALL
+ xmlSAX2Reference (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ xmlSAX2Characters (void *ctx,
+ const xmlChar *ch,
+ int len);
+XMLPUBFUN void XMLCALL
+ xmlSAX2IgnorableWhitespace (void *ctx,
+ const xmlChar *ch,
+ int len);
+XMLPUBFUN void XMLCALL
+ xmlSAX2ProcessingInstruction (void *ctx,
+ const xmlChar *target,
+ const xmlChar *data);
+XMLPUBFUN void XMLCALL
+ xmlSAX2GlobalNamespace (void *ctx,
+ const xmlChar *href,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ xmlSAX2SetNamespace (void *ctx,
+ const xmlChar *name);
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlSAX2GetNamespace (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSAX2CheckNamespace (void *ctx,
+ xmlChar *nameSpace);
+XMLPUBFUN void XMLCALL
+ xmlSAX2NamespaceDecl (void *ctx,
+ const xmlChar *href,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ xmlSAX2Comment (void *ctx,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ xmlSAX2CDataBlock (void *ctx,
+ const xmlChar *value,
+ int len);
+
+XMLPUBFUN int XMLCALL
+ xmlSAXDefaultVersion (int version);
+
+XMLPUBFUN int XMLCALL
+ xmlSAXVersion (xmlSAXHandler *hdlr,
+ int version);
+XMLPUBFUN void XMLCALL
+ xmlSAX2InitDefaultSAXHandler (xmlSAXHandler *hdlr,
+ int warning);
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr);
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr);
+#endif
+XMLPUBFUN void XMLCALL
+ xmlDefaultSAXHandlerInit (void);
+XMLPUBFUN void XMLCALL
+ htmlDefaultSAXHandlerInit (void);
+XMLPUBFUN void XMLCALL
+ docbDefaultSAXHandlerInit (void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_SAX2_H__ */
diff --git a/include/libxml/c14n.h b/include/libxml/c14n.h
new file mode 100644
index 0000000..4bc441c
--- /dev/null
+++ b/include/libxml/c14n.h
@@ -0,0 +1,103 @@
+/*
+ * Summary: Provide Canonical XML and Exclusive XML Canonicalization
+ * Description: the c14n modules provides a
+ *
+ * "Canonical XML" implementation
+ * http://www.w3.org/TR/xml-c14n
+ *
+ * and an
+ *
+ * "Exclusive XML Canonicalization" implementation
+ * http://www.w3.org/TR/xml-exc-c14n
+
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Aleksey Sanin <aleksey@aleksey.com>
+ */
+#ifndef __XML_C14N_H__
+#define __XML_C14N_H__
+#ifdef LIBXML_OUTPUT_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+/*
+ * XML Canonicazation
+ * http://www.w3.org/TR/xml-c14n
+ *
+ * Exclusive XML Canonicazation
+ * http://www.w3.org/TR/xml-exc-c14n
+ *
+ * Canonical form of an XML document could be created if and only if
+ * a) default attributes (if any) are added to all nodes
+ * b) all character and parsed entity references are resolved
+ * In order to achive this in libxml2 the document MUST be loaded with
+ * following global setings:
+ *
+ * xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
+ * xmlSubstituteEntitiesDefault(1);
+ *
+ * or corresponding parser context setting:
+ * xmlParserCtxtPtr ctxt;
+ *
+ * ...
+ * ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
+ * ctxt->replaceEntities = 1;
+ * ...
+ */
+
+
+XMLPUBFUN int XMLCALL
+ xmlC14NDocSaveTo (xmlDocPtr doc,
+ xmlNodeSetPtr nodes,
+ int exclusive,
+ xmlChar **inclusive_ns_prefixes,
+ int with_comments,
+ xmlOutputBufferPtr buf);
+
+XMLPUBFUN int XMLCALL
+ xmlC14NDocDumpMemory (xmlDocPtr doc,
+ xmlNodeSetPtr nodes,
+ int exclusive,
+ xmlChar **inclusive_ns_prefixes,
+ int with_comments,
+ xmlChar **doc_txt_ptr);
+
+XMLPUBFUN int XMLCALL
+ xmlC14NDocSave (xmlDocPtr doc,
+ xmlNodeSetPtr nodes,
+ int exclusive,
+ xmlChar **inclusive_ns_prefixes,
+ int with_comments,
+ const char* filename,
+ int compression);
+
+
+/**
+ * This is the core C14N function
+ */
+typedef int (*xmlC14NIsVisibleCallback) (void* user_data,
+ xmlNodePtr node,
+ xmlNodePtr parent);
+
+XMLPUBFUN int XMLCALL
+ xmlC14NExecute (xmlDocPtr doc,
+ xmlC14NIsVisibleCallback is_visible_callback,
+ void* user_data,
+ int exclusive,
+ xmlChar **inclusive_ns_prefixes,
+ int with_comments,
+ xmlOutputBufferPtr buf);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+#endif /* __XML_C14N_H__ */
+
diff --git a/include/libxml/catalog.h b/include/libxml/catalog.h
new file mode 100644
index 0000000..2996330
--- /dev/null
+++ b/include/libxml/catalog.h
@@ -0,0 +1,181 @@
+/**
+ * Summary: interfaces to the Catalog handling system
+ * Description: the catalog module implements the support for
+ * XML Catalogs and SGML catalogs
+ *
+ * SGML Open Technical Resolution TR9401:1997.
+ * http://www.jclark.com/sp/catalog.htm
+ *
+ * XML Catalogs Working Draft 06 August 2001
+ * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_CATALOG_H__
+#define __XML_CATALOG_H__
+
+#include <stdio.h>
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlstring.h>
+
+#ifdef LIBXML_CATALOG_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * XML_CATALOGS_NAMESPACE:
+ *
+ * The namespace for the XML Catalogs elements.
+ */
+#define XML_CATALOGS_NAMESPACE \
+ (const xmlChar *) "urn:oasis:names:tc:entity:xmlns:xml:catalog"
+/**
+ * XML_CATALOG_PI:
+ *
+ * The specific XML Catalog Processing Instuction name.
+ */
+#define XML_CATALOG_PI \
+ (const xmlChar *) "oasis-xml-catalog"
+
+/*
+ * The API is voluntarily limited to general cataloging.
+ */
+typedef enum {
+ XML_CATA_PREFER_NONE = 0,
+ XML_CATA_PREFER_PUBLIC = 1,
+ XML_CATA_PREFER_SYSTEM
+} xmlCatalogPrefer;
+
+typedef enum {
+ XML_CATA_ALLOW_NONE = 0,
+ XML_CATA_ALLOW_GLOBAL = 1,
+ XML_CATA_ALLOW_DOCUMENT = 2,
+ XML_CATA_ALLOW_ALL = 3
+} xmlCatalogAllow;
+
+typedef struct _xmlCatalog xmlCatalog;
+typedef xmlCatalog *xmlCatalogPtr;
+
+/*
+ * Operations on a given catalog.
+ */
+XMLPUBFUN xmlCatalogPtr XMLCALL
+ xmlNewCatalog (int sgml);
+XMLPUBFUN xmlCatalogPtr XMLCALL
+ xmlLoadACatalog (const char *filename);
+XMLPUBFUN xmlCatalogPtr XMLCALL
+ xmlLoadSGMLSuperCatalog (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlConvertSGMLCatalog (xmlCatalogPtr catal);
+XMLPUBFUN int XMLCALL
+ xmlACatalogAdd (xmlCatalogPtr catal,
+ const xmlChar *type,
+ const xmlChar *orig,
+ const xmlChar *replace);
+XMLPUBFUN int XMLCALL
+ xmlACatalogRemove (xmlCatalogPtr catal,
+ const xmlChar *value);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlACatalogResolve (xmlCatalogPtr catal,
+ const xmlChar *pubID,
+ const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlACatalogResolveSystem(xmlCatalogPtr catal,
+ const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlACatalogResolvePublic(xmlCatalogPtr catal,
+ const xmlChar *pubID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlACatalogResolveURI (xmlCatalogPtr catal,
+ const xmlChar *URI);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlACatalogDump (xmlCatalogPtr catal,
+ FILE *out);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlFreeCatalog (xmlCatalogPtr catal);
+XMLPUBFUN int XMLCALL
+ xmlCatalogIsEmpty (xmlCatalogPtr catal);
+
+/*
+ * Global operations.
+ */
+XMLPUBFUN void XMLCALL
+ xmlInitializeCatalog (void);
+XMLPUBFUN int XMLCALL
+ xmlLoadCatalog (const char *filename);
+XMLPUBFUN void XMLCALL
+ xmlLoadCatalogs (const char *paths);
+XMLPUBFUN void XMLCALL
+ xmlCatalogCleanup (void);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlCatalogDump (FILE *out);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogResolve (const xmlChar *pubID,
+ const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogResolveSystem (const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogResolvePublic (const xmlChar *pubID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogResolveURI (const xmlChar *URI);
+XMLPUBFUN int XMLCALL
+ xmlCatalogAdd (const xmlChar *type,
+ const xmlChar *orig,
+ const xmlChar *replace);
+XMLPUBFUN int XMLCALL
+ xmlCatalogRemove (const xmlChar *value);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseCatalogFile (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlCatalogConvert (void);
+
+/*
+ * Strictly minimal interfaces for per-document catalogs used
+ * by the parser.
+ */
+XMLPUBFUN void XMLCALL
+ xmlCatalogFreeLocal (void *catalogs);
+XMLPUBFUN void * XMLCALL
+ xmlCatalogAddLocal (void *catalogs,
+ const xmlChar *URL);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogLocalResolve (void *catalogs,
+ const xmlChar *pubID,
+ const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCatalogLocalResolveURI(void *catalogs,
+ const xmlChar *URI);
+/*
+ * Preference settings.
+ */
+XMLPUBFUN int XMLCALL
+ xmlCatalogSetDebug (int level);
+XMLPUBFUN xmlCatalogPrefer XMLCALL
+ xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer);
+XMLPUBFUN void XMLCALL
+ xmlCatalogSetDefaults (xmlCatalogAllow allow);
+XMLPUBFUN xmlCatalogAllow XMLCALL
+ xmlCatalogGetDefaults (void);
+
+
+/* DEPRECATED interfaces */
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlCatalogGetSystem (const xmlChar *sysID);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlCatalogGetPublic (const xmlChar *pubID);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* LIBXML_CATALOG_ENABLED */
+#endif /* __XML_CATALOG_H__ */
diff --git a/include/libxml/chvalid.h b/include/libxml/chvalid.h
new file mode 100644
index 0000000..6301a91
--- /dev/null
+++ b/include/libxml/chvalid.h
@@ -0,0 +1,230 @@
+/*
+ * Summary: Unicode character range checking
+ * Description: this module exports interfaces for the character
+ * range validation APIs
+ *
+ * This file is automatically generated from the cvs source
+ * definition files using the genChRanges.py Python script
+ *
+ * Generation date: Tue Nov 18 08:14:21 2003
+ * Sources: chvalid.def
+ * Author: William Brack <wbrack@mmm.com.hk>
+ */
+
+#ifndef __XML_CHVALID_H__
+#define __XML_CHVALID_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Define our typedefs and structures
+ *
+ */
+typedef struct _xmlChSRange xmlChSRange;
+typedef xmlChSRange *xmlChSRangePtr;
+struct _xmlChSRange {
+ unsigned short low;
+ unsigned short high;
+};
+
+typedef struct _xmlChLRange xmlChLRange;
+typedef xmlChLRange *xmlChLRangePtr;
+struct _xmlChLRange {
+ unsigned int low;
+ unsigned int high;
+};
+
+typedef struct _xmlChRangeGroup xmlChRangeGroup;
+typedef xmlChRangeGroup *xmlChRangeGroupPtr;
+struct _xmlChRangeGroup {
+ int nbShortRange;
+ int nbLongRange;
+ xmlChSRangePtr shortRange; /* points to an array of ranges */
+ xmlChLRangePtr longRange;
+};
+
+/**
+ * Range checking routine
+ */
+XMLPUBFUN int XMLCALL
+ xmlCharInRange(unsigned int val, const xmlChRangeGroupPtr group);
+
+
+/**
+ * xmlIsBaseChar_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBaseChar_ch(c) (((0x41 <= (c)) && ((c) <= 0x5a)) || \
+ ((0x61 <= (c)) && ((c) <= 0x7a)) || \
+ ((0xc0 <= (c)) && ((c) <= 0xd6)) || \
+ ((0xd8 <= (c)) && ((c) <= 0xf6)) || \
+ (0xf8 <= (c)))
+
+/**
+ * xmlIsBaseCharQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBaseCharQ(c) (((c) < 0x100) ? \
+ xmlIsBaseChar_ch((c)) : \
+ xmlCharInRange((c), &xmlIsBaseCharGroup))
+
+XMLPUBVAR xmlChRangeGroup xmlIsBaseCharGroup;
+
+/**
+ * xmlIsBlank_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBlank_ch(c) (((c) == 0x20) || \
+ ((0x9 <= (c)) && ((c) <= 0xa)) || \
+ ((c) == 0xd))
+
+/**
+ * xmlIsBlankQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBlankQ(c) (((c) < 0x100) ? \
+ xmlIsBlank_ch((c)) : 0)
+
+
+/**
+ * xmlIsChar_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsChar_ch(c) (((0x9 <= (c)) && ((c) <= 0xa)) || \
+ ((c) == 0xd) || \
+ (0x20 <= (c)))
+
+/**
+ * xmlIsCharQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsCharQ(c) (((c) < 0x100) ? \
+ xmlIsChar_ch((c)) :\
+ (((0x100 <= (c)) && ((c) <= 0xd7ff)) || \
+ ((0xe000 <= (c)) && ((c) <= 0xfffd)) || \
+ ((0x10000 <= (c)) && ((c) <= 0x10ffff))))
+
+XMLPUBVAR xmlChRangeGroup xmlIsCharGroup;
+
+/**
+ * xmlIsCombiningQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsCombiningQ(c) (((c) < 0x100) ? \
+ 0 : \
+ xmlCharInRange((c), &xmlIsCombiningGroup))
+
+XMLPUBVAR xmlChRangeGroup xmlIsCombiningGroup;
+
+/**
+ * xmlIsDigit_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsDigit_ch(c) (((0x30 <= (c)) && ((c) <= 0x39)))
+
+/**
+ * xmlIsDigitQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsDigitQ(c) (((c) < 0x100) ? \
+ xmlIsDigit_ch((c)) : \
+ xmlCharInRange((c), &xmlIsDigitGroup))
+
+XMLPUBVAR xmlChRangeGroup xmlIsDigitGroup;
+
+/**
+ * xmlIsExtender_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsExtender_ch(c) (((c) == 0xb7))
+
+/**
+ * xmlIsExtenderQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsExtenderQ(c) (((c) < 0x100) ? \
+ xmlIsExtender_ch((c)) : \
+ xmlCharInRange((c), &xmlIsExtenderGroup))
+
+XMLPUBVAR xmlChRangeGroup xmlIsExtenderGroup;
+
+/**
+ * xmlIsIdeographicQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsIdeographicQ(c) (((c) < 0x100) ? \
+ 0 :\
+ (((0x4e00 <= (c)) && ((c) <= 0x9fa5)) || \
+ ((c) == 0x3007) || \
+ ((0x3021 <= (c)) && ((c) <= 0x3029))))
+
+XMLPUBVAR xmlChRangeGroup xmlIsIdeographicGroup;
+XMLPUBVAR unsigned char xmlIsPubidChar_tab[256];
+
+/**
+ * xmlIsPubidChar_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsPubidChar_ch(c) (xmlIsPubidChar_tab[(c)])
+
+/**
+ * xmlIsPubidCharQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsPubidCharQ(c) (((c) < 0x100) ? \
+ xmlIsPubidChar_ch((c)) : 0)
+
+XMLPUBFUN int XMLCALL
+ xmlIsBaseChar(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsBlank(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsChar(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsCombining(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsDigit(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsExtender(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsIdeographic(unsigned int ch);
+XMLPUBFUN int XMLCALL
+ xmlIsPubidChar(unsigned int ch);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_CHVALID_H__ */
diff --git a/include/libxml/debugXML.h b/include/libxml/debugXML.h
new file mode 100644
index 0000000..85966e5
--- /dev/null
+++ b/include/libxml/debugXML.h
@@ -0,0 +1,196 @@
+/*
+ * Summary: Tree debugging APIs
+ * Description: Interfaces to a set of routines used for debugging the tree
+ * produced by the XML parser.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __DEBUG_XML__
+#define __DEBUG_XML__
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_DEBUG_ENABLED
+
+#include <libxml/xpath.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The standard Dump routines.
+ */
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpString (FILE *output,
+ const xmlChar *str);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpAttr (FILE *output,
+ xmlAttrPtr attr,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpAttrList (FILE *output,
+ xmlAttrPtr attr,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpOneNode (FILE *output,
+ xmlNodePtr node,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpNode (FILE *output,
+ xmlNodePtr node,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpNodeList (FILE *output,
+ xmlNodePtr node,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpDocumentHead(FILE *output,
+ xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpDocument (FILE *output,
+ xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpDTD (FILE *output,
+ xmlDtdPtr dtd);
+XMLPUBFUN void XMLCALL
+ xmlDebugDumpEntities (FILE *output,
+ xmlDocPtr doc);
+
+XMLPUBFUN void XMLCALL
+ xmlLsOneNode (FILE *output, xmlNodePtr node);
+XMLPUBFUN int XMLCALL
+ xmlLsCountNode (xmlNodePtr node);
+
+XMLPUBFUN const char * XMLCALL
+ xmlBoolToText (int boolval);
+
+/****************************************************************
+ * *
+ * The XML shell related structures and functions *
+ * *
+ ****************************************************************/
+
+/**
+ * xmlShellReadlineFunc:
+ * @prompt: a string prompt
+ *
+ * This is a generic signature for the XML shell input function.
+ *
+ * Returns a string which will be freed by the Shell.
+ */
+typedef char * (* xmlShellReadlineFunc)(char *prompt);
+
+/**
+ * xmlShellCtxt:
+ *
+ * A debugging shell context.
+ * TODO: add the defined function tables.
+ */
+typedef struct _xmlShellCtxt xmlShellCtxt;
+typedef xmlShellCtxt *xmlShellCtxtPtr;
+struct _xmlShellCtxt {
+ char *filename;
+ xmlDocPtr doc;
+ xmlNodePtr node;
+ xmlXPathContextPtr pctxt;
+ int loaded;
+ FILE *output;
+ xmlShellReadlineFunc input;
+};
+
+/**
+ * xmlShellCmd:
+ * @ctxt: a shell context
+ * @arg: a string argument
+ * @node: a first node
+ * @node2: a second node
+ *
+ * This is a generic signature for the XML shell functions.
+ *
+ * Returns an int, negative returns indicating errors.
+ */
+typedef int (* xmlShellCmd) (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+
+XMLPUBFUN void XMLCALL
+ xmlShellPrintXPathError (int errorType,
+ const char *arg);
+XMLPUBFUN void XMLCALL
+ xmlShellPrintNode (xmlNodePtr node);
+XMLPUBFUN void XMLCALL
+ xmlShellPrintXPathResult(xmlXPathObjectPtr list);
+XMLPUBFUN int XMLCALL
+ xmlShellList (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellBase (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellDir (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellCat (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellLoad (xmlShellCtxtPtr ctxt,
+ char *filename,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlShellWrite (xmlShellCtxtPtr ctxt,
+ char *filename,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellSave (xmlShellCtxtPtr ctxt,
+ char *filename,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN int XMLCALL
+ xmlShellValidate (xmlShellCtxtPtr ctxt,
+ char *dtd,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellDu (xmlShellCtxtPtr ctxt,
+ char *arg,
+ xmlNodePtr tree,
+ xmlNodePtr node2);
+XMLPUBFUN int XMLCALL
+ xmlShellPwd (xmlShellCtxtPtr ctxt,
+ char *buffer,
+ xmlNodePtr node,
+ xmlNodePtr node2);
+
+/*
+ * The Shell interface.
+ */
+XMLPUBFUN void XMLCALL
+ xmlShell (xmlDocPtr doc,
+ char *filename,
+ xmlShellReadlineFunc input,
+ FILE *output);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_DEBUG_ENABLED */
+#endif /* __DEBUG_XML__ */
diff --git a/include/libxml/dict.h b/include/libxml/dict.h
new file mode 100644
index 0000000..874ba3d
--- /dev/null
+++ b/include/libxml/dict.h
@@ -0,0 +1,58 @@
+/*
+ * Summary: string dictionnary
+ * Description: dictionary of reusable strings, just used to avoid allocation
+ * and freeing operations.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_DICT_H__
+#define __XML_DICT_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The dictionnary.
+ */
+typedef struct _xmlDict xmlDict;
+typedef xmlDict *xmlDictPtr;
+
+/*
+ * Constructor and destructor.
+ */
+XMLPUBFUN xmlDictPtr XMLCALL
+ xmlDictCreate (void);
+XMLPUBFUN xmlDictPtr XMLCALL
+ xmlDictCreateSub(xmlDictPtr sub);
+XMLPUBFUN int XMLCALL
+ xmlDictReference(xmlDictPtr dict);
+XMLPUBFUN void XMLCALL
+ xmlDictFree (xmlDictPtr dict);
+
+/*
+ * Lookup of entry in the dictionnary.
+ */
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlDictLookup (xmlDictPtr dict,
+ const xmlChar *name,
+ int len);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlDictQLookup (xmlDictPtr dict,
+ const xmlChar *prefix,
+ const xmlChar *name);
+XMLPUBFUN int XMLCALL
+ xmlDictOwns (xmlDictPtr dict,
+ const xmlChar *str);
+XMLPUBFUN int XMLCALL
+ xmlDictSize (xmlDictPtr dict);
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! __XML_DICT_H__ */
diff --git a/include/libxml/encoding.h b/include/libxml/encoding.h
new file mode 100644
index 0000000..76c5bbc
--- /dev/null
+++ b/include/libxml/encoding.h
@@ -0,0 +1,224 @@
+/*
+ * Summary: interface for the encoding conversion functions
+ * Description: interface for the encoding conversion functions needed for
+ * XML basic encoding and iconv() support.
+ *
+ * Related specs are
+ * rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies
+ * [ISO-10646] UTF-8 and UTF-16 in Annexes
+ * [ISO-8859-1] ISO Latin-1 characters codes.
+ * [UNICODE] The Unicode Consortium, "The Unicode Standard --
+ * Worldwide Character Encoding -- Version 1.0", Addison-
+ * Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is
+ * described in Unicode Technical Report #4.
+ * [US-ASCII] Coded Character Set--7-bit American Standard Code for
+ * Information Interchange, ANSI X3.4-1986.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_CHAR_ENCODING_H__
+#define __XML_CHAR_ENCODING_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_ICONV_ENABLED
+#include <iconv.h>
+#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * xmlCharEncoding:
+ *
+ * Predefined values for some standard encodings.
+ * Libxml does not do beforehand translation on UTF8 and ISOLatinX.
+ * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default.
+ *
+ * Anything else would have to be translated to UTF8 before being
+ * given to the parser itself. The BOM for UTF16 and the encoding
+ * declaration are looked at and a converter is looked for at that
+ * point. If not found the parser stops here as asked by the XML REC. A
+ * converter can be registered by the user using xmlRegisterCharEncodingHandler
+ * but the current form doesn't allow stateful transcoding (a serious
+ * problem agreed !). If iconv has been found it will be used
+ * automatically and allow stateful transcoding, the simplest is then
+ * to be sure to enable iconv and to provide iconv libs for the encoding
+ * support needed.
+ *
+ * Note that the generic "UTF-16" is not a predefined value. Instead, only
+ * the specific UTF-16LE and UTF-16BE are present.
+ */
+typedef enum {
+ XML_CHAR_ENCODING_ERROR= -1, /* No char encoding detected */
+ XML_CHAR_ENCODING_NONE= 0, /* No char encoding detected */
+ XML_CHAR_ENCODING_UTF8= 1, /* UTF-8 */
+ XML_CHAR_ENCODING_UTF16LE= 2, /* UTF-16 little endian */
+ XML_CHAR_ENCODING_UTF16BE= 3, /* UTF-16 big endian */
+ XML_CHAR_ENCODING_UCS4LE= 4, /* UCS-4 little endian */
+ XML_CHAR_ENCODING_UCS4BE= 5, /* UCS-4 big endian */
+ XML_CHAR_ENCODING_EBCDIC= 6, /* EBCDIC uh! */
+ XML_CHAR_ENCODING_UCS4_2143=7, /* UCS-4 unusual ordering */
+ XML_CHAR_ENCODING_UCS4_3412=8, /* UCS-4 unusual ordering */
+ XML_CHAR_ENCODING_UCS2= 9, /* UCS-2 */
+ XML_CHAR_ENCODING_8859_1= 10,/* ISO-8859-1 ISO Latin 1 */
+ XML_CHAR_ENCODING_8859_2= 11,/* ISO-8859-2 ISO Latin 2 */
+ XML_CHAR_ENCODING_8859_3= 12,/* ISO-8859-3 */
+ XML_CHAR_ENCODING_8859_4= 13,/* ISO-8859-4 */
+ XML_CHAR_ENCODING_8859_5= 14,/* ISO-8859-5 */
+ XML_CHAR_ENCODING_8859_6= 15,/* ISO-8859-6 */
+ XML_CHAR_ENCODING_8859_7= 16,/* ISO-8859-7 */
+ XML_CHAR_ENCODING_8859_8= 17,/* ISO-8859-8 */
+ XML_CHAR_ENCODING_8859_9= 18,/* ISO-8859-9 */
+ XML_CHAR_ENCODING_2022_JP= 19,/* ISO-2022-JP */
+ XML_CHAR_ENCODING_SHIFT_JIS=20,/* Shift_JIS */
+ XML_CHAR_ENCODING_EUC_JP= 21,/* EUC-JP */
+ XML_CHAR_ENCODING_ASCII= 22 /* pure ASCII */
+} xmlCharEncoding;
+
+/**
+ * xmlCharEncodingInputFunc:
+ * @out: a pointer to an array of bytes to store the UTF-8 result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of chars in the original encoding
+ * @inlen: the length of @in
+ *
+ * Take a block of chars in the original encoding and try to convert
+ * it to an UTF-8 block of chars out.
+ *
+ * Returns the number of bytes written, -1 if lack of space, or -2
+ * if the transcoding failed.
+ * The value of @inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictiable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+typedef int (* xmlCharEncodingInputFunc)(unsigned char *out, int *outlen,
+ const unsigned char *in, int *inlen);
+
+
+/**
+ * xmlCharEncodingOutputFunc:
+ * @out: a pointer to an array of bytes to store the result
+ * @outlen: the length of @out
+ * @in: a pointer to an array of UTF-8 chars
+ * @inlen: the length of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to another
+ * encoding.
+ * Note: a first call designed to produce heading info is called with
+ * in = NULL. If stateful this should also initialize the encoder state.
+ *
+ * Returns the number of bytes written, -1 if lack of space, or -2
+ * if the transcoding failed.
+ * The value of @inlen after return is the number of octets consumed
+ * if the return value is positive, else unpredictiable.
+ * The value of @outlen after return is the number of octets produced.
+ */
+typedef int (* xmlCharEncodingOutputFunc)(unsigned char *out, int *outlen,
+ const unsigned char *in, int *inlen);
+
+
+/*
+ * Block defining the handlers for non UTF-8 encodings.
+ * If iconv is supported, there are two extra fields.
+ */
+
+typedef struct _xmlCharEncodingHandler xmlCharEncodingHandler;
+typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr;
+struct _xmlCharEncodingHandler {
+ char *name;
+ xmlCharEncodingInputFunc input;
+ xmlCharEncodingOutputFunc output;
+#ifdef LIBXML_ICONV_ENABLED
+ iconv_t iconv_in;
+ iconv_t iconv_out;
+#endif /* LIBXML_ICONV_ENABLED */
+};
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/tree.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Interfaces for encoding handlers.
+ */
+XMLPUBFUN void XMLCALL
+ xmlInitCharEncodingHandlers (void);
+XMLPUBFUN void XMLCALL
+ xmlCleanupCharEncodingHandlers (void);
+XMLPUBFUN void XMLCALL
+ xmlRegisterCharEncodingHandler (xmlCharEncodingHandlerPtr handler);
+XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
+ xmlGetCharEncodingHandler (xmlCharEncoding enc);
+XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
+ xmlFindCharEncodingHandler (const char *name);
+XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
+ xmlNewCharEncodingHandler (const char *name,
+ xmlCharEncodingInputFunc input,
+ xmlCharEncodingOutputFunc output);
+
+/*
+ * Interfaces for encoding names and aliases.
+ */
+XMLPUBFUN int XMLCALL
+ xmlAddEncodingAlias (const char *name,
+ const char *alias);
+XMLPUBFUN int XMLCALL
+ xmlDelEncodingAlias (const char *alias);
+XMLPUBFUN const char * XMLCALL
+ xmlGetEncodingAlias (const char *alias);
+XMLPUBFUN void XMLCALL
+ xmlCleanupEncodingAliases (void);
+XMLPUBFUN xmlCharEncoding XMLCALL
+ xmlParseCharEncoding (const char *name);
+XMLPUBFUN const char * XMLCALL
+ xmlGetCharEncodingName (xmlCharEncoding enc);
+
+/*
+ * Interfaces directly used by the parsers.
+ */
+XMLPUBFUN xmlCharEncoding XMLCALL
+ xmlDetectCharEncoding (const unsigned char *in,
+ int len);
+
+XMLPUBFUN int XMLCALL
+ xmlCharEncOutFunc (xmlCharEncodingHandler *handler,
+ xmlBufferPtr out,
+ xmlBufferPtr in);
+
+XMLPUBFUN int XMLCALL
+ xmlCharEncInFunc (xmlCharEncodingHandler *handler,
+ xmlBufferPtr out,
+ xmlBufferPtr in);
+XMLPUBFUN int XMLCALL
+ xmlCharEncFirstLine (xmlCharEncodingHandler *handler,
+ xmlBufferPtr out,
+ xmlBufferPtr in);
+XMLPUBFUN int XMLCALL
+ xmlCharEncCloseFunc (xmlCharEncodingHandler *handler);
+
+/*
+ * Export a few useful functions
+ */
+XMLPUBFUN int XMLCALL
+ UTF8Toisolat1 (unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen);
+XMLPUBFUN int XMLCALL
+ isolat1ToUTF8 (unsigned char *out,
+ int *outlen,
+ const unsigned char *in,
+ int *inlen);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_CHAR_ENCODING_H__ */
diff --git a/include/libxml/entities.h b/include/libxml/entities.h
new file mode 100644
index 0000000..2dc1217
--- /dev/null
+++ b/include/libxml/entities.h
@@ -0,0 +1,131 @@
+/*
+ * Summary: interface for the XML entities handling
+ * Description: this module provides some of the entity API needed
+ * for the parser and applications.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_ENTITIES_H__
+#define __XML_ENTITIES_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The different valid entity types.
+ */
+typedef enum {
+ XML_INTERNAL_GENERAL_ENTITY = 1,
+ XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2,
+ XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3,
+ XML_INTERNAL_PARAMETER_ENTITY = 4,
+ XML_EXTERNAL_PARAMETER_ENTITY = 5,
+ XML_INTERNAL_PREDEFINED_ENTITY = 6
+} xmlEntityType;
+
+/*
+ * An unit of storage for an entity, contains the string, the value
+ * and the linkind data needed for the linking in the hash table.
+ */
+
+struct _xmlEntity {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_ENTITY_DECL, must be second ! */
+ const xmlChar *name; /* Entity name */
+ struct _xmlNode *children; /* First child link */
+ struct _xmlNode *last; /* Last child link */
+ struct _xmlDtd *parent; /* -> DTD */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ xmlChar *orig; /* content without ref substitution */
+ xmlChar *content; /* content or ndata if unparsed */
+ int length; /* the content length */
+ xmlEntityType etype; /* The entity type */
+ const xmlChar *ExternalID; /* External identifier for PUBLIC */
+ const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC Entity */
+
+ struct _xmlEntity *nexte; /* unused */
+ const xmlChar *URI; /* the full URI as computed */
+ int owner; /* does the entity own the childrens */
+};
+
+/*
+ * All entities are stored in an hash table.
+ * There is 2 separate hash tables for global and parameter entities.
+ */
+
+typedef struct _xmlHashTable xmlEntitiesTable;
+typedef xmlEntitiesTable *xmlEntitiesTablePtr;
+
+/*
+ * External functions:
+ */
+
+XMLPUBFUN void XMLCALL
+ xmlInitializePredefinedEntities (void);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlAddDocEntity (xmlDocPtr doc,
+ const xmlChar *name,
+ int type,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID,
+ const xmlChar *content);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlAddDtdEntity (xmlDocPtr doc,
+ const xmlChar *name,
+ int type,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID,
+ const xmlChar *content);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlGetPredefinedEntity (const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlGetDocEntity (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlGetDtdEntity (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlGetParameterEntity (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlEncodeEntities (xmlDocPtr doc,
+ const xmlChar *input);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlEncodeEntitiesReentrant(xmlDocPtr doc,
+ const xmlChar *input);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlEncodeSpecialChars (xmlDocPtr doc,
+ const xmlChar *input);
+XMLPUBFUN xmlEntitiesTablePtr XMLCALL
+ xmlCreateEntitiesTable (void);
+XMLPUBFUN xmlEntitiesTablePtr XMLCALL
+ xmlCopyEntitiesTable (xmlEntitiesTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlFreeEntitiesTable (xmlEntitiesTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlDumpEntitiesTable (xmlBufferPtr buf,
+ xmlEntitiesTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlDumpEntityDecl (xmlBufferPtr buf,
+ xmlEntityPtr ent);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlCleanupPredefinedEntities(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+# endif /* __XML_ENTITIES_H__ */
diff --git a/include/libxml/globals.h b/include/libxml/globals.h
new file mode 100644
index 0000000..1be2d1f
--- /dev/null
+++ b/include/libxml/globals.h
@@ -0,0 +1,422 @@
+/*
+ * Summary: interface for all global variables of the library
+ * Description: all the global variables and thread handling for
+ * those variables is handled by this module.
+ *
+ * The bottom of this file is automatically generated by build_glob.py
+ * based on the description file global.data
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Gary Pennington <Gary.Pennington@uk.sun.com>, Daniel Veillard
+ */
+
+#ifndef __XML_GLOBALS_H
+#define __XML_GLOBALS_H
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/xmlerror.h>
+#include <libxml/SAX.h>
+#include <libxml/SAX2.h>
+#include <libxml/xmlmemory.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN void XMLCALL xmlInitGlobals(void);
+XMLPUBFUN void XMLCALL xmlCleanupGlobals(void);
+
+/*
+ * Externally global symbols which need to be protected for backwards
+ * compatibility support.
+ */
+
+#undef docbDefaultSAXHandler
+#undef htmlDefaultSAXHandler
+#undef oldXMLWDcompatibility
+#undef xmlBufferAllocScheme
+#undef xmlDefaultBufferSize
+#undef xmlDefaultSAXHandler
+#undef xmlDefaultSAXLocator
+#undef xmlDoValidityCheckingDefaultValue
+#undef xmlFree
+#undef xmlGenericError
+#undef xmlStructuredError
+#undef xmlGenericErrorContext
+#undef xmlGetWarningsDefaultValue
+#undef xmlIndentTreeOutput
+#undef xmlTreeIndentString
+#undef xmlKeepBlanksDefaultValue
+#undef xmlLineNumbersDefaultValue
+#undef xmlLoadExtDtdDefaultValue
+#undef xmlMalloc
+#undef xmlMallocAtomic
+#undef xmlMemStrdup
+#undef xmlParserDebugEntities
+#undef xmlParserVersion
+#undef xmlPedanticParserDefaultValue
+#undef xmlRealloc
+#undef xmlSaveNoEmptyTags
+#undef xmlSubstituteEntitiesDefaultValue
+#undef xmlRegisterNodeDefaultValue
+#undef xmlDeregisterNodeDefaultValue
+#undef xmlLastError
+
+typedef void (*xmlRegisterNodeFunc) (xmlNodePtr node);
+typedef void (*xmlDeregisterNodeFunc) (xmlNodePtr node);
+
+typedef struct _xmlGlobalState xmlGlobalState;
+typedef xmlGlobalState *xmlGlobalStatePtr;
+struct _xmlGlobalState
+{
+ const char *xmlParserVersion;
+
+ xmlSAXLocator xmlDefaultSAXLocator;
+ xmlSAXHandlerV1 xmlDefaultSAXHandler;
+ xmlSAXHandlerV1 docbDefaultSAXHandler;
+ xmlSAXHandlerV1 htmlDefaultSAXHandler;
+
+ xmlFreeFunc xmlFree;
+ xmlMallocFunc xmlMalloc;
+ xmlStrdupFunc xmlMemStrdup;
+ xmlReallocFunc xmlRealloc;
+
+ xmlGenericErrorFunc xmlGenericError;
+ xmlStructuredErrorFunc xmlStructuredError;
+ void *xmlGenericErrorContext;
+
+ int oldXMLWDcompatibility;
+
+ xmlBufferAllocationScheme xmlBufferAllocScheme;
+ int xmlDefaultBufferSize;
+
+ int xmlSubstituteEntitiesDefaultValue;
+ int xmlDoValidityCheckingDefaultValue;
+ int xmlGetWarningsDefaultValue;
+ int xmlKeepBlanksDefaultValue;
+ int xmlLineNumbersDefaultValue;
+ int xmlLoadExtDtdDefaultValue;
+ int xmlParserDebugEntities;
+ int xmlPedanticParserDefaultValue;
+
+ int xmlSaveNoEmptyTags;
+ int xmlIndentTreeOutput;
+ const char *xmlTreeIndentString;
+
+ xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
+ xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
+
+ xmlMallocFunc xmlMallocAtomic;
+ xmlError xmlLastError;
+};
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/threads.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN void XMLCALL xmlInitializeGlobalState(xmlGlobalStatePtr gs);
+
+XMLPUBFUN void XMLCALL xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
+
+XMLPUBFUN void XMLCALL xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler);
+
+XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlRegisterNodeDefault(xmlRegisterNodeFunc func);
+XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func);
+XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func);
+XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func);
+
+/** DOC_DISABLE */
+/*
+ * In general the memory allocation entry points are not kept
+ * thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED
+ * - xmlMalloc
+ * - xmlMallocAtomic
+ * - xmlRealloc
+ * - xmlMemStrdup
+ * - xmlFree
+ */
+
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMalloc(void);
+#define xmlMalloc \
+(*(__xmlMalloc()))
+#else
+XMLPUBVAR xmlMallocFunc xmlMalloc;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMallocAtomic(void);
+#define xmlMallocAtomic \
+(*(__xmlMallocAtomic()))
+#else
+XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlReallocFunc * XMLCALL __xmlRealloc(void);
+#define xmlRealloc \
+(*(__xmlRealloc()))
+#else
+XMLPUBVAR xmlReallocFunc xmlRealloc;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlFreeFunc * XMLCALL __xmlFree(void);
+#define xmlFree \
+(*(__xmlFree()))
+#else
+XMLPUBVAR xmlFreeFunc xmlFree;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN xmlStrdupFunc * XMLCALL __xmlMemStrdup(void);
+#define xmlMemStrdup \
+(*(__xmlMemStrdup()))
+#else
+XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
+#endif
+
+#else /* !LIBXML_THREAD_ALLOC_ENABLED */
+XMLPUBVAR xmlMallocFunc xmlMalloc;
+XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
+XMLPUBVAR xmlReallocFunc xmlRealloc;
+XMLPUBVAR xmlFreeFunc xmlFree;
+XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
+#endif /* LIBXML_THREAD_ALLOC_ENABLED */
+
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __docbDefaultSAXHandler(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define docbDefaultSAXHandler \
+(*(__docbDefaultSAXHandler()))
+#else
+XMLPUBVAR xmlSAXHandlerV1 docbDefaultSAXHandler;
+#endif
+#endif
+
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __htmlDefaultSAXHandler(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define htmlDefaultSAXHandler \
+(*(__htmlDefaultSAXHandler()))
+#else
+XMLPUBVAR xmlSAXHandlerV1 htmlDefaultSAXHandler;
+#endif
+#endif
+
+XMLPUBFUN xmlError * XMLCALL __xmlLastError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlLastError \
+(*(__xmlLastError()))
+#else
+XMLPUBVAR xmlError xmlLastError;
+#endif
+
+/*
+ * Everything starting from the line below is
+ * Automatically generated by build_glob.py.
+ * Do not modify the previous line.
+ */
+
+
+XMLPUBFUN int * XMLCALL __oldXMLWDcompatibility(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define oldXMLWDcompatibility \
+(*(__oldXMLWDcompatibility()))
+#else
+XMLPUBVAR int oldXMLWDcompatibility;
+#endif
+
+XMLPUBFUN xmlBufferAllocationScheme * XMLCALL __xmlBufferAllocScheme(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlBufferAllocScheme \
+(*(__xmlBufferAllocScheme()))
+#else
+XMLPUBVAR xmlBufferAllocationScheme xmlBufferAllocScheme;
+#endif
+XMLPUBFUN xmlBufferAllocationScheme XMLCALL xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v);
+
+XMLPUBFUN int * XMLCALL __xmlDefaultBufferSize(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDefaultBufferSize \
+(*(__xmlDefaultBufferSize()))
+#else
+XMLPUBVAR int xmlDefaultBufferSize;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefDefaultBufferSize(int v);
+
+XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __xmlDefaultSAXHandler(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDefaultSAXHandler \
+(*(__xmlDefaultSAXHandler()))
+#else
+XMLPUBVAR xmlSAXHandlerV1 xmlDefaultSAXHandler;
+#endif
+
+XMLPUBFUN xmlSAXLocator * XMLCALL __xmlDefaultSAXLocator(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDefaultSAXLocator \
+(*(__xmlDefaultSAXLocator()))
+#else
+XMLPUBVAR xmlSAXLocator xmlDefaultSAXLocator;
+#endif
+
+XMLPUBFUN int * XMLCALL __xmlDoValidityCheckingDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDoValidityCheckingDefaultValue \
+(*(__xmlDoValidityCheckingDefaultValue()))
+#else
+XMLPUBVAR int xmlDoValidityCheckingDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefDoValidityCheckingDefaultValue(int v);
+
+XMLPUBFUN xmlGenericErrorFunc * XMLCALL __xmlGenericError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlGenericError \
+(*(__xmlGenericError()))
+#else
+XMLPUBVAR xmlGenericErrorFunc xmlGenericError;
+#endif
+
+XMLPUBFUN xmlStructuredErrorFunc * XMLCALL __xmlStructuredError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlStructuredError \
+(*(__xmlStructuredError()))
+#else
+XMLPUBVAR xmlStructuredErrorFunc xmlStructuredError;
+#endif
+
+XMLPUBFUN void * * XMLCALL __xmlGenericErrorContext(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlGenericErrorContext \
+(*(__xmlGenericErrorContext()))
+#else
+XMLPUBVAR void * xmlGenericErrorContext;
+#endif
+
+XMLPUBFUN int * XMLCALL __xmlGetWarningsDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlGetWarningsDefaultValue \
+(*(__xmlGetWarningsDefaultValue()))
+#else
+XMLPUBVAR int xmlGetWarningsDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefGetWarningsDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlIndentTreeOutput(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlIndentTreeOutput \
+(*(__xmlIndentTreeOutput()))
+#else
+XMLPUBVAR int xmlIndentTreeOutput;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefIndentTreeOutput(int v);
+
+XMLPUBFUN const char * * XMLCALL __xmlTreeIndentString(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlTreeIndentString \
+(*(__xmlTreeIndentString()))
+#else
+XMLPUBVAR const char * xmlTreeIndentString;
+#endif
+XMLPUBFUN const char * XMLCALL xmlThrDefTreeIndentString(const char * v);
+
+XMLPUBFUN int * XMLCALL __xmlKeepBlanksDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlKeepBlanksDefaultValue \
+(*(__xmlKeepBlanksDefaultValue()))
+#else
+XMLPUBVAR int xmlKeepBlanksDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefKeepBlanksDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlLineNumbersDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlLineNumbersDefaultValue \
+(*(__xmlLineNumbersDefaultValue()))
+#else
+XMLPUBVAR int xmlLineNumbersDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefLineNumbersDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlLoadExtDtdDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlLoadExtDtdDefaultValue \
+(*(__xmlLoadExtDtdDefaultValue()))
+#else
+XMLPUBVAR int xmlLoadExtDtdDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefLoadExtDtdDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlParserDebugEntities(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlParserDebugEntities \
+(*(__xmlParserDebugEntities()))
+#else
+XMLPUBVAR int xmlParserDebugEntities;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefParserDebugEntities(int v);
+
+XMLPUBFUN const char * * XMLCALL __xmlParserVersion(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlParserVersion \
+(*(__xmlParserVersion()))
+#else
+XMLPUBVAR const char * xmlParserVersion;
+#endif
+
+XMLPUBFUN int * XMLCALL __xmlPedanticParserDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlPedanticParserDefaultValue \
+(*(__xmlPedanticParserDefaultValue()))
+#else
+XMLPUBVAR int xmlPedanticParserDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefPedanticParserDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlSaveNoEmptyTags(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlSaveNoEmptyTags \
+(*(__xmlSaveNoEmptyTags()))
+#else
+XMLPUBVAR int xmlSaveNoEmptyTags;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefSaveNoEmptyTags(int v);
+
+XMLPUBFUN int * XMLCALL __xmlSubstituteEntitiesDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlSubstituteEntitiesDefaultValue \
+(*(__xmlSubstituteEntitiesDefaultValue()))
+#else
+XMLPUBVAR int xmlSubstituteEntitiesDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefSubstituteEntitiesDefaultValue(int v);
+
+XMLPUBFUN xmlRegisterNodeFunc * XMLCALL __xmlRegisterNodeDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlRegisterNodeDefaultValue \
+(*(__xmlRegisterNodeDefaultValue()))
+#else
+XMLPUBVAR xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
+#endif
+
+XMLPUBFUN xmlDeregisterNodeFunc * XMLCALL __xmlDeregisterNodeDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDeregisterNodeDefaultValue \
+(*(__xmlDeregisterNodeDefaultValue()))
+#else
+XMLPUBVAR xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_GLOBALS_H */
diff --git a/include/libxml/hash.h b/include/libxml/hash.h
new file mode 100644
index 0000000..039ed5d
--- /dev/null
+++ b/include/libxml/hash.h
@@ -0,0 +1,206 @@
+/*
+ * Summary: chained hash tables
+ * description: this module implement the hash table support used in
+ * various place in the library.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Bjorn Reese <bjorn.reese@systematic.dk>
+ */
+
+#ifndef __XML_HASH_H__
+#define __XML_HASH_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The hash table.
+ */
+typedef struct _xmlHashTable xmlHashTable;
+typedef xmlHashTable *xmlHashTablePtr;
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * function types:
+ */
+/**
+ * xmlHashDeallocator:
+ * @payload: the data in the hash
+ * @name: the name associated
+ *
+ * Callback to free data from a hash.
+ */
+typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
+/**
+ * xmlHashCopier:
+ * @payload: the data in the hash
+ * @name: the name associated
+ *
+ * Callback to copy data from a hash.
+ *
+ * Returns a copy of the data or NULL in case of error.
+ */
+typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
+/**
+ * xmlHashScanner:
+ * @payload: the data in the hash
+ * @data: extra scannner data
+ * @name: the name associated
+ *
+ * Callback when scanning data in a hash with the simple scanner.
+ */
+typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
+/**
+ * xmlHashScannerFull:
+ * @payload: the data in the hash
+ * @data: extra scannner data
+ * @name: the name associated
+ * @name2: the second name associated
+ * @name3: the third name associated
+ *
+ * Callback when scanning data in a hash with the full scanner.
+ */
+typedef void (*xmlHashScannerFull)(void *payload, void *data,
+ const xmlChar *name, const xmlChar *name2,
+ const xmlChar *name3);
+
+/*
+ * Constructor and destructor.
+ */
+XMLPUBFUN xmlHashTablePtr XMLCALL
+ xmlHashCreate (int size);
+XMLPUBFUN void XMLCALL
+ xmlHashFree (xmlHashTablePtr table,
+ xmlHashDeallocator f);
+
+/*
+ * Add a new entry to the hash table.
+ */
+XMLPUBFUN int XMLCALL
+ xmlHashAddEntry (xmlHashTablePtr table,
+ const xmlChar *name,
+ void *userdata);
+XMLPUBFUN int XMLCALL
+ xmlHashUpdateEntry(xmlHashTablePtr table,
+ const xmlChar *name,
+ void *userdata,
+ xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL
+ xmlHashAddEntry2(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ void *userdata);
+XMLPUBFUN int XMLCALL
+ xmlHashUpdateEntry2(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ void *userdata,
+ xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL
+ xmlHashAddEntry3(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3,
+ void *userdata);
+XMLPUBFUN int XMLCALL
+ xmlHashUpdateEntry3(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3,
+ void *userdata,
+ xmlHashDeallocator f);
+
+/*
+ * Remove an entry from the hash table.
+ */
+XMLPUBFUN int XMLCALL
+ xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
+ xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL
+ xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL
+ xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
+ const xmlChar *name2, const xmlChar *name3,
+ xmlHashDeallocator f);
+
+/*
+ * Retrieve the userdata.
+ */
+XMLPUBFUN void * XMLCALL
+ xmlHashLookup (xmlHashTablePtr table,
+ const xmlChar *name);
+XMLPUBFUN void * XMLCALL
+ xmlHashLookup2 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2);
+XMLPUBFUN void * XMLCALL
+ xmlHashLookup3 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3);
+XMLPUBFUN void * XMLCALL
+ xmlHashQLookup (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *prefix);
+XMLPUBFUN void * XMLCALL
+ xmlHashQLookup2 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *prefix,
+ const xmlChar *name2,
+ const xmlChar *prefix2);
+XMLPUBFUN void * XMLCALL
+ xmlHashQLookup3 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *prefix,
+ const xmlChar *name2,
+ const xmlChar *prefix2,
+ const xmlChar *name3,
+ const xmlChar *prefix3);
+
+/*
+ * Helpers.
+ */
+XMLPUBFUN xmlHashTablePtr XMLCALL
+ xmlHashCopy (xmlHashTablePtr table,
+ xmlHashCopier f);
+XMLPUBFUN int XMLCALL
+ xmlHashSize (xmlHashTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlHashScan (xmlHashTablePtr table,
+ xmlHashScanner f,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlHashScan3 (xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3,
+ xmlHashScanner f,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlHashScanFull (xmlHashTablePtr table,
+ xmlHashScannerFull f,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlHashScanFull3(xmlHashTablePtr table,
+ const xmlChar *name,
+ const xmlChar *name2,
+ const xmlChar *name3,
+ xmlHashScannerFull f,
+ void *data);
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! __XML_HASH_H__ */
diff --git a/include/libxml/list.h b/include/libxml/list.h
new file mode 100644
index 0000000..1d83482
--- /dev/null
+++ b/include/libxml/list.h
@@ -0,0 +1,137 @@
+/*
+ * Summary: lists interfaces
+ * Description: this module implement the list support used in
+ * various place in the library.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Gary Pennington <Gary.Pennington@uk.sun.com>
+ */
+
+#ifndef __XML_LINK_INCLUDE__
+#define __XML_LINK_INCLUDE__
+
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _xmlLink xmlLink;
+typedef xmlLink *xmlLinkPtr;
+
+typedef struct _xmlList xmlList;
+typedef xmlList *xmlListPtr;
+
+/**
+ * xmlListDeallocator:
+ * @lk: the data to deallocate
+ *
+ * Callback function used to free data from a list.
+ */
+typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
+/**
+ * xmlListDataCompare:
+ * @data0: the first data
+ * @data1: the second data
+ *
+ * Callback function used to compare 2 data.
+ *
+ * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
+ */
+typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
+/**
+ * xmlListWalker:
+ * @data: the data found in the list
+ * @user: extra user provided data to the walker
+ *
+ * Callback function used when walking a list with xmlListWalk().
+ *
+ * Returns 0 to stop walking the list, 1 otherwise.
+ */
+typedef int (*xmlListWalker) (const void *data, const void *user);
+
+/* Creation/Deletion */
+XMLPUBFUN xmlListPtr XMLCALL
+ xmlListCreate (xmlListDeallocator deallocator,
+ xmlListDataCompare compare);
+XMLPUBFUN void XMLCALL
+ xmlListDelete (xmlListPtr l);
+
+/* Basic Operators */
+XMLPUBFUN void * XMLCALL
+ xmlListSearch (xmlListPtr l,
+ void *data);
+XMLPUBFUN void * XMLCALL
+ xmlListReverseSearch (xmlListPtr l,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlListInsert (xmlListPtr l,
+ void *data) ;
+XMLPUBFUN int XMLCALL
+ xmlListAppend (xmlListPtr l,
+ void *data) ;
+XMLPUBFUN int XMLCALL
+ xmlListRemoveFirst (xmlListPtr l,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlListRemoveLast (xmlListPtr l,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlListRemoveAll (xmlListPtr l,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlListClear (xmlListPtr l);
+XMLPUBFUN int XMLCALL
+ xmlListEmpty (xmlListPtr l);
+XMLPUBFUN xmlLinkPtr XMLCALL
+ xmlListFront (xmlListPtr l);
+XMLPUBFUN xmlLinkPtr XMLCALL
+ xmlListEnd (xmlListPtr l);
+XMLPUBFUN int XMLCALL
+ xmlListSize (xmlListPtr l);
+
+XMLPUBFUN void XMLCALL
+ xmlListPopFront (xmlListPtr l);
+XMLPUBFUN void XMLCALL
+ xmlListPopBack (xmlListPtr l);
+XMLPUBFUN int XMLCALL
+ xmlListPushFront (xmlListPtr l,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlListPushBack (xmlListPtr l,
+ void *data);
+
+/* Advanced Operators */
+XMLPUBFUN void XMLCALL
+ xmlListReverse (xmlListPtr l);
+XMLPUBFUN void XMLCALL
+ xmlListSort (xmlListPtr l);
+XMLPUBFUN void XMLCALL
+ xmlListWalk (xmlListPtr l,
+ xmlListWalker walker,
+ const void *user);
+XMLPUBFUN void XMLCALL
+ xmlListReverseWalk (xmlListPtr l,
+ xmlListWalker walker,
+ const void *user);
+XMLPUBFUN void XMLCALL
+ xmlListMerge (xmlListPtr l1,
+ xmlListPtr l2);
+XMLPUBFUN xmlListPtr XMLCALL
+ xmlListDup (const xmlListPtr old);
+XMLPUBFUN int XMLCALL
+ xmlListCopy (xmlListPtr cur,
+ const xmlListPtr old);
+/* Link operators */
+XMLPUBFUN void * XMLCALL
+ xmlLinkGetData (xmlLinkPtr lk);
+
+/* xmlListUnique() */
+/* xmlListSwap */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_LINK_INCLUDE__ */
diff --git a/include/libxml/nanoftp.h b/include/libxml/nanoftp.h
new file mode 100644
index 0000000..01fadb8
--- /dev/null
+++ b/include/libxml/nanoftp.h
@@ -0,0 +1,143 @@
+/*
+ * Summary: minimal FTP implementation
+ * Description: minimal FTP implementation allowing to fetch resources
+ * like external subset.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __NANO_FTP_H__
+#define __NANO_FTP_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_FTP_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * ftpListCallback:
+ * @userData: user provided data for the callback
+ * @filename: the file name (including "->" when links are shown)
+ * @attrib: the attribute string
+ * @owner: the owner string
+ * @group: the group string
+ * @size: the file size
+ * @links: the link count
+ * @year: the year
+ * @month: the month
+ * @day: the day
+ * @hour: the hour
+ * @minute: the minute
+ *
+ * A callback for the xmlNanoFTPList command.
+ * Note that only one of year and day:minute are specified.
+ */
+typedef void (*ftpListCallback) (void *userData,
+ const char *filename, const char *attrib,
+ const char *owner, const char *group,
+ unsigned long size, int links, int year,
+ const char *month, int day, int hour,
+ int minute);
+/**
+ * ftpDataCallback:
+ * @userData: the user provided context
+ * @data: the data received
+ * @len: its size in bytes
+ *
+ * A callback for the xmlNanoFTPGet command.
+ */
+typedef void (*ftpDataCallback) (void *userData,
+ const char *data,
+ int len);
+
+/*
+ * Init
+ */
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPInit (void);
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPCleanup (void);
+
+/*
+ * Creating/freeing contexts.
+ */
+XMLPUBFUN void * XMLCALL
+ xmlNanoFTPNewCtxt (const char *URL);
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPFreeCtxt (void * ctx);
+XMLPUBFUN void * XMLCALL
+ xmlNanoFTPConnectTo (const char *server,
+ int port);
+/*
+ * Opening/closing session connections.
+ */
+XMLPUBFUN void * XMLCALL
+ xmlNanoFTPOpen (const char *URL);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPConnect (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPClose (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPQuit (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPScanProxy (const char *URL);
+XMLPUBFUN void XMLCALL
+ xmlNanoFTPProxy (const char *host,
+ int port,
+ const char *user,
+ const char *passwd,
+ int type);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPUpdateURL (void *ctx,
+ const char *URL);
+
+/*
+ * Rather internal commands.
+ */
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPGetResponse (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPCheckResponse (void *ctx);
+
+/*
+ * CD/DIR/GET handlers.
+ */
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPCwd (void *ctx,
+ char *directory);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPDele (void *ctx,
+ char *file);
+
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPGetConnection (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPCloseConnection(void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPList (void *ctx,
+ ftpListCallback callback,
+ void *userData,
+ char *filename);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPGetSocket (void *ctx,
+ const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPGet (void *ctx,
+ ftpDataCallback callback,
+ void *userData,
+ const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlNanoFTPRead (void *ctx,
+ void *dest,
+ int len);
+
+#ifdef __cplusplus
+}
+#endif /* LIBXML_FTP_ENABLED */
+#endif
+#endif /* __NANO_FTP_H__ */
diff --git a/include/libxml/nanohttp.h b/include/libxml/nanohttp.h
new file mode 100644
index 0000000..2853184
--- /dev/null
+++ b/include/libxml/nanohttp.h
@@ -0,0 +1,79 @@
+/*
+ * Summary: minimal HTTP implementation
+ * Description: minimal HTTP implementation allowing to fetch resources
+ * like external subset.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __NANO_HTTP_H__
+#define __NANO_HTTP_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_HTTP_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN void XMLCALL
+ xmlNanoHTTPInit (void);
+XMLPUBFUN void XMLCALL
+ xmlNanoHTTPCleanup (void);
+XMLPUBFUN void XMLCALL
+ xmlNanoHTTPScanProxy (const char *URL);
+XMLPUBFUN int XMLCALL
+ xmlNanoHTTPFetch (const char *URL,
+ const char *filename,
+ char **contentType);
+XMLPUBFUN void * XMLCALL
+ xmlNanoHTTPMethod (const char *URL,
+ const char *method,
+ const char *input,
+ char **contentType,
+ const char *headers,
+ int ilen);
+XMLPUBFUN void * XMLCALL
+ xmlNanoHTTPMethodRedir (const char *URL,
+ const char *method,
+ const char *input,
+ char **contentType,
+ char **redir,
+ const char *headers,
+ int ilen);
+XMLPUBFUN void * XMLCALL
+ xmlNanoHTTPOpen (const char *URL,
+ char **contentType);
+XMLPUBFUN void * XMLCALL
+ xmlNanoHTTPOpenRedir (const char *URL,
+ char **contentType,
+ char **redir);
+XMLPUBFUN int XMLCALL
+ xmlNanoHTTPReturnCode (void *ctx);
+XMLPUBFUN const char * XMLCALL
+ xmlNanoHTTPAuthHeader (void *ctx);
+XMLPUBFUN const char * XMLCALL
+ xmlNanoHTTPRedir (void *ctx);
+XMLPUBFUN const char * XMLCALL
+ xmlNanoHTTPEncoding (void *ctx);
+XMLPUBFUN const char * XMLCALL
+ xmlNanoHTTPMimeType (void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlNanoHTTPRead (void *ctx,
+ void *dest,
+ int len);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlNanoHTTPSave (void *ctxt,
+ const char *filename);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlNanoHTTPClose (void *ctx);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_HTTP_ENABLED */
+#endif /* __NANO_HTTP_H__ */
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
new file mode 100644
index 0000000..2cecb20
--- /dev/null
+++ b/include/libxml/parser.h
@@ -0,0 +1,1131 @@
+/*
+ * Summary: the core parser module
+ * Description: Interfaces, constants and types related to the XML parser
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_PARSER_H__
+#define __XML_PARSER_H__
+
+#include <stdarg.h>
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/dict.h>
+#include <libxml/hash.h>
+#include <libxml/valid.h>
+#include <libxml/entities.h>
+#include <libxml/xmlerror.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * XML_DEFAULT_VERSION:
+ *
+ * The default version of XML used: 1.0
+ */
+#define XML_DEFAULT_VERSION "1.0"
+
+/**
+ * xmlParserInput:
+ *
+ * An xmlParserInput is an input flow for the XML processor.
+ * Each entity parsed is associated an xmlParserInput (except the
+ * few predefined ones). This is the case both for internal entities
+ * - in which case the flow is already completely in memory - or
+ * external entities - in which case we use the buf structure for
+ * progressive reading and I18N conversions to the internal UTF-8 format.
+ */
+
+/**
+ * xmlParserInputDeallocate:
+ * @str: the string to deallocate
+ *
+ * Callback for freeing some parser input allocations.
+ */
+typedef void (* xmlParserInputDeallocate)(xmlChar *str);
+
+struct _xmlParserInput {
+ /* Input buffer */
+ xmlParserInputBufferPtr buf; /* UTF-8 encoded buffer */
+
+ const char *filename; /* The file analyzed, if any */
+ const char *directory; /* the directory/base of the file */
+ const xmlChar *base; /* Base of the array to parse */
+ const xmlChar *cur; /* Current char being parsed */
+ const xmlChar *end; /* end of the array to parse */
+ int length; /* length if known */
+ int line; /* Current line */
+ int col; /* Current column */
+ /*
+ * NOTE: consumed is only tested for equality in the parser code,
+ * so even if there is an overflow this should not give troubles
+ * for parsing very large instances.
+ */
+ unsigned long consumed; /* How many xmlChars already consumed */
+ xmlParserInputDeallocate free; /* function to deallocate the base */
+ const xmlChar *encoding; /* the encoding string for entity */
+ const xmlChar *version; /* the version string for entity */
+ int standalone; /* Was that entity marked standalone */
+ int id; /* an unique identifier for the entity */
+};
+
+/**
+ * xmlParserNodeInfo:
+ *
+ * The parser can be asked to collect Node informations, i.e. at what
+ * place in the file they were detected.
+ * NOTE: This is off by default and not very well tested.
+ */
+typedef struct _xmlParserNodeInfo xmlParserNodeInfo;
+typedef xmlParserNodeInfo *xmlParserNodeInfoPtr;
+
+struct _xmlParserNodeInfo {
+ const struct _xmlNode* node;
+ /* Position & line # that text that created the node begins & ends on */
+ unsigned long begin_pos;
+ unsigned long begin_line;
+ unsigned long end_pos;
+ unsigned long end_line;
+};
+
+typedef struct _xmlParserNodeInfoSeq xmlParserNodeInfoSeq;
+typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr;
+struct _xmlParserNodeInfoSeq {
+ unsigned long maximum;
+ unsigned long length;
+ xmlParserNodeInfo* buffer;
+};
+
+/**
+ * xmlParserInputState:
+ *
+ * The parser is now working also as a state based parser.
+ * The recursive one use the state info for entities processing.
+ */
+typedef enum {
+ XML_PARSER_EOF = -1, /* nothing is to be parsed */
+ XML_PARSER_START = 0, /* nothing has been parsed */
+ XML_PARSER_MISC, /* Misc* before int subset */
+ XML_PARSER_PI, /* Within a processing instruction */
+ XML_PARSER_DTD, /* within some DTD content */
+ XML_PARSER_PROLOG, /* Misc* after internal subset */
+ XML_PARSER_COMMENT, /* within a comment */
+ XML_PARSER_START_TAG, /* within a start tag */
+ XML_PARSER_CONTENT, /* within the content */
+ XML_PARSER_CDATA_SECTION, /* within a CDATA section */
+ XML_PARSER_END_TAG, /* within a closing tag */
+ XML_PARSER_ENTITY_DECL, /* within an entity declaration */
+ XML_PARSER_ENTITY_VALUE, /* within an entity value in a decl */
+ XML_PARSER_ATTRIBUTE_VALUE, /* within an attribute value */
+ XML_PARSER_SYSTEM_LITERAL, /* within a SYSTEM value */
+ XML_PARSER_EPILOG, /* the Misc* after the last end tag */
+ XML_PARSER_IGNORE, /* within an IGNORED section */
+ XML_PARSER_PUBLIC_LITERAL /* within a PUBLIC value */
+} xmlParserInputState;
+
+/**
+ * XML_DETECT_IDS:
+ *
+ * Bit in the loadsubset context field to tell to do ID/REFs lookups.
+ * Use it to initialize xmlLoadExtDtdDefaultValue.
+ */
+#define XML_DETECT_IDS 2
+
+/**
+ * XML_COMPLETE_ATTRS:
+ *
+ * Bit in the loadsubset context field to tell to do complete the
+ * elements attributes lists with the ones defaulted from the DTDs.
+ * Use it to initialize xmlLoadExtDtdDefaultValue.
+ */
+#define XML_COMPLETE_ATTRS 4
+
+/**
+ * XML_SKIP_IDS:
+ *
+ * Bit in the loadsubset context field to tell to not do ID/REFs registration.
+ * Used to initialize xmlLoadExtDtdDefaultValue in some special cases.
+ */
+#define XML_SKIP_IDS 8
+
+/**
+ * xmlParserCtxt:
+ *
+ * The parser context.
+ * NOTE This doesn't completely define the parser state, the (current ?)
+ * design of the parser uses recursive function calls since this allow
+ * and easy mapping from the production rules of the specification
+ * to the actual code. The drawback is that the actual function call
+ * also reflect the parser state. However most of the parsing routines
+ * takes as the only argument the parser context pointer, so migrating
+ * to a state based parser for progressive parsing shouldn't be too hard.
+ */
+struct _xmlParserCtxt {
+ struct _xmlSAXHandler *sax; /* The SAX handler */
+ void *userData; /* For SAX interface only, used by DOM build */
+ xmlDocPtr myDoc; /* the document being built */
+ int wellFormed; /* is the document well formed */
+ int replaceEntities; /* shall we replace entities ? */
+ const xmlChar *version; /* the XML version string */
+ const xmlChar *encoding; /* the declared encoding, if any */
+ int standalone; /* standalone document */
+ int html; /* an HTML(1)/Docbook(2) document */
+
+ /* Input stream stack */
+ xmlParserInputPtr input; /* Current input stream */
+ int inputNr; /* Number of current input streams */
+ int inputMax; /* Max number of input streams */
+ xmlParserInputPtr *inputTab; /* stack of inputs */
+
+ /* Node analysis stack only used for DOM building */
+ xmlNodePtr node; /* Current parsed Node */
+ int nodeNr; /* Depth of the parsing stack */
+ int nodeMax; /* Max depth of the parsing stack */
+ xmlNodePtr *nodeTab; /* array of nodes */
+
+ int record_info; /* Whether node info should be kept */
+ xmlParserNodeInfoSeq node_seq; /* info about each node parsed */
+
+ int errNo; /* error code */
+
+ int hasExternalSubset; /* reference and external subset */
+ int hasPErefs; /* the internal subset has PE refs */
+ int external; /* are we parsing an external entity */
+
+ int valid; /* is the document valid */
+ int validate; /* shall we try to validate ? */
+ xmlValidCtxt vctxt; /* The validity context */
+
+ xmlParserInputState instate; /* current type of input */
+ int token; /* next char look-ahead */
+
+ char *directory; /* the data directory */
+
+ /* Node name stack */
+ const xmlChar *name; /* Current parsed Node */
+ int nameNr; /* Depth of the parsing stack */
+ int nameMax; /* Max depth of the parsing stack */
+ const xmlChar * *nameTab; /* array of nodes */
+
+ long nbChars; /* number of xmlChar processed */
+ long checkIndex; /* used by progressive parsing lookup */
+ int keepBlanks; /* ugly but ... */
+ int disableSAX; /* SAX callbacks are disabled */
+ int inSubset; /* Parsing is in int 1/ext 2 subset */
+ const xmlChar * intSubName; /* name of subset */
+ xmlChar * extSubURI; /* URI of external subset */
+ xmlChar * extSubSystem; /* SYSTEM ID of external subset */
+
+ /* xml:space values */
+ int * space; /* Should the parser preserve spaces */
+ int spaceNr; /* Depth of the parsing stack */
+ int spaceMax; /* Max depth of the parsing stack */
+ int * spaceTab; /* array of space infos */
+
+ int depth; /* to prevent entity substitution loops */
+ xmlParserInputPtr entity; /* used to check entities boundaries */
+ int charset; /* encoding of the in-memory content
+ actually an xmlCharEncoding */
+ int nodelen; /* Those two fields are there to */
+ int nodemem; /* Speed up large node parsing */
+ int pedantic; /* signal pedantic warnings */
+ void *_private; /* For user data, libxml won't touch it */
+
+ int loadsubset; /* should the external subset be loaded */
+ int linenumbers; /* set line number in element content */
+ void *catalogs; /* document's own catalog */
+ int recovery; /* run in recovery mode */
+ int progressive; /* is this a progressive parsing */
+ xmlDictPtr dict; /* dictionnary for the parser */
+ const xmlChar * *atts; /* array for the attributes callbacks */
+ int maxatts; /* the size of the array */
+ int docdict; /* use strings from dict to build tree */
+
+ /*
+ * pre-interned strings
+ */
+ const xmlChar *str_xml;
+ const xmlChar *str_xmlns;
+ const xmlChar *str_xml_ns;
+
+ /*
+ * Everything below is used only by the new SAX mode
+ */
+ int sax2; /* operating in the new SAX mode */
+ int nsNr; /* the number of inherited namespaces */
+ int nsMax; /* the size of the arrays */
+ const xmlChar * *nsTab; /* the array of prefix/namespace name */
+ int *attallocs; /* which attribute were allocated */
+ void * *pushTab; /* array of data for push */
+ xmlHashTablePtr attsDefault; /* defaulted attributes if any */
+ xmlHashTablePtr attsSpecial; /* non-CDATA attributes if any */
+ int nsWellFormed; /* is the document XML Nanespace okay */
+ int options; /* Extra options */
+
+ /*
+ * Those fields are needed only for treaming parsing so far
+ */
+ int dictNames; /* Use dictionary names for the tree */
+ int freeElemsNr; /* number of freed element nodes */
+ xmlNodePtr freeElems; /* List of freed element nodes */
+ int freeAttrsNr; /* number of freed attributes nodes */
+ xmlAttrPtr freeAttrs; /* List of freed attributes nodes */
+
+ /*
+ * the complete error informations for the last error.
+ */
+ xmlError lastError;
+};
+
+/**
+ * xmlSAXLocator:
+ *
+ * A SAX Locator.
+ */
+struct _xmlSAXLocator {
+ const xmlChar *(*getPublicId)(void *ctx);
+ const xmlChar *(*getSystemId)(void *ctx);
+ int (*getLineNumber)(void *ctx);
+ int (*getColumnNumber)(void *ctx);
+};
+
+/**
+ * xmlSAXHandler:
+ *
+ * A SAX handler is bunch of callbacks called by the parser when processing
+ * of the input generate data or structure informations.
+ */
+
+/**
+ * resolveEntitySAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * Callback:
+ * The entity loader, to control the loading of external entities,
+ * the application can either:
+ * - override this resolveEntity() callback in the SAX block
+ * - or better use the xmlSetExternalEntityLoader() function to
+ * set up it's own entity resolution routine
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+typedef xmlParserInputPtr (*resolveEntitySAXFunc) (void *ctx,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+/**
+ * internalSubsetSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: the root element name
+ * @ExternalID: the external ID
+ * @SystemID: the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on internal subset declaration.
+ */
+typedef void (*internalSubsetSAXFunc) (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+/**
+ * externalSubsetSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: the root element name
+ * @ExternalID: the external ID
+ * @SystemID: the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on external subset declaration.
+ */
+typedef void (*externalSubsetSAXFunc) (void *ctx,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+/**
+ * getEntitySAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get an entity by name.
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+typedef xmlEntityPtr (*getEntitySAXFunc) (void *ctx,
+ const xmlChar *name);
+/**
+ * getParameterEntitySAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get a parameter entity by name.
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+typedef xmlEntityPtr (*getParameterEntitySAXFunc) (void *ctx,
+ const xmlChar *name);
+/**
+ * entityDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: the entity name
+ * @type: the entity type
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @content: the entity value (without processing).
+ *
+ * An entity definition has been parsed.
+ */
+typedef void (*entityDeclSAXFunc) (void *ctx,
+ const xmlChar *name,
+ int type,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ xmlChar *content);
+/**
+ * notationDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The name of the notation
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * What to do when a notation declaration has been parsed.
+ */
+typedef void (*notationDeclSAXFunc)(void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId);
+/**
+ * attributeDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @elem: the name of the element
+ * @fullname: the attribute name
+ * @type: the attribute type
+ * @def: the type of default value
+ * @defaultValue: the attribute default value
+ * @tree: the tree of enumerated value set
+ *
+ * An attribute definition has been parsed.
+ */
+typedef void (*attributeDeclSAXFunc)(void *ctx,
+ const xmlChar *elem,
+ const xmlChar *fullname,
+ int type,
+ int def,
+ const xmlChar *defaultValue,
+ xmlEnumerationPtr tree);
+/**
+ * elementDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: the element name
+ * @type: the element type
+ * @content: the element value tree
+ *
+ * An element definition has been parsed.
+ */
+typedef void (*elementDeclSAXFunc)(void *ctx,
+ const xmlChar *name,
+ int type,
+ xmlElementContentPtr content);
+/**
+ * unparsedEntityDeclSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The name of the entity
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @notationName: the name of the notation
+ *
+ * What to do when an unparsed entity declaration is parsed.
+ */
+typedef void (*unparsedEntityDeclSAXFunc)(void *ctx,
+ const xmlChar *name,
+ const xmlChar *publicId,
+ const xmlChar *systemId,
+ const xmlChar *notationName);
+/**
+ * setDocumentLocatorSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @loc: A SAX Locator
+ *
+ * Receive the document locator at startup, actually xmlDefaultSAXLocator.
+ * Everything is available on the context, so this is useless in our case.
+ */
+typedef void (*setDocumentLocatorSAXFunc) (void *ctx,
+ xmlSAXLocatorPtr loc);
+/**
+ * startDocumentSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Called when the document start being processed.
+ */
+typedef void (*startDocumentSAXFunc) (void *ctx);
+/**
+ * endDocumentSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Called when the document end has been detected.
+ */
+typedef void (*endDocumentSAXFunc) (void *ctx);
+/**
+ * startElementSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The element name, including namespace prefix
+ * @atts: An array of name/value attributes pairs, NULL terminated
+ *
+ * Called when an opening tag has been processed.
+ */
+typedef void (*startElementSAXFunc) (void *ctx,
+ const xmlChar *name,
+ const xmlChar **atts);
+/**
+ * endElementSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The element name
+ *
+ * Called when the end of an element has been detected.
+ */
+typedef void (*endElementSAXFunc) (void *ctx,
+ const xmlChar *name);
+/**
+ * attributeSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The attribute name, including namespace prefix
+ * @value: The attribute value
+ *
+ * Handle an attribute that has been read by the parser.
+ * The default handling is to convert the attribute into an
+ * DOM subtree and past it in a new xmlAttr element added to
+ * the element.
+ */
+typedef void (*attributeSAXFunc) (void *ctx,
+ const xmlChar *name,
+ const xmlChar *value);
+/**
+ * referenceSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Called when an entity reference is detected.
+ */
+typedef void (*referenceSAXFunc) (void *ctx,
+ const xmlChar *name);
+/**
+ * charactersSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * Receiving some chars from the parser.
+ */
+typedef void (*charactersSAXFunc) (void *ctx,
+ const xmlChar *ch,
+ int len);
+/**
+ * ignorableWhitespaceSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * Receiving some ignorable whitespaces from the parser.
+ * UNUSED: by default the DOM building will use characters.
+ */
+typedef void (*ignorableWhitespaceSAXFunc) (void *ctx,
+ const xmlChar *ch,
+ int len);
+/**
+ * processingInstructionSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @target: the target name
+ * @data: the PI data's
+ *
+ * A processing instruction has been parsed.
+ */
+typedef void (*processingInstructionSAXFunc) (void *ctx,
+ const xmlChar *target,
+ const xmlChar *data);
+/**
+ * commentSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @value: the comment content
+ *
+ * A comment has been parsed.
+ */
+typedef void (*commentSAXFunc) (void *ctx,
+ const xmlChar *value);
+/**
+ * cdataBlockSAXFunc:
+ * @ctx: the user data (XML parser context)
+ * @value: The pcdata content
+ * @len: the block length
+ *
+ * Called when a pcdata block has been parsed.
+ */
+typedef void (*cdataBlockSAXFunc) (
+ void *ctx,
+ const xmlChar *value,
+ int len);
+/**
+ * warningSAXFunc:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a warning messages, callback.
+ */
+typedef void (*warningSAXFunc) (void *ctx,
+ const char *msg, ...);
+/**
+ * errorSAXFunc:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format an error messages, callback.
+ */
+typedef void (*errorSAXFunc) (void *ctx,
+ const char *msg, ...);
+/**
+ * fatalErrorSAXFunc:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format fatal error messages, callback.
+ * Note: so far fatalError() SAX callbacks are not used, error()
+ * get all the callbacks for errors.
+ */
+typedef void (*fatalErrorSAXFunc) (void *ctx,
+ const char *msg, ...);
+/**
+ * isStandaloneSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Is this document tagged standalone?
+ *
+ * Returns 1 if true
+ */
+typedef int (*isStandaloneSAXFunc) (void *ctx);
+/**
+ * hasInternalSubsetSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Does this document has an internal subset.
+ *
+ * Returns 1 if true
+ */
+typedef int (*hasInternalSubsetSAXFunc) (void *ctx);
+
+/**
+ * hasExternalSubsetSAXFunc:
+ * @ctx: the user data (XML parser context)
+ *
+ * Does this document has an external subset?
+ *
+ * Returns 1 if true
+ */
+typedef int (*hasExternalSubsetSAXFunc) (void *ctx);
+
+/************************************************************************
+ * *
+ * The SAX version 2 API extensions *
+ * *
+ ************************************************************************/
+/**
+ * XML_SAX2_MAGIC:
+ *
+ * Special constant found in SAX2 blocks initialized fields
+ */
+#define XML_SAX2_MAGIC 0xDEEDBEAF
+
+/**
+ * startElementNsSAX2Func:
+ * @ctx: the user data (XML parser context)
+ * @localname: the local name of the element
+ * @prefix: the element namespace prefix if available
+ * @URI: the element namespace name if available
+ * @nb_namespaces: number of namespace definitions on that node
+ * @namespaces: pointer to the array of prefix/URI pairs namespace definitions
+ * @nb_attributes: the number of attributes on that node
+ * @nb_defaulted: the number of defaulted attributes. The defaulted
+ * ones are at the end of the array
+ * @attributes: pointer to the array of (localname/prefix/URI/value/end)
+ * attribute values.
+ *
+ * SAX2 callback when an element start has been detected by the parser.
+ * It provides the namespace informations for the element, as well as
+ * the new namespace declarations on the element.
+ */
+
+typedef void (*startElementNsSAX2Func) (void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI,
+ int nb_namespaces,
+ const xmlChar **namespaces,
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes);
+
+/**
+ * endElementNsSAX2Func:
+ * @ctx: the user data (XML parser context)
+ * @localname: the local name of the element
+ * @prefix: the element namespace prefix if available
+ * @URI: the element namespace name if available
+ *
+ * SAX2 callback when an element end has been detected by the parser.
+ * It provides the namespace informations for the element.
+ */
+
+typedef void (*endElementNsSAX2Func) (void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI);
+
+
+struct _xmlSAXHandler {
+ internalSubsetSAXFunc internalSubset;
+ isStandaloneSAXFunc isStandalone;
+ hasInternalSubsetSAXFunc hasInternalSubset;
+ hasExternalSubsetSAXFunc hasExternalSubset;
+ resolveEntitySAXFunc resolveEntity;
+ getEntitySAXFunc getEntity;
+ entityDeclSAXFunc entityDecl;
+ notationDeclSAXFunc notationDecl;
+ attributeDeclSAXFunc attributeDecl;
+ elementDeclSAXFunc elementDecl;
+ unparsedEntityDeclSAXFunc unparsedEntityDecl;
+ setDocumentLocatorSAXFunc setDocumentLocator;
+ startDocumentSAXFunc startDocument;
+ endDocumentSAXFunc endDocument;
+ startElementSAXFunc startElement;
+ endElementSAXFunc endElement;
+ referenceSAXFunc reference;
+ charactersSAXFunc characters;
+ ignorableWhitespaceSAXFunc ignorableWhitespace;
+ processingInstructionSAXFunc processingInstruction;
+ commentSAXFunc comment;
+ warningSAXFunc warning;
+ errorSAXFunc error;
+ fatalErrorSAXFunc fatalError; /* unused error() get all the errors */
+ getParameterEntitySAXFunc getParameterEntity;
+ cdataBlockSAXFunc cdataBlock;
+ externalSubsetSAXFunc externalSubset;
+ unsigned int initialized;
+ /* The following fields are extensions available only on version 2 */
+ void *_private;
+ startElementNsSAX2Func startElementNs;
+ endElementNsSAX2Func endElementNs;
+ xmlStructuredErrorFunc serror;
+};
+
+/*
+ * SAX Version 1
+ */
+typedef struct _xmlSAXHandlerV1 xmlSAXHandlerV1;
+typedef xmlSAXHandlerV1 *xmlSAXHandlerV1Ptr;
+struct _xmlSAXHandlerV1 {
+ internalSubsetSAXFunc internalSubset;
+ isStandaloneSAXFunc isStandalone;
+ hasInternalSubsetSAXFunc hasInternalSubset;
+ hasExternalSubsetSAXFunc hasExternalSubset;
+ resolveEntitySAXFunc resolveEntity;
+ getEntitySAXFunc getEntity;
+ entityDeclSAXFunc entityDecl;
+ notationDeclSAXFunc notationDecl;
+ attributeDeclSAXFunc attributeDecl;
+ elementDeclSAXFunc elementDecl;
+ unparsedEntityDeclSAXFunc unparsedEntityDecl;
+ setDocumentLocatorSAXFunc setDocumentLocator;
+ startDocumentSAXFunc startDocument;
+ endDocumentSAXFunc endDocument;
+ startElementSAXFunc startElement;
+ endElementSAXFunc endElement;
+ referenceSAXFunc reference;
+ charactersSAXFunc characters;
+ ignorableWhitespaceSAXFunc ignorableWhitespace;
+ processingInstructionSAXFunc processingInstruction;
+ commentSAXFunc comment;
+ warningSAXFunc warning;
+ errorSAXFunc error;
+ fatalErrorSAXFunc fatalError; /* unused error() get all the errors */
+ getParameterEntitySAXFunc getParameterEntity;
+ cdataBlockSAXFunc cdataBlock;
+ externalSubsetSAXFunc externalSubset;
+ unsigned int initialized;
+};
+
+
+/**
+ * xmlExternalEntityLoader:
+ * @URL: The System ID of the resource requested
+ * @ID: The Public ID of the resource requested
+ * @context: the XML parser context
+ *
+ * External entity loaders types.
+ *
+ * Returns the entity input parser.
+ */
+typedef xmlParserInputPtr (*xmlExternalEntityLoader) (const char *URL,
+ const char *ID,
+ xmlParserCtxtPtr context);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <libxml/encoding.h>
+#include <libxml/xmlIO.h>
+#include <libxml/globals.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * Init/Cleanup
+ */
+XMLPUBFUN void XMLCALL
+ xmlInitParser (void);
+XMLPUBFUN void XMLCALL
+ xmlCleanupParser (void);
+
+/*
+ * Input functions
+ */
+XMLPUBFUN int XMLCALL
+ xmlParserInputRead (xmlParserInputPtr in,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlParserInputGrow (xmlParserInputPtr in,
+ int len);
+
+/*
+ * Basic parsing Interfaces
+ */
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseDoc (xmlChar *cur);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseMemory (const char *buffer,
+ int size);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseFile (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlSubstituteEntitiesDefault(int val);
+XMLPUBFUN int XMLCALL
+ xmlKeepBlanksDefault (int val);
+XMLPUBFUN void XMLCALL
+ xmlStopParser (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlPedanticParserDefault(int val);
+XMLPUBFUN int XMLCALL
+ xmlLineNumbersDefault (int val);
+
+/*
+ * Recovery mode
+ */
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlRecoverDoc (xmlChar *cur);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlRecoverMemory (const char *buffer,
+ int size);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlRecoverFile (const char *filename);
+
+/*
+ * Less common routines and SAX interfaces
+ */
+XMLPUBFUN int XMLCALL
+ xmlParseDocument (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseExtParsedEnt (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseDoc (xmlSAXHandlerPtr sax,
+ xmlChar *cur,
+ int recovery);
+XMLPUBFUN int XMLCALL
+ xmlSAXUserParseFile (xmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlSAXUserParseMemory (xmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *buffer,
+ int size);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseMemory (xmlSAXHandlerPtr sax,
+ const char *buffer,
+ int size,
+ int recovery);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax,
+ const char *buffer,
+ int size,
+ int recovery,
+ void *data);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseFile (xmlSAXHandlerPtr sax,
+ const char *filename,
+ int recovery);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseFileWithData (xmlSAXHandlerPtr sax,
+ const char *filename,
+ int recovery,
+ void *data);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlSAXParseEntity (xmlSAXHandlerPtr sax,
+ const char *filename);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlParseEntity (const char *filename);
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlParseDTD (const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlSAXParseDTD (xmlSAXHandlerPtr sax,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlIOParseDTD (xmlSAXHandlerPtr sax,
+ xmlParserInputBufferPtr input,
+ xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL
+ xmlParseBalancedChunkMemory(xmlDocPtr doc,
+ xmlSAXHandlerPtr sax,
+ void *user_data,
+ int depth,
+ const xmlChar *string,
+ xmlNodePtr *lst);
+XMLPUBFUN int XMLCALL
+ xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc,
+ xmlSAXHandlerPtr sax,
+ void *user_data,
+ int depth,
+ const xmlChar *string,
+ xmlNodePtr *lst,
+ int recover);
+XMLPUBFUN int XMLCALL
+ xmlParseExternalEntity (xmlDocPtr doc,
+ xmlSAXHandlerPtr sax,
+ void *user_data,
+ int depth,
+ const xmlChar *URL,
+ const xmlChar *ID,
+ xmlNodePtr *lst);
+XMLPUBFUN int XMLCALL
+ xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx,
+ const xmlChar *URL,
+ const xmlChar *ID,
+ xmlNodePtr *lst);
+
+/*
+ * Parser contexts handling.
+ */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlNewParserCtxt (void);
+XMLPUBFUN int XMLCALL
+ xmlInitParserCtxt (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlClearParserCtxt (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlFreeParserCtxt (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt,
+ const xmlChar* buffer,
+ const char *filename);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateDocParserCtxt (const xmlChar *cur);
+
+/*
+ * Reading/setting optional parsing features.
+ */
+
+XMLPUBFUN int XMLCALL
+ xmlGetFeaturesList (int *len,
+ const char **result);
+XMLPUBFUN int XMLCALL
+ xmlGetFeature (xmlParserCtxtPtr ctxt,
+ const char *name,
+ void *result);
+XMLPUBFUN int XMLCALL
+ xmlSetFeature (xmlParserCtxtPtr ctxt,
+ const char *name,
+ void *value);
+
+#ifdef LIBXML_PUSH_ENABLED
+/*
+ * Interfaces for the Push mode.
+ */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax,
+ void *user_data,
+ const char *chunk,
+ int size,
+ const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlParseChunk (xmlParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ int terminate);
+#endif /* LIBXML_PUSH_ENABLED */
+
+/*
+ * Special I/O mode.
+ */
+
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateIOParserCtxt (xmlSAXHandlerPtr sax,
+ void *user_data,
+ xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ xmlCharEncoding enc);
+
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewIOInputStream (xmlParserCtxtPtr ctxt,
+ xmlParserInputBufferPtr input,
+ xmlCharEncoding enc);
+
+/*
+ * Node infos.
+ */
+XMLPUBFUN const xmlParserNodeInfo* XMLCALL
+ xmlParserFindNodeInfo (const xmlParserCtxtPtr ctxt,
+ const xmlNodePtr node);
+XMLPUBFUN void XMLCALL
+ xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq);
+XMLPUBFUN void XMLCALL
+ xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq);
+XMLPUBFUN unsigned long XMLCALL
+ xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq,
+ const xmlNodePtr node);
+XMLPUBFUN void XMLCALL
+ xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt,
+ const xmlParserNodeInfoPtr info);
+
+/*
+ * External entities handling actually implemented in xmlIO.
+ */
+
+XMLPUBFUN void XMLCALL
+ xmlSetExternalEntityLoader(xmlExternalEntityLoader f);
+XMLPUBFUN xmlExternalEntityLoader XMLCALL
+ xmlGetExternalEntityLoader(void);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlLoadExternalEntity (const char *URL,
+ const char *ID,
+ xmlParserCtxtPtr ctxt);
+
+/*
+ * Index lookup, actually implemented in the encoding module
+ */
+XMLPUBFUN long XMLCALL
+ xmlByteConsumed (xmlParserCtxtPtr ctxt);
+
+/*
+ * New set of simpler/more flexible APIs
+ */
+/**
+ * xmlParserOption:
+ *
+ * This is the set of XML parser options that can be passed down
+ * to the xmlReadDoc() and similar calls.
+ */
+typedef enum {
+ XML_PARSE_RECOVER = 1<<0, /* recover on errors */
+ XML_PARSE_NOENT = 1<<1, /* substitute entities */
+ XML_PARSE_DTDLOAD = 1<<2, /* load the external subset */
+ XML_PARSE_DTDATTR = 1<<3, /* default DTD attributes */
+ XML_PARSE_DTDVALID = 1<<4, /* validate with the DTD */
+ XML_PARSE_NOERROR = 1<<5, /* suppress error reports */
+ XML_PARSE_NOWARNING = 1<<6, /* suppress warning reports */
+ XML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */
+ XML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */
+ XML_PARSE_SAX1 = 1<<9, /* use the SAX1 interface internally */
+ XML_PARSE_XINCLUDE = 1<<10,/* Implement XInclude substitition */
+ XML_PARSE_NONET = 1<<11,/* Forbid network access */
+ 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 */
+} xmlParserOption;
+
+XMLPUBFUN void XMLCALL
+ xmlCtxtReset (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlCtxtResetPush (xmlParserCtxtPtr ctxt,
+ const char *chunk,
+ int size,
+ const char *filename,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ xmlCtxtUseOptions (xmlParserCtxtPtr ctxt,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadDoc (const xmlChar *cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadFile (const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadMemory (const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadFd (int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlReadIO (xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadDoc (xmlParserCtxtPtr ctxt,
+ const xmlChar *cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadFile (xmlParserCtxtPtr ctxt,
+ const char *filename,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadMemory (xmlParserCtxtPtr ctxt,
+ const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadFd (xmlParserCtxtPtr ctxt,
+ int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCtxtReadIO (xmlParserCtxtPtr ctxt,
+ xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_PARSER_H__ */
+
diff --git a/include/libxml/parserInternals.h b/include/libxml/parserInternals.h
new file mode 100644
index 0000000..7e4503d
--- /dev/null
+++ b/include/libxml/parserInternals.h
@@ -0,0 +1,576 @@
+/*
+ * Summary: internals routines exported by the parser.
+ * Description: this module exports a number of internal parsing routines
+ * they are not really all intended for applications but
+ * can prove useful doing low level processing.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_PARSER_INTERNALS_H__
+#define __XML_PARSER_INTERNALS_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/HTMLparser.h>
+#include <libxml/chvalid.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlParserMaxDepth:
+ *
+ * arbitrary depth limit for the XML documents that we allow to
+ * process. This is not a limitation of the parser but a safety
+ * boundary feature.
+ */
+XMLPUBVAR unsigned int xmlParserMaxDepth;
+
+ /**
+ * XML_MAX_NAMELEN:
+ *
+ * Identifiers can be longer, but this will be more costly
+ * at runtime.
+ */
+#define XML_MAX_NAMELEN 100
+
+/**
+ * INPUT_CHUNK:
+ *
+ * The parser tries to always have that amount of input ready.
+ * One of the point is providing context when reporting errors.
+ */
+#define INPUT_CHUNK 250
+
+/************************************************************************
+ * *
+ * UNICODE version of the macros. *
+ * *
+ ************************************************************************/
+/**
+ * IS_BYTE_CHAR:
+ * @c: an byte value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [2] Char ::= #x9 | #xA | #xD | [#x20...]
+ * any byte character in the accepted range
+ */
+#define IS_BYTE_CHAR(c) xmlIsChar_ch(c)
+
+/**
+ * IS_CHAR:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
+ * | [#x10000-#x10FFFF]
+ * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
+ */
+#define IS_CHAR(c) xmlIsCharQ(c)
+
+/**
+ * IS_CHAR_CH:
+ * @c: an xmlChar (usually an unsigned char)
+ *
+ * Behaves like IS_CHAR on single-byte value
+ */
+#define IS_CHAR_CH(c) xmlIsChar_ch(c)
+
+/**
+ * IS_BLANK:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [3] S ::= (#x20 | #x9 | #xD | #xA)+
+ */
+#define IS_BLANK(c) xmlIsBlankQ(c)
+
+/**
+ * IS_BLANK_CH:
+ * @c: an xmlChar value (normally unsigned char)
+ *
+ * Behaviour same as IS_BLANK
+ */
+#define IS_BLANK_CH(c) xmlIsBlank_ch(c)
+
+/**
+ * IS_BASECHAR:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [85] BaseChar ::= ... long list see REC ...
+ */
+#define IS_BASECHAR(c) xmlIsBaseCharQ(c)
+
+/**
+ * IS_DIGIT:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [88] Digit ::= ... long list see REC ...
+ */
+#define IS_DIGIT(c) xmlIsDigitQ(c)
+
+/**
+ * IS_DIGIT_CH:
+ * @c: an xmlChar value (usually an unsigned char)
+ *
+ * Behaves like IS_DIGIT but with a single byte argument
+ */
+#define IS_DIGIT_CH(c) xmlIsDigit_ch(c)
+
+/**
+ * IS_COMBINING:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [87] CombiningChar ::= ... long list see REC ...
+ */
+#define IS_COMBINING(c) xmlIsCombiningQ(c)
+
+/**
+ * IS_COMBINING_CH:
+ * @c: an xmlChar (usually an unsigned char)
+ *
+ * Always false (all combining chars > 0xff)
+ */
+#define IS_COMBINING_CH(c) 0
+
+/**
+ * IS_EXTENDER:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 |
+ * #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] |
+ * [#x309D-#x309E] | [#x30FC-#x30FE]
+ */
+#define IS_EXTENDER(c) xmlIsExtenderQ(c)
+
+/**
+ * IS_EXTENDER_CH:
+ * @c: an xmlChar value (usually an unsigned char)
+ *
+ * Behaves like IS_EXTENDER but with a single-byte argument
+ */
+#define IS_EXTENDER_CH(c) xmlIsExtender_ch(c)
+
+/**
+ * IS_IDEOGRAPHIC:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]
+ */
+#define IS_IDEOGRAPHIC(c) xmlIsIdeographicQ(c)
+
+/**
+ * IS_LETTER:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [84] Letter ::= BaseChar | Ideographic
+ */
+#define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c))
+
+/**
+ * IS_LETTER_CH:
+ * @c: an xmlChar value (normally unsigned char)
+ *
+ * Macro behaves like IS_LETTER, but only check base chars
+ *
+ */
+#define IS_LETTER_CH(c) xmlIsBaseChar_ch(c)
+/**
+ * IS_PUBIDCHAR:
+ * @c: an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
+ */
+#define IS_PUBIDCHAR(c) xmlIsPubidCharQ(c)
+
+/**
+ * IS_PUBIDCHAR_CH:
+ * @c: an xmlChar value (normally unsigned char)
+ *
+ * Same as IS_PUBIDCHAR but for single-byte value
+ */
+#define IS_PUBIDCHAR_CH(c) xmlIsPubidChar_ch(c)
+
+/**
+ * SKIP_EOL:
+ * @p: and UTF8 string pointer
+ *
+ * Skips the end of line chars.
+ */
+#define SKIP_EOL(p) \
+ if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; } \
+ if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; }
+
+/**
+ * MOVETO_ENDTAG:
+ * @p: and UTF8 string pointer
+ *
+ * Skips to the next '>' char.
+ */
+#define MOVETO_ENDTAG(p) \
+ while ((*p) && (*(p) != '>')) (p)++
+
+/**
+ * MOVETO_STARTTAG:
+ * @p: and UTF8 string pointer
+ *
+ * Skips to the next '<' char.
+ */
+#define MOVETO_STARTTAG(p) \
+ while ((*p) && (*(p) != '<')) (p)++
+
+/**
+ * Global variables used for predefined strings.
+ */
+XMLPUBVAR const xmlChar xmlStringText[];
+XMLPUBVAR const xmlChar xmlStringTextNoenc[];
+XMLPUBVAR const xmlChar xmlStringComment[];
+
+/*
+ * Function to finish the work of the macros where needed.
+ */
+XMLPUBFUN int XMLCALL xmlIsLetter (int c);
+
+/**
+ * Parser context.
+ */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateFileParserCtxt (const char *filename);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateURLParserCtxt (const char *filename,
+ int options);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateMemoryParserCtxt(const char *buffer,
+ int size);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+ xmlCreateEntityParserCtxt(const xmlChar *URL,
+ const xmlChar *ID,
+ const xmlChar *base);
+XMLPUBFUN int XMLCALL
+ xmlSwitchEncoding (xmlParserCtxtPtr ctxt,
+ xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL
+ xmlSwitchToEncoding (xmlParserCtxtPtr ctxt,
+ xmlCharEncodingHandlerPtr handler);
+XMLPUBFUN int XMLCALL
+ xmlSwitchInputEncoding (xmlParserCtxtPtr ctxt,
+ xmlParserInputPtr input,
+ xmlCharEncodingHandlerPtr handler);
+
+#ifdef IN_LIBXML
+/* internal error reporting */
+XMLPUBFUN void XMLCALL
+ __xmlErrEncoding (xmlParserCtxtPtr ctxt,
+ xmlParserErrors error,
+ const char *msg,
+ const xmlChar * str1,
+ const xmlChar * str2);
+#endif
+/**
+ * Entities
+ */
+XMLPUBFUN void XMLCALL
+ xmlHandleEntity (xmlParserCtxtPtr ctxt,
+ xmlEntityPtr entity);
+
+/**
+ * Input Streams.
+ */
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewStringInputStream (xmlParserCtxtPtr ctxt,
+ const xmlChar *buffer);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewEntityInputStream (xmlParserCtxtPtr ctxt,
+ xmlEntityPtr entity);
+XMLPUBFUN void XMLCALL
+ xmlPushInput (xmlParserCtxtPtr ctxt,
+ xmlParserInputPtr input);
+XMLPUBFUN xmlChar XMLCALL
+ xmlPopInput (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlFreeInputStream (xmlParserInputPtr input);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewInputFromFile (xmlParserCtxtPtr ctxt,
+ const char *filename);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNewInputStream (xmlParserCtxtPtr ctxt);
+
+/**
+ * Namespaces.
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlSplitQName (xmlParserCtxtPtr ctxt,
+ const xmlChar *name,
+ xmlChar **prefix);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNamespaceParseQName (xmlParserCtxtPtr ctxt,
+ xmlChar **prefix);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseQuotedString (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseNamespace (xmlParserCtxtPtr ctxt);
+
+/**
+ * Generic production rules.
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlScanName (xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParseName (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseNmtoken (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseEntityValue (xmlParserCtxtPtr ctxt,
+ xmlChar **orig);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseAttValue (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseSystemLiteral (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParsePubidLiteral (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseCharData (xmlParserCtxtPtr ctxt,
+ int cdata);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseExternalID (xmlParserCtxtPtr ctxt,
+ xmlChar **publicID,
+ int strict);
+XMLPUBFUN void XMLCALL
+ xmlParseComment (xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParsePITarget (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParsePI (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseNotationDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseEntityDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseDefaultDecl (xmlParserCtxtPtr ctxt,
+ xmlChar **value);
+XMLPUBFUN xmlEnumerationPtr XMLCALL
+ xmlParseNotationType (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlEnumerationPtr XMLCALL
+ xmlParseEnumerationType (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseEnumeratedType (xmlParserCtxtPtr ctxt,
+ xmlEnumerationPtr *tree);
+XMLPUBFUN int XMLCALL
+ xmlParseAttributeType (xmlParserCtxtPtr ctxt,
+ xmlEnumerationPtr *tree);
+XMLPUBFUN void XMLCALL
+ xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlParseElementMixedContentDecl
+ (xmlParserCtxtPtr ctxt,
+ int inputchk);
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlParseElementChildrenContentDecl
+ (xmlParserCtxtPtr ctxt,
+ int inputchk);
+XMLPUBFUN int XMLCALL
+ xmlParseElementContentDecl(xmlParserCtxtPtr ctxt,
+ const xmlChar *name,
+ xmlElementContentPtr *result);
+XMLPUBFUN int XMLCALL
+ xmlParseElementDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseMarkupDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseCharRef (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlEntityPtr XMLCALL
+ xmlParseEntityRef (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseReference (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParsePEReference (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParseAttribute (xmlParserCtxtPtr ctxt,
+ xmlChar **value);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParseStartTag (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseEndTag (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseCDSect (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseContent (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseElement (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseVersionNum (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseVersionInfo (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlParseEncName (xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlParseEncodingDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlParseSDDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseXMLDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseTextDecl (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseMisc (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlParseExternalSubset (xmlParserCtxtPtr ctxt,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+/**
+ * XML_SUBSTITUTE_NONE:
+ *
+ * If no entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_NONE 0
+/**
+ * XML_SUBSTITUTE_REF:
+ *
+ * Whether general entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_REF 1
+/**
+ * XML_SUBSTITUTE_PEREF:
+ *
+ * Whether parameter entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_PEREF 2
+/**
+ * XML_SUBSTITUTE_BOTH:
+ *
+ * Both general and parameter entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_BOTH 3
+
+XMLPUBFUN xmlChar * XMLCALL
+ xmlDecodeEntities (xmlParserCtxtPtr ctxt,
+ int len,
+ int what,
+ xmlChar end,
+ xmlChar end2,
+ xmlChar end3);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStringDecodeEntities (xmlParserCtxtPtr ctxt,
+ const xmlChar *str,
+ int what,
+ xmlChar end,
+ xmlChar end2,
+ xmlChar end3);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStringLenDecodeEntities (xmlParserCtxtPtr ctxt,
+ const xmlChar *str,
+ int len,
+ int what,
+ xmlChar end,
+ xmlChar end2,
+ xmlChar end3);
+
+/*
+ * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP.
+ */
+XMLPUBFUN int XMLCALL nodePush (xmlParserCtxtPtr ctxt,
+ xmlNodePtr value);
+XMLPUBFUN xmlNodePtr XMLCALL nodePop (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL inputPush (xmlParserCtxtPtr ctxt,
+ xmlParserInputPtr value);
+XMLPUBFUN xmlParserInputPtr XMLCALL inputPop (xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL namePop (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL namePush (xmlParserCtxtPtr ctxt,
+ const xmlChar *value);
+
+/*
+ * other commodities shared between parser.c and parserInternals.
+ */
+XMLPUBFUN int XMLCALL xmlSkipBlankChars (xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL xmlStringCurrentChar (xmlParserCtxtPtr ctxt,
+ const xmlChar *cur,
+ int *len);
+XMLPUBFUN void XMLCALL xmlParserHandlePEReference(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL xmlParserHandleReference(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL xmlCheckLanguageID (const xmlChar *lang);
+
+/*
+ * Really core function shared with HTML parser.
+ */
+XMLPUBFUN int XMLCALL xmlCurrentChar (xmlParserCtxtPtr ctxt,
+ int *len);
+XMLPUBFUN int XMLCALL xmlCopyCharMultiByte (xmlChar *out,
+ int val);
+XMLPUBFUN int XMLCALL xmlCopyChar (int len,
+ xmlChar *out,
+ int val);
+XMLPUBFUN void XMLCALL xmlNextChar (xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL xmlParserInputShrink (xmlParserInputPtr in);
+
+#ifdef LIBXML_HTML_ENABLED
+/*
+ * Actually comes from the HTML parser but launched from the init stuff.
+ */
+XMLPUBFUN void XMLCALL htmlInitAutoClose (void);
+XMLPUBFUN htmlParserCtxtPtr XMLCALL htmlCreateFileParserCtxt(const char *filename,
+ const char *encoding);
+#endif
+
+/*
+ * Specific function to keep track of entities references
+ * and used by the XSLT debugger.
+ */
+/**
+ * xmlEntityReferenceFunc:
+ * @ent: the entity
+ * @firstNode: the fist node in the chunk
+ * @lastNode: the last nod in the chunk
+ *
+ * Callback function used when one needs to be able to track back the
+ * provenance of a chunk of nodes inherited from an entity replacement.
+ */
+typedef void (*xmlEntityReferenceFunc) (xmlEntityPtr ent,
+ xmlNodePtr firstNode,
+ xmlNodePtr lastNode);
+
+XMLPUBFUN void XMLCALL xmlSetEntityReferenceFunc (xmlEntityReferenceFunc func);
+
+#ifdef IN_LIBXML
+/*
+ * internal only
+ */
+XMLPUBFUN void XMLCALL
+ xmlErrMemory (xmlParserCtxtPtr ctxt,
+ const char *extra);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_PARSER_INTERNALS_H__ */
diff --git a/include/libxml/pattern.h b/include/libxml/pattern.h
new file mode 100644
index 0000000..9db9c4e
--- /dev/null
+++ b/include/libxml/pattern.h
@@ -0,0 +1,48 @@
+/*
+ * Summary: pattern expression handling
+ * Description: allows to compile and test pattern expressions for nodes
+ * either in a tree or based on a parser state.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_PATTERN_H__
+#define __XML_PATTERN_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/dict.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlPattern:
+ *
+ * A compiled (XPath based) pattern to select nodes
+ */
+typedef struct _xmlPattern xmlPattern;
+typedef xmlPattern *xmlPatternPtr;
+
+XMLPUBFUN void XMLCALL
+ xmlFreePattern (xmlPatternPtr comp);
+
+XMLPUBFUN void XMLCALL
+ xmlFreePatternList (xmlPatternPtr comp);
+
+XMLPUBFUN xmlPatternPtr XMLCALL
+ xmlPatterncompile (const xmlChar *pattern,
+ xmlDict *dict,
+ int flags,
+ const xmlChar **namespaces);
+XMLPUBFUN int XMLCALL
+ xmlPatternMatch (xmlPatternPtr comp,
+ xmlNodePtr node);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_PATTERN_H__ */
diff --git a/include/libxml/relaxng.h b/include/libxml/relaxng.h
new file mode 100644
index 0000000..e970289
--- /dev/null
+++ b/include/libxml/relaxng.h
@@ -0,0 +1,179 @@
+/*
+ * Summary: implementation of the Relax-NG validation
+ * Description: implementation of the Relax-NG validation
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_RELAX_NG__
+#define __XML_RELAX_NG__
+
+#include <libxml/xmlversion.h>
+#include <libxml/hash.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _xmlRelaxNG xmlRelaxNG;
+typedef xmlRelaxNG *xmlRelaxNGPtr;
+
+
+/**
+ * A schemas validation context
+ */
+typedef void (*xmlRelaxNGValidityErrorFunc) (void *ctx, const char *msg, ...);
+typedef void (*xmlRelaxNGValidityWarningFunc) (void *ctx, const char *msg, ...);
+
+typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
+typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
+
+typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
+typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
+
+/*
+ * xmlRelaxNGValidErr:
+ *
+ * List of possible Relax NG validation errors
+ */
+typedef enum {
+ XML_RELAXNG_OK = 0,
+ XML_RELAXNG_ERR_MEMORY,
+ XML_RELAXNG_ERR_TYPE,
+ XML_RELAXNG_ERR_TYPEVAL,
+ XML_RELAXNG_ERR_DUPID,
+ XML_RELAXNG_ERR_TYPECMP,
+ XML_RELAXNG_ERR_NOSTATE,
+ XML_RELAXNG_ERR_NODEFINE,
+ XML_RELAXNG_ERR_LISTEXTRA,
+ XML_RELAXNG_ERR_LISTEMPTY,
+ XML_RELAXNG_ERR_INTERNODATA,
+ XML_RELAXNG_ERR_INTERSEQ,
+ XML_RELAXNG_ERR_INTEREXTRA,
+ XML_RELAXNG_ERR_ELEMNAME,
+ XML_RELAXNG_ERR_ATTRNAME,
+ XML_RELAXNG_ERR_ELEMNONS,
+ XML_RELAXNG_ERR_ATTRNONS,
+ XML_RELAXNG_ERR_ELEMWRONGNS,
+ XML_RELAXNG_ERR_ATTRWRONGNS,
+ XML_RELAXNG_ERR_ELEMEXTRANS,
+ XML_RELAXNG_ERR_ATTREXTRANS,
+ XML_RELAXNG_ERR_ELEMNOTEMPTY,
+ XML_RELAXNG_ERR_NOELEM,
+ XML_RELAXNG_ERR_NOTELEM,
+ XML_RELAXNG_ERR_ATTRVALID,
+ XML_RELAXNG_ERR_CONTENTVALID,
+ XML_RELAXNG_ERR_EXTRACONTENT,
+ XML_RELAXNG_ERR_INVALIDATTR,
+ XML_RELAXNG_ERR_DATAELEM,
+ XML_RELAXNG_ERR_VALELEM,
+ XML_RELAXNG_ERR_LISTELEM,
+ XML_RELAXNG_ERR_DATATYPE,
+ XML_RELAXNG_ERR_VALUE,
+ XML_RELAXNG_ERR_LIST,
+ XML_RELAXNG_ERR_NOGRAMMAR,
+ XML_RELAXNG_ERR_EXTRADATA,
+ XML_RELAXNG_ERR_LACKDATA,
+ XML_RELAXNG_ERR_INTERNAL,
+ XML_RELAXNG_ERR_ELEMWRONG,
+ XML_RELAXNG_ERR_TEXTWRONG
+} xmlRelaxNGValidErr;
+
+/*
+ * xmlRelaxNGParserFlags:
+ *
+ * List of possible Relax NG Parser flags
+ */
+typedef enum {
+ XML_RELAXNGP_NONE = 0,
+ XML_RELAXNGP_FREE_DOC = 1,
+ XML_RELAXNGP_CRNG = 2
+} xmlRelaxNGParserFlag;
+/*
+ * Interfaces for parsing.
+ */
+XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
+ xmlRelaxNGNewParserCtxt (const char *URL);
+XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
+ xmlRelaxNGNewMemParserCtxt (const char *buffer,
+ int size);
+XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
+ xmlRelaxNGNewDocParserCtxt (xmlDocPtr doc);
+
+XMLPUBFUN int XMLCALL
+ xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt,
+ int flag);
+
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc err,
+ xmlRelaxNGValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc *err,
+ xmlRelaxNGValidityWarningFunc *warn,
+ void **ctx);
+XMLPUBFUN xmlRelaxNGPtr XMLCALL
+ xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGFree (xmlRelaxNGPtr schema);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGDump (FILE *output,
+ xmlRelaxNGPtr schema);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGDumpTree (FILE * output,
+ xmlRelaxNGPtr schema);
+#endif /* LIBXML_OUTPUT_ENABLED */
+/*
+ * Interfaces for validating
+ */
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc err,
+ xmlRelaxNGValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc *err,
+ xmlRelaxNGValidityWarningFunc *warn,
+ void **ctx);
+XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
+ xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGCleanupTypes (void);
+/*
+ * Interfaces for progressive validation when possible
+ */
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt,
+ const xmlChar *data,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_RELAX_NG__ */
diff --git a/include/libxml/schemasInternals.h b/include/libxml/schemasInternals.h
new file mode 100644
index 0000000..e2907d8
--- /dev/null
+++ b/include/libxml/schemasInternals.h
@@ -0,0 +1,394 @@
+/*
+ * Summary: internal interfaces for XML Schemas
+ * Description: internal interfaces for the XML Schemas handling
+ * and schema validity checking
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMA_INTERNALS_H__
+#define __XML_SCHEMA_INTERNALS_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/xmlregexp.h>
+#include <libxml/hash.h>
+#include <libxml/dict.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * XML Schemas defines multiple type of types.
+ */
+typedef enum {
+ XML_SCHEMA_TYPE_BASIC = 1,
+ XML_SCHEMA_TYPE_ANY,
+ XML_SCHEMA_TYPE_FACET,
+ XML_SCHEMA_TYPE_SIMPLE,
+ XML_SCHEMA_TYPE_COMPLEX,
+ XML_SCHEMA_TYPE_SEQUENCE,
+ XML_SCHEMA_TYPE_CHOICE,
+ XML_SCHEMA_TYPE_ALL,
+ XML_SCHEMA_TYPE_SIMPLE_CONTENT,
+ XML_SCHEMA_TYPE_COMPLEX_CONTENT,
+ XML_SCHEMA_TYPE_UR,
+ XML_SCHEMA_TYPE_RESTRICTION,
+ XML_SCHEMA_TYPE_EXTENSION,
+ XML_SCHEMA_TYPE_ELEMENT,
+ XML_SCHEMA_TYPE_ATTRIBUTE,
+ XML_SCHEMA_TYPE_ATTRIBUTEGROUP,
+ XML_SCHEMA_TYPE_GROUP,
+ XML_SCHEMA_TYPE_NOTATION,
+ XML_SCHEMA_TYPE_LIST,
+ XML_SCHEMA_TYPE_UNION,
+ XML_SCHEMA_FACET_MININCLUSIVE = 1000,
+ XML_SCHEMA_FACET_MINEXCLUSIVE,
+ XML_SCHEMA_FACET_MAXINCLUSIVE,
+ XML_SCHEMA_FACET_MAXEXCLUSIVE,
+ XML_SCHEMA_FACET_TOTALDIGITS,
+ XML_SCHEMA_FACET_FRACTIONDIGITS,
+ XML_SCHEMA_FACET_PATTERN,
+ XML_SCHEMA_FACET_ENUMERATION,
+ XML_SCHEMA_FACET_WHITESPACE,
+ XML_SCHEMA_FACET_LENGTH,
+ XML_SCHEMA_FACET_MAXLENGTH,
+ XML_SCHEMA_FACET_MINLENGTH
+} xmlSchemaTypeType;
+
+typedef enum {
+ XML_SCHEMA_CONTENT_UNKNOWN = 0,
+ XML_SCHEMA_CONTENT_EMPTY = 1,
+ XML_SCHEMA_CONTENT_ELEMENTS,
+ XML_SCHEMA_CONTENT_MIXED,
+ XML_SCHEMA_CONTENT_SIMPLE,
+ XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS,
+ XML_SCHEMA_CONTENT_BASIC,
+ XML_SCHEMA_CONTENT_ANY
+} xmlSchemaContentType;
+
+typedef struct _xmlSchemaVal xmlSchemaVal;
+typedef xmlSchemaVal *xmlSchemaValPtr;
+
+typedef struct _xmlSchemaType xmlSchemaType;
+typedef xmlSchemaType *xmlSchemaTypePtr;
+
+typedef struct _xmlSchemaFacet xmlSchemaFacet;
+typedef xmlSchemaFacet *xmlSchemaFacetPtr;
+
+/**
+ * Annotation
+ */
+typedef struct _xmlSchemaAnnot xmlSchemaAnnot;
+typedef xmlSchemaAnnot *xmlSchemaAnnotPtr;
+struct _xmlSchemaAnnot {
+ struct _xmlSchemaAnnot *next;
+ xmlNodePtr content; /* the annotation */
+};
+
+/**
+ * XML_SCHEMAS_ANYATTR_SKIP:
+ *
+ * Skip unknown attribute from validation
+ */
+#define XML_SCHEMAS_ANYATTR_SKIP 1
+/**
+ * XML_SCHEMAS_ANYATTR_LAX:
+ *
+ * Ignore validation non definition on attributes
+ */
+#define XML_SCHEMAS_ANYATTR_LAX 2
+/**
+ * XML_SCHEMAS_ANYATTR_STRICT:
+ *
+ * Apply strict validation rules on attributes
+ */
+#define XML_SCHEMAS_ANYATTR_STRICT 3
+
+/**
+ * XML_SCHEMAS_ATTR_NSDEFAULT:
+ *
+ * allow elements in no namespace
+ */
+#define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7
+
+/**
+ * xmlSchemaAttribute:
+ * An attribute definition.
+ */
+
+typedef struct _xmlSchemaAttribute xmlSchemaAttribute;
+typedef xmlSchemaAttribute *xmlSchemaAttributePtr;
+struct _xmlSchemaAttribute {
+ xmlSchemaTypeType type; /* The kind of type */
+ struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
+ const xmlChar *name;
+ const xmlChar *id;
+ const xmlChar *ref;
+ const xmlChar *refNs;
+ const xmlChar *typeName;
+ const xmlChar *typeNs;
+ xmlSchemaAnnotPtr annot;
+
+ xmlSchemaTypePtr base;
+ int occurs;
+ const xmlChar *defValue;
+ xmlSchemaTypePtr subtypes;
+ xmlNodePtr node;
+ const xmlChar *targetNamespace;
+ int flags;
+};
+
+/**
+ * An attribute group definition.
+ *
+ * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
+ * must be kept similar
+ */
+typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;
+typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr;
+struct _xmlSchemaAttributeGroup {
+ xmlSchemaTypeType type; /* The kind of type */
+ struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
+ const xmlChar *name;
+ const xmlChar *id;
+ const xmlChar *ref;
+ const xmlChar *refNs;
+ xmlSchemaAnnotPtr annot;
+
+ xmlSchemaAttributePtr attributes;
+ xmlNodePtr node;
+};
+
+
+/**
+ * XML_SCHEMAS_TYPE_MIXED:
+ *
+ * the element content type is mixed
+ */
+#define XML_SCHEMAS_TYPE_MIXED 1 << 0
+
+/**
+ * _xmlSchemaType:
+ *
+ * Schemas type definition.
+ */
+struct _xmlSchemaType {
+ xmlSchemaTypeType type; /* The kind of type */
+ struct _xmlSchemaType *next;/* the next type if in a sequence ... */
+ const xmlChar *name;
+ const xmlChar *id;
+ const xmlChar *ref;
+ const xmlChar *refNs;
+ xmlSchemaAnnotPtr annot;
+ xmlSchemaTypePtr subtypes;
+ xmlSchemaAttributePtr attributes;
+ xmlNodePtr node;
+ int minOccurs;
+ int maxOccurs;
+
+ int flags;
+ xmlSchemaContentType contentType;
+ const xmlChar *base;
+ const xmlChar *baseNs;
+ xmlSchemaTypePtr baseType;
+ xmlSchemaFacetPtr facets;
+ struct _xmlSchemaType *redef;/* possible redefinitions for the type */
+};
+
+/*
+ * xmlSchemaElement:
+ * An element definition.
+ *
+ * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
+ * structures must be kept similar
+ */
+/**
+ * XML_SCHEMAS_ELEM_NILLABLE:
+ *
+ * the element is nillable
+ */
+#define XML_SCHEMAS_ELEM_NILLABLE 1 << 0
+/**
+ * XML_SCHEMAS_ELEM_GLOBAL:
+ *
+ * the element is global
+ */
+#define XML_SCHEMAS_ELEM_GLOBAL 1 << 1
+/**
+ * XML_SCHEMAS_ELEM_DEFAULT:
+ *
+ * the element has a default value
+ */
+#define XML_SCHEMAS_ELEM_DEFAULT 1 << 2
+/**
+ * XML_SCHEMAS_ELEM_FIXED:
+ *
+ * the element has a fixed value
+ */
+#define XML_SCHEMAS_ELEM_FIXED 1 << 3
+/**
+ * XML_SCHEMAS_ELEM_ABSTRACT:
+ *
+ * the element is abstract
+ */
+#define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4
+/**
+ * XML_SCHEMAS_ELEM_TOPLEVEL:
+ *
+ * the element is top level
+ */
+#define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5
+/**
+ * XML_SCHEMAS_ELEM_REF:
+ *
+ * the element is a reference to a type
+ */
+#define XML_SCHEMAS_ELEM_REF 1 << 6
+/**
+ * XML_SCHEMAS_ELEM_NSDEFAULT:
+ *
+ * allow elements in no namespace
+ */
+#define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7
+
+typedef struct _xmlSchemaElement xmlSchemaElement;
+typedef xmlSchemaElement *xmlSchemaElementPtr;
+struct _xmlSchemaElement {
+ xmlSchemaTypeType type; /* The kind of type */
+ struct _xmlSchemaType *next;/* the next type if in a sequence ... */
+ const xmlChar *name;
+ const xmlChar *id;
+ const xmlChar *ref;
+ const xmlChar *refNs;
+ xmlSchemaAnnotPtr annot;
+ xmlSchemaTypePtr subtypes;
+ xmlSchemaAttributePtr attributes;
+ xmlNodePtr node;
+ int minOccurs;
+ int maxOccurs;
+
+ int flags;
+ const xmlChar *targetNamespace;
+ const xmlChar *namedType;
+ const xmlChar *namedTypeNs;
+ const xmlChar *substGroup;
+ const xmlChar *substGroupNs;
+ const xmlChar *scope;
+ const xmlChar *value;
+ struct _xmlSchemaElement *refDecl;
+ xmlRegexpPtr contModel;
+ xmlSchemaContentType contentType;
+};
+
+/*
+ * XML_SCHEMAS_FACET_UNKNOWN:
+ *
+ * unknown facet handling
+ */
+#define XML_SCHEMAS_FACET_UNKNOWN 0
+/*
+ * XML_SCHEMAS_FACET_PRESERVE:
+ *
+ * preserve the type of the facet
+ */
+#define XML_SCHEMAS_FACET_PRESERVE 1
+/*
+ * XML_SCHEMAS_FACET_REPLACE:
+ *
+ * replace the type of the facet
+ */
+#define XML_SCHEMAS_FACET_REPLACE 2
+/*
+ * XML_SCHEMAS_FACET_COLLAPSE:
+ *
+ * collapse the types of the facet
+ */
+#define XML_SCHEMAS_FACET_COLLAPSE 3
+
+/**
+ * A facet definition.
+ */
+struct _xmlSchemaFacet {
+ xmlSchemaTypeType type; /* The kind of type */
+ struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */
+ const xmlChar *value;
+ const xmlChar *id;
+ xmlSchemaAnnotPtr annot;
+ xmlNodePtr node;
+ int fixed;
+ int whitespace;
+ xmlSchemaValPtr val;
+ xmlRegexpPtr regexp;
+};
+
+/**
+ * A notation definition.
+ */
+typedef struct _xmlSchemaNotation xmlSchemaNotation;
+typedef xmlSchemaNotation *xmlSchemaNotationPtr;
+struct _xmlSchemaNotation {
+ xmlSchemaTypeType type; /* The kind of type */
+ const xmlChar *name;
+ xmlSchemaAnnotPtr annot;
+ const xmlChar *identifier;
+};
+
+/**
+ * XML_SCHEMAS_QUALIF_ELEM:
+ *
+ * the shemas requires qualified elements
+ */
+#define XML_SCHEMAS_QUALIF_ELEM 1 << 0
+/**
+ * XML_SCHEMAS_QUALIF_ATTR:
+ *
+ * the shemas requires qualified attributes
+ */
+#define XML_SCHEMAS_QUALIF_ATTR 1 << 1
+/**
+ * _xmlSchema:
+ *
+ * A Schemas definition
+ */
+struct _xmlSchema {
+ const xmlChar *name; /* schema name */
+ const xmlChar *targetNamespace; /* the target namespace */
+ const xmlChar *version;
+ const xmlChar *id;
+ xmlDocPtr doc;
+ xmlSchemaAnnotPtr annot;
+ int flags;
+
+ xmlHashTablePtr typeDecl;
+ xmlHashTablePtr attrDecl;
+ xmlHashTablePtr attrgrpDecl;
+ xmlHashTablePtr elemDecl;
+ xmlHashTablePtr notaDecl;
+
+ xmlHashTablePtr schemasImports;
+
+ void *_private; /* unused by the library for users or bindings */
+ xmlHashTablePtr groupDecl;
+ xmlDictPtr dict;
+ void *includes; /* the includes, this is opaque for now */
+ int preserve; /* whether to free the document */
+};
+
+XMLPUBFUN void XMLCALL xmlSchemaFreeType (xmlSchemaTypePtr type);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#endif /* __XML_SCHEMA_INTERNALS_H__ */
+
+
diff --git a/include/libxml/threads.h b/include/libxml/threads.h
new file mode 100644
index 0000000..fb6b704
--- /dev/null
+++ b/include/libxml/threads.h
@@ -0,0 +1,81 @@
+/**
+ * Summary: interfaces for thread handling
+ * Description: set of generic threading related routines
+ * should work with pthreads, Windows native or TLS threads
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_THREADS_H__
+#define __XML_THREADS_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * xmlMutex are a simple mutual exception locks.
+ */
+typedef struct _xmlMutex xmlMutex;
+typedef xmlMutex *xmlMutexPtr;
+
+/*
+ * xmlRMutex are reentrant mutual exception locks.
+ */
+typedef struct _xmlRMutex xmlRMutex;
+typedef xmlRMutex *xmlRMutexPtr;
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/globals.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN xmlMutexPtr XMLCALL
+ xmlNewMutex (void);
+XMLPUBFUN void XMLCALL
+ xmlMutexLock (xmlMutexPtr tok);
+XMLPUBFUN void XMLCALL
+ xmlMutexUnlock (xmlMutexPtr tok);
+XMLPUBFUN void XMLCALL
+ xmlFreeMutex (xmlMutexPtr tok);
+
+XMLPUBFUN xmlRMutexPtr XMLCALL
+ xmlNewRMutex (void);
+XMLPUBFUN void XMLCALL
+ xmlRMutexLock (xmlRMutexPtr tok);
+XMLPUBFUN void XMLCALL
+ xmlRMutexUnlock (xmlRMutexPtr tok);
+XMLPUBFUN void XMLCALL
+ xmlFreeRMutex (xmlRMutexPtr tok);
+
+/*
+ * Library wide APIs.
+ */
+XMLPUBFUN void XMLCALL
+ xmlInitThreads (void);
+XMLPUBFUN void XMLCALL
+ xmlLockLibrary (void);
+XMLPUBFUN void XMLCALL
+ xmlUnlockLibrary(void);
+XMLPUBFUN int XMLCALL
+ xmlGetThreadId (void);
+XMLPUBFUN int XMLCALL
+ xmlIsMainThread (void);
+XMLPUBFUN void XMLCALL
+ xmlCleanupThreads(void);
+XMLPUBFUN xmlGlobalStatePtr XMLCALL
+ xmlGetGlobalState(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __XML_THREADS_H__ */
diff --git a/include/libxml/tree.h b/include/libxml/tree.h
new file mode 100644
index 0000000..bc4dbe3
--- /dev/null
+++ b/include/libxml/tree.h
@@ -0,0 +1,1087 @@
+/*
+ * Summary: interfaces for tree manipulation
+ * Description: this module describes the structures found in an tree resulting
+ * from an XML or HTML parsing, as well as the API provided for
+ * various processing on that tree
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_TREE_H__
+#define __XML_TREE_H__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Some of the basic types pointer to structures:
+ */
+/* xmlIO.h */
+typedef struct _xmlParserInputBuffer xmlParserInputBuffer;
+typedef xmlParserInputBuffer *xmlParserInputBufferPtr;
+
+typedef struct _xmlOutputBuffer xmlOutputBuffer;
+typedef xmlOutputBuffer *xmlOutputBufferPtr;
+
+/* parser.h */
+typedef struct _xmlParserInput xmlParserInput;
+typedef xmlParserInput *xmlParserInputPtr;
+
+typedef struct _xmlParserCtxt xmlParserCtxt;
+typedef xmlParserCtxt *xmlParserCtxtPtr;
+
+typedef struct _xmlSAXLocator xmlSAXLocator;
+typedef xmlSAXLocator *xmlSAXLocatorPtr;
+
+typedef struct _xmlSAXHandler xmlSAXHandler;
+typedef xmlSAXHandler *xmlSAXHandlerPtr;
+
+/* entities.h */
+typedef struct _xmlEntity xmlEntity;
+typedef xmlEntity *xmlEntityPtr;
+
+/**
+ * BASE_BUFFER_SIZE:
+ *
+ * default buffer size 4000.
+ */
+#define BASE_BUFFER_SIZE 4096
+
+/**
+ * XML_XML_NAMESPACE:
+ *
+ * This is the namespace for the special xml: prefix predefined in the
+ * XML Namespace specification.
+ */
+#define XML_XML_NAMESPACE \
+ (const xmlChar *) "http://www.w3.org/XML/1998/namespace"
+
+/*
+ * The different element types carried by an XML tree.
+ *
+ * NOTE: This is synchronized with DOM Level1 values
+ * See http://www.w3.org/TR/REC-DOM-Level-1/
+ *
+ * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should
+ * be deprecated to use an XML_DTD_NODE.
+ */
+typedef enum {
+ XML_ELEMENT_NODE= 1,
+ XML_ATTRIBUTE_NODE= 2,
+ XML_TEXT_NODE= 3,
+ XML_CDATA_SECTION_NODE= 4,
+ XML_ENTITY_REF_NODE= 5,
+ XML_ENTITY_NODE= 6,
+ XML_PI_NODE= 7,
+ XML_COMMENT_NODE= 8,
+ XML_DOCUMENT_NODE= 9,
+ XML_DOCUMENT_TYPE_NODE= 10,
+ XML_DOCUMENT_FRAG_NODE= 11,
+ XML_NOTATION_NODE= 12,
+ XML_HTML_DOCUMENT_NODE= 13,
+ XML_DTD_NODE= 14,
+ XML_ELEMENT_DECL= 15,
+ XML_ATTRIBUTE_DECL= 16,
+ XML_ENTITY_DECL= 17,
+ XML_NAMESPACE_DECL= 18,
+ XML_XINCLUDE_START= 19,
+ XML_XINCLUDE_END= 20
+#ifdef LIBXML_DOCB_ENABLED
+ ,XML_DOCB_DOCUMENT_NODE= 21
+#endif
+} xmlElementType;
+
+
+/**
+ * xmlNotation:
+ *
+ * A DTD Notation definition.
+ */
+
+typedef struct _xmlNotation xmlNotation;
+typedef xmlNotation *xmlNotationPtr;
+struct _xmlNotation {
+ const xmlChar *name; /* Notation name */
+ const xmlChar *PublicID; /* Public identifier, if any */
+ const xmlChar *SystemID; /* System identifier, if any */
+};
+
+/**
+ * xmlAttributeType:
+ *
+ * A DTD Attribute type definition.
+ */
+
+typedef enum {
+ XML_ATTRIBUTE_CDATA = 1,
+ XML_ATTRIBUTE_ID,
+ XML_ATTRIBUTE_IDREF ,
+ XML_ATTRIBUTE_IDREFS,
+ XML_ATTRIBUTE_ENTITY,
+ XML_ATTRIBUTE_ENTITIES,
+ XML_ATTRIBUTE_NMTOKEN,
+ XML_ATTRIBUTE_NMTOKENS,
+ XML_ATTRIBUTE_ENUMERATION,
+ XML_ATTRIBUTE_NOTATION
+} xmlAttributeType;
+
+/**
+ * xmlAttributeDefault:
+ *
+ * A DTD Attribute default definition.
+ */
+
+typedef enum {
+ XML_ATTRIBUTE_NONE = 1,
+ XML_ATTRIBUTE_REQUIRED,
+ XML_ATTRIBUTE_IMPLIED,
+ XML_ATTRIBUTE_FIXED
+} xmlAttributeDefault;
+
+/**
+ * xmlEnumeration:
+ *
+ * List structure used when there is an enumeration in DTDs.
+ */
+
+typedef struct _xmlEnumeration xmlEnumeration;
+typedef xmlEnumeration *xmlEnumerationPtr;
+struct _xmlEnumeration {
+ struct _xmlEnumeration *next; /* next one */
+ const xmlChar *name; /* Enumeration name */
+};
+
+/**
+ * xmlAttribute:
+ *
+ * An Attribute declaration in a DTD.
+ */
+
+typedef struct _xmlAttribute xmlAttribute;
+typedef xmlAttribute *xmlAttributePtr;
+struct _xmlAttribute {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_ATTRIBUTE_DECL, must be second ! */
+ const xmlChar *name; /* Attribute name */
+ struct _xmlNode *children; /* NULL */
+ struct _xmlNode *last; /* NULL */
+ struct _xmlDtd *parent; /* -> DTD */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ struct _xmlAttribute *nexth; /* next in hash table */
+ xmlAttributeType atype; /* The attribute type */
+ xmlAttributeDefault def; /* the default */
+ const xmlChar *defaultValue; /* or the default value */
+ xmlEnumerationPtr tree; /* or the enumeration tree if any */
+ const xmlChar *prefix; /* the namespace prefix if any */
+ const xmlChar *elem; /* Element holding the attribute */
+};
+
+/**
+ * xmlElementContentType:
+ *
+ * Possible definitions of element content types.
+ */
+typedef enum {
+ XML_ELEMENT_CONTENT_PCDATA = 1,
+ XML_ELEMENT_CONTENT_ELEMENT,
+ XML_ELEMENT_CONTENT_SEQ,
+ XML_ELEMENT_CONTENT_OR
+} xmlElementContentType;
+
+/**
+ * xmlElementContentOccur:
+ *
+ * Possible definitions of element content occurrences.
+ */
+typedef enum {
+ XML_ELEMENT_CONTENT_ONCE = 1,
+ XML_ELEMENT_CONTENT_OPT,
+ XML_ELEMENT_CONTENT_MULT,
+ XML_ELEMENT_CONTENT_PLUS
+} xmlElementContentOccur;
+
+/**
+ * xmlElementContent:
+ *
+ * An XML Element content as stored after parsing an element definition
+ * in a DTD.
+ */
+
+typedef struct _xmlElementContent xmlElementContent;
+typedef xmlElementContent *xmlElementContentPtr;
+struct _xmlElementContent {
+ xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
+ xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
+ const xmlChar *name; /* Element name */
+ struct _xmlElementContent *c1; /* first child */
+ struct _xmlElementContent *c2; /* second child */
+ struct _xmlElementContent *parent; /* parent */
+ const xmlChar *prefix; /* Namespace prefix */
+};
+
+/**
+ * xmlElementTypeVal:
+ *
+ * The different possibilities for an element content type.
+ */
+
+typedef enum {
+ XML_ELEMENT_TYPE_UNDEFINED = 0,
+ XML_ELEMENT_TYPE_EMPTY = 1,
+ XML_ELEMENT_TYPE_ANY,
+ XML_ELEMENT_TYPE_MIXED,
+ XML_ELEMENT_TYPE_ELEMENT
+} xmlElementTypeVal;
+
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/xmlregexp.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlElement:
+ *
+ * An XML Element declaration from a DTD.
+ */
+
+typedef struct _xmlElement xmlElement;
+typedef xmlElement *xmlElementPtr;
+struct _xmlElement {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_ELEMENT_DECL, must be second ! */
+ const xmlChar *name; /* Element name */
+ struct _xmlNode *children; /* NULL */
+ struct _xmlNode *last; /* NULL */
+ struct _xmlDtd *parent; /* -> DTD */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ xmlElementTypeVal etype; /* The type */
+ xmlElementContentPtr content; /* the allowed element content */
+ xmlAttributePtr attributes; /* List of the declared attributes */
+ const xmlChar *prefix; /* the namespace prefix if any */
+#ifdef LIBXML_REGEXP_ENABLED
+ xmlRegexpPtr contModel; /* the validating regexp */
+#else
+ void *contModel;
+#endif
+};
+
+
+/**
+ * XML_LOCAL_NAMESPACE:
+ *
+ * A namespace declaration node.
+ */
+#define XML_LOCAL_NAMESPACE XML_NAMESPACE_DECL
+typedef xmlElementType xmlNsType;
+
+/**
+ * xmlNs:
+ *
+ * An XML namespace.
+ * Note that prefix == NULL is valid, it defines the default namespace
+ * within the subtree (until overridden).
+ *
+ * xmlNsType is unified with xmlElementType.
+ */
+
+typedef struct _xmlNs xmlNs;
+typedef xmlNs *xmlNsPtr;
+struct _xmlNs {
+ struct _xmlNs *next; /* next Ns link for this node */
+ xmlNsType type; /* global or local */
+ const xmlChar *href; /* URL for the namespace */
+ const xmlChar *prefix; /* prefix for the namespace */
+ void *_private; /* application data */
+};
+
+/**
+ * xmlDtd:
+ *
+ * An XML DTD, as defined by <!DOCTYPE ... There is actually one for
+ * the internal subset and for the external subset.
+ */
+typedef struct _xmlDtd xmlDtd;
+typedef xmlDtd *xmlDtdPtr;
+struct _xmlDtd {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_DTD_NODE, must be second ! */
+ const xmlChar *name; /* Name of the DTD */
+ struct _xmlNode *children; /* the value of the property link */
+ struct _xmlNode *last; /* last child link */
+ struct _xmlDoc *parent; /* child->parent link */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ /* End of common part */
+ void *notations; /* Hash table for notations if any */
+ void *elements; /* Hash table for elements if any */
+ void *attributes; /* Hash table for attributes if any */
+ void *entities; /* Hash table for entities if any */
+ const xmlChar *ExternalID; /* External identifier for PUBLIC DTD */
+ const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC DTD */
+ void *pentities; /* Hash table for param entities if any */
+};
+
+/**
+ * xmlAttr:
+ *
+ * An attribute on an XML node.
+ */
+typedef struct _xmlAttr xmlAttr;
+typedef xmlAttr *xmlAttrPtr;
+struct _xmlAttr {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_ATTRIBUTE_NODE, must be second ! */
+ const xmlChar *name; /* the name of the property */
+ struct _xmlNode *children; /* the value of the property */
+ struct _xmlNode *last; /* NULL */
+ struct _xmlNode *parent; /* child->parent link */
+ struct _xmlAttr *next; /* next sibling link */
+ struct _xmlAttr *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+ xmlNs *ns; /* pointer to the associated namespace */
+ xmlAttributeType atype; /* the attribute type if validating */
+ void *psvi; /* for type/PSVI informations */
+};
+
+/**
+ * xmlID:
+ *
+ * An XML ID instance.
+ */
+
+typedef struct _xmlID xmlID;
+typedef xmlID *xmlIDPtr;
+struct _xmlID {
+ struct _xmlID *next; /* next ID */
+ const xmlChar *value; /* The ID name */
+ xmlAttrPtr attr; /* The attribute holding it */
+ const xmlChar *name; /* The attribute if attr is not available */
+ int lineno; /* The line number if attr is not available */
+ struct _xmlDoc *doc; /* The document holding the ID */
+};
+
+/**
+ * xmlRef:
+ *
+ * An XML IDREF instance.
+ */
+
+typedef struct _xmlRef xmlRef;
+typedef xmlRef *xmlRefPtr;
+struct _xmlRef {
+ struct _xmlRef *next; /* next Ref */
+ const xmlChar *value; /* The Ref name */
+ xmlAttrPtr attr; /* The attribute holding it */
+ const xmlChar *name; /* The attribute if attr is not available */
+ int lineno; /* The line number if attr is not available */
+};
+
+/**
+ * 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.
+ */
+typedef struct _xmlNode xmlNode;
+typedef xmlNode *xmlNodePtr;
+struct _xmlNode {
+ void *_private; /* application data */
+ xmlElementType type; /* type number, must be second ! */
+ const xmlChar *name; /* the name of the node, or the entity */
+ struct _xmlNode *children; /* parent->childs link */
+ struct _xmlNode *last; /* last child link */
+ struct _xmlNode *parent; /* child->parent link */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* the containing document */
+
+ /* End of common part */
+ xmlNs *ns; /* pointer to the associated namespace */
+ xmlChar *content; /* the content */
+ struct _xmlAttr *properties;/* properties list */
+ xmlNs *nsDef; /* namespace definitions on this node */
+ void *psvi; /* for type/PSVI informations */
+ unsigned short line; /* line number */
+ unsigned short extra; /* extra data for XPath/XSLT */
+};
+
+/**
+ * XML_GET_CONTENT:
+ *
+ * Macro to extract the content pointer of a node.
+ */
+#define XML_GET_CONTENT(n) \
+ ((n)->type == XML_ELEMENT_NODE ? NULL : (n)->content)
+
+/**
+ * XML_GET_LINE:
+ *
+ * Macro to extract the line number of an element node.
+ */
+#define XML_GET_LINE(n) \
+ (xmlGetLineNo(n))
+
+
+/**
+ * xmlDoc:
+ *
+ * An XML document.
+ */
+typedef struct _xmlDoc xmlDoc;
+typedef xmlDoc *xmlDocPtr;
+struct _xmlDoc {
+ void *_private; /* application data */
+ xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */
+ char *name; /* name/filename/URI of the document */
+ struct _xmlNode *children; /* the document tree */
+ struct _xmlNode *last; /* last child link */
+ struct _xmlNode *parent; /* child->parent link */
+ struct _xmlNode *next; /* next sibling link */
+ struct _xmlNode *prev; /* previous sibling link */
+ struct _xmlDoc *doc; /* autoreference to itself */
+
+ /* End of common part */
+ int compression;/* level of zlib compression */
+ int standalone; /* standalone document (no external refs) */
+ struct _xmlDtd *intSubset; /* the document internal subset */
+ struct _xmlDtd *extSubset; /* the document external subset */
+ struct _xmlNs *oldNs; /* Global namespace, the old way */
+ const xmlChar *version; /* the XML version string */
+ const xmlChar *encoding; /* external initial encoding, if any */
+ void *ids; /* Hash table for ID attributes if any */
+ void *refs; /* Hash table for IDREFs attributes if any */
+ const xmlChar *URL; /* The URI for that document */
+ int charset; /* encoding of the in-memory content
+ actually an xmlCharEncoding */
+ struct _xmlDict *dict; /* dict used to allocate names or NULL */
+ void *psvi; /* for type/PSVI informations */
+};
+
+/**
+ * xmlChildrenNode:
+ *
+ * Macro for compatibility naming layer with libxml1. Maps
+ * to "children."
+ */
+#ifndef xmlChildrenNode
+#define xmlChildrenNode children
+#endif
+
+/**
+ * xmlRootNode:
+ *
+ * Macro for compatibility naming layer with libxml1. Maps
+ * to "children".
+ */
+#ifndef xmlRootNode
+#define xmlRootNode children
+#endif
+
+/*
+ * Variables.
+ */
+
+/*
+ * Some helper functions
+ */
+XMLPUBFUN int XMLCALL
+ xmlValidateNCName (const xmlChar *value,
+ int space);
+XMLPUBFUN int XMLCALL
+ xmlValidateQName (const xmlChar *value,
+ int space);
+XMLPUBFUN int XMLCALL
+ xmlValidateName (const xmlChar *value,
+ int space);
+XMLPUBFUN int XMLCALL
+ xmlValidateNMToken (const xmlChar *value,
+ int space);
+
+XMLPUBFUN xmlChar * XMLCALL
+ xmlBuildQName (const xmlChar *ncname,
+ const xmlChar *prefix,
+ xmlChar *memory,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlSplitQName2 (const xmlChar *name,
+ xmlChar **prefix);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlSplitQName3 (const xmlChar *name,
+ int *len);
+
+/*
+ * Handling Buffers.
+ */
+
+XMLPUBFUN void XMLCALL
+ xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme);
+XMLPUBFUN xmlBufferAllocationScheme XMLCALL
+ xmlGetBufferAllocationScheme(void);
+
+XMLPUBFUN xmlBufferPtr XMLCALL
+ xmlBufferCreate (void);
+XMLPUBFUN xmlBufferPtr XMLCALL
+ xmlBufferCreateSize (size_t size);
+XMLPUBFUN xmlBufferPtr XMLCALL
+ xmlBufferCreateStatic (void *mem,
+ size_t size);
+XMLPUBFUN int XMLCALL
+ xmlBufferResize (xmlBufferPtr buf,
+ unsigned int size);
+XMLPUBFUN void XMLCALL
+ xmlBufferFree (xmlBufferPtr buf);
+XMLPUBFUN int XMLCALL
+ xmlBufferDump (FILE *file,
+ xmlBufferPtr buf);
+XMLPUBFUN void XMLCALL
+ xmlBufferAdd (xmlBufferPtr buf,
+ const xmlChar *str,
+ int len);
+XMLPUBFUN void XMLCALL
+ xmlBufferAddHead (xmlBufferPtr buf,
+ const xmlChar *str,
+ int len);
+XMLPUBFUN void XMLCALL
+ xmlBufferCat (xmlBufferPtr buf,
+ const xmlChar *str);
+XMLPUBFUN void XMLCALL
+ xmlBufferCCat (xmlBufferPtr buf,
+ const char *str);
+XMLPUBFUN int XMLCALL
+ xmlBufferShrink (xmlBufferPtr buf,
+ unsigned int len);
+XMLPUBFUN int XMLCALL
+ xmlBufferGrow (xmlBufferPtr buf,
+ unsigned int len);
+XMLPUBFUN void XMLCALL
+ xmlBufferEmpty (xmlBufferPtr buf);
+XMLPUBFUN const xmlChar* XMLCALL
+ xmlBufferContent (const xmlBufferPtr buf);
+XMLPUBFUN void XMLCALL
+ xmlBufferSetAllocationScheme(xmlBufferPtr buf,
+ xmlBufferAllocationScheme scheme);
+XMLPUBFUN int XMLCALL
+ xmlBufferLength (const xmlBufferPtr buf);
+
+/*
+ * Creating/freeing new structures.
+ */
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlCreateIntSubset (xmlDocPtr doc,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlNewDtd (xmlDocPtr doc,
+ const xmlChar *name,
+ const xmlChar *ExternalID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlGetIntSubset (xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlFreeDtd (xmlDtdPtr cur);
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlNewGlobalNs (xmlDocPtr doc,
+ const xmlChar *href,
+ const xmlChar *prefix);
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlNewNs (xmlNodePtr node,
+ const xmlChar *href,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ xmlFreeNs (xmlNsPtr cur);
+XMLPUBFUN void XMLCALL
+ xmlFreeNsList (xmlNsPtr cur);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlNewDoc (const xmlChar *version);
+XMLPUBFUN void XMLCALL
+ xmlFreeDoc (xmlDocPtr cur);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlNewDocProp (xmlDocPtr doc,
+ const xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlNewProp (xmlNodePtr node,
+ const xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlNewNsProp (xmlNodePtr node,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlNewNsPropEatName (xmlNodePtr node,
+ xmlNsPtr ns,
+ xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ xmlFreePropList (xmlAttrPtr cur);
+XMLPUBFUN void XMLCALL
+ xmlFreeProp (xmlAttrPtr cur);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlCopyProp (xmlNodePtr target,
+ xmlAttrPtr cur);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlCopyPropList (xmlNodePtr target,
+ xmlAttrPtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlDtdPtr XMLCALL
+ xmlCopyDtd (xmlDtdPtr dtd);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlCopyDoc (xmlDocPtr doc,
+ int recursive);
+#endif /* LIBXML_TREE_ENABLED */
+
+/*
+ * Creating new nodes.
+ */
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocNode (xmlDocPtr doc,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocNodeEatName (xmlDocPtr doc,
+ xmlNsPtr ns,
+ xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocRawNode (xmlDocPtr doc,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewNode (xmlNsPtr ns,
+ const xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewNodeEatName (xmlNsPtr ns,
+ xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewChild (xmlNodePtr parent,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewTextChild (xmlNodePtr parent,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocText (xmlDocPtr doc,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewText (const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewPI (const xmlChar *name,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocTextLen (xmlDocPtr doc,
+ const xmlChar *content,
+ int len);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewTextLen (const xmlChar *content,
+ int len);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocComment (xmlDocPtr doc,
+ const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewComment (const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewCDataBlock (xmlDocPtr doc,
+ const xmlChar *content,
+ int len);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewCharRef (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewReference (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlCopyNode (const xmlNodePtr node,
+ int recursive);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlDocCopyNode (const xmlNodePtr node,
+ xmlDocPtr doc,
+ int recursive);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlCopyNodeList (const xmlNodePtr node);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlNewDocFragment (xmlDocPtr doc);
+#endif /* LIBXML_TREE_ENABLED */
+
+/*
+ * Navigating.
+ */
+XMLPUBFUN long XMLCALL
+ xmlGetLineNo (xmlNodePtr node);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlChar * XMLCALL
+ xmlGetNodePath (xmlNodePtr node);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlDocGetRootElement (xmlDocPtr doc);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlGetLastChild (xmlNodePtr parent);
+XMLPUBFUN int XMLCALL
+ xmlNodeIsText (xmlNodePtr node);
+XMLPUBFUN int XMLCALL
+ xmlIsBlankNode (xmlNodePtr node);
+
+#ifdef LIBXML_TREE_ENABLED
+/*
+ * Changing the structure.
+ */
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlDocSetRootElement (xmlDocPtr doc,
+ xmlNodePtr root);
+XMLPUBFUN void XMLCALL
+ xmlNodeSetName (xmlNodePtr cur,
+ const xmlChar *name);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddChild (xmlNodePtr parent,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddChildList (xmlNodePtr parent,
+ xmlNodePtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlReplaceNode (xmlNodePtr old,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddPrevSibling (xmlNodePtr cur,
+ xmlNodePtr elem);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddSibling (xmlNodePtr cur,
+ xmlNodePtr elem);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlAddNextSibling (xmlNodePtr cur,
+ xmlNodePtr elem);
+XMLPUBFUN void XMLCALL
+ xmlUnlinkNode (xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlTextMerge (xmlNodePtr first,
+ xmlNodePtr second);
+XMLPUBFUN int XMLCALL
+ xmlTextConcat (xmlNodePtr node,
+ const xmlChar *content,
+ int len);
+XMLPUBFUN void XMLCALL
+ xmlFreeNodeList (xmlNodePtr cur);
+XMLPUBFUN void XMLCALL
+ xmlFreeNode (xmlNodePtr cur);
+XMLPUBFUN void XMLCALL
+ xmlSetTreeDoc (xmlNodePtr tree,
+ xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlSetListDoc (xmlNodePtr list,
+ xmlDocPtr doc);
+/*
+ * Namespaces.
+ */
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlSearchNs (xmlDocPtr doc,
+ xmlNodePtr node,
+ const xmlChar *nameSpace);
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlSearchNsByHref (xmlDocPtr doc,
+ xmlNodePtr node,
+ const xmlChar *href);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlNsPtr * XMLCALL
+ xmlGetNsList (xmlDocPtr doc,
+ xmlNodePtr node);
+#endif /* LIBXML_TREE_ENABLED */
+
+XMLPUBFUN void XMLCALL
+ xmlSetNs (xmlNodePtr node,
+ xmlNsPtr ns);
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlCopyNamespace (xmlNsPtr cur);
+XMLPUBFUN xmlNsPtr XMLCALL
+ xmlCopyNamespaceList (xmlNsPtr cur);
+
+/*
+ * Changing the content.
+ */
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlSetProp (xmlNodePtr node,
+ const xmlChar *name,
+ const xmlChar *value);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlGetNoNsProp (xmlNodePtr node,
+ const xmlChar *name);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlGetProp (xmlNodePtr node,
+ const xmlChar *name);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlHasProp (xmlNodePtr node,
+ const xmlChar *name);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlHasNsProp (xmlNodePtr node,
+ const xmlChar *name,
+ const xmlChar *nameSpace);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlSetNsProp (xmlNodePtr node,
+ xmlNsPtr ns,
+ const xmlChar *name,
+ const xmlChar *value);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlGetNsProp (xmlNodePtr node,
+ const xmlChar *name,
+ const xmlChar *nameSpace);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlStringGetNodeList (xmlDocPtr doc,
+ const xmlChar *value);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlStringLenGetNodeList (xmlDocPtr doc,
+ const xmlChar *value,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeListGetString (xmlDocPtr doc,
+ xmlNodePtr list,
+ int inLine);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeListGetRawString (xmlDocPtr doc,
+ xmlNodePtr list,
+ int inLine);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlNodeSetContent (xmlNodePtr cur,
+ const xmlChar *content);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlNodeSetContentLen (xmlNodePtr cur,
+ const xmlChar *content,
+ int len);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL
+ xmlNodeAddContent (xmlNodePtr cur,
+ const xmlChar *content);
+XMLPUBFUN void XMLCALL
+ xmlNodeAddContentLen (xmlNodePtr cur,
+ const xmlChar *content,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeGetContent (xmlNodePtr cur);
+XMLPUBFUN int XMLCALL
+ xmlNodeBufGetContent (xmlBufferPtr buffer,
+ xmlNodePtr cur);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeGetLang (xmlNodePtr cur);
+XMLPUBFUN int XMLCALL
+ xmlNodeGetSpacePreserve (xmlNodePtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlNodeSetLang (xmlNodePtr cur,
+ const xmlChar *lang);
+XMLPUBFUN void XMLCALL
+ xmlNodeSetSpacePreserve (xmlNodePtr cur,
+ int val);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNodeGetBase (xmlDocPtr doc,
+ xmlNodePtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlNodeSetBase (xmlNodePtr cur,
+ const xmlChar *uri);
+
+/*
+ * Removing content.
+ */
+XMLPUBFUN int XMLCALL
+ xmlRemoveProp (xmlAttrPtr cur);
+XMLPUBFUN int XMLCALL
+ xmlUnsetProp (xmlNodePtr node,
+ const xmlChar *name);
+XMLPUBFUN int XMLCALL
+ xmlUnsetNsProp (xmlNodePtr node,
+ xmlNsPtr ns,
+ const xmlChar *name);
+#endif /* LIBXML_TREE_ENABLED */
+
+/*
+ * Internal, don't use.
+ */
+XMLPUBFUN void XMLCALL
+ xmlBufferWriteCHAR (xmlBufferPtr buf,
+ const xmlChar *string);
+XMLPUBFUN void XMLCALL
+ xmlBufferWriteChar (xmlBufferPtr buf,
+ const char *string);
+XMLPUBFUN void XMLCALL
+ xmlBufferWriteQuotedString(xmlBufferPtr buf,
+ const xmlChar *string);
+
+XMLPUBFUN void xmlAttrSerializeTxtContent(xmlBufferPtr buf,
+ xmlDocPtr doc,
+ xmlAttrPtr attr,
+ const xmlChar *string);
+
+/*
+ * Namespace handling.
+ */
+XMLPUBFUN int XMLCALL
+ xmlReconciliateNs (xmlDocPtr doc,
+ xmlNodePtr tree);
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Saving.
+ */
+XMLPUBFUN void XMLCALL
+ xmlDocDumpFormatMemory (xmlDocPtr cur,
+ xmlChar **mem,
+ int *size,
+ int format);
+XMLPUBFUN void XMLCALL
+ xmlDocDumpMemory (xmlDocPtr cur,
+ xmlChar **mem,
+ int *size);
+XMLPUBFUN void XMLCALL
+ xmlDocDumpMemoryEnc (xmlDocPtr out_doc,
+ xmlChar **doc_txt_ptr,
+ int * doc_txt_len,
+ const char *txt_encoding);
+XMLPUBFUN void XMLCALL
+ xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc,
+ xmlChar **doc_txt_ptr,
+ int * doc_txt_len,
+ const char *txt_encoding,
+ int format);
+XMLPUBFUN int XMLCALL
+ xmlDocFormatDump (FILE *f,
+ xmlDocPtr cur,
+ int format);
+XMLPUBFUN int XMLCALL
+ xmlDocDump (FILE *f,
+ xmlDocPtr cur);
+XMLPUBFUN void XMLCALL
+ xmlElemDump (FILE *f,
+ xmlDocPtr doc,
+ xmlNodePtr cur);
+XMLPUBFUN int XMLCALL
+ xmlSaveFile (const char *filename,
+ xmlDocPtr cur);
+XMLPUBFUN int XMLCALL
+ xmlSaveFormatFile (const char *filename,
+ xmlDocPtr cur,
+ int format);
+XMLPUBFUN int XMLCALL
+ xmlNodeDump (xmlBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ int level,
+ int format);
+
+XMLPUBFUN int XMLCALL
+ xmlSaveFileTo (xmlOutputBufferPtr buf,
+ xmlDocPtr cur,
+ const char *encoding);
+XMLPUBFUN int XMLCALL
+ xmlSaveFormatFileTo (xmlOutputBufferPtr buf,
+ xmlDocPtr cur,
+ const char *encoding,
+ int format);
+XMLPUBFUN void XMLCALL
+ xmlNodeDumpOutput (xmlOutputBufferPtr buf,
+ xmlDocPtr doc,
+ xmlNodePtr cur,
+ int level,
+ int format,
+ const char *encoding);
+
+XMLPUBFUN int XMLCALL
+ xmlSaveFormatFileEnc (const char *filename,
+ xmlDocPtr cur,
+ const char *encoding,
+ int format);
+
+XMLPUBFUN int XMLCALL
+ xmlSaveFileEnc (const char *filename,
+ xmlDocPtr cur,
+ const char *encoding);
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+/*
+ * XHTML
+ */
+XMLPUBFUN int XMLCALL
+ xmlIsXHTML (const xmlChar *systemID,
+ const xmlChar *publicID);
+
+/*
+ * Compression.
+ */
+XMLPUBFUN int XMLCALL
+ xmlGetDocCompressMode (xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlSetDocCompressMode (xmlDocPtr doc,
+ int mode);
+XMLPUBFUN int XMLCALL
+ xmlGetCompressMode (void);
+XMLPUBFUN void XMLCALL
+ xmlSetCompressMode (int mode);
+
+#ifdef __cplusplus
+}
+#endif
+#ifndef __XML_PARSER_H__
+#include <libxml/xmlmemory.h>
+#endif
+
+#endif /* __XML_TREE_H__ */
+
diff --git a/include/libxml/uri.h b/include/libxml/uri.h
new file mode 100644
index 0000000..5e29e63
--- /dev/null
+++ b/include/libxml/uri.h
@@ -0,0 +1,81 @@
+/**
+ * Summary: library of generic URI related routines
+ * Description: library of generic URI related routines
+ * Implements RFC 2396
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_URI_H__
+#define __XML_URI_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlURI:
+ *
+ * A parsed URI reference. This is a struct containing the various fields
+ * as described in RFC 2396 but separated for further processing.
+ */
+typedef struct _xmlURI xmlURI;
+typedef xmlURI *xmlURIPtr;
+struct _xmlURI {
+ char *scheme; /* the URI scheme */
+ char *opaque; /* opaque part */
+ char *authority; /* the authority part */
+ char *server; /* the server part */
+ char *user; /* the user part */
+ int port; /* the port number */
+ char *path; /* the path string */
+ char *query; /* the query string */
+ char *fragment; /* the fragment identifier */
+ int cleanup; /* parsing potentially unclean URI */
+};
+
+/*
+ * This function is in tree.h:
+ * xmlChar * xmlNodeGetBase (xmlDocPtr doc,
+ * xmlNodePtr cur);
+ */
+XMLPUBFUN xmlURIPtr XMLCALL
+ xmlCreateURI (void);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlBuildURI (const xmlChar *URI,
+ const xmlChar *base);
+XMLPUBFUN xmlURIPtr XMLCALL
+ xmlParseURI (const char *str);
+XMLPUBFUN int XMLCALL
+ xmlParseURIReference (xmlURIPtr uri,
+ const char *str);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlSaveUri (xmlURIPtr uri);
+XMLPUBFUN void XMLCALL
+ xmlPrintURI (FILE *stream,
+ xmlURIPtr uri);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlURIEscapeStr (const xmlChar *str,
+ const xmlChar *list);
+XMLPUBFUN char * XMLCALL
+ xmlURIUnescapeString (const char *str,
+ int len,
+ char *target);
+XMLPUBFUN int XMLCALL
+ xmlNormalizeURIPath (char *path);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlURIEscape (const xmlChar *str);
+XMLPUBFUN void XMLCALL
+ xmlFreeURI (xmlURIPtr uri);
+XMLPUBFUN xmlChar* XMLCALL
+ xmlCanonicPath (const xmlChar *path);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_URI_H__ */
diff --git a/include/libxml/valid.h b/include/libxml/valid.h
new file mode 100644
index 0000000..1ff3f0b
--- /dev/null
+++ b/include/libxml/valid.h
@@ -0,0 +1,408 @@
+/*
+ * Summary: The DTD validation
+ * Description: API for the DTD handling and the validity checking
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_VALID_H__
+#define __XML_VALID_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlerror.h>
+#include <libxml/tree.h>
+#include <libxml/list.h>
+#include <libxml/xmlautomata.h>
+#include <libxml/xmlregexp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Validation state added for non-determinist content model.
+ */
+typedef struct _xmlValidState xmlValidState;
+typedef xmlValidState *xmlValidStatePtr;
+
+/**
+ * xmlValidityErrorFunc:
+ * @ctx: an xmlValidCtxtPtr validity error context
+ * @msg: the string to format *printf like vararg
+ * @...: remaining arguments to the format
+ *
+ * Callback called when a validity error is found. This is a message
+ * oriented function similar to an *printf function.
+ */
+typedef void (*xmlValidityErrorFunc) (void *ctx,
+ const char *msg,
+ ...);
+
+/**
+ * xmlValidityWarningFunc:
+ * @ctx: an xmlValidCtxtPtr validity error context
+ * @msg: the string to format *printf like vararg
+ * @...: remaining arguments to the format
+ *
+ * Callback called when a validity warning is found. This is a message
+ * oriented function similar to an *printf function.
+ */
+typedef void (*xmlValidityWarningFunc) (void *ctx,
+ const char *msg,
+ ...);
+
+/*
+ * xmlValidCtxt:
+ * An xmlValidCtxt is used for error reporting when validating.
+ */
+typedef struct _xmlValidCtxt xmlValidCtxt;
+typedef xmlValidCtxt *xmlValidCtxtPtr;
+struct _xmlValidCtxt {
+ void *userData; /* user specific data block */
+ xmlValidityErrorFunc error; /* the callback in case of errors */
+ xmlValidityWarningFunc warning; /* the callback in case of warning */
+
+ /* Node analysis stack used when validating within entities */
+ xmlNodePtr node; /* Current parsed Node */
+ int nodeNr; /* Depth of the parsing stack */
+ int nodeMax; /* Max depth of the parsing stack */
+ xmlNodePtr *nodeTab; /* array of nodes */
+
+ int finishDtd; /* finished validating the Dtd ? */
+ xmlDocPtr doc; /* the document */
+ int valid; /* temporary validity check result */
+
+ /* state state used for non-determinist content validation */
+ xmlValidState *vstate; /* current state */
+ int vstateNr; /* Depth of the validation stack */
+ int vstateMax; /* Max depth of the validation stack */
+ xmlValidState *vstateTab; /* array of validation states */
+
+#ifdef LIBXML_REGEXP_ENABLED
+ xmlAutomataPtr am; /* the automata */
+ xmlAutomataStatePtr state; /* used to build the automata */
+#else
+ void *am;
+ void *state;
+#endif
+};
+
+/*
+ * ALL notation declarations are stored in a table.
+ * There is one table per DTD.
+ */
+
+typedef struct _xmlHashTable xmlNotationTable;
+typedef xmlNotationTable *xmlNotationTablePtr;
+
+/*
+ * ALL element declarations are stored in a table.
+ * There is one table per DTD.
+ */
+
+typedef struct _xmlHashTable xmlElementTable;
+typedef xmlElementTable *xmlElementTablePtr;
+
+/*
+ * ALL attribute declarations are stored in a table.
+ * There is one table per DTD.
+ */
+
+typedef struct _xmlHashTable xmlAttributeTable;
+typedef xmlAttributeTable *xmlAttributeTablePtr;
+
+/*
+ * ALL IDs attributes are stored in a table.
+ * There is one table per document.
+ */
+
+typedef struct _xmlHashTable xmlIDTable;
+typedef xmlIDTable *xmlIDTablePtr;
+
+/*
+ * ALL Refs attributes are stored in a table.
+ * There is one table per document.
+ */
+
+typedef struct _xmlHashTable xmlRefTable;
+typedef xmlRefTable *xmlRefTablePtr;
+
+/* Allocate/Release Validation Contexts */
+XMLPUBFUN xmlValidCtxtPtr XMLCALL
+ xmlNewValidCtxt(void);
+XMLPUBFUN void XMLCALL
+ xmlFreeValidCtxt(xmlValidCtxtPtr);
+
+/* Notation */
+XMLPUBFUN xmlNotationPtr XMLCALL
+ xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
+ xmlDtdPtr dtd,
+ const xmlChar *name,
+ const xmlChar *PublicID,
+ const xmlChar *SystemID);
+XMLPUBFUN xmlNotationTablePtr XMLCALL
+ xmlCopyNotationTable (xmlNotationTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlFreeNotationTable (xmlNotationTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlDumpNotationDecl (xmlBufferPtr buf,
+ xmlNotationPtr nota);
+XMLPUBFUN void XMLCALL
+ xmlDumpNotationTable (xmlBufferPtr buf,
+ xmlNotationTablePtr table);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* Element Content */
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlNewElementContent (const xmlChar *name,
+ xmlElementContentType type);
+XMLPUBFUN xmlElementContentPtr XMLCALL
+ xmlCopyElementContent (xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL
+ xmlFreeElementContent (xmlElementContentPtr cur);
+XMLPUBFUN void XMLCALL
+ xmlSnprintfElementContent(char *buf,
+ int size,
+ xmlElementContentPtr content,
+ int glob);
+/* DEPRECATED */
+XMLPUBFUN void XMLCALL
+ xmlSprintfElementContent(char *buf,
+ xmlElementContentPtr content,
+ int glob);
+/* DEPRECATED */
+
+/* Element */
+XMLPUBFUN xmlElementPtr XMLCALL
+ xmlAddElementDecl (xmlValidCtxtPtr ctxt,
+ xmlDtdPtr dtd,
+ const xmlChar *name,
+ xmlElementTypeVal type,
+ xmlElementContentPtr content);
+XMLPUBFUN xmlElementTablePtr XMLCALL
+ xmlCopyElementTable (xmlElementTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlFreeElementTable (xmlElementTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlDumpElementTable (xmlBufferPtr buf,
+ xmlElementTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlDumpElementDecl (xmlBufferPtr buf,
+ xmlElementPtr elem);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* Enumeration */
+XMLPUBFUN xmlEnumerationPtr XMLCALL
+ xmlCreateEnumeration (const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ xmlFreeEnumeration (xmlEnumerationPtr cur);
+XMLPUBFUN xmlEnumerationPtr XMLCALL
+ xmlCopyEnumeration (xmlEnumerationPtr cur);
+
+/* Attribute */
+XMLPUBFUN xmlAttributePtr XMLCALL
+ xmlAddAttributeDecl (xmlValidCtxtPtr ctxt,
+ xmlDtdPtr dtd,
+ const xmlChar *elem,
+ const xmlChar *name,
+ const xmlChar *ns,
+ xmlAttributeType type,
+ xmlAttributeDefault def,
+ const xmlChar *defaultValue,
+ xmlEnumerationPtr tree);
+XMLPUBFUN xmlAttributeTablePtr XMLCALL
+ xmlCopyAttributeTable (xmlAttributeTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlFreeAttributeTable (xmlAttributeTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlDumpAttributeTable (xmlBufferPtr buf,
+ xmlAttributeTablePtr table);
+XMLPUBFUN void XMLCALL
+ xmlDumpAttributeDecl (xmlBufferPtr buf,
+ xmlAttributePtr attr);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* IDs */
+XMLPUBFUN xmlIDPtr XMLCALL
+ xmlAddID (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ const xmlChar *value,
+ xmlAttrPtr attr);
+XMLPUBFUN void XMLCALL
+ xmlFreeIDTable (xmlIDTablePtr table);
+XMLPUBFUN xmlAttrPtr XMLCALL
+ xmlGetID (xmlDocPtr doc,
+ const xmlChar *ID);
+XMLPUBFUN int XMLCALL
+ xmlIsID (xmlDocPtr doc,
+ xmlNodePtr elem,
+ xmlAttrPtr attr);
+XMLPUBFUN int XMLCALL
+ xmlRemoveID (xmlDocPtr doc,
+ xmlAttrPtr attr);
+
+/* IDREFs */
+XMLPUBFUN xmlRefPtr XMLCALL
+ xmlAddRef (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ const xmlChar *value,
+ xmlAttrPtr attr);
+XMLPUBFUN void XMLCALL
+ xmlFreeRefTable (xmlRefTablePtr table);
+XMLPUBFUN int XMLCALL
+ xmlIsRef (xmlDocPtr doc,
+ xmlNodePtr elem,
+ xmlAttrPtr attr);
+XMLPUBFUN int XMLCALL
+ xmlRemoveRef (xmlDocPtr doc,
+ xmlAttrPtr attr);
+XMLPUBFUN xmlListPtr XMLCALL
+ xmlGetRefs (xmlDocPtr doc,
+ const xmlChar *ID);
+
+/**
+ * The public function calls related to validity checking.
+ */
+
+XMLPUBFUN int XMLCALL
+ xmlValidateRoot (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlElementPtr elem);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlValidNormalizeAttributeValue(xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *name,
+ const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlAttributePtr attr);
+XMLPUBFUN int XMLCALL
+ xmlValidateAttributeValue(xmlAttributeType type,
+ const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNotationPtr nota);
+XMLPUBFUN int XMLCALL
+ xmlValidateDtd (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlDtdPtr dtd);
+XMLPUBFUN int XMLCALL
+ xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlValidateDocument (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlValidateElement (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ xmlValidateOneElement (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+ xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ xmlAttrPtr attr,
+ const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *prefix,
+ xmlNsPtr ns,
+ const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ const xmlChar *notationName);
+XMLPUBFUN int XMLCALL
+ xmlIsMixedElement (xmlDocPtr doc,
+ const xmlChar *name);
+XMLPUBFUN xmlAttributePtr XMLCALL
+ xmlGetDtdAttrDesc (xmlDtdPtr dtd,
+ const xmlChar *elem,
+ const xmlChar *name);
+XMLPUBFUN xmlAttributePtr XMLCALL
+ xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
+ const xmlChar *elem,
+ const xmlChar *name,
+ const xmlChar *prefix);
+XMLPUBFUN xmlNotationPtr XMLCALL
+ xmlGetDtdNotationDesc (xmlDtdPtr dtd,
+ const xmlChar *name);
+XMLPUBFUN xmlElementPtr XMLCALL
+ xmlGetDtdQElementDesc (xmlDtdPtr dtd,
+ const xmlChar *name,
+ const xmlChar *prefix);
+XMLPUBFUN xmlElementPtr XMLCALL
+ xmlGetDtdElementDesc (xmlDtdPtr dtd,
+ const xmlChar *name);
+
+XMLPUBFUN int XMLCALL
+ xmlValidGetValidElements(xmlNode *prev,
+ xmlNode *next,
+ const xmlChar **list,
+ int max);
+XMLPUBFUN int XMLCALL
+ xmlValidGetPotentialChildren(xmlElementContent *ctree,
+ const xmlChar **list,
+ int *len,
+ int max);
+XMLPUBFUN int XMLCALL
+ xmlValidateNameValue (const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateNamesValue (const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateNmtokenValue (const xmlChar *value);
+XMLPUBFUN int XMLCALL
+ xmlValidateNmtokensValue(const xmlChar *value);
+
+#ifdef LIBXML_REGEXP_ENABLED
+/*
+ * Validation based on the regexp support
+ */
+XMLPUBFUN int XMLCALL
+ xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
+ xmlElementPtr elem);
+
+XMLPUBFUN int XMLCALL
+ xmlValidatePushElement (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *qname);
+XMLPUBFUN int XMLCALL
+ xmlValidatePushCData (xmlValidCtxtPtr ctxt,
+ const xmlChar *data,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlValidatePopElement (xmlValidCtxtPtr ctxt,
+ xmlDocPtr doc,
+ xmlNodePtr elem,
+ const xmlChar *qname);
+#endif /* LIBXML_REGEXP_ENABLED */
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_VALID_H__ */
diff --git a/include/libxml/xinclude.h b/include/libxml/xinclude.h
new file mode 100644
index 0000000..880a280
--- /dev/null
+++ b/include/libxml/xinclude.h
@@ -0,0 +1,116 @@
+/*
+ * Summary: implementation of XInclude
+ * Description: API to handle XInclude processing,
+ * implements the
+ * World Wide Web Consortium Last Call Working Draft 10 November 2003
+ * http://www.w3.org/TR/2003/WD-xinclude-20031110
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XINCLUDE_H__
+#define __XML_XINCLUDE_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * XINCLUDE_NS:
+ *
+ * Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude
+ */
+#define XINCLUDE_NS (const xmlChar *) "http://www.w3.org/2003/XInclude"
+/**
+ * XINCLUDE_OLD_NS:
+ *
+ * Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude
+ */
+#define XINCLUDE_OLD_NS (const xmlChar *) "http://www.w3.org/2001/XInclude"
+/**
+ * XINCLUDE_NODE:
+ *
+ * Macro defining "include"
+ */
+#define XINCLUDE_NODE (const xmlChar *) "include"
+/**
+ * XINCLUDE_FALLBACK:
+ *
+ * Macro defining "fallback"
+ */
+#define XINCLUDE_FALLBACK (const xmlChar *) "fallback"
+/**
+ * XINCLUDE_HREF:
+ *
+ * Macro defining "href"
+ */
+#define XINCLUDE_HREF (const xmlChar *) "href"
+/**
+ * XINCLUDE_PARSE:
+ *
+ * Macro defining "parse"
+ */
+#define XINCLUDE_PARSE (const xmlChar *) "parse"
+/**
+ * XINCLUDE_PARSE_XML:
+ *
+ * Macro defining "xml"
+ */
+#define XINCLUDE_PARSE_XML (const xmlChar *) "xml"
+/**
+ * XINCLUDE_PARSE_TEXT:
+ *
+ * Macro defining "text"
+ */
+#define XINCLUDE_PARSE_TEXT (const xmlChar *) "text"
+/**
+ * XINCLUDE_PARSE_ENCODING:
+ *
+ * Macro defining "encoding"
+ */
+#define XINCLUDE_PARSE_ENCODING (const xmlChar *) "encoding"
+/**
+ * XINCLUDE_PARSE_XPOINTER:
+ *
+ * Macro defining "xpointer"
+ */
+#define XINCLUDE_PARSE_XPOINTER (const xmlChar *) "xpointer"
+
+typedef struct _xmlXIncludeCtxt xmlXIncludeCtxt;
+typedef xmlXIncludeCtxt *xmlXIncludeCtxtPtr;
+
+/*
+ * standalone processing
+ */
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcess (xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcessFlags (xmlDocPtr doc,
+ int flags);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcessTree (xmlNodePtr tree);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcessTreeFlags(xmlNodePtr tree,
+ int flags);
+/*
+ * contextual processing
+ */
+XMLPUBFUN xmlXIncludeCtxtPtr XMLCALL
+ xmlXIncludeNewContext (xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeSetFlags (xmlXIncludeCtxtPtr ctxt,
+ int flags);
+XMLPUBFUN void XMLCALL
+ xmlXIncludeFreeContext (xmlXIncludeCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlXIncludeProcessNode (xmlXIncludeCtxtPtr ctxt,
+ xmlNodePtr tree);
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_XINCLUDE_H__ */
diff --git a/include/libxml/xlink.h b/include/libxml/xlink.h
new file mode 100644
index 0000000..4b99611
--- /dev/null
+++ b/include/libxml/xlink.h
@@ -0,0 +1,183 @@
+/*
+ * Summary: unfinished XLink detection module
+ * Description: unfinished XLink detection module
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XLINK_H__
+#define __XML_XLINK_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**
+ * Various defines for the various Link properties.
+ *
+ * NOTE: the link detection layer will try to resolve QName expansion
+ * of namespaces. If "foo" is the prefix for "http://foo.com/"
+ * then the link detection layer will expand role="foo:myrole"
+ * to "http://foo.com/:myrole".
+ * NOTE: the link detection layer will expand URI-Refences found on
+ * href attributes by using the base mechanism if found.
+ */
+typedef xmlChar *xlinkHRef;
+typedef xmlChar *xlinkRole;
+typedef xmlChar *xlinkTitle;
+
+typedef enum {
+ XLINK_TYPE_NONE = 0,
+ XLINK_TYPE_SIMPLE,
+ XLINK_TYPE_EXTENDED,
+ XLINK_TYPE_EXTENDED_SET
+} xlinkType;
+
+typedef enum {
+ XLINK_SHOW_NONE = 0,
+ XLINK_SHOW_NEW,
+ XLINK_SHOW_EMBED,
+ XLINK_SHOW_REPLACE
+} xlinkShow;
+
+typedef enum {
+ XLINK_ACTUATE_NONE = 0,
+ XLINK_ACTUATE_AUTO,
+ XLINK_ACTUATE_ONREQUEST
+} xlinkActuate;
+
+/**
+ * xlinkNodeDetectFunc:
+ * @ctx: user data pointer
+ * @node: the node to check
+ *
+ * This is the prototype for the link detection routine.
+ * It calls the default link detection callbacks upon link detection.
+ */
+typedef void (*xlinkNodeDetectFunc) (void *ctx, xmlNodePtr node);
+
+/*
+ * The link detection module interact with the upper layers using
+ * a set of callback registered at parsing time.
+ */
+
+/**
+ * xlinkSimpleLinkFunk:
+ * @ctx: user data pointer
+ * @node: the node carrying the link
+ * @href: the target of the link
+ * @role: the role string
+ * @title: the link title
+ *
+ * This is the prototype for a simple link detection callback.
+ */
+typedef void
+(*xlinkSimpleLinkFunk) (void *ctx,
+ xmlNodePtr node,
+ const xlinkHRef href,
+ const xlinkRole role,
+ const xlinkTitle title);
+
+/**
+ * xlinkExtendedLinkFunk:
+ * @ctx: user data pointer
+ * @node: the node carrying the link
+ * @nbLocators: the number of locators detected on the link
+ * @hrefs: pointer to the array of locator hrefs
+ * @roles: pointer to the array of locator roles
+ * @nbArcs: the number of arcs detected on the link
+ * @from: pointer to the array of source roles found on the arcs
+ * @to: pointer to the array of target roles found on the arcs
+ * @show: array of values for the show attributes found on the arcs
+ * @actuate: array of values for the actuate attributes found on the arcs
+ * @nbTitles: the number of titles detected on the link
+ * @title: array of titles detected on the link
+ * @langs: array of xml:lang values for the titles
+ *
+ * This is the prototype for a extended link detection callback.
+ */
+typedef void
+(*xlinkExtendedLinkFunk)(void *ctx,
+ xmlNodePtr node,
+ int nbLocators,
+ const xlinkHRef *hrefs,
+ const xlinkRole *roles,
+ int nbArcs,
+ const xlinkRole *from,
+ const xlinkRole *to,
+ xlinkShow *show,
+ xlinkActuate *actuate,
+ int nbTitles,
+ const xlinkTitle *titles,
+ const xmlChar **langs);
+
+/**
+ * xlinkExtendedLinkSetFunk:
+ * @ctx: user data pointer
+ * @node: the node carrying the link
+ * @nbLocators: the number of locators detected on the link
+ * @hrefs: pointer to the array of locator hrefs
+ * @roles: pointer to the array of locator roles
+ * @nbTitles: the number of titles detected on the link
+ * @title: array of titles detected on the link
+ * @langs: array of xml:lang values for the titles
+ *
+ * This is the prototype for a extended link set detection callback.
+ */
+typedef void
+(*xlinkExtendedLinkSetFunk) (void *ctx,
+ xmlNodePtr node,
+ int nbLocators,
+ const xlinkHRef *hrefs,
+ const xlinkRole *roles,
+ int nbTitles,
+ const xlinkTitle *titles,
+ const xmlChar **langs);
+
+/**
+ * This is the structure containing a set of Links detection callbacks.
+ *
+ * There is no default xlink callbacks, if one want to get link
+ * recognition activated, those call backs must be provided before parsing.
+ */
+typedef struct _xlinkHandler xlinkHandler;
+typedef xlinkHandler *xlinkHandlerPtr;
+struct _xlinkHandler {
+ xlinkSimpleLinkFunk simple;
+ xlinkExtendedLinkFunk extended;
+ xlinkExtendedLinkSetFunk set;
+};
+
+/*
+ * The default detection routine, can be overridden, they call the default
+ * detection callbacks.
+ */
+
+XMLPUBFUN xlinkNodeDetectFunc XMLCALL
+ xlinkGetDefaultDetect (void);
+XMLPUBFUN void XMLCALL
+ xlinkSetDefaultDetect (xlinkNodeDetectFunc func);
+
+/*
+ * Routines to set/get the default handlers.
+ */
+XMLPUBFUN xlinkHandlerPtr XMLCALL
+ xlinkGetDefaultHandler (void);
+XMLPUBFUN void XMLCALL
+ xlinkSetDefaultHandler (xlinkHandlerPtr handler);
+
+/*
+ * Link detection module itself.
+ */
+XMLPUBFUN xlinkType XMLCALL
+ xlinkIsLink (xmlDocPtr doc,
+ xmlNodePtr node);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_XLINK_H__ */
diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h
new file mode 100644
index 0000000..58a7bb6
--- /dev/null
+++ b/include/libxml/xmlIO.h
@@ -0,0 +1,335 @@
+/*
+ * Summary: interface for the I/O interfaces used by the parser
+ * Description: interface for the I/O interfaces used by the parser
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_IO_H__
+#define __XML_IO_H__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Those are the functions and datatypes for the parser input
+ * I/O structures.
+ */
+
+/**
+ * xmlInputMatchCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Input API to detect if the current handler
+ * can provide input fonctionnalities for this resource.
+ *
+ * Returns 1 if yes and 0 if another Input module should be used
+ */
+typedef int (*xmlInputMatchCallback) (char const *filename);
+/**
+ * xmlInputOpenCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Input API to open the resource
+ *
+ * Returns an Input context or NULL in case or error
+ */
+typedef void * (*xmlInputOpenCallback) (char const *filename);
+/**
+ * xmlInputReadCallback:
+ * @context: an Input context
+ * @buffer: the buffer to store data read
+ * @len: the length of the buffer in bytes
+ *
+ * Callback used in the I/O Input API to read the resource
+ *
+ * Returns the number of bytes read or -1 in case of error
+ */
+typedef int (*xmlInputReadCallback) (void * context, char * buffer, int len);
+/**
+ * xmlInputCloseCallback:
+ * @context: an Input context
+ *
+ * Callback used in the I/O Input API to close the resource
+ *
+ * Returns 0 or -1 in case of error
+ */
+typedef int (*xmlInputCloseCallback) (void * context);
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Those are the functions and datatypes for the library output
+ * I/O structures.
+ */
+
+/**
+ * xmlOutputMatchCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Output API to detect if the current handler
+ * can provide output fonctionnalities for this resource.
+ *
+ * Returns 1 if yes and 0 if another Output module should be used
+ */
+typedef int (*xmlOutputMatchCallback) (char const *filename);
+/**
+ * xmlOutputOpenCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Output API to open the resource
+ *
+ * Returns an Output context or NULL in case or error
+ */
+typedef void * (*xmlOutputOpenCallback) (char const *filename);
+/**
+ * xmlOutputWriteCallback:
+ * @context: an Output context
+ * @buffer: the buffer of data to write
+ * @len: the length of the buffer in bytes
+ *
+ * Callback used in the I/O Output API to write to the resource
+ *
+ * Returns the number of bytes written or -1 in case of error
+ */
+typedef int (*xmlOutputWriteCallback) (void * context, const char * buffer,
+ int len);
+/**
+ * xmlOutputCloseCallback:
+ * @context: an Output context
+ *
+ * Callback used in the I/O Output API to close the resource
+ *
+ * Returns 0 or -1 in case of error
+ */
+typedef int (*xmlOutputCloseCallback) (void * context);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <libxml/globals.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/encoding.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+struct _xmlParserInputBuffer {
+ void* context;
+ xmlInputReadCallback readcallback;
+ xmlInputCloseCallback closecallback;
+
+ xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
+
+ xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 */
+ xmlBufferPtr raw; /* if encoder != NULL buffer for raw input */
+ int compressed; /* -1=unknown, 0=not compressed, 1=compressed */
+ int error;
+ unsigned long rawconsumed;/* amount consumed from raw */
+};
+
+
+#ifdef LIBXML_OUTPUT_ENABLED
+struct _xmlOutputBuffer {
+ void* context;
+ xmlOutputWriteCallback writecallback;
+ xmlOutputCloseCallback closecallback;
+
+ xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
+
+ xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */
+ xmlBufferPtr conv; /* if encoder != NULL buffer for output */
+ int written; /* total number of byte written */
+ int error;
+};
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/*
+ * Interfaces for input
+ */
+XMLPUBFUN void XMLCALL
+ xmlCleanupInputCallbacks (void);
+
+XMLPUBFUN void XMLCALL
+ xmlRegisterDefaultInputCallbacks (void);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlAllocParserInputBuffer (xmlCharEncoding enc);
+
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateFilename (const char *URI,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateFile (FILE *file,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateFd (int fd,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateMem (const char *mem, int size,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateStatic (const char *mem, int size,
+ xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlParserInputBufferCreateIO (xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL
+ xmlParserInputBufferRead (xmlParserInputBufferPtr in,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlParserInputBufferGrow (xmlParserInputBufferPtr in,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlParserInputBufferPush (xmlParserInputBufferPtr in,
+ int len,
+ const char *buf);
+XMLPUBFUN void XMLCALL
+ xmlFreeParserInputBuffer (xmlParserInputBufferPtr in);
+XMLPUBFUN char * XMLCALL
+ xmlParserGetDirectory (const char *filename);
+
+XMLPUBFUN int XMLCALL
+ xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc,
+ xmlInputOpenCallback openFunc,
+ xmlInputReadCallback readFunc,
+ xmlInputCloseCallback closeFunc);
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Interfaces for output
+ */
+XMLPUBFUN void XMLCALL
+ xmlCleanupOutputCallbacks (void);
+XMLPUBFUN void XMLCALL
+ xmlRegisterDefaultOutputCallbacks(void);
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlOutputBufferCreateFilename (const char *URI,
+ xmlCharEncodingHandlerPtr encoder,
+ int compression);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlOutputBufferCreateFile (FILE *file,
+ xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlOutputBufferCreateFd (int fd,
+ xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+ xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite,
+ xmlOutputCloseCallback ioclose,
+ void *ioctx,
+ xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN int XMLCALL
+ xmlOutputBufferWrite (xmlOutputBufferPtr out,
+ int len,
+ const char *buf);
+XMLPUBFUN int XMLCALL
+ xmlOutputBufferWriteString (xmlOutputBufferPtr out,
+ const char *str);
+
+XMLPUBFUN int XMLCALL
+ xmlOutputBufferFlush (xmlOutputBufferPtr out);
+XMLPUBFUN int XMLCALL
+ xmlOutputBufferClose (xmlOutputBufferPtr out);
+
+XMLPUBFUN int XMLCALL
+ xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc,
+ xmlOutputOpenCallback openFunc,
+ xmlOutputWriteCallback writeFunc,
+ xmlOutputCloseCallback closeFunc);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* This function only exists if HTTP support built into the library */
+#ifdef LIBXML_HTTP_ENABLED
+XMLPUBFUN void * XMLCALL
+ xmlIOHTTPOpenW (const char * post_uri,
+ int compression );
+XMLPUBFUN void XMLCALL
+ xmlRegisterHTTPPostCallbacks (void );
+#endif
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlCheckHTTPInput (xmlParserCtxtPtr ctxt,
+ xmlParserInputPtr ret);
+
+/*
+ * A predefined entity loader disabling network accesses
+ */
+XMLPUBFUN xmlParserInputPtr XMLCALL
+ xmlNoNetExternalEntityLoader (const char *URL,
+ const char *ID,
+ xmlParserCtxtPtr ctxt);
+
+/*
+ * xmlNormalizeWindowsPath is obsolete, don't use it.
+ * Check xmlCanonicPath in uri.h for a better alternative.
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlNormalizeWindowsPath (const xmlChar *path);
+
+XMLPUBFUN int XMLCALL
+ xmlCheckFilename (const char *path);
+/**
+ * Default 'file://' protocol callbacks
+ */
+XMLPUBFUN int XMLCALL
+ xmlFileMatch (const char *filename);
+XMLPUBFUN void * XMLCALL
+ xmlFileOpen (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlFileRead (void * context,
+ char * buffer,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlFileClose (void * context);
+
+/**
+ * Default 'http://' protocol callbacks
+ */
+#ifdef LIBXML_HTTP_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPMatch (const char *filename);
+XMLPUBFUN void * XMLCALL
+ xmlIOHTTPOpen (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPRead (void * context,
+ char * buffer,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPClose (void * context);
+#endif /* LIBXML_HTTP_ENABLED */
+
+/**
+ * Default 'ftp://' protocol callbacks
+ */
+#ifdef LIBXML_FTP_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlIOFTPMatch (const char *filename);
+XMLPUBFUN void * XMLCALL
+ xmlIOFTPOpen (const char *filename);
+XMLPUBFUN int XMLCALL
+ xmlIOFTPRead (void * context,
+ char * buffer,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlIOFTPClose (void * context);
+#endif /* LIBXML_FTP_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_IO_H__ */
diff --git a/include/libxml/xmlautomata.h b/include/libxml/xmlautomata.h
new file mode 100644
index 0000000..16a1467
--- /dev/null
+++ b/include/libxml/xmlautomata.h
@@ -0,0 +1,117 @@
+/*
+ * Summary: API to build regexp automata
+ * Description: the API to build regexp automata
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_AUTOMATA_H__
+#define __XML_AUTOMATA_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_AUTOMATA_ENABLED
+#include <libxml/xmlregexp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlAutomataPtr:
+ *
+ * A libxml automata description, It can be compiled into a regexp
+ */
+typedef struct _xmlAutomata xmlAutomata;
+typedef xmlAutomata *xmlAutomataPtr;
+
+/**
+ * xmlAutomataStatePtr:
+ *
+ * A state int the automata description,
+ */
+typedef struct _xmlAutomataState xmlAutomataState;
+typedef xmlAutomataState *xmlAutomataStatePtr;
+
+/*
+ * Building API
+ */
+XMLPUBFUN xmlAutomataPtr XMLCALL
+ xmlNewAutomata (void);
+XMLPUBFUN void XMLCALL
+ xmlFreeAutomata (xmlAutomataPtr am);
+
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataGetInitState (xmlAutomataPtr am);
+XMLPUBFUN int XMLCALL
+ xmlAutomataSetFinalState (xmlAutomataPtr am,
+ xmlAutomataStatePtr state);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewState (xmlAutomataPtr am);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewTransition (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewTransition2 (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ const xmlChar *token2,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewCountTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ int min,
+ int max,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewOnceTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ int min,
+ int max,
+ void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewAllTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ int lax);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewEpsilon (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewCountedTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ int counter);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewCounterTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ int counter);
+XMLPUBFUN int XMLCALL
+ xmlAutomataNewCounter (xmlAutomataPtr am,
+ int min,
+ int max);
+
+XMLPUBFUN xmlRegexpPtr XMLCALL
+ xmlAutomataCompile (xmlAutomataPtr am);
+XMLPUBFUN int XMLCALL
+ xmlAutomataIsDeterminist (xmlAutomataPtr am);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_AUTOMATA_ENABLED */
+#endif /* __XML_AUTOMATA_H__ */
diff --git a/include/libxml/xmlerror.h b/include/libxml/xmlerror.h
new file mode 100644
index 0000000..46d93c4
--- /dev/null
+++ b/include/libxml/xmlerror.h
@@ -0,0 +1,695 @@
+/*
+ * Summary: error handling
+ * Description: the API used to report errors
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#include <libxml/parser.h>
+
+#ifndef __XML_ERROR_H__
+#define __XML_ERROR_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlErrorLevel:
+ *
+ * Indicates the level of an error
+ */
+typedef enum {
+ XML_ERR_NONE = 0,
+ XML_ERR_WARNING = 1, /* A simple warning */
+ XML_ERR_ERROR = 2, /* A recoverable error */
+ XML_ERR_FATAL = 3 /* A fatal error */
+} xmlErrorLevel;
+
+/**
+ * xmlErrorDomain:
+ *
+ * Indicates where an error may have come from
+ */
+typedef enum {
+ XML_FROM_NONE = 0,
+ XML_FROM_PARSER, /* The XML parser */
+ XML_FROM_TREE, /* The tree module */
+ XML_FROM_NAMESPACE, /* The XML Namespace module */
+ XML_FROM_DTD, /* The XML DTD validation with parser context*/
+ XML_FROM_HTML, /* The HTML parser */
+ XML_FROM_MEMORY, /* The memory allocator */
+ XML_FROM_OUTPUT, /* The serialization code */
+ XML_FROM_IO, /* The Input/Output stack */
+ XML_FROM_FTP, /* The FTP module */
+ XML_FROM_HTTP, /* The FTP module */
+ XML_FROM_XINCLUDE, /* The XInclude processing */
+ XML_FROM_XPATH, /* The XPath module */
+ XML_FROM_XPOINTER, /* The XPointer module */
+ XML_FROM_REGEXP, /* The regular expressions module */
+ XML_FROM_DATATYPE, /* The W3C XML Schemas Datatype module */
+ XML_FROM_SCHEMASP, /* The W3C XML Schemas parser module */
+ XML_FROM_SCHEMASV, /* The W3C XML Schemas validation module */
+ XML_FROM_RELAXNGP, /* The Relax-NG parser module */
+ XML_FROM_RELAXNGV, /* The Relax-NG validator module */
+ XML_FROM_CATALOG, /* The Catalog module */
+ XML_FROM_C14N, /* The Canonicalization module */
+ XML_FROM_XSLT, /* The XSLT engine from libxslt */
+ XML_FROM_VALID /* The XML DTD validation with valid context */
+} xmlErrorDomain;
+
+/**
+ * xmlError:
+ *
+ * An XML Error instance.
+ */
+
+typedef struct _xmlError xmlError;
+typedef xmlError *xmlErrorPtr;
+struct _xmlError {
+ int domain; /* What part of the library raised this error */
+ int code; /* The error code, e.g. an xmlParserError */
+ char *message;/* human-readable informative error message */
+ xmlErrorLevel level;/* how consequent is the error */
+ char *file; /* the filename */
+ int line; /* the line number if available */
+ char *str1; /* extra string information */
+ char *str2; /* extra string information */
+ char *str3; /* extra string information */
+ int int1; /* extra number information */
+ int int2; /* extra number information */
+ void *ctxt; /* the parser context if available */
+ void *node; /* the node in the tree */
+};
+
+/**
+ * xmlParserError:
+ *
+ * This is an error that the XML (or HTML) parser can generate
+ */
+typedef enum {
+ XML_ERR_OK = 0,
+ XML_ERR_INTERNAL_ERROR, /* 1 */
+ XML_ERR_NO_MEMORY, /* 2 */
+ XML_ERR_DOCUMENT_START, /* 3 */
+ XML_ERR_DOCUMENT_EMPTY, /* 4 */
+ XML_ERR_DOCUMENT_END, /* 5 */
+ XML_ERR_INVALID_HEX_CHARREF, /* 6 */
+ XML_ERR_INVALID_DEC_CHARREF, /* 7 */
+ XML_ERR_INVALID_CHARREF, /* 8 */
+ XML_ERR_INVALID_CHAR, /* 9 */
+ XML_ERR_CHARREF_AT_EOF, /* 10 */
+ XML_ERR_CHARREF_IN_PROLOG, /* 11 */
+ XML_ERR_CHARREF_IN_EPILOG, /* 12 */
+ XML_ERR_CHARREF_IN_DTD, /* 13 */
+ XML_ERR_ENTITYREF_AT_EOF, /* 14 */
+ XML_ERR_ENTITYREF_IN_PROLOG, /* 15 */
+ XML_ERR_ENTITYREF_IN_EPILOG, /* 16 */
+ XML_ERR_ENTITYREF_IN_DTD, /* 17 */
+ XML_ERR_PEREF_AT_EOF, /* 18 */
+ XML_ERR_PEREF_IN_PROLOG, /* 19 */
+ XML_ERR_PEREF_IN_EPILOG, /* 20 */
+ XML_ERR_PEREF_IN_INT_SUBSET, /* 21 */
+ XML_ERR_ENTITYREF_NO_NAME, /* 22 */
+ XML_ERR_ENTITYREF_SEMICOL_MISSING, /* 23 */
+ XML_ERR_PEREF_NO_NAME, /* 24 */
+ XML_ERR_PEREF_SEMICOL_MISSING, /* 25 */
+ XML_ERR_UNDECLARED_ENTITY, /* 26 */
+ XML_WAR_UNDECLARED_ENTITY, /* 27 */
+ XML_ERR_UNPARSED_ENTITY, /* 28 */
+ XML_ERR_ENTITY_IS_EXTERNAL, /* 29 */
+ XML_ERR_ENTITY_IS_PARAMETER, /* 30 */
+ XML_ERR_UNKNOWN_ENCODING, /* 31 */
+ XML_ERR_UNSUPPORTED_ENCODING, /* 32 */
+ XML_ERR_STRING_NOT_STARTED, /* 33 */
+ XML_ERR_STRING_NOT_CLOSED, /* 34 */
+ XML_ERR_NS_DECL_ERROR, /* 35 */
+ XML_ERR_ENTITY_NOT_STARTED, /* 36 */
+ XML_ERR_ENTITY_NOT_FINISHED, /* 37 */
+ XML_ERR_LT_IN_ATTRIBUTE, /* 38 */
+ XML_ERR_ATTRIBUTE_NOT_STARTED, /* 39 */
+ XML_ERR_ATTRIBUTE_NOT_FINISHED, /* 40 */
+ XML_ERR_ATTRIBUTE_WITHOUT_VALUE, /* 41 */
+ XML_ERR_ATTRIBUTE_REDEFINED, /* 42 */
+ XML_ERR_LITERAL_NOT_STARTED, /* 43 */
+ XML_ERR_LITERAL_NOT_FINISHED, /* 44 */
+ XML_ERR_COMMENT_NOT_FINISHED, /* 45 */
+ XML_ERR_PI_NOT_STARTED, /* 46 */
+ XML_ERR_PI_NOT_FINISHED, /* 47 */
+ XML_ERR_NOTATION_NOT_STARTED, /* 48 */
+ XML_ERR_NOTATION_NOT_FINISHED, /* 49 */
+ XML_ERR_ATTLIST_NOT_STARTED, /* 50 */
+ XML_ERR_ATTLIST_NOT_FINISHED, /* 51 */
+ XML_ERR_MIXED_NOT_STARTED, /* 52 */
+ XML_ERR_MIXED_NOT_FINISHED, /* 53 */
+ XML_ERR_ELEMCONTENT_NOT_STARTED, /* 54 */
+ XML_ERR_ELEMCONTENT_NOT_FINISHED, /* 55 */
+ XML_ERR_XMLDECL_NOT_STARTED, /* 56 */
+ XML_ERR_XMLDECL_NOT_FINISHED, /* 57 */
+ XML_ERR_CONDSEC_NOT_STARTED, /* 58 */
+ XML_ERR_CONDSEC_NOT_FINISHED, /* 59 */
+ XML_ERR_EXT_SUBSET_NOT_FINISHED, /* 60 */
+ XML_ERR_DOCTYPE_NOT_FINISHED, /* 61 */
+ XML_ERR_MISPLACED_CDATA_END, /* 62 */
+ XML_ERR_CDATA_NOT_FINISHED, /* 63 */
+ XML_ERR_RESERVED_XML_NAME, /* 64 */
+ XML_ERR_SPACE_REQUIRED, /* 65 */
+ XML_ERR_SEPARATOR_REQUIRED, /* 66 */
+ XML_ERR_NMTOKEN_REQUIRED, /* 67 */
+ XML_ERR_NAME_REQUIRED, /* 68 */
+ XML_ERR_PCDATA_REQUIRED, /* 69 */
+ XML_ERR_URI_REQUIRED, /* 70 */
+ XML_ERR_PUBID_REQUIRED, /* 71 */
+ XML_ERR_LT_REQUIRED, /* 72 */
+ XML_ERR_GT_REQUIRED, /* 73 */
+ XML_ERR_LTSLASH_REQUIRED, /* 74 */
+ XML_ERR_EQUAL_REQUIRED, /* 75 */
+ XML_ERR_TAG_NAME_MISMATCH, /* 76 */
+ XML_ERR_TAG_NOT_FINISHED, /* 77 */
+ XML_ERR_STANDALONE_VALUE, /* 78 */
+ XML_ERR_ENCODING_NAME, /* 79 */
+ XML_ERR_HYPHEN_IN_COMMENT, /* 80 */
+ XML_ERR_INVALID_ENCODING, /* 81 */
+ XML_ERR_EXT_ENTITY_STANDALONE, /* 82 */
+ XML_ERR_CONDSEC_INVALID, /* 83 */
+ XML_ERR_VALUE_REQUIRED, /* 84 */
+ XML_ERR_NOT_WELL_BALANCED, /* 85 */
+ XML_ERR_EXTRA_CONTENT, /* 86 */
+ XML_ERR_ENTITY_CHAR_ERROR, /* 87 */
+ XML_ERR_ENTITY_PE_INTERNAL, /* 88 */
+ XML_ERR_ENTITY_LOOP, /* 89 */
+ XML_ERR_ENTITY_BOUNDARY, /* 90 */
+ XML_ERR_INVALID_URI, /* 91 */
+ XML_ERR_URI_FRAGMENT, /* 92 */
+ XML_WAR_CATALOG_PI, /* 93 */
+ XML_ERR_NO_DTD, /* 94 */
+ XML_ERR_CONDSEC_INVALID_KEYWORD, /* 95 */
+ XML_ERR_VERSION_MISSING, /* 96 */
+ XML_WAR_UNKNOWN_VERSION, /* 97 */
+ XML_WAR_LANG_VALUE, /* 98 */
+ XML_WAR_NS_URI, /* 99 */
+ XML_WAR_NS_URI_RELATIVE, /* 100 */
+ XML_ERR_MISSING_ENCODING, /* 101 */
+ XML_NS_ERR_XML_NAMESPACE = 200,
+ XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */
+ XML_NS_ERR_QNAME, /* 202 */
+ XML_NS_ERR_ATTRIBUTE_REDEFINED, /* 203 */
+ XML_DTD_ATTRIBUTE_DEFAULT = 500,
+ XML_DTD_ATTRIBUTE_REDEFINED, /* 501 */
+ XML_DTD_ATTRIBUTE_VALUE, /* 502 */
+ XML_DTD_CONTENT_ERROR, /* 503 */
+ XML_DTD_CONTENT_MODEL, /* 504 */
+ XML_DTD_CONTENT_NOT_DETERMINIST, /* 505 */
+ XML_DTD_DIFFERENT_PREFIX, /* 506 */
+ XML_DTD_ELEM_DEFAULT_NAMESPACE, /* 507 */
+ XML_DTD_ELEM_NAMESPACE, /* 508 */
+ XML_DTD_ELEM_REDEFINED, /* 509 */
+ XML_DTD_EMPTY_NOTATION, /* 510 */
+ XML_DTD_ENTITY_TYPE, /* 511 */
+ XML_DTD_ID_FIXED, /* 512 */
+ XML_DTD_ID_REDEFINED, /* 513 */
+ XML_DTD_ID_SUBSET, /* 514 */
+ XML_DTD_INVALID_CHILD, /* 515 */
+ XML_DTD_INVALID_DEFAULT, /* 516 */
+ XML_DTD_LOAD_ERROR, /* 517 */
+ XML_DTD_MISSING_ATTRIBUTE, /* 518 */
+ XML_DTD_MIXED_CORRUPT, /* 519 */
+ XML_DTD_MULTIPLE_ID, /* 520 */
+ XML_DTD_NO_DOC, /* 521 */
+ XML_DTD_NO_DTD, /* 522 */
+ XML_DTD_NO_ELEM_NAME, /* 523 */
+ XML_DTD_NO_PREFIX, /* 524 */
+ XML_DTD_NO_ROOT, /* 525 */
+ XML_DTD_NOTATION_REDEFINED, /* 526 */
+ XML_DTD_NOTATION_VALUE, /* 527 */
+ XML_DTD_NOT_EMPTY, /* 528 */
+ XML_DTD_NOT_PCDATA, /* 529 */
+ XML_DTD_NOT_STANDALONE, /* 530 */
+ XML_DTD_ROOT_NAME, /* 531 */
+ XML_DTD_STANDALONE_WHITE_SPACE, /* 532 */
+ XML_DTD_UNKNOWN_ATTRIBUTE, /* 533 */
+ XML_DTD_UNKNOWN_ELEM, /* 534 */
+ XML_DTD_UNKNOWN_ENTITY, /* 535 */
+ XML_DTD_UNKNOWN_ID, /* 536 */
+ XML_DTD_UNKNOWN_NOTATION, /* 537 */
+ XML_DTD_STANDALONE_DEFAULTED, /* 538 */
+ XML_HTML_STRUCURE_ERROR = 800,
+ XML_HTML_UNKNOWN_TAG, /* 801 */
+ XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000,
+ XML_RNGP_ATTR_CONFLICT, /* 1001 */
+ XML_RNGP_ATTRIBUTE_CHILDREN, /* 1002 */
+ XML_RNGP_ATTRIBUTE_CONTENT, /* 1003 */
+ XML_RNGP_ATTRIBUTE_EMPTY, /* 1004 */
+ XML_RNGP_ATTRIBUTE_NOOP, /* 1005 */
+ XML_RNGP_CHOICE_CONTENT, /* 1006 */
+ XML_RNGP_CHOICE_EMPTY, /* 1007 */
+ XML_RNGP_CREATE_FAILURE, /* 1008 */
+ XML_RNGP_DATA_CONTENT, /* 1009 */
+ XML_RNGP_DEF_CHOICE_AND_INTERLEAVE, /* 1010 */
+ XML_RNGP_DEFINE_CREATE_FAILED, /* 1011 */
+ XML_RNGP_DEFINE_EMPTY, /* 1012 */
+ XML_RNGP_DEFINE_MISSING, /* 1013 */
+ XML_RNGP_DEFINE_NAME_MISSING, /* 1014 */
+ XML_RNGP_ELEM_CONTENT_EMPTY, /* 1015 */
+ XML_RNGP_ELEM_CONTENT_ERROR, /* 1016 */
+ XML_RNGP_ELEMENT_EMPTY, /* 1017 */
+ XML_RNGP_ELEMENT_CONTENT, /* 1018 */
+ XML_RNGP_ELEMENT_NAME, /* 1019 */
+ XML_RNGP_ELEMENT_NO_CONTENT, /* 1020 */
+ XML_RNGP_ELEM_TEXT_CONFLICT, /* 1021 */
+ XML_RNGP_EMPTY, /* 1022 */
+ XML_RNGP_EMPTY_CONSTRUCT, /* 1023 */
+ XML_RNGP_EMPTY_CONTENT, /* 1024 */
+ XML_RNGP_EMPTY_NOT_EMPTY, /* 1025 */
+ XML_RNGP_ERROR_TYPE_LIB, /* 1026 */
+ XML_RNGP_EXCEPT_EMPTY, /* 1027 */
+ XML_RNGP_EXCEPT_MISSING, /* 1028 */
+ XML_RNGP_EXCEPT_MULTIPLE, /* 1029 */
+ XML_RNGP_EXCEPT_NO_CONTENT, /* 1030 */
+ XML_RNGP_EXTERNALREF_EMTPY, /* 1031 */
+ XML_RNGP_EXTERNAL_REF_FAILURE, /* 1032 */
+ XML_RNGP_EXTERNALREF_RECURSE, /* 1033 */
+ XML_RNGP_FORBIDDEN_ATTRIBUTE, /* 1034 */
+ XML_RNGP_FOREIGN_ELEMENT, /* 1035 */
+ XML_RNGP_GRAMMAR_CONTENT, /* 1036 */
+ XML_RNGP_GRAMMAR_EMPTY, /* 1037 */
+ XML_RNGP_GRAMMAR_MISSING, /* 1038 */
+ XML_RNGP_GRAMMAR_NO_START, /* 1039 */
+ XML_RNGP_GROUP_ATTR_CONFLICT, /* 1040 */
+ XML_RNGP_HREF_ERROR, /* 1041 */
+ XML_RNGP_INCLUDE_EMPTY, /* 1042 */
+ XML_RNGP_INCLUDE_FAILURE, /* 1043 */
+ XML_RNGP_INCLUDE_RECURSE, /* 1044 */
+ XML_RNGP_INTERLEAVE_ADD, /* 1045 */
+ XML_RNGP_INTERLEAVE_CREATE_FAILED, /* 1046 */
+ XML_RNGP_INTERLEAVE_EMPTY, /* 1047 */
+ XML_RNGP_INTERLEAVE_NO_CONTENT, /* 1048 */
+ XML_RNGP_INVALID_DEFINE_NAME, /* 1049 */
+ XML_RNGP_INVALID_URI, /* 1050 */
+ XML_RNGP_INVALID_VALUE, /* 1051 */
+ XML_RNGP_MISSING_HREF, /* 1052 */
+ XML_RNGP_NAME_MISSING, /* 1053 */
+ XML_RNGP_NEED_COMBINE, /* 1054 */
+ XML_RNGP_NOTALLOWED_NOT_EMPTY, /* 1055 */
+ XML_RNGP_NSNAME_ATTR_ANCESTOR, /* 1056 */
+ XML_RNGP_NSNAME_NO_NS, /* 1057 */
+ XML_RNGP_PARAM_FORBIDDEN, /* 1058 */
+ XML_RNGP_PARAM_NAME_MISSING, /* 1059 */
+ XML_RNGP_PARENTREF_CREATE_FAILED, /* 1060 */
+ XML_RNGP_PARENTREF_NAME_INVALID, /* 1061 */
+ XML_RNGP_PARENTREF_NO_NAME, /* 1062 */
+ XML_RNGP_PARENTREF_NO_PARENT, /* 1063 */
+ XML_RNGP_PARENTREF_NOT_EMPTY, /* 1064 */
+ XML_RNGP_PARSE_ERROR, /* 1065 */
+ XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME, /* 1066 */
+ XML_RNGP_PAT_ATTR_ATTR, /* 1067 */
+ XML_RNGP_PAT_ATTR_ELEM, /* 1068 */
+ XML_RNGP_PAT_DATA_EXCEPT_ATTR, /* 1069 */
+ XML_RNGP_PAT_DATA_EXCEPT_ELEM, /* 1070 */
+ XML_RNGP_PAT_DATA_EXCEPT_EMPTY, /* 1071 */
+ XML_RNGP_PAT_DATA_EXCEPT_GROUP, /* 1072 */
+ XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE, /* 1073 */
+ XML_RNGP_PAT_DATA_EXCEPT_LIST, /* 1074 */
+ XML_RNGP_PAT_DATA_EXCEPT_ONEMORE, /* 1075 */
+ XML_RNGP_PAT_DATA_EXCEPT_REF, /* 1076 */
+ XML_RNGP_PAT_DATA_EXCEPT_TEXT, /* 1077 */
+ XML_RNGP_PAT_LIST_ATTR, /* 1078 */
+ XML_RNGP_PAT_LIST_ELEM, /* 1079 */
+ XML_RNGP_PAT_LIST_INTERLEAVE, /* 1080 */
+ XML_RNGP_PAT_LIST_LIST, /* 1081 */
+ XML_RNGP_PAT_LIST_REF, /* 1082 */
+ XML_RNGP_PAT_LIST_TEXT, /* 1083 */
+ XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME, /* 1084 */
+ XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME, /* 1085 */
+ XML_RNGP_PAT_ONEMORE_GROUP_ATTR, /* 1086 */
+ XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR, /* 1087 */
+ XML_RNGP_PAT_START_ATTR, /* 1088 */
+ XML_RNGP_PAT_START_DATA, /* 1089 */
+ XML_RNGP_PAT_START_EMPTY, /* 1090 */
+ XML_RNGP_PAT_START_GROUP, /* 1091 */
+ XML_RNGP_PAT_START_INTERLEAVE, /* 1092 */
+ XML_RNGP_PAT_START_LIST, /* 1093 */
+ XML_RNGP_PAT_START_ONEMORE, /* 1094 */
+ XML_RNGP_PAT_START_TEXT, /* 1095 */
+ XML_RNGP_PAT_START_VALUE, /* 1096 */
+ XML_RNGP_PREFIX_UNDEFINED, /* 1097 */
+ XML_RNGP_REF_CREATE_FAILED, /* 1098 */
+ XML_RNGP_REF_CYCLE, /* 1099 */
+ XML_RNGP_REF_NAME_INVALID, /* 1100 */
+ XML_RNGP_REF_NO_DEF, /* 1101 */
+ XML_RNGP_REF_NO_NAME, /* 1102 */
+ XML_RNGP_REF_NOT_EMPTY, /* 1103 */
+ XML_RNGP_START_CHOICE_AND_INTERLEAVE, /* 1104 */
+ XML_RNGP_START_CONTENT, /* 1105 */
+ XML_RNGP_START_EMPTY, /* 1106 */
+ XML_RNGP_START_MISSING, /* 1107 */
+ XML_RNGP_TEXT_EXPECTED, /* 1108 */
+ XML_RNGP_TEXT_HAS_CHILD, /* 1109 */
+ XML_RNGP_TYPE_MISSING, /* 1110 */
+ XML_RNGP_TYPE_NOT_FOUND, /* 1111 */
+ XML_RNGP_TYPE_VALUE, /* 1112 */
+ XML_RNGP_UNKNOWN_ATTRIBUTE, /* 1113 */
+ XML_RNGP_UNKNOWN_COMBINE, /* 1114 */
+ XML_RNGP_UNKNOWN_CONSTRUCT, /* 1115 */
+ XML_RNGP_UNKNOWN_TYPE_LIB, /* 1116 */
+ XML_RNGP_URI_FRAGMENT, /* 1117 */
+ XML_RNGP_URI_NOT_ABSOLUTE, /* 1118 */
+ XML_RNGP_VALUE_EMPTY, /* 1119 */
+ XML_RNGP_VALUE_NO_CONTENT, /* 1120 */
+ XML_RNGP_XMLNS_NAME, /* 1121 */
+ XML_RNGP_XML_NS, /* 1122 */
+ XML_XPATH_EXPRESSION_OK = 1200,
+ XML_XPATH_NUMBER_ERROR, /* 1201 */
+ XML_XPATH_UNFINISHED_LITERAL_ERROR, /* 1202 */
+ XML_XPATH_START_LITERAL_ERROR, /* 1203 */
+ XML_XPATH_VARIABLE_REF_ERROR, /* 1204 */
+ XML_XPATH_UNDEF_VARIABLE_ERROR, /* 1205 */
+ XML_XPATH_INVALID_PREDICATE_ERROR, /* 1206 */
+ XML_XPATH_EXPR_ERROR, /* 1207 */
+ XML_XPATH_UNCLOSED_ERROR, /* 1208 */
+ XML_XPATH_UNKNOWN_FUNC_ERROR, /* 1209 */
+ XML_XPATH_INVALID_OPERAND, /* 1210 */
+ XML_XPATH_INVALID_TYPE, /* 1211 */
+ XML_XPATH_INVALID_ARITY, /* 1212 */
+ XML_XPATH_INVALID_CTXT_SIZE, /* 1213 */
+ XML_XPATH_INVALID_CTXT_POSITION, /* 1214 */
+ XML_XPATH_MEMORY_ERROR, /* 1215 */
+ XML_XPTR_SYNTAX_ERROR, /* 1216 */
+ XML_XPTR_RESOURCE_ERROR, /* 1217 */
+ XML_XPTR_SUB_RESOURCE_ERROR, /* 1218 */
+ XML_XPATH_UNDEF_PREFIX_ERROR, /* 1219 */
+ XML_XPATH_ENCODING_ERROR, /* 1220 */
+ XML_XPATH_INVALID_CHAR_ERROR, /* 1221 */
+ XML_TREE_INVALID_HEX = 1300,
+ XML_TREE_INVALID_DEC, /* 1301 */
+ XML_TREE_UNTERMINATED_ENTITY, /* 1302 */
+ XML_SAVE_NOT_UTF8 = 1400,
+ XML_SAVE_CHAR_INVALID, /* 1401 */
+ XML_SAVE_NO_DOCTYPE, /* 1402 */
+ XML_SAVE_UNKNOWN_ENCODING, /* 1403 */
+ XML_REGEXP_COMPILE_ERROR = 1450,
+ XML_IO_UNKNOWN = 1500,
+ XML_IO_EACCES, /* 1501 */
+ XML_IO_EAGAIN, /* 1502 */
+ XML_IO_EBADF, /* 1503 */
+ XML_IO_EBADMSG, /* 1504 */
+ XML_IO_EBUSY, /* 1505 */
+ XML_IO_ECANCELED, /* 1506 */
+ XML_IO_ECHILD, /* 1507 */
+ XML_IO_EDEADLK, /* 1508 */
+ XML_IO_EDOM, /* 1509 */
+ XML_IO_EEXIST, /* 1510 */
+ XML_IO_EFAULT, /* 1511 */
+ XML_IO_EFBIG, /* 1512 */
+ XML_IO_EINPROGRESS, /* 1513 */
+ XML_IO_EINTR, /* 1514 */
+ XML_IO_EINVAL, /* 1515 */
+ XML_IO_EIO, /* 1516 */
+ XML_IO_EISDIR, /* 1517 */
+ XML_IO_EMFILE, /* 1518 */
+ XML_IO_EMLINK, /* 1519 */
+ XML_IO_EMSGSIZE, /* 1520 */
+ XML_IO_ENAMETOOLONG, /* 1521 */
+ XML_IO_ENFILE, /* 1522 */
+ XML_IO_ENODEV, /* 1523 */
+ XML_IO_ENOENT, /* 1524 */
+ XML_IO_ENOEXEC, /* 1525 */
+ XML_IO_ENOLCK, /* 1526 */
+ XML_IO_ENOMEM, /* 1527 */
+ XML_IO_ENOSPC, /* 1528 */
+ XML_IO_ENOSYS, /* 1529 */
+ XML_IO_ENOTDIR, /* 1530 */
+ XML_IO_ENOTEMPTY, /* 1531 */
+ XML_IO_ENOTSUP, /* 1532 */
+ XML_IO_ENOTTY, /* 1533 */
+ XML_IO_ENXIO, /* 1534 */
+ XML_IO_EPERM, /* 1535 */
+ XML_IO_EPIPE, /* 1536 */
+ XML_IO_ERANGE, /* 1537 */
+ XML_IO_EROFS, /* 1538 */
+ XML_IO_ESPIPE, /* 1539 */
+ XML_IO_ESRCH, /* 1540 */
+ XML_IO_ETIMEDOUT, /* 1541 */
+ XML_IO_EXDEV, /* 1542 */
+ XML_IO_NETWORK_ATTEMPT, /* 1543 */
+ XML_IO_ENCODER, /* 1544 */
+ XML_IO_FLUSH, /* 1545 */
+ XML_IO_WRITE, /* 1546 */
+ XML_IO_NO_INPUT, /* 1547 */
+ XML_IO_BUFFER_FULL, /* 1548 */
+ XML_IO_LOAD_ERROR, /* 1549 */
+ XML_IO_ENOTSOCK, /* 1550 */
+ XML_IO_EISCONN, /* 1551 */
+ XML_IO_ECONNREFUSED, /* 1552 */
+ XML_IO_ENETUNREACH, /* 1553 */
+ XML_IO_EADDRINUSE, /* 1554 */
+ XML_IO_EALREADY, /* 1555 */
+ XML_IO_EAFNOSUPPORT, /* 1556 */
+ XML_XINCLUDE_RECURSION=1600,
+ XML_XINCLUDE_PARSE_VALUE, /* 1601 */
+ XML_XINCLUDE_ENTITY_DEF_MISMATCH, /* 1602 */
+ XML_XINCLUDE_NO_HREF, /* 1603 */
+ XML_XINCLUDE_NO_FALLBACK, /* 1604 */
+ XML_XINCLUDE_HREF_URI, /* 1605 */
+ XML_XINCLUDE_TEXT_FRAGMENT, /* 1606 */
+ XML_XINCLUDE_TEXT_DOCUMENT, /* 1607 */
+ XML_XINCLUDE_INVALID_CHAR, /* 1608 */
+ XML_XINCLUDE_BUILD_FAILED, /* 1609 */
+ XML_XINCLUDE_UNKNOWN_ENCODING, /* 1610 */
+ XML_XINCLUDE_MULTIPLE_ROOT, /* 1611 */
+ XML_XINCLUDE_XPTR_FAILED, /* 1612 */
+ XML_XINCLUDE_XPTR_RESULT, /* 1613 */
+ XML_XINCLUDE_INCLUDE_IN_INCLUDE, /* 1614 */
+ XML_XINCLUDE_FALLBACKS_IN_INCLUDE, /* 1615 */
+ XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE, /* 1616 */
+ XML_XINCLUDE_DEPRECATED_NS, /* 1617 */
+ XML_XINCLUDE_FRAGMENT_ID, /* 1618 */
+ XML_CATALOG_MISSING_ATTR = 1650,
+ XML_CATALOG_ENTRY_BROKEN, /* 1651 */
+ XML_CATALOG_PREFER_VALUE, /* 1652 */
+ XML_CATALOG_NOT_CATALOG, /* 1653 */
+ XML_CATALOG_RECURSION, /* 1654 */
+ XML_SCHEMAP_PREFIX_UNDEFINED = 1700,
+ XML_SCHEMAP_ATTRFORMDEFAULT_VALUE, /* 1701 */
+ XML_SCHEMAP_ATTRGRP_NONAME_NOREF, /* 1702 */
+ XML_SCHEMAP_ATTR_NONAME_NOREF, /* 1703 */
+ XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF, /* 1704 */
+ XML_SCHEMAP_ELEMFORMDEFAULT_VALUE, /* 1705 */
+ XML_SCHEMAP_ELEM_NONAME_NOREF, /* 1706 */
+ XML_SCHEMAP_EXTENSION_NO_BASE, /* 1707 */
+ XML_SCHEMAP_FACET_NO_VALUE, /* 1708 */
+ XML_SCHEMAP_FAILED_BUILD_IMPORT, /* 1709 */
+ XML_SCHEMAP_GROUP_NONAME_NOREF, /* 1710 */
+ XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI, /* 1711 */
+ XML_SCHEMAP_IMPORT_REDEFINE_NSNAME, /* 1712 */
+ XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI, /* 1713 */
+ XML_SCHEMAP_INVALID_BOOLEAN, /* 1714 */
+ XML_SCHEMAP_INVALID_ENUM, /* 1715 */
+ XML_SCHEMAP_INVALID_FACET, /* 1716 */
+ XML_SCHEMAP_INVALID_FACET_VALUE, /* 1717 */
+ XML_SCHEMAP_INVALID_MAXOCCURS, /* 1718 */
+ XML_SCHEMAP_INVALID_MINOCCURS, /* 1719 */
+ XML_SCHEMAP_INVALID_REF_AND_SUBTYPE, /* 1720 */
+ XML_SCHEMAP_INVALID_WHITE_SPACE, /* 1721 */
+ XML_SCHEMAP_NOATTR_NOREF, /* 1722 */
+ XML_SCHEMAP_NOTATION_NO_NAME, /* 1723 */
+ XML_SCHEMAP_NOTYPE_NOREF, /* 1724 */
+ XML_SCHEMAP_REF_AND_SUBTYPE, /* 1725 */
+ XML_SCHEMAP_RESTRICTION_NONAME_NOREF, /* 1726 */
+ XML_SCHEMAP_SIMPLETYPE_NONAME, /* 1727 */
+ XML_SCHEMAP_TYPE_AND_SUBTYPE, /* 1728 */
+ XML_SCHEMAP_UNKNOWN_ALL_CHILD, /* 1729 */
+ XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD, /* 1730 */
+ XML_SCHEMAP_UNKNOWN_ATTR_CHILD, /* 1731 */
+ XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD, /* 1732 */
+ XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP, /* 1733 */
+ XML_SCHEMAP_UNKNOWN_BASE_TYPE, /* 1734 */
+ XML_SCHEMAP_UNKNOWN_CHOICE_CHILD, /* 1735 */
+ XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD, /* 1736 */
+ XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD, /* 1737 */
+ XML_SCHEMAP_UNKNOWN_ELEM_CHILD, /* 1738 */
+ XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD, /* 1739 */
+ XML_SCHEMAP_UNKNOWN_FACET_CHILD, /* 1740 */
+ XML_SCHEMAP_UNKNOWN_FACET_TYPE, /* 1741 */
+ XML_SCHEMAP_UNKNOWN_GROUP_CHILD, /* 1742 */
+ XML_SCHEMAP_UNKNOWN_IMPORT_CHILD, /* 1743 */
+ XML_SCHEMAP_UNKNOWN_LIST_CHILD, /* 1744 */
+ XML_SCHEMAP_UNKNOWN_NOTATION_CHILD, /* 1745 */
+ XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD, /* 1746 */
+ XML_SCHEMAP_UNKNOWN_REF, /* 1747 */
+ XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD, /* 1748 */
+ XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD, /* 1749 */
+ XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD, /* 1750 */
+ XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD, /* 1751 */
+ XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD, /* 1752 */
+ XML_SCHEMAP_UNKNOWN_TYPE, /* 1753 */
+ XML_SCHEMAP_UNKNOWN_UNION_CHILD, /* 1754 */
+ XML_SCHEMAP_ELEM_DEFAULT_FIXED, /* 1755 */
+ XML_SCHEMAP_REGEXP_INVALID, /* 1756 */
+ XML_SCHEMAP_FAILED_LOAD, /* 1756 */
+ XML_SCHEMAP_NOTHING_TO_PARSE, /* 1757 */
+ XML_SCHEMAP_NOROOT, /* 1758 */
+ XML_SCHEMAP_REDEFINED_GROUP, /* 1759 */
+ XML_SCHEMAP_REDEFINED_TYPE, /* 1760 */
+ XML_SCHEMAP_REDEFINED_ELEMENT, /* 1761 */
+ XML_SCHEMAP_REDEFINED_ATTRGROUP, /* 1762 */
+ XML_SCHEMAP_REDEFINED_ATTR, /* 1763 */
+ XML_SCHEMAP_REDEFINED_NOTATION, /* 1764 */
+ XML_SCHEMAP_FAILED_PARSE, /* 1765 */
+ XML_SCHEMAP_UNKNOWN_PREFIX, /* 1766 */
+ XML_SCHEMAP_DEF_AND_PREFIX, /* 1767 */
+ XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD, /* 1768 */
+ XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI, /* 1769 */
+ XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI, /* 1770 */
+ XML_SCHEMAP_NOT_SCHEMA, /* 1771 */
+ XML_SCHEMAV_NOROOT = 1800,
+ XML_SCHEMAV_UNDECLAREDELEM, /* 1801 */
+ XML_SCHEMAV_NOTTOPLEVEL, /* 1802 */
+ XML_SCHEMAV_MISSING, /* 1803 */
+ XML_SCHEMAV_WRONGELEM, /* 1804 */
+ XML_SCHEMAV_NOTYPE, /* 1805 */
+ XML_SCHEMAV_NOROLLBACK, /* 1806 */
+ XML_SCHEMAV_ISABSTRACT, /* 1807 */
+ XML_SCHEMAV_NOTEMPTY, /* 1808 */
+ XML_SCHEMAV_ELEMCONT, /* 1809 */
+ XML_SCHEMAV_HAVEDEFAULT, /* 1810 */
+ XML_SCHEMAV_NOTNILLABLE, /* 1811 */
+ XML_SCHEMAV_EXTRACONTENT, /* 1812 */
+ XML_SCHEMAV_INVALIDATTR, /* 1813 */
+ XML_SCHEMAV_INVALIDELEM, /* 1814 */
+ XML_SCHEMAV_NOTDETERMINIST, /* 1815 */
+ XML_SCHEMAV_CONSTRUCT, /* 1816 */
+ XML_SCHEMAV_INTERNAL, /* 1817 */
+ XML_SCHEMAV_NOTSIMPLE, /* 1818 */
+ XML_SCHEMAV_ATTRUNKNOWN, /* 1819 */
+ XML_SCHEMAV_ATTRINVALID, /* 1820 */
+ XML_SCHEMAV_VALUE, /* 1821 */
+ XML_SCHEMAV_FACET, /* 1822 */
+ XML_XPTR_UNKNOWN_SCHEME = 1900,
+ XML_XPTR_CHILDSEQ_START, /* 1901 */
+ XML_XPTR_EVAL_FAILED, /* 1902 */
+ XML_XPTR_EXTRA_OBJECTS, /* 1903 */
+ XML_C14N_CREATE_CTXT = 1950,
+ XML_C14N_REQUIRES_UTF8, /* 1951 */
+ XML_C14N_CREATE_STACK, /* 1952 */
+ XML_C14N_INVALID_NODE, /* 1953 */
+ XML_FTP_PASV_ANSWER = 2000,
+ XML_FTP_EPSV_ANSWER, /* 2001 */
+ XML_FTP_ACCNT, /* 2002 */
+ XML_HTTP_URL_SYNTAX = 2020,
+ XML_HTTP_USE_IP, /* 2021 */
+ XML_HTTP_UNKNOWN_HOST /* 2022 */
+} xmlParserErrors;
+
+/**
+ * xmlGenericErrorFunc:
+ * @ctx: a parsing context
+ * @msg: the message
+ * @...: the extra arguments of the varags to format the message
+ *
+ * Signature of the function to use when there is an error and
+ * no parsing or validity context available .
+ */
+typedef void (*xmlGenericErrorFunc) (void *ctx,
+ const char *msg,
+ ...);
+/**
+ * xmlStructuredErrorFunc:
+ * @userData: user provided data for the error callback
+ * @error: the error being raised.
+ *
+ * Signature of the function to use when there is an error and
+ * the module handles the new error reporting mechanism.
+ */
+typedef void (*xmlStructuredErrorFunc) (void *userData, xmlErrorPtr error);
+
+/*
+ * Use the following function to reset the two global variables
+ * xmlGenericError and xmlGenericErrorContext.
+ */
+XMLPUBFUN void XMLCALL
+ xmlSetGenericErrorFunc (void *ctx,
+ xmlGenericErrorFunc handler);
+XMLPUBFUN void XMLCALL
+ initGenericErrorDefaultFunc (xmlGenericErrorFunc *handler);
+
+XMLPUBFUN void XMLCALL
+ xmlSetStructuredErrorFunc (void *ctx,
+ xmlStructuredErrorFunc handler);
+/*
+ * Default message routines used by SAX and Valid context for error
+ * and warning reporting.
+ */
+XMLPUBFUN void XMLCALL
+ xmlParserError (void *ctx,
+ const char *msg,
+ ...);
+XMLPUBFUN void XMLCALL
+ xmlParserWarning (void *ctx,
+ const char *msg,
+ ...);
+XMLPUBFUN void XMLCALL
+ xmlParserValidityError (void *ctx,
+ const char *msg,
+ ...);
+XMLPUBFUN void XMLCALL
+ xmlParserValidityWarning (void *ctx,
+ const char *msg,
+ ...);
+XMLPUBFUN void XMLCALL
+ xmlParserPrintFileInfo (xmlParserInputPtr input);
+XMLPUBFUN void XMLCALL
+ xmlParserPrintFileContext (xmlParserInputPtr input);
+
+/*
+ * Extended error information routines
+ */
+XMLPUBFUN xmlErrorPtr XMLCALL
+ xmlGetLastError (void);
+XMLPUBFUN void XMLCALL
+ xmlResetLastError (void);
+XMLPUBFUN xmlErrorPtr XMLCALL
+ xmlCtxtGetLastError (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlCtxtResetLastError (void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlResetError (xmlErrorPtr err);
+XMLPUBFUN int XMLCALL
+ xmlCopyError (xmlErrorPtr from,
+ xmlErrorPtr to);
+
+#ifdef IN_LIBXML
+/*
+ * Internal callback reporting routine
+ */
+XMLPUBFUN void XMLCALL
+ __xmlRaiseError (xmlStructuredErrorFunc schannel,
+ xmlGenericErrorFunc channel,
+ void *data,
+ void *ctx,
+ void *node,
+ int domain,
+ int code,
+ xmlErrorLevel level,
+ const char *file,
+ int line,
+ const char *str1,
+ const char *str2,
+ const char *str3,
+ int int1,
+ int int2,
+ const char *msg,
+ ...);
+XMLPUBFUN void XMLCALL
+ __xmlSimpleError (int domain,
+ int code,
+ xmlNodePtr node,
+ const char *msg,
+ const char *extra);
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_ERROR_H__ */
diff --git a/include/libxml/xmlexports.h b/include/libxml/xmlexports.h
new file mode 100644
index 0000000..ee03cad
--- /dev/null
+++ b/include/libxml/xmlexports.h
@@ -0,0 +1,138 @@
+/*
+ * Summary: macros for marking symbols as exportable/importable.
+ * Description: macros for marking symbols as exportable/importable.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Igor Zlatovic <igor@zlatkovic.com>
+ */
+
+#ifndef __XML_EXPORTS_H__
+#define __XML_EXPORTS_H__
+
+/**
+ * XMLPUBFUN, XMLPUBVAR, XMLCALL
+ *
+ * Macros which declare an exportable function, an exportable variable and
+ * the calling convention used for functions.
+ *
+ * Please use an extra block for every platform/compiler combination when
+ * modifying this, rather than overlong #ifdef lines. This helps
+ * readability as well as the fact that different compilers on the same
+ * platform might need different definitions.
+ */
+
+/**
+ * XMLPUBFUN:
+ *
+ * Macros which declare an exportable function
+ */
+#define XMLPUBFUN
+/**
+ * XMLPUBVAR:
+ *
+ * Macros which declare an exportable variable
+ */
+#define XMLPUBVAR extern
+/**
+ * XMLCALL:
+ *
+ * Macros which declare the called convention for exported functions
+ */
+#define XMLCALL
+
+/** DOC_DISABLE */
+
+/* Windows platform with MS compiler */
+#if defined(_WIN32) && defined(_MSC_VER)
+ #undef XMLPUBFUN
+ #undef XMLPUBVAR
+ #undef XMLCALL
+ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+ #define XMLPUBFUN __declspec(dllexport)
+ #define XMLPUBVAR __declspec(dllexport)
+ #else
+ #define XMLPUBFUN
+ #if !defined(LIBXML_STATIC)
+ #define XMLPUBVAR __declspec(dllimport) extern
+ #else
+ #define XMLPUBVAR extern
+ #endif
+ #endif
+ #define XMLCALL __cdecl
+ #if !defined _REENTRANT
+ #define _REENTRANT
+ #endif
+#endif
+
+/* Windows platform with Borland compiler */
+#if defined(_WIN32) && defined(__BORLANDC__)
+ #undef XMLPUBFUN
+ #undef XMLPUBVAR
+ #undef XMLCALL
+ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+ #define XMLPUBFUN __declspec(dllexport)
+ #define XMLPUBVAR __declspec(dllexport) extern
+ #else
+ #define XMLPUBFUN
+ #if !defined(LIBXML_STATIC)
+ #define XMLPUBVAR __declspec(dllimport) extern
+ #else
+ #define XMLPUBVAR extern
+ #endif
+ #endif
+ #define XMLCALL __cdecl
+ #if !defined _REENTRANT
+ #define _REENTRANT
+ #endif
+#endif
+
+/* Windows platform with GNU compiler (Mingw) */
+#if defined(_WIN32) && defined(__MINGW32__)
+ #undef XMLPUBFUN
+ #undef XMLPUBVAR
+ #undef XMLCALL
+ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+ #define XMLPUBFUN __declspec(dllexport)
+ #define XMLPUBVAR __declspec(dllexport)
+ #else
+ #define XMLPUBFUN
+ #if !defined(LIBXML_STATIC)
+ #define XMLPUBVAR __declspec(dllimport) extern
+ #else
+ #define XMLPUBVAR extern
+ #endif
+ #endif
+ #define XMLCALL __cdecl
+ #if !defined _REENTRANT
+ #define _REENTRANT
+ #endif
+#endif
+
+/* Cygwin platform, GNU compiler */
+#if defined(_WIN32) && defined(__CYGWIN__)
+ #undef XMLPUBFUN
+ #undef XMLPUBVAR
+ #undef XMLCALL
+ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+ #define XMLPUBFUN __declspec(dllexport)
+ #define XMLPUBVAR __declspec(dllexport)
+ #else
+ #define XMLPUBFUN
+ #if !defined(LIBXML_STATIC)
+ #define XMLPUBVAR __declspec(dllimport) extern
+ #else
+ #define XMLPUBVAR
+ #endif
+ #endif
+ #define XMLCALL __cdecl
+#endif
+
+/* Compatibility */
+#if !defined(LIBXML_DLL_IMPORT)
+#define LIBXML_DLL_IMPORT XMLPUBVAR
+#endif
+
+#endif /* __XML_EXPORTS_H__ */
+
+
diff --git a/include/libxml/xmlmemory.h b/include/libxml/xmlmemory.h
new file mode 100644
index 0000000..0e6a767
--- /dev/null
+++ b/include/libxml/xmlmemory.h
@@ -0,0 +1,220 @@
+/*
+ * Summary: interface for the memory allocator
+ * Description: provides interfaces for the memory allocator,
+ * including debugging capabilities.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __DEBUG_MEMORY_ALLOC__
+#define __DEBUG_MEMORY_ALLOC__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+
+/**
+ * DEBUG_MEMORY:
+ *
+ * DEBUG_MEMORY replaces the allocator with a collect and debug
+ * shell to the libc allocator.
+ * DEBUG_MEMORY should only be activated when debugging
+ * libxml i.e. if libxml has been configured with --with-debug-mem too.
+ */
+/* #define DEBUG_MEMORY_FREED */
+/* #define DEBUG_MEMORY_LOCATION */
+
+#ifdef DEBUG
+#ifndef DEBUG_MEMORY
+#define DEBUG_MEMORY
+#endif
+#endif
+
+/**
+ * DEBUG_MEMORY_LOCATION:
+ *
+ * DEBUG_MEMORY_LOCATION should be activated only when debugging
+ * libxml i.e. if libxml has been configured with --with-debug-mem too.
+ */
+#ifdef DEBUG_MEMORY_LOCATION
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The XML memory wrapper support 4 basic overloadable functions.
+ */
+/**
+ * xmlFreeFunc:
+ * @mem: an already allocated block of memory
+ *
+ * Signature for a free() implementation.
+ */
+typedef void (XMLCALL *xmlFreeFunc)(void *mem);
+/**
+ * xmlMallocFunc:
+ * @size: the size requested in bytes
+ *
+ * Signature for a malloc() implementation.
+ *
+ * Returns a pointer to the newly allocated block or NULL in case of error.
+ */
+typedef void *(XMLCALL *xmlMallocFunc)(size_t size);
+
+/**
+ * xmlReallocFunc:
+ * @mem: an already allocated block of memory
+ * @size: the new size requested in bytes
+ *
+ * Signature for a realloc() implementation.
+ *
+ * Returns a pointer to the newly reallocated block or NULL in case of error.
+ */
+typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
+
+/**
+ * xmlStrdupFunc:
+ * @str: a zero terminated string
+ *
+ * Signature for an strdup() implementation.
+ *
+ * Returns the copy of the string or NULL in case of error.
+ */
+typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
+
+/*
+ * The 4 interfaces used for all memory handling within libxml.
+LIBXML_DLL_IMPORT extern xmlFreeFunc xmlFree;
+LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMalloc;
+LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMallocAtomic;
+LIBXML_DLL_IMPORT extern xmlReallocFunc xmlRealloc;
+LIBXML_DLL_IMPORT extern xmlStrdupFunc xmlMemStrdup;
+ */
+
+/*
+ * The way to overload the existing functions.
+ * The xmlGc function have an extra entry for atomic block
+ * allocations useful for garbage collected memory allocators
+ */
+XMLPUBFUN int XMLCALL
+ xmlMemSetup (xmlFreeFunc freeFunc,
+ xmlMallocFunc mallocFunc,
+ xmlReallocFunc reallocFunc,
+ xmlStrdupFunc strdupFunc);
+XMLPUBFUN int XMLCALL
+ xmlMemGet (xmlFreeFunc *freeFunc,
+ xmlMallocFunc *mallocFunc,
+ xmlReallocFunc *reallocFunc,
+ xmlStrdupFunc *strdupFunc);
+XMLPUBFUN int XMLCALL
+ xmlGcMemSetup (xmlFreeFunc freeFunc,
+ xmlMallocFunc mallocFunc,
+ xmlMallocFunc mallocAtomicFunc,
+ xmlReallocFunc reallocFunc,
+ xmlStrdupFunc strdupFunc);
+XMLPUBFUN int XMLCALL
+ xmlGcMemGet (xmlFreeFunc *freeFunc,
+ xmlMallocFunc *mallocFunc,
+ xmlMallocFunc *mallocAtomicFunc,
+ xmlReallocFunc *reallocFunc,
+ xmlStrdupFunc *strdupFunc);
+
+/*
+ * Initialization of the memory layer.
+ */
+XMLPUBFUN int XMLCALL
+ xmlInitMemory (void);
+
+/*
+ * Cleanup of the memory layer.
+ */
+XMLPUBFUN void XMLCALL
+ xmlCleanupMemory (void);
+/*
+ * These are specific to the XML debug memory wrapper.
+ */
+XMLPUBFUN int XMLCALL
+ xmlMemUsed (void);
+XMLPUBFUN void XMLCALL
+ xmlMemDisplay (FILE *fp);
+XMLPUBFUN void XMLCALL
+ xmlMemShow (FILE *fp, int nr);
+XMLPUBFUN void XMLCALL
+ xmlMemoryDump (void);
+XMLPUBFUN void * XMLCALL
+ xmlMemMalloc (size_t size);
+XMLPUBFUN void * XMLCALL
+ xmlMemRealloc (void *ptr,size_t size);
+XMLPUBFUN void XMLCALL
+ xmlMemFree (void *ptr);
+XMLPUBFUN char * XMLCALL
+ xmlMemoryStrdup (const char *str);
+XMLPUBFUN void * XMLCALL
+ xmlMallocLoc (size_t size, const char *file, int line);
+XMLPUBFUN void * XMLCALL
+ xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
+XMLPUBFUN void * XMLCALL
+ xmlMallocAtomicLoc (size_t size, const char *file, int line);
+XMLPUBFUN char * XMLCALL
+ xmlMemStrdupLoc (const char *str, const char *file, int line);
+
+
+#ifdef DEBUG_MEMORY_LOCATION
+/**
+ * xmlMalloc:
+ * @size: number of bytes to allocate
+ *
+ * Wrapper for the malloc() function used in the XML library.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
+/**
+ * xmlMallocAtomic:
+ * @size: number of bytes to allocate
+ *
+ * Wrapper for the malloc() function used in the XML library for allocation
+ * of block not containing pointers to other areas.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
+/**
+ * xmlRealloc:
+ * @ptr: pointer to the existing allocated area
+ * @size: number of bytes to allocate
+ *
+ * Wrapper for the realloc() function used in the XML library.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
+/**
+ * xmlMemStrdup:
+ * @str: pointer to the existing string
+ *
+ * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
+
+#endif /* DEBUG_MEMORY_LOCATION */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#ifndef __XML_GLOBALS_H
+#ifndef __XML_THREADS_H__
+#include <libxml/threads.h>
+#include <libxml/globals.h>
+#endif
+#endif
+
+#endif /* __DEBUG_MEMORY_ALLOC__ */
+
diff --git a/include/libxml/xmlreader.h b/include/libxml/xmlreader.h
new file mode 100644
index 0000000..4e45201
--- /dev/null
+++ b/include/libxml/xmlreader.h
@@ -0,0 +1,320 @@
+/*
+ * Summary: the XMLReader implementation
+ * Description: API of the XML streaming API based on C# interfaces.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XMLREADER_H__
+#define __XML_XMLREADER_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xmlIO.h>
+#ifdef LIBXML_SCHEMAS_ENABLED
+#include <libxml/relaxng.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ XML_PARSER_LOADDTD = 1,
+ XML_PARSER_DEFAULTATTRS = 2,
+ XML_PARSER_VALIDATE = 3,
+ XML_PARSER_SUBST_ENTITIES = 4
+} xmlParserProperties;
+
+typedef enum {
+ XML_PARSER_SEVERITY_VALIDITY_WARNING = 1,
+ XML_PARSER_SEVERITY_VALIDITY_ERROR = 2,
+ XML_PARSER_SEVERITY_WARNING = 3,
+ XML_PARSER_SEVERITY_ERROR = 4
+} xmlParserSeverities;
+
+typedef enum {
+ XML_READER_TYPE_NONE = 0,
+ XML_READER_TYPE_ELEMENT = 1,
+ XML_READER_TYPE_ATTRIBUTE = 2,
+ XML_READER_TYPE_TEXT = 3,
+ XML_READER_TYPE_CDATA = 4,
+ XML_READER_TYPE_ENTITY_REFERENCE = 5,
+ XML_READER_TYPE_ENTITY = 6,
+ XML_READER_TYPE_PROCESSING_INSTRUCTION = 7,
+ XML_READER_TYPE_COMMENT = 8,
+ XML_READER_TYPE_DOCUMENT = 9,
+ XML_READER_TYPE_DOCUMENT_TYPE = 10,
+ XML_READER_TYPE_DOCUMENT_FRAGMENT = 11,
+ XML_READER_TYPE_NOTATION = 12,
+ XML_READER_TYPE_WHITESPACE = 13,
+ XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14,
+ XML_READER_TYPE_END_ELEMENT = 15,
+ XML_READER_TYPE_END_ENTITY = 16,
+ XML_READER_TYPE_XML_DECLARATION = 17
+} xmlReaderTypes;
+
+typedef struct _xmlTextReader xmlTextReader;
+typedef xmlTextReader *xmlTextReaderPtr;
+
+/*
+ * Constructors & Destructor
+ */
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlNewTextReader (xmlParserInputBufferPtr input,
+ const char *URI);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlNewTextReaderFilename(const char *URI);
+XMLPUBFUN void XMLCALL
+ xmlFreeTextReader (xmlTextReaderPtr reader);
+
+/*
+ * Iterators
+ */
+XMLPUBFUN int XMLCALL
+ xmlTextReaderRead (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderReadInnerXml (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderReadOuterXml (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderReadString (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderReadAttributeValue (xmlTextReaderPtr reader);
+
+/*
+ * Attributes of the node
+ */
+XMLPUBFUN int XMLCALL
+ xmlTextReaderAttributeCount(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderDepth (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderHasAttributes(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderHasValue(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderIsDefault (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderNodeType (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderQuoteChar (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderReadState (xmlTextReaderPtr reader);
+
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstBaseUri (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstLocalName (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstName (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstPrefix (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstXmlLang (xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstString (xmlTextReaderPtr reader,
+ const xmlChar *str);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlTextReaderConstValue (xmlTextReaderPtr reader);
+
+/*
+ * use the Const version of the routine for
+ * better performance and simpler code
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderBaseUri (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderLocalName (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderName (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderNamespaceUri(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderPrefix (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderXmlLang (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderValue (xmlTextReaderPtr reader);
+
+/*
+ * Methods of the XmlTextReader
+ */
+XMLPUBFUN int XMLCALL
+ xmlTextReaderClose (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderGetAttributeNo (xmlTextReaderPtr reader,
+ int no);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderGetAttribute (xmlTextReaderPtr reader,
+ const xmlChar *name);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderGetAttributeNs (xmlTextReaderPtr reader,
+ const xmlChar *localName,
+ const xmlChar *namespaceURI);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+ xmlTextReaderGetRemainder (xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderLookupNamespace(xmlTextReaderPtr reader,
+ const xmlChar *prefix);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader,
+ int no);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader,
+ const xmlChar *name);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
+ const xmlChar *localName,
+ const xmlChar *namespaceURI);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderMoveToElement (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderNormalization (xmlTextReaderPtr reader);
+
+/*
+ * Extensions
+ */
+XMLPUBFUN int XMLCALL
+ xmlTextReaderSetParserProp (xmlTextReaderPtr reader,
+ int prop,
+ int value);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderGetParserProp (xmlTextReaderPtr reader,
+ int prop);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlTextReaderCurrentNode (xmlTextReaderPtr reader);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlTextReaderPreserve (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderPreservePattern(xmlTextReaderPtr reader,
+ const xmlChar *pattern,
+ const xmlChar **namespaces);
+XMLPUBFUN xmlDocPtr XMLCALL
+ xmlTextReaderCurrentDoc (xmlTextReaderPtr reader);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlTextReaderExpand (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderNext (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderNextSibling (xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderIsValid (xmlTextReaderPtr reader);
+#ifdef LIBXML_SCHEMAS_ENABLED
+XMLPUBFUN int XMLCALL
+ xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader,
+ const char *rng);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
+ xmlRelaxNGPtr schema);
+#endif
+
+/*
+ * New more complete APIs for simpler creation and reuse of readers
+ */
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderWalker (xmlDocPtr doc);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForDoc (const xmlChar * cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForFile (const char *filename,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForMemory (const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForFd (int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+ xmlReaderForIO (xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+
+XMLPUBFUN int XMLCALL
+ xmlReaderNewWalker (xmlTextReaderPtr reader,
+ xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewDoc (xmlTextReaderPtr reader,
+ const xmlChar * cur,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewFile (xmlTextReaderPtr reader,
+ const char *filename,
+ const char *encoding,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewMemory (xmlTextReaderPtr reader,
+ const char *buffer,
+ int size,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewFd (xmlTextReaderPtr reader,
+ int fd,
+ const char *URL,
+ const char *encoding,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlReaderNewIO (xmlTextReaderPtr reader,
+ xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose,
+ void *ioctx,
+ const char *URL,
+ const char *encoding,
+ int options);
+/*
+ * Error handling extensions
+ */
+typedef void * xmlTextReaderLocatorPtr;
+typedef void (XMLCALL *xmlTextReaderErrorFunc) (void *arg,
+ const char *msg,
+ xmlParserSeverities severity,
+ xmlTextReaderLocatorPtr locator);
+XMLPUBFUN int XMLCALL
+ xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
+/*int xmlTextReaderLocatorLinePosition(xmlTextReaderLocatorPtr locator);*/
+XMLPUBFUN xmlChar * XMLCALL
+ xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
+XMLPUBFUN void XMLCALL
+ xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
+ xmlTextReaderErrorFunc f,
+ void *arg);
+XMLPUBFUN void XMLCALL
+ xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
+ xmlStructuredErrorFunc f,
+ void *arg);
+XMLPUBFUN void XMLCALL
+ xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
+ xmlTextReaderErrorFunc *f,
+ void **arg);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_XMLREADER_H__ */
+
diff --git a/include/libxml/xmlregexp.h b/include/libxml/xmlregexp.h
new file mode 100644
index 0000000..6a9bcf1
--- /dev/null
+++ b/include/libxml/xmlregexp.h
@@ -0,0 +1,95 @@
+/*
+ * Summary: regular expressions handling
+ * Description: basic API for libxml regular expressions handling used
+ * for XML Schemas and validation.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_REGEXP_H__
+#define __XML_REGEXP_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_REGEXP_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlRegexpPtr:
+ *
+ * A libxml regular expression, they can actually be far more complex
+ * thank the POSIX regex expressions.
+ */
+typedef struct _xmlRegexp xmlRegexp;
+typedef xmlRegexp *xmlRegexpPtr;
+
+/**
+ * xmlRegExecCtxtPtr:
+ *
+ * A libxml progressive regular expression evaluation context
+ */
+typedef struct _xmlRegExecCtxt xmlRegExecCtxt;
+typedef xmlRegExecCtxt *xmlRegExecCtxtPtr;
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/tree.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The POSIX like API
+ */
+XMLPUBFUN xmlRegexpPtr XMLCALL
+ xmlRegexpCompile (const xmlChar *regexp);
+XMLPUBFUN void XMLCALL xmlRegFreeRegexp(xmlRegexpPtr regexp);
+XMLPUBFUN int XMLCALL
+ xmlRegexpExec (xmlRegexpPtr comp,
+ const xmlChar *value);
+XMLPUBFUN void XMLCALL
+ xmlRegexpPrint (FILE *output,
+ xmlRegexpPtr regexp);
+XMLPUBFUN int XMLCALL
+ xmlRegexpIsDeterminist(xmlRegexpPtr comp);
+
+/*
+ * Callback function when doing a transition in the automata
+ */
+typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec,
+ const xmlChar *token,
+ void *transdata,
+ void *inputdata);
+
+/*
+ * The progressive API
+ */
+XMLPUBFUN xmlRegExecCtxtPtr XMLCALL
+ xmlRegNewExecCtxt (xmlRegexpPtr comp,
+ xmlRegExecCallbacks callback,
+ void *data);
+XMLPUBFUN void XMLCALL
+ xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec);
+XMLPUBFUN int XMLCALL
+ xmlRegExecPushString(xmlRegExecCtxtPtr exec,
+ const xmlChar *value,
+ void *data);
+XMLPUBFUN int XMLCALL
+ xmlRegExecPushString2(xmlRegExecCtxtPtr exec,
+ const xmlChar *value,
+ const xmlChar *value2,
+ void *data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_REGEXP_ENABLED */
+
+#endif /*__XML_REGEXP_H__ */
diff --git a/include/libxml/xmlsave.h b/include/libxml/xmlsave.h
new file mode 100644
index 0000000..1d43a71
--- /dev/null
+++ b/include/libxml/xmlsave.h
@@ -0,0 +1,61 @@
+/*
+ * Summary: the XML document serializer
+ * Description: API to save document or subtree of document
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XMLSAVE_H__
+#define __XML_XMLSAVE_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xmlIO.h>
+
+#ifdef LIBXML_OUTPUT_ENABLED
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _xmlSaveCtxt xmlSaveCtxt;
+typedef xmlSaveCtxt *xmlSaveCtxtPtr;
+
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+ xmlSaveToFd (int fd,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+ xmlSaveToFilename (const char *filename,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+ xmlSaveToBuffer (xmlBufferPtr buffer,
+ const char *encoding,
+ int options);
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+ xmlSaveToIO (xmlOutputWriteCallback iowrite,
+ xmlOutputCloseCallback ioclose,
+ void *ioctx,
+ const char *encoding,
+ int options);
+
+XMLPUBFUN long XMLCALL
+ xmlSaveDoc (xmlSaveCtxtPtr ctxt,
+ xmlDocPtr doc);
+XMLPUBFUN long XMLCALL
+ xmlSaveTree (xmlSaveCtxtPtr ctxt,
+ xmlNodePtr node);
+
+XMLPUBFUN int XMLCALL
+ xmlSaveFlush (xmlSaveCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlSaveClose (xmlSaveCtxtPtr ctxt);
+#ifdef __cplusplus
+}
+#endif
+#endif /* LIBXML_OUTPUT_ENABLED */
+#endif /* __XML_XMLSAVE_H__ */
+
+
diff --git a/include/libxml/xmlschemas.h b/include/libxml/xmlschemas.h
new file mode 100644
index 0000000..49bf3b4
--- /dev/null
+++ b/include/libxml/xmlschemas.h
@@ -0,0 +1,125 @@
+/*
+ * Summary: incomplete XML Schemas structure implementation
+ * Description: interface to the XML Schemas handling and schema validity
+ * checking, it is incomplete right now.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMA_H__
+#define __XML_SCHEMA_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ XML_SCHEMAS_ERR_OK = 0,
+ XML_SCHEMAS_ERR_NOROOT = 1,
+ XML_SCHEMAS_ERR_UNDECLAREDELEM,
+ XML_SCHEMAS_ERR_NOTTOPLEVEL,
+ XML_SCHEMAS_ERR_MISSING,
+ XML_SCHEMAS_ERR_WRONGELEM,
+ XML_SCHEMAS_ERR_NOTYPE,
+ XML_SCHEMAS_ERR_NOROLLBACK,
+ XML_SCHEMAS_ERR_ISABSTRACT,
+ XML_SCHEMAS_ERR_NOTEMPTY,
+ XML_SCHEMAS_ERR_ELEMCONT,
+ XML_SCHEMAS_ERR_HAVEDEFAULT,
+ XML_SCHEMAS_ERR_NOTNILLABLE,
+ XML_SCHEMAS_ERR_EXTRACONTENT,
+ XML_SCHEMAS_ERR_INVALIDATTR,
+ XML_SCHEMAS_ERR_INVALIDELEM,
+ XML_SCHEMAS_ERR_NOTDETERMINIST,
+ XML_SCHEMAS_ERR_CONSTRUCT,
+ XML_SCHEMAS_ERR_INTERNAL,
+ XML_SCHEMAS_ERR_NOTSIMPLE,
+ XML_SCHEMAS_ERR_ATTRUNKNOWN,
+ XML_SCHEMAS_ERR_ATTRINVALID,
+ XML_SCHEMAS_ERR_VALUE,
+ XML_SCHEMAS_ERR_FACET,
+ XML_SCHEMAS_ERR_,
+ XML_SCHEMAS_ERR_XXX
+} xmlSchemaValidError;
+
+
+/**
+ * The schemas related types are kept internal
+ */
+typedef struct _xmlSchema xmlSchema;
+typedef xmlSchema *xmlSchemaPtr;
+
+/**
+ * A schemas validation context
+ */
+typedef void (*xmlSchemaValidityErrorFunc) (void *ctx, const char *msg, ...);
+typedef void (*xmlSchemaValidityWarningFunc) (void *ctx, const char *msg, ...);
+
+typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt;
+typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr;
+
+typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt;
+typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr;
+
+/*
+ * Interfaces for parsing.
+ */
+XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
+ xmlSchemaNewParserCtxt (const char *URL);
+XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
+ xmlSchemaNewMemParserCtxt (const char *buffer,
+ int size);
+XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
+ xmlSchemaNewDocParserCtxt (xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFreeParserCtxt (xmlSchemaParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlSchemaSetParserErrors (xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaValidityErrorFunc err,
+ xmlSchemaValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN xmlSchemaPtr XMLCALL
+ xmlSchemaParse (xmlSchemaParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFree (xmlSchemaPtr schema);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlSchemaDump (FILE *output,
+ xmlSchemaPtr schema);
+#endif /* LIBXML_OUTPUT_ENABLED */
+/*
+ * Interfaces for validating
+ */
+XMLPUBFUN void XMLCALL
+ xmlSchemaSetValidErrors (xmlSchemaValidCtxtPtr ctxt,
+ xmlSchemaValidityErrorFunc err,
+ xmlSchemaValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN xmlSchemaValidCtxtPtr XMLCALL
+ xmlSchemaNewValidCtxt (xmlSchemaPtr schema);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFreeValidCtxt (xmlSchemaValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateDoc (xmlSchemaValidCtxtPtr ctxt,
+ xmlDocPtr instance);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateStream (xmlSchemaValidCtxtPtr ctxt,
+ xmlParserInputBufferPtr input,
+ xmlCharEncoding enc,
+ xmlSAXHandlerPtr sax,
+ void *user_data);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#endif /* __XML_SCHEMA_H__ */
diff --git a/include/libxml/xmlschemastypes.h b/include/libxml/xmlschemastypes.h
new file mode 100644
index 0000000..4514c59
--- /dev/null
+++ b/include/libxml/xmlschemastypes.h
@@ -0,0 +1,67 @@
+/*
+ * Summary: implementation of XML Schema Datatypes
+ * Description: module providing the XML Schema Datatypes implementation
+ * both definition and validity checking
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMA_TYPES_H__
+#define __XML_SCHEMA_TYPES_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/schemasInternals.h>
+#include <libxml/xmlschemas.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN void XMLCALL
+ xmlSchemaInitTypes (void);
+XMLPUBFUN void XMLCALL
+ xmlSchemaCleanupTypes (void);
+XMLPUBFUN xmlSchemaTypePtr XMLCALL
+ xmlSchemaGetPredefinedType (const xmlChar *name,
+ const xmlChar *ns);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidatePredefinedType (xmlSchemaTypePtr type,
+ const xmlChar *value,
+ xmlSchemaValPtr *val);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValPredefTypeNode (xmlSchemaTypePtr type,
+ const xmlChar *value,
+ xmlSchemaValPtr *val,
+ xmlNodePtr node);
+XMLPUBFUN int XMLCALL
+ xmlSchemaValidateFacet (xmlSchemaTypePtr base,
+ xmlSchemaFacetPtr facet,
+ const xmlChar *value,
+ xmlSchemaValPtr val);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFreeValue (xmlSchemaValPtr val);
+XMLPUBFUN xmlSchemaFacetPtr XMLCALL
+ xmlSchemaNewFacet (void);
+XMLPUBFUN int XMLCALL
+ xmlSchemaCheckFacet (xmlSchemaFacetPtr facet,
+ xmlSchemaTypePtr typeDecl,
+ xmlSchemaParserCtxtPtr ctxt,
+ const xmlChar *name);
+XMLPUBFUN void XMLCALL
+ xmlSchemaFreeFacet (xmlSchemaFacetPtr facet);
+XMLPUBFUN int XMLCALL
+ xmlSchemaCompareValues (xmlSchemaValPtr x,
+ xmlSchemaValPtr y);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#endif /* __XML_SCHEMA_TYPES_H__ */
diff --git a/include/libxml/xmlstring.h b/include/libxml/xmlstring.h
new file mode 100644
index 0000000..74ae405
--- /dev/null
+++ b/include/libxml/xmlstring.h
@@ -0,0 +1,141 @@
+/*
+ * Summary: set of routines to process strings
+ * Description: type and interfaces needed for the internal string handling
+ * of the library, especially UTF8 processing.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_STRING_H__
+#define __XML_STRING_H__
+
+#include <stdarg.h>
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlChar:
+ *
+ * This is a basic byte in an UTF-8 encoded string.
+ * It's unsigned allowing to pinpoint case where char * are assigned
+ * to xmlChar * (possibly making serialization back impossible).
+ */
+
+typedef unsigned char xmlChar;
+
+/**
+ * BAD_CAST:
+ *
+ * Macro to cast a string to an xmlChar * when one know its safe.
+ */
+#define BAD_CAST (xmlChar *)
+
+/*
+ * xmlChar handling
+ */
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrdup (const xmlChar *cur);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrndup (const xmlChar *cur,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCharStrndup (const char *cur,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlCharStrdup (const char *cur);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrsub (const xmlChar *str,
+ int start,
+ int len);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlStrchr (const xmlChar *str,
+ xmlChar val);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlStrstr (const xmlChar *str,
+ const xmlChar *val);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlStrcasestr (const xmlChar *str,
+ xmlChar *val);
+XMLPUBFUN int XMLCALL
+ xmlStrcmp (const xmlChar *str1,
+ const xmlChar *str2);
+XMLPUBFUN int XMLCALL
+ xmlStrncmp (const xmlChar *str1,
+ const xmlChar *str2,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlStrcasecmp (const xmlChar *str1,
+ const xmlChar *str2);
+XMLPUBFUN int XMLCALL
+ xmlStrncasecmp (const xmlChar *str1,
+ const xmlChar *str2,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlStrEqual (const xmlChar *str1,
+ const xmlChar *str2);
+XMLPUBFUN int XMLCALL
+ xmlStrQEqual (const xmlChar *pref,
+ const xmlChar *name,
+ const xmlChar *str);
+XMLPUBFUN int XMLCALL
+ xmlStrlen (const xmlChar *str);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrcat (xmlChar *cur,
+ const xmlChar *add);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrncat (xmlChar *cur,
+ const xmlChar *add,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlStrncatNew (const xmlChar *str1,
+ const xmlChar *str2,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlStrPrintf (xmlChar *buf,
+ int len,
+ const xmlChar *msg,
+ ...);
+XMLPUBFUN int XMLCALL
+ xmlStrVPrintf (xmlChar *buf,
+ int len,
+ const xmlChar *msg,
+ va_list ap);
+
+XMLPUBFUN int XMLCALL
+ xmlGetUTF8Char (const unsigned char *utf,
+ int *len);
+XMLPUBFUN int XMLCALL
+ xmlCheckUTF8 (const unsigned char *utf);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Strsize (const xmlChar *utf,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlUTF8Strndup (const xmlChar *utf,
+ int len);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlUTF8Strpos (const xmlChar *utf,
+ int pos);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Strloc (const xmlChar *utf,
+ const xmlChar *utfchar);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlUTF8Strsub (const xmlChar *utf,
+ int start,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Strlen (const xmlChar *utf);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Size (const xmlChar *utf);
+XMLPUBFUN int XMLCALL
+ xmlUTF8Charcmp (const xmlChar *utf1,
+ const xmlChar *utf2);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_STRING_H__ */
diff --git a/include/libxml/xmlunicode.h b/include/libxml/xmlunicode.h
new file mode 100644
index 0000000..b8537dc
--- /dev/null
+++ b/include/libxml/xmlunicode.h
@@ -0,0 +1,197 @@
+/*
+ * Summary: Unicode character APIs
+ * Description: API for the Unicode character APIs
+ *
+ * This file is automatically generated from the
+ * UCS description files of the Unicode Character Database
+ * http://www.unicode.org/Public/4.0-Update1/UCD-4.0.1d5b.html
+ * using the genUnicode.py Python script.
+ *
+ * Generation date: Mon Nov 10 22:35:10 2003
+ * Sources: Blocks-4.0.1d1b.txt UnicodeData-4.0.1d1b.txt
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_UNICODE_H__
+#define __XML_UNICODE_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN int XMLCALL xmlUCSIsAegeanNumbers (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsAlphabeticPresentationForms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArabic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArmenian (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArrows (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBasicLatin (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBengali (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBlockElements (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBopomofo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBopomofoExtended (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBoxDrawing (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBraillePatterns (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBuhid (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsByzantineMusicalSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibility (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityForms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographs (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographsSupplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKRadicalsSupplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKSymbolsandPunctuation (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographs (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCherokee (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarks (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarksforSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningHalfMarks (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningMarksforSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsControlPictures (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCurrencySymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCypriotSyllabary (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCyrillic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCyrillicSupplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsDeseret (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsDevanagari (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsDingbats (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsEnclosedAlphanumerics (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsEnclosedCJKLettersandMonths (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsEthiopic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGeneralPunctuation (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGeometricShapes (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGeorgian (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGothic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGreek (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGreekExtended (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGreekandCoptic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGujarati (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGurmukhi (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHalfwidthandFullwidthForms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHangulCompatibilityJamo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHangulJamo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHangulSyllables (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHanunoo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHebrew (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHighPrivateUseSurrogates (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHighSurrogates (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHiragana (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsIPAExtensions (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsIdeographicDescriptionCharacters (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKanbun (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKangxiRadicals (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKannada (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKatakana (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKatakanaPhoneticExtensions (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKhmer (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKhmerSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLao (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatin1Supplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedAdditional (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLetterlikeSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLimbu (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLinearBIdeograms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLinearBSyllabary (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLowSurrogates (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMalayalam (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMathematicalAlphanumericSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMathematicalOperators (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbolsandArrows (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousTechnical (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMongolian (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMusicalSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMyanmar (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsNumberForms (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOgham (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOldItalic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOpticalCharacterRecognition (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOriya (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOsmanya (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsPhoneticExtensions (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsPrivateUse (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsPrivateUseArea (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsRunic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsShavian (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSinhala (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSmallFormVariants (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSpacingModifierLetters (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSpecials (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSuperscriptsandSubscripts (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementalMathematicalOperators (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaA (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaB (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSyriac (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTagalog (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTagbanwa (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTags (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTaiLe (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTaiXuanJingSymbols (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTamil (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTelugu (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsThaana (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsThai (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTibetan (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsUgaritic (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsUnifiedCanadianAboriginalSyllabics (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectors (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectorsSupplement (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsYiRadicals (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsYiSyllables (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsYijingHexagramSymbols (int code);
+
+XMLPUBFUN int XMLCALL xmlUCSIsBlock (int code, const char *block);
+
+XMLPUBFUN int XMLCALL xmlUCSIsCatC (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCc (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCf (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCs (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatL (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLl (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLm (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLt (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLu (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatM (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatMc (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatMe (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatMn (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatN (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatNd (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatNl (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatNo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatP (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPc (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPd (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPe (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPf (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPi (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPs (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatS (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSc (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSk (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSm (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSo (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZ (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZl (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZp (int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZs (int code);
+
+XMLPUBFUN int XMLCALL xmlUCSIsCat (int code, const char *cat);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_UNICODE_H__ */
diff --git a/include/libxml/xmlversion.h b/include/libxml/xmlversion.h
new file mode 100644
index 0000000..8e1c0b0
--- /dev/null
+++ b/include/libxml/xmlversion.h
@@ -0,0 +1,347 @@
+/*
+ * Summary: compile-time version informations
+ * Description: compile-time version informations for the XML library
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_VERSION_H__
+#define __XML_VERSION_H__
+
+#include <libxml/xmlexports.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * use those to be sure nothing nasty will happen if
+ * your library and includes mismatch
+ */
+#ifndef LIBXML2_COMPILING_MSCCDEF
+XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
+#endif /* LIBXML2_COMPILING_MSCCDEF */
+
+/**
+ * LIBXML_DOTTED_VERSION:
+ *
+ * the version string like "1.2.3"
+ */
+#define LIBXML_DOTTED_VERSION "2.6.8"
+
+/**
+ * LIBXML_VERSION:
+ *
+ * the version number: 1.2.3 value is 1002003
+ */
+#define LIBXML_VERSION 20608
+
+/**
+ * LIBXML_VERSION_STRING:
+ *
+ * the version number string, 1.2.3 value is "1002003"
+ */
+#define LIBXML_VERSION_STRING "20608"
+
+/**
+ * LIBXML_TEST_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(20608);
+
+#ifndef VMS
+#if 0
+/**
+ * WITH_TRIO:
+ *
+ * defined if the trio support need to be configured in
+ */
+#define WITH_TRIO
+#else
+/**
+ * WITHOUT_TRIO:
+ *
+ * defined if the trio support should not be configured in
+ */
+#define WITHOUT_TRIO
+#endif
+#else /* VMS */
+/**
+ * WITH_TRIO:
+ *
+ * defined if the trio support need to be configured in
+ */
+#define WITH_TRIO 1
+#endif /* VMS */
+
+/**
+ * LIBXML_THREAD_ENABLED:
+ *
+ * Whether the thread support is configured in
+ */
+#if 1
+#if defined(_REENTRANT) || defined(__MT__) || (_POSIX_C_SOURCE - 0 >= 199506L)
+#define LIBXML_THREAD_ENABLED
+#endif
+#endif
+
+/**
+ * LIBXML_TREE_ENABLED:
+ *
+ * Whether the DOM like tree manipulation API support is configured in
+ */
+#if 1
+#define LIBXML_TREE_ENABLED
+#endif
+
+/**
+ * LIBXML_OUTPUT_ENABLED:
+ *
+ * Whether the serialization/saving support is configured in
+ */
+#if 1
+#define LIBXML_OUTPUT_ENABLED
+#endif
+
+/**
+ * LIBXML_PUSH_ENABLED:
+ *
+ * Whether the push parsing interfaces are configured in
+ */
+#if 1
+#define LIBXML_PUSH_ENABLED
+#endif
+
+/**
+ * LIBXML_READER_ENABLED:
+ *
+ * Whether the xmlReader parsing interface is configured in
+ */
+#if 1
+#define LIBXML_READER_ENABLED
+#endif
+
+/**
+ * LIBXML_PATTERN_ENABLED:
+ *
+ * Whether the xmlPattern node selection interface is configured in
+ */
+#if 1
+#define LIBXML_PATTERN_ENABLED
+#endif
+
+/**
+ * LIBXML_WRITER_ENABLED:
+ *
+ * Whether the xmlWriter saving interface is configured in
+ */
+#if 1
+#define LIBXML_WRITER_ENABLED
+#endif
+
+/**
+ * LIBXML_SAX1_ENABLED:
+ *
+ * Whether the older SAX1 interface is configured in
+ */
+#if 1
+#define LIBXML_SAX1_ENABLED
+#endif
+
+/**
+ * LIBXML_FTP_ENABLED:
+ *
+ * Whether the FTP support is configured in
+ */
+#if 1
+#define LIBXML_FTP_ENABLED
+#endif
+
+/**
+ * LIBXML_HTTP_ENABLED:
+ *
+ * Whether the HTTP support is configured in
+ */
+#if 1
+#define LIBXML_HTTP_ENABLED
+#endif
+
+/**
+ * LIBXML_VALID_ENABLED:
+ *
+ * Whether the DTD validation support is configured in
+ */
+#if 1
+#define LIBXML_VALID_ENABLED
+#endif
+
+/**
+ * LIBXML_HTML_ENABLED:
+ *
+ * Whether the HTML support is configured in
+ */
+#if 1
+#define LIBXML_HTML_ENABLED
+#endif
+
+/**
+ * LIBXML_LEGACY_ENABLED:
+ *
+ * Whether the deprecated APIs are compiled in for compatibility
+ */
+#if 1
+#define LIBXML_LEGACY_ENABLED
+#endif
+
+/**
+ * LIBXML_C14N_ENABLED:
+ *
+ * Whether the Canonicalization support is configured in
+ */
+#if 1
+#define LIBXML_C14N_ENABLED
+#endif
+
+/**
+ * LIBXML_CATALOG_ENABLED:
+ *
+ * Whether the Catalog support is configured in
+ */
+#if 1
+#define LIBXML_CATALOG_ENABLED
+#endif
+
+/**
+ * LIBXML_DOCB_ENABLED:
+ *
+ * Whether the SGML Docbook support is configured in
+ */
+#if 1
+#define LIBXML_DOCB_ENABLED
+#endif
+
+/**
+ * LIBXML_XPATH_ENABLED:
+ *
+ * Whether XPath is configured in
+ */
+#if 1
+#define LIBXML_XPATH_ENABLED
+#endif
+
+/**
+ * LIBXML_XPTR_ENABLED:
+ *
+ * Whether XPointer is configured in
+ */
+#if 1
+#define LIBXML_XPTR_ENABLED
+#endif
+
+/**
+ * LIBXML_XINCLUDE_ENABLED:
+ *
+ * Whether XInclude is configured in
+ */
+#if 1
+#define LIBXML_XINCLUDE_ENABLED
+#endif
+
+/**
+ * LIBXML_ICONV_ENABLED:
+ *
+ * Whether iconv support is available
+ */
+#if 1
+#define LIBXML_ICONV_ENABLED
+#endif
+
+/**
+ * LIBXML_ISO8859X_ENABLED:
+ *
+ * Whether ISO-8859-* support is made available in case iconv is not
+ */
+#if 1
+#define LIBXML_ISO8859X_ENABLED
+#endif
+
+/**
+ * LIBXML_DEBUG_ENABLED:
+ *
+ * Whether Debugging module is configured in
+ */
+#if 1
+#define LIBXML_DEBUG_ENABLED
+#endif
+
+/**
+ * DEBUG_MEMORY_LOCATION:
+ *
+ * Whether the memory debugging is configured in
+ */
+#if 1
+#define DEBUG_MEMORY_LOCATION
+#endif
+
+/**
+ * LIBXML_UNICODE_ENABLED:
+ *
+ * Whether the Unicode related interfaces are compiled in
+ */
+#if 1
+#define LIBXML_UNICODE_ENABLED
+#endif
+
+/**
+ * LIBXML_REGEXP_ENABLED:
+ *
+ * Whether the regular expressions interfaces are compiled in
+ */
+#if 1
+#define LIBXML_REGEXP_ENABLED
+#endif
+
+/**
+ * LIBXML_AUTOMATA_ENABLED:
+ *
+ * Whether the automata interfaces are compiled in
+ */
+#if 1
+#define LIBXML_AUTOMATA_ENABLED
+#endif
+
+/**
+ * LIBXML_SCHEMAS_ENABLED:
+ *
+ * Whether the Schemas validation interfaces are compiled in
+ */
+#if 1
+#define LIBXML_SCHEMAS_ENABLED
+#endif
+
+/**
+ * ATTRIBUTE_UNUSED:
+ *
+ * Macro used to signal to GCC unused function parameters
+ */
+#ifdef __GNUC__
+#ifdef HAVE_ANSIDECL_H
+#include <ansidecl.h>
+#endif
+#ifndef ATTRIBUTE_UNUSED
+#define ATTRIBUTE_UNUSED __attribute__((unused))
+#endif
+#else
+#define ATTRIBUTE_UNUSED
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif
+
+
diff --git a/include/libxml/xmlversion.h.in b/include/libxml/xmlversion.h.in
new file mode 100644
index 0000000..6939937
--- /dev/null
+++ b/include/libxml/xmlversion.h.in
@@ -0,0 +1,347 @@
+/*
+ * Summary: compile-time version informations
+ * Description: compile-time version informations for the XML library
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_VERSION_H__
+#define __XML_VERSION_H__
+
+#include <libxml/xmlexports.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * use those to be sure nothing nasty will happen if
+ * your library and includes mismatch
+ */
+#ifndef LIBXML2_COMPILING_MSCCDEF
+XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
+#endif /* LIBXML2_COMPILING_MSCCDEF */
+
+/**
+ * LIBXML_DOTTED_VERSION:
+ *
+ * the version string like "1.2.3"
+ */
+#define LIBXML_DOTTED_VERSION "@VERSION@"
+
+/**
+ * LIBXML_VERSION:
+ *
+ * the version number: 1.2.3 value is 1002003
+ */
+#define LIBXML_VERSION @LIBXML_VERSION_NUMBER@
+
+/**
+ * LIBXML_VERSION_STRING:
+ *
+ * the version number string, 1.2.3 value is "1002003"
+ */
+#define LIBXML_VERSION_STRING "@LIBXML_VERSION_NUMBER@"
+
+/**
+ * LIBXML_TEST_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(@LIBXML_VERSION_NUMBER@);
+
+#ifndef VMS
+#if @WITH_TRIO@
+/**
+ * WITH_TRIO:
+ *
+ * defined if the trio support need to be configured in
+ */
+#define WITH_TRIO
+#else
+/**
+ * WITHOUT_TRIO:
+ *
+ * defined if the trio support should not be configured in
+ */
+#define WITHOUT_TRIO
+#endif
+#else /* VMS */
+/**
+ * WITH_TRIO:
+ *
+ * defined if the trio support need to be configured in
+ */
+#define WITH_TRIO 1
+#endif /* VMS */
+
+/**
+ * LIBXML_THREAD_ENABLED:
+ *
+ * Whether the thread support is configured in
+ */
+#if @WITH_THREADS@
+#if defined(_REENTRANT) || defined(__MT__) || (_POSIX_C_SOURCE - 0 >= 199506L)
+#define LIBXML_THREAD_ENABLED
+#endif
+#endif
+
+/**
+ * LIBXML_TREE_ENABLED:
+ *
+ * Whether the DOM like tree manipulation API support is configured in
+ */
+#if @WITH_TREE@
+#define LIBXML_TREE_ENABLED
+#endif
+
+/**
+ * LIBXML_OUTPUT_ENABLED:
+ *
+ * Whether the serialization/saving support is configured in
+ */
+#if @WITH_OUTPUT@
+#define LIBXML_OUTPUT_ENABLED
+#endif
+
+/**
+ * LIBXML_PUSH_ENABLED:
+ *
+ * Whether the push parsing interfaces are configured in
+ */
+#if @WITH_PUSH@
+#define LIBXML_PUSH_ENABLED
+#endif
+
+/**
+ * LIBXML_READER_ENABLED:
+ *
+ * Whether the xmlReader parsing interface is configured in
+ */
+#if @WITH_READER@
+#define LIBXML_READER_ENABLED
+#endif
+
+/**
+ * LIBXML_PATTERN_ENABLED:
+ *
+ * Whether the xmlPattern node selection interface is configured in
+ */
+#if @WITH_PATTERN@
+#define LIBXML_PATTERN_ENABLED
+#endif
+
+/**
+ * LIBXML_WRITER_ENABLED:
+ *
+ * Whether the xmlWriter saving interface is configured in
+ */
+#if @WITH_WRITER@
+#define LIBXML_WRITER_ENABLED
+#endif
+
+/**
+ * LIBXML_SAX1_ENABLED:
+ *
+ * Whether the older SAX1 interface is configured in
+ */
+#if @WITH_SAX1@
+#define LIBXML_SAX1_ENABLED
+#endif
+
+/**
+ * LIBXML_FTP_ENABLED:
+ *
+ * Whether the FTP support is configured in
+ */
+#if @WITH_FTP@
+#define LIBXML_FTP_ENABLED
+#endif
+
+/**
+ * LIBXML_HTTP_ENABLED:
+ *
+ * Whether the HTTP support is configured in
+ */
+#if @WITH_HTTP@
+#define LIBXML_HTTP_ENABLED
+#endif
+
+/**
+ * LIBXML_VALID_ENABLED:
+ *
+ * Whether the DTD validation support is configured in
+ */
+#if @WITH_VALID@
+#define LIBXML_VALID_ENABLED
+#endif
+
+/**
+ * LIBXML_HTML_ENABLED:
+ *
+ * Whether the HTML support is configured in
+ */
+#if @WITH_HTML@
+#define LIBXML_HTML_ENABLED
+#endif
+
+/**
+ * LIBXML_LEGACY_ENABLED:
+ *
+ * Whether the deprecated APIs are compiled in for compatibility
+ */
+#if @WITH_LEGACY@
+#define LIBXML_LEGACY_ENABLED
+#endif
+
+/**
+ * LIBXML_C14N_ENABLED:
+ *
+ * Whether the Canonicalization support is configured in
+ */
+#if @WITH_C14N@
+#define LIBXML_C14N_ENABLED
+#endif
+
+/**
+ * LIBXML_CATALOG_ENABLED:
+ *
+ * Whether the Catalog support is configured in
+ */
+#if @WITH_CATALOG@
+#define LIBXML_CATALOG_ENABLED
+#endif
+
+/**
+ * LIBXML_DOCB_ENABLED:
+ *
+ * Whether the SGML Docbook support is configured in
+ */
+#if @WITH_DOCB@
+#define LIBXML_DOCB_ENABLED
+#endif
+
+/**
+ * LIBXML_XPATH_ENABLED:
+ *
+ * Whether XPath is configured in
+ */
+#if @WITH_XPATH@
+#define LIBXML_XPATH_ENABLED
+#endif
+
+/**
+ * LIBXML_XPTR_ENABLED:
+ *
+ * Whether XPointer is configured in
+ */
+#if @WITH_XPTR@
+#define LIBXML_XPTR_ENABLED
+#endif
+
+/**
+ * LIBXML_XINCLUDE_ENABLED:
+ *
+ * Whether XInclude is configured in
+ */
+#if @WITH_XINCLUDE@
+#define LIBXML_XINCLUDE_ENABLED
+#endif
+
+/**
+ * LIBXML_ICONV_ENABLED:
+ *
+ * Whether iconv support is available
+ */
+#if @WITH_ICONV@
+#define LIBXML_ICONV_ENABLED
+#endif
+
+/**
+ * LIBXML_ISO8859X_ENABLED:
+ *
+ * Whether ISO-8859-* support is made available in case iconv is not
+ */
+#if @WITH_ISO8859X@
+#define LIBXML_ISO8859X_ENABLED
+#endif
+
+/**
+ * LIBXML_DEBUG_ENABLED:
+ *
+ * Whether Debugging module is configured in
+ */
+#if @WITH_DEBUG@
+#define LIBXML_DEBUG_ENABLED
+#endif
+
+/**
+ * DEBUG_MEMORY_LOCATION:
+ *
+ * Whether the memory debugging is configured in
+ */
+#if @WITH_MEM_DEBUG@
+#define DEBUG_MEMORY_LOCATION
+#endif
+
+/**
+ * LIBXML_UNICODE_ENABLED:
+ *
+ * Whether the Unicode related interfaces are compiled in
+ */
+#if @WITH_REGEXPS@
+#define LIBXML_UNICODE_ENABLED
+#endif
+
+/**
+ * LIBXML_REGEXP_ENABLED:
+ *
+ * Whether the regular expressions interfaces are compiled in
+ */
+#if @WITH_REGEXPS@
+#define LIBXML_REGEXP_ENABLED
+#endif
+
+/**
+ * LIBXML_AUTOMATA_ENABLED:
+ *
+ * Whether the automata interfaces are compiled in
+ */
+#if @WITH_REGEXPS@
+#define LIBXML_AUTOMATA_ENABLED
+#endif
+
+/**
+ * LIBXML_SCHEMAS_ENABLED:
+ *
+ * Whether the Schemas validation interfaces are compiled in
+ */
+#if @WITH_SCHEMAS@
+#define LIBXML_SCHEMAS_ENABLED
+#endif
+
+/**
+ * ATTRIBUTE_UNUSED:
+ *
+ * Macro used to signal to GCC unused function parameters
+ */
+#ifdef __GNUC__
+#ifdef HAVE_ANSIDECL_H
+#include <ansidecl.h>
+#endif
+#ifndef ATTRIBUTE_UNUSED
+#define ATTRIBUTE_UNUSED __attribute__((unused))
+#endif
+#else
+#define ATTRIBUTE_UNUSED
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif
+
+
diff --git a/include/libxml/xmlwriter.h b/include/libxml/xmlwriter.h
new file mode 100644
index 0000000..f1e1fd8
--- /dev/null
+++ b/include/libxml/xmlwriter.h
@@ -0,0 +1,452 @@
+
+/*
+ * Summary: text writing API for XML
+ * Description: text writing API for XML
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Alfred Mickautsch <alfred@mickautsch.de>
+ */
+
+#ifndef __XML_XMLWRITER_H__
+#define __XML_XMLWRITER_H__
+
+#include <stdarg.h>
+#include <libxml/xmlIO.h>
+#include <libxml/list.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ typedef struct _xmlTextWriter xmlTextWriter;
+ typedef xmlTextWriter *xmlTextWriterPtr;
+
+/*
+ * Constructors & Destructor
+ */
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriter(xmlOutputBufferPtr out);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterFilename(const char *uri, int compression);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterMemory(xmlBufferPtr buf, int compression);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt, int compression);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterDoc(xmlDocPtr * doc, int compression);
+ XMLPUBFUN xmlTextWriterPtr XMLCALL
+ xmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node,
+ int compression);
+ XMLPUBFUN void XMLCALL xmlFreeTextWriter(xmlTextWriterPtr writer);
+
+/*
+ * Functions
+ */
+
+
+/*
+ * Document
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDocument(xmlTextWriterPtr writer,
+ const char *version,
+ const char *encoding,
+ const char *standalone);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDocument(xmlTextWriterPtr
+ writer);
+
+/*
+ * Comments
+ */
+ XMLPUBFUN int XMLCALL xmlTextWriterStartComment(xmlTextWriterPtr
+ writer);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndComment(xmlTextWriterPtr writer);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatComment(xmlTextWriterPtr writer,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer,
+ const char *format,
+ va_list argptr);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteComment(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ content);
+
+/*
+ * Elements
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartElement(xmlTextWriterPtr writer,
+ const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterStartElementNS(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ prefix,
+ const xmlChar * name,
+ const xmlChar *
+ namespaceURI);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndElement(xmlTextWriterPtr writer);
+ XMLPUBFUN int XMLCALL xmlTextWriterFullEndElement(xmlTextWriterPtr
+ writer);
+
+/*
+ * Elements conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteElement(xmlTextWriterPtr
+ writer,
+ const xmlChar * name,
+ const xmlChar *
+ content);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format,
+ va_list argptr);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteElementNS(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ prefix,
+ const xmlChar * name,
+ const xmlChar *
+ namespaceURI,
+ const xmlChar *
+ content);
+
+/*
+ * Text
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer,
+ const char *format, va_list argptr);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteRawLen(xmlTextWriterPtr writer,
+ const xmlChar * content, int len);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteRaw(xmlTextWriterPtr writer,
+ const xmlChar * content);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteFormatString(xmlTextWriterPtr
+ writer,
+ const char
+ *format, ...);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteVFormatString(xmlTextWriterPtr
+ writer,
+ const char
+ *format,
+ va_list argptr);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteString(xmlTextWriterPtr writer,
+ const xmlChar *
+ content);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteBase64(xmlTextWriterPtr writer,
+ const char *data,
+ int start, int len);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteBinHex(xmlTextWriterPtr writer,
+ const char *data,
+ int start, int len);
+
+/*
+ * Attributes
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartAttribute(xmlTextWriterPtr writer,
+ const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterStartAttributeNS(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ prefix,
+ const xmlChar *
+ name,
+ const xmlChar *
+ namespaceURI);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndAttribute(xmlTextWriterPtr
+ writer);
+
+/*
+ * Attributes conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteAttribute(xmlTextWriterPtr
+ writer,
+ const xmlChar * name,
+ const xmlChar *
+ content);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format,
+ va_list argptr);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteAttributeNS(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ prefix,
+ const xmlChar *
+ name,
+ const xmlChar *
+ namespaceURI,
+ const xmlChar *
+ content);
+
+/*
+ * PI's
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartPI(xmlTextWriterPtr writer,
+ const xmlChar * target);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndPI(xmlTextWriterPtr writer);
+
+/*
+ * PI conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatPI(xmlTextWriterPtr writer,
+ const xmlChar * target,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer,
+ const xmlChar * target,
+ const char *format, va_list argptr);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWritePI(xmlTextWriterPtr writer,
+ const xmlChar * target,
+ const xmlChar * content);
+
+/**
+ * xmlTextWriterWriteProcessingInstruction:
+ *
+ * This macro maps to xmlTextWriterWritePI
+ */
+#define xmlTextWriterWriteProcessingInstruction xmlTextWriterWritePI
+
+/*
+ * CDATA
+ */
+ XMLPUBFUN int XMLCALL xmlTextWriterStartCDATA(xmlTextWriterPtr writer);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndCDATA(xmlTextWriterPtr writer);
+
+/*
+ * CDATA conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer,
+ const char *format, va_list argptr);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteCDATA(xmlTextWriterPtr writer,
+ const xmlChar * content);
+
+/*
+ * DTD
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDTD(xmlTextWriterPtr writer);
+
+/*
+ * DTD conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const char *format, va_list argptr);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const xmlChar * subset);
+
+/**
+ * xmlTextWriterWriteDocType:
+ *
+ * this macro maps to xmlTextWriterWriteDTD
+ */
+#define xmlTextWriterWriteDocType xmlTextWriterWriteDTD
+
+/*
+ * DTD element definition
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDTDElement(xmlTextWriterPtr writer,
+ const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDTDElement(xmlTextWriterPtr
+ writer);
+
+/*
+ * DTD element definition conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDElement(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ name,
+ const xmlChar *
+ content);
+
+/*
+ * DTD attribute list definition
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer,
+ const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDTDAttlist(xmlTextWriterPtr
+ writer);
+
+/*
+ * DTD attribute list definition conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDAttlist(xmlTextWriterPtr
+ writer,
+ const xmlChar *
+ name,
+ const xmlChar *
+ content);
+
+/*
+ * DTD entity definition
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterStartDTDEntity(xmlTextWriterPtr writer,
+ int pe, const xmlChar * name);
+ XMLPUBFUN int XMLCALL xmlTextWriterEndDTDEntity(xmlTextWriterPtr
+ writer);
+
+/*
+ * DTD entity definition conveniency functions
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const char *format, ...);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const xmlChar * content);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const xmlChar * ndataid);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTDExternalEntityContents(xmlTextWriterPtr
+ writer,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const xmlChar *
+ ndataid);
+ XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDEntity(xmlTextWriterPtr
+ writer, int pe,
+ const xmlChar * name,
+ const xmlChar *
+ pubid,
+ const xmlChar *
+ sysid,
+ const xmlChar *
+ ndataid,
+ const xmlChar *
+ content);
+
+/*
+ * DTD notation definition
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid);
+
+/*
+ * Indentation
+ */
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterSetIndent(xmlTextWriterPtr writer, int indent);
+ XMLPUBFUN int XMLCALL
+ xmlTextWriterSetIndentString(xmlTextWriterPtr writer,
+ const xmlChar * str);
+
+/*
+ * misc
+ */
+ XMLPUBFUN int XMLCALL xmlTextWriterFlush(xmlTextWriterPtr writer);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_XMLWRITER_H__ */
diff --git a/include/libxml/xpath.h b/include/libxml/xpath.h
new file mode 100644
index 0000000..41def0c
--- /dev/null
+++ b/include/libxml/xpath.h
@@ -0,0 +1,467 @@
+/*
+ * Summary: XML Path Language implementation
+ * Description: API for the XML Path Language implementation
+ *
+ * XML Path Language implementation
+ * XPath is a language for addressing parts of an XML document,
+ * designed to be used by both XSLT and XPointer
+ * http://www.w3.org/TR/xpath
+ *
+ * Implements
+ * W3C Recommendation 16 November 1999
+ * http://www.w3.org/TR/1999/REC-xpath-19991116
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XPATH_H__
+#define __XML_XPATH_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlerror.h>
+#include <libxml/tree.h>
+#include <libxml/hash.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _xmlXPathContext xmlXPathContext;
+typedef xmlXPathContext *xmlXPathContextPtr;
+typedef struct _xmlXPathParserContext xmlXPathParserContext;
+typedef xmlXPathParserContext *xmlXPathParserContextPtr;
+
+/**
+ * The set of XPath error codes.
+ */
+
+typedef enum {
+ XPATH_EXPRESSION_OK = 0,
+ XPATH_NUMBER_ERROR,
+ XPATH_UNFINISHED_LITERAL_ERROR,
+ XPATH_START_LITERAL_ERROR,
+ XPATH_VARIABLE_REF_ERROR,
+ XPATH_UNDEF_VARIABLE_ERROR,
+ XPATH_INVALID_PREDICATE_ERROR,
+ XPATH_EXPR_ERROR,
+ XPATH_UNCLOSED_ERROR,
+ XPATH_UNKNOWN_FUNC_ERROR,
+ XPATH_INVALID_OPERAND,
+ XPATH_INVALID_TYPE,
+ XPATH_INVALID_ARITY,
+ XPATH_INVALID_CTXT_SIZE,
+ XPATH_INVALID_CTXT_POSITION,
+ XPATH_MEMORY_ERROR,
+ XPTR_SYNTAX_ERROR,
+ XPTR_RESOURCE_ERROR,
+ XPTR_SUB_RESOURCE_ERROR,
+ XPATH_UNDEF_PREFIX_ERROR,
+ XPATH_ENCODING_ERROR,
+ XPATH_INVALID_CHAR_ERROR
+} xmlXPathError;
+
+/*
+ * A node-set (an unordered collection of nodes without duplicates).
+ */
+typedef struct _xmlNodeSet xmlNodeSet;
+typedef xmlNodeSet *xmlNodeSetPtr;
+struct _xmlNodeSet {
+ int nodeNr; /* number of nodes in the set */
+ int nodeMax; /* size of the array as allocated */
+ xmlNodePtr *nodeTab; /* array of nodes in no particular order */
+ /* @@ with_ns to check wether namespace nodes should be looked at @@ */
+};
+
+/*
+ * An expression is evaluated to yield an object, which
+ * has one of the following four basic types:
+ * - node-set
+ * - boolean
+ * - number
+ * - string
+ *
+ * @@ XPointer will add more types !
+ */
+
+typedef enum {
+ XPATH_UNDEFINED = 0,
+ XPATH_NODESET = 1,
+ XPATH_BOOLEAN = 2,
+ XPATH_NUMBER = 3,
+ XPATH_STRING = 4,
+ XPATH_POINT = 5,
+ XPATH_RANGE = 6,
+ XPATH_LOCATIONSET = 7,
+ XPATH_USERS = 8,
+ XPATH_XSLT_TREE = 9 /* An XSLT value tree, non modifiable */
+} xmlXPathObjectType;
+
+typedef struct _xmlXPathObject xmlXPathObject;
+typedef xmlXPathObject *xmlXPathObjectPtr;
+struct _xmlXPathObject {
+ xmlXPathObjectType type;
+ xmlNodeSetPtr nodesetval;
+ int boolval;
+ double floatval;
+ xmlChar *stringval;
+ void *user;
+ int index;
+ void *user2;
+ int index2;
+};
+
+/**
+ * xmlXPathConvertFunc:
+ * @obj: an XPath object
+ * @type: the number of the target type
+ *
+ * A conversion function is associated to a type and used to cast
+ * the new type to primitive values.
+ *
+ * Returns -1 in case of error, 0 otherwise
+ */
+typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
+
+/*
+ * Extra type: a name and a conversion function.
+ */
+
+typedef struct _xmlXPathType xmlXPathType;
+typedef xmlXPathType *xmlXPathTypePtr;
+struct _xmlXPathType {
+ const xmlChar *name; /* the type name */
+ xmlXPathConvertFunc func; /* the conversion function */
+};
+
+/*
+ * Extra variable: a name and a value.
+ */
+
+typedef struct _xmlXPathVariable xmlXPathVariable;
+typedef xmlXPathVariable *xmlXPathVariablePtr;
+struct _xmlXPathVariable {
+ const xmlChar *name; /* the variable name */
+ xmlXPathObjectPtr value; /* the value */
+};
+
+/**
+ * xmlXPathEvalFunc:
+ * @ctxt: an XPath parser context
+ * @nargs: the number of arguments passed to the function
+ *
+ * An XPath evaluation function, the parameters are on the XPath context stack.
+ */
+
+typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
+ int nargs);
+
+/*
+ * Extra function: a name and a evaluation function.
+ */
+
+typedef struct _xmlXPathFunct xmlXPathFunct;
+typedef xmlXPathFunct *xmlXPathFuncPtr;
+struct _xmlXPathFunct {
+ const xmlChar *name; /* the function name */
+ xmlXPathEvalFunc func; /* the evaluation function */
+};
+
+/**
+ * xmlXPathAxisFunc:
+ * @ctxt: the XPath interpreter context
+ * @cur: the previous node being explored on that axis
+ *
+ * An axis traversal function. To traverse an axis, the engine calls
+ * the first time with cur == NULL and repeat until the function returns
+ * NULL indicating the end of the axis traversal.
+ *
+ * Returns the next node in that axis or NULL if at the end of the axis.
+ */
+
+typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
+ xmlXPathObjectPtr cur);
+
+/*
+ * Extra axis: a name and an axis function.
+ */
+
+typedef struct _xmlXPathAxis xmlXPathAxis;
+typedef xmlXPathAxis *xmlXPathAxisPtr;
+struct _xmlXPathAxis {
+ const xmlChar *name; /* the axis name */
+ xmlXPathAxisFunc func; /* the search function */
+};
+
+/**
+ * xmlXPathContext:
+ *
+ * Expression evaluation occurs with respect to a context.
+ * he context consists of:
+ * - a node (the context node)
+ * - a node list (the context node list)
+ * - a set of variable bindings
+ * - a function library
+ * - the set of namespace declarations in scope for the expression
+ * Following the switch to hash tables, this need to be trimmed up at
+ * the next binary incompatible release.
+ */
+
+struct _xmlXPathContext {
+ xmlDocPtr doc; /* The current document */
+ xmlNodePtr node; /* The current node */
+
+ int nb_variables_unused; /* unused (hash table) */
+ int max_variables_unused; /* unused (hash table) */
+ xmlHashTablePtr varHash; /* Hash table of defined variables */
+
+ int nb_types; /* number of defined types */
+ int max_types; /* max number of types */
+ xmlXPathTypePtr types; /* Array of defined types */
+
+ int nb_funcs_unused; /* unused (hash table) */
+ int max_funcs_unused; /* unused (hash table) */
+ xmlHashTablePtr funcHash; /* Hash table of defined funcs */
+
+ int nb_axis; /* number of defined axis */
+ int max_axis; /* max number of axis */
+ xmlXPathAxisPtr axis; /* Array of defined axis */
+
+ /* the namespace nodes of the context node */
+ xmlNsPtr *namespaces; /* Array of namespaces */
+ int nsNr; /* number of namespace in scope */
+ void *user; /* function to free */
+
+ /* extra variables */
+ int contextSize; /* the context size */
+ int proximityPosition; /* the proximity position */
+
+ /* extra stuff for XPointer */
+ int xptr; /* it this an XPointer context */
+ xmlNodePtr here; /* for here() */
+ xmlNodePtr origin; /* for origin() */
+
+ /* the set of namespace declarations in scope for the expression */
+ xmlHashTablePtr nsHash; /* The namespaces hash table */
+ void *varLookupFunc; /* variable lookup func */
+ void *varLookupData; /* variable lookup data */
+
+ /* Possibility to link in an extra item */
+ void *extra; /* needed for XSLT */
+
+ /* The function name and URI when calling a function */
+ const xmlChar *function;
+ const xmlChar *functionURI;
+
+ /* function lookup function and data */
+ void *funcLookupFunc; /* function lookup func */
+ void *funcLookupData; /* function lookup data */
+
+ /* temporary namespace lists kept for walking the namespace axis */
+ xmlNsPtr *tmpNsList; /* Array of namespaces */
+ int tmpNsNr; /* number of namespace in scope */
+
+ /* error reporting mechanism */
+ void *userData; /* user specific data block */
+ xmlStructuredErrorFunc error; /* the callback in case of errors */
+ xmlError lastError; /* the last error */
+ xmlNodePtr debugNode; /* the source node XSLT */
+
+ /* dictionnary */
+ xmlDictPtr dict; /* dictionnary if any */
+};
+
+/*
+ * The structure of a compiled expression form is not public.
+ */
+
+typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
+typedef xmlXPathCompExpr *xmlXPathCompExprPtr;
+
+/**
+ * xmlXPathParserContext:
+ *
+ * An XPath parser context. It contains pure parsing informations,
+ * an xmlXPathContext, and the stack of objects.
+ */
+struct _xmlXPathParserContext {
+ const xmlChar *cur; /* the current char being parsed */
+ const xmlChar *base; /* the full expression */
+
+ int error; /* error code */
+
+ xmlXPathContextPtr context; /* the evaluation context */
+ xmlXPathObjectPtr value; /* the current value */
+ int valueNr; /* number of values stacked */
+ int valueMax; /* max number of values stacked */
+ xmlXPathObjectPtr *valueTab; /* stack of values */
+
+ xmlXPathCompExprPtr comp; /* the precompiled expression */
+ int xptr; /* it this an XPointer expression */
+ xmlNodePtr ancestor; /* used for walking preceding axis */
+};
+
+/**
+ * xmlXPathFunction:
+ * @ctxt: the XPath interprestation context
+ * @nargs: the number of arguments
+ *
+ * An XPath function.
+ * The arguments (if any) are popped out from the context stack
+ * and the result is pushed on the stack.
+ */
+
+typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
+
+/************************************************************************
+ * *
+ * Public API *
+ * *
+ ************************************************************************/
+
+/**
+ * Objects and Nodesets handling
+ */
+
+XMLPUBVAR double xmlXPathNAN;
+XMLPUBVAR double xmlXPathPINF;
+XMLPUBVAR double xmlXPathNINF;
+
+XMLPUBFUN int XMLCALL
+ xmlXPathIsNaN (double val);
+XMLPUBFUN int XMLCALL
+ xmlXPathIsInf (double val);
+
+/* These macros may later turn into functions */
+/**
+ * xmlXPathNodeSetGetLength:
+ * @ns: a node-set
+ *
+ * Implement a functionality similar to the DOM NodeList.length.
+ *
+ * Returns the number of nodes in the node-set.
+ */
+#define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
+/**
+ * xmlXPathNodeSetItem:
+ * @ns: a node-set
+ * @index: index of a node in the set
+ *
+ * Implements a functionality similar to the DOM NodeList.item().
+ *
+ * Returns the xmlNodePtr at the given @index in @ns or NULL if
+ * @index is out of range (0 to length-1)
+ */
+#define xmlXPathNodeSetItem(ns, index) \
+ ((((ns) != NULL) && \
+ ((index) >= 0) && ((index) < (ns)->nodeNr)) ? \
+ (ns)->nodeTab[(index)] \
+ : NULL)
+/**
+ * xmlXPathNodeSetIsEmpty:
+ * @ns: a node-set
+ *
+ * Checks whether @ns is empty or not.
+ *
+ * Returns %TRUE if @ns is an empty node-set.
+ */
+#define xmlXPathNodeSetIsEmpty(ns) \
+ (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
+
+
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeObject (xmlXPathObjectPtr obj);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeSetCreate (xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeNodeSet (xmlNodeSetPtr obj);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathObjectCopy (xmlXPathObjectPtr val);
+XMLPUBFUN int XMLCALL
+ xmlXPathCmpNodes (xmlNodePtr node1,
+ xmlNodePtr node2);
+/**
+ * Conversion functions to basic types.
+ */
+XMLPUBFUN int XMLCALL
+ xmlXPathCastNumberToBoolean (double val);
+XMLPUBFUN int XMLCALL
+ xmlXPathCastStringToBoolean (const xmlChar * val);
+XMLPUBFUN int XMLCALL
+ xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns);
+XMLPUBFUN int XMLCALL
+ xmlXPathCastToBoolean (xmlXPathObjectPtr val);
+
+XMLPUBFUN double XMLCALL
+ xmlXPathCastBooleanToNumber (int val);
+XMLPUBFUN double XMLCALL
+ xmlXPathCastStringToNumber (const xmlChar * val);
+XMLPUBFUN double XMLCALL
+ xmlXPathCastNodeToNumber (xmlNodePtr node);
+XMLPUBFUN double XMLCALL
+ xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns);
+XMLPUBFUN double XMLCALL
+ xmlXPathCastToNumber (xmlXPathObjectPtr val);
+
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastBooleanToString (int val);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastNumberToString (double val);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastNodeToString (xmlNodePtr node);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastNodeSetToString (xmlNodeSetPtr ns);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathCastToString (xmlXPathObjectPtr val);
+
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathConvertBoolean (xmlXPathObjectPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathConvertNumber (xmlXPathObjectPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathConvertString (xmlXPathObjectPtr val);
+
+/**
+ * Context handling.
+ */
+XMLPUBFUN void XMLCALL
+ xmlXPathInit (void);
+XMLPUBFUN xmlXPathContextPtr XMLCALL
+ xmlXPathNewContext (xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeContext (xmlXPathContextPtr ctxt);
+
+/**
+ * Evaluation functions.
+ */
+XMLPUBFUN long XMLCALL
+ xmlXPathOrderDocElems (xmlDocPtr doc);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathEval (const xmlChar *str,
+ xmlXPathContextPtr ctx);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathEvalExpression (const xmlChar *str,
+ xmlXPathContextPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlXPathEvalPredicate (xmlXPathContextPtr ctxt,
+ xmlXPathObjectPtr res);
+/**
+ * Separate compilation/evaluation entry points.
+ */
+XMLPUBFUN xmlXPathCompExprPtr XMLCALL
+ xmlXPathCompile (const xmlChar *str);
+XMLPUBFUN xmlXPathCompExprPtr XMLCALL
+ xmlXPathCtxtCompile (xmlXPathContextPtr ctxt,
+ const xmlChar *str);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathCompiledEval (xmlXPathCompExprPtr comp,
+ xmlXPathContextPtr ctx);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp);
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! __XML_XPATH_H__ */
diff --git a/include/libxml/xpathInternals.h b/include/libxml/xpathInternals.h
new file mode 100644
index 0000000..75e5d74
--- /dev/null
+++ b/include/libxml/xpathInternals.h
@@ -0,0 +1,653 @@
+/*
+ * Summary: internal interfaces for XML Path Language implementation
+ * Description: internal interfaces for XML Path Language implementation
+ * used to build new modules on top of XPath like XPointer and
+ * XSLT
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XPATH_INTERNALS_H__
+#define __XML_XPATH_INTERNALS_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xpath.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/************************************************************************
+ * *
+ * Helpers *
+ * *
+ ************************************************************************/
+
+/*
+ * Many of these macros may later turn into functions. They
+ * shouldn't be used in #ifdef's preprocessor instructions.
+ */
+/**
+ * xmlXPathSetError:
+ * @ctxt: an XPath parser context
+ * @err: an xmlXPathError code
+ *
+ * Raises an error.
+ */
+#define xmlXPathSetError(ctxt, err) \
+ { xmlXPatherror((ctxt), __FILE__, __LINE__, (err)); \
+ (ctxt)->error = (err); }
+
+/**
+ * xmlXPathSetArityError:
+ * @ctxt: an XPath parser context
+ *
+ * Raises an XPATH_INVALID_ARITY error.
+ */
+#define xmlXPathSetArityError(ctxt) \
+ xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
+
+/**
+ * xmlXPathSetTypeError:
+ * @ctxt: an XPath parser context
+ *
+ * Raises an XPATH_INVALID_TYPE error.
+ */
+#define xmlXPathSetTypeError(ctxt) \
+ xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
+
+/**
+ * xmlXPathGetError:
+ * @ctxt: an XPath parser context
+ *
+ * Get the error code of an XPath context.
+ *
+ * Returns the context error.
+ */
+#define xmlXPathGetError(ctxt) ((ctxt)->error)
+
+/**
+ * xmlXPathCheckError:
+ * @ctxt: an XPath parser context
+ *
+ * Check if an XPath error was raised.
+ *
+ * Returns true if an error has been raised, false otherwise.
+ */
+#define xmlXPathCheckError(ctxt) ((ctxt)->error != XPATH_EXPRESSION_OK)
+
+/**
+ * xmlXPathGetDocument:
+ * @ctxt: an XPath parser context
+ *
+ * Get the document of an XPath context.
+ *
+ * Returns the context document.
+ */
+#define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc)
+
+/**
+ * xmlXPathGetContextNode:
+ * @ctxt: an XPath parser context
+ *
+ * Get the context node of an XPath context.
+ *
+ * Returns the context node.
+ */
+#define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node)
+
+XMLPUBFUN int XMLCALL
+ xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN double XMLCALL
+ xmlXPathPopNumber (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathPopString (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void * XMLCALL
+ xmlXPathPopExternal (xmlXPathParserContextPtr ctxt);
+
+/**
+ * xmlXPathReturnBoolean:
+ * @ctxt: an XPath parser context
+ * @val: a boolean
+ *
+ * Pushes the boolean @val on the context stack.
+ */
+#define xmlXPathReturnBoolean(ctxt, val) \
+ valuePush((ctxt), xmlXPathNewBoolean(val))
+
+/**
+ * xmlXPathReturnTrue:
+ * @ctxt: an XPath parser context
+ *
+ * Pushes true on the context stack.
+ */
+#define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1)
+
+/**
+ * xmlXPathReturnFalse:
+ * @ctxt: an XPath parser context
+ *
+ * Pushes false on the context stack.
+ */
+#define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0)
+
+/**
+ * xmlXPathReturnNumber:
+ * @ctxt: an XPath parser context
+ * @val: a double
+ *
+ * Pushes the double @val on the context stack.
+ */
+#define xmlXPathReturnNumber(ctxt, val) \
+ valuePush((ctxt), xmlXPathNewFloat(val))
+
+/**
+ * xmlXPathReturnString:
+ * @ctxt: an XPath parser context
+ * @str: a string
+ *
+ * Pushes the string @str on the context stack.
+ */
+#define xmlXPathReturnString(ctxt, str) \
+ valuePush((ctxt), xmlXPathWrapString(str))
+
+/**
+ * xmlXPathReturnEmptyString:
+ * @ctxt: an XPath parser context
+ *
+ * Pushes an empty string on the stack.
+ */
+#define xmlXPathReturnEmptyString(ctxt) \
+ valuePush((ctxt), xmlXPathNewCString(""))
+
+/**
+ * xmlXPathReturnNodeSet:
+ * @ctxt: an XPath parser context
+ * @ns: a node-set
+ *
+ * Pushes the node-set @ns on the context stack.
+ */
+#define xmlXPathReturnNodeSet(ctxt, ns) \
+ valuePush((ctxt), xmlXPathWrapNodeSet(ns))
+
+/**
+ * xmlXPathReturnEmptyNodeSet:
+ * @ctxt: an XPath parser context
+ *
+ * Pushes an empty node-set on the context stack.
+ */
+#define xmlXPathReturnEmptyNodeSet(ctxt) \
+ valuePush((ctxt), xmlXPathNewNodeSet(NULL))
+
+/**
+ * xmlXPathReturnExternal:
+ * @ctxt: an XPath parser context
+ * @val: user data
+ *
+ * Pushes user data on the context stack.
+ */
+#define xmlXPathReturnExternal(ctxt, val) \
+ valuePush((ctxt), xmlXPathWrapExternal(val))
+
+/**
+ * xmlXPathStackIsNodeSet:
+ * @ctxt: an XPath parser context
+ *
+ * Check if the current value on the XPath stack is a node set or
+ * an XSLT value tree.
+ *
+ * Returns true if the current object on the stack is a node-set.
+ */
+#define xmlXPathStackIsNodeSet(ctxt) \
+ (((ctxt)->value != NULL) \
+ && (((ctxt)->value->type == XPATH_NODESET) \
+ || ((ctxt)->value->type == XPATH_XSLT_TREE)))
+
+/**
+ * xmlXPathStackIsExternal:
+ * @ctxt: an XPath parser context
+ *
+ * Checks if the current value on the XPath stack is an external
+ * object.
+ *
+ * Returns true if the current object on the stack is an external
+ * object.
+ */
+#define xmlXPathStackIsExternal(ctxt) \
+ ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
+
+/**
+ * xmlXPathEmptyNodeSet:
+ * @ns: a node-set
+ *
+ * Empties a node-set.
+ */
+#define xmlXPathEmptyNodeSet(ns) \
+ { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; }
+
+/**
+ * CHECK_ERROR:
+ *
+ * Macro to return from the function if an XPath error was detected.
+ */
+#define CHECK_ERROR \
+ if (ctxt->error != XPATH_EXPRESSION_OK) return
+
+/**
+ * CHECK_ERROR0:
+ *
+ * Macro to return 0 from the function if an XPath error was detected.
+ */
+#define CHECK_ERROR0 \
+ if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
+
+/**
+ * XP_ERROR:
+ * @X: the error code
+ *
+ * Macro to raise an XPath error and return.
+ */
+#define XP_ERROR(X) \
+ { xmlXPathErr(ctxt, X); return; }
+
+/**
+ * XP_ERROR0:
+ * @X: the error code
+ *
+ * Macro to raise an XPath error and return 0.
+ */
+#define XP_ERROR0(X) \
+ { xmlXPathErr(ctxt, X); return(0); }
+
+/**
+ * CHECK_TYPE:
+ * @typeval: the XPath type
+ *
+ * Macro to check that the value on top of the XPath stack is of a given
+ * type.
+ */
+#define CHECK_TYPE(typeval) \
+ if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
+ XP_ERROR(XPATH_INVALID_TYPE)
+
+/**
+ * CHECK_TYPE0:
+ * @typeval: the XPath type
+ *
+ * Macro to check that the value on top of the XPath stack is of a given
+ * type. Return(0) in case of failure
+ */
+#define CHECK_TYPE0(typeval) \
+ if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
+ XP_ERROR0(XPATH_INVALID_TYPE)
+
+/**
+ * CHECK_ARITY:
+ * @x: the number of expected args
+ *
+ * Macro to check that the number of args passed to an XPath function matches.
+ */
+#define CHECK_ARITY(x) \
+ if (nargs != (x)) \
+ XP_ERROR(XPATH_INVALID_ARITY);
+
+/**
+ * CAST_TO_STRING:
+ *
+ * Macro to try to cast the value on the top of the XPath stack to a string.
+ */
+#define CAST_TO_STRING \
+ if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
+ xmlXPathStringFunction(ctxt, 1);
+
+/**
+ * CAST_TO_NUMBER:
+ *
+ * Macro to try to cast the value on the top of the XPath stack to a number.
+ */
+#define CAST_TO_NUMBER \
+ if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
+ xmlXPathNumberFunction(ctxt, 1);
+
+/**
+ * CAST_TO_BOOLEAN:
+ *
+ * Macro to try to cast the value on the top of the XPath stack to a boolean.
+ */
+#define CAST_TO_BOOLEAN \
+ if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
+ xmlXPathBooleanFunction(ctxt, 1);
+
+/*
+ * Variable Lookup forwarding.
+ */
+/**
+ * xmlXPathVariableLookupFunc:
+ * @ctxt: an XPath context
+ * @name: name of the variable
+ * @ns_uri: the namespace name hosting this variable
+ *
+ * Prototype for callbacks used to plug variable lookup in the XPath
+ * engine.
+ *
+ * Returns the XPath object value or NULL if not found.
+ */
+typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri);
+
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt,
+ xmlXPathVariableLookupFunc f,
+ void *data);
+
+/*
+ * Function Lookup forwarding.
+ */
+/**
+ * xmlXPathFuncLookupFunc:
+ * @ctxt: an XPath context
+ * @name: name of the function
+ * @ns_uri: the namespace name hosting this function
+ *
+ * Prototype for callbacks used to plug function lookup in the XPath
+ * engine.
+ *
+ * Returns the XPath function or NULL if not found.
+ */
+typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri);
+
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
+ xmlXPathFuncLookupFunc f,
+ void *funcCtxt);
+
+/*
+ * Error reporting.
+ */
+XMLPUBFUN void XMLCALL
+ xmlXPatherror (xmlXPathParserContextPtr ctxt,
+ const char *file,
+ int line,
+ int no);
+
+XMLPUBFUN void XMLCALL
+ xmlXPathErr (xmlXPathParserContextPtr ctxt,
+ int error);
+
+#ifdef LIBXML_DEBUG_ENABLED
+XMLPUBFUN void XMLCALL
+ xmlXPathDebugDumpObject (FILE *output,
+ xmlXPathObjectPtr cur,
+ int depth);
+XMLPUBFUN void XMLCALL
+ xmlXPathDebugDumpCompExpr(FILE *output,
+ xmlXPathCompExprPtr comp,
+ int depth);
+#endif
+/**
+ * NodeSet handling.
+ */
+XMLPUBFUN int XMLCALL
+ xmlXPathNodeSetContains (xmlNodeSetPtr cur,
+ xmlNodePtr val);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathDifference (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathIntersection (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathDistinctSorted (xmlNodeSetPtr nodes);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathDistinct (xmlNodeSetPtr nodes);
+
+XMLPUBFUN int XMLCALL
+ xmlXPathHasSameNodes (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,
+ xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathLeadingSorted (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeLeading (xmlNodeSetPtr nodes,
+ xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathLeading (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes,
+ xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathTrailingSorted (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeTrailing (xmlNodeSetPtr nodes,
+ xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathTrailing (xmlNodeSetPtr nodes1,
+ xmlNodeSetPtr nodes2);
+
+
+/**
+ * Extending a context.
+ */
+
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterNs (xmlXPathContextPtr ctxt,
+ const xmlChar *prefix,
+ const xmlChar *ns_uri);
+XMLPUBFUN const xmlChar * XMLCALL
+ xmlXPathNsLookup (xmlXPathContextPtr ctxt,
+ const xmlChar *prefix);
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt);
+
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ xmlXPathFunction f);
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri,
+ xmlXPathFunction f);
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ xmlXPathObjectPtr value);
+XMLPUBFUN int XMLCALL
+ xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri,
+ xmlXPathObjectPtr value);
+XMLPUBFUN xmlXPathFunction XMLCALL
+ xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,
+ const xmlChar *name);
+XMLPUBFUN xmlXPathFunction XMLCALL
+ xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri);
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathVariableLookup (xmlXPathContextPtr ctxt,
+ const xmlChar *name);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt,
+ const xmlChar *name,
+ const xmlChar *ns_uri);
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
+
+/**
+ * Utilities to extend XPath.
+ */
+XMLPUBFUN xmlXPathParserContextPtr XMLCALL
+ xmlXPathNewParserContext (const xmlChar *str,
+ xmlXPathContextPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
+
+/* TODO: remap to xmlXPathValuePop and Push. */
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ valuePop (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN int XMLCALL
+ valuePush (xmlXPathParserContextPtr ctxt,
+ xmlXPathObjectPtr value);
+
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewString (const xmlChar *val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewCString (const char *val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathWrapString (xmlChar *val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathWrapCString (char * val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewFloat (double val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewBoolean (int val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewNodeSet (xmlNodePtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewValueTree (xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetAdd (xmlNodeSetPtr cur,
+ xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur,
+ xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetAddNs (xmlNodeSetPtr cur,
+ xmlNodePtr node,
+ xmlNsPtr ns);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetSort (xmlNodeSetPtr set);
+
+XMLPUBFUN void XMLCALL
+ xmlXPathRoot (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathParseName (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+ xmlXPathParseNCName (xmlXPathParserContextPtr ctxt);
+
+/*
+ * Existing functions.
+ */
+XMLPUBFUN double XMLCALL
+ xmlXPathStringEvalNumber (const xmlChar *str);
+XMLPUBFUN int XMLCALL
+ xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
+ xmlXPathObjectPtr res);
+XMLPUBFUN void XMLCALL
+ xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+ xmlXPathNodeSetMerge (xmlNodeSetPtr val1,
+ xmlNodeSetPtr val2);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetDel (xmlNodeSetPtr cur,
+ xmlNodePtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPathNodeSetRemove (xmlNodeSetPtr cur,
+ int val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathNewNodeSetList (xmlNodeSetPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathWrapNodeSet (xmlNodeSetPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPathWrapExternal (void *val);
+
+XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
+XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
+
+XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
+
+/*
+ * Some of the axis navigation routines.
+ */
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur);
+/*
+ * The official core of XPath functions.
+ */
+XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
+
+/**
+ * Really internal functions
+ */
+XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! __XML_XPATH_INTERNALS_H__ */
diff --git a/include/libxml/xpointer.h b/include/libxml/xpointer.h
new file mode 100644
index 0000000..2285b0e
--- /dev/null
+++ b/include/libxml/xpointer.h
@@ -0,0 +1,109 @@
+/*
+ * Summary: API to handle XML Pointers
+ * Description: API to handle XML Pointers
+ * Base implementation was made accordingly to
+ * W3C Candidate Recommendation 7 June 2000
+ * http://www.w3.org/TR/2000/CR-xptr-20000607
+ *
+ * Added support for the element() scheme described in:
+ * W3C Proposed Recommendation 13 November 2002
+ * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XPTR_H__
+#define __XML_XPTR_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A Location Set
+ */
+typedef struct _xmlLocationSet xmlLocationSet;
+typedef xmlLocationSet *xmlLocationSetPtr;
+struct _xmlLocationSet {
+ int locNr; /* number of locations in the set */
+ int locMax; /* size of the array as allocated */
+ xmlXPathObjectPtr *locTab;/* array of locations */
+};
+
+/*
+ * Handling of location sets.
+ */
+
+XMLPUBFUN xmlLocationSetPtr XMLCALL
+ xmlXPtrLocationSetCreate (xmlXPathObjectPtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPtrFreeLocationSet (xmlLocationSetPtr obj);
+XMLPUBFUN xmlLocationSetPtr XMLCALL
+ xmlXPtrLocationSetMerge (xmlLocationSetPtr val1,
+ xmlLocationSetPtr val2);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRange (xmlNodePtr start,
+ int startindex,
+ xmlNodePtr end,
+ int endindex);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangePoints (xmlXPathObjectPtr start,
+ xmlXPathObjectPtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangeNodePoint (xmlNodePtr start,
+ xmlXPathObjectPtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangePointNode (xmlXPathObjectPtr start,
+ xmlNodePtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangeNodes (xmlNodePtr start,
+ xmlNodePtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewLocationSetNodes (xmlNodePtr start,
+ xmlNodePtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewRangeNodeObject (xmlNodePtr start,
+ xmlXPathObjectPtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrNewCollapsedRange (xmlNodePtr start);
+XMLPUBFUN void XMLCALL
+ xmlXPtrLocationSetAdd (xmlLocationSetPtr cur,
+ xmlXPathObjectPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrWrapLocationSet (xmlLocationSetPtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPtrLocationSetDel (xmlLocationSetPtr cur,
+ xmlXPathObjectPtr val);
+XMLPUBFUN void XMLCALL
+ xmlXPtrLocationSetRemove (xmlLocationSetPtr cur,
+ int val);
+
+/*
+ * Functions.
+ */
+XMLPUBFUN xmlXPathContextPtr XMLCALL
+ xmlXPtrNewContext (xmlDocPtr doc,
+ xmlNodePtr here,
+ xmlNodePtr origin);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+ xmlXPtrEval (const xmlChar *str,
+ xmlXPathContextPtr ctx);
+XMLPUBFUN void XMLCALL
+ xmlXPtrRangeToFunction (xmlXPathParserContextPtr ctxt,
+ int nargs);
+XMLPUBFUN xmlNodePtr XMLCALL
+ xmlXPtrBuildNodeList (xmlXPathObjectPtr obj);
+XMLPUBFUN void XMLCALL
+ xmlXPtrEvalRangePredicate (xmlXPathParserContextPtr ctxt);
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_XPTR_H__ */
diff --git a/include/win32config.h b/include/win32config.h
new file mode 100644
index 0000000..9c75afd
--- /dev/null
+++ b/include/win32config.h
@@ -0,0 +1,111 @@
+#ifndef __LIBXML_WIN32_CONFIG__
+#define __LIBXML_WIN32_CONFIG__
+
+#define HAVE_CTYPE_H
+#define HAVE_STDARG_H
+#define HAVE_MALLOC_H
+#define HAVE_ERRNO_H
+
+#ifdef _WIN32_WCE
+#undef HAVE_ERRNO_H
+#include <windows.h>
+#include "wincecompat.h"
+#else
+#define HAVE_SYS_STAT_H
+#define HAVE__STAT
+#define HAVE_STAT
+#define HAVE_STDLIB_H
+#define HAVE_TIME_H
+#define HAVE_FCNTL_H
+#include <io.h>
+#include <direct.h>
+#endif
+
+#include <libxml/xmlversion.h>
+
+#ifdef NEED_SOCKETS
+#include <wsockcompat.h>
+#endif
+
+#define HAVE_ISINF
+#define HAVE_ISNAN
+#include <math.h>
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+/* MS C-runtime has functions which can be used in order to determine if
+ a given floating-point variable contains NaN, (+-)INF. These are
+ preferred, because floating-point technology is considered propriatary
+ by MS and we can assume that their functions know more about their
+ oddities than we do. */
+#include <float.h>
+/* Bjorn Reese figured a quite nice construct for isinf() using the _fpclass
+ function. */
+#ifndef isinf
+#define isinf(d) ((_fpclass(d) == _FPCLASS_PINF) ? 1 \
+ : ((_fpclass(d) == _FPCLASS_NINF) ? -1 : 0))
+#endif
+/* _isnan(x) returns nonzero if (x == NaN) and zero otherwise. */
+#ifndef isnan
+#define isnan(d) (_isnan(d))
+#endif
+#else /* _MSC_VER */
+#ifndef isinf
+static int isinf (double d) {
+ int expon = 0;
+ double val = frexp (d, &expon);
+ if (expon == 1025) {
+ if (val == 0.5) {
+ return 1;
+ } else if (val == -0.5) {
+ return -1;
+ } else {
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+}
+#endif
+#ifndef isnan
+static int isnan (double d) {
+ int expon = 0;
+ double val = frexp (d, &expon);
+ if (expon == 1025) {
+ if (val == 0.5) {
+ return 0;
+ } else if (val == -0.5) {
+ return 0;
+ } else {
+ return 1;
+ }
+ } else {
+ return 0;
+ }
+}
+#endif
+#endif /* _MSC_VER */
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define mkdir(p,m) _mkdir(p)
+#define snprintf _snprintf
+#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a)
+#endif
+
+/* Threading API to use should be specified here for compatibility reasons.
+ This is however best specified on the compiler's command-line. */
+#if defined(LIBXML_THREAD_ENABLED)
+#if !defined(HAVE_PTHREAD_H) && !defined(HAVE_WIN32_THREADS)
+#define HAVE_WIN32_THREADS
+#endif
+#endif
+
+/* Some third-party libraries far from our control assume the following
+ is defined, which it is not if we don't include windows.h. */
+#if !defined(FALSE)
+#define FALSE 0
+#endif
+#if !defined(TRUE)
+#define TRUE (!(FALSE))
+#endif
+
+#endif /* __LIBXML_WIN32_CONFIG__ */
+
diff --git a/include/wsockcompat.h b/include/wsockcompat.h
new file mode 100644
index 0000000..690048c
--- /dev/null
+++ b/include/wsockcompat.h
@@ -0,0 +1,61 @@
+/* include/wsockcompat.h
+ * Windows -> Berkeley Sockets compatibility things.
+ */
+
+#if !defined __XML_WSOCKCOMPAT_H__
+#define __XML_WSOCKCOMPAT_H__
+
+#ifdef _WIN32_WCE
+#include <winsock.h>
+#else
+#undef HAVE_ERRNO_H
+#include <winsock2.h>
+#endif
+
+#if !defined SOCKLEN_T
+#define SOCKLEN_T int
+#endif
+
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#define EINPROGRESS WSAEINPROGRESS
+#define EALREADY WSAEALREADY
+#define ENOTSOCK WSAENOTSOCK
+#define EDESTADDRREQ WSAEDESTADDRREQ
+#define EMSGSIZE WSAEMSGSIZE
+#define EPROTOTYPE WSAEPROTOTYPE
+#define ENOPROTOOPT WSAENOPROTOOPT
+#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
+#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#define EOPNOTSUPP WSAEOPNOTSUPP
+#define EPFNOSUPPORT WSAEPFNOSUPPORT
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#define EADDRINUSE WSAEADDRINUSE
+#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
+#define ENETDOWN WSAENETDOWN
+#define ENETUNREACH WSAENETUNREACH
+#define ENETRESET WSAENETRESET
+#define ECONNABORTED WSAECONNABORTED
+#define ECONNRESET WSAECONNRESET
+#define ENOBUFS WSAENOBUFS
+#define EISCONN WSAEISCONN
+#define ENOTCONN WSAENOTCONN
+#define ESHUTDOWN WSAESHUTDOWN
+#define ETOOMANYREFS WSAETOOMANYREFS
+#define ETIMEDOUT WSAETIMEDOUT
+#define ECONNREFUSED WSAECONNREFUSED
+#define ELOOP WSAELOOP
+#define EHOSTDOWN WSAEHOSTDOWN
+#define EHOSTUNREACH WSAEHOSTUNREACH
+#define EPROCLIM WSAEPROCLIM
+#define EUSERS WSAEUSERS
+#define EDQUOT WSAEDQUOT
+#define ESTALE WSAESTALE
+#define EREMOTE WSAEREMOTE
+/* These cause conflicts with the codes from errno.h. Since they are
+ not used in the relevant code (nanoftp, nanohttp), we can leave
+ them disabled.
+#define ENAMETOOLONG WSAENAMETOOLONG
+#define ENOTEMPTY WSAENOTEMPTY
+*/
+
+#endif /* __XML_WSOCKCOMPAT_H__ */
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..ebc6691
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,250 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/legacy.c b/legacy.c
new file mode 100644
index 0000000..9ed7413
--- /dev/null
+++ b/legacy.c
@@ -0,0 +1,1340 @@
+/*
+ * legacy.c: set of deprecated routines, not to be used anymore but
+ * kept purely for ABI compatibility
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_LEGACY_ENABLED
+#include <string.h>
+
+#include <libxml/tree.h>
+#include <libxml/entities.h>
+#include <libxml/SAX.h>
+#include <libxml/parserInternals.h>
+#include <libxml/HTMLparser.h>
+
+void xmlUpgradeOldNs(xmlDocPtr doc);
+
+/************************************************************************
+ * *
+ * Deprecated functions kept for compatibility *
+ * *
+ ************************************************************************/
+
+xmlChar *htmlDecodeEntities(htmlParserCtxtPtr ctxt, int len, xmlChar end,
+ xmlChar end2, xmlChar end3);
+
+/**
+ * htmlDecodeEntities:
+ * @ctxt: the parser context
+ * @len: the len to decode (in bytes !), -1 for no size limit
+ * @end: an end marker xmlChar, 0 if none
+ * @end2: an end marker xmlChar, 0 if none
+ * @end3: an end marker xmlChar, 0 if none
+ *
+ * Substitute the HTML entities by their value
+ *
+ * DEPRECATED !!!!
+ *
+ * Returns A newly allocated string with the substitution done. The caller
+ * must deallocate it !
+ */
+xmlChar *
+htmlDecodeEntities(htmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ int len ATTRIBUTE_UNUSED, xmlChar end ATTRIBUTE_UNUSED,
+ xmlChar end2 ATTRIBUTE_UNUSED,
+ xmlChar end3 ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "htmlDecodeEntities() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlInitializePredefinedEntities:
+ *
+ * Set up the predefined entities.
+ * Deprecated call
+ */
+void
+xmlInitializePredefinedEntities(void)
+{
+}
+
+/**
+ * xmlCleanupPredefinedEntities:
+ *
+ * Cleanup up the predefined entities table.
+ * Deprecated call
+ */
+void
+xmlCleanupPredefinedEntities(void)
+{
+}
+
+static const char *xmlFeaturesList[] = {
+ "validate",
+ "load subset",
+ "keep blanks",
+ "disable SAX",
+ "fetch external entities",
+ "substitute entities",
+ "gather line info",
+ "user data",
+ "is html",
+ "is standalone",
+ "stop parser",
+ "document",
+ "is well formed",
+ "is valid",
+ "SAX block",
+ "SAX function internalSubset",
+ "SAX function isStandalone",
+ "SAX function hasInternalSubset",
+ "SAX function hasExternalSubset",
+ "SAX function resolveEntity",
+ "SAX function getEntity",
+ "SAX function entityDecl",
+ "SAX function notationDecl",
+ "SAX function attributeDecl",
+ "SAX function elementDecl",
+ "SAX function unparsedEntityDecl",
+ "SAX function setDocumentLocator",
+ "SAX function startDocument",
+ "SAX function endDocument",
+ "SAX function startElement",
+ "SAX function endElement",
+ "SAX function reference",
+ "SAX function characters",
+ "SAX function ignorableWhitespace",
+ "SAX function processingInstruction",
+ "SAX function comment",
+ "SAX function warning",
+ "SAX function error",
+ "SAX function fatalError",
+ "SAX function getParameterEntity",
+ "SAX function cdataBlock",
+ "SAX function externalSubset",
+};
+
+/**
+ * xmlGetFeaturesList:
+ * @len: the length of the features name array (input/output)
+ * @result: an array of string to be filled with the features name.
+ *
+ * Copy at most *@len feature names into the @result array
+ *
+ * Returns -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
+ */
+int
+xmlGetFeaturesList(int *len, const char **result)
+{
+ int ret, i;
+
+ ret = sizeof(xmlFeaturesList) / sizeof(xmlFeaturesList[0]);
+ if ((len == NULL) || (result == NULL))
+ return (ret);
+ if ((*len < 0) || (*len >= 1000))
+ return (-1);
+ if (*len > ret)
+ *len = ret;
+ for (i = 0; i < *len; i++)
+ result[i] = xmlFeaturesList[i];
+ return (ret);
+}
+
+/**
+ * xmlGetFeature:
+ * @ctxt: an XML/HTML parser context
+ * @name: the feature name
+ * @result: location to store the result
+ *
+ * Read the current value of one feature of this parser instance
+ *
+ * Returns -1 in case or error, 0 otherwise
+ */
+int
+xmlGetFeature(xmlParserCtxtPtr ctxt, const char *name, void *result)
+{
+ if ((ctxt == NULL) || (name == NULL) || (result == NULL))
+ return (-1);
+
+ if (!strcmp(name, "validate")) {
+ *((int *) result) = ctxt->validate;
+ } else if (!strcmp(name, "keep blanks")) {
+ *((int *) result) = ctxt->keepBlanks;
+ } else if (!strcmp(name, "disable SAX")) {
+ *((int *) result) = ctxt->disableSAX;
+ } else if (!strcmp(name, "fetch external entities")) {
+ *((int *) result) = ctxt->loadsubset;
+ } else if (!strcmp(name, "substitute entities")) {
+ *((int *) result) = ctxt->replaceEntities;
+ } else if (!strcmp(name, "gather line info")) {
+ *((int *) result) = ctxt->record_info;
+ } else if (!strcmp(name, "user data")) {
+ *((void **) result) = ctxt->userData;
+ } else if (!strcmp(name, "is html")) {
+ *((int *) result) = ctxt->html;
+ } else if (!strcmp(name, "is standalone")) {
+ *((int *) result) = ctxt->standalone;
+ } else if (!strcmp(name, "document")) {
+ *((xmlDocPtr *) result) = ctxt->myDoc;
+ } else if (!strcmp(name, "is well formed")) {
+ *((int *) result) = ctxt->wellFormed;
+ } else if (!strcmp(name, "is valid")) {
+ *((int *) result) = ctxt->valid;
+ } else if (!strcmp(name, "SAX block")) {
+ *((xmlSAXHandlerPtr *) result) = ctxt->sax;
+ } else if (!strcmp(name, "SAX function internalSubset")) {
+ *((internalSubsetSAXFunc *) result) = ctxt->sax->internalSubset;
+ } else if (!strcmp(name, "SAX function isStandalone")) {
+ *((isStandaloneSAXFunc *) result) = ctxt->sax->isStandalone;
+ } else if (!strcmp(name, "SAX function hasInternalSubset")) {
+ *((hasInternalSubsetSAXFunc *) result) =
+ ctxt->sax->hasInternalSubset;
+ } else if (!strcmp(name, "SAX function hasExternalSubset")) {
+ *((hasExternalSubsetSAXFunc *) result) =
+ ctxt->sax->hasExternalSubset;
+ } else if (!strcmp(name, "SAX function resolveEntity")) {
+ *((resolveEntitySAXFunc *) result) = ctxt->sax->resolveEntity;
+ } else if (!strcmp(name, "SAX function getEntity")) {
+ *((getEntitySAXFunc *) result) = ctxt->sax->getEntity;
+ } else if (!strcmp(name, "SAX function entityDecl")) {
+ *((entityDeclSAXFunc *) result) = ctxt->sax->entityDecl;
+ } else if (!strcmp(name, "SAX function notationDecl")) {
+ *((notationDeclSAXFunc *) result) = ctxt->sax->notationDecl;
+ } else if (!strcmp(name, "SAX function attributeDecl")) {
+ *((attributeDeclSAXFunc *) result) = ctxt->sax->attributeDecl;
+ } else if (!strcmp(name, "SAX function elementDecl")) {
+ *((elementDeclSAXFunc *) result) = ctxt->sax->elementDecl;
+ } else if (!strcmp(name, "SAX function unparsedEntityDecl")) {
+ *((unparsedEntityDeclSAXFunc *) result) =
+ ctxt->sax->unparsedEntityDecl;
+ } else if (!strcmp(name, "SAX function setDocumentLocator")) {
+ *((setDocumentLocatorSAXFunc *) result) =
+ ctxt->sax->setDocumentLocator;
+ } else if (!strcmp(name, "SAX function startDocument")) {
+ *((startDocumentSAXFunc *) result) = ctxt->sax->startDocument;
+ } else if (!strcmp(name, "SAX function endDocument")) {
+ *((endDocumentSAXFunc *) result) = ctxt->sax->endDocument;
+ } else if (!strcmp(name, "SAX function startElement")) {
+ *((startElementSAXFunc *) result) = ctxt->sax->startElement;
+ } else if (!strcmp(name, "SAX function endElement")) {
+ *((endElementSAXFunc *) result) = ctxt->sax->endElement;
+ } else if (!strcmp(name, "SAX function reference")) {
+ *((referenceSAXFunc *) result) = ctxt->sax->reference;
+ } else if (!strcmp(name, "SAX function characters")) {
+ *((charactersSAXFunc *) result) = ctxt->sax->characters;
+ } else if (!strcmp(name, "SAX function ignorableWhitespace")) {
+ *((ignorableWhitespaceSAXFunc *) result) =
+ ctxt->sax->ignorableWhitespace;
+ } else if (!strcmp(name, "SAX function processingInstruction")) {
+ *((processingInstructionSAXFunc *) result) =
+ ctxt->sax->processingInstruction;
+ } else if (!strcmp(name, "SAX function comment")) {
+ *((commentSAXFunc *) result) = ctxt->sax->comment;
+ } else if (!strcmp(name, "SAX function warning")) {
+ *((warningSAXFunc *) result) = ctxt->sax->warning;
+ } else if (!strcmp(name, "SAX function error")) {
+ *((errorSAXFunc *) result) = ctxt->sax->error;
+ } else if (!strcmp(name, "SAX function fatalError")) {
+ *((fatalErrorSAXFunc *) result) = ctxt->sax->fatalError;
+ } else if (!strcmp(name, "SAX function getParameterEntity")) {
+ *((getParameterEntitySAXFunc *) result) =
+ ctxt->sax->getParameterEntity;
+ } else if (!strcmp(name, "SAX function cdataBlock")) {
+ *((cdataBlockSAXFunc *) result) = ctxt->sax->cdataBlock;
+ } else if (!strcmp(name, "SAX function externalSubset")) {
+ *((externalSubsetSAXFunc *) result) = ctxt->sax->externalSubset;
+ } else {
+ return (-1);
+ }
+ return (0);
+}
+
+/**
+ * xmlSetFeature:
+ * @ctxt: an XML/HTML parser context
+ * @name: the feature name
+ * @value: pointer to the location of the new value
+ *
+ * Change the current value of one feature of this parser instance
+ *
+ * Returns -1 in case or error, 0 otherwise
+ */
+int
+xmlSetFeature(xmlParserCtxtPtr ctxt, const char *name, void *value)
+{
+ if ((ctxt == NULL) || (name == NULL) || (value == NULL))
+ return (-1);
+
+ if (!strcmp(name, "validate")) {
+ int newvalidate = *((int *) value);
+
+ if ((!ctxt->validate) && (newvalidate != 0)) {
+ if (ctxt->vctxt.warning == NULL)
+ ctxt->vctxt.warning = xmlParserValidityWarning;
+ if (ctxt->vctxt.error == NULL)
+ ctxt->vctxt.error = xmlParserValidityError;
+ ctxt->vctxt.nodeMax = 0;
+ }
+ ctxt->validate = newvalidate;
+ } else if (!strcmp(name, "keep blanks")) {
+ ctxt->keepBlanks = *((int *) value);
+ } else if (!strcmp(name, "disable SAX")) {
+ ctxt->disableSAX = *((int *) value);
+ } else if (!strcmp(name, "fetch external entities")) {
+ ctxt->loadsubset = *((int *) value);
+ } else if (!strcmp(name, "substitute entities")) {
+ ctxt->replaceEntities = *((int *) value);
+ } else if (!strcmp(name, "gather line info")) {
+ ctxt->record_info = *((int *) value);
+ } else if (!strcmp(name, "user data")) {
+ ctxt->userData = *((void **) value);
+ } else if (!strcmp(name, "is html")) {
+ ctxt->html = *((int *) value);
+ } else if (!strcmp(name, "is standalone")) {
+ ctxt->standalone = *((int *) value);
+ } else if (!strcmp(name, "document")) {
+ ctxt->myDoc = *((xmlDocPtr *) value);
+ } else if (!strcmp(name, "is well formed")) {
+ ctxt->wellFormed = *((int *) value);
+ } else if (!strcmp(name, "is valid")) {
+ ctxt->valid = *((int *) value);
+ } else if (!strcmp(name, "SAX block")) {
+ ctxt->sax = *((xmlSAXHandlerPtr *) value);
+ } else if (!strcmp(name, "SAX function internalSubset")) {
+ ctxt->sax->internalSubset = *((internalSubsetSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function isStandalone")) {
+ ctxt->sax->isStandalone = *((isStandaloneSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function hasInternalSubset")) {
+ ctxt->sax->hasInternalSubset =
+ *((hasInternalSubsetSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function hasExternalSubset")) {
+ ctxt->sax->hasExternalSubset =
+ *((hasExternalSubsetSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function resolveEntity")) {
+ ctxt->sax->resolveEntity = *((resolveEntitySAXFunc *) value);
+ } else if (!strcmp(name, "SAX function getEntity")) {
+ ctxt->sax->getEntity = *((getEntitySAXFunc *) value);
+ } else if (!strcmp(name, "SAX function entityDecl")) {
+ ctxt->sax->entityDecl = *((entityDeclSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function notationDecl")) {
+ ctxt->sax->notationDecl = *((notationDeclSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function attributeDecl")) {
+ ctxt->sax->attributeDecl = *((attributeDeclSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function elementDecl")) {
+ ctxt->sax->elementDecl = *((elementDeclSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function unparsedEntityDecl")) {
+ ctxt->sax->unparsedEntityDecl =
+ *((unparsedEntityDeclSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function setDocumentLocator")) {
+ ctxt->sax->setDocumentLocator =
+ *((setDocumentLocatorSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function startDocument")) {
+ ctxt->sax->startDocument = *((startDocumentSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function endDocument")) {
+ ctxt->sax->endDocument = *((endDocumentSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function startElement")) {
+ ctxt->sax->startElement = *((startElementSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function endElement")) {
+ ctxt->sax->endElement = *((endElementSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function reference")) {
+ ctxt->sax->reference = *((referenceSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function characters")) {
+ ctxt->sax->characters = *((charactersSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function ignorableWhitespace")) {
+ ctxt->sax->ignorableWhitespace =
+ *((ignorableWhitespaceSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function processingInstruction")) {
+ ctxt->sax->processingInstruction =
+ *((processingInstructionSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function comment")) {
+ ctxt->sax->comment = *((commentSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function warning")) {
+ ctxt->sax->warning = *((warningSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function error")) {
+ ctxt->sax->error = *((errorSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function fatalError")) {
+ ctxt->sax->fatalError = *((fatalErrorSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function getParameterEntity")) {
+ ctxt->sax->getParameterEntity =
+ *((getParameterEntitySAXFunc *) value);
+ } else if (!strcmp(name, "SAX function cdataBlock")) {
+ ctxt->sax->cdataBlock = *((cdataBlockSAXFunc *) value);
+ } else if (!strcmp(name, "SAX function externalSubset")) {
+ ctxt->sax->externalSubset = *((externalSubsetSAXFunc *) value);
+ } else {
+ return (-1);
+ }
+ return (0);
+}
+
+/**
+ * xmlDecodeEntities:
+ * @ctxt: the parser context
+ * @len: the len to decode (in bytes !), -1 for no size limit
+ * @what: combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF
+ * @end: an end marker xmlChar, 0 if none
+ * @end2: an end marker xmlChar, 0 if none
+ * @end3: an end marker xmlChar, 0 if none
+ *
+ * This function is deprecated, we now always process entities content
+ * through xmlStringDecodeEntities
+ *
+ * TODO: remove it in next major release.
+ *
+ * [67] Reference ::= EntityRef | CharRef
+ *
+ * [69] PEReference ::= '%' Name ';'
+ *
+ * Returns A newly allocated string with the substitution done. The caller
+ * must deallocate it !
+ */
+xmlChar *
+xmlDecodeEntities(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ int len ATTRIBUTE_UNUSED, int what ATTRIBUTE_UNUSED,
+ xmlChar end ATTRIBUTE_UNUSED,
+ xmlChar end2 ATTRIBUTE_UNUSED,
+ xmlChar end3 ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlDecodeEntities() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlNamespaceParseNCName:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML namespace name.
+ *
+ * TODO: this seems not in use anymore, the namespace handling is done on
+ * top of the SAX interfaces, i.e. not on raw input.
+ *
+ * [NS 3] NCName ::= (Letter | '_') (NCNameChar)*
+ *
+ * [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' |
+ * CombiningChar | Extender
+ *
+ * Returns the namespace name or NULL
+ */
+
+xmlChar *
+xmlNamespaceParseNCName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNamespaceParseNCName() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlNamespaceParseQName:
+ * @ctxt: an XML parser context
+ * @prefix: a xmlChar **
+ *
+ * TODO: this seems not in use anymore, the namespace handling is done on
+ * top of the SAX interfaces, i.e. not on raw input.
+ *
+ * parse an XML qualified name
+ *
+ * [NS 5] QName ::= (Prefix ':')? LocalPart
+ *
+ * [NS 6] Prefix ::= NCName
+ *
+ * [NS 7] LocalPart ::= NCName
+ *
+ * Returns the local part, and prefix is updated
+ * to get the Prefix if any.
+ */
+
+xmlChar *
+xmlNamespaceParseQName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ xmlChar ** prefix ATTRIBUTE_UNUSED)
+{
+
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNamespaceParseQName() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlNamespaceParseNSDef:
+ * @ctxt: an XML parser context
+ *
+ * parse a namespace prefix declaration
+ *
+ * TODO: this seems not in use anymore, the namespace handling is done on
+ * top of the SAX interfaces, i.e. not on raw input.
+ *
+ * [NS 1] NSDef ::= PrefixDef Eq SystemLiteral
+ *
+ * [NS 2] PrefixDef ::= 'xmlns' (':' NCName)?
+ *
+ * Returns the namespace name
+ */
+
+xmlChar *
+xmlNamespaceParseNSDef(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNamespaceParseNSDef() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlParseQuotedString:
+ * @ctxt: an XML parser context
+ *
+ * Parse and return a string between quotes or doublequotes
+ *
+ * TODO: Deprecated, to be removed at next drop of binary compatibility
+ *
+ * Returns the string parser or NULL.
+ */
+xmlChar *
+xmlParseQuotedString(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlParseQuotedString() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlParseNamespace:
+ * @ctxt: an XML parser context
+ *
+ * xmlParseNamespace: parse specific PI '<?namespace ...' constructs.
+ *
+ * This is what the older xml-name Working Draft specified, a bunch of
+ * other stuff may still rely on it, so support is still here as
+ * if it was declared on the root of the Tree:-(
+ *
+ * TODO: remove from library
+ *
+ * To be removed at next drop of binary compatibility
+ */
+
+void
+xmlParseNamespace(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlParseNamespace() deprecated function reached\n");
+ deprecated = 1;
+ }
+}
+
+/**
+ * xmlScanName:
+ * @ctxt: an XML parser context
+ *
+ * Trickery: parse an XML name but without consuming the input flow
+ * Needed for rollback cases. Used only when parsing entities references.
+ *
+ * TODO: seems deprecated now, only used in the default part of
+ * xmlParserHandleReference
+ *
+ * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
+ * CombiningChar | Extender
+ *
+ * [5] Name ::= (Letter | '_' | ':') (NameChar)*
+ *
+ * [6] Names ::= Name (S Name)*
+ *
+ * Returns the Name parsed or NULL
+ */
+
+xmlChar *
+xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlScanName() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlParserHandleReference:
+ * @ctxt: the parser context
+ *
+ * TODO: Remove, now deprecated ... the test is done directly in the
+ * content parsing
+ * routines.
+ *
+ * [67] Reference ::= EntityRef | CharRef
+ *
+ * [68] EntityRef ::= '&' Name ';'
+ *
+ * [ WFC: Entity Declared ]
+ * the Name given in the entity reference must match that in an entity
+ * declaration, except that well-formed documents need not declare any
+ * of the following entities: amp, lt, gt, apos, quot.
+ *
+ * [ WFC: Parsed Entity ]
+ * An entity reference must not contain the name of an unparsed entity
+ *
+ * [66] CharRef ::= '&#' [0-9]+ ';' |
+ * '&#x' [0-9a-fA-F]+ ';'
+ *
+ * A PEReference may have been detected in the current input stream
+ * the handling is done accordingly to
+ * http://www.w3.org/TR/REC-xml#entproc
+ */
+void
+xmlParserHandleReference(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlParserHandleReference() deprecated function reached\n");
+ deprecated = 1;
+ }
+
+ return;
+}
+
+/**
+ * xmlHandleEntity:
+ * @ctxt: an XML parser context
+ * @entity: an XML entity pointer.
+ *
+ * Default handling of defined entities, when should we define a new input
+ * stream ? When do we just handle that as a set of chars ?
+ *
+ * OBSOLETE: to be removed at some point.
+ */
+
+void
+xmlHandleEntity(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ xmlEntityPtr entity ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlHandleEntity() deprecated function reached\n");
+ deprecated = 1;
+ }
+}
+
+/**
+ * xmlNewGlobalNs:
+ * @doc: the document carrying the namespace
+ * @href: the URI associated
+ * @prefix: the prefix for the namespace
+ *
+ * Creation of a Namespace, the old way using PI and without scoping
+ * DEPRECATED !!!
+ * It now create a namespace on the root element of the document if found.
+ * Returns NULL this functionality had been removed
+ */
+xmlNsPtr
+xmlNewGlobalNs(xmlDocPtr doc ATTRIBUTE_UNUSED,
+ const xmlChar * href ATTRIBUTE_UNUSED,
+ const xmlChar * prefix ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewGlobalNs() deprecated function reached\n");
+ deprecated = 1;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlUpgradeOldNs:
+ * @doc: a document pointer
+ *
+ * Upgrade old style Namespaces (PI) and move them to the root of the document.
+ * DEPRECATED
+ */
+void
+xmlUpgradeOldNs(xmlDocPtr doc ATTRIBUTE_UNUSED)
+{
+ static int deprecated = 0;
+
+ if (!deprecated) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlUpgradeOldNs() deprecated function reached\n");
+ deprecated = 1;
+ }
+}
+
+/**
+ * xmlEncodeEntities:
+ * @doc: the document containing the string
+ * @input: A string to convert to XML.
+ *
+ * TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary
+ * compatibility
+ *
+ * People must migrate their code to xmlEncodeEntitiesReentrant !
+ * This routine will issue a warning when encountered.
+ *
+ * Returns NULL
+ */
+const xmlChar *
+xmlEncodeEntities(xmlDocPtr doc ATTRIBUTE_UNUSED,
+ const xmlChar * input ATTRIBUTE_UNUSED)
+{
+ static int warning = 1;
+
+ if (warning) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Deprecated API xmlEncodeEntities() used\n");
+ xmlGenericError(xmlGenericErrorContext,
+ " change code to use xmlEncodeEntitiesReentrant()\n");
+ warning = 0;
+ }
+ return (NULL);
+}
+
+/************************************************************************
+ * *
+ * Old set of SAXv1 functions *
+ * *
+ ************************************************************************/
+static int deprecated_v1_msg = 0;
+
+#define DEPRECATED(n) \
+ if (deprecated_v1_msg == 0) \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Use of deprecated SAXv1 function %s\n", n); \
+ deprecated_v1_msg++;
+
+/**
+ * getPublicId:
+ * @ctx: the user data (XML parser context)
+ *
+ * Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"
+ * DEPRECATED: use xmlSAX2GetPublicId()
+ *
+ * Returns a xmlChar *
+ */
+const xmlChar *
+getPublicId(void *ctx)
+{
+ DEPRECATED("getPublicId")
+ return (xmlSAX2GetPublicId(ctx));
+}
+
+/**
+ * getSystemId:
+ * @ctx: the user data (XML parser context)
+ *
+ * Provides the system ID, basically URL or filename e.g.
+ * http://www.sgmlsource.com/dtds/memo.dtd
+ * DEPRECATED: use xmlSAX2GetSystemId()
+ *
+ * Returns a xmlChar *
+ */
+const xmlChar *
+getSystemId(void *ctx)
+{
+ DEPRECATED("getSystemId")
+ return (xmlSAX2GetSystemId(ctx));
+}
+
+/**
+ * getLineNumber:
+ * @ctx: the user data (XML parser context)
+ *
+ * Provide the line number of the current parsing point.
+ * DEPRECATED: use xmlSAX2GetLineNumber()
+ *
+ * Returns an int
+ */
+int
+getLineNumber(void *ctx)
+{
+ DEPRECATED("getLineNumber")
+ return (xmlSAX2GetLineNumber(ctx));
+}
+
+/**
+ * getColumnNumber:
+ * @ctx: the user data (XML parser context)
+ *
+ * Provide the column number of the current parsing point.
+ * DEPRECATED: use xmlSAX2GetColumnNumber()
+ *
+ * Returns an int
+ */
+int
+getColumnNumber(void *ctx)
+{
+ DEPRECATED("getColumnNumber")
+ return (xmlSAX2GetColumnNumber(ctx));
+}
+
+/**
+ * isStandalone:
+ * @ctx: the user data (XML parser context)
+ *
+ * Is this document tagged standalone ?
+ * DEPRECATED: use xmlSAX2IsStandalone()
+ *
+ * Returns 1 if true
+ */
+int
+isStandalone(void *ctx)
+{
+ DEPRECATED("isStandalone")
+ return (xmlSAX2IsStandalone(ctx));
+}
+
+/**
+ * hasInternalSubset:
+ * @ctx: the user data (XML parser context)
+ *
+ * Does this document has an internal subset
+ * DEPRECATED: use xmlSAX2HasInternalSubset()
+ *
+ * Returns 1 if true
+ */
+int
+hasInternalSubset(void *ctx)
+{
+ DEPRECATED("hasInternalSubset")
+ return (xmlSAX2HasInternalSubset(ctx));
+}
+
+/**
+ * hasExternalSubset:
+ * @ctx: the user data (XML parser context)
+ *
+ * Does this document has an external subset
+ * DEPRECATED: use xmlSAX2HasExternalSubset()
+ *
+ * Returns 1 if true
+ */
+int
+hasExternalSubset(void *ctx)
+{
+ DEPRECATED("hasExternalSubset")
+ return (xmlSAX2HasExternalSubset(ctx));
+}
+
+/**
+ * internalSubset:
+ * @ctx: the user data (XML parser context)
+ * @name: the root element name
+ * @ExternalID: the external ID
+ * @SystemID: the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on internal subset declaration.
+ * DEPRECATED: use xmlSAX2InternalSubset()
+ */
+void
+internalSubset(void *ctx, const xmlChar * name,
+ const xmlChar * ExternalID, const xmlChar * SystemID)
+{
+ DEPRECATED("internalSubset")
+ xmlSAX2InternalSubset(ctx, name, ExternalID, SystemID);
+}
+
+/**
+ * externalSubset:
+ * @ctx: the user data (XML parser context)
+ * @name: the root element name
+ * @ExternalID: the external ID
+ * @SystemID: the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on external subset declaration.
+ * DEPRECATED: use xmlSAX2ExternalSubset()
+ */
+void
+externalSubset(void *ctx, const xmlChar * name,
+ const xmlChar * ExternalID, const xmlChar * SystemID)
+{
+ DEPRECATED("externalSubset")
+ xmlSAX2ExternalSubset(ctx, name, ExternalID, SystemID);
+}
+
+/**
+ * resolveEntity:
+ * @ctx: the user data (XML parser context)
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * The entity loader, to control the loading of external entities,
+ * the application can either:
+ * - override this resolveEntity() callback in the SAX block
+ * - or better use the xmlSetExternalEntityLoader() function to
+ * set up it's own entity resolution routine
+ * DEPRECATED: use xmlSAX2ResolveEntity()
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+xmlParserInputPtr
+resolveEntity(void *ctx, const xmlChar * publicId,
+ const xmlChar * systemId)
+{
+ DEPRECATED("resolveEntity")
+ return (xmlSAX2ResolveEntity(ctx, publicId, systemId));
+}
+
+/**
+ * getEntity:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get an entity by name
+ * DEPRECATED: use xmlSAX2GetEntity()
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+xmlEntityPtr
+getEntity(void *ctx, const xmlChar * name)
+{
+ DEPRECATED("getEntity")
+ return (xmlSAX2GetEntity(ctx, name));
+}
+
+/**
+ * getParameterEntity:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get a parameter entity by name
+ * DEPRECATED: use xmlSAX2GetParameterEntity()
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+xmlEntityPtr
+getParameterEntity(void *ctx, const xmlChar * name)
+{
+ DEPRECATED("getParameterEntity")
+ return (xmlSAX2GetParameterEntity(ctx, name));
+}
+
+
+/**
+ * entityDecl:
+ * @ctx: the user data (XML parser context)
+ * @name: the entity name
+ * @type: the entity type
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @content: the entity value (without processing).
+ *
+ * An entity definition has been parsed
+ * DEPRECATED: use xmlSAX2EntityDecl()
+ */
+void
+entityDecl(void *ctx, const xmlChar * name, int type,
+ const xmlChar * publicId, const xmlChar * systemId,
+ xmlChar * content)
+{
+ DEPRECATED("entityDecl")
+ xmlSAX2EntityDecl(ctx, name, type, publicId, systemId, content);
+}
+
+/**
+ * attributeDecl:
+ * @ctx: the user data (XML parser context)
+ * @elem: the name of the element
+ * @fullname: the attribute name
+ * @type: the attribute type
+ * @def: the type of default value
+ * @defaultValue: the attribute default value
+ * @tree: the tree of enumerated value set
+ *
+ * An attribute definition has been parsed
+ * DEPRECATED: use xmlSAX2AttributeDecl()
+ */
+void
+attributeDecl(void *ctx, const xmlChar * elem, const xmlChar * fullname,
+ int type, int def, const xmlChar * defaultValue,
+ xmlEnumerationPtr tree)
+{
+ DEPRECATED("attributeDecl")
+ xmlSAX2AttributeDecl(ctx, elem, fullname, type, def, defaultValue,
+ tree);
+}
+
+/**
+ * elementDecl:
+ * @ctx: the user data (XML parser context)
+ * @name: the element name
+ * @type: the element type
+ * @content: the element value tree
+ *
+ * An element definition has been parsed
+ * DEPRECATED: use xmlSAX2ElementDecl()
+ */
+void
+elementDecl(void *ctx, const xmlChar * name, int type,
+ xmlElementContentPtr content)
+{
+ DEPRECATED("elementDecl")
+ xmlSAX2ElementDecl(ctx, name, type, content);
+}
+
+/**
+ * notationDecl:
+ * @ctx: the user data (XML parser context)
+ * @name: The name of the notation
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * What to do when a notation declaration has been parsed.
+ * DEPRECATED: use xmlSAX2NotationDecl()
+ */
+void
+notationDecl(void *ctx, const xmlChar * name,
+ const xmlChar * publicId, const xmlChar * systemId)
+{
+ DEPRECATED("notationDecl")
+ xmlSAX2NotationDecl(ctx, name, publicId, systemId);
+}
+
+/**
+ * unparsedEntityDecl:
+ * @ctx: the user data (XML parser context)
+ * @name: The name of the entity
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @notationName: the name of the notation
+ *
+ * What to do when an unparsed entity declaration is parsed
+ * DEPRECATED: use xmlSAX2UnparsedEntityDecl()
+ */
+void
+unparsedEntityDecl(void *ctx, const xmlChar * name,
+ const xmlChar * publicId, const xmlChar * systemId,
+ const xmlChar * notationName)
+{
+ DEPRECATED("unparsedEntityDecl")
+ xmlSAX2UnparsedEntityDecl(ctx, name, publicId, systemId,
+ notationName);
+}
+
+/**
+ * setDocumentLocator:
+ * @ctx: the user data (XML parser context)
+ * @loc: A SAX Locator
+ *
+ * Receive the document locator at startup, actually xmlDefaultSAXLocator
+ * Everything is available on the context, so this is useless in our case.
+ * DEPRECATED
+ */
+void
+setDocumentLocator(void *ctx ATTRIBUTE_UNUSED,
+ xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
+{
+ DEPRECATED("setDocumentLocator")
+}
+
+/**
+ * startDocument:
+ * @ctx: the user data (XML parser context)
+ *
+ * called when the document start being processed.
+ * DEPRECATED: use xmlSAX2StartDocument()
+ */
+void
+startDocument(void *ctx)
+{
+ /* don't be too painful for glade users */
+ /* DEPRECATED("startDocument") */
+ xmlSAX2StartDocument(ctx);
+}
+
+/**
+ * endDocument:
+ * @ctx: the user data (XML parser context)
+ *
+ * called when the document end has been detected.
+ * DEPRECATED: use xmlSAX2EndDocument()
+ */
+void
+endDocument(void *ctx)
+{
+ DEPRECATED("endDocument")
+ xmlSAX2EndDocument(ctx);
+}
+
+/**
+ * attribute:
+ * @ctx: the user data (XML parser context)
+ * @fullname: The attribute name, including namespace prefix
+ * @value: The attribute value
+ *
+ * Handle an attribute that has been read by the parser.
+ * The default handling is to convert the attribute into an
+ * DOM subtree and past it in a new xmlAttr element added to
+ * the element.
+ * DEPRECATED: use xmlSAX2Attribute()
+ */
+void
+attribute(void *ctx ATTRIBUTE_UNUSED,
+ const xmlChar * fullname ATTRIBUTE_UNUSED,
+ const xmlChar * value ATTRIBUTE_UNUSED)
+{
+ DEPRECATED("attribute")
+}
+
+/**
+ * startElement:
+ * @ctx: the user data (XML parser context)
+ * @fullname: The element name, including namespace prefix
+ * @atts: An array of name/value attributes pairs, NULL terminated
+ *
+ * called when an opening tag has been processed.
+ * DEPRECATED: use xmlSAX2StartElement()
+ */
+void
+startElement(void *ctx, const xmlChar * fullname, const xmlChar ** atts)
+{
+ xmlSAX2StartElement(ctx, fullname, atts);
+}
+
+/**
+ * endElement:
+ * @ctx: the user data (XML parser context)
+ * @name: The element name
+ *
+ * called when the end of an element has been detected.
+ * DEPRECATED: use xmlSAX2EndElement()
+ */
+void
+endElement(void *ctx, const xmlChar * name ATTRIBUTE_UNUSED)
+{
+ DEPRECATED("endElement")
+ xmlSAX2EndElement(ctx, name);
+}
+
+/**
+ * reference:
+ * @ctx: the user data (XML parser context)
+ * @name: The entity name
+ *
+ * called when an entity reference is detected.
+ * DEPRECATED: use xmlSAX2Reference()
+ */
+void
+reference(void *ctx, const xmlChar * name)
+{
+ DEPRECATED("reference")
+ xmlSAX2Reference(ctx, name);
+}
+
+/**
+ * characters:
+ * @ctx: the user data (XML parser context)
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * receiving some chars from the parser.
+ * DEPRECATED: use xmlSAX2Characters()
+ */
+void
+characters(void *ctx, const xmlChar * ch, int len)
+{
+ DEPRECATED("characters")
+ xmlSAX2Characters(ctx, ch, len);
+}
+
+/**
+ * ignorableWhitespace:
+ * @ctx: the user data (XML parser context)
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * receiving some ignorable whitespaces from the parser.
+ * UNUSED: by default the DOM building will use characters
+ * DEPRECATED: use xmlSAX2IgnorableWhitespace()
+ */
+void
+ignorableWhitespace(void *ctx ATTRIBUTE_UNUSED,
+ const xmlChar * ch ATTRIBUTE_UNUSED,
+ int len ATTRIBUTE_UNUSED)
+{
+ DEPRECATED("ignorableWhitespace")
+}
+
+/**
+ * processingInstruction:
+ * @ctx: the user data (XML parser context)
+ * @target: the target name
+ * @data: the PI data's
+ *
+ * A processing instruction has been parsed.
+ * DEPRECATED: use xmlSAX2ProcessingInstruction()
+ */
+void
+processingInstruction(void *ctx, const xmlChar * target,
+ const xmlChar * data)
+{
+ DEPRECATED("processingInstruction")
+ xmlSAX2ProcessingInstruction(ctx, target, data);
+}
+
+/**
+ * globalNamespace:
+ * @ctx: the user data (XML parser context)
+ * @href: the namespace associated URN
+ * @prefix: the namespace prefix
+ *
+ * An old global namespace has been parsed.
+ * DEPRECATED
+ */
+void
+globalNamespace(void *ctx ATTRIBUTE_UNUSED,
+ const xmlChar * href ATTRIBUTE_UNUSED,
+ const xmlChar * prefix ATTRIBUTE_UNUSED)
+{
+ DEPRECATED("globalNamespace")
+}
+
+/**
+ * setNamespace:
+ * @ctx: the user data (XML parser context)
+ * @name: the namespace prefix
+ *
+ * Set the current element namespace.
+ * DEPRECATED
+ */
+
+void
+setNamespace(void *ctx ATTRIBUTE_UNUSED,
+ const xmlChar * name ATTRIBUTE_UNUSED)
+{
+ DEPRECATED("setNamespace")
+}
+
+/**
+ * getNamespace:
+ * @ctx: the user data (XML parser context)
+ *
+ * Get the current element namespace.
+ * DEPRECATED
+ *
+ * Returns the xmlNsPtr or NULL if none
+ */
+
+xmlNsPtr
+getNamespace(void *ctx ATTRIBUTE_UNUSED)
+{
+ DEPRECATED("getNamespace")
+ return (NULL);
+}
+
+/**
+ * checkNamespace:
+ * @ctx: the user data (XML parser context)
+ * @namespace: the namespace to check against
+ *
+ * Check that the current element namespace is the same as the
+ * one read upon parsing.
+ * DEPRECATED
+ *
+ * Returns 1 if true 0 otherwise
+ */
+
+int
+checkNamespace(void *ctx ATTRIBUTE_UNUSED,
+ xmlChar * namespace ATTRIBUTE_UNUSED)
+{
+ DEPRECATED("checkNamespace")
+ return (0);
+}
+
+/**
+ * namespaceDecl:
+ * @ctx: the user data (XML parser context)
+ * @href: the namespace associated URN
+ * @prefix: the namespace prefix
+ *
+ * A namespace has been parsed.
+ * DEPRECATED
+ */
+void
+namespaceDecl(void *ctx ATTRIBUTE_UNUSED,
+ const xmlChar * href ATTRIBUTE_UNUSED,
+ const xmlChar * prefix ATTRIBUTE_UNUSED)
+{
+ DEPRECATED("namespaceDecl")
+}
+
+/**
+ * comment:
+ * @ctx: the user data (XML parser context)
+ * @value: the comment content
+ *
+ * A comment has been parsed.
+ * DEPRECATED: use xmlSAX2Comment()
+ */
+void
+comment(void *ctx, const xmlChar * value)
+{
+ DEPRECATED("comment")
+ xmlSAX2Comment(ctx, value);
+}
+
+/**
+ * cdataBlock:
+ * @ctx: the user data (XML parser context)
+ * @value: The pcdata content
+ * @len: the block length
+ *
+ * called when a pcdata block has been parsed
+ * DEPRECATED: use xmlSAX2CDataBlock()
+ */
+void
+cdataBlock(void *ctx, const xmlChar * value, int len)
+{
+ DEPRECATED("cdataBlock")
+ xmlSAX2CDataBlock(ctx, value, len);
+}
+#endif /* LIBXML_LEGACY_ENABLED */
+
diff --git a/libxml-2.0-uninstalled.pc.in b/libxml-2.0-uninstalled.pc.in
new file mode 100644
index 0000000..0a4c833
--- /dev/null
+++ b/libxml-2.0-uninstalled.pc.in
@@ -0,0 +1,12 @@
+prefix=
+exec_prefix=
+libdir=${pcfiledir}
+includedir=${pcfiledir}/include
+
+
+Name: libXML
+Version: @VERSION@
+Description: libXML library version2.
+Requires:
+Libs: -L${libdir} -lxml2 @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @LIBS@
+Cflags: -I${includedir} @XML_INCLUDEDIR@ @XML_CFLAGS@
diff --git a/libxml-2.0.pc.in b/libxml-2.0.pc.in
new file mode 100644
index 0000000..5b54895
--- /dev/null
+++ b/libxml-2.0.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+
+Name: libXML
+Version: @VERSION@
+Description: libXML library version2.
+Requires:
+Libs: -L${libdir} -lxml2 @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @LIBS@
+Cflags: -I${includedir}/libxml2 @XML_INCLUDEDIR@ @XML_CFLAGS@
diff --git a/libxml.3 b/libxml.3
new file mode 100644
index 0000000..d46756f
--- /dev/null
+++ b/libxml.3
@@ -0,0 +1,71 @@
+.TH libxml 3 "12 April 2000"
+.SH NAME
+libxml \- library used to parse XML files
+.SH DESCRIPTION
+The
+.I libxml
+library is used to parse XML files.
+Its internal document repesentation is as close as possible to the
+.I DOM
+(Document Object Model) interface,
+an API for accessing XML or HTML structured documents.
+.LP
+The
+.I libxml
+library also has a
+.IR SAX -like
+interface,
+which is designed to be compatible with
+.IR expat (1).
+NOTE:
+.IR SAX ,
+the Simple API for XML,
+is a standard interface for event-based XML parsing,
+developed collaboratively by the members of the XML-DEV mailing list,
+currently hosted by OASIS.
+The
+.I expat
+library is a XML 1.0 parser written in C,
+which aims to be fully conforming.
+It is currently not a validating XML processor.
+.LP
+The
+.I libxml
+library now includes a nearly complete
+.I XPath
+implementation.
+The
+.I XPath
+(XML Path Language) is a language for addressing parts of an
+XML document,
+designed to be used by both
+.I XSLT
+and
+.IR XPointer .
+.LP
+The
+.I libxml
+library exports Push and Pull type parser interfaces for both XML and
+.IR html .
+.SH FILES
+.TP 2.2i
+.B /depot/lib/libxml_2.0.0/libxml.a
+static library
+.TP
+.B /depot/lib/libxml_2.0.0/libxml.so
+shareable library
+.TP
+.B /depot/package/libxml_2.0.0/bin/xmllint
+binary application for parsing XML files
+.SH AUTHORS
+Daniel Veillard (daniel@veillard.com).
+Red Hat Inc.
+Manual page by Ziying Sherwin (sherwin@nlm.nih.gov),
+Lister Hill National Center for Biomedical Communications,
+U.S. National Library of Medicine.
+.SH SEE ALSO
+.IR xmllint (1),
+.IR libxslt (3),
+.IR libexslt (3),
+.IR xsltproc (1)
+.\" end of manual page
diff --git a/libxml.h b/libxml.h
new file mode 100644
index 0000000..69e02a2
--- /dev/null
+++ b/libxml.h
@@ -0,0 +1,52 @@
+/*
+ * libxml.h: internal header only used during the compilation of libxml
+ *
+ * See COPYRIGHT for the status of this software
+ *
+ * Author: breese@users.sourceforge.net
+ */
+
+#ifndef __XML_LIBXML_H__
+#define __XML_LIBXML_H__
+
+#ifndef NO_LARGEFILE_SOURCE
+#ifndef _LARGEFILE_SOURCE
+#define _LARGEFILE_SOURCE
+#endif
+#ifndef _FILE_OFFSET_BITS
+#define _FILE_OFFSET_BITS 64
+#endif
+#endif
+
+#if defined(macintosh)
+#include "config-mac.h"
+#else
+#include "config.h"
+#include <libxml/xmlversion.h>
+#endif
+
+#ifndef WITH_TRIO
+#include <stdio.h>
+#else
+/**
+ * TRIO_REPLACE_STDIO:
+ *
+ * This macro is defined if teh trio string formatting functions are to
+ * be used instead of the default stdio ones.
+ */
+#define TRIO_REPLACE_STDIO
+#include "trio.h"
+#endif
+
+/*
+ * Internal variable indicating if a callback has been registered for
+ * node creation/destruction. It avoids spending a lot of time in locking
+ * function while checking if the callback exists.
+ */
+extern int __xmlRegisterCallbacks;
+/*
+ * internal error reporting routines, shared but not partof the API.
+ */
+void __xmlIOErr(int domain, int code, const char *extra);
+void __xmlLoaderErr(void *ctx, const char *msg, const char *filename);
+#endif /* ! __XML_LIBXML_H__ */
diff --git a/libxml.m4 b/libxml.m4
new file mode 100644
index 0000000..85814bf
--- /dev/null
+++ b/libxml.m4
@@ -0,0 +1,381 @@
+# Configure paths for LIBXML2
+# Toshio Kuratomi 2001-04-21
+# Adapted from:
+# Configure paths for GLIB
+# Owen Taylor 97-11-3
+
+dnl AM_PATH_XML([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for XML, and define XML_CFLAGS and XML_LIBS
+dnl
+AC_DEFUN([AM_PATH_XML],[
+AC_ARG_WITH(xml-prefix,
+ [ --with-xml-prefix=PFX Prefix where libxml is installed (optional)],
+ xml_config_prefix="$withval", xml_config_prefix="")
+AC_ARG_WITH(xml-exec-prefix,
+ [ --with-xml-exec-prefix=PFX Exec prefix where libxml is installed (optional)],
+ xml_config_exec_prefix="$withval", xml_config_exec_prefix="")
+AC_ARG_ENABLE(xmltest,
+ [ --disable-xmltest Do not try to compile and run a test LIBXML program],,
+ enable_xmltest=yes)
+
+ if test x$xml_config_exec_prefix != x ; then
+ xml_config_args="$xml_config_args --exec-prefix=$xml_config_exec_prefix"
+ if test x${XML_CONFIG+set} != xset ; then
+ XML_CONFIG=$xml_config_exec_prefix/bin/xml-config
+ fi
+ fi
+ if test x$xml_config_prefix != x ; then
+ xml_config_args="$xml_config_args --prefix=$xml_config_prefix"
+ if test x${XML_CONFIG+set} != xset ; then
+ XML_CONFIG=$xml_config_prefix/bin/xml-config
+ fi
+ fi
+
+ AC_PATH_PROG(XML_CONFIG, xml-config, no)
+ min_xml_version=ifelse([$1], ,1.0.0,[$1])
+ AC_MSG_CHECKING(for libxml - version >= $min_xml_version)
+ no_xml=""
+ if test "$XML_CONFIG" = "no" ; then
+ no_xml=yes
+ else
+ XML_CFLAGS=`$XML_CONFIG $xml_config_args --cflags`
+ XML_LIBS=`$XML_CONFIG $xml_config_args --libs`
+ xml_config_major_version=`$XML_CONFIG $xml_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ xml_config_minor_version=`$XML_CONFIG $xml_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ xml_config_micro_version=`$XML_CONFIG $xml_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test "x$enable_xmltest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $XML_CFLAGS"
+ LIBS="$XML_LIBS $LIBS"
+dnl
+dnl Now check if the installed libxml is sufficiently new.
+dnl (Also sanity checks the results of xml-config to some extent)
+dnl
+ rm -f conf.xmltest
+ AC_TRY_RUN([
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <libxml/tree.h>
+
+int
+main()
+{
+ int xml_major_version, xml_minor_version, xml_micro_version;
+ int major, minor, micro;
+ char *tmp_version;
+ int tmp_int_version;
+
+ system("touch conf.xmltest");
+
+ /* Capture xml-config output via autoconf/configure variables */
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = (char *)strdup("$min_xml_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string from xml-config\n", "$min_xml_version");
+ exit(1);
+ }
+ free(tmp_version);
+
+ /* Capture the version information from the header files */
+ tmp_int_version = LIBXML_VERSION;
+ xml_major_version=tmp_int_version / 10000;
+ xml_minor_version=(tmp_int_version - xml_major_version * 10000) / 100;
+ xml_micro_version=(tmp_int_version - xml_minor_version * 100 - xml_major_version * 10000);
+
+ /* Compare xml-config output to the libxml headers */
+ if ((xml_major_version != $xml_config_major_version) ||
+ (xml_minor_version != $xml_config_minor_version)
+#if 0
+ ||
+/* The last released version of libxml-1.x has an incorrect micro version in
+ * the header file so neither the includes nor the library will match the
+ * micro_version to the output of xml-config
+ */
+ (xml_micro_version != $xml_config_micro_version)
+#endif
+ )
+
+ {
+ printf("*** libxml header files (version %d.%d.%d) do not match\n",
+ xml_major_version, xml_minor_version, xml_micro_version);
+ printf("*** xml-config (version %d.%d.%d)\n",
+ $xml_config_major_version, $xml_config_minor_version, $xml_config_micro_version);
+ return 1;
+ }
+/* Compare the headers to the library to make sure we match */
+ /* Less than ideal -- doesn't provide us with return value feedback,
+ * only exits if there's a serious mismatch between header and library.
+ */
+ LIBXML_TEST_VERSION;
+
+ /* Test that the library is greater than our minimum version */
+ if (($xml_config_major_version > major) ||
+ (($xml_config_major_version == major) && ($xml_config_minor_version > minor)) ||
+ (($xml_config_major_version == major) && ($xml_config_minor_version == minor) &&
+ ($xml_config_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** An old version of libxml (%d.%d.%d) was found.\n",
+ xml_major_version, xml_minor_version, xml_micro_version);
+ printf("*** You need a version of libxml newer than %d.%d.%d. The latest version of\n",
+ major, minor, micro);
+ printf("*** libxml is always available from ftp://ftp.xmlsoft.org.\n");
+ printf("***\n");
+ printf("*** If you have already installed a sufficiently new version, this error\n");
+ printf("*** probably means that the wrong copy of the xml-config shell script is\n");
+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
+ printf("*** of LIBXML, but you can also set the XML_CONFIG environment to point to the\n");
+ printf("*** correct copy of xml-config. (In this case, you will have to\n");
+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+ printf("*** so that the correct libraries are found at run-time))\n");
+ }
+ return 1;
+}
+],, no_xml=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+
+ if test "x$no_xml" = x ; then
+ AC_MSG_RESULT(yes (version $xml_config_major_version.$xml_config_minor_version.$xml_config_micro_version))
+ ifelse([$2], , :, [$2])
+ else
+ AC_MSG_RESULT(no)
+ if test "$XML_CONFIG" = "no" ; then
+ echo "*** The xml-config script installed by LIBXML could not be found"
+ echo "*** If libxml was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the XML_CONFIG environment variable to the"
+ echo "*** full path to xml-config."
+ else
+ if test -f conf.xmltest ; then
+ :
+ else
+ echo "*** Could not run libxml test program, checking why..."
+ CFLAGS="$CFLAGS $XML_CFLAGS"
+ LIBS="$LIBS $XML_LIBS"
+ AC_TRY_LINK([
+#include <libxml/tree.h>
+#include <stdio.h>
+], [ LIBXML_TEST_VERSION; return 0;],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding LIBXML or finding the wrong"
+ echo "*** version of LIBXML. If it is not finding LIBXML, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means LIBXML was incorrectly installed"
+ echo "*** or that you have moved LIBXML since it was installed. In the latter case, you"
+ echo "*** may want to edit the xml-config script: $XML_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+
+ XML_CFLAGS=""
+ XML_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(XML_CFLAGS)
+ AC_SUBST(XML_LIBS)
+ rm -f conf.xmltest
+])
+
+# Configure paths for LIBXML2
+# Toshio Kuratomi 2001-04-21
+# Adapted from:
+# Configure paths for GLIB
+# Owen Taylor 97-11-3
+
+dnl AM_PATH_XML2([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for XML, and define XML_CFLAGS and XML_LIBS
+dnl
+AC_DEFUN([AM_PATH_XML2],[
+AC_ARG_WITH(xml-prefix,
+ [ --with-xml-prefix=PFX Prefix where libxml is installed (optional)],
+ xml_config_prefix="$withval", xml_config_prefix="")
+AC_ARG_WITH(xml-exec-prefix,
+ [ --with-xml-exec-prefix=PFX Exec prefix where libxml is installed (optional)],
+ xml_config_exec_prefix="$withval", xml_config_exec_prefix="")
+AC_ARG_ENABLE(xmltest,
+ [ --disable-xmltest Do not try to compile and run a test LIBXML program],,
+ enable_xmltest=yes)
+
+ if test x$xml_config_exec_prefix != x ; then
+ xml_config_args="$xml_config_args"
+ if test x${XML2_CONFIG+set} != xset ; then
+ XML2_CONFIG=$xml_config_exec_prefix/bin/xml2-config
+ fi
+ fi
+ if test x$xml_config_prefix != x ; then
+ xml_config_args="$xml_config_args --prefix=$xml_config_prefix"
+ if test x${XML2_CONFIG+set} != xset ; then
+ XML2_CONFIG=$xml_config_prefix/bin/xml2-config
+ fi
+ fi
+
+ AC_PATH_PROG(XML2_CONFIG, xml2-config, no)
+ min_xml_version=ifelse([$1], ,2.0.0,[$1])
+ AC_MSG_CHECKING(for libxml - version >= $min_xml_version)
+ no_xml=""
+ if test "$XML2_CONFIG" = "no" ; then
+ no_xml=yes
+ else
+ XML_CFLAGS=`$XML2_CONFIG $xml_config_args --cflags`
+ XML_LIBS=`$XML2_CONFIG $xml_config_args --libs`
+ xml_config_major_version=`$XML2_CONFIG $xml_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ xml_config_minor_version=`$XML2_CONFIG $xml_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ xml_config_micro_version=`$XML2_CONFIG $xml_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test "x$enable_xmltest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $XML_CFLAGS"
+ LIBS="$XML_LIBS $LIBS"
+dnl
+dnl Now check if the installed libxml is sufficiently new.
+dnl (Also sanity checks the results of xml2-config to some extent)
+dnl
+ rm -f conf.xmltest
+ AC_TRY_RUN([
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <libxml/xmlversion.h>
+
+int
+main()
+{
+ int xml_major_version, xml_minor_version, xml_micro_version;
+ int major, minor, micro;
+ char *tmp_version;
+
+ system("touch conf.xmltest");
+
+ /* Capture xml2-config output via autoconf/configure variables */
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = (char *)strdup("$min_xml_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string from xml2-config\n", "$min_xml_version");
+ exit(1);
+ }
+ free(tmp_version);
+
+ /* Capture the version information from the header files */
+ tmp_version = (char *)strdup(LIBXML_DOTTED_VERSION);
+ if (sscanf(tmp_version, "%d.%d.%d", &xml_major_version, &xml_minor_version, &xml_micro_version) != 3) {
+ printf("%s, bad version string from libxml includes\n", "LIBXML_DOTTED_VERSION");
+ exit(1);
+ }
+ free(tmp_version);
+
+ /* Compare xml2-config output to the libxml headers */
+ if ((xml_major_version != $xml_config_major_version) ||
+ (xml_minor_version != $xml_config_minor_version) ||
+ (xml_micro_version != $xml_config_micro_version))
+ {
+ printf("*** libxml header files (version %d.%d.%d) do not match\n",
+ xml_major_version, xml_minor_version, xml_micro_version);
+ printf("*** xml2-config (version %d.%d.%d)\n",
+ $xml_config_major_version, $xml_config_minor_version, $xml_config_micro_version);
+ return 1;
+ }
+/* Compare the headers to the library to make sure we match */
+ /* Less than ideal -- doesn't provide us with return value feedback,
+ * only exits if there's a serious mismatch between header and library.
+ */
+ LIBXML_TEST_VERSION;
+
+ /* Test that the library is greater than our minimum version */
+ if ((xml_major_version > major) ||
+ ((xml_major_version == major) && (xml_minor_version > minor)) ||
+ ((xml_major_version == major) && (xml_minor_version == minor) &&
+ (xml_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** An old version of libxml (%d.%d.%d) was found.\n",
+ xml_major_version, xml_minor_version, xml_micro_version);
+ printf("*** You need a version of libxml newer than %d.%d.%d. The latest version of\n",
+ major, minor, micro);
+ printf("*** libxml is always available from ftp://ftp.xmlsoft.org.\n");
+ printf("***\n");
+ printf("*** If you have already installed a sufficiently new version, this error\n");
+ printf("*** probably means that the wrong copy of the xml2-config shell script is\n");
+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
+ printf("*** of LIBXML, but you can also set the XML2_CONFIG environment to point to the\n");
+ printf("*** correct copy of xml2-config. (In this case, you will have to\n");
+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+ printf("*** so that the correct libraries are found at run-time))\n");
+ }
+ return 1;
+}
+],, no_xml=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+
+ if test "x$no_xml" = x ; then
+ AC_MSG_RESULT(yes (version $xml_config_major_version.$xml_config_minor_version.$xml_config_micro_version))
+ ifelse([$2], , :, [$2])
+ else
+ AC_MSG_RESULT(no)
+ if test "$XML2_CONFIG" = "no" ; then
+ echo "*** The xml2-config script installed by LIBXML could not be found"
+ echo "*** If libxml was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the XML2_CONFIG environment variable to the"
+ echo "*** full path to xml2-config."
+ else
+ if test -f conf.xmltest ; then
+ :
+ else
+ echo "*** Could not run libxml test program, checking why..."
+ CFLAGS="$CFLAGS $XML_CFLAGS"
+ LIBS="$LIBS $XML_LIBS"
+ AC_TRY_LINK([
+#include <libxml/xmlversion.h>
+#include <stdio.h>
+], [ LIBXML_TEST_VERSION; return 0;],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding LIBXML or finding the wrong"
+ echo "*** version of LIBXML. If it is not finding LIBXML, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means LIBXML was incorrectly installed"
+ echo "*** or that you have moved LIBXML since it was installed. In the latter case, you"
+ echo "*** may want to edit the xml2-config script: $XML2_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+
+ XML_CFLAGS=""
+ XML_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(XML_CFLAGS)
+ AC_SUBST(XML_LIBS)
+ rm -f conf.xmltest
+])
diff --git a/libxml.spec.in b/libxml.spec.in
new file mode 100644
index 0000000..24a70d0
--- /dev/null
+++ b/libxml.spec.in
@@ -0,0 +1,175 @@
+Summary: Library providing XML and HTML support
+Name: libxml2
+Version: @VERSION@
+Release: 1
+License: MIT
+Group: Development/Libraries
+Source: ftp://xmlsoft.org/libxml2-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+BuildRequires: python python-devel
+URL: http://xmlsoft.org/
+Prefix: %{_prefix}
+Docdir: %{_docdir}
+
+%description
+This library allows to manipulate XML files. It includes support
+to read, modify and write XML and HTML files. There is DTDs support
+this includes parsing and validation even with complex DtDs, either
+at parse time or later once the document has been modified. The output
+can be a simple SAX stream or and in-memory DOM like representations.
+In this case one can use the built-in XPath and XPointer implementation
+to select subnodes or ranges. A flexible Input/Output mechanism is
+available, with existing HTTP and FTP modules and combined to an
+URI library.
+
+%package devel
+Summary: Libraries, includes, etc. to develop XML and HTML applications
+Group: Development/Libraries
+Requires: libxml2 = %{version}
+Requires: zlib-devel
+
+%description devel
+Libraries, include files, etc you can use to develop XML applications.
+This library allows to manipulate XML files. It includes support
+to read, modify and write XML and HTML files. There is DTDs support
+this includes parsing and validation even with complex DtDs, either
+at parse time or later once the document has been modified. The output
+can be a simple SAX stream or and in-memory DOM like representations.
+In this case one can use the built-in XPath and XPointer implementation
+to select subnodes or ranges. A flexible Input/Output mechanism is
+available, with existing HTTP and FTP modules and combined to an
+URI library.
+
+%package python
+Summary: Python bindings for the libxml2 library
+Group: Development/Libraries
+Requires: libxml2 = %{version}
+Requires: python
+
+%description python
+The libxml2-python package contains a module that permits applications
+written in the Python programming language to use the interface
+supplied by the libxml2 library to manipulate XML files.
+
+This library allows to manipulate XML files. It includes support
+to read, modify and write XML and HTML files. There is DTDs support
+this includes parsing and validation even with complex DTDs, either
+at parse time or later once the document has been modified.
+
+%prep
+%setup -q
+
+%build
+%configure
+make
+(cd doc/examples ; make clean)
+
+%install
+rm -fr %{buildroot}
+
+%makeinstall
+
+%clean
+rm -fr %{buildroot}
+
+%post
+/sbin/ldconfig
+
+%postun
+/sbin/ldconfig
+
+%files
+%defattr(-, root, root)
+
+%doc AUTHORS ChangeLog NEWS README Copyright TODO
+%doc %{_mandir}/man1/xmllint.1*
+%doc %{_mandir}/man1/xmlcatalog.1*
+%doc %{_mandir}/man3/libxml.3*
+
+%{_libdir}/lib*.so.*
+%{prefix}/bin/xmllint
+%{prefix}/bin/xmlcatalog
+
+%files devel
+%defattr(-, root, root)
+
+%doc %{_mandir}/man1/xml2-config.1*
+%doc AUTHORS ChangeLog NEWS README Copyright TODO
+%doc doc/*.html doc/html doc/*.gif doc/*.png
+%doc doc/tutorial doc/libxml2-api.xml
+%doc doc/examples
+
+%{_libdir}/lib*.so
+%{_libdir}/*a
+%{_libdir}/*.sh
+%{prefix}/include/*
+%{prefix}/bin/xml2-config
+%{prefix}/share/aclocal/libxml.m4
+%{_libdir}/pkgconfig/libxml-2.0.pc
+%files python
+%defattr(-, root, root)
+
+%doc AUTHORS ChangeLog NEWS README Copyright
+%{_libdir}/python*/site-packages/libxml2.py
+%{_libdir}/python*/site-packages/drv_libxml2.py
+%{_libdir}/python*/site-packages/libxml2mod*
+%doc python/TODO
+%doc python/libxml2class.txt
+%doc python/tests/*.py
+%doc doc/*.py
+%doc doc/python.html
+
+%changelog
+* @RELDATE@ Daniel Veillard <veillard@redhat.com>
+- upstream release @VERSION@ 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
+- provides the new XmlTextReader interfaces based on C# XML APIs
+
+* Wed Oct 23 2002 Daniel Veillard <veillard@redhat.com>
+- revamped the spec file, cleaned up some rpm building problems
+
+* Fri Oct 4 2002 Jeremy Katz <katzj@redhat.com>
+- build with 'make LIBTOOL=/usr/bin/libtool' to use system libtool
+
+* Wed Sep 4 2002 Daniel Veillard <veillard@redhat.com>
+
+- library paths fixed for x86-64
+
+* Fri Feb 1 2002 Daniel Veillard <veillard@redhat.com>
+
+- Added the python package
+
+* Sun Nov 4 2001 Daniel Veillard <veillard@redhat.com>
+
+- cleaned up the specfile
+- 2.4.7 broke SGML catalogs badly. this fixes it.
+
+* Thu Apr 26 2001 Toshio Kuratomi <badger@prtr-13.ucsc.edu>
+
+[2.3.7]
+- Added libxml.m4 to the distribution file list
+- Moved the man pages from /usr/man to /usr/share/man to conform to FHS2.0
+- Moved programmer documentation into the devel package
+
+* Thu Sep 23 1999 Daniel Veillard <daniel@veillard.com>
+
+- corrected the spec file alpha stuff
+- switched to version 1.7.1
+- Added validation, XPath, nanohttp, removed memory leaks
+- Renamed CHAR to xmlChar
+
+* Wed Jun 2 1999 Daniel Veillard <daniel@veillard.com>
+
+- Switched to version 1.1: SAX extensions, better entities support, lots of
+ bug fixes.
+
+* Sun Oct 4 1998 Daniel Veillard <daniel@veillard.com>
+
+- Added xml-config to the package
+
+* Thu Sep 24 1998 Michael Fulbright <msf@redhat.com>
+
+- Built release 0.30
+
diff --git a/libxml2.spec b/libxml2.spec
new file mode 100644
index 0000000..2893ee1
--- /dev/null
+++ b/libxml2.spec
@@ -0,0 +1,175 @@
+Summary: Library providing XML and HTML support
+Name: libxml2
+Version: 2.6.8
+Release: 1
+License: MIT
+Group: Development/Libraries
+Source: ftp://xmlsoft.org/libxml2-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+BuildRequires: python python-devel
+URL: http://xmlsoft.org/
+Prefix: %{_prefix}
+Docdir: %{_docdir}
+
+%description
+This library allows to manipulate XML files. It includes support
+to read, modify and write XML and HTML files. There is DTDs support
+this includes parsing and validation even with complex DtDs, either
+at parse time or later once the document has been modified. The output
+can be a simple SAX stream or and in-memory DOM like representations.
+In this case one can use the built-in XPath and XPointer implementation
+to select subnodes or ranges. A flexible Input/Output mechanism is
+available, with existing HTTP and FTP modules and combined to an
+URI library.
+
+%package devel
+Summary: Libraries, includes, etc. to develop XML and HTML applications
+Group: Development/Libraries
+Requires: libxml2 = %{version}
+Requires: zlib-devel
+
+%description devel
+Libraries, include files, etc you can use to develop XML applications.
+This library allows to manipulate XML files. It includes support
+to read, modify and write XML and HTML files. There is DTDs support
+this includes parsing and validation even with complex DtDs, either
+at parse time or later once the document has been modified. The output
+can be a simple SAX stream or and in-memory DOM like representations.
+In this case one can use the built-in XPath and XPointer implementation
+to select subnodes or ranges. A flexible Input/Output mechanism is
+available, with existing HTTP and FTP modules and combined to an
+URI library.
+
+%package python
+Summary: Python bindings for the libxml2 library
+Group: Development/Libraries
+Requires: libxml2 = %{version}
+Requires: python
+
+%description python
+The libxml2-python package contains a module that permits applications
+written in the Python programming language to use the interface
+supplied by the libxml2 library to manipulate XML files.
+
+This library allows to manipulate XML files. It includes support
+to read, modify and write XML and HTML files. There is DTDs support
+this includes parsing and validation even with complex DTDs, either
+at parse time or later once the document has been modified.
+
+%prep
+%setup -q
+
+%build
+%configure
+make
+(cd doc/examples ; make clean)
+
+%install
+rm -fr %{buildroot}
+
+%makeinstall
+
+%clean
+rm -fr %{buildroot}
+
+%post
+/sbin/ldconfig
+
+%postun
+/sbin/ldconfig
+
+%files
+%defattr(-, root, root)
+
+%doc AUTHORS ChangeLog NEWS README Copyright TODO
+%doc %{_mandir}/man1/xmllint.1*
+%doc %{_mandir}/man1/xmlcatalog.1*
+%doc %{_mandir}/man3/libxml.3*
+
+%{_libdir}/lib*.so.*
+%{prefix}/bin/xmllint
+%{prefix}/bin/xmlcatalog
+
+%files devel
+%defattr(-, root, root)
+
+%doc %{_mandir}/man1/xml2-config.1*
+%doc AUTHORS ChangeLog NEWS README Copyright TODO
+%doc doc/*.html doc/html doc/*.gif doc/*.png
+%doc doc/tutorial doc/libxml2-api.xml
+%doc doc/examples
+
+%{_libdir}/lib*.so
+%{_libdir}/*a
+%{_libdir}/*.sh
+%{prefix}/include/*
+%{prefix}/bin/xml2-config
+%{prefix}/share/aclocal/libxml.m4
+%{_libdir}/pkgconfig/libxml-2.0.pc
+%files python
+%defattr(-, root, root)
+
+%doc AUTHORS ChangeLog NEWS README Copyright
+%{_libdir}/python*/site-packages/libxml2.py
+%{_libdir}/python*/site-packages/drv_libxml2.py
+%{_libdir}/python*/site-packages/libxml2mod*
+%doc python/TODO
+%doc python/libxml2class.txt
+%doc python/tests/*.py
+%doc doc/*.py
+%doc doc/python.html
+
+%changelog
+* Tue Mar 23 2004 Daniel Veillard <veillard@redhat.com>
+- upstream release 2.6.8 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
+- provides the new XmlTextReader interfaces based on C# XML APIs
+
+* Wed Oct 23 2002 Daniel Veillard <veillard@redhat.com>
+- revamped the spec file, cleaned up some rpm building problems
+
+* Fri Oct 4 2002 Jeremy Katz <katzj@redhat.com>
+- build with 'make LIBTOOL=/usr/bin/libtool' to use system libtool
+
+* Wed Sep 4 2002 Daniel Veillard <veillard@redhat.com>
+
+- library paths fixed for x86-64
+
+* Fri Feb 1 2002 Daniel Veillard <veillard@redhat.com>
+
+- Added the python package
+
+* Sun Nov 4 2001 Daniel Veillard <veillard@redhat.com>
+
+- cleaned up the specfile
+- 2.4.7 broke SGML catalogs badly. this fixes it.
+
+* Thu Apr 26 2001 Toshio Kuratomi <badger@prtr-13.ucsc.edu>
+
+[2.3.7]
+- Added libxml.m4 to the distribution file list
+- Moved the man pages from /usr/man to /usr/share/man to conform to FHS2.0
+- Moved programmer documentation into the devel package
+
+* Thu Sep 23 1999 Daniel Veillard <daniel@veillard.com>
+
+- corrected the spec file alpha stuff
+- switched to version 1.7.1
+- Added validation, XPath, nanohttp, removed memory leaks
+- Renamed CHAR to xmlChar
+
+* Wed Jun 2 1999 Daniel Veillard <daniel@veillard.com>
+
+- Switched to version 1.1: SAX extensions, better entities support, lots of
+ bug fixes.
+
+* Sun Oct 4 1998 Daniel Veillard <daniel@veillard.com>
+
+- Added xml-config to the package
+
+* Thu Sep 24 1998 Michael Fulbright <msf@redhat.com>
+
+- Built release 0.30
+
diff --git a/list.c b/list.c
new file mode 100644
index 0000000..18a8297
--- /dev/null
+++ b/list.c
@@ -0,0 +1,720 @@
+/*
+ * list.c: lists handling implementation
+ *
+ * Copyright (C) 2000 Gary Pennington and Daniel Veillard.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ * Author: Gary.Pennington@uk.sun.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/list.h>
+#include <libxml/globals.h>
+
+/*
+ * Type definition are kept internal
+ */
+
+struct _xmlLink
+{
+ struct _xmlLink *next;
+ struct _xmlLink *prev;
+ void *data;
+};
+
+struct _xmlList
+{
+ xmlLinkPtr sentinel;
+ void (*linkDeallocator)(xmlLinkPtr );
+ int (*linkCompare)(const void *, const void*);
+};
+
+/************************************************************************
+ * *
+ * Interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlLinkDeallocator:
+ * @l: a list
+ * @lk: a link
+ *
+ * Unlink and deallocate @lk from list @l
+ */
+static void
+xmlLinkDeallocator(xmlListPtr l, xmlLinkPtr lk)
+{
+ (lk->prev)->next = lk->next;
+ (lk->next)->prev = lk->prev;
+ if(l->linkDeallocator)
+ l->linkDeallocator(lk);
+ xmlFree(lk);
+}
+
+/**
+ * xmlLinkCompare:
+ * @data0: first data
+ * @data1: second data
+ *
+ * Compares two arbitrary data
+ *
+ * Returns -1, 0 or 1 depending on whether data1 is greater equal or smaller
+ * than data0
+ */
+static int
+xmlLinkCompare(const void *data0, const void *data1)
+{
+ if (data0 < data1)
+ return (-1);
+ else if (data0 == data1)
+ return (0);
+ return (1);
+}
+
+/**
+ * xmlListLowerSearch:
+ * @l: a list
+ * @data: a data
+ *
+ * Search data in the ordered list walking from the beginning
+ *
+ * Returns the link containing the data or NULL
+ */
+static xmlLinkPtr
+xmlListLowerSearch(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lk;
+
+ for(lk = l->sentinel->next;lk != l->sentinel && l->linkCompare(lk->data, data) <0 ;lk = lk->next);
+ return lk;
+}
+
+/**
+ * xmlListHigherSearch:
+ * @l: a list
+ * @data: a data
+ *
+ * Search data in the ordered list walking backward from the end
+ *
+ * Returns the link containing the data or NULL
+ */
+static xmlLinkPtr
+xmlListHigherSearch(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lk;
+
+ for(lk = l->sentinel->prev;lk != l->sentinel && l->linkCompare(lk->data, data) >0 ;lk = lk->prev);
+ return lk;
+}
+
+/**
+ * xmlListSearch:
+ * @l: a list
+ * @data: a data
+ *
+ * Search data in the list
+ *
+ * Returns the link containing the data or NULL
+ */
+static xmlLinkPtr
+xmlListLinkSearch(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lk;
+ lk = xmlListLowerSearch(l, data);
+ if (lk == l->sentinel)
+ return NULL;
+ else {
+ if (l->linkCompare(lk->data, data) ==0)
+ return lk;
+ return NULL;
+ }
+}
+
+/**
+ * xmlListLinkReverseSearch:
+ * @l: a list
+ * @data: a data
+ *
+ * Search data in the list processing backward
+ *
+ * Returns the link containing the data or NULL
+ */
+static xmlLinkPtr
+xmlListLinkReverseSearch(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lk;
+ lk = xmlListHigherSearch(l, data);
+ if (lk == l->sentinel)
+ return NULL;
+ else {
+ if (l->linkCompare(lk->data, data) ==0)
+ return lk;
+ return NULL;
+ }
+}
+
+/**
+ * xmlListCreate:
+ * @deallocator: an optional deallocator function
+ * @compare: an optional comparison function
+ *
+ * Create a new list
+ *
+ * Returns the new list or NULL in case of error
+ */
+xmlListPtr
+xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare)
+{
+ xmlListPtr l;
+ if (NULL == (l = (xmlListPtr )xmlMalloc( sizeof(xmlList)))) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot initialize memory for list");
+ return (NULL);
+ }
+ /* Initialize the list to NULL */
+ memset(l, 0, sizeof(xmlList));
+
+ /* Add the sentinel */
+ if (NULL ==(l->sentinel = (xmlLinkPtr )xmlMalloc(sizeof(xmlLink)))) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot initialize memory for sentinel");
+ xmlFree(l);
+ return (NULL);
+ }
+ l->sentinel->next = l->sentinel;
+ l->sentinel->prev = l->sentinel;
+ l->sentinel->data = NULL;
+
+ /* If there is a link deallocator, use it */
+ if (deallocator != NULL)
+ l->linkDeallocator = deallocator;
+ /* If there is a link comparator, use it */
+ if (compare != NULL)
+ l->linkCompare = compare;
+ else /* Use our own */
+ l->linkCompare = xmlLinkCompare;
+ return l;
+}
+
+/**
+ * xmlListSearch:
+ * @l: a list
+ * @data: a search value
+ *
+ * Search the list for an existing value of @data
+ *
+ * Returns the value associated to @data or NULL in case of error
+ */
+void *
+xmlListSearch(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lk;
+ lk = xmlListLinkSearch(l, data);
+ if (lk)
+ return (lk->data);
+ return NULL;
+}
+
+/**
+ * xmlListReverseSearch:
+ * @l: a list
+ * @data: a search value
+ *
+ * Search the list in reverse order for an existing value of @data
+ *
+ * Returns the value associated to @data or NULL in case of error
+ */
+void *
+xmlListReverseSearch(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lk;
+ lk = xmlListLinkReverseSearch(l, data);
+ if (lk)
+ return (lk->data);
+ return NULL;
+}
+
+/**
+ * xmlListInsert:
+ * @l: a list
+ * @data: the data
+ *
+ * Insert data in the ordered list at the beginning for this value
+ *
+ * Returns 0 in case of success, 1 in case of failure
+ */
+int
+xmlListInsert(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lkPlace, lkNew;
+
+ lkPlace = xmlListLowerSearch(l, data);
+ /* Add the new link */
+ lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink));
+ if (lkNew == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot initialize memory for new link");
+ return (1);
+ }
+ lkNew->data = data;
+ lkPlace = lkPlace->prev;
+ lkNew->next = lkPlace->next;
+ (lkPlace->next)->prev = lkNew;
+ lkPlace->next = lkNew;
+ lkNew->prev = lkPlace;
+ return 0;
+}
+
+/**
+ * xmlListAppend:
+ * @l: a list
+ * @data: the data
+ *
+ * Insert data in the ordered list at the end for this value
+ *
+ * Returns 0 in case of success, 1 in case of failure
+ */
+int xmlListAppend(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lkPlace, lkNew;
+
+ lkPlace = xmlListHigherSearch(l, data);
+ /* Add the new link */
+ lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink));
+ if (lkNew == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot initialize memory for new link");
+ return (0);
+ }
+ lkNew->data = data;
+ lkNew->next = lkPlace->next;
+ (lkPlace->next)->prev = lkNew;
+ lkPlace->next = lkNew;
+ lkNew->prev = lkPlace;
+ return 1;
+}
+
+/**
+ * xmlListDelete:
+ * @l: a list
+ *
+ * Deletes the list and its associated data
+ */
+void xmlListDelete(xmlListPtr l)
+{
+ xmlListClear(l);
+ xmlFree(l->sentinel);
+ xmlFree(l);
+}
+
+/**
+ * xmlListRemoveFirst:
+ * @l: a list
+ * @data: list data
+ *
+ * Remove the first instance associated to data in the list
+ *
+ * Returns 1 if a deallocation occured, or 0 if not found
+ */
+int
+xmlListRemoveFirst(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lk;
+
+ /*Find the first instance of this data */
+ lk = xmlListLinkSearch(l, data);
+ if (lk != NULL) {
+ xmlLinkDeallocator(l, lk);
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * xmlListRemoveLast:
+ * @l: a list
+ * @data: list data
+ *
+ * Remove the last instance associated to data in the list
+ *
+ * Returns 1 if a deallocation occured, or 0 if not found
+ */
+int
+xmlListRemoveLast(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lk;
+
+ /*Find the last instance of this data */
+ lk = xmlListLinkReverseSearch(l, data);
+ if (lk != NULL) {
+ xmlLinkDeallocator(l, lk);
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * xmlListRemoveAll:
+ * @l: a list
+ * @data: list data
+ *
+ * Remove the all instance associated to data in the list
+ *
+ * Returns the number of deallocation, or 0 if not found
+ */
+int
+xmlListRemoveAll(xmlListPtr l, void *data)
+{
+ int count=0;
+
+
+ while(xmlListRemoveFirst(l, data))
+ count++;
+ return count;
+}
+
+/**
+ * xmlListClear:
+ * @l: a list
+ *
+ * Remove the all data in the list
+ */
+void
+xmlListClear(xmlListPtr l)
+{
+ xmlLinkPtr lk = l->sentinel->next;
+
+ while(lk != l->sentinel) {
+ xmlLinkPtr next = lk->next;
+
+ xmlLinkDeallocator(l, lk);
+ lk = next;
+ }
+}
+
+/**
+ * xmlListEmpty:
+ * @l: a list
+ *
+ * Is the list empty ?
+ *
+ * Returns 1 if the list is empty, 0 otherwise
+ */
+int
+xmlListEmpty(xmlListPtr l)
+{
+ return (l->sentinel->next == l->sentinel);
+}
+
+/**
+ * xmlListFront:
+ * @l: a list
+ *
+ * Get the first element in the list
+ *
+ * Returns the first element in the list, or NULL
+ */
+xmlLinkPtr
+xmlListFront(xmlListPtr l)
+{
+ return (l->sentinel->next);
+}
+
+/**
+ * xmlListEnd:
+ * @l: a list
+ *
+ * Get the last element in the list
+ *
+ * Returns the last element in the list, or NULL
+ */
+xmlLinkPtr
+xmlListEnd(xmlListPtr l)
+{
+ return (l->sentinel->prev);
+}
+
+/**
+ * xmlListSize:
+ * @l: a list
+ *
+ * Get the number of elements in the list
+ *
+ * Returns the number of elements in the list
+ */
+int
+xmlListSize(xmlListPtr l)
+{
+ xmlLinkPtr lk;
+ int count=0;
+
+ /* TODO: keep a counter in xmlList instead */
+ for(lk = l->sentinel->next; lk != l->sentinel; lk = lk->next, count++);
+ return count;
+}
+
+/**
+ * xmlListPopFront:
+ * @l: a list
+ *
+ * Removes the first element in the list
+ */
+void
+xmlListPopFront(xmlListPtr l)
+{
+ if(!xmlListEmpty(l))
+ xmlLinkDeallocator(l, l->sentinel->next);
+}
+
+/**
+ * xmlListPopBack:
+ * @l: a list
+ *
+ * Removes the last element in the list
+ */
+void
+xmlListPopBack(xmlListPtr l)
+{
+ if(!xmlListEmpty(l))
+ xmlLinkDeallocator(l, l->sentinel->prev);
+}
+
+/**
+ * xmlListPushFront:
+ * @l: a list
+ * @data: new data
+ *
+ * add the new data at the beginning of the list
+ *
+ * Returns 1 if successful, 0 otherwise
+ */
+int
+xmlListPushFront(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lkPlace, lkNew;
+
+ lkPlace = l->sentinel;
+ /* Add the new link */
+ lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink));
+ if (lkNew == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot initialize memory for new link");
+ return (0);
+ }
+ lkNew->data = data;
+ lkNew->next = lkPlace->next;
+ (lkPlace->next)->prev = lkNew;
+ lkPlace->next = lkNew;
+ lkNew->prev = lkPlace;
+ return 1;
+}
+
+/**
+ * xmlListPushBack:
+ * @l: a list
+ * @data: new data
+ *
+ * add the new data at the end of the list
+ *
+ * Returns 1 if successful, 0 otherwise
+ */
+int
+xmlListPushBack(xmlListPtr l, void *data)
+{
+ xmlLinkPtr lkPlace, lkNew;
+
+ lkPlace = l->sentinel->prev;
+ /* Add the new link */
+ if (NULL ==(lkNew = (xmlLinkPtr )xmlMalloc(sizeof(xmlLink)))) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot initialize memory for new link");
+ return (0);
+ }
+ lkNew->data = data;
+ lkNew->next = lkPlace->next;
+ (lkPlace->next)->prev = lkNew;
+ lkPlace->next = lkNew;
+ lkNew->prev = lkPlace;
+ return 1;
+}
+
+/**
+ * xmlLinkGetData:
+ * @lk: a link
+ *
+ * See Returns.
+ *
+ * Returns a pointer to the data referenced from this link
+ */
+void *
+xmlLinkGetData(xmlLinkPtr lk)
+{
+ return lk->data;
+}
+
+/**
+ * xmlListReverse:
+ * @l: a list
+ *
+ * Reverse the order of the elements in the list
+ */
+void
+xmlListReverse(xmlListPtr l) {
+ xmlLinkPtr lk;
+ xmlLinkPtr lkPrev = l->sentinel;
+
+ for(lk = l->sentinel->next; lk != l->sentinel; lk = lk->next) {
+ lkPrev->next = lkPrev->prev;
+ lkPrev->prev = lk;
+ lkPrev = lk;
+ }
+ /* Fix up the last node */
+ lkPrev->next = lkPrev->prev;
+ lkPrev->prev = lk;
+}
+
+/**
+ * xmlListSort:
+ * @l: a list
+ *
+ * Sort all the elements in the list
+ */
+void
+xmlListSort(xmlListPtr l)
+{
+ xmlListPtr lTemp;
+
+ if(xmlListEmpty(l))
+ return;
+
+ /* I think that the real answer is to implement quicksort, the
+ * alternative is to implement some list copying procedure which
+ * would be based on a list copy followed by a clear followed by
+ * an insert. This is slow...
+ */
+
+ if (NULL ==(lTemp = xmlListDup(l)))
+ return;
+ xmlListClear(l);
+ xmlListMerge(l, lTemp);
+ xmlListDelete(lTemp);
+ return;
+}
+
+/**
+ * xmlListWalk:
+ * @l: a list
+ * @walker: a processing function
+ * @user: a user parameter passed to the walker function
+ *
+ * Walk all the element of the first from first to last and
+ * apply the walker function to it
+ */
+void
+xmlListWalk(xmlListPtr l, xmlListWalker walker, const void *user) {
+ xmlLinkPtr lk;
+
+ for(lk = l->sentinel->next; lk != l->sentinel; lk = lk->next) {
+ if((walker(lk->data, user)) == 0)
+ break;
+ }
+}
+
+/**
+ * xmlListReverseWalk:
+ * @l: a list
+ * @walker: a processing function
+ * @user: a user parameter passed to the walker function
+ *
+ * Walk all the element of the list in reverse order and
+ * apply the walker function to it
+ */
+void
+xmlListReverseWalk(xmlListPtr l, xmlListWalker walker, const void *user) {
+ xmlLinkPtr lk;
+
+ for(lk = l->sentinel->prev; lk != l->sentinel; lk = lk->prev) {
+ if((walker(lk->data, user)) == 0)
+ break;
+ }
+}
+
+/**
+ * xmlListMerge:
+ * @l1: the original list
+ * @l2: the new list
+ *
+ * include all the elements of the second list in the first one and
+ * clear the second list
+ */
+void
+xmlListMerge(xmlListPtr l1, xmlListPtr l2)
+{
+ xmlListCopy(l1, l2);
+ xmlListClear(l2);
+}
+
+/**
+ * xmlListDup:
+ * @old: the list
+ *
+ * Duplicate the list
+ *
+ * Returns a new copy of the list or NULL in case of error
+ */
+xmlListPtr
+xmlListDup(const xmlListPtr old)
+{
+ xmlListPtr cur;
+ /* Hmmm, how to best deal with allocation issues when copying
+ * lists. If there is a de-allocator, should responsibility lie with
+ * the new list or the old list. Surely not both. I'll arbitrarily
+ * set it to be the old list for the time being whilst I work out
+ * the answer
+ */
+ if (NULL ==(cur = xmlListCreate(NULL, old->linkCompare)))
+ return (NULL);
+ if (0 != xmlListCopy(cur, old))
+ return NULL;
+ return cur;
+}
+
+/**
+ * xmlListCopy:
+ * @cur: the new list
+ * @old: the old list
+ *
+ * Move all the element from the old list in the new list
+ *
+ * Returns 0 in case of success 1 in case of error
+ */
+int
+xmlListCopy(xmlListPtr cur, const xmlListPtr old)
+{
+ /* Walk the old tree and insert the data into the new one */
+ xmlLinkPtr lk;
+
+ for(lk = old->sentinel->next; lk != old->sentinel; lk = lk->next) {
+ if (0 !=xmlListInsert(cur, lk->data)) {
+ xmlListDelete(cur);
+ return (1);
+ }
+ }
+ return (0);
+}
+/* xmlListUnique() */
+/* xmlListSwap */
diff --git a/ltconfig b/ltconfig
new file mode 100755
index 0000000..c14d83c
--- /dev/null
+++ b/ltconfig
@@ -0,0 +1,3114 @@
+#! /bin/sh
+
+# ltconfig - Create a system-specific libtool.
+# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A lot of this script is taken from autoconf-2.10.
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+echo=echo
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec "$SHELL" "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit 0
+fi
+
+# Find the correct PATH separator. Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+ UNAME=${UNAME-`uname 2>/dev/null`}
+ case X$UNAME in
+ *-DOS) PATH_SEPARATOR=';' ;;
+ *) PATH_SEPARATOR=':' ;;
+ esac
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+ echo_test_string="`eval $cmd`" &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
+ break
+ fi
+ done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" != 'X\t' ||
+ test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ for dir in $PATH /usr/ucb; do
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running ltconfig again with it.
+ ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ echo='printf "%s\n"'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
+ test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+ CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL $0 --fallback-echo"
+ elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
+ test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+ echo="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# The name of this program.
+progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
+
+# Constants:
+PROGRAM=ltconfig
+PACKAGE=libtool
+VERSION=1.3.5
+TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+rm="rm -f"
+
+help="Try \`$progname --help' for more information."
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+enable_shared=yes
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+enable_static=yes
+enable_fast_install=yes
+enable_dlopen=unknown
+enable_win32_dll=no
+ltmain=
+silent=
+srcdir=
+ac_config_guess=
+ac_config_sub=
+host=
+nonopt=
+ofile="$default_ofile"
+verify_host=yes
+with_gcc=no
+with_gnu_ld=no
+need_locks=yes
+ac_ext=c
+objext=o
+libext=a
+exeext=
+cache_file=
+
+old_AR="$AR"
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+old_CPPFLAGS="$CPPFLAGS"
+old_LDFLAGS="$LDFLAGS"
+old_LD="$LD"
+old_LN_S="$LN_S"
+old_LIBS="$LIBS"
+old_NM="$NM"
+old_RANLIB="$RANLIB"
+old_DLLTOOL="$DLLTOOL"
+old_OBJDUMP="$OBJDUMP"
+old_AS="$AS"
+
+# Parse the command line options.
+args=
+prev=
+for option
+do
+ case "$option" in
+ -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ eval "$prev=\$option"
+ prev=
+ continue
+ fi
+
+ case "$option" in
+ --help) cat <<EOM
+Usage: $progname [OPTION]... [HOST [LTMAIN]]
+
+Generate a system-specific libtool script.
+
+ --debug enable verbose shell tracing
+ --disable-shared do not build shared libraries
+ --disable-static do not build static libraries
+ --disable-fast-install do not optimize for fast installation
+ --enable-dlopen enable dlopen support
+ --enable-win32-dll enable building dlls on win32 hosts
+ --help display this help and exit
+ --no-verify do not verify that HOST is a valid host type
+-o, --output=FILE specify the output file [default=$default_ofile]
+ --quiet same as \`--silent'
+ --silent do not print informational messages
+ --srcdir=DIR find \`config.guess' in DIR
+ --version output version information and exit
+ --with-gcc assume that the GNU C compiler will be used
+ --with-gnu-ld assume that the C compiler uses the GNU linker
+ --disable-lock disable file locking
+ --cache-file=FILE configure cache file
+
+LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
+that provides basic libtool functionality.
+
+HOST is the canonical host system name [default=guessed].
+EOM
+ exit 0
+ ;;
+
+ --debug)
+ echo "$progname: enabling shell trace mode"
+ set -x
+ ;;
+
+ --disable-shared) enable_shared=no ;;
+
+ --disable-static) enable_static=no ;;
+
+ --disable-fast-install) enable_fast_install=no ;;
+
+ --enable-dlopen) enable_dlopen=yes ;;
+
+ --enable-win32-dll) enable_win32_dll=yes ;;
+
+ --quiet | --silent) silent=yes ;;
+
+ --srcdir) prev=srcdir ;;
+ --srcdir=*) srcdir="$optarg" ;;
+
+ --no-verify) verify_host=no ;;
+
+ --output | -o) prev=ofile ;;
+ --output=*) ofile="$optarg" ;;
+
+ --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
+
+ --with-gcc) with_gcc=yes ;;
+ --with-gnu-ld) with_gnu_ld=yes ;;
+
+ --disable-lock) need_locks=no ;;
+
+ --cache-file=*) cache_file="$optarg" ;;
+
+ -*)
+ echo "$progname: unrecognized option \`$option'" 1>&2
+ echo "$help" 1>&2
+ exit 1
+ ;;
+
+ *)
+ if test -z "$ltmain"; then
+ ltmain="$option"
+ elif test -z "$host"; then
+# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
+# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
+# echo "$progname: warning \`$option' is not a valid host type" 1>&2
+# fi
+ host="$option"
+ else
+ echo "$progname: too many arguments" 1>&2
+ echo "$help" 1>&2
+ exit 1
+ fi ;;
+ esac
+done
+
+if test -z "$ltmain"; then
+ echo "$progname: you must specify a LTMAIN file" 1>&2
+ echo "$help" 1>&2
+ exit 1
+fi
+
+if test ! -f "$ltmain"; then
+ echo "$progname: \`$ltmain' does not exist" 1>&2
+ echo "$help" 1>&2
+ exit 1
+fi
+
+# Quote any args containing shell metacharacters.
+ltconfig_args=
+for arg
+do
+ case "$arg" in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ltconfig_args="$ltconfig_args '$arg'" ;;
+ *) ltconfig_args="$ltconfig_args $arg" ;;
+ esac
+done
+
+# A relevant subset of AC_INIT.
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 5 compiler messages saved in config.log
+# 6 checking for... messages and results
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>>./config.log
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
+if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi
+
+if test -n "$cache_file" && test -r "$cache_file"; then
+ echo "loading cache $cache_file within ltconfig"
+ . $cache_file
+fi
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+if test -z "$srcdir"; then
+ # Assume the source directory is the same one as the path to LTMAIN.
+ srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
+ test "$srcdir" = "$ltmain" && srcdir=.
+fi
+
+trap "$rm conftest*; exit 1" 1 2 15
+if test "$verify_host" = yes; then
+ # Check for config.guess and config.sub.
+ ac_aux_dir=
+ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/config.guess; then
+ ac_aux_dir=$ac_dir
+ break
+ fi
+ done
+ if test -z "$ac_aux_dir"; then
+ echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
+ echo "$help" 1>&2
+ exit 1
+ fi
+ ac_config_guess=$ac_aux_dir/config.guess
+ ac_config_sub=$ac_aux_dir/config.sub
+
+ # Make sure we can run config.sub.
+ if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
+ else
+ echo "$progname: cannot run $ac_config_sub" 1>&2
+ echo "$help" 1>&2
+ exit 1
+ fi
+
+ echo $ac_n "checking host system type""... $ac_c" 1>&6
+
+ host_alias=$host
+ case "$host_alias" in
+ "")
+ if host_alias=`$SHELL $ac_config_guess`; then :
+ else
+ echo "$progname: cannot guess host type; you must specify one" 1>&2
+ echo "$help" 1>&2
+ exit 1
+ fi ;;
+ esac
+ host=`$SHELL $ac_config_sub $host_alias`
+ echo "$ac_t$host" 1>&6
+
+ # Make sure the host verified.
+ test -z "$host" && exit 1
+
+elif test -z "$host"; then
+ echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
+ echo "$help" 1>&2
+ exit 1
+else
+ host_alias=$host
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case "$host_os" in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+case "$host_os" in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR cru $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+# Set a sane default for `AR'.
+test -z "$AR" && AR=ar
+
+# Set a sane default for `OBJDUMP'.
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+# If RANLIB is not set, then run the test.
+if test "${RANLIB+set}" != "set"; then
+ result=no
+
+ echo $ac_n "checking for ranlib... $ac_c" 1>&6
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ for dir in $PATH; do
+ test -z "$dir" && dir=.
+ if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
+ RANLIB="ranlib"
+ result="ranlib"
+ break
+ fi
+ done
+ IFS="$save_ifs"
+
+ echo "$ac_t$result" 1>&6
+fi
+
+if test -n "$RANLIB"; then
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+fi
+
+# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$AS" && AS=as
+
+# Check to see if we are using GCC.
+if test "$with_gcc" != yes || test -z "$CC"; then
+ # If CC is not set, then try to find GCC or a usable CC.
+ if test -z "$CC"; then
+ echo $ac_n "checking for gcc... $ac_c" 1>&6
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ for dir in $PATH; do
+ test -z "$dir" && dir=.
+ if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
+ CC="gcc"
+ break
+ fi
+ done
+ IFS="$save_ifs"
+
+ if test -n "$CC"; then
+ echo "$ac_t$CC" 1>&6
+ else
+ echo "$ac_t"no 1>&6
+ fi
+ fi
+
+ # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
+ if test -z "$CC"; then
+ echo $ac_n "checking for cc... $ac_c" 1>&6
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ cc_rejected=no
+ for dir in $PATH; do
+ test -z "$dir" && dir=.
+ if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
+ if test "$dir/cc" = "/usr/ucb/cc"; then
+ cc_rejected=yes
+ continue
+ fi
+ CC="cc"
+ break
+ fi
+ done
+ IFS="$save_ifs"
+ if test $cc_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same name, so the bogon will be chosen
+ # first if we set CC to just the name; use the full file name.
+ shift
+ set dummy "$dir/cc" "$@"
+ shift
+ CC="$@"
+ fi
+ fi
+
+ if test -n "$CC"; then
+ echo "$ac_t$CC" 1>&6
+ else
+ echo "$ac_t"no 1>&6
+ fi
+
+ if test -z "$CC"; then
+ echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
+ exit 1
+ fi
+ fi
+
+ # Now see if the compiler is really GCC.
+ with_gcc=no
+ echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
+ echo "$progname:581: checking whether we are using GNU C" >&5
+
+ $rm conftest.c
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+ if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ with_gcc=yes
+ fi
+ $rm conftest.c
+ echo "$ac_t$with_gcc" 1>&6
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="$2"
+
+echo $ac_n "checking for object suffix... $ac_c" 1>&6
+$rm conftest*
+echo 'int i = 1;' > conftest.c
+echo "$progname:603: checking for object suffix" >& 5
+if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
+ # Append any warnings to the config.log.
+ cat conftest.err 1>&5
+
+ for ac_file in conftest.*; do
+ case $ac_file in
+ *.c) ;;
+ *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
+ esac
+ done
+else
+ cat conftest.err 1>&5
+ echo "$progname: failed program was:" >&5
+ cat conftest.c >&5
+fi
+$rm conftest*
+echo "$ac_t$objext" 1>&6
+
+echo $ac_n "checking for executable suffix... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_exeext="no"
+ $rm conftest*
+ echo 'main () { return 0; }' > conftest.c
+ echo "$progname:629: checking for executable suffix" >& 5
+ if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
+ # Append any warnings to the config.log.
+ cat conftest.err 1>&5
+
+ for ac_file in conftest.*; do
+ case $ac_file in
+ *.c | *.err | *.$objext ) ;;
+ *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
+ esac
+ done
+ else
+ cat conftest.err 1>&5
+ echo "$progname: failed program was:" >&5
+ cat conftest.c >&5
+ fi
+ $rm conftest*
+fi
+if test "X$ac_cv_exeext" = Xno; then
+ exeext=""
+else
+ exeext="$ac_cv_exeext"
+fi
+echo "$ac_t$ac_cv_exeext" 1>&6
+
+echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
+pic_flag=
+special_shlib_compile_flags=
+wl=
+link_static_flag=
+no_builtin_flag=
+
+if test "$with_gcc" = yes; then
+ wl='-Wl,'
+ link_static_flag='-static'
+
+ case "$host_os" in
+ beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ aix*)
+ # Below there is a dirty hack to force normal static linking with -ldl
+ # The problem is because libdl dynamically linked with both libc and
+ # libC (AIX C++ library), which obviously doesn't included in libraries
+ # list by gcc. This cause undefined symbols with -static flags.
+ # This hack allows C programs to be linked with "-static -ldl", but
+ # we not sure about C++ programs.
+ link_static_flag="$link_static_flag ${wl}-lC"
+ ;;
+ cygwin* | mingw* | os2*)
+ # We can build DLLs from non-PIC.
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ pic_flag='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ pic_flag=-Kconform_pic
+ fi
+ ;;
+ *)
+ pic_flag='-fPIC'
+ ;;
+ esac
+else
+ # PORTME Check for PIC flags for the system compiler.
+ case "$host_os" in
+ aix3* | aix4*)
+ # All AIX code is PIC.
+ link_static_flag='-bnso -bI:/lib/syscalls.exp'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ # Is there a better link_static_flag that works with the bundled CC?
+ wl='-Wl,'
+ link_static_flag="${wl}-a ${wl}archive"
+ pic_flag='+Z'
+ ;;
+
+ irix5* | irix6*)
+ wl='-Wl,'
+ link_static_flag='-non_shared'
+ # PIC (with -KPIC) is the default.
+ ;;
+
+ cygwin* | mingw* | os2*)
+ # We can build DLLs from non-PIC.
+ ;;
+
+ osf3* | osf4* | osf5*)
+ # All OSF/1 code is PIC.
+ wl='-Wl,'
+ link_static_flag='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ pic_flag='-Kpic'
+ link_static_flag='-dn'
+ special_shlib_compile_flags='-belf'
+ ;;
+
+ solaris*)
+ pic_flag='-KPIC'
+ link_static_flag='-Bstatic'
+ wl='-Wl,'
+ ;;
+
+ sunos4*)
+ pic_flag='-PIC'
+ link_static_flag='-Bstatic'
+ wl='-Qoption ld '
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ pic_flag='-KPIC'
+ link_static_flag='-Bstatic'
+ wl='-Wl,'
+ ;;
+
+ uts4*)
+ pic_flag='-pic'
+ link_static_flag='-Bstatic'
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ pic_flag='-Kconform_pic'
+ link_static_flag='-Bstatic'
+ fi
+ ;;
+ *)
+ can_build_shared=no
+ ;;
+ esac
+fi
+
+if test -n "$pic_flag"; then
+ echo "$ac_t$pic_flag" 1>&6
+
+ # Check to make sure the pic_flag actually works.
+ echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
+ $rm conftest*
+ echo "int some_variable = 0;" > conftest.c
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $pic_flag -DPIC"
+ echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
+ if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
+ # Append any warnings to the config.log.
+ cat conftest.err 1>&5
+
+ case "$host_os" in
+ hpux9* | hpux10* | hpux11*)
+ # On HP-UX, both CC and GCC only warn that PIC is supported... then they
+ # create non-PIC objects. So, if there were any warnings, we assume that
+ # PIC is not supported.
+ if test -s conftest.err; then
+ echo "$ac_t"no 1>&6
+ can_build_shared=no
+ pic_flag=
+ else
+ echo "$ac_t"yes 1>&6
+ pic_flag=" $pic_flag"
+ fi
+ ;;
+ *)
+ echo "$ac_t"yes 1>&6
+ pic_flag=" $pic_flag"
+ ;;
+ esac
+ else
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ can_build_shared=no
+ pic_flag=
+ echo "$ac_t"no 1>&6
+ fi
+ CFLAGS="$save_CFLAGS"
+ $rm conftest*
+else
+ echo "$ac_t"none 1>&6
+fi
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+$rm conftest*
+echo "int some_variable = 0;" > conftest.c
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory. Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.o"
+echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
+if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
+
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s out/conftest.err; then
+ echo "$ac_t"no 1>&6
+ compiler_c_o=no
+ else
+ echo "$ac_t"yes 1>&6
+ compiler_c_o=yes
+ fi
+else
+ # Append any errors to the config.log.
+ cat out/conftest.err 1>&5
+ compiler_c_o=no
+ echo "$ac_t"no 1>&6
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+
+if test x"$compiler_c_o" = x"yes"; then
+ # Check to see if we can write to a .lo
+ echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6
+ $rm conftest*
+ echo "int some_variable = 0;" > conftest.c
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -c -o conftest.lo"
+ echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
+if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
+
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ echo "$ac_t"no 1>&6
+ compiler_o_lo=no
+ else
+ echo "$ac_t"yes 1>&6
+ compiler_o_lo=yes
+ fi
+ else
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ compiler_o_lo=no
+ echo "$ac_t"no 1>&6
+ fi
+ CFLAGS="$save_CFLAGS"
+ $rm conftest*
+else
+ compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$ac_t$hard_links" 1>&6
+ $rm conftest*
+ if test "$hard_links" = no; then
+ echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+if test "$with_gcc" = yes; then
+ # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+ echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
+ $rm conftest*
+ echo "int some_variable = 0;" > conftest.c
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
+ echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+ if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
+
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ echo "$ac_t"no 1>&6
+ compiler_rtti_exceptions=no
+ else
+ echo "$ac_t"yes 1>&6
+ compiler_rtti_exceptions=yes
+ fi
+ else
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ compiler_rtti_exceptions=no
+ echo "$ac_t"no 1>&6
+ fi
+ CFLAGS="$save_CFLAGS"
+ $rm conftest*
+
+ if test "$compiler_rtti_exceptions" = "yes"; then
+ no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+ else
+ no_builtin_flag=' -fno-builtin'
+ fi
+
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$special_shlib_compile_flags"; then
+ echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
+ if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then :
+ else
+ echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
+ can_build_shared=no
+ fi
+fi
+
+echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
+$rm conftest*
+echo 'main(){return(0);}' > conftest.c
+save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS $link_static_flag"
+echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
+if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ echo "$ac_t$link_static_flag" 1>&6
+else
+ echo "$ac_t"none 1>&6
+ link_static_flag=
+fi
+LDFLAGS="$save_LDFLAGS"
+$rm conftest*
+
+if test -z "$LN_S"; then
+ # Check to see if we can use ln -s, or we need hard links.
+ echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
+ $rm conftest.dat
+ if ln -s X conftest.dat 2>/dev/null; then
+ $rm conftest.dat
+ LN_S="ln -s"
+ else
+ LN_S=ln
+ fi
+ if test "$LN_S" = "ln -s"; then
+ echo "$ac_t"yes 1>&6
+ else
+ echo "$ac_t"no 1>&6
+ fi
+fi
+
+# Make sure LD is an absolute path.
+if test -z "$LD"; then
+ ac_prog=ld
+ if test "$with_gcc" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
+ echo "$progname:991: checking for ld used by GCC" >&5
+ ac_prog=`($CC -print-prog-name=ld) 2>&5`
+ case "$ac_prog" in
+ # Accept absolute paths.
+ [\\/]* | [A-Za-z]:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we are not using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+ elif test "$with_gnu_ld" = yes; then
+ echo $ac_n "checking for GNU ld... $ac_c" 1>&6
+ echo "$progname:1015: checking for GNU ld" >&5
+ else
+ echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
+ echo "$progname:1018: checking for non-GNU ld" >&5
+ fi
+
+ if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+ test "$with_gnu_ld" != no && break
+ else
+ test "$with_gnu_ld" != yes && break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+ fi
+
+ if test -n "$LD"; then
+ echo "$ac_t$LD" 1>&6
+ else
+ echo "$ac_t"no 1>&6
+ fi
+
+ if test -z "$LD"; then
+ echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
+ exit 1
+ fi
+fi
+
+# Check to see if it really is or is not GNU ld.
+echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
+# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+ with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+echo "$ac_t$with_gnu_ld" 1>&6
+
+# See if the linker supports building shared libraries.
+echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced. Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+
+case "$host_os" in
+cygwin* | mingw*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$with_gcc" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case "$host_os" in
+ aix3* | aix4*)
+ # On AIX, the GNU linker is very broken
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+
+ # Extract the symbol export list from an `--export-all' def file,
+ # then regenerate the def file from the symbol export list, so that
+ # the compiled dll only exports the symbol export list.
+ # Be careful not to strip the DATA tag left by newer dlltools.
+ export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
+ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
+ $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~
+ sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols'
+
+ # If DATA tags from a recent dlltool are present, honour them!
+ archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
+ _lt_hint=1;
+ cat $export_symbols | while read symbol; do
+ set dummy \$symbol;
+ case \$# in
+ 2) echo " \$2 @ \$_lt_hint ; " >> $objdir/$soname-def;;
+ *) echo " \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;;
+ esac;
+ _lt_hint=`expr 1 + \$_lt_hint`;
+ done~
+ test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
+ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
+ $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
+ $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
+ $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
+
+ old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a'
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
+ # can we support soname and/or expsyms with a.out? -oliva
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ case $host_os in
+ cygwin* | mingw*)
+ # dlltool doesn't understand --whole-archive et. al.
+ whole_archive_flag_spec=
+ ;;
+ *)
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ ;;
+ esac
+ fi
+else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case "$host_os" in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$with_gcc" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4*)
+ hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
+ hardcode_libdir_separator=':'
+ if test "$with_gcc" = yes; then
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct=yes
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ shared_flag='-shared'
+ else
+ shared_flag='${wl}-bM:SRE'
+ hardcode_direct=yes
+ fi
+ allow_undefined_flag=' ${wl}-berok'
+ archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
+ archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
+ case "$host_os" in aix4.[01]|aix4.[01].*)
+ # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
+ always_export_symbols=yes ;;
+ esac
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+
+ cygwin* | mingw*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib /OUT:$oldlib$oldobjs'
+ fix_srcfile_path='`cygpath -w $srcfile`'
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ case "$host_os" in
+ hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
+ *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
+ esac
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_minus_L=yes # Not in the search PATH, but as the default
+ # location of the library.
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ irix5* | irix6*)
+ if test "$with_gcc" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF
+ fi
+ hardcode_libdir_flag_spec='${wl}-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ openbsd*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$with_gcc" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # As osf3* with the addition of the -msym flag
+ if test "$with_gcc" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ rhapsody*)
+ archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flags_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sco3.2v5*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case "$host_os" in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts'
+ else
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv5*)
+ no_undefined_flag=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
+ hardcode_libdir_flag_spec=
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts'
+ hardcode_direct=yes
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ unixware7*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+echo "$ac_t$ld_shlibs" 1>&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+if test -z "$NM"; then
+ echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
+ case "$NM" in
+ [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+ NM="$ac_dir/nm -B"
+ break
+ elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+ NM="$ac_dir/nm -p"
+ break
+ else
+ NM=${NM="$ac_dir/nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$NM" && NM=nm
+ ;;
+ esac
+ echo "$ac_t$NM" 1>&6
+fi
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Define system-specific variables.
+case "$host_os" in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
+ ;;
+irix*)
+ symcode='[BCDEGRST]'
+ ;;
+solaris*)
+ symcode='[BDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+ symcode='[ABCDGISTW]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Write the raw and C identifiers.
+ global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+ $rm conftest*
+ cat > conftest.c <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ echo "$progname:1653: checking if global_symbol_pipe works" >&5
+ if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
+
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+ if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.c
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
+
+ cat <<EOF >> conftest.c
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+ sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
+ cat <<\EOF >> conftest.c
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$objext conftstm.$objext
+ save_LIBS="$LIBS"
+ save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$objext"
+ CFLAGS="$CFLAGS$no_builtin_flag"
+ if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ pipe_works=yes
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.c >&5
+ fi
+ LIBS="$save_LIBS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.c >&5
+ fi
+ $rm conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ global_symbol_pipe=
+ fi
+done
+if test "$pipe_works" = yes; then
+ echo "${ac_t}ok" 1>&6
+else
+ echo "${ac_t}failed" 1>&6
+fi
+
+if test -z "$global_symbol_pipe"; then
+ global_symbol_to_cdecl=
+fi
+
+# Check hardcoding attributes.
+echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+ test -n "$runpath_var"; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$hardcode_shlibpath_var" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+echo "$ac_t$hardcode_action" 1>&6
+
+
+reload_flag=
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
+# PORTME Some linkers may need a different reload flag.
+reload_flag='-r'
+echo "$ac_t$reload_flag" 1>&6
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+
+# PORTME Fill in your ld.so characteristics
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+file_magic_cmd=
+file_magic_test_file=
+deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [regex]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
+case "$host_os" in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}.so$major'
+ ;;
+
+aix4*)
+ version_type=linux
+ # AIX has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ # We preserve .a as extension for shared libraries though AIX4.2
+ # and later linker supports .so
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
+ shlibpath_var=LIBPATH
+ deplibs_check_method=pass_all
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}.so'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ deplibs_check_method=pass_all
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=/shlib/libc.so
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ export_dynamic_flag_spec=-rdynamic
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw*)
+ version_type=windows
+ need_version=no
+ need_lib_prefix=no
+ if test "$with_gcc" = yes; then
+ library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
+ else
+ library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
+ fi
+ dynamic_linker='Win32 ld.exe'
+ deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ file_magic_cmd='${OBJDUMP} -f'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case "$version_type" in
+ freebsd-elf*)
+ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=`echo /usr/lib/libc.so*`
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ deplibs_check_method=unknown
+ library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case "$host_os" in
+ freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ dynamic_linker="$host_os dld.sl"
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+ soname_spec='${libname}${release}.sl$major'
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ case "$host_os" in
+ hpux10.20*)
+ # TODO: Does this work for hpux-11 too?
+ deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+irix5* | irix6*)
+ version_type=irix
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}.so.$major'
+ library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so'
+ case "$host_os" in
+ irix5*)
+ libsuff= shlibsuff=
+ # this will be overridden with pass_all, but let us keep it just in case
+ deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ case "$LD" in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ deplibs_check_method='pass_all'
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ deplibs_check_method=pass_all
+
+ if test -f /lib/ld.so.1; then
+ dynamic_linker='GNU ld.so'
+ else
+ # Only the GNU ld.so supports shared libraries on MkLinux.
+ case "$host_cpu" in
+ powerpc*) dynamic_linker=no ;;
+ *) dynamic_linker='Linux ld.so' ;;
+ esac
+ fi
+ ;;
+
+netbsd*)
+ version_type=sunos
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+ soname_spec='${libname}${release}.so$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+openbsd*)
+ version_type=sunos
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ need_version=no
+ fi
+ library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+os2*)
+ libname_spec='$name'
+ need_lib_prefix=no
+ library_names_spec='$libname.dll $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_version=no
+ soname_spec='${libname}${release}.so'
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ # this will be overridden with pass_all, but let us keep it just in case
+ deplibs_check_method='file_magic COFF format alpha shared library'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=/shlib/libc.so
+ deplibs_check_method='pass_all'
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rhapsody*)
+ version_type=sunos
+ library_names_spec='${libname}.so'
+ soname_spec='${libname}.so'
+ shlibpath_var=DYLD_LIBRARY_PATH
+ deplibs_check_method=pass_all
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=/lib/libc.so
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case "$host_vendor" in
+ sequent)
+ file_magic_cmd='/bin/file'
+ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ ncr)
+ deplibs_check_method='pass_all'
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ esac
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+ soname_spec='$libname.so.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$ac_t$dynamic_linker" 1>&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
+
+# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
+# configure.in, otherwise build static only libraries.
+case "$host_os" in
+cygwin* | mingw* | os2*)
+ if test x$can_build_shared = xyes; then
+ test x$enable_win32_dll = xno && can_build_shared=no
+ echo "checking if package supports dlls... $can_build_shared" 1>&6
+ fi
+;;
+esac
+
+if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
+ case "$deplibs_check_method" in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ egrep "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+ fi ;;
+ esac
+fi
+
+echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4*)
+ test "$enable_shared" = yes && enable_static=no
+ ;;
+esac
+
+echo "$ac_t$enable_shared" 1>&6
+
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+
+echo "checking whether to build static libraries... $enable_static" 1>&6
+
+if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+echo $ac_n "checking for objdir... $ac_c" 1>&6
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+echo "$ac_t$objdir" 1>&6
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
+ lt_cv_dlopen=no lt_cv_dlopen_libs=
+echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
+echo "$progname:2248: checking for dlopen in -ldl" >&5
+ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldl $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2256 "ltconfig"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen();
+
+int main() {
+dlopen()
+; return 0; }
+EOF
+if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dlopen""... $ac_c" 1>&6
+echo "$progname:2288: checking for dlopen" >&5
+if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2293 "ltconfig"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+dlopen();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_dlopen=yes"
+else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_dlopen=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="dlopen"
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
+echo "$progname:2335: checking for dld_link in -ldld" >&5
+ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldld $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2343 "ltconfig"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link();
+
+int main() {
+dld_link()
+; return 0; }
+EOF
+if { (eval echo $progname:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for shl_load""... $ac_c" 1>&6
+echo "$progname:2375: checking for shl_load" >&5
+if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2380 "ltconfig"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+shl_load();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_shl_load=yes"
+else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_shl_load=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="shl_load"
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
+echo "$progname:2423: checking for shl_load in -ldld" >&5
+ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldld $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2431 "ltconfig"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load();
+
+int main() {
+shl_load()
+; return 0; }
+EOF
+if { (eval echo $progname:2445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+fi
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ fi
+
+ case "$lt_cv_dlopen" in
+ dlopen)
+for ac_hdr in dlfcn.h; do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "$progname:2488: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2493 "ltconfig"
+#include <$ac_hdr>
+int fnord = 0;
+EOF
+ac_try="$ac_compile >/dev/null 2>conftest.out"
+{ (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+ if test "x$ac_cv_header_dlfcn_h" = xyes; then
+ CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+ fi
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
+echo "$progname:2526: checking whether a program can dlopen itself" >&5
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ lt_cv_dlopen_self=cross
+ else
+ cat > conftest.c <<EOF
+#line 2534 "ltconfig"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LTDL_GLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LTDL_GLOBAL DL_GLOBAL
+# else
+# define LTDL_GLOBAL 0
+# endif
+#endif
+
+/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LTDL_LAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LTDL_LAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LTDL_LAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LTDL_LAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LTDL_LAZY_OR_NOW DL_NOW
+# else
+# define LTDL_LAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+fnord() { int i=42;}
+main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
+ if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
+ if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
+
+EOF
+if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+ lt_cv_dlopen_self=yes
+else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ lt_cv_dlopen_self=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$lt_cv_dlopen_self" 1>&6
+
+ if test "$lt_cv_dlopen_self" = yes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
+echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ lt_cv_dlopen_self_static=cross
+ else
+ cat > conftest.c <<EOF
+#line 2607 "ltconfig"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LTDL_GLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LTDL_GLOBAL DL_GLOBAL
+# else
+# define LTDL_GLOBAL 0
+# endif
+#endif
+
+/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LTDL_LAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LTDL_LAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LTDL_LAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LTDL_LAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LTDL_LAZY_OR_NOW DL_NOW
+# else
+# define LTDL_LAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+fnord() { int i=42;}
+main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
+ if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
+ if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
+
+EOF
+if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+ lt_cv_dlopen_self_static=yes
+else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ lt_cv_dlopen_self_static=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
+fi
+ ;;
+ esac
+
+ case "$lt_cv_dlopen_self" in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case "$lt_cv_dlopen_self_static" in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+# Copy echo and quote the copy, instead of the original, because it is
+# used later.
+ltecho="$echo"
+if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ ltecho="$CONFIG_SHELL \$0 --fallback-echo"
+fi
+LTSHELL="$SHELL"
+
+LTCONFIG_VERSION="$VERSION"
+
+# Only quote variables if we're using ltmain.sh.
+case "$ltmain" in
+*.sh)
+ # Now quote all the things that may contain metacharacters.
+ for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
+ old_LD old_LDFLAGS old_LIBS \
+ old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
+ AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
+ reload_flag reload_cmds wl \
+ pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+ thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+ library_names_spec soname_spec \
+ RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+ old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \
+ file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \
+ finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+ hardcode_libdir_flag_spec hardcode_libdir_separator \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+ case "$var" in
+ reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case "$ltecho" in
+ *'\$0 --fallback-echo"')
+ ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+ trap "$rm \"$ofile\"; exit 1" 1 2 15
+ echo "creating $ofile"
+ $rm "$ofile"
+ cat <<EOF > "$ofile"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
+#
+# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+### BEGIN LIBTOOL CONFIG
+EOF
+ cfgfile="$ofile"
+ ;;
+
+*)
+ # Double-quote the variables that need it (for aesthetics).
+ for var in old_CC old_CFLAGS old_CPPFLAGS \
+ old_LD old_LDFLAGS old_LIBS \
+ old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
+ eval "$var=\\\"\$var\\\""
+ done
+
+ # Just create a config file.
+ cfgfile="$ofile.cfg"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ echo "creating $cfgfile"
+ $rm "$cfgfile"
+ cat <<EOF > "$cfgfile"
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+EOF
+ ;;
+esac
+
+cat <<EOF >> "$cfgfile"
+# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
+# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
+# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
+# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
+# $0$ltconfig_args
+#
+# Compiler and other test output produced by $progname, useful for
+# debugging $progname, is in ./config.log if it exists.
+
+# The version of $progname that generated this script.
+LTCONFIG_VERSION=$LTCONFIG_VERSION
+
+# Shell to use when invoking shell scripts.
+SHELL=$LTSHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$ltecho
+
+# The archiver.
+AR=$AR
+
+# The default C compiler.
+CC=$CC
+
+# The linker used to build libraries.
+LD=$LD
+
+# Whether we need hard or soft links.
+LN_S=$LN_S
+
+# A BSD-compatible nm program.
+NM=$NM
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$reload_flag
+reload_cmds=$reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$wl
+
+# Object file suffix (normally "o").
+objext="$objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$pic_flag
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$RANLIB
+old_archive_cmds=$old_archive_cmds
+old_postinstall_cmds=$old_postinstall_cmds
+old_postuninstall_cmds=$old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$old_archive_from_new_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$archive_cmds
+archive_expsym_cmds=$archive_expsym_cmds
+postinstall_cmds=$postinstall_cmds
+postuninstall_cmds=$postuninstall_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$global_symbol_to_cdecl
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$include_expsyms
+
+EOF
+
+case "$ltmain" in
+*.sh)
+ echo '### END LIBTOOL CONFIG' >> "$ofile"
+ echo >> "$ofile"
+ case "$host_os" in
+ aix3*)
+ cat <<\EOF >> "$ofile"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ # Append the ltmain.sh script.
+ sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+
+ chmod +x "$ofile"
+ ;;
+
+*)
+ # Compile the libtool program.
+ echo "FIXME: would compile $ltmain"
+ ;;
+esac
+
+test -n "$cache_file" || exit 0
+
+# AC_CACHE_SAVE
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+exit 0
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100644
index 0000000..5b79699
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,6299 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun configure.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003
+# Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Check that we have a working $echo.
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell, and then maybe $echo will work.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit 0
+fi
+
+# define SED for historic ltconfig's generated by Libtool 1.3
+test -z "$SED" && SED=sed
+
+# The name of this program.
+progname=`$echo "$0" | ${SED} 's%^.*/%%'`
+modename="$progname"
+
+# Constants.
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.5
+TIMESTAMP=" (1.1220.2.1 2003/04/14 22:48:00)"
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+# test EBCDIC or ASCII
+case `echo A|od -x` in
+ *[Cc]1*) # EBCDIC based system
+ SP2NL="tr '\100' '\n'"
+ NL2SP="tr '\r\n' '\100\100'"
+ ;;
+ *) # Assume ASCII based system
+ SP2NL="tr '\040' '\012'"
+ NL2SP="tr '\015\012' '\040\040'"
+ ;;
+esac
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+ save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+ save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+# Make sure IFS has a sensible default
+: ${IFS=" "}
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ $echo "$modename: not configured to build any kind of library" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit 1
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+win32_libid () {
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+ grep -E 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 | \
+ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
+ if test "X$win32_nmres" = "Ximport" ; then
+ win32_libid_type="x86 archive import"
+ else
+ win32_libid_type="x86 archive static"
+ fi
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $echo $win32_libid_type
+}
+
+# End of Shell function definitions
+#####################################
+
+# Parse our command line options once, thoroughly.
+while test "$#" -gt 0
+do
+ arg="$1"
+ shift
+
+ case $arg in
+ -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ execute_dlfiles)
+ execute_dlfiles="$execute_dlfiles $arg"
+ ;;
+ tag)
+ tagname="$arg"
+
+ # Check whether tagname contains only valid characters
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ $echo "$progname: invalid tag name: $tagname" 1>&2
+ exit 1
+ ;;
+ esac
+
+ case $tagname in
+ CC)
+ # Don't test for the "default" C tag, as we know, it's there, but
+ # not specially marked.
+ ;;
+ *)
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then
+ taglist="$taglist $tagname"
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`"
+ else
+ $echo "$progname: ignoring unknown tag $tagname" 1>&2
+ fi
+ ;;
+ esac
+ ;;
+ *)
+ eval "$prev=\$arg"
+ ;;
+ esac
+
+ prev=
+ prevopt=
+ continue
+ fi
+
+ # Have we seen a non-optional argument yet?
+ case $arg in
+ --help)
+ show_help=yes
+ ;;
+
+ --version)
+ $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+ $echo
+ $echo "Copyright (C) 2003 Free Software Foundation, Inc."
+ $echo "This is free software; see the source for copying conditions. There is NO"
+ $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ exit 0
+ ;;
+
+ --config)
+ ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0"
+ done
+ exit 0
+ ;;
+
+ --debug)
+ $echo "$progname: enabling shell trace mode"
+ set -x
+ ;;
+
+ --dry-run | -n)
+ run=:
+ ;;
+
+ --features)
+ $echo "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ $echo "enable shared libraries"
+ else
+ $echo "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ $echo "enable static libraries"
+ else
+ $echo "disable static libraries"
+ fi
+ exit 0
+ ;;
+
+ --finish) mode="finish" ;;
+
+ --mode) prevopt="--mode" prev=mode ;;
+ --mode=*) mode="$optarg" ;;
+
+ --preserve-dup-deps) duplicate_deps="yes" ;;
+
+ --quiet | --silent)
+ show=:
+ ;;
+
+ --tag) prevopt="--tag" prev=tag ;;
+ --tag=*)
+ set tag "$optarg" ${1+"$@"}
+ shift
+ prev=tag
+ ;;
+
+ -dlopen)
+ prevopt="-dlopen"
+ prev=execute_dlfiles
+ ;;
+
+ -*)
+ $echo "$modename: unrecognized option \`$arg'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+
+ *)
+ nonopt="$arg"
+ break
+ ;;
+ esac
+done
+
+if test -n "$prevopt"; then
+ $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+fi
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+if test -z "$show_help"; then
+
+ # Infer the operation mode.
+ if test -z "$mode"; then
+ $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+ $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
+ case $nonopt in
+ *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
+ mode=link
+ for arg
+ do
+ case $arg in
+ -c)
+ mode=compile
+ break
+ ;;
+ esac
+ done
+ ;;
+ *db | *dbx | *strace | *truss)
+ mode=execute
+ ;;
+ *install*|cp|mv)
+ mode=install
+ ;;
+ *rm)
+ mode=uninstall
+ ;;
+ *)
+ # If we have no mode, but dlfiles were specified, then do execute mode.
+ test -n "$execute_dlfiles" && mode=execute
+
+ # Just use the default operation mode.
+ if test -z "$mode"; then
+ if test -n "$nonopt"; then
+ $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+ else
+ $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+ fi
+ fi
+ ;;
+ esac
+ fi
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
+ $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$modename --help --mode=$mode' for more information."
+
+ # These modes are in order of execution frequency so that they run quickly.
+ case $mode in
+ # libtool compile mode
+ compile)
+ modename="$modename: compile"
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
+ suppress_output=
+ arg_mode=normal
+ libobj=
+
+ for arg
+ do
+ case "$arg_mode" in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj="$arg"
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ if test -n "$libobj" ; then
+ $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+ exit 1
+ fi
+ arg_mode=target
+ continue
+ ;;
+
+ -static)
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ lastarg="$lastarg $arg"
+ done
+ IFS="$save_ifs"
+ lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+ # Add the arguments to base_compile.
+ base_compile="$base_compile $lastarg"
+ continue
+ ;;
+
+ * )
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+ case $lastarg in
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ lastarg="\"$lastarg\""
+ ;;
+ esac
+
+ base_compile="$base_compile $lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ $echo "$modename: you must specify an argument for -Xcompile"
+ exit 1
+ ;;
+ target)
+ $echo "$modename: you must specify a target with \`-o'" 1>&2
+ exit 1
+ ;;
+ *)
+ # Get the name of the library object.
+ [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ xform='[cCFSifmso]'
+ case $libobj in
+ *.ada) xform=ada ;;
+ *.adb) xform=adb ;;
+ *.ads) xform=ads ;;
+ *.asm) xform=asm ;;
+ *.c++) xform=c++ ;;
+ *.cc) xform=cc ;;
+ *.ii) xform=ii ;;
+ *.class) xform=class ;;
+ *.cpp) xform=cpp ;;
+ *.cxx) xform=cxx ;;
+ *.f90) xform=f90 ;;
+ *.for) xform=for ;;
+ *.java) xform=java ;;
+ esac
+
+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+ case $libobj in
+ *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+ *)
+ $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+ exit 1
+ ;;
+ esac
+
+ # Infer tagged configuration to use if any are available and
+ # if one wasn't chosen via the "--tag" command line option.
+ # Only attempt this if the compiler in the base compile
+ # command doesn't match the default compiler.
+ if test -n "$available_tags" && test -z "$tagname"; then
+ case $base_compile in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
+ case "$base_compile " in
+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+ exit 1
+# else
+# $echo "$modename: using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+
+ objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$obj"; then
+ xdir=
+ else
+ xdir=$xdir/
+ fi
+ lobj=${xdir}$objdir/$objname
+
+ if test -z "$base_compile"; then
+ $echo "$modename: you must specify a compilation command" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Delete any leftover library objects.
+ if test "$build_old_libs" = yes; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ $run $rm $removelist
+ trap "$run $rm $removelist; exit 1" 1 2 15
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2*)
+ pic_mode=default
+ ;;
+ esac
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test "$compiler_c_o" = no; then
+ output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ lockfile="$output_obj.lock"
+ removelist="$removelist $output_obj $lockfile"
+ trap "$run $rm $removelist; exit 1" 1 2 15
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test "$need_locks" = yes; then
+ until $run ln "$0" "$lockfile" 2>/dev/null; do
+ $show "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test "$need_locks" = warn; then
+ if test -f "$lockfile"; then
+ $echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit 1
+ fi
+ $echo $srcfile > "$lockfile"
+ fi
+
+ if test -n "$fix_srcfile_path"; then
+ eval srcfile=\"$fix_srcfile_path\"
+ fi
+
+ $run $rm "$libobj" "${libobj}T"
+
+ # Create a libtool object file (analogous to a ".la" file),
+ # but don't create it if we're doing a dry run.
+ test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test "$build_libtool_libs" = yes; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test "$pic_mode" != no; then
+ command="$base_compile $srcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ fi
+
+ if test ! -d "${xdir}$objdir"; then
+ $show "$mkdir ${xdir}$objdir"
+ $run $mkdir ${xdir}$objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
+ exit $status
+ fi
+ fi
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
+ fi
+
+ $run $rm "$lobj" "$output_obj"
+
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ test -n "$output_obj" && $run $rm $removelist
+ exit 1
+ fi
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit 1
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ $show "$mv $output_obj $lobj"
+ if $run $mv $output_obj $lobj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Append the name of the PIC object to the libtool object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object='$objdir/$objname'
+
+EOF
+
+ # Allow error messages only from the first compilation.
+ suppress_output=' >/dev/null 2>&1'
+ else
+ # No PIC object so indicate it doesn't exist in the libtool
+ # object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
+
+EOF
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test "$build_old_libs" = yes; then
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ else
+ command="$base_compile $srcfile $pic_flag"
+ fi
+ if test "$compiler_c_o" = yes; then
+ command="$command -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ command="$command$suppress_output"
+ $run $rm "$obj" "$output_obj"
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ $run $rm $removelist
+ exit 1
+ fi
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit 1
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ $show "$mv $output_obj $obj"
+ if $run $mv $output_obj $obj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+ else
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
+ fi
+
+ $run $mv "${libobj}T" "${libobj}"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ $run $rm "$lockfile"
+ fi
+
+ exit 0
+ ;;
+
+ # libtool link mode
+ link | relink)
+ modename="$modename: link"
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # which system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll which has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args="$nonopt"
+ base_compile="$nonopt"
+ compile_command="$nonopt"
+ finalize_command="$nonopt"
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+
+ avoid_version=no
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ non_pic_objects=
+ prefer_static_libs=no
+ preload=no
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -all-static | -static)
+ if test "X$arg" = "X-all-static"; then
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ else
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ fi
+ build_libtool_libs=no
+ build_old_libs=yes
+ prefer_static_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg="$1"
+ base_compile="$base_compile $arg"
+ shift
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+ ;;
+ *) qarg=$arg ;;
+ esac
+ libtool_args="$libtool_args $qarg"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ compile_command="$compile_command @OUTPUT@"
+ finalize_command="$finalize_command @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ compile_command="$compile_command @SYMFILE@"
+ finalize_command="$finalize_command @SYMFILE@"
+ preload=yes
+ fi
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test "$prev" = dlprefiles; then
+ dlself=yes
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+ dlfiles="$dlfiles $arg"
+ else
+ dlprefiles="$dlprefiles $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols="$arg"
+ if test ! -f "$arg"; then
+ $echo "$modename: symbol file \`$arg' does not exist"
+ exit 1
+ fi
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat $save_arg`
+ do
+# moreargs="$moreargs $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit 1
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit 1
+ else
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ fi
+ fi
+ done
+ else
+ $echo "$modename: link input file \`$save_arg' does not exist"
+ exit 1
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit 1
+ ;;
+ esac
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) rpath="$rpath $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) xrpath="$xrpath $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ compile_command="$compile_command $wl$qarg"
+ finalize_command="$finalize_command $wl$qarg"
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg="$arg"
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ compile_command="$compile_command $link_static_flag"
+ finalize_command="$finalize_command $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+ continue
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ $echo "$modename: more than one -exported-symbols argument is not allowed"
+ exit 1
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+ exit 1
+ fi
+ dir="$absdir"
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "*) ;;
+ *)
+ deplibs="$deplibs -L$dir"
+ lib_search_path="$lib_search_path $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-pw32* | *-*-beos*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-mingw* | *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ deplibs="$deplibs -framework System"
+ continue
+ esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ deplibs="$deplibs $arg"
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # gcc -m* arguments should be passed to the linker via $compiler_flags
+ # in order to pass architecture information to the linker
+ # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo
+ # but this is not reliable with gcc because gcc may use -mfoo to
+ # select a different linker, different libraries, etc, while
+ # -Wl,-mfoo simply passes -mfoo to the linker.
+ -m*)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ if test "$with_gcc" = "yes" ; then
+ compiler_flags="$compiler_flags $arg"
+ fi
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # in order for the loader to find any dlls it needs.
+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit 1
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ continue
+ ;;
+
+ -static)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Wl,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $wl$flag"
+ linker_flags="$linker_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ ;;
+
+ *.$objext)
+ # A standard object.
+ objs="$objs $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit 1
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit 1
+ else
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+ old_deplibs="$old_deplibs $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ dlfiles="$dlfiles $arg"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ dlprefiles="$dlprefiles $arg"
+ prev=
+ else
+ deplibs="$deplibs $arg"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+ done # argument parsing loop
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Infer tagged configuration to use if any are available and
+ # if one wasn't chosen via the "--tag" command line option.
+ # Only attempt this if the compiler in the base link
+ # command doesn't match the default compiler.
+ if test -n "$available_tags" && test -z "$tagname"; then
+ case $base_compile in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
+ case $base_compile in
+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
+ # The compiler in $compile_command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+ exit 1
+# else
+# $echo "$modename: using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$output_objdir" = "X$output"; then
+ output_objdir="$objdir"
+ else
+ output_objdir="$output_objdir/$objdir"
+ fi
+ # Create the object directory.
+ if test ! -d "$output_objdir"; then
+ $show "$mkdir $output_objdir"
+ $run $mkdir $output_objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$output_objdir"; then
+ exit $status
+ fi
+ fi
+
+ # Determine the type of output
+ case $output in
+ "")
+ $echo "$modename: you must specify an output file" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ case $host in
+ *cygwin* | *mingw* | *pw32*)
+ # don't eliminate duplcations in $postdeps and $predeps
+ duplicate_compiler_generated_deps=yes
+ ;;
+ *)
+ duplicate_compiler_generated_deps=$duplicate_deps
+ ;;
+ esac
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ libs="$libs $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+ case $linkmode in
+ lib)
+ passes="conv link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+ for pass in $passes; do
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+ continue
+ fi
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+ for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}.la"
+ if test -f "$lib"; then
+ found=yes
+ break
+ fi
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if (${SED} -e '2q' $lib |
+ grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ library_names=
+ old_library=
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ fi
+ ;; # -l
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ ;;
+ prog)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test "$pass" = scan; then
+ deplibs="$deplib $deplibs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ ;;
+ *)
+ $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ if test "$deplibs_check_method" != pass_all; then
+ $echo
+ $echo "*** Warning: Trying to link with static lib archive $deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because the file extensions .$libext of this argument makes me believe"
+ $echo "*** that it is just a static archive that I should not used here."
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the"
+ $echo "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ continue
+ ;;
+ prog)
+ if test "$pass" != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+ if test "$found" = yes || test -f "$lib"; then :
+ else
+ $echo "$modename: cannot find the library \`$lib'" 1>&2
+ exit 1
+ fi
+
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+
+ # Read the .la file
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit 1
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ $echo "$modename: \`$lib' is not a convenience library" 1>&2
+ exit 1
+ fi
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ for l in $old_library $library_names; do
+ linklib="$l"
+ done
+ if test -z "$linklib"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit 1
+ fi
+
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+ exit 1
+ fi
+ if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ dlprefiles="$dlprefiles $lib $dependency_libs"
+ else
+ newdlfiles="$newdlfiles $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+ $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ $echo "$modename: warning: library \`$lib' was moved." 1>&2
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+ dir="$libdir"
+ absdir="$libdir"
+ fi
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi # $installed = yes
+ name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+ exit 1
+ fi
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ newdlprefiles="$newdlprefiles $dir/$dlname"
+ else
+ newdlprefiles="$newdlprefiles $dir/$linklib"
+ fi
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test "$linkmode" = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+ newlib_search_path="$newlib_search_path $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+ esac
+ # Need to link against all dependency_libs?
+ if test "$linkalldeplibs" = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var"; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath " in
+ *" $dir "*) ;;
+ *" $absdir "*) ;;
+ *) temp_rpath="$temp_rpath $dir" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some systems (darwin)
+ if test "$shouldnotlink" = yes && test "$pass" = link ; then
+ $echo
+ if test "$linkmode" = prog; then
+ $echo "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $echo "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $echo "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+ libname=`eval \\$echo \"$libname_spec\"`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw*)
+ major=`expr $current - $age`
+ versuffix="-$major"
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+ newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ $show "extracting exported symbol list from \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ eval cmds=\"$extract_expsyms_cmds\"
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ $show "generating import library for \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ eval cmds=\"$old_archive_from_expsyms_cmds\"
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test "$linkmode" = prog || test "$mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5* ) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a module then we can not link against it, someone
+ # is ignoring the new warnings I added
+ if /usr/bin/file -L $add 2> /dev/null | grep "bundle" >/dev/null ; then
+ $echo "** Warning, lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ $echo
+ $echo "** And there doesn't seem to be a static archive available"
+ $echo "** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ $echo "$modename: configuration error: unsupported hardcode properties"
+ exit 1
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+ esac
+ fi
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes && \
+ test "$hardcode_minus_L" != yes && \
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test "$linkmode" = prog || test "$mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test "$hardcode_direct" = yes; then
+ add="$libdir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$libdir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ fi
+
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test "$linkmode" = prog; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test "$hardcode_direct" != unsupported; then
+ test -n "$old_library" && linklib="$old_library"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ $echo
+ $echo "*** Warning: This system can not link to static lib archive $lib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ $echo "*** But as you try to build a module library, libtool will still create "
+ $echo "*** a static module, that should work as long as the dlopening application"
+ $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ convenience="$convenience $dir/$old_library"
+ old_convenience="$old_convenience $dir/$old_library"
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test "$linkmode" = lib; then
+ if test -n "$dependency_libs" &&
+ { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes ||
+ test "$link_static" = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) xrpath="$xrpath $temp_xrpath";;
+ esac;;
+ *) temp_deplibs="$temp_deplibs $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ fi
+
+ newlib_search_path="$newlib_search_path $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$deplib" && dir="."
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if grep "^installed=no" $deplib > /dev/null; then
+ path="$absdir/$objdir"
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ if test "$absdir" != "$libdir"; then
+ $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+ fi
+ path="$absdir"
+ fi
+ depdepl=
+ case $host in
+ *-*-darwin*)
+ # we do not want to link against static libs, but need to link against shared
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$path/$depdepl" ; then
+ depdepl="$path/$depdepl"
+ fi
+ newlib_search_path="$newlib_search_path $path"
+ path=""
+ fi
+ ;;
+ *)
+ path="-L$path"
+ ;;
+ esac
+
+ ;;
+ -l*)
+ case $host in
+ *-*-darwin*)
+ # Again, we only want to link against shared libraries
+ eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
+ for tmp in $newlib_search_path ; do
+ if test -f "$tmp/lib$tmp_libs.dylib" ; then
+ eval depdepl="$tmp/lib$tmp_libs.dylib"
+ break
+ fi
+ done
+ path=""
+ ;;
+ *) continue ;;
+ esac
+ ;;
+ *) continue ;;
+ esac
+ case " $deplibs " in
+ *" $depdepl "*) ;;
+ *) deplibs="$deplibs $depdepl" ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$deplibs $path" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
+
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+ # Last step: remove runtime libs from dependency_libs (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ tmp_libs="$tmp_libs $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test "$linkmode" = prog; then
+ dlfiles="$newdlfiles"
+ dlprefiles="$newdlprefiles"
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+ fi
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+ objs="$objs$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form `libNAME.la'.
+ case $outputname in
+ lib*)
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ eval shared_ext=\"$shrext\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ if test "$module" = no; then
+ $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ eval shared_ext=\"$shrext\"
+ eval libname=\"$libname_spec\"
+ else
+ libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test "$deplibs_check_method" != pass_all; then
+ $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+ exit 1
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the non-libtool"
+ $echo "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
+ fi
+
+ if test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
+ fi
+
+ set dummy $rpath
+ if test "$#" -gt 2; then
+ $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+ fi
+ install_libdir="$2"
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test "$build_libtool_libs" = yes; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a `.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+ fi
+ else
+
+ # Parse the version information argument.
+ save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ IFS="$save_ifs"
+
+ if test -n "$8"; then
+ $echo "$modename: too many parameters to \`-version-info'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$2"
+ number_minor="$3"
+ number_revision="$4"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ darwin|linux|osf|windows)
+ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ current=`expr $number_major + $number_minor - 1`
+ age="$number_minor"
+ revision="$number_minor"
+ ;;
+ esac
+ ;;
+ no)
+ current="$2"
+ revision="$3"
+ age="$4"
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ [0-9]*) ;;
+ *)
+ $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ ;;
+ esac
+
+ case $revision in
+ [0-9]*) ;;
+ *)
+ $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ ;;
+ esac
+
+ case $age in
+ [0-9]*) ;;
+ *)
+ $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ minor_current=`expr $current + 1`
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current";
+ ;;
+
+ irix | nonstopux)
+ major=`expr $current - $age + 1`
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test "$loop" -ne 0; do
+ iface=`expr $revision - $loop`
+ loop=`expr $loop - 1`
+ verstring="$verstring_prefix$major.$iface:$verstring"
+ done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
+ ;;
+
+ linux)
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ major=.`expr $current - $age`
+ versuffix=".$current.$age.$revision"
+ verstring="$current.$age.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test "$loop" -ne 0; do
+ iface=`expr $current - $loop`
+ loop=`expr $loop - 1`
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ verstring="$verstring:${current}.0"
+ ;;
+
+ sunos)
+ major=".$current"
+ versuffix=".$current.$revision"
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
+ major=`expr $current - $age`
+ versuffix="-$major"
+ ;;
+
+ *)
+ $echo "$modename: unknown library version type \`$version_type'" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit 1
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
+ if test "$need_version" = no; then
+ versuffix=
+ else
+ versuffix=".0.0"
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test "$avoid_version" = yes && test "$need_version" = no; then
+ major=
+ versuffix=
+ verstring=""
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test "$allow_undefined" = yes; then
+ if test "$allow_undefined_flag" = unsupported; then
+ $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag="$no_undefined_flag"
+ fi
+ fi
+
+ if test "$mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$echo "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ removelist="$removelist $p"
+ ;;
+ *) ;;
+ esac
+ done
+ if test -n "$removelist"; then
+ $show "${rm}r $removelist"
+ $run ${rm}r $removelist
+ fi
+ fi
+
+ # Now set the variables for building old libraries.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ for path in $notinst_path; do
+ lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+ deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+ dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+ done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ temp_xrpath="$temp_xrpath -R$libdir"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) dlfiles="$dlfiles $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) dlprefiles="$dlprefiles $lib" ;;
+ esac
+ done
+
+ if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs -framework System"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=""
+ versuffix=""
+ major=""
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $rm conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $rm conftest
+ $LTCC -o conftest conftest.c $deplibs
+ if test "$?" -eq 0 ; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" -ne "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which I believe you do not have"
+ $echo "*** because a test_compile did reveal that the linker did not use it for"
+ $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ else
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ $rm conftest
+ $LTCC -o conftest conftest.c $i
+ # Did it work?
+ if test "$?" -eq 0 ; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because a test_compile did reveal that the linker did not use this one"
+ $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning! Library $i is needed by this library but I was not able to"
+ $echo "*** make it link in! You will probably need to install it or some"
+ $echo "*** library that it depends on before this library will be fully"
+ $echo "*** functional. Installing it before continuing would be even better."
+ fi
+ else
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method
+ file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null \
+ | grep " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib="$potent_lib"
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+ *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+ | ${SED} 10q \
+ | $EGREP "$file_magic_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method
+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test -n "$name" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval $echo \"$potent_lib\" 2>/dev/null \
+ | ${SED} 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=""
+ tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+ -e 's/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+ done
+ fi
+ if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
+ | grep . >/dev/null; then
+ $echo
+ if test "X$deplibs_check_method" = "Xnone"; then
+ $echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ $echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ $echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ fi
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
+ if test "$droppeddeps" = yes; then
+ if test "$module" = yes; then
+ $echo
+ $echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $echo "*** dependencies of module $libname. Therefore, libtool will create"
+ $echo "*** a static module, that should work as long as the dlopening"
+ $echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ $echo "*** The inter-library dependencies that have been dropped here will be"
+ $echo "*** automatically added whenever a program is linked with this library"
+ $echo "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ $echo
+ $echo "*** Since this library must not contain undefined symbols,"
+ $echo "*** because either the platform does not support them or"
+ $echo "*** it was explicitly requested with -no-undefined,"
+ $echo "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test "$build_libtool_libs" = yes; then
+ if test "$hardcode_into_libs" = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib="$output_objdir/$realname"
+ for link
+ do
+ linknames="$linknames $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ eval cmds=\"$export_symbols_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ if len=`expr "X$cmd" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ $show "using reloadable object file for export list..."
+ skipped_export=:
+ fi
+ done
+ IFS="$save_ifs"
+ if test -n "$export_symbols_regex"; then
+ $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+ $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+ $run eval '$mv "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ tmp_deplibs="$tmp_deplibs $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${outputname}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case $xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+
+ libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ linker_flags="$linker_flags $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval cmds=\"$module_expsym_cmds\"
+ else
+ eval cmds=\"$module_cmds\"
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval cmds=\"$archive_expsym_cmds\"
+ else
+ eval cmds=\"$archive_cmds\"
+ fi
+ fi
+
+ if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise.
+ $echo "creating reloadable object files..."
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ delfiles=
+ last_robj=
+ k=1
+ output=$output_objdir/$save_output-${k}.$objext
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+ if test "X$objlist" = X ||
+ { len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; }; then
+ objlist="$objlist $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+ fi
+ last_robj=$output_objdir/$save_output-${k}.$objext
+ k=`expr $k + 1`
+ output=$output_objdir/$save_output-${k}.$objext
+ objlist=$obj
+ len=1
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+ if ${skipped_export-false}; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+ fi
+
+ # Set up a command to remove the reloadale object files
+ # after they are used.
+ i=0
+ while test "$i" -lt "$k"
+ do
+ i=`expr $i + 1`
+ delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
+ done
+
+ $echo "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval cmds=\"$archive_expsym_cmds\"
+ else
+ eval cmds=\"$archive_cmds\"
+ fi
+
+ # Append the command to remove the reloadable object files
+ # to the just-reset $cmds.
+ eval cmds=\"\$cmds~$rm $delfiles\"
+ fi
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+ exit 0
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test "$module" = yes || test "$export_dynamic" = yes; then
+ # On all known operating systems, these are identical.
+ dlname="$soname"
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+ fi
+
+ case $output in
+ *.lo)
+ if test -n "$objs$old_deplibs"; then
+ $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+ exit 1
+ fi
+ libobj="$output"
+ obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $run $rm $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${obj}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case $xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+
+ reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ fi
+
+ # Create the old-style object.
+ reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+ output="$obj"
+ eval cmds=\"$reload_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit 0
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $run eval "echo timestamp > $libobj" || exit $?
+ exit 0
+ fi
+
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output="$libobj"
+ eval cmds=\"$reload_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit 0
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+ esac
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+ fi
+
+ if test "$preload" = yes; then
+ if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+ test "$dlopen_self_static" = unknown; then
+ $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+ fi
+ fi
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
+ case $host in
+ *darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ if test "$tagname" = CXX ; then
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ fi
+ ;;
+ esac
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath="$rpath"
+
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ fi
+
+ dlsyms=
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ dlsyms="${outputname}S.c"
+ else
+ $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+ fi
+ fi
+
+ if test -n "$dlsyms"; then
+ case $dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${outputname}.nm"
+
+ $show "$rm $nlist ${nlist}S ${nlist}T"
+ $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+ # Parse the name list into a source file.
+ $show "creating $output_objdir/$dlsyms"
+
+ test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ $show "generating symbol list for \`$output'"
+
+ test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ for arg in $progfiles; do
+ $show "extracting global C symbols from \`$arg'"
+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ $run eval '$mv "$nlist"T "$nlist"'
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ $run eval '$mv "$nlist"T "$nlist"'
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$output.exp"
+ $run $rm $export_symbols
+ $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ else
+ $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+ $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
+ $run eval 'mv "$nlist"T "$nlist"'
+ fi
+ fi
+
+ for arg in $dlprefiles; do
+ $show "extracting global C symbols from \`$arg'"
+ name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+ $run eval '$echo ": $name " >> "$nlist"'
+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -z "$run"; then
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $mv "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if grep -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ grep -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+ else
+ $echo '/* NONE */' >> "$output_objdir/$dlsyms"
+ fi
+
+ $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
+
+ $echo >> "$output_objdir/$dlsyms" "\
+ {0, (lt_ptr) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ fi
+
+ pic_flag_for_symtable=
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ case "$compile_command " in
+ *" -static "*) ;;
+ *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
+ esac;;
+ *-*-hpux*)
+ case "$compile_command " in
+ *" -static "*) ;;
+ *) pic_flag_for_symtable=" $pic_flag";;
+ esac
+ esac
+
+ # Now compile the dynamic symbol file.
+ $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+ $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+ # Clean up the generated files.
+ $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+ $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+ # Transform the symbol file into the correct name.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ ;;
+ *)
+ $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+ exit 1
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ fi
+
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ # Replace the output file specification.
+ compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ $show "$link_command"
+ $run eval "$link_command"
+ status=$?
+
+ # Delete the generated files.
+ if test -n "$dlsyms"; then
+ $show "$rm $output_objdir/${outputname}S.${objext}"
+ $run $rm "$output_objdir/${outputname}S.${objext}"
+ fi
+
+ exit $status
+ fi
+
+ if test -n "$shlibpath_var"; then
+ # We should set the shlibpath_var
+ rpath=
+ for dir in $temp_rpath; do
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*)
+ # Absolute path.
+ rpath="$rpath$dir:"
+ ;;
+ *)
+ # Relative path: add a thisdir entry.
+ rpath="$rpath\$thisdir/$dir:"
+ ;;
+ esac
+ done
+ temp_rpath="$rpath"
+ fi
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $run $rm $output
+ # Link the executable and exit
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+ exit 0
+ fi
+
+ if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+ $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+ $echo "$modename: \`$output' will be relinked during installation" 1>&2
+ else
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+
+ # Now create the wrapper script.
+ $show "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Quote $echo for shipping.
+ if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
+ case $0 in
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
+ *) qecho="$SHELL `pwd`/$0 --fallback-echo";;
+ esac
+ qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+ else
+ qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if our run command is non-null.
+ if test -z "$run"; then
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ cwrappersource=`$echo ${objdir}/lt-${output}.c`
+ cwrapper=`$echo ${output}.exe`
+ $rm $cwrappersource $cwrapper
+ trap "$rm $cwrappersource $cwrapper; exit 1" 1 2 15
+
+ cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+
+ Currently, it simply execs the wrapper *script* "/bin/sh $output",
+ but could eventually absorb all of the scripts functionality and
+ exec $objdir/$outputname directly.
+*/
+EOF
+ cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2
+#define DIR_SEPARATOR_2 '\\'
+#endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+char * basename (const char *name);
+char * fnqualify(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int i;
+
+ program_name = (char *) xstrdup ((char *) basename (argv[0]));
+ newargz = XMALLOC(char *, argc+2);
+EOF
+
+ cat >> $cwrappersource <<EOF
+ newargz[0] = "$SHELL";
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+ newargz[1] = fnqualify(argv[0]);
+ /* we know the script has the same name, without the .exe */
+ /* so make sure newargz[1] doesn't end in .exe */
+ strendzap(newargz[1],".exe");
+ for (i = 1; i < argc; i++)
+ newargz[i+1] = xstrdup(argv[i]);
+ newargz[argc+1] = NULL;
+EOF
+
+ cat >> $cwrappersource <<EOF
+ execv("$SHELL",newargz);
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void * p = (void *) malloc (num);
+ if (!p)
+ lt_fatal ("Memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+char *
+basename (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha (name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return (char *) base;
+}
+
+char *
+fnqualify(const char *path)
+{
+ size_t size;
+ char *p;
+ char tmp[LT_PATHMAX + 1];
+
+ assert(path != NULL);
+
+ /* Is it qualified already? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha (path[0]) && path[1] == ':')
+ return xstrdup (path);
+#endif
+ if (IS_DIR_SEPARATOR (path[0]))
+ return xstrdup (path);
+
+ /* prepend the current directory */
+ /* doesn't handle '~' */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
+ p = XMALLOC(char, size);
+ sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
+ return p;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert(str != NULL);
+ assert(pat != NULL);
+
+ len = strlen(str);
+ patlen = strlen(pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp(str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+ const char * message, va_list ap)
+{
+ fprintf (stderr, "%s: %s: ", program_name, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ va_end (ap);
+}
+EOF
+ # we should really use a build-platform specific compiler
+ # here, but OTOH, the wrappers (shell script and this C one)
+ # are only useful if you want to execute the "real" binary.
+ # Since the "real" binary is built for $host, then this
+ # wrapper might as well be built for $host, too.
+ $run $LTCC -s -o $cwrapper $cwrappersource
+ ;;
+ esac
+ $rm $output
+ trap "$rm $output; exit 1" 1 2 15
+
+ $echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variable:
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$echo are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ echo=\"$qecho\"
+ file=\"\$0\"
+ # Make sure echo works.
+ if test \"X\$1\" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+ # Yippee, \$echo works!
+ :
+ else
+ # Restart under the correct shell, and then maybe \$echo will work.
+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+ fi
+ fi\
+"
+ $echo >> $output "\
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+ done
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $echo >> $output "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" || \\
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $mkdir \"\$progdir\"
+ else
+ $rm \"\$progdir/\$file\"
+ fi"
+
+ $echo >> $output "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $echo \"\$relink_command_output\" >&2
+ $rm \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $rm \"\$progdir/\$program\";
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $rm \"\$progdir/\$file\"
+ fi"
+ else
+ $echo >> $output "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $echo >> $output "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $echo >> $output "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ # fixup the dll searchpath if we need to.
+ if test -n "$dllsearchpath"; then
+ $echo >> $output "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ $echo >> $output "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2*)
+ $echo >> $output "\
+ exec \$progdir\\\\\$program \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $echo >> $output "\
+ exec \$progdir/\$program \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $echo >> $output "\
+ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+ exit 1
+ fi
+ else
+ # The program doesn't exist.
+ \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+ \$echo \"This script is just a wrapper for \$program.\" 1>&2
+ $echo \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+ chmod +x $output
+ fi
+ exit 0
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ if test "$build_libtool_libs" = convenience; then
+ oldobjs="$libobjs_save"
+ addlibs="$convenience"
+ build_libtool_libs=no
+ else
+ if test "$build_libtool_libs" = module; then
+ oldobjs="$libobjs_save"
+ build_libtool_libs=no
+ else
+ oldobjs="$old_deplibs $non_pic_objects"
+ fi
+ addlibs="$old_convenience"
+ fi
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ # Add in members from convenience archives.
+ for xlib in $addlibs; do
+ # Extract the objects.
+ case $xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+
+ oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ eval cmds=\"$old_archive_from_new_cmds\"
+ else
+ eval cmds=\"$old_archive_cmds\"
+
+ if len=`expr "X$cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # the command line is too long to link in one step, link in parts
+ $echo "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ # GNU ar 2.10+ was changed to match POSIX; thus no paths are
+ # encoded into archives. This makes 'ar r' malfunction in
+ # this piecewise linking case whenever conflicting object
+ # names appear in distinct ar calls; check, warn and compensate.
+ if (for obj in $save_oldobjs
+ do
+ $echo "X$obj" | $Xsed -e 's%^.*/%%'
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
+ $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
+ AR_FLAGS=cq
+ fi
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ for obj in $save_oldobjs
+ do
+ oldobjs="$objlist $obj"
+ objlist="$objlist $obj"
+ eval test_cmds=\"$old_archive_cmds\"
+ if len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~$old_archive_cmds\"
+ fi
+ fi
+ fi
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$generated"; then
+ $show "${rm}r$generated"
+ $run ${rm}r$generated
+ fi
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
+ $show "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+
+ # Only create the output if not a dry run.
+ if test -z "$run"; then
+ for installed in no yes; do
+ if test "$installed" = yes; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+ for lib in $dlfiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdlfiles="$newdlfiles $libdir/$name"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ done
+ dlprefiles="$newdlprefiles"
+ fi
+ $rm $output
+ # place dlname in correct position for cygwin
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ esac
+ $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test "$installed" = no && test "$need_relink" = yes; then
+ $echo >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ fi
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+ $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+ ;;
+ esac
+ exit 0
+ ;;
+
+ # libtool install mode
+ install)
+ modename="$modename: install"
+
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
+ # Aesthetically quote it.
+ arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$arg "
+ arg="$1"
+ shift
+ else
+ install_prog=
+ arg="$nonopt"
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog$arg"
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ for arg
+ do
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest="$arg"
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f) prev="-f" ;;
+ -g) prev="-g" ;;
+ -m) prev="-m" ;;
+ -o) prev="-o" ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*) ;;
+
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ prev=
+ else
+ dest="$arg"
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog $arg"
+ done
+
+ if test -z "$install_prog"; then
+ $echo "$modename: you must specify an install program" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prev' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ $echo "$modename: no file or destination specified" 1>&2
+ else
+ $echo "$modename: you must specify a destination" 1>&2
+ fi
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Strip any trailing slash from the destination.
+ dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$destdir" = "X$dest" && destdir=.
+ destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files
+ if test "$#" -gt 2; then
+ $echo "$modename: \`$dest' is not a directory" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ staticlibs="$staticlibs $file"
+ ;;
+
+ *.la)
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ library_names=
+ old_library=
+ relink_command=
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) current_libdirs="$current_libdirs $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) future_libdirs="$future_libdirs $libdir" ;;
+ esac
+ fi
+
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+ test "X$dir" = "X$file/" && dir=
+ dir="$dir$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ if test "$inst_prefix_dir" = "$destdir"; then
+ $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+ exit 1
+ fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ $echo "$modename: warning: relinking \`$file'" 1>&2
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ exit 1
+ fi
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names
+ if test -n "$2"; then
+ realname="$2"
+ shift
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ $show "$install_prog $dir/$srcname $destdir/$realname"
+ $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$striplib $destdir/$realname"
+ $run eval "$striplib $destdir/$realname" || exit $?
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ for linkname
+ do
+ if test "$linkname" != "$realname"; then
+ $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ fi
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ eval cmds=\"$postinstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Install the pseudo-library for information purposes.
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ instname="$dir/$name"i
+ $show "$install_prog $instname $destdir/$name"
+ $run eval "$install_prog $instname $destdir/$name" || exit $?
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ if test -n "$destfile"; then
+ $show "$install_prog $file $destfile"
+ $run eval "$install_prog $file $destfile" || exit $?
+ fi
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+ $show "$install_prog $staticobj $staticdest"
+ $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+ fi
+ exit 0
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin*|*mingw*)
+ wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
+ notinst_deplibs=
+ relink_command=
+
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
+ esac
+
+ # Check the variables that should have been set.
+ if test -z "$notinst_deplibs"; then
+ $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
+ exit 1
+ fi
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ # If there is no directory component, then add one.
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ fi
+ libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
+ esac
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ if test "$finalize" = yes && test -z "$run"; then
+ tmpdir="/tmp"
+ test -n "$TMPDIR" && tmpdir="$TMPDIR"
+ tmpdir_mktemp=`mktemp -d $tmpdir/libtool-XXXXXX 2> /dev/null`
+ if test "$?" = 0 ; then
+ tmpdir="$tmpdir_mktemp"
+ unset tmpdir_mktemp
+ else
+ tmpdir="$tmpdir/libtool-$$"
+ fi
+ if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
+ else
+ $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+ continue
+ fi
+ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ ${rm}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ $echo "$modename: warning: cannot relink \`$file'" 1>&2
+ fi
+ else
+ # Install the binary that we compiled earlier.
+ file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyways
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+ ;;
+ esac
+ ;;
+ esac
+ $show "$install_prog$stripme $file $destfile"
+ $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+ test -n "$outputname" && ${rm}r "$tmpdir"
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ $show "$install_prog $file $oldlib"
+ $run eval "$install_prog \$file \$oldlib" || exit $?
+
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$old_striplib $oldlib"
+ $run eval "$old_striplib $oldlib" || exit $?
+ fi
+
+ # Do each command in the postinstall commands.
+ eval cmds=\"$old_postinstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$future_libdirs"; then
+ $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+ fi
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ test -n "$run" && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $0 --finish$current_libdirs'
+ else
+ exit 0
+ fi
+ ;;
+
+ # libtool finish mode
+ finish)
+ modename="$modename: finish"
+ libdirs="$nonopt"
+ admincmds=
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for dir
+ do
+ libdirs="$libdirs $dir"
+ done
+
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ eval cmds=\"$finish_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || admincmds="$admincmds
+ $cmd"
+ done
+ IFS="$save_ifs"
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $run eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ test "$show" = : && exit 0
+
+ $echo "----------------------------------------------------------------------"
+ $echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $echo " $libdir"
+ done
+ $echo
+ $echo "If you ever happen to want to link against installed libraries"
+ $echo "in a given directory, LIBDIR, you must either use libtool, and"
+ $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ $echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ $echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ $echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ $echo " - add LIBDIR to the \`$runpath_var' environment variable"
+ $echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $echo " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $echo " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ $echo
+ $echo "See any operating system documentation about shared libraries for"
+ $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ $echo "----------------------------------------------------------------------"
+ exit 0
+ ;;
+
+ # libtool execute mode
+ execute)
+ modename="$modename: execute"
+
+ # The first argument is the command name.
+ cmd="$nonopt"
+ if test -z "$cmd"; then
+ $echo "$modename: you must specify a COMMAND" 1>&2
+ $echo "$help"
+ exit 1
+ fi
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ if test ! -f "$file"; then
+ $echo "$modename: \`$file' is not a file" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ dir=
+ case $file in
+ *.la)
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+ exit 1
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+ ;;
+
+ *)
+ $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -*) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+ args="$args \"$file\""
+ done
+
+ if test -z "$run"; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ if test "${save_LC_ALL+set}" = set; then
+ LC_ALL="$save_LC_ALL"; export LC_ALL
+ fi
+ if test "${save_LANG+set}" = set; then
+ LANG="$save_LANG"; export LANG
+ fi
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+ else
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+ $echo "export $shlibpath_var"
+ fi
+ $echo "$cmd$args"
+ exit 0
+ fi
+ ;;
+
+ # libtool clean and uninstall mode
+ clean | uninstall)
+ modename="$modename: $mode"
+ rm="$nonopt"
+ files=
+ rmforce=
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ for arg
+ do
+ case $arg in
+ -f) rm="$rm $arg"; rmforce=yes ;;
+ -*) rm="$rm $arg" ;;
+ *) files="$files $arg" ;;
+ esac
+ done
+
+ if test -z "$rm"; then
+ $echo "$modename: you must specify an RM program" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ rmdirs=
+
+ origobjdir="$objdir"
+ for file in $files; do
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$dir" = "X$file"; then
+ dir=.
+ objdir="$origobjdir"
+ else
+ objdir="$dir/$origobjdir"
+ fi
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ test "$mode" = uninstall && objdir="$dir"
+
+ # Remember objdir for removal later, being careful to avoid duplicates
+ if test "$mode" = clean; then
+ case " $rmdirs " in
+ *" $objdir "*) ;;
+ *) rmdirs="$rmdirs $objdir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if (test -L "$file") >/dev/null 2>&1 \
+ || (test -h "$file") >/dev/null 2>&1 \
+ || test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
+
+ rmfiles="$file"
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ . $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ rmfiles="$rmfiles $objdir/$n"
+ done
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+ test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+
+ if test "$mode" = uninstall; then
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ eval cmds=\"$postuninstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
+ IFS="$save_ifs"
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ eval cmds=\"$old_postuninstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
+ IFS="$save_ifs"
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+
+ # Read the .lo file
+ . $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" \
+ && test "$pic_object" != none; then
+ rmfiles="$rmfiles $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" \
+ && test "$non_pic_object" != none; then
+ rmfiles="$rmfiles $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test "$mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ noexename=`$echo $name|${SED} 's,.exe$,,'`
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ rmfiles="$rmfiles $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ relink_command=
+ . $dir/$noexename
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ $show "$rm $rmfiles"
+ $run $rm $rmfiles || exit_status=1
+ done
+ objdir="$origobjdir"
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ $show "rmdir $dir"
+ $run rmdir $dir >/dev/null 2>&1
+ fi
+ done
+
+ exit $exit_status
+ ;;
+
+ "")
+ $echo "$modename: you must specify a MODE" 1>&2
+ $echo "$generic_help" 1>&2
+ exit 1
+ ;;
+ esac
+
+ if test -z "$exec_cmd"; then
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$generic_help" 1>&2
+ exit 1
+ fi
+fi # test -z "$show_help"
+
+if test -n "$exec_cmd"; then
+ eval exec $exec_cmd
+ exit 1
+fi
+
+# We need to display help for each of the modes.
+case $mode in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+-n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --finish same as \`--mode=finish'
+ --help display this help message and exit
+ --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
+ --quiet same as \`--silent'
+ --silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
+ --version print version information
+
+MODE must be one of the following:
+
+ clean remove files from the build directory
+ compile compile a source file into a libtool object
+ execute automatically set library path, then run a program
+ finish complete the installation of libtool libraries
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE.
+
+Report bugs to <bug-libtool@gnu.org>."
+ exit 0
+ ;;
+
+clean)
+ $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+compile)
+ $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
+ -static always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+execute)
+ $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+finish)
+ $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+install)
+ $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+link)
+ $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -static do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+uninstall)
+ $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+*)
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+esac
+
+$echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit 0
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/macos/README b/macos/README
new file mode 100644
index 0000000..434aece
--- /dev/null
+++ b/macos/README
@@ -0,0 +1,8 @@
+This is a MacOS port contribution (not to be used for MacOS-X)
+for the CodeWarrior environment.
+Please contact the author directly in case of problems:
+ Eric <erlavigne@wanadoo.fr>
+
+ thanks,
+
+Daniel
diff --git a/macos/libxml2.mcp.xml.sit.hqx b/macos/libxml2.mcp.xml.sit.hqx
new file mode 100644
index 0000000..758554d
--- /dev/null
+++ b/macos/libxml2.mcp.xml.sit.hqx
@@ -0,0 +1 @@
+(This file must be converted with BinHex 4.0) :%faTBRKYE$)ZE@0`,RKYE#jcDA3!8dP8090*9#%!N!3aG3#3"!p[8h4eCQC*G#! SBbNa16Nh,6)`-$%J3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z,#"SG(4`1Lm[Gj!$,Q& XB@4ND@jcHA-ZBfpY,e0dG@CQ5A3[$3SD!!83!!!aG3#3!h)!!3#3!h+,E`fPT9* PFf9bGQ9NTD8!TC!%!3!!2`!3Z$,!1,Jb`$J!N!d2*kd!#kD6!!!`S!#3"!m!E'P LH'eX-LjYBh!ZH'eX!!#Ec&4&@&4$9dP&!3!"J!!"!*!+J!#3"d,"e5%1mE,3PTT e%qciJM!83K&J"3$c)Ci-RLl*Jj&KYk6LMHPcX8k"VfYVbpc+6J"MIMCMT8+`(1i 58pfYfaf$DRNpGF+I2Uqri(%MYPj*RHkh`84'!1b-(0aakcC-j6S3IbdRP[K!N!! Liq5aS+@E&STcZ'NAH!p%'FU(UeiGbT[LIha$)jh2$NMlf2[[ah9a-IlElkZ$PNe V4iS[!jVf@LKE9h3B+[8)Qk#MlZ$k+DpGa,5eMaXSC2%EC*FhFlaJYNTakfZJpF* f#Sm53bfNiMV@RKXN4)`K%+6k`C!!ZKeM9'-J6C0HG!!qG1#fH0@mSZeZG0$IBSV %iP%Nmkpb#T8%YRU9"ilEN!!HjfD"iMpY'AD20KerK6rD28Vja6Z)X,lJ2T`KSU1 H9d5aXqEDfLe2abB[!bQdYH03K5MPm6YP,#"p9@(3iT[,0A!M-LHV&V0RSkAdBCS Y+r-2[FK6$BVPQ(82mEHmlI(fXpVHR,AKe!K)AHN(hKdrr$1LqkTR`X#Cd*MUBje T`JL@D(NDaKedj!DVqVK2H)40b20B86$%`f5)E"Id`#5,1YK#)fl3@'D5!-S5"(X d`K2J(&*8GP6FfUqS@5kY"DrqT5jXN9Ep'U6h(eRrAP@fF+qqQ4SBP&hi1["!U`e CL9`1Gq!X0RLRlE0rBHN,`hmJV2ZMJhCFHFMEj1IV(55eh[M#F"C)i,-*jH-*%$) kmPpSXLS1AA9KH)Y9MRUYaJ6m2f'AURTca'-409*)aQ''XIpFV[2Tb&0A!U9`CDD aM(19P!G`[1L[NmTPEm0C+&['U-a6TkJMjN0Lf+#C'M4F#+H[mf"TN`i5&p%Gq4' 2Gq+P&PG$$8AF3Hcr`+a`+UAi!GI'P+Vj1&3@e+hkaK*CHd6ll1ZXGaN5I1Hip@L frl+%HQd#Y%*I0[b*YbeUClA$90Nq1bq+9BcE'JJhJ,(ELMQj45#D0@la%&(DiT@ 0J-$8Dh!PD6d@1UB'a(Ra)a'3!)6JX*U+h5rS#YP%I4!Y$$kf+FTJV8X@+b5+D,# MIR9Ha3erq+fpl&kp[BQ4M-RSNDeC%280dXPZ9@JAA1mQ`YKCNI4cNrjZm121rm( 0hFQdJ0%hEe&L8P"8Pd$!Tqi4ElJa+akC*Mrfdfk"GeJ`*1hP#Ne1E,Db[hGcq*% XD4QeT"p5SX*EYZNA81#,HR)+*J`A*S-C&eB&%eVjFcG"F"6DPQl0V4D$`9k!Je, -"j*-EXIERUe&@lAFCfl!&APmZYINP'2+'RHYS1mehXCEUAGYbKe%DGJPB9i-H!i HPPe1'#18`-UaSjNFMmi$r5V901iYN!#i1(rY[S5#@M+ZQYV)U)3-MPDcDX"hNpG KaNXjbTZP18(Sd9kLM@"i@"[3JQ+T8Pk1VYYYrB"3KTqQMFG"918VEN80GP-CEq6 82'-3GhThLj%Z,jNb+lHEA-Uc@lLrrLq,9phe'8kpPKfCY*&TjMLU2[I$HF6qZ2R XFZM2bfkjr,il23`S+3#IrMTUjLDFi"JdqD'[QSFh!5ar3Kdh(,*HPELp(bc*PZb 90Jh'iT2!PIJ)D&+RqMH8ZIJSLXakp@q6Xh4b%bBf%QJG`U%Fa6kiCE*Pad(&dLp 1fP33pMiFc*-KMk+RQNBAf3d2-A'5k'HIrM0k*Le0e1A@![39*ICcm23M$!85JlX Vr-+BrIE$L!8"bQ"pXcIlKVBY2EhdNlSN4*mhp@+Jm#i"c1@e5*,j8J)b%QB%fU" 0&ZNqAeQc%L&AZZ0lpp6UjCXXj[%m'qS8+4Dra&+E!JQF6c21$h,0mZYF3D[NiGr #2d!aZID(m!hc2!)AMV(bKPEe9lf%*qK+T2V3RDe`)+YRr[QmNriTXaIIM@-BTI+ pH1pY+%AM0HR*$%C9#Ghr(,Imk[#([a)RFVZ#B%`r53(GZmRSG8`L!pJQ-&(d(U& CD&UL@cYdZ&j0HEV'rFja@c`IPQ*GbZ6MKIMEFEPF)+YY[+KK9k9JDp4-$MKm0rr RfQQ6T&%!V#BS2Ukq2Sq*28`)`fI$TRBph'X%)SfQ0V*8-ia5Y20rTAI-8"f,X[+ 9BVIMdj&c5"jM6GfI'P$0b5"2V-*#QI5M8RlIY$U&bSe'[V%&J63`Y-C-SQPI@NK KKLD`qaEFU'#RI$ZCE,pB+F@$+GD8L#JDjG2H1ALUJ23+'J&DB-fEiAEmI)-H%ME C!21@cP1+rPPfEN+Mi@AkN89a4jC6S38,Y-+!82'L",+(89rIVQLqD)&56ZiI!BM dEKR[NTPASR@R)S3D8lNrjX3$c[h%jlVrVkU5C(ebrk(d@Xj-KQ,XPQl0j&G#4X3 e-Z3Lkl+Y,E1GB,DkQ1IK(ibLB%k-KpTUEm[kBhZ9h1HFmC&$H(AB,`Mkl8H"Dq, DmAI0cI$iUG8&cMHR#Gb`@r,`'NM0SYH'NB6qbpYp[q0$e`I[SJi[5F[iHrKAY8p XTe%##-l)kQL4V!@[r`UI8pb,2MT0PL3jUX2ZJ#Qp9e9+Cjp`S0$cT,5ZB@Zl80D HFQeDT8HRD*!!9+Kk(9[,h9$DNa'(5l5p#9*lP8i)hS'lPaBQV4lXkFP60Zi-fi, 44'S@mHA9q@V-(`Br`,j2R,4GaKPMDhF%#Z1NLfJr@'f`9F+dk,dq1%KTYN,`9dD 2'&#UjmDIIK3VZ4*&ld5YraQS)!0`2BjN6pU8CJ(JCT)m'kTh)(9"Aiq"pHkV*mb E$&Y6FdXGqA9dF46dEEd'emEhcGT%q@AP+H"PfE8aq4B6p3K3Vf`mPB+&hh1kNrr Y)aY"IEC9PA)Z'kBjp3Q6Flqr@Gk2M2*pY@ViVlea*R5E%$S@BqC#q9m)hj08`ki q-!22J4GALA2Gf-r8NJpMV10V9AVG"3Ji(mbAf!4hB*[U"Z!k`i#JHp(Vd+!)[6i &Mch&2ph54+DTXqlRr#8r'Q%3cXh%aNiiEf14l,M'8J'f(L4MA,4a&%d2j@*m1,j V'8%ZdI$$(NJY#ZUUhFp`9MBd2S4Bkc[8X`HdBCEYlTC9&lXD%DqK5QIE%C8,E5U rD$3hjp`ZM#Lc4iRf!3q3!&f@Jl'DF6-3jiM15-l@@@Z0*1c-B)PfNL$BqZ,XYTV PA0`C+db3!#C9!j0`5MplSdBhU1kE1EG-h@Kja&kr#*(BcrV'l5B6TCZ#NK8rpC% "(RD0TCl,5p8D5iT5QFpmf!$)-6XQ3deZC6A,LB6MJ2,5m&e+2YF,C4RaL2-"+59 YS14-rVrF#2j!P!RaqRbRqJ0Y-dh@D5)"qpe")lVT4A5G4bA,VXcHp88p)eGB#&D Zpm1ZAr+5@r+Q80@Ad4%FHFPr-HPFhPMhFA%K*Vc$)S&4bqP%2a8R9(P45+Ff#9f Q%KTj`&S'Rf@UN@S&Ga%&dUaA8LMXSX%%)-br8E3LB5*Fq2BMbe-8eEGcLc'kM4J 4UQDX$DDAGJ0(ZH&G5PV&5+#cXDU4JAT+rQ"8'[e$GhklGBN'VdeB62A*rr9X9fL QYGqf-!%II"MXa)kFD%afKXieB#)ZbqB9MXA(lm1'YBEc5JNKd6"JNa'fX[J+Gi+ l6Ue*EXGq4#*-3i+dij0i"qV%@b+`U(rF(Gm2!`QMl08FeY[LMdhU,@-kaLa!NUL Gd(-,Z96mRc4'miNaf!"FjKl)-E5U#*UXBR)HVI(Y"#qR!M[N,Jk%@Y-UYqmFihK 9Gh"0'%HFr%*A0iq3!+JGHhlia$%BqDjVaiSAk@0#R9F3UbkXM2Bi-j,2IY[GCmd Db#BE9QUTNGG&-9VaR`kc[aDi"MfZ3QRIQiK&!1QQU(bMa!&iLY228pZrqI[1Zm5 !TGRZ#4QPD*PbBC,C&ZILe%68Dj8,2ebjd#H'ZUbeY!miLR)[U-K-TZRQ)&h'IdJ HC*NP#3qV+jiL`[4"e+Eka%EM4ZGik@UfL5a+DqI[eXJji`"SK!mdNkYFCbaL-$e i@$[MB)#(f5)f#a%%BS#TTLQkhX95Lb2'YJpDHCce#QB*[hhN5N,a1#dYQ%YE@m( SV'hKeM`U8Hcq-'+Gm,eaIC`8`T`)Qmh3R"EhFlX2m`2Sf9!Y299Jr%[cj'a,&@l aq(DNk&&a+ZRh#JR(@(EdmACB5Q"XZmXX@ECVDGj%JD$Cca5r-!&!0D`2R)jqL1[ qF95MLX@N"ShEM2Vd'iN6fU@P',LfcARZ`2!2R*Z"er[MBLchA)0B%`SJjV)&-"D pS4(X[VDdU5[Hh!rfr9a5Gp*2L4b5lX+ML(%@`ZlL`$ZK*6liZh$L!r9j$2P21G9 j#qJ`2e+K2(qQ5&P!m5kACR[60`P80eU!)0pLk*X@5VrJN9INKI4cIl3V,QXFIi0 lRp5UQl@qiLR8l3d`C2J+dLTB*KrVf#C)Jh$-bmFXjB(H+4aBbK&!+VJf"MpHPIm ap,JI1m(H)q[K#A2HK2S4Q5J'Y9VF(8H@@5)h&r@$r(FiPpSMAL1SBJm"2m3!R"C [+JFMkK0e$GSPMZe0`l"qdHET4`%plD0Lq$-J0bdB&bZH+P)6Zr-Z2-S2F)%R!f3 N9Z`@2GIU+1I2YA6AUf-)"!U,B[L!DT+%9AG'hCN)&AIr*8p2c"bMA2#rMJb-85N #"B6F+b-rSp'GfD[2"$PLe-9*5!qAR1*VFeiC1ZcSq`CrrMNU-#56h55Mh%1*XUD h,1iP42BABKR"efD6%$BD`5a))&jdieSj02V!'4YcU#ahYFMhRkrNcLlcS+'a%(P l`),$rh"cqCj*k3'AAK-+q%V-"5M51JSC@M'KQA[)d[ja*-Lb8VmLJ-&MdB+AJq! VLQjFBTHNG8CYUVbJlN*$Vp5,Q(4ie&3QYVe8UJ9Qh%T+e,Q(IAU8YKfSp8QA6Y+ Bf69`3pER5R[#[M5Xmq1@SPaqp5$(rfmK!5j2LE1T@hJDV94f,I,[0MbAqP5Hh"K -)G-q`dVrj@-c@#BPKb+r#&FQr#dK'h(@,B6"LaqAhhGA'+j,Xh$raYdDlk%CbC1 +KDaRqPDYJFIaBCbH,-bk56Se0VXF2Q[P%9GXa!4imM@5h93HhdidM#*M5Pp5mTS &I&*1J[BK1R*kP-+f)DAbh9Zaki8+P-Q'$i)XB568d`Mp1FUflbbV`LF#CXPDikb $Ve3rdC2R*YImeT!!H03R+9`Z*XJf@0@C&Fc@Kd%ZdU[kELrqHi2+R#2$LE1F*Ec dfZJlieqTAHVa"Kq)U((5N9@)fh#ERTT!Pc5-$-$4r!T8$+2X9kKL2i['Shd!EiM )4i3H2d8q5[Bj#q%aR[RZ$[`"5%4+SCX+@ZPIL``qiLU@T%B2JMa$J0`%[l,c)jY a'+FrEDI14dMD)M1cf3JDUScE05PD"5PKmhm9bp9#9Z9'9E)8ir+@8Ec+FV"`GRc 1qpmDG,Y$VdN0UCNebp*'r2)CllpIa%1`$'eN+4#UCib4#CVKGMqm8!CTYQR'RBS 4T&JQUIVld64'Z,fQ(aN*B84m'ERb+`$`ec)a'&p&(j%Q3m%'5ppVQEF%H%ZT!F% DTam+apNGm@ij$-`[9+XR8F)kBm[,%k$AV!Ar1lIKiP8*p0P*BU62-SJ,(lATG-M &VaKj*FqH+Y$5MKSH!3!q0+RqC8aZNMf%!AVi,[M,[N8H'Gi4XG@K`AdGIbX`h@X `!f(DTZ(X6XmF$T19-CC8a'Zk8,K`&bpkR,4,1965R(E52!qbXA!cjG`X0$qD9Bd Jql)[&+&S9Fmrf)P$PGa-Ld#h'EAR(2a+ALC&9CPNbkTEJLZRiij`KrBZ9X3FrBp 1NI'k8kH'j*LRr3LCT@F#"A0*[DT-pXpj@aB[#qhL'cYPP8E8,#BXVRYV0ca20N4 49j9e%"8%9[@[Lbp$qLSiQ6,Hq$VCQcN2[5Sqe6,kbiThV335N!#eIf#*d6pmcc1 "FCJ9jlVkTBEbIdDSVdG#NBG"jBTMk*!!KLVS5XCY#!b)&PAVrDC"14THIl*0dMb iX,MM'VG`Am&&f*&TEE8%$JZVVF%A$*`lCjm!ki"EfLHAr(5mH3M#i+hU(Hm!fc0 G3h1MLJ,-2bYFE!!'e58MMiHS#'kXdSDLa`qmLI[qkHUfM4mZLNIEaj&`TU3B#Lh 8p3lD-j`@943Am`E"Y&LF[DpP`&F20UU'4Sa,&@$!dXRbU[E0)h)UKKG#0+*3lFK *-`UGrdCkL$*93-"I96'Db@rDNed5)3h(4H,@d6`5VjZV@84!fc(4NNNe'h"BfpT cU(5'#X',[p0[+`c`C!`Y%V6@e`hTLb0T18GE`BSpR!AE-5QbeTdYrV@6R12C9pJ !I6U5QqRBTf2(JiSb*!&BGQ4Zr4"#`PMV2DQGMq#%JqI`GbJEfem0e8iUr,YR6rP 1fZ9iTAcV%M0[53rN5J+V$!m#HbIGQpDM#(XI"`e0Rm+LeK!'m$Jb[PT!D"2kaTQ PD41V,6FqQV6@1)K"f#iS#mP8R4,1e%I'+HJ-TXZK2%X3iipeYIGc(89aU`I@DIG [Nd*i4dRYrDHCpQ-MA3@(pPh&QUXTJam9crlBpYcle9b51Y%Kh4LY1@*NbVr"@Be A5r1*ZQ9AD#FYPS!40QVa`j4RZlB2Vrb3!-)RV4"M5iRQAMqb&41`XV1l)1%CQIP DGkD-$)dDLi"aKGp)ZeqimRbl2#$[DaG&5$TReaa,T'S-$R(+q)$%iJQ#G1@ZTkc 3aTj9hi,55L0Xk`4pF4FEMX2i"9KXr,LPekQ)MFIM`22D$*+1R-$0+'VU1CQd3$M #F$DhBUb8mA#pdM`0'AZC`[mTl+'6LXA+XdfRf34G1[LDipik`D3`M$iMaXfcA(q 99[@03r[28S&&pC30RB@ZTHbkcC1P$Z4DRfAeb2c&1fQK*GrEH$ePaiBrRL(c*55 Uq&V0@QP(B2afNiQS[&q)e+[22Iq&2KlG(0p(F"#DjF#Jf*b*Qm%#V,DYbN2"kaK ML90PE4@5C[p"KNMKE,mqcfEQD9V2@qb1"dHBC&KdGlEba&*4@U,rC9DfrdRj6K, ldb`ZCSQ+XNNEANeD0N@%r6NhNL1mm'9F+hP6J)RBiHT%-fc4eck,(21H,FL0Qp4 4&r5VV&(NS6U"9#%'[pPCDN3J%YfPp,NdmSHMS$iP9q,CkBRrdcQ9)92bkR@+(8+ 2Yd1F1@HJ&+iED,d!K8qdNRr+%Bd[!@8YN!"@'R(pm#GQE%C,Z2mKj$mNUjKUf4' Teq#1"dB$',jhRET3j*&b'*XN0pNbXSTG[`CEJjiH!3U5(Sp21C0*SEJrF3l2KZP f`h11DA&Qif9)$-$mjB59qcBU4QNXr1"keDI@GLTkpUc'Cfrh-qP$Tb8h46[1'%` `l!ZrjIL!)RNVP93+(h)r8f1!14(+,`08Pl6p,42dl,0HIVa&EVIPVc+ff+9(pK" %'$$!iJ2N9r+P!Gh#6kBX*64pp0&4%'L@YJGMqp(D%&10MLkk'E(1&YMEX9kG(kj fFMfEdMI3+)!3*XD$@$4ep81ljV!9Z)X#j'CL1QbNi[#k-mGSH#`@P-Y8Gf3J"ER mVKd+28pjVK&H6ZPHQGlIC&)[hR+V4RZEPUk`rdhhhq4+e@Q#Zja(HQqq1'kZ*[+ r[VlqA3YpEQMHL6d)+r%i4@A@SI*Y[c20(KHk)$)NlU0!Lj5KEM#V#Qqhb)39T)m %If#X8'aG0VFNREEY9[B"LqM-"D,F*Y--VM2EjY'0#+%`V&@'0aVV)8rF8+*3l5Y KKd!3h@lrBaTCpjEi1&KSD`A+Q$-KX2rLr8(,"`4FjiT2+K5G09ZDZ[1-eA!B)G1 N03#`H568SX$iUK@e'2iRT!+l8,jibK)c58qcFIVSZ'mlX5$Uqmk8U3Sf`R$K9!Z M81R%r)Zb*TPjZP$D4Ga2(d"pp8'&U563((EF*CS5`H!'h-qhG,6-cfURU#JGfDr LfEEGV)&1M"Q3!+1ZMpZ+E6U*`Uj[2#b@`3hP)ZCqh((-e4FKA)Jm'+[SAG(14[) 9b6(eG(GiDNbK$ThUDbmK,RJHPe82a@MY6&jj&[bK!3'X5f'9JD1I2D$23%*f,'S pNdN&UkaaCUCIF`ZHBLBC5bYq!,A-(3Yi5-pe&H"lV@4VEj0`L$h3U'kqp(rL%aq h*hjN*ZFd*lpcA`1CUN80lJN03f9)5HM@HjV[bP2P!JBMl"RS1rPMY"U)XmibF)R I5A(hFa,+TQ5kmF&`&-rS!r%-jJMBLM#ICV6lC9RhkaTh$3jkML1[DqY`&8b&q#1 %+K,lpe3TH[6i+(hdhlN2ZX*3E30V+C)[1R2Jkk%$)$amb1@BdehidBEG!MAi3h! 3B1Gd'IrTqY60bD*4l1U2bafI*I)48c68prXT5fmRJ4CqhaC)0CKfHTJUKGp)E+J QX&)!VmAk3!T(rrDRAFIj8#DKF#FmNRM8L8r6GJqS@6lc9d@KQNK)Kmd'ILRI#m$ 3e5+KTf8AriK0%6B065QEb2apXF9(E5[$c68k%r3R'U0biTSG+1A9U-YJUL*@ffM !Kl,pQ`JEiVK0&M!@AbfdX&R$Ce*"rch"Ea4fm8CmPFkSM5b&L6BNeCDFT28F+cR j(J&X"f*UU6!B!C5caJl`qT4%A*UTN!!BRh2BUl0Q[Bjeldik2A-U&H)N#$+BfAY +HD5HI@BFS@lI',mkFU%)hTXZK#8`5b'LD'-5ULKi*X,30-q`BGq1@UZ"U$+lia' cb3CK'UG-kfD9d@+fKUU*VQkEk@#ZL1k!qq9m(%#dhpF@%I'N$$iN!k"ALFrE1+' $$Q6rJFHPMk&S+H2$lrC@,IAQ6)PAHiU8@dmQlRZ&*mYKD*40&-LZRcQDbAbM-j4 lp$d35aGj2q1F1)43TUpSHca@r0#P,9G4+Q6,[dPL)3q6UARe[FY-*Eiq08N!KKd b'I5a)D6jdZ4BIEiK&6fX433Kam*S@ceYd4#qL!-91*c&%RY4mIj#ELKf-c$+j5l 3P*m#Ii5a0LKSXrLEYVEpcJ0([&`(6RN(&q&frRNB[hB[TZSjZFTY(!5aP+k,#BV !8jaSX`qirr&TSa2a*-rb#ERNIC@bU)@i-I*"TYEeQAVD-Nir+X2Kl$'#Be44+d* N$$QJKBXmN5UXB5m@@%T@pPrKacq$'3LP$('80+YjYdf"j$K4r&0lGELAM#pf4D) 14SUH4hb$Kl)'r%N3l`N5c5+[B*3XZC!!2G+'rQ-rU#&kL(bbbjX[a#a$D6bmKaU K)E)@KB668cG"M5"+lZ@DYB9&Q3pqckb6,8Hr[BN%)YMZ-DS8IfS9cfli3dJ)#5U 3!,Dl3U(9eQaEc'`3ZB1lrSHYK`&+E"GT)qS"jG`-"8'1NYDAeqbEENcmZEI9JG@ FJ-K"%Z2RZrLL&CY'P8KQ"#Z(LS'1HbP'SmbB!hj%Y3-M2lKY#XD1l`NPr2YpL[G p6YF8BqH0`PT1D884$-Dpp`XN,F3%&Dqbr%QRBTE@AINe5D("mkY+UpP(NH,1YXc )ie221a'3!(@10a&DY+18d-e3F+,eKCA*(V3RSp&eR)",f8E2Me"j)HU4H)bT4ST p(HE"hbe&CaEDSJ&d9p(2JX+2)8%T-,jAQQAG)l&FaIp@U&L&-IGZCLe[jDjh[%h "mNC529(I"HE&Z[L*09QhYXFPd+aG6UKf,hIhbF`bNXDpV8Q,8YP,A!rlfDm1qaF pcaSh'kTk5LjJL(dh,AlifN3CCd&9kPTk,X&B@MN0c0kmrUhci#*(cj%q0184%P@ +62ELf@0HC4D'`l!m`,2VeGFPmAkN98fF&p(fN!!H'i*GmKe4C3#+N`Vq3a[DA)L #b#kjf9V6Emk2iIKCBMc$dj@qTm2-hq4pfdSqjPM[E(5eTeZ'1-+MELGTQj!!!A* rQ0V%'jGp3"4FcCVAN!#BHZ,5UAh+LI[+aU'DPLcAhhE3lGI0r[ff$6+YSIE#ir" 98L@%YZXV&R0JaZb8rKPkY9VJ-rKI)jChGP,DpG!DVj!!Ch5CE#[A%40%PdJ`ER+ U0PjXF%LADA`bKm9@*MTA(fm4E3DILCaeB"1CRZrh(MX1N!#FBpIfPh1RQQBqMjp hIh&MAUjRI#1hXE)!X9l-P(2hKqKfiChFkE8[2JPQ%i3Hi18([a)JhfB9)%@NaAb 4C'k@F$MGp2)leMbkdYGa%eH!"R`KFEc3KHBA,ENbkGekhYhUUH&GQ4A*i3YSlYT !9V[2VM'-%H5l8c0Ml63[ffljh9VDrD*HeICH2qkl&lLepPB(LL-QC61dQUbXipK VfZ$qP%hE&bm-NT)`NU'-6Q1PSYEV@ciV!Fl3rL,jXe)5f---"K'lP#jKT5@6U49 dBRpSTU+2LS1iB44TJ,c0C@fqPcUN&lR8D-MHAjblAPMF,T!!f$$J[H%2b[(`a2V !j&ZGNbSpGH")"3D1-d&R[&ScPCK35-`KhZMm`H%hKU(Z"BD[Kq2X-X'I+!9cUHq c[Ed6T0LRdU4pBXYA#SZkaKK*`+22Hd$S!(p8A6MMq6[HNRrH'84hi,06GcS6)M+ EN!$dVrC*[r@Mh8d%,eZdjYJMANpL2ak+b4Tj3f3++-DNYAEe@jl(Z%A5kc*"l!J A,eP"Ihd#lkhED'V[j9'BZa#i2(#BZ`KSGi5p$eMP)qRT'-Y-qd5T*AYJC4FfmJp p!6RJ`MCR24'(QledJDVENlD,alX8QXcP6XR,-f!Np8kI)YhBqa)J@KYjHUqQFT! !Q*m4j0C"Ke0H1#`+'Z)DdC!!P$qmXU1eRU%qXN"K%i$S8@6fJ8%'9%0N)&Z@M$c C9[c!hp0i4e9)qXNTIemr(N"AFB3$@Bfe861h1h""#e8RF06BHGGep3DDD@+C+IC j6dHD"M9plFIVBa8%-U,EU5VUjPA("8[8&X3F*PHM'PUQ3PKX@3N"&ZdjhmlRcr5 `m3fF3348Vc95&NK`X+61RGdfZ"RBM,'*"aQ1&He(91[2hha'VB9F5dc5RTS-YlN @J1XMS68pb6QDIfA-kL*lr,#@[6[R-4SI--iD9&B,K3%m1cYHBkHcFI`DAJ9cN!! 5%pN%NYM2(PM#6c*Zqj1lTreCT-C%-mcmd"HkZLX(@iiqE2D1(lqNKGN-bmZS1UP D6$'RAN'8Gm3P8"km2lQD!3KBhN-b!m(X5iq0RNqh`IDP3f"SiSpZM[b0l`L#PE@ GaKjJr12$YL'()jmIU,L`MD1XY&M!`qDQ&p'pL#-#[0+$dCYTN!#*kb-i#1`PGUr 820-ENP%JRTVP3'`XVZ@c,$T-a34dB-+KS9)bSTMK8dY&Z"-*d,a$VXPA$E(icT6 fI[EN"T*hJ1ZHd281K1#,$j[YRL3FXca'mF8khR,ZkKa6YYeJa#D3!,ra36"cHJJ Ki+'3!'XL"9HQ*jU@UjQI8#'+dd8r'hIRDpd"[eUKC%I+VFIUrM$J!lQbGYdK,V* R'f!RFqMYNBZTN!!R(M%Bm9D,eqNC2(d&hf*DrfY0UC)`h3m)jC+d@+PhZmCf[(L i%"2+@iRD!kB1`FK4(lbjP$aKRGLi6eRA!!KJ6dBX3drdH@V',NR(82GfS*2Ah%b QKc+IJm,)F5m(!Q9S#jdX0mCCUZH0j@dReFCm@rE`lI@)Cp8e,0&U$FS$)i1F8BA 06(%cC(-9k)r-C60ZE(%Z9icHl1q#R@V1!$D1MrRjL6J`Tf&#eb`P!&Z*2+CMKa[ e+3G80!Nh!1E%dTrb[H'3!)Fbmq03UYUQfKeqTPkAc+HNIrkb9PP(14eNIe2b)k3 65Q"qqq*rZ`'0S)3eG,,`AX+04NPYp3p"BGCL)I,Ta2mhC%5",Ub!S6K8,mq`YYP 1dj5Xmb+eA-kbKX[DPZ!M*TeN@A6$A*c2CI!d)9#P%c6&-3T6V!Qq`9@U*FB#fY0 f*)MD1LGaihP0S"r6X54GI*8j962*GMPI4"fpdhkDC4KJSXjAp5p6'c")LP+X821 -@jA'6VU[68+$b+5J0fP6@9!Y++,2*K66q&a#E,qRbD@qS(&mXJLp3'-L1@AAkL4 K@#(mFl8F68JN8Yh'L6--qL0#403RL2@Fl*J6kQXr8U-R*lLGP9'6ZITYJA32UFN Fm2$2e%S,qP+Qcq3e@M9l3BSk4,LNZqRb0D++"E2"f5Q`"QrE&!8rI@`*eH"`IV3 X3c*)BC%khQX[NjMlliHcm$Pq!rflL-,'"2F3m[`jT+f8mZp`-$1SYdMLBSLYY1G m"pU[M2cJ4*Q[)M!#lGfeI2eS$EeE9&38q)*'ehPbmY2pSi0iX%%!(2HGFG-Lb(I MA$T'55UIMHfp)[qZVA`iHF)A"c&E*Z,TrZp,M5B#&I3A(VmYG54!%iI"`LeVQ(Y 6RGdTr6U#!k'VLrkkJpPjmQX66Yl1[4SSf*B+BjpVfpBa9&)KZphfFhTre8D,#`q her!mfD5+rVPr8c$(qMh!R,k4b@lm2MpRZC[Q2RTp2M!M1**2J'-br2Br[`r-h[r 1IG2dk!V&YN)4lIaEZdKHMkBPHam*MVVNSZV8hNiVlQa9E8L$H8D6'[qK6rarr"6 Il0VAJ9&Gr&RhM'P+1E@X5TkGK4[14"i+EKP6m`ib6mKcm'Ym$-e3+VqkY)mFYEI U#YVQ+r6%90+r&B5T"(RGS[VBq@DD*l@)4LmNY53-kkFp'LbhfSZ&5$j63%[5ilG $JNd+HiLi*SkKKB0PAi"Y5495GF48lcVmHkL1UB1[[INqP8kPB`ai#q-(-,Z8YI2 'bml`q@eU#H66D)LHGHh8dmQe+PQc4*`,bqa9Me0ddq0'h%GPcU'5(,52kr80!%r 8p6H%DGGHjGjdflF)qYCk5BYZ91l@&S'6U0VJ9@em6'#H5CH#%*5CG6p[pJJ0a[- 6pq+R'heN6!)[bD(Ch'E*NbaZA@m'h@5rdMr1R5+TlA4C4AEp55cm4Q%P!h*le2, '4[4J1R#Q%q13!![-lrI+Q5aQcd(R"&pcJ%RJ9dBP4VCQ`r*JlCceY0I2DlFB6[0 !VhITUJ#(,69+d3`98pkKC9!Np,Yr(9b$8QVSaY3BIl3,BJbJX9[LjU1c&PKMFDG 4VhUKME$Y"bXYr[dRhAH0*LJ0G9+r&VlRaHKDF@!TX2&+6I"*iMdm@!CUde@C"AD i,,h)pNpDmGrR!Pf@d6d+m,*L4NA1Q6CKReAQY",Q,43reH`SXA$&@2K0A`$#5aU f(dSd6S9kK['l6Jj0qhel8BYa[PqK0V9BBX@rQCXr6lEL,5lhiA9p0Ye%1q11fMb MNecMU3aH@dRe&lA[XMUrCcaL#)%0EaQ##-0TCBT*I6,d3e+#aGkqpai3X[l5#dD SIYlc'6"(J3-P*)X"ehiL8d3Dr#jJh`V(G`[[JYmFDLD%(j6@b%Pc4UU,arF)#Sh &"G``)M[)BD$"D3J5KNTdJd63$1SH'd%3PXBFhICG[VH)m'I4r-#)EmLZ!b4DECe +c2kKfEYU(8bLYIR(`ULj2[%PmMpbi+rG*!HCG[h(S02efTp"h&la(E(MYSE2Dkj [JeBI-Nj"j14JUBe39hla'6rCHU9Y91bm`T-'`qpZbUNEp!$9mA,XT,QcZ)XFJr# 3!*DR9hr14YS,9NrN&k[(@`6!Q9kCreGQK#DQIX3#4ZjFrhY2f93E%K6DckX14dR 9LbG##jijr9,!XY9r"2iZGM#EU@3KqcpZNa14KAZqPkBAB`"`jA&emSrZ2qcU5'J cB-h3TKGhA+)aY(!Zq)akeKPPqpGlIRciHXBZG`5CImR4d)'lFdbZ)%MrY,-%b5[ LZjN@b8!#fQCV&q4192U1GcfdYU!NU0!NMaRFEr`a[-$0Vr@@rQk!VAfJBH+NGeQ M11pI,6HCaG[He9cG"p8L!([cAE4AI4dIh%D)T6YQm&A(r1F9*+Far&TIaJ(pN!$ [rj!!h+Hhr*ZYbr5KG-k-'edr-kRC0b*N*aK$%[0$rGE$KTm[b8[aP'VJ3pH(Xiq rj8hTmi8`YFHH'%0EeP!Cr!8C`%hIXMSPMlATrD[X(#%Q@k[(b!-FE[FH13$pJ-C RRXk+$D`MAT&'iU1"Vq6"G8cQYi6V)6I0CNr2l@mVrQ5kH6Uaj$VJ*I22q2iTqFl SEGGD+b8M$H3RU5Br2ph-DC!!#[Q$bVkEH+Z[K#HK$A#03AEbI+Hf-U@jc(D8$2X NbX#ER+%4&1KCQEPb+K(Ud#@6+hG@qd4"96#3!1LM36ZM'5AK$5m0A+5F)bQQC[G &[#eQYhM0992'P02j6Ii)j62#(TT3NQU'Y4FN!*R!0L&!m#J)DekGqh#b8KR8qdf GRP2GAP-KiU!L"B%*Sk5d5)6EaH#)[PIDY%S1@r*6qYD5UVY)!6#+`rCT90@@9Pe f2`GT'%#NQ#rGViDr-TX*c4h*ZF&UDGhd8#EVl2LPpXTG,1UBF+D[#,LFFA'M6hk aJlBC8ddU!5Jbm*cPYFM`F6U4T3P"cP5M4EI0#+a8Q&2*TZfZ$l3IHC-,JBb`J%Z M`R!22V-D@MMYTEq0m*B$""L&-$@R%596"[Y'"qFra9-Ll2Z-cHJL[EXIP'YaGET P'3DN&iTMTYek#5*m+A@ETbN-G05Sc1+XHL(!DZY!%dkdDD6R-hV,'3Ikh+&mSN& -$+H4C`,MB)CXi!6q#APCi06hY-'MNZSFYk)HqJTBrM*2fl@e2TE3,dRPR3l'SjS G+-r!A3fY2ah6+jU&d+ri0$T43"64%'$1#d6LUFZ92*J)LB*L!Qk[(fX1er@U!4% Llp(48ifPZ"mbC[CZfd+SP`!`D9p(TPP,TXVfC4Xm8Dj@CqdY&8jm(+Y4&LfUEL& P)G!9k1%F5EXQAZZkZcKeG"+M(VS9++C3`L(1*0B$Q9P`1[I00-iHaEaJ!$*#K*! !9I$I8E4Y&N93S$IC+3YfR"!"rR+SU0YPEL+0FM`*IpkDSHLXH4$#SVXmC6[%'bf 3!#I5Af,bTHD$ik9fPDU"*TL8I#!9$8r9bK'KX@R21k6B#Q+#8d+(SHA-G$0p%Fb Y+*IGiF,D"rkEcVBL,Tq*PhSSM''Y65ddf,lBF-6FQVaEV6BZBqZVIi,VCa2`N9J ldk3`Tf0jM0@3!2fZqZ80lVFI!k`AD2LAf`AV$pie&$'BpGPE,2&q)&mpa01GL"i I,aVddjPG4NUYPi"QlZN[N!$D0Q0`$q6@5-Zi)d[%6%26i2M8K(,#@hLj#-EA6!J pKr$AaV*JP@S"IMX)VFiPjm@N[Y&"bXdQ,A+YYih0"P`dH5VrG$Ij"aT#N!!b,3q HVfA3*UBE`AMTjm[f,b$bB3c"NC!!-RIDMC%$8k,emVqD@Nb(qjMPS$iF@LSm)r` lE#GT$83$1MriQh8q`dC'm1`E(k86FZ@a@T'JXQXT(f-!VbbiQ(bG+qKIdf4Ik@j AX6mhU1l[#@e,M-r%66H2Ecm+FX2FDX"IpEBpL(,SGMTb$lD0SmTe(X0&qLaA,ji VR!lL`lU1aERrM1d%bPK1'KqK%LV8XZD%U4cMK#3ik%bi&Ccc!m(maEM)c%#[l4h kBhF(8Pf-Y(9V9b6mi,&XRMmpY4-XeQS9cl&U,liFY-L@**E)$rGS&Ej9("ddMEF kpV9"led`(i5pIXPjjCKL(C`8qFpbj"&6V8A6c*F5G@EMACK6'N$alR2-0(`$FPB la`e#rPpr`"MIBA"V,VV$)`M@Mal5S)c5l5HQB+ZK8AVAR'Qi(`k+T('9+)95H0K @9Z4lE'-,T3fV0,CIUm#i%ReI*aGc01!)k1+IkjrhcM"eZ$DD&RrXGH86d'P4I`' Ib4#'LU"mH`+!d&q''ilmFe!cl+"'aak)[&'NBEFeUMI'`l3+%ircfca0iYef#1j *c2,QihC"$T!!jTT#c,fl,c4HcK[-&0aER!$%Zm@k1`2UfL`8+KH(2b3Jbh&-TAf %Xk!d@RqR+c`)%D',mBMNb1$9iI'`%SY0-Z"!Z63*%Q&-hRKKL$-,84KUQ`raX#' RJRpA4,@-*iM2MaAH*`[apdZ`QK$5rdAd+d2H$&10b`RKB!"A61'$!f9(HX[2pSp j)R#*3Z5aT6p+"T!!1`lrFHp2TPchN!!9aHdQeYLBr(DbIP%%hd0(N!!YUZkEQ5Z +6#P"dQ5pbYpS%BTRb4PUB58'@fSCjfBSF#V*5MNiRdihbSGSYdU5*9NPiT6i4XB Ge[1'E#V`AEpDcD((Y"b3!*f6S!F(ilCmBh)$Y@(cNE5hDpJqj[qH8QVXQ!'C"k- &Jf!H0a5"h6@"0UXcCPNSQa@2$1B(1bM'6TMZ51ATGpTfN!!M6[l[QJI"%l((dX) TlV0E-qd[KFI46`9!1YJj`SY`"VBaC#jCDj*iEjhN3dLFN5@'e0k5"Ck'@pdBXaD ,#ElN(2A4[pJ-PJPA"*[V['1DSBqKGG,ahhJCqffGdUT$4q"ddpLQBm9NbeRkA'` eDqB!k2qVPc-b%D$PPCBkjU&2G*-#Z6L#E6qKI`l5ZCr&"6Vd+FBiNNFdLi&h5G+ dQPQ'm$@5Uj[S6ZSJ6G*8GMc6Zr*Dkkb"i)3NrD&4rVpJZXkH*kq8G2IhLacGU,% h!-(A5hc8TV1&M!XRD,5-cEc%6[pB&CFJl0(mEq-!DcQi5D%%B3jqT-&!-kl[edk Pl-E0cVFIA"'&H8'K9hS5eZEr`VTD%&NV&%&iGE%I%&FiX"YSa$KpRmGeB&AcT0i Iad9M6U(d9mR#$Lq@iZa'*iKN`XLdh68@-"*LN!$64'++F,d`dHA$CSPm2*D"R6H BTI1#V$r5949LiNdJ*"HZ0a,M9IA8!2!"fL&(2kiH,!YYUP1)3!bFKq#F2)Gd62r dG)S[eX,fCrm4ipd-QrJH-#"b6-6[jd0I0bL"JHb$fQ!q!%F8R80cVjMJ$RFrUkT LKU2BML-FEDhN`'8D!!!: \ No newline at end of file
diff --git a/macos/src/XMLTestPrefix.h b/macos/src/XMLTestPrefix.h
new file mode 100644
index 0000000..3e84255
--- /dev/null
+++ b/macos/src/XMLTestPrefix.h
@@ -0,0 +1 @@
+int test_main(int argc, char **argv); #define main(X,Y) test_main(X,Y) \ No newline at end of file
diff --git a/macos/src/XMLTestPrefix2.h b/macos/src/XMLTestPrefix2.h
new file mode 100644
index 0000000..55df51e
--- /dev/null
+++ b/macos/src/XMLTestPrefix2.h
@@ -0,0 +1 @@
+int test_main(int argc, char* argv[]); #define main() test_main(int argc, char* argv[]) \ No newline at end of file
diff --git a/macos/src/config-mac.h b/macos/src/config-mac.h
new file mode 100644
index 0000000..7317aef
--- /dev/null
+++ b/macos/src/config-mac.h
@@ -0,0 +1,201 @@
+/* config.h generated manually for macos. */
+
+/* Define if you have the strftime function. */
+#define HAVE_STRFTIME
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS
+
+#define PACKAGE
+#define VERSION
+
+#undef HAVE_LIBZ
+#undef HAVE_LIBM
+#undef HAVE_ISINF
+#undef HAVE_ISNAN
+#undef HAVE_LIBHISTORY
+#undef HAVE_LIBREADLINE
+
+#define SOCKLEN_T socklen_t
+#define HAVE_LIBPTHREAD
+#define HAVE_PTHREAD_H
+#define LIBXML_THREAD_ENABLED
+
+/* Define if you have the _stat function. */
+#define HAVE__STAT
+
+/* Define if you have the class function. */
+#undef HAVE_CLASS
+
+/* Define if you have the finite function. */
+#undef HAVE_FINITE
+
+/* Define if you have the fp_class function. */
+#undef HAVE_FP_CLASS
+
+/* Define if you have the fpclass function. */
+#undef HAVE_FPCLASS
+
+/* Define if you have the fprintf function. */
+#define HAVE_FPRINTF
+
+/* Define if you have the isnand function. */
+#undef HAVE_ISNAND
+
+/* Define if you have the localtime function. */
+#define HAVE_LOCALTIME
+
+/* Define if you have the printf function. */
+#define HAVE_PRINTF
+
+/* Define if you have the signal function. */
+#define HAVE_SIGNAL
+
+/* Define if you have the snprintf function. */
+#define HAVE_SNPRINTF
+
+/* Define if you have the sprintf function. */
+#define HAVE_SPRINTF
+
+/* Define if you have the sscanf function. */
+#define HAVE_SSCANF
+
+/* Define if you have the stat function. */
+#define HAVE_STAT
+
+/* Define if you have the strdup function. */
+#define HAVE_STRDUP
+
+/* Define if you have the strerror function. */
+#define HAVE_STRERROR
+
+/* Define if you have the strftime function. */
+#define HAVE_STRFTIME
+
+/* Define if you have the strndup function. */
+#define HAVE_STRNDUP
+
+/* Define if you have the vfprintf function. */
+#define HAVE_VFPRINTF
+
+/* Define if you have the vsnprintf function. */
+#define HAVE_VSNPRINTF
+
+/* Define if you have the vsprintf function. */
+#define HAVE_VSPRINTF
+
+/* Define if you have the <ansidecl.h> header file. */
+#define HAVE_ANSIDECL_H
+
+/* Define if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H
+
+/* Define if you have the <ctype.h> header file. */
+#define HAVE_CTYPE_H
+
+/* Define if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H
+
+/* Define if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H
+
+/* Define if you have the <errno.h> header file. */
+#define HAVE_ERRNO_H
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H
+
+/* Define if you have the <float.h> header file. */
+#define HAVE_FLOAT_H
+
+/* Define if you have the <fp_class.h> header file. */
+#define HAVE_FP_CLASS_H
+
+/* Define if you have the <ieeefp.h> header file. */
+#define HAVE_IEEEFP_H
+
+/* Define if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define if you have the <math.h> header file. */
+#define HAVE_MATH_H
+
+/* Define if you have the <nan.h> header file. */
+#define HAVE_NAN_H
+
+/* Define if you have the <ndir.h> header file. */
+#define HAVE_NDIR_H
+
+/* Define if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H
+
+/* Define if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H
+
+/* Define if you have the <signal.h> header file. */
+#define HAVE_SIGNAL_H
+
+/* Define if you have the <stdarg.h> header file. */
+#define HAVE_STDARG_H
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H
+
+/* Define if you have the <string.h> header file. */
+#define HAVE_STRING_H
+
+/* Define if you have the <sys/dir.h> header file. */
+#define HAVE_SYS_DIR_H
+
+/* Define if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define if you have the <sys/ndir.h> header file. */
+#undef HAVE_SYS_NDIR_H
+
+/* Define if you have the <sys/select.h> header file. */
+#define HAVE_SYS_SELECT_H
+
+/* Define if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H
+
+/* Define if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H
+
+/* Define if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H
+
+/* Define if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H
+
+/* Define if you have the <time.h> header file. */
+#define HAVE_TIME_H
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H
+
+/* Define if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* Define if you have the inet library (-linet). */
+#undef HAVE_LIBINET
+
+/* Define if you have the nsl library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define if you have the socket library (-lsocket). */
+#undef HAVE_LIBSOCKET
+
+/* Name of package */
+#define PACKAGE
+
+/* Version number of package */
+#define VERSION
+
+/* Define if compiler has function prototypes */
+#define PROTOTYPES
+
+#include <libxml/xmlversion.h>
+#include <sys/types.h>
+#include <extra/stricmp.h>
+#include <extra/strdup.h>
diff --git a/macos/src/libxml2_GUSIConfig.cp b/macos/src/libxml2_GUSIConfig.cp
new file mode 100644
index 0000000..77d0c93
--- /dev/null
+++ b/macos/src/libxml2_GUSIConfig.cp
@@ -0,0 +1 @@
+/**************** BEGIN GUSI CONFIGURATION **************************** * * GUSI Configuration section generated by GUSI Configurator * last modified: Wed Oct 31 17:07:45 2001 * * This section will be overwritten by the next run of Configurator. */ #define GUSI_SOURCE #include <GUSIConfig.h> #include <sys/cdefs.h> /* Declarations of Socket Factories */ __BEGIN_DECLS void GUSIwithInetSockets(); void GUSIwithLocalSockets(); void GUSIwithMTInetSockets(); void GUSIwithMTTcpSockets(); void GUSIwithMTUdpSockets(); void GUSIwithOTInetSockets(); void GUSIwithOTTcpSockets(); void GUSIwithOTUdpSockets(); void GUSIwithPPCSockets(); void GUSISetupFactories(); __END_DECLS /* Configure Socket Factories */ void GUSISetupFactories() { #ifdef GUSISetupFactories_BeginHook GUSISetupFactories_BeginHook #endif GUSIwithInetSockets(); #ifdef GUSISetupFactories_EndHook GUSISetupFactories_EndHook #endif } /* Declarations of File Devices */ __BEGIN_DECLS void GUSIwithNullSockets(); void GUSISetupDevices(); __END_DECLS /* Configure File Devices */ void GUSISetupDevices() { #ifdef GUSISetupDevices_BeginHook GUSISetupDevices_BeginHook #endif GUSIwithNullSockets(); #ifdef GUSISetupDevices_EndHook GUSISetupDevices_EndHook #endif } #ifndef __cplusplus #error GUSISetupConfig() needs to be written in C++ #endif GUSIConfiguration::FileSuffix sSuffices[] = { "", '????', '????' }; extern "C" void GUSISetupConfig() { GUSIConfiguration * config = GUSIConfiguration::CreateInstance(GUSIConfiguration::kNoResource); config->ConfigureDefaultTypeCreator('TEXT', 'CWIE'); config->ConfigureSuffices( sizeof(sSuffices)/sizeof(GUSIConfiguration::FileSuffix)-1, sSuffices); } /**************** END GUSI CONFIGURATION *************************/ \ No newline at end of file
diff --git a/macos/src/macos_main.c b/macos/src/macos_main.c
new file mode 100644
index 0000000..2625000
--- /dev/null
+++ b/macos/src/macos_main.c
@@ -0,0 +1 @@
+#include <GUSICommandLine.h> #include <stdlib.h> #undef main DECLARE_MAIN(test) REGISTER_MAIN_START REGISTER_MAIN(test) REGISTER_MAIN_END int main() { (void) exec_commands(); return 0; } \ No newline at end of file
diff --git a/missing b/missing
new file mode 100755
index 0000000..6a37006
--- /dev/null
+++ b/missing
@@ -0,0 +1,336 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+case "$1" in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing 0.4 - GNU automake"
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+ aclocal*)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case "$f" in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+ system. You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1Help2man' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+ test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+ fi
+ if [ -f "$file" ]; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit 1
+ fi
+ ;;
+
+ makeinfo)
+ if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+ # We have makeinfo, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ touch $file
+ ;;
+
+ tar)
+ shift
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ fi
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar "$@" && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case "$firstarg" in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ case "$firstarg" in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+ system. You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequirements for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755
index 0000000..8ab885e
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,99 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case "${1}" in
+ -h | --help | --h* ) # -h for help
+ echo "${usage}" 1>&2; exit 0 ;;
+ -m ) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
+ dirmode="${1}"
+ shift ;;
+ -- ) shift; break ;; # stop option processing
+ -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option
+ * ) break ;; # first non-opt arg
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+0) exit 0 ;;
+esac
+
+case $dirmode in
+'')
+ if mkdir -p -- . 2>/dev/null; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ fi ;;
+*)
+ if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ fi ;;
+esac
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
+
+ lasterr=""
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 3
+# End:
+# mkinstalldirs ends here
diff --git a/nanoftp.c b/nanoftp.c
new file mode 100644
index 0000000..a2ecc40
--- /dev/null
+++ b/nanoftp.c
@@ -0,0 +1,2276 @@
+/*
+ * nanoftp.c: basic FTP client support
+ *
+ * Reference: RFC 959
+ */
+
+#ifdef TESTING
+#define STANDALONE
+#define HAVE_STDLIB_H
+#define HAVE_UNISTD_H
+#define HAVE_SYS_SOCKET_H
+#define HAVE_NETINET_IN_H
+#define HAVE_NETDB_H
+#define HAVE_SYS_TIME_H
+#else /* TESTING */
+#define NEED_SOCKETS
+#endif /* TESTING */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_FTP_ENABLED
+#include <string.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/xmlerror.h>
+#include <libxml/uri.h>
+#include <libxml/nanoftp.h>
+#include <libxml/globals.h>
+
+/* #define DEBUG_FTP 1 */
+#ifdef STANDALONE
+#ifndef DEBUG_FTP
+#define DEBUG_FTP 1
+#endif
+#endif
+
+
+#ifdef __MINGW32__
+#define _WINSOCKAPI_
+#include <wsockcompat.h>
+#include <winsock2.h>
+#undef SOCKLEN_T
+#define SOCKLEN_T unsigned int
+#endif
+
+
+/**
+ * A couple portability macros
+ */
+#ifndef _WINSOCKAPI_
+#ifndef __BEOS__
+#define closesocket(s) close(s)
+#endif
+#define SOCKET int
+#endif
+#if defined(VMS) || defined(__VMS)
+#define SOCKLEN_T unsigned int
+#endif
+
+#ifdef __BEOS__
+#ifndef PF_INET
+#define PF_INET AF_INET
+#endif
+#endif
+
+
+#define FTP_COMMAND_OK 200
+#define FTP_SYNTAX_ERROR 500
+#define FTP_GET_PASSWD 331
+#define FTP_BUF_SIZE 512
+
+#define XML_NANO_MAX_URLBUF 4096
+
+typedef struct xmlNanoFTPCtxt {
+ char *protocol; /* the protocol name */
+ char *hostname; /* the host name */
+ int port; /* the port */
+ char *path; /* the path within the URL */
+ char *user; /* user string */
+ char *passwd; /* passwd string */
+#ifdef SUPPORT_IP6
+ struct sockaddr_storage ftpAddr; /* this is large enough to hold IPv6 address*/
+#else
+ struct sockaddr_in ftpAddr; /* the socket address struct */
+#endif
+ int passive; /* currently we support only passive !!! */
+ SOCKET controlFd; /* the file descriptor for the control socket */
+ SOCKET dataFd; /* the file descriptor for the data socket */
+ int state; /* WRITE / READ / CLOSED */
+ int returnValue; /* the protocol return value */
+ /* buffer for data received from the control connection */
+ char controlBuf[FTP_BUF_SIZE + 1];
+ int controlBufIndex;
+ int controlBufUsed;
+ int controlBufAnswer;
+} xmlNanoFTPCtxt, *xmlNanoFTPCtxtPtr;
+
+static int initialized = 0;
+static char *proxy = NULL; /* the proxy name if any */
+static int proxyPort = 0; /* the proxy port if any */
+static char *proxyUser = NULL; /* user for proxy authentication */
+static char *proxyPasswd = NULL;/* passwd for proxy authentication */
+static int proxyType = 0; /* uses TYPE or a@b ? */
+
+#ifdef SUPPORT_IP6
+static
+int have_ipv6(void) {
+ int s;
+
+ s = socket (AF_INET6, SOCK_STREAM, 0);
+ if (s != -1) {
+ close (s);
+ return (1);
+ }
+ return (0);
+}
+#endif
+
+/**
+ * xmlFTPErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlFTPErrMemory(const char *extra)
+{
+ __xmlSimpleError(XML_FROM_FTP, XML_ERR_NO_MEMORY, NULL, NULL, extra);
+}
+
+/**
+ * xmlNanoFTPInit:
+ *
+ * Initialize the FTP protocol layer.
+ * Currently it just checks for proxy informations,
+ * and get the hostname
+ */
+
+void
+xmlNanoFTPInit(void) {
+ const char *env;
+#ifdef _WINSOCKAPI_
+ WSADATA wsaData;
+#endif
+
+ if (initialized)
+ return;
+
+#ifdef _WINSOCKAPI_
+ if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
+ return;
+#endif
+
+ proxyPort = 21;
+ env = getenv("no_proxy");
+ if (env != NULL)
+ return;
+ env = getenv("ftp_proxy");
+ if (env != NULL) {
+ xmlNanoFTPScanProxy(env);
+ } else {
+ env = getenv("FTP_PROXY");
+ if (env != NULL) {
+ xmlNanoFTPScanProxy(env);
+ }
+ }
+ env = getenv("ftp_proxy_user");
+ if (env != NULL) {
+ proxyUser = xmlMemStrdup(env);
+ }
+ env = getenv("ftp_proxy_password");
+ if (env != NULL) {
+ proxyPasswd = xmlMemStrdup(env);
+ }
+ initialized = 1;
+}
+
+/**
+ * xmlNanoFTPCleanup:
+ *
+ * Cleanup the FTP protocol layer. This cleanup proxy informations.
+ */
+
+void
+xmlNanoFTPCleanup(void) {
+ if (proxy != NULL) {
+ xmlFree(proxy);
+ proxy = NULL;
+ }
+ if (proxyUser != NULL) {
+ xmlFree(proxyUser);
+ proxyUser = NULL;
+ }
+ if (proxyPasswd != NULL) {
+ xmlFree(proxyPasswd);
+ proxyPasswd = NULL;
+ }
+#ifdef _WINSOCKAPI_
+ if (initialized)
+ WSACleanup();
+#endif
+ initialized = 0;
+}
+
+/**
+ * xmlNanoFTPProxy:
+ * @host: the proxy host name
+ * @port: the proxy port
+ * @user: the proxy user name
+ * @passwd: the proxy password
+ * @type: the type of proxy 1 for using SITE, 2 for USER a@b
+ *
+ * Setup the FTP proxy informations.
+ * This can also be done by using ftp_proxy ftp_proxy_user and
+ * ftp_proxy_password environment variables.
+ */
+
+void
+xmlNanoFTPProxy(const char *host, int port, const char *user,
+ const char *passwd, int type) {
+ if (proxy != NULL)
+ xmlFree(proxy);
+ if (proxyUser != NULL)
+ xmlFree(proxyUser);
+ if (proxyPasswd != NULL)
+ xmlFree(proxyPasswd);
+ if (host)
+ proxy = xmlMemStrdup(host);
+ if (user)
+ proxyUser = xmlMemStrdup(user);
+ if (passwd)
+ proxyPasswd = xmlMemStrdup(passwd);
+ proxyPort = port;
+ proxyType = type;
+}
+
+/**
+ * xmlNanoFTPScanURL:
+ * @ctx: an FTP context
+ * @URL: The URL used to initialize the context
+ *
+ * (Re)Initialize an FTP context by parsing the URL and finding
+ * the protocol host port and path it indicates.
+ */
+
+static void
+xmlNanoFTPScanURL(void *ctx, const char *URL) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ const char *cur = URL;
+ char buf[XML_NANO_MAX_URLBUF];
+ int indx = 0;
+ int port = 0;
+
+ if (ctxt->protocol != NULL) {
+ xmlFree(ctxt->protocol);
+ ctxt->protocol = NULL;
+ }
+ if (ctxt->hostname != NULL) {
+ xmlFree(ctxt->hostname);
+ ctxt->hostname = NULL;
+ }
+ if (ctxt->path != NULL) {
+ xmlFree(ctxt->path);
+ ctxt->path = NULL;
+ }
+ if (URL == NULL) return;
+ buf[indx] = 0;
+ while ((*cur != 0) && (indx < XML_NANO_MAX_URLBUF - 1)) {
+ if ((cur[0] == ':') && (cur[1] == '/') && (cur[2] == '/')) {
+ buf[indx] = 0;
+ ctxt->protocol = xmlMemStrdup(buf);
+ indx = 0;
+ cur += 3;
+ break;
+ }
+ buf[indx++] = *cur++;
+ }
+ if (*cur == 0) return;
+
+ buf[indx] = 0;
+ /* allow user@ and user:pass@ forms */
+ {
+ const char *p = strchr(cur, '@');
+ if(p) {
+ while(indx < XML_NANO_MAX_URLBUF-1) {
+ if(cur[0] == ':' || cur[0] == '@') break;
+ buf[indx++] = *cur++;
+ }
+ buf[indx] = 0;
+ ctxt->user = xmlMemStrdup(buf);
+ indx = 0;
+ if(cur[0] == ':') {
+ cur++;
+ while(indx < XML_NANO_MAX_URLBUF-1) {
+ if(cur[0] == '@') break;
+ buf[indx++] = *cur++;
+ }
+ buf[indx] = 0;
+ ctxt->passwd = xmlMemStrdup(buf);
+ indx = 0;
+ }
+ cur = p+1;
+ }
+ }
+
+ while (indx < XML_NANO_MAX_URLBUF - 1) {
+ if ((strchr (cur, '[') && !strchr (cur, ']')) ||
+ (!strchr (cur, '[') && strchr (cur, ']'))) {
+ xmlGenericError (xmlGenericErrorContext, "\nxmlNanoFTPScanURL: %s",
+ "Syntax Error\n");
+ return;
+ }
+
+ if (cur[0] == '[') {
+ cur++;
+ while (cur[0] != ']')
+ buf[indx++] = *cur++;
+
+ if (!strchr (buf, ':')) {
+ xmlGenericError (xmlGenericErrorContext, "\nxmlNanoFTPScanURL: %s",
+ "Use [IPv6]/IPv4 format\n");
+ return;
+ }
+
+ buf[indx] = 0;
+ ctxt->hostname = xmlMemStrdup (buf);
+ indx = 0;
+ cur += 1;
+ if (cur[0] == ':') {
+ cur++;
+ while (*cur >= '0' && *cur <= '9') {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+
+ if (port != 0) ctxt->port = port;
+ while ((cur[0] != '/') && (*cur != 0))
+ cur++;
+ }
+ break;
+ }
+ else { /* address is an IPv4 one*/
+ if (cur[0] == ':') {
+ buf[indx] = 0;
+ ctxt->hostname = xmlMemStrdup (buf);
+ indx = 0;
+ cur += 1;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+ if (port != 0) ctxt->port = port;
+ while ((cur[0] != '/') && (*cur != 0))
+ cur++;
+ break;
+ }
+ if ((*cur == '/') || (*cur == 0)) {
+ buf[indx] = 0;
+ ctxt->hostname = xmlMemStrdup (buf);
+ indx = 0;
+ break;
+ }
+ }
+ buf[indx++] = *cur++;
+ }
+ if (*cur == 0)
+ ctxt->path = xmlMemStrdup("/");
+ else {
+ indx = 0;
+ buf[indx] = 0;
+ while ((*cur != 0) && (indx < XML_NANO_MAX_URLBUF-1))
+ buf[indx++] = *cur++;
+ buf[indx] = 0;
+ ctxt->path = xmlMemStrdup(buf);
+ }
+}
+
+/**
+ * xmlNanoFTPUpdateURL:
+ * @ctx: an FTP context
+ * @URL: The URL used to update the context
+ *
+ * Update an FTP context by parsing the URL and finding
+ * new path it indicates. If there is an error in the
+ * protocol, hostname, port or other information, the
+ * error is raised. It indicates a new connection has to
+ * be established.
+ *
+ * Returns 0 if Ok, -1 in case of error (other host).
+ */
+
+int
+xmlNanoFTPUpdateURL(void *ctx, const char *URL) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ const char *cur = URL;
+ char buf[XML_NANO_MAX_URLBUF];
+ int indx = 0;
+ int port = 0;
+
+ if (URL == NULL)
+ return(-1);
+ if (ctxt == NULL)
+ return(-1);
+ if (ctxt->protocol == NULL)
+ return(-1);
+ if (ctxt->hostname == NULL)
+ return(-1);
+ buf[indx] = 0;
+ while ((*cur != 0) && (indx < XML_NANO_MAX_URLBUF-1)) {
+ if ((cur[0] == ':') && (cur[1] == '/') && (cur[2] == '/')) {
+ buf[indx] = 0;
+ if (strcmp(ctxt->protocol, buf))
+ return(-1);
+ indx = 0;
+ cur += 3;
+ break;
+ }
+ buf[indx++] = *cur++;
+ }
+ if (*cur == 0)
+ return(-1);
+
+ buf[indx] = 0;
+ while (indx < XML_NANO_MAX_URLBUF-1) {
+ if ((strchr (cur, '[') && !strchr (cur, ']')) ||
+ (!strchr (cur, '[') && strchr (cur, ']'))) {
+ xmlGenericError (xmlGenericErrorContext, "\nxmlNanoFTPUpdateURL: %s",
+ "Syntax Error\n");
+ return (-1);
+ }
+
+ if (cur[0] == '[') {
+ cur++;
+ while ((cur[0] != ']') && (indx < XML_NANO_MAX_URLBUF-1))
+ buf[indx++] = *cur++;
+
+ if (!strchr (buf, ':')) {
+ xmlGenericError (xmlGenericErrorContext, "\nxmlNanoFTPUpdateURL: %s",
+ "Use [IPv6]/IPv4 format\n");
+ return (-1);
+ }
+
+ buf[indx] = 0;
+ if (strcmp (ctxt->hostname, buf))
+ return (-1);
+ indx = 0;
+ cur += 1;
+ if (cur[0] == ':') {
+ cur++;
+ while (*cur >= '0' && *cur <= '9') {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+
+ if (port != ctxt->port)
+ return (-1);
+ while ((cur[0] != '/') && (*cur != 0))
+ cur++;
+ }
+ break;
+ }
+ else {
+ if (cur[0] == ':') {
+ buf[indx] = 0;
+ if (strcmp (ctxt->hostname, buf))
+ return (-1);
+ indx = 0;
+ cur += 1;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+ if (port != ctxt->port)
+ return (-1);
+ while ((cur[0] != '/') && (*cur != 0))
+ cur++;
+ break;
+ }
+ if ((*cur == '/') || (*cur == 0)) {
+ buf[indx] = 0;
+ if (strcmp (ctxt->hostname, buf))
+ return (-1);
+ indx = 0;
+ break;
+ }
+ }
+ buf[indx++] = *cur++;
+ }
+ if (ctxt->path != NULL) {
+ xmlFree(ctxt->path);
+ ctxt->path = NULL;
+ }
+
+ if (*cur == 0)
+ ctxt->path = xmlMemStrdup("/");
+ else {
+ indx = 0;
+ buf[indx] = 0;
+ while ((*cur != 0) && (indx < XML_NANO_MAX_URLBUF-1))
+ buf[indx++] = *cur++;
+ buf[indx] = 0;
+ ctxt->path = xmlMemStrdup(buf);
+ }
+ return(0);
+}
+
+/**
+ * xmlNanoFTPScanProxy:
+ * @URL: The proxy URL used to initialize the proxy context
+ *
+ * (Re)Initialize the FTP Proxy context by parsing the URL and finding
+ * the protocol host port it indicates.
+ * Should be like ftp://myproxy/ or ftp://myproxy:3128/
+ * A NULL URL cleans up proxy informations.
+ */
+
+void
+xmlNanoFTPScanProxy(const char *URL) {
+ const char *cur = URL;
+ char buf[XML_NANO_MAX_URLBUF];
+ int indx = 0;
+ int port = 0;
+
+ if (proxy != NULL) {
+ xmlFree(proxy);
+ proxy = NULL;
+ }
+ if (proxyPort != 0) {
+ proxyPort = 0;
+ }
+#ifdef DEBUG_FTP
+ if (URL == NULL)
+ xmlGenericError(xmlGenericErrorContext, "Removing FTP proxy info\n");
+ else
+ xmlGenericError(xmlGenericErrorContext, "Using FTP proxy %s\n", URL);
+#endif
+ if (URL == NULL) return;
+ buf[indx] = 0;
+ while ((*cur != 0) && (indx < XML_NANO_MAX_URLBUF-1)) {
+ if ((cur[0] == ':') && (cur[1] == '/') && (cur[2] == '/')) {
+ buf[indx] = 0;
+ indx = 0;
+ cur += 3;
+ break;
+ }
+ buf[indx++] = *cur++;
+ }
+ if (*cur == 0) return;
+
+ buf[indx] = 0;
+ while (indx < XML_NANO_MAX_URLBUF-1) {
+ if ((strchr (cur, '[') && !strchr (cur, ']')) ||
+ (!strchr (cur, '[') && strchr (cur, ']'))) {
+ xmlGenericError (xmlGenericErrorContext, "\nxmlNanoFTPScanProxy: %s",
+ "Syntax error\n");
+ return;
+ }
+
+ if (cur[0] == '[') {
+ cur++;
+ while (cur[0] != ']')
+ buf[indx++] = *cur++;
+ if (!strchr (buf, ':')) {
+ xmlGenericError (xmlGenericErrorContext, "\nxmlNanoFTPScanProxy: %s",
+ "Use [IPv6]/IPv4 format\n");
+ return;
+ }
+
+ buf[indx] = 0;
+ proxy = xmlMemStrdup (buf);
+ indx = 0;
+ cur += 1;
+ if (cur[0] == ':') {
+ cur++;
+ while (*cur >= '0' && *cur <= '9') {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+
+ if (port != 0) proxyPort = port;
+ while ((cur[0] != '/') && (*cur != 0))
+ cur++;
+ }
+ break;
+ }
+ else {
+ if (cur[0] == ':') {
+ buf[indx] = 0;
+ proxy = xmlMemStrdup (buf);
+ indx = 0;
+ cur += 1;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+ if (port != 0) proxyPort = port;
+ while ((cur[0] != '/') && (*cur != 0))
+ cur++;
+ break;
+ }
+ if ((*cur == '/') || (*cur == 0)) {
+ buf[indx] = 0;
+ proxy = xmlMemStrdup (buf);
+ indx = 0;
+ break;
+ }
+ }
+ buf[indx++] = *cur++;
+ }
+}
+
+/**
+ * xmlNanoFTPNewCtxt:
+ * @URL: The URL used to initialize the context
+ *
+ * Allocate and initialize a new FTP context.
+ *
+ * Returns an FTP context or NULL in case of error.
+ */
+
+void*
+xmlNanoFTPNewCtxt(const char *URL) {
+ xmlNanoFTPCtxtPtr ret;
+ char *unescaped;
+
+ ret = (xmlNanoFTPCtxtPtr) xmlMalloc(sizeof(xmlNanoFTPCtxt));
+ if (ret == NULL) {
+ xmlFTPErrMemory("allocating FTP context");
+ return(NULL);
+ }
+
+ memset(ret, 0, sizeof(xmlNanoFTPCtxt));
+ ret->port = 21;
+ ret->passive = 1;
+ ret->returnValue = 0;
+ ret->controlBufIndex = 0;
+ ret->controlBufUsed = 0;
+ ret->controlFd = -1;
+
+ unescaped = xmlURIUnescapeString(URL, 0, NULL);
+ if (unescaped != NULL)
+ xmlNanoFTPScanURL(ret, unescaped);
+ else if (URL != NULL)
+ xmlNanoFTPScanURL(ret, URL);
+ xmlFree(unescaped);
+
+ return(ret);
+}
+
+/**
+ * xmlNanoFTPFreeCtxt:
+ * @ctx: an FTP context
+ *
+ * Frees the context after closing the connection.
+ */
+
+void
+xmlNanoFTPFreeCtxt(void * ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ if (ctxt == NULL) return;
+ if (ctxt->hostname != NULL) xmlFree(ctxt->hostname);
+ if (ctxt->protocol != NULL) xmlFree(ctxt->protocol);
+ if (ctxt->path != NULL) xmlFree(ctxt->path);
+ ctxt->passive = 1;
+ if (ctxt->controlFd >= 0) closesocket(ctxt->controlFd);
+ ctxt->controlFd = -1;
+ ctxt->controlBufIndex = -1;
+ ctxt->controlBufUsed = -1;
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlNanoFTPParseResponse:
+ * @buf: the buffer containing the response
+ * @len: the buffer length
+ *
+ * Parsing of the server answer, we just extract the code.
+ *
+ * returns 0 for errors
+ * +XXX for last line of response
+ * -XXX for response to be continued
+ */
+static int
+xmlNanoFTPParseResponse(char *buf, int len) {
+ int val = 0;
+
+ if (len < 3) return(-1);
+ if ((*buf >= '0') && (*buf <= '9'))
+ val = val * 10 + (*buf - '0');
+ else
+ return(0);
+ buf++;
+ if ((*buf >= '0') && (*buf <= '9'))
+ val = val * 10 + (*buf - '0');
+ else
+ return(0);
+ buf++;
+ if ((*buf >= '0') && (*buf <= '9'))
+ val = val * 10 + (*buf - '0');
+ else
+ return(0);
+ buf++;
+ if (*buf == '-')
+ return(-val);
+ return(val);
+}
+
+/**
+ * xmlNanoFTPGetMore:
+ * @ctx: an FTP context
+ *
+ * Read more information from the FTP control connection
+ * Returns the number of bytes read, < 0 indicates an error
+ */
+static int
+xmlNanoFTPGetMore(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ int len;
+ int size;
+
+ if ((ctxt->controlBufIndex < 0) || (ctxt->controlBufIndex > FTP_BUF_SIZE)) {
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNanoFTPGetMore : controlBufIndex = %d\n",
+ ctxt->controlBufIndex);
+#endif
+ return(-1);
+ }
+
+ if ((ctxt->controlBufUsed < 0) || (ctxt->controlBufUsed > FTP_BUF_SIZE)) {
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNanoFTPGetMore : controlBufUsed = %d\n",
+ ctxt->controlBufUsed);
+#endif
+ return(-1);
+ }
+ if (ctxt->controlBufIndex > ctxt->controlBufUsed) {
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNanoFTPGetMore : controlBufIndex > controlBufUsed %d > %d\n",
+ ctxt->controlBufIndex, ctxt->controlBufUsed);
+#endif
+ return(-1);
+ }
+
+ /*
+ * First pack the control buffer
+ */
+ if (ctxt->controlBufIndex > 0) {
+ memmove(&ctxt->controlBuf[0], &ctxt->controlBuf[ctxt->controlBufIndex],
+ ctxt->controlBufUsed - ctxt->controlBufIndex);
+ ctxt->controlBufUsed -= ctxt->controlBufIndex;
+ ctxt->controlBufIndex = 0;
+ }
+ size = FTP_BUF_SIZE - ctxt->controlBufUsed;
+ if (size == 0) {
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNanoFTPGetMore : buffer full %d \n", ctxt->controlBufUsed);
+#endif
+ return(0);
+ }
+
+ /*
+ * Read the amount left on the control connection
+ */
+ if ((len = recv(ctxt->controlFd, &ctxt->controlBuf[ctxt->controlBufIndex],
+ size, 0)) < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "recv failed");
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNanoFTPGetMore : read %d [%d - %d]\n", len,
+ ctxt->controlBufUsed, ctxt->controlBufUsed + len);
+#endif
+ ctxt->controlBufUsed += len;
+ ctxt->controlBuf[ctxt->controlBufUsed] = 0;
+
+ return(len);
+}
+
+/**
+ * xmlNanoFTPReadResponse:
+ * @ctx: an FTP context
+ *
+ * Read the response from the FTP server after a command.
+ * Returns the code number
+ */
+static int
+xmlNanoFTPReadResponse(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char *ptr, *end;
+ int len;
+ int res = -1, cur = -1;
+
+get_more:
+ /*
+ * Assumes everything up to controlBuf[controlBufIndex] has been read
+ * and analyzed.
+ */
+ len = xmlNanoFTPGetMore(ctx);
+ if (len < 0) {
+ return(-1);
+ }
+ if ((ctxt->controlBufUsed == 0) && (len == 0)) {
+ return(-1);
+ }
+ ptr = &ctxt->controlBuf[ctxt->controlBufIndex];
+ end = &ctxt->controlBuf[ctxt->controlBufUsed];
+
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext,
+ "\n<<<\n%s\n--\n", ptr);
+#endif
+ while (ptr < end) {
+ cur = xmlNanoFTPParseResponse(ptr, end - ptr);
+ if (cur > 0) {
+ /*
+ * Successfully scanned the control code, scratch
+ * till the end of the line, but keep the index to be
+ * able to analyze the result if needed.
+ */
+ res = cur;
+ ptr += 3;
+ ctxt->controlBufAnswer = ptr - ctxt->controlBuf;
+ while ((ptr < end) && (*ptr != '\n')) ptr++;
+ if (*ptr == '\n') ptr++;
+ if (*ptr == '\r') ptr++;
+ break;
+ }
+ while ((ptr < end) && (*ptr != '\n')) ptr++;
+ if (ptr >= end) {
+ ctxt->controlBufIndex = ctxt->controlBufUsed;
+ goto get_more;
+ }
+ if (*ptr != '\r') ptr++;
+ }
+
+ if (res < 0) goto get_more;
+ ctxt->controlBufIndex = ptr - ctxt->controlBuf;
+#ifdef DEBUG_FTP
+ ptr = &ctxt->controlBuf[ctxt->controlBufIndex];
+ xmlGenericError(xmlGenericErrorContext, "\n---\n%s\n--\n", ptr);
+#endif
+
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "Got %d\n", res);
+#endif
+ return(res / 100);
+}
+
+/**
+ * xmlNanoFTPGetResponse:
+ * @ctx: an FTP context
+ *
+ * Get the response from the FTP server after a command.
+ * Returns the code number
+ */
+
+int
+xmlNanoFTPGetResponse(void *ctx) {
+ int res;
+
+ res = xmlNanoFTPReadResponse(ctx);
+
+ return(res);
+}
+
+/**
+ * xmlNanoFTPCheckResponse:
+ * @ctx: an FTP context
+ *
+ * Check if there is a response from the FTP server after a command.
+ * Returns the code number, or 0
+ */
+
+int
+xmlNanoFTPCheckResponse(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ fd_set rfd;
+ struct timeval tv;
+
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+ FD_ZERO(&rfd);
+ FD_SET(ctxt->controlFd, &rfd);
+ switch(select(ctxt->controlFd + 1, &rfd, NULL, NULL, &tv)) {
+ case 0:
+ return(0);
+ case -1:
+ __xmlIOErr(XML_FROM_FTP, 0, "select");
+ return(-1);
+
+ }
+
+ return(xmlNanoFTPReadResponse(ctx));
+}
+
+/**
+ * Send the user authentication
+ */
+
+static int
+xmlNanoFTPSendUser(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char buf[200];
+ int len;
+ int res;
+
+ if (ctxt->user == NULL)
+ snprintf(buf, sizeof(buf), "USER anonymous\r\n");
+ else
+ snprintf(buf, sizeof(buf), "USER %s\r\n", ctxt->user);
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ return(res);
+ }
+ return(0);
+}
+
+/**
+ * Send the password authentication
+ */
+
+static int
+xmlNanoFTPSendPasswd(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char buf[200];
+ int len;
+ int res;
+
+ if (ctxt->passwd == NULL)
+ snprintf(buf, sizeof(buf), "PASS anonymous@\r\n");
+ else
+ snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd);
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ return(res);
+ }
+ return(0);
+}
+
+/**
+ * xmlNanoFTPQuit:
+ * @ctx: an FTP context
+ *
+ * Send a QUIT command to the server
+ *
+ * Returns -1 in case of error, 0 otherwise
+ */
+
+
+int
+xmlNanoFTPQuit(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char buf[200];
+ int len, res;
+
+ snprintf(buf, sizeof(buf), "QUIT\r\n");
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf); /* Just to be consistent, even though we know it can't have a % in it */
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ return(res);
+ }
+ return(0);
+}
+
+/**
+ * xmlNanoFTPConnect:
+ * @ctx: an FTP context
+ *
+ * Tries to open a control connection
+ *
+ * Returns -1 in case of error, 0 otherwise
+ */
+
+int
+xmlNanoFTPConnect(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ struct hostent *hp;
+ int port;
+ int res;
+ int addrlen = sizeof (struct sockaddr_in);
+
+ if (ctxt == NULL)
+ return(-1);
+ if (ctxt->hostname == NULL)
+ return(-1);
+
+ /*
+ * do the blocking DNS query.
+ */
+ if (proxy) {
+ port = proxyPort;
+ } else {
+ port = ctxt->port;
+ }
+ if (port == 0)
+ port = 21;
+
+ memset (&ctxt->ftpAddr, 0, sizeof(ctxt->ftpAddr));
+
+#ifdef SUPPORT_IP6
+ if (have_ipv6 ()) {
+ struct addrinfo hints, *tmp, *result;
+
+ result = NULL;
+ memset (&hints, 0, sizeof(hints));
+ hints.ai_socktype = SOCK_STREAM;
+
+ if (proxy) {
+ if (getaddrinfo (proxy, NULL, &hints, &result) != 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "getaddrinfo failed");
+ return (-1);
+ }
+ }
+ else
+ if (getaddrinfo (ctxt->hostname, NULL, &hints, &result) != 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "getaddrinfo failed");
+ return (-1);
+ }
+
+ for (tmp = result; tmp; tmp = tmp->ai_next)
+ if (tmp->ai_family == AF_INET || tmp->ai_family == AF_INET6)
+ break;
+
+ if (!tmp) {
+ if (result)
+ freeaddrinfo (result);
+ return (-1);
+ }
+ else {
+ if (tmp->ai_family == AF_INET6) {
+ memcpy (&ctxt->ftpAddr, tmp->ai_addr, tmp->ai_addrlen);
+ ((struct sockaddr_in6 *) &ctxt->ftpAddr)->sin6_port = htons (port);
+ ctxt->controlFd = socket (AF_INET6, SOCK_STREAM, 0);
+ }
+ else {
+ memcpy (&ctxt->ftpAddr, tmp->ai_addr, tmp->ai_addrlen);
+ ((struct sockaddr_in *) &ctxt->ftpAddr)->sin_port = htons (port);
+ ctxt->controlFd = socket (AF_INET, SOCK_STREAM, 0);
+ }
+ addrlen = tmp->ai_addrlen;
+ freeaddrinfo (result);
+ }
+ }
+ else
+#endif
+ {
+ if (proxy)
+ hp = gethostbyname (proxy);
+ else
+ hp = gethostbyname (ctxt->hostname);
+ if (hp == NULL) {
+ __xmlIOErr(XML_FROM_FTP, 0, "gethostbyname failed");
+ return (-1);
+ }
+
+ /*
+ * Prepare the socket
+ */
+ ((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);
+ ctxt->controlFd = socket (AF_INET, SOCK_STREAM, 0);
+ addrlen = sizeof (struct sockaddr_in);
+ }
+
+ if (ctxt->controlFd < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "socket failed");
+ return(-1);
+ }
+
+ /*
+ * Do the connect.
+ */
+ if (connect(ctxt->controlFd, (struct sockaddr *) &ctxt->ftpAddr,
+ addrlen) < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "Failed to create a connection");
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+
+ /*
+ * Wait for the HELLO from the server.
+ */
+ res = xmlNanoFTPGetResponse(ctxt);
+ if (res != 2) {
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+
+ /*
+ * State diagram for the login operation on the FTP server
+ *
+ * Reference: RFC 959
+ *
+ * 1
+ * +---+ USER +---+------------->+---+
+ * | B |---------->| W | 2 ---->| E |
+ * +---+ +---+------ | -->+---+
+ * | | | | |
+ * 3 | | 4,5 | | |
+ * -------------- ----- | | |
+ * | | | | |
+ * | | | | |
+ * | --------- |
+ * | 1| | | |
+ * V | | | |
+ * +---+ PASS +---+ 2 | ------>+---+
+ * | |---------->| W |------------->| S |
+ * +---+ +---+ ---------->+---+
+ * | | | | |
+ * 3 | |4,5| | |
+ * -------------- -------- |
+ * | | | | |
+ * | | | | |
+ * | -----------
+ * | 1,3| | | |
+ * V | 2| | |
+ * +---+ ACCT +---+-- | ----->+---+
+ * | |---------->| W | 4,5 -------->| F |
+ * +---+ +---+------------->+---+
+ *
+ * Of course in case of using a proxy this get really nasty and is not
+ * standardized at all :-(
+ */
+ if (proxy) {
+ int len;
+ char buf[400];
+
+ if (proxyUser != NULL) {
+ /*
+ * We need proxy auth
+ */
+ snprintf(buf, sizeof(buf), "USER %s\r\n", proxyUser);
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->controlFd);
+ ctxt->controlFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ switch (res) {
+ case 2:
+ if (proxyPasswd == NULL)
+ break;
+ case 3:
+ if (proxyPasswd != NULL)
+ snprintf(buf, sizeof(buf), "PASS %s\r\n", proxyPasswd);
+ else
+ snprintf(buf, sizeof(buf), "PASS anonymous@\r\n");
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->controlFd);
+ ctxt->controlFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ if (res > 3) {
+ closesocket(ctxt->controlFd);
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+ break;
+ case 1:
+ break;
+ case 4:
+ case 5:
+ case -1:
+ default:
+ closesocket(ctxt->controlFd);
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+ }
+
+ /*
+ * We assume we don't need more authentication to the proxy
+ * and that it succeeded :-\
+ */
+ switch (proxyType) {
+ case 0:
+ /* we will try in sequence */
+ case 1:
+ /* Using SITE command */
+ snprintf(buf, sizeof(buf), "SITE %s\r\n", ctxt->hostname);
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ if (res == 2) {
+ /* we assume it worked :-\ 1 is error for SITE command */
+ proxyType = 1;
+ break;
+ }
+ if (proxyType == 1) {
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+ case 2:
+ /* USER user@host command */
+ if (ctxt->user == NULL)
+ snprintf(buf, sizeof(buf), "USER anonymous@%s\r\n",
+ ctxt->hostname);
+ else
+ snprintf(buf, sizeof(buf), "USER %s@%s\r\n",
+ ctxt->user, ctxt->hostname);
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ if ((res == 1) || (res == 2)) {
+ /* we assume it worked :-\ */
+ proxyType = 2;
+ return(0);
+ }
+ if (ctxt->passwd == NULL)
+ snprintf(buf, sizeof(buf), "PASS anonymous@\r\n");
+ else
+ snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd);
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ if ((res == 1) || (res == 2)) {
+ /* we assume it worked :-\ */
+ proxyType = 2;
+ return(0);
+ }
+ if (proxyType == 2) {
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+ case 3:
+ /*
+ * If you need support for other Proxy authentication scheme
+ * send the code or at least the sequence in use.
+ */
+ default:
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+ }
+ /*
+ * Non-proxy handling.
+ */
+ res = xmlNanoFTPSendUser(ctxt);
+ if (res < 0) {
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ switch (res) {
+ case 2:
+ return(0);
+ case 3:
+ break;
+ case 1:
+ case 4:
+ case 5:
+ case -1:
+ default:
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+ res = xmlNanoFTPSendPasswd(ctxt);
+ if (res < 0) {
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ switch (res) {
+ case 2:
+ break;
+ case 3:
+ __xmlIOErr(XML_FROM_FTP, XML_FTP_ACCNT,
+ "FTP server asking for ACCNT on anonymous\n");
+ case 1:
+ case 4:
+ case 5:
+ case -1:
+ default:
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ ctxt->controlFd = -1;
+ return(-1);
+ }
+
+ return(0);
+}
+
+/**
+ * xmlNanoFTPConnectTo:
+ * @server: an FTP server name
+ * @port: the port (use 21 if 0)
+ *
+ * Tries to open a control connection to the given server/port
+ *
+ * Returns an fTP context or NULL if it failed
+ */
+
+void*
+xmlNanoFTPConnectTo(const char *server, int port) {
+ xmlNanoFTPCtxtPtr ctxt;
+ int res;
+
+ xmlNanoFTPInit();
+ if (server == NULL)
+ return(NULL);
+ ctxt = (xmlNanoFTPCtxtPtr) xmlNanoFTPNewCtxt(NULL);
+ ctxt->hostname = xmlMemStrdup(server);
+ if (port != 0)
+ ctxt->port = port;
+ res = xmlNanoFTPConnect(ctxt);
+ if (res < 0) {
+ xmlNanoFTPFreeCtxt(ctxt);
+ return(NULL);
+ }
+ return(ctxt);
+}
+
+/**
+ * xmlNanoFTPCwd:
+ * @ctx: an FTP context
+ * @directory: a directory on the server
+ *
+ * Tries to change the remote directory
+ *
+ * Returns -1 incase of error, 1 if CWD worked, 0 if it failed
+ */
+
+int
+xmlNanoFTPCwd(void *ctx, char *directory) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char buf[400];
+ int len;
+ int res;
+
+ /*
+ * Expected response code for CWD:
+ *
+ * CWD
+ * 250
+ * 500, 501, 502, 421, 530, 550
+ */
+ snprintf(buf, sizeof(buf), "CWD %s\r\n", directory);
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ return(res);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ if (res == 4) {
+ return(-1);
+ }
+ if (res == 2) return(1);
+ if (res == 5) {
+ return(0);
+ }
+ return(0);
+}
+
+/**
+ * xmlNanoFTPDele:
+ * @ctx: an FTP context
+ * @file: a file or directory on the server
+ *
+ * Tries to delete an item (file or directory) from server
+ *
+ * Returns -1 incase of error, 1 if DELE worked, 0 if it failed
+ */
+
+int
+xmlNanoFTPDele(void *ctx, char *file) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char buf[400];
+ int len;
+ int res;
+
+ /*
+ * Expected response code for DELE:
+ *
+ * DELE
+ * 250
+ * 450, 550
+ * 500, 501, 502, 421, 530
+ */
+
+ snprintf(buf, sizeof(buf), "DELE %s\r\n", file);
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ return(res);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ if (res == 4) {
+ return(-1);
+ }
+ if (res == 2) return(1);
+ if (res == 5) {
+ return(0);
+ }
+ return(0);
+}
+/**
+ * xmlNanoFTPGetConnection:
+ * @ctx: an FTP context
+ *
+ * Try to open a data connection to the server. Currently only
+ * passive mode is supported.
+ *
+ * Returns -1 incase of error, 0 otherwise
+ */
+
+int
+xmlNanoFTPGetConnection(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char buf[200], *cur;
+ int len, i;
+ int res;
+ unsigned char ad[6], *adp, *portp;
+ unsigned int temp[6];
+#ifdef SUPPORT_IP6
+ struct sockaddr_storage dataAddr;
+#else
+ struct sockaddr_in dataAddr;
+#endif
+ SOCKLEN_T dataAddrLen;
+
+ memset (&dataAddr, 0, sizeof(dataAddr));
+#ifdef SUPPORT_IP6
+ if ((ctxt->ftpAddr).ss_family == AF_INET6) {
+ ctxt->dataFd = socket (AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ ((struct sockaddr_in6 *)&dataAddr)->sin6_family = AF_INET6;
+ dataAddrLen = sizeof(struct sockaddr_in6);
+ } else
+#endif
+ {
+ ctxt->dataFd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ ((struct sockaddr_in *)&dataAddr)->sin_family = AF_INET;
+ dataAddrLen = sizeof (struct sockaddr_in);
+ }
+
+ if (ctxt->dataFd < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "socket failed");
+ return (-1);
+ }
+
+ if (ctxt->passive) {
+#ifdef SUPPORT_IP6
+ if ((ctxt->ftpAddr).ss_family == AF_INET6)
+ snprintf (buf, sizeof(buf), "EPSV\r\n");
+ else
+#endif
+ snprintf (buf, sizeof(buf), "PASV\r\n");
+ len = strlen (buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPReadResponse(ctx);
+ if (res != 2) {
+ if (res == 5) {
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(-1);
+ } else {
+ /*
+ * retry with an active connection
+ */
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ ctxt->passive = 0;
+ }
+ }
+ cur = &ctxt->controlBuf[ctxt->controlBufAnswer];
+ while (((*cur < '0') || (*cur > '9')) && *cur != '\0') cur++;
+#ifdef SUPPORT_IP6
+ if ((ctxt->ftpAddr).ss_family == AF_INET6) {
+ if (sscanf (cur, "%u", &temp[0]) != 1) {
+ __xmlIOErr(XML_FROM_FTP, XML_FTP_EPSV_ANSWER,
+ "Invalid answer to EPSV\n");
+ if (ctxt->dataFd != -1) {
+ closesocket (ctxt->dataFd); ctxt->dataFd = -1;
+ }
+ return (-1);
+ }
+ memcpy (&((struct sockaddr_in6 *)&dataAddr)->sin6_addr, &((struct sockaddr_in6 *)&ctxt->ftpAddr)->sin6_addr, sizeof(struct in6_addr));
+ ((struct sockaddr_in6 *)&dataAddr)->sin6_port = htons (temp[0]);
+ }
+ else
+#endif
+ {
+ if (sscanf (cur, "%u,%u,%u,%u,%u,%u", &temp[0], &temp[1], &temp[2],
+ &temp[3], &temp[4], &temp[5]) != 6) {
+ __xmlIOErr(XML_FROM_FTP, XML_FTP_PASV_ANSWER,
+ "Invalid answer to PASV\n");
+ if (ctxt->dataFd != -1) {
+ closesocket (ctxt->dataFd); ctxt->dataFd = -1;
+ }
+ return (-1);
+ }
+ for (i=0; i<6; i++) ad[i] = (unsigned char) (temp[i] & 0xff);
+ memcpy (&((struct sockaddr_in *)&dataAddr)->sin_addr, &ad[0], 4);
+ memcpy (&((struct sockaddr_in *)&dataAddr)->sin_port, &ad[4], 2);
+ }
+
+ if (connect(ctxt->dataFd, (struct sockaddr *) &dataAddr, dataAddrLen) < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "Failed to create a data connection");
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return (-1);
+ }
+ } else {
+ getsockname(ctxt->dataFd, (struct sockaddr *) &dataAddr, &dataAddrLen);
+#ifdef SUPPORT_IP6
+ if ((ctxt->ftpAddr).ss_family == AF_INET6)
+ ((struct sockaddr_in6 *)&dataAddr)->sin6_port = 0;
+ else
+#endif
+ ((struct sockaddr_in *)&dataAddr)->sin_port = 0;
+
+ if (bind(ctxt->dataFd, (struct sockaddr *) &dataAddr, dataAddrLen) < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "bind failed");
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return (-1);
+ }
+ getsockname(ctxt->dataFd, (struct sockaddr *) &dataAddr, &dataAddrLen);
+
+ if (listen(ctxt->dataFd, 1) < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "listen failed");
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return (-1);
+ }
+#ifdef SUPPORT_IP6
+ if ((ctxt->ftpAddr).ss_family == AF_INET6) {
+ char buf6[INET6_ADDRSTRLEN];
+ inet_ntop (AF_INET6, &((struct sockaddr_in6 *)&dataAddr)->sin6_addr,
+ buf6, INET6_ADDRSTRLEN);
+ adp = (unsigned char *) buf6;
+ portp = (unsigned char *) &((struct sockaddr_in6 *)&dataAddr)->sin6_port;
+ snprintf (buf, sizeof(buf), "EPRT |2|%s|%s|\r\n", adp, portp);
+ } else
+#endif
+ {
+ adp = (unsigned char *) &((struct sockaddr_in *)&dataAddr)->sin_addr;
+ portp = (unsigned char *) &((struct sockaddr_in *)&dataAddr)->sin_port;
+ snprintf (buf, sizeof(buf), "PORT %d,%d,%d,%d,%d,%d\r\n",
+ adp[0] & 0xff, adp[1] & 0xff, adp[2] & 0xff, adp[3] & 0xff,
+ portp[0] & 0xff, portp[1] & 0xff);
+ }
+
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPGetResponse(ctxt);
+ if (res != 2) {
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(-1);
+ }
+ }
+ return(ctxt->dataFd);
+
+}
+
+/**
+ * xmlNanoFTPCloseConnection:
+ * @ctx: an FTP context
+ *
+ * Close the data connection from the server
+ *
+ * Returns -1 incase of error, 0 otherwise
+ */
+
+int
+xmlNanoFTPCloseConnection(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ int res;
+ fd_set rfd, efd;
+ struct timeval tv;
+
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ tv.tv_sec = 15;
+ tv.tv_usec = 0;
+ FD_ZERO(&rfd);
+ FD_SET(ctxt->controlFd, &rfd);
+ FD_ZERO(&efd);
+ FD_SET(ctxt->controlFd, &efd);
+ res = select(ctxt->controlFd + 1, &rfd, NULL, &efd, &tv);
+ if (res < 0) {
+#ifdef DEBUG_FTP
+ perror("select");
+#endif
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ return(-1);
+ }
+ if (res == 0) {
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNanoFTPCloseConnection: timeout\n");
+#endif
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ } else {
+ res = xmlNanoFTPGetResponse(ctxt);
+ if (res != 2) {
+ closesocket(ctxt->controlFd); ctxt->controlFd = -1;
+ return(-1);
+ }
+ }
+ return(0);
+}
+
+/**
+ * xmlNanoFTPParseList:
+ * @list: some data listing received from the server
+ * @callback: the user callback
+ * @userData: the user callback data
+ *
+ * Parse at most one entry from the listing.
+ *
+ * Returns -1 incase of error, the length of data parsed otherwise
+ */
+
+static int
+xmlNanoFTPParseList(const char *list, ftpListCallback callback, void *userData) {
+ const char *cur = list;
+ char filename[151];
+ char attrib[11];
+ char owner[11];
+ char group[11];
+ char month[4];
+ int year = 0;
+ int minute = 0;
+ int hour = 0;
+ int day = 0;
+ unsigned long size = 0;
+ int links = 0;
+ int i;
+
+ if (!strncmp(cur, "total", 5)) {
+ cur += 5;
+ while (*cur == ' ') cur++;
+ while ((*cur >= '0') && (*cur <= '9'))
+ links = (links * 10) + (*cur++ - '0');
+ while ((*cur == ' ') || (*cur == '\n') || (*cur == '\r'))
+ cur++;
+ return(cur - list);
+ } else if (*list == '+') {
+ return(0);
+ } else {
+ while ((*cur == ' ') || (*cur == '\n') || (*cur == '\r'))
+ cur++;
+ if (*cur == 0) return(0);
+ i = 0;
+ while (*cur != ' ') {
+ if (i < 10)
+ attrib[i++] = *cur;
+ cur++;
+ if (*cur == 0) return(0);
+ }
+ attrib[10] = 0;
+ while (*cur == ' ') cur++;
+ if (*cur == 0) return(0);
+ while ((*cur >= '0') && (*cur <= '9'))
+ links = (links * 10) + (*cur++ - '0');
+ while (*cur == ' ') cur++;
+ if (*cur == 0) return(0);
+ i = 0;
+ while (*cur != ' ') {
+ if (i < 10)
+ owner[i++] = *cur;
+ cur++;
+ if (*cur == 0) return(0);
+ }
+ owner[i] = 0;
+ while (*cur == ' ') cur++;
+ if (*cur == 0) return(0);
+ i = 0;
+ while (*cur != ' ') {
+ if (i < 10)
+ group[i++] = *cur;
+ cur++;
+ if (*cur == 0) return(0);
+ }
+ group[i] = 0;
+ while (*cur == ' ') cur++;
+ if (*cur == 0) return(0);
+ while ((*cur >= '0') && (*cur <= '9'))
+ size = (size * 10) + (*cur++ - '0');
+ while (*cur == ' ') cur++;
+ if (*cur == 0) return(0);
+ i = 0;
+ while (*cur != ' ') {
+ if (i < 3)
+ month[i++] = *cur;
+ cur++;
+ if (*cur == 0) return(0);
+ }
+ month[i] = 0;
+ while (*cur == ' ') cur++;
+ if (*cur == 0) return(0);
+ while ((*cur >= '0') && (*cur <= '9'))
+ day = (day * 10) + (*cur++ - '0');
+ while (*cur == ' ') cur++;
+ if (*cur == 0) return(0);
+ if ((cur[1] == 0) || (cur[2] == 0)) return(0);
+ if ((cur[1] == ':') || (cur[2] == ':')) {
+ while ((*cur >= '0') && (*cur <= '9'))
+ hour = (hour * 10) + (*cur++ - '0');
+ if (*cur == ':') cur++;
+ while ((*cur >= '0') && (*cur <= '9'))
+ minute = (minute * 10) + (*cur++ - '0');
+ } else {
+ while ((*cur >= '0') && (*cur <= '9'))
+ year = (year * 10) + (*cur++ - '0');
+ }
+ while (*cur == ' ') cur++;
+ if (*cur == 0) return(0);
+ i = 0;
+ while ((*cur != '\n') && (*cur != '\r')) {
+ if (i < 150)
+ filename[i++] = *cur;
+ cur++;
+ if (*cur == 0) return(0);
+ }
+ filename[i] = 0;
+ if ((*cur != '\n') && (*cur != '\r'))
+ return(0);
+ while ((*cur == '\n') || (*cur == '\r'))
+ cur++;
+ }
+ if (callback != NULL) {
+ callback(userData, filename, attrib, owner, group, size, links,
+ year, month, day, hour, minute);
+ }
+ return(cur - list);
+}
+
+/**
+ * xmlNanoFTPList:
+ * @ctx: an FTP context
+ * @callback: the user callback
+ * @userData: the user callback data
+ * @filename: optional files to list
+ *
+ * Do a listing on the server. All files info are passed back
+ * in the callbacks.
+ *
+ * Returns -1 incase of error, 0 otherwise
+ */
+
+int
+xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData,
+ char *filename) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char buf[4096 + 1];
+ int len, res;
+ int indx = 0, base;
+ fd_set rfd, efd;
+ struct timeval tv;
+
+ if (filename == NULL) {
+ if (xmlNanoFTPCwd(ctxt, ctxt->path) < 1)
+ return(-1);
+ ctxt->dataFd = xmlNanoFTPGetConnection(ctxt);
+ if (ctxt->dataFd == -1)
+ return(-1);
+ snprintf(buf, sizeof(buf), "LIST -L\r\n");
+ } else {
+ if (filename[0] != '/') {
+ if (xmlNanoFTPCwd(ctxt, ctxt->path) < 1)
+ return(-1);
+ }
+ ctxt->dataFd = xmlNanoFTPGetConnection(ctxt);
+ if (ctxt->dataFd == -1)
+ return(-1);
+ snprintf(buf, sizeof(buf), "LIST -L %s\r\n", filename);
+ }
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPReadResponse(ctxt);
+ if (res != 1) {
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(-res);
+ }
+
+ do {
+ tv.tv_sec = 1;
+ tv.tv_usec = 0;
+ FD_ZERO(&rfd);
+ FD_SET(ctxt->dataFd, &rfd);
+ FD_ZERO(&efd);
+ FD_SET(ctxt->dataFd, &efd);
+ res = select(ctxt->dataFd + 1, &rfd, NULL, &efd, &tv);
+ if (res < 0) {
+#ifdef DEBUG_FTP
+ perror("select");
+#endif
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(-1);
+ }
+ if (res == 0) {
+ res = xmlNanoFTPCheckResponse(ctxt);
+ if (res < 0) {
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ ctxt->dataFd = -1;
+ return(-1);
+ }
+ if (res == 2) {
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(0);
+ }
+
+ continue;
+ }
+
+ if ((len = recv(ctxt->dataFd, &buf[indx], sizeof(buf) - (indx + 1), 0)) < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "recv");
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ ctxt->dataFd = -1;
+ return(-1);
+ }
+#ifdef DEBUG_FTP
+ write(1, &buf[indx], len);
+#endif
+ indx += len;
+ buf[indx] = 0;
+ base = 0;
+ do {
+ res = xmlNanoFTPParseList(&buf[base], callback, userData);
+ base += res;
+ } while (res > 0);
+
+ memmove(&buf[0], &buf[base], indx - base);
+ indx -= base;
+ } while (len != 0);
+ xmlNanoFTPCloseConnection(ctxt);
+ return(0);
+}
+
+/**
+ * xmlNanoFTPGetSocket:
+ * @ctx: an FTP context
+ * @filename: the file to retrieve (or NULL if path is in context).
+ *
+ * Initiate fetch of the given file from the server.
+ *
+ * Returns the socket for the data connection, or <0 in case of error
+ */
+
+
+int
+xmlNanoFTPGetSocket(void *ctx, const char *filename) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char buf[300];
+ int res, len;
+ if ((filename == NULL) && (ctxt->path == NULL))
+ return(-1);
+ ctxt->dataFd = xmlNanoFTPGetConnection(ctxt);
+ if (ctxt->dataFd == -1)
+ return(-1);
+
+ snprintf(buf, sizeof(buf), "TYPE I\r\n");
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPReadResponse(ctxt);
+ if (res != 2) {
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(-res);
+ }
+ if (filename == NULL)
+ snprintf(buf, sizeof(buf), "RETR %s\r\n", ctxt->path);
+ else
+ snprintf(buf, sizeof(buf), "RETR %s\r\n", filename);
+ buf[sizeof(buf) - 1] = 0;
+ len = strlen(buf);
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "%s", buf);
+#endif
+ res = send(ctxt->controlFd, buf, len, 0);
+ if (res < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "send failed");
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(res);
+ }
+ res = xmlNanoFTPReadResponse(ctxt);
+ if (res != 1) {
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(-res);
+ }
+ return(ctxt->dataFd);
+}
+
+/**
+ * xmlNanoFTPGet:
+ * @ctx: an FTP context
+ * @callback: the user callback
+ * @userData: the user callback data
+ * @filename: the file to retrieve
+ *
+ * Fetch the given file from the server. All data are passed back
+ * in the callbacks. The last callback has a size of 0 block.
+ *
+ * Returns -1 incase of error, 0 otherwise
+ */
+
+int
+xmlNanoFTPGet(void *ctx, ftpDataCallback callback, void *userData,
+ const char *filename) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+ char buf[4096];
+ int len = 0, res;
+ fd_set rfd;
+ struct timeval tv;
+
+ if ((filename == NULL) && (ctxt->path == NULL))
+ return(-1);
+ if (callback == NULL)
+ return(-1);
+ if (xmlNanoFTPGetSocket(ctxt, filename) < 0)
+ return(-1);
+
+ do {
+ tv.tv_sec = 1;
+ tv.tv_usec = 0;
+ FD_ZERO(&rfd);
+ FD_SET(ctxt->dataFd, &rfd);
+ res = select(ctxt->dataFd + 1, &rfd, NULL, NULL, &tv);
+ if (res < 0) {
+#ifdef DEBUG_FTP
+ perror("select");
+#endif
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(-1);
+ }
+ if (res == 0) {
+ res = xmlNanoFTPCheckResponse(ctxt);
+ if (res < 0) {
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ ctxt->dataFd = -1;
+ return(-1);
+ }
+ if (res == 2) {
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(0);
+ }
+
+ continue;
+ }
+ if ((len = recv(ctxt->dataFd, buf, sizeof(buf), 0)) < 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "recv failed");
+ callback(userData, buf, len);
+ closesocket(ctxt->dataFd); ctxt->dataFd = -1;
+ return(-1);
+ }
+ callback(userData, buf, len);
+ } while (len != 0);
+
+ return(xmlNanoFTPCloseConnection(ctxt));
+}
+
+/**
+ * xmlNanoFTPRead:
+ * @ctx: the FTP context
+ * @dest: a buffer
+ * @len: the buffer length
+ *
+ * This function tries to read @len bytes from the existing FTP connection
+ * and saves them in @dest. This is a blocking call.
+ *
+ * Returns the number of byte read. 0 is an indication of an end of connection.
+ * -1 indicates a parameter error.
+ */
+int
+xmlNanoFTPRead(void *ctx, void *dest, int len) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+
+ if (ctx == NULL) return(-1);
+ if (ctxt->dataFd < 0) return(0);
+ if (dest == NULL) return(-1);
+ if (len <= 0) return(0);
+
+ len = recv(ctxt->dataFd, dest, len, 0);
+ if (len <= 0) {
+ __xmlIOErr(XML_FROM_FTP, 0, "recv failed");
+ xmlNanoFTPCloseConnection(ctxt);
+ }
+#ifdef DEBUG_FTP
+ xmlGenericError(xmlGenericErrorContext, "Recvd %d bytes\n", len);
+#endif
+ return(len);
+}
+
+/**
+ * xmlNanoFTPOpen:
+ * @URL: the URL to the resource
+ *
+ * Start to fetch the given ftp:// resource
+ *
+ * Returns an FTP context, or NULL
+ */
+
+void*
+xmlNanoFTPOpen(const char *URL) {
+ xmlNanoFTPCtxtPtr ctxt;
+ int sock;
+
+ xmlNanoFTPInit();
+ if (URL == NULL) return(NULL);
+ if (strncmp("ftp://", URL, 6)) return(NULL);
+
+ ctxt = (xmlNanoFTPCtxtPtr) xmlNanoFTPNewCtxt(URL);
+ if (ctxt == NULL) return(NULL);
+ if (xmlNanoFTPConnect(ctxt) < 0) {
+ xmlNanoFTPFreeCtxt(ctxt);
+ return(NULL);
+ }
+ sock = xmlNanoFTPGetSocket(ctxt, ctxt->path);
+ if (sock < 0) {
+ xmlNanoFTPFreeCtxt(ctxt);
+ return(NULL);
+ }
+ return(ctxt);
+}
+
+/**
+ * xmlNanoFTPClose:
+ * @ctx: an FTP context
+ *
+ * Close the connection and both control and transport
+ *
+ * Returns -1 incase of error, 0 otherwise
+ */
+
+int
+xmlNanoFTPClose(void *ctx) {
+ xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
+
+ if (ctxt == NULL)
+ return(-1);
+
+ if (ctxt->dataFd >= 0) {
+ closesocket(ctxt->dataFd);
+ ctxt->dataFd = -1;
+ }
+ if (ctxt->controlFd >= 0) {
+ xmlNanoFTPQuit(ctxt);
+ closesocket(ctxt->controlFd);
+ ctxt->controlFd = -1;
+ }
+ xmlNanoFTPFreeCtxt(ctxt);
+ return(0);
+}
+
+#ifdef STANDALONE
+/************************************************************************
+ * *
+ * Basic test in Standalone mode *
+ * *
+ ************************************************************************/
+static
+void ftpList(void *userData, const char *filename, const char* attrib,
+ const char *owner, const char *group, unsigned long size, int links,
+ int year, const char *month, int day, int hour, int minute) {
+ xmlGenericError(xmlGenericErrorContext,
+ "%s %s %s %ld %s\n", attrib, owner, group, size, filename);
+}
+static
+void ftpData(void *userData, const char *data, int len) {
+ if (userData == NULL) return;
+ if (len <= 0) {
+ fclose((FILE*)userData);
+ return;
+ }
+ fwrite(data, len, 1, (FILE*)userData);
+}
+
+int main(int argc, char **argv) {
+ void *ctxt;
+ FILE *output;
+ char *tstfile = NULL;
+
+ xmlNanoFTPInit();
+ if (argc > 1) {
+ ctxt = xmlNanoFTPNewCtxt(argv[1]);
+ if (xmlNanoFTPConnect(ctxt) < 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Couldn't connect to %s\n", argv[1]);
+ exit(1);
+ }
+ if (argc > 2)
+ tstfile = argv[2];
+ } else
+ ctxt = xmlNanoFTPConnectTo("localhost", 0);
+ if (ctxt == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Couldn't connect to localhost\n");
+ exit(1);
+ }
+ xmlNanoFTPList(ctxt, ftpList, NULL, tstfile);
+ output = fopen("/tmp/tstdata", "w");
+ if (output != NULL) {
+ if (xmlNanoFTPGet(ctxt, ftpData, (void *) output, tstfile) < 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to get file\n");
+
+ }
+ xmlNanoFTPClose(ctxt);
+ xmlMemoryDump();
+ exit(0);
+}
+#endif /* STANDALONE */
+#else /* !LIBXML_FTP_ENABLED */
+#ifdef STANDALONE
+#include <stdio.h>
+int main(int argc, char **argv) {
+ xmlGenericError(xmlGenericErrorContext,
+ "%s : FTP support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* STANDALONE */
+#endif /* LIBXML_FTP_ENABLED */
diff --git a/nanohttp.c b/nanohttp.c
new file mode 100644
index 0000000..7cd036f
--- /dev/null
+++ b/nanohttp.c
@@ -0,0 +1,1781 @@
+/*
+ * nanohttp.c: minimalist HTTP GET implementation to fetch external subsets.
+ * focuses on size, streamability, reentrancy and portability
+ *
+ * This is clearly not a general purpose HTTP implementation
+ * If you look for one, check:
+ * http://www.w3.org/Library/
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+/* TODO add compression support, Send the Accept- , and decompress on the
+ fly with ZLIB if found at compile-time */
+
+#define NEED_SOCKETS
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_HTTP_ENABLED
+#include <string.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_RESOLV_H
+#ifdef HAVE_ARPA_NAMESER_H
+#include <arpa/nameser.h>
+#endif
+#include <resolv.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#ifdef SUPPORT_IP6
+#include <resolv.h>
+#endif
+
+#ifdef VMS
+#include <stropts>
+#define SOCKLEN_T unsigned int
+#define SOCKET int
+#endif
+
+
+#ifdef __MINGW32__
+#define _WINSOCKAPI_
+#include <wsockcompat.h>
+#include <winsock2.h>
+#undef SOCKLEN_T
+#define SOCKLEN_T unsigned int
+#endif
+
+
+#include <libxml/globals.h>
+#include <libxml/xmlerror.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h> /* for xmlStr(n)casecmp() */
+#include <libxml/nanohttp.h>
+#include <libxml/globals.h>
+#include <libxml/uri.h>
+
+/**
+ * A couple portability macros
+ */
+#ifndef _WINSOCKAPI_
+#ifndef __BEOS__
+#define closesocket(s) close(s)
+#endif
+#define SOCKET int
+#endif
+
+#ifdef __BEOS__
+#ifndef PF_INET
+#define PF_INET AF_INET
+#endif
+#endif
+
+#ifndef SOCKLEN_T
+#define SOCKLEN_T unsigned int
+#endif
+#ifndef SOCKET
+#define SOCKET int
+#endif
+
+#ifdef STANDALONE
+#define DEBUG_HTTP
+#define xmlStrncasecmp(a, b, n) strncasecmp((char *)a, (char *)b, n)
+#define xmlStrcasecmpi(a, b) strcasecmp((char *)a, (char *)b)
+#endif
+
+#define XML_NANO_HTTP_MAX_REDIR 10
+
+#define XML_NANO_HTTP_CHUNK 4096
+
+#define XML_NANO_HTTP_CLOSED 0
+#define XML_NANO_HTTP_WRITE 1
+#define XML_NANO_HTTP_READ 2
+#define XML_NANO_HTTP_NONE 4
+
+typedef struct xmlNanoHTTPCtxt {
+ char *protocol; /* the protocol name */
+ char *hostname; /* the host name */
+ int port; /* the port */
+ char *path; /* the path within the URL */
+ SOCKET fd; /* the file descriptor for the socket */
+ int state; /* WRITE / READ / CLOSED */
+ char *out; /* buffer sent (zero terminated) */
+ char *outptr; /* index within the buffer sent */
+ char *in; /* the receiving buffer */
+ char *content; /* the start of the content */
+ char *inptr; /* the next byte to read from network */
+ char *inrptr; /* the next byte to give back to the client */
+ int inlen; /* len of the input buffer */
+ int last; /* return code for last operation */
+ int returnValue; /* the protocol return value */
+ int ContentLength; /* specified content length from HTTP header */
+ char *contentType; /* the MIME type for the input */
+ char *location; /* the new URL in case of redirect */
+ char *authHeader; /* contents of {WWW,Proxy}-Authenticate header */
+ char *encoding; /* encoding extracted from the contentType */
+ char *mimeType; /* Mime-Type extracted from the contentType */
+} xmlNanoHTTPCtxt, *xmlNanoHTTPCtxtPtr;
+
+static int initialized = 0;
+static char *proxy = NULL; /* the proxy name if any */
+static int proxyPort; /* the proxy port if any */
+static unsigned int timeout = 60;/* the select() timeout in seconds */
+
+int xmlNanoHTTPFetchContent( void * ctx, char ** ptr, int * len );
+int xmlNanoHTTPContentLength( void * ctx );
+
+/**
+ * xmlHTTPErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlHTTPErrMemory(const char *extra)
+{
+ __xmlSimpleError(XML_FROM_HTTP, XML_ERR_NO_MEMORY, NULL, NULL, extra);
+}
+
+/**
+ * A portability function
+ */
+static int socket_errno(void) {
+#ifdef _WINSOCKAPI_
+ return(WSAGetLastError());
+#else
+ return(errno);
+#endif
+}
+
+#ifdef SUPPORT_IP6
+static
+int have_ipv6(void) {
+ int s;
+
+ s = socket (AF_INET6, SOCK_STREAM, 0);
+ if (s != -1) {
+ close (s);
+ return (1);
+ }
+ return (0);
+}
+#endif
+
+/**
+ * xmlNanoHTTPInit:
+ *
+ * Initialize the HTTP protocol layer.
+ * Currently it just checks for proxy informations
+ */
+
+void
+xmlNanoHTTPInit(void) {
+ const char *env;
+#ifdef _WINSOCKAPI_
+ WSADATA wsaData;
+#endif
+
+ if (initialized)
+ return;
+
+#ifdef _WINSOCKAPI_
+ if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
+ return;
+#endif
+
+ if (proxy == NULL) {
+ proxyPort = 80;
+ env = getenv("no_proxy");
+ if (env != NULL)
+ goto done;
+ env = getenv("http_proxy");
+ if (env != NULL) {
+ xmlNanoHTTPScanProxy(env);
+ goto done;
+ }
+ env = getenv("HTTP_PROXY");
+ if (env != NULL) {
+ xmlNanoHTTPScanProxy(env);
+ goto done;
+ }
+ }
+done:
+ initialized = 1;
+}
+
+/**
+ * xmlNanoHTTPCleanup:
+ *
+ * Cleanup the HTTP protocol layer.
+ */
+
+void
+xmlNanoHTTPCleanup(void) {
+ if (proxy != NULL)
+ xmlFree(proxy);
+#ifdef _WINSOCKAPI_
+ if (initialized)
+ WSACleanup();
+#endif
+ initialized = 0;
+ return;
+}
+
+/**
+ * xmlNanoHTTPScanURL:
+ * @ctxt: an HTTP context
+ * @URL: The URL used to initialize the context
+ *
+ * (Re)Initialize an HTTP context by parsing the URL and finding
+ * the protocol host port and path it indicates.
+ */
+
+static void
+xmlNanoHTTPScanURL(xmlNanoHTTPCtxtPtr ctxt, const char *URL) {
+ const char *cur = URL;
+ char buf[4096];
+ int indx = 0;
+ const int indxMax = 4096 - 1;
+ int port = 0;
+
+ if (ctxt->protocol != NULL) {
+ xmlFree(ctxt->protocol);
+ ctxt->protocol = NULL;
+ }
+ if (ctxt->hostname != NULL) {
+ xmlFree(ctxt->hostname);
+ ctxt->hostname = NULL;
+ }
+ if (ctxt->path != NULL) {
+ xmlFree(ctxt->path);
+ ctxt->path = NULL;
+ }
+ if (URL == NULL) return;
+ buf[indx] = 0;
+ while ((*cur != 0) && (indx < indxMax)) {
+ if ((cur[0] == ':') && (cur[1] == '/') && (cur[2] == '/')) {
+ buf[indx] = 0;
+ ctxt->protocol = xmlMemStrdup(buf);
+ indx = 0;
+ cur += 3;
+ break;
+ }
+ buf[indx++] = *cur++;
+ }
+ if (*cur == 0) return;
+
+ buf[indx] = 0;
+ while (indx < indxMax) {
+ if ((strchr (cur, '[') && !strchr (cur, ']')) ||
+ (!strchr (cur, '[') && strchr (cur, ']'))) {
+ __xmlIOErr(XML_FROM_HTTP, XML_HTTP_URL_SYNTAX,
+ "Syntax Error\n");
+ return;
+ }
+
+ if (cur[0] == '[') {
+ cur++;
+ while ((cur[0] != ']') && (indx < indxMax))
+ buf[indx++] = *cur++;
+
+ if (!strchr (buf, ':')) {
+ __xmlIOErr(XML_FROM_HTTP, XML_HTTP_USE_IP,
+ "Use [IPv6]/IPv4 format\n");
+ return;
+ }
+
+ buf[indx] = 0;
+ ctxt->hostname = xmlMemStrdup (buf);
+ indx = 0;
+ cur += 1;
+ if (cur[0] == ':') {
+ cur++;
+ while (*cur >= '0' && *cur <= '9') {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+
+ if (port != 0) ctxt->port = port;
+ while ((cur[0] != '/') && (*cur != 0))
+ cur++;
+ }
+ break;
+ }
+ else {
+ if (cur[0] == ':') {
+ buf[indx] = 0;
+ ctxt->hostname = xmlMemStrdup (buf);
+ indx = 0;
+ cur += 1;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+ if (port != 0) ctxt->port = port;
+ while ((cur[0] != '/') && (*cur != 0))
+ cur++;
+ break;
+ }
+ if ((*cur == '/') || (*cur == 0)) {
+ buf[indx] = 0;
+ ctxt->hostname = xmlMemStrdup (buf);
+ indx = 0;
+ break;
+ }
+ }
+ buf[indx++] = *cur++;
+ }
+ if (*cur == 0)
+ ctxt->path = xmlMemStrdup("/");
+ else {
+ indx = 0;
+ buf[indx] = 0;
+ while ((*cur != 0) && (indx < indxMax))
+ buf[indx++] = *cur++;
+ buf[indx] = 0;
+ ctxt->path = xmlMemStrdup(buf);
+ }
+}
+
+/**
+ * xmlNanoHTTPScanProxy:
+ * @URL: The proxy URL used to initialize the proxy context
+ *
+ * (Re)Initialize the HTTP Proxy context by parsing the URL and finding
+ * the protocol host port it indicates.
+ * Should be like http://myproxy/ or http://myproxy:3128/
+ * A NULL URL cleans up proxy informations.
+ */
+
+void
+xmlNanoHTTPScanProxy(const char *URL) {
+ const char *cur = URL;
+ char buf[4096];
+ int indx = 0;
+ const int indxMax = 4096 - 1;
+ int port = 0;
+
+ if (proxy != NULL) {
+ xmlFree(proxy);
+ proxy = NULL;
+ }
+ if (proxyPort != 0) {
+ proxyPort = 0;
+ }
+#ifdef DEBUG_HTTP
+ if (URL == NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "Removing HTTP proxy info\n");
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "Using HTTP proxy %s\n", URL);
+#endif
+ if (URL == NULL) return;
+ buf[indx] = 0;
+ while ((*cur != 0) && (indx < indxMax)) {
+ if ((cur[0] == ':') && (cur[1] == '/') && (cur[2] == '/')) {
+ buf[indx] = 0;
+ indx = 0;
+ cur += 3;
+ break;
+ }
+ buf[indx++] = *cur++;
+ }
+ if (*cur == 0) return;
+
+ buf[indx] = 0;
+ while (indx < indxMax) {
+ if ((strchr (cur, '[') && !strchr (cur, ']')) ||
+ (!strchr (cur, '[') && strchr (cur, ']'))) {
+ __xmlIOErr(XML_FROM_HTTP, XML_HTTP_URL_SYNTAX, "Syntax Error\n");
+ return;
+ }
+
+ if (cur[0] == '[') {
+ cur++;
+ while ((cur[0] != ']') && (indx < indxMax))
+ buf[indx++] = *cur++;
+
+ if (!strchr (buf, ':')) {
+ __xmlIOErr(XML_FROM_HTTP, XML_HTTP_USE_IP,
+ "Use [IPv6]/IPv4 format\n");
+ return;
+ }
+
+ buf[indx] = 0;
+ proxy = xmlMemStrdup (buf);
+ indx = 0;
+ cur += 1;
+ if (cur[0] == ':') {
+ cur++;
+ while (*cur >= '0' && *cur <= '9') {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+
+ if (port != 0) proxyPort = port;
+ while ((cur[0] != '/') && (*cur != 0))
+ cur ++;
+ }
+ break;
+ }
+ else {
+ if (cur[0] == ':') {
+ buf[indx] = 0;
+ proxy = xmlMemStrdup (buf);
+ indx = 0;
+ cur += 1;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ port *= 10;
+ port += *cur - '0';
+ cur++;
+ }
+ if (port != 0) proxyPort = port;
+ while ((cur[0] != '/') && (*cur != 0))
+ cur++;
+ break;
+ }
+ if ((*cur == '/') || (*cur == 0)) {
+ buf[indx] = 0;
+ proxy = xmlMemStrdup (buf);
+ indx = 0;
+ break;
+ }
+ }
+ buf[indx++] = *cur++;
+ }
+}
+
+/**
+ * xmlNanoHTTPNewCtxt:
+ * @URL: The URL used to initialize the context
+ *
+ * Allocate and initialize a new HTTP context.
+ *
+ * Returns an HTTP context or NULL in case of error.
+ */
+
+static xmlNanoHTTPCtxtPtr
+xmlNanoHTTPNewCtxt(const char *URL) {
+ xmlNanoHTTPCtxtPtr ret;
+
+ ret = (xmlNanoHTTPCtxtPtr) xmlMalloc(sizeof(xmlNanoHTTPCtxt));
+ if (ret == NULL) {
+ xmlHTTPErrMemory("allocating context");
+ return(NULL);
+ }
+
+ memset(ret, 0, sizeof(xmlNanoHTTPCtxt));
+ ret->port = 80;
+ ret->returnValue = 0;
+ ret->fd = -1;
+ ret->ContentLength = -1;
+
+ xmlNanoHTTPScanURL(ret, URL);
+
+ return(ret);
+}
+
+/**
+ * xmlNanoHTTPFreeCtxt:
+ * @ctxt: an HTTP context
+ *
+ * Frees the context after closing the connection.
+ */
+
+static void
+xmlNanoHTTPFreeCtxt(xmlNanoHTTPCtxtPtr ctxt) {
+ if (ctxt == NULL) return;
+ if (ctxt->hostname != NULL) xmlFree(ctxt->hostname);
+ if (ctxt->protocol != NULL) xmlFree(ctxt->protocol);
+ if (ctxt->path != NULL) xmlFree(ctxt->path);
+ if (ctxt->out != NULL) xmlFree(ctxt->out);
+ if (ctxt->in != NULL) xmlFree(ctxt->in);
+ if (ctxt->contentType != NULL) xmlFree(ctxt->contentType);
+ if (ctxt->encoding != NULL) xmlFree(ctxt->encoding);
+ if (ctxt->mimeType != NULL) xmlFree(ctxt->mimeType);
+ if (ctxt->location != NULL) xmlFree(ctxt->location);
+ if (ctxt->authHeader != NULL) xmlFree(ctxt->authHeader);
+ ctxt->state = XML_NANO_HTTP_NONE;
+ if (ctxt->fd >= 0) closesocket(ctxt->fd);
+ ctxt->fd = -1;
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlNanoHTTPSend:
+ * @ctxt: an HTTP context
+ *
+ * Send the input needed to initiate the processing on the server side
+ * Returns number of bytes sent or -1 on error.
+ */
+
+static int
+xmlNanoHTTPSend(xmlNanoHTTPCtxtPtr ctxt, const char * xmt_ptr, int outlen) {
+
+ int total_sent = 0;
+
+ if ( (ctxt->state & XML_NANO_HTTP_WRITE) && (xmt_ptr != NULL ) ) {
+ while (total_sent < outlen) {
+ int nsent = send(ctxt->fd, xmt_ptr + total_sent,
+ outlen - total_sent, 0);
+ if (nsent>0)
+ total_sent += nsent;
+ else if ( ( nsent == -1 ) &&
+#if defined(EAGAIN) && EAGAIN != EWOULDBLOCK
+ ( socket_errno( ) != EAGAIN ) &&
+#endif
+ ( socket_errno( ) != EWOULDBLOCK ) ) {
+ __xmlIOErr(XML_FROM_HTTP, 0, "send failed\n");
+ if ( total_sent == 0 )
+ total_sent = -1;
+ break;
+ }
+ else {
+ /*
+ ** No data sent
+ ** Since non-blocking sockets are used, wait for
+ ** socket to be writable or default timeout prior
+ ** to retrying.
+ */
+
+ struct timeval tv;
+ fd_set wfd;
+
+ tv.tv_sec = timeout;
+ tv.tv_usec = 0;
+ FD_ZERO( &wfd );
+ FD_SET( ctxt->fd, &wfd );
+ (void)select( ctxt->fd + 1, NULL, &wfd, NULL, &tv );
+ }
+ }
+ }
+
+ return total_sent;
+}
+
+/**
+ * xmlNanoHTTPRecv:
+ * @ctxt: an HTTP context
+ *
+ * Read information coming from the HTTP connection.
+ * This is a blocking call (but it blocks in select(), not read()).
+ *
+ * Returns the number of byte read or -1 in case of error.
+ */
+
+static int
+xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt) {
+ fd_set rfd;
+ struct timeval tv;
+
+
+ while (ctxt->state & XML_NANO_HTTP_READ) {
+ if (ctxt->in == NULL) {
+ ctxt->in = (char *) xmlMallocAtomic(65000 * sizeof(char));
+ if (ctxt->in == NULL) {
+ xmlHTTPErrMemory("allocating input");
+ ctxt->last = -1;
+ return(-1);
+ }
+ ctxt->inlen = 65000;
+ ctxt->inptr = ctxt->content = ctxt->inrptr = ctxt->in;
+ }
+ if (ctxt->inrptr > ctxt->in + XML_NANO_HTTP_CHUNK) {
+ int delta = ctxt->inrptr - ctxt->in;
+ int len = ctxt->inptr - ctxt->inrptr;
+
+ memmove(ctxt->in, ctxt->inrptr, len);
+ ctxt->inrptr -= delta;
+ ctxt->content -= delta;
+ ctxt->inptr -= delta;
+ }
+ if ((ctxt->in + ctxt->inlen) < (ctxt->inptr + XML_NANO_HTTP_CHUNK)) {
+ int d_inptr = ctxt->inptr - ctxt->in;
+ int d_content = ctxt->content - ctxt->in;
+ int d_inrptr = ctxt->inrptr - ctxt->in;
+ char * tmp_ptr = ctxt->in;
+
+ ctxt->inlen *= 2;
+ ctxt->in = (char *) xmlRealloc(tmp_ptr, ctxt->inlen);
+ if (ctxt->in == NULL) {
+ xmlHTTPErrMemory("allocating input buffer");
+ xmlFree( tmp_ptr );
+ ctxt->last = -1;
+ return(-1);
+ }
+ ctxt->inptr = ctxt->in + d_inptr;
+ ctxt->content = ctxt->in + d_content;
+ ctxt->inrptr = ctxt->in + d_inrptr;
+ }
+ ctxt->last = recv(ctxt->fd, ctxt->inptr, XML_NANO_HTTP_CHUNK, 0);
+ if (ctxt->last > 0) {
+ ctxt->inptr += ctxt->last;
+ return(ctxt->last);
+ }
+ if (ctxt->last == 0) {
+ return(0);
+ }
+ if (ctxt->last == -1) {
+ switch (socket_errno()) {
+ case EINPROGRESS:
+ case EWOULDBLOCK:
+#if defined(EAGAIN) && EAGAIN != EWOULDBLOCK
+ case EAGAIN:
+#endif
+ break;
+
+ case ECONNRESET:
+ case ESHUTDOWN:
+ return ( 0 );
+
+ default:
+ __xmlIOErr(XML_FROM_HTTP, 0, "recv failed\n");
+ return(-1);
+ }
+ }
+
+ tv.tv_sec = timeout;
+ tv.tv_usec = 0;
+ FD_ZERO(&rfd);
+ FD_SET(ctxt->fd, &rfd);
+
+ if ( (select(ctxt->fd+1, &rfd, NULL, NULL, &tv)<1)
+#if defined(EINTR)
+ && (errno != EINTR)
+#endif
+ )
+ return(0);
+ }
+ return(0);
+}
+
+/**
+ * xmlNanoHTTPReadLine:
+ * @ctxt: an HTTP context
+ *
+ * Read one line in the HTTP server output, usually for extracting
+ * the HTTP protocol informations from the answer header.
+ *
+ * Returns a newly allocated string with a copy of the line, or NULL
+ * which indicate the end of the input.
+ */
+
+static char *
+xmlNanoHTTPReadLine(xmlNanoHTTPCtxtPtr ctxt) {
+ char buf[4096];
+ char *bp = buf;
+ int rc;
+
+ while (bp - buf < 4095) {
+ if (ctxt->inrptr == ctxt->inptr) {
+ if ( (rc = xmlNanoHTTPRecv(ctxt)) == 0) {
+ if (bp == buf)
+ return(NULL);
+ else
+ *bp = 0;
+ return(xmlMemStrdup(buf));
+ }
+ else if ( rc == -1 ) {
+ return ( NULL );
+ }
+ }
+ *bp = *ctxt->inrptr++;
+ if (*bp == '\n') {
+ *bp = 0;
+ return(xmlMemStrdup(buf));
+ }
+ if (*bp != '\r')
+ bp++;
+ }
+ buf[4095] = 0;
+ return(xmlMemStrdup(buf));
+}
+
+
+/**
+ * xmlNanoHTTPScanAnswer:
+ * @ctxt: an HTTP context
+ * @line: an HTTP header line
+ *
+ * Try to extract useful informations from the server answer.
+ * We currently parse and process:
+ * - The HTTP revision/ return code
+ * - The Content-Type, Mime-Type and charset used
+ * - The Location for redirect processing.
+ *
+ * Returns -1 in case of failure, the file descriptor number otherwise
+ */
+
+static void
+xmlNanoHTTPScanAnswer(xmlNanoHTTPCtxtPtr ctxt, const char *line) {
+ const char *cur = line;
+
+ if (line == NULL) return;
+
+ if (!strncmp(line, "HTTP/", 5)) {
+ int version = 0;
+ int ret = 0;
+
+ cur += 5;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ version *= 10;
+ version += *cur - '0';
+ cur++;
+ }
+ if (*cur == '.') {
+ cur++;
+ if ((*cur >= '0') && (*cur <= '9')) {
+ version *= 10;
+ version += *cur - '0';
+ cur++;
+ }
+ while ((*cur >= '0') && (*cur <= '9'))
+ cur++;
+ } else
+ version *= 10;
+ if ((*cur != ' ') && (*cur != '\t')) return;
+ while ((*cur == ' ') || (*cur == '\t')) cur++;
+ if ((*cur < '0') || (*cur > '9')) return;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ ret *= 10;
+ ret += *cur - '0';
+ cur++;
+ }
+ if ((*cur != 0) && (*cur != ' ') && (*cur != '\t')) return;
+ ctxt->returnValue = ret;
+ } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"Content-Type:", 13)) {
+ const xmlChar *charset, *last, *mime;
+ cur += 13;
+ while ((*cur == ' ') || (*cur == '\t')) cur++;
+ if (ctxt->contentType != NULL)
+ xmlFree(ctxt->contentType);
+ ctxt->contentType = xmlMemStrdup(cur);
+ mime = (const xmlChar *) cur;
+ last = mime;
+ while ((*last != 0) && (*last != ' ') && (*last != '\t') &&
+ (*last != ';') && (*last != ','))
+ last++;
+ if (ctxt->mimeType != NULL)
+ xmlFree(ctxt->mimeType);
+ ctxt->mimeType = (char *) xmlStrndup(mime, last - mime);
+ charset = xmlStrstr(BAD_CAST ctxt->contentType, BAD_CAST "charset=");
+ if (charset != NULL) {
+ charset += 8;
+ last = charset;
+ while ((*last != 0) && (*last != ' ') && (*last != '\t') &&
+ (*last != ';') && (*last != ','))
+ last++;
+ if (ctxt->encoding != NULL)
+ xmlFree(ctxt->encoding);
+ ctxt->encoding = (char *) xmlStrndup(charset, last - charset);
+ }
+ } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"ContentType:", 12)) {
+ const xmlChar *charset, *last, *mime;
+ cur += 12;
+ if (ctxt->contentType != NULL) return;
+ while ((*cur == ' ') || (*cur == '\t')) cur++;
+ ctxt->contentType = xmlMemStrdup(cur);
+ mime = (const xmlChar *) cur;
+ last = mime;
+ while ((*last != 0) && (*last != ' ') && (*last != '\t') &&
+ (*last != ';') && (*last != ','))
+ last++;
+ if (ctxt->mimeType != NULL)
+ xmlFree(ctxt->mimeType);
+ ctxt->mimeType = (char *) xmlStrndup(mime, last - mime);
+ charset = xmlStrstr(BAD_CAST ctxt->contentType, BAD_CAST "charset=");
+ if (charset != NULL) {
+ charset += 8;
+ last = charset;
+ while ((*last != 0) && (*last != ' ') && (*last != '\t') &&
+ (*last != ';') && (*last != ','))
+ last++;
+ if (ctxt->encoding != NULL)
+ xmlFree(ctxt->encoding);
+ ctxt->encoding = (char *) xmlStrndup(charset, last - charset);
+ }
+ } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"Location:", 9)) {
+ cur += 9;
+ while ((*cur == ' ') || (*cur == '\t')) cur++;
+ if (ctxt->location != NULL)
+ xmlFree(ctxt->location);
+ ctxt->location = xmlMemStrdup(cur);
+ } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"WWW-Authenticate:", 17)) {
+ cur += 17;
+ while ((*cur == ' ') || (*cur == '\t')) cur++;
+ if (ctxt->authHeader != NULL)
+ xmlFree(ctxt->authHeader);
+ ctxt->authHeader = xmlMemStrdup(cur);
+ } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"Proxy-Authenticate:", 19)) {
+ cur += 19;
+ while ((*cur == ' ') || (*cur == '\t')) cur++;
+ if (ctxt->authHeader != NULL)
+ xmlFree(ctxt->authHeader);
+ ctxt->authHeader = xmlMemStrdup(cur);
+ } else if ( !xmlStrncasecmp( BAD_CAST line, BAD_CAST"Content-Length:", 15) ) {
+ cur += 15;
+ ctxt->ContentLength = strtol( cur, NULL, 10 );
+ }
+}
+
+/**
+ * xmlNanoHTTPConnectAttempt:
+ * @addr: a socket address structure
+ *
+ * Attempt a connection to the given IP:port endpoint. It forces
+ * non-blocking semantic on the socket, and allow 60 seconds for
+ * the host to answer.
+ *
+ * Returns -1 in case of failure, the file descriptor number otherwise
+ */
+
+static int
+xmlNanoHTTPConnectAttempt(struct sockaddr *addr)
+{
+ fd_set wfd;
+#ifdef _WINSOCKAPI_
+ fd_set xfd;
+#endif
+ struct timeval tv;
+ int status;
+ int addrlen;
+ SOCKET s;
+
+#ifdef SUPPORT_IP6
+ if (addr->sa_family == AF_INET6) {
+ s = socket (PF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ addrlen = sizeof (struct sockaddr_in6);
+ }
+ else
+#endif
+ {
+ s = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
+ addrlen = sizeof (struct sockaddr_in);
+ }
+ if (s==-1) {
+#ifdef DEBUG_HTTP
+ perror("socket");
+#endif
+ __xmlIOErr(XML_FROM_HTTP, 0, "socket failed\n");
+ return(-1);
+ }
+
+#ifdef _WINSOCKAPI_
+ {
+ u_long one = 1;
+
+ status = ioctlsocket(s, FIONBIO, &one) == SOCKET_ERROR ? -1 : 0;
+ }
+#else /* _WINSOCKAPI_ */
+#if defined(VMS)
+ {
+ int enable = 1;
+ status = ioctl(s, FIONBIO, &enable);
+ }
+#else /* VMS */
+#if defined(__BEOS__)
+ {
+ bool noblock = true;
+ status = setsockopt(s, SOL_SOCKET, SO_NONBLOCK, &noblock, sizeof(noblock));
+ }
+#else /* __BEOS__ */
+ if ((status = fcntl(s, F_GETFL, 0)) != -1) {
+#ifdef O_NONBLOCK
+ status |= O_NONBLOCK;
+#else /* O_NONBLOCK */
+#ifdef F_NDELAY
+ status |= F_NDELAY;
+#endif /* F_NDELAY */
+#endif /* !O_NONBLOCK */
+ status = fcntl(s, F_SETFL, status);
+ }
+ if (status < 0) {
+#ifdef DEBUG_HTTP
+ perror("nonblocking");
+#endif
+ __xmlIOErr(XML_FROM_HTTP, 0, "error setting non-blocking IO\n");
+ closesocket(s);
+ return(-1);
+ }
+#endif /* !__BEOS__ */
+#endif /* !VMS */
+#endif /* !_WINSOCKAPI_ */
+
+ if (connect (s, addr, addrlen) == -1) {
+ switch (socket_errno()) {
+ case EINPROGRESS:
+ case EWOULDBLOCK:
+ break;
+ default:
+ __xmlIOErr(XML_FROM_HTTP, 0, "error connecting to HTTP server");
+ closesocket(s);
+ return(-1);
+ }
+ }
+
+ tv.tv_sec = timeout;
+ tv.tv_usec = 0;
+
+ FD_ZERO(&wfd);
+ FD_SET(s, &wfd);
+
+#ifdef _WINSOCKAPI_
+ FD_ZERO(&xfd);
+ FD_SET(s, &xfd);
+
+ switch(select(s+1, NULL, &wfd, &xfd, &tv))
+#else
+ switch(select(s+1, NULL, &wfd, NULL, &tv))
+#endif
+ {
+ case 0:
+ /* Time out */
+ __xmlIOErr(XML_FROM_HTTP, 0, "Connect attempt timed out");
+ closesocket(s);
+ return(-1);
+ case -1:
+ /* Ermm.. ?? */
+ __xmlIOErr(XML_FROM_HTTP, 0, "Connect failed");
+ closesocket(s);
+ return(-1);
+ }
+
+ if ( FD_ISSET(s, &wfd)
+#ifdef _WINSOCKAPI_
+ || FD_ISSET(s, &xfd)
+#endif
+ ) {
+ SOCKLEN_T len;
+ len = sizeof(status);
+#ifdef SO_ERROR
+ if (getsockopt(s, SOL_SOCKET, SO_ERROR, (char*)&status, &len) < 0 ) {
+ /* Solaris error code */
+ __xmlIOErr(XML_FROM_HTTP, 0, "getsockopt failed\n");
+ return (-1);
+ }
+#endif
+ if ( status ) {
+ __xmlIOErr(XML_FROM_HTTP, 0, "Error connecting to remote host");
+ closesocket(s);
+ errno = status;
+ return (-1);
+ }
+ } else {
+ /* pbm */
+ __xmlIOErr(XML_FROM_HTTP, 0, "select failed\n");
+ closesocket(s);
+ return (-1);
+ }
+
+ return(s);
+}
+
+/**
+ * xmlNanoHTTPConnectHost:
+ * @host: the host name
+ * @port: the port number
+ *
+ * Attempt a connection to the given host:port endpoint. It tries
+ * the multiple IP provided by the DNS if available.
+ *
+ * Returns -1 in case of failure, the file descriptor number otherwise
+ */
+
+static int
+xmlNanoHTTPConnectHost(const char *host, int port)
+{
+ struct hostent *h;
+ struct sockaddr *addr = NULL;
+ struct in_addr ia;
+ struct sockaddr_in sockin;
+
+#ifdef SUPPORT_IP6
+ struct in6_addr ia6;
+ struct sockaddr_in6 sockin6;
+#endif
+ int i;
+ int s;
+
+ memset (&sockin, 0, sizeof(sockin));
+#ifdef SUPPORT_IP6
+ memset (&sockin6, 0, sizeof(sockin6));
+ if (have_ipv6 ())
+#if !defined(HAVE_GETADDRINFO) && defined(RES_USE_INET6)
+ {
+ if (!(_res.options & RES_INIT))
+ res_init();
+ _res.options |= RES_USE_INET6;
+ }
+#elif defined(HAVE_GETADDRINFO)
+ {
+ int status;
+ struct addrinfo hints, *res, *result;
+
+ result = NULL;
+ memset (&hints, 0,sizeof(hints));
+ hints.ai_socktype = SOCK_STREAM;
+
+ status = getaddrinfo (host, NULL, &hints, &result);
+ if (status) {
+ __xmlIOErr(XML_FROM_HTTP, 0, "getaddrinfo failed\n");
+ return (-1);
+ }
+
+ for (res = result; res; res = res->ai_next) {
+ if (res->ai_family == AF_INET || res->ai_family == AF_INET6) {
+ if (res->ai_family == AF_INET6) {
+ memcpy (&sockin6, res->ai_addr, res->ai_addrlen);
+ sockin6.sin6_port = htons (port);
+ addr = (struct sockaddr *)&sockin6;
+ }
+ else {
+ memcpy (&sockin, res->ai_addr, res->ai_addrlen);
+ sockin.sin_port = htons (port);
+ addr = (struct sockaddr *)&sockin;
+ }
+
+ s = xmlNanoHTTPConnectAttempt (addr);
+ if (s != -1) {
+ freeaddrinfo (result);
+ return (s);
+ }
+ }
+ }
+ if (result)
+ freeaddrinfo (result);
+ return (-1);
+ } else
+#endif
+#endif
+ {
+ h = gethostbyname (host);
+ if (h == NULL) {
+
+/*
+ * Okay, I got fed up by the non-portability of this error message
+ * extraction code. it work on Linux, if it work on your platform
+ * and one want to enable it, send me the defined(foobar) needed
+ */
+#if defined(HAVE_NETDB_H) && defined(HOST_NOT_FOUND) && defined(linux)
+ const char *h_err_txt = "";
+
+ switch (h_errno) {
+ case HOST_NOT_FOUND:
+ h_err_txt = "Authoritive host not found";
+ break;
+
+ case TRY_AGAIN:
+ h_err_txt =
+ "Non-authoritive host not found or server failure.";
+ break;
+
+ case NO_RECOVERY:
+ h_err_txt =
+ "Non-recoverable errors: FORMERR, REFUSED, or NOTIMP.";
+ break;
+
+ case NO_ADDRESS:
+ h_err_txt =
+ "Valid name, no data record of requested type.";
+ break;
+
+ default:
+ h_err_txt = "No error text defined.";
+ break;
+ }
+ __xmlIOErr(XML_FROM_HTTP, 0, h_err_txt);
+#else
+ __xmlIOErr(XML_FROM_HTTP, 0, "Failed to resolve host");
+#endif
+ return (-1);
+ }
+
+ for (i = 0; h->h_addr_list[i]; i++) {
+ if (h->h_addrtype == AF_INET) {
+ /* A records (IPv4) */
+ 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);
+ addr = (struct sockaddr *) &sockin;
+#ifdef SUPPORT_IP6
+ } else if (have_ipv6 () && (h->h_addrtype == AF_INET6)) {
+ /* AAAA records (IPv6) */
+ memcpy (&ia6, h->h_addr_list[i], h->h_length);
+ sockin6.sin6_family = h->h_addrtype;
+ sockin6.sin6_addr = ia6;
+ sockin6.sin6_port = htons (port);
+ addr = (struct sockaddr *) &sockin6;
+#endif
+ } else
+ break; /* for */
+
+ s = xmlNanoHTTPConnectAttempt (addr);
+ if (s != -1)
+ return (s);
+ }
+ }
+#ifdef DEBUG_HTTP
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNanoHTTPConnectHost: unable to connect to '%s'.\n",
+ host);
+#endif
+ return (-1);
+}
+
+
+/**
+ * xmlNanoHTTPOpen:
+ * @URL: The URL to load
+ * @contentType: if available the Content-Type information will be
+ * returned at that location
+ *
+ * This function try to open a connection to the indicated resource
+ * via HTTP GET.
+ *
+ * Returns NULL in case of failure, otherwise a request handler.
+ * The contentType, if provided must be freed by the caller
+ */
+
+void*
+xmlNanoHTTPOpen(const char *URL, char **contentType) {
+ if (contentType != NULL) *contentType = NULL;
+ return(xmlNanoHTTPMethod(URL, NULL, NULL, contentType, NULL, 0));
+}
+
+/**
+ * xmlNanoHTTPOpenRedir:
+ * @URL: The URL to load
+ * @contentType: if available the Content-Type information will be
+ * returned at that location
+ * @redir: if available the redirected URL will be returned
+ *
+ * This function try to open a connection to the indicated resource
+ * via HTTP GET.
+ *
+ * Returns NULL in case of failure, otherwise a request handler.
+ * The contentType, if provided must be freed by the caller
+ */
+
+void*
+xmlNanoHTTPOpenRedir(const char *URL, char **contentType, char **redir) {
+ if (contentType != NULL) *contentType = NULL;
+ if (redir != NULL) *redir = NULL;
+ return(xmlNanoHTTPMethodRedir(URL, NULL, NULL, contentType, redir, NULL,0));
+}
+
+/**
+ * xmlNanoHTTPRead:
+ * @ctx: the HTTP context
+ * @dest: a buffer
+ * @len: the buffer length
+ *
+ * This function tries to read @len bytes from the existing HTTP connection
+ * and saves them in @dest. This is a blocking call.
+ *
+ * Returns the number of byte read. 0 is an indication of an end of connection.
+ * -1 indicates a parameter error.
+ */
+int
+xmlNanoHTTPRead(void *ctx, void *dest, int len) {
+ xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr) ctx;
+
+ if (ctx == NULL) return(-1);
+ if (dest == NULL) return(-1);
+ if (len <= 0) return(0);
+
+ while (ctxt->inptr - ctxt->inrptr < len) {
+ if (xmlNanoHTTPRecv(ctxt) <= 0) break;
+ }
+ if (ctxt->inptr - ctxt->inrptr < len)
+ len = ctxt->inptr - ctxt->inrptr;
+ memcpy(dest, ctxt->inrptr, len);
+ ctxt->inrptr += len;
+ return(len);
+}
+
+/**
+ * xmlNanoHTTPClose:
+ * @ctx: the HTTP context
+ *
+ * This function closes an HTTP context, it ends up the connection and
+ * free all data related to it.
+ */
+void
+xmlNanoHTTPClose(void *ctx) {
+ xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr) ctx;
+
+ if (ctx == NULL) return;
+
+ xmlNanoHTTPFreeCtxt(ctxt);
+}
+
+/**
+ * xmlNanoHTTPMethodRedir:
+ * @URL: The URL to load
+ * @method: the HTTP method to use
+ * @input: the input string if any
+ * @contentType: the Content-Type information IN and OUT
+ * @redir: the redirected URL OUT
+ * @headers: the extra headers
+ * @ilen: input length
+ *
+ * This function try to open a connection to the indicated resource
+ * via HTTP using the given @method, adding the given extra headers
+ * and the input buffer for the request content.
+ *
+ * Returns NULL in case of failure, otherwise a request handler.
+ * The contentType, or redir, if provided must be freed by the caller
+ */
+
+void*
+xmlNanoHTTPMethodRedir(const char *URL, const char *method, const char *input,
+ char **contentType, char **redir,
+ const char *headers, int ilen ) {
+ xmlNanoHTTPCtxtPtr ctxt;
+ char *bp, *p;
+ int blen, ret;
+ int head;
+ int nbRedirects = 0;
+ char *redirURL = NULL;
+#ifdef DEBUG_HTTP
+ int xmt_bytes;
+#endif
+
+ if (URL == NULL) return(NULL);
+ if (method == NULL) method = "GET";
+ xmlNanoHTTPInit();
+
+retry:
+ if (redirURL == NULL)
+ ctxt = xmlNanoHTTPNewCtxt(URL);
+ else {
+ ctxt = xmlNanoHTTPNewCtxt(redirURL);
+ ctxt->location = xmlMemStrdup(redirURL);
+ }
+
+ if ( ctxt == NULL ) {
+ return ( NULL );
+ }
+
+ if ((ctxt->protocol == NULL) || (strcmp(ctxt->protocol, "http"))) {
+ __xmlIOErr(XML_FROM_HTTP, XML_HTTP_URL_SYNTAX, "Not a valid HTTP URI");
+ xmlNanoHTTPFreeCtxt(ctxt);
+ if (redirURL != NULL) xmlFree(redirURL);
+ return(NULL);
+ }
+ if (ctxt->hostname == NULL) {
+ __xmlIOErr(XML_FROM_HTTP, XML_HTTP_UNKNOWN_HOST,
+ "Failed to identify host in URI");
+ xmlNanoHTTPFreeCtxt(ctxt);
+ if (redirURL != NULL) xmlFree(redirURL);
+ return(NULL);
+ }
+ if (proxy) {
+ blen = strlen(ctxt->hostname) * 2 + 16;
+ ret = xmlNanoHTTPConnectHost(proxy, proxyPort);
+ }
+ else {
+ blen = strlen(ctxt->hostname);
+ ret = xmlNanoHTTPConnectHost(ctxt->hostname, ctxt->port);
+ }
+ if (ret < 0) {
+ xmlNanoHTTPFreeCtxt(ctxt);
+ if (redirURL != NULL) xmlFree(redirURL);
+ return(NULL);
+ }
+ ctxt->fd = ret;
+
+ if (input == NULL)
+ ilen = 0;
+ else
+ blen += 36;
+
+ if (headers != NULL)
+ blen += strlen(headers) + 2;
+ if (contentType && *contentType)
+ blen += strlen(*contentType) + 16;
+ blen += strlen(method) + strlen(ctxt->path) + 24;
+ bp = (char*)xmlMallocAtomic(blen);
+ if ( bp == NULL ) {
+ xmlNanoHTTPFreeCtxt( ctxt );
+ xmlHTTPErrMemory("allocating header buffer");
+ return ( NULL );
+ }
+
+ p = bp;
+
+ if (proxy) {
+ if (ctxt->port != 80) {
+ p += snprintf( p, blen - (p - bp), "%s http://%s:%d%s",
+ method, ctxt->hostname,
+ ctxt->port, ctxt->path );
+ }
+ else
+ p += snprintf( p, blen - (p - bp), "%s http://%s%s", method,
+ ctxt->hostname, ctxt->path);
+ }
+ else
+ p += snprintf( p, blen - (p - bp), "%s %s", method, ctxt->path);
+
+ p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s\r\n",
+ ctxt->hostname);
+
+ if (contentType != NULL && *contentType)
+ p += snprintf(p, blen - (p - bp), "Content-Type: %s\r\n", *contentType);
+
+ if (headers != NULL)
+ p += snprintf( p, blen - (p - bp), "%s", headers );
+
+ if (input != NULL)
+ snprintf(p, blen - (p - bp), "Content-Length: %d\r\n\r\n", ilen );
+ else
+ snprintf(p, blen - (p - bp), "\r\n");
+
+#ifdef DEBUG_HTTP
+ xmlGenericError(xmlGenericErrorContext,
+ "-> %s%s", proxy? "(Proxy) " : "", bp);
+ if ((blen -= strlen(bp)+1) < 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "ERROR: overflowed buffer by %d bytes\n", -blen);
+#endif
+ ctxt->outptr = ctxt->out = bp;
+ ctxt->state = XML_NANO_HTTP_WRITE;
+ blen = strlen( ctxt->out );
+#ifdef DEBUG_HTTP
+ xmt_bytes = xmlNanoHTTPSend(ctxt, ctxt->out, blen );
+ if ( xmt_bytes != blen )
+ xmlGenericError( xmlGenericErrorContext,
+ "xmlNanoHTTPMethodRedir: Only %d of %d %s %s\n",
+ xmt_bytes, blen,
+ "bytes of HTTP headers sent to host",
+ ctxt->hostname );
+#else
+ xmlNanoHTTPSend(ctxt, ctxt->out, blen );
+#endif
+
+ if ( input != NULL ) {
+#ifdef DEBUG_HTTP
+ xmt_bytes = xmlNanoHTTPSend( ctxt, input, ilen );
+
+ if ( xmt_bytes != ilen )
+ xmlGenericError( xmlGenericErrorContext,
+ "xmlNanoHTTPMethodRedir: Only %d of %d %s %s\n",
+ xmt_bytes, ilen,
+ "bytes of HTTP content sent to host",
+ ctxt->hostname );
+#else
+ xmlNanoHTTPSend( ctxt, input, ilen );
+#endif
+ }
+
+ ctxt->state = XML_NANO_HTTP_READ;
+ head = 1;
+
+ while ((p = xmlNanoHTTPReadLine(ctxt)) != NULL) {
+ if (head && (*p == 0)) {
+ head = 0;
+ ctxt->content = ctxt->inrptr;
+ xmlFree(p);
+ break;
+ }
+ xmlNanoHTTPScanAnswer(ctxt, p);
+
+#ifdef DEBUG_HTTP
+ xmlGenericError(xmlGenericErrorContext, "<- %s\n", p);
+#endif
+ xmlFree(p);
+ }
+
+ if ((ctxt->location != NULL) && (ctxt->returnValue >= 300) &&
+ (ctxt->returnValue < 400)) {
+#ifdef DEBUG_HTTP
+ xmlGenericError(xmlGenericErrorContext,
+ "\nRedirect to: %s\n", ctxt->location);
+#endif
+ while ( xmlNanoHTTPRecv(ctxt) > 0 ) ;
+ if (nbRedirects < XML_NANO_HTTP_MAX_REDIR) {
+ nbRedirects++;
+ if (redirURL != NULL)
+ xmlFree(redirURL);
+ redirURL = xmlMemStrdup(ctxt->location);
+ xmlNanoHTTPFreeCtxt(ctxt);
+ goto retry;
+ }
+ xmlNanoHTTPFreeCtxt(ctxt);
+ if (redirURL != NULL) xmlFree(redirURL);
+#ifdef DEBUG_HTTP
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNanoHTTPMethodRedir: Too many redirects, aborting ...\n");
+#endif
+ return(NULL);
+ }
+
+ if (contentType != NULL) {
+ if (ctxt->contentType != NULL)
+ *contentType = xmlMemStrdup(ctxt->contentType);
+ else
+ *contentType = NULL;
+ }
+
+ if ((redir != NULL) && (redirURL != NULL)) {
+ *redir = redirURL;
+ } else {
+ if (redirURL != NULL)
+ xmlFree(redirURL);
+ if (redir != NULL)
+ *redir = NULL;
+ }
+
+#ifdef DEBUG_HTTP
+ if (ctxt->contentType != NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "\nCode %d, content-type '%s'\n\n",
+ ctxt->returnValue, ctxt->contentType);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "\nCode %d, no content-type\n\n",
+ ctxt->returnValue);
+#endif
+
+ return((void *) ctxt);
+}
+
+/**
+ * xmlNanoHTTPMethod:
+ * @URL: The URL to load
+ * @method: the HTTP method to use
+ * @input: the input string if any
+ * @contentType: the Content-Type information IN and OUT
+ * @headers: the extra headers
+ * @ilen: input length
+ *
+ * This function try to open a connection to the indicated resource
+ * via HTTP using the given @method, adding the given extra headers
+ * and the input buffer for the request content.
+ *
+ * Returns NULL in case of failure, otherwise a request handler.
+ * The contentType, if provided must be freed by the caller
+ */
+
+void*
+xmlNanoHTTPMethod(const char *URL, const char *method, const char *input,
+ char **contentType, const char *headers, int ilen) {
+ return(xmlNanoHTTPMethodRedir(URL, method, input, contentType,
+ NULL, headers, ilen));
+}
+
+/**
+ * xmlNanoHTTPFetch:
+ * @URL: The URL to load
+ * @filename: the filename where the content should be saved
+ * @contentType: if available the Content-Type information will be
+ * returned at that location
+ *
+ * This function try to fetch the indicated resource via HTTP GET
+ * and save it's content in the file.
+ *
+ * Returns -1 in case of failure, 0 incase of success. The contentType,
+ * if provided must be freed by the caller
+ */
+int
+xmlNanoHTTPFetch(const char *URL, const char *filename, char **contentType) {
+ void *ctxt = NULL;
+ char *buf = NULL;
+ int fd;
+ int len;
+
+ ctxt = xmlNanoHTTPOpen(URL, contentType);
+ if (ctxt == NULL) return(-1);
+
+ if (!strcmp(filename, "-"))
+ fd = 0;
+ else {
+ fd = open(filename, O_CREAT | O_WRONLY, 00644);
+ if (fd < 0) {
+ xmlNanoHTTPClose(ctxt);
+ if ((contentType != NULL) && (*contentType != NULL)) {
+ xmlFree(*contentType);
+ *contentType = NULL;
+ }
+ return(-1);
+ }
+ }
+
+ xmlNanoHTTPFetchContent( ctxt, &buf, &len );
+ if ( len > 0 ) {
+ write(fd, buf, len);
+ }
+
+ xmlNanoHTTPClose(ctxt);
+ close(fd);
+ return(0);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlNanoHTTPSave:
+ * @ctxt: the HTTP context
+ * @filename: the filename where the content should be saved
+ *
+ * This function saves the output of the HTTP transaction to a file
+ * It closes and free the context at the end
+ *
+ * Returns -1 in case of failure, 0 incase of success.
+ */
+int
+xmlNanoHTTPSave(void *ctxt, const char *filename) {
+ char *buf = NULL;
+ int fd;
+ int len;
+
+ if (ctxt == NULL) return(-1);
+
+ if (!strcmp(filename, "-"))
+ fd = 0;
+ else {
+ fd = open(filename, O_CREAT | O_WRONLY);
+ if (fd < 0) {
+ xmlNanoHTTPClose(ctxt);
+ return(-1);
+ }
+ }
+
+ xmlNanoHTTPFetchContent( ctxt, &buf, &len );
+ if ( len > 0 ) {
+ write(fd, buf, len);
+ }
+
+ xmlNanoHTTPClose(ctxt);
+ close(fd);
+ return(0);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlNanoHTTPReturnCode:
+ * @ctx: the HTTP context
+ *
+ * Get the latest HTTP return code received
+ *
+ * Returns the HTTP return code for the request.
+ */
+int
+xmlNanoHTTPReturnCode(void *ctx) {
+ xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr) ctx;
+
+ if (ctxt == NULL) return(-1);
+
+ return(ctxt->returnValue);
+}
+
+/**
+ * xmlNanoHTTPAuthHeader:
+ * @ctx: the HTTP context
+ *
+ * Get the authentication header of an HTTP context
+ *
+ * Returns the stashed value of the WWW-Authenticate or Proxy-Authenticate
+ * header.
+ */
+const char *
+xmlNanoHTTPAuthHeader(void *ctx) {
+ xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr) ctx;
+
+ if (ctxt == NULL) return(NULL);
+
+ return(ctxt->authHeader);
+}
+
+/**
+ * xmlNanoHTTPContentLength:
+ * @ctx: the HTTP context
+ *
+ * Provides the specified content length from the HTTP header.
+ *
+ * Return the specified content length from the HTTP header. Note that
+ * a value of -1 indicates that the content length element was not included in
+ * the response header.
+ */
+int
+xmlNanoHTTPContentLength( void * ctx ) {
+ xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
+
+ return ( ( ctxt == NULL ) ? -1 : ctxt->ContentLength );
+}
+
+/**
+ * xmlNanoHTTPRedir:
+ * @ctx: the HTTP context
+ *
+ * Provides the specified redirection URL if available from the HTTP header.
+ *
+ * Return the specified redirection URL or NULL if not redirected.
+ */
+const char *
+xmlNanoHTTPRedir( void * ctx ) {
+ xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
+
+ return ( ( ctxt == NULL ) ? NULL : ctxt->location );
+}
+
+/**
+ * xmlNanoHTTPEncoding:
+ * @ctx: the HTTP context
+ *
+ * Provides the specified encoding if specified in the HTTP headers.
+ *
+ * Return the specified encoding or NULL if not available
+ */
+const char *
+xmlNanoHTTPEncoding( void * ctx ) {
+ xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
+
+ return ( ( ctxt == NULL ) ? NULL : ctxt->encoding );
+}
+
+/**
+ * xmlNanoHTTPMimeType:
+ * @ctx: the HTTP context
+ *
+ * Provides the specified Mime-Type if specified in the HTTP headers.
+ *
+ * Return the specified Mime-Type or NULL if not available
+ */
+const char *
+xmlNanoHTTPMimeType( void * ctx ) {
+ xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
+
+ return ( ( ctxt == NULL ) ? NULL : ctxt->mimeType );
+}
+
+/**
+ * xmlNanoHTTPFetchContent:
+ * @ctx: the HTTP context
+ * @ptr: pointer to set to the content buffer.
+ * @len: integer pointer to hold the length of the content
+ *
+ * Check if all the content was read
+ *
+ * Returns 0 if all the content was read and available, returns
+ * -1 if received content length was less than specified or an error
+ * occurred.
+ */
+int
+xmlNanoHTTPFetchContent( void * ctx, char ** ptr, int * len ) {
+ xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
+
+ int rc = 0;
+ int cur_lgth;
+ int rcvd_lgth;
+ int dummy_int;
+ char * dummy_ptr = NULL;
+
+ /* Dummy up return input parameters if not provided */
+
+ if ( len == NULL )
+ len = &dummy_int;
+
+ if ( ptr == NULL )
+ ptr = &dummy_ptr;
+
+ /* But can't work without the context pointer */
+
+ if ( ( ctxt == NULL ) || ( ctxt->content == NULL ) ) {
+ *len = 0;
+ *ptr = NULL;
+ return ( -1 );
+ }
+
+ rcvd_lgth = ctxt->inptr - ctxt->content;
+
+ while ( (cur_lgth = xmlNanoHTTPRecv( ctxt )) > 0 ) {
+
+ rcvd_lgth += cur_lgth;
+ if ( (ctxt->ContentLength > 0) && (rcvd_lgth >= ctxt->ContentLength) )
+ break;
+ }
+
+ *ptr = ctxt->content;
+ *len = rcvd_lgth;
+
+ if ( ( ctxt->ContentLength > 0 ) && ( rcvd_lgth < ctxt->ContentLength ) )
+ rc = -1;
+ else if ( rcvd_lgth == 0 )
+ rc = -1;
+
+ return ( rc );
+}
+
+#ifdef STANDALONE
+int main(int argc, char **argv) {
+ char *contentType = NULL;
+
+ if (argv[1] != NULL) {
+ if (argv[2] != NULL)
+ xmlNanoHTTPFetch(argv[1], argv[2], &contentType);
+ else
+ xmlNanoHTTPFetch(argv[1], "-", &contentType);
+ if (contentType != NULL) xmlFree(contentType);
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "%s: minimal HTTP GET implementation\n", argv[0]);
+ xmlGenericError(xmlGenericErrorContext,
+ "\tusage %s [ URL [ filename ] ]\n", argv[0]);
+ }
+ xmlNanoHTTPCleanup();
+ xmlMemoryDump();
+ return(0);
+}
+#endif /* STANDALONE */
+#else /* !LIBXML_HTTP_ENABLED */
+#ifdef STANDALONE
+#include <stdio.h>
+int main(int argc, char **argv) {
+ xmlGenericError(xmlGenericErrorContext,
+ "%s : HTTP support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* STANDALONE */
+#endif /* LIBXML_HTTP_ENABLED */
diff --git a/parser.c b/parser.c
new file mode 100644
index 0000000..49ed857
--- /dev/null
+++ b/parser.c
@@ -0,0 +1,12388 @@
+/*
+ * parser.c : an XML 1.0 parser, namespaces and validity support are mostly
+ * implemented on top of the SAX interfaces
+ *
+ * References:
+ * The XML specification:
+ * http://www.w3.org/TR/REC-xml
+ * Original 1.0 version:
+ * http://www.w3.org/TR/1998/REC-xml-19980210
+ * XML second edition working draft
+ * http://www.w3.org/TR/2000/WD-xml-2e-20000814
+ *
+ * Okay this is a big file, the parser core is around 7000 lines, then it
+ * is followed by the progressive parser top routines, then the various
+ * high level APIs to call the parser and a few miscellaneous functions.
+ * A number of helper functions and deprecated ones have been moved to
+ * parserInternals.c to reduce this file size.
+ * As much as possible the functions are associated with their relative
+ * production in the XML specification. A few productions defining the
+ * different ranges of character are actually implanted either in
+ * parserInternals.h or parserInternals.c
+ * The DOM tree build is realized from the default SAX callbacks in
+ * the module SAX.c.
+ * The routines doing the validation checks are in valid.c and called either
+ * from the SAX callbacks or as standalone functions using a preparsed
+ * document.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#if defined(WIN32) && !defined (__CYGWIN__)
+#define XML_DIR_SEP '\\'
+#else
+#define XML_DIR_SEP '/'
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/threads.h>
+#include <libxml/globals.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/valid.h>
+#include <libxml/entities.h>
+#include <libxml/xmlerror.h>
+#include <libxml/encoding.h>
+#include <libxml/xmlIO.h>
+#include <libxml/uri.h>
+#ifdef LIBXML_CATALOG_ENABLED
+#include <libxml/catalog.h>
+#endif
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_ZLIB_H
+#include <zlib.h>
+#endif
+
+/**
+ * xmlParserMaxDepth:
+ *
+ * arbitrary depth limit for the XML documents that we allow to
+ * process. This is not a limitation of the parser but a safety
+ * boundary feature.
+ */
+unsigned int xmlParserMaxDepth = 1024;
+
+#define SAX2 1
+
+#define XML_PARSER_BIG_BUFFER_SIZE 300
+#define XML_PARSER_BUFFER_SIZE 100
+
+#define SAX_COMPAT_MODE BAD_CAST "SAX compatibility mode document"
+
+/*
+ * List of XML prefixed PI allowed by W3C specs
+ */
+
+static const char *xmlW3CPIs[] = {
+ "xml-stylesheet",
+ NULL
+};
+
+
+/* DEPR void xmlParserHandleReference(xmlParserCtxtPtr ctxt); */
+xmlEntityPtr xmlParseStringPEReference(xmlParserCtxtPtr ctxt,
+ const xmlChar **str);
+
+static xmlParserErrors
+xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt,
+ xmlSAXHandlerPtr sax,
+ void *user_data, int depth, const xmlChar *URL,
+ const xmlChar *ID, xmlNodePtr *list);
+
+#ifdef LIBXML_LEGACY_ENABLED
+static void
+xmlAddEntityReference(xmlEntityPtr ent, xmlNodePtr firstNode,
+ xmlNodePtr lastNode);
+#endif /* LIBXML_LEGACY_ENABLED */
+
+static xmlParserErrors
+xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
+ const xmlChar *string, void *user_data, xmlNodePtr *lst);
+
+/************************************************************************
+ * *
+ * Some factorized error routines *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlErrAttributeDup:
+ * @ctxt: an XML parser context
+ * @prefix: the attribute prefix
+ * @localname: the attribute localname
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlErrAttributeDup(xmlParserCtxtPtr ctxt, const xmlChar * prefix,
+ const xmlChar * localname)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = XML_ERR_ATTRIBUTE_REDEFINED;
+ if (prefix == NULL)
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+ ctxt->errNo, XML_ERR_FATAL, NULL, 0,
+ (const char *) localname, NULL, NULL, 0, 0,
+ "Attribute %s redefined\n", localname);
+ else
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+ ctxt->errNo, XML_ERR_FATAL, NULL, 0,
+ (const char *) prefix, (const char *) localname,
+ NULL, 0, 0, "Attribute %s:%s redefined\n", prefix,
+ localname);
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0)
+ ctxt->disableSAX = 1;
+}
+
+/**
+ * xmlFatalErr:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @extra: extra information string
+ *
+ * Handle a fatal parser error, i.e. violating Well-Formedness constraints
+ */
+static void
+xmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info)
+{
+ const char *errmsg;
+
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ switch (error) {
+ case XML_ERR_INVALID_HEX_CHARREF:
+ errmsg = "CharRef: invalid hexadecimal value\n";
+ break;
+ case XML_ERR_INVALID_DEC_CHARREF:
+ errmsg = "CharRef: invalid decimal value\n";
+ break;
+ case XML_ERR_INVALID_CHARREF:
+ errmsg = "CharRef: invalid value\n";
+ break;
+ case XML_ERR_INTERNAL_ERROR:
+ errmsg = "internal error";
+ break;
+ case XML_ERR_PEREF_AT_EOF:
+ errmsg = "PEReference at end of document\n";
+ break;
+ case XML_ERR_PEREF_IN_PROLOG:
+ errmsg = "PEReference in prolog\n";
+ break;
+ case XML_ERR_PEREF_IN_EPILOG:
+ errmsg = "PEReference in epilog\n";
+ break;
+ case XML_ERR_PEREF_NO_NAME:
+ errmsg = "PEReference: no name\n";
+ break;
+ case XML_ERR_PEREF_SEMICOL_MISSING:
+ errmsg = "PEReference: expecting ';'\n";
+ break;
+ case XML_ERR_ENTITY_LOOP:
+ errmsg = "Detected an entity reference loop\n";
+ break;
+ case XML_ERR_ENTITY_NOT_STARTED:
+ errmsg = "EntityValue: \" or ' expected\n";
+ break;
+ case XML_ERR_ENTITY_PE_INTERNAL:
+ errmsg = "PEReferences forbidden in internal subset\n";
+ break;
+ case XML_ERR_ENTITY_NOT_FINISHED:
+ errmsg = "EntityValue: \" or ' expected\n";
+ break;
+ case XML_ERR_ATTRIBUTE_NOT_STARTED:
+ errmsg = "AttValue: \" or ' expected\n";
+ break;
+ case XML_ERR_LT_IN_ATTRIBUTE:
+ errmsg = "Unescaped '<' not allowed in attributes values\n";
+ break;
+ case XML_ERR_LITERAL_NOT_STARTED:
+ errmsg = "SystemLiteral \" or ' expected\n";
+ break;
+ case XML_ERR_LITERAL_NOT_FINISHED:
+ errmsg = "Unfinished System or Public ID \" or ' expected\n";
+ break;
+ case XML_ERR_MISPLACED_CDATA_END:
+ errmsg = "Sequence ']]>' not allowed in content\n";
+ break;
+ case XML_ERR_URI_REQUIRED:
+ errmsg = "SYSTEM or PUBLIC, the URI is missing\n";
+ break;
+ case XML_ERR_PUBID_REQUIRED:
+ errmsg = "PUBLIC, the Public Identifier is missing\n";
+ break;
+ case XML_ERR_HYPHEN_IN_COMMENT:
+ errmsg = "Comment must not contain '--' (double-hyphen)\n";
+ break;
+ case XML_ERR_PI_NOT_STARTED:
+ errmsg = "xmlParsePI : no target name\n";
+ break;
+ case XML_ERR_RESERVED_XML_NAME:
+ errmsg = "Invalid PI name\n";
+ break;
+ case XML_ERR_NOTATION_NOT_STARTED:
+ errmsg = "NOTATION: Name expected here\n";
+ break;
+ case XML_ERR_NOTATION_NOT_FINISHED:
+ errmsg = "'>' required to close NOTATION declaration\n";
+ break;
+ case XML_ERR_VALUE_REQUIRED:
+ errmsg = "Entity value required\n";
+ break;
+ case XML_ERR_URI_FRAGMENT:
+ errmsg = "Fragment not allowed";
+ break;
+ case XML_ERR_ATTLIST_NOT_STARTED:
+ errmsg = "'(' required to start ATTLIST enumeration\n";
+ break;
+ case XML_ERR_NMTOKEN_REQUIRED:
+ errmsg = "NmToken expected in ATTLIST enumeration\n";
+ break;
+ case XML_ERR_ATTLIST_NOT_FINISHED:
+ errmsg = "')' required to finish ATTLIST enumeration\n";
+ break;
+ case XML_ERR_MIXED_NOT_STARTED:
+ errmsg = "MixedContentDecl : '|' or ')*' expected\n";
+ break;
+ case XML_ERR_PCDATA_REQUIRED:
+ errmsg = "MixedContentDecl : '#PCDATA' expected\n";
+ break;
+ case XML_ERR_ELEMCONTENT_NOT_STARTED:
+ errmsg = "ContentDecl : Name or '(' expected\n";
+ break;
+ case XML_ERR_ELEMCONTENT_NOT_FINISHED:
+ errmsg = "ContentDecl : ',' '|' or ')' expected\n";
+ break;
+ case XML_ERR_PEREF_IN_INT_SUBSET:
+ errmsg =
+ "PEReference: forbidden within markup decl in internal subset\n";
+ break;
+ case XML_ERR_GT_REQUIRED:
+ errmsg = "expected '>'\n";
+ break;
+ case XML_ERR_CONDSEC_INVALID:
+ errmsg = "XML conditional section '[' expected\n";
+ break;
+ case XML_ERR_EXT_SUBSET_NOT_FINISHED:
+ errmsg = "Content error in the external subset\n";
+ break;
+ case XML_ERR_CONDSEC_INVALID_KEYWORD:
+ errmsg =
+ "conditional section INCLUDE or IGNORE keyword expected\n";
+ break;
+ case XML_ERR_CONDSEC_NOT_FINISHED:
+ errmsg = "XML conditional section not closed\n";
+ break;
+ case XML_ERR_XMLDECL_NOT_STARTED:
+ errmsg = "Text declaration '<?xml' required\n";
+ break;
+ case XML_ERR_XMLDECL_NOT_FINISHED:
+ errmsg = "parsing XML declaration: '?>' expected\n";
+ break;
+ case XML_ERR_EXT_ENTITY_STANDALONE:
+ errmsg = "external parsed entities cannot be standalone\n";
+ break;
+ case XML_ERR_ENTITYREF_SEMICOL_MISSING:
+ errmsg = "EntityRef: expecting ';'\n";
+ break;
+ case XML_ERR_DOCTYPE_NOT_FINISHED:
+ errmsg = "DOCTYPE improperly terminated\n";
+ break;
+ case XML_ERR_LTSLASH_REQUIRED:
+ errmsg = "EndTag: '</' not found\n";
+ break;
+ case XML_ERR_EQUAL_REQUIRED:
+ errmsg = "expected '='\n";
+ break;
+ case XML_ERR_STRING_NOT_CLOSED:
+ errmsg = "String not closed expecting \" or '\n";
+ break;
+ case XML_ERR_STRING_NOT_STARTED:
+ errmsg = "String not started expecting ' or \"\n";
+ break;
+ case XML_ERR_ENCODING_NAME:
+ errmsg = "Invalid XML encoding name\n";
+ break;
+ case XML_ERR_STANDALONE_VALUE:
+ errmsg = "standalone accepts only 'yes' or 'no'\n";
+ break;
+ case XML_ERR_DOCUMENT_EMPTY:
+ errmsg = "Document is empty\n";
+ break;
+ case XML_ERR_DOCUMENT_END:
+ errmsg = "Extra content at the end of the document\n";
+ break;
+ case XML_ERR_NOT_WELL_BALANCED:
+ errmsg = "chunk is not well balanced\n";
+ break;
+ case XML_ERR_EXTRA_CONTENT:
+ errmsg = "extra content at the end of well balanced chunk\n";
+ break;
+ case XML_ERR_VERSION_MISSING:
+ errmsg = "Malformed declaration expecting version\n";
+ break;
+#if 0
+ case:
+ errmsg = "\n";
+ break;
+#endif
+ default:
+ errmsg = "Unregistered error message\n";
+ }
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
+ XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, errmsg,
+ info);
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0)
+ ctxt->disableSAX = 1;
+}
+
+/**
+ * xmlFatalErrMsg:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the error message
+ *
+ * Handle a fatal parser error, i.e. violating Well-Formedness constraints
+ */
+static void
+xmlFatalErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
+ XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0, msg);
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0)
+ ctxt->disableSAX = 1;
+}
+
+/**
+ * xmlWarningMsg:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @str1: extra data
+ * @str2: extra data
+ *
+ * Handle a warning.
+ */
+static void
+xmlWarningMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, const xmlChar *str1, const xmlChar *str2)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
+ schannel = ctxt->sax->serror;
+ __xmlRaiseError(schannel,
+ (ctxt->sax) ? ctxt->sax->warning : NULL,
+ ctxt->userData,
+ ctxt, NULL, XML_FROM_PARSER, error,
+ XML_ERR_WARNING, NULL, 0,
+ (const char *) str1, (const char *) str2, NULL, 0, 0,
+ msg, (const char *) str1, (const char *) str2);
+}
+
+/**
+ * xmlValidityError:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @str1: extra data
+ *
+ * Handle a validity error.
+ */
+static void
+xmlValidityError(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, const xmlChar *str1)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
+ schannel = ctxt->sax->serror;
+ __xmlRaiseError(schannel,
+ ctxt->vctxt.error, ctxt->vctxt.userData,
+ ctxt, NULL, XML_FROM_DTD, error,
+ XML_ERR_ERROR, NULL, 0, (const char *) str1,
+ NULL, NULL, 0, 0,
+ msg, (const char *) str1);
+ ctxt->valid = 0;
+}
+
+/**
+ * xmlFatalErrMsgInt:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @val: an integer value
+ *
+ * Handle a fatal parser error, i.e. violating Well-Formedness constraints
+ */
+static void
+xmlFatalErrMsgInt(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, int val)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL,
+ ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
+ NULL, 0, NULL, NULL, NULL, val, 0, msg, val);
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0)
+ ctxt->disableSAX = 1;
+}
+
+/**
+ * xmlFatalErrMsgStrIntStr:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @str1: an string info
+ * @val: an integer value
+ * @str2: an string info
+ *
+ * Handle a fatal parser error, i.e. violating Well-Formedness constraints
+ */
+static void
+xmlFatalErrMsgStrIntStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, const xmlChar *str1, int val,
+ const xmlChar *str2)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL,
+ ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
+ NULL, 0, (const char *) str1, (const char *) str2,
+ NULL, val, 0, msg, str1, val, str2);
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0)
+ ctxt->disableSAX = 1;
+}
+
+/**
+ * xmlFatalErrMsgStr:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @val: a string value
+ *
+ * Handle a fatal parser error, i.e. violating Well-Formedness constraints
+ */
+static void
+xmlFatalErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, const xmlChar * val)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL,
+ XML_FROM_PARSER, error, XML_ERR_FATAL,
+ NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg,
+ val);
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0)
+ ctxt->disableSAX = 1;
+}
+
+/**
+ * xmlErrMsgStr:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @val: a string value
+ *
+ * Handle a non fatal parser error
+ */
+static void
+xmlErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, const xmlChar * val)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL,
+ XML_FROM_PARSER, error, XML_ERR_ERROR,
+ NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg,
+ val);
+}
+
+/**
+ * xmlNsErr:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the message
+ * @info1: extra information string
+ * @info2: extra information string
+ *
+ * Handle a fatal parser error, i.e. violating Well-Formedness constraints
+ */
+static void
+xmlNsErr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg,
+ const xmlChar * info1, const xmlChar * info2,
+ const xmlChar * info3)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
+ XML_ERR_ERROR, NULL, 0, (const char *) info1,
+ (const char *) info2, (const char *) info3, 0, 0, msg,
+ info1, info2, info3);
+ ctxt->nsWellFormed = 0;
+}
+
+/************************************************************************
+ * *
+ * SAX2 defaulted attributes handling *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlDetectSAX2:
+ * @ctxt: an XML parser context
+ *
+ * Do the SAX2 detection and specific intialization
+ */
+static void
+xmlDetectSAX2(xmlParserCtxtPtr ctxt) {
+ if (ctxt == NULL) return;
+#ifdef LIBXML_SAX1_ENABLED
+ if ((ctxt->sax) && (ctxt->sax->initialized == XML_SAX2_MAGIC) &&
+ ((ctxt->sax->startElementNs != NULL) ||
+ (ctxt->sax->endElementNs != NULL))) ctxt->sax2 = 1;
+#else
+ ctxt->sax2 = 1;
+#endif /* LIBXML_SAX1_ENABLED */
+
+ ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3);
+ ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5);
+ ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36);
+}
+
+typedef struct _xmlDefAttrs xmlDefAttrs;
+typedef xmlDefAttrs *xmlDefAttrsPtr;
+struct _xmlDefAttrs {
+ int nbAttrs; /* number of defaulted attributes on that element */
+ int maxAttrs; /* the size of the array */
+ const xmlChar *values[4]; /* array of localname/prefix/values */
+};
+
+/**
+ * xmlAddDefAttrs:
+ * @ctxt: an XML parser context
+ * @fullname: the element fullname
+ * @fullattr: the attribute fullname
+ * @value: the attribute value
+ *
+ * Add a defaulted attribute for an element
+ */
+static void
+xmlAddDefAttrs(xmlParserCtxtPtr ctxt,
+ const xmlChar *fullname,
+ const xmlChar *fullattr,
+ const xmlChar *value) {
+ xmlDefAttrsPtr defaults;
+ int len;
+ const xmlChar *name;
+ const xmlChar *prefix;
+
+ if (ctxt->attsDefault == NULL) {
+ ctxt->attsDefault = xmlHashCreate(10);
+ if (ctxt->attsDefault == NULL)
+ goto mem_error;
+ }
+
+ /*
+ * plit the element name into prefix:localname , the string found
+ * are within the DTD and hen not associated to namespace names.
+ */
+ name = xmlSplitQName3(fullname, &len);
+ if (name == NULL) {
+ name = xmlDictLookup(ctxt->dict, fullname, -1);
+ prefix = NULL;
+ } else {
+ name = xmlDictLookup(ctxt->dict, name, -1);
+ prefix = xmlDictLookup(ctxt->dict, fullname, len);
+ }
+
+ /*
+ * make sure there is some storage
+ */
+ defaults = xmlHashLookup2(ctxt->attsDefault, name, prefix);
+ if (defaults == NULL) {
+ defaults = (xmlDefAttrsPtr) xmlMalloc(sizeof(xmlDefAttrs) +
+ 12 * sizeof(const xmlChar *));
+ if (defaults == NULL)
+ goto mem_error;
+ defaults->maxAttrs = 4;
+ defaults->nbAttrs = 0;
+ xmlHashUpdateEntry2(ctxt->attsDefault, name, prefix, defaults, NULL);
+ } else if (defaults->nbAttrs >= defaults->maxAttrs) {
+ defaults = (xmlDefAttrsPtr) xmlRealloc(defaults, sizeof(xmlDefAttrs) +
+ (2 * defaults->maxAttrs * 4) * sizeof(const xmlChar *));
+ if (defaults == NULL)
+ goto mem_error;
+ defaults->maxAttrs *= 2;
+ xmlHashUpdateEntry2(ctxt->attsDefault, name, prefix, defaults, NULL);
+ }
+
+ /*
+ * plit the element name into prefix:localname , the string found
+ * are within the DTD and hen not associated to namespace names.
+ */
+ name = xmlSplitQName3(fullattr, &len);
+ if (name == NULL) {
+ name = xmlDictLookup(ctxt->dict, fullattr, -1);
+ prefix = NULL;
+ } else {
+ name = xmlDictLookup(ctxt->dict, name, -1);
+ prefix = xmlDictLookup(ctxt->dict, fullattr, len);
+ }
+
+ defaults->values[4 * defaults->nbAttrs] = name;
+ defaults->values[4 * defaults->nbAttrs + 1] = prefix;
+ /* intern the string and precompute the end */
+ len = xmlStrlen(value);
+ value = xmlDictLookup(ctxt->dict, value, len);
+ defaults->values[4 * defaults->nbAttrs + 2] = value;
+ defaults->values[4 * defaults->nbAttrs + 3] = value + len;
+ defaults->nbAttrs++;
+
+ return;
+
+mem_error:
+ xmlErrMemory(ctxt, NULL);
+ return;
+}
+
+/**
+ * xmlAddSpecialAttr:
+ * @ctxt: an XML parser context
+ * @fullname: the element fullname
+ * @fullattr: the attribute fullname
+ * @type: the attribute type
+ *
+ * Register that this attribute is not CDATA
+ */
+static void
+xmlAddSpecialAttr(xmlParserCtxtPtr ctxt,
+ const xmlChar *fullname,
+ const xmlChar *fullattr,
+ int type)
+{
+ if (ctxt->attsSpecial == NULL) {
+ ctxt->attsSpecial = xmlHashCreate(10);
+ if (ctxt->attsSpecial == NULL)
+ goto mem_error;
+ }
+
+ xmlHashAddEntry2(ctxt->attsSpecial, fullname, fullattr,
+ (void *) (long) type);
+ return;
+
+mem_error:
+ xmlErrMemory(ctxt, NULL);
+ return;
+}
+
+/**
+ * xmlCheckLanguageID:
+ * @lang: pointer to the string value
+ *
+ * Checks that the value conforms to the LanguageID production:
+ *
+ * NOTE: this is somewhat deprecated, those productions were removed from
+ * the XML Second edition.
+ *
+ * [33] LanguageID ::= Langcode ('-' Subcode)*
+ * [34] Langcode ::= ISO639Code | IanaCode | UserCode
+ * [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z])
+ * [36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+
+ * [37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+
+ * [38] Subcode ::= ([a-z] | [A-Z])+
+ *
+ * Returns 1 if correct 0 otherwise
+ **/
+int
+xmlCheckLanguageID(const xmlChar * lang)
+{
+ const xmlChar *cur = lang;
+
+ if (cur == NULL)
+ return (0);
+ if (((cur[0] == 'i') && (cur[1] == '-')) ||
+ ((cur[0] == 'I') && (cur[1] == '-'))) {
+ /*
+ * IANA code
+ */
+ cur += 2;
+ while (((cur[0] >= 'A') && (cur[0] <= 'Z')) || /* non input consuming */
+ ((cur[0] >= 'a') && (cur[0] <= 'z')))
+ cur++;
+ } else if (((cur[0] == 'x') && (cur[1] == '-')) ||
+ ((cur[0] == 'X') && (cur[1] == '-'))) {
+ /*
+ * User code
+ */
+ cur += 2;
+ while (((cur[0] >= 'A') && (cur[0] <= 'Z')) || /* non input consuming */
+ ((cur[0] >= 'a') && (cur[0] <= 'z')))
+ cur++;
+ } else if (((cur[0] >= 'A') && (cur[0] <= 'Z')) ||
+ ((cur[0] >= 'a') && (cur[0] <= 'z'))) {
+ /*
+ * ISO639
+ */
+ cur++;
+ if (((cur[0] >= 'A') && (cur[0] <= 'Z')) ||
+ ((cur[0] >= 'a') && (cur[0] <= 'z')))
+ cur++;
+ else
+ return (0);
+ } else
+ return (0);
+ while (cur[0] != 0) { /* non input consuming */
+ if (cur[0] != '-')
+ return (0);
+ cur++;
+ if (((cur[0] >= 'A') && (cur[0] <= 'Z')) ||
+ ((cur[0] >= 'a') && (cur[0] <= 'z')))
+ cur++;
+ else
+ return (0);
+ while (((cur[0] >= 'A') && (cur[0] <= 'Z')) || /* non input consuming */
+ ((cur[0] >= 'a') && (cur[0] <= 'z')))
+ cur++;
+ }
+ return (1);
+}
+
+/************************************************************************
+ * *
+ * Parser stacks related functions and macros *
+ * *
+ ************************************************************************/
+
+xmlEntityPtr xmlParseStringEntityRef(xmlParserCtxtPtr ctxt,
+ const xmlChar ** str);
+
+#ifdef SAX2
+/**
+ * nsPush:
+ * @ctxt: an XML parser context
+ * @prefix: the namespace prefix or NULL
+ * @URL: the namespace name
+ *
+ * Pushes a new parser namespace on top of the ns stack
+ *
+ * Returns -1 in case of error, -2 if the namespace should be discarded
+ * and the index in the stack otherwise.
+ */
+static int
+nsPush(xmlParserCtxtPtr ctxt, const xmlChar *prefix, const xmlChar *URL)
+{
+ if (ctxt->options & XML_PARSE_NSCLEAN) {
+ int i;
+ for (i = 0;i < ctxt->nsNr;i += 2) {
+ if (ctxt->nsTab[i] == prefix) {
+ /* in scope */
+ if (ctxt->nsTab[i + 1] == URL)
+ return(-2);
+ /* out of scope keep it */
+ break;
+ }
+ }
+ }
+ if ((ctxt->nsMax == 0) || (ctxt->nsTab == NULL)) {
+ ctxt->nsMax = 10;
+ ctxt->nsNr = 0;
+ ctxt->nsTab = (const xmlChar **)
+ xmlMalloc(ctxt->nsMax * sizeof(xmlChar *));
+ if (ctxt->nsTab == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ ctxt->nsMax = 0;
+ return (-1);
+ }
+ } else if (ctxt->nsNr >= ctxt->nsMax) {
+ ctxt->nsMax *= 2;
+ ctxt->nsTab = (const xmlChar **)
+ xmlRealloc((char *) ctxt->nsTab,
+ ctxt->nsMax * sizeof(ctxt->nsTab[0]));
+ if (ctxt->nsTab == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ ctxt->nsMax /= 2;
+ return (-1);
+ }
+ }
+ ctxt->nsTab[ctxt->nsNr++] = prefix;
+ ctxt->nsTab[ctxt->nsNr++] = URL;
+ return (ctxt->nsNr);
+}
+/**
+ * nsPop:
+ * @ctxt: an XML parser context
+ * @nr: the number to pop
+ *
+ * Pops the top @nr parser prefix/namespace from the ns stack
+ *
+ * Returns the number of namespaces removed
+ */
+static int
+nsPop(xmlParserCtxtPtr ctxt, int nr)
+{
+ int i;
+
+ if (ctxt->nsTab == NULL) return(0);
+ if (ctxt->nsNr < nr) {
+ xmlGenericError(xmlGenericErrorContext, "Pbm popping %d NS\n", nr);
+ nr = ctxt->nsNr;
+ }
+ if (ctxt->nsNr <= 0)
+ return (0);
+
+ for (i = 0;i < nr;i++) {
+ ctxt->nsNr--;
+ ctxt->nsTab[ctxt->nsNr] = NULL;
+ }
+ return(nr);
+}
+#endif
+
+static int
+xmlCtxtGrowAttrs(xmlParserCtxtPtr ctxt, int nr) {
+ const xmlChar **atts;
+ int *attallocs;
+ int maxatts;
+
+ if (ctxt->atts == NULL) {
+ maxatts = 55; /* allow for 10 attrs by default */
+ atts = (const xmlChar **)
+ xmlMalloc(maxatts * sizeof(xmlChar *));
+ if (atts == NULL) goto mem_error;
+ ctxt->atts = atts;
+ attallocs = (int *) xmlMalloc((maxatts / 5) * sizeof(int));
+ if (attallocs == NULL) goto mem_error;
+ ctxt->attallocs = attallocs;
+ ctxt->maxatts = maxatts;
+ } else if (nr + 5 > ctxt->maxatts) {
+ maxatts = (nr + 5) * 2;
+ atts = (const xmlChar **) xmlRealloc((void *) ctxt->atts,
+ maxatts * sizeof(const xmlChar *));
+ if (atts == NULL) goto mem_error;
+ ctxt->atts = atts;
+ attallocs = (int *) xmlRealloc((void *) ctxt->attallocs,
+ (maxatts / 5) * sizeof(int));
+ if (attallocs == NULL) goto mem_error;
+ ctxt->attallocs = attallocs;
+ ctxt->maxatts = maxatts;
+ }
+ return(ctxt->maxatts);
+mem_error:
+ xmlErrMemory(ctxt, NULL);
+ return(-1);
+}
+
+/**
+ * inputPush:
+ * @ctxt: an XML parser context
+ * @value: the parser input
+ *
+ * Pushes a new parser input on top of the input stack
+ *
+ * Returns 0 in case of error, the index in the stack otherwise
+ */
+extern int
+inputPush(xmlParserCtxtPtr ctxt, xmlParserInputPtr value)
+{
+ if (ctxt->inputNr >= ctxt->inputMax) {
+ ctxt->inputMax *= 2;
+ ctxt->inputTab =
+ (xmlParserInputPtr *) xmlRealloc(ctxt->inputTab,
+ ctxt->inputMax *
+ sizeof(ctxt->inputTab[0]));
+ if (ctxt->inputTab == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return (0);
+ }
+ }
+ ctxt->inputTab[ctxt->inputNr] = value;
+ ctxt->input = value;
+ return (ctxt->inputNr++);
+}
+/**
+ * inputPop:
+ * @ctxt: an XML parser context
+ *
+ * Pops the top parser input from the input stack
+ *
+ * Returns the input just removed
+ */
+extern xmlParserInputPtr
+inputPop(xmlParserCtxtPtr ctxt)
+{
+ xmlParserInputPtr ret;
+
+ if (ctxt->inputNr <= 0)
+ return (0);
+ 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;
+ return (ret);
+}
+/**
+ * nodePush:
+ * @ctxt: an XML parser context
+ * @value: the element node
+ *
+ * Pushes a new element node on top of the node stack
+ *
+ * Returns 0 in case of error, the index in the stack otherwise
+ */
+extern int
+nodePush(xmlParserCtxtPtr ctxt, xmlNodePtr value)
+{
+ if (ctxt->nodeNr >= ctxt->nodeMax) {
+ ctxt->nodeMax *= 2;
+ ctxt->nodeTab =
+ (xmlNodePtr *) xmlRealloc(ctxt->nodeTab,
+ ctxt->nodeMax *
+ sizeof(ctxt->nodeTab[0]));
+ if (ctxt->nodeTab == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return (0);
+ }
+ }
+ if (((unsigned int) ctxt->nodeNr) > xmlParserMaxDepth) {
+ xmlFatalErrMsgInt(ctxt, XML_ERR_INTERNAL_ERROR,
+ "Excessive depth in document: change xmlParserMaxDepth = %d\n",
+ xmlParserMaxDepth);
+ ctxt->instate = XML_PARSER_EOF;
+ return(0);
+ }
+ ctxt->nodeTab[ctxt->nodeNr] = value;
+ ctxt->node = value;
+ return (ctxt->nodeNr++);
+}
+/**
+ * nodePop:
+ * @ctxt: an XML parser context
+ *
+ * Pops the top element node from the node stack
+ *
+ * Returns the node just removed
+ */
+extern xmlNodePtr
+nodePop(xmlParserCtxtPtr ctxt)
+{
+ xmlNodePtr ret;
+
+ if (ctxt->nodeNr <= 0)
+ return (0);
+ 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;
+ return (ret);
+}
+/**
+ * nameNsPush:
+ * @ctxt: an XML parser context
+ * @value: the element name
+ * @prefix: the element prefix
+ * @URI: the element namespace name
+ *
+ * Pushes a new element name/prefix/URL on top of the name stack
+ *
+ * Returns -1 in case of error, the index in the stack otherwise
+ */
+static int
+nameNsPush(xmlParserCtxtPtr ctxt, const xmlChar * value,
+ const xmlChar *prefix, const xmlChar *URI, int nsNr)
+{
+ if (ctxt->nameNr >= ctxt->nameMax) {
+ const xmlChar * *tmp;
+ void **tmp2;
+ ctxt->nameMax *= 2;
+ tmp = (const xmlChar * *) xmlRealloc((xmlChar * *)ctxt->nameTab,
+ ctxt->nameMax *
+ sizeof(ctxt->nameTab[0]));
+ if (tmp == NULL) {
+ ctxt->nameMax /= 2;
+ goto mem_error;
+ }
+ ctxt->nameTab = tmp;
+ tmp2 = (void **) xmlRealloc((void * *)ctxt->pushTab,
+ ctxt->nameMax * 3 *
+ sizeof(ctxt->pushTab[0]));
+ if (tmp2 == NULL) {
+ ctxt->nameMax /= 2;
+ goto mem_error;
+ }
+ ctxt->pushTab = tmp2;
+ }
+ ctxt->nameTab[ctxt->nameNr] = value;
+ ctxt->name = value;
+ ctxt->pushTab[ctxt->nameNr * 3] = (void *) prefix;
+ ctxt->pushTab[ctxt->nameNr * 3 + 1] = (void *) URI;
+ ctxt->pushTab[ctxt->nameNr * 3 + 2] = (void *) (long) nsNr;
+ return (ctxt->nameNr++);
+mem_error:
+ xmlErrMemory(ctxt, NULL);
+ return (-1);
+}
+/**
+ * nameNsPop:
+ * @ctxt: an XML parser context
+ *
+ * Pops the top element/prefix/URI name from the name stack
+ *
+ * Returns the name just removed
+ */
+static const xmlChar *
+nameNsPop(xmlParserCtxtPtr ctxt)
+{
+ const xmlChar *ret;
+
+ if (ctxt->nameNr <= 0)
+ return (0);
+ ctxt->nameNr--;
+ if (ctxt->nameNr > 0)
+ ctxt->name = ctxt->nameTab[ctxt->nameNr - 1];
+ else
+ ctxt->name = NULL;
+ ret = ctxt->nameTab[ctxt->nameNr];
+ ctxt->nameTab[ctxt->nameNr] = NULL;
+ return (ret);
+}
+
+/**
+ * namePush:
+ * @ctxt: an XML parser context
+ * @value: the element name
+ *
+ * Pushes a new element name on top of the name stack
+ *
+ * Returns -1 in case of error, the index in the stack otherwise
+ */
+extern int
+namePush(xmlParserCtxtPtr ctxt, const xmlChar * value)
+{
+ if (ctxt->nameNr >= ctxt->nameMax) {
+ const xmlChar * *tmp;
+ ctxt->nameMax *= 2;
+ tmp = (const xmlChar * *) xmlRealloc((xmlChar * *)ctxt->nameTab,
+ ctxt->nameMax *
+ sizeof(ctxt->nameTab[0]));
+ if (tmp == NULL) {
+ ctxt->nameMax /= 2;
+ goto mem_error;
+ }
+ ctxt->nameTab = tmp;
+ }
+ ctxt->nameTab[ctxt->nameNr] = value;
+ ctxt->name = value;
+ return (ctxt->nameNr++);
+mem_error:
+ xmlErrMemory(ctxt, NULL);
+ return (-1);
+}
+/**
+ * namePop:
+ * @ctxt: an XML parser context
+ *
+ * Pops the top element name from the name stack
+ *
+ * Returns the name just removed
+ */
+extern const xmlChar *
+namePop(xmlParserCtxtPtr ctxt)
+{
+ const xmlChar *ret;
+
+ if (ctxt->nameNr <= 0)
+ return (0);
+ ctxt->nameNr--;
+ 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;
+ return (ret);
+}
+
+static int spacePush(xmlParserCtxtPtr ctxt, int val) {
+ if (ctxt->spaceNr >= ctxt->spaceMax) {
+ ctxt->spaceMax *= 2;
+ ctxt->spaceTab = (int *) xmlRealloc(ctxt->spaceTab,
+ ctxt->spaceMax * sizeof(ctxt->spaceTab[0]));
+ if (ctxt->spaceTab == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(0);
+ }
+ }
+ ctxt->spaceTab[ctxt->spaceNr] = val;
+ ctxt->space = &ctxt->spaceTab[ctxt->spaceNr];
+ return(ctxt->spaceNr++);
+}
+
+static int spacePop(xmlParserCtxtPtr ctxt) {
+ int ret;
+ if (ctxt->spaceNr <= 0) return(0);
+ ctxt->spaceNr--;
+ if (ctxt->spaceNr > 0)
+ ctxt->space = &ctxt->spaceTab[ctxt->spaceNr - 1];
+ else
+ ctxt->space = NULL;
+ ret = ctxt->spaceTab[ctxt->spaceNr];
+ ctxt->spaceTab[ctxt->spaceNr] = -1;
+ return(ret);
+}
+
+/*
+ * Macros for accessing the content. Those should be used only by the parser,
+ * and not exported.
+ *
+ * Dirty macros, i.e. one often need to make assumption on the context to
+ * use them
+ *
+ * CUR_PTR return the current pointer to the xmlChar to be parsed.
+ * To be used with extreme caution since operations consuming
+ * characters may move the input buffer to a different location !
+ * CUR returns the current xmlChar value, i.e. a 8 bit value if compiled
+ * This should be used internally by the parser
+ * only to compare to ASCII values otherwise it would break when
+ * running with UTF-8 encoding.
+ * RAW same as CUR but in the input buffer, bypass any token
+ * extraction that may have been done
+ * NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only
+ * to compare on ASCII based substring.
+ * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
+ * strings without newlines within the parser.
+ * NEXT1(l) Skip 1 xmlChar, and must also be used only to skip 1 non-newline ASCII
+ * defined char within the parser.
+ * Clean macros, not dependent of an ASCII context, expect UTF-8 encoding
+ *
+ * NEXT Skip to the next character, this does the proper decoding
+ * in UTF-8 mode. It also pop-up unfinished entities on the fly.
+ * NEXTL(l) Skip the current unicode character of l xmlChars long.
+ * CUR_CHAR(l) returns the current unicode character (int), set l
+ * to the number of xmlChars used for the encoding [0-5].
+ * CUR_SCHAR same but operate on a string instead of the context
+ * COPY_BUF copy the current unicode char to the target buffer, increment
+ * the index
+ * GROW, SHRINK handling of input buffers
+ */
+
+#define RAW (*ctxt->input->cur)
+#define CUR (*ctxt->input->cur)
+#define NXT(val) ctxt->input->cur[(val)]
+#define CUR_PTR ctxt->input->cur
+
+#define CMP4( s, c1, c2, c3, c4 ) \
+ ( ((unsigned char *) s)[ 0 ] == c1 && ((unsigned char *) s)[ 1 ] == c2 && \
+ ((unsigned char *) s)[ 2 ] == c3 && ((unsigned char *) s)[ 3 ] == c4 )
+#define CMP5( s, c1, c2, c3, c4, c5 ) \
+ ( CMP4( s, c1, c2, c3, c4 ) && ((unsigned char *) s)[ 4 ] == c5 )
+#define CMP6( s, c1, c2, c3, c4, c5, c6 ) \
+ ( CMP5( s, c1, c2, c3, c4, c5 ) && ((unsigned char *) s)[ 5 ] == c6 )
+#define CMP7( s, c1, c2, c3, c4, c5, c6, c7 ) \
+ ( CMP6( s, c1, c2, c3, c4, c5, c6 ) && ((unsigned char *) s)[ 6 ] == c7 )
+#define CMP8( s, c1, c2, c3, c4, c5, c6, c7, c8 ) \
+ ( CMP7( s, c1, c2, c3, c4, c5, c6, c7 ) && ((unsigned char *) s)[ 7 ] == c8 )
+#define CMP9( s, c1, c2, c3, c4, c5, c6, c7, c8, c9 ) \
+ ( CMP8( s, c1, c2, c3, c4, c5, c6, c7, c8 ) && \
+ ((unsigned char *) s)[ 8 ] == c9 )
+#define CMP10( s, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 ) \
+ ( CMP9( s, c1, c2, c3, c4, c5, c6, c7, c8, c9 ) && \
+ ((unsigned char *) s)[ 9 ] == c10 )
+
+#define SKIP(val) do { \
+ ctxt->nbChars += (val),ctxt->input->cur += (val),ctxt->input->col+=(val); \
+ if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \
+ if ((*ctxt->input->cur == 0) && \
+ (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) \
+ xmlPopInput(ctxt); \
+ } while (0)
+
+#define SHRINK if ((ctxt->progressive == 0) && \
+ (ctxt->input->cur - ctxt->input->base > 2 * INPUT_CHUNK) && \
+ (ctxt->input->end - ctxt->input->cur < 2 * INPUT_CHUNK)) \
+ xmlSHRINK (ctxt);
+
+static void xmlSHRINK (xmlParserCtxtPtr ctxt) {
+ xmlParserInputShrink(ctxt->input);
+ if ((*ctxt->input->cur == 0) &&
+ (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
+ xmlPopInput(ctxt);
+ }
+
+#define GROW if ((ctxt->progressive == 0) && \
+ (ctxt->input->end - ctxt->input->cur < INPUT_CHUNK)) \
+ xmlGROW (ctxt);
+
+static void xmlGROW (xmlParserCtxtPtr ctxt) {
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if ((*ctxt->input->cur == 0) &&
+ (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
+ xmlPopInput(ctxt);
+}
+
+#define SKIP_BLANKS xmlSkipBlankChars(ctxt)
+
+#define NEXT xmlNextChar(ctxt)
+
+#define NEXT1 { \
+ ctxt->input->col++; \
+ ctxt->input->cur++; \
+ ctxt->nbChars++; \
+ if (*ctxt->input->cur == 0) \
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK); \
+ }
+
+#define NEXTL(l) do { \
+ if (*(ctxt->input->cur) == '\n') { \
+ ctxt->input->line++; ctxt->input->col = 1; \
+ } else ctxt->input->col++; \
+ ctxt->input->cur += l; \
+ if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \
+ } while (0)
+
+#define CUR_CHAR(l) xmlCurrentChar(ctxt, &l)
+#define CUR_SCHAR(s, l) xmlStringCurrentChar(ctxt, s, &l)
+
+#define COPY_BUF(l,b,i,v) \
+ if (l == 1) b[i++] = (xmlChar) v; \
+ else i += xmlCopyCharMultiByte(&b[i],v)
+
+/**
+ * xmlSkipBlankChars:
+ * @ctxt: the XML parser context
+ *
+ * skip all blanks character found at that point in the input streams.
+ * It pops up finished entities in the process if allowable at that point.
+ *
+ * Returns the number of space chars skipped
+ */
+
+int
+xmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
+ int res = 0;
+
+ /*
+ * It's Okay to use CUR/NEXT here since all the blanks are on
+ * the ASCII range.
+ */
+ if ((ctxt->inputNr == 1) && (ctxt->instate != XML_PARSER_DTD)) {
+ const xmlChar *cur;
+ /*
+ * if we are in the document content, go really fast
+ */
+ cur = ctxt->input->cur;
+ while (IS_BLANK_CH(*cur)) {
+ if (*cur == '\n') {
+ ctxt->input->line++; ctxt->input->col = 1;
+ }
+ cur++;
+ res++;
+ if (*cur == 0) {
+ ctxt->input->cur = cur;
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ cur = ctxt->input->cur;
+ }
+ }
+ ctxt->input->cur = cur;
+ } else {
+ int cur;
+ do {
+ cur = CUR;
+ while (IS_BLANK(cur)) { /* CHECKED tstblanks.xml */
+ NEXT;
+ cur = CUR;
+ res++;
+ }
+ while ((cur == 0) && (ctxt->inputNr > 1) &&
+ (ctxt->instate != XML_PARSER_COMMENT)) {
+ xmlPopInput(ctxt);
+ cur = CUR;
+ }
+ /*
+ * Need to handle support of entities branching here
+ */
+ if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt);
+ } while (IS_BLANK(cur)); /* CHECKED tstblanks.xml */
+ }
+ return(res);
+}
+
+/************************************************************************
+ * *
+ * Commodity functions to handle entities *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlPopInput:
+ * @ctxt: an XML parser context
+ *
+ * xmlPopInput: the current input pointed by ctxt->input came to an end
+ * pop it and return the next char.
+ *
+ * Returns the current xmlChar in the parser context
+ */
+xmlChar
+xmlPopInput(xmlParserCtxtPtr ctxt) {
+ if (ctxt->inputNr == 1) return(0); /* End of main Input */
+ if (xmlParserDebugEntities)
+ xmlGenericError(xmlGenericErrorContext,
+ "Popping input %d\n", ctxt->inputNr);
+ xmlFreeInputStream(inputPop(ctxt));
+ if ((*ctxt->input->cur == 0) &&
+ (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
+ return(xmlPopInput(ctxt));
+ return(CUR);
+}
+
+/**
+ * xmlPushInput:
+ * @ctxt: an XML parser context
+ * @input: an XML parser input fragment (entity, XML fragment ...).
+ *
+ * xmlPushInput: switch to a new input stream which is stacked on top
+ * of the previous one(s).
+ */
+void
+xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input) {
+ if (input == NULL) return;
+
+ if (xmlParserDebugEntities) {
+ if ((ctxt->input != NULL) && (ctxt->input->filename))
+ xmlGenericError(xmlGenericErrorContext,
+ "%s(%d): ", ctxt->input->filename,
+ ctxt->input->line);
+ xmlGenericError(xmlGenericErrorContext,
+ "Pushing input %d : %.30s\n", ctxt->inputNr+1, input->cur);
+ }
+ inputPush(ctxt, input);
+ GROW;
+}
+
+/**
+ * xmlParseCharRef:
+ * @ctxt: an XML parser context
+ *
+ * parse Reference declarations
+ *
+ * [66] CharRef ::= '&#' [0-9]+ ';' |
+ * '&#x' [0-9a-fA-F]+ ';'
+ *
+ * [ WFC: Legal Character ]
+ * Characters referred to using character references must match the
+ * production for Char.
+ *
+ * Returns the value parsed (as an int), 0 in case of error
+ */
+int
+xmlParseCharRef(xmlParserCtxtPtr ctxt) {
+ unsigned int val = 0;
+ int count = 0;
+
+ /*
+ * Using RAW/CUR/NEXT is okay since we are working on ASCII range here
+ */
+ if ((RAW == '&') && (NXT(1) == '#') &&
+ (NXT(2) == 'x')) {
+ SKIP(3);
+ GROW;
+ while (RAW != ';') { /* loop blocked by count */
+ if (count++ > 20) {
+ count = 0;
+ GROW;
+ }
+ if ((RAW >= '0') && (RAW <= '9'))
+ val = val * 16 + (CUR - '0');
+ else if ((RAW >= 'a') && (RAW <= 'f') && (count < 20))
+ val = val * 16 + (CUR - 'a') + 10;
+ else if ((RAW >= 'A') && (RAW <= 'F') && (count < 20))
+ val = val * 16 + (CUR - 'A') + 10;
+ else {
+ xmlFatalErr(ctxt, XML_ERR_INVALID_HEX_CHARREF, NULL);
+ val = 0;
+ break;
+ }
+ NEXT;
+ count++;
+ }
+ if (RAW == ';') {
+ /* on purpose to avoid reentrancy problems with NEXT and SKIP */
+ ctxt->input->col++;
+ ctxt->nbChars ++;
+ ctxt->input->cur++;
+ }
+ } else if ((RAW == '&') && (NXT(1) == '#')) {
+ SKIP(2);
+ GROW;
+ while (RAW != ';') { /* loop blocked by count */
+ if (count++ > 20) {
+ count = 0;
+ GROW;
+ }
+ if ((RAW >= '0') && (RAW <= '9'))
+ val = val * 10 + (CUR - '0');
+ else {
+ xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL);
+ val = 0;
+ break;
+ }
+ NEXT;
+ count++;
+ }
+ if (RAW == ';') {
+ /* on purpose to avoid reentrancy problems with NEXT and SKIP */
+ ctxt->input->col++;
+ ctxt->nbChars ++;
+ ctxt->input->cur++;
+ }
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_INVALID_CHARREF, NULL);
+ }
+
+ /*
+ * [ WFC: Legal Character ]
+ * Characters referred to using character references must match the
+ * production for Char.
+ */
+ if (IS_CHAR(val)) {
+ return(val);
+ } else {
+ xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR,
+ "xmlParseCharRef: invalid xmlChar value %d\n",
+ val);
+ }
+ return(0);
+}
+
+/**
+ * xmlParseStringCharRef:
+ * @ctxt: an XML parser context
+ * @str: a pointer to an index in the string
+ *
+ * parse Reference declarations, variant parsing from a string rather
+ * than an an input flow.
+ *
+ * [66] CharRef ::= '&#' [0-9]+ ';' |
+ * '&#x' [0-9a-fA-F]+ ';'
+ *
+ * [ WFC: Legal Character ]
+ * Characters referred to using character references must match the
+ * production for Char.
+ *
+ * Returns the value parsed (as an int), 0 in case of error, str will be
+ * updated to the current value of the index
+ */
+static int
+xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) {
+ const xmlChar *ptr;
+ xmlChar cur;
+ int val = 0;
+
+ if ((str == NULL) || (*str == NULL)) return(0);
+ ptr = *str;
+ cur = *ptr;
+ if ((cur == '&') && (ptr[1] == '#') && (ptr[2] == 'x')) {
+ ptr += 3;
+ cur = *ptr;
+ while (cur != ';') { /* Non input consuming loop */
+ if ((cur >= '0') && (cur <= '9'))
+ val = val * 16 + (cur - '0');
+ else if ((cur >= 'a') && (cur <= 'f'))
+ val = val * 16 + (cur - 'a') + 10;
+ else if ((cur >= 'A') && (cur <= 'F'))
+ val = val * 16 + (cur - 'A') + 10;
+ else {
+ xmlFatalErr(ctxt, XML_ERR_INVALID_HEX_CHARREF, NULL);
+ val = 0;
+ break;
+ }
+ ptr++;
+ cur = *ptr;
+ }
+ if (cur == ';')
+ ptr++;
+ } else if ((cur == '&') && (ptr[1] == '#')){
+ ptr += 2;
+ cur = *ptr;
+ while (cur != ';') { /* Non input consuming loops */
+ if ((cur >= '0') && (cur <= '9'))
+ val = val * 10 + (cur - '0');
+ else {
+ xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL);
+ val = 0;
+ break;
+ }
+ ptr++;
+ cur = *ptr;
+ }
+ if (cur == ';')
+ ptr++;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_INVALID_CHARREF, NULL);
+ return(0);
+ }
+ *str = ptr;
+
+ /*
+ * [ WFC: Legal Character ]
+ * Characters referred to using character references must match the
+ * production for Char.
+ */
+ if (IS_CHAR(val)) {
+ return(val);
+ } else {
+ xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR,
+ "xmlParseStringCharRef: invalid xmlChar value %d\n",
+ val);
+ }
+ return(0);
+}
+
+/**
+ * xmlNewBlanksWrapperInputStream:
+ * @ctxt: an XML parser context
+ * @entity: an Entity pointer
+ *
+ * Create a new input stream for wrapping
+ * blanks around a PEReference
+ *
+ * Returns the new input stream or NULL
+ */
+
+static void deallocblankswrapper (xmlChar *str) {xmlFree(str);}
+
+static xmlParserInputPtr
+xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
+ xmlParserInputPtr input;
+ xmlChar *buffer;
+ size_t length;
+ if (entity == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "xmlNewBlanksWrapperInputStream entity\n");
+ return(NULL);
+ }
+ if (xmlParserDebugEntities)
+ xmlGenericError(xmlGenericErrorContext,
+ "new blanks wrapper for entity: %s\n", entity->name);
+ input = xmlNewInputStream(ctxt);
+ if (input == NULL) {
+ return(NULL);
+ }
+ length = xmlStrlen(entity->name) + 5;
+ buffer = xmlMallocAtomic(length);
+ if (buffer == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ buffer [0] = ' ';
+ buffer [1] = '%';
+ buffer [length-3] = ';';
+ buffer [length-2] = ' ';
+ buffer [length-1] = 0;
+ memcpy(buffer + 2, entity->name, length - 5);
+ input->free = deallocblankswrapper;
+ input->base = buffer;
+ input->cur = buffer;
+ input->length = length;
+ input->end = &buffer[length];
+ return(input);
+}
+
+/**
+ * xmlParserHandlePEReference:
+ * @ctxt: the parser context
+ *
+ * [69] PEReference ::= '%' Name ';'
+ *
+ * [ WFC: No Recursion ]
+ * A parsed entity must not contain a recursive
+ * reference to itself, either directly or indirectly.
+ *
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an internal DTD
+ * subset which contains no parameter entity references, or a document
+ * with "standalone='yes'", ... ... The declaration of a parameter
+ * entity must precede any reference to it...
+ *
+ * [ VC: Entity Declared ]
+ * In a document with an external subset or external parameter entities
+ * with "standalone='no'", ... ... The declaration of a parameter entity
+ * must precede any reference to it...
+ *
+ * [ WFC: In DTD ]
+ * Parameter-entity references may only appear in the DTD.
+ * NOTE: misleading but this is handled.
+ *
+ * A PEReference may have been detected in the current input stream
+ * the handling is done accordingly to
+ * http://www.w3.org/TR/REC-xml#entproc
+ * i.e.
+ * - Included in literal in entity values
+ * - Included as Parameter Entity reference within DTDs
+ */
+void
+xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ xmlEntityPtr entity = NULL;
+ xmlParserInputPtr input;
+
+ if (RAW != '%') return;
+ switch(ctxt->instate) {
+ case XML_PARSER_CDATA_SECTION:
+ return;
+ case XML_PARSER_COMMENT:
+ return;
+ case XML_PARSER_START_TAG:
+ return;
+ case XML_PARSER_END_TAG:
+ return;
+ case XML_PARSER_EOF:
+ xmlFatalErr(ctxt, XML_ERR_PEREF_AT_EOF, NULL);
+ return;
+ case XML_PARSER_PROLOG:
+ case XML_PARSER_START:
+ case XML_PARSER_MISC:
+ xmlFatalErr(ctxt, XML_ERR_PEREF_IN_PROLOG, NULL);
+ return;
+ case XML_PARSER_ENTITY_DECL:
+ case XML_PARSER_CONTENT:
+ case XML_PARSER_ATTRIBUTE_VALUE:
+ case XML_PARSER_PI:
+ case XML_PARSER_SYSTEM_LITERAL:
+ case XML_PARSER_PUBLIC_LITERAL:
+ /* we just ignore it there */
+ return;
+ case XML_PARSER_EPILOG:
+ xmlFatalErr(ctxt, XML_ERR_PEREF_IN_EPILOG, NULL);
+ return;
+ case XML_PARSER_ENTITY_VALUE:
+ /*
+ * NOTE: in the case of entity values, we don't do the
+ * substitution here since we need the literal
+ * entity value to be able to save the internal
+ * subset of the document.
+ * This will be handled by xmlStringDecodeEntities
+ */
+ return;
+ case XML_PARSER_DTD:
+ /*
+ * [WFC: Well-Formedness Constraint: PEs in Internal Subset]
+ * In the internal DTD subset, parameter-entity references
+ * can occur only where markup declarations can occur, not
+ * within markup declarations.
+ * In that case this is handled in xmlParseMarkupDecl
+ */
+ if ((ctxt->external == 0) && (ctxt->inputNr == 1))
+ return;
+ if (IS_BLANK_CH(NXT(1)) || NXT(1) == 0)
+ return;
+ break;
+ case XML_PARSER_IGNORE:
+ return;
+ }
+
+ NEXT;
+ name = xmlParseName(ctxt);
+ if (xmlParserDebugEntities)
+ xmlGenericError(xmlGenericErrorContext,
+ "PEReference: %s\n", name);
+ if (name == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_PEREF_NO_NAME, NULL);
+ } else {
+ if (RAW == ';') {
+ NEXT;
+ if ((ctxt->sax != NULL) && (ctxt->sax->getParameterEntity != NULL))
+ entity = ctxt->sax->getParameterEntity(ctxt->userData, name);
+ if (entity == NULL) {
+
+ /*
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an
+ * internal DTD subset which contains no parameter entity
+ * references, or a document with "standalone='yes'", ...
+ * ... The declaration of a parameter entity must precede
+ * any reference to it...
+ */
+ if ((ctxt->standalone == 1) ||
+ ((ctxt->hasExternalSubset == 0) &&
+ (ctxt->hasPErefs == 0))) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
+ "PEReference: %%%s; not found\n", name);
+ } else {
+ /*
+ * [ VC: Entity Declared ]
+ * In a document with an external subset or external
+ * parameter entities with "standalone='no'", ...
+ * ... The declaration of a parameter entity must precede
+ * any reference to it...
+ */
+ if ((ctxt->validate) && (ctxt->vctxt.error != NULL)) {
+ xmlValidityError(ctxt, XML_WAR_UNDECLARED_ENTITY,
+ "PEReference: %%%s; not found\n",
+ name);
+ } else
+ xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
+ "PEReference: %%%s; not found\n",
+ name, NULL);
+ ctxt->valid = 0;
+ }
+ } else if (ctxt->input->free != deallocblankswrapper) {
+ input = xmlNewBlanksWrapperInputStream(ctxt, entity);
+ xmlPushInput(ctxt, input);
+ } else {
+ if ((entity->etype == XML_INTERNAL_PARAMETER_ENTITY) ||
+ (entity->etype == XML_EXTERNAL_PARAMETER_ENTITY)) {
+ xmlChar start[4];
+ xmlCharEncoding enc;
+
+ /*
+ * handle the extra spaces added before and after
+ * c.f. http://www.w3.org/TR/REC-xml#as-PE
+ * this is done independently.
+ */
+ input = xmlNewEntityInputStream(ctxt, entity);
+ xmlPushInput(ctxt, input);
+
+ /*
+ * Get the 4 first bytes and decode the charset
+ * if enc != XML_CHAR_ENCODING_NONE
+ * plug some encoding conversion routines.
+ */
+ GROW
+ if (entity->length >= 4) {
+ start[0] = RAW;
+ start[1] = NXT(1);
+ start[2] = NXT(2);
+ start[3] = NXT(3);
+ enc = xmlDetectCharEncoding(start, 4);
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+ }
+
+ if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
+ (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l' )) &&
+ (IS_BLANK_CH(NXT(5)))) {
+ xmlParseTextDecl(ctxt);
+ }
+ } else {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER,
+ "PEReference: %s is not a parameter entity\n",
+ name);
+ }
+ }
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_PEREF_SEMICOL_MISSING, NULL);
+ }
+ }
+}
+
+/*
+ * Macro used to grow the current buffer.
+ */
+#define growBuffer(buffer) { \
+ xmlChar *tmp; \
+ buffer##_size *= 2; \
+ tmp = (xmlChar *) \
+ xmlRealloc(buffer, buffer##_size * sizeof(xmlChar)); \
+ if (tmp == NULL) goto mem_error; \
+ buffer = tmp; \
+}
+
+/**
+ * xmlStringLenDecodeEntities:
+ * @ctxt: the parser context
+ * @str: the input string
+ * @len: the string length
+ * @what: combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF
+ * @end: an end marker xmlChar, 0 if none
+ * @end2: an end marker xmlChar, 0 if none
+ * @end3: an end marker xmlChar, 0 if none
+ *
+ * Takes a entity string content and process to do the adequate substitutions.
+ *
+ * [67] Reference ::= EntityRef | CharRef
+ *
+ * [69] PEReference ::= '%' Name ';'
+ *
+ * Returns A newly allocated string with the substitution done. The caller
+ * must deallocate it !
+ */
+xmlChar *
+xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
+ int what, xmlChar end, xmlChar end2, xmlChar end3) {
+ xmlChar *buffer = NULL;
+ int buffer_size = 0;
+
+ xmlChar *current = NULL;
+ const xmlChar *last;
+ xmlEntityPtr ent;
+ int c,l;
+ int nbchars = 0;
+
+ if ((str == NULL) || (len < 0))
+ return(NULL);
+ last = str + len;
+
+ if (ctxt->depth > 40) {
+ xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
+ return(NULL);
+ }
+
+ /*
+ * allocate a translation buffer.
+ */
+ buffer_size = XML_PARSER_BIG_BUFFER_SIZE;
+ buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar));
+ if (buffer == NULL) goto mem_error;
+
+ /*
+ * OK loop until we reach one of the ending char or a size limit.
+ * we are operating on already parsed values.
+ */
+ if (str < last)
+ c = CUR_SCHAR(str, l);
+ else
+ c = 0;
+ while ((c != 0) && (c != end) && /* non input consuming loop */
+ (c != end2) && (c != end3)) {
+
+ if (c == 0) break;
+ if ((c == '&') && (str[1] == '#')) {
+ int val = xmlParseStringCharRef(ctxt, &str);
+ if (val != 0) {
+ COPY_BUF(0,buffer,nbchars,val);
+ }
+ } else if ((c == '&') && (what & XML_SUBSTITUTE_REF)) {
+ if (xmlParserDebugEntities)
+ xmlGenericError(xmlGenericErrorContext,
+ "String decoding Entity Reference: %.30s\n",
+ str);
+ ent = xmlParseStringEntityRef(ctxt, &str);
+ if ((ent != NULL) &&
+ (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
+ if (ent->content != NULL) {
+ COPY_BUF(0,buffer,nbchars,ent->content[0]);
+ } else {
+ xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
+ "predefined entity has no content\n");
+ }
+ } else if ((ent != NULL) && (ent->content != NULL)) {
+ xmlChar *rep;
+
+ ctxt->depth++;
+ rep = xmlStringDecodeEntities(ctxt, ent->content, what,
+ 0, 0, 0);
+ ctxt->depth--;
+ if (rep != NULL) {
+ current = rep;
+ while (*current != 0) { /* non input consuming loop */
+ buffer[nbchars++] = *current++;
+ if (nbchars >
+ buffer_size - XML_PARSER_BUFFER_SIZE) {
+ growBuffer(buffer);
+ }
+ }
+ xmlFree(rep);
+ }
+ } else if (ent != NULL) {
+ int i = xmlStrlen(ent->name);
+ const xmlChar *cur = ent->name;
+
+ buffer[nbchars++] = '&';
+ if (nbchars > buffer_size - i - XML_PARSER_BUFFER_SIZE) {
+ growBuffer(buffer);
+ }
+ for (;i > 0;i--)
+ buffer[nbchars++] = *cur++;
+ buffer[nbchars++] = ';';
+ }
+ } else if (c == '%' && (what & XML_SUBSTITUTE_PEREF)) {
+ if (xmlParserDebugEntities)
+ xmlGenericError(xmlGenericErrorContext,
+ "String decoding PE Reference: %.30s\n", str);
+ ent = xmlParseStringPEReference(ctxt, &str);
+ if (ent != NULL) {
+ xmlChar *rep;
+
+ ctxt->depth++;
+ rep = xmlStringDecodeEntities(ctxt, ent->content, what,
+ 0, 0, 0);
+ ctxt->depth--;
+ if (rep != NULL) {
+ current = rep;
+ while (*current != 0) { /* non input consuming loop */
+ buffer[nbchars++] = *current++;
+ if (nbchars >
+ buffer_size - XML_PARSER_BUFFER_SIZE) {
+ growBuffer(buffer);
+ }
+ }
+ xmlFree(rep);
+ }
+ }
+ } else {
+ COPY_BUF(l,buffer,nbchars,c);
+ str += l;
+ if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) {
+ growBuffer(buffer);
+ }
+ }
+ if (str < last)
+ c = CUR_SCHAR(str, l);
+ else
+ c = 0;
+ }
+ buffer[nbchars++] = 0;
+ return(buffer);
+
+mem_error:
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+}
+
+/**
+ * xmlStringDecodeEntities:
+ * @ctxt: the parser context
+ * @str: the input string
+ * @what: combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF
+ * @end: an end marker xmlChar, 0 if none
+ * @end2: an end marker xmlChar, 0 if none
+ * @end3: an end marker xmlChar, 0 if none
+ *
+ * Takes a entity string content and process to do the adequate substitutions.
+ *
+ * [67] Reference ::= EntityRef | CharRef
+ *
+ * [69] PEReference ::= '%' Name ';'
+ *
+ * Returns A newly allocated string with the substitution done. The caller
+ * must deallocate it !
+ */
+xmlChar *
+xmlStringDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int what,
+ xmlChar end, xmlChar end2, xmlChar end3) {
+ return(xmlStringLenDecodeEntities(ctxt, str, xmlStrlen(str), what,
+ end, end2, end3));
+}
+
+/************************************************************************
+ * *
+ * Commodity functions, cleanup needed ? *
+ * *
+ ************************************************************************/
+
+/**
+ * areBlanks:
+ * @ctxt: an XML parser context
+ * @str: a xmlChar *
+ * @len: the size of @str
+ * @blank_chars: we know the chars are blanks
+ *
+ * Is this a sequence of blank chars that one can ignore ?
+ *
+ * Returns 1 if ignorable 0 otherwise.
+ */
+
+static int areBlanks(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
+ int blank_chars) {
+ int i, ret;
+ xmlNodePtr lastChild;
+
+ /*
+ * Don't spend time trying to differentiate them, the same callback is
+ * used !
+ */
+ if (ctxt->sax->ignorableWhitespace == ctxt->sax->characters)
+ return(0);
+
+ /*
+ * Check for xml:space value.
+ */
+ if (*(ctxt->space) == 1)
+ return(0);
+
+ /*
+ * Check that the string is made of blanks
+ */
+ if (blank_chars == 0) {
+ for (i = 0;i < len;i++)
+ if (!(IS_BLANK_CH(str[i]))) return(0);
+ }
+
+ /*
+ * Look if the element is mixed content in the DTD if available
+ */
+ if (ctxt->node == NULL) return(0);
+ if (ctxt->myDoc != NULL) {
+ ret = xmlIsMixedElement(ctxt->myDoc, ctxt->node->name);
+ if (ret == 0) return(1);
+ if (ret == 1) return(0);
+ }
+
+ /*
+ * Otherwise, heuristic :-\
+ */
+ if (RAW != '<') return(0);
+ if ((ctxt->node->children == NULL) &&
+ (RAW == '<') && (NXT(1) == '/')) return(0);
+
+ lastChild = xmlGetLastChild(ctxt->node);
+ if (lastChild == NULL) {
+ if ((ctxt->node->type != XML_ELEMENT_NODE) &&
+ (ctxt->node->content != NULL)) return(0);
+ } else if (xmlNodeIsText(lastChild))
+ return(0);
+ else if ((ctxt->node->children != NULL) &&
+ (xmlNodeIsText(ctxt->node->children)))
+ return(0);
+ return(1);
+}
+
+/************************************************************************
+ * *
+ * Extra stuff for namespace support *
+ * Relates to http://www.w3.org/TR/WD-xml-names *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSplitQName:
+ * @ctxt: an XML parser context
+ * @name: an XML parser context
+ * @prefix: a xmlChar **
+ *
+ * parse an UTF8 encoded XML qualified name string
+ *
+ * [NS 5] QName ::= (Prefix ':')? LocalPart
+ *
+ * [NS 6] Prefix ::= NCName
+ *
+ * [NS 7] LocalPart ::= NCName
+ *
+ * Returns the local part, and prefix is updated
+ * to get the Prefix if any.
+ */
+
+xmlChar *
+xmlSplitQName(xmlParserCtxtPtr ctxt, const xmlChar *name, xmlChar **prefix) {
+ xmlChar buf[XML_MAX_NAMELEN + 5];
+ xmlChar *buffer = NULL;
+ int len = 0;
+ int max = XML_MAX_NAMELEN;
+ xmlChar *ret = NULL;
+ const xmlChar *cur = name;
+ int c;
+
+ *prefix = NULL;
+
+ if (cur == NULL) return(NULL);
+
+#ifndef XML_XML_NAMESPACE
+ /* xml: prefix is not really a namespace */
+ if ((cur[0] == 'x') && (cur[1] == 'm') &&
+ (cur[2] == 'l') && (cur[3] == ':'))
+ return(xmlStrdup(name));
+#endif
+
+ /* nasty but well=formed */
+ if (cur[0] == ':')
+ return(xmlStrdup(name));
+
+ c = *cur++;
+ while ((c != 0) && (c != ':') && (len < max)) { /* tested bigname.xml */
+ buf[len++] = c;
+ c = *cur++;
+ }
+ if (len >= max) {
+ /*
+ * Okay someone managed to make a huge name, so he's ready to pay
+ * for the processing speed.
+ */
+ max = len * 2;
+
+ buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ memcpy(buffer, buf, len);
+ while ((c != 0) && (c != ':')) { /* tested bigname.xml */
+ if (len + 10 > max) {
+ max *= 2;
+ buffer = (xmlChar *) xmlRealloc(buffer,
+ max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ }
+ buffer[len++] = c;
+ c = *cur++;
+ }
+ buffer[len] = 0;
+ }
+
+ /* nasty but well=formed
+ if ((c == ':') && (*cur == 0)) {
+ return(xmlStrdup(name));
+ } */
+
+ if (buffer == NULL)
+ ret = xmlStrndup(buf, len);
+ else {
+ ret = buffer;
+ buffer = NULL;
+ max = XML_MAX_NAMELEN;
+ }
+
+
+ if (c == ':') {
+ c = *cur;
+ *prefix = ret;
+ if (c == 0) {
+ return(xmlStrndup(BAD_CAST "", 0));
+ }
+ len = 0;
+
+ /*
+ * Check that the first character is proper to start
+ * a new name
+ */
+ if (!(((c >= 0x61) && (c <= 0x7A)) ||
+ ((c >= 0x41) && (c <= 0x5A)) ||
+ (c == '_') || (c == ':'))) {
+ int l;
+ int first = CUR_SCHAR(cur, l);
+
+ if (!IS_LETTER(first) && (first != '_')) {
+ xmlFatalErrMsgStr(ctxt, XML_NS_ERR_QNAME,
+ "Name %s is not XML Namespace compliant\n",
+ name);
+ }
+ }
+ cur++;
+
+ while ((c != 0) && (len < max)) { /* tested bigname2.xml */
+ buf[len++] = c;
+ c = *cur++;
+ }
+ if (len >= max) {
+ /*
+ * Okay someone managed to make a huge name, so he's ready to pay
+ * for the processing speed.
+ */
+ max = len * 2;
+
+ buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ memcpy(buffer, buf, len);
+ while (c != 0) { /* tested bigname2.xml */
+ if (len + 10 > max) {
+ max *= 2;
+ buffer = (xmlChar *) xmlRealloc(buffer,
+ max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ }
+ buffer[len++] = c;
+ c = *cur++;
+ }
+ buffer[len] = 0;
+ }
+
+ if (buffer == NULL)
+ ret = xmlStrndup(buf, len);
+ else {
+ ret = buffer;
+ }
+ }
+
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * The parser itself *
+ * Relates to http://www.w3.org/TR/REC-xml *
+ * *
+ ************************************************************************/
+
+static const xmlChar * xmlParseNameComplex(xmlParserCtxtPtr ctxt);
+static xmlChar * xmlParseAttValueInternal(xmlParserCtxtPtr ctxt,
+ int *len, int *alloc, int normalize);
+
+/**
+ * xmlParseName:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML name.
+ *
+ * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
+ * CombiningChar | Extender
+ *
+ * [5] Name ::= (Letter | '_' | ':') (NameChar)*
+ *
+ * [6] Names ::= Name (S Name)*
+ *
+ * Returns the Name parsed or NULL
+ */
+
+const xmlChar *
+xmlParseName(xmlParserCtxtPtr ctxt) {
+ const xmlChar *in;
+ const xmlChar *ret;
+ int count = 0;
+
+ GROW;
+
+ /*
+ * Accelerator for simple ASCII names
+ */
+ in = ctxt->input->cur;
+ if (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ (*in == '_') || (*in == ':')) {
+ in++;
+ while (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ ((*in >= 0x30) && (*in <= 0x39)) ||
+ (*in == '_') || (*in == '-') ||
+ (*in == ':') || (*in == '.'))
+ in++;
+ if ((*in > 0) && (*in < 0x80)) {
+ count = in - ctxt->input->cur;
+ ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count);
+ ctxt->input->cur = in;
+ ctxt->nbChars += count;
+ ctxt->input->col += count;
+ if (ret == NULL)
+ xmlErrMemory(ctxt, NULL);
+ return(ret);
+ }
+ }
+ return(xmlParseNameComplex(ctxt));
+}
+
+/**
+ * xmlParseNameAndCompare:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML name and compares for match
+ * (specialized for endtag parsing)
+ *
+ * Returns NULL for an illegal name, (xmlChar*) 1 for success
+ * and the name for mismatch
+ */
+
+static const xmlChar *
+xmlParseNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *other) {
+ register const xmlChar *cmp = other;
+ register const xmlChar *in;
+ const xmlChar *ret;
+
+ GROW;
+
+ in = ctxt->input->cur;
+ while (*in != 0 && *in == *cmp) {
+ ++in;
+ ++cmp;
+ }
+ if (*cmp == 0 && (*in == '>' || IS_BLANK_CH (*in))) {
+ /* success */
+ ctxt->input->cur = in;
+ return (const xmlChar*) 1;
+ }
+ /* failure (or end of input buffer), check with full function */
+ ret = xmlParseName (ctxt);
+ /* strings coming from the dictionnary direct compare possible */
+ if (ret == other) {
+ return (const xmlChar*) 1;
+ }
+ return ret;
+}
+
+static const xmlChar *
+xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
+ int len = 0, l;
+ int c;
+ int count = 0;
+
+ /*
+ * Handler for more complex cases
+ */
+ GROW;
+ c = CUR_CHAR(l);
+ if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
+ (!IS_LETTER(c) && (c != '_') &&
+ (c != ':'))) {
+ return(NULL);
+ }
+
+ while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
+ ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
+ (c == '.') || (c == '-') ||
+ (c == '_') || (c == ':') ||
+ (IS_COMBINING(c)) ||
+ (IS_EXTENDER(c)))) {
+ if (count++ > 100) {
+ count = 0;
+ GROW;
+ }
+ len += l;
+ NEXTL(l);
+ c = CUR_CHAR(l);
+ }
+ return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len));
+}
+
+/**
+ * xmlParseStringName:
+ * @ctxt: an XML parser context
+ * @str: a pointer to the string pointer (IN/OUT)
+ *
+ * parse an XML name.
+ *
+ * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
+ * CombiningChar | Extender
+ *
+ * [5] Name ::= (Letter | '_' | ':') (NameChar)*
+ *
+ * [6] Names ::= Name (S Name)*
+ *
+ * Returns the Name parsed or NULL. The @str pointer
+ * is updated to the current location in the string.
+ */
+
+static xmlChar *
+xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) {
+ xmlChar buf[XML_MAX_NAMELEN + 5];
+ const xmlChar *cur = *str;
+ int len = 0, l;
+ int c;
+
+ c = CUR_SCHAR(cur, l);
+ if (!IS_LETTER(c) && (c != '_') &&
+ (c != ':')) {
+ return(NULL);
+ }
+
+ while ((IS_LETTER(c)) || (IS_DIGIT(c)) || /* test bigentname.xml */
+ (c == '.') || (c == '-') ||
+ (c == '_') || (c == ':') ||
+ (IS_COMBINING(c)) ||
+ (IS_EXTENDER(c))) {
+ COPY_BUF(l,buf,len,c);
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ if (len >= XML_MAX_NAMELEN) { /* test bigentname.xml */
+ /*
+ * Okay someone managed to make a huge name, so he's ready to pay
+ * for the processing speed.
+ */
+ xmlChar *buffer;
+ int max = len * 2;
+
+ buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ memcpy(buffer, buf, len);
+ while ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
+ /* test bigentname.xml */
+ (c == '.') || (c == '-') ||
+ (c == '_') || (c == ':') ||
+ (IS_COMBINING(c)) ||
+ (IS_EXTENDER(c))) {
+ if (len + 10 > max) {
+ max *= 2;
+ buffer = (xmlChar *) xmlRealloc(buffer,
+ max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ }
+ COPY_BUF(l,buffer,len,c);
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ buffer[len] = 0;
+ *str = cur;
+ return(buffer);
+ }
+ }
+ *str = cur;
+ return(xmlStrndup(buf, len));
+}
+
+/**
+ * xmlParseNmtoken:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML Nmtoken.
+ *
+ * [7] Nmtoken ::= (NameChar)+
+ *
+ * [8] Nmtokens ::= Nmtoken (S Nmtoken)*
+ *
+ * Returns the Nmtoken parsed or NULL
+ */
+
+xmlChar *
+xmlParseNmtoken(xmlParserCtxtPtr ctxt) {
+ xmlChar buf[XML_MAX_NAMELEN + 5];
+ int len = 0, l;
+ int c;
+ int count = 0;
+
+ GROW;
+ c = CUR_CHAR(l);
+
+ while ((IS_LETTER(c)) || (IS_DIGIT(c)) || /* test bigtoken.xml */
+ (c == '.') || (c == '-') ||
+ (c == '_') || (c == ':') ||
+ (IS_COMBINING(c)) ||
+ (IS_EXTENDER(c))) {
+ if (count++ > 100) {
+ count = 0;
+ GROW;
+ }
+ COPY_BUF(l,buf,len,c);
+ NEXTL(l);
+ c = CUR_CHAR(l);
+ if (len >= XML_MAX_NAMELEN) {
+ /*
+ * Okay someone managed to make a huge token, so he's ready to pay
+ * for the processing speed.
+ */
+ xmlChar *buffer;
+ int max = len * 2;
+
+ buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ memcpy(buffer, buf, len);
+ while ((IS_LETTER(c)) || (IS_DIGIT(c)) || /* test bigtoken.xml */
+ (c == '.') || (c == '-') ||
+ (c == '_') || (c == ':') ||
+ (IS_COMBINING(c)) ||
+ (IS_EXTENDER(c))) {
+ if (count++ > 100) {
+ count = 0;
+ GROW;
+ }
+ if (len + 10 > max) {
+ max *= 2;
+ buffer = (xmlChar *) xmlRealloc(buffer,
+ max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ }
+ COPY_BUF(l,buffer,len,c);
+ NEXTL(l);
+ c = CUR_CHAR(l);
+ }
+ buffer[len] = 0;
+ return(buffer);
+ }
+ }
+ if (len == 0)
+ return(NULL);
+ return(xmlStrndup(buf, len));
+}
+
+/**
+ * xmlParseEntityValue:
+ * @ctxt: an XML parser context
+ * @orig: if non-NULL store a copy of the original entity value
+ *
+ * parse a value for ENTITY declarations
+ *
+ * [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' |
+ * "'" ([^%&'] | PEReference | Reference)* "'"
+ *
+ * Returns the EntityValue parsed with reference substituted or NULL
+ */
+
+xmlChar *
+xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) {
+ xmlChar *buf = NULL;
+ int len = 0;
+ int size = XML_PARSER_BUFFER_SIZE;
+ int c, l;
+ xmlChar stop;
+ xmlChar *ret = NULL;
+ const xmlChar *cur = NULL;
+ xmlParserInputPtr input;
+
+ if (RAW == '"') stop = '"';
+ else if (RAW == '\'') stop = '\'';
+ else {
+ xmlFatalErr(ctxt, XML_ERR_ENTITY_NOT_STARTED, NULL);
+ return(NULL);
+ }
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+
+ /*
+ * The content of the entity definition is copied in a buffer.
+ */
+
+ ctxt->instate = XML_PARSER_ENTITY_VALUE;
+ input = ctxt->input;
+ GROW;
+ NEXT;
+ c = CUR_CHAR(l);
+ /*
+ * NOTE: 4.4.5 Included in Literal
+ * When a parameter entity reference appears in a literal entity
+ * value, ... a single or double quote character in the replacement
+ * text is always treated as a normal data character and will not
+ * terminate the literal.
+ * In practice it means we stop the loop only when back at parsing
+ * the initial entity and the quote is found
+ */
+ while ((IS_CHAR(c)) && ((c != stop) || /* checked */
+ (ctxt->input != input))) {
+ if (len + 5 >= size) {
+ size *= 2;
+ buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ }
+ COPY_BUF(l,buf,len,c);
+ NEXTL(l);
+ /*
+ * Pop-up of finished entities.
+ */
+ while ((RAW == 0) && (ctxt->inputNr > 1)) /* non input consuming */
+ xmlPopInput(ctxt);
+
+ GROW;
+ c = CUR_CHAR(l);
+ if (c == 0) {
+ GROW;
+ c = CUR_CHAR(l);
+ }
+ }
+ buf[len] = 0;
+
+ /*
+ * Raise problem w.r.t. '&' and '%' being used in non-entities
+ * reference constructs. Note Charref will be handled in
+ * xmlStringDecodeEntities()
+ */
+ cur = buf;
+ while (*cur != 0) { /* non input consuming */
+ if ((*cur == '%') || ((*cur == '&') && (cur[1] != '#'))) {
+ xmlChar *name;
+ xmlChar tmp = *cur;
+
+ cur++;
+ name = xmlParseStringName(ctxt, &cur);
+ if ((name == NULL) || (*cur != ';')) {
+ xmlFatalErrMsgInt(ctxt, XML_ERR_ENTITY_CHAR_ERROR,
+ "EntityValue: '%c' forbidden except for entities references\n",
+ tmp);
+ }
+ if ((tmp == '%') && (ctxt->inSubset == 1) &&
+ (ctxt->inputNr == 1)) {
+ xmlFatalErr(ctxt, XML_ERR_ENTITY_PE_INTERNAL, NULL);
+ }
+ if (name != NULL)
+ xmlFree(name);
+ if (*cur == 0)
+ break;
+ }
+ cur++;
+ }
+
+ /*
+ * Then PEReference entities are substituted.
+ */
+ if (c != stop) {
+ xmlFatalErr(ctxt, XML_ERR_ENTITY_NOT_FINISHED, NULL);
+ xmlFree(buf);
+ } else {
+ NEXT;
+ /*
+ * NOTE: 4.4.7 Bypassed
+ * When a general entity reference appears in the EntityValue in
+ * an entity declaration, it is bypassed and left as is.
+ * so XML_SUBSTITUTE_REF is not set here.
+ */
+ ret = xmlStringDecodeEntities(ctxt, buf, XML_SUBSTITUTE_PEREF,
+ 0, 0, 0);
+ if (orig != NULL)
+ *orig = buf;
+ else
+ xmlFree(buf);
+ }
+
+ return(ret);
+}
+
+/**
+ * xmlParseAttValueComplex:
+ * @ctxt: an XML parser context
+ * @len: the resulting attribute len
+ * @normalize: wether to apply the inner normalization
+ *
+ * parse a value for an attribute, this is the fallback function
+ * of xmlParseAttValue() when the attribute parsing requires handling
+ * of non-ASCII characters, or normalization compaction.
+ *
+ * Returns the AttValue parsed or NULL. The value has to be freed by the caller.
+ */
+static xmlChar *
+xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
+ xmlChar limit = 0;
+ xmlChar *buf = NULL;
+ int len = 0;
+ int buf_size = 0;
+ int c, l, in_space = 0;
+ xmlChar *current = NULL;
+ xmlEntityPtr ent;
+
+ if (NXT(0) == '"') {
+ ctxt->instate = XML_PARSER_ATTRIBUTE_VALUE;
+ limit = '"';
+ NEXT;
+ } else if (NXT(0) == '\'') {
+ limit = '\'';
+ ctxt->instate = XML_PARSER_ATTRIBUTE_VALUE;
+ NEXT;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_ATTRIBUTE_NOT_STARTED, NULL);
+ return(NULL);
+ }
+
+ /*
+ * allocate a translation buffer.
+ */
+ buf_size = XML_PARSER_BUFFER_SIZE;
+ buf = (xmlChar *) xmlMallocAtomic(buf_size * sizeof(xmlChar));
+ if (buf == NULL) goto mem_error;
+
+ /*
+ * OK loop until we reach one of the ending char or a size limit.
+ */
+ c = CUR_CHAR(l);
+ while ((NXT(0) != limit) && /* checked */
+ (c != '<')) {
+ if (c == 0) break;
+ if (c == '&') {
+ in_space = 0;
+ if (NXT(1) == '#') {
+ int val = xmlParseCharRef(ctxt);
+
+ if (val == '&') {
+ if (ctxt->replaceEntities) {
+ if (len > buf_size - 10) {
+ growBuffer(buf);
+ }
+ buf[len++] = '&';
+ } else {
+ /*
+ * The reparsing will be done in xmlStringGetNodeList()
+ * called by the attribute() function in SAX.c
+ */
+ if (len > buf_size - 10) {
+ growBuffer(buf);
+ }
+ buf[len++] = '&';
+ buf[len++] = '#';
+ buf[len++] = '3';
+ buf[len++] = '8';
+ buf[len++] = ';';
+ }
+ } else {
+ if (len > buf_size - 10) {
+ growBuffer(buf);
+ }
+ len += xmlCopyChar(0, &buf[len], val);
+ }
+ } else {
+ ent = xmlParseEntityRef(ctxt);
+ if ((ent != NULL) &&
+ (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
+ if (len > buf_size - 10) {
+ growBuffer(buf);
+ }
+ if ((ctxt->replaceEntities == 0) &&
+ (ent->content[0] == '&')) {
+ buf[len++] = '&';
+ buf[len++] = '#';
+ buf[len++] = '3';
+ buf[len++] = '8';
+ buf[len++] = ';';
+ } else {
+ buf[len++] = ent->content[0];
+ }
+ } else if ((ent != NULL) &&
+ (ctxt->replaceEntities != 0)) {
+ xmlChar *rep;
+
+ if (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) {
+ rep = xmlStringDecodeEntities(ctxt, ent->content,
+ XML_SUBSTITUTE_REF,
+ 0, 0, 0);
+ if (rep != NULL) {
+ current = rep;
+ while (*current != 0) { /* non input consuming */
+ buf[len++] = *current++;
+ if (len > buf_size - 10) {
+ growBuffer(buf);
+ }
+ }
+ xmlFree(rep);
+ }
+ } else {
+ if (len > buf_size - 10) {
+ growBuffer(buf);
+ }
+ if (ent->content != NULL)
+ buf[len++] = ent->content[0];
+ }
+ } else if (ent != NULL) {
+ int i = xmlStrlen(ent->name);
+ const xmlChar *cur = ent->name;
+
+ /*
+ * This may look absurd but is needed to detect
+ * entities problems
+ */
+ if ((ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
+ (ent->content != NULL)) {
+ xmlChar *rep;
+ rep = xmlStringDecodeEntities(ctxt, ent->content,
+ XML_SUBSTITUTE_REF, 0, 0, 0);
+ if (rep != NULL)
+ xmlFree(rep);
+ }
+
+ /*
+ * Just output the reference
+ */
+ buf[len++] = '&';
+ if (len > buf_size - i - 10) {
+ growBuffer(buf);
+ }
+ for (;i > 0;i--)
+ buf[len++] = *cur++;
+ buf[len++] = ';';
+ }
+ }
+ } else {
+ if ((c == 0x20) || (c == 0xD) || (c == 0xA) || (c == 0x9)) {
+ if ((len != 0) || (!normalize)) {
+ if ((!normalize) || (!in_space)) {
+ COPY_BUF(l,buf,len,0x20);
+ if (len > buf_size - 10) {
+ growBuffer(buf);
+ }
+ }
+ in_space = 1;
+ }
+ } else {
+ in_space = 0;
+ COPY_BUF(l,buf,len,c);
+ if (len > buf_size - 10) {
+ growBuffer(buf);
+ }
+ }
+ NEXTL(l);
+ }
+ GROW;
+ c = CUR_CHAR(l);
+ }
+ if ((in_space) && (normalize)) {
+ while (buf[len - 1] == 0x20) len--;
+ }
+ buf[len] = 0;
+ if (RAW == '<') {
+ xmlFatalErr(ctxt, XML_ERR_LT_IN_ATTRIBUTE, NULL);
+ } else if (RAW != limit) {
+ xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+ "AttValue: ' expected\n");
+ } else
+ NEXT;
+ if (attlen != NULL) *attlen = len;
+ return(buf);
+
+mem_error:
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+}
+
+/**
+ * xmlParseAttValue:
+ * @ctxt: an XML parser context
+ *
+ * parse a value for an attribute
+ * Note: the parser won't do substitution of entities here, this
+ * will be handled later in xmlStringGetNodeList
+ *
+ * [10] AttValue ::= '"' ([^<&"] | Reference)* '"' |
+ * "'" ([^<&'] | Reference)* "'"
+ *
+ * 3.3.3 Attribute-Value Normalization:
+ * Before the value of an attribute is passed to the application or
+ * checked for validity, the XML processor must normalize it as follows:
+ * - a character reference is processed by appending the referenced
+ * character to the attribute value
+ * - an entity reference is processed by recursively processing the
+ * replacement text of the entity
+ * - a whitespace character (#x20, #xD, #xA, #x9) is processed by
+ * appending #x20 to the normalized value, except that only a single
+ * #x20 is appended for a "#xD#xA" sequence that is part of an external
+ * parsed entity or the literal entity value of an internal parsed entity
+ * - other characters are processed by appending them to the normalized value
+ * If the declared value is not CDATA, then the XML processor must further
+ * process the normalized attribute value by discarding any leading and
+ * trailing space (#x20) characters, and by replacing sequences of space
+ * (#x20) characters by a single space (#x20) character.
+ * All attributes for which no declaration has been read should be treated
+ * by a non-validating parser as if declared CDATA.
+ *
+ * Returns the AttValue parsed or NULL. The value has to be freed by the caller.
+ */
+
+
+xmlChar *
+xmlParseAttValue(xmlParserCtxtPtr ctxt) {
+ return(xmlParseAttValueInternal(ctxt, NULL, NULL, 0));
+}
+
+/**
+ * xmlParseSystemLiteral:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML Literal
+ *
+ * [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")
+ *
+ * Returns the SystemLiteral parsed or NULL
+ */
+
+xmlChar *
+xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) {
+ xmlChar *buf = NULL;
+ int len = 0;
+ int size = XML_PARSER_BUFFER_SIZE;
+ int cur, l;
+ xmlChar stop;
+ int state = ctxt->instate;
+ int count = 0;
+
+ SHRINK;
+ if (RAW == '"') {
+ NEXT;
+ stop = '"';
+ } else if (RAW == '\'') {
+ NEXT;
+ stop = '\'';
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_STARTED, NULL);
+ return(NULL);
+ }
+
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ ctxt->instate = XML_PARSER_SYSTEM_LITERAL;
+ cur = CUR_CHAR(l);
+ while ((IS_CHAR(cur)) && (cur != stop)) { /* checked */
+ if (len + 5 >= size) {
+ size *= 2;
+ buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ ctxt->instate = (xmlParserInputState) state;
+ return(NULL);
+ }
+ }
+ count++;
+ if (count > 50) {
+ GROW;
+ count = 0;
+ }
+ COPY_BUF(l,buf,len,cur);
+ NEXTL(l);
+ cur = CUR_CHAR(l);
+ if (cur == 0) {
+ GROW;
+ SHRINK;
+ cur = CUR_CHAR(l);
+ }
+ }
+ buf[len] = 0;
+ ctxt->instate = (xmlParserInputState) state;
+ if (!IS_CHAR(cur)) {
+ xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED, NULL);
+ } else {
+ NEXT;
+ }
+ return(buf);
+}
+
+/**
+ * xmlParsePubidLiteral:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML public literal
+ *
+ * [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
+ *
+ * Returns the PubidLiteral parsed or NULL.
+ */
+
+xmlChar *
+xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) {
+ xmlChar *buf = NULL;
+ int len = 0;
+ int size = XML_PARSER_BUFFER_SIZE;
+ xmlChar cur;
+ xmlChar stop;
+ int count = 0;
+ xmlParserInputState oldstate = ctxt->instate;
+
+ SHRINK;
+ if (RAW == '"') {
+ NEXT;
+ stop = '"';
+ } else if (RAW == '\'') {
+ NEXT;
+ stop = '\'';
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_STARTED, NULL);
+ return(NULL);
+ }
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ ctxt->instate = XML_PARSER_PUBLIC_LITERAL;
+ cur = CUR;
+ while ((IS_PUBIDCHAR_CH(cur)) && (cur != stop)) { /* checked */
+ if (len + 1 >= size) {
+ size *= 2;
+ buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ }
+ buf[len++] = cur;
+ count++;
+ if (count > 50) {
+ GROW;
+ count = 0;
+ }
+ NEXT;
+ cur = CUR;
+ if (cur == 0) {
+ GROW;
+ SHRINK;
+ cur = CUR;
+ }
+ }
+ buf[len] = 0;
+ if (cur != stop) {
+ xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED, NULL);
+ } else {
+ NEXT;
+ }
+ ctxt->instate = oldstate;
+ return(buf);
+}
+
+void xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata);
+/**
+ * xmlParseCharData:
+ * @ctxt: an XML parser context
+ * @cdata: int indicating whether we are within a CDATA section
+ *
+ * parse a CharData section.
+ * if we are within a CDATA section ']]>' marks an end of section.
+ *
+ * The right angle bracket (>) may be represented using the string "&gt;",
+ * and must, for compatibility, be escaped using "&gt;" or a character
+ * reference when it appears in the string "]]>" in content, when that
+ * string is not marking the end of a CDATA section.
+ *
+ * [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
+ */
+
+void
+xmlParseCharData(xmlParserCtxtPtr ctxt, int cdata) {
+ const xmlChar *in;
+ int nbchar = 0;
+ int line = ctxt->input->line;
+ int col = ctxt->input->col;
+
+ SHRINK;
+ GROW;
+ /*
+ * Accelerated common case where input don't need to be
+ * modified before passing it to the handler.
+ */
+ if (!cdata) {
+ in = ctxt->input->cur;
+ do {
+get_more_space:
+ while (*in == 0x20) in++;
+ if (*in == 0xA) {
+ ctxt->input->line++;
+ in++;
+ while (*in == 0xA) {
+ ctxt->input->line++;
+ in++;
+ }
+ goto get_more_space;
+ }
+ if (*in == '<') {
+ nbchar = in - ctxt->input->cur;
+ if (nbchar > 0) {
+ const xmlChar *tmp = ctxt->input->cur;
+ ctxt->input->cur = in;
+
+ if (ctxt->sax->ignorableWhitespace !=
+ ctxt->sax->characters) {
+ if (areBlanks(ctxt, tmp, nbchar, 1)) {
+ ctxt->sax->ignorableWhitespace(ctxt->userData,
+ tmp, nbchar);
+ } else if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData,
+ tmp, nbchar);
+ } else if (ctxt->sax->characters != NULL) {
+ ctxt->sax->characters(ctxt->userData,
+ tmp, nbchar);
+ }
+ }
+ return;
+ }
+get_more:
+ while (((*in > ']') && (*in <= 0x7F)) ||
+ ((*in > '&') && (*in < '<')) ||
+ ((*in > '<') && (*in < ']')) ||
+ ((*in >= 0x20) && (*in < '&')) ||
+ (*in == 0x09))
+ in++;
+ if (*in == 0xA) {
+ ctxt->input->line++;
+ in++;
+ while (*in == 0xA) {
+ ctxt->input->line++;
+ in++;
+ }
+ goto get_more;
+ }
+ if (*in == ']') {
+ if ((in[1] == ']') && (in[2] == '>')) {
+ xmlFatalErr(ctxt, XML_ERR_MISPLACED_CDATA_END, NULL);
+ ctxt->input->cur = in;
+ return;
+ }
+ in++;
+ goto get_more;
+ }
+ nbchar = in - ctxt->input->cur;
+ if (nbchar > 0) {
+ if ((ctxt->sax->ignorableWhitespace !=
+ ctxt->sax->characters) &&
+ (IS_BLANK_CH(*ctxt->input->cur))) {
+ const xmlChar *tmp = ctxt->input->cur;
+ ctxt->input->cur = in;
+
+ if (areBlanks(ctxt, tmp, nbchar, 0)) {
+ ctxt->sax->ignorableWhitespace(ctxt->userData,
+ tmp, nbchar);
+ } else if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData,
+ tmp, nbchar);
+ line = ctxt->input->line;
+ col = ctxt->input->col;
+ } else {
+ if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData,
+ ctxt->input->cur, nbchar);
+ line = ctxt->input->line;
+ col = ctxt->input->col;
+ }
+ }
+ ctxt->input->cur = in;
+ if (*in == 0xD) {
+ in++;
+ if (*in == 0xA) {
+ ctxt->input->cur = in;
+ in++;
+ ctxt->input->line++;
+ continue; /* while */
+ }
+ in--;
+ }
+ if (*in == '<') {
+ return;
+ }
+ if (*in == '&') {
+ return;
+ }
+ SHRINK;
+ GROW;
+ in = ctxt->input->cur;
+ } while (((*in >= 0x20) && (*in <= 0x7F)) || (*in == 0x09));
+ nbchar = 0;
+ }
+ ctxt->input->line = line;
+ ctxt->input->col = col;
+ xmlParseCharDataComplex(ctxt, cdata);
+}
+
+/**
+ * xmlParseCharDataComplex:
+ * @ctxt: an XML parser context
+ * @cdata: int indicating whether we are within a CDATA section
+ *
+ * parse a CharData section.this is the fallback function
+ * of xmlParseCharData() when the parsing requires handling
+ * of non-ASCII characters.
+ */
+void
+xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata) {
+ xmlChar buf[XML_PARSER_BIG_BUFFER_SIZE + 5];
+ int nbchar = 0;
+ int cur, l;
+ int count = 0;
+
+ SHRINK;
+ GROW;
+ cur = CUR_CHAR(l);
+ while ((cur != '<') && /* checked */
+ (cur != '&') &&
+ (IS_CHAR(cur))) /* test also done in xmlCurrentChar() */ {
+ if ((cur == ']') && (NXT(1) == ']') &&
+ (NXT(2) == '>')) {
+ if (cdata) break;
+ else {
+ xmlFatalErr(ctxt, XML_ERR_MISPLACED_CDATA_END, NULL);
+ }
+ }
+ COPY_BUF(l,buf,nbchar,cur);
+ if (nbchar >= XML_PARSER_BIG_BUFFER_SIZE) {
+ buf[nbchar] = 0;
+
+ /*
+ * OK the segment is to be consumed as chars.
+ */
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
+ if (areBlanks(ctxt, buf, nbchar, 0)) {
+ if (ctxt->sax->ignorableWhitespace != NULL)
+ ctxt->sax->ignorableWhitespace(ctxt->userData,
+ buf, nbchar);
+ } else {
+ if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData, buf, nbchar);
+ }
+ }
+ nbchar = 0;
+ }
+ count++;
+ if (count > 50) {
+ GROW;
+ count = 0;
+ }
+ NEXTL(l);
+ cur = CUR_CHAR(l);
+ }
+ if (nbchar != 0) {
+ buf[nbchar] = 0;
+ /*
+ * OK the segment is to be consumed as chars.
+ */
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
+ if (areBlanks(ctxt, buf, nbchar, 0)) {
+ if (ctxt->sax->ignorableWhitespace != NULL)
+ ctxt->sax->ignorableWhitespace(ctxt->userData, buf, nbchar);
+ } else {
+ if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData, buf, nbchar);
+ }
+ }
+ }
+}
+
+/**
+ * xmlParseExternalID:
+ * @ctxt: an XML parser context
+ * @publicID: a xmlChar** receiving PubidLiteral
+ * @strict: indicate whether we should restrict parsing to only
+ * production [75], see NOTE below
+ *
+ * Parse an External ID or a Public ID
+ *
+ * NOTE: Productions [75] and [83] interact badly since [75] can generate
+ * 'PUBLIC' S PubidLiteral S SystemLiteral
+ *
+ * [75] ExternalID ::= 'SYSTEM' S SystemLiteral
+ * | 'PUBLIC' S PubidLiteral S SystemLiteral
+ *
+ * [83] PublicID ::= 'PUBLIC' S PubidLiteral
+ *
+ * Returns the function returns SystemLiteral and in the second
+ * case publicID receives PubidLiteral, is strict is off
+ * it is possible to return NULL and have publicID set.
+ */
+
+xmlChar *
+xmlParseExternalID(xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict) {
+ xmlChar *URI = NULL;
+
+ SHRINK;
+
+ *publicID = NULL;
+ if (CMP6(CUR_PTR, 'S', 'Y', 'S', 'T', 'E', 'M')) {
+ SKIP(6);
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after 'SYSTEM'\n");
+ }
+ SKIP_BLANKS;
+ URI = xmlParseSystemLiteral(ctxt);
+ if (URI == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_URI_REQUIRED, NULL);
+ }
+ } else if (CMP6(CUR_PTR, 'P', 'U', 'B', 'L', 'I', 'C')) {
+ SKIP(6);
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after 'PUBLIC'\n");
+ }
+ SKIP_BLANKS;
+ *publicID = xmlParsePubidLiteral(ctxt);
+ if (*publicID == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_PUBID_REQUIRED, NULL);
+ }
+ if (strict) {
+ /*
+ * We don't handle [83] so "S SystemLiteral" is required.
+ */
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after the Public Identifier\n");
+ }
+ } else {
+ /*
+ * We handle [83] so we return immediately, if
+ * "S SystemLiteral" is not detected. From a purely parsing
+ * point of view that's a nice mess.
+ */
+ const xmlChar *ptr;
+ GROW;
+
+ ptr = CUR_PTR;
+ if (!IS_BLANK_CH(*ptr)) return(NULL);
+
+ while (IS_BLANK_CH(*ptr)) ptr++; /* TODO: dangerous, fix ! */
+ if ((*ptr != '\'') && (*ptr != '"')) return(NULL);
+ }
+ SKIP_BLANKS;
+ URI = xmlParseSystemLiteral(ctxt);
+ if (URI == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_URI_REQUIRED, NULL);
+ }
+ }
+ return(URI);
+}
+
+/**
+ * xmlParseComment:
+ * @ctxt: an XML parser context
+ *
+ * Skip an XML (SGML) comment <!-- .... -->
+ * The spec says that "For compatibility, the string "--" (double-hyphen)
+ * must not occur within comments. "
+ *
+ * [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
+ */
+void
+xmlParseComment(xmlParserCtxtPtr ctxt) {
+ xmlChar *buf = NULL;
+ int len;
+ int size = XML_PARSER_BUFFER_SIZE;
+ int q, ql;
+ int r, rl;
+ int cur, l;
+ xmlParserInputState state;
+ xmlParserInputPtr input = ctxt->input;
+ int count = 0;
+
+ /*
+ * Check that there is a comment right here.
+ */
+ if ((RAW != '<') || (NXT(1) != '!') ||
+ (NXT(2) != '-') || (NXT(3) != '-')) return;
+
+ state = ctxt->instate;
+ ctxt->instate = XML_PARSER_COMMENT;
+ SHRINK;
+ SKIP(4);
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ ctxt->instate = state;
+ return;
+ }
+ q = CUR_CHAR(ql);
+ if (q == 0)
+ goto not_terminated;
+ NEXTL(ql);
+ r = CUR_CHAR(rl);
+ if (r == 0)
+ goto not_terminated;
+ NEXTL(rl);
+ cur = CUR_CHAR(l);
+ if (cur == 0)
+ goto not_terminated;
+ len = 0;
+ while (IS_CHAR(cur) && /* checked */
+ ((cur != '>') ||
+ (r != '-') || (q != '-'))) {
+ if ((r == '-') && (q == '-')) {
+ xmlFatalErr(ctxt, XML_ERR_HYPHEN_IN_COMMENT, NULL);
+ }
+ if (len + 5 >= size) {
+ size *= 2;
+ buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ ctxt->instate = state;
+ return;
+ }
+ }
+ COPY_BUF(ql,buf,len,q);
+ q = r;
+ ql = rl;
+ r = cur;
+ rl = l;
+
+ count++;
+ if (count > 50) {
+ GROW;
+ count = 0;
+ }
+ NEXTL(l);
+ cur = CUR_CHAR(l);
+ if (cur == 0) {
+ SHRINK;
+ GROW;
+ cur = CUR_CHAR(l);
+ }
+ }
+ buf[len] = 0;
+ if (!IS_CHAR(cur)) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
+ "Comment not terminated \n<!--%.50s\n", buf);
+ xmlFree(buf);
+ } else {
+ if (input != ctxt->input) {
+ xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
+ "Comment doesn't start and stop in the same entity\n");
+ }
+ NEXT;
+ if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->comment(ctxt->userData, buf);
+ xmlFree(buf);
+ }
+ ctxt->instate = state;
+ return;
+not_terminated:
+ xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
+ "Comment not terminated\n", NULL);
+ xmlFree(buf);
+}
+
+/**
+ * xmlParsePITarget:
+ * @ctxt: an XML parser context
+ *
+ * parse the name of a PI
+ *
+ * [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))
+ *
+ * Returns the PITarget name or NULL
+ */
+
+const xmlChar *
+xmlParsePITarget(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+
+ name = xmlParseName(ctxt);
+ if ((name != NULL) &&
+ ((name[0] == 'x') || (name[0] == 'X')) &&
+ ((name[1] == 'm') || (name[1] == 'M')) &&
+ ((name[2] == 'l') || (name[2] == 'L'))) {
+ int i;
+ if ((name[0] == 'x') && (name[1] == 'm') &&
+ (name[2] == 'l') && (name[3] == 0)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_RESERVED_XML_NAME,
+ "XML declaration allowed only at the start of the document\n");
+ return(name);
+ } else if (name[3] == 0) {
+ xmlFatalErr(ctxt, XML_ERR_RESERVED_XML_NAME, NULL);
+ return(name);
+ }
+ for (i = 0;;i++) {
+ if (xmlW3CPIs[i] == NULL) break;
+ if (xmlStrEqual(name, (const xmlChar *)xmlW3CPIs[i]))
+ return(name);
+ }
+ xmlWarningMsg(ctxt, XML_ERR_RESERVED_XML_NAME,
+ "xmlParsePITarget: invalid name prefix 'xml'\n",
+ NULL, NULL);
+ }
+ return(name);
+}
+
+#ifdef LIBXML_CATALOG_ENABLED
+/**
+ * xmlParseCatalogPI:
+ * @ctxt: an XML parser context
+ * @catalog: the PI value string
+ *
+ * parse an XML Catalog Processing Instruction.
+ *
+ * <?oasis-xml-catalog catalog="http://example.com/catalog.xml"?>
+ *
+ * Occurs only if allowed by the user and if happening in the Misc
+ * part of the document before any doctype informations
+ * This will add the given catalog to the parsing context in order
+ * to be used if there is a resolution need further down in the document
+ */
+
+static void
+xmlParseCatalogPI(xmlParserCtxtPtr ctxt, const xmlChar *catalog) {
+ xmlChar *URL = NULL;
+ const xmlChar *tmp, *base;
+ xmlChar marker;
+
+ tmp = catalog;
+ while (IS_BLANK_CH(*tmp)) tmp++;
+ if (xmlStrncmp(tmp, BAD_CAST"catalog", 7))
+ goto error;
+ tmp += 7;
+ while (IS_BLANK_CH(*tmp)) tmp++;
+ if (*tmp != '=') {
+ return;
+ }
+ tmp++;
+ while (IS_BLANK_CH(*tmp)) tmp++;
+ marker = *tmp;
+ if ((marker != '\'') && (marker != '"'))
+ goto error;
+ tmp++;
+ base = tmp;
+ while ((*tmp != 0) && (*tmp != marker)) tmp++;
+ if (*tmp == 0)
+ goto error;
+ URL = xmlStrndup(base, tmp - base);
+ tmp++;
+ while (IS_BLANK_CH(*tmp)) tmp++;
+ if (*tmp != 0)
+ goto error;
+
+ if (URL != NULL) {
+ ctxt->catalogs = xmlCatalogAddLocal(ctxt->catalogs, URL);
+ xmlFree(URL);
+ }
+ return;
+
+error:
+ xmlWarningMsg(ctxt, XML_WAR_CATALOG_PI,
+ "Catalog PI syntax error: %s\n",
+ catalog, NULL);
+ if (URL != NULL)
+ xmlFree(URL);
+}
+#endif
+
+/**
+ * xmlParsePI:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML Processing Instruction.
+ *
+ * [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
+ *
+ * The processing is transfered to SAX once parsed.
+ */
+
+void
+xmlParsePI(xmlParserCtxtPtr ctxt) {
+ xmlChar *buf = NULL;
+ int len = 0;
+ int size = XML_PARSER_BUFFER_SIZE;
+ int cur, l;
+ const xmlChar *target;
+ xmlParserInputState state;
+ int count = 0;
+
+ if ((RAW == '<') && (NXT(1) == '?')) {
+ xmlParserInputPtr input = ctxt->input;
+ state = ctxt->instate;
+ ctxt->instate = XML_PARSER_PI;
+ /*
+ * this is a Processing Instruction.
+ */
+ SKIP(2);
+ SHRINK;
+
+ /*
+ * Parse the target name and check for special support like
+ * namespace.
+ */
+ target = xmlParsePITarget(ctxt);
+ if (target != NULL) {
+ if ((RAW == '?') && (NXT(1) == '>')) {
+ if (input != ctxt->input) {
+ xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
+ "PI declaration doesn't start and stop in the same entity\n");
+ }
+ SKIP(2);
+
+ /*
+ * SAX: PI detected.
+ */
+ if ((ctxt->sax) && (!ctxt->disableSAX) &&
+ (ctxt->sax->processingInstruction != NULL))
+ ctxt->sax->processingInstruction(ctxt->userData,
+ target, NULL);
+ ctxt->instate = state;
+ return;
+ }
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ ctxt->instate = state;
+ return;
+ }
+ cur = CUR;
+ if (!IS_BLANK(cur)) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_SPACE_REQUIRED,
+ "ParsePI: PI %s space expected\n", target);
+ }
+ SKIP_BLANKS;
+ cur = CUR_CHAR(l);
+ while (IS_CHAR(cur) && /* checked */
+ ((cur != '?') || (NXT(1) != '>'))) {
+ if (len + 5 >= size) {
+ size *= 2;
+ buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ ctxt->instate = state;
+ return;
+ }
+ }
+ count++;
+ if (count > 50) {
+ GROW;
+ count = 0;
+ }
+ COPY_BUF(l,buf,len,cur);
+ NEXTL(l);
+ cur = CUR_CHAR(l);
+ if (cur == 0) {
+ SHRINK;
+ GROW;
+ cur = CUR_CHAR(l);
+ }
+ }
+ buf[len] = 0;
+ if (cur != '?') {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_PI_NOT_FINISHED,
+ "ParsePI: PI %s never end ...\n", target);
+ } else {
+ if (input != ctxt->input) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "PI declaration doesn't start and stop in the same entity\n");
+ }
+ SKIP(2);
+
+#ifdef LIBXML_CATALOG_ENABLED
+ if (((state == XML_PARSER_MISC) ||
+ (state == XML_PARSER_START)) &&
+ (xmlStrEqual(target, XML_CATALOG_PI))) {
+ xmlCatalogAllow allow = xmlCatalogGetDefaults();
+ if ((allow == XML_CATA_ALLOW_DOCUMENT) ||
+ (allow == XML_CATA_ALLOW_ALL))
+ xmlParseCatalogPI(ctxt, buf);
+ }
+#endif
+
+
+ /*
+ * SAX: PI detected.
+ */
+ if ((ctxt->sax) && (!ctxt->disableSAX) &&
+ (ctxt->sax->processingInstruction != NULL))
+ ctxt->sax->processingInstruction(ctxt->userData,
+ target, buf);
+ }
+ xmlFree(buf);
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_PI_NOT_STARTED, NULL);
+ }
+ ctxt->instate = state;
+ }
+}
+
+/**
+ * xmlParseNotationDecl:
+ * @ctxt: an XML parser context
+ *
+ * parse a notation declaration
+ *
+ * [82] NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S? '>'
+ *
+ * Hence there is actually 3 choices:
+ * 'PUBLIC' S PubidLiteral
+ * 'PUBLIC' S PubidLiteral S SystemLiteral
+ * and 'SYSTEM' S SystemLiteral
+ *
+ * See the NOTE on xmlParseExternalID().
+ */
+
+void
+xmlParseNotationDecl(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ xmlChar *Pubid;
+ xmlChar *Systemid;
+
+ if (CMP10(CUR_PTR, '<', '!', 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N')) {
+ xmlParserInputPtr input = ctxt->input;
+ SHRINK;
+ SKIP(10);
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after '<!NOTATION'\n");
+ return;
+ }
+ SKIP_BLANKS;
+
+ name = xmlParseName(ctxt);
+ if (name == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_STARTED, NULL);
+ return;
+ }
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after the NOTATION name'\n");
+ return;
+ }
+ SKIP_BLANKS;
+
+ /*
+ * Parse the IDs.
+ */
+ Systemid = xmlParseExternalID(ctxt, &Pubid, 0);
+ SKIP_BLANKS;
+
+ if (RAW == '>') {
+ if (input != ctxt->input) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Notation declaration doesn't start and stop in the same entity\n");
+ }
+ NEXT;
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
+ (ctxt->sax->notationDecl != NULL))
+ ctxt->sax->notationDecl(ctxt->userData, name, Pubid, Systemid);
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_FINISHED, NULL);
+ }
+ if (Systemid != NULL) xmlFree(Systemid);
+ if (Pubid != NULL) xmlFree(Pubid);
+ }
+}
+
+/**
+ * xmlParseEntityDecl:
+ * @ctxt: an XML parser context
+ *
+ * parse <!ENTITY declarations
+ *
+ * [70] EntityDecl ::= GEDecl | PEDecl
+ *
+ * [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
+ *
+ * [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
+ *
+ * [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)
+ *
+ * [74] PEDef ::= EntityValue | ExternalID
+ *
+ * [76] NDataDecl ::= S 'NDATA' S Name
+ *
+ * [ VC: Notation Declared ]
+ * The Name must match the declared name of a notation.
+ */
+
+void
+xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name = NULL;
+ xmlChar *value = NULL;
+ xmlChar *URI = NULL, *literal = NULL;
+ const xmlChar *ndata = NULL;
+ int isParameter = 0;
+ xmlChar *orig = NULL;
+ int skipped;
+
+ GROW;
+ if (CMP8(CUR_PTR, '<', '!', 'E', 'N', 'T', 'I', 'T', 'Y')) {
+ xmlParserInputPtr input = ctxt->input;
+ SHRINK;
+ SKIP(8);
+ skipped = SKIP_BLANKS;
+ if (skipped == 0) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after '<!ENTITY'\n");
+ }
+
+ if (RAW == '%') {
+ NEXT;
+ skipped = SKIP_BLANKS;
+ if (skipped == 0) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after '%'\n");
+ }
+ isParameter = 1;
+ }
+
+ name = xmlParseName(ctxt);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "xmlParseEntityDecl: no name\n");
+ return;
+ }
+ skipped = SKIP_BLANKS;
+ if (skipped == 0) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after the entity name\n");
+ }
+
+ ctxt->instate = XML_PARSER_ENTITY_DECL;
+ /*
+ * handle the various case of definitions...
+ */
+ if (isParameter) {
+ if ((RAW == '"') || (RAW == '\'')) {
+ value = xmlParseEntityValue(ctxt, &orig);
+ if (value) {
+ if ((ctxt->sax != NULL) &&
+ (!ctxt->disableSAX) && (ctxt->sax->entityDecl != NULL))
+ ctxt->sax->entityDecl(ctxt->userData, name,
+ XML_INTERNAL_PARAMETER_ENTITY,
+ NULL, NULL, value);
+ }
+ } else {
+ URI = xmlParseExternalID(ctxt, &literal, 1);
+ if ((URI == NULL) && (literal == NULL)) {
+ xmlFatalErr(ctxt, XML_ERR_VALUE_REQUIRED, NULL);
+ }
+ if (URI) {
+ xmlURIPtr uri;
+
+ uri = xmlParseURI((const char *) URI);
+ if (uri == NULL) {
+ xmlErrMsgStr(ctxt, XML_ERR_INVALID_URI,
+ "Invalid URI: %s\n", URI);
+ /*
+ * This really ought to be a well formedness error
+ * but the XML Core WG decided otherwise c.f. issue
+ * E26 of the XML erratas.
+ */
+ } else {
+ if (uri->fragment != NULL) {
+ /*
+ * Okay this is foolish to block those but not
+ * invalid URIs.
+ */
+ xmlFatalErr(ctxt, XML_ERR_URI_FRAGMENT, NULL);
+ } else {
+ if ((ctxt->sax != NULL) &&
+ (!ctxt->disableSAX) &&
+ (ctxt->sax->entityDecl != NULL))
+ ctxt->sax->entityDecl(ctxt->userData, name,
+ XML_EXTERNAL_PARAMETER_ENTITY,
+ literal, URI, NULL);
+ }
+ xmlFreeURI(uri);
+ }
+ }
+ }
+ } else {
+ if ((RAW == '"') || (RAW == '\'')) {
+ value = xmlParseEntityValue(ctxt, &orig);
+ if ((ctxt->sax != NULL) &&
+ (!ctxt->disableSAX) && (ctxt->sax->entityDecl != NULL))
+ ctxt->sax->entityDecl(ctxt->userData, name,
+ XML_INTERNAL_GENERAL_ENTITY,
+ NULL, NULL, value);
+ /*
+ * For expat compatibility in SAX mode.
+ */
+ if ((ctxt->myDoc == NULL) ||
+ (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE))) {
+ if (ctxt->myDoc == NULL) {
+ ctxt->myDoc = xmlNewDoc(SAX_COMPAT_MODE);
+ }
+ if (ctxt->myDoc->intSubset == NULL)
+ ctxt->myDoc->intSubset = xmlNewDtd(ctxt->myDoc,
+ BAD_CAST "fake", NULL, NULL);
+
+ xmlSAX2EntityDecl(ctxt, name, XML_INTERNAL_GENERAL_ENTITY,
+ NULL, NULL, value);
+ }
+ } else {
+ URI = xmlParseExternalID(ctxt, &literal, 1);
+ if ((URI == NULL) && (literal == NULL)) {
+ xmlFatalErr(ctxt, XML_ERR_VALUE_REQUIRED, NULL);
+ }
+ if (URI) {
+ xmlURIPtr uri;
+
+ uri = xmlParseURI((const char *)URI);
+ if (uri == NULL) {
+ xmlErrMsgStr(ctxt, XML_ERR_INVALID_URI,
+ "Invalid URI: %s\n", URI);
+ /*
+ * This really ought to be a well formedness error
+ * but the XML Core WG decided otherwise c.f. issue
+ * E26 of the XML erratas.
+ */
+ } else {
+ if (uri->fragment != NULL) {
+ /*
+ * Okay this is foolish to block those but not
+ * invalid URIs.
+ */
+ xmlFatalErr(ctxt, XML_ERR_URI_FRAGMENT, NULL);
+ }
+ xmlFreeURI(uri);
+ }
+ }
+ if ((RAW != '>') && (!IS_BLANK_CH(CUR))) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required before 'NDATA'\n");
+ }
+ SKIP_BLANKS;
+ if (CMP5(CUR_PTR, 'N', 'D', 'A', 'T', 'A')) {
+ SKIP(5);
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after 'NDATA'\n");
+ }
+ SKIP_BLANKS;
+ ndata = xmlParseName(ctxt);
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
+ (ctxt->sax->unparsedEntityDecl != NULL))
+ ctxt->sax->unparsedEntityDecl(ctxt->userData, name,
+ literal, URI, ndata);
+ } else {
+ if ((ctxt->sax != NULL) &&
+ (!ctxt->disableSAX) && (ctxt->sax->entityDecl != NULL))
+ ctxt->sax->entityDecl(ctxt->userData, name,
+ XML_EXTERNAL_GENERAL_PARSED_ENTITY,
+ literal, URI, NULL);
+ /*
+ * For expat compatibility in SAX mode.
+ * assuming the entity repalcement was asked for
+ */
+ if ((ctxt->replaceEntities != 0) &&
+ ((ctxt->myDoc == NULL) ||
+ (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE)))) {
+ if (ctxt->myDoc == NULL) {
+ ctxt->myDoc = xmlNewDoc(SAX_COMPAT_MODE);
+ }
+
+ if (ctxt->myDoc->intSubset == NULL)
+ ctxt->myDoc->intSubset = xmlNewDtd(ctxt->myDoc,
+ BAD_CAST "fake", NULL, NULL);
+ xmlSAX2EntityDecl(ctxt, name,
+ XML_EXTERNAL_GENERAL_PARSED_ENTITY,
+ literal, URI, NULL);
+ }
+ }
+ }
+ }
+ SKIP_BLANKS;
+ if (RAW != '>') {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_NOT_FINISHED,
+ "xmlParseEntityDecl: entity %s not terminated\n", name);
+ } else {
+ if (input != ctxt->input) {
+ xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
+ "Entity declaration doesn't start and stop in the same entity\n");
+ }
+ NEXT;
+ }
+ if (orig != NULL) {
+ /*
+ * Ugly mechanism to save the raw entity value.
+ */
+ xmlEntityPtr cur = NULL;
+
+ if (isParameter) {
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax->getParameterEntity != NULL))
+ cur = ctxt->sax->getParameterEntity(ctxt->userData, name);
+ } else {
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax->getEntity != NULL))
+ cur = ctxt->sax->getEntity(ctxt->userData, name);
+ if ((cur == NULL) && (ctxt->userData==ctxt)) {
+ cur = xmlSAX2GetEntity(ctxt, name);
+ }
+ }
+ if (cur != NULL) {
+ if (cur->orig != NULL)
+ xmlFree(orig);
+ else
+ cur->orig = orig;
+ } else
+ xmlFree(orig);
+ }
+ if (value != NULL) xmlFree(value);
+ if (URI != NULL) xmlFree(URI);
+ if (literal != NULL) xmlFree(literal);
+ }
+}
+
+/**
+ * xmlParseDefaultDecl:
+ * @ctxt: an XML parser context
+ * @value: Receive a possible fixed default value for the attribute
+ *
+ * Parse an attribute default declaration
+ *
+ * [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
+ *
+ * [ VC: Required Attribute ]
+ * if the default declaration is the keyword #REQUIRED, then the
+ * attribute must be specified for all elements of the type in the
+ * attribute-list declaration.
+ *
+ * [ VC: Attribute Default Legal ]
+ * The declared default value must meet the lexical constraints of
+ * the declared attribute type c.f. xmlValidateAttributeDecl()
+ *
+ * [ VC: Fixed Attribute Default ]
+ * if an attribute has a default value declared with the #FIXED
+ * keyword, instances of that attribute must match the default value.
+ *
+ * [ WFC: No < in Attribute Values ]
+ * handled in xmlParseAttValue()
+ *
+ * returns: XML_ATTRIBUTE_NONE, XML_ATTRIBUTE_REQUIRED, XML_ATTRIBUTE_IMPLIED
+ * or XML_ATTRIBUTE_FIXED.
+ */
+
+int
+xmlParseDefaultDecl(xmlParserCtxtPtr ctxt, xmlChar **value) {
+ int val;
+ xmlChar *ret;
+
+ *value = NULL;
+ if (CMP9(CUR_PTR, '#', 'R', 'E', 'Q', 'U', 'I', 'R', 'E', 'D')) {
+ SKIP(9);
+ return(XML_ATTRIBUTE_REQUIRED);
+ }
+ if (CMP8(CUR_PTR, '#', 'I', 'M', 'P', 'L', 'I', 'E', 'D')) {
+ SKIP(8);
+ return(XML_ATTRIBUTE_IMPLIED);
+ }
+ val = XML_ATTRIBUTE_NONE;
+ if (CMP6(CUR_PTR, '#', 'F', 'I', 'X', 'E', 'D')) {
+ SKIP(6);
+ val = XML_ATTRIBUTE_FIXED;
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after '#FIXED'\n");
+ }
+ SKIP_BLANKS;
+ }
+ ret = xmlParseAttValue(ctxt);
+ ctxt->instate = XML_PARSER_DTD;
+ if (ret == NULL) {
+ xmlFatalErrMsg(ctxt, (xmlParserErrors)ctxt->errNo,
+ "Attribute default value declaration error\n");
+ } else
+ *value = ret;
+ return(val);
+}
+
+/**
+ * xmlParseNotationType:
+ * @ctxt: an XML parser context
+ *
+ * parse an Notation attribute type.
+ *
+ * Note: the leading 'NOTATION' S part has already being parsed...
+ *
+ * [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'
+ *
+ * [ VC: Notation Attributes ]
+ * Values of this type must match one of the notation names included
+ * in the declaration; all notation names in the declaration must be declared.
+ *
+ * Returns: the notation attribute tree built while parsing
+ */
+
+xmlEnumerationPtr
+xmlParseNotationType(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ xmlEnumerationPtr ret = NULL, last = NULL, cur;
+
+ if (RAW != '(') {
+ xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_STARTED, NULL);
+ return(NULL);
+ }
+ SHRINK;
+ do {
+ NEXT;
+ SKIP_BLANKS;
+ name = xmlParseName(ctxt);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "Name expected in NOTATION declaration\n");
+ return(ret);
+ }
+ cur = xmlCreateEnumeration(name);
+ if (cur == NULL) return(ret);
+ if (last == NULL) ret = last = cur;
+ else {
+ last->next = cur;
+ last = cur;
+ }
+ SKIP_BLANKS;
+ } while (RAW == '|');
+ if (RAW != ')') {
+ xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_FINISHED, NULL);
+ if ((last != NULL) && (last != ret))
+ xmlFreeEnumeration(last);
+ return(ret);
+ }
+ NEXT;
+ return(ret);
+}
+
+/**
+ * xmlParseEnumerationType:
+ * @ctxt: an XML parser context
+ *
+ * parse an Enumeration attribute type.
+ *
+ * [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
+ *
+ * [ VC: Enumeration ]
+ * Values of this type must match one of the Nmtoken tokens in
+ * the declaration
+ *
+ * Returns: the enumeration attribute tree built while parsing
+ */
+
+xmlEnumerationPtr
+xmlParseEnumerationType(xmlParserCtxtPtr ctxt) {
+ xmlChar *name;
+ xmlEnumerationPtr ret = NULL, last = NULL, cur;
+
+ if (RAW != '(') {
+ xmlFatalErr(ctxt, XML_ERR_ATTLIST_NOT_STARTED, NULL);
+ return(NULL);
+ }
+ SHRINK;
+ do {
+ NEXT;
+ SKIP_BLANKS;
+ name = xmlParseNmtoken(ctxt);
+ if (name == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_NMTOKEN_REQUIRED, NULL);
+ return(ret);
+ }
+ cur = xmlCreateEnumeration(name);
+ xmlFree(name);
+ if (cur == NULL) return(ret);
+ if (last == NULL) ret = last = cur;
+ else {
+ last->next = cur;
+ last = cur;
+ }
+ SKIP_BLANKS;
+ } while (RAW == '|');
+ if (RAW != ')') {
+ xmlFatalErr(ctxt, XML_ERR_ATTLIST_NOT_FINISHED, NULL);
+ return(ret);
+ }
+ NEXT;
+ return(ret);
+}
+
+/**
+ * xmlParseEnumeratedType:
+ * @ctxt: an XML parser context
+ * @tree: the enumeration tree built while parsing
+ *
+ * parse an Enumerated attribute type.
+ *
+ * [57] EnumeratedType ::= NotationType | Enumeration
+ *
+ * [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'
+ *
+ *
+ * Returns: XML_ATTRIBUTE_ENUMERATION or XML_ATTRIBUTE_NOTATION
+ */
+
+int
+xmlParseEnumeratedType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree) {
+ if (CMP8(CUR_PTR, 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N')) {
+ SKIP(8);
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after 'NOTATION'\n");
+ return(0);
+ }
+ SKIP_BLANKS;
+ *tree = xmlParseNotationType(ctxt);
+ if (*tree == NULL) return(0);
+ return(XML_ATTRIBUTE_NOTATION);
+ }
+ *tree = xmlParseEnumerationType(ctxt);
+ if (*tree == NULL) return(0);
+ return(XML_ATTRIBUTE_ENUMERATION);
+}
+
+/**
+ * xmlParseAttributeType:
+ * @ctxt: an XML parser context
+ * @tree: the enumeration tree built while parsing
+ *
+ * parse the Attribute list def for an element
+ *
+ * [54] AttType ::= StringType | TokenizedType | EnumeratedType
+ *
+ * [55] StringType ::= 'CDATA'
+ *
+ * [56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' |
+ * 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'
+ *
+ * Validity constraints for attribute values syntax are checked in
+ * xmlValidateAttributeValue()
+ *
+ * [ VC: ID ]
+ * Values of type ID must match the Name production. A name must not
+ * appear more than once in an XML document as a value of this type;
+ * i.e., ID values must uniquely identify the elements which bear them.
+ *
+ * [ VC: One ID per Element Type ]
+ * No element type may have more than one ID attribute specified.
+ *
+ * [ VC: ID Attribute Default ]
+ * An ID attribute must have a declared default of #IMPLIED or #REQUIRED.
+ *
+ * [ VC: IDREF ]
+ * Values of type IDREF must match the Name production, and values
+ * of type IDREFS must match Names; each IDREF Name must match the value
+ * of an ID attribute on some element in the XML document; i.e. IDREF
+ * values must match the value of some ID attribute.
+ *
+ * [ VC: Entity Name ]
+ * Values of type ENTITY must match the Name production, values
+ * of type ENTITIES must match Names; each Entity Name must match the
+ * name of an unparsed entity declared in the DTD.
+ *
+ * [ VC: Name Token ]
+ * Values of type NMTOKEN must match the Nmtoken production; values
+ * of type NMTOKENS must match Nmtokens.
+ *
+ * Returns the attribute type
+ */
+int
+xmlParseAttributeType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree) {
+ SHRINK;
+ if (CMP5(CUR_PTR, 'C', 'D', 'A', 'T', 'A')) {
+ SKIP(5);
+ return(XML_ATTRIBUTE_CDATA);
+ } else if (CMP6(CUR_PTR, 'I', 'D', 'R', 'E', 'F', 'S')) {
+ SKIP(6);
+ return(XML_ATTRIBUTE_IDREFS);
+ } else if (CMP5(CUR_PTR, 'I', 'D', 'R', 'E', 'F')) {
+ SKIP(5);
+ return(XML_ATTRIBUTE_IDREF);
+ } else if ((RAW == 'I') && (NXT(1) == 'D')) {
+ SKIP(2);
+ return(XML_ATTRIBUTE_ID);
+ } else if (CMP6(CUR_PTR, 'E', 'N', 'T', 'I', 'T', 'Y')) {
+ SKIP(6);
+ return(XML_ATTRIBUTE_ENTITY);
+ } else if (CMP8(CUR_PTR, 'E', 'N', 'T', 'I', 'T', 'I', 'E', 'S')) {
+ SKIP(8);
+ return(XML_ATTRIBUTE_ENTITIES);
+ } else if (CMP8(CUR_PTR, 'N', 'M', 'T', 'O', 'K', 'E', 'N', 'S')) {
+ SKIP(8);
+ return(XML_ATTRIBUTE_NMTOKENS);
+ } else if (CMP7(CUR_PTR, 'N', 'M', 'T', 'O', 'K', 'E', 'N')) {
+ SKIP(7);
+ return(XML_ATTRIBUTE_NMTOKEN);
+ }
+ return(xmlParseEnumeratedType(ctxt, tree));
+}
+
+/**
+ * xmlParseAttributeListDecl:
+ * @ctxt: an XML parser context
+ *
+ * : parse the Attribute list def for an element
+ *
+ * [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'
+ *
+ * [53] AttDef ::= S Name S AttType S DefaultDecl
+ *
+ */
+void
+xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt) {
+ const xmlChar *elemName;
+ const xmlChar *attrName;
+ xmlEnumerationPtr tree;
+
+ if (CMP9(CUR_PTR, '<', '!', 'A', 'T', 'T', 'L', 'I', 'S', 'T')) {
+ xmlParserInputPtr input = ctxt->input;
+
+ SKIP(9);
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after '<!ATTLIST'\n");
+ }
+ SKIP_BLANKS;
+ elemName = xmlParseName(ctxt);
+ if (elemName == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "ATTLIST: no name for Element\n");
+ return;
+ }
+ SKIP_BLANKS;
+ GROW;
+ while (RAW != '>') {
+ const xmlChar *check = CUR_PTR;
+ int type;
+ int def;
+ xmlChar *defaultValue = NULL;
+
+ GROW;
+ tree = NULL;
+ attrName = xmlParseName(ctxt);
+ if (attrName == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "ATTLIST: no name for Attribute\n");
+ break;
+ }
+ GROW;
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after the attribute name\n");
+ if (defaultValue != NULL)
+ xmlFree(defaultValue);
+ break;
+ }
+ SKIP_BLANKS;
+
+ type = xmlParseAttributeType(ctxt, &tree);
+ if (type <= 0) {
+ if (defaultValue != NULL)
+ xmlFree(defaultValue);
+ break;
+ }
+
+ GROW;
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after the attribute type\n");
+ if (defaultValue != NULL)
+ xmlFree(defaultValue);
+ if (tree != NULL)
+ xmlFreeEnumeration(tree);
+ break;
+ }
+ SKIP_BLANKS;
+
+ def = xmlParseDefaultDecl(ctxt, &defaultValue);
+ if (def <= 0) {
+ if (defaultValue != NULL)
+ xmlFree(defaultValue);
+ if (tree != NULL)
+ xmlFreeEnumeration(tree);
+ break;
+ }
+
+ GROW;
+ if (RAW != '>') {
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after the attribute default value\n");
+ if (defaultValue != NULL)
+ xmlFree(defaultValue);
+ if (tree != NULL)
+ xmlFreeEnumeration(tree);
+ break;
+ }
+ SKIP_BLANKS;
+ }
+ if (check == CUR_PTR) {
+ xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "in xmlParseAttributeListDecl\n");
+ if (defaultValue != NULL)
+ xmlFree(defaultValue);
+ if (tree != NULL)
+ xmlFreeEnumeration(tree);
+ break;
+ }
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
+ (ctxt->sax->attributeDecl != NULL))
+ ctxt->sax->attributeDecl(ctxt->userData, elemName, attrName,
+ type, def, defaultValue, tree);
+ else if (tree != NULL)
+ xmlFreeEnumeration(tree);
+
+ if ((ctxt->sax2) && (defaultValue != NULL) &&
+ (def != XML_ATTRIBUTE_IMPLIED) &&
+ (def != XML_ATTRIBUTE_REQUIRED)) {
+ xmlAddDefAttrs(ctxt, elemName, attrName, defaultValue);
+ }
+ if ((ctxt->sax2) && (type != XML_ATTRIBUTE_CDATA)) {
+ xmlAddSpecialAttr(ctxt, elemName, attrName, type);
+ }
+ if (defaultValue != NULL)
+ xmlFree(defaultValue);
+ GROW;
+ }
+ if (RAW == '>') {
+ if (input != ctxt->input) {
+ xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
+ "Attribute list declaration doesn't start and stop in the same entity\n");
+ }
+ NEXT;
+ }
+ }
+}
+
+/**
+ * xmlParseElementMixedContentDecl:
+ * @ctxt: an XML parser context
+ * @inputchk: the input used for the current entity, needed for boundary checks
+ *
+ * parse the declaration for a Mixed Element content
+ * The leading '(' and spaces have been skipped in xmlParseElementContentDecl
+ *
+ * [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' |
+ * '(' S? '#PCDATA' S? ')'
+ *
+ * [ VC: Proper Group/PE Nesting ] applies to [51] too (see [49])
+ *
+ * [ VC: No Duplicate Types ]
+ * The same name must not appear more than once in a single
+ * mixed-content declaration.
+ *
+ * returns: the list of the xmlElementContentPtr describing the element choices
+ */
+xmlElementContentPtr
+xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt, int inputchk) {
+ xmlElementContentPtr ret = NULL, cur = NULL, n;
+ const xmlChar *elem = NULL;
+
+ GROW;
+ if (CMP7(CUR_PTR, '#', 'P', 'C', 'D', 'A', 'T', 'A')) {
+ SKIP(7);
+ SKIP_BLANKS;
+ SHRINK;
+ if (RAW == ')') {
+ if ((ctxt->validate) && (ctxt->input->id != inputchk)) {
+ xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
+"Element content declaration doesn't start and stop in the same entity\n",
+ NULL);
+ }
+ NEXT;
+ ret = xmlNewElementContent(NULL, XML_ELEMENT_CONTENT_PCDATA);
+ if (RAW == '*') {
+ ret->ocur = XML_ELEMENT_CONTENT_MULT;
+ NEXT;
+ }
+ return(ret);
+ }
+ if ((RAW == '(') || (RAW == '|')) {
+ ret = cur = xmlNewElementContent(NULL, XML_ELEMENT_CONTENT_PCDATA);
+ if (ret == NULL) return(NULL);
+ }
+ while (RAW == '|') {
+ NEXT;
+ if (elem == NULL) {
+ ret = xmlNewElementContent(NULL, XML_ELEMENT_CONTENT_OR);
+ if (ret == NULL) return(NULL);
+ ret->c1 = cur;
+ if (cur != NULL)
+ cur->parent = ret;
+ cur = ret;
+ } else {
+ n = xmlNewElementContent(NULL, XML_ELEMENT_CONTENT_OR);
+ if (n == NULL) return(NULL);
+ n->c1 = xmlNewElementContent(elem, XML_ELEMENT_CONTENT_ELEMENT);
+ if (n->c1 != NULL)
+ n->c1->parent = n;
+ cur->c2 = n;
+ if (n != NULL)
+ n->parent = cur;
+ cur = n;
+ }
+ SKIP_BLANKS;
+ elem = xmlParseName(ctxt);
+ if (elem == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "xmlParseElementMixedContentDecl : Name expected\n");
+ xmlFreeElementContent(cur);
+ return(NULL);
+ }
+ SKIP_BLANKS;
+ GROW;
+ }
+ if ((RAW == ')') && (NXT(1) == '*')) {
+ if (elem != NULL) {
+ cur->c2 = xmlNewElementContent(elem,
+ XML_ELEMENT_CONTENT_ELEMENT);
+ if (cur->c2 != NULL)
+ cur->c2->parent = cur;
+ }
+ ret->ocur = XML_ELEMENT_CONTENT_MULT;
+ if ((ctxt->validate) && (ctxt->input->id != inputchk)) {
+ xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
+"Element content declaration doesn't start and stop in the same entity\n",
+ NULL);
+ }
+ SKIP(2);
+ } else {
+ xmlFreeElementContent(ret);
+ xmlFatalErr(ctxt, XML_ERR_MIXED_NOT_STARTED, NULL);
+ return(NULL);
+ }
+
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_PCDATA_REQUIRED, NULL);
+ }
+ return(ret);
+}
+
+/**
+ * xmlParseElementChildrenContentDecl:
+ * @ctxt: an XML parser context
+ * @inputchk: the input used for the current entity, needed for boundary checks
+ *
+ * parse the declaration for a Mixed Element content
+ * The leading '(' and spaces have been skipped in xmlParseElementContentDecl
+ *
+ *
+ * [47] children ::= (choice | seq) ('?' | '*' | '+')?
+ *
+ * [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?
+ *
+ * [49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')'
+ *
+ * [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'
+ *
+ * [ VC: Proper Group/PE Nesting ] applies to [49] and [50]
+ * TODO Parameter-entity replacement text must be properly nested
+ * with parenthesized groups. That is to say, if either of the
+ * opening or closing parentheses in a choice, seq, or Mixed
+ * construct is contained in the replacement text for a parameter
+ * entity, both must be contained in the same replacement text. For
+ * interoperability, if a parameter-entity reference appears in a
+ * choice, seq, or Mixed construct, its replacement text should not
+ * be empty, and neither the first nor last non-blank character of
+ * the replacement text should be a connector (| or ,).
+ *
+ * Returns the tree of xmlElementContentPtr describing the element
+ * hierarchy.
+ */
+xmlElementContentPtr
+xmlParseElementChildrenContentDecl (xmlParserCtxtPtr ctxt, int inputchk) {
+ xmlElementContentPtr ret = NULL, cur = NULL, last = NULL, op = NULL;
+ const xmlChar *elem;
+ xmlChar type = 0;
+
+ SKIP_BLANKS;
+ GROW;
+ if (RAW == '(') {
+ int inputid = ctxt->input->id;
+
+ /* Recurse on first child */
+ NEXT;
+ SKIP_BLANKS;
+ cur = ret = xmlParseElementChildrenContentDecl(ctxt, inputid);
+ SKIP_BLANKS;
+ GROW;
+ } else {
+ elem = xmlParseName(ctxt);
+ if (elem == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED, NULL);
+ return(NULL);
+ }
+ cur = ret = xmlNewElementContent(elem, XML_ELEMENT_CONTENT_ELEMENT);
+ if (cur == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ GROW;
+ if (RAW == '?') {
+ cur->ocur = XML_ELEMENT_CONTENT_OPT;
+ NEXT;
+ } else if (RAW == '*') {
+ cur->ocur = XML_ELEMENT_CONTENT_MULT;
+ NEXT;
+ } else if (RAW == '+') {
+ cur->ocur = XML_ELEMENT_CONTENT_PLUS;
+ NEXT;
+ } else {
+ cur->ocur = XML_ELEMENT_CONTENT_ONCE;
+ }
+ GROW;
+ }
+ SKIP_BLANKS;
+ SHRINK;
+ while (RAW != ')') {
+ /*
+ * Each loop we parse one separator and one element.
+ */
+ if (RAW == ',') {
+ if (type == 0) type = CUR;
+
+ /*
+ * Detect "Name | Name , Name" error
+ */
+ else if (type != CUR) {
+ xmlFatalErrMsgInt(ctxt, XML_ERR_SEPARATOR_REQUIRED,
+ "xmlParseElementChildrenContentDecl : '%c' expected\n",
+ type);
+ if ((last != NULL) && (last != ret))
+ xmlFreeElementContent(last);
+ if (ret != NULL)
+ xmlFreeElementContent(ret);
+ return(NULL);
+ }
+ NEXT;
+
+ op = xmlNewElementContent(NULL, XML_ELEMENT_CONTENT_SEQ);
+ if (op == NULL) {
+ if ((last != NULL) && (last != ret))
+ xmlFreeElementContent(last);
+ xmlFreeElementContent(ret);
+ return(NULL);
+ }
+ if (last == NULL) {
+ op->c1 = ret;
+ if (ret != NULL)
+ ret->parent = op;
+ ret = cur = op;
+ } else {
+ cur->c2 = op;
+ if (op != NULL)
+ op->parent = cur;
+ op->c1 = last;
+ if (last != NULL)
+ last->parent = op;
+ cur =op;
+ last = NULL;
+ }
+ } else if (RAW == '|') {
+ if (type == 0) type = CUR;
+
+ /*
+ * Detect "Name , Name | Name" error
+ */
+ else if (type != CUR) {
+ xmlFatalErrMsgInt(ctxt, XML_ERR_SEPARATOR_REQUIRED,
+ "xmlParseElementChildrenContentDecl : '%c' expected\n",
+ type);
+ if ((last != NULL) && (last != ret))
+ xmlFreeElementContent(last);
+ if (ret != NULL)
+ xmlFreeElementContent(ret);
+ return(NULL);
+ }
+ NEXT;
+
+ op = xmlNewElementContent(NULL, XML_ELEMENT_CONTENT_OR);
+ if (op == NULL) {
+ if ((last != NULL) && (last != ret))
+ xmlFreeElementContent(last);
+ if (ret != NULL)
+ xmlFreeElementContent(ret);
+ return(NULL);
+ }
+ if (last == NULL) {
+ op->c1 = ret;
+ if (ret != NULL)
+ ret->parent = op;
+ ret = cur = op;
+ } else {
+ cur->c2 = op;
+ if (op != NULL)
+ op->parent = cur;
+ op->c1 = last;
+ if (last != NULL)
+ last->parent = op;
+ cur =op;
+ last = NULL;
+ }
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_ELEMCONTENT_NOT_FINISHED, NULL);
+ if (ret != NULL)
+ xmlFreeElementContent(ret);
+ return(NULL);
+ }
+ GROW;
+ SKIP_BLANKS;
+ GROW;
+ if (RAW == '(') {
+ int inputid = ctxt->input->id;
+ /* Recurse on second child */
+ NEXT;
+ SKIP_BLANKS;
+ last = xmlParseElementChildrenContentDecl(ctxt, inputid);
+ SKIP_BLANKS;
+ } else {
+ elem = xmlParseName(ctxt);
+ if (elem == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED, NULL);
+ if (ret != NULL)
+ xmlFreeElementContent(ret);
+ return(NULL);
+ }
+ last = xmlNewElementContent(elem, XML_ELEMENT_CONTENT_ELEMENT);
+ if (RAW == '?') {
+ last->ocur = XML_ELEMENT_CONTENT_OPT;
+ NEXT;
+ } else if (RAW == '*') {
+ last->ocur = XML_ELEMENT_CONTENT_MULT;
+ NEXT;
+ } else if (RAW == '+') {
+ last->ocur = XML_ELEMENT_CONTENT_PLUS;
+ NEXT;
+ } else {
+ last->ocur = XML_ELEMENT_CONTENT_ONCE;
+ }
+ }
+ SKIP_BLANKS;
+ GROW;
+ }
+ if ((cur != NULL) && (last != NULL)) {
+ cur->c2 = last;
+ if (last != NULL)
+ last->parent = cur;
+ }
+ if ((ctxt->validate) && (ctxt->input->id != inputchk)) {
+ xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
+"Element content declaration doesn't start and stop in the same entity\n",
+ NULL);
+ }
+ NEXT;
+ if (RAW == '?') {
+ if (ret != NULL)
+ ret->ocur = XML_ELEMENT_CONTENT_OPT;
+ NEXT;
+ } else if (RAW == '*') {
+ if (ret != NULL) {
+ ret->ocur = XML_ELEMENT_CONTENT_MULT;
+ cur = ret;
+ /*
+ * Some normalization:
+ * (a | b* | c?)* == (a | b | c)*
+ */
+ while (cur->type == XML_ELEMENT_CONTENT_OR) {
+ if ((cur->c1 != NULL) &&
+ ((cur->c1->ocur == XML_ELEMENT_CONTENT_OPT) ||
+ (cur->c1->ocur == XML_ELEMENT_CONTENT_MULT)))
+ cur->c1->ocur = XML_ELEMENT_CONTENT_ONCE;
+ if ((cur->c2 != NULL) &&
+ ((cur->c2->ocur == XML_ELEMENT_CONTENT_OPT) ||
+ (cur->c2->ocur == XML_ELEMENT_CONTENT_MULT)))
+ cur->c2->ocur = XML_ELEMENT_CONTENT_ONCE;
+ cur = cur->c2;
+ }
+ }
+ NEXT;
+ } else if (RAW == '+') {
+ if (ret != NULL) {
+ int found = 0;
+
+ ret->ocur = XML_ELEMENT_CONTENT_PLUS;
+ /*
+ * Some normalization:
+ * (a | b*)+ == (a | b)*
+ * (a | b?)+ == (a | b)*
+ */
+ while (cur->type == XML_ELEMENT_CONTENT_OR) {
+ if ((cur->c1 != NULL) &&
+ ((cur->c1->ocur == XML_ELEMENT_CONTENT_OPT) ||
+ (cur->c1->ocur == XML_ELEMENT_CONTENT_MULT))) {
+ cur->c1->ocur = XML_ELEMENT_CONTENT_ONCE;
+ found = 1;
+ }
+ if ((cur->c2 != NULL) &&
+ ((cur->c2->ocur == XML_ELEMENT_CONTENT_OPT) ||
+ (cur->c2->ocur == XML_ELEMENT_CONTENT_MULT))) {
+ cur->c2->ocur = XML_ELEMENT_CONTENT_ONCE;
+ found = 1;
+ }
+ cur = cur->c2;
+ }
+ if (found)
+ ret->ocur = XML_ELEMENT_CONTENT_MULT;
+ }
+ NEXT;
+ }
+ return(ret);
+}
+
+/**
+ * xmlParseElementContentDecl:
+ * @ctxt: an XML parser context
+ * @name: the name of the element being defined.
+ * @result: the Element Content pointer will be stored here if any
+ *
+ * parse the declaration for an Element content either Mixed or Children,
+ * the cases EMPTY and ANY are handled directly in xmlParseElementDecl
+ *
+ * [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children
+ *
+ * returns: the type of element content XML_ELEMENT_TYPE_xxx
+ */
+
+int
+xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, const xmlChar *name,
+ xmlElementContentPtr *result) {
+
+ xmlElementContentPtr tree = NULL;
+ int inputid = ctxt->input->id;
+ int res;
+
+ *result = NULL;
+
+ if (RAW != '(') {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED,
+ "xmlParseElementContentDecl : %s '(' expected\n", name);
+ return(-1);
+ }
+ NEXT;
+ GROW;
+ SKIP_BLANKS;
+ if (CMP7(CUR_PTR, '#', 'P', 'C', 'D', 'A', 'T', 'A')) {
+ tree = xmlParseElementMixedContentDecl(ctxt, inputid);
+ res = XML_ELEMENT_TYPE_MIXED;
+ } else {
+ tree = xmlParseElementChildrenContentDecl(ctxt, inputid);
+ res = XML_ELEMENT_TYPE_ELEMENT;
+ }
+ SKIP_BLANKS;
+ *result = tree;
+ return(res);
+}
+
+/**
+ * xmlParseElementDecl:
+ * @ctxt: an XML parser context
+ *
+ * parse an Element declaration.
+ *
+ * [45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'
+ *
+ * [ VC: Unique Element Type Declaration ]
+ * No element type may be declared more than once
+ *
+ * Returns the type of the element, or -1 in case of error
+ */
+int
+xmlParseElementDecl(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ int ret = -1;
+ xmlElementContentPtr content = NULL;
+
+ GROW;
+ if (CMP9(CUR_PTR, '<', '!', 'E', 'L', 'E', 'M', 'E', 'N', 'T')) {
+ xmlParserInputPtr input = ctxt->input;
+
+ SKIP(9);
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after 'ELEMENT'\n");
+ }
+ SKIP_BLANKS;
+ name = xmlParseName(ctxt);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "xmlParseElementDecl: no name for Element\n");
+ return(-1);
+ }
+ while ((RAW == 0) && (ctxt->inputNr > 1))
+ xmlPopInput(ctxt);
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space required after the element name\n");
+ }
+ SKIP_BLANKS;
+ if (CMP5(CUR_PTR, 'E', 'M', 'P', 'T', 'Y')) {
+ SKIP(5);
+ /*
+ * Element must always be empty.
+ */
+ ret = XML_ELEMENT_TYPE_EMPTY;
+ } else if ((RAW == 'A') && (NXT(1) == 'N') &&
+ (NXT(2) == 'Y')) {
+ SKIP(3);
+ /*
+ * Element is a generic container.
+ */
+ ret = XML_ELEMENT_TYPE_ANY;
+ } else if (RAW == '(') {
+ ret = xmlParseElementContentDecl(ctxt, name, &content);
+ } else {
+ /*
+ * [ WFC: PEs in Internal Subset ] error handling.
+ */
+ if ((RAW == '%') && (ctxt->external == 0) &&
+ (ctxt->inputNr == 1)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_PEREF_IN_INT_SUBSET,
+ "PEReference: forbidden within markup decl in internal subset\n");
+ } else {
+ xmlFatalErrMsg(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED,
+ "xmlParseElementDecl: 'EMPTY', 'ANY' or '(' expected\n");
+ }
+ return(-1);
+ }
+
+ SKIP_BLANKS;
+ /*
+ * Pop-up of finished entities.
+ */
+ while ((RAW == 0) && (ctxt->inputNr > 1))
+ xmlPopInput(ctxt);
+ SKIP_BLANKS;
+
+ if (RAW != '>') {
+ xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL);
+ } else {
+ if (input != ctxt->input) {
+ xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
+ "Element declaration doesn't start and stop in the same entity\n");
+ }
+
+ NEXT;
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
+ (ctxt->sax->elementDecl != NULL))
+ ctxt->sax->elementDecl(ctxt->userData, name, ret,
+ content);
+ }
+ if (content != NULL) {
+ xmlFreeElementContent(content);
+ }
+ }
+ return(ret);
+}
+
+/**
+ * xmlParseConditionalSections
+ * @ctxt: an XML parser context
+ *
+ * [61] conditionalSect ::= includeSect | ignoreSect
+ * [62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>'
+ * [63] ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'
+ * [64] ignoreSectContents ::= Ignore ('<![' ignoreSectContents ']]>' Ignore)*
+ * [65] Ignore ::= Char* - (Char* ('<![' | ']]>') Char*)
+ */
+
+static void
+xmlParseConditionalSections(xmlParserCtxtPtr ctxt) {
+ SKIP(3);
+ SKIP_BLANKS;
+ if (CMP7(CUR_PTR, 'I', 'N', 'C', 'L', 'U', 'D', 'E')) {
+ SKIP(7);
+ SKIP_BLANKS;
+ if (RAW != '[') {
+ xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID, NULL);
+ } else {
+ NEXT;
+ }
+ if (xmlParserDebugEntities) {
+ if ((ctxt->input != NULL) && (ctxt->input->filename))
+ xmlGenericError(xmlGenericErrorContext,
+ "%s(%d): ", ctxt->input->filename,
+ ctxt->input->line);
+ xmlGenericError(xmlGenericErrorContext,
+ "Entering INCLUDE Conditional Section\n");
+ }
+
+ while ((RAW != 0) && ((RAW != ']') || (NXT(1) != ']') ||
+ (NXT(2) != '>'))) {
+ const xmlChar *check = CUR_PTR;
+ unsigned int cons = ctxt->input->consumed;
+
+ if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) {
+ xmlParseConditionalSections(ctxt);
+ } else if (IS_BLANK_CH(CUR)) {
+ NEXT;
+ } else if (RAW == '%') {
+ xmlParsePEReference(ctxt);
+ } else
+ xmlParseMarkupDecl(ctxt);
+
+ /*
+ * Pop-up of finished entities.
+ */
+ while ((RAW == 0) && (ctxt->inputNr > 1))
+ xmlPopInput(ctxt);
+
+ if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) {
+ xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL);
+ break;
+ }
+ }
+ if (xmlParserDebugEntities) {
+ if ((ctxt->input != NULL) && (ctxt->input->filename))
+ xmlGenericError(xmlGenericErrorContext,
+ "%s(%d): ", ctxt->input->filename,
+ ctxt->input->line);
+ xmlGenericError(xmlGenericErrorContext,
+ "Leaving INCLUDE Conditional Section\n");
+ }
+
+ } else if (CMP6(CUR_PTR, 'I', 'G', 'N', 'O', 'R', 'E')) {
+ int state;
+ xmlParserInputState instate;
+ int depth = 0;
+
+ SKIP(6);
+ SKIP_BLANKS;
+ if (RAW != '[') {
+ xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID, NULL);
+ } else {
+ NEXT;
+ }
+ if (xmlParserDebugEntities) {
+ if ((ctxt->input != NULL) && (ctxt->input->filename))
+ xmlGenericError(xmlGenericErrorContext,
+ "%s(%d): ", ctxt->input->filename,
+ ctxt->input->line);
+ xmlGenericError(xmlGenericErrorContext,
+ "Entering IGNORE Conditional Section\n");
+ }
+
+ /*
+ * Parse up to the end of the conditional section
+ * But disable SAX event generating DTD building in the meantime
+ */
+ state = ctxt->disableSAX;
+ instate = ctxt->instate;
+ if (ctxt->recovery == 0) ctxt->disableSAX = 1;
+ ctxt->instate = XML_PARSER_IGNORE;
+
+ while ((depth >= 0) && (RAW != 0)) {
+ if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) {
+ depth++;
+ SKIP(3);
+ continue;
+ }
+ if ((RAW == ']') && (NXT(1) == ']') && (NXT(2) == '>')) {
+ if (--depth >= 0) SKIP(3);
+ continue;
+ }
+ NEXT;
+ continue;
+ }
+
+ ctxt->disableSAX = state;
+ ctxt->instate = instate;
+
+ if (xmlParserDebugEntities) {
+ if ((ctxt->input != NULL) && (ctxt->input->filename))
+ xmlGenericError(xmlGenericErrorContext,
+ "%s(%d): ", ctxt->input->filename,
+ ctxt->input->line);
+ xmlGenericError(xmlGenericErrorContext,
+ "Leaving IGNORE Conditional Section\n");
+ }
+
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID_KEYWORD, NULL);
+ }
+
+ if (RAW == 0)
+ SHRINK;
+
+ if (RAW == 0) {
+ xmlFatalErr(ctxt, XML_ERR_CONDSEC_NOT_FINISHED, NULL);
+ } else {
+ SKIP(3);
+ }
+}
+
+/**
+ * xmlParseMarkupDecl:
+ * @ctxt: an XML parser context
+ *
+ * parse Markup declarations
+ *
+ * [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl |
+ * NotationDecl | PI | Comment
+ *
+ * [ VC: Proper Declaration/PE Nesting ]
+ * Parameter-entity replacement text must be properly nested with
+ * markup declarations. That is to say, if either the first character
+ * or the last character of a markup declaration (markupdecl above) is
+ * contained in the replacement text for a parameter-entity reference,
+ * both must be contained in the same replacement text.
+ *
+ * [ WFC: PEs in Internal Subset ]
+ * In the internal DTD subset, parameter-entity references can occur
+ * only where markup declarations can occur, not within markup declarations.
+ * (This does not apply to references that occur in external parameter
+ * entities or to the external subset.)
+ */
+void
+xmlParseMarkupDecl(xmlParserCtxtPtr ctxt) {
+ GROW;
+ xmlParseElementDecl(ctxt);
+ xmlParseAttributeListDecl(ctxt);
+ xmlParseEntityDecl(ctxt);
+ xmlParseNotationDecl(ctxt);
+ xmlParsePI(ctxt);
+ xmlParseComment(ctxt);
+ /*
+ * This is only for internal subset. On external entities,
+ * the replacement is done before parsing stage
+ */
+ if ((ctxt->external == 0) && (ctxt->inputNr == 1))
+ xmlParsePEReference(ctxt);
+
+ /*
+ * Conditional sections are allowed from entities included
+ * by PE References in the internal subset.
+ */
+ if ((ctxt->external == 0) && (ctxt->inputNr > 1)) {
+ if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) {
+ xmlParseConditionalSections(ctxt);
+ }
+ }
+
+ ctxt->instate = XML_PARSER_DTD;
+}
+
+/**
+ * xmlParseTextDecl:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML declaration header for external entities
+ *
+ * [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'
+ *
+ * Question: Seems that EncodingDecl is mandatory ? Is that a typo ?
+ */
+
+void
+xmlParseTextDecl(xmlParserCtxtPtr ctxt) {
+ xmlChar *version;
+ const xmlChar *encoding;
+
+ /*
+ * We know that '<?xml' is here.
+ */
+ if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
+ SKIP(5);
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_STARTED, NULL);
+ return;
+ }
+
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space needed after '<?xml'\n");
+ }
+ SKIP_BLANKS;
+
+ /*
+ * We may have the VersionInfo here.
+ */
+ version = xmlParseVersionInfo(ctxt);
+ if (version == NULL)
+ version = xmlCharStrdup(XML_DEFAULT_VERSION);
+ else {
+ if (!IS_BLANK_CH(CUR)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Space needed here\n");
+ }
+ }
+ ctxt->input->version = version;
+
+ /*
+ * We must have the encoding declaration
+ */
+ encoding = xmlParseEncodingDecl(ctxt);
+ if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
+ /*
+ * The XML REC instructs us to stop parsing right here
+ */
+ return;
+ }
+ if ((encoding == NULL) && (ctxt->errNo == XML_ERR_OK)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_MISSING_ENCODING,
+ "Missing encoding in text declaration\n");
+ }
+
+ SKIP_BLANKS;
+ if ((RAW == '?') && (NXT(1) == '>')) {
+ SKIP(2);
+ } else if (RAW == '>') {
+ /* Deprecated old WD ... */
+ xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL);
+ NEXT;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL);
+ MOVETO_ENDTAG(CUR_PTR);
+ NEXT;
+ }
+}
+
+/**
+ * xmlParseExternalSubset:
+ * @ctxt: an XML parser context
+ * @ExternalID: the external identifier
+ * @SystemID: the system identifier (or URL)
+ *
+ * parse Markup declarations from an external subset
+ *
+ * [30] extSubset ::= textDecl? extSubsetDecl
+ *
+ * [31] extSubsetDecl ::= (markupdecl | conditionalSect | PEReference | S) *
+ */
+void
+xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const xmlChar *ExternalID,
+ const xmlChar *SystemID) {
+ xmlDetectSAX2(ctxt);
+ GROW;
+ if (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) {
+ xmlParseTextDecl(ctxt);
+ if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
+ /*
+ * The XML REC instructs us to stop parsing right here
+ */
+ ctxt->instate = XML_PARSER_EOF;
+ return;
+ }
+ }
+ if (ctxt->myDoc == NULL) {
+ ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0");
+ }
+ if ((ctxt->myDoc != NULL) && (ctxt->myDoc->intSubset == NULL))
+ xmlCreateIntSubset(ctxt->myDoc, NULL, ExternalID, SystemID);
+
+ ctxt->instate = XML_PARSER_DTD;
+ ctxt->external = 1;
+ while (((RAW == '<') && (NXT(1) == '?')) ||
+ ((RAW == '<') && (NXT(1) == '!')) ||
+ (RAW == '%') || IS_BLANK_CH(CUR)) {
+ const xmlChar *check = CUR_PTR;
+ unsigned int cons = ctxt->input->consumed;
+
+ GROW;
+ if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) {
+ xmlParseConditionalSections(ctxt);
+ } else if (IS_BLANK_CH(CUR)) {
+ NEXT;
+ } else if (RAW == '%') {
+ xmlParsePEReference(ctxt);
+ } else
+ xmlParseMarkupDecl(ctxt);
+
+ /*
+ * Pop-up of finished entities.
+ */
+ while ((RAW == 0) && (ctxt->inputNr > 1))
+ xmlPopInput(ctxt);
+
+ if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) {
+ xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL);
+ break;
+ }
+ }
+
+ if (RAW != 0) {
+ xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL);
+ }
+
+}
+
+/**
+ * xmlParseReference:
+ * @ctxt: an XML parser context
+ *
+ * parse and handle entity references in content, depending on the SAX
+ * interface, this may end-up in a call to character() if this is a
+ * CharRef, a predefined entity, if there is no reference() callback.
+ * or if the parser was asked to switch to that mode.
+ *
+ * [67] Reference ::= EntityRef | CharRef
+ */
+void
+xmlParseReference(xmlParserCtxtPtr ctxt) {
+ xmlEntityPtr ent;
+ xmlChar *val;
+ if (RAW != '&') return;
+
+ if (NXT(1) == '#') {
+ int i = 0;
+ xmlChar out[10];
+ int hex = NXT(2);
+ int value = xmlParseCharRef(ctxt);
+
+ if (ctxt->charset != XML_CHAR_ENCODING_UTF8) {
+ /*
+ * So we are using non-UTF-8 buffers
+ * Check that the char fit on 8bits, if not
+ * generate a CharRef.
+ */
+ if (value <= 0xFF) {
+ out[0] = value;
+ out[1] = 0;
+ if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->characters(ctxt->userData, out, 1);
+ } else {
+ if ((hex == 'x') || (hex == 'X'))
+ snprintf((char *)out, sizeof(out), "#x%X", value);
+ else
+ snprintf((char *)out, sizeof(out), "#%d", value);
+ if ((ctxt->sax != NULL) && (ctxt->sax->reference != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->reference(ctxt->userData, out);
+ }
+ } else {
+ /*
+ * Just encode the value in UTF-8
+ */
+ COPY_BUF(0 ,out, i, value);
+ out[i] = 0;
+ if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->characters(ctxt->userData, out, i);
+ }
+ } else {
+ ent = xmlParseEntityRef(ctxt);
+ if (ent == NULL) return;
+ if (!ctxt->wellFormed)
+ return;
+ if ((ent->name != NULL) &&
+ (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY)) {
+ xmlNodePtr list = NULL;
+ xmlParserErrors ret = XML_ERR_OK;
+
+
+ /*
+ * The first reference to the entity trigger a parsing phase
+ * where the ent->children is filled with the result from
+ * the parsing.
+ */
+ if (ent->children == NULL) {
+ xmlChar *value;
+ value = ent->content;
+
+ /*
+ * Check that this entity is well formed
+ */
+ if ((value != NULL) && (value[0] != 0) &&
+ (value[1] == 0) && (value[0] == '<') &&
+ (xmlStrEqual(ent->name, BAD_CAST "lt"))) {
+ /*
+ * DONE: get definite answer on this !!!
+ * Lots of entity decls are used to declare a single
+ * char
+ * <!ENTITY lt "<">
+ * Which seems to be valid since
+ * 2.4: The ampersand character (&) and the left angle
+ * bracket (<) may appear in their literal form only
+ * when used ... They are also legal within the literal
+ * entity value of an internal entity declaration;i
+ * see "4.3.2 Well-Formed Parsed Entities".
+ * IMHO 2.4 and 4.3.2 are directly in contradiction.
+ * Looking at the OASIS test suite and James Clark
+ * tests, this is broken. However the XML REC uses
+ * it. Is the XML REC not well-formed ????
+ * This is a hack to avoid this problem
+ *
+ * ANSWER: since lt gt amp .. are already defined,
+ * this is a redefinition and hence the fact that the
+ * content is not well balanced is not a Wf error, this
+ * is lousy but acceptable.
+ */
+ list = xmlNewDocText(ctxt->myDoc, value);
+ if (list != NULL) {
+ if ((ent->etype == XML_INTERNAL_GENERAL_ENTITY) &&
+ (ent->children == NULL)) {
+ ent->children = list;
+ ent->last = list;
+ ent->owner = 1;
+ list->parent = (xmlNodePtr) ent;
+ } else {
+ xmlFreeNodeList(list);
+ }
+ } else if (list != NULL) {
+ xmlFreeNodeList(list);
+ }
+ } else {
+ /*
+ * 4.3.2: An internal general parsed entity is well-formed
+ * if its replacement text matches the production labeled
+ * content.
+ */
+
+ void *user_data;
+ /*
+ * This is a bit hackish but this seems the best
+ * way to make sure both SAX and DOM entity support
+ * behaves okay.
+ */
+ if (ctxt->userData == ctxt)
+ user_data = NULL;
+ else
+ user_data = ctxt->userData;
+
+ if (ent->etype == XML_INTERNAL_GENERAL_ENTITY) {
+ ctxt->depth++;
+ ret = xmlParseBalancedChunkMemoryInternal(ctxt,
+ value, user_data, &list);
+ ctxt->depth--;
+ } else if (ent->etype ==
+ XML_EXTERNAL_GENERAL_PARSED_ENTITY) {
+ ctxt->depth++;
+ ret = xmlParseExternalEntityPrivate(ctxt->myDoc, ctxt,
+ ctxt->sax, user_data, ctxt->depth,
+ ent->URI, ent->ExternalID, &list);
+ ctxt->depth--;
+ } else {
+ ret = XML_ERR_ENTITY_PE_INTERNAL;
+ xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "invalid entity type found\n", NULL);
+ }
+ if (ret == XML_ERR_ENTITY_LOOP) {
+ xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
+ return;
+ } else if ((ret == XML_ERR_OK) && (list != NULL)) {
+ if (((ent->etype == XML_INTERNAL_GENERAL_ENTITY) ||
+ (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY))&&
+ (ent->children == NULL)) {
+ ent->children = list;
+ if (ctxt->replaceEntities) {
+ /*
+ * Prune it directly in the generated document
+ * except for single text nodes.
+ */
+ if ((list->type == XML_TEXT_NODE) &&
+ (list->next == NULL)) {
+ list->parent = (xmlNodePtr) ent;
+ list = NULL;
+ ent->owner = 1;
+ } else {
+ ent->owner = 0;
+ while (list != NULL) {
+ list->parent = (xmlNodePtr) ctxt->node;
+ list->doc = ctxt->myDoc;
+ if (list->next == NULL)
+ ent->last = list;
+ list = list->next;
+ }
+ list = ent->children;
+#ifdef LIBXML_LEGACY_ENABLED
+ if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)
+ xmlAddEntityReference(ent, list, NULL);
+#endif /* LIBXML_LEGACY_ENABLED */
+ }
+ } else {
+ ent->owner = 1;
+ while (list != NULL) {
+ list->parent = (xmlNodePtr) ent;
+ if (list->next == NULL)
+ ent->last = list;
+ list = list->next;
+ }
+ }
+ } else {
+ xmlFreeNodeList(list);
+ list = NULL;
+ }
+ } else if ((ret != XML_ERR_OK) &&
+ (ret != XML_WAR_UNDECLARED_ENTITY)) {
+ xmlFatalErr(ctxt, ret, NULL);
+ } else if (list != NULL) {
+ xmlFreeNodeList(list);
+ list = NULL;
+ }
+ }
+ }
+ if ((ctxt->sax != NULL) && (ctxt->sax->reference != NULL) &&
+ (ctxt->replaceEntities == 0) && (!ctxt->disableSAX)) {
+ /*
+ * Create a node.
+ */
+ ctxt->sax->reference(ctxt->userData, ent->name);
+ return;
+ } else if (ctxt->replaceEntities) {
+ if ((ctxt->node != NULL) && (ent->children != NULL)) {
+ /*
+ * Seems we are generating the DOM content, do
+ * a simple tree copy for all references except the first
+ * In the first occurrence list contains the replacement
+ */
+ if ((list == NULL) && (ent->owner == 0)) {
+ xmlNodePtr nw = NULL, cur, firstChild = NULL;
+ cur = ent->children;
+ while (cur != NULL) {
+ nw = xmlCopyNode(cur, 1);
+ if (nw != NULL) {
+ nw->_private = cur->_private;
+ if (firstChild == NULL){
+ firstChild = nw;
+ }
+ xmlAddChild(ctxt->node, nw);
+ }
+ if (cur == ent->last)
+ break;
+ cur = cur->next;
+ }
+#ifdef LIBXML_LEGACY_ENABLED
+ if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)
+ xmlAddEntityReference(ent, firstChild, nw);
+#endif /* LIBXML_LEGACY_ENABLED */
+ } else if (list == NULL) {
+ xmlNodePtr nw = NULL, cur, next, last,
+ firstChild = NULL;
+ /*
+ * Copy the entity child list and make it the new
+ * entity child list. The goal is to make sure any
+ * ID or REF referenced will be the one from the
+ * document content and not the entity copy.
+ */
+ cur = ent->children;
+ ent->children = NULL;
+ last = ent->last;
+ ent->last = NULL;
+ while (cur != NULL) {
+ next = cur->next;
+ cur->next = NULL;
+ cur->parent = NULL;
+ nw = xmlCopyNode(cur, 1);
+ if (nw != NULL) {
+ nw->_private = cur->_private;
+ if (firstChild == NULL){
+ firstChild = cur;
+ }
+ xmlAddChild((xmlNodePtr) ent, nw);
+ xmlAddChild(ctxt->node, cur);
+ }
+ if (cur == last)
+ break;
+ cur = next;
+ }
+ ent->owner = 1;
+#ifdef LIBXML_LEGACY_ENABLED
+ if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)
+ xmlAddEntityReference(ent, firstChild, nw);
+#endif /* LIBXML_LEGACY_ENABLED */
+ } else {
+ /*
+ * the name change is to avoid coalescing of the
+ * node with a possible previous text one which
+ * would make ent->children a dangling pointer
+ */
+ if (ent->children->type == XML_TEXT_NODE)
+ ent->children->name = xmlStrdup(BAD_CAST "nbktext");
+ if ((ent->last != ent->children) &&
+ (ent->last->type == XML_TEXT_NODE))
+ ent->last->name = xmlStrdup(BAD_CAST "nbktext");
+ xmlAddChildList(ctxt->node, ent->children);
+ }
+
+ /*
+ * This is to avoid a nasty side effect, see
+ * characters() in SAX.c
+ */
+ ctxt->nodemem = 0;
+ ctxt->nodelen = 0;
+ return;
+ } else {
+ /*
+ * Probably running in SAX mode
+ */
+ xmlParserInputPtr input;
+
+ input = xmlNewEntityInputStream(ctxt, ent);
+ xmlPushInput(ctxt, input);
+ if ((ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) &&
+ (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) &&
+ (IS_BLANK_CH(NXT(5)))) {
+ xmlParseTextDecl(ctxt);
+ if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
+ /*
+ * The XML REC instructs us to stop parsing right here
+ */
+ ctxt->instate = XML_PARSER_EOF;
+ return;
+ }
+ if (input->standalone == 1) {
+ xmlFatalErr(ctxt, XML_ERR_EXT_ENTITY_STANDALONE,
+ NULL);
+ }
+ }
+ return;
+ }
+ }
+ } else {
+ val = ent->content;
+ if (val == NULL) return;
+ /*
+ * inline the entity.
+ */
+ if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->characters(ctxt->userData, val, xmlStrlen(val));
+ }
+ }
+}
+
+/**
+ * xmlParseEntityRef:
+ * @ctxt: an XML parser context
+ *
+ * parse ENTITY references declarations
+ *
+ * [68] EntityRef ::= '&' Name ';'
+ *
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an internal DTD
+ * subset which contains no parameter entity references, or a document
+ * with "standalone='yes'", the Name given in the entity reference
+ * must match that in an entity declaration, except that well-formed
+ * documents need not declare any of the following entities: amp, lt,
+ * gt, apos, quot. The declaration of a parameter entity must precede
+ * any reference to it. Similarly, the declaration of a general entity
+ * must precede any reference to it which appears in a default value in an
+ * attribute-list declaration. Note that if entities are declared in the
+ * external subset or in external parameter entities, a non-validating
+ * processor is not obligated to read and process their declarations;
+ * for such documents, the rule that an entity must be declared is a
+ * well-formedness constraint only if standalone='yes'.
+ *
+ * [ WFC: Parsed Entity ]
+ * An entity reference must not contain the name of an unparsed entity
+ *
+ * Returns the xmlEntityPtr if found, or NULL otherwise.
+ */
+xmlEntityPtr
+xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ xmlEntityPtr ent = NULL;
+
+ GROW;
+
+ if (RAW == '&') {
+ NEXT;
+ name = xmlParseName(ctxt);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "xmlParseEntityRef: no name\n");
+ } else {
+ if (RAW == ';') {
+ NEXT;
+ /*
+ * Ask first SAX for entity resolution, otherwise try the
+ * predefined set.
+ */
+ if (ctxt->sax != NULL) {
+ if (ctxt->sax->getEntity != NULL)
+ ent = ctxt->sax->getEntity(ctxt->userData, name);
+ if ((ctxt->wellFormed == 1 ) && (ent == NULL))
+ ent = xmlGetPredefinedEntity(name);
+ if ((ctxt->wellFormed == 1 ) && (ent == NULL) &&
+ (ctxt->userData==ctxt)) {
+ ent = xmlSAX2GetEntity(ctxt, name);
+ }
+ }
+ /*
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an
+ * internal DTD subset which contains no parameter entity
+ * references, or a document with "standalone='yes'", the
+ * Name given in the entity reference must match that in an
+ * entity declaration, except that well-formed documents
+ * need not declare any of the following entities: amp, lt,
+ * gt, apos, quot.
+ * The declaration of a parameter entity must precede any
+ * reference to it.
+ * Similarly, the declaration of a general entity must
+ * precede any reference to it which appears in a default
+ * value in an attribute-list declaration. Note that if
+ * entities are declared in the external subset or in
+ * external parameter entities, a non-validating processor
+ * is not obligated to read and process their declarations;
+ * for such documents, the rule that an entity must be
+ * declared is a well-formedness constraint only if
+ * standalone='yes'.
+ */
+ if (ent == NULL) {
+ if ((ctxt->standalone == 1) ||
+ ((ctxt->hasExternalSubset == 0) &&
+ (ctxt->hasPErefs == 0))) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
+ "Entity '%s' not defined\n", name);
+ } else {
+ xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY,
+ "Entity '%s' not defined\n", name);
+ }
+ ctxt->valid = 0;
+ }
+
+ /*
+ * [ WFC: Parsed Entity ]
+ * An entity reference must not contain the name of an
+ * unparsed entity
+ */
+ else if (ent->etype == XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_UNPARSED_ENTITY,
+ "Entity reference to unparsed entity %s\n", name);
+ }
+
+ /*
+ * [ WFC: No External Entity References ]
+ * Attribute values cannot contain direct or indirect
+ * entity references to external entities.
+ */
+ else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
+ (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_EXTERNAL,
+ "Attribute references external entity '%s'\n", name);
+ }
+ /*
+ * [ WFC: No < in Attribute Values ]
+ * The replacement text of any entity referred to directly or
+ * indirectly in an attribute value (other than "&lt;") must
+ * not contain a <.
+ */
+ else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
+ (ent != NULL) &&
+ (!xmlStrEqual(ent->name, BAD_CAST "lt")) &&
+ (ent->content != NULL) &&
+ (xmlStrchr(ent->content, '<'))) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE,
+ "'<' in entity '%s' is not allowed in attributes values\n", name);
+ }
+
+ /*
+ * Internal check, no parameter entities here ...
+ */
+ else {
+ switch (ent->etype) {
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER,
+ "Attempt to reference the parameter entity '%s'\n",
+ name);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /*
+ * [ WFC: No Recursion ]
+ * A parsed entity must not contain a recursive reference
+ * to itself, either directly or indirectly.
+ * Done somewhere else
+ */
+
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL);
+ }
+ }
+ }
+ return(ent);
+}
+
+/**
+ * xmlParseStringEntityRef:
+ * @ctxt: an XML parser context
+ * @str: a pointer to an index in the string
+ *
+ * parse ENTITY references declarations, but this version parses it from
+ * a string value.
+ *
+ * [68] EntityRef ::= '&' Name ';'
+ *
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an internal DTD
+ * subset which contains no parameter entity references, or a document
+ * with "standalone='yes'", the Name given in the entity reference
+ * must match that in an entity declaration, except that well-formed
+ * documents need not declare any of the following entities: amp, lt,
+ * gt, apos, quot. The declaration of a parameter entity must precede
+ * any reference to it. Similarly, the declaration of a general entity
+ * must precede any reference to it which appears in a default value in an
+ * attribute-list declaration. Note that if entities are declared in the
+ * external subset or in external parameter entities, a non-validating
+ * processor is not obligated to read and process their declarations;
+ * for such documents, the rule that an entity must be declared is a
+ * well-formedness constraint only if standalone='yes'.
+ *
+ * [ WFC: Parsed Entity ]
+ * An entity reference must not contain the name of an unparsed entity
+ *
+ * Returns the xmlEntityPtr if found, or NULL otherwise. The str pointer
+ * is updated to the current location in the string.
+ */
+xmlEntityPtr
+xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
+ xmlChar *name;
+ const xmlChar *ptr;
+ xmlChar cur;
+ xmlEntityPtr ent = NULL;
+
+ if ((str == NULL) || (*str == NULL))
+ return(NULL);
+ ptr = *str;
+ cur = *ptr;
+ if (cur == '&') {
+ ptr++;
+ cur = *ptr;
+ name = xmlParseStringName(ctxt, &ptr);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "xmlParseStringEntityRef: no name\n");
+ } else {
+ if (*ptr == ';') {
+ ptr++;
+ /*
+ * Ask first SAX for entity resolution, otherwise try the
+ * predefined set.
+ */
+ if (ctxt->sax != NULL) {
+ if (ctxt->sax->getEntity != NULL)
+ ent = ctxt->sax->getEntity(ctxt->userData, name);
+ if (ent == NULL)
+ ent = xmlGetPredefinedEntity(name);
+ if ((ent == NULL) && (ctxt->userData==ctxt)) {
+ ent = xmlSAX2GetEntity(ctxt, name);
+ }
+ }
+ /*
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an
+ * internal DTD subset which contains no parameter entity
+ * references, or a document with "standalone='yes'", the
+ * Name given in the entity reference must match that in an
+ * entity declaration, except that well-formed documents
+ * need not declare any of the following entities: amp, lt,
+ * gt, apos, quot.
+ * The declaration of a parameter entity must precede any
+ * reference to it.
+ * Similarly, the declaration of a general entity must
+ * precede any reference to it which appears in a default
+ * value in an attribute-list declaration. Note that if
+ * entities are declared in the external subset or in
+ * external parameter entities, a non-validating processor
+ * is not obligated to read and process their declarations;
+ * for such documents, the rule that an entity must be
+ * declared is a well-formedness constraint only if
+ * standalone='yes'.
+ */
+ if (ent == NULL) {
+ if ((ctxt->standalone == 1) ||
+ ((ctxt->hasExternalSubset == 0) &&
+ (ctxt->hasPErefs == 0))) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
+ "Entity '%s' not defined\n", name);
+ } else {
+ xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY,
+ "Entity '%s' not defined\n",
+ name);
+ }
+ /* TODO ? check regressions ctxt->valid = 0; */
+ }
+
+ /*
+ * [ WFC: Parsed Entity ]
+ * An entity reference must not contain the name of an
+ * unparsed entity
+ */
+ else if (ent->etype == XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_UNPARSED_ENTITY,
+ "Entity reference to unparsed entity %s\n", name);
+ }
+
+ /*
+ * [ WFC: No External Entity References ]
+ * Attribute values cannot contain direct or indirect
+ * entity references to external entities.
+ */
+ else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
+ (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_EXTERNAL,
+ "Attribute references external entity '%s'\n", name);
+ }
+ /*
+ * [ WFC: No < in Attribute Values ]
+ * The replacement text of any entity referred to directly or
+ * indirectly in an attribute value (other than "&lt;") must
+ * not contain a <.
+ */
+ else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
+ (ent != NULL) &&
+ (!xmlStrEqual(ent->name, BAD_CAST "lt")) &&
+ (ent->content != NULL) &&
+ (xmlStrchr(ent->content, '<'))) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE,
+ "'<' in entity '%s' is not allowed in attributes values\n",
+ name);
+ }
+
+ /*
+ * Internal check, no parameter entities here ...
+ */
+ else {
+ switch (ent->etype) {
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER,
+ "Attempt to reference the parameter entity '%s'\n",
+ name);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /*
+ * [ WFC: No Recursion ]
+ * A parsed entity must not contain a recursive reference
+ * to itself, either directly or indirectly.
+ * Done somewhere else
+ */
+
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL);
+ }
+ xmlFree(name);
+ }
+ }
+ *str = ptr;
+ return(ent);
+}
+
+/**
+ * xmlParsePEReference:
+ * @ctxt: an XML parser context
+ *
+ * parse PEReference declarations
+ * The entity content is handled directly by pushing it's content as
+ * a new input stream.
+ *
+ * [69] PEReference ::= '%' Name ';'
+ *
+ * [ WFC: No Recursion ]
+ * A parsed entity must not contain a recursive
+ * reference to itself, either directly or indirectly.
+ *
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an internal DTD
+ * subset which contains no parameter entity references, or a document
+ * with "standalone='yes'", ... ... The declaration of a parameter
+ * entity must precede any reference to it...
+ *
+ * [ VC: Entity Declared ]
+ * In a document with an external subset or external parameter entities
+ * with "standalone='no'", ... ... The declaration of a parameter entity
+ * must precede any reference to it...
+ *
+ * [ WFC: In DTD ]
+ * Parameter-entity references may only appear in the DTD.
+ * NOTE: misleading but this is handled.
+ */
+void
+xmlParsePEReference(xmlParserCtxtPtr ctxt)
+{
+ const xmlChar *name;
+ xmlEntityPtr entity = NULL;
+ xmlParserInputPtr input;
+
+ if (RAW == '%') {
+ NEXT;
+ name = xmlParseName(ctxt);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "xmlParsePEReference: no name\n");
+ } else {
+ if (RAW == ';') {
+ NEXT;
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax->getParameterEntity != NULL))
+ entity = ctxt->sax->getParameterEntity(ctxt->userData,
+ name);
+ if (entity == NULL) {
+ /*
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an
+ * internal DTD subset which contains no parameter entity
+ * references, or a document with "standalone='yes'", ...
+ * ... The declaration of a parameter entity must precede
+ * any reference to it...
+ */
+ if ((ctxt->standalone == 1) ||
+ ((ctxt->hasExternalSubset == 0) &&
+ (ctxt->hasPErefs == 0))) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
+ "PEReference: %%%s; not found\n",
+ name);
+ } else {
+ /*
+ * [ VC: Entity Declared ]
+ * In a document with an external subset or external
+ * parameter entities with "standalone='no'", ...
+ * ... The declaration of a parameter entity must
+ * precede any reference to it...
+ */
+ xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
+ "PEReference: %%%s; not found\n",
+ name, NULL);
+ ctxt->valid = 0;
+ }
+ } else {
+ /*
+ * Internal checking in case the entity quest barfed
+ */
+ if ((entity->etype != XML_INTERNAL_PARAMETER_ENTITY) &&
+ (entity->etype != XML_EXTERNAL_PARAMETER_ENTITY)) {
+ xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
+ "Internal: %%%s; is not a parameter entity\n",
+ name, NULL);
+ } else if (ctxt->input->free != deallocblankswrapper) {
+ input =
+ xmlNewBlanksWrapperInputStream(ctxt, entity);
+ xmlPushInput(ctxt, input);
+ } else {
+ /*
+ * TODO !!!
+ * handle the extra spaces added before and after
+ * c.f. http://www.w3.org/TR/REC-xml#as-PE
+ */
+ input = xmlNewEntityInputStream(ctxt, entity);
+ xmlPushInput(ctxt, input);
+ if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
+ (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) &&
+ (IS_BLANK_CH(NXT(5)))) {
+ xmlParseTextDecl(ctxt);
+ if (ctxt->errNo ==
+ XML_ERR_UNSUPPORTED_ENCODING) {
+ /*
+ * The XML REC instructs us to stop parsing
+ * right here
+ */
+ ctxt->instate = XML_PARSER_EOF;
+ return;
+ }
+ }
+ }
+ }
+ ctxt->hasPErefs = 1;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL);
+ }
+ }
+ }
+}
+
+/**
+ * xmlParseStringPEReference:
+ * @ctxt: an XML parser context
+ * @str: a pointer to an index in the string
+ *
+ * parse PEReference declarations
+ *
+ * [69] PEReference ::= '%' Name ';'
+ *
+ * [ WFC: No Recursion ]
+ * A parsed entity must not contain a recursive
+ * reference to itself, either directly or indirectly.
+ *
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an internal DTD
+ * subset which contains no parameter entity references, or a document
+ * with "standalone='yes'", ... ... The declaration of a parameter
+ * entity must precede any reference to it...
+ *
+ * [ VC: Entity Declared ]
+ * In a document with an external subset or external parameter entities
+ * with "standalone='no'", ... ... The declaration of a parameter entity
+ * must precede any reference to it...
+ *
+ * [ WFC: In DTD ]
+ * Parameter-entity references may only appear in the DTD.
+ * NOTE: misleading but this is handled.
+ *
+ * Returns the string of the entity content.
+ * str is updated to the current value of the index
+ */
+xmlEntityPtr
+xmlParseStringPEReference(xmlParserCtxtPtr ctxt, const xmlChar **str) {
+ const xmlChar *ptr;
+ xmlChar cur;
+ xmlChar *name;
+ xmlEntityPtr entity = NULL;
+
+ if ((str == NULL) || (*str == NULL)) return(NULL);
+ ptr = *str;
+ cur = *ptr;
+ if (cur == '%') {
+ ptr++;
+ cur = *ptr;
+ name = xmlParseStringName(ctxt, &ptr);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "xmlParseStringPEReference: no name\n");
+ } else {
+ cur = *ptr;
+ if (cur == ';') {
+ ptr++;
+ cur = *ptr;
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax->getParameterEntity != NULL))
+ entity = ctxt->sax->getParameterEntity(ctxt->userData,
+ name);
+ if (entity == NULL) {
+ /*
+ * [ WFC: Entity Declared ]
+ * In a document without any DTD, a document with only an
+ * internal DTD subset which contains no parameter entity
+ * references, or a document with "standalone='yes'", ...
+ * ... The declaration of a parameter entity must precede
+ * any reference to it...
+ */
+ if ((ctxt->standalone == 1) ||
+ ((ctxt->hasExternalSubset == 0) &&
+ (ctxt->hasPErefs == 0))) {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
+ "PEReference: %%%s; not found\n", name);
+ } else {
+ /*
+ * [ VC: Entity Declared ]
+ * In a document with an external subset or external
+ * parameter entities with "standalone='no'", ...
+ * ... The declaration of a parameter entity must
+ * precede any reference to it...
+ */
+ xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
+ "PEReference: %%%s; not found\n",
+ name, NULL);
+ ctxt->valid = 0;
+ }
+ } else {
+ /*
+ * Internal checking in case the entity quest barfed
+ */
+ if ((entity->etype != XML_INTERNAL_PARAMETER_ENTITY) &&
+ (entity->etype != XML_EXTERNAL_PARAMETER_ENTITY)) {
+ xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
+ "%%%s; is not a parameter entity\n",
+ name, NULL);
+ }
+ }
+ ctxt->hasPErefs = 1;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL);
+ }
+ xmlFree(name);
+ }
+ }
+ *str = ptr;
+ return(entity);
+}
+
+/**
+ * xmlParseDocTypeDecl:
+ * @ctxt: an XML parser context
+ *
+ * parse a DOCTYPE declaration
+ *
+ * [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S?
+ * ('[' (markupdecl | PEReference | S)* ']' S?)? '>'
+ *
+ * [ VC: Root Element Type ]
+ * The Name in the document type declaration must match the element
+ * type of the root element.
+ */
+
+void
+xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name = NULL;
+ xmlChar *ExternalID = NULL;
+ xmlChar *URI = NULL;
+
+ /*
+ * We know that '<!DOCTYPE' has been detected.
+ */
+ SKIP(9);
+
+ SKIP_BLANKS;
+
+ /*
+ * Parse the DOCTYPE name.
+ */
+ name = xmlParseName(ctxt);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "xmlParseDocTypeDecl : no DOCTYPE name !\n");
+ }
+ ctxt->intSubName = name;
+
+ SKIP_BLANKS;
+
+ /*
+ * Check for SystemID and ExternalID
+ */
+ URI = xmlParseExternalID(ctxt, &ExternalID, 1);
+
+ if ((URI != NULL) || (ExternalID != NULL)) {
+ ctxt->hasExternalSubset = 1;
+ }
+ ctxt->extSubURI = URI;
+ ctxt->extSubSystem = ExternalID;
+
+ SKIP_BLANKS;
+
+ /*
+ * Create and update the internal subset.
+ */
+ if ((ctxt->sax != NULL) && (ctxt->sax->internalSubset != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->internalSubset(ctxt->userData, name, ExternalID, URI);
+
+ /*
+ * Is there any internal subset declarations ?
+ * they are handled separately in xmlParseInternalSubset()
+ */
+ if (RAW == '[')
+ return;
+
+ /*
+ * We should be at the end of the DOCTYPE declaration.
+ */
+ if (RAW != '>') {
+ xmlFatalErr(ctxt, XML_ERR_DOCTYPE_NOT_FINISHED, NULL);
+ }
+ NEXT;
+}
+
+/**
+ * xmlParseInternalSubset:
+ * @ctxt: an XML parser context
+ *
+ * parse the internal subset declaration
+ *
+ * [28 end] ('[' (markupdecl | PEReference | S)* ']' S?)? '>'
+ */
+
+static void
+xmlParseInternalSubset(xmlParserCtxtPtr ctxt) {
+ /*
+ * Is there any DTD definition ?
+ */
+ if (RAW == '[') {
+ ctxt->instate = XML_PARSER_DTD;
+ NEXT;
+ /*
+ * Parse the succession of Markup declarations and
+ * PEReferences.
+ * Subsequence (markupdecl | PEReference | S)*
+ */
+ while (RAW != ']') {
+ const xmlChar *check = CUR_PTR;
+ unsigned int cons = ctxt->input->consumed;
+
+ SKIP_BLANKS;
+ xmlParseMarkupDecl(ctxt);
+ xmlParsePEReference(ctxt);
+
+ /*
+ * Pop-up of finished entities.
+ */
+ while ((RAW == 0) && (ctxt->inputNr > 1))
+ xmlPopInput(ctxt);
+
+ if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) {
+ xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "xmlParseInternalSubset: error detected in Markup declaration\n");
+ break;
+ }
+ }
+ if (RAW == ']') {
+ NEXT;
+ SKIP_BLANKS;
+ }
+ }
+
+ /*
+ * We should be at the end of the DOCTYPE declaration.
+ */
+ if (RAW != '>') {
+ xmlFatalErr(ctxt, XML_ERR_DOCTYPE_NOT_FINISHED, NULL);
+ }
+ NEXT;
+}
+
+#ifdef LIBXML_SAX1_ENABLED
+/**
+ * xmlParseAttribute:
+ * @ctxt: an XML parser context
+ * @value: a xmlChar ** used to store the value of the attribute
+ *
+ * parse an attribute
+ *
+ * [41] Attribute ::= Name Eq AttValue
+ *
+ * [ WFC: No External Entity References ]
+ * Attribute values cannot contain direct or indirect entity references
+ * to external entities.
+ *
+ * [ WFC: No < in Attribute Values ]
+ * The replacement text of any entity referred to directly or indirectly in
+ * an attribute value (other than "&lt;") must not contain a <.
+ *
+ * [ VC: Attribute Value Type ]
+ * The attribute must have been declared; the value must be of the type
+ * declared for it.
+ *
+ * [25] Eq ::= S? '=' S?
+ *
+ * With namespace:
+ *
+ * [NS 11] Attribute ::= QName Eq AttValue
+ *
+ * Also the case QName == xmlns:??? is handled independently as a namespace
+ * definition.
+ *
+ * Returns the attribute name, and the value in *value.
+ */
+
+const xmlChar *
+xmlParseAttribute(xmlParserCtxtPtr ctxt, xmlChar **value) {
+ const xmlChar *name;
+ xmlChar *val;
+
+ *value = NULL;
+ GROW;
+ name = xmlParseName(ctxt);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "error parsing attribute name\n");
+ return(NULL);
+ }
+
+ /*
+ * read the value
+ */
+ SKIP_BLANKS;
+ if (RAW == '=') {
+ NEXT;
+ SKIP_BLANKS;
+ val = xmlParseAttValue(ctxt);
+ ctxt->instate = XML_PARSER_CONTENT;
+ } else {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE,
+ "Specification mandate value for attribute %s\n", name);
+ return(NULL);
+ }
+
+ /*
+ * Check that xml:lang conforms to the specification
+ * No more registered as an error, just generate a warning now
+ * since this was deprecated in XML second edition
+ */
+ if ((ctxt->pedantic) && (xmlStrEqual(name, BAD_CAST "xml:lang"))) {
+ if (!xmlCheckLanguageID(val)) {
+ xmlWarningMsg(ctxt, XML_WAR_LANG_VALUE,
+ "Malformed value for xml:lang : %s\n",
+ val, NULL);
+ }
+ }
+
+ /*
+ * Check that xml:space conforms to the specification
+ */
+ if (xmlStrEqual(name, BAD_CAST "xml:space")) {
+ if (xmlStrEqual(val, BAD_CAST "default"))
+ *(ctxt->space) = 0;
+ else if (xmlStrEqual(val, BAD_CAST "preserve"))
+ *(ctxt->space) = 1;
+ else {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE,
+"Invalid value \"%s\" for xml:space : \"default\" or \"preserve\" expected\n",
+ val);
+ }
+ }
+
+ *value = val;
+ return(name);
+}
+
+/**
+ * xmlParseStartTag:
+ * @ctxt: an XML parser context
+ *
+ * parse a start of tag either for rule element or
+ * EmptyElement. In both case we don't parse the tag closing chars.
+ *
+ * [40] STag ::= '<' Name (S Attribute)* S? '>'
+ *
+ * [ WFC: Unique Att Spec ]
+ * No attribute name may appear more than once in the same start-tag or
+ * empty-element tag.
+ *
+ * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
+ *
+ * [ WFC: Unique Att Spec ]
+ * No attribute name may appear more than once in the same start-tag or
+ * empty-element tag.
+ *
+ * With namespace:
+ *
+ * [NS 8] STag ::= '<' QName (S Attribute)* S? '>'
+ *
+ * [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>'
+ *
+ * Returns the element name parsed
+ */
+
+const xmlChar *
+xmlParseStartTag(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ const xmlChar *attname;
+ xmlChar *attvalue;
+ const xmlChar **atts = ctxt->atts;
+ int nbatts = 0;
+ int maxatts = ctxt->maxatts;
+ int i;
+
+ if (RAW != '<') return(NULL);
+ NEXT1;
+
+ name = xmlParseName(ctxt);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "xmlParseStartTag: invalid element name\n");
+ return(NULL);
+ }
+
+ /*
+ * Now parse the attributes, it ends up with the ending
+ *
+ * (S Attribute)* S?
+ */
+ SKIP_BLANKS;
+ GROW;
+
+ while ((RAW != '>') &&
+ ((RAW != '/') || (NXT(1) != '>')) &&
+ (IS_BYTE_CHAR(RAW))) {
+ const xmlChar *q = CUR_PTR;
+ unsigned int cons = ctxt->input->consumed;
+
+ attname = xmlParseAttribute(ctxt, &attvalue);
+ if ((attname != NULL) && (attvalue != NULL)) {
+ /*
+ * [ WFC: Unique Att Spec ]
+ * No attribute name may appear more than once in the same
+ * start-tag or empty-element tag.
+ */
+ for (i = 0; i < nbatts;i += 2) {
+ if (xmlStrEqual(atts[i], attname)) {
+ xmlErrAttributeDup(ctxt, NULL, attname);
+ xmlFree(attvalue);
+ goto failed;
+ }
+ }
+ /*
+ * Add the pair to atts
+ */
+ if (atts == NULL) {
+ maxatts = 22; /* allow for 10 attrs by default */
+ atts = (const xmlChar **)
+ xmlMalloc(maxatts * sizeof(xmlChar *));
+ if (atts == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ if (attvalue != NULL)
+ xmlFree(attvalue);
+ goto failed;
+ }
+ ctxt->atts = atts;
+ ctxt->maxatts = maxatts;
+ } else if (nbatts + 4 > maxatts) {
+ const xmlChar **n;
+
+ maxatts *= 2;
+ n = (const xmlChar **) xmlRealloc((void *) atts,
+ maxatts * sizeof(const xmlChar *));
+ if (n == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ if (attvalue != NULL)
+ xmlFree(attvalue);
+ goto failed;
+ }
+ atts = n;
+ ctxt->atts = atts;
+ ctxt->maxatts = maxatts;
+ }
+ atts[nbatts++] = attname;
+ atts[nbatts++] = attvalue;
+ atts[nbatts] = NULL;
+ atts[nbatts + 1] = NULL;
+ } else {
+ if (attvalue != NULL)
+ xmlFree(attvalue);
+ }
+
+failed:
+
+ GROW
+ if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
+ break;
+ if (!IS_BLANK_CH(RAW)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "attributes construct error\n");
+ }
+ SKIP_BLANKS;
+ if ((cons == ctxt->input->consumed) && (q == CUR_PTR) &&
+ (attname == NULL) && (attvalue == NULL)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
+ "xmlParseStartTag: problem parsing attributes\n");
+ break;
+ }
+ SHRINK;
+ GROW;
+ }
+
+ /*
+ * SAX: Start of Element !
+ */
+ if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL) &&
+ (!ctxt->disableSAX)) {
+ if (nbatts > 0)
+ ctxt->sax->startElement(ctxt->userData, name, atts);
+ else
+ ctxt->sax->startElement(ctxt->userData, name, NULL);
+ }
+
+ if (atts != NULL) {
+ /* Free only the content strings */
+ for (i = 1;i < nbatts;i+=2)
+ if (atts[i] != NULL)
+ xmlFree((xmlChar *) atts[i]);
+ }
+ return(name);
+}
+
+/**
+ * xmlParseEndTag1:
+ * @ctxt: an XML parser context
+ * @line: line of the start tag
+ * @nsNr: number of namespaces on the start tag
+ *
+ * parse an end of tag
+ *
+ * [42] ETag ::= '</' Name S? '>'
+ *
+ * With namespace
+ *
+ * [NS 9] ETag ::= '</' QName S? '>'
+ */
+
+static void
+xmlParseEndTag1(xmlParserCtxtPtr ctxt, int line) {
+ const xmlChar *name;
+
+ GROW;
+ if ((RAW != '<') || (NXT(1) != '/')) {
+ xmlFatalErrMsg(ctxt, XML_ERR_LTSLASH_REQUIRED,
+ "xmlParseEndTag: '</' not found\n");
+ return;
+ }
+ SKIP(2);
+
+ name = xmlParseNameAndCompare(ctxt,ctxt->name);
+
+ /*
+ * We should definitely be at the ending "S? '>'" part
+ */
+ GROW;
+ SKIP_BLANKS;
+ if ((!IS_BYTE_CHAR(RAW)) || (RAW != '>')) {
+ xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL);
+ } else
+ NEXT1;
+
+ /*
+ * [ WFC: Element Type Match ]
+ * The Name in an element's end-tag must match the element type in the
+ * start-tag.
+ *
+ */
+ if (name != (xmlChar*)1) {
+ if (name == NULL) name = BAD_CAST "unparseable";
+ xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
+ "Opening and ending tag mismatch: %s line %d and %s\n",
+ ctxt->name, line, name);
+ }
+
+ /*
+ * SAX: End of Tag
+ */
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->endElement(ctxt->userData, ctxt->name);
+
+ namePop(ctxt);
+ spacePop(ctxt);
+ return;
+}
+
+/**
+ * xmlParseEndTag:
+ * @ctxt: an XML parser context
+ *
+ * parse an end of tag
+ *
+ * [42] ETag ::= '</' Name S? '>'
+ *
+ * With namespace
+ *
+ * [NS 9] ETag ::= '</' QName S? '>'
+ */
+
+void
+xmlParseEndTag(xmlParserCtxtPtr ctxt) {
+ xmlParseEndTag1(ctxt, 0);
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+/************************************************************************
+ * *
+ * SAX 2 specific operations *
+ * *
+ ************************************************************************/
+
+static const xmlChar *
+xmlParseNCNameComplex(xmlParserCtxtPtr ctxt) {
+ int len = 0, l;
+ int c;
+ int count = 0;
+
+ /*
+ * Handler for more complex cases
+ */
+ GROW;
+ c = CUR_CHAR(l);
+ if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
+ (!IS_LETTER(c) && (c != '_'))) {
+ return(NULL);
+ }
+
+ while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
+ ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
+ (c == '.') || (c == '-') || (c == '_') ||
+ (IS_COMBINING(c)) ||
+ (IS_EXTENDER(c)))) {
+ if (count++ > 100) {
+ count = 0;
+ GROW;
+ }
+ len += l;
+ NEXTL(l);
+ c = CUR_CHAR(l);
+ }
+ return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len));
+}
+
+/*
+ * xmlGetNamespace:
+ * @ctxt: an XML parser context
+ * @prefix: the prefix to lookup
+ *
+ * Lookup the namespace name for the @prefix (which ca be NULL)
+ * The prefix must come from the @ctxt->dict dictionnary
+ *
+ * Returns the namespace name or NULL if not bound
+ */
+static const xmlChar *
+xmlGetNamespace(xmlParserCtxtPtr ctxt, const xmlChar *prefix) {
+ int i;
+
+ if (prefix == ctxt->str_xml) return(ctxt->str_xml_ns);
+ for (i = ctxt->nsNr - 2;i >= 0;i-=2)
+ if (ctxt->nsTab[i] == prefix) {
+ if ((prefix == NULL) && (*ctxt->nsTab[i + 1] == 0))
+ return(NULL);
+ return(ctxt->nsTab[i + 1]);
+ }
+ return(NULL);
+}
+
+/**
+ * xmlParseNCName:
+ * @ctxt: an XML parser context
+ * @len: lenght of the string parsed
+ *
+ * parse an XML name.
+ *
+ * [4NS] NCNameChar ::= Letter | Digit | '.' | '-' | '_' |
+ * CombiningChar | Extender
+ *
+ * [5NS] NCName ::= (Letter | '_') (NCNameChar)*
+ *
+ * Returns the Name parsed or NULL
+ */
+
+static const xmlChar *
+xmlParseNCName(xmlParserCtxtPtr ctxt) {
+ const xmlChar *in;
+ const xmlChar *ret;
+ int count = 0;
+
+ /*
+ * Accelerator for simple ASCII names
+ */
+ in = ctxt->input->cur;
+ if (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ (*in == '_')) {
+ in++;
+ while (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ ((*in >= 0x30) && (*in <= 0x39)) ||
+ (*in == '_') || (*in == '-') ||
+ (*in == '.'))
+ in++;
+ if ((*in > 0) && (*in < 0x80)) {
+ count = in - ctxt->input->cur;
+ ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count);
+ ctxt->input->cur = in;
+ ctxt->nbChars += count;
+ ctxt->input->col += count;
+ if (ret == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ }
+ return(ret);
+ }
+ }
+ return(xmlParseNCNameComplex(ctxt));
+}
+
+/**
+ * xmlParseQName:
+ * @ctxt: an XML parser context
+ * @prefix: pointer to store the prefix part
+ *
+ * parse an XML Namespace QName
+ *
+ * [6] QName ::= (Prefix ':')? LocalPart
+ * [7] Prefix ::= NCName
+ * [8] LocalPart ::= NCName
+ *
+ * Returns the Name parsed or NULL
+ */
+
+static const xmlChar *
+xmlParseQName(xmlParserCtxtPtr ctxt, const xmlChar **prefix) {
+ const xmlChar *l, *p;
+
+ GROW;
+
+ l = xmlParseNCName(ctxt);
+ if (l == NULL) {
+ if (CUR == ':') {
+ l = xmlParseName(ctxt);
+ if (l != NULL) {
+ xmlNsErr(ctxt, XML_NS_ERR_QNAME,
+ "Failed to parse QName '%s'\n", l, NULL, NULL);
+ *prefix = NULL;
+ return(l);
+ }
+ }
+ return(NULL);
+ }
+ if (CUR == ':') {
+ NEXT;
+ p = l;
+ l = xmlParseNCName(ctxt);
+ if (l == NULL) {
+ xmlChar *tmp;
+
+ xmlNsErr(ctxt, XML_NS_ERR_QNAME,
+ "Failed to parse QName '%s:'\n", p, NULL, NULL);
+ tmp = xmlBuildQName(BAD_CAST "", p, NULL, 0);
+ p = xmlDictLookup(ctxt->dict, tmp, -1);
+ if (tmp != NULL) xmlFree(tmp);
+ *prefix = NULL;
+ return(p);
+ }
+ if (CUR == ':') {
+ xmlChar *tmp;
+
+ xmlNsErr(ctxt, XML_NS_ERR_QNAME,
+ "Failed to parse QName '%s:%s:'\n", p, l, NULL);
+ NEXT;
+ tmp = (xmlChar *) xmlParseName(ctxt);
+ if (tmp != NULL) {
+ tmp = xmlBuildQName(tmp, l, NULL, 0);
+ l = xmlDictLookup(ctxt->dict, tmp, -1);
+ if (tmp != NULL) xmlFree(tmp);
+ *prefix = p;
+ return(l);
+ }
+ tmp = xmlBuildQName(BAD_CAST "", l, NULL, 0);
+ l = xmlDictLookup(ctxt->dict, tmp, -1);
+ if (tmp != NULL) xmlFree(tmp);
+ *prefix = p;
+ return(l);
+ }
+ *prefix = p;
+ } else
+ *prefix = NULL;
+ return(l);
+}
+
+/**
+ * xmlParseQNameAndCompare:
+ * @ctxt: an XML parser context
+ * @name: the localname
+ * @prefix: the prefix, if any.
+ *
+ * parse an XML name and compares for match
+ * (specialized for endtag parsing)
+ *
+ * Returns NULL for an illegal name, (xmlChar*) 1 for success
+ * and the name for mismatch
+ */
+
+static const xmlChar *
+xmlParseQNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *name,
+ xmlChar const *prefix) {
+ const xmlChar *cmp = name;
+ const xmlChar *in;
+ const xmlChar *ret;
+ const xmlChar *prefix2;
+
+ if (prefix == NULL) return(xmlParseNameAndCompare(ctxt, name));
+
+ GROW;
+ in = ctxt->input->cur;
+
+ cmp = prefix;
+ while (*in != 0 && *in == *cmp) {
+ ++in;
+ ++cmp;
+ }
+ if ((*cmp == 0) && (*in == ':')) {
+ in++;
+ cmp = name;
+ while (*in != 0 && *in == *cmp) {
+ ++in;
+ ++cmp;
+ }
+ if (*cmp == 0 && (*in == '>' || IS_BLANK_CH (*in))) {
+ /* success */
+ ctxt->input->cur = in;
+ return((const xmlChar*) 1);
+ }
+ }
+ /*
+ * all strings coms from the dictionary, equality can be done directly
+ */
+ ret = xmlParseQName (ctxt, &prefix2);
+ if ((ret == name) && (prefix == prefix2))
+ return((const xmlChar*) 1);
+ return ret;
+}
+
+/**
+ * xmlParseAttValueInternal:
+ * @ctxt: an XML parser context
+ * @len: attribute len result
+ * @alloc: whether the attribute was reallocated as a new string
+ * @normalize: if 1 then further non-CDATA normalization must be done
+ *
+ * parse a value for an attribute.
+ * NOTE: if no normalization is needed, the routine will return pointers
+ * directly from the data buffer.
+ *
+ * 3.3.3 Attribute-Value Normalization:
+ * Before the value of an attribute is passed to the application or
+ * checked for validity, the XML processor must normalize it as follows:
+ * - a character reference is processed by appending the referenced
+ * character to the attribute value
+ * - an entity reference is processed by recursively processing the
+ * replacement text of the entity
+ * - a whitespace character (#x20, #xD, #xA, #x9) is processed by
+ * appending #x20 to the normalized value, except that only a single
+ * #x20 is appended for a "#xD#xA" sequence that is part of an external
+ * parsed entity or the literal entity value of an internal parsed entity
+ * - other characters are processed by appending them to the normalized value
+ * If the declared value is not CDATA, then the XML processor must further
+ * process the normalized attribute value by discarding any leading and
+ * trailing space (#x20) characters, and by replacing sequences of space
+ * (#x20) characters by a single space (#x20) character.
+ * All attributes for which no declaration has been read should be treated
+ * by a non-validating parser as if declared CDATA.
+ *
+ * Returns the AttValue parsed or NULL. The value has to be freed by the
+ * caller if it was copied, this can be detected by val[*len] == 0.
+ */
+
+static xmlChar *
+xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
+ int normalize)
+{
+ xmlChar limit = 0;
+ const xmlChar *in = NULL, *start, *end, *last;
+ xmlChar *ret = NULL;
+
+ GROW;
+ in = (xmlChar *) CUR_PTR;
+ if (*in != '"' && *in != '\'') {
+ xmlFatalErr(ctxt, XML_ERR_ATTRIBUTE_NOT_STARTED, NULL);
+ return (NULL);
+ }
+ ctxt->instate = XML_PARSER_ATTRIBUTE_VALUE;
+
+ /*
+ * try to handle in this routine the most common case where no
+ * allocation of a new string is required and where content is
+ * pure ASCII.
+ */
+ limit = *in++;
+ end = ctxt->input->end;
+ start = in;
+ if (in >= end) {
+ const xmlChar *oldbase = ctxt->input->base;
+ GROW;
+ if (oldbase != ctxt->input->base) {
+ long delta = ctxt->input->base - oldbase;
+ start = start + delta;
+ in = in + delta;
+ }
+ end = ctxt->input->end;
+ }
+ if (normalize) {
+ /*
+ * Skip any leading spaces
+ */
+ while ((in < end) && (*in != limit) &&
+ ((*in == 0x20) || (*in == 0x9) ||
+ (*in == 0xA) || (*in == 0xD))) {
+ in++;
+ start = in;
+ if (in >= end) {
+ const xmlChar *oldbase = ctxt->input->base;
+ GROW;
+ if (oldbase != ctxt->input->base) {
+ long delta = ctxt->input->base - oldbase;
+ start = start + delta;
+ in = in + delta;
+ }
+ end = ctxt->input->end;
+ }
+ }
+ while ((in < end) && (*in != limit) && (*in >= 0x20) &&
+ (*in <= 0x7f) && (*in != '&') && (*in != '<')) {
+ if ((*in++ == 0x20) && (*in == 0x20)) break;
+ if (in >= end) {
+ const xmlChar *oldbase = ctxt->input->base;
+ GROW;
+ if (oldbase != ctxt->input->base) {
+ long delta = ctxt->input->base - oldbase;
+ start = start + delta;
+ in = in + delta;
+ }
+ end = ctxt->input->end;
+ }
+ }
+ last = in;
+ /*
+ * skip the trailing blanks
+ */
+ while ((last[-1] == 0x20) && (last > start)) last--;
+ while ((in < end) && (*in != limit) &&
+ ((*in == 0x20) || (*in == 0x9) ||
+ (*in == 0xA) || (*in == 0xD))) {
+ in++;
+ if (in >= end) {
+ const xmlChar *oldbase = ctxt->input->base;
+ GROW;
+ if (oldbase != ctxt->input->base) {
+ long delta = ctxt->input->base - oldbase;
+ start = start + delta;
+ in = in + delta;
+ last = last + delta;
+ }
+ end = ctxt->input->end;
+ }
+ }
+ if (*in != limit) goto need_complex;
+ } else {
+ while ((in < end) && (*in != limit) && (*in >= 0x20) &&
+ (*in <= 0x7f) && (*in != '&') && (*in != '<')) {
+ in++;
+ if (in >= end) {
+ const xmlChar *oldbase = ctxt->input->base;
+ GROW;
+ if (oldbase != ctxt->input->base) {
+ long delta = ctxt->input->base - oldbase;
+ start = start + delta;
+ in = in + delta;
+ }
+ end = ctxt->input->end;
+ }
+ }
+ last = in;
+ if (*in != limit) goto need_complex;
+ }
+ in++;
+ if (len != NULL) {
+ *len = last - start;
+ ret = (xmlChar *) start;
+ } else {
+ if (alloc) *alloc = 1;
+ ret = xmlStrndup(start, last - start);
+ }
+ CUR_PTR = in;
+ if (alloc) *alloc = 0;
+ return ret;
+need_complex:
+ if (alloc) *alloc = 1;
+ return xmlParseAttValueComplex(ctxt, len, normalize);
+}
+
+/**
+ * xmlParseAttribute2:
+ * @ctxt: an XML parser context
+ * @pref: the element prefix
+ * @elem: the element name
+ * @prefix: a xmlChar ** used to store the value of the attribute prefix
+ * @value: a xmlChar ** used to store the value of the attribute
+ * @len: an int * to save the length of the attribute
+ * @alloc: an int * to indicate if the attribute was allocated
+ *
+ * parse an attribute in the new SAX2 framework.
+ *
+ * Returns the attribute name, and the value in *value, .
+ */
+
+static const xmlChar *
+xmlParseAttribute2(xmlParserCtxtPtr ctxt,
+ const xmlChar *pref, const xmlChar *elem,
+ const xmlChar **prefix, xmlChar **value,
+ int *len, int *alloc) {
+ const xmlChar *name;
+ xmlChar *val;
+ int normalize = 0;
+
+ *value = NULL;
+ GROW;
+ name = xmlParseQName(ctxt, prefix);
+ if (name == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "error parsing attribute name\n");
+ return(NULL);
+ }
+
+ /*
+ * get the type if needed
+ */
+ if (ctxt->attsSpecial != NULL) {
+ int type;
+
+ type = (int) (long) xmlHashQLookup2(ctxt->attsSpecial,
+ pref, elem, *prefix, name);
+ if (type != 0) normalize = 1;
+ }
+
+ /*
+ * read the value
+ */
+ SKIP_BLANKS;
+ if (RAW == '=') {
+ NEXT;
+ SKIP_BLANKS;
+ val = xmlParseAttValueInternal(ctxt, len, alloc, normalize);
+ ctxt->instate = XML_PARSER_CONTENT;
+ } else {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE,
+ "Specification mandate value for attribute %s\n", name);
+ return(NULL);
+ }
+
+ /*
+ * Check that xml:lang conforms to the specification
+ * No more registered as an error, just generate a warning now
+ * since this was deprecated in XML second edition
+ */
+ if ((ctxt->pedantic) && (xmlStrEqual(name, BAD_CAST "xml:lang"))) {
+ if (!xmlCheckLanguageID(val)) {
+ xmlWarningMsg(ctxt, XML_WAR_LANG_VALUE,
+ "Malformed value for xml:lang : %s\n",
+ val, NULL);
+ }
+ }
+
+ /*
+ * Check that xml:space conforms to the specification
+ */
+ if (xmlStrEqual(name, BAD_CAST "xml:space")) {
+ if (xmlStrEqual(val, BAD_CAST "default"))
+ *(ctxt->space) = 0;
+ else if (xmlStrEqual(val, BAD_CAST "preserve"))
+ *(ctxt->space) = 1;
+ else {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE,
+"Invalid value \"%s\" for xml:space : \"default\" or \"preserve\" expected\n",
+ val);
+ }
+ }
+
+ *value = val;
+ return(name);
+}
+
+/**
+ * xmlParseStartTag2:
+ * @ctxt: an XML parser context
+ *
+ * parse a start of tag either for rule element or
+ * EmptyElement. In both case we don't parse the tag closing chars.
+ * This routine is called when running SAX2 parsing
+ *
+ * [40] STag ::= '<' Name (S Attribute)* S? '>'
+ *
+ * [ WFC: Unique Att Spec ]
+ * No attribute name may appear more than once in the same start-tag or
+ * empty-element tag.
+ *
+ * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
+ *
+ * [ WFC: Unique Att Spec ]
+ * No attribute name may appear more than once in the same start-tag or
+ * empty-element tag.
+ *
+ * With namespace:
+ *
+ * [NS 8] STag ::= '<' QName (S Attribute)* S? '>'
+ *
+ * [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>'
+ *
+ * Returns the element name parsed
+ */
+
+static const xmlChar *
+xmlParseStartTag2(xmlParserCtxtPtr ctxt, const xmlChar **pref,
+ const xmlChar **URI, int *tlen) {
+ const xmlChar *localname;
+ const xmlChar *prefix;
+ const xmlChar *attname;
+ const xmlChar *aprefix;
+ const xmlChar *nsname;
+ xmlChar *attvalue;
+ const xmlChar **atts = ctxt->atts;
+ int maxatts = ctxt->maxatts;
+ int nratts, nbatts, nbdef;
+ int i, j, nbNs, attval;
+ const xmlChar *base;
+ unsigned long cur;
+
+ if (RAW != '<') return(NULL);
+ NEXT1;
+
+ /*
+ * NOTE: it is crucial with the SAX2 API to never call SHRINK beyond that
+ * point since the attribute values may be stored as pointers to
+ * the buffer and calling SHRINK would destroy them !
+ * The Shrinking is only possible once the full set of attribute
+ * callbacks have been done.
+ */
+reparse:
+ SHRINK;
+ base = ctxt->input->base;
+ cur = ctxt->input->cur - ctxt->input->base;
+ nbatts = 0;
+ nratts = 0;
+ nbdef = 0;
+ nbNs = 0;
+ attval = 0;
+
+ localname = xmlParseQName(ctxt, &prefix);
+ if (localname == NULL) {
+ xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
+ "StartTag: invalid element name\n");
+ return(NULL);
+ }
+ *tlen = ctxt->input->cur - ctxt->input->base - cur;
+
+ /*
+ * Now parse the attributes, it ends up with the ending
+ *
+ * (S Attribute)* S?
+ */
+ SKIP_BLANKS;
+ GROW;
+ if (ctxt->input->base != base) goto base_changed;
+
+ while ((RAW != '>') &&
+ ((RAW != '/') || (NXT(1) != '>')) &&
+ (IS_BYTE_CHAR(RAW))) {
+ const xmlChar *q = CUR_PTR;
+ unsigned int cons = ctxt->input->consumed;
+ int len = -1, alloc = 0;
+
+ attname = xmlParseAttribute2(ctxt, prefix, localname,
+ &aprefix, &attvalue, &len, &alloc);
+ if ((attname != NULL) && (attvalue != NULL)) {
+ if (len < 0) len = xmlStrlen(attvalue);
+ if ((attname == ctxt->str_xmlns) && (aprefix == NULL)) {
+ const xmlChar *URL = xmlDictLookup(ctxt->dict, attvalue, len);
+ xmlURIPtr uri;
+
+ if (*URL != 0) {
+ uri = xmlParseURI((const char *) URL);
+ if (uri == NULL) {
+ xmlWarningMsg(ctxt, XML_WAR_NS_URI,
+ "xmlns: %s not a valid URI\n",
+ URL, NULL);
+ } else {
+ if (uri->scheme == NULL) {
+ xmlWarningMsg(ctxt, XML_WAR_NS_URI_RELATIVE,
+ "xmlns: URI %s is not absolute\n",
+ URL, NULL);
+ }
+ xmlFreeURI(uri);
+ }
+ }
+ /*
+ * check that it's not a defined namespace
+ */
+ for (j = 1;j <= nbNs;j++)
+ if (ctxt->nsTab[ctxt->nsNr - 2 * j] == NULL)
+ break;
+ if (j <= nbNs)
+ xmlErrAttributeDup(ctxt, NULL, attname);
+ else
+ if (nsPush(ctxt, NULL, URL) > 0) nbNs++;
+ if (alloc != 0) xmlFree(attvalue);
+ SKIP_BLANKS;
+ continue;
+ }
+ if (aprefix == ctxt->str_xmlns) {
+ const xmlChar *URL = xmlDictLookup(ctxt->dict, attvalue, len);
+ xmlURIPtr uri;
+
+ if (attname == ctxt->str_xml) {
+ if (URL != ctxt->str_xml_ns) {
+ xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE,
+ "xml namespace prefix mapped to wrong URI\n",
+ NULL, NULL, NULL);
+ }
+ /*
+ * Do not keep a namespace definition node
+ */
+ if (alloc != 0) xmlFree(attvalue);
+ SKIP_BLANKS;
+ continue;
+ }
+ uri = xmlParseURI((const char *) URL);
+ if (uri == NULL) {
+ xmlWarningMsg(ctxt, XML_WAR_NS_URI,
+ "xmlns:%s: '%s' is not a valid URI\n",
+ attname, URL);
+ } else {
+ if ((ctxt->pedantic) && (uri->scheme == NULL)) {
+ xmlWarningMsg(ctxt, XML_WAR_NS_URI_RELATIVE,
+ "xmlns:%s: URI %s is not absolute\n",
+ attname, URL);
+ }
+ xmlFreeURI(uri);
+ }
+
+ /*
+ * check that it's not a defined namespace
+ */
+ for (j = 1;j <= nbNs;j++)
+ if (ctxt->nsTab[ctxt->nsNr - 2 * j] == attname)
+ break;
+ if (j <= nbNs)
+ xmlErrAttributeDup(ctxt, aprefix, attname);
+ else
+ if (nsPush(ctxt, attname, URL) > 0) nbNs++;
+ if (alloc != 0) xmlFree(attvalue);
+ SKIP_BLANKS;
+ if (ctxt->input->base != base) goto base_changed;
+ continue;
+ }
+
+ /*
+ * Add the pair to atts
+ */
+ if ((atts == NULL) || (nbatts + 5 > maxatts)) {
+ if (xmlCtxtGrowAttrs(ctxt, nbatts + 5) < 0) {
+ if (attvalue[len] == 0)
+ xmlFree(attvalue);
+ goto failed;
+ }
+ maxatts = ctxt->maxatts;
+ atts = ctxt->atts;
+ }
+ ctxt->attallocs[nratts++] = alloc;
+ atts[nbatts++] = attname;
+ atts[nbatts++] = aprefix;
+ atts[nbatts++] = NULL; /* the URI will be fetched later */
+ atts[nbatts++] = attvalue;
+ attvalue += len;
+ atts[nbatts++] = attvalue;
+ /*
+ * tag if some deallocation is needed
+ */
+ if (alloc != 0) attval = 1;
+ } else {
+ if ((attvalue != NULL) && (attvalue[len] == 0))
+ xmlFree(attvalue);
+ }
+
+failed:
+
+ GROW
+ if (ctxt->input->base != base) goto base_changed;
+ if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
+ break;
+ if (!IS_BLANK_CH(RAW)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "attributes construct error\n");
+ }
+ SKIP_BLANKS;
+ if ((cons == ctxt->input->consumed) && (q == CUR_PTR) &&
+ (attname == NULL) && (attvalue == NULL)) {
+ xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "xmlParseStartTag: problem parsing attributes\n");
+ break;
+ }
+ GROW;
+ if (ctxt->input->base != base) goto base_changed;
+ }
+
+ /*
+ * The attributes defaulting
+ */
+ if (ctxt->attsDefault != NULL) {
+ xmlDefAttrsPtr defaults;
+
+ defaults = xmlHashLookup2(ctxt->attsDefault, localname, prefix);
+ if (defaults != NULL) {
+ for (i = 0;i < defaults->nbAttrs;i++) {
+ attname = defaults->values[4 * i];
+ aprefix = defaults->values[4 * i + 1];
+
+ /*
+ * special work for namespaces defaulted defs
+ */
+ if ((attname == ctxt->str_xmlns) && (aprefix == NULL)) {
+ /*
+ * check that it's not a defined namespace
+ */
+ for (j = 1;j <= nbNs;j++)
+ if (ctxt->nsTab[ctxt->nsNr - 2 * j] == NULL)
+ break;
+ if (j <= nbNs) continue;
+
+ nsname = xmlGetNamespace(ctxt, NULL);
+ if (nsname != defaults->values[4 * i + 2]) {
+ if (nsPush(ctxt, NULL,
+ defaults->values[4 * i + 2]) > 0)
+ nbNs++;
+ }
+ } else if (aprefix == ctxt->str_xmlns) {
+ /*
+ * check that it's not a defined namespace
+ */
+ for (j = 1;j <= nbNs;j++)
+ if (ctxt->nsTab[ctxt->nsNr - 2 * j] == attname)
+ break;
+ if (j <= nbNs) continue;
+
+ nsname = xmlGetNamespace(ctxt, attname);
+ if (nsname != defaults->values[2]) {
+ if (nsPush(ctxt, attname,
+ defaults->values[4 * i + 2]) > 0)
+ nbNs++;
+ }
+ } else {
+ /*
+ * check that it's not a defined attribute
+ */
+ for (j = 0;j < nbatts;j+=5) {
+ if ((attname == atts[j]) && (aprefix == atts[j+1]))
+ break;
+ }
+ if (j < nbatts) continue;
+
+ if ((atts == NULL) || (nbatts + 5 > maxatts)) {
+ if (xmlCtxtGrowAttrs(ctxt, nbatts + 5) < 0) {
+ return(NULL);
+ }
+ maxatts = ctxt->maxatts;
+ atts = ctxt->atts;
+ }
+ atts[nbatts++] = attname;
+ atts[nbatts++] = aprefix;
+ if (aprefix == NULL)
+ atts[nbatts++] = NULL;
+ else
+ atts[nbatts++] = xmlGetNamespace(ctxt, aprefix);
+ atts[nbatts++] = defaults->values[4 * i + 2];
+ atts[nbatts++] = defaults->values[4 * i + 3];
+ nbdef++;
+ }
+ }
+ }
+ }
+
+ /*
+ * The attributes checkings
+ */
+ for (i = 0; i < nbatts;i += 5) {
+ nsname = xmlGetNamespace(ctxt, atts[i + 1]);
+ if ((atts[i + 1] != NULL) && (nsname == NULL)) {
+ xmlNsErr(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
+ "Namespace prefix %s for %s on %s is not defined\n",
+ atts[i + 1], atts[i], localname);
+ }
+ atts[i + 2] = nsname;
+ /*
+ * [ WFC: Unique Att Spec ]
+ * No attribute name may appear more than once in the same
+ * start-tag or empty-element tag.
+ * As extended by the Namespace in XML REC.
+ */
+ for (j = 0; j < i;j += 5) {
+ if (atts[i] == atts[j]) {
+ if (atts[i+1] == atts[j+1]) {
+ xmlErrAttributeDup(ctxt, atts[i+1], atts[i]);
+ break;
+ }
+ if ((nsname != NULL) && (atts[j + 2] == nsname)) {
+ xmlNsErr(ctxt, XML_NS_ERR_ATTRIBUTE_REDEFINED,
+ "Namespaced Attribute %s in '%s' redefined\n",
+ atts[i], nsname, NULL);
+ break;
+ }
+ }
+ }
+ }
+
+ nsname = xmlGetNamespace(ctxt, prefix);
+ if ((prefix != NULL) && (nsname == NULL)) {
+ xmlNsErr(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
+ "Namespace prefix %s on %s is not defined\n",
+ prefix, localname, NULL);
+ }
+ *pref = prefix;
+ *URI = nsname;
+
+ /*
+ * SAX: Start of Element !
+ */
+ if ((ctxt->sax != NULL) && (ctxt->sax->startElementNs != NULL) &&
+ (!ctxt->disableSAX)) {
+ if (nbNs > 0)
+ ctxt->sax->startElementNs(ctxt->userData, localname, prefix,
+ nsname, nbNs, &ctxt->nsTab[ctxt->nsNr - 2 * nbNs],
+ nbatts / 5, nbdef, atts);
+ else
+ ctxt->sax->startElementNs(ctxt->userData, localname, prefix,
+ nsname, 0, NULL, nbatts / 5, nbdef, atts);
+ }
+
+ /*
+ * Free up attribute allocated strings if needed
+ */
+ if (attval != 0) {
+ for (i = 3,j = 0; j < nratts;i += 5,j++)
+ if ((ctxt->attallocs[j] != 0) && (atts[i] != NULL))
+ xmlFree((xmlChar *) atts[i]);
+ }
+
+ return(localname);
+
+base_changed:
+ /*
+ * the attribute strings are valid iif the base didn't changed
+ */
+ if (attval != 0) {
+ for (i = 3,j = 0; j < nratts;i += 5,j++)
+ if ((ctxt->attallocs[j] != 0) && (atts[i] != NULL))
+ xmlFree((xmlChar *) atts[i]);
+ }
+ ctxt->input->cur = ctxt->input->base + cur;
+ if (ctxt->wellFormed == 1) {
+ goto reparse;
+ }
+ return(NULL);
+}
+
+/**
+ * xmlParseEndTag2:
+ * @ctxt: an XML parser context
+ * @line: line of the start tag
+ * @nsNr: number of namespaces on the start tag
+ *
+ * parse an end of tag
+ *
+ * [42] ETag ::= '</' Name S? '>'
+ *
+ * With namespace
+ *
+ * [NS 9] ETag ::= '</' QName S? '>'
+ */
+
+static void
+xmlParseEndTag2(xmlParserCtxtPtr ctxt, const xmlChar *prefix,
+ const xmlChar *URI, int line, int nsNr, int tlen) {
+ const xmlChar *name;
+
+ GROW;
+ if ((RAW != '<') || (NXT(1) != '/')) {
+ xmlFatalErr(ctxt, XML_ERR_LTSLASH_REQUIRED, NULL);
+ return;
+ }
+ SKIP(2);
+
+ if ((tlen > 0) && (memcmp(ctxt->input->cur, ctxt->name, tlen) == 0)) {
+ if (ctxt->input->cur[tlen] == '>') {
+ ctxt->input->cur += tlen + 1;
+ goto done;
+ }
+ ctxt->input->cur += tlen;
+ name = (xmlChar*)1;
+ } else {
+ if (prefix == NULL)
+ name = xmlParseNameAndCompare(ctxt, ctxt->name);
+ else
+ name = xmlParseQNameAndCompare(ctxt, ctxt->name, prefix);
+ }
+
+ /*
+ * We should definitely be at the ending "S? '>'" part
+ */
+ GROW;
+ SKIP_BLANKS;
+ if ((!IS_BYTE_CHAR(RAW)) || (RAW != '>')) {
+ xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL);
+ } else
+ NEXT1;
+
+ /*
+ * [ WFC: Element Type Match ]
+ * The Name in an element's end-tag must match the element type in the
+ * start-tag.
+ *
+ */
+ if (name != (xmlChar*)1) {
+ if (name == NULL) name = BAD_CAST "unparseable";
+ xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
+ "Opening and ending tag mismatch: %s line %d and %s\n",
+ ctxt->name, line, name);
+ }
+
+ /*
+ * SAX: End of Tag
+ */
+done:
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElementNs != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->endElementNs(ctxt->userData, ctxt->name, prefix, URI);
+
+ spacePop(ctxt);
+ if (nsNr != 0)
+ nsPop(ctxt, nsNr);
+ return;
+}
+
+/**
+ * xmlParseCDSect:
+ * @ctxt: an XML parser context
+ *
+ * Parse escaped pure raw content.
+ *
+ * [18] CDSect ::= CDStart CData CDEnd
+ *
+ * [19] CDStart ::= '<![CDATA['
+ *
+ * [20] Data ::= (Char* - (Char* ']]>' Char*))
+ *
+ * [21] CDEnd ::= ']]>'
+ */
+void
+xmlParseCDSect(xmlParserCtxtPtr ctxt) {
+ xmlChar *buf = NULL;
+ int len = 0;
+ int size = XML_PARSER_BUFFER_SIZE;
+ int r, rl;
+ int s, sl;
+ int cur, l;
+ int count = 0;
+
+ /* Check 2.6.0 was NXT(0) not RAW */
+ if (CMP9(CUR_PTR, '<', '!', '[', 'C', 'D', 'A', 'T', 'A', '[')) {
+ SKIP(9);
+ } else
+ return;
+
+ ctxt->instate = XML_PARSER_CDATA_SECTION;
+ r = CUR_CHAR(rl);
+ if (!IS_CHAR(r)) {
+ xmlFatalErr(ctxt, XML_ERR_CDATA_NOT_FINISHED, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ return;
+ }
+ NEXTL(rl);
+ s = CUR_CHAR(sl);
+ if (!IS_CHAR(s)) {
+ xmlFatalErr(ctxt, XML_ERR_CDATA_NOT_FINISHED, NULL);
+ ctxt->instate = XML_PARSER_CONTENT;
+ return;
+ }
+ NEXTL(sl);
+ cur = CUR_CHAR(l);
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return;
+ }
+ while (IS_CHAR(cur) &&
+ ((r != ']') || (s != ']') || (cur != '>'))) {
+ if (len + 5 >= size) {
+ size *= 2;
+ buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return;
+ }
+ }
+ COPY_BUF(rl,buf,len,r);
+ r = s;
+ rl = sl;
+ s = cur;
+ sl = l;
+ count++;
+ if (count > 50) {
+ GROW;
+ count = 0;
+ }
+ NEXTL(l);
+ cur = CUR_CHAR(l);
+ }
+ buf[len] = 0;
+ ctxt->instate = XML_PARSER_CONTENT;
+ if (cur != '>') {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_CDATA_NOT_FINISHED,
+ "CData section not finished\n%.50s\n", buf);
+ xmlFree(buf);
+ return;
+ }
+ NEXTL(l);
+
+ /*
+ * OK the buffer is to be consumed as cdata.
+ */
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
+ if (ctxt->sax->cdataBlock != NULL)
+ ctxt->sax->cdataBlock(ctxt->userData, buf, len);
+ else if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData, buf, len);
+ }
+ xmlFree(buf);
+}
+
+/**
+ * xmlParseContent:
+ * @ctxt: an XML parser context
+ *
+ * Parse a content:
+ *
+ * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*
+ */
+
+void
+xmlParseContent(xmlParserCtxtPtr ctxt) {
+ GROW;
+ while ((RAW != 0) &&
+ ((RAW != '<') || (NXT(1) != '/'))) {
+ const xmlChar *test = CUR_PTR;
+ unsigned int cons = ctxt->input->consumed;
+ const xmlChar *cur = ctxt->input->cur;
+
+ /*
+ * First case : a Processing Instruction.
+ */
+ if ((*cur == '<') && (cur[1] == '?')) {
+ xmlParsePI(ctxt);
+ }
+
+ /*
+ * Second case : a CDSection
+ */
+ /* 2.6.0 test was *cur not RAW */
+ else if (CMP9(CUR_PTR, '<', '!', '[', 'C', 'D', 'A', 'T', 'A', '[')) {
+ xmlParseCDSect(ctxt);
+ }
+
+ /*
+ * Third case : a comment
+ */
+ else if ((*cur == '<') && (NXT(1) == '!') &&
+ (NXT(2) == '-') && (NXT(3) == '-')) {
+ xmlParseComment(ctxt);
+ ctxt->instate = XML_PARSER_CONTENT;
+ }
+
+ /*
+ * Fourth case : a sub-element.
+ */
+ else if (*cur == '<') {
+ xmlParseElement(ctxt);
+ }
+
+ /*
+ * Fifth case : a reference. If if has not been resolved,
+ * parsing returns it's Name, create the node
+ */
+
+ else if (*cur == '&') {
+ xmlParseReference(ctxt);
+ }
+
+ /*
+ * Last case, text. Note that References are handled directly.
+ */
+ else {
+ xmlParseCharData(ctxt, 0);
+ }
+
+ GROW;
+ /*
+ * Pop-up of finished entities.
+ */
+ while ((RAW == 0) && (ctxt->inputNr > 1))
+ xmlPopInput(ctxt);
+ SHRINK;
+
+ if ((cons == ctxt->input->consumed) && (test == CUR_PTR)) {
+ xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "detected an error in element content\n");
+ ctxt->instate = XML_PARSER_EOF;
+ break;
+ }
+ }
+}
+
+/**
+ * xmlParseElement:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML element, this is highly recursive
+ *
+ * [39] element ::= EmptyElemTag | STag content ETag
+ *
+ * [ WFC: Element Type Match ]
+ * The Name in an element's end-tag must match the element type in the
+ * start-tag.
+ *
+ */
+
+void
+xmlParseElement(xmlParserCtxtPtr ctxt) {
+ const xmlChar *name;
+ const xmlChar *prefix;
+ const xmlChar *URI;
+ xmlParserNodeInfo node_info;
+ int line, tlen;
+ xmlNodePtr ret;
+ int nsNr = ctxt->nsNr;
+
+ /* Capture start position */
+ if (ctxt->record_info) {
+ node_info.begin_pos = ctxt->input->consumed +
+ (CUR_PTR - ctxt->input->base);
+ node_info.begin_line = ctxt->input->line;
+ }
+
+ if (ctxt->spaceNr == 0)
+ spacePush(ctxt, -1);
+ else
+ spacePush(ctxt, *ctxt->space);
+
+ line = ctxt->input->line;
+#ifdef LIBXML_SAX1_ENABLED
+ if (ctxt->sax2)
+#endif /* LIBXML_SAX1_ENABLED */
+ name = xmlParseStartTag2(ctxt, &prefix, &URI, &tlen);
+#ifdef LIBXML_SAX1_ENABLED
+ else
+ name = xmlParseStartTag(ctxt);
+#endif /* LIBXML_SAX1_ENABLED */
+ if (name == NULL) {
+ spacePop(ctxt);
+ return;
+ }
+ namePush(ctxt, name);
+ ret = ctxt->node;
+
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * [ VC: Root Element Type ]
+ * The Name in the document type declaration must match the element
+ * type of the root element.
+ */
+ if (ctxt->validate && ctxt->wellFormed && ctxt->myDoc &&
+ ctxt->node && (ctxt->node == ctxt->myDoc->children))
+ ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
+#endif /* LIBXML_VALID_ENABLED */
+
+ /*
+ * Check for an Empty Element.
+ */
+ if ((RAW == '/') && (NXT(1) == '>')) {
+ SKIP(2);
+ if (ctxt->sax2) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElementNs != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->endElementNs(ctxt->userData, name, prefix, URI);
+#ifdef LIBXML_SAX1_ENABLED
+ } else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->endElement(ctxt->userData, name);
+#endif /* LIBXML_SAX1_ENABLED */
+ }
+ namePop(ctxt);
+ spacePop(ctxt);
+ if (nsNr != ctxt->nsNr)
+ nsPop(ctxt, ctxt->nsNr - nsNr);
+ if ( ret != NULL && ctxt->record_info ) {
+ node_info.end_pos = ctxt->input->consumed +
+ (CUR_PTR - ctxt->input->base);
+ node_info.end_line = ctxt->input->line;
+ node_info.node = ret;
+ xmlParserAddNodeInfo(ctxt, &node_info);
+ }
+ return;
+ }
+ if (RAW == '>') {
+ NEXT1;
+ } else {
+ xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_GT_REQUIRED,
+ "Couldn't find end of Start Tag %s line %d\n",
+ name, line, NULL);
+
+ /*
+ * end of parsing of this node.
+ */
+ nodePop(ctxt);
+ namePop(ctxt);
+ spacePop(ctxt);
+ if (nsNr != ctxt->nsNr)
+ nsPop(ctxt, ctxt->nsNr - nsNr);
+
+ /*
+ * Capture end position and add node
+ */
+ if ( ret != NULL && ctxt->record_info ) {
+ node_info.end_pos = ctxt->input->consumed +
+ (CUR_PTR - ctxt->input->base);
+ node_info.end_line = ctxt->input->line;
+ node_info.node = ret;
+ xmlParserAddNodeInfo(ctxt, &node_info);
+ }
+ return;
+ }
+
+ /*
+ * Parse the content of the element:
+ */
+ xmlParseContent(ctxt);
+ if (!IS_BYTE_CHAR(RAW)) {
+ xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NOT_FINISHED,
+ "Premature end of data in tag %s line %d\n",
+ name, line, NULL);
+
+ /*
+ * end of parsing of this node.
+ */
+ nodePop(ctxt);
+ namePop(ctxt);
+ spacePop(ctxt);
+ if (nsNr != ctxt->nsNr)
+ nsPop(ctxt, ctxt->nsNr - nsNr);
+ return;
+ }
+
+ /*
+ * parse the end of tag: '</' should be here.
+ */
+ if (ctxt->sax2) {
+ xmlParseEndTag2(ctxt, prefix, URI, line, ctxt->nsNr - nsNr, tlen);
+ namePop(ctxt);
+ }
+#ifdef LIBXML_SAX1_ENABLED
+ else
+ xmlParseEndTag1(ctxt, line);
+#endif /* LIBXML_SAX1_ENABLED */
+
+ /*
+ * Capture end position and add node
+ */
+ if ( ret != NULL && ctxt->record_info ) {
+ node_info.end_pos = ctxt->input->consumed +
+ (CUR_PTR - ctxt->input->base);
+ node_info.end_line = ctxt->input->line;
+ node_info.node = ret;
+ xmlParserAddNodeInfo(ctxt, &node_info);
+ }
+}
+
+/**
+ * xmlParseVersionNum:
+ * @ctxt: an XML parser context
+ *
+ * parse the XML version value.
+ *
+ * [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+
+ *
+ * Returns the string giving the XML version number, or NULL
+ */
+xmlChar *
+xmlParseVersionNum(xmlParserCtxtPtr ctxt) {
+ xmlChar *buf = NULL;
+ int len = 0;
+ int size = 10;
+ xmlChar cur;
+
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ cur = CUR;
+ while (((cur >= 'a') && (cur <= 'z')) ||
+ ((cur >= 'A') && (cur <= 'Z')) ||
+ ((cur >= '0') && (cur <= '9')) ||
+ (cur == '_') || (cur == '.') ||
+ (cur == ':') || (cur == '-')) {
+ if (len + 1 >= size) {
+ size *= 2;
+ buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ }
+ buf[len++] = cur;
+ NEXT;
+ cur=CUR;
+ }
+ buf[len] = 0;
+ return(buf);
+}
+
+/**
+ * xmlParseVersionInfo:
+ * @ctxt: an XML parser context
+ *
+ * parse the XML version.
+ *
+ * [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ")
+ *
+ * [25] Eq ::= S? '=' S?
+ *
+ * Returns the version string, e.g. "1.0"
+ */
+
+xmlChar *
+xmlParseVersionInfo(xmlParserCtxtPtr ctxt) {
+ xmlChar *version = NULL;
+
+ if (CMP7(CUR_PTR, 'v', 'e', 'r', 's', 'i', 'o', 'n')) {
+ SKIP(7);
+ SKIP_BLANKS;
+ if (RAW != '=') {
+ xmlFatalErr(ctxt, XML_ERR_EQUAL_REQUIRED, NULL);
+ return(NULL);
+ }
+ NEXT;
+ SKIP_BLANKS;
+ if (RAW == '"') {
+ NEXT;
+ version = xmlParseVersionNum(ctxt);
+ if (RAW != '"') {
+ xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
+ } else
+ NEXT;
+ } else if (RAW == '\''){
+ NEXT;
+ version = xmlParseVersionNum(ctxt);
+ if (RAW != '\'') {
+ xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
+ } else
+ NEXT;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_STRING_NOT_STARTED, NULL);
+ }
+ }
+ return(version);
+}
+
+/**
+ * xmlParseEncName:
+ * @ctxt: an XML parser context
+ *
+ * parse the XML encoding name
+ *
+ * [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
+ *
+ * Returns the encoding name value or NULL
+ */
+xmlChar *
+xmlParseEncName(xmlParserCtxtPtr ctxt) {
+ xmlChar *buf = NULL;
+ int len = 0;
+ int size = 10;
+ xmlChar cur;
+
+ cur = CUR;
+ if (((cur >= 'a') && (cur <= 'z')) ||
+ ((cur >= 'A') && (cur <= 'Z'))) {
+ buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+
+ buf[len++] = cur;
+ NEXT;
+ cur = CUR;
+ while (((cur >= 'a') && (cur <= 'z')) ||
+ ((cur >= 'A') && (cur <= 'Z')) ||
+ ((cur >= '0') && (cur <= '9')) ||
+ (cur == '.') || (cur == '_') ||
+ (cur == '-')) {
+ if (len + 1 >= size) {
+ size *= 2;
+ buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ }
+ buf[len++] = cur;
+ NEXT;
+ cur = CUR;
+ if (cur == 0) {
+ SHRINK;
+ GROW;
+ cur = CUR;
+ }
+ }
+ buf[len] = 0;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_ENCODING_NAME, NULL);
+ }
+ return(buf);
+}
+
+/**
+ * xmlParseEncodingDecl:
+ * @ctxt: an XML parser context
+ *
+ * parse the XML encoding declaration
+ *
+ * [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'")
+ *
+ * this setups the conversion filters.
+ *
+ * Returns the encoding value or NULL
+ */
+
+const xmlChar *
+xmlParseEncodingDecl(xmlParserCtxtPtr ctxt) {
+ xmlChar *encoding = NULL;
+
+ SKIP_BLANKS;
+ if (CMP8(CUR_PTR, 'e', 'n', 'c', 'o', 'd', 'i', 'n', 'g')) {
+ SKIP(8);
+ SKIP_BLANKS;
+ if (RAW != '=') {
+ xmlFatalErr(ctxt, XML_ERR_EQUAL_REQUIRED, NULL);
+ return(NULL);
+ }
+ NEXT;
+ SKIP_BLANKS;
+ if (RAW == '"') {
+ NEXT;
+ encoding = xmlParseEncName(ctxt);
+ if (RAW != '"') {
+ xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
+ } else
+ NEXT;
+ } else if (RAW == '\''){
+ NEXT;
+ encoding = xmlParseEncName(ctxt);
+ if (RAW != '\'') {
+ xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
+ } else
+ NEXT;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_STRING_NOT_STARTED, NULL);
+ }
+ /*
+ * UTF-16 encoding stwich has already taken place at this stage,
+ * more over the little-endian/big-endian selection is already done
+ */
+ if ((encoding != NULL) &&
+ ((!xmlStrcasecmp(encoding, BAD_CAST "UTF-16")) ||
+ (!xmlStrcasecmp(encoding, BAD_CAST "UTF16")))) {
+ if (ctxt->encoding != NULL)
+ xmlFree((xmlChar *) ctxt->encoding);
+ ctxt->encoding = encoding;
+ }
+ /*
+ * UTF-8 encoding is handled natively
+ */
+ else if ((encoding != NULL) &&
+ ((!xmlStrcasecmp(encoding, BAD_CAST "UTF-8")) ||
+ (!xmlStrcasecmp(encoding, BAD_CAST "UTF8")))) {
+ if (ctxt->encoding != NULL)
+ xmlFree((xmlChar *) ctxt->encoding);
+ ctxt->encoding = encoding;
+ }
+ else if (encoding != NULL) {
+ xmlCharEncodingHandlerPtr handler;
+
+ if (ctxt->input->encoding != NULL)
+ xmlFree((xmlChar *) ctxt->input->encoding);
+ ctxt->input->encoding = encoding;
+
+ handler = xmlFindCharEncodingHandler((const char *) encoding);
+ if (handler != NULL) {
+ xmlSwitchToEncoding(ctxt, handler);
+ } else {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "Unsupported encoding %s\n", encoding);
+ return(NULL);
+ }
+ }
+ }
+ return(encoding);
+}
+
+/**
+ * xmlParseSDDecl:
+ * @ctxt: an XML parser context
+ *
+ * parse the XML standalone declaration
+ *
+ * [32] SDDecl ::= S 'standalone' Eq
+ * (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no')'"'))
+ *
+ * [ VC: Standalone Document Declaration ]
+ * TODO The standalone document declaration must have the value "no"
+ * if any external markup declarations contain declarations of:
+ * - attributes with default values, if elements to which these
+ * attributes apply appear in the document without specifications
+ * of values for these attributes, or
+ * - entities (other than amp, lt, gt, apos, quot), if references
+ * to those entities appear in the document, or
+ * - attributes with values subject to normalization, where the
+ * attribute appears in the document with a value which will change
+ * as a result of normalization, or
+ * - element types with element content, if white space occurs directly
+ * within any instance of those types.
+ *
+ * Returns 1 if standalone, 0 otherwise
+ */
+
+int
+xmlParseSDDecl(xmlParserCtxtPtr ctxt) {
+ int standalone = -1;
+
+ SKIP_BLANKS;
+ if (CMP10(CUR_PTR, 's', 't', 'a', 'n', 'd', 'a', 'l', 'o', 'n', 'e')) {
+ SKIP(10);
+ SKIP_BLANKS;
+ if (RAW != '=') {
+ xmlFatalErr(ctxt, XML_ERR_EQUAL_REQUIRED, NULL);
+ return(standalone);
+ }
+ NEXT;
+ SKIP_BLANKS;
+ if (RAW == '\''){
+ NEXT;
+ if ((RAW == 'n') && (NXT(1) == 'o')) {
+ standalone = 0;
+ SKIP(2);
+ } else if ((RAW == 'y') && (NXT(1) == 'e') &&
+ (NXT(2) == 's')) {
+ standalone = 1;
+ SKIP(3);
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_STANDALONE_VALUE, NULL);
+ }
+ if (RAW != '\'') {
+ xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
+ } else
+ NEXT;
+ } else if (RAW == '"'){
+ NEXT;
+ if ((RAW == 'n') && (NXT(1) == 'o')) {
+ standalone = 0;
+ SKIP(2);
+ } else if ((RAW == 'y') && (NXT(1) == 'e') &&
+ (NXT(2) == 's')) {
+ standalone = 1;
+ SKIP(3);
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_STANDALONE_VALUE, NULL);
+ }
+ if (RAW != '"') {
+ xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
+ } else
+ NEXT;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_STRING_NOT_STARTED, NULL);
+ }
+ }
+ return(standalone);
+}
+
+/**
+ * xmlParseXMLDecl:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML declaration header
+ *
+ * [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
+ */
+
+void
+xmlParseXMLDecl(xmlParserCtxtPtr ctxt) {
+ xmlChar *version;
+
+ /*
+ * We know that '<?xml' is here.
+ */
+ SKIP(5);
+
+ if (!IS_BLANK_CH(RAW)) {
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+ "Blank needed after '<?xml'\n");
+ }
+ SKIP_BLANKS;
+
+ /*
+ * We must have the VersionInfo here.
+ */
+ version = xmlParseVersionInfo(ctxt);
+ if (version == NULL) {
+ xmlFatalErr(ctxt, XML_ERR_VERSION_MISSING, NULL);
+ } else {
+ if (!xmlStrEqual(version, (const xmlChar *) XML_DEFAULT_VERSION)) {
+ /*
+ * TODO: Blueberry should be detected here
+ */
+ xmlWarningMsg(ctxt, XML_WAR_UNKNOWN_VERSION,
+ "Unsupported version '%s'\n",
+ version, NULL);
+ }
+ if (ctxt->version != NULL)
+ xmlFree((void *) ctxt->version);
+ ctxt->version = version;
+ }
+
+ /*
+ * We may have the encoding declaration
+ */
+ if (!IS_BLANK_CH(RAW)) {
+ if ((RAW == '?') && (NXT(1) == '>')) {
+ SKIP(2);
+ return;
+ }
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, "Blank needed here\n");
+ }
+ xmlParseEncodingDecl(ctxt);
+ if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
+ /*
+ * The XML REC instructs us to stop parsing right here
+ */
+ return;
+ }
+
+ /*
+ * We may have the standalone status.
+ */
+ if ((ctxt->input->encoding != NULL) && (!IS_BLANK_CH(RAW))) {
+ if ((RAW == '?') && (NXT(1) == '>')) {
+ SKIP(2);
+ return;
+ }
+ xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, "Blank needed here\n");
+ }
+ SKIP_BLANKS;
+ ctxt->input->standalone = xmlParseSDDecl(ctxt);
+
+ SKIP_BLANKS;
+ if ((RAW == '?') && (NXT(1) == '>')) {
+ SKIP(2);
+ } else if (RAW == '>') {
+ /* Deprecated old WD ... */
+ xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL);
+ NEXT;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL);
+ MOVETO_ENDTAG(CUR_PTR);
+ NEXT;
+ }
+}
+
+/**
+ * xmlParseMisc:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML Misc* optional field.
+ *
+ * [27] Misc ::= Comment | PI | S
+ */
+
+void
+xmlParseMisc(xmlParserCtxtPtr ctxt) {
+ while (((RAW == '<') && (NXT(1) == '?')) ||
+ (CMP4(CUR_PTR, '<', '!', '-', '-')) ||
+ IS_BLANK_CH(CUR)) {
+ if ((RAW == '<') && (NXT(1) == '?')) {
+ xmlParsePI(ctxt);
+ } else if (IS_BLANK_CH(CUR)) {
+ NEXT;
+ } else
+ xmlParseComment(ctxt);
+ }
+}
+
+/**
+ * xmlParseDocument:
+ * @ctxt: an XML parser context
+ *
+ * parse an XML document (and build a tree if using the standard SAX
+ * interface).
+ *
+ * [1] document ::= prolog element Misc*
+ *
+ * [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
+ *
+ * Returns 0, -1 in case of error. the parser context is augmented
+ * as a result of the parsing.
+ */
+
+int
+xmlParseDocument(xmlParserCtxtPtr ctxt) {
+ xmlChar start[4];
+ xmlCharEncoding enc;
+
+ xmlInitParser();
+
+ GROW;
+
+ /*
+ * SAX: detecting the level.
+ */
+ xmlDetectSAX2(ctxt);
+
+ /*
+ * SAX: beginning of the document processing.
+ */
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
+ ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
+
+ if ((ctxt->encoding == (const xmlChar *)XML_CHAR_ENCODING_NONE) &&
+ ((ctxt->input->end - ctxt->input->cur) >= 4)) {
+ /*
+ * Get the 4 first bytes and decode the charset
+ * if enc != XML_CHAR_ENCODING_NONE
+ * plug some encoding conversion routines.
+ */
+ start[0] = RAW;
+ start[1] = NXT(1);
+ start[2] = NXT(2);
+ start[3] = NXT(3);
+ enc = xmlDetectCharEncoding(&start[0], 4);
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+ }
+
+
+ if (CUR == 0) {
+ xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL);
+ }
+
+ /*
+ * Check for the XMLDecl in the Prolog.
+ */
+ GROW;
+ if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
+
+ /*
+ * Note that we will switch encoding on the fly.
+ */
+ xmlParseXMLDecl(ctxt);
+ if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
+ /*
+ * The XML REC instructs us to stop parsing right here
+ */
+ return(-1);
+ }
+ ctxt->standalone = ctxt->input->standalone;
+ SKIP_BLANKS;
+ } else {
+ ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
+ }
+ if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX))
+ ctxt->sax->startDocument(ctxt->userData);
+
+ /*
+ * The Misc part of the Prolog
+ */
+ GROW;
+ xmlParseMisc(ctxt);
+
+ /*
+ * Then possibly doc type declaration(s) and more Misc
+ * (doctypedecl Misc*)?
+ */
+ GROW;
+ if (CMP9(CUR_PTR, '<', '!', 'D', 'O', 'C', 'T', 'Y', 'P', 'E')) {
+
+ ctxt->inSubset = 1;
+ xmlParseDocTypeDecl(ctxt);
+ if (RAW == '[') {
+ ctxt->instate = XML_PARSER_DTD;
+ xmlParseInternalSubset(ctxt);
+ }
+
+ /*
+ * Create and update the external subset.
+ */
+ ctxt->inSubset = 2;
+ if ((ctxt->sax != NULL) && (ctxt->sax->externalSubset != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->externalSubset(ctxt->userData, ctxt->intSubName,
+ ctxt->extSubSystem, ctxt->extSubURI);
+ ctxt->inSubset = 0;
+
+
+ ctxt->instate = XML_PARSER_PROLOG;
+ xmlParseMisc(ctxt);
+ }
+
+ /*
+ * Time to start parsing the tree itself
+ */
+ GROW;
+ if (RAW != '<') {
+ xmlFatalErrMsg(ctxt, XML_ERR_DOCUMENT_EMPTY,
+ "Start tag expected, '<' not found\n");
+ } else {
+ ctxt->instate = XML_PARSER_CONTENT;
+ xmlParseElement(ctxt);
+ ctxt->instate = XML_PARSER_EPILOG;
+
+
+ /*
+ * The Misc part at the end
+ */
+ xmlParseMisc(ctxt);
+
+ if (RAW != 0) {
+ xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
+ }
+ ctxt->instate = XML_PARSER_EOF;
+ }
+
+ /*
+ * SAX: end of the document processing.
+ */
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+
+ /*
+ * Remove locally kept entity definitions if the tree was not built
+ */
+ if ((ctxt->myDoc != NULL) &&
+ (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE))) {
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
+
+ if (! ctxt->wellFormed) {
+ ctxt->valid = 0;
+ return(-1);
+ }
+ return(0);
+}
+
+/**
+ * xmlParseExtParsedEnt:
+ * @ctxt: an XML parser context
+ *
+ * parse a general parsed entity
+ * An external general parsed entity is well-formed if it matches the
+ * production labeled extParsedEnt.
+ *
+ * [78] extParsedEnt ::= TextDecl? content
+ *
+ * Returns 0, -1 in case of error. the parser context is augmented
+ * as a result of the parsing.
+ */
+
+int
+xmlParseExtParsedEnt(xmlParserCtxtPtr ctxt) {
+ xmlChar start[4];
+ xmlCharEncoding enc;
+
+ xmlDefaultSAXHandlerInit();
+
+ xmlDetectSAX2(ctxt);
+
+ GROW;
+
+ /*
+ * SAX: beginning of the document processing.
+ */
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
+ ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
+
+ /*
+ * Get the 4 first bytes and decode the charset
+ * if enc != XML_CHAR_ENCODING_NONE
+ * plug some encoding conversion routines.
+ */
+ if ((ctxt->input->end - ctxt->input->cur) >= 4) {
+ start[0] = RAW;
+ start[1] = NXT(1);
+ start[2] = NXT(2);
+ start[3] = NXT(3);
+ enc = xmlDetectCharEncoding(start, 4);
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+ }
+
+
+ if (CUR == 0) {
+ xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL);
+ }
+
+ /*
+ * Check for the XMLDecl in the Prolog.
+ */
+ GROW;
+ if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
+
+ /*
+ * Note that we will switch encoding on the fly.
+ */
+ xmlParseXMLDecl(ctxt);
+ if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
+ /*
+ * The XML REC instructs us to stop parsing right here
+ */
+ return(-1);
+ }
+ SKIP_BLANKS;
+ } else {
+ ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
+ }
+ if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX))
+ ctxt->sax->startDocument(ctxt->userData);
+
+ /*
+ * Doing validity checking on chunk doesn't make sense
+ */
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->validate = 0;
+ ctxt->loadsubset = 0;
+ ctxt->depth = 0;
+
+ xmlParseContent(ctxt);
+
+ if ((RAW == '<') && (NXT(1) == '/')) {
+ xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
+ } else if (RAW != 0) {
+ xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
+ }
+
+ /*
+ * SAX: end of the document processing.
+ */
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+
+ if (! ctxt->wellFormed) return(-1);
+ return(0);
+}
+
+#ifdef LIBXML_PUSH_ENABLED
+/************************************************************************
+ * *
+ * Progressive parsing interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlParseLookupSequence:
+ * @ctxt: an XML parser context
+ * @first: the first char to lookup
+ * @next: the next char to lookup or zero
+ * @third: the next char to lookup or zero
+ *
+ * Try to find if a sequence (first, next, third) or just (first next) or
+ * (first) is available in the input stream.
+ * This function has a side effect of (possibly) incrementing ctxt->checkIndex
+ * to avoid rescanning sequences of bytes, it DOES change the state of the
+ * parser, do not use liberally.
+ *
+ * Returns the index to the current parsing point if the full sequence
+ * is available, -1 otherwise.
+ */
+static int
+xmlParseLookupSequence(xmlParserCtxtPtr ctxt, xmlChar first,
+ xmlChar next, xmlChar third) {
+ int base, len;
+ xmlParserInputPtr in;
+ const xmlChar *buf;
+
+ in = ctxt->input;
+ if (in == NULL) return(-1);
+ base = in->cur - in->base;
+ if (base < 0) return(-1);
+ if (ctxt->checkIndex > base)
+ base = ctxt->checkIndex;
+ if (in->buf == NULL) {
+ buf = in->base;
+ len = in->length;
+ } else {
+ buf = in->buf->buffer->content;
+ len = in->buf->buffer->use;
+ }
+ /* take into account the sequence length */
+ if (third) len -= 2;
+ else if (next) len --;
+ for (;base < len;base++) {
+ if (buf[base] == first) {
+ if (third != 0) {
+ if ((buf[base + 1] != next) ||
+ (buf[base + 2] != third)) continue;
+ } else if (next != 0) {
+ if (buf[base + 1] != next) continue;
+ }
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ if (next == 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: lookup '%c' found at %d\n",
+ first, base);
+ else if (third == 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: lookup '%c%c' found at %d\n",
+ first, next, base);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: lookup '%c%c%c' found at %d\n",
+ first, next, third, base);
+#endif
+ return(base - (in->cur - in->base));
+ }
+ }
+ ctxt->checkIndex = base;
+#ifdef DEBUG_PUSH
+ if (next == 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: lookup '%c' failed\n", first);
+ else if (third == 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: lookup '%c%c' failed\n", first, next);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: lookup '%c%c%c' failed\n", first, next, third);
+#endif
+ return(-1);
+}
+
+/**
+ * xmlParseGetLasts:
+ * @ctxt: an XML parser context
+ * @lastlt: pointer to store the last '<' from the input
+ * @lastgt: pointer to store the last '>' from the input
+ *
+ * Lookup the last < and > in the current chunk
+ */
+static void
+xmlParseGetLasts(xmlParserCtxtPtr ctxt, const xmlChar **lastlt,
+ const xmlChar **lastgt) {
+ const xmlChar *tmp;
+
+ if ((ctxt == NULL) || (lastlt == NULL) || (lastgt == NULL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Internal error: xmlParseGetLasts\n");
+ return;
+ }
+ if ((ctxt->progressive == 1) && (ctxt->inputNr == 1)) {
+ tmp = ctxt->input->end;
+ tmp--;
+ while ((tmp >= ctxt->input->base) && (*tmp != '<') &&
+ (*tmp != '>')) tmp--;
+ if (tmp < ctxt->input->base) {
+ *lastlt = NULL;
+ *lastgt = NULL;
+ } else if (*tmp == '<') {
+ *lastlt = tmp;
+ tmp--;
+ while ((tmp >= ctxt->input->base) && (*tmp != '>')) tmp--;
+ if (tmp < ctxt->input->base)
+ *lastgt = NULL;
+ else
+ *lastgt = tmp;
+ } else {
+ *lastgt = tmp;
+ tmp--;
+ while ((tmp >= ctxt->input->base) && (*tmp != '<')) tmp--;
+ if (tmp < ctxt->input->base)
+ *lastlt = NULL;
+ else
+ *lastlt = tmp;
+ }
+
+ } else {
+ *lastlt = NULL;
+ *lastgt = NULL;
+ }
+}
+/**
+ * xmlParseTryOrFinish:
+ * @ctxt: an XML parser context
+ * @terminate: last chunk indicator
+ *
+ * Try to progress on parsing
+ *
+ * Returns zero if no parsing was possible
+ */
+static int
+xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
+ int ret = 0;
+ int avail, tlen;
+ xmlChar cur, next;
+ const xmlChar *lastlt, *lastgt;
+
+#ifdef DEBUG_PUSH
+ switch (ctxt->instate) {
+ case XML_PARSER_EOF:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try EOF\n"); break;
+ case XML_PARSER_START:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try START\n"); break;
+ case XML_PARSER_MISC:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try MISC\n");break;
+ case XML_PARSER_COMMENT:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try COMMENT\n");break;
+ case XML_PARSER_PROLOG:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try PROLOG\n");break;
+ case XML_PARSER_START_TAG:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try START_TAG\n");break;
+ case XML_PARSER_CONTENT:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try CONTENT\n");break;
+ case XML_PARSER_CDATA_SECTION:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try CDATA_SECTION\n");break;
+ case XML_PARSER_END_TAG:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try END_TAG\n");break;
+ case XML_PARSER_ENTITY_DECL:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try ENTITY_DECL\n");break;
+ case XML_PARSER_ENTITY_VALUE:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try ENTITY_VALUE\n");break;
+ case XML_PARSER_ATTRIBUTE_VALUE:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try ATTRIBUTE_VALUE\n");break;
+ case XML_PARSER_DTD:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try DTD\n");break;
+ case XML_PARSER_EPILOG:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try EPILOG\n");break;
+ case XML_PARSER_PI:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try PI\n");break;
+ case XML_PARSER_IGNORE:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: try IGNORE\n");break;
+ }
+#endif
+
+ if ((ctxt->input != NULL) &&
+ (ctxt->input->cur - ctxt->input->base > 4096)) {
+ xmlSHRINK(ctxt);
+ ctxt->checkIndex = 0;
+ }
+ xmlParseGetLasts(ctxt, &lastlt, &lastgt);
+
+ while (1) {
+ if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1))
+ return(0);
+
+
+ /*
+ * Pop-up of finished entities.
+ */
+ while ((RAW == 0) && (ctxt->inputNr > 1))
+ xmlPopInput(ctxt);
+
+ if (ctxt->input == NULL) break;
+ if (ctxt->input->buf == NULL)
+ avail = ctxt->input->length -
+ (ctxt->input->cur - ctxt->input->base);
+ else {
+ /*
+ * If we are operating on converted input, try to flush
+ * remainng chars to avoid them stalling in the non-converted
+ * buffer.
+ */
+ if ((ctxt->input->buf->raw != NULL) &&
+ (ctxt->input->buf->raw->use > 0)) {
+ int base = ctxt->input->base -
+ ctxt->input->buf->buffer->content;
+ int current = ctxt->input->cur - ctxt->input->base;
+
+ xmlParserInputBufferPush(ctxt->input->buf, 0, "");
+ ctxt->input->base = ctxt->input->buf->buffer->content + base;
+ ctxt->input->cur = ctxt->input->base + current;
+ ctxt->input->end =
+ &ctxt->input->buf->buffer->content[
+ ctxt->input->buf->buffer->use];
+ }
+ avail = ctxt->input->buf->buffer->use -
+ (ctxt->input->cur - ctxt->input->base);
+ }
+ if (avail < 1)
+ goto done;
+ switch (ctxt->instate) {
+ case XML_PARSER_EOF:
+ /*
+ * Document parsing is done !
+ */
+ goto done;
+ case XML_PARSER_START:
+ if (ctxt->charset == XML_CHAR_ENCODING_NONE) {
+ xmlChar start[4];
+ xmlCharEncoding enc;
+
+ /*
+ * Very first chars read from the document flow.
+ */
+ if (avail < 4)
+ goto done;
+
+ /*
+ * Get the 4 first bytes and decode the charset
+ * if enc != XML_CHAR_ENCODING_NONE
+ * plug some encoding conversion routines.
+ */
+ start[0] = RAW;
+ start[1] = NXT(1);
+ start[2] = NXT(2);
+ start[3] = NXT(3);
+ enc = xmlDetectCharEncoding(start, 4);
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+ break;
+ }
+
+ if (avail < 2)
+ goto done;
+ cur = ctxt->input->cur[0];
+ next = ctxt->input->cur[1];
+ if (cur == 0) {
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
+ ctxt->sax->setDocumentLocator(ctxt->userData,
+ &xmlDefaultSAXLocator);
+ xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL);
+ ctxt->instate = XML_PARSER_EOF;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering EOF\n");
+#endif
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+ goto done;
+ }
+ if ((cur == '<') && (next == '?')) {
+ /* PI or XML decl */
+ if (avail < 5) return(ret);
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
+ return(ret);
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
+ ctxt->sax->setDocumentLocator(ctxt->userData,
+ &xmlDefaultSAXLocator);
+ if ((ctxt->input->cur[2] == 'x') &&
+ (ctxt->input->cur[3] == 'm') &&
+ (ctxt->input->cur[4] == 'l') &&
+ (IS_BLANK_CH(ctxt->input->cur[5]))) {
+ ret += 5;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: Parsing XML Decl\n");
+#endif
+ xmlParseXMLDecl(ctxt);
+ if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
+ /*
+ * The XML REC instructs us to stop parsing right
+ * here
+ */
+ ctxt->instate = XML_PARSER_EOF;
+ return(0);
+ }
+ ctxt->standalone = ctxt->input->standalone;
+ if ((ctxt->encoding == NULL) &&
+ (ctxt->input->encoding != NULL))
+ ctxt->encoding = xmlStrdup(ctxt->input->encoding);
+ if ((ctxt->sax) && (ctxt->sax->startDocument) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->startDocument(ctxt->userData);
+ ctxt->instate = XML_PARSER_MISC;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering MISC\n");
+#endif
+ } else {
+ ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
+ if ((ctxt->sax) && (ctxt->sax->startDocument) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->startDocument(ctxt->userData);
+ ctxt->instate = XML_PARSER_MISC;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering MISC\n");
+#endif
+ }
+ } else {
+ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
+ ctxt->sax->setDocumentLocator(ctxt->userData,
+ &xmlDefaultSAXLocator);
+ ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
+ if ((ctxt->sax) && (ctxt->sax->startDocument) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->startDocument(ctxt->userData);
+ ctxt->instate = XML_PARSER_MISC;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering MISC\n");
+#endif
+ }
+ break;
+ case XML_PARSER_START_TAG: {
+ const xmlChar *name;
+ const xmlChar *prefix;
+ const xmlChar *URI;
+ int nsNr = ctxt->nsNr;
+
+ if ((avail < 2) && (ctxt->inputNr == 1))
+ goto done;
+ cur = ctxt->input->cur[0];
+ if (cur != '<') {
+ xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL);
+ ctxt->instate = XML_PARSER_EOF;
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+ goto done;
+ }
+ if (!terminate) {
+ if (ctxt->progressive) {
+ /* > can be found unescaped in attribute values */
+ if ((lastlt == NULL) || (ctxt->input->cur >= lastlt))
+ goto done;
+ } else if (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0) {
+ goto done;
+ }
+ }
+ if (ctxt->spaceNr == 0)
+ spacePush(ctxt, -1);
+ else
+ spacePush(ctxt, *ctxt->space);
+#ifdef LIBXML_SAX1_ENABLED
+ if (ctxt->sax2)
+#endif /* LIBXML_SAX1_ENABLED */
+ name = xmlParseStartTag2(ctxt, &prefix, &URI, &tlen);
+#ifdef LIBXML_SAX1_ENABLED
+ else
+ name = xmlParseStartTag(ctxt);
+#endif /* LIBXML_SAX1_ENABLED */
+ if (name == NULL) {
+ spacePop(ctxt);
+ ctxt->instate = XML_PARSER_EOF;
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+ goto done;
+ }
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * [ VC: Root Element Type ]
+ * The Name in the document type declaration must match
+ * the element type of the root element.
+ */
+ if (ctxt->validate && ctxt->wellFormed && ctxt->myDoc &&
+ ctxt->node && (ctxt->node == ctxt->myDoc->children))
+ ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
+#endif /* LIBXML_VALID_ENABLED */
+
+ /*
+ * Check for an Empty Element.
+ */
+ if ((RAW == '/') && (NXT(1) == '>')) {
+ SKIP(2);
+
+ if (ctxt->sax2) {
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax->endElementNs != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->endElementNs(ctxt->userData, name,
+ prefix, URI);
+#ifdef LIBXML_SAX1_ENABLED
+ } else {
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax->endElement != NULL) &&
+ (!ctxt->disableSAX))
+ ctxt->sax->endElement(ctxt->userData, name);
+#endif /* LIBXML_SAX1_ENABLED */
+ }
+ spacePop(ctxt);
+ if (ctxt->nameNr == 0) {
+ ctxt->instate = XML_PARSER_EPILOG;
+ } else {
+ ctxt->instate = XML_PARSER_CONTENT;
+ }
+ break;
+ }
+ if (RAW == '>') {
+ NEXT;
+ } else {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_GT_REQUIRED,
+ "Couldn't find end of Start Tag %s\n",
+ name);
+ nodePop(ctxt);
+ spacePop(ctxt);
+ }
+ if (ctxt->sax2)
+ nameNsPush(ctxt, name, prefix, URI, ctxt->nsNr - nsNr);
+#ifdef LIBXML_SAX1_ENABLED
+ else
+ namePush(ctxt, name);
+#endif /* LIBXML_SAX1_ENABLED */
+
+ ctxt->instate = XML_PARSER_CONTENT;
+ break;
+ }
+ case XML_PARSER_CONTENT: {
+ const xmlChar *test;
+ unsigned int cons;
+ if ((avail < 2) && (ctxt->inputNr == 1))
+ goto done;
+ cur = ctxt->input->cur[0];
+ next = ctxt->input->cur[1];
+
+ test = CUR_PTR;
+ cons = ctxt->input->consumed;
+ if ((cur == '<') && (next == '/')) {
+ ctxt->instate = XML_PARSER_END_TAG;
+ break;
+ } else if ((cur == '<') && (next == '?')) {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
+ goto done;
+ xmlParsePI(ctxt);
+ } else if ((cur == '<') && (next != '!')) {
+ ctxt->instate = XML_PARSER_START_TAG;
+ break;
+ } else if ((cur == '<') && (next == '!') &&
+ (ctxt->input->cur[2] == '-') &&
+ (ctxt->input->cur[3] == '-')) {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0))
+ goto done;
+ xmlParseComment(ctxt);
+ ctxt->instate = XML_PARSER_CONTENT;
+ } else if ((cur == '<') && (ctxt->input->cur[1] == '!') &&
+ (ctxt->input->cur[2] == '[') &&
+ (ctxt->input->cur[3] == 'C') &&
+ (ctxt->input->cur[4] == 'D') &&
+ (ctxt->input->cur[5] == 'A') &&
+ (ctxt->input->cur[6] == 'T') &&
+ (ctxt->input->cur[7] == 'A') &&
+ (ctxt->input->cur[8] == '[')) {
+ SKIP(9);
+ ctxt->instate = XML_PARSER_CDATA_SECTION;
+ break;
+ } else if ((cur == '<') && (next == '!') &&
+ (avail < 9)) {
+ goto done;
+ } else if (cur == '&') {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, ';', 0, 0) < 0))
+ goto done;
+ xmlParseReference(ctxt);
+ } else {
+ /* TODO Avoid the extra copy, handle directly !!! */
+ /*
+ * Goal of the following test is:
+ * - minimize calls to the SAX 'character' callback
+ * when they are mergeable
+ * - handle an problem for isBlank when we only parse
+ * a sequence of blank chars and the next one is
+ * not available to check against '<' presence.
+ * - tries to homogenize the differences in SAX
+ * callbacks between the push and pull versions
+ * of the parser.
+ */
+ if ((ctxt->inputNr == 1) &&
+ (avail < XML_PARSER_BIG_BUFFER_SIZE)) {
+ if (!terminate) {
+ if (ctxt->progressive) {
+ if ((lastlt == NULL) ||
+ (ctxt->input->cur > lastlt))
+ goto done;
+ } else if (xmlParseLookupSequence(ctxt,
+ '<', 0, 0) < 0) {
+ goto done;
+ }
+ }
+ }
+ ctxt->checkIndex = 0;
+ xmlParseCharData(ctxt, 0);
+ }
+ /*
+ * Pop-up of finished entities.
+ */
+ while ((RAW == 0) && (ctxt->inputNr > 1))
+ xmlPopInput(ctxt);
+ if ((cons == ctxt->input->consumed) && (test == CUR_PTR)) {
+ xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
+ "detected an error in element content\n");
+ ctxt->instate = XML_PARSER_EOF;
+ break;
+ }
+ break;
+ }
+ case XML_PARSER_END_TAG:
+ if (avail < 2)
+ goto done;
+ if (!terminate) {
+ if (ctxt->progressive) {
+ if ((lastgt == NULL) || (ctxt->input->cur > lastgt))
+ goto done;
+ } else if (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0) {
+ goto done;
+ }
+ }
+ if (ctxt->sax2) {
+ xmlParseEndTag2(ctxt,
+ (void *) ctxt->pushTab[ctxt->nameNr * 3 - 3],
+ (void *) ctxt->pushTab[ctxt->nameNr * 3 - 2], 0,
+ (int) (long) ctxt->pushTab[ctxt->nameNr * 3 - 1], 0);
+ nameNsPop(ctxt);
+ }
+#ifdef LIBXML_SAX1_ENABLED
+ else
+ xmlParseEndTag1(ctxt, 0);
+#endif /* LIBXML_SAX1_ENABLED */
+ if (ctxt->nameNr == 0) {
+ ctxt->instate = XML_PARSER_EPILOG;
+ } else {
+ ctxt->instate = XML_PARSER_CONTENT;
+ }
+ break;
+ case XML_PARSER_CDATA_SECTION: {
+ /*
+ * The Push mode need to have the SAX callback for
+ * cdataBlock merge back contiguous callbacks.
+ */
+ int base;
+
+ base = xmlParseLookupSequence(ctxt, ']', ']', '>');
+ if (base < 0) {
+ if (avail >= XML_PARSER_BIG_BUFFER_SIZE + 2) {
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
+ if (ctxt->sax->cdataBlock != NULL)
+ ctxt->sax->cdataBlock(ctxt->userData,
+ ctxt->input->cur,
+ XML_PARSER_BIG_BUFFER_SIZE);
+ else if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData,
+ ctxt->input->cur,
+ XML_PARSER_BIG_BUFFER_SIZE);
+ }
+ SKIP(XML_PARSER_BIG_BUFFER_SIZE);
+ ctxt->checkIndex = 0;
+ }
+ goto done;
+ } else {
+ if ((ctxt->sax != NULL) && (base > 0) &&
+ (!ctxt->disableSAX)) {
+ if (ctxt->sax->cdataBlock != NULL)
+ ctxt->sax->cdataBlock(ctxt->userData,
+ ctxt->input->cur, base);
+ else if (ctxt->sax->characters != NULL)
+ ctxt->sax->characters(ctxt->userData,
+ ctxt->input->cur, base);
+ }
+ SKIP(base + 3);
+ ctxt->checkIndex = 0;
+ ctxt->instate = XML_PARSER_CONTENT;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering CONTENT\n");
+#endif
+ }
+ break;
+ }
+ case XML_PARSER_MISC:
+ SKIP_BLANKS;
+ if (ctxt->input->buf == NULL)
+ avail = ctxt->input->length -
+ (ctxt->input->cur - ctxt->input->base);
+ else
+ avail = ctxt->input->buf->buffer->use -
+ (ctxt->input->cur - ctxt->input->base);
+ if (avail < 2)
+ goto done;
+ cur = ctxt->input->cur[0];
+ next = ctxt->input->cur[1];
+ if ((cur == '<') && (next == '?')) {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: Parsing PI\n");
+#endif
+ xmlParsePI(ctxt);
+ } else if ((cur == '<') && (next == '!') &&
+ (ctxt->input->cur[2] == '-') &&
+ (ctxt->input->cur[3] == '-')) {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: Parsing Comment\n");
+#endif
+ xmlParseComment(ctxt);
+ ctxt->instate = XML_PARSER_MISC;
+ } else if ((cur == '<') && (next == '!') &&
+ (ctxt->input->cur[2] == 'D') &&
+ (ctxt->input->cur[3] == 'O') &&
+ (ctxt->input->cur[4] == 'C') &&
+ (ctxt->input->cur[5] == 'T') &&
+ (ctxt->input->cur[6] == 'Y') &&
+ (ctxt->input->cur[7] == 'P') &&
+ (ctxt->input->cur[8] == 'E')) {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: Parsing internal subset\n");
+#endif
+ ctxt->inSubset = 1;
+ xmlParseDocTypeDecl(ctxt);
+ if (RAW == '[') {
+ ctxt->instate = XML_PARSER_DTD;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering DTD\n");
+#endif
+ } else {
+ /*
+ * Create and update the external subset.
+ */
+ ctxt->inSubset = 2;
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
+ (ctxt->sax->externalSubset != NULL))
+ ctxt->sax->externalSubset(ctxt->userData,
+ ctxt->intSubName, ctxt->extSubSystem,
+ ctxt->extSubURI);
+ ctxt->inSubset = 0;
+ ctxt->instate = XML_PARSER_PROLOG;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering PROLOG\n");
+#endif
+ }
+ } else if ((cur == '<') && (next == '!') &&
+ (avail < 9)) {
+ goto done;
+ } else {
+ ctxt->instate = XML_PARSER_START_TAG;
+ ctxt->progressive = 1;
+ xmlParseGetLasts(ctxt, &lastlt, &lastgt);
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering START_TAG\n");
+#endif
+ }
+ break;
+ case XML_PARSER_PROLOG:
+ SKIP_BLANKS;
+ if (ctxt->input->buf == NULL)
+ avail = ctxt->input->length - (ctxt->input->cur - ctxt->input->base);
+ else
+ avail = ctxt->input->buf->buffer->use - (ctxt->input->cur - ctxt->input->base);
+ if (avail < 2)
+ goto done;
+ cur = ctxt->input->cur[0];
+ next = ctxt->input->cur[1];
+ if ((cur == '<') && (next == '?')) {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: Parsing PI\n");
+#endif
+ xmlParsePI(ctxt);
+ } else if ((cur == '<') && (next == '!') &&
+ (ctxt->input->cur[2] == '-') && (ctxt->input->cur[3] == '-')) {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: Parsing Comment\n");
+#endif
+ xmlParseComment(ctxt);
+ ctxt->instate = XML_PARSER_PROLOG;
+ } else if ((cur == '<') && (next == '!') &&
+ (avail < 4)) {
+ goto done;
+ } else {
+ ctxt->instate = XML_PARSER_START_TAG;
+ ctxt->progressive = 1;
+ xmlParseGetLasts(ctxt, &lastlt, &lastgt);
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering START_TAG\n");
+#endif
+ }
+ break;
+ case XML_PARSER_EPILOG:
+ SKIP_BLANKS;
+ if (ctxt->input->buf == NULL)
+ avail = ctxt->input->length - (ctxt->input->cur - ctxt->input->base);
+ else
+ avail = ctxt->input->buf->buffer->use - (ctxt->input->cur - ctxt->input->base);
+ if (avail < 2)
+ goto done;
+ cur = ctxt->input->cur[0];
+ next = ctxt->input->cur[1];
+ if ((cur == '<') && (next == '?')) {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: Parsing PI\n");
+#endif
+ xmlParsePI(ctxt);
+ ctxt->instate = XML_PARSER_EPILOG;
+ } else if ((cur == '<') && (next == '!') &&
+ (ctxt->input->cur[2] == '-') && (ctxt->input->cur[3] == '-')) {
+ if ((!terminate) &&
+ (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0))
+ goto done;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: Parsing Comment\n");
+#endif
+ xmlParseComment(ctxt);
+ ctxt->instate = XML_PARSER_EPILOG;
+ } else if ((cur == '<') && (next == '!') &&
+ (avail < 4)) {
+ goto done;
+ } else {
+ xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
+ ctxt->instate = XML_PARSER_EOF;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering EOF\n");
+#endif
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+ goto done;
+ }
+ break;
+ case XML_PARSER_DTD: {
+ /*
+ * Sorry but progressive parsing of the internal subset
+ * is not expected to be supported. We first check that
+ * the full content of the internal subset is available and
+ * the parsing is launched only at that point.
+ * Internal subset ends up with "']' S? '>'" in an unescaped
+ * section and not in a ']]>' sequence which are conditional
+ * sections (whoever argued to keep that crap in XML deserve
+ * a place in hell !).
+ */
+ int base, i;
+ xmlChar *buf;
+ xmlChar quote = 0;
+
+ base = ctxt->input->cur - ctxt->input->base;
+ if (base < 0) return(0);
+ if (ctxt->checkIndex > base)
+ base = ctxt->checkIndex;
+ buf = ctxt->input->buf->buffer->content;
+ for (;(unsigned int) base < ctxt->input->buf->buffer->use;
+ base++) {
+ if (quote != 0) {
+ if (buf[base] == quote)
+ quote = 0;
+ continue;
+ }
+ if ((quote == 0) && (buf[base] == '<')) {
+ int found = 0;
+ /* special handling of comments */
+ if (((unsigned int) base + 4 <
+ ctxt->input->buf->buffer->use) &&
+ (buf[base + 1] == '!') &&
+ (buf[base + 2] == '-') &&
+ (buf[base + 3] == '-')) {
+ for (;(unsigned int) base + 3 <
+ ctxt->input->buf->buffer->use; base++) {
+ if ((buf[base] == '-') &&
+ (buf[base + 1] == '-') &&
+ (buf[base + 2] == '>')) {
+ found = 1;
+ base += 2;
+ break;
+ }
+ }
+ if (!found)
+ break;
+ continue;
+ }
+ }
+ if (buf[base] == '"') {
+ quote = '"';
+ continue;
+ }
+ if (buf[base] == '\'') {
+ quote = '\'';
+ continue;
+ }
+ if (buf[base] == ']') {
+ if ((unsigned int) base +1 >=
+ ctxt->input->buf->buffer->use)
+ break;
+ if (buf[base + 1] == ']') {
+ /* conditional crap, skip both ']' ! */
+ base++;
+ continue;
+ }
+ for (i = 0;
+ (unsigned int) base + i < ctxt->input->buf->buffer->use;
+ i++) {
+ if (buf[base + i] == '>')
+ goto found_end_int_subset;
+ }
+ break;
+ }
+ }
+ /*
+ * We didn't found the end of the Internal subset
+ */
+ if (quote == 0)
+ ctxt->checkIndex = base;
+#ifdef DEBUG_PUSH
+ if (next == 0)
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: lookup of int subset end filed\n");
+#endif
+ goto done;
+
+found_end_int_subset:
+ xmlParseInternalSubset(ctxt);
+ ctxt->inSubset = 2;
+ if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
+ (ctxt->sax->externalSubset != NULL))
+ ctxt->sax->externalSubset(ctxt->userData, ctxt->intSubName,
+ ctxt->extSubSystem, ctxt->extSubURI);
+ ctxt->inSubset = 0;
+ ctxt->instate = XML_PARSER_PROLOG;
+ ctxt->checkIndex = 0;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering PROLOG\n");
+#endif
+ break;
+ }
+ case XML_PARSER_COMMENT:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: internal error, state == COMMENT\n");
+ ctxt->instate = XML_PARSER_CONTENT;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_IGNORE:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: internal error, state == IGNORE");
+ ctxt->instate = XML_PARSER_DTD;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering DTD\n");
+#endif
+ break;
+ case XML_PARSER_PI:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: internal error, state == PI\n");
+ ctxt->instate = XML_PARSER_CONTENT;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering CONTENT\n");
+#endif
+ break;
+ case XML_PARSER_ENTITY_DECL:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: internal error, state == ENTITY_DECL\n");
+ ctxt->instate = XML_PARSER_DTD;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering DTD\n");
+#endif
+ break;
+ case XML_PARSER_ENTITY_VALUE:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: internal error, state == ENTITY_VALUE\n");
+ ctxt->instate = XML_PARSER_CONTENT;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering DTD\n");
+#endif
+ break;
+ case XML_PARSER_ATTRIBUTE_VALUE:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: internal error, state == ATTRIBUTE_VALUE\n");
+ ctxt->instate = XML_PARSER_START_TAG;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering START_TAG\n");
+#endif
+ break;
+ case XML_PARSER_SYSTEM_LITERAL:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: internal error, state == SYSTEM_LITERAL\n");
+ ctxt->instate = XML_PARSER_START_TAG;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering START_TAG\n");
+#endif
+ break;
+ case XML_PARSER_PUBLIC_LITERAL:
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: internal error, state == PUBLIC_LITERAL\n");
+ ctxt->instate = XML_PARSER_START_TAG;
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext,
+ "PP: entering START_TAG\n");
+#endif
+ break;
+ }
+ }
+done:
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext, "PP: done %d\n", ret);
+#endif
+ return(ret);
+}
+
+/**
+ * xmlParseChunk:
+ * @ctxt: an XML parser context
+ * @chunk: an char array
+ * @size: the size in byte of the chunk
+ * @terminate: last chunk indicator
+ *
+ * Parse a Chunk of memory
+ *
+ * Returns zero if no error, the xmlParserErrors otherwise.
+ */
+int
+xmlParseChunk(xmlParserCtxtPtr ctxt, const char *chunk, int size,
+ int terminate) {
+ if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1))
+ return(ctxt->errNo);
+ if (ctxt->instate == XML_PARSER_START)
+ xmlDetectSAX2(ctxt);
+ if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
+ (ctxt->input->buf != NULL) && (ctxt->instate != XML_PARSER_EOF)) {
+ int base = ctxt->input->base - ctxt->input->buf->buffer->content;
+ int cur = ctxt->input->cur - ctxt->input->base;
+
+ xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
+ ctxt->input->base = ctxt->input->buf->buffer->content + base;
+ ctxt->input->cur = ctxt->input->base + cur;
+ ctxt->input->end =
+ &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use];
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size);
+#endif
+
+ } else if (ctxt->instate != XML_PARSER_EOF) {
+ if ((ctxt->input != NULL) && ctxt->input->buf != NULL) {
+ xmlParserInputBufferPtr in = ctxt->input->buf;
+ if ((in->encoder != NULL) && (in->buffer != NULL) &&
+ (in->raw != NULL)) {
+ int nbchars;
+
+ nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw);
+ if (nbchars < 0) {
+ /* TODO 2.6.0 */
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlParseChunk: encoder error\n");
+ return(XML_ERR_INVALID_ENCODING);
+ }
+ }
+ }
+ }
+ xmlParseTryOrFinish(ctxt, terminate);
+ if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1))
+ return(ctxt->errNo);
+ if (terminate) {
+ /*
+ * Check for termination
+ */
+ int avail = 0;
+ if (ctxt->input->buf == NULL)
+ avail = ctxt->input->length -
+ (ctxt->input->cur - ctxt->input->base);
+ else
+ avail = ctxt->input->buf->buffer->use -
+ (ctxt->input->cur - ctxt->input->base);
+
+ if ((ctxt->instate != XML_PARSER_EOF) &&
+ (ctxt->instate != XML_PARSER_EPILOG)) {
+ xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
+ }
+ if ((ctxt->instate == XML_PARSER_EPILOG) && (avail > 0)) {
+ xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
+ }
+ if (ctxt->instate != XML_PARSER_EOF) {
+ if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
+ ctxt->sax->endDocument(ctxt->userData);
+ }
+ ctxt->instate = XML_PARSER_EOF;
+ }
+ return((xmlParserErrors) ctxt->errNo);
+}
+
+/************************************************************************
+ * *
+ * I/O front end functions to the parser *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlStopParser:
+ * @ctxt: an XML parser context
+ *
+ * Blocks further parser processing
+ */
+void
+xmlStopParser(xmlParserCtxtPtr ctxt) {
+ if (ctxt == NULL)
+ return;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ if (ctxt->input != NULL)
+ ctxt->input->cur = BAD_CAST"";
+}
+
+/**
+ * xmlCreatePushParserCtxt:
+ * @sax: a SAX handler
+ * @user_data: The user data returned on SAX callbacks
+ * @chunk: a pointer to an array of chars
+ * @size: number of chars in the array
+ * @filename: an optional file name or URI
+ *
+ * Create a parser context for using the XML parser in push mode.
+ * If @buffer and @size are non-NULL, the data is used to detect
+ * the encoding. The remaining characters will be parsed so they
+ * don't need to be fed in again through xmlParseChunk.
+ * To allow content encoding detection, @size should be >= 4
+ * The value of @filename is used for fetching external entities
+ * and error/warning reports.
+ *
+ * Returns the new parser context or NULL
+ */
+
+xmlParserCtxtPtr
+xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
+ const char *chunk, int size, const char *filename) {
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputPtr inputStream;
+ xmlParserInputBufferPtr buf;
+ xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
+
+ /*
+ * plug some encoding conversion routines
+ */
+ if ((chunk != NULL) && (size >= 4))
+ enc = xmlDetectCharEncoding((const xmlChar *) chunk, size);
+
+ buf = xmlAllocParserInputBuffer(enc);
+ if (buf == NULL) return(NULL);
+
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ xmlErrMemory(NULL, "creating parser: out of memory\n");
+ xmlFreeParserInputBuffer(buf);
+ return(NULL);
+ }
+ ctxt->pushTab = (void **) xmlMalloc(ctxt->nameMax * 3 * sizeof(xmlChar *));
+ if (ctxt->pushTab == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ xmlFreeParserInputBuffer(buf);
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+ if (sax != NULL) {
+#ifdef LIBXML_SAX1_ENABLED
+ if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
+#endif /* LIBXML_SAX1_ENABLED */
+ xmlFree(ctxt->sax);
+ ctxt->sax = (xmlSAXHandlerPtr) xmlMalloc(sizeof(xmlSAXHandler));
+ if (ctxt->sax == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ xmlFreeParserInputBuffer(buf);
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+ memcpy(ctxt->sax, sax, sizeof(xmlSAXHandler));
+ if (user_data != NULL)
+ ctxt->userData = user_data;
+ }
+ if (filename == NULL) {
+ ctxt->directory = NULL;
+ } else {
+ ctxt->directory = xmlParserGetDirectory(filename);
+ }
+
+ inputStream = xmlNewInputStream(ctxt);
+ if (inputStream == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ xmlFreeParserInputBuffer(buf);
+ return(NULL);
+ }
+
+ if (filename == NULL)
+ inputStream->filename = NULL;
+ else
+ inputStream->filename = (char *)
+ xmlCanonicPath((const xmlChar *) filename);
+ inputStream->buf = buf;
+ inputStream->base = inputStream->buf->buffer->content;
+ inputStream->cur = inputStream->buf->buffer->content;
+ inputStream->end =
+ &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
+
+ inputPush(ctxt, inputStream);
+
+ if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
+ (ctxt->input->buf != NULL)) {
+ int base = ctxt->input->base - ctxt->input->buf->buffer->content;
+ int cur = ctxt->input->cur - ctxt->input->base;
+
+ xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
+
+ ctxt->input->base = ctxt->input->buf->buffer->content + base;
+ ctxt->input->cur = ctxt->input->base + cur;
+ ctxt->input->end =
+ &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use];
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size);
+#endif
+ }
+
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+
+ return(ctxt);
+}
+#endif /* LIBXML_PUSH_ENABLED */
+
+/**
+ * xmlCreateIOParserCtxt:
+ * @sax: a SAX handler
+ * @user_data: The user data returned on SAX callbacks
+ * @ioread: an I/O read function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @enc: the charset encoding if known
+ *
+ * Create a parser context for using the XML parser with an existing
+ * I/O stream
+ *
+ * Returns the new parser context or NULL
+ */
+xmlParserCtxtPtr
+xmlCreateIOParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
+ xmlInputReadCallback ioread, xmlInputCloseCallback ioclose,
+ void *ioctx, xmlCharEncoding enc) {
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputPtr inputStream;
+ xmlParserInputBufferPtr buf;
+
+ buf = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx, enc);
+ if (buf == NULL) return(NULL);
+
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ xmlFree(buf);
+ return(NULL);
+ }
+ if (sax != NULL) {
+#ifdef LIBXML_SAX1_ENABLED
+ if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
+#endif /* LIBXML_SAX1_ENABLED */
+ xmlFree(ctxt->sax);
+ ctxt->sax = (xmlSAXHandlerPtr) xmlMalloc(sizeof(xmlSAXHandler));
+ if (ctxt->sax == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ xmlFree(ctxt);
+ return(NULL);
+ }
+ memcpy(ctxt->sax, sax, sizeof(xmlSAXHandler));
+ if (user_data != NULL)
+ ctxt->userData = user_data;
+ }
+
+ inputStream = xmlNewIOInputStream(ctxt, buf, enc);
+ if (inputStream == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+ inputPush(ctxt, inputStream);
+
+ return(ctxt);
+}
+
+#ifdef LIBXML_VALID_ENABLED
+/************************************************************************
+ * *
+ * Front ends when parsing a DTD *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlIOParseDTD:
+ * @sax: the SAX handler block or NULL
+ * @input: an Input Buffer
+ * @enc: the charset encoding if known
+ *
+ * Load and parse a DTD
+ *
+ * Returns the resulting xmlDtdPtr or NULL in case of error.
+ * @input will be freed at parsing end.
+ */
+
+xmlDtdPtr
+xmlIOParseDTD(xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input,
+ xmlCharEncoding enc) {
+ xmlDtdPtr ret = NULL;
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputPtr pinput = NULL;
+ xmlChar start[4];
+
+ if (input == NULL)
+ return(NULL);
+
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ return(NULL);
+ }
+
+ /*
+ * Set-up the SAX context
+ */
+ if (sax != NULL) {
+ if (ctxt->sax != NULL)
+ xmlFree(ctxt->sax);
+ ctxt->sax = sax;
+ ctxt->userData = ctxt;
+ }
+ xmlDetectSAX2(ctxt);
+
+ /*
+ * generate a parser input from the I/O handler
+ */
+
+ pinput = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (pinput == NULL) {
+ if (sax != NULL) ctxt->sax = NULL;
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ /*
+ * plug some encoding conversion routines here.
+ */
+ xmlPushInput(ctxt, pinput);
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+
+ pinput->filename = NULL;
+ pinput->line = 1;
+ pinput->col = 1;
+ pinput->base = ctxt->input->cur;
+ pinput->cur = ctxt->input->cur;
+ pinput->free = NULL;
+
+ /*
+ * let's parse that entity knowing it's an external subset.
+ */
+ ctxt->inSubset = 2;
+ ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0");
+ ctxt->myDoc->extSubset = xmlNewDtd(ctxt->myDoc, BAD_CAST "none",
+ BAD_CAST "none", BAD_CAST "none");
+
+ if ((enc == XML_CHAR_ENCODING_NONE) &&
+ ((ctxt->input->end - ctxt->input->cur) >= 4)) {
+ /*
+ * Get the 4 first bytes and decode the charset
+ * if enc != XML_CHAR_ENCODING_NONE
+ * plug some encoding conversion routines.
+ */
+ start[0] = RAW;
+ start[1] = NXT(1);
+ start[2] = NXT(2);
+ start[3] = NXT(3);
+ enc = xmlDetectCharEncoding(start, 4);
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+ }
+
+ xmlParseExternalSubset(ctxt, BAD_CAST "none", BAD_CAST "none");
+
+ if (ctxt->myDoc != NULL) {
+ if (ctxt->wellFormed) {
+ ret = ctxt->myDoc->extSubset;
+ ctxt->myDoc->extSubset = NULL;
+ if (ret != NULL) {
+ xmlNodePtr tmp;
+
+ ret->doc = NULL;
+ tmp = ret->children;
+ while (tmp != NULL) {
+ tmp->doc = NULL;
+ tmp = tmp->next;
+ }
+ }
+ } else {
+ ret = NULL;
+ }
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
+ if (sax != NULL) ctxt->sax = NULL;
+ xmlFreeParserCtxt(ctxt);
+
+ return(ret);
+}
+
+/**
+ * xmlSAXParseDTD:
+ * @sax: the SAX handler block
+ * @ExternalID: a NAME* containing the External ID of the DTD
+ * @SystemID: a NAME* containing the URL to the DTD
+ *
+ * Load and parse an external subset.
+ *
+ * Returns the resulting xmlDtdPtr or NULL in case of error.
+ */
+
+xmlDtdPtr
+xmlSAXParseDTD(xmlSAXHandlerPtr sax, const xmlChar *ExternalID,
+ const xmlChar *SystemID) {
+ xmlDtdPtr ret = NULL;
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputPtr input = NULL;
+ xmlCharEncoding enc;
+
+ if ((ExternalID == NULL) && (SystemID == NULL)) return(NULL);
+
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ return(NULL);
+ }
+
+ /*
+ * Set-up the SAX context
+ */
+ if (sax != NULL) {
+ if (ctxt->sax != NULL)
+ xmlFree(ctxt->sax);
+ ctxt->sax = sax;
+ ctxt->userData = ctxt;
+ }
+
+ /*
+ * Ask the Entity resolver to load the damn thing
+ */
+
+ if ((ctxt->sax != NULL) && (ctxt->sax->resolveEntity != NULL))
+ input = ctxt->sax->resolveEntity(ctxt, ExternalID, SystemID);
+ if (input == NULL) {
+ if (sax != NULL) ctxt->sax = NULL;
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ /*
+ * plug some encoding conversion routines here.
+ */
+ xmlPushInput(ctxt, input);
+ if ((ctxt->input->end - ctxt->input->cur) >= 4) {
+ enc = xmlDetectCharEncoding(ctxt->input->cur, 4);
+ xmlSwitchEncoding(ctxt, enc);
+ }
+
+ if (input->filename == NULL)
+ input->filename = (char *) xmlCanonicPath(SystemID);
+ input->line = 1;
+ input->col = 1;
+ input->base = ctxt->input->cur;
+ input->cur = ctxt->input->cur;
+ input->free = NULL;
+
+ /*
+ * let's parse that entity knowing it's an external subset.
+ */
+ ctxt->inSubset = 2;
+ ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0");
+ ctxt->myDoc->extSubset = xmlNewDtd(ctxt->myDoc, BAD_CAST "none",
+ ExternalID, SystemID);
+ xmlParseExternalSubset(ctxt, ExternalID, SystemID);
+
+ if (ctxt->myDoc != NULL) {
+ if (ctxt->wellFormed) {
+ ret = ctxt->myDoc->extSubset;
+ ctxt->myDoc->extSubset = NULL;
+ if (ret != NULL) {
+ xmlNodePtr tmp;
+
+ ret->doc = NULL;
+ tmp = ret->children;
+ while (tmp != NULL) {
+ tmp->doc = NULL;
+ tmp = tmp->next;
+ }
+ }
+ } else {
+ ret = NULL;
+ }
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
+ if (sax != NULL) ctxt->sax = NULL;
+ xmlFreeParserCtxt(ctxt);
+
+ return(ret);
+}
+
+
+/**
+ * xmlParseDTD:
+ * @ExternalID: a NAME* containing the External ID of the DTD
+ * @SystemID: a NAME* containing the URL to the DTD
+ *
+ * Load and parse an external subset.
+ *
+ * Returns the resulting xmlDtdPtr or NULL in case of error.
+ */
+
+xmlDtdPtr
+xmlParseDTD(const xmlChar *ExternalID, const xmlChar *SystemID) {
+ return(xmlSAXParseDTD(NULL, ExternalID, SystemID));
+}
+#endif /* LIBXML_VALID_ENABLED */
+
+/************************************************************************
+ * *
+ * Front ends when parsing an Entity *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlParseCtxtExternalEntity:
+ * @ctx: the existing parsing context
+ * @URL: the URL for the entity to load
+ * @ID: the System ID for the entity to load
+ * @lst: the return value for the set of parsed nodes
+ *
+ * Parse an external general entity within an existing parsing context
+ * An external general parsed entity is well-formed if it matches the
+ * production labeled extParsedEnt.
+ *
+ * [78] extParsedEnt ::= TextDecl? content
+ *
+ * Returns 0 if the entity is well formed, -1 in case of args problem and
+ * the parser error code otherwise
+ */
+
+int
+xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, const xmlChar *URL,
+ const xmlChar *ID, xmlNodePtr *lst) {
+ xmlParserCtxtPtr ctxt;
+ xmlDocPtr newDoc;
+ xmlSAXHandlerPtr oldsax = NULL;
+ int ret = 0;
+ xmlChar start[4];
+ xmlCharEncoding enc;
+
+ if (ctx->depth > 40) {
+ return(XML_ERR_ENTITY_LOOP);
+ }
+
+ if (lst != NULL)
+ *lst = NULL;
+ if ((URL == NULL) && (ID == NULL))
+ return(-1);
+ if (ctx->myDoc == NULL) /* @@ relax but check for dereferences */
+ return(-1);
+
+
+ ctxt = xmlCreateEntityParserCtxt(URL, ID, NULL);
+ if (ctxt == NULL) return(-1);
+ ctxt->userData = ctxt;
+ ctxt->_private = ctx->_private;
+ oldsax = ctxt->sax;
+ ctxt->sax = ctx->sax;
+ xmlDetectSAX2(ctxt);
+ newDoc = xmlNewDoc(BAD_CAST "1.0");
+ if (newDoc == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(-1);
+ }
+ if (ctx->myDoc != NULL) {
+ newDoc->intSubset = ctx->myDoc->intSubset;
+ newDoc->extSubset = ctx->myDoc->extSubset;
+ }
+ if (ctx->myDoc->URL != NULL) {
+ newDoc->URL = xmlStrdup(ctx->myDoc->URL);
+ }
+ newDoc->children = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL);
+ if (newDoc->children == NULL) {
+ ctxt->sax = oldsax;
+ xmlFreeParserCtxt(ctxt);
+ newDoc->intSubset = NULL;
+ newDoc->extSubset = NULL;
+ xmlFreeDoc(newDoc);
+ return(-1);
+ }
+ nodePush(ctxt, newDoc->children);
+ if (ctx->myDoc == NULL) {
+ ctxt->myDoc = newDoc;
+ } else {
+ ctxt->myDoc = ctx->myDoc;
+ newDoc->children->doc = ctx->myDoc;
+ }
+
+ /*
+ * Get the 4 first bytes and decode the charset
+ * if enc != XML_CHAR_ENCODING_NONE
+ * plug some encoding conversion routines.
+ */
+ GROW
+ if ((ctxt->input->end - ctxt->input->cur) >= 4) {
+ start[0] = RAW;
+ start[1] = NXT(1);
+ start[2] = NXT(2);
+ start[3] = NXT(3);
+ enc = xmlDetectCharEncoding(start, 4);
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+ }
+
+ /*
+ * Parse a possible text declaration first
+ */
+ if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
+ xmlParseTextDecl(ctxt);
+ }
+
+ /*
+ * Doing validity checking on chunk doesn't make sense
+ */
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->validate = ctx->validate;
+ ctxt->valid = ctx->valid;
+ ctxt->loadsubset = ctx->loadsubset;
+ ctxt->depth = ctx->depth + 1;
+ ctxt->replaceEntities = ctx->replaceEntities;
+ if (ctxt->validate) {
+ ctxt->vctxt.error = ctx->vctxt.error;
+ ctxt->vctxt.warning = ctx->vctxt.warning;
+ } else {
+ ctxt->vctxt.error = NULL;
+ ctxt->vctxt.warning = NULL;
+ }
+ ctxt->vctxt.nodeTab = NULL;
+ ctxt->vctxt.nodeNr = 0;
+ ctxt->vctxt.nodeMax = 0;
+ ctxt->vctxt.node = NULL;
+ if (ctxt->dict != NULL) xmlDictFree(ctxt->dict);
+ ctxt->dict = ctx->dict;
+ ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3);
+ ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5);
+ ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36);
+ ctxt->dictNames = ctx->dictNames;
+ ctxt->attsDefault = ctx->attsDefault;
+ ctxt->attsSpecial = ctx->attsSpecial;
+
+ xmlParseContent(ctxt);
+
+ ctx->validate = ctxt->validate;
+ ctx->valid = ctxt->valid;
+ if ((RAW == '<') && (NXT(1) == '/')) {
+ xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
+ } else if (RAW != 0) {
+ xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
+ }
+ if (ctxt->node != newDoc->children) {
+ xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
+ }
+
+ if (!ctxt->wellFormed) {
+ if (ctxt->errNo == 0)
+ ret = 1;
+ else
+ ret = ctxt->errNo;
+ } else {
+ if (lst != NULL) {
+ xmlNodePtr cur;
+
+ /*
+ * Return the newly created nodeset after unlinking it from
+ * they pseudo parent.
+ */
+ cur = newDoc->children->children;
+ *lst = cur;
+ while (cur != NULL) {
+ cur->parent = NULL;
+ cur = cur->next;
+ }
+ newDoc->children->children = NULL;
+ }
+ ret = 0;
+ }
+ ctxt->sax = oldsax;
+ ctxt->dict = NULL;
+ ctxt->attsDefault = NULL;
+ ctxt->attsSpecial = NULL;
+ xmlFreeParserCtxt(ctxt);
+ newDoc->intSubset = NULL;
+ newDoc->extSubset = NULL;
+ xmlFreeDoc(newDoc);
+
+ return(ret);
+}
+
+/**
+ * xmlParseExternalEntityPrivate:
+ * @doc: the document the chunk pertains to
+ * @oldctxt: the previous parser context if available
+ * @sax: the SAX handler bloc (possibly NULL)
+ * @user_data: The user data returned on SAX callbacks (possibly NULL)
+ * @depth: Used for loop detection, use 0
+ * @URL: the URL for the entity to load
+ * @ID: the System ID for the entity to load
+ * @list: the return value for the set of parsed nodes
+ *
+ * Private version of xmlParseExternalEntity()
+ *
+ * Returns 0 if the entity is well formed, -1 in case of args problem and
+ * the parser error code otherwise
+ */
+
+static xmlParserErrors
+xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt,
+ xmlSAXHandlerPtr sax,
+ void *user_data, int depth, const xmlChar *URL,
+ const xmlChar *ID, xmlNodePtr *list) {
+ xmlParserCtxtPtr ctxt;
+ xmlDocPtr newDoc;
+ xmlSAXHandlerPtr oldsax = NULL;
+ xmlParserErrors ret = XML_ERR_OK;
+ xmlChar start[4];
+ xmlCharEncoding enc;
+
+ if (depth > 40) {
+ return(XML_ERR_ENTITY_LOOP);
+ }
+
+
+
+ if (list != NULL)
+ *list = NULL;
+ if ((URL == NULL) && (ID == NULL))
+ return(XML_ERR_INTERNAL_ERROR);
+ if (doc == NULL) /* @@ relax but check for dereferences */
+ return(XML_ERR_INTERNAL_ERROR);
+
+
+ ctxt = xmlCreateEntityParserCtxt(URL, ID, NULL);
+ if (ctxt == NULL) return(XML_WAR_UNDECLARED_ENTITY);
+ ctxt->userData = ctxt;
+ if (oldctxt != NULL) {
+ ctxt->_private = oldctxt->_private;
+ ctxt->loadsubset = oldctxt->loadsubset;
+ ctxt->validate = oldctxt->validate;
+ ctxt->external = oldctxt->external;
+ ctxt->record_info = oldctxt->record_info;
+ ctxt->node_seq.maximum = oldctxt->node_seq.maximum;
+ ctxt->node_seq.length = oldctxt->node_seq.length;
+ ctxt->node_seq.buffer = oldctxt->node_seq.buffer;
+ } else {
+ /*
+ * Doing validity checking on chunk without context
+ * doesn't make sense
+ */
+ ctxt->_private = NULL;
+ ctxt->validate = 0;
+ ctxt->external = 2;
+ ctxt->loadsubset = 0;
+ }
+ if (sax != NULL) {
+ oldsax = ctxt->sax;
+ ctxt->sax = sax;
+ if (user_data != NULL)
+ ctxt->userData = user_data;
+ }
+ xmlDetectSAX2(ctxt);
+ newDoc = xmlNewDoc(BAD_CAST "1.0");
+ if (newDoc == NULL) {
+ ctxt->node_seq.maximum = 0;
+ ctxt->node_seq.length = 0;
+ ctxt->node_seq.buffer = NULL;
+ xmlFreeParserCtxt(ctxt);
+ return(XML_ERR_INTERNAL_ERROR);
+ }
+ if (doc != NULL) {
+ newDoc->intSubset = doc->intSubset;
+ newDoc->extSubset = doc->extSubset;
+ }
+ if (doc->URL != NULL) {
+ newDoc->URL = xmlStrdup(doc->URL);
+ }
+ newDoc->children = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL);
+ if (newDoc->children == NULL) {
+ if (sax != NULL)
+ ctxt->sax = oldsax;
+ ctxt->node_seq.maximum = 0;
+ ctxt->node_seq.length = 0;
+ ctxt->node_seq.buffer = NULL;
+ xmlFreeParserCtxt(ctxt);
+ newDoc->intSubset = NULL;
+ newDoc->extSubset = NULL;
+ xmlFreeDoc(newDoc);
+ return(XML_ERR_INTERNAL_ERROR);
+ }
+ nodePush(ctxt, newDoc->children);
+ if (doc == NULL) {
+ ctxt->myDoc = newDoc;
+ } else {
+ ctxt->myDoc = doc;
+ newDoc->children->doc = doc;
+ }
+
+ /*
+ * Get the 4 first bytes and decode the charset
+ * if enc != XML_CHAR_ENCODING_NONE
+ * plug some encoding conversion routines.
+ */
+ GROW;
+ if ((ctxt->input->end - ctxt->input->cur) >= 4) {
+ start[0] = RAW;
+ start[1] = NXT(1);
+ start[2] = NXT(2);
+ start[3] = NXT(3);
+ enc = xmlDetectCharEncoding(start, 4);
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+ }
+
+ /*
+ * Parse a possible text declaration first
+ */
+ if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
+ xmlParseTextDecl(ctxt);
+ }
+
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->depth = depth;
+
+ xmlParseContent(ctxt);
+
+ if ((RAW == '<') && (NXT(1) == '/')) {
+ xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
+ } else if (RAW != 0) {
+ xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
+ }
+ if (ctxt->node != newDoc->children) {
+ xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
+ }
+
+ if (!ctxt->wellFormed) {
+ if (ctxt->errNo == 0)
+ ret = XML_ERR_INTERNAL_ERROR;
+ else
+ ret = (xmlParserErrors)ctxt->errNo;
+ } else {
+ if (list != NULL) {
+ xmlNodePtr cur;
+
+ /*
+ * Return the newly created nodeset after unlinking it from
+ * they pseudo parent.
+ */
+ cur = newDoc->children->children;
+ *list = cur;
+ while (cur != NULL) {
+ cur->parent = NULL;
+ cur = cur->next;
+ }
+ newDoc->children->children = NULL;
+ }
+ ret = XML_ERR_OK;
+ }
+ if (sax != NULL)
+ ctxt->sax = oldsax;
+ oldctxt->node_seq.maximum = ctxt->node_seq.maximum;
+ oldctxt->node_seq.length = ctxt->node_seq.length;
+ oldctxt->node_seq.buffer = ctxt->node_seq.buffer;
+ ctxt->node_seq.maximum = 0;
+ ctxt->node_seq.length = 0;
+ ctxt->node_seq.buffer = NULL;
+ xmlFreeParserCtxt(ctxt);
+ newDoc->intSubset = NULL;
+ newDoc->extSubset = NULL;
+ xmlFreeDoc(newDoc);
+
+ return(ret);
+}
+
+#ifdef LIBXML_SAX1_ENABLED
+/**
+ * xmlParseExternalEntity:
+ * @doc: the document the chunk pertains to
+ * @sax: the SAX handler bloc (possibly NULL)
+ * @user_data: The user data returned on SAX callbacks (possibly NULL)
+ * @depth: Used for loop detection, use 0
+ * @URL: the URL for the entity to load
+ * @ID: the System ID for the entity to load
+ * @lst: the return value for the set of parsed nodes
+ *
+ * Parse an external general entity
+ * An external general parsed entity is well-formed if it matches the
+ * production labeled extParsedEnt.
+ *
+ * [78] extParsedEnt ::= TextDecl? content
+ *
+ * Returns 0 if the entity is well formed, -1 in case of args problem and
+ * the parser error code otherwise
+ */
+
+int
+xmlParseExternalEntity(xmlDocPtr doc, xmlSAXHandlerPtr sax, void *user_data,
+ int depth, const xmlChar *URL, const xmlChar *ID, xmlNodePtr *lst) {
+ return(xmlParseExternalEntityPrivate(doc, NULL, sax, user_data, depth, URL,
+ ID, lst));
+}
+
+/**
+ * xmlParseBalancedChunkMemory:
+ * @doc: the document the chunk pertains to
+ * @sax: the SAX handler bloc (possibly NULL)
+ * @user_data: The user data returned on SAX callbacks (possibly NULL)
+ * @depth: Used for loop detection, use 0
+ * @string: the input string in UTF8 or ISO-Latin (zero terminated)
+ * @lst: the return value for the set of parsed nodes
+ *
+ * Parse a well-balanced chunk of an XML document
+ * called by the parser
+ * The allowed sequence for the Well Balanced Chunk is the one defined by
+ * the content production in the XML grammar:
+ *
+ * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*
+ *
+ * Returns 0 if the chunk is well balanced, -1 in case of args problem and
+ * the parser error code otherwise
+ */
+
+int
+xmlParseBalancedChunkMemory(xmlDocPtr doc, xmlSAXHandlerPtr sax,
+ void *user_data, int depth, const xmlChar *string, xmlNodePtr *lst) {
+ return xmlParseBalancedChunkMemoryRecover( doc, sax, user_data,
+ depth, string, lst, 0 );
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+/**
+ * xmlParseBalancedChunkMemoryInternal:
+ * @oldctxt: the existing parsing context
+ * @string: the input string in UTF8 or ISO-Latin (zero terminated)
+ * @user_data: the user data field for the parser context
+ * @lst: the return value for the set of parsed nodes
+ *
+ *
+ * Parse a well-balanced chunk of an XML document
+ * called by the parser
+ * The allowed sequence for the Well Balanced Chunk is the one defined by
+ * the content production in the XML grammar:
+ *
+ * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*
+ *
+ * Returns XML_ERR_OK if the chunk is well balanced, and the parser
+ * error code otherwise
+ *
+ * In case recover is set to 1, the nodelist will not be empty even if
+ * the parsed chunk is not well balanced.
+ */
+static xmlParserErrors
+xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
+ const xmlChar *string, void *user_data, xmlNodePtr *lst) {
+ xmlParserCtxtPtr ctxt;
+ xmlDocPtr newDoc = NULL;
+ xmlSAXHandlerPtr oldsax = NULL;
+ xmlNodePtr content = NULL;
+ int size;
+ xmlParserErrors ret = XML_ERR_OK;
+
+ if (oldctxt->depth > 40) {
+ return(XML_ERR_ENTITY_LOOP);
+ }
+
+
+ if (lst != NULL)
+ *lst = NULL;
+ if (string == NULL)
+ return(XML_ERR_INTERNAL_ERROR);
+
+ size = xmlStrlen(string);
+
+ ctxt = xmlCreateMemoryParserCtxt((char *) string, size);
+ if (ctxt == NULL) return(XML_WAR_UNDECLARED_ENTITY);
+ if (user_data != NULL)
+ ctxt->userData = user_data;
+ else
+ ctxt->userData = ctxt;
+ if (ctxt->dict != NULL) xmlDictFree(ctxt->dict);
+ ctxt->dict = oldctxt->dict;
+ ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3);
+ ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5);
+ ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36);
+
+ oldsax = ctxt->sax;
+ ctxt->sax = oldctxt->sax;
+ xmlDetectSAX2(ctxt);
+ ctxt->replaceEntities = oldctxt->replaceEntities;
+ ctxt->options = oldctxt->options;
+
+ ctxt->_private = oldctxt->_private;
+ if (oldctxt->myDoc == NULL) {
+ newDoc = xmlNewDoc(BAD_CAST "1.0");
+ if (newDoc == NULL) {
+ ctxt->sax = oldsax;
+ ctxt->dict = NULL;
+ xmlFreeParserCtxt(ctxt);
+ return(XML_ERR_INTERNAL_ERROR);
+ }
+ ctxt->myDoc = newDoc;
+ } else {
+ ctxt->myDoc = oldctxt->myDoc;
+ content = ctxt->myDoc->children;
+ }
+ ctxt->myDoc->children = xmlNewDocNode(ctxt->myDoc, NULL,
+ BAD_CAST "pseudoroot", NULL);
+ if (ctxt->myDoc->children == NULL) {
+ ctxt->sax = oldsax;
+ ctxt->dict = NULL;
+ xmlFreeParserCtxt(ctxt);
+ if (newDoc != NULL)
+ xmlFreeDoc(newDoc);
+ return(XML_ERR_INTERNAL_ERROR);
+ }
+ nodePush(ctxt, ctxt->myDoc->children);
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->depth = oldctxt->depth + 1;
+
+ ctxt->validate = 0;
+ ctxt->loadsubset = oldctxt->loadsubset;
+ if ((oldctxt->validate) || (oldctxt->replaceEntities != 0)) {
+ /*
+ * ID/IDREF registration will be done in xmlValidateElement below
+ */
+ ctxt->loadsubset |= XML_SKIP_IDS;
+ }
+ ctxt->dictNames = oldctxt->dictNames;
+ ctxt->attsDefault = oldctxt->attsDefault;
+ ctxt->attsSpecial = oldctxt->attsSpecial;
+
+ xmlParseContent(ctxt);
+ if ((RAW == '<') && (NXT(1) == '/')) {
+ xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
+ } else if (RAW != 0) {
+ xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
+ }
+ if (ctxt->node != ctxt->myDoc->children) {
+ xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
+ }
+
+ if (!ctxt->wellFormed) {
+ if (ctxt->errNo == 0)
+ ret = XML_ERR_INTERNAL_ERROR;
+ else
+ ret = (xmlParserErrors)ctxt->errNo;
+ } else {
+ ret = XML_ERR_OK;
+ }
+
+ if ((lst != NULL) && (ret == XML_ERR_OK)) {
+ xmlNodePtr cur;
+
+ /*
+ * Return the newly created nodeset after unlinking it from
+ * they pseudo parent.
+ */
+ cur = ctxt->myDoc->children->children;
+ *lst = cur;
+ while (cur != NULL) {
+#ifdef LIBXML_VALID_ENABLED
+ if (oldctxt->validate && oldctxt->wellFormed &&
+ oldctxt->myDoc && oldctxt->myDoc->intSubset) {
+ oldctxt->valid &= xmlValidateElement(&oldctxt->vctxt,
+ oldctxt->myDoc, cur);
+ }
+#endif /* LIBXML_VALID_ENABLED */
+ cur->parent = NULL;
+ cur = cur->next;
+ }
+ ctxt->myDoc->children->children = NULL;
+ }
+ if (ctxt->myDoc != NULL) {
+ xmlFreeNode(ctxt->myDoc->children);
+ ctxt->myDoc->children = content;
+ }
+
+ ctxt->sax = oldsax;
+ ctxt->dict = NULL;
+ ctxt->attsDefault = NULL;
+ ctxt->attsSpecial = NULL;
+ xmlFreeParserCtxt(ctxt);
+ if (newDoc != NULL)
+ xmlFreeDoc(newDoc);
+
+ return(ret);
+}
+
+#ifdef LIBXML_SAX1_ENABLED
+/**
+ * xmlParseBalancedChunkMemoryRecover:
+ * @doc: the document the chunk pertains to
+ * @sax: the SAX handler bloc (possibly NULL)
+ * @user_data: The user data returned on SAX callbacks (possibly NULL)
+ * @depth: Used for loop detection, use 0
+ * @string: the input string in UTF8 or ISO-Latin (zero terminated)
+ * @lst: the return value for the set of parsed nodes
+ * @recover: return nodes even if the data is broken (use 0)
+ *
+ *
+ * Parse a well-balanced chunk of an XML document
+ * called by the parser
+ * The allowed sequence for the Well Balanced Chunk is the one defined by
+ * the content production in the XML grammar:
+ *
+ * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*
+ *
+ * Returns 0 if the chunk is well balanced, -1 in case of args problem and
+ * the parser error code otherwise
+ *
+ * In case recover is set to 1, the nodelist will not be empty even if
+ * the parsed chunk is not well balanced.
+ */
+int
+xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, xmlSAXHandlerPtr sax,
+ void *user_data, int depth, const xmlChar *string, xmlNodePtr *lst,
+ int recover) {
+ xmlParserCtxtPtr ctxt;
+ xmlDocPtr newDoc;
+ xmlSAXHandlerPtr oldsax = NULL;
+ xmlNodePtr content;
+ int size;
+ int ret = 0;
+
+ if (depth > 40) {
+ return(XML_ERR_ENTITY_LOOP);
+ }
+
+
+ if (lst != NULL)
+ *lst = NULL;
+ if (string == NULL)
+ return(-1);
+
+ size = xmlStrlen(string);
+
+ ctxt = xmlCreateMemoryParserCtxt((char *) string, size);
+ if (ctxt == NULL) return(-1);
+ ctxt->userData = ctxt;
+ if (sax != NULL) {
+ oldsax = ctxt->sax;
+ ctxt->sax = sax;
+ if (user_data != NULL)
+ ctxt->userData = user_data;
+ }
+ newDoc = xmlNewDoc(BAD_CAST "1.0");
+ if (newDoc == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(-1);
+ }
+ if (doc != NULL) {
+ newDoc->intSubset = doc->intSubset;
+ newDoc->extSubset = doc->extSubset;
+ }
+ newDoc->children = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL);
+ if (newDoc->children == NULL) {
+ if (sax != NULL)
+ ctxt->sax = oldsax;
+ xmlFreeParserCtxt(ctxt);
+ newDoc->intSubset = NULL;
+ newDoc->extSubset = NULL;
+ xmlFreeDoc(newDoc);
+ return(-1);
+ }
+ nodePush(ctxt, newDoc->children);
+ if (doc == NULL) {
+ ctxt->myDoc = newDoc;
+ } else {
+ ctxt->myDoc = newDoc;
+ newDoc->children->doc = doc;
+ }
+ ctxt->instate = XML_PARSER_CONTENT;
+ ctxt->depth = depth;
+
+ /*
+ * Doing validity checking on chunk doesn't make sense
+ */
+ ctxt->validate = 0;
+ ctxt->loadsubset = 0;
+ xmlDetectSAX2(ctxt);
+
+ if ( doc != NULL ){
+ content = doc->children;
+ doc->children = NULL;
+ xmlParseContent(ctxt);
+ doc->children = content;
+ }
+ else {
+ xmlParseContent(ctxt);
+ }
+ if ((RAW == '<') && (NXT(1) == '/')) {
+ xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
+ } else if (RAW != 0) {
+ xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
+ }
+ if (ctxt->node != newDoc->children) {
+ xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
+ }
+
+ if (!ctxt->wellFormed) {
+ if (ctxt->errNo == 0)
+ ret = 1;
+ else
+ ret = ctxt->errNo;
+ } else {
+ ret = 0;
+ }
+
+ if (lst != NULL && (ret == 0 || recover == 1)) {
+ xmlNodePtr cur;
+
+ /*
+ * Return the newly created nodeset after unlinking it from
+ * they pseudo parent.
+ */
+ cur = newDoc->children->children;
+ *lst = cur;
+ while (cur != NULL) {
+ cur->parent = NULL;
+ cur = cur->next;
+ }
+ newDoc->children->children = NULL;
+ }
+
+ if (sax != NULL)
+ ctxt->sax = oldsax;
+ xmlFreeParserCtxt(ctxt);
+ newDoc->intSubset = NULL;
+ newDoc->extSubset = NULL;
+ xmlFreeDoc(newDoc);
+
+ return(ret);
+}
+
+/**
+ * xmlSAXParseEntity:
+ * @sax: the SAX handler block
+ * @filename: the filename
+ *
+ * parse an XML external entity out of context and build a tree.
+ * It use the given SAX function block to handle the parsing callback.
+ * If sax is NULL, fallback to the default DOM tree building routines.
+ *
+ * [78] extParsedEnt ::= TextDecl? content
+ *
+ * This correspond to a "Well Balanced" chunk
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr
+xmlSAXParseEntity(xmlSAXHandlerPtr sax, const char *filename) {
+ xmlDocPtr ret;
+ xmlParserCtxtPtr ctxt;
+
+ ctxt = xmlCreateFileParserCtxt(filename);
+ if (ctxt == NULL) {
+ return(NULL);
+ }
+ if (sax != NULL) {
+ if (ctxt->sax != NULL)
+ xmlFree(ctxt->sax);
+ ctxt->sax = sax;
+ ctxt->userData = NULL;
+ }
+
+ xmlParseExtParsedEnt(ctxt);
+
+ if (ctxt->wellFormed)
+ ret = ctxt->myDoc;
+ else {
+ ret = NULL;
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
+ if (sax != NULL)
+ ctxt->sax = NULL;
+ xmlFreeParserCtxt(ctxt);
+
+ return(ret);
+}
+
+/**
+ * xmlParseEntity:
+ * @filename: the filename
+ *
+ * parse an XML external entity out of context and build a tree.
+ *
+ * [78] extParsedEnt ::= TextDecl? content
+ *
+ * This correspond to a "Well Balanced" chunk
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr
+xmlParseEntity(const char *filename) {
+ return(xmlSAXParseEntity(NULL, filename));
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+/**
+ * xmlCreateEntityParserCtxt:
+ * @URL: the entity URL
+ * @ID: the entity PUBLIC ID
+ * @base: a possible base for the target URI
+ *
+ * Create a parser context for an external entity
+ * Automatic support for ZLIB/Compress compressed document is provided
+ * by default if found at compile-time.
+ *
+ * Returns the new parser context or NULL
+ */
+xmlParserCtxtPtr
+xmlCreateEntityParserCtxt(const xmlChar *URL, const xmlChar *ID,
+ const xmlChar *base) {
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputPtr inputStream;
+ char *directory = NULL;
+ xmlChar *uri;
+
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ return(NULL);
+ }
+
+ uri = xmlBuildURI(URL, base);
+
+ if (uri == NULL) {
+ inputStream = xmlLoadExternalEntity((char *)URL, (char *)ID, ctxt);
+ if (inputStream == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ inputPush(ctxt, inputStream);
+
+ if ((ctxt->directory == NULL) && (directory == NULL))
+ directory = xmlParserGetDirectory((char *)URL);
+ if ((ctxt->directory == NULL) && (directory != NULL))
+ ctxt->directory = directory;
+ } else {
+ inputStream = xmlLoadExternalEntity((char *)uri, (char *)ID, ctxt);
+ if (inputStream == NULL) {
+ xmlFree(uri);
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ inputPush(ctxt, inputStream);
+
+ if ((ctxt->directory == NULL) && (directory == NULL))
+ directory = xmlParserGetDirectory((char *)uri);
+ if ((ctxt->directory == NULL) && (directory != NULL))
+ ctxt->directory = directory;
+ xmlFree(uri);
+ }
+ return(ctxt);
+}
+
+/************************************************************************
+ * *
+ * Front ends when parsing from a file *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCreateURLParserCtxt:
+ * @filename: the filename or URL
+ * @options: a combination of xmlParserOption
+ *
+ * Create a parser context for a file or URL content.
+ * Automatic support for ZLIB/Compress compressed document is provided
+ * by default if found at compile-time and for file accesses
+ *
+ * Returns the new parser context or NULL
+ */
+xmlParserCtxtPtr
+xmlCreateURLParserCtxt(const char *filename, int options)
+{
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputPtr inputStream;
+ char *directory = NULL;
+
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ xmlErrMemory(NULL, "cannot allocate parser context");
+ return(NULL);
+ }
+
+ if (options != 0)
+ xmlCtxtUseOptions(ctxt, options);
+
+ inputStream = xmlLoadExternalEntity(filename, NULL, ctxt);
+ if (inputStream == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ inputPush(ctxt, inputStream);
+ if ((ctxt->directory == NULL) && (directory == NULL))
+ directory = xmlParserGetDirectory(filename);
+ if ((ctxt->directory == NULL) && (directory != NULL))
+ ctxt->directory = directory;
+
+ return(ctxt);
+}
+
+/**
+ * xmlCreateFileParserCtxt:
+ * @filename: the filename
+ *
+ * Create a parser context for a file content.
+ * Automatic support for ZLIB/Compress compressed document is provided
+ * by default if found at compile-time.
+ *
+ * Returns the new parser context or NULL
+ */
+xmlParserCtxtPtr
+xmlCreateFileParserCtxt(const char *filename)
+{
+ return(xmlCreateURLParserCtxt(filename, 0));
+}
+
+#ifdef LIBXML_SAX1_ENABLED
+/**
+ * xmlSAXParseFileWithData:
+ * @sax: the SAX handler block
+ * @filename: the filename
+ * @recovery: work in recovery mode, i.e. tries to read no Well Formed
+ * documents
+ * @data: the userdata
+ *
+ * parse an XML file and build a tree. Automatic support for ZLIB/Compress
+ * compressed document is provided by default if found at compile-time.
+ * It use the given SAX function block to handle the parsing callback.
+ * If sax is NULL, fallback to the default DOM tree building routines.
+ *
+ * User data (void *) is stored within the parser context in the
+ * context's _private member, so it is available nearly everywhere in libxml
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr
+xmlSAXParseFileWithData(xmlSAXHandlerPtr sax, const char *filename,
+ int recovery, void *data) {
+ xmlDocPtr ret;
+ xmlParserCtxtPtr ctxt;
+ char *directory = NULL;
+
+ xmlInitParser();
+
+ ctxt = xmlCreateFileParserCtxt(filename);
+ if (ctxt == NULL) {
+ return(NULL);
+ }
+ if (sax != NULL) {
+ if (ctxt->sax != NULL)
+ xmlFree(ctxt->sax);
+ ctxt->sax = sax;
+ }
+ xmlDetectSAX2(ctxt);
+ if (data!=NULL) {
+ ctxt->_private = data;
+ }
+
+ if ((ctxt->directory == NULL) && (directory == NULL))
+ directory = xmlParserGetDirectory(filename);
+ if ((ctxt->directory == NULL) && (directory != NULL))
+ ctxt->directory = (char *) xmlStrdup((xmlChar *) directory);
+
+ ctxt->recovery = recovery;
+
+ xmlParseDocument(ctxt);
+
+ if ((ctxt->wellFormed) || recovery) {
+ ret = ctxt->myDoc;
+ if (ret != NULL) {
+ if (ctxt->input->buf->compressed > 0)
+ ret->compression = 9;
+ else
+ ret->compression = ctxt->input->buf->compressed;
+ }
+ }
+ else {
+ ret = NULL;
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
+ if (sax != NULL)
+ ctxt->sax = NULL;
+ xmlFreeParserCtxt(ctxt);
+
+ return(ret);
+}
+
+/**
+ * xmlSAXParseFile:
+ * @sax: the SAX handler block
+ * @filename: the filename
+ * @recovery: work in recovery mode, i.e. tries to read no Well Formed
+ * documents
+ *
+ * parse an XML file and build a tree. Automatic support for ZLIB/Compress
+ * compressed document is provided by default if found at compile-time.
+ * It use the given SAX function block to handle the parsing callback.
+ * If sax is NULL, fallback to the default DOM tree building routines.
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr
+xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename,
+ int recovery) {
+ return(xmlSAXParseFileWithData(sax,filename,recovery,NULL));
+}
+
+/**
+ * xmlRecoverDoc:
+ * @cur: a pointer to an array of xmlChar
+ *
+ * parse an XML in-memory document and build a tree.
+ * In the case the document is not Well Formed, a tree is built anyway
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr
+xmlRecoverDoc(xmlChar *cur) {
+ return(xmlSAXParseDoc(NULL, cur, 1));
+}
+
+/**
+ * xmlParseFile:
+ * @filename: the filename
+ *
+ * parse an XML file and build a tree. Automatic support for ZLIB/Compress
+ * compressed document is provided by default if found at compile-time.
+ *
+ * Returns the resulting document tree if the file was wellformed,
+ * NULL otherwise.
+ */
+
+xmlDocPtr
+xmlParseFile(const char *filename) {
+ return(xmlSAXParseFile(NULL, filename, 0));
+}
+
+/**
+ * xmlRecoverFile:
+ * @filename: the filename
+ *
+ * parse an XML file and build a tree. Automatic support for ZLIB/Compress
+ * compressed document is provided by default if found at compile-time.
+ * In the case the document is not Well Formed, a tree is built anyway
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr
+xmlRecoverFile(const char *filename) {
+ return(xmlSAXParseFile(NULL, filename, 1));
+}
+
+
+/**
+ * xmlSetupParserForBuffer:
+ * @ctxt: an XML parser context
+ * @buffer: a xmlChar * buffer
+ * @filename: a file name
+ *
+ * Setup the parser context to parse a new buffer; Clears any prior
+ * contents from the parser context. The buffer parameter must not be
+ * NULL, but the filename parameter can be
+ */
+void
+xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const xmlChar* buffer,
+ const char* filename)
+{
+ xmlParserInputPtr input;
+
+ input = xmlNewInputStream(ctxt);
+ if (input == NULL) {
+ xmlErrMemory(NULL, "parsing new buffer: out of memory\n");
+ xmlFree(ctxt);
+ return;
+ }
+
+ xmlClearParserCtxt(ctxt);
+ if (filename != NULL)
+ input->filename = (char *) xmlCanonicPath((const xmlChar *)filename);
+ input->base = buffer;
+ input->cur = buffer;
+ input->end = &buffer[xmlStrlen(buffer)];
+ inputPush(ctxt, input);
+}
+
+/**
+ * xmlSAXUserParseFile:
+ * @sax: a SAX handler
+ * @user_data: The user data returned on SAX callbacks
+ * @filename: a file name
+ *
+ * parse an XML file and call the given SAX handler routines.
+ * Automatic support for ZLIB/Compress compressed document is provided
+ *
+ * Returns 0 in case of success or a error number otherwise
+ */
+int
+xmlSAXUserParseFile(xmlSAXHandlerPtr sax, void *user_data,
+ const char *filename) {
+ int ret = 0;
+ xmlParserCtxtPtr ctxt;
+
+ ctxt = xmlCreateFileParserCtxt(filename);
+ if (ctxt == NULL) return -1;
+#ifdef LIBXML_SAX1_ENABLED
+ if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
+#endif /* LIBXML_SAX1_ENABLED */
+ xmlFree(ctxt->sax);
+ ctxt->sax = sax;
+ xmlDetectSAX2(ctxt);
+
+ if (user_data != NULL)
+ ctxt->userData = user_data;
+
+ xmlParseDocument(ctxt);
+
+ if (ctxt->wellFormed)
+ ret = 0;
+ else {
+ if (ctxt->errNo != 0)
+ ret = ctxt->errNo;
+ else
+ ret = -1;
+ }
+ if (sax != NULL)
+ ctxt->sax = NULL;
+ xmlFreeParserCtxt(ctxt);
+
+ return ret;
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+/************************************************************************
+ * *
+ * Front ends when parsing from memory *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCreateMemoryParserCtxt:
+ * @buffer: a pointer to a char array
+ * @size: the size of the array
+ *
+ * Create a parser context for an XML in-memory document.
+ *
+ * Returns the new parser context or NULL
+ */
+xmlParserCtxtPtr
+xmlCreateMemoryParserCtxt(const char *buffer, int size) {
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputPtr input;
+ xmlParserInputBufferPtr buf;
+
+ if (buffer == NULL)
+ return(NULL);
+ if (size <= 0)
+ return(NULL);
+
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL)
+ return(NULL);
+
+ /* TODO: xmlParserInputBufferCreateStatic, requires some serious changes */
+ buf = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE);
+ if (buf == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ input = xmlNewInputStream(ctxt);
+ if (input == NULL) {
+ xmlFreeParserInputBuffer(buf);
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+
+ input->filename = NULL;
+ input->buf = buf;
+ input->base = input->buf->buffer->content;
+ input->cur = input->buf->buffer->content;
+ input->end = &input->buf->buffer->content[input->buf->buffer->use];
+
+ inputPush(ctxt, input);
+ return(ctxt);
+}
+
+#ifdef LIBXML_SAX1_ENABLED
+/**
+ * xmlSAXParseMemoryWithData:
+ * @sax: the SAX handler block
+ * @buffer: an pointer to a char array
+ * @size: the size of the array
+ * @recovery: work in recovery mode, i.e. tries to read no Well Formed
+ * documents
+ * @data: the userdata
+ *
+ * parse an XML in-memory block and use the given SAX function block
+ * to handle the parsing callback. If sax is NULL, fallback to the default
+ * DOM tree building routines.
+ *
+ * User data (void *) is stored within the parser context in the
+ * context's _private member, so it is available nearly everywhere in libxml
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr
+xmlSAXParseMemoryWithData(xmlSAXHandlerPtr sax, const char *buffer,
+ int size, int recovery, void *data) {
+ xmlDocPtr ret;
+ xmlParserCtxtPtr ctxt;
+
+ ctxt = xmlCreateMemoryParserCtxt(buffer, size);
+ if (ctxt == NULL) return(NULL);
+ if (sax != NULL) {
+ if (ctxt->sax != NULL)
+ xmlFree(ctxt->sax);
+ ctxt->sax = sax;
+ }
+ xmlDetectSAX2(ctxt);
+ if (data!=NULL) {
+ ctxt->_private=data;
+ }
+
+ ctxt->recovery = recovery;
+
+ xmlParseDocument(ctxt);
+
+ if ((ctxt->wellFormed) || recovery) ret = ctxt->myDoc;
+ else {
+ ret = NULL;
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
+ if (sax != NULL)
+ ctxt->sax = NULL;
+ xmlFreeParserCtxt(ctxt);
+
+ return(ret);
+}
+
+/**
+ * xmlSAXParseMemory:
+ * @sax: the SAX handler block
+ * @buffer: an pointer to a char array
+ * @size: the size of the array
+ * @recovery: work in recovery mode, i.e. tries to read not Well Formed
+ * documents
+ *
+ * parse an XML in-memory block and use the given SAX function block
+ * to handle the parsing callback. If sax is NULL, fallback to the default
+ * DOM tree building routines.
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlSAXParseMemory(xmlSAXHandlerPtr sax, const char *buffer,
+ int size, int recovery) {
+ return xmlSAXParseMemoryWithData(sax, buffer, size, recovery, NULL);
+}
+
+/**
+ * xmlParseMemory:
+ * @buffer: an pointer to a char array
+ * @size: the size of the array
+ *
+ * parse an XML in-memory block and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr xmlParseMemory(const char *buffer, int size) {
+ return(xmlSAXParseMemory(NULL, buffer, size, 0));
+}
+
+/**
+ * xmlRecoverMemory:
+ * @buffer: an pointer to a char array
+ * @size: the size of the array
+ *
+ * parse an XML in-memory block and build a tree.
+ * In the case the document is not Well Formed, a tree is built anyway
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr xmlRecoverMemory(const char *buffer, int size) {
+ return(xmlSAXParseMemory(NULL, buffer, size, 1));
+}
+
+/**
+ * xmlSAXUserParseMemory:
+ * @sax: a SAX handler
+ * @user_data: The user data returned on SAX callbacks
+ * @buffer: an in-memory XML document input
+ * @size: the length of the XML document in bytes
+ *
+ * A better SAX parsing routine.
+ * parse an XML in-memory buffer and call the given SAX handler routines.
+ *
+ * Returns 0 in case of success or a error number otherwise
+ */
+int xmlSAXUserParseMemory(xmlSAXHandlerPtr sax, void *user_data,
+ const char *buffer, int size) {
+ int ret = 0;
+ xmlParserCtxtPtr ctxt;
+ xmlSAXHandlerPtr oldsax = NULL;
+
+ if (sax == NULL) return -1;
+ ctxt = xmlCreateMemoryParserCtxt(buffer, size);
+ if (ctxt == NULL) return -1;
+ oldsax = ctxt->sax;
+ ctxt->sax = sax;
+ xmlDetectSAX2(ctxt);
+ if (user_data != NULL)
+ ctxt->userData = user_data;
+
+ xmlParseDocument(ctxt);
+
+ if (ctxt->wellFormed)
+ ret = 0;
+ else {
+ if (ctxt->errNo != 0)
+ ret = ctxt->errNo;
+ else
+ ret = -1;
+ }
+ ctxt->sax = oldsax;
+ xmlFreeParserCtxt(ctxt);
+
+ return ret;
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+/**
+ * xmlCreateDocParserCtxt:
+ * @cur: a pointer to an array of xmlChar
+ *
+ * Creates a parser context for an XML in-memory document.
+ *
+ * Returns the new parser context or NULL
+ */
+xmlParserCtxtPtr
+xmlCreateDocParserCtxt(const xmlChar *cur) {
+ int len;
+
+ if (cur == NULL)
+ return(NULL);
+ len = xmlStrlen(cur);
+ return(xmlCreateMemoryParserCtxt((const char *)cur, len));
+}
+
+#ifdef LIBXML_SAX1_ENABLED
+/**
+ * xmlSAXParseDoc:
+ * @sax: the SAX handler block
+ * @cur: a pointer to an array of xmlChar
+ * @recovery: work in recovery mode, i.e. tries to read no Well Formed
+ * documents
+ *
+ * parse an XML in-memory document and build a tree.
+ * It use the given SAX function block to handle the parsing callback.
+ * If sax is NULL, fallback to the default DOM tree building routines.
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr
+xmlSAXParseDoc(xmlSAXHandlerPtr sax, xmlChar *cur, int recovery) {
+ xmlDocPtr ret;
+ xmlParserCtxtPtr ctxt;
+
+ if (cur == NULL) return(NULL);
+
+
+ ctxt = xmlCreateDocParserCtxt(cur);
+ if (ctxt == NULL) return(NULL);
+ if (sax != NULL) {
+ ctxt->sax = sax;
+ ctxt->userData = NULL;
+ }
+ xmlDetectSAX2(ctxt);
+
+ xmlParseDocument(ctxt);
+ if ((ctxt->wellFormed) || recovery) ret = ctxt->myDoc;
+ else {
+ ret = NULL;
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
+ if (sax != NULL)
+ ctxt->sax = NULL;
+ xmlFreeParserCtxt(ctxt);
+
+ return(ret);
+}
+
+/**
+ * xmlParseDoc:
+ * @cur: a pointer to an array of xmlChar
+ *
+ * parse an XML in-memory document and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+
+xmlDocPtr
+xmlParseDoc(xmlChar *cur) {
+ return(xmlSAXParseDoc(NULL, cur, 0));
+}
+#endif /* LIBXML_SAX1_ENABLED */
+
+#ifdef LIBXML_LEGACY_ENABLED
+/************************************************************************
+ * *
+ * Specific function to keep track of entities references *
+ * and used by the XSLT debugger *
+ * *
+ ************************************************************************/
+
+static xmlEntityReferenceFunc xmlEntityRefFunc = NULL;
+
+/**
+ * xmlAddEntityReference:
+ * @ent : A valid entity
+ * @firstNode : A valid first node for children of entity
+ * @lastNode : A valid last node of children entity
+ *
+ * Notify of a reference to an entity of type XML_EXTERNAL_GENERAL_PARSED_ENTITY
+ */
+static void
+xmlAddEntityReference(xmlEntityPtr ent, xmlNodePtr firstNode,
+ xmlNodePtr lastNode)
+{
+ if (xmlEntityRefFunc != NULL) {
+ (*xmlEntityRefFunc) (ent, firstNode, lastNode);
+ }
+}
+
+
+/**
+ * xmlSetEntityReferenceFunc:
+ * @func: A valid function
+ *
+ * Set the function to call call back when a xml reference has been made
+ */
+void
+xmlSetEntityReferenceFunc(xmlEntityReferenceFunc func)
+{
+ xmlEntityRefFunc = func;
+}
+#endif /* LIBXML_LEGACY_ENABLED */
+
+/************************************************************************
+ * *
+ * Miscellaneous *
+ * *
+ ************************************************************************/
+
+#ifdef LIBXML_XPATH_ENABLED
+#include <libxml/xpath.h>
+#endif
+
+extern void xmlGenericErrorDefaultFunc(void *ctx, const char *msg, ...);
+static int xmlParserInitialized = 0;
+
+/**
+ * xmlInitParser:
+ *
+ * Initialization function for the XML parser.
+ * This is not reentrant. Call once before processing in case of
+ * use in multithreaded programs.
+ */
+
+void
+xmlInitParser(void) {
+ if (xmlParserInitialized != 0)
+ return;
+
+ if ((xmlGenericError == xmlGenericErrorDefaultFunc) ||
+ (xmlGenericError == NULL))
+ initGenericErrorDefaultFunc(NULL);
+ xmlInitGlobals();
+ xmlInitThreads();
+ xmlInitMemory();
+ xmlInitCharEncodingHandlers();
+ xmlDefaultSAXHandlerInit();
+ xmlRegisterDefaultInputCallbacks();
+#ifdef LIBXML_OUTPUT_ENABLED
+ xmlRegisterDefaultOutputCallbacks();
+#endif /* LIBXML_OUTPUT_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+ htmlInitAutoClose();
+ htmlDefaultSAXHandlerInit();
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+ xmlXPathInit();
+#endif
+ xmlParserInitialized = 1;
+}
+
+/**
+ * xmlCleanupParser:
+ *
+ * Cleanup function for the XML library. It tries to reclaim all
+ * parsing related global memory allocated for the library processing.
+ * It doesn't deallocate any document related memory. Calling this
+ * function should not prevent reusing the library but one should
+ * call xmlCleanupParser() only when the process has
+ * finished using the library or XML document built with it.
+ */
+
+void
+xmlCleanupParser(void) {
+ if (!xmlParserInitialized)
+ return;
+
+ xmlCleanupCharEncodingHandlers();
+#ifdef LIBXML_CATALOG_ENABLED
+ xmlCatalogCleanup();
+#endif
+ xmlCleanupInputCallbacks();
+#ifdef LIBXML_OUTPUT_ENABLED
+ xmlCleanupOutputCallbacks();
+#endif
+ xmlCleanupGlobals();
+ xmlResetLastError();
+ xmlCleanupThreads(); /* must be last if called not from the main thread */
+ xmlCleanupMemory();
+ xmlParserInitialized = 0;
+}
+
+/************************************************************************
+ * *
+ * New set (2.6.0) of simpler and more flexible APIs *
+ * *
+ ************************************************************************/
+
+/**
+ * DICT_FREE:
+ * @str: a string
+ *
+ * Free a string if it is not owned by the "dict" dictionnary in the
+ * current scope
+ */
+#define DICT_FREE(str) \
+ if ((str) && ((!dict) || \
+ (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
+ xmlFree((char *)(str));
+
+/**
+ * xmlCtxtReset:
+ * @ctxt: an XML parser context
+ *
+ * Reset a parser context
+ */
+void
+xmlCtxtReset(xmlParserCtxtPtr ctxt)
+{
+ xmlParserInputPtr input;
+ xmlDictPtr dict = ctxt->dict;
+
+ while ((input = inputPop(ctxt)) != NULL) { /* Non consuming */
+ xmlFreeInputStream(input);
+ }
+ ctxt->inputNr = 0;
+ ctxt->input = NULL;
+
+ ctxt->spaceNr = 0;
+ ctxt->spaceTab[0] = -1;
+ ctxt->space = &ctxt->spaceTab[0];
+
+
+ ctxt->nodeNr = 0;
+ ctxt->node = NULL;
+
+ ctxt->nameNr = 0;
+ ctxt->name = NULL;
+
+ DICT_FREE(ctxt->version);
+ ctxt->version = NULL;
+ DICT_FREE(ctxt->encoding);
+ ctxt->encoding = NULL;
+ DICT_FREE(ctxt->directory);
+ ctxt->directory = NULL;
+ DICT_FREE(ctxt->extSubURI);
+ ctxt->extSubURI = NULL;
+ DICT_FREE(ctxt->extSubSystem);
+ ctxt->extSubSystem = NULL;
+ if (ctxt->myDoc != NULL)
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+
+ ctxt->standalone = -1;
+ ctxt->hasExternalSubset = 0;
+ ctxt->hasPErefs = 0;
+ ctxt->html = 0;
+ ctxt->external = 0;
+ ctxt->instate = XML_PARSER_START;
+ ctxt->token = 0;
+
+ ctxt->wellFormed = 1;
+ ctxt->nsWellFormed = 1;
+ ctxt->disableSAX = 0;
+ ctxt->valid = 1;
+ ctxt->vctxt.userData = ctxt;
+ ctxt->vctxt.error = xmlParserValidityError;
+ ctxt->vctxt.warning = xmlParserValidityWarning;
+ ctxt->record_info = 0;
+ ctxt->nbChars = 0;
+ ctxt->checkIndex = 0;
+ ctxt->inSubset = 0;
+ ctxt->errNo = XML_ERR_OK;
+ ctxt->depth = 0;
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ ctxt->catalogs = NULL;
+ xmlInitNodeInfoSeq(&ctxt->node_seq);
+
+ if (ctxt->attsDefault != NULL) {
+ xmlHashFree(ctxt->attsDefault, (xmlHashDeallocator) xmlFree);
+ ctxt->attsDefault = NULL;
+ }
+ if (ctxt->attsSpecial != NULL) {
+ xmlHashFree(ctxt->attsSpecial, NULL);
+ ctxt->attsSpecial = NULL;
+ }
+
+#ifdef LIBXML_CATALOG_ENABLED
+ if (ctxt->catalogs != NULL)
+ xmlCatalogFreeLocal(ctxt->catalogs);
+#endif
+ if (ctxt->lastError.code != XML_ERR_OK)
+ xmlResetError(&ctxt->lastError);
+}
+
+/**
+ * xmlCtxtResetPush:
+ * @ctxt: an XML parser context
+ * @chunk: a pointer to an array of chars
+ * @size: number of chars in the array
+ * @filename: an optional file name or URI
+ * @encoding: the document encoding, or NULL
+ *
+ * Reset a push parser context
+ *
+ * Returns 0 in case of success and 1 in case of error
+ */
+int
+xmlCtxtResetPush(xmlParserCtxtPtr ctxt, const char *chunk,
+ int size, const char *filename, const char *encoding)
+{
+ xmlParserInputPtr inputStream;
+ xmlParserInputBufferPtr buf;
+ xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
+
+ if (ctxt == NULL)
+ return(1);
+
+ if ((encoding == NULL) && (chunk != NULL) && (size >= 4))
+ enc = xmlDetectCharEncoding((const xmlChar *) chunk, size);
+
+ buf = xmlAllocParserInputBuffer(enc);
+ if (buf == NULL)
+ return(1);
+
+ if (ctxt == NULL) {
+ xmlFreeParserInputBuffer(buf);
+ return(1);
+ }
+
+ xmlCtxtReset(ctxt);
+
+ if (ctxt->pushTab == NULL) {
+ ctxt->pushTab = (void **) xmlMalloc(ctxt->nameMax * 3 *
+ sizeof(xmlChar *));
+ if (ctxt->pushTab == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ xmlFreeParserInputBuffer(buf);
+ return(1);
+ }
+ }
+
+ if (filename == NULL) {
+ ctxt->directory = NULL;
+ } else {
+ ctxt->directory = xmlParserGetDirectory(filename);
+ }
+
+ inputStream = xmlNewInputStream(ctxt);
+ if (inputStream == NULL) {
+ xmlFreeParserInputBuffer(buf);
+ return(1);
+ }
+
+ if (filename == NULL)
+ inputStream->filename = NULL;
+ else
+ inputStream->filename = (char *)
+ xmlCanonicPath((const xmlChar *) filename);
+ inputStream->buf = buf;
+ inputStream->base = inputStream->buf->buffer->content;
+ inputStream->cur = inputStream->buf->buffer->content;
+ inputStream->end =
+ &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
+
+ inputPush(ctxt, inputStream);
+
+ if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
+ (ctxt->input->buf != NULL)) {
+ int base = ctxt->input->base - ctxt->input->buf->buffer->content;
+ int cur = ctxt->input->cur - ctxt->input->base;
+
+ xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
+
+ ctxt->input->base = ctxt->input->buf->buffer->content + base;
+ ctxt->input->cur = ctxt->input->base + cur;
+ ctxt->input->end =
+ &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->
+ use];
+#ifdef DEBUG_PUSH
+ xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size);
+#endif
+ }
+
+ if (encoding != NULL) {
+ xmlCharEncodingHandlerPtr hdlr;
+
+ hdlr = xmlFindCharEncodingHandler(encoding);
+ if (hdlr != NULL) {
+ xmlSwitchToEncoding(ctxt, hdlr);
+ } else {
+ xmlFatalErrMsgStr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "Unsupported encoding %s\n", BAD_CAST encoding);
+ }
+ } else if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+
+ return(0);
+}
+
+/**
+ * xmlCtxtUseOptions:
+ * @ctxt: an XML parser context
+ * @options: a combination of xmlParserOption
+ *
+ * Applies the options to the parser context
+ *
+ * Returns 0 in case of success, the set of unknown or unimplemented options
+ * in case of error.
+ */
+int
+xmlCtxtUseOptions(xmlParserCtxtPtr ctxt, int options)
+{
+ if (options & XML_PARSE_RECOVER) {
+ ctxt->recovery = 1;
+ options -= XML_PARSE_RECOVER;
+ } else
+ ctxt->recovery = 0;
+ if (options & XML_PARSE_DTDLOAD) {
+ ctxt->loadsubset = XML_DETECT_IDS;
+ options -= XML_PARSE_DTDLOAD;
+ } else
+ ctxt->loadsubset = 0;
+ if (options & XML_PARSE_DTDATTR) {
+ ctxt->loadsubset |= XML_COMPLETE_ATTRS;
+ options -= XML_PARSE_DTDATTR;
+ }
+ if (options & XML_PARSE_NOENT) {
+ ctxt->replaceEntities = 1;
+ /* ctxt->loadsubset |= XML_DETECT_IDS; */
+ options -= XML_PARSE_NOENT;
+ } else
+ ctxt->replaceEntities = 0;
+ if (options & XML_PARSE_NOWARNING) {
+ ctxt->sax->warning = NULL;
+ options -= XML_PARSE_NOWARNING;
+ }
+ if (options & XML_PARSE_NOERROR) {
+ ctxt->sax->error = NULL;
+ ctxt->sax->fatalError = NULL;
+ options -= XML_PARSE_NOERROR;
+ }
+ if (options & XML_PARSE_PEDANTIC) {
+ ctxt->pedantic = 1;
+ options -= XML_PARSE_PEDANTIC;
+ } else
+ ctxt->pedantic = 0;
+ if (options & XML_PARSE_NOBLANKS) {
+ ctxt->keepBlanks = 0;
+ ctxt->sax->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
+ options -= XML_PARSE_NOBLANKS;
+ } else
+ ctxt->keepBlanks = 1;
+ if (options & XML_PARSE_DTDVALID) {
+ ctxt->validate = 1;
+ if (options & XML_PARSE_NOWARNING)
+ ctxt->vctxt.warning = NULL;
+ if (options & XML_PARSE_NOERROR)
+ ctxt->vctxt.error = NULL;
+ options -= XML_PARSE_DTDVALID;
+ } else
+ ctxt->validate = 0;
+#ifdef LIBXML_SAX1_ENABLED
+ if (options & XML_PARSE_SAX1) {
+ ctxt->sax->startElement = xmlSAX2StartElement;
+ ctxt->sax->endElement = xmlSAX2EndElement;
+ ctxt->sax->startElementNs = NULL;
+ ctxt->sax->endElementNs = NULL;
+ ctxt->sax->initialized = 1;
+ options -= XML_PARSE_SAX1;
+ }
+#endif /* LIBXML_SAX1_ENABLED */
+ if (options & XML_PARSE_NODICT) {
+ ctxt->dictNames = 0;
+ options -= XML_PARSE_NODICT;
+ } else {
+ ctxt->dictNames = 1;
+ }
+ if (options & XML_PARSE_NOCDATA) {
+ ctxt->sax->cdataBlock = NULL;
+ options -= XML_PARSE_NOCDATA;
+ }
+ if (options & XML_PARSE_NSCLEAN) {
+ ctxt->options |= XML_PARSE_NSCLEAN;
+ options -= XML_PARSE_NSCLEAN;
+ }
+ if (options & XML_PARSE_NONET) {
+ ctxt->options |= XML_PARSE_NONET;
+ options -= XML_PARSE_NONET;
+ }
+ ctxt->linenumbers = 1;
+ return (options);
+}
+
+/**
+ * xmlDoRead:
+ * @ctxt: an XML parser context
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ * @reuse: keep the context for reuse
+ *
+ * Common front-end for the xmlRead functions
+ *
+ * Returns the resulting document tree or NULL
+ */
+static xmlDocPtr
+xmlDoRead(xmlParserCtxtPtr ctxt, const char *URL, const char *encoding,
+ int options, int reuse)
+{
+ xmlDocPtr ret;
+
+ xmlCtxtUseOptions(ctxt, options);
+ if (encoding != NULL) {
+ xmlCharEncodingHandlerPtr hdlr;
+
+ hdlr = xmlFindCharEncodingHandler(encoding);
+ if (hdlr != NULL)
+ xmlSwitchToEncoding(ctxt, hdlr);
+ }
+ if ((URL != NULL) && (ctxt->input != NULL) &&
+ (ctxt->input->filename == NULL))
+ ctxt->input->filename = (char *) xmlStrdup((const xmlChar *) URL);
+ xmlParseDocument(ctxt);
+ if ((ctxt->wellFormed) || ctxt->recovery)
+ ret = ctxt->myDoc;
+ else {
+ ret = NULL;
+ if (ctxt->myDoc != NULL) {
+ xmlFreeDoc(ctxt->myDoc);
+ }
+ }
+ ctxt->myDoc = NULL;
+ if (!reuse) {
+ xmlFreeParserCtxt(ctxt);
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlReadDoc:
+ * @cur: a pointer to a zero terminated string
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML in-memory document and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlReadDoc(const xmlChar * cur, const char *URL, const char *encoding, int options)
+{
+ xmlParserCtxtPtr ctxt;
+
+ if (cur == NULL)
+ return (NULL);
+
+ ctxt = xmlCreateDocParserCtxt(cur);
+ if (ctxt == NULL)
+ return (NULL);
+ return (xmlDoRead(ctxt, URL, encoding, options, 0));
+}
+
+/**
+ * xmlReadFile:
+ * @filename: a file or URL
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML file from the filesystem or the network.
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlReadFile(const char *filename, const char *encoding, int options)
+{
+ xmlParserCtxtPtr ctxt;
+
+ ctxt = xmlCreateURLParserCtxt(filename, options);
+ if (ctxt == NULL)
+ return (NULL);
+ return (xmlDoRead(ctxt, NULL, encoding, options, 0));
+}
+
+/**
+ * xmlReadMemory:
+ * @buffer: a pointer to a char array
+ * @size: the size of the array
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML in-memory document and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlReadMemory(const char *buffer, int size, const char *URL, const char *encoding, int options)
+{
+ xmlParserCtxtPtr ctxt;
+
+ ctxt = xmlCreateMemoryParserCtxt(buffer, size);
+ if (ctxt == NULL)
+ return (NULL);
+ return (xmlDoRead(ctxt, URL, encoding, options, 0));
+}
+
+/**
+ * xmlReadFd:
+ * @fd: an open file descriptor
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML from a file descriptor and build a tree.
+ * NOTE that the file descriptor will not be closed when the
+ * reader is closed or reset.
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlReadFd(int fd, const char *URL, const char *encoding, int options)
+{
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (fd < 0)
+ return (NULL);
+
+ input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ input->closecallback = NULL;
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ xmlFreeParserCtxt(ctxt);
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (xmlDoRead(ctxt, URL, encoding, options, 0));
+}
+
+/**
+ * xmlReadIO:
+ * @ioread: an I/O read function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML document from I/O functions and source and build a tree.
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlReadIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose,
+ void *ioctx, const char *URL, const char *encoding, int options)
+{
+ xmlParserCtxtPtr ctxt;
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (ioread == NULL)
+ return (NULL);
+
+ input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
+ XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ xmlFreeParserCtxt(ctxt);
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (xmlDoRead(ctxt, URL, encoding, options, 0));
+}
+
+/**
+ * xmlCtxtReadDoc:
+ * @ctxt: an XML parser context
+ * @cur: a pointer to a zero terminated string
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML in-memory document and build a tree.
+ * This reuses the existing @ctxt parser context
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlCtxtReadDoc(xmlParserCtxtPtr ctxt, const xmlChar * cur,
+ const char *URL, const char *encoding, int options)
+{
+ xmlParserInputPtr stream;
+
+ if (cur == NULL)
+ return (NULL);
+ if (ctxt == NULL)
+ return (NULL);
+
+ xmlCtxtReset(ctxt);
+
+ stream = xmlNewStringInputStream(ctxt, cur);
+ if (stream == NULL) {
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (xmlDoRead(ctxt, URL, encoding, options, 1));
+}
+
+/**
+ * xmlCtxtReadFile:
+ * @ctxt: an XML parser context
+ * @filename: a file or URL
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML file from the filesystem or the network.
+ * This reuses the existing @ctxt parser context
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlCtxtReadFile(xmlParserCtxtPtr ctxt, const char *filename,
+ const char *encoding, int options)
+{
+ xmlParserInputPtr stream;
+
+ if (filename == NULL)
+ return (NULL);
+ if (ctxt == NULL)
+ return (NULL);
+
+ xmlCtxtReset(ctxt);
+
+ stream = xmlNewInputFromFile(ctxt, filename);
+ if (stream == NULL) {
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (xmlDoRead(ctxt, NULL, encoding, options, 1));
+}
+
+/**
+ * xmlCtxtReadMemory:
+ * @ctxt: an XML parser context
+ * @buffer: a pointer to a char array
+ * @size: the size of the array
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML in-memory document and build a tree.
+ * This reuses the existing @ctxt parser context
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlCtxtReadMemory(xmlParserCtxtPtr ctxt, const char *buffer, int size,
+ const char *URL, const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (ctxt == NULL)
+ return (NULL);
+ if (buffer == NULL)
+ return (NULL);
+
+ xmlCtxtReset(ctxt);
+
+ input = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE);
+ if (input == NULL) {
+ return(NULL);
+ }
+
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return(NULL);
+ }
+
+ inputPush(ctxt, stream);
+ return (xmlDoRead(ctxt, URL, encoding, options, 1));
+}
+
+/**
+ * xmlCtxtReadFd:
+ * @ctxt: an XML parser context
+ * @fd: an open file descriptor
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML from a file descriptor and build a tree.
+ * This reuses the existing @ctxt parser context
+ * NOTE that the file descriptor will not be closed when the
+ * reader is closed or reset.
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlCtxtReadFd(xmlParserCtxtPtr ctxt, int fd,
+ const char *URL, const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (fd < 0)
+ return (NULL);
+ if (ctxt == NULL)
+ return (NULL);
+
+ xmlCtxtReset(ctxt);
+
+
+ input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ input->closecallback = NULL;
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (xmlDoRead(ctxt, URL, encoding, options, 1));
+}
+
+/**
+ * xmlCtxtReadIO:
+ * @ctxt: an XML parser context
+ * @ioread: an I/O read function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML document from I/O functions and source and build a tree.
+ * This reuses the existing @ctxt parser context
+ *
+ * Returns the resulting document tree
+ */
+xmlDocPtr
+xmlCtxtReadIO(xmlParserCtxtPtr ctxt, xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose, void *ioctx,
+ const char *URL,
+ const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+ xmlParserInputPtr stream;
+
+ if (ioread == NULL)
+ return (NULL);
+ if (ctxt == NULL)
+ return (NULL);
+
+ xmlCtxtReset(ctxt);
+
+ input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
+ XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
+ if (stream == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ inputPush(ctxt, stream);
+ return (xmlDoRead(ctxt, URL, encoding, options, 1));
+}
diff --git a/parserInternals.c b/parserInternals.c
new file mode 100644
index 0000000..d03e3d4
--- /dev/null
+++ b/parserInternals.c
@@ -0,0 +1,2036 @@
+/*
+ * parserInternals.c : Internal routines (and obsolete ones) needed for the
+ * XML and HTML parsers.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#if defined(WIN32) && !defined (__CYGWIN__)
+#define XML_DIR_SEP '\\'
+#else
+#define XML_DIR_SEP '/'
+#endif
+
+#include <string.h>
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_ZLIB_H
+#include <zlib.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/valid.h>
+#include <libxml/entities.h>
+#include <libxml/xmlerror.h>
+#include <libxml/encoding.h>
+#include <libxml/valid.h>
+#include <libxml/xmlIO.h>
+#include <libxml/uri.h>
+#include <libxml/dict.h>
+#include <libxml/SAX.h>
+#ifdef LIBXML_CATALOG_ENABLED
+#include <libxml/catalog.h>
+#endif
+#include <libxml/globals.h>
+#include <libxml/chvalid.h>
+
+/*
+ * Various global defaults for parsing
+ */
+
+/**
+ * xmlCheckVersion:
+ * @version: the include version number
+ *
+ * check the compiled lib version against the include one.
+ * This can warn or immediately kill the application
+ */
+void
+xmlCheckVersion(int version) {
+ int myversion = (int) LIBXML_VERSION;
+
+ xmlInitParser();
+
+ if ((myversion / 10000) != (version / 10000)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Fatal: program compiled against libxml %d using libxml %d\n",
+ (version / 10000), (myversion / 10000));
+ fprintf(stderr,
+ "Fatal: program compiled against libxml %d using libxml %d\n",
+ (version / 10000), (myversion / 10000));
+ }
+ if ((myversion / 100) < (version / 100)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Warning: program compiled against libxml %d using older %d\n",
+ (version / 100), (myversion / 100));
+ }
+}
+
+
+/************************************************************************
+ * *
+ * Some factorized error routines *
+ * *
+ ************************************************************************/
+
+
+/**
+ * xmlErrMemory:
+ * @ctxt: an XML parser context
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+void
+xmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ if (ctxt != NULL) {
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ }
+ if (extra)
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
+ NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+ else
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
+ NULL, NULL, 0, 0, "Memory allocation failed\n");
+}
+
+/**
+ * __xmlErrEncoding:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @str1: an string info
+ * @str2: an string info
+ *
+ * Handle an encoding error
+ */
+void
+__xmlErrEncoding(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, const xmlChar * str1, const xmlChar * str2)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ if (ctxt != NULL)
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL,
+ ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
+ NULL, 0, (const char *) str1, (const char *) str2,
+ NULL, 0, 0, msg, str1, str2);
+ if (ctxt != NULL) {
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0)
+ ctxt->disableSAX = 1;
+ }
+}
+
+/**
+ * xmlErrInternal:
+ * @ctxt: an XML parser context
+ * @msg: the error message
+ * @str: error informations
+ *
+ * Handle an internal error
+ */
+static void
+xmlErrInternal(xmlParserCtxtPtr ctxt, const char *msg, const xmlChar * str)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ if (ctxt != NULL)
+ ctxt->errNo = XML_ERR_INTERNAL_ERROR;
+ __xmlRaiseError(NULL, NULL, NULL,
+ ctxt, NULL, XML_FROM_PARSER, XML_ERR_INTERNAL_ERROR,
+ XML_ERR_FATAL, NULL, 0, (const char *) str, NULL, NULL,
+ 0, 0, msg, str);
+ if (ctxt != NULL) {
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0)
+ ctxt->disableSAX = 1;
+ }
+}
+
+/**
+ * xmlErrEncodingInt:
+ * @ctxt: an XML parser context
+ * @error: the error number
+ * @msg: the error message
+ * @val: an integer value
+ *
+ * n encoding error
+ */
+static void
+xmlErrEncodingInt(xmlParserCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, int val)
+{
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ if (ctxt != NULL)
+ ctxt->errNo = error;
+ __xmlRaiseError(NULL, NULL, NULL,
+ ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
+ NULL, 0, NULL, NULL, NULL, val, 0, msg, val);
+ if (ctxt != NULL) {
+ ctxt->wellFormed = 0;
+ if (ctxt->recovery == 0)
+ ctxt->disableSAX = 1;
+ }
+}
+
+/**
+ * xmlIsLetter:
+ * @c: an unicode character (int)
+ *
+ * Check whether the character is allowed by the production
+ * [84] Letter ::= BaseChar | Ideographic
+ *
+ * Returns 0 if not, non-zero otherwise
+ */
+int
+xmlIsLetter(int c) {
+ return(IS_BASECHAR(c) || IS_IDEOGRAPHIC(c));
+}
+
+/************************************************************************
+ * *
+ * Input handling functions for progressive parsing *
+ * *
+ ************************************************************************/
+
+/* #define DEBUG_INPUT */
+/* #define DEBUG_STACK */
+/* #define DEBUG_PUSH */
+
+
+/* we need to keep enough input to show errors in context */
+#define LINE_LEN 80
+
+#ifdef DEBUG_INPUT
+#define CHECK_BUFFER(in) check_buffer(in)
+
+static
+void check_buffer(xmlParserInputPtr in) {
+ if (in->base != in->buf->buffer->content) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlParserInput: base mismatch problem\n");
+ }
+ if (in->cur < in->base) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlParserInput: cur < base problem\n");
+ }
+ if (in->cur > in->base + in->buf->buffer->use) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlParserInput: cur > base + use problem\n");
+ }
+ xmlGenericError(xmlGenericErrorContext,"buffer %x : content %x, cur %d, use %d, size %d\n",
+ (int) in, (int) in->buf->buffer->content, in->cur - in->base,
+ in->buf->buffer->use, in->buf->buffer->size);
+}
+
+#else
+#define CHECK_BUFFER(in)
+#endif
+
+
+/**
+ * xmlParserInputRead:
+ * @in: an XML parser input
+ * @len: an indicative size for the lookahead
+ *
+ * This function refresh the input for the parser. It doesn't try to
+ * preserve pointers to the input buffer, and discard already read data
+ *
+ * Returns the number of xmlChars read, or -1 in case of error, 0 indicate the
+ * end of this entity
+ */
+int
+xmlParserInputRead(xmlParserInputPtr in, int len) {
+ int ret;
+ int used;
+ int indx;
+
+#ifdef DEBUG_INPUT
+ xmlGenericError(xmlGenericErrorContext, "Read\n");
+#endif
+ if (in->buf == NULL) return(-1);
+ if (in->base == NULL) return(-1);
+ if (in->cur == NULL) return(-1);
+ if (in->buf->buffer == NULL) return(-1);
+ if (in->buf->readcallback == NULL) return(-1);
+
+ CHECK_BUFFER(in);
+
+ used = in->cur - in->buf->buffer->content;
+ ret = xmlBufferShrink(in->buf->buffer, used);
+ if (ret > 0) {
+ in->cur -= ret;
+ in->consumed += ret;
+ }
+ ret = xmlParserInputBufferRead(in->buf, len);
+ if (in->base != in->buf->buffer->content) {
+ /*
+ * the buffer has been reallocated
+ */
+ indx = in->cur - in->base;
+ in->base = in->buf->buffer->content;
+ in->cur = &in->buf->buffer->content[indx];
+ }
+ in->end = &in->buf->buffer->content[in->buf->buffer->use];
+
+ CHECK_BUFFER(in);
+
+ return(ret);
+}
+
+/**
+ * xmlParserInputGrow:
+ * @in: an XML parser input
+ * @len: an indicative size for the lookahead
+ *
+ * This function increase the input for the parser. It tries to
+ * preserve pointers to the input buffer, and keep already read data
+ *
+ * Returns the number of xmlChars read, or -1 in case of error, 0 indicate the
+ * end of this entity
+ */
+int
+xmlParserInputGrow(xmlParserInputPtr in, int len) {
+ int ret;
+ int indx;
+
+#ifdef DEBUG_INPUT
+ xmlGenericError(xmlGenericErrorContext, "Grow\n");
+#endif
+ if (in->buf == NULL) return(-1);
+ if (in->base == NULL) return(-1);
+ if (in->cur == NULL) return(-1);
+ if (in->buf->buffer == NULL) return(-1);
+
+ CHECK_BUFFER(in);
+
+ indx = in->cur - in->base;
+ if (in->buf->buffer->use > (unsigned int) indx + INPUT_CHUNK) {
+
+ CHECK_BUFFER(in);
+
+ return(0);
+ }
+ if (in->buf->readcallback != NULL)
+ ret = xmlParserInputBufferGrow(in->buf, len);
+ else
+ return(0);
+
+ /*
+ * NOTE : in->base may be a "dangling" i.e. freed pointer in this
+ * block, but we use it really as an integer to do some
+ * pointer arithmetic. Insure will raise it as a bug but in
+ * that specific case, that's not !
+ */
+ if (in->base != in->buf->buffer->content) {
+ /*
+ * the buffer has been reallocated
+ */
+ indx = in->cur - in->base;
+ in->base = in->buf->buffer->content;
+ in->cur = &in->buf->buffer->content[indx];
+ }
+ in->end = &in->buf->buffer->content[in->buf->buffer->use];
+
+ CHECK_BUFFER(in);
+
+ return(ret);
+}
+
+/**
+ * xmlParserInputShrink:
+ * @in: an XML parser input
+ *
+ * This function removes used input for the parser.
+ */
+void
+xmlParserInputShrink(xmlParserInputPtr in) {
+ int used;
+ int ret;
+ int indx;
+
+#ifdef DEBUG_INPUT
+ xmlGenericError(xmlGenericErrorContext, "Shrink\n");
+#endif
+ if (in->buf == NULL) return;
+ if (in->base == NULL) return;
+ if (in->cur == NULL) return;
+ if (in->buf->buffer == NULL) return;
+
+ CHECK_BUFFER(in);
+
+ used = in->cur - in->buf->buffer->content;
+ /*
+ * Do not shrink on large buffers whose only a tiny fraction
+ * was consumed
+ */
+ if (used > INPUT_CHUNK) {
+ ret = xmlBufferShrink(in->buf->buffer, used - LINE_LEN);
+ if (ret > 0) {
+ in->cur -= ret;
+ in->consumed += ret;
+ }
+ in->end = &in->buf->buffer->content[in->buf->buffer->use];
+ }
+
+ CHECK_BUFFER(in);
+
+ if (in->buf->buffer->use > INPUT_CHUNK) {
+ return;
+ }
+ xmlParserInputBufferRead(in->buf, 2 * INPUT_CHUNK);
+ if (in->base != in->buf->buffer->content) {
+ /*
+ * the buffer has been reallocated
+ */
+ indx = in->cur - in->base;
+ in->base = in->buf->buffer->content;
+ in->cur = &in->buf->buffer->content[indx];
+ }
+ in->end = &in->buf->buffer->content[in->buf->buffer->use];
+
+ CHECK_BUFFER(in);
+}
+
+/************************************************************************
+ * *
+ * UTF8 character input and related functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlNextChar:
+ * @ctxt: the XML parser context
+ *
+ * Skip to the next char input char.
+ */
+
+void
+xmlNextChar(xmlParserCtxtPtr ctxt)
+{
+ if (ctxt->instate == XML_PARSER_EOF)
+ return;
+
+ if (ctxt->charset == XML_CHAR_ENCODING_UTF8) {
+ if ((*ctxt->input->cur == 0) &&
+ (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0) &&
+ (ctxt->instate != XML_PARSER_COMMENT)) {
+ /*
+ * If we are at the end of the current entity and
+ * the context allows it, we pop consumed entities
+ * automatically.
+ * the auto closing should be blocked in other cases
+ */
+ xmlPopInput(ctxt);
+ } else {
+ const unsigned char *cur;
+ unsigned char c;
+
+ /*
+ * 2.11 End-of-Line Handling
+ * the literal two-character sequence "#xD#xA" or a standalone
+ * literal #xD, an XML processor must pass to the application
+ * the single character #xA.
+ */
+ if (*(ctxt->input->cur) == '\n') {
+ ctxt->input->line++;
+ ctxt->input->col = 1;
+ } else
+ ctxt->input->col++;
+
+ /*
+ * We are supposed to handle UTF8, check it's valid
+ * From rfc2044: encoding of the Unicode values on UTF-8:
+ *
+ * UCS-4 range (hex.) UTF-8 octet sequence (binary)
+ * 0000 0000-0000 007F 0xxxxxxx
+ * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
+ * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
+ *
+ * Check for the 0x110000 limit too
+ */
+ cur = ctxt->input->cur;
+
+ c = *cur;
+ if (c & 0x80) {
+ if (c == 0xC0)
+ goto encoding_error;
+ if (cur[1] == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if ((cur[1] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xe0) == 0xe0) {
+ unsigned int val;
+
+ if (cur[2] == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if ((cur[2] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xf0) == 0xf0) {
+ if (cur[3] == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if (((c & 0xf8) != 0xf0) ||
+ ((cur[3] & 0xc0) != 0x80))
+ goto encoding_error;
+ /* 4-byte code */
+ ctxt->input->cur += 4;
+ val = (cur[0] & 0x7) << 18;
+ val |= (cur[1] & 0x3f) << 12;
+ val |= (cur[2] & 0x3f) << 6;
+ val |= cur[3] & 0x3f;
+ } else {
+ /* 3-byte code */
+ ctxt->input->cur += 3;
+ val = (cur[0] & 0xf) << 12;
+ val |= (cur[1] & 0x3f) << 6;
+ val |= cur[2] & 0x3f;
+ }
+ if (((val > 0xd7ff) && (val < 0xe000)) ||
+ ((val > 0xfffd) && (val < 0x10000)) ||
+ (val >= 0x110000)) {
+ xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
+ "Char 0x%X out of allowed range\n",
+ val);
+ }
+ } else
+ /* 2-byte code */
+ ctxt->input->cur += 2;
+ } else
+ /* 1-byte code */
+ ctxt->input->cur++;
+
+ ctxt->nbChars++;
+ if (*ctxt->input->cur == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ }
+ } else {
+ /*
+ * Assume it's a fixed length encoding (1) with
+ * a compatible encoding for the ASCII set, since
+ * XML constructs only use < 128 chars
+ */
+
+ if (*(ctxt->input->cur) == '\n') {
+ ctxt->input->line++;
+ ctxt->input->col = 1;
+ } else
+ ctxt->input->col++;
+ ctxt->input->cur++;
+ ctxt->nbChars++;
+ if (*ctxt->input->cur == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ }
+ if ((*ctxt->input->cur == '%') && (!ctxt->html))
+ xmlParserHandlePEReference(ctxt);
+ if ((*ctxt->input->cur == 0) &&
+ (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
+ xmlPopInput(ctxt);
+ return;
+encoding_error:
+ /*
+ * If we detect an UTF8 error that probably mean that the
+ * input encoding didn't get properly advertised in the
+ * declaration header. Report the error and switch the encoding
+ * to ISO-Latin-1 (if you don't like this policy, just declare the
+ * encoding !)
+ */
+ __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
+ "Input is not proper UTF-8, indicate encoding !\n",
+ NULL, NULL);
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) {
+ ctxt->sax->error(ctxt->userData,
+ "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]);
+ }
+ ctxt->charset = XML_CHAR_ENCODING_8859_1;
+ ctxt->input->cur++;
+ return;
+}
+
+/**
+ * xmlCurrentChar:
+ * @ctxt: the XML parser context
+ * @len: pointer to the length of the char read
+ *
+ * The current char value, if using UTF-8 this may actually span multiple
+ * bytes in the input buffer. Implement the end of line normalization:
+ * 2.11 End-of-Line Handling
+ * Wherever an external parsed entity or the literal entity value
+ * of an internal parsed entity contains either the literal two-character
+ * sequence "#xD#xA" or a standalone literal #xD, an XML processor
+ * must pass to the application the single character #xA.
+ * This behavior can conveniently be produced by normalizing all
+ * line breaks to #xA on input, before parsing.)
+ *
+ * Returns the current char value and its length
+ */
+
+int
+xmlCurrentChar(xmlParserCtxtPtr ctxt, int *len) {
+ if (ctxt->instate == XML_PARSER_EOF)
+ return(0);
+
+ if ((*ctxt->input->cur >= 0x20) && (*ctxt->input->cur <= 0x7F)) {
+ *len = 1;
+ return((int) *ctxt->input->cur);
+ }
+ if (ctxt->charset == XML_CHAR_ENCODING_UTF8) {
+ /*
+ * We are supposed to handle UTF8, check it's valid
+ * From rfc2044: encoding of the Unicode values on UTF-8:
+ *
+ * UCS-4 range (hex.) UTF-8 octet sequence (binary)
+ * 0000 0000-0000 007F 0xxxxxxx
+ * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
+ * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
+ *
+ * Check for the 0x110000 limit too
+ */
+ const unsigned char *cur = ctxt->input->cur;
+ unsigned char c;
+ unsigned int val;
+
+ c = *cur;
+ if (c & 0x80) {
+ if (c == 0xC0)
+ goto encoding_error;
+ if (cur[1] == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if ((cur[1] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xe0) == 0xe0) {
+
+ if (cur[2] == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if ((cur[2] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xf0) == 0xf0) {
+ if (cur[3] == 0)
+ xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
+ if (((c & 0xf8) != 0xf0) ||
+ ((cur[3] & 0xc0) != 0x80))
+ goto encoding_error;
+ /* 4-byte code */
+ *len = 4;
+ val = (cur[0] & 0x7) << 18;
+ val |= (cur[1] & 0x3f) << 12;
+ val |= (cur[2] & 0x3f) << 6;
+ val |= cur[3] & 0x3f;
+ } else {
+ /* 3-byte code */
+ *len = 3;
+ val = (cur[0] & 0xf) << 12;
+ val |= (cur[1] & 0x3f) << 6;
+ val |= cur[2] & 0x3f;
+ }
+ } else {
+ /* 2-byte code */
+ *len = 2;
+ val = (cur[0] & 0x1f) << 6;
+ val |= cur[1] & 0x3f;
+ }
+ if (!IS_CHAR(val)) {
+ xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
+ "Char 0x%X out of allowed range\n", val);
+ }
+ return(val);
+ } else {
+ /* 1-byte code */
+ *len = 1;
+ if (*ctxt->input->cur == 0xD) {
+ if (ctxt->input->cur[1] == 0xA) {
+ ctxt->nbChars++;
+ ctxt->input->cur++;
+ }
+ return(0xA);
+ }
+ return((int) *ctxt->input->cur);
+ }
+ }
+ /*
+ * Assume it's a fixed length encoding (1) with
+ * a compatible encoding for the ASCII set, since
+ * XML constructs only use < 128 chars
+ */
+ *len = 1;
+ if (*ctxt->input->cur == 0xD) {
+ if (ctxt->input->cur[1] == 0xA) {
+ ctxt->nbChars++;
+ ctxt->input->cur++;
+ }
+ return(0xA);
+ }
+ return((int) *ctxt->input->cur);
+encoding_error:
+ /*
+ * An encoding problem may arise from a truncated input buffer
+ * splitting a character in the middle. In that case do not raise
+ * an error but return 0 to endicate an end of stream problem
+ */
+ if (ctxt->input->end - ctxt->input->cur < 4) {
+ *len = 0;
+ return(0);
+ }
+
+ /*
+ * If we detect an UTF8 error that probably mean that the
+ * input encoding didn't get properly advertised in the
+ * declaration header. Report the error and switch the encoding
+ * to ISO-Latin-1 (if you don't like this policy, just declare the
+ * encoding !)
+ */
+ __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
+ "Input is not proper UTF-8, indicate encoding !\n",
+ NULL, NULL);
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) {
+ ctxt->sax->error(ctxt->userData, "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]);
+ }
+ ctxt->charset = XML_CHAR_ENCODING_8859_1;
+ *len = 1;
+ return((int) *ctxt->input->cur);
+}
+
+/**
+ * xmlStringCurrentChar:
+ * @ctxt: the XML parser context
+ * @cur: pointer to the beginning of the char
+ * @len: pointer to the length of the char read
+ *
+ * The current char value, if using UTF-8 this may actually span multiple
+ * bytes in the input buffer.
+ *
+ * Returns the current char value and its length
+ */
+
+int
+xmlStringCurrentChar(xmlParserCtxtPtr ctxt, const xmlChar * cur, int *len)
+{
+ if ((ctxt == NULL) || (ctxt->charset == XML_CHAR_ENCODING_UTF8)) {
+ /*
+ * We are supposed to handle UTF8, check it's valid
+ * From rfc2044: encoding of the Unicode values on UTF-8:
+ *
+ * UCS-4 range (hex.) UTF-8 octet sequence (binary)
+ * 0000 0000-0000 007F 0xxxxxxx
+ * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
+ * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
+ *
+ * Check for the 0x110000 limit too
+ */
+ unsigned char c;
+ unsigned int val;
+
+ c = *cur;
+ if (c & 0x80) {
+ if ((cur[1] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xe0) == 0xe0) {
+
+ if ((cur[2] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xf0) == 0xf0) {
+ if (((c & 0xf8) != 0xf0) || ((cur[3] & 0xc0) != 0x80))
+ goto encoding_error;
+ /* 4-byte code */
+ *len = 4;
+ val = (cur[0] & 0x7) << 18;
+ val |= (cur[1] & 0x3f) << 12;
+ val |= (cur[2] & 0x3f) << 6;
+ val |= cur[3] & 0x3f;
+ } else {
+ /* 3-byte code */
+ *len = 3;
+ val = (cur[0] & 0xf) << 12;
+ val |= (cur[1] & 0x3f) << 6;
+ val |= cur[2] & 0x3f;
+ }
+ } else {
+ /* 2-byte code */
+ *len = 2;
+ val = (cur[0] & 0x1f) << 6;
+ val |= cur[1] & 0x3f;
+ }
+ if (!IS_CHAR(val)) {
+ xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
+ "Char 0x%X out of allowed range\n", val);
+ }
+ return (val);
+ } else {
+ /* 1-byte code */
+ *len = 1;
+ return ((int) *cur);
+ }
+ }
+ /*
+ * Assume it's a fixed length encoding (1) with
+ * a compatible encoding for the ASCII set, since
+ * XML constructs only use < 128 chars
+ */
+ *len = 1;
+ return ((int) *cur);
+encoding_error:
+
+ /*
+ * If we detect an UTF8 error that probably mean that the
+ * input encoding didn't get properly advertised in the
+ * declaration header. Report the error and switch the encoding
+ * to ISO-Latin-1 (if you don't like this policy, just declare the
+ * encoding !)
+ */
+ __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
+ "Input is not proper UTF-8, indicate encoding !\n",
+ NULL, NULL);
+ if ((ctxt != NULL) && (ctxt->sax != NULL) && (ctxt->sax->error != NULL)) {
+ ctxt->sax->error(ctxt->userData,
+ "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]);
+ }
+ *len = 1;
+ return ((int) *cur);
+}
+
+/**
+ * xmlCopyCharMultiByte:
+ * @out: pointer to an array of xmlChar
+ * @val: the char value
+ *
+ * append the char value in the array
+ *
+ * Returns the number of xmlChar written
+ */
+int
+xmlCopyCharMultiByte(xmlChar *out, int val) {
+ /*
+ * We are supposed to handle UTF8, check it's valid
+ * From rfc2044: encoding of the Unicode values on UTF-8:
+ *
+ * UCS-4 range (hex.) UTF-8 octet sequence (binary)
+ * 0000 0000-0000 007F 0xxxxxxx
+ * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
+ * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
+ */
+ if (val >= 0x80) {
+ xmlChar *savedout = out;
+ int bits;
+ if (val < 0x800) { *out++= (val >> 6) | 0xC0; bits= 0; }
+ else if (val < 0x10000) { *out++= (val >> 12) | 0xE0; bits= 6;}
+ else if (val < 0x110000) { *out++= (val >> 18) | 0xF0; bits= 12; }
+ else {
+ xmlErrEncodingInt(NULL, XML_ERR_INVALID_CHAR,
+ "Internal error, xmlCopyCharMultiByte 0x%X out of bound\n",
+ val);
+ return(0);
+ }
+ for ( ; bits >= 0; bits-= 6)
+ *out++= ((val >> bits) & 0x3F) | 0x80 ;
+ return (out - savedout);
+ }
+ *out = (xmlChar) val;
+ return 1;
+}
+
+/**
+ * xmlCopyChar:
+ * @len: Ignored, compatibility
+ * @out: pointer to an array of xmlChar
+ * @val: the char value
+ *
+ * append the char value in the array
+ *
+ * Returns the number of xmlChar written
+ */
+
+int
+xmlCopyChar(int len ATTRIBUTE_UNUSED, xmlChar *out, int val) {
+ /* the len parameter is ignored */
+ if (val >= 0x80) {
+ return(xmlCopyCharMultiByte (out, val));
+ }
+ *out = (xmlChar) val;
+ return 1;
+}
+
+/************************************************************************
+ * *
+ * Commodity functions to switch encodings *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSwitchEncoding:
+ * @ctxt: the parser context
+ * @enc: the encoding value (number)
+ *
+ * change the input functions when discovering the character encoding
+ * of a given entity.
+ *
+ * Returns 0 in case of success, -1 otherwise
+ */
+int
+xmlSwitchEncoding(xmlParserCtxtPtr ctxt, xmlCharEncoding enc)
+{
+ xmlCharEncodingHandlerPtr handler;
+
+ switch (enc) {
+ case XML_CHAR_ENCODING_ERROR:
+ __xmlErrEncoding(ctxt, XML_ERR_UNKNOWN_ENCODING,
+ "encoding unknown\n", NULL, NULL);
+ break;
+ case XML_CHAR_ENCODING_NONE:
+ /* let's assume it's UTF-8 without the XML decl */
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ return(0);
+ case XML_CHAR_ENCODING_UTF8:
+ /* default encoding, no conversion should be needed */
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+
+ /*
+ * Errata on XML-1.0 June 20 2001
+ * Specific handling of the Byte Order Mark for
+ * UTF-8
+ */
+ if ((ctxt->input != NULL) &&
+ (ctxt->input->cur[0] == 0xEF) &&
+ (ctxt->input->cur[1] == 0xBB) &&
+ (ctxt->input->cur[2] == 0xBF)) {
+ ctxt->input->cur += 3;
+ }
+ return(0);
+ case XML_CHAR_ENCODING_UTF16LE:
+ case XML_CHAR_ENCODING_UTF16BE:
+ /*The raw input characters are encoded
+ *in UTF-16. As we expect this function
+ *to be called after xmlCharEncInFunc, we expect
+ *ctxt->input->cur to contain UTF-8 encoded characters.
+ *So the raw UTF16 Byte Order Mark
+ *has also been converted into
+ *an UTF-8 BOM. Let's skip that BOM.
+ */
+ if ((ctxt->input != NULL) &&
+ (ctxt->input->cur[0] == 0xEF) &&
+ (ctxt->input->cur[1] == 0xBB) &&
+ (ctxt->input->cur[2] == 0xBF)) {
+ ctxt->input->cur += 3;
+ }
+ break ;
+ default:
+ break;
+ }
+ handler = xmlGetCharEncodingHandler(enc);
+ if (handler == NULL) {
+ /*
+ * Default handlers.
+ */
+ switch (enc) {
+ case XML_CHAR_ENCODING_ERROR:
+ __xmlErrEncoding(ctxt, XML_ERR_UNKNOWN_ENCODING,
+ "encoding unknown\n", NULL, NULL);
+ break;
+ case XML_CHAR_ENCODING_NONE:
+ /* let's assume it's UTF-8 without the XML decl */
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ return(0);
+ case XML_CHAR_ENCODING_UTF8:
+ case XML_CHAR_ENCODING_ASCII:
+ /* default encoding, no conversion should be needed */
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ return(0);
+ case XML_CHAR_ENCODING_UTF16LE:
+ break;
+ case XML_CHAR_ENCODING_UTF16BE:
+ break;
+ case XML_CHAR_ENCODING_UCS4LE:
+ __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "encoding not supported %s\n",
+ BAD_CAST "USC4 little endian", NULL);
+ break;
+ case XML_CHAR_ENCODING_UCS4BE:
+ __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "encoding not supported %s\n",
+ BAD_CAST "USC4 big endian", NULL);
+ break;
+ case XML_CHAR_ENCODING_EBCDIC:
+ __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "encoding not supported %s\n",
+ BAD_CAST "EBCDIC", NULL);
+ break;
+ case XML_CHAR_ENCODING_UCS4_2143:
+ __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "encoding not supported %s\n",
+ BAD_CAST "UCS4 2143", NULL);
+ break;
+ case XML_CHAR_ENCODING_UCS4_3412:
+ __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "encoding not supported %s\n",
+ BAD_CAST "UCS4 3412", NULL);
+ break;
+ case XML_CHAR_ENCODING_UCS2:
+ __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "encoding not supported %s\n",
+ BAD_CAST "UCS2", NULL);
+ break;
+ case XML_CHAR_ENCODING_8859_1:
+ case XML_CHAR_ENCODING_8859_2:
+ case XML_CHAR_ENCODING_8859_3:
+ case XML_CHAR_ENCODING_8859_4:
+ case XML_CHAR_ENCODING_8859_5:
+ case XML_CHAR_ENCODING_8859_6:
+ case XML_CHAR_ENCODING_8859_7:
+ case XML_CHAR_ENCODING_8859_8:
+ case XML_CHAR_ENCODING_8859_9:
+ /*
+ * We used to keep the internal content in the
+ * document encoding however this turns being unmaintainable
+ * So xmlGetCharEncodingHandler() will return non-null
+ * values for this now.
+ */
+ if ((ctxt->inputNr == 1) &&
+ (ctxt->encoding == NULL) &&
+ (ctxt->input->encoding != NULL)) {
+ ctxt->encoding = xmlStrdup(ctxt->input->encoding);
+ }
+ ctxt->charset = enc;
+ return(0);
+ case XML_CHAR_ENCODING_2022_JP:
+ __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "encoding not supported %s\n",
+ BAD_CAST "ISO-2022-JP", NULL);
+ break;
+ case XML_CHAR_ENCODING_SHIFT_JIS:
+ __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "encoding not supported %s\n",
+ BAD_CAST "Shift_JIS", NULL);
+ break;
+ case XML_CHAR_ENCODING_EUC_JP:
+ __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
+ "encoding not supported %s\n",
+ BAD_CAST "EUC-JP", NULL);
+ break;
+ }
+ }
+ if (handler == NULL)
+ return(-1);
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ return(xmlSwitchToEncoding(ctxt, handler));
+}
+
+/**
+ * xmlSwitchInputEncoding:
+ * @ctxt: the parser context
+ * @input: the input stream
+ * @handler: the encoding handler
+ *
+ * change the input functions when discovering the character encoding
+ * of a given entity.
+ *
+ * Returns 0 in case of success, -1 otherwise
+ */
+int
+xmlSwitchInputEncoding(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
+ xmlCharEncodingHandlerPtr handler)
+{
+ int nbchars;
+
+ if (handler == NULL)
+ return (-1);
+ if (input == NULL)
+ return (-1);
+ if (input->buf != NULL) {
+ if (input->buf->encoder != NULL) {
+ /*
+ * Check in case the auto encoding detetection triggered
+ * in already.
+ */
+ if (input->buf->encoder == handler)
+ return (0);
+
+ /*
+ * "UTF-16" can be used for both LE and BE
+ if ((!xmlStrncmp(BAD_CAST input->buf->encoder->name,
+ BAD_CAST "UTF-16", 6)) &&
+ (!xmlStrncmp(BAD_CAST handler->name,
+ BAD_CAST "UTF-16", 6))) {
+ return(0);
+ }
+ */
+
+ /*
+ * Note: this is a bit dangerous, but that's what it
+ * takes to use nearly compatible signature for different
+ * encodings.
+ */
+ xmlCharEncCloseFunc(input->buf->encoder);
+ input->buf->encoder = handler;
+ return (0);
+ }
+ input->buf->encoder = handler;
+
+ /*
+ * Is there already some content down the pipe to convert ?
+ */
+ if ((input->buf->buffer != NULL) && (input->buf->buffer->use > 0)) {
+ int processed;
+ unsigned int use;
+
+ /*
+ * Specific handling of the Byte Order Mark for
+ * UTF-16
+ */
+ if ((handler->name != NULL) &&
+ (!strcmp(handler->name, "UTF-16LE")) &&
+ (input->cur[0] == 0xFF) && (input->cur[1] == 0xFE)) {
+ input->cur += 2;
+ }
+ if ((handler->name != NULL) &&
+ (!strcmp(handler->name, "UTF-16BE")) &&
+ (input->cur[0] == 0xFE) && (input->cur[1] == 0xFF)) {
+ input->cur += 2;
+ }
+ /*
+ * Errata on XML-1.0 June 20 2001
+ * Specific handling of the Byte Order Mark for
+ * UTF-8
+ */
+ if ((handler->name != NULL) &&
+ (!strcmp(handler->name, "UTF-8")) &&
+ (input->cur[0] == 0xEF) &&
+ (input->cur[1] == 0xBB) && (input->cur[2] == 0xBF)) {
+ input->cur += 3;
+ }
+
+ /*
+ * Shrink the current input buffer.
+ * Move it as the raw buffer and create a new input buffer
+ */
+ processed = input->cur - input->base;
+ xmlBufferShrink(input->buf->buffer, processed);
+ input->buf->raw = input->buf->buffer;
+ input->buf->buffer = xmlBufferCreate();
+ input->buf->rawconsumed = processed;
+ use = input->buf->raw->use;
+
+ if (ctxt->html) {
+ /*
+ * convert as much as possible of the buffer
+ */
+ nbchars = xmlCharEncInFunc(input->buf->encoder,
+ input->buf->buffer,
+ input->buf->raw);
+ } else {
+ /*
+ * convert just enough to get
+ * '<?xml version="1.0" encoding="xxx"?>'
+ * parsed with the autodetected encoding
+ * into the parser reading buffer.
+ */
+ nbchars = xmlCharEncFirstLine(input->buf->encoder,
+ input->buf->buffer,
+ input->buf->raw);
+ }
+ if (nbchars < 0) {
+ xmlErrInternal(ctxt,
+ "switching encoding: encoder error\n",
+ NULL);
+ return (-1);
+ }
+ input->buf->rawconsumed += use - input->buf->raw->use;
+ input->base = input->cur = input->buf->buffer->content;
+ input->end = &input->base[input->buf->buffer->use];
+
+ }
+ return (0);
+ } else {
+ if ((input->length == 0) || (input->buf == NULL)) {
+ /*
+ * When parsing a static memory array one must know the
+ * size to be able to convert the buffer.
+ */
+ xmlErrInternal(ctxt, "switching encoding : no input\n", NULL);
+ return (-1);
+ } else {
+ int processed;
+
+ /*
+ * Shrink the current input buffer.
+ * Move it as the raw buffer and create a new input buffer
+ */
+ processed = input->cur - input->base;
+
+ input->buf->raw = xmlBufferCreate();
+ xmlBufferAdd(input->buf->raw, input->cur,
+ input->length - processed);
+ input->buf->buffer = xmlBufferCreate();
+
+ /*
+ * convert as much as possible of the raw input
+ * to the parser reading buffer.
+ */
+ nbchars = xmlCharEncInFunc(input->buf->encoder,
+ input->buf->buffer,
+ input->buf->raw);
+ if (nbchars < 0) {
+ xmlErrInternal(ctxt,
+ "switching encoding: encoder error\n",
+ NULL);
+ return (-1);
+ }
+
+ /*
+ * Conversion succeeded, get rid of the old buffer
+ */
+ if ((input->free != NULL) && (input->base != NULL))
+ input->free((xmlChar *) input->base);
+ input->base = input->cur = input->buf->buffer->content;
+ input->end = &input->base[input->buf->buffer->use];
+ }
+ }
+ return (0);
+}
+
+/**
+ * xmlSwitchToEncoding:
+ * @ctxt: the parser context
+ * @handler: the encoding handler
+ *
+ * change the input functions when discovering the character encoding
+ * of a given entity.
+ *
+ * Returns 0 in case of success, -1 otherwise
+ */
+int
+xmlSwitchToEncoding(xmlParserCtxtPtr ctxt, xmlCharEncodingHandlerPtr handler)
+{
+ if (handler != NULL) {
+ if (ctxt->input != NULL) {
+ xmlSwitchInputEncoding(ctxt, ctxt->input, handler);
+ } else {
+ xmlErrInternal(ctxt, "xmlSwitchToEncoding : no input\n",
+ NULL);
+ return(-1);
+ }
+ /*
+ * The parsing is now done in UTF8 natively
+ */
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ } else
+ return(-1);
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * Commodity functions to handle entities processing *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlFreeInputStream:
+ * @input: an xmlParserInputPtr
+ *
+ * Free up an input stream.
+ */
+void
+xmlFreeInputStream(xmlParserInputPtr input) {
+ if (input == NULL) return;
+
+ if (input->filename != NULL) xmlFree((char *) input->filename);
+ if (input->directory != NULL) xmlFree((char *) input->directory);
+ if (input->encoding != NULL) xmlFree((char *) input->encoding);
+ if (input->version != NULL) xmlFree((char *) input->version);
+ if ((input->free != NULL) && (input->base != NULL))
+ input->free((xmlChar *) input->base);
+ if (input->buf != NULL)
+ xmlFreeParserInputBuffer(input->buf);
+ xmlFree(input);
+}
+
+/**
+ * xmlNewInputStream:
+ * @ctxt: an XML parser context
+ *
+ * Create a new input stream structure
+ * Returns the new input stream or NULL
+ */
+xmlParserInputPtr
+xmlNewInputStream(xmlParserCtxtPtr ctxt) {
+ xmlParserInputPtr input;
+ static int id = 0;
+
+ input = (xmlParserInputPtr) xmlMalloc(sizeof(xmlParserInput));
+ if (input == NULL) {
+ xmlErrMemory(ctxt, "couldn't allocate a new input stream\n");
+ return(NULL);
+ }
+ memset(input, 0, sizeof(xmlParserInput));
+ input->line = 1;
+ input->col = 1;
+ input->standalone = -1;
+ /*
+ * we don't care about thread reentrancy unicity for a single
+ * parser context (and hence thread) is sufficient.
+ */
+ input->id = id++;
+ return(input);
+}
+
+/**
+ * xmlNewIOInputStream:
+ * @ctxt: an XML parser context
+ * @input: an I/O Input
+ * @enc: the charset encoding if known
+ *
+ * Create a new input stream structure encapsulating the @input into
+ * a stream suitable for the parser.
+ *
+ * Returns the new input stream or NULL
+ */
+xmlParserInputPtr
+xmlNewIOInputStream(xmlParserCtxtPtr ctxt, xmlParserInputBufferPtr input,
+ xmlCharEncoding enc) {
+ xmlParserInputPtr inputStream;
+
+ if (xmlParserDebugEntities)
+ xmlGenericError(xmlGenericErrorContext, "new input from I/O\n");
+ inputStream = xmlNewInputStream(ctxt);
+ if (inputStream == NULL) {
+ return(NULL);
+ }
+ inputStream->filename = NULL;
+ inputStream->buf = input;
+ inputStream->base = inputStream->buf->buffer->content;
+ inputStream->cur = inputStream->buf->buffer->content;
+ inputStream->end = &inputStream->base[inputStream->buf->buffer->use];
+ if (enc != XML_CHAR_ENCODING_NONE) {
+ xmlSwitchEncoding(ctxt, enc);
+ }
+
+ return(inputStream);
+}
+
+/**
+ * xmlNewEntityInputStream:
+ * @ctxt: an XML parser context
+ * @entity: an Entity pointer
+ *
+ * Create a new input stream based on an xmlEntityPtr
+ *
+ * Returns the new input stream or NULL
+ */
+xmlParserInputPtr
+xmlNewEntityInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
+ xmlParserInputPtr input;
+
+ if (entity == NULL) {
+ xmlErrInternal(ctxt, "xmlNewEntityInputStream entity = NULL\n",
+ NULL);
+ return(NULL);
+ }
+ if (xmlParserDebugEntities)
+ xmlGenericError(xmlGenericErrorContext,
+ "new input from entity: %s\n", entity->name);
+ if (entity->content == NULL) {
+ switch (entity->etype) {
+ case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
+ xmlErrInternal(ctxt, "Cannot parse entity %s\n",
+ entity->name);
+ break;
+ case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ return(xmlLoadExternalEntity((char *) entity->URI,
+ (char *) entity->ExternalID, ctxt));
+ case XML_INTERNAL_GENERAL_ENTITY:
+ xmlErrInternal(ctxt,
+ "Internal entity %s without content !\n",
+ entity->name);
+ break;
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ xmlErrInternal(ctxt,
+ "Internal parameter entity %s without content !\n",
+ entity->name);
+ break;
+ case XML_INTERNAL_PREDEFINED_ENTITY:
+ xmlErrInternal(ctxt,
+ "Predefined entity %s without content !\n",
+ entity->name);
+ break;
+ }
+ return(NULL);
+ }
+ input = xmlNewInputStream(ctxt);
+ if (input == NULL) {
+ return(NULL);
+ }
+ input->filename = (char *) entity->URI;
+ input->base = entity->content;
+ input->cur = entity->content;
+ input->length = entity->length;
+ input->end = &entity->content[input->length];
+ return(input);
+}
+
+/**
+ * xmlNewStringInputStream:
+ * @ctxt: an XML parser context
+ * @buffer: an memory buffer
+ *
+ * Create a new input stream based on a memory buffer.
+ * Returns the new input stream
+ */
+xmlParserInputPtr
+xmlNewStringInputStream(xmlParserCtxtPtr ctxt, const xmlChar *buffer) {
+ xmlParserInputPtr input;
+
+ if (buffer == NULL) {
+ xmlErrInternal(ctxt, "xmlNewStringInputStream string = NULL\n",
+ NULL);
+ return(NULL);
+ }
+ if (xmlParserDebugEntities)
+ xmlGenericError(xmlGenericErrorContext,
+ "new fixed input: %.30s\n", buffer);
+ input = xmlNewInputStream(ctxt);
+ if (input == NULL) {
+ xmlErrMemory(ctxt, "couldn't allocate a new input stream\n");
+ return(NULL);
+ }
+ input->base = buffer;
+ input->cur = buffer;
+ input->length = xmlStrlen(buffer);
+ input->end = &buffer[input->length];
+ return(input);
+}
+
+/**
+ * xmlNewInputFromFile:
+ * @ctxt: an XML parser context
+ * @filename: the filename to use as entity
+ *
+ * Create a new input stream based on a file or an URL.
+ *
+ * Returns the new input stream or NULL in case of error
+ */
+xmlParserInputPtr
+xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename) {
+ xmlParserInputBufferPtr buf;
+ xmlParserInputPtr inputStream;
+ char *directory = NULL;
+ xmlChar *URI = NULL;
+
+ if (xmlParserDebugEntities)
+ xmlGenericError(xmlGenericErrorContext,
+ "new input from file: %s\n", filename);
+ if (ctxt == NULL) return(NULL);
+ buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
+ if (buf == NULL) {
+ __xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n",
+ (const char *) filename);
+ return(NULL);
+ }
+
+ inputStream = xmlNewInputStream(ctxt);
+ if (inputStream == NULL) {
+ if (directory != NULL) xmlFree((char *) directory);
+ if (URI != NULL) xmlFree((char *) URI);
+ return(NULL);
+ }
+ inputStream->buf = buf;
+ inputStream = xmlCheckHTTPInput(ctxt, inputStream);
+ if (inputStream == NULL)
+ return(NULL);
+
+ if (inputStream->filename == NULL)
+ URI = xmlStrdup((xmlChar *) filename);
+ else
+ URI = xmlStrdup((xmlChar *) inputStream->filename);
+ directory = xmlParserGetDirectory((const char *) URI);
+ inputStream->filename = (char *) xmlCanonicPath((const xmlChar *) URI);
+ if (URI != NULL) xmlFree((char *) URI);
+ inputStream->directory = directory;
+
+ inputStream->base = inputStream->buf->buffer->content;
+ inputStream->cur = inputStream->buf->buffer->content;
+ inputStream->end = &inputStream->base[inputStream->buf->buffer->use];
+ if ((ctxt->directory == NULL) && (directory != NULL))
+ ctxt->directory = (char *) xmlStrdup((const xmlChar *) directory);
+ return(inputStream);
+}
+
+/************************************************************************
+ * *
+ * Commodity functions to handle parser contexts *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlInitParserCtxt:
+ * @ctxt: an XML parser context
+ *
+ * Initialize a parser context
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+
+int
+xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
+{
+ if(ctxt==NULL) {
+ xmlErrInternal(NULL, "Got NULL parser context\n", NULL);
+ return(-1);
+ }
+
+ xmlDefaultSAXHandlerInit();
+
+ ctxt->dict = xmlDictCreate();
+ if (ctxt->dict == NULL) {
+ xmlErrMemory(NULL, "cannot initialize parser context\n");
+ return(-1);
+ }
+ ctxt->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
+ if (ctxt->sax == NULL) {
+ xmlErrMemory(NULL, "cannot initialize parser context\n");
+ return(-1);
+ }
+ else
+ xmlSAXVersion(ctxt->sax, 2);
+
+ ctxt->maxatts = 0;
+ ctxt->atts = NULL;
+ /* Allocate the Input stack */
+ ctxt->inputTab = (xmlParserInputPtr *)
+ xmlMalloc(5 * sizeof(xmlParserInputPtr));
+ if (ctxt->inputTab == NULL) {
+ xmlErrMemory(NULL, "cannot initialize parser context\n");
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 0;
+ ctxt->input = NULL;
+ return(-1);
+ }
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 5;
+ ctxt->input = NULL;
+
+ ctxt->version = NULL;
+ ctxt->encoding = NULL;
+ ctxt->standalone = -1;
+ ctxt->hasExternalSubset = 0;
+ ctxt->hasPErefs = 0;
+ ctxt->html = 0;
+ ctxt->external = 0;
+ ctxt->instate = XML_PARSER_START;
+ ctxt->token = 0;
+ ctxt->directory = NULL;
+
+ /* Allocate the Node stack */
+ ctxt->nodeTab = (xmlNodePtr *) xmlMalloc(10 * sizeof(xmlNodePtr));
+ if (ctxt->nodeTab == NULL) {
+ xmlErrMemory(NULL, "cannot initialize parser context\n");
+ ctxt->nodeNr = 0;
+ ctxt->nodeMax = 0;
+ ctxt->node = NULL;
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 0;
+ ctxt->input = NULL;
+ return(-1);
+ }
+ ctxt->nodeNr = 0;
+ ctxt->nodeMax = 10;
+ ctxt->node = NULL;
+
+ /* Allocate the Name stack */
+ ctxt->nameTab = (const xmlChar **) xmlMalloc(10 * sizeof(xmlChar *));
+ if (ctxt->nameTab == NULL) {
+ xmlErrMemory(NULL, "cannot initialize parser context\n");
+ ctxt->nodeNr = 0;
+ ctxt->nodeMax = 0;
+ ctxt->node = NULL;
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 0;
+ ctxt->input = NULL;
+ ctxt->nameNr = 0;
+ ctxt->nameMax = 0;
+ ctxt->name = NULL;
+ return(-1);
+ }
+ ctxt->nameNr = 0;
+ ctxt->nameMax = 10;
+ ctxt->name = NULL;
+
+ /* Allocate the space stack */
+ ctxt->spaceTab = (int *) xmlMalloc(10 * sizeof(int));
+ if (ctxt->spaceTab == NULL) {
+ xmlErrMemory(NULL, "cannot initialize parser context\n");
+ ctxt->nodeNr = 0;
+ ctxt->nodeMax = 0;
+ ctxt->node = NULL;
+ ctxt->inputNr = 0;
+ ctxt->inputMax = 0;
+ ctxt->input = NULL;
+ ctxt->nameNr = 0;
+ ctxt->nameMax = 0;
+ ctxt->name = NULL;
+ ctxt->spaceNr = 0;
+ ctxt->spaceMax = 0;
+ ctxt->space = NULL;
+ return(-1);
+ }
+ ctxt->spaceNr = 1;
+ ctxt->spaceMax = 10;
+ ctxt->spaceTab[0] = -1;
+ ctxt->space = &ctxt->spaceTab[0];
+ ctxt->userData = ctxt;
+ ctxt->myDoc = NULL;
+ ctxt->wellFormed = 1;
+ ctxt->nsWellFormed = 1;
+ ctxt->valid = 1;
+ ctxt->loadsubset = xmlLoadExtDtdDefaultValue;
+ ctxt->validate = xmlDoValidityCheckingDefaultValue;
+ ctxt->pedantic = xmlPedanticParserDefaultValue;
+ ctxt->linenumbers = xmlLineNumbersDefaultValue;
+ ctxt->keepBlanks = xmlKeepBlanksDefaultValue;
+ if (ctxt->keepBlanks == 0)
+ ctxt->sax->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
+
+ ctxt->vctxt.userData = ctxt;
+ ctxt->vctxt.error = xmlParserValidityError;
+ ctxt->vctxt.warning = xmlParserValidityWarning;
+ if (ctxt->validate) {
+ if (xmlGetWarningsDefaultValue == 0)
+ ctxt->vctxt.warning = NULL;
+ else
+ ctxt->vctxt.warning = xmlParserValidityWarning;
+ ctxt->vctxt.nodeMax = 0;
+ }
+ ctxt->replaceEntities = xmlSubstituteEntitiesDefaultValue;
+ ctxt->record_info = 0;
+ ctxt->nbChars = 0;
+ ctxt->checkIndex = 0;
+ ctxt->inSubset = 0;
+ ctxt->errNo = XML_ERR_OK;
+ ctxt->depth = 0;
+ ctxt->charset = XML_CHAR_ENCODING_UTF8;
+ ctxt->catalogs = NULL;
+ xmlInitNodeInfoSeq(&ctxt->node_seq);
+ return(0);
+}
+
+/**
+ * xmlFreeParserCtxt:
+ * @ctxt: an XML parser context
+ *
+ * Free all the memory used by a parser context. However the parsed
+ * document in ctxt->myDoc is not freed.
+ */
+
+void
+xmlFreeParserCtxt(xmlParserCtxtPtr ctxt)
+{
+ xmlParserInputPtr input;
+
+ if (ctxt == NULL) return;
+
+ while ((input = inputPop(ctxt)) != NULL) { /* Non consuming */
+ xmlFreeInputStream(input);
+ }
+ if (ctxt->spaceTab != NULL) xmlFree(ctxt->spaceTab);
+ if (ctxt->nameTab != NULL) xmlFree((xmlChar * *)ctxt->nameTab);
+ if (ctxt->nodeTab != NULL) xmlFree(ctxt->nodeTab);
+ if (ctxt->inputTab != NULL) xmlFree(ctxt->inputTab);
+ if (ctxt->version != NULL) xmlFree((char *) ctxt->version);
+ if (ctxt->encoding != NULL) xmlFree((char *) ctxt->encoding);
+ if (ctxt->extSubURI != NULL) xmlFree((char *) ctxt->extSubURI);
+ if (ctxt->extSubSystem != NULL) xmlFree((char *) ctxt->extSubSystem);
+#ifdef LIBXML_SAX1_ENABLED
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler))
+#else
+ if (ctxt->sax != NULL)
+#endif /* LIBXML_SAX1_ENABLED */
+ xmlFree(ctxt->sax);
+ if (ctxt->directory != NULL) xmlFree((char *) ctxt->directory);
+ if (ctxt->vctxt.nodeTab != NULL) xmlFree(ctxt->vctxt.nodeTab);
+ if (ctxt->atts != NULL) xmlFree((xmlChar * *)ctxt->atts);
+ if (ctxt->dict != NULL) xmlDictFree(ctxt->dict);
+ if (ctxt->nsTab != NULL) xmlFree((char *) ctxt->nsTab);
+ if (ctxt->pushTab != NULL) xmlFree(ctxt->pushTab);
+ if (ctxt->attallocs != NULL) xmlFree(ctxt->attallocs);
+ if (ctxt->attsDefault != NULL)
+ xmlHashFree(ctxt->attsDefault, (xmlHashDeallocator) xmlFree);
+ if (ctxt->attsSpecial != NULL)
+ xmlHashFree(ctxt->attsSpecial, NULL);
+ if (ctxt->freeElems != NULL) {
+ xmlNodePtr cur, next;
+
+ cur = ctxt->freeElems;
+ while (cur != NULL) {
+ next = cur->next;
+ xmlFree(cur);
+ cur = next;
+ }
+ }
+ if (ctxt->freeAttrs != NULL) {
+ xmlAttrPtr cur, next;
+
+ cur = ctxt->freeAttrs;
+ while (cur != NULL) {
+ next = cur->next;
+ xmlFree(cur);
+ cur = next;
+ }
+ }
+ /*
+ * cleanup the error strings
+ */
+ if (ctxt->lastError.message != NULL)
+ xmlFree(ctxt->lastError.message);
+ if (ctxt->lastError.file != NULL)
+ xmlFree(ctxt->lastError.file);
+ if (ctxt->lastError.str1 != NULL)
+ xmlFree(ctxt->lastError.str1);
+ if (ctxt->lastError.str2 != NULL)
+ xmlFree(ctxt->lastError.str2);
+ if (ctxt->lastError.str3 != NULL)
+ xmlFree(ctxt->lastError.str3);
+
+#ifdef LIBXML_CATALOG_ENABLED
+ if (ctxt->catalogs != NULL)
+ xmlCatalogFreeLocal(ctxt->catalogs);
+#endif
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlNewParserCtxt:
+ *
+ * Allocate and initialize a new parser context.
+ *
+ * Returns the xmlParserCtxtPtr or NULL
+ */
+
+xmlParserCtxtPtr
+xmlNewParserCtxt()
+{
+ xmlParserCtxtPtr ctxt;
+
+ ctxt = (xmlParserCtxtPtr) xmlMalloc(sizeof(xmlParserCtxt));
+ if (ctxt == NULL) {
+ xmlErrMemory(NULL, "cannot allocate parser context\n");
+ return(NULL);
+ }
+ memset(ctxt, 0, sizeof(xmlParserCtxt));
+ if (xmlInitParserCtxt(ctxt) < 0) {
+ xmlFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+ return(ctxt);
+}
+
+/************************************************************************
+ * *
+ * Handling of node informations *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlClearParserCtxt:
+ * @ctxt: an XML parser context
+ *
+ * Clear (release owned resources) and reinitialize a parser context
+ */
+
+void
+xmlClearParserCtxt(xmlParserCtxtPtr ctxt)
+{
+ if (ctxt==NULL)
+ return;
+ xmlClearNodeInfoSeq(&ctxt->node_seq);
+ xmlInitParserCtxt(ctxt);
+}
+
+/**
+ * xmlParserFindNodeInfo:
+ * @ctx: an XML parser context
+ * @node: an XML node within the tree
+ *
+ * Find the parser node info struct for a given node
+ *
+ * Returns an xmlParserNodeInfo block pointer or NULL
+ */
+const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxtPtr ctx,
+ const xmlNodePtr node)
+{
+ unsigned long pos;
+
+ /* Find position where node should be at */
+ pos = xmlParserFindNodeInfoIndex(&ctx->node_seq, node);
+ if (pos < ctx->node_seq.length && ctx->node_seq.buffer[pos].node == node)
+ return &ctx->node_seq.buffer[pos];
+ else
+ return NULL;
+}
+
+
+/**
+ * xmlInitNodeInfoSeq:
+ * @seq: a node info sequence pointer
+ *
+ * -- Initialize (set to initial state) node info sequence
+ */
+void
+xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq)
+{
+ seq->length = 0;
+ seq->maximum = 0;
+ seq->buffer = NULL;
+}
+
+/**
+ * xmlClearNodeInfoSeq:
+ * @seq: a node info sequence pointer
+ *
+ * -- Clear (release memory and reinitialize) node
+ * info sequence
+ */
+void
+xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq)
+{
+ if ( seq->buffer != NULL )
+ xmlFree(seq->buffer);
+ xmlInitNodeInfoSeq(seq);
+}
+
+
+/**
+ * xmlParserFindNodeInfoIndex:
+ * @seq: a node info sequence pointer
+ * @node: an XML node pointer
+ *
+ *
+ * xmlParserFindNodeInfoIndex : Find the index that the info record for
+ * the given node is or should be at in a sorted sequence
+ *
+ * Returns a long indicating the position of the record
+ */
+unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq,
+ const xmlNodePtr node)
+{
+ unsigned long upper, lower, middle;
+ int found = 0;
+
+ /* Do a binary search for the key */
+ lower = 1;
+ upper = seq->length;
+ middle = 0;
+ while ( lower <= upper && !found) {
+ middle = lower + (upper - lower) / 2;
+ if ( node == seq->buffer[middle - 1].node )
+ found = 1;
+ else if ( node < seq->buffer[middle - 1].node )
+ upper = middle - 1;
+ else
+ lower = middle + 1;
+ }
+
+ /* Return position */
+ if ( middle == 0 || seq->buffer[middle - 1].node < node )
+ return middle;
+ else
+ return middle - 1;
+}
+
+
+/**
+ * xmlParserAddNodeInfo:
+ * @ctxt: an XML parser context
+ * @info: a node info sequence pointer
+ *
+ * Insert node info record into the sorted sequence
+ */
+void
+xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt,
+ const xmlParserNodeInfoPtr info)
+{
+ unsigned long pos;
+
+ /* Find pos and check to see if node is already in the sequence */
+ pos = xmlParserFindNodeInfoIndex(&ctxt->node_seq, (xmlNodePtr)
+ info->node);
+ if (pos < ctxt->node_seq.length
+ && ctxt->node_seq.buffer[pos].node == info->node) {
+ ctxt->node_seq.buffer[pos] = *info;
+ }
+
+ /* Otherwise, we need to add new node to buffer */
+ else {
+ if (ctxt->node_seq.length + 1 > ctxt->node_seq.maximum) {
+ xmlParserNodeInfo *tmp_buffer;
+ unsigned int byte_size;
+
+ if (ctxt->node_seq.maximum == 0)
+ ctxt->node_seq.maximum = 2;
+ byte_size = (sizeof(*ctxt->node_seq.buffer) *
+ (2 * ctxt->node_seq.maximum));
+
+ if (ctxt->node_seq.buffer == NULL)
+ tmp_buffer = (xmlParserNodeInfo *) xmlMalloc(byte_size);
+ else
+ tmp_buffer =
+ (xmlParserNodeInfo *) xmlRealloc(ctxt->node_seq.buffer,
+ byte_size);
+
+ if (tmp_buffer == NULL) {
+ xmlErrMemory(ctxt, "failed to allocate buffer\n");
+ return;
+ }
+ ctxt->node_seq.buffer = tmp_buffer;
+ ctxt->node_seq.maximum *= 2;
+ }
+
+ /* If position is not at end, move elements out of the way */
+ if (pos != ctxt->node_seq.length) {
+ unsigned long i;
+
+ for (i = ctxt->node_seq.length; i > pos; i--)
+ ctxt->node_seq.buffer[i] = ctxt->node_seq.buffer[i - 1];
+ }
+
+ /* Copy element and increase length */
+ ctxt->node_seq.buffer[pos] = *info;
+ ctxt->node_seq.length++;
+ }
+}
+
+/************************************************************************
+ * *
+ * Defaults settings *
+ * *
+ ************************************************************************/
+/**
+ * xmlPedanticParserDefault:
+ * @val: int 0 or 1
+ *
+ * Set and return the previous value for enabling pedantic warnings.
+ *
+ * Returns the last value for 0 for no substitution, 1 for substitution.
+ */
+
+int
+xmlPedanticParserDefault(int val) {
+ int old = xmlPedanticParserDefaultValue;
+
+ xmlPedanticParserDefaultValue = val;
+ return(old);
+}
+
+/**
+ * xmlLineNumbersDefault:
+ * @val: int 0 or 1
+ *
+ * Set and return the previous value for enabling line numbers in elements
+ * contents. This may break on old application and is turned off by default.
+ *
+ * Returns the last value for 0 for no substitution, 1 for substitution.
+ */
+
+int
+xmlLineNumbersDefault(int val) {
+ int old = xmlLineNumbersDefaultValue;
+
+ xmlLineNumbersDefaultValue = val;
+ return(old);
+}
+
+/**
+ * xmlSubstituteEntitiesDefault:
+ * @val: int 0 or 1
+ *
+ * Set and return the previous value for default entity support.
+ * Initially the parser always keep entity references instead of substituting
+ * entity values in the output. This function has to be used to change the
+ * default parser behavior
+ * SAX::substituteEntities() has to be used for changing that on a file by
+ * file basis.
+ *
+ * Returns the last value for 0 for no substitution, 1 for substitution.
+ */
+
+int
+xmlSubstituteEntitiesDefault(int val) {
+ int old = xmlSubstituteEntitiesDefaultValue;
+
+ xmlSubstituteEntitiesDefaultValue = val;
+ return(old);
+}
+
+/**
+ * xmlKeepBlanksDefault:
+ * @val: int 0 or 1
+ *
+ * Set and return the previous value for default blanks text nodes support.
+ * The 1.x version of the parser used an heuristic to try to detect
+ * ignorable white spaces. As a result the SAX callback was generating
+ * xmlSAX2IgnorableWhitespace() callbacks instead of characters() one, and when
+ * using the DOM output text nodes containing those blanks were not generated.
+ * The 2.x and later version will switch to the XML standard way and
+ * ignorableWhitespace() are only generated when running the parser in
+ * validating mode and when the current element doesn't allow CDATA or
+ * mixed content.
+ * This function is provided as a way to force the standard behavior
+ * on 1.X libs and to switch back to the old mode for compatibility when
+ * running 1.X client code on 2.X . Upgrade of 1.X code should be done
+ * by using xmlIsBlankNode() commodity function to detect the "empty"
+ * nodes generated.
+ * This value also affect autogeneration of indentation when saving code
+ * if blanks sections are kept, indentation is not generated.
+ *
+ * Returns the last value for 0 for no substitution, 1 for substitution.
+ */
+
+int
+xmlKeepBlanksDefault(int val) {
+ int old = xmlKeepBlanksDefaultValue;
+
+ xmlKeepBlanksDefaultValue = val;
+ xmlIndentTreeOutput = !val;
+ return(old);
+}
+
diff --git a/pattern.c b/pattern.c
new file mode 100644
index 0000000..36b4adf
--- /dev/null
+++ b/pattern.c
@@ -0,0 +1,933 @@
+/*
+ * pattern.c: Implemetation of selectors for nodes
+ *
+ * Reference:
+ * http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/
+ * to some extent
+ * http://www.w3.org/TR/1999/REC-xml-19991116
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/hash.h>
+#include <libxml/dict.h>
+#include <libxml/xmlerror.h>
+#include <libxml/parserInternals.h>
+#include <libxml/pattern.h>
+
+#ifdef LIBXML_PATTERN_ENABLED
+
+#define ERROR(a, b, c, d)
+#define ERROR5(a, b, c, d, e)
+
+/*
+ * Types are private:
+ */
+
+typedef enum {
+ XML_OP_END=0,
+ XML_OP_ROOT,
+ XML_OP_ELEM,
+ XML_OP_CHILD,
+ XML_OP_ATTR,
+ XML_OP_PARENT,
+ XML_OP_ANCESTOR,
+ XML_OP_NS,
+ XML_OP_ALL
+} xmlPatOp;
+
+
+typedef struct _xmlStepOp xmlStepOp;
+typedef xmlStepOp *xmlStepOpPtr;
+struct _xmlStepOp {
+ xmlPatOp op;
+ const xmlChar *value;
+ const xmlChar *value2;
+};
+
+struct _xmlPattern {
+ void *data; /* the associated template */
+ struct _xmlPattern *next; /* siblings */
+ const xmlChar *pattern; /* the pattern */
+
+ /* TODO fix the statically allocated size steps[] */
+ int nbStep;
+ int maxStep;
+ xmlStepOp steps[10]; /* ops for computation */
+};
+
+typedef struct _xmlPatParserContext xmlPatParserContext;
+typedef xmlPatParserContext *xmlPatParserContextPtr;
+struct _xmlPatParserContext {
+ const xmlChar *cur; /* the current char being parsed */
+ const xmlChar *base; /* the full expression */
+ int error; /* error code */
+ xmlDictPtr dict; /* the dictionnary if any */
+ xmlPatternPtr comp; /* the result */
+ xmlNodePtr elem; /* the current node if any */
+ const xmlChar **namespaces; /* the namespaces definitions */
+ int nb_namespaces; /* the number of namespaces */
+};
+
+/************************************************************************
+ * *
+ * Type functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlNewPattern:
+ *
+ * Create a new XSLT Pattern
+ *
+ * Returns the newly allocated xmlPatternPtr or NULL in case of error
+ */
+static xmlPatternPtr
+xmlNewPattern(void) {
+ xmlPatternPtr cur;
+
+ cur = (xmlPatternPtr) xmlMalloc(sizeof(xmlPattern));
+ if (cur == NULL) {
+ ERROR(NULL, NULL, NULL,
+ "xmlNewPattern : malloc failed\n");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlPattern));
+ cur->maxStep = 10;
+ return(cur);
+}
+
+/**
+ * xmlFreePattern:
+ * @comp: an XSLT comp
+ *
+ * Free up the memory allocated by @comp
+ */
+void
+xmlFreePattern(xmlPatternPtr comp) {
+ xmlStepOpPtr op;
+ int i;
+
+ if (comp == NULL)
+ return;
+ if (comp->pattern != NULL)
+ xmlFree((xmlChar *)comp->pattern);
+ for (i = 0;i < comp->nbStep;i++) {
+ op = &comp->steps[i];
+ if (op->value != NULL)
+ xmlFree((xmlChar *) op->value);
+ if (op->value2 != NULL)
+ xmlFree((xmlChar *) op->value2);
+ }
+ memset(comp, -1, sizeof(xmlPattern));
+ xmlFree(comp);
+}
+
+/**
+ * xmlFreePatternList:
+ * @comp: an XSLT comp list
+ *
+ * Free up the memory allocated by all the elements of @comp
+ */
+void
+xmlFreePatternList(xmlPatternPtr comp) {
+ xmlPatternPtr cur;
+
+ while (comp != NULL) {
+ cur = comp;
+ comp = comp->next;
+ xmlFreePattern(cur);
+ }
+}
+
+/**
+ * xmlNewPatParserContext:
+ * @pattern: the pattern context
+ * @dict: the inherited dictionnary or NULL
+ * @namespaces: the prefix definitions, array of [URI, prefix] or NULL
+ *
+ * Create a new XML pattern parser context
+ *
+ * Returns the newly allocated xmlPatParserContextPtr or NULL in case of error
+ */
+static xmlPatParserContextPtr
+xmlNewPatParserContext(const xmlChar *pattern, xmlDictPtr dict,
+ const xmlChar **namespaces) {
+ xmlPatParserContextPtr cur;
+
+ if (pattern == NULL)
+ return(NULL);
+
+ cur = (xmlPatParserContextPtr) xmlMalloc(sizeof(xmlPatParserContext));
+ if (cur == NULL) {
+ ERROR(NULL, NULL, NULL,
+ "xmlNewPatParserContext : malloc failed\n");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlPatParserContext));
+ cur->dict = dict;
+ cur->cur = pattern;
+ cur->base = pattern;
+ if (namespaces != NULL) {
+ int i;
+ for (i = 0;namespaces[2 * i] != NULL;i++);
+ cur->nb_namespaces = i;
+ } else {
+ cur->nb_namespaces = 0;
+ }
+ cur->namespaces = namespaces;
+ return(cur);
+}
+
+/**
+ * xmlFreePatParserContext:
+ * @ctxt: an XSLT parser context
+ *
+ * Free up the memory allocated by @ctxt
+ */
+static void
+xmlFreePatParserContext(xmlPatParserContextPtr ctxt) {
+ if (ctxt == NULL)
+ return;
+ memset(ctxt, -1, sizeof(xmlPatParserContext));
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlPatternAdd:
+ * @comp: the compiled match expression
+ * @op: an op
+ * @value: the first value
+ * @value2: the second value
+ *
+ * Add an step to an XSLT Compiled Match
+ *
+ * Returns -1 in case of failure, 0 otherwise.
+ */
+static int
+xmlPatternAdd(xmlPatParserContextPtr ctxt ATTRIBUTE_UNUSED,
+ xmlPatternPtr comp,
+ xmlPatOp op, xmlChar * value, xmlChar * value2)
+{
+ if (comp->nbStep >= 10) {
+ ERROR(ctxt, NULL, NULL,
+ "xmlPatternAdd: overflow\n");
+ return (-1);
+ }
+ comp->steps[comp->nbStep].op = op;
+ comp->steps[comp->nbStep].value = value;
+ comp->steps[comp->nbStep].value2 = value2;
+ comp->nbStep++;
+ return (0);
+}
+
+#if 0
+/**
+ * xsltSwapTopPattern:
+ * @comp: the compiled match expression
+ *
+ * reverse the two top steps.
+ */
+static void
+xsltSwapTopPattern(xmlPatternPtr comp) {
+ int i;
+ int j = comp->nbStep - 1;
+
+ if (j > 0) {
+ register const xmlChar *tmp;
+ register xmlPatOp op;
+ i = j - 1;
+ tmp = comp->steps[i].value;
+ comp->steps[i].value = comp->steps[j].value;
+ comp->steps[j].value = tmp;
+ tmp = comp->steps[i].value2;
+ comp->steps[i].value2 = comp->steps[j].value2;
+ comp->steps[j].value2 = tmp;
+ op = comp->steps[i].op;
+ comp->steps[i].op = comp->steps[j].op;
+ comp->steps[j].op = op;
+ }
+}
+#endif
+
+/**
+ * xmlReversePattern:
+ * @comp: the compiled match expression
+ *
+ * reverse all the stack of expressions
+ */
+static void
+xmlReversePattern(xmlPatternPtr comp) {
+ int i = 0;
+ int j = comp->nbStep - 1;
+
+ while (j > i) {
+ register const xmlChar *tmp;
+ register xmlPatOp op;
+ tmp = comp->steps[i].value;
+ comp->steps[i].value = comp->steps[j].value;
+ comp->steps[j].value = tmp;
+ tmp = comp->steps[i].value2;
+ comp->steps[i].value2 = comp->steps[j].value2;
+ comp->steps[j].value2 = tmp;
+ op = comp->steps[i].op;
+ comp->steps[i].op = comp->steps[j].op;
+ comp->steps[j].op = op;
+ j--;
+ i++;
+ }
+ comp->steps[comp->nbStep++].op = XML_OP_END;
+}
+
+/************************************************************************
+ * *
+ * The interpreter for the precompiled patterns *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlPatMatch:
+ * @comp: the precompiled pattern
+ * @node: a node
+ *
+ * Test wether the node matches the pattern
+ *
+ * Returns 1 if it matches, 0 if it doesn't and -1 in case of failure
+ */
+static int
+xmlPatMatch(xmlPatternPtr comp, xmlNodePtr node) {
+ int i;
+ xmlStepOpPtr step;
+
+ if ((comp == NULL) || (node == NULL)) return(-1);
+ for (i = 0;i < comp->nbStep;i++) {
+ step = &comp->steps[i];
+ switch (step->op) {
+ case XML_OP_END:
+ return(1);
+ case XML_OP_ROOT:
+ if ((node->type == XML_DOCUMENT_NODE) ||
+#ifdef LIBXML_DOCB_ENABLED
+ (node->type == XML_DOCB_DOCUMENT_NODE) ||
+#endif
+ (node->type == XML_HTML_DOCUMENT_NODE))
+ continue;
+ return(0);
+ case XML_OP_ELEM:
+ if (node->type != XML_ELEMENT_NODE)
+ return(0);
+ if (step->value == NULL)
+ continue;
+ if (step->value[0] != node->name[0])
+ return(0);
+ if (!xmlStrEqual(step->value, node->name))
+ return(0);
+
+ /* Namespace test */
+ if (node->ns == NULL) {
+ if (step->value2 != NULL)
+ return(0);
+ } else if (node->ns->href != NULL) {
+ if (step->value2 == NULL)
+ return(0);
+ if (!xmlStrEqual(step->value2, node->ns->href))
+ return(0);
+ }
+ continue;
+ case XML_OP_CHILD: {
+ xmlNodePtr lst;
+
+ if ((node->type != XML_ELEMENT_NODE) &&
+ (node->type != XML_DOCUMENT_NODE) &&
+#ifdef LIBXML_DOCB_ENABLED
+ (node->type != XML_DOCB_DOCUMENT_NODE) &&
+#endif
+ (node->type != XML_HTML_DOCUMENT_NODE))
+ return(0);
+
+ lst = node->children;
+
+ if (step->value != NULL) {
+ while (lst != NULL) {
+ if ((lst->type == XML_ELEMENT_NODE) &&
+ (step->value[0] == lst->name[0]) &&
+ (xmlStrEqual(step->value, lst->name)))
+ break;
+ lst = lst->next;
+ }
+ if (lst != NULL)
+ continue;
+ }
+ return(0);
+ }
+ case XML_OP_ATTR:
+ if (node->type != XML_ATTRIBUTE_NODE)
+ return(0);
+ if (step->value != NULL) {
+ if (step->value[0] != node->name[0])
+ return(0);
+ if (!xmlStrEqual(step->value, node->name))
+ return(0);
+ }
+ /* Namespace test */
+ if (node->ns == NULL) {
+ if (step->value2 != NULL)
+ return(0);
+ } else if (step->value2 != NULL) {
+ if (!xmlStrEqual(step->value2, node->ns->href))
+ return(0);
+ }
+ continue;
+ case XML_OP_PARENT:
+ if ((node->type == XML_DOCUMENT_NODE) ||
+ (node->type == XML_HTML_DOCUMENT_NODE) ||
+#ifdef LIBXML_DOCB_ENABLED
+ (node->type == XML_DOCB_DOCUMENT_NODE) ||
+#endif
+ (node->type == XML_NAMESPACE_DECL))
+ return(0);
+ node = node->parent;
+ if (node == NULL)
+ return(0);
+ if (step->value == NULL)
+ continue;
+ if (step->value[0] != node->name[0])
+ return(0);
+ if (!xmlStrEqual(step->value, node->name))
+ return(0);
+ /* Namespace test */
+ if (node->ns == NULL) {
+ if (step->value2 != NULL)
+ return(0);
+ } else if (node->ns->href != NULL) {
+ if (step->value2 == NULL)
+ return(0);
+ if (!xmlStrEqual(step->value2, node->ns->href))
+ return(0);
+ }
+ continue;
+ case XML_OP_ANCESTOR:
+ /* TODO: implement coalescing of ANCESTOR/NODE ops */
+ if (step->value == NULL) {
+ i++;
+ step = &comp->steps[i];
+ if (step->op == XML_OP_ROOT)
+ return(1);
+ if (step->op != XML_OP_ELEM)
+ return(0);
+ if (step->value == NULL)
+ return(-1);
+ }
+ if (node == NULL)
+ return(0);
+ if ((node->type == XML_DOCUMENT_NODE) ||
+ (node->type == XML_HTML_DOCUMENT_NODE) ||
+#ifdef LIBXML_DOCB_ENABLED
+ (node->type == XML_DOCB_DOCUMENT_NODE) ||
+#endif
+ (node->type == XML_NAMESPACE_DECL))
+ return(0);
+ node = node->parent;
+ while (node != NULL) {
+ if (node == NULL)
+ return(0);
+ if ((node->type == XML_ELEMENT_NODE) &&
+ (step->value[0] == node->name[0]) &&
+ (xmlStrEqual(step->value, node->name))) {
+ /* Namespace test */
+ if (node->ns == NULL) {
+ if (step->value2 == NULL)
+ break;
+ } else if (node->ns->href != NULL) {
+ if ((step->value2 != NULL) &&
+ (xmlStrEqual(step->value2, node->ns->href)))
+ break;
+ }
+ }
+ node = node->parent;
+ }
+ if (node == NULL)
+ return(0);
+ continue;
+ case XML_OP_NS:
+ if (node->type != XML_ELEMENT_NODE)
+ return(0);
+ if (node->ns == NULL) {
+ if (step->value != NULL)
+ return(0);
+ } else if (node->ns->href != NULL) {
+ if (step->value == NULL)
+ return(0);
+ if (!xmlStrEqual(step->value, node->ns->href))
+ return(0);
+ }
+ break;
+ case XML_OP_ALL:
+ if (node->type != XML_ELEMENT_NODE)
+ return(0);
+ break;
+ }
+ }
+ return(1);
+}
+
+/************************************************************************
+ * *
+ * Dedicated parser for templates *
+ * *
+ ************************************************************************/
+
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+#define CUR (*ctxt->cur)
+#define SKIP(val) ctxt->cur += (val)
+#define NXT(val) ctxt->cur[(val)]
+#define CUR_PTR ctxt->cur
+
+#define SKIP_BLANKS \
+ while (IS_BLANK_CH(CUR)) NEXT
+
+#define CURRENT (*ctxt->cur)
+#define NEXT ((*ctxt->cur) ? ctxt->cur++: ctxt->cur)
+
+
+#define PUSH(op, val, val2) \
+ if (xmlPatternAdd(ctxt, ctxt->comp, (op), (val), (val2))) goto error;
+
+#define XSLT_ERROR(X) \
+ { xsltError(ctxt, __FILE__, __LINE__, X); \
+ ctxt->error = (X); return; }
+
+#define XSLT_ERROR0(X) \
+ { xsltError(ctxt, __FILE__, __LINE__, X); \
+ ctxt->error = (X); return(0); }
+
+#if 0
+/**
+ * xmlPatScanLiteral:
+ * @ctxt: the XPath Parser context
+ *
+ * Parse an XPath Litteral:
+ *
+ * [29] Literal ::= '"' [^"]* '"'
+ * | "'" [^']* "'"
+ *
+ * Returns the Literal parsed or NULL
+ */
+
+static xmlChar *
+xmlPatScanLiteral(xmlPatParserContextPtr ctxt) {
+ const xmlChar *q, *cur;
+ xmlChar *ret = NULL;
+ int val, len;
+
+ SKIP_BLANKS;
+ if (CUR == '"') {
+ NEXT;
+ cur = q = CUR_PTR;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ while ((IS_CHAR(val)) && (val != '"')) {
+ cur += len;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ }
+ if (!IS_CHAR(val)) {
+ ctxt->error = 1;
+ return(NULL);
+ } else {
+ ret = xmlStrndup(q, cur - q);
+ }
+ cur += len;
+ CUR_PTR = cur;
+ } else if (CUR == '\'') {
+ NEXT;
+ cur = q = CUR_PTR;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ while ((IS_CHAR(val)) && (val != '\'')) {
+ cur += len;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ }
+ if (!IS_CHAR(val)) {
+ ctxt->error = 1;
+ return(NULL);
+ } else {
+ ret = xmlStrndup(q, cur - q);
+ }
+ cur += len;
+ CUR_PTR = cur;
+ } else {
+ /* XP_ERROR(XPATH_START_LITERAL_ERROR); */
+ ctxt->error = 1;
+ return(NULL);
+ }
+ return(ret);
+}
+#endif
+
+/**
+ * xmlPatScanName:
+ * @ctxt: the XPath Parser context
+ *
+ * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' |
+ * CombiningChar | Extender
+ *
+ * [5] Name ::= (Letter | '_' | ':') (NameChar)*
+ *
+ * [6] Names ::= Name (S Name)*
+ *
+ * Returns the Name parsed or NULL
+ */
+
+static xmlChar *
+xmlPatScanName(xmlPatParserContextPtr ctxt) {
+ const xmlChar *q, *cur;
+ xmlChar *ret = NULL;
+ int val, len;
+
+ SKIP_BLANKS;
+
+ cur = q = CUR_PTR;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ if (!IS_LETTER(val) && (val != '_') && (val != ':'))
+ return(NULL);
+
+ while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
+ (val == '.') || (val == '-') ||
+ (val == '_') ||
+ (IS_COMBINING(val)) ||
+ (IS_EXTENDER(val))) {
+ cur += len;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ }
+ ret = xmlStrndup(q, cur - q);
+ CUR_PTR = cur;
+ return(ret);
+}
+
+/**
+ * xmlPatScanNCName:
+ * @ctxt: the XPath Parser context
+ *
+ * Parses a non qualified name
+ *
+ * Returns the Name parsed or NULL
+ */
+
+static xmlChar *
+xmlPatScanNCName(xmlPatParserContextPtr ctxt) {
+ const xmlChar *q, *cur;
+ xmlChar *ret = NULL;
+ int val, len;
+
+ SKIP_BLANKS;
+
+ cur = q = CUR_PTR;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ if (!IS_LETTER(val) && (val != '_'))
+ return(NULL);
+
+ while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
+ (val == '.') || (val == '-') ||
+ (val == '_') ||
+ (IS_COMBINING(val)) ||
+ (IS_EXTENDER(val))) {
+ cur += len;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ }
+ ret = xmlStrndup(q, cur - q);
+ CUR_PTR = cur;
+ return(ret);
+}
+
+#if 0
+/**
+ * xmlPatScanQName:
+ * @ctxt: the XPath Parser context
+ * @prefix: the place to store the prefix
+ *
+ * Parse a qualified name
+ *
+ * Returns the Name parsed or NULL
+ */
+
+static xmlChar *
+xmlPatScanQName(xmlPatParserContextPtr ctxt, xmlChar **prefix) {
+ xmlChar *ret = NULL;
+
+ *prefix = NULL;
+ ret = xmlPatScanNCName(ctxt);
+ if (CUR == ':') {
+ *prefix = ret;
+ NEXT;
+ ret = xmlPatScanNCName(ctxt);
+ }
+ return(ret);
+}
+#endif
+
+/**
+ * xmlCompileStepPattern:
+ * @ctxt: the compilation context
+ *
+ * Compile the Step Pattern and generates a precompiled
+ * form suitable for fast matching.
+ *
+ * [3] Step ::= '.' | NameTest
+ * [4] NameTest ::= QName | '*' | NCName ':' '*'
+ */
+
+static void
+xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
+ xmlChar *token = NULL;
+ xmlChar *name = NULL;
+ const xmlChar *URI = NULL;
+ xmlChar *URL = NULL;
+
+ SKIP_BLANKS;
+ if (CUR == '.') {
+ NEXT;
+ PUSH(XML_OP_ELEM, NULL, NULL);
+ return;
+ }
+ name = xmlPatScanNCName(ctxt);
+ if (name == NULL) {
+ if (CUR == '*') {
+ NEXT;
+ PUSH(XML_OP_ALL, NULL, NULL);
+ return;
+ } else {
+ ERROR(NULL, NULL, NULL,
+ "xmlCompileStepPattern : Name expected\n");
+ ctxt->error = 1;
+ return;
+ }
+ }
+ SKIP_BLANKS;
+ if (CUR == ':') {
+ NEXT;
+ if (CUR != ':') {
+ xmlChar *prefix = name;
+ xmlNsPtr ns;
+
+ /*
+ * This is a namespace match
+ */
+ token = xmlPatScanName(ctxt);
+ ns = xmlSearchNs(NULL, ctxt->elem, prefix);
+ if (ns == NULL) {
+ ERROR5(NULL, NULL, NULL,
+ "xmlCompileStepPattern : no namespace bound to prefix %s\n",
+ prefix);
+ ctxt->error = 1;
+ goto error;
+ } else {
+ URL = xmlStrdup(ns->href);
+ }
+ xmlFree(prefix);
+ if (token == NULL) {
+ if (CUR == '*') {
+ NEXT;
+ PUSH(XML_OP_NS, URL, NULL);
+ } else {
+ ERROR(NULL, NULL, NULL,
+ "xmlCompileStepPattern : Name expected\n");
+ ctxt->error = 1;
+ goto error;
+ }
+ } else {
+ PUSH(XML_OP_ELEM, token, URL);
+ }
+ } else {
+ NEXT;
+ if (xmlStrEqual(token, (const xmlChar *) "child")) {
+ xmlFree(token);
+ token = xmlPatScanName(ctxt);
+ if (token == NULL) {
+ if (CUR == '*') {
+ NEXT;
+ PUSH(XML_OP_ALL, token, NULL);
+ return;
+ } else {
+ ERROR(NULL, NULL, NULL,
+ "xmlCompileStepPattern : QName expected\n");
+ ctxt->error = 1;
+ goto error;
+ }
+ }
+ TODO
+ /* URI = xsltGetQNameURI(ctxt->elem, &token); */
+ if (token == NULL) {
+ ctxt->error = 1;
+ goto error;
+ } else {
+ name = xmlStrdup(token);
+ if (URI != NULL)
+ URL = xmlStrdup(URI);
+ }
+ PUSH(XML_OP_CHILD, name, URL);
+ } else if (xmlStrEqual(token, (const xmlChar *) "attribute")) {
+ xmlFree(token);
+ token = xmlPatScanName(ctxt);
+ if (token == NULL) {
+ ERROR(NULL, NULL, NULL,
+ "xmlCompileStepPattern : QName expected\n");
+ ctxt->error = 1;
+ goto error;
+ }
+ TODO
+ /* URI = xsltGetQNameURI(ctxt->elem, &token); */
+ if (token == NULL) {
+ ctxt->error = 1;
+ goto error;
+ } else {
+ name = xmlStrdup(token);
+ if (URI != NULL)
+ URL = xmlStrdup(URI);
+ }
+ PUSH(XML_OP_ATTR, name, URL);
+ } else {
+ ERROR(NULL, NULL, NULL,
+ "xmlCompileStepPattern : 'child' or 'attribute' expected\n");
+ ctxt->error = 1;
+ goto error;
+ }
+ xmlFree(token);
+ }
+ } else if (CUR == '*') {
+ NEXT;
+ PUSH(XML_OP_ALL, token, NULL);
+ } else {
+ if (name == NULL) {
+ ctxt->error = 1;
+ goto error;
+ }
+ PUSH(XML_OP_ELEM, name, NULL);
+ }
+ return;
+error:
+ if (token != NULL)
+ xmlFree(token);
+ if (name != NULL)
+ xmlFree(name);
+}
+
+/**
+ * xmlCompilePathPattern:
+ * @ctxt: the compilation context
+ *
+ * Compile the Path Pattern and generates a precompiled
+ * form suitable for fast matching.
+ *
+ * [5] Path ::= ('.//')? ( Step '/' )* ( Step | '@' NameTest )
+ */
+static void
+xmlCompilePathPattern(xmlPatParserContextPtr ctxt) {
+ SKIP_BLANKS;
+ if ((CUR == '/') && (NXT(1) == '/')) {
+ /*
+ * since we reverse the query
+ * a leading // can be safely ignored
+ */
+ NEXT;
+ NEXT;
+ } else if ((CUR == '.') && (NXT(1) == '/') && (NXT(2) == '/')) {
+ /*
+ * a leading .// can be safely ignored
+ */
+ NEXT;
+ NEXT;
+ NEXT;
+ }
+ if (CUR == '@') {
+ TODO
+ } else {
+ xmlCompileStepPattern(ctxt);
+ SKIP_BLANKS;
+ while (CUR == '/') {
+ if ((CUR == '/') && (NXT(1) == '/')) {
+ PUSH(XML_OP_ANCESTOR, NULL, NULL);
+ NEXT;
+ NEXT;
+ SKIP_BLANKS;
+ xmlCompileStepPattern(ctxt);
+ } else {
+ PUSH(XML_OP_PARENT, NULL, NULL);
+ NEXT;
+ SKIP_BLANKS;
+ if ((CUR != 0) || (CUR == '|')) {
+ xmlCompileStepPattern(ctxt);
+ }
+ }
+ }
+ }
+error:
+ return;
+}
+/************************************************************************
+ * *
+ * The public interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlPatterncompile:
+ * @pattern: the pattern to compile
+ * @dict: an optional dictionnary for interned strings
+ * @flags: compilation flags, undefined yet
+ * @namespaces: the prefix definitions, array of [URI, prefix] or NULL
+ *
+ * Compile a pattern.
+ *
+ * Returns the compiled for of the pattern or NULL in case of error
+ */
+xmlPatternPtr
+xmlPatterncompile(const xmlChar *pattern, xmlDict *dict,
+ int flags ATTRIBUTE_UNUSED,
+ const xmlChar **namespaces) {
+ xmlPatternPtr ret = NULL;
+ xmlPatParserContextPtr ctxt = NULL;
+
+ ctxt = xmlNewPatParserContext(pattern, dict, namespaces);
+ if (ctxt == NULL) goto error;
+ ret = xmlNewPattern();
+ if (ret == NULL) goto error;
+ ctxt->comp = ret;
+
+ xmlCompilePathPattern(ctxt);
+ xmlFreePatParserContext(ctxt);
+
+ xmlReversePattern(ret);
+ return(ret);
+error:
+ if (ctxt != NULL) xmlFreePatParserContext(ctxt);
+ if (ret != NULL) xmlFreePattern(ret);
+ return(NULL);
+}
+
+/**
+ * xmlPatternMatch:
+ * @comp: the precompiled pattern
+ * @node: a node
+ *
+ * Test wether the node matches the pattern
+ *
+ * Returns 1 if it matches, 0 if it doesn't and -1 in case of failure
+ */
+int
+xmlPatternMatch(xmlPatternPtr comp, xmlNodePtr node)
+{
+ if ((comp == NULL) || (node == NULL))
+ return(-1);
+ return(xmlPatMatch(comp, node));
+}
+
+#endif /* LIBXML_PATTERN_ENABLED */
diff --git a/python/Makefile.am b/python/Makefile.am
new file mode 100644
index 0000000..8782efb
--- /dev/null
+++ b/python/Makefile.am
@@ -0,0 +1,73 @@
+# Makefile for libxml2 python library
+AUTOMAKE_OPTIONS = 1.4 foreign
+
+SUBDIRS= . tests
+
+INCLUDES = \
+ -I$(PYTHON_INCLUDES) \
+ -I$(top_srcdir)/include
+
+DOCS_DIR = $(datadir)/doc/libxml2-python-$(LIBXML_VERSION)
+# libxml2class.txt is generated
+DOCS = ${srcdir}/TODO
+
+EXTRA_DIST = \
+ libxml.c \
+ types.c \
+ setup.py \
+ setup.py.in \
+ generator.py \
+ libxml_wrap.h \
+ libxml.py \
+ drv_libxml2.py \
+ libxml2-python-api.xml \
+ $(DOCS)
+
+libxml2mod_la_LDFLAGS = -module -avoid-version -L$(top_builddir)/.libs
+
+if WITH_PYTHON
+mylibs = \
+ $(top_builddir)/libxml2.la
+
+all-local: libxml2.py
+
+python_LTLIBRARIES = libxml2mod.la
+
+libxml2mod_la_SOURCES = libxml.c types.c libxml2-py.c
+libxml2mod_la_LIBADD = $(mylibs)
+
+libxml2.py: $(srcdir)/libxml.py $(srcdir)/libxml2class.py
+ cat $(srcdir)/libxml.py $(srcdir)/libxml2class.py > libxml2.py
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(pythondir)
+ @INSTALL@ -m 0644 libxml2.py $(DESTDIR)$(pythondir)
+ @INSTALL@ -m 0644 $(srcdir)/drv_libxml2.py $(DESTDIR)$(pythondir)
+ $(mkinstalldirs) $(DESTDIR)$(DOCS_DIR)
+ @(for doc in $(DOCS) ; \
+ do @INSTALL@ -m 0644 $$doc $(DESTDIR)$(DOCS_DIR) ; done)
+
+GENERATE = generator.py
+API_DESC = $(top_srcdir)/doc/libxml2-api.xml $(srcdir)/libxml2-python-api.xml
+GENERATED= $(srcdir)/libxml2class.py \
+ $(srcdir)/libxml2-export.c \
+ $(srcdir)/libxml2-py.c \
+ $(srcdir)/libxml2-py.h
+
+$(GENERATED): gen_prog
+
+gen_prog: $(srcdir)/$(GENERATE) $(API_DESC)
+ cd $(srcdir) && $(PYTHON) $(GENERATE)
+ touch gen_prog
+
+$(libxml2mod_la_OBJECTS): $(GENERATED)
+
+else
+all:
+endif
+tests test: all
+ cd tests && $(MAKE) tests
+
+clean:
+ rm -f $(GENERATED) *.o _libxml.so *.pyc libxml2.py gen_prog
+
diff --git a/python/Makefile.in b/python/Makefile.in
new file mode 100644
index 0000000..c6684bd
--- /dev/null
+++ b/python/Makefile.in
@@ -0,0 +1,709 @@
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+SOURCES = $(libxml2mod_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = python
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/setup.py.in TODO
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = setup.py
+am__installdirs = $(DESTDIR)$(pythondir)
+pythonLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(python_LTLIBRARIES)
+@WITH_PYTHON_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/libxml2.la
+@WITH_PYTHON_TRUE@libxml2mod_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__libxml2mod_la_SOURCES_DIST = libxml.c types.c libxml2-py.c
+@WITH_PYTHON_TRUE@am_libxml2mod_la_OBJECTS = libxml.lo types.lo \
+@WITH_PYTHON_TRUE@ libxml2-py.lo
+libxml2mod_la_OBJECTS = $(am_libxml2mod_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/libxml.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/libxml2-py.Plo ./$(DEPDIR)/types.Plo
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libxml2mod_la_SOURCES)
+DIST_SOURCES = $(am__libxml2mod_la_SOURCES_DIST)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+C14N_OBJ = @C14N_OBJ@
+CATALOG_OBJ = @CATALOG_OBJ@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_OBJ = @DEBUG_OBJ@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOCB_OBJ = @DOCB_OBJ@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FTP_OBJ = @FTP_OBJ@
+HAVE_ISINF = @HAVE_ISINF@
+HAVE_ISNAN = @HAVE_ISNAN@
+HTML_DIR = @HTML_DIR@
+HTML_OBJ = @HTML_OBJ@
+HTTP_OBJ = @HTTP_OBJ@
+ICONV_LIBS = @ICONV_LIBS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
+LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
+LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
+LIBXML_VERSION = @LIBXML_VERSION@
+LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
+LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MV = @MV@
+M_LIBS = @M_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATTERN_TEST = @PATTERN_TEST@
+PYTHON = @PYTHON@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
+PYTHON_SUBDIR = @PYTHON_SUBDIR@
+PYTHON_TESTS = @PYTHON_TESTS@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RDL_LIBS = @RDL_LIBS@
+READER_TEST = @READER_TEST@
+RELDATE = @RELDATE@
+RM = @RM@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STATIC_BINARIES = @STATIC_BINARIES@
+STRIP = @STRIP@
+TAR = @TAR@
+TEST_C14N = @TEST_C14N@
+TEST_CATALOG = @TEST_CATALOG@
+TEST_DEBUG = @TEST_DEBUG@
+TEST_HTML = @TEST_HTML@
+TEST_PHTML = @TEST_PHTML@
+TEST_PUSH = @TEST_PUSH@
+TEST_REGEXPS = @TEST_REGEXPS@
+TEST_SAX = @TEST_SAX@
+TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_THREADS = @TEST_THREADS@
+TEST_VALID = @TEST_VALID@
+TEST_VTIME = @TEST_VTIME@
+TEST_XINCLUDE = @TEST_XINCLUDE@
+TEST_XPATH = @TEST_XPATH@
+TEST_XPTR = @TEST_XPTR@
+THREADS_W32 = @THREADS_W32@
+THREAD_CFLAGS = @THREAD_CFLAGS@
+THREAD_LIBS = @THREAD_LIBS@
+U = @U@
+VERSION = @VERSION@
+WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
+WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
+WITH_C14N = @WITH_C14N@
+WITH_CATALOG = @WITH_CATALOG@
+WITH_DEBUG = @WITH_DEBUG@
+WITH_DOCB = @WITH_DOCB@
+WITH_FTP = @WITH_FTP@
+WITH_HTML = @WITH_HTML@
+WITH_HTTP = @WITH_HTTP@
+WITH_ICONV = @WITH_ICONV@
+WITH_ISO8859X = @WITH_ISO8859X@
+WITH_LEGACY = @WITH_LEGACY@
+WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
+WITH_OUTPUT = @WITH_OUTPUT@
+WITH_PATTERN = @WITH_PATTERN@
+WITH_PUSH = @WITH_PUSH@
+WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
+WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
+WITH_READER = @WITH_READER@
+WITH_REGEXPS = @WITH_REGEXPS@
+WITH_SAX1 = @WITH_SAX1@
+WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_THREADS = @WITH_THREADS@
+WITH_TREE = @WITH_TREE@
+WITH_TRIO = @WITH_TRIO@
+WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
+WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
+WITH_VALID = @WITH_VALID@
+WITH_WRITER = @WITH_WRITER@
+WITH_XINCLUDE = @WITH_XINCLUDE@
+WITH_XPATH = @WITH_XPATH@
+WITH_XPTR = @WITH_XPTR@
+XINCLUDE_OBJ = @XINCLUDE_OBJ@
+XML_CFLAGS = @XML_CFLAGS@
+XML_INCLUDEDIR = @XML_INCLUDEDIR@
+XML_LIBDIR = @XML_LIBDIR@
+XML_LIBS = @XML_LIBS@
+XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
+XPATH_OBJ = @XPATH_OBJ@
+XPTR_OBJ = @XPTR_OBJ@
+Z_CFLAGS = @Z_CFLAGS@
+Z_LIBS = @Z_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+# Makefile for libxml2 python library
+AUTOMAKE_OPTIONS = 1.4 foreign
+SUBDIRS = . tests
+INCLUDES = \
+ -I$(PYTHON_INCLUDES) \
+ -I$(top_srcdir)/include
+
+DOCS_DIR = $(datadir)/doc/libxml2-python-$(LIBXML_VERSION)
+# libxml2class.txt is generated
+DOCS = ${srcdir}/TODO
+EXTRA_DIST = \
+ libxml.c \
+ types.c \
+ setup.py \
+ setup.py.in \
+ generator.py \
+ libxml_wrap.h \
+ libxml.py \
+ drv_libxml2.py \
+ libxml2-python-api.xml \
+ $(DOCS)
+
+libxml2mod_la_LDFLAGS = -module -avoid-version -L$(top_builddir)/.libs
+@WITH_PYTHON_TRUE@mylibs = \
+@WITH_PYTHON_TRUE@ $(top_builddir)/libxml2.la
+
+@WITH_PYTHON_TRUE@python_LTLIBRARIES = libxml2mod.la
+@WITH_PYTHON_TRUE@libxml2mod_la_SOURCES = libxml.c types.c libxml2-py.c
+@WITH_PYTHON_TRUE@libxml2mod_la_LIBADD = $(mylibs)
+@WITH_PYTHON_TRUE@GENERATE = generator.py
+@WITH_PYTHON_TRUE@API_DESC = $(top_srcdir)/doc/libxml2-api.xml $(srcdir)/libxml2-python-api.xml
+@WITH_PYTHON_TRUE@GENERATED = $(srcdir)/libxml2class.py \
+@WITH_PYTHON_TRUE@ $(srcdir)/libxml2-export.c \
+@WITH_PYTHON_TRUE@ $(srcdir)/libxml2-py.c \
+@WITH_PYTHON_TRUE@ $(srcdir)/libxml2-py.h
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign python/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign python/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+setup.py: $(top_builddir)/config.status $(srcdir)/setup.py.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-pythonLTLIBRARIES: $(python_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(pythondir)
+ @list='$(python_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(LIBTOOL) --mode=install $(pythonLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(pythondir)/$$f"; \
+ $(LIBTOOL) --mode=install $(pythonLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(pythondir)/$$f; \
+ else :; fi; \
+ done
+
+uninstall-pythonLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(python_LTLIBRARIES)'; for p in $$list; do \
+ p="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(pythondir)/$$p"; \
+ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(pythondir)/$$p; \
+ done
+
+clean-pythonLTLIBRARIES:
+ -test -z "$(python_LTLIBRARIES)" || rm -f $(python_LTLIBRARIES)
+ @list='$(python_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" = "$$p" && dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libxml2mod.la: $(libxml2mod_la_OBJECTS) $(libxml2mod_la_DEPENDENCIES)
+ $(LINK) -rpath $(pythondir) $(libxml2mod_la_LDFLAGS) $(libxml2mod_la_OBJECTS) $(libxml2mod_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libxml.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libxml2-py.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/types.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if (etags --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ else \
+ include_option=--include; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(mkdir_p) $(distdir)/${srcdir}
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || mkdir "$(distdir)/$$subdir" \
+ || exit 1; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="../$(top_distdir)" \
+ distdir="../$(distdir)/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) all-local
+installdirs: installdirs-recursive
+installdirs-am:
+ $(mkdir_p) $(DESTDIR)$(pythondir)
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libtool clean-pythonLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-data-local install-pythonLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-pythonLTLIBRARIES
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-local check \
+ check-am clean clean-generic clean-libtool \
+ clean-pythonLTLIBRARIES clean-recursive ctags ctags-recursive \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-recursive distclean-tags distdir \
+ dvi dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-pythonLTLIBRARIES install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am uninstall-info-am \
+ uninstall-pythonLTLIBRARIES
+
+
+@WITH_PYTHON_TRUE@all-local: libxml2.py
+
+@WITH_PYTHON_TRUE@libxml2.py: $(srcdir)/libxml.py $(srcdir)/libxml2class.py
+@WITH_PYTHON_TRUE@ cat $(srcdir)/libxml.py $(srcdir)/libxml2class.py > libxml2.py
+
+@WITH_PYTHON_TRUE@install-data-local:
+@WITH_PYTHON_TRUE@ $(mkinstalldirs) $(DESTDIR)$(pythondir)
+@WITH_PYTHON_TRUE@ @INSTALL@ -m 0644 libxml2.py $(DESTDIR)$(pythondir)
+@WITH_PYTHON_TRUE@ @INSTALL@ -m 0644 $(srcdir)/drv_libxml2.py $(DESTDIR)$(pythondir)
+@WITH_PYTHON_TRUE@ $(mkinstalldirs) $(DESTDIR)$(DOCS_DIR)
+@WITH_PYTHON_TRUE@ @(for doc in $(DOCS) ; \
+@WITH_PYTHON_TRUE@ do @INSTALL@ -m 0644 $$doc $(DESTDIR)$(DOCS_DIR) ; done)
+
+@WITH_PYTHON_TRUE@$(GENERATED): gen_prog
+
+@WITH_PYTHON_TRUE@gen_prog: $(srcdir)/$(GENERATE) $(API_DESC)
+@WITH_PYTHON_TRUE@ cd $(srcdir) && $(PYTHON) $(GENERATE)
+@WITH_PYTHON_TRUE@ touch gen_prog
+
+@WITH_PYTHON_TRUE@$(libxml2mod_la_OBJECTS): $(GENERATED)
+
+@WITH_PYTHON_FALSE@all:
+tests test: all
+ cd tests && $(MAKE) tests
+
+clean:
+ rm -f $(GENERATED) *.o _libxml.so *.pyc libxml2.py gen_prog
+# 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/python/README b/python/README
new file mode 100644
index 0000000..b46eee4
--- /dev/null
+++ b/python/README
@@ -0,0 +1,34 @@
+ Module libxml2-python
+ =====================
+
+This is the libxml2 python module, providing access to the
+libxml2 and libxslt (if available) libraries. For general
+informationss on those XML and XSLT libraries check their
+web pages at :
+ http://xmlsoft.org/
+ and
+ http://xmlsoft.org/XSLT/
+
+The latest version of the sources for this module and the
+associated libraries can be found at:
+ ftp://xmlsoft.org/
+
+Binaries packages of the libxml2 and libxslt libraries can
+be found either on the FTP site for Linux, from external
+sources linked from the web pages, or as part of your set of
+packages provided with your operating system.
+
+NOTE:
+this module distribution is not the primary distribution
+of the libxml2 and libxslt Python binding code, but as
+the Python way of packaging those for non-Linux systems.
+The main sources are the libxml2 and libxslt tar.gz found on
+the site. One side effect is that the official RPM packages for
+those modules are not generated from the libxml2-python
+distributions but as part of the normal RPM packaging of
+those two libraries.
+The RPM packages can be found at:
+ http://rpmfind.net/linux/rpm2html/search.php?query=libxml2-python
+ http://rpmfind.net/linux/rpm2html/search.php?query=libxslt-python
+
+Daniel Veillard
diff --git a/python/TODO b/python/TODO
new file mode 100644
index 0000000..ae3e74d
--- /dev/null
+++ b/python/TODO
@@ -0,0 +1,57 @@
+ TODO for the libxml2 Python wrappers
+
+ $Id: TODO,v 1.8 2002/02/06 16:06:57 veillard Exp $
+
+Things to do:
+-------------
+
+- SAX interfaces
+ - push is done but no generic interface
+ - elementDecl need some work
+ - need more testing and check full callbacks for xmllib/sgmlop replacement
+- enums -> libxml.py
+- access to XPath variables
+- xmlBuffer exposure
+- xpathContext, being able to set/get info and clean it up
+- more work needed on context handling for function lookup
+ and use of an hash table.
+- add regression tests
+ - SAX flow
+- DTD element and attributes content accesses
+ - attribute handled in SAX
+ - element needed in both
+
+
+Done:
+-----
+- class hierarchy:
+ + make specific node type inherit from xmlNode
+ done, had to sort the classes in the output
+ + get the generator to output a classes.txt description
+ done libxml2class.txt
+- add regression tests
+ - tests/Makefile.am: export the Python class path
+ - xpath queries
+ - xpath extension
+ - check memory
+ - build tree
+ - saving
+- extensions based on a python.xml description of the new specific
+ interfaces
+ file libxml2-python-api.xml , first entry is xmlRegisterXPathFunction
+- spec file: automatically generate for pythonX.Y if found
+ Done, a bit ugly by running new makes in %install for each level
+ found.
+- error redirections and preformat
+- handling of node.content
+- access to xmlParserCtxt and push mode
+ - needed for SAX too
+ - entry points
+ - wrappers
+ - decent interface for setting/getting behaviour
+- memory debug interfaces
+- SAX interfaces
+ - basic stuff with push is available
+ - basic xmllib replacement
+
+Daniel Veillard
diff --git a/python/drv_libxml2.py b/python/drv_libxml2.py
new file mode 100644
index 0000000..977c868
--- /dev/null
+++ b/python/drv_libxml2.py
@@ -0,0 +1,370 @@
+""" A SAX2 driver for libxml2, on top of it's XmlReader API
+
+USAGE
+ # put this file (drv_libxml2.py) in PYTHONPATH
+ import xml.sax
+ reader = xml.sax.make_parser(["drv_libxml2"])
+ # ...and the rest is standard python sax.
+
+CAVEATS
+ - Lexical handlers are supported, except for start/endEntity
+ (waiting for XmlReader.ResolveEntity) and start/endDTD
+ - Error callbacks are not exactly synchronous, they tend
+ to be invoked before the corresponding content callback,
+ because the underlying reader interface parses
+ data by chunks of 512 bytes
+
+TODO
+ - search for TODO
+ - some ErrorHandler events (warning)
+ - some ContentHandler events (setDocumentLocator, skippedEntity)
+ - EntityResolver (using libxml2.?)
+ - DTDHandler (if/when libxml2 exposes such node types)
+ - DeclHandler (if/when libxml2 exposes such node types)
+ - property_xml_string?
+ - feature_string_interning?
+ - Incremental parser
+ - additional performance tuning:
+ - one might cache callbacks to avoid some name lookups
+ - one might implement a smarter way to pass attributes to startElement
+ (some kind of lazy evaluation?)
+ - there might be room for improvement in start/endPrefixMapping
+ - other?
+
+"""
+
+__author__ = u"Stéphane Bidoul <sbi@skynet.be>"
+__version__ = "0.3"
+
+import codecs
+import sys
+from types import StringType, UnicodeType
+StringTypes = (StringType,UnicodeType)
+
+from xml.sax._exceptions import *
+from xml.sax import xmlreader, saxutils
+from xml.sax.handler import \
+ feature_namespaces, \
+ feature_namespace_prefixes, \
+ feature_string_interning, \
+ feature_validation, \
+ feature_external_ges, \
+ feature_external_pes, \
+ property_lexical_handler, \
+ property_declaration_handler, \
+ property_dom_node, \
+ property_xml_string
+
+# libxml2 returns strings as UTF8
+_decoder = codecs.lookup("utf8")[1]
+def _d(s):
+ if s is None:
+ return s
+ else:
+ return _decoder(s)[0]
+
+try:
+ import libxml2
+except ImportError, e:
+ raise SAXReaderNotAvailable("libxml2 not available: " \
+ "import error was: %s" % e)
+
+class Locator(xmlreader.Locator):
+ """SAX Locator adapter for libxml2.xmlTextReaderLocator"""
+
+ def __init__(self,locator):
+ self.__locator = locator
+
+ def getColumnNumber(self):
+ "Return the column number where the current event ends."
+ return -1
+
+ def getLineNumber(self):
+ "Return the line number where the current event ends."
+ return self.__locator.LineNumber()
+
+ def getPublicId(self):
+ "Return the public identifier for the current event."
+ return None
+
+ def getSystemId(self):
+ "Return the system identifier for the current event."
+ return self.__locator.BaseURI()
+
+class LibXml2Reader(xmlreader.XMLReader):
+
+ def __init__(self):
+ xmlreader.XMLReader.__init__(self)
+ # features
+ self.__ns = 0
+ self.__nspfx = 0
+ self.__validate = 0
+ # parsing flag
+ self.__parsing = 0
+ # additional handlers
+ self.__lex_handler = None
+ self.__decl_handler = None
+ # error messages accumulator
+ self.__errors = None
+
+ def _errorHandler(self,arg,msg,severity,locator):
+ if self.__errors is None:
+ self.__errors = []
+ self.__errors.append((severity,
+ SAXParseException(msg,None,
+ Locator(locator))))
+
+ def _reportErrors(self,fatal):
+ for severity,exception in self.__errors:
+ if severity in (libxml2.PARSER_SEVERITY_VALIDITY_WARNING,
+ libxml2.PARSER_SEVERITY_WARNING):
+ self._err_handler.warning(exception)
+ else:
+ # when fatal is set, the parse will stop;
+ # we consider that the last error reported
+ # is the fatal one.
+ if fatal and exception is self.__errors[-1][1]:
+ self._err_handler.fatalError(exception)
+ else:
+ self._err_handler.error(exception)
+ self.__errors = None
+
+ def parse(self, source):
+ self.__parsing = 1
+ try:
+ # prepare source and create reader
+ if type(source) in StringTypes:
+ reader = libxml2.newTextReaderFilename(source)
+ else:
+ source = saxutils.prepare_input_source(source)
+ input = libxml2.inputBuffer(source.getByteStream())
+ reader = input.newTextReader(source.getSystemId())
+ reader.SetErrorHandler(self._errorHandler,None)
+ # configure reader
+ reader.SetParserProp(libxml2.PARSER_LOADDTD,1)
+ reader.SetParserProp(libxml2.PARSER_DEFAULTATTRS,1)
+ reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)
+ reader.SetParserProp(libxml2.PARSER_VALIDATE,self.__validate)
+ # we reuse attribute maps (for a slight performance gain)
+ if self.__ns:
+ attributesNSImpl = xmlreader.AttributesNSImpl({},{})
+ else:
+ attributesImpl = xmlreader.AttributesImpl({})
+ # prefixes to pop (for endPrefixMapping)
+ prefixes = []
+ # start loop
+ self._cont_handler.startDocument()
+ while 1:
+ r = reader.Read()
+ # check for errors
+ if r == 1:
+ if not self.__errors is None:
+ self._reportErrors(0)
+ elif r == 0:
+ if not self.__errors is None:
+ self._reportErrors(0)
+ break # end of parse
+ else:
+ if not self.__errors is None:
+ self._reportErrors(1)
+ else:
+ self._err_handler.fatalError(\
+ SAXException("Read failed (no details available)"))
+ break # fatal parse error
+ # get node type
+ nodeType = reader.NodeType()
+ # Element
+ if nodeType == 1:
+ if self.__ns:
+ eltName = (_d(reader.NamespaceUri()),\
+ _d(reader.LocalName()))
+ eltQName = _d(reader.Name())
+ attributesNSImpl._attrs = attrs = {}
+ attributesNSImpl._qnames = qnames = {}
+ newPrefixes = []
+ while reader.MoveToNextAttribute():
+ qname = _d(reader.Name())
+ value = _d(reader.Value())
+ if qname.startswith("xmlns"):
+ if len(qname) > 5:
+ newPrefix = qname[6:]
+ else:
+ newPrefix = None
+ newPrefixes.append(newPrefix)
+ self._cont_handler.startPrefixMapping(\
+ newPrefix,value)
+ if not self.__nspfx:
+ continue # don't report xmlns attribute
+ attName = (_d(reader.NamespaceUri()),
+ _d(reader.LocalName()))
+ qnames[attName] = qname
+ attrs[attName] = value
+ reader.MoveToElement()
+ self._cont_handler.startElementNS( \
+ eltName,eltQName,attributesNSImpl)
+ if reader.IsEmptyElement():
+ self._cont_handler.endElementNS(eltName,eltQName)
+ for newPrefix in newPrefixes:
+ self._cont_handler.endPrefixMapping(newPrefix)
+ else:
+ prefixes.append(newPrefixes)
+ else:
+ eltName = _d(reader.Name())
+ attributesImpl._attrs = attrs = {}
+ while reader.MoveToNextAttribute():
+ attName = _d(reader.Name())
+ attrs[attName] = _d(reader.Value())
+ reader.MoveToElement()
+ self._cont_handler.startElement( \
+ eltName,attributesImpl)
+ if reader.IsEmptyElement():
+ self._cont_handler.endElement(eltName)
+ # EndElement
+ elif nodeType == 15:
+ if self.__ns:
+ self._cont_handler.endElementNS( \
+ (_d(reader.NamespaceUri()),_d(reader.LocalName())),
+ _d(reader.Name()))
+ for prefix in prefixes.pop():
+ self._cont_handler.endPrefixMapping(prefix)
+ else:
+ self._cont_handler.endElement(_d(reader.Name()))
+ # Text
+ elif nodeType == 3:
+ self._cont_handler.characters(_d(reader.Value()))
+ # Whitespace
+ elif nodeType == 13:
+ self._cont_handler.ignorableWhitespace(_d(reader.Value()))
+ # SignificantWhitespace
+ elif nodeType == 14:
+ self._cont_handler.characters(_d(reader.Value()))
+ # CDATA
+ elif nodeType == 4:
+ if not self.__lex_handler is None:
+ self.__lex_handler.startCDATA()
+ self._cont_handler.characters(_d(reader.Value()))
+ if not self.__lex_handler is None:
+ self.__lex_handler.endCDATA()
+ # EntityReference
+ elif nodeType == 5:
+ if not self.__lex_handler is None:
+ self.startEntity(_d(reader.Name()))
+ reader.ResolveEntity()
+ # EndEntity
+ elif nodeType == 16:
+ if not self.__lex_handler is None:
+ self.endEntity(_d(reader.Name()))
+ # ProcessingInstruction
+ elif nodeType == 7:
+ self._cont_handler.processingInstruction( \
+ _d(reader.Name()),_d(reader.Value()))
+ # Comment
+ elif nodeType == 8:
+ if not self.__lex_handler is None:
+ self.__lex_handler.comment(_d(reader.Value()))
+ # DocumentType
+ elif nodeType == 10:
+ #if not self.__lex_handler is None:
+ # self.__lex_handler.startDTD()
+ pass # TODO (how to detect endDTD? on first non-dtd event?)
+ # XmlDeclaration
+ elif nodeType == 17:
+ pass # TODO
+ # Entity
+ elif nodeType == 6:
+ pass # TODO (entity decl)
+ # Notation (decl)
+ elif nodeType == 12:
+ pass # TODO
+ # Attribute (never in this loop)
+ #elif nodeType == 2:
+ # pass
+ # Document (not exposed)
+ #elif nodeType == 9:
+ # pass
+ # DocumentFragment (never returned by XmlReader)
+ #elif nodeType == 11:
+ # pass
+ # None
+ #elif nodeType == 0:
+ # pass
+ # -
+ else:
+ raise SAXException("Unexpected node type %d" % nodeType)
+ if r == 0:
+ self._cont_handler.endDocument()
+ reader.Close()
+ finally:
+ self.__parsing = 0
+
+ def setDTDHandler(self, handler):
+ # TODO (when supported, the inherited method works just fine)
+ raise SAXNotSupportedException("DTDHandler not supported")
+
+ def setEntityResolver(self, resolver):
+ # TODO (when supported, the inherited method works just fine)
+ raise SAXNotSupportedException("EntityResolver not supported")
+
+ def getFeature(self, name):
+ if name == feature_namespaces:
+ return self.__ns
+ elif name == feature_namespace_prefixes:
+ return self.__nspfx
+ elif name == feature_validation:
+ return self.__validate
+ elif name == feature_external_ges:
+ return 1 # TODO (does that relate to PARSER_LOADDTD)?
+ elif name == feature_external_pes:
+ return 1 # TODO (does that relate to PARSER_LOADDTD)?
+ else:
+ raise SAXNotRecognizedException("Feature '%s' not recognized" % \
+ name)
+
+ def setFeature(self, name, state):
+ if self.__parsing:
+ raise SAXNotSupportedException("Cannot set feature %s " \
+ "while parsing" % name)
+ if name == feature_namespaces:
+ self.__ns = state
+ elif name == feature_namespace_prefixes:
+ self.__nspfx = state
+ elif name == feature_validation:
+ self.__validate = state
+ elif name == feature_external_ges:
+ if state == 0:
+ # TODO (does that relate to PARSER_LOADDTD)?
+ raise SAXNotSupportedException("Feature '%s' not supported" % \
+ name)
+ elif name == feature_external_pes:
+ if state == 0:
+ # TODO (does that relate to PARSER_LOADDTD)?
+ raise SAXNotSupportedException("Feature '%s' not supported" % \
+ name)
+ else:
+ raise SAXNotRecognizedException("Feature '%s' not recognized" % \
+ name)
+
+ def getProperty(self, name):
+ if name == property_lexical_handler:
+ return self.__lex_handler
+ elif name == property_declaration_handler:
+ return self.__decl_handler
+ else:
+ raise SAXNotRecognizedException("Property '%s' not recognized" % \
+ name)
+
+ def setProperty(self, name, value):
+ if name == property_lexical_handler:
+ self.__lex_handler = value
+ elif name == property_declaration_handler:
+ # TODO: remove if/when libxml2 supports dtd events
+ raise SAXNotSupportedException("Property '%s' not supported" % \
+ name)
+ self.__decl_handler = value
+ else:
+ raise SAXNotRecognizedException("Property '%s' not recognized" % \
+ name)
+
+def create_parser():
+ return LibXml2Reader()
+
diff --git a/python/generator.py b/python/generator.py
new file mode 100755
index 0000000..0891eed
--- /dev/null
+++ b/python/generator.py
@@ -0,0 +1,1184 @@
+#!/usr/bin/python -u
+#
+# generate python wrappers from the XML API description
+#
+
+functions = {}
+enums = {} # { enumType: { enumConstant: enumValue } }
+
+import sys
+import string
+
+#######################################################################
+#
+# That part if purely the API acquisition phase from the
+# XML API description
+#
+#######################################################################
+import os
+import xmllib
+try:
+ import sgmlop
+except ImportError:
+ sgmlop = None # accelerator not available
+
+debug = 0
+
+if sgmlop:
+ class FastParser:
+ """sgmlop based XML parser. this is typically 15x faster
+ than SlowParser..."""
+
+ def __init__(self, target):
+
+ # setup callbacks
+ self.finish_starttag = target.start
+ self.finish_endtag = target.end
+ self.handle_data = target.data
+
+ # activate parser
+ self.parser = sgmlop.XMLParser()
+ self.parser.register(self)
+ self.feed = self.parser.feed
+ self.entity = {
+ "amp": "&", "gt": ">", "lt": "<",
+ "apos": "'", "quot": '"'
+ }
+
+ def close(self):
+ try:
+ self.parser.close()
+ finally:
+ self.parser = self.feed = None # nuke circular reference
+
+ def handle_entityref(self, entity):
+ # <string> entity
+ try:
+ self.handle_data(self.entity[entity])
+ except KeyError:
+ self.handle_data("&%s;" % entity)
+
+else:
+ FastParser = None
+
+
+class SlowParser(xmllib.XMLParser):
+ """slow but safe standard parser, based on the XML parser in
+ Python's standard library."""
+
+ def __init__(self, target):
+ self.unknown_starttag = target.start
+ self.handle_data = target.data
+ self.unknown_endtag = target.end
+ xmllib.XMLParser.__init__(self)
+
+def getparser(target = None):
+ # get the fastest available parser, and attach it to an
+ # unmarshalling object. return both objects.
+ if target is None:
+ target = docParser()
+ if FastParser:
+ return FastParser(target), target
+ return SlowParser(target), target
+
+class docParser:
+ def __init__(self):
+ self._methodname = None
+ self._data = []
+ self.in_function = 0
+
+ def close(self):
+ if debug:
+ print "close"
+
+ def getmethodname(self):
+ return self._methodname
+
+ def data(self, text):
+ if debug:
+ print "data %s" % text
+ self._data.append(text)
+
+ def start(self, tag, attrs):
+ if debug:
+ print "start %s, %s" % (tag, attrs)
+ if tag == 'function':
+ self._data = []
+ self.in_function = 1
+ self.function = None
+ self.function_args = []
+ self.function_descr = None
+ self.function_return = None
+ self.function_file = None
+ if attrs.has_key('name'):
+ self.function = attrs['name']
+ if attrs.has_key('file'):
+ self.function_file = attrs['file']
+ elif tag == 'info':
+ self._data = []
+ elif tag == 'arg':
+ if self.in_function == 1:
+ self.function_arg_name = None
+ self.function_arg_type = None
+ self.function_arg_info = None
+ if attrs.has_key('name'):
+ self.function_arg_name = attrs['name']
+ if attrs.has_key('type'):
+ self.function_arg_type = attrs['type']
+ if attrs.has_key('info'):
+ self.function_arg_info = attrs['info']
+ elif tag == 'return':
+ if self.in_function == 1:
+ self.function_return_type = None
+ self.function_return_info = None
+ self.function_return_field = None
+ if attrs.has_key('type'):
+ self.function_return_type = attrs['type']
+ if attrs.has_key('info'):
+ self.function_return_info = attrs['info']
+ if attrs.has_key('field'):
+ self.function_return_field = attrs['field']
+ elif tag == 'enum':
+ enum(attrs['type'],attrs['name'],attrs['value'])
+
+ def end(self, tag):
+ if debug:
+ print "end %s" % tag
+ if tag == 'function':
+ if self.function != None:
+ function(self.function, self.function_descr,
+ self.function_return, self.function_args,
+ self.function_file)
+ self.in_function = 0
+ elif tag == 'arg':
+ if self.in_function == 1:
+ self.function_args.append([self.function_arg_name,
+ self.function_arg_type,
+ self.function_arg_info])
+ elif tag == 'return':
+ if self.in_function == 1:
+ self.function_return = [self.function_return_type,
+ self.function_return_info,
+ self.function_return_field]
+ elif tag == 'info':
+ str = ''
+ for c in self._data:
+ str = str + c
+ if self.in_function == 1:
+ self.function_descr = str
+
+
+def function(name, desc, ret, args, file):
+ functions[name] = (desc, ret, args, file)
+
+def enum(type, name, value):
+ if not enums.has_key(type):
+ enums[type] = {}
+ enums[type][name] = value
+
+#######################################################################
+#
+# Some filtering rukes to drop functions/types which should not
+# be exposed as-is on the Python interface
+#
+#######################################################################
+
+skipped_modules = {
+ 'xmlmemory': None,
+ 'DOCBparser': None,
+ 'SAX': None,
+ 'hash': None,
+ 'list': None,
+ 'threads': None,
+# 'xpointer': None,
+}
+skipped_types = {
+ 'int *': "usually a return type",
+ 'xmlSAXHandlerPtr': "not the proper interface for SAX",
+ 'htmlSAXHandlerPtr': "not the proper interface for SAX",
+ 'xmlRMutexPtr': "thread specific, skipped",
+ 'xmlMutexPtr': "thread specific, skipped",
+ 'xmlGlobalStatePtr': "thread specific, skipped",
+ 'xmlListPtr': "internal representation not suitable for python",
+ 'xmlBufferPtr': "internal representation not suitable for python",
+ 'FILE *': None,
+}
+
+#######################################################################
+#
+# Table of remapping to/from the python type or class to the C
+# counterpart.
+#
+#######################################################################
+
+py_types = {
+ 'void': (None, None, None, None),
+ 'int': ('i', None, "int", "int"),
+ 'long': ('i', None, "int", "int"),
+ 'double': ('d', None, "double", "double"),
+ 'unsigned int': ('i', None, "int", "int"),
+ 'xmlChar': ('c', None, "int", "int"),
+ 'unsigned char *': ('z', None, "charPtr", "char *"),
+ 'char *': ('z', None, "charPtr", "char *"),
+ 'const char *': ('z', None, "charPtrConst", "const char *"),
+ 'xmlChar *': ('z', None, "xmlCharPtr", "xmlChar *"),
+ 'const xmlChar *': ('z', None, "xmlCharPtrConst", "const xmlChar *"),
+ 'xmlNodePtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const xmlNodePtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'xmlNode *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const xmlNode *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'xmlDtdPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const xmlDtdPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'xmlDtd *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const xmlDtd *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'xmlAttrPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const xmlAttrPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'xmlAttr *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const xmlAttr *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'xmlEntityPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const xmlEntityPtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'xmlEntity *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const xmlEntity *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'xmlElementPtr': ('O', "xmlElement", "xmlElementPtr", "xmlElementPtr"),
+ 'const xmlElementPtr': ('O', "xmlElement", "xmlElementPtr", "xmlElementPtr"),
+ 'xmlElement *': ('O', "xmlElement", "xmlElementPtr", "xmlElementPtr"),
+ 'const xmlElement *': ('O', "xmlElement", "xmlElementPtr", "xmlElementPtr"),
+ 'xmlAttributePtr': ('O', "xmlAttribute", "xmlAttributePtr", "xmlAttributePtr"),
+ 'const xmlAttributePtr': ('O', "xmlAttribute", "xmlAttributePtr", "xmlAttributePtr"),
+ 'xmlAttribute *': ('O', "xmlAttribute", "xmlAttributePtr", "xmlAttributePtr"),
+ 'const xmlAttribute *': ('O', "xmlAttribute", "xmlAttributePtr", "xmlAttributePtr"),
+ 'xmlNsPtr': ('O', "xmlNode", "xmlNsPtr", "xmlNsPtr"),
+ 'const xmlNsPtr': ('O', "xmlNode", "xmlNsPtr", "xmlNsPtr"),
+ 'xmlNs *': ('O', "xmlNode", "xmlNsPtr", "xmlNsPtr"),
+ 'const xmlNs *': ('O', "xmlNode", "xmlNsPtr", "xmlNsPtr"),
+ 'xmlDocPtr': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
+ 'const xmlDocPtr': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
+ 'xmlDoc *': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
+ 'const xmlDoc *': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
+ 'htmlDocPtr': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
+ 'const htmlDocPtr': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
+ 'htmlDoc *': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
+ 'const htmlDoc *': ('O', "xmlNode", "xmlDocPtr", "xmlDocPtr"),
+ 'htmlNodePtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const htmlNodePtr': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'htmlNode *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'const htmlNode *': ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
+ 'xmlXPathContextPtr': ('O', "xmlXPathContext", "xmlXPathContextPtr", "xmlXPathContextPtr"),
+ 'xmlXPathContext *': ('O', "xpathContext", "xmlXPathContextPtr", "xmlXPathContextPtr"),
+ 'xmlXPathParserContextPtr': ('O', "xmlXPathParserContext", "xmlXPathParserContextPtr", "xmlXPathParserContextPtr"),
+ 'xmlParserCtxtPtr': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
+ 'xmlParserCtxt *': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
+ 'htmlParserCtxtPtr': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
+ 'htmlParserCtxt *': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
+ 'xmlCatalogPtr': ('O', "catalog", "xmlCatalogPtr", "xmlCatalogPtr"),
+ 'FILE *': ('O', "File", "FILEPtr", "FILE *"),
+ 'xmlURIPtr': ('O', "URI", "xmlURIPtr", "xmlURIPtr"),
+ 'xmlErrorPtr': ('O', "Error", "xmlErrorPtr", "xmlErrorPtr"),
+ 'xmlOutputBufferPtr': ('O', "outputBuffer", "xmlOutputBufferPtr", "xmlOutputBufferPtr"),
+ 'xmlParserInputBufferPtr': ('O', "inputBuffer", "xmlParserInputBufferPtr", "xmlParserInputBufferPtr"),
+ 'xmlRegexpPtr': ('O', "xmlReg", "xmlRegexpPtr", "xmlRegexpPtr"),
+ 'xmlTextReaderLocatorPtr': ('O', "xmlTextReaderLocator", "xmlTextReaderLocatorPtr", "xmlTextReaderLocatorPtr"),
+ 'xmlTextReaderPtr': ('O', "xmlTextReader", "xmlTextReaderPtr", "xmlTextReaderPtr"),
+ 'xmlRelaxNGPtr': ('O', "relaxNgSchema", "xmlRelaxNGPtr", "xmlRelaxNGPtr"),
+ 'xmlRelaxNGParserCtxtPtr': ('O', "relaxNgParserCtxt", "xmlRelaxNGParserCtxtPtr", "xmlRelaxNGParserCtxtPtr"),
+ 'xmlRelaxNGValidCtxtPtr': ('O', "relaxNgValidCtxt", "xmlRelaxNGValidCtxtPtr", "xmlRelaxNGValidCtxtPtr"),
+}
+
+py_return_types = {
+ 'xmlXPathObjectPtr': ('O', "foo", "xmlXPathObjectPtr", "xmlXPathObjectPtr"),
+}
+
+unknown_types = {}
+
+#######################################################################
+#
+# This part writes the C <-> Python stubs libxml2-py.[ch] and
+# the table libxml2-export.c to add when registrering the Python module
+#
+#######################################################################
+
+def skip_function(name):
+ if name[0:12] == "xmlXPathWrap":
+ return 1
+ if name == "xmlFreeParserCtxt":
+ return 1
+ if name == "xmlFreeTextReader":
+ return 1
+# if name[0:11] == "xmlXPathNew":
+# return 1
+ # the next function is defined in libxml.c
+ if name == "xmlRelaxNGFreeValidCtxt":
+ return 1
+#
+# Those are skipped because the Const version is used of the bindings
+# instead.
+#
+ if name == "xmlTextReaderBaseUri":
+ return 1
+ if name == "xmlTextReaderLocalName":
+ return 1
+ if name == "xmlTextReaderName":
+ return 1
+ if name == "xmlTextReaderNamespaceUri":
+ return 1
+ if name == "xmlTextReaderPrefix":
+ return 1
+ if name == "xmlTextReaderXmlLang":
+ return 1
+ if name == "xmlTextReaderValue":
+ return 1
+ if name == "xmlOutputBufferClose": # handled by by the superclass
+ return 1
+ if name == "xmlOutputBufferFlush": # handled by by the superclass
+ return 1
+ if name == "xmlErrMemory":
+ return 1
+ return 0
+
+def print_function_wrapper(name, output, export, include):
+ global py_types
+ global unknown_types
+ global functions
+ global skipped_modules
+
+ try:
+ (desc, ret, args, file) = functions[name]
+ except:
+ print "failed to get function %s infos"
+ return
+
+ if skipped_modules.has_key(file):
+ return 0
+ if skip_function(name) == 1:
+ return 0
+
+ c_call = "";
+ format=""
+ format_args=""
+ c_args=""
+ c_return=""
+ c_convert=""
+ for arg in args:
+ # This should be correct
+ if arg[1][0:6] == "const ":
+ arg[1] = arg[1][6:]
+ c_args = c_args + " %s %s;\n" % (arg[1], arg[0])
+ if py_types.has_key(arg[1]):
+ (f, t, n, c) = py_types[arg[1]]
+ if f != None:
+ format = format + f
+ if t != None:
+ format_args = format_args + ", &pyobj_%s" % (arg[0])
+ c_args = c_args + " PyObject *pyobj_%s;\n" % (arg[0])
+ c_convert = c_convert + \
+ " %s = (%s) Py%s_Get(pyobj_%s);\n" % (arg[0],
+ arg[1], t, arg[0]);
+ else:
+ format_args = format_args + ", &%s" % (arg[0])
+ if c_call != "":
+ c_call = c_call + ", ";
+ c_call = c_call + "%s" % (arg[0])
+ else:
+ if skipped_types.has_key(arg[1]):
+ return 0
+ if unknown_types.has_key(arg[1]):
+ lst = unknown_types[arg[1]]
+ lst.append(name)
+ else:
+ unknown_types[arg[1]] = [name]
+ return -1
+ if format != "":
+ format = format + ":%s" % (name)
+
+ if ret[0] == 'void':
+ if file == "python_accessor":
+ if args[1][1] == "char *" or args[1][1] == "xmlChar *":
+ c_call = "\n if (%s->%s != NULL) xmlFree(%s->%s);\n" % (
+ args[0][0], args[1][0], args[0][0], args[1][0])
+ c_call = c_call + " %s->%s = (%s)xmlStrdup((const xmlChar *)%s);\n" % (args[0][0],
+ args[1][0], args[1][1], args[1][0])
+ else:
+ c_call = "\n %s->%s = %s;\n" % (args[0][0], args[1][0],
+ args[1][0])
+ else:
+ c_call = "\n %s(%s);\n" % (name, c_call);
+ ret_convert = " Py_INCREF(Py_None);\n return(Py_None);\n"
+ elif py_types.has_key(ret[0]):
+ (f, t, n, c) = py_types[ret[0]]
+ c_return = " %s c_retval;\n" % (ret[0])
+ if file == "python_accessor" and ret[2] != None:
+ c_call = "\n c_retval = %s->%s;\n" % (args[0][0], ret[2])
+ else:
+ c_call = "\n c_retval = %s(%s);\n" % (name, c_call);
+ ret_convert = " py_retval = libxml_%sWrap((%s) c_retval);\n" % (n,c)
+ ret_convert = ret_convert + " return(py_retval);\n"
+ elif py_return_types.has_key(ret[0]):
+ (f, t, n, c) = py_return_types[ret[0]]
+ c_return = " %s c_retval;\n" % (ret[0])
+ c_call = "\n c_retval = %s(%s);\n" % (name, c_call);
+ ret_convert = " py_retval = libxml_%sWrap((%s) c_retval);\n" % (n,c)
+ ret_convert = ret_convert + " return(py_retval);\n"
+ else:
+ if skipped_types.has_key(ret[0]):
+ return 0
+ if unknown_types.has_key(ret[0]):
+ lst = unknown_types[ret[0]]
+ lst.append(name)
+ else:
+ unknown_types[ret[0]] = [name]
+ return -1
+
+ if file == "debugXML":
+ include.write("#ifdef LIBXML_DEBUG_ENABLED\n");
+ export.write("#ifdef LIBXML_DEBUG_ENABLED\n");
+ output.write("#ifdef LIBXML_DEBUG_ENABLED\n");
+ elif file == "HTMLtree" or file == "HTMLparser":
+ include.write("#ifdef LIBXML_HTML_ENABLED\n");
+ export.write("#ifdef LIBXML_HTML_ENABLED\n");
+ output.write("#ifdef LIBXML_HTML_ENABLED\n");
+ elif file == "c14n":
+ include.write("#ifdef LIBXML_C14N_ENABLED\n");
+ export.write("#ifdef LIBXML_C14N_ENABLED\n");
+ output.write("#ifdef LIBXML_C14N_ENABLED\n");
+ elif file == "xpathInternals" or file == "xpath":
+ include.write("#ifdef LIBXML_XPATH_ENABLED\n");
+ export.write("#ifdef LIBXML_XPATH_ENABLED\n");
+ output.write("#ifdef LIBXML_XPATH_ENABLED\n");
+ elif file == "xpointer":
+ include.write("#ifdef LIBXML_XPTR_ENABLED\n");
+ export.write("#ifdef LIBXML_XPTR_ENABLED\n");
+ output.write("#ifdef LIBXML_XPTR_ENABLED\n");
+ elif file == "xinclude":
+ include.write("#ifdef LIBXML_XINCLUDE_ENABLED\n");
+ export.write("#ifdef LIBXML_XINCLUDE_ENABLED\n");
+ output.write("#ifdef LIBXML_XINCLUDE_ENABLED\n");
+ elif file == "xmlregexp":
+ include.write("#ifdef LIBXML_REGEXP_ENABLED\n");
+ export.write("#ifdef LIBXML_REGEXP_ENABLED\n");
+ output.write("#ifdef LIBXML_REGEXP_ENABLED\n");
+ elif file == "xmlschemas" or file == "xmlschemastypes" or \
+ file == "relaxng":
+ include.write("#ifdef LIBXML_SCHEMAS_ENABLED\n");
+ export.write("#ifdef LIBXML_SCHEMAS_ENABLED\n");
+ output.write("#ifdef LIBXML_SCHEMAS_ENABLED\n");
+
+ include.write("PyObject * ")
+ include.write("libxml_%s(PyObject *self, PyObject *args);\n" % (name));
+
+ export.write(" { (char *)\"%s\", libxml_%s, METH_VARARGS, NULL },\n" %
+ (name, name))
+
+ if file == "python":
+ # Those have been manually generated
+ return 1
+ if file == "python_accessor" and ret[0] != "void" and ret[2] is None:
+ # Those have been manually generated
+ return 1
+
+ output.write("PyObject *\n")
+ output.write("libxml_%s(PyObject *self ATTRIBUTE_UNUSED," % (name))
+ output.write(" PyObject *args")
+ if format == "":
+ output.write(" ATTRIBUTE_UNUSED")
+ output.write(") {\n")
+ if ret[0] != 'void':
+ output.write(" PyObject *py_retval;\n")
+ if c_return != "":
+ output.write(c_return)
+ if c_args != "":
+ output.write(c_args)
+ if format != "":
+ output.write("\n if (!PyArg_ParseTuple(args, (char *)\"%s\"%s))\n" %
+ (format, format_args))
+ output.write(" return(NULL);\n")
+ if c_convert != "":
+ output.write(c_convert)
+
+ output.write(c_call)
+ output.write(ret_convert)
+ output.write("}\n\n")
+ if file == "debugXML":
+ include.write("#endif /* LIBXML_DEBUG_ENABLED */\n");
+ export.write("#endif /* LIBXML_DEBUG_ENABLED */\n");
+ output.write("#endif /* LIBXML_DEBUG_ENABLED */\n");
+ elif file == "HTMLtree" or file == "HTMLparser":
+ include.write("#endif /* LIBXML_HTML_ENABLED */\n");
+ export.write("#endif /* LIBXML_HTML_ENABLED */\n");
+ output.write("#endif /* LIBXML_HTML_ENABLED */\n");
+ elif file == "c14n":
+ include.write("#endif /* LIBXML_C14N_ENABLED */\n");
+ export.write("#endif /* LIBXML_C14N_ENABLED */\n");
+ output.write("#endif /* LIBXML_C14N_ENABLED */\n");
+ elif file == "xpathInternals" or file == "xpath":
+ include.write("#endif /* LIBXML_XPATH_ENABLED */\n");
+ export.write("#endif /* LIBXML_XPATH_ENABLED */\n");
+ output.write("#endif /* LIBXML_XPATH_ENABLED */\n");
+ elif file == "xpointer":
+ include.write("#endif /* LIBXML_XPTR_ENABLED */\n");
+ export.write("#endif /* LIBXML_XPTR_ENABLED */\n");
+ output.write("#endif /* LIBXML_XPTR_ENABLED */\n");
+ elif file == "xinclude":
+ include.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n");
+ export.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n");
+ output.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n");
+ elif file == "xmlregexp":
+ include.write("#endif /* LIBXML_REGEXP_ENABLED */\n");
+ export.write("#endif /* LIBXML_REGEXP_ENABLED */\n");
+ output.write("#endif /* LIBXML_REGEXP_ENABLED */\n");
+ elif file == "xmlschemas" or file == "xmlschemastypes" or \
+ file == "relaxng":
+ include.write("#endif /* LIBXML_SCHEMAS_ENABLED */\n");
+ export.write("#endif /* LIBXML_SCHEMAS_ENABLED */\n");
+ output.write("#endif /* LIBXML_SCHEMAS_ENABLED */\n");
+ return 1
+
+def buildStubs():
+ global py_types
+ global py_return_types
+ global unknown_types
+
+ try:
+ f = open("libxml2-api.xml")
+ data = f.read()
+ (parser, target) = getparser()
+ parser.feed(data)
+ parser.close()
+ except IOError, msg:
+ try:
+ f = open("../doc/libxml2-api.xml")
+ data = f.read()
+ (parser, target) = getparser()
+ parser.feed(data)
+ parser.close()
+ except IOError, msg:
+ print file, ":", msg
+ sys.exit(1)
+
+ n = len(functions.keys())
+ print "Found %d functions in libxml2-api.xml" % (n)
+
+ py_types['pythonObject'] = ('O', "pythonObject", "pythonObject", "pythonObject")
+ try:
+ f = open("libxml2-python-api.xml")
+ data = f.read()
+ (parser, target) = getparser()
+ parser.feed(data)
+ parser.close()
+ except IOError, msg:
+ print file, ":", msg
+
+
+ print "Found %d functions in libxml2-python-api.xml" % (
+ len(functions.keys()) - n)
+ nb_wrap = 0
+ failed = 0
+ skipped = 0
+
+ include = open("libxml2-py.h", "w")
+ include.write("/* Generated */\n\n")
+ export = open("libxml2-export.c", "w")
+ export.write("/* Generated */\n\n")
+ wrapper = open("libxml2-py.c", "w")
+ wrapper.write("/* Generated */\n\n")
+ wrapper.write("#include <Python.h>\n")
+ wrapper.write("#include <libxml/xmlversion.h>\n")
+ wrapper.write("#include <libxml/tree.h>\n")
+ wrapper.write("#include <libxml/xmlschemastypes.h>\n")
+ wrapper.write("#include \"libxml_wrap.h\"\n")
+ wrapper.write("#include \"libxml2-py.h\"\n\n")
+ for function in functions.keys():
+ ret = print_function_wrapper(function, wrapper, export, include)
+ if ret < 0:
+ failed = failed + 1
+ del functions[function]
+ if ret == 0:
+ skipped = skipped + 1
+ del functions[function]
+ if ret == 1:
+ nb_wrap = nb_wrap + 1
+ include.close()
+ export.close()
+ wrapper.close()
+
+ print "Generated %d wrapper functions, %d failed, %d skipped\n" % (nb_wrap,
+ failed, skipped);
+ print "Missing type converters: "
+ for type in unknown_types.keys():
+ print "%s:%d " % (type, len(unknown_types[type])),
+ print
+
+#######################################################################
+#
+# This part writes part of the Python front-end classes based on
+# mapping rules between types and classes and also based on function
+# renaming to get consistent function names at the Python level
+#
+#######################################################################
+
+#
+# The type automatically remapped to generated classes
+#
+classes_type = {
+ "xmlNodePtr": ("._o", "xmlNode(_obj=%s)", "xmlNode"),
+ "xmlNode *": ("._o", "xmlNode(_obj=%s)", "xmlNode"),
+ "xmlDocPtr": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
+ "xmlDocPtr *": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
+ "htmlDocPtr": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
+ "htmlxmlDocPtr *": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
+ "xmlAttrPtr": ("._o", "xmlAttr(_obj=%s)", "xmlAttr"),
+ "xmlAttr *": ("._o", "xmlAttr(_obj=%s)", "xmlAttr"),
+ "xmlNsPtr": ("._o", "xmlNs(_obj=%s)", "xmlNs"),
+ "xmlNs *": ("._o", "xmlNs(_obj=%s)", "xmlNs"),
+ "xmlDtdPtr": ("._o", "xmlDtd(_obj=%s)", "xmlDtd"),
+ "xmlDtd *": ("._o", "xmlDtd(_obj=%s)", "xmlDtd"),
+ "xmlEntityPtr": ("._o", "xmlEntity(_obj=%s)", "xmlEntity"),
+ "xmlEntity *": ("._o", "xmlEntity(_obj=%s)", "xmlEntity"),
+ "xmlElementPtr": ("._o", "xmlElement(_obj=%s)", "xmlElement"),
+ "xmlElement *": ("._o", "xmlElement(_obj=%s)", "xmlElement"),
+ "xmlAttributePtr": ("._o", "xmlAttribute(_obj=%s)", "xmlAttribute"),
+ "xmlAttribute *": ("._o", "xmlAttribute(_obj=%s)", "xmlAttribute"),
+ "xmlXPathContextPtr": ("._o", "xpathContext(_obj=%s)", "xpathContext"),
+ "xmlXPathContext *": ("._o", "xpathContext(_obj=%s)", "xpathContext"),
+ "xmlXPathParserContext *": ("._o", "xpathParserContext(_obj=%s)", "xpathParserContext"),
+ "xmlXPathParserContextPtr": ("._o", "xpathParserContext(_obj=%s)", "xpathParserContext"),
+ "xmlParserCtxtPtr": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
+ "xmlParserCtxt *": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
+ "htmlParserCtxtPtr": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
+ "htmlParserCtxt *": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
+ "xmlCatalogPtr": ("._o", "catalog(_obj=%s)", "catalog"),
+ "xmlURIPtr": ("._o", "URI(_obj=%s)", "URI"),
+ "xmlErrorPtr": ("._o", "Error(_obj=%s)", "Error"),
+ "xmlOutputBufferPtr": ("._o", "outputBuffer(_obj=%s)", "outputBuffer"),
+ "xmlParserInputBufferPtr": ("._o", "inputBuffer(_obj=%s)", "inputBuffer"),
+ "xmlRegexpPtr": ("._o", "xmlReg(_obj=%s)", "xmlReg"),
+ "xmlTextReaderLocatorPtr": ("._o", "xmlTextReaderLocator(_obj=%s)", "xmlTextReaderLocator"),
+ "xmlTextReaderPtr": ("._o", "xmlTextReader(_obj=%s)", "xmlTextReader"),
+ 'xmlRelaxNGPtr': ('._o', "relaxNgSchema(_obj=%s)", "relaxNgSchema"),
+ 'xmlRelaxNGParserCtxtPtr': ('._o', "relaxNgParserCtxt(_obj=%s)", "relaxNgParserCtxt"),
+ 'xmlRelaxNGValidCtxtPtr': ('._o', "relaxNgValidCtxt(_obj=%s)", "relaxNgValidCtxt"),
+}
+
+converter_type = {
+ "xmlXPathObjectPtr": "xpathObjectRet(%s)",
+}
+
+primary_classes = ["xmlNode", "xmlDoc"]
+
+classes_ancestor = {
+ "xmlNode" : "xmlCore",
+ "xmlDtd" : "xmlNode",
+ "xmlDoc" : "xmlNode",
+ "xmlAttr" : "xmlNode",
+ "xmlNs" : "xmlNode",
+ "xmlEntity" : "xmlNode",
+ "xmlElement" : "xmlNode",
+ "xmlAttribute" : "xmlNode",
+ "outputBuffer": "ioWriteWrapper",
+ "inputBuffer": "ioReadWrapper",
+ "parserCtxt": "parserCtxtCore",
+ "xmlTextReader": "xmlTextReaderCore",
+}
+classes_destructors = {
+ "parserCtxt": "xmlFreeParserCtxt",
+ "catalog": "xmlFreeCatalog",
+ "URI": "xmlFreeURI",
+# "outputBuffer": "xmlOutputBufferClose",
+ "inputBuffer": "xmlFreeParserInputBuffer",
+ "xmlReg": "xmlRegFreeRegexp",
+ "xmlTextReader": "xmlFreeTextReader",
+ "relaxNgSchema": "xmlRelaxNGFree",
+ "relaxNgParserCtxt": "xmlRelaxNGFreeParserCtxt",
+ "relaxNgValidCtxt": "xmlRelaxNGFreeValidCtxt",
+}
+
+functions_noexcept = {
+ "xmlHasProp": 1,
+ "xmlHasNsProp": 1,
+ "xmlDocSetRootElement": 1,
+}
+
+reference_keepers = {
+ "xmlTextReader": [('inputBuffer', 'input')],
+ "relaxNgValidCtxt": [('relaxNgSchema', 'schema')],
+}
+
+function_classes = {}
+
+function_classes["None"] = []
+
+def nameFixup(name, classe, type, file):
+ listname = classe + "List"
+ ll = len(listname)
+ l = len(classe)
+ if name[0:l] == listname:
+ func = name[l:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:12] == "xmlParserGet" and file == "python_accessor":
+ func = name[12:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:12] == "xmlParserSet" and file == "python_accessor":
+ func = name[12:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:10] == "xmlNodeGet" and file == "python_accessor":
+ func = name[10:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:9] == "xmlURIGet" and file == "python_accessor":
+ func = name[9:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:9] == "xmlURISet" and file == "python_accessor":
+ func = name[6:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:11] == "xmlErrorGet" and file == "python_accessor":
+ func = name[11:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:17] == "xmlXPathParserGet" and file == "python_accessor":
+ func = name[17:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:11] == "xmlXPathGet" and file == "python_accessor":
+ func = name[11:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:11] == "xmlXPathSet" and file == "python_accessor":
+ func = name[8:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:15] == "xmlOutputBuffer" and file != "python":
+ func = name[15:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:20] == "xmlParserInputBuffer" and file != "python":
+ func = name[20:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:9] == "xmlRegexp" and file == "xmlregexp":
+ func = "regexp" + name[9:]
+ elif name[0:6] == "xmlReg" and file == "xmlregexp":
+ func = "regexp" + name[6:]
+ elif name[0:20] == "xmlTextReaderLocator" and file == "xmlreader":
+ func = name[20:]
+ elif name[0:18] == "xmlTextReaderConst" and file == "xmlreader":
+ func = name[18:]
+ elif name[0:13] == "xmlTextReader" and file == "xmlreader":
+ func = name[13:]
+ elif name[0:12] == "xmlReaderNew" and file == "xmlreader":
+ func = name[9:]
+ elif name[0:11] == "xmlACatalog":
+ func = name[11:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:l] == classe:
+ func = name[l:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:7] == "libxml_":
+ func = name[7:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:6] == "xmlGet":
+ func = name[6:]
+ func = string.lower(func[0:1]) + func[1:]
+ elif name[0:3] == "xml":
+ func = name[3:]
+ func = string.lower(func[0:1]) + func[1:]
+ else:
+ func = name
+ if func[0:5] == "xPath":
+ func = "xpath" + func[5:]
+ elif func[0:4] == "xPtr":
+ func = "xpointer" + func[4:]
+ elif func[0:8] == "xInclude":
+ func = "xinclude" + func[8:]
+ elif func[0:2] == "iD":
+ func = "ID" + func[2:]
+ elif func[0:3] == "uRI":
+ func = "URI" + func[3:]
+ elif func[0:4] == "uTF8":
+ func = "UTF8" + func[4:]
+ elif func[0:3] == 'sAX':
+ func = "SAX" + func[3:]
+ return func
+
+
+def functionCompare(info1, info2):
+ (index1, func1, name1, ret1, args1, file1) = info1
+ (index2, func2, name2, ret2, args2, file2) = info2
+ if file1 == file2:
+ if func1 < func2:
+ return -1
+ if func1 > func2:
+ return 1
+ if file1 == "python_accessor":
+ return -1
+ if file2 == "python_accessor":
+ return 1
+ if file1 < file2:
+ return -1
+ if file1 > file2:
+ return 1
+ return 0
+
+def writeDoc(name, args, indent, output):
+ if functions[name][0] is None or functions[name][0] == "":
+ return
+ val = functions[name][0]
+ val = string.replace(val, "NULL", "None");
+ output.write(indent)
+ output.write('"""')
+ while len(val) > 60:
+ str = val[0:60]
+ i = string.rfind(str, " ");
+ if i < 0:
+ i = 60
+ str = val[0:i]
+ val = val[i:]
+ output.write(str)
+ output.write('\n ');
+ output.write(indent)
+ output.write(val);
+ output.write(' """\n')
+
+def buildWrappers():
+ global ctypes
+ global py_types
+ global py_return_types
+ global unknown_types
+ global functions
+ global function_classes
+ global classes_type
+ global classes_list
+ global converter_type
+ global primary_classes
+ global converter_type
+ global classes_ancestor
+ global converter_type
+ global primary_classes
+ global classes_ancestor
+ global classes_destructors
+ global functions_noexcept
+
+ for type in classes_type.keys():
+ function_classes[classes_type[type][2]] = []
+
+ #
+ # Build the list of C types to look for ordered to start
+ # with primary classes
+ #
+ ctypes = []
+ classes_list = []
+ ctypes_processed = {}
+ classes_processed = {}
+ for classe in primary_classes:
+ classes_list.append(classe)
+ classes_processed[classe] = ()
+ for type in classes_type.keys():
+ tinfo = classes_type[type]
+ if tinfo[2] == classe:
+ ctypes.append(type)
+ ctypes_processed[type] = ()
+ for type in classes_type.keys():
+ if ctypes_processed.has_key(type):
+ continue
+ tinfo = classes_type[type]
+ if not classes_processed.has_key(tinfo[2]):
+ classes_list.append(tinfo[2])
+ classes_processed[tinfo[2]] = ()
+
+ ctypes.append(type)
+ ctypes_processed[type] = ()
+
+ for name in functions.keys():
+ found = 0;
+ (desc, ret, args, file) = functions[name]
+ for type in ctypes:
+ classe = classes_type[type][2]
+
+ if name[0:3] == "xml" and len(args) >= 1 and args[0][1] == type:
+ found = 1
+ func = nameFixup(name, classe, type, file)
+ info = (0, func, name, ret, args, file)
+ function_classes[classe].append(info)
+ elif name[0:3] == "xml" and len(args) >= 2 and args[1][1] == type \
+ and file != "python_accessor":
+ found = 1
+ func = nameFixup(name, classe, type, file)
+ info = (1, func, name, ret, args, file)
+ function_classes[classe].append(info)
+ elif name[0:4] == "html" and len(args) >= 1 and args[0][1] == type:
+ found = 1
+ func = nameFixup(name, classe, type, file)
+ info = (0, func, name, ret, args, file)
+ function_classes[classe].append(info)
+ elif name[0:4] == "html" and len(args) >= 2 and args[1][1] == type \
+ and file != "python_accessor":
+ found = 1
+ func = nameFixup(name, classe, type, file)
+ info = (1, func, name, ret, args, file)
+ function_classes[classe].append(info)
+ if found == 1:
+ continue
+ if name[0:8] == "xmlXPath":
+ continue
+ if name[0:6] == "xmlStr":
+ continue
+ if name[0:10] == "xmlCharStr":
+ continue
+ func = nameFixup(name, "None", file, file)
+ info = (0, func, name, ret, args, file)
+ function_classes['None'].append(info)
+
+ classes = open("libxml2class.py", "w")
+ txt = open("libxml2class.txt", "w")
+ txt.write(" Generated Classes for libxml2-python\n\n")
+
+ txt.write("#\n# Global functions of the module\n#\n\n")
+ if function_classes.has_key("None"):
+ flist = function_classes["None"]
+ flist.sort(functionCompare)
+ oldfile = ""
+ for info in flist:
+ (index, func, name, ret, args, file) = info
+ if file != oldfile:
+ classes.write("#\n# Functions from module %s\n#\n\n" % file)
+ txt.write("\n# functions from module %s\n" % file)
+ oldfile = file
+ classes.write("def %s(" % func)
+ txt.write("%s()\n" % func);
+ n = 0
+ for arg in args:
+ if n != 0:
+ classes.write(", ")
+ classes.write("%s" % arg[0])
+ n = n + 1
+ classes.write("):\n")
+ writeDoc(name, args, ' ', classes);
+
+ for arg in args:
+ if classes_type.has_key(arg[1]):
+ classes.write(" if %s is None: %s__o = None\n" %
+ (arg[0], arg[0]))
+ classes.write(" else: %s__o = %s%s\n" %
+ (arg[0], arg[0], classes_type[arg[1]][0]))
+ if ret[0] != "void":
+ classes.write(" ret = ");
+ else:
+ classes.write(" ");
+ classes.write("libxml2mod.%s(" % name)
+ n = 0
+ for arg in args:
+ if n != 0:
+ classes.write(", ");
+ classes.write("%s" % arg[0])
+ if classes_type.has_key(arg[1]):
+ classes.write("__o");
+ n = n + 1
+ classes.write(")\n");
+ if ret[0] != "void":
+ if classes_type.has_key(ret[0]):
+ #
+ # Raise an exception
+ #
+ if functions_noexcept.has_key(name):
+ classes.write(" if ret is None:return None\n");
+ elif string.find(name, "URI") >= 0:
+ classes.write(
+ " if ret is None:raise uriError('%s() failed')\n"
+ % (name))
+ elif string.find(name, "XPath") >= 0:
+ classes.write(
+ " if ret is None:raise xpathError('%s() failed')\n"
+ % (name))
+ elif string.find(name, "Parse") >= 0:
+ classes.write(
+ " if ret is None:raise parserError('%s() failed')\n"
+ % (name))
+ else:
+ classes.write(
+ " if ret is None:raise treeError('%s() failed')\n"
+ % (name))
+ classes.write(" return ");
+ classes.write(classes_type[ret[0]][1] % ("ret"));
+ classes.write("\n");
+ else:
+ classes.write(" return ret\n");
+ classes.write("\n");
+
+ txt.write("\n\n#\n# Set of classes of the module\n#\n\n")
+ for classname in classes_list:
+ if classname == "None":
+ pass
+ else:
+ if classes_ancestor.has_key(classname):
+ txt.write("\n\nClass %s(%s)\n" % (classname,
+ classes_ancestor[classname]))
+ classes.write("class %s(%s):\n" % (classname,
+ classes_ancestor[classname]))
+ classes.write(" def __init__(self, _obj=None):\n")
+ if reference_keepers.has_key(classname):
+ rlist = reference_keepers[classname]
+ for ref in rlist:
+ classes.write(" self.%s = None\n" % ref[1])
+ classes.write(" self._o = _obj\n")
+ classes.write(" %s.__init__(self, _obj=_obj)\n\n" % (
+ classes_ancestor[classname]))
+ if classes_ancestor[classname] == "xmlCore" or \
+ 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" % (
+ format))
+ else:
+ txt.write("Class %s()\n" % (classname))
+ classes.write("class %s:\n" % (classname))
+ classes.write(" def __init__(self, _obj=None):\n")
+ if reference_keepers.has_key(classname):
+ list = reference_keepers[classname]
+ for ref in list:
+ classes.write(" self.%s = None\n" % ref[1])
+ classes.write(" if _obj != None:self._o = _obj;return\n")
+ classes.write(" self._o = None\n\n");
+ if classes_destructors.has_key(classname):
+ classes.write(" def __del__(self):\n")
+ classes.write(" if self._o != None:\n")
+ classes.write(" libxml2mod.%s(self._o)\n" %
+ classes_destructors[classname]);
+ classes.write(" self._o = None\n\n");
+ flist = function_classes[classname]
+ flist.sort(functionCompare)
+ oldfile = ""
+ for info in flist:
+ (index, func, name, ret, args, file) = info
+ if file != oldfile:
+ if file == "python_accessor":
+ classes.write(" # accessors for %s\n" % (classname))
+ txt.write(" # accessors\n")
+ else:
+ classes.write(" #\n")
+ classes.write(" # %s functions from module %s\n" % (
+ classname, file))
+ txt.write("\n # functions from module %s\n" % file)
+ classes.write(" #\n\n")
+ oldfile = file
+ classes.write(" def %s(self" % func)
+ txt.write(" %s()\n" % func);
+ n = 0
+ for arg in args:
+ if n != index:
+ classes.write(", %s" % arg[0])
+ n = n + 1
+ classes.write("):\n")
+ writeDoc(name, args, ' ', classes);
+ n = 0
+ for arg in args:
+ if classes_type.has_key(arg[1]):
+ if n != index:
+ classes.write(" if %s is None: %s__o = None\n" %
+ (arg[0], arg[0]))
+ classes.write(" else: %s__o = %s%s\n" %
+ (arg[0], arg[0], classes_type[arg[1]][0]))
+ n = n + 1
+ if ret[0] != "void":
+ classes.write(" ret = ");
+ else:
+ classes.write(" ");
+ classes.write("libxml2mod.%s(" % name)
+ n = 0
+ for arg in args:
+ if n != 0:
+ classes.write(", ");
+ if n != index:
+ classes.write("%s" % arg[0])
+ if classes_type.has_key(arg[1]):
+ classes.write("__o");
+ else:
+ classes.write("self");
+ if classes_type.has_key(arg[1]):
+ classes.write(classes_type[arg[1]][0])
+ n = n + 1
+ classes.write(")\n");
+ if ret[0] != "void":
+ if classes_type.has_key(ret[0]):
+ #
+ # Raise an exception
+ #
+ if functions_noexcept.has_key(name):
+ classes.write(
+ " if ret is None:return None\n");
+ elif string.find(name, "URI") >= 0:
+ classes.write(
+ " if ret is None:raise uriError('%s() failed')\n"
+ % (name))
+ elif string.find(name, "XPath") >= 0:
+ classes.write(
+ " if ret is None:raise xpathError('%s() failed')\n"
+ % (name))
+ elif string.find(name, "Parse") >= 0:
+ classes.write(
+ " if ret is None:raise parserError('%s() failed')\n"
+ % (name))
+ else:
+ classes.write(
+ " if ret is None:raise treeError('%s() failed')\n"
+ % (name))
+
+ #
+ # generate the returned class wrapper for the object
+ #
+ classes.write(" __tmp = ");
+ classes.write(classes_type[ret[0]][1] % ("ret"));
+ classes.write("\n");
+
+ #
+ # Sometime one need to keep references of the source
+ # class in the returned class object.
+ # See reference_keepers for the list
+ #
+ tclass = classes_type[ret[0]][2]
+ if reference_keepers.has_key(tclass):
+ list = reference_keepers[tclass]
+ for pref in list:
+ if pref[0] == classname:
+ classes.write(" __tmp.%s = self\n" %
+ pref[1])
+ #
+ # return the class
+ #
+ classes.write(" return __tmp\n");
+ elif converter_type.has_key(ret[0]):
+ #
+ # Raise an exception
+ #
+ if functions_noexcept.has_key(name):
+ classes.write(
+ " if ret is None:return None");
+ elif string.find(name, "URI") >= 0:
+ classes.write(
+ " if ret is None:raise uriError('%s() failed')\n"
+ % (name))
+ elif string.find(name, "XPath") >= 0:
+ classes.write(
+ " if ret is None:raise xpathError('%s() failed')\n"
+ % (name))
+ elif string.find(name, "Parse") >= 0:
+ classes.write(
+ " if ret is None:raise parserError('%s() failed')\n"
+ % (name))
+ else:
+ classes.write(
+ " if ret is None:raise treeError('%s() failed')\n"
+ % (name))
+ classes.write(" return ");
+ classes.write(converter_type[ret[0]] % ("ret"));
+ classes.write("\n");
+ else:
+ classes.write(" return ret\n");
+ classes.write("\n");
+
+ #
+ # Generate enum constants
+ #
+ for type,enum in enums.items():
+ classes.write("# %s\n" % type)
+ items = enum.items()
+ items.sort(lambda i1,i2: cmp(long(i1[1]),long(i2[1])))
+ for name,value in items:
+ classes.write("%s = %s\n" % (name,value))
+ classes.write("\n");
+
+ txt.close()
+ classes.close()
+
+buildStubs()
+buildWrappers()
diff --git a/python/libxml.c b/python/libxml.c
new file mode 100644
index 0000000..7a19303
--- /dev/null
+++ b/python/libxml.c
@@ -0,0 +1,3230 @@
+/*
+ * libxml.c: this modules implements the main part of the glue of the
+ * libxml2 library and the Python interpreter. It provides the
+ * entry points where an automatically generated stub is either
+ * unpractical or would not match cleanly the Python model.
+ *
+ * If compiled with MERGED_MODULES, the entry point will be used to
+ * initialize both the libxml2 and the libxslt wrappers
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+#include <Python.h>
+#include <fileobject.h>
+/* #include "config.h" */
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+#include <libxml/xmlerror.h>
+#include <libxml/xpathInternals.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/xmlIO.h>
+#include <libxml/c14n.h>
+#include "libxml_wrap.h"
+#include "libxml2-py.h"
+
+#if (defined(_MSC_VER) || defined(__MINGW32__)) && !defined(vsnprintf)
+#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a)
+#elif defined(WITH_TRIO)
+#include "trio.h"
+#define vsnprintf trio_vsnprintf
+#endif
+
+/* #define DEBUG */
+/* #define DEBUG_SAX */
+/* #define DEBUG_XPATH */
+/* #define DEBUG_ERROR */
+/* #define DEBUG_MEMORY */
+/* #define DEBUG_FILES */
+/* #define DEBUG_LOADER */
+
+void initlibxml2mod(void);
+
+/**
+ * TODO:
+ *
+ * macro to flag unimplemented blocks
+ */
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+/************************************************************************
+ * *
+ * Memory debug interface *
+ * *
+ ************************************************************************/
+
+#if 0
+extern void xmlMemFree(void *ptr);
+extern void *xmlMemMalloc(size_t size);
+extern void *xmlMemRealloc(void *ptr, size_t size);
+extern char *xmlMemoryStrdup(const char *str);
+#endif
+
+static int libxmlMemoryDebugActivated = 0;
+static long libxmlMemoryAllocatedBase = 0;
+
+static int libxmlMemoryDebug = 0;
+static xmlFreeFunc freeFunc = NULL;
+static xmlMallocFunc mallocFunc = NULL;
+static xmlReallocFunc reallocFunc = NULL;
+static xmlStrdupFunc strdupFunc = NULL;
+
+PyObject *
+libxml_xmlDebugMemory(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ int activate;
+ PyObject *py_retval;
+ long ret;
+
+ if (!PyArg_ParseTuple(args, (char *) "i:xmlDebugMemory", &activate))
+ return (NULL);
+
+#ifdef DEBUG_MEMORY
+ printf("libxml_xmlDebugMemory(%d) called\n", activate);
+#endif
+
+ if (activate != 0) {
+ if (libxmlMemoryDebug == 0) {
+ /*
+ * First initialize the library and grab the old memory handlers
+ * and switch the library to memory debugging
+ */
+ xmlMemGet((xmlFreeFunc *) & freeFunc,
+ (xmlMallocFunc *) & mallocFunc,
+ (xmlReallocFunc *) & reallocFunc,
+ (xmlStrdupFunc *) & strdupFunc);
+ if ((freeFunc == xmlMemFree) && (mallocFunc == xmlMemMalloc) &&
+ (reallocFunc == xmlMemRealloc) &&
+ (strdupFunc == xmlMemoryStrdup)) {
+ libxmlMemoryAllocatedBase = xmlMemUsed();
+ } else {
+ ret = (long) xmlMemSetup(xmlMemFree, xmlMemMalloc,
+ xmlMemRealloc, xmlMemoryStrdup);
+ if (ret < 0)
+ goto error;
+ libxmlMemoryAllocatedBase = xmlMemUsed();
+ }
+ xmlInitParser();
+ ret = 0;
+ } else if (libxmlMemoryDebugActivated == 0) {
+ libxmlMemoryAllocatedBase = xmlMemUsed();
+ ret = 0;
+ } else {
+ ret = xmlMemUsed() - libxmlMemoryAllocatedBase;
+ }
+ libxmlMemoryDebug = 1;
+ libxmlMemoryDebugActivated = 1;
+ } else {
+ if (libxmlMemoryDebugActivated == 1)
+ ret = xmlMemUsed() - libxmlMemoryAllocatedBase;
+ else
+ ret = 0;
+ libxmlMemoryDebugActivated = 0;
+ }
+ error:
+ py_retval = libxml_longWrap(ret);
+ return (py_retval);
+}
+
+PyObject *
+libxml_xmlDumpMemory(ATTRIBUTE_UNUSED PyObject * self,
+ ATTRIBUTE_UNUSED PyObject * args)
+{
+
+ if (libxmlMemoryDebug != 0)
+ xmlMemoryDump();
+ Py_INCREF(Py_None);
+ return (Py_None);
+}
+
+/************************************************************************
+ * *
+ * Handling Python FILE I/O at the C level *
+ * The raw I/O attack diectly the File objects, while the *
+ * other routines address the ioWrapper instance instead *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlPythonFileCloseUnref:
+ * @context: the I/O context
+ *
+ * Close an I/O channel
+ */
+static int
+xmlPythonFileCloseRaw (void * context) {
+ PyObject *file, *ret;
+
+#ifdef DEBUG_FILES
+ printf("xmlPythonFileCloseUnref\n");
+#endif
+ file = (PyObject *) context;
+ if (file == NULL) return(-1);
+ ret = PyEval_CallMethod(file, (char *) "close", (char *) "()");
+ if (ret != NULL) {
+ Py_DECREF(ret);
+ }
+ Py_DECREF(file);
+ return(0);
+}
+
+/**
+ * xmlPythonFileReadRaw:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to write
+ *
+ * Read @len bytes to @buffer from the Python file in the I/O channel
+ *
+ * Returns the number of bytes read
+ */
+static int
+xmlPythonFileReadRaw (void * context, char * buffer, int len) {
+ PyObject *file;
+ PyObject *ret;
+ int lenread = -1;
+ char *data;
+
+#ifdef DEBUG_FILES
+ printf("xmlPythonFileReadRaw: %d\n", len);
+#endif
+ file = (PyObject *) context;
+ if (file == NULL) return(-1);
+ ret = PyEval_CallMethod(file, (char *) "read", (char *) "(i)", len);
+ if (ret == NULL) {
+ printf("xmlPythonFileReadRaw: result is NULL\n");
+ return(-1);
+ } else if (PyString_Check(ret)) {
+ lenread = PyString_Size(ret);
+ data = PyString_AsString(ret);
+ if (lenread > len)
+ memcpy(buffer, data, len);
+ else
+ memcpy(buffer, data, lenread);
+ Py_DECREF(ret);
+ } else {
+ printf("xmlPythonFileReadRaw: result is not a String\n");
+ Py_DECREF(ret);
+ }
+ return(lenread);
+}
+
+/**
+ * xmlPythonFileRead:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to write
+ *
+ * Read @len bytes to @buffer from the I/O channel.
+ *
+ * Returns the number of bytes read
+ */
+static int
+xmlPythonFileRead (void * context, char * buffer, int len) {
+ PyObject *file;
+ PyObject *ret;
+ int lenread = -1;
+ char *data;
+
+#ifdef DEBUG_FILES
+ printf("xmlPythonFileRead: %d\n", len);
+#endif
+ file = (PyObject *) context;
+ if (file == NULL) return(-1);
+ ret = PyEval_CallMethod(file, (char *) "io_read", (char *) "(i)", len);
+ if (ret == NULL) {
+ printf("xmlPythonFileRead: result is NULL\n");
+ return(-1);
+ } else if (PyString_Check(ret)) {
+ lenread = PyString_Size(ret);
+ data = PyString_AsString(ret);
+ if (lenread > len)
+ memcpy(buffer, data, len);
+ else
+ memcpy(buffer, data, lenread);
+ Py_DECREF(ret);
+ } else {
+ printf("xmlPythonFileRead: result is not a String\n");
+ Py_DECREF(ret);
+ }
+ return(lenread);
+}
+
+/**
+ * xmlFileWrite:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to write
+ *
+ * Write @len bytes from @buffer to the I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+static int
+xmlPythonFileWrite (void * context, const char * buffer, int len) {
+ PyObject *file;
+ PyObject *string;
+ PyObject *ret = NULL;
+ int written = -1;
+
+#ifdef DEBUG_FILES
+ printf("xmlPythonFileWrite: %d\n", len);
+#endif
+ file = (PyObject *) context;
+ if (file == NULL) return(-1);
+ string = PyString_FromStringAndSize(buffer, len);
+ if (string == NULL) return(-1);
+ if (PyObject_HasAttrString(file, (char *) "io_write")) {
+ ret = PyEval_CallMethod(file, (char *) "io_write", (char *) "(O)",
+ string);
+ } else if (PyObject_HasAttrString(file, (char *) "write")) {
+ ret = PyEval_CallMethod(file, (char *) "write", (char *) "(O)",
+ string);
+ }
+ Py_DECREF(string);
+ if (ret == NULL) {
+ printf("xmlPythonFileWrite: result is NULL\n");
+ return(-1);
+ } else if (PyInt_Check(ret)) {
+ written = (int) PyInt_AsLong(ret);
+ Py_DECREF(ret);
+ } else if (ret == Py_None) {
+ written = len;
+ Py_DECREF(ret);
+ } else {
+ printf("xmlPythonFileWrite: result is not an Int nor None\n");
+ Py_DECREF(ret);
+ }
+ return(written);
+}
+
+/**
+ * xmlPythonFileClose:
+ * @context: the I/O context
+ *
+ * Close an I/O channel
+ */
+static int
+xmlPythonFileClose (void * context) {
+ PyObject *file, *ret = NULL;
+
+#ifdef DEBUG_FILES
+ printf("xmlPythonFileClose\n");
+#endif
+ file = (PyObject *) context;
+ if (file == NULL) return(-1);
+ if (PyObject_HasAttrString(file, (char *) "io_close")) {
+ ret = PyEval_CallMethod(file, (char *) "io_close", (char *) "()");
+ } else if (PyObject_HasAttrString(file, (char *) "flush")) {
+ ret = PyEval_CallMethod(file, (char *) "flush", (char *) "()");
+ }
+ if (ret != NULL) {
+ Py_DECREF(ret);
+ }
+ return(0);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlOutputBufferCreatePythonFile:
+ * @file: a PyFile_Type
+ * @encoder: the encoding converter or NULL
+ *
+ * Create a buffered output for the progressive saving to a PyFile_Type
+ * buffered C I/O
+ *
+ * Returns the new parser output or NULL
+ */
+static xmlOutputBufferPtr
+xmlOutputBufferCreatePythonFile(PyObject *file,
+ xmlCharEncodingHandlerPtr encoder) {
+ xmlOutputBufferPtr ret;
+
+ if (file == NULL) return(NULL);
+
+ ret = xmlAllocOutputBuffer(encoder);
+ if (ret != NULL) {
+ ret->context = file;
+ /* Py_INCREF(file); */
+ ret->writecallback = xmlPythonFileWrite;
+ ret->closecallback = xmlPythonFileClose;
+ }
+
+ return(ret);
+}
+
+PyObject *
+libxml_xmlCreateOutputBuffer(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+ PyObject *py_retval;
+ PyObject *file;
+ xmlChar *encoding;
+ xmlCharEncodingHandlerPtr handler = NULL;
+ xmlOutputBufferPtr buffer;
+
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlOutputBufferCreate",
+ &file, &encoding))
+ return(NULL);
+ if ((encoding != NULL) && (encoding[0] != 0)) {
+ handler = xmlFindCharEncodingHandler((const char *) encoding);
+ }
+ buffer = xmlOutputBufferCreatePythonFile(file, handler);
+ if (buffer == NULL)
+ printf("libxml_xmlCreateOutputBuffer: buffer == NULL\n");
+ py_retval = libxml_xmlOutputBufferPtrWrap(buffer);
+ return(py_retval);
+}
+
+/**
+ * libxml_outputBufferGetPythonFile:
+ * @buffer: the I/O buffer
+ *
+ * read the Python I/O from the CObject
+ *
+ * Returns the new parser output or NULL
+ */
+static PyObject *
+libxml_outputBufferGetPythonFile(ATTRIBUTE_UNUSED PyObject *self,
+ PyObject *args) {
+ PyObject *buffer;
+ PyObject *file;
+ xmlOutputBufferPtr obj;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:outputBufferGetPythonFile",
+ &buffer))
+ return(NULL);
+
+ obj = PyoutputBuffer_Get(buffer);
+ if (obj == NULL) {
+ fprintf(stderr,
+ "outputBufferGetPythonFile: obj == NULL\n");
+ Py_INCREF(Py_None);
+ return(Py_None);
+ }
+ if (obj->closecallback != xmlPythonFileClose) {
+ fprintf(stderr,
+ "outputBufferGetPythonFile: not a python file wrapper\n");
+ Py_INCREF(Py_None);
+ return(Py_None);
+ }
+ file = (PyObject *) obj->context;
+ if (file == NULL) {
+ Py_INCREF(Py_None);
+ return(Py_None);
+ }
+ Py_INCREF(file);
+ return(file);
+}
+
+static PyObject *
+libxml_xmlOutputBufferClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlOutputBufferPtr out;
+ PyObject *pyobj_out;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlOutputBufferClose", &pyobj_out))
+ return(NULL);
+ out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
+
+ c_retval = xmlOutputBufferClose(out);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+static PyObject *
+libxml_xmlOutputBufferFlush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlOutputBufferPtr out;
+ PyObject *pyobj_out;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlOutputBufferFlush", &pyobj_out))
+ return(NULL);
+ out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
+
+ c_retval = xmlOutputBufferFlush(out);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+
+/**
+ * xmlParserInputBufferCreatePythonFile:
+ * @file: a PyFile_Type
+ * @encoder: the encoding converter or NULL
+ *
+ * Create a buffered output for the progressive saving to a PyFile_Type
+ * buffered C I/O
+ *
+ * Returns the new parser output or NULL
+ */
+static xmlParserInputBufferPtr
+xmlParserInputBufferCreatePythonFile(PyObject *file,
+ xmlCharEncoding encoding) {
+ xmlParserInputBufferPtr ret;
+
+ if (file == NULL) return(NULL);
+
+ ret = xmlAllocParserInputBuffer(encoding);
+ if (ret != NULL) {
+ ret->context = file;
+ /* Py_INCREF(file); */
+ ret->readcallback = xmlPythonFileRead;
+ ret->closecallback = xmlPythonFileClose;
+ }
+
+ return(ret);
+}
+
+PyObject *
+libxml_xmlCreateInputBuffer(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+ PyObject *py_retval;
+ PyObject *file;
+ xmlChar *encoding;
+ xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
+ xmlParserInputBufferPtr buffer;
+
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlParserInputBufferCreate",
+ &file, &encoding))
+ return(NULL);
+ if ((encoding != NULL) && (encoding[0] != 0)) {
+ enc = xmlParseCharEncoding((const char *) encoding);
+ }
+ buffer = xmlParserInputBufferCreatePythonFile(file, enc);
+ if (buffer == NULL)
+ printf("libxml_xmlParserInputBufferCreate: buffer == NULL\n");
+ py_retval = libxml_xmlParserInputBufferPtrWrap(buffer);
+ return(py_retval);
+}
+
+/************************************************************************
+ * *
+ * Providing the resolver at the Python level *
+ * *
+ ************************************************************************/
+
+static xmlExternalEntityLoader defaultExternalEntityLoader = NULL;
+static PyObject *pythonExternalEntityLoaderObjext;
+
+static xmlParserInputPtr
+pythonExternalEntityLoader(const char *URL, const char *ID,
+ xmlParserCtxtPtr ctxt) {
+ xmlParserInputPtr result = NULL;
+ if (pythonExternalEntityLoaderObjext != NULL) {
+ PyObject *ret;
+ PyObject *ctxtobj;
+
+ ctxtobj = libxml_xmlParserCtxtPtrWrap(ctxt);
+#ifdef DEBUG_LOADER
+ printf("pythonExternalEntityLoader: ready to call\n");
+#endif
+
+ ret = PyObject_CallFunction(pythonExternalEntityLoaderObjext,
+ (char *) "(ssO)", URL, ID, ctxtobj);
+ Py_XDECREF(ctxtobj);
+#ifdef DEBUG_LOADER
+ printf("pythonExternalEntityLoader: result ");
+ PyObject_Print(ret, stderr, 0);
+ printf("\n");
+#endif
+
+ if (ret != NULL) {
+ if (PyObject_HasAttrString(ret, (char *) "read")) {
+ xmlParserInputBufferPtr buf;
+
+ buf = xmlAllocParserInputBuffer(XML_CHAR_ENCODING_NONE);
+ if (buf != NULL) {
+ buf->context = ret;
+ buf->readcallback = xmlPythonFileReadRaw;
+ buf->closecallback = xmlPythonFileCloseRaw;
+ result = xmlNewIOInputStream(ctxt, buf,
+ XML_CHAR_ENCODING_NONE);
+ }
+ } else {
+ printf("pythonExternalEntityLoader: can't read\n");
+ }
+ if (result == NULL) {
+ Py_DECREF(ret);
+ } else if (URL != NULL) {
+ result->filename = (char *) xmlStrdup((const xmlChar *)URL);
+ result->directory = xmlParserGetDirectory((const char *) URL);
+ }
+ }
+ }
+ if ((result == NULL) && (defaultExternalEntityLoader != NULL)) {
+ result = defaultExternalEntityLoader(URL, ID, ctxt);
+ }
+ return(result);
+}
+
+PyObject *
+libxml_xmlSetEntityLoader(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+ PyObject *py_retval;
+ PyObject *loader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:libxml_xmlSetEntityLoader",
+ &loader))
+ return(NULL);
+
+#ifdef DEBUG_LOADER
+ printf("libxml_xmlSetEntityLoader\n");
+#endif
+ if (defaultExternalEntityLoader == NULL)
+ defaultExternalEntityLoader = xmlGetExternalEntityLoader();
+
+ pythonExternalEntityLoaderObjext = loader;
+ xmlSetExternalEntityLoader(pythonExternalEntityLoader);
+
+ py_retval = PyInt_FromLong(0);
+ return(py_retval);
+}
+
+
+/************************************************************************
+ * *
+ * Handling SAX/xmllib/sgmlop callback interfaces *
+ * *
+ ************************************************************************/
+
+static void
+pythonStartElement(void *user_data, const xmlChar * name,
+ const xmlChar ** attrs)
+{
+ int i;
+ PyObject *handler;
+ PyObject *dict;
+ PyObject *attrname;
+ PyObject *attrvalue;
+ PyObject *result = NULL;
+ int type = 0;
+
+#ifdef DEBUG_SAX
+ printf("pythonStartElement(%s) called\n", name);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "startElement"))
+ type = 1;
+ else if (PyObject_HasAttrString(handler, (char *) "start"))
+ type = 2;
+ if (type != 0) {
+ /*
+ * the xmllib interface always generate a dictionnary,
+ * possibly empty
+ */
+ if ((attrs == NULL) && (type == 1)) {
+ Py_XINCREF(Py_None);
+ dict = Py_None;
+ } else if (attrs == NULL) {
+ dict = PyDict_New();
+ } else {
+ dict = PyDict_New();
+ for (i = 0; attrs[i] != NULL; i++) {
+ attrname = PyString_FromString((char *) attrs[i]);
+ i++;
+ if (attrs[i] != NULL) {
+ attrvalue = PyString_FromString((char *) attrs[i]);
+ } else {
+ Py_XINCREF(Py_None);
+ attrvalue = Py_None;
+ }
+ PyDict_SetItem(dict, attrname, attrvalue);
+ }
+ }
+
+ if (type == 1)
+ result = PyObject_CallMethod(handler, (char *) "startElement",
+ (char *) "sO", name, dict);
+ else if (type == 2)
+ result = PyObject_CallMethod(handler, (char *) "start",
+ (char *) "sO", name, dict);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(dict);
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonStartDocument(void *user_data)
+{
+ PyObject *handler;
+ PyObject *result;
+
+#ifdef DEBUG_SAX
+ printf("pythonStartDocument() called\n");
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "startDocument")) {
+ result =
+ PyObject_CallMethod(handler, (char *) "startDocument", NULL);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonEndDocument(void *user_data)
+{
+ PyObject *handler;
+ PyObject *result;
+
+#ifdef DEBUG_SAX
+ printf("pythonEndDocument() called\n");
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "endDocument")) {
+ result =
+ PyObject_CallMethod(handler, (char *) "endDocument", NULL);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+ /*
+ * The reference to the handler is released there
+ */
+ Py_XDECREF(handler);
+}
+
+static void
+pythonEndElement(void *user_data, const xmlChar * name)
+{
+ PyObject *handler;
+ PyObject *result;
+
+#ifdef DEBUG_SAX
+ printf("pythonEndElement(%s) called\n", name);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "endElement")) {
+ result = PyObject_CallMethod(handler, (char *) "endElement",
+ (char *) "s", name);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ } else if (PyObject_HasAttrString(handler, (char *) "end")) {
+ result = PyObject_CallMethod(handler, (char *) "end",
+ (char *) "s", name);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonReference(void *user_data, const xmlChar * name)
+{
+ PyObject *handler;
+ PyObject *result;
+
+#ifdef DEBUG_SAX
+ printf("pythonReference(%s) called\n", name);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "reference")) {
+ result = PyObject_CallMethod(handler, (char *) "reference",
+ (char *) "s", name);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonCharacters(void *user_data, const xmlChar * ch, int len)
+{
+ PyObject *handler;
+ PyObject *result = NULL;
+ int type = 0;
+
+#ifdef DEBUG_SAX
+ printf("pythonCharacters(%s, %d) called\n", ch, len);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "characters"))
+ type = 1;
+ else if (PyObject_HasAttrString(handler, (char *) "data"))
+ type = 2;
+ if (type != 0) {
+ if (type == 1)
+ result = PyObject_CallMethod(handler, (char *) "characters",
+ (char *) "s#", ch, len);
+ else if (type == 2)
+ result = PyObject_CallMethod(handler, (char *) "data",
+ (char *) "s#", ch, len);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonIgnorableWhitespace(void *user_data, const xmlChar * ch, int len)
+{
+ PyObject *handler;
+ PyObject *result = NULL;
+ int type = 0;
+
+#ifdef DEBUG_SAX
+ printf("pythonIgnorableWhitespace(%s, %d) called\n", ch, len);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "ignorableWhitespace"))
+ type = 1;
+ else if (PyObject_HasAttrString(handler, (char *) "data"))
+ type = 2;
+ if (type != 0) {
+ if (type == 1)
+ result =
+ PyObject_CallMethod(handler,
+ (char *) "ignorableWhitespace",
+ (char *) "s#", ch, len);
+ else if (type == 2)
+ result =
+ PyObject_CallMethod(handler, (char *) "data",
+ (char *) "s#", ch, len);
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonProcessingInstruction(void *user_data,
+ const xmlChar * target, const xmlChar * data)
+{
+ PyObject *handler;
+ PyObject *result;
+
+#ifdef DEBUG_SAX
+ printf("pythonProcessingInstruction(%s, %s) called\n", target, data);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "processingInstruction")) {
+ result = PyObject_CallMethod(handler, (char *)
+ "processingInstruction",
+ (char *) "ss", target, data);
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonComment(void *user_data, const xmlChar * value)
+{
+ PyObject *handler;
+ PyObject *result;
+
+#ifdef DEBUG_SAX
+ printf("pythonComment(%s) called\n", value);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "comment")) {
+ result =
+ PyObject_CallMethod(handler, (char *) "comment", (char *) "s",
+ value);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonWarning(void *user_data, const char *msg, ...)
+{
+ PyObject *handler;
+ PyObject *result;
+ va_list args;
+ char buf[1024];
+
+#ifdef DEBUG_SAX
+ printf("pythonWarning(%s) called\n", msg);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "warning")) {
+ va_start(args, msg);
+ vsnprintf(buf, 1023, msg, args);
+ va_end(args);
+ buf[1023] = 0;
+ result =
+ PyObject_CallMethod(handler, (char *) "warning", (char *) "s",
+ buf);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonError(void *user_data, const char *msg, ...)
+{
+ PyObject *handler;
+ PyObject *result;
+ va_list args;
+ char buf[1024];
+
+#ifdef DEBUG_SAX
+ printf("pythonError(%s) called\n", msg);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "error")) {
+ va_start(args, msg);
+ vsnprintf(buf, 1023, msg, args);
+ va_end(args);
+ buf[1023] = 0;
+ result =
+ PyObject_CallMethod(handler, (char *) "error", (char *) "s",
+ buf);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonFatalError(void *user_data, const char *msg, ...)
+{
+ PyObject *handler;
+ PyObject *result;
+ va_list args;
+ char buf[1024];
+
+#ifdef DEBUG_SAX
+ printf("pythonFatalError(%s) called\n", msg);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "fatalError")) {
+ va_start(args, msg);
+ vsnprintf(buf, 1023, msg, args);
+ va_end(args);
+ buf[1023] = 0;
+ result =
+ PyObject_CallMethod(handler, (char *) "fatalError",
+ (char *) "s", buf);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonCdataBlock(void *user_data, const xmlChar * ch, int len)
+{
+ PyObject *handler;
+ PyObject *result = NULL;
+ int type = 0;
+
+#ifdef DEBUG_SAX
+ printf("pythonCdataBlock(%s, %d) called\n", ch, len);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "cdataBlock"))
+ type = 1;
+ else if (PyObject_HasAttrString(handler, (char *) "cdata"))
+ type = 2;
+ if (type != 0) {
+ if (type == 1)
+ result =
+ PyObject_CallMethod(handler, (char *) "cdataBlock",
+ (char *) "s#", ch, len);
+ else if (type == 2)
+ result =
+ PyObject_CallMethod(handler, (char *) "cdata",
+ (char *) "s#", ch, len);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonExternalSubset(void *user_data,
+ const xmlChar * name,
+ const xmlChar * externalID, const xmlChar * systemID)
+{
+ PyObject *handler;
+ PyObject *result;
+
+#ifdef DEBUG_SAX
+ printf("pythonExternalSubset(%s, %s, %s) called\n",
+ name, externalID, systemID);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "externalSubset")) {
+ result =
+ PyObject_CallMethod(handler, (char *) "externalSubset",
+ (char *) "sss", name, externalID,
+ systemID);
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonEntityDecl(void *user_data,
+ const xmlChar * name,
+ int type,
+ const xmlChar * publicId,
+ const xmlChar * systemId, xmlChar * content)
+{
+ PyObject *handler;
+ PyObject *result;
+
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "entityDecl")) {
+ result = PyObject_CallMethod(handler, (char *) "entityDecl",
+ (char *) "sisss", name, type,
+ publicId, systemId, content);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+
+
+static void
+
+pythonNotationDecl(void *user_data,
+ const xmlChar * name,
+ const xmlChar * publicId, const xmlChar * systemId)
+{
+ PyObject *handler;
+ PyObject *result;
+
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "notationDecl")) {
+ result = PyObject_CallMethod(handler, (char *) "notationDecl",
+ (char *) "sss", name, publicId,
+ systemId);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonAttributeDecl(void *user_data,
+ const xmlChar * elem,
+ const xmlChar * name,
+ int type,
+ int def,
+ const xmlChar * defaultValue, xmlEnumerationPtr tree)
+{
+ PyObject *handler;
+ PyObject *nameList;
+ PyObject *newName;
+ xmlEnumerationPtr node;
+ PyObject *result;
+ int count;
+
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "attributeDecl")) {
+ count = 0;
+ for (node = tree; node != NULL; node = node->next) {
+ count++;
+ }
+ nameList = PyList_New(count);
+ count = 0;
+ for (node = tree; node != NULL; node = node->next) {
+ newName = PyString_FromString((char *) node->name);
+ PyList_SetItem(nameList, count, newName);
+ count++;
+ }
+ result = PyObject_CallMethod(handler, (char *) "attributeDecl",
+ (char *) "ssiisO", elem, name, type,
+ def, defaultValue, nameList);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(nameList);
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonElementDecl(void *user_data,
+ const xmlChar * name,
+ int type, ATTRIBUTE_UNUSED xmlElementContentPtr content)
+{
+ PyObject *handler;
+ PyObject *obj;
+ PyObject *result;
+
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "elementDecl")) {
+ /* TODO: wrap in an elementContent object */
+ printf
+ ("pythonElementDecl: xmlElementContentPtr wrapper missing !\n");
+ obj = Py_None;
+ /* Py_XINCREF(Py_None); isn't the reference just borrowed ??? */
+ result = PyObject_CallMethod(handler, (char *) "elementDecl",
+ (char *) "siO", name, type, obj);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonUnparsedEntityDecl(void *user_data,
+ const xmlChar * name,
+ const xmlChar * publicId,
+ const xmlChar * systemId,
+ const xmlChar * notationName)
+{
+ PyObject *handler;
+ PyObject *result;
+
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "unparsedEntityDecl")) {
+ result =
+ PyObject_CallMethod(handler, (char *) "unparsedEntityDecl",
+ (char *) "ssss", name, publicId, systemId,
+ notationName);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static void
+pythonInternalSubset(void *user_data, const xmlChar * name,
+ const xmlChar * ExternalID, const xmlChar * SystemID)
+{
+ PyObject *handler;
+ PyObject *result;
+
+#ifdef DEBUG_SAX
+ printf("pythonInternalSubset(%s, %s, %s) called\n",
+ name, ExternalID, SystemID);
+#endif
+ handler = (PyObject *) user_data;
+ if (PyObject_HasAttrString(handler, (char *) "internalSubset")) {
+ result = PyObject_CallMethod(handler, (char *) "internalSubset",
+ (char *) "sss", name, ExternalID,
+ SystemID);
+ if (PyErr_Occurred())
+ PyErr_Print();
+ Py_XDECREF(result);
+ }
+}
+
+static xmlSAXHandler pythonSaxHandler = {
+ pythonInternalSubset,
+ NULL, /* TODO pythonIsStandalone, */
+ NULL, /* TODO pythonHasInternalSubset, */
+ NULL, /* TODO pythonHasExternalSubset, */
+ NULL, /* TODO pythonResolveEntity, */
+ NULL, /* TODO pythonGetEntity, */
+ pythonEntityDecl,
+ pythonNotationDecl,
+ pythonAttributeDecl,
+ pythonElementDecl,
+ pythonUnparsedEntityDecl,
+ NULL, /* OBSOLETED pythonSetDocumentLocator, */
+ pythonStartDocument,
+ pythonEndDocument,
+ pythonStartElement,
+ pythonEndElement,
+ pythonReference,
+ pythonCharacters,
+ pythonIgnorableWhitespace,
+ pythonProcessingInstruction,
+ pythonComment,
+ pythonWarning,
+ pythonError,
+ pythonFatalError,
+ NULL, /* TODO pythonGetParameterEntity, */
+ pythonCdataBlock,
+ pythonExternalSubset,
+ 1,
+ NULL, /* TODO mograte to SAX2 */
+ NULL,
+ NULL,
+ NULL
+};
+
+/************************************************************************
+ * *
+ * Handling of specific parser context *
+ * *
+ ************************************************************************/
+
+PyObject *
+libxml_xmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self,
+ PyObject * args)
+{
+ const char *chunk;
+ int size;
+ const char *URI;
+ PyObject *pyobj_SAX = NULL;
+ xmlSAXHandlerPtr SAX = NULL;
+ xmlParserCtxtPtr ret;
+ PyObject *pyret;
+
+ if (!PyArg_ParseTuple
+ (args, (char *) "Oziz:xmlCreatePushParser", &pyobj_SAX, &chunk,
+ &size, &URI))
+ return (NULL);
+
+#ifdef DEBUG
+ printf("libxml_xmlCreatePushParser(%p, %s, %d, %s) called\n",
+ pyobj_SAX, chunk, size, URI);
+#endif
+ if (pyobj_SAX != Py_None) {
+ SAX = &pythonSaxHandler;
+ Py_INCREF(pyobj_SAX);
+ /* The reference is released in pythonEndDocument() */
+ }
+ ret = xmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI);
+ pyret = libxml_xmlParserCtxtPtrWrap(ret);
+ return (pyret);
+}
+
+PyObject *
+libxml_htmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self,
+ PyObject * args)
+{
+ const char *chunk;
+ int size;
+ const char *URI;
+ PyObject *pyobj_SAX = NULL;
+ xmlSAXHandlerPtr SAX = NULL;
+ xmlParserCtxtPtr ret;
+ PyObject *pyret;
+
+ if (!PyArg_ParseTuple
+ (args, (char *) "Oziz:htmlCreatePushParser", &pyobj_SAX, &chunk,
+ &size, &URI))
+ return (NULL);
+
+#ifdef DEBUG
+ printf("libxml_htmlCreatePushParser(%p, %s, %d, %s) called\n",
+ pyobj_SAX, chunk, size, URI);
+#endif
+ if (pyobj_SAX != Py_None) {
+ SAX = &pythonSaxHandler;
+ Py_INCREF(pyobj_SAX);
+ /* The reference is released in pythonEndDocument() */
+ }
+ ret = htmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI,
+ XML_CHAR_ENCODING_NONE);
+ pyret = libxml_xmlParserCtxtPtrWrap(ret);
+ return (pyret);
+}
+
+PyObject *
+libxml_xmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ int recover;
+ const char *URI;
+ PyObject *pyobj_SAX = NULL;
+ xmlSAXHandlerPtr SAX = NULL;
+
+ if (!PyArg_ParseTuple(args, (char *) "Osi:xmlSAXParseFile", &pyobj_SAX,
+ &URI, &recover))
+ return (NULL);
+
+#ifdef DEBUG
+ printf("libxml_xmlSAXParseFile(%p, %s, %d) called\n",
+ pyobj_SAX, URI, recover);
+#endif
+ if (pyobj_SAX == Py_None) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ SAX = &pythonSaxHandler;
+ Py_INCREF(pyobj_SAX);
+ /* The reference is released in pythonEndDocument() */
+ xmlSAXParseFileWithData(SAX, URI, recover, pyobj_SAX);
+ Py_INCREF(Py_None);
+ return (Py_None);
+}
+
+PyObject *
+libxml_htmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ const char *URI;
+ const char *encoding;
+ PyObject *pyobj_SAX = NULL;
+ xmlSAXHandlerPtr SAX = NULL;
+
+ if (!PyArg_ParseTuple
+ (args, (char *) "Osz:htmlSAXParseFile", &pyobj_SAX, &URI,
+ &encoding))
+ return (NULL);
+
+#ifdef DEBUG
+ printf("libxml_htmlSAXParseFile(%p, %s, %s) called\n",
+ pyobj_SAX, URI, encoding);
+#endif
+ if (pyobj_SAX == Py_None) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ SAX = &pythonSaxHandler;
+ Py_INCREF(pyobj_SAX);
+ /* The reference is released in pythonEndDocument() */
+ htmlSAXParseFile(URI, encoding, SAX, pyobj_SAX);
+ Py_INCREF(Py_None);
+ return (Py_None);
+}
+
+/************************************************************************
+ * *
+ * Error message callback *
+ * *
+ ************************************************************************/
+
+static PyObject *libxml_xmlPythonErrorFuncHandler = NULL;
+static PyObject *libxml_xmlPythonErrorFuncCtxt = NULL;
+
+/* helper to build a xmlMalloc'ed string from a format and va_list */
+static char *
+libxml_buildMessage(const char *msg, va_list ap)
+{
+ int size;
+ int chars;
+ char *larger;
+ char *str;
+
+ str = (char *) xmlMalloc(150);
+ if (str == NULL)
+ return NULL;
+
+ size = 150;
+
+ while (1) {
+ chars = vsnprintf(str, size, msg, ap);
+ if ((chars > -1) && (chars < size))
+ break;
+ if (chars > -1)
+ size += chars + 1;
+ else
+ size += 100;
+ if ((larger = (char *) xmlRealloc(str, size)) == NULL) {
+ xmlFree(str);
+ return NULL;
+ }
+ str = larger;
+ }
+
+ return str;
+}
+
+static void
+libxml_xmlErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, const char *msg,
+ ...)
+{
+ va_list ap;
+ char *str;
+ PyObject *list;
+ PyObject *message;
+ PyObject *result;
+
+#ifdef DEBUG_ERROR
+ printf("libxml_xmlErrorFuncHandler(%p, %s, ...) called\n", ctx, msg);
+#endif
+
+
+ if (libxml_xmlPythonErrorFuncHandler == NULL) {
+ va_start(ap, msg);
+ vfprintf(stderr, msg, ap);
+ va_end(ap);
+ } else {
+ va_start(ap, msg);
+ str = libxml_buildMessage(msg,ap);
+ va_end(ap);
+
+ list = PyTuple_New(2);
+ PyTuple_SetItem(list, 0, libxml_xmlPythonErrorFuncCtxt);
+ Py_XINCREF(libxml_xmlPythonErrorFuncCtxt);
+ message = libxml_charPtrWrap(str);
+ PyTuple_SetItem(list, 1, message);
+ result = PyEval_CallObject(libxml_xmlPythonErrorFuncHandler, list);
+ Py_XDECREF(list);
+ Py_XDECREF(result);
+ }
+}
+
+static void
+libxml_xmlErrorInitialize(void)
+{
+#ifdef DEBUG_ERROR
+ printf("libxml_xmlErrorInitialize() called\n");
+#endif
+ xmlSetGenericErrorFunc(NULL, libxml_xmlErrorFuncHandler);
+ xmlThrDefSetGenericErrorFunc(NULL, libxml_xmlErrorFuncHandler);
+}
+
+static PyObject *
+libxml_xmlRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self,
+ PyObject * args)
+{
+ PyObject *py_retval;
+ PyObject *pyobj_f;
+ PyObject *pyobj_ctx;
+
+ if (!PyArg_ParseTuple
+ (args, (char *) "OO:xmlRegisterErrorHandler", &pyobj_f,
+ &pyobj_ctx))
+ return (NULL);
+
+#ifdef DEBUG_ERROR
+ printf("libxml_registerXPathFunction(%p, %p) called\n", pyobj_ctx,
+ pyobj_f);
+#endif
+
+ if (libxml_xmlPythonErrorFuncHandler != NULL) {
+ Py_XDECREF(libxml_xmlPythonErrorFuncHandler);
+ }
+ if (libxml_xmlPythonErrorFuncCtxt != NULL) {
+ Py_XDECREF(libxml_xmlPythonErrorFuncCtxt);
+ }
+
+ Py_XINCREF(pyobj_ctx);
+ Py_XINCREF(pyobj_f);
+
+ /* TODO: check f is a function ! */
+ libxml_xmlPythonErrorFuncHandler = pyobj_f;
+ libxml_xmlPythonErrorFuncCtxt = pyobj_ctx;
+
+ py_retval = libxml_intWrap(1);
+ return (py_retval);
+}
+
+
+/************************************************************************
+ * *
+ * Per parserCtxt error handler *
+ * *
+ ************************************************************************/
+
+typedef struct
+{
+ PyObject *f;
+ PyObject *arg;
+} xmlParserCtxtPyCtxt;
+typedef xmlParserCtxtPyCtxt *xmlParserCtxtPyCtxtPtr;
+
+static void
+libxml_xmlParserCtxtGenericErrorFuncHandler(void *ctx, int severity, char *str)
+{
+ PyObject *list;
+ PyObject *result;
+ xmlParserCtxtPtr ctxt;
+ xmlParserCtxtPyCtxtPtr pyCtxt;
+
+#ifdef DEBUG_ERROR
+ printf("libxml_xmlParserCtxtGenericErrorFuncHandler(%p, %s, ...) called\n", ctx, msg);
+#endif
+
+ ctxt = (xmlParserCtxtPtr)ctx;
+ pyCtxt = (xmlParserCtxtPyCtxtPtr)ctxt->_private;
+
+ list = PyTuple_New(4);
+ PyTuple_SetItem(list, 0, pyCtxt->arg);
+ Py_XINCREF(pyCtxt->arg);
+ PyTuple_SetItem(list, 1, libxml_charPtrWrap(str));
+ PyTuple_SetItem(list, 2, libxml_intWrap(severity));
+ PyTuple_SetItem(list, 3, Py_None);
+ Py_INCREF(Py_None);
+ result = PyEval_CallObject(pyCtxt->f, list);
+ if (result == NULL)
+ {
+ /* TODO: manage for the exception to be propagated... */
+ PyErr_Print();
+ }
+ Py_XDECREF(list);
+ Py_XDECREF(result);
+}
+
+static void
+libxml_xmlParserCtxtErrorFuncHandler(void *ctx, const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_ERROR,libxml_buildMessage(msg,ap));
+ va_end(ap);
+}
+
+static void
+libxml_xmlParserCtxtWarningFuncHandler(void *ctx, const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_WARNING,libxml_buildMessage(msg,ap));
+ va_end(ap);
+}
+
+static void
+libxml_xmlParserCtxtValidityErrorFuncHandler(void *ctx, const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_ERROR,libxml_buildMessage(msg,ap));
+ va_end(ap);
+}
+
+static void
+libxml_xmlParserCtxtValidityWarningFuncHandler(void *ctx, const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ libxml_xmlParserCtxtGenericErrorFuncHandler(ctx,XML_PARSER_SEVERITY_VALIDITY_WARNING,libxml_buildMessage(msg,ap));
+ va_end(ap);
+}
+
+static PyObject *
+libxml_xmlParserCtxtSetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args)
+{
+ PyObject *py_retval;
+ xmlParserCtxtPtr ctxt;
+ xmlParserCtxtPyCtxtPtr pyCtxt;
+ PyObject *pyobj_ctxt;
+ PyObject *pyobj_f;
+ PyObject *pyobj_arg;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:xmlParserCtxtSetErrorHandler",
+ &pyobj_ctxt, &pyobj_f, &pyobj_arg))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+ if (ctxt->_private == NULL) {
+ pyCtxt = xmlMalloc(sizeof(xmlParserCtxtPyCtxt));
+ if (pyCtxt == NULL) {
+ py_retval = libxml_intWrap(-1);
+ return(py_retval);
+ }
+ memset(pyCtxt,0,sizeof(xmlParserCtxtPyCtxt));
+ ctxt->_private = pyCtxt;
+ }
+ else {
+ pyCtxt = (xmlParserCtxtPyCtxtPtr)ctxt->_private;
+ }
+ /* TODO: check f is a function ! */
+ Py_XDECREF(pyCtxt->f);
+ Py_XINCREF(pyobj_f);
+ pyCtxt->f = pyobj_f;
+ Py_XDECREF(pyCtxt->arg);
+ Py_XINCREF(pyobj_arg);
+ pyCtxt->arg = pyobj_arg;
+
+ if (pyobj_f != Py_None) {
+ ctxt->sax->error = libxml_xmlParserCtxtErrorFuncHandler;
+ ctxt->sax->warning = libxml_xmlParserCtxtWarningFuncHandler;
+ ctxt->vctxt.error = libxml_xmlParserCtxtValidityErrorFuncHandler;
+ ctxt->vctxt.warning = libxml_xmlParserCtxtValidityWarningFuncHandler;
+ }
+ else {
+ ctxt->sax->error = xmlParserError;
+ ctxt->vctxt.error = xmlParserValidityError;
+ ctxt->sax->warning = xmlParserWarning;
+ ctxt->vctxt.warning = xmlParserValidityWarning;
+ }
+
+ py_retval = libxml_intWrap(1);
+ return(py_retval);
+}
+
+static PyObject *
+libxml_xmlParserCtxtGetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args)
+{
+ PyObject *py_retval;
+ xmlParserCtxtPtr ctxt;
+ xmlParserCtxtPyCtxtPtr pyCtxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParserCtxtGetErrorHandler",
+ &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+ py_retval = PyTuple_New(2);
+ if (ctxt->_private != NULL) {
+ pyCtxt = (xmlParserCtxtPyCtxtPtr)ctxt->_private;
+
+ PyTuple_SetItem(py_retval, 0, pyCtxt->f);
+ Py_XINCREF(pyCtxt->f);
+ PyTuple_SetItem(py_retval, 1, pyCtxt->arg);
+ Py_XINCREF(pyCtxt->arg);
+ }
+ else {
+ /* no python error handler registered */
+ PyTuple_SetItem(py_retval, 0, Py_None);
+ Py_XINCREF(Py_None);
+ PyTuple_SetItem(py_retval, 1, Py_None);
+ Py_XINCREF(Py_None);
+ }
+ return(py_retval);
+}
+
+static PyObject *
+libxml_xmlFreeParserCtxt(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlParserCtxtPyCtxtPtr pyCtxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeParserCtxt", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ if (ctxt != NULL) {
+ pyCtxt = (xmlParserCtxtPyCtxtPtr)((xmlParserCtxtPtr)ctxt)->_private;
+ if (pyCtxt) {
+ Py_XDECREF(pyCtxt->f);
+ Py_XDECREF(pyCtxt->arg);
+ xmlFree(pyCtxt);
+ }
+ xmlFreeParserCtxt(ctxt);
+ }
+
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+/************************************************************************
+ * *
+ * Per xmlTextReader error handler *
+ * *
+ ************************************************************************/
+
+typedef struct
+{
+ PyObject *f;
+ PyObject *arg;
+} xmlTextReaderPyCtxt;
+typedef xmlTextReaderPyCtxt *xmlTextReaderPyCtxtPtr;
+
+static void
+libxml_xmlTextReaderErrorCallback(void *arg,
+ const char *msg,
+ int severity,
+ xmlTextReaderLocatorPtr locator)
+{
+ xmlTextReaderPyCtxt *pyCtxt = (xmlTextReaderPyCtxt *)arg;
+ PyObject *list;
+ PyObject *result;
+
+ list = PyTuple_New(4);
+ PyTuple_SetItem(list, 0, pyCtxt->arg);
+ Py_XINCREF(pyCtxt->arg);
+ PyTuple_SetItem(list, 1, libxml_charPtrConstWrap(msg));
+ PyTuple_SetItem(list, 2, libxml_intWrap(severity));
+ PyTuple_SetItem(list, 3, libxml_xmlTextReaderLocatorPtrWrap(locator));
+ result = PyEval_CallObject(pyCtxt->f, list);
+ if (result == NULL)
+ {
+ /* TODO: manage for the exception to be propagated... */
+ PyErr_Print();
+ }
+ Py_XDECREF(list);
+ Py_XDECREF(result);
+}
+
+static PyObject *
+libxml_xmlTextReaderSetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args)
+{
+ xmlTextReaderPtr reader;
+ xmlTextReaderPyCtxtPtr pyCtxt;
+ xmlTextReaderErrorFunc f;
+ void *arg;
+ PyObject *pyobj_reader;
+ PyObject *pyobj_f;
+ PyObject *pyobj_arg;
+ PyObject *py_retval;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:xmlTextReaderSetErrorHandler", &pyobj_reader, &pyobj_f, &pyobj_arg))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+ /* clear previous error handler */
+ xmlTextReaderGetErrorHandler(reader,&f,&arg);
+ if (arg != NULL) {
+ if (f == (xmlTextReaderErrorFunc) libxml_xmlTextReaderErrorCallback) {
+ /* ok, it's our error handler! */
+ pyCtxt = (xmlTextReaderPyCtxtPtr)arg;
+ Py_XDECREF(pyCtxt->f);
+ Py_XDECREF(pyCtxt->arg);
+ xmlFree(pyCtxt);
+ }
+ else {
+ /*
+ * there already an arg, and it's not ours,
+ * there is definitely something wrong going on here...
+ * we don't know how to free it, so we bail out...
+ */
+ py_retval = libxml_intWrap(-1);
+ return(py_retval);
+ }
+ }
+ xmlTextReaderSetErrorHandler(reader,NULL,NULL);
+ /* set new error handler */
+ if (pyobj_f != Py_None)
+ {
+ pyCtxt = (xmlTextReaderPyCtxtPtr)xmlMalloc(sizeof(xmlTextReaderPyCtxt));
+ if (pyCtxt == NULL) {
+ py_retval = libxml_intWrap(-1);
+ return(py_retval);
+ }
+ Py_XINCREF(pyobj_f);
+ pyCtxt->f = pyobj_f;
+ Py_XINCREF(pyobj_arg);
+ pyCtxt->arg = pyobj_arg;
+ xmlTextReaderSetErrorHandler(reader,
+ (xmlTextReaderErrorFunc) libxml_xmlTextReaderErrorCallback,
+ pyCtxt);
+ }
+
+ py_retval = libxml_intWrap(1);
+ return(py_retval);
+}
+
+static PyObject *
+libxml_xmlTextReaderGetErrorHandler(ATTRIBUTE_UNUSED PyObject *self, PyObject *args)
+{
+ xmlTextReaderPtr reader;
+ xmlTextReaderPyCtxtPtr pyCtxt;
+ xmlTextReaderErrorFunc f;
+ void *arg;
+ PyObject *pyobj_reader;
+ PyObject *py_retval;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderSetErrorHandler", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+ xmlTextReaderGetErrorHandler(reader,&f,&arg);
+ py_retval = PyTuple_New(2);
+ if (f == (xmlTextReaderErrorFunc)libxml_xmlTextReaderErrorCallback) {
+ /* ok, it's our error handler! */
+ pyCtxt = (xmlTextReaderPyCtxtPtr)arg;
+ PyTuple_SetItem(py_retval, 0, pyCtxt->f);
+ Py_XINCREF(pyCtxt->f);
+ PyTuple_SetItem(py_retval, 1, pyCtxt->arg);
+ Py_XINCREF(pyCtxt->arg);
+ }
+ else
+ {
+ /* f is null or it's not our error handler */
+ PyTuple_SetItem(py_retval, 0, Py_None);
+ Py_XINCREF(Py_None);
+ PyTuple_SetItem(py_retval, 1, Py_None);
+ Py_XINCREF(Py_None);
+ }
+ return(py_retval);
+}
+
+static PyObject *
+libxml_xmlFreeTextReader(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlTextReaderPyCtxtPtr pyCtxt;
+ xmlTextReaderErrorFunc f;
+ void *arg;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeTextReader", &pyobj_reader))
+ return(NULL);
+ if (!PyCObject_Check(pyobj_reader)) {
+ Py_INCREF(Py_None);
+ return(Py_None);
+ }
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+ if (reader == NULL) {
+ Py_INCREF(Py_None);
+ return(Py_None);
+ }
+
+ xmlTextReaderGetErrorHandler(reader,&f,&arg);
+ if (arg != NULL) {
+ if (f == (xmlTextReaderErrorFunc) libxml_xmlTextReaderErrorCallback) {
+ /* ok, it's our error handler! */
+ pyCtxt = (xmlTextReaderPyCtxtPtr)arg;
+ Py_XDECREF(pyCtxt->f);
+ Py_XDECREF(pyCtxt->arg);
+ xmlFree(pyCtxt);
+ }
+ /*
+ * else, something wrong happened, because the error handler is
+ * not owned by the python bindings...
+ */
+ }
+
+ xmlFreeTextReader(reader);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+/************************************************************************
+ * *
+ * XPath extensions *
+ * *
+ ************************************************************************/
+
+static int libxml_xpathCallbacksInitialized = 0;
+
+typedef struct libxml_xpathCallback {
+ xmlXPathContextPtr ctx;
+ xmlChar *name;
+ xmlChar *ns_uri;
+ PyObject *function;
+} libxml_xpathCallback, *libxml_xpathCallbackPtr;
+static libxml_xpathCallback libxml_xpathCallbacks[10];
+static int libxml_xpathCallbacksNb = 0;
+static int libxml_xpathCallbacksMax = 10;
+
+static void
+libxml_xmlXPathFuncCallback(xmlXPathParserContextPtr ctxt, int nargs)
+{
+ PyObject *list, *cur, *result;
+ xmlXPathObjectPtr obj;
+ xmlXPathContextPtr rctxt;
+ PyObject *current_function = NULL;
+ const xmlChar *name;
+ const xmlChar *ns_uri;
+ int i;
+
+ if (ctxt == NULL)
+ return;
+ rctxt = ctxt->context;
+ if (rctxt == NULL)
+ return;
+ name = rctxt->function;
+ ns_uri = rctxt->functionURI;
+#ifdef DEBUG_XPATH
+ printf("libxml_xmlXPathFuncCallback called name %s URI %s\n", name,
+ ns_uri);
+#endif
+
+ /*
+ * Find the function, it should be there it was there at lookup
+ */
+ for (i = 0; i < libxml_xpathCallbacksNb; i++) {
+ if ( /* TODO (ctxt == libxml_xpathCallbacks[i].ctx) && */
+ (xmlStrEqual(name, libxml_xpathCallbacks[i].name)) &&
+ (xmlStrEqual(ns_uri, libxml_xpathCallbacks[i].ns_uri))) {
+ current_function = libxml_xpathCallbacks[i].function;
+ }
+ }
+ if (current_function == NULL) {
+ printf
+ ("libxml_xmlXPathFuncCallback: internal error %s not found !\n",
+ name);
+ return;
+ }
+
+ list = PyTuple_New(nargs + 1);
+ PyTuple_SetItem(list, 0, libxml_xmlXPathParserContextPtrWrap(ctxt));
+ for (i = nargs - 1; i >= 0; i--) {
+ obj = valuePop(ctxt);
+ cur = libxml_xmlXPathObjectPtrWrap(obj);
+ PyTuple_SetItem(list, i + 1, cur);
+ }
+ result = PyEval_CallObject(current_function, list);
+ Py_DECREF(list);
+
+ obj = libxml_xmlXPathObjectPtrConvert(result);
+ valuePush(ctxt, obj);
+}
+
+static xmlXPathFunction
+libxml_xmlXPathFuncLookupFunc(void *ctxt, const xmlChar * name,
+ const xmlChar * ns_uri)
+{
+ int i;
+
+#ifdef DEBUG_XPATH
+ printf("libxml_xmlXPathFuncLookupFunc(%p, %s, %s) called\n",
+ ctxt, name, ns_uri);
+#endif
+ /*
+ * This is called once only. The address is then stored in the
+ * XPath expression evaluation, the proper object to call can
+ * then still be found using the execution context function
+ * and functionURI fields.
+ */
+ for (i = 0; i < libxml_xpathCallbacksNb; i++) {
+ if ((ctxt == libxml_xpathCallbacks[i].ctx) &&
+ (xmlStrEqual(name, libxml_xpathCallbacks[i].name)) &&
+ (xmlStrEqual(ns_uri, libxml_xpathCallbacks[i].ns_uri))) {
+ return (libxml_xmlXPathFuncCallback);
+ }
+ }
+ return (NULL);
+}
+
+static void
+libxml_xpathCallbacksInitialize(void)
+{
+ int i;
+
+ if (libxml_xpathCallbacksInitialized != 0)
+ return;
+
+#ifdef DEBUG_XPATH
+ printf("libxml_xpathCallbacksInitialized called\n");
+#endif
+
+ for (i = 0; i < libxml_xpathCallbacksMax; i++) {
+ libxml_xpathCallbacks[i].ctx = NULL;
+ libxml_xpathCallbacks[i].name = NULL;
+ libxml_xpathCallbacks[i].ns_uri = NULL;
+ libxml_xpathCallbacks[i].function = NULL;
+ }
+ libxml_xpathCallbacksInitialized = 1;
+}
+
+PyObject *
+libxml_xmlRegisterXPathFunction(ATTRIBUTE_UNUSED PyObject * self,
+ PyObject * args)
+{
+ PyObject *py_retval;
+ int c_retval = 0;
+ xmlChar *name;
+ xmlChar *ns_uri;
+ xmlXPathContextPtr ctx;
+ PyObject *pyobj_ctx;
+ PyObject *pyobj_f;
+ int i;
+
+ if (!PyArg_ParseTuple
+ (args, (char *) "OszO:registerXPathFunction", &pyobj_ctx, &name,
+ &ns_uri, &pyobj_f))
+ return (NULL);
+
+ ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
+ if (libxml_xpathCallbacksInitialized == 0)
+ libxml_xpathCallbacksInitialize();
+ xmlXPathRegisterFuncLookup(ctx, libxml_xmlXPathFuncLookupFunc, ctx);
+
+ if ((pyobj_ctx == NULL) || (name == NULL) || (pyobj_f == NULL)) {
+ py_retval = libxml_intWrap(-1);
+ return (py_retval);
+ }
+#ifdef DEBUG_XPATH
+ printf("libxml_registerXPathFunction(%p, %s, %s) called\n",
+ ctx, name, ns_uri);
+#endif
+ for (i = 0; i < libxml_xpathCallbacksNb; i++) {
+ if ((ctx == libxml_xpathCallbacks[i].ctx) &&
+ (xmlStrEqual(name, libxml_xpathCallbacks[i].name)) &&
+ (xmlStrEqual(ns_uri, libxml_xpathCallbacks[i].ns_uri))) {
+ Py_XINCREF(pyobj_f);
+ Py_XDECREF(libxml_xpathCallbacks[i].function);
+ libxml_xpathCallbacks[i].function = pyobj_f;
+ c_retval = 1;
+ goto done;
+ }
+ }
+ if (libxml_xpathCallbacksNb >= libxml_xpathCallbacksMax) {
+ printf("libxml_registerXPathFunction() table full\n");
+ } else {
+ i = libxml_xpathCallbacksNb++;
+ Py_XINCREF(pyobj_f);
+ libxml_xpathCallbacks[i].ctx = ctx;
+ libxml_xpathCallbacks[i].name = xmlStrdup(name);
+ libxml_xpathCallbacks[i].ns_uri = xmlStrdup(ns_uri);
+ libxml_xpathCallbacks[i].function = pyobj_f;
+ c_retval = 1;
+ }
+ done:
+ py_retval = libxml_intWrap((int) c_retval);
+ return (py_retval);
+}
+
+/************************************************************************
+ * *
+ * Global properties access *
+ * *
+ ************************************************************************/
+static PyObject *
+libxml_name(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *resultobj, *obj;
+ xmlNodePtr cur;
+ const xmlChar *res;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:name", &obj))
+ return NULL;
+ cur = PyxmlNode_Get(obj);
+
+#ifdef DEBUG
+ printf("libxml_name: cur = %p type %d\n", cur, cur->type);
+#endif
+
+ switch (cur->type) {
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE:{
+ xmlDocPtr doc = (xmlDocPtr) cur;
+
+ res = doc->URL;
+ break;
+ }
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ res = attr->name;
+ break;
+ }
+ case XML_NAMESPACE_DECL:{
+ xmlNsPtr ns = (xmlNsPtr) cur;
+
+ res = ns->prefix;
+ break;
+ }
+ default:
+ res = cur->name;
+ break;
+ }
+ resultobj = libxml_constxmlCharPtrWrap(res);
+
+ return resultobj;
+}
+
+static PyObject *
+libxml_doc(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *resultobj, *obj;
+ xmlNodePtr cur;
+ xmlDocPtr res;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:doc", &obj))
+ return NULL;
+ cur = PyxmlNode_Get(obj);
+
+#ifdef DEBUG
+ printf("libxml_doc: cur = %p\n", cur);
+#endif
+
+ switch (cur->type) {
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE:
+ res = NULL;
+ break;
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ res = attr->doc;
+ break;
+ }
+ case XML_NAMESPACE_DECL:
+ res = NULL;
+ break;
+ default:
+ res = cur->doc;
+ break;
+ }
+ resultobj = libxml_xmlDocPtrWrap(res);
+ return resultobj;
+}
+
+static PyObject *
+libxml_properties(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *resultobj, *obj;
+ xmlNodePtr cur = NULL;
+ xmlAttrPtr res;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:properties", &obj))
+ return NULL;
+ cur = PyxmlNode_Get(obj);
+ if (cur->type == XML_ELEMENT_NODE)
+ res = cur->properties;
+ else
+ res = NULL;
+ resultobj = libxml_xmlAttrPtrWrap(res);
+ return resultobj;
+}
+
+static PyObject *
+libxml_next(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *resultobj, *obj;
+ xmlNodePtr cur;
+ xmlNodePtr res;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:next", &obj))
+ return NULL;
+ cur = PyxmlNode_Get(obj);
+
+#ifdef DEBUG
+ printf("libxml_next: cur = %p\n", cur);
+#endif
+
+ switch (cur->type) {
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE:
+ res = NULL;
+ break;
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ res = (xmlNodePtr) attr->next;
+ break;
+ }
+ case XML_NAMESPACE_DECL:{
+ xmlNsPtr ns = (xmlNsPtr) cur;
+
+ res = (xmlNodePtr) ns->next;
+ break;
+ }
+ default:
+ res = cur->next;
+ break;
+
+ }
+ resultobj = libxml_xmlNodePtrWrap(res);
+ return resultobj;
+}
+
+static PyObject *
+libxml_prev(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *resultobj, *obj;
+ xmlNodePtr cur;
+ xmlNodePtr res;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:prev", &obj))
+ return NULL;
+ cur = PyxmlNode_Get(obj);
+
+#ifdef DEBUG
+ printf("libxml_prev: cur = %p\n", cur);
+#endif
+
+ switch (cur->type) {
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE:
+ res = NULL;
+ break;
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ res = (xmlNodePtr) attr->prev;
+ }
+ case XML_NAMESPACE_DECL:
+ res = NULL;
+ break;
+ default:
+ res = cur->prev;
+ break;
+ }
+ resultobj = libxml_xmlNodePtrWrap(res);
+ return resultobj;
+}
+
+static PyObject *
+libxml_children(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *resultobj, *obj;
+ xmlNodePtr cur;
+ xmlNodePtr res;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:children", &obj))
+ return NULL;
+ cur = PyxmlNode_Get(obj);
+
+#ifdef DEBUG
+ printf("libxml_children: cur = %p\n", cur);
+#endif
+
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DTD_NODE:
+ res = cur->children;
+ break;
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ res = attr->children;
+ break;
+ }
+ default:
+ res = NULL;
+ break;
+ }
+ resultobj = libxml_xmlNodePtrWrap(res);
+ return resultobj;
+}
+
+static PyObject *
+libxml_last(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *resultobj, *obj;
+ xmlNodePtr cur;
+ xmlNodePtr res;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:last", &obj))
+ return NULL;
+ cur = PyxmlNode_Get(obj);
+
+#ifdef DEBUG
+ printf("libxml_last: cur = %p\n", cur);
+#endif
+
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DTD_NODE:
+ res = cur->last;
+ break;
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ res = attr->last;
+ }
+ default:
+ res = NULL;
+ break;
+ }
+ resultobj = libxml_xmlNodePtrWrap(res);
+ return resultobj;
+}
+
+static PyObject *
+libxml_parent(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *resultobj, *obj;
+ xmlNodePtr cur;
+ xmlNodePtr res;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:parent", &obj))
+ return NULL;
+ cur = PyxmlNode_Get(obj);
+
+#ifdef DEBUG
+ printf("libxml_parent: cur = %p\n", cur);
+#endif
+
+ switch (cur->type) {
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ res = NULL;
+ break;
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ res = attr->parent;
+ }
+ case XML_ENTITY_DECL:
+ case XML_NAMESPACE_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ res = NULL;
+ break;
+ default:
+ res = cur->parent;
+ break;
+ }
+ resultobj = libxml_xmlNodePtrWrap(res);
+ return resultobj;
+}
+
+static PyObject *
+libxml_type(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *resultobj, *obj;
+ xmlNodePtr cur;
+ const xmlChar *res = NULL;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:last", &obj))
+ return NULL;
+ cur = PyxmlNode_Get(obj);
+
+#ifdef DEBUG
+ printf("libxml_type: cur = %p\n", cur);
+#endif
+
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ res = (const xmlChar *) "element";
+ break;
+ case XML_ATTRIBUTE_NODE:
+ res = (const xmlChar *) "attribute";
+ break;
+ case XML_TEXT_NODE:
+ res = (const xmlChar *) "text";
+ break;
+ case XML_CDATA_SECTION_NODE:
+ res = (const xmlChar *) "cdata";
+ break;
+ case XML_ENTITY_REF_NODE:
+ res = (const xmlChar *) "entity_ref";
+ break;
+ case XML_ENTITY_NODE:
+ res = (const xmlChar *) "entity";
+ break;
+ case XML_PI_NODE:
+ res = (const xmlChar *) "pi";
+ break;
+ case XML_COMMENT_NODE:
+ res = (const xmlChar *) "comment";
+ break;
+ case XML_DOCUMENT_NODE:
+ res = (const xmlChar *) "document_xml";
+ break;
+ case XML_DOCUMENT_TYPE_NODE:
+ res = (const xmlChar *) "doctype";
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ res = (const xmlChar *) "fragment";
+ break;
+ case XML_NOTATION_NODE:
+ res = (const xmlChar *) "notation";
+ break;
+ case XML_HTML_DOCUMENT_NODE:
+ res = (const xmlChar *) "document_html";
+ break;
+ case XML_DTD_NODE:
+ res = (const xmlChar *) "dtd";
+ break;
+ case XML_ELEMENT_DECL:
+ res = (const xmlChar *) "elem_decl";
+ break;
+ case XML_ATTRIBUTE_DECL:
+ res = (const xmlChar *) "attribute_decl";
+ break;
+ case XML_ENTITY_DECL:
+ res = (const xmlChar *) "entity_decl";
+ break;
+ case XML_NAMESPACE_DECL:
+ res = (const xmlChar *) "namespace";
+ break;
+ case XML_XINCLUDE_START:
+ res = (const xmlChar *) "xinclude_start";
+ break;
+ case XML_XINCLUDE_END:
+ res = (const xmlChar *) "xinclude_end";
+ break;
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+ res = (const xmlChar *) "document_docbook";
+ break;
+#endif
+ }
+#ifdef DEBUG
+ printf("libxml_type: cur = %p: %s\n", cur, res);
+#endif
+
+ resultobj = libxml_constxmlCharPtrWrap(res);
+ return resultobj;
+}
+
+/************************************************************************
+ * *
+ * Specific accessor functions *
+ * *
+ ************************************************************************/
+PyObject *
+libxml_xmlNodeGetNsDefs(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *py_retval;
+ xmlNsPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple
+ (args, (char *) "O:xmlNodeGetNsDefs", &pyobj_node))
+ return (NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ if ((node == NULL) || (node->type != XML_ELEMENT_NODE)) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ c_retval = node->nsDef;
+ py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+ return (py_retval);
+}
+
+PyObject *
+libxml_xmlNodeGetNs(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *py_retval;
+ xmlNsPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *) "O:xmlNodeGetNs", &pyobj_node))
+ return (NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ if ((node == NULL) ||
+ ((node->type != XML_ELEMENT_NODE) &&
+ (node->type != XML_ATTRIBUTE_NODE))) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ c_retval = node->ns;
+ py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+ return (py_retval);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/************************************************************************
+ * *
+ * Serialization front-end *
+ * *
+ ************************************************************************/
+
+static PyObject *
+libxml_serializeNode(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *py_retval = NULL;
+ xmlChar *c_retval;
+ PyObject *pyobj_node;
+ xmlNodePtr node;
+ xmlDocPtr doc;
+ const char *encoding;
+ int format;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *) "Ozi:serializeNode", &pyobj_node,
+ &encoding, &format))
+ return (NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ if (node == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ if (node->type == XML_DOCUMENT_NODE) {
+ doc = (xmlDocPtr) node;
+ xmlDocDumpFormatMemoryEnc(doc, &c_retval, &len,
+ (const char *) encoding, format);
+ py_retval = libxml_charPtrWrap((char *) c_retval);
+ } else if (node->type == XML_HTML_DOCUMENT_NODE) {
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+
+ doc = (xmlDocPtr) node;
+ if (encoding != NULL)
+ htmlSetMetaEncoding(doc, (const xmlChar *) encoding);
+ encoding = (const char *) htmlGetMetaEncoding(doc);
+
+ if (encoding != NULL) {
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ }
+
+ /*
+ * Fallback to HTML or ASCII when the encoding is unspecified
+ */
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("HTML");
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("ascii");
+
+ buf = xmlAllocOutputBuffer(handler);
+ if (buf == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ htmlDocContentDumpFormatOutput(buf, doc, encoding, format);
+ xmlOutputBufferFlush(buf);
+ if (buf->conv != NULL) {
+ len = buf->conv->use;
+ c_retval = buf->conv->content;
+ buf->conv->content = NULL;
+ } else {
+ len = buf->buffer->use;
+ c_retval = buf->buffer->content;
+ buf->buffer->content = NULL;
+ }
+ (void) xmlOutputBufferClose(buf);
+ py_retval = libxml_charPtrWrap((char *) c_retval);
+ } else {
+ if (node->type == XML_NAMESPACE_DECL)
+ doc = NULL;
+ else
+ doc = node->doc;
+ if ((doc == NULL) || (doc->type == XML_DOCUMENT_NODE)) {
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+
+ if (encoding != NULL) {
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ }
+
+ buf = xmlAllocOutputBuffer(handler);
+ if (buf == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ xmlNodeDumpOutput(buf, doc, node, 0, format, encoding);
+ xmlOutputBufferFlush(buf);
+ if (buf->conv != NULL) {
+ len = buf->conv->use;
+ c_retval = buf->conv->content;
+ buf->conv->content = NULL;
+ } else {
+ len = buf->buffer->use;
+ c_retval = buf->buffer->content;
+ buf->buffer->content = NULL;
+ }
+ (void) xmlOutputBufferClose(buf);
+ py_retval = libxml_charPtrWrap((char *) c_retval);
+ } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+
+ if (encoding != NULL)
+ htmlSetMetaEncoding(doc, (const xmlChar *) encoding);
+ encoding = (const char *) htmlGetMetaEncoding(doc);
+ if (encoding != NULL) {
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ }
+
+ /*
+ * Fallback to HTML or ASCII when the encoding is unspecified
+ */
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("HTML");
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("ascii");
+
+ buf = xmlAllocOutputBuffer(handler);
+ if (buf == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ htmlNodeDumpFormatOutput(buf, doc, node, encoding, format);
+ xmlOutputBufferFlush(buf);
+ if (buf->conv != NULL) {
+ len = buf->conv->use;
+ c_retval = buf->conv->content;
+ buf->conv->content = NULL;
+ } else {
+ len = buf->buffer->use;
+ c_retval = buf->buffer->content;
+ buf->buffer->content = NULL;
+ }
+ (void) xmlOutputBufferClose(buf);
+ py_retval = libxml_charPtrWrap((char *) c_retval);
+ } else {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ }
+ return (py_retval);
+}
+
+static PyObject *
+libxml_saveNodeTo(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *py_file = NULL;
+ FILE *output;
+ PyObject *pyobj_node;
+ xmlNodePtr node;
+ xmlDocPtr doc;
+ const char *encoding;
+ int format;
+ int len;
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+
+ if (!PyArg_ParseTuple(args, (char *) "OOzi:serializeNode", &pyobj_node,
+ &py_file, &encoding, &format))
+ return (NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ if (node == NULL) {
+ return (PyInt_FromLong((long) -1));
+ }
+ if ((py_file == NULL) || (!(PyFile_Check(py_file)))) {
+ return (PyInt_FromLong((long) -1));
+ }
+ output = PyFile_AsFile(py_file);
+ if (output == NULL) {
+ return (PyInt_FromLong((long) -1));
+ }
+
+ if (node->type == XML_DOCUMENT_NODE) {
+ doc = (xmlDocPtr) node;
+ } else if (node->type == XML_HTML_DOCUMENT_NODE) {
+ doc = (xmlDocPtr) node;
+ } else {
+ doc = node->doc;
+ }
+ if (doc->type == XML_HTML_DOCUMENT_NODE) {
+ if (encoding == NULL)
+ encoding = (const char *) htmlGetMetaEncoding(doc);
+ }
+ if (encoding != NULL) {
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL) {
+ return (PyInt_FromLong((long) -1));
+ }
+ }
+ if (doc->type == XML_HTML_DOCUMENT_NODE) {
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("HTML");
+ if (handler == NULL)
+ handler = xmlFindCharEncodingHandler("ascii");
+ }
+
+ buf = xmlOutputBufferCreateFile(output, handler);
+ if (node->type == XML_DOCUMENT_NODE) {
+ len = xmlSaveFormatFileTo(buf, doc, encoding, format);
+ } else if (node->type == XML_HTML_DOCUMENT_NODE) {
+ htmlDocContentDumpFormatOutput(buf, doc, encoding, format);
+ len = xmlOutputBufferClose(buf);
+ } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
+ htmlNodeDumpFormatOutput(buf, doc, node, encoding, format);
+ len = xmlOutputBufferClose(buf);
+ } else {
+ xmlNodeDumpOutput(buf, doc, node, 0, format, encoding);
+ len = xmlOutputBufferClose(buf);
+ }
+ return (PyInt_FromLong((long) len));
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ * *
+ * Extra stuff *
+ * *
+ ************************************************************************/
+PyObject *
+libxml_xmlNewNode(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *py_retval;
+ xmlChar *name;
+ xmlNodePtr node;
+
+ if (!PyArg_ParseTuple(args, (char *) "s:xmlNewNode", &name))
+ return (NULL);
+ node = (xmlNodePtr) xmlNewNode(NULL, name);
+#ifdef DEBUG
+ printf("NewNode: %s : %p\n", name, (void *) node);
+#endif
+
+ if (node == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ py_retval = libxml_xmlNodePtrWrap(node);
+ return (py_retval);
+}
+
+
+/************************************************************************
+ * *
+ * Local Catalog stuff *
+ * *
+ ************************************************************************/
+static PyObject *
+libxml_addLocalCatalog(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ xmlChar *URL;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"Os:addLocalCatalog", &pyobj_ctxt, &URL))
+ return(NULL);
+
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ if (URL != NULL) {
+ ctxt->catalogs = xmlCatalogAddLocal(ctxt->catalogs, URL);
+ }
+
+#ifdef DEBUG
+ printf("LocalCatalog: %s\n", URL);
+#endif
+
+ Py_INCREF(Py_None);
+ return (Py_None);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+/************************************************************************
+ * *
+ * RelaxNG error handler registration *
+ * *
+ ************************************************************************/
+
+typedef struct
+{
+ PyObject *warn;
+ PyObject *error;
+ PyObject *arg;
+} xmlRelaxNGValidCtxtPyCtxt;
+typedef xmlRelaxNGValidCtxtPyCtxt *xmlRelaxNGValidCtxtPyCtxtPtr;
+
+static void
+libxml_xmlRelaxNGValidityGenericErrorFuncHandler(void *ctx, char *str)
+{
+ PyObject *list;
+ PyObject *result;
+ xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
+
+#ifdef DEBUG_ERROR
+ printf("libxml_xmlRelaxNGValidityGenericErrorFuncHandler(%p, %s, ...) called\n", ctx, str);
+#endif
+
+ pyCtxt = (xmlRelaxNGValidCtxtPyCtxtPtr)ctx;
+
+ list = PyTuple_New(2);
+ PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
+ PyTuple_SetItem(list, 1, pyCtxt->arg);
+ Py_XINCREF(pyCtxt->arg);
+ result = PyEval_CallObject(pyCtxt->error, list);
+ if (result == NULL)
+ {
+ /* TODO: manage for the exception to be propagated... */
+ PyErr_Print();
+ }
+ Py_XDECREF(list);
+ Py_XDECREF(result);
+}
+
+static void
+libxml_xmlRelaxNGValidityGenericWarningFuncHandler(void *ctx, char *str)
+{
+ PyObject *list;
+ PyObject *result;
+ xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
+
+#ifdef DEBUG_ERROR
+ printf("libxml_xmlRelaxNGValidityGenericWarningFuncHandler(%p, %s, ...) called\n", ctx, str);
+#endif
+
+ pyCtxt = (xmlRelaxNGValidCtxtPyCtxtPtr)ctx;
+
+ list = PyTuple_New(2);
+ PyTuple_SetItem(list, 0, libxml_charPtrWrap(str));
+ PyTuple_SetItem(list, 1, pyCtxt->arg);
+ Py_XINCREF(pyCtxt->arg);
+ result = PyEval_CallObject(pyCtxt->warn, list);
+ if (result == NULL)
+ {
+ /* TODO: manage for the exception to be propagated... */
+ PyErr_Print();
+ }
+ Py_XDECREF(list);
+ Py_XDECREF(result);
+}
+
+static void
+libxml_xmlRelaxNGValidityErrorFunc(void *ctx, const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ libxml_xmlRelaxNGValidityGenericErrorFuncHandler(ctx, libxml_buildMessage(msg, ap));
+ va_end(ap);
+}
+
+static void
+libxml_xmlRelaxNGValidityWarningFunc(void *ctx, const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ libxml_xmlRelaxNGValidityGenericWarningFuncHandler(ctx, libxml_buildMessage(msg, ap));
+ va_end(ap);
+}
+
+static PyObject *
+libxml_xmlRelaxNGSetValidErrors(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
+{
+ PyObject *py_retval;
+ PyObject *pyobj_error;
+ PyObject *pyobj_warn;
+ PyObject *pyobj_ctx;
+ PyObject *pyobj_arg = Py_None;
+ xmlRelaxNGValidCtxtPtr ctxt;
+ xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
+
+ if (!PyArg_ParseTuple
+ (args, (char *) "OOO|O:xmlRelaxNGSetValidErrors", &pyobj_ctx, &pyobj_error, &pyobj_warn, &pyobj_arg))
+ return (NULL);
+
+#ifdef DEBUG_ERROR
+ printf("libxml_xmlRelaxNGSetValidErrors(%p, %p, %p) called\n", pyobj_ctx, pyobj_error, pyobj_warn);
+#endif
+
+ ctxt = PyrelaxNgValidCtxt_Get(pyobj_ctx);
+ if (xmlRelaxNGGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == -1)
+ {
+ py_retval = libxml_intWrap(-1);
+ return(py_retval);
+ }
+
+ if (pyCtxt == NULL)
+ {
+ /* first time to set the error handlers */
+ pyCtxt = xmlMalloc(sizeof(xmlRelaxNGValidCtxtPyCtxt));
+ if (pyCtxt == NULL) {
+ py_retval = libxml_intWrap(-1);
+ return(py_retval);
+ }
+ memset(pyCtxt, 0, sizeof(xmlRelaxNGValidCtxtPyCtxt));
+ }
+
+ /* TODO: check warn and error is a function ! */
+ Py_XDECREF(pyCtxt->error);
+ Py_XINCREF(pyobj_error);
+ pyCtxt->error = pyobj_error;
+
+ Py_XDECREF(pyCtxt->warn);
+ Py_XINCREF(pyobj_warn);
+ pyCtxt->warn = pyobj_warn;
+
+ Py_XDECREF(pyCtxt->arg);
+ Py_XINCREF(pyobj_arg);
+ pyCtxt->arg = pyobj_arg;
+
+ xmlRelaxNGSetValidErrors(ctxt, &libxml_xmlRelaxNGValidityErrorFunc, &libxml_xmlRelaxNGValidityWarningFunc, pyCtxt);
+
+ py_retval = libxml_intWrap(1);
+ return (py_retval);
+}
+
+static PyObject *
+libxml_xmlRelaxNGFreeValidCtxt(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
+ xmlRelaxNGValidCtxtPtr ctxt;
+ xmlRelaxNGValidCtxtPyCtxtPtr pyCtxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGFreeValidCtxt", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+
+ if (xmlRelaxNGGetValidErrors(ctxt, NULL, NULL, (void **) &pyCtxt) == 0)
+ {
+ if (pyCtxt != NULL)
+ {
+ Py_XDECREF(pyCtxt->error);
+ Py_XDECREF(pyCtxt->warn);
+ Py_XDECREF(pyCtxt->arg);
+ xmlFree(pyCtxt);
+ }
+ }
+
+ xmlRelaxNGFreeValidCtxt(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif
+
+#ifdef LIBXML_C14N_ENABLED
+#ifdef LIBXML_OUTPUT_ENABLED
+
+/************************************************************************
+ * *
+ * XML Canonicalization c14n *
+ * *
+ ************************************************************************/
+
+static int
+PyxmlNodeSet_Convert(PyObject *py_nodeset, xmlNodeSetPtr *result)
+{
+ xmlNodeSetPtr nodeSet;
+ int is_tuple = 0;
+
+ if (PyTuple_Check(py_nodeset))
+ is_tuple = 1;
+ else if (PyList_Check(py_nodeset))
+ is_tuple = 0;
+ else if (py_nodeset == Py_None) {
+ *result = NULL;
+ return 0;
+ }
+ else {
+ PyErr_SetString(PyExc_TypeError,
+ "must be a tuple or list of nodes.");
+ return -1;
+ }
+
+ nodeSet = (xmlNodeSetPtr) xmlMalloc(sizeof(xmlNodeSet));
+ if (nodeSet == NULL) {
+ PyErr_SetString(PyExc_MemoryError, "");
+ return -1;
+ }
+
+ nodeSet->nodeNr = 0;
+ nodeSet->nodeMax = (is_tuple
+ ? PyTuple_GET_SIZE(py_nodeset)
+ : PyList_GET_SIZE(py_nodeset));
+ nodeSet->nodeTab
+ = (xmlNodePtr *) xmlMalloc (nodeSet->nodeMax
+ * sizeof(xmlNodePtr));
+ if (nodeSet->nodeTab == NULL) {
+ xmlFree(nodeSet);
+ PyErr_SetString(PyExc_MemoryError, "");
+ return -1;
+ }
+ memset(nodeSet->nodeTab, 0 ,
+ nodeSet->nodeMax * sizeof(xmlNodePtr));
+
+ {
+ int idx;
+ for (idx=0; idx < nodeSet->nodeMax; ++idx) {
+ xmlNodePtr pynode =
+ PyxmlNode_Get (is_tuple
+ ? PyTuple_GET_ITEM(py_nodeset, idx)
+ : PyList_GET_ITEM(py_nodeset, idx));
+ if (pynode)
+ nodeSet->nodeTab[nodeSet->nodeNr++] = pynode;
+ }
+ }
+ *result = nodeSet;
+ return 0;
+}
+
+static int
+PystringSet_Convert(PyObject *py_strings, xmlChar *** result)
+{
+ /* NOTE: the array should be freed, but the strings are shared
+ with the python strings and so must not be freed. */
+
+ xmlChar ** strings;
+ int is_tuple = 0;
+ int count;
+ int init_index = 0;
+
+ if (PyTuple_Check(py_strings))
+ is_tuple = 1;
+ else if (PyList_Check(py_strings))
+ is_tuple = 0;
+ else if (py_strings == Py_None) {
+ *result = NULL;
+ return 0;
+ }
+ else {
+ PyErr_SetString(PyExc_TypeError,
+ "must be a tuple or list of strings.");
+ return -1;
+ }
+
+ count = (is_tuple
+ ? PyTuple_GET_SIZE(py_strings)
+ : PyList_GET_SIZE(py_strings));
+
+ strings = (xmlChar **) xmlMalloc(sizeof(xmlChar *) * count);
+
+ if (strings == NULL) {
+ PyErr_SetString(PyExc_MemoryError, "");
+ return -1;
+ }
+
+ memset(strings, 0 , sizeof(xmlChar *) * count);
+
+ {
+ int idx;
+ for (idx=0; idx < count; ++idx) {
+ char* s = PyString_AsString
+ (is_tuple
+ ? PyTuple_GET_ITEM(py_strings, idx)
+ : PyList_GET_ITEM(py_strings, idx));
+ if (s)
+ strings[init_index++] = (xmlChar *)s;
+ else {
+ xmlFree(strings);
+ PyErr_SetString(PyExc_TypeError,
+ "must be a tuple or list of strings.");
+ return -1;
+ }
+ }
+ }
+
+ *result = strings;
+ return 0;
+}
+
+static PyObject *
+libxml_C14NDocDumpMemory(ATTRIBUTE_UNUSED PyObject * self,
+ PyObject * args)
+{
+ PyObject *py_retval = NULL;
+
+ PyObject *pyobj_doc;
+ PyObject *pyobj_nodes;
+ int exclusive;
+ PyObject *pyobj_prefixes;
+ int with_comments;
+
+ xmlDocPtr doc;
+ xmlNodeSetPtr nodes;
+ xmlChar **prefixes = NULL;
+ xmlChar *doc_txt;
+
+ int result;
+
+ if (!PyArg_ParseTuple(args, (char *) "OOiOi:C14NDocDumpMemory",
+ &pyobj_doc,
+ &pyobj_nodes,
+ &exclusive,
+ &pyobj_prefixes,
+ &with_comments))
+ return (NULL);
+
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ if (!doc) {
+ PyErr_SetString(PyExc_TypeError, "bad document.");
+ return NULL;
+ }
+
+ result = PyxmlNodeSet_Convert(pyobj_nodes, &nodes);
+ if (result < 0) return NULL;
+
+ if (exclusive) {
+ result = PystringSet_Convert(pyobj_prefixes, &prefixes);
+ if (result < 0) {
+ if (nodes) {
+ xmlFree(nodes->nodeTab);
+ xmlFree(nodes);
+ }
+ return NULL;
+ }
+ }
+
+ result = xmlC14NDocDumpMemory(doc,
+ nodes,
+ exclusive,
+ prefixes,
+ with_comments,
+ &doc_txt);
+
+ if (nodes) {
+ xmlFree(nodes->nodeTab);
+ xmlFree(nodes);
+ }
+ if (prefixes) {
+ xmlChar ** idx = prefixes;
+ while (*idx) xmlFree(*(idx++));
+ xmlFree(prefixes);
+ }
+
+ if (result < 0) {
+ PyErr_SetString(PyExc_Exception,
+ "libxml2 xmlC14NDocDumpMemory failure.");
+ return NULL;
+ }
+ else {
+ py_retval = PyString_FromStringAndSize((const char *) doc_txt,
+ result);
+ xmlFree(doc_txt);
+ return py_retval;
+ }
+}
+
+static PyObject *
+libxml_C14NDocSaveTo(ATTRIBUTE_UNUSED PyObject * self,
+ PyObject * args)
+{
+ PyObject *pyobj_doc;
+ PyObject *py_file;
+ PyObject *pyobj_nodes;
+ int exclusive;
+ PyObject *pyobj_prefixes;
+ int with_comments;
+
+ xmlDocPtr doc;
+ xmlNodeSetPtr nodes;
+ xmlChar **prefixes = NULL;
+ FILE * output;
+ xmlOutputBufferPtr buf;
+
+ int result;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *) "OOiOiO:C14NDocSaveTo",
+ &pyobj_doc,
+ &pyobj_nodes,
+ &exclusive,
+ &pyobj_prefixes,
+ &with_comments,
+ &py_file))
+ return (NULL);
+
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ if (!doc) {
+ PyErr_SetString(PyExc_TypeError, "bad document.");
+ return NULL;
+ }
+
+ if ((py_file == NULL) || (!(PyFile_Check(py_file)))) {
+ PyErr_SetString(PyExc_TypeError, "bad file.");
+ return NULL;
+ }
+ output = PyFile_AsFile(py_file);
+ if (output == NULL) {
+ PyErr_SetString(PyExc_TypeError, "bad file.");
+ return NULL;
+ }
+ buf = xmlOutputBufferCreateFile(output, NULL);
+
+ result = PyxmlNodeSet_Convert(pyobj_nodes, &nodes);
+ if (result < 0) return NULL;
+
+ if (exclusive) {
+ result = PystringSet_Convert(pyobj_prefixes, &prefixes);
+ if (result < 0) {
+ if (nodes) {
+ xmlFree(nodes->nodeTab);
+ xmlFree(nodes);
+ }
+ return NULL;
+ }
+ }
+
+ result = xmlC14NDocSaveTo(doc,
+ nodes,
+ exclusive,
+ prefixes,
+ with_comments,
+ buf);
+
+ if (nodes) {
+ xmlFree(nodes->nodeTab);
+ xmlFree(nodes);
+ }
+ if (prefixes) {
+ xmlChar ** idx = prefixes;
+ while (*idx) xmlFree(*(idx++));
+ xmlFree(prefixes);
+ }
+
+ len = xmlOutputBufferClose(buf);
+
+ if (result < 0) {
+ PyErr_SetString(PyExc_Exception,
+ "libxml2 xmlC14NDocSaveTo failure.");
+ return NULL;
+ }
+ else
+ return PyInt_FromLong((long) len);
+}
+
+#endif
+#endif
+
+
+
+/************************************************************************
+ * *
+ * The registration stuff *
+ * *
+ ************************************************************************/
+static PyMethodDef libxmlMethods[] = {
+#include "libxml2-export.c"
+ {(char *) "name", libxml_name, METH_VARARGS, NULL},
+ {(char *) "children", libxml_children, METH_VARARGS, NULL},
+ {(char *) "properties", libxml_properties, METH_VARARGS, NULL},
+ {(char *) "last", libxml_last, METH_VARARGS, NULL},
+ {(char *) "prev", libxml_prev, METH_VARARGS, NULL},
+ {(char *) "next", libxml_next, METH_VARARGS, NULL},
+ {(char *) "parent", libxml_parent, METH_VARARGS, NULL},
+ {(char *) "type", libxml_type, METH_VARARGS, NULL},
+ {(char *) "doc", libxml_doc, METH_VARARGS, NULL},
+ {(char *) "xmlNewNode", libxml_xmlNewNode, METH_VARARGS, NULL},
+#ifdef LIBXML_OUTPUT_ENABLED
+ {(char *) "serializeNode", libxml_serializeNode, METH_VARARGS, NULL},
+ {(char *) "saveNodeTo", libxml_saveNodeTo, METH_VARARGS, NULL},
+ {(char *) "outputBufferCreate", libxml_xmlCreateOutputBuffer, METH_VARARGS, NULL},
+ {(char *) "outputBufferGetPythonFile", libxml_outputBufferGetPythonFile, METH_VARARGS, NULL},
+ {(char *) "xmlOutputBufferClose", libxml_xmlOutputBufferClose, METH_VARARGS, NULL},
+ { (char *)"xmlOutputBufferFlush", libxml_xmlOutputBufferFlush, METH_VARARGS, NULL },
+#endif /* LIBXML_OUTPUT_ENABLED */
+ {(char *) "inputBufferCreate", libxml_xmlCreateInputBuffer, METH_VARARGS, NULL},
+ {(char *) "setEntityLoader", libxml_xmlSetEntityLoader, METH_VARARGS, NULL},
+ {(char *)"xmlRegisterErrorHandler", libxml_xmlRegisterErrorHandler, METH_VARARGS, NULL },
+ {(char *)"xmlParserCtxtSetErrorHandler", libxml_xmlParserCtxtSetErrorHandler, METH_VARARGS, NULL },
+ {(char *)"xmlParserCtxtGetErrorHandler", libxml_xmlParserCtxtGetErrorHandler, METH_VARARGS, NULL },
+ {(char *)"xmlFreeParserCtxt", libxml_xmlFreeParserCtxt, METH_VARARGS, NULL },
+ {(char *)"xmlTextReaderSetErrorHandler", libxml_xmlTextReaderSetErrorHandler, METH_VARARGS, NULL },
+ {(char *)"xmlTextReaderGetErrorHandler", libxml_xmlTextReaderGetErrorHandler, METH_VARARGS, NULL },
+ {(char *)"xmlFreeTextReader", libxml_xmlFreeTextReader, METH_VARARGS, NULL },
+ {(char *)"addLocalCatalog", libxml_addLocalCatalog, METH_VARARGS, NULL },
+#ifdef LIBXML_SCHEMAS_ENABLED
+ {(char *)"xmlRelaxNGSetValidErrors", libxml_xmlRelaxNGSetValidErrors, METH_VARARGS, NULL},
+ {(char *)"xmlRelaxNGFreeValidCtxt", libxml_xmlRelaxNGFreeValidCtxt, METH_VARARGS, NULL},
+#endif
+#ifdef LIBXML_C14N_ENABLED
+#ifdef LIBXML_OUTPUT_ENABLED
+ {(char *)"xmlC14NDocDumpMemory", libxml_C14NDocDumpMemory, METH_VARARGS, NULL},
+ {(char *)"xmlC14NDocSaveTo", libxml_C14NDocSaveTo, METH_VARARGS, NULL},
+#endif
+#endif
+ {NULL, NULL, 0, NULL}
+};
+
+#ifdef MERGED_MODULES
+extern void initlibxsltmod(void);
+#endif
+
+void
+initlibxml2mod(void)
+{
+ static int initialized = 0;
+ PyObject *m;
+
+ if (initialized != 0)
+ return;
+ /* XXX xmlInitParser does much more than this */
+ xmlInitGlobals();
+#ifdef LIBXML_OUTPUT_ENABLED
+ xmlRegisterDefaultOutputCallbacks();
+#endif /* LIBXML_OUTPUT_ENABLED */
+ xmlRegisterDefaultInputCallbacks();
+ m = Py_InitModule((char *) "libxml2mod", libxmlMethods);
+ initialized = 1;
+ libxml_xmlErrorInitialize();
+
+#ifdef MERGED_MODULES
+ initlibxsltmod();
+#endif
+}
diff --git a/python/libxml.py b/python/libxml.py
new file mode 100644
index 0000000..0c3ba6c
--- /dev/null
+++ b/python/libxml.py
@@ -0,0 +1,628 @@
+import libxml2mod
+import types
+
+#
+# Errors raised by the wrappers when some tree handling failed.
+#
+class treeError:
+ def __init__(self, msg):
+ self.msg = msg
+ def __str__(self):
+ return self.msg
+
+class parserError:
+ def __init__(self, msg):
+ self.msg = msg
+ def __str__(self):
+ return self.msg
+
+class uriError:
+ def __init__(self, msg):
+ self.msg = msg
+ def __str__(self):
+ return self.msg
+
+class xpathError:
+ def __init__(self, msg):
+ self.msg = msg
+ def __str__(self):
+ return self.msg
+
+class ioWrapper:
+ def __init__(self, _obj):
+ self.__io = _obj
+ self._o = None
+
+ def io_close(self):
+ if self.__io == None:
+ return(-1)
+ self.__io.close()
+ self.__io = None
+ return(0)
+
+ def io_flush(self):
+ if self.__io == None:
+ return(-1)
+ self.__io.flush()
+ return(0)
+
+ def io_read(self, len = -1):
+ if self.__io == None:
+ return(-1)
+ if len < 0:
+ return(self.__io.read())
+ return(self.__io.read(len))
+
+ def io_write(self, str, len = -1):
+ if self.__io == None:
+ return(-1)
+ if len < 0:
+ return(self.__io.write(str))
+ return(self.__io.write(str, len))
+
+class ioReadWrapper(ioWrapper):
+ def __init__(self, _obj, enc = ""):
+ ioWrapper.__init__(self, _obj)
+ self._o = libxml2mod.xmlCreateInputBuffer(self, enc)
+
+ def __del__(self):
+ print "__del__"
+ self.io_close()
+ if self._o != None:
+ libxml2mod.xmlFreeParserInputBuffer(self._o)
+ self._o = None
+
+ def close(self):
+ self.io_close()
+ if self._o != None:
+ libxml2mod.xmlFreeParserInputBuffer(self._o)
+ self._o = None
+
+class ioWriteWrapper(ioWrapper):
+ def __init__(self, _obj, enc = ""):
+# print "ioWriteWrapper.__init__", _obj
+ if type(_obj) == type(''):
+ print "write io from a string"
+ self.o = None
+ elif type(_obj) == types.InstanceType:
+ print "write io from instance of %s" % (_obj.__class__)
+ ioWrapper.__init__(self, _obj)
+ self._o = libxml2mod.xmlCreateOutputBuffer(self, enc)
+ else:
+ file = libxml2mod.outputBufferGetPythonFile(_obj)
+ if file != None:
+ ioWrapper.__init__(self, file)
+ else:
+ ioWrapper.__init__(self, _obj)
+ self._o = _obj
+
+ def __del__(self):
+# print "__del__"
+ self.io_close()
+ if self._o != None:
+ libxml2mod.xmlOutputBufferClose(self._o)
+ self._o = None
+
+ def flush(self):
+ self.io_flush()
+ if self._o != None:
+ libxml2mod.xmlOutputBufferClose(self._o)
+ self._o = None
+
+ def close(self):
+ self.io_flush()
+ if self._o != None:
+ libxml2mod.xmlOutputBufferClose(self._o)
+ self._o = None
+
+#
+# Example of a class to handle SAX events
+#
+class SAXCallback:
+ """Base class for SAX handlers"""
+ def startDocument(self):
+ """called at the start of the document"""
+ pass
+
+ def endDocument(self):
+ """called at the end of the document"""
+ pass
+
+ def startElement(self, tag, attrs):
+ """called at the start of every element, tag is the name of
+ the element, attrs is a dictionary of the element's attributes"""
+ pass
+
+ def endElement(self, tag):
+ """called at the start of every element, tag is the name of
+ the element"""
+ pass
+
+ def characters(self, data):
+ """called when character data have been read, data is the string
+ containing the data, multiple consecutive characters() callback
+ are possible."""
+ pass
+
+ def cdataBlock(self, data):
+ """called when CDATA section have been read, data is the string
+ containing the data, multiple consecutive cdataBlock() callback
+ are possible."""
+ pass
+
+ def reference(self, name):
+ """called when an entity reference has been found"""
+ pass
+
+ def ignorableWhitespace(self, data):
+ """called when potentially ignorable white spaces have been found"""
+ pass
+
+ def processingInstruction(self, target, data):
+ """called when a PI has been found, target contains the PI name and
+ data is the associated data in the PI"""
+ pass
+
+ def comment(self, content):
+ """called when a comment has been found, content contains the comment"""
+ pass
+
+ def externalSubset(self, name, externalID, systemID):
+ """called when a DOCTYPE declaration has been found, name is the
+ DTD name and externalID, systemID are the DTD public and system
+ identifier for that DTd if available"""
+ pass
+
+ def internalSubset(self, name, externalID, systemID):
+ """called when a DOCTYPE declaration has been found, name is the
+ DTD name and externalID, systemID are the DTD public and system
+ identifier for that DTD if available"""
+ pass
+
+ def entityDecl(self, name, type, externalID, systemID, content):
+ """called when an ENTITY declaration has been found, name is the
+ entity name and externalID, systemID are the entity public and
+ system identifier for that entity if available, type indicates
+ the entity type, and content reports it's string content"""
+ pass
+
+ def notationDecl(self, name, externalID, systemID):
+ """called when an NOTATION declaration has been found, name is the
+ notation name and externalID, systemID are the notation public and
+ system identifier for that notation if available"""
+ pass
+
+ def attributeDecl(self, elem, name, type, defi, defaultValue, nameList):
+ """called when an ATTRIBUTE definition has been found"""
+ pass
+
+ def elementDecl(self, name, type, content):
+ """called when an ELEMENT definition has been found"""
+ pass
+
+ def entityDecl(self, name, publicId, systemID, notationName):
+ """called when an unparsed ENTITY declaration has been found,
+ name is the entity name and publicId,, systemID are the entity
+ public and system identifier for that entity if available,
+ and notationName indicate the associated NOTATION"""
+ pass
+
+ def warning(self, msg):
+ print msg
+
+ def error(self, msg):
+ raise parserError(msg)
+
+ def fatalError(self, msg):
+ raise parserError(msg)
+
+#
+# This class is the ancestor of all the Node classes. It provides
+# the basic functionalities shared by all nodes (and handle
+# gracefylly the exception), like name, navigation in the tree,
+# doc reference, content access and serializing to a string or URI
+#
+class xmlCore:
+ def __init__(self, _obj=None):
+ if _obj != None:
+ self._o = _obj;
+ return
+ self._o = None
+ def get_parent(self):
+ ret = libxml2mod.parent(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ def get_children(self):
+ ret = libxml2mod.children(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ def get_last(self):
+ ret = libxml2mod.last(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ def get_next(self):
+ ret = libxml2mod.next(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ def get_properties(self):
+ ret = libxml2mod.properties(self._o)
+ if ret == None:
+ return None
+ return xmlAttr(_obj=ret)
+ def get_prev(self):
+ ret = libxml2mod.prev(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ def get_content(self):
+ return libxml2mod.xmlNodeGetContent(self._o)
+ getContent = get_content # why is this duplicate naming needed ?
+ def get_name(self):
+ return libxml2mod.name(self._o)
+ def get_type(self):
+ return libxml2mod.type(self._o)
+ def get_doc(self):
+ ret = libxml2mod.doc(self._o)
+ if ret == None:
+ if self.type in ["document_xml", "document_html"]:
+ return xmlDoc(_obj=self._o)
+ else:
+ return None
+ return xmlDoc(_obj=ret)
+ #
+ # Those are common attributes to nearly all type of nodes
+ # defined as python2 properties
+ #
+ import sys
+ if float(sys.version[0:3]) < 2.2:
+ def __getattr__(self, attr):
+ if attr == "parent":
+ ret = libxml2mod.parent(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ elif attr == "properties":
+ ret = libxml2mod.properties(self._o)
+ if ret == None:
+ return None
+ return xmlAttr(_obj=ret)
+ elif attr == "children":
+ ret = libxml2mod.children(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ elif attr == "last":
+ ret = libxml2mod.last(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ elif attr == "next":
+ ret = libxml2mod.next(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ elif attr == "prev":
+ ret = libxml2mod.prev(self._o)
+ if ret == None:
+ return None
+ return xmlNode(_obj=ret)
+ elif attr == "content":
+ return libxml2mod.xmlNodeGetContent(self._o)
+ elif attr == "name":
+ return libxml2mod.name(self._o)
+ elif attr == "type":
+ return libxml2mod.type(self._o)
+ elif attr == "doc":
+ ret = libxml2mod.doc(self._o)
+ if ret == None:
+ if self.type == "document_xml" or self.type == "document_html":
+ return xmlDoc(_obj=self._o)
+ else:
+ return None
+ return xmlDoc(_obj=ret)
+ raise AttributeError,attr
+ else:
+ parent = property(get_parent, None, None, "Parent node")
+ children = property(get_children, None, None, "First child node")
+ last = property(get_last, None, None, "Last sibling node")
+ next = property(get_next, None, None, "Next sibling node")
+ prev = property(get_prev, None, None, "Previous sibling node")
+ properties = property(get_properties, None, None, "List of properies")
+ content = property(get_content, None, None, "Content of this node")
+ name = property(get_name, None, None, "Node name")
+ type = property(get_type, None, None, "Node type")
+ doc = property(get_doc, None, None, "The document this node belongs to")
+
+ #
+ # Serialization routines, the optional arguments have the following
+ # meaning:
+ # encoding: string to ask saving in a specific encoding
+ # indent: if 1 the serializer is asked to indent the output
+ #
+ def serialize(self, encoding = None, format = 0):
+ return libxml2mod.serializeNode(self._o, encoding, format)
+ def saveTo(self, file, encoding = None, format = 0):
+ return libxml2mod.saveNodeTo(self._o, file, encoding, format)
+
+ #
+ # Canonicalization routines:
+ #
+ # nodes: the node set (tuple or list) to be included in the
+ # canonized image or None if all document nodes should be
+ # included.
+ # exclusive: the exclusive flag (0 - non-exclusive
+ # canonicalization; otherwise - exclusive canonicalization)
+ # prefixes: the list of inclusive namespace prefixes (strings),
+ # or None if there is no inclusive namespaces (only for
+ # exclusive canonicalization, ignored otherwise)
+ # with_comments: include comments in the result (!=0) or not
+ # (==0)
+ def c14nMemory(self,
+ nodes=None,
+ exclusive=0,
+ prefixes=None,
+ with_comments=0):
+ if nodes:
+ nodes = map(lambda n: n._o, nodes)
+ return libxml2mod.xmlC14NDocDumpMemory(
+ self.get_doc()._o,
+ nodes,
+ exclusive != 0,
+ prefixes,
+ with_comments != 0)
+ def c14nSaveTo(self,
+ file,
+ nodes=None,
+ exclusive=0,
+ prefixes=None,
+ with_comments=0):
+ if nodes:
+ nodes = map(lambda n: n._o, nodes)
+ return libxml2mod.xmlC14NDocSaveTo(
+ self.get_doc()._o,
+ nodes,
+ exclusive != 0,
+ prefixes,
+ with_comments != 0,
+ file)
+
+ #
+ # Selecting nodes using XPath, a bit slow because the context
+ # is allocated/freed every time but convenient.
+ #
+ def xpathEval(self, expr):
+ doc = self.doc
+ if doc == None:
+ return None
+ ctxt = doc.xpathNewContext()
+ ctxt.setContextNode(self)
+ res = ctxt.xpathEval(expr)
+ ctxt.xpathFreeContext()
+ return res
+
+# #
+# # Selecting nodes using XPath, faster because the context
+# # is allocated just once per xmlDoc.
+# #
+# # Removed: DV memleaks c.f. #126735
+# #
+# def xpathEval2(self, expr):
+# doc = self.doc
+# if doc == None:
+# return None
+# try:
+# doc._ctxt.setContextNode(self)
+# except:
+# doc._ctxt = doc.xpathNewContext()
+# doc._ctxt.setContextNode(self)
+# res = doc._ctxt.xpathEval(expr)
+# return res
+ def xpathEval2(self, expr):
+ return self.xpathEval(expr)
+
+ # support for python2 iterators
+ def walk_depth_first(self):
+ return xmlCoreDepthFirstItertor(self)
+ def walk_breadth_first(self):
+ return xmlCoreBreadthFirstItertor(self)
+ __iter__ = walk_depth_first
+
+ def free(self):
+ try:
+ self.doc._ctxt.xpathFreeContext()
+ except:
+ pass
+ libxml2mod.xmlFreeDoc(self._o)
+
+
+#
+# implements the depth-first iterator for libxml2 DOM tree
+#
+class xmlCoreDepthFirstItertor:
+ def __init__(self, node):
+ self.node = node
+ self.parents = []
+ def __iter__(self):
+ return self
+ def next(self):
+ while 1:
+ if self.node:
+ ret = self.node
+ self.parents.append(self.node)
+ self.node = self.node.children
+ return ret
+ try:
+ parent = self.parents.pop()
+ except IndexError:
+ raise StopIteration
+ self.node = parent.next
+
+#
+# implements the breadth-first iterator for libxml2 DOM tree
+#
+class xmlCoreBreadthFirstItertor:
+ def __init__(self, node):
+ self.node = node
+ self.parents = []
+ def __iter__(self):
+ return self
+ def next(self):
+ while 1:
+ if self.node:
+ ret = self.node
+ self.parents.append(self.node)
+ self.node = self.node.next
+ return ret
+ try:
+ parent = self.parents.pop()
+ except IndexError:
+ raise StopIteration
+ self.node = parent.children
+
+#
+# converters to present a nicer view of the XPath returns
+#
+def nodeWrap(o):
+ # TODO try to cast to the most appropriate node class
+ name = libxml2mod.name(o)
+ if name == "element" or name == "text":
+ return xmlNode(_obj=o)
+ if name == "attribute":
+ return xmlAttr(_obj=o)
+ if name[0:8] == "document":
+ return xmlDoc(_obj=o)
+ if name[0:8] == "namespace":
+ return xmlNs(_obj=o)
+ if name == "elem_decl":
+ return xmlElement(_obj=o)
+ if name == "attribute_decl":
+ return xmlAtribute(_obj=o)
+ if name == "entity_decl":
+ return xmlEntity(_obj=o)
+ if name == "dtd":
+ return xmlDtd(_obj=o)
+ return xmlNode(_obj=o)
+
+def xpathObjectRet(o):
+ if type(o) == type([]) or type(o) == type(()):
+ ret = map(lambda x: nodeWrap(x), o)
+ return ret
+ return o
+
+#
+# register an XPath function
+#
+def registerXPathFunction(ctxt, name, ns_uri, f):
+ ret = libxml2mod.xmlRegisterXPathFunction(ctxt, name, ns_uri, f)
+
+#
+# For the xmlTextReader parser configuration
+#
+PARSER_LOADDTD=1
+PARSER_DEFAULTATTRS=2
+PARSER_VALIDATE=3
+PARSER_SUBST_ENTITIES=4
+
+#
+# For the error callback severities
+#
+PARSER_SEVERITY_VALIDITY_WARNING=1
+PARSER_SEVERITY_VALIDITY_ERROR=2
+PARSER_SEVERITY_WARNING=3
+PARSER_SEVERITY_ERROR=4
+
+#
+# register the libxml2 error handler
+#
+def registerErrorHandler(f, ctx):
+ """Register a Python written function to for error reporting.
+ The function is called back as f(ctx, error). """
+ import sys
+ if not sys.modules.has_key('libxslt'):
+ # normal behaviour when libxslt is not imported
+ ret = libxml2mod.xmlRegisterErrorHandler(f,ctx)
+ else:
+ # when libxslt is already imported, one must
+ # use libxst's error handler instead
+ import libxslt
+ ret = libxslt.registerErrorHandler(f,ctx)
+ return ret
+
+class parserCtxtCore:
+
+ def __init__(self, _obj=None):
+ if _obj != None:
+ self._o = _obj;
+ return
+ self._o = None
+
+ def __del__(self):
+ if self._o != None:
+ libxml2mod.xmlFreeParserCtxt(self._o)
+ self._o = None
+
+ def setErrorHandler(self,f,arg):
+ """Register an error handler that will be called back as
+ f(arg,msg,severity,reserved).
+
+ @reserved is currently always None."""
+ libxml2mod.xmlParserCtxtSetErrorHandler(self._o,f,arg)
+
+ def getErrorHandler(self):
+ """Return (f,arg) as previously registered with setErrorHandler
+ or (None,None)."""
+ return libxml2mod.xmlParserCtxtGetErrorHandler(self._o)
+
+ def addLocalCatalog(self, uri):
+ """Register a local catalog with the parser"""
+ return libxml2mod.addLocalCatalog(self._o, uri)
+
+
+def _xmlTextReaderErrorFunc((f,arg),msg,severity,locator):
+ """Intermediate callback to wrap the locator"""
+ return f(arg,msg,severity,xmlTextReaderLocator(locator))
+
+class xmlTextReaderCore:
+
+ def __init__(self, _obj=None):
+ self.input = None
+ if _obj != None:self._o = _obj;return
+ self._o = None
+
+ def __del__(self):
+ if self._o != None:
+ libxml2mod.xmlFreeTextReader(self._o)
+ self._o = None
+
+ def SetErrorHandler(self,f,arg):
+ """Register an error handler that will be called back as
+ f(arg,msg,severity,locator)."""
+ if f is None:
+ libxml2mod.xmlTextReaderSetErrorHandler(\
+ self._o,None,None)
+ else:
+ libxml2mod.xmlTextReaderSetErrorHandler(\
+ self._o,_xmlTextReaderErrorFunc,(f,arg))
+
+ def GetErrorHandler(self):
+ """Return (f,arg) as previously registered with setErrorHandler
+ or (None,None)."""
+ f,arg = libxml2mod.xmlTextReaderGetErrorHandler(self._o)
+ if f is None:
+ return None,None
+ else:
+ # assert f is _xmlTextReaderErrorFunc
+ return arg
+
+
+# WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+#
+# Everything before this line comes from libxml.py
+# Everything after this line is automatically generated
+#
+# WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+
diff --git a/python/libxml2-py.c b/python/libxml2-py.c
new file mode 100644
index 0000000..2e3bf22
--- /dev/null
+++ b/python/libxml2-py.c
@@ -0,0 +1,12873 @@
+/* Generated */
+
+#include <Python.h>
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xmlschemastypes.h>
+#include "libxml_wrap.h"
+#include "libxml2-py.h"
+
+PyObject *
+libxml_xmlUCSIsBlockElements(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBlockElements", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsBlockElements(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDocEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlEntityPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetDocEntity", &pyobj_doc, &name))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlGetDocEntity(doc, name);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsBopomofo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBopomofo", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsBopomofo(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeGetBase(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlNodeGetBase", &pyobj_doc, &pyobj_cur))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlNodeGetBase(doc, cur);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextAncestorOrSelf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextAncestorOrSelf", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextAncestorOrSelf(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlStrstr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlChar * str;
+ xmlChar * val;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrstr", &str, &val))
+ return(NULL);
+
+ c_retval = xmlStrstr(str, val);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlReaderForFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlTextReaderPtr c_retval;
+ char * filename;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzi:xmlReaderForFile", &filename, &encoding, &options))
+ return(NULL);
+
+ c_retval = xmlReaderForFile(filename, encoding, options);
+ py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderExpand(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderExpand", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderExpand(reader);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlNodePtr elem;
+ PyObject *pyobj_elem;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddSibling", &pyobj_cur, &pyobj_elem))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+ elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+ c_retval = xmlAddSibling(cur, elem);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlScanName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlScanName", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlScanName(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlFreeParserInputBuffer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserInputBufferPtr in;
+ PyObject *pyobj_in;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeParserInputBuffer", &pyobj_in))
+ return(NULL);
+ in = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_in);
+
+ xmlFreeParserInputBuffer(in);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlRegisterDefaultInputCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlRegisterDefaultInputCallbacks();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsMathematicalAlphanumericSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMathematicalAlphanumericSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMathematicalAlphanumericSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNsLookup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * prefix;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlXPathNsLookup", &pyobj_ctxt, &prefix))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathNsLookup(ctxt, prefix);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlDebugDumpEntities", &pyobj_output, &pyobj_doc))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ xmlDebugDumpEntities(output, doc);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ int depth;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpNodeList", &pyobj_output, &pyobj_node, &depth))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ xmlDebugDumpNodeList(output, node, depth);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextAncestor(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextAncestor", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextAncestor(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCastNumberToBoolean(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ double val;
+
+ if (!PyArg_ParseTuple(args, (char *)"d:xmlXPathCastNumberToBoolean", &val))
+ return(NULL);
+
+ c_retval = xmlXPathCastNumberToBoolean(val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsCatCs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatCs", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatCs(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatCf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatCf", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatCf(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeAddContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeAddContent", &pyobj_cur, &content))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlNodeAddContent(cur, content);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsCatCo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatCo", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatCo(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNanoFTPCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlNanoFTPCleanup();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlRecoverMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ char * buffer;
+ int size;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlRecoverMemory", &buffer, &size))
+ return(NULL);
+
+ c_retval = xmlRecoverMemory(buffer, size);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlValidateNCName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * value;
+ int space;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlValidateNCName", &value, &space))
+ return(NULL);
+
+ c_retval = xmlValidateNCName(value, space);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderIsDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderIsDefault", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderIsDefault(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsTagalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTagalog", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsTagalog(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGFree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlRelaxNGPtr schema;
+ PyObject *pyobj_schema;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGFree", &pyobj_schema))
+ return(NULL);
+ schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+ xmlRelaxNGFree(schema);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlUCSIsMalayalam(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMalayalam", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMalayalam(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlXPathInit();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGFreeParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlRelaxNGParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGFreeParserCtxt", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlRelaxNGParserCtxtPtr) PyrelaxNgParserCtxt_Get(pyobj_ctxt);
+
+ xmlRelaxNGFreeParserCtxt(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlCheckLanguageID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * lang;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCheckLanguageID", &lang))
+ return(NULL);
+
+ c_retval = xmlCheckLanguageID(lang);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlFreeNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNsPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeNs", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNsPtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlFreeNs(cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlReaderNewMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ char * buffer;
+ int size;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozizzi:xmlReaderNewMemory", &pyobj_reader, &buffer, &size, &URL, &encoding, &options))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlReaderNewMemory(reader, buffer, size, URL, encoding, options);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNormalizeFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathNormalizeFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathNormalizeFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlGetNoNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetNoNsProp", &pyobj_node, &name))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlGetNoNsProp(node, name);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNewString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlChar * val;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathNewString", &val))
+ return(NULL);
+
+ c_retval = xmlXPathNewString(val);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlNewProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * name;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlNewProp", &pyobj_node, &name, &value))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlNewProp(node, name, value);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserGetDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParserGetDoc", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = ctxt->myDoc;
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeAddContentLen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlChar * content;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlNodeAddContentLen", &pyobj_cur, &content, &len))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlNodeAddContentLen(cur, content, len);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlRegisterDefaultOutputCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlRegisterDefaultOutputCallbacks();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlCleanupCharEncodingHandlers(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlCleanupCharEncodingHandlers();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlNodeDumpFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * out;
+ PyObject *pyobj_out;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:htmlNodeDumpFile", &pyobj_out, &pyobj_doc, &pyobj_cur))
+ return(NULL);
+ out = (FILE *) PyFile_Get(pyobj_out);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ htmlNodeDumpFile(out, doc, cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathModValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathModValues", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathModValues(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlParseEntityRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlEntityPtr c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEntityRef", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseEntityRef(ctxt);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCatalogIsEmpty(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlCatalogIsEmpty", &pyobj_catal))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+ c_retval = xmlCatalogIsEmpty(catal);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_htmlInitAutoClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ htmlInitAutoClose();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlTextReaderReadOuterXml(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadOuterXml", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderReadOuterXml(reader);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlLoadSGMLSuperCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlCatalogPtr c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlLoadSGMLSuperCatalog", &filename))
+ return(NULL);
+
+ c_retval = xmlLoadSGMLSuperCatalog(filename);
+ py_retval = libxml_xmlCatalogPtrWrap((xmlCatalogPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsTamil(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTamil", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsTamil(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlXPathSetContextDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathSetContextDoc", &pyobj_ctxt, &pyobj_doc))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ ctxt->doc = doc;
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlChar * str;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlDebugDumpString", &pyobj_output, &str))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+
+ xmlDebugDumpString(output, str);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlCopyChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int len;
+ xmlChar * out;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"izi:xmlCopyChar", &len, &out, &val))
+ return(NULL);
+
+ c_retval = xmlCopyChar(len, out, val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCleanupGlobals(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlCleanupGlobals();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathRegisteredVariablesCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRegisteredVariablesCleanup", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ xmlXPathRegisteredVariablesCleanup(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlEncodeEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * input;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlEncodeEntities", &pyobj_doc, &input))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlEncodeEntities(doc, input);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDtdQElementDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlElementPtr c_retval;
+ xmlDtdPtr dtd;
+ PyObject *pyobj_dtd;
+ xmlChar * name;
+ xmlChar * prefix;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlGetDtdQElementDesc", &pyobj_dtd, &name, &prefix))
+ return(NULL);
+ dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+ c_retval = xmlGetDtdQElementDesc(dtd, name, prefix);
+ py_retval = libxml_xmlElementPtrWrap((xmlElementPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseNamespace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseNamespace", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseNamespace(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlStrncasecmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * str1;
+ xmlChar * str2;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzi:xmlStrncasecmp", &str1, &str2, &len))
+ return(NULL);
+
+ c_retval = xmlStrncasecmp(str1, str2, len);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathLocalNameFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathLocalNameFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathLocalNameFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCanonicPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * path;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCanonicPath", &path))
+ return(NULL);
+
+ c_retval = xmlCanonicPath(path);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextPrecedingSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextPrecedingSibling", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextPrecedingSibling(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCatalogCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlCatalogCleanup();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNextChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlNextChar", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlNextChar(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNanoHTTPInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlNanoHTTPInit();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlCopyNamespaceList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNsPtr c_retval;
+ xmlNsPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlCopyNamespaceList", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNsPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlCopyNamespaceList(cur);
+ py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr elem;
+ PyObject *pyobj_elem;
+ xmlAttrPtr attr;
+ PyObject *pyobj_attr;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:xmlIsID", &pyobj_doc, &pyobj_elem, &pyobj_attr))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+ attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+ c_retval = xmlIsID(doc, elem, attr);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsSpecials(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSpecials", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSpecials(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseCDSect(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseCDSect", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseCDSect(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsLatinExtendedB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLatinExtendedB", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLatinExtendedB(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsLatinExtendedA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLatinExtendedA", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLatinExtendedA(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseExtParsedEnt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseExtParsedEnt", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseExtParsedEnt(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyDtd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDtdPtr c_retval;
+ xmlDtdPtr dtd;
+ PyObject *pyobj_dtd;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlCopyDtd", &pyobj_dtd))
+ return(NULL);
+ dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+ c_retval = xmlCopyDtd(dtd);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeListGetRawString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr list;
+ PyObject *pyobj_list;
+ int inLine;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOi:xmlNodeListGetRawString", &pyobj_doc, &pyobj_list, &inLine))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ list = (xmlNodePtr) PyxmlNode_Get(pyobj_list);
+
+ c_retval = xmlNodeListGetRawString(doc, list, inLine);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlErrorGetLine(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlErrorPtr Error;
+ PyObject *pyobj_Error;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetLine", &pyobj_Error))
+ return(NULL);
+ Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+ c_retval = Error->line;
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStringLenDecodeEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * str;
+ int len;
+ int what;
+ xmlChar end;
+ xmlChar end2;
+ xmlChar end3;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oziiccc:xmlStringLenDecodeEntities", &pyobj_ctxt, &str, &len, &what, &end, &end2, &end3))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlStringLenDecodeEntities(ctxt, str, len, what, end, end2, end3);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCJKUnifiedIdeographsExtensionA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKUnifiedIdeographsExtensionA", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCJKUnifiedIdeographsExtensionA(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCJKUnifiedIdeographsExtensionB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKUnifiedIdeographsExtensionB", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCJKUnifiedIdeographsExtensionB(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlCreateMemoryParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlParserCtxtPtr c_retval;
+ char * buffer;
+ int size;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:htmlCreateMemoryParserCtxt", &buffer, &size))
+ return(NULL);
+
+ c_retval = htmlCreateMemoryParserCtxt(buffer, size);
+ py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlNewDocNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewDocNode", &pyobj_doc, &pyobj_ns, &name, &content))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlNewDocNode(doc, ns, name, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsDigit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ unsigned int ch;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlIsDigit", &ch))
+ return(NULL);
+
+ c_retval = xmlIsDigit(ch);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlParseDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ xmlChar * cur;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:htmlParseDoc", &cur, &encoding))
+ return(NULL);
+
+ c_retval = htmlParseDoc(cur, encoding);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlCatalogSetDebug(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int level;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlCatalogSetDebug", &level))
+ return(NULL);
+
+ c_retval = xmlCatalogSetDebug(level);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsMiscellaneousMathematicalSymbolsB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousMathematicalSymbolsB", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMiscellaneousMathematicalSymbolsB(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserGetDirectory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ char * c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlParserGetDirectory", &filename))
+ return(NULL);
+
+ c_retval = xmlParserGetDirectory(filename);
+ py_retval = libxml_charPtrWrap((char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsMiscellaneousMathematicalSymbolsA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousMathematicalSymbolsA", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMiscellaneousMathematicalSymbolsA(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlSchemaCleanupTypes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlSchemaCleanupTypes();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathFreeParserContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathFreeParserContext", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathFreeParserContext(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlFreeNsList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNsPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeNsList", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNsPtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlFreeNsList(cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseEntityDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEntityDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseEntityDecl(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlDocCopyNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ int extended;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDocCopyNode", &pyobj_node, &pyobj_doc, &extended))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlDocCopyNode(node, doc, extended);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_nodePop(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:nodePop", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = nodePop(ctxt);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+ PyObject *py_retval;
+ xmlURIPtr c_retval;
+
+ c_retval = xmlCreateURI();
+ py_retval = libxml_xmlURIPtrWrap((xmlURIPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextDescendant(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextDescendant", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextDescendant(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlStrcat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * cur;
+ xmlChar * add;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrcat", &cur, &add))
+ return(NULL);
+
+ c_retval = xmlStrcat(cur, add);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlInitializeCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlInitializeCatalog();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlParseEntity", &filename))
+ return(NULL);
+
+ c_retval = xmlParseEntity(filename);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlDocGetRootElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlDocGetRootElement", &pyobj_doc))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlDocGetRootElement(doc);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsKhmerSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKhmerSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsKhmerSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseMarkupDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseMarkupDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseMarkupDecl(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_htmlCreateFileParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlParserCtxtPtr c_retval;
+ char * filename;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:htmlCreateFileParserCtxt", &filename, &encoding))
+ return(NULL);
+
+ c_retval = htmlCreateFileParserCtxt(filename, encoding);
+ py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlHasNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * name;
+ xmlChar * nameSpace;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlHasNsProp", &pyobj_node, &name, &nameSpace))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlHasNsProp(node, name, nameSpace);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddPrevSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlNodePtr elem;
+ PyObject *pyobj_elem;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddPrevSibling", &pyobj_cur, &pyobj_elem))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+ elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+ c_retval = xmlAddPrevSibling(cur, elem);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderMoveToAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderMoveToAttribute", &pyobj_reader, &name))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderMoveToAttribute(reader, name);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCyrillic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCyrillic", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCyrillic(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDtdAttrDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttributePtr c_retval;
+ xmlDtdPtr dtd;
+ PyObject *pyobj_dtd;
+ xmlChar * elem;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlGetDtdAttrDesc", &pyobj_dtd, &elem, &name))
+ return(NULL);
+ dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+ c_retval = xmlGetDtdAttrDesc(dtd, elem, name);
+ py_retval = libxml_xmlAttributePtrWrap((xmlAttributePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCJKCompatibilityForms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKCompatibilityForms", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCJKCompatibilityForms(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlGetMetaEncoding(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ htmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:htmlGetMetaEncoding", &pyobj_doc))
+ return(NULL);
+ doc = (htmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = htmlGetMetaEncoding(doc);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlCharStrdup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ char * cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCharStrdup", &cur))
+ return(NULL);
+
+ c_retval = xmlCharStrdup(cur);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlElemDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * f;
+ PyObject *pyobj_f;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:xmlElemDump", &pyobj_f, &pyobj_doc, &pyobj_cur))
+ return(NULL);
+ f = (FILE *) PyFile_Get(pyobj_f);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlElemDump(f, doc, cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsEnclosedCJKLettersandMonths(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsEnclosedCJKLettersandMonths", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsEnclosedCJKLettersandMonths(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetIntSubset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDtdPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlGetIntSubset", &pyobj_doc))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlGetIntSubset(doc);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlRecoverDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlChar * cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlRecoverDoc", &cur))
+ return(NULL);
+
+ c_retval = xmlRecoverDoc(cur);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCleanupInputCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlCleanupInputCallbacks();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNormalizeURIPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * path;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlNormalizeURIPath", &path))
+ return(NULL);
+
+ c_retval = xmlNormalizeURIPath(path);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewTextReader(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlTextReaderPtr c_retval;
+ xmlParserInputBufferPtr input;
+ PyObject *pyobj_input;
+ char * URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewTextReader", &pyobj_input, &URI))
+ return(NULL);
+ input = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_input);
+
+ c_retval = xmlNewTextReader(input, URI);
+ py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCombiningDiacriticalMarksforSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCombiningDiacriticalMarksforSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCombiningDiacriticalMarksforSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpAttrList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlAttrPtr attr;
+ PyObject *pyobj_attr;
+ int depth;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpAttrList", &pyobj_output, &pyobj_attr, &depth))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+ xmlDebugDumpAttrList(output, attr, depth);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlTextReaderGetAttributeNo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ int no;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlTextReaderGetAttributeNo", &pyobj_reader, &no))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderGetAttributeNo(reader, no);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserInputBufferRead(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserInputBufferPtr in;
+ PyObject *pyobj_in;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserInputBufferRead", &pyobj_in, &len))
+ return(NULL);
+ in = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_in);
+
+ c_retval = xmlParserInputBufferRead(in, len);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathOrderDocElems(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ long c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathOrderDocElems", &pyobj_doc))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlXPathOrderDocElems(doc);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsLinearBIdeograms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLinearBIdeograms", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLinearBIdeograms(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseCharData(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int cdata;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParseCharData", &pyobj_ctxt, &cdata))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseCharData(ctxt, cdata);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsHangulJamo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHangulJamo", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsHangulJamo(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsThai(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsThai", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsThai(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlCtxtReset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:htmlCtxtReset", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ htmlCtxtReset(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlCtxtReadFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ char * filename;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzi:xmlCtxtReadFile", &pyobj_ctxt, &filename, &encoding, &options))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlCtxtReadFile(ctxt, filename, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef 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 /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathRegisterNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * prefix;
+ xmlChar * ns_uri;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlXPathRegisterNs", &pyobj_ctxt, &prefix, &ns_uri))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathRegisterNs(ctxt, prefix, ns_uri);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlIOFTPMatch(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlIOFTPMatch", &filename))
+ return(NULL);
+
+ c_retval = xmlIOFTPMatch(filename);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ int extended;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlCopyNode", &pyobj_node, &extended))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlCopyNode(node, extended);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCatalogResolveSystem(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * sysID;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogResolveSystem", &sysID))
+ return(NULL);
+
+ c_retval = xmlCatalogResolveSystem(sysID);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderConstLocalName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstLocalName", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderConstLocalName(reader);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURISetServer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+ char * server;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetServer", &pyobj_URI, &server))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ if (URI->server != NULL) xmlFree(URI->server);
+ URI->server = (char *)xmlStrdup((const xmlChar *)server);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathLastFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathLastFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathLastFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsSpacingModifierLetters(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSpacingModifierLetters", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSpacingModifierLetters(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsOpticalCharacterRecognition(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOpticalCharacterRecognition", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsOpticalCharacterRecognition(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefSubstituteEntitiesDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefSubstituteEntitiesDefaultValue", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefSubstituteEntitiesDefaultValue(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewNsProp", &pyobj_node, &pyobj_ns, &name, &value))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlNewNsProp(node, ns, name, value);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefIndentTreeOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefIndentTreeOutput", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefIndentTreeOutput(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlCatalogPtr c_retval;
+ int sgml;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlNewCatalog", &sgml))
+ return(NULL);
+
+ c_retval = xmlNewCatalog(sgml);
+ py_retval = libxml_xmlCatalogPtrWrap((xmlCatalogPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsYijingHexagramSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsYijingHexagramSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsYijingHexagramSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsHighPrivateUseSurrogates(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHighPrivateUseSurrogates", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsHighPrivateUseSurrogates(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPTR_ENABLED
+PyObject *
+libxml_xmlXPtrNewContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathContextPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr here;
+ PyObject *pyobj_here;
+ xmlNodePtr origin;
+ PyObject *pyobj_origin;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:xmlXPtrNewContext", &pyobj_doc, &pyobj_here, &pyobj_origin))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ here = (xmlNodePtr) PyxmlNode_Get(pyobj_here);
+ origin = (xmlNodePtr) PyxmlNode_Get(pyobj_origin);
+
+ c_retval = xmlXPtrNewContext(doc, here, origin);
+ py_retval = libxml_xmlXPathContextPtrWrap((xmlXPathContextPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPTR_ENABLED */
+PyObject *
+libxml_xmlDefaultSAXHandlerInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlDefaultSAXHandlerInit();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsBraillePatterns(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBraillePatterns", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsBraillePatterns(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseAttValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseAttValue", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseAttValue(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateMemoryParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlParserCtxtPtr c_retval;
+ char * buffer;
+ int size;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlCreateMemoryParserCtxt", &buffer, &size))
+ return(NULL);
+
+ c_retval = xmlCreateMemoryParserCtxt(buffer, size);
+ py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStringGetNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlStringGetNodeList", &pyobj_doc, &value))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlStringGetNodeList(doc, value);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlHandleOmittedElem(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:htmlHandleOmittedElem", &val))
+ return(NULL);
+
+ c_retval = htmlHandleOmittedElem(val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlParseName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseName", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseName(ctxt);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathTrueFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathTrueFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathTrueFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCatalogAdd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * type;
+ xmlChar * orig;
+ xmlChar * replace;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzz:xmlCatalogAdd", &type, &orig, &replace))
+ return(NULL);
+
+ c_retval = xmlCatalogAdd(type, orig, replace);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCombiningDiacriticalMarks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCombiningDiacriticalMarks", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCombiningDiacriticalMarks(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCastStringToBoolean(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * val;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathCastStringToBoolean", &val))
+ return(NULL);
+
+ c_retval = xmlXPathCastStringToBoolean(val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathEqualValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathEqualValues", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathEqualValues(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCtxtUseOptions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlCtxtUseOptions", &pyobj_ctxt, &options))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlCtxtUseOptions(ctxt, options);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsShavian(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsShavian", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsShavian(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderMoveToElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderMoveToElement", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderMoveToElement(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlIsAutoClosed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ htmlDocPtr doc;
+ PyObject *pyobj_doc;
+ htmlNodePtr elem;
+ PyObject *pyobj_elem;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:htmlIsAutoClosed", &pyobj_doc, &pyobj_elem))
+ return(NULL);
+ doc = (htmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ elem = (htmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+ c_retval = htmlIsAutoClosed(doc, elem);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlUCSIsUgaritic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsUgaritic", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsUgaritic(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCJKCompatibilityIdeographsSupplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKCompatibilityIdeographsSupplement", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCJKCompatibilityIdeographsSupplement(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatCc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatCc", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatCc(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsHebrew(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHebrew", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsHebrew(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlReconciliateNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr tree;
+ PyObject *pyobj_tree;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlReconciliateNs", &pyobj_doc, &pyobj_tree))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ tree = (xmlNodePtr) PyxmlNode_Get(pyobj_tree);
+
+ c_retval = xmlReconciliateNs(doc, tree);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathLangFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathLangFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathLangFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathEvalExpression(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlChar * str;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"zO:xmlXPathEvalExpression", &str, &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathEvalExpression(str, ctxt);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCopyError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlErrorPtr from;
+ PyObject *pyobj_from;
+ xmlErrorPtr to;
+ PyObject *pyobj_to;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlCopyError", &pyobj_from, &pyobj_to))
+ return(NULL);
+ from = (xmlErrorPtr) PyError_Get(pyobj_from);
+ to = (xmlErrorPtr) PyError_Get(pyobj_to);
+
+ c_retval = xmlCopyError(from, to);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGValidateDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlRelaxNGValidCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlRelaxNGValidateDoc", &pyobj_ctxt, &pyobj_doc))
+ return(NULL);
+ ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlRelaxNGValidateDoc(ctxt, doc);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlNewChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr parent;
+ PyObject *pyobj_parent;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewChild", &pyobj_parent, &pyobj_ns, &name, &content))
+ return(NULL);
+ parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlNewChild(parent, ns, name, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSearchNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNsPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * nameSpace;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOz:xmlSearchNs", &pyobj_doc, &pyobj_node, &nameSpace))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlSearchNs(doc, node, nameSpace);
+ py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsKangxiRadicals(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKangxiRadicals", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsKangxiRadicals(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeSetSpacePreserve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlNodeSetSpacePreserve", &pyobj_cur, &val))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlNodeSetSpacePreserve(cur, val);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsArmenian(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArmenian", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsArmenian(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateIntSubset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDtdPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+ xmlChar * ExternalID;
+ xmlChar * SystemID;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzz:xmlCreateIntSubset", &pyobj_doc, &name, &ExternalID, &SystemID))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlCreateIntSubset(doc, name, ExternalID, SystemID);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathSubValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathSubValues", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathSubValues(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsArabicPresentationFormsA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArabicPresentationFormsA", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsArabicPresentationFormsA(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsArabicPresentationFormsB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArabicPresentationFormsB", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsArabicPresentationFormsB(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsGeometricShapes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGeometricShapes", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsGeometricShapes(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCastNodeToNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ double c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathCastNodeToNumber", &pyobj_node))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlXPathCastNodeToNumber(node);
+ py_retval = libxml_doubleWrap((double) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlGetPredefinedEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlEntityPtr c_retval;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlGetPredefinedEntity", &name))
+ return(NULL);
+
+ c_retval = xmlGetPredefinedEntity(name);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewText(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlNewText", &content))
+ return(NULL);
+
+ c_retval = xmlNewText(content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSaveFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"zO:xmlSaveFile", &filename, &pyobj_cur))
+ return(NULL);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlSaveFile(filename, cur);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextNamespace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextNamespace", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextNamespace(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlTextReaderRelaxNGValidate(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ char * rng;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderRelaxNGValidate", &pyobj_reader, &rng))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderRelaxNGValidate(reader, rng);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDocText(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewDocText", &pyobj_doc, &content))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewDocText(doc, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsBuhid(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBuhid", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsBuhid(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlChar * cur;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzzi:xmlReadDoc", &cur, &URL, &encoding, &options))
+ return(NULL);
+
+ c_retval = xmlReadDoc(cur, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNewValueTree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlNodePtr val;
+ PyObject *pyobj_val;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNewValueTree", &pyobj_val))
+ return(NULL);
+ val = (xmlNodePtr) PyxmlNode_Get(pyobj_val);
+
+ c_retval = xmlXPathNewValueTree(val);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlReaderNewFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ char * filename;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzi:xmlReaderNewFile", &pyobj_reader, &filename, &encoding, &options))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlReaderNewFile(reader, filename, encoding, options);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsSupplementalMathematicalOperators(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementalMathematicalOperators", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSupplementalMathematicalOperators(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlFreeDtd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlDtdPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeDtd", &pyobj_cur))
+ return(NULL);
+ cur = (xmlDtdPtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlFreeDtd(cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlOutputBufferWriteString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlOutputBufferPtr out;
+ PyObject *pyobj_out;
+ char * str;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlOutputBufferWriteString", &pyobj_out, &str))
+ return(NULL);
+ out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
+
+ c_retval = xmlOutputBufferWriteString(out, str);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSetListDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr list;
+ PyObject *pyobj_list;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlSetListDoc", &pyobj_list, &pyobj_doc))
+ return(NULL);
+ list = (xmlNodePtr) PyxmlNode_Get(pyobj_list);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ xmlSetListDoc(list, doc);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlReadFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ char * filename;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzi:htmlReadFile", &filename, &encoding, &options))
+ return(NULL);
+
+ c_retval = htmlReadFile(filename, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlCtxtReadFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ char * filename;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzi:htmlCtxtReadFile", &pyobj_ctxt, &filename, &encoding, &options))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = htmlCtxtReadFile(ctxt, filename, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlThrDefLineNumbersDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefLineNumbersDefaultValue", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefLineNumbersDefaultValue(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+PyObject *
+libxml_xmlXIncludeProcessTreeFlags(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr tree;
+ PyObject *pyobj_tree;
+ int flags;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXIncludeProcessTreeFlags", &pyobj_tree, &flags))
+ return(NULL);
+ tree = (xmlNodePtr) PyxmlNode_Get(pyobj_tree);
+
+ c_retval = xmlXIncludeProcessTreeFlags(tree, flags);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XINCLUDE_ENABLED */
+PyObject *
+libxml_xmlGetID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * ID;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetID", &pyobj_doc, &ID))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlGetID(doc, ID);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCombiningHalfMarks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCombiningHalfMarks", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCombiningHalfMarks(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsBlank(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ unsigned int ch;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlIsBlank", &ch))
+ return(NULL);
+
+ c_retval = xmlIsBlank(ch);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPTR_ENABLED
+PyObject *
+libxml_xmlXPtrNewLocationSetNodes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlNodePtr start;
+ PyObject *pyobj_start;
+ xmlNodePtr end;
+ PyObject *pyobj_end;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPtrNewLocationSetNodes", &pyobj_start, &pyobj_end))
+ return(NULL);
+ start = (xmlNodePtr) PyxmlNode_Get(pyobj_start);
+ end = (xmlNodePtr) PyxmlNode_Get(pyobj_end);
+
+ c_retval = xmlXPtrNewLocationSetNodes(start, end);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPTR_ENABLED */
+PyObject *
+libxml_xmlUCSIsCombiningMarksforSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCombiningMarksforSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCombiningMarksforSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatSc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatSc", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatSc(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsLao(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLao", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLao(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatSk(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatSk", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatSk(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDocFragment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlNewDocFragment", &pyobj_doc))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewDocFragment(doc);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlValidateName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * value;
+ int space;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlValidateName", &value, &space))
+ return(NULL);
+
+ c_retval = xmlValidateName(value, space);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathFreeContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathFreeContext", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ xmlXPathFreeContext(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlURIGetAuthority(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetAuthority", &pyobj_URI))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ c_retval = URI->authority;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseEncodingDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEncodingDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseEncodingDecl(ctxt);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsMiscellaneousSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMiscellaneousSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlSaveFileEnc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"zOz:htmlSaveFileEnc", &filename, &pyobj_cur, &encoding))
+ return(NULL);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = htmlSaveFileEnc(filename, cur, encoding);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_namePop(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:namePop", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = namePop(ctxt);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseContent", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseContent(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlReadMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ char * buffer;
+ int size;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zizzi:xmlReadMemory", &buffer, &size, &URL, &encoding, &options))
+ return(NULL);
+
+ c_retval = xmlReadMemory(buffer, size, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefGetWarningsDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefGetWarningsDefaultValue", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefGetWarningsDefaultValue(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsMongolian(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMongolian", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMongolian(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderHasAttributes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderHasAttributes", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderHasAttributes(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCJKRadicalsSupplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKRadicalsSupplement", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCJKRadicalsSupplement(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsGothic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGothic", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsGothic(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeDumpOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlOutputBufferPtr buf;
+ PyObject *pyobj_buf;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ int level;
+ int format;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOOiiz:xmlNodeDumpOutput", &pyobj_buf, &pyobj_doc, &pyobj_cur, &level, &format, &encoding))
+ return(NULL);
+ buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlNodeDumpOutput(buf, doc, cur, level, format, encoding);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlCopyNamespace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNsPtr c_retval;
+ xmlNsPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlCopyNamespace", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNsPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlCopyNamespace(cur);
+ py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathRegisteredFuncsCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRegisteredFuncsCleanup", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ xmlXPathRegisteredFuncsCleanup(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsBlock(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+ char * block;
+
+ if (!PyArg_ParseTuple(args, (char *)"iz:xmlUCSIsBlock", &code, &block))
+ return(NULL);
+
+ c_retval = xmlUCSIsBlock(code, block);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderMoveToNextAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderMoveToNextAttribute", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderMoveToNextAttribute(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatNd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatNd", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatNd(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseSDDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseSDDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseSDDecl(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlReaderNewWalker(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlReaderNewWalker", &pyobj_reader, &pyobj_doc))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlReaderNewWalker(reader, doc);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURISetFragment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+ char * fragment;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetFragment", &pyobj_URI, &fragment))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ if (URI->fragment != NULL) xmlFree(URI->fragment);
+ URI->fragment = (char *)xmlStrdup((const xmlChar *)fragment);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsCatNl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatNl", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatNl(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatNo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatNo", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatNo(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathSumFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathSumFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathSumFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlSkipBlankChars(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlSkipBlankChars", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlSkipBlankChars(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlValidateNmtokenValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlValidateNmtokenValue", &value))
+ return(NULL);
+
+ c_retval = xmlValidateNmtokenValue(value);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetNodePath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlGetNodePath", &pyobj_node))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlGetNodePath(node);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlDocContentDumpOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlOutputBufferPtr buf;
+ PyObject *pyobj_buf;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOz:htmlDocContentDumpOutput", &pyobj_buf, &pyobj_cur, &encoding))
+ return(NULL);
+ buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ htmlDocContentDumpOutput(buf, cur, encoding);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlParseChunk(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ char * chunk;
+ int size;
+ int terminate;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozii:htmlParseChunk", &pyobj_ctxt, &chunk, &size, &terminate))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = htmlParseChunk(ctxt, chunk, size, terminate);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathPopBoolean(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathPopBoolean", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathPopBoolean(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathIdFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathIdFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathIdFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCreateURLParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlParserCtxtPtr c_retval;
+ char * filename;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlCreateURLParserCtxt", &filename, &options))
+ return(NULL);
+
+ c_retval = xmlCreateURLParserCtxt(filename, options);
+ py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderRead(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderRead", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderRead(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSaveUri(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlURIPtr uri;
+ PyObject *pyobj_uri;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlSaveUri", &pyobj_uri))
+ return(NULL);
+ uri = (xmlURIPtr) PyURI_Get(pyobj_uri);
+
+ c_retval = xmlSaveUri(uri);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ unsigned int ch;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlIsChar", &ch))
+ return(NULL);
+
+ c_retval = xmlIsChar(ch);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetServer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetServer", &pyobj_URI))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ c_retval = URI->server;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsIdeographic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ unsigned int ch;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlIsIdeographic", &ch))
+ return(NULL);
+
+ c_retval = xmlIsIdeographic(ch);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlCtxtReadFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int fd;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oizzi:htmlCtxtReadFd", &pyobj_ctxt, &fd, &URL, &encoding, &options))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = htmlCtxtReadFd(ctxt, fd, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlUCSIsLatinExtendedAdditional(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLatinExtendedAdditional", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLatinExtendedAdditional(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlPedanticParserDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlPedanticParserDefault", &val))
+ return(NULL);
+
+ c_retval = xmlPedanticParserDefault(val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURISetAuthority(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+ char * authority;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetAuthority", &pyobj_URI, &authority))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ if (URI->authority != NULL) xmlFree(URI->authority);
+ URI->authority = (char *)xmlStrdup((const xmlChar *)authority);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGValidatePushCData(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlRelaxNGValidCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * data;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlRelaxNGValidatePushCData", &pyobj_ctxt, &data, &len))
+ return(NULL);
+ ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlRelaxNGValidatePushCData(ctxt, data, len);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlGetLastError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+ PyObject *py_retval;
+ xmlErrorPtr c_retval;
+
+ c_retval = xmlGetLastError();
+ py_retval = libxml_xmlErrorPtrWrap((xmlErrorPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlChar * cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlParseDoc", &cur))
+ return(NULL);
+
+ c_retval = xmlParseDoc(cur);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathParseNCName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathParseNCName", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathParseNCName(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGNewDocParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlRelaxNGParserCtxtPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGNewDocParserCtxt", &pyobj_doc))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlRelaxNGNewDocParserCtxt(doc);
+ py_retval = libxml_xmlRelaxNGParserCtxtPtrWrap((xmlRelaxNGParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlConvertSGMLCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlConvertSGMLCatalog", &pyobj_catal))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+ c_retval = xmlConvertSGMLCatalog(catal);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlEncodeEntitiesReentrant(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * input;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlEncodeEntitiesReentrant", &pyobj_doc, &input))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlEncodeEntitiesReentrant(doc, input);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlRemoveProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlAttrPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlRemoveProp", &pyobj_cur))
+ return(NULL);
+ cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlRemoveProp(cur);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlACatalogDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+ FILE * out;
+ PyObject *pyobj_out;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlACatalogDump", &pyobj_catal, &pyobj_out))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+ out = (FILE *) PyFile_Get(pyobj_out);
+
+ xmlACatalogDump(catal, out);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNewParserContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathParserContextPtr c_retval;
+ xmlChar * str;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"zO:xmlXPathNewParserContext", &str, &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathNewParserContext(str, ctxt);
+ py_retval = libxml_xmlXPathParserContextPtrWrap((xmlXPathParserContextPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlReadFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ char * filename;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzi:xmlReadFile", &filename, &encoding, &options))
+ return(NULL);
+
+ c_retval = xmlReadFile(filename, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsNumberForms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsNumberForms", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsNumberForms(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseDocument(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseDocument", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseDocument(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrncmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * str1;
+ xmlChar * str2;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzi:xmlStrncmp", &str1, &str2, &len))
+ return(NULL);
+
+ c_retval = xmlStrncmp(str1, str2, len);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlFreeNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeNode", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlFreeNode(cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlCatalogGetPublic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlChar * pubID;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogGetPublic", &pubID))
+ return(NULL);
+
+ c_retval = xmlCatalogGetPublic(pubID);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGValidatePushElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlRelaxNGValidCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr elem;
+ PyObject *pyobj_elem;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:xmlRelaxNGValidatePushElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem))
+ return(NULL);
+ ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+ c_retval = xmlRelaxNGValidatePushElement(ctxt, doc, elem);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlUCSIsSinhala(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSinhala", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSinhala(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserInputBufferPush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserInputBufferPtr in;
+ PyObject *pyobj_in;
+ int len;
+ char * buf;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oiz:xmlParserInputBufferPush", &pyobj_in, &len, &buf))
+ return(NULL);
+ in = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_in);
+
+ c_retval = xmlParserInputBufferPush(in, len, buf);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSaveFormatFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ int format;
+
+ if (!PyArg_ParseTuple(args, (char *)"zOi:xmlSaveFormatFile", &filename, &pyobj_cur, &format))
+ return(NULL);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlSaveFormatFile(filename, cur, format);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlFileMatch(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlFileMatch", &filename))
+ return(NULL);
+
+ c_retval = xmlFileMatch(filename);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrEqual(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * str1;
+ xmlChar * str2;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrEqual", &str1, &str2))
+ return(NULL);
+
+ c_retval = xmlStrEqual(str1, str2);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderPreserve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderPreserve", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderPreserve(reader);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsKatakanaPhoneticExtensions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKatakanaPhoneticExtensions", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsKatakanaPhoneticExtensions(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGNewParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlRelaxNGParserCtxtPtr c_retval;
+ char * URL;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlRelaxNGNewParserCtxt", &URL))
+ return(NULL);
+
+ c_retval = xmlRelaxNGNewParserCtxt(URL);
+ py_retval = libxml_xmlRelaxNGParserCtxtPtrWrap((xmlRelaxNGParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlParseXMLDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseXMLDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseXMLDecl(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNewComment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlNewComment", &content))
+ return(NULL);
+
+ c_retval = xmlNewComment(content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGNewValidCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlRelaxNGValidCtxtPtr c_retval;
+ xmlRelaxNGPtr schema;
+ PyObject *pyobj_schema;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGNewValidCtxt", &pyobj_schema))
+ return(NULL);
+ schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+ c_retval = xmlRelaxNGNewValidCtxt(schema);
+ py_retval = libxml_xmlRelaxNGValidCtxtPtrWrap((xmlRelaxNGValidCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlUCSIsKatakana(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKatakana", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsKatakana(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+PyObject *
+libxml_xmlXIncludeProcess(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXIncludeProcess", &pyobj_doc))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlXIncludeProcess(doc);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XINCLUDE_ENABLED */
+PyObject *
+libxml_xmlURIGetPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetPath", &pyobj_URI))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ c_retval = URI->path;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsHalfwidthandFullwidthForms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHalfwidthandFullwidthForms", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsHalfwidthandFullwidthForms(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlValidateNamesValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlValidateNamesValue", &value))
+ return(NULL);
+
+ c_retval = xmlValidateNamesValue(value);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseURIReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlURIPtr uri;
+ PyObject *pyobj_uri;
+ char * str;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlParseURIReference", &pyobj_uri, &str))
+ return(NULL);
+ uri = (xmlURIPtr) PyURI_Get(pyobj_uri);
+
+ c_retval = xmlParseURIReference(uri, str);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Size(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * utf;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlUTF8Size", &utf))
+ return(NULL);
+
+ c_retval = xmlUTF8Size(utf);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr elem;
+ PyObject *pyobj_elem;
+ xmlAttrPtr attr;
+ PyObject *pyobj_attr;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:xmlIsRef", &pyobj_doc, &pyobj_elem, &pyobj_attr))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+ attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+ c_retval = xmlIsRef(doc, elem, attr);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsGurmukhi(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGurmukhi", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsGurmukhi(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_namePush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:namePush", &pyobj_ctxt, &value))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = namePush(ctxt, value);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeSetBase(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlChar * uri;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeSetBase", &pyobj_cur, &uri))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlNodeSetBase(cur, uri);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlTextReaderRelaxNGSetSchema(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlRelaxNGPtr schema;
+ PyObject *pyobj_schema;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlTextReaderRelaxNGSetSchema", &pyobj_reader, &pyobj_schema))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+ schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+ c_retval = xmlTextReaderRelaxNGSetSchema(reader, schema);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsKanbun(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKanbun", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsKanbun(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpAttr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlAttrPtr attr;
+ PyObject *pyobj_attr;
+ int depth;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpAttr", &pyobj_output, &pyobj_attr, &depth))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+ xmlDebugDumpAttr(output, attr, depth);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlCleanupOutputCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlCleanupOutputCallbacks();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsLatin1Supplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLatin1Supplement", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLatin1Supplement(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlXPathSetContextNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathSetContextNode", &pyobj_ctxt, &pyobj_node))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ ctxt->node = node;
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlSaveFileEnc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"zOz:xmlSaveFileEnc", &filename, &pyobj_cur, &encoding))
+ return(NULL);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlSaveFileEnc(filename, cur, encoding);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlXPathGetFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetFunction", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = ctxt->function;
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpOneNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ int depth;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpOneNode", &pyobj_output, &pyobj_node, &depth))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ xmlDebugDumpOneNode(output, node, depth);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlUCSIsSyriac(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSyriac", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSyriac(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strloc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * utf;
+ xmlChar * utfchar;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlUTF8Strloc", &utf, &utfchar))
+ return(NULL);
+
+ c_retval = xmlUTF8Strloc(utf, utfchar);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsDeseret(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsDeseret", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsDeseret(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateDocParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlParserCtxtPtr c_retval;
+ xmlChar * cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCreateDocParserCtxt", &cur))
+ return(NULL);
+
+ c_retval = xmlCreateDocParserCtxt(cur);
+ py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathRoundFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathRoundFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathRoundFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsDingbats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsDingbats", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsDingbats(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrcasestr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlChar * str;
+ xmlChar * val;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrcasestr", &str, &val))
+ return(NULL);
+
+ c_retval = xmlStrcasestr(str, val);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderReadState(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadState", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderReadState(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsPrivateUse(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsPrivateUse", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsPrivateUse(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsHangulSyllables(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHangulSyllables", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsHangulSyllables(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlRecoverFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlRecoverFile", &filename))
+ return(NULL);
+
+ c_retval = xmlRecoverFile(filename);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextFollowingSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextFollowingSibling", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextFollowingSibling(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlValidateQName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * value;
+ int space;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlValidateQName", &value, &space))
+ return(NULL);
+
+ c_retval = xmlValidateQName(value, space);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCompareValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int inf;
+ int strict;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oii:xmlXPathCompareValues", &pyobj_ctxt, &inf, &strict))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathCompareValues(ctxt, inf, strict);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlStrQEqual(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * pref;
+ xmlChar * name;
+ xmlChar * str;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzz:xmlStrQEqual", &pref, &name, &str))
+ return(NULL);
+
+ c_retval = xmlStrQEqual(pref, name, str);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlBuildURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * URI;
+ xmlChar * base;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlBuildURI", &URI, &base))
+ return(NULL);
+
+ c_retval = xmlBuildURI(URI, base);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsExtender(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ unsigned int ch;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlIsExtender", &ch))
+ return(NULL);
+
+ c_retval = xmlIsExtender(ch);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCastBooleanToString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlXPathCastBooleanToString", &val))
+ return(NULL);
+
+ c_retval = xmlXPathCastBooleanToString(val);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUTF8Charcmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * utf1;
+ xmlChar * utf2;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlUTF8Charcmp", &utf1, &utf2))
+ return(NULL);
+
+ c_retval = xmlUTF8Charcmp(utf1, utf2);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPTR_ENABLED
+PyObject *
+libxml_xmlXPtrNewRangeNodes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlNodePtr start;
+ PyObject *pyobj_start;
+ xmlNodePtr end;
+ PyObject *pyobj_end;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPtrNewRangeNodes", &pyobj_start, &pyobj_end))
+ return(NULL);
+ start = (xmlNodePtr) PyxmlNode_Get(pyobj_start);
+ end = (xmlNodePtr) PyxmlNode_Get(pyobj_end);
+
+ c_retval = xmlXPtrNewRangeNodes(start, end);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPTR_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_valuePop(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:valuePop", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = valuePop(ctxt);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathContainsFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathContainsFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathContainsFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlCtxtUseOptions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:htmlCtxtUseOptions", &pyobj_ctxt, &options))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = htmlCtxtUseOptions(ctxt, options);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlStringDecodeEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * str;
+ int what;
+ xmlChar end;
+ xmlChar end2;
+ xmlChar end3;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oziccc:xmlStringDecodeEntities", &pyobj_ctxt, &str, &what, &end, &end2, &end3))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlStringDecodeEntities(ctxt, str, what, end, end2, end3);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlFreeCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeCatalog", &pyobj_catal))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+ xmlFreeCatalog(catal);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNewReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewReference", &pyobj_doc, &name))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewReference(doc, name);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsOgham(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOgham", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsOgham(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDocComment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewDocComment", &pyobj_doc, &content))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewDocComment(doc, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsBopomofoExtended(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBopomofoExtended", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsBopomofoExtended(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsArrows(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArrows", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsArrows(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsMusicalSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMusicalSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMusicalSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCJKCompatibility(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKCompatibility", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCJKCompatibility(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGValidateFullElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlRelaxNGValidCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr elem;
+ PyObject *pyobj_elem;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:xmlRelaxNGValidateFullElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem))
+ return(NULL);
+ ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+ c_retval = xmlRelaxNGValidateFullElement(ctxt, doc, elem);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlUCSIsLimbu(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLimbu", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLimbu(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddEncodingAlias(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * name;
+ char * alias;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlAddEncodingAlias", &name, &alias))
+ return(NULL);
+
+ c_retval = xmlAddEncodingAlias(name, alias);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatPc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPc", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatPc(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewTextChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr parent;
+ PyObject *pyobj_parent;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewTextChild", &pyobj_parent, &pyobj_ns, &name, &content))
+ return(NULL);
+ parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlNewTextChild(parent, ns, name, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatPf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPf", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatPf(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatPe(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPe", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatPe(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatPd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPd", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatPd(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlCtxtReadMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ char * buffer;
+ int size;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozizzi:htmlCtxtReadMemory", &pyobj_ctxt, &buffer, &size, &URL, &encoding, &options))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = htmlCtxtReadMemory(ctxt, buffer, size, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlUCSIsCatPi(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPi", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatPi(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatPo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPo", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatPo(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatPs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPs", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatPs(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathTranslateFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathTranslateFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathTranslateFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsHighSurrogates(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHighSurrogates", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsHighSurrogates(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeGetSpacePreserve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlNodeGetSpacePreserve", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlNodeGetSpacePreserve(cur);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlResetLastError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlResetLastError();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlAddDocEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlEntityPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+ int type;
+ xmlChar * ExternalID;
+ xmlChar * SystemID;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozizzz:xmlAddDocEntity", &pyobj_doc, &name, &type, &ExternalID, &SystemID, &content))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlAddDocEntity(doc, name, type, ExternalID, SystemID, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCatalogResolveURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogResolveURI", &URI))
+ return(NULL);
+
+ c_retval = xmlCatalogResolveURI(URI);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathIsNaN(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ double val;
+
+ if (!PyArg_ParseTuple(args, (char *)"d:xmlXPathIsNaN", &val))
+ return(NULL);
+
+ c_retval = xmlXPathIsNaN(val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNotEqualValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNotEqualValues", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathNotEqualValues(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlParseEncName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEncName", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseEncName(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPTR_ENABLED
+PyObject *
+libxml_xmlXPtrRangeToFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPtrRangeToFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPtrRangeToFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPTR_ENABLED */
+PyObject *
+libxml_xmlTextReaderLocatorLineNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderLocatorPtr locator;
+ PyObject *pyobj_locator;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderLocatorLineNumber", &pyobj_locator))
+ return(NULL);
+ locator = (xmlTextReaderLocatorPtr) PyxmlTextReaderLocator_Get(pyobj_locator);
+
+ c_retval = xmlTextReaderLocatorLineNumber(locator);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPTR_ENABLED
+PyObject *
+libxml_xmlXPtrEvalRangePredicate(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPtrEvalRangePredicate", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPtrEvalRangePredicate(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPTR_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlAutoCloseTag(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ htmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+ htmlNodePtr elem;
+ PyObject *pyobj_elem;
+
+ if (!PyArg_ParseTuple(args, (char *)"OzO:htmlAutoCloseTag", &pyobj_doc, &name, &pyobj_elem))
+ return(NULL);
+ doc = (htmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ elem = (htmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+ c_retval = htmlAutoCloseTag(doc, name, elem);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlUCSIsCatLo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLo", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatLo(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderAttributeCount(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderAttributeCount", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderAttributeCount(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCharStrndup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ char * cur;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlCharStrndup", &cur, &len))
+ return(NULL);
+
+ c_retval = xmlCharStrndup(cur, len);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefLoadExtDtdDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefLoadExtDtdDefaultValue", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefLoadExtDtdDefaultValue(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefTreeIndentString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ char * v;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlThrDefTreeIndentString", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefTreeIndentString(v);
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsAlphabeticPresentationForms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsAlphabeticPresentationForms", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsAlphabeticPresentationForms(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCJKUnifiedIdeographs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKUnifiedIdeographs", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCJKUnifiedIdeographs(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDocCompressMode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlGetDocCompressMode", &pyobj_doc))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlGetDocCompressMode(doc);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextChild", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextChild(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpDocumentHead(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlDebugDumpDocumentHead", &pyobj_output, &pyobj_doc))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ xmlDebugDumpDocumentHead(output, doc);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlUCSIsUnifiedCanadianAboriginalSyllabics(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsUnifiedCanadianAboriginalSyllabics", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsUnifiedCanadianAboriginalSyllabics(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlNodeDumpOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlOutputBufferPtr buf;
+ PyObject *pyobj_buf;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOOz:htmlNodeDumpOutput", &pyobj_buf, &pyobj_doc, &pyobj_cur, &encoding))
+ return(NULL);
+ buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ htmlNodeDumpOutput(buf, doc, cur, encoding);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlParseElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:htmlParseElement", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ htmlParseElement(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlCopyPropList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlNodePtr target;
+ PyObject *pyobj_target;
+ xmlAttrPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlCopyPropList", &pyobj_target, &pyobj_cur))
+ return(NULL);
+ target = (xmlNodePtr) PyxmlNode_Get(pyobj_target);
+ cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlCopyPropList(target, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSubstituteEntitiesDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlSubstituteEntitiesDefault", &val))
+ return(NULL);
+
+ c_retval = xmlSubstituteEntitiesDefault(val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsGreek(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGreek", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsGreek(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlDocFormatDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ FILE * f;
+ PyObject *pyobj_f;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ int format;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDocFormatDump", &pyobj_f, &pyobj_cur, &format))
+ return(NULL);
+ f = (FILE *) PyFile_Get(pyobj_f);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlDocFormatDump(f, cur, format);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsOriya(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOriya", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsOriya(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCtxtReset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlCtxtReset", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlCtxtReset(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlDecodeEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int len;
+ int what;
+ xmlChar end;
+ xmlChar end2;
+ xmlChar end3;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oiiccc:xmlDecodeEntities", &pyobj_ctxt, &len, &what, &end, &end2, &end3))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlDecodeEntities(ctxt, len, what, end, end2, end3);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strndup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * utf;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlUTF8Strndup", &utf, &len))
+ return(NULL);
+
+ c_retval = xmlUTF8Strndup(utf, len);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlXPathGetContextDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetContextDoc", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = ctxt->doc;
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathPopString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathPopString", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathPopString(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlURIGetPort(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetPort", &pyobj_URI))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ c_retval = URI->port;
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderGetRemainder(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlParserInputBufferPtr c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderGetRemainder", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderGetRemainder(reader);
+ py_retval = libxml_xmlParserInputBufferPtrWrap((xmlParserInputBufferPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatC(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatC", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatC(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsTaiLe(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTaiLe", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsTaiLe(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCastNumberToString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ double val;
+
+ if (!PyArg_ParseTuple(args, (char *)"d:xmlXPathCastNumberToString", &val))
+ return(NULL);
+
+ c_retval = xmlXPathCastNumberToString(val);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlParseComment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseComment", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseComment(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathSubstringAfterFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathSubstringAfterFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathSubstringAfterFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCatalogRemove(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogRemove", &value))
+ return(NULL);
+
+ c_retval = xmlCatalogRemove(value);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSaveFormatFileEnc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+ int format;
+
+ if (!PyArg_ParseTuple(args, (char *)"zOzi:xmlSaveFormatFileEnc", &filename, &pyobj_cur, &encoding, &format))
+ return(NULL);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlSaveFormatFileEnc(filename, cur, encoding, format);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGParse(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlRelaxNGPtr c_retval;
+ xmlRelaxNGParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGParse", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlRelaxNGParserCtxtPtr) PyrelaxNgParserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlRelaxNGParse(ctxt);
+ py_retval = libxml_xmlRelaxNGPtrWrap((xmlRelaxNGPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlParseCharRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:htmlParseCharRef", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = htmlParseCharRef(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlParseNmtoken(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseNmtoken", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseNmtoken(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserGetIsValid(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParserGetIsValid", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = ctxt->valid;
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseReference", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseReference(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathPositionFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathPositionFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathPositionFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlNanoHTTPScanProxy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ char * URL;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlNanoHTTPScanProxy", &URL))
+ return(NULL);
+
+ xmlNanoHTTPScanProxy(URL);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsMathematicalOperators(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMathematicalOperators", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMathematicalOperators(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpDTD(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlDtdPtr dtd;
+ PyObject *pyobj_dtd;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlDebugDumpDTD", &pyobj_output, &pyobj_dtd))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+ xmlDebugDumpDTD(output, dtd);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+#ifdef LIBXML_XPTR_ENABLED
+PyObject *
+libxml_xmlXPtrNewCollapsedRange(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlNodePtr start;
+ PyObject *pyobj_start;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPtrNewCollapsedRange", &pyobj_start))
+ return(NULL);
+ start = (xmlNodePtr) PyxmlNode_Get(pyobj_start);
+
+ c_retval = xmlXPtrNewCollapsedRange(start);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPTR_ENABLED */
+PyObject *
+libxml_xmlCleanupParser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlCleanupParser();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlTextConcat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * content;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlTextConcat", &pyobj_node, &content, &len))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlTextConcat(node, content, len);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatMc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatMc", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatMc(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStringLenGetNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * value;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlStringLenGetNodeList", &pyobj_doc, &value, &len))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlStringLenGetNodeList(doc, value, len);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderLocatorBaseURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlTextReaderLocatorPtr locator;
+ PyObject *pyobj_locator;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderLocatorBaseURI", &pyobj_locator))
+ return(NULL);
+ locator = (xmlTextReaderLocatorPtr) PyxmlTextReaderLocator_Get(pyobj_locator);
+
+ c_retval = xmlTextReaderLocatorBaseURI(locator);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSetNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlSetNsProp", &pyobj_node, &pyobj_ns, &name, &value))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlSetNsProp(node, ns, name, value);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetUser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetUser", &pyobj_URI))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ c_retval = URI->user;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSAXDefaultVersion(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int version;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlSAXDefaultVersion", &version))
+ return(NULL);
+
+ c_retval = xmlSAXDefaultVersion(version);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlLoadCatalogs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ char * pathss;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlLoadCatalogs", &pathss))
+ return(NULL);
+
+ xmlLoadCatalogs(pathss);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlCtxtReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * cur;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzzi:htmlCtxtReadDoc", &pyobj_ctxt, &cur, &URL, &encoding, &options))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = htmlCtxtReadDoc(ctxt, cur, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlGetCompressMode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+ PyObject *py_retval;
+ int c_retval;
+
+ c_retval = xmlGetCompressMode();
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseChunk(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ char * chunk;
+ int size;
+ int terminate;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozii:xmlParseChunk", &pyobj_ctxt, &chunk, &size, &terminate))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseChunk(ctxt, chunk, size, terminate);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlNewDocNoDtD(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ xmlChar * URI;
+ xmlChar * ExternalID;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:htmlNewDocNoDtD", &URI, &ExternalID))
+ return(NULL);
+
+ c_retval = htmlNewDocNoDtD(URI, ExternalID);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlParseElementDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseElementDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseElementDecl(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIEscape(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * str;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlURIEscape", &str))
+ return(NULL);
+
+ c_retval = xmlURIEscape(str);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlReaderForFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlTextReaderPtr c_retval;
+ int fd;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"izzi:xmlReaderForFd", &fd, &URL, &encoding, &options))
+ return(NULL);
+
+ c_retval = xmlReaderForFd(fd, URL, encoding, options);
+ py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlDocContentDumpFormatOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlOutputBufferPtr buf;
+ PyObject *pyobj_buf;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+ int format;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzi:htmlDocContentDumpFormatOutput", &pyobj_buf, &pyobj_cur, &encoding, &format))
+ return(NULL);
+ buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ htmlDocContentDumpFormatOutput(buf, cur, encoding, format);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextDescendantOrSelf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextDescendantOrSelf", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextDescendantOrSelf(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsCJKCompatibilityIdeographs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKCompatibilityIdeographs", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCJKCompatibilityIdeographs(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURISetQuery(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+ char * query;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetQuery", &pyobj_URI, &query))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ if (URI->query != NULL) xmlFree(URI->query);
+ URI->query = (char *)xmlStrdup((const xmlChar *)query);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsGreekandCoptic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGreekandCoptic", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsGreekandCoptic(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderMoveToFirstAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderMoveToFirstAttribute", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderMoveToFirstAttribute(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strlen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * utf;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlUTF8Strlen", &utf))
+ return(NULL);
+
+ c_retval = xmlUTF8Strlen(utf);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathAddValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathAddValues", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathAddValues(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlStrchr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlChar * str;
+ xmlChar val;
+
+ if (!PyArg_ParseTuple(args, (char *)"zc:xmlStrchr", &str, &val))
+ return(NULL);
+
+ c_retval = xmlStrchr(str, val);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserHandleReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParserHandleReference", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParserHandleReference(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlTextReaderGetAttributeNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlChar * localName;
+ xmlChar * namespaceURI;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlTextReaderGetAttributeNs", &pyobj_reader, &localName, &namespaceURI))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderGetAttributeNs(reader, localName, namespaceURI);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetQuery(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetQuery", &pyobj_URI))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ c_retval = URI->query;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewTextLen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlChar * content;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlNewTextLen", &content, &len))
+ return(NULL);
+
+ c_retval = xmlNewTextLen(content, len);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlXPathGetContextSize(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetContextSize", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = ctxt->contextSize;
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathIsInf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ double val;
+
+ if (!PyArg_ParseTuple(args, (char *)"d:xmlXPathIsInf", &val))
+ return(NULL);
+
+ c_retval = xmlXPathIsInf(val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsGeneralPunctuation(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGeneralPunctuation", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsGeneralPunctuation(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsControlPictures(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsControlPictures", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsControlPictures(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlIsBooleanAttr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:htmlIsBooleanAttr", &name))
+ return(NULL);
+
+ c_retval = htmlIsBooleanAttr(name);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlNodeListGetString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr list;
+ PyObject *pyobj_list;
+ int inLine;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOi:xmlNodeListGetString", &pyobj_doc, &pyobj_list, &inLine))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ list = (xmlNodePtr) PyxmlNode_Get(pyobj_list);
+
+ c_retval = xmlNodeListGetString(doc, list, inLine);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsBengali(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBengali", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsBengali(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlBuildQName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * ncname;
+ xmlChar * prefix;
+ xmlChar * memory;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzzi:xmlBuildQName", &ncname, &prefix, &memory, &len))
+ return(NULL);
+
+ c_retval = xmlBuildQName(ncname, prefix, memory, len);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlEncodeSpecialChars(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * input;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlEncodeSpecialChars", &pyobj_doc, &input))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlEncodeSpecialChars(doc, input);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlFreePropList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlAttrPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreePropList", &pyobj_cur))
+ return(NULL);
+ cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlFreePropList(cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlTextReaderConstString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlChar * str;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderConstString", &pyobj_reader, &str))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderConstString(reader, str);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathStringFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathStringFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathStringFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlAddNextSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlNodePtr elem;
+ PyObject *pyobj_elem;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddNextSibling", &pyobj_cur, &pyobj_elem))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+ elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+ c_retval = xmlAddNextSibling(cur, elem);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsSupplementalArrowsA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementalArrowsA", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSupplementalArrowsA(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsSupplementalArrowsB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementalArrowsB", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSupplementalArrowsB(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlInitParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlInitParserCtxt", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlInitParserCtxt(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlErrorGetMessage(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlErrorPtr Error;
+ PyObject *pyobj_Error;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetMessage", &pyobj_Error))
+ return(NULL);
+ Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+ c_retval = Error->message;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlRemoveID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlAttrPtr attr;
+ PyObject *pyobj_attr;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlRemoveID", &pyobj_doc, &pyobj_attr))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+ c_retval = xmlRemoveID(doc, attr);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsTagbanwa(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTagbanwa", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsTagbanwa(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathFalseFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathFalseFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathFalseFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlTextReaderHasValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderHasValue", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderHasValue(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGDumpTree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlRelaxNGPtr schema;
+ PyObject *pyobj_schema;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlRelaxNGDumpTree", &pyobj_output, &pyobj_schema))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+ xmlRelaxNGDumpTree(output, schema);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlUCSIsCatSo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatSo", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatSo(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderConstBaseUri(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstBaseUri", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderConstBaseUri(reader);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+PyObject *
+libxml_xmlRegexpPrint(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlRegexpPtr regexp;
+ PyObject *pyobj_regexp;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlRegexpPrint", &pyobj_output, &pyobj_regexp))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ regexp = (xmlRegexpPtr) PyxmlReg_Get(pyobj_regexp);
+
+ xmlRegexpPrint(output, regexp);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_REGEXP_ENABLED */
+PyObject *
+libxml_xmlUCSIsCatSm(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatSm", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatSm(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIEscapeStr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * str;
+ xmlChar * list;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlURIEscapeStr", &str, &list))
+ return(NULL);
+
+ c_retval = xmlURIEscapeStr(str, list);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderMoveToAttributeNo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ int no;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlTextReaderMoveToAttributeNo", &pyobj_reader, &no))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderMoveToAttributeNo(reader, no);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCountFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathCountFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathCountFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlParserHandlePEReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParserHandlePEReference", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParserHandlePEReference(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlTextReaderMoveToAttributeNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlChar * localName;
+ xmlChar * namespaceURI;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlTextReaderMoveToAttributeNs", &pyobj_reader, &localName, &namespaceURI))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderMoveToAttributeNs(reader, localName, namespaceURI);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderNext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderNext", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderNext(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNewBoolean(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlXPathNewBoolean", &val))
+ return(NULL);
+
+ c_retval = xmlXPathNewBoolean(val);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsPrivateUseArea(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsPrivateUseArea", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsPrivateUseArea(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlXPathGetContextNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetContextNode", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = ctxt->node;
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserSetPedantic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int pedantic;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetPedantic", &pyobj_ctxt, &pedantic))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ ctxt->pedantic = pedantic;
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsCatLu(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLu", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatLu(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatLt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLt", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatLt(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCtxtReadFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int fd;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oizzi:xmlCtxtReadFd", &pyobj_ctxt, &fd, &URL, &encoding, &options))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlCtxtReadFd(ctxt, fd, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsPubidChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ unsigned int ch;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlIsPubidChar", &ch))
+ return(NULL);
+
+ c_retval = xmlIsPubidChar(ch);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatLm(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLm", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatLm(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatLl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLl", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatLl(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlReadMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ char * buffer;
+ int size;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zizzi:htmlReadMemory", &buffer, &size, &URL, &encoding, &options))
+ return(NULL);
+
+ c_retval = htmlReadMemory(buffer, size, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlUCSIsCypriotSyllabary(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCypriotSyllabary", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCypriotSyllabary(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * name;
+ xmlChar * nameSpace;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlGetNsProp", &pyobj_node, &name, &nameSpace))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlGetNsProp(node, name, nameSpace);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDocProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlNewDocProp", &pyobj_doc, &name, &value))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewDocProp(doc, name, value);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatN(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatN", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatN(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatL(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatL", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatL(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatM(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatM", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatM(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlLoadACatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlCatalogPtr c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlLoadACatalog", &filename))
+ return(NULL);
+
+ c_retval = xmlLoadACatalog(filename);
+ py_retval = libxml_xmlCatalogPtrWrap((xmlCatalogPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCtxtResetPush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ char * chunk;
+ int size;
+ char * filename;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozizz:xmlCtxtResetPush", &pyobj_ctxt, &chunk, &size, &filename, &encoding))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlCtxtResetPush(ctxt, chunk, size, filename, encoding);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatS(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatS", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatS(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatP(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatP", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatP(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCatalogGetSystem(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlChar * sysID;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogGetSystem", &sysID))
+ return(NULL);
+
+ c_retval = xmlCatalogGetSystem(sysID);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatZ(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatZ", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatZ(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+PyObject *
+libxml_xmlRegexpExec(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlRegexpPtr comp;
+ PyObject *pyobj_comp;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlRegexpExec", &pyobj_comp, &content))
+ return(NULL);
+ comp = (xmlRegexpPtr) PyxmlReg_Get(pyobj_comp);
+
+ c_retval = xmlRegexpExec(comp, content);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_REGEXP_ENABLED */
+PyObject *
+libxml_xmlByteConsumed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ long c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlByteConsumed", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlByteConsumed(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsSuperscriptsandSubscripts(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSuperscriptsandSubscripts", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSuperscriptsandSubscripts(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlHasProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlHasProp", &pyobj_node, &name))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlHasProp(node, name);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDtdElementDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlElementPtr c_retval;
+ xmlDtdPtr dtd;
+ PyObject *pyobj_dtd;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetDtdElementDesc", &pyobj_dtd, &name))
+ return(NULL);
+ dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+ c_retval = xmlGetDtdElementDesc(dtd, name);
+ py_retval = libxml_xmlElementPtrWrap((xmlElementPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsPhoneticExtensions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsPhoneticExtensions", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsPhoneticExtensions(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCastNodeToString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathCastNodeToString", &pyobj_node))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlXPathCastNodeToString(node);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlURISetPort(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+ int port;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlURISetPort", &pyobj_URI, &port))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ URI->port = port;
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlGetDtdQAttrDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttributePtr c_retval;
+ xmlDtdPtr dtd;
+ PyObject *pyobj_dtd;
+ xmlChar * elem;
+ xmlChar * name;
+ xmlChar * prefix;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzz:xmlGetDtdQAttrDesc", &pyobj_dtd, &elem, &name, &prefix))
+ return(NULL);
+ dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+ c_retval = xmlGetDtdQAttrDesc(dtd, elem, name, prefix);
+ py_retval = libxml_xmlAttributePtrWrap((xmlAttributePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSetNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlSetNs", &pyobj_node, &pyobj_ns))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ xmlSetNs(node, ns);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNamespaceParseNCName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlNamespaceParseNCName", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlNamespaceParseNCName(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddChildList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr parent;
+ PyObject *pyobj_parent;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddChildList", &pyobj_parent, &pyobj_cur))
+ return(NULL);
+ parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlAddChildList(parent, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDtdEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlEntityPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetDtdEntity", &pyobj_doc, &name))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlGetDtdEntity(doc, name);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsXHTML(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * systemID;
+ xmlChar * publicID;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlIsXHTML", &systemID, &publicID))
+ return(NULL);
+
+ c_retval = xmlIsXHTML(systemID, publicID);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIUnescapeString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ char * c_retval;
+ char * str;
+ int len;
+ char * target;
+
+ if (!PyArg_ParseTuple(args, (char *)"ziz:xmlURIUnescapeString", &str, &len, &target))
+ return(NULL);
+
+ c_retval = xmlURIUnescapeString(str, len, target);
+ py_retval = libxml_charPtrWrap((char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsRunic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsRunic", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsRunic(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetParameterEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlEntityPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetParameterEntity", &pyobj_doc, &name))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlGetParameterEntity(doc, name);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlInitGlobals(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlInitGlobals();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNewDocTextLen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * content;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlNewDocTextLen", &pyobj_doc, &content, &len))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewDocTextLen(doc, content, len);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathParseName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathParseName", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathParseName(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlURISetPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+ char * path;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetPath", &pyobj_URI, &path))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ if (URI->path != NULL) xmlFree(URI->path);
+ URI->path = (char *)xmlStrdup((const xmlChar *)path);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsEthiopic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsEthiopic", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsEthiopic(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderClose", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderClose(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlErrorGetFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlErrorPtr Error;
+ PyObject *pyobj_Error;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetFile", &pyobj_Error))
+ return(NULL);
+ Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+ c_retval = Error->file;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetProp", &pyobj_node, &name))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlGetProp(node, name);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlParseFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ char * filename;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:htmlParseFile", &filename, &encoding))
+ return(NULL);
+
+ c_retval = htmlParseFile(filename, encoding);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlACatalogResolveURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+ xmlChar * URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlACatalogResolveURI", &pyobj_catal, &URI))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+ c_retval = xmlACatalogResolveURI(catal, URI);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsVariationSelectors(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsVariationSelectors", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsVariationSelectors(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPatherror(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ char * file;
+ int line;
+ int no;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozii:xmlXPatherror", &pyobj_ctxt, &file, &line, &no))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPatherror(ctxt, file, line, no);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlLoadCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlLoadCatalog", &filename))
+ return(NULL);
+
+ c_retval = xmlLoadCatalog(filename);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserSetLoadSubset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int loadsubset;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetLoadSubset", &pyobj_ctxt, &loadsubset))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ ctxt->loadsubset = loadsubset;
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlURIGetScheme(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetScheme", &pyobj_URI))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ c_retval = URI->scheme;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathEval(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlChar * str;
+ xmlXPathContextPtr ctx;
+ PyObject *pyobj_ctx;
+
+ if (!PyArg_ParseTuple(args, (char *)"zO:xmlXPathEval", &str, &pyobj_ctx))
+ return(NULL);
+ ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
+
+ c_retval = xmlXPathEval(str, ctx);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ xmlChar * cur;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzzi:htmlReadDoc", &cur, &URL, &encoding, &options))
+ return(NULL);
+
+ c_retval = htmlReadDoc(cur, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlUCSIsTags(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTags", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsTags(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewPI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlChar * name;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlNewPI", &name, &content))
+ return(NULL);
+
+ c_retval = xmlNewPI(name, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsLowSurrogates(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLowSurrogates", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLowSurrogates(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsOsmanya(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOsmanya", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsOsmanya(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefDoValidityCheckingDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefDoValidityCheckingDefaultValue", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefDoValidityCheckingDefaultValue(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlXPathGetContextPosition(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetContextPosition", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = ctxt->proximityPosition;
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlNodeDumpFileFormat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ FILE * out;
+ PyObject *pyobj_out;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+ int format;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOOzi:htmlNodeDumpFileFormat", &pyobj_out, &pyobj_doc, &pyobj_cur, &encoding, &format))
+ return(NULL);
+ out = (FILE *) PyFile_Get(pyobj_out);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = htmlNodeDumpFileFormat(out, doc, cur, encoding, format);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlTextReaderIsValid(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderIsValid", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderIsValid(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsByzantineMusicalSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsByzantineMusicalSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsByzantineMusicalSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlResetError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlErrorPtr err;
+ PyObject *pyobj_err;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlResetError", &pyobj_err))
+ return(NULL);
+ err = (xmlErrorPtr) PyError_Get(pyobj_err);
+
+ xmlResetError(err);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_htmlDefaultSAXHandlerInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ htmlDefaultSAXHandlerInit();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlShellPrintXPathError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ int errorType;
+ char * arg;
+
+ if (!PyArg_ParseTuple(args, (char *)"iz:xmlShellPrintXPathError", &errorType, &arg))
+ return(NULL);
+
+ xmlShellPrintXPathError(errorType, arg);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlCleanupEncodingAliases(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlCleanupEncodingAliases();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathRegisteredNsCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRegisteredNsCleanup", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ xmlXPathRegisteredNsCleanup(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCatalogResolve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * pubID;
+ xmlChar * sysID;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlCatalogResolve", &pubID, &sysID))
+ return(NULL);
+
+ c_retval = xmlCatalogResolve(pubID, sysID);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderConstName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstName", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderConstName(reader);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderConstXmlLang(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstXmlLang", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderConstXmlLang(reader);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsKhmer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKhmer", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsKhmer(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeSetContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeSetContent", &pyobj_cur, &content))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlNodeSetContent(cur, content);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseCharRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseCharRef", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseCharRef(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUnlinkNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlUnlinkNode", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlUnlinkNode(cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlCopyCharMultiByte(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * out;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlCopyCharMultiByte", &out, &val))
+ return(NULL);
+
+ c_retval = xmlCopyCharMultiByte(out, val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseVersionNum(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseVersionNum", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseVersionNum(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlBoolToText(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ int boolval;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlBoolToText", &boolval))
+ return(NULL);
+
+ c_retval = xmlBoolToText(boolval);
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlSetCompressMode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ int mode;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlSetCompressMode", &mode))
+ return(NULL);
+
+ xmlSetCompressMode(mode);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlParseDocument(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:htmlParseDocument", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = htmlParseDocument(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlTextReaderNodeType(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderNodeType", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderNodeType(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathSubstringFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathSubstringFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathSubstringFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlIsBlankNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlIsBlankNode", &pyobj_node))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlIsBlankNode(node);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ int depth;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpNode", &pyobj_output, &pyobj_node, &depth))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ xmlDebugDumpNode(output, node, depth);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlCopyDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ int recursive;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlCopyDoc", &pyobj_doc, &recursive))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlCopyDoc(doc, recursive);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGNewMemParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlRelaxNGParserCtxtPtr c_retval;
+ char * buffer;
+ int size;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlRelaxNGNewMemParserCtxt", &buffer, &size))
+ return(NULL);
+
+ c_retval = xmlRelaxNGNewMemParserCtxt(buffer, size);
+ py_retval = libxml_xmlRelaxNGParserCtxtPtrWrap((xmlRelaxNGParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlFreeProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlAttrPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeProp", &pyobj_cur))
+ return(NULL);
+ cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlFreeProp(cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlCtxtReadMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ char * buffer;
+ int size;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozizzi:xmlCtxtReadMemory", &pyobj_ctxt, &buffer, &size, &URL, &encoding, &options))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlCtxtReadMemory(ctxt, buffer, size, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateFileParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlParserCtxtPtr c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCreateFileParserCtxt", &filename))
+ return(NULL);
+
+ c_retval = xmlCreateFileParserCtxt(filename);
+ py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseSystemLiteral(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseSystemLiteral", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseSystemLiteral(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlDocSetRootElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr root;
+ PyObject *pyobj_root;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlDocSetRootElement", &pyobj_doc, &pyobj_root))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ root = (xmlNodePtr) PyxmlNode_Get(pyobj_root);
+
+ c_retval = xmlDocSetRootElement(doc, root);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseAttributeListDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseAttributeListDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseAttributeListDecl(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlCheckVersion(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ int version;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlCheckVersion", &version))
+ return(NULL);
+
+ xmlCheckVersion(version);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+PyObject *
+libxml_xmlRegFreeRegexp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlRegexpPtr regexp;
+ PyObject *pyobj_regexp;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlRegFreeRegexp", &pyobj_regexp))
+ return(NULL);
+ regexp = (xmlRegexpPtr) PyxmlReg_Get(pyobj_regexp);
+
+ xmlRegFreeRegexp(regexp);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_REGEXP_ENABLED */
+PyObject *
+libxml_nodePush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr value;
+ PyObject *pyobj_value;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:nodePush", &pyobj_ctxt, &pyobj_value))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+ value = (xmlNodePtr) PyxmlNode_Get(pyobj_value);
+
+ c_retval = nodePush(ctxt, value);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetLineNo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ long c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlGetLineNo", &pyobj_node))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlGetLineNo(node);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+PyObject *
+libxml_xmlRegexpIsDeterminist(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlRegexpPtr comp;
+ PyObject *pyobj_comp;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlRegexpIsDeterminist", &pyobj_comp))
+ return(NULL);
+ comp = (xmlRegexpPtr) PyxmlReg_Get(pyobj_comp);
+
+ c_retval = xmlRegexpIsDeterminist(comp);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_REGEXP_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlNewDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ xmlChar * URI;
+ xmlChar * ExternalID;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:htmlNewDoc", &URI, &ExternalID))
+ return(NULL);
+
+ c_retval = htmlNewDoc(URI, ExternalID);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlUCSIsCat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+ char * cat;
+
+ if (!PyArg_ParseTuple(args, (char *)"iz:xmlUCSIsCat", &code, &cat))
+ return(NULL);
+
+ c_retval = xmlUCSIsCat(code, cat);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURISetUser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+ char * user;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetUser", &pyobj_URI, &user))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ if (URI->user != NULL) xmlFree(URI->user);
+ URI->user = (char *)xmlStrdup((const xmlChar *)user);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlIsScriptAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:htmlIsScriptAttribute", &name))
+ return(NULL);
+
+ c_retval = htmlIsScriptAttribute(name);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlInitializePredefinedEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlInitializePredefinedEntities();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextAttribute", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextAttribute(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsMiscellaneousTechnical(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousTechnical", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMiscellaneousTechnical(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlXPathParserGetContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathContextPtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathParserGetContext", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = ctxt->context;
+ py_retval = libxml_xmlXPathContextPtrWrap((xmlXPathContextPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGValidatePopElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlRelaxNGValidCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr elem;
+ PyObject *pyobj_elem;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOO:xmlRelaxNGValidatePopElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem))
+ return(NULL);
+ ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+ c_retval = xmlRelaxNGValidatePopElement(ctxt, doc, elem);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlShellPrintNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlShellPrintNode", &pyobj_node))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ xmlShellPrintNode(node);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlValidateNMToken(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * value;
+ int space;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlValidateNMToken", &value, &space))
+ return(NULL);
+
+ c_retval = xmlValidateNMToken(value, space);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderReadAttributeValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadAttributeValue", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderReadAttributeValue(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsGeorgian(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGeorgian", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsGeorgian(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserSetValidate(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int validate;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetValidate", &pyobj_ctxt, &validate))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ ctxt->validate = validate;
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlErrorGetCode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlErrorPtr Error;
+ PyObject *pyobj_Error;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetCode", &pyobj_Error))
+ return(NULL);
+ Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+ c_retval = Error->code;
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlValidNormalizeAttributeValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr elem;
+ PyObject *pyobj_elem;
+ xmlChar * name;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlValidNormalizeAttributeValue", &pyobj_doc, &pyobj_elem, &name, &value))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+ c_retval = xmlValidNormalizeAttributeValue(doc, elem, name, value);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNewContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathContextPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNewContext", &pyobj_doc))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlXPathNewContext(doc);
+ py_retval = libxml_xmlXPathContextPtrWrap((xmlXPathContextPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlParsePubidLiteral(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParsePubidLiteral", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParsePubidLiteral(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewCharRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewCharRef", &pyobj_doc, &name))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewCharRef(doc, name);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsArabic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArabic", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsArabic(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNanoHTTPCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlNanoHTTPCleanup();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseQuotedString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseQuotedString", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseQuotedString(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCastStringToNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ double c_retval;
+ xmlChar * val;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathCastStringToNumber", &val))
+ return(NULL);
+
+ c_retval = xmlXPathCastStringToNumber(val);
+ py_retval = libxml_doubleWrap((double) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNewCString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ char * val;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathNewCString", &val))
+ return(NULL);
+
+ c_retval = xmlXPathNewCString(val);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlThrDefDefaultBufferSize(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefDefaultBufferSize", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefDefaultBufferSize(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNsPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * href;
+ xmlChar * prefix;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlNewNs", &pyobj_node, &href, &prefix))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlNewNs(node, href, prefix);
+ py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlACatalogResolvePublic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+ xmlChar * pubID;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlACatalogResolvePublic", &pyobj_catal, &pubID))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+ c_retval = xmlACatalogResolvePublic(catal, pubID);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStopParser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlStopParser", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlStopParser(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlReadFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ int fd;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"izzi:xmlReadFd", &fd, &URL, &encoding, &options))
+ return(NULL);
+
+ c_retval = xmlReadFd(fd, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlACatalogResolveSystem(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+ xmlChar * sysID;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlACatalogResolveSystem", &pyobj_catal, &sysID))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+ c_retval = xmlACatalogResolveSystem(catal, sysID);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefParserDebugEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefParserDebugEntities", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefParserDebugEntities(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCatalogConvert(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+ PyObject *py_retval;
+ int c_retval;
+
+ c_retval = xmlCatalogConvert();
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCJKSymbolsandPunctuation(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKSymbolsandPunctuation", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCJKSymbolsandPunctuation(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsTaiXuanJingSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTaiXuanJingSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsTaiXuanJingSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlDocDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ FILE * f;
+ PyObject *pyobj_f;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:htmlDocDump", &pyobj_f, &pyobj_cur))
+ return(NULL);
+ f = (FILE *) PyFile_Get(pyobj_f);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = htmlDocDump(f, cur);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlNanoFTPInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlNanoFTPInit();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeNodeList", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlFreeNodeList(cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlCreateEntityParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlParserCtxtPtr c_retval;
+ xmlChar * URL;
+ xmlChar * ID;
+ xmlChar * base;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzz:xmlCreateEntityParserCtxt", &URL, &ID, &base))
+ return(NULL);
+
+ c_retval = xmlCreateEntityParserCtxt(URL, ID, base);
+ py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathDivValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathDivValues", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathDivValues(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlRemoveRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlAttrPtr attr;
+ PyObject *pyobj_attr;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlRemoveRef", &pyobj_doc, &pyobj_attr))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+ c_retval = xmlRemoveRef(doc, attr);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsTelugu(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTelugu", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsTelugu(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlLsCountNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlLsCountNode", &pyobj_node))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlLsCountNode(node);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlParseCatalogFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlParseCatalogFile", &filename))
+ return(NULL);
+
+ c_retval = xmlParseCatalogFile(filename);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlXPathGetFunctionURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetFunctionURI", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = ctxt->functionURI;
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlOutputBufferWrite(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlOutputBufferPtr out;
+ PyObject *pyobj_out;
+ int len;
+ char * buf;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oiz:xmlOutputBufferWrite", &pyobj_out, &len, &buf))
+ return(NULL);
+ out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
+
+ c_retval = xmlOutputBufferWrite(out, len, buf);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatMn(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatMn", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatMn(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGCleanupTypes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlRelaxNGCleanupTypes();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlUCSIsCatMe(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatMe", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatMe(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetLastChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr parent;
+ PyObject *pyobj_parent;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlGetLastChild", &pyobj_parent))
+ return(NULL);
+ parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+
+ c_retval = xmlGetLastChild(parent);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetEncodingAlias(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ char * alias;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlGetEncodingAlias", &alias))
+ return(NULL);
+
+ c_retval = xmlGetEncodingAlias(alias);
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlACatalogAdd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+ xmlChar * type;
+ xmlChar * orig;
+ xmlChar * replace;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzz:xmlACatalogAdd", &pyobj_catal, &type, &orig, &replace))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+ c_retval = xmlACatalogAdd(catal, type, orig, replace);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddDtdEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlEntityPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+ int type;
+ xmlChar * ExternalID;
+ xmlChar * SystemID;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozizzz:xmlAddDtdEntity", &pyobj_doc, &name, &type, &ExternalID, &SystemID, &content))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlAddDtdEntity(doc, name, type, ExternalID, SystemID, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewNsPropEatName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewNsPropEatName", &pyobj_node, &pyobj_ns, &name, &value))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlNewNsPropEatName(node, ns, name, value);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseNotationDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseNotationDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseNotationDecl(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNewDocRawNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewDocRawNode", &pyobj_doc, &pyobj_ns, &name, &content))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlNewDocRawNode(doc, ns, name, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathConcatFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathConcatFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathConcatFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlTextReaderConstNamespaceUri(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstNamespaceUri", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderConstNamespaceUri(reader);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsBasicLatin(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBasicLatin", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsBasicLatin(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseMisc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseMisc", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseMisc(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlParserInputBufferGrow(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserInputBufferPtr in;
+ PyObject *pyobj_in;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserInputBufferGrow", &pyobj_in, &len))
+ return(NULL);
+ in = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_in);
+
+ c_retval = xmlParserInputBufferGrow(in, len);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrdup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlStrdup", &cur))
+ return(NULL);
+
+ c_retval = xmlStrdup(cur);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef 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 /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCtxtReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * cur;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzzi:xmlCtxtReadDoc", &pyobj_ctxt, &cur, &URL, &encoding, &options))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlCtxtReadDoc(ctxt, cur, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderGetParserProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ int prop;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlTextReaderGetParserProp", &pyobj_reader, &prop))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderGetParserProp(reader, prop);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrncat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * cur;
+ xmlChar * add;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzi:xmlStrncat", &cur, &add, &len))
+ return(NULL);
+
+ c_retval = xmlStrncat(cur, add, len);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderQuoteChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderQuoteChar", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderQuoteChar(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlInitCharEncodingHandlers(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlInitCharEncodingHandlers();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlACatalogResolve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+ xmlChar * pubID;
+ xmlChar * sysID;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlACatalogResolve", &pyobj_catal, &pubID, &sysID))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+ c_retval = xmlACatalogResolve(catal, pubID, sysID);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+PyObject *
+libxml_xmlRegexpCompile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlRegexpPtr c_retval;
+ xmlChar * regexp;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlRegexpCompile", &regexp))
+ return(NULL);
+
+ c_retval = xmlRegexpCompile(regexp);
+ py_retval = libxml_xmlRegexpPtrWrap((xmlRegexpPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_REGEXP_ENABLED */
+PyObject *
+libxml_xmlParseMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ char * buffer;
+ int size;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlParseMemory", &buffer, &size))
+ return(NULL);
+
+ c_retval = xmlParseMemory(buffer, size);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNewNodeSet(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlNodePtr val;
+ PyObject *pyobj_val;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNewNodeSet", &pyobj_val))
+ return(NULL);
+ val = (xmlNodePtr) PyxmlNode_Get(pyobj_val);
+
+ c_retval = xmlXPathNewNodeSet(val);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsKannada(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKannada", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsKannada(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderConstValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstValue", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderConstValue(reader);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCeilingFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathCeilingFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathCeilingFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsSmallFormVariants(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSmallFormVariants", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSmallFormVariants(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_docbDefaultSAXHandlerInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ docbDefaultSAXHandlerInit();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlInitParser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlInitParser();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlSaveFileTo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlOutputBufferPtr buf;
+ PyObject *pyobj_buf;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOz:xmlSaveFileTo", &pyobj_buf, &pyobj_cur, &encoding))
+ return(NULL);
+ buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlSaveFileTo(buf, cur, encoding);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathStartsWithFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathStartsWithFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathStartsWithFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlSearchNsByHref(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNsPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * href;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOz:xmlSearchNsByHref", &pyobj_doc, &pyobj_node, &href))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlSearchNsByHref(doc, node, href);
+ py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseTextDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseTextDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseTextDecl(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextPreceding(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextPreceding", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextPreceding(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlURISetScheme(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+ char * scheme;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetScheme", &pyobj_URI, &scheme))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ if (URI->scheme != NULL) xmlFree(URI->scheme);
+ URI->scheme = (char *)xmlStrdup((const xmlChar *)scheme);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathRegisterAllFunctions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRegisterAllFunctions", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ xmlXPathRegisterAllFunctions(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlErrorGetDomain(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlErrorPtr Error;
+ PyObject *pyobj_Error;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetDomain", &pyobj_Error))
+ return(NULL);
+ Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+ c_retval = Error->domain;
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCheckFilename(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * path;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCheckFilename", &path))
+ return(NULL);
+
+ c_retval = xmlCheckFilename(path);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseDTD(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDtdPtr c_retval;
+ xmlChar * ExternalID;
+ xmlChar * SystemID;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlParseDTD", &ExternalID, &SystemID))
+ return(NULL);
+
+ c_retval = xmlParseDTD(ExternalID, SystemID);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsTibetan(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTibetan", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsTibetan(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlHandleEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlEntityPtr entity;
+ PyObject *pyobj_entity;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlHandleEntity", &pyobj_ctxt, &pyobj_entity))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+ entity = (xmlEntityPtr) PyxmlNode_Get(pyobj_entity);
+
+ xmlHandleEntity(ctxt, entity);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathFloorFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathFloorFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathFloorFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlNewGlobalNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNsPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * href;
+ xmlChar * prefix;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlNewGlobalNs", &pyobj_doc, &href, &prefix))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewGlobalNs(doc, href, prefix);
+ py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsLetter(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int c;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlIsLetter", &c))
+ return(NULL);
+
+ c_retval = xmlIsLetter(c);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextMerge(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr first;
+ PyObject *pyobj_first;
+ xmlNodePtr second;
+ PyObject *pyobj_second;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlTextMerge", &pyobj_first, &pyobj_second))
+ return(NULL);
+ first = (xmlNodePtr) PyxmlNode_Get(pyobj_first);
+ second = (xmlNodePtr) PyxmlNode_Get(pyobj_second);
+
+ c_retval = xmlTextMerge(first, second);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathStringLengthFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathStringLengthFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathStringLengthFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlPrintURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * stream;
+ PyObject *pyobj_stream;
+ xmlURIPtr uri;
+ PyObject *pyobj_uri;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlPrintURI", &pyobj_stream, &pyobj_uri))
+ return(NULL);
+ stream = (FILE *) PyFile_Get(pyobj_stream);
+ uri = (xmlURIPtr) PyURI_Get(pyobj_uri);
+
+ xmlPrintURI(stream, uri);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsCyrillicSupplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCyrillicSupplement", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCyrillicSupplement(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathValueFlipSign(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathValueFlipSign", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathValueFlipSign(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxParserSetFlag(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlRelaxNGParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int flags;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlRelaxParserSetFlag", &pyobj_ctxt, &flags))
+ return(NULL);
+ ctxt = (xmlRelaxNGParserCtxtPtr) PyrelaxNgParserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlRelaxParserSetFlag(ctxt, flags);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlParseURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlURIPtr c_retval;
+ char * str;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlParseURI", &str))
+ return(NULL);
+
+ c_retval = xmlParseURI(str);
+ py_retval = libxml_xmlURIPtrWrap((xmlURIPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlNodePtr target;
+ PyObject *pyobj_target;
+ xmlAttrPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlCopyProp", &pyobj_target, &pyobj_cur))
+ return(NULL);
+ target = (xmlNodePtr) PyxmlNode_Get(pyobj_target);
+ cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlCopyProp(target, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlReplaceNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr old;
+ PyObject *pyobj_old;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlReplaceNode", &pyobj_old, &pyobj_cur))
+ return(NULL);
+ old = (xmlNodePtr) PyxmlNode_Get(pyobj_old);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlReplaceNode(old, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSetDocCompressMode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ int mode;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlSetDocCompressMode", &pyobj_doc, &mode))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ xmlSetDocCompressMode(doc, mode);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#ifdef LIBXML_XPTR_ENABLED
+PyObject *
+libxml_xmlXPtrNewRange(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlNodePtr start;
+ PyObject *pyobj_start;
+ int startindex;
+ xmlNodePtr end;
+ PyObject *pyobj_end;
+ int endindex;
+
+ if (!PyArg_ParseTuple(args, (char *)"OiOi:xmlXPtrNewRange", &pyobj_start, &startindex, &pyobj_end, &endindex))
+ return(NULL);
+ start = (xmlNodePtr) PyxmlNode_Get(pyobj_start);
+ end = (xmlNodePtr) PyxmlNode_Get(pyobj_end);
+
+ c_retval = xmlXPtrNewRange(start, startindex, end, endindex);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPTR_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathMultValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathMultValues", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathMultValues(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlParseFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlParseFile", &filename))
+ return(NULL);
+
+ c_retval = xmlParseFile(filename);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlSaveFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"zO:htmlSaveFile", &filename, &pyobj_cur))
+ return(NULL);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = htmlSaveFile(filename, cur);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlParseEndTag(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEndTag", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseEndTag(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlDocDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ FILE * f;
+ PyObject *pyobj_f;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlDocDump", &pyobj_f, &pyobj_cur))
+ return(NULL);
+ f = (FILE *) PyFile_Get(pyobj_f);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlDocDump(f, cur);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetFragment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetFragment", &pyobj_URI))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ c_retval = URI->fragment;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderCurrentDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderCurrentDoc", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderCurrentDoc(reader);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextSelf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextSelf", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextSelf(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsHanunoo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHanunoo", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsHanunoo(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParsePITarget(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParsePITarget", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParsePITarget(ctxt);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURISetOpaque(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+ char * opaque;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetOpaque", &pyobj_URI, &opaque))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ if (URI->opaque != NULL) xmlFree(URI->opaque);
+ URI->opaque = (char *)xmlStrdup((const xmlChar *)opaque);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlParserSetLineNumbers(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int linenumbers;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetLineNumbers", &pyobj_ctxt, &linenumbers))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ ctxt->linenumbers = linenumbers;
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlParsePEReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParsePEReference", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParsePEReference(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlDelEncodingAlias(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * alias;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlDelEncodingAlias", &alias))
+ return(NULL);
+
+ c_retval = xmlDelEncodingAlias(alias);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeSetContentLen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlChar * content;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlNodeSetContentLen", &pyobj_cur, &content, &len))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlNodeSetContentLen(cur, content, len);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNewNodeEatName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewNodeEatName", &pyobj_ns, &name))
+ return(NULL);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlNewNodeEatName(ns, name);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsCombining(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ unsigned int ch;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlIsCombining", &ch))
+ return(NULL);
+
+ c_retval = xmlIsCombining(ch);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefPedanticParserDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefPedanticParserDefaultValue", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefPedanticParserDefaultValue(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlReadFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ htmlDocPtr c_retval;
+ int fd;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"izzi:htmlReadFd", &fd, &URL, &encoding, &options))
+ return(NULL);
+
+ c_retval = htmlReadFd(fd, URL, encoding, options);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlTextReaderNormalization(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderNormalization", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderNormalization(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrncatNew(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * str1;
+ xmlChar * str2;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzi:xmlStrncatNew", &str1, &str2, &len))
+ return(NULL);
+
+ c_retval = xmlStrncatNew(str1, str2, len);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strpos(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * utf;
+ int pos;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlUTF8Strpos", &utf, &pos))
+ return(NULL);
+
+ c_retval = xmlUTF8Strpos(utf, pos);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCatalogResolvePublic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * pubID;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogResolvePublic", &pubID))
+ return(NULL);
+
+ c_retval = xmlCatalogResolvePublic(pubID);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewCDataBlock(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * content;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlNewCDataBlock", &pyobj_doc, &content, &len))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewCDataBlock(doc, content, len);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUnsetNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOz:xmlUnsetNsProp", &pyobj_node, &pyobj_ns, &name))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlUnsetNsProp(node, ns, name);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNamespaceParseNSDef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlNamespaceParseNSDef", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlNamespaceParseNSDef(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlSaveFileFormat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+ int format;
+
+ if (!PyArg_ParseTuple(args, (char *)"zOzi:htmlSaveFileFormat", &filename, &pyobj_cur, &encoding, &format))
+ return(NULL);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = htmlSaveFileFormat(filename, cur, encoding, format);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlParserGetWellFormed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParserGetWellFormed", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = ctxt->wellFormed;
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeIsText(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlNodeIsText", &pyobj_node))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlNodeIsText(node);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserSetReplaceEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int replaceEntities;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetReplaceEntities", &pyobj_ctxt, &replaceEntities))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ ctxt->replaceEntities = replaceEntities;
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsCurrencySymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCurrencySymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCurrencySymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathVariableLookup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlXPathVariableLookup", &pyobj_ctxt, &name))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathVariableLookup(ctxt, name);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathStringEvalNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ double c_retval;
+ xmlChar * str;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathStringEvalNumber", &str))
+ return(NULL);
+
+ c_retval = xmlXPathStringEvalNumber(str);
+ py_retval = libxml_doubleWrap((double) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlReaderNewFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ int fd;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oizzi:xmlReaderNewFd", &pyobj_reader, &fd, &URL, &encoding, &options))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlReaderNewFd(reader, fd, URL, encoding, options);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCmpNodes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr node1;
+ PyObject *pyobj_node1;
+ xmlNodePtr node2;
+ PyObject *pyobj_node2;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathCmpNodes", &pyobj_node1, &pyobj_node2))
+ return(NULL);
+ node1 = (xmlNodePtr) PyxmlNode_Get(pyobj_node1);
+ node2 = (xmlNodePtr) PyxmlNode_Get(pyobj_node2);
+
+ c_retval = xmlXPathCmpNodes(node1, node2);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUTF8Strsize(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * utf;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlUTF8Strsize", &utf, &len))
+ return(NULL);
+
+ c_retval = xmlUTF8Strsize(utf, len);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathVariableLookupNS(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlXPathContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * name;
+ xmlChar * ns_uri;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlXPathVariableLookupNS", &pyobj_ctxt, &name, &ns_uri))
+ return(NULL);
+ ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathVariableLookupNS(ctxt, name, ns_uri);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlStrcmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * str1;
+ xmlChar * str2;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrcmp", &str1, &str2))
+ return(NULL);
+
+ c_retval = xmlStrcmp(str1, str2);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+PyObject *
+libxml_xmlXIncludeProcessFlags(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ int flags;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXIncludeProcessFlags", &pyobj_doc, &flags))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlXIncludeProcessFlags(doc, flags);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XINCLUDE_ENABLED */
+PyObject *
+libxml_xmlUTF8Strsub(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * utf;
+ int start;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zii:xmlUTF8Strsub", &utf, &start, &len))
+ return(NULL);
+
+ c_retval = xmlUTF8Strsub(utf, start, len);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsMixedElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlIsMixedElement", &pyobj_doc, &name))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlIsMixedElement(doc, name);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsMiscellaneousSymbolsandArrows(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousSymbolsandArrows", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMiscellaneousSymbolsandArrows(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseStartTag(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseStartTag", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseStartTag(ctxt);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSetupParserForBuffer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * buffer;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlSetupParserForBuffer", &pyobj_ctxt, &buffer, &filename))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlSetupParserForBuffer(ctxt, buffer, filename);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNewTextReaderFilename(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlTextReaderPtr c_retval;
+ char * URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlNewTextReaderFilename", &URI))
+ return(NULL);
+
+ c_retval = xmlNewTextReaderFilename(URI);
+ py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNumberFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathNumberFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathNumberFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsBoxDrawing(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBoxDrawing", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsBoxDrawing(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlNodeDumpFormatOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlOutputBufferPtr buf;
+ PyObject *pyobj_buf;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+ int format;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOOzi:htmlNodeDumpFormatOutput", &pyobj_buf, &pyobj_doc, &pyobj_cur, &encoding, &format))
+ return(NULL);
+ buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlLsOneNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlLsOneNode", &pyobj_output, &pyobj_node))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ xmlLsOneNode(output, node);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlUCSIsGreekExtended(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGreekExtended", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsGreekExtended(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseExternalSubset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlChar * ExternalID;
+ xmlChar * SystemID;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlParseExternalSubset", &pyobj_ctxt, &ExternalID, &SystemID))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseExternalSubset(ctxt, ExternalID, SystemID);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNewDocNodeEatName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
+ xmlChar * content;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewDocNodeEatName", &pyobj_doc, &pyobj_ns, &name, &content))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ c_retval = xmlNewDocNodeEatName(doc, ns, name, content);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetOpaque(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const char * c_retval;
+ xmlURIPtr URI;
+ PyObject *pyobj_URI;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetOpaque", &pyobj_URI))
+ return(NULL);
+ URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+ c_retval = URI->opaque;
+ py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrndup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * cur;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zi:xmlStrndup", &cur, &len))
+ return(NULL);
+
+ c_retval = xmlStrndup(cur, len);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlReaderForDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlTextReaderPtr c_retval;
+ xmlChar * cur;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zzzi:xmlReaderForDoc", &cur, &URL, &encoding, &options))
+ return(NULL);
+
+ c_retval = xmlReaderForDoc(cur, URL, encoding, options);
+ py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderReadInnerXml(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadInnerXml", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderReadInnerXml(reader);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefKeepBlanksDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefKeepBlanksDefaultValue", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefKeepBlanksDefaultValue(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathBooleanFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathBooleanFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathBooleanFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsThaana(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsThaana", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsThaana(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsMyanmar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMyanmar", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsMyanmar(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrsub(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * str;
+ int start;
+ int len;
+
+ if (!PyArg_ParseTuple(args, (char *)"zii:xmlStrsub", &str, &start, &len))
+ return(NULL);
+
+ c_retval = xmlStrsub(str, start, len);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathIsNodeType(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathIsNodeType", &name))
+ return(NULL);
+
+ c_retval = xmlXPathIsNodeType(name);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlNodeSetName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeSetName", &pyobj_cur, &name))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlNodeSetName(cur, name);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlSaveFormatFileTo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlOutputBufferPtr buf;
+ PyObject *pyobj_buf;
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+ char * encoding;
+ int format;
+
+ if (!PyArg_ParseTuple(args, (char *)"OOzi:xmlSaveFormatFileTo", &pyobj_buf, &pyobj_cur, &encoding, &format))
+ return(NULL);
+ buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlSaveFormatFileTo(buf, cur, encoding, format);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsYiRadicals(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsYiRadicals", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsYiRadicals(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathRoot(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRoot", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathRoot(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextFollowing(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextFollowing", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextFollowing(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlValidateNameValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlValidateNameValue", &value))
+ return(NULL);
+
+ c_retval = xmlValidateNameValue(value);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathSubstringBeforeFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathSubstringBeforeFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathSubstringBeforeFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlCleanupPredefinedEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlCleanupPredefinedEntities();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsHangulCompatibilityJamo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHangulCompatibilityJamo", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsHangulCompatibilityJamo(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlSchemaInitTypes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlSchemaInitTypes();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNodeSetFreeNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNodeSetFreeNs", &pyobj_ns))
+ return(NULL);
+ ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+ xmlXPathNodeSetFreeNs(ns);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlParseElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseElement", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseElement(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlAddChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr parent;
+ PyObject *pyobj_parent;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddChild", &pyobj_parent, &pyobj_cur))
+ return(NULL);
+ parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlAddChild(parent, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathErr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int error;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathErr", &pyobj_ctxt, &error))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathErr(ctxt, error);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlTextReaderDepth(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderDepth", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderDepth(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNanoFTPProxy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ char * host;
+ int port;
+ char * user;
+ char * passwd;
+ int type;
+
+ if (!PyArg_ParseTuple(args, (char *)"zizzi:xmlNanoFTPProxy", &host, &port, &user, &passwd, &type))
+ return(NULL);
+
+ xmlNanoFTPProxy(host, port, user, passwd, type);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlLineNumbersDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlLineNumbersDefault", &val))
+ return(NULL);
+
+ c_retval = xmlLineNumbersDefault(val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseVersionInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseVersionInfo", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlParseVersionInfo(ctxt);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsHiragana(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHiragana", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsHiragana(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlRelaxNGPtr schema;
+ PyObject *pyobj_schema;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlRelaxNGDump", &pyobj_output, &pyobj_schema))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+ xmlRelaxNGDump(output, schema);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject *
+libxml_xmlIOHTTPMatch(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ char * filename;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlIOHTTPMatch", &filename))
+ return(NULL);
+
+ c_retval = xmlIOHTTPMatch(filename);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlRegisterHTTPPostCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+ xmlRegisterHTTPPostCallbacks();
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlURIPtr uri;
+ PyObject *pyobj_uri;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeURI", &pyobj_uri))
+ return(NULL);
+ uri = (xmlURIPtr) PyURI_Get(pyobj_uri);
+
+ xmlFreeURI(uri);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlSetTreeDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr tree;
+ PyObject *pyobj_tree;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlSetTreeDoc", &pyobj_tree, &pyobj_doc))
+ return(NULL);
+ tree = (xmlNodePtr) PyxmlNode_Get(pyobj_tree);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ xmlSetTreeDoc(tree, doc);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlTextReaderConstPrefix(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ const xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstPrefix", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderConstPrefix(reader);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlCopyNodeList", &pyobj_node))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlCopyNodeList(node);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNextParent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextParent", &pyobj_ctxt, &pyobj_cur))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlXPathNextParent(ctxt, cur);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsAegeanNumbers(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsAegeanNumbers", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsAegeanNumbers(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsDevanagari(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsDevanagari", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsDevanagari(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeGetContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlNodeGetContent", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlNodeGetContent(cur);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNormalizeWindowsPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlChar * path;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlNormalizeWindowsPath", &path))
+ return(NULL);
+
+ c_retval = xmlNormalizeWindowsPath(path);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderIsEmptyElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderIsEmptyElement", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderIsEmptyElement(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCherokee(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCherokee", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCherokee(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+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;
+ unsigned char * utf;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCheckUTF8", &utf))
+ return(NULL);
+
+ c_retval = xmlCheckUTF8(utf);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathNotFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+ int nargs;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathNotFunction", &pyobj_ctxt, &nargs))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathNotFunction(ctxt, nargs);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsIPAExtensions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsIPAExtensions", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsIPAExtensions(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsOldItalic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOldItalic", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsOldItalic(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathPopNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ double c_retval;
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathPopNumber", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ c_retval = xmlXPathPopNumber(ctxt);
+ py_retval = libxml_doubleWrap((double) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsEnclosedAlphanumerics(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsEnclosedAlphanumerics", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsEnclosedAlphanumerics(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathCastBooleanToNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ double c_retval;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlXPathCastBooleanToNumber", &val))
+ return(NULL);
+
+ c_retval = xmlXPathCastBooleanToNumber(val);
+ py_retval = libxml_doubleWrap((double) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsIdeographicDescriptionCharacters(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsIdeographicDescriptionCharacters", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsIdeographicDescriptionCharacters(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlFreeDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlDocPtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeDoc", &pyobj_cur))
+ return(NULL);
+ cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlFreeDoc(cur);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUCSIsYiSyllables(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsYiSyllables", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsYiSyllables(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderLookupNamespace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlChar * prefix;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderLookupNamespace", &pyobj_reader, &prefix))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderLookupNamespace(reader, prefix);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeGetLang(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlNodeGetLang", &pyobj_cur))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ c_retval = xmlNodeGetLang(cur);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+ PyObject *py_retval;
+ xmlParserCtxtPtr c_retval;
+
+ c_retval = xmlNewParserCtxt();
+ py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNanoFTPScanProxy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ char * URL;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlNanoFTPScanProxy", &URL))
+ return(NULL);
+
+ xmlNanoFTPScanProxy(URL);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlValidateNmtokensValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlValidateNmtokensValue", &value))
+ return(NULL);
+
+ c_retval = xmlValidateNmtokensValue(value);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderNextSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderNextSibling", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderNextSibling(reader);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlClearParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlClearParserCtxt", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlClearParserCtxt(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlTextReaderReadString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadString", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderReadString(reader);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrlen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * str;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlStrlen", &str))
+ return(NULL);
+
+ c_retval = xmlStrlen(str);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_DEBUG_ENABLED
+PyObject *
+libxml_xmlDebugDumpDocument(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * output;
+ PyObject *pyobj_output;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"OO:xmlDebugDumpDocument", &pyobj_output, &pyobj_doc))
+ return(NULL);
+ output = (FILE *) PyFile_Get(pyobj_output);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ xmlDebugDumpDocument(output, doc);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_DEBUG_ENABLED */
+PyObject *
+libxml_xmlThrDefSaveNoEmptyTags(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int v;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefSaveNoEmptyTags", &v))
+ return(NULL);
+
+ c_retval = xmlThrDefSaveNoEmptyTags(v);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderGetAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar * c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderGetAttribute", &pyobj_reader, &name))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderGetAttribute(reader, name);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPTR_ENABLED
+PyObject *
+libxml_xmlXPtrEval(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlXPathObjectPtr c_retval;
+ xmlChar * str;
+ xmlXPathContextPtr ctx;
+ PyObject *pyobj_ctx;
+
+ if (!PyArg_ParseTuple(args, (char *)"zO:xmlXPtrEval", &str, &pyobj_ctx))
+ return(NULL);
+ ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
+
+ c_retval = xmlXPtrEval(str, ctx);
+ py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XPTR_ENABLED */
+PyObject *
+libxml_xmlKeepBlanksDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int val;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlKeepBlanksDefault", &val))
+ return(NULL);
+
+ c_retval = xmlKeepBlanksDefault(val);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlPopInput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlChar c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlPopInput", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ c_retval = xmlPopInput(ctxt);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsSupplementaryPrivateUseAreaB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementaryPrivateUseAreaB", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSupplementaryPrivateUseAreaB(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsSupplementaryPrivateUseAreaA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementaryPrivateUseAreaA", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsSupplementaryPrivateUseAreaA(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderCurrentNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlNodePtr c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderCurrentNode", &pyobj_reader))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderCurrentNode(reader);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextReaderSetParserProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ int prop;
+ int value;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oii:xmlTextReaderSetParserProp", &pyobj_reader, &prop, &value))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlTextReaderSetParserProp(reader, prop, value);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDocPtr c_retval;
+ xmlChar * version;
+
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlNewDoc", &version))
+ return(NULL);
+
+ c_retval = xmlNewDoc(version);
+ py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsLetterlikeSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLetterlikeSymbols", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLetterlikeSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatZp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatZp", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatZp(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatZs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatZs", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatZs(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsCatZl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatZl", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsCatZl(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlUCSIsGujarati(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGujarati", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsGujarati(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlACatalogRemove(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlACatalogRemove", &pyobj_catal, &value))
+ return(NULL);
+ catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+ c_retval = xmlACatalogRemove(catal, value);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlSetMetaEncoding(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ htmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * encoding;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:htmlSetMetaEncoding", &pyobj_doc, &encoding))
+ return(NULL);
+ doc = (htmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = htmlSetMetaEncoding(doc, encoding);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlReaderNewDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlTextReaderPtr reader;
+ PyObject *pyobj_reader;
+ xmlChar * cur;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzzi:xmlReaderNewDoc", &pyobj_reader, &cur, &URL, &encoding, &options))
+ return(NULL);
+ reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+ c_retval = xmlReaderNewDoc(reader, cur, URL, encoding, options);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParsePI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParsePI", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParsePI(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlUnsetProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * name;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlUnsetProp", &pyobj_node, &name))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlUnsetProp(node, name);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_HTML_ENABLED
+PyObject *
+libxml_htmlFreeParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ htmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:htmlFreeParserCtxt", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ htmlFreeParserCtxt(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_HTML_ENABLED */
+PyObject *
+libxml_xmlUCSIsVariationSelectorsSupplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsVariationSelectorsSupplement", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsVariationSelectorsSupplement(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlSetProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlAttrPtr c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlChar * name;
+ xmlChar * value;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlSetProp", &pyobj_node, &name, &value))
+ return(NULL);
+ node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+ c_retval = xmlSetProp(node, name, value);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlReaderWalker(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlTextReaderPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlReaderWalker", &pyobj_doc))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlReaderWalker(doc);
+ py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+PyObject *
+libxml_xmlXIncludeProcessTree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlNodePtr tree;
+ PyObject *pyobj_tree;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXIncludeProcessTree", &pyobj_tree))
+ return(NULL);
+ tree = (xmlNodePtr) PyxmlNode_Get(pyobj_tree);
+
+ c_retval = xmlXIncludeProcessTree(tree);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+#endif /* LIBXML_XINCLUDE_ENABLED */
+PyObject *
+libxml_xmlCatalogDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ FILE * out;
+ PyObject *pyobj_out;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlCatalogDump", &pyobj_out))
+ return(NULL);
+ out = (FILE *) PyFile_Get(pyobj_out);
+
+ xmlCatalogDump(out);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlNodeSetLang(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlNodePtr cur;
+ PyObject *pyobj_cur;
+ xmlChar * lang;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeSetLang", &pyobj_cur, &lang))
+ return(NULL);
+ cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+ xmlNodeSetLang(cur, lang);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *
+libxml_xmlStrcasecmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ xmlChar * str1;
+ xmlChar * str2;
+
+ if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrcasecmp", &str1, &str2))
+ return(NULL);
+
+ c_retval = xmlStrcasecmp(str1, str2);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlReaderForMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlTextReaderPtr c_retval;
+ char * buffer;
+ int size;
+ char * URL;
+ char * encoding;
+ int options;
+
+ if (!PyArg_ParseTuple(args, (char *)"zizzi:xmlReaderForMemory", &buffer, &size, &URL, &encoding, &options))
+ return(NULL);
+
+ c_retval = xmlReaderForMemory(buffer, size, URL, encoding, options);
+ py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+ return(py_retval);
+}
+
+#ifdef LIBXML_XPATH_ENABLED
+PyObject *
+libxml_xmlXPathEvalExpr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlXPathParserContextPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathEvalExpr", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+ xmlXPathEvalExpr(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
+PyObject *
+libxml_xmlUCSIsLinearBSyllabary(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLinearBSyllabary", &code))
+ return(NULL);
+
+ c_retval = xmlUCSIsLinearBSyllabary(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsBaseChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ unsigned int ch;
+
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlIsBaseChar", &ch))
+ return(NULL);
+
+ c_retval = xmlIsBaseChar(ch);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDtd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ xmlDtdPtr c_retval;
+ xmlDocPtr doc;
+ PyObject *pyobj_doc;
+ xmlChar * name;
+ xmlChar * ExternalID;
+ xmlChar * SystemID;
+
+ if (!PyArg_ParseTuple(args, (char *)"Ozzz:xmlNewDtd", &pyobj_doc, &name, &ExternalID, &SystemID))
+ return(NULL);
+ doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+ c_retval = xmlNewDtd(doc, name, ExternalID, SystemID);
+ py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+ return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseDocTypeDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
+
+ if (!PyArg_ParseTuple(args, (char *)"O:xmlParseDocTypeDecl", &pyobj_ctxt))
+ return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+ xmlParseDocTypeDecl(ctxt);
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
diff --git a/python/libxml2-python-api.xml b/python/libxml2-python-api.xml
new file mode 100644
index 0000000..d5a4cbe
--- /dev/null
+++ b/python/libxml2-python-api.xml
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<api name='libxml2-python'>
+ <symbols>
+ <function name='xmlRegisterXPathFunction' file='python'>
+ <info>Register a Python written function to the XPath interpreter</info>
+ <return type='int' info="1 in case of success, 0 or -1 in case of error"/>
+ <arg name='ctx' type='xmlXPathContextPtr' info='the xpathContext'/>
+ <arg name='name' type='xmlChar *' info='the function name'/>
+ <arg name='ns_uri' type='xmlChar *' info='the namespace or NULL'/>
+ <arg name='f' type='pythonObject' info='the python function'/>
+ </function>
+ <function name='xmlNewNode' file='python'>
+ <info>Create a new Node</info>
+ <return type='xmlNodePtr' info="A new element node"/>
+ <arg name='name' type='xmlChar *' info='the node name'/>
+ </function>
+ <function name='xmlCreatePushParser' file='python'>
+ <info>Create a progressive XML parser context to build either an event flow if the SAX object is not None, or a DOM tree otherwise.</info>
+ <return type='xmlParserCtxtPtr' info="the parser context or None in case of error"/>
+ <arg name='SAX' type='pythonObject' info='the SAX callback object or None'/>
+ <arg name='chunk' type='xmlChar *' info='the initial data'/>
+ <arg name='size' type='int' info='the size of the initial data'/>
+ <arg name='URI' type='xmlChar *' info='The URI used for base computations'/>
+ </function>
+ <function name='htmlCreatePushParser' file='python'>
+ <info>Create a progressive HTML parser context to build either an event flow if the SAX object is not None, or a DOM tree otherwise.</info>
+ <return type='xmlParserCtxtPtr' info="the parser context or None in case of error"/>
+ <arg name='SAX' type='pythonObject' info='the SAX callback object or None'/>
+ <arg name='chunk' type='xmlChar *' info='the initial data'/>
+ <arg name='size' type='int' info='the size of the initial data'/>
+ <arg name='URI' type='xmlChar *' info='The URI used for base computations'/>
+ </function>
+ <function name='xmlSAXParseFile' file='python'>
+ <info>Interface to parse an XML file or resource pointed by an URI to build an event flow to the SAX object</info>
+ <return type='void'/>
+ <arg name='SAX' type='pythonObject' info='the SAX callback object or None'/>
+ <arg name='URI' type='xmlChar *' info='The URI of the resource'/>
+ <arg name='recover' type='int' info='allow recovery in case of error'/>
+ </function>
+ <function name='htmlSAXParseFile' file='python'>
+ <info>Interface to parse an HTML file or resource pointed by an URI to build an event flow to the SAX object</info>
+ <return type='void'/>
+ <arg name='SAX' type='pythonObject' info='the SAX callback object or None'/>
+ <arg name='URI' type='xmlChar *' info='The URI of the resource'/>
+ <arg name='encoding' type='const char *' info='encoding or None'/>
+ </function>
+ <function name='xmlCreateOutputBuffer' file='python'>
+ <info>Create a libxml2 output buffer from a Python file</info>
+ <return type='xmlOutputBufferPtr' info="the output buffer"/>
+ <arg name='file' type='pythonObject' info='the Python file'/>
+ <arg name='encoding' type='xmlChar *' info='an optionnal encoding'/>
+ </function>
+ <function name='xmlCreateInputBuffer' file='python'>
+ <info>Create a libxml2 input buffer from a Python file</info>
+ <return type='xmlParserInputBufferPtr' info="the input buffer"/>
+ <arg name='file' type='pythonObject' info='the Python file'/>
+ <arg name='encoding' type='xmlChar *' info='an optionnal encoding'/>
+ </function>
+ <function name='xmlSetEntityLoader' file='python'>
+ <info>Set the entity resolver as a python function</info>
+ <return type='int' info="0 in case of success, -1 for error"/>
+ <arg name='resolver' type='pythonObject' info='the Python function'/>
+ </function>
+ <!-- xmlParserCtxtPtr accessors -->
+ <function name='xmlParserGetDoc' file='python_accessor'>
+ <info>Get the document tree from a parser context.</info>
+ <return type='xmlDocPtr' info="the document tree" field="myDoc"/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ </function>
+ <function name='xmlParserGetWellFormed' file='python_accessor'>
+ <info>Get the well formed information from a parser context.</info>
+ <return type='int' info="the wellFormed field" field="wellFormed"/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ </function>
+ <function name='xmlParserGetIsValid' file='python_accessor'>
+ <info>Get the validity information from a parser context.</info>
+ <return type='int' info="the valid field" field="valid"/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ </function>
+ <function name='xmlParserSetValidate' file='python_accessor'>
+ <info>Switch the parser to validation mode.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='validate' type='int' info='1 to activate validation'/>
+ </function>
+ <function name='xmlParserSetReplaceEntities' file='python_accessor'>
+ <info>Switch the parser to replace entities.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='replaceEntities' type='int' info='1 to replace entities'/>
+ </function>
+ <function name='xmlParserSetPedantic' file='python_accessor'>
+ <info>Switch the parser to be pedantic.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='pedantic' type='int' info='1 to run in pedantic mode'/>
+ </function>
+ <function name='xmlParserSetLoadSubset' file='python_accessor'>
+ <info>Switch the parser to load the DTD without validating.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='loadsubset' type='int' info='1 to load the DTD'/>
+ </function>
+ <function name='xmlParserSetLineNumbers' file='python_accessor'>
+ <info>Switch on the generation of line number for elements nodes.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
+ <arg name='linenumbers' type='int' info='1 to save line numbers'/>
+ </function>
+ <function name='xmlDebugMemory' file='python'>
+ <info>Switch on the generation of line number for elements nodes. Also returns the number of bytes allocated and not freed by libxml2 since memory debugging was switched on.</info>
+ <return type='int' info="returns the number of bytes allocated and not freed"/>
+ <arg name='activate' type='int' info='1 switch on memory debugging 0 switch it off'/>
+ </function>
+ <function name='xmlDumpMemory' file='python'>
+ <info>dump the memory allocated in the file .memdump</info>
+ <return type='void'/>
+ </function>
+ <!-- xmlNsPtr accessors -->
+ <function name='xmlNodeGetNs' file='python_accessor'>
+ <info>Get the namespace of a node</info>
+ <return type='xmlNsPtr' info="The namespace or None"/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ </function>
+ <function name='xmlNodeGetNsDefs' file='python_accessor'>
+ <info>Get the namespace of a node</info>
+ <return type='xmlNsPtr' info="The namespace or None"/>
+ <arg name='node' type='xmlNodePtr' info='the node'/>
+ </function>
+ <!-- xmlXPathContextPtr accessors -->
+ <function name='xmlXPathParserGetContext' file='python_accessor'>
+ <info>Get the xpathContext from an xpathParserContext</info>
+ <return type='xmlXPathContextPtr' info="The XPath context" field="context"/>
+ <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath parser context'/>
+ </function>
+ <function name='xmlXPathGetContextDoc' file='python_accessor'>
+ <info>Get the doc from an xpathContext</info>
+ <return type='xmlDocPtr' info="The doc context" field="doc"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathGetContextNode' file='python_accessor'>
+ <info>Get the current node from an xpathContext</info>
+ <return type='xmlNodePtr' info="The node context" field="node"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathSetContextDoc' file='python_accessor'>
+ <info>Set the doc of an xpathContext</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name="doc" type='xmlDocPtr' info="The doc context"/>
+ </function>
+ <function name='xmlXPathSetContextNode' file='python_accessor'>
+ <info>Set the current node of an xpathContext</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ <arg name="node" type='xmlNodePtr' info="The node context"/>
+ </function>
+ <function name='xmlXPathGetContextPosition' file='python_accessor'>
+ <info>Get the current node from an xpathContext</info>
+ <return type='int' info="The node context" field="proximityPosition"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathGetContextSize' file='python_accessor'>
+ <info>Get the current node from an xpathContext</info>
+ <return type='int' info="The node context" field="contextSize"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathGetFunction' file='python_accessor'>
+ <info>Get the current function name xpathContext</info>
+ <return type='const xmlChar *' info="The function name" field="function"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <function name='xmlXPathGetFunctionURI' file='python_accessor'>
+ <info>Get the current function name URI xpathContext</info>
+ <return type='const xmlChar *' info="The function name URI" field="functionURI"/>
+ <arg name='ctxt' type='xmlXPathContextPtr' info='the XPath context'/>
+ </function>
+ <!-- xmlURIPtr accessors -->
+ <function name='xmlURIGetScheme' file='python_accessor'>
+ <info>Get the scheme part from an URI</info>
+ <return type='const char *' info="The URI scheme" field="scheme"/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ </function>
+ <function name='xmlURISetScheme' file='python_accessor'>
+ <info>Set the scheme part of an URI.</info>
+ <return type='void'/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ <arg name='scheme' type='char *' info='The URI scheme part'/>
+ </function>
+ <function name='xmlURIGetOpaque' file='python_accessor'>
+ <info>Get the opaque part from an URI</info>
+ <return type='const char *' info="The URI opaque" field="opaque"/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ </function>
+ <function name='xmlURISetOpaque' file='python_accessor'>
+ <info>Set the opaque part of an URI.</info>
+ <return type='void'/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ <arg name='opaque' type='char *' info='The URI opaque part'/>
+ </function>
+ <function name='xmlURIGetAuthority' file='python_accessor'>
+ <info>Get the authority part from an URI</info>
+ <return type='const char *' info="The URI authority" field="authority"/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ </function>
+ <function name='xmlURISetAuthority' file='python_accessor'>
+ <info>Set the authority part of an URI.</info>
+ <return type='void'/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ <arg name='authority' type='char *' info='The URI authority part'/>
+ </function>
+ <function name='xmlURIGetServer' file='python_accessor'>
+ <info>Get the server part from an URI</info>
+ <return type='const char *' info="The URI server" field="server"/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ </function>
+ <function name='xmlURISetServer' file='python_accessor'>
+ <info>Set the server part of an URI.</info>
+ <return type='void'/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ <arg name='server' type='char *' info='The URI server part'/>
+ </function>
+ <function name='xmlURIGetUser' file='python_accessor'>
+ <info>Get the user part from an URI</info>
+ <return type='const char *' info="The URI user" field="user"/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ </function>
+ <function name='xmlURISetUser' file='python_accessor'>
+ <info>Set the user part of an URI.</info>
+ <return type='void'/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ <arg name='user' type='char *' info='The URI user part'/>
+ </function>
+ <function name='xmlURIGetPath' file='python_accessor'>
+ <info>Get the path part from an URI</info>
+ <return type='const char *' info="The URI path" field="path"/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ </function>
+ <function name='xmlURISetPath' file='python_accessor'>
+ <info>Set the path part of an URI.</info>
+ <return type='void'/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ <arg name='path' type='char *' info='The URI path part'/>
+ </function>
+ <function name='xmlURIGetQuery' file='python_accessor'>
+ <info>Get the query part from an URI</info>
+ <return type='const char *' info="The URI query" field="query"/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ </function>
+ <function name='xmlURISetQuery' file='python_accessor'>
+ <info>Set the query part of an URI.</info>
+ <return type='void'/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ <arg name='query' type='char *' info='The URI query part'/>
+ </function>
+ <function name='xmlURIGetFragment' file='python_accessor'>
+ <info>Get the fragment part from an URI</info>
+ <return type='const char *' info="The URI fragment" field="fragment"/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ </function>
+ <function name='xmlURISetFragment' file='python_accessor'>
+ <info>Set the fragment part of an URI.</info>
+ <return type='void'/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ <arg name='fragment' type='char *' info='The URI fragment part'/>
+ </function>
+ <function name='xmlURIGetPort' file='python_accessor'>
+ <info>Get the port part from an URI</info>
+ <return type='int' info="The URI port" field="port"/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ </function>
+ <function name='xmlURISetPort' file='python_accessor'>
+ <info>Set the port part of an URI.</info>
+ <return type='void'/>
+ <arg name='URI' type='xmlURIPtr' info='the URI'/>
+ <arg name='port' type='int' info='The URI port part'/>
+ </function>
+ <!-- xmlErrorPtr accessors -->
+ <function name='xmlErrorGetDomain' file='python_accessor'>
+ <info>What part of the library raised this error</info>
+ <return type='int' info="The error domain" field="domain"/>
+ <arg name='Error' type='xmlErrorPtr' info='the Error'/>
+ </function>
+ <function name='xmlErrorGetCode' file='python_accessor'>
+ <info>The error code, e.g. an xmlParserError</info>
+ <return type='int' info="The error code" field="code"/>
+ <arg name='Error' type='xmlErrorPtr' info='the Error'/>
+ </function>
+ <function name='xmlErrorGetMessage' file='python_accessor'>
+ <info>human-readable informative error message</info>
+ <return type='const char *' info="The error message" field="message"/>
+ <arg name='Error' type='xmlErrorPtr' info='the Error'/>
+ </function>
+ <function name='xmlErrorGetLevel' file='python_accessor'>
+ <info>how consequent is the error</info>
+ <return type='int' info="The error level" field="level"/>
+ <arg name='Error' type='xmlErrorPtr' info='the Error'/>
+ </function>
+ <function name='xmlErrorGetFile' file='python_accessor'>
+ <info>the filename</info>
+ <return type='const char *' info="The error file" field="file"/>
+ <arg name='Error' type='xmlErrorPtr' info='the Error'/>
+ </function>
+ <function name='xmlErrorGetLine' file='python_accessor'>
+ <info>the line number if available</info>
+ <return type='int' info="The error line" field="line"/>
+ <arg name='Error' type='xmlErrorPtr' info='the Error'/>
+ </function>
+ </symbols>
+</api>
diff --git a/python/libxml_wrap.h b/python/libxml_wrap.h
new file mode 100644
index 0000000..09fc77f
--- /dev/null
+++ b/python/libxml_wrap.h
@@ -0,0 +1,205 @@
+#include <Python.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/catalog.h>
+#include <libxml/threads.h>
+#include <libxml/nanoftp.h>
+#include <libxml/nanohttp.h>
+#include <libxml/uri.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+#include <libxml/debugXML.h>
+#include <libxml/HTMLparser.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/xinclude.h>
+#include <libxml/xpointer.h>
+#include <libxml/xmlunicode.h>
+#include <libxml/xmlregexp.h>
+#include <libxml/xmlautomata.h>
+#include <libxml/xmlreader.h>
+#include <libxml/relaxng.h>
+
+/**
+ * ATTRIBUTE_UNUSED:
+ *
+ * Macro used to signal to GCC unused function parameters
+ * Repeated here since the definition is not available when
+ * compiled outside the libxml2 build tree.
+ */
+#ifdef __GNUC__
+#ifdef ATTRIBUTE_UNUSED
+#undef ATTRIBUTE_UNUSED
+#endif
+#ifndef ATTRIBUTE_UNUSED
+#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#endif /* ATTRIBUTE_UNUSED */
+#else
+#define ATTRIBUTE_UNUSED
+#endif
+
+#define PyxmlNode_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyxmlNode_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlNodePtr obj;
+} PyxmlNode_Object;
+
+#define PyxmlXPathContext_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyxmlXPathContext_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlXPathContextPtr obj;
+} PyxmlXPathContext_Object;
+
+#define PyxmlXPathParserContext_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyxmlXPathParserContext_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlXPathParserContextPtr obj;
+} PyxmlXPathParserContext_Object;
+
+#define PyparserCtxt_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyparserCtxt_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlParserCtxtPtr obj;
+} PyparserCtxt_Object;
+
+#define Pycatalog_Get(v) (((v) == Py_None) ? NULL : \
+ (((Pycatalog_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlCatalogPtr obj;
+} Pycatalog_Object;
+
+#ifdef LIBXML_REGEXP_ENABLED
+#define PyxmlReg_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyxmlReg_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlRegexpPtr obj;
+} PyxmlReg_Object;
+#endif /* LIBXML_REGEXP_ENABLED */
+
+#define PyxmlTextReader_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyxmlTextReader_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlTextReaderPtr obj;
+} PyxmlTextReader_Object;
+
+#define PyxmlTextReaderLocator_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyxmlTextReaderLocator_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlTextReaderLocatorPtr obj;
+} PyxmlTextReaderLocator_Object;
+
+#define PyURI_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyURI_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlErrorPtr obj;
+} PyError_Object;
+
+#define PyError_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyError_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlOutputBufferPtr obj;
+} PyoutputBuffer_Object;
+
+#define PyoutputBuffer_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyoutputBuffer_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlParserInputBufferPtr obj;
+} PyinputBuffer_Object;
+
+#define PyinputBuffer_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyinputBuffer_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlURIPtr obj;
+} PyURI_Object;
+
+/* FILE * have their own internal representation */
+#define PyFile_Get(v) (((v) == Py_None) ? NULL : \
+ (PyFile_Check(v) ? (PyFile_AsFile(v)) : stdout))
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+typedef struct {
+ PyObject_HEAD
+ xmlRelaxNGPtr obj;
+} PyrelaxNgSchema_Object;
+
+#define PyrelaxNgSchema_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyrelaxNgSchema_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlRelaxNGParserCtxtPtr obj;
+} PyrelaxNgParserCtxt_Object;
+
+#define PyrelaxNgParserCtxt_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyrelaxNgParserCtxt_Object *)(v))->obj))
+
+typedef struct {
+ PyObject_HEAD
+ xmlRelaxNGValidCtxtPtr obj;
+} PyrelaxNgValidCtxt_Object;
+
+#define PyrelaxNgValidCtxt_Get(v) (((v) == Py_None) ? NULL : \
+ (((PyrelaxNgValidCtxt_Object *)(v))->obj))
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+
+PyObject * libxml_intWrap(int val);
+PyObject * libxml_longWrap(long val);
+PyObject * libxml_xmlCharPtrWrap(xmlChar *str);
+PyObject * libxml_constxmlCharPtrWrap(const xmlChar *str);
+PyObject * libxml_charPtrWrap(char *str);
+PyObject * libxml_constcharPtrWrap(const char *str);
+PyObject * libxml_charPtrConstWrap(const char *str);
+PyObject * libxml_xmlCharPtrConstWrap(const xmlChar *str);
+PyObject * libxml_xmlDocPtrWrap(xmlDocPtr doc);
+PyObject * libxml_xmlNodePtrWrap(xmlNodePtr node);
+PyObject * libxml_xmlAttrPtrWrap(xmlAttrPtr attr);
+PyObject * libxml_xmlNsPtrWrap(xmlNsPtr ns);
+PyObject * libxml_xmlAttributePtrWrap(xmlAttributePtr ns);
+PyObject * libxml_xmlElementPtrWrap(xmlElementPtr ns);
+PyObject * libxml_doubleWrap(double val);
+PyObject * libxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt);
+PyObject * libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt);
+PyObject * libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt);
+PyObject * libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj);
+PyObject * libxml_xmlCatalogPtrWrap(xmlCatalogPtr obj);
+PyObject * libxml_xmlURIPtrWrap(xmlURIPtr uri);
+PyObject * libxml_xmlOutputBufferPtrWrap(xmlOutputBufferPtr buffer);
+PyObject * libxml_xmlParserInputBufferPtrWrap(xmlParserInputBufferPtr buffer);
+#ifdef LIBXML_REGEXP_ENABLED
+PyObject * libxml_xmlRegexpPtrWrap(xmlRegexpPtr regexp);
+#endif /* LIBXML_REGEXP_ENABLED */
+PyObject * libxml_xmlTextReaderPtrWrap(xmlTextReaderPtr reader);
+PyObject * libxml_xmlTextReaderLocatorPtrWrap(xmlTextReaderLocatorPtr locator);
+
+xmlXPathObjectPtr libxml_xmlXPathObjectPtrConvert(PyObject * obj);
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject * libxml_xmlRelaxNGPtrWrap(xmlRelaxNGPtr ctxt);
+PyObject * libxml_xmlRelaxNGParserCtxtPtrWrap(xmlRelaxNGParserCtxtPtr ctxt);
+PyObject * libxml_xmlRelaxNGValidCtxtPtrWrap(xmlRelaxNGValidCtxtPtr valid);
+#endif /* LIBXML_SCHEMAS_ENABLED */
+PyObject * libxml_xmlErrorPtrWrap(xmlErrorPtr error);
diff --git a/python/setup.py b/python/setup.py
new file mode 100755
index 0000000..170c7c9
--- /dev/null
+++ b/python/setup.py
@@ -0,0 +1,242 @@
+#!/usr/bin/python -u
+#
+# Setup script for libxml2 and libxslt if found
+#
+import sys, os
+from distutils.core import setup, Extension
+
+# Below ROOT, we expect to find include, include/libxml2, lib and bin.
+# On *nix, it is not needed (but should not harm),
+# on Windows, it is set by configure.js.
+ROOT = r'/usr'
+
+# Thread-enabled libxml2
+with_threads = 1
+
+# If this flag is set (windows only),
+# a private copy of the dlls are included in the package.
+# If this flag is not set, the libxml2 and libxslt
+# dlls must be found somewhere in the PATH at runtime.
+WITHDLLS = 1 and sys.platform.startswith('win')
+
+def missing(file):
+ if os.access(file, os.R_OK) == 0:
+ return 1
+ return 0
+
+try:
+ HOME = os.environ['HOME']
+except:
+ HOME="C:"
+
+if WITHDLLS:
+ # libxml dlls (expected in ROOT/bin)
+ dlls = [ 'iconv.dll','libxml2.dll','libxslt.dll','libexslt.dll' ]
+ dlls = map(lambda dll: os.path.join(ROOT,'bin',dll),dlls)
+
+ # create __init__.py for the libxmlmods package
+ if not os.path.exists("libxmlmods"):
+ os.mkdir("libxmlmods")
+ open("libxmlmods/__init__.py","w").close()
+
+ def altImport(s):
+ s = s.replace("import libxml2mod","from libxmlmods import libxml2mod")
+ s = s.replace("import libxsltmod","from libxmlmods import libxsltmod")
+ return s
+
+if sys.platform.startswith('win'):
+ libraryPrefix = 'lib'
+ platformLibs = []
+else:
+ libraryPrefix = ''
+ platformLibs = ["m","z"]
+
+# those are examined to find
+# - libxml2/libxml/tree.h
+# - iconv.h
+# - libxslt/xsltconfig.h
+includes_dir = [
+"/usr/include",
+"/usr/local/include",
+"/opt/include",
+os.path.join(ROOT,'include'),
+HOME
+];
+
+xml_includes=""
+for dir in includes_dir:
+ if not missing(dir + "/libxml2/libxml/tree.h"):
+ xml_includes=dir + "/libxml2"
+ break;
+
+if xml_includes == "":
+ print "failed to find headers for libxml2: update includes_dir"
+ sys.exit(1)
+
+iconv_includes=""
+for dir in includes_dir:
+ if not missing(dir + "/iconv.h"):
+ iconv_includes=dir
+ break;
+
+if iconv_includes == "":
+ print "failed to find headers for libiconv: update includes_dir"
+ sys.exit(1)
+
+# those are added in the linker search path for libraries
+libdirs = [
+os.path.join(ROOT,'lib'),
+]
+
+xml_files = ["libxml2-api.xml", "libxml2-python-api.xml",
+ "libxml.c", "libxml.py", "libxml_wrap.h", "types.c",
+ "xmlgenerator.py", "README", "TODO", "drv_libxml2.py"]
+
+xslt_files = ["libxslt-api.xml", "libxslt-python-api.xml",
+ "libxslt.c", "libxsl.py", "libxslt_wrap.h",
+ "xsltgenerator.py"]
+
+if missing("libxml2-py.c") or missing("libxml2.py"):
+ try:
+ try:
+ import xmlgenerator
+ except:
+ import generator
+ except:
+ print "failed to find and generate stubs for libxml2, aborting ..."
+ print sys.exc_type, sys.exc_value
+ sys.exit(1)
+
+ head = open("libxml.py", "r")
+ generated = open("libxml2class.py", "r")
+ result = open("libxml2.py", "w")
+ for line in head.readlines():
+ if WITHDLLS:
+ result.write(altImport(line))
+ else:
+ result.write(line)
+ for line in generated.readlines():
+ result.write(line)
+ head.close()
+ generated.close()
+ result.close()
+
+with_xslt=0
+if missing("libxslt-py.c") or missing("libxslt.py"):
+ if missing("xsltgenerator.py") or missing("libxslt-api.xml"):
+ print "libxslt stub generator not found, libxslt not built"
+ else:
+ try:
+ import xsltgenerator
+ except:
+ print "failed to generate stubs for libxslt, aborting ..."
+ print sys.exc_type, sys.exc_value
+ else:
+ head = open("libxsl.py", "r")
+ generated = open("libxsltclass.py", "r")
+ result = open("libxslt.py", "w")
+ for line in head.readlines():
+ if WITHDLLS:
+ result.write(altImport(line))
+ else:
+ result.write(line)
+ for line in generated.readlines():
+ result.write(line)
+ head.close()
+ generated.close()
+ result.close()
+ with_xslt=1
+else:
+ with_xslt=1
+
+if with_xslt == 1:
+ xslt_includes=""
+ for dir in includes_dir:
+ if not missing(dir + "/libxslt/xsltconfig.h"):
+ xslt_includes=dir + "/libxslt"
+ break;
+
+ if xslt_includes == "":
+ print "failed to find headers for libxslt: update includes_dir"
+ with_xslt = 0
+
+
+descr = "libxml2 package"
+modules = [ 'libxml2', 'drv_libxml2' ]
+if WITHDLLS:
+ modules.append('libxmlmods.__init__')
+c_files = ['libxml2-py.c', 'libxml.c', 'types.c' ]
+includes= [xml_includes, iconv_includes]
+libs = [libraryPrefix + "xml2"] + platformLibs
+macros = []
+if with_threads:
+ macros.append(('_REENTRANT','1'))
+if with_xslt == 1:
+ descr = "libxml2 and libxslt package"
+ if not sys.platform.startswith('win'):
+ #
+ # We are gonna build 2 identical shared libs with merge initializing
+ # both libxml2mod and libxsltmod
+ #
+ c_files = c_files + ['libxslt-py.c', 'libxslt.c']
+ xslt_c_files = c_files
+ macros.append(('MERGED_MODULES', '1'))
+ else:
+ #
+ # On windows the MERGED_MODULE option is not needed
+ # (and does not work)
+ #
+ xslt_c_files = ['libxslt-py.c', 'libxslt.c', 'types.c']
+ libs.insert(0, libraryPrefix + 'exslt')
+ libs.insert(0, libraryPrefix + 'xslt')
+ includes.append(xslt_includes)
+ modules.append('libxslt')
+
+
+extens=[Extension('libxml2mod', c_files, include_dirs=includes,
+ library_dirs=libdirs,
+ libraries=libs, define_macros=macros)]
+if with_xslt == 1:
+ extens.append(Extension('libxsltmod', xslt_c_files, include_dirs=includes,
+ library_dirs=libdirs,
+ libraries=libs, define_macros=macros))
+
+if missing("MANIFEST"):
+
+ manifest = open("MANIFEST", "w")
+ manifest.write("setup.py\n")
+ for file in xml_files:
+ manifest.write(file + "\n")
+ if with_xslt == 1:
+ for file in xslt_files:
+ manifest.write(file + "\n")
+ manifest.close()
+
+if WITHDLLS:
+ ext_package = "libxmlmods"
+ if sys.version >= "2.2":
+ base = "lib/site-packages/"
+ else:
+ base = ""
+ data_files = [(base+"libxmlmods",dlls)]
+else:
+ ext_package = None
+ data_files = []
+
+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.8",
+ description = descr,
+ author = "Daniel Veillard",
+ author_email = "veillard@redhat.com",
+ url = "http://xmlsoft.org/python.html",
+ licence="MIT Licence",
+ py_modules=modules,
+ ext_modules=extens,
+ ext_package=ext_package,
+ data_files=data_files,
+ )
+
+sys.exit(0)
+
diff --git a/python/setup.py.in b/python/setup.py.in
new file mode 100755
index 0000000..7eaf530
--- /dev/null
+++ b/python/setup.py.in
@@ -0,0 +1,242 @@
+#!/usr/bin/python -u
+#
+# Setup script for libxml2 and libxslt if found
+#
+import sys, os
+from distutils.core import setup, Extension
+
+# Below ROOT, we expect to find include, include/libxml2, lib and bin.
+# On *nix, it is not needed (but should not harm),
+# on Windows, it is set by configure.js.
+ROOT = r'@prefix@'
+
+# Thread-enabled libxml2
+with_threads = @WITH_THREADS@
+
+# If this flag is set (windows only),
+# a private copy of the dlls are included in the package.
+# If this flag is not set, the libxml2 and libxslt
+# dlls must be found somewhere in the PATH at runtime.
+WITHDLLS = 1 and sys.platform.startswith('win')
+
+def missing(file):
+ if os.access(file, os.R_OK) == 0:
+ return 1
+ return 0
+
+try:
+ HOME = os.environ['HOME']
+except:
+ HOME="C:"
+
+if WITHDLLS:
+ # libxml dlls (expected in ROOT/bin)
+ dlls = [ 'iconv.dll','libxml2.dll','libxslt.dll','libexslt.dll' ]
+ dlls = map(lambda dll: os.path.join(ROOT,'bin',dll),dlls)
+
+ # create __init__.py for the libxmlmods package
+ if not os.path.exists("libxmlmods"):
+ os.mkdir("libxmlmods")
+ open("libxmlmods/__init__.py","w").close()
+
+ def altImport(s):
+ s = s.replace("import libxml2mod","from libxmlmods import libxml2mod")
+ s = s.replace("import libxsltmod","from libxmlmods import libxsltmod")
+ return s
+
+if sys.platform.startswith('win'):
+ libraryPrefix = 'lib'
+ platformLibs = []
+else:
+ libraryPrefix = ''
+ platformLibs = ["m","z"]
+
+# those are examined to find
+# - libxml2/libxml/tree.h
+# - iconv.h
+# - libxslt/xsltconfig.h
+includes_dir = [
+"/usr/include",
+"/usr/local/include",
+"/opt/include",
+os.path.join(ROOT,'include'),
+HOME
+];
+
+xml_includes=""
+for dir in includes_dir:
+ if not missing(dir + "/libxml2/libxml/tree.h"):
+ xml_includes=dir + "/libxml2"
+ break;
+
+if xml_includes == "":
+ print "failed to find headers for libxml2: update includes_dir"
+ sys.exit(1)
+
+iconv_includes=""
+for dir in includes_dir:
+ if not missing(dir + "/iconv.h"):
+ iconv_includes=dir
+ break;
+
+if iconv_includes == "":
+ print "failed to find headers for libiconv: update includes_dir"
+ sys.exit(1)
+
+# those are added in the linker search path for libraries
+libdirs = [
+os.path.join(ROOT,'lib'),
+]
+
+xml_files = ["libxml2-api.xml", "libxml2-python-api.xml",
+ "libxml.c", "libxml.py", "libxml_wrap.h", "types.c",
+ "xmlgenerator.py", "README", "TODO", "drv_libxml2.py"]
+
+xslt_files = ["libxslt-api.xml", "libxslt-python-api.xml",
+ "libxslt.c", "libxsl.py", "libxslt_wrap.h",
+ "xsltgenerator.py"]
+
+if missing("libxml2-py.c") or missing("libxml2.py"):
+ try:
+ try:
+ import xmlgenerator
+ except:
+ import generator
+ except:
+ print "failed to find and generate stubs for libxml2, aborting ..."
+ print sys.exc_type, sys.exc_value
+ sys.exit(1)
+
+ head = open("libxml.py", "r")
+ generated = open("libxml2class.py", "r")
+ result = open("libxml2.py", "w")
+ for line in head.readlines():
+ if WITHDLLS:
+ result.write(altImport(line))
+ else:
+ result.write(line)
+ for line in generated.readlines():
+ result.write(line)
+ head.close()
+ generated.close()
+ result.close()
+
+with_xslt=0
+if missing("libxslt-py.c") or missing("libxslt.py"):
+ if missing("xsltgenerator.py") or missing("libxslt-api.xml"):
+ print "libxslt stub generator not found, libxslt not built"
+ else:
+ try:
+ import xsltgenerator
+ except:
+ print "failed to generate stubs for libxslt, aborting ..."
+ print sys.exc_type, sys.exc_value
+ else:
+ head = open("libxsl.py", "r")
+ generated = open("libxsltclass.py", "r")
+ result = open("libxslt.py", "w")
+ for line in head.readlines():
+ if WITHDLLS:
+ result.write(altImport(line))
+ else:
+ result.write(line)
+ for line in generated.readlines():
+ result.write(line)
+ head.close()
+ generated.close()
+ result.close()
+ with_xslt=1
+else:
+ with_xslt=1
+
+if with_xslt == 1:
+ xslt_includes=""
+ for dir in includes_dir:
+ if not missing(dir + "/libxslt/xsltconfig.h"):
+ xslt_includes=dir + "/libxslt"
+ break;
+
+ if xslt_includes == "":
+ print "failed to find headers for libxslt: update includes_dir"
+ with_xslt = 0
+
+
+descr = "libxml2 package"
+modules = [ 'libxml2', 'drv_libxml2' ]
+if WITHDLLS:
+ modules.append('libxmlmods.__init__')
+c_files = ['libxml2-py.c', 'libxml.c', 'types.c' ]
+includes= [xml_includes, iconv_includes]
+libs = [libraryPrefix + "xml2"] + platformLibs
+macros = []
+if with_threads:
+ macros.append(('_REENTRANT','1'))
+if with_xslt == 1:
+ descr = "libxml2 and libxslt package"
+ if not sys.platform.startswith('win'):
+ #
+ # We are gonna build 2 identical shared libs with merge initializing
+ # both libxml2mod and libxsltmod
+ #
+ c_files = c_files + ['libxslt-py.c', 'libxslt.c']
+ xslt_c_files = c_files
+ macros.append(('MERGED_MODULES', '1'))
+ else:
+ #
+ # On windows the MERGED_MODULE option is not needed
+ # (and does not work)
+ #
+ xslt_c_files = ['libxslt-py.c', 'libxslt.c', 'types.c']
+ libs.insert(0, libraryPrefix + 'exslt')
+ libs.insert(0, libraryPrefix + 'xslt')
+ includes.append(xslt_includes)
+ modules.append('libxslt')
+
+
+extens=[Extension('libxml2mod', c_files, include_dirs=includes,
+ library_dirs=libdirs,
+ libraries=libs, define_macros=macros)]
+if with_xslt == 1:
+ extens.append(Extension('libxsltmod', xslt_c_files, include_dirs=includes,
+ library_dirs=libdirs,
+ libraries=libs, define_macros=macros))
+
+if missing("MANIFEST"):
+
+ manifest = open("MANIFEST", "w")
+ manifest.write("setup.py\n")
+ for file in xml_files:
+ manifest.write(file + "\n")
+ if with_xslt == 1:
+ for file in xslt_files:
+ manifest.write(file + "\n")
+ manifest.close()
+
+if WITHDLLS:
+ ext_package = "libxmlmods"
+ if sys.version >= "2.2":
+ base = "lib/site-packages/"
+ else:
+ base = ""
+ data_files = [(base+"libxmlmods",dlls)]
+else:
+ ext_package = None
+ data_files = []
+
+setup (name = "libxml2-python",
+ # On *nix, the version number is created from setup.py.in
+ # On windows, it is set by configure.js
+ version = "@LIBXML_VERSION@",
+ description = descr,
+ author = "Daniel Veillard",
+ author_email = "veillard@redhat.com",
+ url = "http://xmlsoft.org/python.html",
+ licence="MIT Licence",
+ py_modules=modules,
+ ext_modules=extens,
+ ext_package=ext_package,
+ data_files=data_files,
+ )
+
+sys.exit(0)
+
diff --git a/python/tests/Makefile.am b/python/tests/Makefile.am
new file mode 100644
index 0000000..a07497e
--- /dev/null
+++ b/python/tests/Makefile.am
@@ -0,0 +1,60 @@
+EXAMPLE_DIR = $(datadir)/doc/libxml2-python-$(LIBXML_VERSION)/examples
+
+PYTESTS= \
+ build.py \
+ attribs.py \
+ tst.py \
+ tstxpath.py \
+ xpathext.py \
+ push.py \
+ pushSAX.py \
+ pushSAXhtml.py \
+ error.py \
+ serialize.py\
+ validate.py \
+ tstURI.py \
+ cutnpaste.py\
+ xpathret.py \
+ xpath.py \
+ outbuf.py \
+ inbuf.py \
+ resolver.py \
+ regexp.py \
+ reader.py \
+ reader2.py \
+ reader3.py \
+ reader4.py \
+ reader5.py \
+ reader6.py \
+ reader7.py \
+ walker.py \
+ ctxterror.py\
+ readererr.py\
+ relaxng.py \
+ thread2.py \
+ tstLastError.py \
+ indexes.py
+
+XMLS= \
+ tst.xml \
+ valid.xml \
+ invalid.xml
+
+EXTRA_DIST = $(PYTESTS) $(XMLS)
+
+if WITH_PYTHON
+tests: $(PYTESTS)
+ -@(PYTHONPATH="..:../.libs:$(srcdir)/.." ; export PYTHONPATH; \
+ for test in $(PYTESTS) ; do echo "-- $$test" ; $(PYTHON) $(srcdir)/$$test ; done)
+else
+tests:
+endif
+
+clean:
+ rm -f *.pyc core
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(EXAMPLE_DIR)
+ -(for test in $(PYTESTS) $(XMLS); \
+ do @INSTALL@ -m 0644 $(srcdir)/$$test $(DESTDIR)$(EXAMPLE_DIR) ; done)
+
diff --git a/python/tests/Makefile.in b/python/tests/Makefile.in
new file mode 100644
index 0000000..eebc526
--- /dev/null
+++ b/python/tests/Makefile.in
@@ -0,0 +1,459 @@
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+subdir = python/tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+C14N_OBJ = @C14N_OBJ@
+CATALOG_OBJ = @CATALOG_OBJ@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_OBJ = @DEBUG_OBJ@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOCB_OBJ = @DOCB_OBJ@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FTP_OBJ = @FTP_OBJ@
+HAVE_ISINF = @HAVE_ISINF@
+HAVE_ISNAN = @HAVE_ISNAN@
+HTML_DIR = @HTML_DIR@
+HTML_OBJ = @HTML_OBJ@
+HTTP_OBJ = @HTTP_OBJ@
+ICONV_LIBS = @ICONV_LIBS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
+LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
+LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
+LIBXML_VERSION = @LIBXML_VERSION@
+LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
+LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MV = @MV@
+M_LIBS = @M_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATTERN_TEST = @PATTERN_TEST@
+PYTHON = @PYTHON@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
+PYTHON_SUBDIR = @PYTHON_SUBDIR@
+PYTHON_TESTS = @PYTHON_TESTS@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RDL_LIBS = @RDL_LIBS@
+READER_TEST = @READER_TEST@
+RELDATE = @RELDATE@
+RM = @RM@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STATIC_BINARIES = @STATIC_BINARIES@
+STRIP = @STRIP@
+TAR = @TAR@
+TEST_C14N = @TEST_C14N@
+TEST_CATALOG = @TEST_CATALOG@
+TEST_DEBUG = @TEST_DEBUG@
+TEST_HTML = @TEST_HTML@
+TEST_PHTML = @TEST_PHTML@
+TEST_PUSH = @TEST_PUSH@
+TEST_REGEXPS = @TEST_REGEXPS@
+TEST_SAX = @TEST_SAX@
+TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_THREADS = @TEST_THREADS@
+TEST_VALID = @TEST_VALID@
+TEST_VTIME = @TEST_VTIME@
+TEST_XINCLUDE = @TEST_XINCLUDE@
+TEST_XPATH = @TEST_XPATH@
+TEST_XPTR = @TEST_XPTR@
+THREADS_W32 = @THREADS_W32@
+THREAD_CFLAGS = @THREAD_CFLAGS@
+THREAD_LIBS = @THREAD_LIBS@
+U = @U@
+VERSION = @VERSION@
+WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
+WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
+WITH_C14N = @WITH_C14N@
+WITH_CATALOG = @WITH_CATALOG@
+WITH_DEBUG = @WITH_DEBUG@
+WITH_DOCB = @WITH_DOCB@
+WITH_FTP = @WITH_FTP@
+WITH_HTML = @WITH_HTML@
+WITH_HTTP = @WITH_HTTP@
+WITH_ICONV = @WITH_ICONV@
+WITH_ISO8859X = @WITH_ISO8859X@
+WITH_LEGACY = @WITH_LEGACY@
+WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
+WITH_OUTPUT = @WITH_OUTPUT@
+WITH_PATTERN = @WITH_PATTERN@
+WITH_PUSH = @WITH_PUSH@
+WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
+WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
+WITH_READER = @WITH_READER@
+WITH_REGEXPS = @WITH_REGEXPS@
+WITH_SAX1 = @WITH_SAX1@
+WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_THREADS = @WITH_THREADS@
+WITH_TREE = @WITH_TREE@
+WITH_TRIO = @WITH_TRIO@
+WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
+WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
+WITH_VALID = @WITH_VALID@
+WITH_WRITER = @WITH_WRITER@
+WITH_XINCLUDE = @WITH_XINCLUDE@
+WITH_XPATH = @WITH_XPATH@
+WITH_XPTR = @WITH_XPTR@
+XINCLUDE_OBJ = @XINCLUDE_OBJ@
+XML_CFLAGS = @XML_CFLAGS@
+XML_INCLUDEDIR = @XML_INCLUDEDIR@
+XML_LIBDIR = @XML_LIBDIR@
+XML_LIBS = @XML_LIBS@
+XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
+XPATH_OBJ = @XPATH_OBJ@
+XPTR_OBJ = @XPTR_OBJ@
+Z_CFLAGS = @Z_CFLAGS@
+Z_LIBS = @Z_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXAMPLE_DIR = $(datadir)/doc/libxml2-python-$(LIBXML_VERSION)/examples
+PYTESTS = \
+ build.py \
+ attribs.py \
+ tst.py \
+ tstxpath.py \
+ xpathext.py \
+ push.py \
+ pushSAX.py \
+ pushSAXhtml.py \
+ error.py \
+ serialize.py\
+ validate.py \
+ tstURI.py \
+ cutnpaste.py\
+ xpathret.py \
+ xpath.py \
+ outbuf.py \
+ inbuf.py \
+ resolver.py \
+ regexp.py \
+ reader.py \
+ reader2.py \
+ reader3.py \
+ reader4.py \
+ reader5.py \
+ reader6.py \
+ reader7.py \
+ walker.py \
+ ctxterror.py\
+ readererr.py\
+ relaxng.py \
+ thread2.py \
+ tstLastError.py \
+ indexes.py
+
+XMLS = \
+ tst.xml \
+ valid.xml \
+ invalid.xml
+
+EXTRA_DIST = $(PYTESTS) $(XMLS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu python/tests/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu python/tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-info-am
+
+
+@WITH_PYTHON_TRUE@tests: $(PYTESTS)
+@WITH_PYTHON_TRUE@ -@(PYTHONPATH="..:../.libs:$(srcdir)/.." ; export PYTHONPATH; \
+@WITH_PYTHON_TRUE@ for test in $(PYTESTS) ; do echo "-- $$test" ; $(PYTHON) $(srcdir)/$$test ; done)
+@WITH_PYTHON_FALSE@tests:
+
+clean:
+ rm -f *.pyc core
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(EXAMPLE_DIR)
+ -(for test in $(PYTESTS) $(XMLS); \
+ do @INSTALL@ -m 0644 $(srcdir)/$$test $(DESTDIR)$(EXAMPLE_DIR) ; done)
+# 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/python/tests/attribs.py b/python/tests/attribs.py
new file mode 100755
index 0000000..9331a27
--- /dev/null
+++ b/python/tests/attribs.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+#
+# Testing XML document serialization
+#
+doc = libxml2.parseDoc(
+"""<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE test [
+<!ELEMENT test (#PCDATA) >
+<!ATTLIST test xmlns:abc CDATA #FIXED "http://abc.org" >
+<!ATTLIST test abc:attr CDATA #FIXED "def" >
+]>
+<test />
+""")
+elem = doc.getRootElement()
+attr = elem.hasNsProp('attr', 'http://abc.org')
+if attr == None or attr.serialize()[:-1] != """<!ATTLIST test abc:attr CDATA #FIXED "def">""":
+ print "Failed to find defaulted attribute abc:attr"
+ sys.exit(1)
+
+doc.freeDoc()
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/build.py b/python/tests/build.py
new file mode 100755
index 0000000..bfc776c
--- /dev/null
+++ b/python/tests/build.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python -u
+import libxml2
+import sys
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+doc = libxml2.newDoc("1.0")
+comment = doc.newDocComment("This is a generated document")
+doc.addChild(comment)
+pi = libxml2.newPI("test", "PI content")
+doc.addChild(pi)
+root = doc.newChild(None, "doc", None)
+ns = root.newNs("http://example.com/doc", "my")
+root.setNs(ns)
+elem = root.newChild(None, "foo", "bar")
+elem.setBase("http://example.com/imgs")
+elem.setProp("img", "image.gif")
+doc.saveFile("tmp.xml")
+doc.freeDoc()
+
+doc = libxml2.parseFile("tmp.xml")
+comment = doc.children
+if comment.type != "comment" or \
+ comment.content != "This is a generated document":
+ print "error rereading comment"
+ sys.exit(1)
+pi = comment.next
+if pi.type != "pi" or pi.name != "test" or pi.content != "PI content":
+ print "error rereading PI"
+ sys.exit(1)
+root = pi.next
+if root.name != "doc":
+ print "error rereading root"
+ sys.exit(1)
+ns = root.ns()
+if ns.name != "my" or ns.content != "http://example.com/doc":
+ print "error rereading namespace"
+ sys.exit(1)
+elem = root.children
+if elem.name != "foo":
+ print "error rereading elem"
+ sys.exit(1)
+if elem.getBase(None) != "http://example.com/imgs":
+ print "error rereading base"
+ sys.exit(1)
+if elem.prop("img") != "image.gif":
+ print "error rereading property"
+ sys.exit(1)
+
+doc.freeDoc()
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/ctxterror.py b/python/tests/ctxterror.py
new file mode 100755
index 0000000..f2a897a
--- /dev/null
+++ b/python/tests/ctxterror.py
@@ -0,0 +1,56 @@
+#!/usr/bin/python -u
+#
+# This test exercise the redirection of error messages with a
+# functions defined in Python.
+#
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+expect="""--> (3) xmlns: URI foo is not absolute
+--> (4) Opening and ending tag mismatch: x line 0 and y
+"""
+
+err=""
+def callback(arg,msg,severity,reserved):
+ global err
+ err = err + "%s (%d) %s" % (arg,severity,msg)
+
+s = """<x xmlns="foo"></y>"""
+
+parserCtxt = libxml2.createPushParser(None,"",0,"test.xml")
+parserCtxt.setErrorHandler(callback, "-->")
+if parserCtxt.getErrorHandler() != (callback,"-->"):
+ print "getErrorHandler failed"
+ sys.exit(1)
+parserCtxt.parseChunk(s,len(s),1)
+doc = parserCtxt.doc()
+doc.freeDoc()
+parserCtxt = None
+
+if err != expect:
+ print "error"
+ print "received %s" %(err)
+ print "expected %s" %(expect)
+ sys.exit(1)
+
+i = 10000
+while i > 0:
+ parserCtxt = libxml2.createPushParser(None,"",0,"test.xml")
+ parserCtxt.setErrorHandler(callback, "-->")
+ parserCtxt.parseChunk(s,len(s),1)
+ doc = parserCtxt.doc()
+ doc.freeDoc()
+ parserCtxt = None
+ err = ""
+ i = i - 1
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/cutnpaste.py b/python/tests/cutnpaste.py
new file mode 100755
index 0000000..0f9665a
--- /dev/null
+++ b/python/tests/cutnpaste.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+#
+# Testing XML document serialization
+#
+source = libxml2.parseDoc("""<?xml version="1.0"?>
+<root xmlns:foo="http://example.org/foo"
+ xmlns:bar="http://example.org/bar">
+<include xmlns="http://example.org/include">
+<fragment><foo:elem bar="tricky"/></fragment>
+</include>
+</root>
+""")
+
+target = libxml2.parseDoc("""<?xml version="1.0"?>
+<root xmlns:foobar="http://example.org/bar"/>""")
+
+fragment = source.xpathEval("//*[name()='fragment']")[0]
+dest = target.getRootElement()
+
+# do a cut and paste operation
+fragment.unlinkNode()
+dest.addChild(fragment)
+# do the namespace fixup
+dest.reconciliateNs(target)
+
+# The source tree can be freed at that point
+source.freeDoc()
+
+# check the resulting tree
+str = dest.serialize()
+if str != """<root xmlns:foobar="http://example.org/bar" xmlns:default="http://example.org/include" xmlns:foo="http://example.org/foo"><default:fragment><foo:elem bar="tricky"/></default:fragment></root>""":
+ print "reconciliateNs() failed"
+ sys.exit(1)
+target.freeDoc()
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/error.py b/python/tests/error.py
new file mode 100755
index 0000000..da6d0c1
--- /dev/null
+++ b/python/tests/error.py
@@ -0,0 +1,51 @@
+#!/usr/bin/python -u
+#
+# This test exercise the redirection of error messages with a
+# functions defined in Python.
+#
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+expect='--> I/O --> warning : --> failed to load external entity "missing.xml"\n'
+err=""
+def callback(ctx, str):
+ global err
+
+ err = err + "%s %s" % (ctx, str)
+
+got_exc = 0
+libxml2.registerErrorHandler(callback, "-->")
+try:
+ doc = libxml2.parseFile("missing.xml")
+except libxml2.parserError:
+ got_exc = 1
+
+if got_exc == 0:
+ print "Failed to get a parser exception"
+ sys.exit(1)
+
+if err != expect:
+ print "error"
+ print "received %s" %(err)
+ print "expected %s" %(expect)
+ sys.exit(1)
+
+i = 10000
+while i > 0:
+ try:
+ doc = libxml2.parseFile("missing.xml")
+ except libxml2.parserError:
+ got_exc = 1
+ err = ""
+ i = i - 1
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/inbuf.py b/python/tests/inbuf.py
new file mode 100755
index 0000000..a7cc7a6
--- /dev/null
+++ b/python/tests/inbuf.py
@@ -0,0 +1,25 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+import StringIO
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+i = 0
+while i < 5000:
+ f = StringIO.StringIO("foobar")
+ buf = libxml2.inputBuffer(f)
+ i = i + 1
+
+del f
+del buf
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
+
diff --git a/python/tests/indexes.py b/python/tests/indexes.py
new file mode 100755
index 0000000..8d7a7fc
--- /dev/null
+++ b/python/tests/indexes.py
@@ -0,0 +1,113 @@
+#!/usr/bin/python -u
+# -*- coding: ISO-8859-1 -*-
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+ctxt = None
+
+class callback:
+ def __init__(self, startd, starte, ende, delta, endd):
+ self.startd = startd
+ self.starte = starte
+ self.ende = ende
+ self.endd = endd
+ self.delta = delta
+ self.count = 0
+
+ def startDocument(self):
+ global ctxt
+ if ctxt.byteConsumed() != self.startd:
+ print "document start at wrong index: %d expecting %d\n" % (
+ ctxt.byteConsumed(), self.startd)
+ sys.exit(1)
+
+ def endDocument(self):
+ global ctxt
+ expect = self.ende + self.delta * (self.count - 1) + self.endd
+ if ctxt.byteConsumed() != expect:
+ print "document end at wrong index: %d expecting %d\n" % (
+ ctxt.byteConsumed(), expect)
+ sys.exit(1)
+
+ def startElement(self, tag, attrs):
+ global ctxt
+ if tag == "bar1":
+ expect = self.starte + self.delta * self.count
+ if ctxt.byteConsumed() != expect:
+ print "element start at wrong index: %d expecting %d\n" % (
+ ctxt.byteConsumed(), expect)
+ sys.exit(1)
+
+
+ def endElement(self, tag):
+ global ctxt
+ if tag == "bar1":
+ expect = self.ende + self.delta * self.count
+ if ctxt.byteConsumed() != expect:
+ print "element end at wrong index: %d expecting %d\n" % (
+ ctxt.byteConsumed(), expect)
+ sys.exit(1)
+ self.count = self.count + 1
+
+ def characters(self, data):
+ pass
+
+#
+# First run a pure UTF-8 test
+#
+handler = callback(0, 13, 27, 198, 183)
+ctxt = libxml2.createPushParser(handler, "<foo>\n", 6, "test.xml")
+chunk = """ <bar1>chars1</bar1>
+ <bar2>chars2</bar2>
+ <bar3>chars3</bar3>
+ <bar4>chars4</bar4>
+ <bar5>chars5</bar5>
+ <bar6>&lt;s6</bar6>
+ <bar7>chars7</bar7>
+ <bar8>&#38;8</bar8>
+ <bar9>chars9</bar9>
+"""
+i = 0
+while i < 10000:
+ ctxt.parseChunk(chunk, len(chunk), 0)
+ i = i + 1
+chunk = "</foo>"
+ctxt.parseChunk(chunk, len(chunk), 1)
+ctxt=None
+
+#
+# Then run a test relying on ISO-Latin-1
+#
+handler = callback(43, 57, 71, 198, 183)
+chunk="""<?xml version="1.0" encoding="ISO-8859-1"?>
+<foo>
+"""
+ctxt = libxml2.createPushParser(handler, chunk, len(chunk), "test.xml")
+chunk = """ <bar1>chars1</bar1>
+ <bar2>chars2</bar2>
+ <bar3>chars3</bar3>
+ <bar4>chàrs4</bar4>
+ <bar5>chars5</bar5>
+ <bar6>&lt;s6</bar6>
+ <bar7>chars7</bar7>
+ <bar8>&#38;8</bar8>
+ <bar9>très 9</bar9>
+"""
+i = 0
+while i < 10000:
+ ctxt.parseChunk(chunk, len(chunk), 0)
+ i = i + 1
+chunk = "</foo>"
+ctxt.parseChunk(chunk, len(chunk), 1)
+ctxt=None
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/invalid.xml b/python/tests/invalid.xml
new file mode 100644
index 0000000..7c9b27e
--- /dev/null
+++ b/python/tests/invalid.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a, b, a)>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+]>
+<doc><b/><a/><b/></doc>
diff --git a/python/tests/outbuf.py b/python/tests/outbuf.py
new file mode 100755
index 0000000..4213159
--- /dev/null
+++ b/python/tests/outbuf.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+import StringIO
+
+#print "Skipped"
+#sys.exit(1)
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+#f = open('res', 'w')
+f = StringIO.StringIO()
+buf = libxml2.createOutputBuffer(f, "ISO-8859-1")
+buf.write(3, "foo")
+buf.writeString("bar")
+buf.close()
+
+if f.getvalue() != "foobar":
+ print "Failed to save to StringIO"
+ sys.exit(1)
+
+del buf
+del f
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
+
diff --git a/python/tests/push.py b/python/tests/push.py
new file mode 100755
index 0000000..5b60a16
--- /dev/null
+++ b/python/tests/push.py
@@ -0,0 +1,35 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+ctxt = libxml2.createPushParser(None, "<foo", 4, "test.xml")
+ctxt.parseChunk("/>", 2, 1)
+doc = ctxt.doc()
+ctxt=None
+if doc.name != "test.xml":
+ print "document name error"
+ sys.exit(1)
+root = doc.children
+if root.name != "foo":
+ print "root element name error"
+ sys.exit(1)
+doc.freeDoc()
+i = 10000
+while i > 0:
+ ctxt = libxml2.createPushParser(None, "<foo", 4, "test.xml")
+ ctxt.parseChunk("/>", 2, 1)
+ doc = ctxt.doc()
+ doc.freeDoc()
+ i = i -1
+ctxt=None
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/pushSAX.py b/python/tests/pushSAX.py
new file mode 100755
index 0000000..1c1e786
--- /dev/null
+++ b/python/tests/pushSAX.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+log = ""
+
+class callback:
+ def startDocument(self):
+ global log
+ log = log + "startDocument:"
+
+ def endDocument(self):
+ global log
+ log = log + "endDocument:"
+
+ def startElement(self, tag, attrs):
+ global log
+ log = log + "startElement %s %s:" % (tag, attrs)
+
+ def endElement(self, tag):
+ global log
+ log = log + "endElement %s:" % (tag)
+
+ def characters(self, data):
+ global log
+ log = log + "characters: %s:" % (data)
+
+ def warning(self, msg):
+ global log
+ log = log + "warning: %s:" % (msg)
+
+ def error(self, msg):
+ global log
+ log = log + "error: %s:" % (msg)
+
+ def fatalError(self, msg):
+ global log
+ log = log + "fatalError: %s:" % (msg)
+
+handler = callback()
+
+ctxt = libxml2.createPushParser(handler, "<foo", 4, "test.xml")
+chunk = " url='tst'>b"
+ctxt.parseChunk(chunk, len(chunk), 0)
+chunk = "ar</foo>"
+ctxt.parseChunk(chunk, len(chunk), 1)
+ctxt=None
+
+reference = "startDocument:startElement foo {'url': 'tst'}:characters: bar:endElement foo:endDocument:"
+if log != reference:
+ print "Error got: %s" % log
+ print "Exprected: %s" % reference
+ sys.exit(1)
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/pushSAXhtml.py b/python/tests/pushSAXhtml.py
new file mode 100755
index 0000000..e6e89d9
--- /dev/null
+++ b/python/tests/pushSAXhtml.py
@@ -0,0 +1,65 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+log = ""
+
+class callback:
+ def startDocument(self):
+ global log
+ log = log + "startDocument:"
+
+ def endDocument(self):
+ global log
+ log = log + "endDocument:"
+
+ def startElement(self, tag, attrs):
+ global log
+ log = log + "startElement %s %s:" % (tag, attrs)
+
+ def endElement(self, tag):
+ global log
+ log = log + "endElement %s:" % (tag)
+
+ def characters(self, data):
+ global log
+ log = log + "characters: %s:" % (data)
+
+ def warning(self, msg):
+ global log
+ log = log + "warning: %s:" % (msg)
+
+ def error(self, msg):
+ global log
+ log = log + "error: %s:" % (msg)
+
+ def fatalError(self, msg):
+ global log
+ log = log + "fatalError: %s:" % (msg)
+
+handler = callback()
+
+ctxt = libxml2.htmlCreatePushParser(handler, "<foo", 4, "test.xml")
+chunk = " url='tst'>b"
+ctxt.htmlParseChunk(chunk, len(chunk), 0)
+chunk = "ar</foo>"
+ctxt.htmlParseChunk(chunk, len(chunk), 1)
+ctxt=None
+
+reference = """startDocument:startElement html None:startElement body None:startElement foo {'url': 'tst'}:error: Tag foo invalid
+:characters: bar:endElement foo:endElement body:endElement html:endDocument:"""
+if log != reference:
+ print "Error got: %s" % log
+ print "Exprected: %s" % reference
+ sys.exit(1)
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/reader.py b/python/tests/reader.py
new file mode 100755
index 0000000..6c37762
--- /dev/null
+++ b/python/tests/reader.py
@@ -0,0 +1,441 @@
+#!/usr/bin/python -u
+# -*- coding: ISO-8859-1 -*-
+#
+# this tests the basic APIs of the XmlTextReader interface
+#
+import libxml2
+import StringIO
+import sys
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+f = StringIO.StringIO("""<a><b b1="b1"/><c>content of c</c></a>""")
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test1")
+ret = reader.Read()
+if ret != 1:
+ print "test1: Error reading to first element"
+ sys.exit(1)
+if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
+ reader.NodeType() != 1 or reader.HasAttributes() != 0:
+ print "test1: Error reading the first element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test1: Error reading to second element"
+ sys.exit(1)
+if reader.Name() != "b" or reader.IsEmptyElement() != 1 or \
+ reader.NodeType() != 1 or reader.HasAttributes() != 1:
+ print "test1: Error reading the second element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test1: Error reading to third element"
+ sys.exit(1)
+if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
+ reader.NodeType() != 1 or reader.HasAttributes() != 0:
+ print "test1: Error reading the third element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test1: Error reading to text node"
+ sys.exit(1)
+if reader.Name() != "#text" or reader.IsEmptyElement() != 0 or \
+ reader.NodeType() != 3 or reader.HasAttributes() != 0 or \
+ reader.Value() != "content of c":
+ print "test1: Error reading the text node"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test1: Error reading to end of third element"
+ sys.exit(1)
+if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
+ reader.NodeType() != 15 or reader.HasAttributes() != 0:
+ print "test1: Error reading the end of third element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test1: Error reading to end of first element"
+ sys.exit(1)
+if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
+ reader.NodeType() != 15 or reader.HasAttributes() != 0:
+ print "test1: Error reading the end of first element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 0:
+ print "test1: Error reading to end of document"
+ sys.exit(1)
+
+#
+# example from the XmlTextReader docs
+#
+f = StringIO.StringIO("""<test xmlns:dt="urn:datatypes" dt:type="int"/>""")
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test2")
+
+ret = reader.Read()
+if ret != 1:
+ print "Error reading test element"
+ sys.exit(1)
+if reader.GetAttributeNo(0) != "urn:datatypes" or \
+ reader.GetAttributeNo(1) != "int" or \
+ reader.GetAttributeNs("type", "urn:datatypes") != "int" or \
+ reader.GetAttribute("dt:type") != "int":
+ print "error reading test attributes"
+ sys.exit(1)
+
+#
+# example from the XmlTextReader docs
+#
+f = StringIO.StringIO("""<root xmlns:a="urn:456">
+<item>
+<ref href="a:b"/>
+</item>
+</root>""")
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test3")
+
+ret = reader.Read()
+while ret == 1:
+ if reader.Name() == "ref":
+ if reader.LookupNamespace("a") != "urn:456":
+ print "error resolving namespace prefix"
+ sys.exit(1)
+ break
+ ret = reader.Read()
+if ret != 1:
+ print "Error finding the ref element"
+ sys.exit(1)
+
+#
+# Home made example for the various attribute access functions
+#
+f = StringIO.StringIO("""<testattr xmlns="urn:1" xmlns:a="urn:2" b="b" a:b="a:b"/>""")
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test4")
+ret = reader.Read()
+if ret != 1:
+ print "Error reading the testattr element"
+ sys.exit(1)
+#
+# Attribute exploration by index
+#
+if reader.MoveToAttributeNo(0) != 1:
+ print "Failed moveToAttribute(0)"
+ sys.exit(1)
+if reader.Value() != "urn:1":
+ print "Failed to read attribute(0)"
+ sys.exit(1)
+if reader.Name() != "xmlns":
+ print "Failed to read attribute(0) name"
+ sys.exit(1)
+if reader.MoveToAttributeNo(1) != 1:
+ print "Failed moveToAttribute(1)"
+ sys.exit(1)
+if reader.Value() != "urn:2":
+ print "Failed to read attribute(1)"
+ sys.exit(1)
+if reader.Name() != "xmlns:a":
+ print "Failed to read attribute(1) name"
+ sys.exit(1)
+if reader.MoveToAttributeNo(2) != 1:
+ print "Failed moveToAttribute(2)"
+ sys.exit(1)
+if reader.Value() != "b":
+ print "Failed to read attribute(2)"
+ sys.exit(1)
+if reader.Name() != "b":
+ print "Failed to read attribute(2) name"
+ sys.exit(1)
+if reader.MoveToAttributeNo(3) != 1:
+ print "Failed moveToAttribute(3)"
+ sys.exit(1)
+if reader.Value() != "a:b":
+ print "Failed to read attribute(3)"
+ sys.exit(1)
+if reader.Name() != "a:b":
+ print "Failed to read attribute(3) name"
+ sys.exit(1)
+#
+# Attribute exploration by name
+#
+if reader.MoveToAttribute("xmlns") != 1:
+ print "Failed moveToAttribute('xmlns')"
+ sys.exit(1)
+if reader.Value() != "urn:1":
+ print "Failed to read attribute('xmlns')"
+ sys.exit(1)
+if reader.MoveToAttribute("xmlns:a") != 1:
+ print "Failed moveToAttribute('xmlns')"
+ sys.exit(1)
+if reader.Value() != "urn:2":
+ print "Failed to read attribute('xmlns:a')"
+ sys.exit(1)
+if reader.MoveToAttribute("b") != 1:
+ print "Failed moveToAttribute('b')"
+ sys.exit(1)
+if reader.Value() != "b":
+ print "Failed to read attribute('b')"
+ sys.exit(1)
+if reader.MoveToAttribute("a:b") != 1:
+ print "Failed moveToAttribute('a:b')"
+ sys.exit(1)
+if reader.Value() != "a:b":
+ print "Failed to read attribute('a:b')"
+ sys.exit(1)
+if reader.MoveToAttributeNs("b", "urn:2") != 1:
+ print "Failed moveToAttribute('b', 'urn:2')"
+ sys.exit(1)
+if reader.Value() != "a:b":
+ print "Failed to read attribute('b', 'urn:2')"
+ sys.exit(1)
+#
+# Go back and read in sequence
+#
+if reader.MoveToElement() != 1:
+ print "Failed to move back to element"
+ sys.exit(1)
+if reader.MoveToFirstAttribute() != 1:
+ print "Failed to move to first attribute"
+ sys.exit(1)
+if reader.Value() != "urn:1":
+ print "Failed to read attribute(0)"
+ sys.exit(1)
+if reader.Name() != "xmlns":
+ print "Failed to read attribute(0) name"
+ sys.exit(1)
+if reader.MoveToNextAttribute() != 1:
+ print "Failed to move to next attribute"
+ sys.exit(1)
+if reader.Value() != "urn:2":
+ print "Failed to read attribute(1)"
+ sys.exit(1)
+if reader.Name() != "xmlns:a":
+ print "Failed to read attribute(1) name"
+ sys.exit(1)
+if reader.MoveToNextAttribute() != 1:
+ print "Failed to move to next attribute"
+ sys.exit(1)
+if reader.Value() != "b":
+ print "Failed to read attribute(2)"
+ sys.exit(1)
+if reader.Name() != "b":
+ print "Failed to read attribute(2) name"
+ sys.exit(1)
+if reader.MoveToNextAttribute() != 1:
+ print "Failed to move to next attribute"
+ sys.exit(1)
+if reader.Value() != "a:b":
+ print "Failed to read attribute(3)"
+ sys.exit(1)
+if reader.Name() != "a:b":
+ print "Failed to read attribute(3) name"
+ sys.exit(1)
+if reader.MoveToNextAttribute() != 0:
+ print "Failed to detect last attribute"
+ sys.exit(1)
+
+
+#
+# a couple of tests for namespace nodes
+#
+f = StringIO.StringIO("""<a xmlns="http://example.com/foo"/>""")
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test6")
+ret = reader.Read()
+if ret != 1:
+ print "test6: failed to Read()"
+ sys.exit(1)
+ret = reader.MoveToFirstAttribute()
+if ret != 1:
+ print "test6: failed to MoveToFirstAttribute()"
+ sys.exit(1)
+if reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
+ reader.LocalName() != "xmlns" or reader.Name() != "xmlns" or \
+ reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
+ print "test6: failed to read the namespace node"
+ sys.exit(1)
+
+f = StringIO.StringIO("""<a xmlns:prefix="http://example.com/foo"/>""")
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test7")
+ret = reader.Read()
+if ret != 1:
+ print "test7: failed to Read()"
+ sys.exit(1)
+ret = reader.MoveToFirstAttribute()
+if ret != 1:
+ print "test7: failed to MoveToFirstAttribute()"
+ sys.exit(1)
+if reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
+ reader.LocalName() != "prefix" or reader.Name() != "xmlns:prefix" or \
+ reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
+ print "test7: failed to read the namespace node"
+ sys.exit(1)
+
+#
+# Test for a limit case:
+#
+f = StringIO.StringIO("""<a/>""")
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test8")
+ret = reader.Read()
+if ret != 1:
+ print "test8: failed to read the node"
+ sys.exit(1)
+if reader.Name() != "a" or reader.IsEmptyElement() != 1:
+ print "test8: failed to analyze the node"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 0:
+ print "test8: failed to detect the EOF"
+ sys.exit(1)
+
+#
+# Another test provided by Stéphane Bidoul and checked with C#
+#
+def tst_reader(s):
+ f = StringIO.StringIO(s)
+ input = libxml2.inputBuffer(f)
+ reader = input.newTextReader("tst")
+ res = ""
+ while reader.Read():
+ res=res + "%s (%s) [%s] %d %d\n" % (reader.NodeType(),reader.Name(),
+ reader.Value(), reader.IsEmptyElement(),
+ reader.Depth())
+ if reader.NodeType() == 1: # Element
+ while reader.MoveToNextAttribute():
+ res = res + "-- %s (%s) [%s] %d %d\n" % (reader.NodeType(),
+ reader.Name(),reader.Value(),
+ reader.IsEmptyElement(), reader.Depth())
+ return res
+
+doc="""<a><b b1="b1"/><c>content of c</c></a>"""
+expect="""1 (a) [None] 0 0
+1 (b) [None] 1 1
+-- 2 (b1) [b1] 0 2
+1 (c) [None] 0 1
+3 (#text) [content of c] 0 2
+15 (c) [None] 0 1
+15 (a) [None] 0 0
+"""
+res = tst_reader(doc)
+if res != expect:
+ print "test5 failed"
+ print res
+ sys.exit(1)
+
+doc="""<test><b/><c/></test>"""
+expect="""1 (test) [None] 0 0
+1 (b) [None] 1 1
+1 (c) [None] 1 1
+15 (test) [None] 0 0
+"""
+res = tst_reader(doc)
+if res != expect:
+ print "test9 failed"
+ print res
+ sys.exit(1)
+
+doc="""<a><b>bbb</b><c>ccc</c></a>"""
+expect="""1 (a) [None] 0 0
+1 (b) [None] 0 1
+3 (#text) [bbb] 0 2
+15 (b) [None] 0 1
+1 (c) [None] 0 1
+3 (#text) [ccc] 0 2
+15 (c) [None] 0 1
+15 (a) [None] 0 0
+"""
+res = tst_reader(doc)
+if res != expect:
+ print "test10 failed"
+ print res
+ sys.exit(1)
+
+doc="""<test a="a"/>"""
+expect="""1 (test) [None] 1 0
+-- 2 (a) [a] 0 1
+"""
+res = tst_reader(doc)
+if res != expect:
+ print "test11 failed"
+ print res
+ sys.exit(1)
+
+doc="""<test><a>aaa</a><b/></test>"""
+expect="""1 (test) [None] 0 0
+1 (a) [None] 0 1
+3 (#text) [aaa] 0 2
+15 (a) [None] 0 1
+1 (b) [None] 1 1
+15 (test) [None] 0 0
+"""
+res = tst_reader(doc)
+if res != expect:
+ print "test12 failed"
+ print res
+ sys.exit(1)
+
+doc="""<test><p></p></test>"""
+expect="""1 (test) [None] 0 0
+1 (p) [None] 0 1
+15 (p) [None] 0 1
+15 (test) [None] 0 0
+"""
+res = tst_reader(doc)
+if res != expect:
+ print "test13 failed"
+ print res
+ sys.exit(1)
+
+doc="""<p></p>"""
+expect="""1 (p) [None] 0 0
+15 (p) [None] 0 0
+"""
+res = tst_reader(doc)
+if res != expect:
+ print "test14 failed"
+ print res
+ sys.exit(1)
+
+#
+# test from bug #108801
+#
+doc="""<?xml version="1.0" standalone="no"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+]>
+
+<article>
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+</article>
+"""
+expect="""10 (article) [None] 0 0
+1 (article) [None] 0 0
+3 (#text) [
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+] 0 1
+15 (article) [None] 0 0
+"""
+res = tst_reader(doc)
+if res != expect:
+ print "test15 failed"
+ print res
+ sys.exit(1)
+
+#
+# cleanup for memory allocation counting
+#
+del f
+del input
+del reader
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/reader2.py b/python/tests/reader2.py
new file mode 100755
index 0000000..ea890ec
--- /dev/null
+++ b/python/tests/reader2.py
@@ -0,0 +1,256 @@
+#!/usr/bin/python -u
+#
+# this tests the DTD validation with the XmlTextReader interface
+#
+import sys
+import glob
+import string
+import StringIO
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+err=""
+expect="""../../test/valid/rss.xml:177: element rss: validity error : Element rss does not carry attribute version
+</rss>
+ ^
+../../test/valid/xlink.xml:450: element termdef: validity error : ID dt-arc already defined
+ <p><termdef id="dt-arc" term="Arc">An <ter
+ ^
+../../test/valid/xlink.xml:530: validity error : attribute def line 199 references an unknown ID "dt-xlg"
+
+^
+"""
+def callback(ctx, str):
+ global err
+ err = err + "%s" % (str)
+libxml2.registerErrorHandler(callback, "")
+
+valid_files = glob.glob("../../test/valid/*.x*")
+valid_files.sort()
+for file in valid_files:
+ if string.find(file, "t8") != -1:
+ continue
+ reader = libxml2.newTextReaderFilename(file)
+ #print "%s:" % (file)
+ reader.SetParserProp(libxml2.PARSER_VALIDATE, 1)
+ ret = reader.Read()
+ while ret == 1:
+ ret = reader.Read()
+ if ret != 0:
+ print "Error parsing and validating %s" % (file)
+ #sys.exit(1)
+
+if err != expect:
+ print err
+
+#
+# another separate test based on Stephane Bidoul one
+#
+s = """
+<!DOCTYPE test [
+<!ELEMENT test (x,b)>
+<!ELEMENT x (c)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ENTITY x "<x><c>xxx</c></x>">
+]>
+<test>
+ &x;
+ <b>bbb</b>
+</test>
+"""
+expect="""10,test
+1,test
+14,#text
+1,x
+1,c
+3,#text
+15,c
+15,x
+14,#text
+1,b
+3,#text
+15,b
+14,#text
+15,test
+"""
+res=""
+err=""
+
+input = libxml2.inputBuffer(StringIO.StringIO(s))
+reader = input.newTextReader("test2")
+reader.SetParserProp(libxml2.PARSER_LOADDTD,1)
+reader.SetParserProp(libxml2.PARSER_DEFAULTATTRS,1)
+reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)
+reader.SetParserProp(libxml2.PARSER_VALIDATE,1)
+while reader.Read() == 1:
+ res = res + "%s,%s\n" % (reader.NodeType(),reader.Name())
+
+if res != expect:
+ print "test2 failed: unexpected output"
+ print res
+ sys.exit(1)
+if err != "":
+ print "test2 failed: validation error found"
+ print err
+ sys.exit(1)
+
+#
+# Another test for external entity parsing and validation
+#
+
+s = """<!DOCTYPE test [
+<!ELEMENT test (x)>
+<!ELEMENT x (#PCDATA)>
+<!ENTITY e SYSTEM "tst.ent">
+]>
+<test>
+ &e;
+</test>
+"""
+tst_ent = """<x>hello</x>"""
+expect="""10 test
+1 test
+14 #text
+1 x
+3 #text
+15 x
+14 #text
+15 test
+"""
+res=""
+
+def myResolver(URL, ID, ctxt):
+ if URL == "tst.ent":
+ return(StringIO.StringIO(tst_ent))
+ return None
+
+libxml2.setEntityLoader(myResolver)
+
+input = libxml2.inputBuffer(StringIO.StringIO(s))
+reader = input.newTextReader("test3")
+reader.SetParserProp(libxml2.PARSER_LOADDTD,1)
+reader.SetParserProp(libxml2.PARSER_DEFAULTATTRS,1)
+reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)
+reader.SetParserProp(libxml2.PARSER_VALIDATE,1)
+while reader.Read() == 1:
+ res = res + "%s %s\n" % (reader.NodeType(),reader.Name())
+
+if res != expect:
+ print "test3 failed: unexpected output"
+ print res
+ sys.exit(1)
+if err != "":
+ print "test3 failed: validation error found"
+ print err
+ sys.exit(1)
+
+#
+# Another test for recursive entity parsing, validation, and replacement of
+# entities, making sure the entity ref node doesn't show up in that case
+#
+
+s = """<!DOCTYPE test [
+<!ELEMENT test (x, x)>
+<!ELEMENT x (y)>
+<!ELEMENT y (#PCDATA)>
+<!ENTITY x "<x>&y;</x>">
+<!ENTITY y "<y>yyy</y>">
+]>
+<test>
+ &x;
+ &x;
+</test>"""
+expect="""10 test 0
+1 test 0
+14 #text 1
+1 x 1
+1 y 2
+3 #text 3
+15 y 2
+15 x 1
+14 #text 1
+1 x 1
+1 y 2
+3 #text 3
+15 y 2
+15 x 1
+14 #text 1
+15 test 0
+"""
+res=""
+err=""
+
+input = libxml2.inputBuffer(StringIO.StringIO(s))
+reader = input.newTextReader("test4")
+reader.SetParserProp(libxml2.PARSER_LOADDTD,1)
+reader.SetParserProp(libxml2.PARSER_DEFAULTATTRS,1)
+reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)
+reader.SetParserProp(libxml2.PARSER_VALIDATE,1)
+while reader.Read() == 1:
+ res = res + "%s %s %d\n" % (reader.NodeType(),reader.Name(),reader.Depth())
+
+if res != expect:
+ print "test4 failed: unexpected output"
+ print res
+ sys.exit(1)
+if err != "":
+ print "test4 failed: validation error found"
+ print err
+ sys.exit(1)
+
+#
+# The same test but without entity substitution this time
+#
+
+s = """<!DOCTYPE test [
+<!ELEMENT test (x, x)>
+<!ELEMENT x (y)>
+<!ELEMENT y (#PCDATA)>
+<!ENTITY x "<x>&y;</x>">
+<!ENTITY y "<y>yyy</y>">
+]>
+<test>
+ &x;
+ &x;
+</test>"""
+expect="""10 test 0
+1 test 0
+14 #text 1
+5 x 1
+14 #text 1
+5 x 1
+14 #text 1
+15 test 0
+"""
+res=""
+err=""
+
+input = libxml2.inputBuffer(StringIO.StringIO(s))
+reader = input.newTextReader("test5")
+reader.SetParserProp(libxml2.PARSER_VALIDATE,1)
+while reader.Read() == 1:
+ res = res + "%s %s %d\n" % (reader.NodeType(),reader.Name(),reader.Depth())
+
+if res != expect:
+ print "test5 failed: unexpected output"
+ print res
+if err != "":
+ print "test5 failed: validation error found"
+ print err
+
+#
+# cleanup
+#
+del input
+del reader
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/reader3.py b/python/tests/reader3.py
new file mode 100755
index 0000000..2458c89
--- /dev/null
+++ b/python/tests/reader3.py
@@ -0,0 +1,155 @@
+#!/usr/bin/python -u
+#
+# this tests the entities substitutions with the XmlTextReader interface
+#
+import sys
+import StringIO
+import libxml2
+
+docstr="""<?xml version='1.0'?>
+<!DOCTYPE doc [
+<!ENTITY tst "<p>test</p>">
+]>
+<doc>&tst;</doc>"""
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+#
+# First test, normal don't substitute entities.
+#
+f = StringIO.StringIO(docstr)
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test_noent")
+ret = reader.Read()
+if ret != 1:
+ print "Error reading to root"
+ sys.exit(1)
+if reader.Name() == "doc" or reader.NodeType() == 10:
+ ret = reader.Read()
+if ret != 1:
+ print "Error reading to root"
+ sys.exit(1)
+if reader.Name() != "doc" or reader.NodeType() != 1:
+ print "test_normal: Error reading the root element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test_normal: Error reading to the entity"
+ sys.exit(1)
+if reader.Name() != "tst" or reader.NodeType() != 5:
+ print "test_normal: Error reading the entity"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test_normal: Error reading to the end of root"
+ sys.exit(1)
+if reader.Name() != "doc" or reader.NodeType() != 15:
+ print "test_normal: Error reading the end of the root element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 0:
+ print "test_normal: Error detecting the end"
+ sys.exit(1)
+
+#
+# Second test, completely substitute the entities.
+#
+f = StringIO.StringIO(docstr)
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test_noent")
+reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES, 1)
+ret = reader.Read()
+if ret != 1:
+ print "Error reading to root"
+ sys.exit(1)
+if reader.Name() == "doc" or reader.NodeType() == 10:
+ ret = reader.Read()
+if ret != 1:
+ print "Error reading to root"
+ sys.exit(1)
+if reader.Name() != "doc" or reader.NodeType() != 1:
+ print "test_noent: Error reading the root element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test_noent: Error reading to the entity content"
+ sys.exit(1)
+if reader.Name() != "p" or reader.NodeType() != 1:
+ print "test_noent: Error reading the p element from entity"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test_noent: Error reading to the text node"
+ sys.exit(1)
+if reader.NodeType() != 3 or reader.Value() != "test":
+ print "test_noent: Error reading the text node"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test_noent: Error reading to the end of p element"
+ sys.exit(1)
+if reader.Name() != "p" or reader.NodeType() != 15:
+ print "test_noent: Error reading the end of the p element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 1:
+ print "test_noent: Error reading to the end of root"
+ sys.exit(1)
+if reader.Name() != "doc" or reader.NodeType() != 15:
+ print "test_noent: Error reading the end of the root element"
+ sys.exit(1)
+ret = reader.Read()
+if ret != 0:
+ print "test_noent: Error detecting the end"
+ sys.exit(1)
+
+#
+# third test, crazy stuff about empty element in external parsed entities
+#
+s = """<!DOCTYPE struct [
+<!ENTITY simplestruct2.ent SYSTEM "simplestruct2.ent">
+]>
+<struct>&simplestruct2.ent;</struct>
+"""
+expect="""10 struct 0 0
+1 struct 0 0
+1 descr 1 1
+15 struct 0 0
+"""
+res=""
+simplestruct2_ent="""<descr/>"""
+
+def myResolver(URL, ID, ctxt):
+ if URL == "simplestruct2.ent":
+ return(StringIO.StringIO(simplestruct2_ent))
+ return None
+
+libxml2.setEntityLoader(myResolver)
+
+input = libxml2.inputBuffer(StringIO.StringIO(s))
+reader = input.newTextReader("test3")
+reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)
+while reader.Read() == 1:
+ res = res + "%s %s %d %d\n" % (reader.NodeType(),reader.Name(),
+ reader.Depth(),reader.IsEmptyElement())
+
+if res != expect:
+ print "test3 failed: unexpected output"
+ print res
+ sys.exit(1)
+
+#
+# cleanup
+#
+del f
+del input
+del reader
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/reader4.py b/python/tests/reader4.py
new file mode 100755
index 0000000..0824929
--- /dev/null
+++ b/python/tests/reader4.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python -u
+#
+# this tests the basic APIs of the XmlTextReader interface
+#
+import libxml2
+import StringIO
+import sys
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+def tst_reader(s):
+ f = StringIO.StringIO(s)
+ input = libxml2.inputBuffer(f)
+ reader = input.newTextReader("tst")
+ res = ""
+ while reader.Read():
+ res=res + "%s (%s) [%s] %d\n" % (reader.NodeType(),reader.Name(),
+ reader.Value(), reader.IsEmptyElement())
+ if reader.NodeType() == 1: # Element
+ while reader.MoveToNextAttribute():
+ res = res + "-- %s (%s) [%s]\n" % (reader.NodeType(),
+ reader.Name(),reader.Value())
+ return res
+
+expect="""1 (test) [None] 0
+1 (b) [None] 1
+1 (c) [None] 1
+15 (test) [None] 0
+"""
+
+res = tst_reader("""<test><b/><c/></test>""")
+
+if res != expect:
+ print "Did not get the expected error message:"
+ print res
+ sys.exit(1)
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/reader5.py b/python/tests/reader5.py
new file mode 100755
index 0000000..fcbad61
--- /dev/null
+++ b/python/tests/reader5.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python -u
+#
+# this tests the Expand() API of the xmlTextReader interface
+# this extract the Dragon bibliography entries from the XML specification
+#
+import libxml2
+import StringIO
+import sys
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+expect="""<bibl id="Aho" key="Aho/Ullman">Aho, Alfred V.,
+Ravi Sethi, and Jeffrey D. Ullman.
+<emph>Compilers: Principles, Techniques, and Tools</emph>.
+Reading: Addison-Wesley, 1986, rpt. corr. 1988.</bibl>"""
+
+f = open('../../test/valid/REC-xml-19980210.xml')
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("REC")
+res=""
+while reader.Read():
+ while reader.Name() == 'bibl':
+ node = reader.Expand() # expand the subtree
+ if node.xpathEval("@id = 'Aho'"): # use XPath on it
+ res = res + node.serialize()
+ if reader.Next() != 1: # skip the subtree
+ break;
+
+if res != expect:
+ print "Error: didn't get the expected output"
+ print "got '%s'" % (res)
+ print "expected '%s'" % (expect)
+
+
+#
+# cleanup
+#
+del input
+del reader
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/reader6.py b/python/tests/reader6.py
new file mode 100755
index 0000000..7a34601
--- /dev/null
+++ b/python/tests/reader6.py
@@ -0,0 +1,123 @@
+#!/usr/bin/python -u
+#
+# this tests the entities substitutions with the XmlTextReader interface
+#
+import sys
+import StringIO
+import libxml2
+
+schema="""<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <oneOrMore>
+ <element name="label">
+ <text/>
+ </element>
+ <optional>
+ <element name="opt">
+ <empty/>
+ </element>
+ </optional>
+ <element name="item">
+ <data type="byte"/>
+ </element>
+ </oneOrMore>
+</element>
+"""
+# Memory debug specific
+libxml2.debugMemory(1)
+
+#
+# Parse the Relax NG Schemas
+#
+rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
+rngs = rngp.relaxNGParse()
+del rngp
+
+#
+# Parse and validate the correct document
+#
+docstr="""<foo>
+<label>some text</label>
+<item>100</item>
+</foo>"""
+
+f = StringIO.StringIO(docstr)
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("correct")
+reader.RelaxNGSetSchema(rngs)
+ret = reader.Read()
+while ret == 1:
+ ret = reader.Read()
+
+if ret != 0:
+ print "Error parsing the document"
+ sys.exit(1)
+
+if reader.IsValid() != 1:
+ print "Document failed to validate"
+ sys.exit(1)
+
+#
+# Parse and validate the incorrect document
+#
+docstr="""<foo>
+<label>some text</label>
+<item>1000</item>
+</foo>"""
+
+err=""
+# RNG errors are not as good as before , TODO
+#expect="""RNG validity error: file error line 3 element text
+#Type byte doesn't allow value '1000'
+#RNG validity error: file error line 3 element text
+#Error validating datatype byte
+#RNG validity error: file error line 3 element text
+#Element item failed to validate content
+#"""
+expect="""Type byte doesn't allow value '1000'
+Error validating datatype byte
+Element item failed to validate content
+"""
+
+def callback(ctx, str):
+ global err
+ err = err + "%s" % (str)
+libxml2.registerErrorHandler(callback, "")
+
+f = StringIO.StringIO(docstr)
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("error")
+reader.RelaxNGSetSchema(rngs)
+ret = reader.Read()
+while ret == 1:
+ ret = reader.Read()
+
+if ret != 0:
+ print "Error parsing the document"
+ sys.exit(1)
+
+if reader.IsValid() != 0:
+ print "Document failed to detect the validation error"
+ sys.exit(1)
+
+if err != expect:
+ print "Did not get the expected error message:"
+ print err
+ sys.exit(1)
+
+#
+# cleanup
+#
+del f
+del input
+del reader
+del rngs
+libxml2.relaxNGCleanupTypes()
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/reader7.py b/python/tests/reader7.py
new file mode 100755
index 0000000..35a426f
--- /dev/null
+++ b/python/tests/reader7.py
@@ -0,0 +1,102 @@
+#!/usr/bin/python -u
+#
+# this tests the entities substitutions with the XmlTextReader interface
+#
+import sys
+import StringIO
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+result = ""
+def processNode(reader):
+ global result
+
+ result = result + "%d %d %s %d\n" % (reader.Depth(), reader.NodeType(),
+ reader.Name(), reader.IsEmptyElement())
+
+#
+# Parse a document testing the readerForxxx API
+#
+docstr="""<foo>
+<label>some text</label>
+<item>100</item>
+</foo>"""
+expect="""0 1 foo 0
+1 14 #text 0
+1 1 label 0
+2 3 #text 0
+1 15 label 0
+1 14 #text 0
+1 1 item 0
+2 3 #text 0
+1 15 item 0
+1 14 #text 0
+0 15 foo 0
+"""
+result = ""
+
+reader = libxml2.readerForDoc(docstr, "test1", None, 0)
+ret = reader.Read()
+while ret == 1:
+ processNode(reader)
+ ret = reader.Read()
+
+if ret != 0:
+ print "Error parsing the document test1"
+ sys.exit(1)
+
+if result != expect:
+ print "Unexpected result for test1"
+ print result
+ sys.exit(1)
+
+#
+# Reuse the reader for another document testing the ReaderNewxxx API
+#
+docstr="""<foo>
+<label>some text</label>
+<item>1000</item>
+</foo>"""
+expect="""0 1 foo 0
+1 14 #text 0
+1 1 label 0
+2 3 #text 0
+1 15 label 0
+1 14 #text 0
+1 1 item 0
+2 3 #text 0
+1 15 item 0
+1 14 #text 0
+0 15 foo 0
+"""
+result = ""
+
+reader.NewDoc(docstr, "test2", None, 0)
+ret = reader.Read()
+while ret == 1:
+ processNode(reader)
+ ret = reader.Read()
+
+if ret != 0:
+ print "Error parsing the document test2"
+ sys.exit(1)
+
+if result != expect:
+ print "Unexpected result for test2"
+ print result
+ sys.exit(1)
+
+#
+# cleanup
+#
+del reader
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/readererr.py b/python/tests/readererr.py
new file mode 100644
index 0000000..ab8eb18
--- /dev/null
+++ b/python/tests/readererr.py
@@ -0,0 +1,51 @@
+#!/usr/bin/python -u
+#
+# this tests the basic APIs of the XmlTextReader interface
+#
+import libxml2
+import StringIO
+import sys
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+expect="""--> (3) test1:1:xmlns: URI foo is not absolute
+--> (4) test1:1:Opening and ending tag mismatch: c line 0 and a
+"""
+err=""
+def myErrorHandler(arg,msg,severity,locator):
+ global err
+ err = err + "%s (%d) %s:%d:%s" % (arg,severity,locator.BaseURI(),locator.LineNumber(),msg)
+
+f = StringIO.StringIO("""<a xmlns="foo"><b b1="b1"/><c>content of c</a>""")
+input = libxml2.inputBuffer(f)
+reader = input.newTextReader("test1")
+reader.SetErrorHandler(myErrorHandler,"-->")
+while reader.Read() == 1:
+ pass
+
+if err != expect:
+ print "error"
+ print "received %s" %(err)
+ print "expected %s" %(expect)
+ sys.exit(1)
+
+reader.SetErrorHandler(None,None)
+if reader.GetErrorHandler() != (None,None):
+ print "GetErrorHandler failed"
+ sys.exit(1)
+
+#
+# cleanup for memory allocation counting
+#
+del f
+del input
+del reader
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/regexp.py b/python/tests/regexp.py
new file mode 100644
index 0000000..4c05502
--- /dev/null
+++ b/python/tests/regexp.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python -u
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+re = libxml2.regexpCompile("a|b")
+if re.regexpExec("a") != 1:
+ print "error checking 'a'"
+ sys.exit(1)
+if re.regexpExec("b") != 1:
+ print "error checking 'b'"
+ sys.exit(1)
+if re.regexpExec("ab") != 0:
+ print "error checking 'ab'"
+ sys.exit(1)
+if re.regexpExec("") != 0:
+ print "error checking 'ab'"
+ sys.exit(1)
+if re.regexpIsDeterminist() != 1:
+ print "error checking determinism"
+ sys.exit(1)
+del re
+
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/relaxng.py b/python/tests/relaxng.py
new file mode 100755
index 0000000..2c83635
--- /dev/null
+++ b/python/tests/relaxng.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python -u
+import libxml2
+import sys
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+schema="""<?xml version="1.0"?>
+<element name="foo"
+ xmlns="http://relaxng.org/ns/structure/1.0"
+ xmlns:a="http://relaxng.org/ns/annotation/1.0"
+ xmlns:ex1="http://www.example.com/n1"
+ xmlns:ex2="http://www.example.com/n2">
+ <a:documentation>A foo element.</a:documentation>
+ <element name="ex1:bar1">
+ <empty/>
+ </element>
+ <element name="ex2:bar2">
+ <empty/>
+ </element>
+</element>
+"""
+instance="""<?xml version="1.0"?>
+<foo><pre1:bar1 xmlns:pre1="http://www.example.com/n1"/><pre2:bar2 xmlns:pre2="http://www.example.com/n2"/></foo>"""
+
+rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
+rngs = rngp.relaxNGParse()
+ctxt = rngs.relaxNGNewValidCtxt()
+doc = libxml2.parseDoc(instance)
+ret = doc.relaxNGValidateDoc(ctxt)
+if ret != 0:
+ print "error doing RelaxNG validation"
+ sys.exit(1)
+
+doc.freeDoc()
+del rngp
+del rngs
+del ctxt
+libxml2.relaxNGCleanupTypes()
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
+
diff --git a/python/tests/resolver.py b/python/tests/resolver.py
new file mode 100755
index 0000000..9f4a478
--- /dev/null
+++ b/python/tests/resolver.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+import StringIO
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+def myResolver(URL, ID, ctxt):
+ return(StringIO.StringIO("<foo/>"))
+
+libxml2.setEntityLoader(myResolver)
+
+doc = libxml2.parseFile("doesnotexist.xml")
+root = doc.children
+if root.name != "foo":
+ print "root element name error"
+ sys.exit(1)
+doc.freeDoc()
+
+i = 0
+while i < 5000:
+ doc = libxml2.parseFile("doesnotexist.xml")
+ root = doc.children
+ if root.name != "foo":
+ print "root element name error"
+ sys.exit(1)
+ doc.freeDoc()
+ i = i + 1
+
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
+
diff --git a/python/tests/serialize.py b/python/tests/serialize.py
new file mode 100755
index 0000000..5b969a9
--- /dev/null
+++ b/python/tests/serialize.py
@@ -0,0 +1,150 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+#
+# Testing XML document serialization
+#
+doc = libxml2.parseDoc("""<root><foo>hello</foo></root>""")
+str = doc.serialize()
+if str != """<?xml version="1.0"?>
+<root><foo>hello</foo></root>
+""":
+ print "error serializing XML document 1"
+ sys.exit(1)
+str = doc.serialize("iso-8859-1")
+if str != """<?xml version="1.0" encoding="iso-8859-1"?>
+<root><foo>hello</foo></root>
+""":
+ print "error serializing XML document 2"
+ sys.exit(1)
+str = doc.serialize(format=1)
+if str != """<?xml version="1.0"?>
+<root>
+ <foo>hello</foo>
+</root>
+""":
+ print "error serializing XML document 3"
+ sys.exit(1)
+str = doc.serialize("iso-8859-1", 1)
+if str != """<?xml version="1.0" encoding="iso-8859-1"?>
+<root>
+ <foo>hello</foo>
+</root>
+""":
+ print "error serializing XML document 4"
+ sys.exit(1)
+
+#
+# Test serializing a subnode
+#
+root = doc.getRootElement()
+str = root.serialize()
+if str != """<root><foo>hello</foo></root>""":
+ print "error serializing XML root 1"
+ sys.exit(1)
+str = root.serialize("iso-8859-1")
+if str != """<root><foo>hello</foo></root>""":
+ print "error serializing XML root 2"
+ sys.exit(1)
+str = root.serialize(format=1)
+if str != """<root>
+ <foo>hello</foo>
+</root>""":
+ print "error serializing XML root 3"
+ sys.exit(1)
+str = root.serialize("iso-8859-1", 1)
+if str != """<root>
+ <foo>hello</foo>
+</root>""":
+ print "error serializing XML root 4"
+ sys.exit(1)
+doc.freeDoc()
+
+#
+# Testing HTML document serialization
+#
+doc = libxml2.htmlParseDoc("""<html><head><title>Hello</title><body><p>hello</body></html>""", None)
+str = doc.serialize()
+if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html><head><title>Hello</title></head><body><p>hello</p></body></html>
+""":
+ print "error serializing HTML document 1"
+ sys.exit(1)
+str = doc.serialize("ISO-8859-1")
+if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Hello</title></head><body><p>hello</p></body></html>
+""":
+ print "error serializing HTML document 2"
+ sys.exit(1)
+str = doc.serialize(format=1)
+if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Hello</title>
+</head>
+<body><p>hello</p></body>
+</html>
+""":
+ print "error serializing HTML document 3"
+ sys.exit(1)
+str = doc.serialize("iso-8859-1", 1)
+if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Hello</title>
+</head>
+<body><p>hello</p></body>
+</html>
+""":
+ print "error serializing HTML document 4"
+ sys.exit(1)
+
+#
+# Test serializing a subnode
+#
+doc.htmlSetMetaEncoding(None)
+root = doc.getRootElement()
+str = root.serialize()
+if str != """<html><head><title>Hello</title></head><body><p>hello</p></body></html>""":
+ print "error serializing HTML root 1"
+ sys.exit(1)
+str = root.serialize("ISO-8859-1")
+if str != """<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Hello</title></head><body><p>hello</p></body></html>""":
+ print "error serializing HTML root 2"
+ sys.exit(1)
+str = root.serialize(format=1)
+if str != """<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Hello</title>
+</head>
+<body><p>hello</p></body>
+</html>""":
+ print "error serializing HTML root 3"
+ sys.exit(1)
+str = root.serialize("iso-8859-1", 1)
+if str != """<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Hello</title>
+</head>
+<body><p>hello</p></body>
+</html>""":
+ print "error serializing HTML root 4"
+ sys.exit(1)
+
+doc.freeDoc()
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/thread2.py b/python/tests/thread2.py
new file mode 100755
index 0000000..c8ac5ed
--- /dev/null
+++ b/python/tests/thread2.py
@@ -0,0 +1,96 @@
+#!/usr/bin/python -u
+import string, sys, time
+import thread
+from threading import Thread, Lock
+
+import libxml2
+
+THREADS_COUNT = 15
+
+failed = 0
+
+class ErrorHandler:
+
+ def __init__(self):
+ self.errors = []
+ self.lock = Lock()
+
+ def handler(self,ctx,str):
+ self.lock.acquire()
+ self.errors.append(str)
+ self.lock.release()
+
+def getLineNumbersDefault():
+ old = libxml2.lineNumbersDefault(0)
+ libxml2.lineNumbersDefault(old)
+ return old
+
+def test(expectedLineNumbersDefault):
+ time.sleep(1)
+ global failed
+ # check a per thread-global
+ if expectedLineNumbersDefault != getLineNumbersDefault():
+ failed = 1
+ print "FAILED to obtain correct value for " \
+ "lineNumbersDefault in thread %d" % thread.get_ident()
+ # check ther global error handler
+ # (which is NOT per-thread in the python bindings)
+ try:
+ doc = libxml2.parseFile("bad.xml")
+ except:
+ pass
+ else:
+ assert "failed"
+
+# global error handler
+eh = ErrorHandler()
+libxml2.registerErrorHandler(eh.handler,"")
+
+# set on the main thread only
+libxml2.lineNumbersDefault(1)
+test(1)
+ec = len(eh.errors)
+if ec == 0:
+ print "FAILED: should have obtained errors"
+ sys.exit(1)
+
+ts = []
+for i in range(THREADS_COUNT):
+ # expect 0 for lineNumbersDefault because
+ # the new value has been set on the main thread only
+ ts.append(Thread(target=test,args=(0,)))
+for t in ts:
+ t.start()
+for t in ts:
+ t.join()
+
+if len(eh.errors) != ec+THREADS_COUNT*ec:
+ print "FAILED: did not obtain the correct number of errors"
+ sys.exit(1)
+
+# set lineNumbersDefault for future new threads
+libxml2.thrDefLineNumbersDefaultValue(1)
+ts = []
+for i in range(THREADS_COUNT):
+ # expect 1 for lineNumbersDefault
+ ts.append(Thread(target=test,args=(1,)))
+for t in ts:
+ t.start()
+for t in ts:
+ t.join()
+
+if len(eh.errors) != ec+THREADS_COUNT*ec*2:
+ print "FAILED: did not obtain the correct number of errors"
+ sys.exit(1)
+
+if failed:
+ print "FAILED"
+ sys.exit(1)
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/tst.py b/python/tests/tst.py
new file mode 100755
index 0000000..9540cda
--- /dev/null
+++ b/python/tests/tst.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+doc = libxml2.parseFile("tst.xml")
+if doc.name != "tst.xml":
+ print "doc.name failed"
+ sys.exit(1)
+root = doc.children
+if root.name != "doc":
+ print "root.name failed"
+ sys.exit(1)
+child = root.children
+if child.name != "foo":
+ print "child.name failed"
+ sys.exit(1)
+doc.freeDoc()
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/tst.xml b/python/tests/tst.xml
new file mode 100644
index 0000000..751d46d
--- /dev/null
+++ b/python/tests/tst.xml
@@ -0,0 +1 @@
+<doc><foo>bar</foo></doc>
diff --git a/python/tests/tstLastError.py b/python/tests/tstLastError.py
new file mode 100755
index 0000000..83e98b8
--- /dev/null
+++ b/python/tests/tstLastError.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python -u
+import sys, unittest
+
+import libxml2
+
+class TestCase(unittest.TestCase):
+
+ def setUp(self):
+ libxml2.debugMemory(1)
+
+ def tearDown(self):
+ libxml2.cleanupParser()
+ if libxml2.debugMemory(1) != 0:
+ libxml2.dumpMemory()
+ self.fail("Memory leak %d bytes" % (libxml2.debugMemory(1),))
+
+ def failUnlessXmlError(self,f,args,exc,domain,code,message,level,file,line):
+ """Run function f, with arguments args and expect an exception exc;
+ when the exception is raised, check the libxml2.lastError for
+ expected values."""
+ # disable the default error handler
+ libxml2.registerErrorHandler(None,None)
+ try:
+ f(*args)
+ except exc:
+ e = libxml2.lastError()
+ if e is None:
+ self.fail("lastError not set")
+ if 0:
+ print "domain = ",e.domain()
+ print "code = ",e.code()
+ print "message =",repr(e.message())
+ print "level =",e.level()
+ print "file =",e.file()
+ print "line =",e.line()
+ print
+ self.failUnlessEqual(domain,e.domain())
+ self.failUnlessEqual(code,e.code())
+ self.failUnlessEqual(message,e.message())
+ self.failUnlessEqual(level,e.level())
+ self.failUnlessEqual(file,e.file())
+ self.failUnlessEqual(line,e.line())
+ else:
+ self.fail("exception %s should have been raised" % exc)
+
+ def test1(self):
+ """Test readFile with a file that does not exist"""
+ self.failUnlessXmlError(libxml2.readFile,
+ ("dummy.xml",None,0),
+ libxml2.treeError,
+ domain=libxml2.XML_FROM_IO,
+ code=libxml2.XML_IO_LOAD_ERROR,
+ message='failed to load external entity "dummy.xml"\n',
+ level=libxml2.XML_ERR_WARNING,
+ file=None,
+ line=0)
+
+ def test2(self):
+ """Test a well-formedness error: we get the last error only"""
+ s = "<x>\n<a>\n</x>"
+ self.failUnlessXmlError(libxml2.readMemory,
+ (s,len(s),"dummy.xml",None,0),
+ libxml2.treeError,
+ domain=libxml2.XML_FROM_PARSER,
+ code=libxml2.XML_ERR_TAG_NOT_FINISHED,
+ message='Premature end of data in tag x line 1\n',
+ level=libxml2.XML_ERR_FATAL,
+ file='dummy.xml',
+ line=3)
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/python/tests/tstURI.py b/python/tests/tstURI.py
new file mode 100755
index 0000000..58b7ad8
--- /dev/null
+++ b/python/tests/tstURI.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+uri = libxml2.parseURI("http://example.org:8088/foo/bar?query=simple#fragid")
+if uri.scheme() != 'http':
+ print "Error parsing URI: wrong scheme"
+ sys.exit(1)
+if uri.server() != 'example.org':
+ print "Error parsing URI: wrong server"
+ sys.exit(1)
+if uri.port() != 8088:
+ print "Error parsing URI: wrong port"
+ sys.exit(1)
+if uri.path() != '/foo/bar':
+ print "Error parsing URI: wrong path"
+ sys.exit(1)
+if uri.query() != 'query=simple':
+ print "Error parsing URI: wrong query"
+ sys.exit(1)
+if uri.fragment() != 'fragid':
+ print "Error parsing URI: wrong query"
+ sys.exit(1)
+uri.setScheme("https")
+uri.setPort(223)
+uri.setFragment(None)
+result=uri.saveUri()
+if result != "https://example.org:223/foo/bar?query=simple":
+ print "Error modifying or saving the URI"
+uri = None
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/tstxpath.py b/python/tests/tstxpath.py
new file mode 100755
index 0000000..e47c34d
--- /dev/null
+++ b/python/tests/tstxpath.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+#memory debug specific
+libxml2.debugMemory(1)
+
+called = ""
+
+def foo(ctx, x):
+ global called
+
+ #
+ # test that access to the XPath evaluation contexts
+ #
+ pctxt = libxml2.xpathParserContext(_obj=ctx)
+ ctxt = pctxt.context()
+ called = ctxt.function()
+ return x + 1
+
+def bar(ctxt, x):
+ return "%d" % (x + 2)
+
+doc = libxml2.parseFile("tst.xml")
+ctxt = doc.xpathNewContext()
+res = ctxt.xpathEval("//*")
+if len(res) != 2:
+ print "xpath query: wrong node set size"
+ sys.exit(1)
+if res[0].name != "doc" or res[1].name != "foo":
+ print "xpath query: wrong node set value"
+ sys.exit(1)
+libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
+libxml2.registerXPathFunction(ctxt._o, "bar", None, bar)
+i = 10000
+while i > 0:
+ res = ctxt.xpathEval("foo(1)")
+ if res != 2:
+ print "xpath extension failure"
+ sys.exit(1)
+ i = i - 1
+i = 10000
+while i > 0:
+ res = ctxt.xpathEval("bar(1)")
+ if res != "3":
+ print "xpath extension failure got %s expecting '3'"
+ sys.exit(1)
+ i = i - 1
+doc.freeDoc()
+ctxt.xpathFreeContext()
+
+if called != "foo":
+ print "xpath function: failed to access the context"
+ print "xpath function: %s" % (called)
+ sys.exit(1)
+
+#memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/valid.xml b/python/tests/valid.xml
new file mode 100644
index 0000000..8a7f679
--- /dev/null
+++ b/python/tests/valid.xml
@@ -0,0 +1,4 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/python/tests/validate.py b/python/tests/validate.py
new file mode 100755
index 0000000..0dc86f4
--- /dev/null
+++ b/python/tests/validate.py
@@ -0,0 +1,82 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+ctxt = libxml2.createFileParserCtxt("valid.xml")
+ctxt.validate(1)
+ctxt.parseDocument()
+doc = ctxt.doc()
+valid = ctxt.isValid()
+
+if doc.name != "valid.xml":
+ print "doc.name failed"
+ sys.exit(1)
+root = doc.children
+if root.name != "doc":
+ print "root.name failed"
+ sys.exit(1)
+if valid != 1:
+ print "validity chec failed"
+ sys.exit(1)
+doc.freeDoc()
+
+i = 1000
+while i > 0:
+ ctxt = libxml2.createFileParserCtxt("valid.xml")
+ ctxt.validate(1)
+ ctxt.parseDocument()
+ doc = ctxt.doc()
+ valid = ctxt.isValid()
+ doc.freeDoc()
+ if valid != 1:
+ print "validity check failed"
+ sys.exit(1)
+ i = i - 1
+
+#desactivate error messages from the validation
+def noerr(ctx, str):
+ pass
+
+libxml2.registerErrorHandler(noerr, None)
+
+ctxt = libxml2.createFileParserCtxt("invalid.xml")
+ctxt.validate(1)
+ctxt.parseDocument()
+doc = ctxt.doc()
+valid = ctxt.isValid()
+if doc.name != "invalid.xml":
+ print "doc.name failed"
+ sys.exit(1)
+root = doc.children
+if root.name != "doc":
+ print "root.name failed"
+ sys.exit(1)
+if valid != 0:
+ print "validity chec failed"
+ sys.exit(1)
+doc.freeDoc()
+
+i = 1000
+while i > 0:
+ ctxt = libxml2.createFileParserCtxt("invalid.xml")
+ ctxt.validate(1)
+ ctxt.parseDocument()
+ doc = ctxt.doc()
+ valid = ctxt.isValid()
+ doc.freeDoc()
+ if valid != 0:
+ print "validity check failed"
+ sys.exit(1)
+ i = i - 1
+del ctxt
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/walker.py b/python/tests/walker.py
new file mode 100755
index 0000000..3b5a62a
--- /dev/null
+++ b/python/tests/walker.py
@@ -0,0 +1,145 @@
+#!/usr/bin/python -u
+#
+# this tests the entities substitutions with the XmlTextReader interface
+#
+import sys
+import StringIO
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+result = ""
+def processNode(reader):
+ global result
+
+ result = result + "%d %d %s %d\n" % (reader.Depth(), reader.NodeType(),
+ reader.Name(), reader.IsEmptyElement())
+
+#
+# Parse a document testing the readerForxxx API
+#
+docstr="""<foo>
+<label>some text</label>
+<item>100</item>
+</foo>"""
+expect="""0 1 foo 0
+1 14 #text 0
+1 1 label 0
+2 3 #text 0
+1 15 label 0
+1 14 #text 0
+1 1 item 0
+2 3 #text 0
+1 15 item 0
+1 14 #text 0
+0 15 foo 0
+"""
+result = ""
+
+doc = libxml2.parseDoc(docstr)
+reader = doc.readerWalker();
+ret = reader.Read()
+while ret == 1:
+ processNode(reader)
+ ret = reader.Read()
+
+if ret != 0:
+ print "Error parsing the document test1"
+ sys.exit(1)
+
+if result != expect:
+ print "Unexpected result for test1"
+ print result
+ sys.exit(1)
+
+doc.freeDoc()
+
+#
+# Reuse the reader for another document testing the ReaderNewWalker API
+#
+docstr="""<foo>
+<label>some text</label>
+<item>1000</item>
+</foo>"""
+expect="""0 1 foo 0
+1 14 #text 0
+1 1 label 0
+2 3 #text 0
+1 15 label 0
+1 14 #text 0
+1 1 item 0
+2 3 #text 0
+1 15 item 0
+1 14 #text 0
+0 15 foo 0
+"""
+result = ""
+
+doc = libxml2.parseDoc(docstr)
+reader.NewWalker(doc)
+
+ret = reader.Read()
+while ret == 1:
+ processNode(reader)
+ ret = reader.Read()
+
+if ret != 0:
+ print "Error parsing the document test2"
+ sys.exit(1)
+
+if result != expect:
+ print "Unexpected result for test2"
+ print result
+ sys.exit(1)
+
+doc.freeDoc()
+
+#
+# Reuse the reader for another document testing the ReaderNewxxx API
+#
+docstr="""<foo>
+<label>some text</label>
+<item>1000</item>
+</foo>"""
+expect="""0 1 foo 0
+1 14 #text 0
+1 1 label 0
+2 3 #text 0
+1 15 label 0
+1 14 #text 0
+1 1 item 0
+2 3 #text 0
+1 15 item 0
+1 14 #text 0
+0 15 foo 0
+"""
+result = ""
+
+reader.NewDoc(docstr, "test3", None, 0)
+ret = reader.Read()
+while ret == 1:
+ processNode(reader)
+ ret = reader.Read()
+
+if ret != 0:
+ print "Error parsing the document test3"
+ sys.exit(1)
+
+if result != expect:
+ print "Unexpected result for test3"
+ print result
+ sys.exit(1)
+
+#
+# cleanup
+#
+del reader
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/xpath.py b/python/tests/xpath.py
new file mode 100755
index 0000000..2e036e1
--- /dev/null
+++ b/python/tests/xpath.py
@@ -0,0 +1,51 @@
+#!/usr/bin/python -u
+#
+# this test exercise the XPath basic engine, parser, etc, and
+# allows to detect memory leaks
+#
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+doc = libxml2.parseFile("tst.xml")
+if doc.name != "tst.xml":
+ print "doc.name error"
+ sys.exit(1);
+
+ctxt = doc.xpathNewContext()
+res = ctxt.xpathEval("//*")
+if len(res) != 2:
+ print "xpath query: wrong node set size"
+ sys.exit(1)
+if res[0].name != "doc" or res[1].name != "foo":
+ print "xpath query: wrong node set value"
+ sys.exit(1)
+ctxt.setContextNode(res[0])
+res = ctxt.xpathEval("foo")
+if len(res) != 1:
+ print "xpath query: wrong node set size"
+ sys.exit(1)
+if res[0].name != "foo":
+ print "xpath query: wrong node set value"
+ sys.exit(1)
+doc.freeDoc()
+ctxt.xpathFreeContext()
+i = 1000
+while i > 0:
+ doc = libxml2.parseFile("tst.xml")
+ ctxt = doc.xpathNewContext()
+ res = ctxt.xpathEval("//*")
+ doc.freeDoc()
+ ctxt.xpathFreeContext()
+ i = i -1
+del ctxt
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/xpathext.py b/python/tests/xpathext.py
new file mode 100755
index 0000000..4769626
--- /dev/null
+++ b/python/tests/xpathext.py
@@ -0,0 +1,49 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+def foo(ctx, x):
+ return x + 1
+
+def bar(ctx, x):
+ return "%d" % (x + 2)
+
+doc = libxml2.parseFile("tst.xml")
+ctxt = doc.xpathNewContext()
+res = ctxt.xpathEval("//*")
+if len(res) != 2:
+ print "xpath query: wrong node set size"
+ sys.exit(1)
+if res[0].name != "doc" or res[1].name != "foo":
+ print "xpath query: wrong node set value"
+ sys.exit(1)
+
+libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
+libxml2.registerXPathFunction(ctxt._o, "bar", None, bar)
+i = 10000
+while i > 0:
+ res = ctxt.xpathEval("foo(1)")
+ if res != 2:
+ print "xpath extension failure"
+ sys.exit(1)
+ i = i - 1
+i = 10000
+while i > 0:
+ res = ctxt.xpathEval("bar(1)")
+ if res != "3":
+ print "xpath extension failure got %s expecting '3'"
+ sys.exit(1)
+ i = i - 1
+doc.freeDoc()
+ctxt.xpathFreeContext()
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/tests/xpathret.py b/python/tests/xpathret.py
new file mode 100755
index 0000000..2b5576a
--- /dev/null
+++ b/python/tests/xpathret.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python -u
+import sys
+import libxml2
+
+#memory debug specific
+libxml2.debugMemory(1)
+
+#
+# A document hosting the nodes returned from the extension function
+#
+mydoc = libxml2.newDoc("1.0")
+
+def foo(ctx, str):
+ global mydoc
+
+ #
+ # test returning a node set works as expected
+ #
+ parent = mydoc.newDocNode(None, 'p', None)
+ mydoc.addChild(parent)
+ node = mydoc.newDocText(str)
+ parent.addChild(node)
+ return [parent]
+
+doc = libxml2.parseFile("tst.xml")
+ctxt = doc.xpathNewContext()
+libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
+res = ctxt.xpathEval("foo('hello')")
+if type(res) != type([]):
+ print "Failed to return a nodeset"
+ sys.exit(1)
+if len(res) != 1:
+ print "Unexpected nodeset size"
+ sys.exit(1)
+node = res[0]
+if node.name != 'p':
+ print "Unexpected nodeset element result"
+ sys.exit(1)
+node = node.children
+if node.type != 'text':
+ print "Unexpected nodeset element children type"
+ sys.exit(1)
+if node.content != 'hello':
+ print "Unexpected nodeset element children content"
+ sys.exit(1)
+
+doc.freeDoc()
+mydoc.freeDoc()
+ctxt.xpathFreeContext()
+
+#memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+ print "OK"
+else:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
diff --git a/python/types.c b/python/types.c
new file mode 100644
index 0000000..42279d0
--- /dev/null
+++ b/python/types.c
@@ -0,0 +1,661 @@
+/*
+ * types.c: converter functions between the internal representation
+ * and the Python objects
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+#include "libxml_wrap.h"
+
+PyObject *
+libxml_intWrap(int val)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_intWrap: val = %d\n", val);
+#endif
+ ret = PyInt_FromLong((long) val);
+ return (ret);
+}
+
+PyObject *
+libxml_longWrap(long val)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_longWrap: val = %ld\n", val);
+#endif
+ ret = PyInt_FromLong(val);
+ return (ret);
+}
+
+PyObject *
+libxml_doubleWrap(double val)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_doubleWrap: val = %f\n", val);
+#endif
+ ret = PyFloat_FromDouble((double) val);
+ return (ret);
+}
+
+PyObject *
+libxml_charPtrWrap(char *str)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlcharPtrWrap: str = %s\n", str);
+#endif
+ if (str == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ /* TODO: look at deallocation */
+ ret = PyString_FromString(str);
+ xmlFree(str);
+ return (ret);
+}
+
+PyObject *
+libxml_charPtrConstWrap(const char *str)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlcharPtrWrap: str = %s\n", str);
+#endif
+ if (str == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ /* TODO: look at deallocation */
+ ret = PyString_FromString(str);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlCharPtrWrap(xmlChar * str)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlCharPtrWrap: str = %s\n", str);
+#endif
+ if (str == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ /* TODO: look at deallocation */
+ ret = PyString_FromString((char *) str);
+ xmlFree(str);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlCharPtrConstWrap(const xmlChar * str)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlCharPtrWrap: str = %s\n", str);
+#endif
+ if (str == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ /* TODO: look at deallocation */
+ ret = PyString_FromString((char *) str);
+ return (ret);
+}
+
+PyObject *
+libxml_constcharPtrWrap(const char *str)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlcharPtrWrap: str = %s\n", str);
+#endif
+ if (str == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ /* TODO: look at deallocation */
+ ret = PyString_FromString(str);
+ return (ret);
+}
+
+PyObject *
+libxml_constxmlCharPtrWrap(const xmlChar * str)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlCharPtrWrap: str = %s\n", str);
+#endif
+ if (str == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ /* TODO: look at deallocation */
+ ret = PyString_FromString((char *) str);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlDocPtrWrap(xmlDocPtr doc)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlDocPtrWrap: doc = %p\n", doc);
+#endif
+ if (doc == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ /* TODO: look at deallocation */
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) doc, (char *) "xmlDocPtr",
+ NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlNodePtrWrap(xmlNodePtr node)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlNodePtrWrap: node = %p\n", node);
+#endif
+ if (node == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "xmlNodePtr",
+ NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlURIPtrWrap(xmlURIPtr uri)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlURIPtrWrap: uri = %p\n", uri);
+#endif
+ if (uri == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) uri, (char *) "xmlURIPtr",
+ NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlNsPtrWrap(xmlNsPtr ns)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlNsPtrWrap: node = %p\n", ns);
+#endif
+ if (ns == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) ns, (char *) "xmlNsPtr",
+ NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlAttrPtrWrap(xmlAttrPtr attr)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlAttrNodePtrWrap: attr = %p\n", attr);
+#endif
+ if (attr == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) attr, (char *) "xmlAttrPtr",
+ NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlAttributePtrWrap(xmlAttributePtr attr)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlAttributePtrWrap: attr = %p\n", attr);
+#endif
+ if (attr == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) attr,
+ (char *) "xmlAttributePtr", NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlElementPtrWrap(xmlElementPtr elem)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlElementNodePtrWrap: elem = %p\n", elem);
+#endif
+ if (elem == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) elem,
+ (char *) "xmlElementPtr", NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlXPathContextPtrWrap: ctxt = %p\n", ctxt);
+#endif
+ if (ctxt == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+ (char *) "xmlXPathContextPtr", NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlXPathParserContextPtrWrap: ctxt = %p\n", ctxt);
+#endif
+ if (ctxt == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret = PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+ (char *) "xmlXPathParserContextPtr",
+ NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlParserCtxtPtrWrap: ctxt = %p\n", ctxt);
+#endif
+ if (ctxt == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+ (char *) "xmlParserCtxtPtr", NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlXPathObjectPtrWrap: ctxt = %p\n", obj);
+#endif
+ if (obj == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ switch (obj->type) {
+ case XPATH_XSLT_TREE: {
+ if ((obj->nodesetval == NULL) ||
+ (obj->nodesetval->nodeNr == 0) ||
+ (obj->nodesetval->nodeTab == NULL)) {
+ ret = PyList_New(0);
+ } else {
+ int i, len = 0;
+ xmlNodePtr node;
+
+ node = obj->nodesetval->nodeTab[0]->children;
+ while (node != NULL) {
+ len++;
+ node = node->next;
+ }
+ ret = PyList_New(len);
+ node = obj->nodesetval->nodeTab[0]->children;
+ for (i = 0;i < len;i++) {
+ PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
+ node = node->next;
+ }
+ }
+ /*
+ * Return now, do not free the object passed down
+ */
+ return (ret);
+ }
+ case XPATH_NODESET:
+ if ((obj->nodesetval == NULL)
+ || (obj->nodesetval->nodeNr == 0)) {
+ ret = PyList_New(0);
+ } else {
+ int i;
+ xmlNodePtr node;
+
+ ret = PyList_New(obj->nodesetval->nodeNr);
+ for (i = 0; i < obj->nodesetval->nodeNr; i++) {
+ node = obj->nodesetval->nodeTab[i];
+ /* TODO: try to cast directly to the proper node type */
+ PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
+ }
+ }
+ break;
+ case XPATH_BOOLEAN:
+ ret = PyInt_FromLong((long) obj->boolval);
+ break;
+ case XPATH_NUMBER:
+ ret = PyFloat_FromDouble(obj->floatval);
+ break;
+ case XPATH_STRING:
+ ret = PyString_FromString((char *) obj->stringval);
+ break;
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ default:
+ printf("Unable to convert XPath object type %d\n", obj->type);
+ Py_INCREF(Py_None);
+ ret = Py_None;
+ }
+ xmlXPathFreeObject(obj);
+ return (ret);
+}
+
+xmlXPathObjectPtr
+libxml_xmlXPathObjectPtrConvert(PyObject * obj)
+{
+ xmlXPathObjectPtr ret = NULL;
+
+#ifdef DEBUG
+ printf("libxml_xmlXPathObjectPtrConvert: obj = %p\n", obj);
+#endif
+ if (obj == NULL) {
+ return (NULL);
+ }
+ if PyFloat_Check
+ (obj) {
+ ret = xmlXPathNewFloat((double) PyFloat_AS_DOUBLE(obj));
+ } else if PyString_Check
+ (obj) {
+ xmlChar *str;
+
+ str = xmlStrndup((const xmlChar *) PyString_AS_STRING(obj),
+ PyString_GET_SIZE(obj));
+ ret = xmlXPathWrapString(str);
+ } else if PyList_Check
+ (obj) {
+ int i;
+ PyObject *node;
+ xmlNodePtr cur;
+ xmlNodeSetPtr set;
+
+ set = xmlXPathNodeSetCreate(NULL);
+
+ for (i = 0; i < PyList_Size(obj); i++) {
+ node = PyList_GetItem(obj, i);
+ if ((node == NULL) || (node->ob_type == NULL))
+ continue;
+
+ cur = NULL;
+ if (PyCObject_Check(node)) {
+ printf("Got a CObject\n");
+ cur = PyxmlNode_Get(node);
+ } else if (PyInstance_Check(node)) {
+ PyInstanceObject *inst = (PyInstanceObject *) node;
+ PyObject *name = inst->in_class->cl_name;
+
+ if PyString_Check
+ (name) {
+ char *type = PyString_AS_STRING(name);
+ PyObject *wrapper;
+
+ if (!strcmp(type, "xmlNode")) {
+ wrapper =
+ PyObject_GetAttrString(node, (char *) "_o");
+ if (wrapper != NULL) {
+ cur = PyxmlNode_Get(wrapper);
+ }
+ }
+ }
+ } else {
+ printf("Unknown object in Python return list\n");
+ }
+ if (cur != NULL) {
+ xmlXPathNodeSetAdd(set, cur);
+ }
+ }
+ ret = xmlXPathWrapNodeSet(set);
+ } else {
+ printf("Unable to convert Python Object to XPath");
+ }
+ Py_DECREF(obj);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlCatalogPtrWrap(xmlCatalogPtr catal)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlNodePtrWrap: catal = %p\n", catal);
+#endif
+ if (catal == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) catal,
+ (char *) "xmlCatalogPtr", NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlOutputBufferPtrWrap(xmlOutputBufferPtr buffer)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlOutputBufferPtrWrap: buffer = %p\n", buffer);
+#endif
+ if (buffer == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) buffer,
+ (char *) "xmlOutputBufferPtr", NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlParserInputBufferPtrWrap(xmlParserInputBufferPtr buffer)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlParserInputBufferPtrWrap: buffer = %p\n", buffer);
+#endif
+ if (buffer == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) buffer,
+ (char *) "xmlParserInputBufferPtr", NULL);
+ return (ret);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+PyObject *
+libxml_xmlRegexpPtrWrap(xmlRegexpPtr regexp)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlRegexpPtrWrap: regexp = %p\n", regexp);
+#endif
+ if (regexp == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) regexp,
+ (char *) "xmlRegexpPtr", NULL);
+ return (ret);
+}
+#endif /* LIBXML_REGEXP_ENABLED */
+
+PyObject *
+libxml_xmlTextReaderPtrWrap(xmlTextReaderPtr reader)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlTextReaderPtrWrap: reader = %p\n", reader);
+#endif
+ if (reader == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) reader,
+ (char *) "xmlTextReaderPtr", NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlTextReaderLocatorPtrWrap(xmlTextReaderLocatorPtr locator)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlTextReaderLocatorPtrWrap: locator = %p\n", locator);
+#endif
+ if (locator == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) locator,
+ (char *) "xmlTextReaderLocatorPtr", NULL);
+ return (ret);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+PyObject *
+libxml_xmlRelaxNGPtrWrap(xmlRelaxNGPtr ctxt)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlRelaxNGPtrWrap: ctxt = %p\n", ctxt);
+#endif
+ if (ctxt == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+ (char *) "xmlRelaxNGPtr", NULL);
+ return (ret);
+}
+
+PyObject *
+libxml_xmlRelaxNGParserCtxtPtrWrap(xmlRelaxNGParserCtxtPtr ctxt)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlRelaxNGParserCtxtPtrWrap: ctxt = %p\n", ctxt);
+#endif
+ if (ctxt == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+ (char *) "xmlRelaxNGParserCtxtPtr", NULL);
+ return (ret);
+}
+PyObject *
+libxml_xmlRelaxNGValidCtxtPtrWrap(xmlRelaxNGValidCtxtPtr valid)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlRelaxNGValidCtxtPtrWrap: valid = %p\n", valid);
+#endif
+ if (valid == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) valid,
+ (char *) "xmlRelaxNGValidCtxtPtr", NULL);
+ return (ret);
+}
+#endif /* LIBXML_SCHEMAS_ENABLED */
+
+PyObject *
+libxml_xmlErrorPtrWrap(xmlErrorPtr error)
+{
+ PyObject *ret;
+
+#ifdef DEBUG
+ printf("libxml_xmlErrorPtrWrap: error = %p\n", error);
+#endif
+ if (error == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret =
+ PyCObject_FromVoidPtrAndDesc((void *) error,
+ (char *) "xmlErrorPtr", NULL);
+ return (ret);
+}
diff --git a/relaxng.c b/relaxng.c
new file mode 100644
index 0000000..1fd46e9
--- /dev/null
+++ b/relaxng.c
@@ -0,0 +1,10672 @@
+/*
+ * relaxng.c : implementation of the Relax-NG handling and validity checking
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <veillard@redhat.com>
+ */
+
+/**
+ * TODO:
+ * - add support for DTD compatibility spec
+ * http://www.oasis-open.org/committees/relax-ng/compatibility-20011203.html
+ * - report better mem allocations pbms at runtime and abort immediately.
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <string.h>
+#include <stdio.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/hash.h>
+#include <libxml/uri.h>
+
+#include <libxml/relaxng.h>
+
+#include <libxml/xmlschemastypes.h>
+#include <libxml/xmlautomata.h>
+#include <libxml/xmlregexp.h>
+#include <libxml/xmlschemastypes.h>
+
+/*
+ * The Relax-NG namespace
+ */
+static const xmlChar *xmlRelaxNGNs = (const xmlChar *)
+ "http://relaxng.org/ns/structure/1.0";
+
+#define IS_RELAXNG(node, type) \
+ ((node != NULL) && (node->ns != NULL) && \
+ (xmlStrEqual(node->name, (const xmlChar *) type)) && \
+ (xmlStrEqual(node->ns->href, xmlRelaxNGNs)))
+
+
+/* #define DEBUG 1 */
+
+/* #define DEBUG_GRAMMAR 1 */
+
+/* #define DEBUG_CONTENT 1 */
+
+/* #define DEBUG_TYPE 1 */
+
+/* #define DEBUG_VALID 1 */
+
+/* #define DEBUG_INTERLEAVE 1 */
+
+/* #define DEBUG_LIST 1 */
+
+/* #define DEBUG_INCLUDE */
+
+/* #define DEBUG_ERROR 1 */
+
+/* #define DEBUG_COMPILE 1 */
+
+/* #define DEBUG_PROGRESSIVE 1 */
+
+#define MAX_ERROR 5
+
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+typedef struct _xmlRelaxNGSchema xmlRelaxNGSchema;
+typedef xmlRelaxNGSchema *xmlRelaxNGSchemaPtr;
+
+typedef struct _xmlRelaxNGDefine xmlRelaxNGDefine;
+typedef xmlRelaxNGDefine *xmlRelaxNGDefinePtr;
+
+typedef struct _xmlRelaxNGDocument xmlRelaxNGDocument;
+typedef xmlRelaxNGDocument *xmlRelaxNGDocumentPtr;
+
+typedef struct _xmlRelaxNGInclude xmlRelaxNGInclude;
+typedef xmlRelaxNGInclude *xmlRelaxNGIncludePtr;
+
+typedef enum {
+ XML_RELAXNG_COMBINE_UNDEFINED = 0, /* undefined */
+ XML_RELAXNG_COMBINE_CHOICE, /* choice */
+ XML_RELAXNG_COMBINE_INTERLEAVE /* interleave */
+} xmlRelaxNGCombine;
+
+typedef enum {
+ XML_RELAXNG_CONTENT_ERROR = -1,
+ XML_RELAXNG_CONTENT_EMPTY = 0,
+ XML_RELAXNG_CONTENT_SIMPLE,
+ XML_RELAXNG_CONTENT_COMPLEX
+} xmlRelaxNGContentType;
+
+typedef struct _xmlRelaxNGGrammar xmlRelaxNGGrammar;
+typedef xmlRelaxNGGrammar *xmlRelaxNGGrammarPtr;
+
+struct _xmlRelaxNGGrammar {
+ xmlRelaxNGGrammarPtr parent; /* the parent grammar if any */
+ xmlRelaxNGGrammarPtr children; /* the children grammar if any */
+ xmlRelaxNGGrammarPtr next; /* the next grammar if any */
+ xmlRelaxNGDefinePtr start; /* <start> content */
+ xmlRelaxNGCombine combine; /* the default combine value */
+ xmlRelaxNGDefinePtr startList; /* list of <start> definitions */
+ xmlHashTablePtr defs; /* define* */
+ xmlHashTablePtr refs; /* references */
+};
+
+
+typedef enum {
+ XML_RELAXNG_NOOP = -1, /* a no operation from simplification */
+ XML_RELAXNG_EMPTY = 0, /* an empty pattern */
+ XML_RELAXNG_NOT_ALLOWED, /* not allowed top */
+ XML_RELAXNG_EXCEPT, /* except present in nameclass defs */
+ XML_RELAXNG_TEXT, /* textual content */
+ XML_RELAXNG_ELEMENT, /* an element */
+ XML_RELAXNG_DATATYPE, /* extenal data type definition */
+ XML_RELAXNG_PARAM, /* extenal data type parameter */
+ XML_RELAXNG_VALUE, /* value from an extenal data type definition */
+ XML_RELAXNG_LIST, /* a list of patterns */
+ XML_RELAXNG_ATTRIBUTE, /* an attrbute following a pattern */
+ XML_RELAXNG_DEF, /* a definition */
+ XML_RELAXNG_REF, /* reference to a definition */
+ XML_RELAXNG_EXTERNALREF, /* reference to an external def */
+ XML_RELAXNG_PARENTREF, /* reference to a def in the parent grammar */
+ XML_RELAXNG_OPTIONAL, /* optional patterns */
+ XML_RELAXNG_ZEROORMORE, /* zero or more non empty patterns */
+ XML_RELAXNG_ONEORMORE, /* one or more non empty patterns */
+ XML_RELAXNG_CHOICE, /* a choice between non empty patterns */
+ XML_RELAXNG_GROUP, /* a pair/group of non empty patterns */
+ XML_RELAXNG_INTERLEAVE, /* interleaving choice of non-empty patterns */
+ XML_RELAXNG_START /* Used to keep track of starts on grammars */
+} xmlRelaxNGType;
+
+#define IS_NULLABLE (1 << 0)
+#define IS_NOT_NULLABLE (1 << 1)
+#define IS_INDETERMINIST (1 << 2)
+#define IS_MIXED (1 << 3)
+#define IS_TRIABLE (1 << 4)
+#define IS_PROCESSED (1 << 5)
+#define IS_COMPILABLE (1 << 6)
+#define IS_NOT_COMPILABLE (1 << 7)
+
+struct _xmlRelaxNGDefine {
+ xmlRelaxNGType type; /* the type of definition */
+ xmlNodePtr node; /* the node in the source */
+ xmlChar *name; /* the element local name if present */
+ xmlChar *ns; /* the namespace local name if present */
+ xmlChar *value; /* value when available */
+ void *data; /* data lib or specific pointer */
+ xmlRelaxNGDefinePtr content; /* the expected content */
+ xmlRelaxNGDefinePtr parent; /* the parent definition, if any */
+ xmlRelaxNGDefinePtr next; /* list within grouping sequences */
+ xmlRelaxNGDefinePtr attrs; /* list of attributes for elements */
+ xmlRelaxNGDefinePtr nameClass; /* the nameClass definition if any */
+ xmlRelaxNGDefinePtr nextHash; /* next define in defs/refs hash tables */
+ short depth; /* used for the cycle detection */
+ short dflags; /* define related flags */
+ xmlRegexpPtr contModel; /* a compiled content model if available */
+};
+
+/**
+ * _xmlRelaxNG:
+ *
+ * A RelaxNGs definition
+ */
+struct _xmlRelaxNG {
+ void *_private; /* unused by the library for users or bindings */
+ xmlRelaxNGGrammarPtr topgrammar;
+ xmlDocPtr doc;
+
+ int idref; /* requires idref checking */
+
+ xmlHashTablePtr defs; /* define */
+ xmlHashTablePtr refs; /* references */
+ xmlRelaxNGDocumentPtr documents; /* all the documents loaded */
+ xmlRelaxNGIncludePtr includes; /* all the includes loaded */
+ int defNr; /* number of defines used */
+ xmlRelaxNGDefinePtr *defTab; /* pointer to the allocated definitions */
+
+};
+
+#define XML_RELAXNG_IN_ATTRIBUTE (1 << 0)
+#define XML_RELAXNG_IN_ONEORMORE (1 << 1)
+#define XML_RELAXNG_IN_LIST (1 << 2)
+#define XML_RELAXNG_IN_DATAEXCEPT (1 << 3)
+#define XML_RELAXNG_IN_START (1 << 4)
+#define XML_RELAXNG_IN_OOMGROUP (1 << 5)
+#define XML_RELAXNG_IN_OOMINTERLEAVE (1 << 6)
+#define XML_RELAXNG_IN_EXTERNALREF (1 << 7)
+#define XML_RELAXNG_IN_ANYEXCEPT (1 << 8)
+#define XML_RELAXNG_IN_NSEXCEPT (1 << 9)
+
+struct _xmlRelaxNGParserCtxt {
+ void *userData; /* user specific data block */
+ xmlRelaxNGValidityErrorFunc error; /* the callback in case of errors */
+ xmlRelaxNGValidityWarningFunc warning; /* the callback in case of warning */
+ xmlStructuredErrorFunc serror;
+ xmlRelaxNGValidErr err;
+
+ xmlRelaxNGPtr schema; /* The schema in use */
+ xmlRelaxNGGrammarPtr grammar; /* the current grammar */
+ xmlRelaxNGGrammarPtr parentgrammar; /* the parent grammar */
+ int flags; /* parser flags */
+ int nbErrors; /* number of errors at parse time */
+ int nbWarnings; /* number of warnings at parse time */
+ const xmlChar *define; /* the current define scope */
+ xmlRelaxNGDefinePtr def; /* the current define */
+
+ int nbInterleaves;
+ xmlHashTablePtr interleaves; /* keep track of all the interleaves */
+
+ xmlRelaxNGDocumentPtr documents; /* all the documents loaded */
+ xmlRelaxNGIncludePtr includes; /* all the includes loaded */
+ xmlChar *URL;
+ xmlDocPtr document;
+
+ int defNr; /* number of defines used */
+ int defMax; /* number of defines aloocated */
+ xmlRelaxNGDefinePtr *defTab; /* pointer to the allocated definitions */
+
+ const char *buffer;
+ int size;
+
+ /* the document stack */
+ xmlRelaxNGDocumentPtr doc; /* Current parsed external ref */
+ int docNr; /* Depth of the parsing stack */
+ int docMax; /* Max depth of the parsing stack */
+ xmlRelaxNGDocumentPtr *docTab; /* array of docs */
+
+ /* the include stack */
+ xmlRelaxNGIncludePtr inc; /* Current parsed include */
+ int incNr; /* Depth of the include parsing stack */
+ int incMax; /* Max depth of the parsing stack */
+ xmlRelaxNGIncludePtr *incTab; /* array of incs */
+
+ int idref; /* requires idref checking */
+
+ /* used to compile content models */
+ xmlAutomataPtr am; /* the automata */
+ xmlAutomataStatePtr state; /* used to build the automata */
+
+ int crng; /* compact syntax and other flags */
+};
+
+#define FLAGS_IGNORABLE 1
+#define FLAGS_NEGATIVE 2
+#define FLAGS_MIXED_CONTENT 4
+
+/**
+ * xmlRelaxNGInterleaveGroup:
+ *
+ * A RelaxNGs partition set associated to lists of definitions
+ */
+typedef struct _xmlRelaxNGInterleaveGroup xmlRelaxNGInterleaveGroup;
+typedef xmlRelaxNGInterleaveGroup *xmlRelaxNGInterleaveGroupPtr;
+struct _xmlRelaxNGInterleaveGroup {
+ xmlRelaxNGDefinePtr rule; /* the rule to satisfy */
+ xmlRelaxNGDefinePtr *defs; /* the array of element definitions */
+ xmlRelaxNGDefinePtr *attrs; /* the array of attributes definitions */
+};
+
+#define IS_DETERMINIST 1
+#define IS_NEEDCHECK 2
+
+/**
+ * xmlRelaxNGPartitions:
+ *
+ * A RelaxNGs partition associated to an interleave group
+ */
+typedef struct _xmlRelaxNGPartition xmlRelaxNGPartition;
+typedef xmlRelaxNGPartition *xmlRelaxNGPartitionPtr;
+struct _xmlRelaxNGPartition {
+ int nbgroups; /* number of groups in the partitions */
+ xmlHashTablePtr triage; /* hash table used to direct nodes to the
+ * right group when possible */
+ int flags; /* determinist ? */
+ xmlRelaxNGInterleaveGroupPtr *groups;
+};
+
+/**
+ * xmlRelaxNGValidState:
+ *
+ * A RelaxNGs validation state
+ */
+#define MAX_ATTR 20
+typedef struct _xmlRelaxNGValidState xmlRelaxNGValidState;
+typedef xmlRelaxNGValidState *xmlRelaxNGValidStatePtr;
+struct _xmlRelaxNGValidState {
+ xmlNodePtr node; /* the current node */
+ xmlNodePtr seq; /* the sequence of children left to validate */
+ int nbAttrs; /* the number of attributes */
+ int maxAttrs; /* the size of attrs */
+ int nbAttrLeft; /* the number of attributes left to validate */
+ xmlChar *value; /* the value when operating on string */
+ xmlChar *endvalue; /* the end value when operating on string */
+ xmlAttrPtr *attrs; /* the array of attributes */
+};
+
+/**
+ * xmlRelaxNGStates:
+ *
+ * A RelaxNGs container for validation state
+ */
+typedef struct _xmlRelaxNGStates xmlRelaxNGStates;
+typedef xmlRelaxNGStates *xmlRelaxNGStatesPtr;
+struct _xmlRelaxNGStates {
+ int nbState; /* the number of states */
+ int maxState; /* the size of the array */
+ xmlRelaxNGValidStatePtr *tabState;
+};
+
+#define ERROR_IS_DUP 1
+
+/**
+ * xmlRelaxNGValidError:
+ *
+ * A RelaxNGs validation error
+ */
+typedef struct _xmlRelaxNGValidError xmlRelaxNGValidError;
+typedef xmlRelaxNGValidError *xmlRelaxNGValidErrorPtr;
+struct _xmlRelaxNGValidError {
+ xmlRelaxNGValidErr err; /* the error number */
+ int flags; /* flags */
+ xmlNodePtr node; /* the current node */
+ xmlNodePtr seq; /* the current child */
+ const xmlChar *arg1; /* first arg */
+ const xmlChar *arg2; /* second arg */
+};
+
+/**
+ * xmlRelaxNGValidCtxt:
+ *
+ * A RelaxNGs validation context
+ */
+
+struct _xmlRelaxNGValidCtxt {
+ void *userData; /* user specific data block */
+ xmlRelaxNGValidityErrorFunc error; /* the callback in case of errors */
+ xmlRelaxNGValidityWarningFunc warning; /* the callback in case of warning */
+ xmlStructuredErrorFunc serror;
+ int nbErrors; /* number of errors in validation */
+
+ xmlRelaxNGPtr schema; /* The schema in use */
+ xmlDocPtr doc; /* the document being validated */
+ int flags; /* validation flags */
+ int depth; /* validation depth */
+ int idref; /* requires idref checking */
+ int errNo; /* the first error found */
+
+ /*
+ * Errors accumulated in branches may have to be stacked to be
+ * provided back when it's sure they affect validation.
+ */
+ xmlRelaxNGValidErrorPtr err; /* Last error */
+ int errNr; /* Depth of the error stack */
+ int errMax; /* Max depth of the error stack */
+ xmlRelaxNGValidErrorPtr errTab; /* stack of errors */
+
+ xmlRelaxNGValidStatePtr state; /* the current validation state */
+ xmlRelaxNGStatesPtr states; /* the accumulated state list */
+
+ xmlRelaxNGStatesPtr freeState; /* the pool of free valid states */
+ int freeStatesNr;
+ int freeStatesMax;
+ xmlRelaxNGStatesPtr *freeStates; /* the pool of free state groups */
+
+ /*
+ * This is used for "progressive" validation
+ */
+ xmlRegExecCtxtPtr elem; /* the current element regexp */
+ int elemNr; /* the number of element validated */
+ int elemMax; /* the max depth of elements */
+ xmlRegExecCtxtPtr *elemTab; /* the stack of regexp runtime */
+ int pstate; /* progressive state */
+ xmlNodePtr pnode; /* the current node */
+ xmlRelaxNGDefinePtr pdef; /* the non-streamable definition */
+ int perr; /* signal error in content model
+ * outside the regexp */
+};
+
+/**
+ * xmlRelaxNGInclude:
+ *
+ * Structure associated to a RelaxNGs document element
+ */
+struct _xmlRelaxNGInclude {
+ xmlRelaxNGIncludePtr next; /* keep a chain of includes */
+ xmlChar *href; /* the normalized href value */
+ xmlDocPtr doc; /* the associated XML document */
+ xmlRelaxNGDefinePtr content; /* the definitions */
+ xmlRelaxNGPtr schema; /* the schema */
+};
+
+/**
+ * xmlRelaxNGDocument:
+ *
+ * Structure associated to a RelaxNGs document element
+ */
+struct _xmlRelaxNGDocument {
+ xmlRelaxNGDocumentPtr next; /* keep a chain of documents */
+ xmlChar *href; /* the normalized href value */
+ xmlDocPtr doc; /* the associated XML document */
+ xmlRelaxNGDefinePtr content; /* the definitions */
+ xmlRelaxNGPtr schema; /* the schema */
+};
+
+
+/************************************************************************
+ * *
+ * Some factorized error routines *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlRngPErrMemory:
+ * @ctxt: an Relax-NG parser context
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlRngPErrMemory(xmlRelaxNGParserCtxtPtr ctxt, const char *extra)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ channel = ctxt->error;
+ data = ctxt->userData;
+ ctxt->nbErrors++;
+ schannel = ctxt->serror;
+ }
+ if (extra)
+ __xmlRaiseError(schannel, channel, data,
+ NULL, NULL, XML_FROM_RELAXNGP,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
+ NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+ else
+ __xmlRaiseError(schannel, channel, data,
+ NULL, NULL, XML_FROM_RELAXNGP,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
+ NULL, NULL, 0, 0, "Memory allocation failed\n");
+}
+
+/**
+ * xmlRngVErrMemory:
+ * @ctxt: a Relax-NG validation context
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlRngVErrMemory(xmlRelaxNGValidCtxtPtr ctxt, const char *extra)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ channel = ctxt->error;
+ data = ctxt->userData;
+ ctxt->nbErrors++;
+ schannel = ctxt->serror;
+ }
+ if (extra)
+ __xmlRaiseError(schannel, channel, data,
+ NULL, NULL, XML_FROM_RELAXNGV,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
+ NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+ else
+ __xmlRaiseError(schannel, channel, data,
+ NULL, NULL, XML_FROM_RELAXNGV,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
+ NULL, NULL, 0, 0, "Memory allocation failed\n");
+}
+
+/**
+ * xmlRngPErr:
+ * @ctxt: a Relax-NG parser context
+ * @node: the node raising the error
+ * @error: the error code
+ * @msg: message
+ * @str1: extra info
+ * @str2: extra info
+ *
+ * Handle a Relax NG Parsing error
+ */
+static void
+xmlRngPErr(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node, int error,
+ const char *msg, const xmlChar * str1, const xmlChar * str2)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ channel = ctxt->error;
+ data = ctxt->userData;
+ ctxt->nbErrors++;
+ schannel = ctxt->serror;
+ }
+ __xmlRaiseError(schannel, channel, data,
+ NULL, node, XML_FROM_RELAXNGP,
+ error, XML_ERR_ERROR, NULL, 0,
+ (const char *) str1, (const char *) str2, NULL, 0, 0,
+ msg, str1, str2);
+}
+
+/**
+ * xmlRngVErr:
+ * @ctxt: a Relax-NG validation context
+ * @node: the node raising the error
+ * @error: the error code
+ * @msg: message
+ * @str1: extra info
+ * @str2: extra info
+ *
+ * Handle a Relax NG Validation error
+ */
+static void
+xmlRngVErr(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node, int error,
+ const char *msg, const xmlChar * str1, const xmlChar * str2)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ channel = ctxt->error;
+ data = ctxt->userData;
+ ctxt->nbErrors++;
+ schannel = ctxt->serror;
+ }
+ __xmlRaiseError(schannel, channel, data,
+ NULL, node, XML_FROM_RELAXNGV,
+ error, XML_ERR_ERROR, NULL, 0,
+ (const char *) str1, (const char *) str2, NULL, 0, 0,
+ msg, str1, str2);
+}
+
+/************************************************************************
+ * *
+ * Preliminary type checking interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlRelaxNGTypeHave:
+ * @data: data needed for the library
+ * @type: the type name
+ * @value: the value to check
+ *
+ * Function provided by a type library to check if a type is exported
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+typedef int (*xmlRelaxNGTypeHave) (void *data, const xmlChar * type);
+
+/**
+ * xmlRelaxNGTypeCheck:
+ * @data: data needed for the library
+ * @type: the type name
+ * @value: the value to check
+ * @result: place to store the result if needed
+ *
+ * Function provided by a type library to check if a value match a type
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+typedef int (*xmlRelaxNGTypeCheck) (void *data, const xmlChar * type,
+ const xmlChar * value, void **result,
+ xmlNodePtr node);
+
+/**
+ * xmlRelaxNGFacetCheck:
+ * @data: data needed for the library
+ * @type: the type name
+ * @facet: the facet name
+ * @val: the facet value
+ * @strval: the string value
+ * @value: the value to check
+ *
+ * Function provided by a type library to check a value facet
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+typedef int (*xmlRelaxNGFacetCheck) (void *data, const xmlChar * type,
+ const xmlChar * facet,
+ const xmlChar * val,
+ const xmlChar * strval, void *value);
+
+/**
+ * xmlRelaxNGTypeFree:
+ * @data: data needed for the library
+ * @result: the value to free
+ *
+ * Function provided by a type library to free a returned result
+ */
+typedef void (*xmlRelaxNGTypeFree) (void *data, void *result);
+
+/**
+ * xmlRelaxNGTypeCompare:
+ * @data: data needed for the library
+ * @type: the type name
+ * @value1: the first value
+ * @value2: the second value
+ *
+ * Function provided by a type library to compare two values accordingly
+ * to a type.
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+typedef int (*xmlRelaxNGTypeCompare) (void *data, const xmlChar * type,
+ const xmlChar * value1,
+ xmlNodePtr ctxt1,
+ void *comp1,
+ const xmlChar * value2,
+ xmlNodePtr ctxt2);
+typedef struct _xmlRelaxNGTypeLibrary xmlRelaxNGTypeLibrary;
+typedef xmlRelaxNGTypeLibrary *xmlRelaxNGTypeLibraryPtr;
+struct _xmlRelaxNGTypeLibrary {
+ const xmlChar *namespace; /* the datatypeLibrary value */
+ void *data; /* data needed for the library */
+ xmlRelaxNGTypeHave have; /* the export function */
+ xmlRelaxNGTypeCheck check; /* the checking function */
+ xmlRelaxNGTypeCompare comp; /* the compare function */
+ xmlRelaxNGFacetCheck facet; /* the facet check function */
+ xmlRelaxNGTypeFree freef; /* the freeing function */
+};
+
+/************************************************************************
+ * *
+ * Allocation functions *
+ * *
+ ************************************************************************/
+static void xmlRelaxNGFreeGrammar(xmlRelaxNGGrammarPtr grammar);
+static void xmlRelaxNGFreeDefine(xmlRelaxNGDefinePtr define);
+static void xmlRelaxNGNormExtSpace(xmlChar * value);
+static void xmlRelaxNGFreeInnerSchema(xmlRelaxNGPtr schema);
+static int xmlRelaxNGEqualValidState(xmlRelaxNGValidCtxtPtr ctxt
+ ATTRIBUTE_UNUSED,
+ xmlRelaxNGValidStatePtr state1,
+ xmlRelaxNGValidStatePtr state2);
+static void xmlRelaxNGFreeValidState(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidStatePtr state);
+
+/**
+ * xmlRelaxNGFreeDocument:
+ * @docu: a document structure
+ *
+ * Deallocate a RelaxNG document structure.
+ */
+static void
+xmlRelaxNGFreeDocument(xmlRelaxNGDocumentPtr docu)
+{
+ if (docu == NULL)
+ return;
+
+ if (docu->href != NULL)
+ xmlFree(docu->href);
+ if (docu->doc != NULL)
+ xmlFreeDoc(docu->doc);
+ if (docu->schema != NULL)
+ xmlRelaxNGFreeInnerSchema(docu->schema);
+ xmlFree(docu);
+}
+
+/**
+ * xmlRelaxNGFreeDocumentList:
+ * @docu: a list of document structure
+ *
+ * Deallocate a RelaxNG document structures.
+ */
+static void
+xmlRelaxNGFreeDocumentList(xmlRelaxNGDocumentPtr docu)
+{
+ xmlRelaxNGDocumentPtr next;
+
+ while (docu != NULL) {
+ next = docu->next;
+ xmlRelaxNGFreeDocument(docu);
+ docu = next;
+ }
+}
+
+/**
+ * xmlRelaxNGFreeInclude:
+ * @incl: a include structure
+ *
+ * Deallocate a RelaxNG include structure.
+ */
+static void
+xmlRelaxNGFreeInclude(xmlRelaxNGIncludePtr incl)
+{
+ if (incl == NULL)
+ return;
+
+ if (incl->href != NULL)
+ xmlFree(incl->href);
+ if (incl->doc != NULL)
+ xmlFreeDoc(incl->doc);
+ if (incl->schema != NULL)
+ xmlRelaxNGFree(incl->schema);
+ xmlFree(incl);
+}
+
+/**
+ * xmlRelaxNGFreeIncludeList:
+ * @incl: a include structure list
+ *
+ * Deallocate a RelaxNG include structure.
+ */
+static void
+xmlRelaxNGFreeIncludeList(xmlRelaxNGIncludePtr incl)
+{
+ xmlRelaxNGIncludePtr next;
+
+ while (incl != NULL) {
+ next = incl->next;
+ xmlRelaxNGFreeInclude(incl);
+ incl = next;
+ }
+}
+
+/**
+ * xmlRelaxNGNewRelaxNG:
+ * @ctxt: a Relax-NG validation context (optional)
+ *
+ * Allocate a new RelaxNG structure.
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+static xmlRelaxNGPtr
+xmlRelaxNGNewRelaxNG(xmlRelaxNGParserCtxtPtr ctxt)
+{
+ xmlRelaxNGPtr ret;
+
+ ret = (xmlRelaxNGPtr) xmlMalloc(sizeof(xmlRelaxNG));
+ if (ret == NULL) {
+ xmlRngPErrMemory(ctxt, NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNG));
+
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGFreeInnerSchema:
+ * @schema: a schema structure
+ *
+ * Deallocate a RelaxNG schema structure.
+ */
+static void
+xmlRelaxNGFreeInnerSchema(xmlRelaxNGPtr schema)
+{
+ if (schema == NULL)
+ return;
+
+ if (schema->doc != NULL)
+ xmlFreeDoc(schema->doc);
+ if (schema->defTab != NULL) {
+ int i;
+
+ for (i = 0; i < schema->defNr; i++)
+ xmlRelaxNGFreeDefine(schema->defTab[i]);
+ xmlFree(schema->defTab);
+ }
+
+ xmlFree(schema);
+}
+
+/**
+ * xmlRelaxNGFree:
+ * @schema: a schema structure
+ *
+ * Deallocate a RelaxNG structure.
+ */
+void
+xmlRelaxNGFree(xmlRelaxNGPtr schema)
+{
+ if (schema == NULL)
+ return;
+
+ if (schema->topgrammar != NULL)
+ xmlRelaxNGFreeGrammar(schema->topgrammar);
+ if (schema->doc != NULL)
+ xmlFreeDoc(schema->doc);
+ if (schema->documents != NULL)
+ xmlRelaxNGFreeDocumentList(schema->documents);
+ if (schema->includes != NULL)
+ xmlRelaxNGFreeIncludeList(schema->includes);
+ if (schema->defTab != NULL) {
+ int i;
+
+ for (i = 0; i < schema->defNr; i++)
+ xmlRelaxNGFreeDefine(schema->defTab[i]);
+ xmlFree(schema->defTab);
+ }
+
+ xmlFree(schema);
+}
+
+/**
+ * xmlRelaxNGNewGrammar:
+ * @ctxt: a Relax-NG validation context (optional)
+ *
+ * Allocate a new RelaxNG grammar.
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+static xmlRelaxNGGrammarPtr
+xmlRelaxNGNewGrammar(xmlRelaxNGParserCtxtPtr ctxt)
+{
+ xmlRelaxNGGrammarPtr ret;
+
+ ret = (xmlRelaxNGGrammarPtr) xmlMalloc(sizeof(xmlRelaxNGGrammar));
+ if (ret == NULL) {
+ xmlRngPErrMemory(ctxt, NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGGrammar));
+
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGFreeGrammar:
+ * @grammar: a grammar structure
+ *
+ * Deallocate a RelaxNG grammar structure.
+ */
+static void
+xmlRelaxNGFreeGrammar(xmlRelaxNGGrammarPtr grammar)
+{
+ if (grammar == NULL)
+ return;
+
+ if (grammar->children != NULL) {
+ xmlRelaxNGFreeGrammar(grammar->children);
+ }
+ if (grammar->next != NULL) {
+ xmlRelaxNGFreeGrammar(grammar->next);
+ }
+ if (grammar->refs != NULL) {
+ xmlHashFree(grammar->refs, NULL);
+ }
+ if (grammar->defs != NULL) {
+ xmlHashFree(grammar->defs, NULL);
+ }
+
+ xmlFree(grammar);
+}
+
+/**
+ * xmlRelaxNGNewDefine:
+ * @ctxt: a Relax-NG validation context
+ * @node: the node in the input document.
+ *
+ * Allocate a new RelaxNG define.
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGNewDefine(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGDefinePtr ret;
+
+ if (ctxt->defMax == 0) {
+ ctxt->defMax = 16;
+ ctxt->defNr = 0;
+ ctxt->defTab = (xmlRelaxNGDefinePtr *)
+ xmlMalloc(ctxt->defMax * sizeof(xmlRelaxNGDefinePtr));
+ if (ctxt->defTab == NULL) {
+ xmlRngPErrMemory(ctxt, "allocating define\n");
+ return (NULL);
+ }
+ } else if (ctxt->defMax <= ctxt->defNr) {
+ xmlRelaxNGDefinePtr *tmp;
+
+ ctxt->defMax *= 2;
+ tmp = (xmlRelaxNGDefinePtr *) xmlRealloc(ctxt->defTab,
+ ctxt->defMax *
+ sizeof
+ (xmlRelaxNGDefinePtr));
+ if (tmp == NULL) {
+ xmlRngPErrMemory(ctxt, "allocating define\n");
+ return (NULL);
+ }
+ ctxt->defTab = tmp;
+ }
+ ret = (xmlRelaxNGDefinePtr) xmlMalloc(sizeof(xmlRelaxNGDefine));
+ if (ret == NULL) {
+ xmlRngPErrMemory(ctxt, "allocating define\n");
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGDefine));
+ ctxt->defTab[ctxt->defNr++] = ret;
+ ret->node = node;
+ ret->depth = -1;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGFreePartition:
+ * @partitions: a partition set structure
+ *
+ * Deallocate RelaxNG partition set structures.
+ */
+static void
+xmlRelaxNGFreePartition(xmlRelaxNGPartitionPtr partitions)
+{
+ xmlRelaxNGInterleaveGroupPtr group;
+ int j;
+
+ if (partitions != NULL) {
+ if (partitions->groups != NULL) {
+ for (j = 0; j < partitions->nbgroups; j++) {
+ group = partitions->groups[j];
+ if (group != NULL) {
+ if (group->defs != NULL)
+ xmlFree(group->defs);
+ if (group->attrs != NULL)
+ xmlFree(group->attrs);
+ xmlFree(group);
+ }
+ }
+ xmlFree(partitions->groups);
+ }
+ if (partitions->triage != NULL) {
+ xmlHashFree(partitions->triage, NULL);
+ }
+ xmlFree(partitions);
+ }
+}
+
+/**
+ * xmlRelaxNGFreeDefine:
+ * @define: a define structure
+ *
+ * Deallocate a RelaxNG define structure.
+ */
+static void
+xmlRelaxNGFreeDefine(xmlRelaxNGDefinePtr define)
+{
+ if (define == NULL)
+ return;
+
+ if ((define->type == XML_RELAXNG_VALUE) && (define->attrs != NULL)) {
+ xmlRelaxNGTypeLibraryPtr lib;
+
+ lib = (xmlRelaxNGTypeLibraryPtr) define->data;
+ if ((lib != NULL) && (lib->freef != NULL))
+ lib->freef(lib->data, (void *) define->attrs);
+ }
+ if ((define->data != NULL) && (define->type == XML_RELAXNG_INTERLEAVE))
+ xmlRelaxNGFreePartition((xmlRelaxNGPartitionPtr) define->data);
+ if ((define->data != NULL) && (define->type == XML_RELAXNG_CHOICE))
+ xmlHashFree((xmlHashTablePtr) define->data, NULL);
+ if (define->name != NULL)
+ xmlFree(define->name);
+ if (define->ns != NULL)
+ xmlFree(define->ns);
+ if (define->value != NULL)
+ xmlFree(define->value);
+ if (define->contModel != NULL)
+ xmlRegFreeRegexp(define->contModel);
+ xmlFree(define);
+}
+
+/**
+ * xmlRelaxNGNewStates:
+ * @ctxt: a Relax-NG validation context
+ * @size: the default size for the container
+ *
+ * Allocate a new RelaxNG validation state container
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+static xmlRelaxNGStatesPtr
+xmlRelaxNGNewStates(xmlRelaxNGValidCtxtPtr ctxt, int size)
+{
+ xmlRelaxNGStatesPtr ret;
+
+ if ((ctxt != NULL) &&
+ (ctxt->freeState != NULL) && (ctxt->freeStatesNr > 0)) {
+ ctxt->freeStatesNr--;
+ ret = ctxt->freeStates[ctxt->freeStatesNr];
+ ret->nbState = 0;
+ return (ret);
+ }
+ if (size < 16)
+ size = 16;
+
+ ret = (xmlRelaxNGStatesPtr) xmlMalloc(sizeof(xmlRelaxNGStates) +
+ (size -
+ 1) *
+ sizeof(xmlRelaxNGValidStatePtr));
+ if (ret == NULL) {
+ xmlRngVErrMemory(ctxt, "allocating states\n");
+ return (NULL);
+ }
+ ret->nbState = 0;
+ ret->maxState = size;
+ ret->tabState = (xmlRelaxNGValidStatePtr *) xmlMalloc((size) *
+ sizeof
+ (xmlRelaxNGValidStatePtr));
+ if (ret->tabState == NULL) {
+ xmlRngVErrMemory(ctxt, "allocating states\n");
+ xmlFree(ret);
+ return (NULL);
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGAddStateUniq:
+ * @ctxt: a Relax-NG validation context
+ * @states: the states container
+ * @state: the validation state
+ *
+ * Add a RelaxNG validation state to the container without checking
+ * for unicity.
+ *
+ * Return 1 in case of success and 0 if this is a duplicate and -1 on error
+ */
+static int
+xmlRelaxNGAddStatesUniq(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGStatesPtr states,
+ xmlRelaxNGValidStatePtr state)
+{
+ if (state == NULL) {
+ return (-1);
+ }
+ if (states->nbState >= states->maxState) {
+ xmlRelaxNGValidStatePtr *tmp;
+ int size;
+
+ size = states->maxState * 2;
+ tmp = (xmlRelaxNGValidStatePtr *) xmlRealloc(states->tabState,
+ (size) *
+ sizeof
+ (xmlRelaxNGValidStatePtr));
+ if (tmp == NULL) {
+ xmlRngVErrMemory(ctxt, "adding states\n");
+ return (-1);
+ }
+ states->tabState = tmp;
+ states->maxState = size;
+ }
+ states->tabState[states->nbState++] = state;
+ return (1);
+}
+
+/**
+ * xmlRelaxNGAddState:
+ * @ctxt: a Relax-NG validation context
+ * @states: the states container
+ * @state: the validation state
+ *
+ * Add a RelaxNG validation state to the container
+ *
+ * Return 1 in case of success and 0 if this is a duplicate and -1 on error
+ */
+static int
+xmlRelaxNGAddStates(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGStatesPtr states,
+ xmlRelaxNGValidStatePtr state)
+{
+ int i;
+
+ if (state == NULL) {
+ return (-1);
+ }
+ if (states->nbState >= states->maxState) {
+ xmlRelaxNGValidStatePtr *tmp;
+ int size;
+
+ size = states->maxState * 2;
+ tmp = (xmlRelaxNGValidStatePtr *) xmlRealloc(states->tabState,
+ (size) *
+ sizeof
+ (xmlRelaxNGValidStatePtr));
+ if (tmp == NULL) {
+ xmlRngVErrMemory(ctxt, "adding states\n");
+ return (-1);
+ }
+ states->tabState = tmp;
+ states->maxState = size;
+ }
+ for (i = 0; i < states->nbState; i++) {
+ if (xmlRelaxNGEqualValidState(ctxt, state, states->tabState[i])) {
+ xmlRelaxNGFreeValidState(ctxt, state);
+ return (0);
+ }
+ }
+ states->tabState[states->nbState++] = state;
+ return (1);
+}
+
+/**
+ * xmlRelaxNGFreeStates:
+ * @ctxt: a Relax-NG validation context
+ * @states: teh container
+ *
+ * Free a RelaxNG validation state container
+ */
+static void
+xmlRelaxNGFreeStates(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGStatesPtr states)
+{
+ if (states == NULL)
+ return;
+ if ((ctxt != NULL) && (ctxt->freeStates == NULL)) {
+ ctxt->freeStatesMax = 40;
+ ctxt->freeStatesNr = 0;
+ ctxt->freeStates = (xmlRelaxNGStatesPtr *)
+ xmlMalloc(ctxt->freeStatesMax * sizeof(xmlRelaxNGStatesPtr));
+ if (ctxt->freeStates == NULL) {
+ xmlRngVErrMemory(ctxt, "storing states\n");
+ }
+ } else if ((ctxt != NULL)
+ && (ctxt->freeStatesNr >= ctxt->freeStatesMax)) {
+ xmlRelaxNGStatesPtr *tmp;
+
+ tmp = (xmlRelaxNGStatesPtr *) xmlRealloc(ctxt->freeStates,
+ 2 * ctxt->freeStatesMax *
+ sizeof
+ (xmlRelaxNGStatesPtr));
+ if (tmp == NULL) {
+ xmlRngVErrMemory(ctxt, "storing states\n");
+ xmlFree(states->tabState);
+ xmlFree(states);
+ return;
+ }
+ ctxt->freeStates = tmp;
+ ctxt->freeStatesMax *= 2;
+ }
+ if ((ctxt == NULL) || (ctxt->freeState == NULL)) {
+ xmlFree(states->tabState);
+ xmlFree(states);
+ } else {
+ ctxt->freeStates[ctxt->freeStatesNr++] = states;
+ }
+}
+
+/**
+ * xmlRelaxNGNewValidState:
+ * @ctxt: a Relax-NG validation context
+ * @node: the current node or NULL for the document
+ *
+ * Allocate a new RelaxNG validation state
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+static xmlRelaxNGValidStatePtr
+xmlRelaxNGNewValidState(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGValidStatePtr ret;
+ xmlAttrPtr attr;
+ xmlAttrPtr attrs[MAX_ATTR];
+ int nbAttrs = 0;
+ xmlNodePtr root = NULL;
+
+ if (node == NULL) {
+ root = xmlDocGetRootElement(ctxt->doc);
+ if (root == NULL)
+ return (NULL);
+ } else {
+ attr = node->properties;
+ while (attr != NULL) {
+ if (nbAttrs < MAX_ATTR)
+ attrs[nbAttrs++] = attr;
+ else
+ nbAttrs++;
+ attr = attr->next;
+ }
+ }
+ if ((ctxt->freeState != NULL) && (ctxt->freeState->nbState > 0)) {
+ ctxt->freeState->nbState--;
+ ret = ctxt->freeState->tabState[ctxt->freeState->nbState];
+ } else {
+ ret =
+ (xmlRelaxNGValidStatePtr)
+ xmlMalloc(sizeof(xmlRelaxNGValidState));
+ if (ret == NULL) {
+ xmlRngVErrMemory(ctxt, "allocating states\n");
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGValidState));
+ }
+ ret->value = NULL;
+ ret->endvalue = NULL;
+ if (node == NULL) {
+ ret->node = (xmlNodePtr) ctxt->doc;
+ ret->seq = root;
+ } else {
+ ret->node = node;
+ ret->seq = node->children;
+ }
+ ret->nbAttrs = 0;
+ if (nbAttrs > 0) {
+ if (ret->attrs == NULL) {
+ if (nbAttrs < 4)
+ ret->maxAttrs = 4;
+ else
+ ret->maxAttrs = nbAttrs;
+ ret->attrs = (xmlAttrPtr *) xmlMalloc(ret->maxAttrs *
+ sizeof(xmlAttrPtr));
+ if (ret->attrs == NULL) {
+ xmlRngVErrMemory(ctxt, "allocating states\n");
+ return (ret);
+ }
+ } else if (ret->maxAttrs < nbAttrs) {
+ xmlAttrPtr *tmp;
+
+ tmp = (xmlAttrPtr *) xmlRealloc(ret->attrs, nbAttrs *
+ sizeof(xmlAttrPtr));
+ if (tmp == NULL) {
+ xmlRngVErrMemory(ctxt, "allocating states\n");
+ return (ret);
+ }
+ ret->attrs = tmp;
+ ret->maxAttrs = nbAttrs;
+ }
+ ret->nbAttrs = nbAttrs;
+ if (nbAttrs < MAX_ATTR) {
+ memcpy(ret->attrs, attrs, sizeof(xmlAttrPtr) * nbAttrs);
+ } else {
+ attr = node->properties;
+ nbAttrs = 0;
+ while (attr != NULL) {
+ ret->attrs[nbAttrs++] = attr;
+ attr = attr->next;
+ }
+ }
+ }
+ ret->nbAttrLeft = ret->nbAttrs;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGCopyValidState:
+ * @ctxt: a Relax-NG validation context
+ * @state: a validation state
+ *
+ * Copy the validation state
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+static xmlRelaxNGValidStatePtr
+xmlRelaxNGCopyValidState(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidStatePtr state)
+{
+ xmlRelaxNGValidStatePtr ret;
+ unsigned int maxAttrs;
+ xmlAttrPtr *attrs;
+
+ if (state == NULL)
+ return (NULL);
+ if ((ctxt->freeState != NULL) && (ctxt->freeState->nbState > 0)) {
+ ctxt->freeState->nbState--;
+ ret = ctxt->freeState->tabState[ctxt->freeState->nbState];
+ } else {
+ ret =
+ (xmlRelaxNGValidStatePtr)
+ xmlMalloc(sizeof(xmlRelaxNGValidState));
+ if (ret == NULL) {
+ xmlRngVErrMemory(ctxt, "allocating states\n");
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGValidState));
+ }
+ attrs = ret->attrs;
+ maxAttrs = ret->maxAttrs;
+ memcpy(ret, state, sizeof(xmlRelaxNGValidState));
+ ret->attrs = attrs;
+ ret->maxAttrs = maxAttrs;
+ if (state->nbAttrs > 0) {
+ if (ret->attrs == NULL) {
+ ret->maxAttrs = state->maxAttrs;
+ ret->attrs = (xmlAttrPtr *) xmlMalloc(ret->maxAttrs *
+ sizeof(xmlAttrPtr));
+ if (ret->attrs == NULL) {
+ xmlRngVErrMemory(ctxt, "allocating states\n");
+ ret->nbAttrs = 0;
+ return (ret);
+ }
+ } else if (ret->maxAttrs < state->nbAttrs) {
+ xmlAttrPtr *tmp;
+
+ tmp = (xmlAttrPtr *) xmlRealloc(ret->attrs, state->maxAttrs *
+ sizeof(xmlAttrPtr));
+ if (tmp == NULL) {
+ xmlRngVErrMemory(ctxt, "allocating states\n");
+ ret->nbAttrs = 0;
+ return (ret);
+ }
+ ret->maxAttrs = state->maxAttrs;
+ ret->attrs = tmp;
+ }
+ memcpy(ret->attrs, state->attrs,
+ state->nbAttrs * sizeof(xmlAttrPtr));
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGEqualValidState:
+ * @ctxt: a Relax-NG validation context
+ * @state1: a validation state
+ * @state2: a validation state
+ *
+ * Compare the validation states for equality
+ *
+ * Returns 1 if equald, 0 otherwise
+ */
+static int
+xmlRelaxNGEqualValidState(xmlRelaxNGValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ xmlRelaxNGValidStatePtr state1,
+ xmlRelaxNGValidStatePtr state2)
+{
+ int i;
+
+ if ((state1 == NULL) || (state2 == NULL))
+ return (0);
+ if (state1 == state2)
+ return (1);
+ if (state1->node != state2->node)
+ return (0);
+ if (state1->seq != state2->seq)
+ return (0);
+ if (state1->nbAttrLeft != state2->nbAttrLeft)
+ return (0);
+ if (state1->nbAttrs != state2->nbAttrs)
+ return (0);
+ if (state1->endvalue != state2->endvalue)
+ return (0);
+ if ((state1->value != state2->value) &&
+ (!xmlStrEqual(state1->value, state2->value)))
+ return (0);
+ for (i = 0; i < state1->nbAttrs; i++) {
+ if (state1->attrs[i] != state2->attrs[i])
+ return (0);
+ }
+ return (1);
+}
+
+/**
+ * xmlRelaxNGFreeValidState:
+ * @state: a validation state structure
+ *
+ * Deallocate a RelaxNG validation state structure.
+ */
+static void
+xmlRelaxNGFreeValidState(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidStatePtr state)
+{
+ if (state == NULL)
+ return;
+
+ if ((ctxt != NULL) && (ctxt->freeState == NULL)) {
+ ctxt->freeState = xmlRelaxNGNewStates(ctxt, 40);
+ }
+ if ((ctxt == NULL) || (ctxt->freeState == NULL)) {
+ if (state->attrs != NULL)
+ xmlFree(state->attrs);
+ xmlFree(state);
+ } else {
+ xmlRelaxNGAddStatesUniq(ctxt, ctxt->freeState, state);
+ }
+}
+
+/************************************************************************
+ * *
+ * Semi internal functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlRelaxParserSetFlag:
+ * @ctxt: a RelaxNG parser context
+ * @flags: a set of flags values
+ *
+ * Semi private function used to pass informations to a parser context
+ * which are a combination of xmlRelaxNGParserFlag .
+ *
+ * Returns 0 if success and -1 in case of error
+ */
+int
+xmlRelaxParserSetFlag(xmlRelaxNGParserCtxtPtr ctxt, int flags)
+{
+ if (ctxt == NULL) return(-1);
+ if (flags & XML_RELAXNGP_FREE_DOC) {
+ ctxt->crng |= XML_RELAXNGP_FREE_DOC;
+ flags -= XML_RELAXNGP_FREE_DOC;
+ }
+ if (flags & XML_RELAXNGP_CRNG) {
+ ctxt->crng |= XML_RELAXNGP_CRNG;
+ flags -= XML_RELAXNGP_CRNG;
+ }
+ if (flags != 0) return(-1);
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * Document functions *
+ * *
+ ************************************************************************/
+static xmlDocPtr xmlRelaxNGCleanupDoc(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlDocPtr doc);
+
+/**
+ * xmlRelaxNGIncludePush:
+ * @ctxt: the parser context
+ * @value: the element doc
+ *
+ * Pushes a new include on top of the include stack
+ *
+ * Returns 0 in case of error, the index in the stack otherwise
+ */
+static int
+xmlRelaxNGIncludePush(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGIncludePtr value)
+{
+ if (ctxt->incTab == NULL) {
+ ctxt->incMax = 4;
+ ctxt->incNr = 0;
+ ctxt->incTab =
+ (xmlRelaxNGIncludePtr *) xmlMalloc(ctxt->incMax *
+ sizeof(ctxt->incTab[0]));
+ if (ctxt->incTab == NULL) {
+ xmlRngPErrMemory(ctxt, "allocating include\n");
+ return (0);
+ }
+ }
+ if (ctxt->incNr >= ctxt->incMax) {
+ ctxt->incMax *= 2;
+ ctxt->incTab =
+ (xmlRelaxNGIncludePtr *) xmlRealloc(ctxt->incTab,
+ ctxt->incMax *
+ sizeof(ctxt->incTab[0]));
+ if (ctxt->incTab == NULL) {
+ xmlRngPErrMemory(ctxt, "allocating include\n");
+ return (0);
+ }
+ }
+ ctxt->incTab[ctxt->incNr] = value;
+ ctxt->inc = value;
+ return (ctxt->incNr++);
+}
+
+/**
+ * xmlRelaxNGIncludePop:
+ * @ctxt: the parser context
+ *
+ * Pops the top include from the include stack
+ *
+ * Returns the include just removed
+ */
+static xmlRelaxNGIncludePtr
+xmlRelaxNGIncludePop(xmlRelaxNGParserCtxtPtr ctxt)
+{
+ xmlRelaxNGIncludePtr ret;
+
+ if (ctxt->incNr <= 0)
+ return (0);
+ 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;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGRemoveRedefine:
+ * @ctxt: the parser context
+ * @URL: the normalized URL
+ * @target: the included target
+ * @name: the define name to eliminate
+ *
+ * Applies the elimination algorithm of 4.7
+ *
+ * Returns 0 in case of error, 1 in case of success.
+ */
+static int
+xmlRelaxNGRemoveRedefine(xmlRelaxNGParserCtxtPtr ctxt,
+ const xmlChar * URL ATTRIBUTE_UNUSED,
+ xmlNodePtr target, const xmlChar * name)
+{
+ int found = 0;
+ xmlNodePtr tmp, tmp2;
+ xmlChar *name2;
+
+#ifdef DEBUG_INCLUDE
+ if (name == NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "Elimination of <include> start from %s\n", URL);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "Elimination of <include> define %s from %s\n",
+ name, URL);
+#endif
+ tmp = target;
+ while (tmp != NULL) {
+ tmp2 = tmp->next;
+ if ((name == NULL) && (IS_RELAXNG(tmp, "start"))) {
+ found = 1;
+ xmlUnlinkNode(tmp);
+ xmlFreeNode(tmp);
+ } else if ((name != NULL) && (IS_RELAXNG(tmp, "define"))) {
+ name2 = xmlGetProp(tmp, BAD_CAST "name");
+ xmlRelaxNGNormExtSpace(name2);
+ if (name2 != NULL) {
+ if (xmlStrEqual(name, name2)) {
+ found = 1;
+ xmlUnlinkNode(tmp);
+ xmlFreeNode(tmp);
+ }
+ xmlFree(name2);
+ }
+ } else if (IS_RELAXNG(tmp, "include")) {
+ xmlChar *href = NULL;
+ xmlRelaxNGDocumentPtr inc = tmp->psvi;
+
+ if ((inc != NULL) && (inc->doc != NULL) &&
+ (inc->doc->children != NULL)) {
+
+ if (xmlStrEqual
+ (inc->doc->children->name, BAD_CAST "grammar")) {
+#ifdef DEBUG_INCLUDE
+ href = xmlGetProp(tmp, BAD_CAST "href");
+#endif
+ if (xmlRelaxNGRemoveRedefine(ctxt, href,
+ inc->doc->children->
+ children, name) == 1) {
+ found = 1;
+ }
+ if (href != NULL)
+ xmlFree(href);
+ }
+ }
+ }
+ tmp = tmp2;
+ }
+ return (found);
+}
+
+/**
+ * xmlRelaxNGLoadInclude:
+ * @ctxt: the parser context
+ * @URL: the normalized URL
+ * @node: the include node.
+ * @ns: the namespace passed from the context.
+ *
+ * First lookup if the document is already loaded into the parser context,
+ * check against recursion. If not found the resource is loaded and
+ * the content is preprocessed before being returned back to the caller.
+ *
+ * Returns the xmlRelaxNGIncludePtr or NULL in case of error
+ */
+static xmlRelaxNGIncludePtr
+xmlRelaxNGLoadInclude(xmlRelaxNGParserCtxtPtr ctxt, const xmlChar * URL,
+ xmlNodePtr node, const xmlChar * ns)
+{
+ xmlRelaxNGIncludePtr ret = NULL;
+ xmlDocPtr doc;
+ int i;
+ xmlNodePtr root, cur;
+
+#ifdef DEBUG_INCLUDE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRelaxNGLoadInclude(%s)\n", URL);
+#endif
+
+ /*
+ * check against recursion in the stack
+ */
+ for (i = 0; i < ctxt->incNr; i++) {
+ if (xmlStrEqual(ctxt->incTab[i]->href, URL)) {
+ xmlRngPErr(ctxt, NULL, XML_RNGP_INCLUDE_RECURSE,
+ "Detected an Include recursion for %s\n", URL,
+ NULL);
+ return (NULL);
+ }
+ }
+
+ /*
+ * load the document
+ */
+ doc = xmlReadFile((const char *) URL,NULL,0);
+ if (doc == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_PARSE_ERROR,
+ "xmlRelaxNG: could not load %s\n", URL, NULL);
+ return (NULL);
+ }
+#ifdef DEBUG_INCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Parsed %s Okay\n", URL);
+#endif
+
+ /*
+ * Allocate the document structures and register it first.
+ */
+ ret = (xmlRelaxNGIncludePtr) xmlMalloc(sizeof(xmlRelaxNGInclude));
+ if (ret == NULL) {
+ xmlRngPErrMemory(ctxt, "allocating include\n");
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGInclude));
+ ret->doc = doc;
+ ret->href = xmlStrdup(URL);
+ ret->next = ctxt->includes;
+ ctxt->includes = ret;
+
+ /*
+ * transmit the ns if needed
+ */
+ if (ns != NULL) {
+ root = xmlDocGetRootElement(doc);
+ if (root != NULL) {
+ if (xmlHasProp(root, BAD_CAST "ns") == NULL) {
+ xmlSetProp(root, BAD_CAST "ns", ns);
+ }
+ }
+ }
+
+ /*
+ * push it on the stack
+ */
+ xmlRelaxNGIncludePush(ctxt, ret);
+
+ /*
+ * Some preprocessing of the document content, this include recursing
+ * in the include stack.
+ */
+#ifdef DEBUG_INCLUDE
+ xmlGenericError(xmlGenericErrorContext, "cleanup of %s\n", URL);
+#endif
+
+ doc = xmlRelaxNGCleanupDoc(ctxt, doc);
+ if (doc == NULL) {
+ ctxt->inc = NULL;
+ return (NULL);
+ }
+
+ /*
+ * Pop up the include from the stack
+ */
+ xmlRelaxNGIncludePop(ctxt);
+
+#ifdef DEBUG_INCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Checking of %s\n", URL);
+#endif
+ /*
+ * Check that the top element is a grammar
+ */
+ root = xmlDocGetRootElement(doc);
+ if (root == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY,
+ "xmlRelaxNG: included document is empty %s\n", URL,
+ NULL);
+ return (NULL);
+ }
+ if (!IS_RELAXNG(root, "grammar")) {
+ xmlRngPErr(ctxt, node, XML_RNGP_GRAMMAR_MISSING,
+ "xmlRelaxNG: included document %s root is not a grammar\n",
+ URL, NULL);
+ return (NULL);
+ }
+
+ /*
+ * Elimination of redefined rules in the include.
+ */
+ cur = node->children;
+ while (cur != NULL) {
+ if (IS_RELAXNG(cur, "start")) {
+ int found = 0;
+
+ found =
+ xmlRelaxNGRemoveRedefine(ctxt, URL, root->children, NULL);
+ if (!found) {
+ xmlRngPErr(ctxt, node, XML_RNGP_START_MISSING,
+ "xmlRelaxNG: include %s has a start but not the included grammar\n",
+ URL, NULL);
+ }
+ } else if (IS_RELAXNG(cur, "define")) {
+ xmlChar *name;
+
+ name = xmlGetProp(cur, BAD_CAST "name");
+ if (name == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_NAME_MISSING,
+ "xmlRelaxNG: include %s has define without name\n",
+ URL, NULL);
+ } else {
+ int found;
+
+ xmlRelaxNGNormExtSpace(name);
+ found = xmlRelaxNGRemoveRedefine(ctxt, URL,
+ root->children, name);
+ if (!found) {
+ xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_MISSING,
+ "xmlRelaxNG: include %s has a define %s but not the included grammar\n",
+ URL, name);
+ }
+ xmlFree(name);
+ }
+ }
+ cur = cur->next;
+ }
+
+
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidErrorPush:
+ * @ctxt: the validation context
+ * @err: the error code
+ * @arg1: the first string argument
+ * @arg2: the second string argument
+ * @dup: arg need to be duplicated
+ *
+ * Pushes a new error on top of the error stack
+ *
+ * Returns 0 in case of error, the index in the stack otherwise
+ */
+static int
+xmlRelaxNGValidErrorPush(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidErr err, const xmlChar * arg1,
+ const xmlChar * arg2, int dup)
+{
+ xmlRelaxNGValidErrorPtr cur;
+
+#ifdef DEBUG_ERROR
+ xmlGenericError(xmlGenericErrorContext,
+ "Pushing error %d at %d on stack\n", err, ctxt->errNr);
+#endif
+ if (ctxt->errTab == NULL) {
+ ctxt->errMax = 8;
+ ctxt->errNr = 0;
+ ctxt->errTab =
+ (xmlRelaxNGValidErrorPtr) xmlMalloc(ctxt->errMax *
+ sizeof
+ (xmlRelaxNGValidError));
+ if (ctxt->errTab == NULL) {
+ xmlRngVErrMemory(ctxt, "pushing error\n");
+ return (0);
+ }
+ ctxt->err = NULL;
+ }
+ if (ctxt->errNr >= ctxt->errMax) {
+ ctxt->errMax *= 2;
+ ctxt->errTab =
+ (xmlRelaxNGValidErrorPtr) xmlRealloc(ctxt->errTab,
+ ctxt->errMax *
+ sizeof
+ (xmlRelaxNGValidError));
+ if (ctxt->errTab == NULL) {
+ xmlRngVErrMemory(ctxt, "pushing error\n");
+ return (0);
+ }
+ ctxt->err = &ctxt->errTab[ctxt->errNr - 1];
+ }
+ if ((ctxt->err != NULL) && (ctxt->state != NULL) &&
+ (ctxt->err->node == ctxt->state->node) && (ctxt->err->err == err))
+ return (ctxt->errNr);
+ cur = &ctxt->errTab[ctxt->errNr];
+ cur->err = err;
+ if (dup) {
+ cur->arg1 = xmlStrdup(arg1);
+ cur->arg2 = xmlStrdup(arg2);
+ cur->flags = ERROR_IS_DUP;
+ } else {
+ cur->arg1 = arg1;
+ cur->arg2 = arg2;
+ cur->flags = 0;
+ }
+ if (ctxt->state != NULL) {
+ cur->node = ctxt->state->node;
+ cur->seq = ctxt->state->seq;
+ } else {
+ cur->node = NULL;
+ cur->seq = NULL;
+ }
+ ctxt->err = cur;
+ return (ctxt->errNr++);
+}
+
+/**
+ * xmlRelaxNGValidErrorPop:
+ * @ctxt: the validation context
+ *
+ * Pops the top error from the error stack
+ */
+static void
+xmlRelaxNGValidErrorPop(xmlRelaxNGValidCtxtPtr ctxt)
+{
+ xmlRelaxNGValidErrorPtr cur;
+
+ if (ctxt->errNr <= 0) {
+ ctxt->err = NULL;
+ return;
+ }
+ ctxt->errNr--;
+ if (ctxt->errNr > 0)
+ ctxt->err = &ctxt->errTab[ctxt->errNr - 1];
+ else
+ ctxt->err = NULL;
+ cur = &ctxt->errTab[ctxt->errNr];
+ if (cur->flags & ERROR_IS_DUP) {
+ if (cur->arg1 != NULL)
+ xmlFree((xmlChar *) cur->arg1);
+ cur->arg1 = NULL;
+ if (cur->arg2 != NULL)
+ xmlFree((xmlChar *) cur->arg2);
+ cur->arg2 = NULL;
+ cur->flags = 0;
+ }
+}
+
+/**
+ * xmlRelaxNGDocumentPush:
+ * @ctxt: the parser context
+ * @value: the element doc
+ *
+ * Pushes a new doc on top of the doc stack
+ *
+ * Returns 0 in case of error, the index in the stack otherwise
+ */
+static int
+xmlRelaxNGDocumentPush(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGDocumentPtr value)
+{
+ if (ctxt->docTab == NULL) {
+ ctxt->docMax = 4;
+ ctxt->docNr = 0;
+ ctxt->docTab =
+ (xmlRelaxNGDocumentPtr *) xmlMalloc(ctxt->docMax *
+ sizeof(ctxt->docTab[0]));
+ if (ctxt->docTab == NULL) {
+ xmlRngPErrMemory(ctxt, "adding document\n");
+ return (0);
+ }
+ }
+ if (ctxt->docNr >= ctxt->docMax) {
+ ctxt->docMax *= 2;
+ ctxt->docTab =
+ (xmlRelaxNGDocumentPtr *) xmlRealloc(ctxt->docTab,
+ ctxt->docMax *
+ sizeof(ctxt->docTab[0]));
+ if (ctxt->docTab == NULL) {
+ xmlRngPErrMemory(ctxt, "adding document\n");
+ return (0);
+ }
+ }
+ ctxt->docTab[ctxt->docNr] = value;
+ ctxt->doc = value;
+ return (ctxt->docNr++);
+}
+
+/**
+ * xmlRelaxNGDocumentPop:
+ * @ctxt: the parser context
+ *
+ * Pops the top doc from the doc stack
+ *
+ * Returns the doc just removed
+ */
+static xmlRelaxNGDocumentPtr
+xmlRelaxNGDocumentPop(xmlRelaxNGParserCtxtPtr ctxt)
+{
+ xmlRelaxNGDocumentPtr ret;
+
+ if (ctxt->docNr <= 0)
+ return (0);
+ 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;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGLoadExternalRef:
+ * @ctxt: the parser context
+ * @URL: the normalized URL
+ * @ns: the inherited ns if any
+ *
+ * First lookup if the document is already loaded into the parser context,
+ * check against recursion. If not found the resource is loaded and
+ * the content is preprocessed before being returned back to the caller.
+ *
+ * Returns the xmlRelaxNGDocumentPtr or NULL in case of error
+ */
+static xmlRelaxNGDocumentPtr
+xmlRelaxNGLoadExternalRef(xmlRelaxNGParserCtxtPtr ctxt,
+ const xmlChar * URL, const xmlChar * ns)
+{
+ xmlRelaxNGDocumentPtr ret = NULL;
+ xmlDocPtr doc;
+ xmlNodePtr root;
+ int i;
+
+ /*
+ * check against recursion in the stack
+ */
+ for (i = 0; i < ctxt->docNr; i++) {
+ if (xmlStrEqual(ctxt->docTab[i]->href, URL)) {
+ xmlRngPErr(ctxt, NULL, XML_RNGP_EXTERNALREF_RECURSE,
+ "Detected an externalRef recursion for %s\n", URL,
+ NULL);
+ return (NULL);
+ }
+ }
+
+ /*
+ * load the document
+ */
+ doc = xmlReadFile((const char *) URL,NULL,0);
+ if (doc == NULL) {
+ xmlRngPErr(ctxt, NULL, XML_RNGP_PARSE_ERROR,
+ "xmlRelaxNG: could not load %s\n", URL, NULL);
+ return (NULL);
+ }
+
+ /*
+ * Allocate the document structures and register it first.
+ */
+ ret = (xmlRelaxNGDocumentPtr) xmlMalloc(sizeof(xmlRelaxNGDocument));
+ if (ret == NULL) {
+ xmlRngPErr(ctxt, (xmlNodePtr) doc, XML_ERR_NO_MEMORY,
+ "xmlRelaxNG: allocate memory for doc %s\n", URL, NULL);
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGDocument));
+ ret->doc = doc;
+ ret->href = xmlStrdup(URL);
+ ret->next = ctxt->documents;
+ ctxt->documents = ret;
+
+ /*
+ * transmit the ns if needed
+ */
+ if (ns != NULL) {
+ root = xmlDocGetRootElement(doc);
+ if (root != NULL) {
+ if (xmlHasProp(root, BAD_CAST "ns") == NULL) {
+ xmlSetProp(root, BAD_CAST "ns", ns);
+ }
+ }
+ }
+
+ /*
+ * push it on the stack and register it in the hash table
+ */
+ xmlRelaxNGDocumentPush(ctxt, ret);
+
+ /*
+ * Some preprocessing of the document content
+ */
+ doc = xmlRelaxNGCleanupDoc(ctxt, doc);
+ if (doc == NULL) {
+ ctxt->doc = NULL;
+ return (NULL);
+ }
+
+ xmlRelaxNGDocumentPop(ctxt);
+
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Error functions *
+ * *
+ ************************************************************************/
+
+#define VALID_ERR(a) xmlRelaxNGAddValidError(ctxt, a, NULL, NULL, 0);
+#define VALID_ERR2(a, b) xmlRelaxNGAddValidError(ctxt, a, b, NULL, 0);
+#define VALID_ERR3(a, b, c) xmlRelaxNGAddValidError(ctxt, a, b, c, 0);
+#define VALID_ERR2P(a, b) xmlRelaxNGAddValidError(ctxt, a, b, NULL, 1);
+#define VALID_ERR3P(a, b, c) xmlRelaxNGAddValidError(ctxt, a, b, c, 1);
+
+static const char *
+xmlRelaxNGDefName(xmlRelaxNGDefinePtr def)
+{
+ if (def == NULL)
+ return ("none");
+ switch (def->type) {
+ case XML_RELAXNG_EMPTY:
+ return ("empty");
+ case XML_RELAXNG_NOT_ALLOWED:
+ return ("notAllowed");
+ case XML_RELAXNG_EXCEPT:
+ return ("except");
+ case XML_RELAXNG_TEXT:
+ return ("text");
+ case XML_RELAXNG_ELEMENT:
+ return ("element");
+ case XML_RELAXNG_DATATYPE:
+ return ("datatype");
+ case XML_RELAXNG_VALUE:
+ return ("value");
+ case XML_RELAXNG_LIST:
+ return ("list");
+ case XML_RELAXNG_ATTRIBUTE:
+ return ("attribute");
+ case XML_RELAXNG_DEF:
+ return ("def");
+ case XML_RELAXNG_REF:
+ return ("ref");
+ case XML_RELAXNG_EXTERNALREF:
+ return ("externalRef");
+ case XML_RELAXNG_PARENTREF:
+ return ("parentRef");
+ case XML_RELAXNG_OPTIONAL:
+ return ("optional");
+ case XML_RELAXNG_ZEROORMORE:
+ return ("zeroOrMore");
+ case XML_RELAXNG_ONEORMORE:
+ return ("oneOrMore");
+ case XML_RELAXNG_CHOICE:
+ return ("choice");
+ case XML_RELAXNG_GROUP:
+ return ("group");
+ case XML_RELAXNG_INTERLEAVE:
+ return ("interleave");
+ case XML_RELAXNG_START:
+ return ("start");
+ case XML_RELAXNG_NOOP:
+ return ("noop");
+ case XML_RELAXNG_PARAM:
+ return ("param");
+ }
+ return ("unknown");
+}
+
+/**
+ * xmlRelaxNGGetErrorString:
+ * @err: the error code
+ * @arg1: the first string argument
+ * @arg2: the second string argument
+ *
+ * computes a formatted error string for the given error code and args
+ *
+ * Returns the error string, it must be deallocated by the caller
+ */
+static xmlChar *
+xmlRelaxNGGetErrorString(xmlRelaxNGValidErr err, const xmlChar * arg1,
+ const xmlChar * arg2)
+{
+ char msg[1000];
+
+ if (arg1 == NULL)
+ arg1 = BAD_CAST "";
+ if (arg2 == NULL)
+ arg2 = BAD_CAST "";
+
+ msg[0] = 0;
+ switch (err) {
+ case XML_RELAXNG_OK:
+ return (NULL);
+ case XML_RELAXNG_ERR_MEMORY:
+ return (xmlCharStrdup("out of memory\n"));
+ case XML_RELAXNG_ERR_TYPE:
+ snprintf(msg, 1000, "failed to validate type %s\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_TYPEVAL:
+ snprintf(msg, 1000, "Type %s doesn't allow value '%s'\n", arg1,
+ arg2);
+ break;
+ case XML_RELAXNG_ERR_DUPID:
+ snprintf(msg, 1000, "ID %s redefined\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_TYPECMP:
+ snprintf(msg, 1000, "failed to compare type %s\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_NOSTATE:
+ return (xmlCharStrdup("Internal error: no state\n"));
+ case XML_RELAXNG_ERR_NODEFINE:
+ return (xmlCharStrdup("Internal error: no define\n"));
+ case XML_RELAXNG_ERR_INTERNAL:
+ snprintf(msg, 1000, "Internal error: %s\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_LISTEXTRA:
+ snprintf(msg, 1000, "Extra data in list: %s\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_INTERNODATA:
+ return (xmlCharStrdup
+ ("Internal: interleave block has no data\n"));
+ case XML_RELAXNG_ERR_INTERSEQ:
+ return (xmlCharStrdup("Invalid sequence in interleave\n"));
+ case XML_RELAXNG_ERR_INTEREXTRA:
+ snprintf(msg, 1000, "Extra element %s in interleave\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_ELEMNAME:
+ snprintf(msg, 1000, "Expecting element %s, got %s\n", arg1,
+ arg2);
+ break;
+ case XML_RELAXNG_ERR_ELEMNONS:
+ snprintf(msg, 1000, "Expecting a namespace for element %s\n",
+ arg1);
+ break;
+ case XML_RELAXNG_ERR_ELEMWRONGNS:
+ snprintf(msg, 1000,
+ "Element %s has wrong namespace: expecting %s\n", arg1,
+ arg2);
+ break;
+ case XML_RELAXNG_ERR_ELEMWRONG:
+ snprintf(msg, 1000, "Did not expect element %s there\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_TEXTWRONG:
+ snprintf(msg, 1000,
+ "Did not expect text in element %s content\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_ELEMEXTRANS:
+ snprintf(msg, 1000, "Expecting no namespace for element %s\n",
+ arg1);
+ break;
+ case XML_RELAXNG_ERR_ELEMNOTEMPTY:
+ snprintf(msg, 1000, "Expecting element %s to be empty\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_NOELEM:
+ snprintf(msg, 1000, "Expecting an element %s, got nothing\n",
+ arg1);
+ break;
+ case XML_RELAXNG_ERR_NOTELEM:
+ return (xmlCharStrdup("Expecting an element got text\n"));
+ case XML_RELAXNG_ERR_ATTRVALID:
+ snprintf(msg, 1000, "Element %s failed to validate attributes\n",
+ arg1);
+ break;
+ case XML_RELAXNG_ERR_CONTENTVALID:
+ snprintf(msg, 1000, "Element %s failed to validate content\n",
+ arg1);
+ break;
+ case XML_RELAXNG_ERR_EXTRACONTENT:
+ snprintf(msg, 1000, "Element %s has extra content: %s\n",
+ arg1, arg2);
+ break;
+ case XML_RELAXNG_ERR_INVALIDATTR:
+ snprintf(msg, 1000, "Invalid attribute %s for element %s\n",
+ arg1, arg2);
+ break;
+ case XML_RELAXNG_ERR_LACKDATA:
+ snprintf(msg, 1000, "Datatype element %s contains no data\n",
+ arg1);
+ break;
+ case XML_RELAXNG_ERR_DATAELEM:
+ snprintf(msg, 1000, "Datatype element %s has child elements\n",
+ arg1);
+ break;
+ case XML_RELAXNG_ERR_VALELEM:
+ snprintf(msg, 1000, "Value element %s has child elements\n",
+ arg1);
+ break;
+ case XML_RELAXNG_ERR_LISTELEM:
+ snprintf(msg, 1000, "List element %s has child elements\n",
+ arg1);
+ break;
+ case XML_RELAXNG_ERR_DATATYPE:
+ snprintf(msg, 1000, "Error validating datatype %s\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_VALUE:
+ snprintf(msg, 1000, "Error validating value %s\n", arg1);
+ break;
+ case XML_RELAXNG_ERR_LIST:
+ return (xmlCharStrdup("Error validating list\n"));
+ case XML_RELAXNG_ERR_NOGRAMMAR:
+ return (xmlCharStrdup("No top grammar defined\n"));
+ case XML_RELAXNG_ERR_EXTRADATA:
+ return (xmlCharStrdup("Extra data in the document\n"));
+ default:
+ return (xmlCharStrdup("Unknown error !\n"));
+ }
+ if (msg[0] == 0) {
+ snprintf(msg, 1000, "Unknown error code %d\n", err);
+ }
+ msg[1000 - 1] = 0;
+ return (xmlStrdup((xmlChar *) msg));
+}
+
+/**
+ * xmlRelaxNGShowValidError:
+ * @ctxt: the validation context
+ * @err: the error number
+ * @node: the node
+ * @child: the node child generating the problem.
+ * @arg1: the first argument
+ * @arg2: the second argument
+ *
+ * Show a validation error.
+ */
+static void
+xmlRelaxNGShowValidError(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidErr err, xmlNodePtr node,
+ xmlNodePtr child, const xmlChar * arg1,
+ const xmlChar * arg2)
+{
+ xmlChar *msg;
+
+ if (ctxt->error == NULL)
+ return;
+
+#ifdef DEBUG_ERROR
+ xmlGenericError(xmlGenericErrorContext, "Show error %d\n", err);
+#endif
+ msg = xmlRelaxNGGetErrorString(err, arg1, arg2);
+ if (msg == NULL)
+ return;
+
+ if (ctxt->errNo == XML_RELAXNG_OK)
+ ctxt->errNo = err;
+ xmlRngVErr(ctxt, (child == NULL ? node : child), err,
+ (const char *) msg, arg1, arg2);
+ xmlFree(msg);
+}
+
+/**
+ * xmlRelaxNGPopErrors:
+ * @ctxt: the validation context
+ * @level: the error level in the stack
+ *
+ * pop and discard all errors until the given level is reached
+ */
+static void
+xmlRelaxNGPopErrors(xmlRelaxNGValidCtxtPtr ctxt, int level)
+{
+ int i;
+ xmlRelaxNGValidErrorPtr err;
+
+#ifdef DEBUG_ERROR
+ xmlGenericError(xmlGenericErrorContext,
+ "Pop errors till level %d\n", level);
+#endif
+ for (i = level; i < ctxt->errNr; i++) {
+ err = &ctxt->errTab[i];
+ if (err->flags & ERROR_IS_DUP) {
+ if (err->arg1 != NULL)
+ xmlFree((xmlChar *) err->arg1);
+ err->arg1 = NULL;
+ if (err->arg2 != NULL)
+ xmlFree((xmlChar *) err->arg2);
+ err->arg2 = NULL;
+ err->flags = 0;
+ }
+ }
+ ctxt->errNr = level;
+ if (ctxt->errNr <= 0)
+ ctxt->err = NULL;
+}
+
+/**
+ * xmlRelaxNGDumpValidError:
+ * @ctxt: the validation context
+ *
+ * Show all validation error over a given index.
+ */
+static void
+xmlRelaxNGDumpValidError(xmlRelaxNGValidCtxtPtr ctxt)
+{
+ int i, j, k;
+ xmlRelaxNGValidErrorPtr err, dup;
+
+#ifdef DEBUG_ERROR
+ xmlGenericError(xmlGenericErrorContext,
+ "Dumping error stack %d errors\n", ctxt->errNr);
+#endif
+ for (i = 0, k = 0; i < ctxt->errNr; i++) {
+ err = &ctxt->errTab[i];
+ if (k < MAX_ERROR) {
+ for (j = 0; j < i; j++) {
+ dup = &ctxt->errTab[j];
+ if ((err->err == dup->err) && (err->node == dup->node) &&
+ (xmlStrEqual(err->arg1, dup->arg1)) &&
+ (xmlStrEqual(err->arg2, dup->arg2))) {
+ goto skip;
+ }
+ }
+ xmlRelaxNGShowValidError(ctxt, err->err, err->node, err->seq,
+ err->arg1, err->arg2);
+ k++;
+ }
+ skip:
+ if (err->flags & ERROR_IS_DUP) {
+ if (err->arg1 != NULL)
+ xmlFree((xmlChar *) err->arg1);
+ err->arg1 = NULL;
+ if (err->arg2 != NULL)
+ xmlFree((xmlChar *) err->arg2);
+ err->arg2 = NULL;
+ err->flags = 0;
+ }
+ }
+ ctxt->errNr = 0;
+}
+
+/**
+ * xmlRelaxNGAddValidError:
+ * @ctxt: the validation context
+ * @err: the error number
+ * @arg1: the first argument
+ * @arg2: the second argument
+ * @dup: need to dup the args
+ *
+ * Register a validation error, either generating it if it's sure
+ * or stacking it for later handling if unsure.
+ */
+static void
+xmlRelaxNGAddValidError(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidErr err, const xmlChar * arg1,
+ const xmlChar * arg2, int dup)
+{
+ if ((ctxt == NULL) || (ctxt->error == NULL))
+ return;
+
+#ifdef DEBUG_ERROR
+ xmlGenericError(xmlGenericErrorContext, "Adding error %d\n", err);
+#endif
+ /*
+ * generate the error directly
+ */
+ if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) {
+ xmlNodePtr node, seq;
+
+ /*
+ * Flush first any stacked error which might be the
+ * real cause of the problem.
+ */
+ if (ctxt->errNr != 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ if (ctxt->state != NULL) {
+ node = ctxt->state->node;
+ seq = ctxt->state->seq;
+ } else {
+ node = seq = NULL;
+ }
+ xmlRelaxNGShowValidError(ctxt, err, node, seq, arg1, arg2);
+ }
+ /*
+ * Stack the error for later processing if needed
+ */
+ else {
+ xmlRelaxNGValidErrorPush(ctxt, err, arg1, arg2, dup);
+ }
+}
+
+
+/************************************************************************
+ * *
+ * Type library hooks *
+ * *
+ ************************************************************************/
+static xmlChar *xmlRelaxNGNormalize(xmlRelaxNGValidCtxtPtr ctxt,
+ const xmlChar * str);
+
+/**
+ * xmlRelaxNGSchemaTypeHave:
+ * @data: data needed for the library
+ * @type: the type name
+ *
+ * Check if the given type is provided by
+ * the W3C XMLSchema Datatype library.
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+static int
+xmlRelaxNGSchemaTypeHave(void *data ATTRIBUTE_UNUSED, const xmlChar * type)
+{
+ xmlSchemaTypePtr typ;
+
+ if (type == NULL)
+ return (-1);
+ typ = xmlSchemaGetPredefinedType(type,
+ BAD_CAST
+ "http://www.w3.org/2001/XMLSchema");
+ if (typ == NULL)
+ return (0);
+ return (1);
+}
+
+/**
+ * xmlRelaxNGSchemaTypeCheck:
+ * @data: data needed for the library
+ * @type: the type name
+ * @value: the value to check
+ * @node: the node
+ *
+ * Check if the given type and value are validated by
+ * the W3C XMLSchema Datatype library.
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+static int
+xmlRelaxNGSchemaTypeCheck(void *data ATTRIBUTE_UNUSED,
+ const xmlChar * type,
+ const xmlChar * value,
+ void **result, xmlNodePtr node)
+{
+ xmlSchemaTypePtr typ;
+ int ret;
+
+ if ((type == NULL) || (value == NULL))
+ return (-1);
+ typ = xmlSchemaGetPredefinedType(type,
+ BAD_CAST
+ "http://www.w3.org/2001/XMLSchema");
+ if (typ == NULL)
+ return (-1);
+ ret = xmlSchemaValPredefTypeNode(typ, value,
+ (xmlSchemaValPtr *) result, node);
+ if (ret == 2) /* special ID error code */
+ return (2);
+ if (ret == 0)
+ return (1);
+ if (ret > 0)
+ return (0);
+ return (-1);
+}
+
+/**
+ * xmlRelaxNGSchemaFacetCheck:
+ * @data: data needed for the library
+ * @type: the type name
+ * @facet: the facet name
+ * @val: the facet value
+ * @strval: the string value
+ * @value: the value to check
+ *
+ * Function provided by a type library to check a value facet
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+static int
+xmlRelaxNGSchemaFacetCheck(void *data ATTRIBUTE_UNUSED,
+ const xmlChar * type, const xmlChar * facetname,
+ const xmlChar * val, const xmlChar * strval,
+ void *value)
+{
+ xmlSchemaFacetPtr facet;
+ xmlSchemaTypePtr typ;
+ int ret;
+
+ if ((type == NULL) || (strval == NULL))
+ return (-1);
+ typ = xmlSchemaGetPredefinedType(type,
+ BAD_CAST
+ "http://www.w3.org/2001/XMLSchema");
+ if (typ == NULL)
+ return (-1);
+
+ facet = xmlSchemaNewFacet();
+ if (facet == NULL)
+ return (-1);
+
+ if (xmlStrEqual(facetname, BAD_CAST "minInclusive")) {
+ facet->type = XML_SCHEMA_FACET_MININCLUSIVE;
+ } else if (xmlStrEqual(facetname, BAD_CAST "minExclusive")) {
+ facet->type = XML_SCHEMA_FACET_MINEXCLUSIVE;
+ } else if (xmlStrEqual(facetname, BAD_CAST "maxInclusive")) {
+ facet->type = XML_SCHEMA_FACET_MAXINCLUSIVE;
+ } else if (xmlStrEqual(facetname, BAD_CAST "maxExclusive")) {
+ facet->type = XML_SCHEMA_FACET_MAXEXCLUSIVE;
+ } else if (xmlStrEqual(facetname, BAD_CAST "totalDigits")) {
+ facet->type = XML_SCHEMA_FACET_TOTALDIGITS;
+ } else if (xmlStrEqual(facetname, BAD_CAST "fractionDigits")) {
+ facet->type = XML_SCHEMA_FACET_FRACTIONDIGITS;
+ } else if (xmlStrEqual(facetname, BAD_CAST "pattern")) {
+ facet->type = XML_SCHEMA_FACET_PATTERN;
+ } else if (xmlStrEqual(facetname, BAD_CAST "enumeration")) {
+ facet->type = XML_SCHEMA_FACET_ENUMERATION;
+ } else if (xmlStrEqual(facetname, BAD_CAST "whiteSpace")) {
+ facet->type = XML_SCHEMA_FACET_WHITESPACE;
+ } else if (xmlStrEqual(facetname, BAD_CAST "length")) {
+ facet->type = XML_SCHEMA_FACET_LENGTH;
+ } else if (xmlStrEqual(facetname, BAD_CAST "maxLength")) {
+ facet->type = XML_SCHEMA_FACET_MAXLENGTH;
+ } else if (xmlStrEqual(facetname, BAD_CAST "minLength")) {
+ facet->type = XML_SCHEMA_FACET_MINLENGTH;
+ } else {
+ xmlSchemaFreeFacet(facet);
+ return (-1);
+ }
+ facet->value = val;
+ ret = xmlSchemaCheckFacet(facet, typ, NULL, type);
+ if (ret != 0) {
+ xmlSchemaFreeFacet(facet);
+ return (-1);
+ }
+ ret = xmlSchemaValidateFacet(typ, facet, strval, value);
+ xmlSchemaFreeFacet(facet);
+ if (ret != 0)
+ return (-1);
+ return (0);
+}
+
+/**
+ * xmlRelaxNGSchemaFreeValue:
+ * @data: data needed for the library
+ * @value: the value to free
+ *
+ * Function provided by a type library to free a Schemas value
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+static void
+xmlRelaxNGSchemaFreeValue(void *data ATTRIBUTE_UNUSED, void *value)
+{
+ xmlSchemaFreeValue(value);
+}
+
+/**
+ * xmlRelaxNGSchemaTypeCompare:
+ * @data: data needed for the library
+ * @type: the type name
+ * @value1: the first value
+ * @value2: the second value
+ *
+ * Compare two values for equality accordingly a type from the W3C XMLSchema
+ * Datatype library.
+ *
+ * Returns 1 if equal, 0 if no and -1 in case of error.
+ */
+static int
+xmlRelaxNGSchemaTypeCompare(void *data ATTRIBUTE_UNUSED,
+ const xmlChar * type,
+ const xmlChar * value1,
+ xmlNodePtr ctxt1,
+ void *comp1,
+ const xmlChar * value2, xmlNodePtr ctxt2)
+{
+ int ret;
+ xmlSchemaTypePtr typ;
+ xmlSchemaValPtr res1 = NULL, res2 = NULL;
+
+ if ((type == NULL) || (value1 == NULL) || (value2 == NULL))
+ return (-1);
+ typ = xmlSchemaGetPredefinedType(type,
+ BAD_CAST
+ "http://www.w3.org/2001/XMLSchema");
+ if (typ == NULL)
+ return (-1);
+ if (comp1 == NULL) {
+ ret = xmlSchemaValPredefTypeNode(typ, value1, &res1, ctxt1);
+ if (ret != 0)
+ return (-1);
+ if (res1 == NULL)
+ return (-1);
+ } else {
+ res1 = (xmlSchemaValPtr) comp1;
+ }
+ ret = xmlSchemaValPredefTypeNode(typ, value2, &res2, ctxt2);
+ if (ret != 0) {
+ xmlSchemaFreeValue(res1);
+ return (-1);
+ }
+ if (res1 == NULL) {
+ xmlSchemaFreeValue(res1);
+ return (-1);
+ }
+ ret = xmlSchemaCompareValues(res1, res2);
+ if (res1 != (xmlSchemaValPtr) comp1)
+ xmlSchemaFreeValue(res1);
+ xmlSchemaFreeValue(res2);
+ if (ret == -2)
+ return (-1);
+ if (ret == 0)
+ return (1);
+ return (0);
+}
+
+/**
+ * xmlRelaxNGDefaultTypeHave:
+ * @data: data needed for the library
+ * @type: the type name
+ *
+ * Check if the given type is provided by
+ * the default datatype library.
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+static int
+xmlRelaxNGDefaultTypeHave(void *data ATTRIBUTE_UNUSED,
+ const xmlChar * type)
+{
+ if (type == NULL)
+ return (-1);
+ if (xmlStrEqual(type, BAD_CAST "string"))
+ return (1);
+ if (xmlStrEqual(type, BAD_CAST "token"))
+ return (1);
+ return (0);
+}
+
+/**
+ * xmlRelaxNGDefaultTypeCheck:
+ * @data: data needed for the library
+ * @type: the type name
+ * @value: the value to check
+ * @node: the node
+ *
+ * Check if the given type and value are validated by
+ * the default datatype library.
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+static int
+xmlRelaxNGDefaultTypeCheck(void *data ATTRIBUTE_UNUSED,
+ const xmlChar * type ATTRIBUTE_UNUSED,
+ const xmlChar * value ATTRIBUTE_UNUSED,
+ void **result ATTRIBUTE_UNUSED,
+ xmlNodePtr node ATTRIBUTE_UNUSED)
+{
+ if (value == NULL)
+ return (-1);
+ if (xmlStrEqual(type, BAD_CAST "string"))
+ return (1);
+ if (xmlStrEqual(type, BAD_CAST "token")) {
+ return (1);
+ }
+
+ return (0);
+}
+
+/**
+ * xmlRelaxNGDefaultTypeCompare:
+ * @data: data needed for the library
+ * @type: the type name
+ * @value1: the first value
+ * @value2: the second value
+ *
+ * Compare two values accordingly a type from the default
+ * datatype library.
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+static int
+xmlRelaxNGDefaultTypeCompare(void *data ATTRIBUTE_UNUSED,
+ const xmlChar * type,
+ const xmlChar * value1,
+ xmlNodePtr ctxt1 ATTRIBUTE_UNUSED,
+ void *comp1 ATTRIBUTE_UNUSED,
+ const xmlChar * value2,
+ xmlNodePtr ctxt2 ATTRIBUTE_UNUSED)
+{
+ int ret = -1;
+
+ if (xmlStrEqual(type, BAD_CAST "string")) {
+ ret = xmlStrEqual(value1, value2);
+ } else if (xmlStrEqual(type, BAD_CAST "token")) {
+ if (!xmlStrEqual(value1, value2)) {
+ xmlChar *nval, *nvalue;
+
+ /*
+ * TODO: trivial optimizations are possible by
+ * computing at compile-time
+ */
+ nval = xmlRelaxNGNormalize(NULL, value1);
+ nvalue = xmlRelaxNGNormalize(NULL, value2);
+
+ if ((nval == NULL) || (nvalue == NULL))
+ ret = -1;
+ else if (xmlStrEqual(nval, nvalue))
+ ret = 1;
+ else
+ ret = 0;
+ if (nval != NULL)
+ xmlFree(nval);
+ if (nvalue != NULL)
+ xmlFree(nvalue);
+ } else
+ ret = 1;
+ }
+ return (ret);
+}
+
+static int xmlRelaxNGTypeInitialized = 0;
+static xmlHashTablePtr xmlRelaxNGRegisteredTypes = NULL;
+
+/**
+ * xmlRelaxNGFreeTypeLibrary:
+ * @lib: the type library structure
+ * @namespace: the URI bound to the library
+ *
+ * Free the structure associated to the type library
+ */
+static void
+xmlRelaxNGFreeTypeLibrary(xmlRelaxNGTypeLibraryPtr lib,
+ const xmlChar * namespace ATTRIBUTE_UNUSED)
+{
+ if (lib == NULL)
+ return;
+ if (lib->namespace != NULL)
+ xmlFree((xmlChar *) lib->namespace);
+ xmlFree(lib);
+}
+
+/**
+ * xmlRelaxNGRegisterTypeLibrary:
+ * @namespace: the URI bound to the library
+ * @data: data associated to the library
+ * @have: the provide function
+ * @check: the checking function
+ * @comp: the comparison function
+ *
+ * Register a new type library
+ *
+ * Returns 0 in case of success and -1 in case of error.
+ */
+static int
+xmlRelaxNGRegisterTypeLibrary(const xmlChar * namespace, void *data,
+ xmlRelaxNGTypeHave have,
+ xmlRelaxNGTypeCheck check,
+ xmlRelaxNGTypeCompare comp,
+ xmlRelaxNGFacetCheck facet,
+ xmlRelaxNGTypeFree freef)
+{
+ xmlRelaxNGTypeLibraryPtr lib;
+ int ret;
+
+ if ((xmlRelaxNGRegisteredTypes == NULL) || (namespace == NULL) ||
+ (check == NULL) || (comp == NULL))
+ return (-1);
+ if (xmlHashLookup(xmlRelaxNGRegisteredTypes, namespace) != NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Relax-NG types library '%s' already registered\n",
+ namespace);
+ return (-1);
+ }
+ lib =
+ (xmlRelaxNGTypeLibraryPtr)
+ xmlMalloc(sizeof(xmlRelaxNGTypeLibrary));
+ if (lib == NULL) {
+ xmlRngVErrMemory(NULL, "adding types library\n");
+ return (-1);
+ }
+ memset(lib, 0, sizeof(xmlRelaxNGTypeLibrary));
+ lib->namespace = xmlStrdup(namespace);
+ lib->data = data;
+ lib->have = have;
+ lib->comp = comp;
+ lib->check = check;
+ lib->facet = facet;
+ lib->freef = freef;
+ ret = xmlHashAddEntry(xmlRelaxNGRegisteredTypes, namespace, lib);
+ if (ret < 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Relax-NG types library failed to register '%s'\n",
+ namespace);
+ xmlRelaxNGFreeTypeLibrary(lib, namespace);
+ return (-1);
+ }
+ return (0);
+}
+
+/**
+ * xmlRelaxNGInitTypes:
+ *
+ * Initilize the default type libraries.
+ *
+ * Returns 0 in case of success and -1 in case of error.
+ */
+static int
+xmlRelaxNGInitTypes(void)
+{
+ if (xmlRelaxNGTypeInitialized != 0)
+ return (0);
+ xmlRelaxNGRegisteredTypes = xmlHashCreate(10);
+ if (xmlRelaxNGRegisteredTypes == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to allocate sh table for Relax-NG types\n");
+ return (-1);
+ }
+ xmlRelaxNGRegisterTypeLibrary(BAD_CAST
+ "http://www.w3.org/2001/XMLSchema-datatypes",
+ NULL, xmlRelaxNGSchemaTypeHave,
+ xmlRelaxNGSchemaTypeCheck,
+ xmlRelaxNGSchemaTypeCompare,
+ xmlRelaxNGSchemaFacetCheck,
+ xmlRelaxNGSchemaFreeValue);
+ xmlRelaxNGRegisterTypeLibrary(xmlRelaxNGNs, NULL,
+ xmlRelaxNGDefaultTypeHave,
+ xmlRelaxNGDefaultTypeCheck,
+ xmlRelaxNGDefaultTypeCompare, NULL,
+ NULL);
+ xmlRelaxNGTypeInitialized = 1;
+ return (0);
+}
+
+/**
+ * xmlRelaxNGCleanupTypes:
+ *
+ * Cleanup the default Schemas type library associated to RelaxNG
+ */
+void
+xmlRelaxNGCleanupTypes(void)
+{
+ xmlSchemaCleanupTypes();
+ if (xmlRelaxNGTypeInitialized == 0)
+ return;
+ xmlHashFree(xmlRelaxNGRegisteredTypes, (xmlHashDeallocator)
+ xmlRelaxNGFreeTypeLibrary);
+ xmlRelaxNGTypeInitialized = 0;
+}
+
+/************************************************************************
+ * *
+ * Compiling element content into regexp *
+ * *
+ * Sometime the element content can be compiled into a pure regexp, *
+ * This allows a faster execution and streamability at that level *
+ * *
+ ************************************************************************/
+
+static int xmlRelaxNGTryCompile(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr def);
+
+/**
+ * xmlRelaxNGIsCompileable:
+ * @define: the definition to check
+ *
+ * Check if a definition is nullable.
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error
+ */
+static int
+xmlRelaxNGIsCompileable(xmlRelaxNGDefinePtr def)
+{
+ int ret = -1;
+
+ if (def == NULL) {
+ return (-1);
+ }
+ if ((def->type != XML_RELAXNG_ELEMENT) &&
+ (def->dflags & IS_COMPILABLE))
+ return (1);
+ if ((def->type != XML_RELAXNG_ELEMENT) &&
+ (def->dflags & IS_NOT_COMPILABLE))
+ return (0);
+ switch (def->type) {
+ case XML_RELAXNG_NOOP:
+ ret = xmlRelaxNGIsCompileable(def->content);
+ break;
+ case XML_RELAXNG_TEXT:
+ case XML_RELAXNG_EMPTY:
+ ret = 1;
+ break;
+ case XML_RELAXNG_ELEMENT:
+ /*
+ * Check if the element content is compileable
+ */
+ if (((def->dflags & IS_NOT_COMPILABLE) == 0) &&
+ ((def->dflags & IS_COMPILABLE) == 0)) {
+ xmlRelaxNGDefinePtr list;
+
+ list = def->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGIsCompileable(list);
+ if (ret != 1)
+ break;
+ list = list->next;
+ }
+ if (ret == 0)
+ def->dflags |= IS_NOT_COMPILABLE;
+ if (ret == 1)
+ def->dflags |= IS_COMPILABLE;
+#ifdef DEBUG_COMPILE
+ if (ret == 1) {
+ xmlGenericError(xmlGenericErrorContext,
+ "element content for %s is compilable\n",
+ def->name);
+ } else if (ret == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "element content for %s is not compilable\n",
+ def->name);
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Problem in RelaxNGIsCompileable for element %s\n",
+ def->name);
+ }
+#endif
+ }
+ /*
+ * All elements return a compileable status unless they
+ * are generic like anyName
+ */
+ if ((def->nameClass != NULL) || (def->name == NULL))
+ ret = 0;
+ else
+ ret = 1;
+ return (ret);
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_PARENTREF:
+ if (def->depth == -20) {
+ return (1);
+ } else {
+ xmlRelaxNGDefinePtr list;
+
+ def->depth = -20;
+ list = def->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGIsCompileable(list);
+ if (ret != 1)
+ break;
+ list = list->next;
+ }
+ }
+ break;
+ case XML_RELAXNG_START:
+ case XML_RELAXNG_OPTIONAL:
+ case XML_RELAXNG_ZEROORMORE:
+ case XML_RELAXNG_ONEORMORE:
+ case XML_RELAXNG_CHOICE:
+ case XML_RELAXNG_GROUP:
+ case XML_RELAXNG_DEF:{
+ xmlRelaxNGDefinePtr list;
+
+ list = def->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGIsCompileable(list);
+ if (ret != 1)
+ break;
+ list = list->next;
+ }
+ break;
+ }
+ case XML_RELAXNG_EXCEPT:
+ case XML_RELAXNG_ATTRIBUTE:
+ case XML_RELAXNG_INTERLEAVE:
+ case XML_RELAXNG_DATATYPE:
+ case XML_RELAXNG_LIST:
+ case XML_RELAXNG_PARAM:
+ case XML_RELAXNG_VALUE:
+ ret = 0;
+ break;
+ case XML_RELAXNG_NOT_ALLOWED:
+ ret = -1;
+ break;
+ }
+ if (ret == 0)
+ def->dflags |= IS_NOT_COMPILABLE;
+ if (ret == 1)
+ def->dflags |= IS_COMPILABLE;
+#ifdef DEBUG_COMPILE
+ if (ret == 1) {
+ xmlGenericError(xmlGenericErrorContext,
+ "RelaxNGIsCompileable %s : true\n",
+ xmlRelaxNGDefName(def));
+ } else if (ret == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "RelaxNGIsCompileable %s : false\n",
+ xmlRelaxNGDefName(def));
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Problem in RelaxNGIsCompileable %s\n",
+ xmlRelaxNGDefName(def));
+ }
+#endif
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGCompile:
+ * ctxt: the RelaxNG parser context
+ * @define: the definition tree to compile
+ *
+ * Compile the set of definitions, it works recursively, till the
+ * element boundaries, where it tries to compile the content if possible
+ *
+ * Returns 0 if success and -1 in case of error
+ */
+static int
+xmlRelaxNGCompile(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGDefinePtr def)
+{
+ int ret = 0;
+ xmlRelaxNGDefinePtr list;
+
+ if ((ctxt == NULL) || (def == NULL))
+ return (-1);
+
+ switch (def->type) {
+ case XML_RELAXNG_START:
+ if ((xmlRelaxNGIsCompileable(def) == 1) && (def->depth != -25)) {
+ xmlAutomataPtr oldam = ctxt->am;
+ xmlAutomataStatePtr oldstate = ctxt->state;
+
+ def->depth = -25;
+
+ list = def->content;
+ ctxt->am = xmlNewAutomata();
+ if (ctxt->am == NULL)
+ return (-1);
+ ctxt->state = xmlAutomataGetInitState(ctxt->am);
+ while (list != NULL) {
+ xmlRelaxNGCompile(ctxt, list);
+ list = list->next;
+ }
+ xmlAutomataSetFinalState(ctxt->am, ctxt->state);
+ def->contModel = xmlAutomataCompile(ctxt->am);
+ xmlRegexpIsDeterminist(def->contModel);
+
+ xmlFreeAutomata(ctxt->am);
+ ctxt->state = oldstate;
+ ctxt->am = oldam;
+ }
+ break;
+ case XML_RELAXNG_ELEMENT:
+ if ((ctxt->am != NULL) && (def->name != NULL)) {
+ ctxt->state = xmlAutomataNewTransition2(ctxt->am,
+ ctxt->state, NULL,
+ def->name, def->ns,
+ def);
+ }
+ if ((def->dflags & IS_COMPILABLE) && (def->depth != -25)) {
+ xmlAutomataPtr oldam = ctxt->am;
+ xmlAutomataStatePtr oldstate = ctxt->state;
+
+ def->depth = -25;
+
+ list = def->content;
+ ctxt->am = xmlNewAutomata();
+ if (ctxt->am == NULL)
+ return (-1);
+ ctxt->state = xmlAutomataGetInitState(ctxt->am);
+ while (list != NULL) {
+ xmlRelaxNGCompile(ctxt, list);
+ list = list->next;
+ }
+ xmlAutomataSetFinalState(ctxt->am, ctxt->state);
+ def->contModel = xmlAutomataCompile(ctxt->am);
+ if (!xmlRegexpIsDeterminist(def->contModel)) {
+ /*
+ * we can only use the automata if it is determinist
+ */
+ xmlRegFreeRegexp(def->contModel);
+ def->contModel = NULL;
+ }
+ xmlFreeAutomata(ctxt->am);
+ ctxt->state = oldstate;
+ ctxt->am = oldam;
+ } else {
+ xmlAutomataPtr oldam = ctxt->am;
+
+ /*
+ * we can't build the content model for this element content
+ * but it still might be possible to build it for some of its
+ * children, recurse.
+ */
+ ret = xmlRelaxNGTryCompile(ctxt, def);
+ ctxt->am = oldam;
+ }
+ break;
+ case XML_RELAXNG_NOOP:
+ ret = xmlRelaxNGCompile(ctxt, def->content);
+ break;
+ case XML_RELAXNG_OPTIONAL:{
+ xmlAutomataStatePtr oldstate = ctxt->state;
+
+ xmlRelaxNGCompile(ctxt, def->content);
+ xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
+ break;
+ }
+ case XML_RELAXNG_ZEROORMORE:{
+ xmlAutomataStatePtr oldstate;
+
+ ctxt->state =
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
+ oldstate = ctxt->state;
+ list = def->content;
+ while (list != NULL) {
+ xmlRelaxNGCompile(ctxt, list);
+ list = list->next;
+ }
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldstate);
+ ctxt->state =
+ xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
+ break;
+ }
+ case XML_RELAXNG_ONEORMORE:{
+ xmlAutomataStatePtr oldstate;
+
+ list = def->content;
+ while (list != NULL) {
+ xmlRelaxNGCompile(ctxt, list);
+ list = list->next;
+ }
+ oldstate = ctxt->state;
+ list = def->content;
+ while (list != NULL) {
+ xmlRelaxNGCompile(ctxt, list);
+ list = list->next;
+ }
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldstate);
+ ctxt->state =
+ xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
+ break;
+ }
+ case XML_RELAXNG_CHOICE:{
+ xmlAutomataStatePtr target = NULL;
+ xmlAutomataStatePtr oldstate = ctxt->state;
+
+ list = def->content;
+ while (list != NULL) {
+ ctxt->state = oldstate;
+ ret = xmlRelaxNGCompile(ctxt, list);
+ if (ret != 0)
+ break;
+ if (target == NULL)
+ target = ctxt->state;
+ else {
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state,
+ target);
+ }
+ list = list->next;
+ }
+ ctxt->state = target;
+
+ break;
+ }
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_PARENTREF:
+ case XML_RELAXNG_GROUP:
+ case XML_RELAXNG_DEF:
+ list = def->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGCompile(ctxt, list);
+ if (ret != 0)
+ break;
+ list = list->next;
+ }
+ break;
+ case XML_RELAXNG_TEXT:{
+ xmlAutomataStatePtr oldstate;
+
+ ctxt->state =
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
+ oldstate = ctxt->state;
+ xmlRelaxNGCompile(ctxt, def->content);
+ xmlAutomataNewTransition(ctxt->am, ctxt->state,
+ ctxt->state, BAD_CAST "#text",
+ NULL);
+ ctxt->state =
+ xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
+ break;
+ }
+ case XML_RELAXNG_EMPTY:
+ ctxt->state =
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
+ break;
+ case XML_RELAXNG_EXCEPT:
+ case XML_RELAXNG_ATTRIBUTE:
+ case XML_RELAXNG_INTERLEAVE:
+ case XML_RELAXNG_NOT_ALLOWED:
+ case XML_RELAXNG_DATATYPE:
+ case XML_RELAXNG_LIST:
+ case XML_RELAXNG_PARAM:
+ case XML_RELAXNG_VALUE:
+ /* This should not happen and generate an internal error */
+ fprintf(stderr, "RNG internal error trying to compile %s\n",
+ xmlRelaxNGDefName(def));
+ break;
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGTryCompile:
+ * ctxt: the RelaxNG parser context
+ * @define: the definition tree to compile
+ *
+ * Try to compile the set of definitions, it works recursively,
+ * possibly ignoring parts which cannot be compiled.
+ *
+ * Returns 0 if success and -1 in case of error
+ */
+static int
+xmlRelaxNGTryCompile(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGDefinePtr def)
+{
+ int ret = 0;
+ xmlRelaxNGDefinePtr list;
+
+ if ((ctxt == NULL) || (def == NULL))
+ return (-1);
+
+ if ((def->type == XML_RELAXNG_START) ||
+ (def->type == XML_RELAXNG_ELEMENT)) {
+ ret = xmlRelaxNGIsCompileable(def);
+ if ((def->dflags & IS_COMPILABLE) && (def->depth != -25)) {
+ ctxt->am = NULL;
+ ret = xmlRelaxNGCompile(ctxt, def);
+#ifdef DEBUG_PROGRESSIVE
+ if (ret == 0) {
+ if (def->type == XML_RELAXNG_START)
+ xmlGenericError(xmlGenericErrorContext,
+ "compiled the start\n");
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "compiled element %s\n", def->name);
+ } else {
+ if (def->type == XML_RELAXNG_START)
+ xmlGenericError(xmlGenericErrorContext,
+ "failed to compile the start\n");
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "failed to compile element %s\n",
+ def->name);
+ }
+#endif
+ return (ret);
+ }
+ }
+ switch (def->type) {
+ case XML_RELAXNG_NOOP:
+ ret = xmlRelaxNGTryCompile(ctxt, def->content);
+ break;
+ case XML_RELAXNG_TEXT:
+ case XML_RELAXNG_DATATYPE:
+ case XML_RELAXNG_LIST:
+ case XML_RELAXNG_PARAM:
+ case XML_RELAXNG_VALUE:
+ case XML_RELAXNG_EMPTY:
+ case XML_RELAXNG_ELEMENT:
+ ret = 0;
+ break;
+ case XML_RELAXNG_OPTIONAL:
+ case XML_RELAXNG_ZEROORMORE:
+ case XML_RELAXNG_ONEORMORE:
+ case XML_RELAXNG_CHOICE:
+ case XML_RELAXNG_GROUP:
+ case XML_RELAXNG_DEF:
+ case XML_RELAXNG_START:
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_PARENTREF:
+ list = def->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGTryCompile(ctxt, list);
+ if (ret != 0)
+ break;
+ list = list->next;
+ }
+ break;
+ case XML_RELAXNG_EXCEPT:
+ case XML_RELAXNG_ATTRIBUTE:
+ case XML_RELAXNG_INTERLEAVE:
+ case XML_RELAXNG_NOT_ALLOWED:
+ ret = 0;
+ break;
+ }
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Parsing functions *
+ * *
+ ************************************************************************/
+
+static xmlRelaxNGDefinePtr xmlRelaxNGParseAttribute(xmlRelaxNGParserCtxtPtr
+ ctxt, xmlNodePtr node);
+static xmlRelaxNGDefinePtr xmlRelaxNGParseElement(xmlRelaxNGParserCtxtPtr
+ ctxt, xmlNodePtr node);
+static xmlRelaxNGDefinePtr xmlRelaxNGParsePatterns(xmlRelaxNGParserCtxtPtr
+ ctxt, xmlNodePtr nodes,
+ int group);
+static xmlRelaxNGDefinePtr xmlRelaxNGParsePattern(xmlRelaxNGParserCtxtPtr
+ ctxt, xmlNodePtr node);
+static xmlRelaxNGPtr xmlRelaxNGParseDocument(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlNodePtr node);
+static int xmlRelaxNGParseGrammarContent(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlNodePtr nodes);
+static xmlRelaxNGDefinePtr xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr
+ ctxt, xmlNodePtr node,
+ xmlRelaxNGDefinePtr
+ def);
+static xmlRelaxNGGrammarPtr xmlRelaxNGParseGrammar(xmlRelaxNGParserCtxtPtr
+ ctxt, xmlNodePtr nodes);
+static int xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define,
+ xmlNodePtr elem);
+
+
+#define IS_BLANK_NODE(n) (xmlRelaxNGIsBlank((n)->content))
+
+/**
+ * xmlRelaxNGIsNullable:
+ * @define: the definition to verify
+ *
+ * Check if a definition is nullable.
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error
+ */
+static int
+xmlRelaxNGIsNullable(xmlRelaxNGDefinePtr define)
+{
+ int ret;
+
+ if (define == NULL)
+ return (-1);
+
+ if (define->dflags & IS_NULLABLE)
+ return (1);
+ if (define->dflags & IS_NOT_NULLABLE)
+ return (0);
+ switch (define->type) {
+ case XML_RELAXNG_EMPTY:
+ case XML_RELAXNG_TEXT:
+ ret = 1;
+ break;
+ case XML_RELAXNG_NOOP:
+ case XML_RELAXNG_DEF:
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_PARENTREF:
+ case XML_RELAXNG_ONEORMORE:
+ ret = xmlRelaxNGIsNullable(define->content);
+ break;
+ case XML_RELAXNG_EXCEPT:
+ case XML_RELAXNG_NOT_ALLOWED:
+ case XML_RELAXNG_ELEMENT:
+ case XML_RELAXNG_DATATYPE:
+ case XML_RELAXNG_PARAM:
+ case XML_RELAXNG_VALUE:
+ case XML_RELAXNG_LIST:
+ case XML_RELAXNG_ATTRIBUTE:
+ ret = 0;
+ break;
+ case XML_RELAXNG_CHOICE:{
+ xmlRelaxNGDefinePtr list = define->content;
+
+ while (list != NULL) {
+ ret = xmlRelaxNGIsNullable(list);
+ if (ret != 0)
+ goto done;
+ list = list->next;
+ }
+ ret = 0;
+ break;
+ }
+ case XML_RELAXNG_START:
+ case XML_RELAXNG_INTERLEAVE:
+ case XML_RELAXNG_GROUP:{
+ xmlRelaxNGDefinePtr list = define->content;
+
+ while (list != NULL) {
+ ret = xmlRelaxNGIsNullable(list);
+ if (ret != 1)
+ goto done;
+ list = list->next;
+ }
+ return (1);
+ }
+ default:
+ return (-1);
+ }
+ done:
+ if (ret == 0)
+ define->dflags |= IS_NOT_NULLABLE;
+ if (ret == 1)
+ define->dflags |= IS_NULLABLE;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGIsBlank:
+ * @str: a string
+ *
+ * Check if a string is ignorable c.f. 4.2. Whitespace
+ *
+ * Returns 1 if the string is NULL or made of blanks chars, 0 otherwise
+ */
+static int
+xmlRelaxNGIsBlank(xmlChar * str)
+{
+ if (str == NULL)
+ return (1);
+ while (*str != 0) {
+ if (!(IS_BLANK_CH(*str)))
+ return (0);
+ str++;
+ }
+ return (1);
+}
+
+/**
+ * xmlRelaxNGGetDataTypeLibrary:
+ * @ctxt: a Relax-NG parser context
+ * @node: the current data or value element
+ *
+ * Applies algorithm from 4.3. datatypeLibrary attribute
+ *
+ * Returns the datatypeLibary value or NULL if not found
+ */
+static xmlChar *
+xmlRelaxNGGetDataTypeLibrary(xmlRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ xmlNodePtr node)
+{
+ xmlChar *ret, *escape;
+
+ if ((IS_RELAXNG(node, "data")) || (IS_RELAXNG(node, "value"))) {
+ ret = xmlGetProp(node, BAD_CAST "datatypeLibrary");
+ if (ret != NULL) {
+ if (ret[0] == 0) {
+ xmlFree(ret);
+ return (NULL);
+ }
+ escape = xmlURIEscapeStr(ret, BAD_CAST ":/#?");
+ if (escape == NULL) {
+ return (ret);
+ }
+ xmlFree(ret);
+ return (escape);
+ }
+ }
+ node = node->parent;
+ while ((node != NULL) && (node->type == XML_ELEMENT_NODE)) {
+ ret = xmlGetProp(node, BAD_CAST "datatypeLibrary");
+ if (ret != NULL) {
+ if (ret[0] == 0) {
+ xmlFree(ret);
+ return (NULL);
+ }
+ escape = xmlURIEscapeStr(ret, BAD_CAST ":/#?");
+ if (escape == NULL) {
+ return (ret);
+ }
+ xmlFree(ret);
+ return (escape);
+ }
+ node = node->parent;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlRelaxNGParseValue:
+ * @ctxt: a Relax-NG parser context
+ * @node: the data node.
+ *
+ * parse the content of a RelaxNG value node.
+ *
+ * Returns the definition pointer or NULL in case of error
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGParseValue(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGDefinePtr def = NULL;
+ xmlRelaxNGTypeLibraryPtr lib = NULL;
+ xmlChar *type;
+ xmlChar *library;
+ int success = 0;
+
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_VALUE;
+
+ type = xmlGetProp(node, BAD_CAST "type");
+ if (type != NULL) {
+ xmlRelaxNGNormExtSpace(type);
+ if (xmlValidateNCName(type, 0)) {
+ xmlRngPErr(ctxt, node, XML_RNGP_TYPE_VALUE,
+ "value type '%s' is not an NCName\n", type, NULL);
+ }
+ library = xmlRelaxNGGetDataTypeLibrary(ctxt, node);
+ if (library == NULL)
+ library =
+ xmlStrdup(BAD_CAST "http://relaxng.org/ns/structure/1.0");
+
+ def->name = type;
+ def->ns = library;
+
+ lib = (xmlRelaxNGTypeLibraryPtr)
+ xmlHashLookup(xmlRelaxNGRegisteredTypes, library);
+ if (lib == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_TYPE_LIB,
+ "Use of unregistered type library '%s'\n", library,
+ NULL);
+ def->data = NULL;
+ } else {
+ def->data = lib;
+ if (lib->have == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_ERROR_TYPE_LIB,
+ "Internal error with type library '%s': no 'have'\n",
+ library, NULL);
+ } else {
+ success = lib->have(lib->data, def->name);
+ if (success != 1) {
+ xmlRngPErr(ctxt, node, XML_RNGP_TYPE_NOT_FOUND,
+ "Error type '%s' is not exported by type library '%s'\n",
+ def->name, library);
+ }
+ }
+ }
+ }
+ if (node->children == NULL) {
+ def->value = xmlStrdup(BAD_CAST "");
+ } else if (((node->children->type != XML_TEXT_NODE) &&
+ (node->children->type != XML_CDATA_SECTION_NODE)) ||
+ (node->children->next != NULL)) {
+ xmlRngPErr(ctxt, node, XML_RNGP_TEXT_EXPECTED,
+ "Expecting a single text value for <value>content\n",
+ NULL, NULL);
+ } else if (def != NULL) {
+ def->value = xmlNodeGetContent(node);
+ if (def->value == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_VALUE_NO_CONTENT,
+ "Element <value> has no content\n", NULL, NULL);
+ } else if ((lib != NULL) && (lib->check != NULL) && (success == 1)) {
+ void *val = NULL;
+
+ success =
+ lib->check(lib->data, def->name, def->value, &val, node);
+ if (success != 1) {
+ xmlRngPErr(ctxt, node, XML_RNGP_INVALID_VALUE,
+ "Value '%s' is not acceptable for type '%s'\n",
+ def->value, def->name);
+ } else {
+ if (val != NULL)
+ def->attrs = val;
+ }
+ }
+ }
+ return (def);
+}
+
+/**
+ * xmlRelaxNGParseData:
+ * @ctxt: a Relax-NG parser context
+ * @node: the data node.
+ *
+ * parse the content of a RelaxNG data node.
+ *
+ * Returns the definition pointer or NULL in case of error
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGParseData(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGDefinePtr def = NULL, except, last = NULL;
+ xmlRelaxNGDefinePtr param, lastparam = NULL;
+ xmlRelaxNGTypeLibraryPtr lib;
+ xmlChar *type;
+ xmlChar *library;
+ xmlNodePtr content;
+ int tmp;
+
+ type = xmlGetProp(node, BAD_CAST "type");
+ if (type == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_TYPE_MISSING, "data has no type\n", NULL,
+ NULL);
+ return (NULL);
+ }
+ xmlRelaxNGNormExtSpace(type);
+ if (xmlValidateNCName(type, 0)) {
+ xmlRngPErr(ctxt, node, XML_RNGP_TYPE_VALUE,
+ "data type '%s' is not an NCName\n", type, NULL);
+ }
+ library = xmlRelaxNGGetDataTypeLibrary(ctxt, node);
+ if (library == NULL)
+ library =
+ xmlStrdup(BAD_CAST "http://relaxng.org/ns/structure/1.0");
+
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL) {
+ xmlFree(type);
+ return (NULL);
+ }
+ def->type = XML_RELAXNG_DATATYPE;
+ def->name = type;
+ def->ns = library;
+
+ lib = (xmlRelaxNGTypeLibraryPtr)
+ xmlHashLookup(xmlRelaxNGRegisteredTypes, library);
+ if (lib == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_TYPE_LIB,
+ "Use of unregistered type library '%s'\n", library,
+ NULL);
+ def->data = NULL;
+ } else {
+ def->data = lib;
+ if (lib->have == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_ERROR_TYPE_LIB,
+ "Internal error with type library '%s': no 'have'\n",
+ library, NULL);
+ } else {
+ tmp = lib->have(lib->data, def->name);
+ if (tmp != 1) {
+ xmlRngPErr(ctxt, node, XML_RNGP_TYPE_NOT_FOUND,
+ "Error type '%s' is not exported by type library '%s'\n",
+ def->name, library);
+ } else
+ if ((xmlStrEqual
+ (library,
+ BAD_CAST
+ "http://www.w3.org/2001/XMLSchema-datatypes"))
+ && ((xmlStrEqual(def->name, BAD_CAST "IDREF"))
+ || (xmlStrEqual(def->name, BAD_CAST "IDREFS")))) {
+ ctxt->idref = 1;
+ }
+ }
+ }
+ content = node->children;
+
+ /*
+ * Handle optional params
+ */
+ while (content != NULL) {
+ if (!xmlStrEqual(content->name, BAD_CAST "param"))
+ break;
+ if (xmlStrEqual(library,
+ BAD_CAST "http://relaxng.org/ns/structure/1.0")) {
+ xmlRngPErr(ctxt, node, XML_RNGP_PARAM_FORBIDDEN,
+ "Type library '%s' does not allow type parameters\n",
+ library, NULL);
+ content = content->next;
+ while ((content != NULL) &&
+ (xmlStrEqual(content->name, BAD_CAST "param")))
+ content = content->next;
+ } else {
+ param = xmlRelaxNGNewDefine(ctxt, node);
+ if (param != NULL) {
+ param->type = XML_RELAXNG_PARAM;
+ param->name = xmlGetProp(content, BAD_CAST "name");
+ if (param->name == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_PARAM_NAME_MISSING,
+ "param has no name\n", NULL, NULL);
+ }
+ param->value = xmlNodeGetContent(content);
+ if (lastparam == NULL) {
+ def->attrs = lastparam = param;
+ } else {
+ lastparam->next = param;
+ lastparam = param;
+ }
+ if (lib != NULL) {
+ }
+ }
+ content = content->next;
+ }
+ }
+ /*
+ * Handle optional except
+ */
+ if ((content != NULL)
+ && (xmlStrEqual(content->name, BAD_CAST "except"))) {
+ xmlNodePtr child;
+ xmlRelaxNGDefinePtr tmp2, last2 = NULL;
+
+ except = xmlRelaxNGNewDefine(ctxt, node);
+ if (except == NULL) {
+ return (def);
+ }
+ except->type = XML_RELAXNG_EXCEPT;
+ child = content->children;
+ if (last == NULL) {
+ def->content = except;
+ } else {
+ last->next = except;
+ }
+ if (child == NULL) {
+ xmlRngPErr(ctxt, content, XML_RNGP_EXCEPT_NO_CONTENT,
+ "except has no content\n", NULL, NULL);
+ }
+ while (child != NULL) {
+ tmp2 = xmlRelaxNGParsePattern(ctxt, child);
+ if (tmp2 != NULL) {
+ if (last2 == NULL) {
+ except->content = last2 = tmp2;
+ } else {
+ last2->next = tmp2;
+ last2 = tmp2;
+ }
+ }
+ child = child->next;
+ }
+ content = content->next;
+ }
+ /*
+ * Check there is no unhandled data
+ */
+ if (content != NULL) {
+ xmlRngPErr(ctxt, content, XML_RNGP_DATA_CONTENT,
+ "Element data has unexpected content %s\n",
+ content->name, NULL);
+ }
+
+ return (def);
+}
+
+static const xmlChar *invalidName = BAD_CAST "\1";
+
+/**
+ * xmlRelaxNGCompareNameClasses:
+ * @defs1: the first element/attribute defs
+ * @defs2: the second element/attribute defs
+ * @name: the restriction on the name
+ * @ns: the restriction on the namespace
+ *
+ * Compare the 2 lists of element definitions. The comparison is
+ * that if both lists do not accept the same QNames, it returns 1
+ * If the 2 lists can accept the same QName the comparison returns 0
+ *
+ * Returns 1 disttinct, 0 if equal
+ */
+static int
+xmlRelaxNGCompareNameClasses(xmlRelaxNGDefinePtr def1,
+ xmlRelaxNGDefinePtr def2)
+{
+ int ret = 1;
+ xmlNode node;
+ xmlNs ns;
+ xmlRelaxNGValidCtxt ctxt;
+
+ ctxt.flags = FLAGS_IGNORABLE;
+
+ memset(&ctxt, 0, sizeof(xmlRelaxNGValidCtxt));
+
+ if ((def1->type == XML_RELAXNG_ELEMENT) ||
+ (def1->type == XML_RELAXNG_ATTRIBUTE)) {
+ if (def2->type == XML_RELAXNG_TEXT)
+ return (1);
+ if (def1->name != NULL) {
+ node.name = def1->name;
+ } else {
+ node.name = invalidName;
+ }
+ node.ns = &ns;
+ if (def1->ns != NULL) {
+ if (def1->ns[0] == 0) {
+ node.ns = NULL;
+ } else {
+ ns.href = def1->ns;
+ }
+ } else {
+ ns.href = invalidName;
+ }
+ if (xmlRelaxNGElementMatch(&ctxt, def2, &node)) {
+ if (def1->nameClass != NULL) {
+ ret = xmlRelaxNGCompareNameClasses(def1->nameClass, def2);
+ } else {
+ ret = 0;
+ }
+ } else {
+ ret = 1;
+ }
+ } else if (def1->type == XML_RELAXNG_TEXT) {
+ if (def2->type == XML_RELAXNG_TEXT)
+ return (0);
+ return (1);
+ } else if (def1->type == XML_RELAXNG_EXCEPT) {
+ TODO ret = 0;
+ } else {
+ TODO ret = 0;
+ }
+ if (ret == 0)
+ return (ret);
+ if ((def2->type == XML_RELAXNG_ELEMENT) ||
+ (def2->type == XML_RELAXNG_ATTRIBUTE)) {
+ if (def2->name != NULL) {
+ node.name = def2->name;
+ } else {
+ node.name = invalidName;
+ }
+ node.ns = &ns;
+ if (def2->ns != NULL) {
+ if (def2->ns[0] == 0) {
+ node.ns = NULL;
+ } else {
+ ns.href = def2->ns;
+ }
+ } else {
+ ns.href = invalidName;
+ }
+ if (xmlRelaxNGElementMatch(&ctxt, def1, &node)) {
+ if (def2->nameClass != NULL) {
+ ret = xmlRelaxNGCompareNameClasses(def2->nameClass, def1);
+ } else {
+ ret = 0;
+ }
+ } else {
+ ret = 1;
+ }
+ } else {
+ TODO ret = 0;
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGCompareElemDefLists:
+ * @ctxt: a Relax-NG parser context
+ * @defs1: the first list of element/attribute defs
+ * @defs2: the second list of element/attribute defs
+ *
+ * Compare the 2 lists of element or attribute definitions. The comparison
+ * is that if both lists do not accept the same QNames, it returns 1
+ * If the 2 lists can accept the same QName the comparison returns 0
+ *
+ * Returns 1 disttinct, 0 if equal
+ */
+static int
+xmlRelaxNGCompareElemDefLists(xmlRelaxNGParserCtxtPtr ctxt
+ ATTRIBUTE_UNUSED, xmlRelaxNGDefinePtr * def1,
+ xmlRelaxNGDefinePtr * def2)
+{
+ xmlRelaxNGDefinePtr *basedef2 = def2;
+
+ if ((def1 == NULL) || (def2 == NULL))
+ return (1);
+ if ((*def1 == NULL) || (*def2 == NULL))
+ return (1);
+ while (*def1 != NULL) {
+ while ((*def2) != NULL) {
+ if (xmlRelaxNGCompareNameClasses(*def1, *def2) == 0)
+ return (0);
+ def2++;
+ }
+ def2 = basedef2;
+ def1++;
+ }
+ return (1);
+}
+
+/**
+ * xmlRelaxNGGenerateAttributes:
+ * @ctxt: a Relax-NG parser context
+ * @def: the definition definition
+ *
+ * Check if the definition can only generate attributes
+ *
+ * Returns 1 if yes, 0 if no and -1 in case of error.
+ */
+static int
+xmlRelaxNGGenerateAttributes(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr def)
+{
+ xmlRelaxNGDefinePtr parent, cur, tmp;
+
+ /*
+ * Don't run that check in case of error. Infinite recursion
+ * becomes possible.
+ */
+ if (ctxt->nbErrors != 0)
+ return (-1);
+
+ parent = NULL;
+ cur = def;
+ while (cur != NULL) {
+ if ((cur->type == XML_RELAXNG_ELEMENT) ||
+ (cur->type == XML_RELAXNG_TEXT) ||
+ (cur->type == XML_RELAXNG_DATATYPE) ||
+ (cur->type == XML_RELAXNG_PARAM) ||
+ (cur->type == XML_RELAXNG_LIST) ||
+ (cur->type == XML_RELAXNG_VALUE) ||
+ (cur->type == XML_RELAXNG_EMPTY))
+ return (0);
+ if ((cur->type == XML_RELAXNG_CHOICE) ||
+ (cur->type == XML_RELAXNG_INTERLEAVE) ||
+ (cur->type == XML_RELAXNG_GROUP) ||
+ (cur->type == XML_RELAXNG_ONEORMORE) ||
+ (cur->type == XML_RELAXNG_ZEROORMORE) ||
+ (cur->type == XML_RELAXNG_OPTIONAL) ||
+ (cur->type == XML_RELAXNG_PARENTREF) ||
+ (cur->type == XML_RELAXNG_EXTERNALREF) ||
+ (cur->type == XML_RELAXNG_REF) ||
+ (cur->type == XML_RELAXNG_DEF)) {
+ if (cur->content != NULL) {
+ parent = cur;
+ cur = cur->content;
+ tmp = cur;
+ while (tmp != NULL) {
+ tmp->parent = parent;
+ tmp = tmp->next;
+ }
+ continue;
+ }
+ }
+ if (cur == def)
+ break;
+ if (cur->next != NULL) {
+ cur = cur->next;
+ continue;
+ }
+ do {
+ cur = cur->parent;
+ if (cur == NULL)
+ break;
+ if (cur == def)
+ return (1);
+ if (cur->next != NULL) {
+ cur = cur->next;
+ break;
+ }
+ } while (cur != NULL);
+ }
+ return (1);
+}
+
+/**
+ * xmlRelaxNGGetElements:
+ * @ctxt: a Relax-NG parser context
+ * @def: the definition definition
+ * @eora: gather elements (0) or attributes (1)
+ *
+ * Compute the list of top elements a definition can generate
+ *
+ * Returns a list of elements or NULL if none was found.
+ */
+static xmlRelaxNGDefinePtr *
+xmlRelaxNGGetElements(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr def, int eora)
+{
+ xmlRelaxNGDefinePtr *ret = NULL, parent, cur, tmp;
+ int len = 0;
+ int max = 0;
+
+ /*
+ * Don't run that check in case of error. Infinite recursion
+ * becomes possible.
+ */
+ if (ctxt->nbErrors != 0)
+ return (NULL);
+
+ parent = NULL;
+ cur = def;
+ while (cur != NULL) {
+ if (((eora == 0) && ((cur->type == XML_RELAXNG_ELEMENT) ||
+ (cur->type == XML_RELAXNG_TEXT))) ||
+ ((eora == 1) && (cur->type == XML_RELAXNG_ATTRIBUTE))) {
+ if (ret == NULL) {
+ max = 10;
+ ret = (xmlRelaxNGDefinePtr *)
+ xmlMalloc((max + 1) * sizeof(xmlRelaxNGDefinePtr));
+ if (ret == NULL) {
+ xmlRngPErrMemory(ctxt, "getting element list\n");
+ return (NULL);
+ }
+ } else if (max <= len) {
+ max *= 2;
+ ret =
+ xmlRealloc(ret,
+ (max + 1) * sizeof(xmlRelaxNGDefinePtr));
+ if (ret == NULL) {
+ xmlRngPErrMemory(ctxt, "getting element list\n");
+ return (NULL);
+ }
+ }
+ ret[len++] = cur;
+ ret[len] = NULL;
+ } else if ((cur->type == XML_RELAXNG_CHOICE) ||
+ (cur->type == XML_RELAXNG_INTERLEAVE) ||
+ (cur->type == XML_RELAXNG_GROUP) ||
+ (cur->type == XML_RELAXNG_ONEORMORE) ||
+ (cur->type == XML_RELAXNG_ZEROORMORE) ||
+ (cur->type == XML_RELAXNG_OPTIONAL) ||
+ (cur->type == XML_RELAXNG_PARENTREF) ||
+ (cur->type == XML_RELAXNG_REF) ||
+ (cur->type == XML_RELAXNG_DEF) ||
+ (cur->type == XML_RELAXNG_EXTERNALREF)) {
+ /*
+ * Don't go within elements or attributes or string values.
+ * Just gather the element top list
+ */
+ if (cur->content != NULL) {
+ parent = cur;
+ cur = cur->content;
+ tmp = cur;
+ while (tmp != NULL) {
+ tmp->parent = parent;
+ tmp = tmp->next;
+ }
+ continue;
+ }
+ }
+ if (cur == def)
+ break;
+ if (cur->next != NULL) {
+ cur = cur->next;
+ continue;
+ }
+ do {
+ cur = cur->parent;
+ if (cur == NULL)
+ break;
+ if (cur == def)
+ return (ret);
+ if (cur->next != NULL) {
+ cur = cur->next;
+ break;
+ }
+ } while (cur != NULL);
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGCheckChoiceDeterminism:
+ * @ctxt: a Relax-NG parser context
+ * @def: the choice definition
+ *
+ * Also used to find indeterministic pattern in choice
+ */
+static void
+xmlRelaxNGCheckChoiceDeterminism(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr def)
+{
+ xmlRelaxNGDefinePtr **list;
+ xmlRelaxNGDefinePtr cur;
+ int nbchild = 0, i, j, ret;
+ int is_nullable = 0;
+ int is_indeterminist = 0;
+ xmlHashTablePtr triage = NULL;
+ int is_triable = 1;
+
+ if ((def == NULL) || (def->type != XML_RELAXNG_CHOICE))
+ return;
+
+ if (def->dflags & IS_PROCESSED)
+ return;
+
+ /*
+ * Don't run that check in case of error. Infinite recursion
+ * becomes possible.
+ */
+ if (ctxt->nbErrors != 0)
+ return;
+
+ is_nullable = xmlRelaxNGIsNullable(def);
+
+ cur = def->content;
+ while (cur != NULL) {
+ nbchild++;
+ cur = cur->next;
+ }
+
+ list = (xmlRelaxNGDefinePtr **) xmlMalloc(nbchild *
+ sizeof(xmlRelaxNGDefinePtr
+ *));
+ if (list == NULL) {
+ xmlRngPErrMemory(ctxt, "building choice\n");
+ return;
+ }
+ i = 0;
+ /*
+ * a bit strong but safe
+ */
+ if (is_nullable == 0) {
+ triage = xmlHashCreate(10);
+ } else {
+ is_triable = 0;
+ }
+ cur = def->content;
+ while (cur != NULL) {
+ list[i] = xmlRelaxNGGetElements(ctxt, cur, 0);
+ if ((list[i] == NULL) || (list[i][0] == NULL)) {
+ is_triable = 0;
+ } else if (is_triable == 1) {
+ xmlRelaxNGDefinePtr *tmp;
+ int res;
+
+ tmp = list[i];
+ while ((*tmp != NULL) && (is_triable == 1)) {
+ if ((*tmp)->type == XML_RELAXNG_TEXT) {
+ res = xmlHashAddEntry2(triage,
+ BAD_CAST "#text", NULL,
+ (void *) cur);
+ if (res != 0)
+ is_triable = -1;
+ } else if (((*tmp)->type == XML_RELAXNG_ELEMENT) &&
+ ((*tmp)->name != NULL)) {
+ if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
+ res = xmlHashAddEntry2(triage,
+ (*tmp)->name, NULL,
+ (void *) cur);
+ else
+ res = xmlHashAddEntry2(triage,
+ (*tmp)->name, (*tmp)->ns,
+ (void *) cur);
+ if (res != 0)
+ is_triable = -1;
+ } else if ((*tmp)->type == XML_RELAXNG_ELEMENT) {
+ if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
+ res = xmlHashAddEntry2(triage,
+ BAD_CAST "#any", NULL,
+ (void *) cur);
+ else
+ res = xmlHashAddEntry2(triage,
+ BAD_CAST "#any", (*tmp)->ns,
+ (void *) cur);
+ if (res != 0)
+ is_triable = -1;
+ } else {
+ is_triable = -1;
+ }
+ tmp++;
+ }
+ }
+ i++;
+ cur = cur->next;
+ }
+
+ for (i = 0; i < nbchild; i++) {
+ if (list[i] == NULL)
+ continue;
+ for (j = 0; j < i; j++) {
+ if (list[j] == NULL)
+ continue;
+ ret = xmlRelaxNGCompareElemDefLists(ctxt, list[i], list[j]);
+ if (ret == 0) {
+ is_indeterminist = 1;
+ }
+ }
+ }
+ for (i = 0; i < nbchild; i++) {
+ if (list[i] != NULL)
+ xmlFree(list[i]);
+ }
+
+ xmlFree(list);
+ if (is_indeterminist) {
+ def->dflags |= IS_INDETERMINIST;
+ }
+ if (is_triable == 1) {
+ def->dflags |= IS_TRIABLE;
+ def->data = triage;
+ } else if (triage != NULL) {
+ xmlHashFree(triage, NULL);
+ }
+ def->dflags |= IS_PROCESSED;
+}
+
+/**
+ * xmlRelaxNGCheckGroupAttrs:
+ * @ctxt: a Relax-NG parser context
+ * @def: the group definition
+ *
+ * Detects violations of rule 7.3
+ */
+static void
+xmlRelaxNGCheckGroupAttrs(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr def)
+{
+ xmlRelaxNGDefinePtr **list;
+ xmlRelaxNGDefinePtr cur;
+ int nbchild = 0, i, j, ret;
+
+ if ((def == NULL) ||
+ ((def->type != XML_RELAXNG_GROUP) &&
+ (def->type != XML_RELAXNG_ELEMENT)))
+ return;
+
+ if (def->dflags & IS_PROCESSED)
+ return;
+
+ /*
+ * Don't run that check in case of error. Infinite recursion
+ * becomes possible.
+ */
+ if (ctxt->nbErrors != 0)
+ return;
+
+ cur = def->attrs;
+ while (cur != NULL) {
+ nbchild++;
+ cur = cur->next;
+ }
+ cur = def->content;
+ while (cur != NULL) {
+ nbchild++;
+ cur = cur->next;
+ }
+
+ list = (xmlRelaxNGDefinePtr **) xmlMalloc(nbchild *
+ sizeof(xmlRelaxNGDefinePtr
+ *));
+ if (list == NULL) {
+ xmlRngPErrMemory(ctxt, "building group\n");
+ return;
+ }
+ i = 0;
+ cur = def->attrs;
+ while (cur != NULL) {
+ list[i] = xmlRelaxNGGetElements(ctxt, cur, 1);
+ i++;
+ cur = cur->next;
+ }
+ cur = def->content;
+ while (cur != NULL) {
+ list[i] = xmlRelaxNGGetElements(ctxt, cur, 1);
+ i++;
+ cur = cur->next;
+ }
+
+ for (i = 0; i < nbchild; i++) {
+ if (list[i] == NULL)
+ continue;
+ for (j = 0; j < i; j++) {
+ if (list[j] == NULL)
+ continue;
+ ret = xmlRelaxNGCompareElemDefLists(ctxt, list[i], list[j]);
+ if (ret == 0) {
+ xmlRngPErr(ctxt, def->node, XML_RNGP_GROUP_ATTR_CONFLICT,
+ "Attributes conflicts in group\n", NULL, NULL);
+ }
+ }
+ }
+ for (i = 0; i < nbchild; i++) {
+ if (list[i] != NULL)
+ xmlFree(list[i]);
+ }
+
+ xmlFree(list);
+ def->dflags |= IS_PROCESSED;
+}
+
+/**
+ * xmlRelaxNGComputeInterleaves:
+ * @def: the interleave definition
+ * @ctxt: a Relax-NG parser context
+ * @name: the definition name
+ *
+ * A lot of work for preprocessing interleave definitions
+ * is potentially needed to get a decent execution speed at runtime
+ * - trying to get a total order on the element nodes generated
+ * by the interleaves, order the list of interleave definitions
+ * following that order.
+ * - if <text/> is used to handle mixed content, it is better to
+ * flag this in the define and simplify the runtime checking
+ * algorithm
+ */
+static void
+xmlRelaxNGComputeInterleaves(xmlRelaxNGDefinePtr def,
+ xmlRelaxNGParserCtxtPtr ctxt,
+ xmlChar * name ATTRIBUTE_UNUSED)
+{
+ xmlRelaxNGDefinePtr cur, *tmp;
+
+ xmlRelaxNGPartitionPtr partitions = NULL;
+ xmlRelaxNGInterleaveGroupPtr *groups = NULL;
+ xmlRelaxNGInterleaveGroupPtr group;
+ int i, j, ret, res;
+ int nbgroups = 0;
+ int nbchild = 0;
+ int is_mixed = 0;
+ int is_determinist = 1;
+
+ /*
+ * Don't run that check in case of error. Infinite recursion
+ * becomes possible.
+ */
+ if (ctxt->nbErrors != 0)
+ return;
+
+#ifdef DEBUG_INTERLEAVE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRelaxNGComputeInterleaves(%s)\n", name);
+#endif
+ cur = def->content;
+ while (cur != NULL) {
+ nbchild++;
+ cur = cur->next;
+ }
+
+#ifdef DEBUG_INTERLEAVE
+ xmlGenericError(xmlGenericErrorContext, " %d child\n", nbchild);
+#endif
+ groups = (xmlRelaxNGInterleaveGroupPtr *)
+ xmlMalloc(nbchild * sizeof(xmlRelaxNGInterleaveGroupPtr));
+ if (groups == NULL)
+ goto error;
+ cur = def->content;
+ while (cur != NULL) {
+ groups[nbgroups] = (xmlRelaxNGInterleaveGroupPtr)
+ xmlMalloc(sizeof(xmlRelaxNGInterleaveGroup));
+ if (groups[nbgroups] == NULL)
+ goto error;
+ if (cur->type == XML_RELAXNG_TEXT)
+ is_mixed++;
+ groups[nbgroups]->rule = cur;
+ groups[nbgroups]->defs = xmlRelaxNGGetElements(ctxt, cur, 0);
+ groups[nbgroups]->attrs = xmlRelaxNGGetElements(ctxt, cur, 1);
+ nbgroups++;
+ cur = cur->next;
+ }
+#ifdef DEBUG_INTERLEAVE
+ xmlGenericError(xmlGenericErrorContext, " %d groups\n", nbgroups);
+#endif
+
+ /*
+ * Let's check that all rules makes a partitions according to 7.4
+ */
+ partitions = (xmlRelaxNGPartitionPtr)
+ xmlMalloc(sizeof(xmlRelaxNGPartition));
+ if (partitions == NULL)
+ goto error;
+ memset(partitions, 0, sizeof(xmlRelaxNGPartition));
+ partitions->nbgroups = nbgroups;
+ partitions->triage = xmlHashCreate(nbgroups);
+ for (i = 0; i < nbgroups; i++) {
+ group = groups[i];
+ for (j = i + 1; j < nbgroups; j++) {
+ if (groups[j] == NULL)
+ continue;
+
+ ret = xmlRelaxNGCompareElemDefLists(ctxt, group->defs,
+ groups[j]->defs);
+ if (ret == 0) {
+ xmlRngPErr(ctxt, def->node, XML_RNGP_ELEM_TEXT_CONFLICT,
+ "Element or text conflicts in interleave\n",
+ NULL, NULL);
+ }
+ ret = xmlRelaxNGCompareElemDefLists(ctxt, group->attrs,
+ groups[j]->attrs);
+ if (ret == 0) {
+ xmlRngPErr(ctxt, def->node, XML_RNGP_ATTR_CONFLICT,
+ "Attributes conflicts in interleave\n", NULL,
+ NULL);
+ }
+ }
+ tmp = group->defs;
+ if ((tmp != NULL) && (*tmp != NULL)) {
+ while (*tmp != NULL) {
+ if ((*tmp)->type == XML_RELAXNG_TEXT) {
+ res = xmlHashAddEntry2(partitions->triage,
+ BAD_CAST "#text", NULL,
+ (void *) (long) (i + 1));
+ if (res != 0)
+ is_determinist = -1;
+ } else if (((*tmp)->type == XML_RELAXNG_ELEMENT) &&
+ ((*tmp)->name != NULL)) {
+ if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
+ res = xmlHashAddEntry2(partitions->triage,
+ (*tmp)->name, NULL,
+ (void *) (long) (i + 1));
+ else
+ res = xmlHashAddEntry2(partitions->triage,
+ (*tmp)->name, (*tmp)->ns,
+ (void *) (long) (i + 1));
+ if (res != 0)
+ is_determinist = -1;
+ } else if ((*tmp)->type == XML_RELAXNG_ELEMENT) {
+ if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
+ res = xmlHashAddEntry2(partitions->triage,
+ BAD_CAST "#any", NULL,
+ (void *) (long) (i + 1));
+ else
+ res = xmlHashAddEntry2(partitions->triage,
+ BAD_CAST "#any", (*tmp)->ns,
+ (void *) (long) (i + 1));
+ if ((*tmp)->nameClass != NULL)
+ is_determinist = 2;
+ if (res != 0)
+ is_determinist = -1;
+ } else {
+ is_determinist = -1;
+ }
+ tmp++;
+ }
+ } else {
+ is_determinist = 0;
+ }
+ }
+ partitions->groups = groups;
+
+ /*
+ * and save the partition list back in the def
+ */
+ def->data = partitions;
+ if (is_mixed != 0)
+ def->dflags |= IS_MIXED;
+ if (is_determinist == 1)
+ partitions->flags = IS_DETERMINIST;
+ if (is_determinist == 2)
+ partitions->flags = IS_DETERMINIST | IS_NEEDCHECK;
+ return;
+
+ error:
+ xmlRngPErrMemory(ctxt, "in interleave computation\n");
+ if (groups != NULL) {
+ for (i = 0; i < nbgroups; i++)
+ if (groups[i] != NULL) {
+ if (groups[i]->defs != NULL)
+ xmlFree(groups[i]->defs);
+ xmlFree(groups[i]);
+ }
+ xmlFree(groups);
+ }
+ xmlRelaxNGFreePartition(partitions);
+}
+
+/**
+ * xmlRelaxNGParseInterleave:
+ * @ctxt: a Relax-NG parser context
+ * @node: the data node.
+ *
+ * parse the content of a RelaxNG interleave node.
+ *
+ * Returns the definition pointer or NULL in case of error
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGParseInterleave(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGDefinePtr def = NULL;
+ xmlRelaxNGDefinePtr last = NULL, cur;
+ xmlNodePtr child;
+
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL) {
+ return (NULL);
+ }
+ def->type = XML_RELAXNG_INTERLEAVE;
+
+ if (ctxt->interleaves == NULL)
+ ctxt->interleaves = xmlHashCreate(10);
+ if (ctxt->interleaves == NULL) {
+ xmlRngPErrMemory(ctxt, "create interleaves\n");
+ } else {
+ char name[32];
+
+ snprintf(name, 32, "interleave%d", ctxt->nbInterleaves++);
+ if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST name, def) < 0) {
+ xmlRngPErr(ctxt, node, XML_RNGP_INTERLEAVE_ADD,
+ "Failed to add %s to hash table\n",
+ (const xmlChar *) name, NULL);
+ }
+ }
+ child = node->children;
+ if (child == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_INTERLEAVE_NO_CONTENT,
+ "Element interleave is empty\n", NULL, NULL);
+ }
+ while (child != NULL) {
+ if (IS_RELAXNG(child, "element")) {
+ cur = xmlRelaxNGParseElement(ctxt, child);
+ } else {
+ cur = xmlRelaxNGParsePattern(ctxt, child);
+ }
+ if (cur != NULL) {
+ cur->parent = def;
+ if (last == NULL) {
+ def->content = last = cur;
+ } else {
+ last->next = cur;
+ last = cur;
+ }
+ }
+ child = child->next;
+ }
+
+ return (def);
+}
+
+/**
+ * xmlRelaxNGParseInclude:
+ * @ctxt: a Relax-NG parser context
+ * @node: the include node
+ *
+ * Integrate the content of an include node in the current grammar
+ *
+ * Returns 0 in case of success or -1 in case of error
+ */
+static int
+xmlRelaxNGParseInclude(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGIncludePtr incl;
+ xmlNodePtr root;
+ int ret = 0, tmp;
+
+ incl = node->psvi;
+ if (incl == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_INCLUDE_EMPTY,
+ "Include node has no data\n", NULL, NULL);
+ return (-1);
+ }
+ root = xmlDocGetRootElement(incl->doc);
+ if (root == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY, "Include document is empty\n",
+ NULL, NULL);
+ return (-1);
+ }
+ if (!xmlStrEqual(root->name, BAD_CAST "grammar")) {
+ xmlRngPErr(ctxt, node, XML_RNGP_GRAMMAR_MISSING,
+ "Include document root is not a grammar\n", NULL, NULL);
+ return (-1);
+ }
+
+ /*
+ * Merge the definition from both the include and the internal list
+ */
+ if (root->children != NULL) {
+ tmp = xmlRelaxNGParseGrammarContent(ctxt, root->children);
+ if (tmp != 0)
+ ret = -1;
+ }
+ if (node->children != NULL) {
+ tmp = xmlRelaxNGParseGrammarContent(ctxt, node->children);
+ if (tmp != 0)
+ ret = -1;
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGParseDefine:
+ * @ctxt: a Relax-NG parser context
+ * @node: the define node
+ *
+ * parse the content of a RelaxNG define element node.
+ *
+ * Returns 0 in case of success or -1 in case of error
+ */
+static int
+xmlRelaxNGParseDefine(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlChar *name;
+ int ret = 0, tmp;
+ xmlRelaxNGDefinePtr def;
+ const xmlChar *olddefine;
+
+ name = xmlGetProp(node, BAD_CAST "name");
+ if (name == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_NAME_MISSING,
+ "define has no name\n", NULL, NULL);
+ } else {
+ xmlRelaxNGNormExtSpace(name);
+ if (xmlValidateNCName(name, 0)) {
+ xmlRngPErr(ctxt, node, XML_RNGP_INVALID_DEFINE_NAME,
+ "define name '%s' is not an NCName\n", name, NULL);
+ }
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL) {
+ xmlFree(name);
+ return (-1);
+ }
+ def->type = XML_RELAXNG_DEF;
+ def->name = name;
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_EMPTY,
+ "define has no children\n", NULL, NULL);
+ } else {
+ olddefine = ctxt->define;
+ ctxt->define = name;
+ def->content =
+ xmlRelaxNGParsePatterns(ctxt, node->children, 0);
+ ctxt->define = olddefine;
+ }
+ if (ctxt->grammar->defs == NULL)
+ ctxt->grammar->defs = xmlHashCreate(10);
+ if (ctxt->grammar->defs == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_CREATE_FAILED,
+ "Could not create definition hash\n", NULL, NULL);
+ ret = -1;
+ } else {
+ tmp = xmlHashAddEntry(ctxt->grammar->defs, name, def);
+ if (tmp < 0) {
+ xmlRelaxNGDefinePtr prev;
+
+ prev = xmlHashLookup(ctxt->grammar->defs, name);
+ if (prev == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_CREATE_FAILED,
+ "Internal error on define aggregation of %s\n",
+ name, NULL);
+ ret = -1;
+ } else {
+ while (prev->nextHash != NULL)
+ prev = prev->nextHash;
+ prev->nextHash = def;
+ }
+ }
+ }
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGProcessExternalRef:
+ * @ctxt: the parser context
+ * @node: the externlRef node
+ *
+ * Process and compile an externlRef node
+ *
+ * Returns the xmlRelaxNGDefinePtr or NULL in case of error
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGProcessExternalRef(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGDocumentPtr docu;
+ xmlNodePtr root, tmp;
+ xmlChar *ns;
+ int newNs = 0, oldflags;
+ xmlRelaxNGDefinePtr def;
+
+ docu = node->psvi;
+ if (docu != NULL) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_EXTERNALREF;
+
+ if (docu->content == NULL) {
+ /*
+ * Then do the parsing for good
+ */
+ root = xmlDocGetRootElement(docu->doc);
+ if (root == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EXTERNALREF_EMTPY,
+ "xmlRelaxNGParse: %s is empty\n", ctxt->URL,
+ NULL);
+ return (NULL);
+ }
+ /*
+ * ns transmission rules
+ */
+ ns = xmlGetProp(root, BAD_CAST "ns");
+ if (ns == NULL) {
+ tmp = node;
+ while ((tmp != NULL) && (tmp->type == XML_ELEMENT_NODE)) {
+ ns = xmlGetProp(tmp, BAD_CAST "ns");
+ if (ns != NULL) {
+ break;
+ }
+ tmp = tmp->parent;
+ }
+ if (ns != NULL) {
+ xmlSetProp(root, BAD_CAST "ns", ns);
+ newNs = 1;
+ xmlFree(ns);
+ }
+ } else {
+ xmlFree(ns);
+ }
+
+ /*
+ * Parsing to get a precompiled schemas.
+ */
+ oldflags = ctxt->flags;
+ ctxt->flags |= XML_RELAXNG_IN_EXTERNALREF;
+ docu->schema = xmlRelaxNGParseDocument(ctxt, root);
+ ctxt->flags = oldflags;
+ if ((docu->schema != NULL) &&
+ (docu->schema->topgrammar != NULL)) {
+ docu->content = docu->schema->topgrammar->start;
+ }
+
+ /*
+ * the externalRef may be reused in a different ns context
+ */
+ if (newNs == 1) {
+ xmlUnsetProp(root, BAD_CAST "ns");
+ }
+ }
+ def->content = docu->content;
+ } else {
+ def = NULL;
+ }
+ return (def);
+}
+
+/**
+ * xmlRelaxNGParsePattern:
+ * @ctxt: a Relax-NG parser context
+ * @node: the pattern node.
+ *
+ * parse the content of a RelaxNG pattern node.
+ *
+ * Returns the definition pointer or NULL in case of error or if no
+ * pattern is generated.
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGParsePattern(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGDefinePtr def = NULL;
+
+ if (node == NULL) {
+ return (NULL);
+ }
+ if (IS_RELAXNG(node, "element")) {
+ def = xmlRelaxNGParseElement(ctxt, node);
+ } else if (IS_RELAXNG(node, "attribute")) {
+ def = xmlRelaxNGParseAttribute(ctxt, node);
+ } else if (IS_RELAXNG(node, "empty")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_EMPTY;
+ if (node->children != NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_NOT_EMPTY,
+ "empty: had a child node\n", NULL, NULL);
+ }
+ } else if (IS_RELAXNG(node, "text")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_TEXT;
+ if (node->children != NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_TEXT_HAS_CHILD,
+ "text: had a child node\n", NULL, NULL);
+ }
+ } else if (IS_RELAXNG(node, "zeroOrMore")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_ZEROORMORE;
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
+ "Element %s is empty\n", node->name, NULL);
+ } else {
+ def->content =
+ xmlRelaxNGParsePatterns(ctxt, node->children, 1);
+ }
+ } else if (IS_RELAXNG(node, "oneOrMore")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_ONEORMORE;
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
+ "Element %s is empty\n", node->name, NULL);
+ } else {
+ def->content =
+ xmlRelaxNGParsePatterns(ctxt, node->children, 1);
+ }
+ } else if (IS_RELAXNG(node, "optional")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_OPTIONAL;
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
+ "Element %s is empty\n", node->name, NULL);
+ } else {
+ def->content =
+ xmlRelaxNGParsePatterns(ctxt, node->children, 1);
+ }
+ } else if (IS_RELAXNG(node, "choice")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_CHOICE;
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
+ "Element %s is empty\n", node->name, NULL);
+ } else {
+ def->content =
+ xmlRelaxNGParsePatterns(ctxt, node->children, 0);
+ }
+ } else if (IS_RELAXNG(node, "group")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_GROUP;
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
+ "Element %s is empty\n", node->name, NULL);
+ } else {
+ def->content =
+ xmlRelaxNGParsePatterns(ctxt, node->children, 0);
+ }
+ } else if (IS_RELAXNG(node, "ref")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_REF;
+ def->name = xmlGetProp(node, BAD_CAST "name");
+ if (def->name == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_REF_NO_NAME, "ref has no name\n",
+ NULL, NULL);
+ } else {
+ xmlRelaxNGNormExtSpace(def->name);
+ if (xmlValidateNCName(def->name, 0)) {
+ xmlRngPErr(ctxt, node, XML_RNGP_REF_NAME_INVALID,
+ "ref name '%s' is not an NCName\n", def->name,
+ NULL);
+ }
+ }
+ if (node->children != NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_REF_NOT_EMPTY, "ref is not empty\n",
+ NULL, NULL);
+ }
+ if (ctxt->grammar->refs == NULL)
+ ctxt->grammar->refs = xmlHashCreate(10);
+ if (ctxt->grammar->refs == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_REF_CREATE_FAILED,
+ "Could not create references hash\n", NULL, NULL);
+ def = NULL;
+ } else {
+ int tmp;
+
+ tmp = xmlHashAddEntry(ctxt->grammar->refs, def->name, def);
+ if (tmp < 0) {
+ xmlRelaxNGDefinePtr prev;
+
+ prev = (xmlRelaxNGDefinePtr)
+ xmlHashLookup(ctxt->grammar->refs, def->name);
+ if (prev == NULL) {
+ if (def->name != NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_REF_CREATE_FAILED,
+ "Error refs definitions '%s'\n",
+ def->name, NULL);
+ } else {
+ xmlRngPErr(ctxt, node, XML_RNGP_REF_CREATE_FAILED,
+ "Error refs definitions\n",
+ NULL, NULL);
+ }
+ def = NULL;
+ } else {
+ def->nextHash = prev->nextHash;
+ prev->nextHash = def;
+ }
+ }
+ }
+ } else if (IS_RELAXNG(node, "data")) {
+ def = xmlRelaxNGParseData(ctxt, node);
+ } else if (IS_RELAXNG(node, "value")) {
+ def = xmlRelaxNGParseValue(ctxt, node);
+ } else if (IS_RELAXNG(node, "list")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_LIST;
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
+ "Element %s is empty\n", node->name, NULL);
+ } else {
+ def->content =
+ xmlRelaxNGParsePatterns(ctxt, node->children, 0);
+ }
+ } else if (IS_RELAXNG(node, "interleave")) {
+ def = xmlRelaxNGParseInterleave(ctxt, node);
+ } else if (IS_RELAXNG(node, "externalRef")) {
+ def = xmlRelaxNGProcessExternalRef(ctxt, node);
+ } else if (IS_RELAXNG(node, "notAllowed")) {
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_NOT_ALLOWED;
+ if (node->children != NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_NOTALLOWED_NOT_EMPTY,
+ "xmlRelaxNGParse: notAllowed element is not empty\n",
+ NULL, NULL);
+ }
+ } else if (IS_RELAXNG(node, "grammar")) {
+ xmlRelaxNGGrammarPtr grammar, old;
+ xmlRelaxNGGrammarPtr oldparent;
+
+#ifdef DEBUG_GRAMMAR
+ xmlGenericError(xmlGenericErrorContext,
+ "Found <grammar> pattern\n");
+#endif
+
+ oldparent = ctxt->parentgrammar;
+ old = ctxt->grammar;
+ ctxt->parentgrammar = old;
+ grammar = xmlRelaxNGParseGrammar(ctxt, node->children);
+ if (old != NULL) {
+ ctxt->grammar = old;
+ ctxt->parentgrammar = oldparent;
+#if 0
+ if (grammar != NULL) {
+ grammar->next = old->next;
+ old->next = grammar;
+ }
+#endif
+ }
+ if (grammar != NULL)
+ def = grammar->start;
+ else
+ def = NULL;
+ } else if (IS_RELAXNG(node, "parentRef")) {
+ if (ctxt->parentgrammar == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NO_PARENT,
+ "Use of parentRef without a parent grammar\n", NULL,
+ NULL);
+ return (NULL);
+ }
+ def = xmlRelaxNGNewDefine(ctxt, node);
+ if (def == NULL)
+ return (NULL);
+ def->type = XML_RELAXNG_PARENTREF;
+ def->name = xmlGetProp(node, BAD_CAST "name");
+ if (def->name == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NO_NAME,
+ "parentRef has no name\n", NULL, NULL);
+ } else {
+ xmlRelaxNGNormExtSpace(def->name);
+ if (xmlValidateNCName(def->name, 0)) {
+ xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NAME_INVALID,
+ "parentRef name '%s' is not an NCName\n",
+ def->name, NULL);
+ }
+ }
+ if (node->children != NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NOT_EMPTY,
+ "parentRef is not empty\n", NULL, NULL);
+ }
+ if (ctxt->parentgrammar->refs == NULL)
+ ctxt->parentgrammar->refs = xmlHashCreate(10);
+ if (ctxt->parentgrammar->refs == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_CREATE_FAILED,
+ "Could not create references hash\n", NULL, NULL);
+ def = NULL;
+ } else if (def->name != NULL) {
+ int tmp;
+
+ tmp =
+ xmlHashAddEntry(ctxt->parentgrammar->refs, def->name, def);
+ if (tmp < 0) {
+ xmlRelaxNGDefinePtr prev;
+
+ prev = (xmlRelaxNGDefinePtr)
+ xmlHashLookup(ctxt->parentgrammar->refs, def->name);
+ if (prev == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_CREATE_FAILED,
+ "Internal error parentRef definitions '%s'\n",
+ def->name, NULL);
+ def = NULL;
+ } else {
+ def->nextHash = prev->nextHash;
+ prev->nextHash = def;
+ }
+ }
+ }
+ } else if (IS_RELAXNG(node, "mixed")) {
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT, "Mixed is empty\n",
+ NULL, NULL);
+ def = NULL;
+ } else {
+ def = xmlRelaxNGParseInterleave(ctxt, node);
+ if (def != NULL) {
+ xmlRelaxNGDefinePtr tmp;
+
+ if ((def->content != NULL) && (def->content->next != NULL)) {
+ tmp = xmlRelaxNGNewDefine(ctxt, node);
+ if (tmp != NULL) {
+ tmp->type = XML_RELAXNG_GROUP;
+ tmp->content = def->content;
+ def->content = tmp;
+ }
+ }
+
+ tmp = xmlRelaxNGNewDefine(ctxt, node);
+ if (tmp == NULL)
+ return (def);
+ tmp->type = XML_RELAXNG_TEXT;
+ tmp->next = def->content;
+ def->content = tmp;
+ }
+ }
+ } else {
+ xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_CONSTRUCT,
+ "Unexpected node %s is not a pattern\n", node->name,
+ NULL);
+ def = NULL;
+ }
+ return (def);
+}
+
+/**
+ * xmlRelaxNGParseAttribute:
+ * @ctxt: a Relax-NG parser context
+ * @node: the element node
+ *
+ * parse the content of a RelaxNG attribute node.
+ *
+ * Returns the definition pointer or NULL in case of error.
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGParseAttribute(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGDefinePtr ret, cur;
+ xmlNodePtr child;
+ int old_flags;
+
+ ret = xmlRelaxNGNewDefine(ctxt, node);
+ if (ret == NULL)
+ return (NULL);
+ ret->type = XML_RELAXNG_ATTRIBUTE;
+ ret->parent = ctxt->def;
+ child = node->children;
+ if (child == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_EMPTY,
+ "xmlRelaxNGParseattribute: attribute has no children\n",
+ NULL, NULL);
+ return (ret);
+ }
+ old_flags = ctxt->flags;
+ ctxt->flags |= XML_RELAXNG_IN_ATTRIBUTE;
+ cur = xmlRelaxNGParseNameClass(ctxt, child, ret);
+ if (cur != NULL)
+ child = child->next;
+
+ if (child != NULL) {
+ cur = xmlRelaxNGParsePattern(ctxt, child);
+ if (cur != NULL) {
+ switch (cur->type) {
+ case XML_RELAXNG_EMPTY:
+ case XML_RELAXNG_NOT_ALLOWED:
+ case XML_RELAXNG_TEXT:
+ case XML_RELAXNG_ELEMENT:
+ case XML_RELAXNG_DATATYPE:
+ case XML_RELAXNG_VALUE:
+ case XML_RELAXNG_LIST:
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_PARENTREF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_DEF:
+ case XML_RELAXNG_ONEORMORE:
+ case XML_RELAXNG_ZEROORMORE:
+ case XML_RELAXNG_OPTIONAL:
+ case XML_RELAXNG_CHOICE:
+ case XML_RELAXNG_GROUP:
+ case XML_RELAXNG_INTERLEAVE:
+ case XML_RELAXNG_ATTRIBUTE:
+ ret->content = cur;
+ cur->parent = ret;
+ break;
+ case XML_RELAXNG_START:
+ case XML_RELAXNG_PARAM:
+ case XML_RELAXNG_EXCEPT:
+ xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_CONTENT,
+ "attribute has invalid content\n", NULL,
+ NULL);
+ break;
+ case XML_RELAXNG_NOOP:
+ xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_NOOP,
+ "RNG Internal error, noop found in attribute\n",
+ NULL, NULL);
+ break;
+ }
+ }
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_CHILDREN,
+ "attribute has multiple children\n", NULL, NULL);
+ }
+ ctxt->flags = old_flags;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGParseExceptNameClass:
+ * @ctxt: a Relax-NG parser context
+ * @node: the except node
+ * @attr: 1 if within an attribute, 0 if within an element
+ *
+ * parse the content of a RelaxNG nameClass node.
+ *
+ * Returns the definition pointer or NULL in case of error.
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGParseExceptNameClass(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlNodePtr node, int attr)
+{
+ xmlRelaxNGDefinePtr ret, cur, last = NULL;
+ xmlNodePtr child;
+
+ if (!IS_RELAXNG(node, "except")) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EXCEPT_MISSING,
+ "Expecting an except node\n", NULL, NULL);
+ return (NULL);
+ }
+ if (node->next != NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EXCEPT_MULTIPLE,
+ "exceptNameClass allows only a single except node\n",
+ NULL, NULL);
+ }
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_EXCEPT_EMPTY, "except has no content\n",
+ NULL, NULL);
+ return (NULL);
+ }
+
+ ret = xmlRelaxNGNewDefine(ctxt, node);
+ if (ret == NULL)
+ return (NULL);
+ ret->type = XML_RELAXNG_EXCEPT;
+ child = node->children;
+ while (child != NULL) {
+ cur = xmlRelaxNGNewDefine(ctxt, child);
+ if (cur == NULL)
+ break;
+ if (attr)
+ cur->type = XML_RELAXNG_ATTRIBUTE;
+ else
+ cur->type = XML_RELAXNG_ELEMENT;
+
+ if (xmlRelaxNGParseNameClass(ctxt, child, cur) != NULL) {
+ if (last == NULL) {
+ ret->content = cur;
+ } else {
+ last->next = cur;
+ }
+ last = cur;
+ }
+ child = child->next;
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGParseNameClass:
+ * @ctxt: a Relax-NG parser context
+ * @node: the nameClass node
+ * @def: the current definition
+ *
+ * parse the content of a RelaxNG nameClass node.
+ *
+ * Returns the definition pointer or NULL in case of error.
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node,
+ xmlRelaxNGDefinePtr def)
+{
+ xmlRelaxNGDefinePtr ret, tmp;
+ xmlChar *val;
+
+ ret = def;
+ if ((IS_RELAXNG(node, "name")) || (IS_RELAXNG(node, "anyName")) ||
+ (IS_RELAXNG(node, "nsName"))) {
+ if ((def->type != XML_RELAXNG_ELEMENT) &&
+ (def->type != XML_RELAXNG_ATTRIBUTE)) {
+ ret = xmlRelaxNGNewDefine(ctxt, node);
+ if (ret == NULL)
+ return (NULL);
+ ret->parent = def;
+ if (ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE)
+ ret->type = XML_RELAXNG_ATTRIBUTE;
+ else
+ ret->type = XML_RELAXNG_ELEMENT;
+ }
+ }
+ if (IS_RELAXNG(node, "name")) {
+ val = xmlNodeGetContent(node);
+ xmlRelaxNGNormExtSpace(val);
+ if (xmlValidateNCName(val, 0)) {
+ if (node->parent != NULL)
+ xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_NAME,
+ "Element %s name '%s' is not an NCName\n",
+ node->parent->name, val);
+ else
+ xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_NAME,
+ "name '%s' is not an NCName\n",
+ val, NULL);
+ }
+ ret->name = val;
+ val = xmlGetProp(node, BAD_CAST "ns");
+ ret->ns = val;
+ if ((ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE) &&
+ (val != NULL) &&
+ (xmlStrEqual(val, BAD_CAST "http://www.w3.org/2000/xmlns"))) {
+ xmlRngPErr(ctxt, node, XML_RNGP_XML_NS,
+ "Attribute with namespace '%s' is not allowed\n",
+ val, NULL);
+ }
+ if ((ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE) &&
+ (val != NULL) &&
+ (val[0] == 0) && (xmlStrEqual(ret->name, BAD_CAST "xmlns"))) {
+ xmlRngPErr(ctxt, node, XML_RNGP_XMLNS_NAME,
+ "Attribute with QName 'xmlns' is not allowed\n",
+ val, NULL);
+ }
+ } else if (IS_RELAXNG(node, "anyName")) {
+ ret->name = NULL;
+ ret->ns = NULL;
+ if (node->children != NULL) {
+ ret->nameClass =
+ xmlRelaxNGParseExceptNameClass(ctxt, node->children,
+ (def->type ==
+ XML_RELAXNG_ATTRIBUTE));
+ }
+ } else if (IS_RELAXNG(node, "nsName")) {
+ ret->name = NULL;
+ ret->ns = xmlGetProp(node, BAD_CAST "ns");
+ if (ret->ns == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_NSNAME_NO_NS,
+ "nsName has no ns attribute\n", NULL, NULL);
+ }
+ if ((ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE) &&
+ (ret->ns != NULL) &&
+ (xmlStrEqual
+ (ret->ns, BAD_CAST "http://www.w3.org/2000/xmlns"))) {
+ xmlRngPErr(ctxt, node, XML_RNGP_XML_NS,
+ "Attribute with namespace '%s' is not allowed\n",
+ ret->ns, NULL);
+ }
+ if (node->children != NULL) {
+ ret->nameClass =
+ xmlRelaxNGParseExceptNameClass(ctxt, node->children,
+ (def->type ==
+ XML_RELAXNG_ATTRIBUTE));
+ }
+ } else if (IS_RELAXNG(node, "choice")) {
+ xmlNodePtr child;
+ xmlRelaxNGDefinePtr last = NULL;
+
+ ret = xmlRelaxNGNewDefine(ctxt, node);
+ if (ret == NULL)
+ return (NULL);
+ ret->parent = def;
+ ret->type = XML_RELAXNG_CHOICE;
+
+ if (node->children == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_CHOICE_EMPTY,
+ "Element choice is empty\n", NULL, NULL);
+ } else {
+
+ child = node->children;
+ while (child != NULL) {
+ tmp = xmlRelaxNGParseNameClass(ctxt, child, ret);
+ if (tmp != NULL) {
+ if (last == NULL) {
+ last = ret->nameClass = tmp;
+ } else {
+ last->next = tmp;
+ last = tmp;
+ }
+ }
+ child = child->next;
+ }
+ }
+ } else {
+ xmlRngPErr(ctxt, node, XML_RNGP_CHOICE_CONTENT,
+ "expecting name, anyName, nsName or choice : got %s\n",
+ node->name, NULL);
+ return (NULL);
+ }
+ if (ret != def) {
+ if (def->nameClass == NULL) {
+ def->nameClass = ret;
+ } else {
+ tmp = def->nameClass;
+ while (tmp->next != NULL) {
+ tmp = tmp->next;
+ }
+ tmp->next = ret;
+ }
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGParseElement:
+ * @ctxt: a Relax-NG parser context
+ * @node: the element node
+ *
+ * parse the content of a RelaxNG element node.
+ *
+ * Returns the definition pointer or NULL in case of error.
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGParseElement(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGDefinePtr ret, cur, last;
+ xmlNodePtr child;
+ const xmlChar *olddefine;
+
+ ret = xmlRelaxNGNewDefine(ctxt, node);
+ if (ret == NULL)
+ return (NULL);
+ ret->type = XML_RELAXNG_ELEMENT;
+ ret->parent = ctxt->def;
+ child = node->children;
+ if (child == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_EMPTY,
+ "xmlRelaxNGParseElement: element has no children\n",
+ NULL, NULL);
+ return (ret);
+ }
+ cur = xmlRelaxNGParseNameClass(ctxt, child, ret);
+ if (cur != NULL)
+ child = child->next;
+
+ if (child == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_NO_CONTENT,
+ "xmlRelaxNGParseElement: element has no content\n",
+ NULL, NULL);
+ return (ret);
+ }
+ olddefine = ctxt->define;
+ ctxt->define = NULL;
+ last = NULL;
+ while (child != NULL) {
+ cur = xmlRelaxNGParsePattern(ctxt, child);
+ if (cur != NULL) {
+ cur->parent = ret;
+ switch (cur->type) {
+ case XML_RELAXNG_EMPTY:
+ case XML_RELAXNG_NOT_ALLOWED:
+ case XML_RELAXNG_TEXT:
+ case XML_RELAXNG_ELEMENT:
+ case XML_RELAXNG_DATATYPE:
+ case XML_RELAXNG_VALUE:
+ case XML_RELAXNG_LIST:
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_PARENTREF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_DEF:
+ case XML_RELAXNG_ZEROORMORE:
+ case XML_RELAXNG_ONEORMORE:
+ case XML_RELAXNG_OPTIONAL:
+ case XML_RELAXNG_CHOICE:
+ case XML_RELAXNG_GROUP:
+ case XML_RELAXNG_INTERLEAVE:
+ if (last == NULL) {
+ ret->content = last = cur;
+ } else {
+ if ((last->type == XML_RELAXNG_ELEMENT) &&
+ (ret->content == last)) {
+ ret->content = xmlRelaxNGNewDefine(ctxt, node);
+ if (ret->content != NULL) {
+ ret->content->type = XML_RELAXNG_GROUP;
+ ret->content->content = last;
+ } else {
+ ret->content = last;
+ }
+ }
+ last->next = cur;
+ last = cur;
+ }
+ break;
+ case XML_RELAXNG_ATTRIBUTE:
+ cur->next = ret->attrs;
+ ret->attrs = cur;
+ break;
+ case XML_RELAXNG_START:
+ xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
+ "RNG Internal error, start found in element\n",
+ NULL, NULL);
+ break;
+ case XML_RELAXNG_PARAM:
+ xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
+ "RNG Internal error, param found in element\n",
+ NULL, NULL);
+ break;
+ case XML_RELAXNG_EXCEPT:
+ xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
+ "RNG Internal error, except found in element\n",
+ NULL, NULL);
+ break;
+ case XML_RELAXNG_NOOP:
+ xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
+ "RNG Internal error, noop found in element\n",
+ NULL, NULL);
+ break;
+ }
+ }
+ child = child->next;
+ }
+ ctxt->define = olddefine;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGParsePatterns:
+ * @ctxt: a Relax-NG parser context
+ * @nodes: list of nodes
+ * @group: use an implicit <group> for elements
+ *
+ * parse the content of a RelaxNG start node.
+ *
+ * Returns the definition pointer or NULL in case of error.
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGParsePatterns(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes,
+ int group)
+{
+ xmlRelaxNGDefinePtr def = NULL, last = NULL, cur, parent;
+
+ parent = ctxt->def;
+ while (nodes != NULL) {
+ if (IS_RELAXNG(nodes, "element")) {
+ cur = xmlRelaxNGParseElement(ctxt, nodes);
+ if (def == NULL) {
+ def = last = cur;
+ } else {
+ if ((group == 1) && (def->type == XML_RELAXNG_ELEMENT) &&
+ (def == last)) {
+ def = xmlRelaxNGNewDefine(ctxt, nodes);
+ def->type = XML_RELAXNG_GROUP;
+ def->content = last;
+ }
+ last->next = cur;
+ last = cur;
+ }
+ cur->parent = parent;
+ } else {
+ cur = xmlRelaxNGParsePattern(ctxt, nodes);
+ if (cur != NULL) {
+ if (def == NULL) {
+ def = last = cur;
+ } else {
+ last->next = cur;
+ last = cur;
+ }
+ }
+ }
+ nodes = nodes->next;
+ }
+ return (def);
+}
+
+/**
+ * xmlRelaxNGParseStart:
+ * @ctxt: a Relax-NG parser context
+ * @nodes: start children nodes
+ *
+ * parse the content of a RelaxNG start node.
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+static int
+xmlRelaxNGParseStart(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes)
+{
+ int ret = 0;
+ xmlRelaxNGDefinePtr def = NULL, last;
+
+ if (nodes == NULL) {
+ xmlRngPErr(ctxt, nodes, XML_RNGP_START_EMPTY, "start has no children\n",
+ NULL, NULL);
+ return (-1);
+ }
+ if (IS_RELAXNG(nodes, "empty")) {
+ def = xmlRelaxNGNewDefine(ctxt, nodes);
+ if (def == NULL)
+ return (-1);
+ def->type = XML_RELAXNG_EMPTY;
+ if (nodes->children != NULL) {
+ xmlRngPErr(ctxt, nodes, XML_RNGP_EMPTY_CONTENT,
+ "element empty is not empty\n", NULL, NULL);
+ }
+ } else if (IS_RELAXNG(nodes, "notAllowed")) {
+ def = xmlRelaxNGNewDefine(ctxt, nodes);
+ if (def == NULL)
+ return (-1);
+ def->type = XML_RELAXNG_NOT_ALLOWED;
+ if (nodes->children != NULL) {
+ xmlRngPErr(ctxt, nodes, XML_RNGP_NOTALLOWED_NOT_EMPTY,
+ "element notAllowed is not empty\n", NULL, NULL);
+ }
+ } else {
+ def = xmlRelaxNGParsePatterns(ctxt, nodes, 1);
+ }
+ if (ctxt->grammar->start != NULL) {
+ last = ctxt->grammar->start;
+ while (last->next != NULL)
+ last = last->next;
+ last->next = def;
+ } else {
+ ctxt->grammar->start = def;
+ }
+ nodes = nodes->next;
+ if (nodes != NULL) {
+ xmlRngPErr(ctxt, nodes, XML_RNGP_START_CONTENT,
+ "start more than one children\n", NULL, NULL);
+ return (-1);
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGParseGrammarContent:
+ * @ctxt: a Relax-NG parser context
+ * @nodes: grammar children nodes
+ *
+ * parse the content of a RelaxNG grammar node.
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+static int
+xmlRelaxNGParseGrammarContent(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlNodePtr nodes)
+{
+ int ret = 0, tmp;
+
+ if (nodes == NULL) {
+ xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_EMPTY,
+ "grammar has no children\n", NULL, NULL);
+ return (-1);
+ }
+ while (nodes != NULL) {
+ if (IS_RELAXNG(nodes, "start")) {
+ if (nodes->children == NULL) {
+ xmlRngPErr(ctxt, nodes, XML_RNGP_START_EMPTY,
+ "start has no children\n", NULL, NULL);
+ } else {
+ tmp = xmlRelaxNGParseStart(ctxt, nodes->children);
+ if (tmp != 0)
+ ret = -1;
+ }
+ } else if (IS_RELAXNG(nodes, "define")) {
+ tmp = xmlRelaxNGParseDefine(ctxt, nodes);
+ if (tmp != 0)
+ ret = -1;
+ } else if (IS_RELAXNG(nodes, "include")) {
+ tmp = xmlRelaxNGParseInclude(ctxt, nodes);
+ if (tmp != 0)
+ ret = -1;
+ } else {
+ xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_CONTENT,
+ "grammar has unexpected child %s\n", nodes->name,
+ NULL);
+ ret = -1;
+ }
+ nodes = nodes->next;
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGCheckReference:
+ * @ref: the ref
+ * @ctxt: a Relax-NG parser context
+ * @name: the name associated to the defines
+ *
+ * Applies the 4.17. combine attribute rule for all the define
+ * element of a given grammar using the same name.
+ */
+static void
+xmlRelaxNGCheckReference(xmlRelaxNGDefinePtr ref,
+ xmlRelaxNGParserCtxtPtr ctxt,
+ const xmlChar * name)
+{
+ xmlRelaxNGGrammarPtr grammar;
+ xmlRelaxNGDefinePtr def, cur;
+
+ grammar = ctxt->grammar;
+ if (grammar == NULL) {
+ xmlRngPErr(ctxt, ref->node, XML_ERR_INTERNAL_ERROR,
+ "Internal error: no grammar in CheckReference %s\n",
+ name, NULL);
+ return;
+ }
+ if (ref->content != NULL) {
+ xmlRngPErr(ctxt, ref->node, XML_ERR_INTERNAL_ERROR,
+ "Internal error: reference has content in CheckReference %s\n",
+ name, NULL);
+ return;
+ }
+ if (grammar->defs != NULL) {
+ def = xmlHashLookup(grammar->defs, name);
+ if (def != NULL) {
+ cur = ref;
+ while (cur != NULL) {
+ cur->content = def;
+ cur = cur->nextHash;
+ }
+ } else {
+ xmlRngPErr(ctxt, ref->node, XML_RNGP_REF_NO_DEF,
+ "Reference %s has no matching definition\n", name,
+ NULL);
+ }
+ } else {
+ xmlRngPErr(ctxt, ref->node, XML_RNGP_REF_NO_DEF,
+ "Reference %s has no matching definition\n", name,
+ NULL);
+ }
+}
+
+/**
+ * xmlRelaxNGCheckCombine:
+ * @define: the define(s) list
+ * @ctxt: a Relax-NG parser context
+ * @name: the name associated to the defines
+ *
+ * Applies the 4.17. combine attribute rule for all the define
+ * element of a given grammar using the same name.
+ */
+static void
+xmlRelaxNGCheckCombine(xmlRelaxNGDefinePtr define,
+ xmlRelaxNGParserCtxtPtr ctxt, const xmlChar * name)
+{
+ xmlChar *combine;
+ int choiceOrInterleave = -1;
+ int missing = 0;
+ xmlRelaxNGDefinePtr cur, last, tmp, tmp2;
+
+ if (define->nextHash == NULL)
+ return;
+ cur = define;
+ while (cur != NULL) {
+ combine = xmlGetProp(cur->node, BAD_CAST "combine");
+ if (combine != NULL) {
+ if (xmlStrEqual(combine, BAD_CAST "choice")) {
+ if (choiceOrInterleave == -1)
+ choiceOrInterleave = 1;
+ else if (choiceOrInterleave == 0) {
+ xmlRngPErr(ctxt, define->node, XML_RNGP_DEF_CHOICE_AND_INTERLEAVE,
+ "Defines for %s use both 'choice' and 'interleave'\n",
+ name, NULL);
+ }
+ } else if (xmlStrEqual(combine, BAD_CAST "interleave")) {
+ if (choiceOrInterleave == -1)
+ choiceOrInterleave = 0;
+ else if (choiceOrInterleave == 1) {
+ xmlRngPErr(ctxt, define->node, XML_RNGP_DEF_CHOICE_AND_INTERLEAVE,
+ "Defines for %s use both 'choice' and 'interleave'\n",
+ name, NULL);
+ }
+ } else {
+ xmlRngPErr(ctxt, define->node, XML_RNGP_UNKNOWN_COMBINE,
+ "Defines for %s use unknown combine value '%s''\n",
+ name, combine);
+ }
+ xmlFree(combine);
+ } else {
+ if (missing == 0)
+ missing = 1;
+ else {
+ xmlRngPErr(ctxt, define->node, XML_RNGP_NEED_COMBINE,
+ "Some defines for %s needs the combine attribute\n",
+ name, NULL);
+ }
+ }
+
+ cur = cur->nextHash;
+ }
+#ifdef DEBUG
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRelaxNGCheckCombine(): merging %s defines: %d\n",
+ name, choiceOrInterleave);
+#endif
+ if (choiceOrInterleave == -1)
+ choiceOrInterleave = 0;
+ cur = xmlRelaxNGNewDefine(ctxt, define->node);
+ if (cur == NULL)
+ return;
+ if (choiceOrInterleave == 0)
+ cur->type = XML_RELAXNG_INTERLEAVE;
+ else
+ cur->type = XML_RELAXNG_CHOICE;
+ tmp = define;
+ last = NULL;
+ while (tmp != NULL) {
+ if (tmp->content != NULL) {
+ if (tmp->content->next != NULL) {
+ /*
+ * we need first to create a wrapper.
+ */
+ tmp2 = xmlRelaxNGNewDefine(ctxt, tmp->content->node);
+ if (tmp2 == NULL)
+ break;
+ tmp2->type = XML_RELAXNG_GROUP;
+ tmp2->content = tmp->content;
+ } else {
+ tmp2 = tmp->content;
+ }
+ if (last == NULL) {
+ cur->content = tmp2;
+ } else {
+ last->next = tmp2;
+ }
+ last = tmp2;
+ }
+ tmp->content = cur;
+ tmp = tmp->nextHash;
+ }
+ define->content = cur;
+ if (choiceOrInterleave == 0) {
+ if (ctxt->interleaves == NULL)
+ ctxt->interleaves = xmlHashCreate(10);
+ if (ctxt->interleaves == NULL) {
+ xmlRngPErr(ctxt, define->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
+ "Failed to create interleaves hash table\n", NULL,
+ NULL);
+ } else {
+ char tmpname[32];
+
+ snprintf(tmpname, 32, "interleave%d", ctxt->nbInterleaves++);
+ if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST tmpname, cur) <
+ 0) {
+ xmlRngPErr(ctxt, define->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
+ "Failed to add %s to hash table\n",
+ (const xmlChar *) tmpname, NULL);
+ }
+ }
+ }
+}
+
+/**
+ * xmlRelaxNGCombineStart:
+ * @ctxt: a Relax-NG parser context
+ * @grammar: the grammar
+ *
+ * Applies the 4.17. combine rule for all the start
+ * element of a given grammar.
+ */
+static void
+xmlRelaxNGCombineStart(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGGrammarPtr grammar)
+{
+ xmlRelaxNGDefinePtr starts;
+ xmlChar *combine;
+ int choiceOrInterleave = -1;
+ int missing = 0;
+ xmlRelaxNGDefinePtr cur;
+
+ starts = grammar->start;
+ if ((starts == NULL) || (starts->next == NULL))
+ return;
+ cur = starts;
+ while (cur != NULL) {
+ if ((cur->node == NULL) || (cur->node->parent == NULL) ||
+ (!xmlStrEqual(cur->node->parent->name, BAD_CAST "start"))) {
+ combine = NULL;
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_START_MISSING,
+ "Internal error: start element not found\n", NULL,
+ NULL);
+ } else {
+ combine = xmlGetProp(cur->node->parent, BAD_CAST "combine");
+ }
+
+ if (combine != NULL) {
+ if (xmlStrEqual(combine, BAD_CAST "choice")) {
+ if (choiceOrInterleave == -1)
+ choiceOrInterleave = 1;
+ else if (choiceOrInterleave == 0) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_START_CHOICE_AND_INTERLEAVE,
+ "<start> use both 'choice' and 'interleave'\n",
+ NULL, NULL);
+ }
+ } else if (xmlStrEqual(combine, BAD_CAST "interleave")) {
+ if (choiceOrInterleave == -1)
+ choiceOrInterleave = 0;
+ else if (choiceOrInterleave == 1) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_START_CHOICE_AND_INTERLEAVE,
+ "<start> use both 'choice' and 'interleave'\n",
+ NULL, NULL);
+ }
+ } else {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_UNKNOWN_COMBINE,
+ "<start> uses unknown combine value '%s''\n",
+ combine, NULL);
+ }
+ xmlFree(combine);
+ } else {
+ if (missing == 0)
+ missing = 1;
+ else {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_NEED_COMBINE,
+ "Some <start> element miss the combine attribute\n",
+ NULL, NULL);
+ }
+ }
+
+ cur = cur->next;
+ }
+#ifdef DEBUG
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRelaxNGCombineStart(): merging <start>: %d\n",
+ choiceOrInterleave);
+#endif
+ if (choiceOrInterleave == -1)
+ choiceOrInterleave = 0;
+ cur = xmlRelaxNGNewDefine(ctxt, starts->node);
+ if (cur == NULL)
+ return;
+ if (choiceOrInterleave == 0)
+ cur->type = XML_RELAXNG_INTERLEAVE;
+ else
+ cur->type = XML_RELAXNG_CHOICE;
+ cur->content = grammar->start;
+ grammar->start = cur;
+ if (choiceOrInterleave == 0) {
+ if (ctxt->interleaves == NULL)
+ ctxt->interleaves = xmlHashCreate(10);
+ if (ctxt->interleaves == NULL) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
+ "Failed to create interleaves hash table\n", NULL,
+ NULL);
+ } else {
+ char tmpname[32];
+
+ snprintf(tmpname, 32, "interleave%d", ctxt->nbInterleaves++);
+ if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST tmpname, cur) <
+ 0) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
+ "Failed to add %s to hash table\n",
+ (const xmlChar *) tmpname, NULL);
+ }
+ }
+ }
+}
+
+/**
+ * xmlRelaxNGCheckCycles:
+ * @ctxt: a Relax-NG parser context
+ * @nodes: grammar children nodes
+ * @depth: the counter
+ *
+ * Check for cycles.
+ *
+ * Returns 0 if check passed, and -1 in case of error
+ */
+static int
+xmlRelaxNGCheckCycles(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr cur, int depth)
+{
+ int ret = 0;
+
+ while ((ret == 0) && (cur != NULL)) {
+ if ((cur->type == XML_RELAXNG_REF) ||
+ (cur->type == XML_RELAXNG_PARENTREF)) {
+ if (cur->depth == -1) {
+ cur->depth = depth;
+ ret = xmlRelaxNGCheckCycles(ctxt, cur->content, depth);
+ cur->depth = -2;
+ } else if (depth == cur->depth) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_REF_CYCLE,
+ "Detected a cycle in %s references\n",
+ cur->name, NULL);
+ return (-1);
+ }
+ } else if (cur->type == XML_RELAXNG_ELEMENT) {
+ ret = xmlRelaxNGCheckCycles(ctxt, cur->content, depth + 1);
+ } else {
+ ret = xmlRelaxNGCheckCycles(ctxt, cur->content, depth);
+ }
+ cur = cur->next;
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGTryUnlink:
+ * @ctxt: a Relax-NG parser context
+ * @cur: the definition to unlink
+ * @parent: the parent definition
+ * @prev: the previous sibling definition
+ *
+ * Try to unlink a definition. If not possble make it a NOOP
+ *
+ * Returns the new prev definition
+ */
+static xmlRelaxNGDefinePtr
+xmlRelaxNGTryUnlink(xmlRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ xmlRelaxNGDefinePtr cur,
+ xmlRelaxNGDefinePtr parent, xmlRelaxNGDefinePtr prev)
+{
+ if (prev != NULL) {
+ prev->next = cur->next;
+ } else {
+ if (parent != NULL) {
+ if (parent->content == cur)
+ parent->content = cur->next;
+ else if (parent->attrs == cur)
+ parent->attrs = cur->next;
+ else if (parent->nameClass == cur)
+ parent->nameClass = cur->next;
+ } else {
+ cur->type = XML_RELAXNG_NOOP;
+ prev = cur;
+ }
+ }
+ return (prev);
+}
+
+/**
+ * xmlRelaxNGSimplify:
+ * @ctxt: a Relax-NG parser context
+ * @nodes: grammar children nodes
+ *
+ * Check for simplification of empty and notAllowed
+ */
+static void
+xmlRelaxNGSimplify(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr cur, xmlRelaxNGDefinePtr parent)
+{
+ xmlRelaxNGDefinePtr prev = NULL;
+
+ while (cur != NULL) {
+ if ((cur->type == XML_RELAXNG_REF) ||
+ (cur->type == XML_RELAXNG_PARENTREF)) {
+ if (cur->depth != -3) {
+ cur->depth = -3;
+ xmlRelaxNGSimplify(ctxt, cur->content, cur);
+ }
+ } else if (cur->type == XML_RELAXNG_NOT_ALLOWED) {
+ cur->parent = parent;
+ if ((parent != NULL) &&
+ ((parent->type == XML_RELAXNG_ATTRIBUTE) ||
+ (parent->type == XML_RELAXNG_LIST) ||
+ (parent->type == XML_RELAXNG_GROUP) ||
+ (parent->type == XML_RELAXNG_INTERLEAVE) ||
+ (parent->type == XML_RELAXNG_ONEORMORE) ||
+ (parent->type == XML_RELAXNG_ZEROORMORE))) {
+ parent->type = XML_RELAXNG_NOT_ALLOWED;
+ break;
+ }
+ if ((parent != NULL) && (parent->type == XML_RELAXNG_CHOICE)) {
+ prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
+ } else
+ prev = cur;
+ } else if (cur->type == XML_RELAXNG_EMPTY) {
+ cur->parent = parent;
+ if ((parent != NULL) &&
+ ((parent->type == XML_RELAXNG_ONEORMORE) ||
+ (parent->type == XML_RELAXNG_ZEROORMORE))) {
+ parent->type = XML_RELAXNG_EMPTY;
+ break;
+ }
+ if ((parent != NULL) &&
+ ((parent->type == XML_RELAXNG_GROUP) ||
+ (parent->type == XML_RELAXNG_INTERLEAVE))) {
+ prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
+ } else
+ prev = cur;
+ } else {
+ cur->parent = parent;
+ if (cur->content != NULL)
+ xmlRelaxNGSimplify(ctxt, cur->content, cur);
+ if ((cur->type != XML_RELAXNG_VALUE) && (cur->attrs != NULL))
+ xmlRelaxNGSimplify(ctxt, cur->attrs, cur);
+ if (cur->nameClass != NULL)
+ xmlRelaxNGSimplify(ctxt, cur->nameClass, cur);
+ /*
+ * On Elements, try to move attribute only generating rules on
+ * the attrs rules.
+ */
+ if (cur->type == XML_RELAXNG_ELEMENT) {
+ int attronly;
+ xmlRelaxNGDefinePtr tmp, pre;
+
+ while (cur->content != NULL) {
+ attronly =
+ xmlRelaxNGGenerateAttributes(ctxt, cur->content);
+ if (attronly == 1) {
+ /*
+ * migrate cur->content to attrs
+ */
+ tmp = cur->content;
+ cur->content = tmp->next;
+ tmp->next = cur->attrs;
+ cur->attrs = tmp;
+ } else {
+ /*
+ * cur->content can generate elements or text
+ */
+ break;
+ }
+ }
+ pre = cur->content;
+ while ((pre != NULL) && (pre->next != NULL)) {
+ tmp = pre->next;
+ attronly = xmlRelaxNGGenerateAttributes(ctxt, tmp);
+ if (attronly == 1) {
+ /*
+ * migrate tmp to attrs
+ */
+ pre->next = tmp->next;
+ tmp->next = cur->attrs;
+ cur->attrs = tmp;
+ } else {
+ pre = tmp;
+ }
+ }
+ }
+ /*
+ * This may result in a simplification
+ */
+ if ((cur->type == XML_RELAXNG_GROUP) ||
+ (cur->type == XML_RELAXNG_INTERLEAVE)) {
+ if (cur->content == NULL)
+ cur->type = XML_RELAXNG_EMPTY;
+ else if (cur->content->next == NULL) {
+ if ((parent == NULL) && (prev == NULL)) {
+ cur->type = XML_RELAXNG_NOOP;
+ } else if (prev == NULL) {
+ parent->content = cur->content;
+ cur->content->next = cur->next;
+ cur = cur->content;
+ } else {
+ cur->content->next = cur->next;
+ prev->next = cur->content;
+ cur = cur->content;
+ }
+ }
+ }
+ /*
+ * the current node may have been transformed back
+ */
+ if ((cur->type == XML_RELAXNG_EXCEPT) &&
+ (cur->content != NULL) &&
+ (cur->content->type == XML_RELAXNG_NOT_ALLOWED)) {
+ prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
+ } else if (cur->type == XML_RELAXNG_NOT_ALLOWED) {
+ if ((parent != NULL) &&
+ ((parent->type == XML_RELAXNG_ATTRIBUTE) ||
+ (parent->type == XML_RELAXNG_LIST) ||
+ (parent->type == XML_RELAXNG_GROUP) ||
+ (parent->type == XML_RELAXNG_INTERLEAVE) ||
+ (parent->type == XML_RELAXNG_ONEORMORE) ||
+ (parent->type == XML_RELAXNG_ZEROORMORE))) {
+ parent->type = XML_RELAXNG_NOT_ALLOWED;
+ break;
+ }
+ if ((parent != NULL) &&
+ (parent->type == XML_RELAXNG_CHOICE)) {
+ prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
+ } else
+ prev = cur;
+ } else if (cur->type == XML_RELAXNG_EMPTY) {
+ if ((parent != NULL) &&
+ ((parent->type == XML_RELAXNG_ONEORMORE) ||
+ (parent->type == XML_RELAXNG_ZEROORMORE))) {
+ parent->type = XML_RELAXNG_EMPTY;
+ break;
+ }
+ if ((parent != NULL) &&
+ ((parent->type == XML_RELAXNG_GROUP) ||
+ (parent->type == XML_RELAXNG_INTERLEAVE) ||
+ (parent->type == XML_RELAXNG_CHOICE))) {
+ prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
+ } else
+ prev = cur;
+ } else {
+ prev = cur;
+ }
+ }
+ cur = cur->next;
+ }
+}
+
+/**
+ * xmlRelaxNGGroupContentType:
+ * @ct1: the first content type
+ * @ct2: the second content type
+ *
+ * Try to group 2 content types
+ *
+ * Returns the content type
+ */
+static xmlRelaxNGContentType
+xmlRelaxNGGroupContentType(xmlRelaxNGContentType ct1,
+ xmlRelaxNGContentType ct2)
+{
+ if ((ct1 == XML_RELAXNG_CONTENT_ERROR) ||
+ (ct2 == XML_RELAXNG_CONTENT_ERROR))
+ return (XML_RELAXNG_CONTENT_ERROR);
+ if (ct1 == XML_RELAXNG_CONTENT_EMPTY)
+ return (ct2);
+ if (ct2 == XML_RELAXNG_CONTENT_EMPTY)
+ return (ct1);
+ if ((ct1 == XML_RELAXNG_CONTENT_COMPLEX) &&
+ (ct2 == XML_RELAXNG_CONTENT_COMPLEX))
+ return (XML_RELAXNG_CONTENT_COMPLEX);
+ return (XML_RELAXNG_CONTENT_ERROR);
+}
+
+/**
+ * xmlRelaxNGMaxContentType:
+ * @ct1: the first content type
+ * @ct2: the second content type
+ *
+ * Compute the max content-type
+ *
+ * Returns the content type
+ */
+static xmlRelaxNGContentType
+xmlRelaxNGMaxContentType(xmlRelaxNGContentType ct1,
+ xmlRelaxNGContentType ct2)
+{
+ if ((ct1 == XML_RELAXNG_CONTENT_ERROR) ||
+ (ct2 == XML_RELAXNG_CONTENT_ERROR))
+ return (XML_RELAXNG_CONTENT_ERROR);
+ if ((ct1 == XML_RELAXNG_CONTENT_SIMPLE) ||
+ (ct2 == XML_RELAXNG_CONTENT_SIMPLE))
+ return (XML_RELAXNG_CONTENT_SIMPLE);
+ if ((ct1 == XML_RELAXNG_CONTENT_COMPLEX) ||
+ (ct2 == XML_RELAXNG_CONTENT_COMPLEX))
+ return (XML_RELAXNG_CONTENT_COMPLEX);
+ return (XML_RELAXNG_CONTENT_EMPTY);
+}
+
+/**
+ * xmlRelaxNGCheckRules:
+ * @ctxt: a Relax-NG parser context
+ * @cur: the current definition
+ * @flags: some accumulated flags
+ * @ptype: the parent type
+ *
+ * Check for rules in section 7.1 and 7.2
+ *
+ * Returns the content type of @cur
+ */
+static xmlRelaxNGContentType
+xmlRelaxNGCheckRules(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr cur, int flags,
+ xmlRelaxNGType ptype)
+{
+ int nflags = flags;
+ xmlRelaxNGContentType ret, tmp, val = XML_RELAXNG_CONTENT_EMPTY;
+
+ while (cur != NULL) {
+ ret = XML_RELAXNG_CONTENT_EMPTY;
+ if ((cur->type == XML_RELAXNG_REF) ||
+ (cur->type == XML_RELAXNG_PARENTREF)) {
+ if (flags & XML_RELAXNG_IN_LIST) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_REF,
+ "Found forbidden pattern list//ref\n", NULL,
+ NULL);
+ }
+ if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_REF,
+ "Found forbidden pattern data/except//ref\n",
+ NULL, NULL);
+ }
+ if (cur->depth > -4) {
+ cur->depth = -4;
+ ret = xmlRelaxNGCheckRules(ctxt, cur->content,
+ flags, cur->type);
+ cur->depth = ret - 15;
+ } else if (cur->depth == -4) {
+ ret = XML_RELAXNG_CONTENT_COMPLEX;
+ } else {
+ ret = (xmlRelaxNGContentType) (cur->depth + 15);
+ }
+ } else if (cur->type == XML_RELAXNG_ELEMENT) {
+ /*
+ * The 7.3 Attribute derivation rule for groups is plugged there
+ */
+ xmlRelaxNGCheckGroupAttrs(ctxt, cur);
+ if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_ELEM,
+ "Found forbidden pattern data/except//element(ref)\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_LIST) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_ELEM,
+ "Found forbidden pattern list//element(ref)\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ATTR_ELEM,
+ "Found forbidden pattern attribute//element(ref)\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ATTR_ELEM,
+ "Found forbidden pattern attribute//element(ref)\n",
+ NULL, NULL);
+ }
+ /*
+ * reset since in the simple form elements are only child
+ * of grammar/define
+ */
+ nflags = 0;
+ ret =
+ xmlRelaxNGCheckRules(ctxt, cur->attrs, nflags, cur->type);
+ if (ret != XML_RELAXNG_CONTENT_EMPTY) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_ELEM_CONTENT_EMPTY,
+ "Element %s attributes have a content type error\n",
+ cur->name, NULL);
+ }
+ ret =
+ xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
+ cur->type);
+ if (ret == XML_RELAXNG_CONTENT_ERROR) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_ELEM_CONTENT_ERROR,
+ "Element %s has a content type error\n",
+ cur->name, NULL);
+ } else {
+ ret = XML_RELAXNG_CONTENT_COMPLEX;
+ }
+ } else if (cur->type == XML_RELAXNG_ATTRIBUTE) {
+ if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ATTR_ATTR,
+ "Found forbidden pattern attribute//attribute\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_LIST) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_ATTR,
+ "Found forbidden pattern list//attribute\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_OOMGROUP) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ONEMORE_GROUP_ATTR,
+ "Found forbidden pattern oneOrMore//group//attribute\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_OOMINTERLEAVE) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR,
+ "Found forbidden pattern oneOrMore//interleave//attribute\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_ATTR,
+ "Found forbidden pattern data/except//attribute\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_START) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_ATTR,
+ "Found forbidden pattern start//attribute\n",
+ NULL, NULL);
+ }
+ if ((!(flags & XML_RELAXNG_IN_ONEORMORE))
+ && (cur->name == NULL)) {
+ if (cur->ns == NULL) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_ANYNAME_ATTR_ANCESTOR,
+ "Found anyName attribute without oneOrMore ancestor\n",
+ NULL, NULL);
+ } else {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_NSNAME_ATTR_ANCESTOR,
+ "Found nsName attribute without oneOrMore ancestor\n",
+ NULL, NULL);
+ }
+ }
+ nflags = flags | XML_RELAXNG_IN_ATTRIBUTE;
+ xmlRelaxNGCheckRules(ctxt, cur->content, nflags, cur->type);
+ ret = XML_RELAXNG_CONTENT_EMPTY;
+ } else if ((cur->type == XML_RELAXNG_ONEORMORE) ||
+ (cur->type == XML_RELAXNG_ZEROORMORE)) {
+ if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_ONEMORE,
+ "Found forbidden pattern data/except//oneOrMore\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_START) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_ONEMORE,
+ "Found forbidden pattern start//oneOrMore\n",
+ NULL, NULL);
+ }
+ nflags = flags | XML_RELAXNG_IN_ONEORMORE;
+ ret =
+ xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
+ cur->type);
+ ret = xmlRelaxNGGroupContentType(ret, ret);
+ } else if (cur->type == XML_RELAXNG_LIST) {
+ if (flags & XML_RELAXNG_IN_LIST) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_LIST,
+ "Found forbidden pattern list//list\n", NULL,
+ NULL);
+ }
+ if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_LIST,
+ "Found forbidden pattern data/except//list\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_START) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_LIST,
+ "Found forbidden pattern start//list\n", NULL,
+ NULL);
+ }
+ nflags = flags | XML_RELAXNG_IN_LIST;
+ ret =
+ xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
+ cur->type);
+ } else if (cur->type == XML_RELAXNG_GROUP) {
+ if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_GROUP,
+ "Found forbidden pattern data/except//group\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_START) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_GROUP,
+ "Found forbidden pattern start//group\n", NULL,
+ NULL);
+ }
+ if (flags & XML_RELAXNG_IN_ONEORMORE)
+ nflags = flags | XML_RELAXNG_IN_OOMGROUP;
+ else
+ nflags = flags;
+ ret =
+ xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
+ cur->type);
+ /*
+ * The 7.3 Attribute derivation rule for groups is plugged there
+ */
+ xmlRelaxNGCheckGroupAttrs(ctxt, cur);
+ } else if (cur->type == XML_RELAXNG_INTERLEAVE) {
+ if (flags & XML_RELAXNG_IN_LIST) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_INTERLEAVE,
+ "Found forbidden pattern list//interleave\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE,
+ "Found forbidden pattern data/except//interleave\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_START) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE,
+ "Found forbidden pattern start//interleave\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_ONEORMORE)
+ nflags = flags | XML_RELAXNG_IN_OOMINTERLEAVE;
+ else
+ nflags = flags;
+ ret =
+ xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
+ cur->type);
+ } else if (cur->type == XML_RELAXNG_EXCEPT) {
+ if ((cur->parent != NULL) &&
+ (cur->parent->type == XML_RELAXNG_DATATYPE))
+ nflags = flags | XML_RELAXNG_IN_DATAEXCEPT;
+ else
+ nflags = flags;
+ ret =
+ xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
+ cur->type);
+ } else if (cur->type == XML_RELAXNG_DATATYPE) {
+ if (flags & XML_RELAXNG_IN_START) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_DATA,
+ "Found forbidden pattern start//data\n", NULL,
+ NULL);
+ }
+ xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
+ ret = XML_RELAXNG_CONTENT_SIMPLE;
+ } else if (cur->type == XML_RELAXNG_VALUE) {
+ if (flags & XML_RELAXNG_IN_START) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_VALUE,
+ "Found forbidden pattern start//value\n", NULL,
+ NULL);
+ }
+ xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
+ ret = XML_RELAXNG_CONTENT_SIMPLE;
+ } else if (cur->type == XML_RELAXNG_TEXT) {
+ if (flags & XML_RELAXNG_IN_LIST) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_TEXT,
+ "Found forbidden pattern list//text\n", NULL,
+ NULL);
+ }
+ if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_TEXT,
+ "Found forbidden pattern data/except//text\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_START) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_TEXT,
+ "Found forbidden pattern start//text\n", NULL,
+ NULL);
+ }
+ ret = XML_RELAXNG_CONTENT_COMPLEX;
+ } else if (cur->type == XML_RELAXNG_EMPTY) {
+ if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_EMPTY,
+ "Found forbidden pattern data/except//empty\n",
+ NULL, NULL);
+ }
+ if (flags & XML_RELAXNG_IN_START) {
+ xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_EMPTY,
+ "Found forbidden pattern start//empty\n", NULL,
+ NULL);
+ }
+ ret = XML_RELAXNG_CONTENT_EMPTY;
+ } else if (cur->type == XML_RELAXNG_CHOICE) {
+ xmlRelaxNGCheckChoiceDeterminism(ctxt, cur);
+ ret =
+ xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
+ } else {
+ ret =
+ xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
+ }
+ cur = cur->next;
+ if (ptype == XML_RELAXNG_GROUP) {
+ val = xmlRelaxNGGroupContentType(val, ret);
+ } else if (ptype == XML_RELAXNG_INTERLEAVE) {
+ tmp = xmlRelaxNGGroupContentType(val, ret);
+ if (tmp != XML_RELAXNG_CONTENT_ERROR)
+ tmp = xmlRelaxNGMaxContentType(val, ret);
+ } else if (ptype == XML_RELAXNG_CHOICE) {
+ val = xmlRelaxNGMaxContentType(val, ret);
+ } else if (ptype == XML_RELAXNG_LIST) {
+ val = XML_RELAXNG_CONTENT_SIMPLE;
+ } else if (ptype == XML_RELAXNG_EXCEPT) {
+ if (ret == XML_RELAXNG_CONTENT_ERROR)
+ val = XML_RELAXNG_CONTENT_ERROR;
+ else
+ val = XML_RELAXNG_CONTENT_SIMPLE;
+ } else {
+ val = xmlRelaxNGGroupContentType(val, ret);
+ }
+
+ }
+ return (val);
+}
+
+/**
+ * xmlRelaxNGParseGrammar:
+ * @ctxt: a Relax-NG parser context
+ * @nodes: grammar children nodes
+ *
+ * parse a Relax-NG <grammar> node
+ *
+ * Returns the internal xmlRelaxNGGrammarPtr built or
+ * NULL in case of error
+ */
+static xmlRelaxNGGrammarPtr
+xmlRelaxNGParseGrammar(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes)
+{
+ xmlRelaxNGGrammarPtr ret, tmp, old;
+
+#ifdef DEBUG_GRAMMAR
+ xmlGenericError(xmlGenericErrorContext, "Parsing a new grammar\n");
+#endif
+
+ ret = xmlRelaxNGNewGrammar(ctxt);
+ if (ret == NULL)
+ return (NULL);
+
+ /*
+ * Link the new grammar in the tree
+ */
+ ret->parent = ctxt->grammar;
+ if (ctxt->grammar != NULL) {
+ tmp = ctxt->grammar->children;
+ if (tmp == NULL) {
+ ctxt->grammar->children = ret;
+ } else {
+ while (tmp->next != NULL)
+ tmp = tmp->next;
+ tmp->next = ret;
+ }
+ }
+
+ old = ctxt->grammar;
+ ctxt->grammar = ret;
+ xmlRelaxNGParseGrammarContent(ctxt, nodes);
+ ctxt->grammar = ret;
+ if (ctxt->grammar == NULL) {
+ xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_CONTENT,
+ "Failed to parse <grammar> content\n", NULL, NULL);
+ } else if (ctxt->grammar->start == NULL) {
+ xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_NO_START,
+ "Element <grammar> has no <start>\n", NULL, NULL);
+ }
+
+ /*
+ * Apply 4.17 mergingd rules to defines and starts
+ */
+ xmlRelaxNGCombineStart(ctxt, ret);
+ if (ret->defs != NULL) {
+ xmlHashScan(ret->defs, (xmlHashScanner) xmlRelaxNGCheckCombine,
+ ctxt);
+ }
+
+ /*
+ * link together defines and refs in this grammar
+ */
+ if (ret->refs != NULL) {
+ xmlHashScan(ret->refs, (xmlHashScanner) xmlRelaxNGCheckReference,
+ ctxt);
+ }
+
+ ctxt->grammar = old;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGParseDocument:
+ * @ctxt: a Relax-NG parser context
+ * @node: the root node of the RelaxNG schema
+ *
+ * parse a Relax-NG definition resource and build an internal
+ * xmlRelaxNG struture which can be used to validate instances.
+ *
+ * Returns the internal XML RelaxNG structure built or
+ * NULL in case of error
+ */
+static xmlRelaxNGPtr
+xmlRelaxNGParseDocument(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlRelaxNGPtr schema = NULL;
+ const xmlChar *olddefine;
+ xmlRelaxNGGrammarPtr old;
+
+ if ((ctxt == NULL) || (node == NULL))
+ return (NULL);
+
+ schema = xmlRelaxNGNewRelaxNG(ctxt);
+ if (schema == NULL)
+ return (NULL);
+
+ olddefine = ctxt->define;
+ ctxt->define = NULL;
+ if (IS_RELAXNG(node, "grammar")) {
+ schema->topgrammar = xmlRelaxNGParseGrammar(ctxt, node->children);
+ } else {
+ xmlRelaxNGGrammarPtr tmp, ret;
+
+ schema->topgrammar = ret = xmlRelaxNGNewGrammar(ctxt);
+ if (schema->topgrammar == NULL) {
+ return (schema);
+ }
+ /*
+ * Link the new grammar in the tree
+ */
+ ret->parent = ctxt->grammar;
+ if (ctxt->grammar != NULL) {
+ tmp = ctxt->grammar->children;
+ if (tmp == NULL) {
+ ctxt->grammar->children = ret;
+ } else {
+ while (tmp->next != NULL)
+ tmp = tmp->next;
+ tmp->next = ret;
+ }
+ }
+ old = ctxt->grammar;
+ ctxt->grammar = ret;
+ xmlRelaxNGParseStart(ctxt, node);
+ if (old != NULL)
+ ctxt->grammar = old;
+ }
+ ctxt->define = olddefine;
+ if (schema->topgrammar->start != NULL) {
+ xmlRelaxNGCheckCycles(ctxt, schema->topgrammar->start, 0);
+ if ((ctxt->flags & XML_RELAXNG_IN_EXTERNALREF) == 0) {
+ xmlRelaxNGSimplify(ctxt, schema->topgrammar->start, NULL);
+ while ((schema->topgrammar->start != NULL) &&
+ (schema->topgrammar->start->type == XML_RELAXNG_NOOP) &&
+ (schema->topgrammar->start->next != NULL))
+ schema->topgrammar->start =
+ schema->topgrammar->start->content;
+ xmlRelaxNGCheckRules(ctxt, schema->topgrammar->start,
+ XML_RELAXNG_IN_START, XML_RELAXNG_NOOP);
+ }
+ }
+#ifdef DEBUG
+ if (schema == NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRelaxNGParseDocument() failed\n");
+#endif
+
+ return (schema);
+}
+
+/************************************************************************
+ * *
+ * Reading RelaxNGs *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlRelaxNGNewParserCtxt:
+ * @URL: the location of the schema
+ *
+ * Create an XML RelaxNGs parse context for that file/resource expected
+ * to contain an XML RelaxNGs file.
+ *
+ * Returns the parser context or NULL in case of error
+ */
+xmlRelaxNGParserCtxtPtr
+xmlRelaxNGNewParserCtxt(const char *URL)
+{
+ xmlRelaxNGParserCtxtPtr ret;
+
+ if (URL == NULL)
+ return (NULL);
+
+ ret =
+ (xmlRelaxNGParserCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGParserCtxt));
+ if (ret == NULL) {
+ xmlRngPErrMemory(NULL, "building parser\n");
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGParserCtxt));
+ ret->URL = xmlStrdup((const xmlChar *) URL);
+ ret->error = xmlGenericError;
+ ret->userData = xmlGenericErrorContext;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGNewMemParserCtxt:
+ * @buffer: a pointer to a char array containing the schemas
+ * @size: the size of the array
+ *
+ * Create an XML RelaxNGs parse context for that memory buffer expected
+ * to contain an XML RelaxNGs file.
+ *
+ * Returns the parser context or NULL in case of error
+ */
+xmlRelaxNGParserCtxtPtr
+xmlRelaxNGNewMemParserCtxt(const char *buffer, int size)
+{
+ xmlRelaxNGParserCtxtPtr ret;
+
+ if ((buffer == NULL) || (size <= 0))
+ return (NULL);
+
+ ret =
+ (xmlRelaxNGParserCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGParserCtxt));
+ if (ret == NULL) {
+ xmlRngPErrMemory(NULL, "building parser\n");
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGParserCtxt));
+ ret->buffer = buffer;
+ ret->size = size;
+ ret->error = xmlGenericError;
+ ret->userData = xmlGenericErrorContext;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGNewDocParserCtxt:
+ * @doc: a preparsed document tree
+ *
+ * Create an XML RelaxNGs parser context for that document.
+ * Note: since the process of compiling a RelaxNG schemas modifies the
+ * document, the @doc parameter is duplicated internally.
+ *
+ * Returns the parser context or NULL in case of error
+ */
+xmlRelaxNGParserCtxtPtr
+xmlRelaxNGNewDocParserCtxt(xmlDocPtr doc)
+{
+ xmlRelaxNGParserCtxtPtr ret;
+ xmlDocPtr copy;
+
+ if (doc == NULL)
+ return (NULL);
+ copy = xmlCopyDoc(doc, 1);
+ if (copy == NULL)
+ return (NULL);
+
+ ret =
+ (xmlRelaxNGParserCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGParserCtxt));
+ if (ret == NULL) {
+ xmlRngPErrMemory(NULL, "building parser\n");
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGParserCtxt));
+ ret->document = copy;
+ ret->userData = xmlGenericErrorContext;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGFreeParserCtxt:
+ * @ctxt: the schema parser context
+ *
+ * Free the resources associated to the schema parser context
+ */
+void
+xmlRelaxNGFreeParserCtxt(xmlRelaxNGParserCtxtPtr ctxt)
+{
+ if (ctxt == NULL)
+ return;
+ if (ctxt->URL != NULL)
+ xmlFree(ctxt->URL);
+ if (ctxt->doc != NULL)
+ xmlRelaxNGFreeDocument(ctxt->doc);
+ if (ctxt->interleaves != NULL)
+ xmlHashFree(ctxt->interleaves, NULL);
+ if (ctxt->documents != NULL)
+ xmlRelaxNGFreeDocumentList(ctxt->documents);
+ if (ctxt->includes != NULL)
+ xmlRelaxNGFreeIncludeList(ctxt->includes);
+ if (ctxt->docTab != NULL)
+ xmlFree(ctxt->docTab);
+ if (ctxt->incTab != NULL)
+ xmlFree(ctxt->incTab);
+ if (ctxt->defTab != NULL) {
+ int i;
+
+ for (i = 0; i < ctxt->defNr; i++)
+ xmlRelaxNGFreeDefine(ctxt->defTab[i]);
+ xmlFree(ctxt->defTab);
+ }
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlRelaxNGNormExtSpace:
+ * @value: a value
+ *
+ * Removes the leading and ending spaces of the value
+ * The string is modified "in situ"
+ */
+static void
+xmlRelaxNGNormExtSpace(xmlChar * value)
+{
+ xmlChar *start = value;
+ xmlChar *cur = value;
+
+ if (value == NULL)
+ return;
+
+ while (IS_BLANK_CH(*cur))
+ cur++;
+ if (cur == start) {
+ do {
+ while ((*cur != 0) && (!IS_BLANK_CH(*cur)))
+ cur++;
+ if (*cur == 0)
+ return;
+ start = cur;
+ while (IS_BLANK_CH(*cur))
+ cur++;
+ if (*cur == 0) {
+ *start = 0;
+ return;
+ }
+ } while (1);
+ } else {
+ do {
+ while ((*cur != 0) && (!IS_BLANK_CH(*cur)))
+ *start++ = *cur++;
+ if (*cur == 0) {
+ *start = 0;
+ return;
+ }
+ /* don't try to normalize the inner spaces */
+ while (IS_BLANK_CH(*cur))
+ cur++;
+ if (*cur == 0) {
+ *start = 0;
+ return;
+ }
+ *start++ = *cur++;
+ } while (1);
+ }
+}
+
+/**
+ * xmlRelaxNGCheckAttributes:
+ * @ctxt: a Relax-NG parser context
+ * @node: a Relax-NG node
+ *
+ * Check all the attributes on the given node
+ */
+static void
+xmlRelaxNGCleanupAttributes(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlAttrPtr cur, next;
+
+ cur = node->properties;
+ while (cur != NULL) {
+ next = cur->next;
+ if ((cur->ns == NULL) ||
+ (xmlStrEqual(cur->ns->href, xmlRelaxNGNs))) {
+ if (xmlStrEqual(cur->name, BAD_CAST "name")) {
+ if ((!xmlStrEqual(node->name, BAD_CAST "element")) &&
+ (!xmlStrEqual(node->name, BAD_CAST "attribute")) &&
+ (!xmlStrEqual(node->name, BAD_CAST "ref")) &&
+ (!xmlStrEqual(node->name, BAD_CAST "parentRef")) &&
+ (!xmlStrEqual(node->name, BAD_CAST "param")) &&
+ (!xmlStrEqual(node->name, BAD_CAST "define"))) {
+ xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
+ "Attribute %s is not allowed on %s\n",
+ cur->name, node->name);
+ }
+ } else if (xmlStrEqual(cur->name, BAD_CAST "type")) {
+ if ((!xmlStrEqual(node->name, BAD_CAST "value")) &&
+ (!xmlStrEqual(node->name, BAD_CAST "data"))) {
+ xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
+ "Attribute %s is not allowed on %s\n",
+ cur->name, node->name);
+ }
+ } else if (xmlStrEqual(cur->name, BAD_CAST "href")) {
+ if ((!xmlStrEqual(node->name, BAD_CAST "externalRef")) &&
+ (!xmlStrEqual(node->name, BAD_CAST "include"))) {
+ xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
+ "Attribute %s is not allowed on %s\n",
+ cur->name, node->name);
+ }
+ } else if (xmlStrEqual(cur->name, BAD_CAST "combine")) {
+ if ((!xmlStrEqual(node->name, BAD_CAST "start")) &&
+ (!xmlStrEqual(node->name, BAD_CAST "define"))) {
+ xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
+ "Attribute %s is not allowed on %s\n",
+ cur->name, node->name);
+ }
+ } else if (xmlStrEqual(cur->name, BAD_CAST "datatypeLibrary")) {
+ xmlChar *val;
+ xmlURIPtr uri;
+
+ val = xmlNodeListGetString(node->doc, cur->children, 1);
+ if (val != NULL) {
+ if (val[0] != 0) {
+ uri = xmlParseURI((const char *) val);
+ if (uri == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_INVALID_URI,
+ "Attribute %s contains invalid URI %s\n",
+ cur->name, val);
+ } else {
+ if (uri->scheme == NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_URI_NOT_ABSOLUTE,
+ "Attribute %s URI %s is not absolute\n",
+ cur->name, val);
+ }
+ if (uri->fragment != NULL) {
+ xmlRngPErr(ctxt, node, XML_RNGP_URI_FRAGMENT,
+ "Attribute %s URI %s has a fragment ID\n",
+ cur->name, val);
+ }
+ xmlFreeURI(uri);
+ }
+ }
+ xmlFree(val);
+ }
+ } else if (!xmlStrEqual(cur->name, BAD_CAST "ns")) {
+ xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_ATTRIBUTE,
+ "Unknown attribute %s on %s\n", cur->name,
+ node->name);
+ }
+ }
+ cur = next;
+ }
+}
+
+/**
+ * xmlRelaxNGCleanupTree:
+ * @ctxt: a Relax-NG parser context
+ * @root: an xmlNodePtr subtree
+ *
+ * Cleanup the subtree from unwanted nodes for parsing, resolve
+ * Include and externalRef lookups.
+ */
+static void
+xmlRelaxNGCleanupTree(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr root)
+{
+ xmlNodePtr cur, delete;
+
+ delete = NULL;
+ cur = root;
+ while (cur != NULL) {
+ if (delete != NULL) {
+ xmlUnlinkNode(delete);
+ xmlFreeNode(delete);
+ delete = NULL;
+ }
+ if (cur->type == XML_ELEMENT_NODE) {
+ /*
+ * Simplification 4.1. Annotations
+ */
+ if ((cur->ns == NULL) ||
+ (!xmlStrEqual(cur->ns->href, xmlRelaxNGNs))) {
+ if ((cur->parent != NULL) &&
+ (cur->parent->type == XML_ELEMENT_NODE) &&
+ ((xmlStrEqual(cur->parent->name, BAD_CAST "name")) ||
+ (xmlStrEqual(cur->parent->name, BAD_CAST "value")) ||
+ (xmlStrEqual(cur->parent->name, BAD_CAST "param")))) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_FOREIGN_ELEMENT,
+ "element %s doesn't allow foreign elements\n",
+ cur->parent->name, NULL);
+ }
+ delete = cur;
+ goto skip_children;
+ } else {
+ xmlRelaxNGCleanupAttributes(ctxt, cur);
+ if (xmlStrEqual(cur->name, BAD_CAST "externalRef")) {
+ xmlChar *href, *ns, *base, *URL;
+ xmlRelaxNGDocumentPtr docu;
+ xmlNodePtr tmp;
+ xmlURIPtr uri;
+
+ ns = xmlGetProp(cur, BAD_CAST "ns");
+ if (ns == NULL) {
+ tmp = cur->parent;
+ while ((tmp != NULL) &&
+ (tmp->type == XML_ELEMENT_NODE)) {
+ ns = xmlGetProp(tmp, BAD_CAST "ns");
+ if (ns != NULL)
+ break;
+ tmp = tmp->parent;
+ }
+ }
+ href = xmlGetProp(cur, BAD_CAST "href");
+ if (href == NULL) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_MISSING_HREF,
+ "xmlRelaxNGParse: externalRef has no href attribute\n",
+ NULL, NULL);
+ delete = cur;
+ goto skip_children;
+ }
+ uri = xmlParseURI((const char *) href);
+ if (uri == NULL) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
+ "Incorrect URI for externalRef %s\n",
+ href, NULL);
+ if (href != NULL)
+ xmlFree(href);
+ delete = cur;
+ goto skip_children;
+ }
+ if (uri->fragment != NULL) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
+ "Fragment forbidden in URI for externalRef %s\n",
+ href, NULL);
+ xmlFreeURI(uri);
+ if (href != NULL)
+ xmlFree(href);
+ delete = cur;
+ goto skip_children;
+ }
+ xmlFreeURI(uri);
+ base = xmlNodeGetBase(cur->doc, cur);
+ URL = xmlBuildURI(href, base);
+ if (URL == NULL) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
+ "Failed to compute URL for externalRef %s\n",
+ href, NULL);
+ if (href != NULL)
+ xmlFree(href);
+ if (base != NULL)
+ xmlFree(base);
+ delete = cur;
+ goto skip_children;
+ }
+ if (href != NULL)
+ xmlFree(href);
+ if (base != NULL)
+ xmlFree(base);
+ docu = xmlRelaxNGLoadExternalRef(ctxt, URL, ns);
+ if (docu == NULL) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_EXTERNAL_REF_FAILURE,
+ "Failed to load externalRef %s\n", URL,
+ NULL);
+ xmlFree(URL);
+ delete = cur;
+ goto skip_children;
+ }
+ if (ns != NULL)
+ xmlFree(ns);
+ xmlFree(URL);
+ cur->psvi = docu;
+ } else if (xmlStrEqual(cur->name, BAD_CAST "include")) {
+ xmlChar *href, *ns, *base, *URL;
+ xmlRelaxNGIncludePtr incl;
+ xmlNodePtr tmp;
+
+ href = xmlGetProp(cur, BAD_CAST "href");
+ if (href == NULL) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_MISSING_HREF,
+ "xmlRelaxNGParse: include has no href attribute\n",
+ NULL, NULL);
+ delete = cur;
+ goto skip_children;
+ }
+ base = xmlNodeGetBase(cur->doc, cur);
+ URL = xmlBuildURI(href, base);
+ if (URL == NULL) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
+ "Failed to compute URL for include %s\n",
+ href, NULL);
+ if (href != NULL)
+ xmlFree(href);
+ if (base != NULL)
+ xmlFree(base);
+ delete = cur;
+ goto skip_children;
+ }
+ if (href != NULL)
+ xmlFree(href);
+ if (base != NULL)
+ xmlFree(base);
+ ns = xmlGetProp(cur, BAD_CAST "ns");
+ if (ns == NULL) {
+ tmp = cur->parent;
+ while ((tmp != NULL) &&
+ (tmp->type == XML_ELEMENT_NODE)) {
+ ns = xmlGetProp(tmp, BAD_CAST "ns");
+ if (ns != NULL)
+ break;
+ tmp = tmp->parent;
+ }
+ }
+ incl = xmlRelaxNGLoadInclude(ctxt, URL, cur, ns);
+ if (ns != NULL)
+ xmlFree(ns);
+ if (incl == NULL) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_INCLUDE_FAILURE,
+ "Failed to load include %s\n", URL,
+ NULL);
+ xmlFree(URL);
+ delete = cur;
+ goto skip_children;
+ }
+ xmlFree(URL);
+ cur->psvi = incl;
+ } else if ((xmlStrEqual(cur->name, BAD_CAST "element")) ||
+ (xmlStrEqual(cur->name, BAD_CAST "attribute")))
+ {
+ xmlChar *name, *ns;
+ xmlNodePtr text = NULL;
+
+ /*
+ * Simplification 4.8. name attribute of element
+ * and attribute elements
+ */
+ name = xmlGetProp(cur, BAD_CAST "name");
+ if (name != NULL) {
+ if (cur->children == NULL) {
+ text =
+ xmlNewChild(cur, cur->ns, BAD_CAST "name",
+ name);
+ } else {
+ xmlNodePtr node;
+
+ node = xmlNewNode(cur->ns, BAD_CAST "name");
+ if (node != NULL) {
+ xmlAddPrevSibling(cur->children, node);
+ text = xmlNewText(name);
+ xmlAddChild(node, text);
+ text = node;
+ }
+ }
+ if (text == NULL) {
+ xmlRngPErr(ctxt, cur, XML_RNGP_CREATE_FAILURE,
+ "Failed to create a name %s element\n",
+ name, NULL);
+ }
+ xmlUnsetProp(cur, BAD_CAST "name");
+ xmlFree(name);
+ ns = xmlGetProp(cur, BAD_CAST "ns");
+ if (ns != NULL) {
+ if (text != NULL) {
+ xmlSetProp(text, BAD_CAST "ns", ns);
+ /* xmlUnsetProp(cur, BAD_CAST "ns"); */
+ }
+ xmlFree(ns);
+ } else if (xmlStrEqual(cur->name,
+ BAD_CAST "attribute")) {
+ xmlSetProp(text, BAD_CAST "ns", BAD_CAST "");
+ }
+ }
+ } else if ((xmlStrEqual(cur->name, BAD_CAST "name")) ||
+ (xmlStrEqual(cur->name, BAD_CAST "nsName")) ||
+ (xmlStrEqual(cur->name, BAD_CAST "value"))) {
+ /*
+ * Simplification 4.8. name attribute of element
+ * and attribute elements
+ */
+ if (xmlHasProp(cur, BAD_CAST "ns") == NULL) {
+ xmlNodePtr node;
+ xmlChar *ns = NULL;
+
+ node = cur->parent;
+ while ((node != NULL) &&
+ (node->type == XML_ELEMENT_NODE)) {
+ ns = xmlGetProp(node, BAD_CAST "ns");
+ if (ns != NULL) {
+ break;
+ }
+ node = node->parent;
+ }
+ if (ns == NULL) {
+ xmlSetProp(cur, BAD_CAST "ns", BAD_CAST "");
+ } else {
+ xmlSetProp(cur, BAD_CAST "ns", ns);
+ xmlFree(ns);
+ }
+ }
+ if (xmlStrEqual(cur->name, BAD_CAST "name")) {
+ xmlChar *name, *local, *prefix;
+
+ /*
+ * Simplification: 4.10. QNames
+ */
+ name = xmlNodeGetContent(cur);
+ if (name != NULL) {
+ local = xmlSplitQName2(name, &prefix);
+ if (local != NULL) {
+ xmlNsPtr ns;
+
+ ns = xmlSearchNs(cur->doc, cur, prefix);
+ if (ns == NULL) {
+ xmlRngPErr(ctxt, cur,
+ XML_RNGP_PREFIX_UNDEFINED,
+ "xmlRelaxNGParse: no namespace for prefix %s\n",
+ prefix, NULL);
+ } else {
+ xmlSetProp(cur, BAD_CAST "ns",
+ ns->href);
+ xmlNodeSetContent(cur, local);
+ }
+ xmlFree(local);
+ xmlFree(prefix);
+ }
+ xmlFree(name);
+ }
+ }
+ /*
+ * 4.16
+ */
+ if (xmlStrEqual(cur->name, BAD_CAST "nsName")) {
+ if (ctxt->flags & XML_RELAXNG_IN_NSEXCEPT) {
+ xmlRngPErr(ctxt, cur,
+ XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME,
+ "Found nsName/except//nsName forbidden construct\n",
+ NULL, NULL);
+ }
+ }
+ } else if ((xmlStrEqual(cur->name, BAD_CAST "except")) &&
+ (cur != root)) {
+ int oldflags = ctxt->flags;
+
+ /*
+ * 4.16
+ */
+ if ((cur->parent != NULL) &&
+ (xmlStrEqual
+ (cur->parent->name, BAD_CAST "anyName"))) {
+ ctxt->flags |= XML_RELAXNG_IN_ANYEXCEPT;
+ xmlRelaxNGCleanupTree(ctxt, cur);
+ ctxt->flags = oldflags;
+ goto skip_children;
+ } else if ((cur->parent != NULL) &&
+ (xmlStrEqual
+ (cur->parent->name, BAD_CAST "nsName"))) {
+ ctxt->flags |= XML_RELAXNG_IN_NSEXCEPT;
+ xmlRelaxNGCleanupTree(ctxt, cur);
+ ctxt->flags = oldflags;
+ goto skip_children;
+ }
+ } else if (xmlStrEqual(cur->name, BAD_CAST "anyName")) {
+ /*
+ * 4.16
+ */
+ if (ctxt->flags & XML_RELAXNG_IN_ANYEXCEPT) {
+ xmlRngPErr(ctxt, cur,
+ XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME,
+ "Found anyName/except//anyName forbidden construct\n",
+ NULL, NULL);
+ } else if (ctxt->flags & XML_RELAXNG_IN_NSEXCEPT) {
+ xmlRngPErr(ctxt, cur,
+ XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME,
+ "Found nsName/except//anyName forbidden construct\n",
+ NULL, NULL);
+ }
+ }
+ /*
+ * Thisd is not an else since "include" is transformed
+ * into a div
+ */
+ if (xmlStrEqual(cur->name, BAD_CAST "div")) {
+ xmlChar *ns;
+ xmlNodePtr child, ins, tmp;
+
+ /*
+ * implements rule 4.11
+ */
+
+ ns = xmlGetProp(cur, BAD_CAST "ns");
+
+ child = cur->children;
+ ins = cur;
+ while (child != NULL) {
+ if (ns != NULL) {
+ if (!xmlHasProp(child, BAD_CAST "ns")) {
+ xmlSetProp(child, BAD_CAST "ns", ns);
+ }
+ }
+ tmp = child->next;
+ xmlUnlinkNode(child);
+ ins = xmlAddNextSibling(ins, child);
+ child = tmp;
+ }
+ if (ns != NULL)
+ xmlFree(ns);
+ delete = cur;
+ goto skip_children;
+ }
+ }
+ }
+ /*
+ * Simplification 4.2 whitespaces
+ */
+ else if ((cur->type == XML_TEXT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE)) {
+ if (IS_BLANK_NODE(cur)) {
+ if (cur->parent->type == XML_ELEMENT_NODE) {
+ if ((!xmlStrEqual(cur->parent->name, BAD_CAST "value"))
+ &&
+ (!xmlStrEqual
+ (cur->parent->name, BAD_CAST "param")))
+ delete = cur;
+ } else {
+ delete = cur;
+ goto skip_children;
+ }
+ }
+ } else {
+ delete = cur;
+ goto skip_children;
+ }
+
+ /*
+ * Skip to next node
+ */
+ if (cur->children != NULL) {
+ if ((cur->children->type != XML_ENTITY_DECL) &&
+ (cur->children->type != XML_ENTITY_REF_NODE) &&
+ (cur->children->type != XML_ENTITY_NODE)) {
+ cur = cur->children;
+ continue;
+ }
+ }
+ skip_children:
+ if (cur->next != NULL) {
+ cur = cur->next;
+ continue;
+ }
+
+ do {
+ cur = cur->parent;
+ if (cur == NULL)
+ break;
+ if (cur == root) {
+ cur = NULL;
+ break;
+ }
+ if (cur->next != NULL) {
+ cur = cur->next;
+ break;
+ }
+ } while (cur != NULL);
+ }
+ if (delete != NULL) {
+ xmlUnlinkNode(delete);
+ xmlFreeNode(delete);
+ delete = NULL;
+ }
+}
+
+/**
+ * xmlRelaxNGCleanupDoc:
+ * @ctxt: a Relax-NG parser context
+ * @doc: an xmldocPtr document pointer
+ *
+ * Cleanup the document from unwanted nodes for parsing, resolve
+ * Include and externalRef lookups.
+ *
+ * Returns the cleaned up document or NULL in case of error
+ */
+static xmlDocPtr
+xmlRelaxNGCleanupDoc(xmlRelaxNGParserCtxtPtr ctxt, xmlDocPtr doc)
+{
+ xmlNodePtr root;
+
+ /*
+ * Extract the root
+ */
+ root = xmlDocGetRootElement(doc);
+ if (root == NULL) {
+ xmlRngPErr(ctxt, (xmlNodePtr) doc, XML_RNGP_EMPTY, "xmlRelaxNGParse: %s is empty\n",
+ ctxt->URL, NULL);
+ return (NULL);
+ }
+ xmlRelaxNGCleanupTree(ctxt, root);
+ return (doc);
+}
+
+/**
+ * xmlRelaxNGParse:
+ * @ctxt: a Relax-NG parser context
+ *
+ * parse a schema definition resource and build an internal
+ * XML Shema struture which can be used to validate instances.
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the internal XML RelaxNG structure built from the resource or
+ * NULL in case of error
+ */
+xmlRelaxNGPtr
+xmlRelaxNGParse(xmlRelaxNGParserCtxtPtr ctxt)
+{
+ xmlRelaxNGPtr ret = NULL;
+ xmlDocPtr doc;
+ xmlNodePtr root;
+
+ xmlRelaxNGInitTypes();
+
+ if (ctxt == NULL)
+ return (NULL);
+
+ /*
+ * First step is to parse the input document into an DOM/Infoset
+ */
+ if (ctxt->URL != NULL) {
+ doc = xmlReadFile((const char *) ctxt->URL,NULL,0);
+ if (doc == NULL) {
+ xmlRngPErr(ctxt, NULL, XML_RNGP_PARSE_ERROR,
+ "xmlRelaxNGParse: could not load %s\n", ctxt->URL,
+ NULL);
+ return (NULL);
+ }
+ } else if (ctxt->buffer != NULL) {
+ doc = xmlReadMemory(ctxt->buffer, ctxt->size,NULL,NULL,0);
+ if (doc == NULL) {
+ xmlRngPErr(ctxt, NULL, XML_RNGP_PARSE_ERROR,
+ "xmlRelaxNGParse: could not parse schemas\n", NULL,
+ NULL);
+ return (NULL);
+ }
+ doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
+ ctxt->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
+ } else if (ctxt->document != NULL) {
+ doc = ctxt->document;
+ } else {
+ xmlRngPErr(ctxt, NULL, XML_RNGP_EMPTY,
+ "xmlRelaxNGParse: nothing to parse\n", NULL, NULL);
+ return (NULL);
+ }
+ ctxt->document = doc;
+
+ /*
+ * Some preprocessing of the document content
+ */
+ doc = xmlRelaxNGCleanupDoc(ctxt, doc);
+ if (doc == NULL) {
+ xmlFreeDoc(ctxt->document);
+ ctxt->document = NULL;
+ return (NULL);
+ }
+
+ /*
+ * Then do the parsing for good
+ */
+ root = xmlDocGetRootElement(doc);
+ if (root == NULL) {
+ xmlRngPErr(ctxt, (xmlNodePtr) doc,
+ XML_RNGP_EMPTY, "xmlRelaxNGParse: %s is empty\n",
+ ctxt->URL, NULL);
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+ ret = xmlRelaxNGParseDocument(ctxt, root);
+ if (ret == NULL) {
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ /*
+ * Check the ref/defines links
+ */
+ /*
+ * try to preprocess interleaves
+ */
+ if (ctxt->interleaves != NULL) {
+ xmlHashScan(ctxt->interleaves,
+ (xmlHashScanner) xmlRelaxNGComputeInterleaves, ctxt);
+ }
+
+ /*
+ * if there was a parsing error return NULL
+ */
+ if (ctxt->nbErrors > 0) {
+ xmlRelaxNGFree(ret);
+ ctxt->document = NULL;
+ xmlFreeDoc(doc);
+ return (NULL);
+ }
+
+ /*
+ * try to compile (parts of) the schemas
+ */
+ if ((ret->topgrammar != NULL) && (ret->topgrammar->start != NULL)) {
+ if (ret->topgrammar->start->type != XML_RELAXNG_START) {
+ xmlRelaxNGDefinePtr def;
+
+ def = xmlRelaxNGNewDefine(ctxt, NULL);
+ if (def != NULL) {
+ def->type = XML_RELAXNG_START;
+ def->content = ret->topgrammar->start;
+ ret->topgrammar->start = def;
+ }
+ }
+ xmlRelaxNGTryCompile(ctxt, ret->topgrammar->start);
+ }
+
+ /*
+ * Transfer the pointer for cleanup at the schema level.
+ */
+ ret->doc = doc;
+ ctxt->document = NULL;
+ ret->documents = ctxt->documents;
+ ctxt->documents = NULL;
+
+ ret->includes = ctxt->includes;
+ ctxt->includes = NULL;
+ ret->defNr = ctxt->defNr;
+ ret->defTab = ctxt->defTab;
+ ctxt->defTab = NULL;
+ if (ctxt->idref == 1)
+ ret->idref = 1;
+
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGSetParserErrors:
+ * @ctxt: a Relax-NG validation context
+ * @err: the error callback
+ * @warn: the warning callback
+ * @ctx: contextual data for the callbacks
+ *
+ * Set the callback functions used to handle errors for a validation context
+ */
+void
+xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc err,
+ xmlRelaxNGValidityWarningFunc warn, void *ctx)
+{
+ if (ctxt == NULL)
+ return;
+ ctxt->error = err;
+ ctxt->warning = warn;
+ ctxt->userData = ctx;
+}
+
+/**
+ * xmlRelaxNGGetParserErrors:
+ * @ctxt: a Relax-NG validation context
+ * @err: the error callback result
+ * @warn: the warning callback result
+ * @ctx: contextual data for the callbacks result
+ *
+ * Get the callback information used to handle errors for a validation context
+ *
+ * Returns -1 in case of failure, 0 otherwise.
+ */
+int
+xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc * err,
+ xmlRelaxNGValidityWarningFunc * warn, void **ctx)
+{
+ if (ctxt == NULL)
+ return (-1);
+ if (err != NULL)
+ *err = ctxt->error;
+ if (warn != NULL)
+ *warn = ctxt->warning;
+ if (ctx != NULL)
+ *ctx = ctxt->userData;
+ return (0);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+
+/************************************************************************
+ * *
+ * Dump back a compiled form *
+ * *
+ ************************************************************************/
+static void xmlRelaxNGDumpDefine(FILE * output,
+ xmlRelaxNGDefinePtr define);
+
+/**
+ * xmlRelaxNGDumpDefines:
+ * @output: the file output
+ * @defines: a list of define structures
+ *
+ * Dump a RelaxNG structure back
+ */
+static void
+xmlRelaxNGDumpDefines(FILE * output, xmlRelaxNGDefinePtr defines)
+{
+ while (defines != NULL) {
+ xmlRelaxNGDumpDefine(output, defines);
+ defines = defines->next;
+ }
+}
+
+/**
+ * xmlRelaxNGDumpDefine:
+ * @output: the file output
+ * @define: a define structure
+ *
+ * Dump a RelaxNG structure back
+ */
+static void
+xmlRelaxNGDumpDefine(FILE * output, xmlRelaxNGDefinePtr define)
+{
+ if (define == NULL)
+ return;
+ switch (define->type) {
+ case XML_RELAXNG_EMPTY:
+ fprintf(output, "<empty/>\n");
+ break;
+ case XML_RELAXNG_NOT_ALLOWED:
+ fprintf(output, "<notAllowed/>\n");
+ break;
+ case XML_RELAXNG_TEXT:
+ fprintf(output, "<text/>\n");
+ break;
+ case XML_RELAXNG_ELEMENT:
+ fprintf(output, "<element>\n");
+ if (define->name != NULL) {
+ fprintf(output, "<name");
+ if (define->ns != NULL)
+ fprintf(output, " ns=\"%s\"", define->ns);
+ fprintf(output, ">%s</name>\n", define->name);
+ }
+ xmlRelaxNGDumpDefines(output, define->attrs);
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</element>\n");
+ break;
+ case XML_RELAXNG_LIST:
+ fprintf(output, "<list>\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</list>\n");
+ break;
+ case XML_RELAXNG_ONEORMORE:
+ fprintf(output, "<oneOrMore>\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</oneOrMore>\n");
+ break;
+ case XML_RELAXNG_ZEROORMORE:
+ fprintf(output, "<zeroOrMore>\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</zeroOrMore>\n");
+ break;
+ case XML_RELAXNG_CHOICE:
+ fprintf(output, "<choice>\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</choice>\n");
+ break;
+ case XML_RELAXNG_GROUP:
+ fprintf(output, "<group>\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</group>\n");
+ break;
+ case XML_RELAXNG_INTERLEAVE:
+ fprintf(output, "<interleave>\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</interleave>\n");
+ break;
+ case XML_RELAXNG_OPTIONAL:
+ fprintf(output, "<optional>\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</optional>\n");
+ break;
+ case XML_RELAXNG_ATTRIBUTE:
+ fprintf(output, "<attribute>\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</attribute>\n");
+ break;
+ case XML_RELAXNG_DEF:
+ fprintf(output, "<define");
+ if (define->name != NULL)
+ fprintf(output, " name=\"%s\"", define->name);
+ fprintf(output, ">\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</define>\n");
+ break;
+ case XML_RELAXNG_REF:
+ fprintf(output, "<ref");
+ if (define->name != NULL)
+ fprintf(output, " name=\"%s\"", define->name);
+ fprintf(output, ">\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</ref>\n");
+ break;
+ case XML_RELAXNG_PARENTREF:
+ fprintf(output, "<parentRef");
+ if (define->name != NULL)
+ fprintf(output, " name=\"%s\"", define->name);
+ fprintf(output, ">\n");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</parentRef>\n");
+ break;
+ case XML_RELAXNG_EXTERNALREF:
+ fprintf(output, "<externalRef>");
+ xmlRelaxNGDumpDefines(output, define->content);
+ fprintf(output, "</externalRef>\n");
+ break;
+ case XML_RELAXNG_DATATYPE:
+ case XML_RELAXNG_VALUE:
+ TODO break;
+ case XML_RELAXNG_START:
+ case XML_RELAXNG_EXCEPT:
+ case XML_RELAXNG_PARAM:
+ TODO break;
+ case XML_RELAXNG_NOOP:
+ xmlRelaxNGDumpDefines(output, define->content);
+ break;
+ }
+}
+
+/**
+ * xmlRelaxNGDumpGrammar:
+ * @output: the file output
+ * @grammar: a grammar structure
+ * @top: is this a top grammar
+ *
+ * Dump a RelaxNG structure back
+ */
+static void
+xmlRelaxNGDumpGrammar(FILE * output, xmlRelaxNGGrammarPtr grammar, int top)
+{
+ if (grammar == NULL)
+ return;
+
+ fprintf(output, "<grammar");
+ if (top)
+ fprintf(output, " xmlns=\"http://relaxng.org/ns/structure/1.0\"");
+ switch (grammar->combine) {
+ case XML_RELAXNG_COMBINE_UNDEFINED:
+ break;
+ case XML_RELAXNG_COMBINE_CHOICE:
+ fprintf(output, " combine=\"choice\"");
+ break;
+ case XML_RELAXNG_COMBINE_INTERLEAVE:
+ fprintf(output, " combine=\"interleave\"");
+ break;
+ default:
+ fprintf(output, " <!-- invalid combine value -->");
+ }
+ fprintf(output, ">\n");
+ if (grammar->start == NULL) {
+ fprintf(output, " <!-- grammar had no start -->");
+ } else {
+ fprintf(output, "<start>\n");
+ xmlRelaxNGDumpDefine(output, grammar->start);
+ fprintf(output, "</start>\n");
+ }
+ /* TODO ? Dump the defines ? */
+ fprintf(output, "</grammar>\n");
+}
+
+/**
+ * xmlRelaxNGDump:
+ * @output: the file output
+ * @schema: a schema structure
+ *
+ * Dump a RelaxNG structure back
+ */
+void
+xmlRelaxNGDump(FILE * output, xmlRelaxNGPtr schema)
+{
+ if (schema == NULL) {
+ fprintf(output, "RelaxNG empty or failed to compile\n");
+ return;
+ }
+ fprintf(output, "RelaxNG: ");
+ if (schema->doc == NULL) {
+ fprintf(output, "no document\n");
+ } else if (schema->doc->URL != NULL) {
+ fprintf(output, "%s\n", schema->doc->URL);
+ } else {
+ fprintf(output, "\n");
+ }
+ if (schema->topgrammar == NULL) {
+ fprintf(output, "RelaxNG has no top grammar\n");
+ return;
+ }
+ xmlRelaxNGDumpGrammar(output, schema->topgrammar, 1);
+}
+
+/**
+ * xmlRelaxNGDumpTree:
+ * @output: the file output
+ * @schema: a schema structure
+ *
+ * Dump the transformed RelaxNG tree.
+ */
+void
+xmlRelaxNGDumpTree(FILE * output, xmlRelaxNGPtr schema)
+{
+ if (schema == NULL) {
+ fprintf(output, "RelaxNG empty or failed to compile\n");
+ return;
+ }
+ if (schema->doc == NULL) {
+ fprintf(output, "no document\n");
+ } else {
+ xmlDocDump(output, schema->doc);
+ }
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ * *
+ * Validation of compiled content *
+ * *
+ ************************************************************************/
+static int xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define);
+
+/**
+ * xmlRelaxNGValidateCompiledCallback:
+ * @exec: the regular expression instance
+ * @token: the token which matched
+ * @transdata: callback data, the define for the subelement if available
+ @ @inputdata: callback data, the Relax NG validation context
+ *
+ * Handle the callback and if needed validate the element children.
+ */
+static void
+xmlRelaxNGValidateCompiledCallback(xmlRegExecCtxtPtr exec ATTRIBUTE_UNUSED,
+ const xmlChar * token,
+ void *transdata, void *inputdata)
+{
+ xmlRelaxNGValidCtxtPtr ctxt = (xmlRelaxNGValidCtxtPtr) inputdata;
+ xmlRelaxNGDefinePtr define = (xmlRelaxNGDefinePtr) transdata;
+ int ret;
+
+#ifdef DEBUG_COMPILE
+ xmlGenericError(xmlGenericErrorContext,
+ "Compiled callback for: '%s'\n", token);
+#endif
+ if (ctxt == NULL) {
+ fprintf(stderr, "callback on %s missing context\n", token);
+ if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
+ ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
+ return;
+ }
+ if (define == NULL) {
+ if (token[0] == '#')
+ return;
+ fprintf(stderr, "callback on %s missing define\n", token);
+ if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
+ ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
+ return;
+ }
+ if ((ctxt == NULL) || (define == NULL)) {
+ fprintf(stderr, "callback on %s missing info\n", token);
+ if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
+ ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
+ return;
+ } else if (define->type != XML_RELAXNG_ELEMENT) {
+ fprintf(stderr, "callback on %s define is not element\n", token);
+ if (ctxt->errNo == XML_RELAXNG_OK)
+ ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
+ return;
+ }
+ ret = xmlRelaxNGValidateDefinition(ctxt, define);
+ if (ret != 0)
+ ctxt->perr = ret;
+}
+
+/**
+ * xmlRelaxNGValidateCompiledContent:
+ * @ctxt: the RelaxNG validation context
+ * @regexp: the regular expression as compiled
+ * @content: list of children to test against the regexp
+ *
+ * Validate the content model of an element or start using the regexp
+ *
+ * Returns 0 in case of success, -1 in case of error.
+ */
+static int
+xmlRelaxNGValidateCompiledContent(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRegexpPtr regexp, xmlNodePtr content)
+{
+ xmlRegExecCtxtPtr exec;
+ xmlNodePtr cur;
+ int ret = 0;
+ int oldperr = ctxt->perr;
+
+ if ((ctxt == NULL) || (regexp == NULL))
+ return (-1);
+ exec = xmlRegNewExecCtxt(regexp,
+ xmlRelaxNGValidateCompiledCallback, ctxt);
+ ctxt->perr = 0;
+ cur = content;
+ while (cur != NULL) {
+ ctxt->state->seq = cur;
+ switch (cur->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ if (xmlIsBlankNode(cur))
+ break;
+ ret = xmlRegExecPushString(exec, BAD_CAST "#text", ctxt);
+ if (ret < 0) {
+ VALID_ERR2(XML_RELAXNG_ERR_TEXTWRONG,
+ cur->parent->name);
+ }
+ break;
+ case XML_ELEMENT_NODE:
+ if (cur->ns != NULL) {
+ ret = xmlRegExecPushString2(exec, cur->name,
+ cur->ns->href, ctxt);
+ } else {
+ ret = xmlRegExecPushString(exec, cur->name, ctxt);
+ }
+ if (ret < 0) {
+ VALID_ERR2(XML_RELAXNG_ERR_ELEMWRONG, cur->name);
+ }
+ break;
+ default:
+ break;
+ }
+ if (ret < 0)
+ break;
+ /*
+ * Switch to next element
+ */
+ cur = cur->next;
+ }
+ ret = xmlRegExecPushString(exec, NULL, NULL);
+ if (ret == 1) {
+ ret = 0;
+ ctxt->state->seq = NULL;
+ } else if (ret == 0) {
+ /*
+ * TODO: get some of the names needed to exit the current state of exec
+ */
+ VALID_ERR2(XML_RELAXNG_ERR_NOELEM, BAD_CAST "");
+ ret = -1;
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ } else {
+ ret = -1;
+ }
+ xmlRegFreeExecCtxt(exec);
+ /*
+ * There might be content model errors outside of the pure
+ * regexp validation, e.g. for attribute values.
+ */
+ if ((ret == 0) && (ctxt->perr != 0)) {
+ ret = ctxt->perr;
+ }
+ ctxt->perr = oldperr;
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Progressive validation of when possible *
+ * *
+ ************************************************************************/
+static int xmlRelaxNGValidateAttributeList(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr defines);
+static int xmlRelaxNGValidateElementEnd(xmlRelaxNGValidCtxtPtr ctxt,
+ int dolog);
+static void xmlRelaxNGLogBestError(xmlRelaxNGValidCtxtPtr ctxt);
+
+/**
+ * xmlRelaxNGElemPush:
+ * @ctxt: the validation context
+ * @exec: the regexp runtime for the new content model
+ *
+ * Push a new regexp for the current node content model on the stack
+ *
+ * Returns 0 in case of success and -1 in case of error.
+ */
+static int
+xmlRelaxNGElemPush(xmlRelaxNGValidCtxtPtr ctxt, xmlRegExecCtxtPtr exec)
+{
+ if (ctxt->elemTab == NULL) {
+ ctxt->elemMax = 10;
+ ctxt->elemTab = (xmlRegExecCtxtPtr *) xmlMalloc(ctxt->elemMax *
+ sizeof
+ (xmlRegExecCtxtPtr));
+ if (ctxt->elemTab == NULL) {
+ xmlRngVErrMemory(ctxt, "validating\n");
+ return (-1);
+ }
+ }
+ if (ctxt->elemNr >= ctxt->elemMax) {
+ ctxt->elemMax *= 2;
+ ctxt->elemTab = (xmlRegExecCtxtPtr *) xmlRealloc(ctxt->elemTab,
+ ctxt->elemMax *
+ sizeof
+ (xmlRegExecCtxtPtr));
+ if (ctxt->elemTab == NULL) {
+ xmlRngVErrMemory(ctxt, "validating\n");
+ return (-1);
+ }
+ }
+ ctxt->elemTab[ctxt->elemNr++] = exec;
+ ctxt->elem = exec;
+ return (0);
+}
+
+/**
+ * xmlRelaxNGElemPop:
+ * @ctxt: the validation context
+ *
+ * Pop the regexp of the current node content model from the stack
+ *
+ * Returns the exec or NULL if empty
+ */
+static xmlRegExecCtxtPtr
+xmlRelaxNGElemPop(xmlRelaxNGValidCtxtPtr ctxt)
+{
+ xmlRegExecCtxtPtr ret;
+
+ if (ctxt->elemNr <= 0)
+ return (NULL);
+ ctxt->elemNr--;
+ ret = ctxt->elemTab[ctxt->elemNr];
+ ctxt->elemTab[ctxt->elemNr] = NULL;
+ if (ctxt->elemNr > 0)
+ ctxt->elem = ctxt->elemTab[ctxt->elemNr - 1];
+ else
+ ctxt->elem = NULL;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidateProgressiveCallback:
+ * @exec: the regular expression instance
+ * @token: the token which matched
+ * @transdata: callback data, the define for the subelement if available
+ @ @inputdata: callback data, the Relax NG validation context
+ *
+ * Handle the callback and if needed validate the element children.
+ * some of the in/out informations are passed via the context in @inputdata.
+ */
+static void
+xmlRelaxNGValidateProgressiveCallback(xmlRegExecCtxtPtr exec
+ ATTRIBUTE_UNUSED,
+ const xmlChar * token,
+ void *transdata, void *inputdata)
+{
+ xmlRelaxNGValidCtxtPtr ctxt = (xmlRelaxNGValidCtxtPtr) inputdata;
+ xmlRelaxNGDefinePtr define = (xmlRelaxNGDefinePtr) transdata;
+ xmlRelaxNGValidStatePtr state, oldstate;
+ xmlNodePtr node = ctxt->pnode;
+ int ret = 0, oldflags;
+
+#ifdef DEBUG_PROGRESSIVE
+ xmlGenericError(xmlGenericErrorContext,
+ "Progressive callback for: '%s'\n", token);
+#endif
+ if (ctxt == NULL) {
+ fprintf(stderr, "callback on %s missing context\n", token);
+ return;
+ }
+ ctxt->pstate = 1;
+ if (define == NULL) {
+ if (token[0] == '#')
+ return;
+ fprintf(stderr, "callback on %s missing define\n", token);
+ if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
+ ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
+ ctxt->pstate = -1;
+ return;
+ }
+ if ((ctxt == NULL) || (define == NULL)) {
+ fprintf(stderr, "callback on %s missing info\n", token);
+ if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
+ ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
+ ctxt->pstate = -1;
+ return;
+ } else if (define->type != XML_RELAXNG_ELEMENT) {
+ fprintf(stderr, "callback on %s define is not element\n", token);
+ if (ctxt->errNo == XML_RELAXNG_OK)
+ ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
+ ctxt->pstate = -1;
+ return;
+ }
+ if (node->type != XML_ELEMENT_NODE) {
+ VALID_ERR(XML_RELAXNG_ERR_NOTELEM);
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ ctxt->pstate = -1;
+ return;
+ }
+ if (define->contModel == NULL) {
+ /*
+ * this node cannot be validated in a streamable fashion
+ */
+#ifdef DEBUG_PROGRESSIVE
+ xmlGenericError(xmlGenericErrorContext,
+ "Element '%s' validation is not streamable\n",
+ token);
+#endif
+ ctxt->pstate = 0;
+ ctxt->pdef = define;
+ return;
+ }
+ exec = xmlRegNewExecCtxt(define->contModel,
+ xmlRelaxNGValidateProgressiveCallback, ctxt);
+ if (exec == NULL) {
+ ctxt->pstate = -1;
+ return;
+ }
+ xmlRelaxNGElemPush(ctxt, exec);
+
+ /*
+ * Validate the attributes part of the content.
+ */
+ state = xmlRelaxNGNewValidState(ctxt, node);
+ if (state == NULL) {
+ ctxt->pstate = -1;
+ return;
+ }
+ oldstate = ctxt->state;
+ ctxt->state = state;
+ if (define->attrs != NULL) {
+ ret = xmlRelaxNGValidateAttributeList(ctxt, define->attrs);
+ if (ret != 0) {
+ ctxt->pstate = -1;
+ VALID_ERR2(XML_RELAXNG_ERR_ATTRVALID, node->name);
+ }
+ }
+ if (ctxt->state != NULL) {
+ ctxt->state->seq = NULL;
+ ret = xmlRelaxNGValidateElementEnd(ctxt, 1);
+ if (ret != 0) {
+ ctxt->pstate = -1;
+ }
+ xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ } else if (ctxt->states != NULL) {
+ int tmp = -1, i;
+
+ oldflags = ctxt->flags;
+
+ for (i = 0; i < ctxt->states->nbState; i++) {
+ state = ctxt->states->tabState[i];
+ ctxt->state = state;
+ ctxt->state->seq = NULL;
+
+ if (xmlRelaxNGValidateElementEnd(ctxt, 0) == 0) {
+ tmp = 0;
+ break;
+ }
+ }
+ if (tmp != 0) {
+ /*
+ * validation error, log the message for the "best" one
+ */
+ ctxt->flags |= FLAGS_IGNORABLE;
+ xmlRelaxNGLogBestError(ctxt);
+ }
+ for (i = 0; i < ctxt->states->nbState; i++) {
+ xmlRelaxNGFreeValidState(ctxt, ctxt->states->tabState[i]);
+ }
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->states = NULL;
+ if ((ret == 0) && (tmp == -1))
+ ctxt->pstate = -1;
+ ctxt->flags = oldflags;
+ }
+ if (ctxt->pstate == -1) {
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
+ xmlRelaxNGDumpValidError(ctxt);
+ }
+ }
+ ctxt->state = oldstate;
+}
+
+/**
+ * xmlRelaxNGValidatePushElement:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ *
+ * Push a new element start on the RelaxNG validation stack.
+ *
+ * returns 1 if no validation problem was found or 0 if validating the
+ * element requires a full node, and -1 in case of error.
+ */
+int
+xmlRelaxNGValidatePushElement(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc ATTRIBUTE_UNUSED,
+ xmlNodePtr elem)
+{
+ int ret = 1;
+
+ if ((ctxt == NULL) || (elem == NULL))
+ return (-1);
+
+#ifdef DEBUG_PROGRESSIVE
+ xmlGenericError(xmlGenericErrorContext, "PushElem %s\n", elem->name);
+#endif
+ if (ctxt->elem == 0) {
+ xmlRelaxNGPtr schema;
+ xmlRelaxNGGrammarPtr grammar;
+ xmlRegExecCtxtPtr exec;
+ xmlRelaxNGDefinePtr define;
+
+ schema = ctxt->schema;
+ if (schema == NULL) {
+ VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
+ return (-1);
+ }
+ grammar = schema->topgrammar;
+ if ((grammar == NULL) || (grammar->start == NULL)) {
+ VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
+ return (-1);
+ }
+ define = grammar->start;
+ if (define->contModel == NULL) {
+ ctxt->pdef = define;
+ return (0);
+ }
+ exec = xmlRegNewExecCtxt(define->contModel,
+ xmlRelaxNGValidateProgressiveCallback,
+ ctxt);
+ if (exec == NULL) {
+ return (-1);
+ }
+ xmlRelaxNGElemPush(ctxt, exec);
+ }
+ ctxt->pnode = elem;
+ ctxt->pstate = 0;
+ if (elem->ns != NULL) {
+ ret =
+ xmlRegExecPushString2(ctxt->elem, elem->name, elem->ns->href,
+ ctxt);
+ } else {
+ ret = xmlRegExecPushString(ctxt->elem, elem->name, ctxt);
+ }
+ if (ret < 0) {
+ VALID_ERR2(XML_RELAXNG_ERR_ELEMWRONG, elem->name);
+ } else {
+ if (ctxt->pstate == 0)
+ ret = 0;
+ else if (ctxt->pstate < 0)
+ ret = -1;
+ else
+ ret = 1;
+ }
+#ifdef DEBUG_PROGRESSIVE
+ if (ret < 0)
+ xmlGenericError(xmlGenericErrorContext, "PushElem %s failed\n",
+ elem->name);
+#endif
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidatePushCData:
+ * @ctxt: the RelaxNG validation context
+ * @data: some character data read
+ * @len: the lenght of the data
+ *
+ * check the CData parsed for validation in the current stack
+ *
+ * returns 1 if no validation problem was found or -1 otherwise
+ */
+int
+xmlRelaxNGValidatePushCData(xmlRelaxNGValidCtxtPtr ctxt,
+ const xmlChar * data, int len ATTRIBUTE_UNUSED)
+{
+ int ret = 1;
+
+ if ((ctxt == NULL) || (ctxt->elem == NULL) || (data == NULL))
+ return (-1);
+
+#ifdef DEBUG_PROGRESSIVE
+ xmlGenericError(xmlGenericErrorContext, "CDATA %s %d\n", data, len);
+#endif
+
+ while (*data != 0) {
+ if (!IS_BLANK_CH(*data))
+ break;
+ data++;
+ }
+ if (*data == 0)
+ return (1);
+
+ ret = xmlRegExecPushString(ctxt->elem, BAD_CAST "#text", ctxt);
+ if (ret < 0) {
+ VALID_ERR2(XML_RELAXNG_ERR_TEXTWRONG, BAD_CAST " TODO ");
+#ifdef DEBUG_PROGRESSIVE
+ xmlGenericError(xmlGenericErrorContext, "CDATA failed\n");
+#endif
+
+ return (-1);
+ }
+ return (1);
+}
+
+/**
+ * xmlRelaxNGValidatePopElement:
+ * @ctxt: the RelaxNG validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ *
+ * Pop the element end from the RelaxNG validation stack.
+ *
+ * returns 1 if no validation problem was found or 0 otherwise
+ */
+int
+xmlRelaxNGValidatePopElement(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc ATTRIBUTE_UNUSED,
+ xmlNodePtr elem)
+{
+ int ret;
+ xmlRegExecCtxtPtr exec;
+
+ if ((ctxt == NULL) || (ctxt->elem == NULL) || (elem == NULL))
+ return (-1);
+#ifdef DEBUG_PROGRESSIVE
+ xmlGenericError(xmlGenericErrorContext, "PopElem %s\n", elem->name);
+#endif
+ /*
+ * verify that we reached a terminal state of the content model.
+ */
+ exec = xmlRelaxNGElemPop(ctxt);
+ ret = xmlRegExecPushString(exec, NULL, NULL);
+ if (ret == 0) {
+ /*
+ * TODO: get some of the names needed to exit the current state of exec
+ */
+ VALID_ERR2(XML_RELAXNG_ERR_NOELEM, BAD_CAST "");
+ ret = -1;
+ } else if (ret < 0) {
+ ret = -1;
+ } else {
+ ret = 1;
+ }
+ xmlRegFreeExecCtxt(exec);
+#ifdef DEBUG_PROGRESSIVE
+ if (ret < 0)
+ xmlGenericError(xmlGenericErrorContext, "PopElem %s failed\n",
+ elem->name);
+#endif
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidateFullElement:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ *
+ * Validate a full subtree when xmlRelaxNGValidatePushElement() returned
+ * 0 and the content of the node has been expanded.
+ *
+ * returns 1 if no validation problem was found or -1 in case of error.
+ */
+int
+xmlRelaxNGValidateFullElement(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlDocPtr doc ATTRIBUTE_UNUSED,
+ xmlNodePtr elem)
+{
+ int ret;
+ xmlRelaxNGValidStatePtr state;
+
+ if ((ctxt == NULL) || (ctxt->pdef == NULL) || (elem == NULL))
+ return (-1);
+#ifdef DEBUG_PROGRESSIVE
+ xmlGenericError(xmlGenericErrorContext, "FullElem %s\n", elem->name);
+#endif
+ state = xmlRelaxNGNewValidState(ctxt, elem->parent);
+ if (state == NULL) {
+ return (-1);
+ }
+ state->seq = elem;
+ ctxt->state = state;
+ ctxt->errNo = XML_RELAXNG_OK;
+ ret = xmlRelaxNGValidateDefinition(ctxt, ctxt->pdef);
+ if ((ret != 0) || (ctxt->errNo != XML_RELAXNG_OK))
+ ret = -1;
+ else
+ ret = 1;
+ xmlRelaxNGFreeValidState(ctxt, state);
+ ctxt->state = NULL;
+#ifdef DEBUG_PROGRESSIVE
+ if (ret < 0)
+ xmlGenericError(xmlGenericErrorContext, "FullElem %s failed\n",
+ elem->name);
+#endif
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Generic interpreted validation implementation *
+ * *
+ ************************************************************************/
+static int xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define);
+
+/**
+ * xmlRelaxNGSkipIgnored:
+ * @ctxt: a schema validation context
+ * @node: the top node.
+ *
+ * Skip ignorable nodes in that context
+ *
+ * Returns the new sibling or NULL in case of error.
+ */
+static xmlNodePtr
+xmlRelaxNGSkipIgnored(xmlRelaxNGValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ xmlNodePtr node)
+{
+ /*
+ * TODO complete and handle entities
+ */
+ while ((node != NULL) &&
+ ((node->type == XML_COMMENT_NODE) ||
+ (node->type == XML_PI_NODE) ||
+ (node->type == XML_XINCLUDE_START) ||
+ (node->type == XML_XINCLUDE_END) ||
+ (((node->type == XML_TEXT_NODE) ||
+ (node->type == XML_CDATA_SECTION_NODE)) &&
+ ((ctxt->flags & FLAGS_MIXED_CONTENT) ||
+ (IS_BLANK_NODE(node)))))) {
+ node = node->next;
+ }
+ return (node);
+}
+
+/**
+ * xmlRelaxNGNormalize:
+ * @ctxt: a schema validation context
+ * @str: the string to normalize
+ *
+ * Implements the normalizeWhiteSpace( s ) function from
+ * section 6.2.9 of the spec
+ *
+ * Returns the new string or NULL in case of error.
+ */
+static xmlChar *
+xmlRelaxNGNormalize(xmlRelaxNGValidCtxtPtr ctxt, const xmlChar * str)
+{
+ xmlChar *ret, *p;
+ const xmlChar *tmp;
+ int len;
+
+ if (str == NULL)
+ return (NULL);
+ tmp = str;
+ while (*tmp != 0)
+ tmp++;
+ len = tmp - str;
+
+ ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlRngVErrMemory(ctxt, "validating\n");
+ return (NULL);
+ }
+ p = ret;
+ while (IS_BLANK_CH(*str))
+ str++;
+ while (*str != 0) {
+ if (IS_BLANK_CH(*str)) {
+ while (IS_BLANK_CH(*str))
+ str++;
+ if (*str == 0)
+ break;
+ *p++ = ' ';
+ } else
+ *p++ = *str++;
+ }
+ *p = 0;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidateDatatype:
+ * @ctxt: a Relax-NG validation context
+ * @value: the string value
+ * @type: the datatype definition
+ * @node: the node
+ *
+ * Validate the given value against the dataype
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateDatatype(xmlRelaxNGValidCtxtPtr ctxt,
+ const xmlChar * value,
+ xmlRelaxNGDefinePtr define, xmlNodePtr node)
+{
+ int ret, tmp;
+ xmlRelaxNGTypeLibraryPtr lib;
+ void *result = NULL;
+ xmlRelaxNGDefinePtr cur;
+
+ if ((define == NULL) || (define->data == NULL)) {
+ return (-1);
+ }
+ lib = (xmlRelaxNGTypeLibraryPtr) define->data;
+ if (lib->check != NULL) {
+ if ((define->attrs != NULL) &&
+ (define->attrs->type == XML_RELAXNG_PARAM)) {
+ ret =
+ lib->check(lib->data, define->name, value, &result, node);
+ } else {
+ ret = lib->check(lib->data, define->name, value, NULL, node);
+ }
+ } else
+ ret = -1;
+ if (ret < 0) {
+ VALID_ERR2(XML_RELAXNG_ERR_TYPE, define->name);
+ if ((result != NULL) && (lib != NULL) && (lib->freef != NULL))
+ lib->freef(lib->data, result);
+ return (-1);
+ } else if (ret == 1) {
+ ret = 0;
+ } else if (ret == 2) {
+ VALID_ERR2P(XML_RELAXNG_ERR_DUPID, value);
+ } else {
+ VALID_ERR3P(XML_RELAXNG_ERR_TYPEVAL, define->name, value);
+ ret = -1;
+ }
+ cur = define->attrs;
+ while ((ret == 0) && (cur != NULL) && (cur->type == XML_RELAXNG_PARAM)) {
+ if (lib->facet != NULL) {
+ tmp = lib->facet(lib->data, define->name, cur->name,
+ cur->value, value, result);
+ if (tmp != 0)
+ ret = -1;
+ }
+ cur = cur->next;
+ }
+ if ((ret == 0) && (define->content != NULL)) {
+ const xmlChar *oldvalue, *oldendvalue;
+
+ oldvalue = ctxt->state->value;
+ oldendvalue = ctxt->state->endvalue;
+ ctxt->state->value = (xmlChar *) value;
+ ctxt->state->endvalue = NULL;
+ ret = xmlRelaxNGValidateValue(ctxt, define->content);
+ ctxt->state->value = (xmlChar *) oldvalue;
+ ctxt->state->endvalue = (xmlChar *) oldendvalue;
+ }
+ if ((result != NULL) && (lib != NULL) && (lib->freef != NULL))
+ lib->freef(lib->data, result);
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGNextValue:
+ * @ctxt: a Relax-NG validation context
+ *
+ * Skip to the next value when validating within a list
+ *
+ * Returns 0 if the operation succeeded or an error code.
+ */
+static int
+xmlRelaxNGNextValue(xmlRelaxNGValidCtxtPtr ctxt)
+{
+ xmlChar *cur;
+
+ cur = ctxt->state->value;
+ if ((cur == NULL) || (ctxt->state->endvalue == NULL)) {
+ ctxt->state->value = NULL;
+ ctxt->state->endvalue = NULL;
+ return (0);
+ }
+ while (*cur != 0)
+ cur++;
+ while ((cur != ctxt->state->endvalue) && (*cur == 0))
+ cur++;
+ if (cur == ctxt->state->endvalue)
+ ctxt->state->value = NULL;
+ else
+ ctxt->state->value = cur;
+ return (0);
+}
+
+/**
+ * xmlRelaxNGValidateValueList:
+ * @ctxt: a Relax-NG validation context
+ * @defines: the list of definitions to verify
+ *
+ * Validate the given set of definitions for the current value
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateValueList(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr defines)
+{
+ int ret = 0;
+
+ while (defines != NULL) {
+ ret = xmlRelaxNGValidateValue(ctxt, defines);
+ if (ret != 0)
+ break;
+ defines = defines->next;
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidateValue:
+ * @ctxt: a Relax-NG validation context
+ * @define: the definition to verify
+ *
+ * Validate the given definition for the current value
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define)
+{
+ int ret = 0, oldflags;
+ xmlChar *value;
+
+ value = ctxt->state->value;
+ switch (define->type) {
+ case XML_RELAXNG_EMPTY:{
+ if ((value != NULL) && (value[0] != 0)) {
+ int idx = 0;
+
+ while (IS_BLANK_CH(value[idx]))
+ idx++;
+ if (value[idx] != 0)
+ ret = -1;
+ }
+ break;
+ }
+ case XML_RELAXNG_TEXT:
+ break;
+ case XML_RELAXNG_VALUE:{
+ if (!xmlStrEqual(value, define->value)) {
+ if (define->name != NULL) {
+ xmlRelaxNGTypeLibraryPtr lib;
+
+ lib = (xmlRelaxNGTypeLibraryPtr) define->data;
+ if ((lib != NULL) && (lib->comp != NULL)) {
+ ret = lib->comp(lib->data, define->name,
+ define->value, define->node,
+ (void *) define->attrs,
+ value, ctxt->state->node);
+ } else
+ ret = -1;
+ if (ret < 0) {
+ VALID_ERR2(XML_RELAXNG_ERR_TYPECMP,
+ define->name);
+ return (-1);
+ } else if (ret == 1) {
+ ret = 0;
+ } else {
+ ret = -1;
+ }
+ } else {
+ xmlChar *nval, *nvalue;
+
+ /*
+ * TODO: trivial optimizations are possible by
+ * computing at compile-time
+ */
+ nval = xmlRelaxNGNormalize(ctxt, define->value);
+ nvalue = xmlRelaxNGNormalize(ctxt, value);
+
+ if ((nval == NULL) || (nvalue == NULL) ||
+ (!xmlStrEqual(nval, nvalue)))
+ ret = -1;
+ if (nval != NULL)
+ xmlFree(nval);
+ if (nvalue != NULL)
+ xmlFree(nvalue);
+ }
+ }
+ if (ret == 0)
+ xmlRelaxNGNextValue(ctxt);
+ break;
+ }
+ case XML_RELAXNG_DATATYPE:{
+ ret = xmlRelaxNGValidateDatatype(ctxt, value, define,
+ ctxt->state->seq);
+ if (ret == 0)
+ xmlRelaxNGNextValue(ctxt);
+
+ break;
+ }
+ case XML_RELAXNG_CHOICE:{
+ xmlRelaxNGDefinePtr list = define->content;
+ xmlChar *oldvalue;
+
+ oldflags = ctxt->flags;
+ ctxt->flags |= FLAGS_IGNORABLE;
+
+ oldvalue = ctxt->state->value;
+ while (list != NULL) {
+ ret = xmlRelaxNGValidateValue(ctxt, list);
+ if (ret == 0) {
+ break;
+ }
+ ctxt->state->value = oldvalue;
+ list = list->next;
+ }
+ ctxt->flags = oldflags;
+ if (ret != 0) {
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ } else {
+ if (ctxt->errNr > 0)
+ xmlRelaxNGPopErrors(ctxt, 0);
+ }
+ if (ret == 0)
+ xmlRelaxNGNextValue(ctxt);
+ break;
+ }
+ case XML_RELAXNG_LIST:{
+ xmlRelaxNGDefinePtr list = define->content;
+ xmlChar *oldvalue, *oldend, *val, *cur;
+
+#ifdef DEBUG_LIST
+ int nb_values = 0;
+#endif
+
+ oldvalue = ctxt->state->value;
+ oldend = ctxt->state->endvalue;
+
+ val = xmlStrdup(oldvalue);
+ if (val == NULL) {
+ val = xmlStrdup(BAD_CAST "");
+ }
+ if (val == NULL) {
+ VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
+ return (-1);
+ }
+ cur = val;
+ while (*cur != 0) {
+ if (IS_BLANK_CH(*cur)) {
+ *cur = 0;
+ cur++;
+#ifdef DEBUG_LIST
+ nb_values++;
+#endif
+ while (IS_BLANK_CH(*cur))
+ *cur++ = 0;
+ } else
+ cur++;
+ }
+#ifdef DEBUG_LIST
+ xmlGenericError(xmlGenericErrorContext,
+ "list value: '%s' found %d items\n",
+ oldvalue, nb_values);
+ nb_values = 0;
+#endif
+ ctxt->state->endvalue = cur;
+ cur = val;
+ while ((*cur == 0) && (cur != ctxt->state->endvalue))
+ cur++;
+
+ ctxt->state->value = cur;
+
+ while (list != NULL) {
+ if (ctxt->state->value == ctxt->state->endvalue)
+ ctxt->state->value = NULL;
+ ret = xmlRelaxNGValidateValue(ctxt, list);
+ if (ret != 0) {
+#ifdef DEBUG_LIST
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to validate value: '%s' with %d rule\n",
+ ctxt->state->value, nb_values);
+#endif
+ break;
+ }
+#ifdef DEBUG_LIST
+ nb_values++;
+#endif
+ list = list->next;
+ }
+
+ if ((ret == 0) && (ctxt->state->value != NULL) &&
+ (ctxt->state->value != ctxt->state->endvalue)) {
+ VALID_ERR2(XML_RELAXNG_ERR_LISTEXTRA,
+ ctxt->state->value);
+ ret = -1;
+ }
+ xmlFree(val);
+ ctxt->state->value = oldvalue;
+ ctxt->state->endvalue = oldend;
+ break;
+ }
+ case XML_RELAXNG_ONEORMORE:
+ ret = xmlRelaxNGValidateValueList(ctxt, define->content);
+ if (ret != 0) {
+ break;
+ }
+ /* no break on purpose */
+ case XML_RELAXNG_ZEROORMORE:{
+ xmlChar *cur, *temp;
+
+ oldflags = ctxt->flags;
+ ctxt->flags |= FLAGS_IGNORABLE;
+ cur = ctxt->state->value;
+ temp = NULL;
+ while ((cur != NULL) && (cur != ctxt->state->endvalue) &&
+ (temp != cur)) {
+ temp = cur;
+ ret =
+ xmlRelaxNGValidateValueList(ctxt, define->content);
+ if (ret != 0) {
+ ctxt->state->value = temp;
+ ret = 0;
+ break;
+ }
+ cur = ctxt->state->value;
+ }
+ ctxt->flags = oldflags;
+ if (ret != 0) {
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ } else {
+ if (ctxt->errNr > 0)
+ xmlRelaxNGPopErrors(ctxt, 0);
+ }
+ break;
+ }
+ case XML_RELAXNG_EXCEPT:{
+ xmlRelaxNGDefinePtr list;
+
+ list = define->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGValidateValue(ctxt, list);
+ if (ret == 0) {
+ ret = -1;
+ break;
+ } else
+ ret = 0;
+ list = list->next;
+ }
+ break;
+ }
+ case XML_RELAXNG_DEF:
+ case XML_RELAXNG_GROUP:{
+ xmlRelaxNGDefinePtr list;
+
+ list = define->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGValidateValue(ctxt, list);
+ if (ret != 0) {
+ ret = -1;
+ break;
+ } else
+ ret = 0;
+ list = list->next;
+ }
+ break;
+ }
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_PARENTREF:
+ ret = xmlRelaxNGValidateValue(ctxt, define->content);
+ break;
+ default:
+ TODO ret = -1;
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidateValueContent:
+ * @ctxt: a Relax-NG validation context
+ * @defines: the list of definitions to verify
+ *
+ * Validate the given definitions for the current value
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateValueContent(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr defines)
+{
+ int ret = 0;
+
+ while (defines != NULL) {
+ ret = xmlRelaxNGValidateValue(ctxt, defines);
+ if (ret != 0)
+ break;
+ defines = defines->next;
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGAttributeMatch:
+ * @ctxt: a Relax-NG validation context
+ * @define: the definition to check
+ * @prop: the attribute
+ *
+ * Check if the attribute matches the definition nameClass
+ *
+ * Returns 1 if the attribute matches, 0 if no, or -1 in case of error
+ */
+static int
+xmlRelaxNGAttributeMatch(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define, xmlAttrPtr prop)
+{
+ int ret;
+
+ if (define->name != NULL) {
+ if (!xmlStrEqual(define->name, prop->name))
+ return (0);
+ }
+ if (define->ns != NULL) {
+ if (define->ns[0] == 0) {
+ if (prop->ns != NULL)
+ return (0);
+ } else {
+ if ((prop->ns == NULL) ||
+ (!xmlStrEqual(define->ns, prop->ns->href)))
+ return (0);
+ }
+ }
+ if (define->nameClass == NULL)
+ return (1);
+ define = define->nameClass;
+ if (define->type == XML_RELAXNG_EXCEPT) {
+ xmlRelaxNGDefinePtr list;
+
+ list = define->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGAttributeMatch(ctxt, list, prop);
+ if (ret == 1)
+ return (0);
+ if (ret < 0)
+ return (ret);
+ list = list->next;
+ }
+ } else {
+ TODO}
+ return (1);
+}
+
+/**
+ * xmlRelaxNGValidateAttribute:
+ * @ctxt: a Relax-NG validation context
+ * @define: the definition to verify
+ *
+ * Validate the given attribute definition for that node
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateAttribute(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define)
+{
+ int ret = 0, i;
+ xmlChar *value, *oldvalue;
+ xmlAttrPtr prop = NULL, tmp;
+ xmlNodePtr oldseq;
+
+ if (ctxt->state->nbAttrLeft <= 0)
+ return (-1);
+ if (define->name != NULL) {
+ for (i = 0; i < ctxt->state->nbAttrs; i++) {
+ tmp = ctxt->state->attrs[i];
+ if ((tmp != NULL) && (xmlStrEqual(define->name, tmp->name))) {
+ if ((((define->ns == NULL) || (define->ns[0] == 0)) &&
+ (tmp->ns == NULL)) ||
+ ((tmp->ns != NULL) &&
+ (xmlStrEqual(define->ns, tmp->ns->href)))) {
+ prop = tmp;
+ break;
+ }
+ }
+ }
+ if (prop != NULL) {
+ value = xmlNodeListGetString(prop->doc, prop->children, 1);
+ oldvalue = ctxt->state->value;
+ oldseq = ctxt->state->seq;
+ ctxt->state->seq = (xmlNodePtr) prop;
+ ctxt->state->value = value;
+ ctxt->state->endvalue = NULL;
+ ret = xmlRelaxNGValidateValueContent(ctxt, define->content);
+ if (ctxt->state->value != NULL)
+ value = ctxt->state->value;
+ if (value != NULL)
+ xmlFree(value);
+ ctxt->state->value = oldvalue;
+ ctxt->state->seq = oldseq;
+ if (ret == 0) {
+ /*
+ * flag the attribute as processed
+ */
+ ctxt->state->attrs[i] = NULL;
+ ctxt->state->nbAttrLeft--;
+ }
+ } else {
+ ret = -1;
+ }
+#ifdef DEBUG
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRelaxNGValidateAttribute(%s): %d\n",
+ define->name, ret);
+#endif
+ } else {
+ for (i = 0; i < ctxt->state->nbAttrs; i++) {
+ tmp = ctxt->state->attrs[i];
+ if ((tmp != NULL) &&
+ (xmlRelaxNGAttributeMatch(ctxt, define, tmp) == 1)) {
+ prop = tmp;
+ break;
+ }
+ }
+ if (prop != NULL) {
+ value = xmlNodeListGetString(prop->doc, prop->children, 1);
+ oldvalue = ctxt->state->value;
+ oldseq = ctxt->state->seq;
+ ctxt->state->seq = (xmlNodePtr) prop;
+ ctxt->state->value = value;
+ ret = xmlRelaxNGValidateValueContent(ctxt, define->content);
+ if (ctxt->state->value != NULL)
+ value = ctxt->state->value;
+ if (value != NULL)
+ xmlFree(value);
+ ctxt->state->value = oldvalue;
+ ctxt->state->seq = oldseq;
+ if (ret == 0) {
+ /*
+ * flag the attribute as processed
+ */
+ ctxt->state->attrs[i] = NULL;
+ ctxt->state->nbAttrLeft--;
+ }
+ } else {
+ ret = -1;
+ }
+#ifdef DEBUG
+ if (define->ns != NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRelaxNGValidateAttribute(nsName ns = %s): %d\n",
+ define->ns, ret);
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRelaxNGValidateAttribute(anyName): %d\n",
+ ret);
+ }
+#endif
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidateAttributeList:
+ * @ctxt: a Relax-NG validation context
+ * @define: the list of definition to verify
+ *
+ * Validate the given node against the list of attribute definitions
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateAttributeList(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr defines)
+{
+ int ret = 0, res;
+ int needmore = 0;
+ xmlRelaxNGDefinePtr cur;
+
+ cur = defines;
+ while (cur != NULL) {
+ if (cur->type == XML_RELAXNG_ATTRIBUTE) {
+ if (xmlRelaxNGValidateAttribute(ctxt, cur) != 0)
+ ret = -1;
+ } else
+ needmore = 1;
+ cur = cur->next;
+ }
+ if (!needmore)
+ return (ret);
+ cur = defines;
+ while (cur != NULL) {
+ if (cur->type != XML_RELAXNG_ATTRIBUTE) {
+ if ((ctxt->state != NULL) || (ctxt->states != NULL)) {
+ res = xmlRelaxNGValidateDefinition(ctxt, cur);
+ if (res < 0)
+ ret = -1;
+ } else {
+ VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
+ return (-1);
+ }
+ if (res == -1) /* continues on -2 */
+ break;
+ }
+ cur = cur->next;
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGNodeMatchesList:
+ * @node: the node
+ * @list: a NULL terminated array of definitions
+ *
+ * Check if a node can be matched by one of the definitions
+ *
+ * Returns 1 if matches 0 otherwise
+ */
+static int
+xmlRelaxNGNodeMatchesList(xmlNodePtr node, xmlRelaxNGDefinePtr * list)
+{
+ xmlRelaxNGDefinePtr cur;
+ int i = 0, tmp;
+
+ if ((node == NULL) || (list == NULL))
+ return (0);
+
+ cur = list[i++];
+ while (cur != NULL) {
+ if ((node->type == XML_ELEMENT_NODE) &&
+ (cur->type == XML_RELAXNG_ELEMENT)) {
+ tmp = xmlRelaxNGElementMatch(NULL, cur, node);
+ if (tmp == 1)
+ return (1);
+ } else if (((node->type == XML_TEXT_NODE) ||
+ (node->type == XML_CDATA_SECTION_NODE)) &&
+ (cur->type == XML_RELAXNG_TEXT)) {
+ return (1);
+ }
+ cur = list[i++];
+ }
+ return (0);
+}
+
+/**
+ * xmlRelaxNGValidateInterleave:
+ * @ctxt: a Relax-NG validation context
+ * @define: the definition to verify
+ *
+ * Validate an interleave definition for a node.
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define)
+{
+ int ret = 0, i, nbgroups;
+ int errNr = ctxt->errNr;
+ int oldflags;
+
+ xmlRelaxNGValidStatePtr oldstate;
+ xmlRelaxNGPartitionPtr partitions;
+ xmlRelaxNGInterleaveGroupPtr group = NULL;
+ xmlNodePtr cur, start, last = NULL, lastchg = NULL, lastelem;
+ xmlNodePtr *list = NULL, *lasts = NULL;
+
+ if (define->data != NULL) {
+ partitions = (xmlRelaxNGPartitionPtr) define->data;
+ nbgroups = partitions->nbgroups;
+ } else {
+ VALID_ERR(XML_RELAXNG_ERR_INTERNODATA);
+ return (-1);
+ }
+ /*
+ * Optimizations for MIXED
+ */
+ oldflags = ctxt->flags;
+ if (define->dflags & IS_MIXED) {
+ ctxt->flags |= FLAGS_MIXED_CONTENT;
+ if (nbgroups == 2) {
+ /*
+ * this is a pure <mixed> case
+ */
+ if (ctxt->state != NULL)
+ ctxt->state->seq = xmlRelaxNGSkipIgnored(ctxt,
+ ctxt->state->seq);
+ if (partitions->groups[0]->rule->type == XML_RELAXNG_TEXT)
+ ret = xmlRelaxNGValidateDefinition(ctxt,
+ partitions->groups[1]->
+ rule);
+ else
+ ret = xmlRelaxNGValidateDefinition(ctxt,
+ partitions->groups[0]->
+ rule);
+ if (ret == 0) {
+ if (ctxt->state != NULL)
+ ctxt->state->seq = xmlRelaxNGSkipIgnored(ctxt,
+ ctxt->state->
+ seq);
+ }
+ ctxt->flags = oldflags;
+ return (ret);
+ }
+ }
+
+ /*
+ * Build arrays to store the first and last node of the chain
+ * pertaining to each group
+ */
+ list = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr));
+ if (list == NULL) {
+ xmlRngVErrMemory(ctxt, "validating\n");
+ return (-1);
+ }
+ memset(list, 0, nbgroups * sizeof(xmlNodePtr));
+ lasts = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr));
+ if (lasts == NULL) {
+ xmlRngVErrMemory(ctxt, "validating\n");
+ return (-1);
+ }
+ memset(lasts, 0, nbgroups * sizeof(xmlNodePtr));
+
+ /*
+ * Walk the sequence of children finding the right group and
+ * sorting them in sequences.
+ */
+ cur = ctxt->state->seq;
+ cur = xmlRelaxNGSkipIgnored(ctxt, cur);
+ start = cur;
+ while (cur != NULL) {
+ ctxt->state->seq = cur;
+ if ((partitions->triage != NULL) &&
+ (partitions->flags & IS_DETERMINIST)) {
+ void *tmp = NULL;
+
+ if ((cur->type == XML_TEXT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE)) {
+ tmp = xmlHashLookup2(partitions->triage, BAD_CAST "#text",
+ NULL);
+ } else if (cur->type == XML_ELEMENT_NODE) {
+ if (cur->ns != NULL) {
+ tmp = xmlHashLookup2(partitions->triage, cur->name,
+ cur->ns->href);
+ if (tmp == NULL)
+ tmp = xmlHashLookup2(partitions->triage,
+ BAD_CAST "#any",
+ cur->ns->href);
+ } else
+ tmp =
+ xmlHashLookup2(partitions->triage, cur->name,
+ NULL);
+ if (tmp == NULL)
+ tmp =
+ xmlHashLookup2(partitions->triage, BAD_CAST "#any",
+ NULL);
+ }
+
+ if (tmp == NULL) {
+ i = nbgroups;
+ } else {
+ i = ((long) tmp) - 1;
+ if (partitions->flags & IS_NEEDCHECK) {
+ group = partitions->groups[i];
+ if (!xmlRelaxNGNodeMatchesList(cur, group->defs))
+ i = nbgroups;
+ }
+ }
+ } else {
+ for (i = 0; i < nbgroups; i++) {
+ group = partitions->groups[i];
+ if (group == NULL)
+ continue;
+ if (xmlRelaxNGNodeMatchesList(cur, group->defs))
+ break;
+ }
+ }
+ /*
+ * We break as soon as an element not matched is found
+ */
+ if (i >= nbgroups) {
+ break;
+ }
+ if (lasts[i] != NULL) {
+ lasts[i]->next = cur;
+ lasts[i] = cur;
+ } else {
+ list[i] = cur;
+ lasts[i] = cur;
+ }
+ if (cur->next != NULL)
+ lastchg = cur->next;
+ else
+ lastchg = cur;
+ cur = xmlRelaxNGSkipIgnored(ctxt, cur->next);
+ }
+ if (ret != 0) {
+ VALID_ERR(XML_RELAXNG_ERR_INTERSEQ);
+ ret = -1;
+ goto done;
+ }
+ lastelem = cur;
+ oldstate = ctxt->state;
+ for (i = 0; i < nbgroups; i++) {
+ ctxt->state = xmlRelaxNGCopyValidState(ctxt, oldstate);
+ group = partitions->groups[i];
+ if (lasts[i] != NULL) {
+ last = lasts[i]->next;
+ lasts[i]->next = NULL;
+ }
+ ctxt->state->seq = list[i];
+ ret = xmlRelaxNGValidateDefinition(ctxt, group->rule);
+ if (ret != 0)
+ break;
+ if (ctxt->state != NULL) {
+ cur = ctxt->state->seq;
+ cur = xmlRelaxNGSkipIgnored(ctxt, cur);
+ xmlRelaxNGFreeValidState(ctxt, oldstate);
+ oldstate = ctxt->state;
+ ctxt->state = NULL;
+ if (cur != NULL) {
+ VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA, cur->name);
+ ret = -1;
+ ctxt->state = oldstate;
+ goto done;
+ }
+ } else if (ctxt->states != NULL) {
+ int j;
+ int found = 0;
+
+ for (j = 0; j < ctxt->states->nbState; j++) {
+ cur = ctxt->states->tabState[j]->seq;
+ cur = xmlRelaxNGSkipIgnored(ctxt, cur);
+ if (cur == NULL) {
+ found = 1;
+ break;
+ }
+ }
+ if (ctxt->states->nbState > 0) {
+ xmlRelaxNGFreeValidState(ctxt, oldstate);
+ oldstate =
+ ctxt->states->tabState[ctxt->states->nbState - 1];
+ }
+ for (j = 0; j < ctxt->states->nbState - 1; j++) {
+ xmlRelaxNGFreeValidState(ctxt, ctxt->states->tabState[j]);
+ }
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->states = NULL;
+ if (found == 0) {
+ VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA, cur->name);
+ ret = -1;
+ ctxt->state = oldstate;
+ goto done;
+ }
+ } else {
+ ret = -1;
+ break;
+ }
+ if (lasts[i] != NULL) {
+ lasts[i]->next = last;
+ }
+ }
+ if (ctxt->state != NULL)
+ xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ ctxt->state = oldstate;
+ ctxt->state->seq = lastelem;
+ if (ret != 0) {
+ VALID_ERR(XML_RELAXNG_ERR_INTERSEQ);
+ ret = -1;
+ goto done;
+ }
+
+ done:
+ ctxt->flags = oldflags;
+ /*
+ * builds the next links chain from the prev one
+ */
+ cur = lastchg;
+ while (cur != NULL) {
+ if ((cur == start) || (cur->prev == NULL))
+ break;
+ cur->prev->next = cur;
+ cur = cur->prev;
+ }
+ if (ret == 0) {
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+ }
+
+ xmlFree(list);
+ xmlFree(lasts);
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidateDefinitionList:
+ * @ctxt: a Relax-NG validation context
+ * @define: the list of definition to verify
+ *
+ * Validate the given node content against the (list) of definitions
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateDefinitionList(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr defines)
+{
+ int ret = 0, res;
+
+
+ if (defines == NULL) {
+ VALID_ERR2(XML_RELAXNG_ERR_INTERNAL,
+ BAD_CAST "NULL definition list");
+ return (-1);
+ }
+ while (defines != NULL) {
+ if ((ctxt->state != NULL) || (ctxt->states != NULL)) {
+ res = xmlRelaxNGValidateDefinition(ctxt, defines);
+ if (res < 0)
+ ret = -1;
+ } else {
+ VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
+ return (-1);
+ }
+ if (res == -1) /* continues on -2 */
+ break;
+ defines = defines->next;
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGElementMatch:
+ * @ctxt: a Relax-NG validation context
+ * @define: the definition to check
+ * @elem: the element
+ *
+ * Check if the element matches the definition nameClass
+ *
+ * Returns 1 if the element matches, 0 if no, or -1 in case of error
+ */
+static int
+xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define, xmlNodePtr elem)
+{
+ int ret = 0, oldflags = 0;
+
+ if (define->name != NULL) {
+ if (!xmlStrEqual(elem->name, define->name)) {
+ VALID_ERR3(XML_RELAXNG_ERR_ELEMNAME, define->name, elem->name);
+ return (0);
+ }
+ }
+ if ((define->ns != NULL) && (define->ns[0] != 0)) {
+ if (elem->ns == NULL) {
+ VALID_ERR2(XML_RELAXNG_ERR_ELEMNONS, elem->name);
+ return (0);
+ } else if (!xmlStrEqual(elem->ns->href, define->ns)) {
+ VALID_ERR3(XML_RELAXNG_ERR_ELEMWRONGNS,
+ elem->name, define->ns);
+ return (0);
+ }
+ } else if ((elem->ns != NULL) && (define->ns != NULL) &&
+ (define->name == NULL)) {
+ VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS, elem->name);
+ return (0);
+ } else if ((elem->ns != NULL) && (define->name != NULL)) {
+ VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS, define->name);
+ return (0);
+ }
+
+ if (define->nameClass == NULL)
+ return (1);
+
+ define = define->nameClass;
+ if (define->type == XML_RELAXNG_EXCEPT) {
+ xmlRelaxNGDefinePtr list;
+
+ if (ctxt != NULL) {
+ oldflags = ctxt->flags;
+ ctxt->flags |= FLAGS_IGNORABLE;
+ }
+
+ list = define->content;
+ while (list != NULL) {
+ ret = xmlRelaxNGElementMatch(ctxt, list, elem);
+ if (ret == 1) {
+ if (ctxt != NULL)
+ ctxt->flags = oldflags;
+ return (0);
+ }
+ if (ret < 0) {
+ if (ctxt != NULL)
+ ctxt->flags = oldflags;
+ return (ret);
+ }
+ list = list->next;
+ }
+ ret = 1;
+ if (ctxt != NULL) {
+ ctxt->flags = oldflags;
+ }
+ } else if (define->type == XML_RELAXNG_CHOICE) {
+ xmlRelaxNGDefinePtr list;
+
+ if (ctxt != NULL) {
+ oldflags = ctxt->flags;
+ ctxt->flags |= FLAGS_IGNORABLE;
+ }
+
+ list = define->nameClass;
+ while (list != NULL) {
+ ret = xmlRelaxNGElementMatch(ctxt, list, elem);
+ if (ret == 1) {
+ if (ctxt != NULL)
+ ctxt->flags = oldflags;
+ return (1);
+ }
+ if (ret < 0) {
+ if (ctxt != NULL)
+ ctxt->flags = oldflags;
+ return (ret);
+ }
+ list = list->next;
+ }
+ if (ctxt != NULL) {
+ if (ret != 0) {
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ } else {
+ if (ctxt->errNr > 0)
+ xmlRelaxNGPopErrors(ctxt, 0);
+ }
+ }
+ ret = 0;
+ if (ctxt != NULL) {
+ ctxt->flags = oldflags;
+ }
+ } else {
+ TODO ret = -1;
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGBestState:
+ * @ctxt: a Relax-NG validation context
+ *
+ * Find the "best" state in the ctxt->states list of states to report
+ * errors about. I.e. a state with no element left in the child list
+ * or the one with the less attributes left.
+ * This is called only if a falidation error was detected
+ *
+ * Returns the index of the "best" state or -1 in case of error
+ */
+static int
+xmlRelaxNGBestState(xmlRelaxNGValidCtxtPtr ctxt)
+{
+ xmlRelaxNGValidStatePtr state;
+ int i, tmp;
+ int best = -1;
+ int value = 1000000;
+
+ if ((ctxt == NULL) || (ctxt->states == NULL) ||
+ (ctxt->states->nbState <= 0))
+ return (-1);
+
+ for (i = 0; i < ctxt->states->nbState; i++) {
+ state = ctxt->states->tabState[i];
+ if (state == NULL)
+ continue;
+ if (state->seq != NULL) {
+ if ((best == -1) || (value > 100000)) {
+ value = 100000;
+ best = i;
+ }
+ } else {
+ tmp = state->nbAttrLeft;
+ if ((best == -1) || (value > tmp)) {
+ value = tmp;
+ best = i;
+ }
+ }
+ }
+ return (best);
+}
+
+/**
+ * xmlRelaxNGLogBestError:
+ * @ctxt: a Relax-NG validation context
+ *
+ * Find the "best" state in the ctxt->states list of states to report
+ * errors about and log it.
+ */
+static void
+xmlRelaxNGLogBestError(xmlRelaxNGValidCtxtPtr ctxt)
+{
+ int best;
+
+ if ((ctxt == NULL) || (ctxt->states == NULL) ||
+ (ctxt->states->nbState <= 0))
+ return;
+
+ best = xmlRelaxNGBestState(ctxt);
+ if ((best >= 0) && (best < ctxt->states->nbState)) {
+ ctxt->state = ctxt->states->tabState[best];
+
+ xmlRelaxNGValidateElementEnd(ctxt, 1);
+ }
+}
+
+/**
+ * xmlRelaxNGValidateElementEnd:
+ * @ctxt: a Relax-NG validation context
+ * @dolog: indicate that error logging should be done
+ *
+ * Validate the end of the element, implements check that
+ * there is nothing left not consumed in the element content
+ * or in the attribute list.
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateElementEnd(xmlRelaxNGValidCtxtPtr ctxt, int dolog)
+{
+ int i;
+ xmlRelaxNGValidStatePtr state;
+
+ state = ctxt->state;
+ if (state->seq != NULL) {
+ state->seq = xmlRelaxNGSkipIgnored(ctxt, state->seq);
+ if (state->seq != NULL) {
+ if (dolog) {
+ VALID_ERR3(XML_RELAXNG_ERR_EXTRACONTENT,
+ state->node->name, state->seq->name);
+ }
+ return (-1);
+ }
+ }
+ for (i = 0; i < state->nbAttrs; i++) {
+ if (state->attrs[i] != NULL) {
+ if (dolog) {
+ VALID_ERR3(XML_RELAXNG_ERR_INVALIDATTR,
+ state->attrs[i]->name, state->node->name);
+ }
+ return (-1 - i);
+ }
+ }
+ return (0);
+}
+
+/**
+ * xmlRelaxNGValidateState:
+ * @ctxt: a Relax-NG validation context
+ * @define: the definition to verify
+ *
+ * Validate the current state against the definition
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateState(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define)
+{
+ xmlNodePtr node;
+ int ret = 0, i, tmp, oldflags, errNr;
+ xmlRelaxNGValidStatePtr oldstate = NULL, state;
+
+ if (define == NULL) {
+ VALID_ERR(XML_RELAXNG_ERR_NODEFINE);
+ return (-1);
+ }
+
+ if (ctxt->state != NULL) {
+ node = ctxt->state->seq;
+ } else {
+ node = NULL;
+ }
+#ifdef DEBUG
+ for (i = 0; i < ctxt->depth; i++)
+ xmlGenericError(xmlGenericErrorContext, " ");
+ xmlGenericError(xmlGenericErrorContext,
+ "Start validating %s ", xmlRelaxNGDefName(define));
+ if (define->name != NULL)
+ xmlGenericError(xmlGenericErrorContext, "%s ", define->name);
+ if ((node != NULL) && (node->name != NULL))
+ xmlGenericError(xmlGenericErrorContext, "on %s\n", node->name);
+ else
+ xmlGenericError(xmlGenericErrorContext, "\n");
+#endif
+ ctxt->depth++;
+ switch (define->type) {
+ case XML_RELAXNG_EMPTY:
+ node = xmlRelaxNGSkipIgnored(ctxt, node);
+ ret = 0;
+ break;
+ case XML_RELAXNG_NOT_ALLOWED:
+ ret = -1;
+ break;
+ case XML_RELAXNG_TEXT:
+ while ((node != NULL) &&
+ ((node->type == XML_TEXT_NODE) ||
+ (node->type == XML_COMMENT_NODE) ||
+ (node->type == XML_PI_NODE) ||
+ (node->type == XML_CDATA_SECTION_NODE)))
+ node = node->next;
+ ctxt->state->seq = node;
+ break;
+ case XML_RELAXNG_ELEMENT:
+ errNr = ctxt->errNr;
+ node = xmlRelaxNGSkipIgnored(ctxt, node);
+ if (node == NULL) {
+ VALID_ERR2(XML_RELAXNG_ERR_NOELEM, define->name);
+ ret = -1;
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ break;
+ }
+ if (node->type != XML_ELEMENT_NODE) {
+ VALID_ERR(XML_RELAXNG_ERR_NOTELEM);
+ ret = -1;
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ break;
+ }
+ /*
+ * This node was already validated successfully against
+ * this definition.
+ */
+ if (node->psvi == define) {
+ ctxt->state->seq = xmlRelaxNGSkipIgnored(ctxt, node->next);
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+ if (ctxt->errNr != 0) {
+ while ((ctxt->err != NULL) &&
+ (((ctxt->err->err == XML_RELAXNG_ERR_ELEMNAME)
+ && (xmlStrEqual(ctxt->err->arg2, node->name)))
+ ||
+ ((ctxt->err->err ==
+ XML_RELAXNG_ERR_ELEMEXTRANS)
+ && (xmlStrEqual(ctxt->err->arg1, node->name)))
+ || (ctxt->err->err == XML_RELAXNG_ERR_NOELEM)
+ || (ctxt->err->err ==
+ XML_RELAXNG_ERR_NOTELEM)))
+ xmlRelaxNGValidErrorPop(ctxt);
+ }
+ break;
+ }
+
+ ret = xmlRelaxNGElementMatch(ctxt, define, node);
+ if (ret <= 0) {
+ ret = -1;
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ break;
+ }
+ ret = 0;
+ if (ctxt->errNr != 0) {
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+ while ((ctxt->err != NULL) &&
+ (((ctxt->err->err == XML_RELAXNG_ERR_ELEMNAME) &&
+ (xmlStrEqual(ctxt->err->arg2, node->name))) ||
+ ((ctxt->err->err == XML_RELAXNG_ERR_ELEMEXTRANS) &&
+ (xmlStrEqual(ctxt->err->arg1, node->name))) ||
+ (ctxt->err->err == XML_RELAXNG_ERR_NOELEM) ||
+ (ctxt->err->err == XML_RELAXNG_ERR_NOTELEM)))
+ xmlRelaxNGValidErrorPop(ctxt);
+ }
+ errNr = ctxt->errNr;
+
+ oldflags = ctxt->flags;
+ if (ctxt->flags & FLAGS_MIXED_CONTENT) {
+ ctxt->flags -= FLAGS_MIXED_CONTENT;
+ }
+ state = xmlRelaxNGNewValidState(ctxt, node);
+ if (state == NULL) {
+ ret = -1;
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
+ xmlRelaxNGDumpValidError(ctxt);
+ break;
+ }
+
+ oldstate = ctxt->state;
+ ctxt->state = state;
+ if (define->attrs != NULL) {
+ tmp = xmlRelaxNGValidateAttributeList(ctxt, define->attrs);
+ if (tmp != 0) {
+ ret = -1;
+ VALID_ERR2(XML_RELAXNG_ERR_ATTRVALID, node->name);
+ }
+ }
+ if (define->contModel != NULL) {
+ xmlRelaxNGValidStatePtr nstate, tmpstate = ctxt->state;
+ xmlRelaxNGStatesPtr tmpstates = ctxt->states;
+ xmlNodePtr nseq;
+
+ nstate = xmlRelaxNGNewValidState(ctxt, node);
+ ctxt->state = nstate;
+ ctxt->states = NULL;
+
+ tmp = xmlRelaxNGValidateCompiledContent(ctxt,
+ define->contModel,
+ ctxt->state->seq);
+ nseq = ctxt->state->seq;
+ ctxt->state = tmpstate;
+ ctxt->states = tmpstates;
+ xmlRelaxNGFreeValidState(ctxt, nstate);
+
+#ifdef DEBUG_COMPILE
+ xmlGenericError(xmlGenericErrorContext,
+ "Validating content of '%s' : %d\n",
+ define->name, tmp);
+#endif
+ if (tmp != 0)
+ ret = -1;
+
+ if (ctxt->states != NULL) {
+ tmp = -1;
+
+ for (i = 0; i < ctxt->states->nbState; i++) {
+ state = ctxt->states->tabState[i];
+ ctxt->state = state;
+ ctxt->state->seq = nseq;
+
+ if (xmlRelaxNGValidateElementEnd(ctxt, 0) == 0) {
+ tmp = 0;
+ break;
+ }
+ }
+ if (tmp != 0) {
+ /*
+ * validation error, log the message for the "best" one
+ */
+ ctxt->flags |= FLAGS_IGNORABLE;
+ xmlRelaxNGLogBestError(ctxt);
+ }
+ for (i = 0; i < ctxt->states->nbState; i++) {
+ xmlRelaxNGFreeValidState(ctxt,
+ ctxt->states->
+ tabState[i]);
+ }
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->flags = oldflags;
+ ctxt->states = NULL;
+ if ((ret == 0) && (tmp == -1))
+ ret = -1;
+ } else {
+ state = ctxt->state;
+ ctxt->state->seq = nseq;
+ if (ret == 0)
+ ret = xmlRelaxNGValidateElementEnd(ctxt, 1);
+ xmlRelaxNGFreeValidState(ctxt, state);
+ }
+ } else {
+ if (define->content != NULL) {
+ tmp = xmlRelaxNGValidateDefinitionList(ctxt,
+ define->
+ content);
+ if (tmp != 0) {
+ ret = -1;
+ if (ctxt->state == NULL) {
+ ctxt->state = oldstate;
+ VALID_ERR2(XML_RELAXNG_ERR_CONTENTVALID,
+ node->name);
+ ctxt->state = NULL;
+ } else {
+ VALID_ERR2(XML_RELAXNG_ERR_CONTENTVALID,
+ node->name);
+ }
+
+ }
+ }
+ if (ctxt->states != NULL) {
+ tmp = -1;
+
+ for (i = 0; i < ctxt->states->nbState; i++) {
+ state = ctxt->states->tabState[i];
+ ctxt->state = state;
+
+ if (xmlRelaxNGValidateElementEnd(ctxt, 0) == 0) {
+ tmp = 0;
+ break;
+ }
+ }
+ if (tmp != 0) {
+ /*
+ * validation error, log the message for the "best" one
+ */
+ ctxt->flags |= FLAGS_IGNORABLE;
+ xmlRelaxNGLogBestError(ctxt);
+ }
+ for (i = 0; i < ctxt->states->nbState; i++) {
+ xmlRelaxNGFreeValidState(ctxt,
+ ctxt->states->
+ tabState[i]);
+ }
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->flags = oldflags;
+ ctxt->states = NULL;
+ if ((ret == 0) && (tmp == -1))
+ ret = -1;
+ } else {
+ state = ctxt->state;
+ if (ret == 0)
+ ret = xmlRelaxNGValidateElementEnd(ctxt, 1);
+ xmlRelaxNGFreeValidState(ctxt, state);
+ }
+ }
+ if (ret == 0) {
+ node->psvi = define;
+ }
+ ctxt->flags = oldflags;
+ ctxt->state = oldstate;
+ if (oldstate != NULL)
+ oldstate->seq = xmlRelaxNGSkipIgnored(ctxt, node->next);
+ if (ret != 0) {
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
+ xmlRelaxNGDumpValidError(ctxt);
+ ret = 0;
+ } else {
+ ret = -2;
+ }
+ } else {
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+ }
+
+#ifdef DEBUG
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRelaxNGValidateDefinition(): validated %s : %d",
+ node->name, ret);
+ if (oldstate == NULL)
+ xmlGenericError(xmlGenericErrorContext, ": no state\n");
+ else if (oldstate->seq == NULL)
+ xmlGenericError(xmlGenericErrorContext, ": done\n");
+ else if (oldstate->seq->type == XML_ELEMENT_NODE)
+ xmlGenericError(xmlGenericErrorContext, ": next elem %s\n",
+ oldstate->seq->name);
+ else
+ xmlGenericError(xmlGenericErrorContext, ": next %s %d\n",
+ oldstate->seq->name, oldstate->seq->type);
+#endif
+ break;
+ case XML_RELAXNG_OPTIONAL:{
+ errNr = ctxt->errNr;
+ oldflags = ctxt->flags;
+ ctxt->flags |= FLAGS_IGNORABLE;
+ oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state);
+ ret =
+ xmlRelaxNGValidateDefinitionList(ctxt,
+ define->content);
+ if (ret != 0) {
+ if (ctxt->state != NULL)
+ xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ ctxt->state = oldstate;
+ ctxt->flags = oldflags;
+ ret = 0;
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+ break;
+ }
+ if (ctxt->states != NULL) {
+ xmlRelaxNGAddStates(ctxt, ctxt->states, oldstate);
+ } else {
+ ctxt->states = xmlRelaxNGNewStates(ctxt, 1);
+ if (ctxt->states == NULL) {
+ xmlRelaxNGFreeValidState(ctxt, oldstate);
+ ctxt->flags = oldflags;
+ ret = -1;
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+ break;
+ }
+ xmlRelaxNGAddStates(ctxt, ctxt->states, oldstate);
+ xmlRelaxNGAddStates(ctxt, ctxt->states, ctxt->state);
+ ctxt->state = NULL;
+ }
+ ctxt->flags = oldflags;
+ ret = 0;
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+ break;
+ }
+ case XML_RELAXNG_ONEORMORE:
+ errNr = ctxt->errNr;
+ ret = xmlRelaxNGValidateDefinitionList(ctxt, define->content);
+ if (ret != 0) {
+ break;
+ }
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+ /* no break on purpose */
+ case XML_RELAXNG_ZEROORMORE:{
+ int progress;
+ xmlRelaxNGStatesPtr states = NULL, res = NULL;
+ int base, j;
+
+ errNr = ctxt->errNr;
+ res = xmlRelaxNGNewStates(ctxt, 1);
+ if (res == NULL) {
+ ret = -1;
+ break;
+ }
+ /*
+ * All the input states are also exit states
+ */
+ if (ctxt->state != NULL) {
+ xmlRelaxNGAddStates(ctxt, res,
+ xmlRelaxNGCopyValidState(ctxt,
+ ctxt->
+ state));
+ } else {
+ for (j = 0; j < ctxt->states->nbState; j++) {
+ xmlRelaxNGAddStates(ctxt, res,
+ xmlRelaxNGCopyValidState(ctxt,
+ ctxt->
+ states->
+ tabState
+ [j]));
+ }
+ }
+ oldflags = ctxt->flags;
+ ctxt->flags |= FLAGS_IGNORABLE;
+ do {
+ progress = 0;
+ base = res->nbState;
+
+ if (ctxt->states != NULL) {
+ states = ctxt->states;
+ for (i = 0; i < states->nbState; i++) {
+ ctxt->state = states->tabState[i];
+ ctxt->states = NULL;
+ ret = xmlRelaxNGValidateDefinitionList(ctxt,
+ define->
+ content);
+ if (ret == 0) {
+ if (ctxt->state != NULL) {
+ tmp = xmlRelaxNGAddStates(ctxt, res,
+ ctxt->state);
+ ctxt->state = NULL;
+ if (tmp == 1)
+ progress = 1;
+ } else if (ctxt->states != NULL) {
+ for (j = 0; j < ctxt->states->nbState;
+ j++) {
+ tmp =
+ xmlRelaxNGAddStates(ctxt, res,
+ ctxt->
+ states->
+ tabState
+ [j]);
+ if (tmp == 1)
+ progress = 1;
+ }
+ xmlRelaxNGFreeStates(ctxt,
+ ctxt->states);
+ ctxt->states = NULL;
+ }
+ } else {
+ if (ctxt->state != NULL) {
+ xmlRelaxNGFreeValidState(ctxt,
+ ctxt->state);
+ ctxt->state = NULL;
+ }
+ }
+ }
+ } else {
+ ret = xmlRelaxNGValidateDefinitionList(ctxt,
+ define->
+ content);
+ if (ret != 0) {
+ xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ ctxt->state = NULL;
+ } else {
+ base = res->nbState;
+ if (ctxt->state != NULL) {
+ tmp = xmlRelaxNGAddStates(ctxt, res,
+ ctxt->state);
+ ctxt->state = NULL;
+ if (tmp == 1)
+ progress = 1;
+ } else if (ctxt->states != NULL) {
+ for (j = 0; j < ctxt->states->nbState; j++) {
+ tmp = xmlRelaxNGAddStates(ctxt, res,
+ ctxt->
+ states->
+ tabState[j]);
+ if (tmp == 1)
+ progress = 1;
+ }
+ if (states == NULL) {
+ states = ctxt->states;
+ } else {
+ xmlRelaxNGFreeStates(ctxt,
+ ctxt->states);
+ }
+ ctxt->states = NULL;
+ }
+ }
+ }
+ if (progress) {
+ /*
+ * Collect all the new nodes added at that step
+ * and make them the new node set
+ */
+ if (res->nbState - base == 1) {
+ ctxt->state = xmlRelaxNGCopyValidState(ctxt,
+ res->
+ tabState
+ [base]);
+ } else {
+ if (states == NULL) {
+ xmlRelaxNGNewStates(ctxt,
+ res->nbState - base);
+ }
+ states->nbState = 0;
+ for (i = base; i < res->nbState; i++)
+ xmlRelaxNGAddStates(ctxt, states,
+ xmlRelaxNGCopyValidState
+ (ctxt,
+ res->tabState[i]));
+ ctxt->states = states;
+ }
+ }
+ } while (progress == 1);
+ if (states != NULL) {
+ xmlRelaxNGFreeStates(ctxt, states);
+ }
+ ctxt->states = res;
+ ctxt->flags = oldflags;
+#if 0
+ /*
+ * errors may have to be propagated back...
+ */
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+#endif
+ ret = 0;
+ break;
+ }
+ case XML_RELAXNG_CHOICE:{
+ xmlRelaxNGDefinePtr list = NULL;
+ xmlRelaxNGStatesPtr states = NULL;
+
+ node = xmlRelaxNGSkipIgnored(ctxt, node);
+
+ errNr = ctxt->errNr;
+ if ((define->dflags & IS_TRIABLE)
+ && (define->data != NULL)) {
+ xmlHashTablePtr triage =
+ (xmlHashTablePtr) define->data;
+
+ /*
+ * Something we can optimize cleanly there is only one
+ * possble branch out !
+ */
+ if (node == NULL) {
+ ret = -1;
+ break;
+ }
+ if ((node->type == XML_TEXT_NODE) ||
+ (node->type == XML_CDATA_SECTION_NODE)) {
+ list =
+ xmlHashLookup2(triage, BAD_CAST "#text", NULL);
+ } else if (node->type == XML_ELEMENT_NODE) {
+ if (node->ns != NULL) {
+ list = xmlHashLookup2(triage, node->name,
+ node->ns->href);
+ if (list == NULL)
+ list =
+ xmlHashLookup2(triage, BAD_CAST "#any",
+ node->ns->href);
+ } else
+ list =
+ xmlHashLookup2(triage, node->name, NULL);
+ if (list == NULL)
+ list =
+ xmlHashLookup2(triage, BAD_CAST "#any",
+ NULL);
+ }
+ if (list == NULL) {
+ ret = -1;
+ VALID_ERR2(XML_RELAXNG_ERR_ELEMWRONG, node->name);
+ break;
+ }
+ ret = xmlRelaxNGValidateDefinition(ctxt, list);
+ if (ret == 0) {
+ }
+ break;
+ }
+
+ list = define->content;
+ oldflags = ctxt->flags;
+ ctxt->flags |= FLAGS_IGNORABLE;
+
+ while (list != NULL) {
+ oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state);
+ ret = xmlRelaxNGValidateDefinition(ctxt, list);
+ if (ret == 0) {
+ if (states == NULL) {
+ states = xmlRelaxNGNewStates(ctxt, 1);
+ }
+ if (ctxt->state != NULL) {
+ xmlRelaxNGAddStates(ctxt, states, ctxt->state);
+ } else if (ctxt->states != NULL) {
+ for (i = 0; i < ctxt->states->nbState; i++) {
+ xmlRelaxNGAddStates(ctxt, states,
+ ctxt->states->
+ tabState[i]);
+ }
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->states = NULL;
+ }
+ } else {
+ xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ }
+ ctxt->state = oldstate;
+ list = list->next;
+ }
+ if (states != NULL) {
+ xmlRelaxNGFreeValidState(ctxt, oldstate);
+ ctxt->states = states;
+ ctxt->state = NULL;
+ ret = 0;
+ } else {
+ ctxt->states = NULL;
+ }
+ ctxt->flags = oldflags;
+ if (ret != 0) {
+ if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
+ xmlRelaxNGDumpValidError(ctxt);
+ }
+ } else {
+ if (ctxt->errNr > errNr)
+ xmlRelaxNGPopErrors(ctxt, errNr);
+ }
+ break;
+ }
+ case XML_RELAXNG_DEF:
+ case XML_RELAXNG_GROUP:
+ ret = xmlRelaxNGValidateDefinitionList(ctxt, define->content);
+ break;
+ case XML_RELAXNG_INTERLEAVE:
+ ret = xmlRelaxNGValidateInterleave(ctxt, define);
+ break;
+ case XML_RELAXNG_ATTRIBUTE:
+ ret = xmlRelaxNGValidateAttribute(ctxt, define);
+ break;
+ case XML_RELAXNG_START:
+ case XML_RELAXNG_NOOP:
+ case XML_RELAXNG_REF:
+ case XML_RELAXNG_EXTERNALREF:
+ case XML_RELAXNG_PARENTREF:
+ ret = xmlRelaxNGValidateDefinition(ctxt, define->content);
+ break;
+ case XML_RELAXNG_DATATYPE:{
+ xmlNodePtr child;
+ xmlChar *content = NULL;
+
+ child = node;
+ while (child != NULL) {
+ if (child->type == XML_ELEMENT_NODE) {
+ VALID_ERR2(XML_RELAXNG_ERR_DATAELEM,
+ node->parent->name);
+ ret = -1;
+ break;
+ } else if ((child->type == XML_TEXT_NODE) ||
+ (child->type == XML_CDATA_SECTION_NODE)) {
+ content = xmlStrcat(content, child->content);
+ }
+ /* TODO: handle entities ... */
+ child = child->next;
+ }
+ if (ret == -1) {
+ if (content != NULL)
+ xmlFree(content);
+ break;
+ }
+ if (content == NULL) {
+ content = xmlStrdup(BAD_CAST "");
+ if (content == NULL) {
+ xmlRngVErrMemory(ctxt, "validating\n");
+ ret = -1;
+ break;
+ }
+ }
+ ret = xmlRelaxNGValidateDatatype(ctxt, content, define,
+ ctxt->state->seq);
+ if (ret == -1) {
+ VALID_ERR2(XML_RELAXNG_ERR_DATATYPE, define->name);
+ } else if (ret == 0) {
+ ctxt->state->seq = NULL;
+ }
+ if (content != NULL)
+ xmlFree(content);
+ break;
+ }
+ case XML_RELAXNG_VALUE:{
+ xmlChar *content = NULL;
+ xmlChar *oldvalue;
+ xmlNodePtr child;
+
+ child = node;
+ while (child != NULL) {
+ if (child->type == XML_ELEMENT_NODE) {
+ VALID_ERR2(XML_RELAXNG_ERR_VALELEM,
+ node->parent->name);
+ ret = -1;
+ break;
+ } else if ((child->type == XML_TEXT_NODE) ||
+ (child->type == XML_CDATA_SECTION_NODE)) {
+ content = xmlStrcat(content, child->content);
+ }
+ /* TODO: handle entities ... */
+ child = child->next;
+ }
+ if (ret == -1) {
+ if (content != NULL)
+ xmlFree(content);
+ break;
+ }
+ if (content == NULL) {
+ content = xmlStrdup(BAD_CAST "");
+ if (content == NULL) {
+ xmlRngVErrMemory(ctxt, "validating\n");
+ ret = -1;
+ break;
+ }
+ }
+ oldvalue = ctxt->state->value;
+ ctxt->state->value = content;
+ ret = xmlRelaxNGValidateValue(ctxt, define);
+ ctxt->state->value = oldvalue;
+ if (ret == -1) {
+ VALID_ERR2(XML_RELAXNG_ERR_VALUE, define->name);
+ } else if (ret == 0) {
+ ctxt->state->seq = NULL;
+ }
+ if (content != NULL)
+ xmlFree(content);
+ break;
+ }
+ case XML_RELAXNG_LIST:{
+ xmlChar *content;
+ xmlNodePtr child;
+ xmlChar *oldvalue, *oldendvalue;
+ int len;
+
+ /*
+ * Make sure it's only text nodes
+ */
+
+ content = NULL;
+ child = node;
+ while (child != NULL) {
+ if (child->type == XML_ELEMENT_NODE) {
+ VALID_ERR2(XML_RELAXNG_ERR_LISTELEM,
+ node->parent->name);
+ ret = -1;
+ break;
+ } else if ((child->type == XML_TEXT_NODE) ||
+ (child->type == XML_CDATA_SECTION_NODE)) {
+ content = xmlStrcat(content, child->content);
+ }
+ /* TODO: handle entities ... */
+ child = child->next;
+ }
+ if (ret == -1) {
+ if (content != NULL)
+ xmlFree(content);
+ break;
+ }
+ if (content == NULL) {
+ content = xmlStrdup(BAD_CAST "");
+ if (content == NULL) {
+ xmlRngVErrMemory(ctxt, "validating\n");
+ ret = -1;
+ break;
+ }
+ }
+ len = xmlStrlen(content);
+ oldvalue = ctxt->state->value;
+ oldendvalue = ctxt->state->endvalue;
+ ctxt->state->value = content;
+ ctxt->state->endvalue = content + len;
+ ret = xmlRelaxNGValidateValue(ctxt, define);
+ ctxt->state->value = oldvalue;
+ ctxt->state->endvalue = oldendvalue;
+ if (ret == -1) {
+ VALID_ERR(XML_RELAXNG_ERR_LIST);
+ } else if ((ret == 0) && (node != NULL)) {
+ ctxt->state->seq = node->next;
+ }
+ if (content != NULL)
+ xmlFree(content);
+ break;
+ }
+ case XML_RELAXNG_EXCEPT:
+ case XML_RELAXNG_PARAM:
+ TODO ret = -1;
+ break;
+ }
+ ctxt->depth--;
+#ifdef DEBUG
+ for (i = 0; i < ctxt->depth; i++)
+ xmlGenericError(xmlGenericErrorContext, " ");
+ xmlGenericError(xmlGenericErrorContext,
+ "Validating %s ", xmlRelaxNGDefName(define));
+ if (define->name != NULL)
+ xmlGenericError(xmlGenericErrorContext, "%s ", define->name);
+ if (ret == 0)
+ xmlGenericError(xmlGenericErrorContext, "suceeded\n");
+ else
+ xmlGenericError(xmlGenericErrorContext, "failed\n");
+#endif
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidateDefinition:
+ * @ctxt: a Relax-NG validation context
+ * @define: the definition to verify
+ *
+ * Validate the current node lists against the definition
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGDefinePtr define)
+{
+ xmlRelaxNGStatesPtr states, res;
+ int i, j, k, ret, oldflags;
+
+ /*
+ * We should NOT have both ctxt->state and ctxt->states
+ */
+ if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
+ TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ ctxt->state = NULL;
+ }
+
+ if ((ctxt->states == NULL) || (ctxt->states->nbState == 1)) {
+ if (ctxt->states != NULL) {
+ ctxt->state = ctxt->states->tabState[0];
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->states = NULL;
+ }
+ ret = xmlRelaxNGValidateState(ctxt, define);
+ if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
+ TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ ctxt->state = NULL;
+ }
+ if ((ctxt->states != NULL) && (ctxt->states->nbState == 1)) {
+ ctxt->state = ctxt->states->tabState[0];
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->states = NULL;
+ }
+ return (ret);
+ }
+
+ states = ctxt->states;
+ ctxt->states = NULL;
+ res = NULL;
+ j = 0;
+ oldflags = ctxt->flags;
+ ctxt->flags |= FLAGS_IGNORABLE;
+ for (i = 0; i < states->nbState; i++) {
+ ctxt->state = states->tabState[i];
+ ctxt->states = NULL;
+ ret = xmlRelaxNGValidateState(ctxt, define);
+ /*
+ * We should NOT have both ctxt->state and ctxt->states
+ */
+ if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
+ TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ ctxt->state = NULL;
+ }
+ if (ret == 0) {
+ if (ctxt->states == NULL) {
+ if (res != NULL) {
+ /* add the state to the container */
+ xmlRelaxNGAddStates(ctxt, res, ctxt->state);
+ ctxt->state = NULL;
+ } else {
+ /* add the state directly in states */
+ states->tabState[j++] = ctxt->state;
+ ctxt->state = NULL;
+ }
+ } else {
+ if (res == NULL) {
+ /* make it the new container and copy other results */
+ res = ctxt->states;
+ ctxt->states = NULL;
+ for (k = 0; k < j; k++)
+ xmlRelaxNGAddStates(ctxt, res,
+ states->tabState[k]);
+ } else {
+ /* add all the new results to res and reff the container */
+ for (k = 0; k < ctxt->states->nbState; k++)
+ xmlRelaxNGAddStates(ctxt, res,
+ ctxt->states->tabState[k]);
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->states = NULL;
+ }
+ }
+ } else {
+ if (ctxt->state != NULL) {
+ xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ ctxt->state = NULL;
+ } else if (ctxt->states != NULL) {
+ for (k = 0; k < ctxt->states->nbState; k++)
+ xmlRelaxNGFreeValidState(ctxt,
+ ctxt->states->tabState[k]);
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->states = NULL;
+ }
+ }
+ }
+ ctxt->flags = oldflags;
+ if (res != NULL) {
+ xmlRelaxNGFreeStates(ctxt, states);
+ ctxt->states = res;
+ ret = 0;
+ } else if (j > 1) {
+ states->nbState = j;
+ ctxt->states = states;
+ ret = 0;
+ } else if (j == 1) {
+ ctxt->state = states->tabState[0];
+ xmlRelaxNGFreeStates(ctxt, states);
+ ret = 0;
+ } else {
+ ret = -1;
+ xmlRelaxNGFreeStates(ctxt, states);
+ if (ctxt->states != NULL) {
+ xmlRelaxNGFreeStates(ctxt, ctxt->states);
+ ctxt->states = NULL;
+ }
+ }
+ if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
+ TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ ctxt->state = NULL;
+ }
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGValidateDocument:
+ * @ctxt: a Relax-NG validation context
+ * @doc: the document
+ *
+ * Validate the given document
+ *
+ * Returns 0 if the validation succeeded or an error code.
+ */
+static int
+xmlRelaxNGValidateDocument(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc)
+{
+ int ret;
+ xmlRelaxNGPtr schema;
+ xmlRelaxNGGrammarPtr grammar;
+ xmlRelaxNGValidStatePtr state;
+ xmlNodePtr node;
+
+ if ((ctxt == NULL) || (ctxt->schema == NULL) || (doc == NULL))
+ return (-1);
+
+ ctxt->errNo = XML_RELAXNG_OK;
+ schema = ctxt->schema;
+ grammar = schema->topgrammar;
+ if (grammar == NULL) {
+ VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
+ return (-1);
+ }
+ state = xmlRelaxNGNewValidState(ctxt, NULL);
+ ctxt->state = state;
+ ret = xmlRelaxNGValidateDefinition(ctxt, grammar->start);
+ if ((ctxt->state != NULL) && (state->seq != NULL)) {
+ state = ctxt->state;
+ node = state->seq;
+ node = xmlRelaxNGSkipIgnored(ctxt, node);
+ if (node != NULL) {
+ if (ret != -1) {
+ VALID_ERR(XML_RELAXNG_ERR_EXTRADATA);
+ ret = -1;
+ }
+ }
+ } else if (ctxt->states != NULL) {
+ int i;
+ int tmp = -1;
+
+ for (i = 0; i < ctxt->states->nbState; i++) {
+ state = ctxt->states->tabState[i];
+ node = state->seq;
+ node = xmlRelaxNGSkipIgnored(ctxt, node);
+ if (node == NULL)
+ tmp = 0;
+ xmlRelaxNGFreeValidState(ctxt, state);
+ }
+ if (tmp == -1) {
+ if (ret != -1) {
+ VALID_ERR(XML_RELAXNG_ERR_EXTRADATA);
+ ret = -1;
+ }
+ }
+ }
+ if (ctxt->state != NULL) {
+ xmlRelaxNGFreeValidState(ctxt, ctxt->state);
+ ctxt->state = NULL;
+ }
+ if (ret != 0)
+ xmlRelaxNGDumpValidError(ctxt);
+#ifdef DEBUG
+ else if (ctxt->errNr != 0) {
+ ctxt->error(ctxt->userData,
+ "%d Extra error messages left on stack !\n",
+ ctxt->errNr);
+ xmlRelaxNGDumpValidError(ctxt);
+ }
+#endif
+#ifdef LIBXML_VALID_ENABLED
+ if (ctxt->idref == 1) {
+ xmlValidCtxt vctxt;
+
+ memset(&vctxt, 0, sizeof(xmlValidCtxt));
+ vctxt.valid = 1;
+ vctxt.error = ctxt->error;
+ vctxt.warning = ctxt->warning;
+ vctxt.userData = ctxt->userData;
+
+ if (xmlValidateDocumentFinal(&vctxt, doc) != 1)
+ ret = -1;
+ }
+#endif /* LIBXML_VALID_ENABLED */
+ if ((ret == 0) && (ctxt->errNo != XML_RELAXNG_OK))
+ ret = -1;
+
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Validation interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlRelaxNGNewValidCtxt:
+ * @schema: a precompiled XML RelaxNGs
+ *
+ * Create an XML RelaxNGs validation context based on the given schema
+ *
+ * Returns the validation context or NULL in case of error
+ */
+xmlRelaxNGValidCtxtPtr
+xmlRelaxNGNewValidCtxt(xmlRelaxNGPtr schema)
+{
+ xmlRelaxNGValidCtxtPtr ret;
+
+ ret = (xmlRelaxNGValidCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGValidCtxt));
+ if (ret == NULL) {
+ xmlRngVErrMemory(NULL, "building context\n");
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlRelaxNGValidCtxt));
+ ret->schema = schema;
+ ret->error = xmlGenericError;
+ ret->userData = xmlGenericErrorContext;
+ ret->errNr = 0;
+ ret->errMax = 0;
+ ret->err = NULL;
+ ret->errTab = NULL;
+ ret->idref = schema->idref;
+ ret->states = NULL;
+ ret->freeState = NULL;
+ ret->freeStates = NULL;
+ ret->errNo = XML_RELAXNG_OK;
+ return (ret);
+}
+
+/**
+ * xmlRelaxNGFreeValidCtxt:
+ * @ctxt: the schema validation context
+ *
+ * Free the resources associated to the schema validation context
+ */
+void
+xmlRelaxNGFreeValidCtxt(xmlRelaxNGValidCtxtPtr ctxt)
+{
+ int k;
+
+ if (ctxt == NULL)
+ return;
+ if (ctxt->states != NULL)
+ xmlRelaxNGFreeStates(NULL, ctxt->states);
+ if (ctxt->freeState != NULL) {
+ for (k = 0; k < ctxt->freeState->nbState; k++) {
+ xmlRelaxNGFreeValidState(NULL, ctxt->freeState->tabState[k]);
+ }
+ xmlRelaxNGFreeStates(NULL, ctxt->freeState);
+ }
+ if (ctxt->freeStates != NULL) {
+ for (k = 0; k < ctxt->freeStatesNr; k++) {
+ xmlRelaxNGFreeStates(NULL, ctxt->freeStates[k]);
+ }
+ xmlFree(ctxt->freeStates);
+ }
+ if (ctxt->errTab != NULL)
+ xmlFree(ctxt->errTab);
+ if (ctxt->elemTab != NULL) {
+ xmlRegExecCtxtPtr exec;
+
+ exec = xmlRelaxNGElemPop(ctxt);
+ while (exec != NULL) {
+ xmlRegFreeExecCtxt(exec);
+ exec = xmlRelaxNGElemPop(ctxt);
+ }
+ xmlFree(ctxt->elemTab);
+ }
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlRelaxNGSetValidErrors:
+ * @ctxt: a Relax-NG validation context
+ * @err: the error function
+ * @warn: the warning function
+ * @ctx: the functions context
+ *
+ * Set the error and warning callback informations
+ */
+void
+xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc err,
+ xmlRelaxNGValidityWarningFunc warn, void *ctx)
+{
+ if (ctxt == NULL)
+ return;
+ ctxt->error = err;
+ ctxt->warning = warn;
+ ctxt->userData = ctx;
+}
+
+/**
+ * xmlRelaxNGGetValidErrors:
+ * @ctxt: a Relax-NG validation context
+ * @err: the error function result
+ * @warn: the warning function result
+ * @ctx: the functions context result
+ *
+ * Get the error and warning callback informations
+ *
+ * Returns -1 in case of error and 0 otherwise
+ */
+int
+xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlRelaxNGValidityErrorFunc * err,
+ xmlRelaxNGValidityWarningFunc * warn, void **ctx)
+{
+ if (ctxt == NULL)
+ return (-1);
+ if (err != NULL)
+ *err = ctxt->error;
+ if (warn != NULL)
+ *warn = ctxt->warning;
+ if (ctx != NULL)
+ *ctx = ctxt->userData;
+ return (0);
+}
+
+/**
+ * xmlRelaxNGValidateDoc:
+ * @ctxt: a Relax-NG validation context
+ * @doc: a parsed document tree
+ *
+ * Validate a document tree in memory.
+ *
+ * Returns 0 if the document is valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+int
+xmlRelaxNGValidateDoc(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc)
+{
+ int ret;
+
+ if ((ctxt == NULL) || (doc == NULL))
+ return (-1);
+
+ ctxt->doc = doc;
+
+ ret = xmlRelaxNGValidateDocument(ctxt, doc);
+ /*
+ * TODO: build error codes
+ */
+ if (ret == -1)
+ return (1);
+ return (ret);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/result/DocBook/abbrev.example.1 b/result/DocBook/abbrev.example.1
new file mode 100644
index 0000000..04934f4
--- /dev/null
+++ b/result/DocBook/abbrev.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <abbrev>Assn.</abbrev> of Computing Machinery would probably never
+abbreviate “Association†like this.
+</para>
diff --git a/result/DocBook/abbrev.example.1.xml b/result/DocBook/abbrev.example.1.xml
new file mode 100644
index 0000000..04934f4
--- /dev/null
+++ b/result/DocBook/abbrev.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <abbrev>Assn.</abbrev> of Computing Machinery would probably never
+abbreviate “Association†like this.
+</para>
diff --git a/result/DocBook/abstract.example.1 b/result/DocBook/abstract.example.1
new file mode 100644
index 0000000..0849858
--- /dev/null
+++ b/result/DocBook/abstract.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter><title>Some Chapter</title><abstract><para>
+In brief, …
+</para></abstract><para>
+In this chapter, …
+</para></chapter>
diff --git a/result/DocBook/abstract.example.1.xml b/result/DocBook/abstract.example.1.xml
new file mode 100644
index 0000000..0849858
--- /dev/null
+++ b/result/DocBook/abstract.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter><title>Some Chapter</title><abstract><para>
+In brief, …
+</para></abstract><para>
+In this chapter, …
+</para></chapter>
diff --git a/result/DocBook/accel.example.1 b/result/DocBook/accel.example.1
new file mode 100644
index 0000000..2af0883
--- /dev/null
+++ b/result/DocBook/accel.example.1
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para OS="windows">
+You can exit most Windows applications by selecting
+<guimenuitem><accel>Q</accel>uit</guimenuitem> or
+<guimenuitem>E<accel>x</accel>it</guimenuitem> from
+the <guimenu><accel>F</accel>ile</guimenu> menu.
+</para>
diff --git a/result/DocBook/accel.example.1.xml b/result/DocBook/accel.example.1.xml
new file mode 100644
index 0000000..2af0883
--- /dev/null
+++ b/result/DocBook/accel.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para OS="windows">
+You can exit most Windows applications by selecting
+<guimenuitem><accel>Q</accel>uit</guimenuitem> or
+<guimenuitem>E<accel>x</accel>it</guimenuitem> from
+the <guimenu><accel>F</accel>ile</guimenu> menu.
+</para>
diff --git a/result/DocBook/ackno.example.1 b/result/DocBook/ackno.example.1
new file mode 100644
index 0000000..5673275
--- /dev/null
+++ b/result/DocBook/ackno.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<article><artheader><author><firstname>Norman</firstname><surname>Walsh</surname></author></artheader><para>
+This is an odd, minimalist sort of article example.
+</para><ackno>
+First, I'd like to thank the members of the academy, …
+</ackno></article>
diff --git a/result/DocBook/ackno.example.1.xml b/result/DocBook/ackno.example.1.xml
new file mode 100644
index 0000000..5673275
--- /dev/null
+++ b/result/DocBook/ackno.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<article><artheader><author><firstname>Norman</firstname><surname>Walsh</surname></author></artheader><para>
+This is an odd, minimalist sort of article example.
+</para><ackno>
+First, I'd like to thank the members of the academy, …
+</ackno></article>
diff --git a/result/DocBook/acronym.example.1 b/result/DocBook/acronym.example.1
new file mode 100644
index 0000000..d22954b
--- /dev/null
+++ b/result/DocBook/acronym.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In the United States, <acronym>NASA</acronym> stands for the
+National Aeronautics and Space Administration.
+</para>
diff --git a/result/DocBook/acronym.example.1.xml b/result/DocBook/acronym.example.1.xml
new file mode 100644
index 0000000..d22954b
--- /dev/null
+++ b/result/DocBook/acronym.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In the United States, <acronym>NASA</acronym> stands for the
+National Aeronautics and Space Administration.
+</para>
diff --git a/result/DocBook/action.example.1 b/result/DocBook/action.example.1
new file mode 100644
index 0000000..4536fb0
--- /dev/null
+++ b/result/DocBook/action.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Selecting <guimenuitem>Close</guimenuitem> closes the file and automatically
+runs <action>end of job cleanup</action>.
+</para>
diff --git a/result/DocBook/action.example.1.xml b/result/DocBook/action.example.1.xml
new file mode 100644
index 0000000..4536fb0
--- /dev/null
+++ b/result/DocBook/action.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Selecting <guimenuitem>Close</guimenuitem> closes the file and automatically
+runs <action>end of job cleanup</action>.
+</para>
diff --git a/result/DocBook/address.example.1 b/result/DocBook/address.example.1
new file mode 100644
index 0000000..8e1a85e
--- /dev/null
+++ b/result/DocBook/address.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+An example of a postal mail address in the United States is:
+<address>
+John and Jane Doe
+<street>100 Main Street</street><city>Anytown</city>, <state>NY</state><postcode>12345</postcode><country>USA</country></address></para>
diff --git a/result/DocBook/address.example.1.xml b/result/DocBook/address.example.1.xml
new file mode 100644
index 0000000..8e1a85e
--- /dev/null
+++ b/result/DocBook/address.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+An example of a postal mail address in the United States is:
+<address>
+John and Jane Doe
+<street>100 Main Street</street><city>Anytown</city>, <state>NY</state><postcode>12345</postcode><country>USA</country></address></para>
diff --git a/result/DocBook/anchor.example.1 b/result/DocBook/anchor.example.1
new file mode 100644
index 0000000..80ca7f7
--- /dev/null
+++ b/result/DocBook/anchor.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The anchor element<anchor id="example.anchor.1"/> is empty and contributes
+nothing to the flow of the content in which it occurs. It is only useful
+as a target.
+</para>
diff --git a/result/DocBook/anchor.example.1.xml b/result/DocBook/anchor.example.1.xml
new file mode 100644
index 0000000..80ca7f7
--- /dev/null
+++ b/result/DocBook/anchor.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The anchor element<anchor id="example.anchor.1"/> is empty and contributes
+nothing to the flow of the content in which it occurs. It is only useful
+as a target.
+</para>
diff --git a/result/DocBook/appendix.example.1 b/result/DocBook/appendix.example.1
new file mode 100644
index 0000000..2f2292f
--- /dev/null
+++ b/result/DocBook/appendix.example.1
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book><chapter><title>Required Chapter</title><para>
+At least one chapter, reference, part, or article is required in a book.
+</para></chapter><appendix><title>Demonstration Appendix</title><para>
+This appendix demonstrates an appendix in a book. It has the
+same broad content model as a chapter.
+</para></appendix></book>
diff --git a/result/DocBook/appendix.example.1.xml b/result/DocBook/appendix.example.1.xml
new file mode 100644
index 0000000..2f2292f
--- /dev/null
+++ b/result/DocBook/appendix.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book><chapter><title>Required Chapter</title><para>
+At least one chapter, reference, part, or article is required in a book.
+</para></chapter><appendix><title>Demonstration Appendix</title><para>
+This appendix demonstrates an appendix in a book. It has the
+same broad content model as a chapter.
+</para></appendix></book>
diff --git a/result/DocBook/application.example.1 b/result/DocBook/application.example.1
new file mode 100644
index 0000000..8d99e05
--- /dev/null
+++ b/result/DocBook/application.example.1
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para><application>Word Perfect</application> is one of several word
+processors to claim support for <acronym>SGML</acronym>.
+</para>
diff --git a/result/DocBook/application.example.1.xml b/result/DocBook/application.example.1.xml
new file mode 100644
index 0000000..8d99e05
--- /dev/null
+++ b/result/DocBook/application.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para><application>Word Perfect</application> is one of several word
+processors to claim support for <acronym>SGML</acronym>.
+</para>
diff --git a/result/DocBook/article.example.1 b/result/DocBook/article.example.1
new file mode 100644
index 0000000..d55e27b
--- /dev/null
+++ b/result/DocBook/article.example.1
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<article><artheader><author><firstname>Norman</firstname><surname>Walsh</surname></author><authorinitials>ndw</authorinitials><artpagenums>339-343</artpagenums><volumenum>15</volumenum><issuenum>3</issuenum><publisher><publishername>The TeX User's Group</publishername></publisher><pubdate>1994</pubdate><title>A World Wide Web Interface to CTAN</title><titleabbrev>CTAN-Web</titleabbrev><revhistory><revision><revnumber>1.0</revnumber><date>28 Mar 1994</date><revremark>Submitted.</revremark></revision><revision><revnumber>0.5</revnumber><date>15 Feb 1994</date><revremark>First draft for review.</revremark></revision></revhistory></artheader><para>
+The body of the article …
+</para></article>
diff --git a/result/DocBook/article.example.1.xml b/result/DocBook/article.example.1.xml
new file mode 100644
index 0000000..d55e27b
--- /dev/null
+++ b/result/DocBook/article.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<article><artheader><author><firstname>Norman</firstname><surname>Walsh</surname></author><authorinitials>ndw</authorinitials><artpagenums>339-343</artpagenums><volumenum>15</volumenum><issuenum>3</issuenum><publisher><publishername>The TeX User's Group</publishername></publisher><pubdate>1994</pubdate><title>A World Wide Web Interface to CTAN</title><titleabbrev>CTAN-Web</titleabbrev><revhistory><revision><revnumber>1.0</revnumber><date>28 Mar 1994</date><revremark>Submitted.</revremark></revision><revision><revnumber>0.5</revnumber><date>15 Feb 1994</date><revremark>First draft for review.</revremark></revision></revhistory></artheader><para>
+The body of the article …
+</para></article>
diff --git a/result/DocBook/attribution.example.1 b/result/DocBook/attribution.example.1
new file mode 100644
index 0000000..b95f534
--- /dev/null
+++ b/result/DocBook/attribution.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE blockquote PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<blockquote><attribution>William Shakespeare</attribution><literallayout>
+What say you? Will you yield, and this avoid?
+Or, guilty in defense, be thus destroyed?
+</literallayout></blockquote>
diff --git a/result/DocBook/attribution.example.1.xml b/result/DocBook/attribution.example.1.xml
new file mode 100644
index 0000000..b95f534
--- /dev/null
+++ b/result/DocBook/attribution.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE blockquote PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<blockquote><attribution>William Shakespeare</attribution><literallayout>
+What say you? Will you yield, and this avoid?
+Or, guilty in defense, be thus destroyed?
+</literallayout></blockquote>
diff --git a/result/DocBook/audioobject.example.1 b/result/DocBook/audioobject.example.1
new file mode 100644
index 0000000..6c9e0b4
--- /dev/null
+++ b/result/DocBook/audioobject.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE mediaobject PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<mediaobject><audioobject><objectinfo><title>Phaser sound effect</title></objectinfo><audiodata fileref="phaser.wav"/></audioobject><textobject><phrase>A <trademark>Star Trek</trademark> phaser sound effect</phrase></textobject></mediaobject>
diff --git a/result/DocBook/audioobject.example.1.xml b/result/DocBook/audioobject.example.1.xml
new file mode 100644
index 0000000..6c9e0b4
--- /dev/null
+++ b/result/DocBook/audioobject.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE mediaobject PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<mediaobject><audioobject><objectinfo><title>Phaser sound effect</title></objectinfo><audiodata fileref="phaser.wav"/></audioobject><textobject><phrase>A <trademark>Star Trek</trademark> phaser sound effect</phrase></textobject></mediaobject>
diff --git a/result/DocBook/author.example.1 b/result/DocBook/author.example.1
new file mode 100644
index 0000000..45f6f7e
--- /dev/null
+++ b/result/DocBook/author.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE author PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<author><honorific>Mr</honorific><firstname>Norman</firstname><surname>Walsh</surname><othername role="mi">D</othername><affiliation><shortaffil>ATI</shortaffil><jobtitle>Senior Application Analyst</jobtitle><orgname>ArborText, Inc.</orgname><orgdiv>Application Developement</orgdiv></affiliation></author>
diff --git a/result/DocBook/author.example.1.xml b/result/DocBook/author.example.1.xml
new file mode 100644
index 0000000..45f6f7e
--- /dev/null
+++ b/result/DocBook/author.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE author PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<author><honorific>Mr</honorific><firstname>Norman</firstname><surname>Walsh</surname><othername role="mi">D</othername><affiliation><shortaffil>ATI</shortaffil><jobtitle>Senior Application Analyst</jobtitle><orgname>ArborText, Inc.</orgname><orgdiv>Application Developement</orgdiv></affiliation></author>
diff --git a/result/DocBook/authorgroup.example.1 b/result/DocBook/authorgroup.example.1
new file mode 100644
index 0000000..134847f
--- /dev/null
+++ b/result/DocBook/authorgroup.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<authorgroup><author><honorific>Dr.</honorific><firstname>Lois</firstname><surname>Common-Demoninator</surname><affiliation><shortaffil>Director, M. Behn School of Coop. Eng.</shortaffil><jobtitle>Director of Cooperative Efforts</jobtitle><orgname>The Marguerite Behn International School of
+ Cooperative Engineering</orgname></affiliation></author><editor><firstname>Peter</firstname><surname>Parker</surname><lineage>Sr.</lineage><othername>Spiderman</othername><authorblurb><para>
+ Peter's a super hero in his spare time.
+ </para></authorblurb></editor></authorgroup>
diff --git a/result/DocBook/authorgroup.example.1.xml b/result/DocBook/authorgroup.example.1.xml
new file mode 100644
index 0000000..134847f
--- /dev/null
+++ b/result/DocBook/authorgroup.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<authorgroup><author><honorific>Dr.</honorific><firstname>Lois</firstname><surname>Common-Demoninator</surname><affiliation><shortaffil>Director, M. Behn School of Coop. Eng.</shortaffil><jobtitle>Director of Cooperative Efforts</jobtitle><orgname>The Marguerite Behn International School of
+ Cooperative Engineering</orgname></affiliation></author><editor><firstname>Peter</firstname><surname>Parker</surname><lineage>Sr.</lineage><othername>Spiderman</othername><authorblurb><para>
+ Peter's a super hero in his spare time.
+ </para></authorblurb></editor></authorgroup>
diff --git a/result/DocBook/bibliography.example.1 b/result/DocBook/bibliography.example.1
new file mode 100644
index 0000000..a4c34bb
--- /dev/null
+++ b/result/DocBook/bibliography.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<bibliography><title>A Test Bibliography</title><bibliodiv><title>Books</title><biblioentry><abbrev>AhoSethiUllman96</abbrev><authorgroup><author><firstname>Alfred V.</firstname><surname>Aho</surname></author><author><firstname>Ravi</firstname><surname>Sethi</surname></author><author><firstname>Jeffrey D.</firstname><surname>Ullman</surname></author></authorgroup><copyright><year>1996</year><holder>Bell Telephone Laboratories, Inc.</holder></copyright><editor><firstname>James T.</firstname><surname>DeWolf</surname></editor><isbn>0-201-10088-6</isbn><publisher><publishername>Addison-Wesley Publishing Company</publishername></publisher><title>Compilers, Principles, Techniques, and Tools</title><seriesinfo><title>Computer Science</title><editor><firstname>Michael A.</firstname><surname>Harrison</surname></editor><publisher><publishername>Addison-Wesley Publishing Company</publishername></publisher></seriesinfo></biblioentry><biblioentry xreflabel="Kites75"><authorgroup><author><firstname>Andrea</firstname><surname>Bahadur</surname></author><author><firstname>Mark</firstname><surname>Shwarek</surname></author></authorgroup><copyright><year>1974</year><year>1975</year><holder>Product Development International Holding N. V.</holder></copyright><isbn>0-88459-021-6</isbn><publisher><publishername>Plenary Publications International, Inc.</publishername></publisher><title>Kites</title><subtitle>Ancient Craft to Modern Sport</subtitle><pagenums>988-999</pagenums><seriesinfo><title>The Family Creative Workshop</title><seriesvolnums>1-22</seriesvolnums><editor><firstname>Allen</firstname><othername role="middle">Davenport</othername><surname>Bragdon</surname><contrib>Editor in Chief</contrib></editor></seriesinfo></biblioentry></bibliodiv><bibliodiv><title>Periodicals</title><biblioentry><abbrev>Walsh97</abbrev><biblioset relation="journal"><title>XML: Principles, Tools, and Techniques</title><publisher><publishername>O'Reilly &amp; Associates, Inc.</publishername></publisher><issn>1085-2301</issn><editor><firstname>Dan</firstname><surname>Connolly</surname></editor></biblioset><biblioset relation="article"><title>A Guide to XML</title><author><surname>Walsh</surname><firstname>Norman</firstname></author><copyright><year>1997</year><holder>ArborText, Inc.</holder></copyright><pagenums>97-108</pagenums></biblioset></biblioentry></bibliodiv></bibliography>
diff --git a/result/DocBook/bibliography.example.1.xml b/result/DocBook/bibliography.example.1.xml
new file mode 100644
index 0000000..a4c34bb
--- /dev/null
+++ b/result/DocBook/bibliography.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<bibliography><title>A Test Bibliography</title><bibliodiv><title>Books</title><biblioentry><abbrev>AhoSethiUllman96</abbrev><authorgroup><author><firstname>Alfred V.</firstname><surname>Aho</surname></author><author><firstname>Ravi</firstname><surname>Sethi</surname></author><author><firstname>Jeffrey D.</firstname><surname>Ullman</surname></author></authorgroup><copyright><year>1996</year><holder>Bell Telephone Laboratories, Inc.</holder></copyright><editor><firstname>James T.</firstname><surname>DeWolf</surname></editor><isbn>0-201-10088-6</isbn><publisher><publishername>Addison-Wesley Publishing Company</publishername></publisher><title>Compilers, Principles, Techniques, and Tools</title><seriesinfo><title>Computer Science</title><editor><firstname>Michael A.</firstname><surname>Harrison</surname></editor><publisher><publishername>Addison-Wesley Publishing Company</publishername></publisher></seriesinfo></biblioentry><biblioentry xreflabel="Kites75"><authorgroup><author><firstname>Andrea</firstname><surname>Bahadur</surname></author><author><firstname>Mark</firstname><surname>Shwarek</surname></author></authorgroup><copyright><year>1974</year><year>1975</year><holder>Product Development International Holding N. V.</holder></copyright><isbn>0-88459-021-6</isbn><publisher><publishername>Plenary Publications International, Inc.</publishername></publisher><title>Kites</title><subtitle>Ancient Craft to Modern Sport</subtitle><pagenums>988-999</pagenums><seriesinfo><title>The Family Creative Workshop</title><seriesvolnums>1-22</seriesvolnums><editor><firstname>Allen</firstname><othername role="middle">Davenport</othername><surname>Bragdon</surname><contrib>Editor in Chief</contrib></editor></seriesinfo></biblioentry></bibliodiv><bibliodiv><title>Periodicals</title><biblioentry><abbrev>Walsh97</abbrev><biblioset relation="journal"><title>XML: Principles, Tools, and Techniques</title><publisher><publishername>O'Reilly &amp; Associates, Inc.</publishername></publisher><issn>1085-2301</issn><editor><firstname>Dan</firstname><surname>Connolly</surname></editor></biblioset><biblioset relation="article"><title>A Guide to XML</title><author><surname>Walsh</surname><firstname>Norman</firstname></author><copyright><year>1997</year><holder>ArborText, Inc.</holder></copyright><pagenums>97-108</pagenums></biblioset></biblioentry></bibliodiv></bibliography>
diff --git a/result/DocBook/bibliography.example.2 b/result/DocBook/bibliography.example.2
new file mode 100644
index 0000000..3d09aa0
--- /dev/null
+++ b/result/DocBook/bibliography.example.2
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<bibliography><title>References</title><bibliomixed><bibliomset relation="article"><surname>Walsh</surname>, <firstname>Norman</firstname>.
+ <title role="article">Introduction to Cascading Style Sheets</title>.
+ </bibliomset><bibliomset relation="journal"><title>The World Wide Web Journal</title><volumenum>2</volumenum><issuenum>1</issuenum>.
+ <publishername>O'Reilly &amp; Associates, Inc.</publishername> and
+ <corpname>The World Wide Web Consortium</corpname>.
+ <pubdate>Winter, 1996</pubdate></bibliomset>.
+</bibliomixed></bibliography>
diff --git a/result/DocBook/bibliography.example.2.xml b/result/DocBook/bibliography.example.2.xml
new file mode 100644
index 0000000..3d09aa0
--- /dev/null
+++ b/result/DocBook/bibliography.example.2.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<bibliography><title>References</title><bibliomixed><bibliomset relation="article"><surname>Walsh</surname>, <firstname>Norman</firstname>.
+ <title role="article">Introduction to Cascading Style Sheets</title>.
+ </bibliomset><bibliomset relation="journal"><title>The World Wide Web Journal</title><volumenum>2</volumenum><issuenum>1</issuenum>.
+ <publishername>O'Reilly &amp; Associates, Inc.</publishername> and
+ <corpname>The World Wide Web Consortium</corpname>.
+ <pubdate>Winter, 1996</pubdate></bibliomset>.
+</bibliomixed></bibliography>
diff --git a/result/DocBook/bibliomset.example.1 b/result/DocBook/bibliomset.example.1
new file mode 100644
index 0000000..161f774
--- /dev/null
+++ b/result/DocBook/bibliomset.example.1
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE bibliomixed PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<bibliomixed><bibliomset relation="article"><surname>Walsh</surname>, <firstname>Norman</firstname>.
+ <title role="article">Introduction to Cascading Style Sheets</title>.
+ </bibliomset><bibliomset relation="journal"><title>The World Wide Web Journal</title><volumenum>2</volumenum><issuenum>1</issuenum>.
+ <publishername>O'Reilly &amp; Associates, Inc.</publishername> and
+ <corpname>The World Wide Web Consortium</corpname>.
+ <pubdate>Winter, 1996</pubdate></bibliomset>.
+</bibliomixed>
diff --git a/result/DocBook/bibliomset.example.1.xml b/result/DocBook/bibliomset.example.1.xml
new file mode 100644
index 0000000..161f774
--- /dev/null
+++ b/result/DocBook/bibliomset.example.1.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE bibliomixed PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<bibliomixed><bibliomset relation="article"><surname>Walsh</surname>, <firstname>Norman</firstname>.
+ <title role="article">Introduction to Cascading Style Sheets</title>.
+ </bibliomset><bibliomset relation="journal"><title>The World Wide Web Journal</title><volumenum>2</volumenum><issuenum>1</issuenum>.
+ <publishername>O'Reilly &amp; Associates, Inc.</publishername> and
+ <corpname>The World Wide Web Consortium</corpname>.
+ <pubdate>Winter, 1996</pubdate></bibliomset>.
+</bibliomixed>
diff --git a/result/DocBook/biblioset.example.1 b/result/DocBook/biblioset.example.1
new file mode 100644
index 0000000..2581cad
--- /dev/null
+++ b/result/DocBook/biblioset.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE biblioentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<biblioentry><abbrev>Walsh97</abbrev><biblioset relation="journal"><title>XML: Principles, Tools, and Techniques</title><publisher><publishername>O'Reilly &amp; Associates, Inc.</publishername></publisher><issn>1085-2301</issn><editor><firstname>Dan</firstname><surname>Connolly</surname></editor></biblioset><biblioset relation="article"><title>A Guide to XML</title><author><surname>Walsh</surname><firstname>Norman</firstname></author><copyright><year>1997</year><holder>ArborText, Inc.</holder></copyright><pagenums>97-108</pagenums></biblioset></biblioentry>
diff --git a/result/DocBook/biblioset.example.1.xml b/result/DocBook/biblioset.example.1.xml
new file mode 100644
index 0000000..2581cad
--- /dev/null
+++ b/result/DocBook/biblioset.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE biblioentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<biblioentry><abbrev>Walsh97</abbrev><biblioset relation="journal"><title>XML: Principles, Tools, and Techniques</title><publisher><publishername>O'Reilly &amp; Associates, Inc.</publishername></publisher><issn>1085-2301</issn><editor><firstname>Dan</firstname><surname>Connolly</surname></editor></biblioset><biblioset relation="article"><title>A Guide to XML</title><author><surname>Walsh</surname><firstname>Norman</firstname></author><copyright><year>1997</year><holder>ArborText, Inc.</holder></copyright><pagenums>97-108</pagenums></biblioset></biblioentry>
diff --git a/result/DocBook/blockquote.example.1 b/result/DocBook/blockquote.example.1
new file mode 100644
index 0000000..caa7ae4
--- /dev/null
+++ b/result/DocBook/blockquote.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE blockquote PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<blockquote><attribution>Richard Dawkins</attribution><para>
+The universe that we observe has precisely the properties we should
+expect if there is, at bottom, no design, no purpose, no evil and
+no good, nothing but pitiless indifference.
+</para></blockquote>
diff --git a/result/DocBook/blockquote.example.1.xml b/result/DocBook/blockquote.example.1.xml
new file mode 100644
index 0000000..caa7ae4
--- /dev/null
+++ b/result/DocBook/blockquote.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE blockquote PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<blockquote><attribution>Richard Dawkins</attribution><para>
+The universe that we observe has precisely the properties we should
+expect if there is, at bottom, no design, no purpose, no evil and
+no good, nothing but pitiless indifference.
+</para></blockquote>
diff --git a/result/DocBook/book.example.1 b/result/DocBook/book.example.1
new file mode 100644
index 0000000..dd0514f
--- /dev/null
+++ b/result/DocBook/book.example.1
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book><title>An Example Book</title><titleabbrev>Example</titleabbrev><bookinfo><legalnotice><para>No notice is required.</para></legalnotice><author><firstname>Norman</firstname><surname>Walsh</surname></author></bookinfo><dedication><para>
+This book is dedicated to you.
+</para></dedication><preface><title>Forword</title><para>
+Some content is always required.
+</para></preface><chapter><title>Required Chapter</title><para>
+At least one chapter, reference, part, or article is required in a book.
+</para></chapter><appendix><title>Optional Appendix</title><para>
+Appendixes are optional.
+</para></appendix></book>
diff --git a/result/DocBook/book.example.1.xml b/result/DocBook/book.example.1.xml
new file mode 100644
index 0000000..dd0514f
--- /dev/null
+++ b/result/DocBook/book.example.1.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book><title>An Example Book</title><titleabbrev>Example</titleabbrev><bookinfo><legalnotice><para>No notice is required.</para></legalnotice><author><firstname>Norman</firstname><surname>Walsh</surname></author></bookinfo><dedication><para>
+This book is dedicated to you.
+</para></dedication><preface><title>Forword</title><para>
+Some content is always required.
+</para></preface><chapter><title>Required Chapter</title><para>
+At least one chapter, reference, part, or article is required in a book.
+</para></chapter><appendix><title>Optional Appendix</title><para>
+Appendixes are optional.
+</para></appendix></book>
diff --git a/result/DocBook/bookinfo.example.1 b/result/DocBook/bookinfo.example.1
new file mode 100644
index 0000000..ad2b416
--- /dev/null
+++ b/result/DocBook/bookinfo.example.1
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<bookinfo><title>User's Guide for the DocBook DTD</title><authorgroup><author><firstname>Terry</firstname><surname>Allen</surname></author><author><firstname>Eve</firstname><surname>Maler</surname><affiliation><orgname>Arbortext, Inc.</orgname></affiliation></author><author><firstname>Norman</firstname><surname>Walsh</surname><affiliation><orgname>Arbortext, Inc.</orgname></affiliation></author></authorgroup><edition>User's Guide version 1.0 for DocBook V3.0</edition><pubdate>1997</pubdate><copyright><year>1992</year><year>1993</year><year>1994</year><year>1995</year><year>1996</year><year>1997</year><holder>Arbortext, Inc.,
+HaL Computer Systems, Inc.,
+Fujitsu Software Corp., and
+O'Reilly &amp; Associates, Inc.
+</holder></copyright><legalnotice><para>Permission to use, copy, modify and distribute
+the DocBook DTD and its accompanying documentation for any purpose and
+without fee is hereby granted in perpetuity, provided that the above
+copyright notice and this paragraph appear in all copies.</para></legalnotice><legalnotice><para>The copyright holders make no representation about the suitability of
+this DTD for any purpose. It is provided
+<quote>as is</quote> without expressed
+or implied warranty. If you modify the DocBook DTD in any way, except for
+declaring and referencing additional general entities and declaring additional
+notations, identify your DTD as a variant of DocBook.</para></legalnotice></bookinfo>
diff --git a/result/DocBook/bookinfo.example.1.xml b/result/DocBook/bookinfo.example.1.xml
new file mode 100644
index 0000000..ad2b416
--- /dev/null
+++ b/result/DocBook/bookinfo.example.1.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<bookinfo><title>User's Guide for the DocBook DTD</title><authorgroup><author><firstname>Terry</firstname><surname>Allen</surname></author><author><firstname>Eve</firstname><surname>Maler</surname><affiliation><orgname>Arbortext, Inc.</orgname></affiliation></author><author><firstname>Norman</firstname><surname>Walsh</surname><affiliation><orgname>Arbortext, Inc.</orgname></affiliation></author></authorgroup><edition>User's Guide version 1.0 for DocBook V3.0</edition><pubdate>1997</pubdate><copyright><year>1992</year><year>1993</year><year>1994</year><year>1995</year><year>1996</year><year>1997</year><holder>Arbortext, Inc.,
+HaL Computer Systems, Inc.,
+Fujitsu Software Corp., and
+O'Reilly &amp; Associates, Inc.
+</holder></copyright><legalnotice><para>Permission to use, copy, modify and distribute
+the DocBook DTD and its accompanying documentation for any purpose and
+without fee is hereby granted in perpetuity, provided that the above
+copyright notice and this paragraph appear in all copies.</para></legalnotice><legalnotice><para>The copyright holders make no representation about the suitability of
+this DTD for any purpose. It is provided
+<quote>as is</quote> without expressed
+or implied warranty. If you modify the DocBook DTD in any way, except for
+declaring and referencing additional general entities and declaring additional
+notations, identify your DTD as a variant of DocBook.</para></legalnotice></bookinfo>
diff --git a/result/DocBook/caution.example.1 b/result/DocBook/caution.example.1
new file mode 100644
index 0000000..84a93b8
--- /dev/null
+++ b/result/DocBook/caution.example.1
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE caution PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<caution><title>No User Servicable Parts Inside</title><para>
+Breaking this seal voids all warranties.
+</para></caution>
diff --git a/result/DocBook/caution.example.1.xml b/result/DocBook/caution.example.1.xml
new file mode 100644
index 0000000..84a93b8
--- /dev/null
+++ b/result/DocBook/caution.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE caution PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<caution><title>No User Servicable Parts Inside</title><para>
+Breaking this seal voids all warranties.
+</para></caution>
diff --git a/result/DocBook/chapter.example.1 b/result/DocBook/chapter.example.1
new file mode 100644
index 0000000..2982140
--- /dev/null
+++ b/result/DocBook/chapter.example.1
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter label="6" id="figures"><beginpage pagenum="129"/><docinfo><keywordset><keyword>images</keyword><keyword>illustrations</keyword></keywordset><itermset><indexterm zone="figures"><primary>Figures</primary></indexterm><indexterm zone="figures"><primary>Pictures</primary></indexterm><indexterm zone="notreal"><primary>Sections</primary><secondary>Not Real</secondary></indexterm></itermset></docinfo><title>Pictures and Figures</title><epigraph><attribution>William Safire</attribution><para>
+Knowing how things work is the basis for appreciation, and is
+thus a source of civilized delight.
+</para></epigraph><para>
+Pictures and figures …
+</para><sect1><title>Top Level Section</title><para>
+…
+</para><bridgehead id="notreal" renderas="sect3">Not a Real Section</bridgehead><para>
+This paragraph appears to be under a Sect3 heading, but it's really
+in the same Sect1 as the preceding paragraph.
+</para></sect1></chapter>
diff --git a/result/DocBook/chapter.example.1.xml b/result/DocBook/chapter.example.1.xml
new file mode 100644
index 0000000..2982140
--- /dev/null
+++ b/result/DocBook/chapter.example.1.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter label="6" id="figures"><beginpage pagenum="129"/><docinfo><keywordset><keyword>images</keyword><keyword>illustrations</keyword></keywordset><itermset><indexterm zone="figures"><primary>Figures</primary></indexterm><indexterm zone="figures"><primary>Pictures</primary></indexterm><indexterm zone="notreal"><primary>Sections</primary><secondary>Not Real</secondary></indexterm></itermset></docinfo><title>Pictures and Figures</title><epigraph><attribution>William Safire</attribution><para>
+Knowing how things work is the basis for appreciation, and is
+thus a source of civilized delight.
+</para></epigraph><para>
+Pictures and figures …
+</para><sect1><title>Top Level Section</title><para>
+…
+</para><bridgehead id="notreal" renderas="sect3">Not a Real Section</bridgehead><para>
+This paragraph appears to be under a Sect3 heading, but it's really
+in the same Sect1 as the preceding paragraph.
+</para></sect1></chapter>
diff --git a/result/DocBook/citation.example.1 b/result/DocBook/citation.example.1
new file mode 100644
index 0000000..db8f854
--- /dev/null
+++ b/result/DocBook/citation.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Consult <citation>AhoSethiUllman96</citation> for more details on
+abstract syntax tree construction.
+</para>
diff --git a/result/DocBook/citation.example.1.xml b/result/DocBook/citation.example.1.xml
new file mode 100644
index 0000000..db8f854
--- /dev/null
+++ b/result/DocBook/citation.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Consult <citation>AhoSethiUllman96</citation> for more details on
+abstract syntax tree construction.
+</para>
diff --git a/result/DocBook/citerefentry.example.1 b/result/DocBook/citerefentry.example.1
new file mode 100644
index 0000000..7b79b66
--- /dev/null
+++ b/result/DocBook/citerefentry.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+For a further description of print formats, consult the
+<citerefentry><refentrytitle>printf</refentrytitle><manvolnum>3S</manvolnum></citerefentry> manual page.
+</para>
diff --git a/result/DocBook/citerefentry.example.1.xml b/result/DocBook/citerefentry.example.1.xml
new file mode 100644
index 0000000..7b79b66
--- /dev/null
+++ b/result/DocBook/citerefentry.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+For a further description of print formats, consult the
+<citerefentry><refentrytitle>printf</refentrytitle><manvolnum>3S</manvolnum></citerefentry> manual page.
+</para>
diff --git a/result/DocBook/citetitle.example.1 b/result/DocBook/citetitle.example.1
new file mode 100644
index 0000000..61e94fb
--- /dev/null
+++ b/result/DocBook/citetitle.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+For a complete methodology for DTD creation, see
+<citetitle pubwork="book">Developing SGML DTDs: From Text to Model
+to Markup</citetitle> by Eve Maler and Jeanne El Andaloussi.
+</para>
diff --git a/result/DocBook/citetitle.example.1.xml b/result/DocBook/citetitle.example.1.xml
new file mode 100644
index 0000000..61e94fb
--- /dev/null
+++ b/result/DocBook/citetitle.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+For a complete methodology for DTD creation, see
+<citetitle pubwork="book">Developing SGML DTDs: From Text to Model
+to Markup</citetitle> by Eve Maler and Jeanne El Andaloussi.
+</para>
diff --git a/result/DocBook/classname.example.1 b/result/DocBook/classname.example.1
new file mode 100644
index 0000000..8b1a528
--- /dev/null
+++ b/result/DocBook/classname.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+All user-interface components must be descendants of the
+<classname>Widget</classname> class.
+</para>
diff --git a/result/DocBook/classname.example.1.xml b/result/DocBook/classname.example.1.xml
new file mode 100644
index 0000000..8b1a528
--- /dev/null
+++ b/result/DocBook/classname.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+All user-interface components must be descendants of the
+<classname>Widget</classname> class.
+</para>
diff --git a/result/DocBook/cmdsynopsis.example.1 b/result/DocBook/cmdsynopsis.example.1
new file mode 100644
index 0000000..581e289
--- /dev/null
+++ b/result/DocBook/cmdsynopsis.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE cmdsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<cmdsynopsis><command>cd</command><arg choice="req"><replaceable>directory</replaceable></arg></cmdsynopsis>
diff --git a/result/DocBook/cmdsynopsis.example.1.xml b/result/DocBook/cmdsynopsis.example.1.xml
new file mode 100644
index 0000000..581e289
--- /dev/null
+++ b/result/DocBook/cmdsynopsis.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE cmdsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<cmdsynopsis><command>cd</command><arg choice="req"><replaceable>directory</replaceable></arg></cmdsynopsis>
diff --git a/result/DocBook/cmdsynopsis.example.2 b/result/DocBook/cmdsynopsis.example.2
new file mode 100644
index 0000000..1ee5f5d
--- /dev/null
+++ b/result/DocBook/cmdsynopsis.example.2
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE cmdsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<cmdsynopsis><command>cal</command><arg>-j</arg><arg>-y</arg><arg>month <arg>year</arg></arg></cmdsynopsis>
diff --git a/result/DocBook/cmdsynopsis.example.2.xml b/result/DocBook/cmdsynopsis.example.2.xml
new file mode 100644
index 0000000..1ee5f5d
--- /dev/null
+++ b/result/DocBook/cmdsynopsis.example.2.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE cmdsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<cmdsynopsis><command>cal</command><arg>-j</arg><arg>-y</arg><arg>month <arg>year</arg></arg></cmdsynopsis>
diff --git a/result/DocBook/cmdsynopsis.example.3 b/result/DocBook/cmdsynopsis.example.3
new file mode 100644
index 0000000..ee41bef
--- /dev/null
+++ b/result/DocBook/cmdsynopsis.example.3
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE cmdsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<cmdsynopsis><command>chgrp</command><arg>-R
+ <group><arg>-H</arg><arg>-L</arg><arg>-P</arg></group></arg><arg>-f</arg><arg choice="plain"><replaceable>group</replaceable></arg><arg rep="repeat" choice="plain"><replaceable>file</replaceable></arg></cmdsynopsis>
diff --git a/result/DocBook/cmdsynopsis.example.3.xml b/result/DocBook/cmdsynopsis.example.3.xml
new file mode 100644
index 0000000..ee41bef
--- /dev/null
+++ b/result/DocBook/cmdsynopsis.example.3.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE cmdsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<cmdsynopsis><command>chgrp</command><arg>-R
+ <group><arg>-H</arg><arg>-L</arg><arg>-P</arg></group></arg><arg>-f</arg><arg choice="plain"><replaceable>group</replaceable></arg><arg rep="repeat" choice="plain"><replaceable>file</replaceable></arg></cmdsynopsis>
diff --git a/result/DocBook/cmdsynopsis.example.4 b/result/DocBook/cmdsynopsis.example.4
new file mode 100644
index 0000000..efe2065
--- /dev/null
+++ b/result/DocBook/cmdsynopsis.example.4
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE cmdsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<cmdsynopsis><command>emacs</command><arg>-t <replaceable>file</replaceable></arg><arg>-q</arg><arg>-u <replaceable>user</replaceable></arg><arg>+<replaceable>number</replaceable></arg><arg rep="repeat">-f <replaceable>function</replaceable></arg><sbr/><arg rep="repeat">-l <replaceable>file</replaceable></arg><arg rep="repeat" choice="plain"><replaceable>file</replaceable></arg></cmdsynopsis>
diff --git a/result/DocBook/cmdsynopsis.example.4.xml b/result/DocBook/cmdsynopsis.example.4.xml
new file mode 100644
index 0000000..efe2065
--- /dev/null
+++ b/result/DocBook/cmdsynopsis.example.4.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE cmdsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<cmdsynopsis><command>emacs</command><arg>-t <replaceable>file</replaceable></arg><arg>-q</arg><arg>-u <replaceable>user</replaceable></arg><arg>+<replaceable>number</replaceable></arg><arg rep="repeat">-f <replaceable>function</replaceable></arg><sbr/><arg rep="repeat">-l <replaceable>file</replaceable></arg><arg rep="repeat" choice="plain"><replaceable>file</replaceable></arg></cmdsynopsis>
diff --git a/result/DocBook/collab.example.1 b/result/DocBook/collab.example.1
new file mode 100644
index 0000000..7a000cb
--- /dev/null
+++ b/result/DocBook/collab.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book><bookinfo><title>DocBook: The Definitive Guide</title><authorgroup><collab><collabname>Lenny Muellner</collabname></collab><collab><collabname>Norman Walsh</collabname></collab></authorgroup></bookinfo><chapter><title>Just an Example</title><para>
+This is just an example, in real life, Lenny and Norm are both
+<sgmltag>Author</sgmltag>s.
+</para></chapter></book>
diff --git a/result/DocBook/collab.example.1.xml b/result/DocBook/collab.example.1.xml
new file mode 100644
index 0000000..7a000cb
--- /dev/null
+++ b/result/DocBook/collab.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book><bookinfo><title>DocBook: The Definitive Guide</title><authorgroup><collab><collabname>Lenny Muellner</collabname></collab><collab><collabname>Norman Walsh</collabname></collab></authorgroup></bookinfo><chapter><title>Just an Example</title><para>
+This is just an example, in real life, Lenny and Norm are both
+<sgmltag>Author</sgmltag>s.
+</para></chapter></book>
diff --git a/result/DocBook/colophon.example.1 b/result/DocBook/colophon.example.1
new file mode 100644
index 0000000..a9df62a
--- /dev/null
+++ b/result/DocBook/colophon.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE colophon PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<colophon><para>
+Draft versions of this book were produced with the
+DocBook DSSSL Stylesheets. Final production was
+performed with Troff.
+</para></colophon>
diff --git a/result/DocBook/colophon.example.1.xml b/result/DocBook/colophon.example.1.xml
new file mode 100644
index 0000000..a9df62a
--- /dev/null
+++ b/result/DocBook/colophon.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE colophon PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<colophon><para>
+Draft versions of this book were produced with the
+DocBook DSSSL Stylesheets. Final production was
+performed with Troff.
+</para></colophon>
diff --git a/result/DocBook/command.example.1 b/result/DocBook/command.example.1
new file mode 100644
index 0000000..e92ebe9
--- /dev/null
+++ b/result/DocBook/command.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In <acronym>UNIX</acronym>,
+<command>ls</command> is used to get a directory listing.
+</para>
diff --git a/result/DocBook/command.example.1.xml b/result/DocBook/command.example.1.xml
new file mode 100644
index 0000000..e92ebe9
--- /dev/null
+++ b/result/DocBook/command.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In <acronym>UNIX</acronym>,
+<command>ls</command> is used to get a directory listing.
+</para>
diff --git a/result/DocBook/comment.example.1 b/result/DocBook/comment.example.1
new file mode 100644
index 0000000..67bcc80
--- /dev/null
+++ b/result/DocBook/comment.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE example PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<example><title>The Grand Unified Theory</title><para><comment>Some details are still a bit shaky</comment>
+…
+Q.E.D.
+</para></example>
diff --git a/result/DocBook/comment.example.1.xml b/result/DocBook/comment.example.1.xml
new file mode 100644
index 0000000..67bcc80
--- /dev/null
+++ b/result/DocBook/comment.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE example PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<example><title>The Grand Unified Theory</title><para><comment>Some details are still a bit shaky</comment>
+…
+Q.E.D.
+</para></example>
diff --git a/result/DocBook/computeroutput.example.1 b/result/DocBook/computeroutput.example.1
new file mode 100644
index 0000000..613a91c
--- /dev/null
+++ b/result/DocBook/computeroutput.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The output from the date command,
+<computeroutput>Sun Nov 16, 1997 21:03:29</computeroutput>,
+uses fixed-width fields so that it can easily be parsed.
+</para>
diff --git a/result/DocBook/computeroutput.example.1.xml b/result/DocBook/computeroutput.example.1.xml
new file mode 100644
index 0000000..613a91c
--- /dev/null
+++ b/result/DocBook/computeroutput.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The output from the date command,
+<computeroutput>Sun Nov 16, 1997 21:03:29</computeroutput>,
+uses fixed-width fields so that it can easily be parsed.
+</para>
diff --git a/result/DocBook/confgroup.example.1 b/result/DocBook/confgroup.example.1
new file mode 100644
index 0000000..9f47fee
--- /dev/null
+++ b/result/DocBook/confgroup.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE confgroup PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<confgroup><confdates>April, 1998</confdates><conftitle>The World Wide Web Conference</conftitle><confnum>7</confnum><address>Brisbane, Australia</address><confsponsor>World Wide Web Conference Committee (W3C3)</confsponsor></confgroup>
diff --git a/result/DocBook/confgroup.example.1.xml b/result/DocBook/confgroup.example.1.xml
new file mode 100644
index 0000000..9f47fee
--- /dev/null
+++ b/result/DocBook/confgroup.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE confgroup PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<confgroup><confdates>April, 1998</confdates><conftitle>The World Wide Web Conference</conftitle><confnum>7</confnum><address>Brisbane, Australia</address><confsponsor>World Wide Web Conference Committee (W3C3)</confsponsor></confgroup>
diff --git a/result/DocBook/constant.example.1 b/result/DocBook/constant.example.1
new file mode 100644
index 0000000..d506344
--- /dev/null
+++ b/result/DocBook/constant.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In ACL, <constant>main::PCS</constant> contains the path component
+separator character.
+</para>
diff --git a/result/DocBook/constant.example.1.xml b/result/DocBook/constant.example.1.xml
new file mode 100644
index 0000000..d506344
--- /dev/null
+++ b/result/DocBook/constant.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In ACL, <constant>main::PCS</constant> contains the path component
+separator character.
+</para>
diff --git a/result/DocBook/constant.example.2 b/result/DocBook/constant.example.2
new file mode 100644
index 0000000..fb05334
--- /dev/null
+++ b/result/DocBook/constant.example.2
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The maximum legal length for a path name is
+<constant class="limit">PATH_MAX</constant>, defined in
+<filename class="headerfile">limits.h</filename>.
+</para>
diff --git a/result/DocBook/constant.example.2.xml b/result/DocBook/constant.example.2.xml
new file mode 100644
index 0000000..fb05334
--- /dev/null
+++ b/result/DocBook/constant.example.2.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The maximum legal length for a path name is
+<constant class="limit">PATH_MAX</constant>, defined in
+<filename class="headerfile">limits.h</filename>.
+</para>
diff --git a/result/DocBook/contractsponsor.example.1 b/result/DocBook/contractsponsor.example.1
new file mode 100644
index 0000000..db072a5
--- /dev/null
+++ b/result/DocBook/contractsponsor.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<article><artheader><title>Retrofitting Class A Widgets</title><contractsponsor>Xyzzy Engineering Resources</contractsponsor><contractnum>314-592-7</contractnum><pubsnumber>XER-314-7A</pubsnumber><corpauthor>Technical Documentation Consultants, Inc.</corpauthor><collab><collabname>John Whorfin</collabname><affiliation><orgname>Yoyodyne Industries</orgname></affiliation></collab></artheader><para>…</para></article>
diff --git a/result/DocBook/contractsponsor.example.1.xml b/result/DocBook/contractsponsor.example.1.xml
new file mode 100644
index 0000000..db072a5
--- /dev/null
+++ b/result/DocBook/contractsponsor.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<article><artheader><title>Retrofitting Class A Widgets</title><contractsponsor>Xyzzy Engineering Resources</contractsponsor><contractnum>314-592-7</contractnum><pubsnumber>XER-314-7A</pubsnumber><corpauthor>Technical Documentation Consultants, Inc.</corpauthor><collab><collabname>John Whorfin</collabname><affiliation><orgname>Yoyodyne Industries</orgname></affiliation></collab></artheader><para>…</para></article>
diff --git a/result/DocBook/copyright.example.1 b/result/DocBook/copyright.example.1
new file mode 100644
index 0000000..3063a0e
--- /dev/null
+++ b/result/DocBook/copyright.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE copyright PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<copyright><year>1996</year><year>1997</year><holder>O'Reilly &amp; Associates, Inc.</holder></copyright>
diff --git a/result/DocBook/copyright.example.1.xml b/result/DocBook/copyright.example.1.xml
new file mode 100644
index 0000000..3063a0e
--- /dev/null
+++ b/result/DocBook/copyright.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE copyright PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<copyright><year>1996</year><year>1997</year><holder>O'Reilly &amp; Associates, Inc.</holder></copyright>
diff --git a/result/DocBook/database.example.1 b/result/DocBook/database.example.1
new file mode 100644
index 0000000..08843d5
--- /dev/null
+++ b/result/DocBook/database.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <database>ProjectStatus</database> database has been updated.
+Please note that <database class="field">Year</database> has been
+extended to four digits.
+</para>
diff --git a/result/DocBook/database.example.1.xml b/result/DocBook/database.example.1.xml
new file mode 100644
index 0000000..08843d5
--- /dev/null
+++ b/result/DocBook/database.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <database>ProjectStatus</database> database has been updated.
+Please note that <database class="field">Year</database> has been
+extended to four digits.
+</para>
diff --git a/result/DocBook/emphasis.example.1 b/result/DocBook/emphasis.example.1
new file mode 100644
index 0000000..ebffd41
--- /dev/null
+++ b/result/DocBook/emphasis.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <emphasis>most</emphasis> important example of this
+phenomenon occurs in A. Nonymous's book
+<citetitle>Power Snacking</citetitle>.
+</para>
diff --git a/result/DocBook/emphasis.example.1.xml b/result/DocBook/emphasis.example.1.xml
new file mode 100644
index 0000000..ebffd41
--- /dev/null
+++ b/result/DocBook/emphasis.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <emphasis>most</emphasis> important example of this
+phenomenon occurs in A. Nonymous's book
+<citetitle>Power Snacking</citetitle>.
+</para>
diff --git a/result/DocBook/entrytbl.example.1 b/result/DocBook/entrytbl.example.1
new file mode 100644
index 0000000..492362e
--- /dev/null
+++ b/result/DocBook/entrytbl.example.1
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE informaltable PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<!-- entrytbl not supported, fake it in descrip.1 -->
+<informaltable frame="all"><tgroup cols="3"><tbody><row><entry>a1</entry><entry>b1</entry><entry>c1</entry></row><row><entry>a2</entry><entrytbl cols="3"><tbody><row><entry>b2a1</entry><entry>b2b1</entry><entry>b2c1</entry></row><row><entry>b2a2</entry><entry>b2b2</entry><entry>b2c2</entry></row><row><entry>b2a3</entry><entry>b2b3</entry><entry>b2c3</entry></row></tbody></entrytbl><entry>c2</entry></row><row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row></tbody></tgroup></informaltable>
diff --git a/result/DocBook/entrytbl.example.1.xml b/result/DocBook/entrytbl.example.1.xml
new file mode 100644
index 0000000..492362e
--- /dev/null
+++ b/result/DocBook/entrytbl.example.1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE informaltable PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<!-- entrytbl not supported, fake it in descrip.1 -->
+<informaltable frame="all"><tgroup cols="3"><tbody><row><entry>a1</entry><entry>b1</entry><entry>c1</entry></row><row><entry>a2</entry><entrytbl cols="3"><tbody><row><entry>b2a1</entry><entry>b2b1</entry><entry>b2c1</entry></row><row><entry>b2a2</entry><entry>b2b2</entry><entry>b2c2</entry></row><row><entry>b2a3</entry><entry>b2b3</entry><entry>b2c3</entry></row></tbody></entrytbl><entry>c2</entry></row><row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row></tbody></tgroup></informaltable>
diff --git a/result/DocBook/envar.example.1 b/result/DocBook/envar.example.1
new file mode 100644
index 0000000..f8f8400
--- /dev/null
+++ b/result/DocBook/envar.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In order to translate public identifiers into local system identifiers,
+<application>Jade</application> and <application>SP</application> read the catalog files
+pointed to by <envar>SGML_CATALOG_FILES</envar>.
+</para>
diff --git a/result/DocBook/envar.example.1.xml b/result/DocBook/envar.example.1.xml
new file mode 100644
index 0000000..f8f8400
--- /dev/null
+++ b/result/DocBook/envar.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In order to translate public identifiers into local system identifiers,
+<application>Jade</application> and <application>SP</application> read the catalog files
+pointed to by <envar>SGML_CATALOG_FILES</envar>.
+</para>
diff --git a/result/DocBook/equation.example.1 b/result/DocBook/equation.example.1
new file mode 100644
index 0000000..4bf11a7
--- /dev/null
+++ b/result/DocBook/equation.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE equation PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<equation><title>Fermat's Last Theorum</title><alt>x^n + y^n ≠ z^n ∀ n ≠ 2</alt><graphic fileref="figures/fermat"/></equation>
diff --git a/result/DocBook/equation.example.1.xml b/result/DocBook/equation.example.1.xml
new file mode 100644
index 0000000..4bf11a7
--- /dev/null
+++ b/result/DocBook/equation.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE equation PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<equation><title>Fermat's Last Theorum</title><alt>x^n + y^n ≠ z^n ∀ n ≠ 2</alt><graphic fileref="figures/fermat"/></equation>
diff --git a/result/DocBook/errorcode.example.1 b/result/DocBook/errorcode.example.1
new file mode 100644
index 0000000..9d91fce
--- /dev/null
+++ b/result/DocBook/errorcode.example.1
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+On most DOS-derived systems, functions signal a <errorname>File
+Not Found</errorname> error by returning
+<errorcode>2</errorcode>. This is usually a
+<errortype>recoverable</errortype> (non-fatal) error.
+</para>
diff --git a/result/DocBook/errorcode.example.1.xml b/result/DocBook/errorcode.example.1.xml
new file mode 100644
index 0000000..9d91fce
--- /dev/null
+++ b/result/DocBook/errorcode.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+On most DOS-derived systems, functions signal a <errorname>File
+Not Found</errorname> error by returning
+<errorcode>2</errorcode>. This is usually a
+<errortype>recoverable</errortype> (non-fatal) error.
+</para>
diff --git a/result/DocBook/errorcode.example.2 b/result/DocBook/errorcode.example.2
new file mode 100644
index 0000000..c0b5752
--- /dev/null
+++ b/result/DocBook/errorcode.example.2
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+On most UNIX systems, functions signal a <errorname>File
+Not Found</errorname> error by returning
+<errorcode>ENOENT</errorcode>, defined in
+<filename>errno.h</filename>. This is usually a
+<errortype>recoverable</errortype> (non-fatal) error.
+</para>
diff --git a/result/DocBook/errorcode.example.2.xml b/result/DocBook/errorcode.example.2.xml
new file mode 100644
index 0000000..c0b5752
--- /dev/null
+++ b/result/DocBook/errorcode.example.2.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+On most UNIX systems, functions signal a <errorname>File
+Not Found</errorname> error by returning
+<errorcode>ENOENT</errorcode>, defined in
+<filename>errno.h</filename>. This is usually a
+<errortype>recoverable</errortype> (non-fatal) error.
+</para>
diff --git a/result/DocBook/example.example.1 b/result/DocBook/example.example.1
new file mode 100644
index 0000000..89343f0
--- /dev/null
+++ b/result/DocBook/example.example.1
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE example PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<example><title>A DSSSL Function</title><programlisting>
+(define (node-list-filter-by-gi nodelist gilist)
+ ;; Returns the node-list that contains every element of the original
+ ;; nodelist whose gi is in gilist
+ (let loop ((result (empty-node-list)) (nl nodelist))
+ (if (node-list-empty? nl)
+ result
+ (if (member (gi (node-list-first nl)) gilist)
+ (loop (node-list result (node-list-first nl))
+ (node-list-rest nl))
+ (loop result (node-list-rest nl))))))
+</programlisting></example>
diff --git a/result/DocBook/example.example.1.xml b/result/DocBook/example.example.1.xml
new file mode 100644
index 0000000..89343f0
--- /dev/null
+++ b/result/DocBook/example.example.1.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE example PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<example><title>A DSSSL Function</title><programlisting>
+(define (node-list-filter-by-gi nodelist gilist)
+ ;; Returns the node-list that contains every element of the original
+ ;; nodelist whose gi is in gilist
+ (let loop ((result (empty-node-list)) (nl nodelist))
+ (if (node-list-empty? nl)
+ result
+ (if (member (gi (node-list-first nl)) gilist)
+ (loop (node-list result (node-list-first nl))
+ (node-list-rest nl))
+ (loop result (node-list-rest nl))))))
+</programlisting></example>
diff --git a/result/DocBook/figure.example.1 b/result/DocBook/figure.example.1
new file mode 100644
index 0000000..9bbe38b
--- /dev/null
+++ b/result/DocBook/figure.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE figure PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<figure><title>The Pythagorean Theorum Illustrated</title><graphic fileref="figures/pythag"/></figure>
diff --git a/result/DocBook/figure.example.1.xml b/result/DocBook/figure.example.1.xml
new file mode 100644
index 0000000..9bbe38b
--- /dev/null
+++ b/result/DocBook/figure.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE figure PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<figure><title>The Pythagorean Theorum Illustrated</title><graphic fileref="figures/pythag"/></figure>
diff --git a/result/DocBook/filename.example.1 b/result/DocBook/filename.example.1
new file mode 100644
index 0000000..7288267
--- /dev/null
+++ b/result/DocBook/filename.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The symbolic constants for error numbers are defined in
+<filename class="headerfile">errno.h</filename> in
+<filename class="directory">/usr/include/sys</filename>.
+</para>
diff --git a/result/DocBook/filename.example.1.xml b/result/DocBook/filename.example.1.xml
new file mode 100644
index 0000000..7288267
--- /dev/null
+++ b/result/DocBook/filename.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The symbolic constants for error numbers are defined in
+<filename class="headerfile">errno.h</filename> in
+<filename class="directory">/usr/include/sys</filename>.
+</para>
diff --git a/result/DocBook/firstterm.example.1 b/result/DocBook/firstterm.example.1
new file mode 100644
index 0000000..f7a101e
--- /dev/null
+++ b/result/DocBook/firstterm.example.1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In an <firstterm>Object Oriented</firstterm> programming language,
+data and procedures (called <glossterm>methods</glossterm>) are
+bound together.
+</para>
diff --git a/result/DocBook/firstterm.example.1.xml b/result/DocBook/firstterm.example.1.xml
new file mode 100644
index 0000000..f7a101e
--- /dev/null
+++ b/result/DocBook/firstterm.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In an <firstterm>Object Oriented</firstterm> programming language,
+data and procedures (called <glossterm>methods</glossterm>) are
+bound together.
+</para>
diff --git a/result/DocBook/footnote.example.1 b/result/DocBook/footnote.example.1
new file mode 100644
index 0000000..4659998
--- /dev/null
+++ b/result/DocBook/footnote.example.1
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+An annual percentage rate (<abbrev>APR</abbrev>) of 13.9%<footnote><para>
+The prime rate, as published in the <citetitle>Wall Street
+Journal</citetitle> on the first business day of the month,
+plus 7.0%.
+</para></footnote>
+will be charged on all balances carried forward.
+</para>
diff --git a/result/DocBook/footnote.example.1.xml b/result/DocBook/footnote.example.1.xml
new file mode 100644
index 0000000..4659998
--- /dev/null
+++ b/result/DocBook/footnote.example.1.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+An annual percentage rate (<abbrev>APR</abbrev>) of 13.9%<footnote><para>
+The prime rate, as published in the <citetitle>Wall Street
+Journal</citetitle> on the first business day of the month,
+plus 7.0%.
+</para></footnote>
+will be charged on all balances carried forward.
+</para>
diff --git a/result/DocBook/footnoteref.example.1 b/result/DocBook/footnoteref.example.1
new file mode 100644
index 0000000..bd42c2d
--- /dev/null
+++ b/result/DocBook/footnoteref.example.1
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE informaltable PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<informaltable><tgroup cols="2"><tbody><row><entry>foo<footnote id="fnrex1a"><para>A meaningless
+word</para></footnote></entry><entry>3<footnote id="fnrex1b"><para>A meaningless
+number</para></footnote></entry></row><row><entry>bar<footnoteref linkend="fnrex1a"/></entry><entry>5<footnoteref linkend="fnrex1b"/></entry></row></tbody></tgroup></informaltable>
diff --git a/result/DocBook/footnoteref.example.1.xml b/result/DocBook/footnoteref.example.1.xml
new file mode 100644
index 0000000..bd42c2d
--- /dev/null
+++ b/result/DocBook/footnoteref.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE informaltable PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<informaltable><tgroup cols="2"><tbody><row><entry>foo<footnote id="fnrex1a"><para>A meaningless
+word</para></footnote></entry><entry>3<footnote id="fnrex1b"><para>A meaningless
+number</para></footnote></entry></row><row><entry>bar<footnoteref linkend="fnrex1a"/></entry><entry>5<footnoteref linkend="fnrex1b"/></entry></row></tbody></tgroup></informaltable>
diff --git a/result/DocBook/foreignphrase.example.1 b/result/DocBook/foreignphrase.example.1
new file mode 100644
index 0000000..5ad2643
--- /dev/null
+++ b/result/DocBook/foreignphrase.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Like so many others, it became a <foreignphrase>de facto</foreignphrase>
+standard.
+</para>
diff --git a/result/DocBook/foreignphrase.example.1.xml b/result/DocBook/foreignphrase.example.1.xml
new file mode 100644
index 0000000..5ad2643
--- /dev/null
+++ b/result/DocBook/foreignphrase.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Like so many others, it became a <foreignphrase>de facto</foreignphrase>
+standard.
+</para>
diff --git a/result/DocBook/formalpara.example.1 b/result/DocBook/formalpara.example.1
new file mode 100644
index 0000000..06157c4
--- /dev/null
+++ b/result/DocBook/formalpara.example.1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE formalpara PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<formalpara><title>This Paragraph Has a Title</title><para>
+This is a test. This is only a test. Had this been a real
+example, it would have made more sense. Or less.
+</para></formalpara>
diff --git a/result/DocBook/formalpara.example.1.xml b/result/DocBook/formalpara.example.1.xml
new file mode 100644
index 0000000..06157c4
--- /dev/null
+++ b/result/DocBook/formalpara.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE formalpara PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<formalpara><title>This Paragraph Has a Title</title><para>
+This is a test. This is only a test. Had this been a real
+example, it would have made more sense. Or less.
+</para></formalpara>
diff --git a/result/DocBook/funcdef.example.1 b/result/DocBook/funcdef.example.1
new file mode 100644
index 0000000..f611414
--- /dev/null
+++ b/result/DocBook/funcdef.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>int <function>rand</function></funcdef><void/></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcdef.example.1.xml b/result/DocBook/funcdef.example.1.xml
new file mode 100644
index 0000000..f611414
--- /dev/null
+++ b/result/DocBook/funcdef.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>int <function>rand</function></funcdef><void/></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcparams.example.1 b/result/DocBook/funcparams.example.1
new file mode 100644
index 0000000..fa930b2
--- /dev/null
+++ b/result/DocBook/funcparams.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>void <function>qsort</function></funcdef><paramdef>void *<parameter>dataptr</parameter>[]</paramdef><paramdef>int <parameter>left</parameter></paramdef><paramdef>int <parameter>right</parameter></paramdef><paramdef>int <parameter>(* comp)</parameter><funcparams>void *, void *</funcparams></paramdef></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcparams.example.1.xml b/result/DocBook/funcparams.example.1.xml
new file mode 100644
index 0000000..fa930b2
--- /dev/null
+++ b/result/DocBook/funcparams.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>void <function>qsort</function></funcdef><paramdef>void *<parameter>dataptr</parameter>[]</paramdef><paramdef>int <parameter>left</parameter></paramdef><paramdef>int <parameter>right</parameter></paramdef><paramdef>int <parameter>(* comp)</parameter><funcparams>void *, void *</funcparams></paramdef></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcsynopsis.example.1 b/result/DocBook/funcsynopsis.example.1
new file mode 100644
index 0000000..4baa3b8
--- /dev/null
+++ b/result/DocBook/funcsynopsis.example.1
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>int <function>max</function></funcdef><paramdef>int <parameter>int1</parameter></paramdef><paramdef>int <parameter>int2</parameter></paramdef></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcsynopsis.example.1.xml b/result/DocBook/funcsynopsis.example.1.xml
new file mode 100644
index 0000000..4baa3b8
--- /dev/null
+++ b/result/DocBook/funcsynopsis.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>int <function>max</function></funcdef><paramdef>int <parameter>int1</parameter></paramdef><paramdef>int <parameter>int2</parameter></paramdef></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcsynopsis.example.2 b/result/DocBook/funcsynopsis.example.2
new file mode 100644
index 0000000..c7ecb1b
--- /dev/null
+++ b/result/DocBook/funcsynopsis.example.2
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcsynopsisinfo>
+#include &lt;varargs.h&gt;</funcsynopsisinfo><funcprototype><funcdef>int <function>max</function></funcdef><varargs/></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcsynopsis.example.2.xml b/result/DocBook/funcsynopsis.example.2.xml
new file mode 100644
index 0000000..c7ecb1b
--- /dev/null
+++ b/result/DocBook/funcsynopsis.example.2.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcsynopsisinfo>
+#include &lt;varargs.h&gt;</funcsynopsisinfo><funcprototype><funcdef>int <function>max</function></funcdef><varargs/></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcsynopsis.example.3 b/result/DocBook/funcsynopsis.example.3
new file mode 100644
index 0000000..f611414
--- /dev/null
+++ b/result/DocBook/funcsynopsis.example.3
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>int <function>rand</function></funcdef><void/></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcsynopsis.example.3.xml b/result/DocBook/funcsynopsis.example.3.xml
new file mode 100644
index 0000000..f611414
--- /dev/null
+++ b/result/DocBook/funcsynopsis.example.3.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>int <function>rand</function></funcdef><void/></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcsynopsis.example.4 b/result/DocBook/funcsynopsis.example.4
new file mode 100644
index 0000000..fa930b2
--- /dev/null
+++ b/result/DocBook/funcsynopsis.example.4
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>void <function>qsort</function></funcdef><paramdef>void *<parameter>dataptr</parameter>[]</paramdef><paramdef>int <parameter>left</parameter></paramdef><paramdef>int <parameter>right</parameter></paramdef><paramdef>int <parameter>(* comp)</parameter><funcparams>void *, void *</funcparams></paramdef></funcprototype></funcsynopsis>
diff --git a/result/DocBook/funcsynopsis.example.4.xml b/result/DocBook/funcsynopsis.example.4.xml
new file mode 100644
index 0000000..fa930b2
--- /dev/null
+++ b/result/DocBook/funcsynopsis.example.4.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>void <function>qsort</function></funcdef><paramdef>void *<parameter>dataptr</parameter>[]</paramdef><paramdef>int <parameter>left</parameter></paramdef><paramdef>int <parameter>right</parameter></paramdef><paramdef>int <parameter>(* comp)</parameter><funcparams>void *, void *</funcparams></paramdef></funcprototype></funcsynopsis>
diff --git a/result/DocBook/glossary.example.1.xml b/result/DocBook/glossary.example.1.xml
new file mode 100644
index 0000000..1788ae0
--- /dev/null
+++ b/result/DocBook/glossary.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE glossary PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<glossary><title>Example Glossary</title><para>
+This is not a real glossary, it's just an example.
+</para><!-- ... --><glossdiv><title>E</title><glossentry id="xml"><glossterm>Extensible Markup Language</glossterm><acronym>XML</acronym><glossdef><para>Some reasonable definition here.</para><glossseealso otherterm="sgml"/></glossdef></glossentry></glossdiv><!-- ... --><glossdiv><title>S</title><glossentry><glossterm>SGML</glossterm><glosssee otherterm="sgml"/></glossentry><glossentry id="sgml"><glossterm>Standard Generalized
+ Markup Language</glossterm><acronym>SGML</acronym><abbrev>ISO 8879:1986</abbrev><glossdef><para>Some reasonable definition here.</para><glossseealso otherterm="xml"/></glossdef></glossentry></glossdiv></glossary>
diff --git a/result/DocBook/glosslist.example.1.xml b/result/DocBook/glosslist.example.1.xml
new file mode 100644
index 0000000..0648cb3
--- /dev/null
+++ b/result/DocBook/glosslist.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE glosslist PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<glosslist><glossentry><glossterm>C</glossterm><glossdef><para>
+A procedural programming language invented by K&amp;R.
+</para></glossdef></glossentry><glossentry><glossterm>Pascal</glossterm><glossdef><para>
+A procedural programming language invented by Niklaus Wirth.
+</para></glossdef></glossentry></glosslist>
diff --git a/result/DocBook/graphic.example.1.xml b/result/DocBook/graphic.example.1.xml
new file mode 100644
index 0000000..40606d3
--- /dev/null
+++ b/result/DocBook/graphic.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE figure PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<figure><title>Notre Dame Cathedral</title><graphic srccredit="Norman Walsh, 1998" fileref="figures/notredame"/></figure>
diff --git a/result/DocBook/graphicco.example.1.xml b/result/DocBook/graphicco.example.1.xml
new file mode 100644
index 0000000..65e6faf
--- /dev/null
+++ b/result/DocBook/graphicco.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE graphicco PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<graphicco><areaspec units="calspair"><areaset id="oneway" coords=""><area id="oneway1" coords="300 400"/><area id="oneway2" coords="325 340"/></areaset><area id="myhouse" coords="425 590"/></areaspec><graphic fileref="http://somemap.site.com/EARTH?USA?MA?AMHERST"/></graphicco>
diff --git a/result/DocBook/guibutton.example.1.xml b/result/DocBook/guibutton.example.1.xml
new file mode 100644
index 0000000..e410345
--- /dev/null
+++ b/result/DocBook/guibutton.example.1.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The exact text of the <guilabel>Legend</guilabel> and other labels on the
+graph is dependent upon the language of the current locale. Likewise,
+the text of the <guibutton>OK</guibutton> button and other buttons may vary.
+The <guiicon><inlinegraphic fileref="figures/legend"/></guiicon>
+icon and the other icons on the left side of the display may be
+configured by the local administrator, but they are not
+generally expected to vary from locale to locale.
+</para>
diff --git a/result/DocBook/guiicon.example.1.xml b/result/DocBook/guiicon.example.1.xml
new file mode 100644
index 0000000..e410345
--- /dev/null
+++ b/result/DocBook/guiicon.example.1.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The exact text of the <guilabel>Legend</guilabel> and other labels on the
+graph is dependent upon the language of the current locale. Likewise,
+the text of the <guibutton>OK</guibutton> button and other buttons may vary.
+The <guiicon><inlinegraphic fileref="figures/legend"/></guiicon>
+icon and the other icons on the left side of the display may be
+configured by the local administrator, but they are not
+generally expected to vary from locale to locale.
+</para>
diff --git a/result/DocBook/guilabel.example.1.xml b/result/DocBook/guilabel.example.1.xml
new file mode 100644
index 0000000..e410345
--- /dev/null
+++ b/result/DocBook/guilabel.example.1.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The exact text of the <guilabel>Legend</guilabel> and other labels on the
+graph is dependent upon the language of the current locale. Likewise,
+the text of the <guibutton>OK</guibutton> button and other buttons may vary.
+The <guiicon><inlinegraphic fileref="figures/legend"/></guiicon>
+icon and the other icons on the left side of the display may be
+configured by the local administrator, but they are not
+generally expected to vary from locale to locale.
+</para>
diff --git a/result/DocBook/guimenu.example.1.xml b/result/DocBook/guimenu.example.1.xml
new file mode 100644
index 0000000..96edc6c
--- /dev/null
+++ b/result/DocBook/guimenu.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+You can exit from GNU Emacs with the keyboard shortcut
+<keycombo><keysym>C-c</keysym><keysym>C-x</keysym></keycombo>
+or by selecting <guimenuitem>Exit Emacs</guimenuitem> from
+the <guimenu>Files</guimenu> menu.
+</para>
diff --git a/result/DocBook/guimenuitem.example.1.xml b/result/DocBook/guimenuitem.example.1.xml
new file mode 100644
index 0000000..96edc6c
--- /dev/null
+++ b/result/DocBook/guimenuitem.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+You can exit from GNU Emacs with the keyboard shortcut
+<keycombo><keysym>C-c</keysym><keysym>C-x</keysym></keycombo>
+or by selecting <guimenuitem>Exit Emacs</guimenuitem> from
+the <guimenu>Files</guimenu> menu.
+</para>
diff --git a/result/DocBook/guisubmenu.example.1.xml b/result/DocBook/guisubmenu.example.1.xml
new file mode 100644
index 0000000..f61637a
--- /dev/null
+++ b/result/DocBook/guisubmenu.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In GNU Emacs, the <guimenuitem>Print Buffer</guimenuitem> command is
+located off of the <guisubmenu>Print</guisubmenu> submenu of the
+<guimenu>Tools</guimenu> menu.
+</para>
diff --git a/result/DocBook/hardware.example.1.xml b/result/DocBook/hardware.example.1.xml
new file mode 100644
index 0000000..9b7745a
--- /dev/null
+++ b/result/DocBook/hardware.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <acronym>IRQ</acronym> of the <hardware>SCSI Controller</hardware>
+can be set to 7, 11, or 15. The factory default setting is 7.
+</para>
diff --git a/result/DocBook/highlights.example.1.xml b/result/DocBook/highlights.example.1.xml
new file mode 100644
index 0000000..680627d
--- /dev/null
+++ b/result/DocBook/highlights.example.1.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter><title>Example Chapter</title><highlights><para>
+This chapter will teach you
+<itemizedlist><listitem><para>
+How to disassemble an automobile.
+</para></listitem><listitem><para>
+How to properly carry the component pieces.
+</para></listitem><listitem><para>
+How to reassemble an automobile in a standard telephone booth.
+</para></listitem></itemizedlist></para></highlights><para>…</para></chapter>
diff --git a/result/DocBook/imageobject.example.1.xml b/result/DocBook/imageobject.example.1.xml
new file mode 100644
index 0000000..dab0cea
--- /dev/null
+++ b/result/DocBook/imageobject.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE mediaobject PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<mediaobject><imageobject><imagedata fileref="figures/eiffeltower.eps" format="eps"/></imageobject><imageobject><imagedata fileref="figures/eiffeltower.gif" format="gif"/></imageobject><textobject><phrase>The Eiffel Tower</phrase></textobject><caption><para>Designed by Gustave Eiffel in 1889, The Eiffel Tower is one of the
+most widely recognized buildings in the world.
+</para></caption></mediaobject>
diff --git a/result/DocBook/important.example.1.xml b/result/DocBook/important.example.1.xml
new file mode 100644
index 0000000..05d8d54
--- /dev/null
+++ b/result/DocBook/important.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE important PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<important><para>
+No user-servicable parts inside. Breaking this seal voids all warranties.
+</para></important>
diff --git a/result/DocBook/index.example.1.xml b/result/DocBook/index.example.1.xml
new file mode 100644
index 0000000..8bcaec2
--- /dev/null
+++ b/result/DocBook/index.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE index PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<index><title>Index</title><indexdiv><title>D</title><indexentry><primaryie>database (bibliographic), 253, 255</primaryie><secondaryie>structure, 255</secondaryie><secondaryie>tools, 259</secondaryie></indexentry><indexentry><primaryie>dates (language specific), 179</primaryie></indexentry><indexentry><primaryie>DC fonts, <emphasis>172</emphasis>, 177</primaryie><secondaryie>Math fonts, 177</secondaryie></indexentry></indexdiv></index>
diff --git a/result/DocBook/index.example.2.xml b/result/DocBook/index.example.2.xml
new file mode 100644
index 0000000..6dad435
--- /dev/null
+++ b/result/DocBook/index.example.2.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE index PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<index><indexentry><primaryie>Example</primaryie><secondaryie>Chapter</secondaryie><seeie>Example Chapter</seeie></indexentry><indexentry><primaryie>Example Chapter, 35-48</primaryie><seealsoie>Examples</seealsoie></indexentry><indexentry><primaryie>Examples, 18, 36, 72-133</primaryie></indexentry></index>
diff --git a/result/DocBook/indexterm.example.1.xml b/result/DocBook/indexterm.example.1.xml
new file mode 100644
index 0000000..0954e42
--- /dev/null
+++ b/result/DocBook/indexterm.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The Tiger<indexterm><primary>Big Cats</primary><secondary>Tigers</secondary></indexterm>
+is a very large cat indeed.
+</para>
diff --git a/result/DocBook/indexterm.example.2.xml b/result/DocBook/indexterm.example.2.xml
new file mode 100644
index 0000000..0d65e59
--- /dev/null
+++ b/result/DocBook/indexterm.example.2.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter><title>Example Chapter</title><!-- index term for "Example Chapter" is a span --><indexterm id="idxexchap" class="startofrange"><primary>Example Chapter</primary></indexterm><!-- index term for "Example Chapter" also cross references the
+ "Examples" entry in the index --><indexterm><primary>Example Chapter</primary><seealso>Examples</seealso></indexterm><!-- index term for "Chapter, Example" refers the reader to the entry
+ under which the index term is actually listed, "Example Chapter" --><indexterm><primary>Chapter</primary><secondary>Example</secondary><see>Example Chapter</see></indexterm><!-- other content --><!-- index term, end of "Example Chapter" span --><indexterm startref="idxexchap" class="endofrange"><para>some content</para></indexterm></chapter>
diff --git a/result/DocBook/indexterm.example.3.xml b/result/DocBook/indexterm.example.3.xml
new file mode 100644
index 0000000..84ec45b
--- /dev/null
+++ b/result/DocBook/indexterm.example.3.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter><title>Example Chapter</title><indexterm zone="a1"><primary>Network Configuration</primary></indexterm><!-- other content here --><sect1 id="a1"><title>Configuring Your Network</title><para>…</para></sect1></chapter>
diff --git a/result/DocBook/informalequation.example.1.xml b/result/DocBook/informalequation.example.1.xml
new file mode 100644
index 0000000..43d40d0
--- /dev/null
+++ b/result/DocBook/informalequation.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The equation
+<informalequation><alt>e^(pi*i) + 1 = 0</alt><graphic fileref="figures/epi10"/></informalequation>
+is delightful because it joins together five of the most
+important mathematical constants.
+</para>
diff --git a/result/DocBook/informalexample.example.1.xml b/result/DocBook/informalexample.example.1.xml
new file mode 100644
index 0000000..8cdeaba
--- /dev/null
+++ b/result/DocBook/informalexample.example.1.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE informalexample PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<informalexample><programlisting>
+sub print_content_model {
+ my($self) = shift;
+ local($_) = shift;
+ local(*FILE) = shift;
+
+ my(@cm) = $self-&gt;format_content_model2($_);
+ foreach $_ (@cm) {
+ print FILE $self-&gt;make_links($_, 1, 1), &quot;\n&quot;;
+ }
+}
+</programlisting></informalexample>
diff --git a/result/DocBook/informalfigure.example.1.xml b/result/DocBook/informalfigure.example.1.xml
new file mode 100644
index 0000000..a4d9fd8
--- /dev/null
+++ b/result/DocBook/informalfigure.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE informalfigure PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<informalfigure><mediaobject><imageobject><imagedata fileref="watarun.eps" srccredit="Norman Walsh, 1998"/></imageobject><textobject><phrase>Wat Arun</phrase></textobject><caption><para>Wat Arun, Temple of the Dawn, on the Chao Phraya River
+in Bangkok,
+Thailand. In April, 1998, Wat Arun was in the midst of renovation.</para></caption></mediaobject></informalfigure>
diff --git a/result/DocBook/informaltable.example.1.xml b/result/DocBook/informaltable.example.1.xml
new file mode 100644
index 0000000..5909560
--- /dev/null
+++ b/result/DocBook/informaltable.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE informaltable PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<informaltable frame="none"><tgroup cols="2"><colspec colwidth="0.5in"/><colspec colwidth="0.5in"/><tbody><row><entry>1</entry><entry>1</entry></row><row><entry>2</entry><entry>4</entry></row><row><entry>3</entry><entry>9</entry></row></tbody></tgroup></informaltable>
diff --git a/result/DocBook/inlineequation.example.1.xml b/result/DocBook/inlineequation.example.1.xml
new file mode 100644
index 0000000..38716ca
--- /dev/null
+++ b/result/DocBook/inlineequation.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Einstein's theory of relativity includes one of the most
+widely recognized formulas in the world:
+<inlineequation><alt>e=mc^2</alt><graphic fileref="figures/emc2"/></inlineequation></para>
diff --git a/result/DocBook/inlinemediaobject.example.1.xml b/result/DocBook/inlinemediaobject.example.1.xml
new file mode 100644
index 0000000..80b05f6
--- /dev/null
+++ b/result/DocBook/inlinemediaobject.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Einstien's most famous equation,
+<inlineequation><inlinemediaobject><imageobject><imagedata fileref="figures/emc2.gif"/></imageobject><textobject><phrase>E=mc<superscript>2</superscript></phrase></textobject></inlinemediaobject></inlineequation>, expresses the relationship between matter
+and energy.
+</para>
diff --git a/result/DocBook/itemizedlist.example.1.xml b/result/DocBook/itemizedlist.example.1.xml
new file mode 100644
index 0000000..db43c81
--- /dev/null
+++ b/result/DocBook/itemizedlist.example.1.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE itemizedlist PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<itemizedlist mark="opencircle"><listitem><para>
+TeX and LaTeX
+</para></listitem><listitem override="bullet"><para>
+Troff
+</para></listitem><listitem><para>
+Lout
+</para></listitem></itemizedlist>
diff --git a/result/DocBook/keycap.example.1.xml b/result/DocBook/keycap.example.1.xml
new file mode 100644
index 0000000..f3d2a3e
--- /dev/null
+++ b/result/DocBook/keycap.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <keycap>F1</keycap> key on an IBM PC keyboard generates the
+scan code <keycode>0x3B</keycode> when pressed. This value
+is defined as <keysym>KEY_F1</keysym> in
+<filename class="headerfile">keyboard.h</filename>.
+</para>
diff --git a/result/DocBook/keycode.example.1.xml b/result/DocBook/keycode.example.1.xml
new file mode 100644
index 0000000..f3d2a3e
--- /dev/null
+++ b/result/DocBook/keycode.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <keycap>F1</keycap> key on an IBM PC keyboard generates the
+scan code <keycode>0x3B</keycode> when pressed. This value
+is defined as <keysym>KEY_F1</keysym> in
+<filename class="headerfile">keyboard.h</filename>.
+</para>
diff --git a/result/DocBook/keycombo.example.1.xml b/result/DocBook/keycombo.example.1.xml
new file mode 100644
index 0000000..92b9481
--- /dev/null
+++ b/result/DocBook/keycombo.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+To move a highlighted region, use
+<keycombo action="simul"><keycap>Shift</keycap><mousebutton>Button1</mousebutton></keycombo>
+and drag the text to the new location.
+</para>
diff --git a/result/DocBook/keysym.example.1.xml b/result/DocBook/keysym.example.1.xml
new file mode 100644
index 0000000..f3d2a3e
--- /dev/null
+++ b/result/DocBook/keysym.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <keycap>F1</keycap> key on an IBM PC keyboard generates the
+scan code <keycode>0x3B</keycode> when pressed. This value
+is defined as <keysym>KEY_F1</keysym> in
+<filename class="headerfile">keyboard.h</filename>.
+</para>
diff --git a/result/DocBook/lineannotation.example.1.xml b/result/DocBook/lineannotation.example.1.xml
new file mode 100644
index 0000000..f575464
--- /dev/null
+++ b/result/DocBook/lineannotation.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE screen PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<screen>
+&lt;entry&gt; <lineannotation>Error, cannot have a line break before a block element</lineannotation>
+&lt;para&gt;
+A paragraph of text.
+&lt;/para&gt;&lt;/entry&gt;
+</screen>
diff --git a/result/DocBook/link.example.1.xml b/result/DocBook/link.example.1.xml
new file mode 100644
index 0000000..26a4431
--- /dev/null
+++ b/result/DocBook/link.example.1.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1><title>Examples of <sgmltag>Link</sgmltag></title><para>
+In this sentence <link linkend="nextsect">this</link> word is
+hot and points to the following section.
+</para><para>
+There is also a link to the section called
+<quote><link linkend="nextsect" endterm="nextsect.title"/></quote>
+in this sentence.
+</para><sect2 id="nextsect"><title id="nextsect.title">A Subsection</title><para>
+This section only exists to be the target of a couple of links.
+</para></sect2></sect1>
diff --git a/result/DocBook/literal.example.1.xml b/result/DocBook/literal.example.1.xml
new file mode 100644
index 0000000..3868af8
--- /dev/null
+++ b/result/DocBook/literal.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>There are several undocumented settings for <varname>debug</varname>,
+among them <literal>3.27</literal> to enable a complete trace and
+<literal>3.8</literal> to debug the spell checker. For a complete
+list of the possible settings,
+see <filename class="headerfile">edit/debug.h</filename>.</para>
diff --git a/result/DocBook/literallayout.example.1.xml b/result/DocBook/literallayout.example.1.xml
new file mode 100644
index 0000000..cf0a68e
--- /dev/null
+++ b/result/DocBook/literallayout.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE blockquote PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<blockquote><attribution>William Shakespeare, <citetitle>Henry V</citetitle></attribution><literallayout>
+ O, for a muse of fire, that would ascend
+The brightest heaven of invention!
+A kingdom for a stage, princes to act,
+And monarchs to behold the swelling scene!
+</literallayout></blockquote>
diff --git a/result/DocBook/lot.example.1.xml b/result/DocBook/lot.example.1.xml
new file mode 100644
index 0000000..efc34be
--- /dev/null
+++ b/result/DocBook/lot.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE lot PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<lot><title>List of Figures</title><lotentry pagenum="5">The Letters “g†and “hâ€
+ inside their boxes</lotentry><lotentry pagenum="15">Example figure produced by both TeX and
+ troff</lotentry><!-- ... --></lot>
diff --git a/result/DocBook/manvolnum.example.1.xml b/result/DocBook/manvolnum.example.1.xml
new file mode 100644
index 0000000..7b79b66
--- /dev/null
+++ b/result/DocBook/manvolnum.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+For a further description of print formats, consult the
+<citerefentry><refentrytitle>printf</refentrytitle><manvolnum>3S</manvolnum></citerefentry> manual page.
+</para>
diff --git a/result/DocBook/markup.example.1.xml b/result/DocBook/markup.example.1.xml
new file mode 100644
index 0000000..8192ebf
--- /dev/null
+++ b/result/DocBook/markup.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+A presentation system using TeX as a back end might allow you
+to insert inline markup, such as <markup role="tex">$x^2$</markup>,
+using TeX syntax directly.
+</para>
diff --git a/result/DocBook/medialabel.example.1.xml b/result/DocBook/medialabel.example.1.xml
new file mode 100644
index 0000000..003e32a
--- /dev/null
+++ b/result/DocBook/medialabel.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+To install <application>The Great Foo</application>, insert the disk
+labelled <medialabel>TGF Setup 1</medialabel> and run
+<command>setup</command>.
+</para>
diff --git a/result/DocBook/medialabel.example.2.xml b/result/DocBook/medialabel.example.2.xml
new file mode 100644
index 0000000..fd6267d
--- /dev/null
+++ b/result/DocBook/medialabel.example.2.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The weekly incremental backup tape is labelled
+<medialabel>Backup <replaceable>nn</replaceable></medialabel>, where
+<replaceable>nn</replaceable> is the week number.
+</para>
diff --git a/result/DocBook/mediaobjectco.example.1.xml b/result/DocBook/mediaobjectco.example.1.xml
new file mode 100644
index 0000000..47947f8
--- /dev/null
+++ b/result/DocBook/mediaobjectco.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE mediaobjectco PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<mediaobjectco><imageobjectco><areaspec units="calspair"><areaset id="oneway" coords=""><area id="oneway1" coords="300 400"/><area id="oneway2" coords="325 340"/></areaset><area id="myhouse" coords="425 590"/></areaspec><imageobject><imagedata fileref="http://somemap.site.com/EARTH?USA?MA?01007"/></imageobject></imageobjectco></mediaobjectco>
diff --git a/result/DocBook/menuchoice.example.1.xml b/result/DocBook/menuchoice.example.1.xml
new file mode 100644
index 0000000..5336cc9
--- /dev/null
+++ b/result/DocBook/menuchoice.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+You can exit from GNU Emacs with
+<menuchoice><shortcut><keycombo><keysym>C-x</keysym><keysym>C-c</keysym></keycombo></shortcut><guimenu>Files</guimenu><guimenuitem>Exit Emacs</guimenuitem></menuchoice>.
+</para>
diff --git a/result/DocBook/mousebutton.example.1.xml b/result/DocBook/mousebutton.example.1.xml
new file mode 100644
index 0000000..e1c5a2a
--- /dev/null
+++ b/result/DocBook/mousebutton.example.1.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Select a region of text by dragging the mouse pointer with the
+<mousebutton>left</mousebutton> mouse button depressed. Copy the
+selected text to a new location by placing the mouse pointer at the
+desired position and pressing the <mousebutton>middle</mousebutton>
+button.
+</para>
diff --git a/result/DocBook/msgset.example.1.xml b/result/DocBook/msgset.example.1.xml
new file mode 100644
index 0000000..9e3cb1c
--- /dev/null
+++ b/result/DocBook/msgset.example.1.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE msgset PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<msgset><msgentry><msg><msgmain><msgtext><para>Record failed CRC</para></msgtext></msgmain><msgsub><msgtext><para>Record <replaceable>n</replaceable>
+ in <replaceable>database</replaceable></para></msgtext></msgsub><msgrel><msgtext><para>File read error on
+ <replaceable>database</replaceable></para></msgtext></msgrel><msgrel><msgtext><para>Panic! Corrupt record!</para></msgtext></msgrel></msg><msginfo><msglevel>severe</msglevel><msgorig>server</msgorig><msgaud>all</msgaud></msginfo><msgexplan><para>
+ Indicates that some sort of error occurred while attempting to load
+ a record from the database. Retry. If failure persists,
+ contact the database administrator.
+ </para></msgexplan></msgentry><!-- more entries --></msgset>
diff --git a/result/DocBook/note.example.1.xml b/result/DocBook/note.example.1.xml
new file mode 100644
index 0000000..1d96bc8
--- /dev/null
+++ b/result/DocBook/note.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE note PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<note><title>Upcoming Changes</title><para>
+Future versions of this feature may not be backward-compatible.
+Consider implementing the revised interface now.
+</para></note>
diff --git a/result/DocBook/olink.example.1.xml b/result/DocBook/olink.example.1.xml
new file mode 100644
index 0000000..57bbf21
--- /dev/null
+++ b/result/DocBook/olink.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter><docinfo><modespec id="s1query">query in sect*, title return link text title</modespec></docinfo><title>Printing</title><para>
+Blah, blah, blah.
+</para><sect1><title>See Also</title><para>
+For more information <olink targetdocent="refbook" linkmode="s1query" localinfo="print or printing">about printing</olink>, consult
+the <ulink url="refbook.sgm">reference manual</ulink>.
+</para></sect1></chapter>
diff --git a/result/DocBook/option.example.1.xml b/result/DocBook/option.example.1.xml
new file mode 100644
index 0000000..9350970
--- /dev/null
+++ b/result/DocBook/option.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <option>-a</option> option on the <acronym>UNIX</acronym><command>ls</command> command or the <option>/r</option> option on the
+<acronym>DOS</acronym><command>attrib</command>
+command, for example.
+</para>
diff --git a/result/DocBook/optional.example.1.xml b/result/DocBook/optional.example.1.xml
new file mode 100644
index 0000000..51ddf8a
--- /dev/null
+++ b/result/DocBook/optional.example.1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE synopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<synopsis>
+ls <optional><option>-abcCdfFgilLmnopqrRstux1</option></optional><optional>names</optional></synopsis>
diff --git a/result/DocBook/orderedlist.example.1.xml b/result/DocBook/orderedlist.example.1.xml
new file mode 100644
index 0000000..5aaaf8f
--- /dev/null
+++ b/result/DocBook/orderedlist.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE orderedlist PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<orderedlist numeration="lowerroman"><listitem><para>One</para></listitem><listitem><para>Two</para></listitem><listitem><para>Three</para></listitem><listitem><para>Four</para></listitem></orderedlist>
diff --git a/result/DocBook/othercredit.example.1.xml b/result/DocBook/othercredit.example.1.xml
new file mode 100644
index 0000000..e28bae3
--- /dev/null
+++ b/result/DocBook/othercredit.example.1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE artheader PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<artheader><title>Something Snappy</title><author><firstname>Norman</firstname><surname>Walsh</surname></author><othercredit><firstname>John</firstname><surname>Doe</surname><contrib>Extensive review and rough drafts of Section 1.3, 1.4, and 1.5
+ </contrib></othercredit><pubsnumber>5</pubsnumber></artheader>
diff --git a/result/DocBook/para.example.1.xml b/result/DocBook/para.example.1.xml
new file mode 100644
index 0000000..2f6e6c2
--- /dev/null
+++ b/result/DocBook/para.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The component suffered from three failings:
+<itemizedlist><listitem><para>It was slow</para></listitem><listitem><para>It ran hot</para></listitem><listitem><para>It didn't actually work</para></listitem></itemizedlist>
+Of these three, the last was probably the most important.
+</para>
diff --git a/result/DocBook/para.example.2.xml b/result/DocBook/para.example.2.xml
new file mode 100644
index 0000000..baaf03e
--- /dev/null
+++ b/result/DocBook/para.example.2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE formalpara PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<formalpara><title>A Test</title><para>
+This is a test. This is only a test. Had this been a real
+example, it would have made more sense.
+</para></formalpara>
diff --git a/result/DocBook/para.example.3.xml b/result/DocBook/para.example.3.xml
new file mode 100644
index 0000000..7e73763
--- /dev/null
+++ b/result/DocBook/para.example.3.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE simpara PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<simpara>
+Just the text, ma'am.
+</simpara>
diff --git a/result/DocBook/paramdef.example.1.xml b/result/DocBook/paramdef.example.1.xml
new file mode 100644
index 0000000..4baa3b8
--- /dev/null
+++ b/result/DocBook/paramdef.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcprototype><funcdef>int <function>max</function></funcdef><paramdef>int <parameter>int1</parameter></paramdef><paramdef>int <parameter>int2</parameter></paramdef></funcprototype></funcsynopsis>
diff --git a/result/DocBook/parameter.example.1.xml b/result/DocBook/parameter.example.1.xml
new file mode 100644
index 0000000..69872ad
--- /dev/null
+++ b/result/DocBook/parameter.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Using the <parameter class="command">/w</parameter> parameter on the
+DOS <command>dir</command> command prints a wide directory listing.
+</para>
diff --git a/result/DocBook/phrase.example.1.xml b/result/DocBook/phrase.example.1.xml
new file mode 100644
index 0000000..bdcbe97
--- /dev/null
+++ b/result/DocBook/phrase.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Effectivity attributes can be used to keep track of modifications
+to a document <phrase revisionflag="deleted">at the word or
+sentence level</phrase><phrase revisionflag="added"> as long as the number
+and complexity of changes is not too high</phrase>.
+</para>
diff --git a/result/DocBook/printhistory.example.1.xml b/result/DocBook/printhistory.example.1.xml
new file mode 100644
index 0000000..936badd
--- /dev/null
+++ b/result/DocBook/printhistory.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE printhistory PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<printhistory><para>
+September, 1996 First Printing
+</para></printhistory>
diff --git a/result/DocBook/procedure.example.1.xml b/result/DocBook/procedure.example.1.xml
new file mode 100644
index 0000000..74d76e7
--- /dev/null
+++ b/result/DocBook/procedure.example.1.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE procedure PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<procedure><title>An Example Procedure</title><step><para>
+ A Step
+ </para></step><step><para>
+ Another Step
+ </para><substeps><step><para>
+ Substeps can be nested indefinitely deep.
+ </para></step></substeps></step><step><para>
+ A Final Step
+ </para></step></procedure>
diff --git a/result/DocBook/productname.example.1.xml b/result/DocBook/productname.example.1.xml
new file mode 100644
index 0000000..b0edcf6
--- /dev/null
+++ b/result/DocBook/productname.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para><productname class="trade">Frobozz</productname>: it's not
+just for breakfast anymore.
+</para>
diff --git a/result/DocBook/productname.example.2.xml b/result/DocBook/productname.example.2.xml
new file mode 100644
index 0000000..d517446
--- /dev/null
+++ b/result/DocBook/productname.example.2.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para><trademark>Frobozz</trademark>: it's not
+just for breakfast anymore.
+</para>
diff --git a/result/DocBook/productnumber.example.1.xml b/result/DocBook/productnumber.example.1.xml
new file mode 100644
index 0000000..094ebc5
--- /dev/null
+++ b/result/DocBook/productnumber.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+You an order <citetitle>DocBook: The Definitive Guide</citetitle> directly
+from O'Reilly &amp; Associates. Order product number
+<productnumber>5807</productnumber> by phone or
+<ulink url="http://www.oreilly.com/">over the web</ulink>.
+</para>
diff --git a/result/DocBook/programlistingco.example.1.xml b/result/DocBook/programlistingco.example.1.xml
new file mode 100644
index 0000000..56aaba5
--- /dev/null
+++ b/result/DocBook/programlistingco.example.1.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE programlistingco PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<programlistingco><areaspec><areaset id="ex.plco.const" coords=""><area id="ex.plco.c1" coords="4"/><area id="ex.plco.c2" coords="8"/></areaset><area id="ex.plco.ret" coords="12"/><area id="ex.plco.dest" coords="12"/></areaspec><programlisting>
+sub do_nothing_useful {
+ my($a, $b, $c);
+
+ $a = new A;
+
+ $a-&gt;does_nothing_either();
+
+ $b = new B;
+
+ $c = &quot;frog&quot;;
+
+ return ($a, $c);
+}
+</programlisting><calloutlist><callout arearefs="ex.plco.const"><para>
+These are calls to the constructor <function>new</function> in the object
+classes.
+</para></callout><callout arearefs="ex.plco.ret"><para>
+This function returns a two-element list.
+</para></callout><callout arearefs="ex.plco.dest"><para>
+The <emphasis>destructor</emphasis> (<function>DESTROY</function>) for
+the object <literal>$b</literal> will be called automatically for this
+object since there can be no other references to it outside this function.
+</para></callout></calloutlist></programlistingco>
diff --git a/result/DocBook/prompt.example.1.xml b/result/DocBook/prompt.example.1.xml
new file mode 100644
index 0000000..14b703b
--- /dev/null
+++ b/result/DocBook/prompt.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Enter your user name when the system presents the
+<prompt>login:</prompt> prompt.
+</para>
diff --git a/result/DocBook/property.example.1.xml b/result/DocBook/property.example.1.xml
new file mode 100644
index 0000000..5435b3e
--- /dev/null
+++ b/result/DocBook/property.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+When Emacs is running under X Windows, the <property>borderWidth</property>
+resource controls the width of the external border.
+</para>
diff --git a/result/DocBook/publisher.example.1.xml b/result/DocBook/publisher.example.1.xml
new file mode 100644
index 0000000..90eeb56
--- /dev/null
+++ b/result/DocBook/publisher.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE publisher PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<publisher><publishername>O'Reilly &amp; Associates, Inc.</publishername><address><street>101 ...</street>
+ ...
+ </address></publisher>
diff --git a/result/DocBook/qandaset.example.1.xml b/result/DocBook/qandaset.example.1.xml
new file mode 100644
index 0000000..d44b69e
--- /dev/null
+++ b/result/DocBook/qandaset.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE qandaset PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<qandaset defaultlabel="qanda"><qandaentry><question><para>
+To be, or not to be?
+</para></question><answer><para>
+That is the question.
+</para></answer></qandaentry></qandaset>
diff --git a/result/DocBook/quote.example.1.xml b/result/DocBook/quote.example.1.xml
new file mode 100644
index 0000000..f2a12ba
--- /dev/null
+++ b/result/DocBook/quote.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+This software is provided <quote>as is</quote>, without expressed
+or implied warranty.
+</para>
diff --git a/result/DocBook/refentry.example.1.xml b/result/DocBook/refentry.example.1.xml
new file mode 100644
index 0000000..ebe84fc
--- /dev/null
+++ b/result/DocBook/refentry.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<refentry id="ls"><refmeta><refentrytitle>ls</refentrytitle><manvolnum>1</manvolnum></refmeta><refnamediv><refname>ls</refname><refpurpose>list contents of a directory</refpurpose></refnamediv><refsynopsisdiv><cmdsynopsis><command>/usr/bin/ls</command><arg choice="opt"><option>aAbcCdfFgilLmnopqrRstux1</option></arg><arg choice="opt" rep="repeat">file</arg></cmdsynopsis><refsect1><title>Description</title><para>
+For each file that is a directory, <command>ls</command> lists the contents of
+the directory; for each file that is an ordinary file, <command>ls</command>
+repeats its name and any other information requested.
+</para><para>…</para></refsect1></refsynopsisdiv></refentry>
diff --git a/result/DocBook/refentry.example.2.xml b/result/DocBook/refentry.example.2.xml
new file mode 100644
index 0000000..112eb1b
--- /dev/null
+++ b/result/DocBook/refentry.example.2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<refentry id="printf"><refmeta><refentrytitle>printf</refentrytitle><manvolnum>3S</manvolnum></refmeta><refnamediv><refname>printf</refname><refname>fprintf</refname><refname>sprintf</refname><refpurpose>print formatted output</refpurpose></refnamediv><refsynopsisdiv><funcsynopsis><funcsynopsisinfo>
+#include &lt;stdio.h&gt;</funcsynopsisinfo><funcprototype><funcdef>int <function>printf</function></funcdef><paramdef>const char *<parameter>format</parameter></paramdef><paramdef>...</paramdef></funcprototype><funcprototype><funcdef>int <function>fprintf</function></funcdef><paramdef>FILE *<parameter>strm</parameter></paramdef><paramdef>const char *<parameter>format</parameter></paramdef><paramdef>...</paramdef></funcprototype><funcprototype><funcdef>int <function>sprintf</function></funcdef><paramdef>char *<parameter>s</parameter></paramdef><paramdef>const char *<parameter>format</parameter></paramdef><paramdef>...</paramdef></funcprototype></funcsynopsis></refsynopsisdiv><refsect1><title>Description</title><para><function>printf</function> places output on the standard
+output stream stdout.
+</para><para>…</para></refsect1></refentry>
diff --git a/result/DocBook/refentry.example.3.xml b/result/DocBook/refentry.example.3.xml
new file mode 100644
index 0000000..299bdbe
--- /dev/null
+++ b/result/DocBook/refentry.example.3.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<refentry id="iovec"><refmeta><refentrytitle>iovec</refentrytitle><manvolnum>9S</manvolnum></refmeta><refnamediv><refname>iovec</refname><refpurpose>data storage structure for I/O using uio</refpurpose></refnamediv><refsynopsisdiv><synopsis>
+#include &lt;sys/uio.h&gt;</synopsis></refsynopsisdiv><refsect1><title>Interface Level</title><para>
+Architecture independent level 1 (DDI/DKI).
+</para></refsect1><refsect1><title>Description</title><para>
+An <structname>iovec</structname> structure describes a data
+storage area for transfer in a
+<citerefentry><refentrytitle>uio</refentrytitle><manvolnum>9S</manvolnum></citerefentry>
+structure. Conceptually,
+it may be thought of as a base address and length specification.
+</para></refsect1><refsect1><title>Structure Members</title><programlisting>
+ caddr_t iov_base; /* base address of the data storage area */
+ /* represented by the iovec structure */
+ int iov_len; /* size of the data storage area in bytes */
+</programlisting><para>…</para></refsect1></refentry>
diff --git a/result/DocBook/returnvalue.example.1.xml b/result/DocBook/returnvalue.example.1.xml
new file mode 100644
index 0000000..3ae4f1b
--- /dev/null
+++ b/result/DocBook/returnvalue.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <function>open</function> function returns <returnvalue>2</returnvalue>
+(<errorname>ENOFILE</errorname>) if the file does not exist.
+</para>
diff --git a/result/DocBook/revhistory.example.1.xml b/result/DocBook/revhistory.example.1.xml
new file mode 100644
index 0000000..c5c5f0e
--- /dev/null
+++ b/result/DocBook/revhistory.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE revhistory PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<revhistory><revision><revnumber>0.91</revnumber><date>11 Dec 1996</date><authorinitials>ndw</authorinitials><revremark>Bug fixes</revremark></revision><revision><revnumber>0.90</revnumber><date>30 Nov 1996</date><authorinitials>ndw</authorinitials><revremark>First beta release</revremark></revision></revhistory>
diff --git a/result/DocBook/screen.example.1.xml b/result/DocBook/screen.example.1.xml
new file mode 100644
index 0000000..c903902
--- /dev/null
+++ b/result/DocBook/screen.example.1.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE screen PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<screen>
+ Volume in drive C is SYSTEM Serial number is 2350:717C
+ Directory of C:\
+
+10/17/97 9:04 &lt;DIR&gt; bin
+10/16/97 14:11 &lt;DIR&gt; DOS
+10/16/97 14:40 &lt;DIR&gt; Program Files
+10/16/97 14:46 &lt;DIR&gt; TEMP
+10/17/97 9:04 &lt;DIR&gt; tmp
+10/16/97 14:37 &lt;DIR&gt; WINNT
+10/16/97 14:25 119 AUTOEXEC.BAT
+ 2/13/94 6:21 54,619 COMMAND.COM
+10/16/97 14:25 115 CONFIG.SYS
+11/16/97 17:17 61,865,984 pagefile.sys
+ 2/13/94 6:21 9,349 WINA20.386
+</screen>
diff --git a/result/DocBook/screenco.example.1.xml b/result/DocBook/screenco.example.1.xml
new file mode 100644
index 0000000..18a99cf
--- /dev/null
+++ b/result/DocBook/screenco.example.1.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE informalexample PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<informalexample><screen>
+ Volume in drive C is SYSTEM Serial number is 2350:717C
+ Directory of C:\
+
+10/17/97 9:04 &lt;DIR&gt; bin
+10/16/97 14:11 &lt;DIR&gt; DOS <co id="dos"/>
+10/16/97 14:40 &lt;DIR&gt; Program Files
+10/16/97 14:46 &lt;DIR&gt; TEMP
+10/17/97 9:04 &lt;DIR&gt; tmp
+10/16/97 14:37 &lt;DIR&gt; WINNT
+10/16/97 14:25 119 AUTOEXEC.BAT <co id="autoexec.bat"/>
+ 2/13/94 6:21 54,619 COMMAND.COM <co id="command.com"/>
+10/16/97 14:25 115 CONFIG.SYS <co id="config.sys"/>
+11/16/97 17:17 61,865,984 pagefile.sys
+ 2/13/94 6:21 9,349 WINA20.386 <co id="wina20.386"/></screen><calloutlist><callout arearefs="dos"><para>
+This directory holds <trademark>MS-DOS</trademark>, the
+operating system that was installed before <trademark>Windows
+NT</trademark>.
+</para></callout><callout arearefs="autoexec.bat command.com config.sys"><para>
+System startup code for DOS.
+</para></callout><callout arearefs="wina20.386"><para>
+Some sort of <trademark>Windows 3.1</trademark> hack for some 386 processors,
+as I recall.
+</para></callout></calloutlist></informalexample>
diff --git a/result/DocBook/screenshot.example.1.xml b/result/DocBook/screenshot.example.1.xml
new file mode 100644
index 0000000..79a07f1
--- /dev/null
+++ b/result/DocBook/screenshot.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE screenshot PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<screenshot><screeninfo>640x480x256</screeninfo><graphic fileref="copilot.gif"/></screenshot>
diff --git a/result/DocBook/sect1info.example.1.xml b/result/DocBook/sect1info.example.1.xml
new file mode 100644
index 0000000..b9cb7d4
--- /dev/null
+++ b/result/DocBook/sect1info.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1><sect1info><legalnotice><para>In the public domain.</para></legalnotice><title>Something Pithy</title><subtitle>How I Made Up a Silly Example</subtitle></sect1info><title>Something Pithy</title><para>
+Content.
+</para></sect1>
diff --git a/result/DocBook/section.example.1.xml b/result/DocBook/section.example.1.xml
new file mode 100644
index 0000000..207eb19
--- /dev/null
+++ b/result/DocBook/section.example.1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter><title>Test Chapter</title><para>This chapter uses recursive sections.</para><section><sectioninfo><abstract><para>A trivial example of recursive sections.</para></abstract></sectioninfo><title>Like a Sect1</title><subtitle>Or How I Learned to Let Go of Enumeration
+and Love to Recurse</subtitle><para>This section is like a Sect1.</para><section><title>Like a Sect2</title><para>This section is like a Sect2.</para><section><title>Like a Sect3</title><para>This section is like a Sect3.</para><section><title>Like a Sect4</title><para>This section is like a Sect4.</para><section><title>Like a Sect5</title><para>This section is like a Sect5.</para><section><title>Would be like a Sect6</title><para>This section would be like a Sect6, if there was one.</para><section><title>Would be like a Sect7</title><para>This section would be like a Sect7, if there was one.</para></section></section></section></section></section></section></section></chapter>
diff --git a/result/DocBook/segmentedlist.example.1.xml b/result/DocBook/segmentedlist.example.1.xml
new file mode 100644
index 0000000..e64fb40
--- /dev/null
+++ b/result/DocBook/segmentedlist.example.1.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The capitals of the states of the United States of America are:
+
+<segmentedlist><title>State Capitals</title><segtitle>State</segtitle><segtitle>Capital</segtitle><seglistitem><seg>Alabama</seg><seg>Montgomery</seg></seglistitem><seglistitem><seg>Alaska</seg><seg>Anchorage</seg></seglistitem><seglistitem><seg>Arkansas</seg><seg>Little Rock</seg></seglistitem></segmentedlist>
+
+…
+</para>
diff --git a/result/DocBook/seriesvolnums.example.1.xml b/result/DocBook/seriesvolnums.example.1.xml
new file mode 100644
index 0000000..eb45d83
--- /dev/null
+++ b/result/DocBook/seriesvolnums.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+TBS.
+</para>
diff --git a/result/DocBook/shortcut.example.1.xml b/result/DocBook/shortcut.example.1.xml
new file mode 100644
index 0000000..5336cc9
--- /dev/null
+++ b/result/DocBook/shortcut.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+You can exit from GNU Emacs with
+<menuchoice><shortcut><keycombo><keysym>C-x</keysym><keysym>C-c</keysym></keycombo></shortcut><guimenu>Files</guimenu><guimenuitem>Exit Emacs</guimenuitem></menuchoice>.
+</para>
diff --git a/result/DocBook/sidebar.example.1.xml b/result/DocBook/sidebar.example.1.xml
new file mode 100644
index 0000000..7a893db
--- /dev/null
+++ b/result/DocBook/sidebar.example.1.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1><title>An Example Section</title><para>
+Some narrative text.
+</para><sidebar><title>A Sidebar</title><para>
+Sidebar content.
+</para></sidebar><para>
+The continuing flow of the narrative text, as if the
+sidebar was not present.
+</para></sect1>
diff --git a/result/DocBook/simpara.example.1.xml b/result/DocBook/simpara.example.1.xml
new file mode 100644
index 0000000..7e73763
--- /dev/null
+++ b/result/DocBook/simpara.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE simpara PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<simpara>
+Just the text, ma'am.
+</simpara>
diff --git a/result/DocBook/simplelist.example.1.xml b/result/DocBook/simplelist.example.1.xml
new file mode 100644
index 0000000..0d89de7
--- /dev/null
+++ b/result/DocBook/simplelist.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Here is a <sgmltag>SimpleList</sgmltag>, rendered inline:
+<simplelist type="inline"><member>A</member><member>B</member><member>C</member><member>D</member><member>E</member><member>F</member><member>G</member></simplelist></para>
diff --git a/result/DocBook/simplelist.example.2.xml b/result/DocBook/simplelist.example.2.xml
new file mode 100644
index 0000000..54a3899
--- /dev/null
+++ b/result/DocBook/simplelist.example.2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Here is the same <sgmltag>SimpleList</sgmltag> rendered horizontally with
+three columns:
+<simplelist type="horiz" columns="3"><member>A</member><member>B</member><member>C</member><member>D</member><member>E</member><member>F</member><member>G</member></simplelist></para>
diff --git a/result/DocBook/simplelist.example.3.xml b/result/DocBook/simplelist.example.3.xml
new file mode 100644
index 0000000..f1e796d
--- /dev/null
+++ b/result/DocBook/simplelist.example.3.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Finally, here is the list rendered vertically:
+<simplelist type="vert" columns="3"><member>A</member><member>B</member><member>C</member><member>D</member><member>E</member><member>F</member><member>G</member></simplelist></para>
diff --git a/result/DocBook/simplesect.example.1.xml b/result/DocBook/simplesect.example.1.xml
new file mode 100644
index 0000000..6786ce4
--- /dev/null
+++ b/result/DocBook/simplesect.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1><title>Additional Coding</title><para>
+Support for the additional features requested will be provided.
+</para><simplesect><title>Estimated Time</title><para>
+2 to 3 weeks.
+</para></simplesect></sect1>
diff --git a/result/DocBook/structfield.example.1.xml b/result/DocBook/structfield.example.1.xml
new file mode 100644
index 0000000..43fd450
--- /dev/null
+++ b/result/DocBook/structfield.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <structfield>tm_isdst</structfield> field is non-zero when
+the time reported is in daylight savings time.
+</para>
diff --git a/result/DocBook/structname.example.1.xml b/result/DocBook/structname.example.1.xml
new file mode 100644
index 0000000..be90c80
--- /dev/null
+++ b/result/DocBook/structname.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <structname>tm</structname> structure, returned by
+<function>_get_tm</function>, contains complete information
+about the current time of day.
+</para>
diff --git a/result/DocBook/subjectset.example.1.xml b/result/DocBook/subjectset.example.1.xml
new file mode 100644
index 0000000..0aeb163
--- /dev/null
+++ b/result/DocBook/subjectset.example.1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE subjectset PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<subjectset scheme="libraryofcongress"><subject><subjectterm>Electronic Publishing</subjectterm></subject><subject><subjectterm>SGML (Computer program language)</subjectterm></subject></subjectset>
diff --git a/result/DocBook/subscript.example.1.xml b/result/DocBook/subscript.example.1.xml
new file mode 100644
index 0000000..04f3353
--- /dev/null
+++ b/result/DocBook/subscript.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+Thirsty? Have some H<subscript>2</subscript>O.
+</para>
diff --git a/result/DocBook/superscript.example.1.xml b/result/DocBook/superscript.example.1.xml
new file mode 100644
index 0000000..ffc3dd1
--- /dev/null
+++ b/result/DocBook/superscript.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The equation e<superscript>Ï€i</superscript> + 1 = 0 ties together
+five of the most important mathematical constants.
+</para>
diff --git a/result/DocBook/symbol.example.1.xml b/result/DocBook/symbol.example.1.xml
new file mode 100644
index 0000000..353602d
--- /dev/null
+++ b/result/DocBook/symbol.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+No filename may be more than <symbol class="limit">MAXPATHLEN</symbol>
+characters long.
+</para>
diff --git a/result/DocBook/synopfragment.example.1.xml b/result/DocBook/synopfragment.example.1.xml
new file mode 100644
index 0000000..95e9451
--- /dev/null
+++ b/result/DocBook/synopfragment.example.1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE cmdsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<cmdsynopsis><command>cccp</command><arg>-$</arg><arg>-C</arg><arg rep="repeat">-D<replaceable>name</replaceable><arg>=<replaceable>definition</replaceable></arg></arg><arg>-dD</arg><arg>-dM</arg><sbr/><arg rep="repeat">-I <replaceable>directory</replaceable></arg><arg>-H</arg><arg>-I-</arg><arg rep="repeat">-imacros <replaceable>file</replaceable></arg><sbr/><arg rep="repeat">-include <replaceable>file</replaceable></arg><group><synopfragmentref linkend="langs">languages</synopfragmentref></group><arg>-lint</arg><sbr/><group><arg>-M</arg><arg>-MD</arg><arg>-MM</arg><arg>-MMD</arg></group><arg>-nostdinc</arg><arg>-P</arg><arg>-pedantic</arg><sbr/><arg>-pedantic-errors</arg><arg>-trigraphs</arg><arg>-U<replaceable>name</replaceable></arg><sbr/><arg>-undef</arg><arg choice="plain"><synopfragmentref linkend="warn">warnings
+ </synopfragmentref></arg><group choice="req"><arg><replaceable>infile</replaceable></arg><arg>-</arg></group><group choice="req"><arg><replaceable>outfile</replaceable></arg><arg>-</arg></group><synopfragment id="langs"><group choice="plain"><arg>-lang-c</arg><arg>-lang-c++</arg><arg>-lang-objc</arg></group></synopfragment><synopfragment id="warn"><arg>-Wtrigraphs</arg><arg>-Wcomment</arg><arg>-Wall</arg><arg>-Wtraditional</arg></synopfragment></cmdsynopsis>
diff --git a/result/DocBook/synopsis.example.1.xml b/result/DocBook/synopsis.example.1.xml
new file mode 100644
index 0000000..e423f0e
--- /dev/null
+++ b/result/DocBook/synopsis.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE synopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<synopsis>
+chgrp [-R [-H | -L | -P] [-f] group file...
+</synopsis>
diff --git a/result/DocBook/synopsis.example.2.xml b/result/DocBook/synopsis.example.2.xml
new file mode 100644
index 0000000..bd88bbf
--- /dev/null
+++ b/result/DocBook/synopsis.example.2.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE synopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<synopsis>
+int max(int int1, int int2);
+</synopsis>
diff --git a/result/DocBook/systemitem.example.1.xml b/result/DocBook/systemitem.example.1.xml
new file mode 100644
index 0000000..45c6ac2
--- /dev/null
+++ b/result/DocBook/systemitem.example.1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+For many years, O'Reilly's primary web server,
+<ulink url="http://www.oreilly.com/">http://www.oreilly.com/</ulink>,
+was hosted by <application>WN</application> on
+<systemitem class="systemname">helio.oreilly.com</systemitem>.
+</para>
diff --git a/result/DocBook/table.example.1.xml b/result/DocBook/table.example.1.xml
new file mode 100644
index 0000000..3301b16
--- /dev/null
+++ b/result/DocBook/table.example.1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE table PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<table frame="all"><title>Sample Table</title><tgroup cols="5" align="left" colsep="1" rowsep="1"><colspec colname="c1"/><colspec colname="c2"/><colspec colname="c3"/><colspec colnum="5" colname="c5"/><spanspec spanname="hspan" namest="c1" nameend="c2" align="center"/><spanspec spanname="bspan" namest="c2" nameend="c3" align="center"/><thead><row><entry spanname="hspan">Horizontal Span</entry><entry>a3</entry><entry>a4</entry><entry>a5</entry></row></thead><tfoot><row><entry>f1</entry><entry>f2</entry><entry>f3</entry><entry>f4</entry><entry>f5</entry></row></tfoot><tbody><row><entry>b1</entry><entry>b2</entry><entry>b3</entry><entry>b4</entry><entry morerows="1" valign="middle"><para><!-- Pernicous Mixed Content -->
+ Vertical Span</para></entry></row><row><entry>c1</entry><entry spanname="bspan" morerows="1" valign="bottom">Span Both</entry><entry>c4</entry></row><row><entry>d1</entry><entry>d4</entry><entry>d5</entry></row></tbody></tgroup></table>
diff --git a/result/DocBook/tip.example.1.xml b/result/DocBook/tip.example.1.xml
new file mode 100644
index 0000000..a955290
--- /dev/null
+++ b/result/DocBook/tip.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE tip PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<tip><para>
+If you tie your shoelaces, you're less likely to trip and
+fall down.
+</para></tip>
diff --git a/result/DocBook/title.example.1.xml b/result/DocBook/title.example.1.xml
new file mode 100644
index 0000000..55d378c
--- /dev/null
+++ b/result/DocBook/title.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1><title>A Sect One</title><para>
+Actual content.
+</para></sect1>
diff --git a/result/DocBook/titleabbrev.example.1.xml b/result/DocBook/titleabbrev.example.1.xml
new file mode 100644
index 0000000..7a774f5
--- /dev/null
+++ b/result/DocBook/titleabbrev.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<chapter><title>How to Configure the Menu Subsystem
+of the Graphical User Interface</title><titleabbrev>Configuring Menus</titleabbrev><para>
+Actual content.
+</para></chapter>
diff --git a/result/DocBook/token.example.1.xml b/result/DocBook/token.example.1.xml
new file mode 100644
index 0000000..854d578
--- /dev/null
+++ b/result/DocBook/token.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In parsing, line ends are turned into the <token>CRLF</token>, all other
+whitespace becomes <token>WHITESP</token>.
+</para>
diff --git a/result/DocBook/trademark.example.1.xml b/result/DocBook/trademark.example.1.xml
new file mode 100644
index 0000000..541649b
--- /dev/null
+++ b/result/DocBook/trademark.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The name <trademark class="registered">WebSite</trademark> is a
+registered trademark of O'Reilly &amp; Associates, Inc.
+</para>
diff --git a/result/DocBook/type.example.1.xml b/result/DocBook/type.example.1.xml
new file mode 100644
index 0000000..1fd4e7f
--- /dev/null
+++ b/result/DocBook/type.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+The <function>geteuid</function> function returns a <type>uid_t</type> that
+contains the user's <emphasis>effective</emphasis> user id.
+</para>
diff --git a/result/DocBook/ulink.example.1.xml b/result/DocBook/ulink.example.1.xml
new file mode 100644
index 0000000..0ad2c0f
--- /dev/null
+++ b/result/DocBook/ulink.example.1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+For more information, see the O'Reilly catalog entry for
+<ulink url="http://www.ora.com/catalog/tex/"><citetitle>Making TeX
+Work</citetitle></ulink>.
+</para>
diff --git a/result/DocBook/userinput.example.1.xml b/result/DocBook/userinput.example.1.xml
new file mode 100644
index 0000000..b87b301
--- /dev/null
+++ b/result/DocBook/userinput.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+At the system prompt, enter <userinput>xyzzy</userinput> to gain
+supervisor access to the system.
+</para>
diff --git a/result/DocBook/varargs.example.1.xml b/result/DocBook/varargs.example.1.xml
new file mode 100644
index 0000000..c7ecb1b
--- /dev/null
+++ b/result/DocBook/varargs.example.1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE funcsynopsis PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<funcsynopsis><funcsynopsisinfo>
+#include &lt;varargs.h&gt;</funcsynopsisinfo><funcprototype><funcdef>int <function>max</function></funcdef><varargs/></funcprototype></funcsynopsis>
diff --git a/result/DocBook/variablelist.example.1.xml b/result/DocBook/variablelist.example.1.xml
new file mode 100644
index 0000000..fd7578a
--- /dev/null
+++ b/result/DocBook/variablelist.example.1.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE variablelist PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<variablelist><title>Font Filename Extensions</title><varlistentry><term><filename>TTF</filename></term><listitem><para>
+TrueType fonts.
+</para></listitem></varlistentry><varlistentry><term><filename>PFA</filename></term><term><filename>PFB</filename></term><listitem><para>
+PostScript fonts. <filename>PFA</filename> files are common on
+<acronym>UNIX</acronym> systems, <filename>PFB</filename> files
+are more common on Windows systems.
+</para></listitem></varlistentry></variablelist>
diff --git a/result/DocBook/varname.example.1.xml b/result/DocBook/varname.example.1.xml
new file mode 100644
index 0000000..f07cd7e
--- /dev/null
+++ b/result/DocBook/varname.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+In Perl, <varname>@ARGV</varname> contains the command line paramters
+used when the script was run.
+</para>
diff --git a/result/DocBook/videoobject.example.1.xml b/result/DocBook/videoobject.example.1.xml
new file mode 100644
index 0000000..e78e95a
--- /dev/null
+++ b/result/DocBook/videoobject.example.1.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE mediaobject PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<mediaobject><videoobject><videodata fileref="movie.avi"/></videoobject><imageobject><imagedata fileref="movie-frame.gif"/></imageobject><textobject><para>This video illustrates the proper way to assemble an
+inverting time distortion device.
+</para><warning><para>
+It is imperative that the primary and secondary temporal
+couplings not be mounted in the wrong order. Temporal
+catastrophe is the likely result. The future you destroy
+may be your own.
+</para></warning></textobject></mediaobject>
diff --git a/result/DocBook/warning.example.1.xml b/result/DocBook/warning.example.1.xml
new file mode 100644
index 0000000..4f60873
--- /dev/null
+++ b/result/DocBook/warning.example.1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE warning PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<warning><para>
+Striking your thumb with a hammer may cause severe pain and discomfort.
+</para></warning>
diff --git a/result/DocBook/wordasword.example.1.xml b/result/DocBook/wordasword.example.1.xml
new file mode 100644
index 0000000..fe316f6
--- /dev/null
+++ b/result/DocBook/wordasword.example.1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<para>
+A <wordasword>Term</wordasword> in Algebra has a very different meaning
+than a <sgmltag>Term</sgmltag> in DocBook.
+</para>
diff --git a/result/DocBook/xref.example.1.xml b/result/DocBook/xref.example.1.xml
new file mode 100644
index 0000000..ae8f57c
--- /dev/null
+++ b/result/DocBook/xref.example.1.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book><title>An Example Book</title><chapter id="ch01"><title>XRef Samples</title><para>
+This paragraph demonstrates several features of
+<sgmltag>XRef</sgmltag>.
+</para><itemizedlist><listitem><para>A straight link generates the
+cross-reference text: <xref linkend="ch02"/>.
+</para></listitem><listitem><para>A link to an element with an
+<sgmltag class="attribute">XRefLabel</sgmltag>:
+<xref linkend="ch03"/>.
+</para></listitem><listitem><para>A link with an
+<sgmltag class="attribute">EndTerm</sgmltag>:
+<xref linkend="ch04" endterm="ch04short"/>.
+</para></listitem></itemizedlist></chapter><chapter id="ch02"><title>The Second Chapter</title><para>Some content here</para></chapter><chapter id="ch03" xreflabel="Chapter the Third"><title>The Third Chapter</title><para>Some content here</para></chapter><chapter id="ch04"><title>The Fourth Chapter</title><titleabbrev id="ch04short">Chapter 4</titleabbrev><para>Some content here</para></chapter></book>
diff --git a/result/HTML/Down.html b/result/HTML/Down.html
new file mode 100644
index 0000000..cd99aa1
--- /dev/null
+++ b/result/HTML/Down.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head><title>This service is temporary down</title></head>
+<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.err b/result/HTML/Down.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/Down.html.err
diff --git a/result/HTML/Down.html.sax b/result/HTML/Down.html.sax
new file mode 100644
index 0000000..a8c32c9
--- /dev/null
+++ b/result/HTML/Down.html.sax
@@ -0,0 +1,39 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+ , 3)
+SAX.startElement(title)
+SAX.characters(This service is temporary down, 30)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.startElement(body, bgcolor='#FFFFFF')
+SAX.ignorableWhitespace(
+, 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(
+, 1)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/attrents.html b/result/HTML/attrents.html
new file mode 100644
index 0000000..3231d1e
--- /dev/null
+++ b/result/HTML/attrents.html
@@ -0,0 +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>
+</body></html>
diff --git a/result/HTML/attrents.html.err b/result/HTML/attrents.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/attrents.html.err
diff --git a/result/HTML/attrents.html.sax b/result/HTML/attrents.html.sax
new file mode 100644
index 0000000..976bbbe
--- /dev/null
+++ b/result/HTML/attrents.html.sax
@@ -0,0 +1,21 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(body, bgcolor='#FFFFFF')
+SAX.ignorableWhitespace(
+ , 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(
+, 2)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 2)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 2)
+SAX.endDocument()
diff --git a/result/HTML/autoclose.html b/result/HTML/autoclose.html
new file mode 100644
index 0000000..1a54517
--- /dev/null
+++ b/result/HTML/autoclose.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html><body><hr></body></html>
diff --git a/result/HTML/autoclose.html.err b/result/HTML/autoclose.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/autoclose.html.err
diff --git a/result/HTML/autoclose.html.sax b/result/HTML/autoclose.html.sax
new file mode 100644
index 0000000..5a45627
--- /dev/null
+++ b/result/HTML/autoclose.html.sax
@@ -0,0 +1,11 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.startElement(body)
+SAX.startElement(hr)
+SAX.endElement(hr)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(body)
+SAX.endElement(html)
+SAX.endDocument()
diff --git a/result/HTML/autoclose2.html b/result/HTML/autoclose2.html
new file mode 100644
index 0000000..1ac8f99
--- /dev/null
+++ b/result/HTML/autoclose2.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html><body><p>toto
+</p></body></html>
diff --git a/result/HTML/autoclose2.html.err b/result/HTML/autoclose2.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/autoclose2.html.err
diff --git a/result/HTML/autoclose2.html.sax b/result/HTML/autoclose2.html.sax
new file mode 100644
index 0000000..d1e6abb
--- /dev/null
+++ b/result/HTML/autoclose2.html.sax
@@ -0,0 +1,11 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.startElement(body)
+SAX.startElement(p)
+SAX.characters(toto
+, 5)
+SAX.endElement(p)
+SAX.endElement(body)
+SAX.endElement(html)
+SAX.endDocument()
diff --git a/result/HTML/autoclose3.html b/result/HTML/autoclose3.html
new file mode 100644
index 0000000..13461aa
--- /dev/null
+++ b/result/HTML/autoclose3.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html><body><ul>
+<li>item 1
+</li>
+<li>item 2
+</li>
+</ul></body></html>
diff --git a/result/HTML/autoclose3.html.err b/result/HTML/autoclose3.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/autoclose3.html.err
diff --git a/result/HTML/autoclose3.html.sax b/result/HTML/autoclose3.html.sax
new file mode 100644
index 0000000..25e06ea
--- /dev/null
+++ b/result/HTML/autoclose3.html.sax
@@ -0,0 +1,19 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.startElement(body)
+SAX.startElement(ul)
+SAX.characters(
+, 1)
+SAX.startElement(li)
+SAX.characters(item 1
+, 7)
+SAX.endElement(li)
+SAX.startElement(li)
+SAX.characters(item 2
+, 7)
+SAX.endElement(li)
+SAX.endElement(ul)
+SAX.endElement(body)
+SAX.endElement(html)
+SAX.endDocument()
diff --git a/result/HTML/cf_128.html b/result/HTML/cf_128.html
new file mode 100644
index 0000000..8c4f11a
--- /dev/null
+++ b/result/HTML/cf_128.html
@@ -0,0 +1,13 @@
+<!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>
+<td bgcolor="white">
+ Foo1
+ <table border="4"><tr><td>Foo2<p></p>
+<p></p>
+</td></tr></table>
+</td>
+ <td bgcolor="blue">Foo3</td>
+ </tr></table></body>
+</html>
diff --git a/result/HTML/cf_128.html.err b/result/HTML/cf_128.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/cf_128.html.err
diff --git a/result/HTML/cf_128.html.sax b/result/HTML/cf_128.html.sax
new file mode 100644
index 0000000..8aa82c1
--- /dev/null
+++ b/result/HTML/cf_128.html.sax
@@ -0,0 +1,69 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(HTML, -//W3C//DTD HTML 4.0 Transitional//EN, http://www.w3.org/TR/REC-html40/strict.dtd)
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(title)
+SAX.characters(gnome-xml push mode bug, 23)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body)
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.startElement(table, border='4')
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 5)
+SAX.startElement(td, bgcolor='white')
+SAX.characters(
+ Foo1
+ , 8)
+SAX.startElement(table, border='4')
+SAX.characters(
+ , 4)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td)
+SAX.characters(Foo2, 4)
+SAX.startElement(p)
+SAX.endElement(p)
+SAX.startElement(p)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(table)
+SAX.characters(
+ , 5)
+SAX.endElement(td)
+SAX.characters(
+ , 5)
+SAX.startElement(td, bgcolor='blue')
+SAX.characters(Foo3, 4)
+SAX.endElement(td)
+SAX.characters(
+ , 4)
+SAX.endElement(tr)
+SAX.characters(
+ , 3)
+SAX.endElement(table)
+SAX.ignorableWhitespace(
+ , 3)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 3)
+SAX.endDocument()
diff --git a/result/HTML/doc2.htm b/result/HTML/doc2.htm
new file mode 100644
index 0000000..0446695
--- /dev/null
+++ b/result/HTML/doc2.htm
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!-- saved from url=(0016)http://intranet/ --><!-- BEGIN Naviscope Javascript --><html>
+<head>
+<title>Welcome to Copernic.com</title>
+<script language="javascript">
+ NS_ActualOpen=window.open;
+ function NS_NullWindow(){this.window;}
+ function NS_NewOpen(url,nam,atr){return(new NS_NullWindow());}
+ window.open=NS_NewOpen;
+</script><!-- END Naviscope Javascript --><!-- saved from url=(0027)http://www.agents-tech.com/ --><meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<meta content="Copernic.com Inc. develops innovative agent technology solutions to efficiently access and manage the overwhelming quantity of information available on the Internet and intranets." name="DESCRIPTION">
+<meta content="agent,technology,intranet,extranet,management,filtering,ranking,solution,service,intelligent,intelligence,client,server,architecture,developer,development,information,telecommunication,announcement,press,product,profile,contact,multi-agent,meta-search,metasearch,multi-thread,mobile,wireless,shopping,robot,PCS,Copernic,engine,toolkit,CDK,EDK" name="KEYWORDS">
+<meta content="MSHTML 5.00.3103.1000" name="GENERATOR">
+</head>
+<frameset border="false" cols="172,*" frameborder="0" framespacing="0">
+<frame marginheight="0" marginwidth="0" name="left" noresize scrolling="no" src="doc2_files/side.htm" target="rtop">
+<frameset rows="43,*">
+<frame marginheight="0" marginwidth="0" name="rtop" noresize scrolling="no" src="doc2_files/top.htm" target="rbottom">
+<frame name="rbottom" noresize src="doc2_files/contents.htm" target="_top">
+</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>
+ </noframes>
+</frameset>
+</html>
diff --git a/result/HTML/doc2.htm.err b/result/HTML/doc2.htm.err
new file mode 100644
index 0000000..5ac09cd
--- /dev/null
+++ b/result/HTML/doc2.htm.err
@@ -0,0 +1,3 @@
+./test/HTML/doc2.htm:10: HTML parser error : Misplaced DOCTYPE declaration
+<!-- END Naviscope Javascript --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Tra
+ ^
diff --git a/result/HTML/doc2.htm.sax b/result/HTML/doc2.htm.sax
new file mode 100644
index 0000000..27d458a
--- /dev/null
+++ b/result/HTML/doc2.htm.sax
@@ -0,0 +1,69 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(HTML, -//W3C//DTD HTML 4.0 Transitional//EN, )
+SAX.comment( saved from url=(0016)http://intranet/ )
+SAX.comment( BEGIN Naviscope Javascript )
+SAX.startElement(html)
+SAX.startElement(head)
+SAX.startElement(title)
+SAX.characters(Welcome to Copernic.com, 23)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(script, language='javascript')
+SAX.cdata(
+ NS_ActualOpen=windo, 194)
+SAX.endElement(script)
+SAX.ignorableWhitespace(
+, 1)
+SAX.comment( END Naviscope Javascript )
+SAX.error: Misplaced DOCTYPE declaration
+SAX.internalSubset(HTML, -//W3C//DTD HTML 4.0 Transitional//EN, )
+SAX.comment( saved from url=(0027)http://www.agents-tech.com/ )
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(meta, content='text/html; charset=iso-8859-1', http-equiv='Content-Type')
+SAX.endElement(meta)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(meta, content='Copernic.com Inc. develops innovative agent technology solutions to efficiently access and manage the overwhelming quantity of information available on the Internet and intranets.', name='DESCRIPTION')
+SAX.endElement(meta)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(meta, content='agent,technology,intranet,extranet,management,filtering,ranking,solution,service,intelligent,intelligence,client,server,architecture,developer,development,information,telecommunication,announcement,press,product,profile,contact,multi-agent,meta-search,metasearch,multi-thread,mobile,wireless,shopping,robot,PCS,Copernic,engine,toolkit,CDK,EDK', name='KEYWORDS')
+SAX.endElement(meta)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(meta, content='MSHTML 5.00.3103.1000', name='GENERATOR')
+SAX.endElement(meta)
+SAX.endElement(head)
+SAX.startElement(frameset, border='false', cols='172,*', frameborder='0', framespacing='0')
+SAX.startElement(frame, marginheight='0', marginwidth='0', name='left', noresize, scrolling='no', src='doc2_files/side.htm', target='rtop')
+SAX.endElement(frame)
+SAX.startElement(frameset, rows='43,*')
+SAX.startElement(frame, marginheight='0', marginwidth='0', name='rtop', noresize, scrolling='no', src='doc2_files/top.htm', target='rbottom')
+SAX.endElement(frame)
+SAX.startElement(frame, name='rbottom', noresize, src='doc2_files/contents.htm', target='_top')
+SAX.endElement(frame)
+SAX.endElement(frameset)
+SAX.startElement(noframes)
+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(
+ , 3)
+SAX.startElement(p)
+SAX.characters(This page uses frames, but you, 61)
+SAX.endElement(p)
+SAX.ignorableWhitespace(
+ , 3)
+SAX.endElement(body)
+SAX.characters(
+ , 3)
+SAX.endElement(noframes)
+SAX.endElement(frameset)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/doc3.htm b/result/HTML/doc3.htm
new file mode 100644
index 0000000..fad60cb
--- /dev/null
+++ b/result/HTML/doc3.htm
@@ -0,0 +1,442 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!-- saved from url=(0025)http://bp6.gamesquad.net/ --><!-- BEGIN Naviscope Javascript --><html>
+<head>
+<title>BP6.com #1 online resource for the BP6 Mobo....</title>
+<script language="javascript">
+ NS_ActualOpen=window.open;
+ function NS_NullWindow(){this.window;}
+ function NS_NewOpen(url,nam,atr){return(new NS_NullWindow());}
+ window.open=NS_NewOpen;
+</script><!-- END Naviscope Javascript --><!--last modified on Tuesday, February 22, 2000 11:47 PM --><meta content="text/html;CHARSET=iso-8859-1" http-equiv="Content-Type">
+<meta content="Tim" name="Author">
+<style type="text/css">A.nav {
+ COLOR: #003399; TEXT-DECORATION: none
+}
+A.nav:hover {
+ COLOR: #3366cc; TEXT-DECORATION: underline
+}
+</style>
+<script language="JavaScript">
+<!-- Idea by: Nic Wolfe (Nic@TimelapseProductions.com) -->
+<!-- Web URL: http://fineline.xs.mw -->
+
+<!-- This script and many more are available free online at -->
+<!-- The JavaScript Source!! http://javascript.internet.com -->
+
+<!-- Begin
+function popUp(URL) {
+day = new Date();
+id = day.getTime();
+eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0, location=0, statusbars=0, menubars=0, resizable=0, width=145, height=250');");
+}
+// End -->
+</script><meta content="MSHTML 5.00.3103.1000" name="GENERATOR">
+</head>
+<body alink="red" bgcolor="black" link="red" text="white" vlink="red">
+<p>
+</p>
+<div align="center">
+<table border="0" cellpadding="0" cellspacing="0" width="80%"><tbody>
+<tr>
+<td valign="top" width="31"><a href="http://bp6.gamesquad.net/"><img align="bottom" border="0" height="74" src="doc3_files/logo.gif" width="252"></a></td>
+ <td align="left" bgcolor="#000000">
+<img height="15" src="doc3_files/spacer.gif" width="15"><!-- START GAMESQUAD.NET IFRAME RICH MEDIA CODE --><!-- © 2000 GameSquad.net All Rights Reserved. --><iframe border="0" frameborder="no" height="60" marginheight="0" marginwidth="0" scrolling="no" src="doc3_files/adcycle.htm" width="468">
+<a href="http://ads.gamesquad.net/addclick.exe/adclick.cgi?REGION=game%7Ctech%7Cent&amp;id=1" target="_top"><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&amp;media=1&amp;id=1" width="468" height="60" border="0" alt="GSN ROS Ad"></a>
+</iframe><!-- END GAMESQUAD.NET IFRAME RICH MEDIA CODE --><br><img height="15" src="doc3_files/spacer.gif" width="400">
+</td>
+</tr>
+<tr><td bgcolor="#003399" colspan="2">
+ <p align="right"><img align="right" border="0" height="18" hspace="0" src="doc3_files/trcorner.gif" width="20"><img align="left" border="0" height="18" hspace="0" src="doc3_files/tlcorner.gif" width="20"><font face="Verdana" size="2">Monday, July 31st, 2000</font> </p>
+</td></tr>
+<tr><td colspan="2">
+ <table bgcolor="#003399" border="0" cellpadding="0" cellspacing="4" width="100%"><tbody><tr><td bgcolor="#666666" width="100%">
+ <center>
+ <p>
+ </p>
+<table bgcolor="black" border="0" cellpadding="0" cellspacing="1" width="100%"><tbody><tr><td background="doc3_files/hscan.gif" bgcolor="#666666" width="100%">
+<img height="1" src="doc3_files/spacer.gif" width="738"><br><center>
+ <table border="0" cellpadding="2" cellspacing="0" width="91%"><tbody><tr>
+<td valign="top" width="15%">
+ <p align="center"><a href="http://bp6.gamesquad.net/specs.phtml"><img align="bottom" alt="Abit BP6 Motherboard specification and information." border="0" height="45" src="doc3_files/bp6icon.gif" width="70"></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/specs.phtml"><font color="white" face="Verdana" size="1">BP6 Specs</font></a>
+ </p>
+</td>
+ <td valign="top" width="15%">
+ <p align="center"><a href="http://bp6.gamesquad.net/bxcool.phtml"><img align="bottom" alt="How to cool the BX Chipset on your BP6." border="0" height="45" src="doc3_files/bxcool.gif" width="70"></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">BX Cooling</font></a>
+ </p>
+</td>
+ <td valign="top" width="15%">
+ <p align="center"><a href="http://bp6.gamesquad.net/contest.phtml"><img align="bottom" alt="The U;timate Gaming Contest - Coming Soon!" border="0" height="45" src="doc3_files/ugmcontest.gif" width="70"></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/contest.phtml"><font color="white" face="Verdana" size="1">UGM Contest</font></a>
+ </p>
+</td>
+ <td valign="top" width="15%">
+ <p align="center"><a href="http://bp6.gamesquad.net/uc.phtml"><img align="bottom" alt="Cooling &amp; Heatsink review for the BP6." border="0" height="45" src="doc3_files/alpha.gif" width="70"></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Heatsinks</font></a>
+ </p>
+</td>
+ <td valign="top" width="15%">
+ <p align="center"><a href="http://bp6.gamesquad.net/101.phtml"><img align="bottom" alt="BP6 101 - Class is now in session. Welcome newbies!" border="0" height="45" src="doc3_files/bp6101.gif" width="70"></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/101.phtml"><font color="white" face="Verdana" size="1">BP6 101</font></a>
+ </p>
+</td>
+ <td valign="top" width="15%">
+ <p align="center"><a href="http://bp6.gamesquad.net/win2k_install.phtml"><img align="bottom" alt="Install guide for installing Windows 2000 on the BP6 " border="0" height="45" src="doc3_files/win2kht.gif" width="70"></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/win2k_install.phtml"><font color="white" face="Verdana" size="1">Win2k Install</font></a>
+ </p>
+</td>
+ <td valign="top" width="15%">
+ <p align="center"><a href="http://www.gentus.com/"><img align="bottom" alt="Taking a first look at the Abit Linux release called " border="0" height="45" src="doc3_files/gentusbox.gif" width="70" gentus></a><br><a href="http://www.gentus.com/"><font color="white" face="Verdana" size="1">Gentus</font></a>
+ </p>
+</td>
+</tr></tbody></table>
+</center>
+</td></tr></tbody></table>
+</center>
+</td></tr></tbody></table>
+</td></tr>
+</tbody></table>
+<table bgcolor="#003399" border="0" cellspacing="6" width="80%"><tbody><tr>
+<td bgcolor="black" valign="top" width="10%">
+ <table border="0" cellpadding="3" cellspacing="0" width="100%"><tbody><tr><td width="100%">
+<img height="1" src="doc3_files/spacer.gif" width="111"><br><b><font color="yellow" face="Verdana" size="2">REVIEWS</font></b><font face="Verdana" size="2"><br><hr align="center"></font><a href="http://bp6.gamesquad.net/bp6reviews.phtml"><font color="white" face="Verdana" size="1">BP6 Reviews</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/h2o.phtml"><font color="white" face="Verdana" size="1">BP6 Watercooling</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/bxcool.phtml"><font color="white" face="Verdana" size="1">BX Chipset Cooling</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/benchmark.phtml"><font color="white" face="Verdana" size="1">Benchmarks</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/bp6fsb.phtml"><font color="white" face="Verdana" size="1">BP6FSB Utility</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/powerleap.phtml"><font color="white" face="Verdana" size="1">PowerLeap NEO S370</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/seti.phtml"><font color="white" face="Verdana" size="1">SETI on the BP6</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/orbs.phtml"><font color="white" face="Verdana" size="1">Golden Orbs I</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/orbs/orbs2.phtml"><font color="white" face="Verdana" size="1">Golden Orbs II</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/Q6fix.phtml"><font color="white" face="Verdana" size="1">VTT Solution</font></a><font face="Verdana" size="1"><br><br></font><b><font color="yellow" face="Verdana" size="2">NAVIGATE</font></b><font color="yellow" face="Verdana" size="2">
+ <hr align="center"></font><a href="http://www.bp6.com/"><font color="white" face="Verdana" size="1">News</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/chat.phtml"><font color="white" face="Verdana" size="1">Online Text Chat</font></a><font face="Verdana" size="1"><br></font><a href="javascript:popUp('chat_popup.htm')"><font color="white" face="Verdana" size="1">Voice Chat</font></a><br><a href="http://216.247.220.192/Forum"><font color="white" face="Verdana" size="1">Messageboard</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/cooling"><font color="white" face="Verdana" size="1">Temp. Converter</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Picture Gallery</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/bios.phtml"><font color="white" face="Verdana" size="1">Latest BIOS</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/files/"><font color="white" face="Verdana" size="1">Drivers &amp; Files</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">UGM of the week</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/contest.phtml"><font color="white" face="Verdana" size="1">BP6 Contest</font></a><font face="Verdana" size="1"><br><br></font><b><font color="yellow" face="Verdana" size="2">OTHER STUFF</font></b><font color="yellow" face="Verdana" size="2">
+
+ <hr align="center"></font><a href="http://bp6.gamesquad.net/whois.phtml"><font color="white" face="Verdana" size="1">Who is Tim?</font></a><font face="Verdana" size="1"><br></font><a href="mailto:tim@bp6.com"><font color="white" face="Verdana" size="1">Contact BP6.com</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Affiliates Section</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Sponsors Section <br></font></a><a href="http://bp6.gamesquad.net/links.phtml"><font color="white" face="Verdana" size="1">Links<br><br></font></a><b><font color="yellow" face="Verdana" size="2">PC SPECIALS</font></b><font color="yellow" face="Verdana" size="2">
+ <hr align="center"></font><a href="http://bp6.gamesquad.net/specials.phtml"><font color="white" face="Verdana" size="1">Vendor
+ Specials<br><br></font></a><br><b><font color="yellow" face="Verdana" size="2">Pic of the day</font></b>
+ <hr>
+<center>
+ <p align="center"><font face="Verdana, Arial, Helvetica" size="1"><a href="http://bp6.gamesquad.net/cgi-bin/schlabo/potd.pl"><img alt="No picture is available for today." border="0" src="doc3_files/potd_na_110x83.gif"></a> </font></p>
+</center>
+<br><center></center>
+<br><!--<A HREF="code:javascript:ID_FTPWebView.InvokeHelp()"><FONT SIZE="1" COLOR="white" FACE="Verdana">FTP Help</FONT></A>-->
+</td></tr></tbody></table>
+</td>
+ <td bgcolor="white" valign="top" width="80%">
+<img height="1" src="doc3_files/spacer.gif" width="490"><br><center>
+ <p>
+ </p>
+<table bgcolor="white" border="0" cellpadding="10" cellspacing="0" height="100%" width="100%"><tbody><tr><td bgcolor="white" valign="top" width="100%">
+ <center>
+<a href="http://www.encounter2001.com/" target="_blank"><img border="0" height="60" src="doc3_files/banner2.gif" width="468"></a>
+ </center>
+<br><a name="news_top"></a><font color="#003366" face="verdana,arial" size="2"><b>Headlines</b></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem965012956,78924,">Chat
+ with ABIT - 8:09PM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964766837,26344,">Fixed
+ wallpaper - 11:47PM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964762841,25865,">Seti
+ update - 10:40PM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964732235,45502,">Judge
+ gives Napster the Boot!! - 2:10PM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964713289,83675,">Ram
+ Sinks.. more cooling for small places. - 8:54AM
+ PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964671589,7831,">is
+ it [H]ard? - 9:19PM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964644047,60218,">WiLd
+ CaSe!! - 1:40PM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964631110,84122,">What
+ the heck is a Peltier?!?! - 10:05AM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964587833,74573,">HELLO
+ EVERYONE!!! - 10:03PM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964429577,13375,">BP6
+ Q3 server up and running.. - 2:06AM PDT</a></font><br><br><!-- NP v3.7.5 --><a name="newsitem965012956,78924,"></a>
+ <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Sunday,
+ July 30, 2000</b></font></td></tr></tbody></table>
+<br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">Chat with
+ ABIT</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 8:09PM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/965012956,78924,.html"><img border="0" src="doc3_files/comments.gif">0 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">I&#8217;m slacking a little. All game no
+ work makes Holodeck2 a happy boy :-)<br><br>Wallpaper update: I got
+ off my lazy ass and redid the 1280x1024 wall paper, now it has the 2
+ celerons.<br><br><b><a href="http://fullon3d.com/chat/abit/" target="3d">Fullon3d had a live chat with that Eric guy from Abit.
+ </a></b>Submitted by: MJS<br><br>Here&#8217;s a little clip:<br>[Falcon]
+ BP6-2??<br>[EricBoeing] We already have a micro ATX dual flip-chip
+ board<br>[EricBoeing] but it's OEM only<br>[EricBoeing] the full ATX
+ version should be out Septemberish<br></font><br><br><a name="newsitem964766837,26344,"></a>
+ <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Thursday,
+ July 27, 2000</b></font></td></tr></tbody></table>
+<br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">Fixed
+ wallpaper</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 11:47PM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/964766837,26344,.html"><img border="0" src="doc3_files/comments.gif">5 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2"><b>Get them now!!</b><br>This is a
+ fixed bp6 wallpaper. In all the popular flavors, err...
+ resolutions.<br><img height="180" src="doc3_files/3-800.jpg" width="240"><br>It's still the Intels Inside one with a spelling
+ change; from "Mothboard" to "Motherboard"<br><br>Thanks to Matt for
+ pointing that out to me.<br>I would also like to thank Kevin for
+ hosting my last batch and Radu for the previous "DUEL"/"DUAL"
+ error.<br>And 1 more person, THANK YOU TIM for letting me borrow
+ your server space ;-)<br><br>If you need a weird resolution, feel
+ free to <a href="mailto:Holodeck2@home.com">e-mail</a> me requesting
+ for one.<br>If you have ideas or more errors to point out, <a href="mailto:Holodeck2@home.com">mailto:Holodeck2@home.com</a><br><br><a href="doc3_files/3-800.jpg" target="800">800x600 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1024.jpg" target="800">1024x768 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1152.jpg" target="800">1152x864 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1280x1024.jpg" target="800">1280x1024 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1600.jpg" target="800">1600x1200 </a><br><p>Enjoy :-)<br></p>
+<p><a href="mailto:Holodeck2@home.com">Holodeck2,</a><br>[H]ard at
+ work on the Brand Spanking New Wallpaper.<br></p></font><br><br><a name="newsitem964762841,25865,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">Seti update</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 10:40PM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/964762841,25865,.html"><img border="0" src="doc3_files/comments.gif">5 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2"><img height="54" src="doc3_files/setiupdate.jpg" width="400"><br>You like the
+ pic?<br><br>Bp6 User Group Update:<br>Completed 61531
+ units!!<br><b>#168 on Top 200 All Groups</b> (Going to pass CLRC in
+ a few days)<br><b>#74 on Top 200 Teams</b> (Gaining fast on
+ Starfleet)<br><br>We are flying though at the speed of light (may be
+ a little slower).<br>Good job everyone!!<br><br>Check this page at
+ least once a day for new stuff :-)<br></font><br><br><a name="newsitem964732235,45502,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">Judge gives Napster the
+ Boot!!</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 2:10PM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/964732235,45502,.html"><img border="0" src="doc3_files/comments.gif">0 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Good afternoon for everyone living in
+ EST. I was going to post today morning but I didn't. Here's my
+ story:<br>I woke up and thought about posting something but I
+ decided to wax my car before the sun came up (draw your own
+ conclusions), wax on, wax off, wax on,..., did that for about an
+ hour. Then I saw the sun rise (Aaahh I'm melting... not). I sat in
+ front of my comp and started to search for good news to post. Saw
+ that a stoopid judge temporally shuts down napster. Goes to room and
+ cry. and now I'm here :-)<br><br><a href="http://www.msnbc.com/news/437532.asp" target="Judge vs Napster">Judge shuts Napster down
+ <p><img height="143" src="doc3_files/669915.jpg" width="200"></p></a><br>Check out the Goofy guy in the suit<br>He's Sean
+ Fanning, founder of Napster.<br><br>Got news?? <a href="mailto:Holodeck2@home.com">mailto:Holodeck2@home.com</a><br></font><br><br><a name="newsitem964713289,83675,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">Ram Sinks.. more cooling for small
+ places.</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:tim@bp6.com">tim</a> @ 8:54AM PDT</small>  <a href="http://bp6.gamesquad.net/news/964713289,83675,.html"><img border="0" src="doc3_files/comments.gif">0 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Need some cooling for your Videocard
+ memory to get a little extra overclockability and FPS? <a href="http://www.overclockershideout.com/RamSinks.html" target="_BLANK">Overclockers Hiedout Ram Sinks</a> They just notified
+ me of their new design.<br><img border="1" src="doc3_files/ramsink.jpg"></font><br><br><a name="newsitem964671589,7831,"></a>
+ <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Wednesday, July 26,
+ 2000</b></font></td></tr></tbody></table>
+<br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">is it
+ [H]ard?</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 9:19PM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/964671589,7831,.html"><img border="0" src="doc3_files/comments.gif">0 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Big heatsinks are good, very good. The
+ bigger the better.<br>You can never can have a too big of heatsink
+ on a small chip (CPU, GPU, CHIPSET, etc)<br><br><img height="173" src="doc3_files/voodooside2.jpg" width="230"><br>My overclocked
+ Voodoo3 2000 with a BIG mofo heatsink on top.<br>Peltier and
+ watercooling next up :-)<br>(if you pry off the heatsink you void
+ the warranty )<br><br>it was originally posted on <a href="http://www.hardocp.com/">[H]ardOCP </a><br>I&#8217;m not only a
+ BP6er but also a [H]ardOCPer<br></font><br><br><a name="newsitem964644047,60218,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">WiLd CaSe!!</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 1:40PM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/964644047,60218,.html"><img border="0" src="doc3_files/comments.gif">8 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Now this person really knows how to
+ keep his case cool!!<br>Addin an 18" Fan!! WOW!!<br><br><a href="http://www.envador.com/Photos/PVCII/" target="_blank"><img src="doc3_files/TN_OpenedUp1.jpg"></a><br>Click to go to his
+ site.<br></font><br><br><a name="newsitem964631110,84122,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">What the heck is a
+ Peltier?!?!</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 10:05AM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/964631110,84122,.html"><img border="0" src="doc3_files/comments.gif">6 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">This is for all you people who wanted
+ to know what a peltier is.<br><br>The quest fo the Perfect
+ Peltier<br><a href="http://www.tweakmax.com/html/peltier/peltier-1.cfm" target="_blank"><img src="doc3_files/peltier.jpg"></a> <br>Thanks to
+ <a href="http://www.tweakmax.com/" target="_blank">TweakMax.com</a>
+ <br><br>Note: Today morning when I woke up I saw my whole screen
+ cluttered with a bunch of IMs!! I live in the USA on EST. If you
+ live somewhere else please check the time in my area. for example:
+ If you live in Europe and IM me in the morning your time I would be
+ sleeping it would be like 4 in the morning here. Just to let you
+ know <img src="doc3_files/smile.gif"><br>I'm not angry at anyone...
+ good thing I have a long fuse <img src="doc3_files/tongue.gif"><br></font><br><br><a name="newsitem964587833,74573,"></a>
+ <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Tuesday,
+ July 25, 2000</b></font></td></tr></tbody></table>
+<br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">HELLO
+ EVERYONE!!!</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 10:03PM
+ PDT</small>  <br><font color="black" face="Arial" size="2">Hello
+ everyone, Woohoo!! I'm on!!<br>Who is this Holodeck2 person
+ anyways?!?! Read on :-)<br>I&#8217;m a regular on the bp6 messageboard,
+ trying to help people out with their problems.<br>I&#8217;m the
+ self-proclaimed bp6 cooling expert, If you have a cooling idea, I&#8217;ve
+ probably already done it and can offer some incite.<br>My computer
+ is always on so you can contact me whenever... problem is, I'm not
+ always in front of it. I'll try to update this page and keep
+ everyone happy :-)<br>Any Questions or comments, you can either
+ contact me or post it on the messageboard.<br><br>Ways to contact
+ me.<br>E-mail: <a href="mailto:Holodeck2@home.com">Holodeck2@home.com</a> (All E-mails
+ will be answered in 24 hours or less, I guarantee it.)<br>When you
+ write me an e-mail please put in the subject line "BP6" then the
+ rest of your subject so my e-mail program can sort it, thanks<br><a href="http://www.aol.com/aim">AIM: </a>Holodeck2 (instant response
+ if I&#8217;m in front of my comp and not trying to frag someone)<br><a href="http://www.icq.com/download">ICQ: </a>82640218 (rarely
+ on)<br><br>P.S. If someone named &#8220;Digital Vortex&#8221; on either Quake 3
+ or 2 frags you, it&#8217;s probably me. ;-)<br></font><br><br><a name="newsitem964429577,13375,"></a>
+ <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Monday,
+ July 24, 2000</b></font></td></tr></tbody></table>
+<br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">BP6 Q3 server up and
+ running..</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:tim@bp6.com">tim</a> @ 2:06AM PDT</small>  <a href="http://bp6.gamesquad.net/news/964429577,13375,.html"><img border="0" src="doc3_files/comments.gif">3 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Setup a Q3 server for anyone wanting
+ to practice in preparation for Quakecon.. Connect to bp6.dyndns.org
+ default port. (SERVER: BP6 system, 256 MB ram, celeron 600 on a T3
+ connection)... Will be moved to another BP6 server eventually. This
+ is only a temporary test of the system and net connection. <br>(BTW-
+ there are a few bot's running around in there..)</font><br><br><a name="newsitem964425184,95812,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">BIOS Savior to the
+ rescue....</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:tim@bp6.com">tim</a> @ 12:53AM PDT</small>  <a href="http://bp6.gamesquad.net/news/964425184,95812,.html"><img border="0" src="doc3_files/comments.gif">2 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Do you sweat during the BIOS flashing
+ procedure on your BP6 mobo? If so then this little gadget maybe
+ worth a first look. It's called the "<b>RD1 BIOS Savior</b>" and it
+ plugs in between your BIOS ROM and the BIOS ROM socket on your mobo.
+ This device will backup your BIOS and and allow you to recover your
+ BIOS in the event that your flashing session goes wrong. In the
+ event of a bad flash, just flip a switch on the RDI and boot up your
+ system, and flash again. This is also good as a failsafe in case you
+ don't believe in Virus Protecting your computer. (Thanks to Fred for
+ link)<br><a href="http://www.ioss.com.tw/eg/rd1/RD1info0004.PDF" target="_NEW">Manufacturers Brochure</a> (PDF Format)<br><a href="http://192.216.185.10/mwave/doc/A06950.html" target='_BLANK"'>Another info page</a><br><a href="http://192.216.185.10/mwave/ProdMB-AC-MW.hmx?UID=&amp;CID=&amp;updepts=MB&amp;DNAME=%3Cb%3EMotherboards%3C%2Fb%3E&amp;Back=ProdMB-AC-MW.hmx?" target="_BLANK">Available for about $20</a><br><br><img src="doc3_files/rd1.jpg"></font><br><br><a name="newsitem963875853,12731,"></a>
+ <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Monday,
+ July 17, 2000</b></font></td></tr></tbody></table>
+<br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">How To
+ Overclock</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 4:17PM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/963875853,12731,.html"><img border="0" src="doc3_files/comments.gif">3 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">For those of you who are new to
+ overclocking, this guide will explain to you how to overclock, and
+ what some of the terms are. Like 'FSB' (what the heck is that!?
+ :0))<br><br><a href="http://netkills.qgl.org/a_oc_comp.shtml" target="_blank">How To Overclock</a> </font><br><br><a name="newsitem963875485,23353,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">The Cardcooler
+ XT</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 4:11PM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/963875485,23353,.html"><img border="0" src="doc3_files/comments.gif">1 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Wow! I am impressed! Nevermind keeping
+ the CPU's cool... Keep your whole board cool!<br><br><i>Even if your
+ not overclocking your system (or planning on it), this unit will
+ provide system stability and longevity. What would happen one day of
+ your GeForce or CPU fan went dead? You can also think of this
+ cooling unit as a backup to essential cooling fans in your
+ system.</i><br><br>Check this out!<br><br><a href="http://www.brokenpixel.com/articles/coolerXT/cardcoolerXT_1.shtml" target="_blank">http://www.brokenpixel.com/articles/coolerXT/cardcoolerXT_1.shtml</a>
+ </font><br><br><a name="newsitem963859982,88982,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">'Nerd
+ Inside'</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 11:53AM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/963859982,88982,.html"><img border="0" src="doc3_files/comments.gif">1 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">We all need to have some fun
+ sometimes! Check out this little web site that sells 'nerd' clothing
+ ;) (I like the bibs in the Junior Hackerz section) :-Þ<br><br><div align="center"><a href="http://www.nerdgear.com/" target="_blank"><img border="0" src="doc3_files/nerdinside.gif"></a></div></font><br><br><a name="newsitem963819796,9688,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">Dual PSU Wiring diagram... (preview to
+ Part 1 Watercooling Project)</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:tim@bp6.com">tim</a> @ 12:43AM PDT</small>  <a href="http://bp6.gamesquad.net/news/963819796,9688,.html"><img border="0" src="doc3_files/comments.gif">11 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">When is comes to overclocking your
+ system, cooling plays a big role. Powering all of those fans in your
+ system can cause quite a strain on your PSU (Power Supply Unit).
+ Depending on the number of peripherals in your system, adding a more
+ powerfull PSU or adding a second PSU may be neccesary. For
+ watercooling and using peltiers, dedicating a second PSU to power
+ the Peltiers (TEC's) is a good idea. Here I have come up with 2
+ diagrams on how I wired dual 300 watt ATX power supply units for the
+ Blizzard BP6 watercooling project. Consider this part of Step 1.
+ More will follow this week. BTW.. hacking up your PSU's is very
+ dangerous and is not recommended unless you know what you are doing.
+ <br><br>View Diagram 1 <a href="http://bp6.gamesquad.net/images/wiring.jpg" target="_BLANK">here</a>.<br>View Diagram 2 <a href="http://bp6.gamesquad.net/images/psu2.gif" target="_BLANK">here</a>.<br><br>I used Tap-In Squeeze Connectors and
+ 22 guage wire to connect the wires. You can get them at Radio Shack
+ Part# 64-3053 or <a href="http://www.radioshack.com/ProductCatalog/ProductDetail/Index/1,2098,,00.html?SKUString1=64&amp;SKUString2=3053" target="_blank">click here</a>.</font><br><br><a name="newsitem963766655,78511,"></a>
+ <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Sunday,
+ July 16, 2000</b></font></td></tr></tbody></table>
+<br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">RAM Overclocking?
+ Hmmmmm.</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 9:57AM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/963766655,78511,.html"><img border="0" src="doc3_files/comments.gif">3 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">I know we're pretty big overclockers
+ here at BP6.Com so, this is a post of choice ;-) I've seen the
+ question in the message boards, 'why can't I overclock any higher?'
+ Well, it's not always the CPU that's holding you back... Many other
+ things need to be taken care of to overclock such as your PCI
+ devices (can they handle the higher bus speed), the actual CPU, and
+ your RAM. I'm not saying that that a high quality stick of silicon
+ will enable you to overclock your 366MHz to 1 GHZ (I wish!), but, it
+ will certainly help =)<br><br>Extreme Overclocking has tested
+ (overclocked) PC133 RAM to there full potential. Here's a quote I
+ found and the link:<br><br><i>Well, the guys at Extreme Overclocking
+ have been hard at work again with their latest review. This time
+ they have put seven 128MB PC133 memory modules through the torture
+ tests to determine their maximum overclocking potential. Which one's
+ came out on top? Read the review to find out....</i><br><br><a href="http://www.extremeoverclocking.com/reviews/memory/ram_roundup_1.html" target="_blank">Cooked RAM... Yummie</a><br><br>The
+ ÐÐ.</font><br><br><a name="newsitem963764236,76720,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">CPU
+ Guide</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 9:17AM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/963764236,76720,.html"><img border="0" src="doc3_files/comments.gif">0 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">A follow up on the 'Weekly CPU
+ Prices', this guide will help you determine which cpu is best for
+ you (and your board ;-)). Sent to me by Spanky, here's the
+ link:<br><br><li><a href="http://www6.tomshardware.com/howto/00q2/000412/index.html" target="_blank">http://www6.tomshardware.com/howto/00q2/000412/index.html</a></li></font><br><br><a name="newsitem963685749,28290,"></a>
+ <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Saturday,
+ July 15, 2000</b></font></td></tr></tbody></table>
+<br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">Weekly CPU
+ Prices</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 11:29AM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/963685749,28290,.html"><img border="0" src="doc3_files/comments.gif">2 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Wow, found this very useful! Wanting
+ to buy a new CPU? Check out this detailed price list!<br><br><a href="http://www.sharkyextreme.com/hardware/weekly_cpu/" target="_blank">Click Here.</a> <br><br>Thanks Sharky
+ Extreme!</font><br><br><a name="newsitem963679881,35277,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">Fast Wallpapers</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 9:51AM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/963679881,35277,.html"><img border="0" src="doc3_files/comments.gif">0 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">FAST-MHz has released some wallpapers!
+ <a href="http://64.29.18.111/wallpaper/index.html" target="_blank">Click here</a> to view them. They come in sizes
+ 800x600 1024x768 and 1152x864. If you have your desktop set at a
+ larger size, just use the 'stretch' function in desktop properties
+ instead of 'center'. Works great.<br><br>In other news, we want to
+ finnish off all the sections at BP6.Com so, to start, we're going to
+ work on the <a href="http://bp6.gamesquad.net/uc.phtml" target="_blank">Picture Gallery</a>. To help us out, you can send in
+ all your cool, wierd, crazy pics that you may have to: <a href="mailto:thedaredevil@bp6.com">thedaredevil@bp6.com</a>. (The
+ topic being computers, duh! :0) And no... I don't want to recieve
+ any porno piccies in my mailbox! I have enough of those!) Kidding
+ guys.<br><br>Okay, that's all for now.<br><br>The
+ ÐÐ.</font><br><br><a name="newsitem963619505,3764,"></a>
+ <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Friday,
+ July 14, 2000</b></font></td></tr></tbody></table>
+<br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">Hey
+ There!</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 5:05PM
+ PDT</small>  <a href="http://bp6.gamesquad.net/news/963619505,3764,.html"><img border="0" src="doc3_files/comments.gif">7 comments</a>
+  | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Hey guys, just wanted to introduce
+ myself, some of you may have already met me on the BP6.com board.
+ I'll be posting up news from time to time now so, if you'd like, you
+ may send me some news to be posted if you find any ( we don't want
+ to flood Tim ;-) ).<br><br>My e-mail address is <a href="mailto:killz@i82hq.com">killz@i82hq.com</a><br><br>Ciao for
+ now.<br><br>The ÐÐ.</font><br><br></font><center><iframe frameborder="0" height="60" marginheight="0" marginwidth="0" noresize scrolling="no" src="doc3_files/ad_iframe.htm" width="468"><a href="http://ads.adflight.com/go_static.asp?asid=7708" target="_top"><img width="468" height="60" border="0" alt="Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&amp;sid=1881&amp;asid=7708"></a></iframe></center>
+</td></tr></tbody></table>
+</center>
+</td>
+ <td bgcolor="silver" valign="top" width="10%">
+ <center>
+ <p>
+ </p>
+<table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td colstart="1">
+ <center>
+<!-- <FORM ACTION="/cgi-bin/subscribe.pl" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">
+ <IMG SRC="/images/spacer.gif" WIDTH="111" HEIGHT="1"><BR>
+ <P><B><FONT SIZE="2" COLOR="#000066" FACE="Verdana">Newsletter</FONT></B><FONT SIZE="1" FACE="Verdana"><BR>
+ <INPUT TYPE="TEXT" NAME="email" SIZE="10" VALUE="ur@email.com"><BR>
+ <INPUT TYPE="HIDDEN" NAME="subscribe" SIZE="-1" VALUE="subscribe"><INPUT TYPE="IMAGE" SRC="/images/subscribe.gif" WIDTH="80"
+ HEIGHT="27" ALIGN="BOTTOM" BORDER="0"></FONT>
+ </FORM> --><form action="http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?emaillist" method="post">
+<img height="1" src="doc3_files/spacer.gif" width="111"><br><font size="1">Newsletter<br><input name="npemail" size="13" value="e-mail addr."><br><input name="npsubscribe" style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type="submit" value="Subscribe"><br><!-- <input type="submit" name="npunsubscribe" value="Unsubscribe" style="font-size: xx-small; font-family: Verdana; font-weight: bold; color: #ffffff; background-color: #000000;"> --></font>
+</form>
+<font size="1">
+ <form action="http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?search" method="post">Search news<br><input name="searchstring" size="13"><br><input name="submit" style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type="submit" value="Submit"><br><a href="http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?newsall">News
+ archive</a>
+</form></font> </center>
+</td></tr></tbody></table>
+<!-- <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" BGCOLOR="silver">
+ <TR>
+ <TD WIDTH="100%">
+ <P ALIGN="CENTER"><A HREF="http://www.free56k.com" target="_blank"><IMG SRC="/images/free56k.gif" WIDTH="100" HEIGHT="49"
+ ALIGN="BOTTOM" BORDER="0"></A>
+ </TD>
+ </TR>
+ </TABLE>
+--><table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="middle" width="100%">
+<!-- BEGIN GoTo.com Search Box --><script language="javascript" type="text/javascript">
+ <!--
+ if ((parseInt(navigator.appVersion) >= 3)
+ && (navigator.appName != "Netscape")) {
+ document.write("<IFRAME marginheight=0 frameborder=0 ");
+ document.write("marginwidth=0 scrolling=no width=100 height");
+ document.write("=90 ");
+ document.write("SRC=http://www.goto.com/d/ssn/dynconsole/?t");
+ document.write("ype=html&size=100x90&url=http://www.goto.co");
+ document.write("m/d/search/ssn/&target=_blank&Partner=SSN80");
+ document.write("42DF8478957377></IFRAME>");
+ } else if ((parseInt(navigator.appVersion) > 3)
+ && (navigator.appName == "Netscape")) {
+ document.write("<SCRIPT language=javascript type=text/javas");
+ document.write("cript ");
+ document.write("SRC=http://www.goto.com/d/ssn/dynconsole/?t");
+ document.write("ype=js&size=100x90&url=http://www.goto.com/");
+ document.write("d/search/ssn/&target=_blank&Partner=SSN8042");
+ document.write("DF8478957377></SC");
+ document.write("RIPT>");
+ } else {
+ document.write("<A TARGET=_blank ");
+ document.write("HREF=http://www.goto.com/d/search/ssn/?from");
+ document.write("GIF=true>");
+ document.write("<IMG ismap ");
+ document.write("SRC=http://www.goto.com/d/ssn/dynconsole/?t");
+ document.write("ype=gif&size=100x90></A>");
+ }
+ // -->
+ </script><b><noscript></noscript></b><a href="http://www.goto.com/d/search/ssn/?fromGIF=true" target="_blank"><img align="bottom" border="0" height="90" ismap src="doc3_files/100x90.gif" width="100"></a><b><a href="http://www.goto.com/d/search/ssn/?fromGIF=true" target="_blank">
+ </a></b><b></b><b><!-- END GoTo.com Search Box --></b><!-- Pricewatch Search Box --><form action="http://www.pricewatch.com/search/search.asp" method="get" target="_Blank">
+ <center>
+ <p><b><font color="white" face="ARIAL, HELVETICA" size="1">PC Price
+ Search<br></font></b><input maxlength="30" name="criteria" size="10"><br><input name="submit" style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type="submit" value="Search"></p>
+</center>
+</form>
+<!-- Pricewatch Search Box --><a href="http://www.puicorp.com/bp6specials.htm" target="_BLANK"><img src="doc3_files/puibp6.gif"></a><br><br><br><br><a href="http://store.yahoo.com/dunamis-site/maxtor.html" target="_BLANK"><img alt="BP6.com Special - Enter CODE: BP6-hd in the order (notes) to receive a discount" src="doc3_files/hd5.gif"><font size="1"><br>BP6.COM
+ Special<br>Code:BP6-hd</font></a> </td></tr></tbody></table>
+<table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%"><tbody><tr><td width="100%"> </td></tr></tbody></table>
+</center>
+</td>
+</tr></tbody></table>
+<!-- </TABLE>--><center></center>
+<tr>
+<td colspan="3" valign="TOP" height="70"> </td> </tr>
+<table border="0" width="780"><tbody>
+<tr><td width="780">
+ <p align="center"><font color="#999999" face="verdana,arial" size="1">Copyright
+ ©1999-2000 BP6.com, All rights reserved.<br>Got news? Send it to </font><a href="mailto:tim@bp6.com"><font color="white" face="Verdana" size="1">Tim</font></a> </p>
+</td></tr>
+<!-- <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>
+<script> window.open=NS_ActualOpen; </script>
+</body>
+</html>
diff --git a/result/HTML/doc3.htm.err b/result/HTML/doc3.htm.err
new file mode 100644
index 0000000..1e63bab
--- /dev/null
+++ b/result/HTML/doc3.htm.err
@@ -0,0 +1,69 @@
+./test/HTML/doc3.htm:10: HTML parser error : Misplaced DOCTYPE declaration
+<!-- END Naviscope Javascript --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN
+ ^
+./test/HTML/doc3.htm:52: HTML parser error : htmlParseEntityRef: expecting ';'
+ href="http://ads.gamesquad.net/addclick.exe/adclick.cgi?REGION=game|tech|ent&id
+ ^
+./test/HTML/doc3.htm:52: HTML parser error : htmlParseEntityRef: expecting ';'
+_top"><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&media
+ ^
+./test/HTML/doc3.htm:52: HTML parser error : htmlParseEntityRef: expecting ';'
+><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&media=1&id
+ ^
+./test/HTML/doc3.htm:145: HTML parser error : error parsing attribute name
+ width=70 Gentus?.?></A><BR><A
+ ^
+./test/HTML/doc3.htm:148: HTML parser error : Unexpected end tag : p
+ </P></TD></TR></TBODY></TABLE></CENTER></TD></TR></TBODY></TABLE></CENTER></P>
+ ^
+./test/HTML/doc3.htm:236: HTML parser error : Unexpected end tag : font
+ Specials<BR><BR></FONT></A><BR></FONT></A><B><FONT color=yellow
+ ^
+./test/HTML/doc3.htm:236: HTML parser error : Unexpected end tag : a
+ Specials<BR><BR></FONT></A><BR></FONT></A><B><FONT color=yellow
+ ^
+./test/HTML/doc3.htm:747: HTML parser error : htmlParseEntityRef: expecting ';'
+er=0 alt="Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&sid
+ ^
+./test/HTML/doc3.htm:747: HTML parser error : htmlParseEntityRef: expecting ';'
+Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&sid=1881&asid
+ ^
+./test/HTML/doc3.htm:747: HTML parser error : Unexpected end tag : li
+light.com/ad_static.asp?pid=2097&sid=1881&asid=7708"></a></IFRAME></CENTER></LI>
+ ^
+./test/HTML/doc3.htm:747: HTML parser error : Unexpected end tag : font
+om/ad_static.asp?pid=2097&sid=1881&asid=7708"></a></IFRAME></CENTER></LI></FONT>
+ ^
+./test/HTML/doc3.htm:747: HTML parser error : Unexpected end tag : p
+=7708"></a></IFRAME></CENTER></LI></FONT></TD></TR></TBODY></TABLE></CENTER></P>
+ ^
+./test/HTML/doc3.htm:772: HTML parser error : Unexpected end tag : form
+ archive</A></FONT> </FORM></CENTER></TD></TR></TBODY></TABLE><!--
+ ^
+./test/HTML/doc3.htm:820: HTML parser error : Unexpected end tag : a
+ </A></A></B><B></NOSCRIPT></B><B><!-- END GoTo.com Search Box --></B
+ ^
+./test/HTML/doc3.htm:820: HTML parser error : Unexpected end tag : noscript
+ </A></A></B><B></NOSCRIPT></B><B><!-- END GoTo.com Search Box --></B
+ ^
+./test/HTML/doc3.htm:826: HTML parser error : Opening and ending tag mismatch: form and center
+ </FORM><!-- Pricewatch Search Box --><A
+ ^
+./test/HTML/doc3.htm:833: HTML parser error : Unexpected end tag : p
+ Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></T
+ ^
+./test/HTML/doc3.htm:833: HTML parser error : Opening and ending tag mismatch: center and td
+ Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></T
+ ^
+./test/HTML/doc3.htm:839: HTML parser error : Unexpected end tag : p
+width="100%">&nbsp;</TD></TR></TBODY></TABLE></P></CENTER></TR></TBODY></TABLE><
+ ^
+./test/HTML/doc3.htm:840: HTML parser error : Unexpected end tag : td
+<CENTER></CENTER></TD></TR><TR><TD COLSPAN="3" VALIGN="TOP"
+ ^
+./test/HTML/doc3.htm:840: HTML parser error : Unexpected end tag : tr
+<CENTER></CENTER></TD></TR><TR><TD COLSPAN="3" VALIGN="TOP"
+ ^
+./test/HTML/doc3.htm:841: HTML parser error : Unexpected end tag : table
+HEIGHT="70">&nbsp;</TD> </TR></TABLE>
+ ^
diff --git a/result/HTML/doc3.htm.sax b/result/HTML/doc3.htm.sax
new file mode 100644
index 0000000..93f5a9f
--- /dev/null
+++ b/result/HTML/doc3.htm.sax
@@ -0,0 +1,2919 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(HTML, -//W3C//DTD HTML 4.0 Transitional//EN, )
+SAX.comment( saved from url=(0025)http://bp6.gamesquad.net/ )
+SAX.comment( BEGIN Naviscope Javascript )
+SAX.startElement(html)
+SAX.startElement(head)
+SAX.startElement(title)
+SAX.characters(BP6.com #1 online resource for, 47)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(script, language='javascript')
+SAX.cdata(
+ NS_ActualOpen=wind, 199)
+SAX.endElement(script)
+SAX.ignorableWhitespace(
+, 2)
+SAX.comment( END Naviscope Javascript )
+SAX.error: Misplaced DOCTYPE declaration
+SAX.internalSubset(HTML, -//W3C//DTD HTML 3.2//EN, )
+SAX.comment(last modified on Tuesday, February 22, 2000 11:47 PM )
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(meta, content='text/html;CHARSET=iso-8859-1', http-equiv='Content-Type')
+SAX.endElement(meta)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(meta, content='Tim', name='Author')
+SAX.endElement(meta)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(style, type='text/css')
+SAX.cdata(A.nav {
+ COLOR: #003399; TEXT, 115)
+SAX.endElement(style)
+SAX.ignorableWhitespace(
+
+, 4)
+SAX.startElement(script, language='JavaScript')
+SAX.cdata(
+, 1)
+SAX.comment( Idea by: Nic Wolfe (Nic@TimelapseProductions.com) )
+SAX.cdata(
+, 1)
+SAX.comment( Web URL: http://fineline.xs.mw )
+SAX.cdata(
+
+, 2)
+SAX.comment( This script and many more are available free online at )
+SAX.cdata(
+, 1)
+SAX.comment( The JavaScript Source!! http://javascript.internet.com )
+SAX.cdata(
+
+, 2)
+SAX.comment( Begin
+function popUp(URL) {
+day = new Date();
+id = day.getTime();
+eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0, location=0, statusbars=0, menubars=0, resizable=0, width=145, height=250');");
+}
+// End )
+SAX.cdata(
+, 1)
+SAX.endElement(script)
+SAX.ignorableWhitespace(
+
+, 4)
+SAX.startElement(meta, content='MSHTML 5.00.3103.1000', name='GENERATOR')
+SAX.endElement(meta)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(body, alink='red', bgcolor='black', link='red', text='white', vlink='red')
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(p)
+SAX.characters(
+, 2)
+SAX.endElement(p)
+SAX.startElement(div, align='center')
+SAX.characters(
+, 2)
+SAX.startElement(table, border='0', cellpadding='0', cellspacing='0', width='80%')
+SAX.characters(
+ , 4)
+SAX.startElement(tbody)
+SAX.characters(
+ , 4)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, valign='top', width='31')
+SAX.startElement(a, href='http://bp6.gamesquad.net/')
+SAX.startElement(img, align='bottom', border='0', height='74', src='doc3_files/logo.gif', width='252')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.endElement(td)
+SAX.characters(
+ , 6)
+SAX.startElement(td, align='left', bgcolor='#000000')
+SAX.startElement(img, height='15', src='doc3_files/spacer.gif', width='15')
+SAX.endElement(img)
+SAX.comment( START GAMESQUAD.NET IFRAME RICH MEDIA CODE )
+SAX.characters( , 1)
+SAX.comment( © 2000 GameSquad.net All Rights Reserved. )
+SAX.startElement(iframe, border='0', frameborder='no', height='60', marginheight='0', marginwidth='0', scrolling='no', src='doc3_files/adcycle.htm', width='468')
+SAX.characters(
+, 1)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(a, href='http://ads.gamesquad.net/addclick.exe/adclick.cgi?REGION=game|tech|ent&amp;id=1', target='_top')
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(img, src='http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&amp;media=1&amp;id=1', width='468', height='60', border='0', alt='GSN ROS Ad')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.characters(
+, 1)
+SAX.endElement(iframe)
+SAX.comment( END GAMESQUAD.NET IFRAME RICH MEDIA CODE )
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(img, height='15', src='doc3_files/spacer.gif', width='400')
+SAX.endElement(img)
+SAX.characters( , 1)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.characters(
+ , 4)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#003399', colspan='2')
+SAX.characters(
+ , 8)
+SAX.startElement(p, align='right')
+SAX.startElement(img, align='right', border='0', height='18', hspace='0', src='doc3_files/trcorner.gif', width='20')
+SAX.endElement(img)
+SAX.startElement(img, align='left', border='0', height='18', hspace='0', src='doc3_files/tlcorner.gif', width='20')
+SAX.endElement(img)
+SAX.startElement(font, face='Verdana', size='2')
+SAX.characters(Monday, July 31st, 2000, 23)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.characters(
+ , 4)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, colspan='2')
+SAX.characters(
+ , 8)
+SAX.startElement(table, bgcolor='#003399', border='0', cellpadding='0', cellspacing='4', width='100%')
+SAX.startElement(tbody)
+SAX.characters(
+ , 10)
+SAX.startElement(tr)
+SAX.characters(
+ , 12)
+SAX.startElement(td, bgcolor='#666666', width='100%')
+SAX.characters(
+ , 14)
+SAX.startElement(center)
+SAX.characters(
+ , 14)
+SAX.startElement(p)
+SAX.characters(
+ , 14)
+SAX.endElement(p)
+SAX.startElement(table, bgcolor='black', border='0', cellpadding='0', cellspacing='1', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td, background='doc3_files/hscan.gif', bgcolor='#666666', width='100%')
+SAX.startElement(img, height='1', src='doc3_files/spacer.gif', width='738')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 20)
+SAX.startElement(center)
+SAX.characters(
+ , 20)
+SAX.startElement(table, border='0', cellpadding='2', cellspacing='0', width='91%')
+SAX.characters(
+ , 22)
+SAX.startElement(tbody)
+SAX.characters(
+ , 22)
+SAX.startElement(tr)
+SAX.characters(
+ , 24)
+SAX.startElement(td, valign='top', width='15%')
+SAX.characters(
+ , 26)
+SAX.startElement(p, align='center')
+SAX.startElement(a, href='http://bp6.gamesquad.net/specs.phtml')
+SAX.startElement(img, align='bottom', alt='Abit BP6 Motherboard specification and information.', border='0', height='45', src='doc3_files/bp6icon.gif', width='70')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/specs.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(BP6 Specs, 9)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.characters(
+ , 25)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.characters(
+ , 24)
+SAX.startElement(td, valign='top', width='15%')
+SAX.characters(
+ , 26)
+SAX.startElement(p, align='center')
+SAX.startElement(a, href='http://bp6.gamesquad.net/bxcool.phtml')
+SAX.startElement(img, align='bottom', alt='How to cool the BX Chipset on your BP6.', border='0', height='45', src='doc3_files/bxcool.gif', width='70')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/uc.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(BX Cooling, 10)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.characters(
+ , 27)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.characters(
+ , 24)
+SAX.startElement(td, valign='top', width='15%')
+SAX.characters(
+ , 26)
+SAX.startElement(p, align='center')
+SAX.startElement(a, href='http://bp6.gamesquad.net/contest.phtml')
+SAX.startElement(img, align='bottom', alt='The U;timate Gaming Contest - Coming Soon!', border='0', height='45', src='doc3_files/ugmcontest.gif', width='70')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/contest.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(UGM Contest, 11)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.characters(
+ , 27)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.characters(
+ , 24)
+SAX.startElement(td, valign='top', width='15%')
+SAX.characters(
+ , 26)
+SAX.startElement(p, align='center')
+SAX.startElement(a, href='http://bp6.gamesquad.net/uc.phtml')
+SAX.startElement(img, align='bottom', alt='Cooling &amp; Heatsink review for the BP6.', border='0', height='45', src='doc3_files/alpha.gif', width='70')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/uc.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Heatsinks, 9)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.characters(
+ , 25)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.characters(
+ , 24)
+SAX.startElement(td, valign='top', width='15%')
+SAX.characters(
+ , 26)
+SAX.startElement(p, align='center')
+SAX.startElement(a, href='http://bp6.gamesquad.net/101.phtml')
+SAX.startElement(img, align='bottom', alt='BP6 101 - Class is now in session. Welcome newbies!', border='0', height='45', src='doc3_files/bp6101.gif', width='70')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/101.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(BP6 101, 7)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.characters(
+ , 25)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.characters(
+ , 24)
+SAX.startElement(td, valign='top', width='15%')
+SAX.characters(
+ , 26)
+SAX.startElement(p, align='center')
+SAX.startElement(a, href='http://bp6.gamesquad.net/win2k_install.phtml')
+SAX.startElement(img, align='bottom', alt='Install guide for installing Windows 2000 on the BP6 ', border='0', height='45', src='doc3_files/win2kht.gif', width='70')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/win2k_install.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Win2k Install, 13)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.characters(
+ , 27)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.characters(
+ , 24)
+SAX.startElement(td, valign='top', width='15%')
+SAX.characters(
+ , 26)
+SAX.startElement(p, align='center')
+SAX.startElement(a, href='http://www.gentus.com/')
+SAX.error: error parsing attribute name
+SAX.startElement(img, align='bottom', alt='Taking a first look at the Abit Linux release called ', border='0', height='45', src='doc3_files/gentusbox.gif', width='70', gentus)
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.gentus.com/')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Gentus, 6)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.characters(
+ , 21)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.endElement(center)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.endElement(center)
+SAX.error: Unexpected end tag : p
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.characters(
+, 2)
+SAX.startElement(table, bgcolor='#003399', border='0', cellspacing='6', width='80%')
+SAX.characters(
+ , 4)
+SAX.startElement(tbody)
+SAX.characters(
+ , 4)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='black', valign='top', width='10%')
+SAX.characters(
+ , 8)
+SAX.startElement(table, border='0', cellpadding='3', cellspacing='0', width='100%')
+SAX.characters(
+ , 10)
+SAX.startElement(tbody)
+SAX.characters(
+ , 10)
+SAX.startElement(tr)
+SAX.characters(
+ , 12)
+SAX.startElement(td, width='100%')
+SAX.startElement(img, height='1', src='doc3_files/spacer.gif', width='111')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(b)
+SAX.startElement(font, color='yellow', face='Verdana', size='2')
+SAX.characters(REVIEWS, 7)
+SAX.endElement(font)
+SAX.endElement(b)
+SAX.startElement(font, face='Verdana', size='2')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 14)
+SAX.startElement(hr, align='center')
+SAX.endElement(hr)
+SAX.characters(
+ , 14)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/bp6reviews.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(BP6 Reviews, 11)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/h2o.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(BP6 Watercooling, 16)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/bxcool.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(BX Chipset Cooling, 18)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/benchmark.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Benchmarks, 10)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/bp6fsb.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(BP6FSB Utility, 14)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/powerleap.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(PowerLeap NEO S370, 18)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/seti.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(SETI on the BP6, 15)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/orbs.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Golden Orbs I, 13)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/orbs/orbs2.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Golden Orbs II, 14)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/Q6fix.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(VTT Solution, 12)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(b)
+SAX.startElement(font, color='yellow', face='Verdana', size='2')
+SAX.characters(NAVIGATE, 8)
+SAX.endElement(font)
+SAX.endElement(b)
+SAX.startElement(font, color='yellow', face='Verdana', size='2')
+SAX.characters(
+ , 15)
+SAX.startElement(hr, align='center')
+SAX.endElement(hr)
+SAX.characters(
+ , 14)
+SAX.endElement(font)
+SAX.startElement(a, href='http://www.bp6.com/')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(News, 4)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/chat.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Online Text Chat, 16)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='javascript:popUp(&apos;chat_popup.htm&apos;)')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Voice Chat, 10)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://216.247.220.192/Forum')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Messageboard, 12)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/cooling')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Temp. Converter, 15)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/uc.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Picture Gallery, 15)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/bios.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Latest BIOS, 11)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/files/')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Drivers , 8)
+SAX.characters(&amp;, 1)
+SAX.characters( Files, 6)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/uc.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(UGM of the week, 15)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/contest.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(BP6 Contest, 11)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(b)
+SAX.startElement(font, color='yellow', face='Verdana', size='2')
+SAX.characters(OTHER STUFF, 11)
+SAX.endElement(font)
+SAX.endElement(b)
+SAX.startElement(font, color='yellow', face='Verdana', size='2')
+SAX.characters(
+
+ , 17)
+SAX.startElement(hr, align='center')
+SAX.endElement(hr)
+SAX.characters(
+ , 14)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/whois.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Who is Tim?, 11)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='mailto:tim@bp6.com')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Contact BP6.com, 15)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/uc.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Affiliates Section, 18)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(font, face='Verdana', size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/uc.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Sponsors Section , 17)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(a, href='http://bp6.gamesquad.net/links.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Links, 5)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(font, color='yellow', face='Verdana', size='2')
+SAX.characters(PC SPECIALS, 11)
+SAX.endElement(font)
+SAX.endElement(b)
+SAX.startElement(font, color='yellow', face='Verdana', size='2')
+SAX.characters(
+ , 15)
+SAX.startElement(hr, align='center')
+SAX.endElement(hr)
+SAX.characters(
+ , 14)
+SAX.endElement(font)
+SAX.startElement(a, href='http://bp6.gamesquad.net/specials.phtml')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Vendor
+ Specials, 29)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.error: Unexpected end tag : font
+SAX.error: Unexpected end tag : a
+SAX.startElement(b)
+SAX.startElement(font, color='yellow', face='Verdana', size='2')
+SAX.characters(Pic of the day, 14)
+SAX.endElement(font)
+SAX.endElement(b)
+SAX.characters(
+ , 14)
+SAX.startElement(hr)
+SAX.endElement(hr)
+SAX.characters(
+
+ , 29)
+SAX.startElement(center)
+SAX.characters(
+ , 14)
+SAX.startElement(p, align='center')
+SAX.startElement(font, face='Verdana, Arial, Helvetica', size='1')
+SAX.startElement(a, href='http://bp6.gamesquad.net/cgi-bin/schlabo/potd.pl')
+SAX.startElement(img, alt='No picture is available for today.', border='0', src='doc3_files/potd_na_110x83.gif')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.characters( , 1)
+SAX.endElement(font)
+SAX.endElement(p)
+SAX.endElement(center)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 14)
+SAX.startElement(center)
+SAX.endElement(center)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<A HREF="code:javascript:ID_FTPWebView.InvokeHelp()"><FONT SIZE="1" COLOR="white" FACE="Verdana">FTP Help</FONT></A>)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.endElement(td)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='white', valign='top', width='80%')
+SAX.startElement(img, height='1', src='doc3_files/spacer.gif', width='490')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 8)
+SAX.startElement(center)
+SAX.characters(
+ , 8)
+SAX.startElement(p)
+SAX.characters(
+ , 8)
+SAX.endElement(p)
+SAX.startElement(table, bgcolor='white', border='0', cellpadding='10', cellspacing='0', height='100%', width='100%')
+SAX.characters(
+ , 10)
+SAX.startElement(tbody)
+SAX.characters(
+ , 10)
+SAX.startElement(tr)
+SAX.characters(
+ , 12)
+SAX.startElement(td, bgcolor='white', valign='top', width='100%')
+SAX.characters(
+ , 14)
+SAX.startElement(center)
+SAX.startElement(a, href='http://www.encounter2001.com/', target='_blank')
+SAX.startElement(img, border='0', height='60', src='doc3_files/banner2.gif', width='468')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.endElement(center)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='news_top')
+SAX.endElement(a)
+SAX.startElement(font, color='#003366', face='verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Headlines, 9)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem965012956,78924,')
+SAX.characters(Chat
+ with ABIT -, 41)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem964766837,26344,')
+SAX.characters(Fixed
+ wallpaper , 43)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem964762841,25865,')
+SAX.characters(Seti
+ update - 10, 39)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem964732235,45502,')
+SAX.characters(Judge
+ gives Naps, 57)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem964713289,83675,')
+SAX.characters(Ram
+ Sinks.. more, 83)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem964671589,7831,')
+SAX.characters(is
+ it [H]ard? - , 40)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem964644047,60218,')
+SAX.characters(WiLd
+ CaSe!! - 1:, 38)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem964631110,84122,')
+SAX.characters(What
+ the heck is, 58)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem964587833,74573,')
+SAX.characters(HELLO
+ EVERYONE!!, 45)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='arial', size='1')
+SAX.startElement(a, class='nav', href='http://bp6.gamesquad.net/index.phtml#newsitem964429577,13375,')
+SAX.characters(BP6
+ Q3 server up, 57)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( NP v3.7.5 )
+SAX.startElement(a, name='newsitem965012956,78924,')
+SAX.endElement(a)
+SAX.characters(
+ , 14)
+SAX.startElement(table, bgcolor='#003399', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td)
+SAX.startElement(font, color='#ffffff', face='Verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Sunday,
+ Ju, 41)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<hr noshade width=100%>)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(Chat with
+ ABIT, 28)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:Holodeck@bp6.com')
+SAX.characters(Holodeck2, 9)
+SAX.endElement(a)
+SAX.characters( @ 8:09PM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/965012956,78924,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(0 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(I, 1)
+SAX.characters(&rsquo;, 3)
+SAX.characters(m slacking a little. All game , 83)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Wallpaper update: I got
+ , 130)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(b)
+SAX.startElement(a, href='http://fullon3d.com/chat/abit/', target='3d')
+SAX.characters(Fullon3d had a live chat with , 69)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.characters(Submitted by: MJS, 17)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Here, 4)
+SAX.characters(&rsquo;, 3)
+SAX.characters(s a little clip:, 16)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters([Falcon]
+ BP6-2??, 30)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters([EricBoeing] We already have a, 75)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters([EricBoeing] but it's OEM only, 30)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters([EricBoeing] the full ATX
+ , 74)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964766837,26344,')
+SAX.endElement(a)
+SAX.characters(
+ , 14)
+SAX.startElement(table, bgcolor='#003399', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td)
+SAX.startElement(font, color='#ffffff', face='Verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Thursday,
+ , 43)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<hr noshade width=100%>)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(Fixed
+ wallpaper, 29)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:Holodeck@bp6.com')
+SAX.characters(Holodeck2, 9)
+SAX.endElement(a)
+SAX.characters( @ 11:47PM
+ PDT, 28)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/964766837,26344,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(5 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.startElement(b)
+SAX.characters(Get them now!!, 14)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(This is a
+ fixed , 106)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(img, height='180', src='doc3_files/3-800.jpg', width='240')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(It's still the Intels Inside o, 104)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Thanks to Matt for
+ , 57)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(I would also like to thank Kev, 133)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(And 1 more person, THANK YOU T, 90)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(If you need a weird resolution, 59)
+SAX.startElement(a, href='mailto:Holodeck2@home.com')
+SAX.characters(e-mail, 6)
+SAX.endElement(a)
+SAX.characters( me requesting
+ f, 37)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(If you have ideas or more erro, 47)
+SAX.startElement(a, href='mailto:Holodeck2@home.com')
+SAX.characters(mailto:Holodeck2@home.com, 25)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='doc3_files/3-800.jpg', target='800')
+SAX.characters(800x600 , 8)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.bp6.com/pics/holodeck2/wallpaper/3-1024.jpg', target='800')
+SAX.characters(1024x768 , 9)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.bp6.com/pics/holodeck2/wallpaper/3-1152.jpg', target='800')
+SAX.characters(1152x864 , 9)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.bp6.com/pics/holodeck2/wallpaper/3-1280x1024.jpg', target='800')
+SAX.characters(1280x1024 , 10)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.bp6.com/pics/holodeck2/wallpaper/3-1600.jpg', target='800')
+SAX.characters(1600x1200 , 10)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 14)
+SAX.startElement(p)
+SAX.characters(Enjoy :-), 9)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 14)
+SAX.endElement(p)
+SAX.startElement(p)
+SAX.startElement(a, href='mailto:Holodeck2@home.com')
+SAX.characters(Holodeck2,, 10)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters([H]ard at
+ work o, 65)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(p)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964762841,25865,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(Seti update, 11)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:Holodeck@bp6.com')
+SAX.characters(Holodeck2, 9)
+SAX.endElement(a)
+SAX.characters( @ 10:40PM
+ PDT, 28)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/964762841,25865,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(5 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.startElement(img, height='54', src='doc3_files/setiupdate.jpg', width='400')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(You like the
+ pic, 31)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Bp6 User Group Update:, 22)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Completed 61531
+ , 37)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(b)
+SAX.characters(#168 on Top 200 All Groups, 26)
+SAX.endElement(b)
+SAX.characters( (Going to pass CLRC in
+ , 49)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(b)
+SAX.characters(#74 on Top 200 Teams, 20)
+SAX.endElement(b)
+SAX.characters( (Gaining fast on
+ , 42)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(We are flying though at the sp, 82)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Good job everyone!!, 19)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Check this page at
+ , 67)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964732235,45502,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(Judge gives Napster the
+ , 44)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:Holodeck@bp6.com')
+SAX.characters(Holodeck2, 9)
+SAX.endElement(a)
+SAX.characters( @ 2:10PM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/964732235,45502,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(0 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Good afternoon for everyone li, 135)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(I woke up and thought about po, 488)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.msnbc.com/news/437532.asp', target='Judge vs Napster')
+SAX.characters(Judge shuts Napster down
+ , 38)
+SAX.startElement(p)
+SAX.startElement(img, height='143', src='doc3_files/669915.jpg', width='200')
+SAX.endElement(img)
+SAX.endElement(p)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Check out the Goofy guy in the, 35)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(He's Sean
+ Fannin, 52)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Got news?? , 11)
+SAX.startElement(a, href='mailto:Holodeck2@home.com')
+SAX.characters(mailto:Holodeck2@home.com, 25)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964713289,83675,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(Ram Sinks.. more cooling for s, 56)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:tim@bp6.com')
+SAX.characters(tim, 3)
+SAX.endElement(a)
+SAX.characters( @ 8:54AM PDT, 13)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/964713289,83675,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(0 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Need some cooling for your Vid, 106)
+SAX.startElement(a, href='http://www.overclockershideout.com/RamSinks.html', target='_BLANK')
+SAX.characters(Overclockers Hiedout Ram Sinks, 30)
+SAX.endElement(a)
+SAX.characters( They just notified
+ , 57)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(img, border='1', src='doc3_files/ramsink.jpg')
+SAX.endElement(img)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964671589,7831,')
+SAX.endElement(a)
+SAX.characters(
+ , 14)
+SAX.startElement(table, bgcolor='#003399', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td)
+SAX.startElement(font, color='#ffffff', face='Verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Wednesday, July 26,
+ , 38)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<hr noshade width=100%>)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(is it
+ [H]ard?, 27)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:Holodeck@bp6.com')
+SAX.characters(Holodeck2, 9)
+SAX.endElement(a)
+SAX.characters( @ 9:19PM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/964671589,7831,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(0 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Big heatsinks are good, very g, 71)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(You can never can have a too b, 99)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(img, height='173', src='doc3_files/voodooside2.jpg', width='230')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(My overclocked
+ V, 74)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Peltier and
+ wate, 50)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters((if you pry off the heatsink y, 66)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(it was originally posted on , 28)
+SAX.startElement(a, href='http://www.hardocp.com/')
+SAX.characters([H]ardOCP , 10)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(I, 1)
+SAX.characters(&rsquo;, 3)
+SAX.characters(m not only a
+ BP6, 55)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964644047,60218,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(WiLd CaSe!!, 11)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:Holodeck@bp6.com')
+SAX.characters(Holodeck2, 9)
+SAX.endElement(a)
+SAX.characters( @ 1:40PM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/964644047,60218,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(8 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Now this person really knows h, 70)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Addin an 18" Fan!! WOW!!, 24)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.envador.com/Photos/PVCII/', target='_blank')
+SAX.startElement(img, src='doc3_files/TN_OpenedUp1.jpg')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Click to go to his
+ , 38)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964631110,84122,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(What the heck is a
+ , 44)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:Holodeck@bp6.com')
+SAX.characters(Holodeck2, 9)
+SAX.endElement(a)
+SAX.characters( @ 10:05AM
+ PDT, 28)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/964631110,84122,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(6 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(This is for all you people who, 78)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(The quest fo the Perfect
+ , 46)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.tweakmax.com/html/peltier/peltier-1.cfm', target='_blank')
+SAX.startElement(img, src='doc3_files/peltier.jpg')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Thanks to
+ , 24)
+SAX.startElement(a, href='http://www.tweakmax.com/', target='_blank')
+SAX.characters(TweakMax.com, 12)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Note: Today morning when I wok, 397)
+SAX.startElement(img, src='doc3_files/smile.gif')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(I'm not angry at anyone...
+ , 71)
+SAX.startElement(img, src='doc3_files/tongue.gif')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964587833,74573,')
+SAX.endElement(a)
+SAX.characters(
+ , 14)
+SAX.startElement(table, bgcolor='#003399', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td)
+SAX.startElement(font, color='#ffffff', face='Verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Tuesday,
+ J, 42)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<hr noshade width=100%>)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(HELLO
+ EVERYONE!!, 31)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:Holodeck@bp6.com')
+SAX.characters(Holodeck2, 9)
+SAX.endElement(a)
+SAX.characters( @ 10:03PM
+ PDT, 28)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Hello
+ everyone, , 47)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Who is this Holodeck2 person , 66)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(I, 1)
+SAX.characters(&rsquo;, 3)
+SAX.characters(m a regular on the bp6 message, 97)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(I, 1)
+SAX.characters(&rsquo;, 3)
+SAX.characters(m the
+ self-procl, 85)
+SAX.characters(&rsquo;, 3)
+SAX.characters(ve
+ probably alre, 68)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(My computer
+ is a, 200)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Any Questions or comments, you, 98)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Ways to contact
+ , 33)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(E-mail: , 8)
+SAX.startElement(a, href='mailto:Holodeck2@home.com')
+SAX.characters(Holodeck2@home.com, 18)
+SAX.endElement(a)
+SAX.characters( (All E-mails
+ wi, 82)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(When you
+ write m, 163)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.aol.com/aim')
+SAX.characters(AIM: , 5)
+SAX.endElement(a)
+SAX.characters(Holodeck2 (instant response
+, 46)
+SAX.characters(&rsquo;, 3)
+SAX.characters(m in front of my comp and not , 53)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.icq.com/download')
+SAX.characters(ICQ: , 5)
+SAX.endElement(a)
+SAX.characters(82640218 (rarely
+ , 34)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(P.S. If someone named , 22)
+SAX.characters(&ldquo;, 3)
+SAX.characters(Digital Vortex, 14)
+SAX.characters(&rdquo;, 3)
+SAX.characters( on either Quake 3
+ , 51)
+SAX.characters(&rsquo;, 3)
+SAX.characters(s probably me. ;-), 18)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964429577,13375,')
+SAX.endElement(a)
+SAX.characters(
+ , 14)
+SAX.startElement(table, bgcolor='#003399', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td)
+SAX.startElement(font, color='#ffffff', face='Verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Monday,
+ Ju, 41)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<hr noshade width=100%>)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(BP6 Q3 server up and
+ , 44)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:tim@bp6.com')
+SAX.characters(tim, 3)
+SAX.endElement(a)
+SAX.characters( @ 2:06AM PDT, 13)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/964429577,13375,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(3 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Setup a Q3 server for anyone w, 355)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters((BTW-
+ there are , 68)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem964425184,95812,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(BIOS Savior to the
+ , 43)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:tim@bp6.com')
+SAX.characters(tim, 3)
+SAX.endElement(a)
+SAX.characters( @ 12:53AM PDT, 14)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/964425184,95812,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(2 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Do you sweat during the BIOS f, 167)
+SAX.startElement(b)
+SAX.characters(RD1 BIOS Savior, 15)
+SAX.endElement(b)
+SAX.characters(" and it
+ plugs i, 520)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.ioss.com.tw/eg/rd1/RD1info0004.PDF', target='_NEW')
+SAX.characters(Manufacturers Brochure, 22)
+SAX.endElement(a)
+SAX.characters( (PDF Format), 13)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://192.216.185.10/mwave/doc/A06950.html', target='_BLANK"')
+SAX.characters(Another info page, 17)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://192.216.185.10/mwave/ProdMB-AC-MW.hmx?UID=&amp;CID=&amp;updepts=MB&amp;DNAME=%3Cb%3EMotherboards%3C%2Fb%3E&amp;Back=ProdMB-AC-MW.hmx?', target='_BLANK')
+SAX.characters(Available for about $20, 23)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(img, src='doc3_files/rd1.jpg')
+SAX.endElement(img)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem963875853,12731,')
+SAX.endElement(a)
+SAX.characters(
+ , 14)
+SAX.startElement(table, bgcolor='#003399', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td)
+SAX.startElement(font, color='#ffffff', face='Verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Monday,
+ Ju, 41)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<hr noshade width=100%>)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(How To
+ Overclock, 30)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:killz@i82hq.com')
+SAX.characters(DareDevil, 9)
+SAX.endElement(a)
+SAX.characters( @ 4:17PM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/963875853,12731,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(3 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(For those of you who are new t, 209)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://netkills.qgl.org/a_oc_comp.shtml', target='_blank')
+SAX.characters(How To Overclock, 16)
+SAX.endElement(a)
+SAX.characters( , 1)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem963875485,23353,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(The Cardcooler
+ X, 31)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:killz@i82hq.com')
+SAX.characters(DareDevil, 9)
+SAX.endElement(a)
+SAX.characters( @ 4:11PM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/963875485,23353,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(1 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Wow! I am impressed! Nevermind, 98)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Even if your
+ not, 345)
+SAX.endElement(i)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Check this out!, 15)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.brokenpixel.com/articles/coolerXT/cardcoolerXT_1.shtml', target='_blank')
+SAX.characters(http://www.brokenpixel.com/art, 65)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem963859982,88982,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters('Nerd
+ Inside', 27)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:killz@i82hq.com')
+SAX.characters(DareDevil, 9)
+SAX.endElement(a)
+SAX.characters( @ 11:53AM
+ PDT, 28)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/963859982,88982,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(1 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(We all need to have some fun , 181)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 14)
+SAX.startElement(div, align='center')
+SAX.startElement(a, href='http://www.nerdgear.com/', target='_blank')
+SAX.startElement(img, border='0', src='doc3_files/nerdinside.gif')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.endElement(div)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem963819796,9688,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(Dual PSU Wiring diagram... (pr, 81)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:tim@bp6.com')
+SAX.characters(tim, 3)
+SAX.endElement(a)
+SAX.characters( @ 12:43AM PDT, 14)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/963819796,9688,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(11 comments, 11)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(When is comes to overclocking , 848)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(View Diagram 1 , 15)
+SAX.startElement(a, href='http://bp6.gamesquad.net/images/wiring.jpg', target='_BLANK')
+SAX.characters(here, 4)
+SAX.endElement(a)
+SAX.characters(., 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(View Diagram 2 , 15)
+SAX.startElement(a, href='http://bp6.gamesquad.net/images/psu2.gif', target='_BLANK')
+SAX.characters(here, 4)
+SAX.endElement(a)
+SAX.characters(., 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(I used Tap-In Squeeze Connecto, 150)
+SAX.startElement(a, href='http://www.radioshack.com/ProductCatalog/ProductDetail/Index/1,2098,,00.html?SKUString1=64&amp;SKUString2=3053', target='_blank')
+SAX.characters(click here, 10)
+SAX.endElement(a)
+SAX.characters(., 1)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem963766655,78511,')
+SAX.endElement(a)
+SAX.characters(
+ , 14)
+SAX.startElement(table, bgcolor='#003399', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td)
+SAX.startElement(font, color='#ffffff', face='Verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Sunday,
+ Ju, 41)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<hr noshade width=100%>)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(RAM Overclocking?
+ , 39)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:killz@i82hq.com')
+SAX.characters(DareDevil, 9)
+SAX.endElement(a)
+SAX.characters( @ 9:57AM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/963766655,78511,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(3 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(I know we're pretty big overcl, 636)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Extreme Overclocking has teste, 145)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Well, the guys at Extreme Over, 344)
+SAX.endElement(i)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.extremeoverclocking.com/reviews/memory/ram_roundup_1.html', target='_blank')
+SAX.characters(Cooked RAM... Yummie, 20)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(The
+ &ETH;&ETH;., 23)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem963764236,76720,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(CPU
+ Guide, 23)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:killz@i82hq.com')
+SAX.characters(DareDevil, 9)
+SAX.endElement(a)
+SAX.characters( @ 9:17AM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/963764236,76720,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(0 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(A follow up on the 'Weekly CPU, 203)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 14)
+SAX.startElement(li)
+SAX.startElement(a, href='http://www6.tomshardware.com/howto/00q2/000412/index.html', target='_blank')
+SAX.characters(http://www6.tomshardware.com/h, 57)
+SAX.endElement(a)
+SAX.endElement(li)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem963685749,28290,')
+SAX.endElement(a)
+SAX.characters(
+ , 14)
+SAX.startElement(table, bgcolor='#003399', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td)
+SAX.startElement(font, color='#ffffff', face='Verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Saturday,
+ , 43)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<hr noshade width=100%>)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(Weekly CPU
+ Price, 31)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:killz@i82hq.com')
+SAX.characters(DareDevil, 9)
+SAX.endElement(a)
+SAX.characters( @ 11:29AM
+ PDT, 28)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/963685749,28290,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(2 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Wow, found this very useful! W, 104)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.sharkyextreme.com/hardware/weekly_cpu/', target='_blank')
+SAX.characters(Click Here., 11)
+SAX.endElement(a)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Thanks Sharky
+ Ex, 36)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem963679881,35277,')
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(Fast Wallpapers, 15)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:killz@i82hq.com')
+SAX.characters(DareDevil, 9)
+SAX.endElement(a)
+SAX.characters( @ 9:51AM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/963679881,35277,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(0 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(FAST-MHz has released some wal, 53)
+SAX.startElement(a, href='http://64.29.18.111/wallpaper/index.html', target='_blank')
+SAX.characters(Click here, 10)
+SAX.endElement(a)
+SAX.characters( to view them. They come in si, 241)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(In other news, we want to
+ , 135)
+SAX.startElement(a, href='http://bp6.gamesquad.net/uc.phtml', target='_blank')
+SAX.characters(Picture Gallery, 15)
+SAX.endElement(a)
+SAX.characters(. To help us out, you can send, 103)
+SAX.startElement(a, href='mailto:thedaredevil@bp6.com')
+SAX.characters(thedaredevil@bp6.com, 20)
+SAX.endElement(a)
+SAX.characters(. (The
+ topic bei, 186)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Okay, that's all for now., 25)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(The
+ &ETH;&ETH;., 23)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, name='newsitem963619505,3764,')
+SAX.endElement(a)
+SAX.characters(
+ , 14)
+SAX.startElement(table, bgcolor='#003399', width='100%')
+SAX.characters(
+ , 16)
+SAX.startElement(tbody)
+SAX.characters(
+ , 16)
+SAX.startElement(tr)
+SAX.characters(
+ , 18)
+SAX.startElement(td)
+SAX.startElement(font, color='#ffffff', face='Verdana,arial', size='2')
+SAX.startElement(b)
+SAX.characters(Friday,
+ Ju, 41)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment(<hr noshade width=100%>)
+SAX.startElement(b)
+SAX.startElement(u)
+SAX.startElement(font, color='#003366', face='Verdana, Arial', size='2')
+SAX.characters(Hey
+ There!, 24)
+SAX.endElement(font)
+SAX.endElement(u)
+SAX.endElement(b)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#0066cc', face='Arial', size='1')
+SAX.startElement(small)
+SAX.characters(Posted by , 10)
+SAX.startElement(a, class='nav', href='mailto:killz@i82hq.com')
+SAX.characters(DareDevil, 9)
+SAX.endElement(a)
+SAX.characters( @ 5:05PM
+ PDT, 27)
+SAX.endElement(small)
+SAX.characters(&nbsp;, 2)
+SAX.characters( , 1)
+SAX.startElement(a, href='http://bp6.gamesquad.net/news/963619505,3764,.html')
+SAX.startElement(img, border='0', src='doc3_files/comments.gif')
+SAX.endElement(img)
+SAX.characters(7 comments, 10)
+SAX.endElement(a)
+SAX.characters(
+ , 15)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(a, href='http://bp6.gamesquad.net/#news_top')
+SAX.characters(top, 3)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='black', face='Arial', size='2')
+SAX.characters(Hey guys, just wanted to intro, 312)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(My e-mail address is , 21)
+SAX.startElement(a, href='mailto:killz@i82hq.com')
+SAX.characters(killz@i82hq.com, 15)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Ciao for
+ now., 27)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(The &ETH;&ETH;., 9)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 14)
+SAX.endElement(font)
+SAX.startElement(center)
+SAX.startElement(iframe, frameborder='0', height='60', marginheight='0', marginwidth='0', noresize, scrolling='no', src='doc3_files/ad_iframe.htm', width='468')
+SAX.startElement(a, href='http://ads.adflight.com/go_static.asp?asid=7708', target='_top')
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(img, width='468', height='60', border='0', alt='Advertisement', src='http://ads.adflight.com/ad_static.asp?pid=2097&amp;sid=1881&amp;asid=7708')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.endElement(iframe)
+SAX.endElement(center)
+SAX.error: Unexpected end tag : li
+SAX.error: Unexpected end tag : font
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.endElement(center)
+SAX.error: Unexpected end tag : p
+SAX.endElement(td)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='silver', valign='top', width='10%')
+SAX.characters(
+ , 8)
+SAX.startElement(center)
+SAX.characters(
+ , 8)
+SAX.startElement(p)
+SAX.characters(
+ , 8)
+SAX.endElement(p)
+SAX.startElement(table, bgcolor='silver', border='0', cellpadding='0', cellspacing='0', width='100%')
+SAX.characters(
+ , 10)
+SAX.startElement(tbody)
+SAX.characters(
+ , 10)
+SAX.startElement(tr)
+SAX.characters(
+ , 12)
+SAX.startElement(td, colstart='1')
+SAX.characters(
+ , 14)
+SAX.startElement(center)
+SAX.comment( <FORM ACTION="/cgi-bin/subscribe.pl" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">
+ <IMG SRC="/images/spacer.gif" WIDTH="111" HEIGHT="1"><BR>
+ <P><B><FONT SIZE="2" COLOR="#000066" FACE="Verdana">Newsletter</FONT></B><FONT SIZE="1" FACE="Verdana"><BR>
+ <INPUT TYPE="TEXT" NAME="email" SIZE="10" VALUE="ur@email.com"><BR>
+ <INPUT TYPE="HIDDEN" NAME="subscribe" SIZE="-1" VALUE="subscribe"><INPUT TYPE="IMAGE" SRC="/images/subscribe.gif" WIDTH="80"
+ HEIGHT="27" ALIGN="BOTTOM" BORDER="0"></FONT>
+ </FORM> )
+SAX.characters(
+ , 14)
+SAX.startElement(form, action='http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?emaillist', method='post')
+SAX.startElement(img, height='1', src='doc3_files/spacer.gif', width='111')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='1')
+SAX.characters(Newsletter, 10)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(input, name='npemail', size='13', value='e-mail addr.')
+SAX.endElement(input)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(input, name='npsubscribe', style='BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold', type='submit', value='Subscribe')
+SAX.endElement(input)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( <input type="submit" name="npunsubscribe" value="Unsubscribe" style="font-size: xx-small; font-family: Verdana; font-weight: bold; color: #ffffff; background-color: #000000;"> )
+SAX.endElement(font)
+SAX.endElement(form)
+SAX.startElement(font, size='1')
+SAX.characters(
+ , 14)
+SAX.startElement(form, action='http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?search', method='post')
+SAX.characters(Search news, 11)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(input, name='searchstring', size='13')
+SAX.endElement(input)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(input, name='submit', style='BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold', type='submit', value='Submit')
+SAX.endElement(input)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?newsall')
+SAX.characters(News
+ archive, 26)
+SAX.endElement(a)
+SAX.endElement(form)
+SAX.endElement(font)
+SAX.characters( , 1)
+SAX.error: Unexpected end tag : form
+SAX.endElement(center)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.comment( <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" BGCOLOR="silver">
+ <TR>
+ <TD WIDTH="100%">
+ <P ALIGN="CENTER"><A HREF="http://www.free56k.com" target="_blank"><IMG SRC="/images/free56k.gif" WIDTH="100" HEIGHT="49"
+ ALIGN="BOTTOM" BORDER="0"></A>
+ </TD>
+ </TR>
+ </TABLE>
+)
+SAX.characters(
+ , 8)
+SAX.startElement(table, bgcolor='silver', border='0', cellpadding='0', cellspacing='0', width='100%')
+SAX.characters(
+ , 10)
+SAX.startElement(tbody)
+SAX.characters(
+ , 10)
+SAX.startElement(tr)
+SAX.characters(
+ , 12)
+SAX.startElement(td, align='middle', width='100%')
+SAX.comment( BEGIN GoTo.com Search Box )
+SAX.characters(
+ , 14)
+SAX.startElement(script, language='javascript', type='text/javascript')
+SAX.cdata(
+ , 9)
+SAX.comment(
+ if ((parseInt(navigator.appVersion) >= 3)
+ && (navigator.appName != "Netscape")) {
+ document.write("<IFRAME marginheight=0 frameborder=0 ");
+ document.write("marginwidth=0 scrolling=no width=100 height");
+ document.write("=90 ");
+ document.write("SRC=http://www.goto.com/d/ssn/dynconsole/?t");
+ document.write("ype=html&size=100x90&url=http://www.goto.co");
+ document.write("m/d/search/ssn/&target=_blank&Partner=SSN80");
+ document.write("42DF8478957377></IFRAME>");
+ } else if ((parseInt(navigator.appVersion) > 3)
+ && (navigator.appName == "Netscape")) {
+ document.write("<SCRIPT language=javascript type=text/javas");
+ document.write("cript ");
+ document.write("SRC=http://www.goto.com/d/ssn/dynconsole/?t");
+ document.write("ype=js&size=100x90&url=http://www.goto.com/");
+ document.write("d/search/ssn/&target=_blank&Partner=SSN8042");
+ document.write("DF8478957377></SC");
+ document.write("RIPT>");
+ } else {
+ document.write("<A TARGET=_blank ");
+ document.write("HREF=http://www.goto.com/d/search/ssn/?from");
+ document.write("GIF=true>");
+ document.write("<IMG ismap ");
+ document.write("SRC=http://www.goto.com/d/ssn/dynconsole/?t");
+ document.write("ype=gif&size=100x90></A>");
+ }
+ // )
+SAX.cdata(
+ , 9)
+SAX.endElement(script)
+SAX.characters(
+ , 14)
+SAX.startElement(b)
+SAX.startElement(noscript)
+SAX.endElement(noscript)
+SAX.endElement(b)
+SAX.startElement(a, href='http://www.goto.com/d/search/ssn/?fromGIF=true', target='_blank')
+SAX.startElement(img, align='bottom', border='0', height='90', ismap, src='doc3_files/100x90.gif', width='100')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.startElement(a, href='http://www.goto.com/d/search/ssn/?fromGIF=true', target='_blank')
+SAX.characters(
+ , 15)
+SAX.endElement(a)
+SAX.error: Unexpected end tag : a
+SAX.endElement(b)
+SAX.startElement(b)
+SAX.error: Unexpected end tag : noscript
+SAX.endElement(b)
+SAX.startElement(b)
+SAX.comment( END GoTo.com Search Box )
+SAX.endElement(b)
+SAX.comment( Pricewatch Search Box )
+SAX.characters(
+ , 14)
+SAX.startElement(form, action='http://www.pricewatch.com/search/search.asp', method='get', target='_Blank')
+SAX.characters(
+ , 14)
+SAX.startElement(center)
+SAX.characters(
+ , 14)
+SAX.startElement(p)
+SAX.startElement(b)
+SAX.startElement(font, color='white', face='ARIAL, HELVETICA', size='1')
+SAX.characters(PC Price
+ Search, 29)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.endElement(b)
+SAX.startElement(input, maxlength='30', name='criteria', size='10')
+SAX.endElement(input)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(input, name='submit', style='BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold', type='submit', value='Search')
+SAX.endElement(input)
+SAX.characters(
+ , 15)
+SAX.endElement(p)
+SAX.error: Opening and ending tag mismatch: form and center
+SAX.endElement(center)
+SAX.endElement(form)
+SAX.comment( Pricewatch Search Box )
+SAX.startElement(a, href='http://www.puicorp.com/bp6specials.htm', target='_BLANK')
+SAX.startElement(img, src='doc3_files/puibp6.gif')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://store.yahoo.com/dunamis-site/maxtor.html', target='_BLANK')
+SAX.startElement(img, alt='BP6.com Special - Enter CODE: BP6-hd in the order (notes) to receive a discount', src='doc3_files/hd5.gif')
+SAX.endElement(img)
+SAX.startElement(font, size='1')
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(BP6.COM
+ Special, 29)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Code:BP6-hd, 11)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.characters( , 1)
+SAX.error: Unexpected end tag : p
+SAX.error: Opening and ending tag mismatch: center and td
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.characters(
+ , 8)
+SAX.startElement(table, bgcolor='silver', border='0', cellpadding='0', cellspacing='0', height='100%', width='100%')
+SAX.characters(
+ , 10)
+SAX.startElement(tbody)
+SAX.characters(
+ , 10)
+SAX.startElement(tr)
+SAX.characters(
+ , 12)
+SAX.startElement(td, width='100%')
+SAX.characters(&nbsp;, 2)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.error: Unexpected end tag : p
+SAX.endElement(center)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.comment( </TABLE>)
+SAX.characters(
+, 2)
+SAX.startElement(center)
+SAX.endElement(center)
+SAX.error: Unexpected end tag : td
+SAX.error: Unexpected end tag : tr
+SAX.startElement(tr)
+SAX.startElement(td, colspan='3', valign='TOP', height='70')
+SAX.characters(&nbsp;, 2)
+SAX.endElement(td)
+SAX.characters( , 1)
+SAX.endElement(tr)
+SAX.error: Unexpected end tag : table
+SAX.characters(
+, 2)
+SAX.startElement(table, border='0', width='780')
+SAX.characters(
+ , 4)
+SAX.startElement(tbody)
+SAX.characters(
+ , 4)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, width='780')
+SAX.characters(
+ , 8)
+SAX.startElement(p, align='center')
+SAX.startElement(font, color='#999999', face='verdana,arial', size='1')
+SAX.characters(Copyright
+ &copy;1999-2, 59)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Got news? Send it to , 21)
+SAX.endElement(font)
+SAX.startElement(a, href='mailto:tim@bp6.com')
+SAX.startElement(font, color='white', face='Verdana', size='1')
+SAX.characters(Tim, 3)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.characters( , 1)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.comment( <TR> <TD WIDTH="780"> <P ALIGN="CENTER"><FONT SIZE="1" COLOR="#999999" FACE="Verdana,arial">Site design by Tim Brinkley</FONT> </TD> </TR> )
+SAX.endElement(tbody)
+SAX.endElement(table)
+SAX.endElement(div)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(script)
+SAX.cdata( window.open=NS_ActualOpen; , 28)
+SAX.endElement(script)
+SAX.ignorableWhitespace(
+, 2)
+SAX.endElement(body)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 2)
+SAX.endDocument()
diff --git a/result/HTML/entities.html b/result/HTML/entities.html
new file mode 100644
index 0000000..6e53680
--- /dev/null
+++ b/result/HTML/entities.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html><body><p tst="a&amp;b" tst2="a&amp;b" tst3="a &amp; b">
+a&amp;b
+a&amp;b
+a &amp; b
+</p></body></html>
diff --git a/result/HTML/entities.html.err b/result/HTML/entities.html.err
new file mode 100644
index 0000000..180fa9f
--- /dev/null
+++ b/result/HTML/entities.html.err
@@ -0,0 +1,12 @@
+./test/HTML/entities.html:1: HTML parser error : htmlParseEntityRef: expecting ';'
+<p tst="a&amp;b" tst2="a&b" tst3="a & b">
+ ^
+./test/HTML/entities.html:1: HTML parser error : htmlParseEntityRef: no name
+<p tst="a&amp;b" tst2="a&b" tst3="a & b">
+ ^
+./test/HTML/entities.html:3: HTML parser error : htmlParseEntityRef: expecting ';'
+a&b
+ ^
+./test/HTML/entities.html:4: HTML parser error : htmlParseEntityRef: no name
+a & b
+ ^
diff --git a/result/HTML/entities.html.sax b/result/HTML/entities.html.sax
new file mode 100644
index 0000000..709b60d
--- /dev/null
+++ b/result/HTML/entities.html.sax
@@ -0,0 +1,27 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.startElement(body)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: no name
+SAX.startElement(p, tst='a&amp;b', tst2='a&amp;b', tst3='a &amp; b')
+SAX.characters(
+a, 2)
+SAX.characters(&amp;, 1)
+SAX.characters(b
+a, 3)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.characters(&amp;, 1)
+SAX.characters(b, 1)
+SAX.characters(
+a , 3)
+SAX.error: htmlParseEntityRef: no name
+SAX.characters(&amp;, 1)
+SAX.characters( b
+, 3)
+SAX.endElement(p)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(body)
+SAX.endElement(html)
+SAX.endDocument()
diff --git a/result/HTML/fp40.htm b/result/HTML/fp40.htm
new file mode 100644
index 0000000..e78b8bd
--- /dev/null
+++ b/result/HTML/fp40.htm
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<title>README - Microsoft FrontPage 2000 Server Extensions</title>
+<meta name="Microsoft Theme" content="none">
+</head>
+<body>
+<font face="Verdana">
+<h1><a name="top">Microsoft FrontPage 2000 Server Extensions, UNIX</a></h1>
+
+<font size="2"><i>&copy; Copyright Microsoft Corporation, 1999&nbsp;</i></font>
+
+
+<p>The FrontPage Server Extensions are a set of programs on the Web server that support:
+
+</p>
+<ul>
+<li>Authoring FrontPage webs</li>
+ <li>Administering FrontPage webs</li>
+ <li>Browse-time FrontPage web functionality</li>
+</ul>
+<h2>Contents&nbsp;</h2>
+
+<a href="#relnotes">Release Notes</a><br><a href="#moreinfo">Resources for More Information</a>
+<p>&nbsp;</p>
+<hr>
+<h2><a name="relnotes">Release Notes</a></h2>
+
+<p>This section provides complementary or late-breaking
+information to supplement the Microsoft FrontPage Server Extensions documentation.</p>
+
+<p><a href="#apache">Apache 1.3.4 Support</a><br><a href="#upgrading">Upgrading from previous version of FrontPage Server Extensions</a><br><a href="#executables">Uploading files into executable folders</a></p>
+
+
+<p align="right"><font size="1"><a href="#top">Top of Page</a></font></p>
+
+
+<h3><a name="apache">Apache 1.3.4 Support</a></h3>
+
+<p>You need to take some special steps to run the FrontPage Server Extensions with Apache 1.3.4.
+FrontPage Server Extensions expect to find all resource directives in the main server
+configuration file, usually http.conf. To prevent the server extensions from using any secondary
+configuration files (access.conf, srm.conf), add the following lines to http.conf:</p>
+
+
+</font><blockquote>
+ <font face="Courier New">
+ResourceConfig /dev/null&nbsp;<br>
+AccessConfig /dev/null</font>
+</blockquote>
+<font face="Verdana">
+
+
+<p>If you have some settings stored in secondary configuration files, move them to http.conf.</p>
+
+<p>You must stop and restart the web server for your changes to http.conf to take effect.</p>
+
+
+
+<p align="right"><font size="1"><a href="#relnotes">Top of Section</a></font></p>
+
+
+
+<h3><a name="upgrading">Upgrading from previous version of FrontPage Server Extensions</a></h3>
+
+<p>Custom entries in frontpage.cnf are not migrated to FrontPage 2000.</p>
+
+<p>When you install FrontPage 2000 Server Extensions, a new frontpage.cnf file is created in the /usr/local/frontpage/version4.0 directory.
+Any custom settings stored in a previous-version frontpage.cnf are not used. However, you can copy
+your custom settings from the previous-version frontpage.cnf file after you install the FrontPage 2000 Server Extensions.</p>
+
+<p>Do not overwrite the FrontPage 2000 frontpage.cnf file with a frontpage.cnf file from an
+earlier version of the FrontPage Server Extensions.</p>
+
+
+
+<p align="right"><font size="1"><a href="#relnotes">Top of Section</a></font></p>
+
+
+
+<h3><a name="executables">Uploading files into executable folders</a></h3>
+
+
+<p>After upgrading to FrontPage 2000, FrontPage authors will not be able to upload files into
+executable folders. For security reasons, the default setting on FrontPage 2000 webs does not
+allow authors to upload executable files into executable folders in a FrontPage web. This
+setting protects servers so that authors do not inadvertently upload a program containing a bug
+or a virus.</p>
+
+<p>To allow FrontPage authors to upload executables, set the NoExecutableCgiUpload configuration
+variable to zero (0). For information about FrontPage Server Extension configuration variables,
+see the FrontPage 2000 Server Extensions Resource Kit at <a href="http://officeupdate.microsoft.com/frontpage/wpp/serk/">http://officeupdate.microsoft.com/frontpage/wpp/serk/</a>.</p>
+
+
+
+<p align="right"><font size="1"><a href="#relnotes">Top of Section</a></font></p>
+
+
+
+<hr>
+<h2><a name="moreinfo">Resources for More Information</a></h2>
+
+<p>This section lists sources of more information about the
+FrontPage Server Extensions.</p>
+
+<p><a href="#serk">Server Extensions Resource Kit</a><br><a href="#serkupdate">Server Extensions Resource Kit Update</a><br><a href="#kb">Knowledge Base</a></p>
+
+
+<p align="right"><font size="1"><a href="#top">Top of Page</a></font></p>
+
+
+<h3><a name="serk">Server Extensions Resource Kit</a></h3>
+
+<p>The FrontPage 2000 Server Extensions include a full set of documentation: the Server
+Extensions Resource Kit. This is an HTML document installed on the server machine (by
+default) in /usr/local/frontpage/version4.0/serk. To view the Server Extensions Resource
+Kit, open /usr/local/frontpage/version4.0/serk/default.htm in your Web browser.</p>
+
+<p>The Server Extensions Resource Kit contains detailed information about installing and
+administering the FrontPage Server Extensions along with an overview of the Server
+Extensions, a detailed discussion of Server Extensions security on UNIX and Windows,
+troubleshooting information, and a full set of appendixes.</p>
+
+<p align="right"><font size="1"><a href="#moreinfo">Top of Section</a></font></p>
+
+
+<h3><a name="serkupdate">Server Extensions Resource Kit Update</a></h3>
+
+<p>For updated information about installing, setting up, and administrating the FrontPage Server
+Extensions, see the Server Extensions Resource Kit Update at: <a href="http://officeupdate.microsoft.com/frontpage/wpp/serk/">http://officeupdate.microsoft.com/frontpage/wpp/serk/</a>.</p>
+
+
+<p align="right"><font size="1"><a href="#moreinfo">Top of Section</a></font></p>
+
+
+<h3><a name="kb">Microsoft Knowledge Base</a></h3>
+
+<p>For further technical information on FrontPage, please consult Support Online. Use Support
+Online to easily search Microsoft Product Support Services' collection of resources including
+technical articles from Microsoft's extensive Knowledge Base, FAQs, &amp; troubleshooters to find
+fast, accurate answers. You can also customize the site to control your search using either
+keywords or the site's natural language search engine, which uses normal everyday language for
+answering inquiries, so you can write your question in your own words. To begin, go to
+<a href="http://support.microsoft.com/support/">http://support.microsoft.com/support/</a>.</p>
+
+<p align="right"><font size="1"><a href="#moreinfo">Top of Section</a></font></p>
+
+
+<p>&nbsp;</p>
+
+</font>
+</body>
+</html>
diff --git a/result/HTML/fp40.htm.err b/result/HTML/fp40.htm.err
new file mode 100644
index 0000000..6ab388f
--- /dev/null
+++ b/result/HTML/fp40.htm.err
@@ -0,0 +1,3 @@
+./test/HTML/fp40.htm:153: HTML parser error : htmlParseEntityRef: no name
+technical articles from Microsoft's extensive Knowledge Base, FAQs, & troublesho
+ ^
diff --git a/result/HTML/fp40.htm.sax b/result/HTML/fp40.htm.sax
new file mode 100644
index 0000000..3859458
--- /dev/null
+++ b/result/HTML/fp40.htm.sax
@@ -0,0 +1,463 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(html, -//IETF//DTD HTML//EN, )
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(meta, name='GENERATOR', content='Microsoft FrontPage 4.0')
+SAX.endElement(meta)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(title)
+SAX.characters(README - Microsoft FrontPage 2, 51)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(meta, name='Microsoft Theme', content='none')
+SAX.endElement(meta)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.startElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(font, face='Verdana')
+SAX.characters(
+, 1)
+SAX.startElement(h1)
+SAX.startElement(a, name='top')
+SAX.characters(Microsoft FrontPage 2000 Serve, 48)
+SAX.endElement(a)
+SAX.endElement(h1)
+SAX.characters(
+
+, 2)
+SAX.startElement(font, size='2')
+SAX.startElement(i)
+SAX.characters(&copy; Copyright Microsoft Cor, 40)
+SAX.characters(&nbsp;, 2)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(p)
+SAX.characters(The FrontPage Server Extension, 88)
+SAX.endElement(p)
+SAX.startElement(ul)
+SAX.characters(
+ , 3)
+SAX.startElement(li)
+SAX.characters(Authoring FrontPage webs, 24)
+SAX.endElement(li)
+SAX.characters(
+ , 3)
+SAX.startElement(li)
+SAX.characters(Administering FrontPage webs, 28)
+SAX.endElement(li)
+SAX.characters(
+ , 3)
+SAX.startElement(li)
+SAX.characters(Browse-time FrontPage web func, 39)
+SAX.endElement(li)
+SAX.characters(
+, 1)
+SAX.endElement(ul)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(h2)
+SAX.characters(Contents, 8)
+SAX.characters(&nbsp;, 2)
+SAX.endElement(h2)
+SAX.characters(
+
+, 2)
+SAX.startElement(a, href='#relnotes')
+SAX.characters(Release Notes, 13)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='#moreinfo')
+SAX.characters(Resources for More Information, 30)
+SAX.endElement(a)
+SAX.characters(
+, 1)
+SAX.startElement(p)
+SAX.characters(&nbsp;, 2)
+SAX.endElement(p)
+SAX.characters(
+, 1)
+SAX.startElement(hr)
+SAX.endElement(hr)
+SAX.characters(
+, 1)
+SAX.startElement(h2)
+SAX.startElement(a, name='relnotes')
+SAX.characters(Release Notes, 13)
+SAX.endElement(a)
+SAX.endElement(h2)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(This section provides compleme, 136)
+SAX.endElement(p)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.startElement(a, href='#apache')
+SAX.characters(Apache 1.3.4 Support, 20)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='#upgrading')
+SAX.characters(Upgrading from previous versio, 62)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='#executables')
+SAX.characters(Uploading files into executabl, 39)
+SAX.endElement(a)
+SAX.endElement(p)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(p, align='right')
+SAX.startElement(font, size='1')
+SAX.startElement(a, href='#top')
+SAX.characters(Top of Page, 11)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(p)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(h3)
+SAX.startElement(a, name='apache')
+SAX.characters(Apache 1.3.4 Support, 20)
+SAX.endElement(a)
+SAX.endElement(h3)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(You need to take some special , 360)
+SAX.endElement(p)
+SAX.characters(
+
+
+, 3)
+SAX.endElement(font)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(blockquote)
+SAX.characters(
+ , 3)
+SAX.startElement(font, face='Courier New')
+SAX.characters(
+ResourceConfig /dev/null, 25)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+AccessConfig /dev/null, 23)
+SAX.endElement(font)
+SAX.characters(
+, 1)
+SAX.endElement(blockquote)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(font, face='Verdana')
+SAX.characters(
+
+
+, 3)
+SAX.startElement(p)
+SAX.characters(If you have some settings stor, 90)
+SAX.endElement(p)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(You must stop and restart the , 86)
+SAX.endElement(p)
+SAX.characters(
+
+
+
+, 4)
+SAX.startElement(p, align='right')
+SAX.startElement(font, size='1')
+SAX.startElement(a, href='#relnotes')
+SAX.characters(Top of Section, 14)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(p)
+SAX.characters(
+
+
+
+, 4)
+SAX.startElement(h3)
+SAX.startElement(a, name='upgrading')
+SAX.characters(Upgrading from previous versio, 62)
+SAX.endElement(a)
+SAX.endElement(h3)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(Custom entries in frontpage.cn, 67)
+SAX.endElement(p)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(When you install FrontPage 200, 359)
+SAX.endElement(p)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(Do not overwrite the FrontPage, 141)
+SAX.endElement(p)
+SAX.characters(
+
+
+
+, 4)
+SAX.startElement(p, align='right')
+SAX.startElement(font, size='1')
+SAX.startElement(a, href='#relnotes')
+SAX.characters(Top of Section, 14)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(p)
+SAX.characters(
+
+
+
+, 4)
+SAX.startElement(h3)
+SAX.startElement(a, name='executables')
+SAX.characters(Uploading files into executabl, 39)
+SAX.endElement(a)
+SAX.endElement(h3)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(p)
+SAX.characters(After upgrading to FrontPage 2, 385)
+SAX.endElement(p)
+SAX.characters(
+
+, 3)
+SAX.startElement(p)
+SAX.characters(To allow FrontPage authors to , 249)
+SAX.startElement(a, href='http://officeupdate.microsoft.com/frontpage/wpp/serk/')
+SAX.characters(http://officeupdate.microsoft., 53)
+SAX.endElement(a)
+SAX.characters(., 1)
+SAX.endElement(p)
+SAX.characters(
+
+
+
+, 4)
+SAX.startElement(p, align='right')
+SAX.startElement(font, size='1')
+SAX.startElement(a, href='#relnotes')
+SAX.characters(Top of Section, 14)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(p)
+SAX.characters(
+
+
+
+, 4)
+SAX.startElement(hr)
+SAX.endElement(hr)
+SAX.characters(
+
+
+
+, 4)
+SAX.startElement(h2)
+SAX.startElement(a, name='moreinfo')
+SAX.characters(Resources for More Information, 30)
+SAX.endElement(a)
+SAX.endElement(h2)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(This section lists sources of , 85)
+SAX.endElement(p)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.startElement(a, href='#serk')
+SAX.characters(Server Extensions Resource Kit, 30)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='#serkupdate')
+SAX.characters(Server Extensions Resource Kit, 37)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='#kb')
+SAX.characters(Knowledge Base, 14)
+SAX.endElement(a)
+SAX.endElement(p)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(p, align='right')
+SAX.startElement(font, size='1')
+SAX.startElement(a, href='#top')
+SAX.characters(Top of Page, 11)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(p)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(h3)
+SAX.startElement(a, name='serk')
+SAX.characters(Server Extensions Resource Kit, 30)
+SAX.endElement(a)
+SAX.endElement(h3)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(The FrontPage 2000 Server Exte, 339)
+SAX.endElement(p)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(The Server Extensions Resource, 312)
+SAX.endElement(p)
+SAX.characters(
+
+, 2)
+SAX.startElement(p, align='right')
+SAX.startElement(font, size='1')
+SAX.startElement(a, href='#moreinfo')
+SAX.characters(Top of Section, 14)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(p)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(h3)
+SAX.startElement(a, name='serkupdate')
+SAX.characters(Server Extensions Resource Kit, 37)
+SAX.endElement(a)
+SAX.endElement(h3)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(For updated information about , 157)
+SAX.startElement(a, href='http://officeupdate.microsoft.com/frontpage/wpp/serk/')
+SAX.characters(http://officeupdate.microsoft., 53)
+SAX.endElement(a)
+SAX.characters(., 1)
+SAX.endElement(p)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(p, align='right')
+SAX.startElement(font, size='1')
+SAX.startElement(a, href='#moreinfo')
+SAX.characters(Top of Section, 14)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(p)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(h3)
+SAX.startElement(a, name='kb')
+SAX.characters(Microsoft Knowledge Base, 24)
+SAX.endElement(a)
+SAX.endElement(h3)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.characters(For further technical informat, 254)
+SAX.error: htmlParseEntityRef: no name
+SAX.characters(&amp;, 1)
+SAX.characters( troubleshooters to find
+fast, 302)
+SAX.startElement(a, href='http://support.microsoft.com/support/')
+SAX.characters(http://support.microsoft.com/s, 37)
+SAX.endElement(a)
+SAX.characters(., 1)
+SAX.endElement(p)
+SAX.characters(
+
+, 4)
+SAX.startElement(p, align='right')
+SAX.startElement(font, size='1')
+SAX.startElement(a, href='#moreinfo')
+SAX.characters(Top of Section, 14)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(p)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(p)
+SAX.characters(&nbsp;, 2)
+SAX.endElement(p)
+SAX.characters(
+
+, 4)
+SAX.endElement(font)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/liclose.html b/result/HTML/liclose.html
new file mode 100644
index 0000000..b8a464e
--- /dev/null
+++ b/result/HTML/liclose.html
@@ -0,0 +1,10 @@
+<!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>
+<li>First item
+</li>
+<li>Second item, closes the first one
+</li>
+</ul></body>
+</html>
diff --git a/result/HTML/liclose.html.err b/result/HTML/liclose.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/liclose.html.err
diff --git a/result/HTML/liclose.html.sax b/result/HTML/liclose.html.sax
new file mode 100644
index 0000000..30f26c0
--- /dev/null
+++ b/result/HTML/liclose.html.sax
@@ -0,0 +1,38 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(HTML, -//W3C//DTD HTML 4.0 Transitional//EN, http://www.w3.org/TR/REC-html40/loose.dtd)
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+ , 3)
+SAX.startElement(title)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(ul)
+SAX.characters(
+, 1)
+SAX.startElement(li)
+SAX.characters(First item
+, 11)
+SAX.endElement(li)
+SAX.startElement(li)
+SAX.characters(Second item, closes the first , 34)
+SAX.endElement(li)
+SAX.endElement(ul)
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.endElement(body)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/lt.html b/result/HTML/lt.html
new file mode 100644
index 0000000..ca28039
--- /dev/null
+++ b/result/HTML/lt.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html><head><meta name="Author" content="Root &lt;root@aol.com&gt;"></head></html>
diff --git a/result/HTML/lt.html.err b/result/HTML/lt.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/lt.html.err
diff --git a/result/HTML/lt.html.sax b/result/HTML/lt.html.sax
new file mode 100644
index 0000000..a4ab5e3
--- /dev/null
+++ b/result/HTML/lt.html.sax
@@ -0,0 +1,19 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(meta, name='Author', content='Root &lt;root@aol.com&gt;')
+SAX.endElement(meta)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/pre.html b/result/HTML/pre.html
new file mode 100644
index 0000000..17f5b3f
--- /dev/null
+++ b/result/HTML/pre.html
@@ -0,0 +1,2 @@
+<!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>
diff --git a/result/HTML/pre.html.err b/result/HTML/pre.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/pre.html.err
diff --git a/result/HTML/pre.html.sax b/result/HTML/pre.html.sax
new file mode 100644
index 0000000..4f567ae
--- /dev/null
+++ b/result/HTML/pre.html.sax
@@ -0,0 +1,23 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(pre)
+SAX.startElement(a, href='toto')
+SAX.endElement(a)
+SAX.startElement(img, src='titi')
+SAX.endElement(img)
+SAX.endElement(pre)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/reg1.html b/result/HTML/reg1.html
new file mode 100644
index 0000000..ef9f2e1
--- /dev/null
+++ b/result/HTML/reg1.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head><title>Regression test 1</title></head>
+<body>
+<h1>Regression test 1</h1>
+<p>
+Ok file no problem
+</p>
+</body>
+</html>
diff --git a/result/HTML/reg1.html.err b/result/HTML/reg1.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/reg1.html.err
diff --git a/result/HTML/reg1.html.sax b/result/HTML/reg1.html.sax
new file mode 100644
index 0000000..1ca0271
--- /dev/null
+++ b/result/HTML/reg1.html.sax
@@ -0,0 +1,36 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(title)
+SAX.characters(Regression test 1, 17)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(h1)
+SAX.characters(Regression test 1, 17)
+SAX.endElement(h1)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(p)
+SAX.characters(
+Ok file no problem
+, 20)
+SAX.endElement(p)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/reg2.html b/result/HTML/reg2.html
new file mode 100644
index 0000000..ac12028
--- /dev/null
+++ b/result/HTML/reg2.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head><title>Regression test 2</title></head>
+<body>
+<h1>Regression test 2</h1>
+<p>
+Autoclose of tag P
+</p>
+<p>
+Ok file no problem
+</p>
+</body>
+</html>
diff --git a/result/HTML/reg2.html.err b/result/HTML/reg2.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/reg2.html.err
diff --git a/result/HTML/reg2.html.sax b/result/HTML/reg2.html.sax
new file mode 100644
index 0000000..63acfd4
--- /dev/null
+++ b/result/HTML/reg2.html.sax
@@ -0,0 +1,41 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(title)
+SAX.characters(Regression test 2, 17)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(h1)
+SAX.characters(Regression test 2, 17)
+SAX.endElement(h1)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(p)
+SAX.characters(
+Autoclose of tag P
+, 20)
+SAX.endElement(p)
+SAX.startElement(p)
+SAX.characters(
+Ok file no problem
+, 20)
+SAX.endElement(p)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/reg3.html b/result/HTML/reg3.html
new file mode 100644
index 0000000..7b1bc1d
--- /dev/null
+++ b/result/HTML/reg3.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head><title>Regression test 3</title></head>
+<body>
+<h1>Regression test 3</h1>
+<p>
+Autoclose of tag P
+</p>
+<hr>
+<p>
+Ok file no problem
+</p>
+</body>
+</html>
diff --git a/result/HTML/reg3.html.err b/result/HTML/reg3.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/reg3.html.err
diff --git a/result/HTML/reg3.html.sax b/result/HTML/reg3.html.sax
new file mode 100644
index 0000000..5d498b2
--- /dev/null
+++ b/result/HTML/reg3.html.sax
@@ -0,0 +1,45 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(title)
+SAX.characters(Regression test 3, 17)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(h1)
+SAX.characters(Regression test 3, 17)
+SAX.endElement(h1)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(p)
+SAX.characters(
+Autoclose of tag P
+, 20)
+SAX.endElement(p)
+SAX.startElement(hr)
+SAX.endElement(hr)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(p)
+SAX.characters(
+Ok file no problem
+, 20)
+SAX.endElement(p)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/reg4.html b/result/HTML/reg4.html
new file mode 100644
index 0000000..f6a6ab8
--- /dev/null
+++ b/result/HTML/reg4.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head><title>Regression test 4</title></head>
+<body>
+<h1>Regression test 4</h1>
+<p>
+Wrong close of tag P
+</p>
+<hr>
+</body>
+</html>
diff --git a/result/HTML/reg4.html.err b/result/HTML/reg4.html.err
new file mode 100644
index 0000000..6515f70
--- /dev/null
+++ b/result/HTML/reg4.html.err
@@ -0,0 +1,3 @@
+./test/HTML/reg4.html:10: HTML parser error : Unexpected end tag : p
+</p>
+ ^
diff --git a/result/HTML/reg4.html.sax b/result/HTML/reg4.html.sax
new file mode 100644
index 0000000..5a4eacf
--- /dev/null
+++ b/result/HTML/reg4.html.sax
@@ -0,0 +1,43 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(title)
+SAX.characters(Regression test 4, 17)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(h1)
+SAX.characters(Regression test 4, 17)
+SAX.endElement(h1)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(p)
+SAX.characters(
+Wrong close of tag P
+, 22)
+SAX.endElement(p)
+SAX.startElement(hr)
+SAX.endElement(hr)
+SAX.ignorableWhitespace(
+, 1)
+SAX.error: Unexpected end tag : p
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/script.html b/result/HTML/script.html
new file mode 100644
index 0000000..908723e
--- /dev/null
+++ b/result/HTML/script.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head><title>Script tests</title></head>
+<body>
+<script language="javascript">
+ if (window.open<max) ;
+</script><input onclick="if(window.open&lt;max);">
+</body>
+</html>
diff --git a/result/HTML/script.html.err b/result/HTML/script.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/script.html.err
diff --git a/result/HTML/script.html.sax b/result/HTML/script.html.sax
new file mode 100644
index 0000000..3a47061
--- /dev/null
+++ b/result/HTML/script.html.sax
@@ -0,0 +1,32 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(head)
+SAX.startElement(title)
+SAX.characters(Script tests, 12)
+SAX.endElement(title)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(script, language='javascript')
+SAX.cdata(
+ if (window.open&lt;max) ;, 28)
+SAX.endElement(script)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(input, onclick='if(window.open&lt;max);')
+SAX.endElement(input)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/test2.html b/result/HTML/test2.html
new file mode 100644
index 0000000..ef62dc6
--- /dev/null
+++ b/result/HTML/test2.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head><title>Linux Today</title></head>
+<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">
+<a href="http://linuxtoday.com/cgi-bin/click.pl?adnum=49"><img src="/pics/door_linux.gif" border="0" width="468" height="60" alt="Atipa Linux solutions. Your reliable cluster, server, and workstation solution. Win a Free Celeron Linux Workstation!"></a>
+
+ </td>
+ <td>
+<img src="/pics/lt.gif" vspace="5" alt="Linux Today Logo"><br><font size="-1"><a href="http://linux.com">linux.com</a> partner</font><p></p>
+</td>
+
+ </tr></table>
+<font size="2" face="Helvetica">
+[ <a href="http://linuxtoday.com/">headlines</a> |
+<a href="http://features.linuxtoday.com/">features</a> |
+<a href="http://commercial.linuxtoday.com/">commercial</a> |
+<a href="http://security.linuxtoday.com/">security</a> |
+<a href="http://jobs.linuxtoday.com/">jobs</a> |
+<a href="http://linuxtoday.com/volt/">volt</a> |
+<a href="http://linuxtoday.com/contrib.pl">contribute/submit</a> |
+<a href="http://linuxtoday.com/advertise/">advertise</a> |
+<a href="http://linuxtoday.com/search.html">search</a> |
+<a href="http://linuxtoday.com/digests/">site digests</a> |
+<a href="http://linuxtoday.com/mail-lists">mailing lists</a> |
+<a href="http://linuxtoday.com/about/">about us</a> |
+<a href="http://linuxtoday.com/linkus.html">link us</a> ]</font>
+</center>
+<p>
+</p>
+</body>
+</html>
diff --git a/result/HTML/test2.html.err b/result/HTML/test2.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/test2.html.err
diff --git a/result/HTML/test2.html.sax b/result/HTML/test2.html.sax
new file mode 100644
index 0000000..03f7285
--- /dev/null
+++ b/result/HTML/test2.html.sax
@@ -0,0 +1,145 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(HTML, -//W3C//DTD HTML 4.0 Transitional//EN, http://www.w3.org/TR/REC-html40/loose.dtd)
+SAX.startElement(html)
+SAX.startElement(head)
+SAX.ignorableWhitespace( , 1)
+SAX.startElement(title)
+SAX.characters(Linux Today, 11)
+SAX.endElement(title)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body, bgcolor='White', link='Blue', text='Black', vlink='Black', alink='Red')
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.startElement(center)
+SAX.characters(
+, 1)
+SAX.startElement(table, border='0', width='100%', cellspacing='0', cellpadding='0')
+SAX.characters(
+ , 9)
+SAX.startElement(tr, bgcolor='#FFFFFF')
+SAX.characters(
+ , 17)
+SAX.startElement(td, height='90')
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://linuxtoday.com/cgi-bin/click.pl?adnum=49')
+SAX.startElement(img, src='/pics/door_linux.gif', border='0', width='468', height='60', alt='Atipa Linux solutions. Your reliable cluster, server, and workstation solution. Win a Free Celeron Linux Workstation!')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.characters(
+
+ , 18)
+SAX.endElement(td)
+SAX.characters(
+ , 5)
+SAX.startElement(td)
+SAX.startElement(img, src='/pics/lt.gif', vspace='5', alt='Linux Today Logo')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='-1')
+SAX.startElement(a, href='http://linux.com')
+SAX.characters(linux.com, 9)
+SAX.endElement(a)
+SAX.characters( partner, 8)
+SAX.endElement(font)
+SAX.startElement(p)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.characters(
+
+ , 10)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.endElement(table)
+SAX.characters(
+, 1)
+SAX.startElement(font, size='2', face='Helvetica')
+SAX.characters(
+[ , 3)
+SAX.startElement(a, href='http://linuxtoday.com/')
+SAX.characters(headlines, 9)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://features.linuxtoday.com/')
+SAX.characters(features, 8)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://commercial.linuxtoday.com/')
+SAX.characters(commercial, 10)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://security.linuxtoday.com/')
+SAX.characters(security, 8)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://jobs.linuxtoday.com/')
+SAX.characters(jobs, 4)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://linuxtoday.com/volt/')
+SAX.characters(volt, 4)
+SAX.endElement(a)
+SAX.characters( |
+, 4)
+SAX.startElement(a, href='http://linuxtoday.com/contrib.pl')
+SAX.characters(contribute/submit, 17)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://linuxtoday.com/advertise/')
+SAX.characters(advertise, 9)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://linuxtoday.com/search.html')
+SAX.characters(search, 6)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://linuxtoday.com/digests/')
+SAX.characters(site digests, 12)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://linuxtoday.com/mail-lists')
+SAX.characters(mailing lists, 13)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://linuxtoday.com/about/')
+SAX.characters(about us, 8)
+SAX.endElement(a)
+SAX.characters( |
+, 3)
+SAX.startElement(a, href='http://linuxtoday.com/linkus.html')
+SAX.characters(link us, 7)
+SAX.endElement(a)
+SAX.characters( ], 2)
+SAX.endElement(font)
+SAX.characters(
+, 1)
+SAX.endElement(center)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(p)
+SAX.characters(
+, 1)
+SAX.endElement(p)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endDocument()
diff --git a/result/HTML/test3.html b/result/HTML/test3.html
new file mode 100644
index 0000000..4437f4d
--- /dev/null
+++ b/result/HTML/test3.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head><base target="contents"></head>
+<body>
+<a name="ProblemDomain.Package"><h2>Component Package diagram ProblemDomain</h2>
+</a><p></p>
+<hr>
+<dl>
+<dt>
+<b>Stereotype </b>problem domain</dt>
+<dt>
+<b>Alias </b>Problem Domain</dt>
+<dt><b>Note </b></dt>
+<dd>The Problem Domain package is the model behind the Human
+<dd>Interface, thats stores and manipulates the Family Tree.
+</dd>
+</dd>
+</dl>
+<p></p>
+<hr>
+<dl>
+<dt><h4>Class <a href="HumanInterface.FamilyFrame.html#HumanInterface.FamilyFrame">HumanInterface.FamilyFrame</a>
+</h4></dt>
+<dt><h4>Class <a href="ProblemDomain.Birth.html#ProblemDomain.Birth">ProblemDomain.Birth</a>
+</h4></dt>
+<dt><h4>Class <a href="ProblemDomain.Death.html#ProblemDomain.Death">ProblemDomain.Death</a>
+</h4></dt>
+<dt><h4>Class <a href="ProblemDomain.Divorce.html#ProblemDomain.Divorce">ProblemDomain.Divorce</a>
+</h4></dt>
+<dt><h4>Class <a href="ProblemDomain.Family.html#ProblemDomain.Family">ProblemDomain.Family</a>
+</h4></dt>
+<dt><h4>Class <a href="ProblemDomain.Individual.html#ProblemDomain.Individual">ProblemDomain.Individual</a>
+</h4></dt>
+<dt><h4>Class <a href="ProblemDomain.LifeEvent.html#ProblemDomain.LifeEvent">ProblemDomain.LifeEvent</a>
+</h4></dt>
+<dt><h4>Class <a href="ProblemDomain.Marriage.html#ProblemDomain.Marriage">ProblemDomain.Marriage</a>
+</h4></dt>
+<dt><h4>Class <a href="ProblemDomain.Note.html#ProblemDomain.Note">ProblemDomain.Note</a>
+</h4></dt>
+</dl>
+<h4><b>Links</b></h4>
+<ul><li>
+<b>Link to </b><a href="HumanInterface.Package.html#HumanInterface.Package">HumanInterface</a>
+</li></ul>
+<dir></dir>
+<ul><li>
+<b>Link to </b><a href="DataManagement.FlatFile.Package.html#DataManagement.FlatFile.Package">DataManagement.FlatFile</a>
+</li></ul>
+<dir></dir>
+<ul><li>
+<b>Link to </b><a href="DataManagement.Package.html#DataManagement.Package">DataManagement</a>
+</li></ul>
+<dir></dir>
+</body>
+</html>
diff --git a/result/HTML/test3.html.err b/result/HTML/test3.html.err
new file mode 100644
index 0000000..c743503
--- /dev/null
+++ b/result/HTML/test3.html.err
@@ -0,0 +1,12 @@
+./test/HTML/test3.html:6: HTML parser error : Unexpected end tag : p
+</a><p><hr></p>
+ ^
+./test/HTML/test3.html:13: HTML parser error : Unexpected end tag : p
+<p><hr></p>
+ ^
+./test/HTML/test3.html:27: HTML parser error : Opening and ending tag mismatch: h4 and b
+<h4><b>Links</h4></b>
+ ^
+./test/HTML/test3.html:27: HTML parser error : Unexpected end tag : b
+<h4><b>Links</h4></b>
+ ^
diff --git a/result/HTML/test3.html.sax b/result/HTML/test3.html.sax
new file mode 100644
index 0000000..1f76e50
--- /dev/null
+++ b/result/HTML/test3.html.sax
@@ -0,0 +1,230 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(html)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(base, target='contents')
+SAX.endElement(base)
+SAX.ignorableWhitespace(
+, 2)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(body)
+SAX.startElement(a, name='ProblemDomain.Package')
+SAX.startElement(h2)
+SAX.characters(Component Package diagram Prob, 39)
+SAX.endElement(h2)
+SAX.characters(
+, 2)
+SAX.endElement(a)
+SAX.startElement(p)
+SAX.endElement(p)
+SAX.startElement(hr)
+SAX.endElement(hr)
+SAX.error: Unexpected end tag : p
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(dl)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(b)
+SAX.characters(Stereotype , 11)
+SAX.endElement(b)
+SAX.characters(problem domain, 14)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(b)
+SAX.characters(Alias , 6)
+SAX.endElement(b)
+SAX.characters(Problem Domain, 14)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(b)
+SAX.characters(Note , 5)
+SAX.endElement(b)
+SAX.endElement(dt)
+SAX.startElement(dd)
+SAX.characters(The Problem Domain package is , 59)
+SAX.startElement(dd)
+SAX.characters(Interface, thats stores and ma, 58)
+SAX.endElement(dd)
+SAX.endElement(dd)
+SAX.endElement(dl)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(p)
+SAX.endElement(p)
+SAX.startElement(hr)
+SAX.endElement(hr)
+SAX.error: Unexpected end tag : p
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(dl)
+SAX.characters(
+
+, 4)
+SAX.startElement(dt)
+SAX.startElement(h4)
+SAX.characters(Class , 6)
+SAX.startElement(a, href='HumanInterface.FamilyFrame.html#HumanInterface.FamilyFrame')
+SAX.characters(HumanInterface.FamilyFrame, 26)
+SAX.endElement(a)
+SAX.endElement(h4)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(h4)
+SAX.characters(Class , 6)
+SAX.startElement(a, href='ProblemDomain.Birth.html#ProblemDomain.Birth')
+SAX.characters(ProblemDomain.Birth, 19)
+SAX.endElement(a)
+SAX.endElement(h4)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(h4)
+SAX.characters(Class , 6)
+SAX.startElement(a, href='ProblemDomain.Death.html#ProblemDomain.Death')
+SAX.characters(ProblemDomain.Death, 19)
+SAX.endElement(a)
+SAX.endElement(h4)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(h4)
+SAX.characters(Class , 6)
+SAX.startElement(a, href='ProblemDomain.Divorce.html#ProblemDomain.Divorce')
+SAX.characters(ProblemDomain.Divorce, 21)
+SAX.endElement(a)
+SAX.endElement(h4)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(h4)
+SAX.characters(Class , 6)
+SAX.startElement(a, href='ProblemDomain.Family.html#ProblemDomain.Family')
+SAX.characters(ProblemDomain.Family, 20)
+SAX.endElement(a)
+SAX.endElement(h4)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(h4)
+SAX.characters(Class , 6)
+SAX.startElement(a, href='ProblemDomain.Individual.html#ProblemDomain.Individual')
+SAX.characters(ProblemDomain.Individual, 24)
+SAX.endElement(a)
+SAX.endElement(h4)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(h4)
+SAX.characters(Class , 6)
+SAX.startElement(a, href='ProblemDomain.LifeEvent.html#ProblemDomain.LifeEvent')
+SAX.characters(ProblemDomain.LifeEvent, 23)
+SAX.endElement(a)
+SAX.endElement(h4)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(h4)
+SAX.characters(Class , 6)
+SAX.startElement(a, href='ProblemDomain.Marriage.html#ProblemDomain.Marriage')
+SAX.characters(ProblemDomain.Marriage, 22)
+SAX.endElement(a)
+SAX.endElement(h4)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.startElement(dt)
+SAX.startElement(h4)
+SAX.characters(Class , 6)
+SAX.startElement(a, href='ProblemDomain.Note.html#ProblemDomain.Note')
+SAX.characters(ProblemDomain.Note, 18)
+SAX.endElement(a)
+SAX.endElement(h4)
+SAX.endElement(dt)
+SAX.characters(
+, 2)
+SAX.endElement(dl)
+SAX.ignorableWhitespace(
+
+, 4)
+SAX.startElement(h4)
+SAX.startElement(b)
+SAX.characters(Links, 5)
+SAX.error: Opening and ending tag mismatch: h4 and b
+SAX.endElement(b)
+SAX.endElement(h4)
+SAX.error: Unexpected end tag : b
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(ul)
+SAX.startElement(li)
+SAX.startElement(b)
+SAX.characters(Link to , 8)
+SAX.endElement(b)
+SAX.startElement(a, href='HumanInterface.Package.html#HumanInterface.Package')
+SAX.characters(HumanInterface, 14)
+SAX.endElement(a)
+SAX.endElement(li)
+SAX.endElement(ul)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(dir)
+SAX.endElement(dir)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(ul)
+SAX.startElement(li)
+SAX.startElement(b)
+SAX.characters(Link to , 8)
+SAX.endElement(b)
+SAX.startElement(a, href='DataManagement.FlatFile.Package.html#DataManagement.FlatFile.Package')
+SAX.characters(DataManagement.FlatFile, 23)
+SAX.endElement(a)
+SAX.endElement(li)
+SAX.endElement(ul)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(dir)
+SAX.endElement(dir)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(ul)
+SAX.startElement(li)
+SAX.startElement(b)
+SAX.characters(Link to , 8)
+SAX.endElement(b)
+SAX.startElement(a, href='DataManagement.Package.html#DataManagement.Package')
+SAX.characters(DataManagement, 14)
+SAX.endElement(a)
+SAX.endElement(li)
+SAX.endElement(ul)
+SAX.ignorableWhitespace(
+, 2)
+SAX.startElement(dir)
+SAX.endElement(dir)
+SAX.ignorableWhitespace(
+, 2)
+SAX.endElement(body)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+, 2)
+SAX.endDocument()
diff --git a/result/HTML/wired.html b/result/HTML/wired.html
new file mode 100644
index 0000000..674623f
--- /dev/null
+++ b/result/HTML/wired.html
@@ -0,0 +1,398 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<!-- 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">
+<tr>
+<td bgcolor="#330099"><input name="city" type="text" size="7" maxlength="20" value="Seattle"></td>
+<td rowspan="2" align="LEFT" bgcolor="FFFFFF"><input type="IMAGE" src="http://static.wired.com/advertising/blipverts/allapartments/990625jpa_ssthome.gif" width="375" height="60" border="0" value="search" hspace="0" alt="Search over 6,000,000 Apts with SpringStreet"></td>
+</tr>
+<tr><td bgcolor="#330099">
+<select name="state"><option value="WA" selected>WA
+</option>
+<option value="AL">AL</option>
+<option value="AK">AK</option>
+<option value="AZ">AZ</option>
+<option value="AR">AR</option>
+<option value="CA">CA</option>
+<option value="CO">CO</option>
+<option value="CT">CT</option>
+<option value="DE">DE</option>
+<option value="DC">DC</option>
+<option value="FL">FL</option>
+<option value="GA">GA</option>
+<option value="HI">HI</option>
+<option value="ID">ID</option>
+<option value="IL">IL</option>
+<option value="IN">IN</option>
+<option value="IA">IA</option>
+<option value="KS">KS</option>
+<option value="KY">KY</option>
+<option value="LA">LA</option>
+<option value="ME">ME</option>
+<option value="MD">MD</option>
+<option value="MA">MA</option>
+<option value="MI">MI</option>
+<option value="MN">MN</option>
+<option value="MS">MS</option>
+<option value="MO">MO</option>
+<option value="MT">MT</option>
+<option value="NE">NE</option>
+<option value="NV">NV</option>
+<option value="NH">NH</option>
+<option value="NJ">NJ</option>
+<option value="NM">NM</option>
+<option value="NY">NY</option>
+<option value="NC">NC</option>
+<option value="ND">ND</option>
+<option value="OH">OH</option>
+<option value="OK">OK</option>
+<option value="OR">OR</option>
+<option value="PA">PA</option>
+<option value="PR">PR</option>
+<option value="RI">RI</option>
+<option value="SC">SC</option>
+<option value="SD">SD</option>
+<option value="TN">TN</option>
+<option value="TX">TX</option>
+<option value="UT">UT</option>
+<option value="VT">VT</option>
+<option value="VA">VA</option>
+<option value="WA">WA</option>
+<option value="WV">WV</option>
+<option value="WI">WI</option>
+<option value="WY">WY</option></select><input type="hidden" name="source" value="2hb8bhc059">
+</td></tr>
+</form>
+</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">
+<tr>
+<td></td>
+<td colspan="2"><img src="http://static.wired.com/news/images/spacer.gif" height="5" width="447" alt=""></td>
+</tr>
+<tr>
+<td valign="BOTTOM" align="RIGHT" class="wired" bgcolor="#FFFFFF"><a href="/news/0,1287,,00.html"><img src="http://static.wired.com/news/images/wired_000000.gif" width="153" height="30" border="0"></a></td>
+ <td bgcolor="#FF0000" valign="BOTTOM" align="LEFT" width="97"><a href="/news/0,1287,,00.html"><img src="http://static.wired.com/news/images/news_ffffff.gif" width="103" height="30" border="0"></a></td>
+
+
+<td bgcolor="#FF0000" align="left" valign="center"><nobr><img src="http://static.wired.com/news/images/spacer.gif" width="344" height="1"><br><font size="1" face="Verdana, Arial, Geneva, sans-serif" color="#FFFFFF">&nbsp;&nbsp;&nbsp;<b>updated 10:15 a.m.&nbsp;&nbsp;15.Oct.99.PDT</b></font></nobr></td>
+
+
+ </tr>
+<tr>
+<td valign="MIDDLE" align="RIGHT" bgcolor="#FFFFFF"><img src="http://static.wired.com/news/images/spacer.gif" width="1" height="30"></td>
+
+ <td colspan="2" bgcolor="#999999">
+
+ <table border="0" cellspacing="0" cellpadding="5">
+<form name="RedirectSearch" action="http://redirect.wired.com/search">
+ <tr>
+<td>
+<font face="courier" size="1"><input type="TEXT" name="query" size="20" value=""></font>
+ </td>
+
+ <td>
+<select name="url"><option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=vignette.hts&amp;Collection=vignette&amp;QueryMode=Internet&amp;Query=" selected>Wired News</option>
+<option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=webmonkey.hts&amp;Collection=webmonkey&amp;QueryMode=Internet&amp;Query=">Webmonkey</option>
+<option value="http://search.hotwired.com/search97/s97.vts?collection=webmonkey_guides&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=webmonkey_guides.hts&amp;QueryMode=Internet&amp;Query=">Webmonkey Guides</option>
+<option value="http://search.hotwired.com/search97/s97.vts?collection=hotwired&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=hotwired_archive.hts&amp;QueryMode=Internet&amp;Query=">HotWired Archives</option>
+<option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=magazine.hts&amp;Collection=magazine&amp;QueryMode=Internet&amp;Query=">Wired Magazine</option>
+<option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=animation.hts&amp;Collection=animation&amp;QueryMode=Internet&amp;Query=">Animation Express</option>
+<option value="http://search.hotwired.com/search97/s97.vts?collection=suck&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=suck.hts&amp;QueryMode=Internet&amp;Query=">Suck.com</option>
+<option value="http://search.hotwired.com/search97/s97.vts?collection=uber_hotwired&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=uber_hotwired.hts&amp;QueryMode=Internet&amp;Query=">All of HotWired</option>
+<option value="http://www.hotbot.com/?SM=MC&amp;DV=0&amp;LG=any&amp;RD=RG&amp;DC=10&amp;DE=2&amp;_v=2&amp;OPs=MDRTP&amp;MT=">The Web -&gt; HotBot</option></select>
+</td>
+ <td>
+ <input type="SUBMIT" name="SUBMIT" value="SEARCH">
+</td>
+ </tr>
+</form>
+ </table>
+</td>
+ </tr>
+<!--
+<TR>
+<td></td>
+<TD valign="TOP" align="LEFT" colspan="3" bgcolor="#F0F0F0"><img src="http://static.wired.com/news/images/spacer.gif" height=1 width=15 alt=""><br>
+<i><font face="Verdana, Arial, Geneva, sans-serif" size="2">Sponsored by<a href="#">Sun Microsystems.</a> We're the dot in .com</font></i><i></i></TD>
+</TR>
+-->
+</table>
+<!-- end WIRED NEWS header --><!-- begin upper left side Navigation --><table border="0" cellpadding="3" cellspacing="0" align="LEFT" bgcolor="#FFFFFF">
+<tr>
+<td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF">
+ <img src="http://static.wired.com/news/images/spacer.gif" width="147" height="1" border="0"><br><b>SECTIONS</b></font></td>
+ </tr>
+<tr><td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/business/0,1367,,00.html">Business</a></font></td></tr>
+<tr><td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/culture/0,1284,,00.html">Culture</a></font></td></tr>
+<tr><td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/technology/0,1282,,00.html">Technology</a></font></td></tr>
+<tr><td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/politics/0,1283,,00.html">Politics</a></font></td></tr>
+<tr>
+<td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF">
+<b>WIRE SERVICE NEWS</b></font></td>
+</tr>
+<tr>
+<td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/news/reuters/">Top Headlines</a></font></td>
+</tr>
+<tr>
+<td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/news/reuters/sports/">Sports</a></font></td>
+</tr>
+<tr>
+<td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/news/reuters/business/">Finance</a></font></td>
+</tr>
+<!-- End upper left nav --><!-- Begin lower Left Nav --><tr>
+<td bgcolor="#FF0000"><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF">
+ <b><font size="1">FREE DELIVERY</font></b></font></td>
+ </tr>
+<tr>
+<td bgcolor="#99FF99">
+<table cellspacing="0" cellpadding="0" border="0"><tr>
+<td bgcolor="#99FF99">
+ <form action="http://r.hotwired.com/r/hw_wm_r_nav_nwsltr/http://perl.hotwired.com/massmail/cgiParser.cgi" method="get" target="_top">
+
+ <input type="hidden" name="success_page" value="http://www.hotwired.com/email/signup/wirednews-ascii.html"><input type="hidden" name="failure_page" value="http://www.hotwired.com/email/signup/wirednews-ascii.html"><input type="hidden" name="LIST" value="wn_ascii"><input type="hidden" name="SOURCE" value="other"><input type="hidden" name="ACTION" value="subscribe"><input type="TEXT" name="from" size="10" value="enter email">&nbsp;
+</form>
+</td>
+ <td valign="top" bgcolor="#99FF99">
+ <input type="SUBMIT" name="SUBMIT" value="GO">
+</td>
+ </tr></table>
+</td>
+ </tr>
+<tr>
+<td bgcolor="#FF0000"><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF">
+ <b><font size="1">STOCKS</font></b></font></td>
+ </tr>
+<tr>
+<td bgcolor="#99FF99"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Get Quote:</font></td>
+ </tr>
+<tr>
+<td bgcolor="#99FF99" marginwidth="0" marginheight="0"><form method="get" action="http://r.wired.com/r/10020/http://stocks.wired.com/stocks_quotes.asp">
+<input type="TEXT" name="Symbol" size="12">&nbsp;<input type="SUBMIT" name="submit" value="GO">
+</form></td>
+ </tr>
+<!-- BEGIN BUTTON ADS --><tr>
+<td bgcolor="#CCFFCC">
+<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">Financial Services</font><br><center>
+<img src="http://static.wired.com/news/images/spacer.gif" height="3" width="5" alt=""><br><img src="http://static.wired.com/news/images/button_ads_news10.gif" width="143" height="56" border="0" alt="" usemap="#buttons" hspace="0" vspace="0">
+</center>
+
+<map name="buttons"><area shape="RECT" alt="Datek" coords="0,0,69,24" href="http://r.wired.com/r/1649/http://ads16.focalink.com/SmartBanner/page/1266.631">
+<area shape="RECT" alt="Wired Index Fund" coords="73,0,142,24" href="http://r.wired.com/r/227/http://www.gffunds.com/wired">
+<area shape="RECT" alt="internet.com Index Fund" coords="73,31,142,55" href="http://r.wired.com/r/298/http://www.gffunds.com/isdex/">
+<area shape="RECT" alt="GetSmart's MortgageFinder" coords="0,31,69,55" href="http://r.wired.com/r/294/http://www.getsmartinc.com/mortgage/HomeBanner?BANNERNAME=www.getsmartinc.com/mwired001m6075x25"></map>
+</td>
+ </tr>
+<!-- END BUTTON ADS --><tr>
+<td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://redirect.wired.com/redir/51/http://stocks.wired.com/">Today's Summary</a></font></td>
+ </tr>
+<tr>
+<td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://r.wired.com/r/hb_fin_r_wn_top/http://stocks.wired.com/stocks_indexes_detail.asp?Symbol=%24WIRED">Wired Index</a> | <a href="http://redirect.wired.com/redir/52/http://stocks.wired.com/stocks_indexes.asp%20">All Indexes</a></font></td>
+ </tr>
+<tr>
+<td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://redirect.wired.com/redir/53/http://stocks.wired.com/stocks_portfolios.asp">Portfolios</a></font></td>
+ </tr>
+<!-- BEGIN B&N spot --><tr>
+<td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>FIND A BOOK</b></font></td>
+</tr>
+<tr><td bgcolor="#CCFFCC">
+<table cellspacing="0" cellpadding="0" border="0" width="145">
+<tr><td bgcolor="#CCFFCC">
+ <form action="http://r.wired.com/r/wn_nav_c_bn/http://barnesandnoble.bfast.com/booklink/click">
+<input type="hidden" name="sourceid" value="383471"><input type="hidden" name="categoryid" value="categorydropdown"><font size="2">
+ <select name="Subjects" size="4"><option value="301">Business Top 20
+</option>
+<option value="500">Computers
+</option>
+<option value="503">Computer Games
+</option>
+<option value="1604">Current Affairs
+</option>
+<option value="511">Cyberculture
+</option>
+<option value="510">Internet/Web
+</option>
+<option value="303">Investing
+</option>
+<option value="1606">Law
+</option>
+<option value="513">Multimedia
+
+</option>
+<option value="1605">Newsmakers
+</option>
+<option value="1607">Politics/Govt.
+
+ </option>
+<option value="315"> Web Business
+ </option>
+<option value="2800"> Bargain Books
+
+</option>
+<option value="4">Other
+
+
+
+
+
+ </option></select></font>
+</form>
+</td></tr>
+<tr align="left" valign="top">
+<td valign="top" bgcolor="#CCFFCC"> <input type="submit" value="GO"><img src="http://barnesandnoble.bfast.com/booklink/serve?sourceid=383471&amp;is_search=Y" border="0" align="top"><!--
+<IMG SRC="http://www.wired.com/partner/bn/trackingimg/ot_wn_nav_c_bn.gif" border=0 width=1 height=1 align=top>
+-->
+</td>
+
+ </tr>
+<tr align="left" valign="top">
+<td align="left" valign="top" colspan="2" rowspan="1" bgcolor="#CCFFCC">
+<p>
+ <font size="1" face="Verdana, Arial, Helvetica, " color="#000000">Powered by <a href="http://r.wired.com/r/wn_nav_c_bn/http://barnesandnoble.bfast.com/booklink/click?sourceid=383471">barnesandnoble.com</a>
+ </font>
+<br clear="all"></p>
+</td>
+ </tr>
+</table>
+</td></tr>
+<!-- END B&N spot --><!-- BEGIN MAGAZINE SPOT --><tr>
+<td bgcolor="#000000"><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>WIRED
+ MAGAZINE </b></font></td>
+ </tr>
+<tr>
+<td bgcolor="#FFFF99" align="CENTER">
+<font face="verdana, arial, helvetica, sans-serif" size="1">
+<b>
+<br><a href="http://www.wired.com/wired/"><img src="http://static.wired.com/news/images/wiredcover.gif" width="91" height="109" border="0" alt="Wired Magazine"></a><br></b>
+
+Issue 7.11
+</font>
+</td>
+</tr>
+<tr>
+<td bgcolor="#FFFF99" align="center">
+<font face="verdana, arial, helvetica, sans-serif" size="1">
+
+<a href="http://www.wired.com/wired/subscribe/special/79WN">Subscribe to Wired.<br>Special offer!</a>
+
+
+</font>
+</td>
+</tr>
+<!-- END MAGAZINE SPOT --><tr>
+<td bgcolor="#000000">
+ <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>HOTWIRED</b></font>
+</td>
+ </tr>
+<tr>
+<td bgcolor="#FFFF99"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">
+<a href="http://www.hotwired.com/">Frontdoor</a><br><a href="http://www.hotwired.com/webmonkey/">Webmonkey</a><br><a href="http://www.hotwired.com/webmonkey/guides/index.html">Webmonkey Guides</a><br><a href="http://www.hotwired.com/rgb/">RGB Gallery</a><br><a href="http://www.hotwired.com/animation/">Animation Express</a><br><a href="http://go.suck.com/su_wnfd">Suck.com</a><br></font>
+</td>
+ </tr>
+<tr>
+<td bgcolor="#000000">
+ <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>HOTBOT</b></font>
+</td>
+ </tr>
+<tr>
+<td bgcolor="#FFFF99"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">
+<a href="http://redirect.wired.com/redir/54/http://www.hotbot.com/">Search</a><br><a href="http://shop.hotbot.com/">Shopping</a><br></font>
+</td>
+ </tr>
+<tr>
+<td>
+ <br><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
+ <font face="Verdana, Arial, Helvetica, sans-serif" size="1">
+ Wired News <a href="/news/who/0,1362,,00.html">staff</a><br><br><!-- Wired News is <a href="http://www.wired.com/news/jobs.html">hiring</a><br><br> --><b><a href="/news/feedback/0,1364,,00.html">Contact us</a></b></font>
+
+
+ <br><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Wired News delivered<br>by <a href="/news/palmpilot/0,1365,,00.html">PalmPilot</a>,<br><a href="http://www.hotwired.com/email/signup/wn_outlook.html">Outlook Express</a>,<br><a href="http://redirect.wired.com/redir/55/http://form.netscape.com/ibd/html/ibd_frameset.html">In-Box Direct</a>,<br>
+or <a href="/news/pointcast/0,1366,,00.html">PointCast</a></font><br><!-- TRACKING --><img src="http://www.wired.com/special/modx/news.gif" height="1" width="1" alt=""></font>
+</td>
+ </tr>
+</table>
+<!-- end lower left side Navigation --><!-- CONTENT TABLE --><table border="0" width="447" cellspacing="0" cellpadding="0" bordercolor="#66FF00">
+<tr>
+<td valign="TOP" align="LEFT" rowspan="2">
+ <img src="http://static.wired.com/news/images/spacer.gif" height="1" width="15" alt=""><br>
+</td>
+ <td colspan="3" valign="TOP" align="LEFT">
+<img src="http://static.wired.com/news/images/spacer.gif" height="7" width="432" alt=""><br><!-- SQL query for Package here --><font face="Verdana, Arial, Geneva, sans-serif" size="2"><b><i>Nomad's Land</i></b></font><br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" alt=""><br><!-- IBD_SUBJECT: Homeless, but ID'd, in Seattle --><font face="Arial, Helvetica, sans-serif" size="5"><b><a href="/news/politics/0,1283,31911,00.html">Homeless, but ID'd, in Seattle</a></b></font><br><font size="1" face="Verdana, Arial, Geneva, sans-serif" color="#FF0000">8:15 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The city council approves a plan to track the homeless by a numbering system, saying it'll improve services. The implications worry privacy advocates, naturally. By Craig Bicknell.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/politics/0,1283,,00.html">in&nbsp;Politics</a></i></font><br><table bgcolor="#F0F0F0" cellpadding="0" cellspacing="0" border="0" width="147" align="RIGHT">
+<!-- Commentary Frag Begin --><tr>
+<td bgcolor="#000000">&nbsp;</td>
+ <td bgcolor="#000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>HITS &amp; MISC.</b></font></td>
+ </tr>
+<tr>
+<td>&nbsp;</td>
+ <td>
+<img src="http://static.wired.com/news/images/spacer.gif" height="5" width="5" alt=""><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/commentarySection/0,1292,31664,00.html">Calendar of E-Vents</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Ongoing goings-on. </font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/commentarySection/0,1292,31926,00.html">Rants &amp; Raves</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Readers on Apple's G4 ... AOL's passwords ... MS vs. Linux.</font><br><br></font></font>
+</td>
+ </tr>
+<!-- Commentary Frag End --><tr>
+<td align="left" bgcolor="#000000">&nbsp;</td>
+<td bgcolor="#000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>CURRENT HOO-HA</b></font></td>
+</tr>
+<tr>
+<td>&nbsp;</td>
+<td>
+<img src="http://static.wired.com/news/images/spacer.gif" height="5" width="5" alt=""><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/mp3/0,1285,,00.html">MP3 Rocks the Web</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Download the sound. <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_fd_mp3_r_mscm_txt/http://webfarm.mediaplex.com/click_thru_request/164-1361b-1052" style="text-decoration:none"><font color="#000000">Musicmaker</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/wireless/0,1382,,00.html">The Wireless World</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Networking gets unplugged. <br><i>Sponsored by <a href="http://www.ericsson.se/get/internet/default.shtml" style="text-decoration:none"><font color="#000000">Ericsson</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/digiwood/0,1412,,00.html">Digital Hollywood</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">The buzz of tech.</font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/ipo/0,1350,,00.html">IPO Outlook</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Deals in the pipeline. <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_ipo_r_sun_txt/http://sun.com/ads/smi/brand/hotwired.html" style="text-decoration:none"><font color="#000000">Sun</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/ebiz/0,1272,,00.html">E-Biz</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Business unusual. <br><i>Sponsored by <a href="http://r.wired.com/r/wn_fd_r_ebiz_ibm_txt/http://www.ibm.com" style="text-decoration:none"><font color="#000000">IBM</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/medtech/0,1286,,00.html">Med-Tech Center</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">From the bleeding edge.<br><i>Sponsored by WebMD</i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/linux/0,1411,,00.html">The Linux Effect</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Not just for geeks.</font><br><br><img src="http://static.wired.com/news/images/spacer.gif" height="7" width="5" alt=""><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/exec/0,1370,,00.html">Executive Summary</a></b></font><br><font size="1" face="Arial, Helvetica, sans-serif" color="#000000">CEOs, COOs, CIOs unite. <br><i>Sponsored by <a href="http://r.wired.com/r/wn_exec_r_vign/http://www.vignette.com/" style="text-decoration:none"><font color="#000000">Vignette</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/school/0,1383,,00.html">Making the Grade</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Reading, writing, and ROM. <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_sch_r_nav_uop/http://ads25.focalink.com/SmartBanner/page?12630.53" style="text-decoration:none"><font color="#000000">U of Phoenix</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/infostructure/0,1377,,00.html">Infostructure</a></b></font><br><font size="1" face="Arial, Helvetica, sans-serif" color="#000000">An IS/IT resource <br><i>Sponsored by <a href="http://r.wired.com/r/wn_is_r_ssec/http://ad.doubleclick.net/clk;653163;3599571;s?http://www.sprintbiz.com/s%0Aervlet/appservlet?from=/wired/sprint/&amp;template=/security/security.html&amp;SITE=%0Awired.com&amp;BANNER=Sprint" style="text-decoration:none"><font color="#000000">Sprint</font></a></i></font></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/y2k/0,1360,,00.html">Y2K Watch</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Tick... Tick... Tick...</font><br><br><font face="Arial, Helvetica, sans-serif" size="2"><b><i><a href="/news/special_reports/1,1293,,00.html">More Hoo-Ha</a></i></b></font><br>&nbsp;<br></font></font></font></font></font></font></font></font>
+</td>
+</tr>
+<!-- start of Gen News --><tr>
+<td bgcolor="#000000">&nbsp;</td>
+ <td bgcolor="#000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>MEANWHILE...</b></font></td>
+ </tr>
+<tr>
+<td>&nbsp;</td>
+ <td align="left" valign="top">
+ <img src="http://static.wired.com/news/images/spacer.gif" height="5" width="5" alt=""><br><!-- 31942 --><font size="2" face="Arial, Helvetica, sans-serif" color="#000000"><b>F&uuml;hrer Furor</b></font><br><font size="1" face="Arial, Geneva, sans-serif" color="#000000"><p>
+Contruction workers in Berlin opened an old wound in the German psyche this week when they accidentally stumbled across Adolf Hitler's bunker while excavating near the Brandenburg Gate. The bunker, just south of the Gate, was where Hitler and his closest associates barricaded themselves as the Red Army approached Berlin in the waning days of World War II. It is also where the F&uuml;hrer and his bride, Eva Braun, committed suicide rather than fall into the hands of the Russians. Although the bunker's location has never been a mystery, it has been sealed off since the end of the war to keep neo-Nazis from turning it into a shrine.
+<br></p>
+<li>More from <a href="http://www.lycos.com/news/flash/hitlerbunker.html?v=wn1015&amp;lpv=1">Lycos</a>
+</li></font><br><br>
+</td>
+ </tr>
+<!-- end of Gen News -->
+</table>
+<font size="1">&nbsp;<br></font>
+
+<br><font face="Verdana, Arial, Geneva, sans-serif" size="2"><b><i>Other Top Stories</i></b></font><br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" alt=""><br><!-- SQL query here --><!-- IBD_SUBJECT:Wall Street Keeps Reeling --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/reuters/0,1349,31934,00.html">Wall Street Keeps Reeling</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">10:15 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The Dow and Nasdaq suffer sizeable losses during the first half of Friday trading. Why? Wholesale prices are the highest this decade, and Greenspan is concerned about stock prices.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/reuters/0,1349,,00.html">in&nbsp;Reuters</a></i></font><br><br><!-- IBD_SUBJECT:The Market's Madness --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/reuters/0,1349,31935,00.html">The Market's Madness</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">9:10 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The bulls and the bears are in the midst of a Battle Royale, and all this turbulence is not a healthy thing. So say the experts.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/reuters/0,1349,,00.html">in&nbsp;Reuters</a></i></font><br><br><!-- IBD_SUBJECT:'Want a Loan? What's Your Race?' --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/politics/0,1283,31533,00.html">'Want a Loan? What's Your Race?'</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The Federal Reserve is in the middle of changing banking regulations to let banks collect data on the race, sex, religion, and national origin of their customers. By Declan McCullagh. </font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/politics/0,1283,,00.html">in&nbsp;Politics</a></i></font><br><br><!-- IBD_SUBJECT:Music Regs: A Bagful of Noise --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/business/0,1367,31832,00.html">Music Regs: A Bagful of Noise</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The struggle to come up with a digital music standard that would minimize download piracy is pushing right up against the holiday gift-giving season. By Jennifer Sullivan.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><!-- IBD_SUBJECT:Can't Beat 'Em? Green 'Em --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/technology/0,1282,31927,00.html">Can't Beat 'Em? Green 'Em</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">High-tech companies are notoriously environmentally unfriendly, and a growing number of "Greenies" are trying to change things from the inside ... with varying results. By Chris Gaither.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- IBD_SUBJECT:Y2K Cloud Over MS Office --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/business/0,1367,31932,00.html">Y2K Cloud Over MS Office</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">Windows NT sales remain strong, but corporate clients are wary of upgrading to MS Office 2000. Analysts say that means strong, but not stunning, Microsoft earnings. </font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><font color="#FF0000" face="Verdana, Arial, Geneva, sans-serif" size="1">Med-Tech</font><br><!-- IBD_SUBJECT:Biochips for Custom Chemo --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/technology/0,1282,31914,00.html">Biochips for Custom Chemo</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">Different cancer patients need different medicine, but doctors can rarely determine the best match. New biochip technology promises chemotherapy tailored to a tumor's genetic make-up. By Kristen Philipkoski.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- IBD_SUBJECT:High Stakes in Priceline Suit --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/business/0,1367,31916,00.html">High Stakes in Priceline Suit</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">It's not just another round of Redmond-bashing. A Priceline.com lawsuit against Microsoft's Expedia.com may have a big impact on how Net companies protect their business models. By Joanna Glasner.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><!-- IBD_SUBJECT:Biodiversity Merges Online --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/technology/0,1282,31918,00.html">Biodiversity Merges Online</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The far-flung databases on global biodiversity get together to form one monster database. Soon the red-eyed tree frog will be eyeing those Swedish lingonberries. From the Environment News Service.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- SQL above --><!------TRADES---------><br><font face="Verdana, Arial, Geneva, sans-serif" size="2"><b><i>Elsewhere Today</i></b></font><br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" alt=""><br><!-- SQL query here --><font face="helvetica, arial" size="3"><b><a href="http://www.thestandard.com/articles/display/0,1449,6975,00.html?home.tf">FCC: Hands-Off on Broadband</a></b></font><br><font face="geneva, arial" size="2"><cite>The Industry Standard</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://news.lycos.com/stories/TopNews/19991014RTNEWS-ARMS-TREATY.asp">White House Lashes Out on Treaty</a></b></font><br><font face="geneva, arial" size="2">Lycos</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.pathfinder.com/time/magazine/articles/0,3266,32207,00.html">Steve Jobs at 44</a></b></font><br><font face="geneva, arial" size="2"><cite>Time</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.zdnet.com/zdnn/stories/news/0,4586,2353608,00.html">Computers May Run on Gas</a></b></font><br><font face="geneva, arial" size="2">ZDNN</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.nytimes.com/library/tech/99/10/biztech/articles/14free.html">Much Is Free in the Wired World</a></b></font><br><font face="geneva, arial" size="2"><cite>The New York Times</cite> (Registration Required)</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.usatoday.com/life/cyber/nb/nb4.htm">Melissa: I'm Baaaack</a></b></font><br><font face="geneva, arial" size="2"><cite>USA Today</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.msnbc.com/news/322926.asp">Domain Owners Surrender Privacy</a></b></font><br><font face="geneva, arial" size="2">MSNBC</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.washingtonpost.com/wp-srv/business/longterm/tech/techthursday/download/download.htm">Dividing to Conquer in VC Game</a></b></font><br><font face="geneva, arial" size="2"><cite>The Washington Post</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.salon.com/tech/books/1999/10/14/redhat_book/index.html">The Red Hat Diaries</a></b></font><br><font face="geneva, arial" size="2">Salon</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://news.bbc.co.uk/hi/english/sci/tech/newsid_473000/473856.stm">Screensaver to Predict Climate</a></b></font><br><font face="geneva, arial" size="2">BBC News</font><br><br><!-- SQL above --><!-- - - - - - - - - - - - - -->
+</td>
+ </tr>
+<tr>
+<td valign="TOP" align="LEFT">
+
+ <img src="http://static.wired.com/news/images/spacer.gif" height="1" width="280" alt=""><br><!-- FOOTER --><br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" border="0" usemap="#navstrip.map" alt=""><br><img src="http://static.wired.com/news/images/navstrip_off.gif" height="17" width="126" usemap="#navstrip.map" border="0" alt=""><br><br><p><font face="Verdana, Arial, Geneva, sans-serif" size="1">
+<a href="http://www.wired.com/news/feedback.html">Send us feedback</a>
+&nbsp;|&nbsp;
+<a href="http://www.hotwired.com/jobs/">Work at Wired Digital</a>
+&nbsp;|&nbsp;
+<a href="http://home.wired.com/advertising/">Advertise with us</a>
+<br><a href="http://home.wired.com/">About Wired Digital</a>
+&nbsp;|&nbsp;
+<a href="http://www.wired.com/home/digital/privacy/">Our Privacy Policy</a></font>
+
+
+</p>
+<p><font face="Verdana, Arial, Geneva" size="1"><a href="http://www.wired.com/home/copyright.html">Copyright</a> &copy; 1994-99 Wired Digital Inc. All rights reserved.</font>
+
+<br><!-- TRACKING --><img src="http://www.wired.com/special/modx/news.gif" height="1" width="1" alt=""><map name="navstrip.map"><area shape="rect" coords="0,0,14,16" href="/news">
+<area shape="rect" coords="15,0 31,16" href="/news/business/">
+<area shape="rect" coords="32,0,48,16" href="/news/culture/">
+<area shape="rect" coords="49,0,65,16" href="/news/technology/">
+<area shape="rect" coords="66,0,83,16" href="/news/politics/"></map></p>
+</td>
+ <td valign="TOP" align="LEFT">
+ <img src="http://static.wired.com/news/images/spacer.gif" height="1" width="5" alt="">
+</td>
+ <td valign="TOP" align="LEFT">
+ </td>
+ </tr>
+</table>
+<br>
+</body>
+</html>
diff --git a/result/HTML/wired.html.err b/result/HTML/wired.html.err
new file mode 100644
index 0000000..70db11b
--- /dev/null
+++ b/result/HTML/wired.html.err
@@ -0,0 +1,249 @@
+./test/HTML/wired.html:6: HTML parser error : htmlParseEntityRef: expecting ';'
+<FORM METHOD=GET ACTION="http://nsads.hotwired.com/event.ng/Type=click&ProfileID
+ ^
+./test/HTML/wired.html:6: HTML parser error : htmlParseEntityRef: expecting ';'
+D=GET ACTION="http://nsads.hotwired.com/event.ng/Type=click&ProfileID=9688&RunID
+ ^
+./test/HTML/wired.html:6: HTML parser error : htmlParseEntityRef: expecting ';'
+N="http://nsads.hotwired.com/event.ng/Type=click&ProfileID=9688&RunID=14074&AdID
+ ^
+./test/HTML/wired.html:6: HTML parser error : htmlParseEntityRef: expecting ';'
+s.hotwired.com/event.ng/Type=click&ProfileID=9688&RunID=14074&AdID=22584&GroupID
+ ^
+./test/HTML/wired.html:6: HTML parser error : htmlParseEntityRef: expecting ';'
+com/event.ng/Type=click&ProfileID=9688&RunID=14074&AdID=22584&GroupID=1&FamilyID
+ ^
+./test/HTML/wired.html:6: HTML parser error : htmlParseEntityRef: expecting ';'
+pe=click&ProfileID=9688&RunID=14074&AdID=22584&GroupID=1&FamilyID=2684&TagValues
+ ^
+./test/HTML/wired.html:52: HTML parser error : htmlParseEntityRef: expecting ';'
+" align="RIGHT"><a href="http://nsads.hotwired.com/event.ng/Type=click&ProfileID
+ ^
+./test/HTML/wired.html:52: HTML parser error : htmlParseEntityRef: expecting ';'
+GHT"><a href="http://nsads.hotwired.com/event.ng/Type=click&ProfileID=5597&RunID
+ ^
+./test/HTML/wired.html:52: HTML parser error : htmlParseEntityRef: expecting ';'
+f="http://nsads.hotwired.com/event.ng/Type=click&ProfileID=5597&RunID=17167&AdID
+ ^
+./test/HTML/wired.html:52: HTML parser error : htmlParseEntityRef: expecting ';'
+s.hotwired.com/event.ng/Type=click&ProfileID=5597&RunID=17167&AdID=22588&GroupID
+ ^
+./test/HTML/wired.html:52: HTML parser error : htmlParseEntityRef: expecting ';'
+com/event.ng/Type=click&ProfileID=5597&RunID=17167&AdID=22588&GroupID=1&FamilyID
+ ^
+./test/HTML/wired.html:52: HTML parser error : htmlParseEntityRef: expecting ';'
+pe=click&ProfileID=5597&RunID=17167&AdID=22588&GroupID=1&FamilyID=3228&TagValues
+ ^
+./test/HTML/wired.html:70: HTML parser error : Tag nobr invalid
+<td bgcolor="#FF0000" align="left" valign="center"><nobr><img src="http://static
+ ^
+./test/HTML/wired.html:89: HTML parser error : htmlParseEntityRef: expecting ';'
+on value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&Filter
+ ^
+./test/HTML/wired.html:89: HTML parser error : htmlParseEntityRef: expecting ';'
+d.com/search97/s97.vts?Action=FilterSearch&Filter=docs_filter.hts&ResultTemplate
+ ^
+./test/HTML/wired.html:89: HTML parser error : htmlParseEntityRef: expecting ';'
+ction=FilterSearch&Filter=docs_filter.hts&ResultTemplate=vignette.hts&Collection
+ ^
+./test/HTML/wired.html:89: HTML parser error : htmlParseEntityRef: expecting ';'
+Filter=docs_filter.hts&ResultTemplate=vignette.hts&Collection=vignette&QueryMode
+ ^
+./test/HTML/wired.html:89: HTML parser error : htmlParseEntityRef: expecting ';'
+ter.hts&ResultTemplate=vignette.hts&Collection=vignette&QueryMode=Internet&Query
+ ^
+./test/HTML/wired.html:90: HTML parser error : htmlParseEntityRef: expecting ';'
+on value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&Filter
+ ^
+./test/HTML/wired.html:90: HTML parser error : htmlParseEntityRef: expecting ';'
+d.com/search97/s97.vts?Action=FilterSearch&Filter=docs_filter.hts&ResultTemplate
+ ^
+./test/HTML/wired.html:90: HTML parser error : htmlParseEntityRef: expecting ';'
+tion=FilterSearch&Filter=docs_filter.hts&ResultTemplate=webmonkey.hts&Collection
+ ^
+./test/HTML/wired.html:90: HTML parser error : htmlParseEntityRef: expecting ';'
+lter=docs_filter.hts&ResultTemplate=webmonkey.hts&Collection=webmonkey&QueryMode
+ ^
+./test/HTML/wired.html:90: HTML parser error : htmlParseEntityRef: expecting ';'
+r.hts&ResultTemplate=webmonkey.hts&Collection=webmonkey&QueryMode=Internet&Query
+ ^
+./test/HTML/wired.html:91: HTML parser error : htmlParseEntityRef: expecting ';'
+="http://search.hotwired.com/search97/s97.vts?collection=webmonkey_guides&Action
+ ^
+./test/HTML/wired.html:91: HTML parser error : htmlParseEntityRef: expecting ';'
+ired.com/search97/s97.vts?collection=webmonkey_guides&Action=FilterSearch&filter
+ ^
+./test/HTML/wired.html:91: HTML parser error : htmlParseEntityRef: expecting ';'
+ction=webmonkey_guides&Action=FilterSearch&filter=docs_filter.hts&ResultTemplate
+ ^
+./test/HTML/wired.html:91: HTML parser error : htmlParseEntityRef: expecting ';'
+ilterSearch&filter=docs_filter.hts&ResultTemplate=webmonkey_guides.hts&QueryMode
+ ^
+./test/HTML/wired.html:91: HTML parser error : htmlParseEntityRef: expecting ';'
+ter=docs_filter.hts&ResultTemplate=webmonkey_guides.hts&QueryMode=Internet&Query
+ ^
+./test/HTML/wired.html:92: HTML parser error : htmlParseEntityRef: expecting ';'
+on value="http://search.hotwired.com/search97/s97.vts?collection=hotwired&Action
+ ^
+./test/HTML/wired.html:92: HTML parser error : htmlParseEntityRef: expecting ';'
+rch.hotwired.com/search97/s97.vts?collection=hotwired&Action=FilterSearch&filter
+ ^
+./test/HTML/wired.html:92: HTML parser error : htmlParseEntityRef: expecting ';'
+ts?collection=hotwired&Action=FilterSearch&filter=docs_filter.hts&ResultTemplate
+ ^
+./test/HTML/wired.html:92: HTML parser error : htmlParseEntityRef: expecting ';'
+ilterSearch&filter=docs_filter.hts&ResultTemplate=hotwired_archive.hts&QueryMode
+ ^
+./test/HTML/wired.html:92: HTML parser error : htmlParseEntityRef: expecting ';'
+ter=docs_filter.hts&ResultTemplate=hotwired_archive.hts&QueryMode=Internet&Query
+ ^
+./test/HTML/wired.html:93: HTML parser error : htmlParseEntityRef: expecting ';'
+on value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&Filter
+ ^
+./test/HTML/wired.html:93: HTML parser error : htmlParseEntityRef: expecting ';'
+d.com/search97/s97.vts?Action=FilterSearch&Filter=docs_filter.hts&ResultTemplate
+ ^
+./test/HTML/wired.html:93: HTML parser error : htmlParseEntityRef: expecting ';'
+ction=FilterSearch&Filter=docs_filter.hts&ResultTemplate=magazine.hts&Collection
+ ^
+./test/HTML/wired.html:93: HTML parser error : htmlParseEntityRef: expecting ';'
+Filter=docs_filter.hts&ResultTemplate=magazine.hts&Collection=magazine&QueryMode
+ ^
+./test/HTML/wired.html:93: HTML parser error : htmlParseEntityRef: expecting ';'
+ter.hts&ResultTemplate=magazine.hts&Collection=magazine&QueryMode=Internet&Query
+ ^
+./test/HTML/wired.html:94: HTML parser error : htmlParseEntityRef: expecting ';'
+on value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&Filter
+ ^
+./test/HTML/wired.html:94: HTML parser error : htmlParseEntityRef: expecting ';'
+d.com/search97/s97.vts?Action=FilterSearch&Filter=docs_filter.hts&ResultTemplate
+ ^
+./test/HTML/wired.html:94: HTML parser error : htmlParseEntityRef: expecting ';'
+tion=FilterSearch&Filter=docs_filter.hts&ResultTemplate=animation.hts&Collection
+ ^
+./test/HTML/wired.html:94: HTML parser error : htmlParseEntityRef: expecting ';'
+lter=docs_filter.hts&ResultTemplate=animation.hts&Collection=animation&QueryMode
+ ^
+./test/HTML/wired.html:94: HTML parser error : htmlParseEntityRef: expecting ';'
+r.hts&ResultTemplate=animation.hts&Collection=animation&QueryMode=Internet&Query
+ ^
+./test/HTML/wired.html:95: HTML parser error : htmlParseEntityRef: expecting ';'
+option value="http://search.hotwired.com/search97/s97.vts?collection=suck&Action
+ ^
+./test/HTML/wired.html:95: HTML parser error : htmlParseEntityRef: expecting ';'
+/search.hotwired.com/search97/s97.vts?collection=suck&Action=FilterSearch&filter
+ ^
+./test/HTML/wired.html:95: HTML parser error : htmlParseEntityRef: expecting ';'
+97.vts?collection=suck&Action=FilterSearch&filter=docs_filter.hts&ResultTemplate
+ ^
+./test/HTML/wired.html:95: HTML parser error : htmlParseEntityRef: expecting ';'
+uck&Action=FilterSearch&filter=docs_filter.hts&ResultTemplate=suck.hts&QueryMode
+ ^
+./test/HTML/wired.html:95: HTML parser error : htmlParseEntityRef: expecting ';'
+erSearch&filter=docs_filter.hts&ResultTemplate=suck.hts&QueryMode=Internet&Query
+ ^
+./test/HTML/wired.html:96: HTML parser error : htmlParseEntityRef: expecting ';'
+lue="http://search.hotwired.com/search97/s97.vts?collection=uber_hotwired&Action
+ ^
+./test/HTML/wired.html:96: HTML parser error : htmlParseEntityRef: expecting ';'
+otwired.com/search97/s97.vts?collection=uber_hotwired&Action=FilterSearch&filter
+ ^
+./test/HTML/wired.html:96: HTML parser error : htmlParseEntityRef: expecting ';'
+llection=uber_hotwired&Action=FilterSearch&filter=docs_filter.hts&ResultTemplate
+ ^
+./test/HTML/wired.html:96: HTML parser error : htmlParseEntityRef: expecting ';'
+n=FilterSearch&filter=docs_filter.hts&ResultTemplate=uber_hotwired.hts&QueryMode
+ ^
+./test/HTML/wired.html:96: HTML parser error : htmlParseEntityRef: expecting ';'
+filter=docs_filter.hts&ResultTemplate=uber_hotwired.hts&QueryMode=Internet&Query
+ ^
+./test/HTML/wired.html:97: HTML parser error : htmlParseEntityRef: expecting ';'
+ <option value="http://www.hotbot.com/?SM=MC&DV=0&LG=any&RD=RG&DC=10&DE=2&_v=2&O
+ ^
+./test/HTML/wired.html:97: HTML parser error : htmlParseEntityRef: expecting ';'
+ <option value="http://www.hotbot.com/?SM=MC&DV=0&LG=any&RD=RG&DC=10&DE=2&_v=2&O
+ ^
+./test/HTML/wired.html:97: HTML parser error : htmlParseEntityRef: expecting ';'
+ <option value="http://www.hotbot.com/?SM=MC&DV=0&LG=any&RD=RG&DC=10&DE=2&_v=2&O
+ ^
+./test/HTML/wired.html:97: HTML parser error : htmlParseEntityRef: expecting ';'
+ <option value="http://www.hotbot.com/?SM=MC&DV=0&LG=any&RD=RG&DC=10&DE=2&_v=2&O
+ ^
+./test/HTML/wired.html:97: HTML parser error : htmlParseEntityRef: expecting ';'
+ <option value="http://www.hotbot.com/?SM=MC&DV=0&LG=any&RD=RG&DC=10&DE=2&_v=2&O
+ ^
+./test/HTML/wired.html:97: HTML parser error : htmlParseEntityRef: expecting ';'
+ <option value="http://www.hotbot.com/?SM=MC&DV=0&LG=any&RD=RG&DC=10&DE=2&_v=2&O
+ ^
+./test/HTML/wired.html:97: HTML parser error : htmlParseEntityRef: expecting ';'
+option value="http://www.hotbot.com/?SM=MC&DV=0&LG=any&RD=RG&DC=10&DE=2&_v=2&OPs
+ ^
+./test/HTML/wired.html:97: HTML parser error : htmlParseEntityRef: expecting ';'
+lue="http://www.hotbot.com/?SM=MC&DV=0&LG=any&RD=RG&DC=10&DE=2&_v=2&OPs=MDRTP&MT
+ ^
+./test/HTML/wired.html:170: HTML parser error : Unexpected end tag : form
+ </tr> </form>
+ ^
+./test/HTML/wired.html:248: HTML parser error : htmlParseEntityRef: expecting ';'
+MG SRC="http://barnesandnoble.bfast.com/booklink/serve?sourceid=383471&is_search
+ ^
+./test/HTML/wired.html:265: HTML parser error : Unexpected end tag : form
+ </tr> </form>
+ ^
+./test/HTML/wired.html:346: HTML parser error : Opening and ending tag mismatch: td and font
+</td>
+ ^
+./test/HTML/wired.html:374: HTML parser error : htmlParseEntityRef: no name
+a, sans-serif"><b><a href="/news/commentarySection/0,1292,31926,00.html">Rants &
+ ^
+./test/HTML/wired.html:374: HTML parser error : Opening and ending tag mismatch: td and font
+Readers on Apple's G4 ... AOL's passwords ... MS vs. Linux.</font><br><br> </td
+ ^
+./test/HTML/wired.html:374: HTML parser error : Opening and ending tag mismatch: td and font
+Readers on Apple's G4 ... AOL's passwords ... MS vs. Linux.</font><br><br> </td
+ ^
+./test/HTML/wired.html:402: HTML parser error : Opening and ending tag mismatch: a and font
+w.vignette.com/" style="text-decoration:none"><font color="#000000">Vignette</a>
+ ^
+./test/HTML/wired.html:407: HTML parser error : htmlParseEntityRef: expecting ';'
+ervlet/appservlet?from=/wired/sprint/&template=/security/security.html&SITE=
+ ^
+./test/HTML/wired.html:407: HTML parser error : htmlParseEntityRef: expecting ';'
+ervlet/appservlet?from=/wired/sprint/&template=/security/security.html&SITE=
+ ^
+./test/HTML/wired.html:408: HTML parser error : htmlParseEntityRef: expecting ';'
+wired.com&BANNER=Sprint" style="text-decoration:none"><font color="#000000">Spri
+ ^
+./test/HTML/wired.html:408: HTML parser error : Opening and ending tag mismatch: a and font
+com&BANNER=Sprint" style="text-decoration:none"><font color="#000000">Sprint</a>
+ ^
+./test/HTML/wired.html:408: HTML parser error : End tag : expected '>'
+=Sprint" style="text-decoration:none"><font color="#000000">Sprint</a></i></font
+ ^
+./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font
+</td>
+ ^
+./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font
+</td>
+ ^
+./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font
+</td>
+ ^
+./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font
+</td>
+ ^
+./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font
+</td>
+ ^
+./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font
+</td>
+ ^
+./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font
+</td>
+ ^
+./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font
+</td>
+ ^
+./test/HTML/wired.html:432: HTML parser error : htmlParseEntityRef: expecting ';'
+href="http://www.lycos.com/news/flash/hitlerbunker.html?v=wn1015&lpv=1">Lycos</a
+ ^
diff --git a/result/HTML/wired.html.sax b/result/HTML/wired.html.sax
new file mode 100644
index 0000000..0edd57e
--- /dev/null
+++ b/result/HTML/wired.html.sax
@@ -0,0 +1,2848 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.comment( Vignette StoryServer 4 Fri Oct 15 11:37:12 1999 )
+SAX.startElement(html)
+SAX.startElement(head)
+SAX.startElement(title)
+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(
+
+, 2)
+SAX.startElement(table, border='0', width='600', cellspacing='0', cellpadding='0')
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 5)
+SAX.startElement(td, valign='top', align='LEFT')
+SAX.startElement(table, border='0', cellpadding='0', cellspacing='0', width='468', height='60', bgcolor='#FFFFFF')
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(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')
+SAX.characters(
+, 2)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#330099')
+SAX.startElement(input, name='city', type='text', size='7', maxlength='20', value='Seattle')
+SAX.endElement(input)
+SAX.endElement(td)
+SAX.characters(
+, 2)
+SAX.startElement(td, rowspan='2', align='LEFT', bgcolor='FFFFFF')
+SAX.startElement(input, type='IMAGE', src='http://static.wired.com/advertising/blipverts/allapartments/990625jpa_ssthome.gif', width='375', height='60', border='0', value='search', hspace='0', alt='Search over 6,000,000 Apts with SpringStreet')
+SAX.endElement(input)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.characters(
+, 2)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#330099')
+SAX.characters(
+, 2)
+SAX.startElement(select, name='state')
+SAX.characters(
+, 2)
+SAX.startElement(option, value='WA', selected)
+SAX.characters(WA
+, 4)
+SAX.endElement(option)
+SAX.startElement(option, value='AL')
+SAX.characters(AL, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='AK')
+SAX.characters(AK, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='AZ')
+SAX.characters(AZ, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='AR')
+SAX.characters(AR, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='CA')
+SAX.characters(CA, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='CO')
+SAX.characters(CO, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='CT')
+SAX.characters(CT, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='DE')
+SAX.characters(DE, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='DC')
+SAX.characters(DC, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='FL')
+SAX.characters(FL, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='GA')
+SAX.characters(GA, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='HI')
+SAX.characters(HI, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='ID')
+SAX.characters(ID, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='IL')
+SAX.characters(IL, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='IN')
+SAX.characters(IN, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='IA')
+SAX.characters(IA, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='KS')
+SAX.characters(KS, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='KY')
+SAX.characters(KY, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='LA')
+SAX.characters(LA, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='ME')
+SAX.characters(ME, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='MD')
+SAX.characters(MD, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='MA')
+SAX.characters(MA, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='MI')
+SAX.characters(MI, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='MN')
+SAX.characters(MN, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='MS')
+SAX.characters(MS, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='MO')
+SAX.characters(MO, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='MT')
+SAX.characters(MT, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='NE')
+SAX.characters(NE, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='NV')
+SAX.characters(NV, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='NH')
+SAX.characters(NH, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='NJ')
+SAX.characters(NJ, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='NM')
+SAX.characters(NM, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='NY')
+SAX.characters(NY, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='NC')
+SAX.characters(NC, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='ND')
+SAX.characters(ND, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='OH')
+SAX.characters(OH, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='OK')
+SAX.characters(OK, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='OR')
+SAX.characters(OR, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='PA')
+SAX.characters(PA, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='PR')
+SAX.characters(PR, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='RI')
+SAX.characters(RI, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='SC')
+SAX.characters(SC, 2)
+SAX.endElement(option)
+SAX.characters(
+, 3)
+SAX.startElement(option, value='SD')
+SAX.characters(SD, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='TN')
+SAX.characters(TN, 2)
+SAX.endElement(option)
+SAX.startElement(option, value='TX')
+SAX.characters(TX, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='UT')
+SAX.characters(UT, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='VT')
+SAX.characters(VT, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='VA')
+SAX.characters(VA, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='WA')
+SAX.characters(WA, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='WV')
+SAX.characters(WV, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='WI')
+SAX.characters(WI, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.startElement(option, value='WY')
+SAX.characters(WY, 2)
+SAX.endElement(option)
+SAX.characters(
+, 2)
+SAX.endElement(select)
+SAX.startElement(input, type='hidden', name='source', value='2hb8bhc059')
+SAX.endElement(input)
+SAX.characters(
+, 2)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.endElement(form)
+SAX.characters(
+, 2)
+SAX.endElement(table)
+SAX.endElement(td)
+SAX.characters(
+ , 5)
+SAX.startElement(td, valign='top', align='RIGHT')
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(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')
+SAX.startElement(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')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.endElement(table)
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.comment( WIRED NEWS header )
+SAX.ignorableWhitespace(
+, 1)
+SAX.comment( CMD_HOST = scoop.hotwired.com )
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.startElement(a, name='#')
+SAX.endElement(a)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(table, border='0', width='600', cellspacing='0', cellpadding='0')
+SAX.characters(
+
+ , 4)
+SAX.startElement(tr)
+SAX.startElement(td)
+SAX.endElement(td)
+SAX.startElement(td, colspan='2')
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='5', width='447', alt='')
+SAX.endElement(img)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+
+ , 4)
+SAX.startElement(tr)
+SAX.characters(
+ , 8)
+SAX.startElement(td, valign='BOTTOM', align='RIGHT', class='wired', bgcolor='#FFFFFF')
+SAX.startElement(a, href='/news/0,1287,,00.html')
+SAX.startElement(img, src='http://static.wired.com/news/images/wired_000000.gif', width='153', height='30', border='0')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.endElement(td)
+SAX.characters(
+ , 7)
+SAX.startElement(td, bgcolor='#FF0000', valign='BOTTOM', align='LEFT', width='97')
+SAX.startElement(a, href='/news/0,1287,,00.html')
+SAX.startElement(img, src='http://static.wired.com/news/images/news_ffffff.gif', width='103', height='30', border='0')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.endElement(td)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(td, bgcolor='#FF0000', align='left', valign='center')
+SAX.startElement(nobr)
+SAX.error: Tag nobr invalid
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', width='344', height='1')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='1', face='Verdana, Arial, Geneva, sans-serif', color='#FFFFFF')
+SAX.characters(&nbsp;, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(b)
+SAX.characters(updated 10:15 a.m., 18)
+SAX.characters(&nbsp;, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(15.Oct.99.PDT, 13)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(nobr)
+SAX.endElement(td)
+SAX.characters(
+
+
+ , 11)
+SAX.endElement(tr)
+SAX.characters(
+ , 5)
+SAX.startElement(tr)
+SAX.characters(
+ , 8)
+SAX.startElement(td, valign='MIDDLE', align='RIGHT', bgcolor='#FFFFFF')
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', width='1', height='30')
+SAX.endElement(img)
+SAX.endElement(td)
+SAX.characters(
+
+ , 14)
+SAX.startElement(td, colspan='2', bgcolor='#999999')
+SAX.characters(
+
+ , 9)
+SAX.startElement(table, border='0', cellspacing='0', cellpadding='5')
+SAX.characters(
+, 1)
+SAX.startElement(form, name='RedirectSearch', action='http://redirect.wired.com/search')
+SAX.characters(
+ , 17)
+SAX.startElement(tr)
+SAX.characters(
+ , 15)
+SAX.startElement(td)
+SAX.characters(
+, 2)
+SAX.startElement(font, face='courier', size='1')
+SAX.startElement(input, type='TEXT', name='query', size='20', value='')
+SAX.endElement(input)
+SAX.endElement(font)
+SAX.characters(
+ , 13)
+SAX.endElement(td)
+SAX.characters(
+
+ , 14)
+SAX.startElement(td)
+SAX.characters(
+, 1)
+SAX.startElement(select, name='url')
+SAX.characters(
+
+ , 4)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(option, value='http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=vignette.hts&amp;Collection=vignette&amp;QueryMode=Internet&amp;Query=', selected)
+SAX.characters(Wired News, 10)
+SAX.endElement(option)
+SAX.characters(
+ , 3)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(option, value='http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=webmonkey.hts&amp;Collection=webmonkey&amp;QueryMode=Internet&amp;Query=')
+SAX.characters(Webmonkey, 9)
+SAX.endElement(option)
+SAX.characters(
+ , 2)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(option, value='http://search.hotwired.com/search97/s97.vts?collection=webmonkey_guides&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=webmonkey_guides.hts&amp;QueryMode=Internet&amp;Query=')
+SAX.characters(Webmonkey Guides, 16)
+SAX.endElement(option)
+SAX.characters(
+ , 2)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(option, value='http://search.hotwired.com/search97/s97.vts?collection=hotwired&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=hotwired_archive.hts&amp;QueryMode=Internet&amp;Query=')
+SAX.characters(HotWired Archives, 17)
+SAX.endElement(option)
+SAX.characters(
+ , 3)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(option, value='http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=magazine.hts&amp;Collection=magazine&amp;QueryMode=Internet&amp;Query=')
+SAX.characters(Wired Magazine, 14)
+SAX.endElement(option)
+SAX.characters(
+ , 3)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(option, value='http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=animation.hts&amp;Collection=animation&amp;QueryMode=Internet&amp;Query=')
+SAX.characters(Animation Express, 17)
+SAX.endElement(option)
+SAX.characters(
+ , 3)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(option, value='http://search.hotwired.com/search97/s97.vts?collection=suck&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=suck.hts&amp;QueryMode=Internet&amp;Query=')
+SAX.characters(Suck.com, 8)
+SAX.endElement(option)
+SAX.characters(
+ , 2)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(option, value='http://search.hotwired.com/search97/s97.vts?collection=uber_hotwired&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=uber_hotwired.hts&amp;QueryMode=Internet&amp;Query=')
+SAX.characters(All of HotWired, 15)
+SAX.endElement(option)
+SAX.characters(
+ , 2)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(option, value='http://www.hotbot.com/?SM=MC&amp;DV=0&amp;LG=any&amp;RD=RG&amp;DC=10&amp;DE=2&amp;_v=2&amp;OPs=MDRTP&amp;MT=')
+SAX.characters(The Web -&gt; HotBot, 17)
+SAX.endElement(option)
+SAX.characters(
+, 1)
+SAX.endElement(select)
+SAX.characters(
+
+
+
+ , 16)
+SAX.endElement(td)
+SAX.characters(
+ , 13)
+SAX.startElement(td)
+SAX.characters(
+ , 16)
+SAX.startElement(input, type='SUBMIT', name='SUBMIT', value='SEARCH')
+SAX.endElement(input)
+SAX.characters(
+ , 13)
+SAX.endElement(td)
+SAX.characters(
+ , 11)
+SAX.endElement(tr)
+SAX.characters(
+ , 3)
+SAX.endElement(form)
+SAX.characters(
+ , 16)
+SAX.endElement(table)
+SAX.characters(
+ , 11)
+SAX.endElement(td)
+SAX.characters(
+ , 9)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.comment(
+<TR>
+<td></td>
+<TD valign="TOP" align="LEFT" colspan="3" bgcolor="#F0F0F0"><img src="http://static.wired.com/news/images/spacer.gif" height=1 width=15 alt=""><br>
+<i><font face="Verdana, Arial, Geneva, sans-serif" size="2">Sponsored by<a href="#">Sun Microsystems.</a> We're the dot in .com</font></i><i></i></TD>
+</TR>
+)
+SAX.characters(
+, 1)
+SAX.endElement(table)
+SAX.ignorableWhitespace(
+, 1)
+SAX.comment( end WIRED NEWS header )
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.comment( begin upper left side Navigation )
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.startElement(table, border='0', cellpadding='3', cellspacing='0', align='LEFT', bgcolor='#FFFFFF')
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#FF0000')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.characters(
+ , 8)
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', width='147', height='1', border='0')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(b)
+SAX.characters(SECTIONS, 8)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+
+, 2)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#CCFFCC')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='/news/business/0,1367,,00.html')
+SAX.characters(Business, 8)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#99FF99')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='/news/culture/0,1284,,00.html')
+SAX.characters(Culture, 7)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#CCFFCC')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='/news/technology/0,1282,,00.html')
+SAX.characters(Technology, 10)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#99FF99')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='/news/politics/0,1283,,00.html')
+SAX.characters(Politics, 8)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.startElement(tr)
+SAX.characters(
+, 1)
+SAX.startElement(td, bgcolor='#FF0000')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.characters(
+, 1)
+SAX.startElement(b)
+SAX.characters(WIRE SERVICE NEWS, 17)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+
+, 2)
+SAX.startElement(tr)
+SAX.characters(
+, 1)
+SAX.startElement(td, bgcolor='#99FF99')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='/news/news/reuters/')
+SAX.characters(Top Headlines, 13)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+
+, 2)
+SAX.startElement(tr)
+SAX.characters(
+, 1)
+SAX.startElement(td, bgcolor='#CCFFCC')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='/news/news/reuters/sports/')
+SAX.characters(Sports, 6)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+
+, 2)
+SAX.startElement(tr)
+SAX.characters(
+, 1)
+SAX.startElement(td, bgcolor='#99FF99')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='/news/news/reuters/business/')
+SAX.characters(Finance, 7)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.comment( End upper left nav )
+SAX.comment( Begin lower Left Nav )
+SAX.characters(
+ , 5)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#FF0000')
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.characters(
+ , 8)
+SAX.startElement(b)
+SAX.startElement(font, size='1')
+SAX.characters(FREE DELIVERY, 13)
+SAX.endElement(font)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 5)
+SAX.endElement(tr)
+SAX.characters(
+ , 5)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#99FF99')
+SAX.characters(
+, 1)
+SAX.startElement(table, cellspacing='0', cellpadding='0', border='0')
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#99FF99')
+SAX.characters(
+ , 4)
+SAX.startElement(form, action='http://r.hotwired.com/r/hw_wm_r_nav_nwsltr/http://perl.hotwired.com/massmail/cgiParser.cgi', method='get', target='_top')
+SAX.characters(
+
+ , 3)
+SAX.startElement(input, type='hidden', name='success_page', value='http://www.hotwired.com/email/signup/wirednews-ascii.html')
+SAX.endElement(input)
+SAX.characters(
+
+, 3)
+SAX.startElement(input, type='hidden', name='failure_page', value='http://www.hotwired.com/email/signup/wirednews-ascii.html')
+SAX.endElement(input)
+SAX.characters(
+
+, 3)
+SAX.startElement(input, type='hidden', name='LIST', value='wn_ascii')
+SAX.endElement(input)
+SAX.characters(
+, 1)
+SAX.startElement(input, type='hidden', name='SOURCE', value='other')
+SAX.endElement(input)
+SAX.characters(
+ , 2)
+SAX.startElement(input, type='hidden', name='ACTION', value='subscribe')
+SAX.endElement(input)
+SAX.characters(
+
+, 3)
+SAX.startElement(input, type='TEXT', name='from', size='10', value='enter email')
+SAX.endElement(input)
+SAX.characters(&nbsp;, 2)
+SAX.characters(
+, 1)
+SAX.endElement(form)
+SAX.endElement(td)
+SAX.characters(
+ , 4)
+SAX.startElement(td, valign='top', bgcolor='#99FF99')
+SAX.characters(
+ , 3)
+SAX.startElement(input, type='SUBMIT', name='SUBMIT', value='GO')
+SAX.endElement(input)
+SAX.characters(
+
+ , 5)
+SAX.endElement(td)
+SAX.characters(
+ , 2)
+SAX.endElement(tr)
+SAX.characters( , 4)
+SAX.error: Unexpected end tag : form
+SAX.characters(
+, 1)
+SAX.endElement(table)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#FF0000')
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.characters(
+ , 8)
+SAX.startElement(b)
+SAX.startElement(font, size='1')
+SAX.characters(STOCKS, 6)
+SAX.endElement(font)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#99FF99')
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.characters(Get Quote:, 10)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 5)
+SAX.startElement(td, bgcolor='#99FF99', marginwidth='0', marginheight='0')
+SAX.startElement(form, method='get', action='http://r.wired.com/r/10020/http://stocks.wired.com/stocks_quotes.asp')
+SAX.startElement(input, type='TEXT', name='Symbol', size='12')
+SAX.endElement(input)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(input, type='SUBMIT', name='submit', value='GO')
+SAX.endElement(input)
+SAX.endElement(form)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.comment( BEGIN BUTTON ADS )
+SAX.characters(
+
+ , 5)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#CCFFCC')
+SAX.characters(
+, 1)
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.characters(Financial Services, 18)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(center)
+SAX.characters(
+, 1)
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='3', width='5', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(img, src='http://static.wired.com/news/images/button_ads_news10.gif', width='143', height='56', border='0', alt='', usemap='#buttons', hspace='0', vspace='0')
+SAX.endElement(img)
+SAX.characters(
+, 1)
+SAX.endElement(center)
+SAX.characters(
+
+, 2)
+SAX.startElement(map, name='buttons')
+SAX.characters(
+ , 9)
+SAX.startElement(area, shape='RECT', alt='Datek', coords='0,0,69,24', href='http://r.wired.com/r/1649/http://ads16.focalink.com/SmartBanner/page/1266.631')
+SAX.endElement(area)
+SAX.characters(
+ , 9)
+SAX.startElement(area, shape='RECT', alt='Wired Index Fund', coords='73,0,142,24', href='http://r.wired.com/r/227/http://www.gffunds.com/wired')
+SAX.endElement(area)
+SAX.characters(
+ , 9)
+SAX.startElement(area, shape='RECT', alt='internet.com Index Fund', coords='73,31,142,55', href='http://r.wired.com/r/298/http://www.gffunds.com/isdex/')
+SAX.endElement(area)
+SAX.characters(
+ , 9)
+SAX.startElement(area, shape='RECT', alt='GetSmart&apos;s MortgageFinder', coords='0,31,69,55', href='http://r.wired.com/r/294/http://www.getsmartinc.com/mortgage/HomeBanner?BANNERNAME=www.getsmartinc.com/mwired001m6075x25')
+SAX.endElement(area)
+SAX.endElement(map)
+SAX.characters(
+ , 9)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters( , 1)
+SAX.comment( END BUTTON ADS )
+SAX.characters(
+
+ , 6)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#99FF99')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='http://redirect.wired.com/redir/51/http://stocks.wired.com/')
+SAX.characters(Today's Summary, 15)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#CCFFCC')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='http://r.wired.com/r/hb_fin_r_wn_top/http://stocks.wired.com/stocks_indexes_detail.asp?Symbol=$WIRED')
+SAX.characters(Wired Index, 11)
+SAX.endElement(a)
+SAX.characters( | , 3)
+SAX.startElement(a, href='http://redirect.wired.com/redir/52/http://stocks.wired.com/stocks_indexes.asp ')
+SAX.characters(All Indexes, 11)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#99FF99')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(a, href='http://redirect.wired.com/redir/53/http://stocks.wired.com/stocks_portfolios.asp')
+SAX.characters(Portfolios, 10)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+
+, 2)
+SAX.comment( BEGIN B&N spot )
+SAX.characters(
+
+, 2)
+SAX.startElement(tr)
+SAX.characters(
+ , 3)
+SAX.startElement(td, bgcolor='#FF0000')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.startElement(b)
+SAX.characters(FIND A BOOK, 11)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#CCFFCC')
+SAX.characters(
+, 1)
+SAX.startElement(table, cellspacing='0', cellpadding='0', border='0', width='145')
+SAX.characters(
+ , 17)
+SAX.startElement(tr)
+SAX.startElement(td, bgcolor='#CCFFCC')
+SAX.characters(
+ , 17)
+SAX.startElement(form, action='http://r.wired.com/r/wn_nav_c_bn/http://barnesandnoble.bfast.com/booklink/click')
+SAX.characters(
+, 1)
+SAX.startElement(input, type='hidden', name='sourceid', value='383471')
+SAX.endElement(input)
+SAX.characters(
+, 1)
+SAX.startElement(input, type='hidden', name='categoryid', value='categorydropdown')
+SAX.endElement(input)
+SAX.characters(
+ , 17)
+SAX.startElement(font, size='2')
+SAX.characters(
+ , 17)
+SAX.startElement(select, name='Subjects', size='4')
+SAX.characters(
+, 1)
+SAX.startElement(option, value='301')
+SAX.characters(Business Top 20
+, 16)
+SAX.endElement(option)
+SAX.startElement(option, value='500')
+SAX.characters(Computers
+, 10)
+SAX.endElement(option)
+SAX.startElement(option, value='503')
+SAX.characters(Computer Games
+, 15)
+SAX.endElement(option)
+SAX.startElement(option, value='1604')
+SAX.characters(Current Affairs
+, 16)
+SAX.endElement(option)
+SAX.startElement(option, value='511')
+SAX.characters(Cyberculture
+, 13)
+SAX.endElement(option)
+SAX.startElement(option, value='510')
+SAX.characters(Internet/Web
+, 13)
+SAX.endElement(option)
+SAX.startElement(option, value='303')
+SAX.characters(Investing
+, 10)
+SAX.endElement(option)
+SAX.startElement(option, value='1606')
+SAX.characters(Law
+, 4)
+SAX.endElement(option)
+SAX.startElement(option, value='513')
+SAX.characters(Multimedia
+
+, 12)
+SAX.endElement(option)
+SAX.startElement(option, value='1605')
+SAX.characters(Newsmakers
+, 11)
+SAX.endElement(option)
+SAX.startElement(option, value='1607')
+SAX.characters(Politics/Govt.
+
+ , 17)
+SAX.endElement(option)
+SAX.startElement(option, value='315')
+SAX.characters( Web Business
+ , 16)
+SAX.endElement(option)
+SAX.startElement(option, value='2800')
+SAX.characters( Bargain Books
+ , 40)
+SAX.endElement(option)
+SAX.startElement(option, value='4')
+SAX.characters(Other
+
+
+
+
+
+ , 14)
+SAX.endElement(option)
+SAX.endElement(select)
+SAX.endElement(font)
+SAX.endElement(form)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.characters(
+ , 2)
+SAX.startElement(tr, align='left', valign='top')
+SAX.characters(
+ , 17)
+SAX.startElement(td, valign='top', bgcolor='#CCFFCC')
+SAX.characters( , 1)
+SAX.startElement(input, type='submit', value='GO')
+SAX.endElement(input)
+SAX.characters(
+
+, 2)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(img, src='http://barnesandnoble.bfast.com/booklink/serve?sourceid=383471&amp;is_search=Y', border='0', align='top')
+SAX.endElement(img)
+SAX.characters(
+, 1)
+SAX.comment(
+<IMG SRC="http://www.wired.com/partner/bn/trackingimg/ot_wn_nav_c_bn.gif" border=0 width=1 height=1 align=top>
+)
+SAX.characters(
+, 1)
+SAX.endElement(td)
+SAX.characters(
+
+ , 35)
+SAX.endElement(tr)
+SAX.characters(
+ , 17)
+SAX.startElement(tr, align='left', valign='top')
+SAX.characters(
+
+ , 11)
+SAX.startElement(td, align='left', valign='top', colspan='2', rowspan='1', bgcolor='#CCFFCC')
+SAX.characters(
+, 1)
+SAX.startElement(p)
+SAX.characters(
+ , 9)
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, ', color='#000000')
+SAX.characters(Powered by , 11)
+SAX.startElement(a, href='http://r.wired.com/r/wn_nav_c_bn/http://barnesandnoble.bfast.com/booklink/click?sourceid=383471')
+SAX.characters(barnesandnoble.com, 18)
+SAX.endElement(a)
+SAX.characters(
+ , 2)
+SAX.endElement(font)
+SAX.characters(
+, 1)
+SAX.startElement(br, clear='all')
+SAX.endElement(br)
+SAX.characters(
+
+
+, 3)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.characters(
+ , 9)
+SAX.endElement(tr)
+SAX.characters( , 2)
+SAX.error: Unexpected end tag : form
+SAX.characters(
+ , 9)
+SAX.endElement(table)
+SAX.characters(
+
+, 2)
+SAX.endElement(td)
+SAX.endElement(tr)
+SAX.characters(
+ , 2)
+SAX.comment( END B&N spot )
+SAX.characters(
+
+, 7)
+SAX.comment( BEGIN MAGAZINE SPOT )
+SAX.characters(
+
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#000000')
+SAX.startElement(font, color='#FFFFFF', face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(b)
+SAX.characters(WIRED
+ MAGAZINE , 22)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.startElement(tr)
+SAX.characters(
+, 2)
+SAX.startElement(td, bgcolor='#FFFF99', align='CENTER')
+SAX.characters(
+, 1)
+SAX.startElement(font, face='verdana, arial, helvetica, sans-serif', size='1')
+SAX.characters(
+, 1)
+SAX.startElement(b)
+SAX.characters(
+, 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.startElement(a, href='http://www.wired.com/wired/')
+SAX.startElement(img, src='http://static.wired.com/news/images/wiredcover.gif', width='91', height='109', border='0', alt='Wired Magazine')
+SAX.endElement(img)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(b)
+SAX.characters(
+
+Issue 7.11
+, 13)
+SAX.endElement(font)
+SAX.characters(
+, 1)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+
+, 2)
+SAX.startElement(tr)
+SAX.characters(
+, 2)
+SAX.startElement(td, bgcolor='#FFFF99', align='center')
+SAX.characters(
+, 1)
+SAX.startElement(font, face='verdana, arial, helvetica, sans-serif', size='1')
+SAX.characters(
+
+, 3)
+SAX.startElement(a, href='http://www.wired.com/wired/subscribe/special/79WN')
+SAX.characters(Subscribe to Wired., 19)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(Special offer!, 14)
+SAX.endElement(a)
+SAX.characters(
+
+
+, 3)
+SAX.endElement(font)
+SAX.characters(
+, 1)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.comment( END MAGAZINE SPOT )
+SAX.characters(
+
+ , 4)
+SAX.startElement(tr)
+SAX.characters(
+ , 5)
+SAX.startElement(td, bgcolor='#000000')
+SAX.characters(
+ , 6)
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.startElement(b)
+SAX.characters(HOTWIRED, 8)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#FFFF99')
+SAX.characters( , 1)
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://www.hotwired.com/')
+SAX.characters(Frontdoor, 9)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://www.hotwired.com/webmonkey/')
+SAX.characters(Webmonkey, 9)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://www.hotwired.com/webmonkey/guides/index.html')
+SAX.characters(Webmonkey Guides, 16)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://www.hotwired.com/rgb/')
+SAX.characters(RGB Gallery, 11)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://www.hotwired.com/animation/')
+SAX.characters(Animation Express, 17)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://go.suck.com/su_wnfd')
+SAX.characters(Suck.com, 8)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+
+ , 8)
+SAX.startElement(tr)
+SAX.characters(
+ , 5)
+SAX.startElement(td, bgcolor='#000000')
+SAX.characters(
+ , 6)
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.startElement(b)
+SAX.characters(HOTBOT, 6)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+ , 3)
+SAX.startElement(tr)
+SAX.characters(
+ , 6)
+SAX.startElement(td, bgcolor='#FFFF99')
+SAX.characters( , 1)
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#000000')
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://redirect.wired.com/redir/54/http://www.hotbot.com/')
+SAX.characters(Search, 6)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://shop.hotbot.com/')
+SAX.characters(Shopping, 8)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+
+ , 6)
+SAX.startElement(tr)
+SAX.startElement(td)
+SAX.characters(
+ , 3)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 3)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.characters(
+ , 3)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.characters(
+ Wired News , 14)
+SAX.startElement(a, href='/news/who/0,1362,,00.html')
+SAX.characters(staff, 5)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+ , 4)
+SAX.comment( Wired News is <a href="http://www.wired.com/news/jobs.html">hiring</a><br><br> )
+SAX.characters(
+
+ , 4)
+SAX.startElement(b)
+SAX.startElement(a, href='/news/feedback/0,1364,,00.html')
+SAX.characters(Contact us, 10)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.characters(
+
+
+ , 7)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+ , 6)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.characters(Wired News delivered, 21)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(by , 3)
+SAX.startElement(a, href='/news/palmpilot/0,1365,,00.html')
+SAX.characters(PalmPilot, 9)
+SAX.endElement(a)
+SAX.characters(,, 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://www.hotwired.com/email/signup/wn_outlook.html')
+SAX.characters(Outlook Express, 16)
+SAX.endElement(a)
+SAX.characters(,, 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(a, href='http://redirect.wired.com/redir/55/http://form.netscape.com/ibd/html/ibd_frameset.html')
+SAX.characters(In-Box Direct, 13)
+SAX.endElement(a)
+SAX.characters(,, 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+or , 4)
+SAX.startElement(a, href='/news/pointcast/0,1366,,00.html')
+SAX.characters(PointCast, 9)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.comment( TRACKING )
+SAX.characters(
+, 1)
+SAX.startElement(img, src='http://www.wired.com/special/modx/news.gif', height='1', width='1', alt='')
+SAX.endElement(img)
+SAX.characters(
+, 1)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+
+, 2)
+SAX.endElement(table)
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.comment( end lower left side Navigation )
+SAX.ignorableWhitespace(
+, 1)
+SAX.comment( CONTENT TABLE )
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.startElement(table, border='0', width='447', cellspacing='0', cellpadding='0', bordercolor='#66FF00')
+SAX.characters(
+ , 2)
+SAX.startElement(tr)
+SAX.characters(
+ , 3)
+SAX.startElement(td, valign='TOP', align='LEFT', rowspan='2')
+SAX.characters(
+ , 4)
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='1', width='15', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 3)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.startElement(td, colspan='3', valign='TOP', align='LEFT')
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='7', width='432', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+
+, 3)
+SAX.comment( SQL query for Package here )
+SAX.characters(
+
+, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.startElement(b)
+SAX.startElement(i)
+SAX.characters(Nomad's Land, 12)
+SAX.endElement(i)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(img, src='http://static.wired.com/news/images/pix155.gif', height='10', width='155', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( IBD_SUBJECT: Homeless, but ID'd, in Seattle )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='5')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/politics/0,1283,31911,00.html')
+SAX.characters(Homeless, but ID'd, in Seattle, 30)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='1', face='Verdana, Arial, Geneva, sans-serif', color='#FF0000')
+SAX.characters(8:15 a.m., 9)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(The city council approves a pl, 180)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/politics/0,1283,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Politics, 8)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(table, bgcolor='#F0F0F0', cellpadding='0', cellspacing='0', border='0', width='147', align='RIGHT')
+SAX.characters(
+ , 2)
+SAX.comment( Commentary Frag Begin )
+SAX.characters(
+ , 9)
+SAX.startElement(tr)
+SAX.characters(
+ , 11)
+SAX.startElement(td, bgcolor='#000000')
+SAX.characters(&nbsp;, 2)
+SAX.endElement(td)
+SAX.characters(
+ , 11)
+SAX.startElement(td, bgcolor='#000000')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.startElement(b)
+SAX.characters(HITS , 5)
+SAX.characters(&amp;, 1)
+SAX.characters( MISC., 6)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 9)
+SAX.endElement(tr)
+SAX.characters(
+ , 9)
+SAX.startElement(tr)
+SAX.characters(
+ , 11)
+SAX.startElement(td)
+SAX.characters(&nbsp;, 2)
+SAX.endElement(td)
+SAX.characters(
+ , 11)
+SAX.startElement(td)
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='5', width='5', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+ , 4)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/commentarySection/0,1292,31664,00.html')
+SAX.characters(Calendar of E-Vents, 19)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(Ongoing goings-on. , 19)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/commentarySection/0,1292,31926,00.html')
+SAX.characters(Rants , 6)
+SAX.error: htmlParseEntityRef: no name
+SAX.characters(&amp;, 1)
+SAX.characters( Raves, 6)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(Readers on Apple's G4 ... AOL', 59)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters( , 2)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 9)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.comment( Commentary Frag End )
+SAX.characters(
+, 1)
+SAX.startElement(tr)
+SAX.characters(
+, 2)
+SAX.startElement(td, align='left', bgcolor='#000000')
+SAX.characters(&nbsp;, 2)
+SAX.endElement(td)
+SAX.characters(
+, 2)
+SAX.startElement(td, bgcolor='#000000')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.startElement(b)
+SAX.characters(CURRENT HOO-HA, 14)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+
+, 2)
+SAX.startElement(tr)
+SAX.characters(
+, 2)
+SAX.startElement(td)
+SAX.characters(&nbsp;, 2)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.startElement(td)
+SAX.characters(
+, 1)
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='5', width='5', alt='')
+SAX.endElement(img)
+SAX.characters(
+, 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/mp3/0,1285,,00.html')
+SAX.characters(MP3 Rocks the Web, 17)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(Download the sound. , 21)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Sponsored by , 13)
+SAX.startElement(a, href='http://r.hotwired.com/r/wn_fd_mp3_r_mscm_txt/http://webfarm.mediaplex.com/click_thru_request/164-1361b-1052', style='text-decoration:none')
+SAX.startElement(font, color='#000000')
+SAX.characters(Musicmaker, 10)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/wireless/0,1382,,00.html')
+SAX.characters(The Wireless World, 18)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(Networking gets unplugged. , 28)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Sponsored by , 13)
+SAX.startElement(a, href='http://www.ericsson.se/get/internet/default.shtml', style='text-decoration:none')
+SAX.startElement(font, color='#000000')
+SAX.characters(Ericsson, 8)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/digiwood/0,1412,,00.html')
+SAX.characters(Digital Hollywood, 17)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(The buzz of tech., 17)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/ipo/0,1350,,00.html')
+SAX.characters(IPO Outlook, 11)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(Deals in the pipeline. , 24)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Sponsored by , 13)
+SAX.startElement(a, href='http://r.hotwired.com/r/wn_ipo_r_sun_txt/http://sun.com/ads/smi/brand/hotwired.html', style='text-decoration:none')
+SAX.startElement(font, color='#000000')
+SAX.characters(Sun, 3)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/ebiz/0,1272,,00.html')
+SAX.characters(E-Biz, 5)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(Business unusual. , 19)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Sponsored by , 13)
+SAX.startElement(a, href='http://r.wired.com/r/wn_fd_r_ebiz_ibm_txt/http://www.ibm.com', style='text-decoration:none')
+SAX.startElement(font, color='#000000')
+SAX.characters(IBM, 3)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/medtech/0,1286,,00.html')
+SAX.characters(Med-Tech Center, 15)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(From the bleeding edge., 23)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Sponsored by WebMD, 18)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/linux/0,1411,,00.html')
+SAX.characters(The Linux Effect, 16)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(Not just for geeks., 19)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters( , 1)
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='7', width='5', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/exec/0,1370,,00.html')
+SAX.characters(Executive Summary, 17)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='1', face='Arial, Helvetica, sans-serif', color='#000000')
+SAX.characters(CEOs, COOs, CIOs unite. , 25)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Sponsored by , 13)
+SAX.startElement(a, href='http://r.wired.com/r/wn_exec_r_vign/http://www.vignette.com/', style='text-decoration:none')
+SAX.startElement(font, color='#000000')
+SAX.characters(Vignette, 8)
+SAX.error: Opening and ending tag mismatch: a and font
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/school/0,1383,,00.html')
+SAX.characters(Making the Grade, 16)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(Reading, writing, and ROM. , 28)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Sponsored by , 13)
+SAX.startElement(a, href='http://r.hotwired.com/r/wn_sch_r_nav_uop/http://ads25.focalink.com/SmartBanner/page?12630.53', style='text-decoration:none')
+SAX.startElement(font, color='#000000')
+SAX.characters(U of Phoenix, 12)
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/infostructure/0,1377,,00.html')
+SAX.characters(Infostructure, 13)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='1', face='Arial, Helvetica, sans-serif', color='#000000')
+SAX.characters(An IS/IT resource , 18)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(i)
+SAX.characters(Sponsored by , 13)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(a, href='http://r.wired.com/r/wn_is_r_ssec/http://ad.doubleclick.net/clk;653163;3599571;s?http://www.sprintbiz.com/s
+ervlet/appservlet?from=/wired/sprint/&amp;template=/security/security.html&amp;SITE=
+wired.com&amp;BANNER=Sprint', style='text-decoration:none')
+SAX.startElement(font, color='#000000')
+SAX.characters(Sprint, 6)
+SAX.error: Opening and ending tag mismatch: a and font
+SAX.endElement(font)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.error: End tag : expected '>'
+SAX.endElement(font)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, size='2', face='Arial,Helvetica, sans-serif')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/y2k/0,1360,,00.html')
+SAX.characters(Y2K Watch, 9)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif')
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.characters(Tick... Tick... Tick..., 23)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 3)
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='2')
+SAX.startElement(b)
+SAX.startElement(i)
+SAX.startElement(a, href='/news/special_reports/1,1293,,00.html')
+SAX.characters(More Hoo-Ha, 11)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.error: Opening and ending tag mismatch: td and font
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+, 1)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.comment( start of Gen News )
+SAX.characters(
+ , 17)
+SAX.startElement(tr)
+SAX.characters(
+ , 20)
+SAX.startElement(td, bgcolor='#000000')
+SAX.characters(&nbsp;, 2)
+SAX.endElement(td)
+SAX.characters(
+ , 11)
+SAX.startElement(td, bgcolor='#000000')
+SAX.startElement(font, size='1', face='Verdana, Arial, Helvetica, sans-serif', color='#FFFFFF')
+SAX.startElement(b)
+SAX.characters(MEANWHILE..., 12)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.endElement(td)
+SAX.characters(
+ , 9)
+SAX.endElement(tr)
+SAX.characters(
+
+ , 10)
+SAX.startElement(tr)
+SAX.characters(
+ , 12)
+SAX.startElement(td)
+SAX.characters(&nbsp;, 2)
+SAX.endElement(td)
+SAX.characters(
+ , 11)
+SAX.startElement(td, align='left', valign='top')
+SAX.characters(
+ , 11)
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='5', width='5', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+
+, 3)
+SAX.comment( 31942 )
+SAX.characters(
+, 1)
+SAX.startElement(font, size='2', face='Arial, Helvetica, sans-serif', color='#000000')
+SAX.startElement(b)
+SAX.characters(F&uuml;hrer Furor, 13)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, size='1', face='Arial, Geneva, sans-serif', color='#000000')
+SAX.startElement(p)
+SAX.characters(
+Contruction workers in Berli, 637)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(p)
+SAX.startElement(li)
+SAX.characters(More from , 10)
+SAX.error: htmlParseEntityRef: expecting ';'
+SAX.startElement(a, href='http://www.lycos.com/news/flash/hitlerbunker.html?v=wn1015&amp;lpv=1')
+SAX.characters(Lycos, 5)
+SAX.endElement(a)
+SAX.endElement(li)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 2)
+SAX.endElement(td)
+SAX.characters(
+ , 9)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.comment( end of Gen News )
+SAX.characters(
+, 1)
+SAX.endElement(table)
+SAX.characters(
+
+
+, 3)
+SAX.startElement(font, size='1')
+SAX.characters(&nbsp;, 2)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.endElement(font)
+SAX.characters(
+
+, 2)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.startElement(b)
+SAX.startElement(i)
+SAX.characters(Other Top Stories, 17)
+SAX.endElement(i)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(img, src='http://static.wired.com/news/images/pix155.gif', height='10', width='155', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.comment( SQL query here )
+SAX.characters(
+, 1)
+SAX.comment( IBD_SUBJECT:Wall Street Keeps Reeling )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/reuters/0,1349,31934,00.html')
+SAX.characters(Wall Street Keeps Reeling, 25)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#ff0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(10:15 a.m., 10)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(The Dow and Nasdaq suffer size, 180)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/reuters/0,1349,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Reuters, 7)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( IBD_SUBJECT:The Market's Madness )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/reuters/0,1349,31935,00.html')
+SAX.characters(The Market's Madness, 20)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#ff0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(9:10 a.m., 9)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(The bulls and the bears are in, 128)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/reuters/0,1349,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Reuters, 7)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( IBD_SUBJECT:'Want a Loan? What's Your Race?' )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/politics/0,1283,31533,00.html')
+SAX.characters('Want a Loan? What's Your Race, 32)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#ff0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(3:00 a.m., 9)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(The Federal Reserve is in the , 184)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/politics/0,1283,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Politics, 8)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( IBD_SUBJECT:Music Regs: A Bagful of Noise )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/business/0,1367,31832,00.html')
+SAX.characters(Music Regs: A Bagful of Noise, 29)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#ff0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(3:00 a.m., 9)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(The struggle to come up with a, 171)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/business/0,1367,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Business, 8)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( IBD_SUBJECT:Can't Beat 'Em? Green 'Em )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/technology/0,1282,31927,00.html')
+SAX.characters(Can't Beat 'Em? Green 'Em, 25)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#ff0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(3:00 a.m., 9)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(High-tech companies are notori, 186)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/technology/0,1282,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Technology, 10)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( IBD_SUBJECT:Y2K Cloud Over MS Office )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/business/0,1367,31932,00.html')
+SAX.characters(Y2K Cloud Over MS Office, 24)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#ff0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(3:00 a.m., 9)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(Windows NT sales remain strong, 165)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/business/0,1367,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Business, 8)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#FF0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(Med-Tech, 8)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( IBD_SUBJECT:Biochips for Custom Chemo )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/technology/0,1282,31914,00.html')
+SAX.characters(Biochips for Custom Chemo, 25)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#ff0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(3:00 a.m., 9)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(Different cancer patients need, 207)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/technology/0,1282,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Technology, 10)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( IBD_SUBJECT:High Stakes in Priceline Suit )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/business/0,1367,31916,00.html')
+SAX.characters(High Stakes in Priceline Suit, 29)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#ff0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(3:00 a.m., 9)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(It's not just another round of, 196)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/business/0,1367,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Business, 8)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( IBD_SUBJECT:Biodiversity Merges Online )
+SAX.startElement(font, face='Arial, Helvetica, sans-serif', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='/news/technology/0,1282,31918,00.html')
+SAX.characters(Biodiversity Merges Online, 26)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, color='#ff0000', face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(3:00 a.m., 9)
+SAX.endElement(font)
+SAX.characters(&nbsp;, 2)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.characters(The far-flung databases on glo, 196)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='Verdana, Arial, Helvetica, sans-serif', size='1')
+SAX.startElement(i)
+SAX.startElement(a, href='/news/technology/0,1282,,00.html')
+SAX.characters(in, 2)
+SAX.characters(&nbsp;, 2)
+SAX.characters(Technology, 10)
+SAX.endElement(a)
+SAX.endElement(i)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( SQL above )
+SAX.characters(
+
+
+
+, 12)
+SAX.comment(----TRADES-------)
+SAX.characters(
+, 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='2')
+SAX.startElement(b)
+SAX.startElement(i)
+SAX.characters(Elsewhere Today, 15)
+SAX.endElement(i)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(img, src='http://static.wired.com/news/images/pix155.gif', height='10', width='155', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.comment( SQL query here )
+SAX.characters(
+, 1)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://www.thestandard.com/articles/display/0,1449,6975,00.html?home.tf')
+SAX.characters(FCC: Hands-Off on Broadband, 27)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.startElement(cite)
+SAX.characters(The Industry Standard, 21)
+SAX.endElement(cite)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://news.lycos.com/stories/TopNews/19991014RTNEWS-ARMS-TREATY.asp')
+SAX.characters(White House Lashes Out on Trea, 32)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.characters(Lycos, 5)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://www.pathfinder.com/time/magazine/articles/0,3266,32207,00.html')
+SAX.characters(Steve Jobs at 44, 16)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.startElement(cite)
+SAX.characters(Time, 4)
+SAX.endElement(cite)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://www.zdnet.com/zdnn/stories/news/0,4586,2353608,00.html')
+SAX.characters(Computers May Run on Gas, 24)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.characters(ZDNN, 4)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://www.nytimes.com/library/tech/99/10/biztech/articles/14free.html')
+SAX.characters(Much Is Free in the Wired Worl, 31)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.startElement(cite)
+SAX.characters(The New York Times, 18)
+SAX.endElement(cite)
+SAX.characters( (Registration Required), 24)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://www.usatoday.com/life/cyber/nb/nb4.htm')
+SAX.characters(Melissa: I'm Baaaack, 20)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.startElement(cite)
+SAX.characters(USA Today, 9)
+SAX.endElement(cite)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://www.msnbc.com/news/322926.asp')
+SAX.characters(Domain Owners Surrender Privac, 31)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.characters(MSNBC, 5)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://www.washingtonpost.com/wp-srv/business/longterm/tech/techthursday/download/download.htm')
+SAX.characters(Dividing to Conquer in VC Game, 30)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.startElement(cite)
+SAX.characters(The Washington Post, 19)
+SAX.endElement(cite)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://www.salon.com/tech/books/1999/10/14/redhat_book/index.html')
+SAX.characters(The Red Hat Diaries, 19)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.characters(Salon, 5)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='helvetica, arial', size='3')
+SAX.startElement(b)
+SAX.startElement(a, href='http://news.bbc.co.uk/hi/english/sci/tech/newsid_473000/473856.stm')
+SAX.characters(Screensaver to Predict Climate, 30)
+SAX.endElement(a)
+SAX.endElement(b)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(font, face='geneva, arial', size='2')
+SAX.characters(BBC News, 8)
+SAX.endElement(font)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.comment( SQL above )
+SAX.characters(
+
+
+
+, 4)
+SAX.comment( - - - - - - - - - - - - )
+SAX.characters(
+
+ , 6)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+
+ , 4)
+SAX.startElement(tr)
+SAX.characters(
+ , 4)
+SAX.startElement(td, valign='TOP', align='LEFT')
+SAX.characters(
+
+ , 6)
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='1', width='280', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+ , 7)
+SAX.comment( FOOTER )
+SAX.characters(
+
+, 2)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(img, src='http://static.wired.com/news/images/pix155.gif', height='10', width='155', border='0', usemap='#navstrip.map', alt='')
+SAX.endElement(img)
+SAX.characters(
+, 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.startElement(img, src='http://static.wired.com/news/images/navstrip_off.gif', height='17', width='126', usemap='#navstrip.map', border='0', alt='')
+SAX.endElement(img)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+
+, 2)
+SAX.startElement(p)
+SAX.startElement(font, face='Verdana, Arial, Geneva, sans-serif', size='1')
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://www.wired.com/news/feedback.html')
+SAX.characters(Send us feedback, 16)
+SAX.endElement(a)
+SAX.characters(
+, 1)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://www.hotwired.com/jobs/')
+SAX.characters(Work at Wired Digital, 21)
+SAX.endElement(a)
+SAX.characters(
+, 1)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://home.wired.com/advertising/')
+SAX.characters(Advertise with us, 17)
+SAX.endElement(a)
+SAX.characters(
+, 1)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://home.wired.com/')
+SAX.characters(About Wired Digital, 19)
+SAX.endElement(a)
+SAX.characters(
+, 1)
+SAX.characters(&nbsp;, 2)
+SAX.characters(|, 1)
+SAX.characters(&nbsp;, 2)
+SAX.characters(
+, 1)
+SAX.startElement(a, href='http://www.wired.com/home/digital/privacy/')
+SAX.characters(Our Privacy Policy, 18)
+SAX.endElement(a)
+SAX.endElement(font)
+SAX.characters(
+
+
+, 3)
+SAX.endElement(p)
+SAX.startElement(p)
+SAX.startElement(font, face='Verdana, Arial, Geneva', size='1')
+SAX.startElement(a, href='http://www.wired.com/home/copyright.html')
+SAX.characters(Copyright, 9)
+SAX.endElement(a)
+SAX.characters( , 1)
+SAX.characters(&copy;, 2)
+SAX.characters( 1994-99 Wired Digital Inc. Al, 48)
+SAX.endElement(font)
+SAX.characters(
+
+, 2)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+, 1)
+SAX.comment( TRACKING )
+SAX.characters(
+, 1)
+SAX.startElement(img, src='http://www.wired.com/special/modx/news.gif', height='1', width='1', alt='')
+SAX.endElement(img)
+SAX.characters(
+
+, 2)
+SAX.startElement(map, name='navstrip.map')
+SAX.characters(
+, 1)
+SAX.startElement(area, shape='rect', coords='0,0,14,16', href='/news')
+SAX.endElement(area)
+SAX.characters(
+, 1)
+SAX.startElement(area, shape='rect', coords='15,0 31,16', href='/news/business/')
+SAX.endElement(area)
+SAX.characters(
+, 1)
+SAX.startElement(area, shape='rect', coords='32,0,48,16', href='/news/culture/')
+SAX.endElement(area)
+SAX.characters(
+, 1)
+SAX.startElement(area, shape='rect', coords='49,0,65,16', href='/news/technology/')
+SAX.endElement(area)
+SAX.characters(
+, 1)
+SAX.startElement(area, shape='rect', coords='66,0,83,16', href='/news/politics/')
+SAX.endElement(area)
+SAX.characters(
+, 1)
+SAX.endElement(map)
+SAX.characters(
+ , 2)
+SAX.endElement(p)
+SAX.endElement(td)
+SAX.characters(
+ , 4)
+SAX.startElement(td, valign='TOP', align='LEFT')
+SAX.characters(
+ , 5)
+SAX.startElement(img, src='http://static.wired.com/news/images/spacer.gif', height='1', width='5', alt='')
+SAX.endElement(img)
+SAX.characters(
+ , 4)
+SAX.endElement(td)
+SAX.characters(
+ , 4)
+SAX.startElement(td, valign='TOP', align='LEFT')
+SAX.characters(
+ , 4)
+SAX.endElement(td)
+SAX.characters(
+ , 3)
+SAX.endElement(tr)
+SAX.characters(
+, 1)
+SAX.endElement(table)
+SAX.ignorableWhitespace(
+
+
+, 3)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.endDocument()
diff --git a/result/SVG/4rects.xml b/result/SVG/4rects.xml
new file mode 100644
index 0000000..dfaa02d
--- /dev/null
+++ b/result/SVG/4rects.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Four separate rectangles
+ </desc>
+ <rect width="20" height="60"/>
+ <rect width="30" height="70"/>
+ <rect width="40" height="80"/>
+ <rect width="50" height="90"/>
+</svg>
diff --git a/result/SVG/a-valid.xml b/result/SVG/a-valid.xml
new file mode 100644
index 0000000..8f4a204
--- /dev/null
+++ b/result/SVG/a-valid.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This valid svg document draws a triangle which is a hyperlink
+ </desc>
+ <a href="http://www.w3.org">
+ <p d="M 0 0 L 200 0 L 100 200 Z"/>
+ </a>
+</svg>
diff --git a/result/SVG/a-wf.xml b/result/SVG/a-wf.xml
new file mode 100644
index 0000000..7facfd5
--- /dev/null
+++ b/result/SVG/a-wf.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <desc>This well formed svg document draws a triangle which is a hyperlink
+ </desc>
+ <a xml:link="simple" show="replace" actuate="user" href="http://www.w3.org">
+ <p d="M 0 0 L 200 0 L 100 200 Z"/>
+ </a>
+</svg>
diff --git a/result/SVG/bike-errors.xml b/result/SVG/bike-errors.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/SVG/bike-errors.xml
diff --git a/result/SVG/bike.xml b/result/SVG/bike.xml
new file mode 100644
index 0000000..410869d
--- /dev/null
+++ b/result/SVG/bike.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <title>Kona Lavadome mountain bike
+ </title>
+ <desc>This picture shows a mountain bike, a human-propelled,
+ multi-terrain vehicle. While it can be succesfully used on moorland,
+ forest, roads, and large hills it is not actually suitable for going
+ up mountains.
+ </desc>
+ <g id="bike">
+ <defs>
+ <symbol id="spoke">
+ <desc>14/12 gauge double butted spoke</desc>
+<!-- the path data goes here -->
+ </symbol>
+ <symbol id="hub">
+ <desc>black anodised low torsion hub</desc>
+<!--the path data goes here -->
+ </symbol>
+ <symbol id="rim">
+ <desc>twin wall, eyeletted rim</desc>
+<!-- the path data goes here-->
+ </symbol>
+ <symbol id="cogs">
+ <desc>8 speed, wide ratio gearing</desc>
+<!--the path data goes here -->
+ </symbol>
+ <symbol id="lacing">
+ <desc>double cross lacing of 32 spokes</desc>
+ </symbol>
+ </defs>
+<!-- the overall bike drawing goes here -->
+ <g id="frontwheel">
+ <title>Front wheel</title>
+ <desc>The front wheel provides grip, steering and some shock absorption</desc>
+ <use href="id(lacing)" style="rotation: 20deg; fillcolor: black"/>
+ </g>
+ <g id="backwheel"/>
+ <g id="frame">
+<!-- and so on -->
+ </g>
+ </g>
+</svg>
diff --git a/result/SVG/circle.xml b/result/SVG/circle.xml
new file mode 100644
index 0000000..ae7d545
--- /dev/null
+++ b/result/SVG/circle.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This is a blue circle with a red outline
+ </desc>
+ <g>
+ <circle style="fill: blue; stroke: red" cx="200" cy="200" r="100"/>
+ </g>
+</svg>
diff --git a/result/SVG/defs.xml b/result/SVG/defs.xml
new file mode 100644
index 0000000..78c6beb
--- /dev/null
+++ b/result/SVG/defs.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <rect id="TemplateObject01" width="100" height="37.34"/>
+ <lineargradient id="Gradient01">
+ <gradientstop offset="30%" color="#39F"/>
+ </lineargradient>
+ </defs>
+ <desc>Defining things for later use
+ </desc>
+<!-- SVG elements in here would reference/use
+ the elements defined in the <defs> -->
+</svg>
diff --git a/result/SVG/desc.xml b/result/SVG/desc.xml
new file mode 100644
index 0000000..6fde966
--- /dev/null
+++ b/result/SVG/desc.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg SYSTEM "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <g>
+ <title>
+ Company sales by region
+ </title>
+ <desc>
+ This is a bar chart which shows
+ company sales by region.
+ </desc>
+<!-- Bar chart defined as vector data -->
+ </g>
+</svg>
diff --git a/result/SVG/ellipse.xml b/result/SVG/ellipse.xml
new file mode 100644
index 0000000..1f72346
--- /dev/null
+++ b/result/SVG/ellipse.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This is an ellipse, axis aligned and centered on the origin
+ </desc>
+ <g>
+ <ellipse major="85" minor="45"/>
+ </g>
+</svg>
diff --git a/result/SVG/flower2.xml b/result/SVG/flower2.xml
new file mode 100644
index 0000000..f6cd2ba
--- /dev/null
+++ b/result/SVG/flower2.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="800px" height="800px">
+ <desc>This sample SVG file draws a flower</desc>
+ <g style="transform: matrix(1 0 0 -1 -25.88 798.60); stroke: #000; stroke-width: 1">
+ <path style="fill: #1A5466" d="m 242.33 684.19 C 346.44 757.48 271.45 647.38 213.17 641.37 C 271.45 647.38 383.43 575.21 256.71 613.30 C 383.43 575.21 251.04 565.90 205.23 609.68 C 251.04 565.90 265.13 432.88 210.71 557.95 C 265.13 432.88 175.04 531.37 175.67 596.26 C 175.04 531.37 80.63 437.67 138.96 559.82 C 80.63 437.67 100.67 569.80 146.75 611.20 C 100.67 569.80 -31.14 585.98 95.49 617.49 C -31.14 585.98 83.94 652.25 140.24 643.26 C 83.94 652.25 13.98 766.12 113.04 687.55 C 13.98 766.12 137.45 716.63 161.05 668.30 C 137.45 716.63 182.02 842.45 178.39 717.23 C 182.02 842.45 220.90 714.46 193.51 667.46 C 220.90 714.46 346.44 757.48 242.33 684.19 z"/>
+ <path style="fill: #34AACD" d="M 235.33 691.19 C 339.44 764.48 264.45 654.38 206.17 648.37 C 264.45 654.38 376.43 582.21 249.71 620.30 C 376.43 582.21 244.04 572.90 198.23 616.68 C 244.04 572.90 258.13 439.88 203.71 564.95 C 258.13 439.88 168.04 538.37 168.67 603.26 C 168.04 538.37 73.63 444.67 131.96 566.82 C 73.63 444.67 93.67 576.80 139.75 618.20 C 93.67 576.80 -38.14 592.98 88.49 624.49 C -38.14 592.98 76.94 659.25 133.24 650.26 C 76.94 659.25 6.98 773.12 106.04 694.55 C 6.98 773.12 130.45 723.63 154.05 675.30 C 130.45 723.63 175.02 849.45 171.39 724.23 C 175.02 849.45 213.90 721.46 186.51 674.46 C 213.90 721.46 339.44 764.48 235.33 691.19 z"/>
+ <path style="fill: #F881BF" d="M 199.44 634.43 C 199.44 622.16 189.19 612.21 176.54 612.21 C 163.89 612.21 153.63 622.16 153.63 634.43 C 153.63 646.71 163.89 656.66 176.54 656.66 C 189.19 656.66 199.44 646.71 199.44 634.43 z"/>
+ </g>
+</svg>
diff --git a/result/SVG/gradient.xml b/result/SVG/gradient.xml
new file mode 100644
index 0000000..4570b76
--- /dev/null
+++ b/result/SVG/gradient.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Gradient example
+ </desc>
+ <g>
+ <defs>
+ <lineargradient id="MyGradient">
+<!-- Define linear gradient here -->
+ <gradientstop offset="0%" color="#F60"/>
+ <gradientstop offset="70%" color="#FF6"/>
+ </lineargradient>
+ </defs>
+ <rect style="fill: url(#MyGradient)" width="20" height="15.8"/>
+ </g>
+</svg>
diff --git a/result/SVG/group01.xml b/result/SVG/group01.xml
new file mode 100644
index 0000000..f39ad88
--- /dev/null
+++ b/result/SVG/group01.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Two groups, each of two rectangles
+ </desc>
+ <g style="fillcolor:red">
+ <rect x="100" y="100" width="100" height="100"/>
+ <rect x="300" y="100" width="100" height="100"/>
+ </g>
+ <g style="fillcolor:blue">
+ <rect x="100" y="300" width="100" height="100"/>
+ <rect x="300" y="300" width="100" height="100"/>
+ </g>
+</svg>
diff --git a/result/SVG/group02.xml b/result/SVG/group02.xml
new file mode 100644
index 0000000..85e1f52
--- /dev/null
+++ b/result/SVG/group02.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Two named groups
+ </desc>
+ <g id="OBJECT1">
+ <rect x="100" y="100" width="100" height="100"/>
+ </g>
+ <g id="OBJECT2">
+ <circle cx="150" cy="300" r="25"/>
+ </g>
+</svg>
diff --git a/result/SVG/group03.xml b/result/SVG/group03.xml
new file mode 100644
index 0000000..20d75ad
--- /dev/null
+++ b/result/SVG/group03.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Groups can nest
+ </desc>
+ <g>
+ <g>
+ <g/>
+ </g>
+ </g>
+</svg>
diff --git a/result/SVG/image-valid.xml b/result/SVG/image-valid.xml
new file mode 100644
index 0000000..d45d229
--- /dev/null
+++ b/result/SVG/image-valid.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This graphic links to an external image
+ </desc>
+ <image x="200" y="200" style="width: 100px; height: 100px" href="myimage.png">
+ <title>My image</title>
+ </image>
+</svg>
diff --git a/result/SVG/image-wf.xml b/result/SVG/image-wf.xml
new file mode 100644
index 0000000..e11a12f
--- /dev/null
+++ b/result/SVG/image-wf.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <desc>This links to an external image
+ </desc>
+ <image xml:link="simple" x="200" y="200" style="width: 100px; height: 100px" show="embed" actuate="auto" href="myimage.png">
+ <title>My image</title>
+ </image>
+</svg>
diff --git a/result/SVG/lin-gradient.xml b/result/SVG/lin-gradient.xml
new file mode 100644
index 0000000..645bdce
--- /dev/null
+++ b/result/SVG/lin-gradient.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Linear gradient example
+ </desc>
+ <g>
+ <defs>
+ <lineargradient id="MyGradient">
+ <gradientstop offset="0%" color="#F60"/>
+ <gradientstop offset="70%" color="#FF6"/>
+ </lineargradient>
+ </defs>
+ <rect style="fill: url(#MyGradient)" width="20" height="15.8"/>
+ </g>
+</svg>
diff --git a/result/SVG/marker.xml b/result/SVG/marker.xml
new file mode 100644
index 0000000..1b41714
--- /dev/null
+++ b/result/SVG/marker.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <symbol id="Triangle" min-x="0" min-y="0" max-x="100" max-y="100" ref-x="0" ref-y="50">
+ <path d="M 0 0 L 0 100 L 100 50 z"/>
+ </symbol>
+ </defs>
+ <desc>An double-headed arrow example using markers
+ </desc>
+ <path d="M0 0">
+<!-- Place an arrowhead rotated 180 degrees at the
+ beginning of the path -->
+ <marker href="#Triangle" width="200" height="200" style="text-transform: rotate(180)"/>
+ <data d="M 2000 2000"/>
+<!-- Turn off markers in the middle of the path -->
+ <marker href=""/>
+ <data d="L 4000 2000 L 4000 4000"/>
+<!-- Place an arrowhead at the end of the path-->
+ <marker href="#Triangle" width="200" height="200"/>
+ <data d="L 6000 4000"/>
+ </path>
+</svg>
diff --git a/result/SVG/mask.xml b/result/SVG/mask.xml
new file mode 100644
index 0000000..1204e06
--- /dev/null
+++ b/result/SVG/mask.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Example of using a mask
+ </desc>
+ <g>
+ <defs>
+ <image id="MyMask" href="transp.png"/>
+ </defs>
+ <rect style="mask: url(#MyMask)" width="12.5" height="30"/>
+ </g>
+</svg>
diff --git a/result/SVG/mathswitch.xml b/result/SVG/mathswitch.xml
new file mode 100644
index 0000000..b291384
--- /dev/null
+++ b/result/SVG/mathswitch.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <desc>This example uses the switch element to provide a
+ fallback graphical representation of an equation, if
+ MathML is not supported.
+ </desc>
+<!-- The <switch> element will process the first child element
+ whose testing attributes evaluate to true.-->
+ <switch>
+<!-- Process the MathML if the system-required attribute
+ evaluates to true (i.e., the user agent supports MathML
+ embedded within SVG). -->
+ <foreignobject system-required="http://www.w3.org/TR/REC-MathML-19980407" width="100" height="50">
+<!-- MathML content goes here -->
+ </foreignobject>
+<!-- Else, process the following alternate SVG.
+ Note that there are no testing attributes on the <g> element.
+ If no testing attributes are provided, it is as if there
+ were testing attributes and they evaluated to true.-->
+ <g>
+<!-- Draw a red rectangle with a text string on top. -->
+ <rect style="fill: red"/>
+ <text>Formula goes here</text>
+ </g>
+ </switch>
+</svg>
diff --git a/result/SVG/parentns.xml b/result/SVG/parentns.xml
new file mode 100644
index 0000000..5b2ed46
--- /dev/null
+++ b/result/SVG/parentns.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<ABC xmlns="http://parent.name.space" xmlns:svg="http://www.w3.org/Graphics/SVG/1.0">
+<!-- document in the parent namespace -->
+ <svg:svg width="40%" height="40%">
+ <svg:rectangle width="43.6" height="31.5"/>
+<!-- svg graphic continues -->
+ </svg:svg>
+<!-- document in parent namespace continues -->
+</ABC>
diff --git a/result/SVG/path01.xml b/result/SVG/path01.xml
new file mode 100644
index 0000000..646940b
--- /dev/null
+++ b/result/SVG/path01.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <path d="M 100 100 L 140 100 L 120 140 z"/>
+</svg>
diff --git a/result/SVG/path02.xml b/result/SVG/path02.xml
new file mode 100644
index 0000000..b74f975
--- /dev/null
+++ b/result/SVG/path02.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <path d="M 100 100">
+ <data d="L 140 100"/>
+ <data d="L 120 140"/>
+ <data d="z"/>
+ </path>
+</svg>
diff --git a/result/SVG/patternfill.xml b/result/SVG/patternfill.xml
new file mode 100644
index 0000000..c520ae8
--- /dev/null
+++ b/result/SVG/patternfill.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <symbol id="fourstar">
+<!-- Define the pattern using standard graphics elements
+ such as paths, images, text and shapes -->
+ </symbol>
+ </defs>
+ <ellipse style="fill: url(#fourstar)" major="40" minor="27"/>
+</svg>
diff --git a/result/SVG/polyline.xml b/result/SVG/polyline.xml
new file mode 100644
index 0000000..9fa4071
--- /dev/null
+++ b/result/SVG/polyline.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>A sample polyline, and equivalent path
+ </desc>
+ <polyline verts="20,20 50,100 200,80 70,300"/>
+ <path d="M20,20 L50,100 L200,80 L70,300"/>
+</svg>
diff --git a/result/SVG/private.xml b/result/SVG/private.xml
new file mode 100644
index 0000000..edfe366
--- /dev/null
+++ b/result/SVG/private.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <defs>
+ <private xmlns:myapp="http://mycompany/mapapp">
+ <myapp:piechart title="Sales by Region">
+ <myapp:piece label="Northern Region" value="1.23"/>
+ <myapp:piece label="Eastern Region" value="2.53"/>
+ <myapp:piece label="Southern Region" value="3.89"/>
+ <myapp:piece label="Western Region" value="2.04"/>
+<!-- Other private data goes here -->
+ </myapp:piechart>
+ </private>
+ </defs>
+ <desc>This chart includes private data in another namespace
+ </desc>
+<!-- In here would be the actual graphics elements which
+ draw the pie chart -->
+</svg>
diff --git a/result/SVG/rad-gradient.xml b/result/SVG/rad-gradient.xml
new file mode 100644
index 0000000..d5aadf0
--- /dev/null
+++ b/result/SVG/rad-gradient.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Radial gradient example with three gradient stops
+ </desc>
+ <g>
+ <defs>
+ <radialgradient id="MyGradient">
+ <gradientstop offset="0%" color="white"/>
+ <gradientstop offset="50%" color="red"/>
+ <gradientstop offset="100%" color="black"/>
+ </radialgradient>
+ </defs>
+ <circle style="fill: url(#MyGradient)" r="42"/>
+ </g>
+</svg>
diff --git a/result/SVG/rectangle.xml b/result/SVG/rectangle.xml
new file mode 100644
index 0000000..919cd23
--- /dev/null
+++ b/result/SVG/rectangle.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This is a rectangle
+ </desc>
+ <g>
+ <rect x="20" y="30" width="100" height="80"/>
+ </g>
+</svg>
diff --git a/result/SVG/richdesc.xml b/result/SVG/richdesc.xml
new file mode 100644
index 0000000..eba1f05
--- /dev/null
+++ b/result/SVG/richdesc.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <desc xmlns:mydoc="http://foo.org/mydoc">
+ <mydoc:title>This is an example SVG file</mydoc:title>
+ <mydoc:para>The global description uses markup from the
+ <mydoc:emph>mydoc</mydoc:emph> namespace.</mydoc:para>
+ </desc>
+ <g>
+<!-- the picture goes here -->
+ </g>
+</svg>
diff --git a/result/SVG/script.xml b/result/SVG/script.xml
new file mode 100644
index 0000000..c98af0f
--- /dev/null
+++ b/result/SVG/script.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <script>
+<![CDATA[
+ /* Beep on mouseclick */
+ MouseClickHandler() { beep(); }
+ ]]>
+ </script>
+ </defs>
+ <circle onclick="MouseClickHandler()" r="85"/>
+</svg>
diff --git a/result/SVG/structure01.xml b/result/SVG/structure01.xml
new file mode 100644
index 0000000..46af5e8
--- /dev/null
+++ b/result/SVG/structure01.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="yes"?>
+<parent xmlns="http://someplace.org" xmlns:svg="http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<!-- parent stuff here -->
+ <svg:svg width="5cm" height="8cm">
+ <svg:ellipse major="200" minor="130"/>
+ </svg:svg>
+<!-- ... -->
+</parent>
diff --git a/result/SVG/style.xml b/result/SVG/style.xml
new file mode 100644
index 0000000..7176912
--- /dev/null
+++ b/result/SVG/style.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <style>
+<![CDATA[
+ .TitleText { font-size: 16; font-family: Helvetica } ]]>
+ </style>
+ </defs>
+ <text class="TitleText">Here is my title</text>
+</svg>
diff --git a/result/SVG/switch.xml b/result/SVG/switch.xml
new file mode 100644
index 0000000..87eb364
--- /dev/null
+++ b/result/SVG/switch.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" standalone="yes"?>
+<smil>
+ <body>
+<!-- The SMIL <switch> element will process the
+ first child element which tests true and skip
+ past all others. -->
+ <switch>
+<!-- The system-required attribute tests to see if
+ the user agent supports SVG. If true, then
+ render the file drawing.svg. -->
+ <ref system-required="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" type="image/svg" src="drawing.svg"/>
+<!-- Else, render the alternate image. -->
+ <img src="alternate_image.jpg"/>
+ </switch>
+ </body>
+</smil>
diff --git a/result/SVG/symbol-use.xml b/result/SVG/symbol-use.xml
new file mode 100644
index 0000000..a9b395c
--- /dev/null
+++ b/result/SVG/symbol-use.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <symbol id="TemplateObject01">
+<!-- symbol definition here -->
+ </symbol>
+ </defs>
+ <desc>Examples of inline and referenced content
+ </desc>
+<!-- <g> with inline content -->
+ <g>
+<!-- Inline content goes here -->
+ </g>
+<!-- referenced content -->
+ <use href="#TemplateObject01"/>
+<!-- <g> with both referenced and inline content -->
+ <g>
+ <use href="#TemplateObject01"/>
+<!-- Inline content goes here -->
+ </g>
+</svg>
diff --git a/result/SVG/template.xml b/result/SVG/template.xml
new file mode 100644
index 0000000..607cd91
--- /dev/null
+++ b/result/SVG/template.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <desc>This well formed svg document contains a hyperlink
+ </desc>
+ <a xml:link="simple" show="replace" actuate="user" href="http://www.w3.org">
+ <p d="M 0 0 L 200 0 L 100 200 Z"/>
+ </a>
+</svg>
diff --git a/result/SVG/text01.xml b/result/SVG/text01.xml
new file mode 100644
index 0000000..0e2b44b
--- /dev/null
+++ b/result/SVG/text01.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <text id="TextToUse">XYZ</text>
+ </defs>
+ <text>ABC</text>
+ <text>
+ <src href="#TextToUse"/>
+ </text>
+</svg>
diff --git a/result/SVG/text02.xml b/result/SVG/text02.xml
new file mode 100644
index 0000000..9656ea5
--- /dev/null
+++ b/result/SVG/text02.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <defs>
+ <textflow id="TF1">
+ <t href="#T1"/>
+ <t href="#T3"/>
+ </textflow>
+ <textflow id="TF2">
+ <t href="#T2"/>
+ <t href="#T4"/>
+ </textflow>
+ </defs>
+ <text x="100" y="100" id="T1">
+ <tf href="#TF1">123</tf>
+ </text>
+ <text x="100" y="200" id="T2">
+ <tf href="#TF2">ABC</tf>
+ </text>
+ <text x="150" y="100" id="T3">
+ <tf href="#TF1">456</tf>
+ </text>
+ <text x="150" y="200" id="T4">
+ <tf href="#TF2">DEF</tf>
+ </text>
+</svg>
diff --git a/result/SVG/text03.xml b/result/SVG/text03.xml
new file mode 100644
index 0000000..be92031
--- /dev/null
+++ b/result/SVG/text03.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <textflow id="TF1">
+ <text x="100" y="100">123</text>
+ <text>456</text>
+ </textflow>
+</svg>
diff --git a/result/SVG/toap01.xml b/result/SVG/toap01.xml
new file mode 100644
index 0000000..fac024c
--- /dev/null
+++ b/result/SVG/toap01.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Simple text on a path
+ </desc>
+ <path id="MyPath" style="visibility: hidden" d="M 100 100 C 125 125 175 125 200 100"/>
+ <text><textpath href="#MyPath"/>Text on path</text>
+</svg>
diff --git a/result/SVG/toap02.xml b/result/SVG/toap02.xml
new file mode 100644
index 0000000..c62aa04
--- /dev/null
+++ b/result/SVG/toap02.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <symbol id="Triangle1" min-x="0" min-y="0" max-x="300" max-y="200">
+ <path d="M 50 0 L 50 200 L 250 0 z"/>
+ </symbol>
+ <symbol id="Triangle2" min-x="0" min-y="0" max-x="300" max-y="200">
+ <path d="M 50 0 L 250 200 L 250 0 z"/>
+ </symbol>
+ </defs>
+ <desc>General graphics on a path
+ </desc>
+ <text>
+ <textpath href="#MyPath"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ </text>
+</svg>
diff --git a/result/SVG/transform.xml b/result/SVG/transform.xml
new file mode 100644
index 0000000..db00dbd
--- /dev/null
+++ b/result/SVG/transform.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Demonstration of coordinate transforms
+ </desc>
+<!-- The following two text elements will both draw with a
+ font height of 12 pixels -->
+ <text style="font-size: 12">This prints 12 pixels high.</text>
+ <text style="font-size: 12px">This prints 12 pixels high.</text>
+<!-- Now scale the coordinate system by 2. -->
+ <g style="transform: scale(2)">
+<!-- The following text will actually draw 24 pixels high
+ because each unit in the new coordinate system equals
+ 2 units in the previous coordinate system. -->
+ <text style="font-size: 12">This prints 24 pixels high.</text>
+<!-- The following text will actually still draw 12 pixels high
+ because the CSS unit specifier has been provided. -->
+ <text style="font-size: 12px">This prints 12 pixels high.</text>
+ </g>
+</svg>
diff --git a/result/SVG/trivial.xml b/result/SVG/trivial.xml
new file mode 100644
index 0000000..db12583
--- /dev/null
+++ b/result/SVG/trivial.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+<!-- Insert drawing elements here -->
+</svg>
diff --git a/result/SVG/twin-gradients.xml b/result/SVG/twin-gradients.xml
new file mode 100644
index 0000000..5ce25cc
--- /dev/null
+++ b/result/SVG/twin-gradients.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Gradients apply to leaf nodes
+ </desc>
+ <g>
+ <defs>
+ <lineargradient id="MyGradient">
+ <gradientstop offset="0%" color="#F60"/>
+ <gradientstop offset="70%" color="#FF6"/>
+ </lineargradient>
+ </defs>
+ <g style="fill: url(#MyGradient)">
+ <rect width="20" height="15.8"/>
+ <rect width="35" height="8"/>
+ </g>
+ </g>
+</svg>
diff --git a/result/SVG/v-template.xml b/result/SVG/v-template.xml
new file mode 100644
index 0000000..20d19fc
--- /dev/null
+++ b/result/SVG/v-template.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc/>
+ <g/>
+</svg>
diff --git a/result/SVG/viewport-nest.xml b/result/SVG/viewport-nest.xml
new file mode 100644
index 0000000..b6a19a7
--- /dev/null
+++ b/result/SVG/viewport-nest.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This SVG drawing embeds another one,
+ thus establishing a new viewport
+ </desc>
+<!-- The following statement establishing a new viewport
+ and renders SVG drawing B into that viewport -->
+ <svg style="left: 25%; top: 25%" width="50%" height="50%">
+<!-- drawing B goes here -->
+ </svg>
+</svg>
diff --git a/result/SVG/viewport-transform.xml b/result/SVG/viewport-transform.xml
new file mode 100644
index 0000000..3a95fbd
--- /dev/null
+++ b/result/SVG/viewport-transform.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="300px" height="3oopx">
+ <desc>Transformation with establishment of a new viewport
+ </desc>
+<!-- The following two text elements will both draw with a
+ font height of 12 pixels -->
+ <text style="font-size: 12">This prints 12 pixels high.</text>
+ <text style="font-size: 12px">This prints 12 pixels high.</text>
+<!-- Now scale the coordinate system by 2. -->
+ <g style="transform: scale(2)">
+<!-- The following text will actually draw 24 pixels high
+ because each unit in the new coordinate system equals
+ 2 units in the previous coordinate system. -->
+ <text style="font-size: 12">This prints 24 pixels high.</text>
+<!-- The following text will actually still draw 12 pixels high
+ because the CSS unit specifier has been provided. -->
+ <text style="font-size: 12px">This prints 12 pixels high.</text>
+ </g>
+<!-- This time, scale the coordinate system by 3. -->
+ <g style="transform: scale(3)">
+<!-- Establish a new viewport and thus change the meaning of
+ some CSS unit specifiers. -->
+ <svg style="left:0; top:0; right:100; bottom:100" width="100%" height="100%">
+<!-- The following two text elements will both draw with a
+ font height of 36 screen pixels. The first text element
+ defines its height in user coordinates, which have been
+ scaled by 3. The second text element defines its height
+ in CSS px units, which have been redefined to be three times
+ as big as screen pixels due the <svg> element establishing
+ a new viewport. -->
+ <text style="font-size: 12">This prints 36 pixels high.</text>
+ <text style="font-size: 12px">This prints 36 pixels high.</text>
+ </svg>
+ </g>
+</svg>
diff --git a/result/SVG/viewport.xml b/result/SVG/viewport.xml
new file mode 100644
index 0000000..22d1ad3
--- /dev/null
+++ b/result/SVG/viewport.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="yes"?>
+<parent xmlns="http://some.url">
+<!-- SVG graphic -->
+ <svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="100px" height="200px">
+ <path d="M100,100 Q200,400,300,100"/>
+<!-- rest of SVG graphic would go here -->
+ </svg>
+</parent>
diff --git a/result/SVG/wf-template.xml b/result/SVG/wf-template.xml
new file mode 100644
index 0000000..d30d8de
--- /dev/null
+++ b/result/SVG/wf-template.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" standalone="yes"?>
+<svg xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd" width="4in" height="3in">
+ <desc/>
+</svg>
diff --git a/result/URI/smith.uri b/result/URI/smith.uri
new file mode 100644
index 0000000..d336d54
--- /dev/null
+++ b/result/URI/smith.uri
@@ -0,0 +1,15 @@
+/bar
+bar
+bar
+bar
+baz
+
+foo/
+foo
+foo
+../foo./
+../foo/
+/foo
+../foo
+../../foo
+../../../foo
diff --git a/result/URI/uri.data b/result/URI/uri.data
new file mode 100644
index 0000000..f22b4db
--- /dev/null
+++ b/result/URI/uri.data
@@ -0,0 +1,18 @@
+http://foo.com/path/to/index.html?orig
+http://foo.com/path/to/
+http://foo.com/path/to/bar
+http://foo.com/path/to/bar#baz
+http://foo.com/path/to/bar?baz
+http://foo.com/path/to/bar?baz#baz2
+http://foo.com/path/to/index.html?orig#baz
+http://foo.com/path/to/index.html?baz
+http://foo.com/path/to/index.html?baz#baz2
+http://foo.com/path/up.a.notch.html#wow
+http://foo.com/path/up.a.notch.html?wow
+http://foo.com/path/up.a.notch.html?wow#wow2
+http://foo.com/root.cgi#OK
+http://foo.com/root.cgi?OK
+http://foo.com/root.cgi?OK#OK2
+http://elsewhere.com/#deep
+http://elsewhere.com/?deep
+http://elsewhere.com/?deep#deep2
diff --git a/result/VC/AttributeDefaultLegal b/result/VC/AttributeDefaultLegal
new file mode 100644
index 0000000..6b61686
--- /dev/null
+++ b/result/VC/AttributeDefaultLegal
@@ -0,0 +1,12 @@
+./test/VC/AttributeDefaultLegal:4: validity error : Attribute doc of At: invalid default value
+<!ATTLIST doc At NMTOKEN "$$$">
+ ^
+./test/VC/AttributeDefaultLegal:6: validity error : Attribute doc of bad: invalid default value
+<!ATTLIST doc bad IDREF "1abc_2">
+ ^
+./test/VC/AttributeDefaultLegal:8: validity error : Attribute doc of bad2: invalid default value
+<!ATTLIST doc bad2 IDREFS "abc:1 1abc_2">
+ ^
+./test/VC/AttributeDefaultLegal:11: element doc: validity error : No declaration for attribute val of element doc
+<doc val="v1"/>
+ ^
diff --git a/result/VC/DuplicateType b/result/VC/DuplicateType
new file mode 100644
index 0000000..34e2c20
--- /dev/null
+++ b/result/VC/DuplicateType
@@ -0,0 +1,3 @@
+./test/VC/DuplicateType:3: validity error : Definition of a has duplicate references of c
+<!ELEMENT a (#PCDATA | b | c | d | c)*>
+ ^
diff --git a/result/VC/ElementValid b/result/VC/ElementValid
new file mode 100644
index 0000000..d6b50a7
--- /dev/null
+++ b/result/VC/ElementValid
@@ -0,0 +1,3 @@
+./test/VC/ElementValid:3: validity error : Validation failed: no DTD found !
+<doc/>
+ ^
diff --git a/result/VC/ElementValid2 b/result/VC/ElementValid2
new file mode 100644
index 0000000..db47c89
--- /dev/null
+++ b/result/VC/ElementValid2
@@ -0,0 +1,3 @@
+./test/VC/ElementValid2:4: element p: validity error : No declaration for element p
+<doc><p/></doc>
+ ^
diff --git a/result/VC/ElementValid3 b/result/VC/ElementValid3
new file mode 100644
index 0000000..2fc236d
--- /dev/null
+++ b/result/VC/ElementValid3
@@ -0,0 +1,3 @@
+./test/VC/ElementValid3:4: element doc: validity error : Element doc was declared EMPTY this one has content
+<doc>Oops, this element was declared EMPTY</doc>
+ ^
diff --git a/result/VC/ElementValid4 b/result/VC/ElementValid4
new file mode 100644
index 0000000..4791db5
--- /dev/null
+++ b/result/VC/ElementValid4
@@ -0,0 +1,3 @@
+./test/VC/ElementValid4:7: element doc: validity error : Element c is not declared in doc list of possible children
+<doc> This <b>seems</b> Ok <a/> but this <c>was not declared</c></doc>
+ ^
diff --git a/result/VC/ElementValid5 b/result/VC/ElementValid5
new file mode 100644
index 0000000..bd064f6
--- /dev/null
+++ b/result/VC/ElementValid5
@@ -0,0 +1,3 @@
+./test/VC/ElementValid5:7: element doc: validity error : Element doc content does not follow the DTD, expecting (a , b* , c+), got (a b c b)
+<doc><a/><b> but this</b><c>was not declared</c><b>seems</b></doc>
+ ^
diff --git a/result/VC/ElementValid6 b/result/VC/ElementValid6
new file mode 100644
index 0000000..1cbf8fd
--- /dev/null
+++ b/result/VC/ElementValid6
@@ -0,0 +1,3 @@
+./test/VC/ElementValid6:7: element doc: validity error : Element doc content does not follow the DTD, expecting (a , b? , c+)?, got (a b)
+<doc><a/><b>lacks c</b></doc>
+ ^
diff --git a/result/VC/ElementValid7 b/result/VC/ElementValid7
new file mode 100644
index 0000000..4ce9dbf
--- /dev/null
+++ b/result/VC/ElementValid7
@@ -0,0 +1,3 @@
+./test/VC/ElementValid7:7: element doc: validity error : Element doc content does not follow the DTD, expecting ((a | b)* , c+ , a , b? , c , a?), got (a b a c c a)
+<doc><a/><b/><a/><c/><c/><a/></doc>
+ ^
diff --git a/result/VC/ElementValid8 b/result/VC/ElementValid8
new file mode 100644
index 0000000..f1b0dad
--- /dev/null
+++ b/result/VC/ElementValid8
@@ -0,0 +1,3 @@
+./test/VC/ElementValid8:7: validity error : Content model of doc is not determinist: ((a , b) | (a , c))
+<doc><a/><c> doc is non-deterministic </c></doc>
+ ^
diff --git a/result/VC/Enumeration b/result/VC/Enumeration
new file mode 100644
index 0000000..30896fc
--- /dev/null
+++ b/result/VC/Enumeration
@@ -0,0 +1,3 @@
+./test/VC/Enumeration:5: element doc: validity error : Value "v4" for attribute val of doc is not among the enumerated set
+<doc val="v4"></doc>
+ ^
diff --git a/result/VC/NS1 b/result/VC/NS1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/VC/NS1
diff --git a/result/VC/NS2 b/result/VC/NS2
new file mode 100644
index 0000000..abd1f88
--- /dev/null
+++ b/result/VC/NS2
@@ -0,0 +1,3 @@
+./test/VC/NS2:9: element doc: validity error : No declaration for attribute attr of element doc
+<ns:doc ns:attr="val" xmlns:ns="http://www.example.org/test/">
+ ^
diff --git a/result/VC/NS3 b/result/VC/NS3
new file mode 100644
index 0000000..72c0117
--- /dev/null
+++ b/result/VC/NS3
@@ -0,0 +1,9 @@
+./test/VC/NS3:9: element foo: validity error : Value for attribute xmlns of foo is different from default "http://example.com/fooo"
+xmlns="http://example.com/foo" xmlns:foo="http://example.com/fo" foo:info="toto"
+ ^
+./test/VC/NS3:9: element foo: validity error : Value for attribute xmlns of foo must be "http://example.com/fooo"
+xmlns="http://example.com/foo" xmlns:foo="http://example.com/fo" foo:info="toto"
+ ^
+./test/VC/NS3:9: element foo: validity error : Element foo namespace name for default namespace does not match the DTD
+mlns="http://example.com/foo" xmlns:foo="http://example.com/fo" foo:info="toto"/
+ ^
diff --git a/result/VC/OneID b/result/VC/OneID
new file mode 100644
index 0000000..4a73cbe
--- /dev/null
+++ b/result/VC/OneID
@@ -0,0 +1,7 @@
+./test/VC/OneID:4: validity error : Element doc has too may ID attributes defined : id
+<!ATTLIST doc id ID #IMPLIED>
+ ^
+./test/VC/OneID:0: validity error : Element doc has too many ID attributes defined : id
+./test/VC/OneID:4: validity error : Element doc has 2 ID attribute defined in the internal subset : id
+<!ATTLIST doc id ID #IMPLIED>
+ ^
diff --git a/result/VC/OneID2 b/result/VC/OneID2
new file mode 100644
index 0000000..b2021b3
--- /dev/null
+++ b/result/VC/OneID2
@@ -0,0 +1,7 @@
+./test/VC/OneID2:3: validity error : Element doc has too may ID attributes defined : id
+<!ATTLIST doc id ID #IMPLIED>
+ ^
+validity error : Element doc has too many ID attributes defined : id
+./test/VC/OneID2:3: validity error : Element doc has 2 ID attribute defined in the internal subset : id
+<!ATTLIST doc id ID #IMPLIED>
+ ^
diff --git a/result/VC/OneID3 b/result/VC/OneID3
new file mode 100644
index 0000000..994051a
--- /dev/null
+++ b/result/VC/OneID3
@@ -0,0 +1,7 @@
+test/VC/dtds/doc.dtd:2: validity error : Element doc has too may ID attributes defined : val
+<!ATTLIST doc val ID #IMPLIED>
+ ^
+./test/VC/OneID3:0: validity error : Element doc has too many ID attributes defined : val
+test/VC/dtds/doc.dtd:2: validity error : Element doc has 2 ID attribute defined in the external subset : val
+<!ATTLIST doc val ID #IMPLIED>
+ ^
diff --git a/result/VC/PENesting b/result/VC/PENesting
new file mode 100644
index 0000000..966689a
--- /dev/null
+++ b/result/VC/PENesting
@@ -0,0 +1,6 @@
+./test/VC/PENesting:1: parser error : StartTag: invalid element name
+<!ENTITY % pe1 "EMPTY> <!ELEMENT e2 EMPTY>">
+ ^
+./test/VC/PENesting:1: parser error : Extra content at the end of the document
+<!ENTITY % pe1 "EMPTY> <!ELEMENT e2 EMPTY>">
+ ^
diff --git a/result/VC/PENesting2 b/result/VC/PENesting2
new file mode 100644
index 0000000..c53ead6
--- /dev/null
+++ b/result/VC/PENesting2
@@ -0,0 +1,6 @@
+./test/VC/PENesting2:1: parser error : StartTag: invalid element name
+<!ENTITY % p1 "(A|B">
+ ^
+./test/VC/PENesting2:1: parser error : Extra content at the end of the document
+<!ENTITY % p1 "(A|B">
+ ^
diff --git a/result/VC/UniqueElementTypeDeclaration b/result/VC/UniqueElementTypeDeclaration
new file mode 100644
index 0000000..8537041
--- /dev/null
+++ b/result/VC/UniqueElementTypeDeclaration
@@ -0,0 +1,3 @@
+test/VC/dtds/a.dtd:1: validity error : Redefinition of element a
+<!ELEMENT a (#PCDATA | b | c)*>
+ ^
diff --git a/result/VC/UniqueElementTypeDeclaration2 b/result/VC/UniqueElementTypeDeclaration2
new file mode 100644
index 0000000..c328d92
--- /dev/null
+++ b/result/VC/UniqueElementTypeDeclaration2
@@ -0,0 +1,3 @@
+./test/VC/UniqueElementTypeDeclaration2:6: validity error : Redefinition of element a
+<!ELEMENT a (#PCDATA | b | c)*>
+ ^
diff --git a/result/XInclude/docids.xml b/result/XInclude/docids.xml
new file mode 100644
index 0000000..389a216
--- /dev/null
+++ b/result/XInclude/docids.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE book [
+<!ELEMENT book (doc)*>
+<!ELEMENT doc (isid)*>
+<!ELEMENT isid EMPTY>
+<!ATTLIST isid myid ID #IMPLIED>
+]>
+<book>
+<doc>
+<isid myid="mine"/>
+<isid myid="dup"/>
+</doc>
+<!-- including another XML document with IDs -->
+<doc xml:base="test/XInclude/ents/ids.xml">
+<isid myid="dup"/>
+<isid myid="foo"/>
+<isid myid="bar"/>
+</doc>
+</book>
diff --git a/result/XInclude/docids.xml.err b/result/XInclude/docids.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/XInclude/docids.xml.err
diff --git a/result/XInclude/docids.xml.rdr b/result/XInclude/docids.xml.rdr
new file mode 100644
index 0000000..dedeb67
--- /dev/null
+++ b/result/XInclude/docids.xml.rdr
@@ -0,0 +1,35 @@
+0 10 book 0 0
+0 1 book 0 0
+1 14 #text 0 1
+
+1 1 doc 0 0
+2 14 #text 0 1
+
+2 1 isid 1 0
+2 14 #text 0 1
+
+2 1 isid 1 0
+2 14 #text 0 1
+
+1 15 doc 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 including another XML document with IDs
+1 14 #text 0 1
+
+1 1 doc 0 0
+2 14 #text 0 1
+
+2 1 isid 1 0
+2 14 #text 0 1
+
+2 1 isid 1 0
+2 14 #text 0 1
+
+2 1 isid 1 0
+2 14 #text 0 1
+
+1 15 doc 0 0
+1 14 #text 0 1
+
+0 15 book 0 0
diff --git a/result/XInclude/fallback.xml b/result/XInclude/fallback.xml
new file mode 100644
index 0000000..d7eed52
--- /dev/null
+++ b/result/XInclude/fallback.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of a fallback on unavailble URI -->
+ <warning>Inclusion failed</warning>
+</x>
diff --git a/result/XInclude/fallback.xml.err b/result/XInclude/fallback.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/XInclude/fallback.xml.err
diff --git a/result/XInclude/fallback.xml.rdr b/result/XInclude/fallback.xml.rdr
new file mode 100644
index 0000000..82072f7
--- /dev/null
+++ b/result/XInclude/fallback.xml.rdr
@@ -0,0 +1,12 @@
+0 1 x 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 Simple test of a fallback on unavailble URI
+1 14 #text 0 1
+
+1 1 warning 0 0
+2 3 #text 0 1 Inclusion failed
+1 15 warning 0 0
+1 14 #text 0 1
+
+0 15 x 0 0
diff --git a/result/XInclude/include.xml b/result/XInclude/include.xml
new file mode 100644
index 0000000..bee9da2
--- /dev/null
+++ b/result/XInclude/include.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of including another XML document -->
+ <doc xml:base="test/XInclude/ents/something.xml">
+<p>something</p>
+<p>really</p>
+<p>simple</p>
+</doc>
+</x>
diff --git a/result/XInclude/include.xml.err b/result/XInclude/include.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/XInclude/include.xml.err
diff --git a/result/XInclude/include.xml.rdr b/result/XInclude/include.xml.rdr
new file mode 100644
index 0000000..66135a4
--- /dev/null
+++ b/result/XInclude/include.xml.rdr
@@ -0,0 +1,28 @@
+0 1 x 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 Simple test of including another XML document
+1 14 #text 0 1
+
+1 1 doc 0 0
+2 14 #text 0 1
+
+2 1 p 0 0
+3 3 #text 0 1 something
+2 15 p 0 0
+2 14 #text 0 1
+
+2 1 p 0 0
+3 3 #text 0 1 really
+2 15 p 0 0
+2 14 #text 0 1
+
+2 1 p 0 0
+3 3 #text 0 1 simple
+2 15 p 0 0
+2 14 #text 0 1
+
+1 15 doc 0 0
+1 14 #text 0 1
+
+0 15 x 0 0
diff --git a/result/XInclude/nodes.xml b/result/XInclude/nodes.xml
new file mode 100644
index 0000000..301b70d
--- /dev/null
+++ b/result/XInclude/nodes.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of including a set of nodes from an XML document -->
+ <p xml:base="test/XInclude/ents/something.xml">something</p><p xml:base="test/XInclude/ents/something.xml">really</p><p xml:base="test/XInclude/ents/something.xml">simple</p>
+</x>
diff --git a/result/XInclude/nodes.xml.err b/result/XInclude/nodes.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/XInclude/nodes.xml.err
diff --git a/result/XInclude/nodes.xml.rdr b/result/XInclude/nodes.xml.rdr
new file mode 100644
index 0000000..0e53878
--- /dev/null
+++ b/result/XInclude/nodes.xml.rdr
@@ -0,0 +1,18 @@
+0 1 x 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 Simple test of including a set of nodes from an XML document
+1 14 #text 0 1
+
+1 1 p 0 0
+2 3 #text 0 1 something
+1 15 p 0 0
+1 1 p 0 0
+2 3 #text 0 1 really
+1 15 p 0 0
+1 1 p 0 0
+2 3 #text 0 1 simple
+1 15 p 0 0
+1 14 #text 0 1
+
+0 15 x 0 0
diff --git a/result/XInclude/nodes2.xml b/result/XInclude/nodes2.xml
new file mode 100644
index 0000000..34ef5f0
--- /dev/null
+++ b/result/XInclude/nodes2.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<x xmlns:xinclude="http://www.w3.org/2003/XInclude">
+ <!-- Simple test of including a set of nodes from an XML document -->
+ <p xml:base="test/XInclude/ents/something.xml">something</p><p xml:base="test/XInclude/ents/something.xml">really</p><p xml:base="test/XInclude/ents/something.xml">simple</p>
+</x>
diff --git a/result/XInclude/nodes2.xml.err b/result/XInclude/nodes2.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/XInclude/nodes2.xml.err
diff --git a/result/XInclude/nodes2.xml.rdr b/result/XInclude/nodes2.xml.rdr
new file mode 100644
index 0000000..0e53878
--- /dev/null
+++ b/result/XInclude/nodes2.xml.rdr
@@ -0,0 +1,18 @@
+0 1 x 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 Simple test of including a set of nodes from an XML document
+1 14 #text 0 1
+
+1 1 p 0 0
+2 3 #text 0 1 something
+1 15 p 0 0
+1 1 p 0 0
+2 3 #text 0 1 really
+1 15 p 0 0
+1 1 p 0 0
+2 3 #text 0 1 simple
+1 15 p 0 0
+1 14 #text 0 1
+
+0 15 x 0 0
diff --git a/result/XInclude/nodes3.xml b/result/XInclude/nodes3.xml
new file mode 100644
index 0000000..9ab2044
--- /dev/null
+++ b/result/XInclude/nodes3.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<x xmlns:xinclude="http://www.w3.org/2003/XInclude">
+ <!-- Simple test of including a set of nodes from an XML document -->
+ <xinclude:include href="../ents/something.xml#xpointer(//p)"/>
+</x>
diff --git a/result/XInclude/nodes3.xml.err b/result/XInclude/nodes3.xml.err
new file mode 100644
index 0000000..fb11525
--- /dev/null
+++ b/result/XInclude/nodes3.xml.err
@@ -0,0 +1 @@
+./test/XInclude/docs/nodes3.xml:3: element include: XInclude error : Invalid fragment identifier in URI test/XInclude/ents/something.xml#xpointer(//p) use the xpointer attribute
diff --git a/result/XInclude/nodes3.xml.rdr b/result/XInclude/nodes3.xml.rdr
new file mode 100644
index 0000000..f2ae87b
--- /dev/null
+++ b/result/XInclude/nodes3.xml.rdr
@@ -0,0 +1,10 @@
+0 1 x 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 Simple test of including a set of nodes from an XML document
+1 14 #text 0 1
+
+1 1 xinclude:include 1 0
+1 14 #text 0 1
+
+0 15 x 0 0
diff --git a/result/XInclude/recursive.xml b/result/XInclude/recursive.xml
new file mode 100644
index 0000000..c218c7d
--- /dev/null
+++ b/result/XInclude/recursive.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<this><sub-inc xml:base="test/XInclude/ents/sub-inc.ent">is a test
+</sub-inc></this>
diff --git a/result/XInclude/recursive.xml.err b/result/XInclude/recursive.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/XInclude/recursive.xml.err
diff --git a/result/XInclude/recursive.xml.rdr b/result/XInclude/recursive.xml.rdr
new file mode 100644
index 0000000..cafce16
--- /dev/null
+++ b/result/XInclude/recursive.xml.rdr
@@ -0,0 +1,6 @@
+0 1 this 0 0
+1 1 sub-inc 0 0
+2 3 #text 0 1 is a test
+
+1 15 sub-inc 0 0
+0 15 this 0 0
diff --git a/result/XInclude/tstencoding.xml b/result/XInclude/tstencoding.xml
new file mode 100644
index 0000000..a1c5179
--- /dev/null
+++ b/result/XInclude/tstencoding.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of including another text document -->
+ test with accents in ISO-8859-1: À Á é è
+
+</x>
diff --git a/result/XInclude/tstencoding.xml.err b/result/XInclude/tstencoding.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/XInclude/tstencoding.xml.err
diff --git a/result/XInclude/tstencoding.xml.rdr b/result/XInclude/tstencoding.xml.rdr
new file mode 100644
index 0000000..a0cc69b
--- /dev/null
+++ b/result/XInclude/tstencoding.xml.rdr
@@ -0,0 +1,11 @@
+0 1 x 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 Simple test of including another text document
+1 14 #text 0 1
+
+1 3 #text 0 1 test with accents in ISO-8859-1: À à é è
+
+1 14 #text 0 1
+
+0 15 x 0 0
diff --git a/result/XInclude/txtinclude.xml b/result/XInclude/txtinclude.xml
new file mode 100644
index 0000000..0114e4f
--- /dev/null
+++ b/result/XInclude/txtinclude.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of including another text document -->
+ this is some text in ASCII
+
+</x>
diff --git a/result/XInclude/txtinclude.xml.err b/result/XInclude/txtinclude.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/XInclude/txtinclude.xml.err
diff --git a/result/XInclude/txtinclude.xml.rdr b/result/XInclude/txtinclude.xml.rdr
new file mode 100644
index 0000000..a4cc3b4
--- /dev/null
+++ b/result/XInclude/txtinclude.xml.rdr
@@ -0,0 +1,11 @@
+0 1 x 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 Simple test of including another text document
+1 14 #text 0 1
+
+1 3 #text 0 1 this is some text in ASCII
+
+1 14 #text 0 1
+
+0 15 x 0 0
diff --git a/result/XPath/expr/base b/result/XPath/expr/base
new file mode 100644
index 0000000..3552866
--- /dev/null
+++ b/result/XPath/expr/base
@@ -0,0 +1,20 @@
+
+========================
+Expression: 1
+Object is a number : 1
+
+========================
+Expression: 1+2
+Object is a number : 3
+
+========================
+Expression: 2*3
+Object is a number : 6
+
+========================
+Expression: 1+2*3+4
+Object is a number : 11
+
+========================
+Expression: (1+2)*(3+4)
+Object is a number : 21
diff --git a/result/XPath/expr/compare b/result/XPath/expr/compare
new file mode 100644
index 0000000..21a88d0
--- /dev/null
+++ b/result/XPath/expr/compare
@@ -0,0 +1,184 @@
+
+========================
+Expression: 0<0
+Object is a Boolean : false
+
+========================
+Expression: 0<=0
+Object is a Boolean : true
+
+========================
+Expression: 0>0
+Object is a Boolean : false
+
+========================
+Expression: 0>=0
+Object is a Boolean : true
+
+========================
+Expression: 0<1
+Object is a Boolean : true
+
+========================
+Expression: 0<=1
+Object is a Boolean : true
+
+========================
+Expression: 0>1
+Object is a Boolean : false
+
+========================
+Expression: 0>=1
+Object is a Boolean : false
+
+========================
+Expression: 1<0
+Object is a Boolean : false
+
+========================
+Expression: 1<=0
+Object is a Boolean : false
+
+========================
+Expression: 1>0
+Object is a Boolean : true
+
+========================
+Expression: 1>=0
+Object is a Boolean : true
+
+========================
+Expression: 1<1
+Object is a Boolean : false
+
+========================
+Expression: 1<=1
+Object is a Boolean : true
+
+========================
+Expression: 1>1
+Object is a Boolean : false
+
+========================
+Expression: 1>=1
+Object is a Boolean : true
+
+========================
+Expression: '0'<1
+Object is a Boolean : true
+
+========================
+Expression: '0'<=1
+Object is a Boolean : true
+
+========================
+Expression: '0'>1
+Object is a Boolean : false
+
+========================
+Expression: '0'>=1
+Object is a Boolean : false
+
+========================
+Expression: 0<'1.2'
+Object is a Boolean : true
+
+========================
+Expression: 0<='1.2'
+Object is a Boolean : true
+
+========================
+Expression: 0>'1.2'
+Object is a Boolean : false
+
+========================
+Expression: 0>='1.2'
+Object is a Boolean : false
+
+========================
+Expression: 0<'-0.2'
+Object is a Boolean : false
+
+========================
+Expression: 0<='-0.2'
+Object is a Boolean : false
+
+========================
+Expression: 0>'-0.2'
+Object is a Boolean : true
+
+========================
+Expression: 0>='-0.2'
+Object is a Boolean : true
+
+========================
+Expression: false()<1
+Object is a Boolean : true
+
+========================
+Expression: false()<=1
+Object is a Boolean : true
+
+========================
+Expression: 0>true()
+Object is a Boolean : false
+
+========================
+Expression: 0>=true()
+Object is a Boolean : false
+
+========================
+Expression: 'a' > 'a'
+Object is a Boolean : false
+
+========================
+Expression: 'a' > 'b'
+Object is a Boolean : false
+
+========================
+Expression: 'b' > 'a'
+Object is a Boolean : false
+
+========================
+Expression: 'a' < 'a'
+Object is a Boolean : false
+
+========================
+Expression: 'a' < 'b'
+Object is a Boolean : false
+
+========================
+Expression: 'b' < 'a'
+Object is a Boolean : false
+
+========================
+Expression: 'a' >= 'a'
+Object is a Boolean : false
+
+========================
+Expression: 'a' >= 'b'
+Object is a Boolean : false
+
+========================
+Expression: 'b' >= 'a'
+Object is a Boolean : false
+
+========================
+Expression: 'a' <= 'a'
+Object is a Boolean : false
+
+========================
+Expression: 'a' <= 'b'
+Object is a Boolean : false
+
+========================
+Expression: 'b' <= 'a'
+Object is a Boolean : false
+
+========================
+Expression: 'a' > '0.0'
+Object is a Boolean : false
+
+========================
+Expression: 'a' < '0.0'
+Object is a Boolean : false
diff --git a/result/XPath/expr/equality b/result/XPath/expr/equality
new file mode 100644
index 0000000..44b4c22
--- /dev/null
+++ b/result/XPath/expr/equality
@@ -0,0 +1,104 @@
+
+========================
+Expression: 1=1
+Object is a Boolean : true
+
+========================
+Expression: 1!=1
+Object is a Boolean : false
+
+========================
+Expression: 1=0
+Object is a Boolean : false
+
+========================
+Expression: 1!=0
+Object is a Boolean : true
+
+========================
+Expression: true()=true()
+Object is a Boolean : true
+
+========================
+Expression: true()!=true()
+Object is a Boolean : false
+
+========================
+Expression: true()=false()
+Object is a Boolean : false
+
+========================
+Expression: false()!=true()
+Object is a Boolean : true
+
+========================
+Expression: 'test'='test'
+Object is a Boolean : true
+
+========================
+Expression: 'test'!='test'
+Object is a Boolean : false
+
+========================
+Expression: 'test2'='test'
+Object is a Boolean : false
+
+========================
+Expression: 'test2'!='test'
+Object is a Boolean : true
+
+========================
+Expression: false()=0
+Object is a Boolean : true
+
+========================
+Expression: false()!=0
+Object is a Boolean : false
+
+========================
+Expression: false()=1
+Object is a Boolean : false
+
+========================
+Expression: false()!=1
+Object is a Boolean : true
+
+========================
+Expression: 0=true()
+Object is a Boolean : false
+
+========================
+Expression: 0!=true()
+Object is a Boolean : true
+
+========================
+Expression: 1=true()
+Object is a Boolean : true
+
+========================
+Expression: 1!=true()
+Object is a Boolean : false
+
+========================
+Expression: true()='test'
+Object is a Boolean : true
+
+========================
+Expression: false()='test'
+Object is a Boolean : false
+
+========================
+Expression: 'test'!=true()
+Object is a Boolean : false
+
+========================
+Expression: 'test'!=false()
+Object is a Boolean : true
+
+========================
+Expression: 'a'=0.0
+Object is a Boolean : false
+
+========================
+Expression: 'a'!=0.0
+Object is a Boolean : true
diff --git a/result/XPath/expr/floats b/result/XPath/expr/floats
new file mode 100644
index 0000000..b6255ce
--- /dev/null
+++ b/result/XPath/expr/floats
@@ -0,0 +1,244 @@
+
+========================
+Expression: 1
+Object is a number : 1
+
+========================
+Expression: 123
+Object is a number : 123
+
+========================
+Expression: 1.23
+Object is a number : 1.23
+
+========================
+Expression: 0.123
+Object is a number : 0.123
+
+========================
+Expression: 4.
+Object is a number : 4
+
+========================
+Expression: .4
+Object is a number : 0.4
+
+========================
+Expression: 1.23e3
+Object is a number : 1230
+
+========================
+Expression: 1.23e-3
+Object is a number : 0.00123
+
+========================
+Expression: 1 div 0
+Object is a number : Infinity
+
+========================
+Expression: -1 div 0
+Object is a number : -Infinity
+
+========================
+Expression: 0 div 0
+Object is a number : NaN
+
+========================
+Expression: 1 div -0
+Object is a number : -Infinity
+
+========================
+Expression: (1 div 0) > 0
+Object is a Boolean : true
+
+========================
+Expression: (1 div 0) < 0
+Object is a Boolean : false
+
+========================
+Expression: (-1 div 0) > 0
+Object is a Boolean : false
+
+========================
+Expression: (-1 div 0) < 0
+Object is a Boolean : true
+
+========================
+Expression: (0 div 0) > 0
+Object is a Boolean : false
+
+========================
+Expression: (0 div 0) < 0
+Object is a Boolean : false
+
+========================
+Expression: (1 div -0) > 0
+Object is a Boolean : false
+
+========================
+Expression: (1 div -0) < 0
+Object is a Boolean : true
+
+========================
+Expression: 0 div 0 = 0 div 0
+Object is a Boolean : false
+
+========================
+Expression: 0 div 0 != 0 div 0
+Object is a Boolean : true
+
+========================
+Expression: 0 div 0 > 0 div 0
+Object is a Boolean : false
+
+========================
+Expression: 0 div 0 < 0 div 0
+Object is a Boolean : false
+
+========================
+Expression: 0 div 0 >= 0 div 0
+Object is a Boolean : false
+
+========================
+Expression: 0 div 0 <= 0 div 0
+Object is a Boolean : false
+
+========================
+Expression: 1 div 0 = -1 div 0
+Object is a Boolean : false
+
+========================
+Expression: 1 div 0 != -1 div 0
+Object is a Boolean : true
+
+========================
+Expression: 1 div 0 > -1 div 0
+Object is a Boolean : true
+
+========================
+Expression: 1 div 0 < -1 div 0
+Object is a Boolean : false
+
+========================
+Expression: 1 div 0 >= -1 div 0
+Object is a Boolean : true
+
+========================
+Expression: 1 div 0 <= -1 div 0
+Object is a Boolean : false
+
+========================
+Expression: 1 div 0 = 1 div 0
+Object is a Boolean : true
+
+========================
+Expression: 1 div 0 != 1 div 0
+Object is a Boolean : false
+
+========================
+Expression: 1 div 0 > 1 div 0
+Object is a Boolean : false
+
+========================
+Expression: 1 div 0 < 1 div 0
+Object is a Boolean : false
+
+========================
+Expression: 1 div 0 >= -1 div 0
+Object is a Boolean : true
+
+========================
+Expression: 1 div 0 <= -1 div 0
+Object is a Boolean : false
+
+========================
+Expression: -2 div 0 = -1 div 0
+Object is a Boolean : true
+
+========================
+Expression: 1 div floor(0.1)
+Object is a number : Infinity
+
+========================
+Expression: 1 div floor(-0.1)
+Object is a number : -1
+
+========================
+Expression: 1 div floor(-0)
+Object is a number : -Infinity
+
+========================
+Expression: 1 div floor(0)
+Object is a number : Infinity
+
+========================
+Expression: 1 div ceiling(0.1)
+Object is a number : 1
+
+========================
+Expression: 1 div ceiling(-0.1)
+Object is a number : -Infinity
+
+========================
+Expression: 1 div ceiling(-0)
+Object is a number : -Infinity
+
+========================
+Expression: 1 div ceiling(0)
+Object is a number : Infinity
+
+========================
+Expression: 1 div round(0.1)
+Object is a number : Infinity
+
+========================
+Expression: 1 div round(-0.1)
+Object is a number : -Infinity
+
+========================
+Expression: 1 div round(-0)
+Object is a number : -Infinity
+
+========================
+Expression: 1 div round(0)
+Object is a number : Infinity
+
+========================
+Expression: 1 div number('f')
+Object is a number : NaN
+
+========================
+Expression: number('f') div 1
+Object is a number : NaN
+
+========================
+Expression: 1 div (1 div 0)
+Object is a number : 0
+
+========================
+Expression: (1 div 0) div 1
+Object is a number : Infinity
+
+========================
+Expression: -(1 div 0) div 1
+Object is a number : -Infinity
+
+========================
+Expression: 5 mod 2
+Object is a number : 1
+
+========================
+Expression: 5 mod -2
+Object is a number : 1
+
+========================
+Expression: -5 mod 2
+Object is a number : -1
+
+========================
+Expression: -5 mod -2
+Object is a number : -1
+
+========================
+Expression: 8 mod 3 = 2
+Object is a Boolean : true
diff --git a/result/XPath/expr/functions b/result/XPath/expr/functions
new file mode 100644
index 0000000..10cc27e
--- /dev/null
+++ b/result/XPath/expr/functions
@@ -0,0 +1,100 @@
+
+========================
+Expression: true()
+Object is a Boolean : true
+
+========================
+Expression: false()
+Object is a Boolean : false
+
+========================
+Expression: number("1.5")
+Object is a number : 1.5
+
+========================
+Expression: number('abc')
+Object is a number : NaN
+
+========================
+Expression: -number('abc')
+Object is a number : NaN
+
+========================
+Expression: floor(0.1)
+Object is a number : 0
+
+========================
+Expression: floor(-0.1)
+Object is a number : -1
+
+========================
+Expression: floor(-0)
+Object is a number : 0
+
+========================
+Expression: floor(0)
+Object is a number : 0
+
+========================
+Expression: floor(5.2)
+Object is a number : 5
+
+========================
+Expression: floor(-5.2)
+Object is a number : -6
+
+========================
+Expression: ceiling(0.1)
+Object is a number : 1
+
+========================
+Expression: ceiling(-0.1)
+Object is a number : 0
+
+========================
+Expression: ceiling(-0)
+Object is a number : 0
+
+========================
+Expression: ceiling(0)
+Object is a number : 0
+
+========================
+Expression: ceiling(5.2)
+Object is a number : 6
+
+========================
+Expression: ceiling(-5.2)
+Object is a number : -5
+
+========================
+Expression: round(0.1)
+Object is a number : 0
+
+========================
+Expression: round(5.2)
+Object is a number : 5
+
+========================
+Expression: round(5.5)
+Object is a number : 6
+
+========================
+Expression: round(5.6)
+Object is a number : 6
+
+========================
+Expression: round(-0.1)
+Object is a number : 0
+
+========================
+Expression: round(-5.2)
+Object is a number : -5
+
+========================
+Expression: round(-5.5)
+Object is a number : -5
+
+========================
+Expression: round(-5.6)
+Object is a number : -6
diff --git a/result/XPath/expr/strings b/result/XPath/expr/strings
new file mode 100644
index 0000000..fad7048
--- /dev/null
+++ b/result/XPath/expr/strings
@@ -0,0 +1,136 @@
+
+========================
+Expression: string(5)
+Object is a string : 5
+
+========================
+Expression: string(0.5)
+Object is a string : 0.5
+
+========================
+Expression: string(-0.5)
+Object is a string : -0.5
+
+========================
+Expression: string(true())
+Object is a string : true
+
+========================
+Expression: string(false())
+Object is a string : false
+
+========================
+Expression: concat("titi","toto")
+Object is a string : tititoto
+
+========================
+Expression: concat("titi","toto","tata")
+Object is a string : tititototata
+
+========================
+Expression: concat("titi",'toto')
+Object is a string : tititoto
+
+========================
+Expression: concat("titi",'toto',"tata","last")
+Object is a string : tititototatalast
+
+========================
+Expression: starts-with("tititoto","titi")
+Object is a Boolean : true
+
+========================
+Expression: starts-with("tititoto","to")
+Object is a Boolean : false
+
+========================
+Expression: contains("tititototata","titi")
+Object is a Boolean : true
+
+========================
+Expression: contains("tititototata","toto")
+Object is a Boolean : true
+
+========================
+Expression: contains("tititototata","tata")
+Object is a Boolean : true
+
+========================
+Expression: contains("tititototata","tita")
+Object is a Boolean : false
+
+========================
+Expression: substring("12345",2,3)
+Object is a string : 234
+
+========================
+Expression: substring("12345",2)
+Object is a string : 2345
+
+========================
+Expression: substring("12345",-4)
+Object is a string : 12345
+
+========================
+Expression: substring("12345",3.4)
+Object is a string : 345
+
+========================
+Expression: substring("12345",3.6)
+Object is a string : 45
+
+========================
+Expression: substring("12345",1.5,2.6)
+Object is a string : 234
+
+========================
+Expression: substring("12345",2.2,2.2)
+Object is a string : 23
+
+========================
+Expression: substring("12345",0,3)
+Object is a string : 12
+
+========================
+Expression: substring("12345",-8,10)
+Object is a string : 1
+
+========================
+Expression: substring("12345",4,-10)
+Object is a string :
+
+========================
+Expression: substring("12345",0 div 0, 3)
+Object is a string :
+
+========================
+Expression: substring("12345",1, 0 div 0)
+Object is a string :
+
+========================
+Expression: substring("12345",1 div 0, 3)
+Object is a string :
+
+========================
+Expression: substring("12345",3,-1 div 0)
+Object is a string :
+
+========================
+Expression: substring("12345",-42, 1 div 0)
+Object is a string : 12345
+
+========================
+Expression: substring("12345",-1 div 0, 1 div 0)
+Object is a string :
+
+========================
+Expression: substring("12345",-1 div 0,5)
+Object is a string :
+
+========================
+Expression: string-length("")
+Object is a number : 0
+
+========================
+Expression: string-length("titi")
+Object is a number : 4
diff --git a/result/XPath/tests/chaptersbase b/result/XPath/tests/chaptersbase
new file mode 100644
index 0000000..03c6567
--- /dev/null
+++ b/result/XPath/tests/chaptersbase
@@ -0,0 +1,115 @@
+
+========================
+Expression: /child::EXAMPLE
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT EXAMPLE
+ ATTRIBUTE prop1
+ TEXT
+ content=gnome is great
+ ATTRIBUTE prop2
+ TEXT
+ content=& linux too
+
+========================
+Expression: /child::*
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT EXAMPLE
+ ATTRIBUTE prop1
+ TEXT
+ content=gnome is great
+ ATTRIBUTE prop2
+ TEXT
+ content=& linux too
+
+========================
+Expression: /child::EXAMPLE/child::head
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT head
+
+========================
+Expression: /child::EXAMPLE/child::*
+Object is a Node Set :
+Set contains 6 nodes:
+1 ELEMENT head
+2 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
+3 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+4 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter3
+5 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter4
+6 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter5
+
+========================
+Expression: /child::EXAMPLE/child::head/child::title
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT title
+
+========================
+Expression: /child::EXAMPLE/child::head/child::title/child::text()
+Object is a Node Set :
+Set contains 1 nodes:
+1 TEXT
+ content=Welcome to Gnome
+
+========================
+Expression: /child::EXAMPLE/child::head/node()
+Object is a Node Set :
+Set contains 3 nodes:
+1 TEXT
+ content=
+2 ELEMENT title
+3 TEXT
+ content=
+
+========================
+Expression: /descendant::title
+Object is a Node Set :
+Set contains 6 nodes:
+1 ELEMENT title
+2 ELEMENT title
+3 ELEMENT title
+4 ELEMENT title
+5 ELEMENT title
+6 ELEMENT title
+
+========================
+Expression: /descendant::p/ancestor::chapter
+Object is a Node Set :
+Set contains 5 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
+2 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+3 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter3
+4 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter4
+5 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter5
diff --git a/result/XPath/tests/chaptersprefol b/result/XPath/tests/chaptersprefol
new file mode 100644
index 0000000..a12c937
--- /dev/null
+++ b/result/XPath/tests/chaptersprefol
@@ -0,0 +1,100 @@
+
+========================
+Expression: /following::*
+Object is a Node Set :
+Set contains 0 nodes:
+
+========================
+Expression: /preceding::*
+Object is a Node Set :
+Set contains 0 nodes:
+
+========================
+Expression: /child::EXAMPLE/preceding::*
+Object is a Node Set :
+Set contains 0 nodes:
+
+========================
+Expression: /child::EXAMPLE/following::*
+Object is a Node Set :
+Set contains 0 nodes:
+
+========================
+Expression: /child::EXAMPLE/child::chapter[3]/preceding::*
+Object is a Node Set :
+Set contains 10 nodes:
+1 ELEMENT head
+2 ELEMENT title
+3 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
+4 ELEMENT title
+5 ELEMENT p
+6 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+7 ELEMENT p
+8 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+9 ELEMENT title
+10 ELEMENT p
+
+========================
+Expression: /child::EXAMPLE/child::chapter[3]/following::*
+Object is a Node Set :
+Set contains 6 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter4
+2 ELEMENT title
+3 ELEMENT p
+4 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter5
+5 ELEMENT title
+6 ELEMENT p
+
+========================
+Expression: /child::EXAMPLE/child::chapter[1]/image/preceding::*
+Object is a Node Set :
+Set contains 4 nodes:
+1 ELEMENT head
+2 ELEMENT title
+3 ELEMENT title
+4 ELEMENT p
+
+========================
+Expression: /child::EXAMPLE/child::chapter[1]/image/following::*
+Object is a Node Set :
+Set contains 13 nodes:
+1 ELEMENT p
+2 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+3 ELEMENT title
+4 ELEMENT p
+5 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter3
+6 ELEMENT title
+7 ELEMENT p
+8 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter4
+9 ELEMENT title
+10 ELEMENT p
+11 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter5
+12 ELEMENT title
+13 ELEMENT p
diff --git a/result/XPath/tests/idsimple b/result/XPath/tests/idsimple
new file mode 100644
index 0000000..891b52e
--- /dev/null
+++ b/result/XPath/tests/idsimple
@@ -0,0 +1,33 @@
+
+========================
+Expression: //*[@id="root"]
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT EXAMPLE
+ ATTRIBUTE id
+ TEXT
+ content=root
+ ATTRIBUTE prop1
+ TEXT
+ content=gnome is great
+ ATTRIBUTE prop2
+ TEXT
+ content=& linux too
+
+========================
+Expression: //*[@id="chapter2"]
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+
+========================
+Expression: //*[@id="chapter5"]
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter5
diff --git a/result/XPath/tests/simpleabbr b/result/XPath/tests/simpleabbr
new file mode 100644
index 0000000..85da41a
--- /dev/null
+++ b/result/XPath/tests/simpleabbr
@@ -0,0 +1,81 @@
+
+========================
+Expression: /EXAMPLE
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT EXAMPLE
+ ATTRIBUTE prop1
+ TEXT
+ content=gnome is great
+ ATTRIBUTE prop2
+ TEXT
+ content=& linux too
+
+========================
+Expression: /EXAMPLE/head
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT head
+
+========================
+Expression: /EXAMPLE/chapter[1]
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+
+========================
+Expression: //p
+Object is a Node Set :
+Set contains 2 nodes:
+1 ELEMENT p
+2 ELEMENT p
+
+========================
+Expression: //chapter/image
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+
+========================
+Expression: //p/text()
+Object is a Node Set :
+Set contains 2 nodes:
+1 TEXT
+ content=bla bla bla ...
+2 TEXT
+ content=...
+
+========================
+Expression: //p/text()[position()=1]
+Object is a Node Set :
+Set contains 2 nodes:
+1 TEXT
+ content=bla bla bla ...
+2 TEXT
+ content=...
+
+========================
+Expression: //p/text()[position()=last()]
+Object is a Node Set :
+Set contains 2 nodes:
+1 TEXT
+ content=bla bla bla ...
+2 TEXT
+ content=...
+
+========================
+Expression: (//p/text())[position()=1]
+Object is a Node Set :
+Set contains 1 nodes:
+1 TEXT
+ content=bla bla bla ...
+
+========================
+Expression: (//p/text())[position()=last()]
+Object is a Node Set :
+Set contains 1 nodes:
+1 TEXT
+ content=...
diff --git a/result/XPath/tests/simplebase b/result/XPath/tests/simplebase
new file mode 100644
index 0000000..38fa144
--- /dev/null
+++ b/result/XPath/tests/simplebase
@@ -0,0 +1,73 @@
+
+========================
+Expression: /child::*
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT EXAMPLE
+ ATTRIBUTE prop1
+ TEXT
+ content=gnome is great
+ ATTRIBUTE prop2
+ TEXT
+ content=& linux too
+
+========================
+Expression: /child::EXAMPLE
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT EXAMPLE
+ ATTRIBUTE prop1
+ TEXT
+ content=gnome is great
+ ATTRIBUTE prop2
+ TEXT
+ content=& linux too
+
+========================
+Expression: /child::EXAMPLE/child::head
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT head
+
+========================
+Expression: /child::EXAMPLE/child::*
+Object is a Node Set :
+Set contains 2 nodes:
+1 ELEMENT head
+2 ELEMENT chapter
+
+========================
+Expression: /child::EXAMPLE/child::head/child::title
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT title
+
+========================
+Expression: /child::EXAMPLE/child::head/child::title/child::text()
+Object is a Node Set :
+Set contains 1 nodes:
+1 TEXT
+ content=Welcome to Gnome
+
+========================
+Expression: /child::EXAMPLE/child::head/node()
+Object is a Node Set :
+Set contains 3 nodes:
+1 TEXT
+ content=
+2 ELEMENT title
+3 TEXT
+ content=
+
+========================
+Expression: /descendant::title
+Object is a Node Set :
+Set contains 2 nodes:
+1 ELEMENT title
+2 ELEMENT title
+
+========================
+Expression: /descendant::p/ancestor::chapter
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
diff --git a/result/XPath/tests/usr1check b/result/XPath/tests/usr1check
new file mode 100644
index 0000000..0308991
--- /dev/null
+++ b/result/XPath/tests/usr1check
@@ -0,0 +1,12 @@
+
+========================
+Expression: //ITEM[1]
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT ITEM
+ ATTRIBUTE monto
+ TEXT
+ content=50.12
+ ATTRIBUTE divisa
+ TEXT
+ content=DOL
diff --git a/result/XPath/tests/vidbase b/result/XPath/tests/vidbase
new file mode 100644
index 0000000..3c7b62f
--- /dev/null
+++ b/result/XPath/tests/vidbase
@@ -0,0 +1,42 @@
+
+========================
+Expression: id('chapter1')
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
+
+========================
+Expression: id('chapter3')
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter3
+
+========================
+Expression: id('chapter1')/p
+Object is a Node Set :
+Set contains 4 nodes:
+1 ELEMENT p
+2 ELEMENT p
+3 ELEMENT p
+4 ELEMENT p
+
+========================
+Expression: id('chapter1')//p
+Object is a Node Set :
+Set contains 4 nodes:
+1 ELEMENT p
+2 ELEMENT p
+3 ELEMENT p
+4 ELEMENT p
+
+========================
+Expression: id('chapter1')/p[1]
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT p
diff --git a/result/XPath/xptr/chapterschildseq b/result/XPath/xptr/chapterschildseq
new file mode 100644
index 0000000..396bcac
--- /dev/null
+++ b/result/XPath/xptr/chapterschildseq
@@ -0,0 +1,53 @@
+
+========================
+Expression: /1/2/3
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+
+========================
+Expression: element(/1/2/3)
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+
+========================
+Expression: element(foo)element(/1/2/3)
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+
+========================
+Expression: element(/1/2/3)element(foo)
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+
+========================
+Expression: chapter1/3
+Object is a Node Set :
+Set contains 0 nodes:
+
+========================
+Expression: element(chapter1/3)
+Object is empty (NULL)
+
+========================
+Expression: element(foo)element(chapter1/3)
+Object is empty (NULL)
+
+========================
+Expression: element(chapter1/3)element(foo)
+Object is empty (NULL)
diff --git a/result/XPath/xptr/chaptersparts b/result/XPath/xptr/chaptersparts
new file mode 100644
index 0000000..70b561b
--- /dev/null
+++ b/result/XPath/xptr/chaptersparts
@@ -0,0 +1,44 @@
+
+========================
+Expression: xpointer(//chapitre[2])
+Object is empty (NULL)
+
+========================
+Expression: xpointer(//chapter[2])
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+
+========================
+Expression: xpointer(//chapitre[2])xpointer(//chapter[2])
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+
+========================
+Expression: xpointer(id("chapter1"))
+Object is empty (NULL)
+
+========================
+Expression: xpointer(//*[@id="chapter1"])
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
+
+========================
+Expression: xpointer(id("chapter1"))xpointer(//*[@id="chapter1"])
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
diff --git a/result/XPath/xptr/chaptersrange b/result/XPath/xptr/chaptersrange
new file mode 100644
index 0000000..c1b9cde
--- /dev/null
+++ b/result/XPath/xptr/chaptersrange
@@ -0,0 +1,64 @@
+
+========================
+Expression: xpointer(//chapter[position() = 2]/range-to(following::chapter[1]))
+Object is a Location Set:
+1 : Object is a range :
+ From node
+ ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+ To node
+ ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter3
+
+
+========================
+Expression: xpointer(//chapter[position() <= 2]/range-to(following::chapter[1]))
+Object is a Location Set:
+1 : Object is a range :
+ From node
+ ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
+ To node
+ ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+
+2 : Object is a range :
+ From node
+ ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter2
+ To node
+ ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter3
+
+
+========================
+Expression: xpointer(//chapter[position() = last()]/range-to(following::chapter[1]))
+Object is empty (NULL)
+
+========================
+Expression: xpointer(//chapter[position() = 3]/range-to(/.//chapter[position() = 1]))
+Object is a Location Set:
+1 : Object is a range :
+ From node
+ ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
+ To node
+ ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter3
+
diff --git a/result/XPath/xptr/strpoint b/result/XPath/xptr/strpoint
new file mode 100644
index 0000000..d6ecab3
--- /dev/null
+++ b/result/XPath/xptr/strpoint
@@ -0,0 +1,75 @@
+
+========================
+Expression: xpointer(start-point(string-range(//p,'multiple')))
+Object is a Location Set:
+1 : Object is a point : index 1 in node TEXT
+ content=multiple tests
+
+
+========================
+Expression: xpointer(end-point(string-range(//p,'multiple')))
+Object is a Location Set:
+1 : Object is a point : index 8 in node TEXT
+ content=multiple tests
+
+
+========================
+Expression: xpointer(start-point(string-range(//p,'test')))
+Object is a Location Set:
+1 : Object is a point : index 10 in node TEXT
+ content=a simple test
+
+2 : Object is a point : index 10 in node TEXT
+ content=multiple tests
+
+3 : Object is a point : index 7 in node TEXT
+ content=anced test
+
+
+========================
+Expression: xpointer(end-point(string-range(//p,'test')))
+Object is a Location Set:
+1 : Object is a point : index 13 in node TEXT
+ content=a simple test
+
+2 : Object is a point : index 13 in node TEXT
+ content=multiple tests
+
+3 : Object is a point : index 10 in node TEXT
+ content=anced test
+
+
+========================
+Expression: xpointer(start-point(string-range(//*,'multiple',1,0)))
+Object is a Location Set:
+1 : Object is a point : index 1 in node TEXT
+ content=multiple tests
+
+
+========================
+Expression: xpointer(end-point(string-range(//*,'multiple',1,0)))
+Object is a Location Set:
+1 : Object is a point : index 1 in node TEXT
+ content=multiple tests
+
+
+========================
+Expression: xpointer(start-point(string-range(//*,'multiple',1,1)))
+Object is a Location Set:
+1 : Object is a point : index 1 in node TEXT
+ content=multiple tests
+
+
+========================
+Expression: xpointer(end-point(string-range(//*,'multiple',1,1)))
+Object is a Location Set:
+1 : Object is a point : index 2 in node TEXT
+ content=multiple tests
+
+
+========================
+Expression: xpointer(start-point(string-range(//p,'test'))[1])
+Object is a Location Set:
+1 : Object is a point : index 10 in node TEXT
+ content=a simple test
+
diff --git a/result/XPath/xptr/strrange b/result/XPath/xptr/strrange
new file mode 100644
index 0000000..c14ed91
--- /dev/null
+++ b/result/XPath/xptr/strrange
@@ -0,0 +1,96 @@
+
+========================
+Expression: xpointer(string-range(//p, 'simple'))
+Object is a Location Set:
+1 : Object is a range :
+ From index 3 in node
+ TEXT
+ content=a simple test
+ To index 8 in node
+ TEXT
+ content=a simple test
+
+
+========================
+Expression: xpointer(string-range(//p, 'test'))
+Object is a Location Set:
+1 : Object is a range :
+ From index 10 in node
+ TEXT
+ content=a simple test
+ To index 13 in node
+ TEXT
+ content=a simple test
+
+2 : Object is a range :
+ From index 10 in node
+ TEXT
+ content=multiple tests
+ To index 13 in node
+ TEXT
+ content=multiple tests
+
+3 : Object is a range :
+ From index 7 in node
+ TEXT
+ content=anced test
+ To index 10 in node
+ TEXT
+ content=anced test
+
+
+========================
+Expression: xpointer(string-range(//p, 'difficult'))
+Object is a Location Set:
+1 : Object is a range :
+ From index 3 in node
+ TEXT
+ content=a diff
+ To index 4 in node
+ TEXT
+ content=cult one
+
+
+========================
+Expression: xpointer(string-range(//p, 'spanning'))
+Object is a Location Set:
+1 : Object is a range :
+ From index 3 in node
+ TEXT
+ content=a span
+ To index 3 in node
+ TEXT
+ content=ing one
+
+
+========================
+Expression: xpointer(string-range(//p, 'unbalanced'))
+Object is a Location Set:
+1 : Object is a range :
+ From index 8 in node
+ TEXT
+ content=and an unbal
+ To index 5 in node
+ TEXT
+ content=anced test
+
+
+========================
+Expression: xpointer(string-range(//seq, ''))
+Object is a Location Set:
+1 : Object is a collapsed range :
+ index 1 in node
+ TEXT
+ content=123
+2 : Object is a collapsed range :
+ index 2 in node
+ TEXT
+ content=123
+3 : Object is a collapsed range :
+ index 3 in node
+ TEXT
+ content=123
+4 : Object is a collapsed range :
+ index 4 in node
+ TEXT
+ content=123
diff --git a/result/XPath/xptr/strrange2 b/result/XPath/xptr/strrange2
new file mode 100644
index 0000000..ea6ee45
--- /dev/null
+++ b/result/XPath/xptr/strrange2
@@ -0,0 +1,64 @@
+
+========================
+Expression: xpointer(string-range(//p, 'test', 2))
+Object is a Location Set:
+1 : Object is a range :
+ From index 11 in node
+ TEXT
+ content=a simple test
+ To index 13 in node
+ TEXT
+ content=a simple test
+
+2 : Object is a range :
+ From index 11 in node
+ TEXT
+ content=multiple tests
+ To index 13 in node
+ TEXT
+ content=multiple tests
+
+3 : Object is a range :
+ From index 8 in node
+ TEXT
+ content=anced test
+ To index 10 in node
+ TEXT
+ content=anced test
+
+
+========================
+Expression: xpointer(string-range(//p, 'test', 2, 2))
+Object is a Location Set:
+1 : Object is a range :
+ From index 11 in node
+ TEXT
+ content=a simple test
+ To index 12 in node
+ TEXT
+ content=a simple test
+
+2 : Object is a range :
+ From index 11 in node
+ TEXT
+ content=multiple tests
+ To index 12 in node
+ TEXT
+ content=multiple tests
+
+3 : Object is a range :
+ From index 8 in node
+ TEXT
+ content=anced test
+ To index 9 in node
+ TEXT
+ content=anced test
+
+
+========================
+Expression: xpointer(string-range(//p, 'difficult', 1, 0))
+Object is a Location Set:
+1 : Object is a collapsed range :
+ index 3 in node
+ TEXT
+ content=a diff
diff --git a/result/XPath/xptr/strrange3 b/result/XPath/xptr/strrange3
new file mode 100644
index 0000000..6d3114a
--- /dev/null
+++ b/result/XPath/xptr/strrange3
@@ -0,0 +1,48 @@
+
+========================
+Expression: xpointer(string-range(//p, 'test', 1, 0))
+Object is a Location Set:
+1 : Object is a collapsed range :
+ index 10 in node
+ TEXT
+ content=a simple test
+2 : Object is a collapsed range :
+ index 10 in node
+ TEXT
+ content=multiple tests
+3 : Object is a collapsed range :
+ index 7 in node
+ TEXT
+ content=anced test
+
+========================
+Expression: xpointer(string-range(//*, 'test', 1, 0))
+Object is a Location Set:
+1 : Object is a collapsed range :
+ index 10 in node
+ TEXT
+ content=a simple test
+2 : Object is a collapsed range :
+ index 10 in node
+ TEXT
+ content=multiple tests
+3 : Object is a collapsed range :
+ index 7 in node
+ TEXT
+ content=anced test
+
+========================
+Expression: xpointer(string-range(//p, 'test', 1, 0)[2])
+Object is a Location Set:
+1 : Object is a collapsed range :
+ index 10 in node
+ TEXT
+ content=multiple tests
+
+========================
+Expression: xpointer(string-range(//*, 'test', 1, 0)[2])
+Object is a Location Set:
+1 : Object is a collapsed range :
+ index 10 in node
+ TEXT
+ content=multiple tests
diff --git a/result/XPath/xptr/vidbase b/result/XPath/xptr/vidbase
new file mode 100644
index 0000000..8b9e92d
--- /dev/null
+++ b/result/XPath/xptr/vidbase
@@ -0,0 +1,19 @@
+
+========================
+Expression: xpointer(id('chapter1')/p)
+Object is a Node Set :
+Set contains 4 nodes:
+1 ELEMENT p
+2 ELEMENT p
+3 ELEMENT p
+4 ELEMENT p
+
+========================
+Expression: xpointer(id('chapter1')/p[1]/range-to(following-sibling::p[2]))
+Object is a Location Set:
+1 : Object is a range :
+ From node
+ ELEMENT p
+ To node
+ ELEMENT p
+
diff --git a/result/XPath/xptr/vidchildseq b/result/XPath/xptr/vidchildseq
new file mode 100644
index 0000000..eb8c5f7
--- /dev/null
+++ b/result/XPath/xptr/vidchildseq
@@ -0,0 +1,36 @@
+
+========================
+Expression: /1/2/3
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+
+========================
+Expression: element(/1/2/3)
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+
+========================
+Expression: chapter1/3
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
+
+========================
+Expression: element(chapter1/3)
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT image
+ ATTRIBUTE href
+ TEXT
+ content=linus.gif
diff --git a/result/XPath/xptr/vidparts b/result/XPath/xptr/vidparts
new file mode 100644
index 0000000..bd5bd3c
--- /dev/null
+++ b/result/XPath/xptr/vidparts
@@ -0,0 +1,27 @@
+
+========================
+Expression: xpointer(id("chapter1"))
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
+
+========================
+Expression: xpointer(//*[@id="chapter1"])
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
+
+========================
+Expression: xpointer(id("chapter1"))xpointer(//*[@id="chapter1"])
+Object is a Node Set :
+Set contains 1 nodes:
+1 ELEMENT chapter
+ ATTRIBUTE id
+ TEXT
+ content=chapter1
diff --git a/result/att1 b/result/att1
new file mode 100644
index 0000000..00aa6be
--- /dev/null
+++ b/result/att1
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<doc attr="to normalize with a space"/>
diff --git a/result/att1.rdr b/result/att1.rdr
new file mode 100644
index 0000000..9f92263
--- /dev/null
+++ b/result/att1.rdr
@@ -0,0 +1 @@
+0 1 doc 1 0
diff --git a/result/att1.sax b/result/att1.sax
new file mode 100644
index 0000000..e19a8a7
--- /dev/null
+++ b/result/att1.sax
@@ -0,0 +1,5 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(doc, attr='to normalize with a space')
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/att2 b/result/att2
new file mode 100644
index 0000000..28989a2
--- /dev/null
+++ b/result/att2
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<doc attr="to normalize with a space"/>
diff --git a/result/att2.rdr b/result/att2.rdr
new file mode 100644
index 0000000..9f92263
--- /dev/null
+++ b/result/att2.rdr
@@ -0,0 +1 @@
+0 1 doc 1 0
diff --git a/result/att2.sax b/result/att2.sax
new file mode 100644
index 0000000..02ca320
--- /dev/null
+++ b/result/att2.sax
@@ -0,0 +1,5 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(doc, attr='to normalize with a space')
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/att3 b/result/att3
new file mode 100644
index 0000000..3f3ac5c
--- /dev/null
+++ b/result/att3
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<select onclick="aaaa&#10; bbbb&#xA0;">f&#xA0;oo</select>
diff --git a/result/att3.rdr b/result/att3.rdr
new file mode 100644
index 0000000..d1e72cc
--- /dev/null
+++ b/result/att3.rdr
@@ -0,0 +1,3 @@
+0 1 select 0 0
+1 3 #text 0 1 f oo
+0 15 select 0 0
diff --git a/result/att3.sax b/result/att3.sax
new file mode 100644
index 0000000..eec0959
--- /dev/null
+++ b/result/att3.sax
@@ -0,0 +1,9 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(select, onclick='aaaa
+ bbbb ')
+SAX.characters(f, 1)
+SAX.characters( , 2)
+SAX.characters(oo, 2)
+SAX.endElement(select)
+SAX.endDocument()
diff --git a/result/att4 b/result/att4
new file mode 100644
index 0000000..882cea7
--- /dev/null
+++ b/result/att4
@@ -0,0 +1,9264 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XML Spy v4.4 U (http://www.xmlspy.com) by Slava (GIVC) -->
+<electroxml modified="20021216T072726">
+ <data from="20021031T22" to="20021130T22">
+ <select>
+ <device serialnumb="E00003562">
+ <par memind="113400" h="3dc1a8de">
+ <val o="0" v="53"/>
+ <val o="e08" v="53"/>
+ <val o="1c32" v="53"/>
+ <val o="2a3c" v="53"/>
+ <val o="3835" v="53"/>
+ <val o="4645" v="53"/>
+ <val o="5455" v="53"/>
+ <val o="6265" v="53"/>
+ <val o="7075" v="53"/>
+ <val o="7e85" v="53"/>
+ <val o="8c96" v="53"/>
+ <val o="9aa5" v="53"/>
+ <val o="a8b6" v="53"/>
+ <val o="b6c5" v="53"/>
+ <val o="c4d7" v="53"/>
+ <val o="d30b" v="53"/>
+ <val o="e0f6" v="53"/>
+ <val o="ef06" v="53"/>
+ <val o="fd17" v="53"/>
+ <val o="10b27" v="53"/>
+ <val o="11937" v="53"/>
+ <val o="12746" v="53"/>
+ <val o="13556" v="53"/>
+ <val o="14366" v="53"/>
+ <val o="15181" v="53"/>
+ <val o="15f85" v="53"/>
+ <val o="16d95" v="53"/>
+ <val o="17ba4" v="53"/>
+ <val o="189b5" v="53"/>
+ <val o="197c4" v="53"/>
+ <val o="1a5d5" v="53"/>
+ <val o="1b3e6" v="53"/>
+ <val o="1c1f6" v="53"/>
+ <val o="1d005" v="53"/>
+ <val o="1de15" v="53"/>
+ <val o="1ec25" v="53"/>
+ <val o="1fa36" v="53"/>
+ <val o="20845" v="53"/>
+ <val o="21656" v="53"/>
+ <val o="22465" v="53"/>
+ <val o="23276" v="53"/>
+ <val o="24086" v="53"/>
+ <val o="24e99" v="53"/>
+ <val o="25ca7" v="53"/>
+ <val o="26ab7" v="53"/>
+ <val o="278c6" v="53"/>
+ <val o="286d6" v="53"/>
+ <val o="294e6" v="53"/>
+ <val o="2a301" v="53"/>
+ <val o="2b105" v="53"/>
+ <val o="2bf15" v="53"/>
+ <val o="2cd25" v="53"/>
+ <val o="2db35" v="53"/>
+ <val o="2e946" v="53"/>
+ <val o="2f755" v="53"/>
+ <val o="30566" v="53"/>
+ <val o="31375" v="53"/>
+ <val o="3219e" v="53"/>
+ <val o="32f96" v="53"/>
+ <val o="33da6" v="53"/>
+ <val o="34bb6" v="53"/>
+ <val o="359de" v="53"/>
+ <val o="367d6" v="53"/>
+ <val o="375e6" v="53"/>
+ <val o="3840e" v="53"/>
+ <val o="3921e" v="53"/>
+ <val o="3a016" v="53"/>
+ <val o="3ae27" v="53"/>
+ <val o="3bc36" v="53"/>
+ <val o="3ca47" v="53"/>
+ <val o="3d856" v="53"/>
+ <val o="3e667" v="53"/>
+ <val o="3f481" v="53"/>
+ <val o="40285" v="53"/>
+ <val o="41095" v="53"/>
+ <val o="41ea5" v="53"/>
+ <val o="42cb5" v="53"/>
+ <val o="43ac5" v="53"/>
+ <val o="448d5" v="53"/>
+ <val o="456e6" v="53"/>
+ <val o="464f5" v="53"/>
+ <val o="480ff" v="53"/>
+ <val o="48f0e" v="53"/>
+ <val o="49d1d" v="53"/>
+ <val o="4ab46" v="53"/>
+ <val o="4b955" v="53"/>
+ <val o="4c769" v="53"/>
+ <val o="4d577" v="53"/>
+ <val o="4e387" v="53"/>
+ <val o="4f196" v="53"/>
+ <val o="4ffa6" v="53"/>
+ <val o="50dd0" v="53"/>
+ <val o="51bc6" v="53"/>
+ <val o="529d6" v="53"/>
+ <val o="537e7" v="53"/>
+ <val o="54600" v="53"/>
+ <val o="55406" v="53"/>
+ <val o="56215" v="53"/>
+ <val o="57026" v="53"/>
+ <val o="57e36" v="53"/>
+ <val o="58c46" v="53"/>
+ <val o="59a70" v="53"/>
+ <val o="5a867" v="53"/>
+ <val o="5b676" v="53"/>
+ <val o="5c487" v="53"/>
+ <val o="5d296" v="53"/>
+ <val o="5e0a9" v="53"/>
+ <val o="5eeb8" v="53"/>
+ <val o="5fcc6" v="53"/>
+ <val o="60ad7" v="53"/>
+ <val o="618e7" v="53"/>
+ <val o="626f7" v="53"/>
+ <val o="63507" v="53"/>
+ <val o="64317" v="53"/>
+ <val o="65127" v="53"/>
+ <val o="65f37" v="53"/>
+ <val o="66d46" v="53"/>
+ <val o="67b57" v="53"/>
+ <val o="68967" v="53"/>
+ <val o="69782" v="53"/>
+ <val o="6a586" v="53"/>
+ <val o="6b395" v="53"/>
+ <val o="6c1a6" v="53"/>
+ <val o="6cfb5" v="53"/>
+ <val o="6ddc6" v="53"/>
+ <val o="6ebd6" v="53"/>
+ <val o="6f9e6" v="53"/>
+ <val o="707f6" v="53"/>
+ <val o="71607" v="53"/>
+ <val o="72417" v="53"/>
+ <val o="73227" v="53"/>
+ <val o="74037" v="53"/>
+ <val o="74e47" v="53"/>
+ <val o="75c57" v="53"/>
+ <val o="76a63" v="53"/>
+ <val o="77873" v="53"/>
+ <val o="78680" v="53"/>
+ <val o="7948f" v="53"/>
+ <val o="7a29f" v="53"/>
+ <val o="7b0af" v="53"/>
+ <val o="7bebf" v="53"/>
+ <val o="7cccf" v="53"/>
+ <val o="7dadf" v="53"/>
+ <val o="7e8fa" v="53"/>
+ <val o="7f70a" v="53"/>
+ <val o="8051a" v="53"/>
+ <val o="8132a" v="53"/>
+ <val o="8213a" v="53"/>
+ <val o="82f4a" v="53"/>
+ <val o="83d5a" v="53"/>
+ <val o="84b6a" v="53"/>
+ <val o="8597a" v="53"/>
+ <val o="8678b" v="53"/>
+ <val o="8759b" v="53"/>
+ <val o="883ac" v="53"/>
+ <val o="891bb" v="53"/>
+ <val o="89fca" v="53"/>
+ <val o="8adda" v="53"/>
+ <val o="8bbeb" v="53"/>
+ <val o="8c9fc" v="53"/>
+ <val o="8d80b" v="53"/>
+ <val o="8e61a" v="53"/>
+ <val o="8f42a" v="53"/>
+ <val o="9023a" v="53"/>
+ <val o="9104a" v="53"/>
+ <val o="91e5a" v="53"/>
+ <val o="92c6a" v="53"/>
+ <val o="93a84" v="53"/>
+ <val o="94885" v="53"/>
+ <val o="95694" v="53"/>
+ <val o="964a5" v="53"/>
+ <val o="972b4" v="53"/>
+ <val o="980c5" v="53"/>
+ <val o="98ed4" v="53"/>
+ <val o="99ce5" v="53"/>
+ <val o="9aaf5" v="53"/>
+ <val o="9b906" v="53"/>
+ <val o="9c716" v="53"/>
+ <val o="9d526" v="53"/>
+ <val o="9e336" v="53"/>
+ <val o="9f145" v="53"/>
+ <val o="9ff56" v="53"/>
+ <val o="a0d65" v="53"/>
+ <val o="a1b77" v="53"/>
+ <val o="a2986" v="53"/>
+ <val o="a3795" v="53"/>
+ <val o="a45a7" v="53"/>
+ <val o="a53b6" v="53"/>
+ <val o="a61c7" v="53"/>
+ <val o="a6fd6" v="53"/>
+ <val o="a7e00" v="53"/>
+ <val o="a8c00" v="53"/>
+ <val o="a9a05" v="53"/>
+ <val o="aa815" v="53"/>
+ <val o="ab625" v="53"/>
+ <val o="ac435" v="53"/>
+ <val o="ad245" v="53"/>
+ <val o="ae055" v="53"/>
+ <val o="aee65" v="53"/>
+ <val o="afc75" v="53"/>
+ <val o="b0a85" v="53"/>
+ <val o="b26a6" v="53"/>
+ <val o="b34b6" v="53"/>
+ <val o="b42c6" v="53"/>
+ <val o="b50d6" v="53"/>
+ <val o="b5ee7" v="53"/>
+ <val o="b6cf6" v="53"/>
+ <val o="b7b07" v="53"/>
+ <val o="b8917" v="53"/>
+ <val o="b9728" v="53"/>
+ <val o="ba537" v="53"/>
+ <val o="bb347" v="53"/>
+ <val o="bc157" v="53"/>
+ <val o="bcf67" v="53"/>
+ <val o="bdd81" v="53"/>
+ <val o="beb86" v="53"/>
+ <val o="bf995" v="53"/>
+ <val o="c07a6" v="53"/>
+ <val o="c15b5" v="53"/>
+ <val o="c23c6" v="53"/>
+ <val o="c31d5" v="53"/>
+ <val o="c3fe6" v="53"/>
+ <val o="c4df5" v="53"/>
+ <val o="c5c06" v="53"/>
+ <val o="c6a16" v="53"/>
+ <val o="c7826" v="53"/>
+ <val o="c8636" v="53"/>
+ <val o="c9446" v="53"/>
+ <val o="ca256" v="53"/>
+ <val o="cb066" v="53"/>
+ <val o="cbe76" v="53"/>
+ <val o="ccc87" v="53"/>
+ <val o="cda96" v="53"/>
+ <val o="ce8a8" v="53"/>
+ <val o="cf6b7" v="53"/>
+ <val o="d04c8" v="53"/>
+ <val o="d12d7" v="53"/>
+ <val o="d20e7" v="53"/>
+ <val o="d2f02" v="53"/>
+ <val o="d3d05" v="53"/>
+ <val o="d4b15" v="53"/>
+ <val o="d5926" v="53"/>
+ <val o="d6735" v="53"/>
+ <val o="d7546" v="53"/>
+ <val o="d8355" v="53"/>
+ <val o="d9166" v="53"/>
+ <val o="d9f75" v="53"/>
+ <val o="dad87" v="53"/>
+ <val o="dbb97" v="53"/>
+ <val o="dc9a8" v="53"/>
+ <val o="dd7b7" v="53"/>
+ <val o="de5c6" v="53"/>
+ <val o="df3d7" v="53"/>
+ <val o="e01d7" v="53"/>
+ <val o="e0fe5" v="53"/>
+ <val o="e1df5" v="53"/>
+ <val o="e2c04" v="53"/>
+ <val o="e3a14" v="53"/>
+ <val o="e4824" v="53"/>
+ <val o="e5634" v="53"/>
+ <val o="e6444" v="53"/>
+ <val o="e7255" v="53"/>
+ <val o="e806f" v="53"/>
+ <val o="e8e7f" v="53"/>
+ <val o="e9c8e" v="53"/>
+ <val o="eaa9f" v="53"/>
+ <val o="eb8ae" v="53"/>
+ <val o="ec6bf" v="53"/>
+ <val o="ed4ce" v="53"/>
+ <val o="ee2df" v="53"/>
+ <val o="ef0ef" v="53"/>
+ <val o="eff01" v="53"/>
+ <val o="f0d10" v="53"/>
+ <val o="f1b20" v="53"/>
+ <val o="f2930" v="53"/>
+ <val o="f3740" v="53"/>
+ <val o="f4551" v="53"/>
+ <val o="f5361" v="53"/>
+ <val o="f6172" v="53"/>
+ <val o="f6f80" v="53"/>
+ <val o="f7d91" v="53"/>
+ <val o="f8ba1" v="53"/>
+ <val o="f99b1" v="53"/>
+ <val o="fa7c0" v="53"/>
+ <val o="fb5d1" v="53"/>
+ <val o="fc3e0" v="53"/>
+ <val o="fd1fb" v="53"/>
+ <val o="fe00b" v="53"/>
+ <val o="fee1c" v="53"/>
+ <val o="ffc2c" v="53"/>
+ <val o="100a3b" v="53"/>
+ <val o="10184c" v="53"/>
+ <val o="10265b" v="53"/>
+ <val o="10346c" v="53"/>
+ <val o="10427b" v="53"/>
+ <val o="10508d" v="53"/>
+ <val o="105e9d" v="53"/>
+ <val o="106cad" v="53"/>
+ <val o="107abd" v="53"/>
+ <val o="1088cd" v="53"/>
+ <val o="1096de" v="53"/>
+ <val o="10a4ed" v="53"/>
+ <val o="10b2fe" v="53"/>
+ <val o="10c10d" v="53"/>
+ <val o="10cf1e" v="53"/>
+ <val o="10dd2e" v="53"/>
+ <val o="10eb66" v="53"/>
+ <val o="10f94e" v="53"/>
+ <val o="11075e" v="53"/>
+ <val o="11156d" v="53"/>
+ <val o="112388" v="53"/>
+ <val o="113187" v="53"/>
+ <val o="113fb0" v="53"/>
+ <val o="114da6" v="53"/>
+ <val o="115bb6" v="53"/>
+ <val o="1169c6" v="53"/>
+ <val o="1177d6" v="53"/>
+ <val o="1185e8" v="53"/>
+ <val o="1193f7" v="53"/>
+ <val o="11a208" v="53"/>
+ <val o="11b017" v="53"/>
+ <val o="11be2f" v="53"/>
+ <val o="11cc37" v="53"/>
+ <val o="11da47" v="53"/>
+ <val o="11e857" v="53"/>
+ <val o="11f667" v="53"/>
+ <val o="120578" v="53"/>
+ <val o="121386" v="53"/>
+ <val o="122196" v="53"/>
+ <val o="122fa6" v="53"/>
+ <val o="123db5" v="53"/>
+ <val o="124bc5" v="53"/>
+ <val o="1259d5" v="53"/>
+ <val o="1267e4" v="53"/>
+ <val o="127600" v="53"/>
+ <val o="128305" v="53"/>
+ <val o="129115" v="53"/>
+ <val o="129f25" v="53"/>
+ <val o="12ad35" v="53"/>
+ <val o="12bb45" v="53"/>
+ <val o="12c954" v="53"/>
+ <val o="12d766" v="53"/>
+ <val o="12e575" v="53"/>
+ <val o="12f386" v="53"/>
+ <val o="130196" v="53"/>
+ <val o="130fa6" v="53"/>
+ <val o="131db7" v="53"/>
+ <val o="132bc5" v="53"/>
+ <val o="1339d4" v="53"/>
+ <val o="1347e5" v="53"/>
+ <val o="1355f4" v="53"/>
+ <val o="136404" v="53"/>
+ <val o="137214" v="53"/>
+ <val o="138024" v="53"/>
+ <val o="138e33" v="53"/>
+ <val o="139c44" v="53"/>
+ <val o="13aa54" v="53"/>
+ <val o="13b865" v="53"/>
+ <val o="13c67e" v="53"/>
+ <val o="13d48e" v="53"/>
+ <val o="13e29e" v="53"/>
+ <val o="13f0ae" v="53"/>
+ <val o="13febf" v="53"/>
+ <val o="140ccf" v="53"/>
+ <val o="141adf" v="53"/>
+ <val o="1428ef" v="53"/>
+ <val o="1436ff" v="53"/>
+ <val o="14450f" v="53"/>
+ <val o="14531f" v="53"/>
+ <val o="146130" v="53"/>
+ <val o="146f40" v="53"/>
+ <val o="147d44" v="53"/>
+ <val o="148b57" v="53"/>
+ <val o="149965" v="53"/>
+ <val o="14a775" v="53"/>
+ <val o="14b584" v="53"/>
+ <val o="14c397" v="53"/>
+ <val o="14d1a4" v="53"/>
+ <val o="14dfb6" v="53"/>
+ <val o="14edc5" v="53"/>
+ <val o="14fbd5" v="53"/>
+ <val o="1509e5" v="53"/>
+ <val o="1517ff" v="53"/>
+ <val o="152605" v="53"/>
+ <val o="153415" v="53"/>
+ <val o="154225" v="53"/>
+ <val o="155035" v="53"/>
+ <val o="155e45" v="53"/>
+ <val o="156c55" v="53"/>
+ <val o="157a65" v="53"/>
+ <val o="158875" v="53"/>
+ <val o="159686" v="53"/>
+ <val o="15a495" v="53"/>
+ <val o="15b2a6" v="53"/>
+ <val o="15c0b6" v="53"/>
+ <val o="15cec6" v="53"/>
+ <val o="15dcd5" v="53"/>
+ <val o="15eae6" v="53"/>
+ <val o="15f8f5" v="53"/>
+ <val o="160706" v="53"/>
+ <val o="161517" v="53"/>
+ <val o="162326" v="53"/>
+ <val o="163137" v="53"/>
+ <val o="163f46" v="53"/>
+ <val o="164d57" v="53"/>
+ <val o="165b67" v="53"/>
+ <val o="166982" v="53"/>
+ <val o="167786" v="53"/>
+ <val o="168596" v="53"/>
+ <val o="1693a6" v="53"/>
+ <val o="16a1b5" v="53"/>
+ <val o="16afc6" v="53"/>
+ <val o="16bdd5" v="53"/>
+ <val o="16cbe6" v="53"/>
+ <val o="16d9f6" v="53"/>
+ <val o="16e807" v="53"/>
+ <val o="16f616" v="53"/>
+ <val o="170429" v="53"/>
+ <val o="171236" v="53"/>
+ <val o="172047" v="53"/>
+ <val o="172e57" v="53"/>
+ <val o="173c67" v="53"/>
+ <val o="174a77" v="53"/>
+ <val o="175887" v="53"/>
+ <val o="176694" v="53"/>
+ <val o="1774a3" v="53"/>
+ <val o="1782b3" v="53"/>
+ <val o="1790c5" v="53"/>
+ <val o="179ed4" v="53"/>
+ <val o="17ace4" v="53"/>
+ <val o="17bafd" v="53"/>
+ <val o="17c90f" v="53"/>
+ <val o="17d71e" v="53"/>
+ <val o="17e52f" v="53"/>
+ <val o="17f33f" v="53"/>
+ <val o="18014f" v="53"/>
+ <val o="180f5f" v="53"/>
+ <val o="181d6e" v="53"/>
+ <val o="182b7f" v="53"/>
+ <val o="18398f" v="53"/>
+ <val o="1847a1" v="53"/>
+ <val o="1855af" v="53"/>
+ <val o="1863c0" v="53"/>
+ <val o="1871cf" v="53"/>
+ <val o="187fe0" v="53"/>
+ <val o="188def" v="53"/>
+ <val o="189c00" v="53"/>
+ <val o="18b80d" v="53"/>
+ <val o="18c61c" v="53"/>
+ <val o="18d42c" v="53"/>
+ <val o="18e23b" v="53"/>
+ <val o="18f04b" v="53"/>
+ <val o="18fe5e" v="53"/>
+ <val o="190c76" v="53"/>
+ <val o="191a86" v="53"/>
+ <val o="192896" v="53"/>
+ <val o="1936a6" v="53"/>
+ <val o="1944b7" v="53"/>
+ <val o="1952c6" v="53"/>
+ <val o="1960d7" v="53"/>
+ <val o="196ee6" v="53"/>
+ <val o="197cf8" v="53"/>
+ <val o="198b0f" v="53"/>
+ <val o="19991f" v="53"/>
+ <val o="19b541" v="53"/>
+ <val o="19c34d" v="53"/>
+ <val o="19d15e" v="53"/>
+ <val o="19df80" v="53"/>
+ <val o="19ed90" v="53"/>
+ <val o="19eebe" v="53"/>
+ <val o="19fb8e" v="53"/>
+ <val o="1a09a0" v="53"/>
+ <val o="1a17ae" v="53"/>
+ <val o="1a25be" v="53"/>
+ <val o="1a33cd" v="53"/>
+ <val o="1a41dd" v="53"/>
+ <val o="1a4fed" v="53"/>
+ <val o="1a5e08" v="53"/>
+ <val o="1a6c05" v="53"/>
+ <val o="1a7a15" v="53"/>
+ <val o="1a8826" v="53"/>
+ <val o="1a9637" v="53"/>
+ <val o="1aa445" v="53"/>
+ <val o="1ab255" v="53"/>
+ <val o="1ac065" v="53"/>
+ <val o="1ace75" v="53"/>
+ <val o="1adc87" v="53"/>
+ <val o="1aea96" v="53"/>
+ <val o="1af8a7" v="53"/>
+ <val o="1b06b7" v="53"/>
+ <val o="1b14c6" v="53"/>
+ <val o="1c7460" v="55"/>
+ <val o="1c8270" v="55"/>
+ <val o="1c907e" v="55"/>
+ <val o="1c9e8f" v="55"/>
+ <val o="1caca2" v="55"/>
+ <val o="1cbab1" v="55"/>
+ <val o="1cc8c1" v="55"/>
+ <val o="1cd6d0" v="55"/>
+ <val o="1ce4de" v="55"/>
+ <val o="1cf2f0" v="55"/>
+ <val o="1d0109" v="55"/>
+ <val o="1d0f06" v="55"/>
+ <val o="1d1d15" v="55"/>
+ <val o="1d2b25" v="55"/>
+ <val o="1d3935" v="55"/>
+ <val o="1d4745" v="55"/>
+ <val o="1d5555" v="55"/>
+ <val o="1d6366" v="55"/>
+ <val o="1d7175" v="55"/>
+ <val o="1d7f86" v="55"/>
+ <val o="1d8d95" v="55"/>
+ <val o="1d9ba6" v="55"/>
+ <val o="1da9b6" v="55"/>
+ <val o="1db7c7" v="55"/>
+ <val o="1dc5d5" v="55"/>
+ <val o="1dd3e6" v="55"/>
+ <val o="1de1f5" v="55"/>
+ <val o="1df006" v="55"/>
+ <val o="1dfe16" v="55"/>
+ <val o="1e0c26" v="55"/>
+ <val o="1e1a36" v="55"/>
+ <val o="1e2847" v="55"/>
+ <val o="1e3659" v="55"/>
+ <val o="1e4467" v="55"/>
+ <val o="1e5281" v="55"/>
+ <val o="1e6086" v="55"/>
+ <val o="1e6e96" v="55"/>
+ <val o="1e7ca6" v="55"/>
+ <val o="1e8ab5" v="55"/>
+ <val o="1e98c6" v="55"/>
+ <val o="1ea6d5" v="55"/>
+ <val o="1eb4e6" v="55"/>
+ <val o="1ec2f6" v="55"/>
+ <val o="1ed106" v="55"/>
+ <val o="1edf16" v="55"/>
+ <val o="1eed26" v="55"/>
+ <val o="1efb36" v="55"/>
+ <val o="1f0946" v="55"/>
+ <val o="1f1756" v="55"/>
+ <val o="1f2566" v="55"/>
+ <val o="1f3376" v="55"/>
+ <val o="1f4187" v="55"/>
+ <val o="1f4f96" v="55"/>
+ <val o="1f5da7" v="55"/>
+ <val o="1f6bb6" v="55"/>
+ <val o="1f79c7" v="55"/>
+ <val o="1f87d6" v="55"/>
+ <val o="1f95e7" v="55"/>
+ <val o="1fa401" v="55"/>
+ <val o="1fb204" v="55"/>
+ <val o="1fc016" v="55"/>
+ <val o="1fce25" v="55"/>
+ <val o="1fdc35" v="55"/>
+ <val o="1fea45" v="55"/>
+ <val o="1ff855" v="55"/>
+ <val o="200665" v="55"/>
+ <val o="201475" v="55"/>
+ <val o="202286" v="55"/>
+ <val o="203095" v="55"/>
+ <val o="203ea5" v="55"/>
+ <val o="204cb6" v="55"/>
+ <val o="205ac6" v="55"/>
+ <val o="2068d6" v="55"/>
+ <val o="2076e6" v="55"/>
+ <val o="2084f6" v="55"/>
+ <val o="209306" v="55"/>
+ <val o="20a116" v="55"/>
+ <val o="20af26" v="55"/>
+ <val o="20bd37" v="55"/>
+ <val o="20cb46" v="55"/>
+ <val o="20d957" v="55"/>
+ <val o="20e767" v="55"/>
+ <val o="20f581" v="55"/>
+ <val o="210386" v="55"/>
+ <val o="211194" v="55"/>
+ <val o="211fa5" v="55"/>
+ <val o="212db5" v="55"/>
+ <val o="213bc5" v="55"/>
+ <val o="2149d6" v="55"/>
+ <val o="2157e5" v="55"/>
+ <val o="2165f6" v="55"/>
+ <val o="217406" v="55"/>
+ <val o="218217" v="55"/>
+ <val o="219026" v="55"/>
+ <val o="219e39" v="55"/>
+ <val o="21ac46" v="55"/>
+ <val o="21ba57" v="55"/>
+ <val o="21c867" v="55"/>
+ <val o="21d677" v="55"/>
+ <val o="21e487" v="55"/>
+ <val o="21f296" v="55"/>
+ <val o="2200a6" v="55"/>
+ <val o="220eb7" v="55"/>
+ <val o="221cc6" v="55"/>
+ <val o="222ad7" v="55"/>
+ <val o="2238e7" v="55"/>
+ <val o="224701" v="55"/>
+ <val o="225505" v="55"/>
+ <val o="226315" v="55"/>
+ <val o="227125" v="55"/>
+ <val o="227f35" v="55"/>
+ <val o="228d45" v="55"/>
+ <val o="229b54" v="55"/>
+ <val o="22a965" v="55"/>
+ <val o="22b776" v="55"/>
+ <val o="22c586" v="55"/>
+ <val o="22d397" v="55"/>
+ <val o="22e1a6" v="55"/>
+ <val o="22efb6" v="55"/>
+ <val o="22fdc7" v="55"/>
+ <val o="230bd7" v="55"/>
+ <val o="2319e6" v="55"/>
+ <val o="2327f6" v="55"/>
+ <val o="23361b" v="55"/>
+ <val o="234416" v="55"/>
+ <val o="235226" v="55"/>
+ <val o="236037" v="55"/>
+ <val o="236e46" v="55"/>
+ <val o="237c57" v="55"/>
+ <val o="238a66" v="55"/>
+ <val o="239881" v="55"/>
+ <val o="23a685" v="55"/>
+ <val o="23b495" v="55"/>
+ <val o="23c2a4" v="55"/>
+ <val o="23d0b5" v="55"/>
+ <val o="23dec4" v="55"/>
+ <val o="23ecd5" v="55"/>
+ <val o="23fae4" v="55"/>
+ <val o="2408f6" v="55"/>
+ <val o="241706" v="55"/>
+ <val o="242518" v="55"/>
+ <val o="243325" v="55"/>
+ <val o="244137" v="55"/>
+ <val o="244f46" v="55"/>
+ <val o="246b66" v="55"/>
+ <val o="247976" v="55"/>
+ <val o="248786" v="55"/>
+ <val o="24957e" v="55"/>
+ <val o="24a38f" v="55"/>
+ <val o="24b19c" v="55"/>
+ <val o="24bfac" v="55"/>
+ <val o="24cdbc" v="55"/>
+ <val o="24dbcd" v="55"/>
+ <val o="24e9e5" v="55"/>
+ <val o="24f808" v="55"/>
+ <val o="250616" v="55"/>
+ <val o="251426" v="55"/>
+ <val o="252236" v="55"/>
+ <val o="253047" v="55"/>
+ <val o="253e56" v="55"/>
+ <val o="254c67" v="55"/>
+ <val o="255a76" v="55"/>
+ <val o="256887" v="55"/>
+ <val o="257697" v="55"/>
+ <val o="2584a8" v="55"/>
+ <val o="2592b6" v="55"/>
+ <val o="25a0c7" v="55"/>
+ <val o="25aed7" v="55"/>
+ <val o="25bce7" v="55"/>
+ <val o="25caf8" v="55"/>
+ <val o="25d907" v="55"/>
+ <val o="25e718" v="55"/>
+ <val o="25f527" v="55"/>
+ <val o="260338" v="55"/>
+ <val o="261149" v="55"/>
+ <val o="261f59" v="55"/>
+ <val o="262d68" v="55"/>
+ <val o="263b83" v="55"/>
+ <val o="264986" v="55"/>
+ <val o="265795" v="55"/>
+ <val o="2665a6" v="55"/>
+ <val o="2673b5" v="55"/>
+ <val o="2681c6" v="55"/>
+ <val o="268fd5" v="55"/>
+ <val o="269de6" v="55"/>
+ <val o="26abf6" v="55"/>
+ <val o="26ba06" v="55"/>
+ <val o="26c817" v="55"/>
+ <val o="26d62b" v="55"/>
+ <val o="26e436" v="55"/>
+ <val o="26f247" v="55"/>
+ <val o="270057" v="55"/>
+ <val o="270e67" v="55"/>
+ <val o="271c77" v="55"/>
+ <val o="272a87" v="55"/>
+ <val o="273897" v="55"/>
+ <val o="2746a8" v="55"/>
+ <val o="2754b9" v="55"/>
+ <val o="2762c7" v="55"/>
+ <val o="2770d8" v="55"/>
+ <val o="277ee7" v="55"/>
+ </par>
+ <par memind="16936600" h="3dc1a8de">
+ <val o="0" v="196.4"/>
+ <val o="e08" v="199.5"/>
+ <val o="1c32" v="200.8"/>
+ <val o="2a3c" v="201.8"/>
+ <val o="3835" v="199.9"/>
+ <val o="4645" v="197.9"/>
+ <val o="5455" v="193.2"/>
+ <val o="6265" v="197.6"/>
+ <val o="7075" v="195.6"/>
+ <val o="7e85" v="192.7"/>
+ <val o="8c96" v="195.3"/>
+ <val o="9aa5" v="195.4"/>
+ <val o="a8b6" v="195.6"/>
+ <val o="b6c5" v="197.3"/>
+ <val o="c4d7" v="222.6"/>
+ <val o="d30b" v="220.9"/>
+ <val o="e0f6" v="222.8"/>
+ <val o="ef06" v="180"/>
+ <val o="fd17" v="180"/>
+ <val o="10b27" v="221.4"/>
+ <val o="11937" v="222.2"/>
+ <val o="12746" v="222.5"/>
+ <val o="13556" v="220.5"/>
+ <val o="14366" v="220.8"/>
+ <val o="15181" v="220"/>
+ <val o="15f85" v="221.2"/>
+ <val o="16d95" v="220.3"/>
+ <val o="17ba4" v="221.1"/>
+ <val o="189b5" v="220.6"/>
+ <val o="197c4" v="220.9"/>
+ <val o="1a5d5" v="219.2"/>
+ <val o="1b3e6" v="219.3"/>
+ <val o="1c1f6" v="220.5"/>
+ <val o="1d005" v="220.7"/>
+ <val o="1de15" v="220.1"/>
+ <val o="1ec25" v="220.4"/>
+ <val o="1fa36" v="220.1"/>
+ <val o="20845" v="220.1"/>
+ <val o="21656" v="220.7"/>
+ <val o="22465" v="220.7"/>
+ <val o="23276" v="220.5"/>
+ <val o="24086" v="180"/>
+ <val o="24e99" v="222"/>
+ <val o="25ca7" v="221.8"/>
+ <val o="26ab7" v="220.6"/>
+ <val o="278c6" v="180"/>
+ <val o="286d6" v="220.8"/>
+ <val o="294e6" v="218.9"/>
+ <val o="2a301" v="220"/>
+ <val o="2b105" v="180"/>
+ <val o="2bf15" v="180"/>
+ <val o="2cd25" v="218.8"/>
+ <val o="2db35" v="180"/>
+ <val o="2e946" v="180"/>
+ <val o="2f755" v="180"/>
+ <val o="30566" v="219.9"/>
+ <val o="31375" v="220.5"/>
+ <val o="3219e" v="219.7"/>
+ <val o="32f96" v="220.8"/>
+ <val o="33da6" v="220.6"/>
+ <val o="34bb6" v="219"/>
+ <val o="359de" v="220.3"/>
+ <val o="367d6" v="219.3"/>
+ <val o="375e6" v="180"/>
+ <val o="3840e" v="180"/>
+ <val o="3921e" v="180"/>
+ <val o="3a016" v="180"/>
+ <val o="3ae27" v="220.9"/>
+ <val o="3bc36" v="220.1"/>
+ <val o="3ca47" v="180"/>
+ <val o="3d856" v="221.4"/>
+ <val o="3e667" v="220.2"/>
+ <val o="3f481" v="217.6"/>
+ <val o="40285" v="218.4"/>
+ <val o="41095" v="218.1"/>
+ <val o="41ea5" v="218.7"/>
+ <val o="42cb5" v="219.9"/>
+ <val o="43ac5" v="218.7"/>
+ <val o="448d5" v="180"/>
+ <val o="456e6" v="220.7"/>
+ <val o="464f5" v="222.7"/>
+ <val o="480ff" v="180"/>
+ <val o="48f0e" v="180"/>
+ <val o="49d1d" v="180"/>
+ <val o="4ab46" v="180"/>
+ <val o="4b955" v="180"/>
+ <val o="4c769" v="180"/>
+ <val o="4d577" v="180"/>
+ <val o="4e387" v="180"/>
+ <val o="4f196" v="180"/>
+ <val o="4ffa6" v="180"/>
+ <val o="50dd0" v="180"/>
+ <val o="51bc6" v="180"/>
+ <val o="529d6" v="180"/>
+ <val o="537e7" v="220.5"/>
+ <val o="54600" v="218.9"/>
+ <val o="55406" v="219.3"/>
+ <val o="56215" v="219.6"/>
+ <val o="57026" v="219.3"/>
+ <val o="57e36" v="219.7"/>
+ <val o="58c46" v="220.4"/>
+ <val o="59a70" v="220.5"/>
+ <val o="5a867" v="221.8"/>
+ <val o="5b676" v="180"/>
+ <val o="5c487" v="180"/>
+ <val o="5d296" v="180"/>
+ <val o="5e0a9" v="222.5"/>
+ <val o="5eeb8" v="224.5"/>
+ <val o="5fcc6" v="223.6"/>
+ <val o="60ad7" v="180"/>
+ <val o="618e7" v="180"/>
+ <val o="626f7" v="180"/>
+ <val o="63507" v="180"/>
+ <val o="64317" v="180"/>
+ <val o="65127" v="222.3"/>
+ <val o="65f37" v="222.6"/>
+ <val o="66d46" v="220.8"/>
+ <val o="67b57" v="220.8"/>
+ <val o="68967" v="220.2"/>
+ <val o="69782" v="220.2"/>
+ <val o="6a586" v="219.3"/>
+ <val o="6b395" v="219.8"/>
+ <val o="6c1a6" v="219"/>
+ <val o="6cfb5" v="218.7"/>
+ <val o="6ddc6" v="220.7"/>
+ <val o="6ebd6" v="180"/>
+ <val o="6f9e6" v="221.8"/>
+ <val o="707f6" v="222.8"/>
+ <val o="71607" v="180"/>
+ <val o="72417" v="180"/>
+ <val o="73227" v="180"/>
+ <val o="74037" v="223.8"/>
+ <val o="74e47" v="223.4"/>
+ <val o="75c57" v="180"/>
+ <val o="76a63" v="180"/>
+ <val o="77873" v="180"/>
+ <val o="78680" v="180"/>
+ <val o="7948f" v="180"/>
+ <val o="7a29f" v="180"/>
+ <val o="7b0af" v="222.1"/>
+ <val o="7bebf" v="221"/>
+ <val o="7cccf" v="219.5"/>
+ <val o="7dadf" v="219.9"/>
+ <val o="7e8fa" v="220.8"/>
+ <val o="7f70a" v="220.8"/>
+ <val o="8051a" v="217.9"/>
+ <val o="8132a" v="219"/>
+ <val o="8213a" v="218.6"/>
+ <val o="82f4a" v="219.4"/>
+ <val o="83d5a" v="219.7"/>
+ <val o="84b6a" v="180"/>
+ <val o="8597a" v="180"/>
+ <val o="8678b" v="180"/>
+ <val o="8759b" v="180"/>
+ <val o="883ac" v="223.1"/>
+ <val o="891bb" v="222"/>
+ <val o="89fca" v="224.2"/>
+ <val o="8adda" v="180"/>
+ <val o="8bbeb" v="180"/>
+ <val o="8c9fc" v="180"/>
+ <val o="8d80b" v="180"/>
+ <val o="8e61a" v="180"/>
+ <val o="8f42a" v="180"/>
+ <val o="9023a" v="180"/>
+ <val o="9104a" v="220.4"/>
+ <val o="91e5a" v="180"/>
+ <val o="92c6a" v="219.6"/>
+ <val o="93a84" v="219.2"/>
+ <val o="94885" v="219"/>
+ <val o="95694" v="218.5"/>
+ <val o="964a5" v="219.3"/>
+ <val o="972b4" v="219.4"/>
+ <val o="980c5" v="221"/>
+ <val o="98ed4" v="220.7"/>
+ <val o="99ce5" v="180"/>
+ <val o="9aaf5" v="180"/>
+ <val o="9b906" v="225.2"/>
+ <val o="9c716" v="225"/>
+ <val o="9d526" v="222.6"/>
+ <val o="9e336" v="223.6"/>
+ <val o="9f145" v="224.1"/>
+ <val o="9ff56" v="223.2"/>
+ <val o="a0d65" v="180"/>
+ <val o="a1b77" v="195.9"/>
+ <val o="a2986" v="190"/>
+ <val o="a3795" v="122.3"/>
+ <val o="a45a7" v="354.6"/>
+ <val o="a53b6" v="333.2"/>
+ <val o="a61c7" v="323.3"/>
+ <val o="a6fd6" v="278.1"/>
+ <val o="a7e00" v="286.2"/>
+ <val o="a8c00" v="292.3"/>
+ <val o="a9a05" v="21.4"/>
+ <val o="aa815" v="273.7"/>
+ <val o="ab625" v="272.9"/>
+ <val o="ac435" v="285.4"/>
+ <val o="ad245" v="28.5"/>
+ <val o="ae055" v="68.4"/>
+ <val o="aee65" v="147.1"/>
+ <val o="afc75" v="95.7"/>
+ <val o="b0a85" v="89.6"/>
+ <val o="b26a6" v="88.3"/>
+ <val o="b34b6" v="92.4"/>
+ <val o="b42c6" v="149.7"/>
+ <val o="b50d6" v="148.7"/>
+ <val o="b5ee7" v="127.7"/>
+ <val o="b6cf6" v="198.2"/>
+ <val o="b7b07" v="187.2"/>
+ <val o="b8917" v="182.1"/>
+ <val o="b9728" v="195.8"/>
+ <val o="ba537" v="203.8"/>
+ <val o="bb347" v="124.5"/>
+ <val o="bc157" v="159.2"/>
+ <val o="bcf67" v="230.6"/>
+ <val o="bdd81" v="79.8"/>
+ <val o="beb86" v="51.3"/>
+ <val o="bf995" v="22.5"/>
+ <val o="c07a6" v="323.7"/>
+ <val o="c15b5" v="341.6"/>
+ <val o="c23c6" v="46.4"/>
+ <val o="c31d5" v="71.9"/>
+ <val o="c3fe6" v="71.9"/>
+ <val o="c4df5" v="63.4"/>
+ <val o="c5c06" v="76.4"/>
+ <val o="c6a16" v="58.4"/>
+ <val o="c7826" v="92"/>
+ <val o="c8636" v="79.6"/>
+ <val o="c9446" v="63.1"/>
+ <val o="ca256" v="51.3"/>
+ <val o="cb066" v="81.7"/>
+ <val o="cbe76" v="205.3"/>
+ <val o="ccc87" v="96.1"/>
+ <val o="cda96" v="95.7"/>
+ <val o="ce8a8" v="96.7"/>
+ <val o="cf6b7" v="92.8"/>
+ <val o="d04c8" v="91.4"/>
+ <val o="d12d7" v="86.1"/>
+ <val o="d20e7" v="270"/>
+ <val o="d2f02" v="270.4"/>
+ <val o="d3d05" v="296.7"/>
+ <val o="d4b15" v="306.8"/>
+ <val o="d5926" v="331.7"/>
+ <val o="d6735" v="13.7"/>
+ <val o="d7546" v="46.4"/>
+ <val o="d8355" v="262.1"/>
+ <val o="d9166" v="166.2"/>
+ <val o="d9f75" v="143.6"/>
+ <val o="dad87" v="127.2"/>
+ <val o="dbb97" v="132.7"/>
+ <val o="dc9a8" v="128.3"/>
+ <val o="dd7b7" v="155.6"/>
+ <val o="de5c6" v="170.8"/>
+ <val o="df3d7" v="176.1"/>
+ <val o="e01d7" v="176.8"/>
+ <val o="e0fe5" v="168.8"/>
+ <val o="e1df5" v="172.2"/>
+ <val o="e2c04" v="185.2"/>
+ <val o="e3a14" v="196.3"/>
+ <val o="e4824" v="178.5"/>
+ <val o="e5634" v="193.7"/>
+ <val o="e6444" v="176.2"/>
+ <val o="e7255" v="196.7"/>
+ <val o="e806f" v="202.2"/>
+ <val o="e8e7f" v="99.9"/>
+ <val o="e9c8e" v="130.2"/>
+ <val o="eaa9f" v="132.9"/>
+ <val o="eb8ae" v="121.7"/>
+ <val o="ec6bf" v="100.9"/>
+ <val o="ed4ce" v="192.9"/>
+ <val o="ee2df" v="153.7"/>
+ <val o="ef0ef" v="170.4"/>
+ <val o="eff01" v="155.2"/>
+ <val o="f0d10" v="167.3"/>
+ <val o="f1b20" v="165.5"/>
+ <val o="f2930" v="184.3"/>
+ <val o="f3740" v="159.2"/>
+ <val o="f4551" v="163.4"/>
+ <val o="f5361" v="163.5"/>
+ <val o="f6172" v="160.8"/>
+ <val o="f6f80" v="165"/>
+ <val o="f7d91" v="156.4"/>
+ <val o="f8ba1" v="163.8"/>
+ <val o="f99b1" v="162.9"/>
+ <val o="fa7c0" v="154.9"/>
+ <val o="fb5d1" v="157.1"/>
+ <val o="fc3e0" v="197.2"/>
+ <val o="fd1fb" v="203.8"/>
+ <val o="fe00b" v="212.5"/>
+ <val o="fee1c" v="185.4"/>
+ <val o="ffc2c" v="187.2"/>
+ <val o="100a3b" v="162"/>
+ <val o="10184c" v="149.3"/>
+ <val o="10265b" v="136.8"/>
+ <val o="10346c" v="145.9"/>
+ <val o="10427b" v="164.1"/>
+ <val o="10508d" v="158.2"/>
+ <val o="105e9d" v="163"/>
+ <val o="106cad" v="161.6"/>
+ <val o="107abd" v="168.9"/>
+ <val o="1088cd" v="168.5"/>
+ <val o="1096de" v="165.1"/>
+ <val o="10a4ed" v="168.2"/>
+ <val o="10b2fe" v="163.9"/>
+ <val o="10c10d" v="147.5"/>
+ <val o="10cf1e" v="163"/>
+ <val o="10dd2e" v="166.3"/>
+ <val o="10eb66" v="177.4"/>
+ <val o="10f94e" v="179.7"/>
+ <val o="11075e" v="161"/>
+ <val o="11156d" v="174.4"/>
+ <val o="112388" v="203.6"/>
+ <val o="113187" v="158.3"/>
+ <val o="113fb0" v="172.9"/>
+ <val o="114da6" v="172.7"/>
+ <val o="115bb6" v="168.4"/>
+ <val o="1169c6" v="138"/>
+ <val o="1177d6" v="135.8"/>
+ <val o="1185e8" v="157.8"/>
+ <val o="1193f7" v="160.6"/>
+ <val o="11a208" v="175.7"/>
+ <val o="11b017" v="184.1"/>
+ <val o="11be2f" v="188.6"/>
+ <val o="11cc37" v="170"/>
+ <val o="11da47" v="173.6"/>
+ <val o="11e857" v="167"/>
+ <val o="11f667" v="172.6"/>
+ <val o="120578" v="164.6"/>
+ <val o="121386" v="166.8"/>
+ <val o="122196" v="151.9"/>
+ <val o="122fa6" v="158.6"/>
+ <val o="123db5" v="170.8"/>
+ <val o="124bc5" v="185.4"/>
+ <val o="1259d5" v="160.1"/>
+ <val o="1267e4" v="188.6"/>
+ <val o="127600" v="207.7"/>
+ <val o="128305" v="214.6"/>
+ <val o="129115" v="213.7"/>
+ <val o="129f25" v="218.4"/>
+ <val o="12ad35" v="210.5"/>
+ <val o="12bb45" v="178.8"/>
+ <val o="12c954" v="162.6"/>
+ <val o="12d766" v="156.4"/>
+ <val o="12e575" v="153.5"/>
+ <val o="12f386" v="143.9"/>
+ <val o="130196" v="160.8"/>
+ <val o="130fa6" v="153.4"/>
+ <val o="131db7" v="163.6"/>
+ <val o="132bc5" v="168.2"/>
+ <val o="1339d4" v="169.3"/>
+ <val o="1347e5" v="139.1"/>
+ <val o="1355f4" v="142.4"/>
+ <val o="136404" v="122.1"/>
+ <val o="137214" v="125.5"/>
+ <val o="138024" v="110.7"/>
+ <val o="138e33" v="110.6"/>
+ <val o="139c44" v="190.2"/>
+ <val o="13aa54" v="99.6"/>
+ <val o="13b865" v="209.4"/>
+ <val o="13c67e" v="76.2"/>
+ <val o="13d48e" v="61.5"/>
+ <val o="13e29e" v="44.5"/>
+ <val o="13f0ae" v="44.2"/>
+ <val o="13febf" v="60.4"/>
+ <val o="140ccf" v="64.6"/>
+ <val o="141adf" v="67.3"/>
+ <val o="1428ef" v="341.2"/>
+ <val o="1436ff" v="115.8"/>
+ <val o="14450f" v="117.3"/>
+ <val o="14531f" v="180"/>
+ <val o="146130" v="252.4"/>
+ <val o="146f40" v="261.8"/>
+ <val o="147d44" v="313.3"/>
+ <val o="148b57" v="311.3"/>
+ <val o="149965" v="292"/>
+ <val o="14a775" v="57.6"/>
+ <val o="14b584" v="151.6"/>
+ <val o="14c397" v="92.7"/>
+ <val o="14d1a4" v="93.4"/>
+ <val o="14dfb6" v="100.3"/>
+ <val o="14edc5" v="97.4"/>
+ <val o="14fbd5" v="184"/>
+ <val o="1509e5" v="289.1"/>
+ <val o="1517ff" v="274.2"/>
+ <val o="152605" v="39.8"/>
+ <val o="153415" v="6.5"/>
+ <val o="154225" v="355.9"/>
+ <val o="155035" v="19.4"/>
+ <val o="155e45" v="44.2"/>
+ <val o="156c55" v="61.4"/>
+ <val o="157a65" v="55.5"/>
+ <val o="158875" v="60.2"/>
+ <val o="159686" v="71.7"/>
+ <val o="15a495" v="66.3"/>
+ <val o="15b2a6" v="61.5"/>
+ <val o="15c0b6" v="38.5"/>
+ <val o="15cec6" v="17.3"/>
+ <val o="15dcd5" v="35.6"/>
+ <val o="15eae6" v="44.9"/>
+ <val o="15f8f5" v="71.4"/>
+ <val o="160706" v="166.1"/>
+ <val o="161517" v="125"/>
+ <val o="162326" v="176"/>
+ <val o="163137" v="195.3"/>
+ <val o="163f46" v="99.1"/>
+ <val o="164d57" v="90"/>
+ <val o="165b67" v="273.9"/>
+ <val o="166982" v="344.7"/>
+ <val o="167786" v="307.2"/>
+ <val o="168596" v="271.8"/>
+ <val o="1693a6" v="278.8"/>
+ <val o="16a1b5" v="291.5"/>
+ <val o="16afc6" v="52.9"/>
+ <val o="16bdd5" v="76.6"/>
+ <val o="16cbe6" v="87.6"/>
+ <val o="16d9f6" v="170.1"/>
+ <val o="16e807" v="174.2"/>
+ <val o="16f616" v="175.6"/>
+ <val o="170429" v="186.7"/>
+ <val o="171236" v="183.2"/>
+ <val o="172047" v="181.7"/>
+ <val o="172e57" v="173.6"/>
+ <val o="173c67" v="170.7"/>
+ <val o="174a77" v="165.4"/>
+ <val o="175887" v="163.8"/>
+ <val o="176694" v="161.7"/>
+ <val o="1774a3" v="165.4"/>
+ <val o="1782b3" v="170.9"/>
+ <val o="1790c5" v="173.5"/>
+ <val o="179ed4" v="187.9"/>
+ <val o="17ace4" v="201.8"/>
+ <val o="17bafd" v="205.9"/>
+ <val o="17c90f" v="204.6"/>
+ <val o="17d71e" v="204.1"/>
+ <val o="17e52f" v="208.2"/>
+ <val o="17f33f" v="204.4"/>
+ <val o="18014f" v="193.5"/>
+ <val o="180f5f" v="186.4"/>
+ <val o="181d6e" v="192.4"/>
+ <val o="182b7f" v="194.3"/>
+ <val o="18398f" v="184.4"/>
+ <val o="1847a1" v="184.1"/>
+ <val o="1855af" v="185.6"/>
+ <val o="1863c0" v="194.9"/>
+ <val o="1871cf" v="192.1"/>
+ <val o="187fe0" v="192.1"/>
+ <val o="188def" v="190.6"/>
+ <val o="189c00" v="185.4"/>
+ <val o="18b80d" v="170.9"/>
+ <val o="18c61c" v="187.4"/>
+ <val o="18d42c" v="191.1"/>
+ <val o="18e23b" v="191.1"/>
+ <val o="18f04b" v="197.1"/>
+ <val o="18fe5e" v="195.9"/>
+ <val o="190c76" v="189.8"/>
+ <val o="191a86" v="201.9"/>
+ <val o="192896" v="202.2"/>
+ <val o="1936a6" v="204.4"/>
+ <val o="1944b7" v="196.3"/>
+ <val o="1952c6" v="182.6"/>
+ <val o="1960d7" v="162.6"/>
+ <val o="196ee6" v="187.2"/>
+ <val o="197cf8" v="187.3"/>
+ <val o="198b0f" v="179.7"/>
+ <val o="19991f" v="181.7"/>
+ <val o="19b541" v="188.3"/>
+ <val o="19c34d" v="186.2"/>
+ <val o="19d15e" v="183.5"/>
+ <val o="19df80" v="182.2"/>
+ <val o="19ed90" v="176.5"/>
+ <val o="19eebe" v="175.6"/>
+ <val o="19fb8e" v="178.5"/>
+ <val o="1a09a0" v="223.8"/>
+ <val o="1a17ae" v="228.1"/>
+ <val o="1a25be" v="229.7"/>
+ <val o="1a33cd" v="216.1"/>
+ <val o="1a41dd" v="226.4"/>
+ <val o="1a4fed" v="249.6"/>
+ <val o="1a5e08" v="245.8"/>
+ <val o="1a6c05" v="250.1"/>
+ <val o="1a7a15" v="251.1"/>
+ <val o="1a8826" v="252.5"/>
+ <val o="1a9637" v="259.4"/>
+ <val o="1aa445" v="254.8"/>
+ <val o="1ab255" v="218.7"/>
+ <val o="1ac065" v="228.3"/>
+ <val o="1ace75" v="227.3"/>
+ <val o="1adc87" v="214.2"/>
+ <val o="1aea96" v="218.7"/>
+ <val o="1af8a7" v="217"/>
+ <val o="1b06b7" v="231.7"/>
+ <val o="1b14c6" v="230.6"/>
+ <val o="1c7460" v="52"/>
+ <val o="1c8270" v="340.3"/>
+ <val o="1c907e" v="18.5"/>
+ <val o="1c9e8f" v="357.5"/>
+ <val o="1caca2" v="344.7"/>
+ <val o="1cbab1" v="338.4"/>
+ <val o="1cc8c1" v="28.4"/>
+ <val o="1cd6d0" v="21.8"/>
+ <val o="1ce4de" v="10.4"/>
+ <val o="1cf2f0" v="343.9"/>
+ <val o="1d0109" v="342.8"/>
+ <val o="1d0f06" v="358.2"/>
+ <val o="1d1d15" v="353.5"/>
+ <val o="1d2b25" v="353.4"/>
+ <val o="1d3935" v="1.4"/>
+ <val o="1d4745" v="6.4"/>
+ <val o="1d5555" v="10.5"/>
+ <val o="1d6366" v="350.7"/>
+ <val o="1d7175" v="350.8"/>
+ <val o="1d7f86" v="357.6"/>
+ <val o="1d8d95" v="181.1"/>
+ <val o="1d9ba6" v="184.8"/>
+ <val o="1da9b6" v="192.6"/>
+ <val o="1db7c7" v="193.1"/>
+ <val o="1dc5d5" v="194.7"/>
+ <val o="1dd3e6" v="190.8"/>
+ <val o="1de1f5" v="195"/>
+ <val o="1df006" v="195.8"/>
+ <val o="1dfe16" v="195.3"/>
+ <val o="1e0c26" v="198.1"/>
+ <val o="1e1a36" v="198.4"/>
+ <val o="1e2847" v="199.5"/>
+ <val o="1e3659" v="200.2"/>
+ <val o="1e4467" v="202.3"/>
+ <val o="1e5281" v="200.7"/>
+ <val o="1e6086" v="203.5"/>
+ <val o="1e6e96" v="204.6"/>
+ <val o="1e7ca6" v="188.4"/>
+ <val o="1e8ab5" v="193.9"/>
+ <val o="1e98c6" v="184.4"/>
+ <val o="1ea6d5" v="190.5"/>
+ <val o="1eb4e6" v="188.9"/>
+ <val o="1ec2f6" v="192.2"/>
+ <val o="1ed106" v="185.6"/>
+ <val o="1edf16" v="186.6"/>
+ <val o="1eed26" v="182.8"/>
+ <val o="1efb36" v="187.6"/>
+ <val o="1f0946" v="186.9"/>
+ <val o="1f1756" v="168.2"/>
+ <val o="1f2566" v="164.2"/>
+ <val o="1f3376" v="154.3"/>
+ <val o="1f4187" v="134.3"/>
+ <val o="1f4f96" v="154.2"/>
+ <val o="1f5da7" v="182.2"/>
+ <val o="1f6bb6" v="188.3"/>
+ <val o="1f79c7" v="176"/>
+ <val o="1f87d6" v="206.4"/>
+ <val o="1f95e7" v="216.5"/>
+ <val o="1fa401" v="211.5"/>
+ <val o="1fb204" v="210.8"/>
+ <val o="1fc016" v="211.2"/>
+ <val o="1fce25" v="192.4"/>
+ <val o="1fdc35" v="185.1"/>
+ <val o="1fea45" v="176.6"/>
+ <val o="1ff855" v="171.5"/>
+ <val o="200665" v="129.5"/>
+ <val o="201475" v="173.4"/>
+ <val o="202286" v="157.2"/>
+ <val o="203095" v="161.2"/>
+ <val o="203ea5" v="163.5"/>
+ <val o="204cb6" v="176.8"/>
+ <val o="205ac6" v="166.8"/>
+ <val o="2068d6" v="161.5"/>
+ <val o="2076e6" v="159.3"/>
+ <val o="2084f6" v="177.6"/>
+ <val o="209306" v="183.2"/>
+ <val o="20a116" v="185.4"/>
+ <val o="20af26" v="182.6"/>
+ <val o="20bd37" v="189.3"/>
+ <val o="20cb46" v="173.2"/>
+ <val o="20d957" v="179.4"/>
+ <val o="20e767" v="193.5"/>
+ <val o="20f581" v="202.6"/>
+ <val o="210386" v="197.8"/>
+ <val o="211194" v="186.9"/>
+ <val o="211fa5" v="188.3"/>
+ <val o="212db5" v="178.7"/>
+ <val o="213bc5" v="160.2"/>
+ <val o="2149d6" v="168.3"/>
+ <val o="2157e5" v="184"/>
+ <val o="2165f6" v="191.1"/>
+ <val o="217406" v="177.3"/>
+ <val o="218217" v="182.9"/>
+ <val o="219026" v="185.4"/>
+ <val o="219e39" v="176.3"/>
+ <val o="21ac46" v="170.1"/>
+ <val o="21ba57" v="169.3"/>
+ <val o="21c867" v="159.8"/>
+ <val o="21d677" v="190.9"/>
+ <val o="21e487" v="173.9"/>
+ <val o="21f296" v="175.5"/>
+ <val o="2200a6" v="187.5"/>
+ <val o="220eb7" v="188.5"/>
+ <val o="221cc6" v="160"/>
+ <val o="222ad7" v="175.5"/>
+ <val o="2238e7" v="192.4"/>
+ <val o="224701" v="200.8"/>
+ <val o="225505" v="116.9"/>
+ <val o="226315" v="166.3"/>
+ <val o="227125" v="162.8"/>
+ <val o="227f35" v="130.4"/>
+ <val o="228d45" v="122"/>
+ <val o="229b54" v="193.5"/>
+ <val o="22a965" v="183.9"/>
+ <val o="22b776" v="180"/>
+ <val o="22c586" v="157.3"/>
+ <val o="22d397" v="142.7"/>
+ <val o="22e1a6" v="145.9"/>
+ <val o="22efb6" v="182.2"/>
+ <val o="22fdc7" v="182.7"/>
+ <val o="230bd7" v="173.3"/>
+ <val o="2319e6" v="188.6"/>
+ <val o="2327f6" v="179.4"/>
+ <val o="23361b" v="169.8"/>
+ <val o="234416" v="164.3"/>
+ <val o="235226" v="170.2"/>
+ <val o="236037" v="178.8"/>
+ <val o="236e46" v="158"/>
+ <val o="237c57" v="161.6"/>
+ <val o="238a66" v="175.8"/>
+ <val o="239881" v="169.9"/>
+ <val o="23a685" v="185.3"/>
+ <val o="23b495" v="191.6"/>
+ <val o="23c2a4" v="176.8"/>
+ <val o="23d0b5" v="167.7"/>
+ <val o="23dec4" v="154.1"/>
+ <val o="23ecd5" v="167"/>
+ <val o="23fae4" v="180"/>
+ <val o="2408f6" v="166.9"/>
+ <val o="241706" v="146.9"/>
+ <val o="242518" v="155.4"/>
+ <val o="243325" v="157.6"/>
+ <val o="244137" v="189.9"/>
+ <val o="244f46" v="187.4"/>
+ <val o="246b66" v="186.9"/>
+ <val o="247976" v="179.5"/>
+ <val o="248786" v="139.6"/>
+ <val o="24957e" v="161.8"/>
+ <val o="24a38f" v="172"/>
+ <val o="24b19c" v="189.5"/>
+ <val o="24bfac" v="187.3"/>
+ <val o="24cdbc" v="188.2"/>
+ <val o="24dbcd" v="186.1"/>
+ <val o="24e9e5" v="198.1"/>
+ <val o="24f808" v="193.3"/>
+ <val o="250616" v="195.6"/>
+ <val o="251426" v="198.3"/>
+ <val o="252236" v="180.5"/>
+ <val o="253047" v="180"/>
+ <val o="253e56" v="161.6"/>
+ <val o="254c67" v="165.8"/>
+ <val o="255a76" v="165.6"/>
+ <val o="256887" v="160.4"/>
+ <val o="257697" v="147.2"/>
+ <val o="2584a8" v="196.9"/>
+ <val o="2592b6" v="195.7"/>
+ <val o="25a0c7" v="186.9"/>
+ <val o="25aed7" v="178.3"/>
+ <val o="25bce7" v="177.6"/>
+ <val o="25caf8" v="172"/>
+ <val o="25d907" v="156.5"/>
+ <val o="25e718" v="154.3"/>
+ <val o="25f527" v="157"/>
+ <val o="260338" v="179.5"/>
+ <val o="261149" v="166"/>
+ <val o="261f59" v="172.3"/>
+ <val o="262d68" v="196.4"/>
+ <val o="263b83" v="179.5"/>
+ <val o="264986" v="195.7"/>
+ <val o="265795" v="202.7"/>
+ <val o="2665a6" v="209.9"/>
+ <val o="2673b5" v="204.1"/>
+ <val o="2681c6" v="199.9"/>
+ <val o="268fd5" v="186.3"/>
+ <val o="269de6" v="175.6"/>
+ <val o="26abf6" v="170.1"/>
+ <val o="26ba06" v="159.2"/>
+ <val o="26c817" v="156.4"/>
+ <val o="26d62b" v="137.7"/>
+ <val o="26e436" v="146"/>
+ <val o="26f247" v="139.6"/>
+ <val o="270057" v="143.2"/>
+ <val o="270e67" v="137.7"/>
+ <val o="271c77" v="177.9"/>
+ <val o="272a87" v="186.9"/>
+ <val o="273897" v="184.5"/>
+ <val o="2746a8" v="188.2"/>
+ <val o="2754b9" v="191.1"/>
+ <val o="2762c7" v="146.7"/>
+ <val o="2770d8" v="161.4"/>
+ <val o="277ee7" v="188.7"/>
+ </par>
+ <par memind="10695000" h="3dc1a8de">
+ <val o="0" v="50"/>
+ <val o="e08" v="50"/>
+ <val o="1c32" v="50"/>
+ <val o="2a3c" v="50"/>
+ <val o="3835" v="49.9"/>
+ <val o="4645" v="49.9"/>
+ <val o="5455" v="50"/>
+ <val o="6265" v="50"/>
+ <val o="7075" v="50"/>
+ <val o="7e85" v="50"/>
+ <val o="8c96" v="50"/>
+ <val o="9aa5" v="50.1"/>
+ <val o="a8b6" v="50"/>
+ <val o="b6c5" v="50"/>
+ <val o="c4d7" v="50"/>
+ <val o="d30b" v="50"/>
+ <val o="e0f6" v="50"/>
+ <val o="ef06" v="50"/>
+ <val o="fd17" v="50"/>
+ <val o="10b27" v="50"/>
+ <val o="11937" v="50"/>
+ <val o="12746" v="50"/>
+ <val o="13556" v="50"/>
+ <val o="14366" v="50"/>
+ <val o="15181" v="50"/>
+ <val o="15f85" v="50"/>
+ <val o="16d95" v="50"/>
+ <val o="17ba4" v="50"/>
+ <val o="189b5" v="50"/>
+ <val o="197c4" v="50.1"/>
+ <val o="1a5d5" v="50"/>
+ <val o="1b3e6" v="50"/>
+ <val o="1c1f6" v="50.1"/>
+ <val o="1d005" v="50"/>
+ <val o="1de15" v="50"/>
+ <val o="1ec25" v="50"/>
+ <val o="1fa36" v="50"/>
+ <val o="20845" v="50"/>
+ <val o="21656" v="50"/>
+ <val o="22465" v="50"/>
+ <val o="23276" v="50"/>
+ <val o="24086" v="50"/>
+ <val o="24e99" v="50"/>
+ <val o="25ca7" v="50"/>
+ <val o="26ab7" v="50"/>
+ <val o="278c6" v="50"/>
+ <val o="286d6" v="50.1"/>
+ <val o="294e6" v="50"/>
+ <val o="2a301" v="50"/>
+ <val o="2b105" v="50"/>
+ <val o="2bf15" v="50"/>
+ <val o="2cd25" v="50"/>
+ <val o="2db35" v="50"/>
+ <val o="2e946" v="50"/>
+ <val o="2f755" v="50"/>
+ <val o="30566" v="50"/>
+ <val o="31375" v="50"/>
+ <val o="3219e" v="50"/>
+ <val o="32f96" v="50"/>
+ <val o="33da6" v="50"/>
+ <val o="34bb6" v="50"/>
+ <val o="359de" v="50"/>
+ <val o="367d6" v="50"/>
+ <val o="375e6" v="50"/>
+ <val o="3840e" v="50"/>
+ <val o="3921e" v="50"/>
+ <val o="3a016" v="50"/>
+ <val o="3ae27" v="50"/>
+ <val o="3bc36" v="50"/>
+ <val o="3ca47" v="50"/>
+ <val o="3d856" v="50"/>
+ <val o="3e667" v="50"/>
+ <val o="3f481" v="50"/>
+ <val o="40285" v="50"/>
+ <val o="41095" v="50"/>
+ <val o="41ea5" v="50"/>
+ <val o="42cb5" v="50"/>
+ <val o="43ac5" v="49.9"/>
+ <val o="448d5" v="50"/>
+ <val o="456e6" v="49.9"/>
+ <val o="464f5" v="50"/>
+ <val o="480ff" v="49.9"/>
+ <val o="48f0e" v="50"/>
+ <val o="49d1d" v="50"/>
+ <val o="4ab46" v="50"/>
+ <val o="4b955" v="50"/>
+ <val o="4c769" v="50"/>
+ <val o="4d577" v="50"/>
+ <val o="4e387" v="50"/>
+ <val o="4f196" v="50"/>
+ <val o="4ffa6" v="50"/>
+ <val o="50dd0" v="50"/>
+ <val o="51bc6" v="50"/>
+ <val o="529d6" v="50"/>
+ <val o="537e7" v="50"/>
+ <val o="54600" v="50"/>
+ <val o="55406" v="50"/>
+ <val o="56215" v="50"/>
+ <val o="57026" v="50"/>
+ <val o="57e36" v="50"/>
+ <val o="58c46" v="50"/>
+ <val o="59a70" v="50"/>
+ <val o="5a867" v="50"/>
+ <val o="5b676" v="49.9"/>
+ <val o="5c487" v="50"/>
+ <val o="5d296" v="50"/>
+ <val o="5e0a9" v="50"/>
+ <val o="5eeb8" v="50"/>
+ <val o="5fcc6" v="50"/>
+ <val o="60ad7" v="50"/>
+ <val o="618e7" v="50"/>
+ <val o="626f7" v="50"/>
+ <val o="63507" v="50"/>
+ <val o="64317" v="50"/>
+ <val o="65127" v="50.1"/>
+ <val o="65f37" v="50"/>
+ <val o="66d46" v="50"/>
+ <val o="67b57" v="50"/>
+ <val o="68967" v="50"/>
+ <val o="69782" v="50.1"/>
+ <val o="6a586" v="50"/>
+ <val o="6b395" v="50"/>
+ <val o="6c1a6" v="49.9"/>
+ <val o="6cfb5" v="50"/>
+ <val o="6ddc6" v="50"/>
+ <val o="6ebd6" v="50"/>
+ <val o="6f9e6" v="50"/>
+ <val o="707f6" v="50"/>
+ <val o="71607" v="50"/>
+ <val o="72417" v="50"/>
+ <val o="73227" v="50"/>
+ <val o="74037" v="50"/>
+ <val o="74e47" v="50"/>
+ <val o="75c57" v="50"/>
+ <val o="76a63" v="50"/>
+ <val o="77873" v="50"/>
+ <val o="78680" v="50"/>
+ <val o="7948f" v="50"/>
+ <val o="7a29f" v="50"/>
+ <val o="7b0af" v="50.1"/>
+ <val o="7bebf" v="50"/>
+ <val o="7cccf" v="50"/>
+ <val o="7dadf" v="49.9"/>
+ <val o="7e8fa" v="50"/>
+ <val o="7f70a" v="50"/>
+ <val o="8051a" v="50"/>
+ <val o="8132a" v="50"/>
+ <val o="8213a" v="50"/>
+ <val o="82f4a" v="50"/>
+ <val o="83d5a" v="50"/>
+ <val o="84b6a" v="50"/>
+ <val o="8597a" v="50"/>
+ <val o="8678b" v="50"/>
+ <val o="8759b" v="50"/>
+ <val o="883ac" v="50"/>
+ <val o="891bb" v="50"/>
+ <val o="89fca" v="50"/>
+ <val o="8adda" v="50"/>
+ <val o="8bbeb" v="50"/>
+ <val o="8c9fc" v="50"/>
+ <val o="8d80b" v="50"/>
+ <val o="8e61a" v="50.1"/>
+ <val o="8f42a" v="50"/>
+ <val o="9023a" v="50.1"/>
+ <val o="9104a" v="49.9"/>
+ <val o="91e5a" v="50"/>
+ <val o="92c6a" v="50"/>
+ <val o="93a84" v="49.9"/>
+ <val o="94885" v="50"/>
+ <val o="95694" v="50"/>
+ <val o="964a5" v="50"/>
+ <val o="972b4" v="49.9"/>
+ <val o="980c5" v="50"/>
+ <val o="98ed4" v="50"/>
+ <val o="99ce5" v="49.9"/>
+ <val o="9aaf5" v="50.1"/>
+ <val o="9b906" v="50.1"/>
+ <val o="9c716" v="50"/>
+ <val o="9d526" v="50"/>
+ <val o="9e336" v="50"/>
+ <val o="9f145" v="50"/>
+ <val o="9ff56" v="50"/>
+ <val o="a0d65" v="50"/>
+ <val o="a1b77" v="49.9"/>
+ <val o="a2986" v="50"/>
+ <val o="a3795" v="50"/>
+ <val o="a45a7" v="50"/>
+ <val o="a53b6" v="50"/>
+ <val o="a61c7" v="50"/>
+ <val o="a6fd6" v="50"/>
+ <val o="a7e00" v="50.1"/>
+ <val o="a8c00" v="49.9"/>
+ <val o="a9a05" v="50"/>
+ <val o="aa815" v="50"/>
+ <val o="ab625" v="50"/>
+ <val o="ac435" v="50"/>
+ <val o="ad245" v="50"/>
+ <val o="ae055" v="50"/>
+ <val o="aee65" v="50"/>
+ <val o="afc75" v="50"/>
+ <val o="b0a85" v="50"/>
+ <val o="b26a6" v="50"/>
+ <val o="b34b6" v="50"/>
+ <val o="b42c6" v="50"/>
+ <val o="b50d6" v="50"/>
+ <val o="b5ee7" v="50"/>
+ <val o="b6cf6" v="50"/>
+ <val o="b7b07" v="50"/>
+ <val o="b8917" v="50"/>
+ <val o="b9728" v="50"/>
+ <val o="ba537" v="50"/>
+ <val o="bb347" v="50"/>
+ <val o="bc157" v="50"/>
+ <val o="bcf67" v="50"/>
+ <val o="bdd81" v="50"/>
+ <val o="beb86" v="50"/>
+ <val o="bf995" v="50"/>
+ <val o="c07a6" v="50"/>
+ <val o="c15b5" v="50"/>
+ <val o="c23c6" v="50"/>
+ <val o="c31d5" v="49.9"/>
+ <val o="c3fe6" v="50"/>
+ <val o="c4df5" v="50"/>
+ <val o="c5c06" v="50"/>
+ <val o="c6a16" v="50"/>
+ <val o="c7826" v="50"/>
+ <val o="c8636" v="50"/>
+ <val o="c9446" v="50"/>
+ <val o="ca256" v="50"/>
+ <val o="cb066" v="50"/>
+ <val o="cbe76" v="50"/>
+ <val o="ccc87" v="50"/>
+ <val o="cda96" v="50"/>
+ <val o="ce8a8" v="50"/>
+ <val o="cf6b7" v="50"/>
+ <val o="d04c8" v="49.9"/>
+ <val o="d12d7" v="50"/>
+ <val o="d20e7" v="50"/>
+ <val o="d2f02" v="50"/>
+ <val o="d3d05" v="50"/>
+ <val o="d4b15" v="50"/>
+ <val o="d5926" v="50"/>
+ <val o="d6735" v="50"/>
+ <val o="d7546" v="50"/>
+ <val o="d8355" v="50"/>
+ <val o="d9166" v="50"/>
+ <val o="d9f75" v="50.1"/>
+ <val o="dad87" v="50"/>
+ <val o="dbb97" v="49.9"/>
+ <val o="dc9a8" v="50"/>
+ <val o="dd7b7" v="50"/>
+ <val o="de5c6" v="50"/>
+ <val o="df3d7" v="50"/>
+ <val o="e01d7" v="50"/>
+ <val o="e0fe5" v="50"/>
+ <val o="e1df5" v="50"/>
+ <val o="e2c04" v="50"/>
+ <val o="e3a14" v="50"/>
+ <val o="e4824" v="50"/>
+ <val o="e5634" v="50"/>
+ <val o="e6444" v="50"/>
+ <val o="e7255" v="50"/>
+ <val o="e806f" v="50"/>
+ <val o="e8e7f" v="50"/>
+ <val o="e9c8e" v="50"/>
+ <val o="eaa9f" v="50"/>
+ <val o="eb8ae" v="50"/>
+ <val o="ec6bf" v="50"/>
+ <val o="ed4ce" v="50"/>
+ <val o="ee2df" v="50"/>
+ <val o="ef0ef" v="50"/>
+ <val o="eff01" v="50.1"/>
+ <val o="f0d10" v="50"/>
+ <val o="f1b20" v="50"/>
+ <val o="f2930" v="50"/>
+ <val o="f3740" v="50"/>
+ <val o="f4551" v="50"/>
+ <val o="f5361" v="50"/>
+ <val o="f6172" v="50"/>
+ <val o="f6f80" v="50"/>
+ <val o="f7d91" v="50"/>
+ <val o="f8ba1" v="50"/>
+ <val o="f99b1" v="50"/>
+ <val o="fa7c0" v="50"/>
+ <val o="fb5d1" v="50"/>
+ <val o="fc3e0" v="50"/>
+ <val o="fd1fb" v="50"/>
+ <val o="fe00b" v="50"/>
+ <val o="fee1c" v="50.1"/>
+ <val o="ffc2c" v="50"/>
+ <val o="100a3b" v="50"/>
+ <val o="10184c" v="50"/>
+ <val o="10265b" v="49.9"/>
+ <val o="10346c" v="50"/>
+ <val o="10427b" v="50"/>
+ <val o="10508d" v="49.9"/>
+ <val o="105e9d" v="50"/>
+ <val o="106cad" v="50"/>
+ <val o="107abd" v="50"/>
+ <val o="1088cd" v="49.9"/>
+ <val o="1096de" v="50"/>
+ <val o="10a4ed" v="50"/>
+ <val o="10b2fe" v="49.9"/>
+ <val o="10c10d" v="50"/>
+ <val o="10cf1e" v="50"/>
+ <val o="10dd2e" v="50"/>
+ <val o="10eb66" v="50"/>
+ <val o="10f94e" v="49.9"/>
+ <val o="11075e" v="50.1"/>
+ <val o="11156d" v="50.1"/>
+ <val o="112388" v="50"/>
+ <val o="113187" v="49.9"/>
+ <val o="113fb0" v="50"/>
+ <val o="114da6" v="49.9"/>
+ <val o="115bb6" v="50"/>
+ <val o="1169c6" v="50"/>
+ <val o="1177d6" v="50"/>
+ <val o="1185e8" v="50"/>
+ <val o="1193f7" v="50"/>
+ <val o="11a208" v="50"/>
+ <val o="11b017" v="50"/>
+ <val o="11be2f" v="50.1"/>
+ <val o="11cc37" v="50"/>
+ <val o="11da47" v="50"/>
+ <val o="11e857" v="50"/>
+ <val o="11f667" v="50"/>
+ <val o="120578" v="50"/>
+ <val o="121386" v="50"/>
+ <val o="122196" v="50"/>
+ <val o="122fa6" v="50"/>
+ <val o="123db5" v="50"/>
+ <val o="124bc5" v="50"/>
+ <val o="1259d5" v="50"/>
+ <val o="1267e4" v="50"/>
+ <val o="127600" v="49.9"/>
+ <val o="128305" v="50"/>
+ <val o="129115" v="50"/>
+ <val o="129f25" v="50"/>
+ <val o="12ad35" v="49.9"/>
+ <val o="12bb45" v="49.9"/>
+ <val o="12c954" v="49.9"/>
+ <val o="12d766" v="49.9"/>
+ <val o="12e575" v="50.1"/>
+ <val o="12f386" v="50.1"/>
+ <val o="130196" v="50"/>
+ <val o="130fa6" v="50.1"/>
+ <val o="131db7" v="49.9"/>
+ <val o="132bc5" v="50"/>
+ <val o="1339d4" v="50"/>
+ <val o="1347e5" v="50"/>
+ <val o="1355f4" v="50"/>
+ <val o="136404" v="50"/>
+ <val o="137214" v="50.1"/>
+ <val o="138024" v="50"/>
+ <val o="138e33" v="50"/>
+ <val o="139c44" v="50"/>
+ <val o="13aa54" v="50"/>
+ <val o="13b865" v="50"/>
+ <val o="13c67e" v="50"/>
+ <val o="13d48e" v="50"/>
+ <val o="13e29e" v="50"/>
+ <val o="13f0ae" v="50"/>
+ <val o="13febf" v="50"/>
+ <val o="140ccf" v="50"/>
+ <val o="141adf" v="50"/>
+ <val o="1428ef" v="50"/>
+ <val o="1436ff" v="49.9"/>
+ <val o="14450f" v="50"/>
+ <val o="14531f" v="50"/>
+ <val o="146130" v="50"/>
+ <val o="146f40" v="50"/>
+ <val o="147d44" v="50"/>
+ <val o="148b57" v="50"/>
+ <val o="149965" v="50"/>
+ <val o="14a775" v="50"/>
+ <val o="14b584" v="50"/>
+ <val o="14c397" v="50"/>
+ <val o="14d1a4" v="50"/>
+ <val o="14dfb6" v="49.9"/>
+ <val o="14edc5" v="50.1"/>
+ <val o="14fbd5" v="50"/>
+ <val o="1509e5" v="50"/>
+ <val o="1517ff" v="50"/>
+ <val o="152605" v="50"/>
+ <val o="153415" v="50"/>
+ <val o="154225" v="50"/>
+ <val o="155035" v="50"/>
+ <val o="155e45" v="50"/>
+ <val o="156c55" v="50"/>
+ <val o="157a65" v="50"/>
+ <val o="158875" v="49.9"/>
+ <val o="159686" v="50"/>
+ <val o="15a495" v="50"/>
+ <val o="15b2a6" v="50"/>
+ <val o="15c0b6" v="50"/>
+ <val o="15cec6" v="50"/>
+ <val o="15dcd5" v="50"/>
+ <val o="15eae6" v="49.9"/>
+ <val o="15f8f5" v="50"/>
+ <val o="160706" v="49.9"/>
+ <val o="161517" v="50"/>
+ <val o="162326" v="49.9"/>
+ <val o="163137" v="50"/>
+ <val o="163f46" v="50"/>
+ <val o="164d57" v="50"/>
+ <val o="165b67" v="50"/>
+ <val o="166982" v="50"/>
+ <val o="167786" v="50"/>
+ <val o="168596" v="50"/>
+ <val o="1693a6" v="50"/>
+ <val o="16a1b5" v="49.9"/>
+ <val o="16afc6" v="50"/>
+ <val o="16bdd5" v="50"/>
+ <val o="16cbe6" v="50"/>
+ <val o="16d9f6" v="50"/>
+ <val o="16e807" v="49.9"/>
+ <val o="16f616" v="50"/>
+ <val o="170429" v="50"/>
+ <val o="171236" v="50"/>
+ <val o="172047" v="50"/>
+ <val o="172e57" v="50"/>
+ <val o="173c67" v="50"/>
+ <val o="174a77" v="50"/>
+ <val o="175887" v="50"/>
+ <val o="176694" v="49.9"/>
+ <val o="1774a3" v="50"/>
+ <val o="1782b3" v="50"/>
+ <val o="1790c5" v="50"/>
+ <val o="179ed4" v="50"/>
+ <val o="17ace4" v="50.1"/>
+ <val o="17bafd" v="50.1"/>
+ <val o="17c90f" v="50"/>
+ <val o="17d71e" v="50"/>
+ <val o="17e52f" v="50"/>
+ <val o="17f33f" v="50"/>
+ <val o="18014f" v="50"/>
+ <val o="180f5f" v="50"/>
+ <val o="181d6e" v="50.1"/>
+ <val o="182b7f" v="50"/>
+ <val o="18398f" v="50"/>
+ <val o="1847a1" v="50"/>
+ <val o="1855af" v="50"/>
+ <val o="1863c0" v="50"/>
+ <val o="1871cf" v="49.9"/>
+ <val o="187fe0" v="50"/>
+ <val o="188def" v="50"/>
+ <val o="189c00" v="50"/>
+ <val o="18b80d" v="50"/>
+ <val o="18c61c" v="49.9"/>
+ <val o="18d42c" v="50"/>
+ <val o="18e23b" v="50"/>
+ <val o="18f04b" v="50"/>
+ <val o="18fe5e" v="50"/>
+ <val o="190c76" v="50"/>
+ <val o="191a86" v="50"/>
+ <val o="192896" v="50"/>
+ <val o="1936a6" v="50"/>
+ <val o="1944b7" v="50"/>
+ <val o="1952c6" v="49.9"/>
+ <val o="1960d7" v="50"/>
+ <val o="196ee6" v="50"/>
+ <val o="197cf8" v="50"/>
+ <val o="198b0f" v="50"/>
+ <val o="19991f" v="50"/>
+ <val o="19b541" v="50"/>
+ <val o="19c34d" v="50"/>
+ <val o="19d15e" v="50"/>
+ <val o="19df80" v="50"/>
+ <val o="19ed90" v="50"/>
+ <val o="19eebe" v="50"/>
+ <val o="19fb8e" v="49.9"/>
+ <val o="1a09a0" v="50"/>
+ <val o="1a17ae" v="49.9"/>
+ <val o="1a25be" v="50"/>
+ <val o="1a33cd" v="50"/>
+ <val o="1a41dd" v="50"/>
+ <val o="1a4fed" v="50"/>
+ <val o="1a5e08" v="50"/>
+ <val o="1a6c05" v="50"/>
+ <val o="1a7a15" v="50.1"/>
+ <val o="1a8826" v="50"/>
+ <val o="1a9637" v="50"/>
+ <val o="1aa445" v="50"/>
+ <val o="1ab255" v="50"/>
+ <val o="1ac065" v="50"/>
+ <val o="1ace75" v="50"/>
+ <val o="1adc87" v="50"/>
+ <val o="1aea96" v="49.9"/>
+ <val o="1af8a7" v="50"/>
+ <val o="1b06b7" v="50"/>
+ <val o="1b14c6" v="50"/>
+ <val o="1c7460" v="50"/>
+ <val o="1c8270" v="50"/>
+ <val o="1c907e" v="50"/>
+ <val o="1c9e8f" v="50"/>
+ <val o="1caca2" v="50"/>
+ <val o="1cbab1" v="50"/>
+ <val o="1cc8c1" v="50"/>
+ <val o="1cd6d0" v="50"/>
+ <val o="1ce4de" v="50"/>
+ <val o="1cf2f0" v="50"/>
+ <val o="1d0109" v="50"/>
+ <val o="1d0f06" v="50"/>
+ <val o="1d1d15" v="50"/>
+ <val o="1d2b25" v="50"/>
+ <val o="1d3935" v="50"/>
+ <val o="1d4745" v="50"/>
+ <val o="1d5555" v="50"/>
+ <val o="1d6366" v="50"/>
+ <val o="1d7175" v="50"/>
+ <val o="1d7f86" v="50"/>
+ <val o="1d8d95" v="50"/>
+ <val o="1d9ba6" v="50"/>
+ <val o="1da9b6" v="50"/>
+ <val o="1db7c7" v="50"/>
+ <val o="1dc5d5" v="49.9"/>
+ <val o="1dd3e6" v="49.9"/>
+ <val o="1de1f5" v="50"/>
+ <val o="1df006" v="50"/>
+ <val o="1dfe16" v="50"/>
+ <val o="1e0c26" v="49.9"/>
+ <val o="1e1a36" v="49.9"/>
+ <val o="1e2847" v="50"/>
+ <val o="1e3659" v="50"/>
+ <val o="1e4467" v="50"/>
+ <val o="1e5281" v="50"/>
+ <val o="1e6086" v="50"/>
+ <val o="1e6e96" v="50"/>
+ <val o="1e7ca6" v="50"/>
+ <val o="1e8ab5" v="50"/>
+ <val o="1e98c6" v="49.9"/>
+ <val o="1ea6d5" v="50"/>
+ <val o="1eb4e6" v="50"/>
+ <val o="1ec2f6" v="50"/>
+ <val o="1ed106" v="50"/>
+ <val o="1edf16" v="50"/>
+ <val o="1eed26" v="49.9"/>
+ <val o="1efb36" v="50"/>
+ <val o="1f0946" v="50"/>
+ <val o="1f1756" v="50"/>
+ <val o="1f2566" v="50"/>
+ <val o="1f3376" v="50"/>
+ <val o="1f4187" v="50"/>
+ <val o="1f4f96" v="50"/>
+ <val o="1f5da7" v="50"/>
+ <val o="1f6bb6" v="50"/>
+ <val o="1f79c7" v="50.1"/>
+ <val o="1f87d6" v="50.1"/>
+ <val o="1f95e7" v="50"/>
+ <val o="1fa401" v="50"/>
+ <val o="1fb204" v="50"/>
+ <val o="1fc016" v="50"/>
+ <val o="1fce25" v="49.9"/>
+ <val o="1fdc35" v="50"/>
+ <val o="1fea45" v="50"/>
+ <val o="1ff855" v="50"/>
+ <val o="200665" v="49.9"/>
+ <val o="201475" v="50"/>
+ <val o="202286" v="49.9"/>
+ <val o="203095" v="49.9"/>
+ <val o="203ea5" v="50"/>
+ <val o="204cb6" v="50"/>
+ <val o="205ac6" v="50"/>
+ <val o="2068d6" v="50"/>
+ <val o="2076e6" v="50"/>
+ <val o="2084f6" v="50"/>
+ <val o="209306" v="50"/>
+ <val o="20a116" v="50"/>
+ <val o="20af26" v="49.9"/>
+ <val o="20bd37" v="49.9"/>
+ <val o="20cb46" v="49.9"/>
+ <val o="20d957" v="50"/>
+ <val o="20e767" v="50"/>
+ <val o="20f581" v="50"/>
+ <val o="210386" v="50"/>
+ <val o="211194" v="50"/>
+ <val o="211fa5" v="50"/>
+ <val o="212db5" v="50"/>
+ <val o="213bc5" v="50"/>
+ <val o="2149d6" v="50"/>
+ <val o="2157e5" v="50"/>
+ <val o="2165f6" v="50"/>
+ <val o="217406" v="50"/>
+ <val o="218217" v="50"/>
+ <val o="219026" v="50"/>
+ <val o="219e39" v="50"/>
+ <val o="21ac46" v="50"/>
+ <val o="21ba57" v="50"/>
+ <val o="21c867" v="50"/>
+ <val o="21d677" v="50"/>
+ <val o="21e487" v="50"/>
+ <val o="21f296" v="50"/>
+ <val o="2200a6" v="50"/>
+ <val o="220eb7" v="50"/>
+ <val o="221cc6" v="50"/>
+ <val o="222ad7" v="50"/>
+ <val o="2238e7" v="50"/>
+ <val o="224701" v="49.9"/>
+ <val o="225505" v="50"/>
+ <val o="226315" v="50"/>
+ <val o="227125" v="50"/>
+ <val o="227f35" v="50"/>
+ <val o="228d45" v="50"/>
+ <val o="229b54" v="50"/>
+ <val o="22a965" v="50"/>
+ <val o="22b776" v="50"/>
+ <val o="22c586" v="50"/>
+ <val o="22d397" v="50"/>
+ <val o="22e1a6" v="50"/>
+ <val o="22efb6" v="50.1"/>
+ <val o="22fdc7" v="50"/>
+ <val o="230bd7" v="50"/>
+ <val o="2319e6" v="50"/>
+ <val o="2327f6" v="50"/>
+ <val o="23361b" v="50"/>
+ <val o="234416" v="50"/>
+ <val o="235226" v="50"/>
+ <val o="236037" v="50"/>
+ <val o="236e46" v="49.9"/>
+ <val o="237c57" v="50"/>
+ <val o="238a66" v="50.1"/>
+ <val o="239881" v="50"/>
+ <val o="23a685" v="50"/>
+ <val o="23b495" v="50"/>
+ <val o="23c2a4" v="50"/>
+ <val o="23d0b5" v="50"/>
+ <val o="23dec4" v="50"/>
+ <val o="23ecd5" v="49.9"/>
+ <val o="23fae4" v="50"/>
+ <val o="2408f6" v="50"/>
+ <val o="241706" v="50"/>
+ <val o="242518" v="49.9"/>
+ <val o="243325" v="50"/>
+ <val o="244137" v="50"/>
+ <val o="244f46" v="50.1"/>
+ <val o="246b66" v="50"/>
+ <val o="247976" v="50"/>
+ <val o="248786" v="49.9"/>
+ <val o="24957e" v="50"/>
+ <val o="24a38f" v="49.9"/>
+ <val o="24b19c" v="50"/>
+ <val o="24bfac" v="50"/>
+ <val o="24cdbc" v="50"/>
+ <val o="24dbcd" v="50"/>
+ <val o="24e9e5" v="50"/>
+ <val o="24f808" v="50"/>
+ <val o="250616" v="50"/>
+ <val o="251426" v="49.9"/>
+ <val o="252236" v="50"/>
+ <val o="253047" v="50"/>
+ <val o="253e56" v="50"/>
+ <val o="254c67" v="50"/>
+ <val o="255a76" v="50"/>
+ <val o="256887" v="50"/>
+ <val o="257697" v="50"/>
+ <val o="2584a8" v="50"/>
+ <val o="2592b6" v="50"/>
+ <val o="25a0c7" v="50"/>
+ <val o="25aed7" v="50"/>
+ <val o="25bce7" v="50"/>
+ <val o="25caf8" v="50"/>
+ <val o="25d907" v="49.9"/>
+ <val o="25e718" v="50"/>
+ <val o="25f527" v="50"/>
+ <val o="260338" v="50"/>
+ <val o="261149" v="50"/>
+ <val o="261f59" v="50"/>
+ <val o="262d68" v="50.1"/>
+ <val o="263b83" v="50"/>
+ <val o="264986" v="50"/>
+ <val o="265795" v="50"/>
+ <val o="2665a6" v="50"/>
+ <val o="2673b5" v="50"/>
+ <val o="2681c6" v="50"/>
+ <val o="268fd5" v="50"/>
+ <val o="269de6" v="50"/>
+ <val o="26abf6" v="50"/>
+ <val o="26ba06" v="50"/>
+ <val o="26c817" v="50"/>
+ <val o="26d62b" v="50"/>
+ <val o="26e436" v="50"/>
+ <val o="26f247" v="50"/>
+ <val o="270057" v="50"/>
+ <val o="270e67" v="50"/>
+ <val o="271c77" v="50"/>
+ <val o="272a87" v="50"/>
+ <val o="273897" v="50"/>
+ <val o="2746a8" v="50"/>
+ <val o="2754b9" v="50"/>
+ <val o="2762c7" v="49.9"/>
+ <val o="2770d8" v="50"/>
+ <val o="277ee7" v="50"/>
+ </par>
+ <par memind="8612" h="3dc1a8de">
+ <val o="0" v="25.07"/>
+ <val o="e08" v="24.067"/>
+ <val o="1c32" v="23.438"/>
+ <val o="2a3c" v="23.245"/>
+ <val o="3835" v="22.784"/>
+ <val o="4645" v="22.746"/>
+ <val o="5455" v="26.297"/>
+ <val o="6265" v="28.878"/>
+ <val o="7075" v="34.451"/>
+ <val o="7e85" v="40.017"/>
+ <val o="8c96" v="40.572"/>
+ <val o="9aa5" v="38.682"/>
+ <val o="a8b6" v="35.869"/>
+ <val o="b6c5" v="34.12"/>
+ <val o="c4d7" v="0.035"/>
+ <val o="d30b" v="0.036"/>
+ <val o="e0f6" v="0.035"/>
+ <val o="ef06" v="0.037"/>
+ <val o="fd17" v="0.038"/>
+ <val o="10b27" v="0.037"/>
+ <val o="11937" v="0.037"/>
+ <val o="12746" v="0.036"/>
+ <val o="13556" v="0.035"/>
+ <val o="14366" v="0.036"/>
+ <val o="15181" v="0.037"/>
+ <val o="15f85" v="0.036"/>
+ <val o="16d95" v="0.036"/>
+ <val o="17ba4" v="0.035"/>
+ <val o="189b5" v="0.038"/>
+ <val o="197c4" v="0.036"/>
+ <val o="1a5d5" v="0.037"/>
+ <val o="1b3e6" v="0.034"/>
+ <val o="1c1f6" v="0.037"/>
+ <val o="1d005" v="0.035"/>
+ <val o="1de15" v="0.033"/>
+ <val o="1ec25" v="0.035"/>
+ <val o="1fa36" v="0.035"/>
+ <val o="20845" v="0.037"/>
+ <val o="21656" v="0.035"/>
+ <val o="22465" v="0.037"/>
+ <val o="23276" v="0.035"/>
+ <val o="24086" v="0.034"/>
+ <val o="24e99" v="0.035"/>
+ <val o="25ca7" v="0.035"/>
+ <val o="26ab7" v="0.035"/>
+ <val o="278c6" v="0.036"/>
+ <val o="286d6" v="0.035"/>
+ <val o="294e6" v="0.034"/>
+ <val o="2a301" v="0.036"/>
+ <val o="2b105" v="0.034"/>
+ <val o="2bf15" v="0.034"/>
+ <val o="2cd25" v="0.036"/>
+ <val o="2db35" v="0.034"/>
+ <val o="2e946" v="0.033"/>
+ <val o="2f755" v="0.034"/>
+ <val o="30566" v="0.035"/>
+ <val o="31375" v="0.035"/>
+ <val o="3219e" v="0.035"/>
+ <val o="32f96" v="0.036"/>
+ <val o="33da6" v="0.035"/>
+ <val o="34bb6" v="0.035"/>
+ <val o="359de" v="0.033"/>
+ <val o="367d6" v="0.035"/>
+ <val o="375e6" v="0.034"/>
+ <val o="3840e" v="0.033"/>
+ <val o="3921e" v="0.035"/>
+ <val o="3a016" v="0.035"/>
+ <val o="3ae27" v="0.036"/>
+ <val o="3bc36" v="0.035"/>
+ <val o="3ca47" v="0.035"/>
+ <val o="3d856" v="0.036"/>
+ <val o="3e667" v="0.035"/>
+ <val o="3f481" v="0.037"/>
+ <val o="40285" v="0.034"/>
+ <val o="41095" v="0.035"/>
+ <val o="41ea5" v="0.035"/>
+ <val o="42cb5" v="0.035"/>
+ <val o="43ac5" v="0.036"/>
+ <val o="448d5" v="0.038"/>
+ <val o="456e6" v="0.036"/>
+ <val o="464f5" v="0.039"/>
+ <val o="480ff" v="0.036"/>
+ <val o="48f0e" v="0.036"/>
+ <val o="49d1d" v="0.038"/>
+ <val o="4ab46" v="0.036"/>
+ <val o="4b955" v="0.037"/>
+ <val o="4c769" v="0.036"/>
+ <val o="4d577" v="0.036"/>
+ <val o="4e387" v="0.036"/>
+ <val o="4f196" v="0.036"/>
+ <val o="4ffa6" v="0.036"/>
+ <val o="50dd0" v="0.038"/>
+ <val o="51bc6" v="0.036"/>
+ <val o="529d6" v="0.036"/>
+ <val o="537e7" v="0.035"/>
+ <val o="54600" v="0.036"/>
+ <val o="55406" v="0.034"/>
+ <val o="56215" v="0.035"/>
+ <val o="57026" v="0.034"/>
+ <val o="57e36" v="0.036"/>
+ <val o="58c46" v="0.035"/>
+ <val o="59a70" v="0.04"/>
+ <val o="5a867" v="0.034"/>
+ <val o="5b676" v="0.035"/>
+ <val o="5c487" v="0.036"/>
+ <val o="5d296" v="0.037"/>
+ <val o="5e0a9" v="0.036"/>
+ <val o="5eeb8" v="0.039"/>
+ <val o="5fcc6" v="0.036"/>
+ <val o="60ad7" v="0.035"/>
+ <val o="618e7" v="0.036"/>
+ <val o="626f7" v="0.035"/>
+ <val o="63507" v="0.036"/>
+ <val o="64317" v="0.037"/>
+ <val o="65127" v="0.039"/>
+ <val o="65f37" v="0.037"/>
+ <val o="66d46" v="0.035"/>
+ <val o="67b57" v="0.036"/>
+ <val o="68967" v="0.035"/>
+ <val o="69782" v="0.035"/>
+ <val o="6a586" v="0.037"/>
+ <val o="6b395" v="0.035"/>
+ <val o="6c1a6" v="0.037"/>
+ <val o="6cfb5" v="0.035"/>
+ <val o="6ddc6" v="0.033"/>
+ <val o="6ebd6" v="0.033"/>
+ <val o="6f9e6" v="0.035"/>
+ <val o="707f6" v="0.035"/>
+ <val o="71607" v="0.037"/>
+ <val o="72417" v="0.037"/>
+ <val o="73227" v="0.037"/>
+ <val o="74037" v="0.037"/>
+ <val o="74e47" v="0.037"/>
+ <val o="75c57" v="0.04"/>
+ <val o="76a63" v="0.036"/>
+ <val o="77873" v="0.035"/>
+ <val o="78680" v="0.037"/>
+ <val o="7948f" v="0.036"/>
+ <val o="7a29f" v="0.036"/>
+ <val o="7b0af" v="0.036"/>
+ <val o="7bebf" v="0.036"/>
+ <val o="7cccf" v="0.037"/>
+ <val o="7dadf" v="0.036"/>
+ <val o="7e8fa" v="0.035"/>
+ <val o="7f70a" v="0.035"/>
+ <val o="8051a" v="0.036"/>
+ <val o="8132a" v="0.034"/>
+ <val o="8213a" v="0.035"/>
+ <val o="82f4a" v="0.036"/>
+ <val o="83d5a" v="0.035"/>
+ <val o="84b6a" v="0.034"/>
+ <val o="8597a" v="0.035"/>
+ <val o="8678b" v="0.036"/>
+ <val o="8759b" v="0.034"/>
+ <val o="883ac" v="0.037"/>
+ <val o="891bb" v="0.037"/>
+ <val o="89fca" v="0.035"/>
+ <val o="8adda" v="0.035"/>
+ <val o="8bbeb" v="0.035"/>
+ <val o="8c9fc" v="0.035"/>
+ <val o="8d80b" v="0.034"/>
+ <val o="8e61a" v="0.035"/>
+ <val o="8f42a" v="0.034"/>
+ <val o="9023a" v="0.036"/>
+ <val o="9104a" v="0.035"/>
+ <val o="91e5a" v="0.035"/>
+ <val o="92c6a" v="0.034"/>
+ <val o="93a84" v="0.035"/>
+ <val o="94885" v="0.036"/>
+ <val o="95694" v="0.034"/>
+ <val o="964a5" v="0.034"/>
+ <val o="972b4" v="0.034"/>
+ <val o="980c5" v="0.034"/>
+ <val o="98ed4" v="0.035"/>
+ <val o="99ce5" v="0.037"/>
+ <val o="9aaf5" v="0.034"/>
+ <val o="9b906" v="0.036"/>
+ <val o="9c716" v="0.037"/>
+ <val o="9d526" v="0.035"/>
+ <val o="9e336" v="0.035"/>
+ <val o="9f145" v="0.035"/>
+ <val o="9ff56" v="0.035"/>
+ <val o="a0d65" v="0.036"/>
+ <val o="a1b77" v="36.117"/>
+ <val o="a2986" v="17.613"/>
+ <val o="a3795" v="8.357"/>
+ <val o="a45a7" v="5.957"/>
+ <val o="a53b6" v="7.134"/>
+ <val o="a61c7" v="8.646"/>
+ <val o="a6fd6" v="6.429"/>
+ <val o="a7e00" v="10.235"/>
+ <val o="a8c00" v="14.027"/>
+ <val o="a9a05" v="3.549"/>
+ <val o="aa815" v="3.8"/>
+ <val o="ab625" v="6.093"/>
+ <val o="ac435" v="5.204"/>
+ <val o="ad245" v="7.526"/>
+ <val o="ae055" v="11.39"/>
+ <val o="aee65" v="0.954"/>
+ <val o="afc75" v="5.773"/>
+ <val o="b0a85" v="21.019"/>
+ <val o="b26a6" v="22.636"/>
+ <val o="b34b6" v="19.316"/>
+ <val o="b42c6" v="1.265"/>
+ <val o="b50d6" v="3.13"/>
+ <val o="b5ee7" v="6.091"/>
+ <val o="b6cf6" v="7.273"/>
+ <val o="b7b07" v="9.373"/>
+ <val o="b8917" v="7.711"/>
+ <val o="b9728" v="8.183"/>
+ <val o="ba537" v="9.843"/>
+ <val o="bb347" v="5.251"/>
+ <val o="bc157" v="2.646"/>
+ <val o="bcf67" v="7.175"/>
+ <val o="bdd81" v="19.697"/>
+ <val o="beb86" v="4.703"/>
+ <val o="bf995" v="5.017"/>
+ <val o="c07a6" v="5.028"/>
+ <val o="c15b5" v="4.406"/>
+ <val o="c23c6" v="5.164"/>
+ <val o="c31d5" v="10.951"/>
+ <val o="c3fe6" v="5.096"/>
+ <val o="c4df5" v="10.032"/>
+ <val o="c5c06" v="4.084"/>
+ <val o="c6a16" v="5.223"/>
+ <val o="c7826" v="6.622"/>
+ <val o="c8636" v="2.571"/>
+ <val o="c9446" v="3.766"/>
+ <val o="ca256" v="2.925"/>
+ <val o="cb066" v="4.239"/>
+ <val o="cbe76" v="2.442"/>
+ <val o="ccc87" v="10.653"/>
+ <val o="cda96" v="15.045"/>
+ <val o="ce8a8" v="10.497"/>
+ <val o="cf6b7" v="14.243"/>
+ <val o="d04c8" v="11.318"/>
+ <val o="d12d7" v="7.26"/>
+ <val o="d20e7" v="3.278"/>
+ <val o="d2f02" v="12.768"/>
+ <val o="d3d05" v="8.863"/>
+ <val o="d4b15" v="8.423"/>
+ <val o="d5926" v="7.503"/>
+ <val o="d6735" v="7.803"/>
+ <val o="d7546" v="10.91"/>
+ <val o="d8355" v="5.743"/>
+ <val o="d9166" v="2.082"/>
+ <val o="d9f75" v="7.751"/>
+ <val o="dad87" v="16.785"/>
+ <val o="dbb97" v="18.467"/>
+ <val o="dc9a8" v="18.801"/>
+ <val o="dd7b7" v="16.008"/>
+ <val o="de5c6" v="13.629"/>
+ <val o="df3d7" v="14.479"/>
+ <val o="e01d7" v="14.927"/>
+ <val o="e0fe5" v="14.349"/>
+ <val o="e1df5" v="15.502"/>
+ <val o="e2c04" v="20.07"/>
+ <val o="e3a14" v="20.011"/>
+ <val o="e4824" v="16.357"/>
+ <val o="e5634" v="17.03"/>
+ <val o="e6444" v="11.901"/>
+ <val o="e7255" v="10.138"/>
+ <val o="e806f" v="8.731"/>
+ <val o="e8e7f" v="14.357"/>
+ <val o="e9c8e" v="4.86"/>
+ <val o="eaa9f" v="4.149"/>
+ <val o="eb8ae" v="6.019"/>
+ <val o="ec6bf" v="14.635"/>
+ <val o="ed4ce" v="9.989"/>
+ <val o="ee2df" v="11.96"/>
+ <val o="ef0ef" v="15.422"/>
+ <val o="eff01" v="22.742"/>
+ <val o="f0d10" v="22.428"/>
+ <val o="f1b20" v="24.11"/>
+ <val o="f2930" v="23.076"/>
+ <val o="f3740" v="23.241"/>
+ <val o="f4551" v="24.018"/>
+ <val o="f5361" v="25.989"/>
+ <val o="f6172" v="24.748"/>
+ <val o="f6f80" v="25.323"/>
+ <val o="f7d91" v="23.122"/>
+ <val o="f8ba1" v="19.403"/>
+ <val o="f99b1" v="19.28"/>
+ <val o="fa7c0" v="16.12"/>
+ <val o="fb5d1" v="16.228"/>
+ <val o="fc3e0" v="16.654"/>
+ <val o="fd1fb" v="14.2"/>
+ <val o="fe00b" v="14.054"/>
+ <val o="fee1c" v="9.557"/>
+ <val o="ffc2c" v="9.072"/>
+ <val o="100a3b" v="8.333"/>
+ <val o="10184c" v="9.771"/>
+ <val o="10265b" v="14.337"/>
+ <val o="10346c" v="16.049"/>
+ <val o="10427b" v="19.911"/>
+ <val o="10508d" v="23.238"/>
+ <val o="105e9d" v="23.213"/>
+ <val o="106cad" v="25.179"/>
+ <val o="107abd" v="21.591"/>
+ <val o="1088cd" v="19.665"/>
+ <val o="1096de" v="21.079"/>
+ <val o="10a4ed" v="21.109"/>
+ <val o="10b2fe" v="22.363"/>
+ <val o="10c10d" v="25.172"/>
+ <val o="10cf1e" v="23.223"/>
+ <val o="10dd2e" v="20.912"/>
+ <val o="10eb66" v="22.017"/>
+ <val o="10f94e" v="18.729"/>
+ <val o="11075e" v="16.761"/>
+ <val o="11156d" v="13.145"/>
+ <val o="112388" v="13.912"/>
+ <val o="113187" v="8.712"/>
+ <val o="113fb0" v="8.106"/>
+ <val o="114da6" v="8.195"/>
+ <val o="115bb6" v="8.301"/>
+ <val o="1169c6" v="10.111"/>
+ <val o="1177d6" v="14.213"/>
+ <val o="1185e8" v="15.617"/>
+ <val o="1193f7" v="19.095"/>
+ <val o="11a208" v="23.986"/>
+ <val o="11b017" v="20.919"/>
+ <val o="11be2f" v="26.06"/>
+ <val o="11cc37" v="21.493"/>
+ <val o="11da47" v="21.006"/>
+ <val o="11e857" v="22.144"/>
+ <val o="11f667" v="19.124"/>
+ <val o="120578" v="0.019"/>
+ <val o="121386" v="0.021"/>
+ <val o="122196" v="0.021"/>
+ <val o="122fa6" v="0.018"/>
+ <val o="123db5" v="0.015"/>
+ <val o="124bc5" v="0.016"/>
+ <val o="1259d5" v="0.011"/>
+ <val o="1267e4" v="0.01"/>
+ <val o="127600" v="0.011"/>
+ <val o="128305" v="0.01"/>
+ <val o="129115" v="0.01"/>
+ <val o="129f25" v="0.01"/>
+ <val o="12ad35" v="0.009"/>
+ <val o="12bb45" v="0.006"/>
+ <val o="12c954" v="0.009"/>
+ <val o="12d766" v="0.011"/>
+ <val o="12e575" v="0.017"/>
+ <val o="12f386" v="0.012"/>
+ <val o="130196" v="0.019"/>
+ <val o="130fa6" v="0.014"/>
+ <val o="131db7" v="0.015"/>
+ <val o="132bc5" v="0.015"/>
+ <val o="1339d4" v="0.279"/>
+ <val o="1347e5" v="0.096"/>
+ <val o="1355f4" v="0.141"/>
+ <val o="136404" v="0.207"/>
+ <val o="137214" v="0.218"/>
+ <val o="138024" v="0.213"/>
+ <val o="138e33" v="0.214"/>
+ <val o="139c44" v="0.075"/>
+ <val o="13aa54" v="0.05"/>
+ <val o="13b865" v="0.034"/>
+ <val o="13c67e" v="0.449"/>
+ <val o="13d48e" v="0.217"/>
+ <val o="13e29e" v="0.167"/>
+ <val o="13f0ae" v="0.158"/>
+ <val o="13febf" v="0.232"/>
+ <val o="140ccf" v="0.339"/>
+ <val o="141adf" v="0.212"/>
+ <val o="1428ef" v="0.044"/>
+ <val o="1436ff" v="0.033"/>
+ <val o="14450f" v="0.025"/>
+ <val o="14531f" v="0.023"/>
+ <val o="146130" v="0.058"/>
+ <val o="146f40" v="0.145"/>
+ <val o="147d44" v="0.064"/>
+ <val o="148b57" v="0.08"/>
+ <val o="149965" v="0.067"/>
+ <val o="14a775" v="0.111"/>
+ <val o="14b584" v="0.05"/>
+ <val o="14c397" v="0.239"/>
+ <val o="14d1a4" v="0.206"/>
+ <val o="14dfb6" v="0.163"/>
+ <val o="14edc5" v="0.063"/>
+ <val o="14fbd5" v="0.027"/>
+ <val o="1509e5" v="0.077"/>
+ <val o="1517ff" v="0.153"/>
+ <val o="152605" v="0.181"/>
+ <val o="153415" v="0.149"/>
+ <val o="154225" v="0.157"/>
+ <val o="155035" v="0.166"/>
+ <val o="155e45" v="0.216"/>
+ <val o="156c55" v="0.306"/>
+ <val o="157a65" v="0.168"/>
+ <val o="158875" v="0.145"/>
+ <val o="159686" v="0.252"/>
+ <val o="15a495" v="0.213"/>
+ <val o="15b2a6" v="0.19"/>
+ <val o="15c0b6" v="0.111"/>
+ <val o="15cec6" v="0.114"/>
+ <val o="15dcd5" v="0.107"/>
+ <val o="15eae6" v="0.115"/>
+ <val o="15f8f5" v="0.302"/>
+ <val o="160706" v="0.03"/>
+ <val o="161517" v="0.06"/>
+ <val o="162326" v="0.048"/>
+ <val o="163137" v="0.069"/>
+ <val o="163f46" v="0.063"/>
+ <val o="164d57" v="0.029"/>
+ <val o="165b67" v="0.105"/>
+ <val o="166982" v="0.096"/>
+ <val o="167786" v="0.142"/>
+ <val o="168596" v="0.101"/>
+ <val o="1693a6" v="0.092"/>
+ <val o="16a1b5" v="0.071"/>
+ <val o="16afc6" v="0.067"/>
+ <val o="16bdd5" v="0.17"/>
+ <val o="16cbe6" v="0.212"/>
+ <val o="16d9f6" v="0.089"/>
+ <val o="16e807" v="0.607"/>
+ <val o="16f616" v="0.675"/>
+ <val o="170429" v="0.723"/>
+ <val o="171236" v="0.477"/>
+ <val o="172047" v="0.477"/>
+ <val o="172e57" v="0.491"/>
+ <val o="173c67" v="0.496"/>
+ <val o="174a77" v="0.579"/>
+ <val o="175887" v="0.62"/>
+ <val o="176694" v="35.716"/>
+ <val o="1774a3" v="33.973"/>
+ <val o="1782b3" v="35.295"/>
+ <val o="1790c5" v="32.429"/>
+ <val o="179ed4" v="28.433"/>
+ <val o="17ace4" v="29.24"/>
+ <val o="17bafd" v="30.943"/>
+ <val o="17c90f" v="28.05"/>
+ <val o="17d71e" v="27.792"/>
+ <val o="17e52f" v="28.102"/>
+ <val o="17f33f" v="25.534"/>
+ <val o="18014f" v="25.021"/>
+ <val o="180f5f" v="30.046"/>
+ <val o="181d6e" v="32.772"/>
+ <val o="182b7f" v="38.186"/>
+ <val o="18398f" v="64.34"/>
+ <val o="1847a1" v="63.582"/>
+ <val o="1855af" v="60.895"/>
+ <val o="1863c0" v="57.167"/>
+ <val o="1871cf" v="59.436"/>
+ <val o="187fe0" v="56.655"/>
+ <val o="188def" v="60.597"/>
+ <val o="189c00" v="56.836"/>
+ <val o="18b80d" v="37.581"/>
+ <val o="18c61c" v="40.1"/>
+ <val o="18d42c" v="38.214"/>
+ <val o="18e23b" v="32.175"/>
+ <val o="18f04b" v="30.662"/>
+ <val o="18fe5e" v="26.933"/>
+ <val o="190c76" v="21.269"/>
+ <val o="191a86" v="21.646"/>
+ <val o="192896" v="21.244"/>
+ <val o="1936a6" v="20.855"/>
+ <val o="1944b7" v="19.588"/>
+ <val o="1952c6" v="20.809"/>
+ <val o="1960d7" v="25.64"/>
+ <val o="196ee6" v="29.166"/>
+ <val o="197cf8" v="31.236"/>
+ <val o="198b0f" v="28.424"/>
+ <val o="19991f" v="32.717"/>
+ <val o="19b541" v="32.231"/>
+ <val o="19c34d" v="29.816"/>
+ <val o="19d15e" v="29.219"/>
+ <val o="19df80" v="29.861"/>
+ <val o="19ed90" v="29.093"/>
+ <val o="19eebe" v="29.004"/>
+ <val o="19fb8e" v="10.445"/>
+ <val o="1a09a0" v="18.158"/>
+ <val o="1a17ae" v="23.713"/>
+ <val o="1a25be" v="25.84"/>
+ <val o="1a33cd" v="13.692"/>
+ <val o="1a41dd" v="15.619"/>
+ <val o="1a4fed" v="22.235"/>
+ <val o="1a5e08" v="20.533"/>
+ <val o="1a6c05" v="14.806"/>
+ <val o="1a7a15" v="17.786"/>
+ <val o="1a8826" v="18.205"/>
+ <val o="1a9637" v="14.86"/>
+ <val o="1aa445" v="11.317"/>
+ <val o="1ab255" v="6.403"/>
+ <val o="1ac065" v="13.389"/>
+ <val o="1ace75" v="18.094"/>
+ <val o="1adc87" v="16.688"/>
+ <val o="1aea96" v="16.251"/>
+ <val o="1af8a7" v="17.902"/>
+ <val o="1b06b7" v="16.864"/>
+ <val o="1b14c6" v="16.076"/>
+ <val o="1c7460" v="4.33"/>
+ <val o="1c8270" v="4.33"/>
+ <val o="1c907e" v="21.221"/>
+ <val o="1c9e8f" v="20.86"/>
+ <val o="1caca2" v="22.903"/>
+ <val o="1cbab1" v="22.672"/>
+ <val o="1cc8c1" v="34.711"/>
+ <val o="1cd6d0" v="33.792"/>
+ <val o="1ce4de" v="32.717"/>
+ <val o="1cf2f0" v="33.04"/>
+ <val o="1d0109" v="34.047"/>
+ <val o="1d0f06" v="36.536"/>
+ <val o="1d1d15" v="36.673"/>
+ <val o="1d2b25" v="36.752"/>
+ <val o="1d3935" v="37.932"/>
+ <val o="1d4745" v="37.857"/>
+ <val o="1d5555" v="37.029"/>
+ <val o="1d6366" v="32.844"/>
+ <val o="1d7175" v="31.917"/>
+ <val o="1d7f86" v="31.363"/>
+ <val o="1d8d95" v="15.349"/>
+ <val o="1d9ba6" v="17.623"/>
+ <val o="1da9b6" v="17.658"/>
+ <val o="1db7c7" v="16.597"/>
+ <val o="1dc5d5" v="17.621"/>
+ <val o="1dd3e6" v="18.017"/>
+ <val o="1de1f5" v="32.337"/>
+ <val o="1df006" v="37.113"/>
+ <val o="1dfe16" v="36.896"/>
+ <val o="1e0c26" v="37.646"/>
+ <val o="1e1a36" v="37.465"/>
+ <val o="1e2847" v="35.96"/>
+ <val o="1e3659" v="34.217"/>
+ <val o="1e4467" v="31.472"/>
+ <val o="1e5281" v="27.913"/>
+ <val o="1e6086" v="27.77"/>
+ <val o="1e6e96" v="27.092"/>
+ <val o="1e7ca6" v="9.65"/>
+ <val o="1e8ab5" v="8.989"/>
+ <val o="1e98c6" v="8.871"/>
+ <val o="1ea6d5" v="11.525"/>
+ <val o="1eb4e6" v="11.312"/>
+ <val o="1ec2f6" v="13.145"/>
+ <val o="1ed106" v="12.866"/>
+ <val o="1edf16" v="13.503"/>
+ <val o="1eed26" v="12.977"/>
+ <val o="1efb36" v="12.853"/>
+ <val o="1f0946" v="12.322"/>
+ <val o="1f1756" v="11.244"/>
+ <val o="1f2566" v="11.357"/>
+ <val o="1f3376" v="13.909"/>
+ <val o="1f4187" v="20.778"/>
+ <val o="1f4f96" v="17.384"/>
+ <val o="1f5da7" v="17.882"/>
+ <val o="1f6bb6" v="17.779"/>
+ <val o="1f79c7" v="15.628"/>
+ <val o="1f87d6" v="18.718"/>
+ <val o="1f95e7" v="19.687"/>
+ <val o="1fa401" v="15.856"/>
+ <val o="1fb204" v="14.235"/>
+ <val o="1fc016" v="14.121"/>
+ <val o="1fce25" v="10.417"/>
+ <val o="1fdc35" v="10.192"/>
+ <val o="1fea45" v="10.247"/>
+ <val o="1ff855" v="12.409"/>
+ <val o="200665" v="18.782"/>
+ <val o="201475" v="17.709"/>
+ <val o="202286" v="24.468"/>
+ <val o="203095" v="27.895"/>
+ <val o="203ea5" v="31.135"/>
+ <val o="204cb6" v="28.073"/>
+ <val o="205ac6" v="26.781"/>
+ <val o="2068d6" v="27.955"/>
+ <val o="2076e6" v="31.834"/>
+ <val o="2084f6" v="30.684"/>
+ <val o="209306" v="33.239"/>
+ <val o="20a116" v="31.592"/>
+ <val o="20af26" v="27.051"/>
+ <val o="20bd37" v="26.891"/>
+ <val o="20cb46" v="22.834"/>
+ <val o="20d957" v="21.1"/>
+ <val o="20e767" v="20.723"/>
+ <val o="20f581" v="20.412"/>
+ <val o="210386" v="17.178"/>
+ <val o="211194" v="14.845"/>
+ <val o="211fa5" v="14.404"/>
+ <val o="212db5" v="13.895"/>
+ <val o="213bc5" v="14.291"/>
+ <val o="2149d6" v="18.376"/>
+ <val o="2157e5" v="22.682"/>
+ <val o="2165f6" v="29.056"/>
+ <val o="217406" v="30.985"/>
+ <val o="218217" v="31.244"/>
+ <val o="219026" v="30.501"/>
+ <val o="219e39" v="30.757"/>
+ <val o="21ac46" v="29.766"/>
+ <val o="21ba57" v="29.686"/>
+ <val o="21c867" v="30.47"/>
+ <val o="21d677" v="31.06"/>
+ <val o="21e487" v="28.958"/>
+ <val o="21f296" v="28.474"/>
+ <val o="2200a6" v="27.753"/>
+ <val o="220eb7" v="26.676"/>
+ <val o="221cc6" v="24.07"/>
+ <val o="222ad7" v="18.889"/>
+ <val o="2238e7" v="17.556"/>
+ <val o="224701" v="16.434"/>
+ <val o="225505" v="18.47"/>
+ <val o="226315" v="9.837"/>
+ <val o="227125" v="9.73"/>
+ <val o="227f35" v="12.672"/>
+ <val o="228d45" v="17.29"/>
+ <val o="229b54" v="17.161"/>
+ <val o="22a965" v="19.388"/>
+ <val o="22b776" v="22.792"/>
+ <val o="22c586" v="25.973"/>
+ <val o="22d397" v="28.305"/>
+ <val o="22e1a6" v="28.475"/>
+ <val o="22efb6" v="23.531"/>
+ <val o="22fdc7" v="22.62"/>
+ <val o="230bd7" v="22.13"/>
+ <val o="2319e6" v="27.159"/>
+ <val o="2327f6" v="27.705"/>
+ <val o="23361b" v="29.796"/>
+ <val o="234416" v="27.341"/>
+ <val o="235226" v="25.887"/>
+ <val o="236037" v="25.842"/>
+ <val o="236e46" v="23.266"/>
+ <val o="237c57" v="21.664"/>
+ <val o="238a66" v="19.437"/>
+ <val o="239881" v="15.912"/>
+ <val o="23a685" v="16.037"/>
+ <val o="23b495" v="15.674"/>
+ <val o="23c2a4" v="13.705"/>
+ <val o="23d0b5" v="14.331"/>
+ <val o="23dec4" v="15.781"/>
+ <val o="23ecd5" v="18.196"/>
+ <val o="23fae4" v="22.115"/>
+ <val o="2408f6" v="26.066"/>
+ <val o="241706" v="34.813"/>
+ <val o="242518" v="35.914"/>
+ <val o="243325" v="36.775"/>
+ <val o="244137" v="34.277"/>
+ <val o="244f46" v="32.056"/>
+ <val o="246b66" v="33.001"/>
+ <val o="247976" v="31.687"/>
+ <val o="248786" v="36.854"/>
+ <val o="24957e" v="30.428"/>
+ <val o="24a38f" v="28.246"/>
+ <val o="24b19c" v="28.984"/>
+ <val o="24bfac" v="27.176"/>
+ <val o="24cdbc" v="26.455"/>
+ <val o="24dbcd" v="21.891"/>
+ <val o="24e9e5" v="20.073"/>
+ <val o="24f808" v="17.083"/>
+ <val o="250616" v="17.921"/>
+ <val o="251426" v="17.972"/>
+ <val o="252236" v="16.1"/>
+ <val o="253047" v="17.324"/>
+ <val o="253e56" v="20.97"/>
+ <val o="254c67" v="21.269"/>
+ <val o="255a76" v="25.041"/>
+ <val o="256887" v="31.27"/>
+ <val o="257697" v="33.712"/>
+ <val o="2584a8" v="82.744"/>
+ <val o="2592b6" v="46.746"/>
+ <val o="25a0c7" v="22.903"/>
+ <val o="25aed7" v="31.343"/>
+ <val o="25bce7" v="30.438"/>
+ <val o="25caf8" v="28.883"/>
+ <val o="25d907" v="30.794"/>
+ <val o="25e718" v="31.011"/>
+ <val o="25f527" v="28.098"/>
+ <val o="260338" v="27.177"/>
+ <val o="261149" v="24.941"/>
+ <val o="261f59" v="22.834"/>
+ <val o="262d68" v="23.209"/>
+ <val o="263b83" v="17.56"/>
+ <val o="264986" v="17.555"/>
+ <val o="265795" v="18.761"/>
+ <val o="2665a6" v="20.698"/>
+ <val o="2673b5" v="19.372"/>
+ <val o="2681c6" v="18.644"/>
+ <val o="268fd5" v="18.792"/>
+ <val o="269de6" v="18.951"/>
+ <val o="26abf6" v="18.907"/>
+ <val o="26ba06" v="23.409"/>
+ <val o="26c817" v="23.511"/>
+ <val o="26d62b" v="26.941"/>
+ <val o="26e436" v="24.008"/>
+ <val o="26f247" v="23.147"/>
+ <val o="270057" v="23.935"/>
+ <val o="270e67" v="24"/>
+ <val o="271c77" v="22.888"/>
+ <val o="272a87" v="26.246"/>
+ <val o="273897" v="25.909"/>
+ <val o="2746a8" v="25.109"/>
+ <val o="2754b9" v="24.725"/>
+ <val o="2762c7" v="23.755"/>
+ <val o="2770d8" v="18.839"/>
+ <val o="277ee7" v="15.362"/>
+ </par>
+ <par memind="8608" h="3dc1a8de">
+ <val o="0" v="0"/>
+ <val o="e08" v="0"/>
+ <val o="1c32" v="0"/>
+ <val o="2a3c" v="0"/>
+ <val o="3835" v="0"/>
+ <val o="4645" v="0"/>
+ <val o="5455" v="0"/>
+ <val o="6265" v="0"/>
+ <val o="7075" v="0"/>
+ <val o="7e85" v="0"/>
+ <val o="8c96" v="0"/>
+ <val o="9aa5" v="0"/>
+ <val o="a8b6" v="0"/>
+ <val o="b6c5" v="0"/>
+ <val o="c4d7" v="0"/>
+ <val o="d30b" v="0"/>
+ <val o="e0f6" v="0"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="0"/>
+ <val o="11937" v="0"/>
+ <val o="12746" v="0"/>
+ <val o="13556" v="0"/>
+ <val o="14366" v="0"/>
+ <val o="15181" v="0"/>
+ <val o="15f85" v="0"/>
+ <val o="16d95" v="0"/>
+ <val o="17ba4" v="0"/>
+ <val o="189b5" v="0"/>
+ <val o="197c4" v="0"/>
+ <val o="1a5d5" v="0"/>
+ <val o="1b3e6" v="0"/>
+ <val o="1c1f6" v="0"/>
+ <val o="1d005" v="0"/>
+ <val o="1de15" v="0"/>
+ <val o="1ec25" v="0"/>
+ <val o="1fa36" v="0"/>
+ <val o="20845" v="0"/>
+ <val o="21656" v="0"/>
+ <val o="22465" v="0"/>
+ <val o="23276" v="0"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="0"/>
+ <val o="25ca7" v="0"/>
+ <val o="26ab7" v="0"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="0"/>
+ <val o="294e6" v="0"/>
+ <val o="2a301" v="0"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="0"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="0"/>
+ <val o="31375" v="0"/>
+ <val o="3219e" v="0"/>
+ <val o="32f96" v="0"/>
+ <val o="33da6" v="0"/>
+ <val o="34bb6" v="0"/>
+ <val o="359de" v="0"/>
+ <val o="367d6" v="0"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="0"/>
+ <val o="3bc36" v="0"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="0"/>
+ <val o="3e667" v="0"/>
+ <val o="3f481" v="0"/>
+ <val o="40285" v="0"/>
+ <val o="41095" v="0"/>
+ <val o="41ea5" v="0"/>
+ <val o="42cb5" v="0"/>
+ <val o="43ac5" v="0"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="0"/>
+ <val o="464f5" v="0"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="0"/>
+ <val o="54600" v="0"/>
+ <val o="55406" v="0"/>
+ <val o="56215" v="0"/>
+ <val o="57026" v="0"/>
+ <val o="57e36" v="0"/>
+ <val o="58c46" v="0"/>
+ <val o="59a70" v="0"/>
+ <val o="5a867" v="0"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="0"/>
+ <val o="5eeb8" v="0"/>
+ <val o="5fcc6" v="0"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="0"/>
+ <val o="65f37" v="0"/>
+ <val o="66d46" v="0"/>
+ <val o="67b57" v="0"/>
+ <val o="68967" v="0"/>
+ <val o="69782" v="0"/>
+ <val o="6a586" v="0"/>
+ <val o="6b395" v="0"/>
+ <val o="6c1a6" v="0"/>
+ <val o="6cfb5" v="0"/>
+ <val o="6ddc6" v="0"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="0"/>
+ <val o="707f6" v="0"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="0"/>
+ <val o="74e47" v="0"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="0"/>
+ <val o="7bebf" v="0"/>
+ <val o="7cccf" v="0"/>
+ <val o="7dadf" v="0"/>
+ <val o="7e8fa" v="0"/>
+ <val o="7f70a" v="0"/>
+ <val o="8051a" v="0"/>
+ <val o="8132a" v="0"/>
+ <val o="8213a" v="0"/>
+ <val o="82f4a" v="0"/>
+ <val o="83d5a" v="0"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="0"/>
+ <val o="891bb" v="0"/>
+ <val o="89fca" v="0"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="0"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="0"/>
+ <val o="93a84" v="0"/>
+ <val o="94885" v="0"/>
+ <val o="95694" v="0"/>
+ <val o="964a5" v="0"/>
+ <val o="972b4" v="0"/>
+ <val o="980c5" v="0"/>
+ <val o="98ed4" v="0"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="0"/>
+ <val o="9c716" v="0"/>
+ <val o="9d526" v="0"/>
+ <val o="9e336" v="0"/>
+ <val o="9f145" v="0"/>
+ <val o="9ff56" v="0"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="0"/>
+ <val o="a2986" v="0"/>
+ <val o="a3795" v="0"/>
+ <val o="a45a7" v="0"/>
+ <val o="a53b6" v="0"/>
+ <val o="a61c7" v="0"/>
+ <val o="a6fd6" v="0"/>
+ <val o="a7e00" v="0"/>
+ <val o="a8c00" v="0"/>
+ <val o="a9a05" v="0"/>
+ <val o="aa815" v="0"/>
+ <val o="ab625" v="0"/>
+ <val o="ac435" v="0"/>
+ <val o="ad245" v="0"/>
+ <val o="ae055" v="0"/>
+ <val o="aee65" v="0"/>
+ <val o="afc75" v="0"/>
+ <val o="b0a85" v="0"/>
+ <val o="b26a6" v="0"/>
+ <val o="b34b6" v="0"/>
+ <val o="b42c6" v="0"/>
+ <val o="b50d6" v="0"/>
+ <val o="b5ee7" v="0"/>
+ <val o="b6cf6" v="0"/>
+ <val o="b7b07" v="0"/>
+ <val o="b8917" v="0"/>
+ <val o="b9728" v="0"/>
+ <val o="ba537" v="0"/>
+ <val o="bb347" v="0"/>
+ <val o="bc157" v="0"/>
+ <val o="bcf67" v="0"/>
+ <val o="bdd81" v="0"/>
+ <val o="beb86" v="0"/>
+ <val o="bf995" v="0"/>
+ <val o="c07a6" v="0"/>
+ <val o="c15b5" v="0"/>
+ <val o="c23c6" v="0"/>
+ <val o="c31d5" v="0"/>
+ <val o="c3fe6" v="0"/>
+ <val o="c4df5" v="0"/>
+ <val o="c5c06" v="0"/>
+ <val o="c6a16" v="0"/>
+ <val o="c7826" v="0"/>
+ <val o="c8636" v="0"/>
+ <val o="c9446" v="0"/>
+ <val o="ca256" v="0"/>
+ <val o="cb066" v="0"/>
+ <val o="cbe76" v="0"/>
+ <val o="ccc87" v="0"/>
+ <val o="cda96" v="0"/>
+ <val o="ce8a8" v="0"/>
+ <val o="cf6b7" v="0"/>
+ <val o="d04c8" v="0"/>
+ <val o="d12d7" v="0"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="0"/>
+ <val o="d3d05" v="0"/>
+ <val o="d4b15" v="0"/>
+ <val o="d5926" v="0"/>
+ <val o="d6735" v="0"/>
+ <val o="d7546" v="0"/>
+ <val o="d8355" v="0"/>
+ <val o="d9166" v="0"/>
+ <val o="d9f75" v="0"/>
+ <val o="dad87" v="0"/>
+ <val o="dbb97" v="0"/>
+ <val o="dc9a8" v="0"/>
+ <val o="dd7b7" v="0"/>
+ <val o="de5c6" v="0"/>
+ <val o="df3d7" v="0"/>
+ <val o="e01d7" v="0"/>
+ <val o="e0fe5" v="0"/>
+ <val o="e1df5" v="0"/>
+ <val o="e2c04" v="0"/>
+ <val o="e3a14" v="0"/>
+ <val o="e4824" v="0"/>
+ <val o="e5634" v="0"/>
+ <val o="e6444" v="0"/>
+ <val o="e7255" v="0"/>
+ <val o="e806f" v="0"/>
+ <val o="e8e7f" v="0"/>
+ <val o="e9c8e" v="0"/>
+ <val o="eaa9f" v="0"/>
+ <val o="eb8ae" v="0"/>
+ <val o="ec6bf" v="0"/>
+ <val o="ed4ce" v="0"/>
+ <val o="ee2df" v="0"/>
+ <val o="ef0ef" v="0"/>
+ <val o="eff01" v="0"/>
+ <val o="f0d10" v="0"/>
+ <val o="f1b20" v="0"/>
+ <val o="f2930" v="0"/>
+ <val o="f3740" v="0"/>
+ <val o="f4551" v="0"/>
+ <val o="f5361" v="0"/>
+ <val o="f6172" v="0"/>
+ <val o="f6f80" v="0"/>
+ <val o="f7d91" v="0"/>
+ <val o="f8ba1" v="0"/>
+ <val o="f99b1" v="0"/>
+ <val o="fa7c0" v="0"/>
+ <val o="fb5d1" v="0"/>
+ <val o="fc3e0" v="0"/>
+ <val o="fd1fb" v="0"/>
+ <val o="fe00b" v="0"/>
+ <val o="fee1c" v="0"/>
+ <val o="ffc2c" v="0"/>
+ <val o="100a3b" v="0"/>
+ <val o="10184c" v="0"/>
+ <val o="10265b" v="0"/>
+ <val o="10346c" v="0"/>
+ <val o="10427b" v="0"/>
+ <val o="10508d" v="0"/>
+ <val o="105e9d" v="0"/>
+ <val o="106cad" v="0"/>
+ <val o="107abd" v="0"/>
+ <val o="1088cd" v="0"/>
+ <val o="1096de" v="0"/>
+ <val o="10a4ed" v="0"/>
+ <val o="10b2fe" v="0"/>
+ <val o="10c10d" v="0"/>
+ <val o="10cf1e" v="0"/>
+ <val o="10dd2e" v="0"/>
+ <val o="10eb66" v="0"/>
+ <val o="10f94e" v="0"/>
+ <val o="11075e" v="0"/>
+ <val o="11156d" v="0"/>
+ <val o="112388" v="0"/>
+ <val o="113187" v="0"/>
+ <val o="113fb0" v="0"/>
+ <val o="114da6" v="0"/>
+ <val o="115bb6" v="0"/>
+ <val o="1169c6" v="0"/>
+ <val o="1177d6" v="0"/>
+ <val o="1185e8" v="0"/>
+ <val o="1193f7" v="0"/>
+ <val o="11a208" v="0"/>
+ <val o="11b017" v="0"/>
+ <val o="11be2f" v="0"/>
+ <val o="11cc37" v="0"/>
+ <val o="11da47" v="0"/>
+ <val o="11e857" v="0"/>
+ <val o="11f667" v="0"/>
+ <val o="120578" v="0"/>
+ <val o="121386" v="0"/>
+ <val o="122196" v="0"/>
+ <val o="122fa6" v="0"/>
+ <val o="123db5" v="0"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="0"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="0"/>
+ <val o="128305" v="0"/>
+ <val o="129115" v="0"/>
+ <val o="129f25" v="0"/>
+ <val o="12ad35" v="0"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="0"/>
+ <val o="12d766" v="0"/>
+ <val o="12e575" v="0"/>
+ <val o="12f386" v="0"/>
+ <val o="130196" v="0"/>
+ <val o="130fa6" v="0"/>
+ <val o="131db7" v="0"/>
+ <val o="132bc5" v="0"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="0"/>
+ <val o="1774a3" v="0"/>
+ <val o="1782b3" v="0"/>
+ <val o="1790c5" v="0"/>
+ <val o="179ed4" v="0"/>
+ <val o="17ace4" v="0"/>
+ <val o="17bafd" v="0"/>
+ <val o="17c90f" v="0"/>
+ <val o="17d71e" v="0"/>
+ <val o="17e52f" v="0"/>
+ <val o="17f33f" v="0"/>
+ <val o="18014f" v="0"/>
+ <val o="180f5f" v="0"/>
+ <val o="181d6e" v="0"/>
+ <val o="182b7f" v="0"/>
+ <val o="18398f" v="0"/>
+ <val o="1847a1" v="0"/>
+ <val o="1855af" v="0"/>
+ <val o="1863c0" v="0"/>
+ <val o="1871cf" v="0"/>
+ <val o="187fe0" v="0"/>
+ <val o="188def" v="0"/>
+ <val o="189c00" v="0"/>
+ <val o="18b80d" v="0"/>
+ <val o="18c61c" v="0"/>
+ <val o="18d42c" v="0"/>
+ <val o="18e23b" v="0"/>
+ <val o="18f04b" v="0"/>
+ <val o="18fe5e" v="0"/>
+ <val o="190c76" v="0"/>
+ <val o="191a86" v="0"/>
+ <val o="192896" v="0"/>
+ <val o="1936a6" v="0"/>
+ <val o="1944b7" v="0"/>
+ <val o="1952c6" v="0"/>
+ <val o="1960d7" v="0"/>
+ <val o="196ee6" v="0"/>
+ <val o="197cf8" v="0"/>
+ <val o="198b0f" v="0"/>
+ <val o="19991f" v="0"/>
+ <val o="19b541" v="0"/>
+ <val o="19c34d" v="0"/>
+ <val o="19d15e" v="0"/>
+ <val o="19df80" v="0"/>
+ <val o="19ed90" v="0"/>
+ <val o="19eebe" v="0"/>
+ <val o="19fb8e" v="0"/>
+ <val o="1a09a0" v="0"/>
+ <val o="1a17ae" v="0"/>
+ <val o="1a25be" v="0"/>
+ <val o="1a33cd" v="0"/>
+ <val o="1a41dd" v="0"/>
+ <val o="1a4fed" v="0"/>
+ <val o="1a5e08" v="0"/>
+ <val o="1a6c05" v="0"/>
+ <val o="1a7a15" v="0"/>
+ <val o="1a8826" v="0"/>
+ <val o="1a9637" v="0"/>
+ <val o="1aa445" v="0"/>
+ <val o="1ab255" v="0"/>
+ <val o="1ac065" v="0"/>
+ <val o="1ace75" v="0"/>
+ <val o="1adc87" v="0"/>
+ <val o="1aea96" v="0"/>
+ <val o="1af8a7" v="0"/>
+ <val o="1b06b7" v="0"/>
+ <val o="1b14c6" v="0"/>
+ <val o="1c7460" v="0"/>
+ <val o="1c8270" v="0"/>
+ <val o="1c907e" v="0"/>
+ <val o="1c9e8f" v="0"/>
+ <val o="1caca2" v="0"/>
+ <val o="1cbab1" v="0"/>
+ <val o="1cc8c1" v="0"/>
+ <val o="1cd6d0" v="0"/>
+ <val o="1ce4de" v="0"/>
+ <val o="1cf2f0" v="0"/>
+ <val o="1d0109" v="0"/>
+ <val o="1d0f06" v="0"/>
+ <val o="1d1d15" v="0"/>
+ <val o="1d2b25" v="0"/>
+ <val o="1d3935" v="0"/>
+ <val o="1d4745" v="0"/>
+ <val o="1d5555" v="0"/>
+ <val o="1d6366" v="0"/>
+ <val o="1d7175" v="0"/>
+ <val o="1d7f86" v="0"/>
+ <val o="1d8d95" v="0"/>
+ <val o="1d9ba6" v="0"/>
+ <val o="1da9b6" v="0"/>
+ <val o="1db7c7" v="0"/>
+ <val o="1dc5d5" v="0"/>
+ <val o="1dd3e6" v="0"/>
+ <val o="1de1f5" v="0"/>
+ <val o="1df006" v="0"/>
+ <val o="1dfe16" v="0"/>
+ <val o="1e0c26" v="0"/>
+ <val o="1e1a36" v="0"/>
+ <val o="1e2847" v="0"/>
+ <val o="1e3659" v="0"/>
+ <val o="1e4467" v="0"/>
+ <val o="1e5281" v="0"/>
+ <val o="1e6086" v="0"/>
+ <val o="1e6e96" v="0"/>
+ <val o="1e7ca6" v="0"/>
+ <val o="1e8ab5" v="0"/>
+ <val o="1e98c6" v="0"/>
+ <val o="1ea6d5" v="0"/>
+ <val o="1eb4e6" v="0"/>
+ <val o="1ec2f6" v="0"/>
+ <val o="1ed106" v="0"/>
+ <val o="1edf16" v="0"/>
+ <val o="1eed26" v="0"/>
+ <val o="1efb36" v="0"/>
+ <val o="1f0946" v="0"/>
+ <val o="1f1756" v="0"/>
+ <val o="1f2566" v="0"/>
+ <val o="1f3376" v="0"/>
+ <val o="1f4187" v="0"/>
+ <val o="1f4f96" v="0"/>
+ <val o="1f5da7" v="0"/>
+ <val o="1f6bb6" v="0"/>
+ <val o="1f79c7" v="0"/>
+ <val o="1f87d6" v="0"/>
+ <val o="1f95e7" v="0"/>
+ <val o="1fa401" v="0"/>
+ <val o="1fb204" v="0"/>
+ <val o="1fc016" v="0"/>
+ <val o="1fce25" v="0"/>
+ <val o="1fdc35" v="0"/>
+ <val o="1fea45" v="0"/>
+ <val o="1ff855" v="0"/>
+ <val o="200665" v="0"/>
+ <val o="201475" v="0"/>
+ <val o="202286" v="0"/>
+ <val o="203095" v="0"/>
+ <val o="203ea5" v="0"/>
+ <val o="204cb6" v="0"/>
+ <val o="205ac6" v="0"/>
+ <val o="2068d6" v="0"/>
+ <val o="2076e6" v="0"/>
+ <val o="2084f6" v="0"/>
+ <val o="209306" v="0"/>
+ <val o="20a116" v="0"/>
+ <val o="20af26" v="0"/>
+ <val o="20bd37" v="0"/>
+ <val o="20cb46" v="0"/>
+ <val o="20d957" v="0"/>
+ <val o="20e767" v="0"/>
+ <val o="20f581" v="0"/>
+ <val o="210386" v="0"/>
+ <val o="211194" v="0"/>
+ <val o="211fa5" v="0"/>
+ <val o="212db5" v="0"/>
+ <val o="213bc5" v="0"/>
+ <val o="2149d6" v="0"/>
+ <val o="2157e5" v="0"/>
+ <val o="2165f6" v="0"/>
+ <val o="217406" v="0"/>
+ <val o="218217" v="0"/>
+ <val o="219026" v="0"/>
+ <val o="219e39" v="0"/>
+ <val o="21ac46" v="0"/>
+ <val o="21ba57" v="0"/>
+ <val o="21c867" v="0"/>
+ <val o="21d677" v="0"/>
+ <val o="21e487" v="0"/>
+ <val o="21f296" v="0"/>
+ <val o="2200a6" v="0"/>
+ <val o="220eb7" v="0"/>
+ <val o="221cc6" v="0"/>
+ <val o="222ad7" v="0"/>
+ <val o="2238e7" v="0"/>
+ <val o="224701" v="0"/>
+ <val o="225505" v="0"/>
+ <val o="226315" v="0"/>
+ <val o="227125" v="0"/>
+ <val o="227f35" v="0"/>
+ <val o="228d45" v="0"/>
+ <val o="229b54" v="0"/>
+ <val o="22a965" v="0"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="0"/>
+ <val o="22d397" v="0"/>
+ <val o="22e1a6" v="0"/>
+ <val o="22efb6" v="0"/>
+ <val o="22fdc7" v="0"/>
+ <val o="230bd7" v="0"/>
+ <val o="2319e6" v="0"/>
+ <val o="2327f6" v="0"/>
+ <val o="23361b" v="0"/>
+ <val o="234416" v="0"/>
+ <val o="235226" v="0"/>
+ <val o="236037" v="0"/>
+ <val o="236e46" v="0"/>
+ <val o="237c57" v="0"/>
+ <val o="238a66" v="0"/>
+ <val o="239881" v="0"/>
+ <val o="23a685" v="0"/>
+ <val o="23b495" v="0"/>
+ <val o="23c2a4" v="0"/>
+ <val o="23d0b5" v="0"/>
+ <val o="23dec4" v="0"/>
+ <val o="23ecd5" v="0"/>
+ <val o="23fae4" v="0"/>
+ <val o="2408f6" v="0"/>
+ <val o="241706" v="0"/>
+ <val o="242518" v="0"/>
+ <val o="243325" v="0"/>
+ <val o="244137" v="0"/>
+ <val o="244f46" v="0"/>
+ <val o="246b66" v="0"/>
+ <val o="247976" v="0"/>
+ <val o="248786" v="0"/>
+ <val o="24957e" v="0"/>
+ <val o="24a38f" v="0"/>
+ <val o="24b19c" v="0"/>
+ <val o="24bfac" v="0"/>
+ <val o="24cdbc" v="0"/>
+ <val o="24dbcd" v="0"/>
+ <val o="24e9e5" v="0"/>
+ <val o="24f808" v="0"/>
+ <val o="250616" v="0"/>
+ <val o="251426" v="0"/>
+ <val o="252236" v="0"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="0"/>
+ <val o="254c67" v="0"/>
+ <val o="255a76" v="0"/>
+ <val o="256887" v="0"/>
+ <val o="257697" v="0"/>
+ <val o="2584a8" v="0"/>
+ <val o="2592b6" v="0"/>
+ <val o="25a0c7" v="0"/>
+ <val o="25aed7" v="0"/>
+ <val o="25bce7" v="0"/>
+ <val o="25caf8" v="0"/>
+ <val o="25d907" v="0"/>
+ <val o="25e718" v="0"/>
+ <val o="25f527" v="0"/>
+ <val o="260338" v="0"/>
+ <val o="261149" v="0"/>
+ <val o="261f59" v="0"/>
+ <val o="262d68" v="0"/>
+ <val o="263b83" v="0"/>
+ <val o="264986" v="0"/>
+ <val o="265795" v="0"/>
+ <val o="2665a6" v="0"/>
+ <val o="2673b5" v="0"/>
+ <val o="2681c6" v="0"/>
+ <val o="268fd5" v="0"/>
+ <val o="269de6" v="0"/>
+ <val o="26abf6" v="0"/>
+ <val o="26ba06" v="0"/>
+ <val o="26c817" v="0"/>
+ <val o="26d62b" v="0"/>
+ <val o="26e436" v="0"/>
+ <val o="26f247" v="0"/>
+ <val o="270057" v="0"/>
+ <val o="270e67" v="0"/>
+ <val o="271c77" v="0"/>
+ <val o="272a87" v="0"/>
+ <val o="273897" v="0"/>
+ <val o="2746a8" v="0"/>
+ <val o="2754b9" v="0"/>
+ <val o="2762c7" v="0"/>
+ <val o="2770d8" v="0"/>
+ <val o="277ee7" v="0"/>
+ </par>
+ <par memind="8604" h="3dc1a8de">
+ <val o="0" v="21.043"/>
+ <val o="e08" v="20.051"/>
+ <val o="1c32" v="19.818"/>
+ <val o="2a3c" v="19.554"/>
+ <val o="3835" v="18.951"/>
+ <val o="4645" v="18.853"/>
+ <val o="5455" v="22.398"/>
+ <val o="6265" v="24.492"/>
+ <val o="7075" v="29.206"/>
+ <val o="7e85" v="35.063"/>
+ <val o="8c96" v="35.07"/>
+ <val o="9aa5" v="33.585"/>
+ <val o="a8b6" v="30.77"/>
+ <val o="b6c5" v="29.141"/>
+ <val o="c4d7" v="0.061"/>
+ <val o="d30b" v="0.061"/>
+ <val o="e0f6" v="0.06"/>
+ <val o="ef06" v="0.059"/>
+ <val o="fd17" v="0.06"/>
+ <val o="10b27" v="0.062"/>
+ <val o="11937" v="0.063"/>
+ <val o="12746" v="0.061"/>
+ <val o="13556" v="0.062"/>
+ <val o="14366" v="0.066"/>
+ <val o="15181" v="0.07"/>
+ <val o="15f85" v="0.064"/>
+ <val o="16d95" v="0.065"/>
+ <val o="17ba4" v="0.064"/>
+ <val o="189b5" v="0.063"/>
+ <val o="197c4" v="0.064"/>
+ <val o="1a5d5" v="0.066"/>
+ <val o="1b3e6" v="0.067"/>
+ <val o="1c1f6" v="0.066"/>
+ <val o="1d005" v="0.062"/>
+ <val o="1de15" v="0.062"/>
+ <val o="1ec25" v="0.063"/>
+ <val o="1fa36" v="0.066"/>
+ <val o="20845" v="0.066"/>
+ <val o="21656" v="0.066"/>
+ <val o="22465" v="0.064"/>
+ <val o="23276" v="0.063"/>
+ <val o="24086" v="0.061"/>
+ <val o="24e99" v="0.061"/>
+ <val o="25ca7" v="0.062"/>
+ <val o="26ab7" v="0.062"/>
+ <val o="278c6" v="0.061"/>
+ <val o="286d6" v="0.063"/>
+ <val o="294e6" v="0.066"/>
+ <val o="2a301" v="0.067"/>
+ <val o="2b105" v="0.06"/>
+ <val o="2bf15" v="0.061"/>
+ <val o="2cd25" v="0.063"/>
+ <val o="2db35" v="0.062"/>
+ <val o="2e946" v="0.061"/>
+ <val o="2f755" v="0.058"/>
+ <val o="30566" v="0.066"/>
+ <val o="31375" v="0.064"/>
+ <val o="3219e" v="0.066"/>
+ <val o="32f96" v="0.063"/>
+ <val o="33da6" v="0.062"/>
+ <val o="34bb6" v="0.063"/>
+ <val o="359de" v="0.064"/>
+ <val o="367d6" v="0.064"/>
+ <val o="375e6" v="0.062"/>
+ <val o="3840e" v="0.059"/>
+ <val o="3921e" v="0.06"/>
+ <val o="3a016" v="0.06"/>
+ <val o="3ae27" v="0.063"/>
+ <val o="3bc36" v="0.062"/>
+ <val o="3ca47" v="0.059"/>
+ <val o="3d856" v="0.062"/>
+ <val o="3e667" v="0.064"/>
+ <val o="3f481" v="0.068"/>
+ <val o="40285" v="0.065"/>
+ <val o="41095" v="0.066"/>
+ <val o="41ea5" v="0.065"/>
+ <val o="42cb5" v="0.066"/>
+ <val o="43ac5" v="0.064"/>
+ <val o="448d5" v="0.061"/>
+ <val o="456e6" v="0.062"/>
+ <val o="464f5" v="0.062"/>
+ <val o="480ff" v="0.058"/>
+ <val o="48f0e" v="0.056"/>
+ <val o="49d1d" v="0.057"/>
+ <val o="4ab46" v="0.056"/>
+ <val o="4b955" v="0.057"/>
+ <val o="4c769" v="0.055"/>
+ <val o="4d577" v="0.057"/>
+ <val o="4e387" v="0.057"/>
+ <val o="4f196" v="0.057"/>
+ <val o="4ffa6" v="0.058"/>
+ <val o="50dd0" v="0.06"/>
+ <val o="51bc6" v="0.062"/>
+ <val o="529d6" v="0.062"/>
+ <val o="537e7" v="0.065"/>
+ <val o="54600" v="0.067"/>
+ <val o="55406" v="0.065"/>
+ <val o="56215" v="0.065"/>
+ <val o="57026" v="0.065"/>
+ <val o="57e36" v="0.064"/>
+ <val o="58c46" v="0.063"/>
+ <val o="59a70" v="0.063"/>
+ <val o="5a867" v="0.06"/>
+ <val o="5b676" v="0.06"/>
+ <val o="5c487" v="0.056"/>
+ <val o="5d296" v="0.058"/>
+ <val o="5e0a9" v="0.06"/>
+ <val o="5eeb8" v="0.062"/>
+ <val o="5fcc6" v="0.061"/>
+ <val o="60ad7" v="0.057"/>
+ <val o="618e7" v="0.057"/>
+ <val o="626f7" v="0.059"/>
+ <val o="63507" v="0.059"/>
+ <val o="64317" v="0.061"/>
+ <val o="65127" v="0.062"/>
+ <val o="65f37" v="0.063"/>
+ <val o="66d46" v="0.062"/>
+ <val o="67b57" v="0.062"/>
+ <val o="68967" v="0.065"/>
+ <val o="69782" v="0.065"/>
+ <val o="6a586" v="0.064"/>
+ <val o="6b395" v="0.065"/>
+ <val o="6c1a6" v="0.066"/>
+ <val o="6cfb5" v="0.064"/>
+ <val o="6ddc6" v="0.063"/>
+ <val o="6ebd6" v="0.059"/>
+ <val o="6f9e6" v="0.061"/>
+ <val o="707f6" v="0.062"/>
+ <val o="71607" v="0.059"/>
+ <val o="72417" v="0.058"/>
+ <val o="73227" v="0.056"/>
+ <val o="74037" v="0.061"/>
+ <val o="74e47" v="0.061"/>
+ <val o="75c57" v="0.058"/>
+ <val o="76a63" v="0.058"/>
+ <val o="77873" v="0.058"/>
+ <val o="78680" v="0.058"/>
+ <val o="7948f" v="0.058"/>
+ <val o="7a29f" v="0.06"/>
+ <val o="7b0af" v="0.062"/>
+ <val o="7bebf" v="0.062"/>
+ <val o="7cccf" v="0.064"/>
+ <val o="7dadf" v="0.065"/>
+ <val o="7e8fa" v="0.065"/>
+ <val o="7f70a" v="0.067"/>
+ <val o="8051a" v="0.067"/>
+ <val o="8132a" v="0.066"/>
+ <val o="8213a" v="0.066"/>
+ <val o="82f4a" v="0.067"/>
+ <val o="83d5a" v="0.062"/>
+ <val o="84b6a" v="0.06"/>
+ <val o="8597a" v="0.059"/>
+ <val o="8678b" v="0.059"/>
+ <val o="8759b" v="0.057"/>
+ <val o="883ac" v="0.06"/>
+ <val o="891bb" v="0.061"/>
+ <val o="89fca" v="0.06"/>
+ <val o="8adda" v="0.059"/>
+ <val o="8bbeb" v="0.059"/>
+ <val o="8c9fc" v="0.058"/>
+ <val o="8d80b" v="0.058"/>
+ <val o="8e61a" v="0.059"/>
+ <val o="8f42a" v="0.06"/>
+ <val o="9023a" v="0.061"/>
+ <val o="9104a" v="0.062"/>
+ <val o="91e5a" v="0.06"/>
+ <val o="92c6a" v="0.063"/>
+ <val o="93a84" v="0.067"/>
+ <val o="94885" v="0.064"/>
+ <val o="95694" v="0.064"/>
+ <val o="964a5" v="0.065"/>
+ <val o="972b4" v="0.064"/>
+ <val o="980c5" v="0.062"/>
+ <val o="98ed4" v="0.065"/>
+ <val o="99ce5" v="0.064"/>
+ <val o="9aaf5" v="0.061"/>
+ <val o="9b906" v="0.061"/>
+ <val o="9c716" v="0.062"/>
+ <val o="9d526" v="0.062"/>
+ <val o="9e336" v="0.063"/>
+ <val o="9f145" v="0.063"/>
+ <val o="9ff56" v="0.061"/>
+ <val o="a0d65" v="0.061"/>
+ <val o="a1b77" v="30.22"/>
+ <val o="a2986" v="16.054"/>
+ <val o="a3795" v="10.22"/>
+ <val o="a45a7" v="3.839"/>
+ <val o="a53b6" v="3.301"/>
+ <val o="a61c7" v="4.19"/>
+ <val o="a6fd6" v="2.002"/>
+ <val o="a7e00" v="4.911"/>
+ <val o="a8c00" v="7.897"/>
+ <val o="a9a05" v="2.934"/>
+ <val o="aa815" v="1.487"/>
+ <val o="ab625" v="2.196"/>
+ <val o="ac435" v="1.679"/>
+ <val o="ad245" v="5.984"/>
+ <val o="ae055" v="10.661"/>
+ <val o="aee65" v="3.653"/>
+ <val o="afc75" v="7.252"/>
+ <val o="b0a85" v="19.708"/>
+ <val o="b26a6" v="21.128"/>
+ <val o="b34b6" v="18.358"/>
+ <val o="b42c6" v="3.456"/>
+ <val o="b50d6" v="4.916"/>
+ <val o="b5ee7" v="7.337"/>
+ <val o="b6cf6" v="7.205"/>
+ <val o="b7b07" v="9.191"/>
+ <val o="b8917" v="8.027"/>
+ <val o="b9728" v="7.688"/>
+ <val o="ba537" v="8.667"/>
+ <val o="bb347" v="7.734"/>
+ <val o="bc157" v="5.148"/>
+ <val o="bcf67" v="5.081"/>
+ <val o="bdd81" v="18.433"/>
+ <val o="beb86" v="4.676"/>
+ <val o="bf995" v="3.97"/>
+ <val o="c07a6" v="2.247"/>
+ <val o="c15b5" v="2.519"/>
+ <val o="c23c6" v="4.784"/>
+ <val o="c31d5" v="10.406"/>
+ <val o="c3fe6" v="5.863"/>
+ <val o="c4df5" v="9.668"/>
+ <val o="c5c06" v="5.194"/>
+ <val o="c6a16" v="5.35"/>
+ <val o="c7826" v="7.745"/>
+ <val o="c8636" v="3.651"/>
+ <val o="c9446" v="4.236"/>
+ <val o="ca256" v="3.281"/>
+ <val o="cb066" v="5.657"/>
+ <val o="cbe76" v="2.249"/>
+ <val o="ccc87" v="12.004"/>
+ <val o="cda96" v="15.833"/>
+ <val o="ce8a8" v="11.981"/>
+ <val o="cf6b7" v="15.145"/>
+ <val o="d04c8" v="12.386"/>
+ <val o="d12d7" v="8.53"/>
+ <val o="d20e7" v="1.474"/>
+ <val o="d2f02" v="7.441"/>
+ <val o="d3d05" v="4.262"/>
+ <val o="d4b15" v="3.805"/>
+ <val o="d5926" v="3.752"/>
+ <val o="d6735" v="5.538"/>
+ <val o="d7546" v="9.524"/>
+ <val o="d8355" v="1.988"/>
+ <val o="d9166" v="4.159"/>
+ <val o="d9f75" v="9.621"/>
+ <val o="dad87" v="17.704"/>
+ <val o="dbb97" v="19.171"/>
+ <val o="dc9a8" v="19.252"/>
+ <val o="dd7b7" v="14.961"/>
+ <val o="de5c6" v="12.816"/>
+ <val o="df3d7" v="13.113"/>
+ <val o="e01d7" v="13.435"/>
+ <val o="e0fe5" v="13.283"/>
+ <val o="e1df5" v="13.989"/>
+ <val o="e2c04" v="18.098"/>
+ <val o="e3a14" v="17.742"/>
+ <val o="e4824" v="15.229"/>
+ <val o="e5634" v="15.263"/>
+ <val o="e6444" v="11.968"/>
+ <val o="e7255" v="9.893"/>
+ <val o="e806f" v="7.997"/>
+ <val o="e8e7f" v="13.888"/>
+ <val o="e9c8e" v="6.336"/>
+ <val o="eaa9f" v="5.634"/>
+ <val o="eb8ae" v="7.369"/>
+ <val o="ec6bf" v="14.276"/>
+ <val o="ed4ce" v="9.674"/>
+ <val o="ee2df" v="12.81"/>
+ <val o="ef0ef" v="14.985"/>
+ <val o="eff01" v="21.531"/>
+ <val o="f0d10" v="21.038"/>
+ <val o="f1b20" v="22.908"/>
+ <val o="f2930" v="20.891"/>
+ <val o="f3740" v="22.234"/>
+ <val o="f4551" v="22.517"/>
+ <val o="f5361" v="24.172"/>
+ <val o="f6172" v="23.008"/>
+ <val o="f6f80" v="23.475"/>
+ <val o="f7d91" v="22.059"/>
+ <val o="f8ba1" v="18.671"/>
+ <val o="f99b1" v="18.447"/>
+ <val o="fa7c0" v="15.862"/>
+ <val o="fb5d1" v="16.38"/>
+ <val o="fc3e0" v="15.165"/>
+ <val o="fd1fb" v="12.335"/>
+ <val o="fe00b" v="12.283"/>
+ <val o="fee1c" v="8.941"/>
+ <val o="ffc2c" v="8.837"/>
+ <val o="100a3b" v="8.793"/>
+ <val o="10184c" v="10.043"/>
+ <val o="10265b" v="13.932"/>
+ <val o="10346c" v="15.974"/>
+ <val o="10427b" v="19.167"/>
+ <val o="10508d" v="22.237"/>
+ <val o="105e9d" v="21.533"/>
+ <val o="106cad" v="23.309"/>
+ <val o="107abd" v="20.333"/>
+ <val o="1088cd" v="18.556"/>
+ <val o="1096de" v="20.163"/>
+ <val o="10a4ed" v="19.978"/>
+ <val o="10b2fe" v="21.155"/>
+ <val o="10c10d" v="23.964"/>
+ <val o="10cf1e" v="21.874"/>
+ <val o="10dd2e" v="19.591"/>
+ <val o="10eb66" v="20.234"/>
+ <val o="10f94e" v="17.32"/>
+ <val o="11075e" v="16.556"/>
+ <val o="11156d" v="13.217"/>
+ <val o="112388" v="12.271"/>
+ <val o="113187" v="8.967"/>
+ <val o="113fb0" v="8.319"/>
+ <val o="114da6" v="8.357"/>
+ <val o="115bb6" v="8.49"/>
+ <val o="1169c6" v="10.458"/>
+ <val o="1177d6" v="13.998"/>
+ <val o="1185e8" v="15.461"/>
+ <val o="1193f7" v="18.331"/>
+ <val o="11a208" v="22.284"/>
+ <val o="11b017" v="19.151"/>
+ <val o="11be2f" v="23.464"/>
+ <val o="11cc37" v="20.211"/>
+ <val o="11da47" v="19.83"/>
+ <val o="11e857" v="20.8"/>
+ <val o="11f667" v="18.042"/>
+ <val o="120578" v="0.018"/>
+ <val o="121386" v="0.02"/>
+ <val o="122196" v="0.02"/>
+ <val o="122fa6" v="0.017"/>
+ <val o="123db5" v="0.015"/>
+ <val o="124bc5" v="0.014"/>
+ <val o="1259d5" v="0.011"/>
+ <val o="1267e4" v="0.01"/>
+ <val o="127600" v="0.009"/>
+ <val o="128305" v="0.008"/>
+ <val o="129115" v="0.008"/>
+ <val o="129f25" v="0.008"/>
+ <val o="12ad35" v="0.007"/>
+ <val o="12bb45" v="0.007"/>
+ <val o="12c954" v="0.01"/>
+ <val o="12d766" v="0.011"/>
+ <val o="12e575" v="0.016"/>
+ <val o="12f386" v="0.013"/>
+ <val o="130196" v="0.019"/>
+ <val o="130fa6" v="0.014"/>
+ <val o="131db7" v="0.015"/>
+ <val o="132bc5" v="0.015"/>
+ <val o="1339d4" v="0.269"/>
+ <val o="1347e5" v="0.124"/>
+ <val o="1355f4" v="0.16"/>
+ <val o="136404" v="0.227"/>
+ <val o="137214" v="0.243"/>
+ <val o="138024" v="0.236"/>
+ <val o="138e33" v="0.239"/>
+ <val o="139c44" v="0.074"/>
+ <val o="13aa54" v="0.086"/>
+ <val o="13b865" v="0.031"/>
+ <val o="13c67e" v="0.412"/>
+ <val o="13d48e" v="0.199"/>
+ <val o="13e29e" v="0.15"/>
+ <val o="13f0ae" v="0.14"/>
+ <val o="13febf" v="0.218"/>
+ <val o="140ccf" v="0.309"/>
+ <val o="141adf" v="0.206"/>
+ <val o="1428ef" v="0.032"/>
+ <val o="1436ff" v="0.065"/>
+ <val o="14450f" v="0.054"/>
+ <val o="14531f" v="0.037"/>
+ <val o="146130" v="0.025"/>
+ <val o="146f40" v="0.09"/>
+ <val o="147d44" v="0.03"/>
+ <val o="148b57" v="0.038"/>
+ <val o="149965" v="0.026"/>
+ <val o="14a775" v="0.109"/>
+ <val o="14b584" v="0.086"/>
+ <val o="14c397" v="0.251"/>
+ <val o="14d1a4" v="0.225"/>
+ <val o="14dfb6" v="0.193"/>
+ <val o="14edc5" v="0.103"/>
+ <val o="14fbd5" v="0.044"/>
+ <val o="1509e5" v="0.023"/>
+ <val o="1517ff" v="0.068"/>
+ <val o="152605" v="0.157"/>
+ <val o="153415" v="0.105"/>
+ <val o="154225" v="0.097"/>
+ <val o="155035" v="0.127"/>
+ <val o="155e45" v="0.189"/>
+ <val o="156c55" v="0.281"/>
+ <val o="157a65" v="0.162"/>
+ <val o="158875" v="0.15"/>
+ <val o="159686" v="0.246"/>
+ <val o="15a495" v="0.211"/>
+ <val o="15b2a6" v="0.188"/>
+ <val o="15c0b6" v="0.105"/>
+ <val o="15cec6" v="0.092"/>
+ <val o="15dcd5" v="0.099"/>
+ <val o="15eae6" v="0.112"/>
+ <val o="15f8f5" v="0.29"/>
+ <val o="160706" v="0.06"/>
+ <val o="161517" v="0.107"/>
+ <val o="162326" v="0.072"/>
+ <val o="163137" v="0.064"/>
+ <val o="163f46" v="0.101"/>
+ <val o="164d57" v="0.045"/>
+ <val o="165b67" v="0.035"/>
+ <val o="166982" v="0.057"/>
+ <val o="167786" v="0.07"/>
+ <val o="168596" v="0.035"/>
+ <val o="1693a6" v="0.029"/>
+ <val o="16a1b5" v="0.026"/>
+ <val o="16afc6" v="0.075"/>
+ <val o="16bdd5" v="0.178"/>
+ <val o="16cbe6" v="0.221"/>
+ <val o="16d9f6" v="0.109"/>
+ <val o="16e807" v="0.578"/>
+ <val o="16f616" v="0.633"/>
+ <val o="170429" v="0.678"/>
+ <val o="171236" v="0.456"/>
+ <val o="172047" v="0.461"/>
+ <val o="172e57" v="0.475"/>
+ <val o="173c67" v="0.487"/>
+ <val o="174a77" v="0.565"/>
+ <val o="175887" v="0.597"/>
+ <val o="176694" v="34.372"/>
+ <val o="1774a3" v="33.056"/>
+ <val o="1782b3" v="34.198"/>
+ <val o="1790c5" v="31.148"/>
+ <val o="179ed4" v="26.734"/>
+ <val o="17ace4" v="26.883"/>
+ <val o="17bafd" v="28.046"/>
+ <val o="17c90f" v="25.107"/>
+ <val o="17d71e" v="24.826"/>
+ <val o="17e52f" v="25.129"/>
+ <val o="17f33f" v="22.979"/>
+ <val o="18014f" v="22.968"/>
+ <val o="180f5f" v="28.04"/>
+ <val o="181d6e" v="30.608"/>
+ <val o="182b7f" v="35.156"/>
+ <val o="18398f" v="61.079"/>
+ <val o="1847a1" v="61.118"/>
+ <val o="1855af" v="58.214"/>
+ <val o="1863c0" v="54.149"/>
+ <val o="1871cf" v="56.141"/>
+ <val o="187fe0" v="53.757"/>
+ <val o="188def" v="57.188"/>
+ <val o="189c00" v="53.596"/>
+ <val o="18b80d" v="36.269"/>
+ <val o="18c61c" v="36.626"/>
+ <val o="18d42c" v="35.102"/>
+ <val o="18e23b" v="29.855"/>
+ <val o="18f04b" v="28.307"/>
+ <val o="18fe5e" v="25.364"/>
+ <val o="190c76" v="19.996"/>
+ <val o="191a86" v="19.748"/>
+ <val o="192896" v="19.345"/>
+ <val o="1936a6" v="18.873"/>
+ <val o="1944b7" v="18.11"/>
+ <val o="1952c6" v="20.032"/>
+ <val o="1960d7" v="25.137"/>
+ <val o="196ee6" v="27.508"/>
+ <val o="197cf8" v="29.449"/>
+ <val o="198b0f" v="27.372"/>
+ <val o="19991f" v="30.562"/>
+ <val o="19b541" v="29.963"/>
+ <val o="19c34d" v="28.336"/>
+ <val o="19d15e" v="28.102"/>
+ <val o="19df80" v="28.864"/>
+ <val o="19ed90" v="28.278"/>
+ <val o="19eebe" v="28.399"/>
+ <val o="19fb8e" v="11.016"/>
+ <val o="1a09a0" v="14.155"/>
+ <val o="1a17ae" v="19.132"/>
+ <val o="1a25be" v="20.28"/>
+ <val o="1a33cd" v="11.28"/>
+ <val o="1a41dd" v="12.25"/>
+ <val o="1a4fed" v="16.561"/>
+ <val o="1a5e08" v="15.15"/>
+ <val o="1a6c05" v="9.953"/>
+ <val o="1a7a15" v="12.732"/>
+ <val o="1a8826" v="12.958"/>
+ <val o="1a9637" v="9.685"/>
+ <val o="1aa445" v="6.805"/>
+ <val o="1ab255" v="4.559"/>
+ <val o="1ac065" v="10.632"/>
+ <val o="1ace75" v="14.64"/>
+ <val o="1adc87" v="14.182"/>
+ <val o="1aea96" v="13.717"/>
+ <val o="1af8a7" v="15.071"/>
+ <val o="1b06b7" v="13.236"/>
+ <val o="1b14c6" v="12.746"/>
+ <val o="1c7460" v="3.999"/>
+ <val o="1c8270" v="2.186"/>
+ <val o="1c907e" v="16.585"/>
+ <val o="1c9e8f" v="14.378"/>
+ <val o="1caca2" v="16.041"/>
+ <val o="1cbab1" v="15.799"/>
+ <val o="1cc8c1" v="29.25"/>
+ <val o="1cd6d0" v="27.621"/>
+ <val o="1ce4de" v="25.453"/>
+ <val o="1cf2f0" v="24.369"/>
+ <val o="1d0109" v="25.348"/>
+ <val o="1d0f06" v="28.687"/>
+ <val o="1d1d15" v="28.373"/>
+ <val o="1d2b25" v="28.801"/>
+ <val o="1d3935" v="30.045"/>
+ <val o="1d4745" v="30.644"/>
+ <val o="1d5555" v="30.354"/>
+ <val o="1d6366" v="24.933"/>
+ <val o="1d7175" v="23.813"/>
+ <val o="1d7f86" v="23.818"/>
+ <val o="1d8d95" v="15.153"/>
+ <val o="1d9ba6" v="16.69"/>
+ <val o="1da9b6" v="16.385"/>
+ <val o="1db7c7" v="15.643"/>
+ <val o="1dc5d5" v="16.269"/>
+ <val o="1dd3e6" v="16.689"/>
+ <val o="1de1f5" v="27.897"/>
+ <val o="1df006" v="31.449"/>
+ <val o="1dfe16" v="31.232"/>
+ <val o="1e0c26" v="32.001"/>
+ <val o="1e1a36" v="31.999"/>
+ <val o="1e2847" v="30.669"/>
+ <val o="1e3659" v="29.185"/>
+ <val o="1e4467" v="27.199"/>
+ <val o="1e5281" v="23.798"/>
+ <val o="1e6086" v="23.566"/>
+ <val o="1e6e96" v="23.035"/>
+ <val o="1e7ca6" v="8.573"/>
+ <val o="1e8ab5" v="7.913"/>
+ <val o="1e98c6" v="7.851"/>
+ <val o="1ea6d5" v="9.845"/>
+ <val o="1eb4e6" v="10.177"/>
+ <val o="1ec2f6" v="11.732"/>
+ <val o="1ed106" v="11.554"/>
+ <val o="1edf16" v="12.067"/>
+ <val o="1eed26" v="11.725"/>
+ <val o="1efb36" v="11.465"/>
+ <val o="1f0946" v="10.851"/>
+ <val o="1f1756" v="10.928"/>
+ <val o="1f2566" v="10.984"/>
+ <val o="1f3376" v="13.626"/>
+ <val o="1f4187" v="19.399"/>
+ <val o="1f4f96" v="16.326"/>
+ <val o="1f5da7" v="15.848"/>
+ <val o="1f6bb6" v="15.785"/>
+ <val o="1f79c7" v="14.319"/>
+ <val o="1f87d6" v="15.77"/>
+ <val o="1f95e7" v="16.295"/>
+ <val o="1fa401" v="13.382"/>
+ <val o="1fb204" v="11.752"/>
+ <val o="1fc016" v="11.694"/>
+ <val o="1fce25" v="9.24"/>
+ <val o="1fdc35" v="8.969"/>
+ <val o="1fea45" v="9.42"/>
+ <val o="1ff855" v="11.299"/>
+ <val o="200665" v="18.06"/>
+ <val o="201475" v="15.989"/>
+ <val o="202286" v="23.363"/>
+ <val o="203095" v="26.071"/>
+ <val o="203ea5" v="29.283"/>
+ <val o="204cb6" v="25.856"/>
+ <val o="205ac6" v="25.235"/>
+ <val o="2068d6" v="26.405"/>
+ <val o="2076e6" v="30.076"/>
+ <val o="2084f6" v="28.433"/>
+ <val o="209306" v="30.271"/>
+ <val o="20a116" v="28.557"/>
+ <val o="20af26" v="24.542"/>
+ <val o="20bd37" v="23.962"/>
+ <val o="20cb46" v="21.242"/>
+ <val o="20d957" v="19.633"/>
+ <val o="20e767" v="18.009"/>
+ <val o="20f581" v="17.798"/>
+ <val o="210386" v="15.304"/>
+ <val o="211194" v="13.453"/>
+ <val o="211fa5" v="13.055"/>
+ <val o="212db5" v="12.872"/>
+ <val o="213bc5" v="13.544"/>
+ <val o="2149d6" v="17.25"/>
+ <val o="2157e5" v="21.046"/>
+ <val o="2165f6" v="25.832"/>
+ <val o="217406" v="27.791"/>
+ <val o="218217" v="28.054"/>
+ <val o="219026" v="27.63"/>
+ <val o="219e39" v="28.457"/>
+ <val o="21ac46" v="27.725"/>
+ <val o="21ba57" v="27.922"/>
+ <val o="21c867" v="28.25"/>
+ <val o="21d677" v="27.539"/>
+ <val o="21e487" v="26.251"/>
+ <val o="21f296" v="25.947"/>
+ <val o="2200a6" v="24.671"/>
+ <val o="220eb7" v="24.383"/>
+ <val o="221cc6" v="22.742"/>
+ <val o="222ad7" v="17.742"/>
+ <val o="2238e7" v="16.117"/>
+ <val o="224701" v="14.548"/>
+ <val o="225505" v="18.418"/>
+ <val o="226315" v="10.147"/>
+ <val o="227125" v="10.648"/>
+ <val o="227f35" v="13.062"/>
+ <val o="228d45" v="17.082"/>
+ <val o="229b54" v="15.723"/>
+ <val o="22a965" v="17.627"/>
+ <val o="22b776" v="21.083"/>
+ <val o="22c586" v="24.293"/>
+ <val o="22d397" v="26.823"/>
+ <val o="22e1a6" v="27.04"/>
+ <val o="22efb6" v="22.091"/>
+ <val o="22fdc7" v="21.514"/>
+ <val o="230bd7" v="20.922"/>
+ <val o="2319e6" v="25.061"/>
+ <val o="2327f6" v="25.959"/>
+ <val o="23361b" v="27.644"/>
+ <val o="234416" v="25.578"/>
+ <val o="235226" v="24.199"/>
+ <val o="236037" v="23.83"/>
+ <val o="236e46" v="22.719"/>
+ <val o="237c57" v="20.952"/>
+ <val o="238a66" v="18.382"/>
+ <val o="239881" v="14.928"/>
+ <val o="23a685" v="14.859"/>
+ <val o="23b495" v="14.081"/>
+ <val o="23c2a4" v="13.309"/>
+ <val o="23d0b5" v="13.726"/>
+ <val o="23dec4" v="15.071"/>
+ <val o="23ecd5" v="17.064"/>
+ <val o="23fae4" v="20.612"/>
+ <val o="2408f6" v="24.891"/>
+ <val o="241706" v="32.942"/>
+ <val o="242518" v="34.247"/>
+ <val o="243325" v="34.787"/>
+ <val o="244137" v="31.176"/>
+ <val o="244f46" v="29.806"/>
+ <val o="246b66" v="30.569"/>
+ <val o="247976" v="29.175"/>
+ <val o="248786" v="34.921"/>
+ <val o="24957e" v="28.767"/>
+ <val o="24a38f" v="25.797"/>
+ <val o="24b19c" v="26.161"/>
+ <val o="24bfac" v="24.769"/>
+ <val o="24cdbc" v="24.053"/>
+ <val o="24dbcd" v="20.28"/>
+ <val o="24e9e5" v="18.22"/>
+ <val o="24f808" v="15.345"/>
+ <val o="250616" v="15.953"/>
+ <val o="251426" v="15.884"/>
+ <val o="252236" v="15.054"/>
+ <val o="253047" v="16.014"/>
+ <val o="253e56" v="19.574"/>
+ <val o="254c67" v="20.065"/>
+ <val o="255a76" v="23.936"/>
+ <val o="256887" v="29.274"/>
+ <val o="257697" v="31.691"/>
+ <val o="2584a8" v="75.154"/>
+ <val o="2592b6" v="41.458"/>
+ <val o="25a0c7" v="21.221"/>
+ <val o="25aed7" v="29.417"/>
+ <val o="25bce7" v="28.597"/>
+ <val o="25caf8" v="27.256"/>
+ <val o="25d907" v="28.925"/>
+ <val o="25e718" v="29.38"/>
+ <val o="25f527" v="26.559"/>
+ <val o="260338" v="25.234"/>
+ <val o="261149" v="23.312"/>
+ <val o="261f59" v="21.317"/>
+ <val o="262d68" v="20.761"/>
+ <val o="263b83" v="16.36"/>
+ <val o="264986" v="15.657"/>
+ <val o="265795" v="16.618"/>
+ <val o="2665a6" v="17.888"/>
+ <val o="2673b5" v="16.861"/>
+ <val o="2681c6" v="16.617"/>
+ <val o="268fd5" v="17.428"/>
+ <val o="269de6" v="18.225"/>
+ <val o="26abf6" v="18.415"/>
+ <val o="26ba06" v="22.126"/>
+ <val o="26c817" v="22.126"/>
+ <val o="26d62b" v="25.782"/>
+ <val o="26e436" v="22.774"/>
+ <val o="26f247" v="22.774"/>
+ <val o="270057" v="22.909"/>
+ <val o="270e67" v="23.139"/>
+ <val o="271c77" v="21.553"/>
+ <val o="272a87" v="23.539"/>
+ <val o="273897" v="23.139"/>
+ <val o="2746a8" v="22.735"/>
+ <val o="2754b9" v="22.335"/>
+ <val o="2762c7" v="23.205"/>
+ <val o="2770d8" v="18.238"/>
+ <val o="277ee7" v="14.136"/>
+ </par>
+ <par memind="9812" h="3dc1a8de">
+ <val o="0" v="114.081"/>
+ <val o="e08" v="117.19"/>
+ <val o="1c32" v="118.964"/>
+ <val o="2a3c" v="120.564"/>
+ <val o="3835" v="118.747"/>
+ <val o="4645" v="116.529"/>
+ <val o="5455" v="109.384"/>
+ <val o="6265" v="121.356"/>
+ <val o="7075" v="119.014"/>
+ <val o="7e85" v="116.226"/>
+ <val o="8c96" v="120.175"/>
+ <val o="9aa5" v="120.949"/>
+ <val o="a8b6" v="124.2"/>
+ <val o="b6c5" v="124.043"/>
+ <val o="c4d7" v="117.761"/>
+ <val o="d30b" v="118.092"/>
+ <val o="e0f6" v="118.354"/>
+ <val o="ef06" v="118.633"/>
+ <val o="fd17" v="118.494"/>
+ <val o="10b27" v="121.243"/>
+ <val o="11937" v="122.278"/>
+ <val o="12746" v="119.689"/>
+ <val o="13556" v="121.165"/>
+ <val o="14366" v="125.688"/>
+ <val o="15181" v="127.517"/>
+ <val o="15f85" v="119.508"/>
+ <val o="16d95" v="121.27"/>
+ <val o="17ba4" v="121.262"/>
+ <val o="189b5" v="120.595"/>
+ <val o="197c4" v="118.725"/>
+ <val o="1a5d5" v="126.913"/>
+ <val o="1b3e6" v="125.984"/>
+ <val o="1c1f6" v="124.971"/>
+ <val o="1d005" v="121.722"/>
+ <val o="1de15" v="122.233"/>
+ <val o="1ec25" v="122.836"/>
+ <val o="1fa36" v="124.125"/>
+ <val o="20845" v="125.105"/>
+ <val o="21656" v="125.266"/>
+ <val o="22465" v="125.381"/>
+ <val o="23276" v="123.688"/>
+ <val o="24086" v="119.437"/>
+ <val o="24e99" v="119.167"/>
+ <val o="25ca7" v="120.334"/>
+ <val o="26ab7" v="119.837"/>
+ <val o="278c6" v="120.109"/>
+ <val o="286d6" v="122.074"/>
+ <val o="294e6" v="125.542"/>
+ <val o="2a301" v="125.638"/>
+ <val o="2b105" v="117.398"/>
+ <val o="2bf15" v="118.807"/>
+ <val o="2cd25" v="119.644"/>
+ <val o="2db35" v="119.674"/>
+ <val o="2e946" v="117.549"/>
+ <val o="2f755" v="113.229"/>
+ <val o="30566" v="125.153"/>
+ <val o="31375" v="124.691"/>
+ <val o="3219e" v="123.556"/>
+ <val o="32f96" v="123.231"/>
+ <val o="33da6" v="123.404"/>
+ <val o="34bb6" v="123.932"/>
+ <val o="359de" v="123.328"/>
+ <val o="367d6" v="122.641"/>
+ <val o="375e6" v="121.544"/>
+ <val o="3840e" v="118.209"/>
+ <val o="3921e" v="118.675"/>
+ <val o="3a016" v="118.325"/>
+ <val o="3ae27" v="121.893"/>
+ <val o="3bc36" v="120.711"/>
+ <val o="3ca47" v="119.854"/>
+ <val o="3d856" v="120.165"/>
+ <val o="3e667" v="122.996"/>
+ <val o="3f481" v="126.557"/>
+ <val o="40285" v="124.061"/>
+ <val o="41095" v="124.874"/>
+ <val o="41ea5" v="125.244"/>
+ <val o="42cb5" v="125.083"/>
+ <val o="43ac5" v="123.182"/>
+ <val o="448d5" v="119.311"/>
+ <val o="456e6" v="122.524"/>
+ <val o="464f5" v="121.173"/>
+ <val o="480ff" v="118.696"/>
+ <val o="48f0e" v="117.559"/>
+ <val o="49d1d" v="118.947"/>
+ <val o="4ab46" v="118.797"/>
+ <val o="4b955" v="117.048"/>
+ <val o="4c769" v="116.182"/>
+ <val o="4d577" v="119.101"/>
+ <val o="4e387" v="119.152"/>
+ <val o="4f196" v="116.814"/>
+ <val o="4ffa6" v="118.943"/>
+ <val o="50dd0" v="120.844"/>
+ <val o="51bc6" v="119.109"/>
+ <val o="529d6" v="120.802"/>
+ <val o="537e7" v="123.095"/>
+ <val o="54600" v="125.922"/>
+ <val o="55406" v="122.082"/>
+ <val o="56215" v="123.001"/>
+ <val o="57026" v="123.033"/>
+ <val o="57e36" v="122.972"/>
+ <val o="58c46" v="120.717"/>
+ <val o="59a70" v="121.599"/>
+ <val o="5a867" v="120.977"/>
+ <val o="5b676" v="119.038"/>
+ <val o="5c487" v="115.798"/>
+ <val o="5d296" v="119.913"/>
+ <val o="5e0a9" v="120.284"/>
+ <val o="5eeb8" v="119.451"/>
+ <val o="5fcc6" v="118.325"/>
+ <val o="60ad7" v="117.111"/>
+ <val o="618e7" v="117.263"/>
+ <val o="626f7" v="120.147"/>
+ <val o="63507" v="117.534"/>
+ <val o="64317" v="118.902"/>
+ <val o="65127" v="120.099"/>
+ <val o="65f37" v="121.434"/>
+ <val o="66d46" v="121.986"/>
+ <val o="67b57" v="120.683"/>
+ <val o="68967" v="122.861"/>
+ <val o="69782" v="119.35"/>
+ <val o="6a586" v="120.845"/>
+ <val o="6b395" v="122.119"/>
+ <val o="6c1a6" v="122.506"/>
+ <val o="6cfb5" v="121.462"/>
+ <val o="6ddc6" v="118.909"/>
+ <val o="6ebd6" v="116.372"/>
+ <val o="6f9e6" v="121.311"/>
+ <val o="707f6" v="119.412"/>
+ <val o="71607" v="118.281"/>
+ <val o="72417" v="118.148"/>
+ <val o="73227" v="117.811"/>
+ <val o="74037" v="121.694"/>
+ <val o="74e47" v="120.755"/>
+ <val o="75c57" v="118.651"/>
+ <val o="76a63" v="118.08"/>
+ <val o="77873" v="118.282"/>
+ <val o="78680" v="113.911"/>
+ <val o="7948f" v="116.941"/>
+ <val o="7a29f" v="119.508"/>
+ <val o="7b0af" v="119.071"/>
+ <val o="7bebf" v="121.146"/>
+ <val o="7cccf" v="121.336"/>
+ <val o="7dadf" v="122.095"/>
+ <val o="7e8fa" v="121.785"/>
+ <val o="7f70a" v="124.065"/>
+ <val o="8051a" v="125.455"/>
+ <val o="8132a" v="126.011"/>
+ <val o="8213a" v="125.018"/>
+ <val o="82f4a" v="122.741"/>
+ <val o="83d5a" v="120.26"/>
+ <val o="84b6a" v="118.856"/>
+ <val o="8597a" v="118.817"/>
+ <val o="8678b" v="117.807"/>
+ <val o="8759b" v="117.444"/>
+ <val o="883ac" v="119.967"/>
+ <val o="891bb" v="121.141"/>
+ <val o="89fca" v="120.259"/>
+ <val o="8adda" v="118.558"/>
+ <val o="8bbeb" v="118.812"/>
+ <val o="8c9fc" v="118.633"/>
+ <val o="8d80b" v="118.948"/>
+ <val o="8e61a" v="117.315"/>
+ <val o="8f42a" v="118.146"/>
+ <val o="9023a" v="120.121"/>
+ <val o="9104a" v="120.561"/>
+ <val o="91e5a" v="118.638"/>
+ <val o="92c6a" v="122.844"/>
+ <val o="93a84" v="125.153"/>
+ <val o="94885" v="123.463"/>
+ <val o="95694" v="122.793"/>
+ <val o="964a5" v="123.093"/>
+ <val o="972b4" v="122.535"/>
+ <val o="980c5" v="120.189"/>
+ <val o="98ed4" v="123.097"/>
+ <val o="99ce5" v="119.336"/>
+ <val o="9aaf5" v="118.5"/>
+ <val o="9b906" v="115.743"/>
+ <val o="9c716" v="119.722"/>
+ <val o="9d526" v="120.222"/>
+ <val o="9e336" v="118.918"/>
+ <val o="9f145" v="117.551"/>
+ <val o="9ff56" v="116.649"/>
+ <val o="a0d65" v="116.52"/>
+ <val o="a1b77" v="116.703"/>
+ <val o="a2986" v="118.806"/>
+ <val o="a3795" v="118.461"/>
+ <val o="a45a7" v="119.593"/>
+ <val o="a53b6" v="119.78"/>
+ <val o="a61c7" v="119.973"/>
+ <val o="a6fd6" v="120.761"/>
+ <val o="a7e00" v="122.782"/>
+ <val o="a8c00" v="125.444"/>
+ <val o="a9a05" v="118.255"/>
+ <val o="aa815" v="119.302"/>
+ <val o="ab625" v="120.149"/>
+ <val o="ac435" v="119.678"/>
+ <val o="ad245" v="117.138"/>
+ <val o="ae055" v="114.681"/>
+ <val o="aee65" v="120.851"/>
+ <val o="afc75" v="119.099"/>
+ <val o="b0a85" v="116.609"/>
+ <val o="b26a6" v="116.729"/>
+ <val o="b34b6" v="118.045"/>
+ <val o="b42c6" v="115.477"/>
+ <val o="b50d6" v="115.891"/>
+ <val o="b5ee7" v="114.24"/>
+ <val o="b6cf6" v="122.794"/>
+ <val o="b7b07" v="119.002"/>
+ <val o="b8917" v="118.701"/>
+ <val o="b9728" v="119.602"/>
+ <val o="ba537" v="120.963"/>
+ <val o="bb347" v="119.924"/>
+ <val o="bc157" v="120.628"/>
+ <val o="bcf67" v="123.122"/>
+ <val o="bdd81" v="118.683"/>
+ <val o="beb86" v="118.301"/>
+ <val o="bf995" v="118.882"/>
+ <val o="c07a6" v="120.187"/>
+ <val o="c15b5" v="119.576"/>
+ <val o="c23c6" v="118.243"/>
+ <val o="c31d5" v="115.692"/>
+ <val o="c3fe6" v="117.56"/>
+ <val o="c4df5" v="116.057"/>
+ <val o="c5c06" v="117.411"/>
+ <val o="c6a16" v="117.486"/>
+ <val o="c7826" v="116.745"/>
+ <val o="c8636" v="118.265"/>
+ <val o="c9446" v="118.202"/>
+ <val o="ca256" v="118.004"/>
+ <val o="cb066" v="117.255"/>
+ <val o="cbe76" v="122.71"/>
+ <val o="ccc87" v="118.736"/>
+ <val o="cda96" v="116.734"/>
+ <val o="ce8a8" v="118.339"/>
+ <val o="cf6b7" v="118.66"/>
+ <val o="d04c8" v="119.703"/>
+ <val o="d12d7" v="121.536"/>
+ <val o="d20e7" v="123.419"/>
+ <val o="d2f02" v="126.186"/>
+ <val o="d3d05" v="119.31"/>
+ <val o="d4b15" v="120.58"/>
+ <val o="d5926" v="120.857"/>
+ <val o="d6735" v="119.582"/>
+ <val o="d7546" v="117.426"/>
+ <val o="d8355" v="124.349"/>
+ <val o="d9166" v="122.435"/>
+ <val o="d9f75" v="120.692"/>
+ <val o="dad87" v="117.233"/>
+ <val o="dbb97" v="116.862"/>
+ <val o="dc9a8" v="116.728"/>
+ <val o="dd7b7" v="118.212"/>
+ <val o="de5c6" v="117.857"/>
+ <val o="df3d7" v="117.176"/>
+ <val o="e01d7" v="117.271"/>
+ <val o="e0fe5" v="116.796"/>
+ <val o="e1df5" v="117.361"/>
+ <val o="e2c04" v="119.769"/>
+ <val o="e3a14" v="121.05"/>
+ <val o="e4824" v="120.921"/>
+ <val o="e5634" v="122.497"/>
+ <val o="e6444" v="120.677"/>
+ <val o="e7255" v="122.67"/>
+ <val o="e806f" v="123.778"/>
+ <val o="e8e7f" v="116.655"/>
+ <val o="e9c8e" v="118.109"/>
+ <val o="eaa9f" v="118.372"/>
+ <val o="eb8ae" v="117.527"/>
+ <val o="ec6bf" v="113.518"/>
+ <val o="ed4ce" v="123.496"/>
+ <val o="ee2df" v="120.611"/>
+ <val o="ef0ef" v="118.704"/>
+ <val o="eff01" v="115.651"/>
+ <val o="f0d10" v="117.487"/>
+ <val o="f1b20" v="117.186"/>
+ <val o="f2930" v="121.114"/>
+ <val o="f3740" v="117.611"/>
+ <val o="f4551" v="117.892"/>
+ <val o="f5361" v="117.718"/>
+ <val o="f6172" v="117.584"/>
+ <val o="f6f80" v="117.38"/>
+ <val o="f7d91" v="119.222"/>
+ <val o="f8ba1" v="121.037"/>
+ <val o="f99b1" v="120.221"/>
+ <val o="fa7c0" v="118.379"/>
+ <val o="fb5d1" v="118.238"/>
+ <val o="fc3e0" v="123.037"/>
+ <val o="fd1fb" v="123.007"/>
+ <val o="fe00b" v="126.294"/>
+ <val o="fee1c" v="123.682"/>
+ <val o="ffc2c" v="123.591"/>
+ <val o="100a3b" v="122.918"/>
+ <val o="10184c" v="121.387"/>
+ <val o="10265b" v="117.586"/>
+ <val o="10346c" v="117.716"/>
+ <val o="10427b" v="119.191"/>
+ <val o="10508d" v="117.355"/>
+ <val o="105e9d" v="117.862"/>
+ <val o="106cad" v="117.531"/>
+ <val o="107abd" v="119.886"/>
+ <val o="1088cd" v="119.426"/>
+ <val o="1096de" v="118.72"/>
+ <val o="10a4ed" v="119.004"/>
+ <val o="10b2fe" v="118.725"/>
+ <val o="10c10d" v="116.196"/>
+ <val o="10cf1e" v="118.111"/>
+ <val o="10dd2e" v="119.001"/>
+ <val o="10eb66" v="120.963"/>
+ <val o="10f94e" v="121.34"/>
+ <val o="11075e" v="119.151"/>
+ <val o="11156d" v="120.797"/>
+ <val o="112388" v="123.519"/>
+ <val o="113187" v="122.366"/>
+ <val o="113fb0" v="123.381"/>
+ <val o="114da6" v="123.296"/>
+ <val o="115bb6" v="123.047"/>
+ <val o="1169c6" v="120.874"/>
+ <val o="1177d6" v="118.017"/>
+ <val o="1185e8" v="118.388"/>
+ <val o="1193f7" v="117.753"/>
+ <val o="11a208" v="119.761"/>
+ <val o="11b017" v="121.547"/>
+ <val o="11be2f" v="122.028"/>
+ <val o="11cc37" v="122.195"/>
+ <val o="11da47" v="121.783"/>
+ <val o="11e857" v="120.581"/>
+ <val o="11f667" v="121.685"/>
+ <val o="120578" v="120.972"/>
+ <val o="121386" v="116.836"/>
+ <val o="122196" v="117.633"/>
+ <val o="122fa6" v="118.83"/>
+ <val o="123db5" v="120.746"/>
+ <val o="124bc5" v="122.541"/>
+ <val o="1259d5" v="120.249"/>
+ <val o="1267e4" v="122.708"/>
+ <val o="127600" v="124.538"/>
+ <val o="128305" v="125.289"/>
+ <val o="129115" v="125.325"/>
+ <val o="129f25" v="125.49"/>
+ <val o="12ad35" v="124.672"/>
+ <val o="12bb45" v="122.813"/>
+ <val o="12c954" v="121.573"/>
+ <val o="12d766" v="120.719"/>
+ <val o="12e575" v="119.706"/>
+ <val o="12f386" v="116.935"/>
+ <val o="130196" v="117.255"/>
+ <val o="130fa6" v="118.365"/>
+ <val o="131db7" v="119.829"/>
+ <val o="132bc5" v="119.607"/>
+ <val o="1339d4" v="0.109"/>
+ <val o="1347e5" v="0.109"/>
+ <val o="1355f4" v="0.108"/>
+ <val o="136404" v="0.106"/>
+ <val o="137214" v="0.106"/>
+ <val o="138024" v="0.107"/>
+ <val o="138e33" v="0.108"/>
+ <val o="139c44" v="0.109"/>
+ <val o="13aa54" v="0.108"/>
+ <val o="13b865" v="0.109"/>
+ <val o="13c67e" v="0.101"/>
+ <val o="13d48e" v="0.104"/>
+ <val o="13e29e" v="0.106"/>
+ <val o="13f0ae" v="0.106"/>
+ <val o="13febf" v="0.104"/>
+ <val o="140ccf" v="0.102"/>
+ <val o="141adf" v="0.104"/>
+ <val o="1428ef" v="0.108"/>
+ <val o="1436ff" v="0.107"/>
+ <val o="14450f" v="0.107"/>
+ <val o="14531f" v="0.107"/>
+ <val o="146130" v="0.108"/>
+ <val o="146f40" v="0.11"/>
+ <val o="147d44" v="0.108"/>
+ <val o="148b57" v="0.108"/>
+ <val o="149965" v="0.108"/>
+ <val o="14a775" v="0.106"/>
+ <val o="14b584" v="0.11"/>
+ <val o="14c397" v="0.107"/>
+ <val o="14d1a4" v="0.107"/>
+ <val o="14dfb6" v="0.108"/>
+ <val o="14edc5" v="0.11"/>
+ <val o="14fbd5" v="0.112"/>
+ <val o="1509e5" v="0.112"/>
+ <val o="1517ff" v="0.115"/>
+ <val o="152605" v="0.108"/>
+ <val o="153415" v="0.109"/>
+ <val o="154225" v="0.11"/>
+ <val o="155035" v="0.109"/>
+ <val o="155e45" v="0.107"/>
+ <val o="156c55" v="0.104"/>
+ <val o="157a65" v="0.107"/>
+ <val o="158875" v="0.107"/>
+ <val o="159686" v="0.106"/>
+ <val o="15a495" v="0.107"/>
+ <val o="15b2a6" v="0.108"/>
+ <val o="15c0b6" v="0.109"/>
+ <val o="15cec6" v="0.109"/>
+ <val o="15dcd5" v="0.108"/>
+ <val o="15eae6" v="0.108"/>
+ <val o="15f8f5" v="0.104"/>
+ <val o="160706" v="0.11"/>
+ <val o="161517" v="0.109"/>
+ <val o="162326" v="0.11"/>
+ <val o="163137" v="0.111"/>
+ <val o="163f46" v="0.109"/>
+ <val o="164d57" v="0.11"/>
+ <val o="165b67" v="0.112"/>
+ <val o="166982" v="0.111"/>
+ <val o="167786" v="0.112"/>
+ <val o="168596" v="0.113"/>
+ <val o="1693a6" v="0.113"/>
+ <val o="16a1b5" v="0.112"/>
+ <val o="16afc6" v="0.111"/>
+ <val o="16bdd5" v="0.109"/>
+ <val o="16cbe6" v="0.107"/>
+ <val o="16d9f6" v="0.111"/>
+ <val o="16e807" v="0.11"/>
+ <val o="16f616" v="0.11"/>
+ <val o="170429" v="0.111"/>
+ <val o="171236" v="0.112"/>
+ <val o="172047" v="0.112"/>
+ <val o="172e57" v="0.111"/>
+ <val o="173c67" v="0.111"/>
+ <val o="174a77" v="0.11"/>
+ <val o="175887" v="0.108"/>
+ <val o="176694" v="118.351"/>
+ <val o="1774a3" v="119.763"/>
+ <val o="1782b3" v="120.872"/>
+ <val o="1790c5" v="121.443"/>
+ <val o="179ed4" v="124.587"/>
+ <val o="17ace4" v="127.119"/>
+ <val o="17bafd" v="128.887"/>
+ <val o="17c90f" v="127.107"/>
+ <val o="17d71e" v="127.1"/>
+ <val o="17e52f" v="127.35"/>
+ <val o="17f33f" v="126.552"/>
+ <val o="18014f" v="124.71"/>
+ <val o="180f5f" v="124.077"/>
+ <val o="181d6e" v="125.099"/>
+ <val o="182b7f" v="125.025"/>
+ <val o="18398f" v="123.954"/>
+ <val o="1847a1" v="123.641"/>
+ <val o="1855af" v="124.308"/>
+ <val o="1863c0" v="126.201"/>
+ <val o="1871cf" v="125.426"/>
+ <val o="187fe0" v="125.045"/>
+ <val o="188def" v="124.868"/>
+ <val o="189c00" v="123.854"/>
+ <val o="18b80d" v="117.177"/>
+ <val o="18c61c" v="120.985"/>
+ <val o="18d42c" v="121.689"/>
+ <val o="18e23b" v="121.514"/>
+ <val o="18f04b" v="123.76"/>
+ <val o="18fe5e" v="125.848"/>
+ <val o="190c76" v="123.162"/>
+ <val o="191a86" v="124.87"/>
+ <val o="192896" v="126.457"/>
+ <val o="1936a6" v="126.565"/>
+ <val o="1944b7" v="125.821"/>
+ <val o="1952c6" v="123.654"/>
+ <val o="1960d7" v="120.985"/>
+ <val o="196ee6" v="121.019"/>
+ <val o="197cf8" v="120.771"/>
+ <val o="198b0f" v="120.139"/>
+ <val o="19991f" v="120.067"/>
+ <val o="19b541" v="122.459"/>
+ <val o="19c34d" v="121.603"/>
+ <val o="19d15e" v="120.856"/>
+ <val o="19df80" v="120.882"/>
+ <val o="19ed90" v="120.049"/>
+ <val o="19eebe" v="119.903"/>
+ <val o="19fb8e" v="116.012"/>
+ <val o="1a09a0" v="119.283"/>
+ <val o="1a17ae" v="120.303"/>
+ <val o="1a25be" v="121.728"/>
+ <val o="1a33cd" v="121.516"/>
+ <val o="1a41dd" v="122.849"/>
+ <val o="1a4fed" v="126.093"/>
+ <val o="1a5e08" v="126.725"/>
+ <val o="1a6c05" v="124.883"/>
+ <val o="1a7a15" v="125.931"/>
+ <val o="1a8826" v="126.096"/>
+ <val o="1a9637" v="124.906"/>
+ <val o="1aa445" v="123.654"/>
+ <val o="1ab255" v="121.493"/>
+ <val o="1ac065" v="123.897"/>
+ <val o="1ace75" v="123.756"/>
+ <val o="1adc87" v="122.369"/>
+ <val o="1aea96" v="121.934"/>
+ <val o="1af8a7" v="122.306"/>
+ <val o="1b06b7" v="124.041"/>
+ <val o="1b14c6" v="123.698"/>
+ <val o="1c7460" v="120.029"/>
+ <val o="1c8270" v="120.033"/>
+ <val o="1c907e" v="119.314"/>
+ <val o="1c9e8f" v="120.479"/>
+ <val o="1caca2" v="121.91"/>
+ <val o="1cbab1" v="122.485"/>
+ <val o="1cc8c1" v="118.564"/>
+ <val o="1cd6d0" v="119.367"/>
+ <val o="1ce4de" v="120.808"/>
+ <val o="1cf2f0" v="123.105"/>
+ <val o="1d0109" v="125.021"/>
+ <val o="1d0f06" v="123.274"/>
+ <val o="1d1d15" v="123.92"/>
+ <val o="1d2b25" v="123.876"/>
+ <val o="1d3935" v="122.883"/>
+ <val o="1d4745" v="122.072"/>
+ <val o="1d5555" v="121.544"/>
+ <val o="1d6366" v="123.27"/>
+ <val o="1d7175" v="123.513"/>
+ <val o="1d7f86" v="122.604"/>
+ <val o="1d8d95" v="121.281"/>
+ <val o="1d9ba6" v="121.716"/>
+ <val o="1da9b6" v="122.714"/>
+ <val o="1db7c7" v="123.129"/>
+ <val o="1dc5d5" v="123.431"/>
+ <val o="1dd3e6" v="122.987"/>
+ <val o="1de1f5" v="119.262"/>
+ <val o="1df006" v="118.087"/>
+ <val o="1dfe16" v="116.532"/>
+ <val o="1e0c26" v="118.618"/>
+ <val o="1e1a36" v="119.706"/>
+ <val o="1e2847" v="120.899"/>
+ <val o="1e3659" v="120.718"/>
+ <val o="1e4467" v="121.624"/>
+ <val o="1e5281" v="117.925"/>
+ <val o="1e6086" v="120.928"/>
+ <val o="1e6e96" v="122.34"/>
+ <val o="1e7ca6" v="122.972"/>
+ <val o="1e8ab5" v="123.05"/>
+ <val o="1e98c6" v="122.44"/>
+ <val o="1ea6d5" v="120.735"/>
+ <val o="1eb4e6" v="120.711"/>
+ <val o="1ec2f6" v="123.688"/>
+ <val o="1ed106" v="122.853"/>
+ <val o="1edf16" v="122.754"/>
+ <val o="1eed26" v="122.975"/>
+ <val o="1efb36" v="123.49"/>
+ <val o="1f0946" v="123.278"/>
+ <val o="1f1756" v="121.776"/>
+ <val o="1f2566" v="121.458"/>
+ <val o="1f3376" v="120.109"/>
+ <val o="1f4187" v="116.832"/>
+ <val o="1f4f96" v="119.948"/>
+ <val o="1f5da7" v="120.022"/>
+ <val o="1f6bb6" v="120.884"/>
+ <val o="1f79c7" v="119.618"/>
+ <val o="1f87d6" v="122.811"/>
+ <val o="1f95e7" v="123.997"/>
+ <val o="1fa401" v="126.654"/>
+ <val o="1fb204" v="125.574"/>
+ <val o="1fc016" v="126.495"/>
+ <val o="1fce25" v="126.021"/>
+ <val o="1fdc35" v="125.521"/>
+ <val o="1fea45" v="123.104"/>
+ <val o="1ff855" v="121.073"/>
+ <val o="200665" v="117.997"/>
+ <val o="201475" v="119.376"/>
+ <val o="202286" v="119.302"/>
+ <val o="203095" v="120.24"/>
+ <val o="203ea5" v="120.497"/>
+ <val o="204cb6" v="123.276"/>
+ <val o="205ac6" v="121.287"/>
+ <val o="2068d6" v="120.492"/>
+ <val o="2076e6" v="119.643"/>
+ <val o="2084f6" v="117.626"/>
+ <val o="209306" v="121.9"/>
+ <val o="20a116" v="120.861"/>
+ <val o="20af26" v="120.493"/>
+ <val o="20bd37" v="121.526"/>
+ <val o="20cb46" v="119.46"/>
+ <val o="20d957" v="120.284"/>
+ <val o="20e767" v="121.713"/>
+ <val o="20f581" v="124.203"/>
+ <val o="210386" v="126.587"/>
+ <val o="211194" v="124.627"/>
+ <val o="211fa5" v="124.526"/>
+ <val o="212db5" v="123.821"/>
+ <val o="213bc5" v="122.357"/>
+ <val o="2149d6" v="118.642"/>
+ <val o="2157e5" v="116.651"/>
+ <val o="2165f6" v="122.439"/>
+ <val o="217406" v="120.232"/>
+ <val o="218217" v="119.322"/>
+ <val o="219026" v="120.236"/>
+ <val o="219e39" v="120.346"/>
+ <val o="21ac46" v="119.148"/>
+ <val o="21ba57" v="118.907"/>
+ <val o="21c867" v="117.874"/>
+ <val o="21d677" v="122.584"/>
+ <val o="21e487" v="120.252"/>
+ <val o="21f296" v="120.469"/>
+ <val o="2200a6" v="121.303"/>
+ <val o="220eb7" v="122.183"/>
+ <val o="221cc6" v="118.747"/>
+ <val o="222ad7" v="120.81"/>
+ <val o="2238e7" v="123.937"/>
+ <val o="224701" v="126.687"/>
+ <val o="225505" v="119.553"/>
+ <val o="226315" v="119.757"/>
+ <val o="227125" v="119.753"/>
+ <val o="227f35" v="117.557"/>
+ <val o="228d45" v="116.262"/>
+ <val o="229b54" v="122.469"/>
+ <val o="22a965" v="119.765"/>
+ <val o="22b776" v="119.78"/>
+ <val o="22c586" v="119.006"/>
+ <val o="22d397" v="118.696"/>
+ <val o="22e1a6" v="119.018"/>
+ <val o="22efb6" v="120.765"/>
+ <val o="22fdc7" v="120.41"/>
+ <val o="230bd7" v="119.608"/>
+ <val o="2319e6" v="119.268"/>
+ <val o="2327f6" v="118.221"/>
+ <val o="23361b" v="119.234"/>
+ <val o="234416" v="118.199"/>
+ <val o="235226" v="119.524"/>
+ <val o="236037" v="120.76"/>
+ <val o="236e46" v="118.446"/>
+ <val o="237c57" v="119.86"/>
+ <val o="238a66" v="121.458"/>
+ <val o="239881" v="120.937"/>
+ <val o="23a685" v="122.353"/>
+ <val o="23b495" v="123.085"/>
+ <val o="23c2a4" v="123.145"/>
+ <val o="23d0b5" v="122.277"/>
+ <val o="23dec4" v="121.153"/>
+ <val o="23ecd5" v="119.31"/>
+ <val o="23fae4" v="120.616"/>
+ <val o="2408f6" v="118.482"/>
+ <val o="241706" v="117.789"/>
+ <val o="242518" v="118.178"/>
+ <val o="243325" v="118.65"/>
+ <val o="244137" v="119.893"/>
+ <val o="244f46" v="119.172"/>
+ <val o="246b66" v="118.88"/>
+ <val o="247976" v="118.03"/>
+ <val o="248786" v="115.2"/>
+ <val o="24957e" v="118.091"/>
+ <val o="24a38f" v="119.601"/>
+ <val o="24b19c" v="120.844"/>
+ <val o="24bfac" v="120.094"/>
+ <val o="24cdbc" v="123.851"/>
+ <val o="24dbcd" v="123.499"/>
+ <val o="24e9e5" v="124.806"/>
+ <val o="24f808" v="124.27"/>
+ <val o="250616" v="124.985"/>
+ <val o="251426" v="125.02"/>
+ <val o="252236" v="123.483"/>
+ <val o="253047" v="122.436"/>
+ <val o="253e56" v="120.041"/>
+ <val o="254c67" v="119.496"/>
+ <val o="255a76" v="119.362"/>
+ <val o="256887" v="117.767"/>
+ <val o="257697" v="118.616"/>
+ <val o="2584a8" v="117.274"/>
+ <val o="2592b6" v="118.975"/>
+ <val o="25a0c7" v="119.79"/>
+ <val o="25aed7" v="119.331"/>
+ <val o="25bce7" v="119.194"/>
+ <val o="25caf8" v="118.637"/>
+ <val o="25d907" v="120.535"/>
+ <val o="25e718" v="119.8"/>
+ <val o="25f527" v="120.403"/>
+ <val o="260338" v="121.054"/>
+ <val o="261149" v="119.413"/>
+ <val o="261f59" v="120.38"/>
+ <val o="262d68" v="123.203"/>
+ <val o="263b83" v="121.143"/>
+ <val o="264986" v="122.976"/>
+ <val o="265795" v="123.697"/>
+ <val o="2665a6" v="124.476"/>
+ <val o="2673b5" v="123.592"/>
+ <val o="2681c6" v="123.177"/>
+ <val o="268fd5" v="121.853"/>
+ <val o="269de6" v="121.298"/>
+ <val o="26abf6" v="120.593"/>
+ <val o="26ba06" v="118.763"/>
+ <val o="26c817" v="118.278"/>
+ <val o="26d62b" v="118.596"/>
+ <val o="26e436" v="119.984"/>
+ <val o="26f247" v="119.523"/>
+ <val o="270057" v="119.574"/>
+ <val o="270e67" v="119.013"/>
+ <val o="271c77" v="119.722"/>
+ <val o="272a87" v="120.875"/>
+ <val o="273897" v="120.668"/>
+ <val o="2746a8" v="121.451"/>
+ <val o="2754b9" v="121.838"/>
+ <val o="2762c7" v="119.053"/>
+ <val o="2770d8" v="121.03"/>
+ <val o="277ee7" v="123.544"/>
+ </par>
+ <par memind="9808" h="3dc1a8de">
+ <val o="0" v="0"/>
+ <val o="e08" v="0"/>
+ <val o="1c32" v="0"/>
+ <val o="2a3c" v="0"/>
+ <val o="3835" v="0"/>
+ <val o="4645" v="0"/>
+ <val o="5455" v="0"/>
+ <val o="6265" v="0"/>
+ <val o="7075" v="0"/>
+ <val o="7e85" v="0"/>
+ <val o="8c96" v="0"/>
+ <val o="9aa5" v="0"/>
+ <val o="a8b6" v="0"/>
+ <val o="b6c5" v="0"/>
+ <val o="c4d7" v="0"/>
+ <val o="d30b" v="0"/>
+ <val o="e0f6" v="0"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="0"/>
+ <val o="11937" v="0"/>
+ <val o="12746" v="0"/>
+ <val o="13556" v="0"/>
+ <val o="14366" v="0"/>
+ <val o="15181" v="0"/>
+ <val o="15f85" v="0"/>
+ <val o="16d95" v="0"/>
+ <val o="17ba4" v="0"/>
+ <val o="189b5" v="0"/>
+ <val o="197c4" v="0"/>
+ <val o="1a5d5" v="0"/>
+ <val o="1b3e6" v="0"/>
+ <val o="1c1f6" v="0"/>
+ <val o="1d005" v="0"/>
+ <val o="1de15" v="0"/>
+ <val o="1ec25" v="0"/>
+ <val o="1fa36" v="0"/>
+ <val o="20845" v="0"/>
+ <val o="21656" v="0"/>
+ <val o="22465" v="0"/>
+ <val o="23276" v="0"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="0"/>
+ <val o="25ca7" v="0"/>
+ <val o="26ab7" v="0"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="0"/>
+ <val o="294e6" v="0"/>
+ <val o="2a301" v="0"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="0"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="0"/>
+ <val o="31375" v="0"/>
+ <val o="3219e" v="0"/>
+ <val o="32f96" v="0"/>
+ <val o="33da6" v="0"/>
+ <val o="34bb6" v="0"/>
+ <val o="359de" v="0"/>
+ <val o="367d6" v="0"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="0"/>
+ <val o="3bc36" v="0"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="0"/>
+ <val o="3e667" v="0"/>
+ <val o="3f481" v="0"/>
+ <val o="40285" v="0"/>
+ <val o="41095" v="0"/>
+ <val o="41ea5" v="0"/>
+ <val o="42cb5" v="0"/>
+ <val o="43ac5" v="0"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="0"/>
+ <val o="464f5" v="0"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="0"/>
+ <val o="54600" v="0"/>
+ <val o="55406" v="0"/>
+ <val o="56215" v="0"/>
+ <val o="57026" v="0"/>
+ <val o="57e36" v="0"/>
+ <val o="58c46" v="0"/>
+ <val o="59a70" v="0"/>
+ <val o="5a867" v="0"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="0"/>
+ <val o="5eeb8" v="0"/>
+ <val o="5fcc6" v="0"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="0"/>
+ <val o="65f37" v="0"/>
+ <val o="66d46" v="0"/>
+ <val o="67b57" v="0"/>
+ <val o="68967" v="0"/>
+ <val o="69782" v="0"/>
+ <val o="6a586" v="0"/>
+ <val o="6b395" v="0"/>
+ <val o="6c1a6" v="0"/>
+ <val o="6cfb5" v="0"/>
+ <val o="6ddc6" v="0"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="0"/>
+ <val o="707f6" v="0"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="0"/>
+ <val o="74e47" v="0"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="0"/>
+ <val o="7bebf" v="0"/>
+ <val o="7cccf" v="0"/>
+ <val o="7dadf" v="0"/>
+ <val o="7e8fa" v="0"/>
+ <val o="7f70a" v="0"/>
+ <val o="8051a" v="0"/>
+ <val o="8132a" v="0"/>
+ <val o="8213a" v="0"/>
+ <val o="82f4a" v="0"/>
+ <val o="83d5a" v="0"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="0"/>
+ <val o="891bb" v="0"/>
+ <val o="89fca" v="0"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="0"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="0"/>
+ <val o="93a84" v="0"/>
+ <val o="94885" v="0"/>
+ <val o="95694" v="0"/>
+ <val o="964a5" v="0"/>
+ <val o="972b4" v="0"/>
+ <val o="980c5" v="0"/>
+ <val o="98ed4" v="0"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="0"/>
+ <val o="9c716" v="0"/>
+ <val o="9d526" v="0"/>
+ <val o="9e336" v="0"/>
+ <val o="9f145" v="0"/>
+ <val o="9ff56" v="0"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="0"/>
+ <val o="a2986" v="0"/>
+ <val o="a3795" v="0"/>
+ <val o="a45a7" v="0"/>
+ <val o="a53b6" v="0"/>
+ <val o="a61c7" v="0"/>
+ <val o="a6fd6" v="0"/>
+ <val o="a7e00" v="0"/>
+ <val o="a8c00" v="0"/>
+ <val o="a9a05" v="0"/>
+ <val o="aa815" v="0"/>
+ <val o="ab625" v="0"/>
+ <val o="ac435" v="0"/>
+ <val o="ad245" v="0"/>
+ <val o="ae055" v="0"/>
+ <val o="aee65" v="0"/>
+ <val o="afc75" v="0"/>
+ <val o="b0a85" v="0"/>
+ <val o="b26a6" v="0"/>
+ <val o="b34b6" v="0"/>
+ <val o="b42c6" v="0"/>
+ <val o="b50d6" v="0"/>
+ <val o="b5ee7" v="0"/>
+ <val o="b6cf6" v="0"/>
+ <val o="b7b07" v="0"/>
+ <val o="b8917" v="0"/>
+ <val o="b9728" v="0"/>
+ <val o="ba537" v="0"/>
+ <val o="bb347" v="0"/>
+ <val o="bc157" v="0"/>
+ <val o="bcf67" v="0"/>
+ <val o="bdd81" v="0"/>
+ <val o="beb86" v="0"/>
+ <val o="bf995" v="0"/>
+ <val o="c07a6" v="0"/>
+ <val o="c15b5" v="0"/>
+ <val o="c23c6" v="0"/>
+ <val o="c31d5" v="0"/>
+ <val o="c3fe6" v="0"/>
+ <val o="c4df5" v="0"/>
+ <val o="c5c06" v="0"/>
+ <val o="c6a16" v="0"/>
+ <val o="c7826" v="0"/>
+ <val o="c8636" v="0"/>
+ <val o="c9446" v="0"/>
+ <val o="ca256" v="0"/>
+ <val o="cb066" v="0"/>
+ <val o="cbe76" v="0"/>
+ <val o="ccc87" v="0"/>
+ <val o="cda96" v="0"/>
+ <val o="ce8a8" v="0"/>
+ <val o="cf6b7" v="0"/>
+ <val o="d04c8" v="0"/>
+ <val o="d12d7" v="0"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="0"/>
+ <val o="d3d05" v="0"/>
+ <val o="d4b15" v="0"/>
+ <val o="d5926" v="0"/>
+ <val o="d6735" v="0"/>
+ <val o="d7546" v="0"/>
+ <val o="d8355" v="0"/>
+ <val o="d9166" v="0"/>
+ <val o="d9f75" v="0"/>
+ <val o="dad87" v="0"/>
+ <val o="dbb97" v="0"/>
+ <val o="dc9a8" v="0"/>
+ <val o="dd7b7" v="0"/>
+ <val o="de5c6" v="0"/>
+ <val o="df3d7" v="0"/>
+ <val o="e01d7" v="0"/>
+ <val o="e0fe5" v="0"/>
+ <val o="e1df5" v="0"/>
+ <val o="e2c04" v="0"/>
+ <val o="e3a14" v="0"/>
+ <val o="e4824" v="0"/>
+ <val o="e5634" v="0"/>
+ <val o="e6444" v="0"/>
+ <val o="e7255" v="0"/>
+ <val o="e806f" v="0"/>
+ <val o="e8e7f" v="0"/>
+ <val o="e9c8e" v="0"/>
+ <val o="eaa9f" v="0"/>
+ <val o="eb8ae" v="0"/>
+ <val o="ec6bf" v="0"/>
+ <val o="ed4ce" v="0"/>
+ <val o="ee2df" v="0"/>
+ <val o="ef0ef" v="0"/>
+ <val o="eff01" v="0"/>
+ <val o="f0d10" v="0"/>
+ <val o="f1b20" v="0"/>
+ <val o="f2930" v="0"/>
+ <val o="f3740" v="0"/>
+ <val o="f4551" v="0"/>
+ <val o="f5361" v="0"/>
+ <val o="f6172" v="0"/>
+ <val o="f6f80" v="0"/>
+ <val o="f7d91" v="0"/>
+ <val o="f8ba1" v="0"/>
+ <val o="f99b1" v="0"/>
+ <val o="fa7c0" v="0"/>
+ <val o="fb5d1" v="0"/>
+ <val o="fc3e0" v="0"/>
+ <val o="fd1fb" v="0"/>
+ <val o="fe00b" v="0"/>
+ <val o="fee1c" v="0"/>
+ <val o="ffc2c" v="0"/>
+ <val o="100a3b" v="0"/>
+ <val o="10184c" v="0"/>
+ <val o="10265b" v="0"/>
+ <val o="10346c" v="0"/>
+ <val o="10427b" v="0"/>
+ <val o="10508d" v="0"/>
+ <val o="105e9d" v="0"/>
+ <val o="106cad" v="0"/>
+ <val o="107abd" v="0"/>
+ <val o="1088cd" v="0"/>
+ <val o="1096de" v="0"/>
+ <val o="10a4ed" v="0"/>
+ <val o="10b2fe" v="0"/>
+ <val o="10c10d" v="0"/>
+ <val o="10cf1e" v="0"/>
+ <val o="10dd2e" v="0"/>
+ <val o="10eb66" v="0"/>
+ <val o="10f94e" v="0"/>
+ <val o="11075e" v="0"/>
+ <val o="11156d" v="0"/>
+ <val o="112388" v="0"/>
+ <val o="113187" v="0"/>
+ <val o="113fb0" v="0"/>
+ <val o="114da6" v="0"/>
+ <val o="115bb6" v="0"/>
+ <val o="1169c6" v="0"/>
+ <val o="1177d6" v="0"/>
+ <val o="1185e8" v="0"/>
+ <val o="1193f7" v="0"/>
+ <val o="11a208" v="0"/>
+ <val o="11b017" v="0"/>
+ <val o="11be2f" v="0"/>
+ <val o="11cc37" v="0"/>
+ <val o="11da47" v="0"/>
+ <val o="11e857" v="0"/>
+ <val o="11f667" v="0"/>
+ <val o="120578" v="0"/>
+ <val o="121386" v="0"/>
+ <val o="122196" v="0"/>
+ <val o="122fa6" v="0"/>
+ <val o="123db5" v="0"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="0"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="0"/>
+ <val o="128305" v="0"/>
+ <val o="129115" v="0"/>
+ <val o="129f25" v="0"/>
+ <val o="12ad35" v="0"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="0"/>
+ <val o="12d766" v="0"/>
+ <val o="12e575" v="0"/>
+ <val o="12f386" v="0"/>
+ <val o="130196" v="0"/>
+ <val o="130fa6" v="0"/>
+ <val o="131db7" v="0"/>
+ <val o="132bc5" v="0"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="0"/>
+ <val o="1774a3" v="0"/>
+ <val o="1782b3" v="0"/>
+ <val o="1790c5" v="0"/>
+ <val o="179ed4" v="0"/>
+ <val o="17ace4" v="0"/>
+ <val o="17bafd" v="0"/>
+ <val o="17c90f" v="0"/>
+ <val o="17d71e" v="0"/>
+ <val o="17e52f" v="0"/>
+ <val o="17f33f" v="0"/>
+ <val o="18014f" v="0"/>
+ <val o="180f5f" v="0"/>
+ <val o="181d6e" v="0"/>
+ <val o="182b7f" v="0"/>
+ <val o="18398f" v="0"/>
+ <val o="1847a1" v="0"/>
+ <val o="1855af" v="0"/>
+ <val o="1863c0" v="0"/>
+ <val o="1871cf" v="0"/>
+ <val o="187fe0" v="0"/>
+ <val o="188def" v="0"/>
+ <val o="189c00" v="0"/>
+ <val o="18b80d" v="0"/>
+ <val o="18c61c" v="0"/>
+ <val o="18d42c" v="0"/>
+ <val o="18e23b" v="0"/>
+ <val o="18f04b" v="0"/>
+ <val o="18fe5e" v="0"/>
+ <val o="190c76" v="0"/>
+ <val o="191a86" v="0"/>
+ <val o="192896" v="0"/>
+ <val o="1936a6" v="0"/>
+ <val o="1944b7" v="0"/>
+ <val o="1952c6" v="0"/>
+ <val o="1960d7" v="0"/>
+ <val o="196ee6" v="0"/>
+ <val o="197cf8" v="0"/>
+ <val o="198b0f" v="0"/>
+ <val o="19991f" v="0"/>
+ <val o="19b541" v="0"/>
+ <val o="19c34d" v="0"/>
+ <val o="19d15e" v="0"/>
+ <val o="19df80" v="0"/>
+ <val o="19ed90" v="0"/>
+ <val o="19eebe" v="0"/>
+ <val o="19fb8e" v="0"/>
+ <val o="1a09a0" v="0"/>
+ <val o="1a17ae" v="0"/>
+ <val o="1a25be" v="0"/>
+ <val o="1a33cd" v="0"/>
+ <val o="1a41dd" v="0"/>
+ <val o="1a4fed" v="0"/>
+ <val o="1a5e08" v="0"/>
+ <val o="1a6c05" v="0"/>
+ <val o="1a7a15" v="0"/>
+ <val o="1a8826" v="0"/>
+ <val o="1a9637" v="0"/>
+ <val o="1aa445" v="0"/>
+ <val o="1ab255" v="0"/>
+ <val o="1ac065" v="0"/>
+ <val o="1ace75" v="0"/>
+ <val o="1adc87" v="0"/>
+ <val o="1aea96" v="0"/>
+ <val o="1af8a7" v="0"/>
+ <val o="1b06b7" v="0"/>
+ <val o="1b14c6" v="0"/>
+ <val o="1c7460" v="0"/>
+ <val o="1c8270" v="0"/>
+ <val o="1c907e" v="0"/>
+ <val o="1c9e8f" v="0"/>
+ <val o="1caca2" v="0"/>
+ <val o="1cbab1" v="0"/>
+ <val o="1cc8c1" v="0"/>
+ <val o="1cd6d0" v="0"/>
+ <val o="1ce4de" v="0"/>
+ <val o="1cf2f0" v="0"/>
+ <val o="1d0109" v="0"/>
+ <val o="1d0f06" v="0"/>
+ <val o="1d1d15" v="0"/>
+ <val o="1d2b25" v="0"/>
+ <val o="1d3935" v="0"/>
+ <val o="1d4745" v="0"/>
+ <val o="1d5555" v="0"/>
+ <val o="1d6366" v="0"/>
+ <val o="1d7175" v="0"/>
+ <val o="1d7f86" v="0"/>
+ <val o="1d8d95" v="0"/>
+ <val o="1d9ba6" v="0"/>
+ <val o="1da9b6" v="0"/>
+ <val o="1db7c7" v="0"/>
+ <val o="1dc5d5" v="0"/>
+ <val o="1dd3e6" v="0"/>
+ <val o="1de1f5" v="0"/>
+ <val o="1df006" v="0"/>
+ <val o="1dfe16" v="0"/>
+ <val o="1e0c26" v="0"/>
+ <val o="1e1a36" v="0"/>
+ <val o="1e2847" v="0"/>
+ <val o="1e3659" v="0"/>
+ <val o="1e4467" v="0"/>
+ <val o="1e5281" v="0"/>
+ <val o="1e6086" v="0"/>
+ <val o="1e6e96" v="0"/>
+ <val o="1e7ca6" v="0"/>
+ <val o="1e8ab5" v="0"/>
+ <val o="1e98c6" v="0"/>
+ <val o="1ea6d5" v="0"/>
+ <val o="1eb4e6" v="0"/>
+ <val o="1ec2f6" v="0"/>
+ <val o="1ed106" v="0"/>
+ <val o="1edf16" v="0"/>
+ <val o="1eed26" v="0"/>
+ <val o="1efb36" v="0"/>
+ <val o="1f0946" v="0"/>
+ <val o="1f1756" v="0"/>
+ <val o="1f2566" v="0"/>
+ <val o="1f3376" v="0"/>
+ <val o="1f4187" v="0"/>
+ <val o="1f4f96" v="0"/>
+ <val o="1f5da7" v="0"/>
+ <val o="1f6bb6" v="0"/>
+ <val o="1f79c7" v="0"/>
+ <val o="1f87d6" v="0"/>
+ <val o="1f95e7" v="0"/>
+ <val o="1fa401" v="0"/>
+ <val o="1fb204" v="0"/>
+ <val o="1fc016" v="0"/>
+ <val o="1fce25" v="0"/>
+ <val o="1fdc35" v="0"/>
+ <val o="1fea45" v="0"/>
+ <val o="1ff855" v="0"/>
+ <val o="200665" v="0"/>
+ <val o="201475" v="0"/>
+ <val o="202286" v="0"/>
+ <val o="203095" v="0"/>
+ <val o="203ea5" v="0"/>
+ <val o="204cb6" v="0"/>
+ <val o="205ac6" v="0"/>
+ <val o="2068d6" v="0"/>
+ <val o="2076e6" v="0"/>
+ <val o="2084f6" v="0"/>
+ <val o="209306" v="0"/>
+ <val o="20a116" v="0"/>
+ <val o="20af26" v="0"/>
+ <val o="20bd37" v="0"/>
+ <val o="20cb46" v="0"/>
+ <val o="20d957" v="0"/>
+ <val o="20e767" v="0"/>
+ <val o="20f581" v="0"/>
+ <val o="210386" v="0"/>
+ <val o="211194" v="0"/>
+ <val o="211fa5" v="0"/>
+ <val o="212db5" v="0"/>
+ <val o="213bc5" v="0"/>
+ <val o="2149d6" v="0"/>
+ <val o="2157e5" v="0"/>
+ <val o="2165f6" v="0"/>
+ <val o="217406" v="0"/>
+ <val o="218217" v="0"/>
+ <val o="219026" v="0"/>
+ <val o="219e39" v="0"/>
+ <val o="21ac46" v="0"/>
+ <val o="21ba57" v="0"/>
+ <val o="21c867" v="0"/>
+ <val o="21d677" v="0"/>
+ <val o="21e487" v="0"/>
+ <val o="21f296" v="0"/>
+ <val o="2200a6" v="0"/>
+ <val o="220eb7" v="0"/>
+ <val o="221cc6" v="0"/>
+ <val o="222ad7" v="0"/>
+ <val o="2238e7" v="0"/>
+ <val o="224701" v="0"/>
+ <val o="225505" v="0"/>
+ <val o="226315" v="0"/>
+ <val o="227125" v="0"/>
+ <val o="227f35" v="0"/>
+ <val o="228d45" v="0"/>
+ <val o="229b54" v="0"/>
+ <val o="22a965" v="0"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="0"/>
+ <val o="22d397" v="0"/>
+ <val o="22e1a6" v="0"/>
+ <val o="22efb6" v="0"/>
+ <val o="22fdc7" v="0"/>
+ <val o="230bd7" v="0"/>
+ <val o="2319e6" v="0"/>
+ <val o="2327f6" v="0"/>
+ <val o="23361b" v="0"/>
+ <val o="234416" v="0"/>
+ <val o="235226" v="0"/>
+ <val o="236037" v="0"/>
+ <val o="236e46" v="0"/>
+ <val o="237c57" v="0"/>
+ <val o="238a66" v="0"/>
+ <val o="239881" v="0"/>
+ <val o="23a685" v="0"/>
+ <val o="23b495" v="0"/>
+ <val o="23c2a4" v="0"/>
+ <val o="23d0b5" v="0"/>
+ <val o="23dec4" v="0"/>
+ <val o="23ecd5" v="0"/>
+ <val o="23fae4" v="0"/>
+ <val o="2408f6" v="0"/>
+ <val o="241706" v="0"/>
+ <val o="242518" v="0"/>
+ <val o="243325" v="0"/>
+ <val o="244137" v="0"/>
+ <val o="244f46" v="0"/>
+ <val o="246b66" v="0"/>
+ <val o="247976" v="0"/>
+ <val o="248786" v="0"/>
+ <val o="24957e" v="0"/>
+ <val o="24a38f" v="0"/>
+ <val o="24b19c" v="0"/>
+ <val o="24bfac" v="0"/>
+ <val o="24cdbc" v="0"/>
+ <val o="24dbcd" v="0"/>
+ <val o="24e9e5" v="0"/>
+ <val o="24f808" v="0"/>
+ <val o="250616" v="0"/>
+ <val o="251426" v="0"/>
+ <val o="252236" v="0"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="0"/>
+ <val o="254c67" v="0"/>
+ <val o="255a76" v="0"/>
+ <val o="256887" v="0"/>
+ <val o="257697" v="0"/>
+ <val o="2584a8" v="0"/>
+ <val o="2592b6" v="0"/>
+ <val o="25a0c7" v="0"/>
+ <val o="25aed7" v="0"/>
+ <val o="25bce7" v="0"/>
+ <val o="25caf8" v="0"/>
+ <val o="25d907" v="0"/>
+ <val o="25e718" v="0"/>
+ <val o="25f527" v="0"/>
+ <val o="260338" v="0"/>
+ <val o="261149" v="0"/>
+ <val o="261f59" v="0"/>
+ <val o="262d68" v="0"/>
+ <val o="263b83" v="0"/>
+ <val o="264986" v="0"/>
+ <val o="265795" v="0"/>
+ <val o="2665a6" v="0"/>
+ <val o="2673b5" v="0"/>
+ <val o="2681c6" v="0"/>
+ <val o="268fd5" v="0"/>
+ <val o="269de6" v="0"/>
+ <val o="26abf6" v="0"/>
+ <val o="26ba06" v="0"/>
+ <val o="26c817" v="0"/>
+ <val o="26d62b" v="0"/>
+ <val o="26e436" v="0"/>
+ <val o="26f247" v="0"/>
+ <val o="270057" v="0"/>
+ <val o="270e67" v="0"/>
+ <val o="271c77" v="0"/>
+ <val o="272a87" v="0"/>
+ <val o="273897" v="0"/>
+ <val o="2746a8" v="0"/>
+ <val o="2754b9" v="0"/>
+ <val o="2762c7" v="0"/>
+ <val o="2770d8" v="0"/>
+ <val o="277ee7" v="0"/>
+ </par>
+ <par memind="9804" h="3dc1a8de">
+ <val o="0" v="113.768"/>
+ <val o="e08" v="117.131"/>
+ <val o="1c32" v="118.794"/>
+ <val o="2a3c" v="120.362"/>
+ <val o="3835" v="118.504"/>
+ <val o="4645" v="116.275"/>
+ <val o="5455" v="109.258"/>
+ <val o="6265" v="121.127"/>
+ <val o="7075" v="118.849"/>
+ <val o="7e85" v="116.093"/>
+ <val o="8c96" v="120.108"/>
+ <val o="9aa5" v="120.84"/>
+ <val o="a8b6" v="124.045"/>
+ <val o="b6c5" v="124.042"/>
+ <val o="c4d7" v="117.713"/>
+ <val o="d30b" v="118.048"/>
+ <val o="e0f6" v="118.051"/>
+ <val o="ef06" v="118.259"/>
+ <val o="fd17" v="118.054"/>
+ <val o="10b27" v="120.844"/>
+ <val o="11937" v="121.925"/>
+ <val o="12746" v="119.353"/>
+ <val o="13556" v="120.867"/>
+ <val o="14366" v="125.48"/>
+ <val o="15181" v="127.434"/>
+ <val o="15f85" v="119.069"/>
+ <val o="16d95" v="120.904"/>
+ <val o="17ba4" v="120.974"/>
+ <val o="189b5" v="120.25"/>
+ <val o="197c4" v="118.291"/>
+ <val o="1a5d5" v="126.573"/>
+ <val o="1b3e6" v="125.637"/>
+ <val o="1c1f6" v="124.668"/>
+ <val o="1d005" v="121.393"/>
+ <val o="1de15" v="121.998"/>
+ <val o="1ec25" v="122.555"/>
+ <val o="1fa36" v="123.941"/>
+ <val o="20845" v="124.746"/>
+ <val o="21656" v="125.085"/>
+ <val o="22465" v="125.143"/>
+ <val o="23276" v="123.315"/>
+ <val o="24086" v="119.026"/>
+ <val o="24e99" v="118.683"/>
+ <val o="25ca7" v="119.815"/>
+ <val o="26ab7" v="119.25"/>
+ <val o="278c6" v="119.678"/>
+ <val o="286d6" v="121.708"/>
+ <val o="294e6" v="125.182"/>
+ <val o="2a301" v="125.217"/>
+ <val o="2b105" v="117.12"/>
+ <val o="2bf15" v="118.489"/>
+ <val o="2cd25" v="119.338"/>
+ <val o="2db35" v="119.392"/>
+ <val o="2e946" v="117.277"/>
+ <val o="2f755" v="112.967"/>
+ <val o="30566" v="124.775"/>
+ <val o="31375" v="124.409"/>
+ <val o="3219e" v="123.268"/>
+ <val o="32f96" v="122.956"/>
+ <val o="33da6" v="123.032"/>
+ <val o="34bb6" v="123.555"/>
+ <val o="359de" v="123.004"/>
+ <val o="367d6" v="122.125"/>
+ <val o="375e6" v="121.078"/>
+ <val o="3840e" v="117.701"/>
+ <val o="3921e" v="118.101"/>
+ <val o="3a016" v="117.771"/>
+ <val o="3ae27" v="121.393"/>
+ <val o="3bc36" v="120.16"/>
+ <val o="3ca47" v="119.387"/>
+ <val o="3d856" v="119.887"/>
+ <val o="3e667" v="122.64"/>
+ <val o="3f481" v="125.954"/>
+ <val o="40285" v="123.51"/>
+ <val o="41095" v="124.328"/>
+ <val o="41ea5" v="124.639"/>
+ <val o="42cb5" v="124.448"/>
+ <val o="43ac5" v="122.434"/>
+ <val o="448d5" v="118.623"/>
+ <val o="456e6" v="122.169"/>
+ <val o="464f5" v="120.979"/>
+ <val o="480ff" v="118.358"/>
+ <val o="48f0e" v="117.271"/>
+ <val o="49d1d" v="118.68"/>
+ <val o="4ab46" v="118.562"/>
+ <val o="4b955" v="116.842"/>
+ <val o="4c769" v="115.913"/>
+ <val o="4d577" v="118.894"/>
+ <val o="4e387" v="118.59"/>
+ <val o="4f196" v="116.293"/>
+ <val o="4ffa6" v="118.299"/>
+ <val o="50dd0" v="120.233"/>
+ <val o="51bc6" v="118.495"/>
+ <val o="529d6" v="120.406"/>
+ <val o="537e7" v="122.644"/>
+ <val o="54600" v="125.528"/>
+ <val o="55406" v="121.746"/>
+ <val o="56215" v="122.642"/>
+ <val o="57026" v="122.581"/>
+ <val o="57e36" v="122.623"/>
+ <val o="58c46" v="120.431"/>
+ <val o="59a70" v="121.329"/>
+ <val o="5a867" v="120.651"/>
+ <val o="5b676" v="118.876"/>
+ <val o="5c487" v="115.661"/>
+ <val o="5d296" v="119.835"/>
+ <val o="5e0a9" v="120.34"/>
+ <val o="5eeb8" v="119.439"/>
+ <val o="5fcc6" v="118.245"/>
+ <val o="60ad7" v="117.004"/>
+ <val o="618e7" v="117.165"/>
+ <val o="626f7" v="119.95"/>
+ <val o="63507" v="117.149"/>
+ <val o="64317" v="118.541"/>
+ <val o="65127" v="119.822"/>
+ <val o="65f37" v="121.013"/>
+ <val o="66d46" v="121.577"/>
+ <val o="67b57" v="120.289"/>
+ <val o="68967" v="122.62"/>
+ <val o="69782" v="119.093"/>
+ <val o="6a586" v="120.493"/>
+ <val o="6b395" v="121.919"/>
+ <val o="6c1a6" v="122.218"/>
+ <val o="6cfb5" v="121.022"/>
+ <val o="6ddc6" v="118.433"/>
+ <val o="6ebd6" v="115.978"/>
+ <val o="6f9e6" v="120.971"/>
+ <val o="707f6" v="119.234"/>
+ <val o="71607" v="118.015"/>
+ <val o="72417" v="117.922"/>
+ <val o="73227" v="117.566"/>
+ <val o="74037" v="121.469"/>
+ <val o="74e47" v="120.514"/>
+ <val o="75c57" v="118.485"/>
+ <val o="76a63" v="117.889"/>
+ <val o="77873" v="117.946"/>
+ <val o="78680" v="113.611"/>
+ <val o="7948f" v="116.583"/>
+ <val o="7a29f" v="119.306"/>
+ <val o="7b0af" v="118.802"/>
+ <val o="7bebf" v="120.799"/>
+ <val o="7cccf" v="120.857"/>
+ <val o="7dadf" v="121.594"/>
+ <val o="7e8fa" v="121.421"/>
+ <val o="7f70a" v="123.74"/>
+ <val o="8051a" v="125.189"/>
+ <val o="8132a" v="125.673"/>
+ <val o="8213a" v="124.777"/>
+ <val o="82f4a" v="122.432"/>
+ <val o="83d5a" v="120.011"/>
+ <val o="84b6a" v="118.622"/>
+ <val o="8597a" v="118.559"/>
+ <val o="8678b" v="117.524"/>
+ <val o="8759b" v="117.257"/>
+ <val o="883ac" v="119.909"/>
+ <val o="891bb" v="120.921"/>
+ <val o="89fca" v="119.96"/>
+ <val o="8adda" v="118.481"/>
+ <val o="8bbeb" v="118.605"/>
+ <val o="8c9fc" v="118.282"/>
+ <val o="8d80b" v="118.663"/>
+ <val o="8e61a" v="117.009"/>
+ <val o="8f42a" v="117.766"/>
+ <val o="9023a" v="119.722"/>
+ <val o="9104a" v="120.299"/>
+ <val o="91e5a" v="118.366"/>
+ <val o="92c6a" v="122.529"/>
+ <val o="93a84" v="124.833"/>
+ <val o="94885" v="123.06"/>
+ <val o="95694" v="122.396"/>
+ <val o="964a5" v="122.792"/>
+ <val o="972b4" v="122.232"/>
+ <val o="980c5" v="119.79"/>
+ <val o="98ed4" v="122.86"/>
+ <val o="99ce5" v="119.012"/>
+ <val o="9aaf5" v="118.321"/>
+ <val o="9b906" v="115.456"/>
+ <val o="9c716" v="119.374"/>
+ <val o="9d526" v="120.344"/>
+ <val o="9e336" v="119.254"/>
+ <val o="9f145" v="117.83"/>
+ <val o="9ff56" v="117.001"/>
+ <val o="a0d65" v="116.782"/>
+ <val o="a1b77" v="116.803"/>
+ <val o="a2986" v="118.75"/>
+ <val o="a3795" v="118.358"/>
+ <val o="a45a7" v="119.493"/>
+ <val o="a53b6" v="119.698"/>
+ <val o="a61c7" v="119.908"/>
+ <val o="a6fd6" v="120.675"/>
+ <val o="a7e00" v="122.754"/>
+ <val o="a8c00" v="125.385"/>
+ <val o="a9a05" v="118.214"/>
+ <val o="aa815" v="119.329"/>
+ <val o="ab625" v="120.11"/>
+ <val o="ac435" v="119.689"/>
+ <val o="ad245" v="117.12"/>
+ <val o="ae055" v="114.729"/>
+ <val o="aee65" v="120.871"/>
+ <val o="afc75" v="119.177"/>
+ <val o="b0a85" v="116.699"/>
+ <val o="b26a6" v="116.768"/>
+ <val o="b34b6" v="118.075"/>
+ <val o="b42c6" v="115.571"/>
+ <val o="b50d6" v="115.867"/>
+ <val o="b5ee7" v="114.309"/>
+ <val o="b6cf6" v="122.787"/>
+ <val o="b7b07" v="118.904"/>
+ <val o="b8917" v="118.531"/>
+ <val o="b9728" v="119.438"/>
+ <val o="ba537" v="120.908"/>
+ <val o="bb347" v="119.844"/>
+ <val o="bc157" v="120.575"/>
+ <val o="bcf67" v="123.212"/>
+ <val o="bdd81" v="118.712"/>
+ <val o="beb86" v="118.316"/>
+ <val o="bf995" v="118.859"/>
+ <val o="c07a6" v="120.092"/>
+ <val o="c15b5" v="119.532"/>
+ <val o="c23c6" v="118.179"/>
+ <val o="c31d5" v="115.731"/>
+ <val o="c3fe6" v="117.671"/>
+ <val o="c4df5" v="116.046"/>
+ <val o="c5c06" v="117.416"/>
+ <val o="c6a16" v="117.578"/>
+ <val o="c7826" v="116.758"/>
+ <val o="c8636" v="118.319"/>
+ <val o="c9446" v="118.355"/>
+ <val o="ca256" v="118.136"/>
+ <val o="cb066" v="117.225"/>
+ <val o="cbe76" v="122.659"/>
+ <val o="ccc87" v="118.547"/>
+ <val o="cda96" v="116.635"/>
+ <val o="ce8a8" v="118.105"/>
+ <val o="cf6b7" v="118.503"/>
+ <val o="d04c8" v="119.547"/>
+ <val o="d12d7" v="121.4"/>
+ <val o="d20e7" v="123.396"/>
+ <val o="d2f02" v="126.068"/>
+ <val o="d3d05" v="119.33"/>
+ <val o="d4b15" v="120.524"/>
+ <val o="d5926" v="120.742"/>
+ <val o="d6735" v="119.548"/>
+ <val o="d7546" v="117.358"/>
+ <val o="d8355" v="124.267"/>
+ <val o="d9166" v="122.388"/>
+ <val o="d9f75" v="120.774"/>
+ <val o="dad87" v="117.345"/>
+ <val o="dbb97" v="116.698"/>
+ <val o="dc9a8" v="116.798"/>
+ <val o="dd7b7" v="118.219"/>
+ <val o="de5c6" v="117.879"/>
+ <val o="df3d7" v="117.287"/>
+ <val o="e01d7" v="117.42"/>
+ <val o="e0fe5" v="116.798"/>
+ <val o="e1df5" v="117.184"/>
+ <val o="e2c04" v="119.665"/>
+ <val o="e3a14" v="121.033"/>
+ <val o="e4824" v="120.839"/>
+ <val o="e5634" v="122.456"/>
+ <val o="e6444" v="120.534"/>
+ <val o="e7255" v="122.766"/>
+ <val o="e806f" v="123.735"/>
+ <val o="e8e7f" v="116.654"/>
+ <val o="e9c8e" v="118.111"/>
+ <val o="eaa9f" v="118.441"/>
+ <val o="eb8ae" v="117.463"/>
+ <val o="ec6bf" v="113.549"/>
+ <val o="ed4ce" v="123.596"/>
+ <val o="ee2df" v="120.709"/>
+ <val o="ef0ef" v="118.94"/>
+ <val o="eff01" v="116.002"/>
+ <val o="f0d10" v="117.741"/>
+ <val o="f1b20" v="117.49"/>
+ <val o="f2930" v="121.433"/>
+ <val o="f3740" v="117.735"/>
+ <val o="f4551" v="118.165"/>
+ <val o="f5361" v="117.839"/>
+ <val o="f6172" v="117.685"/>
+ <val o="f6f80" v="117.518"/>
+ <val o="f7d91" v="119.385"/>
+ <val o="f8ba1" v="121.202"/>
+ <val o="f99b1" v="120.254"/>
+ <val o="fa7c0" v="118.336"/>
+ <val o="fb5d1" v="118.267"/>
+ <val o="fc3e0" v="123.088"/>
+ <val o="fd1fb" v="123.183"/>
+ <val o="fe00b" v="126.377"/>
+ <val o="fee1c" v="123.772"/>
+ <val o="ffc2c" v="123.634"/>
+ <val o="100a3b" v="123.008"/>
+ <val o="10184c" v="121.382"/>
+ <val o="10265b" v="117.696"/>
+ <val o="10346c" v="117.901"/>
+ <val o="10427b" v="119.404"/>
+ <val o="10508d" v="117.646"/>
+ <val o="105e9d" v="118.147"/>
+ <val o="106cad" v="117.802"/>
+ <val o="107abd" v="120.151"/>
+ <val o="1088cd" v="119.733"/>
+ <val o="1096de" v="119.096"/>
+ <val o="10a4ed" v="119.291"/>
+ <val o="10b2fe" v="118.973"/>
+ <val o="10c10d" v="116.336"/>
+ <val o="10cf1e" v="118.171"/>
+ <val o="10dd2e" v="119.082"/>
+ <val o="10eb66" v="120.953"/>
+ <val o="10f94e" v="121.41"/>
+ <val o="11075e" v="119.088"/>
+ <val o="11156d" v="120.941"/>
+ <val o="112388" v="123.699"/>
+ <val o="113187" v="122.48"/>
+ <val o="113fb0" v="123.378"/>
+ <val o="114da6" v="123.312"/>
+ <val o="115bb6" v="123.217"/>
+ <val o="1169c6" v="120.961"/>
+ <val o="1177d6" v="118.076"/>
+ <val o="1185e8" v="118.573"/>
+ <val o="1193f7" v="117.978"/>
+ <val o="11a208" v="120.019"/>
+ <val o="11b017" v="121.662"/>
+ <val o="11be2f" v="122.268"/>
+ <val o="11cc37" v="122.317"/>
+ <val o="11da47" v="121.934"/>
+ <val o="11e857" v="120.776"/>
+ <val o="11f667" v="121.889"/>
+ <val o="120578" v="121.064"/>
+ <val o="121386" v="116.824"/>
+ <val o="122196" v="117.556"/>
+ <val o="122fa6" v="118.784"/>
+ <val o="123db5" v="120.77"/>
+ <val o="124bc5" v="122.565"/>
+ <val o="1259d5" v="120.263"/>
+ <val o="1267e4" v="122.729"/>
+ <val o="127600" v="124.561"/>
+ <val o="128305" v="125.237"/>
+ <val o="129115" v="125.344"/>
+ <val o="129f25" v="125.492"/>
+ <val o="12ad35" v="124.67"/>
+ <val o="12bb45" v="122.819"/>
+ <val o="12c954" v="121.713"/>
+ <val o="12d766" v="120.883"/>
+ <val o="12e575" v="119.85"/>
+ <val o="12f386" v="117.176"/>
+ <val o="130196" v="117.447"/>
+ <val o="130fa6" v="118.679"/>
+ <val o="131db7" v="120.016"/>
+ <val o="132bc5" v="119.959"/>
+ <val o="1339d4" v="0.109"/>
+ <val o="1347e5" v="0.109"/>
+ <val o="1355f4" v="0.108"/>
+ <val o="136404" v="0.106"/>
+ <val o="137214" v="0.106"/>
+ <val o="138024" v="0.106"/>
+ <val o="138e33" v="0.108"/>
+ <val o="139c44" v="0.109"/>
+ <val o="13aa54" v="0.108"/>
+ <val o="13b865" v="0.109"/>
+ <val o="13c67e" v="0.101"/>
+ <val o="13d48e" v="0.104"/>
+ <val o="13e29e" v="0.106"/>
+ <val o="13f0ae" v="0.106"/>
+ <val o="13febf" v="0.104"/>
+ <val o="140ccf" v="0.102"/>
+ <val o="141adf" v="0.104"/>
+ <val o="1428ef" v="0.108"/>
+ <val o="1436ff" v="0.107"/>
+ <val o="14450f" v="0.107"/>
+ <val o="14531f" v="0.107"/>
+ <val o="146130" v="0.108"/>
+ <val o="146f40" v="0.11"/>
+ <val o="147d44" v="0.108"/>
+ <val o="148b57" v="0.108"/>
+ <val o="149965" v="0.108"/>
+ <val o="14a775" v="0.106"/>
+ <val o="14b584" v="0.11"/>
+ <val o="14c397" v="0.106"/>
+ <val o="14d1a4" v="0.107"/>
+ <val o="14dfb6" v="0.108"/>
+ <val o="14edc5" v="0.11"/>
+ <val o="14fbd5" v="0.112"/>
+ <val o="1509e5" v="0.112"/>
+ <val o="1517ff" v="0.115"/>
+ <val o="152605" v="0.107"/>
+ <val o="153415" v="0.109"/>
+ <val o="154225" v="0.11"/>
+ <val o="155035" v="0.109"/>
+ <val o="155e45" v="0.107"/>
+ <val o="156c55" v="0.104"/>
+ <val o="157a65" v="0.107"/>
+ <val o="158875" v="0.107"/>
+ <val o="159686" v="0.106"/>
+ <val o="15a495" v="0.107"/>
+ <val o="15b2a6" v="0.108"/>
+ <val o="15c0b6" v="0.109"/>
+ <val o="15cec6" v="0.109"/>
+ <val o="15dcd5" v="0.109"/>
+ <val o="15eae6" v="0.108"/>
+ <val o="15f8f5" v="0.104"/>
+ <val o="160706" v="0.11"/>
+ <val o="161517" v="0.109"/>
+ <val o="162326" v="0.11"/>
+ <val o="163137" v="0.111"/>
+ <val o="163f46" v="0.109"/>
+ <val o="164d57" v="0.11"/>
+ <val o="165b67" v="0.112"/>
+ <val o="166982" v="0.111"/>
+ <val o="167786" v="0.112"/>
+ <val o="168596" v="0.112"/>
+ <val o="1693a6" v="0.113"/>
+ <val o="16a1b5" v="0.112"/>
+ <val o="16afc6" v="0.11"/>
+ <val o="16bdd5" v="0.108"/>
+ <val o="16cbe6" v="0.107"/>
+ <val o="16d9f6" v="0.112"/>
+ <val o="16e807" v="0.11"/>
+ <val o="16f616" v="0.11"/>
+ <val o="170429" v="0.111"/>
+ <val o="171236" v="0.112"/>
+ <val o="172047" v="0.112"/>
+ <val o="172e57" v="0.111"/>
+ <val o="173c67" v="0.111"/>
+ <val o="174a77" v="0.11"/>
+ <val o="175887" v="0.108"/>
+ <val o="176694" v="117.84"/>
+ <val o="1774a3" v="119.199"/>
+ <val o="1782b3" v="120.226"/>
+ <val o="1790c5" v="120.924"/>
+ <val o="179ed4" v="124.038"/>
+ <val o="17ace4" v="126.747"/>
+ <val o="17bafd" v="128.364"/>
+ <val o="17c90f" v="126.55"/>
+ <val o="17d71e" v="126.522"/>
+ <val o="17e52f" v="126.893"/>
+ <val o="17f33f" v="126.114"/>
+ <val o="18014f" v="124.219"/>
+ <val o="180f5f" v="123.691"/>
+ <val o="181d6e" v="124.723"/>
+ <val o="182b7f" v="124.667"/>
+ <val o="18398f" v="123.666"/>
+ <val o="1847a1" v="123.337"/>
+ <val o="1855af" v="124.042"/>
+ <val o="1863c0" v="125.92"/>
+ <val o="1871cf" v="125.144"/>
+ <val o="187fe0" v="124.769"/>
+ <val o="188def" v="124.549"/>
+ <val o="189c00" v="123.483"/>
+ <val o="18b80d" v="116.63"/>
+ <val o="18c61c" v="120.461"/>
+ <val o="18d42c" v="121.228"/>
+ <val o="18e23b" v="121.154"/>
+ <val o="18f04b" v="123.409"/>
+ <val o="18fe5e" v="125.403"/>
+ <val o="190c76" v="122.716"/>
+ <val o="191a86" v="124.385"/>
+ <val o="192896" v="126.046"/>
+ <val o="1936a6" v="126.166"/>
+ <val o="1944b7" v="125.26"/>
+ <val o="1952c6" v="123.29"/>
+ <val o="1960d7" v="120.499"/>
+ <val o="196ee6" v="120.705"/>
+ <val o="197cf8" v="120.492"/>
+ <val o="198b0f" v="119.996"/>
+ <val o="19991f" v="120.265"/>
+ <val o="19b541" v="122.232"/>
+ <val o="19c34d" v="121.49"/>
+ <val o="19d15e" v="120.704"/>
+ <val o="19df80" v="120.614"/>
+ <val o="19ed90" v="119.839"/>
+ <val o="19eebe" v="119.685"/>
+ <val o="19fb8e" v="115.593"/>
+ <val o="1a09a0" v="118.86"/>
+ <val o="1a17ae" v="119.97"/>
+ <val o="1a25be" v="121.369"/>
+ <val o="1a33cd" v="121.096"/>
+ <val o="1a41dd" v="122.451"/>
+ <val o="1a4fed" v="125.765"/>
+ <val o="1a5e08" v="126.302"/>
+ <val o="1a6c05" v="124.495"/>
+ <val o="1a7a15" v="125.659"/>
+ <val o="1a8826" v="125.773"/>
+ <val o="1a9637" v="124.464"/>
+ <val o="1aa445" v="123.167"/>
+ <val o="1ab255" v="121.137"/>
+ <val o="1ac065" v="123.677"/>
+ <val o="1ace75" v="123.569"/>
+ <val o="1adc87" v="122.254"/>
+ <val o="1aea96" v="121.794"/>
+ <val o="1af8a7" v="122.088"/>
+ <val o="1b06b7" v="123.87"/>
+ <val o="1b14c6" v="123.556"/>
+ <val o="1c7460" v="119.682"/>
+ <val o="1c8270" v="119.676"/>
+ <val o="1c907e" v="118.821"/>
+ <val o="1c9e8f" v="119.836"/>
+ <val o="1caca2" v="121.192"/>
+ <val o="1cbab1" v="121.685"/>
+ <val o="1cc8c1" v="117.874"/>
+ <val o="1cd6d0" v="118.762"/>
+ <val o="1ce4de" v="120.263"/>
+ <val o="1cf2f0" v="122.468"/>
+ <val o="1d0109" v="124.536"/>
+ <val o="1d0f06" v="122.598"/>
+ <val o="1d1d15" v="123.2"/>
+ <val o="1d2b25" v="123.218"/>
+ <val o="1d3935" v="122.202"/>
+ <val o="1d4745" v="121.424"/>
+ <val o="1d5555" v="120.888"/>
+ <val o="1d6366" v="122.743"/>
+ <val o="1d7175" v="123.078"/>
+ <val o="1d7f86" v="122.237"/>
+ <val o="1d8d95" v="120.858"/>
+ <val o="1d9ba6" v="121.231"/>
+ <val o="1da9b6" v="122.185"/>
+ <val o="1db7c7" v="122.648"/>
+ <val o="1dc5d5" v="122.992"/>
+ <val o="1dd3e6" v="122.482"/>
+ <val o="1de1f5" v="118.707"/>
+ <val o="1df006" v="117.367"/>
+ <val o="1dfe16" v="115.714"/>
+ <val o="1e0c26" v="117.74"/>
+ <val o="1e1a36" v="119.048"/>
+ <val o="1e2847" v="120.179"/>
+ <val o="1e3659" v="119.949"/>
+ <val o="1e4467" v="120.906"/>
+ <val o="1e5281" v="117.251"/>
+ <val o="1e6086" v="120.118"/>
+ <val o="1e6e96" v="121.521"/>
+ <val o="1e7ca6" v="122.188"/>
+ <val o="1e8ab5" v="122.212"/>
+ <val o="1e98c6" v="121.531"/>
+ <val o="1ea6d5" v="119.981"/>
+ <val o="1eb4e6" v="119.977"/>
+ <val o="1ec2f6" v="122.939"/>
+ <val o="1ed106" v="122.289"/>
+ <val o="1edf16" v="122.05"/>
+ <val o="1eed26" v="122.271"/>
+ <val o="1efb36" v="122.856"/>
+ <val o="1f0946" v="122.611"/>
+ <val o="1f1756" v="121.148"/>
+ <val o="1f2566" v="120.864"/>
+ <val o="1f3376" v="119.609"/>
+ <val o="1f4187" v="116.101"/>
+ <val o="1f4f96" v="119.165"/>
+ <val o="1f5da7" v="119.287"/>
+ <val o="1f6bb6" v="120.208"/>
+ <val o="1f79c7" v="118.775"/>
+ <val o="1f87d6" v="122.222"/>
+ <val o="1f95e7" v="123.288"/>
+ <val o="1fa401" v="126.026"/>
+ <val o="1fb204" v="124.828"/>
+ <val o="1fc016" v="125.769"/>
+ <val o="1fce25" v="125.218"/>
+ <val o="1fdc35" v="124.795"/>
+ <val o="1fea45" v="122.393"/>
+ <val o="1ff855" v="120.523"/>
+ <val o="200665" v="117.319"/>
+ <val o="201475" v="118.772"/>
+ <val o="202286" v="118.808"/>
+ <val o="203095" v="119.686"/>
+ <val o="203ea5" v="119.99"/>
+ <val o="204cb6" v="122.708"/>
+ <val o="205ac6" v="120.762"/>
+ <val o="2068d6" v="119.92"/>
+ <val o="2076e6" v="119.129"/>
+ <val o="2084f6" v="117.091"/>
+ <val o="209306" v="121.219"/>
+ <val o="20a116" v="120.28"/>
+ <val o="20af26" v="119.69"/>
+ <val o="20bd37" v="120.677"/>
+ <val o="20cb46" v="118.756"/>
+ <val o="20d957" v="119.608"/>
+ <val o="20e767" v="121.059"/>
+ <val o="20f581" v="123.573"/>
+ <val o="210386" v="125.976"/>
+ <val o="211194" v="123.926"/>
+ <val o="211fa5" v="123.888"/>
+ <val o="212db5" v="123.08"/>
+ <val o="213bc5" v="121.69"/>
+ <val o="2149d6" v="117.916"/>
+ <val o="2157e5" v="116.014"/>
+ <val o="2165f6" v="121.935"/>
+ <val o="217406" v="119.675"/>
+ <val o="218217" v="118.8"/>
+ <val o="219026" v="119.649"/>
+ <val o="219e39" v="119.715"/>
+ <val o="21ac46" v="118.622"/>
+ <val o="21ba57" v="118.459"/>
+ <val o="21c867" v="117.339"/>
+ <val o="21d677" v="122.095"/>
+ <val o="21e487" v="119.556"/>
+ <val o="21f296" v="119.761"/>
+ <val o="2200a6" v="120.53"/>
+ <val o="220eb7" v="121.428"/>
+ <val o="221cc6" v="118.003"/>
+ <val o="222ad7" v="120.228"/>
+ <val o="2238e7" v="123.33"/>
+ <val o="224701" v="125.861"/>
+ <val o="225505" v="118.788"/>
+ <val o="226315" v="119.106"/>
+ <val o="227125" v="119.116"/>
+ <val o="227f35" v="116.908"/>
+ <val o="228d45" v="115.642"/>
+ <val o="229b54" v="122.013"/>
+ <val o="22a965" v="119.234"/>
+ <val o="22b776" v="119.31"/>
+ <val o="22c586" v="118.566"/>
+ <val o="22d397" v="118.243"/>
+ <val o="22e1a6" v="118.579"/>
+ <val o="22efb6" v="120.288"/>
+ <val o="22fdc7" v="119.996"/>
+ <val o="230bd7" v="119.249"/>
+ <val o="2319e6" v="118.866"/>
+ <val o="2327f6" v="117.741"/>
+ <val o="23361b" v="118.543"/>
+ <val o="234416" v="117.538"/>
+ <val o="235226" v="118.709"/>
+ <val o="236037" v="119.94"/>
+ <val o="236e46" v="117.668"/>
+ <val o="237c57" v="119.159"/>
+ <val o="238a66" v="120.771"/>
+ <val o="239881" v="120.234"/>
+ <val o="23a685" v="121.624"/>
+ <val o="23b495" v="122.272"/>
+ <val o="23c2a4" v="122.422"/>
+ <val o="23d0b5" v="121.687"/>
+ <val o="23dec4" v="120.361"/>
+ <val o="23ecd5" v="118.751"/>
+ <val o="23fae4" v="120.028"/>
+ <val o="2408f6" v="117.974"/>
+ <val o="241706" v="117.305"/>
+ <val o="242518" v="117.71"/>
+ <val o="243325" v="118.193"/>
+ <val o="244137" v="119.542"/>
+ <val o="244f46" v="118.741"/>
+ <val o="246b66" v="118.295"/>
+ <val o="247976" v="117.534"/>
+ <val o="248786" v="114.472"/>
+ <val o="24957e" v="117.357"/>
+ <val o="24a38f" v="118.851"/>
+ <val o="24b19c" v="120.137"/>
+ <val o="24bfac" v="119.349"/>
+ <val o="24cdbc" v="123.226"/>
+ <val o="24dbcd" v="122.921"/>
+ <val o="24e9e5" v="124.273"/>
+ <val o="24f808" v="123.515"/>
+ <val o="250616" v="124.182"/>
+ <val o="251426" v="124.27"/>
+ <val o="252236" v="122.827"/>
+ <val o="253047" v="121.801"/>
+ <val o="253e56" v="119.514"/>
+ <val o="254c67" v="118.922"/>
+ <val o="255a76" v="118.86"/>
+ <val o="256887" v="117.264"/>
+ <val o="257697" v="118.022"/>
+ <val o="2584a8" v="116.819"/>
+ <val o="2592b6" v="118.384"/>
+ <val o="25a0c7" v="119.276"/>
+ <val o="25aed7" v="118.81"/>
+ <val o="25bce7" v="118.676"/>
+ <val o="25caf8" v="118.108"/>
+ <val o="25d907" v="119.625"/>
+ <val o="25e718" v="119.042"/>
+ <val o="25f527" v="119.638"/>
+ <val o="260338" v="120.355"/>
+ <val o="261149" v="118.728"/>
+ <val o="261f59" v="119.777"/>
+ <val o="262d68" v="122.621"/>
+ <val o="263b83" v="120.494"/>
+ <val o="264986" v="122.335"/>
+ <val o="265795" v="123.001"/>
+ <val o="2665a6" v="123.827"/>
+ <val o="2673b5" v="122.939"/>
+ <val o="2681c6" v="122.398"/>
+ <val o="268fd5" v="121.212"/>
+ <val o="269de6" v="120.844"/>
+ <val o="26abf6" v="120.054"/>
+ <val o="26ba06" v="118.297"/>
+ <val o="26c817" v="117.795"/>
+ <val o="26d62b" v="117.996"/>
+ <val o="26e436" v="119.287"/>
+ <val o="26f247" v="118.815"/>
+ <val o="270057" v="118.955"/>
+ <val o="270e67" v="118.449"/>
+ <val o="271c77" v="119.157"/>
+ <val o="272a87" v="120.124"/>
+ <val o="273897" v="119.858"/>
+ <val o="2746a8" v="120.668"/>
+ <val o="2754b9" v="121.067"/>
+ <val o="2762c7" v="118.265"/>
+ <val o="2770d8" v="120.308"/>
+ <val o="277ee7" v="122.851"/>
+ </par>
+ <par memind="440600" h="3dc1a8de">
+ <val o="0" v="-1275"/>
+ <val o="e08" v="-1482"/>
+ <val o="1c32" v="-1562"/>
+ <val o="2a3c" v="-1643"/>
+ <val o="3835" v="-1446"/>
+ <val o="4645" v="-1276"/>
+ <val o="5455" v="-1049"/>
+ <val o="6265" v="-1694"/>
+ <val o="7075" v="-1760"/>
+ <val o="7e85" v="-1662"/>
+ <val o="8c96" v="-2067"/>
+ <val o="9aa5" v="-1992"/>
+ <val o="a8b6" v="-1928"/>
+ <val o="b6c5" v="-2018"/>
+ <val o="c4d7" v="-7"/>
+ <val o="d30b" v="-6"/>
+ <val o="e0f6" v="-7"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="-7"/>
+ <val o="11937" v="-7"/>
+ <val o="12746" v="-7"/>
+ <val o="13556" v="-7"/>
+ <val o="14366" v="-7"/>
+ <val o="15181" v="-8"/>
+ <val o="15f85" v="-7"/>
+ <val o="16d95" v="-7"/>
+ <val o="17ba4" v="-7"/>
+ <val o="189b5" v="-7"/>
+ <val o="197c4" v="-7"/>
+ <val o="1a5d5" v="-7"/>
+ <val o="1b3e6" v="-7"/>
+ <val o="1c1f6" v="-7"/>
+ <val o="1d005" v="-7"/>
+ <val o="1de15" v="-7"/>
+ <val o="1ec25" v="-7"/>
+ <val o="1fa36" v="-7"/>
+ <val o="20845" v="-7"/>
+ <val o="21656" v="-7"/>
+ <val o="22465" v="-7"/>
+ <val o="23276" v="-7"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="-7"/>
+ <val o="25ca7" v="-7"/>
+ <val o="26ab7" v="-7"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="-7"/>
+ <val o="294e6" v="-7"/>
+ <val o="2a301" v="-7"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="-7"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="-7"/>
+ <val o="31375" v="-7"/>
+ <val o="3219e" v="-7"/>
+ <val o="32f96" v="-7"/>
+ <val o="33da6" v="-7"/>
+ <val o="34bb6" v="-7"/>
+ <val o="359de" v="-7"/>
+ <val o="367d6" v="-7"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="-7"/>
+ <val o="3bc36" v="-7"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="-7"/>
+ <val o="3e667" v="-7"/>
+ <val o="3f481" v="-7"/>
+ <val o="40285" v="-7"/>
+ <val o="41095" v="-7"/>
+ <val o="41ea5" v="-7"/>
+ <val o="42cb5" v="-7"/>
+ <val o="43ac5" v="-7"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="-7"/>
+ <val o="464f5" v="-7"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="-7"/>
+ <val o="54600" v="-7"/>
+ <val o="55406" v="-7"/>
+ <val o="56215" v="-7"/>
+ <val o="57026" v="-7"/>
+ <val o="57e36" v="-7"/>
+ <val o="58c46" v="-7"/>
+ <val o="59a70" v="-7"/>
+ <val o="5a867" v="-7"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="-7"/>
+ <val o="5eeb8" v="-7"/>
+ <val o="5fcc6" v="-7"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="-7"/>
+ <val o="65f37" v="-7"/>
+ <val o="66d46" v="-7"/>
+ <val o="67b57" v="-7"/>
+ <val o="68967" v="-7"/>
+ <val o="69782" v="-7"/>
+ <val o="6a586" v="-7"/>
+ <val o="6b395" v="-7"/>
+ <val o="6c1a6" v="-7"/>
+ <val o="6cfb5" v="-7"/>
+ <val o="6ddc6" v="-7"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="-7"/>
+ <val o="707f6" v="-7"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="-7"/>
+ <val o="74e47" v="-7"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="-7"/>
+ <val o="7bebf" v="-7"/>
+ <val o="7cccf" v="-7"/>
+ <val o="7dadf" v="-7"/>
+ <val o="7e8fa" v="-7"/>
+ <val o="7f70a" v="-7"/>
+ <val o="8051a" v="-7"/>
+ <val o="8132a" v="-7"/>
+ <val o="8213a" v="-7"/>
+ <val o="82f4a" v="-7"/>
+ <val o="83d5a" v="-7"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="-7"/>
+ <val o="891bb" v="-7"/>
+ <val o="89fca" v="-7"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="-7"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="-7"/>
+ <val o="93a84" v="-7"/>
+ <val o="94885" v="-7"/>
+ <val o="95694" v="-7"/>
+ <val o="964a5" v="-7"/>
+ <val o="972b4" v="-7"/>
+ <val o="980c5" v="-7"/>
+ <val o="98ed4" v="-7"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="-7"/>
+ <val o="9c716" v="-7"/>
+ <val o="9d526" v="-7"/>
+ <val o="9e336" v="-7"/>
+ <val o="9f145" v="-7"/>
+ <val o="9ff56" v="-7"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="-1845"/>
+ <val o="a2986" v="-631"/>
+ <val o="a3795" v="1564"/>
+ <val o="a45a7" v="-66"/>
+ <val o="a53b6" v="-393"/>
+ <val o="a61c7" v="-691"/>
+ <val o="a6fd6" v="-883"/>
+ <val o="a7e00" v="-1575"/>
+ <val o="a8c00" v="-2209"/>
+ <val o="a9a05" v="109"/>
+ <val o="aa815" v="-420"/>
+ <val o="ab625" v="-859"/>
+ <val o="ac435" v="-628"/>
+ <val o="ad245" v="516"/>
+ <val o="ae055" v="1839"/>
+ <val o="aee65" v="293"/>
+ <val o="afc75" v="1185"/>
+ <val o="b0a85" v="3946"/>
+ <val o="b26a6" v="4230"/>
+ <val o="b34b6" v="3689"/>
+ <val o="b42c6" v="248"/>
+ <val o="b50d6" v="430"/>
+ <val o="b5ee7" v="1026"/>
+ <val o="b6cf6" v="-526"/>
+ <val o="b7b07" v="-258"/>
+ <val o="b8917" v="-65"/>
+ <val o="b9728" v="-489"/>
+ <val o="ba537" v="-842"/>
+ <val o="bb347" v="1082"/>
+ <val o="bc157" v="310"/>
+ <val o="bcf67" v="-1112"/>
+ <val o="bdd81" v="3632"/>
+ <val o="beb86" v="513"/>
+ <val o="bf995" v="214"/>
+ <val o="c07a6" v="-292"/>
+ <val o="c15b5" v="-127"/>
+ <val o="c23c6" v="495"/>
+ <val o="c31d5" v="1815"/>
+ <val o="c3fe6" v="818"/>
+ <val o="c4df5" v="1539"/>
+ <val o="c5c06" v="680"/>
+ <val o="c6a16" v="712"/>
+ <val o="c7826" v="1280"/>
+ <val o="c8636" v="397"/>
+ <val o="c9446" v="493"/>
+ <val o="ca256" v="250"/>
+ <val o="cb066" v="785"/>
+ <val o="cbe76" v="-201"/>
+ <val o="ccc87" v="2156"/>
+ <val o="cda96" v="2937"/>
+ <val o="ce8a8" v="2107"/>
+ <val o="cf6b7" v="2824"/>
+ <val o="d04c8" v="2269"/>
+ <val o="d12d7" v="1441"/>
+ <val o="d20e7" v="-297"/>
+ <val o="d2f02" v="-2280"/>
+ <val o="d3d05" v="-1189"/>
+ <val o="d4b15" v="-964"/>
+ <val o="d5926" v="-442"/>
+ <val o="d6735" v="261"/>
+ <val o="d7546" v="1309"/>
+ <val o="d8355" v="-849"/>
+ <val o="d9166" v="178"/>
+ <val o="d9f75" v="1111"/>
+ <val o="dad87" v="2750"/>
+ <val o="dbb97" v="2769"/>
+ <val o="dc9a8" v="2973"/>
+ <val o="dd7b7" v="1327"/>
+ <val o="de5c6" v="454"/>
+ <val o="df3d7" v="199"/>
+ <val o="e01d7" v="167"/>
+ <val o="e0fe5" v="556"/>
+ <val o="e1df5" v="416"/>
+ <val o="e2c04" v="-370"/>
+ <val o="e3a14" v="-1154"/>
+ <val o="e4824" v="93"/>
+ <val o="e5634" v="-843"/>
+ <val o="e6444" v="171"/>
+ <val o="e7255" v="-646"/>
+ <val o="e806f" v="-723"/>
+ <val o="e8e7f" v="2665"/>
+ <val o="e9c8e" v="837"/>
+ <val o="eaa9f" v="698"/>
+ <val o="eb8ae" v="1097"/>
+ <val o="ec6bf" v="2649"/>
+ <val o="ed4ce" v="-495"/>
+ <val o="ee2df" v="1165"/>
+ <val o="ef0ef" v="542"/>
+ <val o="eff01" v="1871"/>
+ <val o="f0d10" v="979"/>
+ <val o="f1b20" v="1210"/>
+ <val o="f2930" v="-356"/>
+ <val o="f3740" v="1654"/>
+ <val o="f4551" v="1368"/>
+ <val o="f5361" v="1462"/>
+ <val o="f6172" v="1612"/>
+ <val o="f6f80" v="1309"/>
+ <val o="f7d91" v="1886"/>
+ <val o="f8ba1" v="1136"/>
+ <val o="f99b1" v="1169"/>
+ <val o="fa7c0" v="1403"/>
+ <val o="fb5d1" v="1316"/>
+ <val o="fc3e0" v="-1041"/>
+ <val o="fd1fb" v="-1190"/>
+ <val o="fe00b" v="-1609"/>
+ <val o="fee1c" v="-199"/>
+ <val o="ffc2c" v="-252"/>
+ <val o="100a3b" v="585"/>
+ <val o="10184c" v="1069"/>
+ <val o="10265b" v="1973"/>
+ <val o="10346c" v="1831"/>
+ <val o="10427b" v="1127"/>
+ <val o="10508d" v="1767"/>
+ <val o="105e9d" v="1343"/>
+ <val o="106cad" v="1564"/>
+ <val o="107abd" v="849"/>
+ <val o="1088cd" v="805"/>
+ <val o="1096de" v="1093"/>
+ <val o="10a4ed" v="880"/>
+ <val o="10b2fe" v="1254"/>
+ <val o="10c10d" v="2664"/>
+ <val o="10cf1e" v="1368"/>
+ <val o="10dd2e" v="1009"/>
+ <val o="10eb66" v="208"/>
+ <val o="10f94e" v="22"/>
+ <val o="11075e" v="1142"/>
+ <val o="11156d" v="286"/>
+ <val o="112388" v="-1168"/>
+ <val o="113187" v="712"/>
+ <val o="113fb0" v="227"/>
+ <val o="114da6" v="236"/>
+ <val o="115bb6" v="372"/>
+ <val o="1169c6" v="1441"/>
+ <val o="1177d6" v="2015"/>
+ <val o="1185e8" v="1211"/>
+ <val o="1193f7" v="1284"/>
+ <val o="11a208" v="369"/>
+ <val o="11b017" v="-310"/>
+ <val o="11be2f" v="-802"/>
+ <val o="11cc37" v="781"/>
+ <val o="11da47" v="491"/>
+ <val o="11e857" v="1023"/>
+ <val o="11f667" v="516"/>
+ <val o="120578" v="1"/>
+ <val o="121386" v="1"/>
+ <val o="122196" v="2"/>
+ <val o="122fa6" v="1"/>
+ <val o="123db5" v="1"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="1"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="-1"/>
+ <val o="128305" v="-1"/>
+ <val o="129115" v="-1"/>
+ <val o="129f25" v="-1"/>
+ <val o="12ad35" v="-1"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="1"/>
+ <val o="12d766" v="1"/>
+ <val o="12e575" v="2"/>
+ <val o="12f386" v="1"/>
+ <val o="130196" v="1"/>
+ <val o="130fa6" v="1"/>
+ <val o="131db7" v="1"/>
+ <val o="132bc5" v="1"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="2274"/>
+ <val o="1774a3" v="1775"/>
+ <val o="1782b3" v="1153"/>
+ <val o="1790c5" v="769"/>
+ <val o="179ed4" v="-846"/>
+ <val o="17ace4" v="-2362"/>
+ <val o="17bafd" v="-2961"/>
+ <val o="17c90f" v="-2519"/>
+ <val o="17d71e" v="-2447"/>
+ <val o="17e52f" v="-2865"/>
+ <val o="17f33f" v="-2276"/>
+ <val o="18014f" v="-1250"/>
+ <val o="180f5f" v="-716"/>
+ <val o="181d6e" v="-1489"/>
+ <val o="182b7f" v="-2004"/>
+ <val o="18398f" v="-1055"/>
+ <val o="1847a1" v="-978"/>
+ <val o="1855af" v="-1269"/>
+ <val o="1863c0" v="-3170"/>
+ <val o="1871cf" v="-2668"/>
+ <val o="187fe0" v="-2540"/>
+ <val o="188def" v="-2377"/>
+ <val o="189c00" v="-1126"/>
+ <val o="18b80d" v="1219"/>
+ <val o="18c61c" v="-1061"/>
+ <val o="18d42c" v="-1519"/>
+ <val o="18e23b" v="-1284"/>
+ <val o="18f04b" v="-1902"/>
+ <val o="18fe5e" v="-1623"/>
+ <val o="190c76" v="-778"/>
+ <val o="191a86" v="-1730"/>
+ <val o="192896" v="-1745"/>
+ <val o="1936a6" v="-1872"/>
+ <val o="1944b7" v="-1207"/>
+ <val o="1952c6" v="-211"/>
+ <val o="1960d7" v="1619"/>
+ <val o="196ee6" v="-764"/>
+ <val o="197cf8" v="-827"/>
+ <val o="198b0f" v="40"/>
+ <val o="19991f" v="-199"/>
+ <val o="19b541" v="-967"/>
+ <val o="19c34d" v="-680"/>
+ <val o="19d15e" v="-385"/>
+ <val o="19df80" v="-241"/>
+ <val o="19ed90" v="371"/>
+ <val o="19eebe" v="471"/>
+ <val o="19fb8e" v="61"/>
+ <val o="1a09a0" v="-2440"/>
+ <val o="1a17ae" v="-3447"/>
+ <val o="1a25be" v="-3862"/>
+ <val o="1a33cd" v="-1657"/>
+ <val o="1a41dd" v="-2273"/>
+ <val o="1a4fed" v="-4132"/>
+ <val o="1a5e08" v="-3735"/>
+ <val o="1a6c05" v="-2655"/>
+ <val o="1a7a15" v="-3286"/>
+ <val o="1a8826" v="-3377"/>
+ <val o="1a9637" v="-2707"/>
+ <val o="1aa445" v="-1980"/>
+ <val o="1ab255" v="-797"/>
+ <val o="1ac065" v="-2046"/>
+ <val o="1ace75" v="-2793"/>
+ <val o="1adc87" v="-1939"/>
+ <val o="1aea96" v="-2092"/>
+ <val o="1af8a7" v="-2211"/>
+ <val o="1b06b7" v="-2679"/>
+ <val o="1b14c6" v="-2530"/>
+ <val o="1c7460" v="453"/>
+ <val o="1c8270" v="-157"/>
+ <val o="1c907e" v="1143"/>
+ <val o="1c9e8f" v="-146"/>
+ <val o="1caca2" v="-1002"/>
+ <val o="1cbab1" v="-1402"/>
+ <val o="1cc8c1" v="2949"/>
+ <val o="1cd6d0" v="2229"/>
+ <val o="1ce4de" v="1022"/>
+ <val o="1cf2f0" v="-1628"/>
+ <val o="1d0109" v="-1835"/>
+ <val o="1d0f06" v="-211"/>
+ <val o="1d1d15" v="-767"/>
+ <val o="1d2b25" v="-792"/>
+ <val o="1d3935" v="173"/>
+ <val o="1d4745" v="776"/>
+ <val o="1d5555" v="1249"/>
+ <val o="1d6366" v="-957"/>
+ <val o="1d7175" v="-911"/>
+ <val o="1d7f86" v="-243"/>
+ <val o="1d8d95" v="-65"/>
+ <val o="1d9ba6" v="-308"/>
+ <val o="1da9b6" v="-811"/>
+ <val o="1db7c7" v="-806"/>
+ <val o="1dc5d5" v="-952"/>
+ <val o="1dd3e6" v="-716"/>
+ <val o="1de1f5" v="-1618"/>
+ <val o="1df006" v="-1910"/>
+ <val o="1dfe16" v="-1809"/>
+ <val o="1e0c26" v="-2224"/>
+ <val o="1e1a36" v="-2272"/>
+ <val o="1e2847" v="-2317"/>
+ <val o="1e3659" v="-2283"/>
+ <val o="1e4467" v="-2334"/>
+ <val o="1e5281" v="-1860"/>
+ <val o="1e6086" v="-2139"/>
+ <val o="1e6e96" v="-2206"/>
+ <val o="1e7ca6" v="-296"/>
+ <val o="1e8ab5" v="-449"/>
+ <val o="1e98c6" v="-142"/>
+ <val o="1ea6d5" v="-422"/>
+ <val o="1eb4e6" v="-365"/>
+ <val o="1ec2f6" v="-581"/>
+ <val o="1ed106" v="-263"/>
+ <val o="1edf16" v="-325"/>
+ <val o="1eed26" v="-142"/>
+ <val o="1efb36" v="-355"/>
+ <val o="1f0946" v="-310"/>
+ <val o="1f1756" v="496"/>
+ <val o="1f2566" v="660"/>
+ <val o="1f3376" v="1246"/>
+ <val o="1f4187" v="2889"/>
+ <val o="1f4f96" v="1532"/>
+ <val o="1f5da7" v="-143"/>
+ <val o="1f6bb6" v="-518"/>
+ <val o="1f79c7" v="225"/>
+ <val o="1f87d6" v="-1667"/>
+ <val o="1f95e7" v="-2330"/>
+ <val o="1fa401" v="-1727"/>
+ <val o="1fb204" v="-1489"/>
+ <val o="1fc016" v="-1515"/>
+ <val o="1fce25" v="-476"/>
+ <val o="1fdc35" v="-193"/>
+ <val o="1fea45" v="128"/>
+ <val o="1ff855" v="376"/>
+ <val o="200665" v="2872"/>
+ <val o="201475" v="408"/>
+ <val o="202286" v="1923"/>
+ <val o="203095" v="1830"/>
+ <val o="203ea5" v="1798"/>
+ <val o="204cb6" v="334"/>
+ <val o="205ac6" v="1260"/>
+ <val o="2068d6" v="1815"/>
+ <val o="2076e6" v="2272"/>
+ <val o="2084f6" v="262"/>
+ <val o="209306" v="-387"/>
+ <val o="20a116" v="-613"/>
+ <val o="20af26" v="-251"/>
+ <val o="20bd37" v="-885"/>
+ <val o="20cb46" v="551"/>
+ <val o="20d957" v="48"/>
+ <val o="20e767" v="-982"/>
+ <val o="20f581" v="-1612"/>
+ <val o="210386" v="-1125"/>
+ <val o="211194" v="-381"/>
+ <val o="211fa5" v="-441"/>
+ <val o="212db5" v="71"/>
+ <val o="213bc5" v="1020"/>
+ <val o="2149d6" v="760"/>
+ <val o="2157e5" v="-319"/>
+ <val o="2165f6" v="-1144"/>
+ <val o="217406" v="302"/>
+ <val o="218217" v="-319"/>
+ <val o="219026" v="-582"/>
+ <val o="219e39" v="408"/>
+ <val o="21ac46" v="1031"/>
+ <val o="21ba57" v="1139"/>
+ <val o="21c867" v="2082"/>
+ <val o="21d677" v="-1202"/>
+ <val o="21e487" v="622"/>
+ <val o="21f296" v="456"/>
+ <val o="2200a6" v="-736"/>
+ <val o="220eb7" v="-818"/>
+ <val o="221cc6" v="1684"/>
+ <val o="222ad7" v="307"/>
+ <val o="2238e7" v="-801"/>
+ <val o="224701" v="-1256"/>
+ <val o="225505" v="3308"/>
+ <val o="226315" v="506"/>
+ <val o="227125" v="639"/>
+ <val o="227f35" v="1963"/>
+ <val o="228d45" v="2867"/>
+ <val o="229b54" v="-831"/>
+ <val o="22a965" v="-270"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="2010"/>
+ <val o="22d397" v="3408"/>
+ <val o="22e1a6" v="3190"/>
+ <val o="22efb6" v="-187"/>
+ <val o="22fdc7" v="-225"/>
+ <val o="230bd7" v="531"/>
+ <val o="2319e6" v="-823"/>
+ <val o="2327f6" v="62"/>
+ <val o="23361b" v="1079"/>
+ <val o="234416" v="1547"/>
+ <val o="235226" v="900"/>
+ <val o="236037" v="112"/>
+ <val o="236e46" v="1780"/>
+ <val o="237c57" v="1407"/>
+ <val o="238a66" v="298"/>
+ <val o="239881" v="565"/>
+ <val o="23a685" v="-311"/>
+ <val o="23b495" v="-657"/>
+ <val o="23c2a4" v="168"/>
+ <val o="23d0b5" v="647"/>
+ <val o="23dec4" v="1427"/>
+ <val o="23ecd5" v="829"/>
+ <val o="23fae4" v="-5"/>
+ <val o="2408f6" v="1197"/>
+ <val o="241706" v="3751"/>
+ <val o="242518" v="2991"/>
+ <val o="243325" v="2801"/>
+ <val o="244137" v="-1188"/>
+ <val o="244f46" v="-828"/>
+ <val o="246b66" v="-799"/>
+ <val o="247976" v="57"/>
+ <val o="248786" v="4601"/>
+ <val o="24957e" v="1911"/>
+ <val o="24a38f" v="799"/>
+ <val o="24b19c" v="-972"/>
+ <val o="24bfac" v="-708"/>
+ <val o="24cdbc" v="-790"/>
+ <val o="24dbcd" v="-490"/>
+ <val o="24e9e5" v="-1316"/>
+ <val o="24f808" v="-825"/>
+ <val o="250616" v="-1012"/>
+ <val o="251426" v="-1178"/>
+ <val o="252236" v="-35"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="1352"/>
+ <val o="254c67" v="1059"/>
+ <val o="255a76" v="1290"/>
+ <val o="256887" v="2079"/>
+ <val o="257697" v="3618"/>
+ <val o="2584a8" v="-4684"/>
+ <val o="2592b6" v="-2470"/>
+ <val o="25a0c7" v="-556"/>
+ <val o="25aed7" v="189"/>
+ <val o="25bce7" v="260"/>
+ <val o="25caf8" v="816"/>
+ <val o="25d907" v="2489"/>
+ <val o="25e718" v="2732"/>
+ <val o="25f527" v="2234"/>
+ <val o="260338" v="57"/>
+ <val o="261149" v="1219"/>
+ <val o="261f59" v="632"/>
+ <val o="262d68" v="-1360"/>
+ <val o="263b83" v="38"/>
+ <val o="264986" v="-980"/>
+ <val o="265795" v="-1501"/>
+ <val o="2665a6" v="-2119"/>
+ <val o="2673b5" v="-1618"/>
+ <val o="2681c6" v="-1314"/>
+ <val o="268fd5" v="-432"/>
+ <val o="269de6" v="309"/>
+ <val o="26abf6" v="685"/>
+ <val o="26ba06" v="1692"/>
+ <val o="26c817" v="1899"/>
+ <val o="26d62b" v="3622"/>
+ <val o="26e436" v="2709"/>
+ <val o="26f247" v="3037"/>
+ <val o="270057" v="2898"/>
+ <val o="270e67" v="3251"/>
+ <val o="271c77" v="186"/>
+ <val o="272a87" v="-636"/>
+ <val o="273897" v="-421"/>
+ <val o="2746a8" v="-729"/>
+ <val o="2754b9" v="-978"/>
+ <val o="2762c7" v="2670"/>
+ <val o="2770d8" v="1255"/>
+ <val o="277ee7" v="-496"/>
+ </par>
+ <par memind="424600" h="3dc1a8de">
+ <val o="0" v="-4313"/>
+ <val o="e08" v="-4163"/>
+ <val o="1c32" v="-4102"/>
+ <val o="2a3c" v="-4091"/>
+ <val o="3835" v="-3982"/>
+ <val o="4645" v="-3934"/>
+ <val o="5455" v="-4439"/>
+ <val o="6265" v="-5323"/>
+ <val o="7075" v="-6298"/>
+ <val o="7e85" v="-7332"/>
+ <val o="8c96" v="-7541"/>
+ <val o="9aa5" v="-7248"/>
+ <val o="a8b6" v="-6869"/>
+ <val o="b6c5" v="-6454"/>
+ <val o="c4d7" v="-7"/>
+ <val o="d30b" v="-7"/>
+ <val o="e0f6" v="-7"/>
+ <val o="ef06" v="-7"/>
+ <val o="fd17" v="-7"/>
+ <val o="10b27" v="-8"/>
+ <val o="11937" v="-8"/>
+ <val o="12746" v="-7"/>
+ <val o="13556" v="-8"/>
+ <val o="14366" v="-9"/>
+ <val o="15181" v="-9"/>
+ <val o="15f85" v="-8"/>
+ <val o="16d95" v="-8"/>
+ <val o="17ba4" v="-8"/>
+ <val o="189b5" v="-8"/>
+ <val o="197c4" v="-8"/>
+ <val o="1a5d5" v="-9"/>
+ <val o="1b3e6" v="-9"/>
+ <val o="1c1f6" v="-8"/>
+ <val o="1d005" v="-8"/>
+ <val o="1de15" v="-8"/>
+ <val o="1ec25" v="-8"/>
+ <val o="1fa36" v="-8"/>
+ <val o="20845" v="-9"/>
+ <val o="21656" v="-8"/>
+ <val o="22465" v="-8"/>
+ <val o="23276" v="-8"/>
+ <val o="24086" v="-7"/>
+ <val o="24e99" v="-7"/>
+ <val o="25ca7" v="-8"/>
+ <val o="26ab7" v="-8"/>
+ <val o="278c6" v="-8"/>
+ <val o="286d6" v="-8"/>
+ <val o="294e6" v="-9"/>
+ <val o="2a301" v="-9"/>
+ <val o="2b105" v="-8"/>
+ <val o="2bf15" v="-8"/>
+ <val o="2cd25" v="-8"/>
+ <val o="2db35" v="-8"/>
+ <val o="2e946" v="-8"/>
+ <val o="2f755" v="-7"/>
+ <val o="30566" v="-9"/>
+ <val o="31375" v="-8"/>
+ <val o="3219e" v="-8"/>
+ <val o="32f96" v="-8"/>
+ <val o="33da6" v="-8"/>
+ <val o="34bb6" v="-8"/>
+ <val o="359de" v="-8"/>
+ <val o="367d6" v="-8"/>
+ <val o="375e6" v="-8"/>
+ <val o="3840e" v="-7"/>
+ <val o="3921e" v="-7"/>
+ <val o="3a016" v="-7"/>
+ <val o="3ae27" v="-8"/>
+ <val o="3bc36" v="-8"/>
+ <val o="3ca47" v="-7"/>
+ <val o="3d856" v="-8"/>
+ <val o="3e667" v="-8"/>
+ <val o="3f481" v="-9"/>
+ <val o="40285" v="-9"/>
+ <val o="41095" v="-9"/>
+ <val o="41ea5" v="-9"/>
+ <val o="42cb5" v="-9"/>
+ <val o="43ac5" v="-8"/>
+ <val o="448d5" v="-7"/>
+ <val o="456e6" v="-8"/>
+ <val o="464f5" v="-7"/>
+ <val o="480ff" v="-7"/>
+ <val o="48f0e" v="-6"/>
+ <val o="49d1d" v="-7"/>
+ <val o="4ab46" v="-7"/>
+ <val o="4b955" v="-7"/>
+ <val o="4c769" v="-6"/>
+ <val o="4d577" v="-7"/>
+ <val o="4e387" v="-7"/>
+ <val o="4f196" v="-7"/>
+ <val o="4ffa6" v="-7"/>
+ <val o="50dd0" v="-7"/>
+ <val o="51bc6" v="-7"/>
+ <val o="529d6" v="-8"/>
+ <val o="537e7" v="-8"/>
+ <val o="54600" v="-9"/>
+ <val o="55406" v="-8"/>
+ <val o="56215" v="-8"/>
+ <val o="57026" v="-8"/>
+ <val o="57e36" v="-8"/>
+ <val o="58c46" v="-8"/>
+ <val o="59a70" v="-8"/>
+ <val o="5a867" v="-8"/>
+ <val o="5b676" v="-7"/>
+ <val o="5c487" v="-6"/>
+ <val o="5d296" v="-7"/>
+ <val o="5e0a9" v="-7"/>
+ <val o="5eeb8" v="-7"/>
+ <val o="5fcc6" v="-7"/>
+ <val o="60ad7" v="-7"/>
+ <val o="618e7" v="-7"/>
+ <val o="626f7" v="-7"/>
+ <val o="63507" v="-7"/>
+ <val o="64317" v="-7"/>
+ <val o="65127" v="-7"/>
+ <val o="65f37" v="-8"/>
+ <val o="66d46" v="-8"/>
+ <val o="67b57" v="-8"/>
+ <val o="68967" v="-8"/>
+ <val o="69782" v="-8"/>
+ <val o="6a586" v="-8"/>
+ <val o="6b395" v="-8"/>
+ <val o="6c1a6" v="-9"/>
+ <val o="6cfb5" v="-8"/>
+ <val o="6ddc6" v="-8"/>
+ <val o="6ebd6" v="-7"/>
+ <val o="6f9e6" v="-8"/>
+ <val o="707f6" v="-7"/>
+ <val o="71607" v="-6"/>
+ <val o="72417" v="-6"/>
+ <val o="73227" v="-6"/>
+ <val o="74037" v="-7"/>
+ <val o="74e47" v="-7"/>
+ <val o="75c57" v="-7"/>
+ <val o="76a63" v="-6"/>
+ <val o="77873" v="-7"/>
+ <val o="78680" v="-6"/>
+ <val o="7948f" v="-7"/>
+ <val o="7a29f" v="-7"/>
+ <val o="7b0af" v="-7"/>
+ <val o="7bebf" v="-8"/>
+ <val o="7cccf" v="-8"/>
+ <val o="7dadf" v="-8"/>
+ <val o="7e8fa" v="-8"/>
+ <val o="7f70a" v="-8"/>
+ <val o="8051a" v="-9"/>
+ <val o="8132a" v="-9"/>
+ <val o="8213a" v="-9"/>
+ <val o="82f4a" v="-8"/>
+ <val o="83d5a" v="-8"/>
+ <val o="84b6a" v="-7"/>
+ <val o="8597a" v="-7"/>
+ <val o="8678b" v="-7"/>
+ <val o="8759b" v="-7"/>
+ <val o="883ac" v="-7"/>
+ <val o="891bb" v="-8"/>
+ <val o="89fca" v="-7"/>
+ <val o="8adda" v="-7"/>
+ <val o="8bbeb" v="-7"/>
+ <val o="8c9fc" v="-7"/>
+ <val o="8d80b" v="-7"/>
+ <val o="8e61a" v="-7"/>
+ <val o="8f42a" v="-7"/>
+ <val o="9023a" v="-7"/>
+ <val o="9104a" v="-8"/>
+ <val o="91e5a" v="-7"/>
+ <val o="92c6a" v="-8"/>
+ <val o="93a84" v="-9"/>
+ <val o="94885" v="-8"/>
+ <val o="95694" v="-9"/>
+ <val o="964a5" v="-9"/>
+ <val o="972b4" v="-8"/>
+ <val o="980c5" v="-8"/>
+ <val o="98ed4" v="-8"/>
+ <val o="99ce5" v="-8"/>
+ <val o="9aaf5" v="-7"/>
+ <val o="9b906" v="-7"/>
+ <val o="9c716" v="-7"/>
+ <val o="9d526" v="-7"/>
+ <val o="9e336" v="-7"/>
+ <val o="9f145" v="-7"/>
+ <val o="9ff56" v="-7"/>
+ <val o="a0d65" v="-7"/>
+ <val o="a1b77" v="-6460"/>
+ <val o="a2986" v="-3546"/>
+ <val o="a3795" v="-986"/>
+ <val o="a45a7" v="697"/>
+ <val o="a53b6" v="776"/>
+ <val o="a61c7" v="925"/>
+ <val o="a6fd6" v="125"/>
+ <val o="a7e00" v="456"/>
+ <val o="a8c00" v="903"/>
+ <val o="a9a05" v="278"/>
+ <val o="aa815" v="27"/>
+ <val o="ab625" v="43"/>
+ <val o="ac435" v="173"/>
+ <val o="ad245" v="947"/>
+ <val o="ae055" v="728"/>
+ <val o="aee65" v="-452"/>
+ <val o="afc75" v="-117"/>
+ <val o="b0a85" v="23"/>
+ <val o="b26a6" v="182"/>
+ <val o="b34b6" v="-152"/>
+ <val o="b42c6" v="-423"/>
+ <val o="b50d6" v="-705"/>
+ <val o="b5ee7" v="-790"/>
+ <val o="b6cf6" v="-1575"/>
+ <val o="b7b07" v="-2027"/>
+ <val o="b8917" v="-1757"/>
+ <val o="b9728" v="-1722"/>
+ <val o="ba537" v="-1901"/>
+ <val o="bb347" v="-741"/>
+ <val o="bc157" v="-812"/>
+ <val o="bcf67" v="-891"/>
+ <val o="bdd81" v="652"/>
+ <val o="beb86" v="411"/>
+ <val o="bf995" v="516"/>
+ <val o="c07a6" v="398"/>
+ <val o="c15b5" v="382"/>
+ <val o="c23c6" v="470"/>
+ <val o="c31d5" v="591"/>
+ <val o="c3fe6" v="267"/>
+ <val o="c4df5" v="770"/>
+ <val o="c5c06" v="164"/>
+ <val o="c6a16" v="438"/>
+ <val o="c7826" v="-43"/>
+ <val o="c8636" v="72"/>
+ <val o="c9446" v="249"/>
+ <val o="ca256" v="201"/>
+ <val o="cb066" v="115"/>
+ <val o="cbe76" v="-425"/>
+ <val o="ccc87" v="-229"/>
+ <val o="cda96" v="-284"/>
+ <val o="ce8a8" v="-247"/>
+ <val o="cf6b7" v="-135"/>
+ <val o="d04c8" v="-54"/>
+ <val o="d12d7" v="96"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="16"/>
+ <val o="d3d05" v="598"/>
+ <val o="d4b15" v="721"/>
+ <val o="d5926" v="818"/>
+ <val o="d6735" v="1067"/>
+ <val o="d7546" v="1245"/>
+ <val o="d8355" v="-117"/>
+ <val o="d9166" v="-721"/>
+ <val o="d9f75" v="-1504"/>
+ <val o="dad87" v="-2084"/>
+ <val o="dbb97" v="-2554"/>
+ <val o="dc9a8" v="-2345"/>
+ <val o="dd7b7" v="-2920"/>
+ <val o="de5c6" v="-2712"/>
+ <val o="df3d7" v="-2858"/>
+ <val o="e01d7" v="-2928"/>
+ <val o="e0fe5" v="-2803"/>
+ <val o="e1df5" v="-3032"/>
+ <val o="e2c04" v="-4017"/>
+ <val o="e3a14" v="-3918"/>
+ <val o="e4824" v="-3412"/>
+ <val o="e5634" v="-3441"/>
+ <val o="e6444" v="-2561"/>
+ <val o="e7255" v="-2139"/>
+ <val o="e806f" v="-1765"/>
+ <val o="e8e7f" v="-465"/>
+ <val o="e9c8e" v="-702"/>
+ <val o="eaa9f" v="-647"/>
+ <val o="eb8ae" v="-676"/>
+ <val o="ec6bf" v="-509"/>
+ <val o="ed4ce" v="-2150"/>
+ <val o="ee2df" v="-2355"/>
+ <val o="ef0ef" v="-3171"/>
+ <val o="eff01" v="-4031"/>
+ <val o="f0d10" v="-4338"/>
+ <val o="f1b20" v="-4651"/>
+ <val o="f2930" v="-4668"/>
+ <val o="f3740" v="-4346"/>
+ <val o="f4551" v="-4571"/>
+ <val o="f5361" v="-4929"/>
+ <val o="f6172" v="-4607"/>
+ <val o="f6f80" v="-4866"/>
+ <val o="f7d91" v="-4308"/>
+ <val o="f8ba1" v="-3897"/>
+ <val o="f99b1" v="-3784"/>
+ <val o="fa7c0" v="-2988"/>
+ <val o="fb5d1" v="-3099"/>
+ <val o="fc3e0" v="-3335"/>
+ <val o="fd1fb" v="-2686"/>
+ <val o="fe00b" v="-2522"/>
+ <val o="fee1c" v="-2074"/>
+ <val o="ffc2c" v="-1989"/>
+ <val o="100a3b" v="-1788"/>
+ <val o="10184c" v="-1795"/>
+ <val o="10265b" v="-2075"/>
+ <val o="10346c" v="-2698"/>
+ <val o="10427b" v="-3932"/>
+ <val o="10508d" v="-4406"/>
+ <val o="105e9d" v="-4366"/>
+ <val o="106cad" v="-4692"/>
+ <val o="107abd" v="-4302"/>
+ <val o="1088cd" v="-3927"/>
+ <val o="1096de" v="-4101"/>
+ <val o="10a4ed" v="-4187"/>
+ <val o="10b2fe" v="-4342"/>
+ <val o="10c10d" v="-4162"/>
+ <val o="10cf1e" v="-4456"/>
+ <val o="10dd2e" v="-4132"/>
+ <val o="10eb66" v="-4499"/>
+ <val o="10f94e" v="-3882"/>
+ <val o="11075e" v="-3295"/>
+ <val o="11156d" v="-2863"/>
+ <val o="112388" v="-2668"/>
+ <val o="113187" v="-1778"/>
+ <val o="113fb0" v="-1810"/>
+ <val o="114da6" v="-1829"/>
+ <val o="115bb6" v="-1800"/>
+ <val o="1169c6" v="-1595"/>
+ <val o="1177d6" v="-2050"/>
+ <val o="1185e8" v="-2961"/>
+ <val o="1193f7" v="-3627"/>
+ <val o="11a208" v="-4830"/>
+ <val o="11b017" v="-4296"/>
+ <val o="11be2f" v="-5257"/>
+ <val o="11cc37" v="-4408"/>
+ <val o="11da47" v="-4326"/>
+ <val o="11e857" v="-4420"/>
+ <val o="11f667" v="-3950"/>
+ <val o="120578" v="-4"/>
+ <val o="121386" v="-4"/>
+ <val o="122196" v="-4"/>
+ <val o="122fa6" v="-3"/>
+ <val o="123db5" v="-3"/>
+ <val o="124bc5" v="-3"/>
+ <val o="1259d5" v="-2"/>
+ <val o="1267e4" v="-2"/>
+ <val o="127600" v="-2"/>
+ <val o="128305" v="-2"/>
+ <val o="129115" v="-2"/>
+ <val o="129f25" v="-2"/>
+ <val o="12ad35" v="-2"/>
+ <val o="12bb45" v="-1"/>
+ <val o="12c954" v="-2"/>
+ <val o="12d766" v="-2"/>
+ <val o="12e575" v="-3"/>
+ <val o="12f386" v="-2"/>
+ <val o="130196" v="-4"/>
+ <val o="130fa6" v="-3"/>
+ <val o="131db7" v="-3"/>
+ <val o="132bc5" v="-3"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="-6868"/>
+ <val o="1774a3" v="-6790"/>
+ <val o="1782b3" v="-7252"/>
+ <val o="1790c5" v="-6734"/>
+ <val o="179ed4" v="-6030"/>
+ <val o="17ace4" v="-5892"/>
+ <val o="17bafd" v="-6066"/>
+ <val o="17c90f" v="-5486"/>
+ <val o="17d71e" v="-5444"/>
+ <val o="17e52f" v="-5339"/>
+ <val o="17f33f" v="-4983"/>
+ <val o="18014f" v="-5190"/>
+ <val o="180f5f" v="-6313"/>
+ <val o="181d6e" v="-6839"/>
+ <val o="182b7f" v="-7853"/>
+ <val o="18398f" v="-13507"/>
+ <val o="1847a1" v="-13381"/>
+ <val o="1855af" v="-12778"/>
+ <val o="1863c0" v="-11890"/>
+ <val o="1871cf" v="-12338"/>
+ <val o="187fe0" v="-11774"/>
+ <val o="188def" v="-12649"/>
+ <val o="189c00" v="-11849"/>
+ <val o="18b80d" v="-7471"/>
+ <val o="18c61c" v="-8126"/>
+ <val o="18d42c" v="-7696"/>
+ <val o="18e23b" v="-6538"/>
+ <val o="18f04b" v="-6175"/>
+ <val o="18fe5e" v="-5664"/>
+ <val o="190c76" v="-4480"/>
+ <val o="191a86" v="-4300"/>
+ <val o="192896" v="-4263"/>
+ <val o="1936a6" v="-4119"/>
+ <val o="1944b7" v="-4103"/>
+ <val o="1952c6" v="-4511"/>
+ <val o="1960d7" v="-5135"/>
+ <val o="196ee6" v="-6038"/>
+ <val o="197cf8" v="-6392"/>
+ <val o="198b0f" v="-5899"/>
+ <val o="19991f" v="-6690"/>
+ <val o="19b541" v="-6603"/>
+ <val o="19c34d" v="-6159"/>
+ <val o="19d15e" v="-6128"/>
+ <val o="19df80" v="-6220"/>
+ <val o="19ed90" v="-6047"/>
+ <val o="19eebe" v="-6009"/>
+ <val o="19fb8e" v="-2295"/>
+ <val o="1a09a0" v="-2543"/>
+ <val o="1a17ae" v="-3085"/>
+ <val o="1a25be" v="-3269"/>
+ <val o="1a33cd" v="-2267"/>
+ <val o="1a41dd" v="-2159"/>
+ <val o="1a4fed" v="-1532"/>
+ <val o="1a5e08" v="-1675"/>
+ <val o="1a6c05" v="-960"/>
+ <val o="1a7a15" v="-1122"/>
+ <val o="1a8826" v="-1061"/>
+ <val o="1a9637" v="-505"/>
+ <val o="1aa445" v="-536"/>
+ <val o="1ab255" v="-991"/>
+ <val o="1ac065" v="-1818"/>
+ <val o="1ace75" v="-2574"/>
+ <val o="1adc87" v="-2844"/>
+ <val o="1aea96" v="-2608"/>
+ <val o="1af8a7" v="-2928"/>
+ <val o="1b06b7" v="-2112"/>
+ <val o="1b14c6" v="-2074"/>
+ <val o="1c7460" v="354"/>
+ <val o="1c8270" v="438"/>
+ <val o="1c907e" v="3408"/>
+ <val o="1c9e8f" v="3269"/>
+ <val o="1caca2" v="3655"/>
+ <val o="1cbab1" v="3521"/>
+ <val o="1cc8c1" v="5431"/>
+ <val o="1cd6d0" v="5560"/>
+ <val o="1ce4de" v="5660"/>
+ <val o="1cf2f0" v="5623"/>
+ <val o="1d0109" v="5896"/>
+ <val o="1d0f06" v="6656"/>
+ <val o="1d1d15" v="6647"/>
+ <val o="1d2b25" v="6733"/>
+ <val o="1d3935" v="6914"/>
+ <val o="1d4745" v="6873"/>
+ <val o="1d5555" v="6691"/>
+ <val o="1d6366" v="5814"/>
+ <val o="1d7175" v="5617"/>
+ <val o="1d7f86" v="5608"/>
+ <val o="1d8d95" v="-3230"/>
+ <val o="1d9ba6" v="-3656"/>
+ <val o="1da9b6" v="-3620"/>
+ <val o="1db7c7" v="-3449"/>
+ <val o="1dc5d5" v="-3601"/>
+ <val o="1dd3e6" v="-3735"/>
+ <val o="1de1f5" v="-5996"/>
+ <val o="1df006" v="-6718"/>
+ <val o="1dfe16" v="-6583"/>
+ <val o="1e0c26" v="-6767"/>
+ <val o="1e1a36" v="-6800"/>
+ <val o="1e2847" v="-6525"/>
+ <val o="1e3659" v="-6170"/>
+ <val o="1e4467" v="-5676"/>
+ <val o="1e5281" v="-4911"/>
+ <val o="1e6086" v="-4911"/>
+ <val o="1e6e96" v="-4801"/>
+ <val o="1e7ca6" v="-1982"/>
+ <val o="1e8ab5" v="-1810"/>
+ <val o="1e98c6" v="-1834"/>
+ <val o="1ea6d5" v="-2256"/>
+ <val o="1eb4e6" v="-2325"/>
+ <val o="1ec2f6" v="-2684"/>
+ <val o="1ed106" v="-2675"/>
+ <val o="1edf16" v="-2778"/>
+ <val o="1eed26" v="-2688"/>
+ <val o="1efb36" v="-2650"/>
+ <val o="1f0946" v="-2557"/>
+ <val o="1f1756" v="-2355"/>
+ <val o="1f2566" v="-2318"/>
+ <val o="1f3376" v="-2582"/>
+ <val o="1f4187" v="-2811"/>
+ <val o="1f4f96" v="-3182"/>
+ <val o="1f5da7" v="-3578"/>
+ <val o="1f6bb6" v="-3544"/>
+ <val o="1f79c7" v="-3148"/>
+ <val o="1f87d6" v="-3345"/>
+ <val o="1f95e7" v="-3137"/>
+ <val o="1fa401" v="-2809"/>
+ <val o="1fb204" v="-2501"/>
+ <val o="1fc016" v="-2493"/>
+ <val o="1fce25" v="-2157"/>
+ <val o="1fdc35" v="-2137"/>
+ <val o="1fea45" v="-2155"/>
+ <val o="1ff855" v="-2498"/>
+ <val o="200665" v="-2368"/>
+ <val o="201475" v="-3513"/>
+ <val o="202286" v="-4566"/>
+ <val o="203095" v="-5345"/>
+ <val o="203ea5" v="-6057"/>
+ <val o="204cb6" v="-5799"/>
+ <val o="205ac6" v="-5341"/>
+ <val o="2068d6" v="-5395"/>
+ <val o="2076e6" v="-5979"/>
+ <val o="2084f6" v="-6090"/>
+ <val o="209306" v="-6778"/>
+ <val o="20a116" v="-6378"/>
+ <val o="20af26" v="-5473"/>
+ <val o="20bd37" v="-5382"/>
+ <val o="20cb46" v="-4608"/>
+ <val o="20d957" v="-4316"/>
+ <val o="20e767" v="-4055"/>
+ <val o="20f581" v="-3867"/>
+ <val o="210386" v="-3482"/>
+ <val o="211194" v="-3116"/>
+ <val o="211fa5" v="-3010"/>
+ <val o="212db5" v="-2944"/>
+ <val o="213bc5" v="-2819"/>
+ <val o="2149d6" v="-3644"/>
+ <val o="2157e5" v="-4499"/>
+ <val o="2165f6" v="-5795"/>
+ <val o="217406" v="-6198"/>
+ <val o="218217" v="-6174"/>
+ <val o="219026" v="-6102"/>
+ <val o="219e39" v="-6218"/>
+ <val o="21ac46" v="-5898"/>
+ <val o="21ba57" v="-5986"/>
+ <val o="21c867" v="-5633"/>
+ <val o="21d677" v="-6210"/>
+ <val o="21e487" v="-5783"/>
+ <val o="21f296" v="-5726"/>
+ <val o="2200a6" v="-5539"/>
+ <val o="220eb7" v="-5408"/>
+ <val o="221cc6" v="-4608"/>
+ <val o="222ad7" v="-3876"/>
+ <val o="2238e7" v="-3618"/>
+ <val o="224701" v="-3292"/>
+ <val o="225505" v="-1685"/>
+ <val o="226315" v="-2072"/>
+ <val o="227125" v="-2050"/>
+ <val o="227f35" v="-1670"/>
+ <val o="228d45" v="-1792"/>
+ <val o="229b54" v="-3485"/>
+ <val o="22a965" v="-3911"/>
+ <val o="22b776" v="-4578"/>
+ <val o="22c586" v="-4788"/>
+ <val o="22d397" v="-4459"/>
+ <val o="22e1a6" v="-4693"/>
+ <val o="22efb6" v="-4830"/>
+ <val o="22fdc7" v="-4652"/>
+ <val o="230bd7" v="-4452"/>
+ <val o="2319e6" v="-5394"/>
+ <val o="2327f6" v="-5538"/>
+ <val o="23361b" v="-5866"/>
+ <val o="234416" v="-5225"/>
+ <val o="235226" v="-5162"/>
+ <val o="236037" v="-5250"/>
+ <val o="236e46" v="-4384"/>
+ <val o="237c57" v="-4218"/>
+ <val o="238a66" v="-4016"/>
+ <val o="239881" v="-3222"/>
+ <val o="23a685" v="-3311"/>
+ <val o="23b495" v="-3183"/>
+ <val o="23c2a4" v="-2974"/>
+ <val o="23d0b5" v="-2945"/>
+ <val o="23dec4" v="-2933"/>
+ <val o="23ecd5" v="-3570"/>
+ <val o="23fae4" v="-4545"/>
+ <val o="2408f6" v="-5119"/>
+ <val o="241706" v="-5737"/>
+ <val o="242518" v="-6515"/>
+ <val o="243325" v="-6776"/>
+ <val o="244137" v="-6755"/>
+ <val o="244f46" v="-6361"/>
+ <val o="246b66" v="-6546"/>
+ <val o="247976" v="-6273"/>
+ <val o="248786" v="-5402"/>
+ <val o="24957e" v="-5797"/>
+ <val o="24a38f" v="-5647"/>
+ <val o="24b19c" v="-5747"/>
+ <val o="24bfac" v="-5443"/>
+ <val o="24cdbc" v="-5445"/>
+ <val o="24dbcd" v="-4557"/>
+ <val o="24e9e5" v="-4019"/>
+ <val o="24f808" v="-3484"/>
+ <val o="250616" v="-3616"/>
+ <val o="251426" v="-3559"/>
+ <val o="252236" v="-3408"/>
+ <val o="253047" v="-3609"/>
+ <val o="253e56" v="-4020"/>
+ <val o="254c67" v="-4182"/>
+ <val o="255a76" v="-4997"/>
+ <val o="256887" v="-5810"/>
+ <val o="257697" v="-5595"/>
+ <val o="2584a8" v="-15224"/>
+ <val o="2592b6" v="-8695"/>
+ <val o="25a0c7" v="-4575"/>
+ <val o="25aed7" v="-6313"/>
+ <val o="25bce7" v="-6104"/>
+ <val o="25caf8" v="-5750"/>
+ <val o="25d907" v="-5764"/>
+ <val o="25e718" v="-5649"/>
+ <val o="25f527" v="-5249"/>
+ <val o="260338" v="-5562"/>
+ <val o="261149" v="-4875"/>
+ <val o="261f59" v="-4619"/>
+ <val o="262d68" v="-4611"/>
+ <val o="263b83" v="-3619"/>
+ <val o="264986" v="-3467"/>
+ <val o="265795" v="-3564"/>
+ <val o="2665a6" v="-3672"/>
+ <val o="2673b5" v="-3614"/>
+ <val o="2681c6" v="-3621"/>
+ <val o="268fd5" v="-3868"/>
+ <val o="269de6" v="-3969"/>
+ <val o="26abf6" v="-3886"/>
+ <val o="26ba06" v="-4381"/>
+ <val o="26c817" v="-4271"/>
+ <val o="26d62b" v="-3967"/>
+ <val o="26e436" v="-4002"/>
+ <val o="26f247" v="-3562"/>
+ <val o="270057" v="-3874"/>
+ <val o="270e67" v="-3561"/>
+ <val o="271c77" v="-4690"/>
+ <val o="272a87" v="-5196"/>
+ <val o="273897" v="-5211"/>
+ <val o="2746a8" v="-5037"/>
+ <val o="2754b9" v="-4963"/>
+ <val o="2762c7" v="-4048"/>
+ <val o="2770d8" v="-3708"/>
+ <val o="277ee7" v="-3215"/>
+ </par>
+ <par memind="438200" h="3dc1a8de">
+ <val o="0" v="-1103"/>
+ <val o="e08" v="-1286"/>
+ <val o="1c32" v="-1351"/>
+ <val o="2a3c" v="-1427"/>
+ <val o="3835" v="-1246"/>
+ <val o="4645" v="-1101"/>
+ <val o="5455" v="-909"/>
+ <val o="6265" v="-1472"/>
+ <val o="7075" v="-1523"/>
+ <val o="7e85" v="-1435"/>
+ <val o="8c96" v="-1784"/>
+ <val o="9aa5" v="-1757"/>
+ <val o="a8b6" v="-1682"/>
+ <val o="b6c5" v="-1745"/>
+ <val o="c4d7" v="-6"/>
+ <val o="d30b" v="-6"/>
+ <val o="e0f6" v="-6"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="-6"/>
+ <val o="11937" v="-6"/>
+ <val o="12746" v="-6"/>
+ <val o="13556" v="-6"/>
+ <val o="14366" v="-6"/>
+ <val o="15181" v="-7"/>
+ <val o="15f85" v="-6"/>
+ <val o="16d95" v="-6"/>
+ <val o="17ba4" v="-6"/>
+ <val o="189b5" v="-6"/>
+ <val o="197c4" v="-6"/>
+ <val o="1a5d5" v="-6"/>
+ <val o="1b3e6" v="-6"/>
+ <val o="1c1f6" v="-6"/>
+ <val o="1d005" v="-6"/>
+ <val o="1de15" v="-6"/>
+ <val o="1ec25" v="-6"/>
+ <val o="1fa36" v="-6"/>
+ <val o="20845" v="-6"/>
+ <val o="21656" v="-6"/>
+ <val o="22465" v="-6"/>
+ <val o="23276" v="-6"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="-6"/>
+ <val o="25ca7" v="-6"/>
+ <val o="26ab7" v="-6"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="-6"/>
+ <val o="294e6" v="-6"/>
+ <val o="2a301" v="-6"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="-6"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="-6"/>
+ <val o="31375" v="-6"/>
+ <val o="3219e" v="-6"/>
+ <val o="32f96" v="-6"/>
+ <val o="33da6" v="-6"/>
+ <val o="34bb6" v="-6"/>
+ <val o="359de" v="-6"/>
+ <val o="367d6" v="-6"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="-6"/>
+ <val o="3bc36" v="-6"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="-6"/>
+ <val o="3e667" v="-6"/>
+ <val o="3f481" v="-6"/>
+ <val o="40285" v="-6"/>
+ <val o="41095" v="-6"/>
+ <val o="41ea5" v="-6"/>
+ <val o="42cb5" v="-6"/>
+ <val o="43ac5" v="-6"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="-6"/>
+ <val o="464f5" v="-6"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="-6"/>
+ <val o="54600" v="-6"/>
+ <val o="55406" v="-6"/>
+ <val o="56215" v="-6"/>
+ <val o="57026" v="-6"/>
+ <val o="57e36" v="-6"/>
+ <val o="58c46" v="-6"/>
+ <val o="59a70" v="-6"/>
+ <val o="5a867" v="-6"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="-6"/>
+ <val o="5eeb8" v="-6"/>
+ <val o="5fcc6" v="-6"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="-6"/>
+ <val o="65f37" v="-6"/>
+ <val o="66d46" v="-6"/>
+ <val o="67b57" v="-6"/>
+ <val o="68967" v="-6"/>
+ <val o="69782" v="-6"/>
+ <val o="6a586" v="-6"/>
+ <val o="6b395" v="-6"/>
+ <val o="6c1a6" v="-6"/>
+ <val o="6cfb5" v="-6"/>
+ <val o="6ddc6" v="-6"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="-6"/>
+ <val o="707f6" v="-6"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="-6"/>
+ <val o="74e47" v="-6"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="-6"/>
+ <val o="7bebf" v="-6"/>
+ <val o="7cccf" v="-6"/>
+ <val o="7dadf" v="-6"/>
+ <val o="7e8fa" v="-6"/>
+ <val o="7f70a" v="-6"/>
+ <val o="8051a" v="-6"/>
+ <val o="8132a" v="-6"/>
+ <val o="8213a" v="-6"/>
+ <val o="82f4a" v="-6"/>
+ <val o="83d5a" v="-6"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="-6"/>
+ <val o="891bb" v="-6"/>
+ <val o="89fca" v="-6"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="-6"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="-6"/>
+ <val o="93a84" v="-6"/>
+ <val o="94885" v="-6"/>
+ <val o="95694" v="-6"/>
+ <val o="964a5" v="-6"/>
+ <val o="972b4" v="-6"/>
+ <val o="980c5" v="-6"/>
+ <val o="98ed4" v="-6"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="-6"/>
+ <val o="9c716" v="-6"/>
+ <val o="9d526" v="-6"/>
+ <val o="9e336" v="-6"/>
+ <val o="9f145" v="-6"/>
+ <val o="9ff56" v="-6"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="-1590"/>
+ <val o="a2986" v="-500"/>
+ <val o="a3795" v="1379"/>
+ <val o="a45a7" v="-45"/>
+ <val o="a53b6" v="-346"/>
+ <val o="a61c7" v="-580"/>
+ <val o="a6fd6" v="-752"/>
+ <val o="a7e00" v="-1367"/>
+ <val o="a8c00" v="-1906"/>
+ <val o="a9a05" v="101"/>
+ <val o="aa815" v="-366"/>
+ <val o="ab625" v="-740"/>
+ <val o="ac435" v="-550"/>
+ <val o="ad245" v="432"/>
+ <val o="ae055" v="1595"/>
+ <val o="aee65" v="275"/>
+ <val o="afc75" v="1019"/>
+ <val o="b0a85" v="3444"/>
+ <val o="b26a6" v="3629"/>
+ <val o="b34b6" v="3203"/>
+ <val o="b42c6" v="215"/>
+ <val o="b50d6" v="380"/>
+ <val o="b5ee7" v="890"/>
+ <val o="b6cf6" v="-446"/>
+ <val o="b7b07" v="-200"/>
+ <val o="b8917" v="-44"/>
+ <val o="b9728" v="-424"/>
+ <val o="ba537" v="-718"/>
+ <val o="bb347" v="946"/>
+ <val o="bc157" v="276"/>
+ <val o="bcf67" v="-944"/>
+ <val o="bdd81" v="3129"/>
+ <val o="beb86" v="453"/>
+ <val o="bf995" v="194"/>
+ <val o="c07a6" v="-246"/>
+ <val o="c15b5" v="-122"/>
+ <val o="c23c6" v="430"/>
+ <val o="c31d5" v="1582"/>
+ <val o="c3fe6" v="720"/>
+ <val o="c4df5" v="1333"/>
+ <val o="c5c06" v="588"/>
+ <val o="c6a16" v="642"/>
+ <val o="c7826" v="1096"/>
+ <val o="c8636" v="313"/>
+ <val o="c9446" v="374"/>
+ <val o="ca256" v="204"/>
+ <val o="cb066" v="692"/>
+ <val o="cbe76" v="-196"/>
+ <val o="ccc87" v="1888"/>
+ <val o="cda96" v="2502"/>
+ <val o="ce8a8" v="1840"/>
+ <val o="cf6b7" v="2437"/>
+ <val o="d04c8" v="1930"/>
+ <val o="d12d7" v="1219"/>
+ <val o="d20e7" v="-250"/>
+ <val o="d2f02" v="-1971"/>
+ <val o="d3d05" v="-1029"/>
+ <val o="d4b15" v="-1072"/>
+ <val o="d5926" v="-388"/>
+ <val o="d6735" v="229"/>
+ <val o="d7546" v="1131"/>
+ <val o="d8355" v="-726"/>
+ <val o="d9166" v="166"/>
+ <val o="d9f75" v="965"/>
+ <val o="dad87" v="2341"/>
+ <val o="dbb97" v="2354"/>
+ <val o="dc9a8" v="2565"/>
+ <val o="dd7b7" v="1136"/>
+ <val o="de5c6" v="367"/>
+ <val o="df3d7" v="173"/>
+ <val o="e01d7" v="156"/>
+ <val o="e0fe5" v="460"/>
+ <val o="e1df5" v="358"/>
+ <val o="e2c04" v="-308"/>
+ <val o="e3a14" v="-1006"/>
+ <val o="e4824" v="93"/>
+ <val o="e5634" v="-723"/>
+ <val o="e6444" v="147"/>
+ <val o="e7255" v="-551"/>
+ <val o="e806f" v="-626"/>
+ <val o="e8e7f" v="2316"/>
+ <val o="e9c8e" v="714"/>
+ <val o="eaa9f" v="600"/>
+ <val o="eb8ae" v="953"/>
+ <val o="ec6bf" v="2267"/>
+ <val o="ed4ce" v="-403"/>
+ <val o="ee2df" v="999"/>
+ <val o="ef0ef" v="475"/>
+ <val o="eff01" v="1663"/>
+ <val o="f0d10" v="829"/>
+ <val o="f1b20" v="1055"/>
+ <val o="f2930" v="-314"/>
+ <val o="f3740" v="1431"/>
+ <val o="f4551" v="1201"/>
+ <val o="f5361" v="1280"/>
+ <val o="f6172" v="1431"/>
+ <val o="f6f80" v="1145"/>
+ <val o="f7d91" v="1635"/>
+ <val o="f8ba1" v="957"/>
+ <val o="f99b1" v="1019"/>
+ <val o="fa7c0" v="1219"/>
+ <val o="fb5d1" v="1143"/>
+ <val o="fc3e0" v="-893"/>
+ <val o="fd1fb" v="-1019"/>
+ <val o="fe00b" v="-1389"/>
+ <val o="fee1c" v="-182"/>
+ <val o="ffc2c" v="-220"/>
+ <val o="100a3b" v="502"/>
+ <val o="10184c" v="940"/>
+ <val o="10265b" v="1719"/>
+ <val o="10346c" v="1592"/>
+ <val o="10427b" v="960"/>
+ <val o="10508d" v="1537"/>
+ <val o="105e9d" v="1177"/>
+ <val o="106cad" v="1337"/>
+ <val o="107abd" v="737"/>
+ <val o="1088cd" v="723"/>
+ <val o="1096de" v="917"/>
+ <val o="10a4ed" v="794"/>
+ <val o="10b2fe" v="1075"/>
+ <val o="10c10d" v="2328"/>
+ <val o="10cf1e" v="1192"/>
+ <val o="10dd2e" v="867"/>
+ <val o="10eb66" v="184"/>
+ <val o="10f94e" v="12"/>
+ <val o="11075e" v="978"/>
+ <val o="11156d" v="256"/>
+ <val o="112388" v="-1007"/>
+ <val o="113187" v="614"/>
+ <val o="113fb0" v="205"/>
+ <val o="114da6" v="195"/>
+ <val o="115bb6" v="316"/>
+ <val o="1169c6" v="1241"/>
+ <val o="1177d6" v="1748"/>
+ <val o="1185e8" v="1046"/>
+ <val o="1193f7" v="1099"/>
+ <val o="11a208" v="309"/>
+ <val o="11b017" v="-202"/>
+ <val o="11be2f" v="-722"/>
+ <val o="11cc37" v="680"/>
+ <val o="11da47" v="440"/>
+ <val o="11e857" v="870"/>
+ <val o="11f667" v="475"/>
+ <val o="120578" v="1"/>
+ <val o="121386" v="1"/>
+ <val o="122196" v="2"/>
+ <val o="122fa6" v="1"/>
+ <val o="123db5" v="0"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="1"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="-1"/>
+ <val o="128305" v="-1"/>
+ <val o="129115" v="-1"/>
+ <val o="129f25" v="-1"/>
+ <val o="12ad35" v="-1"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="1"/>
+ <val o="12d766" v="1"/>
+ <val o="12e575" v="1"/>
+ <val o="12f386" v="1"/>
+ <val o="130196" v="1"/>
+ <val o="130fa6" v="1"/>
+ <val o="131db7" v="1"/>
+ <val o="132bc5" v="1"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="1959"/>
+ <val o="1774a3" v="1506"/>
+ <val o="1782b3" v="1027"/>
+ <val o="1790c5" v="677"/>
+ <val o="179ed4" v="-759"/>
+ <val o="17ace4" v="-2042"/>
+ <val o="17bafd" v="-2554"/>
+ <val o="17c90f" v="-2178"/>
+ <val o="17d71e" v="-2126"/>
+ <val o="17e52f" v="-2484"/>
+ <val o="17f33f" v="-1980"/>
+ <val o="18014f" v="-1072"/>
+ <val o="180f5f" v="-524"/>
+ <val o="181d6e" v="-1366"/>
+ <val o="182b7f" v="-1753"/>
+ <val o="18398f" v="-893"/>
+ <val o="1847a1" v="-845"/>
+ <val o="1855af" v="-1148"/>
+ <val o="1863c0" v="-2710"/>
+ <val o="1871cf" v="-2297"/>
+ <val o="187fe0" v="-2208"/>
+ <val o="188def" v="-2037"/>
+ <val o="189c00" v="-997"/>
+ <val o="18b80d" v="1048"/>
+ <val o="18c61c" v="-955"/>
+ <val o="18d42c" v="-1334"/>
+ <val o="18e23b" v="-1121"/>
+ <val o="18f04b" v="-1625"/>
+ <val o="18fe5e" v="-1419"/>
+ <val o="190c76" v="-671"/>
+ <val o="191a86" v="-1501"/>
+ <val o="192896" v="-1511"/>
+ <val o="1936a6" v="-1618"/>
+ <val o="1944b7" v="-1037"/>
+ <val o="1952c6" v="-192"/>
+ <val o="1960d7" v="1397"/>
+ <val o="196ee6" v="-627"/>
+ <val o="197cf8" v="-711"/>
+ <val o="198b0f" v="20"/>
+ <val o="19991f" v="-130"/>
+ <val o="19b541" v="-843"/>
+ <val o="19c34d" v="-642"/>
+ <val o="19d15e" v="-320"/>
+ <val o="19df80" v="-210"/>
+ <val o="19ed90" v="295"/>
+ <val o="19eebe" v="417"/>
+ <val o="19fb8e" v="37"/>
+ <val o="1a09a0" v="-2105"/>
+ <val o="1a17ae" v="-2980"/>
+ <val o="1a25be" v="-3329"/>
+ <val o="1a33cd" v="-1430"/>
+ <val o="1a41dd" v="-1986"/>
+ <val o="1a4fed" v="-3570"/>
+ <val o="1a5e08" v="-3230"/>
+ <val o="1a6c05" v="-2288"/>
+ <val o="1a7a15" v="-2846"/>
+ <val o="1a8826" v="-2946"/>
+ <val o="1a9637" v="-2342"/>
+ <val o="1aa445" v="-1719"/>
+ <val o="1ab255" v="-668"/>
+ <val o="1ac065" v="-1761"/>
+ <val o="1ace75" v="-2413"/>
+ <val o="1adc87" v="-1727"/>
+ <val o="1aea96" v="-1832"/>
+ <val o="1af8a7" v="-1889"/>
+ <val o="1b06b7" v="-2346"/>
+ <val o="1b14c6" v="-2176"/>
+ <val o="1c7460" v="374"/>
+ <val o="1c8270" v="-132"/>
+ <val o="1c907e" v="993"/>
+ <val o="1c9e8f" v="-150"/>
+ <val o="1caca2" v="-843"/>
+ <val o="1cbab1" v="-1196"/>
+ <val o="1cc8c1" v="2577"/>
+ <val o="1cd6d0" v="1582"/>
+ <val o="1ce4de" v="909"/>
+ <val o="1cf2f0" v="-1405"/>
+ <val o="1d0109" v="-1597"/>
+ <val o="1d0f06" v="-186"/>
+ <val o="1d1d15" v="-658"/>
+ <val o="1d2b25" v="-679"/>
+ <val o="1d3935" v="89"/>
+ <val o="1d4745" v="680"/>
+ <val o="1d5555" v="1095"/>
+ <val o="1d6366" v="-832"/>
+ <val o="1d7175" v="-785"/>
+ <val o="1d7f86" v="-228"/>
+ <val o="1d8d95" v="-40"/>
+ <val o="1d9ba6" v="-280"/>
+ <val o="1da9b6" v="-697"/>
+ <val o="1db7c7" v="-697"/>
+ <val o="1dc5d5" v="-811"/>
+ <val o="1dd3e6" v="-629"/>
+ <val o="1de1f5" v="-1408"/>
+ <val o="1df006" v="-1666"/>
+ <val o="1dfe16" v="-1574"/>
+ <val o="1e0c26" v="-1928"/>
+ <val o="1e1a36" v="-1970"/>
+ <val o="1e2847" v="-2017"/>
+ <val o="1e3659" v="-1984"/>
+ <val o="1e4467" v="-2007"/>
+ <val o="1e5281" v="-1611"/>
+ <val o="1e6086" v="-1851"/>
+ <val o="1e6e96" v="-1908"/>
+ <val o="1e7ca6" v="-251"/>
+ <val o="1e8ab5" v="-386"/>
+ <val o="1e98c6" v="-121"/>
+ <val o="1ea6d5" v="-365"/>
+ <val o="1eb4e6" v="-313"/>
+ <val o="1ec2f6" v="-506"/>
+ <val o="1ed106" v="-232"/>
+ <val o="1edf16" v="-288"/>
+ <val o="1eed26" v="-121"/>
+ <val o="1efb36" v="-310"/>
+ <val o="1f0946" v="-245"/>
+ <val o="1f1756" v="439"/>
+ <val o="1f2566" v="609"/>
+ <val o="1f3376" v="1078"/>
+ <val o="1f4187" v="2491"/>
+ <val o="1f4f96" v="1327"/>
+ <val o="1f5da7" v="-115"/>
+ <val o="1f6bb6" v="-442"/>
+ <val o="1f79c7" v="203"/>
+ <val o="1f87d6" v="-1439"/>
+ <val o="1f95e7" v="-2019"/>
+ <val o="1fa401" v="-1491"/>
+ <val o="1fb204" v="-1285"/>
+ <val o="1fc016" v="-1309"/>
+ <val o="1fce25" v="-409"/>
+ <val o="1fdc35" v="-162"/>
+ <val o="1fea45" v="90"/>
+ <val o="1ff855" v="319"/>
+ <val o="200665" v="2483"/>
+ <val o="201475" v="357"/>
+ <val o="202286" v="1681"/>
+ <val o="203095" v="1572"/>
+ <val o="203ea5" v="1575"/>
+ <val o="204cb6" v="302"/>
+ <val o="205ac6" v="1076"/>
+ <val o="2068d6" v="1555"/>
+ <val o="2076e6" v="1971"/>
+ <val o="2084f6" v="239"/>
+ <val o="209306" v="-351"/>
+ <val o="20a116" v="-527"/>
+ <val o="20af26" v="-215"/>
+ <val o="20bd37" v="-782"/>
+ <val o="20cb46" v="452"/>
+ <val o="20d957" v="60"/>
+ <val o="20e767" v="-848"/>
+ <val o="20f581" v="-1383"/>
+ <val o="210386" v="-989"/>
+ <val o="211194" v="-325"/>
+ <val o="211fa5" v="-382"/>
+ <val o="212db5" v="60"/>
+ <val o="213bc5" v="884"/>
+ <val o="2149d6" v="659"/>
+ <val o="2157e5" v="-264"/>
+ <val o="2165f6" v="-990"/>
+ <val o="217406" v="289"/>
+ <val o="218217" v="-292"/>
+ <val o="219026" v="-542"/>
+ <val o="219e39" v="366"/>
+ <val o="21ac46" v="909"/>
+ <val o="21ba57" v="992"/>
+ <val o="21c867" v="1808"/>
+ <val o="21d677" v="-1049"/>
+ <val o="21e487" v="543"/>
+ <val o="21f296" v="377"/>
+ <val o="2200a6" v="-619"/>
+ <val o="220eb7" v="-712"/>
+ <val o="221cc6" v="1459"/>
+ <val o="222ad7" v="257"/>
+ <val o="2238e7" v="-696"/>
+ <val o="224701" v="-1085"/>
+ <val o="225505" v="2873"/>
+ <val o="226315" v="421"/>
+ <val o="227125" v="557"/>
+ <val o="227f35" v="1696"/>
+ <val o="228d45" v="2480"/>
+ <val o="229b54" v="-707"/>
+ <val o="22a965" v="-237"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="1730"/>
+ <val o="22d397" v="2990"/>
+ <val o="22e1a6" v="2746"/>
+ <val o="22efb6" v="-174"/>
+ <val o="22fdc7" v="-194"/>
+ <val o="230bd7" v="485"/>
+ <val o="2319e6" v="-729"/>
+ <val o="2327f6" v="70"/>
+ <val o="23361b" v="907"/>
+ <val o="234416" v="1297"/>
+ <val o="235226" v="776"/>
+ <val o="236037" v="123"/>
+ <val o="236e46" v="1557"/>
+ <val o="237c57" v="1208"/>
+ <val o="238a66" v="253"/>
+ <val o="239881" v="508"/>
+ <val o="23a685" v="-274"/>
+ <val o="23b495" v="-571"/>
+ <val o="23c2a4" v="146"/>
+ <val o="23d0b5" v="567"/>
+ <val o="23dec4" v="1222"/>
+ <val o="23ecd5" v="733"/>
+ <val o="23fae4" v="8"/>
+ <val o="2408f6" v="1041"/>
+ <val o="241706" v="3222"/>
+ <val o="242518" v="2576"/>
+ <val o="243325" v="2422"/>
+ <val o="244137" v="-1036"/>
+ <val o="244f46" v="-746"/>
+ <val o="246b66" v="-661"/>
+ <val o="247976" v="45"/>
+ <val o="248786" v="3983"/>
+ <val o="24957e" v="1694"/>
+ <val o="24a38f" v="709"/>
+ <val o="24b19c" v="-844"/>
+ <val o="24bfac" v="-605"/>
+ <val o="24cdbc" v="-661"/>
+ <val o="24dbcd" v="-436"/>
+ <val o="24e9e5" v="-1155"/>
+ <val o="24f808" v="-716"/>
+ <val o="250616" v="-877"/>
+ <val o="251426" v="-1024"/>
+ <val o="252236" v="-7"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="1185"/>
+ <val o="254c67" v="884"/>
+ <val o="255a76" v="1103"/>
+ <val o="256887" v="1789"/>
+ <val o="257697" v="3132"/>
+ <val o="2584a8" v="-4032"/>
+ <val o="2592b6" v="-2114"/>
+ <val o="25a0c7" v="-498"/>
+ <val o="25aed7" v="174"/>
+ <val o="25bce7" v="210"/>
+ <val o="25caf8" v="710"/>
+ <val o="25d907" v="2127"/>
+ <val o="25e718" v="2386"/>
+ <val o="25f527" v="1916"/>
+ <val o="260338" v="53"/>
+ <val o="261149" v="1070"/>
+ <val o="261f59" v="564"/>
+ <val o="262d68" v="-1181"/>
+ <val o="263b83" v="34"/>
+ <val o="264986" v="-847"/>
+ <val o="265795" v="-1318"/>
+ <val o="2665a6" v="-1842"/>
+ <val o="2673b5" v="-1404"/>
+ <val o="2681c6" v="-1129"/>
+ <val o="268fd5" v="-372"/>
+ <val o="269de6" v="269"/>
+ <val o="26abf6" v="572"/>
+ <val o="26ba06" v="1413"/>
+ <val o="26c817" v="1586"/>
+ <val o="26d62b" v="3161"/>
+ <val o="26e436" v="2347"/>
+ <val o="26f247" v="2627"/>
+ <val o="270057" v="2502"/>
+ <val o="270e67" v="2818"/>
+ <val o="271c77" v="158"/>
+ <val o="272a87" v="-545"/>
+ <val o="273897" v="-370"/>
+ <val o="2746a8" v="-624"/>
+ <val o="2754b9" v="-847"/>
+ <val o="2762c7" v="2315"/>
+ <val o="2770d8" v="1099"/>
+ <val o="277ee7" v="-417"/>
+ </par>
+ <par memind="422200" h="3dc1a8de">
+ <val o="0" v="-4307"/>
+ <val o="e08" v="-4169"/>
+ <val o="1c32" v="-4096"/>
+ <val o="2a3c" v="-4087"/>
+ <val o="3835" v="-3963"/>
+ <val o="4645" v="-3969"/>
+ <val o="5455" v="-4411"/>
+ <val o="6265" v="-5358"/>
+ <val o="7075" v="-6317"/>
+ <val o="7e85" v="-7298"/>
+ <val o="8c96" v="-7519"/>
+ <val o="9aa5" v="-7351"/>
+ <val o="a8b6" v="-6890"/>
+ <val o="b6c5" v="-6465"/>
+ <val o="c4d7" v="-7"/>
+ <val o="d30b" v="-7"/>
+ <val o="e0f6" v="-7"/>
+ <val o="ef06" v="-7"/>
+ <val o="fd17" v="-7"/>
+ <val o="10b27" v="-8"/>
+ <val o="11937" v="-8"/>
+ <val o="12746" v="-8"/>
+ <val o="13556" v="-8"/>
+ <val o="14366" v="-8"/>
+ <val o="15181" v="-9"/>
+ <val o="15f85" v="-8"/>
+ <val o="16d95" v="-8"/>
+ <val o="17ba4" v="-8"/>
+ <val o="189b5" v="-8"/>
+ <val o="197c4" v="-8"/>
+ <val o="1a5d5" v="-9"/>
+ <val o="1b3e6" v="-9"/>
+ <val o="1c1f6" v="-8"/>
+ <val o="1d005" v="-8"/>
+ <val o="1de15" v="-8"/>
+ <val o="1ec25" v="-8"/>
+ <val o="1fa36" v="-8"/>
+ <val o="20845" v="-9"/>
+ <val o="21656" v="-8"/>
+ <val o="22465" v="-8"/>
+ <val o="23276" v="-8"/>
+ <val o="24086" v="-7"/>
+ <val o="24e99" v="-7"/>
+ <val o="25ca7" v="-8"/>
+ <val o="26ab7" v="-8"/>
+ <val o="278c6" v="-8"/>
+ <val o="286d6" v="-8"/>
+ <val o="294e6" v="-9"/>
+ <val o="2a301" v="-9"/>
+ <val o="2b105" v="-8"/>
+ <val o="2bf15" v="-8"/>
+ <val o="2cd25" v="-8"/>
+ <val o="2db35" v="-8"/>
+ <val o="2e946" v="-8"/>
+ <val o="2f755" v="-7"/>
+ <val o="30566" v="-9"/>
+ <val o="31375" v="-8"/>
+ <val o="3219e" v="-8"/>
+ <val o="32f96" v="-8"/>
+ <val o="33da6" v="-8"/>
+ <val o="34bb6" v="-8"/>
+ <val o="359de" v="-8"/>
+ <val o="367d6" v="-8"/>
+ <val o="375e6" v="-8"/>
+ <val o="3840e" v="-7"/>
+ <val o="3921e" v="-7"/>
+ <val o="3a016" v="-7"/>
+ <val o="3ae27" v="-8"/>
+ <val o="3bc36" v="-8"/>
+ <val o="3ca47" v="-7"/>
+ <val o="3d856" v="-8"/>
+ <val o="3e667" v="-8"/>
+ <val o="3f481" v="-9"/>
+ <val o="40285" v="-9"/>
+ <val o="41095" v="-9"/>
+ <val o="41ea5" v="-9"/>
+ <val o="42cb5" v="-9"/>
+ <val o="43ac5" v="-8"/>
+ <val o="448d5" v="-8"/>
+ <val o="456e6" v="-8"/>
+ <val o="464f5" v="-7"/>
+ <val o="480ff" v="-7"/>
+ <val o="48f0e" v="-6"/>
+ <val o="49d1d" v="-6"/>
+ <val o="4ab46" v="-7"/>
+ <val o="4b955" v="-7"/>
+ <val o="4c769" v="-6"/>
+ <val o="4d577" v="-7"/>
+ <val o="4e387" v="-7"/>
+ <val o="4f196" v="-7"/>
+ <val o="4ffa6" v="-7"/>
+ <val o="50dd0" v="-7"/>
+ <val o="51bc6" v="-7"/>
+ <val o="529d6" v="-8"/>
+ <val o="537e7" v="-8"/>
+ <val o="54600" v="-9"/>
+ <val o="55406" v="-8"/>
+ <val o="56215" v="-8"/>
+ <val o="57026" v="-8"/>
+ <val o="57e36" v="-8"/>
+ <val o="58c46" v="-8"/>
+ <val o="59a70" v="-8"/>
+ <val o="5a867" v="-7"/>
+ <val o="5b676" v="-7"/>
+ <val o="5c487" v="-6"/>
+ <val o="5d296" v="-7"/>
+ <val o="5e0a9" v="-7"/>
+ <val o="5eeb8" v="-7"/>
+ <val o="5fcc6" v="-7"/>
+ <val o="60ad7" v="-7"/>
+ <val o="618e7" v="-7"/>
+ <val o="626f7" v="-7"/>
+ <val o="63507" v="-7"/>
+ <val o="64317" v="-7"/>
+ <val o="65127" v="-7"/>
+ <val o="65f37" v="-8"/>
+ <val o="66d46" v="-8"/>
+ <val o="67b57" v="-8"/>
+ <val o="68967" v="-8"/>
+ <val o="69782" v="-8"/>
+ <val o="6a586" v="-8"/>
+ <val o="6b395" v="-8"/>
+ <val o="6c1a6" v="-9"/>
+ <val o="6cfb5" v="-8"/>
+ <val o="6ddc6" v="-8"/>
+ <val o="6ebd6" v="-7"/>
+ <val o="6f9e6" v="-8"/>
+ <val o="707f6" v="-7"/>
+ <val o="71607" v="-7"/>
+ <val o="72417" v="-6"/>
+ <val o="73227" v="-6"/>
+ <val o="74037" v="-7"/>
+ <val o="74e47" v="-7"/>
+ <val o="75c57" v="-7"/>
+ <val o="76a63" v="-7"/>
+ <val o="77873" v="-7"/>
+ <val o="78680" v="-6"/>
+ <val o="7948f" v="-7"/>
+ <val o="7a29f" v="-7"/>
+ <val o="7b0af" v="-7"/>
+ <val o="7bebf" v="-8"/>
+ <val o="7cccf" v="-8"/>
+ <val o="7dadf" v="-8"/>
+ <val o="7e8fa" v="-8"/>
+ <val o="7f70a" v="-9"/>
+ <val o="8051a" v="-9"/>
+ <val o="8132a" v="-9"/>
+ <val o="8213a" v="-9"/>
+ <val o="82f4a" v="-9"/>
+ <val o="83d5a" v="-8"/>
+ <val o="84b6a" v="-7"/>
+ <val o="8597a" v="-7"/>
+ <val o="8678b" v="-7"/>
+ <val o="8759b" v="-7"/>
+ <val o="883ac" v="-7"/>
+ <val o="891bb" v="-8"/>
+ <val o="89fca" v="-7"/>
+ <val o="8adda" v="-7"/>
+ <val o="8bbeb" v="-7"/>
+ <val o="8c9fc" v="-7"/>
+ <val o="8d80b" v="-7"/>
+ <val o="8e61a" v="-7"/>
+ <val o="8f42a" v="-7"/>
+ <val o="9023a" v="-7"/>
+ <val o="9104a" v="-8"/>
+ <val o="91e5a" v="-7"/>
+ <val o="92c6a" v="-8"/>
+ <val o="93a84" v="-9"/>
+ <val o="94885" v="-8"/>
+ <val o="95694" v="-9"/>
+ <val o="964a5" v="-9"/>
+ <val o="972b4" v="-8"/>
+ <val o="980c5" v="-8"/>
+ <val o="98ed4" v="-8"/>
+ <val o="99ce5" v="-8"/>
+ <val o="9aaf5" v="-7"/>
+ <val o="9b906" v="-7"/>
+ <val o="9c716" v="-7"/>
+ <val o="9d526" v="-7"/>
+ <val o="9e336" v="-7"/>
+ <val o="9f145" v="-7"/>
+ <val o="9ff56" v="-7"/>
+ <val o="a0d65" v="-7"/>
+ <val o="a1b77" v="-6324"/>
+ <val o="a2986" v="-3516"/>
+ <val o="a3795" v="-963"/>
+ <val o="a45a7" v="644"/>
+ <val o="a53b6" v="700"/>
+ <val o="a61c7" v="942"/>
+ <val o="a6fd6" v="99"/>
+ <val o="a7e00" v="464"/>
+ <val o="a8c00" v="912"/>
+ <val o="a9a05" v="289"/>
+ <val o="aa815" v="32"/>
+ <val o="ab625" v="46"/>
+ <val o="ac435" v="200"/>
+ <val o="ad245" v="921"/>
+ <val o="ae055" v="744"/>
+ <val o="aee65" v="-561"/>
+ <val o="afc75" v="-68"/>
+ <val o="b0a85" v="31"/>
+ <val o="b26a6" v="142"/>
+ <val o="b34b6" v="-123"/>
+ <val o="b42c6" v="-451"/>
+ <val o="b50d6" v="-729"/>
+ <val o="b5ee7" v="-712"/>
+ <val o="b6cf6" v="-1584"/>
+ <val o="b7b07" v="-1983"/>
+ <val o="b8917" v="-1753"/>
+ <val o="b9728" v="-1758"/>
+ <val o="ba537" v="-1891"/>
+ <val o="bb347" v="-827"/>
+ <val o="bc157" v="-882"/>
+ <val o="bcf67" v="-899"/>
+ <val o="bdd81" v="644"/>
+ <val o="beb86" v="417"/>
+ <val o="bf995" v="524"/>
+ <val o="c07a6" v="400"/>
+ <val o="c15b5" v="372"/>
+ <val o="c23c6" v="484"/>
+ <val o="c31d5" v="591"/>
+ <val o="c3fe6" v="336"/>
+ <val o="c4df5" v="741"/>
+ <val o="c5c06" v="114"/>
+ <val o="c6a16" v="507"/>
+ <val o="c7826" v="-51"/>
+ <val o="c8636" v="136"/>
+ <val o="c9446" v="334"/>
+ <val o="ca256" v="235"/>
+ <val o="cb066" v="116"/>
+ <val o="cbe76" v="-417"/>
+ <val o="ccc87" v="-232"/>
+ <val o="cda96" v="-184"/>
+ <val o="ce8a8" v="-219"/>
+ <val o="cf6b7" v="-134"/>
+ <val o="d04c8" v="-51"/>
+ <val o="d12d7" v="143"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="11"/>
+ <val o="d3d05" v="600"/>
+ <val o="d4b15" v="644"/>
+ <val o="d5926" v="836"/>
+ <val o="d6735" v="1068"/>
+ <val o="d7546" v="1213"/>
+ <val o="d8355" v="-135"/>
+ <val o="d9166" v="-755"/>
+ <val o="d9f75" v="-1498"/>
+ <val o="dad87" v="-2011"/>
+ <val o="dbb97" v="-2561"/>
+ <val o="dc9a8" v="-2338"/>
+ <val o="dd7b7" v="-2895"/>
+ <val o="de5c6" v="-2780"/>
+ <val o="df3d7" v="-2912"/>
+ <val o="e01d7" v="-2913"/>
+ <val o="e0fe5" v="-2832"/>
+ <val o="e1df5" v="-3018"/>
+ <val o="e2c04" v="-4099"/>
+ <val o="e3a14" v="-3979"/>
+ <val o="e4824" v="-3370"/>
+ <val o="e5634" v="-3428"/>
+ <val o="e6444" v="-2551"/>
+ <val o="e7255" v="-2189"/>
+ <val o="e806f" v="-1757"/>
+ <val o="e8e7f" v="-477"/>
+ <val o="e9c8e" v="-709"/>
+ <val o="eaa9f" v="-653"/>
+ <val o="eb8ae" v="-653"/>
+ <val o="ec6bf" v="-468"/>
+ <val o="ed4ce" v="-2112"/>
+ <val o="ee2df" v="-2239"/>
+ <val o="ef0ef" v="-3198"/>
+ <val o="eff01" v="-4087"/>
+ <val o="f0d10" v="-4308"/>
+ <val o="f1b20" v="-4550"/>
+ <val o="f2930" v="-4628"/>
+ <val o="f3740" v="-4301"/>
+ <val o="f4551" v="-4608"/>
+ <val o="f5361" v="-4857"/>
+ <val o="f6172" v="-4613"/>
+ <val o="f6f80" v="-4818"/>
+ <val o="f7d91" v="-4244"/>
+ <val o="f8ba1" v="-3915"/>
+ <val o="f99b1" v="-3805"/>
+ <val o="fa7c0" v="-3025"/>
+ <val o="fb5d1" v="-3034"/>
+ <val o="fc3e0" v="-3295"/>
+ <val o="fd1fb" v="-2680"/>
+ <val o="fe00b" v="-2530"/>
+ <val o="fee1c" v="-2083"/>
+ <val o="ffc2c" v="-1982"/>
+ <val o="100a3b" v="-1790"/>
+ <val o="10184c" v="-1791"/>
+ <val o="10265b" v="-2077"/>
+ <val o="10346c" v="-2724"/>
+ <val o="10427b" v="-4016"/>
+ <val o="10508d" v="-4320"/>
+ <val o="105e9d" v="-4339"/>
+ <val o="106cad" v="-4725"/>
+ <val o="107abd" v="-4338"/>
+ <val o="1088cd" v="-3906"/>
+ <val o="1096de" v="-4119"/>
+ <val o="10a4ed" v="-4322"/>
+ <val o="10b2fe" v="-4345"/>
+ <val o="10c10d" v="-4169"/>
+ <val o="10cf1e" v="-4354"/>
+ <val o="10dd2e" v="-4160"/>
+ <val o="10eb66" v="-4453"/>
+ <val o="10f94e" v="-3895"/>
+ <val o="11075e" v="-3281"/>
+ <val o="11156d" v="-2866"/>
+ <val o="112388" v="-2663"/>
+ <val o="113187" v="-1794"/>
+ <val o="113fb0" v="-1797"/>
+ <val o="114da6" v="-1823"/>
+ <val o="115bb6" v="-1782"/>
+ <val o="1169c6" v="-1585"/>
+ <val o="1177d6" v="-2082"/>
+ <val o="1185e8" v="-2885"/>
+ <val o="1193f7" v="-3558"/>
+ <val o="11a208" v="-4838"/>
+ <val o="11b017" v="-4322"/>
+ <val o="11be2f" v="-5393"/>
+ <val o="11cc37" v="-4456"/>
+ <val o="11da47" v="-4279"/>
+ <val o="11e857" v="-4354"/>
+ <val o="11f667" v="-3900"/>
+ <val o="120578" v="-4"/>
+ <val o="121386" v="-4"/>
+ <val o="122196" v="-4"/>
+ <val o="122fa6" v="-3"/>
+ <val o="123db5" v="-3"/>
+ <val o="124bc5" v="-3"/>
+ <val o="1259d5" v="-2"/>
+ <val o="1267e4" v="-2"/>
+ <val o="127600" v="-2"/>
+ <val o="128305" v="-2"/>
+ <val o="129115" v="-2"/>
+ <val o="129f25" v="-2"/>
+ <val o="12ad35" v="-2"/>
+ <val o="12bb45" v="-1"/>
+ <val o="12c954" v="-2"/>
+ <val o="12d766" v="-2"/>
+ <val o="12e575" v="-3"/>
+ <val o="12f386" v="-2"/>
+ <val o="130196" v="-4"/>
+ <val o="130fa6" v="-3"/>
+ <val o="131db7" v="-3"/>
+ <val o="132bc5" v="-3"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="-6844"/>
+ <val o="1774a3" v="-6848"/>
+ <val o="1782b3" v="-7276"/>
+ <val o="1790c5" v="-6718"/>
+ <val o="179ed4" v="-6044"/>
+ <val o="17ace4" v="-5879"/>
+ <val o="17bafd" v="-6067"/>
+ <val o="17c90f" v="-5484"/>
+ <val o="17d71e" v="-5437"/>
+ <val o="17e52f" v="-5342"/>
+ <val o="17f33f" v="-4981"/>
+ <val o="18014f" v="-5193"/>
+ <val o="180f5f" v="-6321"/>
+ <val o="181d6e" v="-6923"/>
+ <val o="182b7f" v="-7889"/>
+ <val o="18398f" v="-13464"/>
+ <val o="1847a1" v="-13354"/>
+ <val o="1855af" v="-12813"/>
+ <val o="1863c0" v="-11996"/>
+ <val o="1871cf" v="-12436"/>
+ <val o="187fe0" v="-11658"/>
+ <val o="188def" v="-12508"/>
+ <val o="189c00" v="-11965"/>
+ <val o="18b80d" v="-7567"/>
+ <val o="18c61c" v="-8100"/>
+ <val o="18d42c" v="-7676"/>
+ <val o="18e23b" v="-6565"/>
+ <val o="18f04b" v="-6167"/>
+ <val o="18fe5e" v="-5660"/>
+ <val o="190c76" v="-4475"/>
+ <val o="191a86" v="-4306"/>
+ <val o="192896" v="-4252"/>
+ <val o="1936a6" v="-4125"/>
+ <val o="1944b7" v="-4125"/>
+ <val o="1952c6" v="-4498"/>
+ <val o="1960d7" v="-5137"/>
+ <val o="196ee6" v="-5967"/>
+ <val o="197cf8" v="-6354"/>
+ <val o="198b0f" v="-5965"/>
+ <val o="19991f" v="-6615"/>
+ <val o="19b541" v="-6619"/>
+ <val o="19c34d" v="-6199"/>
+ <val o="19d15e" v="-6235"/>
+ <val o="19df80" v="-6313"/>
+ <val o="19ed90" v="-6079"/>
+ <val o="19eebe" v="-6075"/>
+ <val o="19fb8e" v="-2390"/>
+ <val o="1a09a0" v="-2600"/>
+ <val o="1a17ae" v="-3051"/>
+ <val o="1a25be" v="-3338"/>
+ <val o="1a33cd" v="-2238"/>
+ <val o="1a41dd" v="-2137"/>
+ <val o="1a4fed" v="-1546"/>
+ <val o="1a5e08" v="-1670"/>
+ <val o="1a6c05" v="-969"/>
+ <val o="1a7a15" v="-1123"/>
+ <val o="1a8826" v="-1072"/>
+ <val o="1a9637" v="-481"/>
+ <val o="1aa445" v="-537"/>
+ <val o="1ab255" v="-995"/>
+ <val o="1ac065" v="-1819"/>
+ <val o="1ace75" v="-2636"/>
+ <val o="1adc87" v="-2920"/>
+ <val o="1aea96" v="-2594"/>
+ <val o="1af8a7" v="-2898"/>
+ <val o="1b06b7" v="-2173"/>
+ <val o="1b14c6" v="-2092"/>
+ <val o="1c7460" v="311"/>
+ <val o="1c8270" v="399"/>
+ <val o="1c907e" v="3486"/>
+ <val o="1c9e8f" v="3357"/>
+ <val o="1caca2" v="3670"/>
+ <val o="1cbab1" v="3580"/>
+ <val o="1cc8c1" v="5398"/>
+ <val o="1cd6d0" v="5478"/>
+ <val o="1ce4de" v="5618"/>
+ <val o="1cf2f0" v="5659"/>
+ <val o="1d0109" v="5923"/>
+ <val o="1d0f06" v="6651"/>
+ <val o="1d1d15" v="6654"/>
+ <val o="1d2b25" v="6713"/>
+ <val o="1d3935" v="6885"/>
+ <val o="1d4745" v="6893"/>
+ <val o="1d5555" v="6705"/>
+ <val o="1d6366" v="5853"/>
+ <val o="1d7175" v="5545"/>
+ <val o="1d7f86" v="5589"/>
+ <val o="1d8d95" v="-3219"/>
+ <val o="1d9ba6" v="-3620"/>
+ <val o="1da9b6" v="-3623"/>
+ <val o="1db7c7" v="-3472"/>
+ <val o="1dc5d5" v="-3630"/>
+ <val o="1dd3e6" v="-3723"/>
+ <val o="1de1f5" v="-6033"/>
+ <val o="1df006" v="-6752"/>
+ <val o="1dfe16" v="-6647"/>
+ <val o="1e0c26" v="-6778"/>
+ <val o="1e1a36" v="-6794"/>
+ <val o="1e2847" v="-6593"/>
+ <val o="1e3659" v="-6136"/>
+ <val o="1e4467" v="-5653"/>
+ <val o="1e5281" v="-4910"/>
+ <val o="1e6086" v="-4908"/>
+ <val o="1e6e96" v="-4803"/>
+ <val o="1e7ca6" v="-1970"/>
+ <val o="1e8ab5" v="-1820"/>
+ <val o="1e98c6" v="-1821"/>
+ <val o="1ea6d5" v="-2271"/>
+ <val o="1eb4e6" v="-2332"/>
+ <val o="1ec2f6" v="-2646"/>
+ <val o="1ed106" v="-2644"/>
+ <val o="1edf16" v="-2749"/>
+ <val o="1eed26" v="-2728"/>
+ <val o="1efb36" v="-2587"/>
+ <val o="1f0946" v="-2548"/>
+ <val o="1f1756" v="-2377"/>
+ <val o="1f2566" v="-2339"/>
+ <val o="1f3376" v="-2566"/>
+ <val o="1f4187" v="-2784"/>
+ <val o="1f4f96" v="-3191"/>
+ <val o="1f5da7" v="-3581"/>
+ <val o="1f6bb6" v="-3591"/>
+ <val o="1f79c7" v="-3124"/>
+ <val o="1f87d6" v="-3337"/>
+ <val o="1f95e7" v="-3142"/>
+ <val o="1fa401" v="-2806"/>
+ <val o="1fb204" v="-2480"/>
+ <val o="1fc016" v="-2497"/>
+ <val o="1fce25" v="-2171"/>
+ <val o="1fdc35" v="-2133"/>
+ <val o="1fea45" v="-2159"/>
+ <val o="1ff855" v="-2500"/>
+ <val o="200665" v="-2395"/>
+ <val o="201475" v="-3469"/>
+ <val o="202286" v="-4512"/>
+ <val o="203095" v="-5355"/>
+ <val o="203ea5" v="-5915"/>
+ <val o="204cb6" v="-5771"/>
+ <val o="205ac6" v="-5287"/>
+ <val o="2068d6" v="-5386"/>
+ <val o="2076e6" v="-5976"/>
+ <val o="2084f6" v="-6100"/>
+ <val o="209306" v="-6742"/>
+ <val o="20a116" v="-6312"/>
+ <val o="20af26" v="-5533"/>
+ <val o="20bd37" v="-5455"/>
+ <val o="20cb46" v="-4630"/>
+ <val o="20d957" v="-4348"/>
+ <val o="20e767" v="-4046"/>
+ <val o="20f581" v="-3855"/>
+ <val o="210386" v="-3519"/>
+ <val o="211194" v="-3131"/>
+ <val o="211fa5" v="-3014"/>
+ <val o="212db5" v="-2904"/>
+ <val o="213bc5" v="-2826"/>
+ <val o="2149d6" v="-3680"/>
+ <val o="2157e5" v="-4507"/>
+ <val o="2165f6" v="-5844"/>
+ <val o="217406" v="-6195"/>
+ <val o="218217" v="-6165"/>
+ <val o="219026" v="-6142"/>
+ <val o="219e39" v="-6223"/>
+ <val o="21ac46" v="-5938"/>
+ <val o="21ba57" v="-5926"/>
+ <val o="21c867" v="-5557"/>
+ <val o="21d677" v="-6240"/>
+ <val o="21e487" v="-5750"/>
+ <val o="21f296" v="-5772"/>
+ <val o="2200a6" v="-5468"/>
+ <val o="220eb7" v="-5393"/>
+ <val o="221cc6" v="-4543"/>
+ <val o="222ad7" v="-3876"/>
+ <val o="2238e7" v="-3622"/>
+ <val o="224701" v="-3292"/>
+ <val o="225505" v="-1681"/>
+ <val o="226315" v="-2082"/>
+ <val o="227125" v="-2043"/>
+ <val o="227f35" v="-1675"/>
+ <val o="228d45" v="-1785"/>
+ <val o="229b54" v="-3494"/>
+ <val o="22a965" v="-4080"/>
+ <val o="22b776" v="-4454"/>
+ <val o="22c586" v="-4816"/>
+ <val o="22d397" v="-4405"/>
+ <val o="22e1a6" v="-4620"/>
+ <val o="22efb6" v="-4820"/>
+ <val o="22fdc7" v="-4643"/>
+ <val o="230bd7" v="-4435"/>
+ <val o="2319e6" v="-5397"/>
+ <val o="2327f6" v="-5558"/>
+ <val o="23361b" v="-5883"/>
+ <val o="234416" v="-5207"/>
+ <val o="235226" v="-5203"/>
+ <val o="236037" v="-5253"/>
+ <val o="236e46" v="-4342"/>
+ <val o="237c57" v="-4194"/>
+ <val o="238a66" v="-3991"/>
+ <val o="239881" v="-3195"/>
+ <val o="23a685" v="-3328"/>
+ <val o="23b495" v="-3191"/>
+ <val o="23c2a4" v="-2966"/>
+ <val o="23d0b5" v="-2959"/>
+ <val o="23dec4" v="-2916"/>
+ <val o="23ecd5" v="-3620"/>
+ <val o="23fae4" v="-4562"/>
+ <val o="2408f6" v="-5013"/>
+ <val o="241706" v="-5793"/>
+ <val o="242518" v="-6605"/>
+ <val o="243325" v="-6787"/>
+ <val o="244137" v="-6732"/>
+ <val o="244f46" v="-6435"/>
+ <val o="246b66" v="-6415"/>
+ <val o="247976" v="-6261"/>
+ <val o="248786" v="-5371"/>
+ <val o="24957e" v="-5703"/>
+ <val o="24a38f" v="-5668"/>
+ <val o="24b19c" v="-5810"/>
+ <val o="24bfac" v="-5495"/>
+ <val o="24cdbc" v="-5368"/>
+ <val o="24dbcd" v="-4539"/>
+ <val o="24e9e5" v="-4003"/>
+ <val o="24f808" v="-3487"/>
+ <val o="250616" v="-3597"/>
+ <val o="251426" v="-3575"/>
+ <val o="252236" v="-3422"/>
+ <val o="253047" v="-3610"/>
+ <val o="253e56" v="-4069"/>
+ <val o="254c67" v="-4209"/>
+ <val o="255a76" v="-4977"/>
+ <val o="256887" v="-5845"/>
+ <val o="257697" v="-5662"/>
+ <val o="2584a8" v="-15155"/>
+ <val o="2592b6" v="-8621"/>
+ <val o="25a0c7" v="-4609"/>
+ <val o="25aed7" v="-6329"/>
+ <val o="25bce7" v="-6120"/>
+ <val o="25caf8" v="-5819"/>
+ <val o="25d907" v="-5800"/>
+ <val o="25e718" v="-5627"/>
+ <val o="25f527" v="-5318"/>
+ <val o="260338" v="-5543"/>
+ <val o="261149" v="-4916"/>
+ <val o="261f59" v="-4589"/>
+ <val o="262d68" v="-4670"/>
+ <val o="263b83" v="-3694"/>
+ <val o="264986" v="-3491"/>
+ <val o="265795" v="-3582"/>
+ <val o="2665a6" v="-3683"/>
+ <val o="2673b5" v="-3608"/>
+ <val o="2681c6" v="-3681"/>
+ <val o="268fd5" v="-3850"/>
+ <val o="269de6" v="-3923"/>
+ <val o="26abf6" v="-3955"/>
+ <val o="26ba06" v="-4467"/>
+ <val o="26c817" v="-4257"/>
+ <val o="26d62b" v="-3915"/>
+ <val o="26e436" v="-3897"/>
+ <val o="26f247" v="-3531"/>
+ <val o="270057" v="-3798"/>
+ <val o="270e67" v="-3628"/>
+ <val o="271c77" v="-4540"/>
+ <val o="272a87" v="-5171"/>
+ <val o="273897" v="-5038"/>
+ <val o="2746a8" v="-5028"/>
+ <val o="2754b9" v="-5029"/>
+ <val o="2762c7" v="-3993"/>
+ <val o="2770d8" v="-3551"/>
+ <val o="277ee7" v="-3206"/>
+ </par>
+ <par memind="674601" h="3dc1a7e0">
+ <val o="0" v="22123:137:88:76:103:69:89:6047:6571:2134:6414:2223:2727.231:1435.675:5.979:0.067:0:4171:41039:29052:42104:12218:24721:13504:8975:11153:2990:8665:9759:11742"/>
+ </par>
+ <par memind="673801" h="3dc1a7e0">
+ <val o="0" v="0:0:0:0:0:0:0:2472:22505:25160:16425:30012:23514.229:11675.362:9.272:0.416:0:6491:3221:2867:4204:22822:3047:6263:15342:9785:32424:23346:21578:23508"/>
+ </par>
+ <par memind="673401" h="3dc1a7e0">
+ <val o="0" v="72898:191:188:176:178:174:181:10441:14079:1360:46667:74131:80996.13:50324.326:32.188:0.038:0:44027:200289:109216:52461:12951:75896:69196:104852:117036:96903:120714:124308:96207"/>
+ </par>
+ <par memind="673001" h="3dc1a7e0">
+ <val o="0" v="0:0:0:0:0:0:0:3476:3226:5597:4853:0:0:0:0.001:0.137:0:0:0:0:0:50735:59205:0:0:0:0:0:0:0"/>
+ </par>
+ <par memind="26274601" h="3dc1a7e0">
+ <val o="0" v="0::1305::2869::4482::6066::7396::8573::10262::11922::13773::15492::17522::19544::21452::22070::22075::22080::22084::22085::22090::22097::22103::22109::22116::0::6::13::20::27::32::34::41::48::54::61::68::75::82::89::96::103::110::110::111::116::119::123::129"/>
+ <val o="2a300" v="0::5::5::7::11::12::12::17::24::30::37::44::51::58::65::69::71::71::71::73::75::76::76::81::0::6::13::20::27::34::40::44::50::::51::51::51::51::51::51::51::51::51::51::54::60::63::69::0"/>
+ <val o="55410" v="6::13::20::27::34::38::44::46::46::47::52::58::65::66::66::67::69::69::70::76::83::89::96::0::5::12::19::25::30::31::35::37::37::37::37::38::44::45::45::45::45::45::45::48::51::56::62::0"/>
+ <val o="7f710" v="6::14::21::28::35::42::47::50::50::50::52::59::65::69::72::74::75::75::75::75::78::79::82::0::7::14::21::28::34::38::44::45::45::49::56::63::70::76::80::835::1675::2038::2039::2856::3158::3607::4431::0"/>
+ <val o="a9a10" v="629::797::1456::2382::2476::2477::2821::2821::2821::::2821::2821::2856::2865::2865::3049::3223::3267::3532::4304::5147::5147::5449::0::101::102::252::592::605::605::605::605::612::612::612::612::612::612::612::679::767::767::767::767::767::767::910::0::1158"/>
+ <val o="d4b20" v="2289::2701::3076::3076::3385::3904::3904::3904::3904::3904::3904::3904::3904::3904::3904::3911::4023::4599::5237::5494::5780::6072::0::622::622::622::622::622::716::819::819::819::819::819::819::870::870::870::870::870::870::870::870::870::870::1024::0::1127"/>
+ <val o="fee20" v="1954::2173::2377::2377::2377::2377::2377::2377::2381::2381::2381::2381::2381::2381::2381::2381::2381::2381::2381::2384::2400::2400::0::163::163::163::163::163::163::163::163::204::330::751::1400::1433::1433::1433::1435.1::1435.1::1435.1::1435.1::1435.1::1435.144::1435.375::1435.381::0::1.179"/>
+ <val o="129120" v="2.486::3.869::5.278::5.809::5.811::5.811::5.811::5.843::5.967::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.969::5.969::0::0::0::0::0::0::0::0::0::0::0::0.001::0.014::0.032::0.04::0.046::0.049::0.05::0.05::0.05::0.05::0.05::0.05::0.053::0::0.005"/>
+ <val o="153420" v="0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.009::0.009::0.009::0.009::0.009::0.009::0.014::0::0.004::0.02::0.031::0.042::0.044::0.044::0.044::0.044::0.044::0.044::0.044::0.047::0.05::0.051::0.054::0.054::0.054::0::0::0::0::175::1878::0::2303"/>
+ <val o="17d720" v="5016::7889::10825::12785::13428::14568::16281::17870::18757::19673::22314::25317::28017::30611::32571::::33078::33570::34865::36124::37670::39908::0::978::2540::4236::5992::6773::6818::6915::7643::8510::8618::::9354::10334::10857::11190::11387::11387::12818::15547::19011::21077::22610::25682::0::2682::5757::9094"/>
+ <val o="1a9640" v="12439::14810::16426::18172::20462::22851::24957::26912::29200::31789"/>
+ <val o="1c7460" v="8197::8264::8365::8365::8996::9996::10570::10570::10570::10807::0::388::776::1655::2374::2391::2391::2429::3332::3677::3768::3851::4294::4930::5847::6625::7852::9492::11328::13376::15620::17946::20170::22469::0::1979::4179::4817::5302::5612::5802::6075::6787::7172::7489::7668::7867::8184"/>
+ <val o="1f1760" v="8270::8270::8270::8270::8270::8279::8425::8766::9261::11379::0::967::2232::3224::3584::3708::3742::4192::4373::4379::4379::4379::4379::4379::4379::4468::4816::5111::5533::6393::6740::7394::7394::7988::0::1479::2407::2907::3341::3347::3347::3522::4521::4702::5104::5399::6511::6511"/>
+ <val o="21ba60" v="6511::6511::7554::8046::8046::8084::8781::9437::9437::10034::0::258::258::258::258::258::303::541::1097::1122::1122::1122::1122::1397::1429::2052::2638::2638::2638::2638::2638::2779::2779::2779::0::211::716::993::993::993::993::1058::1060::1060::1060::1060::1123::1640"/>
+ <val o="246b70" v="3280::3952::3962::3962::3962::4297::5586::6998::7956::0::492::1570::2683::3585::3615::3618::3659::3659::3659::3659::3973::6767::8644::8717::8718::8718::8718::8718::8718::8718::8898::8898::9205::0::502::1825::3722::5758::7237::8159::8226::8226::8226::8226::8226::8226::8226::8226"/>
+ <val o="270e70" v="8226::8240::8504::8980::9466::10308::10666::10666::10739"/>
+ </par>
+ <par memind="26273801" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::680::1753::2436::2439::2471::2472::2472::0"/>
+ <val o="a9a10" v="273::304::304::304::392::1467::1961::2735::4511::::12114::16337::18252::18452::19051::20724::21115::21611::21616::21616::21647::22460::22505::0::1428::1786::1821::1821::2100::3116::4606::5700::6263::7232::8321::9202::9706::10109::10567::11827::12356::14818::17416::20186::22628::24467::25160::0::16"/>
+ <val o="d4b20" v="16::16::18::761::2317::2345::3031::5010::7681::10719::13491::14079::14541::14788::15028::15551::16182::16182::16327::16351::16394::16424::0::1254::2521::3304::4214::6189::8542::8884::9714::10907::12447::13604::14407::14928::16855::18323::20016::22306::23952::25511::26700::27858::29512::30012::0::0"/>
+ <val o="fee20" v="14::14::16::848::2512::4114::5556::7070::7967::9424::10812::11722::12829::13950::15033::17095::19423::20670::21129::21828::22608::23444::0::1024::1508::1786::1985::2951::4900::6589::8053::8849::8929::8929::8929::9502::10380::11200::11669.43::11670.714::11671.501::11673.236::11674.324::11674.616::11674.887::11675.345::0::0"/>
+ <val o="129120" v="0::0::0::0::0.632::1.57::2.787::4.389::5.353::6.676::7.825::8.473::9.059::9.07::9.083::9.113::9.149::9.186::9.222::9.254::9.263::9.267::0::0.054::0.078::0.094::0.113::0.149::0.2::0.229::0.234::0.241::0.244::0.245::0.245::0.245::0.245::0.245::0.246::0.276::0.309::0.348::0.383::0.408::0.415::0.416::0::0.022"/>
+ <val o="153420" v="0.031::0.032::0.033::0.045::0.076::0.1::0.121::0.161::0.197::0.227::0.252::0.257::0.264::0.275::0.295::0.315::0.322::0.329::0.332::0.348::0.357::0.357::0::0::0::0::0::0::0.015::0.051::0.062::0.068::0.079::0.091::0.094::0.094::0.097::0.108::0.125::0.161::1425::3563::5087::6081::6491::6491::0::0"/>
+ <val o="17d720" v="0::0::0::0::3::4::17::17::17::17::83::83::83::83::83::::2815::3221::3221::3221::3221::3221::0::0::0::0::0::0::503::2124::2124::2135::2187::::2220::2220::2220::2220::2231::2857::2867::2867::2867::2867::2867::2867::0::0::0::0"/>
+ <val o="1a9640" v="0::0::0::0::5::5::5::5::5::5"/>
+ <val o="1c7460" v="14139::14218::14538::16467::16493::16493::17913::20388::22503::22822::0::242::242::242::242::473::1614::2783::2783::2785::3043::3046::3046::3047::3047::3047::3047::3047::3047::3047::3047::3047::3047::3047::0::0::0::101::101::101::155::155::155::155::155::158::158::158"/>
+ <val o="1f1760" v="303::689::1267::3291::5362::5964::5964::6205::6263::6263::0::67::78::78::78::96::279::1257::2169::3382::5628::7692::9144::9800::11410::13193::13770::14500::14502::14526::14528::14693::15337::15342::0::0::128::128::128::631::1960::2834::2847::2994::3445::3445::3445::4010"/>
+ <val o="21ba60" v="5304::6802::7188::7304::7777::8119::8119::8238::9731::9785::0::3202::5137::5593::6304::8577::12322::12561::12561::13960::16533::20127::22841::22863::23106::23247::23247::24987::26402::27590::28075::29263::31438::32325::0::171::171::200::344::1476::2425::3387::4145::5875::9210::12291::15144::15144"/>
+ <val o="246b70" v="15144::15144::17267::21864::23232::23346::23346::23346::23346::0::86::86::86::86::188::709::1333::2511::4313::7593::10434::10434::10443::10622::10810::11293::12302::14859::17476::19565::19742::21035::21234::0::13::13::13::13::13::13::216::929::2058::3700::5698::8782::11698::14663"/>
+ <val o="270e70" v="17767::18546::19155::19155::19155::19155::20730::23016::23508"/>
+ </par>
+ <par memind="26273401" h="3dc1a7e0">
+ <val o="0" v="0::4177::8348::12421::16466::20389::24550::29638::35390::42329::49608::56982::64119::70819::72824::72831::72838::72845::72851::72859::72866::72873::72881::72889::0::8::16::24::32::40::48::56::65::73::81::89::97::105::114::122::131::138::145::152::160::167::175::183"/>
+ <val o="2a300" v="0::8::16::23::31::39::47::55::63::71::79::87::96::104::112::120::128::135::142::150::157::165::172::180::0::8::17::25::34::43::51::58::66::::79::85::92::98::105::111::117::124::131::138::145::153::160::168::0"/>
+ <val o="55410" v="8::16::25::33::41::49::56::64::70::77::84::91::98::105::111::118::125::132::139::147::154::162::170::0::7::16::24::32::40::48::55::63::69::76::82::89::96::103::109::116::122::128::135::143::150::158::166::0"/>
+ <val o="7f710" v="8::17::25::34::43::51::58::66::73::80::87::94::101::108::115::122::129::135::142::150::157::165::172::0::8::17::25::34::42::50::58::65::72::78::85::92::100::107::114::2595::7913::10294::10439::10439::10439::10441::10441::0"/>
+ <val o="a9a10" v="2::4::9::9::9::9::69::181::236::::327::461::720::1393::2215::3059::4593::6342::8041::9944::11561::12314::13166::0::47::47::47::47::47::47::47::47::48::59::87::127::134::135::142::182::537::769::1000::1156::1208::1230::1264::0::0"/>
+ <val o="d4b20" v="0::0::0::0::58::464::1214::2866::5195::7644::10189::13108::15902::18773::21557::24345::28271::32267::36012::39360::42352::44782::0::1215::1879::2581::3232::3730::4627::6845::9426::13213::17460::21812::26408::30878::35346::40061::44776::49145::53501::57575::61429::64968::68029::71154::0::2541"/>
+ <val o="fee20" v="4757::6749::8707::10446::12296::14817::18021::22192::24710::29209::33799::38000::42199::46375::50681::55062::59387::63686::67971::71883::75378::78274::0::1965::3785::5589::7408::9042::10735::13143::16254::20473::25210::29898::34989::39265::43547::47659::50298.816::50302.733::50306.729::50310.326::50313.783::50317.062::50320.016::50322.277::0::1.986"/>
+ <val o="129120" v="3.746::5.427::7.116::8.649::10.225::12.377::14.972::18.155::21.519::24.079::26.789::29.872::32.038::32.075::32.093::32.11::32.132::32.149::32.163::32.173::32.181::32.183::0::0::0::0::0::0::0::0::0::0.001::0.005::0.008::0.012::0.014::0.014::0.014::0.014::0.017::0.023::0.026::0.029::0.032::0.035::0.038::0::0"/>
+ <val o="153420" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0.004::0.013::0.023::0.035::0.039::0.04::0.04::0::0::0::0::0::0::0::0::0.011::0.064::0.184::0.299::0.403::0.491::0.587::0.684::0.777::0.882::4649::11369::18384::25539::32098::38189::0::5631"/>
+ <val o="17d720" v="11134::16580::21819::26934::32449::39011::46164::57329::70535::83592::96112::107934::119836::131836::143932::::159972::167838::175759::182940::189261::195260::0::4361::8637::12844::17026::21292::26185::31514::37629::44147::50295::::62972::69142::75490::81871::88411::92634::95263::98136::101493::104338::106264::108086::0::1118::2125::3163"/>
+ <val o="1a9640" v="3972::4424::5117::6670::8682::11273::14036::16800::19585::21687"/>
+ <val o="1c7460" v="12951::12951::12951::12951::12951::12951::12951::12951::12951::12951::0::0::0::0::0::0::0::0::0::0::2097::5658::9307::12837::16437::20072::24855::31120::37813::44635::51509::58224::64519::70460::0::4912::9779::12468::14377::16196::18098::20357::22916::25572::28333::31048::33673::36268"/>
+ <val o="1f1760" v="38769::41197::43617::46222::49307::52694::56229::59586::62790::66147::0::2563::5010::7377::9547::11662::13970::16722::19820::23668::28455::34079::39799::45148::50589::56448::62674::69084::75584::81629::87007::92190::96664::100953::0::3686::6981::10109::13149::16039::19168::23164::28263::34238::40473::46590::52821::58868"/>
+ <val o="21ba60" v="64810::70628::77026::83160::89027::94673::100155::105383::109691::113559::0::1996::3876::5949::7945::9673::11583::15197::19355::23959::28689::33229::37981::42745::47470::52656::58228::63768::69353::74634::79872::84699::88966::93090::0::3272::6519::9646::12665::15529::18785::22767::27361::33026::39197::45634::52231::58688"/>
+ <val o="246b70" v="71623::77897::83661::88919::94509::100226::106004::111517::116497::0::3504::7147::10760::14341::17823::21561::25845::30381::35821::41529::48026::57310::64898::70924::77195::83135::89105::94900::100321::105698::111053::115727::120309::0::3610::7127::10778::14421::18015::21712::25564::29454::33598::37946::42100::46054::49824::53500"/>
+ <val o="270e70" v="57099::61385::66221::71352::76382::81368::85828::89677::93036"/>
+ </par>
+ <par memind="26273001" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::10::521::1009::1914::2329::2804::0"/>
+ <val o="a9a10" v="1070::1205::1242::1361::1873::2688::2888::2968::3013::::3093::3165::3226::3226::3226::3226::3226::3226::3226::3226::3226::3226::3226::0::504::975::1420::1776::2305::2796::3212::4002::4254::4373::4494::4549::4753::4950::5087::5453::5453::5453::5453::5454::5473::5509::5581::0::581"/>
+ <val o="d4b20" v="1231::1927::2760::3902::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="fee20" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="129120" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0.017::0.031::0.048::0.065::0.085::0.105::0.114::0.116::0.116::0.116::0.116::0.116::0.117::0.12::0.123::0.128::0.135::0.135::0.135::0.135::0.135::0.135::0.136::0::0.016"/>
+ <val o="153420" v="0.036::0.054::0.074::0.096::0.119::0.137::0.152::0.165::0.178::0.19::0.204::0.216::0.228::0.237::0.249::0.256::0.256::0.256::0.256::0.256::0.256::0.257::0::0.012::0.018::0.02::0.021::0.025::0.032::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0::0::0::0::0::0::0::0"/>
+ <val o="17d720" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="1a9640" v="0::0::0::0::0::0::0::0::0::0"/>
+ <val o="1c7460" v="9208::9490::12579::16633::20164::23882::28334::33713::39220::44909::0::6542::13180::19855::26594::33432::40280::46777::52524::57875::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="1f1760" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="21ba60" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="246b70" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="270e70" v="0::0::0::0::0::0::0::0::0"/>
+ </par>
+ <par memind="1314601" h="3dc1a7e0">
+ <val o="0" v="270370"/>
+ </par>
+ <par memind="1313801" h="3dc1a7e0">
+ <val o="0" v="306693"/>
+ </par>
+ <par memind="1313401" h="3dc1a7e0">
+ <val o="0" v="1576111"/>
+ </par>
+ <par memind="1313001" h="3dc1a7e0">
+ <val o="0" v="127098"/>
+ </par>
+ <par memind="52514601" h="3dc1a7e0">
+ <val o="0" v="0::1305::2869::4482::6066::7396::8573::10262::11922::13773::15492::17522::19544::21452::22070::22075::22080::22084::22085::22090::22097::22103::22109::22116::22123::22129::22136::22143::22150::22156::22158::22166::22173::22180::22186::22193::22200::22207::22214::22221::22228::22235::22235::22236::22241::22244::22247::22254"/>
+ <val o="2a300" v="22261::22267::22267::22269::22273::22274::22274::22280::22287::22294::22301::22308::22315::22322::22329::22333::22335::22335::22335::22336::22338::22339::22339::22344::22351::22358::22365::22372::22379::22386::22391::22395::22402::::22404::22404::22404::22404::22404::22404::22404::22404::22404::22404::22407::22413::22416::22422::22429"/>
+ <val o="55410" v="22436::22443::22450::22457::22464::22468::22475::22477::22477::22478::22483::22489::22495::22497::22497::22498::22499::22499::22500::22507::22513::22520::22526::22533::22538::22545::22552::22559::22564::22564::22569::22571::22572::22572::22572::22573::22579::22580::22580::22580::22580::22580::22580::22583::22585::22590::22596::22603"/>
+ <val o="7f710" v="22610::22617::22624::22632::22639::22645::22650::22653::22653::22653::22655::22662::22669::22672::22675::22677::22678::22678::22678::22678::22682::22683::22686::22693::22701::22708::22715::22722::22728::22732::22738::22740::22740::22744::22751::22758::22765::22770::22775::23529::24370::24733::24734::25551::25853::26301::27126::28742"/>
+ <val o="a9a10" v="29372::29540::30199::31125::31218::31219::31564::31564::31564::::31564::31564::31599::31607::31607::31792::31965::32010::32274::33047::33890::33890::34193::35316::35417::35418::35569::35909::35921::35921::35921::35921::35928::35928::35928::35928::35928::35928::35928::35995::36083::36083::36083::36083::36083::36083::36226::37450::38609"/>
+ <val o="d4b20" v="39740::40151::40527::40527::40836::41356::41356::41356::41356::41356::41356::41356::41356::41356::41356::41363::41476::42051::42690::42946::43231::43524::43865::44488::44488::44488::44488::44488::44582::44685::44685::44685::44685::44685::44685::44736::44736::44736::44736::44736::44736::44736::44736::44736::44736::44890::46089::47216"/>
+ <val o="fee20" v="48043::48262::48466::48466::48466::48466::48466::48466::48471::48471::48471::48471::48471::48471::48471::48471::48471::48471::48471::48474::48491::48491::48816::48980::48980::48980::48980::48980::48980::48980::48980::49022::49147::49569::50218::50251::50251::50251::50252.91::50252.91::50252.91::50252.91::50252.91::50252.954::50253.185::50253.192::50253.487::50254.667"/>
+ <val o="129120" v="50255.973::50257.356::50258.765::50259.296::50259.299::50259.299::50259.299::50259.332::50259.455::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.457::50259.458::50259.458::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.469::50259.482::50259.5::50259.507::50259.513::50259.516::50259.517::50259.517::50259.517::50259.517::50259.517::50259.517::50259.521::50259.535::50259.54"/>
+ <val o="153420" v="50259.54::50259.54::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.546::50259.546::50259.546::50259.546::50259.547::50259.547::50259.552::50259.557::50259.561::50259.577::50259.588::50259.6::50259.601::50259.601::50259.601::50259.601::50259.601::50259.601::50259.601::50259.604::50259.608::50259.609::50259.612::50259.612::50259.612::50258::50258::50258::50258::50434::52137::54431::56734"/>
+ <val o="17d720" v="59447::62321::65257::67217::67860::69000::70713::72302::73189::74106::76746::79750::82449::85043::87003::::87510::88002::89297::90556::92102::94340::95470::96449::98011::99707::101463::102244::102289::102386::103115::103983::104091::::104826::105806::106330::106662::106859::106859::108290::111019::114483::116549::118083::121154::124524::127207::130282::133619"/>
+ <val o="1a9640" v="136963::139335::140951::142698::144988::147377::149483::151438::153726::156315"/>
+ <val o="1c7460" v="174829::174896::174996::174996::175627::176628::177201::177201::177201::177439::178849::179238::179626::180505::181224::181241::181241::181279::182183::182528::182619::182701::183144::183780::184697::185475::186702::188342::190179::192226::194470::196796::199020::201319::203571::205550::207751::208389::208873::209184::209373::209646::210358::210744::211061::211240::211439::211756"/>
+ <val o="1f1760" v="211843::211843::211843::211843::211843::211852::211998::212339::212833::214951::217077::218045::219309::220302::220662::220786::220819::221269::221451::221458::221458::221458::221458::221458::221458::221547::221895::222189::222611::223471::223818::224472::224473::225066::226054::227533::228461::228962::229396::229401::229401::229577::230576::230758::231159::231454::232566::232566"/>
+ <val o="21ba60" v="232566::232566::233609::234101::234101::234139::234836::235492::235492::236089::237208::237467::237467::237467::237467::237467::237511::237749::238306::238331::238331::238331::238331::238606::238637::239260::239846::239846::239846::239846::239847::239988::239988::239988::240200::240411::240916::241193::241194::241194::241194::241260::241262::241262::241262::241262::241325::241842"/>
+ <val o="246b70" v="243482::244154::244164::244164::244164::244499::245788::247200::248157::248866::249358::250436::251549::252452::252482::252484::252526::252526::252526::252526::252840::255634::257511::257584::257585::257585::257585::257585::257585::257585::257766::257766::258073::258628::259130::260454::262350::264387::265865::266787::266854::266854::266854::266854::266854::266854::266854::266854"/>
+ <val o="270e70" v="266854::266868::267132::267609::268095::268936::269294::269294::269367"/>
+ </par>
+ <par memind="52513801" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::680::1753::2436::2439::2471::2472::2472::2472"/>
+ <val o="a9a10" v="2745::2776::2776::2776::2864::3939::4434::5207::6983::::14587::18809::20724::20924::21523::23196::23587::24084::24088::24088::24119::24933::24978::24978::26406::26764::26799::26799::27079::28094::29584::30678::31242::32211::33301::34181::34685::35088::35546::36806::37336::39798::42396::45166::47608::49447::50139::50139::50155"/>
+ <val o="d4b20" v="50155::50156::50158::50901::52457::52486::53171::55151::57821::60860::63632::64220::64682::64929::65169::65692::66324::66324::66469::66492::66535::66565::66565::67820::69087::69869::70780::72755::75107::75449::76279::77473::79013::80171::80973::81494::83421::84889::86582::88872::90518::92077::93266::94424::96079::96579::96579::96579"/>
+ <val o="fee20" v="96594::96594::96596::97428::99092::100694::102136::103651::104547::106004::107392::108302::109410::110530::111613::113676::116005::117251::117711::118409::119188::120024::120093::121118::121602::121880::122079::123044::124994::126683::128148::128945::129025::129025::129025::129597::130475::131295::131764.303::131765.588::131766.375::131768.11::131769.198::131769.49::131769.761::131770.219::131770.236::131770.236"/>
+ <val o="129120" v="131770.236::131770.236::131770.236::131770.236::131770.868::131771.806::131773.023::131774.625::131775.589::131776.912::131778.062::131778.709::131779.295::131779.306::131779.319::131779.349::131779.386::131779.423::131779.458::131779.49::131779.499::131779.503::131779.509::131779.564::131779.587::131779.604::131779.623::131779.659::131779.709::131779.738::131779.744::131779.752::131779.755::131779.755::131779.755::131779.755::131779.755::131779.755::131779.756::131779.786::131779.819::131779.858::131779.893::131779.918::131779.926::131779.926::131779.926::131779.949"/>
+ <val o="153420" v="131779.958::131779.959::131779.96::131779.972::131780.003::131780.027::131780.049::131780.089::131780.125::131780.155::131780.179::131780.184::131780.191::131780.202::131780.222::131780.243::131780.251::131780.258::131780.261::131780.277::131780.285::131780.285::131780.288::131780.288::131780.288::131780.288::131780.288::131780.289::131780.303::131780.34::131780.35::131780.356::131780.368::131780.381::131780.384::131780.384::131780.386::131780.398::131780.415::131780.451::133205::135343::136866::137861::138272::138272::138272::138272"/>
+ <val o="17d720" v="138272::138272::138272::138272::138275::138277::138290::138290::138290::138290::138355::138355::138355::138355::138355::::141088::141493::141493::141493::141493::141493::141493::141493::141493::141493::141493::141493::141997::143618::143618::143629::143681::::143714::143714::143714::143714::143725::144351::144362::144362::144362::144362::144362::144362::144362::144362::144362::144362"/>
+ <val o="1a9640" v="144362::144362::144362::144362::144368::144368::144368::144368::144368::144368"/>
+ <val o="1c7460" v="162707::162786::163107::165035::165062::165062::166481::168956::171072::171391::171391::171634::171634::171634::171634::171865::173006::174175::174175::174177::174435::174438::174438::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174540::174540::174540::174594::174594::174594::174594::174594::174598::174598::174598"/>
+ <val o="1f1760" v="174742::175129::175706::177731::179803::180405::180405::180646::180704::180704::180704::180771::180782::180782::180782::180801::180983::181961::182873::184086::186332::188396::189848::190504::192114::193897::194474::195204::195206::195230::195232::195397::196041::196046::196046::196046::196175::196175::196175::196678::198007::198881::198895::199043::199494::199494::199494::200058"/>
+ <val o="21ba60" v="201353::202851::203237::203353::203825::204167::204167::204286::205778::205833::205833::209036::210970::211426::212138::214410::218156::218395::218395::219795::222368::225963::228676::228698::228941::229082::229082::230822::232237::233425::233910::235098::237273::238160::238259::238431::238431::238460::238604::239735::240685::241648::242406::244137::247471::250551::253404::253404"/>
+ <val o="246b70" v="253404::253404::255527::260124::261492::261606::261606::261606::261606::261606::261692::261692::261692::261692::261794::262315::262939::264118::265921::269200::272041::272041::272049::272229::272417::272900::273909::276466::279084::281173::281349::282642::282841::283185::283198::283198::283198::283198::283198::283198::283402::284114::285244::286886::288884::291968::294884::297849"/>
+ <val o="270e70" v="300954::301733::302341::302341::302341::302341::303915::306201::306693"/>
+ </par>
+ <par memind="52513401" h="3dc1a7e0">
+ <val o="0" v="0::4177::8348::12421::16466::20389::24550::29638::35390::42329::49608::56982::64119::70819::72824::72831::72838::72845::72851::72859::72866::72873::72881::72889::72898::72906::72914::72922::72931::72938::72946::72955::72963::72972::72979::72987::72995::73004::73012::73021::73029::73037::73045::73052::73060::73067::73074::73083"/>
+ <val o="2a300" v="73092::73100::73108::73116::73124::73131::73139::73147::73155::73164::73172::73180::73189::73197::73205::73213::73221::73228::73235::73242::73250::73258::73265::73273::73281::73290::73298::73307::73316::73324::73333::73341::73349::::73362::73368::73374::73381::73387::73394::73400::73407::73414::73421::73428::73436::73443::73451::73459"/>
+ <val o="55410" v="73467::73476::73484::73492::73501::73508::73516::73523::73529::73536::73543::73550::73557::73564::73571::73578::73585::73592::73599::73607::73614::73622::73630::73639::73647::73655::73663::73672::73680::73687::73694::73702::73709::73715::73721::73728::73735::73742::73748::73755::73762::73769::73776::73783::73791::73798::73806::73814"/>
+ <val o="7f710" v="73823::73831::73840::73849::73858::73866::73874::73881::73888::73895::73902::73909::73917::73924::73931::73938::73945::73952::73959::73966::73973::73980::73988::73996::74005::74014::74022::74031::74039::74047::74055::74062::74069::74076::74084::74091::74098::74105::74112::76593::81912::84293::84438::84438::84438::84439::84440::84440"/>
+ <val o="a9a10" v="84442::84445::84450::84450::84450::84450::84510::84622::84677::::84768::84902::85161::85834::86656::87500::89034::90783::92482::94386::96003::96756::97608::98520::98568::98568::98568::98568::98568::98568::98569::98569::98570::98581::98609::98649::98656::98657::98664::98704::99059::99291::99522::99679::99730::99752::99786::99882::99882"/>
+ <val o="d4b20" v="99882::99882::99882::99882::99940::100346::101096::102749::105078::107527::110072::112991::115786::118656::121441::124228::128154::132149::135895::139243::142235::144665::146550::147766::148430::149132::149783::150281::151178::153396::155977::159764::164011::168363::172959::177429::181897::186612::191328::195697::200054::204127::207981::211520::214581::217705::220682::223224"/>
+ <val o="fee20" v="225440::227431::229389::231128::232979::235501::238705::242877::245395::249894::254484::258685::262884::267059::271365::275747::280072::284371::288656::292567::296062::298958::301678::303643::305464::307268::309087::310721::312414::314823::317933::322153::326889::331577::336668::340944::345227::349338::151978.697::151982.614::151986.61::151990.207::151993.665::151996.943::151999.897::152002.158::152004.207::152006.194"/>
+ <val o="129120" v="152007.954::152009.635::152011.324::152012.857::152014.433::152016.586::152019.181::152022.365::152025.728::152028.288::152030.998::152034.081::152036.247::152036.284::152036.302::152036.319::152036.341::152036.359::152036.372::152036.383::152036.39::152036.393::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.399::152036.404::152036.407::152036.412::152036.414::152036.414::152036.414::152036.414::152036.417::152036.422::152036.425::152036.428::152036.432::152036.435::152036.437::152036.437::152036.437"/>
+ <val o="153420" v="152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.441::152036.45::152036.46::152036.472::152036.476::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.489::152036.543::152036.663::152036.778::152036.883::152036.971::152037.066::152037.164::152037.257::152037.361::356685::363405::370420::377575::384134::390225::396064::401696"/>
+ <val o="17d720" v="407198::412644::417883::422998::428513::435075::442229::453395::466601::479658::492177::504000::515901::527901::539997::::556036::563903::571823::579005::585326::591325::596354::600715::604992::609199::613381::617646::622539::627868::633983::640502::646650::::659328::665498::671845::678227::684766::688990::691619::694492::697849::700694::702620::704442::705572::706691::707697::708736"/>
+ <val o="1a9640" v="709545::709997::710690::712243::714255::716847::719609::722373::725158::727261"/>
+ <val o="1c7460" v="770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::773086::776647::780296::783826::787426::791061::795844::802109::808801::815624::822498::829213::835508::841449::846886::851798::856665::859354::861263::863083::864985::867245::869803::872460::875221::877937::880561::883156"/>
+ <val o="1f1760" v="885657::888085::890505::893110::896194::899581::903116::906473::909677::913034::916082::918646::921093::923460::925630::927744::930053::932806::935904::939753::944540::950163::955884::961233::966673::972533::978758::985168::991668::997713::1003091::1008274::1012749::1017038::1020937::1024624::1027919::1031047::1034087::1036976::1040106::1044102::1049201::1055177::1061411::1067528::1073759::1079806"/>
+ <val o="21ba60" v="1085748::1091566::1097964::1104098::1109965::1115611::1121093::1126321::1130630::1134497::1137973::1139970::1141849::1143923::1145918::1147647::1149557::1153171::1157329::1161934::1166664::1171204::1175957::1180721::1185446::1190632::1196204::1201743::1207328::1212608::1217847::1222674::1226942::1231066::1234878::1238151::1241398::1244525::1247544::1250408::1253663::1257645::1262239::1267905::1274075::1280512::1287109::1293566"/>
+ <val o="246b70" v="1306501::1312775::1318539::1323798::1329387::1335105::1340883::1346396::1351376::1355594::1359099::1362742::1366355::1369936::1373418::1377156::1381440::1385976::1391416::1397124::1403622::1412905::1420494::1426519::1432791::1438731::1444700::1450495::1455916::1461293::1466648::1471323::1475904::1479903::1483514::1487030::1490682::1494324::1497918::1501615::1505468::1509358::1513503::1517850::1522004::1525957::1529728::1533403"/>
+ <val o="270e70" v="1537003::1541289::1546124::1551256::1556286::1561272::1565731::1569581::1572940"/>
+ </par>
+ <par memind="52513001" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::10::521::1009::1914::2329::2804::3476"/>
+ <val o="a9a10" v="4546::4682::4719::4838::5350::6165::6365::6445::6490::::6571::6643::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::7208::7679::8124::8480::9010::9501::9918::10708::10960::11079::11200::11255::11459::11656::11793::12159::12159::12159::12159::12160::12179::12215::12287::12302::12884"/>
+ <val o="d4b20" v="13533::14230::15062::16204::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="fee20" v="17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492"/>
+ <val o="129120" v="17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.493::17157.511::17157.525::17157.542::17157.558::17157.579::17157.599::17157.608::17157.611::17157.612::17157.612::17157.612::17157.612::17157.613::17157.616::17157.618::17157.623::17157.631::17157.631::17157.631::17157.631::17157.631::17157.631::17157.631::17157.632::17157.649"/>
+ <val o="153420" v="17157.669::17157.686::17157.706::17157.728::17157.752::17157.771::17157.786::17157.799::17157.812::17157.824::17157.838::17157.85::17157.861::17157.871::17157.883::17157.89::17157.89::17157.89::17157.89::17157.89::17157.89::17157.891::17157.899::17157.911::17157.918::17157.92::17157.921::17157.925::17157.932::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="17d720" v="17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="1a9640" v="17156::17156::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="1c7460" v="26366::26648::29737::33790::37320::41038::45491::50870::56378::62066::67892::74435::81073::87748::94487::101325::108173::114671::120417::125768::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="1f1760" v="127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="21ba60" v="127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="246b70" v="127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="270e70" v="127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ </par>
+ <par memind="34601" h="3dc1a7e0">
+ <val o="0" v="6094564::6095869::6097433::6099046::6100630::6101960::6103137::6104826::6106487::6108338::6110057::6112087::6114108::6116017::6116635::6116640::6116645::6116648::6116649::6116654::6116661::6116667::6116674::6116681::6116688::6116694::6116701::6116708::6116715::6116721::6116723::6116730::6116738::6116745::6116751::6116757::6116764::6116771::6116779::6116786::6116793::6116799::6116800::6116800::6116805::6116808::6116812::6116819"/>
+ <val o="2a300" v="6116826::6116832::6116832::6116834::6116838::6116839::6116839::6116845::6116852::6116859::6116866::6116873::6116880::6116887::6116893::6116898::6116899::6116899::6116899::6116901::6116902::6116904::6116905::6116910::6116917::6116924::6116931::6116938::6116945::6116952::6116957::6116961::6116968::::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116972::6116978::6116980::6116987::6116994"/>
+ <val o="55410" v="6117001::6117008::6117015::6117022::6117029::6117033::6117039::6117042::6117042::6117044::6117049::6117054::6117061::6117062::6117062::6117063::6117065::6117065::6117066::6117072::6117078::6117084::6117091::6117098::6117103::6117110::6117117::6117124::6117129::6117129::6117134::6117136::6117137::6117137::6117137::6117138::6117144::6117145::6117145::6117145::6117145::6117145::6117145::6117148::6117150::6117154::6117160::6117167"/>
+ <val o="7f710" v="6117174::6117181::6117189::6117196::6117203::6117210::6117216::6117219::6117220::6117220::6117222::6117228::6117235::6117239::6117241::6117244::6117244::6117244::6117244::6117244::6117247::6117248::6117252::6117259::6117266::6117273::6117280::6117287::6117293::6117297::6117303::6117304::6117305::6117309::6117316::6117323::6117330::6117336::6117340::6118095::6118936::6119299::6119300::6120117::6120419::6120867::6121692::6123308"/>
+ <val o="a9a10" v="6123938::6124106::6124765::6125691::6125784::6125785::6126129::6126129::6126129::::6126129::6126129::6126164::6126173::6126173::6126358::6126531::6126576::6126840::6127612::6128455::6128455::6128757::6129880::6129981::6129983::6130133::6130473::6130485::6130485::6130485::6130485::6130493::6130493::6130493::6130493::6130493::6130493::6130493::6130561::6130649::6130649::6130649::6130649::6130649::6130649::6130792::6132016::6133175"/>
+ <val o="d4b20" v="6134306::6134717::6135093::6135093::6135402::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135929::6136041::6136617::6137256::6137512::6137797::6138089::6138431::6139053::6139053::6139053::6139053::6139053::6139147::6139251::6139251::6139251::6139251::6139251::6139251::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139456::6140655::6141782"/>
+ <val o="fee20" v="6142609::6142828::6143032::6143032::6143032::6143032::6143032::6143032::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143039::6143056::6143056::6143382::6143545::6143545::6143545::6143545::6143545::6143545::6143545::6143545::6143587::6143713::6144135::6144783::6144816::6144816::6144816::144818.2::144818.2::144818.2::144818.2::144818.2::144818.243::144818.474::144818.48::144818.775::144819.955"/>
+ <val o="129120" v="144821.261::144822.644::144824.053::144824.584::144824.587::144824.587::144824.587::144824.62::144824.744::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.755::144824.755::144824.755::144824.755::144824.755::144824.755::144824.755::144824.756::144824.756::144824.756::144824.756::144824.757::144824.77::144824.788::144824.796::144824.802::144824.805::144824.806::144824.806::144824.806::144824.806::144824.806::144824.806::144824.809::144824.823::144824.828"/>
+ <val o="153420" v="144824.828::144824.828::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.834::144824.834::144824.834::144824.834::144824.835::144824.835::144824.84::144824.845::144824.849::144824.865::144824.876::144824.888::144824.889::144824.889::144824.889::144824.889::144824.889::144824.889::144824.889::144824.892::144824.896::144824.897::144824.9::144824.9::144824.9::6144824::6144824::6144824::6144824::6145000::6146702::6148995::6151298"/>
+ <val o="17d720" v="6154011::6156885::6159821::6161781::6162424::6163565::6165278::6166868::6167755::6168671::6171312::6174315::6177014::6179609::6181568::::6182076::6182567::6183863::6185122::6186668::6188906::6190037::6191016::6192577::6194274::6196029::6196810::6196855::6196952::6197681::6198548::6198657::::6199392::6200372::6200895::6201228::6201425::6201425::6202856::6205585::6209048::6211115::6212648::6215720::6219090::6221773::6224848::6228185"/>
+ <val o="1a9640" v="6231530::6233901::6235517::6237264::6239554::6241943::6244049::6246003::6248291::6250880"/>
+ <val o="1c7460" v="6269393::6269460::6269561::6269561::6270193::6271193::6271766::6271766::6271766::6272003::6273414::6273802::6274190::6275070::6275788::6275805::6275805::6275844::6276747::6277093::6277184::6277267::6277710::6278346::6279262::6280041::6281268::6282908::6284744::6286792::6289036::6291362::6293586::6295884::6298136::6300115::6302316::6302954::6303439::6303749::6303938::6304212::6304924::6305309::6305626::6305804::6306004::6306321"/>
+ <val o="1f1760" v="6306407::6306407::6306407::6306407::6306407::6306417::6306562::6306904::6307399::6309517::6311643::6312611::6313875::6314868::6315228::6315352::6315385::6315835::6316016::6316023::6316023::6316023::6316023::6316023::6316023::6316113::6316460::6316755::6317177::6318036::6318383::6319038::6319038::6319632::6320620::6322099::6323027::6323528::6323962::6323967::6323967::6324143::6325141::6325322::6325724::6326020::6327132::6327132"/>
+ <val o="21ba60" v="6327132::6327132::6328174::6328667::6328667::6328705::6329402::6330058::6330058::6330655::6331774::6332033::6332033::6332033::6332033::6332033::6332078::6332316::6332872::6332897::6332897::6332897::6332897::6333173::6333204::6333827::6334413::6334413::6334413::6334413::6334413::6334554::6334554::6334554::6334765::6334977::6335481::6335759::6335759::6335759::6335759::6335824::6335826::6335826::6335826::6335826::6335889::6336407"/>
+ <val o="246b70" v="6338047::6338719::6338729::6338729::6338729::6339065::6340354::6341766::6342723::6343432::6343924::6345002::6346115::6347018::6347048::6347050::6347091::6347091::6347091::6347091::6347406::6350200::6352077::6352150::6352150::6352150::6352150::6352150::6352150::6352150::6352331::6352331::6352638::6353193::6353695::6355019::6356915::6358952::6360430::6361352::6361420::6361420::6361420::6361420::6361420::6361420::6361420::6361420"/>
+ <val o="270e70" v="6361420::6361434::6361698::6362174::6362660::6363502::6363860::6363860::6363933"/>
+ </par>
+ <par memind="33801" h="3dc1a7e0">
+ <val o="0" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422"/>
+ <val o="2a300" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422"/>
+ <val o="55410" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422"/>
+ <val o="7f710" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88180102::88181176::88181859::88181861::88181894::88181896::88181896::88181896"/>
+ <val o="a9a10" v="88182169::88182200::88182200::88182200::88182288::88183363::88183857::88184631::88186407::::88194010::88198233::88200148::88200348::88200947::88202620::88203011::88203507::88203512::88203512::88203543::88204356::88204401::88204401::88205830::88206188::88206222::88206222::88206502::88207517::88209008::88210102::88210666::88211635::88212724::88213604::88214108::88214512::88214969::88216229::88216759::88219221::88221818::88224589::88227031::88228870::88229563::88229563::88229580"/>
+ <val o="d4b20" v="88229580::88229580::88229582::88230325::88231881::88231910::88232595::88234574::88237245::88240283::88243056::88243643::88244105::88244352::88244593::88245115::88245746::88245746::88245891::88245915::88245959::88245988::88245989::88247244::88248510::88249293::88250203::88252178::88254531::88254874::88255704::88256898::88258438::88259595::88260398::88260919::88262845::88264314::88266006::88268297::88269942::88271502::88272690::88273849::88275503::88276003::88276003::88276003"/>
+ <val o="fee20" v="88276017::88276017::88276019::88276851::88278515::88280118::88281560::88283074::88283971::88285428::88286815::88287726::88288833::88289953::88291037::88293099::88295427::88296674::88297133::88297832::88298612::88299447::88299517::88300541::88301025::88301304::88301503::88302468::88304417::88306106::88307571::88308368::88308448::88308448::88308448::88309021::88309899::88310719::111188.016::111189.3::111190.088::111191.823::111192.91::111193.202::111193.473::111193.931::111193.948::111193.948"/>
+ <val o="129120" v="111193.948::111193.948::111193.948::111193.948::111194.58::111195.519::111196.735::111198.338::111199.302::111200.625::111201.775::111202.422::111203.008::111203.02::111203.032::111203.062::111203.098::111203.135::111203.171::111203.203::111203.212::111203.216::111203.221::111203.276::111203.299::111203.316::111203.335::111203.371::111203.422::111203.452::111203.457::111203.464::111203.468::111203.468::111203.468::111203.468::111203.468::111203.468::111203.469::111203.5::111203.532::111203.571::111203.606::111203.632::111203.639::111203.639::111203.639::111203.661"/>
+ <val o="153420" v="111203.671::111203.671::111203.672::111203.684::111203.715::111203.739::111203.761::111203.801::111203.837::111203.867::111203.891::111203.897::111203.904::111203.915::111203.935::111203.955::111203.962::111203.969::111203.972::111203.988::111203.997::111203.997::111204::111204.001::111204.001::111204.001::111204.001::111204.001::111204.016::111204.052::111204.063::111204.07::111204.081::111204.093::111204.097::111204.097::111204.099::111204.11::111204.128::111204.164::88312628::88314767::88316290::88317284::88317694::88317694::88317694::88317694"/>
+ <val o="17d720" v="88317694::88317694::88317694::88317694::88317698::88317700::88317713::88317713::88317713::88317713::88317778::88317778::88317778::88317778::88317778::::88320511::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88321420::88323042::88323042::88323053::88323105::::88323137::88323137::88323137::88323137::88323148::88323775::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785"/>
+ <val o="1a9640" v="88323785::88323785::88323785::88323785::88323790::88323790::88323790::88323790::88323790::88323790"/>
+ <val o="1c7460" v="88342130::88342209::88342529::88344458::88344485::88344485::88345905::88348379::88350494::88350813::88350813::88351056::88351056::88351056::88351056::88351287::88352428::88353598::88353598::88353601::88353859::88353862::88353862::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353965::88353965::88353965::88354018::88354018::88354018::88354018::88354018::88354021::88354021::88354021"/>
+ <val o="1f1760" v="88354166::88354552::88355130::88357154::88359226::88359828::88359828::88360068::88360126::88360126::88360126::88360194::88360205::88360205::88360205::88360223::88360406::88361385::88362297::88363511::88365757::88367821::88369273::88369929::88371538::88373322::88373899::88374629::88374631::88374655::88374657::88374822::88375466::88375471::88375471::88375471::88375599::88375599::88375599::88376102::88377432::88378306::88378319::88378467::88378917::88378917::88378918::88379482"/>
+ <val o="21ba60" v="88380777::88382275::88382661::88382777::88383250::88383592::88383592::88383711::88385203::88385257::88385257::88388459::88390394::88390850::88391561::88393834::88397579::88397819::88397819::88399218::88401792::88405386::88408100::88408122::88408365::88408505::88408505::88410246::88411660::88412849::88413333::88414521::88416696::88417583::88417683::88417854::88417854::88417883::88418027::88419159::88420108::88421071::88421828::88423559::88426894::88429975::88432828::88432828"/>
+ <val o="246b70" v="88432828::88432828::88434951::88439548::88440916::88441030::88441030::88441030::88441030::88441030::88441116::88441116::88441116::88441116::88441218::88441739::88442363::88443542::88445344::88448624::88451464::88451464::88451473::88451652::88451840::88452323::88453332::88455889::88458507::88460595::88460772::88462065::88462264::88462608::88462622::88462622::88462622::88462622::88462622::88462622::88462826::88463538::88464667::88466310::88468309::88471393::88474308::88477274"/>
+ <val o="270e70" v="88480378::88481157::88481766::88481766::88481766::88481766::88483340::88485626::88486118"/>
+ </par>
+ <par memind="33401" h="3dc1a7e0">
+ <val o="0" v="9437795::9441972::9446144::9450217::9454261::9458184::9462346::9467434::9473186::9480126::9487404::9494779::9501916::9508615::9510621::9510628::9510635::9510642::9510649::9510656::9510663::9510671::9510678::9510687::9510695::9510703::9510712::9510720::9510728::9510736::9510743::9510751::9510760::9510768::9510776::9510784::9510792::9510800::9510809::9510817::9510826::9510833::9510840::9510847::9510855::9510863::9510871::9510879"/>
+ <val o="2a300" v="9510888::9510896::9510904::9510912::9510920::9510928::9510935::9510944::9510952::9510960::9510968::9510976::9510984::9510993::9511001::9511009::9511016::9511023::9511030::9511038::9511045::9511053::9511061::9511069::9511078::9511086::9511095::9511103::9511112::9511121::9511129::9511137::9511144::::9511158::9511165::9511171::9511178::9511184::9511190::9511197::9511203::9511209::9511216::9511223::9511231::9511239::9511247::9511255"/>
+ <val o="55410" v="9511264::9511272::9511280::9511289::9511297::9511305::9511313::9511320::9511327::9511333::9511340::9511347::9511354::9511361::9511368::9511375::9511382::9511389::9511397::9511404::9511412::9511419::9511427::9511435::9511443::9511451::9511460::9511468::9511476::9511484::9511492::9511500::9511506::9511513::9511519::9511526::9511533::9511539::9511546::9511553::9511559::9511565::9511572::9511580::9511587::9511595::9511603::9511611"/>
+ <val o="7f710" v="9511619::9511628::9511637::9511646::9511654::9511662::9511670::9511677::9511684::9511691::9511698::9511705::9511713::9511720::9511727::9511734::9511740::9511747::9511754::9511761::9511769::9511777::9511785::9511794::9511803::9511811::9511820::9511828::9511836::9511844::9511852::9511859::9511866::9511873::9511880::9511888::9511895::9511902::9511909::9514390::9519709::9522089::9522234::9522234::9522234::9522235::9522235::9522235"/>
+ <val o="a9a10" v="9522237::9522240::9522245::9522245::9522245::9522245::9522305::9522417::9522472::::9522564::9522698::9522957::9523630::9524451::9525296::9526830::9528579::9530279::9532182::9533799::9534552::9535404::9536317::9536364::9536364::9536364::9536364::9536364::9536364::9536365::9536365::9536366::9536378::9536405::9536445::9536452::9536454::9536460::9536501::9536855::9537087::9537318::9537474::9537525::9537548::9537581::9537677::9537678"/>
+ <val o="d4b20" v="9537678::9537678::9537678::9537678::9537736::9538143::9538893::9540546::9542875::9545324::9547869::9550788::9553582::9556453::9559237::9562025::9565951::9569947::9573692::9577040::9580032::9582462::9584347::9585562::9586226::9586928::9587579::9588077::9588974::9591192::9593773::9597560::9601808::9606160::9610756::9615226::9619694::9624409::9629124::9633493::9637849::9641922::9645776::9649316::9652378::9655502::9658479::9661021"/>
+ <val o="fee20" v="9663237::9665228::9667187::9668925::9670776::9673297::9676502::9680673::9683191::9687690::9692279::9696481::9700679::9704855::9709161::9713542::9717867::9722167::9726451::9730363::9733859::9736754::9739475::9741440::9743260::9745064::9746883::9748517::9750210::9752619::9755730::9759949::9764686::9769374::9774465::9778741::9783023::9787135::89775.123::89779.04::89783.036::89786.633::89790.091::89793.369::89796.324::89798.585::89800.635::89802.621"/>
+ <val o="129120" v="89804.381::89806.063::89807.752::89809.284::89810.86::89813.012::89815.607::89818.79::89822.154::89824.714::89827.425::89830.508::89832.673::89832.71::89832.728::89832.745::89832.767::89832.785::89832.798::89832.809::89832.817::89832.82::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.826::89832.831::89832.834::89832.838::89832.84::89832.84::89832.84::89832.84::89832.843::89832.848::89832.851::89832.854::89832.858::89832.861::89832.864::89832.864::89832.864"/>
+ <val o="153420" v="89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.868::89832.877::89832.887::89832.899::89832.903::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.916::89832.97::89833.09::89833.204::89833.309::89833.397::89833.492::89833.59::89833.683::89833.788::9794482::9801201::9808217::9815372::9821930::9828022::9833861::9839493"/>
+ <val o="17d720" v="9844996::9850441::9855681::9860795::9866311::9872873::9880027::9891193::9904398::9917454::9929974::9941796::9953698::9965698::9977794::::9993834::10001701::10009621::10016803::10023124::10029123::10034151::10038513::10042789::10046996::10051178::10055443::10060336::10065665::10071780::10078299::10084446::::10097123::10103293::10109641::10116023::10122562::10126785::10129414::10132288::10135645::10138489::10140416::10142238::10143368::10144487::10145494::10146532"/>
+ <val o="1a9640" v="10147341::10147793::10148486::10150039::10152051::10154643::10157406::10160170::10162955::10165058"/>
+ <val o="1c7460" v="10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10210882::10214444::10218093::10221623::10225223::10228858::10233641::10239906::10246598::10253420::10260295::10267010::10273305::10279245::10284682::10289594::10294461::10297150::10299060::10300879::10302781::10305041::10307600::10310256::10313017::10315732::10318357::10320952"/>
+ <val o="1f1760" v="10323453::10325881::10328301::10330906::10333991::10337378::10340913::10344270::10347474::10350831::10353880::10356443::10358890::10361257::10363427::10365542::10367850::10370602::10373700::10377548::10382335::10387959::10393679::10399028::10404469::10410328::10416554::10422964::10429464::10435510::10440887::10446070::10450544::10454833::10458732::10462419::10465714::10468842::10471882::10474772::10477901::10481897::10486997::10492973::10499207::10505324::10511555::10517602"/>
+ <val o="21ba60" v="10523544::10529362::10535760::10541894::10547762::10553407::10558890::10564118::10568426::10572294::10575771::10577767::10579647::10581720::10583716::10585444::10587354::10590968::10595126::10599731::10604460::10609000::10613753::10618516::10623241::10628428::10633999::10639539::10645125::10650405::10655643::10660471::10664738::10668862::10672675::10675947::10679195::10682322::10685340::10688204::10691460::10695443::10700037::10705702::10711873::10718309::10724907::10731364"/>
+ <val o="246b70" v="10744298::10750573::10756336::10761594::10767184::10772901::10778679::10784193::10789173::10793391::10796895::10800538::10804151::10807732::10811214::10814952::10819236::10823772::10829212::10834920::10841418::10850701::10858289::10864315::10870586::10876526::10882496::10888291::10893713::10899090::10904444::10909119::10913700::10917699::10921310::10924826::10928478::10932121::10935715::10939412::10943265::10947154::10951299::10955647::10959802::10963755::10967526::10971201"/>
+ <val o="270e70" v="10974801::10979086::10983922::10989053::10994083::10999069::11003529::11007379::11010738"/>
+ </par>
+ <par memind="33001" h="3dc1a7e0">
+ <val o="0" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576"/>
+ <val o="2a300" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576"/>
+ <val o="55410" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576"/>
+ <val o="7f710" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612587::38613097::38613585::38614490::38614906::38615380::38616053"/>
+ <val o="a9a10" v="38617123::38617258::38617296::38617414::38617926::38618741::38618942::38619021::38619066::::38619147::38619219::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619786::38620257::38620702::38621058::38621587::38622078::38622494::38623284::38623536::38623655::38623776::38623831::38624035::38624232::38624369::38624735::38624735::38624735::38624735::38624737::38624755::38624791::38624863::38624879::38625460"/>
+ <val o="d4b20" v="38626110::38626807::38627639::38628781::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732"/>
+ <val o="fee20" v="38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398"/>
+ <val o="129120" v="229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.399::229734.417::229734.431::229734.448::229734.465::229734.485::229734.505::229734.514::229734.517::229734.517::229734.517::229734.517::229734.517::229734.518::229734.521::229734.523::229734.528::229734.536::229734.536::229734.536::229734.536::229734.536::229734.536::229734.536::229734.537::229734.554"/>
+ </par>
+ </device>
+ </select>
+ </data>
+</electroxml>
diff --git a/result/att4.rdr b/result/att4.rdr
new file mode 100644
index 0000000..746643e
--- /dev/null
+++ b/result/att4.rdr
@@ -0,0 +1,27785 @@
+0 8 #comment 0 1 edited with XML Spy v4.4 U (http://www.xmlspy.com) by Slava (GIVC)
+0 1 electroxml 0 0
+1 14 #text 0 1
+
+1 1 data 0 0
+2 14 #text 0 1
+
+2 1 select 0 0
+3 14 #text 0 1
+
+3 1 device 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+4 1 par 0 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+5 1 val 1 0
+5 14 #text 0 1
+
+4 15 par 0 0
+4 14 #text 0 1
+
+3 15 device 0 0
+3 14 #text 0 1
+
+2 15 select 0 0
+2 14 #text 0 1
+
+1 15 data 0 0
+1 14 #text 0 1
+
+0 15 electroxml 0 0
diff --git a/result/att4.sax b/result/att4.sax
new file mode 100644
index 0000000..2e88f06
--- /dev/null
+++ b/result/att4.sax
@@ -0,0 +1,36976 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.comment( edited with XML Spy v4.4 U (http://www.xmlspy.com) by Slava (GIVC) )
+SAX.startElement(electroxml, modified='20021216T072726')
+SAX.characters(
+ , 2)
+SAX.startElement(data, from='20021031T22', to='20021130T22')
+SAX.characters(
+ , 3)
+SAX.startElement(select)
+SAX.characters(
+ , 4)
+SAX.startElement(device, serialnumb='E00003562')
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='113400', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='55')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='16936600', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='196.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='199.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='200.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='201.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='199.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='197.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='193.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='197.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='195.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='192.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='195.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='195.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='195.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='197.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='222.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='220.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='222.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='221.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='222.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='222.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='220.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='220.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='220')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='221.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='220.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='221.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='220.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='220.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='219.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='219.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='220.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='220.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='220.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='220.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='220.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='220.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='220.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='220.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='220.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='222')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='221.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='220.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='220.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='218.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='220')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='218.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='219.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='220.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='219.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='220.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='220.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='220.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='219.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='220.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='220.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='221.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='220.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='217.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='218.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='218.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='218.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='219.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='218.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='220.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='222.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='220.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='218.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='219.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='219.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='219.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='219.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='220.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='220.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='221.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='222.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='224.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='223.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='222.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='222.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='220.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='220.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='220.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='220.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='219.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='219.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='218.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='220.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='221.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='222.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='223.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='223.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='222.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='221')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='219.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='219.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='220.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='220.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='217.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='218.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='219.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='219.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='223.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='222')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='224.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='220.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='219.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='219.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='218.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='219.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='219.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='221')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='220.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='225.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='225')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='222.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='223.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='224.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='223.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='195.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='190')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='122.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='354.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='333.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='323.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='278.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='286.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='292.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='21.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='273.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='272.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='285.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='28.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='68.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='147.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='95.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='89.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='88.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='92.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='149.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='148.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='127.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='198.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='187.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='182.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='195.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='203.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='124.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='159.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='230.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='79.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='51.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='22.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='323.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='341.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='46.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='71.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='71.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='63.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='76.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='58.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='92')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='79.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='63.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='51.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='81.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='205.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='96.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='95.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='96.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='92.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='91.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='86.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='270')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='270.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='296.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='306.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='331.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='13.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='46.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='262.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='166.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='143.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='127.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='132.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='128.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='155.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='170.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='176.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='176.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='168.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='172.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='185.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='196.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='178.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='193.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='176.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='196.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='202.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='99.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='130.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='132.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='121.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='100.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='192.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='153.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='170.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='155.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='167.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='165.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='184.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='159.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='163.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='163.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='160.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='165')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='156.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='163.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='162.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='154.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='157.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='197.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='203.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='212.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='185.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='187.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='162')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='149.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='136.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='145.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='164.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='158.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='163')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='161.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='168.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='168.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='165.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='168.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='163.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='147.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='163')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='166.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='177.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='179.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='161')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='174.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='203.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='158.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='172.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='172.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='168.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='138')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='135.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='157.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='160.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='175.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='184.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='188.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='170')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='173.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='172.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='164.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='166.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='151.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='158.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='170.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='185.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='160.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='188.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='207.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='214.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='213.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='218.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='210.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='178.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='162.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='156.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='153.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='143.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='160.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='153.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='163.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='168.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='169.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='139.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='142.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='122.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='125.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='110.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='110.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='190.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='99.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='209.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='76.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='61.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='44.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='44.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='60.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='64.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='67.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='341.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='115.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='117.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='252.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='261.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='313.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='311.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='292')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='57.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='151.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='92.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='93.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='100.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='97.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='184')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='289.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='274.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='39.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='6.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='355.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='19.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='44.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='61.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='55.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='60.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='71.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='66.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='61.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='38.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='17.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='35.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='44.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='71.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='166.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='125')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='176')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='195.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='99.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='90')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='273.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='344.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='307.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='271.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='278.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='291.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='52.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='76.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='87.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='170.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='174.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='175.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='186.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='183.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='181.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='173.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='170.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='165.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='163.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='161.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='165.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='170.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='173.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='187.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='201.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='205.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='204.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='204.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='208.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='204.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='193.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='186.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='192.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='194.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='184.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='184.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='185.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='194.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='192.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='192.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='190.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='185.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='170.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='187.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='191.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='191.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='197.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='195.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='189.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='201.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='202.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='204.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='196.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='182.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='162.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='187.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='187.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='179.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='181.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='188.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='186.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='183.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='182.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='176.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='175.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='178.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='223.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='228.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='229.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='216.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='226.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='249.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='245.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='250.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='251.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='252.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='259.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='254.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='218.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='228.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='227.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='214.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='218.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='217')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='231.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='230.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='52')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='340.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='18.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='357.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='344.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='338.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='28.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='21.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='10.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='343.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='342.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='358.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='353.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='353.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='1.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='6.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='10.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='350.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='350.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='357.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='181.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='184.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='192.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='193.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='194.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='190.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='195')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='195.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='195.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='198.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='198.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='199.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='200.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='202.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='200.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='203.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='204.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='188.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='193.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='184.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='190.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='188.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='192.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='185.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='186.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='182.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='187.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='186.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='168.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='164.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='154.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='134.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='154.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='182.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='188.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='176')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='206.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='216.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='211.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='210.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='211.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='192.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='185.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='176.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='171.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='129.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='173.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='157.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='161.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='163.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='176.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='166.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='161.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='159.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='177.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='183.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='185.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='182.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='189.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='173.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='179.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='193.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='202.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='197.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='186.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='188.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='178.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='160.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='168.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='184')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='191.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='177.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='182.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='185.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='176.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='170.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='169.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='159.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='190.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='173.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='175.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='187.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='188.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='160')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='175.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='192.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='200.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='116.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='166.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='162.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='130.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='122')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='193.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='183.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='157.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='142.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='145.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='182.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='182.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='173.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='188.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='179.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='169.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='164.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='170.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='178.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='158')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='161.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='175.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='169.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='185.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='191.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='176.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='167.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='154.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='166.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='146.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='155.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='157.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='189.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='187.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='186.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='179.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='139.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='161.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='172')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='189.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='187.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='188.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='186.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='198.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='193.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='195.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='198.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='180.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='180')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='161.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='165.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='165.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='160.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='147.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='196.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='195.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='186.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='178.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='177.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='172')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='156.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='154.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='157')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='179.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='166')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='172.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='196.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='179.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='195.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='202.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='209.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='204.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='199.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='186.3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='175.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='170.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='159.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='156.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='137.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='146')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='139.6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='143.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='137.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='177.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='186.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='184.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='188.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='191.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='146.7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='161.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='188.7')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='10695000', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='50.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='49.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='50')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='8612', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='25.07')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='24.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='23.438')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='23.245')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='22.784')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='22.746')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='26.297')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='28.878')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='34.451')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='40.017')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='40.572')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='38.682')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='35.869')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='34.12')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='0.038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='0.038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='0.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='0.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='0.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='0.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='0.038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='0.039')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='0.038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='0.038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='0.04')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='0.039')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='0.039')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='0.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='0.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='0.04')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='0.036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='36.117')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='17.613')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='8.357')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='5.957')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='7.134')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='8.646')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='6.429')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='10.235')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='14.027')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='3.549')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='3.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='6.093')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='5.204')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='7.526')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='11.39')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='0.954')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='5.773')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='21.019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='22.636')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='19.316')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='1.265')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='3.13')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='6.091')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='7.273')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='9.373')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='7.711')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='8.183')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='9.843')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='5.251')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='2.646')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='7.175')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='19.697')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='4.703')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='5.017')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='5.028')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='4.406')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='5.164')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='10.951')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='5.096')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='10.032')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='4.084')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='5.223')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='6.622')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='2.571')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='3.766')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='2.925')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='4.239')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='2.442')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='10.653')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='15.045')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='10.497')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='14.243')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='11.318')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='7.26')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='3.278')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='12.768')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='8.863')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='8.423')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='7.503')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='7.803')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='10.91')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='5.743')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='2.082')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='7.751')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='16.785')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='18.467')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='18.801')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='16.008')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='13.629')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='14.479')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='14.927')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='14.349')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='15.502')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='20.07')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='20.011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='16.357')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='17.03')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='11.901')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='10.138')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='8.731')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='14.357')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='4.86')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='4.149')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='6.019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='14.635')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='9.989')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='11.96')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='15.422')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='22.742')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='22.428')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='24.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='23.076')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='23.241')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='24.018')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='25.989')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='24.748')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='25.323')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='23.122')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='19.403')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='19.28')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='16.12')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='16.228')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='16.654')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='14.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='14.054')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='9.557')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='9.072')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='8.333')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='9.771')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='14.337')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='16.049')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='19.911')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='23.238')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='23.213')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='25.179')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='21.591')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='19.665')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='21.079')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='21.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='22.363')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='25.172')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='23.223')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='20.912')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='22.017')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='18.729')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='16.761')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='13.145')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='13.912')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='8.712')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='8.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='8.195')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='8.301')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='10.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='14.213')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='15.617')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='19.095')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='23.986')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='20.919')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='26.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='21.493')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='21.006')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='22.144')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='19.124')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='0.019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='0.021')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='0.021')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='0.018')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='0.015')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='0.016')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='0.011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='0.01')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='0.011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='0.01')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='0.01')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='0.01')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='0.009')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='0.006')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='0.009')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='0.011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='0.017')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='0.012')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='0.019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='0.014')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='0.015')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='0.015')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0.279')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0.096')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0.141')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0.207')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0.218')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0.213')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0.214')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0.075')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0.05')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0.034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0.449')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0.217')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0.167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0.158')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0.232')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0.339')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0.212')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0.044')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0.025')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0.023')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0.145')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0.08')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0.05')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0.239')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0.206')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0.163')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0.027')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0.077')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0.153')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0.181')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0.149')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0.157')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0.166')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0.216')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0.306')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0.168')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0.145')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0.252')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0.213')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0.19')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0.114')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0.115')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0.302')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0.03')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0.048')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0.069')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0.029')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0.105')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0.096')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0.142')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0.101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0.092')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0.071')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0.17')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0.212')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0.089')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0.607')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0.675')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0.723')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0.477')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0.477')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0.491')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0.496')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0.579')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0.62')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='35.716')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='33.973')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='35.295')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='32.429')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='28.433')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='29.24')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='30.943')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='28.05')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='27.792')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='28.102')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='25.534')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='25.021')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='30.046')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='32.772')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='38.186')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='64.34')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='63.582')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='60.895')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='57.167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='59.436')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='56.655')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='60.597')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='56.836')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='37.581')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='40.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='38.214')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='32.175')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='30.662')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='26.933')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='21.269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='21.646')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='21.244')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='20.855')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='19.588')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='20.809')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='25.64')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='29.166')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='31.236')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='28.424')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='32.717')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='32.231')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='29.816')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='29.219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='29.861')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='29.093')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='29.004')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='10.445')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='18.158')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='23.713')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='25.84')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='13.692')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='15.619')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='22.235')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='20.533')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='14.806')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='17.786')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='18.205')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='14.86')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='11.317')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='6.403')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='13.389')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='18.094')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='16.688')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='16.251')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='17.902')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='16.864')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='16.076')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='4.33')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='4.33')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='21.221')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='20.86')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='22.903')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='22.672')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='34.711')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='33.792')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='32.717')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='33.04')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='34.047')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='36.536')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='36.673')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='36.752')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='37.932')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='37.857')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='37.029')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='32.844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='31.917')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='31.363')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='15.349')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='17.623')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='17.658')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='16.597')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='17.621')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='18.017')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='32.337')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='37.113')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='36.896')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='37.646')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='37.465')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='35.96')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='34.217')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='31.472')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='27.913')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='27.77')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='27.092')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='9.65')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='8.989')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='8.871')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='11.525')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='11.312')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='13.145')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='12.866')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='13.503')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='12.977')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='12.853')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='12.322')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='11.244')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='11.357')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='13.909')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='20.778')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='17.384')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='17.882')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='17.779')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='15.628')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='18.718')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='19.687')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='15.856')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='14.235')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='14.121')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='10.417')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='10.192')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='10.247')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='12.409')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='18.782')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='17.709')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='24.468')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='27.895')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='31.135')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='28.073')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='26.781')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='27.955')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='31.834')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='30.684')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='33.239')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='31.592')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='27.051')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='26.891')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='22.834')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='21.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='20.723')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='20.412')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='17.178')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='14.845')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='14.404')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='13.895')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='14.291')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='18.376')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='22.682')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='29.056')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='30.985')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='31.244')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='30.501')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='30.757')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='29.766')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='29.686')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='30.47')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='31.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='28.958')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='28.474')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='27.753')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='26.676')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='24.07')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='18.889')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='17.556')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='16.434')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='18.47')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='9.837')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='9.73')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='12.672')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='17.29')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='17.161')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='19.388')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='22.792')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='25.973')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='28.305')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='28.475')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='23.531')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='22.62')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='22.13')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='27.159')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='27.705')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='29.796')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='27.341')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='25.887')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='25.842')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='23.266')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='21.664')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='19.437')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='15.912')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='16.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='15.674')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='13.705')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='14.331')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='15.781')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='18.196')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='22.115')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='26.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='34.813')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='35.914')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='36.775')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='34.277')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='32.056')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='33.001')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='31.687')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='36.854')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='30.428')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='28.246')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='28.984')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='27.176')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='26.455')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='21.891')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='20.073')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='17.083')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='17.921')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='17.972')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='16.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='17.324')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='20.97')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='21.269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='25.041')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='31.27')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='33.712')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='82.744')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='46.746')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='22.903')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='31.343')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='30.438')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='28.883')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='30.794')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='31.011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='28.098')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='27.177')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='24.941')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='22.834')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='23.209')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='17.56')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='17.555')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='18.761')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='20.698')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='19.372')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='18.644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='18.792')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='18.951')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='18.907')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='23.409')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='23.511')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='26.941')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='24.008')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='23.147')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='23.935')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='24')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='22.888')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='26.246')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='25.909')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='25.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='24.725')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='23.755')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='18.839')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='15.362')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='8608', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='8604', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='21.043')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='20.051')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='19.818')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='19.554')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='18.951')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='18.853')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='22.398')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='24.492')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='29.206')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='35.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='35.07')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='33.585')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='30.77')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='29.141')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='0.07')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='0.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='0.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='0.068')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='0.056')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='0.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='0.056')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='0.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='0.055')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='0.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='0.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='0.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='0.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='0.056')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='0.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='0.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='0.056')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='0.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='0.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='0.066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='0.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='0.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='0.058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='0.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='0.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='0.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='0.063')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='0.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='30.22')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='16.054')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='10.22')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='3.839')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='3.301')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='4.19')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='2.002')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='4.911')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='7.897')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='2.934')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='1.487')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='2.196')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='1.679')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='5.984')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='10.661')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='3.653')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='7.252')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='19.708')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='21.128')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='18.358')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='3.456')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='4.916')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='7.337')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='7.205')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='9.191')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='8.027')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='7.688')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='8.667')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='7.734')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='5.148')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='5.081')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='18.433')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='4.676')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='3.97')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='2.247')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='2.519')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='4.784')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='10.406')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='5.863')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='9.668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='5.194')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='5.35')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='7.745')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='3.651')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='4.236')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='3.281')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='5.657')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='2.249')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='12.004')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='15.833')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='11.981')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='15.145')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='12.386')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='8.53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='1.474')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='7.441')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='4.262')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='3.805')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='3.752')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='5.538')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='9.524')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='1.988')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='4.159')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='9.621')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='17.704')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='19.171')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='19.252')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='14.961')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='12.816')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='13.113')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='13.435')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='13.283')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='13.989')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='18.098')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='17.742')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='15.229')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='15.263')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='11.968')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='9.893')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='7.997')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='13.888')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='6.336')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='5.634')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='7.369')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='14.276')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='9.674')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='12.81')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='14.985')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='21.531')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='21.038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='22.908')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='20.891')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='22.234')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='22.517')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='24.172')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='23.008')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='23.475')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='22.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='18.671')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='18.447')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='15.862')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='16.38')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='15.165')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='12.335')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='12.283')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='8.941')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='8.837')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='8.793')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='10.043')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='13.932')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='15.974')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='19.167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='22.237')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='21.533')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='23.309')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='20.333')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='18.556')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='20.163')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='19.978')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='21.155')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='23.964')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='21.874')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='19.591')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='20.234')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='17.32')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='16.556')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='13.217')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='12.271')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='8.967')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='8.319')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='8.357')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='8.49')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='10.458')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='13.998')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='15.461')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='18.331')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='22.284')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='19.151')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='23.464')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='20.211')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='19.83')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='20.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='18.042')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='0.018')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='0.02')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='0.02')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='0.017')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='0.015')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='0.014')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='0.011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='0.01')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='0.009')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='0.008')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='0.008')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='0.008')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='0.007')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='0.007')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='0.01')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='0.011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='0.016')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='0.013')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='0.019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='0.014')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='0.015')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='0.015')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0.269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0.124')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0.16')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0.227')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0.243')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0.236')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0.239')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0.074')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0.086')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0.031')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0.412')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0.199')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0.15')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0.14')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0.218')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0.309')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0.206')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0.032')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0.054')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0.025')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0.09')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0.03')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0.038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0.026')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0.086')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0.251')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0.225')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0.193')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0.103')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0.044')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0.023')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0.068')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0.157')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0.105')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0.097')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0.127')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0.189')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0.281')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0.162')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0.15')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0.246')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0.211')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0.188')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0.105')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0.092')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0.099')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0.29')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0.072')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0.101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0.045')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0.07')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0.029')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0.026')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0.075')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0.178')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0.221')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0.578')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0.633')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0.678')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0.456')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0.461')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0.475')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0.487')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0.565')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0.597')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='34.372')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='33.056')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='34.198')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='31.148')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='26.734')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='26.883')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='28.046')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='25.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='24.826')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='25.129')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='22.979')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='22.968')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='28.04')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='30.608')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='35.156')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='61.079')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='61.118')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='58.214')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='54.149')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='56.141')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='53.757')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='57.188')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='53.596')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='36.269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='36.626')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='35.102')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='29.855')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='28.307')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='25.364')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='19.996')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='19.748')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='19.345')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='18.873')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='18.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='20.032')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='25.137')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='27.508')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='29.449')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='27.372')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='30.562')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='29.963')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='28.336')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='28.102')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='28.864')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='28.278')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='28.399')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='11.016')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='14.155')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='19.132')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='20.28')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='11.28')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='12.25')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='16.561')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='15.15')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='9.953')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='12.732')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='12.958')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='9.685')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='6.805')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='4.559')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='10.632')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='14.64')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='14.182')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='13.717')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='15.071')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='13.236')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='12.746')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='3.999')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='2.186')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='16.585')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='14.378')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='16.041')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='15.799')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='29.25')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='27.621')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='25.453')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='24.369')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='25.348')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='28.687')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='28.373')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='28.801')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='30.045')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='30.644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='30.354')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='24.933')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='23.813')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='23.818')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='15.153')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='16.69')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='16.385')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='15.643')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='16.269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='16.689')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='27.897')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='31.449')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='31.232')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='32.001')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='31.999')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='30.669')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='29.185')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='27.199')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='23.798')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='23.566')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='23.035')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='8.573')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='7.913')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='7.851')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='9.845')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='10.177')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='11.732')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='11.554')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='12.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='11.725')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='11.465')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='10.851')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='10.928')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='10.984')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='13.626')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='19.399')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='16.326')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='15.848')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='15.785')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='14.319')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='15.77')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='16.295')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='13.382')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='11.752')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='11.694')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='9.24')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='8.969')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='9.42')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='11.299')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='18.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='15.989')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='23.363')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='26.071')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='29.283')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='25.856')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='25.235')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='26.405')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='30.076')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='28.433')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='30.271')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='28.557')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='24.542')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='23.962')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='21.242')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='19.633')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='18.009')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='17.798')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='15.304')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='13.453')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='13.055')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='12.872')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='13.544')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='17.25')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='21.046')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='25.832')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='27.791')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='28.054')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='27.63')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='28.457')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='27.725')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='27.922')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='28.25')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='27.539')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='26.251')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='25.947')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='24.671')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='24.383')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='22.742')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='17.742')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='16.117')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='14.548')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='18.418')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='10.147')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='10.648')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='13.062')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='17.082')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='15.723')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='17.627')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='21.083')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='24.293')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='26.823')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='27.04')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='22.091')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='21.514')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='20.922')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='25.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='25.959')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='27.644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='25.578')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='24.199')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='23.83')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='22.719')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='20.952')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='18.382')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='14.928')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='14.859')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='14.081')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='13.309')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='13.726')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='15.071')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='17.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='20.612')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='24.891')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='32.942')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='34.247')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='34.787')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='31.176')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='29.806')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='30.569')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='29.175')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='34.921')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='28.767')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='25.797')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='26.161')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='24.769')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='24.053')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='20.28')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='18.22')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='15.345')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='15.953')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='15.884')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='15.054')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='16.014')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='19.574')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='20.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='23.936')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='29.274')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='31.691')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='75.154')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='41.458')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='21.221')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='29.417')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='28.597')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='27.256')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='28.925')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='29.38')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='26.559')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='25.234')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='23.312')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='21.317')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='20.761')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='16.36')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='15.657')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='16.618')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='17.888')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='16.861')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='16.617')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='17.428')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='18.225')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='18.415')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='22.126')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='22.126')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='25.782')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='22.774')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='22.774')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='22.909')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='23.139')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='21.553')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='23.539')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='23.139')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='22.735')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='22.335')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='23.205')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='18.238')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='14.136')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='9812', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='114.081')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='117.19')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='118.964')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='120.564')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='118.747')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='116.529')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='109.384')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='121.356')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='119.014')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='116.226')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='120.175')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='120.949')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='124.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='124.043')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='117.761')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='118.092')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='118.354')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='118.633')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='118.494')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='121.243')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='122.278')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='119.689')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='121.165')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='125.688')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='127.517')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='119.508')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='121.27')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='121.262')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='120.595')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='118.725')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='126.913')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='125.984')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='124.971')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='121.722')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='122.233')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='122.836')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='124.125')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='125.105')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='125.266')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='125.381')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='123.688')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='119.437')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='119.167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='120.334')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='119.837')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='120.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='122.074')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='125.542')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='125.638')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='117.398')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='118.807')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='119.644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='119.674')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='117.549')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='113.229')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='125.153')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='124.691')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='123.556')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='123.231')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='123.404')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='123.932')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='123.328')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='122.641')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='121.544')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='118.209')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='118.675')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='118.325')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='121.893')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='120.711')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='119.854')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='120.165')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='122.996')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='126.557')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='124.061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='124.874')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='125.244')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='125.083')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='123.182')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='119.311')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='122.524')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='121.173')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='118.696')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='117.559')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='118.947')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='118.797')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='117.048')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='116.182')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='119.101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='119.152')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='116.814')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='118.943')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='120.844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='119.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='120.802')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='123.095')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='125.922')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='122.082')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='123.001')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='123.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='122.972')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='120.717')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='121.599')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='120.977')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='119.038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='115.798')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='119.913')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='120.284')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='119.451')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='118.325')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='117.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='117.263')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='120.147')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='117.534')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='118.902')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='120.099')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='121.434')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='121.986')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='120.683')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='122.861')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='119.35')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='120.845')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='122.119')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='122.506')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='121.462')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='118.909')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='116.372')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='121.311')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='119.412')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='118.281')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='118.148')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='117.811')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='121.694')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='120.755')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='118.651')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='118.08')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='118.282')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='113.911')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='116.941')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='119.508')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='119.071')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='121.146')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='121.336')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='122.095')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='121.785')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='124.065')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='125.455')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='126.011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='125.018')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='122.741')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='120.26')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='118.856')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='118.817')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='117.807')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='117.444')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='119.967')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='121.141')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='120.259')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='118.558')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='118.812')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='118.633')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='118.948')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='117.315')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='118.146')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='120.121')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='120.561')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='118.638')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='122.844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='125.153')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='123.463')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='122.793')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='123.093')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='122.535')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='120.189')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='123.097')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='119.336')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='118.5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='115.743')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='119.722')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='120.222')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='118.918')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='117.551')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='116.649')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='116.52')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='116.703')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='118.806')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='118.461')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='119.593')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='119.78')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='119.973')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='120.761')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='122.782')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='125.444')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='118.255')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='119.302')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='120.149')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='119.678')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='117.138')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='114.681')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='120.851')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='119.099')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='116.609')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='116.729')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='118.045')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='115.477')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='115.891')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='114.24')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='122.794')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='119.002')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='118.701')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='119.602')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='120.963')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='119.924')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='120.628')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='123.122')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='118.683')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='118.301')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='118.882')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='120.187')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='119.576')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='118.243')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='115.692')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='117.56')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='116.057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='117.411')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='117.486')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='116.745')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='118.265')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='118.202')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='118.004')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='117.255')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='122.71')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='118.736')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='116.734')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='118.339')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='118.66')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='119.703')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='121.536')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='123.419')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='126.186')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='119.31')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='120.58')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='120.857')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='119.582')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='117.426')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='124.349')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='122.435')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='120.692')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='117.233')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='116.862')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='116.728')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='118.212')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='117.857')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='117.176')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='117.271')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='116.796')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='117.361')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='119.769')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='121.05')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='120.921')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='122.497')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='120.677')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='122.67')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='123.778')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='116.655')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='118.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='118.372')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='117.527')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='113.518')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='123.496')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='120.611')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='118.704')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='115.651')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='117.487')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='117.186')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='121.114')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='117.611')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='117.892')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='117.718')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='117.584')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='117.38')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='119.222')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='121.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='120.221')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='118.379')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='118.238')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='123.037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='123.007')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='126.294')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='123.682')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='123.591')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='122.918')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='121.387')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='117.586')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='117.716')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='119.191')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='117.355')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='117.862')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='117.531')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='119.886')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='119.426')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='118.72')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='119.004')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='118.725')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='116.196')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='118.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='119.001')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='120.963')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='121.34')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='119.151')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='120.797')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='123.519')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='122.366')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='123.381')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='123.296')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='123.047')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='120.874')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='118.017')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='118.388')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='117.753')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='119.761')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='121.547')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='122.028')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='122.195')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='121.783')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='120.581')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='121.685')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='120.972')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='116.836')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='117.633')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='118.83')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='120.746')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='122.541')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='120.249')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='122.708')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='124.538')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='125.289')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='125.325')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='125.49')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='124.672')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='122.813')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='121.573')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='120.719')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='119.706')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='116.935')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='117.255')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='118.365')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='119.829')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='119.607')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0.101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0.102')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0.115')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0.113')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0.113')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='118.351')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='119.763')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='120.872')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='121.443')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='124.587')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='127.119')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='128.887')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='127.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='127.1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='127.35')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='126.552')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='124.71')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='124.077')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='125.099')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='125.025')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='123.954')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='123.641')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='124.308')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='126.201')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='125.426')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='125.045')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='124.868')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='123.854')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='117.177')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='120.985')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='121.689')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='121.514')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='123.76')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='125.848')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='123.162')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='124.87')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='126.457')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='126.565')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='125.821')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='123.654')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='120.985')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='121.019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='120.771')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='120.139')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='120.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='122.459')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='121.603')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='120.856')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='120.882')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='120.049')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='119.903')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='116.012')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='119.283')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='120.303')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='121.728')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='121.516')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='122.849')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='126.093')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='126.725')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='124.883')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='125.931')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='126.096')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='124.906')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='123.654')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='121.493')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='123.897')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='123.756')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='122.369')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='121.934')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='122.306')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='124.041')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='123.698')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='120.029')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='120.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='119.314')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='120.479')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='121.91')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='122.485')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='118.564')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='119.367')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='120.808')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='123.105')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='125.021')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='123.274')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='123.92')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='123.876')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='122.883')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='122.072')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='121.544')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='123.27')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='123.513')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='122.604')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='121.281')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='121.716')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='122.714')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='123.129')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='123.431')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='122.987')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='119.262')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='118.087')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='116.532')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='118.618')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='119.706')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='120.899')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='120.718')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='121.624')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='117.925')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='120.928')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='122.34')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='122.972')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='123.05')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='122.44')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='120.735')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='120.711')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='123.688')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='122.853')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='122.754')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='122.975')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='123.49')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='123.278')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='121.776')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='121.458')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='120.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='116.832')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='119.948')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='120.022')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='120.884')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='119.618')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='122.811')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='123.997')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='126.654')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='125.574')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='126.495')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='126.021')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='125.521')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='123.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='121.073')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='117.997')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='119.376')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='119.302')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='120.24')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='120.497')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='123.276')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='121.287')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='120.492')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='119.643')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='117.626')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='121.9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='120.861')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='120.493')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='121.526')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='119.46')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='120.284')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='121.713')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='124.203')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='126.587')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='124.627')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='124.526')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='123.821')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='122.357')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='118.642')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='116.651')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='122.439')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='120.232')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='119.322')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='120.236')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='120.346')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='119.148')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='118.907')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='117.874')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='122.584')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='120.252')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='120.469')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='121.303')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='122.183')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='118.747')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='120.81')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='123.937')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='126.687')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='119.553')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='119.757')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='119.753')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='117.557')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='116.262')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='122.469')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='119.765')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='119.78')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='119.006')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='118.696')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='119.018')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='120.765')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='120.41')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='119.608')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='119.268')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='118.221')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='119.234')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='118.199')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='119.524')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='120.76')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='118.446')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='119.86')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='121.458')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='120.937')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='122.353')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='123.085')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='123.145')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='122.277')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='121.153')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='119.31')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='120.616')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='118.482')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='117.789')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='118.178')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='118.65')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='119.893')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='119.172')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='118.88')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='118.03')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='115.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='118.091')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='119.601')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='120.844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='120.094')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='123.851')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='123.499')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='124.806')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='124.27')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='124.985')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='125.02')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='123.483')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='122.436')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='120.041')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='119.496')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='119.362')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='117.767')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='118.616')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='117.274')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='118.975')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='119.79')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='119.331')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='119.194')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='118.637')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='120.535')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='119.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='120.403')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='121.054')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='119.413')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='120.38')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='123.203')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='121.143')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='122.976')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='123.697')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='124.476')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='123.592')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='123.177')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='121.853')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='121.298')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='120.593')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='118.763')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='118.278')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='118.596')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='119.984')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='119.523')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='119.574')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='119.013')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='119.722')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='120.875')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='120.668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='121.451')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='121.838')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='119.053')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='121.03')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='123.544')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='9808', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='9804', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='113.768')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='117.131')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='118.794')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='120.362')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='118.504')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='116.275')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='109.258')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='121.127')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='118.849')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='116.093')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='120.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='120.84')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='124.045')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='124.042')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='117.713')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='118.048')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='118.051')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='118.259')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='118.054')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='120.844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='121.925')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='119.353')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='120.867')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='125.48')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='127.434')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='119.069')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='120.904')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='120.974')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='120.25')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='118.291')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='126.573')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='125.637')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='124.668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='121.393')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='121.998')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='122.555')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='123.941')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='124.746')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='125.085')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='125.143')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='123.315')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='119.026')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='118.683')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='119.815')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='119.25')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='119.678')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='121.708')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='125.182')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='125.217')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='117.12')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='118.489')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='119.338')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='119.392')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='117.277')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='112.967')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='124.775')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='124.409')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='123.268')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='122.956')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='123.032')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='123.555')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='123.004')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='122.125')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='121.078')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='117.701')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='118.101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='117.771')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='121.393')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='120.16')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='119.387')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='119.887')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='122.64')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='125.954')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='123.51')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='124.328')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='124.639')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='124.448')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='122.434')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='118.623')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='122.169')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='120.979')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='118.358')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='117.271')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='118.68')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='118.562')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='116.842')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='115.913')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='118.894')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='118.59')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='116.293')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='118.299')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='120.233')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='118.495')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='120.406')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='122.644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='125.528')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='121.746')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='122.642')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='122.581')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='122.623')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='120.431')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='121.329')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='120.651')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='118.876')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='115.661')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='119.835')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='120.34')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='119.439')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='118.245')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='117.004')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='117.165')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='119.95')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='117.149')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='118.541')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='119.822')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='121.013')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='121.577')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='120.289')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='122.62')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='119.093')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='120.493')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='121.919')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='122.218')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='121.022')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='118.433')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='115.978')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='120.971')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='119.234')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='118.015')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='117.922')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='117.566')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='121.469')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='120.514')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='118.485')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='117.889')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='117.946')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='113.611')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='116.583')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='119.306')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='118.802')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='120.799')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='120.857')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='121.594')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='121.421')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='123.74')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='125.189')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='125.673')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='124.777')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='122.432')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='120.011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='118.622')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='118.559')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='117.524')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='117.257')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='119.909')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='120.921')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='119.96')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='118.481')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='118.605')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='118.282')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='118.663')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='117.009')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='117.766')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='119.722')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='120.299')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='118.366')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='122.529')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='124.833')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='123.06')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='122.396')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='122.792')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='122.232')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='119.79')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='122.86')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='119.012')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='118.321')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='115.456')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='119.374')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='120.344')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='119.254')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='117.83')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='117.001')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='116.782')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='116.803')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='118.75')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='118.358')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='119.493')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='119.698')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='119.908')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='120.675')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='122.754')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='125.385')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='118.214')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='119.329')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='120.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='119.689')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='117.12')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='114.729')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='120.871')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='119.177')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='116.699')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='116.768')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='118.075')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='115.571')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='115.867')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='114.309')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='122.787')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='118.904')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='118.531')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='119.438')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='120.908')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='119.844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='120.575')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='123.212')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='118.712')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='118.316')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='118.859')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='120.092')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='119.532')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='118.179')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='115.731')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='117.671')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='116.046')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='117.416')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='117.578')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='116.758')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='118.319')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='118.355')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='118.136')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='117.225')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='122.659')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='118.547')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='116.635')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='118.105')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='118.503')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='119.547')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='121.4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='123.396')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='126.068')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='119.33')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='120.524')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='120.742')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='119.548')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='117.358')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='124.267')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='122.388')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='120.774')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='117.345')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='116.698')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='116.798')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='118.219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='117.879')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='117.287')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='117.42')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='116.798')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='117.184')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='119.665')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='121.033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='120.839')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='122.456')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='120.534')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='122.766')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='123.735')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='116.654')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='118.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='118.441')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='117.463')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='113.549')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='123.596')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='120.709')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='118.94')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='116.002')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='117.741')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='117.49')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='121.433')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='117.735')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='118.165')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='117.839')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='117.685')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='117.518')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='119.385')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='121.202')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='120.254')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='118.336')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='118.267')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='123.088')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='123.183')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='126.377')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='123.772')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='123.634')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='123.008')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='121.382')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='117.696')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='117.901')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='119.404')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='117.646')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='118.147')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='117.802')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='120.151')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='119.733')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='119.096')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='119.291')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='118.973')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='116.336')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='118.171')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='119.082')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='120.953')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='121.41')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='119.088')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='120.941')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='123.699')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='122.48')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='123.378')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='123.312')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='123.217')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='120.961')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='118.076')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='118.573')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='117.978')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='120.019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='121.662')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='122.268')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='122.317')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='121.934')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='120.776')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='121.889')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='121.064')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='116.824')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='117.556')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='118.784')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='120.77')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='122.565')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='120.263')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='122.729')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='124.561')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='125.237')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='125.344')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='125.492')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='124.67')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='122.819')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='121.713')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='120.883')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='119.85')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='117.176')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='117.447')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='118.679')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='120.016')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='119.959')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0.101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0.102')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0.115')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0.104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0.109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0.113')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0.107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0.112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0.111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0.11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='117.84')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='119.199')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='120.226')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='120.924')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='124.038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='126.747')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='128.364')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='126.55')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='126.522')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='126.893')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='126.114')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='124.219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='123.691')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='124.723')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='124.667')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='123.666')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='123.337')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='124.042')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='125.92')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='125.144')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='124.769')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='124.549')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='123.483')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='116.63')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='120.461')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='121.228')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='121.154')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='123.409')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='125.403')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='122.716')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='124.385')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='126.046')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='126.166')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='125.26')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='123.29')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='120.499')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='120.705')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='120.492')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='119.996')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='120.265')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='122.232')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='121.49')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='120.704')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='120.614')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='119.839')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='119.685')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='115.593')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='118.86')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='119.97')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='121.369')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='121.096')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='122.451')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='125.765')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='126.302')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='124.495')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='125.659')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='125.773')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='124.464')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='123.167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='121.137')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='123.677')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='123.569')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='122.254')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='121.794')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='122.088')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='123.87')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='123.556')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='119.682')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='119.676')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='118.821')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='119.836')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='121.192')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='121.685')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='117.874')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='118.762')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='120.263')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='122.468')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='124.536')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='122.598')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='123.2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='123.218')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='122.202')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='121.424')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='120.888')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='122.743')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='123.078')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='122.237')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='120.858')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='121.231')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='122.185')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='122.648')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='122.992')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='122.482')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='118.707')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='117.367')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='115.714')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='117.74')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='119.048')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='120.179')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='119.949')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='120.906')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='117.251')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='120.118')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='121.521')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='122.188')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='122.212')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='121.531')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='119.981')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='119.977')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='122.939')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='122.289')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='122.05')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='122.271')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='122.856')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='122.611')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='121.148')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='120.864')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='119.609')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='116.101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='119.165')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='119.287')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='120.208')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='118.775')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='122.222')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='123.288')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='126.026')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='124.828')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='125.769')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='125.218')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='124.795')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='122.393')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='120.523')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='117.319')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='118.772')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='118.808')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='119.686')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='119.99')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='122.708')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='120.762')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='119.92')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='119.129')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='117.091')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='121.219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='120.28')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='119.69')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='120.677')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='118.756')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='119.608')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='121.059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='123.573')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='125.976')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='123.926')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='123.888')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='123.08')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='121.69')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='117.916')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='116.014')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='121.935')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='119.675')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='118.8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='119.649')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='119.715')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='118.622')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='118.459')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='117.339')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='122.095')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='119.556')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='119.761')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='120.53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='121.428')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='118.003')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='120.228')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='123.33')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='125.861')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='118.788')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='119.106')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='119.116')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='116.908')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='115.642')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='122.013')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='119.234')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='119.31')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='118.566')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='118.243')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='118.579')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='120.288')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='119.996')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='119.249')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='118.866')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='117.741')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='118.543')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='117.538')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='118.709')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='119.94')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='117.668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='119.159')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='120.771')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='120.234')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='121.624')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='122.272')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='122.422')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='121.687')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='120.361')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='118.751')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='120.028')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='117.974')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='117.305')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='117.71')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='118.193')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='119.542')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='118.741')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='118.295')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='117.534')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='114.472')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='117.357')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='118.851')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='120.137')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='119.349')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='123.226')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='122.921')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='124.273')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='123.515')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='124.182')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='124.27')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='122.827')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='121.801')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='119.514')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='118.922')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='118.86')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='117.264')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='118.022')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='116.819')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='118.384')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='119.276')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='118.81')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='118.676')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='118.108')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='119.625')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='119.042')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='119.638')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='120.355')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='118.728')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='119.777')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='122.621')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='120.494')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='122.335')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='123.001')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='123.827')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='122.939')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='122.398')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='121.212')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='120.844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='120.054')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='118.297')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='117.795')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='117.996')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='119.287')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='118.815')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='118.955')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='118.449')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='119.157')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='120.124')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='119.858')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='120.668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='121.067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='118.265')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='120.308')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='122.851')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='440600', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='-1275')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='-1482')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='-1562')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='-1643')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='-1446')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='-1276')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='-1049')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='-1694')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='-1760')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='-1662')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='-2067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='-1992')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='-1928')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='-2018')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='-1845')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='-631')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='1564')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='-66')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='-393')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='-691')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='-883')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='-1575')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='-2209')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='109')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='-420')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='-859')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='-628')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='516')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='1839')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='293')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='1185')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='3946')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='4230')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='3689')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='248')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='430')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='1026')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='-526')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='-258')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='-65')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='-489')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='-842')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='1082')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='310')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='-1112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='3632')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='513')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='214')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='-292')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='-127')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='495')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='1815')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='818')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='1539')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='680')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='712')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='1280')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='397')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='493')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='250')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='785')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='-201')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='2156')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='2937')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='2107')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='2824')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='2269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='1441')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='-297')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='-2280')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='-1189')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='-964')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='-442')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='261')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='1309')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='-849')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='178')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='1111')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='2750')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='2769')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='2973')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='1327')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='454')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='199')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='556')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='416')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='-370')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='-1154')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='93')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='-843')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='171')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='-646')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='-723')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='2665')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='837')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='698')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='1097')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='2649')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='-495')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='1165')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='542')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='1871')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='979')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='1210')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='-356')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='1654')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='1368')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='1462')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='1612')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='1309')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='1886')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='1136')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='1169')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='1403')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='1316')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='-1041')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='-1190')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='-1609')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='-199')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='-252')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='585')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='1069')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='1973')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='1831')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='1127')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='1767')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='1343')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='1564')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='849')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='805')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='1093')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='880')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='1254')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='2664')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='1368')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='1009')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='208')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='22')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='1142')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='286')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='-1168')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='712')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='227')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='236')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='372')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='1441')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='2015')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='1211')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='1284')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='369')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='-310')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='-802')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='781')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='491')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='1023')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='516')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='2274')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='1775')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='1153')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='769')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='-846')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='-2362')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='-2961')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='-2519')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='-2447')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='-2865')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='-2276')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='-1250')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='-716')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='-1489')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='-2004')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='-1055')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='-978')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='-1269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='-3170')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='-2668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='-2540')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='-2377')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='-1126')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='1219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='-1061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='-1519')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='-1284')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='-1902')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='-1623')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='-778')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='-1730')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='-1745')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='-1872')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='-1207')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='-211')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='1619')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='-764')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='-827')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='40')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='-199')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='-967')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='-680')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='-385')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='-241')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='371')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='471')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='61')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='-2440')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='-3447')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='-3862')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='-1657')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='-2273')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='-4132')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='-3735')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='-2655')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='-3286')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='-3377')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='-2707')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='-1980')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='-797')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='-2046')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='-2793')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='-1939')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='-2092')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='-2211')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='-2679')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='-2530')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='453')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='-157')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='1143')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='-146')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='-1002')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='-1402')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='2949')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='2229')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='1022')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='-1628')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='-1835')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='-211')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='-767')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='-792')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='173')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='776')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='1249')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='-957')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='-911')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='-243')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='-65')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='-308')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='-811')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='-806')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='-952')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='-716')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='-1618')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='-1910')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='-1809')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='-2224')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='-2272')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='-2317')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='-2283')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='-2334')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='-1860')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='-2139')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='-2206')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='-296')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='-449')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='-142')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='-422')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='-365')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='-581')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='-263')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='-325')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='-142')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='-355')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='-310')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='496')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='660')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='1246')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='2889')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='1532')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='-143')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='-518')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='225')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='-1667')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='-2330')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='-1727')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='-1489')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='-1515')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='-476')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='-193')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='128')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='376')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='2872')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='408')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='1923')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='1830')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='1798')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='334')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='1260')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='1815')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='2272')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='262')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='-387')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='-613')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='-251')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='-885')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='551')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='48')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='-982')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='-1612')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='-1125')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='-381')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='-441')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='71')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='1020')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='760')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='-319')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='-1144')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='302')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='-319')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='-582')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='408')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='1031')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='1139')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='2082')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='-1202')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='622')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='456')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='-736')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='-818')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='1684')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='307')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='-801')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='-1256')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='3308')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='506')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='639')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='1963')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='2867')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='-831')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='-270')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='2010')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='3408')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='3190')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='-187')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='-225')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='531')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='-823')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='62')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='1079')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='1547')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='900')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='1780')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='1407')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='298')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='565')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='-311')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='-657')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='168')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='647')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='1427')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='829')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='-5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='1197')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='3751')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='2991')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='2801')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='-1188')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='-828')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='-799')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='57')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='4601')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='1911')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='799')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='-972')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='-708')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='-790')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='-490')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='-1316')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='-825')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='-1012')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='-1178')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='-35')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='1352')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='1059')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='1290')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='2079')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='3618')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='-4684')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='-2470')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='-556')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='189')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='260')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='816')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='2489')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='2732')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='2234')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='57')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='1219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='632')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='-1360')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='38')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='-980')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='-1501')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='-2119')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='-1618')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='-1314')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='-432')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='309')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='685')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='1692')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='1899')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='3622')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='2709')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='3037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='2898')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='3251')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='186')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='-636')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='-421')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='-729')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='-978')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='2670')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='1255')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='-496')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='424600', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='-4313')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='-4163')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='-4102')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='-4091')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='-3982')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='-3934')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='-4439')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='-5323')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='-6298')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='-7332')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='-7541')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='-7248')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='-6869')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='-6454')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='-6460')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='-3546')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='-986')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='697')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='776')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='925')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='125')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='456')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='903')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='278')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='27')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='43')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='173')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='947')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='728')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='-452')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='-117')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='23')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='182')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='-152')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='-423')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='-705')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='-790')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='-1575')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='-2027')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='-1757')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='-1722')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='-1901')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='-741')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='-812')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='-891')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='652')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='411')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='516')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='398')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='382')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='470')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='591')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='267')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='770')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='164')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='438')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='-43')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='72')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='249')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='201')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='115')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='-425')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='-229')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='-284')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='-247')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='-135')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='-54')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='96')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='16')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='598')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='721')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='818')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='1067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='1245')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='-117')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='-721')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='-1504')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='-2084')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='-2554')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='-2345')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='-2920')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='-2712')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='-2858')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='-2928')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='-2803')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='-3032')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='-4017')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='-3918')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='-3412')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='-3441')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='-2561')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='-2139')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='-1765')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='-465')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='-702')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='-647')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='-676')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='-509')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='-2150')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='-2355')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='-3171')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='-4031')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='-4338')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='-4651')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='-4668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='-4346')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='-4571')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='-4929')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='-4607')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='-4866')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='-4308')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='-3897')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='-3784')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='-2988')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='-3099')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='-3335')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='-2686')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='-2522')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='-2074')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='-1989')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='-1788')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='-1795')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='-2075')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='-2698')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='-3932')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='-4406')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='-4366')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='-4692')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='-4302')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='-3927')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='-4101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='-4187')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='-4342')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='-4162')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='-4456')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='-4132')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='-4499')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='-3882')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='-3295')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='-2863')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='-2668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='-1778')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='-1810')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='-1829')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='-1800')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='-1595')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='-2050')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='-2961')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='-3627')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='-4830')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='-4296')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='-5257')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='-4408')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='-4326')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='-4420')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='-3950')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='-4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='-4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='-4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='-4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='-6868')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='-6790')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='-7252')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='-6734')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='-6030')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='-5892')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='-6066')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='-5486')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='-5444')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='-5339')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='-4983')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='-5190')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='-6313')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='-6839')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='-7853')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='-13507')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='-13381')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='-12778')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='-11890')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='-12338')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='-11774')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='-12649')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='-11849')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='-7471')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='-8126')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='-7696')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='-6538')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='-6175')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='-5664')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='-4480')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='-4300')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='-4263')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='-4119')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='-4103')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='-4511')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='-5135')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='-6038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='-6392')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='-5899')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='-6690')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='-6603')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='-6159')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='-6128')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='-6220')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='-6047')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='-6009')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='-2295')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='-2543')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='-3085')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='-3269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='-2267')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='-2159')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='-1532')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='-1675')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='-960')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='-1122')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='-1061')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='-505')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='-536')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='-991')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='-1818')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='-2574')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='-2844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='-2608')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='-2928')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='-2112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='-2074')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='354')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='438')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='3408')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='3269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='3655')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='3521')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='5431')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='5560')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='5660')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='5623')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='5896')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='6656')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='6647')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='6733')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='6914')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='6873')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='6691')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='5814')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='5617')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='5608')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='-3230')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='-3656')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='-3620')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='-3449')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='-3601')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='-3735')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='-5996')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='-6718')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='-6583')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='-6767')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='-6800')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='-6525')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='-6170')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='-5676')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='-4911')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='-4911')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='-4801')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='-1982')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='-1810')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='-1834')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='-2256')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='-2325')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='-2684')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='-2675')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='-2778')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='-2688')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='-2650')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='-2557')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='-2355')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='-2318')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='-2582')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='-2811')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='-3182')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='-3578')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='-3544')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='-3148')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='-3345')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='-3137')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='-2809')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='-2501')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='-2493')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='-2157')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='-2137')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='-2155')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='-2498')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='-2368')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='-3513')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='-4566')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='-5345')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='-6057')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='-5799')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='-5341')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='-5395')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='-5979')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='-6090')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='-6778')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='-6378')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='-5473')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='-5382')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='-4608')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='-4316')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='-4055')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='-3867')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='-3482')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='-3116')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='-3010')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='-2944')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='-2819')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='-3644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='-4499')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='-5795')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='-6198')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='-6174')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='-6102')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='-6218')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='-5898')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='-5986')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='-5633')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='-6210')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='-5783')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='-5726')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='-5539')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='-5408')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='-4608')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='-3876')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='-3618')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='-3292')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='-1685')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='-2072')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='-2050')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='-1670')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='-1792')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='-3485')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='-3911')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='-4578')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='-4788')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='-4459')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='-4693')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='-4830')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='-4652')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='-4452')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='-5394')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='-5538')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='-5866')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='-5225')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='-5162')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='-5250')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='-4384')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='-4218')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='-4016')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='-3222')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='-3311')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='-3183')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='-2974')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='-2945')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='-2933')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='-3570')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='-4545')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='-5119')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='-5737')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='-6515')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='-6776')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='-6755')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='-6361')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='-6546')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='-6273')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='-5402')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='-5797')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='-5647')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='-5747')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='-5443')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='-5445')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='-4557')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='-4019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='-3484')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='-3616')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='-3559')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='-3408')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='-3609')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='-4020')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='-4182')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='-4997')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='-5810')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='-5595')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='-15224')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='-8695')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='-4575')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='-6313')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='-6104')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='-5750')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='-5764')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='-5649')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='-5249')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='-5562')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='-4875')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='-4619')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='-4611')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='-3619')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='-3467')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='-3564')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='-3672')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='-3614')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='-3621')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='-3868')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='-3969')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='-3886')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='-4381')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='-4271')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='-3967')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='-4002')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='-3562')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='-3874')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='-3561')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='-4690')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='-5196')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='-5211')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='-5037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='-4963')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='-4048')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='-3708')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='-3215')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='438200', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='-1103')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='-1286')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='-1351')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='-1427')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='-1246')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='-1101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='-909')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='-1472')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='-1523')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='-1435')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='-1784')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='-1757')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='-1682')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='-1745')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='-1590')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='-500')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='1379')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='-45')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='-346')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='-580')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='-752')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='-1367')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='-1906')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='101')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='-366')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='-740')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='-550')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='432')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='1595')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='275')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='1019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='3444')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='3629')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='3203')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='215')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='380')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='890')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='-446')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='-200')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='-44')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='-424')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='-718')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='946')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='276')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='-944')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='3129')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='453')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='194')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='-246')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='-122')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='430')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='1582')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='720')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='1333')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='588')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='642')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='1096')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='313')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='374')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='204')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='692')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='-196')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='1888')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='2502')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='1840')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='2437')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='1930')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='1219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='-250')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='-1971')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='-1029')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='-1072')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='-388')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='229')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='1131')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='-726')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='166')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='965')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='2341')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='2354')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='2565')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='1136')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='367')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='173')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='156')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='460')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='358')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='-308')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='-1006')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='93')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='-723')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='147')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='-551')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='-626')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='2316')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='714')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='600')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='953')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='2267')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='-403')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='999')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='475')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='1663')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='829')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='1055')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='-314')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='1431')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='1201')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='1280')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='1431')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='1145')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='1635')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='957')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='1019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='1219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='1143')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='-893')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='-1019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='-1389')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='-182')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='-220')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='502')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='940')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='1719')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='1592')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='960')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='1537')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='1177')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='1337')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='737')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='723')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='917')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='794')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='1075')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='2328')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='1192')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='867')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='184')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='12')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='978')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='256')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='-1007')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='614')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='205')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='195')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='316')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='1241')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='1748')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='1046')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='1099')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='309')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='-202')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='-722')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='680')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='440')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='870')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='475')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='1959')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='1506')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='1027')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='677')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='-759')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='-2042')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='-2554')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='-2178')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='-2126')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='-2484')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='-1980')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='-1072')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='-524')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='-1366')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='-1753')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='-893')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='-845')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='-1148')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='-2710')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='-2297')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='-2208')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='-2037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='-997')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='1048')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='-955')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='-1334')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='-1121')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='-1625')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='-1419')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='-671')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='-1501')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='-1511')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='-1618')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='-1037')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='-192')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='1397')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='-627')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='-711')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='20')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='-130')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='-843')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='-642')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='-320')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='-210')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='295')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='417')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='37')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='-2105')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='-2980')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='-3329')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='-1430')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='-1986')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='-3570')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='-3230')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='-2288')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='-2846')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='-2946')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='-2342')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='-1719')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='-668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='-1761')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='-2413')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='-1727')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='-1832')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='-1889')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='-2346')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='-2176')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='374')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='-132')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='993')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='-150')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='-843')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='-1196')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='2577')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='1582')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='909')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='-1405')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='-1597')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='-186')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='-658')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='-679')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='89')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='680')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='1095')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='-832')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='-785')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='-228')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='-40')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='-280')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='-697')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='-697')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='-811')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='-629')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='-1408')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='-1666')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='-1574')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='-1928')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='-1970')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='-2017')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='-1984')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='-2007')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='-1611')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='-1851')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='-1908')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='-251')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='-386')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='-121')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='-365')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='-313')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='-506')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='-232')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='-288')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='-121')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='-310')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='-245')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='439')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='609')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='1078')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='2491')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='1327')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='-115')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='-442')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='203')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='-1439')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='-2019')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='-1491')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='-1285')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='-1309')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='-409')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='-162')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='90')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='319')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='2483')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='357')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='1681')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='1572')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='1575')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='302')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='1076')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='1555')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='1971')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='239')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='-351')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='-527')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='-215')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='-782')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='452')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='60')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='-848')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='-1383')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='-989')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='-325')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='-382')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='60')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='884')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='659')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='-264')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='-990')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='289')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='-292')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='-542')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='366')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='909')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='992')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='1808')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='-1049')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='543')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='377')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='-619')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='-712')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='1459')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='257')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='-696')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='-1085')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='2873')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='421')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='557')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='1696')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='2480')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='-707')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='-237')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='1730')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='2990')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='2746')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='-174')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='-194')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='485')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='-729')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='70')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='907')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='1297')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='776')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='123')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='1557')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='1208')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='253')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='508')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='-274')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='-571')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='146')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='567')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='1222')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='733')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='1041')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='3222')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='2576')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='2422')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='-1036')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='-746')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='-661')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='45')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='3983')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='1694')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='709')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='-844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='-605')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='-661')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='-436')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='-1155')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='-716')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='-877')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='-1024')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='1185')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='884')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='1103')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='1789')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='3132')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='-4032')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='-2114')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='-498')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='174')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='210')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='710')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='2127')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='2386')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='1916')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='53')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='1070')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='564')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='-1181')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='34')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='-847')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='-1318')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='-1842')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='-1404')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='-1129')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='-372')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='269')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='572')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='1413')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='1586')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='3161')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='2347')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='2627')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='2502')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='2818')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='158')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='-545')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='-370')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='-624')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='-847')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='2315')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='1099')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='-417')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='422200', h='3dc1a8de')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='-4307')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e08', v='-4169')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c32', v='-4096')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a3c', v='-4087')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3835', v='-3963')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4645', v='-3969')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5455', v='-4411')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6265', v='-5358')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7075', v='-6317')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e85', v='-7298')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c96', v='-7519')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aa5', v='-7351')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8b6', v='-6890')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6c5', v='-6465')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4d7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d30b', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0f6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef06', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd17', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b27', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11937', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12746', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13556', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14366', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15181', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f85', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d95', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ba4', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189b5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197c4', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5d5', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b3e6', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c1f6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d005', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de15', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec25', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa36', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20845', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21656', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22465', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23276', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24086', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e99', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25ca7', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ab7', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='278c6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='286d6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='294e6', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a301', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2b105', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2bf15', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2cd25', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2db35', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2e946', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2f755', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='30566', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='31375', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3219e', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='32f96', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='33da6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='34bb6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='359de', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='367d6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='375e6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3840e', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3921e', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3a016', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ae27', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3bc36', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3ca47', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3d856', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3e667', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='3f481', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='40285', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41095', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='41ea5', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='42cb5', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='43ac5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='448d5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='456e6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='464f5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='480ff', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='48f0e', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='49d1d', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ab46', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4b955', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4c769', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4d577', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4e387', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4f196', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='4ffa6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='50dd0', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='51bc6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='529d6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='537e7', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='54600', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55406', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='56215', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57026', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='57e36', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='58c46', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='59a70', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5a867', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5b676', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5c487', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5d296', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5e0a9', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5eeb8', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='5fcc6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='60ad7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='618e7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='626f7', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='63507', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='64317', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65127', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='65f37', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='66d46', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='67b57', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='68967', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='69782', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6a586', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6b395', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6c1a6', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6cfb5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ddc6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6ebd6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='6f9e6', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='707f6', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='71607', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='72417', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='73227', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74037', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='74e47', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='75c57', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='76a63', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='77873', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='78680', v='-6')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7948f', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7a29f', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7b0af', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7bebf', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7cccf', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7dadf', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7e8fa', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f70a', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8051a', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8132a', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8213a', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='82f4a', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='83d5a', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='84b6a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8597a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8678b', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8759b', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='883ac', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='891bb', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='89fca', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8adda', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8bbeb', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8c9fc', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8d80b', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8e61a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='8f42a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9023a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9104a', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='91e5a', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='92c6a', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='93a84', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='94885', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='95694', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='964a5', v='-9')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='972b4', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='980c5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='98ed4', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='99ce5', v='-8')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9aaf5', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9b906', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9c716', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9d526', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9e336', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9f145', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='9ff56', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a0d65', v='-7')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a1b77', v='-6324')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a2986', v='-3516')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a3795', v='-963')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a45a7', v='644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a53b6', v='700')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a61c7', v='942')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a6fd6', v='99')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a7e00', v='464')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a8c00', v='912')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a05', v='289')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aa815', v='32')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ab625', v='46')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ac435', v='200')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ad245', v='921')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ae055', v='744')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='aee65', v='-561')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='afc75', v='-68')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b0a85', v='31')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b26a6', v='142')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b34b6', v='-123')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b42c6', v='-451')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b50d6', v='-729')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b5ee7', v='-712')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b6cf6', v='-1584')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b7b07', v='-1983')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b8917', v='-1753')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='b9728', v='-1758')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ba537', v='-1891')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bb347', v='-827')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bc157', v='-882')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bcf67', v='-899')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bdd81', v='644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='beb86', v='417')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='bf995', v='524')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c07a6', v='400')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c15b5', v='372')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c23c6', v='484')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c31d5', v='591')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c3fe6', v='336')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c4df5', v='741')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c5c06', v='114')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c6a16', v='507')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c7826', v='-51')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c8636', v='136')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='c9446', v='334')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ca256', v='235')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cb066', v='116')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cbe76', v='-417')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ccc87', v='-232')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cda96', v='-184')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ce8a8', v='-219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='cf6b7', v='-134')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d04c8', v='-51')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d12d7', v='143')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d20e7', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d2f02', v='11')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d3d05', v='600')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b15', v='644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d5926', v='836')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d6735', v='1068')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d7546', v='1213')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d8355', v='-135')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9166', v='-755')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d9f75', v='-1498')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dad87', v='-2011')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dbb97', v='-2561')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dc9a8', v='-2338')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='dd7b7', v='-2895')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='de5c6', v='-2780')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='df3d7', v='-2912')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e01d7', v='-2913')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e0fe5', v='-2832')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e1df5', v='-3018')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e2c04', v='-4099')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e3a14', v='-3979')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e4824', v='-3370')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e5634', v='-3428')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e6444', v='-2551')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e7255', v='-2189')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e806f', v='-1757')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e8e7f', v='-477')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='e9c8e', v='-709')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eaa9f', v='-653')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eb8ae', v='-653')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ec6bf', v='-468')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ed4ce', v='-2112')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ee2df', v='-2239')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ef0ef', v='-3198')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='eff01', v='-4087')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f0d10', v='-4308')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f1b20', v='-4550')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f2930', v='-4628')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f3740', v='-4301')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f4551', v='-4608')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f5361', v='-4857')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6172', v='-4613')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f6f80', v='-4818')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f7d91', v='-4244')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f8ba1', v='-3915')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='f99b1', v='-3805')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fa7c0', v='-3025')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fb5d1', v='-3034')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fc3e0', v='-3295')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fd1fb', v='-2680')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fe00b', v='-2530')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee1c', v='-2083')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='ffc2c', v='-1982')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='100a3b', v='-1790')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10184c', v='-1791')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10265b', v='-2077')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10346c', v='-2724')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10427b', v='-4016')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10508d', v='-4320')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='105e9d', v='-4339')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='106cad', v='-4725')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='107abd', v='-4338')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1088cd', v='-3906')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1096de', v='-4119')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10a4ed', v='-4322')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10b2fe', v='-4345')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10c10d', v='-4169')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10cf1e', v='-4354')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10dd2e', v='-4160')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10eb66', v='-4453')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='10f94e', v='-3895')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11075e', v='-3281')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11156d', v='-2866')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='112388', v='-2663')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113187', v='-1794')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='113fb0', v='-1797')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='114da6', v='-1823')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='115bb6', v='-1782')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1169c6', v='-1585')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1177d6', v='-2082')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1185e8', v='-2885')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1193f7', v='-3558')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11a208', v='-4838')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11b017', v='-4322')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11be2f', v='-5393')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11cc37', v='-4456')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11da47', v='-4279')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11e857', v='-4354')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='11f667', v='-3900')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='120578', v='-4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='121386', v='-4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122196', v='-4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='122fa6', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='123db5', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='124bc5', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1259d5', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1267e4', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='127600', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='128305', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129115', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129f25', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12ad35', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12bb45', v='-1')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12c954', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12d766', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12e575', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='12f386', v='-2')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130196', v='-4')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='130fa6', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='131db7', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='132bc5', v='-3')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1339d4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1347e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1355f4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='136404', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='137214', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138024', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='138e33', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='139c44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13aa54', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13b865', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13c67e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13d48e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13e29e', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13f0ae', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='13febf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='140ccf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='141adf', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1428ef', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1436ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14450f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14531f', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146130', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='146f40', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='147d44', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='148b57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='149965', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14a775', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14b584', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14c397', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14d1a4', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14dfb6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14edc5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='14fbd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1509e5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1517ff', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='152605', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153415', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='154225', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155035', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='155e45', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='156c55', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='157a65', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='158875', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='159686', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15a495', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15b2a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15c0b6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15cec6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15dcd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15eae6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='15f8f5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='160706', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='161517', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='162326', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163137', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='163f46', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='164d57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='165b67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='166982', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='167786', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='168596', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1693a6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16a1b5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16afc6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16bdd5', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16cbe6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16d9f6', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16e807', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='16f616', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='170429', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='171236', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172047', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='172e57', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='173c67', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='174a77', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='175887', v='0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='176694', v='-6844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1774a3', v='-6848')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1782b3', v='-7276')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1790c5', v='-6718')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='179ed4', v='-6044')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17ace4', v='-5879')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17bafd', v='-6067')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17c90f', v='-5484')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d71e', v='-5437')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17e52f', v='-5342')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17f33f', v='-4981')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18014f', v='-5193')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='180f5f', v='-6321')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='181d6e', v='-6923')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='182b7f', v='-7889')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18398f', v='-13464')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1847a1', v='-13354')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1855af', v='-12813')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1863c0', v='-11996')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1871cf', v='-12436')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='187fe0', v='-11658')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='188def', v='-12508')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='189c00', v='-11965')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18b80d', v='-7567')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18c61c', v='-8100')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18d42c', v='-7676')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18e23b', v='-6565')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18f04b', v='-6167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='18fe5e', v='-5660')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='190c76', v='-4475')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='191a86', v='-4306')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='192896', v='-4252')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1936a6', v='-4125')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1944b7', v='-4125')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1952c6', v='-4498')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1960d7', v='-5137')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='196ee6', v='-5967')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='197cf8', v='-6354')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='198b0f', v='-5965')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19991f', v='-6615')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19b541', v='-6619')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19c34d', v='-6199')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19d15e', v='-6235')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19df80', v='-6313')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19ed90', v='-6079')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19eebe', v='-6075')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='19fb8e', v='-2390')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a09a0', v='-2600')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a17ae', v='-3051')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a25be', v='-3338')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a33cd', v='-2238')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a41dd', v='-2137')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a4fed', v='-1546')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a5e08', v='-1670')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a6c05', v='-969')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a7a15', v='-1123')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a8826', v='-1072')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9637', v='-481')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aa445', v='-537')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ab255', v='-995')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ac065', v='-1819')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ace75', v='-2636')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1adc87', v='-2920')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1aea96', v='-2594')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1af8a7', v='-2898')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b06b7', v='-2173')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1b14c6', v='-2092')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='311')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c8270', v='399')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c907e', v='3486')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c9e8f', v='3357')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1caca2', v='3670')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cbab1', v='3580')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cc8c1', v='5398')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cd6d0', v='5478')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ce4de', v='5618')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1cf2f0', v='5659')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0109', v='5923')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d0f06', v='6651')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d1d15', v='6654')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d2b25', v='6713')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d3935', v='6885')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d4745', v='6893')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d5555', v='6705')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d6366', v='5853')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7175', v='5545')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d7f86', v='5589')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d8d95', v='-3219')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1d9ba6', v='-3620')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1da9b6', v='-3623')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1db7c7', v='-3472')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dc5d5', v='-3630')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dd3e6', v='-3723')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1de1f5', v='-6033')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1df006', v='-6752')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1dfe16', v='-6647')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e0c26', v='-6778')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e1a36', v='-6794')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e2847', v='-6593')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e3659', v='-6136')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e4467', v='-5653')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e5281', v='-4910')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6086', v='-4908')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e6e96', v='-4803')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e7ca6', v='-1970')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e8ab5', v='-1820')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1e98c6', v='-1821')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ea6d5', v='-2271')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eb4e6', v='-2332')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ec2f6', v='-2646')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ed106', v='-2644')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1edf16', v='-2749')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1eed26', v='-2728')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1efb36', v='-2587')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f0946', v='-2548')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1756', v='-2377')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f2566', v='-2339')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f3376', v='-2566')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4187', v='-2784')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f4f96', v='-3191')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f5da7', v='-3581')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f6bb6', v='-3591')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f79c7', v='-3124')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f87d6', v='-3337')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f95e7', v='-3142')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fa401', v='-2806')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fb204', v='-2480')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fc016', v='-2497')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fce25', v='-2171')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fdc35', v='-2133')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1fea45', v='-2159')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1ff855', v='-2500')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='200665', v='-2395')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='201475', v='-3469')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='202286', v='-4512')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203095', v='-5355')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='203ea5', v='-5915')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='204cb6', v='-5771')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='205ac6', v='-5287')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2068d6', v='-5386')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2076e6', v='-5976')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2084f6', v='-6100')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='209306', v='-6742')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20a116', v='-6312')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20af26', v='-5533')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20bd37', v='-5455')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20cb46', v='-4630')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20d957', v='-4348')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20e767', v='-4046')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='20f581', v='-3855')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='210386', v='-3519')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211194', v='-3131')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='211fa5', v='-3014')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='212db5', v='-2904')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='213bc5', v='-2826')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2149d6', v='-3680')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2157e5', v='-4507')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2165f6', v='-5844')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='217406', v='-6195')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='218217', v='-6165')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219026', v='-6142')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='219e39', v='-6223')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ac46', v='-5938')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba57', v='-5926')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21c867', v='-5557')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21d677', v='-6240')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21e487', v='-5750')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21f296', v='-5772')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2200a6', v='-5468')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='220eb7', v='-5393')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='221cc6', v='-4543')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='222ad7', v='-3876')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2238e7', v='-3622')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='224701', v='-3292')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='225505', v='-1681')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='226315', v='-2082')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227125', v='-2043')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='227f35', v='-1675')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='228d45', v='-1785')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='229b54', v='-3494')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22a965', v='-4080')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22b776', v='-4454')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22c586', v='-4816')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22d397', v='-4405')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22e1a6', v='-4620')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22efb6', v='-4820')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='22fdc7', v='-4643')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='230bd7', v='-4435')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2319e6', v='-5397')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2327f6', v='-5558')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23361b', v='-5883')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='234416', v='-5207')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='235226', v='-5203')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236037', v='-5253')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='236e46', v='-4342')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='237c57', v='-4194')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='238a66', v='-3991')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='239881', v='-3195')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23a685', v='-3328')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23b495', v='-3191')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23c2a4', v='-2966')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23d0b5', v='-2959')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23dec4', v='-2916')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23ecd5', v='-3620')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='23fae4', v='-4562')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2408f6', v='-5013')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='241706', v='-5793')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='242518', v='-6605')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='243325', v='-6787')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244137', v='-6732')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='244f46', v='-6435')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b66', v='-6415')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='247976', v='-6261')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='248786', v='-5371')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24957e', v='-5703')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24a38f', v='-5668')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24b19c', v='-5810')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24bfac', v='-5495')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24cdbc', v='-5368')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24dbcd', v='-4539')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24e9e5', v='-4003')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='24f808', v='-3487')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='250616', v='-3597')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='251426', v='-3575')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='252236', v='-3422')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253047', v='-3610')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='253e56', v='-4069')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='254c67', v='-4209')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='255a76', v='-4977')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='256887', v='-5845')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='257697', v='-5662')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2584a8', v='-15155')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2592b6', v='-8621')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25a0c7', v='-4609')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25aed7', v='-6329')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25bce7', v='-6120')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25caf8', v='-5819')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25d907', v='-5800')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25e718', v='-5627')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='25f527', v='-5318')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='260338', v='-5543')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261149', v='-4916')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='261f59', v='-4589')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='262d68', v='-4670')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='263b83', v='-3694')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='264986', v='-3491')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='265795', v='-3582')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2665a6', v='-3683')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2673b5', v='-3608')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2681c6', v='-3681')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='268fd5', v='-3850')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='269de6', v='-3923')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26abf6', v='-3955')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26ba06', v='-4467')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26c817', v='-4257')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26d62b', v='-3915')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26e436', v='-3897')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='26f247', v='-3531')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270057', v='-3798')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e67', v='-3628')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='271c77', v='-4540')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='272a87', v='-5171')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='273897', v='-5038')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2746a8', v='-5028')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2754b9', v='-5029')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2762c7', v='-3993')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2770d8', v='-3551')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='277ee7', v='-3206')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='674601', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='22123:137:88:76:103:69:89:6047:6571:2134:6414:2223:2727.231:1435.675:5.979:0.067:0:4171:41039:29052:42104:12218:24721:13504:8975:11153:2990:8665:9759:11742')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='673801', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0:0:0:0:0:0:0:2472:22505:25160:16425:30012:23514.229:11675.362:9.272:0.416:0:6491:3221:2867:4204:22822:3047:6263:15342:9785:32424:23346:21578:23508')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='673401', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='72898:191:188:176:178:174:181:10441:14079:1360:46667:74131:80996.13:50324.326:32.188:0.038:0:44027:200289:109216:52461:12951:75896:69196:104852:117036:96903:120714:124308:96207')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='673001', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0:0:0:0:0:0:0:3476:3226:5597:4853:0:0:0:0.001:0.137:0:0:0:0:0:50735:59205:0:0:0:0:0:0:0')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='26274601', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0::1305::2869::4482::6066::7396::8573::10262::11922::13773::15492::17522::19544::21452::22070::22075::22080::22084::22085::22090::22097::22103::22109::22116::0::6::13::20::27::32::34::41::48::54::61::68::75::82::89::96::103::110::110::111::116::119::123::129')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='0::5::5::7::11::12::12::17::24::30::37::44::51::58::65::69::71::71::71::73::75::76::76::81::0::6::13::20::27::34::40::44::50::::51::51::51::51::51::51::51::51::51::51::54::60::63::69::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='6::13::20::27::34::38::44::46::46::47::52::58::65::66::66::67::69::69::70::76::83::89::96::0::5::12::19::25::30::31::35::37::37::37::37::38::44::45::45::45::45::45::45::48::51::56::62::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='6::14::21::28::35::42::47::50::50::50::52::59::65::69::72::74::75::75::75::75::78::79::82::0::7::14::21::28::34::38::44::45::45::49::56::63::70::76::80::835::1675::2038::2039::2856::3158::3607::4431::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='629::797::1456::2382::2476::2477::2821::2821::2821::::2821::2821::2856::2865::2865::3049::3223::3267::3532::4304::5147::5147::5449::0::101::102::252::592::605::605::605::605::612::612::612::612::612::612::612::679::767::767::767::767::767::767::910::0::1158')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='2289::2701::3076::3076::3385::3904::3904::3904::3904::3904::3904::3904::3904::3904::3904::3911::4023::4599::5237::5494::5780::6072::0::622::622::622::622::622::716::819::819::819::819::819::819::870::870::870::870::870::870::870::870::870::870::1024::0::1127')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='1954::2173::2377::2377::2377::2377::2377::2377::2381::2381::2381::2381::2381::2381::2381::2381::2381::2381::2381::2384::2400::2400::0::163::163::163::163::163::163::163::163::204::330::751::1400::1433::1433::1433::1435.1::1435.1::1435.1::1435.1::1435.1::1435.144::1435.375::1435.381::0::1.179')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='2.486::3.869::5.278::5.809::5.811::5.811::5.811::5.843::5.967::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.969::5.969::0::0::0::0::0::0::0::0::0::0::0::0.001::0.014::0.032::0.04::0.046::0.049::0.05::0.05::0.05::0.05::0.05::0.05::0.053::0::0.005')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.009::0.009::0.009::0.009::0.009::0.009::0.014::0::0.004::0.02::0.031::0.042::0.044::0.044::0.044::0.044::0.044::0.044::0.044::0.047::0.05::0.051::0.054::0.054::0.054::0::0::0::0::175::1878::0::2303')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='5016::7889::10825::12785::13428::14568::16281::17870::18757::19673::22314::25317::28017::30611::32571::::33078::33570::34865::36124::37670::39908::0::978::2540::4236::5992::6773::6818::6915::7643::8510::8618::::9354::10334::10857::11190::11387::11387::12818::15547::19011::21077::22610::25682::0::2682::5757::9094')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='12439::14810::16426::18172::20462::22851::24957::26912::29200::31789')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='8197::8264::8365::8365::8996::9996::10570::10570::10570::10807::0::388::776::1655::2374::2391::2391::2429::3332::3677::3768::3851::4294::4930::5847::6625::7852::9492::11328::13376::15620::17946::20170::22469::0::1979::4179::4817::5302::5612::5802::6075::6787::7172::7489::7668::7867::8184')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='8270::8270::8270::8270::8270::8279::8425::8766::9261::11379::0::967::2232::3224::3584::3708::3742::4192::4373::4379::4379::4379::4379::4379::4379::4468::4816::5111::5533::6393::6740::7394::7394::7988::0::1479::2407::2907::3341::3347::3347::3522::4521::4702::5104::5399::6511::6511')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='6511::6511::7554::8046::8046::8084::8781::9437::9437::10034::0::258::258::258::258::258::303::541::1097::1122::1122::1122::1122::1397::1429::2052::2638::2638::2638::2638::2638::2779::2779::2779::0::211::716::993::993::993::993::1058::1060::1060::1060::1060::1123::1640')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='3280::3952::3962::3962::3962::4297::5586::6998::7956::0::492::1570::2683::3585::3615::3618::3659::3659::3659::3659::3973::6767::8644::8717::8718::8718::8718::8718::8718::8718::8898::8898::9205::0::502::1825::3722::5758::7237::8159::8226::8226::8226::8226::8226::8226::8226::8226')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='8226::8240::8504::8980::9466::10308::10666::10666::10739')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='26273801', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::680::1753::2436::2439::2471::2472::2472::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='273::304::304::304::392::1467::1961::2735::4511::::12114::16337::18252::18452::19051::20724::21115::21611::21616::21616::21647::22460::22505::0::1428::1786::1821::1821::2100::3116::4606::5700::6263::7232::8321::9202::9706::10109::10567::11827::12356::14818::17416::20186::22628::24467::25160::0::16')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='16::16::18::761::2317::2345::3031::5010::7681::10719::13491::14079::14541::14788::15028::15551::16182::16182::16327::16351::16394::16424::0::1254::2521::3304::4214::6189::8542::8884::9714::10907::12447::13604::14407::14928::16855::18323::20016::22306::23952::25511::26700::27858::29512::30012::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='14::14::16::848::2512::4114::5556::7070::7967::9424::10812::11722::12829::13950::15033::17095::19423::20670::21129::21828::22608::23444::0::1024::1508::1786::1985::2951::4900::6589::8053::8849::8929::8929::8929::9502::10380::11200::11669.43::11670.714::11671.501::11673.236::11674.324::11674.616::11674.887::11675.345::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='0::0::0::0::0.632::1.57::2.787::4.389::5.353::6.676::7.825::8.473::9.059::9.07::9.083::9.113::9.149::9.186::9.222::9.254::9.263::9.267::0::0.054::0.078::0.094::0.113::0.149::0.2::0.229::0.234::0.241::0.244::0.245::0.245::0.245::0.245::0.245::0.246::0.276::0.309::0.348::0.383::0.408::0.415::0.416::0::0.022')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='0.031::0.032::0.033::0.045::0.076::0.1::0.121::0.161::0.197::0.227::0.252::0.257::0.264::0.275::0.295::0.315::0.322::0.329::0.332::0.348::0.357::0.357::0::0::0::0::0::0::0.015::0.051::0.062::0.068::0.079::0.091::0.094::0.094::0.097::0.108::0.125::0.161::1425::3563::5087::6081::6491::6491::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='0::0::0::0::3::4::17::17::17::17::83::83::83::83::83::::2815::3221::3221::3221::3221::3221::0::0::0::0::0::0::503::2124::2124::2135::2187::::2220::2220::2220::2220::2231::2857::2867::2867::2867::2867::2867::2867::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='0::0::0::0::5::5::5::5::5::5')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='14139::14218::14538::16467::16493::16493::17913::20388::22503::22822::0::242::242::242::242::473::1614::2783::2783::2785::3043::3046::3046::3047::3047::3047::3047::3047::3047::3047::3047::3047::3047::3047::0::0::0::101::101::101::155::155::155::155::155::158::158::158')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='303::689::1267::3291::5362::5964::5964::6205::6263::6263::0::67::78::78::78::96::279::1257::2169::3382::5628::7692::9144::9800::11410::13193::13770::14500::14502::14526::14528::14693::15337::15342::0::0::128::128::128::631::1960::2834::2847::2994::3445::3445::3445::4010')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='5304::6802::7188::7304::7777::8119::8119::8238::9731::9785::0::3202::5137::5593::6304::8577::12322::12561::12561::13960::16533::20127::22841::22863::23106::23247::23247::24987::26402::27590::28075::29263::31438::32325::0::171::171::200::344::1476::2425::3387::4145::5875::9210::12291::15144::15144')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='15144::15144::17267::21864::23232::23346::23346::23346::23346::0::86::86::86::86::188::709::1333::2511::4313::7593::10434::10434::10443::10622::10810::11293::12302::14859::17476::19565::19742::21035::21234::0::13::13::13::13::13::13::216::929::2058::3700::5698::8782::11698::14663')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='17767::18546::19155::19155::19155::19155::20730::23016::23508')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='26273401', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0::4177::8348::12421::16466::20389::24550::29638::35390::42329::49608::56982::64119::70819::72824::72831::72838::72845::72851::72859::72866::72873::72881::72889::0::8::16::24::32::40::48::56::65::73::81::89::97::105::114::122::131::138::145::152::160::167::175::183')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='0::8::16::23::31::39::47::55::63::71::79::87::96::104::112::120::128::135::142::150::157::165::172::180::0::8::17::25::34::43::51::58::66::::79::85::92::98::105::111::117::124::131::138::145::153::160::168::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='8::16::25::33::41::49::56::64::70::77::84::91::98::105::111::118::125::132::139::147::154::162::170::0::7::16::24::32::40::48::55::63::69::76::82::89::96::103::109::116::122::128::135::143::150::158::166::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='8::17::25::34::43::51::58::66::73::80::87::94::101::108::115::122::129::135::142::150::157::165::172::0::8::17::25::34::42::50::58::65::72::78::85::92::100::107::114::2595::7913::10294::10439::10439::10439::10441::10441::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='2::4::9::9::9::9::69::181::236::::327::461::720::1393::2215::3059::4593::6342::8041::9944::11561::12314::13166::0::47::47::47::47::47::47::47::47::48::59::87::127::134::135::142::182::537::769::1000::1156::1208::1230::1264::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='0::0::0::0::58::464::1214::2866::5195::7644::10189::13108::15902::18773::21557::24345::28271::32267::36012::39360::42352::44782::0::1215::1879::2581::3232::3730::4627::6845::9426::13213::17460::21812::26408::30878::35346::40061::44776::49145::53501::57575::61429::64968::68029::71154::0::2541')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='4757::6749::8707::10446::12296::14817::18021::22192::24710::29209::33799::38000::42199::46375::50681::55062::59387::63686::67971::71883::75378::78274::0::1965::3785::5589::7408::9042::10735::13143::16254::20473::25210::29898::34989::39265::43547::47659::50298.816::50302.733::50306.729::50310.326::50313.783::50317.062::50320.016::50322.277::0::1.986')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='3.746::5.427::7.116::8.649::10.225::12.377::14.972::18.155::21.519::24.079::26.789::29.872::32.038::32.075::32.093::32.11::32.132::32.149::32.163::32.173::32.181::32.183::0::0::0::0::0::0::0::0::0::0.001::0.005::0.008::0.012::0.014::0.014::0.014::0.014::0.017::0.023::0.026::0.029::0.032::0.035::0.038::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0.004::0.013::0.023::0.035::0.039::0.04::0.04::0::0::0::0::0::0::0::0::0.011::0.064::0.184::0.299::0.403::0.491::0.587::0.684::0.777::0.882::4649::11369::18384::25539::32098::38189::0::5631')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='11134::16580::21819::26934::32449::39011::46164::57329::70535::83592::96112::107934::119836::131836::143932::::159972::167838::175759::182940::189261::195260::0::4361::8637::12844::17026::21292::26185::31514::37629::44147::50295::::62972::69142::75490::81871::88411::92634::95263::98136::101493::104338::106264::108086::0::1118::2125::3163')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='3972::4424::5117::6670::8682::11273::14036::16800::19585::21687')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='12951::12951::12951::12951::12951::12951::12951::12951::12951::12951::0::0::0::0::0::0::0::0::0::0::2097::5658::9307::12837::16437::20072::24855::31120::37813::44635::51509::58224::64519::70460::0::4912::9779::12468::14377::16196::18098::20357::22916::25572::28333::31048::33673::36268')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='38769::41197::43617::46222::49307::52694::56229::59586::62790::66147::0::2563::5010::7377::9547::11662::13970::16722::19820::23668::28455::34079::39799::45148::50589::56448::62674::69084::75584::81629::87007::92190::96664::100953::0::3686::6981::10109::13149::16039::19168::23164::28263::34238::40473::46590::52821::58868')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='64810::70628::77026::83160::89027::94673::100155::105383::109691::113559::0::1996::3876::5949::7945::9673::11583::15197::19355::23959::28689::33229::37981::42745::47470::52656::58228::63768::69353::74634::79872::84699::88966::93090::0::3272::6519::9646::12665::15529::18785::22767::27361::33026::39197::45634::52231::58688')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='71623::77897::83661::88919::94509::100226::106004::111517::116497::0::3504::7147::10760::14341::17823::21561::25845::30381::35821::41529::48026::57310::64898::70924::77195::83135::89105::94900::100321::105698::111053::115727::120309::0::3610::7127::10778::14421::18015::21712::25564::29454::33598::37946::42100::46054::49824::53500')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='57099::61385::66221::71352::76382::81368::85828::89677::93036')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='26273001', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::10::521::1009::1914::2329::2804::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='1070::1205::1242::1361::1873::2688::2888::2968::3013::::3093::3165::3226::3226::3226::3226::3226::3226::3226::3226::3226::3226::3226::0::504::975::1420::1776::2305::2796::3212::4002::4254::4373::4494::4549::4753::4950::5087::5453::5453::5453::5453::5454::5473::5509::5581::0::581')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='1231::1927::2760::3902::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0.017::0.031::0.048::0.065::0.085::0.105::0.114::0.116::0.116::0.116::0.116::0.116::0.117::0.12::0.123::0.128::0.135::0.135::0.135::0.135::0.135::0.135::0.136::0::0.016')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='0.036::0.054::0.074::0.096::0.119::0.137::0.152::0.165::0.178::0.19::0.204::0.216::0.228::0.237::0.249::0.256::0.256::0.256::0.256::0.256::0.256::0.257::0::0.012::0.018::0.02::0.021::0.025::0.032::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='9208::9490::12579::16633::20164::23882::28334::33713::39220::44909::0::6542::13180::19855::26594::33432::40280::46777::52524::57875::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='1314601', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='270370')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='1313801', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='306693')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='1313401', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='1576111')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='1313001', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='127098')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='52514601', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0::1305::2869::4482::6066::7396::8573::10262::11922::13773::15492::17522::19544::21452::22070::22075::22080::22084::22085::22090::22097::22103::22109::22116::22123::22129::22136::22143::22150::22156::22158::22166::22173::22180::22186::22193::22200::22207::22214::22221::22228::22235::22235::22236::22241::22244::22247::22254')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='22261::22267::22267::22269::22273::22274::22274::22280::22287::22294::22301::22308::22315::22322::22329::22333::22335::22335::22335::22336::22338::22339::22339::22344::22351::22358::22365::22372::22379::22386::22391::22395::22402::::22404::22404::22404::22404::22404::22404::22404::22404::22404::22404::22407::22413::22416::22422::22429')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='22436::22443::22450::22457::22464::22468::22475::22477::22477::22478::22483::22489::22495::22497::22497::22498::22499::22499::22500::22507::22513::22520::22526::22533::22538::22545::22552::22559::22564::22564::22569::22571::22572::22572::22572::22573::22579::22580::22580::22580::22580::22580::22580::22583::22585::22590::22596::22603')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='22610::22617::22624::22632::22639::22645::22650::22653::22653::22653::22655::22662::22669::22672::22675::22677::22678::22678::22678::22678::22682::22683::22686::22693::22701::22708::22715::22722::22728::22732::22738::22740::22740::22744::22751::22758::22765::22770::22775::23529::24370::24733::24734::25551::25853::26301::27126::28742')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='29372::29540::30199::31125::31218::31219::31564::31564::31564::::31564::31564::31599::31607::31607::31792::31965::32010::32274::33047::33890::33890::34193::35316::35417::35418::35569::35909::35921::35921::35921::35921::35928::35928::35928::35928::35928::35928::35928::35995::36083::36083::36083::36083::36083::36083::36226::37450::38609')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='39740::40151::40527::40527::40836::41356::41356::41356::41356::41356::41356::41356::41356::41356::41356::41363::41476::42051::42690::42946::43231::43524::43865::44488::44488::44488::44488::44488::44582::44685::44685::44685::44685::44685::44685::44736::44736::44736::44736::44736::44736::44736::44736::44736::44736::44890::46089::47216')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='48043::48262::48466::48466::48466::48466::48466::48466::48471::48471::48471::48471::48471::48471::48471::48471::48471::48471::48471::48474::48491::48491::48816::48980::48980::48980::48980::48980::48980::48980::48980::49022::49147::49569::50218::50251::50251::50251::50252.91::50252.91::50252.91::50252.91::50252.91::50252.954::50253.185::50253.192::50253.487::50254.667')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='50255.973::50257.356::50258.765::50259.296::50259.299::50259.299::50259.299::50259.332::50259.455::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.457::50259.458::50259.458::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.469::50259.482::50259.5::50259.507::50259.513::50259.516::50259.517::50259.517::50259.517::50259.517::50259.517::50259.517::50259.521::50259.535::50259.54')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='50259.54::50259.54::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.546::50259.546::50259.546::50259.546::50259.547::50259.547::50259.552::50259.557::50259.561::50259.577::50259.588::50259.6::50259.601::50259.601::50259.601::50259.601::50259.601::50259.601::50259.601::50259.604::50259.608::50259.609::50259.612::50259.612::50259.612::50258::50258::50258::50258::50434::52137::54431::56734')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='59447::62321::65257::67217::67860::69000::70713::72302::73189::74106::76746::79750::82449::85043::87003::::87510::88002::89297::90556::92102::94340::95470::96449::98011::99707::101463::102244::102289::102386::103115::103983::104091::::104826::105806::106330::106662::106859::106859::108290::111019::114483::116549::118083::121154::124524::127207::130282::133619')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='136963::139335::140951::142698::144988::147377::149483::151438::153726::156315')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='174829::174896::174996::174996::175627::176628::177201::177201::177201::177439::178849::179238::179626::180505::181224::181241::181241::181279::182183::182528::182619::182701::183144::183780::184697::185475::186702::188342::190179::192226::194470::196796::199020::201319::203571::205550::207751::208389::208873::209184::209373::209646::210358::210744::211061::211240::211439::211756')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='211843::211843::211843::211843::211843::211852::211998::212339::212833::214951::217077::218045::219309::220302::220662::220786::220819::221269::221451::221458::221458::221458::221458::221458::221458::221547::221895::222189::222611::223471::223818::224472::224473::225066::226054::227533::228461::228962::229396::229401::229401::229577::230576::230758::231159::231454::232566::232566')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='232566::232566::233609::234101::234101::234139::234836::235492::235492::236089::237208::237467::237467::237467::237467::237467::237511::237749::238306::238331::238331::238331::238331::238606::238637::239260::239846::239846::239846::239846::239847::239988::239988::239988::240200::240411::240916::241193::241194::241194::241194::241260::241262::241262::241262::241262::241325::241842')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='243482::244154::244164::244164::244164::244499::245788::247200::248157::248866::249358::250436::251549::252452::252482::252484::252526::252526::252526::252526::252840::255634::257511::257584::257585::257585::257585::257585::257585::257585::257766::257766::258073::258628::259130::260454::262350::264387::265865::266787::266854::266854::266854::266854::266854::266854::266854::266854')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='266854::266868::267132::267609::268095::268936::269294::269294::269367')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='52513801', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::680::1753::2436::2439::2471::2472::2472::2472')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='2745::2776::2776::2776::2864::3939::4434::5207::6983::::14587::18809::20724::20924::21523::23196::23587::24084::24088::24088::24119::24933::24978::24978::26406::26764::26799::26799::27079::28094::29584::30678::31242::32211::33301::34181::34685::35088::35546::36806::37336::39798::42396::45166::47608::49447::50139::50139::50155')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='50155::50156::50158::50901::52457::52486::53171::55151::57821::60860::63632::64220::64682::64929::65169::65692::66324::66324::66469::66492::66535::66565::66565::67820::69087::69869::70780::72755::75107::75449::76279::77473::79013::80171::80973::81494::83421::84889::86582::88872::90518::92077::93266::94424::96079::96579::96579::96579')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='96594::96594::96596::97428::99092::100694::102136::103651::104547::106004::107392::108302::109410::110530::111613::113676::116005::117251::117711::118409::119188::120024::120093::121118::121602::121880::122079::123044::124994::126683::128148::128945::129025::129025::129025::129597::130475::131295::131764.303::131765.588::131766.375::131768.11::131769.198::131769.49::131769.761::131770.219::131770.236::131770.236')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='131770.236::131770.236::131770.236::131770.236::131770.868::131771.806::131773.023::131774.625::131775.589::131776.912::131778.062::131778.709::131779.295::131779.306::131779.319::131779.349::131779.386::131779.423::131779.458::131779.49::131779.499::131779.503::131779.509::131779.564::131779.587::131779.604::131779.623::131779.659::131779.709::131779.738::131779.744::131779.752::131779.755::131779.755::131779.755::131779.755::131779.755::131779.755::131779.756::131779.786::131779.819::131779.858::131779.893::131779.918::131779.926::131779.926::131779.926::131779.949')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='131779.958::131779.959::131779.96::131779.972::131780.003::131780.027::131780.049::131780.089::131780.125::131780.155::131780.179::131780.184::131780.191::131780.202::131780.222::131780.243::131780.251::131780.258::131780.261::131780.277::131780.285::131780.285::131780.288::131780.288::131780.288::131780.288::131780.288::131780.289::131780.303::131780.34::131780.35::131780.356::131780.368::131780.381::131780.384::131780.384::131780.386::131780.398::131780.415::131780.451::133205::135343::136866::137861::138272::138272::138272::138272')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='138272::138272::138272::138272::138275::138277::138290::138290::138290::138290::138355::138355::138355::138355::138355::::141088::141493::141493::141493::141493::141493::141493::141493::141493::141493::141493::141493::141997::143618::143618::143629::143681::::143714::143714::143714::143714::143725::144351::144362::144362::144362::144362::144362::144362::144362::144362::144362::144362')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='144362::144362::144362::144362::144368::144368::144368::144368::144368::144368')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='162707::162786::163107::165035::165062::165062::166481::168956::171072::171391::171391::171634::171634::171634::171634::171865::173006::174175::174175::174177::174435::174438::174438::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174540::174540::174540::174594::174594::174594::174594::174594::174598::174598::174598')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='174742::175129::175706::177731::179803::180405::180405::180646::180704::180704::180704::180771::180782::180782::180782::180801::180983::181961::182873::184086::186332::188396::189848::190504::192114::193897::194474::195204::195206::195230::195232::195397::196041::196046::196046::196046::196175::196175::196175::196678::198007::198881::198895::199043::199494::199494::199494::200058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='201353::202851::203237::203353::203825::204167::204167::204286::205778::205833::205833::209036::210970::211426::212138::214410::218156::218395::218395::219795::222368::225963::228676::228698::228941::229082::229082::230822::232237::233425::233910::235098::237273::238160::238259::238431::238431::238460::238604::239735::240685::241648::242406::244137::247471::250551::253404::253404')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='253404::253404::255527::260124::261492::261606::261606::261606::261606::261606::261692::261692::261692::261692::261794::262315::262939::264118::265921::269200::272041::272041::272049::272229::272417::272900::273909::276466::279084::281173::281349::282642::282841::283185::283198::283198::283198::283198::283198::283198::283402::284114::285244::286886::288884::291968::294884::297849')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='300954::301733::302341::302341::302341::302341::303915::306201::306693')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='52513401', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0::4177::8348::12421::16466::20389::24550::29638::35390::42329::49608::56982::64119::70819::72824::72831::72838::72845::72851::72859::72866::72873::72881::72889::72898::72906::72914::72922::72931::72938::72946::72955::72963::72972::72979::72987::72995::73004::73012::73021::73029::73037::73045::73052::73060::73067::73074::73083')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='73092::73100::73108::73116::73124::73131::73139::73147::73155::73164::73172::73180::73189::73197::73205::73213::73221::73228::73235::73242::73250::73258::73265::73273::73281::73290::73298::73307::73316::73324::73333::73341::73349::::73362::73368::73374::73381::73387::73394::73400::73407::73414::73421::73428::73436::73443::73451::73459')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='73467::73476::73484::73492::73501::73508::73516::73523::73529::73536::73543::73550::73557::73564::73571::73578::73585::73592::73599::73607::73614::73622::73630::73639::73647::73655::73663::73672::73680::73687::73694::73702::73709::73715::73721::73728::73735::73742::73748::73755::73762::73769::73776::73783::73791::73798::73806::73814')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='73823::73831::73840::73849::73858::73866::73874::73881::73888::73895::73902::73909::73917::73924::73931::73938::73945::73952::73959::73966::73973::73980::73988::73996::74005::74014::74022::74031::74039::74047::74055::74062::74069::74076::74084::74091::74098::74105::74112::76593::81912::84293::84438::84438::84438::84439::84440::84440')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='84442::84445::84450::84450::84450::84450::84510::84622::84677::::84768::84902::85161::85834::86656::87500::89034::90783::92482::94386::96003::96756::97608::98520::98568::98568::98568::98568::98568::98568::98569::98569::98570::98581::98609::98649::98656::98657::98664::98704::99059::99291::99522::99679::99730::99752::99786::99882::99882')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='99882::99882::99882::99882::99940::100346::101096::102749::105078::107527::110072::112991::115786::118656::121441::124228::128154::132149::135895::139243::142235::144665::146550::147766::148430::149132::149783::150281::151178::153396::155977::159764::164011::168363::172959::177429::181897::186612::191328::195697::200054::204127::207981::211520::214581::217705::220682::223224')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='225440::227431::229389::231128::232979::235501::238705::242877::245395::249894::254484::258685::262884::267059::271365::275747::280072::284371::288656::292567::296062::298958::301678::303643::305464::307268::309087::310721::312414::314823::317933::322153::326889::331577::336668::340944::345227::349338::151978.697::151982.614::151986.61::151990.207::151993.665::151996.943::151999.897::152002.158::152004.207::152006.194')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='152007.954::152009.635::152011.324::152012.857::152014.433::152016.586::152019.181::152022.365::152025.728::152028.288::152030.998::152034.081::152036.247::152036.284::152036.302::152036.319::152036.341::152036.359::152036.372::152036.383::152036.39::152036.393::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.399::152036.404::152036.407::152036.412::152036.414::152036.414::152036.414::152036.414::152036.417::152036.422::152036.425::152036.428::152036.432::152036.435::152036.437::152036.437::152036.437')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.441::152036.45::152036.46::152036.472::152036.476::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.489::152036.543::152036.663::152036.778::152036.883::152036.971::152037.066::152037.164::152037.257::152037.361::356685::363405::370420::377575::384134::390225::396064::401696')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='407198::412644::417883::422998::428513::435075::442229::453395::466601::479658::492177::504000::515901::527901::539997::::556036::563903::571823::579005::585326::591325::596354::600715::604992::609199::613381::617646::622539::627868::633983::640502::646650::::659328::665498::671845::678227::684766::688990::691619::694492::697849::700694::702620::704442::705572::706691::707697::708736')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='709545::709997::710690::712243::714255::716847::719609::722373::725158::727261')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::773086::776647::780296::783826::787426::791061::795844::802109::808801::815624::822498::829213::835508::841449::846886::851798::856665::859354::861263::863083::864985::867245::869803::872460::875221::877937::880561::883156')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='885657::888085::890505::893110::896194::899581::903116::906473::909677::913034::916082::918646::921093::923460::925630::927744::930053::932806::935904::939753::944540::950163::955884::961233::966673::972533::978758::985168::991668::997713::1003091::1008274::1012749::1017038::1020937::1024624::1027919::1031047::1034087::1036976::1040106::1044102::1049201::1055177::1061411::1067528::1073759::1079806')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='1085748::1091566::1097964::1104098::1109965::1115611::1121093::1126321::1130630::1134497::1137973::1139970::1141849::1143923::1145918::1147647::1149557::1153171::1157329::1161934::1166664::1171204::1175957::1180721::1185446::1190632::1196204::1201743::1207328::1212608::1217847::1222674::1226942::1231066::1234878::1238151::1241398::1244525::1247544::1250408::1253663::1257645::1262239::1267905::1274075::1280512::1287109::1293566')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='1306501::1312775::1318539::1323798::1329387::1335105::1340883::1346396::1351376::1355594::1359099::1362742::1366355::1369936::1373418::1377156::1381440::1385976::1391416::1397124::1403622::1412905::1420494::1426519::1432791::1438731::1444700::1450495::1455916::1461293::1466648::1471323::1475904::1479903::1483514::1487030::1490682::1494324::1497918::1501615::1505468::1509358::1513503::1517850::1522004::1525957::1529728::1533403')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='1537003::1541289::1546124::1551256::1556286::1561272::1565731::1569581::1572940')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='52513001', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::10::521::1009::1914::2329::2804::3476')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='4546::4682::4719::4838::5350::6165::6365::6445::6490::::6571::6643::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::7208::7679::8124::8480::9010::9501::9918::10708::10960::11079::11200::11255::11459::11656::11793::12159::12159::12159::12159::12160::12179::12215::12287::12302::12884')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='13533::14230::15062::16204::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.493::17157.511::17157.525::17157.542::17157.558::17157.579::17157.599::17157.608::17157.611::17157.612::17157.612::17157.612::17157.612::17157.613::17157.616::17157.618::17157.623::17157.631::17157.631::17157.631::17157.631::17157.631::17157.631::17157.631::17157.632::17157.649')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='17157.669::17157.686::17157.706::17157.728::17157.752::17157.771::17157.786::17157.799::17157.812::17157.824::17157.838::17157.85::17157.861::17157.871::17157.883::17157.89::17157.89::17157.89::17157.89::17157.89::17157.89::17157.891::17157.899::17157.911::17157.918::17157.92::17157.921::17157.925::17157.932::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17156::17156::17156::17156::17156::17156::17156::17156')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='17156::17156::17156::17156::17156::17156::17156::17156::17156::17156')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='26366::26648::29737::33790::37320::41038::45491::50870::56378::62066::67892::74435::81073::87748::94487::101325::108173::114671::120417::125768::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='127098::127098::127098::127098::127098::127098::127098::127098::127098')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='34601', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='6094564::6095869::6097433::6099046::6100630::6101960::6103137::6104826::6106487::6108338::6110057::6112087::6114108::6116017::6116635::6116640::6116645::6116648::6116649::6116654::6116661::6116667::6116674::6116681::6116688::6116694::6116701::6116708::6116715::6116721::6116723::6116730::6116738::6116745::6116751::6116757::6116764::6116771::6116779::6116786::6116793::6116799::6116800::6116800::6116805::6116808::6116812::6116819')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='6116826::6116832::6116832::6116834::6116838::6116839::6116839::6116845::6116852::6116859::6116866::6116873::6116880::6116887::6116893::6116898::6116899::6116899::6116899::6116901::6116902::6116904::6116905::6116910::6116917::6116924::6116931::6116938::6116945::6116952::6116957::6116961::6116968::::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116972::6116978::6116980::6116987::6116994')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='6117001::6117008::6117015::6117022::6117029::6117033::6117039::6117042::6117042::6117044::6117049::6117054::6117061::6117062::6117062::6117063::6117065::6117065::6117066::6117072::6117078::6117084::6117091::6117098::6117103::6117110::6117117::6117124::6117129::6117129::6117134::6117136::6117137::6117137::6117137::6117138::6117144::6117145::6117145::6117145::6117145::6117145::6117145::6117148::6117150::6117154::6117160::6117167')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='6117174::6117181::6117189::6117196::6117203::6117210::6117216::6117219::6117220::6117220::6117222::6117228::6117235::6117239::6117241::6117244::6117244::6117244::6117244::6117244::6117247::6117248::6117252::6117259::6117266::6117273::6117280::6117287::6117293::6117297::6117303::6117304::6117305::6117309::6117316::6117323::6117330::6117336::6117340::6118095::6118936::6119299::6119300::6120117::6120419::6120867::6121692::6123308')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='6123938::6124106::6124765::6125691::6125784::6125785::6126129::6126129::6126129::::6126129::6126129::6126164::6126173::6126173::6126358::6126531::6126576::6126840::6127612::6128455::6128455::6128757::6129880::6129981::6129983::6130133::6130473::6130485::6130485::6130485::6130485::6130493::6130493::6130493::6130493::6130493::6130493::6130493::6130561::6130649::6130649::6130649::6130649::6130649::6130649::6130792::6132016::6133175')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='6134306::6134717::6135093::6135093::6135402::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135929::6136041::6136617::6137256::6137512::6137797::6138089::6138431::6139053::6139053::6139053::6139053::6139053::6139147::6139251::6139251::6139251::6139251::6139251::6139251::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139456::6140655::6141782')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='6142609::6142828::6143032::6143032::6143032::6143032::6143032::6143032::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143039::6143056::6143056::6143382::6143545::6143545::6143545::6143545::6143545::6143545::6143545::6143545::6143587::6143713::6144135::6144783::6144816::6144816::6144816::144818.2::144818.2::144818.2::144818.2::144818.2::144818.243::144818.474::144818.48::144818.775::144819.955')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='144821.261::144822.644::144824.053::144824.584::144824.587::144824.587::144824.587::144824.62::144824.744::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.755::144824.755::144824.755::144824.755::144824.755::144824.755::144824.755::144824.756::144824.756::144824.756::144824.756::144824.757::144824.77::144824.788::144824.796::144824.802::144824.805::144824.806::144824.806::144824.806::144824.806::144824.806::144824.806::144824.809::144824.823::144824.828')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='144824.828::144824.828::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.834::144824.834::144824.834::144824.834::144824.835::144824.835::144824.84::144824.845::144824.849::144824.865::144824.876::144824.888::144824.889::144824.889::144824.889::144824.889::144824.889::144824.889::144824.889::144824.892::144824.896::144824.897::144824.9::144824.9::144824.9::6144824::6144824::6144824::6144824::6145000::6146702::6148995::6151298')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='6154011::6156885::6159821::6161781::6162424::6163565::6165278::6166868::6167755::6168671::6171312::6174315::6177014::6179609::6181568::::6182076::6182567::6183863::6185122::6186668::6188906::6190037::6191016::6192577::6194274::6196029::6196810::6196855::6196952::6197681::6198548::6198657::::6199392::6200372::6200895::6201228::6201425::6201425::6202856::6205585::6209048::6211115::6212648::6215720::6219090::6221773::6224848::6228185')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='6231530::6233901::6235517::6237264::6239554::6241943::6244049::6246003::6248291::6250880')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='6269393::6269460::6269561::6269561::6270193::6271193::6271766::6271766::6271766::6272003::6273414::6273802::6274190::6275070::6275788::6275805::6275805::6275844::6276747::6277093::6277184::6277267::6277710::6278346::6279262::6280041::6281268::6282908::6284744::6286792::6289036::6291362::6293586::6295884::6298136::6300115::6302316::6302954::6303439::6303749::6303938::6304212::6304924::6305309::6305626::6305804::6306004::6306321')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='6306407::6306407::6306407::6306407::6306407::6306417::6306562::6306904::6307399::6309517::6311643::6312611::6313875::6314868::6315228::6315352::6315385::6315835::6316016::6316023::6316023::6316023::6316023::6316023::6316023::6316113::6316460::6316755::6317177::6318036::6318383::6319038::6319038::6319632::6320620::6322099::6323027::6323528::6323962::6323967::6323967::6324143::6325141::6325322::6325724::6326020::6327132::6327132')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='6327132::6327132::6328174::6328667::6328667::6328705::6329402::6330058::6330058::6330655::6331774::6332033::6332033::6332033::6332033::6332033::6332078::6332316::6332872::6332897::6332897::6332897::6332897::6333173::6333204::6333827::6334413::6334413::6334413::6334413::6334413::6334554::6334554::6334554::6334765::6334977::6335481::6335759::6335759::6335759::6335759::6335824::6335826::6335826::6335826::6335826::6335889::6336407')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='6338047::6338719::6338729::6338729::6338729::6339065::6340354::6341766::6342723::6343432::6343924::6345002::6346115::6347018::6347048::6347050::6347091::6347091::6347091::6347091::6347406::6350200::6352077::6352150::6352150::6352150::6352150::6352150::6352150::6352150::6352331::6352331::6352638::6353193::6353695::6355019::6356915::6358952::6360430::6361352::6361420::6361420::6361420::6361420::6361420::6361420::6361420::6361420')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='6361420::6361434::6361698::6362174::6362660::6363502::6363860::6363860::6363933')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='33801', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88180102::88181176::88181859::88181861::88181894::88181896::88181896::88181896')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='88182169::88182200::88182200::88182200::88182288::88183363::88183857::88184631::88186407::::88194010::88198233::88200148::88200348::88200947::88202620::88203011::88203507::88203512::88203512::88203543::88204356::88204401::88204401::88205830::88206188::88206222::88206222::88206502::88207517::88209008::88210102::88210666::88211635::88212724::88213604::88214108::88214512::88214969::88216229::88216759::88219221::88221818::88224589::88227031::88228870::88229563::88229563::88229580')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='88229580::88229580::88229582::88230325::88231881::88231910::88232595::88234574::88237245::88240283::88243056::88243643::88244105::88244352::88244593::88245115::88245746::88245746::88245891::88245915::88245959::88245988::88245989::88247244::88248510::88249293::88250203::88252178::88254531::88254874::88255704::88256898::88258438::88259595::88260398::88260919::88262845::88264314::88266006::88268297::88269942::88271502::88272690::88273849::88275503::88276003::88276003::88276003')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='88276017::88276017::88276019::88276851::88278515::88280118::88281560::88283074::88283971::88285428::88286815::88287726::88288833::88289953::88291037::88293099::88295427::88296674::88297133::88297832::88298612::88299447::88299517::88300541::88301025::88301304::88301503::88302468::88304417::88306106::88307571::88308368::88308448::88308448::88308448::88309021::88309899::88310719::111188.016::111189.3::111190.088::111191.823::111192.91::111193.202::111193.473::111193.931::111193.948::111193.948')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='111193.948::111193.948::111193.948::111193.948::111194.58::111195.519::111196.735::111198.338::111199.302::111200.625::111201.775::111202.422::111203.008::111203.02::111203.032::111203.062::111203.098::111203.135::111203.171::111203.203::111203.212::111203.216::111203.221::111203.276::111203.299::111203.316::111203.335::111203.371::111203.422::111203.452::111203.457::111203.464::111203.468::111203.468::111203.468::111203.468::111203.468::111203.468::111203.469::111203.5::111203.532::111203.571::111203.606::111203.632::111203.639::111203.639::111203.639::111203.661')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='111203.671::111203.671::111203.672::111203.684::111203.715::111203.739::111203.761::111203.801::111203.837::111203.867::111203.891::111203.897::111203.904::111203.915::111203.935::111203.955::111203.962::111203.969::111203.972::111203.988::111203.997::111203.997::111204::111204.001::111204.001::111204.001::111204.001::111204.001::111204.016::111204.052::111204.063::111204.07::111204.081::111204.093::111204.097::111204.097::111204.099::111204.11::111204.128::111204.164::88312628::88314767::88316290::88317284::88317694::88317694::88317694::88317694')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='88317694::88317694::88317694::88317694::88317698::88317700::88317713::88317713::88317713::88317713::88317778::88317778::88317778::88317778::88317778::::88320511::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88321420::88323042::88323042::88323053::88323105::::88323137::88323137::88323137::88323137::88323148::88323775::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='88323785::88323785::88323785::88323785::88323790::88323790::88323790::88323790::88323790::88323790')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='88342130::88342209::88342529::88344458::88344485::88344485::88345905::88348379::88350494::88350813::88350813::88351056::88351056::88351056::88351056::88351287::88352428::88353598::88353598::88353601::88353859::88353862::88353862::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353965::88353965::88353965::88354018::88354018::88354018::88354018::88354018::88354021::88354021::88354021')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='88354166::88354552::88355130::88357154::88359226::88359828::88359828::88360068::88360126::88360126::88360126::88360194::88360205::88360205::88360205::88360223::88360406::88361385::88362297::88363511::88365757::88367821::88369273::88369929::88371538::88373322::88373899::88374629::88374631::88374655::88374657::88374822::88375466::88375471::88375471::88375471::88375599::88375599::88375599::88376102::88377432::88378306::88378319::88378467::88378917::88378917::88378918::88379482')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='88380777::88382275::88382661::88382777::88383250::88383592::88383592::88383711::88385203::88385257::88385257::88388459::88390394::88390850::88391561::88393834::88397579::88397819::88397819::88399218::88401792::88405386::88408100::88408122::88408365::88408505::88408505::88410246::88411660::88412849::88413333::88414521::88416696::88417583::88417683::88417854::88417854::88417883::88418027::88419159::88420108::88421071::88421828::88423559::88426894::88429975::88432828::88432828')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='88432828::88432828::88434951::88439548::88440916::88441030::88441030::88441030::88441030::88441030::88441116::88441116::88441116::88441116::88441218::88441739::88442363::88443542::88445344::88448624::88451464::88451464::88451473::88451652::88451840::88452323::88453332::88455889::88458507::88460595::88460772::88462065::88462264::88462608::88462622::88462622::88462622::88462622::88462622::88462622::88462826::88463538::88464667::88466310::88468309::88471393::88474308::88477274')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='88480378::88481157::88481766::88481766::88481766::88481766::88483340::88485626::88486118')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='33401', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='9437795::9441972::9446144::9450217::9454261::9458184::9462346::9467434::9473186::9480126::9487404::9494779::9501916::9508615::9510621::9510628::9510635::9510642::9510649::9510656::9510663::9510671::9510678::9510687::9510695::9510703::9510712::9510720::9510728::9510736::9510743::9510751::9510760::9510768::9510776::9510784::9510792::9510800::9510809::9510817::9510826::9510833::9510840::9510847::9510855::9510863::9510871::9510879')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='9510888::9510896::9510904::9510912::9510920::9510928::9510935::9510944::9510952::9510960::9510968::9510976::9510984::9510993::9511001::9511009::9511016::9511023::9511030::9511038::9511045::9511053::9511061::9511069::9511078::9511086::9511095::9511103::9511112::9511121::9511129::9511137::9511144::::9511158::9511165::9511171::9511178::9511184::9511190::9511197::9511203::9511209::9511216::9511223::9511231::9511239::9511247::9511255')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='9511264::9511272::9511280::9511289::9511297::9511305::9511313::9511320::9511327::9511333::9511340::9511347::9511354::9511361::9511368::9511375::9511382::9511389::9511397::9511404::9511412::9511419::9511427::9511435::9511443::9511451::9511460::9511468::9511476::9511484::9511492::9511500::9511506::9511513::9511519::9511526::9511533::9511539::9511546::9511553::9511559::9511565::9511572::9511580::9511587::9511595::9511603::9511611')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='9511619::9511628::9511637::9511646::9511654::9511662::9511670::9511677::9511684::9511691::9511698::9511705::9511713::9511720::9511727::9511734::9511740::9511747::9511754::9511761::9511769::9511777::9511785::9511794::9511803::9511811::9511820::9511828::9511836::9511844::9511852::9511859::9511866::9511873::9511880::9511888::9511895::9511902::9511909::9514390::9519709::9522089::9522234::9522234::9522234::9522235::9522235::9522235')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='9522237::9522240::9522245::9522245::9522245::9522245::9522305::9522417::9522472::::9522564::9522698::9522957::9523630::9524451::9525296::9526830::9528579::9530279::9532182::9533799::9534552::9535404::9536317::9536364::9536364::9536364::9536364::9536364::9536364::9536365::9536365::9536366::9536378::9536405::9536445::9536452::9536454::9536460::9536501::9536855::9537087::9537318::9537474::9537525::9537548::9537581::9537677::9537678')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='9537678::9537678::9537678::9537678::9537736::9538143::9538893::9540546::9542875::9545324::9547869::9550788::9553582::9556453::9559237::9562025::9565951::9569947::9573692::9577040::9580032::9582462::9584347::9585562::9586226::9586928::9587579::9588077::9588974::9591192::9593773::9597560::9601808::9606160::9610756::9615226::9619694::9624409::9629124::9633493::9637849::9641922::9645776::9649316::9652378::9655502::9658479::9661021')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='9663237::9665228::9667187::9668925::9670776::9673297::9676502::9680673::9683191::9687690::9692279::9696481::9700679::9704855::9709161::9713542::9717867::9722167::9726451::9730363::9733859::9736754::9739475::9741440::9743260::9745064::9746883::9748517::9750210::9752619::9755730::9759949::9764686::9769374::9774465::9778741::9783023::9787135::89775.123::89779.04::89783.036::89786.633::89790.091::89793.369::89796.324::89798.585::89800.635::89802.621')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='89804.381::89806.063::89807.752::89809.284::89810.86::89813.012::89815.607::89818.79::89822.154::89824.714::89827.425::89830.508::89832.673::89832.71::89832.728::89832.745::89832.767::89832.785::89832.798::89832.809::89832.817::89832.82::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.826::89832.831::89832.834::89832.838::89832.84::89832.84::89832.84::89832.84::89832.843::89832.848::89832.851::89832.854::89832.858::89832.861::89832.864::89832.864::89832.864')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='153420', v='89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.868::89832.877::89832.887::89832.899::89832.903::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.916::89832.97::89833.09::89833.204::89833.309::89833.397::89833.492::89833.59::89833.683::89833.788::9794482::9801201::9808217::9815372::9821930::9828022::9833861::9839493')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='17d720', v='9844996::9850441::9855681::9860795::9866311::9872873::9880027::9891193::9904398::9917454::9929974::9941796::9953698::9965698::9977794::::9993834::10001701::10009621::10016803::10023124::10029123::10034151::10038513::10042789::10046996::10051178::10055443::10060336::10065665::10071780::10078299::10084446::::10097123::10103293::10109641::10116023::10122562::10126785::10129414::10132288::10135645::10138489::10140416::10142238::10143368::10144487::10145494::10146532')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1a9640', v='10147341::10147793::10148486::10150039::10152051::10154643::10157406::10160170::10162955::10165058')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1c7460', v='10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10210882::10214444::10218093::10221623::10225223::10228858::10233641::10239906::10246598::10253420::10260295::10267010::10273305::10279245::10284682::10289594::10294461::10297150::10299060::10300879::10302781::10305041::10307600::10310256::10313017::10315732::10318357::10320952')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='1f1760', v='10323453::10325881::10328301::10330906::10333991::10337378::10340913::10344270::10347474::10350831::10353880::10356443::10358890::10361257::10363427::10365542::10367850::10370602::10373700::10377548::10382335::10387959::10393679::10399028::10404469::10410328::10416554::10422964::10429464::10435510::10440887::10446070::10450544::10454833::10458732::10462419::10465714::10468842::10471882::10474772::10477901::10481897::10486997::10492973::10499207::10505324::10511555::10517602')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='21ba60', v='10523544::10529362::10535760::10541894::10547762::10553407::10558890::10564118::10568426::10572294::10575771::10577767::10579647::10581720::10583716::10585444::10587354::10590968::10595126::10599731::10604460::10609000::10613753::10618516::10623241::10628428::10633999::10639539::10645125::10650405::10655643::10660471::10664738::10668862::10672675::10675947::10679195::10682322::10685340::10688204::10691460::10695443::10700037::10705702::10711873::10718309::10724907::10731364')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='246b70', v='10744298::10750573::10756336::10761594::10767184::10772901::10778679::10784193::10789173::10793391::10796895::10800538::10804151::10807732::10811214::10814952::10819236::10823772::10829212::10834920::10841418::10850701::10858289::10864315::10870586::10876526::10882496::10888291::10893713::10899090::10904444::10909119::10913700::10917699::10921310::10924826::10928478::10932121::10935715::10939412::10943265::10947154::10951299::10955647::10959802::10963755::10967526::10971201')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='270e70', v='10974801::10979086::10983922::10989053::10994083::10999069::11003529::11007379::11010738')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 5)
+SAX.startElement(par, memind='33001', h='3dc1a7e0')
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='0', v='38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='2a300', v='38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='55410', v='38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='7f710', v='38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612587::38613097::38613585::38614490::38614906::38615380::38616053')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='a9a10', v='38617123::38617258::38617296::38617414::38617926::38618741::38618942::38619021::38619066::::38619147::38619219::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619786::38620257::38620702::38621058::38621587::38622078::38622494::38623284::38623536::38623655::38623776::38623831::38624035::38624232::38624369::38624735::38624735::38624735::38624735::38624737::38624755::38624791::38624863::38624879::38625460')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='d4b20', v='38626110::38626807::38627639::38628781::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='fee20', v='38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398')
+SAX.endElement(val)
+SAX.characters(
+ , 6)
+SAX.startElement(val, o='129120', v='229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.399::229734.417::229734.431::229734.448::229734.465::229734.485::229734.505::229734.514::229734.517::229734.517::229734.517::229734.517::229734.517::229734.518::229734.521::229734.523::229734.528::229734.536::229734.536::229734.536::229734.536::229734.536::229734.536::229734.536::229734.537::229734.554')
+SAX.endElement(val)
+SAX.characters(
+ , 5)
+SAX.endElement(par)
+SAX.characters(
+ , 4)
+SAX.endElement(device)
+SAX.characters(
+ , 3)
+SAX.endElement(select)
+SAX.characters(
+ , 2)
+SAX.endElement(data)
+SAX.characters(
+, 1)
+SAX.endElement(electroxml)
+SAX.endDocument()
diff --git a/result/att5 b/result/att5
new file mode 100644
index 0000000..8768e36
--- /dev/null
+++ b/result/att5
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ATTLIST normId attr NMTOKENS #IMPLIED>
+]>
+<doc>
+ <!-- no normalization -->
+ <norm attr=" "/>
+ <norm attr=" foo bar "/>
+ <norm attr=" foobar"/>
+ <norm attr=" foo bar "/>
+ <norm attr="foobar "/>
+ <norm attr=" &amp; "/>
+ <norm attr=" foo&amp;bar "/>
+ <norm attr=" foobar&amp;"/>
+ <norm attr="&amp;foo bar "/>
+ <norm attr="foobar &amp;"/>
+ <norm attr=" &lt; "/>
+ <norm attr=" foo&lt;bar "/>
+ <norm attr=" foobar&lt;"/>
+ <norm attr="&lt;foo bar "/>
+ <norm attr="foobar &lt;"/>
+ <norm attr=" &#13;&#10;&#9; "/>
+ <!-- normalization -->
+ <normId attr=""/>
+ <normId attr="foo bar"/>
+ <normId attr="foobar"/>
+ <normId attr="foo bar"/>
+ <normId attr="foobar"/>
+ <normId attr="&amp;"/>
+ <normId attr="foo&amp;bar"/>
+ <normId attr="foobar&amp;"/>
+ <normId attr="&amp;foo bar"/>
+ <normId attr="foobar &amp;"/>
+ <normId attr="&lt;"/>
+ <normId attr="foo&lt;bar"/>
+ <normId attr="foobar&lt;"/>
+ <normId attr="&lt;foo bar"/>
+ <normId attr="foobar &lt;"/>
+ <normId attr="&#13;&#10;&#9;"/> <!-- PBM serializing back -->
+</doc>
diff --git a/result/att5.rdr b/result/att5.rdr
new file mode 100644
index 0000000..35220b0
--- /dev/null
+++ b/result/att5.rdr
@@ -0,0 +1,109 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 no normalization
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 1 norm 1 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 normalization
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+
+1 1 normId 1 0
+1 14 #text 0 1
+1 8 #comment 0 1 PBM serializing back
+1 14 #text 0 1
+
+0 15 doc 0 0
diff --git a/result/att5.sax b/result/att5.sax
new file mode 100644
index 0000000..ebd96f5
--- /dev/null
+++ b/result/att5.sax
@@ -0,0 +1,168 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.attributeDecl(normId, attr, 8, 3, NULL, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.characters(
+ , 3)
+SAX.comment( no normalization )
+SAX.characters(
+ , 3)
+SAX.startElement(norm, attr=' ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.startElement(norm, attr=' foo bar ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.startElement(norm, attr=' foobar')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.startElement(norm, attr=' foo bar ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.startElement(norm, attr='foobar ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(norm, attr=' &#38; ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(norm, attr=' foo&#38;bar ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(norm, attr=' foobar&#38;')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(norm, attr='&#38;foo bar ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(norm, attr='foobar &#38;')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(norm, attr=' < ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(norm, attr=' foo<bar ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(norm, attr=' foobar<')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(norm, attr='<foo bar ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(norm, attr='foobar <')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.startElement(norm, attr='
+ ')
+SAX.endElement(norm)
+SAX.characters(
+ , 3)
+SAX.comment( normalization )
+SAX.characters(
+ , 3)
+SAX.startElement(normId, attr=' ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.startElement(normId, attr=' foo bar ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.startElement(normId, attr=' foobar')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.startElement(normId, attr=' foo bar ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.startElement(normId, attr='foobar ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(normId, attr=' &#38; ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(normId, attr=' foo&#38;bar ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(normId, attr=' foobar&#38;')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(normId, attr='&#38;foo bar ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(normId, attr='foobar &#38;')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(normId, attr=' < ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(normId, attr=' foo<bar ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(normId, attr=' foobar<')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(normId, attr='<foo bar ')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.getEntity(lt)
+SAX.startElement(normId, attr='foobar <')
+SAX.endElement(normId)
+SAX.characters(
+ , 3)
+SAX.startElement(normId, attr='
+ ')
+SAX.endElement(normId)
+SAX.characters( , 1)
+SAX.comment( PBM serializing back )
+SAX.characters(
+, 1)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/att6 b/result/att6
new file mode 100644
index 0000000..338e6b7
--- /dev/null
+++ b/result/att6
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Invoice xmlns:ccts="urn:oasis:names:tc:ubl:CoreComponentParameters:1.0:0.70" xmlns:cct="urn:oasis:names:tc:ubl:CoreComponentTypes:1.0:0.70" xmlns:cat="urn:oasis:names:tc:ubl:CommonAggregateTypes:1.0:0.70" xmlns="urn:oasis:names:tc:ubl:Invoice:1.0:0.70">
+ <cat:ReferencedOrder>
+ <cat:SellersOrderID schemeID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeID" schemeAgencyID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeAgencyID" schemeVersionID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeVersionID" schemeAgencySchemeID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeAgencySchemeID" schemeAgencySchemeAgencyID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeAgencySchemeAgencyID" schemeDataURI="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeDataURI" schemeURI="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeURI" UID="pvalue-&gt;ReferencedOrder.SellersOrderID.UID" UIDRef="pvalue-&gt;ReferencedOrder.SellersOrderID.UIDRef" UIDRefs="pvalue-&gt;ReferencedOrder.SellersOrderID.UIDRefs0" language="pvalue-&gt;ReferencedOrder.SellersOrderID.language">pvalue-&gt;ReferencedOrder.SellersOrderID</cat:SellersOrderID>
+ </cat:ReferencedOrder>
+</Invoice>
diff --git a/result/att6.rdr b/result/att6.rdr
new file mode 100644
index 0000000..6d39352
--- /dev/null
+++ b/result/att6.rdr
@@ -0,0 +1,15 @@
+0 1 Invoice 0 0
+1 14 #text 0 1
+
+1 1 cat:ReferencedOrder 0 0
+2 14 #text 0 1
+
+2 1 cat:SellersOrderID 0 0
+3 3 #text 0 1 pvalue->ReferencedOrder.SellersOrderID
+2 15 cat:SellersOrderID 0 0
+2 14 #text 0 1
+
+1 15 cat:ReferencedOrder 0 0
+1 14 #text 0 1
+
+0 15 Invoice 0 0
diff --git a/result/att6.sax b/result/att6.sax
new file mode 100644
index 0000000..8b05a2e
--- /dev/null
+++ b/result/att6.sax
@@ -0,0 +1,22 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(Invoice, xmlns:ccts='urn:oasis:names:tc:ubl:CoreComponentParameters:1.0:0.70', xmlns:cct='urn:oasis:names:tc:ubl:CoreComponentTypes:1.0:0.70', xmlns:cat='urn:oasis:names:tc:ubl:CommonAggregateTypes:1.0:0.70', xmlns='urn:oasis:names:tc:ubl:Invoice:1.0:0.70')
+SAX.characters(
+ , 4)
+SAX.startElement(cat:ReferencedOrder)
+SAX.characters(
+ , 7)
+SAX.getEntity(gt)
+SAX.startElement(cat:SellersOrderID, schemeID='pvalue->ReferencedOrder.SellersOrderID.schemeID', schemeAgencyID='pvalue->ReferencedOrder.SellersOrderID.schemeAgencyID', schemeVersionID='pvalue->ReferencedOrder.SellersOrderID.schemeVersionID', schemeAgencySchemeID='pvalue->ReferencedOrder.SellersOrderID.schemeAgencySchemeID', schemeAgencySchemeAgencyID='pvalue->ReferencedOrder.SellersOrderID.schemeAgencySchemeAgencyID', schemeDataURI='pvalue->ReferencedOrder.SellersOrderID.schemeDataURI', schemeURI='pvalue->ReferencedOrder.SellersOrderID.schemeURI', UID='pvalue->ReferencedOrder.SellersOrderID.UID', UIDRef='pvalue->ReferencedOrder.SellersOrderID.UIDRef', UIDRefs='pvalue->ReferencedOrder.SellersOrderID.UIDRefs0', language='pvalue->ReferencedOrder.SellersOrderID.language')
+SAX.characters(pvalue-, 7)
+SAX.getEntity(gt)
+SAX.characters(>, 1)
+SAX.characters(ReferencedOrder.SellersOrderID, 30)
+SAX.endElement(cat:SellersOrderID)
+SAX.characters(
+ , 4)
+SAX.endElement(cat:ReferencedOrder)
+SAX.characters(
+, 1)
+SAX.endElement(Invoice)
+SAX.endDocument()
diff --git a/result/att7 b/result/att7
new file mode 100644
index 0000000..56d0835
--- /dev/null
+++ b/result/att7
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE x [
+<!ELEMENT x (test)*>
+<!ELEMENT test EMPTY>
+<!ATTLIST test att CDATA "attvalue">
+<!ENTITY test.ent "<test/>">
+]>
+<x>
+ <test/>
+ &test.ent;
+</x>
diff --git a/result/att7.rdr b/result/att7.rdr
new file mode 100644
index 0000000..47b19b4
--- /dev/null
+++ b/result/att7.rdr
@@ -0,0 +1,11 @@
+0 10 x 0 0
+0 1 x 0 0
+1 14 #text 0 1
+
+1 1 test 1 0
+1 14 #text 0 1
+
+1 5 test.ent 0 0
+1 14 #text 0 1
+
+0 15 x 0 0
diff --git a/result/att7.sax b/result/att7.sax
new file mode 100644
index 0000000..c093279
--- /dev/null
+++ b/result/att7.sax
@@ -0,0 +1,24 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(x, , )
+SAX.elementDecl(x, 4, ...)
+SAX.elementDecl(test, 1, ...)
+SAX.attributeDecl(test, att, 1, 1, attvalue, ...)
+SAX.entityDecl(test.ent, 1, (null), (null), <test/>)
+SAX.getEntity(test.ent)
+SAX.externalSubset(x, , )
+SAX.startElement(x)
+SAX.characters(
+ , 5)
+SAX.startElement(test)
+SAX.endElement(test)
+SAX.characters(
+ , 5)
+SAX.getEntity(test.ent)
+SAX.startElement(test)
+SAX.endElement(test)
+SAX.reference(test.ent)
+SAX.characters(
+, 1)
+SAX.endElement(x)
+SAX.endDocument()
diff --git a/result/att8 b/result/att8
new file mode 100644
index 0000000..1d807a2
--- /dev/null
+++ b/result/att8
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<ino:response xmlns:ino="http://namespaces.softwareag.com/tamino/response2" xmlns:xql="http://metalab.unc.edu/xql/" ino:sessionid="556" ino:sessionkey="1590469677"><xql:query>/bsk:DocPart[@docId='20040308152601345236' and @docPartNo=1]</xql:query><ino:message ino:returnvalue="0"><ino:messageline>XQL Request processing</ino:messageline></ino:message><xql:result><bsk:DocPart xmlns:bsk="http://www.heitec.net/sara4/tamino/basket" docId="20040308152601345236" docPartNo="1" ino:id="15290"><bsk:File name="4898WPZEO2M65" size="75195"> </bsk:File></bsk:DocPart></xql:result><ino:message ino:returnvalue="0"><ino:messageline>XQL Request processed</ino:messageline></ino:message></ino:response>
diff --git a/result/att8.rdr b/result/att8.rdr
new file mode 100644
index 0000000..52fde32
--- /dev/null
+++ b/result/att8.rdr
@@ -0,0 +1,22 @@
+0 1 ino:response 0 0
+1 1 xql:query 0 0
+2 3 #text 0 1 /bsk:DocPart[@docId='20040308152601345236' and @docPartNo=1]
+1 15 xql:query 0 0
+1 1 ino:message 0 0
+2 1 ino:messageline 0 0
+3 3 #text 0 1 XQL Request processing
+2 15 ino:messageline 0 0
+1 15 ino:message 0 0
+1 1 xql:result 0 0
+2 1 bsk:DocPart 0 0
+3 1 bsk:File 0 0
+4 14 #text 0 1
+3 15 bsk:File 0 0
+2 15 bsk:DocPart 0 0
+1 15 xql:result 0 0
+1 1 ino:message 0 0
+2 1 ino:messageline 0 0
+3 3 #text 0 1 XQL Request processed
+2 15 ino:messageline 0 0
+1 15 ino:message 0 0
+0 15 ino:response 0 0
diff --git a/result/att8.sax b/result/att8.sax
new file mode 100644
index 0000000..a3666c7
--- /dev/null
+++ b/result/att8.sax
@@ -0,0 +1,31 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(ino:response, xmlns:ino='http://namespaces.softwareag.com/tamino/response2', xmlns:xql='http://metalab.unc.edu/xql/', ino:sessionid='556', ino:sessionkey='1590469677')
+SAX.startElement(xql:query)
+SAX.characters(/bsk:DocPart[@docId=, 20)
+SAX.getEntity(apos)
+SAX.characters(', 1)
+SAX.characters(20040308152601345236, 20)
+SAX.getEntity(apos)
+SAX.characters(', 1)
+SAX.characters( and @docPartNo=1], 18)
+SAX.endElement(xql:query)
+SAX.startElement(ino:message, ino:returnvalue='0')
+SAX.startElement(ino:messageline)
+SAX.characters(XQL Request processing, 22)
+SAX.endElement(ino:messageline)
+SAX.endElement(ino:message)
+SAX.startElement(xql:result)
+SAX.startElement(bsk:DocPart, docId='20040308152601345236', docPartNo='1', ino:id='15290', xmlns:bsk='http://www.heitec.net/sara4/tamino/basket')
+SAX.startElement(bsk:File, name='4898WPZEO2M65', size='75195')
+SAX.characters( , 1)
+SAX.endElement(bsk:File)
+SAX.endElement(bsk:DocPart)
+SAX.endElement(xql:result)
+SAX.startElement(ino:message, ino:returnvalue='0')
+SAX.startElement(ino:messageline)
+SAX.characters(XQL Request processed, 21)
+SAX.endElement(ino:messageline)
+SAX.endElement(ino:message)
+SAX.endElement(ino:response)
+SAX.endDocument()
diff --git a/result/attrib.xml b/result/attrib.xml
new file mode 100644
index 0000000..89a1e57
--- /dev/null
+++ b/result/attrib.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<item title="Icrontic.com - Warning: Breakdancing midget with tourette's syndrome on-board&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;" url="http://www.icrontic.com/" first_time="985034339" last_time="985034339" visits="1"/>
diff --git a/result/attrib.xml.rdr b/result/attrib.xml.rdr
new file mode 100644
index 0000000..de6325a
--- /dev/null
+++ b/result/attrib.xml.rdr
@@ -0,0 +1 @@
+0 1 item 1 0
diff --git a/result/attrib.xml.sax b/result/attrib.xml.sax
new file mode 100644
index 0000000..35e0462
--- /dev/null
+++ b/result/attrib.xml.sax
@@ -0,0 +1,6 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.getEntity(apos)
+SAX.startElement(item, title='Icrontic.com - Warning: Breakdancing midget with tourette's syndrome on-board                                                ', url='http://www.icrontic.com/', first_time='985034339', last_time='985034339', visits='1')
+SAX.endElement(item)
+SAX.endDocument()
diff --git a/result/automata/a b/result/automata/a
new file mode 100644
index 0000000..4ece411
--- /dev/null
+++ b/result/automata/a
@@ -0,0 +1,4 @@
+=> Passed
+=> Failed
+=> Failed
+=> Failed
diff --git a/result/automata/aba b/result/automata/aba
new file mode 100644
index 0000000..051b9bd
--- /dev/null
+++ b/result/automata/aba
@@ -0,0 +1,6 @@
+=> Passed
+=> Passed
+=> Passed
+=> Failed
+=> Failed
+=> Failed
diff --git a/result/automata/abaa b/result/automata/abaa
new file mode 100644
index 0000000..c74769e
--- /dev/null
+++ b/result/automata/abaa
@@ -0,0 +1,5 @@
+=> Passed
+=> Passed
+=> Passed
+=> Failed
+=> Failed
diff --git a/result/automata/abba b/result/automata/abba
new file mode 100644
index 0000000..1a60848
--- /dev/null
+++ b/result/automata/abba
@@ -0,0 +1,4 @@
+=> Passed
+=> Passed
+=> Failed
+=> Failed
diff --git a/result/automata/po b/result/automata/po
new file mode 100644
index 0000000..fafcae5
--- /dev/null
+++ b/result/automata/po
@@ -0,0 +1,2 @@
+=> Passed
+=> Passed
diff --git a/result/bigentname.xml b/result/bigentname.xml
new file mode 100644
index 0000000..6b7183f
--- /dev/null
+++ b/result/bigentname.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name '"Yes"'>
+<!ENTITY WhatHeSaid "He said &very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name;">
+]>
+<doc>&WhatHeSaid;</doc>
diff --git a/result/bigentname.xml.rdr b/result/bigentname.xml.rdr
new file mode 100644
index 0000000..c394a46
--- /dev/null
+++ b/result/bigentname.xml.rdr
@@ -0,0 +1,4 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 5 WhatHeSaid 0 0
+0 15 doc 0 0
diff --git a/result/bigentname.xml.sax b/result/bigentname.xml.sax
new file mode 100644
index 0000000..1ee19ab
--- /dev/null
+++ b/result/bigentname.xml.sax
@@ -0,0 +1,17 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.entityDecl(very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name, 1, (null), (null), "Yes")
+SAX.getEntity(very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name)
+SAX.entityDecl(WhatHeSaid, 1, (null), (null), He said &very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name;)
+SAX.getEntity(WhatHeSaid)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.getEntity(WhatHeSaid)
+SAX.characters(He said , 8)
+SAX.getEntity(very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name)
+SAX.characters("Yes", 5)
+SAX.reference(very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name)
+SAX.reference(WhatHeSaid)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/bigname.xml b/result/bigname.xml
new file mode 100644
index 0000000..885fd7c
--- /dev/null
+++ b/result/bigname.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<this_is_a_very_large_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name/>
diff --git a/result/bigname.xml.rdr b/result/bigname.xml.rdr
new file mode 100644
index 0000000..71284c1
--- /dev/null
+++ b/result/bigname.xml.rdr
@@ -0,0 +1 @@
+0 1 this_is_a_very_large_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name 1 0
diff --git a/result/bigname.xml.sax b/result/bigname.xml.sax
new file mode 100644
index 0000000..31945be
--- /dev/null
+++ b/result/bigname.xml.sax
@@ -0,0 +1,5 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(this_is_a_very_large_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name)
+SAX.endElement(this_is_a_very_large_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name)
+SAX.endDocument()
diff --git a/result/bigname2.xml b/result/bigname2.xml
new file mode 100644
index 0000000..a48c359
--- /dev/null
+++ b/result/bigname2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix:start_nc_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name xmlns:this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix="http://www.example.com/testns/"/>
diff --git a/result/bigname2.xml.rdr b/result/bigname2.xml.rdr
new file mode 100644
index 0000000..6de9dd7
--- /dev/null
+++ b/result/bigname2.xml.rdr
@@ -0,0 +1 @@
+0 1 this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix:start_nc_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name 1 0
diff --git a/result/bigname2.xml.sax b/result/bigname2.xml.sax
new file mode 100644
index 0000000..7c353e5
--- /dev/null
+++ b/result/bigname2.xml.sax
@@ -0,0 +1,5 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix:start_nc_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name, xmlns:this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix='http://www.example.com/testns/')
+SAX.endElement(this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix:start_nc_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name)
+SAX.endDocument()
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-09 b/result/c14n/exc-without-comments/merlin-c14n-two-09
new file mode 100644
index 0000000..279fd6c
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-09
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <bar:Something>
+ <foo:Something>
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-10 b/result/c14n/exc-without-comments/merlin-c14n-two-10
new file mode 100644
index 0000000..279fd6c
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-10
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <bar:Something>
+ <foo:Something>
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-11 b/result/c14n/exc-without-comments/merlin-c14n-two-11
new file mode 100644
index 0000000..279fd6c
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-11
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <bar:Something>
+ <foo:Something>
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-12 b/result/c14n/exc-without-comments/merlin-c14n-two-12
new file mode 100644
index 0000000..cd53346
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-12
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar">
+
+ <bar:Something>
+
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+
+ </bar:Something>
+
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-13 b/result/c14n/exc-without-comments/merlin-c14n-two-13
new file mode 100644
index 0000000..27fb6e5
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-13
@@ -0,0 +1,9 @@
+<bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-14 b/result/c14n/exc-without-comments/merlin-c14n-two-14
new file mode 100644
index 0000000..27fb6e5
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-14
@@ -0,0 +1,9 @@
+<bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-15 b/result/c14n/exc-without-comments/merlin-c14n-two-15
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-15
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-16 b/result/c14n/exc-without-comments/merlin-c14n-two-16
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-16
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-17 b/result/c14n/exc-without-comments/merlin-c14n-two-17
new file mode 100644
index 0000000..27fb6e5
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-17
@@ -0,0 +1,9 @@
+<bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-18 b/result/c14n/exc-without-comments/merlin-c14n-two-18
new file mode 100644
index 0000000..6675391
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-18
@@ -0,0 +1,9 @@
+<bar:Something xmlns="http://example.org/" xmlns:bar="http://example.org/bar">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <bar:Something>
+ <foo:Something>
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-19 b/result/c14n/exc-without-comments/merlin-c14n-two-19
new file mode 100644
index 0000000..279fd6c
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-19
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <bar:Something>
+ <foo:Something>
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-20 b/result/c14n/exc-without-comments/merlin-c14n-two-20
new file mode 100644
index 0000000..279fd6c
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-20
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <bar:Something>
+ <foo:Something>
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-21 b/result/c14n/exc-without-comments/merlin-c14n-two-21
new file mode 100644
index 0000000..cd53346
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-21
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar">
+
+ <bar:Something>
+
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+
+ </bar:Something>
+
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-22 b/result/c14n/exc-without-comments/merlin-c14n-two-22
new file mode 100644
index 0000000..27fb6e5
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-22
@@ -0,0 +1,9 @@
+<bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-23 b/result/c14n/exc-without-comments/merlin-c14n-two-23
new file mode 100644
index 0000000..27fb6e5
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-23
@@ -0,0 +1,9 @@
+<bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-24 b/result/c14n/exc-without-comments/merlin-c14n-two-24
new file mode 100644
index 0000000..162c746
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-24
@@ -0,0 +1 @@
+ xmlns="http://example.org/" xmlns="http://example.org/" xmlns="http://example.org/" xmlns="http://example.org/" xmlns="http://example.org/" \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-25 b/result/c14n/exc-without-comments/merlin-c14n-two-25
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-25
diff --git a/result/c14n/exc-without-comments/merlin-c14n-two-26 b/result/c14n/exc-without-comments/merlin-c14n-two-26
new file mode 100644
index 0000000..1f7eb6e
--- /dev/null
+++ b/result/c14n/exc-without-comments/merlin-c14n-two-26
@@ -0,0 +1,9 @@
+<bar:Something>
+ <foo:Something xmlns="http://example.org/">
+ <bar:Something xmlns="">
+ <foo:Something xmlns="http://example.org/">
+ <baz:Something xmlns=""></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/test-0 b/result/c14n/exc-without-comments/test-0
new file mode 100644
index 0000000..3806ea0
--- /dev/null
+++ b/result/c14n/exc-without-comments/test-0
@@ -0,0 +1,7 @@
+<e6 test="../baz">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="" xmlns:a="http://www.w3.org" a:foo="bar">
+ <e9 attr="default"></e9>
+ </e8>
+ </e7>
+ </e6> \ No newline at end of file
diff --git a/result/c14n/exc-without-comments/test-1 b/result/c14n/exc-without-comments/test-1
new file mode 100644
index 0000000..bd5930f
--- /dev/null
+++ b/result/c14n/exc-without-comments/test-1
@@ -0,0 +1,7 @@
+<e6 xmlns:a="http://www.w3.org" test="../baz">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="" a:foo="bar">
+ <e9 xmlns:a="http://www.ietf.org" attr="default"></e9>
+ </e8>
+ </e7>
+ </e6> \ No newline at end of file
diff --git a/result/c14n/with-comments/example-1 b/result/c14n/with-comments/example-1
new file mode 100644
index 0000000..d98d168
--- /dev/null
+++ b/result/c14n/with-comments/example-1
@@ -0,0 +1,6 @@
+<?xml-stylesheet href="doc.xsl"
+ type="text/xsl" ?>
+<doc>Hello, world!<!-- Comment 1 --></doc>
+<?pi-without-data?>
+<!-- Comment 2 -->
+<!-- Comment 3 --> \ No newline at end of file
diff --git a/result/c14n/with-comments/example-2 b/result/c14n/with-comments/example-2
new file mode 100644
index 0000000..2afa15c
--- /dev/null
+++ b/result/c14n/with-comments/example-2
@@ -0,0 +1,11 @@
+<doc>
+ <clean> </clean>
+ <dirty> A B </dirty>
+ <mixed>
+ A
+ <clean> </clean>
+ B
+ <dirty> A B </dirty>
+ C
+ </mixed>
+</doc> \ No newline at end of file
diff --git a/result/c14n/with-comments/example-3 b/result/c14n/with-comments/example-3
new file mode 100644
index 0000000..4c287e6
--- /dev/null
+++ b/result/c14n/with-comments/example-3
@@ -0,0 +1,14 @@
+<doc>
+ <e1></e1>
+ <e2></e2>
+ <e3 id="elem3" name="elem3"></e3>
+ <e4 id="elem4" name="elem4"></e4>
+ <e5 xmlns="http://www.uvic.ca" xmlns:a="http://www.w3.org" xmlns:b="http://www.ietf.org" attr="I'm" attr2="all" b:attr="sorted" a:attr="out"></e5>
+ <e6 xmlns:a="http://www.w3.org">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="">
+ <e9 xmlns:a="http://www.ietf.org" attr="default"></e9>
+ </e8>
+ </e7>
+ </e6>
+</doc> \ No newline at end of file
diff --git a/result/c14n/with-comments/example-4 b/result/c14n/with-comments/example-4
new file mode 100644
index 0000000..26937c8
--- /dev/null
+++ b/result/c14n/with-comments/example-4
@@ -0,0 +1,9 @@
+<doc>
+ <text>First line&#xD;
+Second line</text>
+ <value>2</value>
+ <compute>value&gt;"0" &amp;&amp; value&lt;"10" ?"valid":"error"</compute>
+ <compute expr="value>&quot;0&quot; &amp;&amp; value&lt;&quot;10&quot; ?&quot;valid&quot;:&quot;error&quot;">valid</compute>
+ <norm attr=" ' &#xD;&#xA;&#x9; ' "></norm>
+ <normId id="' &#xD;&#xA;&#x9; '"></normId>
+</doc> \ No newline at end of file
diff --git a/result/c14n/with-comments/example-5 b/result/c14n/with-comments/example-5
new file mode 100644
index 0000000..457d402
--- /dev/null
+++ b/result/c14n/with-comments/example-5
@@ -0,0 +1,4 @@
+<doc attrExtEnt="entExt">
+ Hello, world!
+</doc>
+<!-- Let world.txt contain "world" (excluding the quotes) --> \ No newline at end of file
diff --git a/result/c14n/with-comments/example-6 b/result/c14n/with-comments/example-6
new file mode 100644
index 0000000..0be38f9
--- /dev/null
+++ b/result/c14n/with-comments/example-6
@@ -0,0 +1 @@
+<doc>©</doc> \ No newline at end of file
diff --git a/result/c14n/with-comments/example-7 b/result/c14n/with-comments/example-7
new file mode 100644
index 0000000..0a96cc4
--- /dev/null
+++ b/result/c14n/with-comments/example-7
@@ -0,0 +1 @@
+<e1 xmlns="http://www.ietf.org" xmlns:w3c="http://www.w3.org"><e3 xmlns="" id="E3" xml:space="preserve"></e3></e1> \ No newline at end of file
diff --git a/result/c14n/without-comments/example-1 b/result/c14n/without-comments/example-1
new file mode 100644
index 0000000..af9a977
--- /dev/null
+++ b/result/c14n/without-comments/example-1
@@ -0,0 +1,4 @@
+<?xml-stylesheet href="doc.xsl"
+ type="text/xsl" ?>
+<doc>Hello, world!</doc>
+<?pi-without-data?> \ No newline at end of file
diff --git a/result/c14n/without-comments/example-2 b/result/c14n/without-comments/example-2
new file mode 100644
index 0000000..2afa15c
--- /dev/null
+++ b/result/c14n/without-comments/example-2
@@ -0,0 +1,11 @@
+<doc>
+ <clean> </clean>
+ <dirty> A B </dirty>
+ <mixed>
+ A
+ <clean> </clean>
+ B
+ <dirty> A B </dirty>
+ C
+ </mixed>
+</doc> \ No newline at end of file
diff --git a/result/c14n/without-comments/example-3 b/result/c14n/without-comments/example-3
new file mode 100644
index 0000000..4c287e6
--- /dev/null
+++ b/result/c14n/without-comments/example-3
@@ -0,0 +1,14 @@
+<doc>
+ <e1></e1>
+ <e2></e2>
+ <e3 id="elem3" name="elem3"></e3>
+ <e4 id="elem4" name="elem4"></e4>
+ <e5 xmlns="http://www.uvic.ca" xmlns:a="http://www.w3.org" xmlns:b="http://www.ietf.org" attr="I'm" attr2="all" b:attr="sorted" a:attr="out"></e5>
+ <e6 xmlns:a="http://www.w3.org">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="">
+ <e9 xmlns:a="http://www.ietf.org" attr="default"></e9>
+ </e8>
+ </e7>
+ </e6>
+</doc> \ No newline at end of file
diff --git a/result/c14n/without-comments/example-4 b/result/c14n/without-comments/example-4
new file mode 100644
index 0000000..26937c8
--- /dev/null
+++ b/result/c14n/without-comments/example-4
@@ -0,0 +1,9 @@
+<doc>
+ <text>First line&#xD;
+Second line</text>
+ <value>2</value>
+ <compute>value&gt;"0" &amp;&amp; value&lt;"10" ?"valid":"error"</compute>
+ <compute expr="value>&quot;0&quot; &amp;&amp; value&lt;&quot;10&quot; ?&quot;valid&quot;:&quot;error&quot;">valid</compute>
+ <norm attr=" ' &#xD;&#xA;&#x9; ' "></norm>
+ <normId id="' &#xD;&#xA;&#x9; '"></normId>
+</doc> \ No newline at end of file
diff --git a/result/c14n/without-comments/example-5 b/result/c14n/without-comments/example-5
new file mode 100644
index 0000000..c232e74
--- /dev/null
+++ b/result/c14n/without-comments/example-5
@@ -0,0 +1,3 @@
+<doc attrExtEnt="entExt">
+ Hello, world!
+</doc> \ No newline at end of file
diff --git a/result/c14n/without-comments/example-6 b/result/c14n/without-comments/example-6
new file mode 100644
index 0000000..0be38f9
--- /dev/null
+++ b/result/c14n/without-comments/example-6
@@ -0,0 +1 @@
+<doc>©</doc> \ No newline at end of file
diff --git a/result/c14n/without-comments/example-7 b/result/c14n/without-comments/example-7
new file mode 100644
index 0000000..0a96cc4
--- /dev/null
+++ b/result/c14n/without-comments/example-7
@@ -0,0 +1 @@
+<e1 xmlns="http://www.ietf.org" xmlns:w3c="http://www.w3.org"><e3 xmlns="" id="E3" xml:space="preserve"></e3></e1> \ No newline at end of file
diff --git a/result/c14n/without-comments/merlin-c14n-two-00 b/result/c14n/without-comments/merlin-c14n-two-00
new file mode 100644
index 0000000..2ca2b30
--- /dev/null
+++ b/result/c14n/without-comments/merlin-c14n-two-00
@@ -0,0 +1,9 @@
+<bar:Something xmlns="http://example.org/" xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/without-comments/merlin-c14n-two-01 b/result/c14n/without-comments/merlin-c14n-two-01
new file mode 100644
index 0000000..be42edf
--- /dev/null
+++ b/result/c14n/without-comments/merlin-c14n-two-01
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar" xml:lang="en-ie">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <bar:Something xmlns:bar="http://example.org/bar">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/without-comments/merlin-c14n-two-02 b/result/c14n/without-comments/merlin-c14n-two-02
new file mode 100644
index 0000000..be42edf
--- /dev/null
+++ b/result/c14n/without-comments/merlin-c14n-two-02
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar" xml:lang="en-ie">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <bar:Something xmlns:bar="http://example.org/bar">
+ <foo:Something xmlns:foo="http://example.org/foo">
+ <baz:Something xmlns:baz="http://example.org/baz"></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/without-comments/merlin-c14n-two-03 b/result/c14n/without-comments/merlin-c14n-two-03
new file mode 100644
index 0000000..170354a
--- /dev/null
+++ b/result/c14n/without-comments/merlin-c14n-two-03
@@ -0,0 +1,9 @@
+<bar:Something xmlns:bar="http://example.org/bar" xml:lang="en-ie">
+ xmlns:foo="http://example.org/foo"
+ <bar:Something xml:lang="en-ie">
+ xmlns:foo="http://example.org/foo"
+ <baz:Something xmlns:baz="http://example.org/baz" xml:lang="en-ie"></baz:Something>
+
+ </bar:Something>
+
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/without-comments/merlin-c14n-two-04 b/result/c14n/without-comments/merlin-c14n-two-04
new file mode 100644
index 0000000..185cbf3
--- /dev/null
+++ b/result/c14n/without-comments/merlin-c14n-two-04
@@ -0,0 +1,9 @@
+<bar:Something xml:lang="en-ie">
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/without-comments/merlin-c14n-two-05 b/result/c14n/without-comments/merlin-c14n-two-05
new file mode 100644
index 0000000..185cbf3
--- /dev/null
+++ b/result/c14n/without-comments/merlin-c14n-two-05
@@ -0,0 +1,9 @@
+<bar:Something xml:lang="en-ie">
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/without-comments/merlin-c14n-two-06 b/result/c14n/without-comments/merlin-c14n-two-06
new file mode 100644
index 0000000..bb45d0b
--- /dev/null
+++ b/result/c14n/without-comments/merlin-c14n-two-06
@@ -0,0 +1 @@
+ xmlns="http://example.org/" xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" \ No newline at end of file
diff --git a/result/c14n/without-comments/merlin-c14n-two-07 b/result/c14n/without-comments/merlin-c14n-two-07
new file mode 100644
index 0000000..c42ffc1
--- /dev/null
+++ b/result/c14n/without-comments/merlin-c14n-two-07
@@ -0,0 +1 @@
+ xmlns:bar="http://example.org/bar" xmlns:foo="http://example.org/foo" xmlns:bar="http://example.org/bar" xmlns:foo="http://example.org/foo" xmlns:baz="http://example.org/baz" \ No newline at end of file
diff --git a/result/c14n/without-comments/merlin-c14n-two-08 b/result/c14n/without-comments/merlin-c14n-two-08
new file mode 100644
index 0000000..4f5bbb4
--- /dev/null
+++ b/result/c14n/without-comments/merlin-c14n-two-08
@@ -0,0 +1,9 @@
+<bar:Something xml:lang="en-ie">
+ <foo:Something xmlns="http://example.org/">
+ <bar:Something xmlns="">
+ <foo:Something xmlns="http://example.org/">
+ <baz:Something xmlns=""></baz:Something>
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something> \ No newline at end of file
diff --git a/result/c14n/without-comments/test-0 b/result/c14n/without-comments/test-0
new file mode 100644
index 0000000..013de33
--- /dev/null
+++ b/result/c14n/without-comments/test-0
@@ -0,0 +1 @@
+I am the text. \ No newline at end of file
diff --git a/result/c14n/without-comments/test-1 b/result/c14n/without-comments/test-1
new file mode 100644
index 0000000..0150f4a
--- /dev/null
+++ b/result/c14n/without-comments/test-1
@@ -0,0 +1,31 @@
+<X509Data xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <X509SubjectName>
+ CN=Merlin Hughes,O=Baltimore Technologies\, Ltd.,ST=Dublin,C=IE
+ </X509SubjectName>
+ <X509IssuerSerial>
+ <X509IssuerName>
+ CN=Test DSA CA,O=Baltimore Technologies\, Ltd.,ST=Dublin,C=IE
+ </X509IssuerName>
+ <X509SerialNumber>970849936</X509SerialNumber>
+ </X509IssuerSerial>
+ <X509Certificate>
+ MIIDNzCCAvWgAwIBAgIEOd3+kDAJBgcqhkjOOAQDMFsxCzAJBgNVBAYTAklFMQ8w
+ DQYDVQQIEwZEdWJsaW4xJTAjBgNVBAoTHEJhbHRpbW9yZSBUZWNobm9sb2dpZXMs
+ IEx0ZC4xFDASBgNVBAMTC1Rlc3QgRFNBIENBMB4XDTAwMTAwNjE2MzIxNVoXDTAx
+ MTAwNjE2MzIxNFowXTELMAkGA1UEBhMCSUUxDzANBgNVBAgTBkR1YmxpbjElMCMG
+ A1UEChMcQmFsdGltb3JlIFRlY2hub2xvZ2llcywgTHRkLjEWMBQGA1UEAxMNTWVy
+ bGluIEh1Z2hlczCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQDaJjfDTrawMHf8MiUt
+ Y54b37hSmYNnR3KpGT10uU1Dqppcju06uN0iGbqf947DjkBC25hKnqykK31xBw0E
+ CPbYq/KC98kghdf2xJCu6B8aqJ95K9jdVflJ3WP7PQxJn+fmM23zy6HYLXVICpfq
+ etdNj/VHCShZE3bdJiE6VobSFQIVAPQecqS2PaTDprcQnkwx4MHTRXhrAoGAMuGA
+ lqeB1ax+vyO2+Osubjhl7pHxLu47RIH+/M52DjESA9KMSrwzsYx8yNR2WooByrE0
+ t6fu0VncK7UK8olO4t7wpv2z4AFQPRVCKFwo0qgn5aKIkICGMlrRy81avb27wGcW
+ othx3iPPMtFXtoDqK0JItaI9R8zc1msFhM1GKMYDgYQAAoGActA8YGxrtngg/zKV
+ vqEOefnwmViFztcnPBYPlJsvh6yKI4iDm68fnp4Mi3RrJ6bZAygFrUIQLxLjV+OJ
+ tgJAEto0xAs+Mehuq1DkSFEpP3oDzCTOsrOiS1DwQe4oIb7zVk/9l7aPtJMHW0LV
+ lMdwZNFNNJoqMcT2ZfCPrfvYvQ2jRzBFMB4GA1UdEQQXMBWBE21lcmxpbkBiYWx0
+ aW1vcmUuaWUwDgYDVR0PAQH/BAQDAgeAMBMGA1UdIwQMMAqACEJZQG0KwRbPMAkG
+ ByqGSM44BAMDMQAwLgIVAK4skWEFYgrggaJA8vYAwSjg12+KAhUAwHTo7wd4tENw
+ 9LAKPklQ/74fH18=
+ </X509Certificate>
+ </X509Data> \ No newline at end of file
diff --git a/result/c14n/without-comments/test-2 b/result/c14n/without-comments/test-2
new file mode 100644
index 0000000..c829481
--- /dev/null
+++ b/result/c14n/without-comments/test-2
@@ -0,0 +1,3 @@
+<n1:elem2 xmlns:n0="foo://bar" xmlns:n1="http://example.net" xmlns:n3="ftp://example.org" xml:lang="en">
+ <n3:stuff></n3:stuff>
+ </n1:elem2> \ No newline at end of file
diff --git a/result/c14n/without-comments/test-3 b/result/c14n/without-comments/test-3
new file mode 100644
index 0000000..318cb19
--- /dev/null
+++ b/result/c14n/without-comments/test-3
@@ -0,0 +1,7 @@
+<e6 xmlns:a="http://www.w3.org" xmlns:foo="http://www.bar.org" test="../baz" xml:base="http://www.example.org/2002/">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="" a:foo="bar">
+ <e9 xmlns:a="http://www.ietf.org" attr="default"></e9>
+ </e8>
+ </e7>
+ </e6> \ No newline at end of file
diff --git a/result/catalogs/catal b/result/catalogs/catal
new file mode 100644
index 0000000..52b2afe
--- /dev/null
+++ b/result/catalogs/catal
@@ -0,0 +1,5 @@
+> test/catalogs/calstblx.dtd
+> test/catalogs/docbook.dtd
+> test/catalogs/soextblx.dtd
+> test/catalogs/dbgenent.mod
+> \ No newline at end of file
diff --git a/result/catalogs/docbook b/result/catalogs/docbook
new file mode 100644
index 0000000..804005d
--- /dev/null
+++ b/result/catalogs/docbook
@@ -0,0 +1,6 @@
+> /usr/share/xml/docbook/xml/4.1.2/dbpoolx.mod
+> http://www.oasis-open.org/docbook/xml/4.1.2/dbcentx.mod
+> http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+> http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+> file:///usr/share/xml/toto/toto.dtd
+> \ No newline at end of file
diff --git a/result/catalogs/mycatalog.empty b/result/catalogs/mycatalog.empty
new file mode 100644
index 0000000..84f482e
--- /dev/null
+++ b/result/catalogs/mycatalog.empty
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"/>
diff --git a/result/catalogs/mycatalog.full b/result/catalogs/mycatalog.full
new file mode 100644
index 0000000..5ee1ccf
--- /dev/null
+++ b/result/catalogs/mycatalog.full
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+ <public publicId="Pubid" uri="sysid"/>
+ <public publicId="Pubid2" uri="sysid2"/>
+ <public publicId="Pubid3" uri="sysid3"/>
+</catalog>
diff --git a/result/catalogs/registry b/result/catalogs/registry
new file mode 100644
index 0000000..e035c55
--- /dev/null
+++ b/result/catalogs/registry
@@ -0,0 +1,5 @@
+> /usr/share/xml/docbook/xml/4.1.2/dbpoolx.mod
+> http://www.oasis-open.org/docbook/xml/4.1.2/dbcentx.mod
+> /usr/share/xml/docbook/xml/4.1.2/dbpoolx.mod
+> http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
+> \ No newline at end of file
diff --git a/result/cdata b/result/cdata
new file mode 100644
index 0000000..180ea46
--- /dev/null
+++ b/result/cdata
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<doc>
+<![CDATA[<greeting>Hello, world!</greeting>]]>
+</doc>
diff --git a/result/cdata.rdr b/result/cdata.rdr
new file mode 100644
index 0000000..316b8bf
--- /dev/null
+++ b/result/cdata.rdr
@@ -0,0 +1,7 @@
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 4 #cdata-section 0 1 <greeting>Hello, world!</greeting>
+1 14 #text 0 1
+
+0 15 doc 0 0
diff --git a/result/cdata.sax b/result/cdata.sax
new file mode 100644
index 0000000..f917f99
--- /dev/null
+++ b/result/cdata.sax
@@ -0,0 +1,10 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(doc)
+SAX.characters(
+, 1)
+SAX.pcdata(<greeting>Hello, wor, 34)
+SAX.characters(
+, 1)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/cdata2 b/result/cdata2
new file mode 100644
index 0000000..b4db791
--- /dev/null
+++ b/result/cdata2
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<collection>
+ <test><![CDATA[
+ <![CDATA[abc]]]>]&gt;<![CDATA[
+ ]]></test>
+</collection>
diff --git a/result/cdata2.rdr b/result/cdata2.rdr
new file mode 100644
index 0000000..e69a672
--- /dev/null
+++ b/result/cdata2.rdr
@@ -0,0 +1,13 @@
+0 1 collection 0 0
+1 14 #text 0 1
+
+1 1 test 0 0
+2 4 #cdata-section 0 1
+ <![CDATA[abc]
+2 3 #text 0 1 ]>
+2 4 #cdata-section 0 1
+
+1 15 test 0 0
+1 14 #text 0 1
+
+0 15 collection 0 0
diff --git a/result/cdata2.sax b/result/cdata2.sax
new file mode 100644
index 0000000..46b025e
--- /dev/null
+++ b/result/cdata2.sax
@@ -0,0 +1,18 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(collection)
+SAX.characters(
+ , 3)
+SAX.startElement(test)
+SAX.pcdata(
+ <![CDATA[abc], 18)
+SAX.characters(], 1)
+SAX.getEntity(gt)
+SAX.characters(>, 1)
+SAX.pcdata(
+ , 3)
+SAX.endElement(test)
+SAX.characters(
+, 1)
+SAX.endElement(collection)
+SAX.endDocument()
diff --git a/result/comment.xml b/result/comment.xml
new file mode 100644
index 0000000..98c5eff
--- /dev/null
+++ b/result/comment.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<doc>
+<!-- document start -->
+<empty/>
+<!-- document end -->
+</doc>
diff --git a/result/comment.xml.rdr b/result/comment.xml.rdr
new file mode 100644
index 0000000..9551ced
--- /dev/null
+++ b/result/comment.xml.rdr
@@ -0,0 +1,13 @@
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 document start
+1 14 #text 0 1
+
+1 1 empty 1 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 document end
+1 14 #text 0 1
+
+0 15 doc 0 0
diff --git a/result/comment.xml.sax b/result/comment.xml.sax
new file mode 100644
index 0000000..d969036
--- /dev/null
+++ b/result/comment.xml.sax
@@ -0,0 +1,17 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(doc)
+SAX.characters(
+, 1)
+SAX.comment( document start )
+SAX.characters(
+, 1)
+SAX.startElement(empty)
+SAX.endElement(empty)
+SAX.characters(
+, 1)
+SAX.comment( document end )
+SAX.characters(
+, 1)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/comment2.xml b/result/comment2.xml
new file mode 100644
index 0000000..9e122ec
--- /dev/null
+++ b/result/comment2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!-- document start -->
+<doc>
+<empty/>
+</doc>
+<!-- document end -->
diff --git a/result/comment2.xml.rdr b/result/comment2.xml.rdr
new file mode 100644
index 0000000..4a3279d
--- /dev/null
+++ b/result/comment2.xml.rdr
@@ -0,0 +1,9 @@
+0 8 #comment 0 1 document start
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 1 empty 1 0
+1 14 #text 0 1
+
+0 15 doc 0 0
+0 8 #comment 0 1 document end
diff --git a/result/comment2.xml.sax b/result/comment2.xml.sax
new file mode 100644
index 0000000..bffd7e1
--- /dev/null
+++ b/result/comment2.xml.sax
@@ -0,0 +1,13 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.comment( document start )
+SAX.startElement(doc)
+SAX.characters(
+, 1)
+SAX.startElement(empty)
+SAX.endElement(empty)
+SAX.characters(
+, 1)
+SAX.endElement(doc)
+SAX.comment( document end )
+SAX.endDocument()
diff --git a/result/dav1 b/result/dav1
new file mode 100644
index 0000000..cbfd4c4
--- /dev/null
+++ b/result/dav1
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/" xmlns:R="http://www.foo.bar/boxschema">
+ <D:response>
+ <D:prop>
+ <R:bigbox>
+ <R:BoxType>Box type A</R:BoxType>
+ </R:bigbox>
+ <R:author>
+ <R:Name>J.J. Dingleheimerschmidt</R:Name>
+ </R:author>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:prop>
+ <R:DingALing/>
+ <R:Random/>
+ </D:prop>
+ <D:status>HTTP/1.1 403 Forbidden</D:status>
+ <D:responsedescription> The user does not have access to the DingALing property.
+ </D:responsedescription>
+ </D:response>
+ <D:responsedescription> There has been an access violation error.
+ </D:responsedescription>
+</D:multistatus>
diff --git a/result/dav1.rdr b/result/dav1.rdr
new file mode 100644
index 0000000..d8d44e6
--- /dev/null
+++ b/result/dav1.rdr
@@ -0,0 +1,78 @@
+0 1 D:multistatus 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 R:bigbox 0 0
+4 14 #text 0 1
+
+4 1 R:BoxType 0 0
+5 3 #text 0 1 Box type A
+4 15 R:BoxType 0 0
+4 14 #text 0 1
+
+3 15 R:bigbox 0 0
+3 14 #text 0 1
+
+3 1 R:author 0 0
+4 14 #text 0 1
+
+4 1 R:Name 0 0
+5 3 #text 0 1 J.J. Dingleheimerschmidt
+4 15 R:Name 0 0
+4 14 #text 0 1
+
+3 15 R:author 0 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP/1.1 200 OK
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 R:DingALing 1 0
+3 14 #text 0 1
+
+3 1 R:Random 1 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP/1.1 403 Forbidden
+2 15 D:status 0 0
+2 14 #text 0 1
+
+2 1 D:responsedescription 0 0
+3 3 #text 0 1 The user does not have access to the DingALing property.
+
+2 15 D:responsedescription 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+1 1 D:responsedescription 0 0
+2 3 #text 0 1 There has been an access violation error.
+
+1 15 D:responsedescription 0 0
+1 14 #text 0 1
+
+0 15 D:multistatus 0 0
diff --git a/result/dav1.sax b/result/dav1.sax
new file mode 100644
index 0000000..9c1988f
--- /dev/null
+++ b/result/dav1.sax
@@ -0,0 +1,81 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:multistatus, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:R='http://www.foo.bar/boxschema')
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(R:bigbox)
+SAX.characters(
+ , 9)
+SAX.startElement(R:BoxType)
+SAX.characters(Box type A, 10)
+SAX.endElement(R:BoxType)
+SAX.characters(
+ , 7)
+SAX.endElement(R:bigbox)
+SAX.characters(
+ , 7)
+SAX.startElement(R:author)
+SAX.characters(
+ , 9)
+SAX.startElement(R:Name)
+SAX.characters(J.J. Dingleheimerschmidt, 24)
+SAX.endElement(R:Name)
+SAX.characters(
+ , 7)
+SAX.endElement(R:author)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP/1.1 200 OK, 15)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(R:DingALing)
+SAX.endElement(R:DingALing)
+SAX.characters(
+ , 7)
+SAX.startElement(R:Random)
+SAX.endElement(R:Random)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP/1.1 403 Forbidden, 22)
+SAX.endElement(D:status)
+SAX.characters(
+ , 5)
+SAX.startElement(D:responsedescription)
+SAX.characters( The user does not have access, 64)
+SAX.endElement(D:responsedescription)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+ , 3)
+SAX.startElement(D:responsedescription)
+SAX.characters( There has been an access viol, 44)
+SAX.endElement(D:responsedescription)
+SAX.characters(
+, 1)
+SAX.endElement(D:multistatus)
+SAX.endDocument()
diff --git a/result/dav10 b/result/dav10
new file mode 100644
index 0000000..4b00da4
--- /dev/null
+++ b/result/dav10
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<D:owner xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:href>http://www.ics.uci.edu/~ejw/contact.html</D:href>
+</D:owner>
diff --git a/result/dav10.rdr b/result/dav10.rdr
new file mode 100644
index 0000000..bfb552d
--- /dev/null
+++ b/result/dav10.rdr
@@ -0,0 +1,9 @@
+0 1 D:owner 0 0
+1 14 #text 0 1
+
+1 1 D:href 0 0
+2 3 #text 0 1 http://www.ics.uci.edu/~ejw/contact.html
+1 15 D:href 0 0
+1 14 #text 0 1
+
+0 15 D:owner 0 0
diff --git a/result/dav10.sax b/result/dav10.sax
new file mode 100644
index 0000000..aa98251
--- /dev/null
+++ b/result/dav10.sax
@@ -0,0 +1,12 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:owner, xmlns:D='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:href)
+SAX.characters(http://www.ics.uci.edu/~ejw/co, 40)
+SAX.endElement(D:href)
+SAX.characters(
+, 1)
+SAX.endElement(D:owner)
+SAX.endDocument()
diff --git a/result/dav11 b/result/dav11
new file mode 100644
index 0000000..8ac23d6
--- /dev/null
+++ b/result/dav11
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<D:prop xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:lockdiscovery>
+ <D:activelock>
+ <D:locktype>write</D:locktype>
+ <D:lockscope>exclusive</D:lockscope>
+ <D:addlocks/>
+ <D:owner>
+ <D:href>
+ http://www.ics.uci.edu/~ejw/contact.html
+ </D:href>
+ </D:owner>
+ <D:timeout>Second-604800</D:timeout>
+ <D:locktoken>
+ <D:href>
+ opaquelocktoken:xyz122393481230912asdfa09s8df09s7df
+ </D:href>
+ </D:locktoken>
+ </D:activelock>
+ </D:lockdiscovery>
+</D:prop>
diff --git a/result/dav11.rdr b/result/dav11.rdr
new file mode 100644
index 0000000..088afeb
--- /dev/null
+++ b/result/dav11.rdr
@@ -0,0 +1,60 @@
+0 1 D:prop 0 0
+1 14 #text 0 1
+
+1 1 D:lockdiscovery 0 0
+2 14 #text 0 1
+
+2 1 D:activelock 0 0
+3 14 #text 0 1
+
+3 1 D:locktype 0 0
+4 3 #text 0 1 write
+3 15 D:locktype 0 0
+3 14 #text 0 1
+
+3 1 D:lockscope 0 0
+4 3 #text 0 1 exclusive
+3 15 D:lockscope 0 0
+3 14 #text 0 1
+
+3 1 D:addlocks 1 0
+3 14 #text 0 1
+
+3 1 D:owner 0 0
+4 14 #text 0 1
+
+4 1 D:href 0 0
+5 3 #text 0 1
+ http://www.ics.uci.edu/~ejw/contact.html
+
+4 15 D:href 0 0
+4 14 #text 0 1
+
+3 15 D:owner 0 0
+3 14 #text 0 1
+
+3 1 D:timeout 0 0
+4 3 #text 0 1 Second-604800
+3 15 D:timeout 0 0
+3 14 #text 0 1
+
+3 1 D:locktoken 0 0
+4 14 #text 0 1
+
+4 1 D:href 0 0
+5 3 #text 0 1
+ opaquelocktoken:xyz122393481230912asdfa09s8df09s7df
+
+4 15 D:href 0 0
+4 14 #text 0 1
+
+3 15 D:locktoken 0 0
+3 14 #text 0 1
+
+2 15 D:activelock 0 0
+2 14 #text 0 1
+
+1 15 D:lockdiscovery 0 0
+1 14 #text 0 1
+
+0 15 D:prop 0 0
diff --git a/result/dav11.sax b/result/dav11.sax
new file mode 100644
index 0000000..43815e5
--- /dev/null
+++ b/result/dav11.sax
@@ -0,0 +1,62 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:prop, xmlns:D='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:lockdiscovery)
+SAX.characters(
+ , 5)
+SAX.startElement(D:activelock)
+SAX.characters(
+ , 7)
+SAX.startElement(D:locktype)
+SAX.characters(write, 5)
+SAX.endElement(D:locktype)
+SAX.characters(
+ , 7)
+SAX.startElement(D:lockscope)
+SAX.characters(exclusive, 9)
+SAX.endElement(D:lockscope)
+SAX.characters(
+ , 7)
+SAX.startElement(D:addlocks)
+SAX.endElement(D:addlocks)
+SAX.characters(
+ , 7)
+SAX.startElement(D:owner)
+SAX.characters(
+ , 9)
+SAX.startElement(D:href)
+SAX.characters(
+ http://www.ics.uci.edu/~ejw, 46)
+SAX.endElement(D:href)
+SAX.characters(
+ , 7)
+SAX.endElement(D:owner)
+SAX.characters(
+ , 7)
+SAX.startElement(D:timeout)
+SAX.characters(Second-604800, 13)
+SAX.endElement(D:timeout)
+SAX.characters(
+ , 7)
+SAX.startElement(D:locktoken)
+SAX.characters(
+ , 9)
+SAX.startElement(D:href)
+SAX.characters(
+ opaquelocktoken:xyz122393, 59)
+SAX.endElement(D:href)
+SAX.characters(
+ , 7)
+SAX.endElement(D:locktoken)
+SAX.characters(
+ , 5)
+SAX.endElement(D:activelock)
+SAX.characters(
+ , 3)
+SAX.endElement(D:lockdiscovery)
+SAX.characters(
+, 1)
+SAX.endElement(D:prop)
+SAX.endDocument()
diff --git a/result/dav12 b/result/dav12
new file mode 100644
index 0000000..d8d03fe
--- /dev/null
+++ b/result/dav12
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<D:href xmlns:D="http://www.ietf.org/standards/dav/">http://www.ics.uci.edu/~ejw/contact.html</D:href>
diff --git a/result/dav12.rdr b/result/dav12.rdr
new file mode 100644
index 0000000..0df7943
--- /dev/null
+++ b/result/dav12.rdr
@@ -0,0 +1,3 @@
+0 1 D:href 0 0
+1 3 #text 0 1 http://www.ics.uci.edu/~ejw/contact.html
+0 15 D:href 0 0
diff --git a/result/dav12.sax b/result/dav12.sax
new file mode 100644
index 0000000..67b9f64
--- /dev/null
+++ b/result/dav12.sax
@@ -0,0 +1,6 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:href, xmlns:D='http://www.ietf.org/standards/dav/')
+SAX.characters(http://www.ics.uci.edu/~ejw/co, 40)
+SAX.endElement(D:href)
+SAX.endDocument()
diff --git a/result/dav13 b/result/dav13
new file mode 100644
index 0000000..f44ae38
--- /dev/null
+++ b/result/dav13
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:href>
+ http://webdav.sb.aol.com/workspace/webdav/proposal.doc
+ </D:href>
+ <D:href>
+ http://webdav.sb.aol.com/workspace/webdav/
+ </D:href>
+ <D:status>HTTP/1.1 202 Accepted</D:status>
+ </D:response>
+ <D:response>
+ <D:href>http://foo.bar/blah</D:href>
+ <D:status>HTTP/1.1 403 Forbidden</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/dav13.rdr b/result/dav13.rdr
new file mode 100644
index 0000000..ffe978d
--- /dev/null
+++ b/result/dav13.rdr
@@ -0,0 +1,45 @@
+0 1 D:multistatus 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:href 0 0
+3 3 #text 0 1
+ http://webdav.sb.aol.com/workspace/webdav/proposal.doc
+
+2 15 D:href 0 0
+2 14 #text 0 1
+
+2 1 D:href 0 0
+3 3 #text 0 1
+ http://webdav.sb.aol.com/workspace/webdav/
+
+2 15 D:href 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP/1.1 202 Accepted
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:href 0 0
+3 3 #text 0 1 http://foo.bar/blah
+2 15 D:href 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP/1.1 403 Forbidden
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+0 15 D:multistatus 0 0
diff --git a/result/dav13.sax b/result/dav13.sax
new file mode 100644
index 0000000..16edfd1
--- /dev/null
+++ b/result/dav13.sax
@@ -0,0 +1,46 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:multistatus, xmlns:D='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:href)
+SAX.characters(
+ http://webdav.sb.aol.com/, 66)
+SAX.endElement(D:href)
+SAX.characters(
+ , 5)
+SAX.startElement(D:href)
+SAX.characters(
+ http://webdav.sb.aol.com/, 54)
+SAX.endElement(D:href)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP/1.1 202 Accepted, 21)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:href)
+SAX.characters(http://foo.bar/blah, 19)
+SAX.endElement(D:href)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP/1.1 403 Forbidden, 22)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+, 1)
+SAX.endElement(D:multistatus)
+SAX.endDocument()
diff --git a/result/dav15 b/result/dav15
new file mode 100644
index 0000000..b80802e
--- /dev/null
+++ b/result/dav15
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<D:prop xmlns:D="http://www.ietf.org/standards/dav/" xmlns:F="http://www.foocorp.com/Project/">
+ <D:Source>
+ <D:link>
+ <F:projfiles>Source</F:projfiles>
+ <D:src>http://foo.bar/program</D:src>
+ <D:dst>http://foo.bar/src/main.c</D:dst>
+ </D:link>
+ <D:link>
+ <F:projfiles>Library</F:projfiles>
+ <D:src>http://foo.bar/program</D:src>
+ <D:dst>http://foo.bar/src/main.lib</D:dst>
+ </D:link>
+ <D:link>
+ <F:projfiles>Makefile</F:projfiles>
+ <D:src>http://foo.bar/program</D:src>
+ <D:dst>http://foo.bar/src/makefile</D:dst>
+ </D:link>
+ </D:Source>
+</D:prop>
diff --git a/result/dav15.rdr b/result/dav15.rdr
new file mode 100644
index 0000000..a4a4e7c
--- /dev/null
+++ b/result/dav15.rdr
@@ -0,0 +1,73 @@
+0 1 D:prop 0 0
+1 14 #text 0 1
+
+1 1 D:Source 0 0
+2 14 #text 0 1
+
+2 1 D:link 0 0
+3 14 #text 0 1
+
+3 1 F:projfiles 0 0
+4 3 #text 0 1 Source
+3 15 F:projfiles 0 0
+3 14 #text 0 1
+
+3 1 D:src 0 0
+4 3 #text 0 1 http://foo.bar/program
+3 15 D:src 0 0
+3 14 #text 0 1
+
+3 1 D:dst 0 0
+4 3 #text 0 1 http://foo.bar/src/main.c
+3 15 D:dst 0 0
+3 14 #text 0 1
+
+2 15 D:link 0 0
+2 14 #text 0 1
+
+2 1 D:link 0 0
+3 14 #text 0 1
+
+3 1 F:projfiles 0 0
+4 3 #text 0 1 Library
+3 15 F:projfiles 0 0
+3 14 #text 0 1
+
+3 1 D:src 0 0
+4 3 #text 0 1 http://foo.bar/program
+3 15 D:src 0 0
+3 14 #text 0 1
+
+3 1 D:dst 0 0
+4 3 #text 0 1 http://foo.bar/src/main.lib
+3 15 D:dst 0 0
+3 14 #text 0 1
+
+2 15 D:link 0 0
+2 14 #text 0 1
+
+2 1 D:link 0 0
+3 14 #text 0 1
+
+3 1 F:projfiles 0 0
+4 3 #text 0 1 Makefile
+3 15 F:projfiles 0 0
+3 14 #text 0 1
+
+3 1 D:src 0 0
+4 3 #text 0 1 http://foo.bar/program
+3 15 D:src 0 0
+3 14 #text 0 1
+
+3 1 D:dst 0 0
+4 3 #text 0 1 http://foo.bar/src/makefile
+3 15 D:dst 0 0
+3 14 #text 0 1
+
+2 15 D:link 0 0
+2 14 #text 0 1
+
+1 15 D:Source 0 0
+1 14 #text 0 1
+
+0 15 D:prop 0 0
diff --git a/result/dav15.sax b/result/dav15.sax
new file mode 100644
index 0000000..634ec7d
--- /dev/null
+++ b/result/dav15.sax
@@ -0,0 +1,76 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:prop, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:F='http://www.foocorp.com/Project/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:Source)
+SAX.characters(
+ , 5)
+SAX.startElement(D:link)
+SAX.characters(
+ , 7)
+SAX.startElement(F:projfiles)
+SAX.characters(Source, 6)
+SAX.endElement(F:projfiles)
+SAX.characters(
+ , 7)
+SAX.startElement(D:src)
+SAX.characters(http://foo.bar/program, 22)
+SAX.endElement(D:src)
+SAX.characters(
+ , 7)
+SAX.startElement(D:dst)
+SAX.characters(http://foo.bar/src/main.c, 25)
+SAX.endElement(D:dst)
+SAX.characters(
+ , 5)
+SAX.endElement(D:link)
+SAX.characters(
+ , 5)
+SAX.startElement(D:link)
+SAX.characters(
+ , 7)
+SAX.startElement(F:projfiles)
+SAX.characters(Library, 7)
+SAX.endElement(F:projfiles)
+SAX.characters(
+ , 7)
+SAX.startElement(D:src)
+SAX.characters(http://foo.bar/program, 22)
+SAX.endElement(D:src)
+SAX.characters(
+ , 7)
+SAX.startElement(D:dst)
+SAX.characters(http://foo.bar/src/main.lib, 27)
+SAX.endElement(D:dst)
+SAX.characters(
+ , 5)
+SAX.endElement(D:link)
+SAX.characters(
+ , 5)
+SAX.startElement(D:link)
+SAX.characters(
+ , 7)
+SAX.startElement(F:projfiles)
+SAX.characters(Makefile, 8)
+SAX.endElement(F:projfiles)
+SAX.characters(
+ , 7)
+SAX.startElement(D:src)
+SAX.characters(http://foo.bar/program, 22)
+SAX.endElement(D:src)
+SAX.characters(
+ , 7)
+SAX.startElement(D:dst)
+SAX.characters(http://foo.bar/src/makefile, 27)
+SAX.endElement(D:dst)
+SAX.characters(
+ , 5)
+SAX.endElement(D:link)
+SAX.characters(
+ , 3)
+SAX.endElement(D:Source)
+SAX.characters(
+, 1)
+SAX.endElement(D:prop)
+SAX.endDocument()
diff --git a/result/dav16 b/result/dav16
new file mode 100644
index 0000000..9a7dc36
--- /dev/null
+++ b/result/dav16
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<D:propfind xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:prop>
+ <lockdiscovery/>
+ </D:prop>
+</D:propfind>
diff --git a/result/dav16.rdr b/result/dav16.rdr
new file mode 100644
index 0000000..97a9933
--- /dev/null
+++ b/result/dav16.rdr
@@ -0,0 +1,13 @@
+0 1 D:propfind 0 0
+1 14 #text 0 1
+
+1 1 D:prop 0 0
+2 14 #text 0 1
+
+2 1 lockdiscovery 1 0
+2 14 #text 0 1
+
+1 15 D:prop 0 0
+1 14 #text 0 1
+
+0 15 D:propfind 0 0
diff --git a/result/dav16.sax b/result/dav16.sax
new file mode 100644
index 0000000..a21252b
--- /dev/null
+++ b/result/dav16.sax
@@ -0,0 +1,17 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:propfind, xmlns:D='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(lockdiscovery)
+SAX.endElement(lockdiscovery)
+SAX.characters(
+ , 3)
+SAX.endElement(D:prop)
+SAX.characters(
+, 1)
+SAX.endElement(D:propfind)
+SAX.endDocument()
diff --git a/result/dav17 b/result/dav17
new file mode 100644
index 0000000..1137662
--- /dev/null
+++ b/result/dav17
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:prop>
+ <D:lockdiscovery>
+ <D:activelock>
+ <D:locktype>write</D:locktype>
+ <D:lockscope>exclusive</D:lockscope>
+ <D:addlocks>
+ <D:href>http://foo.com/doc/</D:href>
+ </D:addlocks>
+ <D:owner>Jane Smith</D:owner>
+ <D:timeout>Infinite</D:timeout>
+ <D:locktoken>
+ <D:href>iamuri:unique!!!!!</D:href>
+ </D:locktoken>
+ </D:activelock>
+ </D:lockdiscovery>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/dav17.rdr b/result/dav17.rdr
new file mode 100644
index 0000000..a47b64e
--- /dev/null
+++ b/result/dav17.rdr
@@ -0,0 +1,75 @@
+0 1 D:multistatus 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 D:lockdiscovery 0 0
+4 14 #text 0 1
+
+4 1 D:activelock 0 0
+5 14 #text 0 1
+
+5 1 D:locktype 0 0
+6 3 #text 0 1 write
+5 15 D:locktype 0 0
+5 14 #text 0 1
+
+5 1 D:lockscope 0 0
+6 3 #text 0 1 exclusive
+5 15 D:lockscope 0 0
+5 14 #text 0 1
+
+5 1 D:addlocks 0 0
+6 14 #text 0 1
+
+6 1 D:href 0 0
+7 3 #text 0 1 http://foo.com/doc/
+6 15 D:href 0 0
+6 14 #text 0 1
+
+5 15 D:addlocks 0 0
+5 14 #text 0 1
+
+5 1 D:owner 0 0
+6 3 #text 0 1 Jane Smith
+5 15 D:owner 0 0
+5 14 #text 0 1
+
+5 1 D:timeout 0 0
+6 3 #text 0 1 Infinite
+5 15 D:timeout 0 0
+5 14 #text 0 1
+
+5 1 D:locktoken 0 0
+6 14 #text 0 1
+
+6 1 D:href 0 0
+7 3 #text 0 1 iamuri:unique!!!!!
+6 15 D:href 0 0
+6 14 #text 0 1
+
+5 15 D:locktoken 0 0
+5 14 #text 0 1
+
+4 15 D:activelock 0 0
+4 14 #text 0 1
+
+3 15 D:lockdiscovery 0 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP/1.1 200 OK
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+0 15 D:multistatus 0 0
diff --git a/result/dav17.sax b/result/dav17.sax
new file mode 100644
index 0000000..83f5bce
--- /dev/null
+++ b/result/dav17.sax
@@ -0,0 +1,78 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:multistatus, xmlns:D='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(D:lockdiscovery)
+SAX.characters(
+ , 9)
+SAX.startElement(D:activelock)
+SAX.characters(
+ , 11)
+SAX.startElement(D:locktype)
+SAX.characters(write, 5)
+SAX.endElement(D:locktype)
+SAX.characters(
+ , 11)
+SAX.startElement(D:lockscope)
+SAX.characters(exclusive, 9)
+SAX.endElement(D:lockscope)
+SAX.characters(
+ , 11)
+SAX.startElement(D:addlocks)
+SAX.characters(
+ , 13)
+SAX.startElement(D:href)
+SAX.characters(http://foo.com/doc/, 19)
+SAX.endElement(D:href)
+SAX.characters(
+ , 11)
+SAX.endElement(D:addlocks)
+SAX.characters(
+ , 11)
+SAX.startElement(D:owner)
+SAX.characters(Jane Smith, 10)
+SAX.endElement(D:owner)
+SAX.characters(
+ , 11)
+SAX.startElement(D:timeout)
+SAX.characters(Infinite, 8)
+SAX.endElement(D:timeout)
+SAX.characters(
+ , 11)
+SAX.startElement(D:locktoken)
+SAX.characters(
+ , 13)
+SAX.startElement(D:href)
+SAX.characters(iamuri:unique!!!!!, 18)
+SAX.endElement(D:href)
+SAX.characters(
+ , 11)
+SAX.endElement(D:locktoken)
+SAX.characters(
+ , 9)
+SAX.endElement(D:activelock)
+SAX.characters(
+ , 7)
+SAX.endElement(D:lockdiscovery)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP/1.1 200 OK, 15)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+, 1)
+SAX.endElement(D:multistatus)
+SAX.endDocument()
diff --git a/result/dav18 b/result/dav18
new file mode 100644
index 0000000..3de1c19
--- /dev/null
+++ b/result/dav18
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<D:propfind xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:prop>
+ <supportedlock/>
+ </D:prop>
+</D:propfind>
diff --git a/result/dav18.rdr b/result/dav18.rdr
new file mode 100644
index 0000000..9de17af
--- /dev/null
+++ b/result/dav18.rdr
@@ -0,0 +1,13 @@
+0 1 D:propfind 0 0
+1 14 #text 0 1
+
+1 1 D:prop 0 0
+2 14 #text 0 1
+
+2 1 supportedlock 1 0
+2 14 #text 0 1
+
+1 15 D:prop 0 0
+1 14 #text 0 1
+
+0 15 D:propfind 0 0
diff --git a/result/dav18.sax b/result/dav18.sax
new file mode 100644
index 0000000..39f40e6
--- /dev/null
+++ b/result/dav18.sax
@@ -0,0 +1,17 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:propfind, xmlns:D='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(supportedlock)
+SAX.endElement(supportedlock)
+SAX.characters(
+ , 3)
+SAX.endElement(D:prop)
+SAX.characters(
+, 1)
+SAX.endElement(D:propfind)
+SAX.endDocument()
diff --git a/result/dav19 b/result/dav19
new file mode 100644
index 0000000..9535ffc
--- /dev/null
+++ b/result/dav19
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:prop>
+ <D:supportedlock>
+ <D:LockEntry>
+ <D:locktype>Write</D:locktype>
+ <D:lockscope>Exclusive</D:lockscope>
+ </D:LockEntry>
+ <D:LockEntry>
+ <D:locktype>Write</D:locktype>
+ <D:lockscope>Shared</D:lockscope>
+ </D:LockEntry>
+ </D:supportedlock>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/dav19.rdr b/result/dav19.rdr
new file mode 100644
index 0000000..d2c1e00
--- /dev/null
+++ b/result/dav19.rdr
@@ -0,0 +1,59 @@
+0 1 D:multistatus 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 D:supportedlock 0 0
+4 14 #text 0 1
+
+4 1 D:LockEntry 0 0
+5 14 #text 0 1
+
+5 1 D:locktype 0 0
+6 3 #text 0 1 Write
+5 15 D:locktype 0 0
+5 14 #text 0 1
+
+5 1 D:lockscope 0 0
+6 3 #text 0 1 Exclusive
+5 15 D:lockscope 0 0
+5 14 #text 0 1
+
+4 15 D:LockEntry 0 0
+4 14 #text 0 1
+
+4 1 D:LockEntry 0 0
+5 14 #text 0 1
+
+5 1 D:locktype 0 0
+6 3 #text 0 1 Write
+5 15 D:locktype 0 0
+5 14 #text 0 1
+
+5 1 D:lockscope 0 0
+6 3 #text 0 1 Shared
+5 15 D:lockscope 0 0
+5 14 #text 0 1
+
+4 15 D:LockEntry 0 0
+4 14 #text 0 1
+
+3 15 D:supportedlock 0 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP/1.1 200 OK
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+0 15 D:multistatus 0 0
diff --git a/result/dav19.sax b/result/dav19.sax
new file mode 100644
index 0000000..c65e03d
--- /dev/null
+++ b/result/dav19.sax
@@ -0,0 +1,62 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:multistatus, xmlns:D='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(D:supportedlock)
+SAX.characters(
+ , 9)
+SAX.startElement(D:LockEntry)
+SAX.characters(
+ , 11)
+SAX.startElement(D:locktype)
+SAX.characters(Write, 5)
+SAX.endElement(D:locktype)
+SAX.characters(
+ , 11)
+SAX.startElement(D:lockscope)
+SAX.characters(Exclusive, 9)
+SAX.endElement(D:lockscope)
+SAX.characters(
+ , 9)
+SAX.endElement(D:LockEntry)
+SAX.characters(
+ , 9)
+SAX.startElement(D:LockEntry)
+SAX.characters(
+ , 11)
+SAX.startElement(D:locktype)
+SAX.characters(Write, 5)
+SAX.endElement(D:locktype)
+SAX.characters(
+ , 11)
+SAX.startElement(D:lockscope)
+SAX.characters(Shared, 6)
+SAX.endElement(D:lockscope)
+SAX.characters(
+ , 9)
+SAX.endElement(D:LockEntry)
+SAX.characters(
+ , 7)
+SAX.endElement(D:supportedlock)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP/1.1 200 OK, 15)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+, 1)
+SAX.endElement(D:multistatus)
+SAX.endDocument()
diff --git a/result/dav2 b/result/dav2
new file mode 100644
index 0000000..f831b4b
--- /dev/null
+++ b/result/dav2
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<S:multistatus xmlns:S="http://www.ietf.org/standards/dav/" xmlns:R="http://www.foo.bar/boxschema/">
+ <S:response>
+ <S:href>http://www.foo.bar/container/</S:href>
+ <S:prop>
+ <R:bigbox>
+ <R:BoxType>Box type A</R:BoxType>
+ </R:bigbox>
+ <R:author>
+ <R:Name>Hadrian</R:Name>
+ </R:author>
+ </S:prop>
+ <S:status>HTTP 1.1 200 OK</S:status>
+ </S:response>
+ <S:response>
+ <S:href>http://www.foo.bar/container/index.html</S:href>
+ <S:prop>
+ <R:bigbox>
+ <R:BoxType>Box type B</R:BoxType>
+ </R:bigbox>
+ </S:prop>
+ <S:status>HTTP 1.1 200 OK</S:status>
+ </S:response>
+</S:multistatus>
diff --git a/result/dav2.rdr b/result/dav2.rdr
new file mode 100644
index 0000000..41fc86d
--- /dev/null
+++ b/result/dav2.rdr
@@ -0,0 +1,81 @@
+0 1 S:multistatus 0 0
+1 14 #text 0 1
+
+1 1 S:response 0 0
+2 14 #text 0 1
+
+2 1 S:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/
+2 15 S:href 0 0
+2 14 #text 0 1
+
+2 1 S:prop 0 0
+3 14 #text 0 1
+
+3 1 R:bigbox 0 0
+4 14 #text 0 1
+
+4 1 R:BoxType 0 0
+5 3 #text 0 1 Box type A
+4 15 R:BoxType 0 0
+4 14 #text 0 1
+
+3 15 R:bigbox 0 0
+3 14 #text 0 1
+
+3 1 R:author 0 0
+4 14 #text 0 1
+
+4 1 R:Name 0 0
+5 3 #text 0 1 Hadrian
+4 15 R:Name 0 0
+4 14 #text 0 1
+
+3 15 R:author 0 0
+3 14 #text 0 1
+
+2 15 S:prop 0 0
+2 14 #text 0 1
+
+2 1 S:status 0 0
+3 3 #text 0 1 HTTP 1.1 200 OK
+2 15 S:status 0 0
+2 14 #text 0 1
+
+1 15 S:response 0 0
+1 14 #text 0 1
+
+1 1 S:response 0 0
+2 14 #text 0 1
+
+2 1 S:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/index.html
+2 15 S:href 0 0
+2 14 #text 0 1
+
+2 1 S:prop 0 0
+3 14 #text 0 1
+
+3 1 R:bigbox 0 0
+4 14 #text 0 1
+
+4 1 R:BoxType 0 0
+5 3 #text 0 1 Box type B
+4 15 R:BoxType 0 0
+4 14 #text 0 1
+
+3 15 R:bigbox 0 0
+3 14 #text 0 1
+
+2 15 S:prop 0 0
+2 14 #text 0 1
+
+2 1 S:status 0 0
+3 3 #text 0 1 HTTP 1.1 200 OK
+2 15 S:status 0 0
+2 14 #text 0 1
+
+1 15 S:response 0 0
+1 14 #text 0 1
+
+0 15 S:multistatus 0 0
diff --git a/result/dav2.sax b/result/dav2.sax
new file mode 100644
index 0000000..95bc06a
--- /dev/null
+++ b/result/dav2.sax
@@ -0,0 +1,84 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(S:multistatus, xmlns:S='http://www.ietf.org/standards/dav/', xmlns:R='http://www.foo.bar/boxschema/')
+SAX.characters(
+ , 3)
+SAX.startElement(S:response)
+SAX.characters(
+ , 5)
+SAX.startElement(S:href)
+SAX.characters(http://www.foo.bar/container/, 29)
+SAX.endElement(S:href)
+SAX.characters(
+ , 5)
+SAX.startElement(S:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(R:bigbox)
+SAX.characters(
+ , 9)
+SAX.startElement(R:BoxType)
+SAX.characters(Box type A, 10)
+SAX.endElement(R:BoxType)
+SAX.characters(
+ , 7)
+SAX.endElement(R:bigbox)
+SAX.characters(
+ , 7)
+SAX.startElement(R:author)
+SAX.characters(
+ , 9)
+SAX.startElement(R:Name)
+SAX.characters(Hadrian, 7)
+SAX.endElement(R:Name)
+SAX.characters(
+ , 7)
+SAX.endElement(R:author)
+SAX.characters(
+ , 5)
+SAX.endElement(S:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(S:status)
+SAX.characters(HTTP 1.1 200 OK, 15)
+SAX.endElement(S:status)
+SAX.characters(
+ , 3)
+SAX.endElement(S:response)
+SAX.characters(
+ , 3)
+SAX.startElement(S:response)
+SAX.characters(
+ , 5)
+SAX.startElement(S:href)
+SAX.characters(http://www.foo.bar/container/i, 39)
+SAX.endElement(S:href)
+SAX.characters(
+ , 5)
+SAX.startElement(S:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(R:bigbox)
+SAX.characters(
+ , 9)
+SAX.startElement(R:BoxType)
+SAX.characters(Box type B, 10)
+SAX.endElement(R:BoxType)
+SAX.characters(
+ , 7)
+SAX.endElement(R:bigbox)
+SAX.characters(
+ , 5)
+SAX.endElement(S:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(S:status)
+SAX.characters(HTTP 1.1 200 OK, 15)
+SAX.endElement(S:status)
+SAX.characters(
+ , 3)
+SAX.endElement(S:response)
+SAX.characters(
+, 1)
+SAX.endElement(S:multistatus)
+SAX.endDocument()
diff --git a/result/dav3 b/result/dav3
new file mode 100644
index 0000000..986b3fe
--- /dev/null
+++ b/result/dav3
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/" xmlns:R="http://www.foo.bar/boxschema/">
+ <D:response>
+ <D:href>http://www.foo.bar/container/</D:href>
+ <D:prop>
+ <R:bigbox/>
+ <R:author/>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:href>http://www.foo.bar/container/index.html</D:href>
+ <D:prop>
+ <R:bigbox/>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/dav3.rdr b/result/dav3.rdr
new file mode 100644
index 0000000..f106f17
--- /dev/null
+++ b/result/dav3.rdr
@@ -0,0 +1,57 @@
+0 1 D:multistatus 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/
+2 15 D:href 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 R:bigbox 1 0
+3 14 #text 0 1
+
+3 1 R:author 1 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP 1.1 200 OK
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/index.html
+2 15 D:href 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 R:bigbox 1 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP 1.1 200 OK
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+0 15 D:multistatus 0 0
diff --git a/result/dav3.sax b/result/dav3.sax
new file mode 100644
index 0000000..e9eabd8
--- /dev/null
+++ b/result/dav3.sax
@@ -0,0 +1,63 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:multistatus, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:R='http://www.foo.bar/boxschema/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:href)
+SAX.characters(http://www.foo.bar/container/, 29)
+SAX.endElement(D:href)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(R:bigbox)
+SAX.endElement(R:bigbox)
+SAX.characters(
+ , 7)
+SAX.startElement(R:author)
+SAX.endElement(R:author)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP 1.1 200 OK, 15)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:href)
+SAX.characters(http://www.foo.bar/container/i, 39)
+SAX.endElement(D:href)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(R:bigbox)
+SAX.endElement(R:bigbox)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP 1.1 200 OK, 15)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+, 1)
+SAX.endElement(D:multistatus)
+SAX.endDocument()
diff --git a/result/dav4 b/result/dav4
new file mode 100644
index 0000000..9ab7ceb
--- /dev/null
+++ b/result/dav4
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<D:propertyupdate xmlns:D="http://www.ietf.org/standards/dav/" xmlns:Z="http://www.w3.com/standards/z39.50/">
+ <D:set>
+ <D:prop>
+ <Z:authors>
+ <Z:Author>Jim Whitehead</Z:Author>
+ <Z:Author>Roy Fielding</Z:Author>
+ </Z:authors>
+ </D:prop>
+ </D:set>
+ <D:remove>
+ <D:prop>
+ <Z:Copyright-Owner/>
+ </D:prop>
+ </D:remove>
+</D:propertyupdate>
diff --git a/result/dav4.rdr b/result/dav4.rdr
new file mode 100644
index 0000000..e764047
--- /dev/null
+++ b/result/dav4.rdr
@@ -0,0 +1,47 @@
+0 1 D:propertyupdate 0 0
+1 14 #text 0 1
+
+1 1 D:set 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 Z:authors 0 0
+4 14 #text 0 1
+
+4 1 Z:Author 0 0
+5 3 #text 0 1 Jim Whitehead
+4 15 Z:Author 0 0
+4 14 #text 0 1
+
+4 1 Z:Author 0 0
+5 3 #text 0 1 Roy Fielding
+4 15 Z:Author 0 0
+4 14 #text 0 1
+
+3 15 Z:authors 0 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+1 15 D:set 0 0
+1 14 #text 0 1
+
+1 1 D:remove 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 Z:Copyright-Owner 1 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+1 15 D:remove 0 0
+1 14 #text 0 1
+
+0 15 D:propertyupdate 0 0
diff --git a/result/dav4.sax b/result/dav4.sax
new file mode 100644
index 0000000..8268026
--- /dev/null
+++ b/result/dav4.sax
@@ -0,0 +1,51 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:propertyupdate, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:Z='http://www.w3.com/standards/z39.50/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:set)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(Z:authors)
+SAX.characters(
+ , 9)
+SAX.startElement(Z:Author)
+SAX.characters(Jim Whitehead, 13)
+SAX.endElement(Z:Author)
+SAX.characters(
+ , 9)
+SAX.startElement(Z:Author)
+SAX.characters(Roy Fielding, 12)
+SAX.endElement(Z:Author)
+SAX.characters(
+ , 7)
+SAX.endElement(Z:authors)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 3)
+SAX.endElement(D:set)
+SAX.characters(
+ , 3)
+SAX.startElement(D:remove)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(Z:Copyright-Owner)
+SAX.endElement(Z:Copyright-Owner)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 3)
+SAX.endElement(D:remove)
+SAX.characters(
+, 1)
+SAX.endElement(D:propertyupdate)
+SAX.endDocument()
diff --git a/result/dav5 b/result/dav5
new file mode 100644
index 0000000..68ebab9
--- /dev/null
+++ b/result/dav5
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/" xmlns:Z="http://www.w3.com/standards/z39.50/">
+ <D:response>
+ <D:prop>
+ <Z:Authors/>
+ </D:prop>
+ <D:status>HTTP/1.1 420 Method Failure</D:status>
+ </D:response>
+ <D:response>
+ <D:prop>
+ <Z:Copyright-Owner/>
+ </D:prop>
+ <D:status>HTTP/1.1 409 Conflict</D:status>
+ </D:response>
+ <D:responsedescription> Copyright Owner can not be deleted or
+altered.</D:responsedescription>
+</D:multistatus>
diff --git a/result/dav5.rdr b/result/dav5.rdr
new file mode 100644
index 0000000..c92d177
--- /dev/null
+++ b/result/dav5.rdr
@@ -0,0 +1,50 @@
+0 1 D:multistatus 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 Z:Authors 1 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP/1.1 420 Method Failure
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 Z:Copyright-Owner 1 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP/1.1 409 Conflict
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+1 1 D:responsedescription 0 0
+2 3 #text 0 1 Copyright Owner can not be deleted or
+altered.
+1 15 D:responsedescription 0 0
+1 14 #text 0 1
+
+0 15 D:multistatus 0 0
diff --git a/result/dav5.sax b/result/dav5.sax
new file mode 100644
index 0000000..53967f8
--- /dev/null
+++ b/result/dav5.sax
@@ -0,0 +1,54 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:multistatus, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:Z='http://www.w3.com/standards/z39.50/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(Z:Authors)
+SAX.endElement(Z:Authors)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP/1.1 420 Method Failure, 27)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(Z:Copyright-Owner)
+SAX.endElement(Z:Copyright-Owner)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP/1.1 409 Conflict, 21)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+ , 3)
+SAX.startElement(D:responsedescription)
+SAX.characters( Copyright Owner can not be de, 47)
+SAX.endElement(D:responsedescription)
+SAX.characters(
+, 1)
+SAX.endElement(D:multistatus)
+SAX.endDocument()
diff --git a/result/dav6 b/result/dav6
new file mode 100644
index 0000000..3d0de24
--- /dev/null
+++ b/result/dav6
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:href>http://www.microsoft.com/user/yarong/dav_drafts/
+ </D:href>
+ <D:prop>
+ <D:resourcetype>
+ <D:collection/>
+ </D:resourcetype>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:href>
+ http://www.microsoft.com/user/yarong/dav_drafts/base
+ </D:href>
+ <D:prop>
+ <D:resourcetype/>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/dav6.rdr b/result/dav6.rdr
new file mode 100644
index 0000000..726e3c2
--- /dev/null
+++ b/result/dav6.rdr
@@ -0,0 +1,63 @@
+0 1 D:multistatus 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:href 0 0
+3 3 #text 0 1 http://www.microsoft.com/user/yarong/dav_drafts/
+
+2 15 D:href 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 D:resourcetype 0 0
+4 14 #text 0 1
+
+4 1 D:collection 1 0
+4 14 #text 0 1
+
+3 15 D:resourcetype 0 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP 1.1 200 OK
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+1 1 D:response 0 0
+2 14 #text 0 1
+
+2 1 D:href 0 0
+3 3 #text 0 1
+ http://www.microsoft.com/user/yarong/dav_drafts/base
+
+2 15 D:href 0 0
+2 14 #text 0 1
+
+2 1 D:prop 0 0
+3 14 #text 0 1
+
+3 1 D:resourcetype 1 0
+3 14 #text 0 1
+
+2 15 D:prop 0 0
+2 14 #text 0 1
+
+2 1 D:status 0 0
+3 3 #text 0 1 HTTP 1.1 200 OK
+2 15 D:status 0 0
+2 14 #text 0 1
+
+1 15 D:response 0 0
+1 14 #text 0 1
+
+0 15 D:multistatus 0 0
diff --git a/result/dav6.sax b/result/dav6.sax
new file mode 100644
index 0000000..a6a5b2d
--- /dev/null
+++ b/result/dav6.sax
@@ -0,0 +1,66 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(D:multistatus, xmlns:D='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:href)
+SAX.characters(http://www.microsoft.com/user/, 55)
+SAX.endElement(D:href)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(D:resourcetype)
+SAX.characters(
+ , 9)
+SAX.startElement(D:collection)
+SAX.endElement(D:collection)
+SAX.characters(
+ , 7)
+SAX.endElement(D:resourcetype)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP 1.1 200 OK, 15)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+ , 3)
+SAX.startElement(D:response)
+SAX.characters(
+ , 5)
+SAX.startElement(D:href)
+SAX.characters(
+ http://www.microsoft.co, 66)
+SAX.endElement(D:href)
+SAX.characters(
+ , 5)
+SAX.startElement(D:prop)
+SAX.characters(
+ , 7)
+SAX.startElement(D:resourcetype)
+SAX.endElement(D:resourcetype)
+SAX.characters(
+ , 5)
+SAX.endElement(D:prop)
+SAX.characters(
+ , 5)
+SAX.startElement(D:status)
+SAX.characters(HTTP 1.1 200 OK, 15)
+SAX.endElement(D:status)
+SAX.characters(
+ , 3)
+SAX.endElement(D:response)
+SAX.characters(
+, 1)
+SAX.endElement(D:multistatus)
+SAX.endDocument()
diff --git a/result/dav7 b/result/dav7
new file mode 100644
index 0000000..ec4a952
--- /dev/null
+++ b/result/dav7
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<d:multistatus xmlns:d="http://www.ietf.org/standards/dav/">
+ <d:response>
+ <d:href>http://www.foo.bar/container/resource1</d:href>
+ <d:href>http://www.foo.bar/container/resource2</d:href>
+ <d:status>HTTP/1.1 200 OK</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/container/</d:href>
+ <d:status>HTTP/1.1 420 Method Failure</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/container/resource3</d:href>
+ <d:status>HTTP/1.1 412 Precondition Failed</d:status>
+ </d:response>
+</d:multistatus>
diff --git a/result/dav7.rdr b/result/dav7.rdr
new file mode 100644
index 0000000..3f98328
--- /dev/null
+++ b/result/dav7.rdr
@@ -0,0 +1,57 @@
+0 1 d:multistatus 0 0
+1 14 #text 0 1
+
+1 1 d:response 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/resource1
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/resource2
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:status 0 0
+3 3 #text 0 1 HTTP/1.1 200 OK
+2 15 d:status 0 0
+2 14 #text 0 1
+
+1 15 d:response 0 0
+1 14 #text 0 1
+
+1 1 d:response 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:status 0 0
+3 3 #text 0 1 HTTP/1.1 420 Method Failure
+2 15 d:status 0 0
+2 14 #text 0 1
+
+1 15 d:response 0 0
+1 14 #text 0 1
+
+1 1 d:response 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/resource3
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:status 0 0
+3 3 #text 0 1 HTTP/1.1 412 Precondition Failed
+2 15 d:status 0 0
+2 14 #text 0 1
+
+1 15 d:response 0 0
+1 14 #text 0 1
+
+0 15 d:multistatus 0 0
diff --git a/result/dav7.sax b/result/dav7.sax
new file mode 100644
index 0000000..133a9c1
--- /dev/null
+++ b/result/dav7.sax
@@ -0,0 +1,60 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(d:multistatus, xmlns:d='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(d:response)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/container/r, 38)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/container/r, 38)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:status)
+SAX.characters(HTTP/1.1 200 OK, 15)
+SAX.endElement(d:status)
+SAX.characters(
+ , 3)
+SAX.endElement(d:response)
+SAX.characters(
+ , 3)
+SAX.startElement(d:response)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/container/, 29)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:status)
+SAX.characters(HTTP/1.1 420 Method Failure, 27)
+SAX.endElement(d:status)
+SAX.characters(
+ , 3)
+SAX.endElement(d:response)
+SAX.characters(
+ , 3)
+SAX.startElement(d:response)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/container/r, 38)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:status)
+SAX.characters(HTTP/1.1 412 Precondition Fail, 32)
+SAX.endElement(d:status)
+SAX.characters(
+ , 3)
+SAX.endElement(d:response)
+SAX.characters(
+, 1)
+SAX.endElement(d:multistatus)
+SAX.endDocument()
diff --git a/result/dav8 b/result/dav8
new file mode 100644
index 0000000..7f99baf
--- /dev/null
+++ b/result/dav8
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<d:multistatus xmlns:d="http://www.ietf.org/standards/dav/">
+ <d:response>
+ <d:href>http://www.foo.bar/othercontainer/resource1</d:href>
+ <d:href>http://www.foo.bar/othercontainer/resource2</d:href>
+ <d:href>http://www.foo.bar/othercontainer/</d:href>
+ <d:href>http://www.foo.bar/othercontainer/R2/D2</d:href>
+ <d:status>HTTP/1.1 201 Created</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/othercontainer/R2/</d:href>
+ <d:status>HTTP/1.1 412 Precondition Failed</d:status>
+ </d:response>
+</d:multistatus>
diff --git a/result/dav8.rdr b/result/dav8.rdr
new file mode 100644
index 0000000..f14225e
--- /dev/null
+++ b/result/dav8.rdr
@@ -0,0 +1,51 @@
+0 1 d:multistatus 0 0
+1 14 #text 0 1
+
+1 1 d:response 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/othercontainer/resource1
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/othercontainer/resource2
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/othercontainer/
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/othercontainer/R2/D2
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:status 0 0
+3 3 #text 0 1 HTTP/1.1 201 Created
+2 15 d:status 0 0
+2 14 #text 0 1
+
+1 15 d:response 0 0
+1 14 #text 0 1
+
+1 1 d:response 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/othercontainer/R2/
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:status 0 0
+3 3 #text 0 1 HTTP/1.1 412 Precondition Failed
+2 15 d:status 0 0
+2 14 #text 0 1
+
+1 15 d:response 0 0
+1 14 #text 0 1
+
+0 15 d:multistatus 0 0
diff --git a/result/dav8.sax b/result/dav8.sax
new file mode 100644
index 0000000..8a810ef
--- /dev/null
+++ b/result/dav8.sax
@@ -0,0 +1,54 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(d:multistatus, xmlns:d='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(d:response)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/othercontai, 43)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/othercontai, 43)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/othercontai, 34)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/othercontai, 39)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:status)
+SAX.characters(HTTP/1.1 201 Created, 20)
+SAX.endElement(d:status)
+SAX.characters(
+ , 3)
+SAX.endElement(d:response)
+SAX.characters(
+ , 3)
+SAX.startElement(d:response)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/othercontai, 37)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:status)
+SAX.characters(HTTP/1.1 412 Precondition Fail, 32)
+SAX.endElement(d:status)
+SAX.characters(
+ , 3)
+SAX.endElement(d:response)
+SAX.characters(
+, 1)
+SAX.endElement(d:multistatus)
+SAX.endDocument()
diff --git a/result/dav9 b/result/dav9
new file mode 100644
index 0000000..8ed63b8
--- /dev/null
+++ b/result/dav9
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<d:multistatus xmlns:d="http://www.ietf.org/standards/dav/">
+ <d:response>
+ <d:href>http://www.foo.bar/container/resource1</d:href>
+ <d:href>http://www.foo.bar/container/resource2</d:href>
+ <d:href>http://www.foo.bar/container/</d:href>
+ <d:href>http://www.foo.bar/container/C2/R2</d:href>
+ <d:status>HTTP/1.1 201 Created</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/container/C2</d:href>
+ <d:status>HTTP/1.1 420 Method Failure</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/othercontainer/C2</d:href>
+ <d:status>HTTP/1.1 409 Conflict</d:status>
+ </d:response>
+</d:multistatus>
diff --git a/result/dav9.rdr b/result/dav9.rdr
new file mode 100644
index 0000000..943ab96
--- /dev/null
+++ b/result/dav9.rdr
@@ -0,0 +1,67 @@
+0 1 d:multistatus 0 0
+1 14 #text 0 1
+
+1 1 d:response 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/resource1
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/resource2
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/C2/R2
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:status 0 0
+3 3 #text 0 1 HTTP/1.1 201 Created
+2 15 d:status 0 0
+2 14 #text 0 1
+
+1 15 d:response 0 0
+1 14 #text 0 1
+
+1 1 d:response 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/container/C2
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:status 0 0
+3 3 #text 0 1 HTTP/1.1 420 Method Failure
+2 15 d:status 0 0
+2 14 #text 0 1
+
+1 15 d:response 0 0
+1 14 #text 0 1
+
+1 1 d:response 0 0
+2 14 #text 0 1
+
+2 1 d:href 0 0
+3 3 #text 0 1 http://www.foo.bar/othercontainer/C2
+2 15 d:href 0 0
+2 14 #text 0 1
+
+2 1 d:status 0 0
+3 3 #text 0 1 HTTP/1.1 409 Conflict
+2 15 d:status 0 0
+2 14 #text 0 1
+
+1 15 d:response 0 0
+1 14 #text 0 1
+
+0 15 d:multistatus 0 0
diff --git a/result/dav9.sax b/result/dav9.sax
new file mode 100644
index 0000000..4116bad
--- /dev/null
+++ b/result/dav9.sax
@@ -0,0 +1,70 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(d:multistatus, xmlns:d='http://www.ietf.org/standards/dav/')
+SAX.characters(
+ , 3)
+SAX.startElement(d:response)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/container/r, 38)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/container/r, 38)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/container/, 29)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/container/C, 34)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:status)
+SAX.characters(HTTP/1.1 201 Created, 20)
+SAX.endElement(d:status)
+SAX.characters(
+ , 3)
+SAX.endElement(d:response)
+SAX.characters(
+ , 3)
+SAX.startElement(d:response)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/container/C, 31)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:status)
+SAX.characters(HTTP/1.1 420 Method Failure, 27)
+SAX.endElement(d:status)
+SAX.characters(
+ , 3)
+SAX.endElement(d:response)
+SAX.characters(
+ , 3)
+SAX.startElement(d:response)
+SAX.characters(
+ , 5)
+SAX.startElement(d:href)
+SAX.characters(http://www.foo.bar/othercontai, 36)
+SAX.endElement(d:href)
+SAX.characters(
+ , 5)
+SAX.startElement(d:status)
+SAX.characters(HTTP/1.1 409 Conflict, 21)
+SAX.endElement(d:status)
+SAX.characters(
+ , 3)
+SAX.endElement(d:response)
+SAX.characters(
+, 1)
+SAX.endElement(d:multistatus)
+SAX.endDocument()
diff --git a/result/defattr.xml b/result/defattr.xml
new file mode 100644
index 0000000..0a4ac15
--- /dev/null
+++ b/result/defattr.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+<!ATTLIST doc xmlns CDATA #FIXED "http://www.example.com/">
+]>
+<doc xmlns="http://www.example.com/"/>
diff --git a/result/defattr.xml.rdr b/result/defattr.xml.rdr
new file mode 100644
index 0000000..9b0a34d
--- /dev/null
+++ b/result/defattr.xml.rdr
@@ -0,0 +1,2 @@
+0 10 doc 0 0
+0 1 doc 1 0
diff --git a/result/defattr.xml.sax b/result/defattr.xml.sax
new file mode 100644
index 0000000..86ef54a
--- /dev/null
+++ b/result/defattr.xml.sax
@@ -0,0 +1,9 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 1, ...)
+SAX.attributeDecl(doc, xmlns, 1, 4, http://www.example.com/, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/defattr2.xml b/result/defattr2.xml
new file mode 100644
index 0000000..8d1fc3b
--- /dev/null
+++ b/result/defattr2.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+<!ATTLIST doc defatt (0 | 1) "0">
+<!ATTLIST doc xmlns:tst CDATA #FIXED "http://example.org">
+<!ATTLIST doc tst:att (0 | 1) "1">
+]>
+<doc xmlns:tst="http://example.org" att="1"/>
diff --git a/result/defattr2.xml.rdr b/result/defattr2.xml.rdr
new file mode 100644
index 0000000..9b0a34d
--- /dev/null
+++ b/result/defattr2.xml.rdr
@@ -0,0 +1,2 @@
+0 10 doc 0 0
+0 1 doc 1 0
diff --git a/result/defattr2.xml.sax b/result/defattr2.xml.sax
new file mode 100644
index 0000000..72f8fca
--- /dev/null
+++ b/result/defattr2.xml.sax
@@ -0,0 +1,11 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 1, ...)
+SAX.attributeDecl(doc, defatt, 9, 1, 0, ...)
+SAX.attributeDecl(doc, xmlns:tst, 1, 4, http://example.org, ...)
+SAX.attributeDecl(doc, tst:att, 9, 1, 1, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc, att='1')
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dia1 b/result/dia1
new file mode 100644
index 0000000..207bd73
--- /dev/null
+++ b/result/dia1
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute name="background">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer name="Background" visible="true">
+ <dia:object type="Standard - Line" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="1.95,6.85"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.9,6.8;11,8.55"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="1.95,6.85"/>
+ <dia:point val="10.95,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O2" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.579,3.96359;7.021,4.96359"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string val="sdfsdfg"/>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.9,7.45;13.05,9.55"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/result/dia1.rdr b/result/dia1.rdr
new file mode 100644
index 0000000..3767325
--- /dev/null
+++ b/result/dia1.rdr
@@ -0,0 +1,292 @@
+0 1 dia:diagram 0 0
+1 14 #text 0 1
+
+1 1 dia:diagramdata 0 0
+2 14 #text 0 1
+
+2 1 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:color 1 0
+3 14 #text 0 1
+
+2 15 dia:attribute 0 0
+2 14 #text 0 1
+
+1 15 dia:diagramdata 0 0
+1 14 #text 0 1
+
+1 1 dia:layer 0 0
+2 14 #text 0 1
+
+2 1 dia:object 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:rectangle 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:color 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:real 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:enum 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:enum 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:enum 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:connections 0 0
+4 14 #text 0 1
+
+4 1 dia:connection 1 0
+4 14 #text 0 1
+
+3 15 dia:connections 0 0
+3 14 #text 0 1
+
+2 15 dia:object 0 0
+2 14 #text 0 1
+
+2 1 dia:object 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:rectangle 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:composite 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:string 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:font 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:real 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:point 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:color 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:enum 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+4 15 dia:composite 0 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+2 15 dia:object 0 0
+2 14 #text 0 1
+
+2 1 dia:object 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:rectangle 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:real 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:real 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:real 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:color 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:color 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:enum 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+2 15 dia:object 0 0
+2 14 #text 0 1
+
+1 15 dia:layer 0 0
+1 14 #text 0 1
+
+0 15 dia:diagram 0 0
diff --git a/result/dia1.sax b/result/dia1.sax
new file mode 100644
index 0000000..6f65d63
--- /dev/null
+++ b/result/dia1.sax
@@ -0,0 +1,323 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(dia:diagram, xmlns:dia='http://www.lysator.liu.se/~alla/dia/')
+SAX.characters(
+ , 3)
+SAX.startElement(dia:diagramdata)
+SAX.characters(
+ , 5)
+SAX.startElement(dia:attribute, name='background')
+SAX.characters(
+ , 7)
+SAX.startElement(dia:color, val='#ffffff')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 5)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 3)
+SAX.endElement(dia:diagramdata)
+SAX.characters(
+ , 3)
+SAX.startElement(dia:layer, name='Background', visible='true')
+SAX.characters(
+ , 5)
+SAX.startElement(dia:object, type='Standard - Line', version='0', id='O0')
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_pos')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='1.95,6.85')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_bb')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:rectangle, val='1.9,6.8;11,8.55')
+SAX.endElement(dia:rectangle)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='conn_endpoints')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='1.95,6.85')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='10.95,8.5')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='line_color')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:color, val='#000000')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='line_width')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:real, val='0.1')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='line_style')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:enum, val='0')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='start_arrow')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:enum, val='0')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='end_arrow')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:enum, val='0')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:connections)
+SAX.characters(
+ , 9)
+SAX.startElement(dia:connection, handle='1', to='O2', connection='3')
+SAX.endElement(dia:connection)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:connections)
+SAX.characters(
+ , 5)
+SAX.endElement(dia:object)
+SAX.characters(
+ , 5)
+SAX.startElement(dia:object, type='Standard - Text', version='0', id='O1')
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_pos')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='4.8,4.75')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_bb')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:rectangle, val='2.579,3.96359;7.021,4.96359')
+SAX.endElement(dia:rectangle)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='text')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:composite, type='text')
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='string')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:string, val='sdfsdfg')
+SAX.endElement(dia:string)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='font')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:font, name='Courier')
+SAX.endElement(dia:font)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='height')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:real, val='1')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='pos')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:point, val='4.8,4.75')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='color')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:color, val='#000000')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='alignment')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:enum, val='1')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 9)
+SAX.endElement(dia:composite)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 5)
+SAX.endElement(dia:object)
+SAX.characters(
+ , 5)
+SAX.startElement(dia:object, type='Standard - Box', version='0', id='O2')
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_pos')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='10.95,7.5')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_bb')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:rectangle, val='10.9,7.45;13.05,9.55')
+SAX.endElement(dia:rectangle)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='elem_corner')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='10.95,7.5')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='elem_width')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:real, val='2.05')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='elem_height')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:real, val='2')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='border_width')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:real, val='0.1')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='border_color')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:color, val='#000000')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='inner_color')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:color, val='#ffffff')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='line_style')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:enum, val='0')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 5)
+SAX.endElement(dia:object)
+SAX.characters(
+ , 3)
+SAX.endElement(dia:layer)
+SAX.characters(
+, 1)
+SAX.endElement(dia:diagram)
+SAX.endDocument()
diff --git a/result/dia2 b/result/dia2
new file mode 100644
index 0000000..207bd73
--- /dev/null
+++ b/result/dia2
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute name="background">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer name="Background" visible="true">
+ <dia:object type="Standard - Line" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="1.95,6.85"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.9,6.8;11,8.55"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="1.95,6.85"/>
+ <dia:point val="10.95,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O2" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.579,3.96359;7.021,4.96359"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string val="sdfsdfg"/>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.9,7.45;13.05,9.55"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/result/dia2.rdr b/result/dia2.rdr
new file mode 100644
index 0000000..3767325
--- /dev/null
+++ b/result/dia2.rdr
@@ -0,0 +1,292 @@
+0 1 dia:diagram 0 0
+1 14 #text 0 1
+
+1 1 dia:diagramdata 0 0
+2 14 #text 0 1
+
+2 1 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:color 1 0
+3 14 #text 0 1
+
+2 15 dia:attribute 0 0
+2 14 #text 0 1
+
+1 15 dia:diagramdata 0 0
+1 14 #text 0 1
+
+1 1 dia:layer 0 0
+2 14 #text 0 1
+
+2 1 dia:object 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:rectangle 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:color 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:real 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:enum 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:enum 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:enum 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:connections 0 0
+4 14 #text 0 1
+
+4 1 dia:connection 1 0
+4 14 #text 0 1
+
+3 15 dia:connections 0 0
+3 14 #text 0 1
+
+2 15 dia:object 0 0
+2 14 #text 0 1
+
+2 1 dia:object 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:rectangle 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:composite 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:string 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:font 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:real 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:point 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:color 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+5 1 dia:attribute 0 0
+6 14 #text 0 1
+
+6 1 dia:enum 1 0
+6 14 #text 0 1
+
+5 15 dia:attribute 0 0
+5 14 #text 0 1
+
+4 15 dia:composite 0 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+2 15 dia:object 0 0
+2 14 #text 0 1
+
+2 1 dia:object 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:rectangle 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:point 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:real 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:real 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:real 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:color 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:color 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+3 1 dia:attribute 0 0
+4 14 #text 0 1
+
+4 1 dia:enum 1 0
+4 14 #text 0 1
+
+3 15 dia:attribute 0 0
+3 14 #text 0 1
+
+2 15 dia:object 0 0
+2 14 #text 0 1
+
+1 15 dia:layer 0 0
+1 14 #text 0 1
+
+0 15 dia:diagram 0 0
diff --git a/result/dia2.sax b/result/dia2.sax
new file mode 100644
index 0000000..6f65d63
--- /dev/null
+++ b/result/dia2.sax
@@ -0,0 +1,323 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(dia:diagram, xmlns:dia='http://www.lysator.liu.se/~alla/dia/')
+SAX.characters(
+ , 3)
+SAX.startElement(dia:diagramdata)
+SAX.characters(
+ , 5)
+SAX.startElement(dia:attribute, name='background')
+SAX.characters(
+ , 7)
+SAX.startElement(dia:color, val='#ffffff')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 5)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 3)
+SAX.endElement(dia:diagramdata)
+SAX.characters(
+ , 3)
+SAX.startElement(dia:layer, name='Background', visible='true')
+SAX.characters(
+ , 5)
+SAX.startElement(dia:object, type='Standard - Line', version='0', id='O0')
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_pos')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='1.95,6.85')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_bb')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:rectangle, val='1.9,6.8;11,8.55')
+SAX.endElement(dia:rectangle)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='conn_endpoints')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='1.95,6.85')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='10.95,8.5')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='line_color')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:color, val='#000000')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='line_width')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:real, val='0.1')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='line_style')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:enum, val='0')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='start_arrow')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:enum, val='0')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='end_arrow')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:enum, val='0')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:connections)
+SAX.characters(
+ , 9)
+SAX.startElement(dia:connection, handle='1', to='O2', connection='3')
+SAX.endElement(dia:connection)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:connections)
+SAX.characters(
+ , 5)
+SAX.endElement(dia:object)
+SAX.characters(
+ , 5)
+SAX.startElement(dia:object, type='Standard - Text', version='0', id='O1')
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_pos')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='4.8,4.75')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_bb')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:rectangle, val='2.579,3.96359;7.021,4.96359')
+SAX.endElement(dia:rectangle)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='text')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:composite, type='text')
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='string')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:string, val='sdfsdfg')
+SAX.endElement(dia:string)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='font')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:font, name='Courier')
+SAX.endElement(dia:font)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='height')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:real, val='1')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='pos')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:point, val='4.8,4.75')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='color')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:color, val='#000000')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 11)
+SAX.startElement(dia:attribute, name='alignment')
+SAX.characters(
+ , 13)
+SAX.startElement(dia:enum, val='1')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 11)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 9)
+SAX.endElement(dia:composite)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 5)
+SAX.endElement(dia:object)
+SAX.characters(
+ , 5)
+SAX.startElement(dia:object, type='Standard - Box', version='0', id='O2')
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_pos')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='10.95,7.5')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='obj_bb')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:rectangle, val='10.9,7.45;13.05,9.55')
+SAX.endElement(dia:rectangle)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='elem_corner')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:point, val='10.95,7.5')
+SAX.endElement(dia:point)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='elem_width')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:real, val='2.05')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='elem_height')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:real, val='2')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='border_width')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:real, val='0.1')
+SAX.endElement(dia:real)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='border_color')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:color, val='#000000')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='inner_color')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:color, val='#ffffff')
+SAX.endElement(dia:color)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 7)
+SAX.startElement(dia:attribute, name='line_style')
+SAX.characters(
+ , 9)
+SAX.startElement(dia:enum, val='0')
+SAX.endElement(dia:enum)
+SAX.characters(
+ , 7)
+SAX.endElement(dia:attribute)
+SAX.characters(
+ , 5)
+SAX.endElement(dia:object)
+SAX.characters(
+ , 3)
+SAX.endElement(dia:layer)
+SAX.characters(
+, 1)
+SAX.endElement(dia:diagram)
+SAX.endDocument()
diff --git a/result/dtd1 b/result/dtd1
new file mode 100644
index 0000000..fb11ffa
--- /dev/null
+++ b/result/dtd1
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE MEMO PUBLIC "-//SGMLSOURCE//DTD MEMO//EN" "http://www.sgmlsource.com/dtds/memo.dtd">
+<MEMO>
+</MEMO>
diff --git a/result/dtd1.rdr b/result/dtd1.rdr
new file mode 100644
index 0000000..6bb39b8
--- /dev/null
+++ b/result/dtd1.rdr
@@ -0,0 +1,5 @@
+0 10 MEMO 0 0
+0 1 MEMO 0 0
+1 14 #text 0 1
+
+0 15 MEMO 0 0
diff --git a/result/dtd1.sax b/result/dtd1.sax
new file mode 100644
index 0000000..ef8d6d3
--- /dev/null
+++ b/result/dtd1.sax
@@ -0,0 +1,9 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(MEMO, -//SGMLSOURCE//DTD MEMO//EN, http://www.sgmlsource.com/dtds/memo.dtd)
+SAX.externalSubset(MEMO, -//SGMLSOURCE//DTD MEMO//EN, http://www.sgmlsource.com/dtds/memo.dtd)
+SAX.startElement(MEMO)
+SAX.characters(
+, 1)
+SAX.endElement(MEMO)
+SAX.endDocument()
diff --git a/result/dtd10 b/result/dtd10
new file mode 100644
index 0000000..8c7d5e7
--- /dev/null
+++ b/result/dtd10
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b)+ , c , d)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT d (#PCDATA)>
+]>
+<doc><b>This</b><c> is a</c><d> valid document</d></doc>
diff --git a/result/dtd10.rdr b/result/dtd10.rdr
new file mode 100644
index 0000000..1df24c7
--- /dev/null
+++ b/result/dtd10.rdr
@@ -0,0 +1,12 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 1 b 0 0
+2 3 #text 0 1 This
+1 15 b 0 0
+1 1 c 0 0
+2 3 #text 0 1 is a
+1 15 c 0 0
+1 1 d 0 0
+2 3 #text 0 1 valid document
+1 15 d 0 0
+0 15 doc 0 0
diff --git a/result/dtd10.sax b/result/dtd10.sax
new file mode 100644
index 0000000..87fd041
--- /dev/null
+++ b/result/dtd10.sax
@@ -0,0 +1,21 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 4, ...)
+SAX.elementDecl(a, 3, ...)
+SAX.elementDecl(b, 3, ...)
+SAX.elementDecl(c, 3, ...)
+SAX.elementDecl(d, 3, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.startElement(b)
+SAX.characters(This, 4)
+SAX.endElement(b)
+SAX.startElement(c)
+SAX.characters( is a, 5)
+SAX.endElement(c)
+SAX.startElement(d)
+SAX.characters( valid document, 15)
+SAX.endElement(d)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd11 b/result/dtd11
new file mode 100644
index 0000000..e0df8af
--- /dev/null
+++ b/result/dtd11
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+<!ATTLIST doc val CDATA #IMPLIED>
+]>
+<doc val="v1"/>
diff --git a/result/dtd11.rdr b/result/dtd11.rdr
new file mode 100644
index 0000000..9b0a34d
--- /dev/null
+++ b/result/dtd11.rdr
@@ -0,0 +1,2 @@
+0 10 doc 0 0
+0 1 doc 1 0
diff --git a/result/dtd11.sax b/result/dtd11.sax
new file mode 100644
index 0000000..a2bee0c
--- /dev/null
+++ b/result/dtd11.sax
@@ -0,0 +1,9 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 3, ...)
+SAX.attributeDecl(doc, val, 1, 3, NULL, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc, val='v1')
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd12 b/result/dtd12
new file mode 100644
index 0000000..f0d1261
--- /dev/null
+++ b/result/dtd12
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY YN '"Yes"'>
+<!ENTITY WhatHeSaid "He said &YN;">
+]>
+<doc>&WhatHeSaid;</doc>
diff --git a/result/dtd12.rdr b/result/dtd12.rdr
new file mode 100644
index 0000000..c394a46
--- /dev/null
+++ b/result/dtd12.rdr
@@ -0,0 +1,4 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 5 WhatHeSaid 0 0
+0 15 doc 0 0
diff --git a/result/dtd12.sax b/result/dtd12.sax
new file mode 100644
index 0000000..82054ce
--- /dev/null
+++ b/result/dtd12.sax
@@ -0,0 +1,17 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.entityDecl(YN, 1, (null), (null), "Yes")
+SAX.getEntity(YN)
+SAX.entityDecl(WhatHeSaid, 1, (null), (null), He said &YN;)
+SAX.getEntity(WhatHeSaid)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.getEntity(WhatHeSaid)
+SAX.characters(He said , 8)
+SAX.getEntity(YN)
+SAX.characters("Yes", 5)
+SAX.reference(YN)
+SAX.reference(WhatHeSaid)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd13 b/result/dtd13
new file mode 100644
index 0000000..2814146
--- /dev/null
+++ b/result/dtd13
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!-- comment before the DTD -->
+<!DOCTYPE doc [
+<!ELEMENT doc ANY>
+]>
+<!-- comment after the DTD -->
+<doc/>
diff --git a/result/dtd13.rdr b/result/dtd13.rdr
new file mode 100644
index 0000000..f567ccb
--- /dev/null
+++ b/result/dtd13.rdr
@@ -0,0 +1,4 @@
+0 8 #comment 0 1 comment before the DTD
+0 10 doc 0 0
+0 8 #comment 0 1 comment after the DTD
+0 1 doc 1 0
diff --git a/result/dtd13.sax b/result/dtd13.sax
new file mode 100644
index 0000000..5b1245f
--- /dev/null
+++ b/result/dtd13.sax
@@ -0,0 +1,10 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.comment( comment before the DTD )
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 2, ...)
+SAX.externalSubset(doc, , )
+SAX.comment( comment after the DTD )
+SAX.startElement(doc)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd2 b/result/dtd2
new file mode 100644
index 0000000..921fd94
--- /dev/null
+++ b/result/dtd2
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+]>
+<doc>This is a valid document !</doc>
diff --git a/result/dtd2.rdr b/result/dtd2.rdr
new file mode 100644
index 0000000..20cbf2a
--- /dev/null
+++ b/result/dtd2.rdr
@@ -0,0 +1,4 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 3 #text 0 1 This is a valid document !
+0 15 doc 0 0
diff --git a/result/dtd2.sax b/result/dtd2.sax
new file mode 100644
index 0000000..0343486
--- /dev/null
+++ b/result/dtd2.sax
@@ -0,0 +1,9 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 3, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.characters(This is a valid document !, 26)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd3 b/result/dtd3
new file mode 100644
index 0000000..6681ef7
--- /dev/null
+++ b/result/dtd3
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc ANY>
+]>
+<doc>This is a valid document !</doc>
diff --git a/result/dtd3.rdr b/result/dtd3.rdr
new file mode 100644
index 0000000..20cbf2a
--- /dev/null
+++ b/result/dtd3.rdr
@@ -0,0 +1,4 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 3 #text 0 1 This is a valid document !
+0 15 doc 0 0
diff --git a/result/dtd3.sax b/result/dtd3.sax
new file mode 100644
index 0000000..57539d3
--- /dev/null
+++ b/result/dtd3.sax
@@ -0,0 +1,9 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 2, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.characters(This is a valid document !, 26)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd4 b/result/dtd4
new file mode 100644
index 0000000..6cf2444
--- /dev/null
+++ b/result/dtd4
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/result/dtd4.rdr b/result/dtd4.rdr
new file mode 100644
index 0000000..9b0a34d
--- /dev/null
+++ b/result/dtd4.rdr
@@ -0,0 +1,2 @@
+0 10 doc 0 0
+0 1 doc 1 0
diff --git a/result/dtd4.sax b/result/dtd4.sax
new file mode 100644
index 0000000..cfb4c79
--- /dev/null
+++ b/result/dtd4.sax
@@ -0,0 +1,8 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 1, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd5 b/result/dtd5
new file mode 100644
index 0000000..5409d51
--- /dev/null
+++ b/result/dtd5
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA | a | b)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+]>
+<doc><a>This</a> is a <b>valid</b> document</doc>
diff --git a/result/dtd5.rdr b/result/dtd5.rdr
new file mode 100644
index 0000000..66773a3
--- /dev/null
+++ b/result/dtd5.rdr
@@ -0,0 +1,11 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 1 a 0 0
+2 3 #text 0 1 This
+1 15 a 0 0
+1 3 #text 0 1 is a
+1 1 b 0 0
+2 3 #text 0 1 valid
+1 15 b 0 0
+1 3 #text 0 1 document
+0 15 doc 0 0
diff --git a/result/dtd5.sax b/result/dtd5.sax
new file mode 100644
index 0000000..5dc8db3
--- /dev/null
+++ b/result/dtd5.sax
@@ -0,0 +1,18 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 3, ...)
+SAX.elementDecl(a, 3, ...)
+SAX.elementDecl(b, 3, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.startElement(a)
+SAX.characters(This, 4)
+SAX.endElement(a)
+SAX.characters( is a , 6)
+SAX.startElement(b)
+SAX.characters(valid, 5)
+SAX.endElement(b)
+SAX.characters( document, 9)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd6 b/result/dtd6
new file mode 100644
index 0000000..ed2d993
--- /dev/null
+++ b/result/dtd6
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (a | b)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+]>
+<doc><a>This</a><b> is a valid</b><a> document</a></doc>
diff --git a/result/dtd6.rdr b/result/dtd6.rdr
new file mode 100644
index 0000000..a941e6a
--- /dev/null
+++ b/result/dtd6.rdr
@@ -0,0 +1,12 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 1 a 0 0
+2 3 #text 0 1 This
+1 15 a 0 0
+1 1 b 0 0
+2 3 #text 0 1 is a valid
+1 15 b 0 0
+1 1 a 0 0
+2 3 #text 0 1 document
+1 15 a 0 0
+0 15 doc 0 0
diff --git a/result/dtd6.sax b/result/dtd6.sax
new file mode 100644
index 0000000..e9088d7
--- /dev/null
+++ b/result/dtd6.sax
@@ -0,0 +1,19 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 4, ...)
+SAX.elementDecl(a, 3, ...)
+SAX.elementDecl(b, 3, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.startElement(a)
+SAX.characters(This, 4)
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.characters( is a valid, 11)
+SAX.endElement(b)
+SAX.startElement(a)
+SAX.characters( document, 9)
+SAX.endElement(a)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd7 b/result/dtd7
new file mode 100644
index 0000000..0a4075f
--- /dev/null
+++ b/result/dtd7
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (a , b)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+]>
+<doc><a>This</a><b> is a valid document</b></doc>
diff --git a/result/dtd7.rdr b/result/dtd7.rdr
new file mode 100644
index 0000000..a477613
--- /dev/null
+++ b/result/dtd7.rdr
@@ -0,0 +1,9 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 1 a 0 0
+2 3 #text 0 1 This
+1 15 a 0 0
+1 1 b 0 0
+2 3 #text 0 1 is a valid document
+1 15 b 0 0
+0 15 doc 0 0
diff --git a/result/dtd7.sax b/result/dtd7.sax
new file mode 100644
index 0000000..dbf6e5f
--- /dev/null
+++ b/result/dtd7.sax
@@ -0,0 +1,16 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 4, ...)
+SAX.elementDecl(a, 3, ...)
+SAX.elementDecl(b, 3, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.startElement(a)
+SAX.characters(This, 4)
+SAX.endElement(a)
+SAX.startElement(b)
+SAX.characters( is a valid document, 20)
+SAX.endElement(b)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd8 b/result/dtd8
new file mode 100644
index 0000000..7a655f9
--- /dev/null
+++ b/result/dtd8
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b) , (c | d))+>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT d (#PCDATA)>
+]>
+<doc><b>This</b><c> is a valid document</c></doc>
diff --git a/result/dtd8.rdr b/result/dtd8.rdr
new file mode 100644
index 0000000..15ee010
--- /dev/null
+++ b/result/dtd8.rdr
@@ -0,0 +1,9 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 1 b 0 0
+2 3 #text 0 1 This
+1 15 b 0 0
+1 1 c 0 0
+2 3 #text 0 1 is a valid document
+1 15 c 0 0
+0 15 doc 0 0
diff --git a/result/dtd8.sax b/result/dtd8.sax
new file mode 100644
index 0000000..fd949a2
--- /dev/null
+++ b/result/dtd8.sax
@@ -0,0 +1,18 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 4, ...)
+SAX.elementDecl(a, 3, ...)
+SAX.elementDecl(b, 3, ...)
+SAX.elementDecl(c, 3, ...)
+SAX.elementDecl(d, 3, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.startElement(b)
+SAX.characters(This, 4)
+SAX.endElement(b)
+SAX.startElement(c)
+SAX.characters( is a valid document, 20)
+SAX.endElement(c)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/dtd9 b/result/dtd9
new file mode 100644
index 0000000..89cc1d4
--- /dev/null
+++ b/result/dtd9
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b | c) , d)?>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT d (#PCDATA)>
+]>
+<doc><b>This</b><d> is a valid document</d></doc>
diff --git a/result/dtd9.rdr b/result/dtd9.rdr
new file mode 100644
index 0000000..2e2b2e9
--- /dev/null
+++ b/result/dtd9.rdr
@@ -0,0 +1,9 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 1 b 0 0
+2 3 #text 0 1 This
+1 15 b 0 0
+1 1 d 0 0
+2 3 #text 0 1 is a valid document
+1 15 d 0 0
+0 15 doc 0 0
diff --git a/result/dtd9.sax b/result/dtd9.sax
new file mode 100644
index 0000000..738f4d3
--- /dev/null
+++ b/result/dtd9.sax
@@ -0,0 +1,18 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.elementDecl(doc, 4, ...)
+SAX.elementDecl(a, 3, ...)
+SAX.elementDecl(b, 3, ...)
+SAX.elementDecl(c, 3, ...)
+SAX.elementDecl(d, 3, ...)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.startElement(b)
+SAX.characters(This, 4)
+SAX.endElement(b)
+SAX.startElement(d)
+SAX.characters( is a valid document, 20)
+SAX.endElement(d)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/ent1 b/result/ent1
new file mode 100644
index 0000000..3e24756
--- /dev/null
+++ b/result/ent1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+]>
+<EXAMPLE>
+ &xml;
+</EXAMPLE>
diff --git a/result/ent1.rdr b/result/ent1.rdr
new file mode 100644
index 0000000..9f9c2cc
--- /dev/null
+++ b/result/ent1.rdr
@@ -0,0 +1,8 @@
+0 10 EXAMPLE 0 0
+0 1 EXAMPLE 0 0
+1 14 #text 0 1
+
+1 5 xml 0 0
+1 14 #text 0 1
+
+0 15 EXAMPLE 0 0
diff --git a/result/ent1.sax b/result/ent1.sax
new file mode 100644
index 0000000..1d5334f
--- /dev/null
+++ b/result/ent1.sax
@@ -0,0 +1,16 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(EXAMPLE, , example.dtd)
+SAX.entityDecl(xml, 1, (null), (null), Extensible Markup Language)
+SAX.getEntity(xml)
+SAX.externalSubset(EXAMPLE, , example.dtd)
+SAX.startElement(EXAMPLE)
+SAX.characters(
+ , 5)
+SAX.getEntity(xml)
+SAX.characters(Extensible Markup Language, 26)
+SAX.reference(xml)
+SAX.characters(
+, 1)
+SAX.endElement(EXAMPLE)
+SAX.endDocument()
diff --git a/result/ent2 b/result/ent2
new file mode 100644
index 0000000..2b4137c
--- /dev/null
+++ b/result/ent2
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+<!ENTITY title PUBLIC "-//MY-TITLE//FR" "title.xml">
+<!ENTITY image SYSTEM "img.gif" NDATA GIF>
+]>
+<EXAMPLE>
+ &title;
+ This text is about XML, the &xml; and this is an embedded <IMG src="image"/>
+</EXAMPLE>
diff --git a/result/ent2.rdr b/result/ent2.rdr
new file mode 100644
index 0000000..6c2e761
--- /dev/null
+++ b/result/ent2.rdr
@@ -0,0 +1,13 @@
+0 10 EXAMPLE 0 0
+0 1 EXAMPLE 0 0
+1 14 #text 0 1
+
+1 5 title 0 0
+1 3 #text 0 1
+ This text is about XML, the
+1 5 xml 0 0
+1 3 #text 0 1 and this is an embedded
+1 1 IMG 1 0
+1 14 #text 0 1
+
+0 15 EXAMPLE 0 0
diff --git a/result/ent2.sax b/result/ent2.sax
new file mode 100644
index 0000000..382bac1
--- /dev/null
+++ b/result/ent2.sax
@@ -0,0 +1,25 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(EXAMPLE, , example.dtd)
+SAX.entityDecl(xml, 1, (null), (null), Extensible Markup Language)
+SAX.getEntity(xml)
+SAX.entityDecl(title, 2, -//MY-TITLE//FR, title.xml, (null))
+SAX.unparsedEntityDecl(image, (null), img.gif, GIF)
+SAX.externalSubset(EXAMPLE, , example.dtd)
+SAX.startElement(EXAMPLE)
+SAX.characters(
+ , 3)
+SAX.getEntity(title)
+SAX.error: Entity 'title' not defined
+SAX.characters(
+ This text is about XML, the, 31)
+SAX.getEntity(xml)
+SAX.characters(Extensible Markup Language, 26)
+SAX.reference(xml)
+SAX.characters( and this is an embedded , 25)
+SAX.startElement(IMG, src='image')
+SAX.endElement(IMG)
+SAX.characters(
+, 1)
+SAX.endElement(EXAMPLE)
+SAX.endDocument()
diff --git a/result/ent3 b/result/ent3
new file mode 100644
index 0000000..7fb4c7b
--- /dev/null
+++ b/result/ent3
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+]>
+<EXAMPLE prop1="a&amp;b" prop2="&xml;">
+ Test of entities in attributes.
+</EXAMPLE>
diff --git a/result/ent3.rdr b/result/ent3.rdr
new file mode 100644
index 0000000..740442d
--- /dev/null
+++ b/result/ent3.rdr
@@ -0,0 +1,6 @@
+0 10 EXAMPLE 0 0
+0 1 EXAMPLE 0 0
+1 3 #text 0 1
+ Test of entities in attributes.
+
+0 15 EXAMPLE 0 0
diff --git a/result/ent3.sax b/result/ent3.sax
new file mode 100644
index 0000000..859199f
--- /dev/null
+++ b/result/ent3.sax
@@ -0,0 +1,13 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(EXAMPLE, , example.dtd)
+SAX.entityDecl(xml, 1, (null), (null), Extensible Markup Language)
+SAX.getEntity(xml)
+SAX.externalSubset(EXAMPLE, , example.dtd)
+SAX.getEntity(amp)
+SAX.getEntity(xml)
+SAX.startElement(EXAMPLE, prop1='a&#38;b', prop2='&xml;')
+SAX.characters(
+ Test of entities in attribu, 35)
+SAX.endElement(EXAMPLE)
+SAX.endDocument()
diff --git a/result/ent4 b/result/ent4
new file mode 100644
index 0000000..a92194c
--- /dev/null
+++ b/result/ent4
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+]>
+<EXAMPLE>
+ Test of &amp;amp; behaviour a&amp;b .
+</EXAMPLE>
diff --git a/result/ent4.rdr b/result/ent4.rdr
new file mode 100644
index 0000000..7b65485
--- /dev/null
+++ b/result/ent4.rdr
@@ -0,0 +1,6 @@
+0 10 EXAMPLE 0 0
+0 1 EXAMPLE 0 0
+1 3 #text 0 1
+ Test of &amp; behaviour a&b .
+
+0 15 EXAMPLE 0 0
diff --git a/result/ent4.sax b/result/ent4.sax
new file mode 100644
index 0000000..d28cc87
--- /dev/null
+++ b/result/ent4.sax
@@ -0,0 +1,18 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(EXAMPLE, , example.dtd)
+SAX.entityDecl(xml, 1, (null), (null), Extensible Markup Language)
+SAX.getEntity(xml)
+SAX.externalSubset(EXAMPLE, , example.dtd)
+SAX.startElement(EXAMPLE)
+SAX.characters(
+ Test of , 11)
+SAX.getEntity(amp)
+SAX.characters(&, 1)
+SAX.characters(amp; behaviour a, 16)
+SAX.getEntity(amp)
+SAX.characters(&, 1)
+SAX.characters(b .
+, 4)
+SAX.endElement(EXAMPLE)
+SAX.endDocument()
diff --git a/result/ent5 b/result/ent5
new file mode 100644
index 0000000..16e7e10
--- /dev/null
+++ b/result/ent5
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<EXAMPLE>
+ This is an inverted exclamation sign &#xA1;
+ This is a space
+</EXAMPLE>
diff --git a/result/ent5.rdr b/result/ent5.rdr
new file mode 100644
index 0000000..c570c31
--- /dev/null
+++ b/result/ent5.rdr
@@ -0,0 +1,6 @@
+0 1 EXAMPLE 0 0
+1 3 #text 0 1
+ This is an inverted exclamation sign ¡
+ This is a space
+
+0 15 EXAMPLE 0 0
diff --git a/result/ent5.sax b/result/ent5.sax
new file mode 100644
index 0000000..7ad8b65
--- /dev/null
+++ b/result/ent5.sax
@@ -0,0 +1,13 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(EXAMPLE)
+SAX.characters(
+ This is an inverted excla, 42)
+SAX.characters(¡, 2)
+SAX.characters(
+ This is a space , 21)
+SAX.characters( , 1)
+SAX.characters(
+, 2)
+SAX.endElement(EXAMPLE)
+SAX.endDocument()
diff --git a/result/ent6 b/result/ent6
new file mode 100644
index 0000000..047f9bb
--- /dev/null
+++ b/result/ent6
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY amp "&#38;#38;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">
+]>
+<doc/>
diff --git a/result/ent6.rdr b/result/ent6.rdr
new file mode 100644
index 0000000..9b0a34d
--- /dev/null
+++ b/result/ent6.rdr
@@ -0,0 +1,2 @@
+0 10 doc 0 0
+0 1 doc 1 0
diff --git a/result/ent6.sax b/result/ent6.sax
new file mode 100644
index 0000000..a4426e7
--- /dev/null
+++ b/result/ent6.sax
@@ -0,0 +1,17 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.entityDecl(lt, 1, (null), (null), &#60;)
+SAX.getEntity(lt)
+SAX.entityDecl(gt, 1, (null), (null), >)
+SAX.getEntity(gt)
+SAX.entityDecl(amp, 1, (null), (null), &#38;)
+SAX.getEntity(amp)
+SAX.entityDecl(apos, 1, (null), (null), ')
+SAX.getEntity(apos)
+SAX.entityDecl(quot, 1, (null), (null), ")
+SAX.getEntity(quot)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/ent7 b/result/ent7
new file mode 100644
index 0000000..f46d8bb
--- /dev/null
+++ b/result/ent7
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE item [
+<!ENTITY % sampleEnt "<!ELEMENT item (para)+>">
+<!ENTITY sampleEnt "the hyacinth girl">
+<!ELEMENT item (para)+>
+<!ELEMENT para (#PCDATA)>
+]>
+<item><para>'they called me &sampleEnt;'</para></item>
diff --git a/result/ent7.rdr b/result/ent7.rdr
new file mode 100644
index 0000000..937a848
--- /dev/null
+++ b/result/ent7.rdr
@@ -0,0 +1,8 @@
+0 10 item 0 0
+0 1 item 0 0
+1 1 para 0 0
+2 3 #text 0 1 'they called me
+2 5 sampleEnt 0 0
+2 3 #text 0 1 '
+1 15 para 0 0
+0 15 item 0 0
diff --git a/result/ent7.sax b/result/ent7.sax
new file mode 100644
index 0000000..0d5befa
--- /dev/null
+++ b/result/ent7.sax
@@ -0,0 +1,16 @@
+xmlSAXUserParseFile returned error 27
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(item, , )
+SAX.entityDecl(sampleEnt, 4, (null), (null), <!ELEMENT item (para)+>)
+SAX.getParameterEntity(sampleEnt)
+SAX.entityDecl(sampleEnt, 1, (null), (null), the hyacinth girl)
+SAX.getEntity(sampleEnt)
+SAX.getParameterEntity(sampleEnt)
+SAX.error: PEReference: %sampleEnt; not found
+SAX.characters('they called me , 16)
+SAX.getEntity(sampleEnt)
+SAX.error: Entity 'sampleEnt' not defined
+SAX.characters(', 1)
+SAX.endDocument()
+xmlSAXUserParseFile returned error 27
diff --git a/result/ent8 b/result/ent8
new file mode 100644
index 0000000..86e6c30
--- /dev/null
+++ b/result/ent8
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY test1 "test 1">
+<!ENTITY test2 "test 2">
+]>
+<doc>
+ <Content>Reten&#xE7;&#xE3;o</Content>
+ <Content>&lt;&gt;</Content>
+ <Content>&test1;&test2;</Content>
+</doc>
diff --git a/result/ent8.rdr b/result/ent8.rdr
new file mode 100644
index 0000000..0977e90
--- /dev/null
+++ b/result/ent8.rdr
@@ -0,0 +1,21 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 1 Content 0 0
+2 3 #text 0 1 Retenção
+1 15 Content 0 0
+1 14 #text 0 1
+
+1 1 Content 0 0
+2 3 #text 0 1 <>
+1 15 Content 0 0
+1 14 #text 0 1
+
+1 1 Content 0 0
+2 5 test1 0 0
+2 5 test2 0 0
+1 15 Content 0 0
+1 14 #text 0 1
+
+0 15 doc 0 0
diff --git a/result/ent8.sax b/result/ent8.sax
new file mode 100644
index 0000000..b4e40c3
--- /dev/null
+++ b/result/ent8.sax
@@ -0,0 +1,39 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.entityDecl(test1, 1, (null), (null), test 1)
+SAX.getEntity(test1)
+SAX.entityDecl(test2, 1, (null), (null), test 2)
+SAX.getEntity(test2)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.characters(
+ , 4)
+SAX.startElement(Content)
+SAX.characters(Reten, 5)
+SAX.characters(ç, 2)
+SAX.characters(ã, 2)
+SAX.characters(o, 1)
+SAX.endElement(Content)
+SAX.characters(
+ , 4)
+SAX.startElement(Content)
+SAX.getEntity(lt)
+SAX.characters(<, 1)
+SAX.getEntity(gt)
+SAX.characters(>, 1)
+SAX.endElement(Content)
+SAX.characters(
+ , 4)
+SAX.startElement(Content)
+SAX.getEntity(test1)
+SAX.characters(test 1, 6)
+SAX.reference(test1)
+SAX.getEntity(test2)
+SAX.characters(test 2, 6)
+SAX.reference(test2)
+SAX.endElement(Content)
+SAX.characters(
+, 1)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/errors/attr1.xml b/result/errors/attr1.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/errors/attr1.xml
diff --git a/result/errors/attr1.xml.err b/result/errors/attr1.xml.err
new file mode 100644
index 0000000..e1e76c0
--- /dev/null
+++ b/result/errors/attr1.xml.err
@@ -0,0 +1,6 @@
+./test/errors/attr1.xml:2: parser error : AttValue: ' expected
+
+^
+./test/errors/attr1.xml:2: parser error : Extra content at the end of the document
+<foo foo="oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+ ^
diff --git a/result/errors/attr1.xml.str b/result/errors/attr1.xml.str
new file mode 100644
index 0000000..e1e76c0
--- /dev/null
+++ b/result/errors/attr1.xml.str
@@ -0,0 +1,6 @@
+./test/errors/attr1.xml:2: parser error : AttValue: ' expected
+
+^
+./test/errors/attr1.xml:2: parser error : Extra content at the end of the document
+<foo foo="oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+ ^
diff --git a/result/errors/attr2.xml b/result/errors/attr2.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/errors/attr2.xml
diff --git a/result/errors/attr2.xml.err b/result/errors/attr2.xml.err
new file mode 100644
index 0000000..f190a76
--- /dev/null
+++ b/result/errors/attr2.xml.err
@@ -0,0 +1,6 @@
+./test/errors/attr2.xml:2: parser error : AttValue: ' expected
+
+^
+./test/errors/attr2.xml:2: parser error : Extra content at the end of the document
+<foo foo=">ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+ ^
diff --git a/result/errors/attr2.xml.str b/result/errors/attr2.xml.str
new file mode 100644
index 0000000..f190a76
--- /dev/null
+++ b/result/errors/attr2.xml.str
@@ -0,0 +1,6 @@
+./test/errors/attr2.xml:2: parser error : AttValue: ' expected
+
+^
+./test/errors/attr2.xml:2: parser error : Extra content at the end of the document
+<foo foo=">ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+ ^
diff --git a/result/errors/name.xml b/result/errors/name.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/errors/name.xml
diff --git a/result/errors/name.xml.err b/result/errors/name.xml.err
new file mode 100644
index 0000000..1c93e20
--- /dev/null
+++ b/result/errors/name.xml.err
@@ -0,0 +1,3 @@
+./test/errors/name.xml:3: parser error : Couldn't find end of Start Tag foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo line 1
+
+^
diff --git a/result/errors/name.xml.str b/result/errors/name.xml.str
new file mode 100644
index 0000000..1c93e20
--- /dev/null
+++ b/result/errors/name.xml.str
@@ -0,0 +1,3 @@
+./test/errors/name.xml:3: parser error : Couldn't find end of Start Tag foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo line 1
+
+^
diff --git a/result/errors/name2.xml b/result/errors/name2.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/errors/name2.xml
diff --git a/result/errors/name2.xml.err b/result/errors/name2.xml.err
new file mode 100644
index 0000000..df61fd2
--- /dev/null
+++ b/result/errors/name2.xml.err
@@ -0,0 +1,6 @@
+./test/errors/name2.xml:2: parser error : Specification mandate value for attribute foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+
+^
+./test/errors/name2.xml:2: parser error : Extra content at the end of the document
+<foo foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+ ^
diff --git a/result/errors/name2.xml.str b/result/errors/name2.xml.str
new file mode 100644
index 0000000..df61fd2
--- /dev/null
+++ b/result/errors/name2.xml.str
@@ -0,0 +1,6 @@
+./test/errors/name2.xml:2: parser error : Specification mandate value for attribute foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+
+^
+./test/errors/name2.xml:2: parser error : Extra content at the end of the document
+<foo foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+ ^
diff --git a/result/eve.xml b/result/eve.xml
new file mode 100644
index 0000000..dab7208
--- /dev/null
+++ b/result/eve.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE spec PUBLIC "-//testspec//" "dtds/eve.dtd" [
+<!ENTITY iso6.doc.date "29-May-1999">
+]>
+<spec>
+</spec>
diff --git a/result/eve.xml.rdr b/result/eve.xml.rdr
new file mode 100644
index 0000000..6f08c55
--- /dev/null
+++ b/result/eve.xml.rdr
@@ -0,0 +1,5 @@
+0 10 spec 0 0
+0 1 spec 0 0
+1 14 #text 0 1
+
+0 15 spec 0 0
diff --git a/result/eve.xml.sax b/result/eve.xml.sax
new file mode 100644
index 0000000..1b416b2
--- /dev/null
+++ b/result/eve.xml.sax
@@ -0,0 +1,11 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(spec, -//testspec//, dtds/eve.dtd)
+SAX.entityDecl(iso6.doc.date, 1, (null), (null), 29-May-1999)
+SAX.getEntity(iso6.doc.date)
+SAX.externalSubset(spec, -//testspec//, dtds/eve.dtd)
+SAX.startElement(spec)
+SAX.characters(
+, 1)
+SAX.endElement(spec)
+SAX.endDocument()
diff --git a/result/example.dtd b/result/example.dtd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/example.dtd
diff --git a/result/intsubset.xml b/result/intsubset.xml
new file mode 100644
index 0000000..bd85795
--- /dev/null
+++ b/result/intsubset.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE root [
+<!ELEMENT root EMPTY>
+<!-- " -->]>
+<root/>
diff --git a/result/intsubset.xml.rdr b/result/intsubset.xml.rdr
new file mode 100644
index 0000000..7503422
--- /dev/null
+++ b/result/intsubset.xml.rdr
@@ -0,0 +1,2 @@
+0 10 root 0 0
+0 1 root 1 0
diff --git a/result/intsubset.xml.sax b/result/intsubset.xml.sax
new file mode 100644
index 0000000..a92e2b7
--- /dev/null
+++ b/result/intsubset.xml.sax
@@ -0,0 +1,9 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(root, , )
+SAX.elementDecl(root, 1, ...)
+SAX.comment( " )
+SAX.externalSubset(root, , )
+SAX.startElement(root)
+SAX.endElement(root)
+SAX.endDocument()
diff --git a/result/isolat1 b/result/isolat1
new file mode 100644
index 0000000..1e5a059
--- /dev/null
+++ b/result/isolat1
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<très>là</très>
diff --git a/result/isolat1.rdr b/result/isolat1.rdr
new file mode 100644
index 0000000..e289b2f
--- /dev/null
+++ b/result/isolat1.rdr
@@ -0,0 +1,3 @@
+0 1 très 0 0
+1 3 #text 0 1 là
+0 15 très 0 0
diff --git a/result/isolat1.sax b/result/isolat1.sax
new file mode 100644
index 0000000..bf2a6ee
--- /dev/null
+++ b/result/isolat1.sax
@@ -0,0 +1,7 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(très)
+SAX.characters(l, 1)
+SAX.characters(à, 2)
+SAX.endElement(très)
+SAX.endDocument()
diff --git a/result/isolat2 b/result/isolat2
new file mode 100644
index 0000000..8c290b9
--- /dev/null
+++ b/result/isolat2
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<tst>
+
+ The following table displays the characters in ISO 8859
+ Latin-1, which are printable and unlisted in the ascii
+ manual page.
+
+ Oct Dec Hex Char Description
+ --------------------------------------------------------------------
+ 240 160 A0 NO-BREAK SPACE
+ 241 161 A1 ¡ INVERTED EXCLAMATION MARK
+ 242 162 A2 ¢ CENT SIGN
+ 243 163 A3 £ POUND SIGN
+ 244 164 A4 ¤ CURRENCY SIGN
+ 245 165 A5 ¥ YEN SIGN
+ 246 166 A6 ¦ BROKEN BAR
+ 247 167 A7 § SECTION SIGN
+ 250 168 A8 ¨ DIAERESIS
+ 251 169 A9 © COPYRIGHT SIGN
+ 252 170 AA ª FEMININE ORDINAL INDICATOR
+ 253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 254 172 AC ¬ NOT SIGN
+ 255 173 AD ­ SOFT HYPHEN
+ 256 174 AE ® REGISTERED SIGN
+ 257 175 AF ¯ MACRON
+ 260 176 B0 ° DEGREE SIGN
+ 261 177 B1 ± PLUS-MINUS SIGN
+ 262 178 B2 ² SUPERSCRIPT TWO
+ 263 179 B3 ³ SUPERSCRIPT THREE
+ 264 180 B4 ´ ACUTE ACCENT
+ 265 181 B5 µ MICRO SIGN
+ 266 182 B6 ¶ PILCROW SIGN
+ 267 183 B7 · MIDDLE DOT
+ 270 184 B8 ¸ CEDILLA
+ 271 185 B9 ¹ SUPERSCRIPT ONE
+ 272 186 BA º MASCULINE ORDINAL INDICATOR
+ 273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 274 188 BC ¼ VULGAR FRACTION ONE QUARTER
+ 275 189 BD ½ VULGAR FRACTION ONE HALF
+ 276 190 BE ¾ VULGAR FRACTION THREE QUARTERS
+ 277 191 BF ¿ INVERTED QUESTION MARK
+ 300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
+ 301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
+ 302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ 303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
+ 304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
+ 305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
+ 306 198 C6 Æ LATIN CAPITAL LETTER AE
+ 307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
+ 310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
+ 311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
+ 312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ 313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
+ 314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
+ 315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
+ 316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ 317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
+ 320 208 D0 Ð LATIN CAPITAL LETTER ETH
+ 321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
+ 322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
+ 323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
+ 324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ 325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
+ 326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
+ 327 215 D7 × MULTIPLICATION SIGN
+ 330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
+ 331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
+ 332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
+ 333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ 334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
+ 335 221 DD Ý LATIN CAPITAL LETTER Y WITH ACUTE
+ 336 222 DE Þ LATIN CAPITAL LETTER THORN
+ 337 223 DF ß LATIN SMALL LETTER SHARP S
+ 340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
+ 341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
+ 342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
+ 343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
+ 344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
+ 345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
+ 346 230 E6 æ LATIN SMALL LETTER AE
+ 347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
+ 350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
+ 351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
+ 352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
+ 353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
+ 354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
+ 355 237 ED í LATIN SMALL LETTER I WITH ACUTE
+ 356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
+ 357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
+ 360 240 F0 ð LATIN SMALL LETTER ETH
+ 361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
+ 362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
+ 363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
+ 364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
+ 365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
+ 366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
+ 367 247 F7 ÷ DIVISION SIGN
+ 370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
+ 371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
+ 372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
+ 373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
+ 374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
+ 375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
+ 376 254 FE þ LATIN SMALL LETTER THORN
+ 377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
+
+</tst>
diff --git a/result/isolat2.rdr b/result/isolat2.rdr
new file mode 100644
index 0000000..524cb3e
--- /dev/null
+++ b/result/isolat2.rdr
@@ -0,0 +1,108 @@
+0 1 tst 0 0
+1 3 #text 0 1
+
+ The following table displays the characters in ISO 8859
+ Latin-1, which are printable and unlisted in the ascii
+ manual page.
+
+ Oct Dec Hex Char Description
+ --------------------------------------------------------------------
+ 240 160 A0 NO-BREAK SPACE
+ 241 161 A1 ¡ INVERTED EXCLAMATION MARK
+ 242 162 A2 ¢ CENT SIGN
+ 243 163 A3 £ POUND SIGN
+ 244 164 A4 ¤ CURRENCY SIGN
+ 245 165 A5 ¥ YEN SIGN
+ 246 166 A6 ¦ BROKEN BAR
+ 247 167 A7 § SECTION SIGN
+ 250 168 A8 ¨ DIAERESIS
+ 251 169 A9 © COPYRIGHT SIGN
+ 252 170 AA ª FEMININE ORDINAL INDICATOR
+ 253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 254 172 AC ¬ NOT SIGN
+ 255 173 AD ­ SOFT HYPHEN
+ 256 174 AE ® REGISTERED SIGN
+ 257 175 AF ¯ MACRON
+ 260 176 B0 ° DEGREE SIGN
+ 261 177 B1 ± PLUS-MINUS SIGN
+ 262 178 B2 ² SUPERSCRIPT TWO
+ 263 179 B3 ³ SUPERSCRIPT THREE
+ 264 180 B4 ´ ACUTE ACCENT
+ 265 181 B5 µ MICRO SIGN
+ 266 182 B6 ¶ PILCROW SIGN
+ 267 183 B7 · MIDDLE DOT
+ 270 184 B8 ¸ CEDILLA
+ 271 185 B9 ¹ SUPERSCRIPT ONE
+ 272 186 BA º MASCULINE ORDINAL INDICATOR
+ 273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 274 188 BC ¼ VULGAR FRACTION ONE QUARTER
+ 275 189 BD ½ VULGAR FRACTION ONE HALF
+ 276 190 BE ¾ VULGAR FRACTION THREE QUARTERS
+ 277 191 BF ¿ INVERTED QUESTION MARK
+ 300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
+ 301 193 C1 Ã LATIN CAPITAL LETTER A WITH ACUTE
+ 302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ 303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
+ 304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
+ 305 197 C5 Ã… LATIN CAPITAL LETTER A WITH RING ABOVE
+ 306 198 C6 Æ LATIN CAPITAL LETTER AE
+ 307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
+ 310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
+ 311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
+ 312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ 313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
+ 314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
+ 315 205 CD Ã LATIN CAPITAL LETTER I WITH ACUTE
+ 316 206 CE ÃŽ LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ 317 207 CF Ã LATIN CAPITAL LETTER I WITH DIAERESIS
+ 320 208 D0 Ã LATIN CAPITAL LETTER ETH
+ 321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
+ 322 210 D2 Ã’ LATIN CAPITAL LETTER O WITH GRAVE
+ 323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
+ 324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ 325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
+ 326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
+ 327 215 D7 × MULTIPLICATION SIGN
+ 330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
+ 331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
+ 332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
+ 333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ 334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
+ 335 221 DD Ã LATIN CAPITAL LETTER Y WITH ACUTE
+ 336 222 DE Þ LATIN CAPITAL LETTER THORN
+ 337 223 DF ß LATIN SMALL LETTER SHARP S
+ 340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
+ 341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
+ 342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
+ 343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
+ 344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
+ 345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
+ 346 230 E6 æ LATIN SMALL LETTER AE
+ 347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
+ 350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
+ 351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
+ 352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
+ 353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
+ 354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
+ 355 237 ED í LATIN SMALL LETTER I WITH ACUTE
+ 356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
+ 357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
+ 360 240 F0 ð LATIN SMALL LETTER ETH
+ 361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
+ 362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
+ 363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
+ 364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
+ 365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
+ 366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
+ 367 247 F7 ÷ DIVISION SIGN
+ 370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
+ 371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
+ 372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
+ 373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
+ 374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
+ 375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
+ 376 254 FE þ LATIN SMALL LETTER THORN
+ 377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
+
+
+0 15 tst 0 0
diff --git a/result/isolat2.sax b/result/isolat2.sax
new file mode 100644
index 0000000..737c948
--- /dev/null
+++ b/result/isolat2.sax
@@ -0,0 +1,35 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(tst)
+SAX.characters(
+
+ The following table d, 345)
+SAX.characters(¡ INVERTED EXCLAMATION MA, 300)
+SAX.characters( 250 168 A8 ¨ , 300)
+SAX.characters(SOFT HYPHEN
+ 256 174 , 300)
+SAX.characters( 264 180 B4 ´ AC, 300)
+SAX.characters(SCULINE ORDINAL INDICATOR
+ , 300)
+SAX.characters(1 BF ¿ INVERTED QUE, 300)
+SAX.characters( A WITH TILDE
+ 304 196, 300)
+SAX.characters( C8 È LATIN CAPITAL , 300)
+SAX.characters(APITAL LETTER I WITH GRAVE
+ , 300)
+SAX.characters( 321 209 D1 Ñ LA, 300)
+SAX.characters( LATIN CAPITAL LETTER O WITH T, 300)
+SAX.characters( 332 218 DA Ú LAT, 300)
+SAX.characters( LATIN CAPITAL LETTER THORN, 300)
+SAX.characters(3 227 E3 ã LATIN , 300)
+SAX.characters(R C WITH CEDILLA
+ 350 , 300)
+SAX.characters(36 EC ì LATIN SMALL, 300)
+SAX.characters(LETTER ETH
+ 361 241 , 300)
+SAX.characters( õ LATIN SMALL LETTER O , 300)
+SAX.characters( 250 FA ú LATIN SMA, 300)
+SAX.characters(L LETTER THORN
+ 377 25, 85)
+SAX.endElement(tst)
+SAX.endDocument()
diff --git a/result/isolat3 b/result/isolat3
new file mode 100644
index 0000000..1abf7b4
--- /dev/null
+++ b/result/isolat3
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<rec>
+<eg><![CDATA[<!ENTITY % pub "&#xc9;ditions Gallimard" >
+<!ENTITY rights "All rights reserved" >
+<!ENTITY book "La Peste: Albert Camus,
+&#xA9; 1947 %pub;. &rights;" >]]></eg>
+then the replacement text for the entity "<code>book</code>" is:
+<eg>La Peste: Albert Camus,
+© 1947 Éditions Gallimard. &amp;rights;</eg>
+</rec>
diff --git a/result/isolat3.rdr b/result/isolat3.rdr
new file mode 100644
index 0000000..1067c0f
--- /dev/null
+++ b/result/isolat3.rdr
@@ -0,0 +1,23 @@
+0 1 rec 0 0
+1 14 #text 0 1
+
+1 1 eg 0 0
+2 4 #cdata-section 0 1 <!ENTITY % pub "&#xc9;ditions Gallimard" >
+<!ENTITY rights "All rights reserved" >
+<!ENTITY book "La Peste: Albert Camus,
+&#xA9; 1947 %pub;. &rights;" >
+1 15 eg 0 0
+1 3 #text 0 1
+then the replacement text for the entity "
+1 1 code 0 0
+2 3 #text 0 1 book
+1 15 code 0 0
+1 3 #text 0 1 " is:
+
+1 1 eg 0 0
+2 3 #text 0 1 La Peste: Albert Camus,
+© 1947 Éditions Gallimard. &rights;
+1 15 eg 0 0
+1 14 #text 0 1
+
+0 15 rec 0 0
diff --git a/result/isolat3.sax b/result/isolat3.sax
new file mode 100644
index 0000000..17952bb
--- /dev/null
+++ b/result/isolat3.sax
@@ -0,0 +1,30 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(rec)
+SAX.characters(
+, 1)
+SAX.startElement(eg)
+SAX.pcdata(<!ENTITY % pub "&, 162)
+SAX.endElement(eg)
+SAX.characters(
+then the replacement text for, 43)
+SAX.startElement(code)
+SAX.characters(book, 4)
+SAX.endElement(code)
+SAX.characters(" is:
+, 6)
+SAX.startElement(eg)
+SAX.characters(La Peste: Albert Camus,
+, 25)
+SAX.characters(©, 2)
+SAX.characters( 1947 , 6)
+SAX.characters(É, 2)
+SAX.characters(ditions Gallimard. , 19)
+SAX.getEntity(amp)
+SAX.characters(&, 1)
+SAX.characters(rights;, 7)
+SAX.endElement(eg)
+SAX.characters(
+, 1)
+SAX.endElement(rec)
+SAX.endDocument()
diff --git a/result/namespaces/err_0.xml b/result/namespaces/err_0.xml
new file mode 100644
index 0000000..968d954
--- /dev/null
+++ b/result/namespaces/err_0.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<foo xmlnsbar="1"/>
diff --git a/result/namespaces/err_0.xml.err b/result/namespaces/err_0.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/namespaces/err_0.xml.err
diff --git a/result/namespaces/err_1.xml b/result/namespaces/err_1.xml
new file mode 100644
index 0000000..a4aa8ff
--- /dev/null
+++ b/result/namespaces/err_1.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<foo xmlns:="http://example.com/"/>
diff --git a/result/namespaces/err_1.xml.err b/result/namespaces/err_1.xml.err
new file mode 100644
index 0000000..77466cf
--- /dev/null
+++ b/result/namespaces/err_1.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_1.xml:1: namespace error : Failed to parse QName 'xmlns:'
+<foo xmlns:="http://example.com/"/>
+ ^
diff --git a/result/namespaces/err_10.xml b/result/namespaces/err_10.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/namespaces/err_10.xml
diff --git a/result/namespaces/err_10.xml.err b/result/namespaces/err_10.xml.err
new file mode 100644
index 0000000..a4a4b55
--- /dev/null
+++ b/result/namespaces/err_10.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_10.xml:1: parser error : Attribute xmlns redefined
+<tst xmlns="http://example.com/" xmlns="http://example.com/"/>
+ ^
diff --git a/result/namespaces/err_11.xml b/result/namespaces/err_11.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/namespaces/err_11.xml
diff --git a/result/namespaces/err_11.xml.err b/result/namespaces/err_11.xml.err
new file mode 100644
index 0000000..619bc00
--- /dev/null
+++ b/result/namespaces/err_11.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_11.xml:1: parser error : Attribute xmlns:a redefined
+<tst xmlns:a="http://example.com/" xmlns:a="http://example.com/"/>
+ ^
diff --git a/result/namespaces/err_2.xml b/result/namespaces/err_2.xml
new file mode 100644
index 0000000..73e727b
--- /dev/null
+++ b/result/namespaces/err_2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<:/>
diff --git a/result/namespaces/err_2.xml.err b/result/namespaces/err_2.xml.err
new file mode 100644
index 0000000..031bcff
--- /dev/null
+++ b/result/namespaces/err_2.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_2.xml:1: namespace error : Failed to parse QName ':'
+<:/>
+ ^
diff --git a/result/namespaces/err_3.xml b/result/namespaces/err_3.xml
new file mode 100644
index 0000000..ee51834
--- /dev/null
+++ b/result/namespaces/err_3.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<:foo/>
diff --git a/result/namespaces/err_3.xml.err b/result/namespaces/err_3.xml.err
new file mode 100644
index 0000000..a18fe9f
--- /dev/null
+++ b/result/namespaces/err_3.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_3.xml:1: namespace error : Failed to parse QName ':foo'
+<:foo/>
+ ^
diff --git a/result/namespaces/err_4.xml b/result/namespaces/err_4.xml
new file mode 100644
index 0000000..d0d664e
--- /dev/null
+++ b/result/namespaces/err_4.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<f: xmlns:f="http://example.com/foo"/>
diff --git a/result/namespaces/err_4.xml.err b/result/namespaces/err_4.xml.err
new file mode 100644
index 0000000..c9b0c02
--- /dev/null
+++ b/result/namespaces/err_4.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_4.xml:1: namespace error : Failed to parse QName 'f:'
+<f: xmlns:f="http://example.com/foo"/>
+ ^
diff --git a/result/namespaces/err_5.xml b/result/namespaces/err_5.xml
new file mode 100644
index 0000000..7d8d0b2
--- /dev/null
+++ b/result/namespaces/err_5.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<f:a: xmlns:f="http://example.com/foo"/>
diff --git a/result/namespaces/err_5.xml.err b/result/namespaces/err_5.xml.err
new file mode 100644
index 0000000..432a2e1
--- /dev/null
+++ b/result/namespaces/err_5.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_5.xml:1: namespace error : Failed to parse QName 'f:a:'
+<f:a: xmlns:f="http://example.com/foo"/>
+ ^
diff --git a/result/namespaces/err_6.xml b/result/namespaces/err_6.xml
new file mode 100644
index 0000000..daa2a58
--- /dev/null
+++ b/result/namespaces/err_6.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<f:a:b xmlns:f="http://example.com/foo"/>
diff --git a/result/namespaces/err_6.xml.err b/result/namespaces/err_6.xml.err
new file mode 100644
index 0000000..47c14fd
--- /dev/null
+++ b/result/namespaces/err_6.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_6.xml:1: namespace error : Failed to parse QName 'f:a:'
+<f:a:b xmlns:f="http://example.com/foo"/>
+ ^
diff --git a/result/namespaces/err_7.xml b/result/namespaces/err_7.xml
new file mode 100644
index 0000000..f4e5164
--- /dev/null
+++ b/result/namespaces/err_7.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<foo/>
diff --git a/result/namespaces/err_7.xml.err b/result/namespaces/err_7.xml.err
new file mode 100644
index 0000000..e7ff95b
--- /dev/null
+++ b/result/namespaces/err_7.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_7.xml:1: namespace error : Namespace prefix f on foo is not defined
+<f:foo/>
+ ^
diff --git a/result/namespaces/err_8.xml b/result/namespaces/err_8.xml
new file mode 100644
index 0000000..5608312
--- /dev/null
+++ b/result/namespaces/err_8.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<tst/>
diff --git a/result/namespaces/err_8.xml.err b/result/namespaces/err_8.xml.err
new file mode 100644
index 0000000..e6735d7
--- /dev/null
+++ b/result/namespaces/err_8.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_8.xml:1: namespace error : xml namespace prefix mapped to wrong URI
+<tst xmlns:xml="http://example.com/"/>
+ ^
diff --git a/result/namespaces/err_9.xml b/result/namespaces/err_9.xml
new file mode 100644
index 0000000..0407dff
--- /dev/null
+++ b/result/namespaces/err_9.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<tst xmlns:a="http://example.com/" xmlns:b="http://example.com/" a:err="1" b:err="2"/>
diff --git a/result/namespaces/err_9.xml.err b/result/namespaces/err_9.xml.err
new file mode 100644
index 0000000..d1837a1
--- /dev/null
+++ b/result/namespaces/err_9.xml.err
@@ -0,0 +1,3 @@
+./test/namespaces/err_9.xml:2: namespace error : Namespaced Attribute err in 'http://example.com/' redefined
+ a:err="1" b:err="2"/>
+ ^
diff --git a/result/noent/att1 b/result/noent/att1
new file mode 100644
index 0000000..00aa6be
--- /dev/null
+++ b/result/noent/att1
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<doc attr="to normalize with a space"/>
diff --git a/result/noent/att2 b/result/noent/att2
new file mode 100644
index 0000000..28989a2
--- /dev/null
+++ b/result/noent/att2
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<doc attr="to normalize with a space"/>
diff --git a/result/noent/att3 b/result/noent/att3
new file mode 100644
index 0000000..3f3ac5c
--- /dev/null
+++ b/result/noent/att3
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<select onclick="aaaa&#10; bbbb&#xA0;">f&#xA0;oo</select>
diff --git a/result/noent/att4 b/result/noent/att4
new file mode 100644
index 0000000..882cea7
--- /dev/null
+++ b/result/noent/att4
@@ -0,0 +1,9264 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XML Spy v4.4 U (http://www.xmlspy.com) by Slava (GIVC) -->
+<electroxml modified="20021216T072726">
+ <data from="20021031T22" to="20021130T22">
+ <select>
+ <device serialnumb="E00003562">
+ <par memind="113400" h="3dc1a8de">
+ <val o="0" v="53"/>
+ <val o="e08" v="53"/>
+ <val o="1c32" v="53"/>
+ <val o="2a3c" v="53"/>
+ <val o="3835" v="53"/>
+ <val o="4645" v="53"/>
+ <val o="5455" v="53"/>
+ <val o="6265" v="53"/>
+ <val o="7075" v="53"/>
+ <val o="7e85" v="53"/>
+ <val o="8c96" v="53"/>
+ <val o="9aa5" v="53"/>
+ <val o="a8b6" v="53"/>
+ <val o="b6c5" v="53"/>
+ <val o="c4d7" v="53"/>
+ <val o="d30b" v="53"/>
+ <val o="e0f6" v="53"/>
+ <val o="ef06" v="53"/>
+ <val o="fd17" v="53"/>
+ <val o="10b27" v="53"/>
+ <val o="11937" v="53"/>
+ <val o="12746" v="53"/>
+ <val o="13556" v="53"/>
+ <val o="14366" v="53"/>
+ <val o="15181" v="53"/>
+ <val o="15f85" v="53"/>
+ <val o="16d95" v="53"/>
+ <val o="17ba4" v="53"/>
+ <val o="189b5" v="53"/>
+ <val o="197c4" v="53"/>
+ <val o="1a5d5" v="53"/>
+ <val o="1b3e6" v="53"/>
+ <val o="1c1f6" v="53"/>
+ <val o="1d005" v="53"/>
+ <val o="1de15" v="53"/>
+ <val o="1ec25" v="53"/>
+ <val o="1fa36" v="53"/>
+ <val o="20845" v="53"/>
+ <val o="21656" v="53"/>
+ <val o="22465" v="53"/>
+ <val o="23276" v="53"/>
+ <val o="24086" v="53"/>
+ <val o="24e99" v="53"/>
+ <val o="25ca7" v="53"/>
+ <val o="26ab7" v="53"/>
+ <val o="278c6" v="53"/>
+ <val o="286d6" v="53"/>
+ <val o="294e6" v="53"/>
+ <val o="2a301" v="53"/>
+ <val o="2b105" v="53"/>
+ <val o="2bf15" v="53"/>
+ <val o="2cd25" v="53"/>
+ <val o="2db35" v="53"/>
+ <val o="2e946" v="53"/>
+ <val o="2f755" v="53"/>
+ <val o="30566" v="53"/>
+ <val o="31375" v="53"/>
+ <val o="3219e" v="53"/>
+ <val o="32f96" v="53"/>
+ <val o="33da6" v="53"/>
+ <val o="34bb6" v="53"/>
+ <val o="359de" v="53"/>
+ <val o="367d6" v="53"/>
+ <val o="375e6" v="53"/>
+ <val o="3840e" v="53"/>
+ <val o="3921e" v="53"/>
+ <val o="3a016" v="53"/>
+ <val o="3ae27" v="53"/>
+ <val o="3bc36" v="53"/>
+ <val o="3ca47" v="53"/>
+ <val o="3d856" v="53"/>
+ <val o="3e667" v="53"/>
+ <val o="3f481" v="53"/>
+ <val o="40285" v="53"/>
+ <val o="41095" v="53"/>
+ <val o="41ea5" v="53"/>
+ <val o="42cb5" v="53"/>
+ <val o="43ac5" v="53"/>
+ <val o="448d5" v="53"/>
+ <val o="456e6" v="53"/>
+ <val o="464f5" v="53"/>
+ <val o="480ff" v="53"/>
+ <val o="48f0e" v="53"/>
+ <val o="49d1d" v="53"/>
+ <val o="4ab46" v="53"/>
+ <val o="4b955" v="53"/>
+ <val o="4c769" v="53"/>
+ <val o="4d577" v="53"/>
+ <val o="4e387" v="53"/>
+ <val o="4f196" v="53"/>
+ <val o="4ffa6" v="53"/>
+ <val o="50dd0" v="53"/>
+ <val o="51bc6" v="53"/>
+ <val o="529d6" v="53"/>
+ <val o="537e7" v="53"/>
+ <val o="54600" v="53"/>
+ <val o="55406" v="53"/>
+ <val o="56215" v="53"/>
+ <val o="57026" v="53"/>
+ <val o="57e36" v="53"/>
+ <val o="58c46" v="53"/>
+ <val o="59a70" v="53"/>
+ <val o="5a867" v="53"/>
+ <val o="5b676" v="53"/>
+ <val o="5c487" v="53"/>
+ <val o="5d296" v="53"/>
+ <val o="5e0a9" v="53"/>
+ <val o="5eeb8" v="53"/>
+ <val o="5fcc6" v="53"/>
+ <val o="60ad7" v="53"/>
+ <val o="618e7" v="53"/>
+ <val o="626f7" v="53"/>
+ <val o="63507" v="53"/>
+ <val o="64317" v="53"/>
+ <val o="65127" v="53"/>
+ <val o="65f37" v="53"/>
+ <val o="66d46" v="53"/>
+ <val o="67b57" v="53"/>
+ <val o="68967" v="53"/>
+ <val o="69782" v="53"/>
+ <val o="6a586" v="53"/>
+ <val o="6b395" v="53"/>
+ <val o="6c1a6" v="53"/>
+ <val o="6cfb5" v="53"/>
+ <val o="6ddc6" v="53"/>
+ <val o="6ebd6" v="53"/>
+ <val o="6f9e6" v="53"/>
+ <val o="707f6" v="53"/>
+ <val o="71607" v="53"/>
+ <val o="72417" v="53"/>
+ <val o="73227" v="53"/>
+ <val o="74037" v="53"/>
+ <val o="74e47" v="53"/>
+ <val o="75c57" v="53"/>
+ <val o="76a63" v="53"/>
+ <val o="77873" v="53"/>
+ <val o="78680" v="53"/>
+ <val o="7948f" v="53"/>
+ <val o="7a29f" v="53"/>
+ <val o="7b0af" v="53"/>
+ <val o="7bebf" v="53"/>
+ <val o="7cccf" v="53"/>
+ <val o="7dadf" v="53"/>
+ <val o="7e8fa" v="53"/>
+ <val o="7f70a" v="53"/>
+ <val o="8051a" v="53"/>
+ <val o="8132a" v="53"/>
+ <val o="8213a" v="53"/>
+ <val o="82f4a" v="53"/>
+ <val o="83d5a" v="53"/>
+ <val o="84b6a" v="53"/>
+ <val o="8597a" v="53"/>
+ <val o="8678b" v="53"/>
+ <val o="8759b" v="53"/>
+ <val o="883ac" v="53"/>
+ <val o="891bb" v="53"/>
+ <val o="89fca" v="53"/>
+ <val o="8adda" v="53"/>
+ <val o="8bbeb" v="53"/>
+ <val o="8c9fc" v="53"/>
+ <val o="8d80b" v="53"/>
+ <val o="8e61a" v="53"/>
+ <val o="8f42a" v="53"/>
+ <val o="9023a" v="53"/>
+ <val o="9104a" v="53"/>
+ <val o="91e5a" v="53"/>
+ <val o="92c6a" v="53"/>
+ <val o="93a84" v="53"/>
+ <val o="94885" v="53"/>
+ <val o="95694" v="53"/>
+ <val o="964a5" v="53"/>
+ <val o="972b4" v="53"/>
+ <val o="980c5" v="53"/>
+ <val o="98ed4" v="53"/>
+ <val o="99ce5" v="53"/>
+ <val o="9aaf5" v="53"/>
+ <val o="9b906" v="53"/>
+ <val o="9c716" v="53"/>
+ <val o="9d526" v="53"/>
+ <val o="9e336" v="53"/>
+ <val o="9f145" v="53"/>
+ <val o="9ff56" v="53"/>
+ <val o="a0d65" v="53"/>
+ <val o="a1b77" v="53"/>
+ <val o="a2986" v="53"/>
+ <val o="a3795" v="53"/>
+ <val o="a45a7" v="53"/>
+ <val o="a53b6" v="53"/>
+ <val o="a61c7" v="53"/>
+ <val o="a6fd6" v="53"/>
+ <val o="a7e00" v="53"/>
+ <val o="a8c00" v="53"/>
+ <val o="a9a05" v="53"/>
+ <val o="aa815" v="53"/>
+ <val o="ab625" v="53"/>
+ <val o="ac435" v="53"/>
+ <val o="ad245" v="53"/>
+ <val o="ae055" v="53"/>
+ <val o="aee65" v="53"/>
+ <val o="afc75" v="53"/>
+ <val o="b0a85" v="53"/>
+ <val o="b26a6" v="53"/>
+ <val o="b34b6" v="53"/>
+ <val o="b42c6" v="53"/>
+ <val o="b50d6" v="53"/>
+ <val o="b5ee7" v="53"/>
+ <val o="b6cf6" v="53"/>
+ <val o="b7b07" v="53"/>
+ <val o="b8917" v="53"/>
+ <val o="b9728" v="53"/>
+ <val o="ba537" v="53"/>
+ <val o="bb347" v="53"/>
+ <val o="bc157" v="53"/>
+ <val o="bcf67" v="53"/>
+ <val o="bdd81" v="53"/>
+ <val o="beb86" v="53"/>
+ <val o="bf995" v="53"/>
+ <val o="c07a6" v="53"/>
+ <val o="c15b5" v="53"/>
+ <val o="c23c6" v="53"/>
+ <val o="c31d5" v="53"/>
+ <val o="c3fe6" v="53"/>
+ <val o="c4df5" v="53"/>
+ <val o="c5c06" v="53"/>
+ <val o="c6a16" v="53"/>
+ <val o="c7826" v="53"/>
+ <val o="c8636" v="53"/>
+ <val o="c9446" v="53"/>
+ <val o="ca256" v="53"/>
+ <val o="cb066" v="53"/>
+ <val o="cbe76" v="53"/>
+ <val o="ccc87" v="53"/>
+ <val o="cda96" v="53"/>
+ <val o="ce8a8" v="53"/>
+ <val o="cf6b7" v="53"/>
+ <val o="d04c8" v="53"/>
+ <val o="d12d7" v="53"/>
+ <val o="d20e7" v="53"/>
+ <val o="d2f02" v="53"/>
+ <val o="d3d05" v="53"/>
+ <val o="d4b15" v="53"/>
+ <val o="d5926" v="53"/>
+ <val o="d6735" v="53"/>
+ <val o="d7546" v="53"/>
+ <val o="d8355" v="53"/>
+ <val o="d9166" v="53"/>
+ <val o="d9f75" v="53"/>
+ <val o="dad87" v="53"/>
+ <val o="dbb97" v="53"/>
+ <val o="dc9a8" v="53"/>
+ <val o="dd7b7" v="53"/>
+ <val o="de5c6" v="53"/>
+ <val o="df3d7" v="53"/>
+ <val o="e01d7" v="53"/>
+ <val o="e0fe5" v="53"/>
+ <val o="e1df5" v="53"/>
+ <val o="e2c04" v="53"/>
+ <val o="e3a14" v="53"/>
+ <val o="e4824" v="53"/>
+ <val o="e5634" v="53"/>
+ <val o="e6444" v="53"/>
+ <val o="e7255" v="53"/>
+ <val o="e806f" v="53"/>
+ <val o="e8e7f" v="53"/>
+ <val o="e9c8e" v="53"/>
+ <val o="eaa9f" v="53"/>
+ <val o="eb8ae" v="53"/>
+ <val o="ec6bf" v="53"/>
+ <val o="ed4ce" v="53"/>
+ <val o="ee2df" v="53"/>
+ <val o="ef0ef" v="53"/>
+ <val o="eff01" v="53"/>
+ <val o="f0d10" v="53"/>
+ <val o="f1b20" v="53"/>
+ <val o="f2930" v="53"/>
+ <val o="f3740" v="53"/>
+ <val o="f4551" v="53"/>
+ <val o="f5361" v="53"/>
+ <val o="f6172" v="53"/>
+ <val o="f6f80" v="53"/>
+ <val o="f7d91" v="53"/>
+ <val o="f8ba1" v="53"/>
+ <val o="f99b1" v="53"/>
+ <val o="fa7c0" v="53"/>
+ <val o="fb5d1" v="53"/>
+ <val o="fc3e0" v="53"/>
+ <val o="fd1fb" v="53"/>
+ <val o="fe00b" v="53"/>
+ <val o="fee1c" v="53"/>
+ <val o="ffc2c" v="53"/>
+ <val o="100a3b" v="53"/>
+ <val o="10184c" v="53"/>
+ <val o="10265b" v="53"/>
+ <val o="10346c" v="53"/>
+ <val o="10427b" v="53"/>
+ <val o="10508d" v="53"/>
+ <val o="105e9d" v="53"/>
+ <val o="106cad" v="53"/>
+ <val o="107abd" v="53"/>
+ <val o="1088cd" v="53"/>
+ <val o="1096de" v="53"/>
+ <val o="10a4ed" v="53"/>
+ <val o="10b2fe" v="53"/>
+ <val o="10c10d" v="53"/>
+ <val o="10cf1e" v="53"/>
+ <val o="10dd2e" v="53"/>
+ <val o="10eb66" v="53"/>
+ <val o="10f94e" v="53"/>
+ <val o="11075e" v="53"/>
+ <val o="11156d" v="53"/>
+ <val o="112388" v="53"/>
+ <val o="113187" v="53"/>
+ <val o="113fb0" v="53"/>
+ <val o="114da6" v="53"/>
+ <val o="115bb6" v="53"/>
+ <val o="1169c6" v="53"/>
+ <val o="1177d6" v="53"/>
+ <val o="1185e8" v="53"/>
+ <val o="1193f7" v="53"/>
+ <val o="11a208" v="53"/>
+ <val o="11b017" v="53"/>
+ <val o="11be2f" v="53"/>
+ <val o="11cc37" v="53"/>
+ <val o="11da47" v="53"/>
+ <val o="11e857" v="53"/>
+ <val o="11f667" v="53"/>
+ <val o="120578" v="53"/>
+ <val o="121386" v="53"/>
+ <val o="122196" v="53"/>
+ <val o="122fa6" v="53"/>
+ <val o="123db5" v="53"/>
+ <val o="124bc5" v="53"/>
+ <val o="1259d5" v="53"/>
+ <val o="1267e4" v="53"/>
+ <val o="127600" v="53"/>
+ <val o="128305" v="53"/>
+ <val o="129115" v="53"/>
+ <val o="129f25" v="53"/>
+ <val o="12ad35" v="53"/>
+ <val o="12bb45" v="53"/>
+ <val o="12c954" v="53"/>
+ <val o="12d766" v="53"/>
+ <val o="12e575" v="53"/>
+ <val o="12f386" v="53"/>
+ <val o="130196" v="53"/>
+ <val o="130fa6" v="53"/>
+ <val o="131db7" v="53"/>
+ <val o="132bc5" v="53"/>
+ <val o="1339d4" v="53"/>
+ <val o="1347e5" v="53"/>
+ <val o="1355f4" v="53"/>
+ <val o="136404" v="53"/>
+ <val o="137214" v="53"/>
+ <val o="138024" v="53"/>
+ <val o="138e33" v="53"/>
+ <val o="139c44" v="53"/>
+ <val o="13aa54" v="53"/>
+ <val o="13b865" v="53"/>
+ <val o="13c67e" v="53"/>
+ <val o="13d48e" v="53"/>
+ <val o="13e29e" v="53"/>
+ <val o="13f0ae" v="53"/>
+ <val o="13febf" v="53"/>
+ <val o="140ccf" v="53"/>
+ <val o="141adf" v="53"/>
+ <val o="1428ef" v="53"/>
+ <val o="1436ff" v="53"/>
+ <val o="14450f" v="53"/>
+ <val o="14531f" v="53"/>
+ <val o="146130" v="53"/>
+ <val o="146f40" v="53"/>
+ <val o="147d44" v="53"/>
+ <val o="148b57" v="53"/>
+ <val o="149965" v="53"/>
+ <val o="14a775" v="53"/>
+ <val o="14b584" v="53"/>
+ <val o="14c397" v="53"/>
+ <val o="14d1a4" v="53"/>
+ <val o="14dfb6" v="53"/>
+ <val o="14edc5" v="53"/>
+ <val o="14fbd5" v="53"/>
+ <val o="1509e5" v="53"/>
+ <val o="1517ff" v="53"/>
+ <val o="152605" v="53"/>
+ <val o="153415" v="53"/>
+ <val o="154225" v="53"/>
+ <val o="155035" v="53"/>
+ <val o="155e45" v="53"/>
+ <val o="156c55" v="53"/>
+ <val o="157a65" v="53"/>
+ <val o="158875" v="53"/>
+ <val o="159686" v="53"/>
+ <val o="15a495" v="53"/>
+ <val o="15b2a6" v="53"/>
+ <val o="15c0b6" v="53"/>
+ <val o="15cec6" v="53"/>
+ <val o="15dcd5" v="53"/>
+ <val o="15eae6" v="53"/>
+ <val o="15f8f5" v="53"/>
+ <val o="160706" v="53"/>
+ <val o="161517" v="53"/>
+ <val o="162326" v="53"/>
+ <val o="163137" v="53"/>
+ <val o="163f46" v="53"/>
+ <val o="164d57" v="53"/>
+ <val o="165b67" v="53"/>
+ <val o="166982" v="53"/>
+ <val o="167786" v="53"/>
+ <val o="168596" v="53"/>
+ <val o="1693a6" v="53"/>
+ <val o="16a1b5" v="53"/>
+ <val o="16afc6" v="53"/>
+ <val o="16bdd5" v="53"/>
+ <val o="16cbe6" v="53"/>
+ <val o="16d9f6" v="53"/>
+ <val o="16e807" v="53"/>
+ <val o="16f616" v="53"/>
+ <val o="170429" v="53"/>
+ <val o="171236" v="53"/>
+ <val o="172047" v="53"/>
+ <val o="172e57" v="53"/>
+ <val o="173c67" v="53"/>
+ <val o="174a77" v="53"/>
+ <val o="175887" v="53"/>
+ <val o="176694" v="53"/>
+ <val o="1774a3" v="53"/>
+ <val o="1782b3" v="53"/>
+ <val o="1790c5" v="53"/>
+ <val o="179ed4" v="53"/>
+ <val o="17ace4" v="53"/>
+ <val o="17bafd" v="53"/>
+ <val o="17c90f" v="53"/>
+ <val o="17d71e" v="53"/>
+ <val o="17e52f" v="53"/>
+ <val o="17f33f" v="53"/>
+ <val o="18014f" v="53"/>
+ <val o="180f5f" v="53"/>
+ <val o="181d6e" v="53"/>
+ <val o="182b7f" v="53"/>
+ <val o="18398f" v="53"/>
+ <val o="1847a1" v="53"/>
+ <val o="1855af" v="53"/>
+ <val o="1863c0" v="53"/>
+ <val o="1871cf" v="53"/>
+ <val o="187fe0" v="53"/>
+ <val o="188def" v="53"/>
+ <val o="189c00" v="53"/>
+ <val o="18b80d" v="53"/>
+ <val o="18c61c" v="53"/>
+ <val o="18d42c" v="53"/>
+ <val o="18e23b" v="53"/>
+ <val o="18f04b" v="53"/>
+ <val o="18fe5e" v="53"/>
+ <val o="190c76" v="53"/>
+ <val o="191a86" v="53"/>
+ <val o="192896" v="53"/>
+ <val o="1936a6" v="53"/>
+ <val o="1944b7" v="53"/>
+ <val o="1952c6" v="53"/>
+ <val o="1960d7" v="53"/>
+ <val o="196ee6" v="53"/>
+ <val o="197cf8" v="53"/>
+ <val o="198b0f" v="53"/>
+ <val o="19991f" v="53"/>
+ <val o="19b541" v="53"/>
+ <val o="19c34d" v="53"/>
+ <val o="19d15e" v="53"/>
+ <val o="19df80" v="53"/>
+ <val o="19ed90" v="53"/>
+ <val o="19eebe" v="53"/>
+ <val o="19fb8e" v="53"/>
+ <val o="1a09a0" v="53"/>
+ <val o="1a17ae" v="53"/>
+ <val o="1a25be" v="53"/>
+ <val o="1a33cd" v="53"/>
+ <val o="1a41dd" v="53"/>
+ <val o="1a4fed" v="53"/>
+ <val o="1a5e08" v="53"/>
+ <val o="1a6c05" v="53"/>
+ <val o="1a7a15" v="53"/>
+ <val o="1a8826" v="53"/>
+ <val o="1a9637" v="53"/>
+ <val o="1aa445" v="53"/>
+ <val o="1ab255" v="53"/>
+ <val o="1ac065" v="53"/>
+ <val o="1ace75" v="53"/>
+ <val o="1adc87" v="53"/>
+ <val o="1aea96" v="53"/>
+ <val o="1af8a7" v="53"/>
+ <val o="1b06b7" v="53"/>
+ <val o="1b14c6" v="53"/>
+ <val o="1c7460" v="55"/>
+ <val o="1c8270" v="55"/>
+ <val o="1c907e" v="55"/>
+ <val o="1c9e8f" v="55"/>
+ <val o="1caca2" v="55"/>
+ <val o="1cbab1" v="55"/>
+ <val o="1cc8c1" v="55"/>
+ <val o="1cd6d0" v="55"/>
+ <val o="1ce4de" v="55"/>
+ <val o="1cf2f0" v="55"/>
+ <val o="1d0109" v="55"/>
+ <val o="1d0f06" v="55"/>
+ <val o="1d1d15" v="55"/>
+ <val o="1d2b25" v="55"/>
+ <val o="1d3935" v="55"/>
+ <val o="1d4745" v="55"/>
+ <val o="1d5555" v="55"/>
+ <val o="1d6366" v="55"/>
+ <val o="1d7175" v="55"/>
+ <val o="1d7f86" v="55"/>
+ <val o="1d8d95" v="55"/>
+ <val o="1d9ba6" v="55"/>
+ <val o="1da9b6" v="55"/>
+ <val o="1db7c7" v="55"/>
+ <val o="1dc5d5" v="55"/>
+ <val o="1dd3e6" v="55"/>
+ <val o="1de1f5" v="55"/>
+ <val o="1df006" v="55"/>
+ <val o="1dfe16" v="55"/>
+ <val o="1e0c26" v="55"/>
+ <val o="1e1a36" v="55"/>
+ <val o="1e2847" v="55"/>
+ <val o="1e3659" v="55"/>
+ <val o="1e4467" v="55"/>
+ <val o="1e5281" v="55"/>
+ <val o="1e6086" v="55"/>
+ <val o="1e6e96" v="55"/>
+ <val o="1e7ca6" v="55"/>
+ <val o="1e8ab5" v="55"/>
+ <val o="1e98c6" v="55"/>
+ <val o="1ea6d5" v="55"/>
+ <val o="1eb4e6" v="55"/>
+ <val o="1ec2f6" v="55"/>
+ <val o="1ed106" v="55"/>
+ <val o="1edf16" v="55"/>
+ <val o="1eed26" v="55"/>
+ <val o="1efb36" v="55"/>
+ <val o="1f0946" v="55"/>
+ <val o="1f1756" v="55"/>
+ <val o="1f2566" v="55"/>
+ <val o="1f3376" v="55"/>
+ <val o="1f4187" v="55"/>
+ <val o="1f4f96" v="55"/>
+ <val o="1f5da7" v="55"/>
+ <val o="1f6bb6" v="55"/>
+ <val o="1f79c7" v="55"/>
+ <val o="1f87d6" v="55"/>
+ <val o="1f95e7" v="55"/>
+ <val o="1fa401" v="55"/>
+ <val o="1fb204" v="55"/>
+ <val o="1fc016" v="55"/>
+ <val o="1fce25" v="55"/>
+ <val o="1fdc35" v="55"/>
+ <val o="1fea45" v="55"/>
+ <val o="1ff855" v="55"/>
+ <val o="200665" v="55"/>
+ <val o="201475" v="55"/>
+ <val o="202286" v="55"/>
+ <val o="203095" v="55"/>
+ <val o="203ea5" v="55"/>
+ <val o="204cb6" v="55"/>
+ <val o="205ac6" v="55"/>
+ <val o="2068d6" v="55"/>
+ <val o="2076e6" v="55"/>
+ <val o="2084f6" v="55"/>
+ <val o="209306" v="55"/>
+ <val o="20a116" v="55"/>
+ <val o="20af26" v="55"/>
+ <val o="20bd37" v="55"/>
+ <val o="20cb46" v="55"/>
+ <val o="20d957" v="55"/>
+ <val o="20e767" v="55"/>
+ <val o="20f581" v="55"/>
+ <val o="210386" v="55"/>
+ <val o="211194" v="55"/>
+ <val o="211fa5" v="55"/>
+ <val o="212db5" v="55"/>
+ <val o="213bc5" v="55"/>
+ <val o="2149d6" v="55"/>
+ <val o="2157e5" v="55"/>
+ <val o="2165f6" v="55"/>
+ <val o="217406" v="55"/>
+ <val o="218217" v="55"/>
+ <val o="219026" v="55"/>
+ <val o="219e39" v="55"/>
+ <val o="21ac46" v="55"/>
+ <val o="21ba57" v="55"/>
+ <val o="21c867" v="55"/>
+ <val o="21d677" v="55"/>
+ <val o="21e487" v="55"/>
+ <val o="21f296" v="55"/>
+ <val o="2200a6" v="55"/>
+ <val o="220eb7" v="55"/>
+ <val o="221cc6" v="55"/>
+ <val o="222ad7" v="55"/>
+ <val o="2238e7" v="55"/>
+ <val o="224701" v="55"/>
+ <val o="225505" v="55"/>
+ <val o="226315" v="55"/>
+ <val o="227125" v="55"/>
+ <val o="227f35" v="55"/>
+ <val o="228d45" v="55"/>
+ <val o="229b54" v="55"/>
+ <val o="22a965" v="55"/>
+ <val o="22b776" v="55"/>
+ <val o="22c586" v="55"/>
+ <val o="22d397" v="55"/>
+ <val o="22e1a6" v="55"/>
+ <val o="22efb6" v="55"/>
+ <val o="22fdc7" v="55"/>
+ <val o="230bd7" v="55"/>
+ <val o="2319e6" v="55"/>
+ <val o="2327f6" v="55"/>
+ <val o="23361b" v="55"/>
+ <val o="234416" v="55"/>
+ <val o="235226" v="55"/>
+ <val o="236037" v="55"/>
+ <val o="236e46" v="55"/>
+ <val o="237c57" v="55"/>
+ <val o="238a66" v="55"/>
+ <val o="239881" v="55"/>
+ <val o="23a685" v="55"/>
+ <val o="23b495" v="55"/>
+ <val o="23c2a4" v="55"/>
+ <val o="23d0b5" v="55"/>
+ <val o="23dec4" v="55"/>
+ <val o="23ecd5" v="55"/>
+ <val o="23fae4" v="55"/>
+ <val o="2408f6" v="55"/>
+ <val o="241706" v="55"/>
+ <val o="242518" v="55"/>
+ <val o="243325" v="55"/>
+ <val o="244137" v="55"/>
+ <val o="244f46" v="55"/>
+ <val o="246b66" v="55"/>
+ <val o="247976" v="55"/>
+ <val o="248786" v="55"/>
+ <val o="24957e" v="55"/>
+ <val o="24a38f" v="55"/>
+ <val o="24b19c" v="55"/>
+ <val o="24bfac" v="55"/>
+ <val o="24cdbc" v="55"/>
+ <val o="24dbcd" v="55"/>
+ <val o="24e9e5" v="55"/>
+ <val o="24f808" v="55"/>
+ <val o="250616" v="55"/>
+ <val o="251426" v="55"/>
+ <val o="252236" v="55"/>
+ <val o="253047" v="55"/>
+ <val o="253e56" v="55"/>
+ <val o="254c67" v="55"/>
+ <val o="255a76" v="55"/>
+ <val o="256887" v="55"/>
+ <val o="257697" v="55"/>
+ <val o="2584a8" v="55"/>
+ <val o="2592b6" v="55"/>
+ <val o="25a0c7" v="55"/>
+ <val o="25aed7" v="55"/>
+ <val o="25bce7" v="55"/>
+ <val o="25caf8" v="55"/>
+ <val o="25d907" v="55"/>
+ <val o="25e718" v="55"/>
+ <val o="25f527" v="55"/>
+ <val o="260338" v="55"/>
+ <val o="261149" v="55"/>
+ <val o="261f59" v="55"/>
+ <val o="262d68" v="55"/>
+ <val o="263b83" v="55"/>
+ <val o="264986" v="55"/>
+ <val o="265795" v="55"/>
+ <val o="2665a6" v="55"/>
+ <val o="2673b5" v="55"/>
+ <val o="2681c6" v="55"/>
+ <val o="268fd5" v="55"/>
+ <val o="269de6" v="55"/>
+ <val o="26abf6" v="55"/>
+ <val o="26ba06" v="55"/>
+ <val o="26c817" v="55"/>
+ <val o="26d62b" v="55"/>
+ <val o="26e436" v="55"/>
+ <val o="26f247" v="55"/>
+ <val o="270057" v="55"/>
+ <val o="270e67" v="55"/>
+ <val o="271c77" v="55"/>
+ <val o="272a87" v="55"/>
+ <val o="273897" v="55"/>
+ <val o="2746a8" v="55"/>
+ <val o="2754b9" v="55"/>
+ <val o="2762c7" v="55"/>
+ <val o="2770d8" v="55"/>
+ <val o="277ee7" v="55"/>
+ </par>
+ <par memind="16936600" h="3dc1a8de">
+ <val o="0" v="196.4"/>
+ <val o="e08" v="199.5"/>
+ <val o="1c32" v="200.8"/>
+ <val o="2a3c" v="201.8"/>
+ <val o="3835" v="199.9"/>
+ <val o="4645" v="197.9"/>
+ <val o="5455" v="193.2"/>
+ <val o="6265" v="197.6"/>
+ <val o="7075" v="195.6"/>
+ <val o="7e85" v="192.7"/>
+ <val o="8c96" v="195.3"/>
+ <val o="9aa5" v="195.4"/>
+ <val o="a8b6" v="195.6"/>
+ <val o="b6c5" v="197.3"/>
+ <val o="c4d7" v="222.6"/>
+ <val o="d30b" v="220.9"/>
+ <val o="e0f6" v="222.8"/>
+ <val o="ef06" v="180"/>
+ <val o="fd17" v="180"/>
+ <val o="10b27" v="221.4"/>
+ <val o="11937" v="222.2"/>
+ <val o="12746" v="222.5"/>
+ <val o="13556" v="220.5"/>
+ <val o="14366" v="220.8"/>
+ <val o="15181" v="220"/>
+ <val o="15f85" v="221.2"/>
+ <val o="16d95" v="220.3"/>
+ <val o="17ba4" v="221.1"/>
+ <val o="189b5" v="220.6"/>
+ <val o="197c4" v="220.9"/>
+ <val o="1a5d5" v="219.2"/>
+ <val o="1b3e6" v="219.3"/>
+ <val o="1c1f6" v="220.5"/>
+ <val o="1d005" v="220.7"/>
+ <val o="1de15" v="220.1"/>
+ <val o="1ec25" v="220.4"/>
+ <val o="1fa36" v="220.1"/>
+ <val o="20845" v="220.1"/>
+ <val o="21656" v="220.7"/>
+ <val o="22465" v="220.7"/>
+ <val o="23276" v="220.5"/>
+ <val o="24086" v="180"/>
+ <val o="24e99" v="222"/>
+ <val o="25ca7" v="221.8"/>
+ <val o="26ab7" v="220.6"/>
+ <val o="278c6" v="180"/>
+ <val o="286d6" v="220.8"/>
+ <val o="294e6" v="218.9"/>
+ <val o="2a301" v="220"/>
+ <val o="2b105" v="180"/>
+ <val o="2bf15" v="180"/>
+ <val o="2cd25" v="218.8"/>
+ <val o="2db35" v="180"/>
+ <val o="2e946" v="180"/>
+ <val o="2f755" v="180"/>
+ <val o="30566" v="219.9"/>
+ <val o="31375" v="220.5"/>
+ <val o="3219e" v="219.7"/>
+ <val o="32f96" v="220.8"/>
+ <val o="33da6" v="220.6"/>
+ <val o="34bb6" v="219"/>
+ <val o="359de" v="220.3"/>
+ <val o="367d6" v="219.3"/>
+ <val o="375e6" v="180"/>
+ <val o="3840e" v="180"/>
+ <val o="3921e" v="180"/>
+ <val o="3a016" v="180"/>
+ <val o="3ae27" v="220.9"/>
+ <val o="3bc36" v="220.1"/>
+ <val o="3ca47" v="180"/>
+ <val o="3d856" v="221.4"/>
+ <val o="3e667" v="220.2"/>
+ <val o="3f481" v="217.6"/>
+ <val o="40285" v="218.4"/>
+ <val o="41095" v="218.1"/>
+ <val o="41ea5" v="218.7"/>
+ <val o="42cb5" v="219.9"/>
+ <val o="43ac5" v="218.7"/>
+ <val o="448d5" v="180"/>
+ <val o="456e6" v="220.7"/>
+ <val o="464f5" v="222.7"/>
+ <val o="480ff" v="180"/>
+ <val o="48f0e" v="180"/>
+ <val o="49d1d" v="180"/>
+ <val o="4ab46" v="180"/>
+ <val o="4b955" v="180"/>
+ <val o="4c769" v="180"/>
+ <val o="4d577" v="180"/>
+ <val o="4e387" v="180"/>
+ <val o="4f196" v="180"/>
+ <val o="4ffa6" v="180"/>
+ <val o="50dd0" v="180"/>
+ <val o="51bc6" v="180"/>
+ <val o="529d6" v="180"/>
+ <val o="537e7" v="220.5"/>
+ <val o="54600" v="218.9"/>
+ <val o="55406" v="219.3"/>
+ <val o="56215" v="219.6"/>
+ <val o="57026" v="219.3"/>
+ <val o="57e36" v="219.7"/>
+ <val o="58c46" v="220.4"/>
+ <val o="59a70" v="220.5"/>
+ <val o="5a867" v="221.8"/>
+ <val o="5b676" v="180"/>
+ <val o="5c487" v="180"/>
+ <val o="5d296" v="180"/>
+ <val o="5e0a9" v="222.5"/>
+ <val o="5eeb8" v="224.5"/>
+ <val o="5fcc6" v="223.6"/>
+ <val o="60ad7" v="180"/>
+ <val o="618e7" v="180"/>
+ <val o="626f7" v="180"/>
+ <val o="63507" v="180"/>
+ <val o="64317" v="180"/>
+ <val o="65127" v="222.3"/>
+ <val o="65f37" v="222.6"/>
+ <val o="66d46" v="220.8"/>
+ <val o="67b57" v="220.8"/>
+ <val o="68967" v="220.2"/>
+ <val o="69782" v="220.2"/>
+ <val o="6a586" v="219.3"/>
+ <val o="6b395" v="219.8"/>
+ <val o="6c1a6" v="219"/>
+ <val o="6cfb5" v="218.7"/>
+ <val o="6ddc6" v="220.7"/>
+ <val o="6ebd6" v="180"/>
+ <val o="6f9e6" v="221.8"/>
+ <val o="707f6" v="222.8"/>
+ <val o="71607" v="180"/>
+ <val o="72417" v="180"/>
+ <val o="73227" v="180"/>
+ <val o="74037" v="223.8"/>
+ <val o="74e47" v="223.4"/>
+ <val o="75c57" v="180"/>
+ <val o="76a63" v="180"/>
+ <val o="77873" v="180"/>
+ <val o="78680" v="180"/>
+ <val o="7948f" v="180"/>
+ <val o="7a29f" v="180"/>
+ <val o="7b0af" v="222.1"/>
+ <val o="7bebf" v="221"/>
+ <val o="7cccf" v="219.5"/>
+ <val o="7dadf" v="219.9"/>
+ <val o="7e8fa" v="220.8"/>
+ <val o="7f70a" v="220.8"/>
+ <val o="8051a" v="217.9"/>
+ <val o="8132a" v="219"/>
+ <val o="8213a" v="218.6"/>
+ <val o="82f4a" v="219.4"/>
+ <val o="83d5a" v="219.7"/>
+ <val o="84b6a" v="180"/>
+ <val o="8597a" v="180"/>
+ <val o="8678b" v="180"/>
+ <val o="8759b" v="180"/>
+ <val o="883ac" v="223.1"/>
+ <val o="891bb" v="222"/>
+ <val o="89fca" v="224.2"/>
+ <val o="8adda" v="180"/>
+ <val o="8bbeb" v="180"/>
+ <val o="8c9fc" v="180"/>
+ <val o="8d80b" v="180"/>
+ <val o="8e61a" v="180"/>
+ <val o="8f42a" v="180"/>
+ <val o="9023a" v="180"/>
+ <val o="9104a" v="220.4"/>
+ <val o="91e5a" v="180"/>
+ <val o="92c6a" v="219.6"/>
+ <val o="93a84" v="219.2"/>
+ <val o="94885" v="219"/>
+ <val o="95694" v="218.5"/>
+ <val o="964a5" v="219.3"/>
+ <val o="972b4" v="219.4"/>
+ <val o="980c5" v="221"/>
+ <val o="98ed4" v="220.7"/>
+ <val o="99ce5" v="180"/>
+ <val o="9aaf5" v="180"/>
+ <val o="9b906" v="225.2"/>
+ <val o="9c716" v="225"/>
+ <val o="9d526" v="222.6"/>
+ <val o="9e336" v="223.6"/>
+ <val o="9f145" v="224.1"/>
+ <val o="9ff56" v="223.2"/>
+ <val o="a0d65" v="180"/>
+ <val o="a1b77" v="195.9"/>
+ <val o="a2986" v="190"/>
+ <val o="a3795" v="122.3"/>
+ <val o="a45a7" v="354.6"/>
+ <val o="a53b6" v="333.2"/>
+ <val o="a61c7" v="323.3"/>
+ <val o="a6fd6" v="278.1"/>
+ <val o="a7e00" v="286.2"/>
+ <val o="a8c00" v="292.3"/>
+ <val o="a9a05" v="21.4"/>
+ <val o="aa815" v="273.7"/>
+ <val o="ab625" v="272.9"/>
+ <val o="ac435" v="285.4"/>
+ <val o="ad245" v="28.5"/>
+ <val o="ae055" v="68.4"/>
+ <val o="aee65" v="147.1"/>
+ <val o="afc75" v="95.7"/>
+ <val o="b0a85" v="89.6"/>
+ <val o="b26a6" v="88.3"/>
+ <val o="b34b6" v="92.4"/>
+ <val o="b42c6" v="149.7"/>
+ <val o="b50d6" v="148.7"/>
+ <val o="b5ee7" v="127.7"/>
+ <val o="b6cf6" v="198.2"/>
+ <val o="b7b07" v="187.2"/>
+ <val o="b8917" v="182.1"/>
+ <val o="b9728" v="195.8"/>
+ <val o="ba537" v="203.8"/>
+ <val o="bb347" v="124.5"/>
+ <val o="bc157" v="159.2"/>
+ <val o="bcf67" v="230.6"/>
+ <val o="bdd81" v="79.8"/>
+ <val o="beb86" v="51.3"/>
+ <val o="bf995" v="22.5"/>
+ <val o="c07a6" v="323.7"/>
+ <val o="c15b5" v="341.6"/>
+ <val o="c23c6" v="46.4"/>
+ <val o="c31d5" v="71.9"/>
+ <val o="c3fe6" v="71.9"/>
+ <val o="c4df5" v="63.4"/>
+ <val o="c5c06" v="76.4"/>
+ <val o="c6a16" v="58.4"/>
+ <val o="c7826" v="92"/>
+ <val o="c8636" v="79.6"/>
+ <val o="c9446" v="63.1"/>
+ <val o="ca256" v="51.3"/>
+ <val o="cb066" v="81.7"/>
+ <val o="cbe76" v="205.3"/>
+ <val o="ccc87" v="96.1"/>
+ <val o="cda96" v="95.7"/>
+ <val o="ce8a8" v="96.7"/>
+ <val o="cf6b7" v="92.8"/>
+ <val o="d04c8" v="91.4"/>
+ <val o="d12d7" v="86.1"/>
+ <val o="d20e7" v="270"/>
+ <val o="d2f02" v="270.4"/>
+ <val o="d3d05" v="296.7"/>
+ <val o="d4b15" v="306.8"/>
+ <val o="d5926" v="331.7"/>
+ <val o="d6735" v="13.7"/>
+ <val o="d7546" v="46.4"/>
+ <val o="d8355" v="262.1"/>
+ <val o="d9166" v="166.2"/>
+ <val o="d9f75" v="143.6"/>
+ <val o="dad87" v="127.2"/>
+ <val o="dbb97" v="132.7"/>
+ <val o="dc9a8" v="128.3"/>
+ <val o="dd7b7" v="155.6"/>
+ <val o="de5c6" v="170.8"/>
+ <val o="df3d7" v="176.1"/>
+ <val o="e01d7" v="176.8"/>
+ <val o="e0fe5" v="168.8"/>
+ <val o="e1df5" v="172.2"/>
+ <val o="e2c04" v="185.2"/>
+ <val o="e3a14" v="196.3"/>
+ <val o="e4824" v="178.5"/>
+ <val o="e5634" v="193.7"/>
+ <val o="e6444" v="176.2"/>
+ <val o="e7255" v="196.7"/>
+ <val o="e806f" v="202.2"/>
+ <val o="e8e7f" v="99.9"/>
+ <val o="e9c8e" v="130.2"/>
+ <val o="eaa9f" v="132.9"/>
+ <val o="eb8ae" v="121.7"/>
+ <val o="ec6bf" v="100.9"/>
+ <val o="ed4ce" v="192.9"/>
+ <val o="ee2df" v="153.7"/>
+ <val o="ef0ef" v="170.4"/>
+ <val o="eff01" v="155.2"/>
+ <val o="f0d10" v="167.3"/>
+ <val o="f1b20" v="165.5"/>
+ <val o="f2930" v="184.3"/>
+ <val o="f3740" v="159.2"/>
+ <val o="f4551" v="163.4"/>
+ <val o="f5361" v="163.5"/>
+ <val o="f6172" v="160.8"/>
+ <val o="f6f80" v="165"/>
+ <val o="f7d91" v="156.4"/>
+ <val o="f8ba1" v="163.8"/>
+ <val o="f99b1" v="162.9"/>
+ <val o="fa7c0" v="154.9"/>
+ <val o="fb5d1" v="157.1"/>
+ <val o="fc3e0" v="197.2"/>
+ <val o="fd1fb" v="203.8"/>
+ <val o="fe00b" v="212.5"/>
+ <val o="fee1c" v="185.4"/>
+ <val o="ffc2c" v="187.2"/>
+ <val o="100a3b" v="162"/>
+ <val o="10184c" v="149.3"/>
+ <val o="10265b" v="136.8"/>
+ <val o="10346c" v="145.9"/>
+ <val o="10427b" v="164.1"/>
+ <val o="10508d" v="158.2"/>
+ <val o="105e9d" v="163"/>
+ <val o="106cad" v="161.6"/>
+ <val o="107abd" v="168.9"/>
+ <val o="1088cd" v="168.5"/>
+ <val o="1096de" v="165.1"/>
+ <val o="10a4ed" v="168.2"/>
+ <val o="10b2fe" v="163.9"/>
+ <val o="10c10d" v="147.5"/>
+ <val o="10cf1e" v="163"/>
+ <val o="10dd2e" v="166.3"/>
+ <val o="10eb66" v="177.4"/>
+ <val o="10f94e" v="179.7"/>
+ <val o="11075e" v="161"/>
+ <val o="11156d" v="174.4"/>
+ <val o="112388" v="203.6"/>
+ <val o="113187" v="158.3"/>
+ <val o="113fb0" v="172.9"/>
+ <val o="114da6" v="172.7"/>
+ <val o="115bb6" v="168.4"/>
+ <val o="1169c6" v="138"/>
+ <val o="1177d6" v="135.8"/>
+ <val o="1185e8" v="157.8"/>
+ <val o="1193f7" v="160.6"/>
+ <val o="11a208" v="175.7"/>
+ <val o="11b017" v="184.1"/>
+ <val o="11be2f" v="188.6"/>
+ <val o="11cc37" v="170"/>
+ <val o="11da47" v="173.6"/>
+ <val o="11e857" v="167"/>
+ <val o="11f667" v="172.6"/>
+ <val o="120578" v="164.6"/>
+ <val o="121386" v="166.8"/>
+ <val o="122196" v="151.9"/>
+ <val o="122fa6" v="158.6"/>
+ <val o="123db5" v="170.8"/>
+ <val o="124bc5" v="185.4"/>
+ <val o="1259d5" v="160.1"/>
+ <val o="1267e4" v="188.6"/>
+ <val o="127600" v="207.7"/>
+ <val o="128305" v="214.6"/>
+ <val o="129115" v="213.7"/>
+ <val o="129f25" v="218.4"/>
+ <val o="12ad35" v="210.5"/>
+ <val o="12bb45" v="178.8"/>
+ <val o="12c954" v="162.6"/>
+ <val o="12d766" v="156.4"/>
+ <val o="12e575" v="153.5"/>
+ <val o="12f386" v="143.9"/>
+ <val o="130196" v="160.8"/>
+ <val o="130fa6" v="153.4"/>
+ <val o="131db7" v="163.6"/>
+ <val o="132bc5" v="168.2"/>
+ <val o="1339d4" v="169.3"/>
+ <val o="1347e5" v="139.1"/>
+ <val o="1355f4" v="142.4"/>
+ <val o="136404" v="122.1"/>
+ <val o="137214" v="125.5"/>
+ <val o="138024" v="110.7"/>
+ <val o="138e33" v="110.6"/>
+ <val o="139c44" v="190.2"/>
+ <val o="13aa54" v="99.6"/>
+ <val o="13b865" v="209.4"/>
+ <val o="13c67e" v="76.2"/>
+ <val o="13d48e" v="61.5"/>
+ <val o="13e29e" v="44.5"/>
+ <val o="13f0ae" v="44.2"/>
+ <val o="13febf" v="60.4"/>
+ <val o="140ccf" v="64.6"/>
+ <val o="141adf" v="67.3"/>
+ <val o="1428ef" v="341.2"/>
+ <val o="1436ff" v="115.8"/>
+ <val o="14450f" v="117.3"/>
+ <val o="14531f" v="180"/>
+ <val o="146130" v="252.4"/>
+ <val o="146f40" v="261.8"/>
+ <val o="147d44" v="313.3"/>
+ <val o="148b57" v="311.3"/>
+ <val o="149965" v="292"/>
+ <val o="14a775" v="57.6"/>
+ <val o="14b584" v="151.6"/>
+ <val o="14c397" v="92.7"/>
+ <val o="14d1a4" v="93.4"/>
+ <val o="14dfb6" v="100.3"/>
+ <val o="14edc5" v="97.4"/>
+ <val o="14fbd5" v="184"/>
+ <val o="1509e5" v="289.1"/>
+ <val o="1517ff" v="274.2"/>
+ <val o="152605" v="39.8"/>
+ <val o="153415" v="6.5"/>
+ <val o="154225" v="355.9"/>
+ <val o="155035" v="19.4"/>
+ <val o="155e45" v="44.2"/>
+ <val o="156c55" v="61.4"/>
+ <val o="157a65" v="55.5"/>
+ <val o="158875" v="60.2"/>
+ <val o="159686" v="71.7"/>
+ <val o="15a495" v="66.3"/>
+ <val o="15b2a6" v="61.5"/>
+ <val o="15c0b6" v="38.5"/>
+ <val o="15cec6" v="17.3"/>
+ <val o="15dcd5" v="35.6"/>
+ <val o="15eae6" v="44.9"/>
+ <val o="15f8f5" v="71.4"/>
+ <val o="160706" v="166.1"/>
+ <val o="161517" v="125"/>
+ <val o="162326" v="176"/>
+ <val o="163137" v="195.3"/>
+ <val o="163f46" v="99.1"/>
+ <val o="164d57" v="90"/>
+ <val o="165b67" v="273.9"/>
+ <val o="166982" v="344.7"/>
+ <val o="167786" v="307.2"/>
+ <val o="168596" v="271.8"/>
+ <val o="1693a6" v="278.8"/>
+ <val o="16a1b5" v="291.5"/>
+ <val o="16afc6" v="52.9"/>
+ <val o="16bdd5" v="76.6"/>
+ <val o="16cbe6" v="87.6"/>
+ <val o="16d9f6" v="170.1"/>
+ <val o="16e807" v="174.2"/>
+ <val o="16f616" v="175.6"/>
+ <val o="170429" v="186.7"/>
+ <val o="171236" v="183.2"/>
+ <val o="172047" v="181.7"/>
+ <val o="172e57" v="173.6"/>
+ <val o="173c67" v="170.7"/>
+ <val o="174a77" v="165.4"/>
+ <val o="175887" v="163.8"/>
+ <val o="176694" v="161.7"/>
+ <val o="1774a3" v="165.4"/>
+ <val o="1782b3" v="170.9"/>
+ <val o="1790c5" v="173.5"/>
+ <val o="179ed4" v="187.9"/>
+ <val o="17ace4" v="201.8"/>
+ <val o="17bafd" v="205.9"/>
+ <val o="17c90f" v="204.6"/>
+ <val o="17d71e" v="204.1"/>
+ <val o="17e52f" v="208.2"/>
+ <val o="17f33f" v="204.4"/>
+ <val o="18014f" v="193.5"/>
+ <val o="180f5f" v="186.4"/>
+ <val o="181d6e" v="192.4"/>
+ <val o="182b7f" v="194.3"/>
+ <val o="18398f" v="184.4"/>
+ <val o="1847a1" v="184.1"/>
+ <val o="1855af" v="185.6"/>
+ <val o="1863c0" v="194.9"/>
+ <val o="1871cf" v="192.1"/>
+ <val o="187fe0" v="192.1"/>
+ <val o="188def" v="190.6"/>
+ <val o="189c00" v="185.4"/>
+ <val o="18b80d" v="170.9"/>
+ <val o="18c61c" v="187.4"/>
+ <val o="18d42c" v="191.1"/>
+ <val o="18e23b" v="191.1"/>
+ <val o="18f04b" v="197.1"/>
+ <val o="18fe5e" v="195.9"/>
+ <val o="190c76" v="189.8"/>
+ <val o="191a86" v="201.9"/>
+ <val o="192896" v="202.2"/>
+ <val o="1936a6" v="204.4"/>
+ <val o="1944b7" v="196.3"/>
+ <val o="1952c6" v="182.6"/>
+ <val o="1960d7" v="162.6"/>
+ <val o="196ee6" v="187.2"/>
+ <val o="197cf8" v="187.3"/>
+ <val o="198b0f" v="179.7"/>
+ <val o="19991f" v="181.7"/>
+ <val o="19b541" v="188.3"/>
+ <val o="19c34d" v="186.2"/>
+ <val o="19d15e" v="183.5"/>
+ <val o="19df80" v="182.2"/>
+ <val o="19ed90" v="176.5"/>
+ <val o="19eebe" v="175.6"/>
+ <val o="19fb8e" v="178.5"/>
+ <val o="1a09a0" v="223.8"/>
+ <val o="1a17ae" v="228.1"/>
+ <val o="1a25be" v="229.7"/>
+ <val o="1a33cd" v="216.1"/>
+ <val o="1a41dd" v="226.4"/>
+ <val o="1a4fed" v="249.6"/>
+ <val o="1a5e08" v="245.8"/>
+ <val o="1a6c05" v="250.1"/>
+ <val o="1a7a15" v="251.1"/>
+ <val o="1a8826" v="252.5"/>
+ <val o="1a9637" v="259.4"/>
+ <val o="1aa445" v="254.8"/>
+ <val o="1ab255" v="218.7"/>
+ <val o="1ac065" v="228.3"/>
+ <val o="1ace75" v="227.3"/>
+ <val o="1adc87" v="214.2"/>
+ <val o="1aea96" v="218.7"/>
+ <val o="1af8a7" v="217"/>
+ <val o="1b06b7" v="231.7"/>
+ <val o="1b14c6" v="230.6"/>
+ <val o="1c7460" v="52"/>
+ <val o="1c8270" v="340.3"/>
+ <val o="1c907e" v="18.5"/>
+ <val o="1c9e8f" v="357.5"/>
+ <val o="1caca2" v="344.7"/>
+ <val o="1cbab1" v="338.4"/>
+ <val o="1cc8c1" v="28.4"/>
+ <val o="1cd6d0" v="21.8"/>
+ <val o="1ce4de" v="10.4"/>
+ <val o="1cf2f0" v="343.9"/>
+ <val o="1d0109" v="342.8"/>
+ <val o="1d0f06" v="358.2"/>
+ <val o="1d1d15" v="353.5"/>
+ <val o="1d2b25" v="353.4"/>
+ <val o="1d3935" v="1.4"/>
+ <val o="1d4745" v="6.4"/>
+ <val o="1d5555" v="10.5"/>
+ <val o="1d6366" v="350.7"/>
+ <val o="1d7175" v="350.8"/>
+ <val o="1d7f86" v="357.6"/>
+ <val o="1d8d95" v="181.1"/>
+ <val o="1d9ba6" v="184.8"/>
+ <val o="1da9b6" v="192.6"/>
+ <val o="1db7c7" v="193.1"/>
+ <val o="1dc5d5" v="194.7"/>
+ <val o="1dd3e6" v="190.8"/>
+ <val o="1de1f5" v="195"/>
+ <val o="1df006" v="195.8"/>
+ <val o="1dfe16" v="195.3"/>
+ <val o="1e0c26" v="198.1"/>
+ <val o="1e1a36" v="198.4"/>
+ <val o="1e2847" v="199.5"/>
+ <val o="1e3659" v="200.2"/>
+ <val o="1e4467" v="202.3"/>
+ <val o="1e5281" v="200.7"/>
+ <val o="1e6086" v="203.5"/>
+ <val o="1e6e96" v="204.6"/>
+ <val o="1e7ca6" v="188.4"/>
+ <val o="1e8ab5" v="193.9"/>
+ <val o="1e98c6" v="184.4"/>
+ <val o="1ea6d5" v="190.5"/>
+ <val o="1eb4e6" v="188.9"/>
+ <val o="1ec2f6" v="192.2"/>
+ <val o="1ed106" v="185.6"/>
+ <val o="1edf16" v="186.6"/>
+ <val o="1eed26" v="182.8"/>
+ <val o="1efb36" v="187.6"/>
+ <val o="1f0946" v="186.9"/>
+ <val o="1f1756" v="168.2"/>
+ <val o="1f2566" v="164.2"/>
+ <val o="1f3376" v="154.3"/>
+ <val o="1f4187" v="134.3"/>
+ <val o="1f4f96" v="154.2"/>
+ <val o="1f5da7" v="182.2"/>
+ <val o="1f6bb6" v="188.3"/>
+ <val o="1f79c7" v="176"/>
+ <val o="1f87d6" v="206.4"/>
+ <val o="1f95e7" v="216.5"/>
+ <val o="1fa401" v="211.5"/>
+ <val o="1fb204" v="210.8"/>
+ <val o="1fc016" v="211.2"/>
+ <val o="1fce25" v="192.4"/>
+ <val o="1fdc35" v="185.1"/>
+ <val o="1fea45" v="176.6"/>
+ <val o="1ff855" v="171.5"/>
+ <val o="200665" v="129.5"/>
+ <val o="201475" v="173.4"/>
+ <val o="202286" v="157.2"/>
+ <val o="203095" v="161.2"/>
+ <val o="203ea5" v="163.5"/>
+ <val o="204cb6" v="176.8"/>
+ <val o="205ac6" v="166.8"/>
+ <val o="2068d6" v="161.5"/>
+ <val o="2076e6" v="159.3"/>
+ <val o="2084f6" v="177.6"/>
+ <val o="209306" v="183.2"/>
+ <val o="20a116" v="185.4"/>
+ <val o="20af26" v="182.6"/>
+ <val o="20bd37" v="189.3"/>
+ <val o="20cb46" v="173.2"/>
+ <val o="20d957" v="179.4"/>
+ <val o="20e767" v="193.5"/>
+ <val o="20f581" v="202.6"/>
+ <val o="210386" v="197.8"/>
+ <val o="211194" v="186.9"/>
+ <val o="211fa5" v="188.3"/>
+ <val o="212db5" v="178.7"/>
+ <val o="213bc5" v="160.2"/>
+ <val o="2149d6" v="168.3"/>
+ <val o="2157e5" v="184"/>
+ <val o="2165f6" v="191.1"/>
+ <val o="217406" v="177.3"/>
+ <val o="218217" v="182.9"/>
+ <val o="219026" v="185.4"/>
+ <val o="219e39" v="176.3"/>
+ <val o="21ac46" v="170.1"/>
+ <val o="21ba57" v="169.3"/>
+ <val o="21c867" v="159.8"/>
+ <val o="21d677" v="190.9"/>
+ <val o="21e487" v="173.9"/>
+ <val o="21f296" v="175.5"/>
+ <val o="2200a6" v="187.5"/>
+ <val o="220eb7" v="188.5"/>
+ <val o="221cc6" v="160"/>
+ <val o="222ad7" v="175.5"/>
+ <val o="2238e7" v="192.4"/>
+ <val o="224701" v="200.8"/>
+ <val o="225505" v="116.9"/>
+ <val o="226315" v="166.3"/>
+ <val o="227125" v="162.8"/>
+ <val o="227f35" v="130.4"/>
+ <val o="228d45" v="122"/>
+ <val o="229b54" v="193.5"/>
+ <val o="22a965" v="183.9"/>
+ <val o="22b776" v="180"/>
+ <val o="22c586" v="157.3"/>
+ <val o="22d397" v="142.7"/>
+ <val o="22e1a6" v="145.9"/>
+ <val o="22efb6" v="182.2"/>
+ <val o="22fdc7" v="182.7"/>
+ <val o="230bd7" v="173.3"/>
+ <val o="2319e6" v="188.6"/>
+ <val o="2327f6" v="179.4"/>
+ <val o="23361b" v="169.8"/>
+ <val o="234416" v="164.3"/>
+ <val o="235226" v="170.2"/>
+ <val o="236037" v="178.8"/>
+ <val o="236e46" v="158"/>
+ <val o="237c57" v="161.6"/>
+ <val o="238a66" v="175.8"/>
+ <val o="239881" v="169.9"/>
+ <val o="23a685" v="185.3"/>
+ <val o="23b495" v="191.6"/>
+ <val o="23c2a4" v="176.8"/>
+ <val o="23d0b5" v="167.7"/>
+ <val o="23dec4" v="154.1"/>
+ <val o="23ecd5" v="167"/>
+ <val o="23fae4" v="180"/>
+ <val o="2408f6" v="166.9"/>
+ <val o="241706" v="146.9"/>
+ <val o="242518" v="155.4"/>
+ <val o="243325" v="157.6"/>
+ <val o="244137" v="189.9"/>
+ <val o="244f46" v="187.4"/>
+ <val o="246b66" v="186.9"/>
+ <val o="247976" v="179.5"/>
+ <val o="248786" v="139.6"/>
+ <val o="24957e" v="161.8"/>
+ <val o="24a38f" v="172"/>
+ <val o="24b19c" v="189.5"/>
+ <val o="24bfac" v="187.3"/>
+ <val o="24cdbc" v="188.2"/>
+ <val o="24dbcd" v="186.1"/>
+ <val o="24e9e5" v="198.1"/>
+ <val o="24f808" v="193.3"/>
+ <val o="250616" v="195.6"/>
+ <val o="251426" v="198.3"/>
+ <val o="252236" v="180.5"/>
+ <val o="253047" v="180"/>
+ <val o="253e56" v="161.6"/>
+ <val o="254c67" v="165.8"/>
+ <val o="255a76" v="165.6"/>
+ <val o="256887" v="160.4"/>
+ <val o="257697" v="147.2"/>
+ <val o="2584a8" v="196.9"/>
+ <val o="2592b6" v="195.7"/>
+ <val o="25a0c7" v="186.9"/>
+ <val o="25aed7" v="178.3"/>
+ <val o="25bce7" v="177.6"/>
+ <val o="25caf8" v="172"/>
+ <val o="25d907" v="156.5"/>
+ <val o="25e718" v="154.3"/>
+ <val o="25f527" v="157"/>
+ <val o="260338" v="179.5"/>
+ <val o="261149" v="166"/>
+ <val o="261f59" v="172.3"/>
+ <val o="262d68" v="196.4"/>
+ <val o="263b83" v="179.5"/>
+ <val o="264986" v="195.7"/>
+ <val o="265795" v="202.7"/>
+ <val o="2665a6" v="209.9"/>
+ <val o="2673b5" v="204.1"/>
+ <val o="2681c6" v="199.9"/>
+ <val o="268fd5" v="186.3"/>
+ <val o="269de6" v="175.6"/>
+ <val o="26abf6" v="170.1"/>
+ <val o="26ba06" v="159.2"/>
+ <val o="26c817" v="156.4"/>
+ <val o="26d62b" v="137.7"/>
+ <val o="26e436" v="146"/>
+ <val o="26f247" v="139.6"/>
+ <val o="270057" v="143.2"/>
+ <val o="270e67" v="137.7"/>
+ <val o="271c77" v="177.9"/>
+ <val o="272a87" v="186.9"/>
+ <val o="273897" v="184.5"/>
+ <val o="2746a8" v="188.2"/>
+ <val o="2754b9" v="191.1"/>
+ <val o="2762c7" v="146.7"/>
+ <val o="2770d8" v="161.4"/>
+ <val o="277ee7" v="188.7"/>
+ </par>
+ <par memind="10695000" h="3dc1a8de">
+ <val o="0" v="50"/>
+ <val o="e08" v="50"/>
+ <val o="1c32" v="50"/>
+ <val o="2a3c" v="50"/>
+ <val o="3835" v="49.9"/>
+ <val o="4645" v="49.9"/>
+ <val o="5455" v="50"/>
+ <val o="6265" v="50"/>
+ <val o="7075" v="50"/>
+ <val o="7e85" v="50"/>
+ <val o="8c96" v="50"/>
+ <val o="9aa5" v="50.1"/>
+ <val o="a8b6" v="50"/>
+ <val o="b6c5" v="50"/>
+ <val o="c4d7" v="50"/>
+ <val o="d30b" v="50"/>
+ <val o="e0f6" v="50"/>
+ <val o="ef06" v="50"/>
+ <val o="fd17" v="50"/>
+ <val o="10b27" v="50"/>
+ <val o="11937" v="50"/>
+ <val o="12746" v="50"/>
+ <val o="13556" v="50"/>
+ <val o="14366" v="50"/>
+ <val o="15181" v="50"/>
+ <val o="15f85" v="50"/>
+ <val o="16d95" v="50"/>
+ <val o="17ba4" v="50"/>
+ <val o="189b5" v="50"/>
+ <val o="197c4" v="50.1"/>
+ <val o="1a5d5" v="50"/>
+ <val o="1b3e6" v="50"/>
+ <val o="1c1f6" v="50.1"/>
+ <val o="1d005" v="50"/>
+ <val o="1de15" v="50"/>
+ <val o="1ec25" v="50"/>
+ <val o="1fa36" v="50"/>
+ <val o="20845" v="50"/>
+ <val o="21656" v="50"/>
+ <val o="22465" v="50"/>
+ <val o="23276" v="50"/>
+ <val o="24086" v="50"/>
+ <val o="24e99" v="50"/>
+ <val o="25ca7" v="50"/>
+ <val o="26ab7" v="50"/>
+ <val o="278c6" v="50"/>
+ <val o="286d6" v="50.1"/>
+ <val o="294e6" v="50"/>
+ <val o="2a301" v="50"/>
+ <val o="2b105" v="50"/>
+ <val o="2bf15" v="50"/>
+ <val o="2cd25" v="50"/>
+ <val o="2db35" v="50"/>
+ <val o="2e946" v="50"/>
+ <val o="2f755" v="50"/>
+ <val o="30566" v="50"/>
+ <val o="31375" v="50"/>
+ <val o="3219e" v="50"/>
+ <val o="32f96" v="50"/>
+ <val o="33da6" v="50"/>
+ <val o="34bb6" v="50"/>
+ <val o="359de" v="50"/>
+ <val o="367d6" v="50"/>
+ <val o="375e6" v="50"/>
+ <val o="3840e" v="50"/>
+ <val o="3921e" v="50"/>
+ <val o="3a016" v="50"/>
+ <val o="3ae27" v="50"/>
+ <val o="3bc36" v="50"/>
+ <val o="3ca47" v="50"/>
+ <val o="3d856" v="50"/>
+ <val o="3e667" v="50"/>
+ <val o="3f481" v="50"/>
+ <val o="40285" v="50"/>
+ <val o="41095" v="50"/>
+ <val o="41ea5" v="50"/>
+ <val o="42cb5" v="50"/>
+ <val o="43ac5" v="49.9"/>
+ <val o="448d5" v="50"/>
+ <val o="456e6" v="49.9"/>
+ <val o="464f5" v="50"/>
+ <val o="480ff" v="49.9"/>
+ <val o="48f0e" v="50"/>
+ <val o="49d1d" v="50"/>
+ <val o="4ab46" v="50"/>
+ <val o="4b955" v="50"/>
+ <val o="4c769" v="50"/>
+ <val o="4d577" v="50"/>
+ <val o="4e387" v="50"/>
+ <val o="4f196" v="50"/>
+ <val o="4ffa6" v="50"/>
+ <val o="50dd0" v="50"/>
+ <val o="51bc6" v="50"/>
+ <val o="529d6" v="50"/>
+ <val o="537e7" v="50"/>
+ <val o="54600" v="50"/>
+ <val o="55406" v="50"/>
+ <val o="56215" v="50"/>
+ <val o="57026" v="50"/>
+ <val o="57e36" v="50"/>
+ <val o="58c46" v="50"/>
+ <val o="59a70" v="50"/>
+ <val o="5a867" v="50"/>
+ <val o="5b676" v="49.9"/>
+ <val o="5c487" v="50"/>
+ <val o="5d296" v="50"/>
+ <val o="5e0a9" v="50"/>
+ <val o="5eeb8" v="50"/>
+ <val o="5fcc6" v="50"/>
+ <val o="60ad7" v="50"/>
+ <val o="618e7" v="50"/>
+ <val o="626f7" v="50"/>
+ <val o="63507" v="50"/>
+ <val o="64317" v="50"/>
+ <val o="65127" v="50.1"/>
+ <val o="65f37" v="50"/>
+ <val o="66d46" v="50"/>
+ <val o="67b57" v="50"/>
+ <val o="68967" v="50"/>
+ <val o="69782" v="50.1"/>
+ <val o="6a586" v="50"/>
+ <val o="6b395" v="50"/>
+ <val o="6c1a6" v="49.9"/>
+ <val o="6cfb5" v="50"/>
+ <val o="6ddc6" v="50"/>
+ <val o="6ebd6" v="50"/>
+ <val o="6f9e6" v="50"/>
+ <val o="707f6" v="50"/>
+ <val o="71607" v="50"/>
+ <val o="72417" v="50"/>
+ <val o="73227" v="50"/>
+ <val o="74037" v="50"/>
+ <val o="74e47" v="50"/>
+ <val o="75c57" v="50"/>
+ <val o="76a63" v="50"/>
+ <val o="77873" v="50"/>
+ <val o="78680" v="50"/>
+ <val o="7948f" v="50"/>
+ <val o="7a29f" v="50"/>
+ <val o="7b0af" v="50.1"/>
+ <val o="7bebf" v="50"/>
+ <val o="7cccf" v="50"/>
+ <val o="7dadf" v="49.9"/>
+ <val o="7e8fa" v="50"/>
+ <val o="7f70a" v="50"/>
+ <val o="8051a" v="50"/>
+ <val o="8132a" v="50"/>
+ <val o="8213a" v="50"/>
+ <val o="82f4a" v="50"/>
+ <val o="83d5a" v="50"/>
+ <val o="84b6a" v="50"/>
+ <val o="8597a" v="50"/>
+ <val o="8678b" v="50"/>
+ <val o="8759b" v="50"/>
+ <val o="883ac" v="50"/>
+ <val o="891bb" v="50"/>
+ <val o="89fca" v="50"/>
+ <val o="8adda" v="50"/>
+ <val o="8bbeb" v="50"/>
+ <val o="8c9fc" v="50"/>
+ <val o="8d80b" v="50"/>
+ <val o="8e61a" v="50.1"/>
+ <val o="8f42a" v="50"/>
+ <val o="9023a" v="50.1"/>
+ <val o="9104a" v="49.9"/>
+ <val o="91e5a" v="50"/>
+ <val o="92c6a" v="50"/>
+ <val o="93a84" v="49.9"/>
+ <val o="94885" v="50"/>
+ <val o="95694" v="50"/>
+ <val o="964a5" v="50"/>
+ <val o="972b4" v="49.9"/>
+ <val o="980c5" v="50"/>
+ <val o="98ed4" v="50"/>
+ <val o="99ce5" v="49.9"/>
+ <val o="9aaf5" v="50.1"/>
+ <val o="9b906" v="50.1"/>
+ <val o="9c716" v="50"/>
+ <val o="9d526" v="50"/>
+ <val o="9e336" v="50"/>
+ <val o="9f145" v="50"/>
+ <val o="9ff56" v="50"/>
+ <val o="a0d65" v="50"/>
+ <val o="a1b77" v="49.9"/>
+ <val o="a2986" v="50"/>
+ <val o="a3795" v="50"/>
+ <val o="a45a7" v="50"/>
+ <val o="a53b6" v="50"/>
+ <val o="a61c7" v="50"/>
+ <val o="a6fd6" v="50"/>
+ <val o="a7e00" v="50.1"/>
+ <val o="a8c00" v="49.9"/>
+ <val o="a9a05" v="50"/>
+ <val o="aa815" v="50"/>
+ <val o="ab625" v="50"/>
+ <val o="ac435" v="50"/>
+ <val o="ad245" v="50"/>
+ <val o="ae055" v="50"/>
+ <val o="aee65" v="50"/>
+ <val o="afc75" v="50"/>
+ <val o="b0a85" v="50"/>
+ <val o="b26a6" v="50"/>
+ <val o="b34b6" v="50"/>
+ <val o="b42c6" v="50"/>
+ <val o="b50d6" v="50"/>
+ <val o="b5ee7" v="50"/>
+ <val o="b6cf6" v="50"/>
+ <val o="b7b07" v="50"/>
+ <val o="b8917" v="50"/>
+ <val o="b9728" v="50"/>
+ <val o="ba537" v="50"/>
+ <val o="bb347" v="50"/>
+ <val o="bc157" v="50"/>
+ <val o="bcf67" v="50"/>
+ <val o="bdd81" v="50"/>
+ <val o="beb86" v="50"/>
+ <val o="bf995" v="50"/>
+ <val o="c07a6" v="50"/>
+ <val o="c15b5" v="50"/>
+ <val o="c23c6" v="50"/>
+ <val o="c31d5" v="49.9"/>
+ <val o="c3fe6" v="50"/>
+ <val o="c4df5" v="50"/>
+ <val o="c5c06" v="50"/>
+ <val o="c6a16" v="50"/>
+ <val o="c7826" v="50"/>
+ <val o="c8636" v="50"/>
+ <val o="c9446" v="50"/>
+ <val o="ca256" v="50"/>
+ <val o="cb066" v="50"/>
+ <val o="cbe76" v="50"/>
+ <val o="ccc87" v="50"/>
+ <val o="cda96" v="50"/>
+ <val o="ce8a8" v="50"/>
+ <val o="cf6b7" v="50"/>
+ <val o="d04c8" v="49.9"/>
+ <val o="d12d7" v="50"/>
+ <val o="d20e7" v="50"/>
+ <val o="d2f02" v="50"/>
+ <val o="d3d05" v="50"/>
+ <val o="d4b15" v="50"/>
+ <val o="d5926" v="50"/>
+ <val o="d6735" v="50"/>
+ <val o="d7546" v="50"/>
+ <val o="d8355" v="50"/>
+ <val o="d9166" v="50"/>
+ <val o="d9f75" v="50.1"/>
+ <val o="dad87" v="50"/>
+ <val o="dbb97" v="49.9"/>
+ <val o="dc9a8" v="50"/>
+ <val o="dd7b7" v="50"/>
+ <val o="de5c6" v="50"/>
+ <val o="df3d7" v="50"/>
+ <val o="e01d7" v="50"/>
+ <val o="e0fe5" v="50"/>
+ <val o="e1df5" v="50"/>
+ <val o="e2c04" v="50"/>
+ <val o="e3a14" v="50"/>
+ <val o="e4824" v="50"/>
+ <val o="e5634" v="50"/>
+ <val o="e6444" v="50"/>
+ <val o="e7255" v="50"/>
+ <val o="e806f" v="50"/>
+ <val o="e8e7f" v="50"/>
+ <val o="e9c8e" v="50"/>
+ <val o="eaa9f" v="50"/>
+ <val o="eb8ae" v="50"/>
+ <val o="ec6bf" v="50"/>
+ <val o="ed4ce" v="50"/>
+ <val o="ee2df" v="50"/>
+ <val o="ef0ef" v="50"/>
+ <val o="eff01" v="50.1"/>
+ <val o="f0d10" v="50"/>
+ <val o="f1b20" v="50"/>
+ <val o="f2930" v="50"/>
+ <val o="f3740" v="50"/>
+ <val o="f4551" v="50"/>
+ <val o="f5361" v="50"/>
+ <val o="f6172" v="50"/>
+ <val o="f6f80" v="50"/>
+ <val o="f7d91" v="50"/>
+ <val o="f8ba1" v="50"/>
+ <val o="f99b1" v="50"/>
+ <val o="fa7c0" v="50"/>
+ <val o="fb5d1" v="50"/>
+ <val o="fc3e0" v="50"/>
+ <val o="fd1fb" v="50"/>
+ <val o="fe00b" v="50"/>
+ <val o="fee1c" v="50.1"/>
+ <val o="ffc2c" v="50"/>
+ <val o="100a3b" v="50"/>
+ <val o="10184c" v="50"/>
+ <val o="10265b" v="49.9"/>
+ <val o="10346c" v="50"/>
+ <val o="10427b" v="50"/>
+ <val o="10508d" v="49.9"/>
+ <val o="105e9d" v="50"/>
+ <val o="106cad" v="50"/>
+ <val o="107abd" v="50"/>
+ <val o="1088cd" v="49.9"/>
+ <val o="1096de" v="50"/>
+ <val o="10a4ed" v="50"/>
+ <val o="10b2fe" v="49.9"/>
+ <val o="10c10d" v="50"/>
+ <val o="10cf1e" v="50"/>
+ <val o="10dd2e" v="50"/>
+ <val o="10eb66" v="50"/>
+ <val o="10f94e" v="49.9"/>
+ <val o="11075e" v="50.1"/>
+ <val o="11156d" v="50.1"/>
+ <val o="112388" v="50"/>
+ <val o="113187" v="49.9"/>
+ <val o="113fb0" v="50"/>
+ <val o="114da6" v="49.9"/>
+ <val o="115bb6" v="50"/>
+ <val o="1169c6" v="50"/>
+ <val o="1177d6" v="50"/>
+ <val o="1185e8" v="50"/>
+ <val o="1193f7" v="50"/>
+ <val o="11a208" v="50"/>
+ <val o="11b017" v="50"/>
+ <val o="11be2f" v="50.1"/>
+ <val o="11cc37" v="50"/>
+ <val o="11da47" v="50"/>
+ <val o="11e857" v="50"/>
+ <val o="11f667" v="50"/>
+ <val o="120578" v="50"/>
+ <val o="121386" v="50"/>
+ <val o="122196" v="50"/>
+ <val o="122fa6" v="50"/>
+ <val o="123db5" v="50"/>
+ <val o="124bc5" v="50"/>
+ <val o="1259d5" v="50"/>
+ <val o="1267e4" v="50"/>
+ <val o="127600" v="49.9"/>
+ <val o="128305" v="50"/>
+ <val o="129115" v="50"/>
+ <val o="129f25" v="50"/>
+ <val o="12ad35" v="49.9"/>
+ <val o="12bb45" v="49.9"/>
+ <val o="12c954" v="49.9"/>
+ <val o="12d766" v="49.9"/>
+ <val o="12e575" v="50.1"/>
+ <val o="12f386" v="50.1"/>
+ <val o="130196" v="50"/>
+ <val o="130fa6" v="50.1"/>
+ <val o="131db7" v="49.9"/>
+ <val o="132bc5" v="50"/>
+ <val o="1339d4" v="50"/>
+ <val o="1347e5" v="50"/>
+ <val o="1355f4" v="50"/>
+ <val o="136404" v="50"/>
+ <val o="137214" v="50.1"/>
+ <val o="138024" v="50"/>
+ <val o="138e33" v="50"/>
+ <val o="139c44" v="50"/>
+ <val o="13aa54" v="50"/>
+ <val o="13b865" v="50"/>
+ <val o="13c67e" v="50"/>
+ <val o="13d48e" v="50"/>
+ <val o="13e29e" v="50"/>
+ <val o="13f0ae" v="50"/>
+ <val o="13febf" v="50"/>
+ <val o="140ccf" v="50"/>
+ <val o="141adf" v="50"/>
+ <val o="1428ef" v="50"/>
+ <val o="1436ff" v="49.9"/>
+ <val o="14450f" v="50"/>
+ <val o="14531f" v="50"/>
+ <val o="146130" v="50"/>
+ <val o="146f40" v="50"/>
+ <val o="147d44" v="50"/>
+ <val o="148b57" v="50"/>
+ <val o="149965" v="50"/>
+ <val o="14a775" v="50"/>
+ <val o="14b584" v="50"/>
+ <val o="14c397" v="50"/>
+ <val o="14d1a4" v="50"/>
+ <val o="14dfb6" v="49.9"/>
+ <val o="14edc5" v="50.1"/>
+ <val o="14fbd5" v="50"/>
+ <val o="1509e5" v="50"/>
+ <val o="1517ff" v="50"/>
+ <val o="152605" v="50"/>
+ <val o="153415" v="50"/>
+ <val o="154225" v="50"/>
+ <val o="155035" v="50"/>
+ <val o="155e45" v="50"/>
+ <val o="156c55" v="50"/>
+ <val o="157a65" v="50"/>
+ <val o="158875" v="49.9"/>
+ <val o="159686" v="50"/>
+ <val o="15a495" v="50"/>
+ <val o="15b2a6" v="50"/>
+ <val o="15c0b6" v="50"/>
+ <val o="15cec6" v="50"/>
+ <val o="15dcd5" v="50"/>
+ <val o="15eae6" v="49.9"/>
+ <val o="15f8f5" v="50"/>
+ <val o="160706" v="49.9"/>
+ <val o="161517" v="50"/>
+ <val o="162326" v="49.9"/>
+ <val o="163137" v="50"/>
+ <val o="163f46" v="50"/>
+ <val o="164d57" v="50"/>
+ <val o="165b67" v="50"/>
+ <val o="166982" v="50"/>
+ <val o="167786" v="50"/>
+ <val o="168596" v="50"/>
+ <val o="1693a6" v="50"/>
+ <val o="16a1b5" v="49.9"/>
+ <val o="16afc6" v="50"/>
+ <val o="16bdd5" v="50"/>
+ <val o="16cbe6" v="50"/>
+ <val o="16d9f6" v="50"/>
+ <val o="16e807" v="49.9"/>
+ <val o="16f616" v="50"/>
+ <val o="170429" v="50"/>
+ <val o="171236" v="50"/>
+ <val o="172047" v="50"/>
+ <val o="172e57" v="50"/>
+ <val o="173c67" v="50"/>
+ <val o="174a77" v="50"/>
+ <val o="175887" v="50"/>
+ <val o="176694" v="49.9"/>
+ <val o="1774a3" v="50"/>
+ <val o="1782b3" v="50"/>
+ <val o="1790c5" v="50"/>
+ <val o="179ed4" v="50"/>
+ <val o="17ace4" v="50.1"/>
+ <val o="17bafd" v="50.1"/>
+ <val o="17c90f" v="50"/>
+ <val o="17d71e" v="50"/>
+ <val o="17e52f" v="50"/>
+ <val o="17f33f" v="50"/>
+ <val o="18014f" v="50"/>
+ <val o="180f5f" v="50"/>
+ <val o="181d6e" v="50.1"/>
+ <val o="182b7f" v="50"/>
+ <val o="18398f" v="50"/>
+ <val o="1847a1" v="50"/>
+ <val o="1855af" v="50"/>
+ <val o="1863c0" v="50"/>
+ <val o="1871cf" v="49.9"/>
+ <val o="187fe0" v="50"/>
+ <val o="188def" v="50"/>
+ <val o="189c00" v="50"/>
+ <val o="18b80d" v="50"/>
+ <val o="18c61c" v="49.9"/>
+ <val o="18d42c" v="50"/>
+ <val o="18e23b" v="50"/>
+ <val o="18f04b" v="50"/>
+ <val o="18fe5e" v="50"/>
+ <val o="190c76" v="50"/>
+ <val o="191a86" v="50"/>
+ <val o="192896" v="50"/>
+ <val o="1936a6" v="50"/>
+ <val o="1944b7" v="50"/>
+ <val o="1952c6" v="49.9"/>
+ <val o="1960d7" v="50"/>
+ <val o="196ee6" v="50"/>
+ <val o="197cf8" v="50"/>
+ <val o="198b0f" v="50"/>
+ <val o="19991f" v="50"/>
+ <val o="19b541" v="50"/>
+ <val o="19c34d" v="50"/>
+ <val o="19d15e" v="50"/>
+ <val o="19df80" v="50"/>
+ <val o="19ed90" v="50"/>
+ <val o="19eebe" v="50"/>
+ <val o="19fb8e" v="49.9"/>
+ <val o="1a09a0" v="50"/>
+ <val o="1a17ae" v="49.9"/>
+ <val o="1a25be" v="50"/>
+ <val o="1a33cd" v="50"/>
+ <val o="1a41dd" v="50"/>
+ <val o="1a4fed" v="50"/>
+ <val o="1a5e08" v="50"/>
+ <val o="1a6c05" v="50"/>
+ <val o="1a7a15" v="50.1"/>
+ <val o="1a8826" v="50"/>
+ <val o="1a9637" v="50"/>
+ <val o="1aa445" v="50"/>
+ <val o="1ab255" v="50"/>
+ <val o="1ac065" v="50"/>
+ <val o="1ace75" v="50"/>
+ <val o="1adc87" v="50"/>
+ <val o="1aea96" v="49.9"/>
+ <val o="1af8a7" v="50"/>
+ <val o="1b06b7" v="50"/>
+ <val o="1b14c6" v="50"/>
+ <val o="1c7460" v="50"/>
+ <val o="1c8270" v="50"/>
+ <val o="1c907e" v="50"/>
+ <val o="1c9e8f" v="50"/>
+ <val o="1caca2" v="50"/>
+ <val o="1cbab1" v="50"/>
+ <val o="1cc8c1" v="50"/>
+ <val o="1cd6d0" v="50"/>
+ <val o="1ce4de" v="50"/>
+ <val o="1cf2f0" v="50"/>
+ <val o="1d0109" v="50"/>
+ <val o="1d0f06" v="50"/>
+ <val o="1d1d15" v="50"/>
+ <val o="1d2b25" v="50"/>
+ <val o="1d3935" v="50"/>
+ <val o="1d4745" v="50"/>
+ <val o="1d5555" v="50"/>
+ <val o="1d6366" v="50"/>
+ <val o="1d7175" v="50"/>
+ <val o="1d7f86" v="50"/>
+ <val o="1d8d95" v="50"/>
+ <val o="1d9ba6" v="50"/>
+ <val o="1da9b6" v="50"/>
+ <val o="1db7c7" v="50"/>
+ <val o="1dc5d5" v="49.9"/>
+ <val o="1dd3e6" v="49.9"/>
+ <val o="1de1f5" v="50"/>
+ <val o="1df006" v="50"/>
+ <val o="1dfe16" v="50"/>
+ <val o="1e0c26" v="49.9"/>
+ <val o="1e1a36" v="49.9"/>
+ <val o="1e2847" v="50"/>
+ <val o="1e3659" v="50"/>
+ <val o="1e4467" v="50"/>
+ <val o="1e5281" v="50"/>
+ <val o="1e6086" v="50"/>
+ <val o="1e6e96" v="50"/>
+ <val o="1e7ca6" v="50"/>
+ <val o="1e8ab5" v="50"/>
+ <val o="1e98c6" v="49.9"/>
+ <val o="1ea6d5" v="50"/>
+ <val o="1eb4e6" v="50"/>
+ <val o="1ec2f6" v="50"/>
+ <val o="1ed106" v="50"/>
+ <val o="1edf16" v="50"/>
+ <val o="1eed26" v="49.9"/>
+ <val o="1efb36" v="50"/>
+ <val o="1f0946" v="50"/>
+ <val o="1f1756" v="50"/>
+ <val o="1f2566" v="50"/>
+ <val o="1f3376" v="50"/>
+ <val o="1f4187" v="50"/>
+ <val o="1f4f96" v="50"/>
+ <val o="1f5da7" v="50"/>
+ <val o="1f6bb6" v="50"/>
+ <val o="1f79c7" v="50.1"/>
+ <val o="1f87d6" v="50.1"/>
+ <val o="1f95e7" v="50"/>
+ <val o="1fa401" v="50"/>
+ <val o="1fb204" v="50"/>
+ <val o="1fc016" v="50"/>
+ <val o="1fce25" v="49.9"/>
+ <val o="1fdc35" v="50"/>
+ <val o="1fea45" v="50"/>
+ <val o="1ff855" v="50"/>
+ <val o="200665" v="49.9"/>
+ <val o="201475" v="50"/>
+ <val o="202286" v="49.9"/>
+ <val o="203095" v="49.9"/>
+ <val o="203ea5" v="50"/>
+ <val o="204cb6" v="50"/>
+ <val o="205ac6" v="50"/>
+ <val o="2068d6" v="50"/>
+ <val o="2076e6" v="50"/>
+ <val o="2084f6" v="50"/>
+ <val o="209306" v="50"/>
+ <val o="20a116" v="50"/>
+ <val o="20af26" v="49.9"/>
+ <val o="20bd37" v="49.9"/>
+ <val o="20cb46" v="49.9"/>
+ <val o="20d957" v="50"/>
+ <val o="20e767" v="50"/>
+ <val o="20f581" v="50"/>
+ <val o="210386" v="50"/>
+ <val o="211194" v="50"/>
+ <val o="211fa5" v="50"/>
+ <val o="212db5" v="50"/>
+ <val o="213bc5" v="50"/>
+ <val o="2149d6" v="50"/>
+ <val o="2157e5" v="50"/>
+ <val o="2165f6" v="50"/>
+ <val o="217406" v="50"/>
+ <val o="218217" v="50"/>
+ <val o="219026" v="50"/>
+ <val o="219e39" v="50"/>
+ <val o="21ac46" v="50"/>
+ <val o="21ba57" v="50"/>
+ <val o="21c867" v="50"/>
+ <val o="21d677" v="50"/>
+ <val o="21e487" v="50"/>
+ <val o="21f296" v="50"/>
+ <val o="2200a6" v="50"/>
+ <val o="220eb7" v="50"/>
+ <val o="221cc6" v="50"/>
+ <val o="222ad7" v="50"/>
+ <val o="2238e7" v="50"/>
+ <val o="224701" v="49.9"/>
+ <val o="225505" v="50"/>
+ <val o="226315" v="50"/>
+ <val o="227125" v="50"/>
+ <val o="227f35" v="50"/>
+ <val o="228d45" v="50"/>
+ <val o="229b54" v="50"/>
+ <val o="22a965" v="50"/>
+ <val o="22b776" v="50"/>
+ <val o="22c586" v="50"/>
+ <val o="22d397" v="50"/>
+ <val o="22e1a6" v="50"/>
+ <val o="22efb6" v="50.1"/>
+ <val o="22fdc7" v="50"/>
+ <val o="230bd7" v="50"/>
+ <val o="2319e6" v="50"/>
+ <val o="2327f6" v="50"/>
+ <val o="23361b" v="50"/>
+ <val o="234416" v="50"/>
+ <val o="235226" v="50"/>
+ <val o="236037" v="50"/>
+ <val o="236e46" v="49.9"/>
+ <val o="237c57" v="50"/>
+ <val o="238a66" v="50.1"/>
+ <val o="239881" v="50"/>
+ <val o="23a685" v="50"/>
+ <val o="23b495" v="50"/>
+ <val o="23c2a4" v="50"/>
+ <val o="23d0b5" v="50"/>
+ <val o="23dec4" v="50"/>
+ <val o="23ecd5" v="49.9"/>
+ <val o="23fae4" v="50"/>
+ <val o="2408f6" v="50"/>
+ <val o="241706" v="50"/>
+ <val o="242518" v="49.9"/>
+ <val o="243325" v="50"/>
+ <val o="244137" v="50"/>
+ <val o="244f46" v="50.1"/>
+ <val o="246b66" v="50"/>
+ <val o="247976" v="50"/>
+ <val o="248786" v="49.9"/>
+ <val o="24957e" v="50"/>
+ <val o="24a38f" v="49.9"/>
+ <val o="24b19c" v="50"/>
+ <val o="24bfac" v="50"/>
+ <val o="24cdbc" v="50"/>
+ <val o="24dbcd" v="50"/>
+ <val o="24e9e5" v="50"/>
+ <val o="24f808" v="50"/>
+ <val o="250616" v="50"/>
+ <val o="251426" v="49.9"/>
+ <val o="252236" v="50"/>
+ <val o="253047" v="50"/>
+ <val o="253e56" v="50"/>
+ <val o="254c67" v="50"/>
+ <val o="255a76" v="50"/>
+ <val o="256887" v="50"/>
+ <val o="257697" v="50"/>
+ <val o="2584a8" v="50"/>
+ <val o="2592b6" v="50"/>
+ <val o="25a0c7" v="50"/>
+ <val o="25aed7" v="50"/>
+ <val o="25bce7" v="50"/>
+ <val o="25caf8" v="50"/>
+ <val o="25d907" v="49.9"/>
+ <val o="25e718" v="50"/>
+ <val o="25f527" v="50"/>
+ <val o="260338" v="50"/>
+ <val o="261149" v="50"/>
+ <val o="261f59" v="50"/>
+ <val o="262d68" v="50.1"/>
+ <val o="263b83" v="50"/>
+ <val o="264986" v="50"/>
+ <val o="265795" v="50"/>
+ <val o="2665a6" v="50"/>
+ <val o="2673b5" v="50"/>
+ <val o="2681c6" v="50"/>
+ <val o="268fd5" v="50"/>
+ <val o="269de6" v="50"/>
+ <val o="26abf6" v="50"/>
+ <val o="26ba06" v="50"/>
+ <val o="26c817" v="50"/>
+ <val o="26d62b" v="50"/>
+ <val o="26e436" v="50"/>
+ <val o="26f247" v="50"/>
+ <val o="270057" v="50"/>
+ <val o="270e67" v="50"/>
+ <val o="271c77" v="50"/>
+ <val o="272a87" v="50"/>
+ <val o="273897" v="50"/>
+ <val o="2746a8" v="50"/>
+ <val o="2754b9" v="50"/>
+ <val o="2762c7" v="49.9"/>
+ <val o="2770d8" v="50"/>
+ <val o="277ee7" v="50"/>
+ </par>
+ <par memind="8612" h="3dc1a8de">
+ <val o="0" v="25.07"/>
+ <val o="e08" v="24.067"/>
+ <val o="1c32" v="23.438"/>
+ <val o="2a3c" v="23.245"/>
+ <val o="3835" v="22.784"/>
+ <val o="4645" v="22.746"/>
+ <val o="5455" v="26.297"/>
+ <val o="6265" v="28.878"/>
+ <val o="7075" v="34.451"/>
+ <val o="7e85" v="40.017"/>
+ <val o="8c96" v="40.572"/>
+ <val o="9aa5" v="38.682"/>
+ <val o="a8b6" v="35.869"/>
+ <val o="b6c5" v="34.12"/>
+ <val o="c4d7" v="0.035"/>
+ <val o="d30b" v="0.036"/>
+ <val o="e0f6" v="0.035"/>
+ <val o="ef06" v="0.037"/>
+ <val o="fd17" v="0.038"/>
+ <val o="10b27" v="0.037"/>
+ <val o="11937" v="0.037"/>
+ <val o="12746" v="0.036"/>
+ <val o="13556" v="0.035"/>
+ <val o="14366" v="0.036"/>
+ <val o="15181" v="0.037"/>
+ <val o="15f85" v="0.036"/>
+ <val o="16d95" v="0.036"/>
+ <val o="17ba4" v="0.035"/>
+ <val o="189b5" v="0.038"/>
+ <val o="197c4" v="0.036"/>
+ <val o="1a5d5" v="0.037"/>
+ <val o="1b3e6" v="0.034"/>
+ <val o="1c1f6" v="0.037"/>
+ <val o="1d005" v="0.035"/>
+ <val o="1de15" v="0.033"/>
+ <val o="1ec25" v="0.035"/>
+ <val o="1fa36" v="0.035"/>
+ <val o="20845" v="0.037"/>
+ <val o="21656" v="0.035"/>
+ <val o="22465" v="0.037"/>
+ <val o="23276" v="0.035"/>
+ <val o="24086" v="0.034"/>
+ <val o="24e99" v="0.035"/>
+ <val o="25ca7" v="0.035"/>
+ <val o="26ab7" v="0.035"/>
+ <val o="278c6" v="0.036"/>
+ <val o="286d6" v="0.035"/>
+ <val o="294e6" v="0.034"/>
+ <val o="2a301" v="0.036"/>
+ <val o="2b105" v="0.034"/>
+ <val o="2bf15" v="0.034"/>
+ <val o="2cd25" v="0.036"/>
+ <val o="2db35" v="0.034"/>
+ <val o="2e946" v="0.033"/>
+ <val o="2f755" v="0.034"/>
+ <val o="30566" v="0.035"/>
+ <val o="31375" v="0.035"/>
+ <val o="3219e" v="0.035"/>
+ <val o="32f96" v="0.036"/>
+ <val o="33da6" v="0.035"/>
+ <val o="34bb6" v="0.035"/>
+ <val o="359de" v="0.033"/>
+ <val o="367d6" v="0.035"/>
+ <val o="375e6" v="0.034"/>
+ <val o="3840e" v="0.033"/>
+ <val o="3921e" v="0.035"/>
+ <val o="3a016" v="0.035"/>
+ <val o="3ae27" v="0.036"/>
+ <val o="3bc36" v="0.035"/>
+ <val o="3ca47" v="0.035"/>
+ <val o="3d856" v="0.036"/>
+ <val o="3e667" v="0.035"/>
+ <val o="3f481" v="0.037"/>
+ <val o="40285" v="0.034"/>
+ <val o="41095" v="0.035"/>
+ <val o="41ea5" v="0.035"/>
+ <val o="42cb5" v="0.035"/>
+ <val o="43ac5" v="0.036"/>
+ <val o="448d5" v="0.038"/>
+ <val o="456e6" v="0.036"/>
+ <val o="464f5" v="0.039"/>
+ <val o="480ff" v="0.036"/>
+ <val o="48f0e" v="0.036"/>
+ <val o="49d1d" v="0.038"/>
+ <val o="4ab46" v="0.036"/>
+ <val o="4b955" v="0.037"/>
+ <val o="4c769" v="0.036"/>
+ <val o="4d577" v="0.036"/>
+ <val o="4e387" v="0.036"/>
+ <val o="4f196" v="0.036"/>
+ <val o="4ffa6" v="0.036"/>
+ <val o="50dd0" v="0.038"/>
+ <val o="51bc6" v="0.036"/>
+ <val o="529d6" v="0.036"/>
+ <val o="537e7" v="0.035"/>
+ <val o="54600" v="0.036"/>
+ <val o="55406" v="0.034"/>
+ <val o="56215" v="0.035"/>
+ <val o="57026" v="0.034"/>
+ <val o="57e36" v="0.036"/>
+ <val o="58c46" v="0.035"/>
+ <val o="59a70" v="0.04"/>
+ <val o="5a867" v="0.034"/>
+ <val o="5b676" v="0.035"/>
+ <val o="5c487" v="0.036"/>
+ <val o="5d296" v="0.037"/>
+ <val o="5e0a9" v="0.036"/>
+ <val o="5eeb8" v="0.039"/>
+ <val o="5fcc6" v="0.036"/>
+ <val o="60ad7" v="0.035"/>
+ <val o="618e7" v="0.036"/>
+ <val o="626f7" v="0.035"/>
+ <val o="63507" v="0.036"/>
+ <val o="64317" v="0.037"/>
+ <val o="65127" v="0.039"/>
+ <val o="65f37" v="0.037"/>
+ <val o="66d46" v="0.035"/>
+ <val o="67b57" v="0.036"/>
+ <val o="68967" v="0.035"/>
+ <val o="69782" v="0.035"/>
+ <val o="6a586" v="0.037"/>
+ <val o="6b395" v="0.035"/>
+ <val o="6c1a6" v="0.037"/>
+ <val o="6cfb5" v="0.035"/>
+ <val o="6ddc6" v="0.033"/>
+ <val o="6ebd6" v="0.033"/>
+ <val o="6f9e6" v="0.035"/>
+ <val o="707f6" v="0.035"/>
+ <val o="71607" v="0.037"/>
+ <val o="72417" v="0.037"/>
+ <val o="73227" v="0.037"/>
+ <val o="74037" v="0.037"/>
+ <val o="74e47" v="0.037"/>
+ <val o="75c57" v="0.04"/>
+ <val o="76a63" v="0.036"/>
+ <val o="77873" v="0.035"/>
+ <val o="78680" v="0.037"/>
+ <val o="7948f" v="0.036"/>
+ <val o="7a29f" v="0.036"/>
+ <val o="7b0af" v="0.036"/>
+ <val o="7bebf" v="0.036"/>
+ <val o="7cccf" v="0.037"/>
+ <val o="7dadf" v="0.036"/>
+ <val o="7e8fa" v="0.035"/>
+ <val o="7f70a" v="0.035"/>
+ <val o="8051a" v="0.036"/>
+ <val o="8132a" v="0.034"/>
+ <val o="8213a" v="0.035"/>
+ <val o="82f4a" v="0.036"/>
+ <val o="83d5a" v="0.035"/>
+ <val o="84b6a" v="0.034"/>
+ <val o="8597a" v="0.035"/>
+ <val o="8678b" v="0.036"/>
+ <val o="8759b" v="0.034"/>
+ <val o="883ac" v="0.037"/>
+ <val o="891bb" v="0.037"/>
+ <val o="89fca" v="0.035"/>
+ <val o="8adda" v="0.035"/>
+ <val o="8bbeb" v="0.035"/>
+ <val o="8c9fc" v="0.035"/>
+ <val o="8d80b" v="0.034"/>
+ <val o="8e61a" v="0.035"/>
+ <val o="8f42a" v="0.034"/>
+ <val o="9023a" v="0.036"/>
+ <val o="9104a" v="0.035"/>
+ <val o="91e5a" v="0.035"/>
+ <val o="92c6a" v="0.034"/>
+ <val o="93a84" v="0.035"/>
+ <val o="94885" v="0.036"/>
+ <val o="95694" v="0.034"/>
+ <val o="964a5" v="0.034"/>
+ <val o="972b4" v="0.034"/>
+ <val o="980c5" v="0.034"/>
+ <val o="98ed4" v="0.035"/>
+ <val o="99ce5" v="0.037"/>
+ <val o="9aaf5" v="0.034"/>
+ <val o="9b906" v="0.036"/>
+ <val o="9c716" v="0.037"/>
+ <val o="9d526" v="0.035"/>
+ <val o="9e336" v="0.035"/>
+ <val o="9f145" v="0.035"/>
+ <val o="9ff56" v="0.035"/>
+ <val o="a0d65" v="0.036"/>
+ <val o="a1b77" v="36.117"/>
+ <val o="a2986" v="17.613"/>
+ <val o="a3795" v="8.357"/>
+ <val o="a45a7" v="5.957"/>
+ <val o="a53b6" v="7.134"/>
+ <val o="a61c7" v="8.646"/>
+ <val o="a6fd6" v="6.429"/>
+ <val o="a7e00" v="10.235"/>
+ <val o="a8c00" v="14.027"/>
+ <val o="a9a05" v="3.549"/>
+ <val o="aa815" v="3.8"/>
+ <val o="ab625" v="6.093"/>
+ <val o="ac435" v="5.204"/>
+ <val o="ad245" v="7.526"/>
+ <val o="ae055" v="11.39"/>
+ <val o="aee65" v="0.954"/>
+ <val o="afc75" v="5.773"/>
+ <val o="b0a85" v="21.019"/>
+ <val o="b26a6" v="22.636"/>
+ <val o="b34b6" v="19.316"/>
+ <val o="b42c6" v="1.265"/>
+ <val o="b50d6" v="3.13"/>
+ <val o="b5ee7" v="6.091"/>
+ <val o="b6cf6" v="7.273"/>
+ <val o="b7b07" v="9.373"/>
+ <val o="b8917" v="7.711"/>
+ <val o="b9728" v="8.183"/>
+ <val o="ba537" v="9.843"/>
+ <val o="bb347" v="5.251"/>
+ <val o="bc157" v="2.646"/>
+ <val o="bcf67" v="7.175"/>
+ <val o="bdd81" v="19.697"/>
+ <val o="beb86" v="4.703"/>
+ <val o="bf995" v="5.017"/>
+ <val o="c07a6" v="5.028"/>
+ <val o="c15b5" v="4.406"/>
+ <val o="c23c6" v="5.164"/>
+ <val o="c31d5" v="10.951"/>
+ <val o="c3fe6" v="5.096"/>
+ <val o="c4df5" v="10.032"/>
+ <val o="c5c06" v="4.084"/>
+ <val o="c6a16" v="5.223"/>
+ <val o="c7826" v="6.622"/>
+ <val o="c8636" v="2.571"/>
+ <val o="c9446" v="3.766"/>
+ <val o="ca256" v="2.925"/>
+ <val o="cb066" v="4.239"/>
+ <val o="cbe76" v="2.442"/>
+ <val o="ccc87" v="10.653"/>
+ <val o="cda96" v="15.045"/>
+ <val o="ce8a8" v="10.497"/>
+ <val o="cf6b7" v="14.243"/>
+ <val o="d04c8" v="11.318"/>
+ <val o="d12d7" v="7.26"/>
+ <val o="d20e7" v="3.278"/>
+ <val o="d2f02" v="12.768"/>
+ <val o="d3d05" v="8.863"/>
+ <val o="d4b15" v="8.423"/>
+ <val o="d5926" v="7.503"/>
+ <val o="d6735" v="7.803"/>
+ <val o="d7546" v="10.91"/>
+ <val o="d8355" v="5.743"/>
+ <val o="d9166" v="2.082"/>
+ <val o="d9f75" v="7.751"/>
+ <val o="dad87" v="16.785"/>
+ <val o="dbb97" v="18.467"/>
+ <val o="dc9a8" v="18.801"/>
+ <val o="dd7b7" v="16.008"/>
+ <val o="de5c6" v="13.629"/>
+ <val o="df3d7" v="14.479"/>
+ <val o="e01d7" v="14.927"/>
+ <val o="e0fe5" v="14.349"/>
+ <val o="e1df5" v="15.502"/>
+ <val o="e2c04" v="20.07"/>
+ <val o="e3a14" v="20.011"/>
+ <val o="e4824" v="16.357"/>
+ <val o="e5634" v="17.03"/>
+ <val o="e6444" v="11.901"/>
+ <val o="e7255" v="10.138"/>
+ <val o="e806f" v="8.731"/>
+ <val o="e8e7f" v="14.357"/>
+ <val o="e9c8e" v="4.86"/>
+ <val o="eaa9f" v="4.149"/>
+ <val o="eb8ae" v="6.019"/>
+ <val o="ec6bf" v="14.635"/>
+ <val o="ed4ce" v="9.989"/>
+ <val o="ee2df" v="11.96"/>
+ <val o="ef0ef" v="15.422"/>
+ <val o="eff01" v="22.742"/>
+ <val o="f0d10" v="22.428"/>
+ <val o="f1b20" v="24.11"/>
+ <val o="f2930" v="23.076"/>
+ <val o="f3740" v="23.241"/>
+ <val o="f4551" v="24.018"/>
+ <val o="f5361" v="25.989"/>
+ <val o="f6172" v="24.748"/>
+ <val o="f6f80" v="25.323"/>
+ <val o="f7d91" v="23.122"/>
+ <val o="f8ba1" v="19.403"/>
+ <val o="f99b1" v="19.28"/>
+ <val o="fa7c0" v="16.12"/>
+ <val o="fb5d1" v="16.228"/>
+ <val o="fc3e0" v="16.654"/>
+ <val o="fd1fb" v="14.2"/>
+ <val o="fe00b" v="14.054"/>
+ <val o="fee1c" v="9.557"/>
+ <val o="ffc2c" v="9.072"/>
+ <val o="100a3b" v="8.333"/>
+ <val o="10184c" v="9.771"/>
+ <val o="10265b" v="14.337"/>
+ <val o="10346c" v="16.049"/>
+ <val o="10427b" v="19.911"/>
+ <val o="10508d" v="23.238"/>
+ <val o="105e9d" v="23.213"/>
+ <val o="106cad" v="25.179"/>
+ <val o="107abd" v="21.591"/>
+ <val o="1088cd" v="19.665"/>
+ <val o="1096de" v="21.079"/>
+ <val o="10a4ed" v="21.109"/>
+ <val o="10b2fe" v="22.363"/>
+ <val o="10c10d" v="25.172"/>
+ <val o="10cf1e" v="23.223"/>
+ <val o="10dd2e" v="20.912"/>
+ <val o="10eb66" v="22.017"/>
+ <val o="10f94e" v="18.729"/>
+ <val o="11075e" v="16.761"/>
+ <val o="11156d" v="13.145"/>
+ <val o="112388" v="13.912"/>
+ <val o="113187" v="8.712"/>
+ <val o="113fb0" v="8.106"/>
+ <val o="114da6" v="8.195"/>
+ <val o="115bb6" v="8.301"/>
+ <val o="1169c6" v="10.111"/>
+ <val o="1177d6" v="14.213"/>
+ <val o="1185e8" v="15.617"/>
+ <val o="1193f7" v="19.095"/>
+ <val o="11a208" v="23.986"/>
+ <val o="11b017" v="20.919"/>
+ <val o="11be2f" v="26.06"/>
+ <val o="11cc37" v="21.493"/>
+ <val o="11da47" v="21.006"/>
+ <val o="11e857" v="22.144"/>
+ <val o="11f667" v="19.124"/>
+ <val o="120578" v="0.019"/>
+ <val o="121386" v="0.021"/>
+ <val o="122196" v="0.021"/>
+ <val o="122fa6" v="0.018"/>
+ <val o="123db5" v="0.015"/>
+ <val o="124bc5" v="0.016"/>
+ <val o="1259d5" v="0.011"/>
+ <val o="1267e4" v="0.01"/>
+ <val o="127600" v="0.011"/>
+ <val o="128305" v="0.01"/>
+ <val o="129115" v="0.01"/>
+ <val o="129f25" v="0.01"/>
+ <val o="12ad35" v="0.009"/>
+ <val o="12bb45" v="0.006"/>
+ <val o="12c954" v="0.009"/>
+ <val o="12d766" v="0.011"/>
+ <val o="12e575" v="0.017"/>
+ <val o="12f386" v="0.012"/>
+ <val o="130196" v="0.019"/>
+ <val o="130fa6" v="0.014"/>
+ <val o="131db7" v="0.015"/>
+ <val o="132bc5" v="0.015"/>
+ <val o="1339d4" v="0.279"/>
+ <val o="1347e5" v="0.096"/>
+ <val o="1355f4" v="0.141"/>
+ <val o="136404" v="0.207"/>
+ <val o="137214" v="0.218"/>
+ <val o="138024" v="0.213"/>
+ <val o="138e33" v="0.214"/>
+ <val o="139c44" v="0.075"/>
+ <val o="13aa54" v="0.05"/>
+ <val o="13b865" v="0.034"/>
+ <val o="13c67e" v="0.449"/>
+ <val o="13d48e" v="0.217"/>
+ <val o="13e29e" v="0.167"/>
+ <val o="13f0ae" v="0.158"/>
+ <val o="13febf" v="0.232"/>
+ <val o="140ccf" v="0.339"/>
+ <val o="141adf" v="0.212"/>
+ <val o="1428ef" v="0.044"/>
+ <val o="1436ff" v="0.033"/>
+ <val o="14450f" v="0.025"/>
+ <val o="14531f" v="0.023"/>
+ <val o="146130" v="0.058"/>
+ <val o="146f40" v="0.145"/>
+ <val o="147d44" v="0.064"/>
+ <val o="148b57" v="0.08"/>
+ <val o="149965" v="0.067"/>
+ <val o="14a775" v="0.111"/>
+ <val o="14b584" v="0.05"/>
+ <val o="14c397" v="0.239"/>
+ <val o="14d1a4" v="0.206"/>
+ <val o="14dfb6" v="0.163"/>
+ <val o="14edc5" v="0.063"/>
+ <val o="14fbd5" v="0.027"/>
+ <val o="1509e5" v="0.077"/>
+ <val o="1517ff" v="0.153"/>
+ <val o="152605" v="0.181"/>
+ <val o="153415" v="0.149"/>
+ <val o="154225" v="0.157"/>
+ <val o="155035" v="0.166"/>
+ <val o="155e45" v="0.216"/>
+ <val o="156c55" v="0.306"/>
+ <val o="157a65" v="0.168"/>
+ <val o="158875" v="0.145"/>
+ <val o="159686" v="0.252"/>
+ <val o="15a495" v="0.213"/>
+ <val o="15b2a6" v="0.19"/>
+ <val o="15c0b6" v="0.111"/>
+ <val o="15cec6" v="0.114"/>
+ <val o="15dcd5" v="0.107"/>
+ <val o="15eae6" v="0.115"/>
+ <val o="15f8f5" v="0.302"/>
+ <val o="160706" v="0.03"/>
+ <val o="161517" v="0.06"/>
+ <val o="162326" v="0.048"/>
+ <val o="163137" v="0.069"/>
+ <val o="163f46" v="0.063"/>
+ <val o="164d57" v="0.029"/>
+ <val o="165b67" v="0.105"/>
+ <val o="166982" v="0.096"/>
+ <val o="167786" v="0.142"/>
+ <val o="168596" v="0.101"/>
+ <val o="1693a6" v="0.092"/>
+ <val o="16a1b5" v="0.071"/>
+ <val o="16afc6" v="0.067"/>
+ <val o="16bdd5" v="0.17"/>
+ <val o="16cbe6" v="0.212"/>
+ <val o="16d9f6" v="0.089"/>
+ <val o="16e807" v="0.607"/>
+ <val o="16f616" v="0.675"/>
+ <val o="170429" v="0.723"/>
+ <val o="171236" v="0.477"/>
+ <val o="172047" v="0.477"/>
+ <val o="172e57" v="0.491"/>
+ <val o="173c67" v="0.496"/>
+ <val o="174a77" v="0.579"/>
+ <val o="175887" v="0.62"/>
+ <val o="176694" v="35.716"/>
+ <val o="1774a3" v="33.973"/>
+ <val o="1782b3" v="35.295"/>
+ <val o="1790c5" v="32.429"/>
+ <val o="179ed4" v="28.433"/>
+ <val o="17ace4" v="29.24"/>
+ <val o="17bafd" v="30.943"/>
+ <val o="17c90f" v="28.05"/>
+ <val o="17d71e" v="27.792"/>
+ <val o="17e52f" v="28.102"/>
+ <val o="17f33f" v="25.534"/>
+ <val o="18014f" v="25.021"/>
+ <val o="180f5f" v="30.046"/>
+ <val o="181d6e" v="32.772"/>
+ <val o="182b7f" v="38.186"/>
+ <val o="18398f" v="64.34"/>
+ <val o="1847a1" v="63.582"/>
+ <val o="1855af" v="60.895"/>
+ <val o="1863c0" v="57.167"/>
+ <val o="1871cf" v="59.436"/>
+ <val o="187fe0" v="56.655"/>
+ <val o="188def" v="60.597"/>
+ <val o="189c00" v="56.836"/>
+ <val o="18b80d" v="37.581"/>
+ <val o="18c61c" v="40.1"/>
+ <val o="18d42c" v="38.214"/>
+ <val o="18e23b" v="32.175"/>
+ <val o="18f04b" v="30.662"/>
+ <val o="18fe5e" v="26.933"/>
+ <val o="190c76" v="21.269"/>
+ <val o="191a86" v="21.646"/>
+ <val o="192896" v="21.244"/>
+ <val o="1936a6" v="20.855"/>
+ <val o="1944b7" v="19.588"/>
+ <val o="1952c6" v="20.809"/>
+ <val o="1960d7" v="25.64"/>
+ <val o="196ee6" v="29.166"/>
+ <val o="197cf8" v="31.236"/>
+ <val o="198b0f" v="28.424"/>
+ <val o="19991f" v="32.717"/>
+ <val o="19b541" v="32.231"/>
+ <val o="19c34d" v="29.816"/>
+ <val o="19d15e" v="29.219"/>
+ <val o="19df80" v="29.861"/>
+ <val o="19ed90" v="29.093"/>
+ <val o="19eebe" v="29.004"/>
+ <val o="19fb8e" v="10.445"/>
+ <val o="1a09a0" v="18.158"/>
+ <val o="1a17ae" v="23.713"/>
+ <val o="1a25be" v="25.84"/>
+ <val o="1a33cd" v="13.692"/>
+ <val o="1a41dd" v="15.619"/>
+ <val o="1a4fed" v="22.235"/>
+ <val o="1a5e08" v="20.533"/>
+ <val o="1a6c05" v="14.806"/>
+ <val o="1a7a15" v="17.786"/>
+ <val o="1a8826" v="18.205"/>
+ <val o="1a9637" v="14.86"/>
+ <val o="1aa445" v="11.317"/>
+ <val o="1ab255" v="6.403"/>
+ <val o="1ac065" v="13.389"/>
+ <val o="1ace75" v="18.094"/>
+ <val o="1adc87" v="16.688"/>
+ <val o="1aea96" v="16.251"/>
+ <val o="1af8a7" v="17.902"/>
+ <val o="1b06b7" v="16.864"/>
+ <val o="1b14c6" v="16.076"/>
+ <val o="1c7460" v="4.33"/>
+ <val o="1c8270" v="4.33"/>
+ <val o="1c907e" v="21.221"/>
+ <val o="1c9e8f" v="20.86"/>
+ <val o="1caca2" v="22.903"/>
+ <val o="1cbab1" v="22.672"/>
+ <val o="1cc8c1" v="34.711"/>
+ <val o="1cd6d0" v="33.792"/>
+ <val o="1ce4de" v="32.717"/>
+ <val o="1cf2f0" v="33.04"/>
+ <val o="1d0109" v="34.047"/>
+ <val o="1d0f06" v="36.536"/>
+ <val o="1d1d15" v="36.673"/>
+ <val o="1d2b25" v="36.752"/>
+ <val o="1d3935" v="37.932"/>
+ <val o="1d4745" v="37.857"/>
+ <val o="1d5555" v="37.029"/>
+ <val o="1d6366" v="32.844"/>
+ <val o="1d7175" v="31.917"/>
+ <val o="1d7f86" v="31.363"/>
+ <val o="1d8d95" v="15.349"/>
+ <val o="1d9ba6" v="17.623"/>
+ <val o="1da9b6" v="17.658"/>
+ <val o="1db7c7" v="16.597"/>
+ <val o="1dc5d5" v="17.621"/>
+ <val o="1dd3e6" v="18.017"/>
+ <val o="1de1f5" v="32.337"/>
+ <val o="1df006" v="37.113"/>
+ <val o="1dfe16" v="36.896"/>
+ <val o="1e0c26" v="37.646"/>
+ <val o="1e1a36" v="37.465"/>
+ <val o="1e2847" v="35.96"/>
+ <val o="1e3659" v="34.217"/>
+ <val o="1e4467" v="31.472"/>
+ <val o="1e5281" v="27.913"/>
+ <val o="1e6086" v="27.77"/>
+ <val o="1e6e96" v="27.092"/>
+ <val o="1e7ca6" v="9.65"/>
+ <val o="1e8ab5" v="8.989"/>
+ <val o="1e98c6" v="8.871"/>
+ <val o="1ea6d5" v="11.525"/>
+ <val o="1eb4e6" v="11.312"/>
+ <val o="1ec2f6" v="13.145"/>
+ <val o="1ed106" v="12.866"/>
+ <val o="1edf16" v="13.503"/>
+ <val o="1eed26" v="12.977"/>
+ <val o="1efb36" v="12.853"/>
+ <val o="1f0946" v="12.322"/>
+ <val o="1f1756" v="11.244"/>
+ <val o="1f2566" v="11.357"/>
+ <val o="1f3376" v="13.909"/>
+ <val o="1f4187" v="20.778"/>
+ <val o="1f4f96" v="17.384"/>
+ <val o="1f5da7" v="17.882"/>
+ <val o="1f6bb6" v="17.779"/>
+ <val o="1f79c7" v="15.628"/>
+ <val o="1f87d6" v="18.718"/>
+ <val o="1f95e7" v="19.687"/>
+ <val o="1fa401" v="15.856"/>
+ <val o="1fb204" v="14.235"/>
+ <val o="1fc016" v="14.121"/>
+ <val o="1fce25" v="10.417"/>
+ <val o="1fdc35" v="10.192"/>
+ <val o="1fea45" v="10.247"/>
+ <val o="1ff855" v="12.409"/>
+ <val o="200665" v="18.782"/>
+ <val o="201475" v="17.709"/>
+ <val o="202286" v="24.468"/>
+ <val o="203095" v="27.895"/>
+ <val o="203ea5" v="31.135"/>
+ <val o="204cb6" v="28.073"/>
+ <val o="205ac6" v="26.781"/>
+ <val o="2068d6" v="27.955"/>
+ <val o="2076e6" v="31.834"/>
+ <val o="2084f6" v="30.684"/>
+ <val o="209306" v="33.239"/>
+ <val o="20a116" v="31.592"/>
+ <val o="20af26" v="27.051"/>
+ <val o="20bd37" v="26.891"/>
+ <val o="20cb46" v="22.834"/>
+ <val o="20d957" v="21.1"/>
+ <val o="20e767" v="20.723"/>
+ <val o="20f581" v="20.412"/>
+ <val o="210386" v="17.178"/>
+ <val o="211194" v="14.845"/>
+ <val o="211fa5" v="14.404"/>
+ <val o="212db5" v="13.895"/>
+ <val o="213bc5" v="14.291"/>
+ <val o="2149d6" v="18.376"/>
+ <val o="2157e5" v="22.682"/>
+ <val o="2165f6" v="29.056"/>
+ <val o="217406" v="30.985"/>
+ <val o="218217" v="31.244"/>
+ <val o="219026" v="30.501"/>
+ <val o="219e39" v="30.757"/>
+ <val o="21ac46" v="29.766"/>
+ <val o="21ba57" v="29.686"/>
+ <val o="21c867" v="30.47"/>
+ <val o="21d677" v="31.06"/>
+ <val o="21e487" v="28.958"/>
+ <val o="21f296" v="28.474"/>
+ <val o="2200a6" v="27.753"/>
+ <val o="220eb7" v="26.676"/>
+ <val o="221cc6" v="24.07"/>
+ <val o="222ad7" v="18.889"/>
+ <val o="2238e7" v="17.556"/>
+ <val o="224701" v="16.434"/>
+ <val o="225505" v="18.47"/>
+ <val o="226315" v="9.837"/>
+ <val o="227125" v="9.73"/>
+ <val o="227f35" v="12.672"/>
+ <val o="228d45" v="17.29"/>
+ <val o="229b54" v="17.161"/>
+ <val o="22a965" v="19.388"/>
+ <val o="22b776" v="22.792"/>
+ <val o="22c586" v="25.973"/>
+ <val o="22d397" v="28.305"/>
+ <val o="22e1a6" v="28.475"/>
+ <val o="22efb6" v="23.531"/>
+ <val o="22fdc7" v="22.62"/>
+ <val o="230bd7" v="22.13"/>
+ <val o="2319e6" v="27.159"/>
+ <val o="2327f6" v="27.705"/>
+ <val o="23361b" v="29.796"/>
+ <val o="234416" v="27.341"/>
+ <val o="235226" v="25.887"/>
+ <val o="236037" v="25.842"/>
+ <val o="236e46" v="23.266"/>
+ <val o="237c57" v="21.664"/>
+ <val o="238a66" v="19.437"/>
+ <val o="239881" v="15.912"/>
+ <val o="23a685" v="16.037"/>
+ <val o="23b495" v="15.674"/>
+ <val o="23c2a4" v="13.705"/>
+ <val o="23d0b5" v="14.331"/>
+ <val o="23dec4" v="15.781"/>
+ <val o="23ecd5" v="18.196"/>
+ <val o="23fae4" v="22.115"/>
+ <val o="2408f6" v="26.066"/>
+ <val o="241706" v="34.813"/>
+ <val o="242518" v="35.914"/>
+ <val o="243325" v="36.775"/>
+ <val o="244137" v="34.277"/>
+ <val o="244f46" v="32.056"/>
+ <val o="246b66" v="33.001"/>
+ <val o="247976" v="31.687"/>
+ <val o="248786" v="36.854"/>
+ <val o="24957e" v="30.428"/>
+ <val o="24a38f" v="28.246"/>
+ <val o="24b19c" v="28.984"/>
+ <val o="24bfac" v="27.176"/>
+ <val o="24cdbc" v="26.455"/>
+ <val o="24dbcd" v="21.891"/>
+ <val o="24e9e5" v="20.073"/>
+ <val o="24f808" v="17.083"/>
+ <val o="250616" v="17.921"/>
+ <val o="251426" v="17.972"/>
+ <val o="252236" v="16.1"/>
+ <val o="253047" v="17.324"/>
+ <val o="253e56" v="20.97"/>
+ <val o="254c67" v="21.269"/>
+ <val o="255a76" v="25.041"/>
+ <val o="256887" v="31.27"/>
+ <val o="257697" v="33.712"/>
+ <val o="2584a8" v="82.744"/>
+ <val o="2592b6" v="46.746"/>
+ <val o="25a0c7" v="22.903"/>
+ <val o="25aed7" v="31.343"/>
+ <val o="25bce7" v="30.438"/>
+ <val o="25caf8" v="28.883"/>
+ <val o="25d907" v="30.794"/>
+ <val o="25e718" v="31.011"/>
+ <val o="25f527" v="28.098"/>
+ <val o="260338" v="27.177"/>
+ <val o="261149" v="24.941"/>
+ <val o="261f59" v="22.834"/>
+ <val o="262d68" v="23.209"/>
+ <val o="263b83" v="17.56"/>
+ <val o="264986" v="17.555"/>
+ <val o="265795" v="18.761"/>
+ <val o="2665a6" v="20.698"/>
+ <val o="2673b5" v="19.372"/>
+ <val o="2681c6" v="18.644"/>
+ <val o="268fd5" v="18.792"/>
+ <val o="269de6" v="18.951"/>
+ <val o="26abf6" v="18.907"/>
+ <val o="26ba06" v="23.409"/>
+ <val o="26c817" v="23.511"/>
+ <val o="26d62b" v="26.941"/>
+ <val o="26e436" v="24.008"/>
+ <val o="26f247" v="23.147"/>
+ <val o="270057" v="23.935"/>
+ <val o="270e67" v="24"/>
+ <val o="271c77" v="22.888"/>
+ <val o="272a87" v="26.246"/>
+ <val o="273897" v="25.909"/>
+ <val o="2746a8" v="25.109"/>
+ <val o="2754b9" v="24.725"/>
+ <val o="2762c7" v="23.755"/>
+ <val o="2770d8" v="18.839"/>
+ <val o="277ee7" v="15.362"/>
+ </par>
+ <par memind="8608" h="3dc1a8de">
+ <val o="0" v="0"/>
+ <val o="e08" v="0"/>
+ <val o="1c32" v="0"/>
+ <val o="2a3c" v="0"/>
+ <val o="3835" v="0"/>
+ <val o="4645" v="0"/>
+ <val o="5455" v="0"/>
+ <val o="6265" v="0"/>
+ <val o="7075" v="0"/>
+ <val o="7e85" v="0"/>
+ <val o="8c96" v="0"/>
+ <val o="9aa5" v="0"/>
+ <val o="a8b6" v="0"/>
+ <val o="b6c5" v="0"/>
+ <val o="c4d7" v="0"/>
+ <val o="d30b" v="0"/>
+ <val o="e0f6" v="0"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="0"/>
+ <val o="11937" v="0"/>
+ <val o="12746" v="0"/>
+ <val o="13556" v="0"/>
+ <val o="14366" v="0"/>
+ <val o="15181" v="0"/>
+ <val o="15f85" v="0"/>
+ <val o="16d95" v="0"/>
+ <val o="17ba4" v="0"/>
+ <val o="189b5" v="0"/>
+ <val o="197c4" v="0"/>
+ <val o="1a5d5" v="0"/>
+ <val o="1b3e6" v="0"/>
+ <val o="1c1f6" v="0"/>
+ <val o="1d005" v="0"/>
+ <val o="1de15" v="0"/>
+ <val o="1ec25" v="0"/>
+ <val o="1fa36" v="0"/>
+ <val o="20845" v="0"/>
+ <val o="21656" v="0"/>
+ <val o="22465" v="0"/>
+ <val o="23276" v="0"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="0"/>
+ <val o="25ca7" v="0"/>
+ <val o="26ab7" v="0"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="0"/>
+ <val o="294e6" v="0"/>
+ <val o="2a301" v="0"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="0"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="0"/>
+ <val o="31375" v="0"/>
+ <val o="3219e" v="0"/>
+ <val o="32f96" v="0"/>
+ <val o="33da6" v="0"/>
+ <val o="34bb6" v="0"/>
+ <val o="359de" v="0"/>
+ <val o="367d6" v="0"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="0"/>
+ <val o="3bc36" v="0"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="0"/>
+ <val o="3e667" v="0"/>
+ <val o="3f481" v="0"/>
+ <val o="40285" v="0"/>
+ <val o="41095" v="0"/>
+ <val o="41ea5" v="0"/>
+ <val o="42cb5" v="0"/>
+ <val o="43ac5" v="0"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="0"/>
+ <val o="464f5" v="0"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="0"/>
+ <val o="54600" v="0"/>
+ <val o="55406" v="0"/>
+ <val o="56215" v="0"/>
+ <val o="57026" v="0"/>
+ <val o="57e36" v="0"/>
+ <val o="58c46" v="0"/>
+ <val o="59a70" v="0"/>
+ <val o="5a867" v="0"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="0"/>
+ <val o="5eeb8" v="0"/>
+ <val o="5fcc6" v="0"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="0"/>
+ <val o="65f37" v="0"/>
+ <val o="66d46" v="0"/>
+ <val o="67b57" v="0"/>
+ <val o="68967" v="0"/>
+ <val o="69782" v="0"/>
+ <val o="6a586" v="0"/>
+ <val o="6b395" v="0"/>
+ <val o="6c1a6" v="0"/>
+ <val o="6cfb5" v="0"/>
+ <val o="6ddc6" v="0"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="0"/>
+ <val o="707f6" v="0"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="0"/>
+ <val o="74e47" v="0"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="0"/>
+ <val o="7bebf" v="0"/>
+ <val o="7cccf" v="0"/>
+ <val o="7dadf" v="0"/>
+ <val o="7e8fa" v="0"/>
+ <val o="7f70a" v="0"/>
+ <val o="8051a" v="0"/>
+ <val o="8132a" v="0"/>
+ <val o="8213a" v="0"/>
+ <val o="82f4a" v="0"/>
+ <val o="83d5a" v="0"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="0"/>
+ <val o="891bb" v="0"/>
+ <val o="89fca" v="0"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="0"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="0"/>
+ <val o="93a84" v="0"/>
+ <val o="94885" v="0"/>
+ <val o="95694" v="0"/>
+ <val o="964a5" v="0"/>
+ <val o="972b4" v="0"/>
+ <val o="980c5" v="0"/>
+ <val o="98ed4" v="0"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="0"/>
+ <val o="9c716" v="0"/>
+ <val o="9d526" v="0"/>
+ <val o="9e336" v="0"/>
+ <val o="9f145" v="0"/>
+ <val o="9ff56" v="0"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="0"/>
+ <val o="a2986" v="0"/>
+ <val o="a3795" v="0"/>
+ <val o="a45a7" v="0"/>
+ <val o="a53b6" v="0"/>
+ <val o="a61c7" v="0"/>
+ <val o="a6fd6" v="0"/>
+ <val o="a7e00" v="0"/>
+ <val o="a8c00" v="0"/>
+ <val o="a9a05" v="0"/>
+ <val o="aa815" v="0"/>
+ <val o="ab625" v="0"/>
+ <val o="ac435" v="0"/>
+ <val o="ad245" v="0"/>
+ <val o="ae055" v="0"/>
+ <val o="aee65" v="0"/>
+ <val o="afc75" v="0"/>
+ <val o="b0a85" v="0"/>
+ <val o="b26a6" v="0"/>
+ <val o="b34b6" v="0"/>
+ <val o="b42c6" v="0"/>
+ <val o="b50d6" v="0"/>
+ <val o="b5ee7" v="0"/>
+ <val o="b6cf6" v="0"/>
+ <val o="b7b07" v="0"/>
+ <val o="b8917" v="0"/>
+ <val o="b9728" v="0"/>
+ <val o="ba537" v="0"/>
+ <val o="bb347" v="0"/>
+ <val o="bc157" v="0"/>
+ <val o="bcf67" v="0"/>
+ <val o="bdd81" v="0"/>
+ <val o="beb86" v="0"/>
+ <val o="bf995" v="0"/>
+ <val o="c07a6" v="0"/>
+ <val o="c15b5" v="0"/>
+ <val o="c23c6" v="0"/>
+ <val o="c31d5" v="0"/>
+ <val o="c3fe6" v="0"/>
+ <val o="c4df5" v="0"/>
+ <val o="c5c06" v="0"/>
+ <val o="c6a16" v="0"/>
+ <val o="c7826" v="0"/>
+ <val o="c8636" v="0"/>
+ <val o="c9446" v="0"/>
+ <val o="ca256" v="0"/>
+ <val o="cb066" v="0"/>
+ <val o="cbe76" v="0"/>
+ <val o="ccc87" v="0"/>
+ <val o="cda96" v="0"/>
+ <val o="ce8a8" v="0"/>
+ <val o="cf6b7" v="0"/>
+ <val o="d04c8" v="0"/>
+ <val o="d12d7" v="0"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="0"/>
+ <val o="d3d05" v="0"/>
+ <val o="d4b15" v="0"/>
+ <val o="d5926" v="0"/>
+ <val o="d6735" v="0"/>
+ <val o="d7546" v="0"/>
+ <val o="d8355" v="0"/>
+ <val o="d9166" v="0"/>
+ <val o="d9f75" v="0"/>
+ <val o="dad87" v="0"/>
+ <val o="dbb97" v="0"/>
+ <val o="dc9a8" v="0"/>
+ <val o="dd7b7" v="0"/>
+ <val o="de5c6" v="0"/>
+ <val o="df3d7" v="0"/>
+ <val o="e01d7" v="0"/>
+ <val o="e0fe5" v="0"/>
+ <val o="e1df5" v="0"/>
+ <val o="e2c04" v="0"/>
+ <val o="e3a14" v="0"/>
+ <val o="e4824" v="0"/>
+ <val o="e5634" v="0"/>
+ <val o="e6444" v="0"/>
+ <val o="e7255" v="0"/>
+ <val o="e806f" v="0"/>
+ <val o="e8e7f" v="0"/>
+ <val o="e9c8e" v="0"/>
+ <val o="eaa9f" v="0"/>
+ <val o="eb8ae" v="0"/>
+ <val o="ec6bf" v="0"/>
+ <val o="ed4ce" v="0"/>
+ <val o="ee2df" v="0"/>
+ <val o="ef0ef" v="0"/>
+ <val o="eff01" v="0"/>
+ <val o="f0d10" v="0"/>
+ <val o="f1b20" v="0"/>
+ <val o="f2930" v="0"/>
+ <val o="f3740" v="0"/>
+ <val o="f4551" v="0"/>
+ <val o="f5361" v="0"/>
+ <val o="f6172" v="0"/>
+ <val o="f6f80" v="0"/>
+ <val o="f7d91" v="0"/>
+ <val o="f8ba1" v="0"/>
+ <val o="f99b1" v="0"/>
+ <val o="fa7c0" v="0"/>
+ <val o="fb5d1" v="0"/>
+ <val o="fc3e0" v="0"/>
+ <val o="fd1fb" v="0"/>
+ <val o="fe00b" v="0"/>
+ <val o="fee1c" v="0"/>
+ <val o="ffc2c" v="0"/>
+ <val o="100a3b" v="0"/>
+ <val o="10184c" v="0"/>
+ <val o="10265b" v="0"/>
+ <val o="10346c" v="0"/>
+ <val o="10427b" v="0"/>
+ <val o="10508d" v="0"/>
+ <val o="105e9d" v="0"/>
+ <val o="106cad" v="0"/>
+ <val o="107abd" v="0"/>
+ <val o="1088cd" v="0"/>
+ <val o="1096de" v="0"/>
+ <val o="10a4ed" v="0"/>
+ <val o="10b2fe" v="0"/>
+ <val o="10c10d" v="0"/>
+ <val o="10cf1e" v="0"/>
+ <val o="10dd2e" v="0"/>
+ <val o="10eb66" v="0"/>
+ <val o="10f94e" v="0"/>
+ <val o="11075e" v="0"/>
+ <val o="11156d" v="0"/>
+ <val o="112388" v="0"/>
+ <val o="113187" v="0"/>
+ <val o="113fb0" v="0"/>
+ <val o="114da6" v="0"/>
+ <val o="115bb6" v="0"/>
+ <val o="1169c6" v="0"/>
+ <val o="1177d6" v="0"/>
+ <val o="1185e8" v="0"/>
+ <val o="1193f7" v="0"/>
+ <val o="11a208" v="0"/>
+ <val o="11b017" v="0"/>
+ <val o="11be2f" v="0"/>
+ <val o="11cc37" v="0"/>
+ <val o="11da47" v="0"/>
+ <val o="11e857" v="0"/>
+ <val o="11f667" v="0"/>
+ <val o="120578" v="0"/>
+ <val o="121386" v="0"/>
+ <val o="122196" v="0"/>
+ <val o="122fa6" v="0"/>
+ <val o="123db5" v="0"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="0"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="0"/>
+ <val o="128305" v="0"/>
+ <val o="129115" v="0"/>
+ <val o="129f25" v="0"/>
+ <val o="12ad35" v="0"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="0"/>
+ <val o="12d766" v="0"/>
+ <val o="12e575" v="0"/>
+ <val o="12f386" v="0"/>
+ <val o="130196" v="0"/>
+ <val o="130fa6" v="0"/>
+ <val o="131db7" v="0"/>
+ <val o="132bc5" v="0"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="0"/>
+ <val o="1774a3" v="0"/>
+ <val o="1782b3" v="0"/>
+ <val o="1790c5" v="0"/>
+ <val o="179ed4" v="0"/>
+ <val o="17ace4" v="0"/>
+ <val o="17bafd" v="0"/>
+ <val o="17c90f" v="0"/>
+ <val o="17d71e" v="0"/>
+ <val o="17e52f" v="0"/>
+ <val o="17f33f" v="0"/>
+ <val o="18014f" v="0"/>
+ <val o="180f5f" v="0"/>
+ <val o="181d6e" v="0"/>
+ <val o="182b7f" v="0"/>
+ <val o="18398f" v="0"/>
+ <val o="1847a1" v="0"/>
+ <val o="1855af" v="0"/>
+ <val o="1863c0" v="0"/>
+ <val o="1871cf" v="0"/>
+ <val o="187fe0" v="0"/>
+ <val o="188def" v="0"/>
+ <val o="189c00" v="0"/>
+ <val o="18b80d" v="0"/>
+ <val o="18c61c" v="0"/>
+ <val o="18d42c" v="0"/>
+ <val o="18e23b" v="0"/>
+ <val o="18f04b" v="0"/>
+ <val o="18fe5e" v="0"/>
+ <val o="190c76" v="0"/>
+ <val o="191a86" v="0"/>
+ <val o="192896" v="0"/>
+ <val o="1936a6" v="0"/>
+ <val o="1944b7" v="0"/>
+ <val o="1952c6" v="0"/>
+ <val o="1960d7" v="0"/>
+ <val o="196ee6" v="0"/>
+ <val o="197cf8" v="0"/>
+ <val o="198b0f" v="0"/>
+ <val o="19991f" v="0"/>
+ <val o="19b541" v="0"/>
+ <val o="19c34d" v="0"/>
+ <val o="19d15e" v="0"/>
+ <val o="19df80" v="0"/>
+ <val o="19ed90" v="0"/>
+ <val o="19eebe" v="0"/>
+ <val o="19fb8e" v="0"/>
+ <val o="1a09a0" v="0"/>
+ <val o="1a17ae" v="0"/>
+ <val o="1a25be" v="0"/>
+ <val o="1a33cd" v="0"/>
+ <val o="1a41dd" v="0"/>
+ <val o="1a4fed" v="0"/>
+ <val o="1a5e08" v="0"/>
+ <val o="1a6c05" v="0"/>
+ <val o="1a7a15" v="0"/>
+ <val o="1a8826" v="0"/>
+ <val o="1a9637" v="0"/>
+ <val o="1aa445" v="0"/>
+ <val o="1ab255" v="0"/>
+ <val o="1ac065" v="0"/>
+ <val o="1ace75" v="0"/>
+ <val o="1adc87" v="0"/>
+ <val o="1aea96" v="0"/>
+ <val o="1af8a7" v="0"/>
+ <val o="1b06b7" v="0"/>
+ <val o="1b14c6" v="0"/>
+ <val o="1c7460" v="0"/>
+ <val o="1c8270" v="0"/>
+ <val o="1c907e" v="0"/>
+ <val o="1c9e8f" v="0"/>
+ <val o="1caca2" v="0"/>
+ <val o="1cbab1" v="0"/>
+ <val o="1cc8c1" v="0"/>
+ <val o="1cd6d0" v="0"/>
+ <val o="1ce4de" v="0"/>
+ <val o="1cf2f0" v="0"/>
+ <val o="1d0109" v="0"/>
+ <val o="1d0f06" v="0"/>
+ <val o="1d1d15" v="0"/>
+ <val o="1d2b25" v="0"/>
+ <val o="1d3935" v="0"/>
+ <val o="1d4745" v="0"/>
+ <val o="1d5555" v="0"/>
+ <val o="1d6366" v="0"/>
+ <val o="1d7175" v="0"/>
+ <val o="1d7f86" v="0"/>
+ <val o="1d8d95" v="0"/>
+ <val o="1d9ba6" v="0"/>
+ <val o="1da9b6" v="0"/>
+ <val o="1db7c7" v="0"/>
+ <val o="1dc5d5" v="0"/>
+ <val o="1dd3e6" v="0"/>
+ <val o="1de1f5" v="0"/>
+ <val o="1df006" v="0"/>
+ <val o="1dfe16" v="0"/>
+ <val o="1e0c26" v="0"/>
+ <val o="1e1a36" v="0"/>
+ <val o="1e2847" v="0"/>
+ <val o="1e3659" v="0"/>
+ <val o="1e4467" v="0"/>
+ <val o="1e5281" v="0"/>
+ <val o="1e6086" v="0"/>
+ <val o="1e6e96" v="0"/>
+ <val o="1e7ca6" v="0"/>
+ <val o="1e8ab5" v="0"/>
+ <val o="1e98c6" v="0"/>
+ <val o="1ea6d5" v="0"/>
+ <val o="1eb4e6" v="0"/>
+ <val o="1ec2f6" v="0"/>
+ <val o="1ed106" v="0"/>
+ <val o="1edf16" v="0"/>
+ <val o="1eed26" v="0"/>
+ <val o="1efb36" v="0"/>
+ <val o="1f0946" v="0"/>
+ <val o="1f1756" v="0"/>
+ <val o="1f2566" v="0"/>
+ <val o="1f3376" v="0"/>
+ <val o="1f4187" v="0"/>
+ <val o="1f4f96" v="0"/>
+ <val o="1f5da7" v="0"/>
+ <val o="1f6bb6" v="0"/>
+ <val o="1f79c7" v="0"/>
+ <val o="1f87d6" v="0"/>
+ <val o="1f95e7" v="0"/>
+ <val o="1fa401" v="0"/>
+ <val o="1fb204" v="0"/>
+ <val o="1fc016" v="0"/>
+ <val o="1fce25" v="0"/>
+ <val o="1fdc35" v="0"/>
+ <val o="1fea45" v="0"/>
+ <val o="1ff855" v="0"/>
+ <val o="200665" v="0"/>
+ <val o="201475" v="0"/>
+ <val o="202286" v="0"/>
+ <val o="203095" v="0"/>
+ <val o="203ea5" v="0"/>
+ <val o="204cb6" v="0"/>
+ <val o="205ac6" v="0"/>
+ <val o="2068d6" v="0"/>
+ <val o="2076e6" v="0"/>
+ <val o="2084f6" v="0"/>
+ <val o="209306" v="0"/>
+ <val o="20a116" v="0"/>
+ <val o="20af26" v="0"/>
+ <val o="20bd37" v="0"/>
+ <val o="20cb46" v="0"/>
+ <val o="20d957" v="0"/>
+ <val o="20e767" v="0"/>
+ <val o="20f581" v="0"/>
+ <val o="210386" v="0"/>
+ <val o="211194" v="0"/>
+ <val o="211fa5" v="0"/>
+ <val o="212db5" v="0"/>
+ <val o="213bc5" v="0"/>
+ <val o="2149d6" v="0"/>
+ <val o="2157e5" v="0"/>
+ <val o="2165f6" v="0"/>
+ <val o="217406" v="0"/>
+ <val o="218217" v="0"/>
+ <val o="219026" v="0"/>
+ <val o="219e39" v="0"/>
+ <val o="21ac46" v="0"/>
+ <val o="21ba57" v="0"/>
+ <val o="21c867" v="0"/>
+ <val o="21d677" v="0"/>
+ <val o="21e487" v="0"/>
+ <val o="21f296" v="0"/>
+ <val o="2200a6" v="0"/>
+ <val o="220eb7" v="0"/>
+ <val o="221cc6" v="0"/>
+ <val o="222ad7" v="0"/>
+ <val o="2238e7" v="0"/>
+ <val o="224701" v="0"/>
+ <val o="225505" v="0"/>
+ <val o="226315" v="0"/>
+ <val o="227125" v="0"/>
+ <val o="227f35" v="0"/>
+ <val o="228d45" v="0"/>
+ <val o="229b54" v="0"/>
+ <val o="22a965" v="0"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="0"/>
+ <val o="22d397" v="0"/>
+ <val o="22e1a6" v="0"/>
+ <val o="22efb6" v="0"/>
+ <val o="22fdc7" v="0"/>
+ <val o="230bd7" v="0"/>
+ <val o="2319e6" v="0"/>
+ <val o="2327f6" v="0"/>
+ <val o="23361b" v="0"/>
+ <val o="234416" v="0"/>
+ <val o="235226" v="0"/>
+ <val o="236037" v="0"/>
+ <val o="236e46" v="0"/>
+ <val o="237c57" v="0"/>
+ <val o="238a66" v="0"/>
+ <val o="239881" v="0"/>
+ <val o="23a685" v="0"/>
+ <val o="23b495" v="0"/>
+ <val o="23c2a4" v="0"/>
+ <val o="23d0b5" v="0"/>
+ <val o="23dec4" v="0"/>
+ <val o="23ecd5" v="0"/>
+ <val o="23fae4" v="0"/>
+ <val o="2408f6" v="0"/>
+ <val o="241706" v="0"/>
+ <val o="242518" v="0"/>
+ <val o="243325" v="0"/>
+ <val o="244137" v="0"/>
+ <val o="244f46" v="0"/>
+ <val o="246b66" v="0"/>
+ <val o="247976" v="0"/>
+ <val o="248786" v="0"/>
+ <val o="24957e" v="0"/>
+ <val o="24a38f" v="0"/>
+ <val o="24b19c" v="0"/>
+ <val o="24bfac" v="0"/>
+ <val o="24cdbc" v="0"/>
+ <val o="24dbcd" v="0"/>
+ <val o="24e9e5" v="0"/>
+ <val o="24f808" v="0"/>
+ <val o="250616" v="0"/>
+ <val o="251426" v="0"/>
+ <val o="252236" v="0"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="0"/>
+ <val o="254c67" v="0"/>
+ <val o="255a76" v="0"/>
+ <val o="256887" v="0"/>
+ <val o="257697" v="0"/>
+ <val o="2584a8" v="0"/>
+ <val o="2592b6" v="0"/>
+ <val o="25a0c7" v="0"/>
+ <val o="25aed7" v="0"/>
+ <val o="25bce7" v="0"/>
+ <val o="25caf8" v="0"/>
+ <val o="25d907" v="0"/>
+ <val o="25e718" v="0"/>
+ <val o="25f527" v="0"/>
+ <val o="260338" v="0"/>
+ <val o="261149" v="0"/>
+ <val o="261f59" v="0"/>
+ <val o="262d68" v="0"/>
+ <val o="263b83" v="0"/>
+ <val o="264986" v="0"/>
+ <val o="265795" v="0"/>
+ <val o="2665a6" v="0"/>
+ <val o="2673b5" v="0"/>
+ <val o="2681c6" v="0"/>
+ <val o="268fd5" v="0"/>
+ <val o="269de6" v="0"/>
+ <val o="26abf6" v="0"/>
+ <val o="26ba06" v="0"/>
+ <val o="26c817" v="0"/>
+ <val o="26d62b" v="0"/>
+ <val o="26e436" v="0"/>
+ <val o="26f247" v="0"/>
+ <val o="270057" v="0"/>
+ <val o="270e67" v="0"/>
+ <val o="271c77" v="0"/>
+ <val o="272a87" v="0"/>
+ <val o="273897" v="0"/>
+ <val o="2746a8" v="0"/>
+ <val o="2754b9" v="0"/>
+ <val o="2762c7" v="0"/>
+ <val o="2770d8" v="0"/>
+ <val o="277ee7" v="0"/>
+ </par>
+ <par memind="8604" h="3dc1a8de">
+ <val o="0" v="21.043"/>
+ <val o="e08" v="20.051"/>
+ <val o="1c32" v="19.818"/>
+ <val o="2a3c" v="19.554"/>
+ <val o="3835" v="18.951"/>
+ <val o="4645" v="18.853"/>
+ <val o="5455" v="22.398"/>
+ <val o="6265" v="24.492"/>
+ <val o="7075" v="29.206"/>
+ <val o="7e85" v="35.063"/>
+ <val o="8c96" v="35.07"/>
+ <val o="9aa5" v="33.585"/>
+ <val o="a8b6" v="30.77"/>
+ <val o="b6c5" v="29.141"/>
+ <val o="c4d7" v="0.061"/>
+ <val o="d30b" v="0.061"/>
+ <val o="e0f6" v="0.06"/>
+ <val o="ef06" v="0.059"/>
+ <val o="fd17" v="0.06"/>
+ <val o="10b27" v="0.062"/>
+ <val o="11937" v="0.063"/>
+ <val o="12746" v="0.061"/>
+ <val o="13556" v="0.062"/>
+ <val o="14366" v="0.066"/>
+ <val o="15181" v="0.07"/>
+ <val o="15f85" v="0.064"/>
+ <val o="16d95" v="0.065"/>
+ <val o="17ba4" v="0.064"/>
+ <val o="189b5" v="0.063"/>
+ <val o="197c4" v="0.064"/>
+ <val o="1a5d5" v="0.066"/>
+ <val o="1b3e6" v="0.067"/>
+ <val o="1c1f6" v="0.066"/>
+ <val o="1d005" v="0.062"/>
+ <val o="1de15" v="0.062"/>
+ <val o="1ec25" v="0.063"/>
+ <val o="1fa36" v="0.066"/>
+ <val o="20845" v="0.066"/>
+ <val o="21656" v="0.066"/>
+ <val o="22465" v="0.064"/>
+ <val o="23276" v="0.063"/>
+ <val o="24086" v="0.061"/>
+ <val o="24e99" v="0.061"/>
+ <val o="25ca7" v="0.062"/>
+ <val o="26ab7" v="0.062"/>
+ <val o="278c6" v="0.061"/>
+ <val o="286d6" v="0.063"/>
+ <val o="294e6" v="0.066"/>
+ <val o="2a301" v="0.067"/>
+ <val o="2b105" v="0.06"/>
+ <val o="2bf15" v="0.061"/>
+ <val o="2cd25" v="0.063"/>
+ <val o="2db35" v="0.062"/>
+ <val o="2e946" v="0.061"/>
+ <val o="2f755" v="0.058"/>
+ <val o="30566" v="0.066"/>
+ <val o="31375" v="0.064"/>
+ <val o="3219e" v="0.066"/>
+ <val o="32f96" v="0.063"/>
+ <val o="33da6" v="0.062"/>
+ <val o="34bb6" v="0.063"/>
+ <val o="359de" v="0.064"/>
+ <val o="367d6" v="0.064"/>
+ <val o="375e6" v="0.062"/>
+ <val o="3840e" v="0.059"/>
+ <val o="3921e" v="0.06"/>
+ <val o="3a016" v="0.06"/>
+ <val o="3ae27" v="0.063"/>
+ <val o="3bc36" v="0.062"/>
+ <val o="3ca47" v="0.059"/>
+ <val o="3d856" v="0.062"/>
+ <val o="3e667" v="0.064"/>
+ <val o="3f481" v="0.068"/>
+ <val o="40285" v="0.065"/>
+ <val o="41095" v="0.066"/>
+ <val o="41ea5" v="0.065"/>
+ <val o="42cb5" v="0.066"/>
+ <val o="43ac5" v="0.064"/>
+ <val o="448d5" v="0.061"/>
+ <val o="456e6" v="0.062"/>
+ <val o="464f5" v="0.062"/>
+ <val o="480ff" v="0.058"/>
+ <val o="48f0e" v="0.056"/>
+ <val o="49d1d" v="0.057"/>
+ <val o="4ab46" v="0.056"/>
+ <val o="4b955" v="0.057"/>
+ <val o="4c769" v="0.055"/>
+ <val o="4d577" v="0.057"/>
+ <val o="4e387" v="0.057"/>
+ <val o="4f196" v="0.057"/>
+ <val o="4ffa6" v="0.058"/>
+ <val o="50dd0" v="0.06"/>
+ <val o="51bc6" v="0.062"/>
+ <val o="529d6" v="0.062"/>
+ <val o="537e7" v="0.065"/>
+ <val o="54600" v="0.067"/>
+ <val o="55406" v="0.065"/>
+ <val o="56215" v="0.065"/>
+ <val o="57026" v="0.065"/>
+ <val o="57e36" v="0.064"/>
+ <val o="58c46" v="0.063"/>
+ <val o="59a70" v="0.063"/>
+ <val o="5a867" v="0.06"/>
+ <val o="5b676" v="0.06"/>
+ <val o="5c487" v="0.056"/>
+ <val o="5d296" v="0.058"/>
+ <val o="5e0a9" v="0.06"/>
+ <val o="5eeb8" v="0.062"/>
+ <val o="5fcc6" v="0.061"/>
+ <val o="60ad7" v="0.057"/>
+ <val o="618e7" v="0.057"/>
+ <val o="626f7" v="0.059"/>
+ <val o="63507" v="0.059"/>
+ <val o="64317" v="0.061"/>
+ <val o="65127" v="0.062"/>
+ <val o="65f37" v="0.063"/>
+ <val o="66d46" v="0.062"/>
+ <val o="67b57" v="0.062"/>
+ <val o="68967" v="0.065"/>
+ <val o="69782" v="0.065"/>
+ <val o="6a586" v="0.064"/>
+ <val o="6b395" v="0.065"/>
+ <val o="6c1a6" v="0.066"/>
+ <val o="6cfb5" v="0.064"/>
+ <val o="6ddc6" v="0.063"/>
+ <val o="6ebd6" v="0.059"/>
+ <val o="6f9e6" v="0.061"/>
+ <val o="707f6" v="0.062"/>
+ <val o="71607" v="0.059"/>
+ <val o="72417" v="0.058"/>
+ <val o="73227" v="0.056"/>
+ <val o="74037" v="0.061"/>
+ <val o="74e47" v="0.061"/>
+ <val o="75c57" v="0.058"/>
+ <val o="76a63" v="0.058"/>
+ <val o="77873" v="0.058"/>
+ <val o="78680" v="0.058"/>
+ <val o="7948f" v="0.058"/>
+ <val o="7a29f" v="0.06"/>
+ <val o="7b0af" v="0.062"/>
+ <val o="7bebf" v="0.062"/>
+ <val o="7cccf" v="0.064"/>
+ <val o="7dadf" v="0.065"/>
+ <val o="7e8fa" v="0.065"/>
+ <val o="7f70a" v="0.067"/>
+ <val o="8051a" v="0.067"/>
+ <val o="8132a" v="0.066"/>
+ <val o="8213a" v="0.066"/>
+ <val o="82f4a" v="0.067"/>
+ <val o="83d5a" v="0.062"/>
+ <val o="84b6a" v="0.06"/>
+ <val o="8597a" v="0.059"/>
+ <val o="8678b" v="0.059"/>
+ <val o="8759b" v="0.057"/>
+ <val o="883ac" v="0.06"/>
+ <val o="891bb" v="0.061"/>
+ <val o="89fca" v="0.06"/>
+ <val o="8adda" v="0.059"/>
+ <val o="8bbeb" v="0.059"/>
+ <val o="8c9fc" v="0.058"/>
+ <val o="8d80b" v="0.058"/>
+ <val o="8e61a" v="0.059"/>
+ <val o="8f42a" v="0.06"/>
+ <val o="9023a" v="0.061"/>
+ <val o="9104a" v="0.062"/>
+ <val o="91e5a" v="0.06"/>
+ <val o="92c6a" v="0.063"/>
+ <val o="93a84" v="0.067"/>
+ <val o="94885" v="0.064"/>
+ <val o="95694" v="0.064"/>
+ <val o="964a5" v="0.065"/>
+ <val o="972b4" v="0.064"/>
+ <val o="980c5" v="0.062"/>
+ <val o="98ed4" v="0.065"/>
+ <val o="99ce5" v="0.064"/>
+ <val o="9aaf5" v="0.061"/>
+ <val o="9b906" v="0.061"/>
+ <val o="9c716" v="0.062"/>
+ <val o="9d526" v="0.062"/>
+ <val o="9e336" v="0.063"/>
+ <val o="9f145" v="0.063"/>
+ <val o="9ff56" v="0.061"/>
+ <val o="a0d65" v="0.061"/>
+ <val o="a1b77" v="30.22"/>
+ <val o="a2986" v="16.054"/>
+ <val o="a3795" v="10.22"/>
+ <val o="a45a7" v="3.839"/>
+ <val o="a53b6" v="3.301"/>
+ <val o="a61c7" v="4.19"/>
+ <val o="a6fd6" v="2.002"/>
+ <val o="a7e00" v="4.911"/>
+ <val o="a8c00" v="7.897"/>
+ <val o="a9a05" v="2.934"/>
+ <val o="aa815" v="1.487"/>
+ <val o="ab625" v="2.196"/>
+ <val o="ac435" v="1.679"/>
+ <val o="ad245" v="5.984"/>
+ <val o="ae055" v="10.661"/>
+ <val o="aee65" v="3.653"/>
+ <val o="afc75" v="7.252"/>
+ <val o="b0a85" v="19.708"/>
+ <val o="b26a6" v="21.128"/>
+ <val o="b34b6" v="18.358"/>
+ <val o="b42c6" v="3.456"/>
+ <val o="b50d6" v="4.916"/>
+ <val o="b5ee7" v="7.337"/>
+ <val o="b6cf6" v="7.205"/>
+ <val o="b7b07" v="9.191"/>
+ <val o="b8917" v="8.027"/>
+ <val o="b9728" v="7.688"/>
+ <val o="ba537" v="8.667"/>
+ <val o="bb347" v="7.734"/>
+ <val o="bc157" v="5.148"/>
+ <val o="bcf67" v="5.081"/>
+ <val o="bdd81" v="18.433"/>
+ <val o="beb86" v="4.676"/>
+ <val o="bf995" v="3.97"/>
+ <val o="c07a6" v="2.247"/>
+ <val o="c15b5" v="2.519"/>
+ <val o="c23c6" v="4.784"/>
+ <val o="c31d5" v="10.406"/>
+ <val o="c3fe6" v="5.863"/>
+ <val o="c4df5" v="9.668"/>
+ <val o="c5c06" v="5.194"/>
+ <val o="c6a16" v="5.35"/>
+ <val o="c7826" v="7.745"/>
+ <val o="c8636" v="3.651"/>
+ <val o="c9446" v="4.236"/>
+ <val o="ca256" v="3.281"/>
+ <val o="cb066" v="5.657"/>
+ <val o="cbe76" v="2.249"/>
+ <val o="ccc87" v="12.004"/>
+ <val o="cda96" v="15.833"/>
+ <val o="ce8a8" v="11.981"/>
+ <val o="cf6b7" v="15.145"/>
+ <val o="d04c8" v="12.386"/>
+ <val o="d12d7" v="8.53"/>
+ <val o="d20e7" v="1.474"/>
+ <val o="d2f02" v="7.441"/>
+ <val o="d3d05" v="4.262"/>
+ <val o="d4b15" v="3.805"/>
+ <val o="d5926" v="3.752"/>
+ <val o="d6735" v="5.538"/>
+ <val o="d7546" v="9.524"/>
+ <val o="d8355" v="1.988"/>
+ <val o="d9166" v="4.159"/>
+ <val o="d9f75" v="9.621"/>
+ <val o="dad87" v="17.704"/>
+ <val o="dbb97" v="19.171"/>
+ <val o="dc9a8" v="19.252"/>
+ <val o="dd7b7" v="14.961"/>
+ <val o="de5c6" v="12.816"/>
+ <val o="df3d7" v="13.113"/>
+ <val o="e01d7" v="13.435"/>
+ <val o="e0fe5" v="13.283"/>
+ <val o="e1df5" v="13.989"/>
+ <val o="e2c04" v="18.098"/>
+ <val o="e3a14" v="17.742"/>
+ <val o="e4824" v="15.229"/>
+ <val o="e5634" v="15.263"/>
+ <val o="e6444" v="11.968"/>
+ <val o="e7255" v="9.893"/>
+ <val o="e806f" v="7.997"/>
+ <val o="e8e7f" v="13.888"/>
+ <val o="e9c8e" v="6.336"/>
+ <val o="eaa9f" v="5.634"/>
+ <val o="eb8ae" v="7.369"/>
+ <val o="ec6bf" v="14.276"/>
+ <val o="ed4ce" v="9.674"/>
+ <val o="ee2df" v="12.81"/>
+ <val o="ef0ef" v="14.985"/>
+ <val o="eff01" v="21.531"/>
+ <val o="f0d10" v="21.038"/>
+ <val o="f1b20" v="22.908"/>
+ <val o="f2930" v="20.891"/>
+ <val o="f3740" v="22.234"/>
+ <val o="f4551" v="22.517"/>
+ <val o="f5361" v="24.172"/>
+ <val o="f6172" v="23.008"/>
+ <val o="f6f80" v="23.475"/>
+ <val o="f7d91" v="22.059"/>
+ <val o="f8ba1" v="18.671"/>
+ <val o="f99b1" v="18.447"/>
+ <val o="fa7c0" v="15.862"/>
+ <val o="fb5d1" v="16.38"/>
+ <val o="fc3e0" v="15.165"/>
+ <val o="fd1fb" v="12.335"/>
+ <val o="fe00b" v="12.283"/>
+ <val o="fee1c" v="8.941"/>
+ <val o="ffc2c" v="8.837"/>
+ <val o="100a3b" v="8.793"/>
+ <val o="10184c" v="10.043"/>
+ <val o="10265b" v="13.932"/>
+ <val o="10346c" v="15.974"/>
+ <val o="10427b" v="19.167"/>
+ <val o="10508d" v="22.237"/>
+ <val o="105e9d" v="21.533"/>
+ <val o="106cad" v="23.309"/>
+ <val o="107abd" v="20.333"/>
+ <val o="1088cd" v="18.556"/>
+ <val o="1096de" v="20.163"/>
+ <val o="10a4ed" v="19.978"/>
+ <val o="10b2fe" v="21.155"/>
+ <val o="10c10d" v="23.964"/>
+ <val o="10cf1e" v="21.874"/>
+ <val o="10dd2e" v="19.591"/>
+ <val o="10eb66" v="20.234"/>
+ <val o="10f94e" v="17.32"/>
+ <val o="11075e" v="16.556"/>
+ <val o="11156d" v="13.217"/>
+ <val o="112388" v="12.271"/>
+ <val o="113187" v="8.967"/>
+ <val o="113fb0" v="8.319"/>
+ <val o="114da6" v="8.357"/>
+ <val o="115bb6" v="8.49"/>
+ <val o="1169c6" v="10.458"/>
+ <val o="1177d6" v="13.998"/>
+ <val o="1185e8" v="15.461"/>
+ <val o="1193f7" v="18.331"/>
+ <val o="11a208" v="22.284"/>
+ <val o="11b017" v="19.151"/>
+ <val o="11be2f" v="23.464"/>
+ <val o="11cc37" v="20.211"/>
+ <val o="11da47" v="19.83"/>
+ <val o="11e857" v="20.8"/>
+ <val o="11f667" v="18.042"/>
+ <val o="120578" v="0.018"/>
+ <val o="121386" v="0.02"/>
+ <val o="122196" v="0.02"/>
+ <val o="122fa6" v="0.017"/>
+ <val o="123db5" v="0.015"/>
+ <val o="124bc5" v="0.014"/>
+ <val o="1259d5" v="0.011"/>
+ <val o="1267e4" v="0.01"/>
+ <val o="127600" v="0.009"/>
+ <val o="128305" v="0.008"/>
+ <val o="129115" v="0.008"/>
+ <val o="129f25" v="0.008"/>
+ <val o="12ad35" v="0.007"/>
+ <val o="12bb45" v="0.007"/>
+ <val o="12c954" v="0.01"/>
+ <val o="12d766" v="0.011"/>
+ <val o="12e575" v="0.016"/>
+ <val o="12f386" v="0.013"/>
+ <val o="130196" v="0.019"/>
+ <val o="130fa6" v="0.014"/>
+ <val o="131db7" v="0.015"/>
+ <val o="132bc5" v="0.015"/>
+ <val o="1339d4" v="0.269"/>
+ <val o="1347e5" v="0.124"/>
+ <val o="1355f4" v="0.16"/>
+ <val o="136404" v="0.227"/>
+ <val o="137214" v="0.243"/>
+ <val o="138024" v="0.236"/>
+ <val o="138e33" v="0.239"/>
+ <val o="139c44" v="0.074"/>
+ <val o="13aa54" v="0.086"/>
+ <val o="13b865" v="0.031"/>
+ <val o="13c67e" v="0.412"/>
+ <val o="13d48e" v="0.199"/>
+ <val o="13e29e" v="0.15"/>
+ <val o="13f0ae" v="0.14"/>
+ <val o="13febf" v="0.218"/>
+ <val o="140ccf" v="0.309"/>
+ <val o="141adf" v="0.206"/>
+ <val o="1428ef" v="0.032"/>
+ <val o="1436ff" v="0.065"/>
+ <val o="14450f" v="0.054"/>
+ <val o="14531f" v="0.037"/>
+ <val o="146130" v="0.025"/>
+ <val o="146f40" v="0.09"/>
+ <val o="147d44" v="0.03"/>
+ <val o="148b57" v="0.038"/>
+ <val o="149965" v="0.026"/>
+ <val o="14a775" v="0.109"/>
+ <val o="14b584" v="0.086"/>
+ <val o="14c397" v="0.251"/>
+ <val o="14d1a4" v="0.225"/>
+ <val o="14dfb6" v="0.193"/>
+ <val o="14edc5" v="0.103"/>
+ <val o="14fbd5" v="0.044"/>
+ <val o="1509e5" v="0.023"/>
+ <val o="1517ff" v="0.068"/>
+ <val o="152605" v="0.157"/>
+ <val o="153415" v="0.105"/>
+ <val o="154225" v="0.097"/>
+ <val o="155035" v="0.127"/>
+ <val o="155e45" v="0.189"/>
+ <val o="156c55" v="0.281"/>
+ <val o="157a65" v="0.162"/>
+ <val o="158875" v="0.15"/>
+ <val o="159686" v="0.246"/>
+ <val o="15a495" v="0.211"/>
+ <val o="15b2a6" v="0.188"/>
+ <val o="15c0b6" v="0.105"/>
+ <val o="15cec6" v="0.092"/>
+ <val o="15dcd5" v="0.099"/>
+ <val o="15eae6" v="0.112"/>
+ <val o="15f8f5" v="0.29"/>
+ <val o="160706" v="0.06"/>
+ <val o="161517" v="0.107"/>
+ <val o="162326" v="0.072"/>
+ <val o="163137" v="0.064"/>
+ <val o="163f46" v="0.101"/>
+ <val o="164d57" v="0.045"/>
+ <val o="165b67" v="0.035"/>
+ <val o="166982" v="0.057"/>
+ <val o="167786" v="0.07"/>
+ <val o="168596" v="0.035"/>
+ <val o="1693a6" v="0.029"/>
+ <val o="16a1b5" v="0.026"/>
+ <val o="16afc6" v="0.075"/>
+ <val o="16bdd5" v="0.178"/>
+ <val o="16cbe6" v="0.221"/>
+ <val o="16d9f6" v="0.109"/>
+ <val o="16e807" v="0.578"/>
+ <val o="16f616" v="0.633"/>
+ <val o="170429" v="0.678"/>
+ <val o="171236" v="0.456"/>
+ <val o="172047" v="0.461"/>
+ <val o="172e57" v="0.475"/>
+ <val o="173c67" v="0.487"/>
+ <val o="174a77" v="0.565"/>
+ <val o="175887" v="0.597"/>
+ <val o="176694" v="34.372"/>
+ <val o="1774a3" v="33.056"/>
+ <val o="1782b3" v="34.198"/>
+ <val o="1790c5" v="31.148"/>
+ <val o="179ed4" v="26.734"/>
+ <val o="17ace4" v="26.883"/>
+ <val o="17bafd" v="28.046"/>
+ <val o="17c90f" v="25.107"/>
+ <val o="17d71e" v="24.826"/>
+ <val o="17e52f" v="25.129"/>
+ <val o="17f33f" v="22.979"/>
+ <val o="18014f" v="22.968"/>
+ <val o="180f5f" v="28.04"/>
+ <val o="181d6e" v="30.608"/>
+ <val o="182b7f" v="35.156"/>
+ <val o="18398f" v="61.079"/>
+ <val o="1847a1" v="61.118"/>
+ <val o="1855af" v="58.214"/>
+ <val o="1863c0" v="54.149"/>
+ <val o="1871cf" v="56.141"/>
+ <val o="187fe0" v="53.757"/>
+ <val o="188def" v="57.188"/>
+ <val o="189c00" v="53.596"/>
+ <val o="18b80d" v="36.269"/>
+ <val o="18c61c" v="36.626"/>
+ <val o="18d42c" v="35.102"/>
+ <val o="18e23b" v="29.855"/>
+ <val o="18f04b" v="28.307"/>
+ <val o="18fe5e" v="25.364"/>
+ <val o="190c76" v="19.996"/>
+ <val o="191a86" v="19.748"/>
+ <val o="192896" v="19.345"/>
+ <val o="1936a6" v="18.873"/>
+ <val o="1944b7" v="18.11"/>
+ <val o="1952c6" v="20.032"/>
+ <val o="1960d7" v="25.137"/>
+ <val o="196ee6" v="27.508"/>
+ <val o="197cf8" v="29.449"/>
+ <val o="198b0f" v="27.372"/>
+ <val o="19991f" v="30.562"/>
+ <val o="19b541" v="29.963"/>
+ <val o="19c34d" v="28.336"/>
+ <val o="19d15e" v="28.102"/>
+ <val o="19df80" v="28.864"/>
+ <val o="19ed90" v="28.278"/>
+ <val o="19eebe" v="28.399"/>
+ <val o="19fb8e" v="11.016"/>
+ <val o="1a09a0" v="14.155"/>
+ <val o="1a17ae" v="19.132"/>
+ <val o="1a25be" v="20.28"/>
+ <val o="1a33cd" v="11.28"/>
+ <val o="1a41dd" v="12.25"/>
+ <val o="1a4fed" v="16.561"/>
+ <val o="1a5e08" v="15.15"/>
+ <val o="1a6c05" v="9.953"/>
+ <val o="1a7a15" v="12.732"/>
+ <val o="1a8826" v="12.958"/>
+ <val o="1a9637" v="9.685"/>
+ <val o="1aa445" v="6.805"/>
+ <val o="1ab255" v="4.559"/>
+ <val o="1ac065" v="10.632"/>
+ <val o="1ace75" v="14.64"/>
+ <val o="1adc87" v="14.182"/>
+ <val o="1aea96" v="13.717"/>
+ <val o="1af8a7" v="15.071"/>
+ <val o="1b06b7" v="13.236"/>
+ <val o="1b14c6" v="12.746"/>
+ <val o="1c7460" v="3.999"/>
+ <val o="1c8270" v="2.186"/>
+ <val o="1c907e" v="16.585"/>
+ <val o="1c9e8f" v="14.378"/>
+ <val o="1caca2" v="16.041"/>
+ <val o="1cbab1" v="15.799"/>
+ <val o="1cc8c1" v="29.25"/>
+ <val o="1cd6d0" v="27.621"/>
+ <val o="1ce4de" v="25.453"/>
+ <val o="1cf2f0" v="24.369"/>
+ <val o="1d0109" v="25.348"/>
+ <val o="1d0f06" v="28.687"/>
+ <val o="1d1d15" v="28.373"/>
+ <val o="1d2b25" v="28.801"/>
+ <val o="1d3935" v="30.045"/>
+ <val o="1d4745" v="30.644"/>
+ <val o="1d5555" v="30.354"/>
+ <val o="1d6366" v="24.933"/>
+ <val o="1d7175" v="23.813"/>
+ <val o="1d7f86" v="23.818"/>
+ <val o="1d8d95" v="15.153"/>
+ <val o="1d9ba6" v="16.69"/>
+ <val o="1da9b6" v="16.385"/>
+ <val o="1db7c7" v="15.643"/>
+ <val o="1dc5d5" v="16.269"/>
+ <val o="1dd3e6" v="16.689"/>
+ <val o="1de1f5" v="27.897"/>
+ <val o="1df006" v="31.449"/>
+ <val o="1dfe16" v="31.232"/>
+ <val o="1e0c26" v="32.001"/>
+ <val o="1e1a36" v="31.999"/>
+ <val o="1e2847" v="30.669"/>
+ <val o="1e3659" v="29.185"/>
+ <val o="1e4467" v="27.199"/>
+ <val o="1e5281" v="23.798"/>
+ <val o="1e6086" v="23.566"/>
+ <val o="1e6e96" v="23.035"/>
+ <val o="1e7ca6" v="8.573"/>
+ <val o="1e8ab5" v="7.913"/>
+ <val o="1e98c6" v="7.851"/>
+ <val o="1ea6d5" v="9.845"/>
+ <val o="1eb4e6" v="10.177"/>
+ <val o="1ec2f6" v="11.732"/>
+ <val o="1ed106" v="11.554"/>
+ <val o="1edf16" v="12.067"/>
+ <val o="1eed26" v="11.725"/>
+ <val o="1efb36" v="11.465"/>
+ <val o="1f0946" v="10.851"/>
+ <val o="1f1756" v="10.928"/>
+ <val o="1f2566" v="10.984"/>
+ <val o="1f3376" v="13.626"/>
+ <val o="1f4187" v="19.399"/>
+ <val o="1f4f96" v="16.326"/>
+ <val o="1f5da7" v="15.848"/>
+ <val o="1f6bb6" v="15.785"/>
+ <val o="1f79c7" v="14.319"/>
+ <val o="1f87d6" v="15.77"/>
+ <val o="1f95e7" v="16.295"/>
+ <val o="1fa401" v="13.382"/>
+ <val o="1fb204" v="11.752"/>
+ <val o="1fc016" v="11.694"/>
+ <val o="1fce25" v="9.24"/>
+ <val o="1fdc35" v="8.969"/>
+ <val o="1fea45" v="9.42"/>
+ <val o="1ff855" v="11.299"/>
+ <val o="200665" v="18.06"/>
+ <val o="201475" v="15.989"/>
+ <val o="202286" v="23.363"/>
+ <val o="203095" v="26.071"/>
+ <val o="203ea5" v="29.283"/>
+ <val o="204cb6" v="25.856"/>
+ <val o="205ac6" v="25.235"/>
+ <val o="2068d6" v="26.405"/>
+ <val o="2076e6" v="30.076"/>
+ <val o="2084f6" v="28.433"/>
+ <val o="209306" v="30.271"/>
+ <val o="20a116" v="28.557"/>
+ <val o="20af26" v="24.542"/>
+ <val o="20bd37" v="23.962"/>
+ <val o="20cb46" v="21.242"/>
+ <val o="20d957" v="19.633"/>
+ <val o="20e767" v="18.009"/>
+ <val o="20f581" v="17.798"/>
+ <val o="210386" v="15.304"/>
+ <val o="211194" v="13.453"/>
+ <val o="211fa5" v="13.055"/>
+ <val o="212db5" v="12.872"/>
+ <val o="213bc5" v="13.544"/>
+ <val o="2149d6" v="17.25"/>
+ <val o="2157e5" v="21.046"/>
+ <val o="2165f6" v="25.832"/>
+ <val o="217406" v="27.791"/>
+ <val o="218217" v="28.054"/>
+ <val o="219026" v="27.63"/>
+ <val o="219e39" v="28.457"/>
+ <val o="21ac46" v="27.725"/>
+ <val o="21ba57" v="27.922"/>
+ <val o="21c867" v="28.25"/>
+ <val o="21d677" v="27.539"/>
+ <val o="21e487" v="26.251"/>
+ <val o="21f296" v="25.947"/>
+ <val o="2200a6" v="24.671"/>
+ <val o="220eb7" v="24.383"/>
+ <val o="221cc6" v="22.742"/>
+ <val o="222ad7" v="17.742"/>
+ <val o="2238e7" v="16.117"/>
+ <val o="224701" v="14.548"/>
+ <val o="225505" v="18.418"/>
+ <val o="226315" v="10.147"/>
+ <val o="227125" v="10.648"/>
+ <val o="227f35" v="13.062"/>
+ <val o="228d45" v="17.082"/>
+ <val o="229b54" v="15.723"/>
+ <val o="22a965" v="17.627"/>
+ <val o="22b776" v="21.083"/>
+ <val o="22c586" v="24.293"/>
+ <val o="22d397" v="26.823"/>
+ <val o="22e1a6" v="27.04"/>
+ <val o="22efb6" v="22.091"/>
+ <val o="22fdc7" v="21.514"/>
+ <val o="230bd7" v="20.922"/>
+ <val o="2319e6" v="25.061"/>
+ <val o="2327f6" v="25.959"/>
+ <val o="23361b" v="27.644"/>
+ <val o="234416" v="25.578"/>
+ <val o="235226" v="24.199"/>
+ <val o="236037" v="23.83"/>
+ <val o="236e46" v="22.719"/>
+ <val o="237c57" v="20.952"/>
+ <val o="238a66" v="18.382"/>
+ <val o="239881" v="14.928"/>
+ <val o="23a685" v="14.859"/>
+ <val o="23b495" v="14.081"/>
+ <val o="23c2a4" v="13.309"/>
+ <val o="23d0b5" v="13.726"/>
+ <val o="23dec4" v="15.071"/>
+ <val o="23ecd5" v="17.064"/>
+ <val o="23fae4" v="20.612"/>
+ <val o="2408f6" v="24.891"/>
+ <val o="241706" v="32.942"/>
+ <val o="242518" v="34.247"/>
+ <val o="243325" v="34.787"/>
+ <val o="244137" v="31.176"/>
+ <val o="244f46" v="29.806"/>
+ <val o="246b66" v="30.569"/>
+ <val o="247976" v="29.175"/>
+ <val o="248786" v="34.921"/>
+ <val o="24957e" v="28.767"/>
+ <val o="24a38f" v="25.797"/>
+ <val o="24b19c" v="26.161"/>
+ <val o="24bfac" v="24.769"/>
+ <val o="24cdbc" v="24.053"/>
+ <val o="24dbcd" v="20.28"/>
+ <val o="24e9e5" v="18.22"/>
+ <val o="24f808" v="15.345"/>
+ <val o="250616" v="15.953"/>
+ <val o="251426" v="15.884"/>
+ <val o="252236" v="15.054"/>
+ <val o="253047" v="16.014"/>
+ <val o="253e56" v="19.574"/>
+ <val o="254c67" v="20.065"/>
+ <val o="255a76" v="23.936"/>
+ <val o="256887" v="29.274"/>
+ <val o="257697" v="31.691"/>
+ <val o="2584a8" v="75.154"/>
+ <val o="2592b6" v="41.458"/>
+ <val o="25a0c7" v="21.221"/>
+ <val o="25aed7" v="29.417"/>
+ <val o="25bce7" v="28.597"/>
+ <val o="25caf8" v="27.256"/>
+ <val o="25d907" v="28.925"/>
+ <val o="25e718" v="29.38"/>
+ <val o="25f527" v="26.559"/>
+ <val o="260338" v="25.234"/>
+ <val o="261149" v="23.312"/>
+ <val o="261f59" v="21.317"/>
+ <val o="262d68" v="20.761"/>
+ <val o="263b83" v="16.36"/>
+ <val o="264986" v="15.657"/>
+ <val o="265795" v="16.618"/>
+ <val o="2665a6" v="17.888"/>
+ <val o="2673b5" v="16.861"/>
+ <val o="2681c6" v="16.617"/>
+ <val o="268fd5" v="17.428"/>
+ <val o="269de6" v="18.225"/>
+ <val o="26abf6" v="18.415"/>
+ <val o="26ba06" v="22.126"/>
+ <val o="26c817" v="22.126"/>
+ <val o="26d62b" v="25.782"/>
+ <val o="26e436" v="22.774"/>
+ <val o="26f247" v="22.774"/>
+ <val o="270057" v="22.909"/>
+ <val o="270e67" v="23.139"/>
+ <val o="271c77" v="21.553"/>
+ <val o="272a87" v="23.539"/>
+ <val o="273897" v="23.139"/>
+ <val o="2746a8" v="22.735"/>
+ <val o="2754b9" v="22.335"/>
+ <val o="2762c7" v="23.205"/>
+ <val o="2770d8" v="18.238"/>
+ <val o="277ee7" v="14.136"/>
+ </par>
+ <par memind="9812" h="3dc1a8de">
+ <val o="0" v="114.081"/>
+ <val o="e08" v="117.19"/>
+ <val o="1c32" v="118.964"/>
+ <val o="2a3c" v="120.564"/>
+ <val o="3835" v="118.747"/>
+ <val o="4645" v="116.529"/>
+ <val o="5455" v="109.384"/>
+ <val o="6265" v="121.356"/>
+ <val o="7075" v="119.014"/>
+ <val o="7e85" v="116.226"/>
+ <val o="8c96" v="120.175"/>
+ <val o="9aa5" v="120.949"/>
+ <val o="a8b6" v="124.2"/>
+ <val o="b6c5" v="124.043"/>
+ <val o="c4d7" v="117.761"/>
+ <val o="d30b" v="118.092"/>
+ <val o="e0f6" v="118.354"/>
+ <val o="ef06" v="118.633"/>
+ <val o="fd17" v="118.494"/>
+ <val o="10b27" v="121.243"/>
+ <val o="11937" v="122.278"/>
+ <val o="12746" v="119.689"/>
+ <val o="13556" v="121.165"/>
+ <val o="14366" v="125.688"/>
+ <val o="15181" v="127.517"/>
+ <val o="15f85" v="119.508"/>
+ <val o="16d95" v="121.27"/>
+ <val o="17ba4" v="121.262"/>
+ <val o="189b5" v="120.595"/>
+ <val o="197c4" v="118.725"/>
+ <val o="1a5d5" v="126.913"/>
+ <val o="1b3e6" v="125.984"/>
+ <val o="1c1f6" v="124.971"/>
+ <val o="1d005" v="121.722"/>
+ <val o="1de15" v="122.233"/>
+ <val o="1ec25" v="122.836"/>
+ <val o="1fa36" v="124.125"/>
+ <val o="20845" v="125.105"/>
+ <val o="21656" v="125.266"/>
+ <val o="22465" v="125.381"/>
+ <val o="23276" v="123.688"/>
+ <val o="24086" v="119.437"/>
+ <val o="24e99" v="119.167"/>
+ <val o="25ca7" v="120.334"/>
+ <val o="26ab7" v="119.837"/>
+ <val o="278c6" v="120.109"/>
+ <val o="286d6" v="122.074"/>
+ <val o="294e6" v="125.542"/>
+ <val o="2a301" v="125.638"/>
+ <val o="2b105" v="117.398"/>
+ <val o="2bf15" v="118.807"/>
+ <val o="2cd25" v="119.644"/>
+ <val o="2db35" v="119.674"/>
+ <val o="2e946" v="117.549"/>
+ <val o="2f755" v="113.229"/>
+ <val o="30566" v="125.153"/>
+ <val o="31375" v="124.691"/>
+ <val o="3219e" v="123.556"/>
+ <val o="32f96" v="123.231"/>
+ <val o="33da6" v="123.404"/>
+ <val o="34bb6" v="123.932"/>
+ <val o="359de" v="123.328"/>
+ <val o="367d6" v="122.641"/>
+ <val o="375e6" v="121.544"/>
+ <val o="3840e" v="118.209"/>
+ <val o="3921e" v="118.675"/>
+ <val o="3a016" v="118.325"/>
+ <val o="3ae27" v="121.893"/>
+ <val o="3bc36" v="120.711"/>
+ <val o="3ca47" v="119.854"/>
+ <val o="3d856" v="120.165"/>
+ <val o="3e667" v="122.996"/>
+ <val o="3f481" v="126.557"/>
+ <val o="40285" v="124.061"/>
+ <val o="41095" v="124.874"/>
+ <val o="41ea5" v="125.244"/>
+ <val o="42cb5" v="125.083"/>
+ <val o="43ac5" v="123.182"/>
+ <val o="448d5" v="119.311"/>
+ <val o="456e6" v="122.524"/>
+ <val o="464f5" v="121.173"/>
+ <val o="480ff" v="118.696"/>
+ <val o="48f0e" v="117.559"/>
+ <val o="49d1d" v="118.947"/>
+ <val o="4ab46" v="118.797"/>
+ <val o="4b955" v="117.048"/>
+ <val o="4c769" v="116.182"/>
+ <val o="4d577" v="119.101"/>
+ <val o="4e387" v="119.152"/>
+ <val o="4f196" v="116.814"/>
+ <val o="4ffa6" v="118.943"/>
+ <val o="50dd0" v="120.844"/>
+ <val o="51bc6" v="119.109"/>
+ <val o="529d6" v="120.802"/>
+ <val o="537e7" v="123.095"/>
+ <val o="54600" v="125.922"/>
+ <val o="55406" v="122.082"/>
+ <val o="56215" v="123.001"/>
+ <val o="57026" v="123.033"/>
+ <val o="57e36" v="122.972"/>
+ <val o="58c46" v="120.717"/>
+ <val o="59a70" v="121.599"/>
+ <val o="5a867" v="120.977"/>
+ <val o="5b676" v="119.038"/>
+ <val o="5c487" v="115.798"/>
+ <val o="5d296" v="119.913"/>
+ <val o="5e0a9" v="120.284"/>
+ <val o="5eeb8" v="119.451"/>
+ <val o="5fcc6" v="118.325"/>
+ <val o="60ad7" v="117.111"/>
+ <val o="618e7" v="117.263"/>
+ <val o="626f7" v="120.147"/>
+ <val o="63507" v="117.534"/>
+ <val o="64317" v="118.902"/>
+ <val o="65127" v="120.099"/>
+ <val o="65f37" v="121.434"/>
+ <val o="66d46" v="121.986"/>
+ <val o="67b57" v="120.683"/>
+ <val o="68967" v="122.861"/>
+ <val o="69782" v="119.35"/>
+ <val o="6a586" v="120.845"/>
+ <val o="6b395" v="122.119"/>
+ <val o="6c1a6" v="122.506"/>
+ <val o="6cfb5" v="121.462"/>
+ <val o="6ddc6" v="118.909"/>
+ <val o="6ebd6" v="116.372"/>
+ <val o="6f9e6" v="121.311"/>
+ <val o="707f6" v="119.412"/>
+ <val o="71607" v="118.281"/>
+ <val o="72417" v="118.148"/>
+ <val o="73227" v="117.811"/>
+ <val o="74037" v="121.694"/>
+ <val o="74e47" v="120.755"/>
+ <val o="75c57" v="118.651"/>
+ <val o="76a63" v="118.08"/>
+ <val o="77873" v="118.282"/>
+ <val o="78680" v="113.911"/>
+ <val o="7948f" v="116.941"/>
+ <val o="7a29f" v="119.508"/>
+ <val o="7b0af" v="119.071"/>
+ <val o="7bebf" v="121.146"/>
+ <val o="7cccf" v="121.336"/>
+ <val o="7dadf" v="122.095"/>
+ <val o="7e8fa" v="121.785"/>
+ <val o="7f70a" v="124.065"/>
+ <val o="8051a" v="125.455"/>
+ <val o="8132a" v="126.011"/>
+ <val o="8213a" v="125.018"/>
+ <val o="82f4a" v="122.741"/>
+ <val o="83d5a" v="120.26"/>
+ <val o="84b6a" v="118.856"/>
+ <val o="8597a" v="118.817"/>
+ <val o="8678b" v="117.807"/>
+ <val o="8759b" v="117.444"/>
+ <val o="883ac" v="119.967"/>
+ <val o="891bb" v="121.141"/>
+ <val o="89fca" v="120.259"/>
+ <val o="8adda" v="118.558"/>
+ <val o="8bbeb" v="118.812"/>
+ <val o="8c9fc" v="118.633"/>
+ <val o="8d80b" v="118.948"/>
+ <val o="8e61a" v="117.315"/>
+ <val o="8f42a" v="118.146"/>
+ <val o="9023a" v="120.121"/>
+ <val o="9104a" v="120.561"/>
+ <val o="91e5a" v="118.638"/>
+ <val o="92c6a" v="122.844"/>
+ <val o="93a84" v="125.153"/>
+ <val o="94885" v="123.463"/>
+ <val o="95694" v="122.793"/>
+ <val o="964a5" v="123.093"/>
+ <val o="972b4" v="122.535"/>
+ <val o="980c5" v="120.189"/>
+ <val o="98ed4" v="123.097"/>
+ <val o="99ce5" v="119.336"/>
+ <val o="9aaf5" v="118.5"/>
+ <val o="9b906" v="115.743"/>
+ <val o="9c716" v="119.722"/>
+ <val o="9d526" v="120.222"/>
+ <val o="9e336" v="118.918"/>
+ <val o="9f145" v="117.551"/>
+ <val o="9ff56" v="116.649"/>
+ <val o="a0d65" v="116.52"/>
+ <val o="a1b77" v="116.703"/>
+ <val o="a2986" v="118.806"/>
+ <val o="a3795" v="118.461"/>
+ <val o="a45a7" v="119.593"/>
+ <val o="a53b6" v="119.78"/>
+ <val o="a61c7" v="119.973"/>
+ <val o="a6fd6" v="120.761"/>
+ <val o="a7e00" v="122.782"/>
+ <val o="a8c00" v="125.444"/>
+ <val o="a9a05" v="118.255"/>
+ <val o="aa815" v="119.302"/>
+ <val o="ab625" v="120.149"/>
+ <val o="ac435" v="119.678"/>
+ <val o="ad245" v="117.138"/>
+ <val o="ae055" v="114.681"/>
+ <val o="aee65" v="120.851"/>
+ <val o="afc75" v="119.099"/>
+ <val o="b0a85" v="116.609"/>
+ <val o="b26a6" v="116.729"/>
+ <val o="b34b6" v="118.045"/>
+ <val o="b42c6" v="115.477"/>
+ <val o="b50d6" v="115.891"/>
+ <val o="b5ee7" v="114.24"/>
+ <val o="b6cf6" v="122.794"/>
+ <val o="b7b07" v="119.002"/>
+ <val o="b8917" v="118.701"/>
+ <val o="b9728" v="119.602"/>
+ <val o="ba537" v="120.963"/>
+ <val o="bb347" v="119.924"/>
+ <val o="bc157" v="120.628"/>
+ <val o="bcf67" v="123.122"/>
+ <val o="bdd81" v="118.683"/>
+ <val o="beb86" v="118.301"/>
+ <val o="bf995" v="118.882"/>
+ <val o="c07a6" v="120.187"/>
+ <val o="c15b5" v="119.576"/>
+ <val o="c23c6" v="118.243"/>
+ <val o="c31d5" v="115.692"/>
+ <val o="c3fe6" v="117.56"/>
+ <val o="c4df5" v="116.057"/>
+ <val o="c5c06" v="117.411"/>
+ <val o="c6a16" v="117.486"/>
+ <val o="c7826" v="116.745"/>
+ <val o="c8636" v="118.265"/>
+ <val o="c9446" v="118.202"/>
+ <val o="ca256" v="118.004"/>
+ <val o="cb066" v="117.255"/>
+ <val o="cbe76" v="122.71"/>
+ <val o="ccc87" v="118.736"/>
+ <val o="cda96" v="116.734"/>
+ <val o="ce8a8" v="118.339"/>
+ <val o="cf6b7" v="118.66"/>
+ <val o="d04c8" v="119.703"/>
+ <val o="d12d7" v="121.536"/>
+ <val o="d20e7" v="123.419"/>
+ <val o="d2f02" v="126.186"/>
+ <val o="d3d05" v="119.31"/>
+ <val o="d4b15" v="120.58"/>
+ <val o="d5926" v="120.857"/>
+ <val o="d6735" v="119.582"/>
+ <val o="d7546" v="117.426"/>
+ <val o="d8355" v="124.349"/>
+ <val o="d9166" v="122.435"/>
+ <val o="d9f75" v="120.692"/>
+ <val o="dad87" v="117.233"/>
+ <val o="dbb97" v="116.862"/>
+ <val o="dc9a8" v="116.728"/>
+ <val o="dd7b7" v="118.212"/>
+ <val o="de5c6" v="117.857"/>
+ <val o="df3d7" v="117.176"/>
+ <val o="e01d7" v="117.271"/>
+ <val o="e0fe5" v="116.796"/>
+ <val o="e1df5" v="117.361"/>
+ <val o="e2c04" v="119.769"/>
+ <val o="e3a14" v="121.05"/>
+ <val o="e4824" v="120.921"/>
+ <val o="e5634" v="122.497"/>
+ <val o="e6444" v="120.677"/>
+ <val o="e7255" v="122.67"/>
+ <val o="e806f" v="123.778"/>
+ <val o="e8e7f" v="116.655"/>
+ <val o="e9c8e" v="118.109"/>
+ <val o="eaa9f" v="118.372"/>
+ <val o="eb8ae" v="117.527"/>
+ <val o="ec6bf" v="113.518"/>
+ <val o="ed4ce" v="123.496"/>
+ <val o="ee2df" v="120.611"/>
+ <val o="ef0ef" v="118.704"/>
+ <val o="eff01" v="115.651"/>
+ <val o="f0d10" v="117.487"/>
+ <val o="f1b20" v="117.186"/>
+ <val o="f2930" v="121.114"/>
+ <val o="f3740" v="117.611"/>
+ <val o="f4551" v="117.892"/>
+ <val o="f5361" v="117.718"/>
+ <val o="f6172" v="117.584"/>
+ <val o="f6f80" v="117.38"/>
+ <val o="f7d91" v="119.222"/>
+ <val o="f8ba1" v="121.037"/>
+ <val o="f99b1" v="120.221"/>
+ <val o="fa7c0" v="118.379"/>
+ <val o="fb5d1" v="118.238"/>
+ <val o="fc3e0" v="123.037"/>
+ <val o="fd1fb" v="123.007"/>
+ <val o="fe00b" v="126.294"/>
+ <val o="fee1c" v="123.682"/>
+ <val o="ffc2c" v="123.591"/>
+ <val o="100a3b" v="122.918"/>
+ <val o="10184c" v="121.387"/>
+ <val o="10265b" v="117.586"/>
+ <val o="10346c" v="117.716"/>
+ <val o="10427b" v="119.191"/>
+ <val o="10508d" v="117.355"/>
+ <val o="105e9d" v="117.862"/>
+ <val o="106cad" v="117.531"/>
+ <val o="107abd" v="119.886"/>
+ <val o="1088cd" v="119.426"/>
+ <val o="1096de" v="118.72"/>
+ <val o="10a4ed" v="119.004"/>
+ <val o="10b2fe" v="118.725"/>
+ <val o="10c10d" v="116.196"/>
+ <val o="10cf1e" v="118.111"/>
+ <val o="10dd2e" v="119.001"/>
+ <val o="10eb66" v="120.963"/>
+ <val o="10f94e" v="121.34"/>
+ <val o="11075e" v="119.151"/>
+ <val o="11156d" v="120.797"/>
+ <val o="112388" v="123.519"/>
+ <val o="113187" v="122.366"/>
+ <val o="113fb0" v="123.381"/>
+ <val o="114da6" v="123.296"/>
+ <val o="115bb6" v="123.047"/>
+ <val o="1169c6" v="120.874"/>
+ <val o="1177d6" v="118.017"/>
+ <val o="1185e8" v="118.388"/>
+ <val o="1193f7" v="117.753"/>
+ <val o="11a208" v="119.761"/>
+ <val o="11b017" v="121.547"/>
+ <val o="11be2f" v="122.028"/>
+ <val o="11cc37" v="122.195"/>
+ <val o="11da47" v="121.783"/>
+ <val o="11e857" v="120.581"/>
+ <val o="11f667" v="121.685"/>
+ <val o="120578" v="120.972"/>
+ <val o="121386" v="116.836"/>
+ <val o="122196" v="117.633"/>
+ <val o="122fa6" v="118.83"/>
+ <val o="123db5" v="120.746"/>
+ <val o="124bc5" v="122.541"/>
+ <val o="1259d5" v="120.249"/>
+ <val o="1267e4" v="122.708"/>
+ <val o="127600" v="124.538"/>
+ <val o="128305" v="125.289"/>
+ <val o="129115" v="125.325"/>
+ <val o="129f25" v="125.49"/>
+ <val o="12ad35" v="124.672"/>
+ <val o="12bb45" v="122.813"/>
+ <val o="12c954" v="121.573"/>
+ <val o="12d766" v="120.719"/>
+ <val o="12e575" v="119.706"/>
+ <val o="12f386" v="116.935"/>
+ <val o="130196" v="117.255"/>
+ <val o="130fa6" v="118.365"/>
+ <val o="131db7" v="119.829"/>
+ <val o="132bc5" v="119.607"/>
+ <val o="1339d4" v="0.109"/>
+ <val o="1347e5" v="0.109"/>
+ <val o="1355f4" v="0.108"/>
+ <val o="136404" v="0.106"/>
+ <val o="137214" v="0.106"/>
+ <val o="138024" v="0.107"/>
+ <val o="138e33" v="0.108"/>
+ <val o="139c44" v="0.109"/>
+ <val o="13aa54" v="0.108"/>
+ <val o="13b865" v="0.109"/>
+ <val o="13c67e" v="0.101"/>
+ <val o="13d48e" v="0.104"/>
+ <val o="13e29e" v="0.106"/>
+ <val o="13f0ae" v="0.106"/>
+ <val o="13febf" v="0.104"/>
+ <val o="140ccf" v="0.102"/>
+ <val o="141adf" v="0.104"/>
+ <val o="1428ef" v="0.108"/>
+ <val o="1436ff" v="0.107"/>
+ <val o="14450f" v="0.107"/>
+ <val o="14531f" v="0.107"/>
+ <val o="146130" v="0.108"/>
+ <val o="146f40" v="0.11"/>
+ <val o="147d44" v="0.108"/>
+ <val o="148b57" v="0.108"/>
+ <val o="149965" v="0.108"/>
+ <val o="14a775" v="0.106"/>
+ <val o="14b584" v="0.11"/>
+ <val o="14c397" v="0.107"/>
+ <val o="14d1a4" v="0.107"/>
+ <val o="14dfb6" v="0.108"/>
+ <val o="14edc5" v="0.11"/>
+ <val o="14fbd5" v="0.112"/>
+ <val o="1509e5" v="0.112"/>
+ <val o="1517ff" v="0.115"/>
+ <val o="152605" v="0.108"/>
+ <val o="153415" v="0.109"/>
+ <val o="154225" v="0.11"/>
+ <val o="155035" v="0.109"/>
+ <val o="155e45" v="0.107"/>
+ <val o="156c55" v="0.104"/>
+ <val o="157a65" v="0.107"/>
+ <val o="158875" v="0.107"/>
+ <val o="159686" v="0.106"/>
+ <val o="15a495" v="0.107"/>
+ <val o="15b2a6" v="0.108"/>
+ <val o="15c0b6" v="0.109"/>
+ <val o="15cec6" v="0.109"/>
+ <val o="15dcd5" v="0.108"/>
+ <val o="15eae6" v="0.108"/>
+ <val o="15f8f5" v="0.104"/>
+ <val o="160706" v="0.11"/>
+ <val o="161517" v="0.109"/>
+ <val o="162326" v="0.11"/>
+ <val o="163137" v="0.111"/>
+ <val o="163f46" v="0.109"/>
+ <val o="164d57" v="0.11"/>
+ <val o="165b67" v="0.112"/>
+ <val o="166982" v="0.111"/>
+ <val o="167786" v="0.112"/>
+ <val o="168596" v="0.113"/>
+ <val o="1693a6" v="0.113"/>
+ <val o="16a1b5" v="0.112"/>
+ <val o="16afc6" v="0.111"/>
+ <val o="16bdd5" v="0.109"/>
+ <val o="16cbe6" v="0.107"/>
+ <val o="16d9f6" v="0.111"/>
+ <val o="16e807" v="0.11"/>
+ <val o="16f616" v="0.11"/>
+ <val o="170429" v="0.111"/>
+ <val o="171236" v="0.112"/>
+ <val o="172047" v="0.112"/>
+ <val o="172e57" v="0.111"/>
+ <val o="173c67" v="0.111"/>
+ <val o="174a77" v="0.11"/>
+ <val o="175887" v="0.108"/>
+ <val o="176694" v="118.351"/>
+ <val o="1774a3" v="119.763"/>
+ <val o="1782b3" v="120.872"/>
+ <val o="1790c5" v="121.443"/>
+ <val o="179ed4" v="124.587"/>
+ <val o="17ace4" v="127.119"/>
+ <val o="17bafd" v="128.887"/>
+ <val o="17c90f" v="127.107"/>
+ <val o="17d71e" v="127.1"/>
+ <val o="17e52f" v="127.35"/>
+ <val o="17f33f" v="126.552"/>
+ <val o="18014f" v="124.71"/>
+ <val o="180f5f" v="124.077"/>
+ <val o="181d6e" v="125.099"/>
+ <val o="182b7f" v="125.025"/>
+ <val o="18398f" v="123.954"/>
+ <val o="1847a1" v="123.641"/>
+ <val o="1855af" v="124.308"/>
+ <val o="1863c0" v="126.201"/>
+ <val o="1871cf" v="125.426"/>
+ <val o="187fe0" v="125.045"/>
+ <val o="188def" v="124.868"/>
+ <val o="189c00" v="123.854"/>
+ <val o="18b80d" v="117.177"/>
+ <val o="18c61c" v="120.985"/>
+ <val o="18d42c" v="121.689"/>
+ <val o="18e23b" v="121.514"/>
+ <val o="18f04b" v="123.76"/>
+ <val o="18fe5e" v="125.848"/>
+ <val o="190c76" v="123.162"/>
+ <val o="191a86" v="124.87"/>
+ <val o="192896" v="126.457"/>
+ <val o="1936a6" v="126.565"/>
+ <val o="1944b7" v="125.821"/>
+ <val o="1952c6" v="123.654"/>
+ <val o="1960d7" v="120.985"/>
+ <val o="196ee6" v="121.019"/>
+ <val o="197cf8" v="120.771"/>
+ <val o="198b0f" v="120.139"/>
+ <val o="19991f" v="120.067"/>
+ <val o="19b541" v="122.459"/>
+ <val o="19c34d" v="121.603"/>
+ <val o="19d15e" v="120.856"/>
+ <val o="19df80" v="120.882"/>
+ <val o="19ed90" v="120.049"/>
+ <val o="19eebe" v="119.903"/>
+ <val o="19fb8e" v="116.012"/>
+ <val o="1a09a0" v="119.283"/>
+ <val o="1a17ae" v="120.303"/>
+ <val o="1a25be" v="121.728"/>
+ <val o="1a33cd" v="121.516"/>
+ <val o="1a41dd" v="122.849"/>
+ <val o="1a4fed" v="126.093"/>
+ <val o="1a5e08" v="126.725"/>
+ <val o="1a6c05" v="124.883"/>
+ <val o="1a7a15" v="125.931"/>
+ <val o="1a8826" v="126.096"/>
+ <val o="1a9637" v="124.906"/>
+ <val o="1aa445" v="123.654"/>
+ <val o="1ab255" v="121.493"/>
+ <val o="1ac065" v="123.897"/>
+ <val o="1ace75" v="123.756"/>
+ <val o="1adc87" v="122.369"/>
+ <val o="1aea96" v="121.934"/>
+ <val o="1af8a7" v="122.306"/>
+ <val o="1b06b7" v="124.041"/>
+ <val o="1b14c6" v="123.698"/>
+ <val o="1c7460" v="120.029"/>
+ <val o="1c8270" v="120.033"/>
+ <val o="1c907e" v="119.314"/>
+ <val o="1c9e8f" v="120.479"/>
+ <val o="1caca2" v="121.91"/>
+ <val o="1cbab1" v="122.485"/>
+ <val o="1cc8c1" v="118.564"/>
+ <val o="1cd6d0" v="119.367"/>
+ <val o="1ce4de" v="120.808"/>
+ <val o="1cf2f0" v="123.105"/>
+ <val o="1d0109" v="125.021"/>
+ <val o="1d0f06" v="123.274"/>
+ <val o="1d1d15" v="123.92"/>
+ <val o="1d2b25" v="123.876"/>
+ <val o="1d3935" v="122.883"/>
+ <val o="1d4745" v="122.072"/>
+ <val o="1d5555" v="121.544"/>
+ <val o="1d6366" v="123.27"/>
+ <val o="1d7175" v="123.513"/>
+ <val o="1d7f86" v="122.604"/>
+ <val o="1d8d95" v="121.281"/>
+ <val o="1d9ba6" v="121.716"/>
+ <val o="1da9b6" v="122.714"/>
+ <val o="1db7c7" v="123.129"/>
+ <val o="1dc5d5" v="123.431"/>
+ <val o="1dd3e6" v="122.987"/>
+ <val o="1de1f5" v="119.262"/>
+ <val o="1df006" v="118.087"/>
+ <val o="1dfe16" v="116.532"/>
+ <val o="1e0c26" v="118.618"/>
+ <val o="1e1a36" v="119.706"/>
+ <val o="1e2847" v="120.899"/>
+ <val o="1e3659" v="120.718"/>
+ <val o="1e4467" v="121.624"/>
+ <val o="1e5281" v="117.925"/>
+ <val o="1e6086" v="120.928"/>
+ <val o="1e6e96" v="122.34"/>
+ <val o="1e7ca6" v="122.972"/>
+ <val o="1e8ab5" v="123.05"/>
+ <val o="1e98c6" v="122.44"/>
+ <val o="1ea6d5" v="120.735"/>
+ <val o="1eb4e6" v="120.711"/>
+ <val o="1ec2f6" v="123.688"/>
+ <val o="1ed106" v="122.853"/>
+ <val o="1edf16" v="122.754"/>
+ <val o="1eed26" v="122.975"/>
+ <val o="1efb36" v="123.49"/>
+ <val o="1f0946" v="123.278"/>
+ <val o="1f1756" v="121.776"/>
+ <val o="1f2566" v="121.458"/>
+ <val o="1f3376" v="120.109"/>
+ <val o="1f4187" v="116.832"/>
+ <val o="1f4f96" v="119.948"/>
+ <val o="1f5da7" v="120.022"/>
+ <val o="1f6bb6" v="120.884"/>
+ <val o="1f79c7" v="119.618"/>
+ <val o="1f87d6" v="122.811"/>
+ <val o="1f95e7" v="123.997"/>
+ <val o="1fa401" v="126.654"/>
+ <val o="1fb204" v="125.574"/>
+ <val o="1fc016" v="126.495"/>
+ <val o="1fce25" v="126.021"/>
+ <val o="1fdc35" v="125.521"/>
+ <val o="1fea45" v="123.104"/>
+ <val o="1ff855" v="121.073"/>
+ <val o="200665" v="117.997"/>
+ <val o="201475" v="119.376"/>
+ <val o="202286" v="119.302"/>
+ <val o="203095" v="120.24"/>
+ <val o="203ea5" v="120.497"/>
+ <val o="204cb6" v="123.276"/>
+ <val o="205ac6" v="121.287"/>
+ <val o="2068d6" v="120.492"/>
+ <val o="2076e6" v="119.643"/>
+ <val o="2084f6" v="117.626"/>
+ <val o="209306" v="121.9"/>
+ <val o="20a116" v="120.861"/>
+ <val o="20af26" v="120.493"/>
+ <val o="20bd37" v="121.526"/>
+ <val o="20cb46" v="119.46"/>
+ <val o="20d957" v="120.284"/>
+ <val o="20e767" v="121.713"/>
+ <val o="20f581" v="124.203"/>
+ <val o="210386" v="126.587"/>
+ <val o="211194" v="124.627"/>
+ <val o="211fa5" v="124.526"/>
+ <val o="212db5" v="123.821"/>
+ <val o="213bc5" v="122.357"/>
+ <val o="2149d6" v="118.642"/>
+ <val o="2157e5" v="116.651"/>
+ <val o="2165f6" v="122.439"/>
+ <val o="217406" v="120.232"/>
+ <val o="218217" v="119.322"/>
+ <val o="219026" v="120.236"/>
+ <val o="219e39" v="120.346"/>
+ <val o="21ac46" v="119.148"/>
+ <val o="21ba57" v="118.907"/>
+ <val o="21c867" v="117.874"/>
+ <val o="21d677" v="122.584"/>
+ <val o="21e487" v="120.252"/>
+ <val o="21f296" v="120.469"/>
+ <val o="2200a6" v="121.303"/>
+ <val o="220eb7" v="122.183"/>
+ <val o="221cc6" v="118.747"/>
+ <val o="222ad7" v="120.81"/>
+ <val o="2238e7" v="123.937"/>
+ <val o="224701" v="126.687"/>
+ <val o="225505" v="119.553"/>
+ <val o="226315" v="119.757"/>
+ <val o="227125" v="119.753"/>
+ <val o="227f35" v="117.557"/>
+ <val o="228d45" v="116.262"/>
+ <val o="229b54" v="122.469"/>
+ <val o="22a965" v="119.765"/>
+ <val o="22b776" v="119.78"/>
+ <val o="22c586" v="119.006"/>
+ <val o="22d397" v="118.696"/>
+ <val o="22e1a6" v="119.018"/>
+ <val o="22efb6" v="120.765"/>
+ <val o="22fdc7" v="120.41"/>
+ <val o="230bd7" v="119.608"/>
+ <val o="2319e6" v="119.268"/>
+ <val o="2327f6" v="118.221"/>
+ <val o="23361b" v="119.234"/>
+ <val o="234416" v="118.199"/>
+ <val o="235226" v="119.524"/>
+ <val o="236037" v="120.76"/>
+ <val o="236e46" v="118.446"/>
+ <val o="237c57" v="119.86"/>
+ <val o="238a66" v="121.458"/>
+ <val o="239881" v="120.937"/>
+ <val o="23a685" v="122.353"/>
+ <val o="23b495" v="123.085"/>
+ <val o="23c2a4" v="123.145"/>
+ <val o="23d0b5" v="122.277"/>
+ <val o="23dec4" v="121.153"/>
+ <val o="23ecd5" v="119.31"/>
+ <val o="23fae4" v="120.616"/>
+ <val o="2408f6" v="118.482"/>
+ <val o="241706" v="117.789"/>
+ <val o="242518" v="118.178"/>
+ <val o="243325" v="118.65"/>
+ <val o="244137" v="119.893"/>
+ <val o="244f46" v="119.172"/>
+ <val o="246b66" v="118.88"/>
+ <val o="247976" v="118.03"/>
+ <val o="248786" v="115.2"/>
+ <val o="24957e" v="118.091"/>
+ <val o="24a38f" v="119.601"/>
+ <val o="24b19c" v="120.844"/>
+ <val o="24bfac" v="120.094"/>
+ <val o="24cdbc" v="123.851"/>
+ <val o="24dbcd" v="123.499"/>
+ <val o="24e9e5" v="124.806"/>
+ <val o="24f808" v="124.27"/>
+ <val o="250616" v="124.985"/>
+ <val o="251426" v="125.02"/>
+ <val o="252236" v="123.483"/>
+ <val o="253047" v="122.436"/>
+ <val o="253e56" v="120.041"/>
+ <val o="254c67" v="119.496"/>
+ <val o="255a76" v="119.362"/>
+ <val o="256887" v="117.767"/>
+ <val o="257697" v="118.616"/>
+ <val o="2584a8" v="117.274"/>
+ <val o="2592b6" v="118.975"/>
+ <val o="25a0c7" v="119.79"/>
+ <val o="25aed7" v="119.331"/>
+ <val o="25bce7" v="119.194"/>
+ <val o="25caf8" v="118.637"/>
+ <val o="25d907" v="120.535"/>
+ <val o="25e718" v="119.8"/>
+ <val o="25f527" v="120.403"/>
+ <val o="260338" v="121.054"/>
+ <val o="261149" v="119.413"/>
+ <val o="261f59" v="120.38"/>
+ <val o="262d68" v="123.203"/>
+ <val o="263b83" v="121.143"/>
+ <val o="264986" v="122.976"/>
+ <val o="265795" v="123.697"/>
+ <val o="2665a6" v="124.476"/>
+ <val o="2673b5" v="123.592"/>
+ <val o="2681c6" v="123.177"/>
+ <val o="268fd5" v="121.853"/>
+ <val o="269de6" v="121.298"/>
+ <val o="26abf6" v="120.593"/>
+ <val o="26ba06" v="118.763"/>
+ <val o="26c817" v="118.278"/>
+ <val o="26d62b" v="118.596"/>
+ <val o="26e436" v="119.984"/>
+ <val o="26f247" v="119.523"/>
+ <val o="270057" v="119.574"/>
+ <val o="270e67" v="119.013"/>
+ <val o="271c77" v="119.722"/>
+ <val o="272a87" v="120.875"/>
+ <val o="273897" v="120.668"/>
+ <val o="2746a8" v="121.451"/>
+ <val o="2754b9" v="121.838"/>
+ <val o="2762c7" v="119.053"/>
+ <val o="2770d8" v="121.03"/>
+ <val o="277ee7" v="123.544"/>
+ </par>
+ <par memind="9808" h="3dc1a8de">
+ <val o="0" v="0"/>
+ <val o="e08" v="0"/>
+ <val o="1c32" v="0"/>
+ <val o="2a3c" v="0"/>
+ <val o="3835" v="0"/>
+ <val o="4645" v="0"/>
+ <val o="5455" v="0"/>
+ <val o="6265" v="0"/>
+ <val o="7075" v="0"/>
+ <val o="7e85" v="0"/>
+ <val o="8c96" v="0"/>
+ <val o="9aa5" v="0"/>
+ <val o="a8b6" v="0"/>
+ <val o="b6c5" v="0"/>
+ <val o="c4d7" v="0"/>
+ <val o="d30b" v="0"/>
+ <val o="e0f6" v="0"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="0"/>
+ <val o="11937" v="0"/>
+ <val o="12746" v="0"/>
+ <val o="13556" v="0"/>
+ <val o="14366" v="0"/>
+ <val o="15181" v="0"/>
+ <val o="15f85" v="0"/>
+ <val o="16d95" v="0"/>
+ <val o="17ba4" v="0"/>
+ <val o="189b5" v="0"/>
+ <val o="197c4" v="0"/>
+ <val o="1a5d5" v="0"/>
+ <val o="1b3e6" v="0"/>
+ <val o="1c1f6" v="0"/>
+ <val o="1d005" v="0"/>
+ <val o="1de15" v="0"/>
+ <val o="1ec25" v="0"/>
+ <val o="1fa36" v="0"/>
+ <val o="20845" v="0"/>
+ <val o="21656" v="0"/>
+ <val o="22465" v="0"/>
+ <val o="23276" v="0"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="0"/>
+ <val o="25ca7" v="0"/>
+ <val o="26ab7" v="0"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="0"/>
+ <val o="294e6" v="0"/>
+ <val o="2a301" v="0"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="0"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="0"/>
+ <val o="31375" v="0"/>
+ <val o="3219e" v="0"/>
+ <val o="32f96" v="0"/>
+ <val o="33da6" v="0"/>
+ <val o="34bb6" v="0"/>
+ <val o="359de" v="0"/>
+ <val o="367d6" v="0"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="0"/>
+ <val o="3bc36" v="0"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="0"/>
+ <val o="3e667" v="0"/>
+ <val o="3f481" v="0"/>
+ <val o="40285" v="0"/>
+ <val o="41095" v="0"/>
+ <val o="41ea5" v="0"/>
+ <val o="42cb5" v="0"/>
+ <val o="43ac5" v="0"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="0"/>
+ <val o="464f5" v="0"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="0"/>
+ <val o="54600" v="0"/>
+ <val o="55406" v="0"/>
+ <val o="56215" v="0"/>
+ <val o="57026" v="0"/>
+ <val o="57e36" v="0"/>
+ <val o="58c46" v="0"/>
+ <val o="59a70" v="0"/>
+ <val o="5a867" v="0"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="0"/>
+ <val o="5eeb8" v="0"/>
+ <val o="5fcc6" v="0"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="0"/>
+ <val o="65f37" v="0"/>
+ <val o="66d46" v="0"/>
+ <val o="67b57" v="0"/>
+ <val o="68967" v="0"/>
+ <val o="69782" v="0"/>
+ <val o="6a586" v="0"/>
+ <val o="6b395" v="0"/>
+ <val o="6c1a6" v="0"/>
+ <val o="6cfb5" v="0"/>
+ <val o="6ddc6" v="0"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="0"/>
+ <val o="707f6" v="0"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="0"/>
+ <val o="74e47" v="0"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="0"/>
+ <val o="7bebf" v="0"/>
+ <val o="7cccf" v="0"/>
+ <val o="7dadf" v="0"/>
+ <val o="7e8fa" v="0"/>
+ <val o="7f70a" v="0"/>
+ <val o="8051a" v="0"/>
+ <val o="8132a" v="0"/>
+ <val o="8213a" v="0"/>
+ <val o="82f4a" v="0"/>
+ <val o="83d5a" v="0"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="0"/>
+ <val o="891bb" v="0"/>
+ <val o="89fca" v="0"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="0"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="0"/>
+ <val o="93a84" v="0"/>
+ <val o="94885" v="0"/>
+ <val o="95694" v="0"/>
+ <val o="964a5" v="0"/>
+ <val o="972b4" v="0"/>
+ <val o="980c5" v="0"/>
+ <val o="98ed4" v="0"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="0"/>
+ <val o="9c716" v="0"/>
+ <val o="9d526" v="0"/>
+ <val o="9e336" v="0"/>
+ <val o="9f145" v="0"/>
+ <val o="9ff56" v="0"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="0"/>
+ <val o="a2986" v="0"/>
+ <val o="a3795" v="0"/>
+ <val o="a45a7" v="0"/>
+ <val o="a53b6" v="0"/>
+ <val o="a61c7" v="0"/>
+ <val o="a6fd6" v="0"/>
+ <val o="a7e00" v="0"/>
+ <val o="a8c00" v="0"/>
+ <val o="a9a05" v="0"/>
+ <val o="aa815" v="0"/>
+ <val o="ab625" v="0"/>
+ <val o="ac435" v="0"/>
+ <val o="ad245" v="0"/>
+ <val o="ae055" v="0"/>
+ <val o="aee65" v="0"/>
+ <val o="afc75" v="0"/>
+ <val o="b0a85" v="0"/>
+ <val o="b26a6" v="0"/>
+ <val o="b34b6" v="0"/>
+ <val o="b42c6" v="0"/>
+ <val o="b50d6" v="0"/>
+ <val o="b5ee7" v="0"/>
+ <val o="b6cf6" v="0"/>
+ <val o="b7b07" v="0"/>
+ <val o="b8917" v="0"/>
+ <val o="b9728" v="0"/>
+ <val o="ba537" v="0"/>
+ <val o="bb347" v="0"/>
+ <val o="bc157" v="0"/>
+ <val o="bcf67" v="0"/>
+ <val o="bdd81" v="0"/>
+ <val o="beb86" v="0"/>
+ <val o="bf995" v="0"/>
+ <val o="c07a6" v="0"/>
+ <val o="c15b5" v="0"/>
+ <val o="c23c6" v="0"/>
+ <val o="c31d5" v="0"/>
+ <val o="c3fe6" v="0"/>
+ <val o="c4df5" v="0"/>
+ <val o="c5c06" v="0"/>
+ <val o="c6a16" v="0"/>
+ <val o="c7826" v="0"/>
+ <val o="c8636" v="0"/>
+ <val o="c9446" v="0"/>
+ <val o="ca256" v="0"/>
+ <val o="cb066" v="0"/>
+ <val o="cbe76" v="0"/>
+ <val o="ccc87" v="0"/>
+ <val o="cda96" v="0"/>
+ <val o="ce8a8" v="0"/>
+ <val o="cf6b7" v="0"/>
+ <val o="d04c8" v="0"/>
+ <val o="d12d7" v="0"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="0"/>
+ <val o="d3d05" v="0"/>
+ <val o="d4b15" v="0"/>
+ <val o="d5926" v="0"/>
+ <val o="d6735" v="0"/>
+ <val o="d7546" v="0"/>
+ <val o="d8355" v="0"/>
+ <val o="d9166" v="0"/>
+ <val o="d9f75" v="0"/>
+ <val o="dad87" v="0"/>
+ <val o="dbb97" v="0"/>
+ <val o="dc9a8" v="0"/>
+ <val o="dd7b7" v="0"/>
+ <val o="de5c6" v="0"/>
+ <val o="df3d7" v="0"/>
+ <val o="e01d7" v="0"/>
+ <val o="e0fe5" v="0"/>
+ <val o="e1df5" v="0"/>
+ <val o="e2c04" v="0"/>
+ <val o="e3a14" v="0"/>
+ <val o="e4824" v="0"/>
+ <val o="e5634" v="0"/>
+ <val o="e6444" v="0"/>
+ <val o="e7255" v="0"/>
+ <val o="e806f" v="0"/>
+ <val o="e8e7f" v="0"/>
+ <val o="e9c8e" v="0"/>
+ <val o="eaa9f" v="0"/>
+ <val o="eb8ae" v="0"/>
+ <val o="ec6bf" v="0"/>
+ <val o="ed4ce" v="0"/>
+ <val o="ee2df" v="0"/>
+ <val o="ef0ef" v="0"/>
+ <val o="eff01" v="0"/>
+ <val o="f0d10" v="0"/>
+ <val o="f1b20" v="0"/>
+ <val o="f2930" v="0"/>
+ <val o="f3740" v="0"/>
+ <val o="f4551" v="0"/>
+ <val o="f5361" v="0"/>
+ <val o="f6172" v="0"/>
+ <val o="f6f80" v="0"/>
+ <val o="f7d91" v="0"/>
+ <val o="f8ba1" v="0"/>
+ <val o="f99b1" v="0"/>
+ <val o="fa7c0" v="0"/>
+ <val o="fb5d1" v="0"/>
+ <val o="fc3e0" v="0"/>
+ <val o="fd1fb" v="0"/>
+ <val o="fe00b" v="0"/>
+ <val o="fee1c" v="0"/>
+ <val o="ffc2c" v="0"/>
+ <val o="100a3b" v="0"/>
+ <val o="10184c" v="0"/>
+ <val o="10265b" v="0"/>
+ <val o="10346c" v="0"/>
+ <val o="10427b" v="0"/>
+ <val o="10508d" v="0"/>
+ <val o="105e9d" v="0"/>
+ <val o="106cad" v="0"/>
+ <val o="107abd" v="0"/>
+ <val o="1088cd" v="0"/>
+ <val o="1096de" v="0"/>
+ <val o="10a4ed" v="0"/>
+ <val o="10b2fe" v="0"/>
+ <val o="10c10d" v="0"/>
+ <val o="10cf1e" v="0"/>
+ <val o="10dd2e" v="0"/>
+ <val o="10eb66" v="0"/>
+ <val o="10f94e" v="0"/>
+ <val o="11075e" v="0"/>
+ <val o="11156d" v="0"/>
+ <val o="112388" v="0"/>
+ <val o="113187" v="0"/>
+ <val o="113fb0" v="0"/>
+ <val o="114da6" v="0"/>
+ <val o="115bb6" v="0"/>
+ <val o="1169c6" v="0"/>
+ <val o="1177d6" v="0"/>
+ <val o="1185e8" v="0"/>
+ <val o="1193f7" v="0"/>
+ <val o="11a208" v="0"/>
+ <val o="11b017" v="0"/>
+ <val o="11be2f" v="0"/>
+ <val o="11cc37" v="0"/>
+ <val o="11da47" v="0"/>
+ <val o="11e857" v="0"/>
+ <val o="11f667" v="0"/>
+ <val o="120578" v="0"/>
+ <val o="121386" v="0"/>
+ <val o="122196" v="0"/>
+ <val o="122fa6" v="0"/>
+ <val o="123db5" v="0"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="0"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="0"/>
+ <val o="128305" v="0"/>
+ <val o="129115" v="0"/>
+ <val o="129f25" v="0"/>
+ <val o="12ad35" v="0"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="0"/>
+ <val o="12d766" v="0"/>
+ <val o="12e575" v="0"/>
+ <val o="12f386" v="0"/>
+ <val o="130196" v="0"/>
+ <val o="130fa6" v="0"/>
+ <val o="131db7" v="0"/>
+ <val o="132bc5" v="0"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="0"/>
+ <val o="1774a3" v="0"/>
+ <val o="1782b3" v="0"/>
+ <val o="1790c5" v="0"/>
+ <val o="179ed4" v="0"/>
+ <val o="17ace4" v="0"/>
+ <val o="17bafd" v="0"/>
+ <val o="17c90f" v="0"/>
+ <val o="17d71e" v="0"/>
+ <val o="17e52f" v="0"/>
+ <val o="17f33f" v="0"/>
+ <val o="18014f" v="0"/>
+ <val o="180f5f" v="0"/>
+ <val o="181d6e" v="0"/>
+ <val o="182b7f" v="0"/>
+ <val o="18398f" v="0"/>
+ <val o="1847a1" v="0"/>
+ <val o="1855af" v="0"/>
+ <val o="1863c0" v="0"/>
+ <val o="1871cf" v="0"/>
+ <val o="187fe0" v="0"/>
+ <val o="188def" v="0"/>
+ <val o="189c00" v="0"/>
+ <val o="18b80d" v="0"/>
+ <val o="18c61c" v="0"/>
+ <val o="18d42c" v="0"/>
+ <val o="18e23b" v="0"/>
+ <val o="18f04b" v="0"/>
+ <val o="18fe5e" v="0"/>
+ <val o="190c76" v="0"/>
+ <val o="191a86" v="0"/>
+ <val o="192896" v="0"/>
+ <val o="1936a6" v="0"/>
+ <val o="1944b7" v="0"/>
+ <val o="1952c6" v="0"/>
+ <val o="1960d7" v="0"/>
+ <val o="196ee6" v="0"/>
+ <val o="197cf8" v="0"/>
+ <val o="198b0f" v="0"/>
+ <val o="19991f" v="0"/>
+ <val o="19b541" v="0"/>
+ <val o="19c34d" v="0"/>
+ <val o="19d15e" v="0"/>
+ <val o="19df80" v="0"/>
+ <val o="19ed90" v="0"/>
+ <val o="19eebe" v="0"/>
+ <val o="19fb8e" v="0"/>
+ <val o="1a09a0" v="0"/>
+ <val o="1a17ae" v="0"/>
+ <val o="1a25be" v="0"/>
+ <val o="1a33cd" v="0"/>
+ <val o="1a41dd" v="0"/>
+ <val o="1a4fed" v="0"/>
+ <val o="1a5e08" v="0"/>
+ <val o="1a6c05" v="0"/>
+ <val o="1a7a15" v="0"/>
+ <val o="1a8826" v="0"/>
+ <val o="1a9637" v="0"/>
+ <val o="1aa445" v="0"/>
+ <val o="1ab255" v="0"/>
+ <val o="1ac065" v="0"/>
+ <val o="1ace75" v="0"/>
+ <val o="1adc87" v="0"/>
+ <val o="1aea96" v="0"/>
+ <val o="1af8a7" v="0"/>
+ <val o="1b06b7" v="0"/>
+ <val o="1b14c6" v="0"/>
+ <val o="1c7460" v="0"/>
+ <val o="1c8270" v="0"/>
+ <val o="1c907e" v="0"/>
+ <val o="1c9e8f" v="0"/>
+ <val o="1caca2" v="0"/>
+ <val o="1cbab1" v="0"/>
+ <val o="1cc8c1" v="0"/>
+ <val o="1cd6d0" v="0"/>
+ <val o="1ce4de" v="0"/>
+ <val o="1cf2f0" v="0"/>
+ <val o="1d0109" v="0"/>
+ <val o="1d0f06" v="0"/>
+ <val o="1d1d15" v="0"/>
+ <val o="1d2b25" v="0"/>
+ <val o="1d3935" v="0"/>
+ <val o="1d4745" v="0"/>
+ <val o="1d5555" v="0"/>
+ <val o="1d6366" v="0"/>
+ <val o="1d7175" v="0"/>
+ <val o="1d7f86" v="0"/>
+ <val o="1d8d95" v="0"/>
+ <val o="1d9ba6" v="0"/>
+ <val o="1da9b6" v="0"/>
+ <val o="1db7c7" v="0"/>
+ <val o="1dc5d5" v="0"/>
+ <val o="1dd3e6" v="0"/>
+ <val o="1de1f5" v="0"/>
+ <val o="1df006" v="0"/>
+ <val o="1dfe16" v="0"/>
+ <val o="1e0c26" v="0"/>
+ <val o="1e1a36" v="0"/>
+ <val o="1e2847" v="0"/>
+ <val o="1e3659" v="0"/>
+ <val o="1e4467" v="0"/>
+ <val o="1e5281" v="0"/>
+ <val o="1e6086" v="0"/>
+ <val o="1e6e96" v="0"/>
+ <val o="1e7ca6" v="0"/>
+ <val o="1e8ab5" v="0"/>
+ <val o="1e98c6" v="0"/>
+ <val o="1ea6d5" v="0"/>
+ <val o="1eb4e6" v="0"/>
+ <val o="1ec2f6" v="0"/>
+ <val o="1ed106" v="0"/>
+ <val o="1edf16" v="0"/>
+ <val o="1eed26" v="0"/>
+ <val o="1efb36" v="0"/>
+ <val o="1f0946" v="0"/>
+ <val o="1f1756" v="0"/>
+ <val o="1f2566" v="0"/>
+ <val o="1f3376" v="0"/>
+ <val o="1f4187" v="0"/>
+ <val o="1f4f96" v="0"/>
+ <val o="1f5da7" v="0"/>
+ <val o="1f6bb6" v="0"/>
+ <val o="1f79c7" v="0"/>
+ <val o="1f87d6" v="0"/>
+ <val o="1f95e7" v="0"/>
+ <val o="1fa401" v="0"/>
+ <val o="1fb204" v="0"/>
+ <val o="1fc016" v="0"/>
+ <val o="1fce25" v="0"/>
+ <val o="1fdc35" v="0"/>
+ <val o="1fea45" v="0"/>
+ <val o="1ff855" v="0"/>
+ <val o="200665" v="0"/>
+ <val o="201475" v="0"/>
+ <val o="202286" v="0"/>
+ <val o="203095" v="0"/>
+ <val o="203ea5" v="0"/>
+ <val o="204cb6" v="0"/>
+ <val o="205ac6" v="0"/>
+ <val o="2068d6" v="0"/>
+ <val o="2076e6" v="0"/>
+ <val o="2084f6" v="0"/>
+ <val o="209306" v="0"/>
+ <val o="20a116" v="0"/>
+ <val o="20af26" v="0"/>
+ <val o="20bd37" v="0"/>
+ <val o="20cb46" v="0"/>
+ <val o="20d957" v="0"/>
+ <val o="20e767" v="0"/>
+ <val o="20f581" v="0"/>
+ <val o="210386" v="0"/>
+ <val o="211194" v="0"/>
+ <val o="211fa5" v="0"/>
+ <val o="212db5" v="0"/>
+ <val o="213bc5" v="0"/>
+ <val o="2149d6" v="0"/>
+ <val o="2157e5" v="0"/>
+ <val o="2165f6" v="0"/>
+ <val o="217406" v="0"/>
+ <val o="218217" v="0"/>
+ <val o="219026" v="0"/>
+ <val o="219e39" v="0"/>
+ <val o="21ac46" v="0"/>
+ <val o="21ba57" v="0"/>
+ <val o="21c867" v="0"/>
+ <val o="21d677" v="0"/>
+ <val o="21e487" v="0"/>
+ <val o="21f296" v="0"/>
+ <val o="2200a6" v="0"/>
+ <val o="220eb7" v="0"/>
+ <val o="221cc6" v="0"/>
+ <val o="222ad7" v="0"/>
+ <val o="2238e7" v="0"/>
+ <val o="224701" v="0"/>
+ <val o="225505" v="0"/>
+ <val o="226315" v="0"/>
+ <val o="227125" v="0"/>
+ <val o="227f35" v="0"/>
+ <val o="228d45" v="0"/>
+ <val o="229b54" v="0"/>
+ <val o="22a965" v="0"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="0"/>
+ <val o="22d397" v="0"/>
+ <val o="22e1a6" v="0"/>
+ <val o="22efb6" v="0"/>
+ <val o="22fdc7" v="0"/>
+ <val o="230bd7" v="0"/>
+ <val o="2319e6" v="0"/>
+ <val o="2327f6" v="0"/>
+ <val o="23361b" v="0"/>
+ <val o="234416" v="0"/>
+ <val o="235226" v="0"/>
+ <val o="236037" v="0"/>
+ <val o="236e46" v="0"/>
+ <val o="237c57" v="0"/>
+ <val o="238a66" v="0"/>
+ <val o="239881" v="0"/>
+ <val o="23a685" v="0"/>
+ <val o="23b495" v="0"/>
+ <val o="23c2a4" v="0"/>
+ <val o="23d0b5" v="0"/>
+ <val o="23dec4" v="0"/>
+ <val o="23ecd5" v="0"/>
+ <val o="23fae4" v="0"/>
+ <val o="2408f6" v="0"/>
+ <val o="241706" v="0"/>
+ <val o="242518" v="0"/>
+ <val o="243325" v="0"/>
+ <val o="244137" v="0"/>
+ <val o="244f46" v="0"/>
+ <val o="246b66" v="0"/>
+ <val o="247976" v="0"/>
+ <val o="248786" v="0"/>
+ <val o="24957e" v="0"/>
+ <val o="24a38f" v="0"/>
+ <val o="24b19c" v="0"/>
+ <val o="24bfac" v="0"/>
+ <val o="24cdbc" v="0"/>
+ <val o="24dbcd" v="0"/>
+ <val o="24e9e5" v="0"/>
+ <val o="24f808" v="0"/>
+ <val o="250616" v="0"/>
+ <val o="251426" v="0"/>
+ <val o="252236" v="0"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="0"/>
+ <val o="254c67" v="0"/>
+ <val o="255a76" v="0"/>
+ <val o="256887" v="0"/>
+ <val o="257697" v="0"/>
+ <val o="2584a8" v="0"/>
+ <val o="2592b6" v="0"/>
+ <val o="25a0c7" v="0"/>
+ <val o="25aed7" v="0"/>
+ <val o="25bce7" v="0"/>
+ <val o="25caf8" v="0"/>
+ <val o="25d907" v="0"/>
+ <val o="25e718" v="0"/>
+ <val o="25f527" v="0"/>
+ <val o="260338" v="0"/>
+ <val o="261149" v="0"/>
+ <val o="261f59" v="0"/>
+ <val o="262d68" v="0"/>
+ <val o="263b83" v="0"/>
+ <val o="264986" v="0"/>
+ <val o="265795" v="0"/>
+ <val o="2665a6" v="0"/>
+ <val o="2673b5" v="0"/>
+ <val o="2681c6" v="0"/>
+ <val o="268fd5" v="0"/>
+ <val o="269de6" v="0"/>
+ <val o="26abf6" v="0"/>
+ <val o="26ba06" v="0"/>
+ <val o="26c817" v="0"/>
+ <val o="26d62b" v="0"/>
+ <val o="26e436" v="0"/>
+ <val o="26f247" v="0"/>
+ <val o="270057" v="0"/>
+ <val o="270e67" v="0"/>
+ <val o="271c77" v="0"/>
+ <val o="272a87" v="0"/>
+ <val o="273897" v="0"/>
+ <val o="2746a8" v="0"/>
+ <val o="2754b9" v="0"/>
+ <val o="2762c7" v="0"/>
+ <val o="2770d8" v="0"/>
+ <val o="277ee7" v="0"/>
+ </par>
+ <par memind="9804" h="3dc1a8de">
+ <val o="0" v="113.768"/>
+ <val o="e08" v="117.131"/>
+ <val o="1c32" v="118.794"/>
+ <val o="2a3c" v="120.362"/>
+ <val o="3835" v="118.504"/>
+ <val o="4645" v="116.275"/>
+ <val o="5455" v="109.258"/>
+ <val o="6265" v="121.127"/>
+ <val o="7075" v="118.849"/>
+ <val o="7e85" v="116.093"/>
+ <val o="8c96" v="120.108"/>
+ <val o="9aa5" v="120.84"/>
+ <val o="a8b6" v="124.045"/>
+ <val o="b6c5" v="124.042"/>
+ <val o="c4d7" v="117.713"/>
+ <val o="d30b" v="118.048"/>
+ <val o="e0f6" v="118.051"/>
+ <val o="ef06" v="118.259"/>
+ <val o="fd17" v="118.054"/>
+ <val o="10b27" v="120.844"/>
+ <val o="11937" v="121.925"/>
+ <val o="12746" v="119.353"/>
+ <val o="13556" v="120.867"/>
+ <val o="14366" v="125.48"/>
+ <val o="15181" v="127.434"/>
+ <val o="15f85" v="119.069"/>
+ <val o="16d95" v="120.904"/>
+ <val o="17ba4" v="120.974"/>
+ <val o="189b5" v="120.25"/>
+ <val o="197c4" v="118.291"/>
+ <val o="1a5d5" v="126.573"/>
+ <val o="1b3e6" v="125.637"/>
+ <val o="1c1f6" v="124.668"/>
+ <val o="1d005" v="121.393"/>
+ <val o="1de15" v="121.998"/>
+ <val o="1ec25" v="122.555"/>
+ <val o="1fa36" v="123.941"/>
+ <val o="20845" v="124.746"/>
+ <val o="21656" v="125.085"/>
+ <val o="22465" v="125.143"/>
+ <val o="23276" v="123.315"/>
+ <val o="24086" v="119.026"/>
+ <val o="24e99" v="118.683"/>
+ <val o="25ca7" v="119.815"/>
+ <val o="26ab7" v="119.25"/>
+ <val o="278c6" v="119.678"/>
+ <val o="286d6" v="121.708"/>
+ <val o="294e6" v="125.182"/>
+ <val o="2a301" v="125.217"/>
+ <val o="2b105" v="117.12"/>
+ <val o="2bf15" v="118.489"/>
+ <val o="2cd25" v="119.338"/>
+ <val o="2db35" v="119.392"/>
+ <val o="2e946" v="117.277"/>
+ <val o="2f755" v="112.967"/>
+ <val o="30566" v="124.775"/>
+ <val o="31375" v="124.409"/>
+ <val o="3219e" v="123.268"/>
+ <val o="32f96" v="122.956"/>
+ <val o="33da6" v="123.032"/>
+ <val o="34bb6" v="123.555"/>
+ <val o="359de" v="123.004"/>
+ <val o="367d6" v="122.125"/>
+ <val o="375e6" v="121.078"/>
+ <val o="3840e" v="117.701"/>
+ <val o="3921e" v="118.101"/>
+ <val o="3a016" v="117.771"/>
+ <val o="3ae27" v="121.393"/>
+ <val o="3bc36" v="120.16"/>
+ <val o="3ca47" v="119.387"/>
+ <val o="3d856" v="119.887"/>
+ <val o="3e667" v="122.64"/>
+ <val o="3f481" v="125.954"/>
+ <val o="40285" v="123.51"/>
+ <val o="41095" v="124.328"/>
+ <val o="41ea5" v="124.639"/>
+ <val o="42cb5" v="124.448"/>
+ <val o="43ac5" v="122.434"/>
+ <val o="448d5" v="118.623"/>
+ <val o="456e6" v="122.169"/>
+ <val o="464f5" v="120.979"/>
+ <val o="480ff" v="118.358"/>
+ <val o="48f0e" v="117.271"/>
+ <val o="49d1d" v="118.68"/>
+ <val o="4ab46" v="118.562"/>
+ <val o="4b955" v="116.842"/>
+ <val o="4c769" v="115.913"/>
+ <val o="4d577" v="118.894"/>
+ <val o="4e387" v="118.59"/>
+ <val o="4f196" v="116.293"/>
+ <val o="4ffa6" v="118.299"/>
+ <val o="50dd0" v="120.233"/>
+ <val o="51bc6" v="118.495"/>
+ <val o="529d6" v="120.406"/>
+ <val o="537e7" v="122.644"/>
+ <val o="54600" v="125.528"/>
+ <val o="55406" v="121.746"/>
+ <val o="56215" v="122.642"/>
+ <val o="57026" v="122.581"/>
+ <val o="57e36" v="122.623"/>
+ <val o="58c46" v="120.431"/>
+ <val o="59a70" v="121.329"/>
+ <val o="5a867" v="120.651"/>
+ <val o="5b676" v="118.876"/>
+ <val o="5c487" v="115.661"/>
+ <val o="5d296" v="119.835"/>
+ <val o="5e0a9" v="120.34"/>
+ <val o="5eeb8" v="119.439"/>
+ <val o="5fcc6" v="118.245"/>
+ <val o="60ad7" v="117.004"/>
+ <val o="618e7" v="117.165"/>
+ <val o="626f7" v="119.95"/>
+ <val o="63507" v="117.149"/>
+ <val o="64317" v="118.541"/>
+ <val o="65127" v="119.822"/>
+ <val o="65f37" v="121.013"/>
+ <val o="66d46" v="121.577"/>
+ <val o="67b57" v="120.289"/>
+ <val o="68967" v="122.62"/>
+ <val o="69782" v="119.093"/>
+ <val o="6a586" v="120.493"/>
+ <val o="6b395" v="121.919"/>
+ <val o="6c1a6" v="122.218"/>
+ <val o="6cfb5" v="121.022"/>
+ <val o="6ddc6" v="118.433"/>
+ <val o="6ebd6" v="115.978"/>
+ <val o="6f9e6" v="120.971"/>
+ <val o="707f6" v="119.234"/>
+ <val o="71607" v="118.015"/>
+ <val o="72417" v="117.922"/>
+ <val o="73227" v="117.566"/>
+ <val o="74037" v="121.469"/>
+ <val o="74e47" v="120.514"/>
+ <val o="75c57" v="118.485"/>
+ <val o="76a63" v="117.889"/>
+ <val o="77873" v="117.946"/>
+ <val o="78680" v="113.611"/>
+ <val o="7948f" v="116.583"/>
+ <val o="7a29f" v="119.306"/>
+ <val o="7b0af" v="118.802"/>
+ <val o="7bebf" v="120.799"/>
+ <val o="7cccf" v="120.857"/>
+ <val o="7dadf" v="121.594"/>
+ <val o="7e8fa" v="121.421"/>
+ <val o="7f70a" v="123.74"/>
+ <val o="8051a" v="125.189"/>
+ <val o="8132a" v="125.673"/>
+ <val o="8213a" v="124.777"/>
+ <val o="82f4a" v="122.432"/>
+ <val o="83d5a" v="120.011"/>
+ <val o="84b6a" v="118.622"/>
+ <val o="8597a" v="118.559"/>
+ <val o="8678b" v="117.524"/>
+ <val o="8759b" v="117.257"/>
+ <val o="883ac" v="119.909"/>
+ <val o="891bb" v="120.921"/>
+ <val o="89fca" v="119.96"/>
+ <val o="8adda" v="118.481"/>
+ <val o="8bbeb" v="118.605"/>
+ <val o="8c9fc" v="118.282"/>
+ <val o="8d80b" v="118.663"/>
+ <val o="8e61a" v="117.009"/>
+ <val o="8f42a" v="117.766"/>
+ <val o="9023a" v="119.722"/>
+ <val o="9104a" v="120.299"/>
+ <val o="91e5a" v="118.366"/>
+ <val o="92c6a" v="122.529"/>
+ <val o="93a84" v="124.833"/>
+ <val o="94885" v="123.06"/>
+ <val o="95694" v="122.396"/>
+ <val o="964a5" v="122.792"/>
+ <val o="972b4" v="122.232"/>
+ <val o="980c5" v="119.79"/>
+ <val o="98ed4" v="122.86"/>
+ <val o="99ce5" v="119.012"/>
+ <val o="9aaf5" v="118.321"/>
+ <val o="9b906" v="115.456"/>
+ <val o="9c716" v="119.374"/>
+ <val o="9d526" v="120.344"/>
+ <val o="9e336" v="119.254"/>
+ <val o="9f145" v="117.83"/>
+ <val o="9ff56" v="117.001"/>
+ <val o="a0d65" v="116.782"/>
+ <val o="a1b77" v="116.803"/>
+ <val o="a2986" v="118.75"/>
+ <val o="a3795" v="118.358"/>
+ <val o="a45a7" v="119.493"/>
+ <val o="a53b6" v="119.698"/>
+ <val o="a61c7" v="119.908"/>
+ <val o="a6fd6" v="120.675"/>
+ <val o="a7e00" v="122.754"/>
+ <val o="a8c00" v="125.385"/>
+ <val o="a9a05" v="118.214"/>
+ <val o="aa815" v="119.329"/>
+ <val o="ab625" v="120.11"/>
+ <val o="ac435" v="119.689"/>
+ <val o="ad245" v="117.12"/>
+ <val o="ae055" v="114.729"/>
+ <val o="aee65" v="120.871"/>
+ <val o="afc75" v="119.177"/>
+ <val o="b0a85" v="116.699"/>
+ <val o="b26a6" v="116.768"/>
+ <val o="b34b6" v="118.075"/>
+ <val o="b42c6" v="115.571"/>
+ <val o="b50d6" v="115.867"/>
+ <val o="b5ee7" v="114.309"/>
+ <val o="b6cf6" v="122.787"/>
+ <val o="b7b07" v="118.904"/>
+ <val o="b8917" v="118.531"/>
+ <val o="b9728" v="119.438"/>
+ <val o="ba537" v="120.908"/>
+ <val o="bb347" v="119.844"/>
+ <val o="bc157" v="120.575"/>
+ <val o="bcf67" v="123.212"/>
+ <val o="bdd81" v="118.712"/>
+ <val o="beb86" v="118.316"/>
+ <val o="bf995" v="118.859"/>
+ <val o="c07a6" v="120.092"/>
+ <val o="c15b5" v="119.532"/>
+ <val o="c23c6" v="118.179"/>
+ <val o="c31d5" v="115.731"/>
+ <val o="c3fe6" v="117.671"/>
+ <val o="c4df5" v="116.046"/>
+ <val o="c5c06" v="117.416"/>
+ <val o="c6a16" v="117.578"/>
+ <val o="c7826" v="116.758"/>
+ <val o="c8636" v="118.319"/>
+ <val o="c9446" v="118.355"/>
+ <val o="ca256" v="118.136"/>
+ <val o="cb066" v="117.225"/>
+ <val o="cbe76" v="122.659"/>
+ <val o="ccc87" v="118.547"/>
+ <val o="cda96" v="116.635"/>
+ <val o="ce8a8" v="118.105"/>
+ <val o="cf6b7" v="118.503"/>
+ <val o="d04c8" v="119.547"/>
+ <val o="d12d7" v="121.4"/>
+ <val o="d20e7" v="123.396"/>
+ <val o="d2f02" v="126.068"/>
+ <val o="d3d05" v="119.33"/>
+ <val o="d4b15" v="120.524"/>
+ <val o="d5926" v="120.742"/>
+ <val o="d6735" v="119.548"/>
+ <val o="d7546" v="117.358"/>
+ <val o="d8355" v="124.267"/>
+ <val o="d9166" v="122.388"/>
+ <val o="d9f75" v="120.774"/>
+ <val o="dad87" v="117.345"/>
+ <val o="dbb97" v="116.698"/>
+ <val o="dc9a8" v="116.798"/>
+ <val o="dd7b7" v="118.219"/>
+ <val o="de5c6" v="117.879"/>
+ <val o="df3d7" v="117.287"/>
+ <val o="e01d7" v="117.42"/>
+ <val o="e0fe5" v="116.798"/>
+ <val o="e1df5" v="117.184"/>
+ <val o="e2c04" v="119.665"/>
+ <val o="e3a14" v="121.033"/>
+ <val o="e4824" v="120.839"/>
+ <val o="e5634" v="122.456"/>
+ <val o="e6444" v="120.534"/>
+ <val o="e7255" v="122.766"/>
+ <val o="e806f" v="123.735"/>
+ <val o="e8e7f" v="116.654"/>
+ <val o="e9c8e" v="118.111"/>
+ <val o="eaa9f" v="118.441"/>
+ <val o="eb8ae" v="117.463"/>
+ <val o="ec6bf" v="113.549"/>
+ <val o="ed4ce" v="123.596"/>
+ <val o="ee2df" v="120.709"/>
+ <val o="ef0ef" v="118.94"/>
+ <val o="eff01" v="116.002"/>
+ <val o="f0d10" v="117.741"/>
+ <val o="f1b20" v="117.49"/>
+ <val o="f2930" v="121.433"/>
+ <val o="f3740" v="117.735"/>
+ <val o="f4551" v="118.165"/>
+ <val o="f5361" v="117.839"/>
+ <val o="f6172" v="117.685"/>
+ <val o="f6f80" v="117.518"/>
+ <val o="f7d91" v="119.385"/>
+ <val o="f8ba1" v="121.202"/>
+ <val o="f99b1" v="120.254"/>
+ <val o="fa7c0" v="118.336"/>
+ <val o="fb5d1" v="118.267"/>
+ <val o="fc3e0" v="123.088"/>
+ <val o="fd1fb" v="123.183"/>
+ <val o="fe00b" v="126.377"/>
+ <val o="fee1c" v="123.772"/>
+ <val o="ffc2c" v="123.634"/>
+ <val o="100a3b" v="123.008"/>
+ <val o="10184c" v="121.382"/>
+ <val o="10265b" v="117.696"/>
+ <val o="10346c" v="117.901"/>
+ <val o="10427b" v="119.404"/>
+ <val o="10508d" v="117.646"/>
+ <val o="105e9d" v="118.147"/>
+ <val o="106cad" v="117.802"/>
+ <val o="107abd" v="120.151"/>
+ <val o="1088cd" v="119.733"/>
+ <val o="1096de" v="119.096"/>
+ <val o="10a4ed" v="119.291"/>
+ <val o="10b2fe" v="118.973"/>
+ <val o="10c10d" v="116.336"/>
+ <val o="10cf1e" v="118.171"/>
+ <val o="10dd2e" v="119.082"/>
+ <val o="10eb66" v="120.953"/>
+ <val o="10f94e" v="121.41"/>
+ <val o="11075e" v="119.088"/>
+ <val o="11156d" v="120.941"/>
+ <val o="112388" v="123.699"/>
+ <val o="113187" v="122.48"/>
+ <val o="113fb0" v="123.378"/>
+ <val o="114da6" v="123.312"/>
+ <val o="115bb6" v="123.217"/>
+ <val o="1169c6" v="120.961"/>
+ <val o="1177d6" v="118.076"/>
+ <val o="1185e8" v="118.573"/>
+ <val o="1193f7" v="117.978"/>
+ <val o="11a208" v="120.019"/>
+ <val o="11b017" v="121.662"/>
+ <val o="11be2f" v="122.268"/>
+ <val o="11cc37" v="122.317"/>
+ <val o="11da47" v="121.934"/>
+ <val o="11e857" v="120.776"/>
+ <val o="11f667" v="121.889"/>
+ <val o="120578" v="121.064"/>
+ <val o="121386" v="116.824"/>
+ <val o="122196" v="117.556"/>
+ <val o="122fa6" v="118.784"/>
+ <val o="123db5" v="120.77"/>
+ <val o="124bc5" v="122.565"/>
+ <val o="1259d5" v="120.263"/>
+ <val o="1267e4" v="122.729"/>
+ <val o="127600" v="124.561"/>
+ <val o="128305" v="125.237"/>
+ <val o="129115" v="125.344"/>
+ <val o="129f25" v="125.492"/>
+ <val o="12ad35" v="124.67"/>
+ <val o="12bb45" v="122.819"/>
+ <val o="12c954" v="121.713"/>
+ <val o="12d766" v="120.883"/>
+ <val o="12e575" v="119.85"/>
+ <val o="12f386" v="117.176"/>
+ <val o="130196" v="117.447"/>
+ <val o="130fa6" v="118.679"/>
+ <val o="131db7" v="120.016"/>
+ <val o="132bc5" v="119.959"/>
+ <val o="1339d4" v="0.109"/>
+ <val o="1347e5" v="0.109"/>
+ <val o="1355f4" v="0.108"/>
+ <val o="136404" v="0.106"/>
+ <val o="137214" v="0.106"/>
+ <val o="138024" v="0.106"/>
+ <val o="138e33" v="0.108"/>
+ <val o="139c44" v="0.109"/>
+ <val o="13aa54" v="0.108"/>
+ <val o="13b865" v="0.109"/>
+ <val o="13c67e" v="0.101"/>
+ <val o="13d48e" v="0.104"/>
+ <val o="13e29e" v="0.106"/>
+ <val o="13f0ae" v="0.106"/>
+ <val o="13febf" v="0.104"/>
+ <val o="140ccf" v="0.102"/>
+ <val o="141adf" v="0.104"/>
+ <val o="1428ef" v="0.108"/>
+ <val o="1436ff" v="0.107"/>
+ <val o="14450f" v="0.107"/>
+ <val o="14531f" v="0.107"/>
+ <val o="146130" v="0.108"/>
+ <val o="146f40" v="0.11"/>
+ <val o="147d44" v="0.108"/>
+ <val o="148b57" v="0.108"/>
+ <val o="149965" v="0.108"/>
+ <val o="14a775" v="0.106"/>
+ <val o="14b584" v="0.11"/>
+ <val o="14c397" v="0.106"/>
+ <val o="14d1a4" v="0.107"/>
+ <val o="14dfb6" v="0.108"/>
+ <val o="14edc5" v="0.11"/>
+ <val o="14fbd5" v="0.112"/>
+ <val o="1509e5" v="0.112"/>
+ <val o="1517ff" v="0.115"/>
+ <val o="152605" v="0.107"/>
+ <val o="153415" v="0.109"/>
+ <val o="154225" v="0.11"/>
+ <val o="155035" v="0.109"/>
+ <val o="155e45" v="0.107"/>
+ <val o="156c55" v="0.104"/>
+ <val o="157a65" v="0.107"/>
+ <val o="158875" v="0.107"/>
+ <val o="159686" v="0.106"/>
+ <val o="15a495" v="0.107"/>
+ <val o="15b2a6" v="0.108"/>
+ <val o="15c0b6" v="0.109"/>
+ <val o="15cec6" v="0.109"/>
+ <val o="15dcd5" v="0.109"/>
+ <val o="15eae6" v="0.108"/>
+ <val o="15f8f5" v="0.104"/>
+ <val o="160706" v="0.11"/>
+ <val o="161517" v="0.109"/>
+ <val o="162326" v="0.11"/>
+ <val o="163137" v="0.111"/>
+ <val o="163f46" v="0.109"/>
+ <val o="164d57" v="0.11"/>
+ <val o="165b67" v="0.112"/>
+ <val o="166982" v="0.111"/>
+ <val o="167786" v="0.112"/>
+ <val o="168596" v="0.112"/>
+ <val o="1693a6" v="0.113"/>
+ <val o="16a1b5" v="0.112"/>
+ <val o="16afc6" v="0.11"/>
+ <val o="16bdd5" v="0.108"/>
+ <val o="16cbe6" v="0.107"/>
+ <val o="16d9f6" v="0.112"/>
+ <val o="16e807" v="0.11"/>
+ <val o="16f616" v="0.11"/>
+ <val o="170429" v="0.111"/>
+ <val o="171236" v="0.112"/>
+ <val o="172047" v="0.112"/>
+ <val o="172e57" v="0.111"/>
+ <val o="173c67" v="0.111"/>
+ <val o="174a77" v="0.11"/>
+ <val o="175887" v="0.108"/>
+ <val o="176694" v="117.84"/>
+ <val o="1774a3" v="119.199"/>
+ <val o="1782b3" v="120.226"/>
+ <val o="1790c5" v="120.924"/>
+ <val o="179ed4" v="124.038"/>
+ <val o="17ace4" v="126.747"/>
+ <val o="17bafd" v="128.364"/>
+ <val o="17c90f" v="126.55"/>
+ <val o="17d71e" v="126.522"/>
+ <val o="17e52f" v="126.893"/>
+ <val o="17f33f" v="126.114"/>
+ <val o="18014f" v="124.219"/>
+ <val o="180f5f" v="123.691"/>
+ <val o="181d6e" v="124.723"/>
+ <val o="182b7f" v="124.667"/>
+ <val o="18398f" v="123.666"/>
+ <val o="1847a1" v="123.337"/>
+ <val o="1855af" v="124.042"/>
+ <val o="1863c0" v="125.92"/>
+ <val o="1871cf" v="125.144"/>
+ <val o="187fe0" v="124.769"/>
+ <val o="188def" v="124.549"/>
+ <val o="189c00" v="123.483"/>
+ <val o="18b80d" v="116.63"/>
+ <val o="18c61c" v="120.461"/>
+ <val o="18d42c" v="121.228"/>
+ <val o="18e23b" v="121.154"/>
+ <val o="18f04b" v="123.409"/>
+ <val o="18fe5e" v="125.403"/>
+ <val o="190c76" v="122.716"/>
+ <val o="191a86" v="124.385"/>
+ <val o="192896" v="126.046"/>
+ <val o="1936a6" v="126.166"/>
+ <val o="1944b7" v="125.26"/>
+ <val o="1952c6" v="123.29"/>
+ <val o="1960d7" v="120.499"/>
+ <val o="196ee6" v="120.705"/>
+ <val o="197cf8" v="120.492"/>
+ <val o="198b0f" v="119.996"/>
+ <val o="19991f" v="120.265"/>
+ <val o="19b541" v="122.232"/>
+ <val o="19c34d" v="121.49"/>
+ <val o="19d15e" v="120.704"/>
+ <val o="19df80" v="120.614"/>
+ <val o="19ed90" v="119.839"/>
+ <val o="19eebe" v="119.685"/>
+ <val o="19fb8e" v="115.593"/>
+ <val o="1a09a0" v="118.86"/>
+ <val o="1a17ae" v="119.97"/>
+ <val o="1a25be" v="121.369"/>
+ <val o="1a33cd" v="121.096"/>
+ <val o="1a41dd" v="122.451"/>
+ <val o="1a4fed" v="125.765"/>
+ <val o="1a5e08" v="126.302"/>
+ <val o="1a6c05" v="124.495"/>
+ <val o="1a7a15" v="125.659"/>
+ <val o="1a8826" v="125.773"/>
+ <val o="1a9637" v="124.464"/>
+ <val o="1aa445" v="123.167"/>
+ <val o="1ab255" v="121.137"/>
+ <val o="1ac065" v="123.677"/>
+ <val o="1ace75" v="123.569"/>
+ <val o="1adc87" v="122.254"/>
+ <val o="1aea96" v="121.794"/>
+ <val o="1af8a7" v="122.088"/>
+ <val o="1b06b7" v="123.87"/>
+ <val o="1b14c6" v="123.556"/>
+ <val o="1c7460" v="119.682"/>
+ <val o="1c8270" v="119.676"/>
+ <val o="1c907e" v="118.821"/>
+ <val o="1c9e8f" v="119.836"/>
+ <val o="1caca2" v="121.192"/>
+ <val o="1cbab1" v="121.685"/>
+ <val o="1cc8c1" v="117.874"/>
+ <val o="1cd6d0" v="118.762"/>
+ <val o="1ce4de" v="120.263"/>
+ <val o="1cf2f0" v="122.468"/>
+ <val o="1d0109" v="124.536"/>
+ <val o="1d0f06" v="122.598"/>
+ <val o="1d1d15" v="123.2"/>
+ <val o="1d2b25" v="123.218"/>
+ <val o="1d3935" v="122.202"/>
+ <val o="1d4745" v="121.424"/>
+ <val o="1d5555" v="120.888"/>
+ <val o="1d6366" v="122.743"/>
+ <val o="1d7175" v="123.078"/>
+ <val o="1d7f86" v="122.237"/>
+ <val o="1d8d95" v="120.858"/>
+ <val o="1d9ba6" v="121.231"/>
+ <val o="1da9b6" v="122.185"/>
+ <val o="1db7c7" v="122.648"/>
+ <val o="1dc5d5" v="122.992"/>
+ <val o="1dd3e6" v="122.482"/>
+ <val o="1de1f5" v="118.707"/>
+ <val o="1df006" v="117.367"/>
+ <val o="1dfe16" v="115.714"/>
+ <val o="1e0c26" v="117.74"/>
+ <val o="1e1a36" v="119.048"/>
+ <val o="1e2847" v="120.179"/>
+ <val o="1e3659" v="119.949"/>
+ <val o="1e4467" v="120.906"/>
+ <val o="1e5281" v="117.251"/>
+ <val o="1e6086" v="120.118"/>
+ <val o="1e6e96" v="121.521"/>
+ <val o="1e7ca6" v="122.188"/>
+ <val o="1e8ab5" v="122.212"/>
+ <val o="1e98c6" v="121.531"/>
+ <val o="1ea6d5" v="119.981"/>
+ <val o="1eb4e6" v="119.977"/>
+ <val o="1ec2f6" v="122.939"/>
+ <val o="1ed106" v="122.289"/>
+ <val o="1edf16" v="122.05"/>
+ <val o="1eed26" v="122.271"/>
+ <val o="1efb36" v="122.856"/>
+ <val o="1f0946" v="122.611"/>
+ <val o="1f1756" v="121.148"/>
+ <val o="1f2566" v="120.864"/>
+ <val o="1f3376" v="119.609"/>
+ <val o="1f4187" v="116.101"/>
+ <val o="1f4f96" v="119.165"/>
+ <val o="1f5da7" v="119.287"/>
+ <val o="1f6bb6" v="120.208"/>
+ <val o="1f79c7" v="118.775"/>
+ <val o="1f87d6" v="122.222"/>
+ <val o="1f95e7" v="123.288"/>
+ <val o="1fa401" v="126.026"/>
+ <val o="1fb204" v="124.828"/>
+ <val o="1fc016" v="125.769"/>
+ <val o="1fce25" v="125.218"/>
+ <val o="1fdc35" v="124.795"/>
+ <val o="1fea45" v="122.393"/>
+ <val o="1ff855" v="120.523"/>
+ <val o="200665" v="117.319"/>
+ <val o="201475" v="118.772"/>
+ <val o="202286" v="118.808"/>
+ <val o="203095" v="119.686"/>
+ <val o="203ea5" v="119.99"/>
+ <val o="204cb6" v="122.708"/>
+ <val o="205ac6" v="120.762"/>
+ <val o="2068d6" v="119.92"/>
+ <val o="2076e6" v="119.129"/>
+ <val o="2084f6" v="117.091"/>
+ <val o="209306" v="121.219"/>
+ <val o="20a116" v="120.28"/>
+ <val o="20af26" v="119.69"/>
+ <val o="20bd37" v="120.677"/>
+ <val o="20cb46" v="118.756"/>
+ <val o="20d957" v="119.608"/>
+ <val o="20e767" v="121.059"/>
+ <val o="20f581" v="123.573"/>
+ <val o="210386" v="125.976"/>
+ <val o="211194" v="123.926"/>
+ <val o="211fa5" v="123.888"/>
+ <val o="212db5" v="123.08"/>
+ <val o="213bc5" v="121.69"/>
+ <val o="2149d6" v="117.916"/>
+ <val o="2157e5" v="116.014"/>
+ <val o="2165f6" v="121.935"/>
+ <val o="217406" v="119.675"/>
+ <val o="218217" v="118.8"/>
+ <val o="219026" v="119.649"/>
+ <val o="219e39" v="119.715"/>
+ <val o="21ac46" v="118.622"/>
+ <val o="21ba57" v="118.459"/>
+ <val o="21c867" v="117.339"/>
+ <val o="21d677" v="122.095"/>
+ <val o="21e487" v="119.556"/>
+ <val o="21f296" v="119.761"/>
+ <val o="2200a6" v="120.53"/>
+ <val o="220eb7" v="121.428"/>
+ <val o="221cc6" v="118.003"/>
+ <val o="222ad7" v="120.228"/>
+ <val o="2238e7" v="123.33"/>
+ <val o="224701" v="125.861"/>
+ <val o="225505" v="118.788"/>
+ <val o="226315" v="119.106"/>
+ <val o="227125" v="119.116"/>
+ <val o="227f35" v="116.908"/>
+ <val o="228d45" v="115.642"/>
+ <val o="229b54" v="122.013"/>
+ <val o="22a965" v="119.234"/>
+ <val o="22b776" v="119.31"/>
+ <val o="22c586" v="118.566"/>
+ <val o="22d397" v="118.243"/>
+ <val o="22e1a6" v="118.579"/>
+ <val o="22efb6" v="120.288"/>
+ <val o="22fdc7" v="119.996"/>
+ <val o="230bd7" v="119.249"/>
+ <val o="2319e6" v="118.866"/>
+ <val o="2327f6" v="117.741"/>
+ <val o="23361b" v="118.543"/>
+ <val o="234416" v="117.538"/>
+ <val o="235226" v="118.709"/>
+ <val o="236037" v="119.94"/>
+ <val o="236e46" v="117.668"/>
+ <val o="237c57" v="119.159"/>
+ <val o="238a66" v="120.771"/>
+ <val o="239881" v="120.234"/>
+ <val o="23a685" v="121.624"/>
+ <val o="23b495" v="122.272"/>
+ <val o="23c2a4" v="122.422"/>
+ <val o="23d0b5" v="121.687"/>
+ <val o="23dec4" v="120.361"/>
+ <val o="23ecd5" v="118.751"/>
+ <val o="23fae4" v="120.028"/>
+ <val o="2408f6" v="117.974"/>
+ <val o="241706" v="117.305"/>
+ <val o="242518" v="117.71"/>
+ <val o="243325" v="118.193"/>
+ <val o="244137" v="119.542"/>
+ <val o="244f46" v="118.741"/>
+ <val o="246b66" v="118.295"/>
+ <val o="247976" v="117.534"/>
+ <val o="248786" v="114.472"/>
+ <val o="24957e" v="117.357"/>
+ <val o="24a38f" v="118.851"/>
+ <val o="24b19c" v="120.137"/>
+ <val o="24bfac" v="119.349"/>
+ <val o="24cdbc" v="123.226"/>
+ <val o="24dbcd" v="122.921"/>
+ <val o="24e9e5" v="124.273"/>
+ <val o="24f808" v="123.515"/>
+ <val o="250616" v="124.182"/>
+ <val o="251426" v="124.27"/>
+ <val o="252236" v="122.827"/>
+ <val o="253047" v="121.801"/>
+ <val o="253e56" v="119.514"/>
+ <val o="254c67" v="118.922"/>
+ <val o="255a76" v="118.86"/>
+ <val o="256887" v="117.264"/>
+ <val o="257697" v="118.022"/>
+ <val o="2584a8" v="116.819"/>
+ <val o="2592b6" v="118.384"/>
+ <val o="25a0c7" v="119.276"/>
+ <val o="25aed7" v="118.81"/>
+ <val o="25bce7" v="118.676"/>
+ <val o="25caf8" v="118.108"/>
+ <val o="25d907" v="119.625"/>
+ <val o="25e718" v="119.042"/>
+ <val o="25f527" v="119.638"/>
+ <val o="260338" v="120.355"/>
+ <val o="261149" v="118.728"/>
+ <val o="261f59" v="119.777"/>
+ <val o="262d68" v="122.621"/>
+ <val o="263b83" v="120.494"/>
+ <val o="264986" v="122.335"/>
+ <val o="265795" v="123.001"/>
+ <val o="2665a6" v="123.827"/>
+ <val o="2673b5" v="122.939"/>
+ <val o="2681c6" v="122.398"/>
+ <val o="268fd5" v="121.212"/>
+ <val o="269de6" v="120.844"/>
+ <val o="26abf6" v="120.054"/>
+ <val o="26ba06" v="118.297"/>
+ <val o="26c817" v="117.795"/>
+ <val o="26d62b" v="117.996"/>
+ <val o="26e436" v="119.287"/>
+ <val o="26f247" v="118.815"/>
+ <val o="270057" v="118.955"/>
+ <val o="270e67" v="118.449"/>
+ <val o="271c77" v="119.157"/>
+ <val o="272a87" v="120.124"/>
+ <val o="273897" v="119.858"/>
+ <val o="2746a8" v="120.668"/>
+ <val o="2754b9" v="121.067"/>
+ <val o="2762c7" v="118.265"/>
+ <val o="2770d8" v="120.308"/>
+ <val o="277ee7" v="122.851"/>
+ </par>
+ <par memind="440600" h="3dc1a8de">
+ <val o="0" v="-1275"/>
+ <val o="e08" v="-1482"/>
+ <val o="1c32" v="-1562"/>
+ <val o="2a3c" v="-1643"/>
+ <val o="3835" v="-1446"/>
+ <val o="4645" v="-1276"/>
+ <val o="5455" v="-1049"/>
+ <val o="6265" v="-1694"/>
+ <val o="7075" v="-1760"/>
+ <val o="7e85" v="-1662"/>
+ <val o="8c96" v="-2067"/>
+ <val o="9aa5" v="-1992"/>
+ <val o="a8b6" v="-1928"/>
+ <val o="b6c5" v="-2018"/>
+ <val o="c4d7" v="-7"/>
+ <val o="d30b" v="-6"/>
+ <val o="e0f6" v="-7"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="-7"/>
+ <val o="11937" v="-7"/>
+ <val o="12746" v="-7"/>
+ <val o="13556" v="-7"/>
+ <val o="14366" v="-7"/>
+ <val o="15181" v="-8"/>
+ <val o="15f85" v="-7"/>
+ <val o="16d95" v="-7"/>
+ <val o="17ba4" v="-7"/>
+ <val o="189b5" v="-7"/>
+ <val o="197c4" v="-7"/>
+ <val o="1a5d5" v="-7"/>
+ <val o="1b3e6" v="-7"/>
+ <val o="1c1f6" v="-7"/>
+ <val o="1d005" v="-7"/>
+ <val o="1de15" v="-7"/>
+ <val o="1ec25" v="-7"/>
+ <val o="1fa36" v="-7"/>
+ <val o="20845" v="-7"/>
+ <val o="21656" v="-7"/>
+ <val o="22465" v="-7"/>
+ <val o="23276" v="-7"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="-7"/>
+ <val o="25ca7" v="-7"/>
+ <val o="26ab7" v="-7"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="-7"/>
+ <val o="294e6" v="-7"/>
+ <val o="2a301" v="-7"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="-7"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="-7"/>
+ <val o="31375" v="-7"/>
+ <val o="3219e" v="-7"/>
+ <val o="32f96" v="-7"/>
+ <val o="33da6" v="-7"/>
+ <val o="34bb6" v="-7"/>
+ <val o="359de" v="-7"/>
+ <val o="367d6" v="-7"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="-7"/>
+ <val o="3bc36" v="-7"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="-7"/>
+ <val o="3e667" v="-7"/>
+ <val o="3f481" v="-7"/>
+ <val o="40285" v="-7"/>
+ <val o="41095" v="-7"/>
+ <val o="41ea5" v="-7"/>
+ <val o="42cb5" v="-7"/>
+ <val o="43ac5" v="-7"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="-7"/>
+ <val o="464f5" v="-7"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="-7"/>
+ <val o="54600" v="-7"/>
+ <val o="55406" v="-7"/>
+ <val o="56215" v="-7"/>
+ <val o="57026" v="-7"/>
+ <val o="57e36" v="-7"/>
+ <val o="58c46" v="-7"/>
+ <val o="59a70" v="-7"/>
+ <val o="5a867" v="-7"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="-7"/>
+ <val o="5eeb8" v="-7"/>
+ <val o="5fcc6" v="-7"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="-7"/>
+ <val o="65f37" v="-7"/>
+ <val o="66d46" v="-7"/>
+ <val o="67b57" v="-7"/>
+ <val o="68967" v="-7"/>
+ <val o="69782" v="-7"/>
+ <val o="6a586" v="-7"/>
+ <val o="6b395" v="-7"/>
+ <val o="6c1a6" v="-7"/>
+ <val o="6cfb5" v="-7"/>
+ <val o="6ddc6" v="-7"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="-7"/>
+ <val o="707f6" v="-7"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="-7"/>
+ <val o="74e47" v="-7"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="-7"/>
+ <val o="7bebf" v="-7"/>
+ <val o="7cccf" v="-7"/>
+ <val o="7dadf" v="-7"/>
+ <val o="7e8fa" v="-7"/>
+ <val o="7f70a" v="-7"/>
+ <val o="8051a" v="-7"/>
+ <val o="8132a" v="-7"/>
+ <val o="8213a" v="-7"/>
+ <val o="82f4a" v="-7"/>
+ <val o="83d5a" v="-7"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="-7"/>
+ <val o="891bb" v="-7"/>
+ <val o="89fca" v="-7"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="-7"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="-7"/>
+ <val o="93a84" v="-7"/>
+ <val o="94885" v="-7"/>
+ <val o="95694" v="-7"/>
+ <val o="964a5" v="-7"/>
+ <val o="972b4" v="-7"/>
+ <val o="980c5" v="-7"/>
+ <val o="98ed4" v="-7"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="-7"/>
+ <val o="9c716" v="-7"/>
+ <val o="9d526" v="-7"/>
+ <val o="9e336" v="-7"/>
+ <val o="9f145" v="-7"/>
+ <val o="9ff56" v="-7"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="-1845"/>
+ <val o="a2986" v="-631"/>
+ <val o="a3795" v="1564"/>
+ <val o="a45a7" v="-66"/>
+ <val o="a53b6" v="-393"/>
+ <val o="a61c7" v="-691"/>
+ <val o="a6fd6" v="-883"/>
+ <val o="a7e00" v="-1575"/>
+ <val o="a8c00" v="-2209"/>
+ <val o="a9a05" v="109"/>
+ <val o="aa815" v="-420"/>
+ <val o="ab625" v="-859"/>
+ <val o="ac435" v="-628"/>
+ <val o="ad245" v="516"/>
+ <val o="ae055" v="1839"/>
+ <val o="aee65" v="293"/>
+ <val o="afc75" v="1185"/>
+ <val o="b0a85" v="3946"/>
+ <val o="b26a6" v="4230"/>
+ <val o="b34b6" v="3689"/>
+ <val o="b42c6" v="248"/>
+ <val o="b50d6" v="430"/>
+ <val o="b5ee7" v="1026"/>
+ <val o="b6cf6" v="-526"/>
+ <val o="b7b07" v="-258"/>
+ <val o="b8917" v="-65"/>
+ <val o="b9728" v="-489"/>
+ <val o="ba537" v="-842"/>
+ <val o="bb347" v="1082"/>
+ <val o="bc157" v="310"/>
+ <val o="bcf67" v="-1112"/>
+ <val o="bdd81" v="3632"/>
+ <val o="beb86" v="513"/>
+ <val o="bf995" v="214"/>
+ <val o="c07a6" v="-292"/>
+ <val o="c15b5" v="-127"/>
+ <val o="c23c6" v="495"/>
+ <val o="c31d5" v="1815"/>
+ <val o="c3fe6" v="818"/>
+ <val o="c4df5" v="1539"/>
+ <val o="c5c06" v="680"/>
+ <val o="c6a16" v="712"/>
+ <val o="c7826" v="1280"/>
+ <val o="c8636" v="397"/>
+ <val o="c9446" v="493"/>
+ <val o="ca256" v="250"/>
+ <val o="cb066" v="785"/>
+ <val o="cbe76" v="-201"/>
+ <val o="ccc87" v="2156"/>
+ <val o="cda96" v="2937"/>
+ <val o="ce8a8" v="2107"/>
+ <val o="cf6b7" v="2824"/>
+ <val o="d04c8" v="2269"/>
+ <val o="d12d7" v="1441"/>
+ <val o="d20e7" v="-297"/>
+ <val o="d2f02" v="-2280"/>
+ <val o="d3d05" v="-1189"/>
+ <val o="d4b15" v="-964"/>
+ <val o="d5926" v="-442"/>
+ <val o="d6735" v="261"/>
+ <val o="d7546" v="1309"/>
+ <val o="d8355" v="-849"/>
+ <val o="d9166" v="178"/>
+ <val o="d9f75" v="1111"/>
+ <val o="dad87" v="2750"/>
+ <val o="dbb97" v="2769"/>
+ <val o="dc9a8" v="2973"/>
+ <val o="dd7b7" v="1327"/>
+ <val o="de5c6" v="454"/>
+ <val o="df3d7" v="199"/>
+ <val o="e01d7" v="167"/>
+ <val o="e0fe5" v="556"/>
+ <val o="e1df5" v="416"/>
+ <val o="e2c04" v="-370"/>
+ <val o="e3a14" v="-1154"/>
+ <val o="e4824" v="93"/>
+ <val o="e5634" v="-843"/>
+ <val o="e6444" v="171"/>
+ <val o="e7255" v="-646"/>
+ <val o="e806f" v="-723"/>
+ <val o="e8e7f" v="2665"/>
+ <val o="e9c8e" v="837"/>
+ <val o="eaa9f" v="698"/>
+ <val o="eb8ae" v="1097"/>
+ <val o="ec6bf" v="2649"/>
+ <val o="ed4ce" v="-495"/>
+ <val o="ee2df" v="1165"/>
+ <val o="ef0ef" v="542"/>
+ <val o="eff01" v="1871"/>
+ <val o="f0d10" v="979"/>
+ <val o="f1b20" v="1210"/>
+ <val o="f2930" v="-356"/>
+ <val o="f3740" v="1654"/>
+ <val o="f4551" v="1368"/>
+ <val o="f5361" v="1462"/>
+ <val o="f6172" v="1612"/>
+ <val o="f6f80" v="1309"/>
+ <val o="f7d91" v="1886"/>
+ <val o="f8ba1" v="1136"/>
+ <val o="f99b1" v="1169"/>
+ <val o="fa7c0" v="1403"/>
+ <val o="fb5d1" v="1316"/>
+ <val o="fc3e0" v="-1041"/>
+ <val o="fd1fb" v="-1190"/>
+ <val o="fe00b" v="-1609"/>
+ <val o="fee1c" v="-199"/>
+ <val o="ffc2c" v="-252"/>
+ <val o="100a3b" v="585"/>
+ <val o="10184c" v="1069"/>
+ <val o="10265b" v="1973"/>
+ <val o="10346c" v="1831"/>
+ <val o="10427b" v="1127"/>
+ <val o="10508d" v="1767"/>
+ <val o="105e9d" v="1343"/>
+ <val o="106cad" v="1564"/>
+ <val o="107abd" v="849"/>
+ <val o="1088cd" v="805"/>
+ <val o="1096de" v="1093"/>
+ <val o="10a4ed" v="880"/>
+ <val o="10b2fe" v="1254"/>
+ <val o="10c10d" v="2664"/>
+ <val o="10cf1e" v="1368"/>
+ <val o="10dd2e" v="1009"/>
+ <val o="10eb66" v="208"/>
+ <val o="10f94e" v="22"/>
+ <val o="11075e" v="1142"/>
+ <val o="11156d" v="286"/>
+ <val o="112388" v="-1168"/>
+ <val o="113187" v="712"/>
+ <val o="113fb0" v="227"/>
+ <val o="114da6" v="236"/>
+ <val o="115bb6" v="372"/>
+ <val o="1169c6" v="1441"/>
+ <val o="1177d6" v="2015"/>
+ <val o="1185e8" v="1211"/>
+ <val o="1193f7" v="1284"/>
+ <val o="11a208" v="369"/>
+ <val o="11b017" v="-310"/>
+ <val o="11be2f" v="-802"/>
+ <val o="11cc37" v="781"/>
+ <val o="11da47" v="491"/>
+ <val o="11e857" v="1023"/>
+ <val o="11f667" v="516"/>
+ <val o="120578" v="1"/>
+ <val o="121386" v="1"/>
+ <val o="122196" v="2"/>
+ <val o="122fa6" v="1"/>
+ <val o="123db5" v="1"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="1"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="-1"/>
+ <val o="128305" v="-1"/>
+ <val o="129115" v="-1"/>
+ <val o="129f25" v="-1"/>
+ <val o="12ad35" v="-1"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="1"/>
+ <val o="12d766" v="1"/>
+ <val o="12e575" v="2"/>
+ <val o="12f386" v="1"/>
+ <val o="130196" v="1"/>
+ <val o="130fa6" v="1"/>
+ <val o="131db7" v="1"/>
+ <val o="132bc5" v="1"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="2274"/>
+ <val o="1774a3" v="1775"/>
+ <val o="1782b3" v="1153"/>
+ <val o="1790c5" v="769"/>
+ <val o="179ed4" v="-846"/>
+ <val o="17ace4" v="-2362"/>
+ <val o="17bafd" v="-2961"/>
+ <val o="17c90f" v="-2519"/>
+ <val o="17d71e" v="-2447"/>
+ <val o="17e52f" v="-2865"/>
+ <val o="17f33f" v="-2276"/>
+ <val o="18014f" v="-1250"/>
+ <val o="180f5f" v="-716"/>
+ <val o="181d6e" v="-1489"/>
+ <val o="182b7f" v="-2004"/>
+ <val o="18398f" v="-1055"/>
+ <val o="1847a1" v="-978"/>
+ <val o="1855af" v="-1269"/>
+ <val o="1863c0" v="-3170"/>
+ <val o="1871cf" v="-2668"/>
+ <val o="187fe0" v="-2540"/>
+ <val o="188def" v="-2377"/>
+ <val o="189c00" v="-1126"/>
+ <val o="18b80d" v="1219"/>
+ <val o="18c61c" v="-1061"/>
+ <val o="18d42c" v="-1519"/>
+ <val o="18e23b" v="-1284"/>
+ <val o="18f04b" v="-1902"/>
+ <val o="18fe5e" v="-1623"/>
+ <val o="190c76" v="-778"/>
+ <val o="191a86" v="-1730"/>
+ <val o="192896" v="-1745"/>
+ <val o="1936a6" v="-1872"/>
+ <val o="1944b7" v="-1207"/>
+ <val o="1952c6" v="-211"/>
+ <val o="1960d7" v="1619"/>
+ <val o="196ee6" v="-764"/>
+ <val o="197cf8" v="-827"/>
+ <val o="198b0f" v="40"/>
+ <val o="19991f" v="-199"/>
+ <val o="19b541" v="-967"/>
+ <val o="19c34d" v="-680"/>
+ <val o="19d15e" v="-385"/>
+ <val o="19df80" v="-241"/>
+ <val o="19ed90" v="371"/>
+ <val o="19eebe" v="471"/>
+ <val o="19fb8e" v="61"/>
+ <val o="1a09a0" v="-2440"/>
+ <val o="1a17ae" v="-3447"/>
+ <val o="1a25be" v="-3862"/>
+ <val o="1a33cd" v="-1657"/>
+ <val o="1a41dd" v="-2273"/>
+ <val o="1a4fed" v="-4132"/>
+ <val o="1a5e08" v="-3735"/>
+ <val o="1a6c05" v="-2655"/>
+ <val o="1a7a15" v="-3286"/>
+ <val o="1a8826" v="-3377"/>
+ <val o="1a9637" v="-2707"/>
+ <val o="1aa445" v="-1980"/>
+ <val o="1ab255" v="-797"/>
+ <val o="1ac065" v="-2046"/>
+ <val o="1ace75" v="-2793"/>
+ <val o="1adc87" v="-1939"/>
+ <val o="1aea96" v="-2092"/>
+ <val o="1af8a7" v="-2211"/>
+ <val o="1b06b7" v="-2679"/>
+ <val o="1b14c6" v="-2530"/>
+ <val o="1c7460" v="453"/>
+ <val o="1c8270" v="-157"/>
+ <val o="1c907e" v="1143"/>
+ <val o="1c9e8f" v="-146"/>
+ <val o="1caca2" v="-1002"/>
+ <val o="1cbab1" v="-1402"/>
+ <val o="1cc8c1" v="2949"/>
+ <val o="1cd6d0" v="2229"/>
+ <val o="1ce4de" v="1022"/>
+ <val o="1cf2f0" v="-1628"/>
+ <val o="1d0109" v="-1835"/>
+ <val o="1d0f06" v="-211"/>
+ <val o="1d1d15" v="-767"/>
+ <val o="1d2b25" v="-792"/>
+ <val o="1d3935" v="173"/>
+ <val o="1d4745" v="776"/>
+ <val o="1d5555" v="1249"/>
+ <val o="1d6366" v="-957"/>
+ <val o="1d7175" v="-911"/>
+ <val o="1d7f86" v="-243"/>
+ <val o="1d8d95" v="-65"/>
+ <val o="1d9ba6" v="-308"/>
+ <val o="1da9b6" v="-811"/>
+ <val o="1db7c7" v="-806"/>
+ <val o="1dc5d5" v="-952"/>
+ <val o="1dd3e6" v="-716"/>
+ <val o="1de1f5" v="-1618"/>
+ <val o="1df006" v="-1910"/>
+ <val o="1dfe16" v="-1809"/>
+ <val o="1e0c26" v="-2224"/>
+ <val o="1e1a36" v="-2272"/>
+ <val o="1e2847" v="-2317"/>
+ <val o="1e3659" v="-2283"/>
+ <val o="1e4467" v="-2334"/>
+ <val o="1e5281" v="-1860"/>
+ <val o="1e6086" v="-2139"/>
+ <val o="1e6e96" v="-2206"/>
+ <val o="1e7ca6" v="-296"/>
+ <val o="1e8ab5" v="-449"/>
+ <val o="1e98c6" v="-142"/>
+ <val o="1ea6d5" v="-422"/>
+ <val o="1eb4e6" v="-365"/>
+ <val o="1ec2f6" v="-581"/>
+ <val o="1ed106" v="-263"/>
+ <val o="1edf16" v="-325"/>
+ <val o="1eed26" v="-142"/>
+ <val o="1efb36" v="-355"/>
+ <val o="1f0946" v="-310"/>
+ <val o="1f1756" v="496"/>
+ <val o="1f2566" v="660"/>
+ <val o="1f3376" v="1246"/>
+ <val o="1f4187" v="2889"/>
+ <val o="1f4f96" v="1532"/>
+ <val o="1f5da7" v="-143"/>
+ <val o="1f6bb6" v="-518"/>
+ <val o="1f79c7" v="225"/>
+ <val o="1f87d6" v="-1667"/>
+ <val o="1f95e7" v="-2330"/>
+ <val o="1fa401" v="-1727"/>
+ <val o="1fb204" v="-1489"/>
+ <val o="1fc016" v="-1515"/>
+ <val o="1fce25" v="-476"/>
+ <val o="1fdc35" v="-193"/>
+ <val o="1fea45" v="128"/>
+ <val o="1ff855" v="376"/>
+ <val o="200665" v="2872"/>
+ <val o="201475" v="408"/>
+ <val o="202286" v="1923"/>
+ <val o="203095" v="1830"/>
+ <val o="203ea5" v="1798"/>
+ <val o="204cb6" v="334"/>
+ <val o="205ac6" v="1260"/>
+ <val o="2068d6" v="1815"/>
+ <val o="2076e6" v="2272"/>
+ <val o="2084f6" v="262"/>
+ <val o="209306" v="-387"/>
+ <val o="20a116" v="-613"/>
+ <val o="20af26" v="-251"/>
+ <val o="20bd37" v="-885"/>
+ <val o="20cb46" v="551"/>
+ <val o="20d957" v="48"/>
+ <val o="20e767" v="-982"/>
+ <val o="20f581" v="-1612"/>
+ <val o="210386" v="-1125"/>
+ <val o="211194" v="-381"/>
+ <val o="211fa5" v="-441"/>
+ <val o="212db5" v="71"/>
+ <val o="213bc5" v="1020"/>
+ <val o="2149d6" v="760"/>
+ <val o="2157e5" v="-319"/>
+ <val o="2165f6" v="-1144"/>
+ <val o="217406" v="302"/>
+ <val o="218217" v="-319"/>
+ <val o="219026" v="-582"/>
+ <val o="219e39" v="408"/>
+ <val o="21ac46" v="1031"/>
+ <val o="21ba57" v="1139"/>
+ <val o="21c867" v="2082"/>
+ <val o="21d677" v="-1202"/>
+ <val o="21e487" v="622"/>
+ <val o="21f296" v="456"/>
+ <val o="2200a6" v="-736"/>
+ <val o="220eb7" v="-818"/>
+ <val o="221cc6" v="1684"/>
+ <val o="222ad7" v="307"/>
+ <val o="2238e7" v="-801"/>
+ <val o="224701" v="-1256"/>
+ <val o="225505" v="3308"/>
+ <val o="226315" v="506"/>
+ <val o="227125" v="639"/>
+ <val o="227f35" v="1963"/>
+ <val o="228d45" v="2867"/>
+ <val o="229b54" v="-831"/>
+ <val o="22a965" v="-270"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="2010"/>
+ <val o="22d397" v="3408"/>
+ <val o="22e1a6" v="3190"/>
+ <val o="22efb6" v="-187"/>
+ <val o="22fdc7" v="-225"/>
+ <val o="230bd7" v="531"/>
+ <val o="2319e6" v="-823"/>
+ <val o="2327f6" v="62"/>
+ <val o="23361b" v="1079"/>
+ <val o="234416" v="1547"/>
+ <val o="235226" v="900"/>
+ <val o="236037" v="112"/>
+ <val o="236e46" v="1780"/>
+ <val o="237c57" v="1407"/>
+ <val o="238a66" v="298"/>
+ <val o="239881" v="565"/>
+ <val o="23a685" v="-311"/>
+ <val o="23b495" v="-657"/>
+ <val o="23c2a4" v="168"/>
+ <val o="23d0b5" v="647"/>
+ <val o="23dec4" v="1427"/>
+ <val o="23ecd5" v="829"/>
+ <val o="23fae4" v="-5"/>
+ <val o="2408f6" v="1197"/>
+ <val o="241706" v="3751"/>
+ <val o="242518" v="2991"/>
+ <val o="243325" v="2801"/>
+ <val o="244137" v="-1188"/>
+ <val o="244f46" v="-828"/>
+ <val o="246b66" v="-799"/>
+ <val o="247976" v="57"/>
+ <val o="248786" v="4601"/>
+ <val o="24957e" v="1911"/>
+ <val o="24a38f" v="799"/>
+ <val o="24b19c" v="-972"/>
+ <val o="24bfac" v="-708"/>
+ <val o="24cdbc" v="-790"/>
+ <val o="24dbcd" v="-490"/>
+ <val o="24e9e5" v="-1316"/>
+ <val o="24f808" v="-825"/>
+ <val o="250616" v="-1012"/>
+ <val o="251426" v="-1178"/>
+ <val o="252236" v="-35"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="1352"/>
+ <val o="254c67" v="1059"/>
+ <val o="255a76" v="1290"/>
+ <val o="256887" v="2079"/>
+ <val o="257697" v="3618"/>
+ <val o="2584a8" v="-4684"/>
+ <val o="2592b6" v="-2470"/>
+ <val o="25a0c7" v="-556"/>
+ <val o="25aed7" v="189"/>
+ <val o="25bce7" v="260"/>
+ <val o="25caf8" v="816"/>
+ <val o="25d907" v="2489"/>
+ <val o="25e718" v="2732"/>
+ <val o="25f527" v="2234"/>
+ <val o="260338" v="57"/>
+ <val o="261149" v="1219"/>
+ <val o="261f59" v="632"/>
+ <val o="262d68" v="-1360"/>
+ <val o="263b83" v="38"/>
+ <val o="264986" v="-980"/>
+ <val o="265795" v="-1501"/>
+ <val o="2665a6" v="-2119"/>
+ <val o="2673b5" v="-1618"/>
+ <val o="2681c6" v="-1314"/>
+ <val o="268fd5" v="-432"/>
+ <val o="269de6" v="309"/>
+ <val o="26abf6" v="685"/>
+ <val o="26ba06" v="1692"/>
+ <val o="26c817" v="1899"/>
+ <val o="26d62b" v="3622"/>
+ <val o="26e436" v="2709"/>
+ <val o="26f247" v="3037"/>
+ <val o="270057" v="2898"/>
+ <val o="270e67" v="3251"/>
+ <val o="271c77" v="186"/>
+ <val o="272a87" v="-636"/>
+ <val o="273897" v="-421"/>
+ <val o="2746a8" v="-729"/>
+ <val o="2754b9" v="-978"/>
+ <val o="2762c7" v="2670"/>
+ <val o="2770d8" v="1255"/>
+ <val o="277ee7" v="-496"/>
+ </par>
+ <par memind="424600" h="3dc1a8de">
+ <val o="0" v="-4313"/>
+ <val o="e08" v="-4163"/>
+ <val o="1c32" v="-4102"/>
+ <val o="2a3c" v="-4091"/>
+ <val o="3835" v="-3982"/>
+ <val o="4645" v="-3934"/>
+ <val o="5455" v="-4439"/>
+ <val o="6265" v="-5323"/>
+ <val o="7075" v="-6298"/>
+ <val o="7e85" v="-7332"/>
+ <val o="8c96" v="-7541"/>
+ <val o="9aa5" v="-7248"/>
+ <val o="a8b6" v="-6869"/>
+ <val o="b6c5" v="-6454"/>
+ <val o="c4d7" v="-7"/>
+ <val o="d30b" v="-7"/>
+ <val o="e0f6" v="-7"/>
+ <val o="ef06" v="-7"/>
+ <val o="fd17" v="-7"/>
+ <val o="10b27" v="-8"/>
+ <val o="11937" v="-8"/>
+ <val o="12746" v="-7"/>
+ <val o="13556" v="-8"/>
+ <val o="14366" v="-9"/>
+ <val o="15181" v="-9"/>
+ <val o="15f85" v="-8"/>
+ <val o="16d95" v="-8"/>
+ <val o="17ba4" v="-8"/>
+ <val o="189b5" v="-8"/>
+ <val o="197c4" v="-8"/>
+ <val o="1a5d5" v="-9"/>
+ <val o="1b3e6" v="-9"/>
+ <val o="1c1f6" v="-8"/>
+ <val o="1d005" v="-8"/>
+ <val o="1de15" v="-8"/>
+ <val o="1ec25" v="-8"/>
+ <val o="1fa36" v="-8"/>
+ <val o="20845" v="-9"/>
+ <val o="21656" v="-8"/>
+ <val o="22465" v="-8"/>
+ <val o="23276" v="-8"/>
+ <val o="24086" v="-7"/>
+ <val o="24e99" v="-7"/>
+ <val o="25ca7" v="-8"/>
+ <val o="26ab7" v="-8"/>
+ <val o="278c6" v="-8"/>
+ <val o="286d6" v="-8"/>
+ <val o="294e6" v="-9"/>
+ <val o="2a301" v="-9"/>
+ <val o="2b105" v="-8"/>
+ <val o="2bf15" v="-8"/>
+ <val o="2cd25" v="-8"/>
+ <val o="2db35" v="-8"/>
+ <val o="2e946" v="-8"/>
+ <val o="2f755" v="-7"/>
+ <val o="30566" v="-9"/>
+ <val o="31375" v="-8"/>
+ <val o="3219e" v="-8"/>
+ <val o="32f96" v="-8"/>
+ <val o="33da6" v="-8"/>
+ <val o="34bb6" v="-8"/>
+ <val o="359de" v="-8"/>
+ <val o="367d6" v="-8"/>
+ <val o="375e6" v="-8"/>
+ <val o="3840e" v="-7"/>
+ <val o="3921e" v="-7"/>
+ <val o="3a016" v="-7"/>
+ <val o="3ae27" v="-8"/>
+ <val o="3bc36" v="-8"/>
+ <val o="3ca47" v="-7"/>
+ <val o="3d856" v="-8"/>
+ <val o="3e667" v="-8"/>
+ <val o="3f481" v="-9"/>
+ <val o="40285" v="-9"/>
+ <val o="41095" v="-9"/>
+ <val o="41ea5" v="-9"/>
+ <val o="42cb5" v="-9"/>
+ <val o="43ac5" v="-8"/>
+ <val o="448d5" v="-7"/>
+ <val o="456e6" v="-8"/>
+ <val o="464f5" v="-7"/>
+ <val o="480ff" v="-7"/>
+ <val o="48f0e" v="-6"/>
+ <val o="49d1d" v="-7"/>
+ <val o="4ab46" v="-7"/>
+ <val o="4b955" v="-7"/>
+ <val o="4c769" v="-6"/>
+ <val o="4d577" v="-7"/>
+ <val o="4e387" v="-7"/>
+ <val o="4f196" v="-7"/>
+ <val o="4ffa6" v="-7"/>
+ <val o="50dd0" v="-7"/>
+ <val o="51bc6" v="-7"/>
+ <val o="529d6" v="-8"/>
+ <val o="537e7" v="-8"/>
+ <val o="54600" v="-9"/>
+ <val o="55406" v="-8"/>
+ <val o="56215" v="-8"/>
+ <val o="57026" v="-8"/>
+ <val o="57e36" v="-8"/>
+ <val o="58c46" v="-8"/>
+ <val o="59a70" v="-8"/>
+ <val o="5a867" v="-8"/>
+ <val o="5b676" v="-7"/>
+ <val o="5c487" v="-6"/>
+ <val o="5d296" v="-7"/>
+ <val o="5e0a9" v="-7"/>
+ <val o="5eeb8" v="-7"/>
+ <val o="5fcc6" v="-7"/>
+ <val o="60ad7" v="-7"/>
+ <val o="618e7" v="-7"/>
+ <val o="626f7" v="-7"/>
+ <val o="63507" v="-7"/>
+ <val o="64317" v="-7"/>
+ <val o="65127" v="-7"/>
+ <val o="65f37" v="-8"/>
+ <val o="66d46" v="-8"/>
+ <val o="67b57" v="-8"/>
+ <val o="68967" v="-8"/>
+ <val o="69782" v="-8"/>
+ <val o="6a586" v="-8"/>
+ <val o="6b395" v="-8"/>
+ <val o="6c1a6" v="-9"/>
+ <val o="6cfb5" v="-8"/>
+ <val o="6ddc6" v="-8"/>
+ <val o="6ebd6" v="-7"/>
+ <val o="6f9e6" v="-8"/>
+ <val o="707f6" v="-7"/>
+ <val o="71607" v="-6"/>
+ <val o="72417" v="-6"/>
+ <val o="73227" v="-6"/>
+ <val o="74037" v="-7"/>
+ <val o="74e47" v="-7"/>
+ <val o="75c57" v="-7"/>
+ <val o="76a63" v="-6"/>
+ <val o="77873" v="-7"/>
+ <val o="78680" v="-6"/>
+ <val o="7948f" v="-7"/>
+ <val o="7a29f" v="-7"/>
+ <val o="7b0af" v="-7"/>
+ <val o="7bebf" v="-8"/>
+ <val o="7cccf" v="-8"/>
+ <val o="7dadf" v="-8"/>
+ <val o="7e8fa" v="-8"/>
+ <val o="7f70a" v="-8"/>
+ <val o="8051a" v="-9"/>
+ <val o="8132a" v="-9"/>
+ <val o="8213a" v="-9"/>
+ <val o="82f4a" v="-8"/>
+ <val o="83d5a" v="-8"/>
+ <val o="84b6a" v="-7"/>
+ <val o="8597a" v="-7"/>
+ <val o="8678b" v="-7"/>
+ <val o="8759b" v="-7"/>
+ <val o="883ac" v="-7"/>
+ <val o="891bb" v="-8"/>
+ <val o="89fca" v="-7"/>
+ <val o="8adda" v="-7"/>
+ <val o="8bbeb" v="-7"/>
+ <val o="8c9fc" v="-7"/>
+ <val o="8d80b" v="-7"/>
+ <val o="8e61a" v="-7"/>
+ <val o="8f42a" v="-7"/>
+ <val o="9023a" v="-7"/>
+ <val o="9104a" v="-8"/>
+ <val o="91e5a" v="-7"/>
+ <val o="92c6a" v="-8"/>
+ <val o="93a84" v="-9"/>
+ <val o="94885" v="-8"/>
+ <val o="95694" v="-9"/>
+ <val o="964a5" v="-9"/>
+ <val o="972b4" v="-8"/>
+ <val o="980c5" v="-8"/>
+ <val o="98ed4" v="-8"/>
+ <val o="99ce5" v="-8"/>
+ <val o="9aaf5" v="-7"/>
+ <val o="9b906" v="-7"/>
+ <val o="9c716" v="-7"/>
+ <val o="9d526" v="-7"/>
+ <val o="9e336" v="-7"/>
+ <val o="9f145" v="-7"/>
+ <val o="9ff56" v="-7"/>
+ <val o="a0d65" v="-7"/>
+ <val o="a1b77" v="-6460"/>
+ <val o="a2986" v="-3546"/>
+ <val o="a3795" v="-986"/>
+ <val o="a45a7" v="697"/>
+ <val o="a53b6" v="776"/>
+ <val o="a61c7" v="925"/>
+ <val o="a6fd6" v="125"/>
+ <val o="a7e00" v="456"/>
+ <val o="a8c00" v="903"/>
+ <val o="a9a05" v="278"/>
+ <val o="aa815" v="27"/>
+ <val o="ab625" v="43"/>
+ <val o="ac435" v="173"/>
+ <val o="ad245" v="947"/>
+ <val o="ae055" v="728"/>
+ <val o="aee65" v="-452"/>
+ <val o="afc75" v="-117"/>
+ <val o="b0a85" v="23"/>
+ <val o="b26a6" v="182"/>
+ <val o="b34b6" v="-152"/>
+ <val o="b42c6" v="-423"/>
+ <val o="b50d6" v="-705"/>
+ <val o="b5ee7" v="-790"/>
+ <val o="b6cf6" v="-1575"/>
+ <val o="b7b07" v="-2027"/>
+ <val o="b8917" v="-1757"/>
+ <val o="b9728" v="-1722"/>
+ <val o="ba537" v="-1901"/>
+ <val o="bb347" v="-741"/>
+ <val o="bc157" v="-812"/>
+ <val o="bcf67" v="-891"/>
+ <val o="bdd81" v="652"/>
+ <val o="beb86" v="411"/>
+ <val o="bf995" v="516"/>
+ <val o="c07a6" v="398"/>
+ <val o="c15b5" v="382"/>
+ <val o="c23c6" v="470"/>
+ <val o="c31d5" v="591"/>
+ <val o="c3fe6" v="267"/>
+ <val o="c4df5" v="770"/>
+ <val o="c5c06" v="164"/>
+ <val o="c6a16" v="438"/>
+ <val o="c7826" v="-43"/>
+ <val o="c8636" v="72"/>
+ <val o="c9446" v="249"/>
+ <val o="ca256" v="201"/>
+ <val o="cb066" v="115"/>
+ <val o="cbe76" v="-425"/>
+ <val o="ccc87" v="-229"/>
+ <val o="cda96" v="-284"/>
+ <val o="ce8a8" v="-247"/>
+ <val o="cf6b7" v="-135"/>
+ <val o="d04c8" v="-54"/>
+ <val o="d12d7" v="96"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="16"/>
+ <val o="d3d05" v="598"/>
+ <val o="d4b15" v="721"/>
+ <val o="d5926" v="818"/>
+ <val o="d6735" v="1067"/>
+ <val o="d7546" v="1245"/>
+ <val o="d8355" v="-117"/>
+ <val o="d9166" v="-721"/>
+ <val o="d9f75" v="-1504"/>
+ <val o="dad87" v="-2084"/>
+ <val o="dbb97" v="-2554"/>
+ <val o="dc9a8" v="-2345"/>
+ <val o="dd7b7" v="-2920"/>
+ <val o="de5c6" v="-2712"/>
+ <val o="df3d7" v="-2858"/>
+ <val o="e01d7" v="-2928"/>
+ <val o="e0fe5" v="-2803"/>
+ <val o="e1df5" v="-3032"/>
+ <val o="e2c04" v="-4017"/>
+ <val o="e3a14" v="-3918"/>
+ <val o="e4824" v="-3412"/>
+ <val o="e5634" v="-3441"/>
+ <val o="e6444" v="-2561"/>
+ <val o="e7255" v="-2139"/>
+ <val o="e806f" v="-1765"/>
+ <val o="e8e7f" v="-465"/>
+ <val o="e9c8e" v="-702"/>
+ <val o="eaa9f" v="-647"/>
+ <val o="eb8ae" v="-676"/>
+ <val o="ec6bf" v="-509"/>
+ <val o="ed4ce" v="-2150"/>
+ <val o="ee2df" v="-2355"/>
+ <val o="ef0ef" v="-3171"/>
+ <val o="eff01" v="-4031"/>
+ <val o="f0d10" v="-4338"/>
+ <val o="f1b20" v="-4651"/>
+ <val o="f2930" v="-4668"/>
+ <val o="f3740" v="-4346"/>
+ <val o="f4551" v="-4571"/>
+ <val o="f5361" v="-4929"/>
+ <val o="f6172" v="-4607"/>
+ <val o="f6f80" v="-4866"/>
+ <val o="f7d91" v="-4308"/>
+ <val o="f8ba1" v="-3897"/>
+ <val o="f99b1" v="-3784"/>
+ <val o="fa7c0" v="-2988"/>
+ <val o="fb5d1" v="-3099"/>
+ <val o="fc3e0" v="-3335"/>
+ <val o="fd1fb" v="-2686"/>
+ <val o="fe00b" v="-2522"/>
+ <val o="fee1c" v="-2074"/>
+ <val o="ffc2c" v="-1989"/>
+ <val o="100a3b" v="-1788"/>
+ <val o="10184c" v="-1795"/>
+ <val o="10265b" v="-2075"/>
+ <val o="10346c" v="-2698"/>
+ <val o="10427b" v="-3932"/>
+ <val o="10508d" v="-4406"/>
+ <val o="105e9d" v="-4366"/>
+ <val o="106cad" v="-4692"/>
+ <val o="107abd" v="-4302"/>
+ <val o="1088cd" v="-3927"/>
+ <val o="1096de" v="-4101"/>
+ <val o="10a4ed" v="-4187"/>
+ <val o="10b2fe" v="-4342"/>
+ <val o="10c10d" v="-4162"/>
+ <val o="10cf1e" v="-4456"/>
+ <val o="10dd2e" v="-4132"/>
+ <val o="10eb66" v="-4499"/>
+ <val o="10f94e" v="-3882"/>
+ <val o="11075e" v="-3295"/>
+ <val o="11156d" v="-2863"/>
+ <val o="112388" v="-2668"/>
+ <val o="113187" v="-1778"/>
+ <val o="113fb0" v="-1810"/>
+ <val o="114da6" v="-1829"/>
+ <val o="115bb6" v="-1800"/>
+ <val o="1169c6" v="-1595"/>
+ <val o="1177d6" v="-2050"/>
+ <val o="1185e8" v="-2961"/>
+ <val o="1193f7" v="-3627"/>
+ <val o="11a208" v="-4830"/>
+ <val o="11b017" v="-4296"/>
+ <val o="11be2f" v="-5257"/>
+ <val o="11cc37" v="-4408"/>
+ <val o="11da47" v="-4326"/>
+ <val o="11e857" v="-4420"/>
+ <val o="11f667" v="-3950"/>
+ <val o="120578" v="-4"/>
+ <val o="121386" v="-4"/>
+ <val o="122196" v="-4"/>
+ <val o="122fa6" v="-3"/>
+ <val o="123db5" v="-3"/>
+ <val o="124bc5" v="-3"/>
+ <val o="1259d5" v="-2"/>
+ <val o="1267e4" v="-2"/>
+ <val o="127600" v="-2"/>
+ <val o="128305" v="-2"/>
+ <val o="129115" v="-2"/>
+ <val o="129f25" v="-2"/>
+ <val o="12ad35" v="-2"/>
+ <val o="12bb45" v="-1"/>
+ <val o="12c954" v="-2"/>
+ <val o="12d766" v="-2"/>
+ <val o="12e575" v="-3"/>
+ <val o="12f386" v="-2"/>
+ <val o="130196" v="-4"/>
+ <val o="130fa6" v="-3"/>
+ <val o="131db7" v="-3"/>
+ <val o="132bc5" v="-3"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="-6868"/>
+ <val o="1774a3" v="-6790"/>
+ <val o="1782b3" v="-7252"/>
+ <val o="1790c5" v="-6734"/>
+ <val o="179ed4" v="-6030"/>
+ <val o="17ace4" v="-5892"/>
+ <val o="17bafd" v="-6066"/>
+ <val o="17c90f" v="-5486"/>
+ <val o="17d71e" v="-5444"/>
+ <val o="17e52f" v="-5339"/>
+ <val o="17f33f" v="-4983"/>
+ <val o="18014f" v="-5190"/>
+ <val o="180f5f" v="-6313"/>
+ <val o="181d6e" v="-6839"/>
+ <val o="182b7f" v="-7853"/>
+ <val o="18398f" v="-13507"/>
+ <val o="1847a1" v="-13381"/>
+ <val o="1855af" v="-12778"/>
+ <val o="1863c0" v="-11890"/>
+ <val o="1871cf" v="-12338"/>
+ <val o="187fe0" v="-11774"/>
+ <val o="188def" v="-12649"/>
+ <val o="189c00" v="-11849"/>
+ <val o="18b80d" v="-7471"/>
+ <val o="18c61c" v="-8126"/>
+ <val o="18d42c" v="-7696"/>
+ <val o="18e23b" v="-6538"/>
+ <val o="18f04b" v="-6175"/>
+ <val o="18fe5e" v="-5664"/>
+ <val o="190c76" v="-4480"/>
+ <val o="191a86" v="-4300"/>
+ <val o="192896" v="-4263"/>
+ <val o="1936a6" v="-4119"/>
+ <val o="1944b7" v="-4103"/>
+ <val o="1952c6" v="-4511"/>
+ <val o="1960d7" v="-5135"/>
+ <val o="196ee6" v="-6038"/>
+ <val o="197cf8" v="-6392"/>
+ <val o="198b0f" v="-5899"/>
+ <val o="19991f" v="-6690"/>
+ <val o="19b541" v="-6603"/>
+ <val o="19c34d" v="-6159"/>
+ <val o="19d15e" v="-6128"/>
+ <val o="19df80" v="-6220"/>
+ <val o="19ed90" v="-6047"/>
+ <val o="19eebe" v="-6009"/>
+ <val o="19fb8e" v="-2295"/>
+ <val o="1a09a0" v="-2543"/>
+ <val o="1a17ae" v="-3085"/>
+ <val o="1a25be" v="-3269"/>
+ <val o="1a33cd" v="-2267"/>
+ <val o="1a41dd" v="-2159"/>
+ <val o="1a4fed" v="-1532"/>
+ <val o="1a5e08" v="-1675"/>
+ <val o="1a6c05" v="-960"/>
+ <val o="1a7a15" v="-1122"/>
+ <val o="1a8826" v="-1061"/>
+ <val o="1a9637" v="-505"/>
+ <val o="1aa445" v="-536"/>
+ <val o="1ab255" v="-991"/>
+ <val o="1ac065" v="-1818"/>
+ <val o="1ace75" v="-2574"/>
+ <val o="1adc87" v="-2844"/>
+ <val o="1aea96" v="-2608"/>
+ <val o="1af8a7" v="-2928"/>
+ <val o="1b06b7" v="-2112"/>
+ <val o="1b14c6" v="-2074"/>
+ <val o="1c7460" v="354"/>
+ <val o="1c8270" v="438"/>
+ <val o="1c907e" v="3408"/>
+ <val o="1c9e8f" v="3269"/>
+ <val o="1caca2" v="3655"/>
+ <val o="1cbab1" v="3521"/>
+ <val o="1cc8c1" v="5431"/>
+ <val o="1cd6d0" v="5560"/>
+ <val o="1ce4de" v="5660"/>
+ <val o="1cf2f0" v="5623"/>
+ <val o="1d0109" v="5896"/>
+ <val o="1d0f06" v="6656"/>
+ <val o="1d1d15" v="6647"/>
+ <val o="1d2b25" v="6733"/>
+ <val o="1d3935" v="6914"/>
+ <val o="1d4745" v="6873"/>
+ <val o="1d5555" v="6691"/>
+ <val o="1d6366" v="5814"/>
+ <val o="1d7175" v="5617"/>
+ <val o="1d7f86" v="5608"/>
+ <val o="1d8d95" v="-3230"/>
+ <val o="1d9ba6" v="-3656"/>
+ <val o="1da9b6" v="-3620"/>
+ <val o="1db7c7" v="-3449"/>
+ <val o="1dc5d5" v="-3601"/>
+ <val o="1dd3e6" v="-3735"/>
+ <val o="1de1f5" v="-5996"/>
+ <val o="1df006" v="-6718"/>
+ <val o="1dfe16" v="-6583"/>
+ <val o="1e0c26" v="-6767"/>
+ <val o="1e1a36" v="-6800"/>
+ <val o="1e2847" v="-6525"/>
+ <val o="1e3659" v="-6170"/>
+ <val o="1e4467" v="-5676"/>
+ <val o="1e5281" v="-4911"/>
+ <val o="1e6086" v="-4911"/>
+ <val o="1e6e96" v="-4801"/>
+ <val o="1e7ca6" v="-1982"/>
+ <val o="1e8ab5" v="-1810"/>
+ <val o="1e98c6" v="-1834"/>
+ <val o="1ea6d5" v="-2256"/>
+ <val o="1eb4e6" v="-2325"/>
+ <val o="1ec2f6" v="-2684"/>
+ <val o="1ed106" v="-2675"/>
+ <val o="1edf16" v="-2778"/>
+ <val o="1eed26" v="-2688"/>
+ <val o="1efb36" v="-2650"/>
+ <val o="1f0946" v="-2557"/>
+ <val o="1f1756" v="-2355"/>
+ <val o="1f2566" v="-2318"/>
+ <val o="1f3376" v="-2582"/>
+ <val o="1f4187" v="-2811"/>
+ <val o="1f4f96" v="-3182"/>
+ <val o="1f5da7" v="-3578"/>
+ <val o="1f6bb6" v="-3544"/>
+ <val o="1f79c7" v="-3148"/>
+ <val o="1f87d6" v="-3345"/>
+ <val o="1f95e7" v="-3137"/>
+ <val o="1fa401" v="-2809"/>
+ <val o="1fb204" v="-2501"/>
+ <val o="1fc016" v="-2493"/>
+ <val o="1fce25" v="-2157"/>
+ <val o="1fdc35" v="-2137"/>
+ <val o="1fea45" v="-2155"/>
+ <val o="1ff855" v="-2498"/>
+ <val o="200665" v="-2368"/>
+ <val o="201475" v="-3513"/>
+ <val o="202286" v="-4566"/>
+ <val o="203095" v="-5345"/>
+ <val o="203ea5" v="-6057"/>
+ <val o="204cb6" v="-5799"/>
+ <val o="205ac6" v="-5341"/>
+ <val o="2068d6" v="-5395"/>
+ <val o="2076e6" v="-5979"/>
+ <val o="2084f6" v="-6090"/>
+ <val o="209306" v="-6778"/>
+ <val o="20a116" v="-6378"/>
+ <val o="20af26" v="-5473"/>
+ <val o="20bd37" v="-5382"/>
+ <val o="20cb46" v="-4608"/>
+ <val o="20d957" v="-4316"/>
+ <val o="20e767" v="-4055"/>
+ <val o="20f581" v="-3867"/>
+ <val o="210386" v="-3482"/>
+ <val o="211194" v="-3116"/>
+ <val o="211fa5" v="-3010"/>
+ <val o="212db5" v="-2944"/>
+ <val o="213bc5" v="-2819"/>
+ <val o="2149d6" v="-3644"/>
+ <val o="2157e5" v="-4499"/>
+ <val o="2165f6" v="-5795"/>
+ <val o="217406" v="-6198"/>
+ <val o="218217" v="-6174"/>
+ <val o="219026" v="-6102"/>
+ <val o="219e39" v="-6218"/>
+ <val o="21ac46" v="-5898"/>
+ <val o="21ba57" v="-5986"/>
+ <val o="21c867" v="-5633"/>
+ <val o="21d677" v="-6210"/>
+ <val o="21e487" v="-5783"/>
+ <val o="21f296" v="-5726"/>
+ <val o="2200a6" v="-5539"/>
+ <val o="220eb7" v="-5408"/>
+ <val o="221cc6" v="-4608"/>
+ <val o="222ad7" v="-3876"/>
+ <val o="2238e7" v="-3618"/>
+ <val o="224701" v="-3292"/>
+ <val o="225505" v="-1685"/>
+ <val o="226315" v="-2072"/>
+ <val o="227125" v="-2050"/>
+ <val o="227f35" v="-1670"/>
+ <val o="228d45" v="-1792"/>
+ <val o="229b54" v="-3485"/>
+ <val o="22a965" v="-3911"/>
+ <val o="22b776" v="-4578"/>
+ <val o="22c586" v="-4788"/>
+ <val o="22d397" v="-4459"/>
+ <val o="22e1a6" v="-4693"/>
+ <val o="22efb6" v="-4830"/>
+ <val o="22fdc7" v="-4652"/>
+ <val o="230bd7" v="-4452"/>
+ <val o="2319e6" v="-5394"/>
+ <val o="2327f6" v="-5538"/>
+ <val o="23361b" v="-5866"/>
+ <val o="234416" v="-5225"/>
+ <val o="235226" v="-5162"/>
+ <val o="236037" v="-5250"/>
+ <val o="236e46" v="-4384"/>
+ <val o="237c57" v="-4218"/>
+ <val o="238a66" v="-4016"/>
+ <val o="239881" v="-3222"/>
+ <val o="23a685" v="-3311"/>
+ <val o="23b495" v="-3183"/>
+ <val o="23c2a4" v="-2974"/>
+ <val o="23d0b5" v="-2945"/>
+ <val o="23dec4" v="-2933"/>
+ <val o="23ecd5" v="-3570"/>
+ <val o="23fae4" v="-4545"/>
+ <val o="2408f6" v="-5119"/>
+ <val o="241706" v="-5737"/>
+ <val o="242518" v="-6515"/>
+ <val o="243325" v="-6776"/>
+ <val o="244137" v="-6755"/>
+ <val o="244f46" v="-6361"/>
+ <val o="246b66" v="-6546"/>
+ <val o="247976" v="-6273"/>
+ <val o="248786" v="-5402"/>
+ <val o="24957e" v="-5797"/>
+ <val o="24a38f" v="-5647"/>
+ <val o="24b19c" v="-5747"/>
+ <val o="24bfac" v="-5443"/>
+ <val o="24cdbc" v="-5445"/>
+ <val o="24dbcd" v="-4557"/>
+ <val o="24e9e5" v="-4019"/>
+ <val o="24f808" v="-3484"/>
+ <val o="250616" v="-3616"/>
+ <val o="251426" v="-3559"/>
+ <val o="252236" v="-3408"/>
+ <val o="253047" v="-3609"/>
+ <val o="253e56" v="-4020"/>
+ <val o="254c67" v="-4182"/>
+ <val o="255a76" v="-4997"/>
+ <val o="256887" v="-5810"/>
+ <val o="257697" v="-5595"/>
+ <val o="2584a8" v="-15224"/>
+ <val o="2592b6" v="-8695"/>
+ <val o="25a0c7" v="-4575"/>
+ <val o="25aed7" v="-6313"/>
+ <val o="25bce7" v="-6104"/>
+ <val o="25caf8" v="-5750"/>
+ <val o="25d907" v="-5764"/>
+ <val o="25e718" v="-5649"/>
+ <val o="25f527" v="-5249"/>
+ <val o="260338" v="-5562"/>
+ <val o="261149" v="-4875"/>
+ <val o="261f59" v="-4619"/>
+ <val o="262d68" v="-4611"/>
+ <val o="263b83" v="-3619"/>
+ <val o="264986" v="-3467"/>
+ <val o="265795" v="-3564"/>
+ <val o="2665a6" v="-3672"/>
+ <val o="2673b5" v="-3614"/>
+ <val o="2681c6" v="-3621"/>
+ <val o="268fd5" v="-3868"/>
+ <val o="269de6" v="-3969"/>
+ <val o="26abf6" v="-3886"/>
+ <val o="26ba06" v="-4381"/>
+ <val o="26c817" v="-4271"/>
+ <val o="26d62b" v="-3967"/>
+ <val o="26e436" v="-4002"/>
+ <val o="26f247" v="-3562"/>
+ <val o="270057" v="-3874"/>
+ <val o="270e67" v="-3561"/>
+ <val o="271c77" v="-4690"/>
+ <val o="272a87" v="-5196"/>
+ <val o="273897" v="-5211"/>
+ <val o="2746a8" v="-5037"/>
+ <val o="2754b9" v="-4963"/>
+ <val o="2762c7" v="-4048"/>
+ <val o="2770d8" v="-3708"/>
+ <val o="277ee7" v="-3215"/>
+ </par>
+ <par memind="438200" h="3dc1a8de">
+ <val o="0" v="-1103"/>
+ <val o="e08" v="-1286"/>
+ <val o="1c32" v="-1351"/>
+ <val o="2a3c" v="-1427"/>
+ <val o="3835" v="-1246"/>
+ <val o="4645" v="-1101"/>
+ <val o="5455" v="-909"/>
+ <val o="6265" v="-1472"/>
+ <val o="7075" v="-1523"/>
+ <val o="7e85" v="-1435"/>
+ <val o="8c96" v="-1784"/>
+ <val o="9aa5" v="-1757"/>
+ <val o="a8b6" v="-1682"/>
+ <val o="b6c5" v="-1745"/>
+ <val o="c4d7" v="-6"/>
+ <val o="d30b" v="-6"/>
+ <val o="e0f6" v="-6"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="-6"/>
+ <val o="11937" v="-6"/>
+ <val o="12746" v="-6"/>
+ <val o="13556" v="-6"/>
+ <val o="14366" v="-6"/>
+ <val o="15181" v="-7"/>
+ <val o="15f85" v="-6"/>
+ <val o="16d95" v="-6"/>
+ <val o="17ba4" v="-6"/>
+ <val o="189b5" v="-6"/>
+ <val o="197c4" v="-6"/>
+ <val o="1a5d5" v="-6"/>
+ <val o="1b3e6" v="-6"/>
+ <val o="1c1f6" v="-6"/>
+ <val o="1d005" v="-6"/>
+ <val o="1de15" v="-6"/>
+ <val o="1ec25" v="-6"/>
+ <val o="1fa36" v="-6"/>
+ <val o="20845" v="-6"/>
+ <val o="21656" v="-6"/>
+ <val o="22465" v="-6"/>
+ <val o="23276" v="-6"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="-6"/>
+ <val o="25ca7" v="-6"/>
+ <val o="26ab7" v="-6"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="-6"/>
+ <val o="294e6" v="-6"/>
+ <val o="2a301" v="-6"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="-6"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="-6"/>
+ <val o="31375" v="-6"/>
+ <val o="3219e" v="-6"/>
+ <val o="32f96" v="-6"/>
+ <val o="33da6" v="-6"/>
+ <val o="34bb6" v="-6"/>
+ <val o="359de" v="-6"/>
+ <val o="367d6" v="-6"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="-6"/>
+ <val o="3bc36" v="-6"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="-6"/>
+ <val o="3e667" v="-6"/>
+ <val o="3f481" v="-6"/>
+ <val o="40285" v="-6"/>
+ <val o="41095" v="-6"/>
+ <val o="41ea5" v="-6"/>
+ <val o="42cb5" v="-6"/>
+ <val o="43ac5" v="-6"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="-6"/>
+ <val o="464f5" v="-6"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="-6"/>
+ <val o="54600" v="-6"/>
+ <val o="55406" v="-6"/>
+ <val o="56215" v="-6"/>
+ <val o="57026" v="-6"/>
+ <val o="57e36" v="-6"/>
+ <val o="58c46" v="-6"/>
+ <val o="59a70" v="-6"/>
+ <val o="5a867" v="-6"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="-6"/>
+ <val o="5eeb8" v="-6"/>
+ <val o="5fcc6" v="-6"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="-6"/>
+ <val o="65f37" v="-6"/>
+ <val o="66d46" v="-6"/>
+ <val o="67b57" v="-6"/>
+ <val o="68967" v="-6"/>
+ <val o="69782" v="-6"/>
+ <val o="6a586" v="-6"/>
+ <val o="6b395" v="-6"/>
+ <val o="6c1a6" v="-6"/>
+ <val o="6cfb5" v="-6"/>
+ <val o="6ddc6" v="-6"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="-6"/>
+ <val o="707f6" v="-6"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="-6"/>
+ <val o="74e47" v="-6"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="-6"/>
+ <val o="7bebf" v="-6"/>
+ <val o="7cccf" v="-6"/>
+ <val o="7dadf" v="-6"/>
+ <val o="7e8fa" v="-6"/>
+ <val o="7f70a" v="-6"/>
+ <val o="8051a" v="-6"/>
+ <val o="8132a" v="-6"/>
+ <val o="8213a" v="-6"/>
+ <val o="82f4a" v="-6"/>
+ <val o="83d5a" v="-6"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="-6"/>
+ <val o="891bb" v="-6"/>
+ <val o="89fca" v="-6"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="-6"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="-6"/>
+ <val o="93a84" v="-6"/>
+ <val o="94885" v="-6"/>
+ <val o="95694" v="-6"/>
+ <val o="964a5" v="-6"/>
+ <val o="972b4" v="-6"/>
+ <val o="980c5" v="-6"/>
+ <val o="98ed4" v="-6"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="-6"/>
+ <val o="9c716" v="-6"/>
+ <val o="9d526" v="-6"/>
+ <val o="9e336" v="-6"/>
+ <val o="9f145" v="-6"/>
+ <val o="9ff56" v="-6"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="-1590"/>
+ <val o="a2986" v="-500"/>
+ <val o="a3795" v="1379"/>
+ <val o="a45a7" v="-45"/>
+ <val o="a53b6" v="-346"/>
+ <val o="a61c7" v="-580"/>
+ <val o="a6fd6" v="-752"/>
+ <val o="a7e00" v="-1367"/>
+ <val o="a8c00" v="-1906"/>
+ <val o="a9a05" v="101"/>
+ <val o="aa815" v="-366"/>
+ <val o="ab625" v="-740"/>
+ <val o="ac435" v="-550"/>
+ <val o="ad245" v="432"/>
+ <val o="ae055" v="1595"/>
+ <val o="aee65" v="275"/>
+ <val o="afc75" v="1019"/>
+ <val o="b0a85" v="3444"/>
+ <val o="b26a6" v="3629"/>
+ <val o="b34b6" v="3203"/>
+ <val o="b42c6" v="215"/>
+ <val o="b50d6" v="380"/>
+ <val o="b5ee7" v="890"/>
+ <val o="b6cf6" v="-446"/>
+ <val o="b7b07" v="-200"/>
+ <val o="b8917" v="-44"/>
+ <val o="b9728" v="-424"/>
+ <val o="ba537" v="-718"/>
+ <val o="bb347" v="946"/>
+ <val o="bc157" v="276"/>
+ <val o="bcf67" v="-944"/>
+ <val o="bdd81" v="3129"/>
+ <val o="beb86" v="453"/>
+ <val o="bf995" v="194"/>
+ <val o="c07a6" v="-246"/>
+ <val o="c15b5" v="-122"/>
+ <val o="c23c6" v="430"/>
+ <val o="c31d5" v="1582"/>
+ <val o="c3fe6" v="720"/>
+ <val o="c4df5" v="1333"/>
+ <val o="c5c06" v="588"/>
+ <val o="c6a16" v="642"/>
+ <val o="c7826" v="1096"/>
+ <val o="c8636" v="313"/>
+ <val o="c9446" v="374"/>
+ <val o="ca256" v="204"/>
+ <val o="cb066" v="692"/>
+ <val o="cbe76" v="-196"/>
+ <val o="ccc87" v="1888"/>
+ <val o="cda96" v="2502"/>
+ <val o="ce8a8" v="1840"/>
+ <val o="cf6b7" v="2437"/>
+ <val o="d04c8" v="1930"/>
+ <val o="d12d7" v="1219"/>
+ <val o="d20e7" v="-250"/>
+ <val o="d2f02" v="-1971"/>
+ <val o="d3d05" v="-1029"/>
+ <val o="d4b15" v="-1072"/>
+ <val o="d5926" v="-388"/>
+ <val o="d6735" v="229"/>
+ <val o="d7546" v="1131"/>
+ <val o="d8355" v="-726"/>
+ <val o="d9166" v="166"/>
+ <val o="d9f75" v="965"/>
+ <val o="dad87" v="2341"/>
+ <val o="dbb97" v="2354"/>
+ <val o="dc9a8" v="2565"/>
+ <val o="dd7b7" v="1136"/>
+ <val o="de5c6" v="367"/>
+ <val o="df3d7" v="173"/>
+ <val o="e01d7" v="156"/>
+ <val o="e0fe5" v="460"/>
+ <val o="e1df5" v="358"/>
+ <val o="e2c04" v="-308"/>
+ <val o="e3a14" v="-1006"/>
+ <val o="e4824" v="93"/>
+ <val o="e5634" v="-723"/>
+ <val o="e6444" v="147"/>
+ <val o="e7255" v="-551"/>
+ <val o="e806f" v="-626"/>
+ <val o="e8e7f" v="2316"/>
+ <val o="e9c8e" v="714"/>
+ <val o="eaa9f" v="600"/>
+ <val o="eb8ae" v="953"/>
+ <val o="ec6bf" v="2267"/>
+ <val o="ed4ce" v="-403"/>
+ <val o="ee2df" v="999"/>
+ <val o="ef0ef" v="475"/>
+ <val o="eff01" v="1663"/>
+ <val o="f0d10" v="829"/>
+ <val o="f1b20" v="1055"/>
+ <val o="f2930" v="-314"/>
+ <val o="f3740" v="1431"/>
+ <val o="f4551" v="1201"/>
+ <val o="f5361" v="1280"/>
+ <val o="f6172" v="1431"/>
+ <val o="f6f80" v="1145"/>
+ <val o="f7d91" v="1635"/>
+ <val o="f8ba1" v="957"/>
+ <val o="f99b1" v="1019"/>
+ <val o="fa7c0" v="1219"/>
+ <val o="fb5d1" v="1143"/>
+ <val o="fc3e0" v="-893"/>
+ <val o="fd1fb" v="-1019"/>
+ <val o="fe00b" v="-1389"/>
+ <val o="fee1c" v="-182"/>
+ <val o="ffc2c" v="-220"/>
+ <val o="100a3b" v="502"/>
+ <val o="10184c" v="940"/>
+ <val o="10265b" v="1719"/>
+ <val o="10346c" v="1592"/>
+ <val o="10427b" v="960"/>
+ <val o="10508d" v="1537"/>
+ <val o="105e9d" v="1177"/>
+ <val o="106cad" v="1337"/>
+ <val o="107abd" v="737"/>
+ <val o="1088cd" v="723"/>
+ <val o="1096de" v="917"/>
+ <val o="10a4ed" v="794"/>
+ <val o="10b2fe" v="1075"/>
+ <val o="10c10d" v="2328"/>
+ <val o="10cf1e" v="1192"/>
+ <val o="10dd2e" v="867"/>
+ <val o="10eb66" v="184"/>
+ <val o="10f94e" v="12"/>
+ <val o="11075e" v="978"/>
+ <val o="11156d" v="256"/>
+ <val o="112388" v="-1007"/>
+ <val o="113187" v="614"/>
+ <val o="113fb0" v="205"/>
+ <val o="114da6" v="195"/>
+ <val o="115bb6" v="316"/>
+ <val o="1169c6" v="1241"/>
+ <val o="1177d6" v="1748"/>
+ <val o="1185e8" v="1046"/>
+ <val o="1193f7" v="1099"/>
+ <val o="11a208" v="309"/>
+ <val o="11b017" v="-202"/>
+ <val o="11be2f" v="-722"/>
+ <val o="11cc37" v="680"/>
+ <val o="11da47" v="440"/>
+ <val o="11e857" v="870"/>
+ <val o="11f667" v="475"/>
+ <val o="120578" v="1"/>
+ <val o="121386" v="1"/>
+ <val o="122196" v="2"/>
+ <val o="122fa6" v="1"/>
+ <val o="123db5" v="0"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="1"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="-1"/>
+ <val o="128305" v="-1"/>
+ <val o="129115" v="-1"/>
+ <val o="129f25" v="-1"/>
+ <val o="12ad35" v="-1"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="1"/>
+ <val o="12d766" v="1"/>
+ <val o="12e575" v="1"/>
+ <val o="12f386" v="1"/>
+ <val o="130196" v="1"/>
+ <val o="130fa6" v="1"/>
+ <val o="131db7" v="1"/>
+ <val o="132bc5" v="1"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="1959"/>
+ <val o="1774a3" v="1506"/>
+ <val o="1782b3" v="1027"/>
+ <val o="1790c5" v="677"/>
+ <val o="179ed4" v="-759"/>
+ <val o="17ace4" v="-2042"/>
+ <val o="17bafd" v="-2554"/>
+ <val o="17c90f" v="-2178"/>
+ <val o="17d71e" v="-2126"/>
+ <val o="17e52f" v="-2484"/>
+ <val o="17f33f" v="-1980"/>
+ <val o="18014f" v="-1072"/>
+ <val o="180f5f" v="-524"/>
+ <val o="181d6e" v="-1366"/>
+ <val o="182b7f" v="-1753"/>
+ <val o="18398f" v="-893"/>
+ <val o="1847a1" v="-845"/>
+ <val o="1855af" v="-1148"/>
+ <val o="1863c0" v="-2710"/>
+ <val o="1871cf" v="-2297"/>
+ <val o="187fe0" v="-2208"/>
+ <val o="188def" v="-2037"/>
+ <val o="189c00" v="-997"/>
+ <val o="18b80d" v="1048"/>
+ <val o="18c61c" v="-955"/>
+ <val o="18d42c" v="-1334"/>
+ <val o="18e23b" v="-1121"/>
+ <val o="18f04b" v="-1625"/>
+ <val o="18fe5e" v="-1419"/>
+ <val o="190c76" v="-671"/>
+ <val o="191a86" v="-1501"/>
+ <val o="192896" v="-1511"/>
+ <val o="1936a6" v="-1618"/>
+ <val o="1944b7" v="-1037"/>
+ <val o="1952c6" v="-192"/>
+ <val o="1960d7" v="1397"/>
+ <val o="196ee6" v="-627"/>
+ <val o="197cf8" v="-711"/>
+ <val o="198b0f" v="20"/>
+ <val o="19991f" v="-130"/>
+ <val o="19b541" v="-843"/>
+ <val o="19c34d" v="-642"/>
+ <val o="19d15e" v="-320"/>
+ <val o="19df80" v="-210"/>
+ <val o="19ed90" v="295"/>
+ <val o="19eebe" v="417"/>
+ <val o="19fb8e" v="37"/>
+ <val o="1a09a0" v="-2105"/>
+ <val o="1a17ae" v="-2980"/>
+ <val o="1a25be" v="-3329"/>
+ <val o="1a33cd" v="-1430"/>
+ <val o="1a41dd" v="-1986"/>
+ <val o="1a4fed" v="-3570"/>
+ <val o="1a5e08" v="-3230"/>
+ <val o="1a6c05" v="-2288"/>
+ <val o="1a7a15" v="-2846"/>
+ <val o="1a8826" v="-2946"/>
+ <val o="1a9637" v="-2342"/>
+ <val o="1aa445" v="-1719"/>
+ <val o="1ab255" v="-668"/>
+ <val o="1ac065" v="-1761"/>
+ <val o="1ace75" v="-2413"/>
+ <val o="1adc87" v="-1727"/>
+ <val o="1aea96" v="-1832"/>
+ <val o="1af8a7" v="-1889"/>
+ <val o="1b06b7" v="-2346"/>
+ <val o="1b14c6" v="-2176"/>
+ <val o="1c7460" v="374"/>
+ <val o="1c8270" v="-132"/>
+ <val o="1c907e" v="993"/>
+ <val o="1c9e8f" v="-150"/>
+ <val o="1caca2" v="-843"/>
+ <val o="1cbab1" v="-1196"/>
+ <val o="1cc8c1" v="2577"/>
+ <val o="1cd6d0" v="1582"/>
+ <val o="1ce4de" v="909"/>
+ <val o="1cf2f0" v="-1405"/>
+ <val o="1d0109" v="-1597"/>
+ <val o="1d0f06" v="-186"/>
+ <val o="1d1d15" v="-658"/>
+ <val o="1d2b25" v="-679"/>
+ <val o="1d3935" v="89"/>
+ <val o="1d4745" v="680"/>
+ <val o="1d5555" v="1095"/>
+ <val o="1d6366" v="-832"/>
+ <val o="1d7175" v="-785"/>
+ <val o="1d7f86" v="-228"/>
+ <val o="1d8d95" v="-40"/>
+ <val o="1d9ba6" v="-280"/>
+ <val o="1da9b6" v="-697"/>
+ <val o="1db7c7" v="-697"/>
+ <val o="1dc5d5" v="-811"/>
+ <val o="1dd3e6" v="-629"/>
+ <val o="1de1f5" v="-1408"/>
+ <val o="1df006" v="-1666"/>
+ <val o="1dfe16" v="-1574"/>
+ <val o="1e0c26" v="-1928"/>
+ <val o="1e1a36" v="-1970"/>
+ <val o="1e2847" v="-2017"/>
+ <val o="1e3659" v="-1984"/>
+ <val o="1e4467" v="-2007"/>
+ <val o="1e5281" v="-1611"/>
+ <val o="1e6086" v="-1851"/>
+ <val o="1e6e96" v="-1908"/>
+ <val o="1e7ca6" v="-251"/>
+ <val o="1e8ab5" v="-386"/>
+ <val o="1e98c6" v="-121"/>
+ <val o="1ea6d5" v="-365"/>
+ <val o="1eb4e6" v="-313"/>
+ <val o="1ec2f6" v="-506"/>
+ <val o="1ed106" v="-232"/>
+ <val o="1edf16" v="-288"/>
+ <val o="1eed26" v="-121"/>
+ <val o="1efb36" v="-310"/>
+ <val o="1f0946" v="-245"/>
+ <val o="1f1756" v="439"/>
+ <val o="1f2566" v="609"/>
+ <val o="1f3376" v="1078"/>
+ <val o="1f4187" v="2491"/>
+ <val o="1f4f96" v="1327"/>
+ <val o="1f5da7" v="-115"/>
+ <val o="1f6bb6" v="-442"/>
+ <val o="1f79c7" v="203"/>
+ <val o="1f87d6" v="-1439"/>
+ <val o="1f95e7" v="-2019"/>
+ <val o="1fa401" v="-1491"/>
+ <val o="1fb204" v="-1285"/>
+ <val o="1fc016" v="-1309"/>
+ <val o="1fce25" v="-409"/>
+ <val o="1fdc35" v="-162"/>
+ <val o="1fea45" v="90"/>
+ <val o="1ff855" v="319"/>
+ <val o="200665" v="2483"/>
+ <val o="201475" v="357"/>
+ <val o="202286" v="1681"/>
+ <val o="203095" v="1572"/>
+ <val o="203ea5" v="1575"/>
+ <val o="204cb6" v="302"/>
+ <val o="205ac6" v="1076"/>
+ <val o="2068d6" v="1555"/>
+ <val o="2076e6" v="1971"/>
+ <val o="2084f6" v="239"/>
+ <val o="209306" v="-351"/>
+ <val o="20a116" v="-527"/>
+ <val o="20af26" v="-215"/>
+ <val o="20bd37" v="-782"/>
+ <val o="20cb46" v="452"/>
+ <val o="20d957" v="60"/>
+ <val o="20e767" v="-848"/>
+ <val o="20f581" v="-1383"/>
+ <val o="210386" v="-989"/>
+ <val o="211194" v="-325"/>
+ <val o="211fa5" v="-382"/>
+ <val o="212db5" v="60"/>
+ <val o="213bc5" v="884"/>
+ <val o="2149d6" v="659"/>
+ <val o="2157e5" v="-264"/>
+ <val o="2165f6" v="-990"/>
+ <val o="217406" v="289"/>
+ <val o="218217" v="-292"/>
+ <val o="219026" v="-542"/>
+ <val o="219e39" v="366"/>
+ <val o="21ac46" v="909"/>
+ <val o="21ba57" v="992"/>
+ <val o="21c867" v="1808"/>
+ <val o="21d677" v="-1049"/>
+ <val o="21e487" v="543"/>
+ <val o="21f296" v="377"/>
+ <val o="2200a6" v="-619"/>
+ <val o="220eb7" v="-712"/>
+ <val o="221cc6" v="1459"/>
+ <val o="222ad7" v="257"/>
+ <val o="2238e7" v="-696"/>
+ <val o="224701" v="-1085"/>
+ <val o="225505" v="2873"/>
+ <val o="226315" v="421"/>
+ <val o="227125" v="557"/>
+ <val o="227f35" v="1696"/>
+ <val o="228d45" v="2480"/>
+ <val o="229b54" v="-707"/>
+ <val o="22a965" v="-237"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="1730"/>
+ <val o="22d397" v="2990"/>
+ <val o="22e1a6" v="2746"/>
+ <val o="22efb6" v="-174"/>
+ <val o="22fdc7" v="-194"/>
+ <val o="230bd7" v="485"/>
+ <val o="2319e6" v="-729"/>
+ <val o="2327f6" v="70"/>
+ <val o="23361b" v="907"/>
+ <val o="234416" v="1297"/>
+ <val o="235226" v="776"/>
+ <val o="236037" v="123"/>
+ <val o="236e46" v="1557"/>
+ <val o="237c57" v="1208"/>
+ <val o="238a66" v="253"/>
+ <val o="239881" v="508"/>
+ <val o="23a685" v="-274"/>
+ <val o="23b495" v="-571"/>
+ <val o="23c2a4" v="146"/>
+ <val o="23d0b5" v="567"/>
+ <val o="23dec4" v="1222"/>
+ <val o="23ecd5" v="733"/>
+ <val o="23fae4" v="8"/>
+ <val o="2408f6" v="1041"/>
+ <val o="241706" v="3222"/>
+ <val o="242518" v="2576"/>
+ <val o="243325" v="2422"/>
+ <val o="244137" v="-1036"/>
+ <val o="244f46" v="-746"/>
+ <val o="246b66" v="-661"/>
+ <val o="247976" v="45"/>
+ <val o="248786" v="3983"/>
+ <val o="24957e" v="1694"/>
+ <val o="24a38f" v="709"/>
+ <val o="24b19c" v="-844"/>
+ <val o="24bfac" v="-605"/>
+ <val o="24cdbc" v="-661"/>
+ <val o="24dbcd" v="-436"/>
+ <val o="24e9e5" v="-1155"/>
+ <val o="24f808" v="-716"/>
+ <val o="250616" v="-877"/>
+ <val o="251426" v="-1024"/>
+ <val o="252236" v="-7"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="1185"/>
+ <val o="254c67" v="884"/>
+ <val o="255a76" v="1103"/>
+ <val o="256887" v="1789"/>
+ <val o="257697" v="3132"/>
+ <val o="2584a8" v="-4032"/>
+ <val o="2592b6" v="-2114"/>
+ <val o="25a0c7" v="-498"/>
+ <val o="25aed7" v="174"/>
+ <val o="25bce7" v="210"/>
+ <val o="25caf8" v="710"/>
+ <val o="25d907" v="2127"/>
+ <val o="25e718" v="2386"/>
+ <val o="25f527" v="1916"/>
+ <val o="260338" v="53"/>
+ <val o="261149" v="1070"/>
+ <val o="261f59" v="564"/>
+ <val o="262d68" v="-1181"/>
+ <val o="263b83" v="34"/>
+ <val o="264986" v="-847"/>
+ <val o="265795" v="-1318"/>
+ <val o="2665a6" v="-1842"/>
+ <val o="2673b5" v="-1404"/>
+ <val o="2681c6" v="-1129"/>
+ <val o="268fd5" v="-372"/>
+ <val o="269de6" v="269"/>
+ <val o="26abf6" v="572"/>
+ <val o="26ba06" v="1413"/>
+ <val o="26c817" v="1586"/>
+ <val o="26d62b" v="3161"/>
+ <val o="26e436" v="2347"/>
+ <val o="26f247" v="2627"/>
+ <val o="270057" v="2502"/>
+ <val o="270e67" v="2818"/>
+ <val o="271c77" v="158"/>
+ <val o="272a87" v="-545"/>
+ <val o="273897" v="-370"/>
+ <val o="2746a8" v="-624"/>
+ <val o="2754b9" v="-847"/>
+ <val o="2762c7" v="2315"/>
+ <val o="2770d8" v="1099"/>
+ <val o="277ee7" v="-417"/>
+ </par>
+ <par memind="422200" h="3dc1a8de">
+ <val o="0" v="-4307"/>
+ <val o="e08" v="-4169"/>
+ <val o="1c32" v="-4096"/>
+ <val o="2a3c" v="-4087"/>
+ <val o="3835" v="-3963"/>
+ <val o="4645" v="-3969"/>
+ <val o="5455" v="-4411"/>
+ <val o="6265" v="-5358"/>
+ <val o="7075" v="-6317"/>
+ <val o="7e85" v="-7298"/>
+ <val o="8c96" v="-7519"/>
+ <val o="9aa5" v="-7351"/>
+ <val o="a8b6" v="-6890"/>
+ <val o="b6c5" v="-6465"/>
+ <val o="c4d7" v="-7"/>
+ <val o="d30b" v="-7"/>
+ <val o="e0f6" v="-7"/>
+ <val o="ef06" v="-7"/>
+ <val o="fd17" v="-7"/>
+ <val o="10b27" v="-8"/>
+ <val o="11937" v="-8"/>
+ <val o="12746" v="-8"/>
+ <val o="13556" v="-8"/>
+ <val o="14366" v="-8"/>
+ <val o="15181" v="-9"/>
+ <val o="15f85" v="-8"/>
+ <val o="16d95" v="-8"/>
+ <val o="17ba4" v="-8"/>
+ <val o="189b5" v="-8"/>
+ <val o="197c4" v="-8"/>
+ <val o="1a5d5" v="-9"/>
+ <val o="1b3e6" v="-9"/>
+ <val o="1c1f6" v="-8"/>
+ <val o="1d005" v="-8"/>
+ <val o="1de15" v="-8"/>
+ <val o="1ec25" v="-8"/>
+ <val o="1fa36" v="-8"/>
+ <val o="20845" v="-9"/>
+ <val o="21656" v="-8"/>
+ <val o="22465" v="-8"/>
+ <val o="23276" v="-8"/>
+ <val o="24086" v="-7"/>
+ <val o="24e99" v="-7"/>
+ <val o="25ca7" v="-8"/>
+ <val o="26ab7" v="-8"/>
+ <val o="278c6" v="-8"/>
+ <val o="286d6" v="-8"/>
+ <val o="294e6" v="-9"/>
+ <val o="2a301" v="-9"/>
+ <val o="2b105" v="-8"/>
+ <val o="2bf15" v="-8"/>
+ <val o="2cd25" v="-8"/>
+ <val o="2db35" v="-8"/>
+ <val o="2e946" v="-8"/>
+ <val o="2f755" v="-7"/>
+ <val o="30566" v="-9"/>
+ <val o="31375" v="-8"/>
+ <val o="3219e" v="-8"/>
+ <val o="32f96" v="-8"/>
+ <val o="33da6" v="-8"/>
+ <val o="34bb6" v="-8"/>
+ <val o="359de" v="-8"/>
+ <val o="367d6" v="-8"/>
+ <val o="375e6" v="-8"/>
+ <val o="3840e" v="-7"/>
+ <val o="3921e" v="-7"/>
+ <val o="3a016" v="-7"/>
+ <val o="3ae27" v="-8"/>
+ <val o="3bc36" v="-8"/>
+ <val o="3ca47" v="-7"/>
+ <val o="3d856" v="-8"/>
+ <val o="3e667" v="-8"/>
+ <val o="3f481" v="-9"/>
+ <val o="40285" v="-9"/>
+ <val o="41095" v="-9"/>
+ <val o="41ea5" v="-9"/>
+ <val o="42cb5" v="-9"/>
+ <val o="43ac5" v="-8"/>
+ <val o="448d5" v="-8"/>
+ <val o="456e6" v="-8"/>
+ <val o="464f5" v="-7"/>
+ <val o="480ff" v="-7"/>
+ <val o="48f0e" v="-6"/>
+ <val o="49d1d" v="-6"/>
+ <val o="4ab46" v="-7"/>
+ <val o="4b955" v="-7"/>
+ <val o="4c769" v="-6"/>
+ <val o="4d577" v="-7"/>
+ <val o="4e387" v="-7"/>
+ <val o="4f196" v="-7"/>
+ <val o="4ffa6" v="-7"/>
+ <val o="50dd0" v="-7"/>
+ <val o="51bc6" v="-7"/>
+ <val o="529d6" v="-8"/>
+ <val o="537e7" v="-8"/>
+ <val o="54600" v="-9"/>
+ <val o="55406" v="-8"/>
+ <val o="56215" v="-8"/>
+ <val o="57026" v="-8"/>
+ <val o="57e36" v="-8"/>
+ <val o="58c46" v="-8"/>
+ <val o="59a70" v="-8"/>
+ <val o="5a867" v="-7"/>
+ <val o="5b676" v="-7"/>
+ <val o="5c487" v="-6"/>
+ <val o="5d296" v="-7"/>
+ <val o="5e0a9" v="-7"/>
+ <val o="5eeb8" v="-7"/>
+ <val o="5fcc6" v="-7"/>
+ <val o="60ad7" v="-7"/>
+ <val o="618e7" v="-7"/>
+ <val o="626f7" v="-7"/>
+ <val o="63507" v="-7"/>
+ <val o="64317" v="-7"/>
+ <val o="65127" v="-7"/>
+ <val o="65f37" v="-8"/>
+ <val o="66d46" v="-8"/>
+ <val o="67b57" v="-8"/>
+ <val o="68967" v="-8"/>
+ <val o="69782" v="-8"/>
+ <val o="6a586" v="-8"/>
+ <val o="6b395" v="-8"/>
+ <val o="6c1a6" v="-9"/>
+ <val o="6cfb5" v="-8"/>
+ <val o="6ddc6" v="-8"/>
+ <val o="6ebd6" v="-7"/>
+ <val o="6f9e6" v="-8"/>
+ <val o="707f6" v="-7"/>
+ <val o="71607" v="-7"/>
+ <val o="72417" v="-6"/>
+ <val o="73227" v="-6"/>
+ <val o="74037" v="-7"/>
+ <val o="74e47" v="-7"/>
+ <val o="75c57" v="-7"/>
+ <val o="76a63" v="-7"/>
+ <val o="77873" v="-7"/>
+ <val o="78680" v="-6"/>
+ <val o="7948f" v="-7"/>
+ <val o="7a29f" v="-7"/>
+ <val o="7b0af" v="-7"/>
+ <val o="7bebf" v="-8"/>
+ <val o="7cccf" v="-8"/>
+ <val o="7dadf" v="-8"/>
+ <val o="7e8fa" v="-8"/>
+ <val o="7f70a" v="-9"/>
+ <val o="8051a" v="-9"/>
+ <val o="8132a" v="-9"/>
+ <val o="8213a" v="-9"/>
+ <val o="82f4a" v="-9"/>
+ <val o="83d5a" v="-8"/>
+ <val o="84b6a" v="-7"/>
+ <val o="8597a" v="-7"/>
+ <val o="8678b" v="-7"/>
+ <val o="8759b" v="-7"/>
+ <val o="883ac" v="-7"/>
+ <val o="891bb" v="-8"/>
+ <val o="89fca" v="-7"/>
+ <val o="8adda" v="-7"/>
+ <val o="8bbeb" v="-7"/>
+ <val o="8c9fc" v="-7"/>
+ <val o="8d80b" v="-7"/>
+ <val o="8e61a" v="-7"/>
+ <val o="8f42a" v="-7"/>
+ <val o="9023a" v="-7"/>
+ <val o="9104a" v="-8"/>
+ <val o="91e5a" v="-7"/>
+ <val o="92c6a" v="-8"/>
+ <val o="93a84" v="-9"/>
+ <val o="94885" v="-8"/>
+ <val o="95694" v="-9"/>
+ <val o="964a5" v="-9"/>
+ <val o="972b4" v="-8"/>
+ <val o="980c5" v="-8"/>
+ <val o="98ed4" v="-8"/>
+ <val o="99ce5" v="-8"/>
+ <val o="9aaf5" v="-7"/>
+ <val o="9b906" v="-7"/>
+ <val o="9c716" v="-7"/>
+ <val o="9d526" v="-7"/>
+ <val o="9e336" v="-7"/>
+ <val o="9f145" v="-7"/>
+ <val o="9ff56" v="-7"/>
+ <val o="a0d65" v="-7"/>
+ <val o="a1b77" v="-6324"/>
+ <val o="a2986" v="-3516"/>
+ <val o="a3795" v="-963"/>
+ <val o="a45a7" v="644"/>
+ <val o="a53b6" v="700"/>
+ <val o="a61c7" v="942"/>
+ <val o="a6fd6" v="99"/>
+ <val o="a7e00" v="464"/>
+ <val o="a8c00" v="912"/>
+ <val o="a9a05" v="289"/>
+ <val o="aa815" v="32"/>
+ <val o="ab625" v="46"/>
+ <val o="ac435" v="200"/>
+ <val o="ad245" v="921"/>
+ <val o="ae055" v="744"/>
+ <val o="aee65" v="-561"/>
+ <val o="afc75" v="-68"/>
+ <val o="b0a85" v="31"/>
+ <val o="b26a6" v="142"/>
+ <val o="b34b6" v="-123"/>
+ <val o="b42c6" v="-451"/>
+ <val o="b50d6" v="-729"/>
+ <val o="b5ee7" v="-712"/>
+ <val o="b6cf6" v="-1584"/>
+ <val o="b7b07" v="-1983"/>
+ <val o="b8917" v="-1753"/>
+ <val o="b9728" v="-1758"/>
+ <val o="ba537" v="-1891"/>
+ <val o="bb347" v="-827"/>
+ <val o="bc157" v="-882"/>
+ <val o="bcf67" v="-899"/>
+ <val o="bdd81" v="644"/>
+ <val o="beb86" v="417"/>
+ <val o="bf995" v="524"/>
+ <val o="c07a6" v="400"/>
+ <val o="c15b5" v="372"/>
+ <val o="c23c6" v="484"/>
+ <val o="c31d5" v="591"/>
+ <val o="c3fe6" v="336"/>
+ <val o="c4df5" v="741"/>
+ <val o="c5c06" v="114"/>
+ <val o="c6a16" v="507"/>
+ <val o="c7826" v="-51"/>
+ <val o="c8636" v="136"/>
+ <val o="c9446" v="334"/>
+ <val o="ca256" v="235"/>
+ <val o="cb066" v="116"/>
+ <val o="cbe76" v="-417"/>
+ <val o="ccc87" v="-232"/>
+ <val o="cda96" v="-184"/>
+ <val o="ce8a8" v="-219"/>
+ <val o="cf6b7" v="-134"/>
+ <val o="d04c8" v="-51"/>
+ <val o="d12d7" v="143"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="11"/>
+ <val o="d3d05" v="600"/>
+ <val o="d4b15" v="644"/>
+ <val o="d5926" v="836"/>
+ <val o="d6735" v="1068"/>
+ <val o="d7546" v="1213"/>
+ <val o="d8355" v="-135"/>
+ <val o="d9166" v="-755"/>
+ <val o="d9f75" v="-1498"/>
+ <val o="dad87" v="-2011"/>
+ <val o="dbb97" v="-2561"/>
+ <val o="dc9a8" v="-2338"/>
+ <val o="dd7b7" v="-2895"/>
+ <val o="de5c6" v="-2780"/>
+ <val o="df3d7" v="-2912"/>
+ <val o="e01d7" v="-2913"/>
+ <val o="e0fe5" v="-2832"/>
+ <val o="e1df5" v="-3018"/>
+ <val o="e2c04" v="-4099"/>
+ <val o="e3a14" v="-3979"/>
+ <val o="e4824" v="-3370"/>
+ <val o="e5634" v="-3428"/>
+ <val o="e6444" v="-2551"/>
+ <val o="e7255" v="-2189"/>
+ <val o="e806f" v="-1757"/>
+ <val o="e8e7f" v="-477"/>
+ <val o="e9c8e" v="-709"/>
+ <val o="eaa9f" v="-653"/>
+ <val o="eb8ae" v="-653"/>
+ <val o="ec6bf" v="-468"/>
+ <val o="ed4ce" v="-2112"/>
+ <val o="ee2df" v="-2239"/>
+ <val o="ef0ef" v="-3198"/>
+ <val o="eff01" v="-4087"/>
+ <val o="f0d10" v="-4308"/>
+ <val o="f1b20" v="-4550"/>
+ <val o="f2930" v="-4628"/>
+ <val o="f3740" v="-4301"/>
+ <val o="f4551" v="-4608"/>
+ <val o="f5361" v="-4857"/>
+ <val o="f6172" v="-4613"/>
+ <val o="f6f80" v="-4818"/>
+ <val o="f7d91" v="-4244"/>
+ <val o="f8ba1" v="-3915"/>
+ <val o="f99b1" v="-3805"/>
+ <val o="fa7c0" v="-3025"/>
+ <val o="fb5d1" v="-3034"/>
+ <val o="fc3e0" v="-3295"/>
+ <val o="fd1fb" v="-2680"/>
+ <val o="fe00b" v="-2530"/>
+ <val o="fee1c" v="-2083"/>
+ <val o="ffc2c" v="-1982"/>
+ <val o="100a3b" v="-1790"/>
+ <val o="10184c" v="-1791"/>
+ <val o="10265b" v="-2077"/>
+ <val o="10346c" v="-2724"/>
+ <val o="10427b" v="-4016"/>
+ <val o="10508d" v="-4320"/>
+ <val o="105e9d" v="-4339"/>
+ <val o="106cad" v="-4725"/>
+ <val o="107abd" v="-4338"/>
+ <val o="1088cd" v="-3906"/>
+ <val o="1096de" v="-4119"/>
+ <val o="10a4ed" v="-4322"/>
+ <val o="10b2fe" v="-4345"/>
+ <val o="10c10d" v="-4169"/>
+ <val o="10cf1e" v="-4354"/>
+ <val o="10dd2e" v="-4160"/>
+ <val o="10eb66" v="-4453"/>
+ <val o="10f94e" v="-3895"/>
+ <val o="11075e" v="-3281"/>
+ <val o="11156d" v="-2866"/>
+ <val o="112388" v="-2663"/>
+ <val o="113187" v="-1794"/>
+ <val o="113fb0" v="-1797"/>
+ <val o="114da6" v="-1823"/>
+ <val o="115bb6" v="-1782"/>
+ <val o="1169c6" v="-1585"/>
+ <val o="1177d6" v="-2082"/>
+ <val o="1185e8" v="-2885"/>
+ <val o="1193f7" v="-3558"/>
+ <val o="11a208" v="-4838"/>
+ <val o="11b017" v="-4322"/>
+ <val o="11be2f" v="-5393"/>
+ <val o="11cc37" v="-4456"/>
+ <val o="11da47" v="-4279"/>
+ <val o="11e857" v="-4354"/>
+ <val o="11f667" v="-3900"/>
+ <val o="120578" v="-4"/>
+ <val o="121386" v="-4"/>
+ <val o="122196" v="-4"/>
+ <val o="122fa6" v="-3"/>
+ <val o="123db5" v="-3"/>
+ <val o="124bc5" v="-3"/>
+ <val o="1259d5" v="-2"/>
+ <val o="1267e4" v="-2"/>
+ <val o="127600" v="-2"/>
+ <val o="128305" v="-2"/>
+ <val o="129115" v="-2"/>
+ <val o="129f25" v="-2"/>
+ <val o="12ad35" v="-2"/>
+ <val o="12bb45" v="-1"/>
+ <val o="12c954" v="-2"/>
+ <val o="12d766" v="-2"/>
+ <val o="12e575" v="-3"/>
+ <val o="12f386" v="-2"/>
+ <val o="130196" v="-4"/>
+ <val o="130fa6" v="-3"/>
+ <val o="131db7" v="-3"/>
+ <val o="132bc5" v="-3"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="-6844"/>
+ <val o="1774a3" v="-6848"/>
+ <val o="1782b3" v="-7276"/>
+ <val o="1790c5" v="-6718"/>
+ <val o="179ed4" v="-6044"/>
+ <val o="17ace4" v="-5879"/>
+ <val o="17bafd" v="-6067"/>
+ <val o="17c90f" v="-5484"/>
+ <val o="17d71e" v="-5437"/>
+ <val o="17e52f" v="-5342"/>
+ <val o="17f33f" v="-4981"/>
+ <val o="18014f" v="-5193"/>
+ <val o="180f5f" v="-6321"/>
+ <val o="181d6e" v="-6923"/>
+ <val o="182b7f" v="-7889"/>
+ <val o="18398f" v="-13464"/>
+ <val o="1847a1" v="-13354"/>
+ <val o="1855af" v="-12813"/>
+ <val o="1863c0" v="-11996"/>
+ <val o="1871cf" v="-12436"/>
+ <val o="187fe0" v="-11658"/>
+ <val o="188def" v="-12508"/>
+ <val o="189c00" v="-11965"/>
+ <val o="18b80d" v="-7567"/>
+ <val o="18c61c" v="-8100"/>
+ <val o="18d42c" v="-7676"/>
+ <val o="18e23b" v="-6565"/>
+ <val o="18f04b" v="-6167"/>
+ <val o="18fe5e" v="-5660"/>
+ <val o="190c76" v="-4475"/>
+ <val o="191a86" v="-4306"/>
+ <val o="192896" v="-4252"/>
+ <val o="1936a6" v="-4125"/>
+ <val o="1944b7" v="-4125"/>
+ <val o="1952c6" v="-4498"/>
+ <val o="1960d7" v="-5137"/>
+ <val o="196ee6" v="-5967"/>
+ <val o="197cf8" v="-6354"/>
+ <val o="198b0f" v="-5965"/>
+ <val o="19991f" v="-6615"/>
+ <val o="19b541" v="-6619"/>
+ <val o="19c34d" v="-6199"/>
+ <val o="19d15e" v="-6235"/>
+ <val o="19df80" v="-6313"/>
+ <val o="19ed90" v="-6079"/>
+ <val o="19eebe" v="-6075"/>
+ <val o="19fb8e" v="-2390"/>
+ <val o="1a09a0" v="-2600"/>
+ <val o="1a17ae" v="-3051"/>
+ <val o="1a25be" v="-3338"/>
+ <val o="1a33cd" v="-2238"/>
+ <val o="1a41dd" v="-2137"/>
+ <val o="1a4fed" v="-1546"/>
+ <val o="1a5e08" v="-1670"/>
+ <val o="1a6c05" v="-969"/>
+ <val o="1a7a15" v="-1123"/>
+ <val o="1a8826" v="-1072"/>
+ <val o="1a9637" v="-481"/>
+ <val o="1aa445" v="-537"/>
+ <val o="1ab255" v="-995"/>
+ <val o="1ac065" v="-1819"/>
+ <val o="1ace75" v="-2636"/>
+ <val o="1adc87" v="-2920"/>
+ <val o="1aea96" v="-2594"/>
+ <val o="1af8a7" v="-2898"/>
+ <val o="1b06b7" v="-2173"/>
+ <val o="1b14c6" v="-2092"/>
+ <val o="1c7460" v="311"/>
+ <val o="1c8270" v="399"/>
+ <val o="1c907e" v="3486"/>
+ <val o="1c9e8f" v="3357"/>
+ <val o="1caca2" v="3670"/>
+ <val o="1cbab1" v="3580"/>
+ <val o="1cc8c1" v="5398"/>
+ <val o="1cd6d0" v="5478"/>
+ <val o="1ce4de" v="5618"/>
+ <val o="1cf2f0" v="5659"/>
+ <val o="1d0109" v="5923"/>
+ <val o="1d0f06" v="6651"/>
+ <val o="1d1d15" v="6654"/>
+ <val o="1d2b25" v="6713"/>
+ <val o="1d3935" v="6885"/>
+ <val o="1d4745" v="6893"/>
+ <val o="1d5555" v="6705"/>
+ <val o="1d6366" v="5853"/>
+ <val o="1d7175" v="5545"/>
+ <val o="1d7f86" v="5589"/>
+ <val o="1d8d95" v="-3219"/>
+ <val o="1d9ba6" v="-3620"/>
+ <val o="1da9b6" v="-3623"/>
+ <val o="1db7c7" v="-3472"/>
+ <val o="1dc5d5" v="-3630"/>
+ <val o="1dd3e6" v="-3723"/>
+ <val o="1de1f5" v="-6033"/>
+ <val o="1df006" v="-6752"/>
+ <val o="1dfe16" v="-6647"/>
+ <val o="1e0c26" v="-6778"/>
+ <val o="1e1a36" v="-6794"/>
+ <val o="1e2847" v="-6593"/>
+ <val o="1e3659" v="-6136"/>
+ <val o="1e4467" v="-5653"/>
+ <val o="1e5281" v="-4910"/>
+ <val o="1e6086" v="-4908"/>
+ <val o="1e6e96" v="-4803"/>
+ <val o="1e7ca6" v="-1970"/>
+ <val o="1e8ab5" v="-1820"/>
+ <val o="1e98c6" v="-1821"/>
+ <val o="1ea6d5" v="-2271"/>
+ <val o="1eb4e6" v="-2332"/>
+ <val o="1ec2f6" v="-2646"/>
+ <val o="1ed106" v="-2644"/>
+ <val o="1edf16" v="-2749"/>
+ <val o="1eed26" v="-2728"/>
+ <val o="1efb36" v="-2587"/>
+ <val o="1f0946" v="-2548"/>
+ <val o="1f1756" v="-2377"/>
+ <val o="1f2566" v="-2339"/>
+ <val o="1f3376" v="-2566"/>
+ <val o="1f4187" v="-2784"/>
+ <val o="1f4f96" v="-3191"/>
+ <val o="1f5da7" v="-3581"/>
+ <val o="1f6bb6" v="-3591"/>
+ <val o="1f79c7" v="-3124"/>
+ <val o="1f87d6" v="-3337"/>
+ <val o="1f95e7" v="-3142"/>
+ <val o="1fa401" v="-2806"/>
+ <val o="1fb204" v="-2480"/>
+ <val o="1fc016" v="-2497"/>
+ <val o="1fce25" v="-2171"/>
+ <val o="1fdc35" v="-2133"/>
+ <val o="1fea45" v="-2159"/>
+ <val o="1ff855" v="-2500"/>
+ <val o="200665" v="-2395"/>
+ <val o="201475" v="-3469"/>
+ <val o="202286" v="-4512"/>
+ <val o="203095" v="-5355"/>
+ <val o="203ea5" v="-5915"/>
+ <val o="204cb6" v="-5771"/>
+ <val o="205ac6" v="-5287"/>
+ <val o="2068d6" v="-5386"/>
+ <val o="2076e6" v="-5976"/>
+ <val o="2084f6" v="-6100"/>
+ <val o="209306" v="-6742"/>
+ <val o="20a116" v="-6312"/>
+ <val o="20af26" v="-5533"/>
+ <val o="20bd37" v="-5455"/>
+ <val o="20cb46" v="-4630"/>
+ <val o="20d957" v="-4348"/>
+ <val o="20e767" v="-4046"/>
+ <val o="20f581" v="-3855"/>
+ <val o="210386" v="-3519"/>
+ <val o="211194" v="-3131"/>
+ <val o="211fa5" v="-3014"/>
+ <val o="212db5" v="-2904"/>
+ <val o="213bc5" v="-2826"/>
+ <val o="2149d6" v="-3680"/>
+ <val o="2157e5" v="-4507"/>
+ <val o="2165f6" v="-5844"/>
+ <val o="217406" v="-6195"/>
+ <val o="218217" v="-6165"/>
+ <val o="219026" v="-6142"/>
+ <val o="219e39" v="-6223"/>
+ <val o="21ac46" v="-5938"/>
+ <val o="21ba57" v="-5926"/>
+ <val o="21c867" v="-5557"/>
+ <val o="21d677" v="-6240"/>
+ <val o="21e487" v="-5750"/>
+ <val o="21f296" v="-5772"/>
+ <val o="2200a6" v="-5468"/>
+ <val o="220eb7" v="-5393"/>
+ <val o="221cc6" v="-4543"/>
+ <val o="222ad7" v="-3876"/>
+ <val o="2238e7" v="-3622"/>
+ <val o="224701" v="-3292"/>
+ <val o="225505" v="-1681"/>
+ <val o="226315" v="-2082"/>
+ <val o="227125" v="-2043"/>
+ <val o="227f35" v="-1675"/>
+ <val o="228d45" v="-1785"/>
+ <val o="229b54" v="-3494"/>
+ <val o="22a965" v="-4080"/>
+ <val o="22b776" v="-4454"/>
+ <val o="22c586" v="-4816"/>
+ <val o="22d397" v="-4405"/>
+ <val o="22e1a6" v="-4620"/>
+ <val o="22efb6" v="-4820"/>
+ <val o="22fdc7" v="-4643"/>
+ <val o="230bd7" v="-4435"/>
+ <val o="2319e6" v="-5397"/>
+ <val o="2327f6" v="-5558"/>
+ <val o="23361b" v="-5883"/>
+ <val o="234416" v="-5207"/>
+ <val o="235226" v="-5203"/>
+ <val o="236037" v="-5253"/>
+ <val o="236e46" v="-4342"/>
+ <val o="237c57" v="-4194"/>
+ <val o="238a66" v="-3991"/>
+ <val o="239881" v="-3195"/>
+ <val o="23a685" v="-3328"/>
+ <val o="23b495" v="-3191"/>
+ <val o="23c2a4" v="-2966"/>
+ <val o="23d0b5" v="-2959"/>
+ <val o="23dec4" v="-2916"/>
+ <val o="23ecd5" v="-3620"/>
+ <val o="23fae4" v="-4562"/>
+ <val o="2408f6" v="-5013"/>
+ <val o="241706" v="-5793"/>
+ <val o="242518" v="-6605"/>
+ <val o="243325" v="-6787"/>
+ <val o="244137" v="-6732"/>
+ <val o="244f46" v="-6435"/>
+ <val o="246b66" v="-6415"/>
+ <val o="247976" v="-6261"/>
+ <val o="248786" v="-5371"/>
+ <val o="24957e" v="-5703"/>
+ <val o="24a38f" v="-5668"/>
+ <val o="24b19c" v="-5810"/>
+ <val o="24bfac" v="-5495"/>
+ <val o="24cdbc" v="-5368"/>
+ <val o="24dbcd" v="-4539"/>
+ <val o="24e9e5" v="-4003"/>
+ <val o="24f808" v="-3487"/>
+ <val o="250616" v="-3597"/>
+ <val o="251426" v="-3575"/>
+ <val o="252236" v="-3422"/>
+ <val o="253047" v="-3610"/>
+ <val o="253e56" v="-4069"/>
+ <val o="254c67" v="-4209"/>
+ <val o="255a76" v="-4977"/>
+ <val o="256887" v="-5845"/>
+ <val o="257697" v="-5662"/>
+ <val o="2584a8" v="-15155"/>
+ <val o="2592b6" v="-8621"/>
+ <val o="25a0c7" v="-4609"/>
+ <val o="25aed7" v="-6329"/>
+ <val o="25bce7" v="-6120"/>
+ <val o="25caf8" v="-5819"/>
+ <val o="25d907" v="-5800"/>
+ <val o="25e718" v="-5627"/>
+ <val o="25f527" v="-5318"/>
+ <val o="260338" v="-5543"/>
+ <val o="261149" v="-4916"/>
+ <val o="261f59" v="-4589"/>
+ <val o="262d68" v="-4670"/>
+ <val o="263b83" v="-3694"/>
+ <val o="264986" v="-3491"/>
+ <val o="265795" v="-3582"/>
+ <val o="2665a6" v="-3683"/>
+ <val o="2673b5" v="-3608"/>
+ <val o="2681c6" v="-3681"/>
+ <val o="268fd5" v="-3850"/>
+ <val o="269de6" v="-3923"/>
+ <val o="26abf6" v="-3955"/>
+ <val o="26ba06" v="-4467"/>
+ <val o="26c817" v="-4257"/>
+ <val o="26d62b" v="-3915"/>
+ <val o="26e436" v="-3897"/>
+ <val o="26f247" v="-3531"/>
+ <val o="270057" v="-3798"/>
+ <val o="270e67" v="-3628"/>
+ <val o="271c77" v="-4540"/>
+ <val o="272a87" v="-5171"/>
+ <val o="273897" v="-5038"/>
+ <val o="2746a8" v="-5028"/>
+ <val o="2754b9" v="-5029"/>
+ <val o="2762c7" v="-3993"/>
+ <val o="2770d8" v="-3551"/>
+ <val o="277ee7" v="-3206"/>
+ </par>
+ <par memind="674601" h="3dc1a7e0">
+ <val o="0" v="22123:137:88:76:103:69:89:6047:6571:2134:6414:2223:2727.231:1435.675:5.979:0.067:0:4171:41039:29052:42104:12218:24721:13504:8975:11153:2990:8665:9759:11742"/>
+ </par>
+ <par memind="673801" h="3dc1a7e0">
+ <val o="0" v="0:0:0:0:0:0:0:2472:22505:25160:16425:30012:23514.229:11675.362:9.272:0.416:0:6491:3221:2867:4204:22822:3047:6263:15342:9785:32424:23346:21578:23508"/>
+ </par>
+ <par memind="673401" h="3dc1a7e0">
+ <val o="0" v="72898:191:188:176:178:174:181:10441:14079:1360:46667:74131:80996.13:50324.326:32.188:0.038:0:44027:200289:109216:52461:12951:75896:69196:104852:117036:96903:120714:124308:96207"/>
+ </par>
+ <par memind="673001" h="3dc1a7e0">
+ <val o="0" v="0:0:0:0:0:0:0:3476:3226:5597:4853:0:0:0:0.001:0.137:0:0:0:0:0:50735:59205:0:0:0:0:0:0:0"/>
+ </par>
+ <par memind="26274601" h="3dc1a7e0">
+ <val o="0" v="0::1305::2869::4482::6066::7396::8573::10262::11922::13773::15492::17522::19544::21452::22070::22075::22080::22084::22085::22090::22097::22103::22109::22116::0::6::13::20::27::32::34::41::48::54::61::68::75::82::89::96::103::110::110::111::116::119::123::129"/>
+ <val o="2a300" v="0::5::5::7::11::12::12::17::24::30::37::44::51::58::65::69::71::71::71::73::75::76::76::81::0::6::13::20::27::34::40::44::50::::51::51::51::51::51::51::51::51::51::51::54::60::63::69::0"/>
+ <val o="55410" v="6::13::20::27::34::38::44::46::46::47::52::58::65::66::66::67::69::69::70::76::83::89::96::0::5::12::19::25::30::31::35::37::37::37::37::38::44::45::45::45::45::45::45::48::51::56::62::0"/>
+ <val o="7f710" v="6::14::21::28::35::42::47::50::50::50::52::59::65::69::72::74::75::75::75::75::78::79::82::0::7::14::21::28::34::38::44::45::45::49::56::63::70::76::80::835::1675::2038::2039::2856::3158::3607::4431::0"/>
+ <val o="a9a10" v="629::797::1456::2382::2476::2477::2821::2821::2821::::2821::2821::2856::2865::2865::3049::3223::3267::3532::4304::5147::5147::5449::0::101::102::252::592::605::605::605::605::612::612::612::612::612::612::612::679::767::767::767::767::767::767::910::0::1158"/>
+ <val o="d4b20" v="2289::2701::3076::3076::3385::3904::3904::3904::3904::3904::3904::3904::3904::3904::3904::3911::4023::4599::5237::5494::5780::6072::0::622::622::622::622::622::716::819::819::819::819::819::819::870::870::870::870::870::870::870::870::870::870::1024::0::1127"/>
+ <val o="fee20" v="1954::2173::2377::2377::2377::2377::2377::2377::2381::2381::2381::2381::2381::2381::2381::2381::2381::2381::2381::2384::2400::2400::0::163::163::163::163::163::163::163::163::204::330::751::1400::1433::1433::1433::1435.1::1435.1::1435.1::1435.1::1435.1::1435.144::1435.375::1435.381::0::1.179"/>
+ <val o="129120" v="2.486::3.869::5.278::5.809::5.811::5.811::5.811::5.843::5.967::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.969::5.969::0::0::0::0::0::0::0::0::0::0::0::0.001::0.014::0.032::0.04::0.046::0.049::0.05::0.05::0.05::0.05::0.05::0.05::0.053::0::0.005"/>
+ <val o="153420" v="0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.009::0.009::0.009::0.009::0.009::0.009::0.014::0::0.004::0.02::0.031::0.042::0.044::0.044::0.044::0.044::0.044::0.044::0.044::0.047::0.05::0.051::0.054::0.054::0.054::0::0::0::0::175::1878::0::2303"/>
+ <val o="17d720" v="5016::7889::10825::12785::13428::14568::16281::17870::18757::19673::22314::25317::28017::30611::32571::::33078::33570::34865::36124::37670::39908::0::978::2540::4236::5992::6773::6818::6915::7643::8510::8618::::9354::10334::10857::11190::11387::11387::12818::15547::19011::21077::22610::25682::0::2682::5757::9094"/>
+ <val o="1a9640" v="12439::14810::16426::18172::20462::22851::24957::26912::29200::31789"/>
+ <val o="1c7460" v="8197::8264::8365::8365::8996::9996::10570::10570::10570::10807::0::388::776::1655::2374::2391::2391::2429::3332::3677::3768::3851::4294::4930::5847::6625::7852::9492::11328::13376::15620::17946::20170::22469::0::1979::4179::4817::5302::5612::5802::6075::6787::7172::7489::7668::7867::8184"/>
+ <val o="1f1760" v="8270::8270::8270::8270::8270::8279::8425::8766::9261::11379::0::967::2232::3224::3584::3708::3742::4192::4373::4379::4379::4379::4379::4379::4379::4468::4816::5111::5533::6393::6740::7394::7394::7988::0::1479::2407::2907::3341::3347::3347::3522::4521::4702::5104::5399::6511::6511"/>
+ <val o="21ba60" v="6511::6511::7554::8046::8046::8084::8781::9437::9437::10034::0::258::258::258::258::258::303::541::1097::1122::1122::1122::1122::1397::1429::2052::2638::2638::2638::2638::2638::2779::2779::2779::0::211::716::993::993::993::993::1058::1060::1060::1060::1060::1123::1640"/>
+ <val o="246b70" v="3280::3952::3962::3962::3962::4297::5586::6998::7956::0::492::1570::2683::3585::3615::3618::3659::3659::3659::3659::3973::6767::8644::8717::8718::8718::8718::8718::8718::8718::8898::8898::9205::0::502::1825::3722::5758::7237::8159::8226::8226::8226::8226::8226::8226::8226::8226"/>
+ <val o="270e70" v="8226::8240::8504::8980::9466::10308::10666::10666::10739"/>
+ </par>
+ <par memind="26273801" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::680::1753::2436::2439::2471::2472::2472::0"/>
+ <val o="a9a10" v="273::304::304::304::392::1467::1961::2735::4511::::12114::16337::18252::18452::19051::20724::21115::21611::21616::21616::21647::22460::22505::0::1428::1786::1821::1821::2100::3116::4606::5700::6263::7232::8321::9202::9706::10109::10567::11827::12356::14818::17416::20186::22628::24467::25160::0::16"/>
+ <val o="d4b20" v="16::16::18::761::2317::2345::3031::5010::7681::10719::13491::14079::14541::14788::15028::15551::16182::16182::16327::16351::16394::16424::0::1254::2521::3304::4214::6189::8542::8884::9714::10907::12447::13604::14407::14928::16855::18323::20016::22306::23952::25511::26700::27858::29512::30012::0::0"/>
+ <val o="fee20" v="14::14::16::848::2512::4114::5556::7070::7967::9424::10812::11722::12829::13950::15033::17095::19423::20670::21129::21828::22608::23444::0::1024::1508::1786::1985::2951::4900::6589::8053::8849::8929::8929::8929::9502::10380::11200::11669.43::11670.714::11671.501::11673.236::11674.324::11674.616::11674.887::11675.345::0::0"/>
+ <val o="129120" v="0::0::0::0::0.632::1.57::2.787::4.389::5.353::6.676::7.825::8.473::9.059::9.07::9.083::9.113::9.149::9.186::9.222::9.254::9.263::9.267::0::0.054::0.078::0.094::0.113::0.149::0.2::0.229::0.234::0.241::0.244::0.245::0.245::0.245::0.245::0.245::0.246::0.276::0.309::0.348::0.383::0.408::0.415::0.416::0::0.022"/>
+ <val o="153420" v="0.031::0.032::0.033::0.045::0.076::0.1::0.121::0.161::0.197::0.227::0.252::0.257::0.264::0.275::0.295::0.315::0.322::0.329::0.332::0.348::0.357::0.357::0::0::0::0::0::0::0.015::0.051::0.062::0.068::0.079::0.091::0.094::0.094::0.097::0.108::0.125::0.161::1425::3563::5087::6081::6491::6491::0::0"/>
+ <val o="17d720" v="0::0::0::0::3::4::17::17::17::17::83::83::83::83::83::::2815::3221::3221::3221::3221::3221::0::0::0::0::0::0::503::2124::2124::2135::2187::::2220::2220::2220::2220::2231::2857::2867::2867::2867::2867::2867::2867::0::0::0::0"/>
+ <val o="1a9640" v="0::0::0::0::5::5::5::5::5::5"/>
+ <val o="1c7460" v="14139::14218::14538::16467::16493::16493::17913::20388::22503::22822::0::242::242::242::242::473::1614::2783::2783::2785::3043::3046::3046::3047::3047::3047::3047::3047::3047::3047::3047::3047::3047::3047::0::0::0::101::101::101::155::155::155::155::155::158::158::158"/>
+ <val o="1f1760" v="303::689::1267::3291::5362::5964::5964::6205::6263::6263::0::67::78::78::78::96::279::1257::2169::3382::5628::7692::9144::9800::11410::13193::13770::14500::14502::14526::14528::14693::15337::15342::0::0::128::128::128::631::1960::2834::2847::2994::3445::3445::3445::4010"/>
+ <val o="21ba60" v="5304::6802::7188::7304::7777::8119::8119::8238::9731::9785::0::3202::5137::5593::6304::8577::12322::12561::12561::13960::16533::20127::22841::22863::23106::23247::23247::24987::26402::27590::28075::29263::31438::32325::0::171::171::200::344::1476::2425::3387::4145::5875::9210::12291::15144::15144"/>
+ <val o="246b70" v="15144::15144::17267::21864::23232::23346::23346::23346::23346::0::86::86::86::86::188::709::1333::2511::4313::7593::10434::10434::10443::10622::10810::11293::12302::14859::17476::19565::19742::21035::21234::0::13::13::13::13::13::13::216::929::2058::3700::5698::8782::11698::14663"/>
+ <val o="270e70" v="17767::18546::19155::19155::19155::19155::20730::23016::23508"/>
+ </par>
+ <par memind="26273401" h="3dc1a7e0">
+ <val o="0" v="0::4177::8348::12421::16466::20389::24550::29638::35390::42329::49608::56982::64119::70819::72824::72831::72838::72845::72851::72859::72866::72873::72881::72889::0::8::16::24::32::40::48::56::65::73::81::89::97::105::114::122::131::138::145::152::160::167::175::183"/>
+ <val o="2a300" v="0::8::16::23::31::39::47::55::63::71::79::87::96::104::112::120::128::135::142::150::157::165::172::180::0::8::17::25::34::43::51::58::66::::79::85::92::98::105::111::117::124::131::138::145::153::160::168::0"/>
+ <val o="55410" v="8::16::25::33::41::49::56::64::70::77::84::91::98::105::111::118::125::132::139::147::154::162::170::0::7::16::24::32::40::48::55::63::69::76::82::89::96::103::109::116::122::128::135::143::150::158::166::0"/>
+ <val o="7f710" v="8::17::25::34::43::51::58::66::73::80::87::94::101::108::115::122::129::135::142::150::157::165::172::0::8::17::25::34::42::50::58::65::72::78::85::92::100::107::114::2595::7913::10294::10439::10439::10439::10441::10441::0"/>
+ <val o="a9a10" v="2::4::9::9::9::9::69::181::236::::327::461::720::1393::2215::3059::4593::6342::8041::9944::11561::12314::13166::0::47::47::47::47::47::47::47::47::48::59::87::127::134::135::142::182::537::769::1000::1156::1208::1230::1264::0::0"/>
+ <val o="d4b20" v="0::0::0::0::58::464::1214::2866::5195::7644::10189::13108::15902::18773::21557::24345::28271::32267::36012::39360::42352::44782::0::1215::1879::2581::3232::3730::4627::6845::9426::13213::17460::21812::26408::30878::35346::40061::44776::49145::53501::57575::61429::64968::68029::71154::0::2541"/>
+ <val o="fee20" v="4757::6749::8707::10446::12296::14817::18021::22192::24710::29209::33799::38000::42199::46375::50681::55062::59387::63686::67971::71883::75378::78274::0::1965::3785::5589::7408::9042::10735::13143::16254::20473::25210::29898::34989::39265::43547::47659::50298.816::50302.733::50306.729::50310.326::50313.783::50317.062::50320.016::50322.277::0::1.986"/>
+ <val o="129120" v="3.746::5.427::7.116::8.649::10.225::12.377::14.972::18.155::21.519::24.079::26.789::29.872::32.038::32.075::32.093::32.11::32.132::32.149::32.163::32.173::32.181::32.183::0::0::0::0::0::0::0::0::0::0.001::0.005::0.008::0.012::0.014::0.014::0.014::0.014::0.017::0.023::0.026::0.029::0.032::0.035::0.038::0::0"/>
+ <val o="153420" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0.004::0.013::0.023::0.035::0.039::0.04::0.04::0::0::0::0::0::0::0::0::0.011::0.064::0.184::0.299::0.403::0.491::0.587::0.684::0.777::0.882::4649::11369::18384::25539::32098::38189::0::5631"/>
+ <val o="17d720" v="11134::16580::21819::26934::32449::39011::46164::57329::70535::83592::96112::107934::119836::131836::143932::::159972::167838::175759::182940::189261::195260::0::4361::8637::12844::17026::21292::26185::31514::37629::44147::50295::::62972::69142::75490::81871::88411::92634::95263::98136::101493::104338::106264::108086::0::1118::2125::3163"/>
+ <val o="1a9640" v="3972::4424::5117::6670::8682::11273::14036::16800::19585::21687"/>
+ <val o="1c7460" v="12951::12951::12951::12951::12951::12951::12951::12951::12951::12951::0::0::0::0::0::0::0::0::0::0::2097::5658::9307::12837::16437::20072::24855::31120::37813::44635::51509::58224::64519::70460::0::4912::9779::12468::14377::16196::18098::20357::22916::25572::28333::31048::33673::36268"/>
+ <val o="1f1760" v="38769::41197::43617::46222::49307::52694::56229::59586::62790::66147::0::2563::5010::7377::9547::11662::13970::16722::19820::23668::28455::34079::39799::45148::50589::56448::62674::69084::75584::81629::87007::92190::96664::100953::0::3686::6981::10109::13149::16039::19168::23164::28263::34238::40473::46590::52821::58868"/>
+ <val o="21ba60" v="64810::70628::77026::83160::89027::94673::100155::105383::109691::113559::0::1996::3876::5949::7945::9673::11583::15197::19355::23959::28689::33229::37981::42745::47470::52656::58228::63768::69353::74634::79872::84699::88966::93090::0::3272::6519::9646::12665::15529::18785::22767::27361::33026::39197::45634::52231::58688"/>
+ <val o="246b70" v="71623::77897::83661::88919::94509::100226::106004::111517::116497::0::3504::7147::10760::14341::17823::21561::25845::30381::35821::41529::48026::57310::64898::70924::77195::83135::89105::94900::100321::105698::111053::115727::120309::0::3610::7127::10778::14421::18015::21712::25564::29454::33598::37946::42100::46054::49824::53500"/>
+ <val o="270e70" v="57099::61385::66221::71352::76382::81368::85828::89677::93036"/>
+ </par>
+ <par memind="26273001" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::10::521::1009::1914::2329::2804::0"/>
+ <val o="a9a10" v="1070::1205::1242::1361::1873::2688::2888::2968::3013::::3093::3165::3226::3226::3226::3226::3226::3226::3226::3226::3226::3226::3226::0::504::975::1420::1776::2305::2796::3212::4002::4254::4373::4494::4549::4753::4950::5087::5453::5453::5453::5453::5454::5473::5509::5581::0::581"/>
+ <val o="d4b20" v="1231::1927::2760::3902::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="fee20" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="129120" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0.017::0.031::0.048::0.065::0.085::0.105::0.114::0.116::0.116::0.116::0.116::0.116::0.117::0.12::0.123::0.128::0.135::0.135::0.135::0.135::0.135::0.135::0.136::0::0.016"/>
+ <val o="153420" v="0.036::0.054::0.074::0.096::0.119::0.137::0.152::0.165::0.178::0.19::0.204::0.216::0.228::0.237::0.249::0.256::0.256::0.256::0.256::0.256::0.256::0.257::0::0.012::0.018::0.02::0.021::0.025::0.032::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0::0::0::0::0::0::0::0"/>
+ <val o="17d720" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="1a9640" v="0::0::0::0::0::0::0::0::0::0"/>
+ <val o="1c7460" v="9208::9490::12579::16633::20164::23882::28334::33713::39220::44909::0::6542::13180::19855::26594::33432::40280::46777::52524::57875::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="1f1760" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="21ba60" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="246b70" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="270e70" v="0::0::0::0::0::0::0::0::0"/>
+ </par>
+ <par memind="1314601" h="3dc1a7e0">
+ <val o="0" v="270370"/>
+ </par>
+ <par memind="1313801" h="3dc1a7e0">
+ <val o="0" v="306693"/>
+ </par>
+ <par memind="1313401" h="3dc1a7e0">
+ <val o="0" v="1576111"/>
+ </par>
+ <par memind="1313001" h="3dc1a7e0">
+ <val o="0" v="127098"/>
+ </par>
+ <par memind="52514601" h="3dc1a7e0">
+ <val o="0" v="0::1305::2869::4482::6066::7396::8573::10262::11922::13773::15492::17522::19544::21452::22070::22075::22080::22084::22085::22090::22097::22103::22109::22116::22123::22129::22136::22143::22150::22156::22158::22166::22173::22180::22186::22193::22200::22207::22214::22221::22228::22235::22235::22236::22241::22244::22247::22254"/>
+ <val o="2a300" v="22261::22267::22267::22269::22273::22274::22274::22280::22287::22294::22301::22308::22315::22322::22329::22333::22335::22335::22335::22336::22338::22339::22339::22344::22351::22358::22365::22372::22379::22386::22391::22395::22402::::22404::22404::22404::22404::22404::22404::22404::22404::22404::22404::22407::22413::22416::22422::22429"/>
+ <val o="55410" v="22436::22443::22450::22457::22464::22468::22475::22477::22477::22478::22483::22489::22495::22497::22497::22498::22499::22499::22500::22507::22513::22520::22526::22533::22538::22545::22552::22559::22564::22564::22569::22571::22572::22572::22572::22573::22579::22580::22580::22580::22580::22580::22580::22583::22585::22590::22596::22603"/>
+ <val o="7f710" v="22610::22617::22624::22632::22639::22645::22650::22653::22653::22653::22655::22662::22669::22672::22675::22677::22678::22678::22678::22678::22682::22683::22686::22693::22701::22708::22715::22722::22728::22732::22738::22740::22740::22744::22751::22758::22765::22770::22775::23529::24370::24733::24734::25551::25853::26301::27126::28742"/>
+ <val o="a9a10" v="29372::29540::30199::31125::31218::31219::31564::31564::31564::::31564::31564::31599::31607::31607::31792::31965::32010::32274::33047::33890::33890::34193::35316::35417::35418::35569::35909::35921::35921::35921::35921::35928::35928::35928::35928::35928::35928::35928::35995::36083::36083::36083::36083::36083::36083::36226::37450::38609"/>
+ <val o="d4b20" v="39740::40151::40527::40527::40836::41356::41356::41356::41356::41356::41356::41356::41356::41356::41356::41363::41476::42051::42690::42946::43231::43524::43865::44488::44488::44488::44488::44488::44582::44685::44685::44685::44685::44685::44685::44736::44736::44736::44736::44736::44736::44736::44736::44736::44736::44890::46089::47216"/>
+ <val o="fee20" v="48043::48262::48466::48466::48466::48466::48466::48466::48471::48471::48471::48471::48471::48471::48471::48471::48471::48471::48471::48474::48491::48491::48816::48980::48980::48980::48980::48980::48980::48980::48980::49022::49147::49569::50218::50251::50251::50251::50252.91::50252.91::50252.91::50252.91::50252.91::50252.954::50253.185::50253.192::50253.487::50254.667"/>
+ <val o="129120" v="50255.973::50257.356::50258.765::50259.296::50259.299::50259.299::50259.299::50259.332::50259.455::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.457::50259.458::50259.458::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.469::50259.482::50259.5::50259.507::50259.513::50259.516::50259.517::50259.517::50259.517::50259.517::50259.517::50259.517::50259.521::50259.535::50259.54"/>
+ <val o="153420" v="50259.54::50259.54::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.546::50259.546::50259.546::50259.546::50259.547::50259.547::50259.552::50259.557::50259.561::50259.577::50259.588::50259.6::50259.601::50259.601::50259.601::50259.601::50259.601::50259.601::50259.601::50259.604::50259.608::50259.609::50259.612::50259.612::50259.612::50258::50258::50258::50258::50434::52137::54431::56734"/>
+ <val o="17d720" v="59447::62321::65257::67217::67860::69000::70713::72302::73189::74106::76746::79750::82449::85043::87003::::87510::88002::89297::90556::92102::94340::95470::96449::98011::99707::101463::102244::102289::102386::103115::103983::104091::::104826::105806::106330::106662::106859::106859::108290::111019::114483::116549::118083::121154::124524::127207::130282::133619"/>
+ <val o="1a9640" v="136963::139335::140951::142698::144988::147377::149483::151438::153726::156315"/>
+ <val o="1c7460" v="174829::174896::174996::174996::175627::176628::177201::177201::177201::177439::178849::179238::179626::180505::181224::181241::181241::181279::182183::182528::182619::182701::183144::183780::184697::185475::186702::188342::190179::192226::194470::196796::199020::201319::203571::205550::207751::208389::208873::209184::209373::209646::210358::210744::211061::211240::211439::211756"/>
+ <val o="1f1760" v="211843::211843::211843::211843::211843::211852::211998::212339::212833::214951::217077::218045::219309::220302::220662::220786::220819::221269::221451::221458::221458::221458::221458::221458::221458::221547::221895::222189::222611::223471::223818::224472::224473::225066::226054::227533::228461::228962::229396::229401::229401::229577::230576::230758::231159::231454::232566::232566"/>
+ <val o="21ba60" v="232566::232566::233609::234101::234101::234139::234836::235492::235492::236089::237208::237467::237467::237467::237467::237467::237511::237749::238306::238331::238331::238331::238331::238606::238637::239260::239846::239846::239846::239846::239847::239988::239988::239988::240200::240411::240916::241193::241194::241194::241194::241260::241262::241262::241262::241262::241325::241842"/>
+ <val o="246b70" v="243482::244154::244164::244164::244164::244499::245788::247200::248157::248866::249358::250436::251549::252452::252482::252484::252526::252526::252526::252526::252840::255634::257511::257584::257585::257585::257585::257585::257585::257585::257766::257766::258073::258628::259130::260454::262350::264387::265865::266787::266854::266854::266854::266854::266854::266854::266854::266854"/>
+ <val o="270e70" v="266854::266868::267132::267609::268095::268936::269294::269294::269367"/>
+ </par>
+ <par memind="52513801" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::680::1753::2436::2439::2471::2472::2472::2472"/>
+ <val o="a9a10" v="2745::2776::2776::2776::2864::3939::4434::5207::6983::::14587::18809::20724::20924::21523::23196::23587::24084::24088::24088::24119::24933::24978::24978::26406::26764::26799::26799::27079::28094::29584::30678::31242::32211::33301::34181::34685::35088::35546::36806::37336::39798::42396::45166::47608::49447::50139::50139::50155"/>
+ <val o="d4b20" v="50155::50156::50158::50901::52457::52486::53171::55151::57821::60860::63632::64220::64682::64929::65169::65692::66324::66324::66469::66492::66535::66565::66565::67820::69087::69869::70780::72755::75107::75449::76279::77473::79013::80171::80973::81494::83421::84889::86582::88872::90518::92077::93266::94424::96079::96579::96579::96579"/>
+ <val o="fee20" v="96594::96594::96596::97428::99092::100694::102136::103651::104547::106004::107392::108302::109410::110530::111613::113676::116005::117251::117711::118409::119188::120024::120093::121118::121602::121880::122079::123044::124994::126683::128148::128945::129025::129025::129025::129597::130475::131295::131764.303::131765.588::131766.375::131768.11::131769.198::131769.49::131769.761::131770.219::131770.236::131770.236"/>
+ <val o="129120" v="131770.236::131770.236::131770.236::131770.236::131770.868::131771.806::131773.023::131774.625::131775.589::131776.912::131778.062::131778.709::131779.295::131779.306::131779.319::131779.349::131779.386::131779.423::131779.458::131779.49::131779.499::131779.503::131779.509::131779.564::131779.587::131779.604::131779.623::131779.659::131779.709::131779.738::131779.744::131779.752::131779.755::131779.755::131779.755::131779.755::131779.755::131779.755::131779.756::131779.786::131779.819::131779.858::131779.893::131779.918::131779.926::131779.926::131779.926::131779.949"/>
+ <val o="153420" v="131779.958::131779.959::131779.96::131779.972::131780.003::131780.027::131780.049::131780.089::131780.125::131780.155::131780.179::131780.184::131780.191::131780.202::131780.222::131780.243::131780.251::131780.258::131780.261::131780.277::131780.285::131780.285::131780.288::131780.288::131780.288::131780.288::131780.288::131780.289::131780.303::131780.34::131780.35::131780.356::131780.368::131780.381::131780.384::131780.384::131780.386::131780.398::131780.415::131780.451::133205::135343::136866::137861::138272::138272::138272::138272"/>
+ <val o="17d720" v="138272::138272::138272::138272::138275::138277::138290::138290::138290::138290::138355::138355::138355::138355::138355::::141088::141493::141493::141493::141493::141493::141493::141493::141493::141493::141493::141493::141997::143618::143618::143629::143681::::143714::143714::143714::143714::143725::144351::144362::144362::144362::144362::144362::144362::144362::144362::144362::144362"/>
+ <val o="1a9640" v="144362::144362::144362::144362::144368::144368::144368::144368::144368::144368"/>
+ <val o="1c7460" v="162707::162786::163107::165035::165062::165062::166481::168956::171072::171391::171391::171634::171634::171634::171634::171865::173006::174175::174175::174177::174435::174438::174438::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174540::174540::174540::174594::174594::174594::174594::174594::174598::174598::174598"/>
+ <val o="1f1760" v="174742::175129::175706::177731::179803::180405::180405::180646::180704::180704::180704::180771::180782::180782::180782::180801::180983::181961::182873::184086::186332::188396::189848::190504::192114::193897::194474::195204::195206::195230::195232::195397::196041::196046::196046::196046::196175::196175::196175::196678::198007::198881::198895::199043::199494::199494::199494::200058"/>
+ <val o="21ba60" v="201353::202851::203237::203353::203825::204167::204167::204286::205778::205833::205833::209036::210970::211426::212138::214410::218156::218395::218395::219795::222368::225963::228676::228698::228941::229082::229082::230822::232237::233425::233910::235098::237273::238160::238259::238431::238431::238460::238604::239735::240685::241648::242406::244137::247471::250551::253404::253404"/>
+ <val o="246b70" v="253404::253404::255527::260124::261492::261606::261606::261606::261606::261606::261692::261692::261692::261692::261794::262315::262939::264118::265921::269200::272041::272041::272049::272229::272417::272900::273909::276466::279084::281173::281349::282642::282841::283185::283198::283198::283198::283198::283198::283198::283402::284114::285244::286886::288884::291968::294884::297849"/>
+ <val o="270e70" v="300954::301733::302341::302341::302341::302341::303915::306201::306693"/>
+ </par>
+ <par memind="52513401" h="3dc1a7e0">
+ <val o="0" v="0::4177::8348::12421::16466::20389::24550::29638::35390::42329::49608::56982::64119::70819::72824::72831::72838::72845::72851::72859::72866::72873::72881::72889::72898::72906::72914::72922::72931::72938::72946::72955::72963::72972::72979::72987::72995::73004::73012::73021::73029::73037::73045::73052::73060::73067::73074::73083"/>
+ <val o="2a300" v="73092::73100::73108::73116::73124::73131::73139::73147::73155::73164::73172::73180::73189::73197::73205::73213::73221::73228::73235::73242::73250::73258::73265::73273::73281::73290::73298::73307::73316::73324::73333::73341::73349::::73362::73368::73374::73381::73387::73394::73400::73407::73414::73421::73428::73436::73443::73451::73459"/>
+ <val o="55410" v="73467::73476::73484::73492::73501::73508::73516::73523::73529::73536::73543::73550::73557::73564::73571::73578::73585::73592::73599::73607::73614::73622::73630::73639::73647::73655::73663::73672::73680::73687::73694::73702::73709::73715::73721::73728::73735::73742::73748::73755::73762::73769::73776::73783::73791::73798::73806::73814"/>
+ <val o="7f710" v="73823::73831::73840::73849::73858::73866::73874::73881::73888::73895::73902::73909::73917::73924::73931::73938::73945::73952::73959::73966::73973::73980::73988::73996::74005::74014::74022::74031::74039::74047::74055::74062::74069::74076::74084::74091::74098::74105::74112::76593::81912::84293::84438::84438::84438::84439::84440::84440"/>
+ <val o="a9a10" v="84442::84445::84450::84450::84450::84450::84510::84622::84677::::84768::84902::85161::85834::86656::87500::89034::90783::92482::94386::96003::96756::97608::98520::98568::98568::98568::98568::98568::98568::98569::98569::98570::98581::98609::98649::98656::98657::98664::98704::99059::99291::99522::99679::99730::99752::99786::99882::99882"/>
+ <val o="d4b20" v="99882::99882::99882::99882::99940::100346::101096::102749::105078::107527::110072::112991::115786::118656::121441::124228::128154::132149::135895::139243::142235::144665::146550::147766::148430::149132::149783::150281::151178::153396::155977::159764::164011::168363::172959::177429::181897::186612::191328::195697::200054::204127::207981::211520::214581::217705::220682::223224"/>
+ <val o="fee20" v="225440::227431::229389::231128::232979::235501::238705::242877::245395::249894::254484::258685::262884::267059::271365::275747::280072::284371::288656::292567::296062::298958::301678::303643::305464::307268::309087::310721::312414::314823::317933::322153::326889::331577::336668::340944::345227::349338::151978.697::151982.614::151986.61::151990.207::151993.665::151996.943::151999.897::152002.158::152004.207::152006.194"/>
+ <val o="129120" v="152007.954::152009.635::152011.324::152012.857::152014.433::152016.586::152019.181::152022.365::152025.728::152028.288::152030.998::152034.081::152036.247::152036.284::152036.302::152036.319::152036.341::152036.359::152036.372::152036.383::152036.39::152036.393::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.399::152036.404::152036.407::152036.412::152036.414::152036.414::152036.414::152036.414::152036.417::152036.422::152036.425::152036.428::152036.432::152036.435::152036.437::152036.437::152036.437"/>
+ <val o="153420" v="152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.441::152036.45::152036.46::152036.472::152036.476::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.489::152036.543::152036.663::152036.778::152036.883::152036.971::152037.066::152037.164::152037.257::152037.361::356685::363405::370420::377575::384134::390225::396064::401696"/>
+ <val o="17d720" v="407198::412644::417883::422998::428513::435075::442229::453395::466601::479658::492177::504000::515901::527901::539997::::556036::563903::571823::579005::585326::591325::596354::600715::604992::609199::613381::617646::622539::627868::633983::640502::646650::::659328::665498::671845::678227::684766::688990::691619::694492::697849::700694::702620::704442::705572::706691::707697::708736"/>
+ <val o="1a9640" v="709545::709997::710690::712243::714255::716847::719609::722373::725158::727261"/>
+ <val o="1c7460" v="770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::773086::776647::780296::783826::787426::791061::795844::802109::808801::815624::822498::829213::835508::841449::846886::851798::856665::859354::861263::863083::864985::867245::869803::872460::875221::877937::880561::883156"/>
+ <val o="1f1760" v="885657::888085::890505::893110::896194::899581::903116::906473::909677::913034::916082::918646::921093::923460::925630::927744::930053::932806::935904::939753::944540::950163::955884::961233::966673::972533::978758::985168::991668::997713::1003091::1008274::1012749::1017038::1020937::1024624::1027919::1031047::1034087::1036976::1040106::1044102::1049201::1055177::1061411::1067528::1073759::1079806"/>
+ <val o="21ba60" v="1085748::1091566::1097964::1104098::1109965::1115611::1121093::1126321::1130630::1134497::1137973::1139970::1141849::1143923::1145918::1147647::1149557::1153171::1157329::1161934::1166664::1171204::1175957::1180721::1185446::1190632::1196204::1201743::1207328::1212608::1217847::1222674::1226942::1231066::1234878::1238151::1241398::1244525::1247544::1250408::1253663::1257645::1262239::1267905::1274075::1280512::1287109::1293566"/>
+ <val o="246b70" v="1306501::1312775::1318539::1323798::1329387::1335105::1340883::1346396::1351376::1355594::1359099::1362742::1366355::1369936::1373418::1377156::1381440::1385976::1391416::1397124::1403622::1412905::1420494::1426519::1432791::1438731::1444700::1450495::1455916::1461293::1466648::1471323::1475904::1479903::1483514::1487030::1490682::1494324::1497918::1501615::1505468::1509358::1513503::1517850::1522004::1525957::1529728::1533403"/>
+ <val o="270e70" v="1537003::1541289::1546124::1551256::1556286::1561272::1565731::1569581::1572940"/>
+ </par>
+ <par memind="52513001" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::10::521::1009::1914::2329::2804::3476"/>
+ <val o="a9a10" v="4546::4682::4719::4838::5350::6165::6365::6445::6490::::6571::6643::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::7208::7679::8124::8480::9010::9501::9918::10708::10960::11079::11200::11255::11459::11656::11793::12159::12159::12159::12159::12160::12179::12215::12287::12302::12884"/>
+ <val o="d4b20" v="13533::14230::15062::16204::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="fee20" v="17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492"/>
+ <val o="129120" v="17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.493::17157.511::17157.525::17157.542::17157.558::17157.579::17157.599::17157.608::17157.611::17157.612::17157.612::17157.612::17157.612::17157.613::17157.616::17157.618::17157.623::17157.631::17157.631::17157.631::17157.631::17157.631::17157.631::17157.631::17157.632::17157.649"/>
+ <val o="153420" v="17157.669::17157.686::17157.706::17157.728::17157.752::17157.771::17157.786::17157.799::17157.812::17157.824::17157.838::17157.85::17157.861::17157.871::17157.883::17157.89::17157.89::17157.89::17157.89::17157.89::17157.89::17157.891::17157.899::17157.911::17157.918::17157.92::17157.921::17157.925::17157.932::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="17d720" v="17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="1a9640" v="17156::17156::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="1c7460" v="26366::26648::29737::33790::37320::41038::45491::50870::56378::62066::67892::74435::81073::87748::94487::101325::108173::114671::120417::125768::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="1f1760" v="127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="21ba60" v="127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="246b70" v="127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="270e70" v="127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ </par>
+ <par memind="34601" h="3dc1a7e0">
+ <val o="0" v="6094564::6095869::6097433::6099046::6100630::6101960::6103137::6104826::6106487::6108338::6110057::6112087::6114108::6116017::6116635::6116640::6116645::6116648::6116649::6116654::6116661::6116667::6116674::6116681::6116688::6116694::6116701::6116708::6116715::6116721::6116723::6116730::6116738::6116745::6116751::6116757::6116764::6116771::6116779::6116786::6116793::6116799::6116800::6116800::6116805::6116808::6116812::6116819"/>
+ <val o="2a300" v="6116826::6116832::6116832::6116834::6116838::6116839::6116839::6116845::6116852::6116859::6116866::6116873::6116880::6116887::6116893::6116898::6116899::6116899::6116899::6116901::6116902::6116904::6116905::6116910::6116917::6116924::6116931::6116938::6116945::6116952::6116957::6116961::6116968::::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116972::6116978::6116980::6116987::6116994"/>
+ <val o="55410" v="6117001::6117008::6117015::6117022::6117029::6117033::6117039::6117042::6117042::6117044::6117049::6117054::6117061::6117062::6117062::6117063::6117065::6117065::6117066::6117072::6117078::6117084::6117091::6117098::6117103::6117110::6117117::6117124::6117129::6117129::6117134::6117136::6117137::6117137::6117137::6117138::6117144::6117145::6117145::6117145::6117145::6117145::6117145::6117148::6117150::6117154::6117160::6117167"/>
+ <val o="7f710" v="6117174::6117181::6117189::6117196::6117203::6117210::6117216::6117219::6117220::6117220::6117222::6117228::6117235::6117239::6117241::6117244::6117244::6117244::6117244::6117244::6117247::6117248::6117252::6117259::6117266::6117273::6117280::6117287::6117293::6117297::6117303::6117304::6117305::6117309::6117316::6117323::6117330::6117336::6117340::6118095::6118936::6119299::6119300::6120117::6120419::6120867::6121692::6123308"/>
+ <val o="a9a10" v="6123938::6124106::6124765::6125691::6125784::6125785::6126129::6126129::6126129::::6126129::6126129::6126164::6126173::6126173::6126358::6126531::6126576::6126840::6127612::6128455::6128455::6128757::6129880::6129981::6129983::6130133::6130473::6130485::6130485::6130485::6130485::6130493::6130493::6130493::6130493::6130493::6130493::6130493::6130561::6130649::6130649::6130649::6130649::6130649::6130649::6130792::6132016::6133175"/>
+ <val o="d4b20" v="6134306::6134717::6135093::6135093::6135402::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135929::6136041::6136617::6137256::6137512::6137797::6138089::6138431::6139053::6139053::6139053::6139053::6139053::6139147::6139251::6139251::6139251::6139251::6139251::6139251::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139456::6140655::6141782"/>
+ <val o="fee20" v="6142609::6142828::6143032::6143032::6143032::6143032::6143032::6143032::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143039::6143056::6143056::6143382::6143545::6143545::6143545::6143545::6143545::6143545::6143545::6143545::6143587::6143713::6144135::6144783::6144816::6144816::6144816::144818.2::144818.2::144818.2::144818.2::144818.2::144818.243::144818.474::144818.48::144818.775::144819.955"/>
+ <val o="129120" v="144821.261::144822.644::144824.053::144824.584::144824.587::144824.587::144824.587::144824.62::144824.744::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.755::144824.755::144824.755::144824.755::144824.755::144824.755::144824.755::144824.756::144824.756::144824.756::144824.756::144824.757::144824.77::144824.788::144824.796::144824.802::144824.805::144824.806::144824.806::144824.806::144824.806::144824.806::144824.806::144824.809::144824.823::144824.828"/>
+ <val o="153420" v="144824.828::144824.828::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.834::144824.834::144824.834::144824.834::144824.835::144824.835::144824.84::144824.845::144824.849::144824.865::144824.876::144824.888::144824.889::144824.889::144824.889::144824.889::144824.889::144824.889::144824.889::144824.892::144824.896::144824.897::144824.9::144824.9::144824.9::6144824::6144824::6144824::6144824::6145000::6146702::6148995::6151298"/>
+ <val o="17d720" v="6154011::6156885::6159821::6161781::6162424::6163565::6165278::6166868::6167755::6168671::6171312::6174315::6177014::6179609::6181568::::6182076::6182567::6183863::6185122::6186668::6188906::6190037::6191016::6192577::6194274::6196029::6196810::6196855::6196952::6197681::6198548::6198657::::6199392::6200372::6200895::6201228::6201425::6201425::6202856::6205585::6209048::6211115::6212648::6215720::6219090::6221773::6224848::6228185"/>
+ <val o="1a9640" v="6231530::6233901::6235517::6237264::6239554::6241943::6244049::6246003::6248291::6250880"/>
+ <val o="1c7460" v="6269393::6269460::6269561::6269561::6270193::6271193::6271766::6271766::6271766::6272003::6273414::6273802::6274190::6275070::6275788::6275805::6275805::6275844::6276747::6277093::6277184::6277267::6277710::6278346::6279262::6280041::6281268::6282908::6284744::6286792::6289036::6291362::6293586::6295884::6298136::6300115::6302316::6302954::6303439::6303749::6303938::6304212::6304924::6305309::6305626::6305804::6306004::6306321"/>
+ <val o="1f1760" v="6306407::6306407::6306407::6306407::6306407::6306417::6306562::6306904::6307399::6309517::6311643::6312611::6313875::6314868::6315228::6315352::6315385::6315835::6316016::6316023::6316023::6316023::6316023::6316023::6316023::6316113::6316460::6316755::6317177::6318036::6318383::6319038::6319038::6319632::6320620::6322099::6323027::6323528::6323962::6323967::6323967::6324143::6325141::6325322::6325724::6326020::6327132::6327132"/>
+ <val o="21ba60" v="6327132::6327132::6328174::6328667::6328667::6328705::6329402::6330058::6330058::6330655::6331774::6332033::6332033::6332033::6332033::6332033::6332078::6332316::6332872::6332897::6332897::6332897::6332897::6333173::6333204::6333827::6334413::6334413::6334413::6334413::6334413::6334554::6334554::6334554::6334765::6334977::6335481::6335759::6335759::6335759::6335759::6335824::6335826::6335826::6335826::6335826::6335889::6336407"/>
+ <val o="246b70" v="6338047::6338719::6338729::6338729::6338729::6339065::6340354::6341766::6342723::6343432::6343924::6345002::6346115::6347018::6347048::6347050::6347091::6347091::6347091::6347091::6347406::6350200::6352077::6352150::6352150::6352150::6352150::6352150::6352150::6352150::6352331::6352331::6352638::6353193::6353695::6355019::6356915::6358952::6360430::6361352::6361420::6361420::6361420::6361420::6361420::6361420::6361420::6361420"/>
+ <val o="270e70" v="6361420::6361434::6361698::6362174::6362660::6363502::6363860::6363860::6363933"/>
+ </par>
+ <par memind="33801" h="3dc1a7e0">
+ <val o="0" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422"/>
+ <val o="2a300" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422"/>
+ <val o="55410" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422"/>
+ <val o="7f710" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88180102::88181176::88181859::88181861::88181894::88181896::88181896::88181896"/>
+ <val o="a9a10" v="88182169::88182200::88182200::88182200::88182288::88183363::88183857::88184631::88186407::::88194010::88198233::88200148::88200348::88200947::88202620::88203011::88203507::88203512::88203512::88203543::88204356::88204401::88204401::88205830::88206188::88206222::88206222::88206502::88207517::88209008::88210102::88210666::88211635::88212724::88213604::88214108::88214512::88214969::88216229::88216759::88219221::88221818::88224589::88227031::88228870::88229563::88229563::88229580"/>
+ <val o="d4b20" v="88229580::88229580::88229582::88230325::88231881::88231910::88232595::88234574::88237245::88240283::88243056::88243643::88244105::88244352::88244593::88245115::88245746::88245746::88245891::88245915::88245959::88245988::88245989::88247244::88248510::88249293::88250203::88252178::88254531::88254874::88255704::88256898::88258438::88259595::88260398::88260919::88262845::88264314::88266006::88268297::88269942::88271502::88272690::88273849::88275503::88276003::88276003::88276003"/>
+ <val o="fee20" v="88276017::88276017::88276019::88276851::88278515::88280118::88281560::88283074::88283971::88285428::88286815::88287726::88288833::88289953::88291037::88293099::88295427::88296674::88297133::88297832::88298612::88299447::88299517::88300541::88301025::88301304::88301503::88302468::88304417::88306106::88307571::88308368::88308448::88308448::88308448::88309021::88309899::88310719::111188.016::111189.3::111190.088::111191.823::111192.91::111193.202::111193.473::111193.931::111193.948::111193.948"/>
+ <val o="129120" v="111193.948::111193.948::111193.948::111193.948::111194.58::111195.519::111196.735::111198.338::111199.302::111200.625::111201.775::111202.422::111203.008::111203.02::111203.032::111203.062::111203.098::111203.135::111203.171::111203.203::111203.212::111203.216::111203.221::111203.276::111203.299::111203.316::111203.335::111203.371::111203.422::111203.452::111203.457::111203.464::111203.468::111203.468::111203.468::111203.468::111203.468::111203.468::111203.469::111203.5::111203.532::111203.571::111203.606::111203.632::111203.639::111203.639::111203.639::111203.661"/>
+ <val o="153420" v="111203.671::111203.671::111203.672::111203.684::111203.715::111203.739::111203.761::111203.801::111203.837::111203.867::111203.891::111203.897::111203.904::111203.915::111203.935::111203.955::111203.962::111203.969::111203.972::111203.988::111203.997::111203.997::111204::111204.001::111204.001::111204.001::111204.001::111204.001::111204.016::111204.052::111204.063::111204.07::111204.081::111204.093::111204.097::111204.097::111204.099::111204.11::111204.128::111204.164::88312628::88314767::88316290::88317284::88317694::88317694::88317694::88317694"/>
+ <val o="17d720" v="88317694::88317694::88317694::88317694::88317698::88317700::88317713::88317713::88317713::88317713::88317778::88317778::88317778::88317778::88317778::::88320511::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88321420::88323042::88323042::88323053::88323105::::88323137::88323137::88323137::88323137::88323148::88323775::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785"/>
+ <val o="1a9640" v="88323785::88323785::88323785::88323785::88323790::88323790::88323790::88323790::88323790::88323790"/>
+ <val o="1c7460" v="88342130::88342209::88342529::88344458::88344485::88344485::88345905::88348379::88350494::88350813::88350813::88351056::88351056::88351056::88351056::88351287::88352428::88353598::88353598::88353601::88353859::88353862::88353862::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353965::88353965::88353965::88354018::88354018::88354018::88354018::88354018::88354021::88354021::88354021"/>
+ <val o="1f1760" v="88354166::88354552::88355130::88357154::88359226::88359828::88359828::88360068::88360126::88360126::88360126::88360194::88360205::88360205::88360205::88360223::88360406::88361385::88362297::88363511::88365757::88367821::88369273::88369929::88371538::88373322::88373899::88374629::88374631::88374655::88374657::88374822::88375466::88375471::88375471::88375471::88375599::88375599::88375599::88376102::88377432::88378306::88378319::88378467::88378917::88378917::88378918::88379482"/>
+ <val o="21ba60" v="88380777::88382275::88382661::88382777::88383250::88383592::88383592::88383711::88385203::88385257::88385257::88388459::88390394::88390850::88391561::88393834::88397579::88397819::88397819::88399218::88401792::88405386::88408100::88408122::88408365::88408505::88408505::88410246::88411660::88412849::88413333::88414521::88416696::88417583::88417683::88417854::88417854::88417883::88418027::88419159::88420108::88421071::88421828::88423559::88426894::88429975::88432828::88432828"/>
+ <val o="246b70" v="88432828::88432828::88434951::88439548::88440916::88441030::88441030::88441030::88441030::88441030::88441116::88441116::88441116::88441116::88441218::88441739::88442363::88443542::88445344::88448624::88451464::88451464::88451473::88451652::88451840::88452323::88453332::88455889::88458507::88460595::88460772::88462065::88462264::88462608::88462622::88462622::88462622::88462622::88462622::88462622::88462826::88463538::88464667::88466310::88468309::88471393::88474308::88477274"/>
+ <val o="270e70" v="88480378::88481157::88481766::88481766::88481766::88481766::88483340::88485626::88486118"/>
+ </par>
+ <par memind="33401" h="3dc1a7e0">
+ <val o="0" v="9437795::9441972::9446144::9450217::9454261::9458184::9462346::9467434::9473186::9480126::9487404::9494779::9501916::9508615::9510621::9510628::9510635::9510642::9510649::9510656::9510663::9510671::9510678::9510687::9510695::9510703::9510712::9510720::9510728::9510736::9510743::9510751::9510760::9510768::9510776::9510784::9510792::9510800::9510809::9510817::9510826::9510833::9510840::9510847::9510855::9510863::9510871::9510879"/>
+ <val o="2a300" v="9510888::9510896::9510904::9510912::9510920::9510928::9510935::9510944::9510952::9510960::9510968::9510976::9510984::9510993::9511001::9511009::9511016::9511023::9511030::9511038::9511045::9511053::9511061::9511069::9511078::9511086::9511095::9511103::9511112::9511121::9511129::9511137::9511144::::9511158::9511165::9511171::9511178::9511184::9511190::9511197::9511203::9511209::9511216::9511223::9511231::9511239::9511247::9511255"/>
+ <val o="55410" v="9511264::9511272::9511280::9511289::9511297::9511305::9511313::9511320::9511327::9511333::9511340::9511347::9511354::9511361::9511368::9511375::9511382::9511389::9511397::9511404::9511412::9511419::9511427::9511435::9511443::9511451::9511460::9511468::9511476::9511484::9511492::9511500::9511506::9511513::9511519::9511526::9511533::9511539::9511546::9511553::9511559::9511565::9511572::9511580::9511587::9511595::9511603::9511611"/>
+ <val o="7f710" v="9511619::9511628::9511637::9511646::9511654::9511662::9511670::9511677::9511684::9511691::9511698::9511705::9511713::9511720::9511727::9511734::9511740::9511747::9511754::9511761::9511769::9511777::9511785::9511794::9511803::9511811::9511820::9511828::9511836::9511844::9511852::9511859::9511866::9511873::9511880::9511888::9511895::9511902::9511909::9514390::9519709::9522089::9522234::9522234::9522234::9522235::9522235::9522235"/>
+ <val o="a9a10" v="9522237::9522240::9522245::9522245::9522245::9522245::9522305::9522417::9522472::::9522564::9522698::9522957::9523630::9524451::9525296::9526830::9528579::9530279::9532182::9533799::9534552::9535404::9536317::9536364::9536364::9536364::9536364::9536364::9536364::9536365::9536365::9536366::9536378::9536405::9536445::9536452::9536454::9536460::9536501::9536855::9537087::9537318::9537474::9537525::9537548::9537581::9537677::9537678"/>
+ <val o="d4b20" v="9537678::9537678::9537678::9537678::9537736::9538143::9538893::9540546::9542875::9545324::9547869::9550788::9553582::9556453::9559237::9562025::9565951::9569947::9573692::9577040::9580032::9582462::9584347::9585562::9586226::9586928::9587579::9588077::9588974::9591192::9593773::9597560::9601808::9606160::9610756::9615226::9619694::9624409::9629124::9633493::9637849::9641922::9645776::9649316::9652378::9655502::9658479::9661021"/>
+ <val o="fee20" v="9663237::9665228::9667187::9668925::9670776::9673297::9676502::9680673::9683191::9687690::9692279::9696481::9700679::9704855::9709161::9713542::9717867::9722167::9726451::9730363::9733859::9736754::9739475::9741440::9743260::9745064::9746883::9748517::9750210::9752619::9755730::9759949::9764686::9769374::9774465::9778741::9783023::9787135::89775.123::89779.04::89783.036::89786.633::89790.091::89793.369::89796.324::89798.585::89800.635::89802.621"/>
+ <val o="129120" v="89804.381::89806.063::89807.752::89809.284::89810.86::89813.012::89815.607::89818.79::89822.154::89824.714::89827.425::89830.508::89832.673::89832.71::89832.728::89832.745::89832.767::89832.785::89832.798::89832.809::89832.817::89832.82::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.826::89832.831::89832.834::89832.838::89832.84::89832.84::89832.84::89832.84::89832.843::89832.848::89832.851::89832.854::89832.858::89832.861::89832.864::89832.864::89832.864"/>
+ <val o="153420" v="89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.868::89832.877::89832.887::89832.899::89832.903::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.916::89832.97::89833.09::89833.204::89833.309::89833.397::89833.492::89833.59::89833.683::89833.788::9794482::9801201::9808217::9815372::9821930::9828022::9833861::9839493"/>
+ <val o="17d720" v="9844996::9850441::9855681::9860795::9866311::9872873::9880027::9891193::9904398::9917454::9929974::9941796::9953698::9965698::9977794::::9993834::10001701::10009621::10016803::10023124::10029123::10034151::10038513::10042789::10046996::10051178::10055443::10060336::10065665::10071780::10078299::10084446::::10097123::10103293::10109641::10116023::10122562::10126785::10129414::10132288::10135645::10138489::10140416::10142238::10143368::10144487::10145494::10146532"/>
+ <val o="1a9640" v="10147341::10147793::10148486::10150039::10152051::10154643::10157406::10160170::10162955::10165058"/>
+ <val o="1c7460" v="10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10210882::10214444::10218093::10221623::10225223::10228858::10233641::10239906::10246598::10253420::10260295::10267010::10273305::10279245::10284682::10289594::10294461::10297150::10299060::10300879::10302781::10305041::10307600::10310256::10313017::10315732::10318357::10320952"/>
+ <val o="1f1760" v="10323453::10325881::10328301::10330906::10333991::10337378::10340913::10344270::10347474::10350831::10353880::10356443::10358890::10361257::10363427::10365542::10367850::10370602::10373700::10377548::10382335::10387959::10393679::10399028::10404469::10410328::10416554::10422964::10429464::10435510::10440887::10446070::10450544::10454833::10458732::10462419::10465714::10468842::10471882::10474772::10477901::10481897::10486997::10492973::10499207::10505324::10511555::10517602"/>
+ <val o="21ba60" v="10523544::10529362::10535760::10541894::10547762::10553407::10558890::10564118::10568426::10572294::10575771::10577767::10579647::10581720::10583716::10585444::10587354::10590968::10595126::10599731::10604460::10609000::10613753::10618516::10623241::10628428::10633999::10639539::10645125::10650405::10655643::10660471::10664738::10668862::10672675::10675947::10679195::10682322::10685340::10688204::10691460::10695443::10700037::10705702::10711873::10718309::10724907::10731364"/>
+ <val o="246b70" v="10744298::10750573::10756336::10761594::10767184::10772901::10778679::10784193::10789173::10793391::10796895::10800538::10804151::10807732::10811214::10814952::10819236::10823772::10829212::10834920::10841418::10850701::10858289::10864315::10870586::10876526::10882496::10888291::10893713::10899090::10904444::10909119::10913700::10917699::10921310::10924826::10928478::10932121::10935715::10939412::10943265::10947154::10951299::10955647::10959802::10963755::10967526::10971201"/>
+ <val o="270e70" v="10974801::10979086::10983922::10989053::10994083::10999069::11003529::11007379::11010738"/>
+ </par>
+ <par memind="33001" h="3dc1a7e0">
+ <val o="0" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576"/>
+ <val o="2a300" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576"/>
+ <val o="55410" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576"/>
+ <val o="7f710" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612587::38613097::38613585::38614490::38614906::38615380::38616053"/>
+ <val o="a9a10" v="38617123::38617258::38617296::38617414::38617926::38618741::38618942::38619021::38619066::::38619147::38619219::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619786::38620257::38620702::38621058::38621587::38622078::38622494::38623284::38623536::38623655::38623776::38623831::38624035::38624232::38624369::38624735::38624735::38624735::38624735::38624737::38624755::38624791::38624863::38624879::38625460"/>
+ <val o="d4b20" v="38626110::38626807::38627639::38628781::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732"/>
+ <val o="fee20" v="38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398"/>
+ <val o="129120" v="229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.399::229734.417::229734.431::229734.448::229734.465::229734.485::229734.505::229734.514::229734.517::229734.517::229734.517::229734.517::229734.517::229734.518::229734.521::229734.523::229734.528::229734.536::229734.536::229734.536::229734.536::229734.536::229734.536::229734.536::229734.537::229734.554"/>
+ </par>
+ </device>
+ </select>
+ </data>
+</electroxml>
diff --git a/result/noent/att5 b/result/noent/att5
new file mode 100644
index 0000000..8768e36
--- /dev/null
+++ b/result/noent/att5
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ATTLIST normId attr NMTOKENS #IMPLIED>
+]>
+<doc>
+ <!-- no normalization -->
+ <norm attr=" "/>
+ <norm attr=" foo bar "/>
+ <norm attr=" foobar"/>
+ <norm attr=" foo bar "/>
+ <norm attr="foobar "/>
+ <norm attr=" &amp; "/>
+ <norm attr=" foo&amp;bar "/>
+ <norm attr=" foobar&amp;"/>
+ <norm attr="&amp;foo bar "/>
+ <norm attr="foobar &amp;"/>
+ <norm attr=" &lt; "/>
+ <norm attr=" foo&lt;bar "/>
+ <norm attr=" foobar&lt;"/>
+ <norm attr="&lt;foo bar "/>
+ <norm attr="foobar &lt;"/>
+ <norm attr=" &#13;&#10;&#9; "/>
+ <!-- normalization -->
+ <normId attr=""/>
+ <normId attr="foo bar"/>
+ <normId attr="foobar"/>
+ <normId attr="foo bar"/>
+ <normId attr="foobar"/>
+ <normId attr="&amp;"/>
+ <normId attr="foo&amp;bar"/>
+ <normId attr="foobar&amp;"/>
+ <normId attr="&amp;foo bar"/>
+ <normId attr="foobar &amp;"/>
+ <normId attr="&lt;"/>
+ <normId attr="foo&lt;bar"/>
+ <normId attr="foobar&lt;"/>
+ <normId attr="&lt;foo bar"/>
+ <normId attr="foobar &lt;"/>
+ <normId attr="&#13;&#10;&#9;"/> <!-- PBM serializing back -->
+</doc>
diff --git a/result/noent/att6 b/result/noent/att6
new file mode 100644
index 0000000..338e6b7
--- /dev/null
+++ b/result/noent/att6
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Invoice xmlns:ccts="urn:oasis:names:tc:ubl:CoreComponentParameters:1.0:0.70" xmlns:cct="urn:oasis:names:tc:ubl:CoreComponentTypes:1.0:0.70" xmlns:cat="urn:oasis:names:tc:ubl:CommonAggregateTypes:1.0:0.70" xmlns="urn:oasis:names:tc:ubl:Invoice:1.0:0.70">
+ <cat:ReferencedOrder>
+ <cat:SellersOrderID schemeID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeID" schemeAgencyID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeAgencyID" schemeVersionID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeVersionID" schemeAgencySchemeID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeAgencySchemeID" schemeAgencySchemeAgencyID="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeAgencySchemeAgencyID" schemeDataURI="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeDataURI" schemeURI="pvalue-&gt;ReferencedOrder.SellersOrderID.schemeURI" UID="pvalue-&gt;ReferencedOrder.SellersOrderID.UID" UIDRef="pvalue-&gt;ReferencedOrder.SellersOrderID.UIDRef" UIDRefs="pvalue-&gt;ReferencedOrder.SellersOrderID.UIDRefs0" language="pvalue-&gt;ReferencedOrder.SellersOrderID.language">pvalue-&gt;ReferencedOrder.SellersOrderID</cat:SellersOrderID>
+ </cat:ReferencedOrder>
+</Invoice>
diff --git a/result/noent/att7 b/result/noent/att7
new file mode 100644
index 0000000..a58a04d
--- /dev/null
+++ b/result/noent/att7
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE x [
+<!ELEMENT x (test)*>
+<!ELEMENT test EMPTY>
+<!ATTLIST test att CDATA "attvalue">
+<!ENTITY test.ent "<test/>">
+]>
+<x>
+ <test/>
+ <test/>
+</x>
diff --git a/result/noent/att8 b/result/noent/att8
new file mode 100644
index 0000000..1d807a2
--- /dev/null
+++ b/result/noent/att8
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<ino:response xmlns:ino="http://namespaces.softwareag.com/tamino/response2" xmlns:xql="http://metalab.unc.edu/xql/" ino:sessionid="556" ino:sessionkey="1590469677"><xql:query>/bsk:DocPart[@docId='20040308152601345236' and @docPartNo=1]</xql:query><ino:message ino:returnvalue="0"><ino:messageline>XQL Request processing</ino:messageline></ino:message><xql:result><bsk:DocPart xmlns:bsk="http://www.heitec.net/sara4/tamino/basket" docId="20040308152601345236" docPartNo="1" ino:id="15290"><bsk:File name="4898WPZEO2M65" size="75195"> </bsk:File></bsk:DocPart></xql:result><ino:message ino:returnvalue="0"><ino:messageline>XQL Request processed</ino:messageline></ino:message></ino:response>
diff --git a/result/noent/attrib.xml b/result/noent/attrib.xml
new file mode 100644
index 0000000..89a1e57
--- /dev/null
+++ b/result/noent/attrib.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<item title="Icrontic.com - Warning: Breakdancing midget with tourette's syndrome on-board&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;" url="http://www.icrontic.com/" first_time="985034339" last_time="985034339" visits="1"/>
diff --git a/result/noent/bigentname.xml b/result/noent/bigentname.xml
new file mode 100644
index 0000000..7e7d9d0
--- /dev/null
+++ b/result/noent/bigentname.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name '"Yes"'>
+<!ENTITY WhatHeSaid "He said &very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name;">
+]>
+<doc>He said "Yes"</doc>
diff --git a/result/noent/bigname.xml b/result/noent/bigname.xml
new file mode 100644
index 0000000..885fd7c
--- /dev/null
+++ b/result/noent/bigname.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<this_is_a_very_large_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name/>
diff --git a/result/noent/bigname2.xml b/result/noent/bigname2.xml
new file mode 100644
index 0000000..a48c359
--- /dev/null
+++ b/result/noent/bigname2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix:start_nc_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name xmlns:this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix="http://www.example.com/testns/"/>
diff --git a/result/noent/cdata b/result/noent/cdata
new file mode 100644
index 0000000..180ea46
--- /dev/null
+++ b/result/noent/cdata
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<doc>
+<![CDATA[<greeting>Hello, world!</greeting>]]>
+</doc>
diff --git a/result/noent/cdata2 b/result/noent/cdata2
new file mode 100644
index 0000000..b4db791
--- /dev/null
+++ b/result/noent/cdata2
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<collection>
+ <test><![CDATA[
+ <![CDATA[abc]]]>]&gt;<![CDATA[
+ ]]></test>
+</collection>
diff --git a/result/noent/comment.xml b/result/noent/comment.xml
new file mode 100644
index 0000000..98c5eff
--- /dev/null
+++ b/result/noent/comment.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<doc>
+<!-- document start -->
+<empty/>
+<!-- document end -->
+</doc>
diff --git a/result/noent/comment2.xml b/result/noent/comment2.xml
new file mode 100644
index 0000000..9e122ec
--- /dev/null
+++ b/result/noent/comment2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!-- document start -->
+<doc>
+<empty/>
+</doc>
+<!-- document end -->
diff --git a/result/noent/dav1 b/result/noent/dav1
new file mode 100644
index 0000000..cbfd4c4
--- /dev/null
+++ b/result/noent/dav1
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/" xmlns:R="http://www.foo.bar/boxschema">
+ <D:response>
+ <D:prop>
+ <R:bigbox>
+ <R:BoxType>Box type A</R:BoxType>
+ </R:bigbox>
+ <R:author>
+ <R:Name>J.J. Dingleheimerschmidt</R:Name>
+ </R:author>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:prop>
+ <R:DingALing/>
+ <R:Random/>
+ </D:prop>
+ <D:status>HTTP/1.1 403 Forbidden</D:status>
+ <D:responsedescription> The user does not have access to the DingALing property.
+ </D:responsedescription>
+ </D:response>
+ <D:responsedescription> There has been an access violation error.
+ </D:responsedescription>
+</D:multistatus>
diff --git a/result/noent/dav10 b/result/noent/dav10
new file mode 100644
index 0000000..4b00da4
--- /dev/null
+++ b/result/noent/dav10
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<D:owner xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:href>http://www.ics.uci.edu/~ejw/contact.html</D:href>
+</D:owner>
diff --git a/result/noent/dav11 b/result/noent/dav11
new file mode 100644
index 0000000..8ac23d6
--- /dev/null
+++ b/result/noent/dav11
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<D:prop xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:lockdiscovery>
+ <D:activelock>
+ <D:locktype>write</D:locktype>
+ <D:lockscope>exclusive</D:lockscope>
+ <D:addlocks/>
+ <D:owner>
+ <D:href>
+ http://www.ics.uci.edu/~ejw/contact.html
+ </D:href>
+ </D:owner>
+ <D:timeout>Second-604800</D:timeout>
+ <D:locktoken>
+ <D:href>
+ opaquelocktoken:xyz122393481230912asdfa09s8df09s7df
+ </D:href>
+ </D:locktoken>
+ </D:activelock>
+ </D:lockdiscovery>
+</D:prop>
diff --git a/result/noent/dav12 b/result/noent/dav12
new file mode 100644
index 0000000..d8d03fe
--- /dev/null
+++ b/result/noent/dav12
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<D:href xmlns:D="http://www.ietf.org/standards/dav/">http://www.ics.uci.edu/~ejw/contact.html</D:href>
diff --git a/result/noent/dav13 b/result/noent/dav13
new file mode 100644
index 0000000..f44ae38
--- /dev/null
+++ b/result/noent/dav13
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:href>
+ http://webdav.sb.aol.com/workspace/webdav/proposal.doc
+ </D:href>
+ <D:href>
+ http://webdav.sb.aol.com/workspace/webdav/
+ </D:href>
+ <D:status>HTTP/1.1 202 Accepted</D:status>
+ </D:response>
+ <D:response>
+ <D:href>http://foo.bar/blah</D:href>
+ <D:status>HTTP/1.1 403 Forbidden</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/noent/dav15 b/result/noent/dav15
new file mode 100644
index 0000000..b80802e
--- /dev/null
+++ b/result/noent/dav15
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<D:prop xmlns:D="http://www.ietf.org/standards/dav/" xmlns:F="http://www.foocorp.com/Project/">
+ <D:Source>
+ <D:link>
+ <F:projfiles>Source</F:projfiles>
+ <D:src>http://foo.bar/program</D:src>
+ <D:dst>http://foo.bar/src/main.c</D:dst>
+ </D:link>
+ <D:link>
+ <F:projfiles>Library</F:projfiles>
+ <D:src>http://foo.bar/program</D:src>
+ <D:dst>http://foo.bar/src/main.lib</D:dst>
+ </D:link>
+ <D:link>
+ <F:projfiles>Makefile</F:projfiles>
+ <D:src>http://foo.bar/program</D:src>
+ <D:dst>http://foo.bar/src/makefile</D:dst>
+ </D:link>
+ </D:Source>
+</D:prop>
diff --git a/result/noent/dav16 b/result/noent/dav16
new file mode 100644
index 0000000..9a7dc36
--- /dev/null
+++ b/result/noent/dav16
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<D:propfind xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:prop>
+ <lockdiscovery/>
+ </D:prop>
+</D:propfind>
diff --git a/result/noent/dav17 b/result/noent/dav17
new file mode 100644
index 0000000..1137662
--- /dev/null
+++ b/result/noent/dav17
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:prop>
+ <D:lockdiscovery>
+ <D:activelock>
+ <D:locktype>write</D:locktype>
+ <D:lockscope>exclusive</D:lockscope>
+ <D:addlocks>
+ <D:href>http://foo.com/doc/</D:href>
+ </D:addlocks>
+ <D:owner>Jane Smith</D:owner>
+ <D:timeout>Infinite</D:timeout>
+ <D:locktoken>
+ <D:href>iamuri:unique!!!!!</D:href>
+ </D:locktoken>
+ </D:activelock>
+ </D:lockdiscovery>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/noent/dav18 b/result/noent/dav18
new file mode 100644
index 0000000..3de1c19
--- /dev/null
+++ b/result/noent/dav18
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<D:propfind xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:prop>
+ <supportedlock/>
+ </D:prop>
+</D:propfind>
diff --git a/result/noent/dav19 b/result/noent/dav19
new file mode 100644
index 0000000..9535ffc
--- /dev/null
+++ b/result/noent/dav19
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:prop>
+ <D:supportedlock>
+ <D:LockEntry>
+ <D:locktype>Write</D:locktype>
+ <D:lockscope>Exclusive</D:lockscope>
+ </D:LockEntry>
+ <D:LockEntry>
+ <D:locktype>Write</D:locktype>
+ <D:lockscope>Shared</D:lockscope>
+ </D:LockEntry>
+ </D:supportedlock>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/noent/dav2 b/result/noent/dav2
new file mode 100644
index 0000000..f831b4b
--- /dev/null
+++ b/result/noent/dav2
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<S:multistatus xmlns:S="http://www.ietf.org/standards/dav/" xmlns:R="http://www.foo.bar/boxschema/">
+ <S:response>
+ <S:href>http://www.foo.bar/container/</S:href>
+ <S:prop>
+ <R:bigbox>
+ <R:BoxType>Box type A</R:BoxType>
+ </R:bigbox>
+ <R:author>
+ <R:Name>Hadrian</R:Name>
+ </R:author>
+ </S:prop>
+ <S:status>HTTP 1.1 200 OK</S:status>
+ </S:response>
+ <S:response>
+ <S:href>http://www.foo.bar/container/index.html</S:href>
+ <S:prop>
+ <R:bigbox>
+ <R:BoxType>Box type B</R:BoxType>
+ </R:bigbox>
+ </S:prop>
+ <S:status>HTTP 1.1 200 OK</S:status>
+ </S:response>
+</S:multistatus>
diff --git a/result/noent/dav3 b/result/noent/dav3
new file mode 100644
index 0000000..986b3fe
--- /dev/null
+++ b/result/noent/dav3
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/" xmlns:R="http://www.foo.bar/boxschema/">
+ <D:response>
+ <D:href>http://www.foo.bar/container/</D:href>
+ <D:prop>
+ <R:bigbox/>
+ <R:author/>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:href>http://www.foo.bar/container/index.html</D:href>
+ <D:prop>
+ <R:bigbox/>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/noent/dav4 b/result/noent/dav4
new file mode 100644
index 0000000..9ab7ceb
--- /dev/null
+++ b/result/noent/dav4
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<D:propertyupdate xmlns:D="http://www.ietf.org/standards/dav/" xmlns:Z="http://www.w3.com/standards/z39.50/">
+ <D:set>
+ <D:prop>
+ <Z:authors>
+ <Z:Author>Jim Whitehead</Z:Author>
+ <Z:Author>Roy Fielding</Z:Author>
+ </Z:authors>
+ </D:prop>
+ </D:set>
+ <D:remove>
+ <D:prop>
+ <Z:Copyright-Owner/>
+ </D:prop>
+ </D:remove>
+</D:propertyupdate>
diff --git a/result/noent/dav5 b/result/noent/dav5
new file mode 100644
index 0000000..68ebab9
--- /dev/null
+++ b/result/noent/dav5
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/" xmlns:Z="http://www.w3.com/standards/z39.50/">
+ <D:response>
+ <D:prop>
+ <Z:Authors/>
+ </D:prop>
+ <D:status>HTTP/1.1 420 Method Failure</D:status>
+ </D:response>
+ <D:response>
+ <D:prop>
+ <Z:Copyright-Owner/>
+ </D:prop>
+ <D:status>HTTP/1.1 409 Conflict</D:status>
+ </D:response>
+ <D:responsedescription> Copyright Owner can not be deleted or
+altered.</D:responsedescription>
+</D:multistatus>
diff --git a/result/noent/dav6 b/result/noent/dav6
new file mode 100644
index 0000000..3d0de24
--- /dev/null
+++ b/result/noent/dav6
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:href>http://www.microsoft.com/user/yarong/dav_drafts/
+ </D:href>
+ <D:prop>
+ <D:resourcetype>
+ <D:collection/>
+ </D:resourcetype>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:href>
+ http://www.microsoft.com/user/yarong/dav_drafts/base
+ </D:href>
+ <D:prop>
+ <D:resourcetype/>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/result/noent/dav7 b/result/noent/dav7
new file mode 100644
index 0000000..ec4a952
--- /dev/null
+++ b/result/noent/dav7
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<d:multistatus xmlns:d="http://www.ietf.org/standards/dav/">
+ <d:response>
+ <d:href>http://www.foo.bar/container/resource1</d:href>
+ <d:href>http://www.foo.bar/container/resource2</d:href>
+ <d:status>HTTP/1.1 200 OK</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/container/</d:href>
+ <d:status>HTTP/1.1 420 Method Failure</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/container/resource3</d:href>
+ <d:status>HTTP/1.1 412 Precondition Failed</d:status>
+ </d:response>
+</d:multistatus>
diff --git a/result/noent/dav8 b/result/noent/dav8
new file mode 100644
index 0000000..7f99baf
--- /dev/null
+++ b/result/noent/dav8
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<d:multistatus xmlns:d="http://www.ietf.org/standards/dav/">
+ <d:response>
+ <d:href>http://www.foo.bar/othercontainer/resource1</d:href>
+ <d:href>http://www.foo.bar/othercontainer/resource2</d:href>
+ <d:href>http://www.foo.bar/othercontainer/</d:href>
+ <d:href>http://www.foo.bar/othercontainer/R2/D2</d:href>
+ <d:status>HTTP/1.1 201 Created</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/othercontainer/R2/</d:href>
+ <d:status>HTTP/1.1 412 Precondition Failed</d:status>
+ </d:response>
+</d:multistatus>
diff --git a/result/noent/dav9 b/result/noent/dav9
new file mode 100644
index 0000000..8ed63b8
--- /dev/null
+++ b/result/noent/dav9
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<d:multistatus xmlns:d="http://www.ietf.org/standards/dav/">
+ <d:response>
+ <d:href>http://www.foo.bar/container/resource1</d:href>
+ <d:href>http://www.foo.bar/container/resource2</d:href>
+ <d:href>http://www.foo.bar/container/</d:href>
+ <d:href>http://www.foo.bar/container/C2/R2</d:href>
+ <d:status>HTTP/1.1 201 Created</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/container/C2</d:href>
+ <d:status>HTTP/1.1 420 Method Failure</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/othercontainer/C2</d:href>
+ <d:status>HTTP/1.1 409 Conflict</d:status>
+ </d:response>
+</d:multistatus>
diff --git a/result/noent/defattr.xml b/result/noent/defattr.xml
new file mode 100644
index 0000000..0a4ac15
--- /dev/null
+++ b/result/noent/defattr.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+<!ATTLIST doc xmlns CDATA #FIXED "http://www.example.com/">
+]>
+<doc xmlns="http://www.example.com/"/>
diff --git a/result/noent/defattr2.xml b/result/noent/defattr2.xml
new file mode 100644
index 0000000..8d1fc3b
--- /dev/null
+++ b/result/noent/defattr2.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+<!ATTLIST doc defatt (0 | 1) "0">
+<!ATTLIST doc xmlns:tst CDATA #FIXED "http://example.org">
+<!ATTLIST doc tst:att (0 | 1) "1">
+]>
+<doc xmlns:tst="http://example.org" att="1"/>
diff --git a/result/noent/dia1 b/result/noent/dia1
new file mode 100644
index 0000000..207bd73
--- /dev/null
+++ b/result/noent/dia1
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute name="background">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer name="Background" visible="true">
+ <dia:object type="Standard - Line" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="1.95,6.85"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.9,6.8;11,8.55"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="1.95,6.85"/>
+ <dia:point val="10.95,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O2" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.579,3.96359;7.021,4.96359"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string val="sdfsdfg"/>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.9,7.45;13.05,9.55"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/result/noent/dia2 b/result/noent/dia2
new file mode 100644
index 0000000..207bd73
--- /dev/null
+++ b/result/noent/dia2
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute name="background">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer name="Background" visible="true">
+ <dia:object type="Standard - Line" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="1.95,6.85"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.9,6.8;11,8.55"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="1.95,6.85"/>
+ <dia:point val="10.95,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O2" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.579,3.96359;7.021,4.96359"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string val="sdfsdfg"/>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.9,7.45;13.05,9.55"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/result/noent/dtd1 b/result/noent/dtd1
new file mode 100644
index 0000000..fb11ffa
--- /dev/null
+++ b/result/noent/dtd1
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE MEMO PUBLIC "-//SGMLSOURCE//DTD MEMO//EN" "http://www.sgmlsource.com/dtds/memo.dtd">
+<MEMO>
+</MEMO>
diff --git a/result/noent/dtd10 b/result/noent/dtd10
new file mode 100644
index 0000000..8c7d5e7
--- /dev/null
+++ b/result/noent/dtd10
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b)+ , c , d)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT d (#PCDATA)>
+]>
+<doc><b>This</b><c> is a</c><d> valid document</d></doc>
diff --git a/result/noent/dtd11 b/result/noent/dtd11
new file mode 100644
index 0000000..e0df8af
--- /dev/null
+++ b/result/noent/dtd11
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+<!ATTLIST doc val CDATA #IMPLIED>
+]>
+<doc val="v1"/>
diff --git a/result/noent/dtd12 b/result/noent/dtd12
new file mode 100644
index 0000000..b0aff81
--- /dev/null
+++ b/result/noent/dtd12
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY YN '"Yes"'>
+<!ENTITY WhatHeSaid "He said &YN;">
+]>
+<doc>He said "Yes"</doc>
diff --git a/result/noent/dtd13 b/result/noent/dtd13
new file mode 100644
index 0000000..2814146
--- /dev/null
+++ b/result/noent/dtd13
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!-- comment before the DTD -->
+<!DOCTYPE doc [
+<!ELEMENT doc ANY>
+]>
+<!-- comment after the DTD -->
+<doc/>
diff --git a/result/noent/dtd2 b/result/noent/dtd2
new file mode 100644
index 0000000..921fd94
--- /dev/null
+++ b/result/noent/dtd2
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+]>
+<doc>This is a valid document !</doc>
diff --git a/result/noent/dtd3 b/result/noent/dtd3
new file mode 100644
index 0000000..6681ef7
--- /dev/null
+++ b/result/noent/dtd3
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc ANY>
+]>
+<doc>This is a valid document !</doc>
diff --git a/result/noent/dtd4 b/result/noent/dtd4
new file mode 100644
index 0000000..6cf2444
--- /dev/null
+++ b/result/noent/dtd4
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/result/noent/dtd5 b/result/noent/dtd5
new file mode 100644
index 0000000..5409d51
--- /dev/null
+++ b/result/noent/dtd5
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA | a | b)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+]>
+<doc><a>This</a> is a <b>valid</b> document</doc>
diff --git a/result/noent/dtd6 b/result/noent/dtd6
new file mode 100644
index 0000000..ed2d993
--- /dev/null
+++ b/result/noent/dtd6
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (a | b)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+]>
+<doc><a>This</a><b> is a valid</b><a> document</a></doc>
diff --git a/result/noent/dtd7 b/result/noent/dtd7
new file mode 100644
index 0000000..0a4075f
--- /dev/null
+++ b/result/noent/dtd7
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (a , b)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+]>
+<doc><a>This</a><b> is a valid document</b></doc>
diff --git a/result/noent/dtd8 b/result/noent/dtd8
new file mode 100644
index 0000000..7a655f9
--- /dev/null
+++ b/result/noent/dtd8
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b) , (c | d))+>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT d (#PCDATA)>
+]>
+<doc><b>This</b><c> is a valid document</c></doc>
diff --git a/result/noent/dtd9 b/result/noent/dtd9
new file mode 100644
index 0000000..89cc1d4
--- /dev/null
+++ b/result/noent/dtd9
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b | c) , d)?>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT d (#PCDATA)>
+]>
+<doc><b>This</b><d> is a valid document</d></doc>
diff --git a/result/noent/ent1 b/result/noent/ent1
new file mode 100644
index 0000000..14bf428
--- /dev/null
+++ b/result/noent/ent1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+]>
+<EXAMPLE>
+ Extensible Markup Language
+</EXAMPLE>
diff --git a/result/noent/ent2 b/result/noent/ent2
new file mode 100644
index 0000000..b643ac3
--- /dev/null
+++ b/result/noent/ent2
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+<!ENTITY title PUBLIC "-//MY-TITLE//FR" "title.xml">
+<!ENTITY image SYSTEM "img.gif" NDATA GIF>
+]>
+<EXAMPLE>
+
+<title>my title</title>
+
+ This text is about XML, the Extensible Markup Language and this is an embedded <IMG src="image"/>
+</EXAMPLE>
diff --git a/result/noent/ent3 b/result/noent/ent3
new file mode 100644
index 0000000..b1c0b14
--- /dev/null
+++ b/result/noent/ent3
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+]>
+<EXAMPLE prop1="a&amp;b" prop2="Extensible Markup Language">
+ Test of entities in attributes.
+</EXAMPLE>
diff --git a/result/noent/ent4 b/result/noent/ent4
new file mode 100644
index 0000000..a92194c
--- /dev/null
+++ b/result/noent/ent4
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+]>
+<EXAMPLE>
+ Test of &amp;amp; behaviour a&amp;b .
+</EXAMPLE>
diff --git a/result/noent/ent5 b/result/noent/ent5
new file mode 100644
index 0000000..16e7e10
--- /dev/null
+++ b/result/noent/ent5
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<EXAMPLE>
+ This is an inverted exclamation sign &#xA1;
+ This is a space
+</EXAMPLE>
diff --git a/result/noent/ent6 b/result/noent/ent6
new file mode 100644
index 0000000..047f9bb
--- /dev/null
+++ b/result/noent/ent6
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY amp "&#38;#38;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">
+]>
+<doc/>
diff --git a/result/noent/ent7 b/result/noent/ent7
new file mode 100644
index 0000000..1c895af
--- /dev/null
+++ b/result/noent/ent7
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE item [
+<!ENTITY % sampleEnt "<!ELEMENT item (para)+>">
+<!ENTITY sampleEnt "the hyacinth girl">
+<!ELEMENT item (para)+>
+<!ELEMENT para (#PCDATA)>
+]>
+<item><para>'they called me the hyacinth girl'</para></item>
diff --git a/result/noent/ent8 b/result/noent/ent8
new file mode 100644
index 0000000..676266c
--- /dev/null
+++ b/result/noent/ent8
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY test1 "test 1">
+<!ENTITY test2 "test 2">
+]>
+<doc>
+ <Content>Reten&#xE7;&#xE3;o</Content>
+ <Content>&lt;&gt;</Content>
+ <Content>test 1test 2</Content>
+</doc>
diff --git a/result/noent/eve.xml b/result/noent/eve.xml
new file mode 100644
index 0000000..dab7208
--- /dev/null
+++ b/result/noent/eve.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE spec PUBLIC "-//testspec//" "dtds/eve.dtd" [
+<!ENTITY iso6.doc.date "29-May-1999">
+]>
+<spec>
+</spec>
diff --git a/result/noent/intsubset.xml b/result/noent/intsubset.xml
new file mode 100644
index 0000000..bd85795
--- /dev/null
+++ b/result/noent/intsubset.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE root [
+<!ELEMENT root EMPTY>
+<!-- " -->]>
+<root/>
diff --git a/result/noent/isolat1 b/result/noent/isolat1
new file mode 100644
index 0000000..1e5a059
--- /dev/null
+++ b/result/noent/isolat1
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<très>là</très>
diff --git a/result/noent/isolat2 b/result/noent/isolat2
new file mode 100644
index 0000000..8c290b9
--- /dev/null
+++ b/result/noent/isolat2
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<tst>
+
+ The following table displays the characters in ISO 8859
+ Latin-1, which are printable and unlisted in the ascii
+ manual page.
+
+ Oct Dec Hex Char Description
+ --------------------------------------------------------------------
+ 240 160 A0 NO-BREAK SPACE
+ 241 161 A1 ¡ INVERTED EXCLAMATION MARK
+ 242 162 A2 ¢ CENT SIGN
+ 243 163 A3 £ POUND SIGN
+ 244 164 A4 ¤ CURRENCY SIGN
+ 245 165 A5 ¥ YEN SIGN
+ 246 166 A6 ¦ BROKEN BAR
+ 247 167 A7 § SECTION SIGN
+ 250 168 A8 ¨ DIAERESIS
+ 251 169 A9 © COPYRIGHT SIGN
+ 252 170 AA ª FEMININE ORDINAL INDICATOR
+ 253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 254 172 AC ¬ NOT SIGN
+ 255 173 AD ­ SOFT HYPHEN
+ 256 174 AE ® REGISTERED SIGN
+ 257 175 AF ¯ MACRON
+ 260 176 B0 ° DEGREE SIGN
+ 261 177 B1 ± PLUS-MINUS SIGN
+ 262 178 B2 ² SUPERSCRIPT TWO
+ 263 179 B3 ³ SUPERSCRIPT THREE
+ 264 180 B4 ´ ACUTE ACCENT
+ 265 181 B5 µ MICRO SIGN
+ 266 182 B6 ¶ PILCROW SIGN
+ 267 183 B7 · MIDDLE DOT
+ 270 184 B8 ¸ CEDILLA
+ 271 185 B9 ¹ SUPERSCRIPT ONE
+ 272 186 BA º MASCULINE ORDINAL INDICATOR
+ 273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 274 188 BC ¼ VULGAR FRACTION ONE QUARTER
+ 275 189 BD ½ VULGAR FRACTION ONE HALF
+ 276 190 BE ¾ VULGAR FRACTION THREE QUARTERS
+ 277 191 BF ¿ INVERTED QUESTION MARK
+ 300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
+ 301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
+ 302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ 303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
+ 304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
+ 305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
+ 306 198 C6 Æ LATIN CAPITAL LETTER AE
+ 307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
+ 310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
+ 311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
+ 312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ 313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
+ 314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
+ 315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
+ 316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ 317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
+ 320 208 D0 Ð LATIN CAPITAL LETTER ETH
+ 321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
+ 322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
+ 323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
+ 324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ 325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
+ 326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
+ 327 215 D7 × MULTIPLICATION SIGN
+ 330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
+ 331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
+ 332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
+ 333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ 334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
+ 335 221 DD Ý LATIN CAPITAL LETTER Y WITH ACUTE
+ 336 222 DE Þ LATIN CAPITAL LETTER THORN
+ 337 223 DF ß LATIN SMALL LETTER SHARP S
+ 340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
+ 341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
+ 342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
+ 343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
+ 344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
+ 345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
+ 346 230 E6 æ LATIN SMALL LETTER AE
+ 347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
+ 350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
+ 351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
+ 352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
+ 353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
+ 354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
+ 355 237 ED í LATIN SMALL LETTER I WITH ACUTE
+ 356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
+ 357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
+ 360 240 F0 ð LATIN SMALL LETTER ETH
+ 361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
+ 362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
+ 363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
+ 364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
+ 365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
+ 366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
+ 367 247 F7 ÷ DIVISION SIGN
+ 370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
+ 371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
+ 372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
+ 373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
+ 374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
+ 375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
+ 376 254 FE þ LATIN SMALL LETTER THORN
+ 377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
+
+</tst>
diff --git a/result/noent/isolat3 b/result/noent/isolat3
new file mode 100644
index 0000000..1abf7b4
--- /dev/null
+++ b/result/noent/isolat3
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<rec>
+<eg><![CDATA[<!ENTITY % pub "&#xc9;ditions Gallimard" >
+<!ENTITY rights "All rights reserved" >
+<!ENTITY book "La Peste: Albert Camus,
+&#xA9; 1947 %pub;. &rights;" >]]></eg>
+then the replacement text for the entity "<code>book</code>" is:
+<eg>La Peste: Albert Camus,
+© 1947 Éditions Gallimard. &amp;rights;</eg>
+</rec>
diff --git a/result/noent/ns b/result/noent/ns
new file mode 100644
index 0000000..94b927e
--- /dev/null
+++ b/result/noent/ns
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata dia:testattr="test"/>
+</dia:diagram>
diff --git a/result/noent/ns2 b/result/noent/ns2
new file mode 100644
index 0000000..b69ad82
--- /dev/null
+++ b/result/noent/ns2
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/" dia:testattr="test"/>
diff --git a/result/noent/ns3 b/result/noent/ns3
new file mode 100644
index 0000000..b69ad82
--- /dev/null
+++ b/result/noent/ns3
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/" dia:testattr="test"/>
diff --git a/result/noent/ns4 b/result/noent/ns4
new file mode 100644
index 0000000..136bf92
--- /dev/null
+++ b/result/noent/ns4
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<diagram testattr="test" xml:lang="en" xml:link="simple" xml:space="preserve"/>
diff --git a/result/noent/p3p b/result/noent/p3p
new file mode 100644
index 0000000..31d5587
--- /dev/null
+++ b/result/noent/p3p
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<RDF:RDF xmlns:p3p="http://www.w3.org/TR/1998/WD-P3P10-syntax#proposal.DTD" xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax#">
+<PROP realm="http://www.CoolCatalog.com/catalogue/" entity="CoolCatalog" agreeID="94df1293a3e519bb" assurance="http://www.TrustUs.org">
+ <USES>
+ <STATEMENT purp="2,3" recpnt="0" id="0" consq="a site with clothes you'd appreciate.">
+ <WITH><PREFIX name="User.">
+ <REF name="Name.First"/>
+ <REF name="Bdate.Year" optional="1"/>
+ <REF name="Gender"/>
+ </PREFIX></WITH>
+ </STATEMENT>
+ </USES>
+ <USES>
+ <STATEMENT action="read&amp;write" purp="0" recpnt="0" id="1">
+ <REF name="User.Shipping."/>
+ </STATEMENT>
+ </USES>
+ <DISCLOSURE discURI="http://www.CoolCatalog.com/PrivacyPractice.html" access="3" other="0,1"/>
+</PROP></RDF:RDF>
diff --git a/result/noent/pi.xml b/result/noent/pi.xml
new file mode 100644
index 0000000..48c7ff0
--- /dev/null
+++ b/result/noent/pi.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<doc>
+<?document-start doc?>
+<empty/>
+<?document-end doc?>
+</doc>
diff --git a/result/noent/pi2.xml b/result/noent/pi2.xml
new file mode 100644
index 0000000..710d51c
--- /dev/null
+++ b/result/noent/pi2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<?document-start doc?>
+<doc>
+<empty/>
+</doc>
+<?document-end doc?>
diff --git a/result/noent/rdf1 b/result/noent/rdf1
new file mode 100644
index 0000000..d44c3c6
--- /dev/null
+++ b/result/noent/rdf1
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<RDF:RDF xmlns:RPM="http://www.rpm.org/" xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax#">
+ <RDF:Description HREF="ftp://rufus.w3.org/linux/redhat/redhat-5.1/i386/RedHat/RPMS/rpm-2.5-2.i386.rpm">
+ <RPM:Name>rpm</RPM:Name>
+ <RPM:Version>2.5</RPM:Version>
+ <RPM:Release>2</RPM:Release>
+ <RPM:Arch>i386</RPM:Arch>
+ <RPM:Os>Linux</RPM:Os>
+ <RPM:Distribution>Manhattan </RPM:Distribution>
+ <RPM:Vendor>Red Hat Software</RPM:Vendor>
+ <RPM:Packager>Red Hat Software &lt;bugs@redhat.com&gt;</RPM:Packager>
+ <RPM:Group>Utilities/System</RPM:Group>
+ <RPM:Summary>Red Hat Package Manager</RPM:Summary>
+ <RPM:Description>RPM is a powerful package manager, which can be used to build, install,
+query, verify, update, and uninstall individual software packages. A
+package consists of an archive of files, and package information, including
+name, version, and description.</RPM:Description>
+ <RPM:Copyright>GPL</RPM:Copyright>
+ <RPM:Changelog>* Sun May 10 1998 Prospector System &lt;bugs@redhat.com&gt;
+ - translations modified for de, fr, tr
+</RPM:Changelog>
+ <RPM:Sources>rpm-2.5-2.src.rpm</RPM:Sources>
+ <RPM:SourcesFtp>ftp://ftp.redhat.com/pub/redhat/redhat-5.1/SRPMS</RPM:SourcesFtp>
+ <RPM:BuildDate>Sun May 10 14:52:32 1998</RPM:BuildDate>
+ <RPM:Date>894826352</RPM:Date>
+ <RPM:Size>850599</RPM:Size>
+ <RPM:BuildHost>porky.redhat.com</RPM:BuildHost>
+ <RPM:Provides>
+ <RDF:Bag>
+ <RPM:Resource>rpm</RPM:Resource>
+ </RDF:Bag>
+ </RPM:Provides>
+ <RPM:Requires>
+ <RDF:Bag>
+ <RPM:Resource>/bin/sh</RPM:Resource>
+ <RPM:Resource>ld-linux.so.2</RPM:Resource>
+ <RPM:Resource>libc.so.6</RPM:Resource>
+ <RPM:Resource>libdb.so.2</RPM:Resource>
+ <RPM:Resource>libz.so.1</RPM:Resource>
+ <RPM:Resource>/bin/bash</RPM:Resource>
+ <RPM:Resource>/bin/sh</RPM:Resource>
+ </RDF:Bag>
+ </RPM:Requires>
+ <RPM:Files>/bin/rpm
+/usr/bin/find-provides
+/usr/bin/find-requires
+/usr/bin/gendiff
+/usr/bin/rpm2cpio
+/usr/doc/rpm-2.5
+/usr/doc/rpm-2.5/CHANGES
+/usr/doc/rpm-2.5/RPM-PGP-KEY
+/usr/doc/rpm-2.5/buildroot
+/usr/doc/rpm-2.5/dependencies
+/usr/doc/rpm-2.5/format
+/usr/doc/rpm-2.5/groups
+/usr/doc/rpm-2.5/macros
+/usr/doc/rpm-2.5/queryformat
+/usr/doc/rpm-2.5/relocatable
+/usr/doc/rpm-2.5/signatures
+/usr/doc/rpm-2.5/spec
+/usr/doc/rpm-2.5/triggers
+/usr/lib/rpmpopt
+/usr/lib/rpmrc
+/usr/man/man8/rpm.8
+/usr/man/man8/rpm2cpio.8
+/usr/share/locale/de/LC_MESSAGES/rpm.mo
+/usr/share/locale/fr/LC_MESSAGES/rpm.mo
+/usr/share/locale/pt-br/LC_MESSAGES/rpm.mo
+/usr/share/locale/sv/LC_MESSAGES/rpm.mo
+/usr/share/locale/tr/LC_MESSAGES/rpm.mo
+/usr/src/redhat
+/usr/src/redhat/BUILD
+/usr/src/redhat/RPMS
+/usr/src/redhat/RPMS/i386
+/usr/src/redhat/RPMS/noarch
+/usr/src/redhat/SOURCES
+/usr/src/redhat/SPECS
+/usr/src/redhat/SRPMS
+</RPM:Files>
+ </RDF:Description>
+</RDF:RDF>
diff --git a/result/noent/rdf2 b/result/noent/rdf2
new file mode 100644
index 0000000..284946b
--- /dev/null
+++ b/result/noent/rdf2
@@ -0,0 +1,1899 @@
+<?xml version="1.0"?>
+<RDF:RDF xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax#" xmlns:RPM="http://www.rpm.org/">
+ <RDF:Description about="ftp://rufus.w3.org/linux/dld/5.4/i386/RPMS/i386/ncurses4-4.2-3.i386.rpm">
+ <RPM:Name>ncurses4</RPM:Name>
+ <RPM:Version>4.2</RPM:Version>
+ <RPM:Release>3</RPM:Release>
+ <RPM:Arch>i386</RPM:Arch>
+ <RPM:Os>Linux</RPM:Os>
+ <RPM:Distribution>DLD</RPM:Distribution>
+ <RPM:Vendor>delix Computer GmbH</RPM:Vendor>
+ <RPM:Packager>Till Bubeck &lt;bubeck@delix.de&gt;, Ngo Than &lt;than@delix.de&gt;</RPM:Packager>
+ <RPM:Group>Libraries</RPM:Group>
+ <RPM:Summary>Bibliothek zur Ansteuerung von Terminals</RPM:Summary>
+ <RPM:Description>Diese Library stellt dem Programmierer vom Terminal unabh&#xE4;ngige
+Routinen zur Ansteuerung Ihres Bildschirms zur Verf&#xFC;gung, die
+speziell optimiert sind.
+Diese Version ist die 'new curses' (ncurses) Variante und ist der
+anerkannte Ersatz f&#xFC;r die klassische Curses-Library, die nicht mehr
+weiterentwickelt wird.</RPM:Description>
+ <RPM:Copyright>GPL</RPM:Copyright>
+ <RPM:Sources>ncurses4-4.2-3.src.rpm</RPM:Sources>
+ <RPM:BuildDate>Tue May 12 19:30:26 1998</RPM:BuildDate>
+ <RPM:Date>895015826</RPM:Date>
+ <RPM:Size>1373513</RPM:Size>
+ <RPM:BuildHost>erdbeere.delix.de</RPM:BuildHost>
+ <RPM:Provides>
+ <RDF:Bag>
+ <RPM:Resource href="../../../../../resources/ncurses4.rdf">ncurses4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libpanel.so.4.rdf">libpanel.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libncurses.so.4.rdf">libncurses.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libmenu.so.4.rdf">libmenu.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libform.so.4.rdf">libform.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/ncurses.rdf">ncurses</RPM:Resource>
+ </RDF:Bag>
+ </RPM:Provides>
+ <RPM:Files>/lib/libncurses.so.4
+/lib/libncurses.so.4.2
+/usr/doc/ncurses4-4.2-3
+/usr/doc/ncurses4-4.2-3/ANNOUNCE.gz
+/usr/doc/ncurses4-4.2-3/NEWS.gz
+/usr/doc/ncurses4-4.2-3/README.gz
+/usr/doc/ncurses4-4.2-3/TO-DO.gz
+/usr/lib/libform.so.4
+/usr/lib/libform.so.4.2
+/usr/lib/libmenu.so.4
+/usr/lib/libmenu.so.4.2
+/usr/lib/libpanel.so.4
+/usr/lib/libpanel.so.4.2
+/usr/share/ncurses4
+/usr/share/ncurses4/tabset
+/usr/share/ncurses4/tabset/std
+/usr/share/ncurses4/tabset/stdcrt
+/usr/share/ncurses4/tabset/vt100
+/usr/share/ncurses4/tabset/vt300
+/usr/share/ncurses4/terminfo
+/usr/share/ncurses4/terminfo/1
+/usr/share/ncurses4/terminfo/1/1178
+/usr/share/ncurses4/terminfo/1/1730-lm
+/usr/share/ncurses4/terminfo/2
+/usr/share/ncurses4/terminfo/2/2621
+/usr/share/ncurses4/terminfo/2/2621-wl
+/usr/share/ncurses4/terminfo/2/2621A
+/usr/share/ncurses4/terminfo/2/2621a
+/usr/share/ncurses4/terminfo/3
+/usr/share/ncurses4/terminfo/3/386at
+/usr/share/ncurses4/terminfo/3/3b1
+/usr/share/ncurses4/terminfo/4
+/usr/share/ncurses4/terminfo/4/4025ex
+/usr/share/ncurses4/terminfo/4/4027ex
+/usr/share/ncurses4/terminfo/4/4410-w
+/usr/share/ncurses4/terminfo/5
+/usr/share/ncurses4/terminfo/5/5051
+/usr/share/ncurses4/terminfo/5/5410-w
+/usr/share/ncurses4/terminfo/5/5620
+/usr/share/ncurses4/terminfo/5/5630-24
+/usr/share/ncurses4/terminfo/5/5630DMD-24
+/usr/share/ncurses4/terminfo/6
+/usr/share/ncurses4/terminfo/6/630-lm
+/usr/share/ncurses4/terminfo/6/630MTG-24
+/usr/share/ncurses4/terminfo/7
+/usr/share/ncurses4/terminfo/7/730MTG-24
+/usr/share/ncurses4/terminfo/7/730MTG-41
+/usr/share/ncurses4/terminfo/7/730MTG-41r
+/usr/share/ncurses4/terminfo/7/730MTGr
+/usr/share/ncurses4/terminfo/7/730MTGr-24
+/usr/share/ncurses4/terminfo/8
+/usr/share/ncurses4/terminfo/8/8510
+/usr/share/ncurses4/terminfo/9
+/usr/share/ncurses4/terminfo/9/955-hb
+/usr/share/ncurses4/terminfo/9/955-w
+/usr/share/ncurses4/terminfo/P
+/usr/share/ncurses4/terminfo/P/P12
+/usr/share/ncurses4/terminfo/P/P12-M
+/usr/share/ncurses4/terminfo/P/P12-M-W
+/usr/share/ncurses4/terminfo/P/P12-W
+/usr/share/ncurses4/terminfo/P/P14
+/usr/share/ncurses4/terminfo/P/P14-M
+/usr/share/ncurses4/terminfo/P/P14-M-W
+/usr/share/ncurses4/terminfo/P/P14-W
+/usr/share/ncurses4/terminfo/P/P4
+/usr/share/ncurses4/terminfo/P/P5
+/usr/share/ncurses4/terminfo/P/P7
+/usr/share/ncurses4/terminfo/P/P8
+/usr/share/ncurses4/terminfo/P/P8-W
+/usr/share/ncurses4/terminfo/P/P9
+/usr/share/ncurses4/terminfo/P/P9-8
+/usr/share/ncurses4/terminfo/P/P9-8-W
+/usr/share/ncurses4/terminfo/P/P9-W
+/usr/share/ncurses4/terminfo/X
+/usr/share/ncurses4/terminfo/X/X-hpterm
+/usr/share/ncurses4/terminfo/a
+/usr/share/ncurses4/terminfo/a/a210
+/usr/share/ncurses4/terminfo/a/a80
+/usr/share/ncurses4/terminfo/a/a980
+/usr/share/ncurses4/terminfo/a/aa4080
+/usr/share/ncurses4/terminfo/a/aaa
+/usr/share/ncurses4/terminfo/a/aaa+dec
+/usr/share/ncurses4/terminfo/a/aaa+rv
+/usr/share/ncurses4/terminfo/a/aaa+unk
+/usr/share/ncurses4/terminfo/a/aaa-18
+/usr/share/ncurses4/terminfo/a/aaa-18-rv
+/usr/share/ncurses4/terminfo/a/aaa-20
+/usr/share/ncurses4/terminfo/a/aaa-22
+/usr/share/ncurses4/terminfo/a/aaa-24
+/usr/share/ncurses4/terminfo/a/aaa-24-rv
+/usr/share/ncurses4/terminfo/a/aaa-26
+/usr/share/ncurses4/terminfo/a/aaa-28
+/usr/share/ncurses4/terminfo/a/aaa-30
+/usr/share/ncurses4/terminfo/a/aaa-30-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-rv
+/usr/share/ncurses4/terminfo/a/aaa-30-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-s
+/usr/share/ncurses4/terminfo/a/aaa-30-s-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-30-s-rv-ct
+/usr/share/ncurses4/terminfo/a/aaa-36
+/usr/share/ncurses4/terminfo/a/aaa-36-rv
+/usr/share/ncurses4/terminfo/a/aaa-40
+/usr/share/ncurses4/terminfo/a/aaa-40-rv
+/usr/share/ncurses4/terminfo/a/aaa-48
+/usr/share/ncurses4/terminfo/a/aaa-48-rv
+/usr/share/ncurses4/terminfo/a/aaa-60
+/usr/share/ncurses4/terminfo/a/aaa-60-dec-rv
+/usr/share/ncurses4/terminfo/a/aaa-60-rv
+/usr/share/ncurses4/terminfo/a/aaa-60-s
+/usr/share/ncurses4/terminfo/a/aaa-60-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-db
+/usr/share/ncurses4/terminfo/a/aaa-rv
+/usr/share/ncurses4/terminfo/a/aaa-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-rv-unk
+/usr/share/ncurses4/terminfo/a/aaa-s
+/usr/share/ncurses4/terminfo/a/aaa-s-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-s-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-unk
+/usr/share/ncurses4/terminfo/a/aas1901
+/usr/share/ncurses4/terminfo/a/abm80
+/usr/share/ncurses4/terminfo/a/abm85
+/usr/share/ncurses4/terminfo/a/abm85e
+/usr/share/ncurses4/terminfo/a/abm85h
+/usr/share/ncurses4/terminfo/a/abm85h-old
+/usr/share/ncurses4/terminfo/a/act4
+/usr/share/ncurses4/terminfo/a/act5
+/usr/share/ncurses4/terminfo/a/addrinfo
+/usr/share/ncurses4/terminfo/a/adds980
+/usr/share/ncurses4/terminfo/a/addsviewpoint
+/usr/share/ncurses4/terminfo/a/addsvp60
+/usr/share/ncurses4/terminfo/a/adm+sgr
+/usr/share/ncurses4/terminfo/a/adm1
+/usr/share/ncurses4/terminfo/a/adm11
+/usr/share/ncurses4/terminfo/a/adm1178
+/usr/share/ncurses4/terminfo/a/adm12
+/usr/share/ncurses4/terminfo/a/adm1a
+/usr/share/ncurses4/terminfo/a/adm2
+/usr/share/ncurses4/terminfo/a/adm20
+/usr/share/ncurses4/terminfo/a/adm21
+/usr/share/ncurses4/terminfo/a/adm22
+/usr/share/ncurses4/terminfo/a/adm3
+/usr/share/ncurses4/terminfo/a/adm31
+/usr/share/ncurses4/terminfo/a/adm31-old
+/usr/share/ncurses4/terminfo/a/adm36
+/usr/share/ncurses4/terminfo/a/adm3a
+/usr/share/ncurses4/terminfo/a/adm3a+
+/usr/share/ncurses4/terminfo/a/adm42
+/usr/share/ncurses4/terminfo/a/adm42-ns
+/usr/share/ncurses4/terminfo/a/adm5
+/usr/share/ncurses4/terminfo/a/aepro
+/usr/share/ncurses4/terminfo/a/aixterm-m
+/usr/share/ncurses4/terminfo/a/aixterm-m-old
+/usr/share/ncurses4/terminfo/a/aj
+/usr/share/ncurses4/terminfo/a/aj510
+/usr/share/ncurses4/terminfo/a/aj830
+/usr/share/ncurses4/terminfo/a/aj832
+/usr/share/ncurses4/terminfo/a/alt2
+/usr/share/ncurses4/terminfo/a/alt3
+/usr/share/ncurses4/terminfo/a/alt4
+/usr/share/ncurses4/terminfo/a/alt5
+/usr/share/ncurses4/terminfo/a/alt7
+/usr/share/ncurses4/terminfo/a/alt7pc
+/usr/share/ncurses4/terminfo/a/alto-h19
+/usr/share/ncurses4/terminfo/a/alto-heath
+/usr/share/ncurses4/terminfo/a/altoh19
+/usr/share/ncurses4/terminfo/a/altoheath
+/usr/share/ncurses4/terminfo/a/altos-2
+/usr/share/ncurses4/terminfo/a/altos-3
+/usr/share/ncurses4/terminfo/a/altos-4
+/usr/share/ncurses4/terminfo/a/altos-5
+/usr/share/ncurses4/terminfo/a/altos2
+/usr/share/ncurses4/terminfo/a/altos3
+/usr/share/ncurses4/terminfo/a/altos4
+/usr/share/ncurses4/terminfo/a/altos5
+/usr/share/ncurses4/terminfo/a/altos7
+/usr/share/ncurses4/terminfo/a/altos7pc
+/usr/share/ncurses4/terminfo/a/ambas
+/usr/share/ncurses4/terminfo/a/ambassador
+/usr/share/ncurses4/terminfo/a/amiga
+/usr/share/ncurses4/terminfo/a/amiga-h
+/usr/share/ncurses4/terminfo/a/amp219
+/usr/share/ncurses4/terminfo/a/amp219w
+/usr/share/ncurses4/terminfo/a/ampex-219
+/usr/share/ncurses4/terminfo/a/ampex-219w
+/usr/share/ncurses4/terminfo/a/ampex-232
+/usr/share/ncurses4/terminfo/a/ampex175
+/usr/share/ncurses4/terminfo/a/ampex175-b
+/usr/share/ncurses4/terminfo/a/ampex210
+/usr/share/ncurses4/terminfo/a/ampex219
+/usr/share/ncurses4/terminfo/a/ampex219w
+/usr/share/ncurses4/terminfo/a/ampex232
+/usr/share/ncurses4/terminfo/a/ampex232w
+/usr/share/ncurses4/terminfo/a/ampex80
+/usr/share/ncurses4/terminfo/a/annarbor4080
+/usr/share/ncurses4/terminfo/a/ansi
+/usr/share/ncurses4/terminfo/a/ansi-color-2-emx
+/usr/share/ncurses4/terminfo/a/ansi-color-3-emx
+/usr/share/ncurses4/terminfo/a/ansi-emx
+/usr/share/ncurses4/terminfo/a/ansi-m
+/usr/share/ncurses4/terminfo/a/ansi-mini
+/usr/share/ncurses4/terminfo/a/ansi-mono
+/usr/share/ncurses4/terminfo/a/ansi-nt
+/usr/share/ncurses4/terminfo/a/ansi.sys
+/usr/share/ncurses4/terminfo/a/ansi.sys-old
+/usr/share/ncurses4/terminfo/a/ansi.sysk
+/usr/share/ncurses4/terminfo/a/ansi43m
+/usr/share/ncurses4/terminfo/a/ansi77
+/usr/share/ncurses4/terminfo/a/ansi80x25
+/usr/share/ncurses4/terminfo/a/ansi80x25-mono
+/usr/share/ncurses4/terminfo/a/ansi80x25-raw
+/usr/share/ncurses4/terminfo/a/ansi80x30
+/usr/share/ncurses4/terminfo/a/ansi80x30-mono
+/usr/share/ncurses4/terminfo/a/ansi80x43
+/usr/share/ncurses4/terminfo/a/ansi80x43-mono
+/usr/share/ncurses4/terminfo/a/ansi80x50
+/usr/share/ncurses4/terminfo/a/ansi80x50-mono
+/usr/share/ncurses4/terminfo/a/ansi80x60
+/usr/share/ncurses4/terminfo/a/ansi80x60-mono
+/usr/share/ncurses4/terminfo/a/ansil
+/usr/share/ncurses4/terminfo/a/ansil-mono
+/usr/share/ncurses4/terminfo/a/ansis
+/usr/share/ncurses4/terminfo/a/ansis-mono
+/usr/share/ncurses4/terminfo/a/ansisysk
+/usr/share/ncurses4/terminfo/a/ansiw
+/usr/share/ncurses4/terminfo/a/ap-vm80
+/usr/share/ncurses4/terminfo/a/apl
+/usr/share/ncurses4/terminfo/a/apollo
+/usr/share/ncurses4/terminfo/a/apollo_15P
+/usr/share/ncurses4/terminfo/a/apollo_19L
+/usr/share/ncurses4/terminfo/a/apollo_color
+/usr/share/ncurses4/terminfo/a/apple-80
+/usr/share/ncurses4/terminfo/a/apple-ae
+/usr/share/ncurses4/terminfo/a/apple-soroc
+/usr/share/ncurses4/terminfo/a/apple-uterm
+/usr/share/ncurses4/terminfo/a/apple-uterm-vb
+/usr/share/ncurses4/terminfo/a/apple-videx
+/usr/share/ncurses4/terminfo/a/apple-videx2
+/usr/share/ncurses4/terminfo/a/apple-videx3
+/usr/share/ncurses4/terminfo/a/apple-vm80
+/usr/share/ncurses4/terminfo/a/apple2e
+/usr/share/ncurses4/terminfo/a/apple2e-p
+/usr/share/ncurses4/terminfo/a/apple80p
+/usr/share/ncurses4/terminfo/a/appleII
+/usr/share/ncurses4/terminfo/a/appleIIc
+/usr/share/ncurses4/terminfo/a/appleIIe
+/usr/share/ncurses4/terminfo/a/appleIIgs
+/usr/share/ncurses4/terminfo/a/at386
+/usr/share/ncurses4/terminfo/a/atari
+/usr/share/ncurses4/terminfo/a/att2300
+/usr/share/ncurses4/terminfo/a/att2350
+/usr/share/ncurses4/terminfo/a/att4410
+/usr/share/ncurses4/terminfo/a/att4410-w
+/usr/share/ncurses4/terminfo/a/att4410v1
+/usr/share/ncurses4/terminfo/a/att4410v1-w
+/usr/share/ncurses4/terminfo/a/att4415
+/usr/share/ncurses4/terminfo/a/att4415+nl
+/usr/share/ncurses4/terminfo/a/att4415-nl
+/usr/share/ncurses4/terminfo/a/att4415-rv
+/usr/share/ncurses4/terminfo/a/att4415-rv-nl
+/usr/share/ncurses4/terminfo/a/att4415-w
+/usr/share/ncurses4/terminfo/a/att4415-w-nl
+/usr/share/ncurses4/terminfo/a/att4415-w-rv
+/usr/share/ncurses4/terminfo/a/att4415-w-rv-n
+/usr/share/ncurses4/terminfo/a/att4418
+/usr/share/ncurses4/terminfo/a/att4418-w
+/usr/share/ncurses4/terminfo/a/att4420
+/usr/share/ncurses4/terminfo/a/att4424
+/usr/share/ncurses4/terminfo/a/att4424-1
+/usr/share/ncurses4/terminfo/a/att4424m
+/usr/share/ncurses4/terminfo/a/att4425
+/usr/share/ncurses4/terminfo/a/att4425-nl
+/usr/share/ncurses4/terminfo/a/att4425-w
+/usr/share/ncurses4/terminfo/a/att4426
+/usr/share/ncurses4/terminfo/a/att500
+/usr/share/ncurses4/terminfo/a/att505
+/usr/share/ncurses4/terminfo/a/att505-24
+/usr/share/ncurses4/terminfo/a/att510a
+/usr/share/ncurses4/terminfo/a/att510d
+/usr/share/ncurses4/terminfo/a/att513
+/usr/share/ncurses4/terminfo/a/att5310
+/usr/share/ncurses4/terminfo/a/att5320
+/usr/share/ncurses4/terminfo/a/att5410
+/usr/share/ncurses4/terminfo/a/att5410-w
+/usr/share/ncurses4/terminfo/a/att5410v1
+/usr/share/ncurses4/terminfo/a/att5410v1-w
+/usr/share/ncurses4/terminfo/a/att5418
+/usr/share/ncurses4/terminfo/a/att5418-w
+/usr/share/ncurses4/terminfo/a/att5420
+/usr/share/ncurses4/terminfo/a/att5420+nl
+/usr/share/ncurses4/terminfo/a/att5420-nl
+/usr/share/ncurses4/terminfo/a/att5420-rv
+/usr/share/ncurses4/terminfo/a/att5420-rv-nl
+/usr/share/ncurses4/terminfo/a/att5420-w
+/usr/share/ncurses4/terminfo/a/att5420-w-nl
+/usr/share/ncurses4/terminfo/a/att5420-w-rv
+/usr/share/ncurses4/terminfo/a/att5420-w-rv-n
+/usr/share/ncurses4/terminfo/a/att5420_2
+/usr/share/ncurses4/terminfo/a/att5420_2-w
+/usr/share/ncurses4/terminfo/a/att5425
+/usr/share/ncurses4/terminfo/a/att5425-nl
+/usr/share/ncurses4/terminfo/a/att5425-w
+/usr/share/ncurses4/terminfo/a/att5430
+/usr/share/ncurses4/terminfo/a/att5620
+/usr/share/ncurses4/terminfo/a/att5620-1
+/usr/share/ncurses4/terminfo/a/att5620-24
+/usr/share/ncurses4/terminfo/a/att5620-34
+/usr/share/ncurses4/terminfo/a/att5620-s
+/usr/share/ncurses4/terminfo/a/att605
+/usr/share/ncurses4/terminfo/a/att605-pc
+/usr/share/ncurses4/terminfo/a/att605-w
+/usr/share/ncurses4/terminfo/a/att610
+/usr/share/ncurses4/terminfo/a/att610-103k
+/usr/share/ncurses4/terminfo/a/att610-103k-w
+/usr/share/ncurses4/terminfo/a/att610-w
+/usr/share/ncurses4/terminfo/a/att615
+/usr/share/ncurses4/terminfo/a/att615-103k
+/usr/share/ncurses4/terminfo/a/att615-103k-w
+/usr/share/ncurses4/terminfo/a/att615-w
+/usr/share/ncurses4/terminfo/a/att620
+/usr/share/ncurses4/terminfo/a/att620-103k
+/usr/share/ncurses4/terminfo/a/att620-103k-w
+/usr/share/ncurses4/terminfo/a/att620-w
+/usr/share/ncurses4/terminfo/a/att630
+/usr/share/ncurses4/terminfo/a/att630-24
+/usr/share/ncurses4/terminfo/a/att6386
+/usr/share/ncurses4/terminfo/a/att730
+/usr/share/ncurses4/terminfo/a/att730-24
+/usr/share/ncurses4/terminfo/a/att730-41
+/usr/share/ncurses4/terminfo/a/att7300
+/usr/share/ncurses4/terminfo/a/att730r
+/usr/share/ncurses4/terminfo/a/att730r-24
+/usr/share/ncurses4/terminfo/a/att730r-41
+/usr/share/ncurses4/terminfo/a/avatar
+/usr/share/ncurses4/terminfo/a/avatar0
+/usr/share/ncurses4/terminfo/a/avatar0+
+/usr/share/ncurses4/terminfo/a/avatar1
+/usr/share/ncurses4/terminfo/a/avt
+/usr/share/ncurses4/terminfo/a/avt+s
+/usr/share/ncurses4/terminfo/a/avt-ns
+/usr/share/ncurses4/terminfo/a/avt-rv
+/usr/share/ncurses4/terminfo/a/avt-rv-ns
+/usr/share/ncurses4/terminfo/a/avt-rv-s
+/usr/share/ncurses4/terminfo/a/avt-s
+/usr/share/ncurses4/terminfo/a/avt-w
+/usr/share/ncurses4/terminfo/a/avt-w-ns
+/usr/share/ncurses4/terminfo/a/avt-w-rv
+/usr/share/ncurses4/terminfo/a/avt-w-rv-ns
+/usr/share/ncurses4/terminfo/a/avt-w-rv-s
+/usr/share/ncurses4/terminfo/a/avt-w-s
+/usr/share/ncurses4/terminfo/a/aws
+/usr/share/ncurses4/terminfo/a/awsc
+/usr/share/ncurses4/terminfo/b
+/usr/share/ncurses4/terminfo/b/b-128
+/usr/share/ncurses4/terminfo/b/bantam
+/usr/share/ncurses4/terminfo/b/basic4
+/usr/share/ncurses4/terminfo/b/basis
+/usr/share/ncurses4/terminfo/b/bct510a
+/usr/share/ncurses4/terminfo/b/bct510d
+/usr/share/ncurses4/terminfo/b/beacon
+/usr/share/ncurses4/terminfo/b/bee
+/usr/share/ncurses4/terminfo/b/beehive
+/usr/share/ncurses4/terminfo/b/beehive3
+/usr/share/ncurses4/terminfo/b/beehive4
+/usr/share/ncurses4/terminfo/b/beehiveIIIm
+/usr/share/ncurses4/terminfo/b/beterm
+/usr/share/ncurses4/terminfo/b/bg1.25
+/usr/share/ncurses4/terminfo/b/bg1.25nv
+/usr/share/ncurses4/terminfo/b/bg1.25rv
+/usr/share/ncurses4/terminfo/b/bg2.0
+/usr/share/ncurses4/terminfo/b/bg2.0nv
+/usr/share/ncurses4/terminfo/b/bg2.0rv
+/usr/share/ncurses4/terminfo/b/bg3.10
+/usr/share/ncurses4/terminfo/b/bg3.10nv
+/usr/share/ncurses4/terminfo/b/bg3.10rv
+/usr/share/ncurses4/terminfo/b/bh3m
+/usr/share/ncurses4/terminfo/b/bh4
+/usr/share/ncurses4/terminfo/b/bitgraph
+/usr/share/ncurses4/terminfo/b/blit
+/usr/share/ncurses4/terminfo/b/bobcat
+/usr/share/ncurses4/terminfo/b/bsdos
+/usr/share/ncurses4/terminfo/b/bsdos-bold
+/usr/share/ncurses4/terminfo/c
+/usr/share/ncurses4/terminfo/c/c100
+/usr/share/ncurses4/terminfo/c/c100-1p
+/usr/share/ncurses4/terminfo/c/c100-4p
+/usr/share/ncurses4/terminfo/c/c100-rv
+/usr/share/ncurses4/terminfo/c/c100-rv-4p
+/usr/share/ncurses4/terminfo/c/c104
+/usr/share/ncurses4/terminfo/c/c108
+/usr/share/ncurses4/terminfo/c/c108-4p
+/usr/share/ncurses4/terminfo/c/c108-8p
+/usr/share/ncurses4/terminfo/c/c108-rv
+/usr/share/ncurses4/terminfo/c/c108-rv-4p
+/usr/share/ncurses4/terminfo/c/c108-rv-8p
+/usr/share/ncurses4/terminfo/c/c108-w
+/usr/share/ncurses4/terminfo/c/c108-w-8p
+/usr/share/ncurses4/terminfo/c/c300
+/usr/share/ncurses4/terminfo/c/c301
+/usr/share/ncurses4/terminfo/c/c321
+/usr/share/ncurses4/terminfo/c/ca22851
+/usr/share/ncurses4/terminfo/c/cad68-2
+/usr/share/ncurses4/terminfo/c/cad68-3
+/usr/share/ncurses4/terminfo/c/cbblit
+/usr/share/ncurses4/terminfo/c/cbunix
+/usr/share/ncurses4/terminfo/c/cci
+/usr/share/ncurses4/terminfo/c/cci1
+/usr/share/ncurses4/terminfo/c/cdc456
+/usr/share/ncurses4/terminfo/c/cdc721
+/usr/share/ncurses4/terminfo/c/cdc721-esc
+/usr/share/ncurses4/terminfo/c/cdc721ll
+/usr/share/ncurses4/terminfo/c/cdc752
+/usr/share/ncurses4/terminfo/c/cdc756
+/usr/share/ncurses4/terminfo/c/cg7900
+/usr/share/ncurses4/terminfo/c/cgc2
+/usr/share/ncurses4/terminfo/c/cgc3
+/usr/share/ncurses4/terminfo/c/chromatics
+/usr/share/ncurses4/terminfo/c/ci8510
+/usr/share/ncurses4/terminfo/c/cit-80
+/usr/share/ncurses4/terminfo/c/cit101
+/usr/share/ncurses4/terminfo/c/cit101e
+/usr/share/ncurses4/terminfo/c/cit101e-132
+/usr/share/ncurses4/terminfo/c/cit101e-n
+/usr/share/ncurses4/terminfo/c/cit101e-n132
+/usr/share/ncurses4/terminfo/c/cit101e-rv
+/usr/share/ncurses4/terminfo/c/cit500
+/usr/share/ncurses4/terminfo/c/cit80
+/usr/share/ncurses4/terminfo/c/citc
+/usr/share/ncurses4/terminfo/c/citoh
+/usr/share/ncurses4/terminfo/c/citoh-6lpi
+/usr/share/ncurses4/terminfo/c/citoh-8lpi
+/usr/share/ncurses4/terminfo/c/citoh-comp
+/usr/share/ncurses4/terminfo/c/citoh-elite
+/usr/share/ncurses4/terminfo/c/citoh-pica
+/usr/share/ncurses4/terminfo/c/citoh-prop
+/usr/share/ncurses4/terminfo/c/citoh-ps
+/usr/share/ncurses4/terminfo/c/coco3
+/usr/share/ncurses4/terminfo/c/coherent
+/usr/share/ncurses4/terminfo/c/color_xterm
+/usr/share/ncurses4/terminfo/c/colorscan
+/usr/share/ncurses4/terminfo/c/commodore
+/usr/share/ncurses4/terminfo/c/concept
+/usr/share/ncurses4/terminfo/c/concept-avt
+/usr/share/ncurses4/terminfo/c/concept100
+/usr/share/ncurses4/terminfo/c/concept100-rv
+/usr/share/ncurses4/terminfo/c/concept108
+/usr/share/ncurses4/terminfo/c/concept108-4p
+/usr/share/ncurses4/terminfo/c/concept108-8p
+/usr/share/ncurses4/terminfo/c/concept108-w-8
+/usr/share/ncurses4/terminfo/c/concept108-w8p
+/usr/share/ncurses4/terminfo/c/concept108rv4p
+/usr/share/ncurses4/terminfo/c/cons25
+/usr/share/ncurses4/terminfo/c/cons25-iso-m
+/usr/share/ncurses4/terminfo/c/cons25-iso8859
+/usr/share/ncurses4/terminfo/c/cons25-koi8-r
+/usr/share/ncurses4/terminfo/c/cons25-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons25-m
+/usr/share/ncurses4/terminfo/c/cons25l1
+/usr/share/ncurses4/terminfo/c/cons25l1-m
+/usr/share/ncurses4/terminfo/c/cons25r
+/usr/share/ncurses4/terminfo/c/cons25r-m
+/usr/share/ncurses4/terminfo/c/cons25w
+/usr/share/ncurses4/terminfo/c/cons30
+/usr/share/ncurses4/terminfo/c/cons30-m
+/usr/share/ncurses4/terminfo/c/cons43
+/usr/share/ncurses4/terminfo/c/cons43-m
+/usr/share/ncurses4/terminfo/c/cons50
+/usr/share/ncurses4/terminfo/c/cons50-iso-m
+/usr/share/ncurses4/terminfo/c/cons50-iso8859
+/usr/share/ncurses4/terminfo/c/cons50-koi8r
+/usr/share/ncurses4/terminfo/c/cons50-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons50-m
+/usr/share/ncurses4/terminfo/c/cons50l1
+/usr/share/ncurses4/terminfo/c/cons50l1-m
+/usr/share/ncurses4/terminfo/c/cons50r
+/usr/share/ncurses4/terminfo/c/cons50r-m
+/usr/share/ncurses4/terminfo/c/cons60
+/usr/share/ncurses4/terminfo/c/cons60-iso
+/usr/share/ncurses4/terminfo/c/cons60-iso-m
+/usr/share/ncurses4/terminfo/c/cons60-koi8r
+/usr/share/ncurses4/terminfo/c/cons60-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons60-m
+/usr/share/ncurses4/terminfo/c/cons60l1
+/usr/share/ncurses4/terminfo/c/cons60l1-m
+/usr/share/ncurses4/terminfo/c/cons60r
+/usr/share/ncurses4/terminfo/c/cons60r-m
+/usr/share/ncurses4/terminfo/c/contel300
+/usr/share/ncurses4/terminfo/c/contel301
+/usr/share/ncurses4/terminfo/c/contel320
+/usr/share/ncurses4/terminfo/c/contel321
+/usr/share/ncurses4/terminfo/c/cops
+/usr/share/ncurses4/terminfo/c/cops-10
+/usr/share/ncurses4/terminfo/c/cops10
+/usr/share/ncurses4/terminfo/c/cs10
+/usr/share/ncurses4/terminfo/c/cs10-w
+/usr/share/ncurses4/terminfo/c/ct82
+/usr/share/ncurses4/terminfo/c/ct8500
+/usr/share/ncurses4/terminfo/c/ctrm
+/usr/share/ncurses4/terminfo/c/cx
+/usr/share/ncurses4/terminfo/c/cx100
+/usr/share/ncurses4/terminfo/c/cyb110
+/usr/share/ncurses4/terminfo/c/cyb83
+/usr/share/ncurses4/terminfo/d
+/usr/share/ncurses4/terminfo/d/d132
+/usr/share/ncurses4/terminfo/d/d80
+/usr/share/ncurses4/terminfo/d/d800
+/usr/share/ncurses4/terminfo/d/datagraphix
+/usr/share/ncurses4/terminfo/d/datamedia2500
+/usr/share/ncurses4/terminfo/d/datapoint
+/usr/share/ncurses4/terminfo/d/dataspeed40
+/usr/share/ncurses4/terminfo/d/dd5000
+/usr/share/ncurses4/terminfo/d/ddr
+/usr/share/ncurses4/terminfo/d/ddr3180
+/usr/share/ncurses4/terminfo/d/dec-vt100
+/usr/share/ncurses4/terminfo/d/dec-vt220
+/usr/share/ncurses4/terminfo/d/dec-vt330
+/usr/share/ncurses4/terminfo/d/dec-vt340
+/usr/share/ncurses4/terminfo/d/dec-vt400
+/usr/share/ncurses4/terminfo/d/decpro
+/usr/share/ncurses4/terminfo/d/decwriter
+/usr/share/ncurses4/terminfo/d/delta
+/usr/share/ncurses4/terminfo/d/dg-ansi
+/usr/share/ncurses4/terminfo/d/dg100
+/usr/share/ncurses4/terminfo/d/dg200
+/usr/share/ncurses4/terminfo/d/dg210
+/usr/share/ncurses4/terminfo/d/dg211
+/usr/share/ncurses4/terminfo/d/dg450
+/usr/share/ncurses4/terminfo/d/dg460-ansi
+/usr/share/ncurses4/terminfo/d/dg6053
+/usr/share/ncurses4/terminfo/d/dg6134
+/usr/share/ncurses4/terminfo/d/diablo
+/usr/share/ncurses4/terminfo/d/diablo-lm
+/usr/share/ncurses4/terminfo/d/diablo1620
+/usr/share/ncurses4/terminfo/d/diablo1620-m8
+/usr/share/ncurses4/terminfo/d/diablo1640
+/usr/share/ncurses4/terminfo/d/diablo1640-lm
+/usr/share/ncurses4/terminfo/d/diablo1640-m8
+/usr/share/ncurses4/terminfo/d/diablo1720
+/usr/share/ncurses4/terminfo/d/diablo1730
+/usr/share/ncurses4/terminfo/d/diablo1740
+/usr/share/ncurses4/terminfo/d/diablo1740-lm
+/usr/share/ncurses4/terminfo/d/diablo450
+/usr/share/ncurses4/terminfo/d/diablo630
+/usr/share/ncurses4/terminfo/d/dialogue
+/usr/share/ncurses4/terminfo/d/dialogue80
+/usr/share/ncurses4/terminfo/d/digilog
+/usr/share/ncurses4/terminfo/d/dku7003
+/usr/share/ncurses4/terminfo/d/dku7003-dumb
+/usr/share/ncurses4/terminfo/d/dm1520
+/usr/share/ncurses4/terminfo/d/dm1521
+/usr/share/ncurses4/terminfo/d/dm2500
+/usr/share/ncurses4/terminfo/d/dm3025
+/usr/share/ncurses4/terminfo/d/dm3045
+/usr/share/ncurses4/terminfo/d/dm80
+/usr/share/ncurses4/terminfo/d/dm80w
+/usr/share/ncurses4/terminfo/d/dmchat
+/usr/share/ncurses4/terminfo/d/dmd
+/usr/share/ncurses4/terminfo/d/dmd-24
+/usr/share/ncurses4/terminfo/d/dmd-34
+/usr/share/ncurses4/terminfo/d/dmd1
+/usr/share/ncurses4/terminfo/d/dmdt80
+/usr/share/ncurses4/terminfo/d/dmdt80w
+/usr/share/ncurses4/terminfo/d/dmterm
+/usr/share/ncurses4/terminfo/d/dp3360
+/usr/share/ncurses4/terminfo/d/dp8242
+/usr/share/ncurses4/terminfo/d/ds40
+/usr/share/ncurses4/terminfo/d/ds40-2
+/usr/share/ncurses4/terminfo/d/dt-100
+/usr/share/ncurses4/terminfo/d/dt-100w
+/usr/share/ncurses4/terminfo/d/dt100
+/usr/share/ncurses4/terminfo/d/dt100w
+/usr/share/ncurses4/terminfo/d/dt110
+/usr/share/ncurses4/terminfo/d/dt80
+/usr/share/ncurses4/terminfo/d/dt80-sas
+/usr/share/ncurses4/terminfo/d/dt80w
+/usr/share/ncurses4/terminfo/d/dtc300s
+/usr/share/ncurses4/terminfo/d/dtc382
+/usr/share/ncurses4/terminfo/d/dtterm
+/usr/share/ncurses4/terminfo/d/dumb
+/usr/share/ncurses4/terminfo/d/dw
+/usr/share/ncurses4/terminfo/d/dw1
+/usr/share/ncurses4/terminfo/d/dw2
+/usr/share/ncurses4/terminfo/d/dw3
+/usr/share/ncurses4/terminfo/d/dw4
+/usr/share/ncurses4/terminfo/d/dwk
+/usr/share/ncurses4/terminfo/d/dwk-vt
+/usr/share/ncurses4/terminfo/e
+/usr/share/ncurses4/terminfo/e/ecma+color
+/usr/share/ncurses4/terminfo/e/ecma+sgr
+/usr/share/ncurses4/terminfo/e/emots
+/usr/share/ncurses4/terminfo/e/emu
+/usr/share/ncurses4/terminfo/e/env230
+/usr/share/ncurses4/terminfo/e/envision230
+/usr/share/ncurses4/terminfo/e/ep40
+/usr/share/ncurses4/terminfo/e/ep4000
+/usr/share/ncurses4/terminfo/e/ep4080
+/usr/share/ncurses4/terminfo/e/ep48
+/usr/share/ncurses4/terminfo/e/ergo4000
+/usr/share/ncurses4/terminfo/e/esprit
+/usr/share/ncurses4/terminfo/e/esprit-am
+/usr/share/ncurses4/terminfo/e/eterm
+/usr/share/ncurses4/terminfo/e/ex155
+/usr/share/ncurses4/terminfo/e/excel62
+/usr/share/ncurses4/terminfo/e/excel62-rv
+/usr/share/ncurses4/terminfo/e/excel62-w
+/usr/share/ncurses4/terminfo/e/excel64
+/usr/share/ncurses4/terminfo/e/excel64-rv
+/usr/share/ncurses4/terminfo/e/excel64-w
+/usr/share/ncurses4/terminfo/e/exec80
+/usr/share/ncurses4/terminfo/f
+/usr/share/ncurses4/terminfo/f/f100
+/usr/share/ncurses4/terminfo/f/f100-rv
+/usr/share/ncurses4/terminfo/f/f110
+/usr/share/ncurses4/terminfo/f/f110-14
+/usr/share/ncurses4/terminfo/f/f110-14w
+/usr/share/ncurses4/terminfo/f/f110-w
+/usr/share/ncurses4/terminfo/f/f1720
+/usr/share/ncurses4/terminfo/f/f1720a
+/usr/share/ncurses4/terminfo/f/f200
+/usr/share/ncurses4/terminfo/f/f200-w
+/usr/share/ncurses4/terminfo/f/f200vi
+/usr/share/ncurses4/terminfo/f/f200vi-w
+/usr/share/ncurses4/terminfo/f/falco
+/usr/share/ncurses4/terminfo/f/falco-p
+/usr/share/ncurses4/terminfo/f/fenix
+/usr/share/ncurses4/terminfo/f/fenixw
+/usr/share/ncurses4/terminfo/f/fixterm
+/usr/share/ncurses4/terminfo/f/fortune
+/usr/share/ncurses4/terminfo/f/fos
+/usr/share/ncurses4/terminfo/f/fox
+/usr/share/ncurses4/terminfo/f/freedom
+/usr/share/ncurses4/terminfo/f/freedom-rv
+/usr/share/ncurses4/terminfo/f/freedom100
+/usr/share/ncurses4/terminfo/f/freedom110
+/usr/share/ncurses4/terminfo/f/freedom200
+/usr/share/ncurses4/terminfo/g
+/usr/share/ncurses4/terminfo/g/gator
+/usr/share/ncurses4/terminfo/g/gator-52
+/usr/share/ncurses4/terminfo/g/gator-52t
+/usr/share/ncurses4/terminfo/g/gator-t
+/usr/share/ncurses4/terminfo/g/gigi
+/usr/share/ncurses4/terminfo/g/glasstty
+/usr/share/ncurses4/terminfo/g/go-225
+/usr/share/ncurses4/terminfo/g/go140
+/usr/share/ncurses4/terminfo/g/go140w
+/usr/share/ncurses4/terminfo/g/go225
+/usr/share/ncurses4/terminfo/g/graphos
+/usr/share/ncurses4/terminfo/g/graphos-30
+/usr/share/ncurses4/terminfo/g/gs5430
+/usr/share/ncurses4/terminfo/g/gs5430-22
+/usr/share/ncurses4/terminfo/g/gs5430-24
+/usr/share/ncurses4/terminfo/g/gs6300
+/usr/share/ncurses4/terminfo/g/gsi
+/usr/share/ncurses4/terminfo/g/gt100
+/usr/share/ncurses4/terminfo/g/gt100a
+/usr/share/ncurses4/terminfo/g/gt40
+/usr/share/ncurses4/terminfo/g/gt42
+/usr/share/ncurses4/terminfo/g/guru
+/usr/share/ncurses4/terminfo/g/guru+rv
+/usr/share/ncurses4/terminfo/g/guru+s
+/usr/share/ncurses4/terminfo/g/guru+unk
+/usr/share/ncurses4/terminfo/g/guru-24
+/usr/share/ncurses4/terminfo/g/guru-33
+/usr/share/ncurses4/terminfo/g/guru-33-rv
+/usr/share/ncurses4/terminfo/g/guru-33-s
+/usr/share/ncurses4/terminfo/g/guru-44
+/usr/share/ncurses4/terminfo/g/guru-44-s
+/usr/share/ncurses4/terminfo/g/guru-76
+/usr/share/ncurses4/terminfo/g/guru-76-lp
+/usr/share/ncurses4/terminfo/g/guru-76-s
+/usr/share/ncurses4/terminfo/g/guru-76-w
+/usr/share/ncurses4/terminfo/g/guru-76-w-s
+/usr/share/ncurses4/terminfo/g/guru-76-wm
+/usr/share/ncurses4/terminfo/g/guru-lp
+/usr/share/ncurses4/terminfo/g/guru-nctxt
+/usr/share/ncurses4/terminfo/g/guru-rv
+/usr/share/ncurses4/terminfo/g/guru-s
+/usr/share/ncurses4/terminfo/h
+/usr/share/ncurses4/terminfo/h/h-100
+/usr/share/ncurses4/terminfo/h/h-100bw
+/usr/share/ncurses4/terminfo/h/h100
+/usr/share/ncurses4/terminfo/h/h100bw
+/usr/share/ncurses4/terminfo/h/h19
+/usr/share/ncurses4/terminfo/h/h19-a
+/usr/share/ncurses4/terminfo/h/h19-b
+/usr/share/ncurses4/terminfo/h/h19-bs
+/usr/share/ncurses4/terminfo/h/h19-g
+/usr/share/ncurses4/terminfo/h/h19-smul
+/usr/share/ncurses4/terminfo/h/h19-u
+/usr/share/ncurses4/terminfo/h/h19-us
+/usr/share/ncurses4/terminfo/h/h19a
+/usr/share/ncurses4/terminfo/h/h19g
+/usr/share/ncurses4/terminfo/h/h19k
+/usr/share/ncurses4/terminfo/h/h19kermit
+/usr/share/ncurses4/terminfo/h/h19us
+/usr/share/ncurses4/terminfo/h/h29a-kc-bc
+/usr/share/ncurses4/terminfo/h/h29a-kc-uc
+/usr/share/ncurses4/terminfo/h/h29a-nkc-bc
+/usr/share/ncurses4/terminfo/h/h29a-nkc-uc
+/usr/share/ncurses4/terminfo/h/h80
+/usr/share/ncurses4/terminfo/h/ha8675
+/usr/share/ncurses4/terminfo/h/ha8686
+/usr/share/ncurses4/terminfo/h/hazel
+/usr/share/ncurses4/terminfo/h/hds200
+/usr/share/ncurses4/terminfo/h/he80
+/usr/share/ncurses4/terminfo/h/heath
+/usr/share/ncurses4/terminfo/h/heath-19
+/usr/share/ncurses4/terminfo/h/heath-ansi
+/usr/share/ncurses4/terminfo/h/heathkit
+/usr/share/ncurses4/terminfo/h/heathkit-a
+/usr/share/ncurses4/terminfo/h/hft
+/usr/share/ncurses4/terminfo/h/hft-c
+/usr/share/ncurses4/terminfo/h/hirez100
+/usr/share/ncurses4/terminfo/h/hirez100-w
+/usr/share/ncurses4/terminfo/h/hmod1
+/usr/share/ncurses4/terminfo/h/hp
+/usr/share/ncurses4/terminfo/h/hp+arrows
+/usr/share/ncurses4/terminfo/h/hp+color
+/usr/share/ncurses4/terminfo/h/hp+labels
+/usr/share/ncurses4/terminfo/h/hp+pfk+arrows
+/usr/share/ncurses4/terminfo/h/hp+pfk+cr
+/usr/share/ncurses4/terminfo/h/hp+pfk-cr
+/usr/share/ncurses4/terminfo/h/hp+printer
+/usr/share/ncurses4/terminfo/h/hp110
+/usr/share/ncurses4/terminfo/h/hp150
+/usr/share/ncurses4/terminfo/h/hp2
+/usr/share/ncurses4/terminfo/h/hp236
+/usr/share/ncurses4/terminfo/h/hp2382
+/usr/share/ncurses4/terminfo/h/hp2382a
+/usr/share/ncurses4/terminfo/h/hp2392
+/usr/share/ncurses4/terminfo/h/hp2397
+/usr/share/ncurses4/terminfo/h/hp2397a
+/usr/share/ncurses4/terminfo/h/hp2621
+/usr/share/ncurses4/terminfo/h/hp2621-48
+/usr/share/ncurses4/terminfo/h/hp2621-a
+/usr/share/ncurses4/terminfo/h/hp2621-ba
+/usr/share/ncurses4/terminfo/h/hp2621-fl
+/usr/share/ncurses4/terminfo/h/hp2621-k45
+/usr/share/ncurses4/terminfo/h/hp2621-nl
+/usr/share/ncurses4/terminfo/h/hp2621-nt
+/usr/share/ncurses4/terminfo/h/hp2621-wl
+/usr/share/ncurses4/terminfo/h/hp2621A
+/usr/share/ncurses4/terminfo/h/hp2621a
+/usr/share/ncurses4/terminfo/h/hp2621a-a
+/usr/share/ncurses4/terminfo/h/hp2621b
+/usr/share/ncurses4/terminfo/h/hp2621b-kx
+/usr/share/ncurses4/terminfo/h/hp2621b-kx-p
+/usr/share/ncurses4/terminfo/h/hp2621b-p
+/usr/share/ncurses4/terminfo/h/hp2621k45
+/usr/share/ncurses4/terminfo/h/hp2621p
+/usr/share/ncurses4/terminfo/h/hp2621p-a
+/usr/share/ncurses4/terminfo/h/hp2622
+/usr/share/ncurses4/terminfo/h/hp2622a
+/usr/share/ncurses4/terminfo/h/hp2623
+/usr/share/ncurses4/terminfo/h/hp2623a
+/usr/share/ncurses4/terminfo/h/hp2624
+/usr/share/ncurses4/terminfo/h/hp2624-10p
+/usr/share/ncurses4/terminfo/h/hp2624a
+/usr/share/ncurses4/terminfo/h/hp2624a-10p
+/usr/share/ncurses4/terminfo/h/hp2624b
+/usr/share/ncurses4/terminfo/h/hp2624b-10p
+/usr/share/ncurses4/terminfo/h/hp2624b-10p-p
+/usr/share/ncurses4/terminfo/h/hp2624b-4p
+/usr/share/ncurses4/terminfo/h/hp2624b-4p-p
+/usr/share/ncurses4/terminfo/h/hp2624b-p
+/usr/share/ncurses4/terminfo/h/hp2626
+/usr/share/ncurses4/terminfo/h/hp2626-12
+/usr/share/ncurses4/terminfo/h/hp2626-12-s
+/usr/share/ncurses4/terminfo/h/hp2626-12x40
+/usr/share/ncurses4/terminfo/h/hp2626-ns
+/usr/share/ncurses4/terminfo/h/hp2626-s
+/usr/share/ncurses4/terminfo/h/hp2626-x40
+/usr/share/ncurses4/terminfo/h/hp2626a
+/usr/share/ncurses4/terminfo/h/hp2626p
+/usr/share/ncurses4/terminfo/h/hp2627a
+/usr/share/ncurses4/terminfo/h/hp2627a-rev
+/usr/share/ncurses4/terminfo/h/hp2627c
+/usr/share/ncurses4/terminfo/h/hp262x
+/usr/share/ncurses4/terminfo/h/hp2640a
+/usr/share/ncurses4/terminfo/h/hp2640b
+/usr/share/ncurses4/terminfo/h/hp2641a
+/usr/share/ncurses4/terminfo/h/hp2644a
+/usr/share/ncurses4/terminfo/h/hp2645
+/usr/share/ncurses4/terminfo/h/hp2645a
+/usr/share/ncurses4/terminfo/h/hp2647a
+/usr/share/ncurses4/terminfo/h/hp2648
+/usr/share/ncurses4/terminfo/h/hp2648a
+/usr/share/ncurses4/terminfo/h/hp300h
+/usr/share/ncurses4/terminfo/h/hp45
+/usr/share/ncurses4/terminfo/h/hp700
+/usr/share/ncurses4/terminfo/h/hp700-wy
+/usr/share/ncurses4/terminfo/h/hp70092
+/usr/share/ncurses4/terminfo/h/hp70092A
+/usr/share/ncurses4/terminfo/h/hp70092a
+/usr/share/ncurses4/terminfo/h/hp9837
+/usr/share/ncurses4/terminfo/h/hp9845
+/usr/share/ncurses4/terminfo/h/hp98550
+/usr/share/ncurses4/terminfo/h/hp98550a
+/usr/share/ncurses4/terminfo/h/hp98720
+/usr/share/ncurses4/terminfo/h/hp98721
+/usr/share/ncurses4/terminfo/h/hpansi
+/usr/share/ncurses4/terminfo/h/hpex
+/usr/share/ncurses4/terminfo/h/hpex2
+/usr/share/ncurses4/terminfo/h/hpgeneric
+/usr/share/ncurses4/terminfo/h/hpsub
+/usr/share/ncurses4/terminfo/h/hpterm
+/usr/share/ncurses4/terminfo/h/htx11
+/usr/share/ncurses4/terminfo/h/hz1000
+/usr/share/ncurses4/terminfo/h/hz1420
+/usr/share/ncurses4/terminfo/h/hz1500
+/usr/share/ncurses4/terminfo/h/hz1510
+/usr/share/ncurses4/terminfo/h/hz1520
+/usr/share/ncurses4/terminfo/h/hz1520-noesc
+/usr/share/ncurses4/terminfo/h/hz1552
+/usr/share/ncurses4/terminfo/h/hz1552-rv
+/usr/share/ncurses4/terminfo/h/hz2000
+/usr/share/ncurses4/terminfo/i
+/usr/share/ncurses4/terminfo/i/i100
+/usr/share/ncurses4/terminfo/i/i3101
+/usr/share/ncurses4/terminfo/i/i3151
+/usr/share/ncurses4/terminfo/i/i3164
+/usr/share/ncurses4/terminfo/i/i400
+/usr/share/ncurses4/terminfo/i/ibcs2
+/usr/share/ncurses4/terminfo/i/ibm-apl
+/usr/share/ncurses4/terminfo/i/ibm-pc
+/usr/share/ncurses4/terminfo/i/ibm-system1
+/usr/share/ncurses4/terminfo/i/ibm3101
+/usr/share/ncurses4/terminfo/i/ibm3151
+/usr/share/ncurses4/terminfo/i/ibm3161
+/usr/share/ncurses4/terminfo/i/ibm3163
+/usr/share/ncurses4/terminfo/i/ibm3164
+/usr/share/ncurses4/terminfo/i/ibm327x
+/usr/share/ncurses4/terminfo/i/ibm5051
+/usr/share/ncurses4/terminfo/i/ibm5081
+/usr/share/ncurses4/terminfo/i/ibm5081-c
+/usr/share/ncurses4/terminfo/i/ibm5151
+/usr/share/ncurses4/terminfo/i/ibm5154
+/usr/share/ncurses4/terminfo/i/ibm5154-c
+/usr/share/ncurses4/terminfo/i/ibm6153
+/usr/share/ncurses4/terminfo/i/ibm6154
+/usr/share/ncurses4/terminfo/i/ibm6154-c
+/usr/share/ncurses4/terminfo/i/ibm6155
+/usr/share/ncurses4/terminfo/i/ibm8512
+/usr/share/ncurses4/terminfo/i/ibm8513
+/usr/share/ncurses4/terminfo/i/ibm8514
+/usr/share/ncurses4/terminfo/i/ibm8514-c
+/usr/share/ncurses4/terminfo/i/ibmaed
+/usr/share/ncurses4/terminfo/i/ibmapa16
+/usr/share/ncurses4/terminfo/i/ibmapa8
+/usr/share/ncurses4/terminfo/i/ibmapa8c
+/usr/share/ncurses4/terminfo/i/ibmapa8c-c
+/usr/share/ncurses4/terminfo/i/ibmega
+/usr/share/ncurses4/terminfo/i/ibmega-c
+/usr/share/ncurses4/terminfo/i/ibmmono
+/usr/share/ncurses4/terminfo/i/ibmmpel
+/usr/share/ncurses4/terminfo/i/ibmmpel-c
+/usr/share/ncurses4/terminfo/i/ibmpc
+/usr/share/ncurses4/terminfo/i/ibmpc3
+/usr/share/ncurses4/terminfo/i/ibmpc3r
+/usr/share/ncurses4/terminfo/i/ibmpc3r-mono
+/usr/share/ncurses4/terminfo/i/ibmpcx
+/usr/share/ncurses4/terminfo/i/ibmvga
+/usr/share/ncurses4/terminfo/i/ibmvga-c
+/usr/share/ncurses4/terminfo/i/ibmx
+/usr/share/ncurses4/terminfo/i/ifmr
+/usr/share/ncurses4/terminfo/i/ims-ansi
+/usr/share/ncurses4/terminfo/i/ims950
+/usr/share/ncurses4/terminfo/i/ims950-b
+/usr/share/ncurses4/terminfo/i/ims950-rv
+/usr/share/ncurses4/terminfo/i/infoton
+/usr/share/ncurses4/terminfo/i/intertec
+/usr/share/ncurses4/terminfo/i/intertube
+/usr/share/ncurses4/terminfo/i/intertube2
+/usr/share/ncurses4/terminfo/i/intext
+/usr/share/ncurses4/terminfo/i/intext2
+/usr/share/ncurses4/terminfo/i/intextii
+/usr/share/ncurses4/terminfo/i/ips
+/usr/share/ncurses4/terminfo/i/ipsi
+/usr/share/ncurses4/terminfo/i/iq120
+/usr/share/ncurses4/terminfo/i/iq140
+/usr/share/ncurses4/terminfo/i/iris-ansi
+/usr/share/ncurses4/terminfo/i/iris-ansi-ap
+/usr/share/ncurses4/terminfo/i/iris-color
+/usr/share/ncurses4/terminfo/i/iris40
+/usr/share/ncurses4/terminfo/j
+/usr/share/ncurses4/terminfo/j/jaixterm-m
+/usr/share/ncurses4/terminfo/j/jerq
+/usr/share/ncurses4/terminfo/k
+/usr/share/ncurses4/terminfo/k/k45
+/usr/share/ncurses4/terminfo/k/kaypro
+/usr/share/ncurses4/terminfo/k/kaypro2
+/usr/share/ncurses4/terminfo/k/kermit
+/usr/share/ncurses4/terminfo/k/kermit-am
+/usr/share/ncurses4/terminfo/k/klone+acs
+/usr/share/ncurses4/terminfo/k/klone+color
+/usr/share/ncurses4/terminfo/k/klone+koi8acs
+/usr/share/ncurses4/terminfo/k/klone+sgr
+/usr/share/ncurses4/terminfo/k/klone+sgr-dumb
+/usr/share/ncurses4/terminfo/k/kt7
+/usr/share/ncurses4/terminfo/k/kt7ix
+/usr/share/ncurses4/terminfo/k/kterm
+/usr/share/ncurses4/terminfo/k/ktm
+/usr/share/ncurses4/terminfo/l
+/usr/share/ncurses4/terminfo/l/la120
+/usr/share/ncurses4/terminfo/l/layer
+/usr/share/ncurses4/terminfo/l/linux
+/usr/share/ncurses4/terminfo/l/linux-c
+/usr/share/ncurses4/terminfo/l/linux-c-nc
+/usr/share/ncurses4/terminfo/l/linux-koi8
+/usr/share/ncurses4/terminfo/l/linux-koi8r
+/usr/share/ncurses4/terminfo/l/linux-m
+/usr/share/ncurses4/terminfo/l/linux-nic
+/usr/share/ncurses4/terminfo/l/lisa
+/usr/share/ncurses4/terminfo/l/lisaterm
+/usr/share/ncurses4/terminfo/l/lisaterm-w
+/usr/share/ncurses4/terminfo/l/liswb
+/usr/share/ncurses4/terminfo/l/ln03
+/usr/share/ncurses4/terminfo/l/ln03-w
+/usr/share/ncurses4/terminfo/l/lpr
+/usr/share/ncurses4/terminfo/l/luna
+/usr/share/ncurses4/terminfo/l/luna68k
+/usr/share/ncurses4/terminfo/m
+/usr/share/ncurses4/terminfo/m/m2-nam
+/usr/share/ncurses4/terminfo/m/mac
+/usr/share/ncurses4/terminfo/m/mac-w
+/usr/share/ncurses4/terminfo/m/macintosh
+/usr/share/ncurses4/terminfo/m/macterminal-w
+/usr/share/ncurses4/terminfo/m/mai
+/usr/share/ncurses4/terminfo/m/masscomp
+/usr/share/ncurses4/terminfo/m/masscomp1
+/usr/share/ncurses4/terminfo/m/masscomp2
+/usr/share/ncurses4/terminfo/m/mdl110
+/usr/share/ncurses4/terminfo/m/megatek
+/usr/share/ncurses4/terminfo/m/memhp
+/usr/share/ncurses4/terminfo/m/mgr
+/usr/share/ncurses4/terminfo/m/mgr-linux
+/usr/share/ncurses4/terminfo/m/mgr-sun
+/usr/share/ncurses4/terminfo/m/microb
+/usr/share/ncurses4/terminfo/m/microbee
+/usr/share/ncurses4/terminfo/m/microterm
+/usr/share/ncurses4/terminfo/m/microterm5
+/usr/share/ncurses4/terminfo/m/mime
+/usr/share/ncurses4/terminfo/m/mime-3ax
+/usr/share/ncurses4/terminfo/m/mime-fb
+/usr/share/ncurses4/terminfo/m/mime-hb
+/usr/share/ncurses4/terminfo/m/mime1
+/usr/share/ncurses4/terminfo/m/mime2
+/usr/share/ncurses4/terminfo/m/mime2a
+/usr/share/ncurses4/terminfo/m/mime2a-s
+/usr/share/ncurses4/terminfo/m/mime2a-v
+/usr/share/ncurses4/terminfo/m/mime314
+/usr/share/ncurses4/terminfo/m/mime340
+/usr/share/ncurses4/terminfo/m/mime3a
+/usr/share/ncurses4/terminfo/m/mime3ax
+/usr/share/ncurses4/terminfo/m/mimei
+/usr/share/ncurses4/terminfo/m/mimeii
+/usr/share/ncurses4/terminfo/m/minitel
+/usr/share/ncurses4/terminfo/m/minitel-2
+/usr/share/ncurses4/terminfo/m/minitel-2-nam
+/usr/share/ncurses4/terminfo/m/minix
+/usr/share/ncurses4/terminfo/m/minix-old
+/usr/share/ncurses4/terminfo/m/minix-old-am
+/usr/share/ncurses4/terminfo/m/mm314
+/usr/share/ncurses4/terminfo/m/mm340
+/usr/share/ncurses4/terminfo/m/mod
+/usr/share/ncurses4/terminfo/m/mod24
+/usr/share/ncurses4/terminfo/m/modgraph
+/usr/share/ncurses4/terminfo/m/modgraph2
+/usr/share/ncurses4/terminfo/m/modgraph48
+/usr/share/ncurses4/terminfo/m/mono-emx
+/usr/share/ncurses4/terminfo/m/msk227
+/usr/share/ncurses4/terminfo/m/msk22714
+/usr/share/ncurses4/terminfo/m/msk227am
+/usr/share/ncurses4/terminfo/m/mskermit227
+/usr/share/ncurses4/terminfo/m/mskermit22714
+/usr/share/ncurses4/terminfo/m/mskermit227am
+/usr/share/ncurses4/terminfo/m/mt-70
+/usr/share/ncurses4/terminfo/m/mt4520-rv
+/usr/share/ncurses4/terminfo/m/mt70
+/usr/share/ncurses4/terminfo/n
+/usr/share/ncurses4/terminfo/n/nansi.sys
+/usr/share/ncurses4/terminfo/n/nansi.sysk
+/usr/share/ncurses4/terminfo/n/nansisys
+/usr/share/ncurses4/terminfo/n/nansisysk
+/usr/share/ncurses4/terminfo/n/ncr7900
+/usr/share/ncurses4/terminfo/n/ncr7900i
+/usr/share/ncurses4/terminfo/n/ncr7900iv
+/usr/share/ncurses4/terminfo/n/ncr7901
+/usr/share/ncurses4/terminfo/n/nec
+/usr/share/ncurses4/terminfo/n/nec5520
+/usr/share/ncurses4/terminfo/n/newhp
+/usr/share/ncurses4/terminfo/n/newhpkeyboard
+/usr/share/ncurses4/terminfo/n/news
+/usr/share/ncurses4/terminfo/n/news-29
+/usr/share/ncurses4/terminfo/n/news-29-euc
+/usr/share/ncurses4/terminfo/n/news-29-sjis
+/usr/share/ncurses4/terminfo/n/news-33
+/usr/share/ncurses4/terminfo/n/news-33-euc
+/usr/share/ncurses4/terminfo/n/news-33-sjis
+/usr/share/ncurses4/terminfo/n/news-42
+/usr/share/ncurses4/terminfo/n/news-42-euc
+/usr/share/ncurses4/terminfo/n/news-42-sjis
+/usr/share/ncurses4/terminfo/n/news-a
+/usr/share/ncurses4/terminfo/n/news-o
+/usr/share/ncurses4/terminfo/n/news-old-unk
+/usr/share/ncurses4/terminfo/n/news-unk
+/usr/share/ncurses4/terminfo/n/news28
+/usr/share/ncurses4/terminfo/n/news28-a
+/usr/share/ncurses4/terminfo/n/news29
+/usr/share/ncurses4/terminfo/n/news31
+/usr/share/ncurses4/terminfo/n/news31-a
+/usr/share/ncurses4/terminfo/n/news31-o
+/usr/share/ncurses4/terminfo/n/news33
+/usr/share/ncurses4/terminfo/n/news40
+/usr/share/ncurses4/terminfo/n/news40-a
+/usr/share/ncurses4/terminfo/n/news40-o
+/usr/share/ncurses4/terminfo/n/news42
+/usr/share/ncurses4/terminfo/n/newscbm
+/usr/share/ncurses4/terminfo/n/newscbm-a
+/usr/share/ncurses4/terminfo/n/newscbm-o
+/usr/share/ncurses4/terminfo/n/newscbm33
+/usr/share/ncurses4/terminfo/n/next
+/usr/share/ncurses4/terminfo/n/nextshell
+/usr/share/ncurses4/terminfo/n/northstar
+/usr/share/ncurses4/terminfo/n/nwe501
+/usr/share/ncurses4/terminfo/n/nwe501-a
+/usr/share/ncurses4/terminfo/n/nwe501-o
+/usr/share/ncurses4/terminfo/n/nwp-511
+/usr/share/ncurses4/terminfo/n/nwp-517
+/usr/share/ncurses4/terminfo/n/nwp-517-w
+/usr/share/ncurses4/terminfo/n/nwp251-a
+/usr/share/ncurses4/terminfo/n/nwp251-o
+/usr/share/ncurses4/terminfo/n/nwp511
+/usr/share/ncurses4/terminfo/n/nwp512
+/usr/share/ncurses4/terminfo/n/nwp512-a
+/usr/share/ncurses4/terminfo/n/nwp512-o
+/usr/share/ncurses4/terminfo/n/nwp513
+/usr/share/ncurses4/terminfo/n/nwp513-a
+/usr/share/ncurses4/terminfo/n/nwp513-o
+/usr/share/ncurses4/terminfo/n/nwp514
+/usr/share/ncurses4/terminfo/n/nwp514-a
+/usr/share/ncurses4/terminfo/n/nwp514-o
+/usr/share/ncurses4/terminfo/n/nwp517
+/usr/share/ncurses4/terminfo/n/nwp517-w
+/usr/share/ncurses4/terminfo/n/nwp518
+/usr/share/ncurses4/terminfo/n/nwp518-a
+/usr/share/ncurses4/terminfo/n/nwp518-o
+/usr/share/ncurses4/terminfo/o
+/usr/share/ncurses4/terminfo/o/o31
+/usr/share/ncurses4/terminfo/o/o4112-nd
+/usr/share/ncurses4/terminfo/o/o85h
+/usr/share/ncurses4/terminfo/o/oabm85h
+/usr/share/ncurses4/terminfo/o/oblit
+/usr/share/ncurses4/terminfo/o/oc100
+/usr/share/ncurses4/terminfo/o/oconcept
+/usr/share/ncurses4/terminfo/o/ojerq
+/usr/share/ncurses4/terminfo/o/oldibmpc3
+/usr/share/ncurses4/terminfo/o/oldpc3
+/usr/share/ncurses4/terminfo/o/oldsun
+/usr/share/ncurses4/terminfo/o/omron
+/usr/share/ncurses4/terminfo/o/opus3n1+
+/usr/share/ncurses4/terminfo/o/origibmpc3
+/usr/share/ncurses4/terminfo/o/origpc3
+/usr/share/ncurses4/terminfo/o/os9LII
+/usr/share/ncurses4/terminfo/o/osborne
+/usr/share/ncurses4/terminfo/o/osborne-w
+/usr/share/ncurses4/terminfo/o/osborne1
+/usr/share/ncurses4/terminfo/o/osborne1-w
+/usr/share/ncurses4/terminfo/o/osexec
+/usr/share/ncurses4/terminfo/o/otek4112
+/usr/share/ncurses4/terminfo/o/otek4113
+/usr/share/ncurses4/terminfo/o/otek4114
+/usr/share/ncurses4/terminfo/o/otek4115
+/usr/share/ncurses4/terminfo/o/owl
+/usr/share/ncurses4/terminfo/p
+/usr/share/ncurses4/terminfo/p/p12
+/usr/share/ncurses4/terminfo/p/p12-m
+/usr/share/ncurses4/terminfo/p/p12-m-w
+/usr/share/ncurses4/terminfo/p/p12-w
+/usr/share/ncurses4/terminfo/p/p14
+/usr/share/ncurses4/terminfo/p/p14-m
+/usr/share/ncurses4/terminfo/p/p14-m-w
+/usr/share/ncurses4/terminfo/p/p14-w
+/usr/share/ncurses4/terminfo/p/p19
+/usr/share/ncurses4/terminfo/p/p4
+/usr/share/ncurses4/terminfo/p/p5
+/usr/share/ncurses4/terminfo/p/p7
+/usr/share/ncurses4/terminfo/p/p8
+/usr/share/ncurses4/terminfo/p/p8-w
+/usr/share/ncurses4/terminfo/p/p8gl
+/usr/share/ncurses4/terminfo/p/p9
+/usr/share/ncurses4/terminfo/p/p9-8
+/usr/share/ncurses4/terminfo/p/p9-8-w
+/usr/share/ncurses4/terminfo/p/p9-w
+/usr/share/ncurses4/terminfo/p/pc-coherent
+/usr/share/ncurses4/terminfo/p/pc-minix
+/usr/share/ncurses4/terminfo/p/pc-venix
+/usr/share/ncurses4/terminfo/p/pc3
+/usr/share/ncurses4/terminfo/p/pc3-bold
+/usr/share/ncurses4/terminfo/p/pc3r
+/usr/share/ncurses4/terminfo/p/pc3r-m
+/usr/share/ncurses4/terminfo/p/pc6300plus
+/usr/share/ncurses4/terminfo/p/pc7300
+/usr/share/ncurses4/terminfo/p/pcansi
+/usr/share/ncurses4/terminfo/p/pcansi-25
+/usr/share/ncurses4/terminfo/p/pcansi-25-m
+/usr/share/ncurses4/terminfo/p/pcansi-33
+/usr/share/ncurses4/terminfo/p/pcansi-33-m
+/usr/share/ncurses4/terminfo/p/pcansi-43
+/usr/share/ncurses4/terminfo/p/pcansi-43-m
+/usr/share/ncurses4/terminfo/p/pcansi-m
+/usr/share/ncurses4/terminfo/p/pcansi-mono
+/usr/share/ncurses4/terminfo/p/pcansi25
+/usr/share/ncurses4/terminfo/p/pcansi25m
+/usr/share/ncurses4/terminfo/p/pcansi33
+/usr/share/ncurses4/terminfo/p/pcansi33m
+/usr/share/ncurses4/terminfo/p/pcansi43
+/usr/share/ncurses4/terminfo/p/pccons
+/usr/share/ncurses4/terminfo/p/pcconsole
+/usr/share/ncurses4/terminfo/p/pcix
+/usr/share/ncurses4/terminfo/p/pckermit
+/usr/share/ncurses4/terminfo/p/pckermit12
+/usr/share/ncurses4/terminfo/p/pckermit120
+/usr/share/ncurses4/terminfo/p/pcplot
+/usr/share/ncurses4/terminfo/p/pcvt25
+/usr/share/ncurses4/terminfo/p/pcvt25w
+/usr/share/ncurses4/terminfo/p/pcvt28
+/usr/share/ncurses4/terminfo/p/pcvt28w
+/usr/share/ncurses4/terminfo/p/pcvt35
+/usr/share/ncurses4/terminfo/p/pcvt35w
+/usr/share/ncurses4/terminfo/p/pcvt40
+/usr/share/ncurses4/terminfo/p/pcvt40w
+/usr/share/ncurses4/terminfo/p/pcvt43
+/usr/share/ncurses4/terminfo/p/pcvt43w
+/usr/share/ncurses4/terminfo/p/pcvt50
+/usr/share/ncurses4/terminfo/p/pcvt50w
+/usr/share/ncurses4/terminfo/p/pcvtXX
+/usr/share/ncurses4/terminfo/p/pcz19
+/usr/share/ncurses4/terminfo/p/pe1100
+/usr/share/ncurses4/terminfo/p/pe1200
+/usr/share/ncurses4/terminfo/p/pe1251
+/usr/share/ncurses4/terminfo/p/pe550
+/usr/share/ncurses4/terminfo/p/pe6100
+/usr/share/ncurses4/terminfo/p/pe6300
+/usr/share/ncurses4/terminfo/p/pe6312
+/usr/share/ncurses4/terminfo/p/pe7000c
+/usr/share/ncurses4/terminfo/p/pe7000m
+/usr/share/ncurses4/terminfo/p/pilot
+/usr/share/ncurses4/terminfo/p/printer
+/usr/share/ncurses4/terminfo/p/prism12
+/usr/share/ncurses4/terminfo/p/prism12-m
+/usr/share/ncurses4/terminfo/p/prism12-m-w
+/usr/share/ncurses4/terminfo/p/prism12-w
+/usr/share/ncurses4/terminfo/p/prism14
+/usr/share/ncurses4/terminfo/p/prism14-m
+/usr/share/ncurses4/terminfo/p/prism14-m-w
+/usr/share/ncurses4/terminfo/p/prism14-w
+/usr/share/ncurses4/terminfo/p/prism2
+/usr/share/ncurses4/terminfo/p/prism4
+/usr/share/ncurses4/terminfo/p/prism5
+/usr/share/ncurses4/terminfo/p/prism7
+/usr/share/ncurses4/terminfo/p/prism8
+/usr/share/ncurses4/terminfo/p/prism8-w
+/usr/share/ncurses4/terminfo/p/prism8gl
+/usr/share/ncurses4/terminfo/p/prism9
+/usr/share/ncurses4/terminfo/p/prism9-8
+/usr/share/ncurses4/terminfo/p/prism9-8-w
+/usr/share/ncurses4/terminfo/p/prism9-w
+/usr/share/ncurses4/terminfo/p/pro350
+/usr/share/ncurses4/terminfo/p/ps300
+/usr/share/ncurses4/terminfo/p/psterm
+/usr/share/ncurses4/terminfo/p/psterm-80x24
+/usr/share/ncurses4/terminfo/p/psterm-90x28
+/usr/share/ncurses4/terminfo/p/psterm-96x48
+/usr/share/ncurses4/terminfo/p/psterm-basic
+/usr/share/ncurses4/terminfo/p/psterm-fast
+/usr/share/ncurses4/terminfo/p/psx_ansi
+/usr/share/ncurses4/terminfo/p/pt100
+/usr/share/ncurses4/terminfo/p/pt100w
+/usr/share/ncurses4/terminfo/p/pt200
+/usr/share/ncurses4/terminfo/p/pt200w
+/usr/share/ncurses4/terminfo/p/pt210
+/usr/share/ncurses4/terminfo/p/pt250
+/usr/share/ncurses4/terminfo/p/pt250w
+/usr/share/ncurses4/terminfo/p/pt505
+/usr/share/ncurses4/terminfo/p/pt505-22
+/usr/share/ncurses4/terminfo/p/pt505-24
+/usr/share/ncurses4/terminfo/p/pty
+/usr/share/ncurses4/terminfo/q
+/usr/share/ncurses4/terminfo/q/qdcons
+/usr/share/ncurses4/terminfo/q/qdss
+/usr/share/ncurses4/terminfo/q/qnx
+/usr/share/ncurses4/terminfo/q/qnx4
+/usr/share/ncurses4/terminfo/q/qume
+/usr/share/ncurses4/terminfo/q/qume5
+/usr/share/ncurses4/terminfo/q/qvt101
+/usr/share/ncurses4/terminfo/q/qvt101+
+/usr/share/ncurses4/terminfo/q/qvt101p
+/usr/share/ncurses4/terminfo/q/qvt102
+/usr/share/ncurses4/terminfo/q/qvt103
+/usr/share/ncurses4/terminfo/q/qvt103-w
+/usr/share/ncurses4/terminfo/q/qvt108
+/usr/share/ncurses4/terminfo/q/qvt119
+/usr/share/ncurses4/terminfo/q/qvt119+
+/usr/share/ncurses4/terminfo/q/qvt119+-25
+/usr/share/ncurses4/terminfo/q/qvt119+-25-w
+/usr/share/ncurses4/terminfo/q/qvt119+-w
+/usr/share/ncurses4/terminfo/q/qvt119-25-w
+/usr/share/ncurses4/terminfo/q/qvt119-w
+/usr/share/ncurses4/terminfo/q/qvt119p
+/usr/share/ncurses4/terminfo/q/qvt119p-25
+/usr/share/ncurses4/terminfo/q/qvt119p-25-w
+/usr/share/ncurses4/terminfo/q/qvt119p-w
+/usr/share/ncurses4/terminfo/q/qvt203
+/usr/share/ncurses4/terminfo/q/qvt203+
+/usr/share/ncurses4/terminfo/q/qvt203-25
+/usr/share/ncurses4/terminfo/q/qvt203-25-w
+/usr/share/ncurses4/terminfo/q/qvt203-w
+/usr/share/ncurses4/terminfo/q/qvt203-w-am
+/usr/share/ncurses4/terminfo/r
+/usr/share/ncurses4/terminfo/r/rbcomm
+/usr/share/ncurses4/terminfo/r/rbcomm-nam
+/usr/share/ncurses4/terminfo/r/rbcomm-w
+/usr/share/ncurses4/terminfo/r/rca
+/usr/share/ncurses4/terminfo/r/rebus3180
+/usr/share/ncurses4/terminfo/r/regent
+/usr/share/ncurses4/terminfo/r/regent100
+/usr/share/ncurses4/terminfo/r/regent20
+/usr/share/ncurses4/terminfo/r/regent200
+/usr/share/ncurses4/terminfo/r/regent25
+/usr/share/ncurses4/terminfo/r/regent40
+/usr/share/ncurses4/terminfo/r/regent40+
+/usr/share/ncurses4/terminfo/r/regent60
+/usr/share/ncurses4/terminfo/r/rt6221
+/usr/share/ncurses4/terminfo/r/rt6221-w
+/usr/share/ncurses4/terminfo/r/rtpc
+/usr/share/ncurses4/terminfo/r/rxvt
+/usr/share/ncurses4/terminfo/r/rxvt-basic
+/usr/share/ncurses4/terminfo/s
+/usr/share/ncurses4/terminfo/s/s
+/usr/share/ncurses4/terminfo/s/s4
+/usr/share/ncurses4/terminfo/s/sb1
+/usr/share/ncurses4/terminfo/s/sb2
+/usr/share/ncurses4/terminfo/s/sb3
+/usr/share/ncurses4/terminfo/s/sbi
+/usr/share/ncurses4/terminfo/s/sbobcat
+/usr/share/ncurses4/terminfo/s/sc410
+/usr/share/ncurses4/terminfo/s/sc415
+/usr/share/ncurses4/terminfo/s/scanset
+/usr/share/ncurses4/terminfo/s/scoansi
+/usr/share/ncurses4/terminfo/s/screen
+/usr/share/ncurses4/terminfo/s/screen-w
+/usr/share/ncurses4/terminfo/s/screen2
+/usr/share/ncurses4/terminfo/s/screen3
+/usr/share/ncurses4/terminfo/s/screwpoint
+/usr/share/ncurses4/terminfo/s/scrhp
+/usr/share/ncurses4/terminfo/s/simterm
+/usr/share/ncurses4/terminfo/s/soroc
+/usr/share/ncurses4/terminfo/s/soroc120
+/usr/share/ncurses4/terminfo/s/soroc140
+/usr/share/ncurses4/terminfo/s/spinwriter
+/usr/share/ncurses4/terminfo/s/st52
+/usr/share/ncurses4/terminfo/s/sun
+/usr/share/ncurses4/terminfo/s/sun-1
+/usr/share/ncurses4/terminfo/s/sun-12
+/usr/share/ncurses4/terminfo/s/sun-17
+/usr/share/ncurses4/terminfo/s/sun-24
+/usr/share/ncurses4/terminfo/s/sun-34
+/usr/share/ncurses4/terminfo/s/sun-48
+/usr/share/ncurses4/terminfo/s/sun-c
+/usr/share/ncurses4/terminfo/s/sun-cmd
+/usr/share/ncurses4/terminfo/s/sun-e
+/usr/share/ncurses4/terminfo/s/sun-e-s
+/usr/share/ncurses4/terminfo/s/sun-il
+/usr/share/ncurses4/terminfo/s/sun-nic
+/usr/share/ncurses4/terminfo/s/sun-s
+/usr/share/ncurses4/terminfo/s/sun-s-e
+/usr/share/ncurses4/terminfo/s/sun-ss5
+/usr/share/ncurses4/terminfo/s/sun1
+/usr/share/ncurses4/terminfo/s/sun2
+/usr/share/ncurses4/terminfo/s/sune
+/usr/share/ncurses4/terminfo/s/superbee
+/usr/share/ncurses4/terminfo/s/superbee-xsb
+/usr/share/ncurses4/terminfo/s/superbeeic
+/usr/share/ncurses4/terminfo/s/superbrain
+/usr/share/ncurses4/terminfo/s/sv80
+/usr/share/ncurses4/terminfo/s/swtp
+/usr/share/ncurses4/terminfo/s/synertek
+/usr/share/ncurses4/terminfo/s/synertek380
+/usr/share/ncurses4/terminfo/s/system1
+/usr/share/ncurses4/terminfo/t
+/usr/share/ncurses4/terminfo/t/t10
+/usr/share/ncurses4/terminfo/t/t1061
+/usr/share/ncurses4/terminfo/t/t1061f
+/usr/share/ncurses4/terminfo/t/t16
+/usr/share/ncurses4/terminfo/t/t3700
+/usr/share/ncurses4/terminfo/t/t3800
+/usr/share/ncurses4/terminfo/t/t653x
+/usr/share/ncurses4/terminfo/t/tab
+/usr/share/ncurses4/terminfo/t/tab132
+/usr/share/ncurses4/terminfo/t/tab132-15
+/usr/share/ncurses4/terminfo/t/tab132-rv
+/usr/share/ncurses4/terminfo/t/tab132-w
+/usr/share/ncurses4/terminfo/t/tab132-w-rv
+/usr/share/ncurses4/terminfo/t/tandem6510
+/usr/share/ncurses4/terminfo/t/tandem653
+/usr/share/ncurses4/terminfo/t/tek
+/usr/share/ncurses4/terminfo/t/tek4012
+/usr/share/ncurses4/terminfo/t/tek4013
+/usr/share/ncurses4/terminfo/t/tek4014
+/usr/share/ncurses4/terminfo/t/tek4014-sm
+/usr/share/ncurses4/terminfo/t/tek4015
+/usr/share/ncurses4/terminfo/t/tek4015-sm
+/usr/share/ncurses4/terminfo/t/tek4023
+/usr/share/ncurses4/terminfo/t/tek4024
+/usr/share/ncurses4/terminfo/t/tek4025
+/usr/share/ncurses4/terminfo/t/tek4025-17
+/usr/share/ncurses4/terminfo/t/tek4025-17-ws
+/usr/share/ncurses4/terminfo/t/tek4025-cr
+/usr/share/ncurses4/terminfo/t/tek4025-ex
+/usr/share/ncurses4/terminfo/t/tek4025a
+/usr/share/ncurses4/terminfo/t/tek4025ex
+/usr/share/ncurses4/terminfo/t/tek4027
+/usr/share/ncurses4/terminfo/t/tek4027-ex
+/usr/share/ncurses4/terminfo/t/tek4105
+/usr/share/ncurses4/terminfo/t/tek4105-30
+/usr/share/ncurses4/terminfo/t/tek4105a
+/usr/share/ncurses4/terminfo/t/tek4106brl
+/usr/share/ncurses4/terminfo/t/tek4107
+/usr/share/ncurses4/terminfo/t/tek4107brl
+/usr/share/ncurses4/terminfo/t/tek4109
+/usr/share/ncurses4/terminfo/t/tek4109brl
+/usr/share/ncurses4/terminfo/t/tek4112
+/usr/share/ncurses4/terminfo/t/tek4112-5
+/usr/share/ncurses4/terminfo/t/tek4112-nd
+/usr/share/ncurses4/terminfo/t/tek4113
+/usr/share/ncurses4/terminfo/t/tek4113-34
+/usr/share/ncurses4/terminfo/t/tek4113-nd
+/usr/share/ncurses4/terminfo/t/tek4114
+/usr/share/ncurses4/terminfo/t/tek4115
+/usr/share/ncurses4/terminfo/t/tek4125
+/usr/share/ncurses4/terminfo/t/tek4205
+/usr/share/ncurses4/terminfo/t/tek4207
+/usr/share/ncurses4/terminfo/t/tek4207-s
+/usr/share/ncurses4/terminfo/t/tek4404
+/usr/share/ncurses4/terminfo/t/teleray
+/usr/share/ncurses4/terminfo/t/teletec
+/usr/share/ncurses4/terminfo/t/terminet
+/usr/share/ncurses4/terminfo/t/terminet1200
+/usr/share/ncurses4/terminfo/t/terminet300
+/usr/share/ncurses4/terminfo/t/tgtelnet
+/usr/share/ncurses4/terminfo/t/ti700
+/usr/share/ncurses4/terminfo/t/ti733
+/usr/share/ncurses4/terminfo/t/ti735
+/usr/share/ncurses4/terminfo/t/ti745
+/usr/share/ncurses4/terminfo/t/ti800
+/usr/share/ncurses4/terminfo/t/ti916
+/usr/share/ncurses4/terminfo/t/ti916-132
+/usr/share/ncurses4/terminfo/t/ti916-220-7
+/usr/share/ncurses4/terminfo/t/ti916-220-8
+/usr/share/ncurses4/terminfo/t/ti916-8
+/usr/share/ncurses4/terminfo/t/ti916-8-132
+/usr/share/ncurses4/terminfo/t/ti924
+/usr/share/ncurses4/terminfo/t/ti924-8
+/usr/share/ncurses4/terminfo/t/ti924-8w
+/usr/share/ncurses4/terminfo/t/ti924w
+/usr/share/ncurses4/terminfo/t/ti926
+/usr/share/ncurses4/terminfo/t/ti926-8
+/usr/share/ncurses4/terminfo/t/ti928
+/usr/share/ncurses4/terminfo/t/ti928-8
+/usr/share/ncurses4/terminfo/t/ti931
+/usr/share/ncurses4/terminfo/t/ti_ansi
+/usr/share/ncurses4/terminfo/t/tn1200
+/usr/share/ncurses4/terminfo/t/tn300
+/usr/share/ncurses4/terminfo/t/trs16
+/usr/share/ncurses4/terminfo/t/trs2
+/usr/share/ncurses4/terminfo/t/trs80II
+/usr/share/ncurses4/terminfo/t/trsII
+/usr/share/ncurses4/terminfo/t/ts-1
+/usr/share/ncurses4/terminfo/t/ts-1p
+/usr/share/ncurses4/terminfo/t/ts1
+/usr/share/ncurses4/terminfo/t/ts100
+/usr/share/ncurses4/terminfo/t/ts100-ctxt
+/usr/share/ncurses4/terminfo/t/ts100-sp
+/usr/share/ncurses4/terminfo/t/ts1p
+/usr/share/ncurses4/terminfo/t/tt505-22
+/usr/share/ncurses4/terminfo/t/tty33
+/usr/share/ncurses4/terminfo/t/tty35
+/usr/share/ncurses4/terminfo/t/tty37
+/usr/share/ncurses4/terminfo/t/tty40
+/usr/share/ncurses4/terminfo/t/tty43
+/usr/share/ncurses4/terminfo/t/tty4420
+/usr/share/ncurses4/terminfo/t/tty4424
+/usr/share/ncurses4/terminfo/t/tty4424-1
+/usr/share/ncurses4/terminfo/t/tty4424m
+/usr/share/ncurses4/terminfo/t/tty4426
+/usr/share/ncurses4/terminfo/t/tty5410
+/usr/share/ncurses4/terminfo/t/tty5410-w
+/usr/share/ncurses4/terminfo/t/tty5410v1
+/usr/share/ncurses4/terminfo/t/tty5410v1-w
+/usr/share/ncurses4/terminfo/t/tty5420
+/usr/share/ncurses4/terminfo/t/tty5420+nl
+/usr/share/ncurses4/terminfo/t/tty5420-nl
+/usr/share/ncurses4/terminfo/t/tty5420-rv
+/usr/share/ncurses4/terminfo/t/tty5420-rv-nl
+/usr/share/ncurses4/terminfo/t/tty5420-w
+/usr/share/ncurses4/terminfo/t/tty5420-w-nl
+/usr/share/ncurses4/terminfo/t/tty5420-w-rv
+/usr/share/ncurses4/terminfo/t/tty5420-w-rv-n
+/usr/share/ncurses4/terminfo/t/tty5425
+/usr/share/ncurses4/terminfo/t/tty5425-nl
+/usr/share/ncurses4/terminfo/t/tty5425-w
+/usr/share/ncurses4/terminfo/t/tty5620
+/usr/share/ncurses4/terminfo/t/tty5620-1
+/usr/share/ncurses4/terminfo/t/tty5620-24
+/usr/share/ncurses4/terminfo/t/tty5620-34
+/usr/share/ncurses4/terminfo/t/tty5620-s
+/usr/share/ncurses4/terminfo/t/ttydmd
+/usr/share/ncurses4/terminfo/t/tvi-2p
+/usr/share/ncurses4/terminfo/t/tvi803
+/usr/share/ncurses4/terminfo/t/tvi9065
+/usr/share/ncurses4/terminfo/t/tvi910
+/usr/share/ncurses4/terminfo/t/tvi910+
+/usr/share/ncurses4/terminfo/t/tvi912
+/usr/share/ncurses4/terminfo/t/tvi912-2p
+/usr/share/ncurses4/terminfo/t/tvi912b
+/usr/share/ncurses4/terminfo/t/tvi912c
+/usr/share/ncurses4/terminfo/t/tvi912cc
+/usr/share/ncurses4/terminfo/t/tvi914
+/usr/share/ncurses4/terminfo/t/tvi920
+/usr/share/ncurses4/terminfo/t/tvi920-2p
+/usr/share/ncurses4/terminfo/t/tvi920b
+/usr/share/ncurses4/terminfo/t/tvi920c
+/usr/share/ncurses4/terminfo/t/tvi921
+/usr/share/ncurses4/terminfo/t/tvi924
+/usr/share/ncurses4/terminfo/t/tvi925
+/usr/share/ncurses4/terminfo/t/tvi925-hi
+/usr/share/ncurses4/terminfo/t/tvi92B
+/usr/share/ncurses4/terminfo/t/tvi92D
+/usr/share/ncurses4/terminfo/t/tvi950
+/usr/share/ncurses4/terminfo/t/tvi950-2p
+/usr/share/ncurses4/terminfo/t/tvi950-4p
+/usr/share/ncurses4/terminfo/t/tvi950-rv
+/usr/share/ncurses4/terminfo/t/tvi950-rv-2p
+/usr/share/ncurses4/terminfo/t/tvi950-rv-4p
+/usr/share/ncurses4/terminfo/t/tvi955
+/usr/share/ncurses4/terminfo/t/tvi955-hb
+/usr/share/ncurses4/terminfo/t/tvi955-w
+/usr/share/ncurses4/terminfo/t/tvi970
+/usr/share/ncurses4/terminfo/t/tvi970-2p
+/usr/share/ncurses4/terminfo/t/tvi970-vb
+/usr/share/ncurses4/terminfo/t/tvipt
+/usr/share/ncurses4/terminfo/u
+/usr/share/ncurses4/terminfo/u/ultima2
+/usr/share/ncurses4/terminfo/u/ultimaII
+/usr/share/ncurses4/terminfo/u/uniterm
+/usr/share/ncurses4/terminfo/u/uniterm49
+/usr/share/ncurses4/terminfo/u/unixpc
+/usr/share/ncurses4/terminfo/u/unknown
+/usr/share/ncurses4/terminfo/u/uts30
+/usr/share/ncurses4/terminfo/v
+/usr/share/ncurses4/terminfo/v/v200-nam
+/usr/share/ncurses4/terminfo/v/v320n
+/usr/share/ncurses4/terminfo/v/v3220
+/usr/share/ncurses4/terminfo/v/v5410
+/usr/share/ncurses4/terminfo/v/vapple
+/usr/share/ncurses4/terminfo/v/vc103
+/usr/share/ncurses4/terminfo/v/vc203
+/usr/share/ncurses4/terminfo/v/vc303
+/usr/share/ncurses4/terminfo/v/vc303a
+/usr/share/ncurses4/terminfo/v/vc403a
+/usr/share/ncurses4/terminfo/v/vc404
+/usr/share/ncurses4/terminfo/v/vc404-s
+/usr/share/ncurses4/terminfo/v/vc414
+/usr/share/ncurses4/terminfo/v/vc414h
+/usr/share/ncurses4/terminfo/v/vc415
+/usr/share/ncurses4/terminfo/v/venix
+/usr/share/ncurses4/terminfo/v/versaterm
+/usr/share/ncurses4/terminfo/v/vi200
+/usr/share/ncurses4/terminfo/v/vi200-f
+/usr/share/ncurses4/terminfo/v/vi200-rv
+/usr/share/ncurses4/terminfo/v/vi300
+/usr/share/ncurses4/terminfo/v/vi300-old
+/usr/share/ncurses4/terminfo/v/vi50
+/usr/share/ncurses4/terminfo/v/vi500
+/usr/share/ncurses4/terminfo/v/vi50adm
+/usr/share/ncurses4/terminfo/v/vi55
+/usr/share/ncurses4/terminfo/v/vi550
+/usr/share/ncurses4/terminfo/v/vi603
+/usr/share/ncurses4/terminfo/v/viewpoint
+/usr/share/ncurses4/terminfo/v/viewpoint3a+
+/usr/share/ncurses4/terminfo/v/viewpoint60
+/usr/share/ncurses4/terminfo/v/viewpoint90
+/usr/share/ncurses4/terminfo/v/visa50
+/usr/share/ncurses4/terminfo/v/visual603
+/usr/share/ncurses4/terminfo/v/vitty
+/usr/share/ncurses4/terminfo/v/vk100
+/usr/share/ncurses4/terminfo/v/vp3a+
+/usr/share/ncurses4/terminfo/v/vp60
+/usr/share/ncurses4/terminfo/v/vp90
+/usr/share/ncurses4/terminfo/v/vremote
+/usr/share/ncurses4/terminfo/v/vs100
+/usr/share/ncurses4/terminfo/v/vs100-x10
+/usr/share/ncurses4/terminfo/v/vsc
+/usr/share/ncurses4/terminfo/v/vt-61
+/usr/share/ncurses4/terminfo/v/vt100
+/usr/share/ncurses4/terminfo/v/vt100-am
+/usr/share/ncurses4/terminfo/v/vt100-bm
+/usr/share/ncurses4/terminfo/v/vt100-bm-o
+/usr/share/ncurses4/terminfo/v/vt100-bot-s
+/usr/share/ncurses4/terminfo/v/vt100-nam
+/usr/share/ncurses4/terminfo/v/vt100-nam-w
+/usr/share/ncurses4/terminfo/v/vt100-nav
+/usr/share/ncurses4/terminfo/v/vt100-nav-w
+/usr/share/ncurses4/terminfo/v/vt100-s
+/usr/share/ncurses4/terminfo/v/vt100-s-bot
+/usr/share/ncurses4/terminfo/v/vt100-s-top
+/usr/share/ncurses4/terminfo/v/vt100-top-s
+/usr/share/ncurses4/terminfo/v/vt100-vb
+/usr/share/ncurses4/terminfo/v/vt100-w
+/usr/share/ncurses4/terminfo/v/vt100-w-am
+/usr/share/ncurses4/terminfo/v/vt100-w-nam
+/usr/share/ncurses4/terminfo/v/vt100-w-nav
+/usr/share/ncurses4/terminfo/v/vt100nam
+/usr/share/ncurses4/terminfo/v/vt102
+/usr/share/ncurses4/terminfo/v/vt102-nsgr
+/usr/share/ncurses4/terminfo/v/vt102-w
+/usr/share/ncurses4/terminfo/v/vt125
+/usr/share/ncurses4/terminfo/v/vt131
+/usr/share/ncurses4/terminfo/v/vt132
+/usr/share/ncurses4/terminfo/v/vt200
+/usr/share/ncurses4/terminfo/v/vt200-js
+/usr/share/ncurses4/terminfo/v/vt200-w
+/usr/share/ncurses4/terminfo/v/vt220
+/usr/share/ncurses4/terminfo/v/vt220-8
+/usr/share/ncurses4/terminfo/v/vt220-js
+/usr/share/ncurses4/terminfo/v/vt220-nam
+/usr/share/ncurses4/terminfo/v/vt220-w
+/usr/share/ncurses4/terminfo/v/vt220d
+/usr/share/ncurses4/terminfo/v/vt300
+/usr/share/ncurses4/terminfo/v/vt300-nam
+/usr/share/ncurses4/terminfo/v/vt300-w
+/usr/share/ncurses4/terminfo/v/vt300-w-nam
+/usr/share/ncurses4/terminfo/v/vt320
+/usr/share/ncurses4/terminfo/v/vt320-k3
+/usr/share/ncurses4/terminfo/v/vt320-k311
+/usr/share/ncurses4/terminfo/v/vt320-nam
+/usr/share/ncurses4/terminfo/v/vt320-w
+/usr/share/ncurses4/terminfo/v/vt320-w-nam
+/usr/share/ncurses4/terminfo/v/vt320nam
+/usr/share/ncurses4/terminfo/v/vt330
+/usr/share/ncurses4/terminfo/v/vt340
+/usr/share/ncurses4/terminfo/v/vt400
+/usr/share/ncurses4/terminfo/v/vt400-24
+/usr/share/ncurses4/terminfo/v/vt420
+/usr/share/ncurses4/terminfo/v/vt420f
+/usr/share/ncurses4/terminfo/v/vt420pc
+/usr/share/ncurses4/terminfo/v/vt420pcdos
+/usr/share/ncurses4/terminfo/v/vt50
+/usr/share/ncurses4/terminfo/v/vt50h
+/usr/share/ncurses4/terminfo/v/vt510
+/usr/share/ncurses4/terminfo/v/vt510pc
+/usr/share/ncurses4/terminfo/v/vt510pcdos
+/usr/share/ncurses4/terminfo/v/vt52
+/usr/share/ncurses4/terminfo/v/vt520
+/usr/share/ncurses4/terminfo/v/vt525
+/usr/share/ncurses4/terminfo/v/vt61
+/usr/share/ncurses4/terminfo/v/vt61.5
+/usr/share/ncurses4/terminfo/w
+/usr/share/ncurses4/terminfo/w/wren
+/usr/share/ncurses4/terminfo/w/wrenw
+/usr/share/ncurses4/terminfo/w/wsiris
+/usr/share/ncurses4/terminfo/w/wy-75ap
+/usr/share/ncurses4/terminfo/w/wy100
+/usr/share/ncurses4/terminfo/w/wy100q
+/usr/share/ncurses4/terminfo/w/wy120
+/usr/share/ncurses4/terminfo/w/wy120-25
+/usr/share/ncurses4/terminfo/w/wy120-25-w
+/usr/share/ncurses4/terminfo/w/wy120-vb
+/usr/share/ncurses4/terminfo/w/wy120-w
+/usr/share/ncurses4/terminfo/w/wy120-w-vb
+/usr/share/ncurses4/terminfo/w/wy120-wvb
+/usr/share/ncurses4/terminfo/w/wy150
+/usr/share/ncurses4/terminfo/w/wy150-25
+/usr/share/ncurses4/terminfo/w/wy150-25-w
+/usr/share/ncurses4/terminfo/w/wy150-vb
+/usr/share/ncurses4/terminfo/w/wy150-w
+/usr/share/ncurses4/terminfo/w/wy150-w-vb
+/usr/share/ncurses4/terminfo/w/wy160
+/usr/share/ncurses4/terminfo/w/wy160-25
+/usr/share/ncurses4/terminfo/w/wy160-25-w
+/usr/share/ncurses4/terminfo/w/wy160-42
+/usr/share/ncurses4/terminfo/w/wy160-42-w
+/usr/share/ncurses4/terminfo/w/wy160-43
+/usr/share/ncurses4/terminfo/w/wy160-43-w
+/usr/share/ncurses4/terminfo/w/wy160-tek
+/usr/share/ncurses4/terminfo/w/wy160-vb
+/usr/share/ncurses4/terminfo/w/wy160-w
+/usr/share/ncurses4/terminfo/w/wy160-w-vb
+/usr/share/ncurses4/terminfo/w/wy160-wvb
+/usr/share/ncurses4/terminfo/w/wy185
+/usr/share/ncurses4/terminfo/w/wy185-24
+/usr/share/ncurses4/terminfo/w/wy185-vb
+/usr/share/ncurses4/terminfo/w/wy185-w
+/usr/share/ncurses4/terminfo/w/wy185-wvb
+/usr/share/ncurses4/terminfo/w/wy30
+/usr/share/ncurses4/terminfo/w/wy30-mc
+/usr/share/ncurses4/terminfo/w/wy30-vb
+/usr/share/ncurses4/terminfo/w/wy325
+/usr/share/ncurses4/terminfo/w/wy325-25
+/usr/share/ncurses4/terminfo/w/wy325-25w
+/usr/share/ncurses4/terminfo/w/wy325-42
+/usr/share/ncurses4/terminfo/w/wy325-42w
+/usr/share/ncurses4/terminfo/w/wy325-42w-vb
+/usr/share/ncurses4/terminfo/w/wy325-42wvb
+/usr/share/ncurses4/terminfo/w/wy325-43
+/usr/share/ncurses4/terminfo/w/wy325-43w
+/usr/share/ncurses4/terminfo/w/wy325-43w-vb
+/usr/share/ncurses4/terminfo/w/wy325-43wvb
+/usr/share/ncurses4/terminfo/w/wy325-80
+/usr/share/ncurses4/terminfo/w/wy325-vb
+/usr/share/ncurses4/terminfo/w/wy325-w
+/usr/share/ncurses4/terminfo/w/wy325-w-vb
+/usr/share/ncurses4/terminfo/w/wy325-wvb
+/usr/share/ncurses4/terminfo/w/wy325w-24
+/usr/share/ncurses4/terminfo/w/wy350
+/usr/share/ncurses4/terminfo/w/wy350-vb
+/usr/share/ncurses4/terminfo/w/wy350-w
+/usr/share/ncurses4/terminfo/w/wy350-wvb
+/usr/share/ncurses4/terminfo/w/wy370
+/usr/share/ncurses4/terminfo/w/wy370-101k
+/usr/share/ncurses4/terminfo/w/wy370-105k
+/usr/share/ncurses4/terminfo/w/wy370-EPC
+/usr/share/ncurses4/terminfo/w/wy370-nk
+/usr/share/ncurses4/terminfo/w/wy370-rv
+/usr/share/ncurses4/terminfo/w/wy370-tek
+/usr/share/ncurses4/terminfo/w/wy370-vb
+/usr/share/ncurses4/terminfo/w/wy370-w
+/usr/share/ncurses4/terminfo/w/wy370-wvb
+/usr/share/ncurses4/terminfo/w/wy50
+/usr/share/ncurses4/terminfo/w/wy50-mc
+/usr/share/ncurses4/terminfo/w/wy50-vb
+/usr/share/ncurses4/terminfo/w/wy50-w
+/usr/share/ncurses4/terminfo/w/wy50-wvb
+/usr/share/ncurses4/terminfo/w/wy520
+/usr/share/ncurses4/terminfo/w/wy520-24
+/usr/share/ncurses4/terminfo/w/wy520-36
+/usr/share/ncurses4/terminfo/w/wy520-36pc
+/usr/share/ncurses4/terminfo/w/wy520-36w
+/usr/share/ncurses4/terminfo/w/wy520-36wpc
+/usr/share/ncurses4/terminfo/w/wy520-48
+/usr/share/ncurses4/terminfo/w/wy520-48pc
+/usr/share/ncurses4/terminfo/w/wy520-48w
+/usr/share/ncurses4/terminfo/w/wy520-48wpc
+/usr/share/ncurses4/terminfo/w/wy520-epc
+/usr/share/ncurses4/terminfo/w/wy520-epc-24
+/usr/share/ncurses4/terminfo/w/wy520-epc-vb
+/usr/share/ncurses4/terminfo/w/wy520-epc-w
+/usr/share/ncurses4/terminfo/w/wy520-epc-wvb
+/usr/share/ncurses4/terminfo/w/wy520-vb
+/usr/share/ncurses4/terminfo/w/wy520-w
+/usr/share/ncurses4/terminfo/w/wy520-wvb
+/usr/share/ncurses4/terminfo/w/wy60
+/usr/share/ncurses4/terminfo/w/wy60-25
+/usr/share/ncurses4/terminfo/w/wy60-25-w
+/usr/share/ncurses4/terminfo/w/wy60-316X
+/usr/share/ncurses4/terminfo/w/wy60-42
+/usr/share/ncurses4/terminfo/w/wy60-42-w
+/usr/share/ncurses4/terminfo/w/wy60-43
+/usr/share/ncurses4/terminfo/w/wy60-43-w
+/usr/share/ncurses4/terminfo/w/wy60-vb
+/usr/share/ncurses4/terminfo/w/wy60-w
+/usr/share/ncurses4/terminfo/w/wy60-w-vb
+/usr/share/ncurses4/terminfo/w/wy60-wvb
+/usr/share/ncurses4/terminfo/w/wy75
+/usr/share/ncurses4/terminfo/w/wy75-mc
+/usr/share/ncurses4/terminfo/w/wy75-vb
+/usr/share/ncurses4/terminfo/w/wy75-w
+/usr/share/ncurses4/terminfo/w/wy75-wvb
+/usr/share/ncurses4/terminfo/w/wy75ap
+/usr/share/ncurses4/terminfo/w/wy85
+/usr/share/ncurses4/terminfo/w/wy85-vb
+/usr/share/ncurses4/terminfo/w/wy85-w
+/usr/share/ncurses4/terminfo/w/wy85-wvb
+/usr/share/ncurses4/terminfo/w/wy99gt
+/usr/share/ncurses4/terminfo/w/wy99gt-25
+/usr/share/ncurses4/terminfo/w/wy99gt-25-w
+/usr/share/ncurses4/terminfo/w/wy99gt-tek
+/usr/share/ncurses4/terminfo/w/wy99gt-vb
+/usr/share/ncurses4/terminfo/w/wy99gt-w
+/usr/share/ncurses4/terminfo/w/wy99gt-w-vb
+/usr/share/ncurses4/terminfo/w/wy99gt-wvb
+/usr/share/ncurses4/terminfo/w/wyse-325
+/usr/share/ncurses4/terminfo/w/wyse-75ap
+/usr/share/ncurses4/terminfo/w/wyse-vp
+/usr/share/ncurses4/terminfo/w/wyse120
+/usr/share/ncurses4/terminfo/w/wyse120-25
+/usr/share/ncurses4/terminfo/w/wyse120-25-w
+/usr/share/ncurses4/terminfo/w/wyse120-vb
+/usr/share/ncurses4/terminfo/w/wyse120-w
+/usr/share/ncurses4/terminfo/w/wyse120-wvb
+/usr/share/ncurses4/terminfo/w/wyse150
+/usr/share/ncurses4/terminfo/w/wyse150-25
+/usr/share/ncurses4/terminfo/w/wyse150-25-w
+/usr/share/ncurses4/terminfo/w/wyse150-vb
+/usr/share/ncurses4/terminfo/w/wyse150-w
+/usr/share/ncurses4/terminfo/w/wyse150-w-vb
+/usr/share/ncurses4/terminfo/w/wyse160
+/usr/share/ncurses4/terminfo/w/wyse160-25
+/usr/share/ncurses4/terminfo/w/wyse160-25-w
+/usr/share/ncurses4/terminfo/w/wyse160-42
+/usr/share/ncurses4/terminfo/w/wyse160-42-w
+/usr/share/ncurses4/terminfo/w/wyse160-43
+/usr/share/ncurses4/terminfo/w/wyse160-43-w
+/usr/share/ncurses4/terminfo/w/wyse160-vb
+/usr/share/ncurses4/terminfo/w/wyse160-w
+/usr/share/ncurses4/terminfo/w/wyse160-wvb
+/usr/share/ncurses4/terminfo/w/wyse185
+/usr/share/ncurses4/terminfo/w/wyse185-24
+/usr/share/ncurses4/terminfo/w/wyse185-vb
+/usr/share/ncurses4/terminfo/w/wyse185-w
+/usr/share/ncurses4/terminfo/w/wyse185-wvb
+/usr/share/ncurses4/terminfo/w/wyse30
+/usr/share/ncurses4/terminfo/w/wyse30-mc
+/usr/share/ncurses4/terminfo/w/wyse30-vb
+/usr/share/ncurses4/terminfo/w/wyse325
+/usr/share/ncurses4/terminfo/w/wyse325-25
+/usr/share/ncurses4/terminfo/w/wyse325-25w
+/usr/share/ncurses4/terminfo/w/wyse325-42
+/usr/share/ncurses4/terminfo/w/wyse325-42w
+/usr/share/ncurses4/terminfo/w/wyse325-43
+/usr/share/ncurses4/terminfo/w/wyse325-43w
+/usr/share/ncurses4/terminfo/w/wyse325-vb
+/usr/share/ncurses4/terminfo/w/wyse325-w
+/usr/share/ncurses4/terminfo/w/wyse325-wvb
+/usr/share/ncurses4/terminfo/w/wyse350
+/usr/share/ncurses4/terminfo/w/wyse350-vb
+/usr/share/ncurses4/terminfo/w/wyse350-w
+/usr/share/ncurses4/terminfo/w/wyse350-wvb
+/usr/share/ncurses4/terminfo/w/wyse370
+/usr/share/ncurses4/terminfo/w/wyse50
+/usr/share/ncurses4/terminfo/w/wyse50-mc
+/usr/share/ncurses4/terminfo/w/wyse50-vb
+/usr/share/ncurses4/terminfo/w/wyse50-w
+/usr/share/ncurses4/terminfo/w/wyse50-wvb
+/usr/share/ncurses4/terminfo/w/wyse520
+/usr/share/ncurses4/terminfo/w/wyse520-24
+/usr/share/ncurses4/terminfo/w/wyse520-36
+/usr/share/ncurses4/terminfo/w/wyse520-36pc
+/usr/share/ncurses4/terminfo/w/wyse520-36w
+/usr/share/ncurses4/terminfo/w/wyse520-36wpc
+/usr/share/ncurses4/terminfo/w/wyse520-48
+/usr/share/ncurses4/terminfo/w/wyse520-48pc
+/usr/share/ncurses4/terminfo/w/wyse520-48w
+/usr/share/ncurses4/terminfo/w/wyse520-48wpc
+/usr/share/ncurses4/terminfo/w/wyse520-epc
+/usr/share/ncurses4/terminfo/w/wyse520-epc-w
+/usr/share/ncurses4/terminfo/w/wyse520-p-wvb
+/usr/share/ncurses4/terminfo/w/wyse520-pc-24
+/usr/share/ncurses4/terminfo/w/wyse520-pc-vb
+/usr/share/ncurses4/terminfo/w/wyse520-vb
+/usr/share/ncurses4/terminfo/w/wyse520-w
+/usr/share/ncurses4/terminfo/w/wyse520-wvb
+/usr/share/ncurses4/terminfo/w/wyse60
+/usr/share/ncurses4/terminfo/w/wyse60-25
+/usr/share/ncurses4/terminfo/w/wyse60-25-w
+/usr/share/ncurses4/terminfo/w/wyse60-316X
+/usr/share/ncurses4/terminfo/w/wyse60-42
+/usr/share/ncurses4/terminfo/w/wyse60-42-w
+/usr/share/ncurses4/terminfo/w/wyse60-43
+/usr/share/ncurses4/terminfo/w/wyse60-43-w
+/usr/share/ncurses4/terminfo/w/wyse60-vb
+/usr/share/ncurses4/terminfo/w/wyse60-w
+/usr/share/ncurses4/terminfo/w/wyse60-wvb
+/usr/share/ncurses4/terminfo/w/wyse75
+/usr/share/ncurses4/terminfo/w/wyse75-mc
+/usr/share/ncurses4/terminfo/w/wyse75-vb
+/usr/share/ncurses4/terminfo/w/wyse75-w
+/usr/share/ncurses4/terminfo/w/wyse75-wvb
+/usr/share/ncurses4/terminfo/w/wyse75ap
+/usr/share/ncurses4/terminfo/w/wyse85
+/usr/share/ncurses4/terminfo/w/wyse85-vb
+/usr/share/ncurses4/terminfo/w/wyse85-w
+/usr/share/ncurses4/terminfo/w/wyse85-wvb
+/usr/share/ncurses4/terminfo/w/wyse99gt
+/usr/share/ncurses4/terminfo/w/wyse99gt-25
+/usr/share/ncurses4/terminfo/w/wyse99gt-25-w
+/usr/share/ncurses4/terminfo/w/wyse99gt-vb
+/usr/share/ncurses4/terminfo/w/wyse99gt-w
+/usr/share/ncurses4/terminfo/w/wyse99gt-wvb
+/usr/share/ncurses4/terminfo/x
+/usr/share/ncurses4/terminfo/x/x10term
+/usr/share/ncurses4/terminfo/x/x1700
+/usr/share/ncurses4/terminfo/x/x1700-lm
+/usr/share/ncurses4/terminfo/x/x1720
+/usr/share/ncurses4/terminfo/x/x1750
+/usr/share/ncurses4/terminfo/x/x68k
+/usr/share/ncurses4/terminfo/x/x68k-ite
+/usr/share/ncurses4/terminfo/x/x820
+/usr/share/ncurses4/terminfo/x/xenix
+/usr/share/ncurses4/terminfo/x/xerox
+/usr/share/ncurses4/terminfo/x/xerox-lm
+/usr/share/ncurses4/terminfo/x/xerox1720
+/usr/share/ncurses4/terminfo/x/xerox820
+/usr/share/ncurses4/terminfo/x/xl83
+/usr/share/ncurses4/terminfo/x/xtalk
+/usr/share/ncurses4/terminfo/x/xterm
+/usr/share/ncurses4/terminfo/x/xterm+sl
+/usr/share/ncurses4/terminfo/x/xterm+sl-twm
+/usr/share/ncurses4/terminfo/x/xterm-16color
+/usr/share/ncurses4/terminfo/x/xterm-8bit
+/usr/share/ncurses4/terminfo/x/xterm-bold
+/usr/share/ncurses4/terminfo/x/xterm-nic
+/usr/share/ncurses4/terminfo/x/xterm-old
+/usr/share/ncurses4/terminfo/x/xterm-pcolor
+/usr/share/ncurses4/terminfo/x/xterm-r5
+/usr/share/ncurses4/terminfo/x/xterm-r6
+/usr/share/ncurses4/terminfo/x/xterm-sun
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v32
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v33
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v40
+/usr/share/ncurses4/terminfo/x/xterm-xi
+/usr/share/ncurses4/terminfo/x/xterm1
+/usr/share/ncurses4/terminfo/x/xterms
+/usr/share/ncurses4/terminfo/x/xterms-sun
+/usr/share/ncurses4/terminfo/x/xwsh
+/usr/share/ncurses4/terminfo/z
+/usr/share/ncurses4/terminfo/z/z-100
+/usr/share/ncurses4/terminfo/z/z-100bw
+/usr/share/ncurses4/terminfo/z/z100
+/usr/share/ncurses4/terminfo/z/z100bw
+/usr/share/ncurses4/terminfo/z/z110
+/usr/share/ncurses4/terminfo/z/z110bw
+/usr/share/ncurses4/terminfo/z/z19
+/usr/share/ncurses4/terminfo/z/z29
+/usr/share/ncurses4/terminfo/z/z29a
+/usr/share/ncurses4/terminfo/z/z29a-kc-bc
+/usr/share/ncurses4/terminfo/z/z29a-kc-uc
+/usr/share/ncurses4/terminfo/z/z29a-nkc-bc
+/usr/share/ncurses4/terminfo/z/z29a-nkc-uc
+/usr/share/ncurses4/terminfo/z/z29b
+/usr/share/ncurses4/terminfo/z/z30
+/usr/share/ncurses4/terminfo/z/z340
+/usr/share/ncurses4/terminfo/z/z340-nam
+/usr/share/ncurses4/terminfo/z/z39-a
+/usr/share/ncurses4/terminfo/z/z39a
+/usr/share/ncurses4/terminfo/z/z50
+/usr/share/ncurses4/terminfo/z/z8001
+/usr/share/ncurses4/terminfo/z/zen30
+/usr/share/ncurses4/terminfo/z/zen50
+/usr/share/ncurses4/terminfo/z/zen8001
+/usr/share/ncurses4/terminfo/z/zenith
+/usr/share/ncurses4/terminfo/z/zenith29
+/usr/share/ncurses4/terminfo/z/zenith39-a
+/usr/share/ncurses4/terminfo/z/zenith39-ansi
+/usr/share/ncurses4/terminfo/z/zt-1
+/usr/share/ncurses4/terminfo/z/ztx
+/usr/share/ncurses4/terminfo/z/ztx-1-a
+/usr/share/ncurses4/terminfo/z/ztx11
+</RPM:Files>
+ </RDF:Description>
+</RDF:RDF>
diff --git a/result/noent/slashdot.rdf b/result/noent/slashdot.rdf
new file mode 100644
index 0000000..33008ab
--- /dev/null
+++ b/result/noent/slashdot.rdf
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">
+
+ <channel>
+ <title>Slashdot:News for Nerds. Stuff that Matters.</title>
+ <link>http://slashdot.org/</link>
+ <description>News for Nerds. Stuff that Matters</description>
+ </channel>
+
+ <image>
+ <title>Slashdot</title>
+ <url>http://slashdot.org/images/slashdotlg.gif</url>
+ <link>http://slashdot.org</link>
+ </image>
+
+ <item>
+ <title>100 Mbit/s on Fibre to the home</title>
+ <link>http://slashdot.org/articles/99/06/06/1440211.shtml</link>
+ </item>
+
+ <item>
+ <title>Gimp 1.2 Preview</title>
+ <link>http://slashdot.org/articles/99/06/06/1438246.shtml</link>
+ </item>
+
+ <item>
+ <title>Sony's AIBO robot Sold Out</title>
+ <link>http://slashdot.org/articles/99/06/06/1432256.shtml</link>
+ </item>
+
+ <item>
+ <title>Ask Slashdot: Another Word for "Hacker"?</title>
+ <link>http://slashdot.org/askslashdot/99/06/05/1815225.shtml</link>
+ </item>
+
+ <item>
+ <title>Corel Linux FAQ</title>
+ <link>http://slashdot.org/articles/99/06/05/1842218.shtml</link>
+ </item>
+
+ <item>
+ <title>Upside downsides MP3.COM.</title>
+ <link>http://slashdot.org/articles/99/06/05/1558210.shtml</link>
+ </item>
+
+ <item>
+ <title>2 Terabits of Bandwidth</title>
+ <link>http://slashdot.org/articles/99/06/05/1554258.shtml</link>
+ </item>
+
+ <item>
+ <title>Suppression of cold fusion research?</title>
+ <link>http://slashdot.org/articles/99/06/04/2313200.shtml</link>
+ </item>
+
+ <item>
+ <title>California Gov. Halts Wage Info Sale</title>
+ <link>http://slashdot.org/articles/99/06/04/235256.shtml</link>
+ </item>
+
+ <item>
+ <title>Red Hat Announces IPO</title>
+ <link>http://slashdot.org/articles/99/06/04/0849207.shtml</link>
+ </item>
+</rdf:RDF>
diff --git a/result/noent/slashdot.xml b/result/noent/slashdot.xml
new file mode 100644
index 0000000..b648d5e
--- /dev/null
+++ b/result/noent/slashdot.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<ultramode>
+ <story>
+ <title>100 Mbit/s on Fibre to the home</title>
+ <url>http://slashdot.org/articles/99/06/06/1440211.shtml</url>
+ <time>1999-06-06 14:39:59</time>
+ <author>CmdrTaco</author>
+ <department>wouldn't-it-be-nice</department>
+ <topic>internet</topic>
+ <comments>20</comments>
+ <section>articles</section>
+ <image>topicinternet.jpg</image>
+ </story>
+ <story>
+ <title>Gimp 1.2 Preview</title>
+ <url>http://slashdot.org/articles/99/06/06/1438246.shtml</url>
+ <time>1999-06-06 14:38:40</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-read</department>
+ <topic>gimp</topic>
+ <comments>12</comments>
+ <section>articles</section>
+ <image>topicgimp.gif</image>
+ </story>
+ <story>
+ <title>Sony's AIBO robot Sold Out</title>
+ <url>http://slashdot.org/articles/99/06/06/1432256.shtml</url>
+ <time>1999-06-06 14:32:51</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-see</department>
+ <topic>tech</topic>
+ <comments>10</comments>
+ <section>articles</section>
+ <image>topictech2.jpg</image>
+ </story>
+ <story>
+ <title>Ask Slashdot: Another Word for "Hacker"?</title>
+ <url>http://slashdot.org/askslashdot/99/06/05/1815225.shtml</url>
+ <time>1999-06-05 20:00:00</time>
+ <author>Cliff</author>
+ <department>hacker-vs-cracker</department>
+ <topic>news</topic>
+ <comments>385</comments>
+ <section>askslashdot</section>
+ <image>topicnews.gif</image>
+ </story>
+ <story>
+ <title>Corel Linux FAQ</title>
+ <url>http://slashdot.org/articles/99/06/05/1842218.shtml</url>
+ <time>1999-06-05 18:42:06</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-read</department>
+ <topic>corel</topic>
+ <comments>164</comments>
+ <section>articles</section>
+ <image>topiccorel.gif</image>
+ </story>
+ <story>
+ <title>Upside downsides MP3.COM.</title>
+ <url>http://slashdot.org/articles/99/06/05/1558210.shtml</url>
+ <time>1999-06-05 15:56:45</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-think-about</department>
+ <topic>music</topic>
+ <comments>48</comments>
+ <section>articles</section>
+ <image>topicmusic.gif</image>
+ </story>
+ <story>
+ <title>2 Terabits of Bandwidth</title>
+ <url>http://slashdot.org/articles/99/06/05/1554258.shtml</url>
+ <time>1999-06-05 15:53:43</time>
+ <author>CmdrTaco</author>
+ <department>faster-porn</department>
+ <topic>internet</topic>
+ <comments>66</comments>
+ <section>articles</section>
+ <image>topicinternet.jpg</image>
+ </story>
+ <story>
+ <title>Suppression of cold fusion research?</title>
+ <url>http://slashdot.org/articles/99/06/04/2313200.shtml</url>
+ <time>1999-06-04 23:12:29</time>
+ <author>Hemos</author>
+ <department>possibly-probably</department>
+ <topic>science</topic>
+ <comments>217</comments>
+ <section>articles</section>
+ <image>topicscience.gif</image>
+ </story>
+ <story>
+ <title>California Gov. Halts Wage Info Sale</title>
+ <url>http://slashdot.org/articles/99/06/04/235256.shtml</url>
+ <time>1999-06-04 23:05:34</time>
+ <author>Hemos</author>
+ <department>woo-hoo!</department>
+ <topic>usa</topic>
+ <comments>16</comments>
+ <section>articles</section>
+ <image>topicus.gif</image>
+ </story>
+ <story>
+ <title>Red Hat Announces IPO</title>
+ <url>http://slashdot.org/articles/99/06/04/0849207.shtml</url>
+ <time>1999-06-04 19:30:18</time>
+ <author>Justin</author>
+ <department>details-sketchy</department>
+ <topic>redhat</topic>
+ <comments>155</comments>
+ <section>articles</section>
+ <image>topicredhat.gif</image>
+ </story>
+</ultramode>
diff --git a/result/noent/slashdot16.xml b/result/noent/slashdot16.xml
new file mode 100644
index 0000000..f6a7f2a
--- /dev/null
+++ b/result/noent/slashdot16.xml
Binary files differ
diff --git a/result/noent/svg1 b/result/noent/svg1
new file mode 100644
index 0000000..359bd45
--- /dev/null
+++ b/result/noent/svg1
@@ -0,0 +1,161 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="242px" height="383px">
+<g style="stroke: #000000">
+</g>
+<g style="fill: #f2cc99">
+ <polyline verts=" 69,18 82,8 99,3 118,5 135,12 149,21 156,13 165,9 177,13 183,28 180,50 164,91 155,107 154,114 151,121 141,127 139,136 155,206 157,251 126,342 133,357 128,376 83,376 75,368 67,350 61,350 53,369 4,369 2,361 5,354 12,342 16,321 4,257 4,244 7,218 9,179 26,127 43,93 32,77 30,70 24,67 16,49 17,35 18,23 30,12 40,7 53,7 62,12 69,18 69,18 69,18"/>
+</g>
+<g style="fill: #e5b27f">
+ <polyline verts=" 142,79 136,74 138,82 133,78 133,84 127,78 128,85 124,80 125,87 119,82 119,90 125,99 125,96 128,100 128,94 131,98 132,93 135,97 136,93 138,97 139,94 141,98 143,94 144,85 142,79 142,79 142,79"/>
+</g>
+<g style="fill: #eb8080">
+ <polyline verts=" 127,101 132,100 137,99 144,101 143,105 135,110 127,101 127,101 127,101"/>
+</g>
+<g style="fill: #f2cc99">
+ <polyline verts=" 178,229 157,248 139,296 126,349 137,356 158,357 183,342 212,332 235,288 235,261 228,252 212,250 188,251 178,229 178,229 178,229"/>
+</g>
+<g style="fill: #9c826b">
+ <polyline verts=" 56,229 48,241 48,250 57,281 63,325 71,338 81,315 76,321 79,311 83,301 75,308 80,298 73,303 76,296 71,298 74,292 69,293 74,284 78,278 71,278 74,274 68,273 70,268 66,267 68,261 60,266 62,259 65,253 57,258 59,251 55,254 55,248 60,237 54,240 58,234 54,236 56,229 56,229 56,229"/>
+ <polyline verts=" 74,363 79,368 81,368 85,362 89,363 92,370 96,373 101,372 108,361 110,371 113,373 116,371 120,358 122,363 123,371 126,371 129,367 132,357 135,361 130,376 127,377 94,378 84,376 76,371 74,363 74,363 74,363"/>
+ <polyline verts=" 212,250 219,251 228,258 236,270 235,287 225,304 205,332 177,343 171,352 158,357 166,352 168,346 168,339 165,333 155,327 155,323 161,320 165,316 169,316 167,312 171,313 168,308 173,309 170,306 177,306 175,308 177,311 174,311 176,316 171,315 174,319 168,320 168,323 175,327 179,332 183,326 184,332 189,323 190,328 194,320 194,325 199,316 201,320 204,313 206,316 208,310 211,305 219,298 226,288 229,279 228,266 224,259 217,253 212,250 212,250 212,250"/>
+ <polyline verts=" 151,205 151,238 149,252 141,268 128,282 121,301 130,300 126,313 118,324 116,337 120,346 133,352 133,340 137,333 145,329 156,327 153,319 153,291 157,271 170,259 178,277 193,250 174,216 151,205 151,205 151,205"/>
+ <polyline verts=" 78,127 90,142 95,155 108,164 125,167 139,175 150,206 152,191 141,140 121,148 100,136 78,127 78,127 78,127"/>
+ <polyline verts=" 21,58 35,63 38,68 32,69 42,74 40,79 47,80 54,83 45,94 34,81 32,73 24,66 21,58 21,58 21,58"/>
+ <polyline verts=" 71,34 67,34 66,27 59,24 54,17 48,17 39,22 30,26 28,31 31,39 38,46 29,45 36,54 41,61 41,70 50,69 54,71 55,58 67,52 76,43 76,39 68,44 71,34 71,34 71,34"/>
+ <polyline verts=" 139,74 141,83 143,89 144,104 148,104 155,106 154,86 157,77 155,72 150,77 144,77 139,74 139,74 139,74"/>
+ <polyline verts=" 105,44 102,53 108,58 111,62 112,55 105,44 105,44 105,44"/>
+ <polyline verts=" 141,48 141,54 144,58 139,62 137,66 136,59 137,52 141,48 141,48 141,48"/>
+ <polyline verts=" 98,135 104,130 105,134 108,132 108,135 112,134 113,137 116,136 116,139 119,139 124,141 128,140 133,138 140,133 139,140 126,146 104,144 98,135 98,135 98,135"/>
+ <polyline verts=" 97,116 103,119 103,116 111,118 116,117 122,114 127,107 135,111 142,107 141,114 145,118 149,121 145,125 140,124 127,121 113,125 100,124 97,116 97,116 97,116"/>
+ <polyline verts=" 147,33 152,35 157,34 153,31 160,31 156,28 161,28 159,24 163,25 163,21 165,22 170,23 167,17 172,21 174,18 175,23 176,22 177,28 177,33 174,37 176,39 174,44 171,49 168,53 164,57 159,68 156,70 154,60 150,51 146,43 144,35 147,33 147,33 147,33"/>
+ <polyline verts=" 85,72 89,74 93,75 100,76 105,75 102,79 94,79 88,76 85,72 85,72 85,72"/>
+ <polyline verts=" 86,214 79,221 76,232 82,225 78,239 82,234 78,245 81,243 79,255 84,250 84,267 87,254 90,271 90,257 95,271 93,256 95,249 92,252 93,243 89,253 89,241 86,250 87,236 83,245 87,231 82,231 90,219 84,221 86,214 86,214 86,214"/>
+</g>
+<g style="fill: #ffcc7f">
+ <polyline verts=" 93,68 96,72 100,73 106,72 108,66 105,63 100,62 93,68 93,68 93,68"/>
+ <polyline verts=" 144,64 142,68 142,73 146,74 150,73 154,64 149,62 144,64 144,64 144,64"/>
+</g>
+<g style="fill: #9c826b">
+ <polyline verts=" 57,91 42,111 52,105 41,117 53,112 46,120 53,116 50,124 57,119 55,127 61,122 60,130 67,126 66,134 71,129 72,136 77,130 76,137 80,133 82,138 86,135 96,135 94,129 86,124 83,117 77,123 79,117 73,120 75,112 68,116 71,111 65,114 69,107 63,110 68,102 61,107 66,98 61,103 63,97 57,99 57,91 57,91 57,91"/>
+ <polyline verts=" 83,79 76,79 67,82 75,83 65,88 76,87 65,92 76,91 68,96 77,95 70,99 80,98 72,104 80,102 76,108 85,103 92,101 87,98 93,96 86,94 91,93 85,91 93,89 99,89 105,93 107,85 102,82 92,80 83,79 83,79 83,79"/>
+ <polyline verts=" 109,77 111,83 109,89 113,94 117,90 117,81 114,78 109,77 109,77 109,77"/>
+ <polyline verts=" 122,128 127,126 134,127 136,129 134,130 130,128 124,129 122,128 122,128 122,128"/>
+ <polyline verts=" 78,27 82,32 80,33 82,36 78,37 82,40 78,42 81,46 76,47 78,49 74,50 82,52 87,50 83,48 91,46 86,45 91,42 88,40 92,37 86,34 90,31 86,29 89,26 78,27 78,27 78,27"/>
+ <polyline verts=" 82,17 92,20 79,21 90,25 81,25 94,28 93,26 101,30 101,26 107,33 108,28 111,40 113,34 115,45 117,39 119,54 121,46 124,58 126,47 129,59 130,49 134,58 133,44 137,48 133,37 137,40 133,32 126,20 135,26 132,19 138,23 135,17 142,18 132,11 116,6 94,6 78,11 92,12 80,14 90,16 82,17 82,17 82,17"/>
+ <polyline verts=" 142,234 132,227 124,223 115,220 110,225 118,224 127,229 135,236 122,234 115,237 113,242 121,238 139,243 121,245 111,254 95,254 102,244 104,235 110,229 100,231 104,224 113,216 122,215 132,217 141,224 145,230 149,240 142,234 142,234 142,234"/>
+ <polyline verts=" 115,252 125,248 137,249 143,258 134,255 125,254 115,252 115,252 115,252"/>
+ <polyline verts=" 114,212 130,213 140,219 147,225 144,214 137,209 128,207 114,212 114,212 114,212"/>
+ <polyline verts=" 102,263 108,258 117,257 131,258 116,260 109,265 102,263 102,263 102,263"/>
+ <polyline verts=" 51,241 35,224 40,238 23,224 31,242 19,239 28,247 17,246 25,250 37,254 39,263 44,271 47,294 48,317 51,328 60,351 60,323 53,262 47,246 51,241 51,241 51,241"/>
+ <polyline verts=" 2,364 9,367 14,366 18,355 20,364 26,366 31,357 35,364 39,364 42,357 47,363 53,360 59,357 54,369 7,373 2,364 2,364 2,364"/>
+ <polyline verts=" 7,349 19,345 25,339 18,341 23,333 28,326 23,326 27,320 23,316 25,311 20,298 15,277 12,264 9,249 10,223 3,248 5,261 15,307 17,326 11,343 7,349 7,349 7,349"/>
+ <polyline verts=" 11,226 15,231 25,236 18,227 11,226 11,226 11,226"/>
+ <polyline verts=" 13,214 19,217 32,227 23,214 16,208 15,190 24,148 31,121 24,137 14,170 8,189 13,214 13,214 13,214"/>
+ <polyline verts=" 202,254 195,258 199,260 193,263 197,263 190,268 196,268 191,273 188,282 200,272 194,272 201,266 197,265 204,262 200,258 204,256 202,254 202,254 202,254"/>
+</g>
+<g style="fill: #845433">
+ <polyline verts=" 151,213 165,212 179,225 189,246 187,262 179,275 176,263 177,247 171,233 163,230 165,251 157,264 146,298 145,321 133,326 143,285 154,260 153,240 151,213 151,213 151,213"/>
+ <polyline verts=" 91,132 95,145 97,154 104,148 107,155 109,150 111,158 115,152 118,159 120,153 125,161 126,155 133,164 132,154 137,163 137,152 142,163 147,186 152,192 148,167 141,143 124,145 105,143 91,132 91,132 91,132"/>
+</g>
+<g style="fill: #9c826b">
+ <polyline verts=" 31,57 23,52 26,51 20,44 23,42 21,36 22,29 25,23 24,32 30,43 26,41 30,50 26,48 31,57 31,57 31,57"/>
+ <polyline verts=" 147,21 149,28 155,21 161,16 167,14 175,15 173,11 161,9 147,21 147,21 147,21"/>
+ <polyline verts=" 181,39 175,51 169,57 171,65 165,68 165,75 160,76 162,91 171,71 180,51 181,39 181,39 181,39"/>
+ <polyline verts=" 132,346 139,348 141,346 142,341 147,342 143,355 133,350 132,346 132,346 132,346"/>
+ <polyline verts=" 146,355 151,352 155,348 157,343 160,349 151,356 147,357 146,355 146,355 146,355"/>
+ <polyline verts=" 99,266 100,281 94,305 86,322 78,332 72,346 73,331 91,291 99,266 99,266 99,266"/>
+ <polyline verts=" 20,347 32,342 45,340 54,345 45,350 42,353 38,350 31,353 29,356 23,350 19,353 15,349 20,347 20,347 20,347"/>
+ <polyline verts=" 78,344 86,344 92,349 88,358 84,352 78,344 78,344 78,344"/>
+ <polyline verts=" 93,347 104,344 117,345 124,354 121,357 116,351 112,351 108,355 102,351 93,347 93,347 93,347"/>
+</g>
+<g style="fill: #000000">
+ <polyline verts=" 105,12 111,18 113,24 113,29 119,34 116,23 112,16 105,12 105,12 105,12"/>
+ <polyline verts=" 122,27 125,34 127,43 128,34 125,29 122,27 122,27 122,27"/>
+ <polyline verts=" 115,13 122,19 122,15 113,10 115,13 115,13 115,13"/>
+</g>
+<g style="fill: #ffe5b2">
+ <polyline verts=" 116,172 107,182 98,193 98,183 90,199 89,189 84,207 88,206 87,215 95,206 93,219 91,230 98,216 97,226 104,214 112,209 104,208 113,202 126,200 139,207 132,198 142,203 134,192 142,195 134,187 140,185 130,181 136,177 126,177 125,171 116,180 116,172 116,172 116,172"/>
+ <polyline verts=" 74,220 67,230 67,221 59,235 63,233 60,248 70,232 65,249 71,243 67,256 73,250 69,262 73,259 71,267 76,262 72,271 78,270 76,275 82,274 78,290 86,279 86,289 92,274 88,275 87,264 82,270 82,258 77,257 78,247 73,246 77,233 72,236 74,220 74,220 74,220"/>
+ <polyline verts=" 133,230 147,242 148,250 145,254 138,247 129,246 142,245 138,241 128,237 137,238 133,230 133,230 133,230"/>
+ <polyline verts=" 133,261 125,261 116,263 111,267 125,265 133,261 133,261 133,261"/>
+ <polyline verts=" 121,271 109,273 103,279 99,305 92,316 85,327 83,335 89,340 97,341 94,336 101,336 96,331 103,330 97,327 108,325 99,322 109,321 100,318 110,317 105,314 110,312 107,310 113,308 105,306 114,303 105,301 115,298 107,295 115,294 108,293 117,291 109,289 117,286 109,286 118,283 112,281 118,279 114,278 119,276 115,274 121,271 121,271 121,271"/>
+ <polyline verts=" 79,364 74,359 74,353 76,347 80,351 83,356 82,360 79,364 79,364 79,364"/>
+ <polyline verts=" 91,363 93,356 97,353 103,355 105,360 103,366 99,371 94,368 91,363 91,363 91,363"/>
+ <polyline verts=" 110,355 114,353 118,357 117,363 113,369 111,362 110,355 110,355 110,355"/>
+ <polyline verts=" 126,354 123,358 124,367 126,369 129,361 129,357 126,354 126,354 126,354"/>
+ <polyline verts=" 30,154 24,166 20,182 23,194 29,208 37,218 41,210 41,223 46,214 46,227 52,216 52,227 61,216 59,225 68,213 73,219 70,207 77,212 69,200 77,202 70,194 78,197 68,187 76,182 64,182 58,175 58,185 53,177 50,186 46,171 44,182 39,167 36,172 36,162 30,166 30,154 30,154 30,154"/>
+ <polyline verts=" 44,130 41,137 45,136 43,150 48,142 48,157 53,150 52,164 60,156 61,169 64,165 66,175 70,167 74,176 77,168 80,183 85,172 90,182 93,174 98,181 99,173 104,175 105,169 114,168 102,163 95,157 94,166 90,154 87,162 82,149 75,159 72,148 68,155 67,143 62,148 62,138 58,145 56,133 52,142 52,128 49,134 47,125 44,130 44,130 44,130"/>
+ <polyline verts=" 13,216 19,219 36,231 22,223 16,222 22,227 12,224 13,220 16,220 13,216 13,216 13,216"/>
+ <polyline verts=" 10,231 14,236 25,239 27,237 19,234 10,231 10,231 10,231"/>
+ <polyline verts=" 9,245 14,242 25,245 13,245 9,245 9,245 9,245"/>
+ <polyline verts=" 33,255 26,253 18,254 25,256 18,258 27,260 18,263 27,265 19,267 29,270 21,272 29,276 21,278 30,281 22,283 31,287 24,288 32,292 23,293 34,298 26,299 37,303 32,305 39,309 33,309 39,314 34,314 40,318 34,317 40,321 34,321 41,326 33,326 40,330 33,332 39,333 33,337 42,337 54,341 49,337 52,335 47,330 50,330 45,325 49,325 45,321 48,321 45,316 46,306 45,286 43,274 36,261 33,255 33,255 33,255"/>
+ <polyline verts=" 7,358 9,351 14,351 17,359 11,364 7,358 7,358 7,358"/>
+ <polyline verts=" 44,354 49,351 52,355 49,361 44,354 44,354 44,354"/>
+ <polyline verts=" 32,357 37,353 40,358 36,361 32,357 32,357 32,357"/>
+ <polyline verts=" 139,334 145,330 154,330 158,334 154,341 152,348 145,350 149,340 147,336 141,339 139,345 136,342 136,339 139,334 139,334 139,334"/>
+ <polyline verts=" 208,259 215,259 212,255 220,259 224,263 225,274 224,283 220,292 208,300 206,308 203,304 199,315 197,309 195,318 193,313 190,322 190,316 185,325 182,318 180,325 172,321 178,320 176,313 186,312 180,307 188,307 184,303 191,302 186,299 195,294 187,290 197,288 192,286 201,283 194,280 203,277 198,275 207,271 200,269 209,265 204,265 212,262 208,259 208,259 208,259"/>
+ <polyline verts=" 106,126 106,131 109,132 111,134 115,132 115,135 119,133 118,137 123,137 128,137 133,134 136,130 136,127 132,124 118,128 112,128 106,126 106,126 106,126"/>
+ <polyline verts=" 107,114 101,110 98,102 105,97 111,98 119,102 121,108 118,112 113,115 107,114 107,114 107,114"/>
+ <polyline verts=" 148,106 145,110 146,116 150,118 152,111 151,107 148,106 148,106 148,106"/>
+ <polyline verts=" 80,55 70,52 75,58 63,57 72,61 57,61 67,66 57,67 62,69 54,71 61,73 54,77 63,78 53,85 60,84 56,90 69,84 63,82 75,76 70,75 77,72 72,71 78,69 72,66 81,67 78,64 82,63 80,60 86,62 80,55 80,55 80,55"/>
+ <polyline verts=" 87,56 91,52 96,50 102,56 98,56 92,60 87,56 87,56 87,56"/>
+ <polyline verts=" 85,68 89,73 98,76 106,74 96,73 91,70 85,68 85,68 85,68"/>
+ <polyline verts=" 115,57 114,64 111,64 115,75 122,81 122,74 126,79 126,74 131,78 130,72 133,77 131,68 126,61 119,57 115,57 115,57 115,57"/>
+ <polyline verts=" 145,48 143,53 147,59 151,59 150,55 145,48 145,48 145,48"/>
+ <polyline verts=" 26,22 34,15 43,10 52,10 59,16 47,15 32,22 26,22 26,22 26,22"/>
+ <polyline verts=" 160,19 152,26 149,34 154,33 152,30 157,30 155,26 158,27 157,23 161,23 160,19 160,19 160,19"/>
+</g>
+<g style="fill: #000000">
+ <polyline verts=" 98,117 105,122 109,122 105,117 113,120 121,120 130,112 128,108 123,103 123,99 128,101 132,106 135,109 142,105 142,101 145,101 145,91 148,101 145,105 136,112 135,116 143,124 148,120 150,122 142,128 133,122 121,125 112,126 103,125 100,129 96,124 98,117 98,117 98,117"/>
+ <polyline verts=" 146,118 152,118 152,115 149,115 146,118 146,118 146,118"/>
+ <polyline verts=" 148,112 154,111 154,109 149,109 148,112 148,112 148,112"/>
+ <polyline verts=" 106,112 108,115 114,116 118,114 106,112 106,112 106,112"/>
+ <polyline verts=" 108,108 111,110 116,110 119,108 108,108 108,108 108,108"/>
+ <polyline verts=" 106,104 109,105 117,106 115,104 106,104 106,104 106,104"/>
+ <polyline verts=" 50,25 41,26 34,33 39,43 49,58 36,51 47,68 55,69 54,59 61,57 74,46 60,52 67,42 57,48 61,40 54,45 60,36 59,29 48,38 52,30 47,32 50,25 50,25 50,25"/>
+ <polyline verts=" 147,34 152,41 155,49 161,53 157,47 164,47 158,43 168,44 159,40 164,37 169,37 164,33 169,34 165,28 170,30 170,25 173,29 175,27 176,32 173,36 175,39 172,42 172,46 168,49 170,55 162,57 158,63 155,58 153,50 149,46 147,34 147,34 147,34"/>
+ <polyline verts=" 155,71 159,80 157,93 157,102 155,108 150,101 149,93 154,101 152,91 151,83 155,79 155,71 155,71 155,71"/>
+ <polyline verts=" 112,78 115,81 114,91 112,87 113,82 112,78 112,78 112,78"/>
+ <polyline verts=" 78,28 64,17 58,11 47,9 36,10 28,16 21,26 18,41 20,51 23,61 33,65 28,68 37,74 36,81 43,87 48,90 43,100 40,98 39,90 31,80 30,72 22,71 17,61 14,46 16,28 23,17 33,9 45,6 54,6 65,12 78,28 78,28 78,28"/>
+ <polyline verts=" 67,18 76,9 87,5 101,2 118,3 135,8 149,20 149,26 144,19 132,12 121,9 105,7 89,8 76,14 70,20 67,18 67,18 67,18"/>
+ <polyline verts=" 56,98 48,106 56,103 47,112 56,110 52,115 57,113 52,121 62,115 58,123 65,119 63,125 69,121 68,127 74,125 74,129 79,128 83,132 94,135 93,129 85,127 81,122 76,126 75,121 71,124 71,117 66,121 66,117 62,117 64,112 60,113 60,110 57,111 61,105 57,107 60,101 55,102 56,98 56,98 56,98"/>
+ <polyline verts=" 101,132 103,138 106,134 106,139 112,136 111,142 115,139 114,143 119,142 125,145 131,142 135,138 140,134 140,129 143,135 145,149 150,171 149,184 145,165 141,150 136,147 132,151 131,149 126,152 125,150 121,152 117,148 111,152 110,148 105,149 104,145 98,150 96,138 94,132 94,130 98,132 101,132 101,132 101,132"/>
+ <polyline verts=" 41,94 32,110 23,132 12,163 6,190 7,217 5,236 3,247 9,230 12,211 12,185 18,160 26,134 35,110 43,99 41,94 41,94 41,94"/>
+ <polyline verts=" 32,246 41,250 50,257 52,267 53,295 53,323 59,350 54,363 51,365 44,366 42,360 40,372 54,372 59,366 62,353 71,352 75,335 73,330 66,318 68,302 64,294 67,288 63,286 63,279 59,275 58,267 56,262 50,247 42,235 44,246 32,236 35,244 32,246 32,246 32,246"/>
+ <polyline verts=" 134,324 146,320 159,322 173,327 179,337 179,349 172,355 158,357 170,350 174,343 170,333 163,328 152,326 134,329 134,324 134,324 134,324"/>
+ <polyline verts=" 173,339 183,334 184,338 191,329 194,332 199,323 202,325 206,318 209,320 213,309 221,303 228,296 232,289 234,279 233,269 230,262 225,256 219,253 208,252 198,252 210,249 223,250 232,257 237,265 238,277 238,291 232,305 221,323 218,335 212,342 200,349 178,348 173,339 173,339 173,339"/>
+ <polyline verts=" 165,296 158,301 156,310 156,323 162,324 159,318 162,308 162,304 165,296 165,296 165,296"/>
+ <polyline verts=" 99,252 105,244 107,234 115,228 121,228 131,235 122,233 113,235 109,246 121,239 133,243 121,243 110,251 99,252 99,252 99,252"/>
+ <polyline verts=" 117,252 124,247 134,249 136,253 126,252 117,252 117,252 117,252"/>
+ <polyline verts=" 117,218 132,224 144,233 140,225 132,219 117,218 117,218 117,218"/>
+ <polyline verts=" 122,212 134,214 143,221 141,213 132,210 122,212 122,212 122,212"/>
+ <polyline verts=" 69,352 70,363 76,373 86,378 97,379 108,379 120,377 128,378 132,373 135,361 133,358 132,366 127,375 121,374 121,362 119,367 117,374 110,376 110,362 107,357 106,371 104,375 97,376 90,375 90,368 86,362 83,364 86,369 85,373 78,370 73,362 71,351 69,352 69,352 69,352"/>
+ <polyline verts=" 100,360 96,363 99,369 102,364 100,360 100,360 100,360"/>
+ <polyline verts=" 115,360 112,363 114,369 117,364 115,360 115,360 115,360"/>
+ <polyline verts=" 127,362 125,364 126,369 128,365 127,362 127,362 127,362"/>
+ <polyline verts=" 5,255 7,276 11,304 15,320 13,334 6,348 2,353 0,363 5,372 12,374 25,372 38,372 44,369 42,367 36,368 31,369 30,360 27,368 20,370 16,361 15,368 10,369 3,366 3,359 6,352 11,348 17,331 19,316 12,291 9,274 5,255 5,255 5,255"/>
+ <polyline verts=" 10,358 7,362 10,366 11,362 10,358 10,358 10,358"/>
+ <polyline verts=" 25,357 22,360 24,366 27,360 25,357 25,357 25,357"/>
+ <polyline verts=" 37,357 34,361 36,365 38,361 37,357 37,357 37,357"/>
+ <polyline verts=" 49,356 46,359 47,364 50,360 49,356 49,356 49,356"/>
+ <polyline verts=" 130,101 132,102 135,101 139,102 143,103 142,101 137,100 133,100 130,101 130,101 130,101"/>
+ <polyline verts=" 106,48 105,52 108,56 109,52 106,48 106,48 106,48"/>
+ <polyline verts=" 139,52 139,56 140,60 142,58 141,56 139,52 139,52 139,52"/>
+ <polyline verts=" 25,349 29,351 30,355 33,350 37,348 42,351 45,347 49,345 44,343 36,345 25,349 25,349 25,349"/>
+ <polyline verts=" 98,347 105,351 107,354 109,349 115,349 120,353 118,349 113,346 104,346 98,347 98,347 98,347"/>
+ <polyline verts=" 83,348 87,352 87,357 89,351 87,348 83,348 83,348 83,348"/>
+ <polyline verts=" 155,107 163,107 170,107 186,108 175,109 155,109 155,107 155,107 155,107"/>
+ <polyline verts=" 153,114 162,113 175,112 192,114 173,114 154,115 153,114 153,114 153,114"/>
+ <polyline verts=" 152,118 164,120 180,123 197,129 169,123 151,120 152,118 152,118 152,118"/>
+ <polyline verts=" 68,109 87,106 107,106 106,108 88,108 68,109 68,109 68,109"/>
+ <polyline verts=" 105,111 95,112 79,114 71,116 85,115 102,113 105,111 105,111 105,111"/>
+ <polyline verts=" 108,101 98,99 87,99 78,99 93,100 105,102 108,101 108,101 108,101"/>
+ <polyline verts=" 85,63 91,63 97,60 104,60 108,62 111,69 112,75 110,74 108,71 103,73 106,69 105,65 103,64 103,67 102,70 99,70 97,66 94,67 97,72 88,67 84,66 85,63 85,63 85,63"/>
+ <polyline verts=" 140,74 141,66 144,61 150,61 156,62 153,70 150,73 152,65 150,65 151,68 149,71 146,71 144,66 143,70 143,74 140,74 140,74 140,74"/>
+ <polyline verts=" 146,20 156,11 163,9 172,9 178,14 182,18 184,32 182,42 182,52 177,58 176,67 171,76 165,90 157,105 160,92 164,85 168,78 167,73 173,66 172,62 175,59 174,55 177,53 180,46 181,29 179,21 173,13 166,11 159,13 153,18 148,23 146,20 146,20 146,20"/>
+ <polyline verts=" 150,187 148,211 150,233 153,247 148,267 135,283 125,299 136,292 131,313 122,328 122,345 129,352 133,359 133,367 137,359 148,356 140,350 131,347 129,340 132,332 140,328 137,322 140,304 154,265 157,244 155,223 161,220 175,229 186,247 185,260 176,275 178,287 185,277 188,261 196,253 189,236 174,213 150,187 150,187 150,187"/>
+ <polyline verts=" 147,338 142,341 143,345 141,354 147,343 147,338 147,338 147,338"/>
+ <polyline verts=" 157,342 156,349 150,356 157,353 163,346 162,342 157,342 157,342 157,342"/>
+ <polyline verts=" 99,265 96,284 92,299 73,339 73,333 87,300 99,265 99,265 99,265"/>
+</g></svg>
diff --git a/result/noent/svg2 b/result/noent/svg2
new file mode 100644
index 0000000..6c3990c
--- /dev/null
+++ b/result/noent/svg2
@@ -0,0 +1,56 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="268px" height="207px">
+<g style="stroke: #000000">
+ <path d=" M 29 28 "/>
+ <path d=" L 19 74 "/>
+</g>
+<g style="stroke: #800040">
+ <polyline verts=" 32,100 72,50 90,82 73,16 120,64 152,9 177,107"/>
+</g>
+<g style="stroke: #000000">
+</g>
+<g style="stroke: #0000ff">
+ <rect x="30" y="101" width="51" height="33"/>
+</g>
+<g style="fill: #0000ff">
+ <ellipse cx="182" cy="127" major="37" minor="31" angle="90"/>
+</g>
+<g style="fill: #ff0000">
+ <polyline verts=" 78,180 76,151 131,149 136,182 135,182 134,183 127,185 117,186 109,192 104,194 98,199 96,200 95,201 94,202 92,202 85,202 70,200 54,199 47,198 46,197 45,197 37,195 26,193 17,187 9,181 8,181 7,176 6,175 6,173 6,172 6,170 8,164 8,163 8,162 9,162 10,162 11,162 13,162 20,162 26,162 27,162 28,162 30,162 30,163 31,163 32,164 34,166 35,166 36,167 36,168 37,169 38,169 39,169 41,170 43,170 45,170 47,170 49,170 50,168 50,161 50,160 50,159 47,162 78,180"/>
+ <g>
+ <desc> Java Font definition:Dialog 0</desc>
+ </g>
+ <g>
+ <desc> Java Font definition:Helvetica 0</desc>
+ </g>
+</g>
+<g style="stroke: #000000">
+ <text x="188" y="36">this is text</text>
+</g>
+<g style="stroke: #000000">
+ <g>
+ <desc> Java Font definition:Dialog 0</desc>
+ </g>
+ <g>
+ <desc> Java Font definition:Helvetica 700</desc>
+ </g>
+</g>
+<g style="stroke: #008080">
+ <text x="176" y="85">sadfsadfsad</text>
+</g>
+<g style="stroke: #000000">
+</g>
+<g style="fill: #800040">
+ <ellipse cx="208" cy="180" major="45" minor="31" angle="0"/>
+</g>
+<g style="stroke: #000000">
+</g>
+<g style="fill: #ffffff">
+ <g>
+ <desc> Java Font definition:Dialog 700</desc>
+ </g>
+ <g>
+ <desc> Java Font definition:Dialog 700</desc>
+ </g>
+</g></svg>
diff --git a/result/noent/svg3 b/result/noent/svg3
new file mode 100644
index 0000000..c4994b8
--- /dev/null
+++ b/result/noent/svg3
@@ -0,0 +1,723 @@
+<?xml version="1.0"?>
+<svg>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M77.696 284.285C77.696 284.285 77.797 286.179 76.973 286.16C76.149 286.141 59.695 238.066 39.167 240.309C39.167 240.309 56.95 232.956 77.696 284.285z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M81.226 281.262C81.226 281.262 80.677 283.078 79.908 282.779C79.14 282.481 80.023 231.675 59.957 226.801C59.957 226.801 79.18 225.937 81.226 281.262z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M108.716 323.59C108.716 323.59 110.352 324.55 109.882 325.227C109.411 325.904 60.237 313.102 50.782 331.459C50.782 331.459 54.461 312.572 108.716 323.59z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M105.907 333.801C105.907 333.801 107.763 334.197 107.529 334.988C107.296 335.779 56.593 339.121 53.403 359.522C53.403 359.522 50.945 340.437 105.907 333.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M101.696 328.276C101.696 328.276 103.474 328.939 103.128 329.687C102.782 330.435 52.134 326.346 46.002 346.064C46.002 346.064 46.354 326.825 101.696 328.276z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M90.991 310.072C90.991 310.072 92.299 311.446 91.66 311.967C91.021 312.488 47.278 286.634 33.131 301.676C33.131 301.676 41.872 284.533 90.991 310.072z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M83.446 314.263C83.446 314.263 84.902 315.48 84.326 316.071C83.75 316.661 37.362 295.922 25.008 312.469C25.008 312.469 31.753 294.447 83.446 314.263z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M80.846 318.335C80.846 318.335 82.454 319.343 81.964 320.006C81.474 320.669 32.692 306.446 22.709 324.522C22.709 324.522 26.934 305.749 80.846 318.335z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M91.58 318.949C91.58 318.949 92.702 320.48 92.001 320.915C91.3 321.35 51.231 290.102 35.273 303.207C35.273 303.207 46.138 287.326 91.58 318.949z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M71.8 290C71.8 290 72.4 291.8 71.6 292C70.8 292.2 42.2 250.2 22.999 257.8C22.999 257.8 38.2 246 71.8 290z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M72.495 296.979C72.495 296.979 73.47 298.608 72.731 298.975C71.993 299.343 35.008 264.499 17.899 276.061C17.899 276.061 30.196 261.261 72.495 296.979z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M72.38 301.349C72.38 301.349 73.502 302.88 72.801 303.315C72.1 303.749 32.031 272.502 16.073 285.607C16.073 285.607 26.938 269.726 72.38 301.349z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000">
+ <path d="M70.17 303.065C70.673 309.113 71.661 315.682 73.4 318.801C73.4 318.801 69.8 331.201 78.6 344.401C78.6 344.401 78.2 351.601 79.8 354.801C79.8 354.801 83.8 363.201 88.6 364.001C92.484 364.648 101.207 367.717 111.068 369.121C111.068 369.121 128.2 383.201 125 396.001C125 396.001 124.6 412.401 121 414.001C121 414.001 132.6 402.801 123 419.601L118.6 438.401C118.6 438.401 144.2 416.801 128.6 435.201L118.6 461.201C118.6 461.201 138.2 442.801 131 451.201L127.8 460.001C127.8 460.001 171 432.801 140.2 462.401C140.2 462.401 148.2 458.801 152.6 461.601C152.6 461.601 159.4 460.401 158.6 462.001C158.6 462.001 137.8 472.401 134.2 490.801C134.2 490.801 142.6 480.801 139.4 491.601L139.8 503.201C139.8 503.201 143.8 481.601 143.4 519.201C143.4 519.201 162.6 501.201 151 522.001L151 538.801C151 538.801 166.2 522.401 159.8 535.201C159.8 535.201 169.8 526.401 165.8 541.601C165.8 541.601 165 552.001 169.4 540.801C169.4 540.801 185.4 510.201 179.4 536.401C179.4 536.401 178.6 555.601 183.4 540.801C183.4 540.801 183.8 551.201 193 558.401C193 558.401 191.8 507.601 204.6 543.601L208.6 560.001C208.6 560.001 211.4 550.801 211 545.601C211 545.601 225.8 529.201 219 553.601C219 553.601 234.2 530.801 231 544.001C231 544.001 223.4 560.001 225 564.801C225 564.801 241.8 530.001 243 528.401C243 528.401 241 570.802 251.8 534.801C251.8 534.801 257.4 546.801 254.6 551.201C254.6 551.201 262.6 543.201 261.8 540.001C261.8 540.001 266.4 531.801 269.2 545.401C269.2 545.401 271 554.801 272.6 551.601C272.6 551.601 276.6 575.602 277.8 552.801C277.8 552.801 279.4 539.201 272.2 527.601C272.2 527.601 273 524.401 270.2 520.401C270.2 520.401 283.8 542.001 276.6 513.201C276.6 513.201 287.801 521.201 289.001 521.201C289.001 521.201 275.4 498.001 284.2 502.801C284.2 502.801 279 492.401 297.001 504.401C297.001 504.401 281 488.401 298.601 498.001C298.601 498.001 306.601 504.401 299.001 494.401C299.001 494.401 284.6 478.401 306.601 496.401C306.601 496.401 318.201 512.801 319.001 515.601C319.001 515.601 309.001 486.401 304.601 483.601C304.601 483.601 313.001 447.201 354.201 462.801C354.201 462.801 361.001 480.001 365.401 461.601C365.401 461.601 378.201 455.201 389.401 482.801C389.401 482.801 393.401 469.201 392.601 466.401C392.601 466.401 399.401 467.601 398.601 466.401C398.601 466.401 411.801 470.801 413.001 470.001C413.001 470.001 419.801 476.801 420.201 473.201C420.201 473.201 429.401 476.001 427.401 472.401C427.401 472.401 436.201 488.001 436.601 491.601L439.001 477.601L441.001 480.401C441.001 480.401 442.601 472.801 441.801 471.601C441.001 470.401 461.801 478.401 466.601 499.201L468.601 507.601C468.601 507.601 474.601 492.801 473.001 488.801C473.001 488.801 478.201 489.601 478.601 494.001C478.601 494.001 482.601 470.801 477.801 464.801C477.801 464.801 482.201 464.001 483.401 467.601L483.401 460.401C483.401 460.401 490.601 461.201 490.601 458.801C490.601 458.801 495.001 454.801 497.001 459.601C497.001 459.601 484.601 424.401 503.001 443.601C503.001 443.601 510.201 454.401 506.601 435.601C503.001 416.801 499.001 415.201 503.801 414.801C503.801 414.801 504.601 411.201 502.601 409.601C500.601 408.001 503.801 409.601 503.801 409.601C503.801 409.601 508.601 413.601 503.401 391.601C503.401 391.601 509.801 393.201 497.801 364.001C497.801 364.001 500.601 361.601 496.601 353.201C496.601 353.201 504.601 357.601 507.401 356.001C507.401 356.001 507.001 354.401 503.801 350.401C503.801 350.401 482.201 295.6 502.601 317.601C502.601 317.601 514.451 331.151 508.051 308.351C508.051 308.351 498.94 284.341 499.717 280.045L70.17 303.065z"/>
+ </g>
+ <g style="fill: #cc7226; stroke:#000000">
+ <path d="M499.717 280.245C500.345 280.426 502.551 281.55 503.801 283.2C503.801 283.2 510.601 294 505.401 275.6C505.401 275.6 496.201 246.8 505.001 258C505.001 258 511.001 265.2 507.801 251.6C503.936 235.173 501.401 228.8 501.401 228.8C501.401 228.8 513.001 233.6 486.201 194L495.001 197.6C495.001 197.6 475.401 158 453.801 152.8L445.801 146.8C445.801 146.8 484.201 108.8 471.401 72C471.401 72 464.601 66.8 455.001 76C455.001 76 448.601 80.8 442.601 79.2C442.601 79.2 411.801 80.4 409.801 80.4C407.801 80.4 373.001 43.2 307.401 60.8C307.401 60.8 302.201 62.8 297.801 61.6C297.801 61.6 279.4 45.6 230.6 68.4C230.6 68.4 220.6 70.4 219 70.4C217.4 70.4 214.6 70.4 206.6 76.8C198.6 83.2 198.2 84 196.2 85.6C196.2 85.6 179.8 96.8 175 97.6C175 97.6 163.4 104 159 114L155.4 115.2C155.4 115.2 153.8 122.4 153.4 123.6C153.4 123.6 148.6 127.2 147.8 132.8C147.8 132.8 139 138.8 139.4 143.2C139.4 143.2 137.8 148.4 137 153.2C137 153.2 129.8 158 130.6 160.8C130.6 160.8 123 174.8 124.2 181.6C124.2 181.6 117.8 181.2 115 183.6C115 183.6 114.2 188.4 112.6 188.8C112.6 188.8 109.8 190 112.2 194C112.2 194 110.6 196.8 110.2 198.4C110.2 198.4 111 201.2 106.6 206.8C106.6 206.8 100.2 225.6 102.2 230.8C102.2 230.8 102.6 235.6 99.8 237.2C99.8 237.2 96.2 236.8 104.6 248.8C104.6 248.8 105.4 250 102.2 252.4C102.2 252.4 85 256 82.6 272.4C82.6 272.4 69 287.2 69 292.4C69 294.705 69.271 297.852 69.97 302.465C69.97 302.465 69.4 310.801 97 311.601C124.6 312.401 499.717 280.245 499.717 280.245z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M84.4 302.6C59.4 263.2 73.8 319.601 73.8 319.601C82.6 354.001 212.2 316.401 212.2 316.401C212.2 316.401 381.001 286 392.201 282C403.401 278 498.601 284.4 498.601 284.4L493.001 267.6C428.201 221.2 409.001 244.4 395.401 240.4C381.801 236.4 384.201 246 381.001 246.8C377.801 247.6 338.601 222.8 332.201 223.6C325.801 224.4 300.459 200.649 315.401 232.4C331.401 266.4 257 271.6 240.2 260.4C223.4 249.2 247.4 278.8 247.4 278.8C265.8 298.8 231.4 282 231.4 282C197 269.2 173 294.8 169.8 295.6C166.6 296.4 161.8 299.6 161 293.2C160.2 286.8 152.69 270.099 121 296.4C101 313.001 87.2 291 87.2 291L84.4 302.6z"/>
+ </g>
+ <g style="fill: #e87f3a">
+ <path d="M333.51 225.346C327.11 226.146 301.743 202.407 316.71 234.146C333.31 269.346 258.31 273.346 241.51 262.146C224.709 250.946 248.71 280.546 248.71 280.546C267.11 300.546 232.709 283.746 232.709 283.746C198.309 270.946 174.309 296.546 171.109 297.346C167.909 298.146 163.109 301.346 162.309 294.946C161.509 288.546 154.13 272.012 122.309 298.146C101.073 315.492 87.582 294.037 87.582 294.037L84.382 304.146C59.382 264.346 74.454 322.655 74.454 322.655C83.255 357.056 213.509 318.146 213.509 318.146C213.509 318.146 382.31 287.746 393.51 283.746C404.71 279.746 499.038 286.073 499.038 286.073L493.51 268.764C428.71 222.364 410.31 246.146 396.71 242.146C383.11 238.146 385.51 247.746 382.31 248.546C379.11 249.346 339.91 224.546 333.51 225.346z"/>
+ </g>
+ <g style="fill: #ea8c4d">
+ <path d="M334.819 227.091C328.419 227.891 303.685 203.862 318.019 235.891C334.219 272.092 259.619 275.092 242.819 263.892C226.019 252.692 250.019 282.292 250.019 282.292C268.419 302.292 234.019 285.492 234.019 285.492C199.619 272.692 175.618 298.292 172.418 299.092C169.218 299.892 164.418 303.092 163.618 296.692C162.818 290.292 155.57 273.925 123.618 299.892C101.145 317.983 87.964 297.074 87.964 297.074L84.364 305.692C60.564 266.692 75.109 325.71 75.109 325.71C83.909 360.11 214.819 319.892 214.819 319.892C214.819 319.892 383.619 289.492 394.819 285.492C406.019 281.492 499.474 287.746 499.474 287.746L494.02 269.928C429.219 223.528 411.619 247.891 398.019 243.891C384.419 239.891 386.819 249.491 383.619 250.292C380.419 251.092 341.219 226.291 334.819 227.091z"/>
+ </g>
+ <g style="fill: #ec9961">
+ <path d="M336.128 228.837C329.728 229.637 304.999 205.605 319.328 237.637C336.128 275.193 260.394 276.482 244.128 265.637C227.328 254.437 251.328 284.037 251.328 284.037C269.728 304.037 235.328 287.237 235.328 287.237C200.928 274.437 176.928 300.037 173.728 300.837C170.528 301.637 165.728 304.837 164.928 298.437C164.128 292.037 157.011 275.839 124.927 301.637C101.218 320.474 88.345 300.11 88.345 300.11L84.345 307.237C62.545 270.437 75.764 328.765 75.764 328.765C84.564 363.165 216.128 321.637 216.128 321.637C216.128 321.637 384.928 291.237 396.129 287.237C407.329 283.237 499.911 289.419 499.911 289.419L494.529 271.092C429.729 224.691 412.929 249.637 399.329 245.637C385.728 241.637 388.128 251.237 384.928 252.037C381.728 252.837 342.528 228.037 336.128 228.837z"/>
+ </g>
+ <g style="fill: #eea575">
+ <path d="M337.438 230.583C331.037 231.383 306.814 207.129 320.637 239.383C337.438 278.583 262.237 278.583 245.437 267.383C228.637 256.183 252.637 285.783 252.637 285.783C271.037 305.783 236.637 288.983 236.637 288.983C202.237 276.183 178.237 301.783 175.037 302.583C171.837 303.383 167.037 306.583 166.237 300.183C165.437 293.783 158.452 277.752 126.237 303.383C101.291 322.965 88.727 303.146 88.727 303.146L84.327 308.783C64.527 273.982 76.418 331.819 76.418 331.819C85.218 366.22 217.437 323.383 217.437 323.383C217.437 323.383 386.238 292.983 397.438 288.983C408.638 284.983 500.347 291.092 500.347 291.092L495.038 272.255C430.238 225.855 414.238 251.383 400.638 247.383C387.038 243.383 389.438 252.983 386.238 253.783C383.038 254.583 343.838 229.783 337.438 230.583z"/>
+ </g>
+ <g style="fill: #f1b288">
+ <path d="M338.747 232.328C332.347 233.128 306.383 209.677 321.947 241.128C341.147 279.928 263.546 280.328 246.746 269.128C229.946 257.928 253.946 287.528 253.946 287.528C272.346 307.528 237.946 290.728 237.946 290.728C203.546 277.928 179.546 303.528 176.346 304.328C173.146 305.128 168.346 308.328 167.546 301.928C166.746 295.528 159.892 279.665 127.546 305.128C101.364 325.456 89.109 306.183 89.109 306.183L84.309 310.328C66.309 277.128 77.073 334.874 77.073 334.874C85.873 369.274 218.746 325.128 218.746 325.128C218.746 325.128 387.547 294.728 398.747 290.728C409.947 286.728 500.783 292.764 500.783 292.764L495.547 273.419C430.747 227.019 415.547 253.128 401.947 249.128C388.347 245.128 390.747 254.728 387.547 255.528C384.347 256.328 345.147 231.528 338.747 232.328z"/>
+ </g>
+ <g style="fill: #f3bf9c">
+ <path d="M340.056 234.073C333.655 234.873 307.313 211.613 323.255 242.873C343.656 282.874 264.855 282.074 248.055 270.874C231.255 259.674 255.255 289.274 255.255 289.274C273.655 309.274 239.255 292.474 239.255 292.474C204.855 279.674 180.855 305.274 177.655 306.074C174.455 306.874 169.655 310.074 168.855 303.674C168.055 297.274 161.332 281.578 128.855 306.874C101.436 327.947 89.491 309.219 89.491 309.219L84.291 311.874C68.291 281.674 77.727 337.929 77.727 337.929C86.527 372.329 220.055 326.874 220.055 326.874C220.055 326.874 388.856 296.474 400.056 292.474C411.256 288.474 501.22 294.437 501.22 294.437L496.056 274.583C431.256 228.183 416.856 254.874 403.256 250.874C389.656 246.873 392.056 256.474 388.856 257.274C385.656 258.074 346.456 233.273 340.056 234.073z"/>
+ </g>
+ <g style="fill: #f5ccb0">
+ <path d="M341.365 235.819C334.965 236.619 307.523 213.944 324.565 244.619C346.565 284.219 266.164 283.819 249.364 272.619C232.564 261.419 256.564 291.019 256.564 291.019C274.964 311.019 240.564 294.219 240.564 294.219C206.164 281.419 182.164 307.019 178.964 307.819C175.764 308.619 170.964 311.819 170.164 305.419C169.364 299.019 162.773 283.492 130.164 308.619C101.509 330.438 89.873 312.256 89.873 312.256L84.273 313.419C69.872 285.019 78.382 340.983 78.382 340.983C87.182 375.384 221.364 328.619 221.364 328.619C221.364 328.619 390.165 298.219 401.365 294.219C412.565 290.219 501.656 296.11 501.656 296.11L496.565 275.746C431.765 229.346 418.165 256.619 404.565 252.619C390.965 248.619 393.365 258.219 390.165 259.019C386.965 259.819 347.765 235.019 341.365 235.819z"/>
+ </g>
+ <g style="fill: #f8d8c4">
+ <path d="M342.674 237.565C336.274 238.365 308.832 215.689 325.874 246.365C347.874 285.965 267.474 285.565 250.674 274.365C233.874 263.165 257.874 292.765 257.874 292.765C276.274 312.765 241.874 295.965 241.874 295.965C207.473 283.165 183.473 308.765 180.273 309.565C177.073 310.365 172.273 313.565 171.473 307.165C170.673 300.765 164.214 285.405 131.473 310.365C101.582 332.929 90.255 315.293 90.255 315.293L84.255 314.965C70.654 288.564 79.037 344.038 79.037 344.038C87.837 378.438 222.673 330.365 222.673 330.365C222.673 330.365 391.474 299.965 402.674 295.965C413.874 291.965 502.093 297.783 502.093 297.783L497.075 276.91C432.274 230.51 419.474 258.365 405.874 254.365C392.274 250.365 394.674 259.965 391.474 260.765C388.274 261.565 349.074 236.765 342.674 237.565z"/>
+ </g>
+ <g style="fill: #fae5d7">
+ <path d="M343.983 239.31C337.583 240.11 310.529 217.223 327.183 248.11C349.183 288.91 268.783 287.31 251.983 276.11C235.183 264.91 259.183 294.51 259.183 294.51C277.583 314.51 243.183 297.71 243.183 297.71C208.783 284.91 184.783 310.51 181.583 311.31C178.382 312.11 173.582 315.31 172.782 308.91C171.982 302.51 165.654 287.318 132.782 312.11C101.655 335.42 90.637 318.329 90.637 318.329L84.236 316.51C71.236 292.51 79.691 347.093 79.691 347.093C88.491 381.493 223.983 332.11 223.983 332.11C223.983 332.11 392.783 301.71 403.983 297.71C415.183 293.71 502.529 299.456 502.529 299.456L497.583 278.074C432.783 231.673 420.783 260.11 407.183 256.11C393.583 252.11 395.983 261.71 392.783 262.51C389.583 263.31 350.383 238.51 343.983 239.31z"/>
+ </g>
+ <g style="fill: #fcf2eb">
+ <path d="M345.292 241.055C338.892 241.855 312.917 218.411 328.492 249.855C349.692 292.656 270.092 289.056 253.292 277.856C236.492 266.656 260.492 296.256 260.492 296.256C278.892 316.256 244.492 299.456 244.492 299.456C210.092 286.656 186.092 312.256 182.892 313.056C179.692 313.856 174.892 317.056 174.092 310.656C173.292 304.256 167.095 289.232 134.092 313.856C101.727 337.911 91.018 321.365 91.018 321.365L84.218 318.056C71.418 294.856 80.346 350.147 80.346 350.147C89.146 384.547 225.292 333.856 225.292 333.856C225.292 333.856 394.093 303.456 405.293 299.456C416.493 295.456 502.965 301.128 502.965 301.128L498.093 279.237C433.292 232.837 422.093 261.856 408.493 257.856C394.893 253.855 397.293 263.456 394.093 264.256C390.892 265.056 351.692 240.255 345.292 241.055z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M84.2 319.601C71.4 297.6 81 353.201 81 353.201C89.8 387.601 226.6 335.601 226.6 335.601C226.6 335.601 395.401 305.2 406.601 301.2C417.801 297.2 503.401 302.8 503.401 302.8L498.601 280.4C433.801 234 423.401 263.6 409.801 259.6C396.201 255.6 398.601 265.2 395.401 266C392.201 266.8 353.001 242 346.601 242.8C340.201 243.6 314.981 219.793 329.801 251.6C352.028 299.307 269.041 289.227 254.6 279.6C237.8 268.4 261.8 298 261.8 298C280.2 318.001 245.8 301.2 245.8 301.2C211.4 288.4 187.4 314.001 184.2 314.801C181 315.601 176.2 318.801 175.4 312.401C174.6 306 168.535 291.144 135.4 315.601C101.8 340.401 91.4 324.401 91.4 324.401L84.2 319.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M125.8 349.601C125.8 349.601 118.6 361.201 139.4 374.401C139.4 374.401 140.8 375.801 122.8 371.601C122.8 371.601 116.6 369.601 115 359.201C115 359.201 110.2 354.801 105.4 349.201C100.6 343.601 125.8 349.601 125.8 349.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M265.8 302C265.8 302 283.498 328.821 282.9 333.601C281.6 344.001 281.4 353.601 284.6 357.601C287.801 361.601 296.601 394.801 296.601 394.801C296.601 394.801 296.201 396.001 308.601 358.001C308.601 358.001 320.201 342.001 300.201 323.601C300.201 323.601 265 294.8 265.8 302z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M145.8 376.401C145.8 376.401 157 383.601 142.6 414.801L149 412.401C149 412.401 148.2 423.601 145 426.001L152.2 422.801C152.2 422.801 157 430.801 153 435.601C153 435.601 169.8 443.601 169 450.001C169 450.001 175.4 442.001 171.4 435.601C167.4 429.201 160.2 433.201 161 414.801L152.2 418.001C152.2 418.001 157.8 409.201 157.8 402.801L149.8 405.201C149.8 405.201 165.269 378.623 154.6 377.201C148.6 376.401 145.8 376.401 145.8 376.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M178.2 393.201C178.2 393.201 181 388.801 178.2 389.601C175.4 390.401 144.2 405.201 138.2 414.801C138.2 414.801 172.6 390.401 178.2 393.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M188.6 401.201C188.6 401.201 191.4 396.801 188.6 397.601C185.8 398.401 154.6 413.201 148.6 422.801C148.6 422.801 183 398.401 188.6 401.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M201.8 386.001C201.8 386.001 204.6 381.601 201.8 382.401C199 383.201 167.8 398.001 161.8 407.601C161.8 407.601 196.2 383.201 201.8 386.001z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M178.6 429.601C178.6 429.601 178.6 423.601 175.8 424.401C173 425.201 137 442.801 131 452.401C131 452.401 173 426.801 178.6 429.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M179.8 418.801C179.8 418.801 181 414.001 178.2 414.801C176.2 414.801 149.8 426.401 143.8 436.001C143.8 436.001 173.4 414.401 179.8 418.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M165.4 466.401L155.4 474.001C155.4 474.001 165.8 466.401 169.4 467.601C169.4 467.601 162.6 478.801 161.8 484.001C161.8 484.001 172.2 471.201 177.8 471.601C177.8 471.601 185.4 472.001 185.4 482.801C185.4 482.801 191 472.401 194.2 472.801C194.2 472.801 195.4 479.201 194.2 486.001C194.2 486.001 198.2 478.401 202.2 480.001C202.2 480.001 208.6 478.001 207.8 489.601C207.8 489.601 207.8 500.001 207 502.801C207 502.801 212.6 476.401 215 476.001C215 476.001 223 474.801 227.8 483.601C227.8 483.601 223.8 476.001 228.6 478.001C228.6 478.001 239.4 479.601 242.6 486.401C242.6 486.401 235.8 474.401 241.4 477.601C241.4 477.601 248.2 477.601 249.4 484.001C249.4 484.001 257.8 505.201 259.8 506.801C259.8 506.801 252.2 485.201 253.8 485.201C253.8 485.201 251.8 473.201 257 488.001C257 488.001 253.8 474.001 259.4 474.801C265 475.601 269.4 485.601 277.8 483.201C277.8 483.201 287.401 488.801 289.401 419.601L165.4 466.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M170.2 373.601C170.2 373.601 185 367.601 225 373.601C225 373.601 232.2 374.001 239 365.201C245.8 356.401 272.6 349.201 279 351.201L288.601 357.601L289.401 358.801C289.401 358.801 301.801 369.201 302.201 376.801C302.601 384.401 287.801 432.401 278.2 448.401C268.6 464.401 259 476.801 239.8 474.401C239.8 474.401 219 470.401 193.4 474.401C193.4 474.401 164.2 472.801 161.4 464.801C158.6 456.801 172.6 441.601 172.6 441.601C172.6 441.601 177 433.201 175.8 418.801C174.6 404.401 175 376.401 170.2 373.601z"/>
+ </g>
+ <g style="fill: #e5668c">
+ <path d="M192.2 375.601C200.6 394.001 171 459.201 171 459.201C169 460.801 183.66 466.846 193.8 464.401C204.746 461.763 245 466.001 245 466.001C268.6 450.401 281.4 406.001 281.4 406.001C281.4 406.001 291.801 382.001 274.2 378.801C256.6 375.601 192.2 375.601 192.2 375.601z"/>
+ </g>
+ <g style="fill: #b23259">
+ <path d="M190.169 406.497C193.495 393.707 195.079 381.906 192.2 375.601C192.2 375.601 254.6 382.001 265.8 361.201C270.041 353.326 284.801 384.001 284.4 393.601C284.4 393.601 221.4 408.001 206.6 396.801L190.169 406.497z"/>
+ </g>
+ <g style="fill: #a5264c">
+ <path d="M194.6 422.801C194.6 422.801 196.6 430.001 194.2 434.001C194.2 434.001 192.6 434.801 191.4 435.201C191.4 435.201 192.6 438.801 198.6 440.401C198.6 440.401 200.6 444.801 203 445.201C205.4 445.601 210.2 451.201 214.2 450.001C218.2 448.801 229.4 444.801 229.4 444.801C229.4 444.801 235 441.601 243.8 445.201C243.8 445.201 246.175 444.399 246.6 440.401C247.1 435.701 250.2 432.001 252.2 430.001C254.2 428.001 263.8 415.201 262.6 414.801C261.4 414.401 194.6 422.801 194.6 422.801z"/>
+ </g>
+ <g style="fill: #ff727f; stroke:#000000">
+ <path d="M190.2 374.401C190.2 374.401 187.4 396.801 190.6 405.201C193.8 413.601 193 415.601 192.2 419.601C191.4 423.601 195.8 433.601 201.4 439.601L213.4 441.201C213.4 441.201 228.6 437.601 237.8 440.401C237.8 440.401 246.794 441.744 250.2 426.801C250.2 426.801 255 420.401 262.2 417.601C269.4 414.801 276.6 373.201 272.6 365.201C268.6 357.201 254.2 352.801 238.2 368.401C222.2 384.001 220.2 367.201 190.2 374.401z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M191.8 449.201C191.8 449.201 191 447.201 186.6 446.801C186.6 446.801 164.2 443.201 155.8 430.801C155.8 430.801 149 425.201 153.4 436.801C153.4 436.801 163.8 457.201 170.6 460.001C170.6 460.001 187 464.001 191.8 449.201z"/>
+ </g>
+ <g style="fill: #cc3f4c">
+ <path d="M271.742 385.229C272.401 377.323 274.354 368.709 272.6 365.201C266.154 352.307 249.181 357.695 238.2 368.401C222.2 384.001 220.2 367.201 190.2 374.401C190.2 374.401 188.455 388.364 189.295 398.376C189.295 398.376 226.6 386.801 227.4 392.401C227.4 392.401 229 389.201 238.2 389.201C247.4 389.201 270.142 388.029 271.742 385.229z"/>
+ </g>
+ <g style="stroke:#a51926; stroke-width:2">
+ <path d="M228.6 375.201C228.6 375.201 233.4 380.001 229.8 389.601C229.8 389.601 215.4 405.601 217.4 419.601"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M180.6 460.001C180.6 460.001 176.2 447.201 185 454.001C185 454.001 189.8 456.001 188.6 457.601C187.4 459.201 181.8 463.201 180.6 460.001z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M185.64 461.201C185.64 461.201 182.12 450.961 189.16 456.401C189.16 456.401 193.581 458.849 192.04 459.281C187.48 460.561 192.04 463.121 185.64 461.201z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M190.44 461.201C190.44 461.201 186.92 450.961 193.96 456.401C193.96 456.401 198.335 458.711 196.84 459.281C193.48 460.561 196.84 463.121 190.44 461.201z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M197.04 461.401C197.04 461.401 193.52 451.161 200.56 456.601C200.56 456.601 204.943 458.933 203.441 459.481C200.48 460.561 203.441 463.321 197.04 461.401z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M203.52 461.321C203.52 461.321 200 451.081 207.041 456.521C207.041 456.521 210.881 458.121 209.921 459.401C208.961 460.681 209.921 463.241 203.52 461.321z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M210.2 462.001C210.2 462.001 205.4 449.601 214.6 456.001C214.6 456.001 219.4 458.001 218.2 459.601C217 461.201 218.2 464.401 210.2 462.001z"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M181.8 444.801C181.8 444.801 195 442.001 201 445.201C201 445.201 207 446.401 208.2 446.001C209.4 445.601 212.6 445.201 212.6 445.201"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M215.8 453.601C215.8 453.601 227.8 440.001 239.8 444.401C246.816 446.974 245.8 443.601 246.6 440.801C247.4 438.001 247.6 433.801 252.6 430.801"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M233 437.601C233 437.601 229 426.801 226.2 439.601C223.4 452.401 220.2 456.001 218.6 458.801C218.6 458.801 218.6 464.001 227 463.601C227 463.601 237.8 463.201 238.2 460.401C238.6 457.601 237 446.001 233 437.601z"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M247 444.801C247 444.801 250.6 442.401 253 443.601"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M253.5 428.401C253.5 428.401 256.4 423.501 261.2 422.701"/>
+ </g>
+ <g style="fill: #b2b2b2">
+ <path d="M174.2 465.201C174.2 465.201 192.2 468.401 196.6 466.801C196.6 466.801 205.4 466.801 197 468.801C197 468.801 184.2 468.801 176.2 467.601C176.2 467.601 164.6 462.001 174.2 465.201z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M188.2 372.001C188.2 372.001 205.8 372.001 207.8 372.801C207.8 372.801 215 403.601 211.4 411.201C211.4 411.201 210.2 414.001 207.4 408.401C207.4 408.401 189 375.601 185.8 373.601C182.6 371.601 187 372.001 188.2 372.001z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M111.1 369.301C111.1 369.301 120 371.001 132.6 373.601C132.6 373.601 137.4 396.001 140.6 400.801C143.8 405.601 140.2 405.601 136.6 402.801C133 400.001 118.2 386.001 116.2 381.601C114.2 377.201 111.1 369.301 111.1 369.301z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M132.961 373.818C132.961 373.818 138.761 375.366 139.77 377.581C140.778 379.795 138.568 383.092 138.568 383.092C138.568 383.092 137.568 386.397 136.366 384.235C135.164 382.072 132.292 374.412 132.961 373.818z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M133 373.601C133 373.601 136.6 378.801 140.2 378.801C143.8 378.801 144.182 378.388 147 379.001C151.6 380.001 151.2 378.001 157.8 379.201C160.44 379.681 163 378.801 165.8 380.001C168.6 381.201 171.8 380.401 173 378.401C174.2 376.401 179 372.201 179 372.201C179 372.201 166.2 374.001 163.4 374.801C163.4 374.801 141 376.001 133 373.601z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M177.6 373.801C177.6 373.801 171.15 377.301 170.75 379.701C170.35 382.101 176 385.801 176 385.801C176 385.801 178.75 390.401 179.35 388.001C179.95 385.601 178.4 374.201 177.6 373.801z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M140.115 379.265C140.115 379.265 147.122 390.453 147.339 379.242C147.339 379.242 147.896 377.984 146.136 377.962C140.061 377.886 141.582 373.784 140.115 379.265z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M147.293 379.514C147.293 379.514 155.214 390.701 154.578 379.421C154.578 379.421 154.585 379.089 152.832 378.936C148.085 378.522 148.43 374.004 147.293 379.514z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M154.506 379.522C154.506 379.522 162.466 390.15 161.797 380.484C161.797 380.484 161.916 379.251 160.262 378.95C156.37 378.244 156.159 374.995 154.506 379.522z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M161.382 379.602C161.382 379.602 169.282 391.163 169.63 381.382C169.63 381.382 171.274 380.004 169.528 379.782C163.71 379.042 164.508 374.588 161.382 379.602z"/>
+ </g>
+ <g style="fill: #e5e5b2">
+ <path d="M125.208 383.132L117.55 381.601C114.95 376.601 112.85 370.451 112.85 370.451C112.85 370.451 119.2 371.451 131.7 374.251C131.7 374.251 132.576 377.569 134.048 383.364L125.208 383.132z"/>
+ </g>
+ <g style="fill: #e5e5b2">
+ <path d="M190.276 378.47C188.61 375.964 187.293 374.206 186.643 373.8C183.63 371.917 187.773 372.294 188.902 372.294C188.902 372.294 205.473 372.294 207.356 373.047C207.356 373.047 207.88 375.289 208.564 378.68C208.564 378.68 198.476 376.67 190.276 378.47z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M243.88 240.321C271.601 244.281 297.121 208.641 298.881 198.96C300.641 189.28 290.521 177.4 290.521 177.4C291.841 174.32 287.001 160.24 281.721 151C276.441 141.76 260.54 142.734 243 141.76C227.16 140.88 208.68 164.2 207.36 165.96C206.04 167.72 212.2 206.001 213.52 211.721C214.84 217.441 212.2 243.841 212.2 243.841C246.44 234.741 216.16 236.361 243.88 240.321z"/>
+ </g>
+ <g style="fill: #ea8e51">
+ <path d="M208.088 166.608C206.792 168.336 212.84 205.921 214.136 211.537C215.432 217.153 212.84 243.073 212.84 243.073C245.512 234.193 216.728 235.729 243.944 239.617C271.161 243.505 296.217 208.513 297.945 199.008C299.673 189.504 289.737 177.84 289.737 177.84C291.033 174.816 286.281 160.992 281.097 151.92C275.913 142.848 260.302 143.805 243.08 142.848C227.528 141.984 209.384 164.88 208.088 166.608z"/>
+ </g>
+ <g style="fill: #efaa7c">
+ <path d="M208.816 167.256C207.544 168.952 213.48 205.841 214.752 211.353C216.024 216.865 213.48 242.305 213.48 242.305C244.884 233.145 217.296 235.097 244.008 238.913C270.721 242.729 295.313 208.385 297.009 199.056C298.705 189.728 288.953 178.28 288.953 178.28C290.225 175.312 285.561 161.744 280.473 152.84C275.385 143.936 260.063 144.875 243.16 143.936C227.896 143.088 210.088 165.56 208.816 167.256z"/>
+ </g>
+ <g style="fill: #f4c6a8">
+ <path d="M209.544 167.904C208.296 169.568 214.12 205.761 215.368 211.169C216.616 216.577 214.12 241.537 214.12 241.537C243.556 232.497 217.864 234.465 244.072 238.209C270.281 241.953 294.409 208.257 296.073 199.105C297.737 189.952 288.169 178.72 288.169 178.72C289.417 175.808 284.841 162.496 279.849 153.76C274.857 145.024 259.824 145.945 243.24 145.024C228.264 144.192 210.792 166.24 209.544 167.904z"/>
+ </g>
+ <g style="fill: #f9e2d3">
+ <path d="M210.272 168.552C209.048 170.184 214.76 205.681 215.984 210.985C217.208 216.289 214.76 240.769 214.76 240.769C242.628 231.849 218.432 233.833 244.136 237.505C269.841 241.177 293.505 208.129 295.137 199.152C296.769 190.176 287.385 179.16 287.385 179.16C288.609 176.304 284.121 163.248 279.225 154.68C274.329 146.112 259.585 147.015 243.32 146.112C228.632 145.296 211.496 166.92 210.272 168.552z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M244.2 236.8C269.4 240.4 292.601 208 294.201 199.2C295.801 190.4 286.601 179.6 286.601 179.6C287.801 176.8 283.4 164 278.6 155.6C273.8 147.2 259.346 148.086 243.4 147.2C229 146.4 212.2 167.6 211 169.2C209.8 170.8 215.4 205.6 216.6 210.8C217.8 216 215.4 240 215.4 240C240.9 231.4 219 233.2 244.2 236.8z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M290.601 202.8C290.601 202.8 262.8 210.4 251.2 208.8C251.2 208.8 235.4 202.2 226.6 224C226.6 224 223 231.2 221 233.2C219 235.2 290.601 202.8 290.601 202.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M294.401 200.6C294.401 200.6 265.4 212.8 255.4 212.4C255.4 212.4 239 207.8 230.6 222.4C230.6 222.4 222.2 231.6 219 233.2C219 233.2 218.6 234.8 225 230.8L235.4 236C235.4 236 250.2 245.6 259.8 229.6C259.8 229.6 263.8 218.4 263.8 216.4C263.8 214.4 285 208.8 286.601 208.4C288.201 208 294.801 203.8 294.401 200.6z"/>
+ </g>
+ <g style="fill: #99cc32">
+ <path d="M247 236.514C240.128 236.514 231.755 232.649 231.755 226.4C231.755 220.152 240.128 213.887 247 213.887C253.874 213.887 259.446 218.952 259.446 225.2C259.446 231.449 253.874 236.514 247 236.514z"/>
+ </g>
+ <g style="fill: #659900">
+ <path d="M243.377 219.83C238.531 220.552 233.442 222.055 233.514 221.839C235.054 217.22 241.415 213.887 247 213.887C251.296 213.887 255.084 215.865 257.32 218.875C257.32 218.875 252.004 218.545 243.377 219.83z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M255.4 219.6C255.4 219.6 251 216.4 251 218.6C251 218.6 254.6 223 255.4 219.6z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M245.4 227.726C242.901 227.726 240.875 225.7 240.875 223.2C240.875 220.701 242.901 218.675 245.4 218.675C247.9 218.675 249.926 220.701 249.926 223.2C249.926 225.7 247.9 227.726 245.4 227.726z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M141.4 214.4C141.4 214.4 138.2 193.2 140.6 188.8C140.6 188.8 151.4 178.8 151 175.2C151 175.2 150.6 157.2 149.4 156.4C148.2 155.6 140.6 149.6 134.6 156C134.6 156 124.2 174 125 180.4L125 182.4C125 182.4 117.4 182 115.8 184C115.8 184 114.6 189.2 113.4 189.6C113.4 189.6 110.6 192 112.6 194.8C112.6 194.8 110.6 197.2 111 201.2L118.6 205.2C118.6 205.2 120.6 219.6 131.4 224.8C136.236 227.129 139.4 220.4 141.4 214.4z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M140.4 212.56C140.4 212.56 137.52 193.48 139.68 189.52C139.68 189.52 149.4 180.52 149.04 177.28C149.04 177.28 148.68 161.08 147.6 160.36C146.52 159.64 139.68 154.24 134.28 160C134.28 160 124.92 176.2 125.64 181.96L125.64 183.76C125.64 183.76 118.8 183.4 117.36 185.2C117.36 185.2 116.28 189.88 115.2 190.24C115.2 190.24 112.68 192.4 114.48 194.92C114.48 194.92 112.68 197.08 113.04 200.68L119.88 204.28C119.88 204.28 121.68 217.24 131.4 221.92C135.752 224.015 138.6 217.96 140.4 212.56z"/>
+ </g>
+ <g style="fill: #eb955c">
+ <path d="M148.95 157.39C147.86 156.53 140.37 150.76 134.52 157C134.52 157 124.38 174.55 125.16 180.79L125.16 182.74C125.16 182.74 117.75 182.35 116.19 184.3C116.19 184.3 115.02 189.37 113.85 189.76C113.85 189.76 111.12 192.1 113.07 194.83C113.07 194.83 111.12 197.17 111.51 201.07L118.92 204.97C118.92 204.97 120.87 219.01 131.4 224.08C136.114 226.35 139.2 219.79 141.15 213.94C141.15 213.94 138.03 193.27 140.37 188.98C140.37 188.98 150.9 179.23 150.51 175.72C150.51 175.72 150.12 158.17 148.95 157.39z"/>
+ </g>
+ <g style="fill: #f2b892">
+ <path d="M148.5 158.38C147.52 157.46 140.14 151.92 134.44 158C134.44 158 124.56 175.1 125.32 181.18L125.32 183.08C125.32 183.08 118.1 182.7 116.58 184.6C116.58 184.6 115.44 189.54 114.3 189.92C114.3 189.92 111.64 192.2 113.54 194.86C113.54 194.86 111.64 197.14 112.02 200.94L119.24 204.74C119.24 204.74 121.14 218.42 131.4 223.36C135.994 225.572 139 219.18 140.9 213.48C140.9 213.48 137.86 193.34 140.14 189.16C140.14 189.16 150.4 179.66 150.02 176.24C150.02 176.24 149.64 159.14 148.5 158.38z"/>
+ </g>
+ <g style="fill: #f8dcc8">
+ <path d="M148.05 159.37C147.18 158.39 139.91 153.08 134.36 159C134.36 159 124.74 175.65 125.48 181.57L125.48 183.42C125.48 183.42 118.45 183.05 116.97 184.9C116.97 184.9 115.86 189.71 114.75 190.08C114.75 190.08 112.16 192.3 114.01 194.89C114.01 194.89 112.16 197.11 112.53 200.81L119.56 204.51C119.56 204.51 121.41 217.83 131.4 222.64C135.873 224.794 138.8 218.57 140.65 213.02C140.65 213.02 137.69 193.41 139.91 189.34C139.91 189.34 149.9 180.09 149.53 176.76C149.53 176.76 149.16 160.11 148.05 159.37z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M140.4 212.46C140.4 212.46 137.52 193.48 139.68 189.52C139.68 189.52 149.4 180.52 149.04 177.28C149.04 177.28 148.68 161.08 147.6 160.36C146.84 159.32 139.68 154.24 134.28 160C134.28 160 124.92 176.2 125.64 181.96L125.64 183.76C125.64 183.76 118.8 183.4 117.36 185.2C117.36 185.2 116.28 189.88 115.2 190.24C115.2 190.24 112.68 192.4 114.48 194.92C114.48 194.92 112.68 197.08 113.04 200.68L119.88 204.28C119.88 204.28 121.68 217.24 131.4 221.92C135.752 224.015 138.6 217.86 140.4 212.46z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M137.3 206.2C137.3 206.2 115.7 196 114.8 195.2C114.8 195.2 123.9 203.4 124.7 203.4C125.5 203.4 137.3 206.2 137.3 206.2z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M120.2 200C120.2 200 138.6 203.6 138.6 208C138.6 210.912 138.357 224.331 133 222.8C124.6 220.4 128.2 206 120.2 200z"/>
+ </g>
+ <g style="fill: #99cc32">
+ <path d="M128.6 203.8C128.6 203.8 137.578 205.274 138.6 208C139.2 209.6 139.863 217.908 134.4 219C129.848 219.911 127.618 209.69 128.6 203.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M214.595 246.349C214.098 244.607 215.409 244.738 217.2 244.2C219.2 243.6 231.4 239.8 232.2 237.2C233 234.6 246.2 239 246.2 239C248 239.8 252.4 242.4 252.4 242.4C257.2 243.6 263.8 244 263.8 244C266.2 245 269.6 247.8 269.6 247.8C284.2 258 296.601 250.8 296.601 250.8C316.601 244.2 310.601 227 310.601 227C307.601 218 310.801 214.6 310.801 214.6C311.001 210.8 318.201 217.2 318.201 217.2C320.801 221.4 321.601 226.4 321.601 226.4C329.601 237.6 326.201 219.8 326.201 219.8C326.401 218.8 323.601 215.2 323.601 214C323.601 212.8 321.801 209.4 321.801 209.4C318.801 206 321.201 199 321.201 199C323.001 185.2 320.801 187 320.801 187C319.601 185.2 310.401 195.2 310.401 195.2C308.201 198.6 302.201 200.2 302.201 200.2C299.401 202 296.001 200.6 296.001 200.6C293.401 200.2 287.801 207.2 287.801 207.2C290.601 207 293.001 211.4 295.401 211.6C297.801 211.8 299.601 209.2 301.201 208.6C302.801 208 305.601 213.8 305.601 213.8C306.001 216.4 300.401 221.2 300.401 221.2C300.001 225.8 298.401 224.2 298.401 224.2C295.401 223.6 294.201 227.4 293.201 232C292.201 236.6 288.001 237 288.001 237C286.401 244.4 285.2 241.4 285.2 241.4C285 235.8 279 241.6 279 241.6C277.8 243.6 273.2 241.4 273.2 241.4C266.4 239.4 268.8 237.4 268.8 237.4C270.6 235.2 281.8 237.4 281.8 237.4C284 235.8 276 231.8 276 231.8C275.4 230 276.4 225.6 276.4 225.6C277.6 222.4 284.4 216.8 284.4 216.8C293.801 215.6 291.001 214 291.001 214C284.801 208.8 279 216.4 279 216.4C276.8 222.6 259.4 237.6 259.4 237.6C254.6 241 257.2 234.2 253.2 237.6C249.2 241 228.6 232 228.6 232C217.038 230.807 214.306 246.549 210.777 243.429C210.777 243.429 216.195 251.949 214.595 246.349z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M409.401 80C409.401 80 383.801 88 381.001 106.8C381.001 106.8 378.601 129.6 399.001 147.2C399.001 147.2 399.401 153.6 401.401 156.8C401.401 156.8 399.801 161.6 418.601 154L445.801 145.6C445.801 145.6 452.201 143.2 457.401 134.4C462.601 125.6 477.801 106.8 474.201 81.6C474.201 81.6 475.401 70.4 469.401 70C469.401 70 461.001 68.4 453.801 76C453.801 76 447.001 79.2 444.601 78.8L409.401 80z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M464.022 79.01C464.022 79.01 466.122 70.08 461.282 74.92C461.282 74.92 454.242 80.64 446.761 80.64C446.761 80.64 432.241 82.84 427.841 96.04C427.841 96.04 423.881 122.88 431.801 128.6C431.801 128.6 436.641 136.08 443.681 129.48C450.722 122.88 466.222 92.65 464.022 79.01z"/>
+ </g>
+ <g style="fill: #323232">
+ <path d="M463.648 79.368C463.648 79.368 465.738 70.624 460.986 75.376C460.986 75.376 454.074 80.992 446.729 80.992C446.729 80.992 432.473 83.152 428.153 96.112C428.153 96.112 424.265 122.464 432.041 128.08C432.041 128.08 436.793 135.424 443.705 128.944C450.618 122.464 465.808 92.76 463.648 79.368z"/>
+ </g>
+ <g style="fill: #666666">
+ <path d="M463.274 79.726C463.274 79.726 465.354 71.168 460.69 75.832C460.69 75.832 453.906 81.344 446.697 81.344C446.697 81.344 432.705 83.464 428.465 96.184C428.465 96.184 424.649 122.048 432.281 127.56C432.281 127.56 436.945 134.768 443.729 128.408C450.514 122.048 465.394 92.87 463.274 79.726z"/>
+ </g>
+ <g style="fill: #999999">
+ <path d="M462.9 80.084C462.9 80.084 464.97 71.712 460.394 76.288C460.394 76.288 453.738 81.696 446.665 81.696C446.665 81.696 432.937 83.776 428.777 96.256C428.777 96.256 425.033 121.632 432.521 127.04C432.521 127.04 437.097 134.112 443.753 127.872C450.41 121.632 464.98 92.98 462.9 80.084z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M462.526 80.442C462.526 80.442 464.586 72.256 460.098 76.744C460.098 76.744 453.569 82.048 446.633 82.048C446.633 82.048 433.169 84.088 429.089 96.328C429.089 96.328 425.417 121.216 432.761 126.52C432.761 126.52 437.249 133.456 443.777 127.336C450.305 121.216 464.566 93.09 462.526 80.442z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M462.151 80.8C462.151 80.8 464.201 72.8 459.801 77.2C459.801 77.2 453.401 82.4 446.601 82.4C446.601 82.4 433.401 84.4 429.401 96.4C429.401 96.4 425.801 120.8 433.001 126C433.001 126 437.401 132.8 443.801 126.8C450.201 120.8 464.151 93.2 462.151 80.8z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M250.6 284C250.6 284 230.2 264.8 222.2 264C222.2 264 187.8 260 173 278C173 278 190.6 257.6 218.2 263.2C218.2 263.2 196.6 258.8 184.2 262C184.2 262 167.4 262 157.8 276L155 280.8C155 280.8 159 266 177.4 260C177.4 260 200.2 255.2 211 260C211 260 189.4 253.2 179.4 255.2C179.4 255.2 149 252.8 136.2 279.2C136.2 279.2 140.2 264.8 155 257.6C155 257.6 168.6 248.8 189 251.6C189 251.6 203.4 254.8 208.6 257.2C213.8 259.6 212.6 256.8 204.2 252C204.2 252 198.6 242 184.6 242.4C184.6 242.4 141.8 246 131.4 258C131.4 258 145 246.8 155.4 244C155.4 244 177.8 236 186.2 236.8C186.2 236.8 211 237.8 218.6 233.8C218.6 233.8 207.4 238.8 210.6 242C213.8 245.2 220.6 252.8 220.6 254C220.6 255.2 244.8 277.3 248.4 281.7L250.6 284z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M389 478C389 478 373.5 441.5 361 432C361 432 387 448 390.5 466C390.5 466 390.5 476 389 478z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M436 485.5C436 485.5 409.5 430.5 391 406.5C391 406.5 434.5 444 439.5 470.5L440 476L437 473.5C437 473.5 436.5 482.5 436 485.5z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M492.5 437C492.5 437 430 377.5 428.5 375C428.5 375 489 441 492 448.5C492 448.5 490 439.5 492.5 437z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M304 480.5C304 480.5 323.5 428.5 342.5 451C342.5 451 357.5 461 357 464C357 464 353 457.5 335 458C335 458 316 455 304 480.5z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M494.5 353C494.5 353 449.5 324.5 442 323C430.193 320.639 491.5 352 496.5 362.5C496.5 362.5 498.5 360 494.5 353z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M343.801 459.601C343.801 459.601 364.201 457.601 371.001 450.801L375.401 454.401L393.001 416.001L396.601 421.201C396.601 421.201 411.001 406.401 410.201 398.401C409.401 390.401 423.001 404.401 423.001 404.401C423.001 404.401 422.201 392.801 429.401 399.601C429.401 399.601 427.001 384.001 435.401 392.001C435.401 392.001 424.864 361.844 447.401 387.601C453.001 394.001 448.601 387.201 448.601 387.201C448.601 387.201 422.601 339.201 444.201 353.601C444.201 353.601 446.201 330.801 445.001 326.401C443.801 322.001 441.801 299.6 437.001 294.4C432.201 289.2 437.401 287.6 443.001 292.8C443.001 292.8 431.801 268.8 445.001 280.8C445.001 280.8 441.401 265.6 437.001 262.8C437.001 262.8 431.401 245.6 446.601 256.4C446.601 256.4 442.201 244 439.001 240.8C439.001 240.8 427.401 213.2 434.601 218L439.001 221.6C439.001 221.6 432.201 207.6 438.601 212C445.001 216.4 445.001 216 445.001 216C445.001 216 423.801 182.8 444.201 200.4C444.201 200.4 436.042 186.482 432.601 179.6C432.601 179.6 413.801 159.2 428.201 165.6L433.001 167.2C433.001 167.2 424.201 157.2 416.201 155.6C408.201 154 418.601 147.6 425.001 149.6C431.401 151.6 447.001 159.2 447.001 159.2C447.001 159.2 459.801 178 463.801 178.4C463.801 178.4 443.801 170.8 449.801 178.8C449.801 178.8 464.201 192.8 457.001 192.4C457.001 192.4 451.001 199.6 455.801 208.4C455.801 208.4 437.342 190.009 452.201 215.6L459.001 232C459.001 232 434.601 207.2 445.801 229.2C445.801 229.2 463.001 252.8 465.001 253.2C467.001 253.6 471.401 262.4 471.401 262.4L467.001 260.4L472.201 269.2C472.201 269.2 461.001 257.2 467.001 270.4L472.601 284.8C472.601 284.8 452.201 262.8 465.801 292.4C465.801 292.4 449.401 287.2 458.201 304.4C458.201 304.4 456.601 320.401 457.001 325.601C457.401 330.801 458.601 359.201 454.201 367.201C449.801 375.201 460.201 394.401 462.201 398.401C464.201 402.401 467.801 413.201 459.001 404.001C450.201 394.801 454.601 400.401 456.601 409.201C458.601 418.001 464.601 433.601 463.801 439.201C463.801 439.201 462.601 440.401 459.401 436.801C459.401 436.801 444.601 414.001 446.201 428.401C446.201 428.401 445.001 436.401 441.801 445.201C441.801 445.201 438.601 456.001 438.601 447.201C438.601 447.201 435.401 430.401 432.601 438.001C429.801 445.601 426.201 451.601 423.401 454.001C420.601 456.401 415.401 433.601 414.201 444.001C414.201 444.001 402.201 431.601 397.401 448.001L385.801 464.401C385.801 464.401 385.401 452.001 384.201 458.001C384.201 458.001 354.201 464.001 343.801 459.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M309.401 102.8C309.401 102.8 297.801 94.8 293.801 95.2C289.801 95.6 321.401 86.4 362.601 114C362.601 114 367.401 116.8 371.001 116.4C371.001 116.4 374.201 118.8 371.401 122.4C371.401 122.4 362.601 132 373.801 143.2C373.801 143.2 392.201 150 386.601 141.2C386.601 141.2 397.401 145.2 399.801 149.2C402.201 153.2 401.001 149.2 401.001 149.2C401.001 149.2 394.601 142 388.601 136.8C388.601 136.8 383.401 134.8 380.601 126.4C377.801 118 375.401 108 379.801 104.8C379.801 104.8 375.801 109.2 376.601 105.2C377.401 101.2 381.001 97.6 382.601 97.2C384.201 96.8 400.601 81 407.401 80.6C407.401 80.6 398.201 82 395.201 81C392.201 80 365.601 68.6 359.601 67.4C359.601 67.4 342.801 60.8 354.801 62.8C354.801 62.8 390.601 66.6 408.801 79.8C408.801 79.8 401.601 71.4 383.201 64.4C383.201 64.4 361.001 51.8 325.801 56.8C325.801 56.8 308.001 60 300.201 61.8C300.201 61.8 297.601 61.2 297.001 60.8C296.401 60.4 284.6 51.4 257 58.4C257 58.4 240 63 231.4 67.8C231.4 67.8 216.2 69 212.6 72.2C212.6 72.2 194 86.8 192 87.6C190 88.4 178.6 96 177.8 96.4C177.8 96.4 202.4 89.8 204.8 87.4C207.2 85 224.6 82.4 227 83.8C229.4 85.2 237.8 84.6 228.2 85.2C228.2 85.2 303.801 100 304.601 102C305.401 104 309.401 102.8 309.401 102.8z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M380.801 93.6C380.801 93.6 370.601 86.2 368.601 86.2C366.601 86.2 354.201 76 350.001 76.4C345.801 76.8 333.601 66.8 306.201 75C306.201 75 305.601 73 309.201 72.2C309.201 72.2 315.601 70 316.001 69.4C316.001 69.4 336.201 65.2 343.401 68.8C343.401 68.8 352.601 71.4 358.801 77.6C358.801 77.6 370.001 80.8 373.201 79.8C373.201 79.8 382.001 82 382.401 83.8C382.401 83.8 388.201 86.8 386.401 89.4C386.401 89.4 386.801 91 380.801 93.6z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M368.33 91.491C369.137 92.123 370.156 92.221 370.761 93.03C370.995 93.344 370.706 93.67 370.391 93.767C369.348 94.084 368.292 93.514 367.15 94.102C366.748 94.309 366.106 94.127 365.553 93.978C363.921 93.537 362.092 93.512 360.401 94.2C358.416 93.071 356.056 93.655 353.975 92.654C353.917 92.627 353.695 92.973 353.621 92.946C350.575 91.801 346.832 92.084 344.401 89.8C341.973 89.388 339.616 88.926 337.188 88.246C335.37 87.737 333.961 86.748 332.341 85.916C330.964 85.208 329.507 84.686 327.973 84.314C326.11 83.862 324.279 83.974 322.386 83.454C322.293 83.429 322.101 83.773 322.019 83.746C321.695 83.638 321.405 83.055 321.234 83.108C319.553 83.63 318.065 82.658 316.401 83C315.223 81.776 313.495 82.021 311.949 81.579C308.985 80.731 305.831 82.001 302.801 81C306.914 79.158 311.601 80.39 315.663 78.321C317.991 77.135 320.653 78.237 323.223 77.477C323.71 77.333 324.401 77.131 324.801 77.8C324.935 77.665 325.117 77.426 325.175 77.454C327.625 78.611 329.94 79.885 332.422 80.951C332.763 81.097 333.295 80.865 333.547 81.067C335.067 82.283 337.01 82.18 338.401 83.4C340.099 82.898 341.892 83.278 343.621 82.654C343.698 82.627 343.932 82.968 343.965 82.946C345.095 82.198 346.25 82.469 347.142 82.773C347.48 82.888 348.143 83.135 348.448 83.209C349.574 83.485 350.43 83.965 351.609 84.148C351.723 84.166 351.908 83.826 351.98 83.854C353.103 84.292 354.145 84.236 354.801 85.4C354.936 85.265 355.101 85.027 355.183 85.054C356.21 85.392 356.859 86.147 357.96 86.388C358.445 86.494 359.057 87.12 359.633 87.296C362.025 88.027 363.868 89.556 366.062 90.451C366.821 90.761 367.697 90.995 368.33 91.491z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M291.696 77.261C289.178 75.536 286.81 74.43 284.368 72.644C284.187 72.511 283.827 72.681 283.625 72.559C282.618 71.95 281.73 71.369 280.748 70.673C280.209 70.291 279.388 70.302 278.88 70.044C276.336 68.752 273.707 68.194 271.2 67C271.882 66.362 273.004 66.606 273.6 65.8C273.795 66.08 274.033 66.364 274.386 66.173C276.064 65.269 277.914 65.116 279.59 65.206C281.294 65.298 283.014 65.603 284.789 65.875C285.096 65.922 285.295 66.445 285.618 66.542C287.846 67.205 290.235 66.68 292.354 67.518C293.945 68.147 295.515 68.97 296.754 70.245C297.006 70.505 296.681 70.806 296.401 71C296.789 70.891 297.062 71.097 297.173 71.41C297.257 71.649 297.257 71.951 297.173 72.19C297.061 72.502 296.782 72.603 296.408 72.654C295.001 72.844 296.773 71.464 296.073 71.912C294.8 72.726 295.546 74.132 294.801 75.4C294.521 75.206 294.291 74.988 294.401 74.6C294.635 75.122 294.033 75.412 293.865 75.728C293.48 76.453 292.581 77.868 291.696 77.261z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M259.198 84.609C256.044 83.815 252.994 83.93 249.978 82.654C249.911 82.626 249.688 82.973 249.624 82.946C248.258 82.352 247.34 81.386 246.264 80.34C245.351 79.452 243.693 79.839 242.419 79.352C242.095 79.228 241.892 78.716 241.591 78.677C240.372 78.52 239.445 77.571 238.4 77C240.736 76.205 243.147 76.236 245.609 75.852C245.722 75.834 245.867 76.155 246 76.155C246.136 76.155 246.266 75.934 246.4 75.8C246.595 76.08 246.897 76.406 247.154 76.152C247.702 75.612 248.258 75.802 248.798 75.842C248.942 75.852 249.067 76.155 249.2 76.155C249.336 76.155 249.467 75.844 249.6 75.844C249.736 75.845 249.867 76.155 250 76.155C250.136 76.155 250.266 75.934 250.4 75.8C251.092 76.582 251.977 76.028 252.799 76.207C253.837 76.434 254.104 77.582 255.178 77.88C259.893 79.184 264.03 81.329 268.393 83.416C268.7 83.563 268.91 83.811 268.8 84.2C269.067 84.2 269.38 84.112 269.57 84.244C270.628 84.976 271.669 85.524 272.366 86.622C272.582 86.961 272.253 87.368 272.02 87.316C267.591 86.321 263.585 85.713 259.198 84.609z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M245.338 128.821C243.746 127.602 243.162 125.571 242.034 123.779C241.82 123.439 242.094 123.125 242.411 123.036C242.971 122.877 243.514 123.355 243.923 123.557C245.668 124.419 247.203 125.661 249.2 125.8C251.19 128.034 255.45 128.419 255.457 131.8C255.458 132.659 254.03 131.741 253.6 132.6C251.149 131.597 248.76 131.7 246.38 130.233C245.763 129.852 246.093 129.399 245.338 128.821z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M217.8 76.244C217.935 76.245 224.966 76.478 224.949 76.592C224.904 76.901 217.174 77.95 216.81 77.78C216.646 77.704 209.134 80.134 209 80C209.268 79.865 217.534 76.244 217.8 76.244z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M233.2 86C233.2 86 218.4 87.8 214 89C209.6 90.2 191 97.8 188 99.8C188 99.8 174.6 105.2 157.6 125.2C157.6 125.2 165.2 121.8 167.4 119C167.4 119 181 106.4 180.8 109C180.8 109 193 100.4 192.4 102.6C192.4 102.6 216.8 91.4 214.8 94.6C214.8 94.6 236.4 90 235.4 92C235.4 92 254.2 96.4 251.4 96.6C251.4 96.6 245.6 97.8 252 101.4C252 101.4 248.6 105.8 243.2 101.8C237.8 97.8 240.8 100 235.8 101C235.8 101 233.2 101.8 228.6 97.8C228.6 97.8 223 93.2 214.2 96.8C214.2 96.8 183.6 109.4 181.6 110C181.6 110 178 112.8 175.6 116.4C175.6 116.4 169.8 120.8 166.8 122.2C166.8 122.2 154 133.8 152.8 135.2C152.8 135.2 149.4 140.4 148.6 140.8C148.6 140.8 155 137 157 135C157 135 171 125 176.4 124.2C176.4 124.2 180.8 121.2 181.6 119.8C181.6 119.8 196 110.6 200.2 110.6C200.2 110.6 209.4 115.8 211.8 108.8C211.8 108.8 217.6 107 223.2 108.2C223.2 108.2 226.4 105.6 225.6 103.4C225.6 103.4 227.2 101.6 228.2 105.4C228.2 105.4 231.6 109 236.4 107C236.4 107 240.4 106.8 238.4 109.2C238.4 109.2 234 113 222.2 113.2C222.2 113.2 209.8 113.8 193.4 121.4C193.4 121.4 163.6 131.8 154.4 142.2C154.4 142.2 148 151 142.6 152.2C142.6 152.2 136.8 153 130.8 160.4C130.8 160.4 140.6 154.6 149.6 154.6C149.6 154.6 153.6 152.2 149.8 155.8C149.8 155.8 146.2 163.4 147.8 168.8C147.8 168.8 147.2 174 146.4 175.6C146.4 175.6 138.6 188.4 138.6 190.8C138.6 193.2 139.8 203 140.2 203.6C140.6 204.2 139.2 202 143 204.4C146.8 206.8 149.6 208.4 150.4 211.2C151.2 214 148.4 205.8 148.2 204C148 202.2 143.8 195 144.6 192.6C144.6 192.6 145.6 193.6 146.4 195C146.4 195 145.8 194.4 146.4 190.8C146.4 190.8 147.2 185.6 148.6 182.4C150 179.2 152 175.4 152.4 174.6C152.8 173.8 152.8 168 154.2 170.6L157.6 173.2C157.6 173.2 154.8 170.6 157 168.4C157 168.4 156 162.8 157.8 160.2C157.8 160.2 164.8 151.8 166.4 150.8C168 149.8 166.6 150.2 166.6 150.2C166.6 150.2 172.6 146 166.8 147.6C166.8 147.6 162.8 149.2 159.8 149.2C159.8 149.2 152.2 151.2 156.2 147C160.2 142.8 170.2 137.4 174 137.6L174.8 139.2L186 136.8L184.8 137.6C184.8 137.6 184.6 137.4 188.8 137C193 136.6 198.8 138 200.2 136.2C201.6 134.4 205 133.4 204.6 134.8C204.2 136.2 204 138.2 204 138.2C204 138.2 209 132.4 208.4 134.6C207.8 136.8 199.6 142 198.2 148.2L208.6 140L212.2 137C212.2 137 215.8 139.2 216 137.6C216.2 136 220.8 130.2 222 130.4C223.2 130.6 225.2 127.8 225 130.4C224.8 133 232.4 138.4 232.4 138.4C232.4 138.4 235.6 136.6 237 138C238.4 139.4 242.6 118.2 242.6 118.2L267.6 107.6L311.201 104.2L294.201 97.4L233.2 86z"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M251.4 285C251.4 285 236.4 268.2 228 265.6C228 265.6 214.6 258.8 190 266.6"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M224.8 264.2C224.8 264.2 199.6 256.2 184.2 260.4C184.2 260.4 165.8 262.4 157.4 276.2"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M221.2 263C221.2 263 204.2 255.8 189.4 253.6C189.4 253.6 172.8 251 156.2 258.2C156.2 258.2 144 264.2 138.6 274.4"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M222.2 263.4C222.2 263.4 206.8 252.4 205.8 251C205.8 251 198.8 240 185.8 239.6C185.8 239.6 164.4 240.4 147.2 248.4"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M220.895 254.407C222.437 255.87 249.4 284.8 249.4 284.8C284.6 321.401 256.6 287.2 256.6 287.2C249 282.4 239.8 263.6 239.8 263.6C238.6 260.8 253.8 270.8 253.8 270.8C257.8 271.6 271.4 290.8 271.4 290.8C264.6 288.4 269.4 295.6 269.4 295.6C272.2 297.6 292.601 313.201 292.601 313.201C296.201 317.201 300.201 318.801 300.201 318.801C314.201 313.601 307.801 326.801 307.801 326.801C310.201 333.601 315.801 322.001 315.801 322.001C327.001 305.2 310.601 307.601 310.601 307.601C280.6 310.401 273.8 294.4 273.8 294.4C271.4 292 280.2 294.4 280.2 294.4C288.601 296.4 273 282 273 282C275.4 282 284.6 288.8 284.6 288.8C295.001 298 297.001 296 297.001 296C315.001 287.2 325.401 294.8 325.401 294.8C327.401 296.4 321.801 303.2 323.401 308.401C325.001 313.601 329.801 326.001 329.801 326.001C327.401 327.601 327.801 338.401 327.801 338.401C344.601 361.601 335.001 359.601 335.001 359.601C319.401 359.201 334.201 366.801 334.201 366.801C337.401 368.801 346.201 376.001 346.201 376.001C343.401 374.801 341.801 380.001 341.801 380.001C346.601 384.001 343.801 388.801 343.801 388.801C337.801 390.001 336.601 394.001 336.601 394.001C343.401 402.001 333.401 402.401 333.401 402.401C337.001 406.801 332.201 418.801 332.201 418.801C327.401 418.801 321.001 424.401 321.001 424.401C323.401 429.201 313.001 434.801 313.001 434.801C304.601 436.401 307.401 443.201 307.401 443.201C299.401 449.201 297.001 465.201 297.001 465.201C296.201 475.601 293.801 478.801 299.001 476.801C304.201 474.801 303.401 462.401 303.401 462.401C298.601 446.801 341.401 430.801 341.401 430.801C345.401 429.201 346.201 424.001 346.201 424.001C348.201 424.401 357.001 432.001 357.001 432.001C364.601 443.201 365.001 434.001 365.001 434.001C366.201 430.401 364.601 424.401 364.601 424.401C370.601 402.801 356.601 396.401 356.601 396.401C346.601 362.801 360.601 371.201 360.601 371.201C363.401 376.801 374.201 382.001 374.201 382.001L377.801 379.601C376.201 374.801 384.601 368.801 384.601 368.801C387.401 375.201 393.401 367.201 393.401 367.201C397.001 342.801 409.401 357.201 409.401 357.201C413.401 358.401 414.601 351.601 414.601 351.601C418.201 341.201 414.601 327.601 414.601 327.601C418.201 327.201 427.801 333.201 427.801 333.201C430.601 329.601 421.401 312.801 425.401 315.201C429.401 317.601 433.801 319.201 433.801 319.201C434.601 317.201 424.601 304.801 424.601 304.801C420.201 302 415.001 281.6 415.001 281.6C422.201 285.2 412.201 270 412.201 270C412.201 266.8 418.201 255.6 418.201 255.6C417.401 248.8 418.201 249.2 418.201 249.2C421.001 250.4 429.001 252 422.201 245.6C415.401 239.2 423.001 234.4 423.001 234.4C427.401 231.6 413.801 232 413.801 232C408.601 227.6 409.001 223.6 409.001 223.6C417.001 225.6 402.601 211.2 400.201 207.6C397.801 204 407.401 198.8 407.401 198.8C420.601 195.2 409.001 192 409.001 192C389.401 192.4 400.201 181.6 400.201 181.6C406.201 182 404.601 179.6 404.601 179.6C399.401 178.4 389.801 172 389.801 172C385.801 168.4 389.401 169.2 389.401 169.2C406.201 170.4 377.401 159.2 377.401 159.2C385.401 159.2 367.401 148.8 367.401 148.8C365.401 147.2 362.201 139.6 362.201 139.6C356.201 134.4 351.401 127.6 351.401 127.6C351.001 123.2 346.201 118.4 346.201 118.4C334.601 104.8 329.001 105.2 329.001 105.2C314.201 101.6 309.001 102.4 309.001 102.4L256.2 106.8C229.8 119.6 237.6 140.6 237.6 140.6C244 149 253.2 145.2 253.2 145.2C257.8 139 269.4 141.2 269.4 141.2C289.801 144.4 287.201 140.8 287.201 140.8C284.801 136.2 268.6 130 268.4 129.4C268.2 128.8 259.4 125.4 259.4 125.4C256.4 124.2 252 115 252 115C248.8 111.6 264.6 117.4 264.6 117.4C263.4 118.4 270.8 122.4 270.8 122.4C288.201 121.4 298.801 132.2 298.801 132.2C309.601 148.8 309.801 140.6 309.801 140.6C312.601 131.2 300.801 110 300.801 110C301.201 108 309.401 114.6 309.401 114.6C310.801 112.6 311.601 118.4 311.601 118.4C311.801 120.8 315.601 128.8 315.601 128.8C318.401 141.8 322.001 134.4 322.001 134.4L326.601 143.8C328.001 146.4 322.001 154 322.001 154C321.801 156.8 322.601 156.6 317.001 164.2C311.401 171.8 314.801 176.2 314.801 176.2C313.401 182.8 322.201 182.4 322.201 182.4C324.801 184.6 328.201 184.6 328.201 184.6C330.001 186.6 332.401 186 332.401 186C334.001 182.2 340.201 184.2 340.201 184.2C341.601 181.8 349.801 181.4 349.801 181.4C350.801 178.8 351.201 177.2 354.601 176.6C358.001 176 333.401 133 333.401 133C339.801 132.2 331.601 119.8 331.601 119.8C329.401 113.2 340.801 127.8 343.001 129.2C345.201 130.6 346.201 132.8 344.601 132.6C343.001 132.4 341.201 134.6 342.601 134.8C344.001 135 357.001 150 360.401 160.2C363.801 170.4 369.801 174.4 376.001 180.4C382.201 186.4 381.401 210.6 381.401 210.6C381.001 219.4 387.001 230 387.001 230C389.001 233.8 384.801 252 384.801 252C382.801 254.2 384.201 255 384.201 255C385.201 256.2 392.001 269.4 392.001 269.4C390.201 269.2 393.801 272.8 393.801 272.8C399.001 278.8 392.601 275.8 392.601 275.8C386.601 274.2 393.601 284 393.601 284C394.801 285.8 385.801 281.2 385.801 281.2C376.601 280.6 388.201 287.8 388.201 287.8C396.801 295 385.401 290.6 385.401 290.6C380.801 288.8 384.001 295.6 384.001 295.6C387.201 297.2 404.401 304.2 404.401 304.2C404.801 308.001 401.801 313.001 401.801 313.001C402.201 317.001 400.001 320.401 400.001 320.401C398.801 328.601 398.201 329.401 398.201 329.401C394.001 329.601 386.601 343.401 386.601 343.401C384.801 346.001 374.601 358.001 374.601 358.001C372.601 365.001 354.601 357.801 354.601 357.801C348.001 361.201 350.001 357.801 350.001 357.801C349.601 355.601 354.401 349.601 354.401 349.601C361.401 347.001 358.801 336.201 358.801 336.201C362.801 334.801 351.601 332.001 351.801 330.801C352.001 329.601 357.801 328.201 357.801 328.201C365.801 326.201 361.401 323.801 361.401 323.801C360.801 319.801 363.801 314.201 363.801 314.201C375.401 313.401 363.801 297.2 363.801 297.2C353.001 289.6 352.001 283.8 352.001 283.8C364.601 275.6 356.401 263.2 356.601 259.6C356.801 256 358.001 234.4 358.001 234.4C356.001 228.2 353.001 214.6 353.001 214.6C355.201 209.4 362.601 196.8 362.601 196.8C365.401 192.6 374.201 187.8 372.001 184.8C369.801 181.8 362.001 183.6 362.001 183.6C354.201 182.2 354.801 187.4 354.801 187.4C353.201 188.4 352.401 193.4 352.401 193.4C351.68 201.333 342.801 207.6 342.801 207.6C331.601 213.8 340.801 217.8 340.801 217.8C346.801 224.4 337.001 224.6 337.001 224.6C326.001 222.8 334.201 233 334.201 233C345.001 245.8 342.001 248.6 342.001 248.6C331.801 249.6 344.401 258.8 344.401 258.8C344.401 258.8 343.601 256.8 343.801 258.6C344.001 260.4 347.001 264.6 347.801 266.6C348.601 268.6 344.601 268.8 344.601 268.8C345.201 278.4 329.801 274.2 329.801 274.2C329.801 274.2 329.801 274.2 328.201 274.4C326.601 274.6 315.401 273.8 309.601 271.6C303.801 269.4 297.001 269.4 297.001 269.4C297.001 269.4 293.001 271.2 285.4 271C277.8 270.8 269.8 273.6 269.8 273.6C265.4 273.2 274 268.8 274.2 269C274.4 269.2 280 263.6 272 264.2C250.203 265.835 239.4 255.6 239.4 255.6C237.4 254.2 234.8 251.4 234.8 251.4C224.8 249.4 236.2 263.8 236.2 263.8C237.4 265.2 236 266.2 236 266.2C235.2 264.6 227.4 259.2 227.4 259.2C224.589 258.227 223.226 256.893 220.895 254.407z"/>
+ </g>
+ <g style="fill: #4c0000">
+ <path d="M197 242.8C197 242.8 208.6 248.4 211.2 251.2C213.8 254 227.8 265.4 227.8 265.4C227.8 265.4 222.4 263.4 219.8 261.6C217.2 259.8 206.4 251.6 206.4 251.6C206.4 251.6 202.6 245.6 197 242.8z"/>
+ </g>
+ <g style="fill: #99cc32">
+ <path d="M138.991 211.603C139.328 211.455 138.804 208.743 138.6 208.2C137.578 205.474 128.6 204 128.6 204C128.373 205.365 128.318 206.961 128.424 208.599C128.424 208.599 133.292 214.118 138.991 211.603z"/>
+ </g>
+ <g style="fill: #659900">
+ <path d="M138.991 211.403C138.542 211.561 138.976 208.669 138.8 208.2C137.778 205.474 128.6 203.9 128.6 203.9C128.373 205.265 128.318 206.861 128.424 208.499C128.424 208.499 132.692 213.618 138.991 211.403z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M134.6 211.546C133.975 211.546 133.469 210.406 133.469 209C133.469 207.595 133.975 206.455 134.6 206.455C135.225 206.455 135.732 207.595 135.732 209C135.732 210.406 135.225 211.546 134.6 211.546z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M134.6 209z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M89 309.601C89 309.601 83.4 319.601 108.2 313.601C108.2 313.601 122.2 312.401 124.6 310.001C125.8 310.801 134.166 313.734 137 314.401C143.8 316.001 152.2 306 152.2 306C152.2 306 156.8 295.5 159.6 295.5C162.4 295.5 159.2 297.1 159.2 297.1C159.2 297.1 152.6 307.201 153 308.801C153 308.801 147.8 328.801 131.8 329.601C131.8 329.601 115.65 330.551 117 336.401C117 336.401 125.8 334.001 128.2 336.401C128.2 336.401 139 336.001 131 342.401L124.2 354.001C124.2 354.001 124.34 357.919 114.2 354.401C104.4 351.001 94.1 338.101 94.1 338.101C94.1 338.101 78.15 323.551 89 309.601z"/>
+ </g>
+ <g style="fill: #e59999">
+ <path d="M87.8 313.601C87.8 313.601 85.8 323.201 122.6 312.801C122.6 312.801 127 312.801 129.4 313.601C131.8 314.401 143.8 317.201 145.8 316.001C145.8 316.001 138.6 329.601 127 328.001C127 328.001 113.8 329.601 114.2 334.401C114.2 334.401 118.2 341.601 123 344.001C123 344.001 125.8 346.401 125.4 349.601C125 352.801 122.2 354.401 120.2 355.201C118.2 356.001 115 352.801 113.4 352.801C111.8 352.801 103.4 346.401 99 341.601C94.6 336.801 86.2 324.801 86.6 322.001C87 319.201 87.8 313.601 87.8 313.601z"/>
+ </g>
+ <g style="fill: #b26565">
+ <path d="M91 331.051C93.6 335.001 96.8 339.201 99 341.601C103.4 346.401 111.8 352.801 113.4 352.801C115 352.801 118.2 356.001 120.2 355.201C122.2 354.401 125 352.801 125.4 349.601C125.8 346.401 123 344.001 123 344.001C119.934 342.468 117.194 338.976 115.615 336.653C115.615 336.653 115.8 339.201 110.6 338.401C105.4 337.601 100.2 334.801 98.6 331.601C97 328.401 94.6 326.001 96.2 329.601C97.8 333.201 100.2 336.801 101.8 337.201C103.4 337.601 103 338.801 100.6 338.401C98.2 338.001 95.4 337.601 91 332.401z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M88.4 310.001C88.4 310.001 90.2 296.4 91.4 292.4C91.4 292.4 90.6 285.6 93 281.4C95.4 277.2 97.4 271 100.4 265.6C103.4 260.2 103.6 256.2 107.6 254.6C111.6 253 117.6 244.4 120.4 243.4C123.2 242.4 123 243.2 123 243.2C123 243.2 129.8 228.4 143.4 232.4C143.4 232.4 127.2 229.6 143 220.2C143 220.2 138.2 221.3 141.5 214.3C143.701 209.632 143.2 216.4 132.2 228.2C132.2 228.2 127.2 236.8 122 239.8C116.8 242.8 104.8 249.8 103.6 253.6C102.4 257.4 99.2 263.2 97.2 264.8C95.2 266.4 92.4 270.6 92 274C92 274 90.8 278 89.4 279.2C88 280.4 87.8 283.6 87.8 285.6C87.8 287.6 85.8 290.4 86 292.8C86 292.8 86.8 311.801 86.4 313.801L88.4 310.001z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M79.8 314.601C79.8 314.601 77.8 313.201 73.4 319.201C73.4 319.201 80.7 352.201 80.7 353.601C80.7 353.601 81.8 351.501 80.5 344.301C79.2 337.101 78.3 324.401 78.3 324.401L79.8 314.601z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M101.4 254C101.4 254 83.8 257.2 84.2 286.4L83.4 311.201C83.4 311.201 82.2 285.6 81 284C79.8 282.4 83.8 271.2 80.6 277.2C80.6 277.2 66.6 291.2 74.6 312.401C74.6 312.401 76.1 315.701 73.1 311.101C73.1 311.101 68.5 298.5 69.6 292.1C69.6 292.1 69.8 289.9 71.7 287.1C71.7 287.1 80.3 275.4 83 273.1C83 273.1 84.8 258.7 100.2 253.5C100.2 253.5 105.9 251.2 101.4 254z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M240.8 187.8C241.46 187.446 241.451 186.476 242.031 186.303C243.18 185.959 243.344 184.892 243.862 184.108C244.735 182.789 244.928 181.256 245.51 179.765C245.782 179.065 245.809 178.11 245.496 177.45C244.322 174.969 243.62 172.52 242.178 170.094C241.91 169.644 241.648 168.85 241.447 168.252C240.984 166.868 239.727 165.877 238.867 164.557C238.579 164.116 239.104 163.191 238.388 163.107C237.491 163.002 236.042 162.422 235.809 163.448C235.221 166.035 236.232 168.558 237.2 171C236.418 171.692 236.752 172.613 236.904 173.38C237.614 176.986 236.416 180.338 235.655 183.812C235.632 183.916 235.974 184.114 235.946 184.176C234.724 186.862 233.272 189.307 231.453 191.688C230.695 192.68 229.823 193.596 229.326 194.659C228.958 195.446 228.55 196.412 228.8 197.4C225.365 200.18 223.115 204.025 220.504 207.871C220.042 208.551 220.333 209.76 220.884 210.029C221.697 210.427 222.653 209.403 223.123 208.557C223.512 207.859 223.865 207.209 224.356 206.566C224.489 206.391 224.31 205.972 224.445 205.851C227.078 203.504 228.747 200.568 231.2 198.2C233.15 197.871 234.687 196.873 236.435 195.86C236.743 195.681 237.267 195.93 237.557 195.735C239.31 194.558 239.308 192.522 239.414 190.612C239.464 189.728 239.66 188.411 240.8 187.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M231.959 183.334C232.083 183.257 231.928 182.834 232.037 182.618C232.199 182.294 232.602 182.106 232.764 181.782C232.873 181.566 232.71 181.186 232.846 181.044C235.179 178.597 235.436 175.573 234.4 172.6C235.424 171.98 235.485 170.718 235.06 169.871C234.207 168.171 234.014 166.245 233.039 164.702C232.237 163.433 230.659 162.189 229.288 163.492C228.867 163.892 228.546 164.679 228.824 165.391C228.888 165.554 229.173 165.7 229.146 165.782C229.039 166.106 228.493 166.33 228.487 166.602C228.457 168.098 227.503 169.609 228.133 170.938C228.905 172.567 229.724 174.424 230.4 176.2C229.166 178.316 230.199 180.765 228.446 182.642C228.31 182.788 228.319 183.174 228.441 183.376C228.733 183.862 229.139 184.268 229.625 184.56C229.827 184.681 230.175 184.683 230.375 184.559C230.953 184.197 231.351 183.71 231.959 183.334z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M294.771 173.023C296.16 174.815 296.45 177.61 294.401 179C294.951 182.309 298.302 180.33 300.401 179.8C300.292 179.412 300.519 179.068 300.802 179.063C301.859 179.048 302.539 178.016 303.601 178.2C304.035 176.643 305.673 175.941 306.317 174.561C308.043 170.866 307.452 166.593 304.868 163.347C304.666 163.093 304.883 162.576 304.759 162.214C304.003 160.003 301.935 159.688 300.001 159C298.824 155.125 298.163 151.094 296.401 147.4C294.787 147.15 294.089 145.411 292.752 144.691C291.419 143.972 290.851 145.551 290.892 146.597C290.899 146.802 291.351 147.026 291.181 147.391C291.105 147.555 290.845 147.666 290.845 147.8C290.846 147.935 291.067 148.066 291.201 148.2C290.283 149.02 288.86 149.497 288.565 150.642C287.611 154.352 290.184 157.477 291.852 160.678C292.443 161.813 291.707 163.084 290.947 164.292C290.509 164.987 290.617 166.114 290.893 166.97C291.645 169.301 293.236 171.04 294.771 173.023z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M257.611 191.409C256.124 193.26 252.712 195.829 255.629 197.757C255.823 197.886 256.193 197.89 256.366 197.756C258.387 196.191 260.39 195.288 262.826 194.706C262.95 194.677 263.224 195.144 263.593 194.983C265.206 194.28 267.216 194.338 268.4 193C272.167 193.224 275.732 192.108 279.123 190.8C280.284 190.352 281.554 189.793 282.755 189.291C284.131 188.715 285.335 187.787 286.447 186.646C286.58 186.51 286.934 186.6 287.201 186.6C287.161 185.737 288.123 185.61 288.37 184.988C288.462 184.756 288.312 184.36 288.445 184.258C290.583 182.628 291.503 180.61 290.334 178.233C290.049 177.655 289.8 177.037 289.234 176.561C288.149 175.65 287.047 176.504 286 176.2C285.841 176.828 285.112 176.656 284.726 176.854C283.867 177.293 282.534 176.708 281.675 177.146C280.313 177.841 279.072 178.01 277.65 178.387C277.338 178.469 276.56 178.373 276.4 179C276.266 178.866 276.118 178.632 276.012 178.654C274.104 179.05 272.844 179.264 271.543 180.956C271.44 181.089 270.998 180.91 270.839 181.045C269.882 181.853 269.477 183.087 268.376 183.759C268.175 183.882 267.823 183.714 267.629 183.843C266.983 184.274 266.616 184.915 265.974 185.362C265.645 185.591 265.245 185.266 265.277 185.01C265.522 183.063 266.175 181.276 265.6 179.4C267.677 176.88 270.194 174.931 272 172.2C272.015 170.034 272.707 167.888 272.594 165.811C272.584 165.618 272.296 164.885 272.17 164.538C271.858 163.684 272.764 162.618 271.92 161.894C270.516 160.691 269.224 161.567 268.4 163C266.562 163.39 264.496 164.083 262.918 162.849C261.911 162.062 261.333 161.156 260.534 160.1C259.549 158.798 259.884 157.362 259.954 155.798C259.96 155.67 259.645 155.534 259.645 155.4C259.646 155.265 259.866 155.134 260 155C259.294 154.374 259.019 153.316 258 153C258.305 151.908 257.629 151.024 256.758 150.722C254.763 150.031 253.086 151.943 251.194 152.016C250.68 152.035 250.213 150.997 249.564 150.672C249.132 150.456 248.428 150.423 248.066 150.689C247.378 151.193 246.789 151.307 246.031 151.512C244.414 151.948 243.136 153.042 241.656 153.897C240.171 154.754 239.216 156.191 238.136 157.511C237.195 158.663 237.059 161.077 238.479 161.577C240.322 162.227 241.626 159.524 243.592 159.85C243.904 159.901 244.11 160.212 244 160.6C244.389 160.709 244.607 160.48 244.8 160.2C245.658 161.219 246.822 161.556 247.76 162.429C248.73 163.333 250.476 162.915 251.491 163.912C253.02 165.414 252.461 168.095 254.4 169.4C253.814 170.713 253.207 171.99 252.872 173.417C252.59 174.623 253.584 175.82 254.795 175.729C256.053 175.635 256.315 174.876 256.8 173.8C257.067 174.067 257.536 174.364 257.495 174.58C257.038 176.967 256.011 178.96 255.553 181.391C255.494 181.708 255.189 181.91 254.8 181.8C254.332 185.949 250.28 188.343 247.735 191.508C247.332 192.01 247.328 193.259 247.737 193.662C249.14 195.049 251.1 193.503 252.8 193C253.013 191.794 253.872 190.852 255.204 190.908C255.46 190.918 255.695 190.376 256.019 190.246C256.367 190.108 256.869 190.332 257.155 190.134C258.884 188.939 260.292 187.833 262.03 186.644C262.222 186.513 262.566 186.672 262.782 186.564C263.107 186.402 263.294 186.015 263.617 185.83C263.965 185.63 264.207 185.92 264.4 186.2C263.754 186.549 263.75 187.506 263.168 187.708C262.393 187.976 261.832 188.489 261.158 188.936C260.866 189.129 260.207 188.881 260.103 189.06C259.505 190.088 258.321 190.526 257.611 191.409z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M202.2 142C202.2 142 192.962 139.128 181.8 164.8C181.8 164.8 179.4 170 177 172C174.6 174 163.4 177.6 161.4 181.6L151 197.6C151 197.6 165.8 181.6 169 179.2C169 179.2 177 170.8 173.8 177.6C173.8 177.6 159.8 188.4 161 197.6C161 197.6 155.4 212 154.6 214C154.6 214 170.6 182 173 180.8C175.4 179.6 176.6 179.6 175.4 183.2C174.2 186.8 173.8 203.2 171 205.2C171 205.2 179 184.8 178.2 181.6C178.2 181.6 181.4 178 183.8 183.2L182.6 199.2L187 211.2C187 211.2 184.6 200 186.2 184.4C186.2 184.4 184.2 174 188.2 179.6C192.2 185.2 201.8 191.2 201.8 196C201.8 196 196.6 178.4 187.4 173.6L183.4 179.6L182.2 177.6C182.2 177.6 178.6 176.8 183 170C187.4 163.2 187 162.4 187 162.4C187 162.4 193.4 169.6 195 169.6C195 169.6 208.2 162 209.4 186.4C209.4 186.4 216.2 172 207 165.2C207 165.2 192.2 163.2 193.4 158L200.6 145.6C204.2 140.4 202.6 143.2 202.6 143.2z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M182.2 158.4C182.2 158.4 169.4 158.4 166.2 163.6L159 173.2C159 173.2 176.2 163.2 180.2 162C184.2 160.8 182.2 158.4 182.2 158.4z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M142.2 164.8C142.2 164.8 140.2 166 139.8 168.8C139.4 171.6 137 172 137.8 174.8C138.6 177.6 140.6 180 140.6 176C140.6 172 142.2 170 143 168.8C143.8 167.6 145.4 163.2 142.2 164.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M133.4 226C133.4 226 125 222 121.8 218.4C118.6 214.8 119.052 219.966 114.2 219.6C108.353 219.159 109.4 203.2 109.4 203.2L105.4 210.8C105.4 210.8 104.2 225.2 112.2 222.8C116.107 221.628 117.4 223.2 115.8 224C114.2 224.8 121.4 225.2 118.6 226.8C115.8 228.4 130.2 223.2 127.8 233.6L133.4 226z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M120.8 240.4C120.8 240.4 105.4 244.8 101.8 235.2C101.8 235.2 97 237.6 99.2 240.6C101.4 243.6 102.6 244 102.6 244C102.6 244 108 245.2 107.4 246C106.8 246.8 104.4 250.2 104.4 250.2C104.4 250.2 114.6 244.2 120.8 240.4z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M349.201 318.601C348.774 320.735 347.103 321.536 345.201 322.201C343.284 321.243 340.686 318.137 338.801 320.201C338.327 319.721 337.548 319.661 337.204 318.999C336.739 318.101 337.011 317.055 336.669 316.257C336.124 314.985 335.415 313.619 335.601 312.201C337.407 311.489 338.002 309.583 337.528 307.82C337.459 307.563 337.03 307.366 337.23 307.017C337.416 306.694 337.734 306.467 338.001 306.2C337.866 306.335 337.721 306.568 337.61 306.548C337 306.442 337.124 305.805 337.254 305.418C337.839 303.672 339.853 303.408 341.201 304.6C341.457 304.035 341.966 304.229 342.401 304.2C342.351 303.621 342.759 303.094 342.957 302.674C343.475 301.576 345.104 302.682 345.901 302.07C346.977 301.245 348.04 300.546 349.118 301.149C350.927 302.162 352.636 303.374 353.835 305.115C354.41 305.949 354.65 307.23 354.592 308.188C354.554 308.835 353.173 308.483 352.83 309.412C352.185 311.16 354.016 311.679 354.772 313.017C354.97 313.366 354.706 313.67 354.391 313.768C353.98 313.896 353.196 313.707 353.334 314.16C354.306 317.353 351.55 318.031 349.201 318.601z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M339.6 338.201C339.593 336.463 337.992 334.707 339.201 333.001C339.336 333.135 339.467 333.356 339.601 333.356C339.736 333.356 339.867 333.135 340.001 333.001C341.496 335.217 345.148 336.145 345.006 338.991C344.984 339.438 343.897 340.356 344.801 341.001C342.988 342.349 342.933 344.719 342.001 346.601C340.763 346.315 339.551 345.952 338.401 345.401C338.753 343.915 338.636 342.231 339.456 340.911C339.89 340.213 339.603 339.134 339.6 338.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M173.4 329.201C173.4 329.201 156.542 339.337 170.6 324.001C179.4 314.401 189.4 308.801 189.4 308.801C189.4 308.801 199.8 304.4 203.4 303.2C207 302 222.2 296.8 225.4 296.4C228.6 296 238.2 292 245 296C251.8 300 259.8 304.4 259.8 304.4C259.8 304.4 243.4 296 239.8 298.4C236.2 300.8 229 300.4 223 303.6C223 303.6 208.2 308.001 205 310.001C201.8 312.001 191.4 323.601 189.8 322.801C188.2 322.001 190.2 321.601 191.4 318.801C192.6 316.001 190.6 314.401 182.6 320.801C174.6 327.201 173.4 329.201 173.4 329.201z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M180.805 323.234C180.805 323.234 182.215 310.194 190.693 311.859C190.693 311.859 198.919 307.689 201.641 305.721C201.641 305.721 209.78 304.019 211.09 303.402C229.569 294.702 244.288 299.221 244.835 298.101C245.381 296.982 265.006 304.099 268.615 308.185C269.006 308.628 258.384 302.588 248.686 300.697C240.413 299.083 218.811 300.944 207.905 306.48C204.932 307.989 195.987 313.773 193.456 313.662C190.925 313.55 180.805 323.234 180.805 323.234z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M177 348.801C177 348.801 161.8 346.401 178.6 344.801C178.6 344.801 196.6 342.801 200.6 337.601C200.6 337.601 214.2 328.401 217 328.001C219.8 327.601 249.8 320.401 250.2 318.001C250.6 315.601 256.2 315.601 257.8 316.401C259.4 317.201 258.6 318.401 255.8 319.201C253 320.001 221.8 336.401 215.4 337.601C209 338.801 197.4 346.401 192.6 347.601C187.8 348.801 177 348.801 177 348.801z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M196.52 341.403C196.52 341.403 187.938 340.574 196.539 339.755C196.539 339.755 205.355 336.331 207.403 333.668C207.403 333.668 214.367 328.957 215.8 328.753C217.234 328.548 231.194 324.861 231.399 323.633C231.604 322.404 265.67 309.823 270.09 313.013C273.001 315.114 263.1 313.437 253.466 317.847C252.111 318.467 218.258 333.054 214.981 333.668C211.704 334.283 205.765 338.174 203.307 338.788C200.85 339.403 196.52 341.403 196.52 341.403z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M188.6 343.601C188.6 343.601 193.8 343.201 192.6 344.801C191.4 346.401 189 345.601 189 345.601L188.6 343.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M181.4 345.201C181.4 345.201 186.6 344.801 185.4 346.401C184.2 348.001 181.8 347.201 181.8 347.201L181.4 345.201z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M171 346.801C171 346.801 176.2 346.401 175 348.001C173.8 349.601 171.4 348.801 171.4 348.801L171 346.801z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M163.4 347.601C163.4 347.601 168.6 347.201 167.4 348.801C166.2 350.401 163.8 349.601 163.8 349.601L163.4 347.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M201.8 308.001C201.8 308.001 206.2 308.001 205 309.601C203.8 311.201 200.6 310.801 200.6 310.801L201.8 308.001z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M191.8 313.601C191.8 313.601 198.306 311.46 195.8 314.801C194.6 316.401 192.2 315.601 192.2 315.601L191.8 313.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M180.6 318.401C180.6 318.401 185.8 318.001 184.6 319.601C183.4 321.201 181 320.401 181 320.401L180.6 318.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M173 324.401C173 324.401 178.2 324.001 177 325.601C175.8 327.201 173.4 326.401 173.4 326.401L173 324.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M166.2 329.201C166.2 329.201 171.4 328.801 170.2 330.401C169 332.001 166.6 331.201 166.6 331.201L166.2 329.201z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M205.282 335.598C205.282 335.598 212.203 335.066 210.606 337.195C209.009 339.325 205.814 338.26 205.814 338.26L205.282 335.598z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M215.682 330.798C215.682 330.798 222.603 330.266 221.006 332.395C219.409 334.525 216.214 333.46 216.214 333.46L215.682 330.798z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M226.482 326.398C226.482 326.398 233.403 325.866 231.806 327.995C230.209 330.125 227.014 329.06 227.014 329.06L226.482 326.398z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M236.882 321.598C236.882 321.598 243.803 321.066 242.206 323.195C240.609 325.325 237.414 324.26 237.414 324.26L236.882 321.598z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M209.282 303.598C209.282 303.598 216.203 303.066 214.606 305.195C213.009 307.325 209.014 307.06 209.014 307.06L209.282 303.598z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M219.282 300.398C219.282 300.398 226.203 299.866 224.606 301.995C223.009 304.125 218.614 303.86 218.614 303.86L219.282 300.398z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M196.6 340.401C196.6 340.401 201.8 340.001 200.6 341.601C199.4 343.201 197 342.401 197 342.401L196.6 340.401z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M123.4 241.2C123.4 241.2 119 250 118.6 253.2C118.6 253.2 119.4 244.4 120.6 242.4C121.8 240.4 123.4 241.2 123.4 241.2z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M105 255.2C105 255.2 101.8 269.6 102.2 272.4C102.2 272.4 101 260.8 101.4 259.6C101.8 258.4 105 255.2 105 255.2z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M125.8 180.6L125.6 183.8L123.4 184C123.4 184 137.6 196.6 138.2 204.2C138.2 204.2 139 196 125.8 180.6z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M129.784 181.865C129.353 181.449 129.572 180.704 129.164 180.444C128.355 179.928 130.462 179.871 130.234 179.155C129.851 177.949 130.038 177.928 129.916 176.652C129.859 176.054 130.447 174.514 130.832 174.074C132.278 172.422 130.954 169.49 132.594 167.939C132.898 167.65 133.274 167.098 133.559 166.68C134.218 165.717 135.402 165.229 136.352 164.401C136.67 164.125 136.469 163.298 137.038 163.39C137.752 163.505 138.993 163.375 138.948 164.216C138.835 166.336 137.506 168.056 136.226 169.724C136.677 170.428 136.219 171.063 135.935 171.62C134.6 174.24 134.789 177.081 134.615 179.921C134.61 180.006 134.303 180.084 134.311 180.137C134.664 182.472 135.248 184.671 136.127 186.9C136.493 187.83 136.964 188.725 137.114 189.652C137.225 190.338 137.328 191.171 136.92 191.876C138.955 194.766 137.646 197.417 138.815 200.948C139.022 201.573 140.714 203.487 140.251 203.326C137.738 202.455 137.626 202.057 137.449 201.304C137.303 200.681 136.973 199.304 136.736 198.702C136.672 198.538 136.501 196.654 136.423 196.532C134.91 194.15 136.268 194.326 134.898 191.968C133.47 191.288 132.504 190.184 131.381 189.022C131.183 188.818 132.326 188.094 132.145 187.881C131.053 186.592 129.9 185.825 130.236 184.332C130.391 183.642 130.528 182.585 129.784 181.865z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M126.2 183.6C126.2 183.6 126.6 190.4 129 192C131.4 193.6 130.2 192.8 127 191.6C123.8 190.4 125 189.6 125 189.6C125 189.6 122.2 190 124.6 192C127 194 130.6 196.4 129 196.4C127.4 196.4 119.8 192.4 119.8 189.6C119.8 186.8 118.8 182.7 118.8 182.7C118.8 182.7 119.9 181.9 124.7 182C124.7 182 126.1 182.7 126.2 183.6z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M125.4 202.2C125.4 202.2 116.88 199.409 98.4 202.8C98.4 202.8 107.431 200.722 126.2 203C136.5 204.25 125.4 202.2 125.4 202.2z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M127.498 202.129C127.498 202.129 119.252 198.611 100.547 200.392C100.547 200.392 109.725 199.103 128.226 202.995C138.38 205.131 127.498 202.129 127.498 202.129z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M129.286 202.222C129.286 202.222 121.324 198.101 102.539 198.486C102.539 198.486 111.787 197.882 129.948 203.14C139.914 206.025 129.286 202.222 129.286 202.222z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M130.556 202.445C130.556 202.445 123.732 198.138 106.858 197.04C106.858 197.04 115.197 197.21 131.078 203.319C139.794 206.672 130.556 202.445 130.556 202.445z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M245.84 212.961C245.84 212.961 244.91 213.605 245.124 212.424C245.339 211.243 273.547 198.073 277.161 198.323C277.161 198.323 246.913 211.529 245.84 212.961z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M242.446 213.6C242.446 213.6 241.57 214.315 241.691 213.121C241.812 211.927 268.899 196.582 272.521 196.548C272.521 196.548 243.404 212.089 242.446 213.6z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M239.16 214.975C239.16 214.975 238.332 215.747 238.374 214.547C238.416 213.348 258.233 197.851 268.045 195.977C268.045 195.977 250.015 204.104 239.16 214.975z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M236.284 216.838C236.284 216.838 235.539 217.532 235.577 216.453C235.615 215.373 253.449 201.426 262.28 199.74C262.28 199.74 246.054 207.054 236.284 216.838z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M204.6 364.801C204.6 364.801 189.4 362.401 206.2 360.801C206.2 360.801 224.2 358.801 228.2 353.601C228.2 353.601 241.8 344.401 244.6 344.001C247.4 343.601 263.8 340.001 264.2 337.601C264.6 335.201 270.6 332.801 272.2 333.601C273.8 334.401 273.8 343.601 271 344.401C268.2 345.201 249.4 352.401 243 353.601C236.6 354.801 225 362.401 220.2 363.601C215.4 364.801 204.6 364.801 204.6 364.801z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M277.6 327.401C277.6 327.401 274.6 329.001 273.4 331.601C273.4 331.601 267 342.201 252.8 345.401C252.8 345.401 229.8 354.401 222 356.401C222 356.401 208.6 361.401 201.2 360.601C201.2 360.601 194.2 360.801 200.4 362.401C200.4 362.401 220.6 360.401 224 358.601C224 358.601 239.6 353.401 242.6 350.801C245.6 348.201 263.8 343.201 266 341.201C268.2 339.201 278 330.801 277.6 327.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M218.882 358.911C218.882 358.911 224.111 358.685 222.958 360.234C221.805 361.784 219.357 360.91 219.357 360.91L218.882 358.911z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M211.68 360.263C211.68 360.263 216.908 360.037 215.756 361.586C214.603 363.136 212.155 362.263 212.155 362.263L211.68 360.263z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M201.251 361.511C201.251 361.511 206.48 361.284 205.327 362.834C204.174 364.383 201.726 363.51 201.726 363.51L201.251 361.511z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M193.617 362.055C193.617 362.055 198.846 361.829 197.693 363.378C196.54 364.928 194.092 364.054 194.092 364.054L193.617 362.055z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M235.415 351.513C235.415 351.513 242.375 351.212 240.84 353.274C239.306 355.336 236.047 354.174 236.047 354.174L235.415 351.513z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M245.73 347.088C245.73 347.088 251.689 343.787 251.155 348.849C250.885 351.405 246.362 349.749 246.362 349.749L245.73 347.088z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M254.862 344.274C254.862 344.274 262.021 340.573 260.287 346.035C259.509 348.485 255.493 346.935 255.493 346.935L254.862 344.274z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M264.376 339.449C264.376 339.449 268.735 334.548 269.801 341.21C270.207 343.748 265.008 342.11 265.008 342.11L264.376 339.449z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M226.834 355.997C226.834 355.997 232.062 355.77 230.91 357.32C229.757 358.869 227.308 357.996 227.308 357.996L226.834 355.997z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M262.434 234.603C262.434 234.603 261.708 235.268 261.707 234.197C261.707 233.127 279.191 219.863 288.034 218.479C288.034 218.479 271.935 225.208 262.434 234.603z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M265.4 298.4C265.4 298.4 287.401 320.801 296.601 324.401C296.601 324.401 305.801 335.601 301.801 361.601C301.801 361.601 298.601 369.201 295.401 348.401C295.401 348.401 298.601 323.201 287.401 339.201C287.401 339.201 279 329.301 285.4 329.601C285.4 329.601 288.601 331.601 289.001 330.001C289.401 328.401 281.4 314.801 264.2 300.4C247 286 265.4 298.4 265.4 298.4z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M207 337.201C207 337.201 206.8 335.401 208.6 336.201C210.4 337.001 304.601 343.201 336.201 367.201C336.201 367.201 291.001 344.001 207 337.201z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M217.4 332.801C217.4 332.801 217.2 331.001 219 331.801C220.8 332.601 357.401 331.601 381.001 364.001C381.001 364.001 359.001 338.801 217.4 332.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M229 328.801C229 328.801 228.8 327.001 230.6 327.801C232.4 328.601 405.801 315.601 429.401 348.001C429.401 348.001 419.801 322.401 229 328.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M239 324.001C239 324.001 238.8 322.201 240.6 323.001C242.4 323.801 364.601 285.2 388.201 317.601C388.201 317.601 374.801 293 239 324.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M181 346.801C181 346.801 180.8 345.001 182.6 345.801C184.4 346.601 202.2 348.801 204.2 387.601C204.2 387.601 197 345.601 181 346.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M172.2 348.401C172.2 348.401 172 346.601 173.8 347.401C175.6 348.201 189.8 343.601 187 382.401C187 382.401 188.2 347.201 172.2 348.401z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M164.2 348.801C164.2 348.801 164 347.001 165.8 347.801C167.6 348.601 183 349.201 170.6 371.601C170.6 371.601 180.2 347.601 164.2 348.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M211.526 304.465C211.526 304.465 211.082 306.464 212.631 305.247C228.699 292.622 261.141 233.72 316.826 228.086C316.826 228.086 278.518 215.976 211.526 304.465z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M222.726 302.665C222.726 302.665 221.363 301.472 223.231 300.847C225.099 300.222 337.541 227.72 376.826 235.686C376.826 235.686 349.719 228.176 222.726 302.665z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M201.885 308.767C201.885 308.767 201.376 310.366 203.087 309.39C212.062 304.27 215.677 247.059 259.254 245.804C259.254 245.804 226.843 231.09 201.885 308.767z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M181.962 319.793C181.962 319.793 180.885 321.079 182.838 320.825C193.084 319.493 214.489 278.222 258.928 283.301C258.928 283.301 226.962 268.955 181.962 319.793z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M193.2 313.667C193.2 313.667 192.389 315.136 194.258 314.511C204.057 311.237 217.141 266.625 261.729 263.078C261.729 263.078 227.603 255.135 193.2 313.667z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M174.922 324.912C174.922 324.912 174.049 325.954 175.631 325.748C183.93 324.669 201.268 291.24 237.264 295.354C237.264 295.354 211.371 283.734 174.922 324.912z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M167.323 330.821C167.323 330.821 166.318 331.866 167.909 331.748C172.077 331.439 202.715 298.36 221.183 313.862C221.183 313.862 209.168 295.139 167.323 330.821z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M236.855 298.898C236.855 298.898 235.654 297.543 237.586 297.158C239.518 296.774 360.221 239.061 398.184 251.927C398.184 251.927 372.243 241.053 236.855 298.898z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M203.4 363.201C203.4 363.201 203.2 361.401 205 362.201C206.8 363.001 222.2 363.601 209.8 386.001C209.8 386.001 219.4 362.001 203.4 363.201z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M213.8 361.601C213.8 361.601 213.6 359.801 215.4 360.601C217.2 361.401 235 363.601 237 402.401C237 402.401 229.8 360.401 213.8 361.601z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M220.6 360.001C220.6 360.001 220.4 358.201 222.2 359.001C224 359.801 248.6 363.201 272.2 395.601C272.2 395.601 236.6 358.801 220.6 360.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M228.225 357.972C228.225 357.972 227.788 356.214 229.678 356.768C231.568 357.322 252.002 355.423 290.099 389.599C290.099 389.599 243.924 354.656 228.225 357.972z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M238.625 353.572C238.625 353.572 238.188 351.814 240.078 352.368C241.968 352.922 276.802 357.423 328.499 392.399C328.499 392.399 254.324 350.256 238.625 353.572z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M198.2 342.001C198.2 342.001 198 340.201 199.8 341.001C201.6 341.801 255 344.401 285.4 371.201C285.4 371.201 250.499 346.426 198.2 342.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M188.2 346.001C188.2 346.001 188 344.201 189.8 345.001C191.6 345.801 216.2 349.201 239.8 381.601C239.8 381.601 204.2 344.801 188.2 346.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M249.503 348.962C249.503 348.962 248.938 347.241 250.864 347.655C252.79 348.068 287.86 350.004 341.981 381.098C341.981 381.098 264.317 346.704 249.503 348.962z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M257.903 346.562C257.903 346.562 257.338 344.841 259.264 345.255C261.19 345.668 296.26 347.604 350.381 378.698C350.381 378.698 273.317 343.904 257.903 346.562z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M267.503 341.562C267.503 341.562 266.938 339.841 268.864 340.255C270.79 340.668 313.86 345.004 403.582 379.298C403.582 379.298 282.917 338.904 267.503 341.562z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M156.2 348.401C156.2 348.401 161.4 348.001 160.2 349.601C159 351.201 156.6 350.401 156.6 350.401L156.2 348.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M187 362.401C187 362.401 192.2 362.001 191 363.601C189.8 365.201 187.4 364.401 187.4 364.401L187 362.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M178.2 362.001C178.2 362.001 183.4 361.601 182.2 363.201C181 364.801 178.6 364.001 178.6 364.001L178.2 362.001z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M82.831 350.182C82.831 350.182 87.876 351.505 86.218 352.624C84.561 353.744 82.554 352.202 82.554 352.202L82.831 350.182z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M84.831 340.582C84.831 340.582 89.876 341.905 88.218 343.024C86.561 344.144 84.554 342.602 84.554 342.602L84.831 340.582z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M77.631 336.182C77.631 336.182 82.676 337.505 81.018 338.624C79.361 339.744 77.354 338.202 77.354 338.202L77.631 336.182z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M157.4 411.201C157.4 411.201 155.8 411.201 151.8 413.201C149.8 413.201 138.6 416.801 133 426.801C133 426.801 145.4 417.201 157.4 411.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M245.116 503.847C245.257 504.105 245.312 504.525 245.604 504.542C246.262 504.582 247.495 504.883 247.37 504.247C246.522 499.941 245.648 495.004 241.515 493.197C240.876 492.918 239.434 493.331 239.36 494.215C239.233 495.739 239.116 497.088 239.425 498.554C239.725 499.975 241.883 499.985 242.8 498.601C243.736 500.273 244.168 502.116 245.116 503.847z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M234.038 508.581C234.786 509.994 234.659 511.853 236.074 512.416C236.814 512.71 238.664 511.735 238.246 510.661C237.444 508.6 237.056 506.361 235.667 504.55C235.467 504.288 235.707 503.755 235.547 503.427C234.953 502.207 233.808 501.472 232.4 501.801C231.285 504.004 232.433 506.133 233.955 507.842C234.091 507.994 233.925 508.37 234.038 508.581z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M194.436 503.391C194.328 503.014 194.29 502.551 194.455 502.23C194.986 501.197 195.779 500.075 195.442 499.053C195.094 497.997 193.978 498.179 193.328 498.748C192.193 499.742 192.144 501.568 191.453 502.927C191.257 503.313 191.308 503.886 190.867 504.277C190.393 504.698 189.953 506.222 190.049 506.793C190.102 507.106 189.919 517.014 190.141 516.751C190.76 516.018 193.81 506.284 193.879 505.392C193.936 504.661 194.668 504.196 194.436 503.391z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M168.798 496.599C171.432 494.1 174.222 491.139 173.78 487.427C173.664 486.451 171.889 486.978 171.702 487.824C170.9 491.449 168.861 494.11 166.293 496.502C164.097 498.549 162.235 504.893 162 505.401C165.697 500.145 167.954 497.399 168.798 496.599z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M155.224 490.635C155.747 490.265 155.445 489.774 155.662 489.442C156.615 487.984 157.916 486.738 157.934 485C157.937 484.723 157.559 484.414 157.224 484.638C156.947 484.822 156.605 484.952 156.497 485.082C154.467 487.531 153.067 490.202 151.624 493.014C151.441 493.371 150.297 497.862 150.61 497.973C150.849 498.058 152.569 493.877 152.779 493.763C154.042 493.077 154.054 491.462 155.224 490.635z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M171.957 510.179C172.401 509.31 173.977 508.108 173.864 507.219C173.746 506.291 174.214 504.848 173.302 505.536C172.045 506.484 168.596 507.833 168.326 513.641C168.3 514.212 171.274 511.519 171.957 510.179z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M186.4 493.001C186.8 492.333 187.508 492.806 187.967 492.543C188.615 492.171 189.226 491.613 189.518 490.964C190.488 488.815 192.257 486.995 192.4 484.601C190.909 483.196 190.23 485.236 189.6 486.201C188.277 484.554 187.278 486.428 185.978 486.947C185.908 486.975 185.695 486.628 185.62 486.655C184.443 487.095 183.763 488.176 182.765 488.957C182.594 489.091 182.189 488.911 182.042 489.047C181.39 489.65 180.417 489.975 180.137 490.657C179.027 493.364 175.887 495.459 174 503.001C174.381 503.91 178.512 496.359 178.999 495.661C179.835 494.465 179.953 497.322 181.229 496.656C181.28 496.629 181.466 496.867 181.6 497.001C181.794 496.721 182.012 496.492 182.4 496.601C182.4 496.201 182.266 495.645 182.467 495.486C183.704 494.509 183.62 493.441 184.4 492.201C184.858 492.99 185.919 492.271 186.4 493.001z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M246.2 547.401C246.2 547.401 253.6 527.001 249.2 515.801C249.2 515.801 260.6 537.401 256 548.601C256 548.601 255.6 538.201 251.6 533.201C251.6 533.201 247.6 546.001 246.2 547.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M231.4 544.801C231.4 544.801 236.8 536.001 228.8 517.601C228.8 517.601 228 538.001 221.2 549.001C221.2 549.001 235.4 528.801 231.4 544.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M221.4 542.801C221.4 542.801 221.2 522.801 221.6 519.801C221.6 519.801 217.8 536.401 207.6 546.001C207.6 546.001 222 534.001 221.4 542.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M211.8 510.801C211.8 510.801 217.8 524.401 207.8 542.801C207.8 542.801 214.2 530.601 209.4 523.601C209.4 523.601 212 520.201 211.8 510.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M192.6 542.401C192.6 542.401 191.6 526.801 193.4 524.601C193.4 524.601 193.6 518.201 193.2 517.201C193.2 517.201 197.2 511.001 197.4 518.401C197.4 518.401 198.8 526.201 201.6 530.801C201.6 530.801 205.2 536.201 205 542.601C205 542.601 195 512.401 192.6 542.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M189 514.801C189 514.801 182.4 525.601 180.6 544.601C180.6 544.601 179.2 538.401 183 524.001C183 524.001 187.2 508.601 189 514.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M167.2 534.601C167.2 534.601 172.2 529.201 173.6 524.201C173.6 524.201 177.2 508.401 170.8 517.001C170.8 517.001 171 525.001 162.8 532.401C162.8 532.401 167.6 530.001 167.2 534.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M161.4 529.601C161.4 529.601 164.8 512.201 165.6 511.401C165.6 511.401 167.4 508.001 164.6 511.201C164.6 511.201 155.8 530.401 151.8 537.001C151.8 537.001 159.8 527.801 161.4 529.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M155.6 513.001C155.6 513.001 167.2 490.601 145.4 516.401C145.4 516.401 156.4 506.601 155.6 513.001z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M140.2 498.401C140.2 498.401 145 479.601 147.6 479.801C147.6 479.801 155.8 470.801 149.2 481.401C149.2 481.401 143.2 491.001 143.8 500.801C143.8 500.801 143.2 491.201 140.2 498.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M470.5 487C470.5 487 458.5 477 456 473.5C456 473.5 469.5 492 469.5 499C469.5 499 472 491.5 470.5 487z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M476 465C476 465 455 450 451.5 442.5C451.5 442.5 478 472 478 476.5C478 476.5 478.5 467.5 476 465z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M493 311C493 311 481 303 479.5 305C479.5 305 490 311.5 492.5 320C492.5 320 491 311 493 311z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M501.5 391.5L484 379.5C484 379.5 503 396.5 503.5 400.5L501.5 391.5z"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M110.75 369L132.75 373.75"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M161 531C161 531 160.5 527.5 151.5 538"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M166.5 536C166.5 536 168.5 529.5 162 534"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M220.5 544.5C220.5 544.5 222 533.5 210.5 546.5"/>
+ </g>
+</svg>
diff --git a/result/noent/title.xml b/result/noent/title.xml
new file mode 100644
index 0000000..1b3fe07
--- /dev/null
+++ b/result/noent/title.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<title>my title</title>
diff --git a/result/noent/tstblanks.xml b/result/noent/tstblanks.xml
new file mode 100644
index 0000000..2561859
--- /dev/null
+++ b/result/noent/tstblanks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<a test="passed">content</a>
diff --git a/result/noent/utf16bebom.xml b/result/noent/utf16bebom.xml
new file mode 100644
index 0000000..3b5466d
--- /dev/null
+++ b/result/noent/utf16bebom.xml
Binary files differ
diff --git a/result/noent/utf16bom.xml b/result/noent/utf16bom.xml
new file mode 100644
index 0000000..6ea296e
--- /dev/null
+++ b/result/noent/utf16bom.xml
Binary files differ
diff --git a/result/noent/utf16lebom.xml b/result/noent/utf16lebom.xml
new file mode 100644
index 0000000..933640c
--- /dev/null
+++ b/result/noent/utf16lebom.xml
Binary files differ
diff --git a/result/noent/utf8bom.xml b/result/noent/utf8bom.xml
new file mode 100644
index 0000000..f4e5164
--- /dev/null
+++ b/result/noent/utf8bom.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<foo/>
diff --git a/result/noent/wap.xml b/result/noent/wap.xml
new file mode 100644
index 0000000..694b49f
--- /dev/null
+++ b/result/noent/wap.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://dark.wapit.com/vswap/tests/wap/DTD/wml11.dtd">
+<!-- (C) 1999, 2000 WAP Forum Ltd. All rights reserved -->
+<wml>
+<card id="card1">
+<onevent type="onenterforward">
+<go href="/vswap/run/result.eml">
+ <postfield name="var" value="$test"/>
+ <postfield name="v" value="dark"/>
+ <postfield name="ts" value="0003"/>
+ <postfield name="tp" value="wml/state/variables/parsing/1"/>
+ <postfield name="ti" value="1"/>
+ <postfield name="expected" value="var:pass"/>
+</go>
+</onevent>
+<p>If automatic testing failed, select <anchor>Failed<go href="/vswap/run/result.eml">
+ <postfield name="SUBMIT" value="No"/><postfield name="v" value="dark"/>
+ <postfield name="ts" value="0003"/>
+ <postfield name="tp" value="wml/state/variables/parsing/1"/>
+ <postfield name="ti" value="1"/>
+ <postfield name="expected" value="var:pass"/></go></anchor>.</p>
+</card>
+
+</wml>
diff --git a/result/noent/wml.xml b/result/noent/wml.xml
new file mode 100644
index 0000000..3a96562
--- /dev/null
+++ b/result/noent/wml.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
+<wml>
+ <card id="card1" title="Rubriques 75008">
+ <p>
+ <a href="rubmenu.asp?CP=75008&amp;RB=01">Cin&#xE9;ma</a><br/>
+ </p>
+
+</card>
+</wml>
diff --git a/result/noent/xhtml1 b/result/noent/xhtml1
new file mode 100644
index 0000000..d5179ee
--- /dev/null
+++ b/result/noent/xhtml1
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- 3.1.1 3/ -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <title>Virtual Library</title>
+ </head>
+ <!-- 4.8 -->
+ <script type="text/javascript"><![CDATA[
+ ... unescaped script content ...
+ ]]></script>
+ <body>
+ <p>Moved to <a href="http://example.org/">example.org</a>.</p>
+ </body>
+ <!-- C2 -->
+ <img src="foo.gif" alt="foo" />
+ <!-- C3 -->
+ <p></p>
+ <!-- C7 -->
+ <p lang="fr" xml:lang="fr">coucou</p>
+ <p xml:lang="fr" lang="fr">salut</p>
+ <!-- C8 -->
+ <p name="fragid" id="fragid">test</p>
+ <!-- 4.5 -->
+ <dl compact="compact">
+ <dt>Internet Engineering Task Force</dt>
+ <dd>An organization which establishes technical standards for the Internet</dd>
+ </dl>
+
+</html>
diff --git a/result/noent/xml1 b/result/noent/xml1
new file mode 100644
index 0000000..637d265
--- /dev/null
+++ b/result/noent/xml1
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE test [
+<!ENTITY example "<p>An ampersand (&#38;#38;) may be escaped
+ numerically (&#38;#38;#38;) or with a general entity
+ (&amp;amp;).</p>">
+]>
+<test><p>An ampersand (&amp;) may be escaped
+ numerically (&amp;#38;) or with a general entity
+ (&amp;amp;).</p></test>
diff --git a/result/noent/xml2 b/result/noent/xml2
new file mode 100644
index 0000000..6c39454
--- /dev/null
+++ b/result/noent/xml2
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE test [
+<!ELEMENT test (#PCDATA)>
+<!ENTITY % xx "&#37;zz;">
+<!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >'>
+<!ENTITY tricky "error-prone">
+]>
+<test>This sample shows a error-prone method.</test>
diff --git a/result/ns b/result/ns
new file mode 100644
index 0000000..94b927e
--- /dev/null
+++ b/result/ns
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata dia:testattr="test"/>
+</dia:diagram>
diff --git a/result/ns.rdr b/result/ns.rdr
new file mode 100644
index 0000000..513d135
--- /dev/null
+++ b/result/ns.rdr
@@ -0,0 +1,7 @@
+0 1 dia:diagram 0 0
+1 14 #text 0 1
+
+1 1 dia:diagramdata 1 0
+1 14 #text 0 1
+
+0 15 dia:diagram 0 0
diff --git a/result/ns.sax b/result/ns.sax
new file mode 100644
index 0000000..45e00f7
--- /dev/null
+++ b/result/ns.sax
@@ -0,0 +1,11 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(dia:diagram, xmlns:dia='http://www.lysator.liu.se/~alla/dia/')
+SAX.characters(
+ , 3)
+SAX.startElement(dia:diagramdata, dia:testattr='test')
+SAX.endElement(dia:diagramdata)
+SAX.characters(
+, 1)
+SAX.endElement(dia:diagram)
+SAX.endDocument()
diff --git a/result/ns2 b/result/ns2
new file mode 100644
index 0000000..b69ad82
--- /dev/null
+++ b/result/ns2
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/" dia:testattr="test"/>
diff --git a/result/ns2.rdr b/result/ns2.rdr
new file mode 100644
index 0000000..58ca0ac
--- /dev/null
+++ b/result/ns2.rdr
@@ -0,0 +1 @@
+0 1 dia:diagram 1 0
diff --git a/result/ns2.sax b/result/ns2.sax
new file mode 100644
index 0000000..64a3fe8
--- /dev/null
+++ b/result/ns2.sax
@@ -0,0 +1,5 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(dia:diagram, xmlns:dia='http://www.lysator.liu.se/~alla/dia/', dia:testattr='test')
+SAX.endElement(dia:diagram)
+SAX.endDocument()
diff --git a/result/ns3 b/result/ns3
new file mode 100644
index 0000000..b69ad82
--- /dev/null
+++ b/result/ns3
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/" dia:testattr="test"/>
diff --git a/result/ns3.rdr b/result/ns3.rdr
new file mode 100644
index 0000000..58ca0ac
--- /dev/null
+++ b/result/ns3.rdr
@@ -0,0 +1 @@
+0 1 dia:diagram 1 0
diff --git a/result/ns3.sax b/result/ns3.sax
new file mode 100644
index 0000000..421c7f0
--- /dev/null
+++ b/result/ns3.sax
@@ -0,0 +1,5 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(dia:diagram, dia:testattr='test', xmlns:dia='http://www.lysator.liu.se/~alla/dia/')
+SAX.endElement(dia:diagram)
+SAX.endDocument()
diff --git a/result/ns4 b/result/ns4
new file mode 100644
index 0000000..136bf92
--- /dev/null
+++ b/result/ns4
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<diagram testattr="test" xml:lang="en" xml:link="simple" xml:space="preserve"/>
diff --git a/result/ns4.rdr b/result/ns4.rdr
new file mode 100644
index 0000000..6f5dda7
--- /dev/null
+++ b/result/ns4.rdr
@@ -0,0 +1 @@
+0 1 diagram 1 0
diff --git a/result/ns4.sax b/result/ns4.sax
new file mode 100644
index 0000000..674b9a3
--- /dev/null
+++ b/result/ns4.sax
@@ -0,0 +1,5 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(diagram, testattr='test', xml:lang='en', xml:link='simple', xml:space='preserve')
+SAX.endElement(diagram)
+SAX.endDocument()
diff --git a/result/p3p b/result/p3p
new file mode 100644
index 0000000..31d5587
--- /dev/null
+++ b/result/p3p
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<RDF:RDF xmlns:p3p="http://www.w3.org/TR/1998/WD-P3P10-syntax#proposal.DTD" xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax#">
+<PROP realm="http://www.CoolCatalog.com/catalogue/" entity="CoolCatalog" agreeID="94df1293a3e519bb" assurance="http://www.TrustUs.org">
+ <USES>
+ <STATEMENT purp="2,3" recpnt="0" id="0" consq="a site with clothes you'd appreciate.">
+ <WITH><PREFIX name="User.">
+ <REF name="Name.First"/>
+ <REF name="Bdate.Year" optional="1"/>
+ <REF name="Gender"/>
+ </PREFIX></WITH>
+ </STATEMENT>
+ </USES>
+ <USES>
+ <STATEMENT action="read&amp;write" purp="0" recpnt="0" id="1">
+ <REF name="User.Shipping."/>
+ </STATEMENT>
+ </USES>
+ <DISCLOSURE discURI="http://www.CoolCatalog.com/PrivacyPractice.html" access="3" other="0,1"/>
+</PROP></RDF:RDF>
diff --git a/result/p3p.rdr b/result/p3p.rdr
new file mode 100644
index 0000000..0c01f50
--- /dev/null
+++ b/result/p3p.rdr
@@ -0,0 +1,55 @@
+0 1 RDF:RDF 0 0
+1 14 #text 0 1
+
+1 1 PROP 0 0
+2 14 #text 0 1
+
+2 1 USES 0 0
+3 14 #text 0 1
+
+3 1 STATEMENT 0 0
+4 14 #text 0 1
+
+4 1 WITH 0 0
+5 1 PREFIX 0 0
+6 14 #text 0 1
+
+6 1 REF 1 0
+6 14 #text 0 1
+
+6 1 REF 1 0
+6 14 #text 0 1
+
+6 1 REF 1 0
+6 14 #text 0 1
+
+5 15 PREFIX 0 0
+4 15 WITH 0 0
+4 14 #text 0 1
+
+3 15 STATEMENT 0 0
+3 14 #text 0 1
+
+2 15 USES 0 0
+2 14 #text 0 1
+
+2 1 USES 0 0
+3 14 #text 0 1
+
+3 1 STATEMENT 0 0
+4 14 #text 0 1
+
+4 1 REF 1 0
+4 14 #text 0 1
+
+3 15 STATEMENT 0 0
+3 14 #text 0 1
+
+2 15 USES 0 0
+2 14 #text 0 1
+
+2 1 DISCLOSURE 1 0
+2 14 #text 0 1
+
+1 15 PROP 0 0
+0 15 RDF:RDF 0 0
diff --git a/result/p3p.sax b/result/p3p.sax
new file mode 100644
index 0000000..2522809
--- /dev/null
+++ b/result/p3p.sax
@@ -0,0 +1,64 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(RDF:RDF, xmlns:p3p='http://www.w3.org/TR/1998/WD-P3P10-syntax#proposal.DTD', xmlns:RDF='http://www.w3.org/TR/WD-rdf-syntax#')
+SAX.characters(
+, 1)
+SAX.startElement(PROP, realm='http://www.CoolCatalog.com/catalogue/', entity='CoolCatalog', agreeID='94df1293a3e519bb', assurance='http://www.TrustUs.org')
+SAX.characters(
+ , 3)
+SAX.startElement(USES)
+SAX.characters(
+ , 3)
+SAX.startElement(STATEMENT, purp='2,3', recpnt='0', id='0', consq='a site with clothes you'd appreciate.')
+SAX.characters(
+ , 5)
+SAX.startElement(WITH)
+SAX.startElement(PREFIX, name='User.')
+SAX.characters(
+ , 6)
+SAX.startElement(REF, name='Name.First')
+SAX.endElement(REF)
+SAX.characters(
+ , 6)
+SAX.startElement(REF, name='Bdate.Year', optional='1')
+SAX.endElement(REF)
+SAX.characters(
+ , 6)
+SAX.startElement(REF, name='Gender')
+SAX.endElement(REF)
+SAX.characters(
+ , 5)
+SAX.endElement(PREFIX)
+SAX.endElement(WITH)
+SAX.characters(
+ , 3)
+SAX.endElement(STATEMENT)
+SAX.characters(
+ , 3)
+SAX.endElement(USES)
+SAX.characters(
+ , 3)
+SAX.startElement(USES)
+SAX.characters(
+ , 3)
+SAX.getEntity(amp)
+SAX.startElement(STATEMENT, action='read&#38;write', purp='0', recpnt='0', id='1')
+SAX.characters(
+ , 5)
+SAX.startElement(REF, name='User.Shipping.')
+SAX.endElement(REF)
+SAX.characters(
+ , 3)
+SAX.endElement(STATEMENT)
+SAX.characters(
+ , 3)
+SAX.endElement(USES)
+SAX.characters(
+ , 3)
+SAX.startElement(DISCLOSURE, discURI='http://www.CoolCatalog.com/PrivacyPractice.html', access='3', other='0,1')
+SAX.endElement(DISCLOSURE)
+SAX.characters(
+, 1)
+SAX.endElement(PROP)
+SAX.endElement(RDF:RDF)
+SAX.endDocument()
diff --git a/result/pi.xml b/result/pi.xml
new file mode 100644
index 0000000..48c7ff0
--- /dev/null
+++ b/result/pi.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<doc>
+<?document-start doc?>
+<empty/>
+<?document-end doc?>
+</doc>
diff --git a/result/pi.xml.rdr b/result/pi.xml.rdr
new file mode 100644
index 0000000..cdc8a8d
--- /dev/null
+++ b/result/pi.xml.rdr
@@ -0,0 +1,13 @@
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 7 document-start 0 1 doc
+1 14 #text 0 1
+
+1 1 empty 1 0
+1 14 #text 0 1
+
+1 7 document-end 0 1 doc
+1 14 #text 0 1
+
+0 15 doc 0 0
diff --git a/result/pi.xml.sax b/result/pi.xml.sax
new file mode 100644
index 0000000..2a1b9bd
--- /dev/null
+++ b/result/pi.xml.sax
@@ -0,0 +1,17 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(doc)
+SAX.characters(
+, 1)
+SAX.processingInstruction(document-start, doc)
+SAX.characters(
+, 1)
+SAX.startElement(empty)
+SAX.endElement(empty)
+SAX.characters(
+, 1)
+SAX.processingInstruction(document-end, doc)
+SAX.characters(
+, 1)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/pi2.xml b/result/pi2.xml
new file mode 100644
index 0000000..710d51c
--- /dev/null
+++ b/result/pi2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<?document-start doc?>
+<doc>
+<empty/>
+</doc>
+<?document-end doc?>
diff --git a/result/pi2.xml.rdr b/result/pi2.xml.rdr
new file mode 100644
index 0000000..52b3b9d
--- /dev/null
+++ b/result/pi2.xml.rdr
@@ -0,0 +1,9 @@
+0 7 document-start 0 1 doc
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 1 empty 1 0
+1 14 #text 0 1
+
+0 15 doc 0 0
+0 7 document-end 0 1 doc
diff --git a/result/pi2.xml.sax b/result/pi2.xml.sax
new file mode 100644
index 0000000..3100a17
--- /dev/null
+++ b/result/pi2.xml.sax
@@ -0,0 +1,13 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.processingInstruction(document-start, doc)
+SAX.startElement(doc)
+SAX.characters(
+, 1)
+SAX.startElement(empty)
+SAX.endElement(empty)
+SAX.characters(
+, 1)
+SAX.endElement(doc)
+SAX.processingInstruction(document-end, doc)
+SAX.endDocument()
diff --git a/result/rdf1 b/result/rdf1
new file mode 100644
index 0000000..d44c3c6
--- /dev/null
+++ b/result/rdf1
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<RDF:RDF xmlns:RPM="http://www.rpm.org/" xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax#">
+ <RDF:Description HREF="ftp://rufus.w3.org/linux/redhat/redhat-5.1/i386/RedHat/RPMS/rpm-2.5-2.i386.rpm">
+ <RPM:Name>rpm</RPM:Name>
+ <RPM:Version>2.5</RPM:Version>
+ <RPM:Release>2</RPM:Release>
+ <RPM:Arch>i386</RPM:Arch>
+ <RPM:Os>Linux</RPM:Os>
+ <RPM:Distribution>Manhattan </RPM:Distribution>
+ <RPM:Vendor>Red Hat Software</RPM:Vendor>
+ <RPM:Packager>Red Hat Software &lt;bugs@redhat.com&gt;</RPM:Packager>
+ <RPM:Group>Utilities/System</RPM:Group>
+ <RPM:Summary>Red Hat Package Manager</RPM:Summary>
+ <RPM:Description>RPM is a powerful package manager, which can be used to build, install,
+query, verify, update, and uninstall individual software packages. A
+package consists of an archive of files, and package information, including
+name, version, and description.</RPM:Description>
+ <RPM:Copyright>GPL</RPM:Copyright>
+ <RPM:Changelog>* Sun May 10 1998 Prospector System &lt;bugs@redhat.com&gt;
+ - translations modified for de, fr, tr
+</RPM:Changelog>
+ <RPM:Sources>rpm-2.5-2.src.rpm</RPM:Sources>
+ <RPM:SourcesFtp>ftp://ftp.redhat.com/pub/redhat/redhat-5.1/SRPMS</RPM:SourcesFtp>
+ <RPM:BuildDate>Sun May 10 14:52:32 1998</RPM:BuildDate>
+ <RPM:Date>894826352</RPM:Date>
+ <RPM:Size>850599</RPM:Size>
+ <RPM:BuildHost>porky.redhat.com</RPM:BuildHost>
+ <RPM:Provides>
+ <RDF:Bag>
+ <RPM:Resource>rpm</RPM:Resource>
+ </RDF:Bag>
+ </RPM:Provides>
+ <RPM:Requires>
+ <RDF:Bag>
+ <RPM:Resource>/bin/sh</RPM:Resource>
+ <RPM:Resource>ld-linux.so.2</RPM:Resource>
+ <RPM:Resource>libc.so.6</RPM:Resource>
+ <RPM:Resource>libdb.so.2</RPM:Resource>
+ <RPM:Resource>libz.so.1</RPM:Resource>
+ <RPM:Resource>/bin/bash</RPM:Resource>
+ <RPM:Resource>/bin/sh</RPM:Resource>
+ </RDF:Bag>
+ </RPM:Requires>
+ <RPM:Files>/bin/rpm
+/usr/bin/find-provides
+/usr/bin/find-requires
+/usr/bin/gendiff
+/usr/bin/rpm2cpio
+/usr/doc/rpm-2.5
+/usr/doc/rpm-2.5/CHANGES
+/usr/doc/rpm-2.5/RPM-PGP-KEY
+/usr/doc/rpm-2.5/buildroot
+/usr/doc/rpm-2.5/dependencies
+/usr/doc/rpm-2.5/format
+/usr/doc/rpm-2.5/groups
+/usr/doc/rpm-2.5/macros
+/usr/doc/rpm-2.5/queryformat
+/usr/doc/rpm-2.5/relocatable
+/usr/doc/rpm-2.5/signatures
+/usr/doc/rpm-2.5/spec
+/usr/doc/rpm-2.5/triggers
+/usr/lib/rpmpopt
+/usr/lib/rpmrc
+/usr/man/man8/rpm.8
+/usr/man/man8/rpm2cpio.8
+/usr/share/locale/de/LC_MESSAGES/rpm.mo
+/usr/share/locale/fr/LC_MESSAGES/rpm.mo
+/usr/share/locale/pt-br/LC_MESSAGES/rpm.mo
+/usr/share/locale/sv/LC_MESSAGES/rpm.mo
+/usr/share/locale/tr/LC_MESSAGES/rpm.mo
+/usr/src/redhat
+/usr/src/redhat/BUILD
+/usr/src/redhat/RPMS
+/usr/src/redhat/RPMS/i386
+/usr/src/redhat/RPMS/noarch
+/usr/src/redhat/SOURCES
+/usr/src/redhat/SPECS
+/usr/src/redhat/SRPMS
+</RPM:Files>
+ </RDF:Description>
+</RDF:RDF>
diff --git a/result/rdf1.rdr b/result/rdf1.rdr
new file mode 100644
index 0000000..b34399c
--- /dev/null
+++ b/result/rdf1.rdr
@@ -0,0 +1,214 @@
+0 1 RDF:RDF 0 0
+1 14 #text 0 1
+
+1 1 RDF:Description 0 0
+2 14 #text 0 1
+
+2 1 RPM:Name 0 0
+3 3 #text 0 1 rpm
+2 15 RPM:Name 0 0
+2 14 #text 0 1
+
+2 1 RPM:Version 0 0
+3 3 #text 0 1 2.5
+2 15 RPM:Version 0 0
+2 14 #text 0 1
+
+2 1 RPM:Release 0 0
+3 3 #text 0 1 2
+2 15 RPM:Release 0 0
+2 14 #text 0 1
+
+2 1 RPM:Arch 0 0
+3 3 #text 0 1 i386
+2 15 RPM:Arch 0 0
+2 14 #text 0 1
+
+2 1 RPM:Os 0 0
+3 3 #text 0 1 Linux
+2 15 RPM:Os 0 0
+2 14 #text 0 1
+
+2 1 RPM:Distribution 0 0
+3 3 #text 0 1 Manhattan
+2 15 RPM:Distribution 0 0
+2 14 #text 0 1
+
+2 1 RPM:Vendor 0 0
+3 3 #text 0 1 Red Hat Software
+2 15 RPM:Vendor 0 0
+2 14 #text 0 1
+
+2 1 RPM:Packager 0 0
+3 3 #text 0 1 Red Hat Software <bugs@redhat.com>
+2 15 RPM:Packager 0 0
+2 14 #text 0 1
+
+2 1 RPM:Group 0 0
+3 3 #text 0 1 Utilities/System
+2 15 RPM:Group 0 0
+2 14 #text 0 1
+
+2 1 RPM:Summary 0 0
+3 3 #text 0 1 Red Hat Package Manager
+2 15 RPM:Summary 0 0
+2 14 #text 0 1
+
+2 1 RPM:Description 0 0
+3 3 #text 0 1 RPM is a powerful package manager, which can be used to build, install,
+query, verify, update, and uninstall individual software packages. A
+package consists of an archive of files, and package information, including
+name, version, and description.
+2 15 RPM:Description 0 0
+2 14 #text 0 1
+
+2 1 RPM:Copyright 0 0
+3 3 #text 0 1 GPL
+2 15 RPM:Copyright 0 0
+2 14 #text 0 1
+
+2 1 RPM:Changelog 0 0
+3 3 #text 0 1 * Sun May 10 1998 Prospector System <bugs@redhat.com>
+ - translations modified for de, fr, tr
+
+2 15 RPM:Changelog 0 0
+2 14 #text 0 1
+
+2 1 RPM:Sources 0 0
+3 3 #text 0 1 rpm-2.5-2.src.rpm
+2 15 RPM:Sources 0 0
+2 14 #text 0 1
+
+2 1 RPM:SourcesFtp 0 0
+3 3 #text 0 1 ftp://ftp.redhat.com/pub/redhat/redhat-5.1/SRPMS
+2 15 RPM:SourcesFtp 0 0
+2 14 #text 0 1
+
+2 1 RPM:BuildDate 0 0
+3 3 #text 0 1 Sun May 10 14:52:32 1998
+2 15 RPM:BuildDate 0 0
+2 14 #text 0 1
+
+2 1 RPM:Date 0 0
+3 3 #text 0 1 894826352
+2 15 RPM:Date 0 0
+2 14 #text 0 1
+
+2 1 RPM:Size 0 0
+3 3 #text 0 1 850599
+2 15 RPM:Size 0 0
+2 14 #text 0 1
+
+2 1 RPM:BuildHost 0 0
+3 3 #text 0 1 porky.redhat.com
+2 15 RPM:BuildHost 0 0
+2 14 #text 0 1
+
+2 1 RPM:Provides 0 0
+3 14 #text 0 1
+
+3 1 RDF:Bag 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 rpm
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+3 15 RDF:Bag 0 0
+3 14 #text 0 1
+
+2 15 RPM:Provides 0 0
+2 14 #text 0 1
+
+2 1 RPM:Requires 0 0
+3 14 #text 0 1
+
+3 1 RDF:Bag 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 /bin/sh
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 ld-linux.so.2
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 libc.so.6
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 libdb.so.2
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 libz.so.1
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 /bin/bash
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 /bin/sh
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+3 15 RDF:Bag 0 0
+3 14 #text 0 1
+
+2 15 RPM:Requires 0 0
+2 14 #text 0 1
+
+2 1 RPM:Files 0 0
+3 3 #text 0 1 /bin/rpm
+/usr/bin/find-provides
+/usr/bin/find-requires
+/usr/bin/gendiff
+/usr/bin/rpm2cpio
+/usr/doc/rpm-2.5
+/usr/doc/rpm-2.5/CHANGES
+/usr/doc/rpm-2.5/RPM-PGP-KEY
+/usr/doc/rpm-2.5/buildroot
+/usr/doc/rpm-2.5/dependencies
+/usr/doc/rpm-2.5/format
+/usr/doc/rpm-2.5/groups
+/usr/doc/rpm-2.5/macros
+/usr/doc/rpm-2.5/queryformat
+/usr/doc/rpm-2.5/relocatable
+/usr/doc/rpm-2.5/signatures
+/usr/doc/rpm-2.5/spec
+/usr/doc/rpm-2.5/triggers
+/usr/lib/rpmpopt
+/usr/lib/rpmrc
+/usr/man/man8/rpm.8
+/usr/man/man8/rpm2cpio.8
+/usr/share/locale/de/LC_MESSAGES/rpm.mo
+/usr/share/locale/fr/LC_MESSAGES/rpm.mo
+/usr/share/locale/pt-br/LC_MESSAGES/rpm.mo
+/usr/share/locale/sv/LC_MESSAGES/rpm.mo
+/usr/share/locale/tr/LC_MESSAGES/rpm.mo
+/usr/src/redhat
+/usr/src/redhat/BUILD
+/usr/src/redhat/RPMS
+/usr/src/redhat/RPMS/i386
+/usr/src/redhat/RPMS/noarch
+/usr/src/redhat/SOURCES
+/usr/src/redhat/SPECS
+/usr/src/redhat/SRPMS
+
+2 15 RPM:Files 0 0
+2 14 #text 0 1
+
+1 15 RDF:Description 0 0
+1 14 #text 0 1
+
+0 15 RDF:RDF 0 0
diff --git a/result/rdf1.sax b/result/rdf1.sax
new file mode 100644
index 0000000..bc9d7b5
--- /dev/null
+++ b/result/rdf1.sax
@@ -0,0 +1,190 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(RDF:RDF, xmlns:RPM='http://www.rpm.org/', xmlns:RDF='http://www.w3.org/TR/WD-rdf-syntax#')
+SAX.characters(
+ , 3)
+SAX.startElement(RDF:Description, HREF='ftp://rufus.w3.org/linux/redhat/redhat-5.1/i386/RedHat/RPMS/rpm-2.5-2.i386.rpm')
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Name)
+SAX.characters(rpm, 3)
+SAX.endElement(RPM:Name)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Version)
+SAX.characters(2.5, 3)
+SAX.endElement(RPM:Version)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Release)
+SAX.characters(2, 1)
+SAX.endElement(RPM:Release)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Arch)
+SAX.characters(i386, 4)
+SAX.endElement(RPM:Arch)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Os)
+SAX.characters(Linux, 5)
+SAX.endElement(RPM:Os)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Distribution)
+SAX.characters(Manhattan , 10)
+SAX.endElement(RPM:Distribution)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Vendor)
+SAX.characters(Red Hat Software, 16)
+SAX.endElement(RPM:Vendor)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Packager)
+SAX.characters(Red Hat Software , 17)
+SAX.getEntity(lt)
+SAX.characters(<, 1)
+SAX.characters(bugs@redhat.com, 15)
+SAX.getEntity(gt)
+SAX.characters(>, 1)
+SAX.endElement(RPM:Packager)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Group)
+SAX.characters(Utilities/System, 16)
+SAX.endElement(RPM:Group)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Summary)
+SAX.characters(Red Hat Package Manager, 23)
+SAX.endElement(RPM:Summary)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Description)
+SAX.characters(RPM is a powerful package mana, 248)
+SAX.endElement(RPM:Description)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Copyright)
+SAX.characters(GPL, 3)
+SAX.endElement(RPM:Copyright)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Changelog)
+SAX.characters(* Sun May 10 1998 Prospector S, 36)
+SAX.getEntity(lt)
+SAX.characters(<, 1)
+SAX.characters(bugs@redhat.com, 15)
+SAX.getEntity(gt)
+SAX.characters(>, 1)
+SAX.characters(
+ - translations modified for, 42)
+SAX.endElement(RPM:Changelog)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Sources)
+SAX.characters(rpm-2.5-2.src.rpm, 17)
+SAX.endElement(RPM:Sources)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:SourcesFtp)
+SAX.characters(ftp://ftp.redhat.com/pub/redha, 48)
+SAX.endElement(RPM:SourcesFtp)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:BuildDate)
+SAX.characters(Sun May 10 14:52:32 1998, 24)
+SAX.endElement(RPM:BuildDate)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Date)
+SAX.characters(894826352, 9)
+SAX.endElement(RPM:Date)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Size)
+SAX.characters(850599, 6)
+SAX.endElement(RPM:Size)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:BuildHost)
+SAX.characters(porky.redhat.com, 16)
+SAX.endElement(RPM:BuildHost)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Provides)
+SAX.characters(
+ , 7)
+SAX.startElement(RDF:Bag)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource)
+SAX.characters(rpm, 3)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 7)
+SAX.endElement(RDF:Bag)
+SAX.characters(
+ , 5)
+SAX.endElement(RPM:Provides)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Requires)
+SAX.characters(
+ , 7)
+SAX.startElement(RDF:Bag)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource)
+SAX.characters(/bin/sh, 7)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource)
+SAX.characters(ld-linux.so.2, 13)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource)
+SAX.characters(libc.so.6, 9)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource)
+SAX.characters(libdb.so.2, 10)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource)
+SAX.characters(libz.so.1, 9)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource)
+SAX.characters(/bin/bash, 9)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource)
+SAX.characters(/bin/sh, 7)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 7)
+SAX.endElement(RDF:Bag)
+SAX.characters(
+ , 5)
+SAX.endElement(RPM:Requires)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Files)
+SAX.characters(/bin/rpm
+/usr/bin/find-provide, 885)
+SAX.endElement(RPM:Files)
+SAX.characters(
+ , 3)
+SAX.endElement(RDF:Description)
+SAX.characters(
+, 1)
+SAX.endElement(RDF:RDF)
+SAX.endDocument()
diff --git a/result/rdf2 b/result/rdf2
new file mode 100644
index 0000000..284946b
--- /dev/null
+++ b/result/rdf2
@@ -0,0 +1,1899 @@
+<?xml version="1.0"?>
+<RDF:RDF xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax#" xmlns:RPM="http://www.rpm.org/">
+ <RDF:Description about="ftp://rufus.w3.org/linux/dld/5.4/i386/RPMS/i386/ncurses4-4.2-3.i386.rpm">
+ <RPM:Name>ncurses4</RPM:Name>
+ <RPM:Version>4.2</RPM:Version>
+ <RPM:Release>3</RPM:Release>
+ <RPM:Arch>i386</RPM:Arch>
+ <RPM:Os>Linux</RPM:Os>
+ <RPM:Distribution>DLD</RPM:Distribution>
+ <RPM:Vendor>delix Computer GmbH</RPM:Vendor>
+ <RPM:Packager>Till Bubeck &lt;bubeck@delix.de&gt;, Ngo Than &lt;than@delix.de&gt;</RPM:Packager>
+ <RPM:Group>Libraries</RPM:Group>
+ <RPM:Summary>Bibliothek zur Ansteuerung von Terminals</RPM:Summary>
+ <RPM:Description>Diese Library stellt dem Programmierer vom Terminal unabh&#xE4;ngige
+Routinen zur Ansteuerung Ihres Bildschirms zur Verf&#xFC;gung, die
+speziell optimiert sind.
+Diese Version ist die 'new curses' (ncurses) Variante und ist der
+anerkannte Ersatz f&#xFC;r die klassische Curses-Library, die nicht mehr
+weiterentwickelt wird.</RPM:Description>
+ <RPM:Copyright>GPL</RPM:Copyright>
+ <RPM:Sources>ncurses4-4.2-3.src.rpm</RPM:Sources>
+ <RPM:BuildDate>Tue May 12 19:30:26 1998</RPM:BuildDate>
+ <RPM:Date>895015826</RPM:Date>
+ <RPM:Size>1373513</RPM:Size>
+ <RPM:BuildHost>erdbeere.delix.de</RPM:BuildHost>
+ <RPM:Provides>
+ <RDF:Bag>
+ <RPM:Resource href="../../../../../resources/ncurses4.rdf">ncurses4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libpanel.so.4.rdf">libpanel.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libncurses.so.4.rdf">libncurses.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libmenu.so.4.rdf">libmenu.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libform.so.4.rdf">libform.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/ncurses.rdf">ncurses</RPM:Resource>
+ </RDF:Bag>
+ </RPM:Provides>
+ <RPM:Files>/lib/libncurses.so.4
+/lib/libncurses.so.4.2
+/usr/doc/ncurses4-4.2-3
+/usr/doc/ncurses4-4.2-3/ANNOUNCE.gz
+/usr/doc/ncurses4-4.2-3/NEWS.gz
+/usr/doc/ncurses4-4.2-3/README.gz
+/usr/doc/ncurses4-4.2-3/TO-DO.gz
+/usr/lib/libform.so.4
+/usr/lib/libform.so.4.2
+/usr/lib/libmenu.so.4
+/usr/lib/libmenu.so.4.2
+/usr/lib/libpanel.so.4
+/usr/lib/libpanel.so.4.2
+/usr/share/ncurses4
+/usr/share/ncurses4/tabset
+/usr/share/ncurses4/tabset/std
+/usr/share/ncurses4/tabset/stdcrt
+/usr/share/ncurses4/tabset/vt100
+/usr/share/ncurses4/tabset/vt300
+/usr/share/ncurses4/terminfo
+/usr/share/ncurses4/terminfo/1
+/usr/share/ncurses4/terminfo/1/1178
+/usr/share/ncurses4/terminfo/1/1730-lm
+/usr/share/ncurses4/terminfo/2
+/usr/share/ncurses4/terminfo/2/2621
+/usr/share/ncurses4/terminfo/2/2621-wl
+/usr/share/ncurses4/terminfo/2/2621A
+/usr/share/ncurses4/terminfo/2/2621a
+/usr/share/ncurses4/terminfo/3
+/usr/share/ncurses4/terminfo/3/386at
+/usr/share/ncurses4/terminfo/3/3b1
+/usr/share/ncurses4/terminfo/4
+/usr/share/ncurses4/terminfo/4/4025ex
+/usr/share/ncurses4/terminfo/4/4027ex
+/usr/share/ncurses4/terminfo/4/4410-w
+/usr/share/ncurses4/terminfo/5
+/usr/share/ncurses4/terminfo/5/5051
+/usr/share/ncurses4/terminfo/5/5410-w
+/usr/share/ncurses4/terminfo/5/5620
+/usr/share/ncurses4/terminfo/5/5630-24
+/usr/share/ncurses4/terminfo/5/5630DMD-24
+/usr/share/ncurses4/terminfo/6
+/usr/share/ncurses4/terminfo/6/630-lm
+/usr/share/ncurses4/terminfo/6/630MTG-24
+/usr/share/ncurses4/terminfo/7
+/usr/share/ncurses4/terminfo/7/730MTG-24
+/usr/share/ncurses4/terminfo/7/730MTG-41
+/usr/share/ncurses4/terminfo/7/730MTG-41r
+/usr/share/ncurses4/terminfo/7/730MTGr
+/usr/share/ncurses4/terminfo/7/730MTGr-24
+/usr/share/ncurses4/terminfo/8
+/usr/share/ncurses4/terminfo/8/8510
+/usr/share/ncurses4/terminfo/9
+/usr/share/ncurses4/terminfo/9/955-hb
+/usr/share/ncurses4/terminfo/9/955-w
+/usr/share/ncurses4/terminfo/P
+/usr/share/ncurses4/terminfo/P/P12
+/usr/share/ncurses4/terminfo/P/P12-M
+/usr/share/ncurses4/terminfo/P/P12-M-W
+/usr/share/ncurses4/terminfo/P/P12-W
+/usr/share/ncurses4/terminfo/P/P14
+/usr/share/ncurses4/terminfo/P/P14-M
+/usr/share/ncurses4/terminfo/P/P14-M-W
+/usr/share/ncurses4/terminfo/P/P14-W
+/usr/share/ncurses4/terminfo/P/P4
+/usr/share/ncurses4/terminfo/P/P5
+/usr/share/ncurses4/terminfo/P/P7
+/usr/share/ncurses4/terminfo/P/P8
+/usr/share/ncurses4/terminfo/P/P8-W
+/usr/share/ncurses4/terminfo/P/P9
+/usr/share/ncurses4/terminfo/P/P9-8
+/usr/share/ncurses4/terminfo/P/P9-8-W
+/usr/share/ncurses4/terminfo/P/P9-W
+/usr/share/ncurses4/terminfo/X
+/usr/share/ncurses4/terminfo/X/X-hpterm
+/usr/share/ncurses4/terminfo/a
+/usr/share/ncurses4/terminfo/a/a210
+/usr/share/ncurses4/terminfo/a/a80
+/usr/share/ncurses4/terminfo/a/a980
+/usr/share/ncurses4/terminfo/a/aa4080
+/usr/share/ncurses4/terminfo/a/aaa
+/usr/share/ncurses4/terminfo/a/aaa+dec
+/usr/share/ncurses4/terminfo/a/aaa+rv
+/usr/share/ncurses4/terminfo/a/aaa+unk
+/usr/share/ncurses4/terminfo/a/aaa-18
+/usr/share/ncurses4/terminfo/a/aaa-18-rv
+/usr/share/ncurses4/terminfo/a/aaa-20
+/usr/share/ncurses4/terminfo/a/aaa-22
+/usr/share/ncurses4/terminfo/a/aaa-24
+/usr/share/ncurses4/terminfo/a/aaa-24-rv
+/usr/share/ncurses4/terminfo/a/aaa-26
+/usr/share/ncurses4/terminfo/a/aaa-28
+/usr/share/ncurses4/terminfo/a/aaa-30
+/usr/share/ncurses4/terminfo/a/aaa-30-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-rv
+/usr/share/ncurses4/terminfo/a/aaa-30-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-s
+/usr/share/ncurses4/terminfo/a/aaa-30-s-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-30-s-rv-ct
+/usr/share/ncurses4/terminfo/a/aaa-36
+/usr/share/ncurses4/terminfo/a/aaa-36-rv
+/usr/share/ncurses4/terminfo/a/aaa-40
+/usr/share/ncurses4/terminfo/a/aaa-40-rv
+/usr/share/ncurses4/terminfo/a/aaa-48
+/usr/share/ncurses4/terminfo/a/aaa-48-rv
+/usr/share/ncurses4/terminfo/a/aaa-60
+/usr/share/ncurses4/terminfo/a/aaa-60-dec-rv
+/usr/share/ncurses4/terminfo/a/aaa-60-rv
+/usr/share/ncurses4/terminfo/a/aaa-60-s
+/usr/share/ncurses4/terminfo/a/aaa-60-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-db
+/usr/share/ncurses4/terminfo/a/aaa-rv
+/usr/share/ncurses4/terminfo/a/aaa-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-rv-unk
+/usr/share/ncurses4/terminfo/a/aaa-s
+/usr/share/ncurses4/terminfo/a/aaa-s-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-s-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-unk
+/usr/share/ncurses4/terminfo/a/aas1901
+/usr/share/ncurses4/terminfo/a/abm80
+/usr/share/ncurses4/terminfo/a/abm85
+/usr/share/ncurses4/terminfo/a/abm85e
+/usr/share/ncurses4/terminfo/a/abm85h
+/usr/share/ncurses4/terminfo/a/abm85h-old
+/usr/share/ncurses4/terminfo/a/act4
+/usr/share/ncurses4/terminfo/a/act5
+/usr/share/ncurses4/terminfo/a/addrinfo
+/usr/share/ncurses4/terminfo/a/adds980
+/usr/share/ncurses4/terminfo/a/addsviewpoint
+/usr/share/ncurses4/terminfo/a/addsvp60
+/usr/share/ncurses4/terminfo/a/adm+sgr
+/usr/share/ncurses4/terminfo/a/adm1
+/usr/share/ncurses4/terminfo/a/adm11
+/usr/share/ncurses4/terminfo/a/adm1178
+/usr/share/ncurses4/terminfo/a/adm12
+/usr/share/ncurses4/terminfo/a/adm1a
+/usr/share/ncurses4/terminfo/a/adm2
+/usr/share/ncurses4/terminfo/a/adm20
+/usr/share/ncurses4/terminfo/a/adm21
+/usr/share/ncurses4/terminfo/a/adm22
+/usr/share/ncurses4/terminfo/a/adm3
+/usr/share/ncurses4/terminfo/a/adm31
+/usr/share/ncurses4/terminfo/a/adm31-old
+/usr/share/ncurses4/terminfo/a/adm36
+/usr/share/ncurses4/terminfo/a/adm3a
+/usr/share/ncurses4/terminfo/a/adm3a+
+/usr/share/ncurses4/terminfo/a/adm42
+/usr/share/ncurses4/terminfo/a/adm42-ns
+/usr/share/ncurses4/terminfo/a/adm5
+/usr/share/ncurses4/terminfo/a/aepro
+/usr/share/ncurses4/terminfo/a/aixterm-m
+/usr/share/ncurses4/terminfo/a/aixterm-m-old
+/usr/share/ncurses4/terminfo/a/aj
+/usr/share/ncurses4/terminfo/a/aj510
+/usr/share/ncurses4/terminfo/a/aj830
+/usr/share/ncurses4/terminfo/a/aj832
+/usr/share/ncurses4/terminfo/a/alt2
+/usr/share/ncurses4/terminfo/a/alt3
+/usr/share/ncurses4/terminfo/a/alt4
+/usr/share/ncurses4/terminfo/a/alt5
+/usr/share/ncurses4/terminfo/a/alt7
+/usr/share/ncurses4/terminfo/a/alt7pc
+/usr/share/ncurses4/terminfo/a/alto-h19
+/usr/share/ncurses4/terminfo/a/alto-heath
+/usr/share/ncurses4/terminfo/a/altoh19
+/usr/share/ncurses4/terminfo/a/altoheath
+/usr/share/ncurses4/terminfo/a/altos-2
+/usr/share/ncurses4/terminfo/a/altos-3
+/usr/share/ncurses4/terminfo/a/altos-4
+/usr/share/ncurses4/terminfo/a/altos-5
+/usr/share/ncurses4/terminfo/a/altos2
+/usr/share/ncurses4/terminfo/a/altos3
+/usr/share/ncurses4/terminfo/a/altos4
+/usr/share/ncurses4/terminfo/a/altos5
+/usr/share/ncurses4/terminfo/a/altos7
+/usr/share/ncurses4/terminfo/a/altos7pc
+/usr/share/ncurses4/terminfo/a/ambas
+/usr/share/ncurses4/terminfo/a/ambassador
+/usr/share/ncurses4/terminfo/a/amiga
+/usr/share/ncurses4/terminfo/a/amiga-h
+/usr/share/ncurses4/terminfo/a/amp219
+/usr/share/ncurses4/terminfo/a/amp219w
+/usr/share/ncurses4/terminfo/a/ampex-219
+/usr/share/ncurses4/terminfo/a/ampex-219w
+/usr/share/ncurses4/terminfo/a/ampex-232
+/usr/share/ncurses4/terminfo/a/ampex175
+/usr/share/ncurses4/terminfo/a/ampex175-b
+/usr/share/ncurses4/terminfo/a/ampex210
+/usr/share/ncurses4/terminfo/a/ampex219
+/usr/share/ncurses4/terminfo/a/ampex219w
+/usr/share/ncurses4/terminfo/a/ampex232
+/usr/share/ncurses4/terminfo/a/ampex232w
+/usr/share/ncurses4/terminfo/a/ampex80
+/usr/share/ncurses4/terminfo/a/annarbor4080
+/usr/share/ncurses4/terminfo/a/ansi
+/usr/share/ncurses4/terminfo/a/ansi-color-2-emx
+/usr/share/ncurses4/terminfo/a/ansi-color-3-emx
+/usr/share/ncurses4/terminfo/a/ansi-emx
+/usr/share/ncurses4/terminfo/a/ansi-m
+/usr/share/ncurses4/terminfo/a/ansi-mini
+/usr/share/ncurses4/terminfo/a/ansi-mono
+/usr/share/ncurses4/terminfo/a/ansi-nt
+/usr/share/ncurses4/terminfo/a/ansi.sys
+/usr/share/ncurses4/terminfo/a/ansi.sys-old
+/usr/share/ncurses4/terminfo/a/ansi.sysk
+/usr/share/ncurses4/terminfo/a/ansi43m
+/usr/share/ncurses4/terminfo/a/ansi77
+/usr/share/ncurses4/terminfo/a/ansi80x25
+/usr/share/ncurses4/terminfo/a/ansi80x25-mono
+/usr/share/ncurses4/terminfo/a/ansi80x25-raw
+/usr/share/ncurses4/terminfo/a/ansi80x30
+/usr/share/ncurses4/terminfo/a/ansi80x30-mono
+/usr/share/ncurses4/terminfo/a/ansi80x43
+/usr/share/ncurses4/terminfo/a/ansi80x43-mono
+/usr/share/ncurses4/terminfo/a/ansi80x50
+/usr/share/ncurses4/terminfo/a/ansi80x50-mono
+/usr/share/ncurses4/terminfo/a/ansi80x60
+/usr/share/ncurses4/terminfo/a/ansi80x60-mono
+/usr/share/ncurses4/terminfo/a/ansil
+/usr/share/ncurses4/terminfo/a/ansil-mono
+/usr/share/ncurses4/terminfo/a/ansis
+/usr/share/ncurses4/terminfo/a/ansis-mono
+/usr/share/ncurses4/terminfo/a/ansisysk
+/usr/share/ncurses4/terminfo/a/ansiw
+/usr/share/ncurses4/terminfo/a/ap-vm80
+/usr/share/ncurses4/terminfo/a/apl
+/usr/share/ncurses4/terminfo/a/apollo
+/usr/share/ncurses4/terminfo/a/apollo_15P
+/usr/share/ncurses4/terminfo/a/apollo_19L
+/usr/share/ncurses4/terminfo/a/apollo_color
+/usr/share/ncurses4/terminfo/a/apple-80
+/usr/share/ncurses4/terminfo/a/apple-ae
+/usr/share/ncurses4/terminfo/a/apple-soroc
+/usr/share/ncurses4/terminfo/a/apple-uterm
+/usr/share/ncurses4/terminfo/a/apple-uterm-vb
+/usr/share/ncurses4/terminfo/a/apple-videx
+/usr/share/ncurses4/terminfo/a/apple-videx2
+/usr/share/ncurses4/terminfo/a/apple-videx3
+/usr/share/ncurses4/terminfo/a/apple-vm80
+/usr/share/ncurses4/terminfo/a/apple2e
+/usr/share/ncurses4/terminfo/a/apple2e-p
+/usr/share/ncurses4/terminfo/a/apple80p
+/usr/share/ncurses4/terminfo/a/appleII
+/usr/share/ncurses4/terminfo/a/appleIIc
+/usr/share/ncurses4/terminfo/a/appleIIe
+/usr/share/ncurses4/terminfo/a/appleIIgs
+/usr/share/ncurses4/terminfo/a/at386
+/usr/share/ncurses4/terminfo/a/atari
+/usr/share/ncurses4/terminfo/a/att2300
+/usr/share/ncurses4/terminfo/a/att2350
+/usr/share/ncurses4/terminfo/a/att4410
+/usr/share/ncurses4/terminfo/a/att4410-w
+/usr/share/ncurses4/terminfo/a/att4410v1
+/usr/share/ncurses4/terminfo/a/att4410v1-w
+/usr/share/ncurses4/terminfo/a/att4415
+/usr/share/ncurses4/terminfo/a/att4415+nl
+/usr/share/ncurses4/terminfo/a/att4415-nl
+/usr/share/ncurses4/terminfo/a/att4415-rv
+/usr/share/ncurses4/terminfo/a/att4415-rv-nl
+/usr/share/ncurses4/terminfo/a/att4415-w
+/usr/share/ncurses4/terminfo/a/att4415-w-nl
+/usr/share/ncurses4/terminfo/a/att4415-w-rv
+/usr/share/ncurses4/terminfo/a/att4415-w-rv-n
+/usr/share/ncurses4/terminfo/a/att4418
+/usr/share/ncurses4/terminfo/a/att4418-w
+/usr/share/ncurses4/terminfo/a/att4420
+/usr/share/ncurses4/terminfo/a/att4424
+/usr/share/ncurses4/terminfo/a/att4424-1
+/usr/share/ncurses4/terminfo/a/att4424m
+/usr/share/ncurses4/terminfo/a/att4425
+/usr/share/ncurses4/terminfo/a/att4425-nl
+/usr/share/ncurses4/terminfo/a/att4425-w
+/usr/share/ncurses4/terminfo/a/att4426
+/usr/share/ncurses4/terminfo/a/att500
+/usr/share/ncurses4/terminfo/a/att505
+/usr/share/ncurses4/terminfo/a/att505-24
+/usr/share/ncurses4/terminfo/a/att510a
+/usr/share/ncurses4/terminfo/a/att510d
+/usr/share/ncurses4/terminfo/a/att513
+/usr/share/ncurses4/terminfo/a/att5310
+/usr/share/ncurses4/terminfo/a/att5320
+/usr/share/ncurses4/terminfo/a/att5410
+/usr/share/ncurses4/terminfo/a/att5410-w
+/usr/share/ncurses4/terminfo/a/att5410v1
+/usr/share/ncurses4/terminfo/a/att5410v1-w
+/usr/share/ncurses4/terminfo/a/att5418
+/usr/share/ncurses4/terminfo/a/att5418-w
+/usr/share/ncurses4/terminfo/a/att5420
+/usr/share/ncurses4/terminfo/a/att5420+nl
+/usr/share/ncurses4/terminfo/a/att5420-nl
+/usr/share/ncurses4/terminfo/a/att5420-rv
+/usr/share/ncurses4/terminfo/a/att5420-rv-nl
+/usr/share/ncurses4/terminfo/a/att5420-w
+/usr/share/ncurses4/terminfo/a/att5420-w-nl
+/usr/share/ncurses4/terminfo/a/att5420-w-rv
+/usr/share/ncurses4/terminfo/a/att5420-w-rv-n
+/usr/share/ncurses4/terminfo/a/att5420_2
+/usr/share/ncurses4/terminfo/a/att5420_2-w
+/usr/share/ncurses4/terminfo/a/att5425
+/usr/share/ncurses4/terminfo/a/att5425-nl
+/usr/share/ncurses4/terminfo/a/att5425-w
+/usr/share/ncurses4/terminfo/a/att5430
+/usr/share/ncurses4/terminfo/a/att5620
+/usr/share/ncurses4/terminfo/a/att5620-1
+/usr/share/ncurses4/terminfo/a/att5620-24
+/usr/share/ncurses4/terminfo/a/att5620-34
+/usr/share/ncurses4/terminfo/a/att5620-s
+/usr/share/ncurses4/terminfo/a/att605
+/usr/share/ncurses4/terminfo/a/att605-pc
+/usr/share/ncurses4/terminfo/a/att605-w
+/usr/share/ncurses4/terminfo/a/att610
+/usr/share/ncurses4/terminfo/a/att610-103k
+/usr/share/ncurses4/terminfo/a/att610-103k-w
+/usr/share/ncurses4/terminfo/a/att610-w
+/usr/share/ncurses4/terminfo/a/att615
+/usr/share/ncurses4/terminfo/a/att615-103k
+/usr/share/ncurses4/terminfo/a/att615-103k-w
+/usr/share/ncurses4/terminfo/a/att615-w
+/usr/share/ncurses4/terminfo/a/att620
+/usr/share/ncurses4/terminfo/a/att620-103k
+/usr/share/ncurses4/terminfo/a/att620-103k-w
+/usr/share/ncurses4/terminfo/a/att620-w
+/usr/share/ncurses4/terminfo/a/att630
+/usr/share/ncurses4/terminfo/a/att630-24
+/usr/share/ncurses4/terminfo/a/att6386
+/usr/share/ncurses4/terminfo/a/att730
+/usr/share/ncurses4/terminfo/a/att730-24
+/usr/share/ncurses4/terminfo/a/att730-41
+/usr/share/ncurses4/terminfo/a/att7300
+/usr/share/ncurses4/terminfo/a/att730r
+/usr/share/ncurses4/terminfo/a/att730r-24
+/usr/share/ncurses4/terminfo/a/att730r-41
+/usr/share/ncurses4/terminfo/a/avatar
+/usr/share/ncurses4/terminfo/a/avatar0
+/usr/share/ncurses4/terminfo/a/avatar0+
+/usr/share/ncurses4/terminfo/a/avatar1
+/usr/share/ncurses4/terminfo/a/avt
+/usr/share/ncurses4/terminfo/a/avt+s
+/usr/share/ncurses4/terminfo/a/avt-ns
+/usr/share/ncurses4/terminfo/a/avt-rv
+/usr/share/ncurses4/terminfo/a/avt-rv-ns
+/usr/share/ncurses4/terminfo/a/avt-rv-s
+/usr/share/ncurses4/terminfo/a/avt-s
+/usr/share/ncurses4/terminfo/a/avt-w
+/usr/share/ncurses4/terminfo/a/avt-w-ns
+/usr/share/ncurses4/terminfo/a/avt-w-rv
+/usr/share/ncurses4/terminfo/a/avt-w-rv-ns
+/usr/share/ncurses4/terminfo/a/avt-w-rv-s
+/usr/share/ncurses4/terminfo/a/avt-w-s
+/usr/share/ncurses4/terminfo/a/aws
+/usr/share/ncurses4/terminfo/a/awsc
+/usr/share/ncurses4/terminfo/b
+/usr/share/ncurses4/terminfo/b/b-128
+/usr/share/ncurses4/terminfo/b/bantam
+/usr/share/ncurses4/terminfo/b/basic4
+/usr/share/ncurses4/terminfo/b/basis
+/usr/share/ncurses4/terminfo/b/bct510a
+/usr/share/ncurses4/terminfo/b/bct510d
+/usr/share/ncurses4/terminfo/b/beacon
+/usr/share/ncurses4/terminfo/b/bee
+/usr/share/ncurses4/terminfo/b/beehive
+/usr/share/ncurses4/terminfo/b/beehive3
+/usr/share/ncurses4/terminfo/b/beehive4
+/usr/share/ncurses4/terminfo/b/beehiveIIIm
+/usr/share/ncurses4/terminfo/b/beterm
+/usr/share/ncurses4/terminfo/b/bg1.25
+/usr/share/ncurses4/terminfo/b/bg1.25nv
+/usr/share/ncurses4/terminfo/b/bg1.25rv
+/usr/share/ncurses4/terminfo/b/bg2.0
+/usr/share/ncurses4/terminfo/b/bg2.0nv
+/usr/share/ncurses4/terminfo/b/bg2.0rv
+/usr/share/ncurses4/terminfo/b/bg3.10
+/usr/share/ncurses4/terminfo/b/bg3.10nv
+/usr/share/ncurses4/terminfo/b/bg3.10rv
+/usr/share/ncurses4/terminfo/b/bh3m
+/usr/share/ncurses4/terminfo/b/bh4
+/usr/share/ncurses4/terminfo/b/bitgraph
+/usr/share/ncurses4/terminfo/b/blit
+/usr/share/ncurses4/terminfo/b/bobcat
+/usr/share/ncurses4/terminfo/b/bsdos
+/usr/share/ncurses4/terminfo/b/bsdos-bold
+/usr/share/ncurses4/terminfo/c
+/usr/share/ncurses4/terminfo/c/c100
+/usr/share/ncurses4/terminfo/c/c100-1p
+/usr/share/ncurses4/terminfo/c/c100-4p
+/usr/share/ncurses4/terminfo/c/c100-rv
+/usr/share/ncurses4/terminfo/c/c100-rv-4p
+/usr/share/ncurses4/terminfo/c/c104
+/usr/share/ncurses4/terminfo/c/c108
+/usr/share/ncurses4/terminfo/c/c108-4p
+/usr/share/ncurses4/terminfo/c/c108-8p
+/usr/share/ncurses4/terminfo/c/c108-rv
+/usr/share/ncurses4/terminfo/c/c108-rv-4p
+/usr/share/ncurses4/terminfo/c/c108-rv-8p
+/usr/share/ncurses4/terminfo/c/c108-w
+/usr/share/ncurses4/terminfo/c/c108-w-8p
+/usr/share/ncurses4/terminfo/c/c300
+/usr/share/ncurses4/terminfo/c/c301
+/usr/share/ncurses4/terminfo/c/c321
+/usr/share/ncurses4/terminfo/c/ca22851
+/usr/share/ncurses4/terminfo/c/cad68-2
+/usr/share/ncurses4/terminfo/c/cad68-3
+/usr/share/ncurses4/terminfo/c/cbblit
+/usr/share/ncurses4/terminfo/c/cbunix
+/usr/share/ncurses4/terminfo/c/cci
+/usr/share/ncurses4/terminfo/c/cci1
+/usr/share/ncurses4/terminfo/c/cdc456
+/usr/share/ncurses4/terminfo/c/cdc721
+/usr/share/ncurses4/terminfo/c/cdc721-esc
+/usr/share/ncurses4/terminfo/c/cdc721ll
+/usr/share/ncurses4/terminfo/c/cdc752
+/usr/share/ncurses4/terminfo/c/cdc756
+/usr/share/ncurses4/terminfo/c/cg7900
+/usr/share/ncurses4/terminfo/c/cgc2
+/usr/share/ncurses4/terminfo/c/cgc3
+/usr/share/ncurses4/terminfo/c/chromatics
+/usr/share/ncurses4/terminfo/c/ci8510
+/usr/share/ncurses4/terminfo/c/cit-80
+/usr/share/ncurses4/terminfo/c/cit101
+/usr/share/ncurses4/terminfo/c/cit101e
+/usr/share/ncurses4/terminfo/c/cit101e-132
+/usr/share/ncurses4/terminfo/c/cit101e-n
+/usr/share/ncurses4/terminfo/c/cit101e-n132
+/usr/share/ncurses4/terminfo/c/cit101e-rv
+/usr/share/ncurses4/terminfo/c/cit500
+/usr/share/ncurses4/terminfo/c/cit80
+/usr/share/ncurses4/terminfo/c/citc
+/usr/share/ncurses4/terminfo/c/citoh
+/usr/share/ncurses4/terminfo/c/citoh-6lpi
+/usr/share/ncurses4/terminfo/c/citoh-8lpi
+/usr/share/ncurses4/terminfo/c/citoh-comp
+/usr/share/ncurses4/terminfo/c/citoh-elite
+/usr/share/ncurses4/terminfo/c/citoh-pica
+/usr/share/ncurses4/terminfo/c/citoh-prop
+/usr/share/ncurses4/terminfo/c/citoh-ps
+/usr/share/ncurses4/terminfo/c/coco3
+/usr/share/ncurses4/terminfo/c/coherent
+/usr/share/ncurses4/terminfo/c/color_xterm
+/usr/share/ncurses4/terminfo/c/colorscan
+/usr/share/ncurses4/terminfo/c/commodore
+/usr/share/ncurses4/terminfo/c/concept
+/usr/share/ncurses4/terminfo/c/concept-avt
+/usr/share/ncurses4/terminfo/c/concept100
+/usr/share/ncurses4/terminfo/c/concept100-rv
+/usr/share/ncurses4/terminfo/c/concept108
+/usr/share/ncurses4/terminfo/c/concept108-4p
+/usr/share/ncurses4/terminfo/c/concept108-8p
+/usr/share/ncurses4/terminfo/c/concept108-w-8
+/usr/share/ncurses4/terminfo/c/concept108-w8p
+/usr/share/ncurses4/terminfo/c/concept108rv4p
+/usr/share/ncurses4/terminfo/c/cons25
+/usr/share/ncurses4/terminfo/c/cons25-iso-m
+/usr/share/ncurses4/terminfo/c/cons25-iso8859
+/usr/share/ncurses4/terminfo/c/cons25-koi8-r
+/usr/share/ncurses4/terminfo/c/cons25-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons25-m
+/usr/share/ncurses4/terminfo/c/cons25l1
+/usr/share/ncurses4/terminfo/c/cons25l1-m
+/usr/share/ncurses4/terminfo/c/cons25r
+/usr/share/ncurses4/terminfo/c/cons25r-m
+/usr/share/ncurses4/terminfo/c/cons25w
+/usr/share/ncurses4/terminfo/c/cons30
+/usr/share/ncurses4/terminfo/c/cons30-m
+/usr/share/ncurses4/terminfo/c/cons43
+/usr/share/ncurses4/terminfo/c/cons43-m
+/usr/share/ncurses4/terminfo/c/cons50
+/usr/share/ncurses4/terminfo/c/cons50-iso-m
+/usr/share/ncurses4/terminfo/c/cons50-iso8859
+/usr/share/ncurses4/terminfo/c/cons50-koi8r
+/usr/share/ncurses4/terminfo/c/cons50-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons50-m
+/usr/share/ncurses4/terminfo/c/cons50l1
+/usr/share/ncurses4/terminfo/c/cons50l1-m
+/usr/share/ncurses4/terminfo/c/cons50r
+/usr/share/ncurses4/terminfo/c/cons50r-m
+/usr/share/ncurses4/terminfo/c/cons60
+/usr/share/ncurses4/terminfo/c/cons60-iso
+/usr/share/ncurses4/terminfo/c/cons60-iso-m
+/usr/share/ncurses4/terminfo/c/cons60-koi8r
+/usr/share/ncurses4/terminfo/c/cons60-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons60-m
+/usr/share/ncurses4/terminfo/c/cons60l1
+/usr/share/ncurses4/terminfo/c/cons60l1-m
+/usr/share/ncurses4/terminfo/c/cons60r
+/usr/share/ncurses4/terminfo/c/cons60r-m
+/usr/share/ncurses4/terminfo/c/contel300
+/usr/share/ncurses4/terminfo/c/contel301
+/usr/share/ncurses4/terminfo/c/contel320
+/usr/share/ncurses4/terminfo/c/contel321
+/usr/share/ncurses4/terminfo/c/cops
+/usr/share/ncurses4/terminfo/c/cops-10
+/usr/share/ncurses4/terminfo/c/cops10
+/usr/share/ncurses4/terminfo/c/cs10
+/usr/share/ncurses4/terminfo/c/cs10-w
+/usr/share/ncurses4/terminfo/c/ct82
+/usr/share/ncurses4/terminfo/c/ct8500
+/usr/share/ncurses4/terminfo/c/ctrm
+/usr/share/ncurses4/terminfo/c/cx
+/usr/share/ncurses4/terminfo/c/cx100
+/usr/share/ncurses4/terminfo/c/cyb110
+/usr/share/ncurses4/terminfo/c/cyb83
+/usr/share/ncurses4/terminfo/d
+/usr/share/ncurses4/terminfo/d/d132
+/usr/share/ncurses4/terminfo/d/d80
+/usr/share/ncurses4/terminfo/d/d800
+/usr/share/ncurses4/terminfo/d/datagraphix
+/usr/share/ncurses4/terminfo/d/datamedia2500
+/usr/share/ncurses4/terminfo/d/datapoint
+/usr/share/ncurses4/terminfo/d/dataspeed40
+/usr/share/ncurses4/terminfo/d/dd5000
+/usr/share/ncurses4/terminfo/d/ddr
+/usr/share/ncurses4/terminfo/d/ddr3180
+/usr/share/ncurses4/terminfo/d/dec-vt100
+/usr/share/ncurses4/terminfo/d/dec-vt220
+/usr/share/ncurses4/terminfo/d/dec-vt330
+/usr/share/ncurses4/terminfo/d/dec-vt340
+/usr/share/ncurses4/terminfo/d/dec-vt400
+/usr/share/ncurses4/terminfo/d/decpro
+/usr/share/ncurses4/terminfo/d/decwriter
+/usr/share/ncurses4/terminfo/d/delta
+/usr/share/ncurses4/terminfo/d/dg-ansi
+/usr/share/ncurses4/terminfo/d/dg100
+/usr/share/ncurses4/terminfo/d/dg200
+/usr/share/ncurses4/terminfo/d/dg210
+/usr/share/ncurses4/terminfo/d/dg211
+/usr/share/ncurses4/terminfo/d/dg450
+/usr/share/ncurses4/terminfo/d/dg460-ansi
+/usr/share/ncurses4/terminfo/d/dg6053
+/usr/share/ncurses4/terminfo/d/dg6134
+/usr/share/ncurses4/terminfo/d/diablo
+/usr/share/ncurses4/terminfo/d/diablo-lm
+/usr/share/ncurses4/terminfo/d/diablo1620
+/usr/share/ncurses4/terminfo/d/diablo1620-m8
+/usr/share/ncurses4/terminfo/d/diablo1640
+/usr/share/ncurses4/terminfo/d/diablo1640-lm
+/usr/share/ncurses4/terminfo/d/diablo1640-m8
+/usr/share/ncurses4/terminfo/d/diablo1720
+/usr/share/ncurses4/terminfo/d/diablo1730
+/usr/share/ncurses4/terminfo/d/diablo1740
+/usr/share/ncurses4/terminfo/d/diablo1740-lm
+/usr/share/ncurses4/terminfo/d/diablo450
+/usr/share/ncurses4/terminfo/d/diablo630
+/usr/share/ncurses4/terminfo/d/dialogue
+/usr/share/ncurses4/terminfo/d/dialogue80
+/usr/share/ncurses4/terminfo/d/digilog
+/usr/share/ncurses4/terminfo/d/dku7003
+/usr/share/ncurses4/terminfo/d/dku7003-dumb
+/usr/share/ncurses4/terminfo/d/dm1520
+/usr/share/ncurses4/terminfo/d/dm1521
+/usr/share/ncurses4/terminfo/d/dm2500
+/usr/share/ncurses4/terminfo/d/dm3025
+/usr/share/ncurses4/terminfo/d/dm3045
+/usr/share/ncurses4/terminfo/d/dm80
+/usr/share/ncurses4/terminfo/d/dm80w
+/usr/share/ncurses4/terminfo/d/dmchat
+/usr/share/ncurses4/terminfo/d/dmd
+/usr/share/ncurses4/terminfo/d/dmd-24
+/usr/share/ncurses4/terminfo/d/dmd-34
+/usr/share/ncurses4/terminfo/d/dmd1
+/usr/share/ncurses4/terminfo/d/dmdt80
+/usr/share/ncurses4/terminfo/d/dmdt80w
+/usr/share/ncurses4/terminfo/d/dmterm
+/usr/share/ncurses4/terminfo/d/dp3360
+/usr/share/ncurses4/terminfo/d/dp8242
+/usr/share/ncurses4/terminfo/d/ds40
+/usr/share/ncurses4/terminfo/d/ds40-2
+/usr/share/ncurses4/terminfo/d/dt-100
+/usr/share/ncurses4/terminfo/d/dt-100w
+/usr/share/ncurses4/terminfo/d/dt100
+/usr/share/ncurses4/terminfo/d/dt100w
+/usr/share/ncurses4/terminfo/d/dt110
+/usr/share/ncurses4/terminfo/d/dt80
+/usr/share/ncurses4/terminfo/d/dt80-sas
+/usr/share/ncurses4/terminfo/d/dt80w
+/usr/share/ncurses4/terminfo/d/dtc300s
+/usr/share/ncurses4/terminfo/d/dtc382
+/usr/share/ncurses4/terminfo/d/dtterm
+/usr/share/ncurses4/terminfo/d/dumb
+/usr/share/ncurses4/terminfo/d/dw
+/usr/share/ncurses4/terminfo/d/dw1
+/usr/share/ncurses4/terminfo/d/dw2
+/usr/share/ncurses4/terminfo/d/dw3
+/usr/share/ncurses4/terminfo/d/dw4
+/usr/share/ncurses4/terminfo/d/dwk
+/usr/share/ncurses4/terminfo/d/dwk-vt
+/usr/share/ncurses4/terminfo/e
+/usr/share/ncurses4/terminfo/e/ecma+color
+/usr/share/ncurses4/terminfo/e/ecma+sgr
+/usr/share/ncurses4/terminfo/e/emots
+/usr/share/ncurses4/terminfo/e/emu
+/usr/share/ncurses4/terminfo/e/env230
+/usr/share/ncurses4/terminfo/e/envision230
+/usr/share/ncurses4/terminfo/e/ep40
+/usr/share/ncurses4/terminfo/e/ep4000
+/usr/share/ncurses4/terminfo/e/ep4080
+/usr/share/ncurses4/terminfo/e/ep48
+/usr/share/ncurses4/terminfo/e/ergo4000
+/usr/share/ncurses4/terminfo/e/esprit
+/usr/share/ncurses4/terminfo/e/esprit-am
+/usr/share/ncurses4/terminfo/e/eterm
+/usr/share/ncurses4/terminfo/e/ex155
+/usr/share/ncurses4/terminfo/e/excel62
+/usr/share/ncurses4/terminfo/e/excel62-rv
+/usr/share/ncurses4/terminfo/e/excel62-w
+/usr/share/ncurses4/terminfo/e/excel64
+/usr/share/ncurses4/terminfo/e/excel64-rv
+/usr/share/ncurses4/terminfo/e/excel64-w
+/usr/share/ncurses4/terminfo/e/exec80
+/usr/share/ncurses4/terminfo/f
+/usr/share/ncurses4/terminfo/f/f100
+/usr/share/ncurses4/terminfo/f/f100-rv
+/usr/share/ncurses4/terminfo/f/f110
+/usr/share/ncurses4/terminfo/f/f110-14
+/usr/share/ncurses4/terminfo/f/f110-14w
+/usr/share/ncurses4/terminfo/f/f110-w
+/usr/share/ncurses4/terminfo/f/f1720
+/usr/share/ncurses4/terminfo/f/f1720a
+/usr/share/ncurses4/terminfo/f/f200
+/usr/share/ncurses4/terminfo/f/f200-w
+/usr/share/ncurses4/terminfo/f/f200vi
+/usr/share/ncurses4/terminfo/f/f200vi-w
+/usr/share/ncurses4/terminfo/f/falco
+/usr/share/ncurses4/terminfo/f/falco-p
+/usr/share/ncurses4/terminfo/f/fenix
+/usr/share/ncurses4/terminfo/f/fenixw
+/usr/share/ncurses4/terminfo/f/fixterm
+/usr/share/ncurses4/terminfo/f/fortune
+/usr/share/ncurses4/terminfo/f/fos
+/usr/share/ncurses4/terminfo/f/fox
+/usr/share/ncurses4/terminfo/f/freedom
+/usr/share/ncurses4/terminfo/f/freedom-rv
+/usr/share/ncurses4/terminfo/f/freedom100
+/usr/share/ncurses4/terminfo/f/freedom110
+/usr/share/ncurses4/terminfo/f/freedom200
+/usr/share/ncurses4/terminfo/g
+/usr/share/ncurses4/terminfo/g/gator
+/usr/share/ncurses4/terminfo/g/gator-52
+/usr/share/ncurses4/terminfo/g/gator-52t
+/usr/share/ncurses4/terminfo/g/gator-t
+/usr/share/ncurses4/terminfo/g/gigi
+/usr/share/ncurses4/terminfo/g/glasstty
+/usr/share/ncurses4/terminfo/g/go-225
+/usr/share/ncurses4/terminfo/g/go140
+/usr/share/ncurses4/terminfo/g/go140w
+/usr/share/ncurses4/terminfo/g/go225
+/usr/share/ncurses4/terminfo/g/graphos
+/usr/share/ncurses4/terminfo/g/graphos-30
+/usr/share/ncurses4/terminfo/g/gs5430
+/usr/share/ncurses4/terminfo/g/gs5430-22
+/usr/share/ncurses4/terminfo/g/gs5430-24
+/usr/share/ncurses4/terminfo/g/gs6300
+/usr/share/ncurses4/terminfo/g/gsi
+/usr/share/ncurses4/terminfo/g/gt100
+/usr/share/ncurses4/terminfo/g/gt100a
+/usr/share/ncurses4/terminfo/g/gt40
+/usr/share/ncurses4/terminfo/g/gt42
+/usr/share/ncurses4/terminfo/g/guru
+/usr/share/ncurses4/terminfo/g/guru+rv
+/usr/share/ncurses4/terminfo/g/guru+s
+/usr/share/ncurses4/terminfo/g/guru+unk
+/usr/share/ncurses4/terminfo/g/guru-24
+/usr/share/ncurses4/terminfo/g/guru-33
+/usr/share/ncurses4/terminfo/g/guru-33-rv
+/usr/share/ncurses4/terminfo/g/guru-33-s
+/usr/share/ncurses4/terminfo/g/guru-44
+/usr/share/ncurses4/terminfo/g/guru-44-s
+/usr/share/ncurses4/terminfo/g/guru-76
+/usr/share/ncurses4/terminfo/g/guru-76-lp
+/usr/share/ncurses4/terminfo/g/guru-76-s
+/usr/share/ncurses4/terminfo/g/guru-76-w
+/usr/share/ncurses4/terminfo/g/guru-76-w-s
+/usr/share/ncurses4/terminfo/g/guru-76-wm
+/usr/share/ncurses4/terminfo/g/guru-lp
+/usr/share/ncurses4/terminfo/g/guru-nctxt
+/usr/share/ncurses4/terminfo/g/guru-rv
+/usr/share/ncurses4/terminfo/g/guru-s
+/usr/share/ncurses4/terminfo/h
+/usr/share/ncurses4/terminfo/h/h-100
+/usr/share/ncurses4/terminfo/h/h-100bw
+/usr/share/ncurses4/terminfo/h/h100
+/usr/share/ncurses4/terminfo/h/h100bw
+/usr/share/ncurses4/terminfo/h/h19
+/usr/share/ncurses4/terminfo/h/h19-a
+/usr/share/ncurses4/terminfo/h/h19-b
+/usr/share/ncurses4/terminfo/h/h19-bs
+/usr/share/ncurses4/terminfo/h/h19-g
+/usr/share/ncurses4/terminfo/h/h19-smul
+/usr/share/ncurses4/terminfo/h/h19-u
+/usr/share/ncurses4/terminfo/h/h19-us
+/usr/share/ncurses4/terminfo/h/h19a
+/usr/share/ncurses4/terminfo/h/h19g
+/usr/share/ncurses4/terminfo/h/h19k
+/usr/share/ncurses4/terminfo/h/h19kermit
+/usr/share/ncurses4/terminfo/h/h19us
+/usr/share/ncurses4/terminfo/h/h29a-kc-bc
+/usr/share/ncurses4/terminfo/h/h29a-kc-uc
+/usr/share/ncurses4/terminfo/h/h29a-nkc-bc
+/usr/share/ncurses4/terminfo/h/h29a-nkc-uc
+/usr/share/ncurses4/terminfo/h/h80
+/usr/share/ncurses4/terminfo/h/ha8675
+/usr/share/ncurses4/terminfo/h/ha8686
+/usr/share/ncurses4/terminfo/h/hazel
+/usr/share/ncurses4/terminfo/h/hds200
+/usr/share/ncurses4/terminfo/h/he80
+/usr/share/ncurses4/terminfo/h/heath
+/usr/share/ncurses4/terminfo/h/heath-19
+/usr/share/ncurses4/terminfo/h/heath-ansi
+/usr/share/ncurses4/terminfo/h/heathkit
+/usr/share/ncurses4/terminfo/h/heathkit-a
+/usr/share/ncurses4/terminfo/h/hft
+/usr/share/ncurses4/terminfo/h/hft-c
+/usr/share/ncurses4/terminfo/h/hirez100
+/usr/share/ncurses4/terminfo/h/hirez100-w
+/usr/share/ncurses4/terminfo/h/hmod1
+/usr/share/ncurses4/terminfo/h/hp
+/usr/share/ncurses4/terminfo/h/hp+arrows
+/usr/share/ncurses4/terminfo/h/hp+color
+/usr/share/ncurses4/terminfo/h/hp+labels
+/usr/share/ncurses4/terminfo/h/hp+pfk+arrows
+/usr/share/ncurses4/terminfo/h/hp+pfk+cr
+/usr/share/ncurses4/terminfo/h/hp+pfk-cr
+/usr/share/ncurses4/terminfo/h/hp+printer
+/usr/share/ncurses4/terminfo/h/hp110
+/usr/share/ncurses4/terminfo/h/hp150
+/usr/share/ncurses4/terminfo/h/hp2
+/usr/share/ncurses4/terminfo/h/hp236
+/usr/share/ncurses4/terminfo/h/hp2382
+/usr/share/ncurses4/terminfo/h/hp2382a
+/usr/share/ncurses4/terminfo/h/hp2392
+/usr/share/ncurses4/terminfo/h/hp2397
+/usr/share/ncurses4/terminfo/h/hp2397a
+/usr/share/ncurses4/terminfo/h/hp2621
+/usr/share/ncurses4/terminfo/h/hp2621-48
+/usr/share/ncurses4/terminfo/h/hp2621-a
+/usr/share/ncurses4/terminfo/h/hp2621-ba
+/usr/share/ncurses4/terminfo/h/hp2621-fl
+/usr/share/ncurses4/terminfo/h/hp2621-k45
+/usr/share/ncurses4/terminfo/h/hp2621-nl
+/usr/share/ncurses4/terminfo/h/hp2621-nt
+/usr/share/ncurses4/terminfo/h/hp2621-wl
+/usr/share/ncurses4/terminfo/h/hp2621A
+/usr/share/ncurses4/terminfo/h/hp2621a
+/usr/share/ncurses4/terminfo/h/hp2621a-a
+/usr/share/ncurses4/terminfo/h/hp2621b
+/usr/share/ncurses4/terminfo/h/hp2621b-kx
+/usr/share/ncurses4/terminfo/h/hp2621b-kx-p
+/usr/share/ncurses4/terminfo/h/hp2621b-p
+/usr/share/ncurses4/terminfo/h/hp2621k45
+/usr/share/ncurses4/terminfo/h/hp2621p
+/usr/share/ncurses4/terminfo/h/hp2621p-a
+/usr/share/ncurses4/terminfo/h/hp2622
+/usr/share/ncurses4/terminfo/h/hp2622a
+/usr/share/ncurses4/terminfo/h/hp2623
+/usr/share/ncurses4/terminfo/h/hp2623a
+/usr/share/ncurses4/terminfo/h/hp2624
+/usr/share/ncurses4/terminfo/h/hp2624-10p
+/usr/share/ncurses4/terminfo/h/hp2624a
+/usr/share/ncurses4/terminfo/h/hp2624a-10p
+/usr/share/ncurses4/terminfo/h/hp2624b
+/usr/share/ncurses4/terminfo/h/hp2624b-10p
+/usr/share/ncurses4/terminfo/h/hp2624b-10p-p
+/usr/share/ncurses4/terminfo/h/hp2624b-4p
+/usr/share/ncurses4/terminfo/h/hp2624b-4p-p
+/usr/share/ncurses4/terminfo/h/hp2624b-p
+/usr/share/ncurses4/terminfo/h/hp2626
+/usr/share/ncurses4/terminfo/h/hp2626-12
+/usr/share/ncurses4/terminfo/h/hp2626-12-s
+/usr/share/ncurses4/terminfo/h/hp2626-12x40
+/usr/share/ncurses4/terminfo/h/hp2626-ns
+/usr/share/ncurses4/terminfo/h/hp2626-s
+/usr/share/ncurses4/terminfo/h/hp2626-x40
+/usr/share/ncurses4/terminfo/h/hp2626a
+/usr/share/ncurses4/terminfo/h/hp2626p
+/usr/share/ncurses4/terminfo/h/hp2627a
+/usr/share/ncurses4/terminfo/h/hp2627a-rev
+/usr/share/ncurses4/terminfo/h/hp2627c
+/usr/share/ncurses4/terminfo/h/hp262x
+/usr/share/ncurses4/terminfo/h/hp2640a
+/usr/share/ncurses4/terminfo/h/hp2640b
+/usr/share/ncurses4/terminfo/h/hp2641a
+/usr/share/ncurses4/terminfo/h/hp2644a
+/usr/share/ncurses4/terminfo/h/hp2645
+/usr/share/ncurses4/terminfo/h/hp2645a
+/usr/share/ncurses4/terminfo/h/hp2647a
+/usr/share/ncurses4/terminfo/h/hp2648
+/usr/share/ncurses4/terminfo/h/hp2648a
+/usr/share/ncurses4/terminfo/h/hp300h
+/usr/share/ncurses4/terminfo/h/hp45
+/usr/share/ncurses4/terminfo/h/hp700
+/usr/share/ncurses4/terminfo/h/hp700-wy
+/usr/share/ncurses4/terminfo/h/hp70092
+/usr/share/ncurses4/terminfo/h/hp70092A
+/usr/share/ncurses4/terminfo/h/hp70092a
+/usr/share/ncurses4/terminfo/h/hp9837
+/usr/share/ncurses4/terminfo/h/hp9845
+/usr/share/ncurses4/terminfo/h/hp98550
+/usr/share/ncurses4/terminfo/h/hp98550a
+/usr/share/ncurses4/terminfo/h/hp98720
+/usr/share/ncurses4/terminfo/h/hp98721
+/usr/share/ncurses4/terminfo/h/hpansi
+/usr/share/ncurses4/terminfo/h/hpex
+/usr/share/ncurses4/terminfo/h/hpex2
+/usr/share/ncurses4/terminfo/h/hpgeneric
+/usr/share/ncurses4/terminfo/h/hpsub
+/usr/share/ncurses4/terminfo/h/hpterm
+/usr/share/ncurses4/terminfo/h/htx11
+/usr/share/ncurses4/terminfo/h/hz1000
+/usr/share/ncurses4/terminfo/h/hz1420
+/usr/share/ncurses4/terminfo/h/hz1500
+/usr/share/ncurses4/terminfo/h/hz1510
+/usr/share/ncurses4/terminfo/h/hz1520
+/usr/share/ncurses4/terminfo/h/hz1520-noesc
+/usr/share/ncurses4/terminfo/h/hz1552
+/usr/share/ncurses4/terminfo/h/hz1552-rv
+/usr/share/ncurses4/terminfo/h/hz2000
+/usr/share/ncurses4/terminfo/i
+/usr/share/ncurses4/terminfo/i/i100
+/usr/share/ncurses4/terminfo/i/i3101
+/usr/share/ncurses4/terminfo/i/i3151
+/usr/share/ncurses4/terminfo/i/i3164
+/usr/share/ncurses4/terminfo/i/i400
+/usr/share/ncurses4/terminfo/i/ibcs2
+/usr/share/ncurses4/terminfo/i/ibm-apl
+/usr/share/ncurses4/terminfo/i/ibm-pc
+/usr/share/ncurses4/terminfo/i/ibm-system1
+/usr/share/ncurses4/terminfo/i/ibm3101
+/usr/share/ncurses4/terminfo/i/ibm3151
+/usr/share/ncurses4/terminfo/i/ibm3161
+/usr/share/ncurses4/terminfo/i/ibm3163
+/usr/share/ncurses4/terminfo/i/ibm3164
+/usr/share/ncurses4/terminfo/i/ibm327x
+/usr/share/ncurses4/terminfo/i/ibm5051
+/usr/share/ncurses4/terminfo/i/ibm5081
+/usr/share/ncurses4/terminfo/i/ibm5081-c
+/usr/share/ncurses4/terminfo/i/ibm5151
+/usr/share/ncurses4/terminfo/i/ibm5154
+/usr/share/ncurses4/terminfo/i/ibm5154-c
+/usr/share/ncurses4/terminfo/i/ibm6153
+/usr/share/ncurses4/terminfo/i/ibm6154
+/usr/share/ncurses4/terminfo/i/ibm6154-c
+/usr/share/ncurses4/terminfo/i/ibm6155
+/usr/share/ncurses4/terminfo/i/ibm8512
+/usr/share/ncurses4/terminfo/i/ibm8513
+/usr/share/ncurses4/terminfo/i/ibm8514
+/usr/share/ncurses4/terminfo/i/ibm8514-c
+/usr/share/ncurses4/terminfo/i/ibmaed
+/usr/share/ncurses4/terminfo/i/ibmapa16
+/usr/share/ncurses4/terminfo/i/ibmapa8
+/usr/share/ncurses4/terminfo/i/ibmapa8c
+/usr/share/ncurses4/terminfo/i/ibmapa8c-c
+/usr/share/ncurses4/terminfo/i/ibmega
+/usr/share/ncurses4/terminfo/i/ibmega-c
+/usr/share/ncurses4/terminfo/i/ibmmono
+/usr/share/ncurses4/terminfo/i/ibmmpel
+/usr/share/ncurses4/terminfo/i/ibmmpel-c
+/usr/share/ncurses4/terminfo/i/ibmpc
+/usr/share/ncurses4/terminfo/i/ibmpc3
+/usr/share/ncurses4/terminfo/i/ibmpc3r
+/usr/share/ncurses4/terminfo/i/ibmpc3r-mono
+/usr/share/ncurses4/terminfo/i/ibmpcx
+/usr/share/ncurses4/terminfo/i/ibmvga
+/usr/share/ncurses4/terminfo/i/ibmvga-c
+/usr/share/ncurses4/terminfo/i/ibmx
+/usr/share/ncurses4/terminfo/i/ifmr
+/usr/share/ncurses4/terminfo/i/ims-ansi
+/usr/share/ncurses4/terminfo/i/ims950
+/usr/share/ncurses4/terminfo/i/ims950-b
+/usr/share/ncurses4/terminfo/i/ims950-rv
+/usr/share/ncurses4/terminfo/i/infoton
+/usr/share/ncurses4/terminfo/i/intertec
+/usr/share/ncurses4/terminfo/i/intertube
+/usr/share/ncurses4/terminfo/i/intertube2
+/usr/share/ncurses4/terminfo/i/intext
+/usr/share/ncurses4/terminfo/i/intext2
+/usr/share/ncurses4/terminfo/i/intextii
+/usr/share/ncurses4/terminfo/i/ips
+/usr/share/ncurses4/terminfo/i/ipsi
+/usr/share/ncurses4/terminfo/i/iq120
+/usr/share/ncurses4/terminfo/i/iq140
+/usr/share/ncurses4/terminfo/i/iris-ansi
+/usr/share/ncurses4/terminfo/i/iris-ansi-ap
+/usr/share/ncurses4/terminfo/i/iris-color
+/usr/share/ncurses4/terminfo/i/iris40
+/usr/share/ncurses4/terminfo/j
+/usr/share/ncurses4/terminfo/j/jaixterm-m
+/usr/share/ncurses4/terminfo/j/jerq
+/usr/share/ncurses4/terminfo/k
+/usr/share/ncurses4/terminfo/k/k45
+/usr/share/ncurses4/terminfo/k/kaypro
+/usr/share/ncurses4/terminfo/k/kaypro2
+/usr/share/ncurses4/terminfo/k/kermit
+/usr/share/ncurses4/terminfo/k/kermit-am
+/usr/share/ncurses4/terminfo/k/klone+acs
+/usr/share/ncurses4/terminfo/k/klone+color
+/usr/share/ncurses4/terminfo/k/klone+koi8acs
+/usr/share/ncurses4/terminfo/k/klone+sgr
+/usr/share/ncurses4/terminfo/k/klone+sgr-dumb
+/usr/share/ncurses4/terminfo/k/kt7
+/usr/share/ncurses4/terminfo/k/kt7ix
+/usr/share/ncurses4/terminfo/k/kterm
+/usr/share/ncurses4/terminfo/k/ktm
+/usr/share/ncurses4/terminfo/l
+/usr/share/ncurses4/terminfo/l/la120
+/usr/share/ncurses4/terminfo/l/layer
+/usr/share/ncurses4/terminfo/l/linux
+/usr/share/ncurses4/terminfo/l/linux-c
+/usr/share/ncurses4/terminfo/l/linux-c-nc
+/usr/share/ncurses4/terminfo/l/linux-koi8
+/usr/share/ncurses4/terminfo/l/linux-koi8r
+/usr/share/ncurses4/terminfo/l/linux-m
+/usr/share/ncurses4/terminfo/l/linux-nic
+/usr/share/ncurses4/terminfo/l/lisa
+/usr/share/ncurses4/terminfo/l/lisaterm
+/usr/share/ncurses4/terminfo/l/lisaterm-w
+/usr/share/ncurses4/terminfo/l/liswb
+/usr/share/ncurses4/terminfo/l/ln03
+/usr/share/ncurses4/terminfo/l/ln03-w
+/usr/share/ncurses4/terminfo/l/lpr
+/usr/share/ncurses4/terminfo/l/luna
+/usr/share/ncurses4/terminfo/l/luna68k
+/usr/share/ncurses4/terminfo/m
+/usr/share/ncurses4/terminfo/m/m2-nam
+/usr/share/ncurses4/terminfo/m/mac
+/usr/share/ncurses4/terminfo/m/mac-w
+/usr/share/ncurses4/terminfo/m/macintosh
+/usr/share/ncurses4/terminfo/m/macterminal-w
+/usr/share/ncurses4/terminfo/m/mai
+/usr/share/ncurses4/terminfo/m/masscomp
+/usr/share/ncurses4/terminfo/m/masscomp1
+/usr/share/ncurses4/terminfo/m/masscomp2
+/usr/share/ncurses4/terminfo/m/mdl110
+/usr/share/ncurses4/terminfo/m/megatek
+/usr/share/ncurses4/terminfo/m/memhp
+/usr/share/ncurses4/terminfo/m/mgr
+/usr/share/ncurses4/terminfo/m/mgr-linux
+/usr/share/ncurses4/terminfo/m/mgr-sun
+/usr/share/ncurses4/terminfo/m/microb
+/usr/share/ncurses4/terminfo/m/microbee
+/usr/share/ncurses4/terminfo/m/microterm
+/usr/share/ncurses4/terminfo/m/microterm5
+/usr/share/ncurses4/terminfo/m/mime
+/usr/share/ncurses4/terminfo/m/mime-3ax
+/usr/share/ncurses4/terminfo/m/mime-fb
+/usr/share/ncurses4/terminfo/m/mime-hb
+/usr/share/ncurses4/terminfo/m/mime1
+/usr/share/ncurses4/terminfo/m/mime2
+/usr/share/ncurses4/terminfo/m/mime2a
+/usr/share/ncurses4/terminfo/m/mime2a-s
+/usr/share/ncurses4/terminfo/m/mime2a-v
+/usr/share/ncurses4/terminfo/m/mime314
+/usr/share/ncurses4/terminfo/m/mime340
+/usr/share/ncurses4/terminfo/m/mime3a
+/usr/share/ncurses4/terminfo/m/mime3ax
+/usr/share/ncurses4/terminfo/m/mimei
+/usr/share/ncurses4/terminfo/m/mimeii
+/usr/share/ncurses4/terminfo/m/minitel
+/usr/share/ncurses4/terminfo/m/minitel-2
+/usr/share/ncurses4/terminfo/m/minitel-2-nam
+/usr/share/ncurses4/terminfo/m/minix
+/usr/share/ncurses4/terminfo/m/minix-old
+/usr/share/ncurses4/terminfo/m/minix-old-am
+/usr/share/ncurses4/terminfo/m/mm314
+/usr/share/ncurses4/terminfo/m/mm340
+/usr/share/ncurses4/terminfo/m/mod
+/usr/share/ncurses4/terminfo/m/mod24
+/usr/share/ncurses4/terminfo/m/modgraph
+/usr/share/ncurses4/terminfo/m/modgraph2
+/usr/share/ncurses4/terminfo/m/modgraph48
+/usr/share/ncurses4/terminfo/m/mono-emx
+/usr/share/ncurses4/terminfo/m/msk227
+/usr/share/ncurses4/terminfo/m/msk22714
+/usr/share/ncurses4/terminfo/m/msk227am
+/usr/share/ncurses4/terminfo/m/mskermit227
+/usr/share/ncurses4/terminfo/m/mskermit22714
+/usr/share/ncurses4/terminfo/m/mskermit227am
+/usr/share/ncurses4/terminfo/m/mt-70
+/usr/share/ncurses4/terminfo/m/mt4520-rv
+/usr/share/ncurses4/terminfo/m/mt70
+/usr/share/ncurses4/terminfo/n
+/usr/share/ncurses4/terminfo/n/nansi.sys
+/usr/share/ncurses4/terminfo/n/nansi.sysk
+/usr/share/ncurses4/terminfo/n/nansisys
+/usr/share/ncurses4/terminfo/n/nansisysk
+/usr/share/ncurses4/terminfo/n/ncr7900
+/usr/share/ncurses4/terminfo/n/ncr7900i
+/usr/share/ncurses4/terminfo/n/ncr7900iv
+/usr/share/ncurses4/terminfo/n/ncr7901
+/usr/share/ncurses4/terminfo/n/nec
+/usr/share/ncurses4/terminfo/n/nec5520
+/usr/share/ncurses4/terminfo/n/newhp
+/usr/share/ncurses4/terminfo/n/newhpkeyboard
+/usr/share/ncurses4/terminfo/n/news
+/usr/share/ncurses4/terminfo/n/news-29
+/usr/share/ncurses4/terminfo/n/news-29-euc
+/usr/share/ncurses4/terminfo/n/news-29-sjis
+/usr/share/ncurses4/terminfo/n/news-33
+/usr/share/ncurses4/terminfo/n/news-33-euc
+/usr/share/ncurses4/terminfo/n/news-33-sjis
+/usr/share/ncurses4/terminfo/n/news-42
+/usr/share/ncurses4/terminfo/n/news-42-euc
+/usr/share/ncurses4/terminfo/n/news-42-sjis
+/usr/share/ncurses4/terminfo/n/news-a
+/usr/share/ncurses4/terminfo/n/news-o
+/usr/share/ncurses4/terminfo/n/news-old-unk
+/usr/share/ncurses4/terminfo/n/news-unk
+/usr/share/ncurses4/terminfo/n/news28
+/usr/share/ncurses4/terminfo/n/news28-a
+/usr/share/ncurses4/terminfo/n/news29
+/usr/share/ncurses4/terminfo/n/news31
+/usr/share/ncurses4/terminfo/n/news31-a
+/usr/share/ncurses4/terminfo/n/news31-o
+/usr/share/ncurses4/terminfo/n/news33
+/usr/share/ncurses4/terminfo/n/news40
+/usr/share/ncurses4/terminfo/n/news40-a
+/usr/share/ncurses4/terminfo/n/news40-o
+/usr/share/ncurses4/terminfo/n/news42
+/usr/share/ncurses4/terminfo/n/newscbm
+/usr/share/ncurses4/terminfo/n/newscbm-a
+/usr/share/ncurses4/terminfo/n/newscbm-o
+/usr/share/ncurses4/terminfo/n/newscbm33
+/usr/share/ncurses4/terminfo/n/next
+/usr/share/ncurses4/terminfo/n/nextshell
+/usr/share/ncurses4/terminfo/n/northstar
+/usr/share/ncurses4/terminfo/n/nwe501
+/usr/share/ncurses4/terminfo/n/nwe501-a
+/usr/share/ncurses4/terminfo/n/nwe501-o
+/usr/share/ncurses4/terminfo/n/nwp-511
+/usr/share/ncurses4/terminfo/n/nwp-517
+/usr/share/ncurses4/terminfo/n/nwp-517-w
+/usr/share/ncurses4/terminfo/n/nwp251-a
+/usr/share/ncurses4/terminfo/n/nwp251-o
+/usr/share/ncurses4/terminfo/n/nwp511
+/usr/share/ncurses4/terminfo/n/nwp512
+/usr/share/ncurses4/terminfo/n/nwp512-a
+/usr/share/ncurses4/terminfo/n/nwp512-o
+/usr/share/ncurses4/terminfo/n/nwp513
+/usr/share/ncurses4/terminfo/n/nwp513-a
+/usr/share/ncurses4/terminfo/n/nwp513-o
+/usr/share/ncurses4/terminfo/n/nwp514
+/usr/share/ncurses4/terminfo/n/nwp514-a
+/usr/share/ncurses4/terminfo/n/nwp514-o
+/usr/share/ncurses4/terminfo/n/nwp517
+/usr/share/ncurses4/terminfo/n/nwp517-w
+/usr/share/ncurses4/terminfo/n/nwp518
+/usr/share/ncurses4/terminfo/n/nwp518-a
+/usr/share/ncurses4/terminfo/n/nwp518-o
+/usr/share/ncurses4/terminfo/o
+/usr/share/ncurses4/terminfo/o/o31
+/usr/share/ncurses4/terminfo/o/o4112-nd
+/usr/share/ncurses4/terminfo/o/o85h
+/usr/share/ncurses4/terminfo/o/oabm85h
+/usr/share/ncurses4/terminfo/o/oblit
+/usr/share/ncurses4/terminfo/o/oc100
+/usr/share/ncurses4/terminfo/o/oconcept
+/usr/share/ncurses4/terminfo/o/ojerq
+/usr/share/ncurses4/terminfo/o/oldibmpc3
+/usr/share/ncurses4/terminfo/o/oldpc3
+/usr/share/ncurses4/terminfo/o/oldsun
+/usr/share/ncurses4/terminfo/o/omron
+/usr/share/ncurses4/terminfo/o/opus3n1+
+/usr/share/ncurses4/terminfo/o/origibmpc3
+/usr/share/ncurses4/terminfo/o/origpc3
+/usr/share/ncurses4/terminfo/o/os9LII
+/usr/share/ncurses4/terminfo/o/osborne
+/usr/share/ncurses4/terminfo/o/osborne-w
+/usr/share/ncurses4/terminfo/o/osborne1
+/usr/share/ncurses4/terminfo/o/osborne1-w
+/usr/share/ncurses4/terminfo/o/osexec
+/usr/share/ncurses4/terminfo/o/otek4112
+/usr/share/ncurses4/terminfo/o/otek4113
+/usr/share/ncurses4/terminfo/o/otek4114
+/usr/share/ncurses4/terminfo/o/otek4115
+/usr/share/ncurses4/terminfo/o/owl
+/usr/share/ncurses4/terminfo/p
+/usr/share/ncurses4/terminfo/p/p12
+/usr/share/ncurses4/terminfo/p/p12-m
+/usr/share/ncurses4/terminfo/p/p12-m-w
+/usr/share/ncurses4/terminfo/p/p12-w
+/usr/share/ncurses4/terminfo/p/p14
+/usr/share/ncurses4/terminfo/p/p14-m
+/usr/share/ncurses4/terminfo/p/p14-m-w
+/usr/share/ncurses4/terminfo/p/p14-w
+/usr/share/ncurses4/terminfo/p/p19
+/usr/share/ncurses4/terminfo/p/p4
+/usr/share/ncurses4/terminfo/p/p5
+/usr/share/ncurses4/terminfo/p/p7
+/usr/share/ncurses4/terminfo/p/p8
+/usr/share/ncurses4/terminfo/p/p8-w
+/usr/share/ncurses4/terminfo/p/p8gl
+/usr/share/ncurses4/terminfo/p/p9
+/usr/share/ncurses4/terminfo/p/p9-8
+/usr/share/ncurses4/terminfo/p/p9-8-w
+/usr/share/ncurses4/terminfo/p/p9-w
+/usr/share/ncurses4/terminfo/p/pc-coherent
+/usr/share/ncurses4/terminfo/p/pc-minix
+/usr/share/ncurses4/terminfo/p/pc-venix
+/usr/share/ncurses4/terminfo/p/pc3
+/usr/share/ncurses4/terminfo/p/pc3-bold
+/usr/share/ncurses4/terminfo/p/pc3r
+/usr/share/ncurses4/terminfo/p/pc3r-m
+/usr/share/ncurses4/terminfo/p/pc6300plus
+/usr/share/ncurses4/terminfo/p/pc7300
+/usr/share/ncurses4/terminfo/p/pcansi
+/usr/share/ncurses4/terminfo/p/pcansi-25
+/usr/share/ncurses4/terminfo/p/pcansi-25-m
+/usr/share/ncurses4/terminfo/p/pcansi-33
+/usr/share/ncurses4/terminfo/p/pcansi-33-m
+/usr/share/ncurses4/terminfo/p/pcansi-43
+/usr/share/ncurses4/terminfo/p/pcansi-43-m
+/usr/share/ncurses4/terminfo/p/pcansi-m
+/usr/share/ncurses4/terminfo/p/pcansi-mono
+/usr/share/ncurses4/terminfo/p/pcansi25
+/usr/share/ncurses4/terminfo/p/pcansi25m
+/usr/share/ncurses4/terminfo/p/pcansi33
+/usr/share/ncurses4/terminfo/p/pcansi33m
+/usr/share/ncurses4/terminfo/p/pcansi43
+/usr/share/ncurses4/terminfo/p/pccons
+/usr/share/ncurses4/terminfo/p/pcconsole
+/usr/share/ncurses4/terminfo/p/pcix
+/usr/share/ncurses4/terminfo/p/pckermit
+/usr/share/ncurses4/terminfo/p/pckermit12
+/usr/share/ncurses4/terminfo/p/pckermit120
+/usr/share/ncurses4/terminfo/p/pcplot
+/usr/share/ncurses4/terminfo/p/pcvt25
+/usr/share/ncurses4/terminfo/p/pcvt25w
+/usr/share/ncurses4/terminfo/p/pcvt28
+/usr/share/ncurses4/terminfo/p/pcvt28w
+/usr/share/ncurses4/terminfo/p/pcvt35
+/usr/share/ncurses4/terminfo/p/pcvt35w
+/usr/share/ncurses4/terminfo/p/pcvt40
+/usr/share/ncurses4/terminfo/p/pcvt40w
+/usr/share/ncurses4/terminfo/p/pcvt43
+/usr/share/ncurses4/terminfo/p/pcvt43w
+/usr/share/ncurses4/terminfo/p/pcvt50
+/usr/share/ncurses4/terminfo/p/pcvt50w
+/usr/share/ncurses4/terminfo/p/pcvtXX
+/usr/share/ncurses4/terminfo/p/pcz19
+/usr/share/ncurses4/terminfo/p/pe1100
+/usr/share/ncurses4/terminfo/p/pe1200
+/usr/share/ncurses4/terminfo/p/pe1251
+/usr/share/ncurses4/terminfo/p/pe550
+/usr/share/ncurses4/terminfo/p/pe6100
+/usr/share/ncurses4/terminfo/p/pe6300
+/usr/share/ncurses4/terminfo/p/pe6312
+/usr/share/ncurses4/terminfo/p/pe7000c
+/usr/share/ncurses4/terminfo/p/pe7000m
+/usr/share/ncurses4/terminfo/p/pilot
+/usr/share/ncurses4/terminfo/p/printer
+/usr/share/ncurses4/terminfo/p/prism12
+/usr/share/ncurses4/terminfo/p/prism12-m
+/usr/share/ncurses4/terminfo/p/prism12-m-w
+/usr/share/ncurses4/terminfo/p/prism12-w
+/usr/share/ncurses4/terminfo/p/prism14
+/usr/share/ncurses4/terminfo/p/prism14-m
+/usr/share/ncurses4/terminfo/p/prism14-m-w
+/usr/share/ncurses4/terminfo/p/prism14-w
+/usr/share/ncurses4/terminfo/p/prism2
+/usr/share/ncurses4/terminfo/p/prism4
+/usr/share/ncurses4/terminfo/p/prism5
+/usr/share/ncurses4/terminfo/p/prism7
+/usr/share/ncurses4/terminfo/p/prism8
+/usr/share/ncurses4/terminfo/p/prism8-w
+/usr/share/ncurses4/terminfo/p/prism8gl
+/usr/share/ncurses4/terminfo/p/prism9
+/usr/share/ncurses4/terminfo/p/prism9-8
+/usr/share/ncurses4/terminfo/p/prism9-8-w
+/usr/share/ncurses4/terminfo/p/prism9-w
+/usr/share/ncurses4/terminfo/p/pro350
+/usr/share/ncurses4/terminfo/p/ps300
+/usr/share/ncurses4/terminfo/p/psterm
+/usr/share/ncurses4/terminfo/p/psterm-80x24
+/usr/share/ncurses4/terminfo/p/psterm-90x28
+/usr/share/ncurses4/terminfo/p/psterm-96x48
+/usr/share/ncurses4/terminfo/p/psterm-basic
+/usr/share/ncurses4/terminfo/p/psterm-fast
+/usr/share/ncurses4/terminfo/p/psx_ansi
+/usr/share/ncurses4/terminfo/p/pt100
+/usr/share/ncurses4/terminfo/p/pt100w
+/usr/share/ncurses4/terminfo/p/pt200
+/usr/share/ncurses4/terminfo/p/pt200w
+/usr/share/ncurses4/terminfo/p/pt210
+/usr/share/ncurses4/terminfo/p/pt250
+/usr/share/ncurses4/terminfo/p/pt250w
+/usr/share/ncurses4/terminfo/p/pt505
+/usr/share/ncurses4/terminfo/p/pt505-22
+/usr/share/ncurses4/terminfo/p/pt505-24
+/usr/share/ncurses4/terminfo/p/pty
+/usr/share/ncurses4/terminfo/q
+/usr/share/ncurses4/terminfo/q/qdcons
+/usr/share/ncurses4/terminfo/q/qdss
+/usr/share/ncurses4/terminfo/q/qnx
+/usr/share/ncurses4/terminfo/q/qnx4
+/usr/share/ncurses4/terminfo/q/qume
+/usr/share/ncurses4/terminfo/q/qume5
+/usr/share/ncurses4/terminfo/q/qvt101
+/usr/share/ncurses4/terminfo/q/qvt101+
+/usr/share/ncurses4/terminfo/q/qvt101p
+/usr/share/ncurses4/terminfo/q/qvt102
+/usr/share/ncurses4/terminfo/q/qvt103
+/usr/share/ncurses4/terminfo/q/qvt103-w
+/usr/share/ncurses4/terminfo/q/qvt108
+/usr/share/ncurses4/terminfo/q/qvt119
+/usr/share/ncurses4/terminfo/q/qvt119+
+/usr/share/ncurses4/terminfo/q/qvt119+-25
+/usr/share/ncurses4/terminfo/q/qvt119+-25-w
+/usr/share/ncurses4/terminfo/q/qvt119+-w
+/usr/share/ncurses4/terminfo/q/qvt119-25-w
+/usr/share/ncurses4/terminfo/q/qvt119-w
+/usr/share/ncurses4/terminfo/q/qvt119p
+/usr/share/ncurses4/terminfo/q/qvt119p-25
+/usr/share/ncurses4/terminfo/q/qvt119p-25-w
+/usr/share/ncurses4/terminfo/q/qvt119p-w
+/usr/share/ncurses4/terminfo/q/qvt203
+/usr/share/ncurses4/terminfo/q/qvt203+
+/usr/share/ncurses4/terminfo/q/qvt203-25
+/usr/share/ncurses4/terminfo/q/qvt203-25-w
+/usr/share/ncurses4/terminfo/q/qvt203-w
+/usr/share/ncurses4/terminfo/q/qvt203-w-am
+/usr/share/ncurses4/terminfo/r
+/usr/share/ncurses4/terminfo/r/rbcomm
+/usr/share/ncurses4/terminfo/r/rbcomm-nam
+/usr/share/ncurses4/terminfo/r/rbcomm-w
+/usr/share/ncurses4/terminfo/r/rca
+/usr/share/ncurses4/terminfo/r/rebus3180
+/usr/share/ncurses4/terminfo/r/regent
+/usr/share/ncurses4/terminfo/r/regent100
+/usr/share/ncurses4/terminfo/r/regent20
+/usr/share/ncurses4/terminfo/r/regent200
+/usr/share/ncurses4/terminfo/r/regent25
+/usr/share/ncurses4/terminfo/r/regent40
+/usr/share/ncurses4/terminfo/r/regent40+
+/usr/share/ncurses4/terminfo/r/regent60
+/usr/share/ncurses4/terminfo/r/rt6221
+/usr/share/ncurses4/terminfo/r/rt6221-w
+/usr/share/ncurses4/terminfo/r/rtpc
+/usr/share/ncurses4/terminfo/r/rxvt
+/usr/share/ncurses4/terminfo/r/rxvt-basic
+/usr/share/ncurses4/terminfo/s
+/usr/share/ncurses4/terminfo/s/s
+/usr/share/ncurses4/terminfo/s/s4
+/usr/share/ncurses4/terminfo/s/sb1
+/usr/share/ncurses4/terminfo/s/sb2
+/usr/share/ncurses4/terminfo/s/sb3
+/usr/share/ncurses4/terminfo/s/sbi
+/usr/share/ncurses4/terminfo/s/sbobcat
+/usr/share/ncurses4/terminfo/s/sc410
+/usr/share/ncurses4/terminfo/s/sc415
+/usr/share/ncurses4/terminfo/s/scanset
+/usr/share/ncurses4/terminfo/s/scoansi
+/usr/share/ncurses4/terminfo/s/screen
+/usr/share/ncurses4/terminfo/s/screen-w
+/usr/share/ncurses4/terminfo/s/screen2
+/usr/share/ncurses4/terminfo/s/screen3
+/usr/share/ncurses4/terminfo/s/screwpoint
+/usr/share/ncurses4/terminfo/s/scrhp
+/usr/share/ncurses4/terminfo/s/simterm
+/usr/share/ncurses4/terminfo/s/soroc
+/usr/share/ncurses4/terminfo/s/soroc120
+/usr/share/ncurses4/terminfo/s/soroc140
+/usr/share/ncurses4/terminfo/s/spinwriter
+/usr/share/ncurses4/terminfo/s/st52
+/usr/share/ncurses4/terminfo/s/sun
+/usr/share/ncurses4/terminfo/s/sun-1
+/usr/share/ncurses4/terminfo/s/sun-12
+/usr/share/ncurses4/terminfo/s/sun-17
+/usr/share/ncurses4/terminfo/s/sun-24
+/usr/share/ncurses4/terminfo/s/sun-34
+/usr/share/ncurses4/terminfo/s/sun-48
+/usr/share/ncurses4/terminfo/s/sun-c
+/usr/share/ncurses4/terminfo/s/sun-cmd
+/usr/share/ncurses4/terminfo/s/sun-e
+/usr/share/ncurses4/terminfo/s/sun-e-s
+/usr/share/ncurses4/terminfo/s/sun-il
+/usr/share/ncurses4/terminfo/s/sun-nic
+/usr/share/ncurses4/terminfo/s/sun-s
+/usr/share/ncurses4/terminfo/s/sun-s-e
+/usr/share/ncurses4/terminfo/s/sun-ss5
+/usr/share/ncurses4/terminfo/s/sun1
+/usr/share/ncurses4/terminfo/s/sun2
+/usr/share/ncurses4/terminfo/s/sune
+/usr/share/ncurses4/terminfo/s/superbee
+/usr/share/ncurses4/terminfo/s/superbee-xsb
+/usr/share/ncurses4/terminfo/s/superbeeic
+/usr/share/ncurses4/terminfo/s/superbrain
+/usr/share/ncurses4/terminfo/s/sv80
+/usr/share/ncurses4/terminfo/s/swtp
+/usr/share/ncurses4/terminfo/s/synertek
+/usr/share/ncurses4/terminfo/s/synertek380
+/usr/share/ncurses4/terminfo/s/system1
+/usr/share/ncurses4/terminfo/t
+/usr/share/ncurses4/terminfo/t/t10
+/usr/share/ncurses4/terminfo/t/t1061
+/usr/share/ncurses4/terminfo/t/t1061f
+/usr/share/ncurses4/terminfo/t/t16
+/usr/share/ncurses4/terminfo/t/t3700
+/usr/share/ncurses4/terminfo/t/t3800
+/usr/share/ncurses4/terminfo/t/t653x
+/usr/share/ncurses4/terminfo/t/tab
+/usr/share/ncurses4/terminfo/t/tab132
+/usr/share/ncurses4/terminfo/t/tab132-15
+/usr/share/ncurses4/terminfo/t/tab132-rv
+/usr/share/ncurses4/terminfo/t/tab132-w
+/usr/share/ncurses4/terminfo/t/tab132-w-rv
+/usr/share/ncurses4/terminfo/t/tandem6510
+/usr/share/ncurses4/terminfo/t/tandem653
+/usr/share/ncurses4/terminfo/t/tek
+/usr/share/ncurses4/terminfo/t/tek4012
+/usr/share/ncurses4/terminfo/t/tek4013
+/usr/share/ncurses4/terminfo/t/tek4014
+/usr/share/ncurses4/terminfo/t/tek4014-sm
+/usr/share/ncurses4/terminfo/t/tek4015
+/usr/share/ncurses4/terminfo/t/tek4015-sm
+/usr/share/ncurses4/terminfo/t/tek4023
+/usr/share/ncurses4/terminfo/t/tek4024
+/usr/share/ncurses4/terminfo/t/tek4025
+/usr/share/ncurses4/terminfo/t/tek4025-17
+/usr/share/ncurses4/terminfo/t/tek4025-17-ws
+/usr/share/ncurses4/terminfo/t/tek4025-cr
+/usr/share/ncurses4/terminfo/t/tek4025-ex
+/usr/share/ncurses4/terminfo/t/tek4025a
+/usr/share/ncurses4/terminfo/t/tek4025ex
+/usr/share/ncurses4/terminfo/t/tek4027
+/usr/share/ncurses4/terminfo/t/tek4027-ex
+/usr/share/ncurses4/terminfo/t/tek4105
+/usr/share/ncurses4/terminfo/t/tek4105-30
+/usr/share/ncurses4/terminfo/t/tek4105a
+/usr/share/ncurses4/terminfo/t/tek4106brl
+/usr/share/ncurses4/terminfo/t/tek4107
+/usr/share/ncurses4/terminfo/t/tek4107brl
+/usr/share/ncurses4/terminfo/t/tek4109
+/usr/share/ncurses4/terminfo/t/tek4109brl
+/usr/share/ncurses4/terminfo/t/tek4112
+/usr/share/ncurses4/terminfo/t/tek4112-5
+/usr/share/ncurses4/terminfo/t/tek4112-nd
+/usr/share/ncurses4/terminfo/t/tek4113
+/usr/share/ncurses4/terminfo/t/tek4113-34
+/usr/share/ncurses4/terminfo/t/tek4113-nd
+/usr/share/ncurses4/terminfo/t/tek4114
+/usr/share/ncurses4/terminfo/t/tek4115
+/usr/share/ncurses4/terminfo/t/tek4125
+/usr/share/ncurses4/terminfo/t/tek4205
+/usr/share/ncurses4/terminfo/t/tek4207
+/usr/share/ncurses4/terminfo/t/tek4207-s
+/usr/share/ncurses4/terminfo/t/tek4404
+/usr/share/ncurses4/terminfo/t/teleray
+/usr/share/ncurses4/terminfo/t/teletec
+/usr/share/ncurses4/terminfo/t/terminet
+/usr/share/ncurses4/terminfo/t/terminet1200
+/usr/share/ncurses4/terminfo/t/terminet300
+/usr/share/ncurses4/terminfo/t/tgtelnet
+/usr/share/ncurses4/terminfo/t/ti700
+/usr/share/ncurses4/terminfo/t/ti733
+/usr/share/ncurses4/terminfo/t/ti735
+/usr/share/ncurses4/terminfo/t/ti745
+/usr/share/ncurses4/terminfo/t/ti800
+/usr/share/ncurses4/terminfo/t/ti916
+/usr/share/ncurses4/terminfo/t/ti916-132
+/usr/share/ncurses4/terminfo/t/ti916-220-7
+/usr/share/ncurses4/terminfo/t/ti916-220-8
+/usr/share/ncurses4/terminfo/t/ti916-8
+/usr/share/ncurses4/terminfo/t/ti916-8-132
+/usr/share/ncurses4/terminfo/t/ti924
+/usr/share/ncurses4/terminfo/t/ti924-8
+/usr/share/ncurses4/terminfo/t/ti924-8w
+/usr/share/ncurses4/terminfo/t/ti924w
+/usr/share/ncurses4/terminfo/t/ti926
+/usr/share/ncurses4/terminfo/t/ti926-8
+/usr/share/ncurses4/terminfo/t/ti928
+/usr/share/ncurses4/terminfo/t/ti928-8
+/usr/share/ncurses4/terminfo/t/ti931
+/usr/share/ncurses4/terminfo/t/ti_ansi
+/usr/share/ncurses4/terminfo/t/tn1200
+/usr/share/ncurses4/terminfo/t/tn300
+/usr/share/ncurses4/terminfo/t/trs16
+/usr/share/ncurses4/terminfo/t/trs2
+/usr/share/ncurses4/terminfo/t/trs80II
+/usr/share/ncurses4/terminfo/t/trsII
+/usr/share/ncurses4/terminfo/t/ts-1
+/usr/share/ncurses4/terminfo/t/ts-1p
+/usr/share/ncurses4/terminfo/t/ts1
+/usr/share/ncurses4/terminfo/t/ts100
+/usr/share/ncurses4/terminfo/t/ts100-ctxt
+/usr/share/ncurses4/terminfo/t/ts100-sp
+/usr/share/ncurses4/terminfo/t/ts1p
+/usr/share/ncurses4/terminfo/t/tt505-22
+/usr/share/ncurses4/terminfo/t/tty33
+/usr/share/ncurses4/terminfo/t/tty35
+/usr/share/ncurses4/terminfo/t/tty37
+/usr/share/ncurses4/terminfo/t/tty40
+/usr/share/ncurses4/terminfo/t/tty43
+/usr/share/ncurses4/terminfo/t/tty4420
+/usr/share/ncurses4/terminfo/t/tty4424
+/usr/share/ncurses4/terminfo/t/tty4424-1
+/usr/share/ncurses4/terminfo/t/tty4424m
+/usr/share/ncurses4/terminfo/t/tty4426
+/usr/share/ncurses4/terminfo/t/tty5410
+/usr/share/ncurses4/terminfo/t/tty5410-w
+/usr/share/ncurses4/terminfo/t/tty5410v1
+/usr/share/ncurses4/terminfo/t/tty5410v1-w
+/usr/share/ncurses4/terminfo/t/tty5420
+/usr/share/ncurses4/terminfo/t/tty5420+nl
+/usr/share/ncurses4/terminfo/t/tty5420-nl
+/usr/share/ncurses4/terminfo/t/tty5420-rv
+/usr/share/ncurses4/terminfo/t/tty5420-rv-nl
+/usr/share/ncurses4/terminfo/t/tty5420-w
+/usr/share/ncurses4/terminfo/t/tty5420-w-nl
+/usr/share/ncurses4/terminfo/t/tty5420-w-rv
+/usr/share/ncurses4/terminfo/t/tty5420-w-rv-n
+/usr/share/ncurses4/terminfo/t/tty5425
+/usr/share/ncurses4/terminfo/t/tty5425-nl
+/usr/share/ncurses4/terminfo/t/tty5425-w
+/usr/share/ncurses4/terminfo/t/tty5620
+/usr/share/ncurses4/terminfo/t/tty5620-1
+/usr/share/ncurses4/terminfo/t/tty5620-24
+/usr/share/ncurses4/terminfo/t/tty5620-34
+/usr/share/ncurses4/terminfo/t/tty5620-s
+/usr/share/ncurses4/terminfo/t/ttydmd
+/usr/share/ncurses4/terminfo/t/tvi-2p
+/usr/share/ncurses4/terminfo/t/tvi803
+/usr/share/ncurses4/terminfo/t/tvi9065
+/usr/share/ncurses4/terminfo/t/tvi910
+/usr/share/ncurses4/terminfo/t/tvi910+
+/usr/share/ncurses4/terminfo/t/tvi912
+/usr/share/ncurses4/terminfo/t/tvi912-2p
+/usr/share/ncurses4/terminfo/t/tvi912b
+/usr/share/ncurses4/terminfo/t/tvi912c
+/usr/share/ncurses4/terminfo/t/tvi912cc
+/usr/share/ncurses4/terminfo/t/tvi914
+/usr/share/ncurses4/terminfo/t/tvi920
+/usr/share/ncurses4/terminfo/t/tvi920-2p
+/usr/share/ncurses4/terminfo/t/tvi920b
+/usr/share/ncurses4/terminfo/t/tvi920c
+/usr/share/ncurses4/terminfo/t/tvi921
+/usr/share/ncurses4/terminfo/t/tvi924
+/usr/share/ncurses4/terminfo/t/tvi925
+/usr/share/ncurses4/terminfo/t/tvi925-hi
+/usr/share/ncurses4/terminfo/t/tvi92B
+/usr/share/ncurses4/terminfo/t/tvi92D
+/usr/share/ncurses4/terminfo/t/tvi950
+/usr/share/ncurses4/terminfo/t/tvi950-2p
+/usr/share/ncurses4/terminfo/t/tvi950-4p
+/usr/share/ncurses4/terminfo/t/tvi950-rv
+/usr/share/ncurses4/terminfo/t/tvi950-rv-2p
+/usr/share/ncurses4/terminfo/t/tvi950-rv-4p
+/usr/share/ncurses4/terminfo/t/tvi955
+/usr/share/ncurses4/terminfo/t/tvi955-hb
+/usr/share/ncurses4/terminfo/t/tvi955-w
+/usr/share/ncurses4/terminfo/t/tvi970
+/usr/share/ncurses4/terminfo/t/tvi970-2p
+/usr/share/ncurses4/terminfo/t/tvi970-vb
+/usr/share/ncurses4/terminfo/t/tvipt
+/usr/share/ncurses4/terminfo/u
+/usr/share/ncurses4/terminfo/u/ultima2
+/usr/share/ncurses4/terminfo/u/ultimaII
+/usr/share/ncurses4/terminfo/u/uniterm
+/usr/share/ncurses4/terminfo/u/uniterm49
+/usr/share/ncurses4/terminfo/u/unixpc
+/usr/share/ncurses4/terminfo/u/unknown
+/usr/share/ncurses4/terminfo/u/uts30
+/usr/share/ncurses4/terminfo/v
+/usr/share/ncurses4/terminfo/v/v200-nam
+/usr/share/ncurses4/terminfo/v/v320n
+/usr/share/ncurses4/terminfo/v/v3220
+/usr/share/ncurses4/terminfo/v/v5410
+/usr/share/ncurses4/terminfo/v/vapple
+/usr/share/ncurses4/terminfo/v/vc103
+/usr/share/ncurses4/terminfo/v/vc203
+/usr/share/ncurses4/terminfo/v/vc303
+/usr/share/ncurses4/terminfo/v/vc303a
+/usr/share/ncurses4/terminfo/v/vc403a
+/usr/share/ncurses4/terminfo/v/vc404
+/usr/share/ncurses4/terminfo/v/vc404-s
+/usr/share/ncurses4/terminfo/v/vc414
+/usr/share/ncurses4/terminfo/v/vc414h
+/usr/share/ncurses4/terminfo/v/vc415
+/usr/share/ncurses4/terminfo/v/venix
+/usr/share/ncurses4/terminfo/v/versaterm
+/usr/share/ncurses4/terminfo/v/vi200
+/usr/share/ncurses4/terminfo/v/vi200-f
+/usr/share/ncurses4/terminfo/v/vi200-rv
+/usr/share/ncurses4/terminfo/v/vi300
+/usr/share/ncurses4/terminfo/v/vi300-old
+/usr/share/ncurses4/terminfo/v/vi50
+/usr/share/ncurses4/terminfo/v/vi500
+/usr/share/ncurses4/terminfo/v/vi50adm
+/usr/share/ncurses4/terminfo/v/vi55
+/usr/share/ncurses4/terminfo/v/vi550
+/usr/share/ncurses4/terminfo/v/vi603
+/usr/share/ncurses4/terminfo/v/viewpoint
+/usr/share/ncurses4/terminfo/v/viewpoint3a+
+/usr/share/ncurses4/terminfo/v/viewpoint60
+/usr/share/ncurses4/terminfo/v/viewpoint90
+/usr/share/ncurses4/terminfo/v/visa50
+/usr/share/ncurses4/terminfo/v/visual603
+/usr/share/ncurses4/terminfo/v/vitty
+/usr/share/ncurses4/terminfo/v/vk100
+/usr/share/ncurses4/terminfo/v/vp3a+
+/usr/share/ncurses4/terminfo/v/vp60
+/usr/share/ncurses4/terminfo/v/vp90
+/usr/share/ncurses4/terminfo/v/vremote
+/usr/share/ncurses4/terminfo/v/vs100
+/usr/share/ncurses4/terminfo/v/vs100-x10
+/usr/share/ncurses4/terminfo/v/vsc
+/usr/share/ncurses4/terminfo/v/vt-61
+/usr/share/ncurses4/terminfo/v/vt100
+/usr/share/ncurses4/terminfo/v/vt100-am
+/usr/share/ncurses4/terminfo/v/vt100-bm
+/usr/share/ncurses4/terminfo/v/vt100-bm-o
+/usr/share/ncurses4/terminfo/v/vt100-bot-s
+/usr/share/ncurses4/terminfo/v/vt100-nam
+/usr/share/ncurses4/terminfo/v/vt100-nam-w
+/usr/share/ncurses4/terminfo/v/vt100-nav
+/usr/share/ncurses4/terminfo/v/vt100-nav-w
+/usr/share/ncurses4/terminfo/v/vt100-s
+/usr/share/ncurses4/terminfo/v/vt100-s-bot
+/usr/share/ncurses4/terminfo/v/vt100-s-top
+/usr/share/ncurses4/terminfo/v/vt100-top-s
+/usr/share/ncurses4/terminfo/v/vt100-vb
+/usr/share/ncurses4/terminfo/v/vt100-w
+/usr/share/ncurses4/terminfo/v/vt100-w-am
+/usr/share/ncurses4/terminfo/v/vt100-w-nam
+/usr/share/ncurses4/terminfo/v/vt100-w-nav
+/usr/share/ncurses4/terminfo/v/vt100nam
+/usr/share/ncurses4/terminfo/v/vt102
+/usr/share/ncurses4/terminfo/v/vt102-nsgr
+/usr/share/ncurses4/terminfo/v/vt102-w
+/usr/share/ncurses4/terminfo/v/vt125
+/usr/share/ncurses4/terminfo/v/vt131
+/usr/share/ncurses4/terminfo/v/vt132
+/usr/share/ncurses4/terminfo/v/vt200
+/usr/share/ncurses4/terminfo/v/vt200-js
+/usr/share/ncurses4/terminfo/v/vt200-w
+/usr/share/ncurses4/terminfo/v/vt220
+/usr/share/ncurses4/terminfo/v/vt220-8
+/usr/share/ncurses4/terminfo/v/vt220-js
+/usr/share/ncurses4/terminfo/v/vt220-nam
+/usr/share/ncurses4/terminfo/v/vt220-w
+/usr/share/ncurses4/terminfo/v/vt220d
+/usr/share/ncurses4/terminfo/v/vt300
+/usr/share/ncurses4/terminfo/v/vt300-nam
+/usr/share/ncurses4/terminfo/v/vt300-w
+/usr/share/ncurses4/terminfo/v/vt300-w-nam
+/usr/share/ncurses4/terminfo/v/vt320
+/usr/share/ncurses4/terminfo/v/vt320-k3
+/usr/share/ncurses4/terminfo/v/vt320-k311
+/usr/share/ncurses4/terminfo/v/vt320-nam
+/usr/share/ncurses4/terminfo/v/vt320-w
+/usr/share/ncurses4/terminfo/v/vt320-w-nam
+/usr/share/ncurses4/terminfo/v/vt320nam
+/usr/share/ncurses4/terminfo/v/vt330
+/usr/share/ncurses4/terminfo/v/vt340
+/usr/share/ncurses4/terminfo/v/vt400
+/usr/share/ncurses4/terminfo/v/vt400-24
+/usr/share/ncurses4/terminfo/v/vt420
+/usr/share/ncurses4/terminfo/v/vt420f
+/usr/share/ncurses4/terminfo/v/vt420pc
+/usr/share/ncurses4/terminfo/v/vt420pcdos
+/usr/share/ncurses4/terminfo/v/vt50
+/usr/share/ncurses4/terminfo/v/vt50h
+/usr/share/ncurses4/terminfo/v/vt510
+/usr/share/ncurses4/terminfo/v/vt510pc
+/usr/share/ncurses4/terminfo/v/vt510pcdos
+/usr/share/ncurses4/terminfo/v/vt52
+/usr/share/ncurses4/terminfo/v/vt520
+/usr/share/ncurses4/terminfo/v/vt525
+/usr/share/ncurses4/terminfo/v/vt61
+/usr/share/ncurses4/terminfo/v/vt61.5
+/usr/share/ncurses4/terminfo/w
+/usr/share/ncurses4/terminfo/w/wren
+/usr/share/ncurses4/terminfo/w/wrenw
+/usr/share/ncurses4/terminfo/w/wsiris
+/usr/share/ncurses4/terminfo/w/wy-75ap
+/usr/share/ncurses4/terminfo/w/wy100
+/usr/share/ncurses4/terminfo/w/wy100q
+/usr/share/ncurses4/terminfo/w/wy120
+/usr/share/ncurses4/terminfo/w/wy120-25
+/usr/share/ncurses4/terminfo/w/wy120-25-w
+/usr/share/ncurses4/terminfo/w/wy120-vb
+/usr/share/ncurses4/terminfo/w/wy120-w
+/usr/share/ncurses4/terminfo/w/wy120-w-vb
+/usr/share/ncurses4/terminfo/w/wy120-wvb
+/usr/share/ncurses4/terminfo/w/wy150
+/usr/share/ncurses4/terminfo/w/wy150-25
+/usr/share/ncurses4/terminfo/w/wy150-25-w
+/usr/share/ncurses4/terminfo/w/wy150-vb
+/usr/share/ncurses4/terminfo/w/wy150-w
+/usr/share/ncurses4/terminfo/w/wy150-w-vb
+/usr/share/ncurses4/terminfo/w/wy160
+/usr/share/ncurses4/terminfo/w/wy160-25
+/usr/share/ncurses4/terminfo/w/wy160-25-w
+/usr/share/ncurses4/terminfo/w/wy160-42
+/usr/share/ncurses4/terminfo/w/wy160-42-w
+/usr/share/ncurses4/terminfo/w/wy160-43
+/usr/share/ncurses4/terminfo/w/wy160-43-w
+/usr/share/ncurses4/terminfo/w/wy160-tek
+/usr/share/ncurses4/terminfo/w/wy160-vb
+/usr/share/ncurses4/terminfo/w/wy160-w
+/usr/share/ncurses4/terminfo/w/wy160-w-vb
+/usr/share/ncurses4/terminfo/w/wy160-wvb
+/usr/share/ncurses4/terminfo/w/wy185
+/usr/share/ncurses4/terminfo/w/wy185-24
+/usr/share/ncurses4/terminfo/w/wy185-vb
+/usr/share/ncurses4/terminfo/w/wy185-w
+/usr/share/ncurses4/terminfo/w/wy185-wvb
+/usr/share/ncurses4/terminfo/w/wy30
+/usr/share/ncurses4/terminfo/w/wy30-mc
+/usr/share/ncurses4/terminfo/w/wy30-vb
+/usr/share/ncurses4/terminfo/w/wy325
+/usr/share/ncurses4/terminfo/w/wy325-25
+/usr/share/ncurses4/terminfo/w/wy325-25w
+/usr/share/ncurses4/terminfo/w/wy325-42
+/usr/share/ncurses4/terminfo/w/wy325-42w
+/usr/share/ncurses4/terminfo/w/wy325-42w-vb
+/usr/share/ncurses4/terminfo/w/wy325-42wvb
+/usr/share/ncurses4/terminfo/w/wy325-43
+/usr/share/ncurses4/terminfo/w/wy325-43w
+/usr/share/ncurses4/terminfo/w/wy325-43w-vb
+/usr/share/ncurses4/terminfo/w/wy325-43wvb
+/usr/share/ncurses4/terminfo/w/wy325-80
+/usr/share/ncurses4/terminfo/w/wy325-vb
+/usr/share/ncurses4/terminfo/w/wy325-w
+/usr/share/ncurses4/terminfo/w/wy325-w-vb
+/usr/share/ncurses4/terminfo/w/wy325-wvb
+/usr/share/ncurses4/terminfo/w/wy325w-24
+/usr/share/ncurses4/terminfo/w/wy350
+/usr/share/ncurses4/terminfo/w/wy350-vb
+/usr/share/ncurses4/terminfo/w/wy350-w
+/usr/share/ncurses4/terminfo/w/wy350-wvb
+/usr/share/ncurses4/terminfo/w/wy370
+/usr/share/ncurses4/terminfo/w/wy370-101k
+/usr/share/ncurses4/terminfo/w/wy370-105k
+/usr/share/ncurses4/terminfo/w/wy370-EPC
+/usr/share/ncurses4/terminfo/w/wy370-nk
+/usr/share/ncurses4/terminfo/w/wy370-rv
+/usr/share/ncurses4/terminfo/w/wy370-tek
+/usr/share/ncurses4/terminfo/w/wy370-vb
+/usr/share/ncurses4/terminfo/w/wy370-w
+/usr/share/ncurses4/terminfo/w/wy370-wvb
+/usr/share/ncurses4/terminfo/w/wy50
+/usr/share/ncurses4/terminfo/w/wy50-mc
+/usr/share/ncurses4/terminfo/w/wy50-vb
+/usr/share/ncurses4/terminfo/w/wy50-w
+/usr/share/ncurses4/terminfo/w/wy50-wvb
+/usr/share/ncurses4/terminfo/w/wy520
+/usr/share/ncurses4/terminfo/w/wy520-24
+/usr/share/ncurses4/terminfo/w/wy520-36
+/usr/share/ncurses4/terminfo/w/wy520-36pc
+/usr/share/ncurses4/terminfo/w/wy520-36w
+/usr/share/ncurses4/terminfo/w/wy520-36wpc
+/usr/share/ncurses4/terminfo/w/wy520-48
+/usr/share/ncurses4/terminfo/w/wy520-48pc
+/usr/share/ncurses4/terminfo/w/wy520-48w
+/usr/share/ncurses4/terminfo/w/wy520-48wpc
+/usr/share/ncurses4/terminfo/w/wy520-epc
+/usr/share/ncurses4/terminfo/w/wy520-epc-24
+/usr/share/ncurses4/terminfo/w/wy520-epc-vb
+/usr/share/ncurses4/terminfo/w/wy520-epc-w
+/usr/share/ncurses4/terminfo/w/wy520-epc-wvb
+/usr/share/ncurses4/terminfo/w/wy520-vb
+/usr/share/ncurses4/terminfo/w/wy520-w
+/usr/share/ncurses4/terminfo/w/wy520-wvb
+/usr/share/ncurses4/terminfo/w/wy60
+/usr/share/ncurses4/terminfo/w/wy60-25
+/usr/share/ncurses4/terminfo/w/wy60-25-w
+/usr/share/ncurses4/terminfo/w/wy60-316X
+/usr/share/ncurses4/terminfo/w/wy60-42
+/usr/share/ncurses4/terminfo/w/wy60-42-w
+/usr/share/ncurses4/terminfo/w/wy60-43
+/usr/share/ncurses4/terminfo/w/wy60-43-w
+/usr/share/ncurses4/terminfo/w/wy60-vb
+/usr/share/ncurses4/terminfo/w/wy60-w
+/usr/share/ncurses4/terminfo/w/wy60-w-vb
+/usr/share/ncurses4/terminfo/w/wy60-wvb
+/usr/share/ncurses4/terminfo/w/wy75
+/usr/share/ncurses4/terminfo/w/wy75-mc
+/usr/share/ncurses4/terminfo/w/wy75-vb
+/usr/share/ncurses4/terminfo/w/wy75-w
+/usr/share/ncurses4/terminfo/w/wy75-wvb
+/usr/share/ncurses4/terminfo/w/wy75ap
+/usr/share/ncurses4/terminfo/w/wy85
+/usr/share/ncurses4/terminfo/w/wy85-vb
+/usr/share/ncurses4/terminfo/w/wy85-w
+/usr/share/ncurses4/terminfo/w/wy85-wvb
+/usr/share/ncurses4/terminfo/w/wy99gt
+/usr/share/ncurses4/terminfo/w/wy99gt-25
+/usr/share/ncurses4/terminfo/w/wy99gt-25-w
+/usr/share/ncurses4/terminfo/w/wy99gt-tek
+/usr/share/ncurses4/terminfo/w/wy99gt-vb
+/usr/share/ncurses4/terminfo/w/wy99gt-w
+/usr/share/ncurses4/terminfo/w/wy99gt-w-vb
+/usr/share/ncurses4/terminfo/w/wy99gt-wvb
+/usr/share/ncurses4/terminfo/w/wyse-325
+/usr/share/ncurses4/terminfo/w/wyse-75ap
+/usr/share/ncurses4/terminfo/w/wyse-vp
+/usr/share/ncurses4/terminfo/w/wyse120
+/usr/share/ncurses4/terminfo/w/wyse120-25
+/usr/share/ncurses4/terminfo/w/wyse120-25-w
+/usr/share/ncurses4/terminfo/w/wyse120-vb
+/usr/share/ncurses4/terminfo/w/wyse120-w
+/usr/share/ncurses4/terminfo/w/wyse120-wvb
+/usr/share/ncurses4/terminfo/w/wyse150
+/usr/share/ncurses4/terminfo/w/wyse150-25
+/usr/share/ncurses4/terminfo/w/wyse150-25-w
+/usr/share/ncurses4/terminfo/w/wyse150-vb
+/usr/share/ncurses4/terminfo/w/wyse150-w
+/usr/share/ncurses4/terminfo/w/wyse150-w-vb
+/usr/share/ncurses4/terminfo/w/wyse160
+/usr/share/ncurses4/terminfo/w/wyse160-25
+/usr/share/ncurses4/terminfo/w/wyse160-25-w
+/usr/share/ncurses4/terminfo/w/wyse160-42
+/usr/share/ncurses4/terminfo/w/wyse160-42-w
+/usr/share/ncurses4/terminfo/w/wyse160-43
+/usr/share/ncurses4/terminfo/w/wyse160-43-w
+/usr/share/ncurses4/terminfo/w/wyse160-vb
+/usr/share/ncurses4/terminfo/w/wyse160-w
+/usr/share/ncurses4/terminfo/w/wyse160-wvb
+/usr/share/ncurses4/terminfo/w/wyse185
+/usr/share/ncurses4/terminfo/w/wyse185-24
+/usr/share/ncurses4/terminfo/w/wyse185-vb
+/usr/share/ncurses4/terminfo/w/wyse185-w
+/usr/share/ncurses4/terminfo/w/wyse185-wvb
+/usr/share/ncurses4/terminfo/w/wyse30
+/usr/share/ncurses4/terminfo/w/wyse30-mc
+/usr/share/ncurses4/terminfo/w/wyse30-vb
+/usr/share/ncurses4/terminfo/w/wyse325
+/usr/share/ncurses4/terminfo/w/wyse325-25
+/usr/share/ncurses4/terminfo/w/wyse325-25w
+/usr/share/ncurses4/terminfo/w/wyse325-42
+/usr/share/ncurses4/terminfo/w/wyse325-42w
+/usr/share/ncurses4/terminfo/w/wyse325-43
+/usr/share/ncurses4/terminfo/w/wyse325-43w
+/usr/share/ncurses4/terminfo/w/wyse325-vb
+/usr/share/ncurses4/terminfo/w/wyse325-w
+/usr/share/ncurses4/terminfo/w/wyse325-wvb
+/usr/share/ncurses4/terminfo/w/wyse350
+/usr/share/ncurses4/terminfo/w/wyse350-vb
+/usr/share/ncurses4/terminfo/w/wyse350-w
+/usr/share/ncurses4/terminfo/w/wyse350-wvb
+/usr/share/ncurses4/terminfo/w/wyse370
+/usr/share/ncurses4/terminfo/w/wyse50
+/usr/share/ncurses4/terminfo/w/wyse50-mc
+/usr/share/ncurses4/terminfo/w/wyse50-vb
+/usr/share/ncurses4/terminfo/w/wyse50-w
+/usr/share/ncurses4/terminfo/w/wyse50-wvb
+/usr/share/ncurses4/terminfo/w/wyse520
+/usr/share/ncurses4/terminfo/w/wyse520-24
+/usr/share/ncurses4/terminfo/w/wyse520-36
+/usr/share/ncurses4/terminfo/w/wyse520-36pc
+/usr/share/ncurses4/terminfo/w/wyse520-36w
+/usr/share/ncurses4/terminfo/w/wyse520-36wpc
+/usr/share/ncurses4/terminfo/w/wyse520-48
+/usr/share/ncurses4/terminfo/w/wyse520-48pc
+/usr/share/ncurses4/terminfo/w/wyse520-48w
+/usr/share/ncurses4/terminfo/w/wyse520-48wpc
+/usr/share/ncurses4/terminfo/w/wyse520-epc
+/usr/share/ncurses4/terminfo/w/wyse520-epc-w
+/usr/share/ncurses4/terminfo/w/wyse520-p-wvb
+/usr/share/ncurses4/terminfo/w/wyse520-pc-24
+/usr/share/ncurses4/terminfo/w/wyse520-pc-vb
+/usr/share/ncurses4/terminfo/w/wyse520-vb
+/usr/share/ncurses4/terminfo/w/wyse520-w
+/usr/share/ncurses4/terminfo/w/wyse520-wvb
+/usr/share/ncurses4/terminfo/w/wyse60
+/usr/share/ncurses4/terminfo/w/wyse60-25
+/usr/share/ncurses4/terminfo/w/wyse60-25-w
+/usr/share/ncurses4/terminfo/w/wyse60-316X
+/usr/share/ncurses4/terminfo/w/wyse60-42
+/usr/share/ncurses4/terminfo/w/wyse60-42-w
+/usr/share/ncurses4/terminfo/w/wyse60-43
+/usr/share/ncurses4/terminfo/w/wyse60-43-w
+/usr/share/ncurses4/terminfo/w/wyse60-vb
+/usr/share/ncurses4/terminfo/w/wyse60-w
+/usr/share/ncurses4/terminfo/w/wyse60-wvb
+/usr/share/ncurses4/terminfo/w/wyse75
+/usr/share/ncurses4/terminfo/w/wyse75-mc
+/usr/share/ncurses4/terminfo/w/wyse75-vb
+/usr/share/ncurses4/terminfo/w/wyse75-w
+/usr/share/ncurses4/terminfo/w/wyse75-wvb
+/usr/share/ncurses4/terminfo/w/wyse75ap
+/usr/share/ncurses4/terminfo/w/wyse85
+/usr/share/ncurses4/terminfo/w/wyse85-vb
+/usr/share/ncurses4/terminfo/w/wyse85-w
+/usr/share/ncurses4/terminfo/w/wyse85-wvb
+/usr/share/ncurses4/terminfo/w/wyse99gt
+/usr/share/ncurses4/terminfo/w/wyse99gt-25
+/usr/share/ncurses4/terminfo/w/wyse99gt-25-w
+/usr/share/ncurses4/terminfo/w/wyse99gt-vb
+/usr/share/ncurses4/terminfo/w/wyse99gt-w
+/usr/share/ncurses4/terminfo/w/wyse99gt-wvb
+/usr/share/ncurses4/terminfo/x
+/usr/share/ncurses4/terminfo/x/x10term
+/usr/share/ncurses4/terminfo/x/x1700
+/usr/share/ncurses4/terminfo/x/x1700-lm
+/usr/share/ncurses4/terminfo/x/x1720
+/usr/share/ncurses4/terminfo/x/x1750
+/usr/share/ncurses4/terminfo/x/x68k
+/usr/share/ncurses4/terminfo/x/x68k-ite
+/usr/share/ncurses4/terminfo/x/x820
+/usr/share/ncurses4/terminfo/x/xenix
+/usr/share/ncurses4/terminfo/x/xerox
+/usr/share/ncurses4/terminfo/x/xerox-lm
+/usr/share/ncurses4/terminfo/x/xerox1720
+/usr/share/ncurses4/terminfo/x/xerox820
+/usr/share/ncurses4/terminfo/x/xl83
+/usr/share/ncurses4/terminfo/x/xtalk
+/usr/share/ncurses4/terminfo/x/xterm
+/usr/share/ncurses4/terminfo/x/xterm+sl
+/usr/share/ncurses4/terminfo/x/xterm+sl-twm
+/usr/share/ncurses4/terminfo/x/xterm-16color
+/usr/share/ncurses4/terminfo/x/xterm-8bit
+/usr/share/ncurses4/terminfo/x/xterm-bold
+/usr/share/ncurses4/terminfo/x/xterm-nic
+/usr/share/ncurses4/terminfo/x/xterm-old
+/usr/share/ncurses4/terminfo/x/xterm-pcolor
+/usr/share/ncurses4/terminfo/x/xterm-r5
+/usr/share/ncurses4/terminfo/x/xterm-r6
+/usr/share/ncurses4/terminfo/x/xterm-sun
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v32
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v33
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v40
+/usr/share/ncurses4/terminfo/x/xterm-xi
+/usr/share/ncurses4/terminfo/x/xterm1
+/usr/share/ncurses4/terminfo/x/xterms
+/usr/share/ncurses4/terminfo/x/xterms-sun
+/usr/share/ncurses4/terminfo/x/xwsh
+/usr/share/ncurses4/terminfo/z
+/usr/share/ncurses4/terminfo/z/z-100
+/usr/share/ncurses4/terminfo/z/z-100bw
+/usr/share/ncurses4/terminfo/z/z100
+/usr/share/ncurses4/terminfo/z/z100bw
+/usr/share/ncurses4/terminfo/z/z110
+/usr/share/ncurses4/terminfo/z/z110bw
+/usr/share/ncurses4/terminfo/z/z19
+/usr/share/ncurses4/terminfo/z/z29
+/usr/share/ncurses4/terminfo/z/z29a
+/usr/share/ncurses4/terminfo/z/z29a-kc-bc
+/usr/share/ncurses4/terminfo/z/z29a-kc-uc
+/usr/share/ncurses4/terminfo/z/z29a-nkc-bc
+/usr/share/ncurses4/terminfo/z/z29a-nkc-uc
+/usr/share/ncurses4/terminfo/z/z29b
+/usr/share/ncurses4/terminfo/z/z30
+/usr/share/ncurses4/terminfo/z/z340
+/usr/share/ncurses4/terminfo/z/z340-nam
+/usr/share/ncurses4/terminfo/z/z39-a
+/usr/share/ncurses4/terminfo/z/z39a
+/usr/share/ncurses4/terminfo/z/z50
+/usr/share/ncurses4/terminfo/z/z8001
+/usr/share/ncurses4/terminfo/z/zen30
+/usr/share/ncurses4/terminfo/z/zen50
+/usr/share/ncurses4/terminfo/z/zen8001
+/usr/share/ncurses4/terminfo/z/zenith
+/usr/share/ncurses4/terminfo/z/zenith29
+/usr/share/ncurses4/terminfo/z/zenith39-a
+/usr/share/ncurses4/terminfo/z/zenith39-ansi
+/usr/share/ncurses4/terminfo/z/zt-1
+/usr/share/ncurses4/terminfo/z/ztx
+/usr/share/ncurses4/terminfo/z/ztx-1-a
+/usr/share/ncurses4/terminfo/z/ztx11
+</RPM:Files>
+ </RDF:Description>
+</RDF:RDF>
diff --git a/result/rdf2.rdr b/result/rdf2.rdr
new file mode 100644
index 0000000..15e5e97
--- /dev/null
+++ b/result/rdf2.rdr
@@ -0,0 +1,2008 @@
+0 1 RDF:RDF 0 0
+1 14 #text 0 1
+
+1 1 RDF:Description 0 0
+2 14 #text 0 1
+
+2 1 RPM:Name 0 0
+3 3 #text 0 1 ncurses4
+2 15 RPM:Name 0 0
+2 14 #text 0 1
+
+2 1 RPM:Version 0 0
+3 3 #text 0 1 4.2
+2 15 RPM:Version 0 0
+2 14 #text 0 1
+
+2 1 RPM:Release 0 0
+3 3 #text 0 1 3
+2 15 RPM:Release 0 0
+2 14 #text 0 1
+
+2 1 RPM:Arch 0 0
+3 3 #text 0 1 i386
+2 15 RPM:Arch 0 0
+2 14 #text 0 1
+
+2 1 RPM:Os 0 0
+3 3 #text 0 1 Linux
+2 15 RPM:Os 0 0
+2 14 #text 0 1
+
+2 1 RPM:Distribution 0 0
+3 3 #text 0 1 DLD
+2 15 RPM:Distribution 0 0
+2 14 #text 0 1
+
+2 1 RPM:Vendor 0 0
+3 3 #text 0 1 delix Computer GmbH
+2 15 RPM:Vendor 0 0
+2 14 #text 0 1
+
+2 1 RPM:Packager 0 0
+3 3 #text 0 1 Till Bubeck <bubeck@delix.de>, Ngo Than <than@delix.de>
+2 15 RPM:Packager 0 0
+2 14 #text 0 1
+
+2 1 RPM:Group 0 0
+3 3 #text 0 1 Libraries
+2 15 RPM:Group 0 0
+2 14 #text 0 1
+
+2 1 RPM:Summary 0 0
+3 3 #text 0 1 Bibliothek zur Ansteuerung von Terminals
+2 15 RPM:Summary 0 0
+2 14 #text 0 1
+
+2 1 RPM:Description 0 0
+3 3 #text 0 1 Diese Library stellt dem Programmierer vom Terminal unabhängige
+Routinen zur Ansteuerung Ihres Bildschirms zur Verfügung, die
+speziell optimiert sind.
+Diese Version ist die 'new curses' (ncurses) Variante und ist der
+anerkannte Ersatz für die klassische Curses-Library, die nicht mehr
+weiterentwickelt wird.
+2 15 RPM:Description 0 0
+2 14 #text 0 1
+
+2 1 RPM:Copyright 0 0
+3 3 #text 0 1 GPL
+2 15 RPM:Copyright 0 0
+2 14 #text 0 1
+
+2 1 RPM:Sources 0 0
+3 3 #text 0 1 ncurses4-4.2-3.src.rpm
+2 15 RPM:Sources 0 0
+2 14 #text 0 1
+
+2 1 RPM:BuildDate 0 0
+3 3 #text 0 1 Tue May 12 19:30:26 1998
+2 15 RPM:BuildDate 0 0
+2 14 #text 0 1
+
+2 1 RPM:Date 0 0
+3 3 #text 0 1 895015826
+2 15 RPM:Date 0 0
+2 14 #text 0 1
+
+2 1 RPM:Size 0 0
+3 3 #text 0 1 1373513
+2 15 RPM:Size 0 0
+2 14 #text 0 1
+
+2 1 RPM:BuildHost 0 0
+3 3 #text 0 1 erdbeere.delix.de
+2 15 RPM:BuildHost 0 0
+2 14 #text 0 1
+
+2 1 RPM:Provides 0 0
+3 14 #text 0 1
+
+3 1 RDF:Bag 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 ncurses4
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 libpanel.so.4
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 libncurses.so.4
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 libmenu.so.4
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 libform.so.4
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+4 1 RPM:Resource 0 0
+5 3 #text 0 1 ncurses
+4 15 RPM:Resource 0 0
+4 14 #text 0 1
+
+3 15 RDF:Bag 0 0
+3 14 #text 0 1
+
+2 15 RPM:Provides 0 0
+2 14 #text 0 1
+
+2 1 RPM:Files 0 0
+3 3 #text 0 1 /lib/libncurses.so.4
+/lib/libncurses.so.4.2
+/usr/doc/ncurses4-4.2-3
+/usr/doc/ncurses4-4.2-3/ANNOUNCE.gz
+/usr/doc/ncurses4-4.2-3/NEWS.gz
+/usr/doc/ncurses4-4.2-3/README.gz
+/usr/doc/ncurses4-4.2-3/TO-DO.gz
+/usr/lib/libform.so.4
+/usr/lib/libform.so.4.2
+/usr/lib/libmenu.so.4
+/usr/lib/libmenu.so.4.2
+/usr/lib/libpanel.so.4
+/usr/lib/libpanel.so.4.2
+/usr/share/ncurses4
+/usr/share/ncurses4/tabset
+/usr/share/ncurses4/tabset/std
+/usr/share/ncurses4/tabset/stdcrt
+/usr/share/ncurses4/tabset/vt100
+/usr/share/ncurses4/tabset/vt300
+/usr/share/ncurses4/terminfo
+/usr/share/ncurses4/terminfo/1
+/usr/share/ncurses4/terminfo/1/1178
+/usr/share/ncurses4/terminfo/1/1730-lm
+/usr/share/ncurses4/terminfo/2
+/usr/share/ncurses4/terminfo/2/2621
+/usr/share/ncurses4/terminfo/2/2621-wl
+/usr/share/ncurses4/terminfo/2/2621A
+/usr/share/ncurses4/terminfo/2/2621a
+/usr/share/ncurses4/terminfo/3
+/usr/share/ncurses4/terminfo/3/386at
+/usr/share/ncurses4/terminfo/3/3b1
+/usr/share/ncurses4/terminfo/4
+/usr/share/ncurses4/terminfo/4/4025ex
+/usr/share/ncurses4/terminfo/4/4027ex
+/usr/share/ncurses4/terminfo/4/4410-w
+/usr/share/ncurses4/terminfo/5
+/usr/share/ncurses4/terminfo/5/5051
+/usr/share/ncurses4/terminfo/5/5410-w
+/usr/share/ncurses4/terminfo/5/5620
+/usr/share/ncurses4/terminfo/5/5630-24
+/usr/share/ncurses4/terminfo/5/5630DMD-24
+/usr/share/ncurses4/terminfo/6
+/usr/share/ncurses4/terminfo/6/630-lm
+/usr/share/ncurses4/terminfo/6/630MTG-24
+/usr/share/ncurses4/terminfo/7
+/usr/share/ncurses4/terminfo/7/730MTG-24
+/usr/share/ncurses4/terminfo/7/730MTG-41
+/usr/share/ncurses4/terminfo/7/730MTG-41r
+/usr/share/ncurses4/terminfo/7/730MTGr
+/usr/share/ncurses4/terminfo/7/730MTGr-24
+/usr/share/ncurses4/terminfo/8
+/usr/share/ncurses4/terminfo/8/8510
+/usr/share/ncurses4/terminfo/9
+/usr/share/ncurses4/terminfo/9/955-hb
+/usr/share/ncurses4/terminfo/9/955-w
+/usr/share/ncurses4/terminfo/P
+/usr/share/ncurses4/terminfo/P/P12
+/usr/share/ncurses4/terminfo/P/P12-M
+/usr/share/ncurses4/terminfo/P/P12-M-W
+/usr/share/ncurses4/terminfo/P/P12-W
+/usr/share/ncurses4/terminfo/P/P14
+/usr/share/ncurses4/terminfo/P/P14-M
+/usr/share/ncurses4/terminfo/P/P14-M-W
+/usr/share/ncurses4/terminfo/P/P14-W
+/usr/share/ncurses4/terminfo/P/P4
+/usr/share/ncurses4/terminfo/P/P5
+/usr/share/ncurses4/terminfo/P/P7
+/usr/share/ncurses4/terminfo/P/P8
+/usr/share/ncurses4/terminfo/P/P8-W
+/usr/share/ncurses4/terminfo/P/P9
+/usr/share/ncurses4/terminfo/P/P9-8
+/usr/share/ncurses4/terminfo/P/P9-8-W
+/usr/share/ncurses4/terminfo/P/P9-W
+/usr/share/ncurses4/terminfo/X
+/usr/share/ncurses4/terminfo/X/X-hpterm
+/usr/share/ncurses4/terminfo/a
+/usr/share/ncurses4/terminfo/a/a210
+/usr/share/ncurses4/terminfo/a/a80
+/usr/share/ncurses4/terminfo/a/a980
+/usr/share/ncurses4/terminfo/a/aa4080
+/usr/share/ncurses4/terminfo/a/aaa
+/usr/share/ncurses4/terminfo/a/aaa+dec
+/usr/share/ncurses4/terminfo/a/aaa+rv
+/usr/share/ncurses4/terminfo/a/aaa+unk
+/usr/share/ncurses4/terminfo/a/aaa-18
+/usr/share/ncurses4/terminfo/a/aaa-18-rv
+/usr/share/ncurses4/terminfo/a/aaa-20
+/usr/share/ncurses4/terminfo/a/aaa-22
+/usr/share/ncurses4/terminfo/a/aaa-24
+/usr/share/ncurses4/terminfo/a/aaa-24-rv
+/usr/share/ncurses4/terminfo/a/aaa-26
+/usr/share/ncurses4/terminfo/a/aaa-28
+/usr/share/ncurses4/terminfo/a/aaa-30
+/usr/share/ncurses4/terminfo/a/aaa-30-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-rv
+/usr/share/ncurses4/terminfo/a/aaa-30-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-s
+/usr/share/ncurses4/terminfo/a/aaa-30-s-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-30-s-rv-ct
+/usr/share/ncurses4/terminfo/a/aaa-36
+/usr/share/ncurses4/terminfo/a/aaa-36-rv
+/usr/share/ncurses4/terminfo/a/aaa-40
+/usr/share/ncurses4/terminfo/a/aaa-40-rv
+/usr/share/ncurses4/terminfo/a/aaa-48
+/usr/share/ncurses4/terminfo/a/aaa-48-rv
+/usr/share/ncurses4/terminfo/a/aaa-60
+/usr/share/ncurses4/terminfo/a/aaa-60-dec-rv
+/usr/share/ncurses4/terminfo/a/aaa-60-rv
+/usr/share/ncurses4/terminfo/a/aaa-60-s
+/usr/share/ncurses4/terminfo/a/aaa-60-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-db
+/usr/share/ncurses4/terminfo/a/aaa-rv
+/usr/share/ncurses4/terminfo/a/aaa-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-rv-unk
+/usr/share/ncurses4/terminfo/a/aaa-s
+/usr/share/ncurses4/terminfo/a/aaa-s-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-s-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-unk
+/usr/share/ncurses4/terminfo/a/aas1901
+/usr/share/ncurses4/terminfo/a/abm80
+/usr/share/ncurses4/terminfo/a/abm85
+/usr/share/ncurses4/terminfo/a/abm85e
+/usr/share/ncurses4/terminfo/a/abm85h
+/usr/share/ncurses4/terminfo/a/abm85h-old
+/usr/share/ncurses4/terminfo/a/act4
+/usr/share/ncurses4/terminfo/a/act5
+/usr/share/ncurses4/terminfo/a/addrinfo
+/usr/share/ncurses4/terminfo/a/adds980
+/usr/share/ncurses4/terminfo/a/addsviewpoint
+/usr/share/ncurses4/terminfo/a/addsvp60
+/usr/share/ncurses4/terminfo/a/adm+sgr
+/usr/share/ncurses4/terminfo/a/adm1
+/usr/share/ncurses4/terminfo/a/adm11
+/usr/share/ncurses4/terminfo/a/adm1178
+/usr/share/ncurses4/terminfo/a/adm12
+/usr/share/ncurses4/terminfo/a/adm1a
+/usr/share/ncurses4/terminfo/a/adm2
+/usr/share/ncurses4/terminfo/a/adm20
+/usr/share/ncurses4/terminfo/a/adm21
+/usr/share/ncurses4/terminfo/a/adm22
+/usr/share/ncurses4/terminfo/a/adm3
+/usr/share/ncurses4/terminfo/a/adm31
+/usr/share/ncurses4/terminfo/a/adm31-old
+/usr/share/ncurses4/terminfo/a/adm36
+/usr/share/ncurses4/terminfo/a/adm3a
+/usr/share/ncurses4/terminfo/a/adm3a+
+/usr/share/ncurses4/terminfo/a/adm42
+/usr/share/ncurses4/terminfo/a/adm42-ns
+/usr/share/ncurses4/terminfo/a/adm5
+/usr/share/ncurses4/terminfo/a/aepro
+/usr/share/ncurses4/terminfo/a/aixterm-m
+/usr/share/ncurses4/terminfo/a/aixterm-m-old
+/usr/share/ncurses4/terminfo/a/aj
+/usr/share/ncurses4/terminfo/a/aj510
+/usr/share/ncurses4/terminfo/a/aj830
+/usr/share/ncurses4/terminfo/a/aj832
+/usr/share/ncurses4/terminfo/a/alt2
+/usr/share/ncurses4/terminfo/a/alt3
+/usr/share/ncurses4/terminfo/a/alt4
+/usr/share/ncurses4/terminfo/a/alt5
+/usr/share/ncurses4/terminfo/a/alt7
+/usr/share/ncurses4/terminfo/a/alt7pc
+/usr/share/ncurses4/terminfo/a/alto-h19
+/usr/share/ncurses4/terminfo/a/alto-heath
+/usr/share/ncurses4/terminfo/a/altoh19
+/usr/share/ncurses4/terminfo/a/altoheath
+/usr/share/ncurses4/terminfo/a/altos-2
+/usr/share/ncurses4/terminfo/a/altos-3
+/usr/share/ncurses4/terminfo/a/altos-4
+/usr/share/ncurses4/terminfo/a/altos-5
+/usr/share/ncurses4/terminfo/a/altos2
+/usr/share/ncurses4/terminfo/a/altos3
+/usr/share/ncurses4/terminfo/a/altos4
+/usr/share/ncurses4/terminfo/a/altos5
+/usr/share/ncurses4/terminfo/a/altos7
+/usr/share/ncurses4/terminfo/a/altos7pc
+/usr/share/ncurses4/terminfo/a/ambas
+/usr/share/ncurses4/terminfo/a/ambassador
+/usr/share/ncurses4/terminfo/a/amiga
+/usr/share/ncurses4/terminfo/a/amiga-h
+/usr/share/ncurses4/terminfo/a/amp219
+/usr/share/ncurses4/terminfo/a/amp219w
+/usr/share/ncurses4/terminfo/a/ampex-219
+/usr/share/ncurses4/terminfo/a/ampex-219w
+/usr/share/ncurses4/terminfo/a/ampex-232
+/usr/share/ncurses4/terminfo/a/ampex175
+/usr/share/ncurses4/terminfo/a/ampex175-b
+/usr/share/ncurses4/terminfo/a/ampex210
+/usr/share/ncurses4/terminfo/a/ampex219
+/usr/share/ncurses4/terminfo/a/ampex219w
+/usr/share/ncurses4/terminfo/a/ampex232
+/usr/share/ncurses4/terminfo/a/ampex232w
+/usr/share/ncurses4/terminfo/a/ampex80
+/usr/share/ncurses4/terminfo/a/annarbor4080
+/usr/share/ncurses4/terminfo/a/ansi
+/usr/share/ncurses4/terminfo/a/ansi-color-2-emx
+/usr/share/ncurses4/terminfo/a/ansi-color-3-emx
+/usr/share/ncurses4/terminfo/a/ansi-emx
+/usr/share/ncurses4/terminfo/a/ansi-m
+/usr/share/ncurses4/terminfo/a/ansi-mini
+/usr/share/ncurses4/terminfo/a/ansi-mono
+/usr/share/ncurses4/terminfo/a/ansi-nt
+/usr/share/ncurses4/terminfo/a/ansi.sys
+/usr/share/ncurses4/terminfo/a/ansi.sys-old
+/usr/share/ncurses4/terminfo/a/ansi.sysk
+/usr/share/ncurses4/terminfo/a/ansi43m
+/usr/share/ncurses4/terminfo/a/ansi77
+/usr/share/ncurses4/terminfo/a/ansi80x25
+/usr/share/ncurses4/terminfo/a/ansi80x25-mono
+/usr/share/ncurses4/terminfo/a/ansi80x25-raw
+/usr/share/ncurses4/terminfo/a/ansi80x30
+/usr/share/ncurses4/terminfo/a/ansi80x30-mono
+/usr/share/ncurses4/terminfo/a/ansi80x43
+/usr/share/ncurses4/terminfo/a/ansi80x43-mono
+/usr/share/ncurses4/terminfo/a/ansi80x50
+/usr/share/ncurses4/terminfo/a/ansi80x50-mono
+/usr/share/ncurses4/terminfo/a/ansi80x60
+/usr/share/ncurses4/terminfo/a/ansi80x60-mono
+/usr/share/ncurses4/terminfo/a/ansil
+/usr/share/ncurses4/terminfo/a/ansil-mono
+/usr/share/ncurses4/terminfo/a/ansis
+/usr/share/ncurses4/terminfo/a/ansis-mono
+/usr/share/ncurses4/terminfo/a/ansisysk
+/usr/share/ncurses4/terminfo/a/ansiw
+/usr/share/ncurses4/terminfo/a/ap-vm80
+/usr/share/ncurses4/terminfo/a/apl
+/usr/share/ncurses4/terminfo/a/apollo
+/usr/share/ncurses4/terminfo/a/apollo_15P
+/usr/share/ncurses4/terminfo/a/apollo_19L
+/usr/share/ncurses4/terminfo/a/apollo_color
+/usr/share/ncurses4/terminfo/a/apple-80
+/usr/share/ncurses4/terminfo/a/apple-ae
+/usr/share/ncurses4/terminfo/a/apple-soroc
+/usr/share/ncurses4/terminfo/a/apple-uterm
+/usr/share/ncurses4/terminfo/a/apple-uterm-vb
+/usr/share/ncurses4/terminfo/a/apple-videx
+/usr/share/ncurses4/terminfo/a/apple-videx2
+/usr/share/ncurses4/terminfo/a/apple-videx3
+/usr/share/ncurses4/terminfo/a/apple-vm80
+/usr/share/ncurses4/terminfo/a/apple2e
+/usr/share/ncurses4/terminfo/a/apple2e-p
+/usr/share/ncurses4/terminfo/a/apple80p
+/usr/share/ncurses4/terminfo/a/appleII
+/usr/share/ncurses4/terminfo/a/appleIIc
+/usr/share/ncurses4/terminfo/a/appleIIe
+/usr/share/ncurses4/terminfo/a/appleIIgs
+/usr/share/ncurses4/terminfo/a/at386
+/usr/share/ncurses4/terminfo/a/atari
+/usr/share/ncurses4/terminfo/a/att2300
+/usr/share/ncurses4/terminfo/a/att2350
+/usr/share/ncurses4/terminfo/a/att4410
+/usr/share/ncurses4/terminfo/a/att4410-w
+/usr/share/ncurses4/terminfo/a/att4410v1
+/usr/share/ncurses4/terminfo/a/att4410v1-w
+/usr/share/ncurses4/terminfo/a/att4415
+/usr/share/ncurses4/terminfo/a/att4415+nl
+/usr/share/ncurses4/terminfo/a/att4415-nl
+/usr/share/ncurses4/terminfo/a/att4415-rv
+/usr/share/ncurses4/terminfo/a/att4415-rv-nl
+/usr/share/ncurses4/terminfo/a/att4415-w
+/usr/share/ncurses4/terminfo/a/att4415-w-nl
+/usr/share/ncurses4/terminfo/a/att4415-w-rv
+/usr/share/ncurses4/terminfo/a/att4415-w-rv-n
+/usr/share/ncurses4/terminfo/a/att4418
+/usr/share/ncurses4/terminfo/a/att4418-w
+/usr/share/ncurses4/terminfo/a/att4420
+/usr/share/ncurses4/terminfo/a/att4424
+/usr/share/ncurses4/terminfo/a/att4424-1
+/usr/share/ncurses4/terminfo/a/att4424m
+/usr/share/ncurses4/terminfo/a/att4425
+/usr/share/ncurses4/terminfo/a/att4425-nl
+/usr/share/ncurses4/terminfo/a/att4425-w
+/usr/share/ncurses4/terminfo/a/att4426
+/usr/share/ncurses4/terminfo/a/att500
+/usr/share/ncurses4/terminfo/a/att505
+/usr/share/ncurses4/terminfo/a/att505-24
+/usr/share/ncurses4/terminfo/a/att510a
+/usr/share/ncurses4/terminfo/a/att510d
+/usr/share/ncurses4/terminfo/a/att513
+/usr/share/ncurses4/terminfo/a/att5310
+/usr/share/ncurses4/terminfo/a/att5320
+/usr/share/ncurses4/terminfo/a/att5410
+/usr/share/ncurses4/terminfo/a/att5410-w
+/usr/share/ncurses4/terminfo/a/att5410v1
+/usr/share/ncurses4/terminfo/a/att5410v1-w
+/usr/share/ncurses4/terminfo/a/att5418
+/usr/share/ncurses4/terminfo/a/att5418-w
+/usr/share/ncurses4/terminfo/a/att5420
+/usr/share/ncurses4/terminfo/a/att5420+nl
+/usr/share/ncurses4/terminfo/a/att5420-nl
+/usr/share/ncurses4/terminfo/a/att5420-rv
+/usr/share/ncurses4/terminfo/a/att5420-rv-nl
+/usr/share/ncurses4/terminfo/a/att5420-w
+/usr/share/ncurses4/terminfo/a/att5420-w-nl
+/usr/share/ncurses4/terminfo/a/att5420-w-rv
+/usr/share/ncurses4/terminfo/a/att5420-w-rv-n
+/usr/share/ncurses4/terminfo/a/att5420_2
+/usr/share/ncurses4/terminfo/a/att5420_2-w
+/usr/share/ncurses4/terminfo/a/att5425
+/usr/share/ncurses4/terminfo/a/att5425-nl
+/usr/share/ncurses4/terminfo/a/att5425-w
+/usr/share/ncurses4/terminfo/a/att5430
+/usr/share/ncurses4/terminfo/a/att5620
+/usr/share/ncurses4/terminfo/a/att5620-1
+/usr/share/ncurses4/terminfo/a/att5620-24
+/usr/share/ncurses4/terminfo/a/att5620-34
+/usr/share/ncurses4/terminfo/a/att5620-s
+/usr/share/ncurses4/terminfo/a/att605
+/usr/share/ncurses4/terminfo/a/att605-pc
+/usr/share/ncurses4/terminfo/a/att605-w
+/usr/share/ncurses4/terminfo/a/att610
+/usr/share/ncurses4/terminfo/a/att610-103k
+/usr/share/ncurses4/terminfo/a/att610-103k-w
+/usr/share/ncurses4/terminfo/a/att610-w
+/usr/share/ncurses4/terminfo/a/att615
+/usr/share/ncurses4/terminfo/a/att615-103k
+/usr/share/ncurses4/terminfo/a/att615-103k-w
+/usr/share/ncurses4/terminfo/a/att615-w
+/usr/share/ncurses4/terminfo/a/att620
+/usr/share/ncurses4/terminfo/a/att620-103k
+/usr/share/ncurses4/terminfo/a/att620-103k-w
+/usr/share/ncurses4/terminfo/a/att620-w
+/usr/share/ncurses4/terminfo/a/att630
+/usr/share/ncurses4/terminfo/a/att630-24
+/usr/share/ncurses4/terminfo/a/att6386
+/usr/share/ncurses4/terminfo/a/att730
+/usr/share/ncurses4/terminfo/a/att730-24
+/usr/share/ncurses4/terminfo/a/att730-41
+/usr/share/ncurses4/terminfo/a/att7300
+/usr/share/ncurses4/terminfo/a/att730r
+/usr/share/ncurses4/terminfo/a/att730r-24
+/usr/share/ncurses4/terminfo/a/att730r-41
+/usr/share/ncurses4/terminfo/a/avatar
+/usr/share/ncurses4/terminfo/a/avatar0
+/usr/share/ncurses4/terminfo/a/avatar0+
+/usr/share/ncurses4/terminfo/a/avatar1
+/usr/share/ncurses4/terminfo/a/avt
+/usr/share/ncurses4/terminfo/a/avt+s
+/usr/share/ncurses4/terminfo/a/avt-ns
+/usr/share/ncurses4/terminfo/a/avt-rv
+/usr/share/ncurses4/terminfo/a/avt-rv-ns
+/usr/share/ncurses4/terminfo/a/avt-rv-s
+/usr/share/ncurses4/terminfo/a/avt-s
+/usr/share/ncurses4/terminfo/a/avt-w
+/usr/share/ncurses4/terminfo/a/avt-w-ns
+/usr/share/ncurses4/terminfo/a/avt-w-rv
+/usr/share/ncurses4/terminfo/a/avt-w-rv-ns
+/usr/share/ncurses4/terminfo/a/avt-w-rv-s
+/usr/share/ncurses4/terminfo/a/avt-w-s
+/usr/share/ncurses4/terminfo/a/aws
+/usr/share/ncurses4/terminfo/a/awsc
+/usr/share/ncurses4/terminfo/b
+/usr/share/ncurses4/terminfo/b/b-128
+/usr/share/ncurses4/terminfo/b/bantam
+/usr/share/ncurses4/terminfo/b/basic4
+/usr/share/ncurses4/terminfo/b/basis
+/usr/share/ncurses4/terminfo/b/bct510a
+/usr/share/ncurses4/terminfo/b/bct510d
+/usr/share/ncurses4/terminfo/b/beacon
+/usr/share/ncurses4/terminfo/b/bee
+/usr/share/ncurses4/terminfo/b/beehive
+/usr/share/ncurses4/terminfo/b/beehive3
+/usr/share/ncurses4/terminfo/b/beehive4
+/usr/share/ncurses4/terminfo/b/beehiveIIIm
+/usr/share/ncurses4/terminfo/b/beterm
+/usr/share/ncurses4/terminfo/b/bg1.25
+/usr/share/ncurses4/terminfo/b/bg1.25nv
+/usr/share/ncurses4/terminfo/b/bg1.25rv
+/usr/share/ncurses4/terminfo/b/bg2.0
+/usr/share/ncurses4/terminfo/b/bg2.0nv
+/usr/share/ncurses4/terminfo/b/bg2.0rv
+/usr/share/ncurses4/terminfo/b/bg3.10
+/usr/share/ncurses4/terminfo/b/bg3.10nv
+/usr/share/ncurses4/terminfo/b/bg3.10rv
+/usr/share/ncurses4/terminfo/b/bh3m
+/usr/share/ncurses4/terminfo/b/bh4
+/usr/share/ncurses4/terminfo/b/bitgraph
+/usr/share/ncurses4/terminfo/b/blit
+/usr/share/ncurses4/terminfo/b/bobcat
+/usr/share/ncurses4/terminfo/b/bsdos
+/usr/share/ncurses4/terminfo/b/bsdos-bold
+/usr/share/ncurses4/terminfo/c
+/usr/share/ncurses4/terminfo/c/c100
+/usr/share/ncurses4/terminfo/c/c100-1p
+/usr/share/ncurses4/terminfo/c/c100-4p
+/usr/share/ncurses4/terminfo/c/c100-rv
+/usr/share/ncurses4/terminfo/c/c100-rv-4p
+/usr/share/ncurses4/terminfo/c/c104
+/usr/share/ncurses4/terminfo/c/c108
+/usr/share/ncurses4/terminfo/c/c108-4p
+/usr/share/ncurses4/terminfo/c/c108-8p
+/usr/share/ncurses4/terminfo/c/c108-rv
+/usr/share/ncurses4/terminfo/c/c108-rv-4p
+/usr/share/ncurses4/terminfo/c/c108-rv-8p
+/usr/share/ncurses4/terminfo/c/c108-w
+/usr/share/ncurses4/terminfo/c/c108-w-8p
+/usr/share/ncurses4/terminfo/c/c300
+/usr/share/ncurses4/terminfo/c/c301
+/usr/share/ncurses4/terminfo/c/c321
+/usr/share/ncurses4/terminfo/c/ca22851
+/usr/share/ncurses4/terminfo/c/cad68-2
+/usr/share/ncurses4/terminfo/c/cad68-3
+/usr/share/ncurses4/terminfo/c/cbblit
+/usr/share/ncurses4/terminfo/c/cbunix
+/usr/share/ncurses4/terminfo/c/cci
+/usr/share/ncurses4/terminfo/c/cci1
+/usr/share/ncurses4/terminfo/c/cdc456
+/usr/share/ncurses4/terminfo/c/cdc721
+/usr/share/ncurses4/terminfo/c/cdc721-esc
+/usr/share/ncurses4/terminfo/c/cdc721ll
+/usr/share/ncurses4/terminfo/c/cdc752
+/usr/share/ncurses4/terminfo/c/cdc756
+/usr/share/ncurses4/terminfo/c/cg7900
+/usr/share/ncurses4/terminfo/c/cgc2
+/usr/share/ncurses4/terminfo/c/cgc3
+/usr/share/ncurses4/terminfo/c/chromatics
+/usr/share/ncurses4/terminfo/c/ci8510
+/usr/share/ncurses4/terminfo/c/cit-80
+/usr/share/ncurses4/terminfo/c/cit101
+/usr/share/ncurses4/terminfo/c/cit101e
+/usr/share/ncurses4/terminfo/c/cit101e-132
+/usr/share/ncurses4/terminfo/c/cit101e-n
+/usr/share/ncurses4/terminfo/c/cit101e-n132
+/usr/share/ncurses4/terminfo/c/cit101e-rv
+/usr/share/ncurses4/terminfo/c/cit500
+/usr/share/ncurses4/terminfo/c/cit80
+/usr/share/ncurses4/terminfo/c/citc
+/usr/share/ncurses4/terminfo/c/citoh
+/usr/share/ncurses4/terminfo/c/citoh-6lpi
+/usr/share/ncurses4/terminfo/c/citoh-8lpi
+/usr/share/ncurses4/terminfo/c/citoh-comp
+/usr/share/ncurses4/terminfo/c/citoh-elite
+/usr/share/ncurses4/terminfo/c/citoh-pica
+/usr/share/ncurses4/terminfo/c/citoh-prop
+/usr/share/ncurses4/terminfo/c/citoh-ps
+/usr/share/ncurses4/terminfo/c/coco3
+/usr/share/ncurses4/terminfo/c/coherent
+/usr/share/ncurses4/terminfo/c/color_xterm
+/usr/share/ncurses4/terminfo/c/colorscan
+/usr/share/ncurses4/terminfo/c/commodore
+/usr/share/ncurses4/terminfo/c/concept
+/usr/share/ncurses4/terminfo/c/concept-avt
+/usr/share/ncurses4/terminfo/c/concept100
+/usr/share/ncurses4/terminfo/c/concept100-rv
+/usr/share/ncurses4/terminfo/c/concept108
+/usr/share/ncurses4/terminfo/c/concept108-4p
+/usr/share/ncurses4/terminfo/c/concept108-8p
+/usr/share/ncurses4/terminfo/c/concept108-w-8
+/usr/share/ncurses4/terminfo/c/concept108-w8p
+/usr/share/ncurses4/terminfo/c/concept108rv4p
+/usr/share/ncurses4/terminfo/c/cons25
+/usr/share/ncurses4/terminfo/c/cons25-iso-m
+/usr/share/ncurses4/terminfo/c/cons25-iso8859
+/usr/share/ncurses4/terminfo/c/cons25-koi8-r
+/usr/share/ncurses4/terminfo/c/cons25-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons25-m
+/usr/share/ncurses4/terminfo/c/cons25l1
+/usr/share/ncurses4/terminfo/c/cons25l1-m
+/usr/share/ncurses4/terminfo/c/cons25r
+/usr/share/ncurses4/terminfo/c/cons25r-m
+/usr/share/ncurses4/terminfo/c/cons25w
+/usr/share/ncurses4/terminfo/c/cons30
+/usr/share/ncurses4/terminfo/c/cons30-m
+/usr/share/ncurses4/terminfo/c/cons43
+/usr/share/ncurses4/terminfo/c/cons43-m
+/usr/share/ncurses4/terminfo/c/cons50
+/usr/share/ncurses4/terminfo/c/cons50-iso-m
+/usr/share/ncurses4/terminfo/c/cons50-iso8859
+/usr/share/ncurses4/terminfo/c/cons50-koi8r
+/usr/share/ncurses4/terminfo/c/cons50-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons50-m
+/usr/share/ncurses4/terminfo/c/cons50l1
+/usr/share/ncurses4/terminfo/c/cons50l1-m
+/usr/share/ncurses4/terminfo/c/cons50r
+/usr/share/ncurses4/terminfo/c/cons50r-m
+/usr/share/ncurses4/terminfo/c/cons60
+/usr/share/ncurses4/terminfo/c/cons60-iso
+/usr/share/ncurses4/terminfo/c/cons60-iso-m
+/usr/share/ncurses4/terminfo/c/cons60-koi8r
+/usr/share/ncurses4/terminfo/c/cons60-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons60-m
+/usr/share/ncurses4/terminfo/c/cons60l1
+/usr/share/ncurses4/terminfo/c/cons60l1-m
+/usr/share/ncurses4/terminfo/c/cons60r
+/usr/share/ncurses4/terminfo/c/cons60r-m
+/usr/share/ncurses4/terminfo/c/contel300
+/usr/share/ncurses4/terminfo/c/contel301
+/usr/share/ncurses4/terminfo/c/contel320
+/usr/share/ncurses4/terminfo/c/contel321
+/usr/share/ncurses4/terminfo/c/cops
+/usr/share/ncurses4/terminfo/c/cops-10
+/usr/share/ncurses4/terminfo/c/cops10
+/usr/share/ncurses4/terminfo/c/cs10
+/usr/share/ncurses4/terminfo/c/cs10-w
+/usr/share/ncurses4/terminfo/c/ct82
+/usr/share/ncurses4/terminfo/c/ct8500
+/usr/share/ncurses4/terminfo/c/ctrm
+/usr/share/ncurses4/terminfo/c/cx
+/usr/share/ncurses4/terminfo/c/cx100
+/usr/share/ncurses4/terminfo/c/cyb110
+/usr/share/ncurses4/terminfo/c/cyb83
+/usr/share/ncurses4/terminfo/d
+/usr/share/ncurses4/terminfo/d/d132
+/usr/share/ncurses4/terminfo/d/d80
+/usr/share/ncurses4/terminfo/d/d800
+/usr/share/ncurses4/terminfo/d/datagraphix
+/usr/share/ncurses4/terminfo/d/datamedia2500
+/usr/share/ncurses4/terminfo/d/datapoint
+/usr/share/ncurses4/terminfo/d/dataspeed40
+/usr/share/ncurses4/terminfo/d/dd5000
+/usr/share/ncurses4/terminfo/d/ddr
+/usr/share/ncurses4/terminfo/d/ddr3180
+/usr/share/ncurses4/terminfo/d/dec-vt100
+/usr/share/ncurses4/terminfo/d/dec-vt220
+/usr/share/ncurses4/terminfo/d/dec-vt330
+/usr/share/ncurses4/terminfo/d/dec-vt340
+/usr/share/ncurses4/terminfo/d/dec-vt400
+/usr/share/ncurses4/terminfo/d/decpro
+/usr/share/ncurses4/terminfo/d/decwriter
+/usr/share/ncurses4/terminfo/d/delta
+/usr/share/ncurses4/terminfo/d/dg-ansi
+/usr/share/ncurses4/terminfo/d/dg100
+/usr/share/ncurses4/terminfo/d/dg200
+/usr/share/ncurses4/terminfo/d/dg210
+/usr/share/ncurses4/terminfo/d/dg211
+/usr/share/ncurses4/terminfo/d/dg450
+/usr/share/ncurses4/terminfo/d/dg460-ansi
+/usr/share/ncurses4/terminfo/d/dg6053
+/usr/share/ncurses4/terminfo/d/dg6134
+/usr/share/ncurses4/terminfo/d/diablo
+/usr/share/ncurses4/terminfo/d/diablo-lm
+/usr/share/ncurses4/terminfo/d/diablo1620
+/usr/share/ncurses4/terminfo/d/diablo1620-m8
+/usr/share/ncurses4/terminfo/d/diablo1640
+/usr/share/ncurses4/terminfo/d/diablo1640-lm
+/usr/share/ncurses4/terminfo/d/diablo1640-m8
+/usr/share/ncurses4/terminfo/d/diablo1720
+/usr/share/ncurses4/terminfo/d/diablo1730
+/usr/share/ncurses4/terminfo/d/diablo1740
+/usr/share/ncurses4/terminfo/d/diablo1740-lm
+/usr/share/ncurses4/terminfo/d/diablo450
+/usr/share/ncurses4/terminfo/d/diablo630
+/usr/share/ncurses4/terminfo/d/dialogue
+/usr/share/ncurses4/terminfo/d/dialogue80
+/usr/share/ncurses4/terminfo/d/digilog
+/usr/share/ncurses4/terminfo/d/dku7003
+/usr/share/ncurses4/terminfo/d/dku7003-dumb
+/usr/share/ncurses4/terminfo/d/dm1520
+/usr/share/ncurses4/terminfo/d/dm1521
+/usr/share/ncurses4/terminfo/d/dm2500
+/usr/share/ncurses4/terminfo/d/dm3025
+/usr/share/ncurses4/terminfo/d/dm3045
+/usr/share/ncurses4/terminfo/d/dm80
+/usr/share/ncurses4/terminfo/d/dm80w
+/usr/share/ncurses4/terminfo/d/dmchat
+/usr/share/ncurses4/terminfo/d/dmd
+/usr/share/ncurses4/terminfo/d/dmd-24
+/usr/share/ncurses4/terminfo/d/dmd-34
+/usr/share/ncurses4/terminfo/d/dmd1
+/usr/share/ncurses4/terminfo/d/dmdt80
+/usr/share/ncurses4/terminfo/d/dmdt80w
+/usr/share/ncurses4/terminfo/d/dmterm
+/usr/share/ncurses4/terminfo/d/dp3360
+/usr/share/ncurses4/terminfo/d/dp8242
+/usr/share/ncurses4/terminfo/d/ds40
+/usr/share/ncurses4/terminfo/d/ds40-2
+/usr/share/ncurses4/terminfo/d/dt-100
+/usr/share/ncurses4/terminfo/d/dt-100w
+/usr/share/ncurses4/terminfo/d/dt100
+/usr/share/ncurses4/terminfo/d/dt100w
+/usr/share/ncurses4/terminfo/d/dt110
+/usr/share/ncurses4/terminfo/d/dt80
+/usr/share/ncurses4/terminfo/d/dt80-sas
+/usr/share/ncurses4/terminfo/d/dt80w
+/usr/share/ncurses4/terminfo/d/dtc300s
+/usr/share/ncurses4/terminfo/d/dtc382
+/usr/share/ncurses4/terminfo/d/dtterm
+/usr/share/ncurses4/terminfo/d/dumb
+/usr/share/ncurses4/terminfo/d/dw
+/usr/share/ncurses4/terminfo/d/dw1
+/usr/share/ncurses4/terminfo/d/dw2
+/usr/share/ncurses4/terminfo/d/dw3
+/usr/share/ncurses4/terminfo/d/dw4
+/usr/share/ncurses4/terminfo/d/dwk
+/usr/share/ncurses4/terminfo/d/dwk-vt
+/usr/share/ncurses4/terminfo/e
+/usr/share/ncurses4/terminfo/e/ecma+color
+/usr/share/ncurses4/terminfo/e/ecma+sgr
+/usr/share/ncurses4/terminfo/e/emots
+/usr/share/ncurses4/terminfo/e/emu
+/usr/share/ncurses4/terminfo/e/env230
+/usr/share/ncurses4/terminfo/e/envision230
+/usr/share/ncurses4/terminfo/e/ep40
+/usr/share/ncurses4/terminfo/e/ep4000
+/usr/share/ncurses4/terminfo/e/ep4080
+/usr/share/ncurses4/terminfo/e/ep48
+/usr/share/ncurses4/terminfo/e/ergo4000
+/usr/share/ncurses4/terminfo/e/esprit
+/usr/share/ncurses4/terminfo/e/esprit-am
+/usr/share/ncurses4/terminfo/e/eterm
+/usr/share/ncurses4/terminfo/e/ex155
+/usr/share/ncurses4/terminfo/e/excel62
+/usr/share/ncurses4/terminfo/e/excel62-rv
+/usr/share/ncurses4/terminfo/e/excel62-w
+/usr/share/ncurses4/terminfo/e/excel64
+/usr/share/ncurses4/terminfo/e/excel64-rv
+/usr/share/ncurses4/terminfo/e/excel64-w
+/usr/share/ncurses4/terminfo/e/exec80
+/usr/share/ncurses4/terminfo/f
+/usr/share/ncurses4/terminfo/f/f100
+/usr/share/ncurses4/terminfo/f/f100-rv
+/usr/share/ncurses4/terminfo/f/f110
+/usr/share/ncurses4/terminfo/f/f110-14
+/usr/share/ncurses4/terminfo/f/f110-14w
+/usr/share/ncurses4/terminfo/f/f110-w
+/usr/share/ncurses4/terminfo/f/f1720
+/usr/share/ncurses4/terminfo/f/f1720a
+/usr/share/ncurses4/terminfo/f/f200
+/usr/share/ncurses4/terminfo/f/f200-w
+/usr/share/ncurses4/terminfo/f/f200vi
+/usr/share/ncurses4/terminfo/f/f200vi-w
+/usr/share/ncurses4/terminfo/f/falco
+/usr/share/ncurses4/terminfo/f/falco-p
+/usr/share/ncurses4/terminfo/f/fenix
+/usr/share/ncurses4/terminfo/f/fenixw
+/usr/share/ncurses4/terminfo/f/fixterm
+/usr/share/ncurses4/terminfo/f/fortune
+/usr/share/ncurses4/terminfo/f/fos
+/usr/share/ncurses4/terminfo/f/fox
+/usr/share/ncurses4/terminfo/f/freedom
+/usr/share/ncurses4/terminfo/f/freedom-rv
+/usr/share/ncurses4/terminfo/f/freedom100
+/usr/share/ncurses4/terminfo/f/freedom110
+/usr/share/ncurses4/terminfo/f/freedom200
+/usr/share/ncurses4/terminfo/g
+/usr/share/ncurses4/terminfo/g/gator
+/usr/share/ncurses4/terminfo/g/gator-52
+/usr/share/ncurses4/terminfo/g/gator-52t
+/usr/share/ncurses4/terminfo/g/gator-t
+/usr/share/ncurses4/terminfo/g/gigi
+/usr/share/ncurses4/terminfo/g/glasstty
+/usr/share/ncurses4/terminfo/g/go-225
+/usr/share/ncurses4/terminfo/g/go140
+/usr/share/ncurses4/terminfo/g/go140w
+/usr/share/ncurses4/terminfo/g/go225
+/usr/share/ncurses4/terminfo/g/graphos
+/usr/share/ncurses4/terminfo/g/graphos-30
+/usr/share/ncurses4/terminfo/g/gs5430
+/usr/share/ncurses4/terminfo/g/gs5430-22
+/usr/share/ncurses4/terminfo/g/gs5430-24
+/usr/share/ncurses4/terminfo/g/gs6300
+/usr/share/ncurses4/terminfo/g/gsi
+/usr/share/ncurses4/terminfo/g/gt100
+/usr/share/ncurses4/terminfo/g/gt100a
+/usr/share/ncurses4/terminfo/g/gt40
+/usr/share/ncurses4/terminfo/g/gt42
+/usr/share/ncurses4/terminfo/g/guru
+/usr/share/ncurses4/terminfo/g/guru+rv
+/usr/share/ncurses4/terminfo/g/guru+s
+/usr/share/ncurses4/terminfo/g/guru+unk
+/usr/share/ncurses4/terminfo/g/guru-24
+/usr/share/ncurses4/terminfo/g/guru-33
+/usr/share/ncurses4/terminfo/g/guru-33-rv
+/usr/share/ncurses4/terminfo/g/guru-33-s
+/usr/share/ncurses4/terminfo/g/guru-44
+/usr/share/ncurses4/terminfo/g/guru-44-s
+/usr/share/ncurses4/terminfo/g/guru-76
+/usr/share/ncurses4/terminfo/g/guru-76-lp
+/usr/share/ncurses4/terminfo/g/guru-76-s
+/usr/share/ncurses4/terminfo/g/guru-76-w
+/usr/share/ncurses4/terminfo/g/guru-76-w-s
+/usr/share/ncurses4/terminfo/g/guru-76-wm
+/usr/share/ncurses4/terminfo/g/guru-lp
+/usr/share/ncurses4/terminfo/g/guru-nctxt
+/usr/share/ncurses4/terminfo/g/guru-rv
+/usr/share/ncurses4/terminfo/g/guru-s
+/usr/share/ncurses4/terminfo/h
+/usr/share/ncurses4/terminfo/h/h-100
+/usr/share/ncurses4/terminfo/h/h-100bw
+/usr/share/ncurses4/terminfo/h/h100
+/usr/share/ncurses4/terminfo/h/h100bw
+/usr/share/ncurses4/terminfo/h/h19
+/usr/share/ncurses4/terminfo/h/h19-a
+/usr/share/ncurses4/terminfo/h/h19-b
+/usr/share/ncurses4/terminfo/h/h19-bs
+/usr/share/ncurses4/terminfo/h/h19-g
+/usr/share/ncurses4/terminfo/h/h19-smul
+/usr/share/ncurses4/terminfo/h/h19-u
+/usr/share/ncurses4/terminfo/h/h19-us
+/usr/share/ncurses4/terminfo/h/h19a
+/usr/share/ncurses4/terminfo/h/h19g
+/usr/share/ncurses4/terminfo/h/h19k
+/usr/share/ncurses4/terminfo/h/h19kermit
+/usr/share/ncurses4/terminfo/h/h19us
+/usr/share/ncurses4/terminfo/h/h29a-kc-bc
+/usr/share/ncurses4/terminfo/h/h29a-kc-uc
+/usr/share/ncurses4/terminfo/h/h29a-nkc-bc
+/usr/share/ncurses4/terminfo/h/h29a-nkc-uc
+/usr/share/ncurses4/terminfo/h/h80
+/usr/share/ncurses4/terminfo/h/ha8675
+/usr/share/ncurses4/terminfo/h/ha8686
+/usr/share/ncurses4/terminfo/h/hazel
+/usr/share/ncurses4/terminfo/h/hds200
+/usr/share/ncurses4/terminfo/h/he80
+/usr/share/ncurses4/terminfo/h/heath
+/usr/share/ncurses4/terminfo/h/heath-19
+/usr/share/ncurses4/terminfo/h/heath-ansi
+/usr/share/ncurses4/terminfo/h/heathkit
+/usr/share/ncurses4/terminfo/h/heathkit-a
+/usr/share/ncurses4/terminfo/h/hft
+/usr/share/ncurses4/terminfo/h/hft-c
+/usr/share/ncurses4/terminfo/h/hirez100
+/usr/share/ncurses4/terminfo/h/hirez100-w
+/usr/share/ncurses4/terminfo/h/hmod1
+/usr/share/ncurses4/terminfo/h/hp
+/usr/share/ncurses4/terminfo/h/hp+arrows
+/usr/share/ncurses4/terminfo/h/hp+color
+/usr/share/ncurses4/terminfo/h/hp+labels
+/usr/share/ncurses4/terminfo/h/hp+pfk+arrows
+/usr/share/ncurses4/terminfo/h/hp+pfk+cr
+/usr/share/ncurses4/terminfo/h/hp+pfk-cr
+/usr/share/ncurses4/terminfo/h/hp+printer
+/usr/share/ncurses4/terminfo/h/hp110
+/usr/share/ncurses4/terminfo/h/hp150
+/usr/share/ncurses4/terminfo/h/hp2
+/usr/share/ncurses4/terminfo/h/hp236
+/usr/share/ncurses4/terminfo/h/hp2382
+/usr/share/ncurses4/terminfo/h/hp2382a
+/usr/share/ncurses4/terminfo/h/hp2392
+/usr/share/ncurses4/terminfo/h/hp2397
+/usr/share/ncurses4/terminfo/h/hp2397a
+/usr/share/ncurses4/terminfo/h/hp2621
+/usr/share/ncurses4/terminfo/h/hp2621-48
+/usr/share/ncurses4/terminfo/h/hp2621-a
+/usr/share/ncurses4/terminfo/h/hp2621-ba
+/usr/share/ncurses4/terminfo/h/hp2621-fl
+/usr/share/ncurses4/terminfo/h/hp2621-k45
+/usr/share/ncurses4/terminfo/h/hp2621-nl
+/usr/share/ncurses4/terminfo/h/hp2621-nt
+/usr/share/ncurses4/terminfo/h/hp2621-wl
+/usr/share/ncurses4/terminfo/h/hp2621A
+/usr/share/ncurses4/terminfo/h/hp2621a
+/usr/share/ncurses4/terminfo/h/hp2621a-a
+/usr/share/ncurses4/terminfo/h/hp2621b
+/usr/share/ncurses4/terminfo/h/hp2621b-kx
+/usr/share/ncurses4/terminfo/h/hp2621b-kx-p
+/usr/share/ncurses4/terminfo/h/hp2621b-p
+/usr/share/ncurses4/terminfo/h/hp2621k45
+/usr/share/ncurses4/terminfo/h/hp2621p
+/usr/share/ncurses4/terminfo/h/hp2621p-a
+/usr/share/ncurses4/terminfo/h/hp2622
+/usr/share/ncurses4/terminfo/h/hp2622a
+/usr/share/ncurses4/terminfo/h/hp2623
+/usr/share/ncurses4/terminfo/h/hp2623a
+/usr/share/ncurses4/terminfo/h/hp2624
+/usr/share/ncurses4/terminfo/h/hp2624-10p
+/usr/share/ncurses4/terminfo/h/hp2624a
+/usr/share/ncurses4/terminfo/h/hp2624a-10p
+/usr/share/ncurses4/terminfo/h/hp2624b
+/usr/share/ncurses4/terminfo/h/hp2624b-10p
+/usr/share/ncurses4/terminfo/h/hp2624b-10p-p
+/usr/share/ncurses4/terminfo/h/hp2624b-4p
+/usr/share/ncurses4/terminfo/h/hp2624b-4p-p
+/usr/share/ncurses4/terminfo/h/hp2624b-p
+/usr/share/ncurses4/terminfo/h/hp2626
+/usr/share/ncurses4/terminfo/h/hp2626-12
+/usr/share/ncurses4/terminfo/h/hp2626-12-s
+/usr/share/ncurses4/terminfo/h/hp2626-12x40
+/usr/share/ncurses4/terminfo/h/hp2626-ns
+/usr/share/ncurses4/terminfo/h/hp2626-s
+/usr/share/ncurses4/terminfo/h/hp2626-x40
+/usr/share/ncurses4/terminfo/h/hp2626a
+/usr/share/ncurses4/terminfo/h/hp2626p
+/usr/share/ncurses4/terminfo/h/hp2627a
+/usr/share/ncurses4/terminfo/h/hp2627a-rev
+/usr/share/ncurses4/terminfo/h/hp2627c
+/usr/share/ncurses4/terminfo/h/hp262x
+/usr/share/ncurses4/terminfo/h/hp2640a
+/usr/share/ncurses4/terminfo/h/hp2640b
+/usr/share/ncurses4/terminfo/h/hp2641a
+/usr/share/ncurses4/terminfo/h/hp2644a
+/usr/share/ncurses4/terminfo/h/hp2645
+/usr/share/ncurses4/terminfo/h/hp2645a
+/usr/share/ncurses4/terminfo/h/hp2647a
+/usr/share/ncurses4/terminfo/h/hp2648
+/usr/share/ncurses4/terminfo/h/hp2648a
+/usr/share/ncurses4/terminfo/h/hp300h
+/usr/share/ncurses4/terminfo/h/hp45
+/usr/share/ncurses4/terminfo/h/hp700
+/usr/share/ncurses4/terminfo/h/hp700-wy
+/usr/share/ncurses4/terminfo/h/hp70092
+/usr/share/ncurses4/terminfo/h/hp70092A
+/usr/share/ncurses4/terminfo/h/hp70092a
+/usr/share/ncurses4/terminfo/h/hp9837
+/usr/share/ncurses4/terminfo/h/hp9845
+/usr/share/ncurses4/terminfo/h/hp98550
+/usr/share/ncurses4/terminfo/h/hp98550a
+/usr/share/ncurses4/terminfo/h/hp98720
+/usr/share/ncurses4/terminfo/h/hp98721
+/usr/share/ncurses4/terminfo/h/hpansi
+/usr/share/ncurses4/terminfo/h/hpex
+/usr/share/ncurses4/terminfo/h/hpex2
+/usr/share/ncurses4/terminfo/h/hpgeneric
+/usr/share/ncurses4/terminfo/h/hpsub
+/usr/share/ncurses4/terminfo/h/hpterm
+/usr/share/ncurses4/terminfo/h/htx11
+/usr/share/ncurses4/terminfo/h/hz1000
+/usr/share/ncurses4/terminfo/h/hz1420
+/usr/share/ncurses4/terminfo/h/hz1500
+/usr/share/ncurses4/terminfo/h/hz1510
+/usr/share/ncurses4/terminfo/h/hz1520
+/usr/share/ncurses4/terminfo/h/hz1520-noesc
+/usr/share/ncurses4/terminfo/h/hz1552
+/usr/share/ncurses4/terminfo/h/hz1552-rv
+/usr/share/ncurses4/terminfo/h/hz2000
+/usr/share/ncurses4/terminfo/i
+/usr/share/ncurses4/terminfo/i/i100
+/usr/share/ncurses4/terminfo/i/i3101
+/usr/share/ncurses4/terminfo/i/i3151
+/usr/share/ncurses4/terminfo/i/i3164
+/usr/share/ncurses4/terminfo/i/i400
+/usr/share/ncurses4/terminfo/i/ibcs2
+/usr/share/ncurses4/terminfo/i/ibm-apl
+/usr/share/ncurses4/terminfo/i/ibm-pc
+/usr/share/ncurses4/terminfo/i/ibm-system1
+/usr/share/ncurses4/terminfo/i/ibm3101
+/usr/share/ncurses4/terminfo/i/ibm3151
+/usr/share/ncurses4/terminfo/i/ibm3161
+/usr/share/ncurses4/terminfo/i/ibm3163
+/usr/share/ncurses4/terminfo/i/ibm3164
+/usr/share/ncurses4/terminfo/i/ibm327x
+/usr/share/ncurses4/terminfo/i/ibm5051
+/usr/share/ncurses4/terminfo/i/ibm5081
+/usr/share/ncurses4/terminfo/i/ibm5081-c
+/usr/share/ncurses4/terminfo/i/ibm5151
+/usr/share/ncurses4/terminfo/i/ibm5154
+/usr/share/ncurses4/terminfo/i/ibm5154-c
+/usr/share/ncurses4/terminfo/i/ibm6153
+/usr/share/ncurses4/terminfo/i/ibm6154
+/usr/share/ncurses4/terminfo/i/ibm6154-c
+/usr/share/ncurses4/terminfo/i/ibm6155
+/usr/share/ncurses4/terminfo/i/ibm8512
+/usr/share/ncurses4/terminfo/i/ibm8513
+/usr/share/ncurses4/terminfo/i/ibm8514
+/usr/share/ncurses4/terminfo/i/ibm8514-c
+/usr/share/ncurses4/terminfo/i/ibmaed
+/usr/share/ncurses4/terminfo/i/ibmapa16
+/usr/share/ncurses4/terminfo/i/ibmapa8
+/usr/share/ncurses4/terminfo/i/ibmapa8c
+/usr/share/ncurses4/terminfo/i/ibmapa8c-c
+/usr/share/ncurses4/terminfo/i/ibmega
+/usr/share/ncurses4/terminfo/i/ibmega-c
+/usr/share/ncurses4/terminfo/i/ibmmono
+/usr/share/ncurses4/terminfo/i/ibmmpel
+/usr/share/ncurses4/terminfo/i/ibmmpel-c
+/usr/share/ncurses4/terminfo/i/ibmpc
+/usr/share/ncurses4/terminfo/i/ibmpc3
+/usr/share/ncurses4/terminfo/i/ibmpc3r
+/usr/share/ncurses4/terminfo/i/ibmpc3r-mono
+/usr/share/ncurses4/terminfo/i/ibmpcx
+/usr/share/ncurses4/terminfo/i/ibmvga
+/usr/share/ncurses4/terminfo/i/ibmvga-c
+/usr/share/ncurses4/terminfo/i/ibmx
+/usr/share/ncurses4/terminfo/i/ifmr
+/usr/share/ncurses4/terminfo/i/ims-ansi
+/usr/share/ncurses4/terminfo/i/ims950
+/usr/share/ncurses4/terminfo/i/ims950-b
+/usr/share/ncurses4/terminfo/i/ims950-rv
+/usr/share/ncurses4/terminfo/i/infoton
+/usr/share/ncurses4/terminfo/i/intertec
+/usr/share/ncurses4/terminfo/i/intertube
+/usr/share/ncurses4/terminfo/i/intertube2
+/usr/share/ncurses4/terminfo/i/intext
+/usr/share/ncurses4/terminfo/i/intext2
+/usr/share/ncurses4/terminfo/i/intextii
+/usr/share/ncurses4/terminfo/i/ips
+/usr/share/ncurses4/terminfo/i/ipsi
+/usr/share/ncurses4/terminfo/i/iq120
+/usr/share/ncurses4/terminfo/i/iq140
+/usr/share/ncurses4/terminfo/i/iris-ansi
+/usr/share/ncurses4/terminfo/i/iris-ansi-ap
+/usr/share/ncurses4/terminfo/i/iris-color
+/usr/share/ncurses4/terminfo/i/iris40
+/usr/share/ncurses4/terminfo/j
+/usr/share/ncurses4/terminfo/j/jaixterm-m
+/usr/share/ncurses4/terminfo/j/jerq
+/usr/share/ncurses4/terminfo/k
+/usr/share/ncurses4/terminfo/k/k45
+/usr/share/ncurses4/terminfo/k/kaypro
+/usr/share/ncurses4/terminfo/k/kaypro2
+/usr/share/ncurses4/terminfo/k/kermit
+/usr/share/ncurses4/terminfo/k/kermit-am
+/usr/share/ncurses4/terminfo/k/klone+acs
+/usr/share/ncurses4/terminfo/k/klone+color
+/usr/share/ncurses4/terminfo/k/klone+koi8acs
+/usr/share/ncurses4/terminfo/k/klone+sgr
+/usr/share/ncurses4/terminfo/k/klone+sgr-dumb
+/usr/share/ncurses4/terminfo/k/kt7
+/usr/share/ncurses4/terminfo/k/kt7ix
+/usr/share/ncurses4/terminfo/k/kterm
+/usr/share/ncurses4/terminfo/k/ktm
+/usr/share/ncurses4/terminfo/l
+/usr/share/ncurses4/terminfo/l/la120
+/usr/share/ncurses4/terminfo/l/layer
+/usr/share/ncurses4/terminfo/l/linux
+/usr/share/ncurses4/terminfo/l/linux-c
+/usr/share/ncurses4/terminfo/l/linux-c-nc
+/usr/share/ncurses4/terminfo/l/linux-koi8
+/usr/share/ncurses4/terminfo/l/linux-koi8r
+/usr/share/ncurses4/terminfo/l/linux-m
+/usr/share/ncurses4/terminfo/l/linux-nic
+/usr/share/ncurses4/terminfo/l/lisa
+/usr/share/ncurses4/terminfo/l/lisaterm
+/usr/share/ncurses4/terminfo/l/lisaterm-w
+/usr/share/ncurses4/terminfo/l/liswb
+/usr/share/ncurses4/terminfo/l/ln03
+/usr/share/ncurses4/terminfo/l/ln03-w
+/usr/share/ncurses4/terminfo/l/lpr
+/usr/share/ncurses4/terminfo/l/luna
+/usr/share/ncurses4/terminfo/l/luna68k
+/usr/share/ncurses4/terminfo/m
+/usr/share/ncurses4/terminfo/m/m2-nam
+/usr/share/ncurses4/terminfo/m/mac
+/usr/share/ncurses4/terminfo/m/mac-w
+/usr/share/ncurses4/terminfo/m/macintosh
+/usr/share/ncurses4/terminfo/m/macterminal-w
+/usr/share/ncurses4/terminfo/m/mai
+/usr/share/ncurses4/terminfo/m/masscomp
+/usr/share/ncurses4/terminfo/m/masscomp1
+/usr/share/ncurses4/terminfo/m/masscomp2
+/usr/share/ncurses4/terminfo/m/mdl110
+/usr/share/ncurses4/terminfo/m/megatek
+/usr/share/ncurses4/terminfo/m/memhp
+/usr/share/ncurses4/terminfo/m/mgr
+/usr/share/ncurses4/terminfo/m/mgr-linux
+/usr/share/ncurses4/terminfo/m/mgr-sun
+/usr/share/ncurses4/terminfo/m/microb
+/usr/share/ncurses4/terminfo/m/microbee
+/usr/share/ncurses4/terminfo/m/microterm
+/usr/share/ncurses4/terminfo/m/microterm5
+/usr/share/ncurses4/terminfo/m/mime
+/usr/share/ncurses4/terminfo/m/mime-3ax
+/usr/share/ncurses4/terminfo/m/mime-fb
+/usr/share/ncurses4/terminfo/m/mime-hb
+/usr/share/ncurses4/terminfo/m/mime1
+/usr/share/ncurses4/terminfo/m/mime2
+/usr/share/ncurses4/terminfo/m/mime2a
+/usr/share/ncurses4/terminfo/m/mime2a-s
+/usr/share/ncurses4/terminfo/m/mime2a-v
+/usr/share/ncurses4/terminfo/m/mime314
+/usr/share/ncurses4/terminfo/m/mime340
+/usr/share/ncurses4/terminfo/m/mime3a
+/usr/share/ncurses4/terminfo/m/mime3ax
+/usr/share/ncurses4/terminfo/m/mimei
+/usr/share/ncurses4/terminfo/m/mimeii
+/usr/share/ncurses4/terminfo/m/minitel
+/usr/share/ncurses4/terminfo/m/minitel-2
+/usr/share/ncurses4/terminfo/m/minitel-2-nam
+/usr/share/ncurses4/terminfo/m/minix
+/usr/share/ncurses4/terminfo/m/minix-old
+/usr/share/ncurses4/terminfo/m/minix-old-am
+/usr/share/ncurses4/terminfo/m/mm314
+/usr/share/ncurses4/terminfo/m/mm340
+/usr/share/ncurses4/terminfo/m/mod
+/usr/share/ncurses4/terminfo/m/mod24
+/usr/share/ncurses4/terminfo/m/modgraph
+/usr/share/ncurses4/terminfo/m/modgraph2
+/usr/share/ncurses4/terminfo/m/modgraph48
+/usr/share/ncurses4/terminfo/m/mono-emx
+/usr/share/ncurses4/terminfo/m/msk227
+/usr/share/ncurses4/terminfo/m/msk22714
+/usr/share/ncurses4/terminfo/m/msk227am
+/usr/share/ncurses4/terminfo/m/mskermit227
+/usr/share/ncurses4/terminfo/m/mskermit22714
+/usr/share/ncurses4/terminfo/m/mskermit227am
+/usr/share/ncurses4/terminfo/m/mt-70
+/usr/share/ncurses4/terminfo/m/mt4520-rv
+/usr/share/ncurses4/terminfo/m/mt70
+/usr/share/ncurses4/terminfo/n
+/usr/share/ncurses4/terminfo/n/nansi.sys
+/usr/share/ncurses4/terminfo/n/nansi.sysk
+/usr/share/ncurses4/terminfo/n/nansisys
+/usr/share/ncurses4/terminfo/n/nansisysk
+/usr/share/ncurses4/terminfo/n/ncr7900
+/usr/share/ncurses4/terminfo/n/ncr7900i
+/usr/share/ncurses4/terminfo/n/ncr7900iv
+/usr/share/ncurses4/terminfo/n/ncr7901
+/usr/share/ncurses4/terminfo/n/nec
+/usr/share/ncurses4/terminfo/n/nec5520
+/usr/share/ncurses4/terminfo/n/newhp
+/usr/share/ncurses4/terminfo/n/newhpkeyboard
+/usr/share/ncurses4/terminfo/n/news
+/usr/share/ncurses4/terminfo/n/news-29
+/usr/share/ncurses4/terminfo/n/news-29-euc
+/usr/share/ncurses4/terminfo/n/news-29-sjis
+/usr/share/ncurses4/terminfo/n/news-33
+/usr/share/ncurses4/terminfo/n/news-33-euc
+/usr/share/ncurses4/terminfo/n/news-33-sjis
+/usr/share/ncurses4/terminfo/n/news-42
+/usr/share/ncurses4/terminfo/n/news-42-euc
+/usr/share/ncurses4/terminfo/n/news-42-sjis
+/usr/share/ncurses4/terminfo/n/news-a
+/usr/share/ncurses4/terminfo/n/news-o
+/usr/share/ncurses4/terminfo/n/news-old-unk
+/usr/share/ncurses4/terminfo/n/news-unk
+/usr/share/ncurses4/terminfo/n/news28
+/usr/share/ncurses4/terminfo/n/news28-a
+/usr/share/ncurses4/terminfo/n/news29
+/usr/share/ncurses4/terminfo/n/news31
+/usr/share/ncurses4/terminfo/n/news31-a
+/usr/share/ncurses4/terminfo/n/news31-o
+/usr/share/ncurses4/terminfo/n/news33
+/usr/share/ncurses4/terminfo/n/news40
+/usr/share/ncurses4/terminfo/n/news40-a
+/usr/share/ncurses4/terminfo/n/news40-o
+/usr/share/ncurses4/terminfo/n/news42
+/usr/share/ncurses4/terminfo/n/newscbm
+/usr/share/ncurses4/terminfo/n/newscbm-a
+/usr/share/ncurses4/terminfo/n/newscbm-o
+/usr/share/ncurses4/terminfo/n/newscbm33
+/usr/share/ncurses4/terminfo/n/next
+/usr/share/ncurses4/terminfo/n/nextshell
+/usr/share/ncurses4/terminfo/n/northstar
+/usr/share/ncurses4/terminfo/n/nwe501
+/usr/share/ncurses4/terminfo/n/nwe501-a
+/usr/share/ncurses4/terminfo/n/nwe501-o
+/usr/share/ncurses4/terminfo/n/nwp-511
+/usr/share/ncurses4/terminfo/n/nwp-517
+/usr/share/ncurses4/terminfo/n/nwp-517-w
+/usr/share/ncurses4/terminfo/n/nwp251-a
+/usr/share/ncurses4/terminfo/n/nwp251-o
+/usr/share/ncurses4/terminfo/n/nwp511
+/usr/share/ncurses4/terminfo/n/nwp512
+/usr/share/ncurses4/terminfo/n/nwp512-a
+/usr/share/ncurses4/terminfo/n/nwp512-o
+/usr/share/ncurses4/terminfo/n/nwp513
+/usr/share/ncurses4/terminfo/n/nwp513-a
+/usr/share/ncurses4/terminfo/n/nwp513-o
+/usr/share/ncurses4/terminfo/n/nwp514
+/usr/share/ncurses4/terminfo/n/nwp514-a
+/usr/share/ncurses4/terminfo/n/nwp514-o
+/usr/share/ncurses4/terminfo/n/nwp517
+/usr/share/ncurses4/terminfo/n/nwp517-w
+/usr/share/ncurses4/terminfo/n/nwp518
+/usr/share/ncurses4/terminfo/n/nwp518-a
+/usr/share/ncurses4/terminfo/n/nwp518-o
+/usr/share/ncurses4/terminfo/o
+/usr/share/ncurses4/terminfo/o/o31
+/usr/share/ncurses4/terminfo/o/o4112-nd
+/usr/share/ncurses4/terminfo/o/o85h
+/usr/share/ncurses4/terminfo/o/oabm85h
+/usr/share/ncurses4/terminfo/o/oblit
+/usr/share/ncurses4/terminfo/o/oc100
+/usr/share/ncurses4/terminfo/o/oconcept
+/usr/share/ncurses4/terminfo/o/ojerq
+/usr/share/ncurses4/terminfo/o/oldibmpc3
+/usr/share/ncurses4/terminfo/o/oldpc3
+/usr/share/ncurses4/terminfo/o/oldsun
+/usr/share/ncurses4/terminfo/o/omron
+/usr/share/ncurses4/terminfo/o/opus3n1+
+/usr/share/ncurses4/terminfo/o/origibmpc3
+/usr/share/ncurses4/terminfo/o/origpc3
+/usr/share/ncurses4/terminfo/o/os9LII
+/usr/share/ncurses4/terminfo/o/osborne
+/usr/share/ncurses4/terminfo/o/osborne-w
+/usr/share/ncurses4/terminfo/o/osborne1
+/usr/share/ncurses4/terminfo/o/osborne1-w
+/usr/share/ncurses4/terminfo/o/osexec
+/usr/share/ncurses4/terminfo/o/otek4112
+/usr/share/ncurses4/terminfo/o/otek4113
+/usr/share/ncurses4/terminfo/o/otek4114
+/usr/share/ncurses4/terminfo/o/otek4115
+/usr/share/ncurses4/terminfo/o/owl
+/usr/share/ncurses4/terminfo/p
+/usr/share/ncurses4/terminfo/p/p12
+/usr/share/ncurses4/terminfo/p/p12-m
+/usr/share/ncurses4/terminfo/p/p12-m-w
+/usr/share/ncurses4/terminfo/p/p12-w
+/usr/share/ncurses4/terminfo/p/p14
+/usr/share/ncurses4/terminfo/p/p14-m
+/usr/share/ncurses4/terminfo/p/p14-m-w
+/usr/share/ncurses4/terminfo/p/p14-w
+/usr/share/ncurses4/terminfo/p/p19
+/usr/share/ncurses4/terminfo/p/p4
+/usr/share/ncurses4/terminfo/p/p5
+/usr/share/ncurses4/terminfo/p/p7
+/usr/share/ncurses4/terminfo/p/p8
+/usr/share/ncurses4/terminfo/p/p8-w
+/usr/share/ncurses4/terminfo/p/p8gl
+/usr/share/ncurses4/terminfo/p/p9
+/usr/share/ncurses4/terminfo/p/p9-8
+/usr/share/ncurses4/terminfo/p/p9-8-w
+/usr/share/ncurses4/terminfo/p/p9-w
+/usr/share/ncurses4/terminfo/p/pc-coherent
+/usr/share/ncurses4/terminfo/p/pc-minix
+/usr/share/ncurses4/terminfo/p/pc-venix
+/usr/share/ncurses4/terminfo/p/pc3
+/usr/share/ncurses4/terminfo/p/pc3-bold
+/usr/share/ncurses4/terminfo/p/pc3r
+/usr/share/ncurses4/terminfo/p/pc3r-m
+/usr/share/ncurses4/terminfo/p/pc6300plus
+/usr/share/ncurses4/terminfo/p/pc7300
+/usr/share/ncurses4/terminfo/p/pcansi
+/usr/share/ncurses4/terminfo/p/pcansi-25
+/usr/share/ncurses4/terminfo/p/pcansi-25-m
+/usr/share/ncurses4/terminfo/p/pcansi-33
+/usr/share/ncurses4/terminfo/p/pcansi-33-m
+/usr/share/ncurses4/terminfo/p/pcansi-43
+/usr/share/ncurses4/terminfo/p/pcansi-43-m
+/usr/share/ncurses4/terminfo/p/pcansi-m
+/usr/share/ncurses4/terminfo/p/pcansi-mono
+/usr/share/ncurses4/terminfo/p/pcansi25
+/usr/share/ncurses4/terminfo/p/pcansi25m
+/usr/share/ncurses4/terminfo/p/pcansi33
+/usr/share/ncurses4/terminfo/p/pcansi33m
+/usr/share/ncurses4/terminfo/p/pcansi43
+/usr/share/ncurses4/terminfo/p/pccons
+/usr/share/ncurses4/terminfo/p/pcconsole
+/usr/share/ncurses4/terminfo/p/pcix
+/usr/share/ncurses4/terminfo/p/pckermit
+/usr/share/ncurses4/terminfo/p/pckermit12
+/usr/share/ncurses4/terminfo/p/pckermit120
+/usr/share/ncurses4/terminfo/p/pcplot
+/usr/share/ncurses4/terminfo/p/pcvt25
+/usr/share/ncurses4/terminfo/p/pcvt25w
+/usr/share/ncurses4/terminfo/p/pcvt28
+/usr/share/ncurses4/terminfo/p/pcvt28w
+/usr/share/ncurses4/terminfo/p/pcvt35
+/usr/share/ncurses4/terminfo/p/pcvt35w
+/usr/share/ncurses4/terminfo/p/pcvt40
+/usr/share/ncurses4/terminfo/p/pcvt40w
+/usr/share/ncurses4/terminfo/p/pcvt43
+/usr/share/ncurses4/terminfo/p/pcvt43w
+/usr/share/ncurses4/terminfo/p/pcvt50
+/usr/share/ncurses4/terminfo/p/pcvt50w
+/usr/share/ncurses4/terminfo/p/pcvtXX
+/usr/share/ncurses4/terminfo/p/pcz19
+/usr/share/ncurses4/terminfo/p/pe1100
+/usr/share/ncurses4/terminfo/p/pe1200
+/usr/share/ncurses4/terminfo/p/pe1251
+/usr/share/ncurses4/terminfo/p/pe550
+/usr/share/ncurses4/terminfo/p/pe6100
+/usr/share/ncurses4/terminfo/p/pe6300
+/usr/share/ncurses4/terminfo/p/pe6312
+/usr/share/ncurses4/terminfo/p/pe7000c
+/usr/share/ncurses4/terminfo/p/pe7000m
+/usr/share/ncurses4/terminfo/p/pilot
+/usr/share/ncurses4/terminfo/p/printer
+/usr/share/ncurses4/terminfo/p/prism12
+/usr/share/ncurses4/terminfo/p/prism12-m
+/usr/share/ncurses4/terminfo/p/prism12-m-w
+/usr/share/ncurses4/terminfo/p/prism12-w
+/usr/share/ncurses4/terminfo/p/prism14
+/usr/share/ncurses4/terminfo/p/prism14-m
+/usr/share/ncurses4/terminfo/p/prism14-m-w
+/usr/share/ncurses4/terminfo/p/prism14-w
+/usr/share/ncurses4/terminfo/p/prism2
+/usr/share/ncurses4/terminfo/p/prism4
+/usr/share/ncurses4/terminfo/p/prism5
+/usr/share/ncurses4/terminfo/p/prism7
+/usr/share/ncurses4/terminfo/p/prism8
+/usr/share/ncurses4/terminfo/p/prism8-w
+/usr/share/ncurses4/terminfo/p/prism8gl
+/usr/share/ncurses4/terminfo/p/prism9
+/usr/share/ncurses4/terminfo/p/prism9-8
+/usr/share/ncurses4/terminfo/p/prism9-8-w
+/usr/share/ncurses4/terminfo/p/prism9-w
+/usr/share/ncurses4/terminfo/p/pro350
+/usr/share/ncurses4/terminfo/p/ps300
+/usr/share/ncurses4/terminfo/p/psterm
+/usr/share/ncurses4/terminfo/p/psterm-80x24
+/usr/share/ncurses4/terminfo/p/psterm-90x28
+/usr/share/ncurses4/terminfo/p/psterm-96x48
+/usr/share/ncurses4/terminfo/p/psterm-basic
+/usr/share/ncurses4/terminfo/p/psterm-fast
+/usr/share/ncurses4/terminfo/p/psx_ansi
+/usr/share/ncurses4/terminfo/p/pt100
+/usr/share/ncurses4/terminfo/p/pt100w
+/usr/share/ncurses4/terminfo/p/pt200
+/usr/share/ncurses4/terminfo/p/pt200w
+/usr/share/ncurses4/terminfo/p/pt210
+/usr/share/ncurses4/terminfo/p/pt250
+/usr/share/ncurses4/terminfo/p/pt250w
+/usr/share/ncurses4/terminfo/p/pt505
+/usr/share/ncurses4/terminfo/p/pt505-22
+/usr/share/ncurses4/terminfo/p/pt505-24
+/usr/share/ncurses4/terminfo/p/pty
+/usr/share/ncurses4/terminfo/q
+/usr/share/ncurses4/terminfo/q/qdcons
+/usr/share/ncurses4/terminfo/q/qdss
+/usr/share/ncurses4/terminfo/q/qnx
+/usr/share/ncurses4/terminfo/q/qnx4
+/usr/share/ncurses4/terminfo/q/qume
+/usr/share/ncurses4/terminfo/q/qume5
+/usr/share/ncurses4/terminfo/q/qvt101
+/usr/share/ncurses4/terminfo/q/qvt101+
+/usr/share/ncurses4/terminfo/q/qvt101p
+/usr/share/ncurses4/terminfo/q/qvt102
+/usr/share/ncurses4/terminfo/q/qvt103
+/usr/share/ncurses4/terminfo/q/qvt103-w
+/usr/share/ncurses4/terminfo/q/qvt108
+/usr/share/ncurses4/terminfo/q/qvt119
+/usr/share/ncurses4/terminfo/q/qvt119+
+/usr/share/ncurses4/terminfo/q/qvt119+-25
+/usr/share/ncurses4/terminfo/q/qvt119+-25-w
+/usr/share/ncurses4/terminfo/q/qvt119+-w
+/usr/share/ncurses4/terminfo/q/qvt119-25-w
+/usr/share/ncurses4/terminfo/q/qvt119-w
+/usr/share/ncurses4/terminfo/q/qvt119p
+/usr/share/ncurses4/terminfo/q/qvt119p-25
+/usr/share/ncurses4/terminfo/q/qvt119p-25-w
+/usr/share/ncurses4/terminfo/q/qvt119p-w
+/usr/share/ncurses4/terminfo/q/qvt203
+/usr/share/ncurses4/terminfo/q/qvt203+
+/usr/share/ncurses4/terminfo/q/qvt203-25
+/usr/share/ncurses4/terminfo/q/qvt203-25-w
+/usr/share/ncurses4/terminfo/q/qvt203-w
+/usr/share/ncurses4/terminfo/q/qvt203-w-am
+/usr/share/ncurses4/terminfo/r
+/usr/share/ncurses4/terminfo/r/rbcomm
+/usr/share/ncurses4/terminfo/r/rbcomm-nam
+/usr/share/ncurses4/terminfo/r/rbcomm-w
+/usr/share/ncurses4/terminfo/r/rca
+/usr/share/ncurses4/terminfo/r/rebus3180
+/usr/share/ncurses4/terminfo/r/regent
+/usr/share/ncurses4/terminfo/r/regent100
+/usr/share/ncurses4/terminfo/r/regent20
+/usr/share/ncurses4/terminfo/r/regent200
+/usr/share/ncurses4/terminfo/r/regent25
+/usr/share/ncurses4/terminfo/r/regent40
+/usr/share/ncurses4/terminfo/r/regent40+
+/usr/share/ncurses4/terminfo/r/regent60
+/usr/share/ncurses4/terminfo/r/rt6221
+/usr/share/ncurses4/terminfo/r/rt6221-w
+/usr/share/ncurses4/terminfo/r/rtpc
+/usr/share/ncurses4/terminfo/r/rxvt
+/usr/share/ncurses4/terminfo/r/rxvt-basic
+/usr/share/ncurses4/terminfo/s
+/usr/share/ncurses4/terminfo/s/s
+/usr/share/ncurses4/terminfo/s/s4
+/usr/share/ncurses4/terminfo/s/sb1
+/usr/share/ncurses4/terminfo/s/sb2
+/usr/share/ncurses4/terminfo/s/sb3
+/usr/share/ncurses4/terminfo/s/sbi
+/usr/share/ncurses4/terminfo/s/sbobcat
+/usr/share/ncurses4/terminfo/s/sc410
+/usr/share/ncurses4/terminfo/s/sc415
+/usr/share/ncurses4/terminfo/s/scanset
+/usr/share/ncurses4/terminfo/s/scoansi
+/usr/share/ncurses4/terminfo/s/screen
+/usr/share/ncurses4/terminfo/s/screen-w
+/usr/share/ncurses4/terminfo/s/screen2
+/usr/share/ncurses4/terminfo/s/screen3
+/usr/share/ncurses4/terminfo/s/screwpoint
+/usr/share/ncurses4/terminfo/s/scrhp
+/usr/share/ncurses4/terminfo/s/simterm
+/usr/share/ncurses4/terminfo/s/soroc
+/usr/share/ncurses4/terminfo/s/soroc120
+/usr/share/ncurses4/terminfo/s/soroc140
+/usr/share/ncurses4/terminfo/s/spinwriter
+/usr/share/ncurses4/terminfo/s/st52
+/usr/share/ncurses4/terminfo/s/sun
+/usr/share/ncurses4/terminfo/s/sun-1
+/usr/share/ncurses4/terminfo/s/sun-12
+/usr/share/ncurses4/terminfo/s/sun-17
+/usr/share/ncurses4/terminfo/s/sun-24
+/usr/share/ncurses4/terminfo/s/sun-34
+/usr/share/ncurses4/terminfo/s/sun-48
+/usr/share/ncurses4/terminfo/s/sun-c
+/usr/share/ncurses4/terminfo/s/sun-cmd
+/usr/share/ncurses4/terminfo/s/sun-e
+/usr/share/ncurses4/terminfo/s/sun-e-s
+/usr/share/ncurses4/terminfo/s/sun-il
+/usr/share/ncurses4/terminfo/s/sun-nic
+/usr/share/ncurses4/terminfo/s/sun-s
+/usr/share/ncurses4/terminfo/s/sun-s-e
+/usr/share/ncurses4/terminfo/s/sun-ss5
+/usr/share/ncurses4/terminfo/s/sun1
+/usr/share/ncurses4/terminfo/s/sun2
+/usr/share/ncurses4/terminfo/s/sune
+/usr/share/ncurses4/terminfo/s/superbee
+/usr/share/ncurses4/terminfo/s/superbee-xsb
+/usr/share/ncurses4/terminfo/s/superbeeic
+/usr/share/ncurses4/terminfo/s/superbrain
+/usr/share/ncurses4/terminfo/s/sv80
+/usr/share/ncurses4/terminfo/s/swtp
+/usr/share/ncurses4/terminfo/s/synertek
+/usr/share/ncurses4/terminfo/s/synertek380
+/usr/share/ncurses4/terminfo/s/system1
+/usr/share/ncurses4/terminfo/t
+/usr/share/ncurses4/terminfo/t/t10
+/usr/share/ncurses4/terminfo/t/t1061
+/usr/share/ncurses4/terminfo/t/t1061f
+/usr/share/ncurses4/terminfo/t/t16
+/usr/share/ncurses4/terminfo/t/t3700
+/usr/share/ncurses4/terminfo/t/t3800
+/usr/share/ncurses4/terminfo/t/t653x
+/usr/share/ncurses4/terminfo/t/tab
+/usr/share/ncurses4/terminfo/t/tab132
+/usr/share/ncurses4/terminfo/t/tab132-15
+/usr/share/ncurses4/terminfo/t/tab132-rv
+/usr/share/ncurses4/terminfo/t/tab132-w
+/usr/share/ncurses4/terminfo/t/tab132-w-rv
+/usr/share/ncurses4/terminfo/t/tandem6510
+/usr/share/ncurses4/terminfo/t/tandem653
+/usr/share/ncurses4/terminfo/t/tek
+/usr/share/ncurses4/terminfo/t/tek4012
+/usr/share/ncurses4/terminfo/t/tek4013
+/usr/share/ncurses4/terminfo/t/tek4014
+/usr/share/ncurses4/terminfo/t/tek4014-sm
+/usr/share/ncurses4/terminfo/t/tek4015
+/usr/share/ncurses4/terminfo/t/tek4015-sm
+/usr/share/ncurses4/terminfo/t/tek4023
+/usr/share/ncurses4/terminfo/t/tek4024
+/usr/share/ncurses4/terminfo/t/tek4025
+/usr/share/ncurses4/terminfo/t/tek4025-17
+/usr/share/ncurses4/terminfo/t/tek4025-17-ws
+/usr/share/ncurses4/terminfo/t/tek4025-cr
+/usr/share/ncurses4/terminfo/t/tek4025-ex
+/usr/share/ncurses4/terminfo/t/tek4025a
+/usr/share/ncurses4/terminfo/t/tek4025ex
+/usr/share/ncurses4/terminfo/t/tek4027
+/usr/share/ncurses4/terminfo/t/tek4027-ex
+/usr/share/ncurses4/terminfo/t/tek4105
+/usr/share/ncurses4/terminfo/t/tek4105-30
+/usr/share/ncurses4/terminfo/t/tek4105a
+/usr/share/ncurses4/terminfo/t/tek4106brl
+/usr/share/ncurses4/terminfo/t/tek4107
+/usr/share/ncurses4/terminfo/t/tek4107brl
+/usr/share/ncurses4/terminfo/t/tek4109
+/usr/share/ncurses4/terminfo/t/tek4109brl
+/usr/share/ncurses4/terminfo/t/tek4112
+/usr/share/ncurses4/terminfo/t/tek4112-5
+/usr/share/ncurses4/terminfo/t/tek4112-nd
+/usr/share/ncurses4/terminfo/t/tek4113
+/usr/share/ncurses4/terminfo/t/tek4113-34
+/usr/share/ncurses4/terminfo/t/tek4113-nd
+/usr/share/ncurses4/terminfo/t/tek4114
+/usr/share/ncurses4/terminfo/t/tek4115
+/usr/share/ncurses4/terminfo/t/tek4125
+/usr/share/ncurses4/terminfo/t/tek4205
+/usr/share/ncurses4/terminfo/t/tek4207
+/usr/share/ncurses4/terminfo/t/tek4207-s
+/usr/share/ncurses4/terminfo/t/tek4404
+/usr/share/ncurses4/terminfo/t/teleray
+/usr/share/ncurses4/terminfo/t/teletec
+/usr/share/ncurses4/terminfo/t/terminet
+/usr/share/ncurses4/terminfo/t/terminet1200
+/usr/share/ncurses4/terminfo/t/terminet300
+/usr/share/ncurses4/terminfo/t/tgtelnet
+/usr/share/ncurses4/terminfo/t/ti700
+/usr/share/ncurses4/terminfo/t/ti733
+/usr/share/ncurses4/terminfo/t/ti735
+/usr/share/ncurses4/terminfo/t/ti745
+/usr/share/ncurses4/terminfo/t/ti800
+/usr/share/ncurses4/terminfo/t/ti916
+/usr/share/ncurses4/terminfo/t/ti916-132
+/usr/share/ncurses4/terminfo/t/ti916-220-7
+/usr/share/ncurses4/terminfo/t/ti916-220-8
+/usr/share/ncurses4/terminfo/t/ti916-8
+/usr/share/ncurses4/terminfo/t/ti916-8-132
+/usr/share/ncurses4/terminfo/t/ti924
+/usr/share/ncurses4/terminfo/t/ti924-8
+/usr/share/ncurses4/terminfo/t/ti924-8w
+/usr/share/ncurses4/terminfo/t/ti924w
+/usr/share/ncurses4/terminfo/t/ti926
+/usr/share/ncurses4/terminfo/t/ti926-8
+/usr/share/ncurses4/terminfo/t/ti928
+/usr/share/ncurses4/terminfo/t/ti928-8
+/usr/share/ncurses4/terminfo/t/ti931
+/usr/share/ncurses4/terminfo/t/ti_ansi
+/usr/share/ncurses4/terminfo/t/tn1200
+/usr/share/ncurses4/terminfo/t/tn300
+/usr/share/ncurses4/terminfo/t/trs16
+/usr/share/ncurses4/terminfo/t/trs2
+/usr/share/ncurses4/terminfo/t/trs80II
+/usr/share/ncurses4/terminfo/t/trsII
+/usr/share/ncurses4/terminfo/t/ts-1
+/usr/share/ncurses4/terminfo/t/ts-1p
+/usr/share/ncurses4/terminfo/t/ts1
+/usr/share/ncurses4/terminfo/t/ts100
+/usr/share/ncurses4/terminfo/t/ts100-ctxt
+/usr/share/ncurses4/terminfo/t/ts100-sp
+/usr/share/ncurses4/terminfo/t/ts1p
+/usr/share/ncurses4/terminfo/t/tt505-22
+/usr/share/ncurses4/terminfo/t/tty33
+/usr/share/ncurses4/terminfo/t/tty35
+/usr/share/ncurses4/terminfo/t/tty37
+/usr/share/ncurses4/terminfo/t/tty40
+/usr/share/ncurses4/terminfo/t/tty43
+/usr/share/ncurses4/terminfo/t/tty4420
+/usr/share/ncurses4/terminfo/t/tty4424
+/usr/share/ncurses4/terminfo/t/tty4424-1
+/usr/share/ncurses4/terminfo/t/tty4424m
+/usr/share/ncurses4/terminfo/t/tty4426
+/usr/share/ncurses4/terminfo/t/tty5410
+/usr/share/ncurses4/terminfo/t/tty5410-w
+/usr/share/ncurses4/terminfo/t/tty5410v1
+/usr/share/ncurses4/terminfo/t/tty5410v1-w
+/usr/share/ncurses4/terminfo/t/tty5420
+/usr/share/ncurses4/terminfo/t/tty5420+nl
+/usr/share/ncurses4/terminfo/t/tty5420-nl
+/usr/share/ncurses4/terminfo/t/tty5420-rv
+/usr/share/ncurses4/terminfo/t/tty5420-rv-nl
+/usr/share/ncurses4/terminfo/t/tty5420-w
+/usr/share/ncurses4/terminfo/t/tty5420-w-nl
+/usr/share/ncurses4/terminfo/t/tty5420-w-rv
+/usr/share/ncurses4/terminfo/t/tty5420-w-rv-n
+/usr/share/ncurses4/terminfo/t/tty5425
+/usr/share/ncurses4/terminfo/t/tty5425-nl
+/usr/share/ncurses4/terminfo/t/tty5425-w
+/usr/share/ncurses4/terminfo/t/tty5620
+/usr/share/ncurses4/terminfo/t/tty5620-1
+/usr/share/ncurses4/terminfo/t/tty5620-24
+/usr/share/ncurses4/terminfo/t/tty5620-34
+/usr/share/ncurses4/terminfo/t/tty5620-s
+/usr/share/ncurses4/terminfo/t/ttydmd
+/usr/share/ncurses4/terminfo/t/tvi-2p
+/usr/share/ncurses4/terminfo/t/tvi803
+/usr/share/ncurses4/terminfo/t/tvi9065
+/usr/share/ncurses4/terminfo/t/tvi910
+/usr/share/ncurses4/terminfo/t/tvi910+
+/usr/share/ncurses4/terminfo/t/tvi912
+/usr/share/ncurses4/terminfo/t/tvi912-2p
+/usr/share/ncurses4/terminfo/t/tvi912b
+/usr/share/ncurses4/terminfo/t/tvi912c
+/usr/share/ncurses4/terminfo/t/tvi912cc
+/usr/share/ncurses4/terminfo/t/tvi914
+/usr/share/ncurses4/terminfo/t/tvi920
+/usr/share/ncurses4/terminfo/t/tvi920-2p
+/usr/share/ncurses4/terminfo/t/tvi920b
+/usr/share/ncurses4/terminfo/t/tvi920c
+/usr/share/ncurses4/terminfo/t/tvi921
+/usr/share/ncurses4/terminfo/t/tvi924
+/usr/share/ncurses4/terminfo/t/tvi925
+/usr/share/ncurses4/terminfo/t/tvi925-hi
+/usr/share/ncurses4/terminfo/t/tvi92B
+/usr/share/ncurses4/terminfo/t/tvi92D
+/usr/share/ncurses4/terminfo/t/tvi950
+/usr/share/ncurses4/terminfo/t/tvi950-2p
+/usr/share/ncurses4/terminfo/t/tvi950-4p
+/usr/share/ncurses4/terminfo/t/tvi950-rv
+/usr/share/ncurses4/terminfo/t/tvi950-rv-2p
+/usr/share/ncurses4/terminfo/t/tvi950-rv-4p
+/usr/share/ncurses4/terminfo/t/tvi955
+/usr/share/ncurses4/terminfo/t/tvi955-hb
+/usr/share/ncurses4/terminfo/t/tvi955-w
+/usr/share/ncurses4/terminfo/t/tvi970
+/usr/share/ncurses4/terminfo/t/tvi970-2p
+/usr/share/ncurses4/terminfo/t/tvi970-vb
+/usr/share/ncurses4/terminfo/t/tvipt
+/usr/share/ncurses4/terminfo/u
+/usr/share/ncurses4/terminfo/u/ultima2
+/usr/share/ncurses4/terminfo/u/ultimaII
+/usr/share/ncurses4/terminfo/u/uniterm
+/usr/share/ncurses4/terminfo/u/uniterm49
+/usr/share/ncurses4/terminfo/u/unixpc
+/usr/share/ncurses4/terminfo/u/unknown
+/usr/share/ncurses4/terminfo/u/uts30
+/usr/share/ncurses4/terminfo/v
+/usr/share/ncurses4/terminfo/v/v200-nam
+/usr/share/ncurses4/terminfo/v/v320n
+/usr/share/ncurses4/terminfo/v/v3220
+/usr/share/ncurses4/terminfo/v/v5410
+/usr/share/ncurses4/terminfo/v/vapple
+/usr/share/ncurses4/terminfo/v/vc103
+/usr/share/ncurses4/terminfo/v/vc203
+/usr/share/ncurses4/terminfo/v/vc303
+/usr/share/ncurses4/terminfo/v/vc303a
+/usr/share/ncurses4/terminfo/v/vc403a
+/usr/share/ncurses4/terminfo/v/vc404
+/usr/share/ncurses4/terminfo/v/vc404-s
+/usr/share/ncurses4/terminfo/v/vc414
+/usr/share/ncurses4/terminfo/v/vc414h
+/usr/share/ncurses4/terminfo/v/vc415
+/usr/share/ncurses4/terminfo/v/venix
+/usr/share/ncurses4/terminfo/v/versaterm
+/usr/share/ncurses4/terminfo/v/vi200
+/usr/share/ncurses4/terminfo/v/vi200-f
+/usr/share/ncurses4/terminfo/v/vi200-rv
+/usr/share/ncurses4/terminfo/v/vi300
+/usr/share/ncurses4/terminfo/v/vi300-old
+/usr/share/ncurses4/terminfo/v/vi50
+/usr/share/ncurses4/terminfo/v/vi500
+/usr/share/ncurses4/terminfo/v/vi50adm
+/usr/share/ncurses4/terminfo/v/vi55
+/usr/share/ncurses4/terminfo/v/vi550
+/usr/share/ncurses4/terminfo/v/vi603
+/usr/share/ncurses4/terminfo/v/viewpoint
+/usr/share/ncurses4/terminfo/v/viewpoint3a+
+/usr/share/ncurses4/terminfo/v/viewpoint60
+/usr/share/ncurses4/terminfo/v/viewpoint90
+/usr/share/ncurses4/terminfo/v/visa50
+/usr/share/ncurses4/terminfo/v/visual603
+/usr/share/ncurses4/terminfo/v/vitty
+/usr/share/ncurses4/terminfo/v/vk100
+/usr/share/ncurses4/terminfo/v/vp3a+
+/usr/share/ncurses4/terminfo/v/vp60
+/usr/share/ncurses4/terminfo/v/vp90
+/usr/share/ncurses4/terminfo/v/vremote
+/usr/share/ncurses4/terminfo/v/vs100
+/usr/share/ncurses4/terminfo/v/vs100-x10
+/usr/share/ncurses4/terminfo/v/vsc
+/usr/share/ncurses4/terminfo/v/vt-61
+/usr/share/ncurses4/terminfo/v/vt100
+/usr/share/ncurses4/terminfo/v/vt100-am
+/usr/share/ncurses4/terminfo/v/vt100-bm
+/usr/share/ncurses4/terminfo/v/vt100-bm-o
+/usr/share/ncurses4/terminfo/v/vt100-bot-s
+/usr/share/ncurses4/terminfo/v/vt100-nam
+/usr/share/ncurses4/terminfo/v/vt100-nam-w
+/usr/share/ncurses4/terminfo/v/vt100-nav
+/usr/share/ncurses4/terminfo/v/vt100-nav-w
+/usr/share/ncurses4/terminfo/v/vt100-s
+/usr/share/ncurses4/terminfo/v/vt100-s-bot
+/usr/share/ncurses4/terminfo/v/vt100-s-top
+/usr/share/ncurses4/terminfo/v/vt100-top-s
+/usr/share/ncurses4/terminfo/v/vt100-vb
+/usr/share/ncurses4/terminfo/v/vt100-w
+/usr/share/ncurses4/terminfo/v/vt100-w-am
+/usr/share/ncurses4/terminfo/v/vt100-w-nam
+/usr/share/ncurses4/terminfo/v/vt100-w-nav
+/usr/share/ncurses4/terminfo/v/vt100nam
+/usr/share/ncurses4/terminfo/v/vt102
+/usr/share/ncurses4/terminfo/v/vt102-nsgr
+/usr/share/ncurses4/terminfo/v/vt102-w
+/usr/share/ncurses4/terminfo/v/vt125
+/usr/share/ncurses4/terminfo/v/vt131
+/usr/share/ncurses4/terminfo/v/vt132
+/usr/share/ncurses4/terminfo/v/vt200
+/usr/share/ncurses4/terminfo/v/vt200-js
+/usr/share/ncurses4/terminfo/v/vt200-w
+/usr/share/ncurses4/terminfo/v/vt220
+/usr/share/ncurses4/terminfo/v/vt220-8
+/usr/share/ncurses4/terminfo/v/vt220-js
+/usr/share/ncurses4/terminfo/v/vt220-nam
+/usr/share/ncurses4/terminfo/v/vt220-w
+/usr/share/ncurses4/terminfo/v/vt220d
+/usr/share/ncurses4/terminfo/v/vt300
+/usr/share/ncurses4/terminfo/v/vt300-nam
+/usr/share/ncurses4/terminfo/v/vt300-w
+/usr/share/ncurses4/terminfo/v/vt300-w-nam
+/usr/share/ncurses4/terminfo/v/vt320
+/usr/share/ncurses4/terminfo/v/vt320-k3
+/usr/share/ncurses4/terminfo/v/vt320-k311
+/usr/share/ncurses4/terminfo/v/vt320-nam
+/usr/share/ncurses4/terminfo/v/vt320-w
+/usr/share/ncurses4/terminfo/v/vt320-w-nam
+/usr/share/ncurses4/terminfo/v/vt320nam
+/usr/share/ncurses4/terminfo/v/vt330
+/usr/share/ncurses4/terminfo/v/vt340
+/usr/share/ncurses4/terminfo/v/vt400
+/usr/share/ncurses4/terminfo/v/vt400-24
+/usr/share/ncurses4/terminfo/v/vt420
+/usr/share/ncurses4/terminfo/v/vt420f
+/usr/share/ncurses4/terminfo/v/vt420pc
+/usr/share/ncurses4/terminfo/v/vt420pcdos
+/usr/share/ncurses4/terminfo/v/vt50
+/usr/share/ncurses4/terminfo/v/vt50h
+/usr/share/ncurses4/terminfo/v/vt510
+/usr/share/ncurses4/terminfo/v/vt510pc
+/usr/share/ncurses4/terminfo/v/vt510pcdos
+/usr/share/ncurses4/terminfo/v/vt52
+/usr/share/ncurses4/terminfo/v/vt520
+/usr/share/ncurses4/terminfo/v/vt525
+/usr/share/ncurses4/terminfo/v/vt61
+/usr/share/ncurses4/terminfo/v/vt61.5
+/usr/share/ncurses4/terminfo/w
+/usr/share/ncurses4/terminfo/w/wren
+/usr/share/ncurses4/terminfo/w/wrenw
+/usr/share/ncurses4/terminfo/w/wsiris
+/usr/share/ncurses4/terminfo/w/wy-75ap
+/usr/share/ncurses4/terminfo/w/wy100
+/usr/share/ncurses4/terminfo/w/wy100q
+/usr/share/ncurses4/terminfo/w/wy120
+/usr/share/ncurses4/terminfo/w/wy120-25
+/usr/share/ncurses4/terminfo/w/wy120-25-w
+/usr/share/ncurses4/terminfo/w/wy120-vb
+/usr/share/ncurses4/terminfo/w/wy120-w
+/usr/share/ncurses4/terminfo/w/wy120-w-vb
+/usr/share/ncurses4/terminfo/w/wy120-wvb
+/usr/share/ncurses4/terminfo/w/wy150
+/usr/share/ncurses4/terminfo/w/wy150-25
+/usr/share/ncurses4/terminfo/w/wy150-25-w
+/usr/share/ncurses4/terminfo/w/wy150-vb
+/usr/share/ncurses4/terminfo/w/wy150-w
+/usr/share/ncurses4/terminfo/w/wy150-w-vb
+/usr/share/ncurses4/terminfo/w/wy160
+/usr/share/ncurses4/terminfo/w/wy160-25
+/usr/share/ncurses4/terminfo/w/wy160-25-w
+/usr/share/ncurses4/terminfo/w/wy160-42
+/usr/share/ncurses4/terminfo/w/wy160-42-w
+/usr/share/ncurses4/terminfo/w/wy160-43
+/usr/share/ncurses4/terminfo/w/wy160-43-w
+/usr/share/ncurses4/terminfo/w/wy160-tek
+/usr/share/ncurses4/terminfo/w/wy160-vb
+/usr/share/ncurses4/terminfo/w/wy160-w
+/usr/share/ncurses4/terminfo/w/wy160-w-vb
+/usr/share/ncurses4/terminfo/w/wy160-wvb
+/usr/share/ncurses4/terminfo/w/wy185
+/usr/share/ncurses4/terminfo/w/wy185-24
+/usr/share/ncurses4/terminfo/w/wy185-vb
+/usr/share/ncurses4/terminfo/w/wy185-w
+/usr/share/ncurses4/terminfo/w/wy185-wvb
+/usr/share/ncurses4/terminfo/w/wy30
+/usr/share/ncurses4/terminfo/w/wy30-mc
+/usr/share/ncurses4/terminfo/w/wy30-vb
+/usr/share/ncurses4/terminfo/w/wy325
+/usr/share/ncurses4/terminfo/w/wy325-25
+/usr/share/ncurses4/terminfo/w/wy325-25w
+/usr/share/ncurses4/terminfo/w/wy325-42
+/usr/share/ncurses4/terminfo/w/wy325-42w
+/usr/share/ncurses4/terminfo/w/wy325-42w-vb
+/usr/share/ncurses4/terminfo/w/wy325-42wvb
+/usr/share/ncurses4/terminfo/w/wy325-43
+/usr/share/ncurses4/terminfo/w/wy325-43w
+/usr/share/ncurses4/terminfo/w/wy325-43w-vb
+/usr/share/ncurses4/terminfo/w/wy325-43wvb
+/usr/share/ncurses4/terminfo/w/wy325-80
+/usr/share/ncurses4/terminfo/w/wy325-vb
+/usr/share/ncurses4/terminfo/w/wy325-w
+/usr/share/ncurses4/terminfo/w/wy325-w-vb
+/usr/share/ncurses4/terminfo/w/wy325-wvb
+/usr/share/ncurses4/terminfo/w/wy325w-24
+/usr/share/ncurses4/terminfo/w/wy350
+/usr/share/ncurses4/terminfo/w/wy350-vb
+/usr/share/ncurses4/terminfo/w/wy350-w
+/usr/share/ncurses4/terminfo/w/wy350-wvb
+/usr/share/ncurses4/terminfo/w/wy370
+/usr/share/ncurses4/terminfo/w/wy370-101k
+/usr/share/ncurses4/terminfo/w/wy370-105k
+/usr/share/ncurses4/terminfo/w/wy370-EPC
+/usr/share/ncurses4/terminfo/w/wy370-nk
+/usr/share/ncurses4/terminfo/w/wy370-rv
+/usr/share/ncurses4/terminfo/w/wy370-tek
+/usr/share/ncurses4/terminfo/w/wy370-vb
+/usr/share/ncurses4/terminfo/w/wy370-w
+/usr/share/ncurses4/terminfo/w/wy370-wvb
+/usr/share/ncurses4/terminfo/w/wy50
+/usr/share/ncurses4/terminfo/w/wy50-mc
+/usr/share/ncurses4/terminfo/w/wy50-vb
+/usr/share/ncurses4/terminfo/w/wy50-w
+/usr/share/ncurses4/terminfo/w/wy50-wvb
+/usr/share/ncurses4/terminfo/w/wy520
+/usr/share/ncurses4/terminfo/w/wy520-24
+/usr/share/ncurses4/terminfo/w/wy520-36
+/usr/share/ncurses4/terminfo/w/wy520-36pc
+/usr/share/ncurses4/terminfo/w/wy520-36w
+/usr/share/ncurses4/terminfo/w/wy520-36wpc
+/usr/share/ncurses4/terminfo/w/wy520-48
+/usr/share/ncurses4/terminfo/w/wy520-48pc
+/usr/share/ncurses4/terminfo/w/wy520-48w
+/usr/share/ncurses4/terminfo/w/wy520-48wpc
+/usr/share/ncurses4/terminfo/w/wy520-epc
+/usr/share/ncurses4/terminfo/w/wy520-epc-24
+/usr/share/ncurses4/terminfo/w/wy520-epc-vb
+/usr/share/ncurses4/terminfo/w/wy520-epc-w
+/usr/share/ncurses4/terminfo/w/wy520-epc-wvb
+/usr/share/ncurses4/terminfo/w/wy520-vb
+/usr/share/ncurses4/terminfo/w/wy520-w
+/usr/share/ncurses4/terminfo/w/wy520-wvb
+/usr/share/ncurses4/terminfo/w/wy60
+/usr/share/ncurses4/terminfo/w/wy60-25
+/usr/share/ncurses4/terminfo/w/wy60-25-w
+/usr/share/ncurses4/terminfo/w/wy60-316X
+/usr/share/ncurses4/terminfo/w/wy60-42
+/usr/share/ncurses4/terminfo/w/wy60-42-w
+/usr/share/ncurses4/terminfo/w/wy60-43
+/usr/share/ncurses4/terminfo/w/wy60-43-w
+/usr/share/ncurses4/terminfo/w/wy60-vb
+/usr/share/ncurses4/terminfo/w/wy60-w
+/usr/share/ncurses4/terminfo/w/wy60-w-vb
+/usr/share/ncurses4/terminfo/w/wy60-wvb
+/usr/share/ncurses4/terminfo/w/wy75
+/usr/share/ncurses4/terminfo/w/wy75-mc
+/usr/share/ncurses4/terminfo/w/wy75-vb
+/usr/share/ncurses4/terminfo/w/wy75-w
+/usr/share/ncurses4/terminfo/w/wy75-wvb
+/usr/share/ncurses4/terminfo/w/wy75ap
+/usr/share/ncurses4/terminfo/w/wy85
+/usr/share/ncurses4/terminfo/w/wy85-vb
+/usr/share/ncurses4/terminfo/w/wy85-w
+/usr/share/ncurses4/terminfo/w/wy85-wvb
+/usr/share/ncurses4/terminfo/w/wy99gt
+/usr/share/ncurses4/terminfo/w/wy99gt-25
+/usr/share/ncurses4/terminfo/w/wy99gt-25-w
+/usr/share/ncurses4/terminfo/w/wy99gt-tek
+/usr/share/ncurses4/terminfo/w/wy99gt-vb
+/usr/share/ncurses4/terminfo/w/wy99gt-w
+/usr/share/ncurses4/terminfo/w/wy99gt-w-vb
+/usr/share/ncurses4/terminfo/w/wy99gt-wvb
+/usr/share/ncurses4/terminfo/w/wyse-325
+/usr/share/ncurses4/terminfo/w/wyse-75ap
+/usr/share/ncurses4/terminfo/w/wyse-vp
+/usr/share/ncurses4/terminfo/w/wyse120
+/usr/share/ncurses4/terminfo/w/wyse120-25
+/usr/share/ncurses4/terminfo/w/wyse120-25-w
+/usr/share/ncurses4/terminfo/w/wyse120-vb
+/usr/share/ncurses4/terminfo/w/wyse120-w
+/usr/share/ncurses4/terminfo/w/wyse120-wvb
+/usr/share/ncurses4/terminfo/w/wyse150
+/usr/share/ncurses4/terminfo/w/wyse150-25
+/usr/share/ncurses4/terminfo/w/wyse150-25-w
+/usr/share/ncurses4/terminfo/w/wyse150-vb
+/usr/share/ncurses4/terminfo/w/wyse150-w
+/usr/share/ncurses4/terminfo/w/wyse150-w-vb
+/usr/share/ncurses4/terminfo/w/wyse160
+/usr/share/ncurses4/terminfo/w/wyse160-25
+/usr/share/ncurses4/terminfo/w/wyse160-25-w
+/usr/share/ncurses4/terminfo/w/wyse160-42
+/usr/share/ncurses4/terminfo/w/wyse160-42-w
+/usr/share/ncurses4/terminfo/w/wyse160-43
+/usr/share/ncurses4/terminfo/w/wyse160-43-w
+/usr/share/ncurses4/terminfo/w/wyse160-vb
+/usr/share/ncurses4/terminfo/w/wyse160-w
+/usr/share/ncurses4/terminfo/w/wyse160-wvb
+/usr/share/ncurses4/terminfo/w/wyse185
+/usr/share/ncurses4/terminfo/w/wyse185-24
+/usr/share/ncurses4/terminfo/w/wyse185-vb
+/usr/share/ncurses4/terminfo/w/wyse185-w
+/usr/share/ncurses4/terminfo/w/wyse185-wvb
+/usr/share/ncurses4/terminfo/w/wyse30
+/usr/share/ncurses4/terminfo/w/wyse30-mc
+/usr/share/ncurses4/terminfo/w/wyse30-vb
+/usr/share/ncurses4/terminfo/w/wyse325
+/usr/share/ncurses4/terminfo/w/wyse325-25
+/usr/share/ncurses4/terminfo/w/wyse325-25w
+/usr/share/ncurses4/terminfo/w/wyse325-42
+/usr/share/ncurses4/terminfo/w/wyse325-42w
+/usr/share/ncurses4/terminfo/w/wyse325-43
+/usr/share/ncurses4/terminfo/w/wyse325-43w
+/usr/share/ncurses4/terminfo/w/wyse325-vb
+/usr/share/ncurses4/terminfo/w/wyse325-w
+/usr/share/ncurses4/terminfo/w/wyse325-wvb
+/usr/share/ncurses4/terminfo/w/wyse350
+/usr/share/ncurses4/terminfo/w/wyse350-vb
+/usr/share/ncurses4/terminfo/w/wyse350-w
+/usr/share/ncurses4/terminfo/w/wyse350-wvb
+/usr/share/ncurses4/terminfo/w/wyse370
+/usr/share/ncurses4/terminfo/w/wyse50
+/usr/share/ncurses4/terminfo/w/wyse50-mc
+/usr/share/ncurses4/terminfo/w/wyse50-vb
+/usr/share/ncurses4/terminfo/w/wyse50-w
+/usr/share/ncurses4/terminfo/w/wyse50-wvb
+/usr/share/ncurses4/terminfo/w/wyse520
+/usr/share/ncurses4/terminfo/w/wyse520-24
+/usr/share/ncurses4/terminfo/w/wyse520-36
+/usr/share/ncurses4/terminfo/w/wyse520-36pc
+/usr/share/ncurses4/terminfo/w/wyse520-36w
+/usr/share/ncurses4/terminfo/w/wyse520-36wpc
+/usr/share/ncurses4/terminfo/w/wyse520-48
+/usr/share/ncurses4/terminfo/w/wyse520-48pc
+/usr/share/ncurses4/terminfo/w/wyse520-48w
+/usr/share/ncurses4/terminfo/w/wyse520-48wpc
+/usr/share/ncurses4/terminfo/w/wyse520-epc
+/usr/share/ncurses4/terminfo/w/wyse520-epc-w
+/usr/share/ncurses4/terminfo/w/wyse520-p-wvb
+/usr/share/ncurses4/terminfo/w/wyse520-pc-24
+/usr/share/ncurses4/terminfo/w/wyse520-pc-vb
+/usr/share/ncurses4/terminfo/w/wyse520-vb
+/usr/share/ncurses4/terminfo/w/wyse520-w
+/usr/share/ncurses4/terminfo/w/wyse520-wvb
+/usr/share/ncurses4/terminfo/w/wyse60
+/usr/share/ncurses4/terminfo/w/wyse60-25
+/usr/share/ncurses4/terminfo/w/wyse60-25-w
+/usr/share/ncurses4/terminfo/w/wyse60-316X
+/usr/share/ncurses4/terminfo/w/wyse60-42
+/usr/share/ncurses4/terminfo/w/wyse60-42-w
+/usr/share/ncurses4/terminfo/w/wyse60-43
+/usr/share/ncurses4/terminfo/w/wyse60-43-w
+/usr/share/ncurses4/terminfo/w/wyse60-vb
+/usr/share/ncurses4/terminfo/w/wyse60-w
+/usr/share/ncurses4/terminfo/w/wyse60-wvb
+/usr/share/ncurses4/terminfo/w/wyse75
+/usr/share/ncurses4/terminfo/w/wyse75-mc
+/usr/share/ncurses4/terminfo/w/wyse75-vb
+/usr/share/ncurses4/terminfo/w/wyse75-w
+/usr/share/ncurses4/terminfo/w/wyse75-wvb
+/usr/share/ncurses4/terminfo/w/wyse75ap
+/usr/share/ncurses4/terminfo/w/wyse85
+/usr/share/ncurses4/terminfo/w/wyse85-vb
+/usr/share/ncurses4/terminfo/w/wyse85-w
+/usr/share/ncurses4/terminfo/w/wyse85-wvb
+/usr/share/ncurses4/terminfo/w/wyse99gt
+/usr/share/ncurses4/terminfo/w/wyse99gt-25
+/usr/share/ncurses4/terminfo/w/wyse99gt-25-w
+/usr/share/ncurses4/terminfo/w/wyse99gt-vb
+/usr/share/ncurses4/terminfo/w/wyse99gt-w
+/usr/share/ncurses4/terminfo/w/wyse99gt-wvb
+/usr/share/ncurses4/terminfo/x
+/usr/share/ncurses4/terminfo/x/x10term
+/usr/share/ncurses4/terminfo/x/x1700
+/usr/share/ncurses4/terminfo/x/x1700-lm
+/usr/share/ncurses4/terminfo/x/x1720
+/usr/share/ncurses4/terminfo/x/x1750
+/usr/share/ncurses4/terminfo/x/x68k
+/usr/share/ncurses4/terminfo/x/x68k-ite
+/usr/share/ncurses4/terminfo/x/x820
+/usr/share/ncurses4/terminfo/x/xenix
+/usr/share/ncurses4/terminfo/x/xerox
+/usr/share/ncurses4/terminfo/x/xerox-lm
+/usr/share/ncurses4/terminfo/x/xerox1720
+/usr/share/ncurses4/terminfo/x/xerox820
+/usr/share/ncurses4/terminfo/x/xl83
+/usr/share/ncurses4/terminfo/x/xtalk
+/usr/share/ncurses4/terminfo/x/xterm
+/usr/share/ncurses4/terminfo/x/xterm+sl
+/usr/share/ncurses4/terminfo/x/xterm+sl-twm
+/usr/share/ncurses4/terminfo/x/xterm-16color
+/usr/share/ncurses4/terminfo/x/xterm-8bit
+/usr/share/ncurses4/terminfo/x/xterm-bold
+/usr/share/ncurses4/terminfo/x/xterm-nic
+/usr/share/ncurses4/terminfo/x/xterm-old
+/usr/share/ncurses4/terminfo/x/xterm-pcolor
+/usr/share/ncurses4/terminfo/x/xterm-r5
+/usr/share/ncurses4/terminfo/x/xterm-r6
+/usr/share/ncurses4/terminfo/x/xterm-sun
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v32
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v33
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v40
+/usr/share/ncurses4/terminfo/x/xterm-xi
+/usr/share/ncurses4/terminfo/x/xterm1
+/usr/share/ncurses4/terminfo/x/xterms
+/usr/share/ncurses4/terminfo/x/xterms-sun
+/usr/share/ncurses4/terminfo/x/xwsh
+/usr/share/ncurses4/terminfo/z
+/usr/share/ncurses4/terminfo/z/z-100
+/usr/share/ncurses4/terminfo/z/z-100bw
+/usr/share/ncurses4/terminfo/z/z100
+/usr/share/ncurses4/terminfo/z/z100bw
+/usr/share/ncurses4/terminfo/z/z110
+/usr/share/ncurses4/terminfo/z/z110bw
+/usr/share/ncurses4/terminfo/z/z19
+/usr/share/ncurses4/terminfo/z/z29
+/usr/share/ncurses4/terminfo/z/z29a
+/usr/share/ncurses4/terminfo/z/z29a-kc-bc
+/usr/share/ncurses4/terminfo/z/z29a-kc-uc
+/usr/share/ncurses4/terminfo/z/z29a-nkc-bc
+/usr/share/ncurses4/terminfo/z/z29a-nkc-uc
+/usr/share/ncurses4/terminfo/z/z29b
+/usr/share/ncurses4/terminfo/z/z30
+/usr/share/ncurses4/terminfo/z/z340
+/usr/share/ncurses4/terminfo/z/z340-nam
+/usr/share/ncurses4/terminfo/z/z39-a
+/usr/share/ncurses4/terminfo/z/z39a
+/usr/share/ncurses4/terminfo/z/z50
+/usr/share/ncurses4/terminfo/z/z8001
+/usr/share/ncurses4/terminfo/z/zen30
+/usr/share/ncurses4/terminfo/z/zen50
+/usr/share/ncurses4/terminfo/z/zen8001
+/usr/share/ncurses4/terminfo/z/zenith
+/usr/share/ncurses4/terminfo/z/zenith29
+/usr/share/ncurses4/terminfo/z/zenith39-a
+/usr/share/ncurses4/terminfo/z/zenith39-ansi
+/usr/share/ncurses4/terminfo/z/zt-1
+/usr/share/ncurses4/terminfo/z/ztx
+/usr/share/ncurses4/terminfo/z/ztx-1-a
+/usr/share/ncurses4/terminfo/z/ztx11
+
+2 15 RPM:Files 0 0
+2 14 #text 0 1
+
+1 15 RDF:Description 0 0
+1 14 #text 0 1
+
+0 15 RDF:RDF 0 0
diff --git a/result/rdf2.sax b/result/rdf2.sax
new file mode 100644
index 0000000..0ee7c3c
--- /dev/null
+++ b/result/rdf2.sax
@@ -0,0 +1,197 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(RDF:RDF, xmlns:RDF='http://www.w3.org/TR/WD-rdf-syntax#', xmlns:RPM='http://www.rpm.org/')
+SAX.characters(
+ , 3)
+SAX.startElement(RDF:Description, about='ftp://rufus.w3.org/linux/dld/5.4/i386/RPMS/i386/ncurses4-4.2-3.i386.rpm')
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Name)
+SAX.characters(ncurses4, 8)
+SAX.endElement(RPM:Name)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Version)
+SAX.characters(4.2, 3)
+SAX.endElement(RPM:Version)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Release)
+SAX.characters(3, 1)
+SAX.endElement(RPM:Release)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Arch)
+SAX.characters(i386, 4)
+SAX.endElement(RPM:Arch)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Os)
+SAX.characters(Linux, 5)
+SAX.endElement(RPM:Os)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Distribution)
+SAX.characters(DLD, 3)
+SAX.endElement(RPM:Distribution)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Vendor)
+SAX.characters(delix Computer GmbH, 19)
+SAX.endElement(RPM:Vendor)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Packager)
+SAX.characters(Till Bubeck , 12)
+SAX.getEntity(lt)
+SAX.characters(<, 1)
+SAX.characters(bubeck@delix.de, 15)
+SAX.getEntity(gt)
+SAX.characters(>, 1)
+SAX.characters(, Ngo Than , 11)
+SAX.getEntity(lt)
+SAX.characters(<, 1)
+SAX.characters(than@delix.de, 13)
+SAX.getEntity(gt)
+SAX.characters(>, 1)
+SAX.endElement(RPM:Packager)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Group)
+SAX.characters(Libraries, 9)
+SAX.endElement(RPM:Group)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Summary)
+SAX.characters(Bibliothek zur Ansteuerung von, 40)
+SAX.endElement(RPM:Summary)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Description)
+SAX.characters(Diese Library stellt dem Progr, 57)
+SAX.characters(ä, 2)
+SAX.characters(ngige
+Routinen zur Ansteuerung, 57)
+SAX.characters(ü, 2)
+SAX.characters(gung, die
+speziell optimiert s, 57)
+SAX.getEntity(apos)
+SAX.characters(', 1)
+SAX.characters(new curses, 10)
+SAX.getEntity(apos)
+SAX.characters(', 1)
+SAX.characters( (ncurses) Variante und ist de, 51)
+SAX.characters(ü, 2)
+SAX.characters(r die klassische Curses-Librar, 70)
+SAX.endElement(RPM:Description)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Copyright)
+SAX.characters(GPL, 3)
+SAX.endElement(RPM:Copyright)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Sources)
+SAX.characters(ncurses4-4.2-3.src.rpm, 22)
+SAX.endElement(RPM:Sources)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:BuildDate)
+SAX.characters(Tue May 12 19:30:26 1998, 24)
+SAX.endElement(RPM:BuildDate)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Date)
+SAX.characters(895015826, 9)
+SAX.endElement(RPM:Date)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Size)
+SAX.characters(1373513, 7)
+SAX.endElement(RPM:Size)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:BuildHost)
+SAX.characters(erdbeere.delix.de, 17)
+SAX.endElement(RPM:BuildHost)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Provides)
+SAX.characters(
+ , 7)
+SAX.startElement(RDF:Bag)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource, href='../../../../../resources/ncurses4.rdf')
+SAX.characters(ncurses4, 8)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource, href='../../../../../resources/libpanel.so.4.rdf')
+SAX.characters(libpanel.so.4, 13)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource, href='../../../../../resources/libncurses.so.4.rdf')
+SAX.characters(libncurses.so.4, 15)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource, href='../../../../../resources/libmenu.so.4.rdf')
+SAX.characters(libmenu.so.4, 12)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource, href='../../../../../resources/libform.so.4.rdf')
+SAX.characters(libform.so.4, 12)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 9)
+SAX.startElement(RPM:Resource, href='../../../../../resources/ncurses.rdf')
+SAX.characters(ncurses, 7)
+SAX.endElement(RPM:Resource)
+SAX.characters(
+ , 7)
+SAX.endElement(RDF:Bag)
+SAX.characters(
+ , 5)
+SAX.endElement(RPM:Provides)
+SAX.characters(
+ , 5)
+SAX.startElement(RPM:Files)
+SAX.characters(/lib/libncurses.so.4
+/lib/libn, 2008)
+SAX.characters(/share/ncurses4/terminfo/P/P14, 4000)
+SAX.characters(es4/terminfo/a/alt7pc
+/usr/sha, 4000)
+SAX.characters(/a/att4415-w
+/usr/share/ncurse, 4000)
+SAX.characters(ses4/terminfo/b/bee
+/usr/share, 4000)
+SAX.characters(r/share/ncurses4/terminfo/c/co, 4000)
+SAX.characters(/usr/share/ncurses4/terminfo/d, 4000)
+SAX.characters(sr/share/ncurses4/terminfo/g/g, 4000)
+SAX.characters(/terminfo/h/hp2626-12x40
+/usr/, 4000)
+SAX.characters(e/ncurses4/terminfo/i/intertub, 4000)
+SAX.characters(rses4/terminfo/m/mskermit22714, 4000)
+SAX.characters(are/ncurses4/terminfo/p/p12-m
+, 4000)
+SAX.characters(pt100w
+/usr/share/ncurses4/ter, 4000)
+SAX.characters(sr/share/ncurses4/terminfo/s/s, 4000)
+SAX.characters(usr/share/ncurses4/terminfo/t/, 4000)
+SAX.characters(share/ncurses4/terminfo/v/vi55, 4000)
+SAX.characters(are/ncurses4/terminfo/w/wy160-, 4000)
+SAX.characters(/wy99gt-vb
+/usr/share/ncurses4, 4000)
+SAX.characters(/w/wyse99gt
+/usr/share/ncurses, 2907)
+SAX.endElement(RPM:Files)
+SAX.characters(
+ , 3)
+SAX.endElement(RDF:Description)
+SAX.characters(
+, 1)
+SAX.endElement(RDF:RDF)
+SAX.endDocument()
diff --git a/result/regexp/content b/result/regexp/content
new file mode 100644
index 0000000..220fd47
--- /dev/null
+++ b/result/regexp/content
@@ -0,0 +1,12 @@
+Regexp: ((a|b|c)def)
+adef: Ok
+bdef: Ok
+adefg: Fail
+aaef: Fail
+Regexp: ((a|b|c|d|e|f)?(g|h|i)+(k|l)*)
+g: Ok
+gi: Ok
+fil: Ok
+gikl: Ok
+cghhhiill: Ok
+ak: Fail
diff --git a/result/regexp/hard b/result/regexp/hard
new file mode 100644
index 0000000..f348c08
--- /dev/null
+++ b/result/regexp/hard
@@ -0,0 +1,7 @@
+Regexp: ((a|b|\p{Nd}){1,2}|aaa|bbbb){1,2}
+bab: Ok
+aaca: Fail
+aaabbbb: Ok
+a0b: Ok
+aa0aaa: Fail
+b0aaa: Ok
diff --git a/result/regexp/ncname b/result/regexp/ncname
new file mode 100644
index 0000000..3f16d95
--- /dev/null
+++ b/result/regexp/ncname
@@ -0,0 +1,6 @@
+Regexp: [\i-[:]][\c-[:]]*
+a: Ok
+abc: Ok
+abc1d: Ok
+1ac: Fail
+a1b:c: Fail
diff --git a/result/regexp/ranges b/result/regexp/ranges
new file mode 100644
index 0000000..4cbf298
--- /dev/null
+++ b/result/regexp/ranges
@@ -0,0 +1,15 @@
+Regexp: a{2,3}
+a: Fail
+aa: Ok
+aaa: Ok
+aaaa: Fail
+Regexp: ba{2,3}c
+bac: Fail
+baac: Ok
+baaac: Ok
+baaaac: Fail
+Regexp: a(b|c){2,3}d
+abcd: Ok
+acccd: Ok
+abd: Fail
+accccd: Fail
diff --git a/result/regexp/xpath b/result/regexp/xpath
new file mode 100644
index 0000000..4f6b13c
--- /dev/null
+++ b/result/regexp/xpath
@@ -0,0 +1,32 @@
+Regexp: (\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*(\|(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*)*
+a: Ok
+a12/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b3: Ok
+*: Ok
+a|b: Ok
+.//a:b: Ok
+a/b/c: Ok
+a/*/b: Ok
+a:*/b:*/c:*: Ok
+child::a/child::b:*: Ok
+child::a/child::b:*|a/*/b|.//a:b: Ok
+1: Fail
+1ab: Fail
+a:1: Ok
+@a: Fail
+ancestor::a: Ok
+Regexp: (\.//)?(((child::)?(([\i-[:]][\c-[:]]*:)?([\i-[:]][\c-[:]]*|\*)))|\.)(/(((child::)?(([\i-[:]][\c-[:]]*:)?([\i-[:]][\c-[:]]*|\*)))|\.))*(\|(\.//)?(((child::)?(([\i-[:]][\c-[:]]*:)?([\i-[:]][\c-[:]]*|\*)))|\.)(/(((child::)?(([\i-[:]][\c-[:]]*:)?([\i-[:]][\c-[:]]*|\*)))|\.))*)*
+a: Ok
+a12/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b3: Ok
+*: Ok
+a|b: Ok
+.//a:b: Ok
+a/b/c: Ok
+a/*/b: Ok
+a:*/b:*/c:*: Ok
+child::a/child::b:*: Ok
+child::a/child::b:*|a/*/b|.//a:b: Ok
+1: Fail
+1ab: Fail
+a:1: Fail
+@a: Fail
+ancestor::a: Fail
diff --git a/result/relaxng/addressBook_err b/result/relaxng/addressBook_err
new file mode 100644
index 0000000..584d55a
--- /dev/null
+++ b/result/relaxng/addressBook_err
@@ -0,0 +1 @@
+./test/relaxng/addressBook.rng validates
diff --git a/result/relaxng/addressBook_valid b/result/relaxng/addressBook_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/addressBook_valid
diff --git a/result/relaxng/comps_0 b/result/relaxng/comps_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/comps_0
diff --git a/result/relaxng/comps_0.err b/result/relaxng/comps_0.err
new file mode 100644
index 0000000..cdefe63
--- /dev/null
+++ b/result/relaxng/comps_0.err
@@ -0,0 +1 @@
+./test/relaxng/comps_0.xml validates
diff --git a/result/relaxng/comps_err b/result/relaxng/comps_err
new file mode 100644
index 0000000..67dd402
--- /dev/null
+++ b/result/relaxng/comps_err
@@ -0,0 +1 @@
+./test/relaxng/comps.rng validates
diff --git a/result/relaxng/comps_valid b/result/relaxng/comps_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/comps_valid
diff --git a/result/relaxng/demo2_err b/result/relaxng/demo2_err
new file mode 100644
index 0000000..9bdaeb9
--- /dev/null
+++ b/result/relaxng/demo2_err
@@ -0,0 +1 @@
+./test/relaxng/demo2.rng validates
diff --git a/result/relaxng/demo2_valid b/result/relaxng/demo2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/demo2_valid
diff --git a/result/relaxng/demo3_err b/result/relaxng/demo3_err
new file mode 100644
index 0000000..ccced98
--- /dev/null
+++ b/result/relaxng/demo3_err
@@ -0,0 +1 @@
+./test/relaxng/demo3.rng validates
diff --git a/result/relaxng/demo3_valid b/result/relaxng/demo3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/demo3_valid
diff --git a/result/relaxng/demo_err b/result/relaxng/demo_err
new file mode 100644
index 0000000..4f397f8
--- /dev/null
+++ b/result/relaxng/demo_err
@@ -0,0 +1 @@
+./test/relaxng/demo.rng validates
diff --git a/result/relaxng/demo_valid b/result/relaxng/demo_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/demo_valid
diff --git a/result/relaxng/docbook_0 b/result/relaxng/docbook_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/docbook_0
diff --git a/result/relaxng/docbook_0.err b/result/relaxng/docbook_0.err
new file mode 100644
index 0000000..98d1971
--- /dev/null
+++ b/result/relaxng/docbook_0.err
@@ -0,0 +1 @@
+./test/relaxng/docbook_0.xml validates
diff --git a/result/relaxng/docbook_err b/result/relaxng/docbook_err
new file mode 100644
index 0000000..8124012
--- /dev/null
+++ b/result/relaxng/docbook_err
@@ -0,0 +1 @@
+./test/relaxng/docbook.rng validates
diff --git a/result/relaxng/docbook_valid b/result/relaxng/docbook_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/docbook_valid
diff --git a/result/relaxng/empty0_0 b/result/relaxng/empty0_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/empty0_0
diff --git a/result/relaxng/empty0_0.err b/result/relaxng/empty0_0.err
new file mode 100644
index 0000000..97d0c9d
--- /dev/null
+++ b/result/relaxng/empty0_0.err
@@ -0,0 +1 @@
+./test/relaxng/empty0_0.xml validates
diff --git a/result/relaxng/empty0_err b/result/relaxng/empty0_err
new file mode 100644
index 0000000..c4060cf
--- /dev/null
+++ b/result/relaxng/empty0_err
@@ -0,0 +1 @@
+./test/relaxng/empty0.rng validates
diff --git a/result/relaxng/empty0_valid b/result/relaxng/empty0_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/empty0_valid
diff --git a/result/relaxng/empty1_0 b/result/relaxng/empty1_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/empty1_0
diff --git a/result/relaxng/empty1_0.err b/result/relaxng/empty1_0.err
new file mode 100644
index 0000000..4c1a9af
--- /dev/null
+++ b/result/relaxng/empty1_0.err
@@ -0,0 +1 @@
+./test/relaxng/empty1_0.xml validates
diff --git a/result/relaxng/empty1_1 b/result/relaxng/empty1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/empty1_1
diff --git a/result/relaxng/empty1_1.err b/result/relaxng/empty1_1.err
new file mode 100644
index 0000000..6a71bb0
--- /dev/null
+++ b/result/relaxng/empty1_1.err
@@ -0,0 +1 @@
+./test/relaxng/empty1_1.xml validates
diff --git a/result/relaxng/empty1_err b/result/relaxng/empty1_err
new file mode 100644
index 0000000..f52d95c
--- /dev/null
+++ b/result/relaxng/empty1_err
@@ -0,0 +1 @@
+./test/relaxng/empty1.rng validates
diff --git a/result/relaxng/empty1_valid b/result/relaxng/empty1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/empty1_valid
diff --git a/result/relaxng/inline2_err b/result/relaxng/inline2_err
new file mode 100644
index 0000000..027408e
--- /dev/null
+++ b/result/relaxng/inline2_err
@@ -0,0 +1 @@
+./test/relaxng/inline2.rng validates
diff --git a/result/relaxng/inline2_valid b/result/relaxng/inline2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/inline2_valid
diff --git a/result/relaxng/inline3_err b/result/relaxng/inline3_err
new file mode 100644
index 0000000..1ceccb8
--- /dev/null
+++ b/result/relaxng/inline3_err
@@ -0,0 +1 @@
+./test/relaxng/inline3.rng validates
diff --git a/result/relaxng/inline3_valid b/result/relaxng/inline3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/inline3_valid
diff --git a/result/relaxng/inline_err b/result/relaxng/inline_err
new file mode 100644
index 0000000..8ba0e5c
--- /dev/null
+++ b/result/relaxng/inline_err
@@ -0,0 +1 @@
+./test/relaxng/inline.rng validates
diff --git a/result/relaxng/inline_valid b/result/relaxng/inline_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/inline_valid
diff --git a/result/relaxng/interleave0_0_err b/result/relaxng/interleave0_0_err
new file mode 100644
index 0000000..0d865ec
--- /dev/null
+++ b/result/relaxng/interleave0_0_err
@@ -0,0 +1 @@
+./test/relaxng/interleave0_0.rng validates
diff --git a/result/relaxng/interleave0_0_valid b/result/relaxng/interleave0_0_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/interleave0_0_valid
diff --git a/result/relaxng/interleave1_0_err b/result/relaxng/interleave1_0_err
new file mode 100644
index 0000000..4802352
--- /dev/null
+++ b/result/relaxng/interleave1_0_err
@@ -0,0 +1 @@
+./test/relaxng/interleave1_0.rng validates
diff --git a/result/relaxng/interleave1_0_valid b/result/relaxng/interleave1_0_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/interleave1_0_valid
diff --git a/result/relaxng/pattern1_err b/result/relaxng/pattern1_err
new file mode 100644
index 0000000..8856446
--- /dev/null
+++ b/result/relaxng/pattern1_err
@@ -0,0 +1 @@
+./test/relaxng/pattern1.rng validates
diff --git a/result/relaxng/pattern1_valid b/result/relaxng/pattern1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/pattern1_valid
diff --git a/result/relaxng/pattern2_err b/result/relaxng/pattern2_err
new file mode 100644
index 0000000..acccc55
--- /dev/null
+++ b/result/relaxng/pattern2_err
@@ -0,0 +1 @@
+./test/relaxng/pattern2.rng validates
diff --git a/result/relaxng/pattern2_valid b/result/relaxng/pattern2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/pattern2_valid
diff --git a/result/relaxng/proofsystem_err b/result/relaxng/proofsystem_err
new file mode 100644
index 0000000..9fbcfdc
--- /dev/null
+++ b/result/relaxng/proofsystem_err
@@ -0,0 +1 @@
+./test/relaxng/proofsystem.rng validates
diff --git a/result/relaxng/proofsystem_valid b/result/relaxng/proofsystem_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/proofsystem_valid
diff --git a/result/relaxng/rngbug-001_err b/result/relaxng/rngbug-001_err
new file mode 100644
index 0000000..4c30153
--- /dev/null
+++ b/result/relaxng/rngbug-001_err
@@ -0,0 +1 @@
+./test/relaxng/rngbug-001.rng validates
diff --git a/result/relaxng/rngbug-001_valid b/result/relaxng/rngbug-001_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/rngbug-001_valid
diff --git a/result/relaxng/spec1_1 b/result/relaxng/spec1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/spec1_1
diff --git a/result/relaxng/spec1_1.err b/result/relaxng/spec1_1.err
new file mode 100644
index 0000000..1e213a2
--- /dev/null
+++ b/result/relaxng/spec1_1.err
@@ -0,0 +1 @@
+./test/relaxng/spec1_1.xml validates
diff --git a/result/relaxng/spec1_err b/result/relaxng/spec1_err
new file mode 100644
index 0000000..8551c1e
--- /dev/null
+++ b/result/relaxng/spec1_err
@@ -0,0 +1 @@
+./test/relaxng/spec1.rng validates
diff --git a/result/relaxng/spec1_valid b/result/relaxng/spec1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/spec1_valid
diff --git a/result/relaxng/spec_0 b/result/relaxng/spec_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/spec_0
diff --git a/result/relaxng/spec_0.err b/result/relaxng/spec_0.err
new file mode 100644
index 0000000..df30e8a
--- /dev/null
+++ b/result/relaxng/spec_0.err
@@ -0,0 +1 @@
+./test/relaxng/spec_0.xml validates
diff --git a/result/relaxng/spec_err b/result/relaxng/spec_err
new file mode 100644
index 0000000..27336e1
--- /dev/null
+++ b/result/relaxng/spec_err
@@ -0,0 +1 @@
+./test/relaxng/spec.rng validates
diff --git a/result/relaxng/spec_valid b/result/relaxng/spec_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/spec_valid
diff --git a/result/relaxng/table_err b/result/relaxng/table_err
new file mode 100644
index 0000000..47e7996
--- /dev/null
+++ b/result/relaxng/table_err
@@ -0,0 +1 @@
+./test/relaxng/table.rng validates
diff --git a/result/relaxng/table_valid b/result/relaxng/table_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/table_valid
diff --git a/result/relaxng/tutor10_10_1 b/result/relaxng/tutor10_10_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_10_1
diff --git a/result/relaxng/tutor10_10_1.err b/result/relaxng/tutor10_10_1.err
new file mode 100644
index 0000000..2370ff2
--- /dev/null
+++ b/result/relaxng/tutor10_10_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_10_1.xml validates
diff --git a/result/relaxng/tutor10_10_err b/result/relaxng/tutor10_10_err
new file mode 100644
index 0000000..24a5f7e
--- /dev/null
+++ b/result/relaxng/tutor10_10_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_10.rng validates
diff --git a/result/relaxng/tutor10_10_valid b/result/relaxng/tutor10_10_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_10_valid
diff --git a/result/relaxng/tutor10_1_1 b/result/relaxng/tutor10_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_1_1
diff --git a/result/relaxng/tutor10_1_1.err b/result/relaxng/tutor10_1_1.err
new file mode 100644
index 0000000..361e1e8
--- /dev/null
+++ b/result/relaxng/tutor10_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_1_1.xml validates
diff --git a/result/relaxng/tutor10_1_2 b/result/relaxng/tutor10_1_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_1_2
diff --git a/result/relaxng/tutor10_1_2.err b/result/relaxng/tutor10_1_2.err
new file mode 100644
index 0000000..6092d7e
--- /dev/null
+++ b/result/relaxng/tutor10_1_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_1_2.xml validates
diff --git a/result/relaxng/tutor10_1_3 b/result/relaxng/tutor10_1_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_1_3
diff --git a/result/relaxng/tutor10_1_3.err b/result/relaxng/tutor10_1_3.err
new file mode 100644
index 0000000..1c5b68d
--- /dev/null
+++ b/result/relaxng/tutor10_1_3.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_1_3.xml validates
diff --git a/result/relaxng/tutor10_1_4 b/result/relaxng/tutor10_1_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_1_4
diff --git a/result/relaxng/tutor10_1_4.err b/result/relaxng/tutor10_1_4.err
new file mode 100644
index 0000000..4030e14
--- /dev/null
+++ b/result/relaxng/tutor10_1_4.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor10_1_4.xml:1: element foo: Relax-NG validity error : Expecting a namespace for element foo
+./test/relaxng/tutor10_1_4.xml fails to validate
diff --git a/result/relaxng/tutor10_1_5 b/result/relaxng/tutor10_1_5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_1_5
diff --git a/result/relaxng/tutor10_1_5.err b/result/relaxng/tutor10_1_5.err
new file mode 100644
index 0000000..2ab8d90
--- /dev/null
+++ b/result/relaxng/tutor10_1_5.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor10_1_5.xml:1: element foo: Relax-NG validity error : Element foo has wrong namespace: expecting http://www.example.com
+./test/relaxng/tutor10_1_5.xml fails to validate
diff --git a/result/relaxng/tutor10_1_6 b/result/relaxng/tutor10_1_6
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_1_6
diff --git a/result/relaxng/tutor10_1_6.err b/result/relaxng/tutor10_1_6.err
new file mode 100644
index 0000000..cafeb15
--- /dev/null
+++ b/result/relaxng/tutor10_1_6.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor10_1_6.xml:1: element foo: Relax-NG validity error : Element foo has wrong namespace: expecting http://www.example.com
+./test/relaxng/tutor10_1_6.xml fails to validate
diff --git a/result/relaxng/tutor10_1_err b/result/relaxng/tutor10_1_err
new file mode 100644
index 0000000..85be3be
--- /dev/null
+++ b/result/relaxng/tutor10_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_1.rng validates
diff --git a/result/relaxng/tutor10_1_valid b/result/relaxng/tutor10_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_1_valid
diff --git a/result/relaxng/tutor10_2_1 b/result/relaxng/tutor10_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_2_1
diff --git a/result/relaxng/tutor10_2_1.err b/result/relaxng/tutor10_2_1.err
new file mode 100644
index 0000000..836dbf7
--- /dev/null
+++ b/result/relaxng/tutor10_2_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_2_1.xml validates
diff --git a/result/relaxng/tutor10_2_2 b/result/relaxng/tutor10_2_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_2_2
diff --git a/result/relaxng/tutor10_2_2.err b/result/relaxng/tutor10_2_2.err
new file mode 100644
index 0000000..7e6ce31
--- /dev/null
+++ b/result/relaxng/tutor10_2_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_2_2.xml validates
diff --git a/result/relaxng/tutor10_2_3 b/result/relaxng/tutor10_2_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_2_3
diff --git a/result/relaxng/tutor10_2_3.err b/result/relaxng/tutor10_2_3.err
new file mode 100644
index 0000000..2ff2a82
--- /dev/null
+++ b/result/relaxng/tutor10_2_3.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor10_2_3.xml:1: element foo: Relax-NG validity error : Expecting no namespace for element foo
+./test/relaxng/tutor10_2_3.xml fails to validate
diff --git a/result/relaxng/tutor10_2_4 b/result/relaxng/tutor10_2_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_2_4
diff --git a/result/relaxng/tutor10_2_4.err b/result/relaxng/tutor10_2_4.err
new file mode 100644
index 0000000..d716b9b
--- /dev/null
+++ b/result/relaxng/tutor10_2_4.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor10_2_4.xml:1: element foo: Relax-NG validity error : Expecting no namespace for element foo
+./test/relaxng/tutor10_2_4.xml fails to validate
diff --git a/result/relaxng/tutor10_2_err b/result/relaxng/tutor10_2_err
new file mode 100644
index 0000000..b3e32a6
--- /dev/null
+++ b/result/relaxng/tutor10_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_2.rng validates
diff --git a/result/relaxng/tutor10_2_valid b/result/relaxng/tutor10_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_2_valid
diff --git a/result/relaxng/tutor10_3_1 b/result/relaxng/tutor10_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_3_1
diff --git a/result/relaxng/tutor10_3_1.err b/result/relaxng/tutor10_3_1.err
new file mode 100644
index 0000000..5f9a3b0
--- /dev/null
+++ b/result/relaxng/tutor10_3_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_3_1.xml validates
diff --git a/result/relaxng/tutor10_3_err b/result/relaxng/tutor10_3_err
new file mode 100644
index 0000000..3c714aa
--- /dev/null
+++ b/result/relaxng/tutor10_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_3.rng validates
diff --git a/result/relaxng/tutor10_3_valid b/result/relaxng/tutor10_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_3_valid
diff --git a/result/relaxng/tutor10_4_1 b/result/relaxng/tutor10_4_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_4_1
diff --git a/result/relaxng/tutor10_4_1.err b/result/relaxng/tutor10_4_1.err
new file mode 100644
index 0000000..833c5ee
--- /dev/null
+++ b/result/relaxng/tutor10_4_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_4_1.xml validates
diff --git a/result/relaxng/tutor10_4_err b/result/relaxng/tutor10_4_err
new file mode 100644
index 0000000..3208137
--- /dev/null
+++ b/result/relaxng/tutor10_4_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_4.rng validates
diff --git a/result/relaxng/tutor10_4_valid b/result/relaxng/tutor10_4_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_4_valid
diff --git a/result/relaxng/tutor10_5_1 b/result/relaxng/tutor10_5_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_5_1
diff --git a/result/relaxng/tutor10_5_1.err b/result/relaxng/tutor10_5_1.err
new file mode 100644
index 0000000..fb0bd96
--- /dev/null
+++ b/result/relaxng/tutor10_5_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_5_1.xml validates
diff --git a/result/relaxng/tutor10_5_err b/result/relaxng/tutor10_5_err
new file mode 100644
index 0000000..49808cf
--- /dev/null
+++ b/result/relaxng/tutor10_5_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_5.rng validates
diff --git a/result/relaxng/tutor10_5_valid b/result/relaxng/tutor10_5_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_5_valid
diff --git a/result/relaxng/tutor10_6_1 b/result/relaxng/tutor10_6_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_6_1
diff --git a/result/relaxng/tutor10_6_1.err b/result/relaxng/tutor10_6_1.err
new file mode 100644
index 0000000..4fed8f7
--- /dev/null
+++ b/result/relaxng/tutor10_6_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_6_1.xml validates
diff --git a/result/relaxng/tutor10_6_err b/result/relaxng/tutor10_6_err
new file mode 100644
index 0000000..09368c1
--- /dev/null
+++ b/result/relaxng/tutor10_6_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_6.rng validates
diff --git a/result/relaxng/tutor10_6_valid b/result/relaxng/tutor10_6_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_6_valid
diff --git a/result/relaxng/tutor10_7_1 b/result/relaxng/tutor10_7_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_7_1
diff --git a/result/relaxng/tutor10_7_1.err b/result/relaxng/tutor10_7_1.err
new file mode 100644
index 0000000..bbaab53
--- /dev/null
+++ b/result/relaxng/tutor10_7_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_7_1.xml validates
diff --git a/result/relaxng/tutor10_7_2 b/result/relaxng/tutor10_7_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_7_2
diff --git a/result/relaxng/tutor10_7_2.err b/result/relaxng/tutor10_7_2.err
new file mode 100644
index 0000000..f618988
--- /dev/null
+++ b/result/relaxng/tutor10_7_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_7_2.xml validates
diff --git a/result/relaxng/tutor10_7_3 b/result/relaxng/tutor10_7_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_7_3
diff --git a/result/relaxng/tutor10_7_3.err b/result/relaxng/tutor10_7_3.err
new file mode 100644
index 0000000..913dfaf
--- /dev/null
+++ b/result/relaxng/tutor10_7_3.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor10_7_3.xml:2: element card: Relax-NG validity error : Element card failed to validate attributes
+./test/relaxng/tutor10_7_3.xml fails to validate
diff --git a/result/relaxng/tutor10_7_err b/result/relaxng/tutor10_7_err
new file mode 100644
index 0000000..081a230
--- /dev/null
+++ b/result/relaxng/tutor10_7_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_7.rng validates
diff --git a/result/relaxng/tutor10_7_valid b/result/relaxng/tutor10_7_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_7_valid
diff --git a/result/relaxng/tutor10_8_1 b/result/relaxng/tutor10_8_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_8_1
diff --git a/result/relaxng/tutor10_8_1.err b/result/relaxng/tutor10_8_1.err
new file mode 100644
index 0000000..2412108
--- /dev/null
+++ b/result/relaxng/tutor10_8_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_8_1.xml validates
diff --git a/result/relaxng/tutor10_8_2 b/result/relaxng/tutor10_8_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_8_2
diff --git a/result/relaxng/tutor10_8_2.err b/result/relaxng/tutor10_8_2.err
new file mode 100644
index 0000000..6becf86
--- /dev/null
+++ b/result/relaxng/tutor10_8_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_8_2.xml validates
diff --git a/result/relaxng/tutor10_8_3 b/result/relaxng/tutor10_8_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_8_3
diff --git a/result/relaxng/tutor10_8_3.err b/result/relaxng/tutor10_8_3.err
new file mode 100644
index 0000000..ee0eb55
--- /dev/null
+++ b/result/relaxng/tutor10_8_3.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor10_8_3.xml:2: element card: Relax-NG validity error : Element card failed to validate attributes
+./test/relaxng/tutor10_8_3.xml fails to validate
diff --git a/result/relaxng/tutor10_8_err b/result/relaxng/tutor10_8_err
new file mode 100644
index 0000000..1a864cc
--- /dev/null
+++ b/result/relaxng/tutor10_8_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_8.rng validates
diff --git a/result/relaxng/tutor10_8_valid b/result/relaxng/tutor10_8_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_8_valid
diff --git a/result/relaxng/tutor10_9_1 b/result/relaxng/tutor10_9_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_9_1
diff --git a/result/relaxng/tutor10_9_1.err b/result/relaxng/tutor10_9_1.err
new file mode 100644
index 0000000..3e82887
--- /dev/null
+++ b/result/relaxng/tutor10_9_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_9_1.xml validates
diff --git a/result/relaxng/tutor10_9_err b/result/relaxng/tutor10_9_err
new file mode 100644
index 0000000..942058e
--- /dev/null
+++ b/result/relaxng/tutor10_9_err
@@ -0,0 +1 @@
+./test/relaxng/tutor10_9.rng validates
diff --git a/result/relaxng/tutor10_9_valid b/result/relaxng/tutor10_9_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor10_9_valid
diff --git a/result/relaxng/tutor11_1_1 b/result/relaxng/tutor11_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_1_1
diff --git a/result/relaxng/tutor11_1_1.err b/result/relaxng/tutor11_1_1.err
new file mode 100644
index 0000000..a8283fa
--- /dev/null
+++ b/result/relaxng/tutor11_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor11_1_1.xml validates
diff --git a/result/relaxng/tutor11_1_2 b/result/relaxng/tutor11_1_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_1_2
diff --git a/result/relaxng/tutor11_1_2.err b/result/relaxng/tutor11_1_2.err
new file mode 100644
index 0000000..72a72fa
--- /dev/null
+++ b/result/relaxng/tutor11_1_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor11_1_2.xml validates
diff --git a/result/relaxng/tutor11_1_3 b/result/relaxng/tutor11_1_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_1_3
diff --git a/result/relaxng/tutor11_1_3.err b/result/relaxng/tutor11_1_3.err
new file mode 100644
index 0000000..4c19cc9
--- /dev/null
+++ b/result/relaxng/tutor11_1_3.err
@@ -0,0 +1 @@
+./test/relaxng/tutor11_1_3.xml validates
diff --git a/result/relaxng/tutor11_1_err b/result/relaxng/tutor11_1_err
new file mode 100644
index 0000000..88347fe
--- /dev/null
+++ b/result/relaxng/tutor11_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor11_1.rng validates
diff --git a/result/relaxng/tutor11_1_valid b/result/relaxng/tutor11_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_1_valid
diff --git a/result/relaxng/tutor11_2_1 b/result/relaxng/tutor11_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_2_1
diff --git a/result/relaxng/tutor11_2_1.err b/result/relaxng/tutor11_2_1.err
new file mode 100644
index 0000000..eec60ec
--- /dev/null
+++ b/result/relaxng/tutor11_2_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor11_2_1.xml validates
diff --git a/result/relaxng/tutor11_2_2 b/result/relaxng/tutor11_2_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_2_2
diff --git a/result/relaxng/tutor11_2_2.err b/result/relaxng/tutor11_2_2.err
new file mode 100644
index 0000000..f0abba0
--- /dev/null
+++ b/result/relaxng/tutor11_2_2.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor11_2_2.xml:3: element card: Relax-NG validity error : Invalid attribute foo for element card
+./test/relaxng/tutor11_2_2.xml fails to validate
diff --git a/result/relaxng/tutor11_2_3 b/result/relaxng/tutor11_2_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_2_3
diff --git a/result/relaxng/tutor11_2_3.err b/result/relaxng/tutor11_2_3.err
new file mode 100644
index 0000000..f07ea78
--- /dev/null
+++ b/result/relaxng/tutor11_2_3.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor11_2_3.xml:3: element card: Relax-NG validity error : Invalid attribute b for element card
+./test/relaxng/tutor11_2_3.xml fails to validate
diff --git a/result/relaxng/tutor11_2_err b/result/relaxng/tutor11_2_err
new file mode 100644
index 0000000..3294c13
--- /dev/null
+++ b/result/relaxng/tutor11_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor11_2.rng validates
diff --git a/result/relaxng/tutor11_2_valid b/result/relaxng/tutor11_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_2_valid
diff --git a/result/relaxng/tutor11_3_1 b/result/relaxng/tutor11_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_3_1
diff --git a/result/relaxng/tutor11_3_1.err b/result/relaxng/tutor11_3_1.err
new file mode 100644
index 0000000..de9db32
--- /dev/null
+++ b/result/relaxng/tutor11_3_1.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor11_3.rng:1: element element: Relax-NG parser error : Attributes conflicts in group
+Relax-NG schema ./test/relaxng/tutor11_3.rng failed to compile
diff --git a/result/relaxng/tutor11_3_err b/result/relaxng/tutor11_3_err
new file mode 100644
index 0000000..14d9d44
--- /dev/null
+++ b/result/relaxng/tutor11_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor11_3.rng validates
diff --git a/result/relaxng/tutor11_3_valid b/result/relaxng/tutor11_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_3_valid
diff --git a/result/relaxng/tutor11_4_1 b/result/relaxng/tutor11_4_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_4_1
diff --git a/result/relaxng/tutor11_4_1.err b/result/relaxng/tutor11_4_1.err
new file mode 100644
index 0000000..16aed5c
--- /dev/null
+++ b/result/relaxng/tutor11_4_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor11_4_1.xml validates
diff --git a/result/relaxng/tutor11_4_err b/result/relaxng/tutor11_4_err
new file mode 100644
index 0000000..f0a8339
--- /dev/null
+++ b/result/relaxng/tutor11_4_err
@@ -0,0 +1 @@
+./test/relaxng/tutor11_4.rng validates
diff --git a/result/relaxng/tutor11_4_valid b/result/relaxng/tutor11_4_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor11_4_valid
diff --git a/result/relaxng/tutor12_1_1 b/result/relaxng/tutor12_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor12_1_1
diff --git a/result/relaxng/tutor12_1_1.err b/result/relaxng/tutor12_1_1.err
new file mode 100644
index 0000000..aab20d3
--- /dev/null
+++ b/result/relaxng/tutor12_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor12_1_1.xml validates
diff --git a/result/relaxng/tutor12_1_err b/result/relaxng/tutor12_1_err
new file mode 100644
index 0000000..a02fb41
--- /dev/null
+++ b/result/relaxng/tutor12_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor12_1.rng validates
diff --git a/result/relaxng/tutor12_1_valid b/result/relaxng/tutor12_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor12_1_valid
diff --git a/result/relaxng/tutor13_1_1 b/result/relaxng/tutor13_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor13_1_1
diff --git a/result/relaxng/tutor13_1_1.err b/result/relaxng/tutor13_1_1.err
new file mode 100644
index 0000000..3a3f2ae
--- /dev/null
+++ b/result/relaxng/tutor13_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor13_1_1.xml validates
diff --git a/result/relaxng/tutor13_1_err b/result/relaxng/tutor13_1_err
new file mode 100644
index 0000000..ccd11ad
--- /dev/null
+++ b/result/relaxng/tutor13_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor13_1.rng validates
diff --git a/result/relaxng/tutor13_1_valid b/result/relaxng/tutor13_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor13_1_valid
diff --git a/result/relaxng/tutor14_1_err b/result/relaxng/tutor14_1_err
new file mode 100644
index 0000000..191ec3d
--- /dev/null
+++ b/result/relaxng/tutor14_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor14_1.rng validates
diff --git a/result/relaxng/tutor14_1_valid b/result/relaxng/tutor14_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor14_1_valid
diff --git a/result/relaxng/tutor1_1_1 b/result/relaxng/tutor1_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor1_1_1
diff --git a/result/relaxng/tutor1_1_1.err b/result/relaxng/tutor1_1_1.err
new file mode 100644
index 0000000..b6767f2
--- /dev/null
+++ b/result/relaxng/tutor1_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor1_1_1.xml validates
diff --git a/result/relaxng/tutor1_1_err b/result/relaxng/tutor1_1_err
new file mode 100644
index 0000000..d7cbfe8
--- /dev/null
+++ b/result/relaxng/tutor1_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor1_1.rng validates
diff --git a/result/relaxng/tutor1_1_valid b/result/relaxng/tutor1_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor1_1_valid
diff --git a/result/relaxng/tutor1_2_1 b/result/relaxng/tutor1_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor1_2_1
diff --git a/result/relaxng/tutor1_2_1.err b/result/relaxng/tutor1_2_1.err
new file mode 100644
index 0000000..2dc3698
--- /dev/null
+++ b/result/relaxng/tutor1_2_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor1_2_1.xml validates
diff --git a/result/relaxng/tutor1_2_err b/result/relaxng/tutor1_2_err
new file mode 100644
index 0000000..97d32b2
--- /dev/null
+++ b/result/relaxng/tutor1_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor1_2.rng validates
diff --git a/result/relaxng/tutor1_2_valid b/result/relaxng/tutor1_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor1_2_valid
diff --git a/result/relaxng/tutor1_3_1 b/result/relaxng/tutor1_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor1_3_1
diff --git a/result/relaxng/tutor1_3_1.err b/result/relaxng/tutor1_3_1.err
new file mode 100644
index 0000000..9c116d8
--- /dev/null
+++ b/result/relaxng/tutor1_3_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor1_3_1.xml validates
diff --git a/result/relaxng/tutor1_3_err b/result/relaxng/tutor1_3_err
new file mode 100644
index 0000000..4941f8f
--- /dev/null
+++ b/result/relaxng/tutor1_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor1_3.rng validates
diff --git a/result/relaxng/tutor1_3_valid b/result/relaxng/tutor1_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor1_3_valid
diff --git a/result/relaxng/tutor1_4_1 b/result/relaxng/tutor1_4_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor1_4_1
diff --git a/result/relaxng/tutor1_4_1.err b/result/relaxng/tutor1_4_1.err
new file mode 100644
index 0000000..9dc35e6
--- /dev/null
+++ b/result/relaxng/tutor1_4_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor1_4_1.xml validates
diff --git a/result/relaxng/tutor1_4_err b/result/relaxng/tutor1_4_err
new file mode 100644
index 0000000..a1fd60c
--- /dev/null
+++ b/result/relaxng/tutor1_4_err
@@ -0,0 +1 @@
+./test/relaxng/tutor1_4.rng validates
diff --git a/result/relaxng/tutor1_4_valid b/result/relaxng/tutor1_4_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor1_4_valid
diff --git a/result/relaxng/tutor2_1_1 b/result/relaxng/tutor2_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor2_1_1
diff --git a/result/relaxng/tutor2_1_1.err b/result/relaxng/tutor2_1_1.err
new file mode 100644
index 0000000..5da7633
--- /dev/null
+++ b/result/relaxng/tutor2_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor2_1_1.xml validates
diff --git a/result/relaxng/tutor2_1_err b/result/relaxng/tutor2_1_err
new file mode 100644
index 0000000..df4778e
--- /dev/null
+++ b/result/relaxng/tutor2_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor2_1.rng validates
diff --git a/result/relaxng/tutor2_1_valid b/result/relaxng/tutor2_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor2_1_valid
diff --git a/result/relaxng/tutor3_1_1 b/result/relaxng/tutor3_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_1_1
diff --git a/result/relaxng/tutor3_1_1.err b/result/relaxng/tutor3_1_1.err
new file mode 100644
index 0000000..815f1f0
--- /dev/null
+++ b/result/relaxng/tutor3_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_1_1.xml validates
diff --git a/result/relaxng/tutor3_1_2 b/result/relaxng/tutor3_1_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_1_2
diff --git a/result/relaxng/tutor3_1_2.err b/result/relaxng/tutor3_1_2.err
new file mode 100644
index 0000000..e126430
--- /dev/null
+++ b/result/relaxng/tutor3_1_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_1_2.xml validates
diff --git a/result/relaxng/tutor3_1_err b/result/relaxng/tutor3_1_err
new file mode 100644
index 0000000..949ef9a
--- /dev/null
+++ b/result/relaxng/tutor3_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_1.rng validates
diff --git a/result/relaxng/tutor3_1_valid b/result/relaxng/tutor3_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_1_valid
diff --git a/result/relaxng/tutor3_2_1 b/result/relaxng/tutor3_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_2_1
diff --git a/result/relaxng/tutor3_2_1.err b/result/relaxng/tutor3_2_1.err
new file mode 100644
index 0000000..380250a
--- /dev/null
+++ b/result/relaxng/tutor3_2_1.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor3_2_1.xml:1: element email: Relax-NG validity error : Did not expect element email there
+./test/relaxng/tutor3_2_1.xml fails to validate
diff --git a/result/relaxng/tutor3_2_err b/result/relaxng/tutor3_2_err
new file mode 100644
index 0000000..b6cb1ad
--- /dev/null
+++ b/result/relaxng/tutor3_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_2.rng validates
diff --git a/result/relaxng/tutor3_2_valid b/result/relaxng/tutor3_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_2_valid
diff --git a/result/relaxng/tutor3_3_1 b/result/relaxng/tutor3_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_3_1
diff --git a/result/relaxng/tutor3_3_1.err b/result/relaxng/tutor3_3_1.err
new file mode 100644
index 0000000..3cd5e05
--- /dev/null
+++ b/result/relaxng/tutor3_3_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_3_1.xml validates
diff --git a/result/relaxng/tutor3_3_err b/result/relaxng/tutor3_3_err
new file mode 100644
index 0000000..92e83b6
--- /dev/null
+++ b/result/relaxng/tutor3_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_3.rng validates
diff --git a/result/relaxng/tutor3_3_valid b/result/relaxng/tutor3_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_3_valid
diff --git a/result/relaxng/tutor3_4_1 b/result/relaxng/tutor3_4_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_4_1
diff --git a/result/relaxng/tutor3_4_1.err b/result/relaxng/tutor3_4_1.err
new file mode 100644
index 0000000..62956f7
--- /dev/null
+++ b/result/relaxng/tutor3_4_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_4_1.xml validates
diff --git a/result/relaxng/tutor3_4_err b/result/relaxng/tutor3_4_err
new file mode 100644
index 0000000..61ef41f
--- /dev/null
+++ b/result/relaxng/tutor3_4_err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_4.rng validates
diff --git a/result/relaxng/tutor3_4_valid b/result/relaxng/tutor3_4_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_4_valid
diff --git a/result/relaxng/tutor3_5_1 b/result/relaxng/tutor3_5_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_5_1
diff --git a/result/relaxng/tutor3_5_1.err b/result/relaxng/tutor3_5_1.err
new file mode 100644
index 0000000..715b160
--- /dev/null
+++ b/result/relaxng/tutor3_5_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_5_1.xml validates
diff --git a/result/relaxng/tutor3_5_2 b/result/relaxng/tutor3_5_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_5_2
diff --git a/result/relaxng/tutor3_5_2.err b/result/relaxng/tutor3_5_2.err
new file mode 100644
index 0000000..16e6627
--- /dev/null
+++ b/result/relaxng/tutor3_5_2.err
@@ -0,0 +1,3 @@
+./test/relaxng/tutor3_5_2.xml:2: element email: Relax-NG validity error : Expecting element name, got email
+./test/relaxng/tutor3_5_2.xml:2: element email: Relax-NG validity error : Element card failed to validate content
+./test/relaxng/tutor3_5_2.xml fails to validate
diff --git a/result/relaxng/tutor3_5_err b/result/relaxng/tutor3_5_err
new file mode 100644
index 0000000..2e36868
--- /dev/null
+++ b/result/relaxng/tutor3_5_err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_5.rng validates
diff --git a/result/relaxng/tutor3_5_valid b/result/relaxng/tutor3_5_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_5_valid
diff --git a/result/relaxng/tutor3_6_1 b/result/relaxng/tutor3_6_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_6_1
diff --git a/result/relaxng/tutor3_6_1.err b/result/relaxng/tutor3_6_1.err
new file mode 100644
index 0000000..ba6456e
--- /dev/null
+++ b/result/relaxng/tutor3_6_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_6_1.xml validates
diff --git a/result/relaxng/tutor3_6_err b/result/relaxng/tutor3_6_err
new file mode 100644
index 0000000..8479bea
--- /dev/null
+++ b/result/relaxng/tutor3_6_err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_6.rng validates
diff --git a/result/relaxng/tutor3_6_valid b/result/relaxng/tutor3_6_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_6_valid
diff --git a/result/relaxng/tutor3_7_1 b/result/relaxng/tutor3_7_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_7_1
diff --git a/result/relaxng/tutor3_7_1.err b/result/relaxng/tutor3_7_1.err
new file mode 100644
index 0000000..88b2132
--- /dev/null
+++ b/result/relaxng/tutor3_7_1.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor3_7.rng:1: element element: Relax-NG parser error : xmlRelaxNGParseElement: element has no content
+Relax-NG schema ./test/relaxng/tutor3_7.rng failed to compile
diff --git a/result/relaxng/tutor3_7_err b/result/relaxng/tutor3_7_err
new file mode 100644
index 0000000..2546132
--- /dev/null
+++ b/result/relaxng/tutor3_7_err
@@ -0,0 +1,4 @@
+./test/relaxng/tutor3_7.rng:1: element element: Relax-NG validity error : Expecting an element , got nothing
+./test/relaxng/tutor3_7.rng:1: element element: Relax-NG validity error : Invalid sequence in interleave
+./test/relaxng/tutor3_7.rng:1: element element: Relax-NG validity error : Element element failed to validate content
+./test/relaxng/tutor3_7.rng fails to validate
diff --git a/result/relaxng/tutor3_7_valid b/result/relaxng/tutor3_7_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_7_valid
diff --git a/result/relaxng/tutor3_8_1 b/result/relaxng/tutor3_8_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_8_1
diff --git a/result/relaxng/tutor3_8_1.err b/result/relaxng/tutor3_8_1.err
new file mode 100644
index 0000000..89894a9
--- /dev/null
+++ b/result/relaxng/tutor3_8_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_8_1.xml validates
diff --git a/result/relaxng/tutor3_8_err b/result/relaxng/tutor3_8_err
new file mode 100644
index 0000000..44fe75d
--- /dev/null
+++ b/result/relaxng/tutor3_8_err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_8.rng validates
diff --git a/result/relaxng/tutor3_8_valid b/result/relaxng/tutor3_8_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_8_valid
diff --git a/result/relaxng/tutor3_9_1 b/result/relaxng/tutor3_9_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_9_1
diff --git a/result/relaxng/tutor3_9_1.err b/result/relaxng/tutor3_9_1.err
new file mode 100644
index 0000000..1ee50c2
--- /dev/null
+++ b/result/relaxng/tutor3_9_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_9_1.xml validates
diff --git a/result/relaxng/tutor3_9_err b/result/relaxng/tutor3_9_err
new file mode 100644
index 0000000..d54fbe0
--- /dev/null
+++ b/result/relaxng/tutor3_9_err
@@ -0,0 +1 @@
+./test/relaxng/tutor3_9.rng validates
diff --git a/result/relaxng/tutor3_9_valid b/result/relaxng/tutor3_9_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor3_9_valid
diff --git a/result/relaxng/tutor4_1_1 b/result/relaxng/tutor4_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_1_1
diff --git a/result/relaxng/tutor4_1_1.err b/result/relaxng/tutor4_1_1.err
new file mode 100644
index 0000000..d8f436d
--- /dev/null
+++ b/result/relaxng/tutor4_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_1_1.xml validates
diff --git a/result/relaxng/tutor4_1_err b/result/relaxng/tutor4_1_err
new file mode 100644
index 0000000..94f0289
--- /dev/null
+++ b/result/relaxng/tutor4_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_1.rng validates
diff --git a/result/relaxng/tutor4_1_valid b/result/relaxng/tutor4_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_1_valid
diff --git a/result/relaxng/tutor4_2_1 b/result/relaxng/tutor4_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_2_1
diff --git a/result/relaxng/tutor4_2_1.err b/result/relaxng/tutor4_2_1.err
new file mode 100644
index 0000000..d44dcb8
--- /dev/null
+++ b/result/relaxng/tutor4_2_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_2_1.xml validates
diff --git a/result/relaxng/tutor4_2_err b/result/relaxng/tutor4_2_err
new file mode 100644
index 0000000..82085d0
--- /dev/null
+++ b/result/relaxng/tutor4_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_2.rng validates
diff --git a/result/relaxng/tutor4_2_valid b/result/relaxng/tutor4_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_2_valid
diff --git a/result/relaxng/tutor4_3_1 b/result/relaxng/tutor4_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_3_1
diff --git a/result/relaxng/tutor4_3_1.err b/result/relaxng/tutor4_3_1.err
new file mode 100644
index 0000000..7ff3afe
--- /dev/null
+++ b/result/relaxng/tutor4_3_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_3_1.xml validates
diff --git a/result/relaxng/tutor4_3_2 b/result/relaxng/tutor4_3_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_3_2
diff --git a/result/relaxng/tutor4_3_2.err b/result/relaxng/tutor4_3_2.err
new file mode 100644
index 0000000..d3eeffd
--- /dev/null
+++ b/result/relaxng/tutor4_3_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_3_2.xml validates
diff --git a/result/relaxng/tutor4_3_3 b/result/relaxng/tutor4_3_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_3_3
diff --git a/result/relaxng/tutor4_3_3.err b/result/relaxng/tutor4_3_3.err
new file mode 100644
index 0000000..5ae9811
--- /dev/null
+++ b/result/relaxng/tutor4_3_3.err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_3_3.xml validates
diff --git a/result/relaxng/tutor4_3_4 b/result/relaxng/tutor4_3_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_3_4
diff --git a/result/relaxng/tutor4_3_4.err b/result/relaxng/tutor4_3_4.err
new file mode 100644
index 0000000..e550043
--- /dev/null
+++ b/result/relaxng/tutor4_3_4.err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_3_4.xml validates
diff --git a/result/relaxng/tutor4_3_5 b/result/relaxng/tutor4_3_5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_3_5
diff --git a/result/relaxng/tutor4_3_5.err b/result/relaxng/tutor4_3_5.err
new file mode 100644
index 0000000..cf76480
--- /dev/null
+++ b/result/relaxng/tutor4_3_5.err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_3_5.xml validates
diff --git a/result/relaxng/tutor4_3_6 b/result/relaxng/tutor4_3_6
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_3_6
diff --git a/result/relaxng/tutor4_3_6.err b/result/relaxng/tutor4_3_6.err
new file mode 100644
index 0000000..df80a81
--- /dev/null
+++ b/result/relaxng/tutor4_3_6.err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_3_6.xml validates
diff --git a/result/relaxng/tutor4_3_err b/result/relaxng/tutor4_3_err
new file mode 100644
index 0000000..74eb8b2
--- /dev/null
+++ b/result/relaxng/tutor4_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_3.rng validates
diff --git a/result/relaxng/tutor4_3_valid b/result/relaxng/tutor4_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_3_valid
diff --git a/result/relaxng/tutor4_4_1 b/result/relaxng/tutor4_4_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_4_1
diff --git a/result/relaxng/tutor4_4_1.err b/result/relaxng/tutor4_4_1.err
new file mode 100644
index 0000000..595bd6e
--- /dev/null
+++ b/result/relaxng/tutor4_4_1.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor4_4.rng:25: element ref: Relax-NG parser error : Detected a cycle in inline references
+Relax-NG schema ./test/relaxng/tutor4_4.rng failed to compile
diff --git a/result/relaxng/tutor4_4_err b/result/relaxng/tutor4_4_err
new file mode 100644
index 0000000..641ee87
--- /dev/null
+++ b/result/relaxng/tutor4_4_err
@@ -0,0 +1 @@
+./test/relaxng/tutor4_4.rng validates
diff --git a/result/relaxng/tutor4_4_valid b/result/relaxng/tutor4_4_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor4_4_valid
diff --git a/result/relaxng/tutor5_1_1 b/result/relaxng/tutor5_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor5_1_1
diff --git a/result/relaxng/tutor5_1_1.err b/result/relaxng/tutor5_1_1.err
new file mode 100644
index 0000000..e6c2842
--- /dev/null
+++ b/result/relaxng/tutor5_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor5_1_1.xml validates
diff --git a/result/relaxng/tutor5_1_err b/result/relaxng/tutor5_1_err
new file mode 100644
index 0000000..586fd98
--- /dev/null
+++ b/result/relaxng/tutor5_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor5_1.rng validates
diff --git a/result/relaxng/tutor5_1_valid b/result/relaxng/tutor5_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor5_1_valid
diff --git a/result/relaxng/tutor5_2_1 b/result/relaxng/tutor5_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor5_2_1
diff --git a/result/relaxng/tutor5_2_1.err b/result/relaxng/tutor5_2_1.err
new file mode 100644
index 0000000..a64df3b
--- /dev/null
+++ b/result/relaxng/tutor5_2_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor5_2_1.xml validates
diff --git a/result/relaxng/tutor5_2_err b/result/relaxng/tutor5_2_err
new file mode 100644
index 0000000..de8f423
--- /dev/null
+++ b/result/relaxng/tutor5_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor5_2.rng validates
diff --git a/result/relaxng/tutor5_2_valid b/result/relaxng/tutor5_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor5_2_valid
diff --git a/result/relaxng/tutor5_3_1 b/result/relaxng/tutor5_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor5_3_1
diff --git a/result/relaxng/tutor5_3_1.err b/result/relaxng/tutor5_3_1.err
new file mode 100644
index 0000000..72f4379
--- /dev/null
+++ b/result/relaxng/tutor5_3_1.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor5_3.rng:1: element element: Relax-NG parser error : Element bad has a content type error
+Relax-NG schema ./test/relaxng/tutor5_3.rng failed to compile
diff --git a/result/relaxng/tutor5_3_err b/result/relaxng/tutor5_3_err
new file mode 100644
index 0000000..f00a543
--- /dev/null
+++ b/result/relaxng/tutor5_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor5_3.rng validates
diff --git a/result/relaxng/tutor5_3_valid b/result/relaxng/tutor5_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor5_3_valid
diff --git a/result/relaxng/tutor5_4_1 b/result/relaxng/tutor5_4_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor5_4_1
diff --git a/result/relaxng/tutor5_4_1.err b/result/relaxng/tutor5_4_1.err
new file mode 100644
index 0000000..13ac9bc
--- /dev/null
+++ b/result/relaxng/tutor5_4_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor5_4_1.xml validates
diff --git a/result/relaxng/tutor5_4_err b/result/relaxng/tutor5_4_err
new file mode 100644
index 0000000..669b41d
--- /dev/null
+++ b/result/relaxng/tutor5_4_err
@@ -0,0 +1 @@
+./test/relaxng/tutor5_4.rng validates
diff --git a/result/relaxng/tutor5_4_valid b/result/relaxng/tutor5_4_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor5_4_valid
diff --git a/result/relaxng/tutor5_5_err b/result/relaxng/tutor5_5_err
new file mode 100644
index 0000000..4f9f0f5
--- /dev/null
+++ b/result/relaxng/tutor5_5_err
@@ -0,0 +1 @@
+./test/relaxng/tutor5_5.rng validates
diff --git a/result/relaxng/tutor5_5_valid b/result/relaxng/tutor5_5_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor5_5_valid
diff --git a/result/relaxng/tutor6_1_1 b/result/relaxng/tutor6_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_1_1
diff --git a/result/relaxng/tutor6_1_1.err b/result/relaxng/tutor6_1_1.err
new file mode 100644
index 0000000..3c44662
--- /dev/null
+++ b/result/relaxng/tutor6_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_1_1.xml validates
diff --git a/result/relaxng/tutor6_1_2 b/result/relaxng/tutor6_1_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_1_2
diff --git a/result/relaxng/tutor6_1_2.err b/result/relaxng/tutor6_1_2.err
new file mode 100644
index 0000000..6c70fed
--- /dev/null
+++ b/result/relaxng/tutor6_1_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_1_2.xml validates
diff --git a/result/relaxng/tutor6_1_3 b/result/relaxng/tutor6_1_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_1_3
diff --git a/result/relaxng/tutor6_1_3.err b/result/relaxng/tutor6_1_3.err
new file mode 100644
index 0000000..f0f6e7f
--- /dev/null
+++ b/result/relaxng/tutor6_1_3.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor6_1_3.xml:1: element card: Relax-NG validity error : Element card failed to validate attributes
+./test/relaxng/tutor6_1_3.xml fails to validate
diff --git a/result/relaxng/tutor6_1_4 b/result/relaxng/tutor6_1_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_1_4
diff --git a/result/relaxng/tutor6_1_4.err b/result/relaxng/tutor6_1_4.err
new file mode 100644
index 0000000..d9b2291
--- /dev/null
+++ b/result/relaxng/tutor6_1_4.err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_1_4.xml validates
diff --git a/result/relaxng/tutor6_1_5 b/result/relaxng/tutor6_1_5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_1_5
diff --git a/result/relaxng/tutor6_1_5.err b/result/relaxng/tutor6_1_5.err
new file mode 100644
index 0000000..f601d7e
--- /dev/null
+++ b/result/relaxng/tutor6_1_5.err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_1_5.xml validates
diff --git a/result/relaxng/tutor6_1_err b/result/relaxng/tutor6_1_err
new file mode 100644
index 0000000..7440829
--- /dev/null
+++ b/result/relaxng/tutor6_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_1.rng validates
diff --git a/result/relaxng/tutor6_1_valid b/result/relaxng/tutor6_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_1_valid
diff --git a/result/relaxng/tutor6_2_1 b/result/relaxng/tutor6_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_2_1
diff --git a/result/relaxng/tutor6_2_1.err b/result/relaxng/tutor6_2_1.err
new file mode 100644
index 0000000..d07807b
--- /dev/null
+++ b/result/relaxng/tutor6_2_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_2_1.xml validates
diff --git a/result/relaxng/tutor6_2_2 b/result/relaxng/tutor6_2_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_2_2
diff --git a/result/relaxng/tutor6_2_2.err b/result/relaxng/tutor6_2_2.err
new file mode 100644
index 0000000..df10075
--- /dev/null
+++ b/result/relaxng/tutor6_2_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_2_2.xml validates
diff --git a/result/relaxng/tutor6_2_3 b/result/relaxng/tutor6_2_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_2_3
diff --git a/result/relaxng/tutor6_2_3.err b/result/relaxng/tutor6_2_3.err
new file mode 100644
index 0000000..17602d3
--- /dev/null
+++ b/result/relaxng/tutor6_2_3.err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_2_3.xml validates
diff --git a/result/relaxng/tutor6_2_4 b/result/relaxng/tutor6_2_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_2_4
diff --git a/result/relaxng/tutor6_2_4.err b/result/relaxng/tutor6_2_4.err
new file mode 100644
index 0000000..b28ac23
--- /dev/null
+++ b/result/relaxng/tutor6_2_4.err
@@ -0,0 +1,3 @@
+./test/relaxng/tutor6_2_4.xml:4: element preferredFormat: Relax-NG validity error : Error validating value
+./test/relaxng/tutor6_2_4.xml:4: element preferredFormat: Relax-NG validity error : Element preferredFormat failed to validate content
+./test/relaxng/tutor6_2_4.xml fails to validate
diff --git a/result/relaxng/tutor6_2_err b/result/relaxng/tutor6_2_err
new file mode 100644
index 0000000..ba78ec9
--- /dev/null
+++ b/result/relaxng/tutor6_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_2.rng validates
diff --git a/result/relaxng/tutor6_2_valid b/result/relaxng/tutor6_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_2_valid
diff --git a/result/relaxng/tutor6_3_1 b/result/relaxng/tutor6_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_3_1
diff --git a/result/relaxng/tutor6_3_1.err b/result/relaxng/tutor6_3_1.err
new file mode 100644
index 0000000..91f721a
--- /dev/null
+++ b/result/relaxng/tutor6_3_1.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor6_3_1.xml:1: element card: Relax-NG validity error : Element card failed to validate attributes
+./test/relaxng/tutor6_3_1.xml fails to validate
diff --git a/result/relaxng/tutor6_3_err b/result/relaxng/tutor6_3_err
new file mode 100644
index 0000000..35dbe51
--- /dev/null
+++ b/result/relaxng/tutor6_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor6_3.rng validates
diff --git a/result/relaxng/tutor6_3_valid b/result/relaxng/tutor6_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor6_3_valid
diff --git a/result/relaxng/tutor7_1_1 b/result/relaxng/tutor7_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_1_1
diff --git a/result/relaxng/tutor7_1_1.err b/result/relaxng/tutor7_1_1.err
new file mode 100644
index 0000000..6cae548
--- /dev/null
+++ b/result/relaxng/tutor7_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_1_1.xml validates
diff --git a/result/relaxng/tutor7_1_2 b/result/relaxng/tutor7_1_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_1_2
diff --git a/result/relaxng/tutor7_1_2.err b/result/relaxng/tutor7_1_2.err
new file mode 100644
index 0000000..395f407
--- /dev/null
+++ b/result/relaxng/tutor7_1_2.err
@@ -0,0 +1,4 @@
+./test/relaxng/tutor7_1_2.xml:1: element vector: Relax-NG validity error : failed to validate type float
+./test/relaxng/tutor7_1_2.xml:1: element vector: Relax-NG validity error : Error validating list
+./test/relaxng/tutor7_1_2.xml:1: element vector: Relax-NG validity error : Element vector failed to validate content
+./test/relaxng/tutor7_1_2.xml fails to validate
diff --git a/result/relaxng/tutor7_1_3 b/result/relaxng/tutor7_1_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_1_3
diff --git a/result/relaxng/tutor7_1_3.err b/result/relaxng/tutor7_1_3.err
new file mode 100644
index 0000000..90fb8f9
--- /dev/null
+++ b/result/relaxng/tutor7_1_3.err
@@ -0,0 +1,4 @@
+./test/relaxng/tutor7_1_3.xml:1: element vector: Relax-NG validity error : Extra data in list: 5.6
+./test/relaxng/tutor7_1_3.xml:1: element vector: Relax-NG validity error : Error validating list
+./test/relaxng/tutor7_1_3.xml:1: element vector: Relax-NG validity error : Element vector failed to validate content
+./test/relaxng/tutor7_1_3.xml fails to validate
diff --git a/result/relaxng/tutor7_1_4 b/result/relaxng/tutor7_1_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_1_4
diff --git a/result/relaxng/tutor7_1_4.err b/result/relaxng/tutor7_1_4.err
new file mode 100644
index 0000000..81b9f58
--- /dev/null
+++ b/result/relaxng/tutor7_1_4.err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_1_4.xml validates
diff --git a/result/relaxng/tutor7_1_err b/result/relaxng/tutor7_1_err
new file mode 100644
index 0000000..03d273f
--- /dev/null
+++ b/result/relaxng/tutor7_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_1.rng validates
diff --git a/result/relaxng/tutor7_1_valid b/result/relaxng/tutor7_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_1_valid
diff --git a/result/relaxng/tutor7_2_1 b/result/relaxng/tutor7_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_2_1
diff --git a/result/relaxng/tutor7_2_1.err b/result/relaxng/tutor7_2_1.err
new file mode 100644
index 0000000..8673462
--- /dev/null
+++ b/result/relaxng/tutor7_2_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_2_1.xml validates
diff --git a/result/relaxng/tutor7_2_2 b/result/relaxng/tutor7_2_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_2_2
diff --git a/result/relaxng/tutor7_2_2.err b/result/relaxng/tutor7_2_2.err
new file mode 100644
index 0000000..d03cb32
--- /dev/null
+++ b/result/relaxng/tutor7_2_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_2_2.xml validates
diff --git a/result/relaxng/tutor7_2_3 b/result/relaxng/tutor7_2_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_2_3
diff --git a/result/relaxng/tutor7_2_3.err b/result/relaxng/tutor7_2_3.err
new file mode 100644
index 0000000..baf1190
--- /dev/null
+++ b/result/relaxng/tutor7_2_3.err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_2_3.xml validates
diff --git a/result/relaxng/tutor7_2_4 b/result/relaxng/tutor7_2_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_2_4
diff --git a/result/relaxng/tutor7_2_4.err b/result/relaxng/tutor7_2_4.err
new file mode 100644
index 0000000..b1c22a8
--- /dev/null
+++ b/result/relaxng/tutor7_2_4.err
@@ -0,0 +1,4 @@
+./test/relaxng/tutor7_2_4.xml:1: element vector: Relax-NG validity error : failed to validate type double
+./test/relaxng/tutor7_2_4.xml:1: element vector: Relax-NG validity error : Error validating list
+./test/relaxng/tutor7_2_4.xml:1: element vector: Relax-NG validity error : Element vector failed to validate content
+./test/relaxng/tutor7_2_4.xml fails to validate
diff --git a/result/relaxng/tutor7_2_err b/result/relaxng/tutor7_2_err
new file mode 100644
index 0000000..cec5245
--- /dev/null
+++ b/result/relaxng/tutor7_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_2.rng validates
diff --git a/result/relaxng/tutor7_2_valid b/result/relaxng/tutor7_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_2_valid
diff --git a/result/relaxng/tutor7_3_1 b/result/relaxng/tutor7_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_3_1
diff --git a/result/relaxng/tutor7_3_1.err b/result/relaxng/tutor7_3_1.err
new file mode 100644
index 0000000..e096b53
--- /dev/null
+++ b/result/relaxng/tutor7_3_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_3_1.xml validates
diff --git a/result/relaxng/tutor7_3_2 b/result/relaxng/tutor7_3_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_3_2
diff --git a/result/relaxng/tutor7_3_2.err b/result/relaxng/tutor7_3_2.err
new file mode 100644
index 0000000..24e394d
--- /dev/null
+++ b/result/relaxng/tutor7_3_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_3_2.xml validates
diff --git a/result/relaxng/tutor7_3_3 b/result/relaxng/tutor7_3_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_3_3
diff --git a/result/relaxng/tutor7_3_3.err b/result/relaxng/tutor7_3_3.err
new file mode 100644
index 0000000..4919675
--- /dev/null
+++ b/result/relaxng/tutor7_3_3.err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_3_3.xml validates
diff --git a/result/relaxng/tutor7_3_4 b/result/relaxng/tutor7_3_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_3_4
diff --git a/result/relaxng/tutor7_3_4.err b/result/relaxng/tutor7_3_4.err
new file mode 100644
index 0000000..70531e4
--- /dev/null
+++ b/result/relaxng/tutor7_3_4.err
@@ -0,0 +1,4 @@
+./test/relaxng/tutor7_3_4.xml:1: element path: Relax-NG validity error : Extra data in list: 5.6
+./test/relaxng/tutor7_3_4.xml:1: element path: Relax-NG validity error : Error validating list
+./test/relaxng/tutor7_3_4.xml:1: element path: Relax-NG validity error : Element path failed to validate content
+./test/relaxng/tutor7_3_4.xml fails to validate
diff --git a/result/relaxng/tutor7_3_5 b/result/relaxng/tutor7_3_5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_3_5
diff --git a/result/relaxng/tutor7_3_5.err b/result/relaxng/tutor7_3_5.err
new file mode 100644
index 0000000..601a68b
--- /dev/null
+++ b/result/relaxng/tutor7_3_5.err
@@ -0,0 +1,4 @@
+./test/relaxng/tutor7_3_5.xml:1: element path: Relax-NG validity error : failed to validate type double
+./test/relaxng/tutor7_3_5.xml:1: element path: Relax-NG validity error : Error validating list
+./test/relaxng/tutor7_3_5.xml:1: element path: Relax-NG validity error : Element path failed to validate content
+./test/relaxng/tutor7_3_5.xml fails to validate
diff --git a/result/relaxng/tutor7_3_err b/result/relaxng/tutor7_3_err
new file mode 100644
index 0000000..9f1c5a3
--- /dev/null
+++ b/result/relaxng/tutor7_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor7_3.rng validates
diff --git a/result/relaxng/tutor7_3_valid b/result/relaxng/tutor7_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor7_3_valid
diff --git a/result/relaxng/tutor8_1_1 b/result/relaxng/tutor8_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_1_1
diff --git a/result/relaxng/tutor8_1_1.err b/result/relaxng/tutor8_1_1.err
new file mode 100644
index 0000000..578c396
--- /dev/null
+++ b/result/relaxng/tutor8_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor8_1_1.xml validates
diff --git a/result/relaxng/tutor8_1_2 b/result/relaxng/tutor8_1_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_1_2
diff --git a/result/relaxng/tutor8_1_2.err b/result/relaxng/tutor8_1_2.err
new file mode 100644
index 0000000..11c1611
--- /dev/null
+++ b/result/relaxng/tutor8_1_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor8_1_2.xml validates
diff --git a/result/relaxng/tutor8_1_err b/result/relaxng/tutor8_1_err
new file mode 100644
index 0000000..a4f6ce5
--- /dev/null
+++ b/result/relaxng/tutor8_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor8_1.rng validates
diff --git a/result/relaxng/tutor8_1_valid b/result/relaxng/tutor8_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_1_valid
diff --git a/result/relaxng/tutor8_2_1 b/result/relaxng/tutor8_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_2_1
diff --git a/result/relaxng/tutor8_2_1.err b/result/relaxng/tutor8_2_1.err
new file mode 100644
index 0000000..4c6b3d4
--- /dev/null
+++ b/result/relaxng/tutor8_2_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor8_2_1.xml validates
diff --git a/result/relaxng/tutor8_2_2 b/result/relaxng/tutor8_2_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_2_2
diff --git a/result/relaxng/tutor8_2_2.err b/result/relaxng/tutor8_2_2.err
new file mode 100644
index 0000000..7f959b9
--- /dev/null
+++ b/result/relaxng/tutor8_2_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor8_2_2.xml validates
diff --git a/result/relaxng/tutor8_2_3 b/result/relaxng/tutor8_2_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_2_3
diff --git a/result/relaxng/tutor8_2_3.err b/result/relaxng/tutor8_2_3.err
new file mode 100644
index 0000000..21abe93
--- /dev/null
+++ b/result/relaxng/tutor8_2_3.err
@@ -0,0 +1 @@
+./test/relaxng/tutor8_2_3.xml validates
diff --git a/result/relaxng/tutor8_2_4 b/result/relaxng/tutor8_2_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_2_4
diff --git a/result/relaxng/tutor8_2_4.err b/result/relaxng/tutor8_2_4.err
new file mode 100644
index 0000000..40a08b4
--- /dev/null
+++ b/result/relaxng/tutor8_2_4.err
@@ -0,0 +1,3 @@
+Relax-NG validity error : Extra element title in interleave
+./test/relaxng/tutor8_2_4.xml:5: element title: Relax-NG validity error : Element head failed to validate content
+./test/relaxng/tutor8_2_4.xml fails to validate
diff --git a/result/relaxng/tutor8_2_5 b/result/relaxng/tutor8_2_5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_2_5
diff --git a/result/relaxng/tutor8_2_5.err b/result/relaxng/tutor8_2_5.err
new file mode 100644
index 0000000..c215d76
--- /dev/null
+++ b/result/relaxng/tutor8_2_5.err
@@ -0,0 +1,4 @@
+./test/relaxng/tutor8_2_5.xml:1: element head: Relax-NG validity error : Expecting an element title, got nothing
+./test/relaxng/tutor8_2_5.xml:1: element head: Relax-NG validity error : Invalid sequence in interleave
+./test/relaxng/tutor8_2_5.xml:1: element head: Relax-NG validity error : Element head failed to validate content
+./test/relaxng/tutor8_2_5.xml fails to validate
diff --git a/result/relaxng/tutor8_2_6 b/result/relaxng/tutor8_2_6
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_2_6
diff --git a/result/relaxng/tutor8_2_6.err b/result/relaxng/tutor8_2_6.err
new file mode 100644
index 0000000..b959768
--- /dev/null
+++ b/result/relaxng/tutor8_2_6.err
@@ -0,0 +1,3 @@
+Relax-NG validity error : Extra element base in interleave
+./test/relaxng/tutor8_2_6.xml:4: element base: Relax-NG validity error : Element head failed to validate content
+./test/relaxng/tutor8_2_6.xml fails to validate
diff --git a/result/relaxng/tutor8_2_err b/result/relaxng/tutor8_2_err
new file mode 100644
index 0000000..fa3dcb2
--- /dev/null
+++ b/result/relaxng/tutor8_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor8_2.rng validates
diff --git a/result/relaxng/tutor8_2_valid b/result/relaxng/tutor8_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_2_valid
diff --git a/result/relaxng/tutor8_3_1 b/result/relaxng/tutor8_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_3_1
diff --git a/result/relaxng/tutor8_3_1.err b/result/relaxng/tutor8_3_1.err
new file mode 100644
index 0000000..9b637eb
--- /dev/null
+++ b/result/relaxng/tutor8_3_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor8_3_1.xml validates
diff --git a/result/relaxng/tutor8_3_err b/result/relaxng/tutor8_3_err
new file mode 100644
index 0000000..01c6184
--- /dev/null
+++ b/result/relaxng/tutor8_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor8_3.rng validates
diff --git a/result/relaxng/tutor8_3_valid b/result/relaxng/tutor8_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor8_3_valid
diff --git a/result/relaxng/tutor9_10_1 b/result/relaxng/tutor9_10_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_10_1
diff --git a/result/relaxng/tutor9_10_1.err b/result/relaxng/tutor9_10_1.err
new file mode 100644
index 0000000..7c6117f
--- /dev/null
+++ b/result/relaxng/tutor9_10_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_10_1.xml validates
diff --git a/result/relaxng/tutor9_10_err b/result/relaxng/tutor9_10_err
new file mode 100644
index 0000000..a8a7cb6
--- /dev/null
+++ b/result/relaxng/tutor9_10_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_10.rng validates
diff --git a/result/relaxng/tutor9_10_valid b/result/relaxng/tutor9_10_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_10_valid
diff --git a/result/relaxng/tutor9_11_1 b/result/relaxng/tutor9_11_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_11_1
diff --git a/result/relaxng/tutor9_11_1.err b/result/relaxng/tutor9_11_1.err
new file mode 100644
index 0000000..02a1f2a
--- /dev/null
+++ b/result/relaxng/tutor9_11_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_11_1.xml validates
diff --git a/result/relaxng/tutor9_11_err b/result/relaxng/tutor9_11_err
new file mode 100644
index 0000000..edd98bf
--- /dev/null
+++ b/result/relaxng/tutor9_11_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_11.rng validates
diff --git a/result/relaxng/tutor9_11_valid b/result/relaxng/tutor9_11_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_11_valid
diff --git a/result/relaxng/tutor9_12_1 b/result/relaxng/tutor9_12_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_12_1
diff --git a/result/relaxng/tutor9_12_1.err b/result/relaxng/tutor9_12_1.err
new file mode 100644
index 0000000..08f2a8a
--- /dev/null
+++ b/result/relaxng/tutor9_12_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_12_1.xml validates
diff --git a/result/relaxng/tutor9_12_err b/result/relaxng/tutor9_12_err
new file mode 100644
index 0000000..8881730
--- /dev/null
+++ b/result/relaxng/tutor9_12_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_12.rng validates
diff --git a/result/relaxng/tutor9_12_valid b/result/relaxng/tutor9_12_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_12_valid
diff --git a/result/relaxng/tutor9_1_1 b/result/relaxng/tutor9_1_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_1_1
diff --git a/result/relaxng/tutor9_1_1.err b/result/relaxng/tutor9_1_1.err
new file mode 100644
index 0000000..42d03d1
--- /dev/null
+++ b/result/relaxng/tutor9_1_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_1_1.xml validates
diff --git a/result/relaxng/tutor9_1_err b/result/relaxng/tutor9_1_err
new file mode 100644
index 0000000..22c5f37
--- /dev/null
+++ b/result/relaxng/tutor9_1_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_1.rng validates
diff --git a/result/relaxng/tutor9_1_valid b/result/relaxng/tutor9_1_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_1_valid
diff --git a/result/relaxng/tutor9_2_1 b/result/relaxng/tutor9_2_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_2_1
diff --git a/result/relaxng/tutor9_2_1.err b/result/relaxng/tutor9_2_1.err
new file mode 100644
index 0000000..fc174ff
--- /dev/null
+++ b/result/relaxng/tutor9_2_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_2_1.xml validates
diff --git a/result/relaxng/tutor9_2_2 b/result/relaxng/tutor9_2_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_2_2
diff --git a/result/relaxng/tutor9_2_2.err b/result/relaxng/tutor9_2_2.err
new file mode 100644
index 0000000..a07aa0d
--- /dev/null
+++ b/result/relaxng/tutor9_2_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_2_2.xml validates
diff --git a/result/relaxng/tutor9_2_err b/result/relaxng/tutor9_2_err
new file mode 100644
index 0000000..83c34ff
--- /dev/null
+++ b/result/relaxng/tutor9_2_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_2.rng validates
diff --git a/result/relaxng/tutor9_2_valid b/result/relaxng/tutor9_2_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_2_valid
diff --git a/result/relaxng/tutor9_3_1 b/result/relaxng/tutor9_3_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_3_1
diff --git a/result/relaxng/tutor9_3_1.err b/result/relaxng/tutor9_3_1.err
new file mode 100644
index 0000000..80ac24c
--- /dev/null
+++ b/result/relaxng/tutor9_3_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_3_1.xml validates
diff --git a/result/relaxng/tutor9_3_2 b/result/relaxng/tutor9_3_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_3_2
diff --git a/result/relaxng/tutor9_3_2.err b/result/relaxng/tutor9_3_2.err
new file mode 100644
index 0000000..a361c93
--- /dev/null
+++ b/result/relaxng/tutor9_3_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_3_2.xml validates
diff --git a/result/relaxng/tutor9_3_err b/result/relaxng/tutor9_3_err
new file mode 100644
index 0000000..0a82f8e
--- /dev/null
+++ b/result/relaxng/tutor9_3_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_3.rng validates
diff --git a/result/relaxng/tutor9_3_valid b/result/relaxng/tutor9_3_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_3_valid
diff --git a/result/relaxng/tutor9_4_1 b/result/relaxng/tutor9_4_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_4_1
diff --git a/result/relaxng/tutor9_4_1.err b/result/relaxng/tutor9_4_1.err
new file mode 100644
index 0000000..514eb98
--- /dev/null
+++ b/result/relaxng/tutor9_4_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_4_1.xml validates
diff --git a/result/relaxng/tutor9_4_2 b/result/relaxng/tutor9_4_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_4_2
diff --git a/result/relaxng/tutor9_4_2.err b/result/relaxng/tutor9_4_2.err
new file mode 100644
index 0000000..ba780dc
--- /dev/null
+++ b/result/relaxng/tutor9_4_2.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_4_2.xml validates
diff --git a/result/relaxng/tutor9_4_err b/result/relaxng/tutor9_4_err
new file mode 100644
index 0000000..42d087f
--- /dev/null
+++ b/result/relaxng/tutor9_4_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_4.rng validates
diff --git a/result/relaxng/tutor9_4_valid b/result/relaxng/tutor9_4_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_4_valid
diff --git a/result/relaxng/tutor9_5_1 b/result/relaxng/tutor9_5_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_5_1
diff --git a/result/relaxng/tutor9_5_1.err b/result/relaxng/tutor9_5_1.err
new file mode 100644
index 0000000..54f5d6a
--- /dev/null
+++ b/result/relaxng/tutor9_5_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_5_1.xml validates
diff --git a/result/relaxng/tutor9_5_2 b/result/relaxng/tutor9_5_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_5_2
diff --git a/result/relaxng/tutor9_5_2.err b/result/relaxng/tutor9_5_2.err
new file mode 100644
index 0000000..1384617
--- /dev/null
+++ b/result/relaxng/tutor9_5_2.err
@@ -0,0 +1,3 @@
+./test/relaxng/tutor9_5_2.xml:2: element card: Relax-NG validity error : Invalid sequence in interleave
+./test/relaxng/tutor9_5_2.xml:2: element card: Relax-NG validity error : Element card failed to validate attributes
+./test/relaxng/tutor9_5_2.xml fails to validate
diff --git a/result/relaxng/tutor9_5_3 b/result/relaxng/tutor9_5_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_5_3
diff --git a/result/relaxng/tutor9_5_3.err b/result/relaxng/tutor9_5_3.err
new file mode 100644
index 0000000..db5d0ae
--- /dev/null
+++ b/result/relaxng/tutor9_5_3.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor9_5_3.xml:2: element card: Relax-NG validity error : Invalid attribute error for element card
+./test/relaxng/tutor9_5_3.xml fails to validate
diff --git a/result/relaxng/tutor9_5_err b/result/relaxng/tutor9_5_err
new file mode 100644
index 0000000..e6ddd7a
--- /dev/null
+++ b/result/relaxng/tutor9_5_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_5.rng validates
diff --git a/result/relaxng/tutor9_5_valid b/result/relaxng/tutor9_5_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_5_valid
diff --git a/result/relaxng/tutor9_6.rng b/result/relaxng/tutor9_6.rng
new file mode 100644
index 0000000..17e6492
--- /dev/null
+++ b/result/relaxng/tutor9_6.rng
@@ -0,0 +1,24 @@
+<grammar>
+
+ <start>
+ <element name="addressBook">
+ <zeroOrMore>
+ <element name="card">
+ <ref name="card.attlist"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="card.attlist">
+ <group>
+ <attribute name="name">
+ <text/>
+ </attribute>
+ <attribute name="email">
+ <text/>
+ </attribute>
+ </group>
+ </define>
+
+</grammar>
diff --git a/result/relaxng/tutor9_6_1 b/result/relaxng/tutor9_6_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_6_1
diff --git a/result/relaxng/tutor9_6_1.err b/result/relaxng/tutor9_6_1.err
new file mode 100644
index 0000000..15724e5
--- /dev/null
+++ b/result/relaxng/tutor9_6_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_6_1.xml validates
diff --git a/result/relaxng/tutor9_6_2 b/result/relaxng/tutor9_6_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_6_2
diff --git a/result/relaxng/tutor9_6_2.err b/result/relaxng/tutor9_6_2.err
new file mode 100644
index 0000000..f7ec97f
--- /dev/null
+++ b/result/relaxng/tutor9_6_2.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor9_6_2.xml:2: element card: Relax-NG validity error : Element card failed to validate attributes
+./test/relaxng/tutor9_6_2.xml fails to validate
diff --git a/result/relaxng/tutor9_6_3 b/result/relaxng/tutor9_6_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_6_3
diff --git a/result/relaxng/tutor9_6_3.err b/result/relaxng/tutor9_6_3.err
new file mode 100644
index 0000000..5fe5f57
--- /dev/null
+++ b/result/relaxng/tutor9_6_3.err
@@ -0,0 +1,2 @@
+./test/relaxng/tutor9_6_3.xml:2: element card: Relax-NG validity error : Invalid attribute error for element card
+./test/relaxng/tutor9_6_3.xml fails to validate
diff --git a/result/relaxng/tutor9_6_err b/result/relaxng/tutor9_6_err
new file mode 100644
index 0000000..897a092
--- /dev/null
+++ b/result/relaxng/tutor9_6_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_6.rng validates
diff --git a/result/relaxng/tutor9_6_valid b/result/relaxng/tutor9_6_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_6_valid
diff --git a/result/relaxng/tutor9_7_1 b/result/relaxng/tutor9_7_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_7_1
diff --git a/result/relaxng/tutor9_7_1.err b/result/relaxng/tutor9_7_1.err
new file mode 100644
index 0000000..00d1502
--- /dev/null
+++ b/result/relaxng/tutor9_7_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_7_1.xml validates
diff --git a/result/relaxng/tutor9_7_err b/result/relaxng/tutor9_7_err
new file mode 100644
index 0000000..e171320
--- /dev/null
+++ b/result/relaxng/tutor9_7_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_7.rng validates
diff --git a/result/relaxng/tutor9_7_valid b/result/relaxng/tutor9_7_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_7_valid
diff --git a/result/relaxng/tutor9_8_1 b/result/relaxng/tutor9_8_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_8_1
diff --git a/result/relaxng/tutor9_8_1.err b/result/relaxng/tutor9_8_1.err
new file mode 100644
index 0000000..1849f8b
--- /dev/null
+++ b/result/relaxng/tutor9_8_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_8_1.xml validates
diff --git a/result/relaxng/tutor9_8_err b/result/relaxng/tutor9_8_err
new file mode 100644
index 0000000..41a926c
--- /dev/null
+++ b/result/relaxng/tutor9_8_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_8.rng validates
diff --git a/result/relaxng/tutor9_8_valid b/result/relaxng/tutor9_8_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_8_valid
diff --git a/result/relaxng/tutor9_9_1 b/result/relaxng/tutor9_9_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_9_1
diff --git a/result/relaxng/tutor9_9_1.err b/result/relaxng/tutor9_9_1.err
new file mode 100644
index 0000000..d88f01a
--- /dev/null
+++ b/result/relaxng/tutor9_9_1.err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_9_1.xml validates
diff --git a/result/relaxng/tutor9_9_err b/result/relaxng/tutor9_9_err
new file mode 100644
index 0000000..c4a95fd
--- /dev/null
+++ b/result/relaxng/tutor9_9_err
@@ -0,0 +1 @@
+./test/relaxng/tutor9_9.rng validates
diff --git a/result/relaxng/tutor9_9_valid b/result/relaxng/tutor9_9_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutor9_9_valid
diff --git a/result/relaxng/tutorA_err b/result/relaxng/tutorA_err
new file mode 100644
index 0000000..b4ab892
--- /dev/null
+++ b/result/relaxng/tutorA_err
@@ -0,0 +1 @@
+./test/relaxng/tutorA.rng validates
diff --git a/result/relaxng/tutorA_valid b/result/relaxng/tutorA_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/tutorA_valid
diff --git a/result/schemas/all1_0_0 b/result/schemas/all1_0_0
new file mode 100644
index 0000000..327cec7
--- /dev/null
+++ b/result/schemas/all1_0_0
@@ -0,0 +1 @@
+./test/schemas/all1_0.xml validates
diff --git a/result/schemas/all1_0_0.err b/result/schemas/all1_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all1_0_0.err
diff --git a/result/schemas/all_0_0 b/result/schemas/all_0_0
new file mode 100644
index 0000000..08eb108
--- /dev/null
+++ b/result/schemas/all_0_0
@@ -0,0 +1 @@
+./test/schemas/all_0.xml validates
diff --git a/result/schemas/all_0_0.err b/result/schemas/all_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_0_0.err
diff --git a/result/schemas/all_0_1 b/result/schemas/all_0_1
new file mode 100644
index 0000000..eaf4a1a
--- /dev/null
+++ b/result/schemas/all_0_1
@@ -0,0 +1 @@
+./test/schemas/all_1.xml validates
diff --git a/result/schemas/all_0_1.err b/result/schemas/all_0_1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_0_1.err
diff --git a/result/schemas/all_0_2 b/result/schemas/all_0_2
new file mode 100644
index 0000000..62af901
--- /dev/null
+++ b/result/schemas/all_0_2
@@ -0,0 +1 @@
+./test/schemas/all_2.xml validates
diff --git a/result/schemas/all_0_2.err b/result/schemas/all_0_2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_0_2.err
diff --git a/result/schemas/all_0_3 b/result/schemas/all_0_3
new file mode 100644
index 0000000..55a2a4d
--- /dev/null
+++ b/result/schemas/all_0_3
@@ -0,0 +1 @@
+./test/schemas/all_3.xml fails to validate
diff --git a/result/schemas/all_0_3.err b/result/schemas/all_0_3.err
new file mode 100644
index 0000000..ddc3785
--- /dev/null
+++ b/result/schemas/all_0_3.err
@@ -0,0 +1 @@
+./test/schemas/all_3.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_0_4 b/result/schemas/all_0_4
new file mode 100644
index 0000000..cdd8824
--- /dev/null
+++ b/result/schemas/all_0_4
@@ -0,0 +1 @@
+./test/schemas/all_4.xml fails to validate
diff --git a/result/schemas/all_0_4.err b/result/schemas/all_0_4.err
new file mode 100644
index 0000000..c5d8761
--- /dev/null
+++ b/result/schemas/all_0_4.err
@@ -0,0 +1 @@
+./test/schemas/all_4.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_0_5 b/result/schemas/all_0_5
new file mode 100644
index 0000000..f939f65
--- /dev/null
+++ b/result/schemas/all_0_5
@@ -0,0 +1 @@
+./test/schemas/all_5.xml fails to validate
diff --git a/result/schemas/all_0_5.err b/result/schemas/all_0_5.err
new file mode 100644
index 0000000..544a9a5
--- /dev/null
+++ b/result/schemas/all_0_5.err
@@ -0,0 +1 @@
+./test/schemas/all_5.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_0_6 b/result/schemas/all_0_6
new file mode 100644
index 0000000..c3705c7
--- /dev/null
+++ b/result/schemas/all_0_6
@@ -0,0 +1 @@
+./test/schemas/all_6.xml fails to validate
diff --git a/result/schemas/all_0_6.err b/result/schemas/all_0_6.err
new file mode 100644
index 0000000..f38f778
--- /dev/null
+++ b/result/schemas/all_0_6.err
@@ -0,0 +1 @@
+./test/schemas/all_6.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_0_7 b/result/schemas/all_0_7
new file mode 100644
index 0000000..d144d2d
--- /dev/null
+++ b/result/schemas/all_0_7
@@ -0,0 +1 @@
+./test/schemas/all_7.xml fails to validate
diff --git a/result/schemas/all_0_7.err b/result/schemas/all_0_7.err
new file mode 100644
index 0000000..5e40df0
--- /dev/null
+++ b/result/schemas/all_0_7.err
@@ -0,0 +1 @@
+./test/schemas/all_7.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_1_0 b/result/schemas/all_1_0
new file mode 100644
index 0000000..08eb108
--- /dev/null
+++ b/result/schemas/all_1_0
@@ -0,0 +1 @@
+./test/schemas/all_0.xml validates
diff --git a/result/schemas/all_1_0.err b/result/schemas/all_1_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_1_0.err
diff --git a/result/schemas/all_1_1 b/result/schemas/all_1_1
new file mode 100644
index 0000000..eaf4a1a
--- /dev/null
+++ b/result/schemas/all_1_1
@@ -0,0 +1 @@
+./test/schemas/all_1.xml validates
diff --git a/result/schemas/all_1_1.err b/result/schemas/all_1_1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_1_1.err
diff --git a/result/schemas/all_1_2 b/result/schemas/all_1_2
new file mode 100644
index 0000000..62af901
--- /dev/null
+++ b/result/schemas/all_1_2
@@ -0,0 +1 @@
+./test/schemas/all_2.xml validates
diff --git a/result/schemas/all_1_2.err b/result/schemas/all_1_2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_1_2.err
diff --git a/result/schemas/all_1_3 b/result/schemas/all_1_3
new file mode 100644
index 0000000..8186e82
--- /dev/null
+++ b/result/schemas/all_1_3
@@ -0,0 +1 @@
+./test/schemas/all_3.xml validates
diff --git a/result/schemas/all_1_3.err b/result/schemas/all_1_3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_1_3.err
diff --git a/result/schemas/all_1_4 b/result/schemas/all_1_4
new file mode 100644
index 0000000..2eb22ae
--- /dev/null
+++ b/result/schemas/all_1_4
@@ -0,0 +1 @@
+./test/schemas/all_4.xml validates
diff --git a/result/schemas/all_1_4.err b/result/schemas/all_1_4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_1_4.err
diff --git a/result/schemas/all_1_5 b/result/schemas/all_1_5
new file mode 100644
index 0000000..f939f65
--- /dev/null
+++ b/result/schemas/all_1_5
@@ -0,0 +1 @@
+./test/schemas/all_5.xml fails to validate
diff --git a/result/schemas/all_1_5.err b/result/schemas/all_1_5.err
new file mode 100644
index 0000000..544a9a5
--- /dev/null
+++ b/result/schemas/all_1_5.err
@@ -0,0 +1 @@
+./test/schemas/all_5.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_1_6 b/result/schemas/all_1_6
new file mode 100644
index 0000000..d4a9594
--- /dev/null
+++ b/result/schemas/all_1_6
@@ -0,0 +1 @@
+./test/schemas/all_6.xml validates
diff --git a/result/schemas/all_1_6.err b/result/schemas/all_1_6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_1_6.err
diff --git a/result/schemas/all_1_7 b/result/schemas/all_1_7
new file mode 100644
index 0000000..6ad4fc6
--- /dev/null
+++ b/result/schemas/all_1_7
@@ -0,0 +1 @@
+./test/schemas/all_7.xml validates
diff --git a/result/schemas/all_1_7.err b/result/schemas/all_1_7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_1_7.err
diff --git a/result/schemas/all_2_0 b/result/schemas/all_2_0
new file mode 100644
index 0000000..77066e0
--- /dev/null
+++ b/result/schemas/all_2_0
@@ -0,0 +1 @@
+./test/schemas/all_0.xml fails to validate
diff --git a/result/schemas/all_2_0.err b/result/schemas/all_2_0.err
new file mode 100644
index 0000000..8416124
--- /dev/null
+++ b/result/schemas/all_2_0.err
@@ -0,0 +1 @@
+./test/schemas/all_0.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_2_1 b/result/schemas/all_2_1
new file mode 100644
index 0000000..cbda1fe
--- /dev/null
+++ b/result/schemas/all_2_1
@@ -0,0 +1 @@
+./test/schemas/all_1.xml fails to validate
diff --git a/result/schemas/all_2_1.err b/result/schemas/all_2_1.err
new file mode 100644
index 0000000..129595f
--- /dev/null
+++ b/result/schemas/all_2_1.err
@@ -0,0 +1 @@
+./test/schemas/all_1.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_2_2 b/result/schemas/all_2_2
new file mode 100644
index 0000000..27db643
--- /dev/null
+++ b/result/schemas/all_2_2
@@ -0,0 +1 @@
+./test/schemas/all_2.xml fails to validate
diff --git a/result/schemas/all_2_2.err b/result/schemas/all_2_2.err
new file mode 100644
index 0000000..c3e0482
--- /dev/null
+++ b/result/schemas/all_2_2.err
@@ -0,0 +1 @@
+./test/schemas/all_2.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_2_3 b/result/schemas/all_2_3
new file mode 100644
index 0000000..8186e82
--- /dev/null
+++ b/result/schemas/all_2_3
@@ -0,0 +1 @@
+./test/schemas/all_3.xml validates
diff --git a/result/schemas/all_2_3.err b/result/schemas/all_2_3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_2_3.err
diff --git a/result/schemas/all_2_4 b/result/schemas/all_2_4
new file mode 100644
index 0000000..cdd8824
--- /dev/null
+++ b/result/schemas/all_2_4
@@ -0,0 +1 @@
+./test/schemas/all_4.xml fails to validate
diff --git a/result/schemas/all_2_4.err b/result/schemas/all_2_4.err
new file mode 100644
index 0000000..c5d8761
--- /dev/null
+++ b/result/schemas/all_2_4.err
@@ -0,0 +1 @@
+./test/schemas/all_4.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_2_5 b/result/schemas/all_2_5
new file mode 100644
index 0000000..f939f65
--- /dev/null
+++ b/result/schemas/all_2_5
@@ -0,0 +1 @@
+./test/schemas/all_5.xml fails to validate
diff --git a/result/schemas/all_2_5.err b/result/schemas/all_2_5.err
new file mode 100644
index 0000000..544a9a5
--- /dev/null
+++ b/result/schemas/all_2_5.err
@@ -0,0 +1 @@
+./test/schemas/all_5.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/all_2_6 b/result/schemas/all_2_6
new file mode 100644
index 0000000..d4a9594
--- /dev/null
+++ b/result/schemas/all_2_6
@@ -0,0 +1 @@
+./test/schemas/all_6.xml validates
diff --git a/result/schemas/all_2_6.err b/result/schemas/all_2_6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_2_6.err
diff --git a/result/schemas/all_2_7 b/result/schemas/all_2_7
new file mode 100644
index 0000000..6ad4fc6
--- /dev/null
+++ b/result/schemas/all_2_7
@@ -0,0 +1 @@
+./test/schemas/all_7.xml validates
diff --git a/result/schemas/all_2_7.err b/result/schemas/all_2_7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/all_2_7.err
diff --git a/result/schemas/attr0_0_0 b/result/schemas/attr0_0_0
new file mode 100644
index 0000000..d054be5
--- /dev/null
+++ b/result/schemas/attr0_0_0
@@ -0,0 +1 @@
+./test/schemas/attr0_0.xml validates
diff --git a/result/schemas/attr0_0_0.err b/result/schemas/attr0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/attr0_0_0.err
diff --git a/result/schemas/choice_0_0 b/result/schemas/choice_0_0
new file mode 100644
index 0000000..eda062e
--- /dev/null
+++ b/result/schemas/choice_0_0
@@ -0,0 +1 @@
+./test/schemas/choice_0.xml validates
diff --git a/result/schemas/choice_0_0.err b/result/schemas/choice_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_0_0.err
diff --git a/result/schemas/choice_0_1 b/result/schemas/choice_0_1
new file mode 100644
index 0000000..e4338de
--- /dev/null
+++ b/result/schemas/choice_0_1
@@ -0,0 +1 @@
+./test/schemas/choice_1.xml validates
diff --git a/result/schemas/choice_0_1.err b/result/schemas/choice_0_1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_0_1.err
diff --git a/result/schemas/choice_0_2 b/result/schemas/choice_0_2
new file mode 100644
index 0000000..4071315
--- /dev/null
+++ b/result/schemas/choice_0_2
@@ -0,0 +1 @@
+./test/schemas/choice_2.xml fails to validate
diff --git a/result/schemas/choice_0_2.err b/result/schemas/choice_0_2.err
new file mode 100644
index 0000000..6abd515
--- /dev/null
+++ b/result/schemas/choice_0_2.err
@@ -0,0 +1 @@
+./test/schemas/choice_2.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_0_3 b/result/schemas/choice_0_3
new file mode 100644
index 0000000..bef604b
--- /dev/null
+++ b/result/schemas/choice_0_3
@@ -0,0 +1 @@
+./test/schemas/choice_3.xml fails to validate
diff --git a/result/schemas/choice_0_3.err b/result/schemas/choice_0_3.err
new file mode 100644
index 0000000..149f969
--- /dev/null
+++ b/result/schemas/choice_0_3.err
@@ -0,0 +1 @@
+./test/schemas/choice_3.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_0_4 b/result/schemas/choice_0_4
new file mode 100644
index 0000000..0643e3b
--- /dev/null
+++ b/result/schemas/choice_0_4
@@ -0,0 +1 @@
+./test/schemas/choice_4.xml fails to validate
diff --git a/result/schemas/choice_0_4.err b/result/schemas/choice_0_4.err
new file mode 100644
index 0000000..8843768
--- /dev/null
+++ b/result/schemas/choice_0_4.err
@@ -0,0 +1 @@
+./test/schemas/choice_4.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_0_5 b/result/schemas/choice_0_5
new file mode 100644
index 0000000..acaaddd
--- /dev/null
+++ b/result/schemas/choice_0_5
@@ -0,0 +1 @@
+./test/schemas/choice_5.xml fails to validate
diff --git a/result/schemas/choice_0_5.err b/result/schemas/choice_0_5.err
new file mode 100644
index 0000000..8861e99
--- /dev/null
+++ b/result/schemas/choice_0_5.err
@@ -0,0 +1 @@
+./test/schemas/choice_5.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_0_6 b/result/schemas/choice_0_6
new file mode 100644
index 0000000..ee4ceae
--- /dev/null
+++ b/result/schemas/choice_0_6
@@ -0,0 +1 @@
+./test/schemas/choice_6.xml fails to validate
diff --git a/result/schemas/choice_0_6.err b/result/schemas/choice_0_6.err
new file mode 100644
index 0000000..ffa476a
--- /dev/null
+++ b/result/schemas/choice_0_6.err
@@ -0,0 +1 @@
+./test/schemas/choice_6.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_1_0 b/result/schemas/choice_1_0
new file mode 100644
index 0000000..eda062e
--- /dev/null
+++ b/result/schemas/choice_1_0
@@ -0,0 +1 @@
+./test/schemas/choice_0.xml validates
diff --git a/result/schemas/choice_1_0.err b/result/schemas/choice_1_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_1_0.err
diff --git a/result/schemas/choice_1_1 b/result/schemas/choice_1_1
new file mode 100644
index 0000000..e4338de
--- /dev/null
+++ b/result/schemas/choice_1_1
@@ -0,0 +1 @@
+./test/schemas/choice_1.xml validates
diff --git a/result/schemas/choice_1_1.err b/result/schemas/choice_1_1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_1_1.err
diff --git a/result/schemas/choice_1_2 b/result/schemas/choice_1_2
new file mode 100644
index 0000000..4071315
--- /dev/null
+++ b/result/schemas/choice_1_2
@@ -0,0 +1 @@
+./test/schemas/choice_2.xml fails to validate
diff --git a/result/schemas/choice_1_2.err b/result/schemas/choice_1_2.err
new file mode 100644
index 0000000..6abd515
--- /dev/null
+++ b/result/schemas/choice_1_2.err
@@ -0,0 +1 @@
+./test/schemas/choice_2.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_1_3 b/result/schemas/choice_1_3
new file mode 100644
index 0000000..bef604b
--- /dev/null
+++ b/result/schemas/choice_1_3
@@ -0,0 +1 @@
+./test/schemas/choice_3.xml fails to validate
diff --git a/result/schemas/choice_1_3.err b/result/schemas/choice_1_3.err
new file mode 100644
index 0000000..149f969
--- /dev/null
+++ b/result/schemas/choice_1_3.err
@@ -0,0 +1 @@
+./test/schemas/choice_3.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_1_4 b/result/schemas/choice_1_4
new file mode 100644
index 0000000..36b3827
--- /dev/null
+++ b/result/schemas/choice_1_4
@@ -0,0 +1 @@
+./test/schemas/choice_4.xml validates
diff --git a/result/schemas/choice_1_4.err b/result/schemas/choice_1_4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_1_4.err
diff --git a/result/schemas/choice_1_5 b/result/schemas/choice_1_5
new file mode 100644
index 0000000..acaaddd
--- /dev/null
+++ b/result/schemas/choice_1_5
@@ -0,0 +1 @@
+./test/schemas/choice_5.xml fails to validate
diff --git a/result/schemas/choice_1_5.err b/result/schemas/choice_1_5.err
new file mode 100644
index 0000000..8861e99
--- /dev/null
+++ b/result/schemas/choice_1_5.err
@@ -0,0 +1 @@
+./test/schemas/choice_5.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_1_6 b/result/schemas/choice_1_6
new file mode 100644
index 0000000..ee4ceae
--- /dev/null
+++ b/result/schemas/choice_1_6
@@ -0,0 +1 @@
+./test/schemas/choice_6.xml fails to validate
diff --git a/result/schemas/choice_1_6.err b/result/schemas/choice_1_6.err
new file mode 100644
index 0000000..ffa476a
--- /dev/null
+++ b/result/schemas/choice_1_6.err
@@ -0,0 +1 @@
+./test/schemas/choice_6.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_2_0 b/result/schemas/choice_2_0
new file mode 100644
index 0000000..eda062e
--- /dev/null
+++ b/result/schemas/choice_2_0
@@ -0,0 +1 @@
+./test/schemas/choice_0.xml validates
diff --git a/result/schemas/choice_2_0.err b/result/schemas/choice_2_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_2_0.err
diff --git a/result/schemas/choice_2_1 b/result/schemas/choice_2_1
new file mode 100644
index 0000000..e4338de
--- /dev/null
+++ b/result/schemas/choice_2_1
@@ -0,0 +1 @@
+./test/schemas/choice_1.xml validates
diff --git a/result/schemas/choice_2_1.err b/result/schemas/choice_2_1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_2_1.err
diff --git a/result/schemas/choice_2_2 b/result/schemas/choice_2_2
new file mode 100644
index 0000000..c58e154
--- /dev/null
+++ b/result/schemas/choice_2_2
@@ -0,0 +1 @@
+./test/schemas/choice_2.xml validates
diff --git a/result/schemas/choice_2_2.err b/result/schemas/choice_2_2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_2_2.err
diff --git a/result/schemas/choice_2_3 b/result/schemas/choice_2_3
new file mode 100644
index 0000000..1058f7e
--- /dev/null
+++ b/result/schemas/choice_2_3
@@ -0,0 +1 @@
+./test/schemas/choice_3.xml validates
diff --git a/result/schemas/choice_2_3.err b/result/schemas/choice_2_3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_2_3.err
diff --git a/result/schemas/choice_2_4 b/result/schemas/choice_2_4
new file mode 100644
index 0000000..0643e3b
--- /dev/null
+++ b/result/schemas/choice_2_4
@@ -0,0 +1 @@
+./test/schemas/choice_4.xml fails to validate
diff --git a/result/schemas/choice_2_4.err b/result/schemas/choice_2_4.err
new file mode 100644
index 0000000..8843768
--- /dev/null
+++ b/result/schemas/choice_2_4.err
@@ -0,0 +1 @@
+./test/schemas/choice_4.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/choice_2_5 b/result/schemas/choice_2_5
new file mode 100644
index 0000000..67e79ba
--- /dev/null
+++ b/result/schemas/choice_2_5
@@ -0,0 +1 @@
+./test/schemas/choice_5.xml validates
diff --git a/result/schemas/choice_2_5.err b/result/schemas/choice_2_5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/choice_2_5.err
diff --git a/result/schemas/choice_2_6 b/result/schemas/choice_2_6
new file mode 100644
index 0000000..ee4ceae
--- /dev/null
+++ b/result/schemas/choice_2_6
@@ -0,0 +1 @@
+./test/schemas/choice_6.xml fails to validate
diff --git a/result/schemas/choice_2_6.err b/result/schemas/choice_2_6.err
new file mode 100644
index 0000000..ffa476a
--- /dev/null
+++ b/result/schemas/choice_2_6.err
@@ -0,0 +1 @@
+./test/schemas/choice_6.xml:1: element doc: Schemas validity error : Element doc content check failed
diff --git a/result/schemas/date_0_0 b/result/schemas/date_0_0
new file mode 100644
index 0000000..2554d30
--- /dev/null
+++ b/result/schemas/date_0_0
@@ -0,0 +1 @@
+./test/schemas/date_0.xml validates
diff --git a/result/schemas/date_0_0.err b/result/schemas/date_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/date_0_0.err
diff --git a/result/schemas/deter0_0_0 b/result/schemas/deter0_0_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/deter0_0_0
diff --git a/result/schemas/deter0_0_0.err b/result/schemas/deter0_0_0.err
new file mode 100644
index 0000000..cc42c3b
--- /dev/null
+++ b/result/schemas/deter0_0_0.err
@@ -0,0 +1 @@
+./test/schemas/deter0_0.xsd:5: element element: Schemas parser error : Content model of book is not determinist:
diff --git a/result/schemas/dur_0_0 b/result/schemas/dur_0_0
new file mode 100644
index 0000000..5b3a2c9
--- /dev/null
+++ b/result/schemas/dur_0_0
@@ -0,0 +1 @@
+./test/schemas/dur_0.xml validates
diff --git a/result/schemas/dur_0_0.err b/result/schemas/dur_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/dur_0_0.err
diff --git a/result/schemas/elem0_0_0 b/result/schemas/elem0_0_0
new file mode 100644
index 0000000..0ab06b4
--- /dev/null
+++ b/result/schemas/elem0_0_0
@@ -0,0 +1 @@
+./test/schemas/elem0_0.xml validates
diff --git a/result/schemas/elem0_0_0.err b/result/schemas/elem0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/elem0_0_0.err
diff --git a/result/schemas/empty_0_0 b/result/schemas/empty_0_0
new file mode 100644
index 0000000..88fc52b
--- /dev/null
+++ b/result/schemas/empty_0_0
@@ -0,0 +1 @@
+./test/schemas/empty_0.xml validates
diff --git a/result/schemas/empty_0_0.err b/result/schemas/empty_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/empty_0_0.err
diff --git a/result/schemas/empty_1_0 b/result/schemas/empty_1_0
new file mode 100644
index 0000000..88fc52b
--- /dev/null
+++ b/result/schemas/empty_1_0
@@ -0,0 +1 @@
+./test/schemas/empty_0.xml validates
diff --git a/result/schemas/empty_1_0.err b/result/schemas/empty_1_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/empty_1_0.err
diff --git a/result/schemas/extension0_0_0 b/result/schemas/extension0_0_0
new file mode 100644
index 0000000..d3dca7b
--- /dev/null
+++ b/result/schemas/extension0_0_0
@@ -0,0 +1 @@
+./test/schemas/extension0_0.xml validates
diff --git a/result/schemas/extension0_0_0.err b/result/schemas/extension0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/extension0_0_0.err
diff --git a/result/schemas/extension1_0_0 b/result/schemas/extension1_0_0
new file mode 100644
index 0000000..23da9ea
--- /dev/null
+++ b/result/schemas/extension1_0_0
@@ -0,0 +1 @@
+./test/schemas/extension1_0.xml validates
diff --git a/result/schemas/extension1_0_0.err b/result/schemas/extension1_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/extension1_0_0.err
diff --git a/result/schemas/extension1_0_1 b/result/schemas/extension1_0_1
new file mode 100644
index 0000000..4a47b86
--- /dev/null
+++ b/result/schemas/extension1_0_1
@@ -0,0 +1 @@
+./test/schemas/extension1_1.xml fails to validate
diff --git a/result/schemas/extension1_0_1.err b/result/schemas/extension1_0_1.err
new file mode 100644
index 0000000..7997de7
--- /dev/null
+++ b/result/schemas/extension1_0_1.err
@@ -0,0 +1 @@
+./test/schemas/extension1_1.xml:1: element title: Schemas validity error : Attribute langue on title is unknown
diff --git a/result/schemas/extension1_0_2 b/result/schemas/extension1_0_2
new file mode 100644
index 0000000..fc8eccc
--- /dev/null
+++ b/result/schemas/extension1_0_2
@@ -0,0 +1 @@
+./test/schemas/extension1_2.xml fails to validate
diff --git a/result/schemas/extension1_0_2.err b/result/schemas/extension1_0_2.err
new file mode 100644
index 0000000..516d200
--- /dev/null
+++ b/result/schemas/extension1_0_2.err
@@ -0,0 +1 @@
+./test/schemas/extension1_2.xml:1: element title: Schemas validity error : Element title: child salut should not be present
diff --git a/result/schemas/group0_0_0 b/result/schemas/group0_0_0
new file mode 100644
index 0000000..b5f479c
--- /dev/null
+++ b/result/schemas/group0_0_0
@@ -0,0 +1 @@
+./test/schemas/group0_0.xml fails to validate
diff --git a/result/schemas/group0_0_0.err b/result/schemas/group0_0_0.err
new file mode 100644
index 0000000..b7b5302
--- /dev/null
+++ b/result/schemas/group0_0_0.err
@@ -0,0 +1 @@
+./test/schemas/group0_0.xml:1: element author: Schemas validity error : Element author content check failed
diff --git a/result/schemas/hexbinary_0_0 b/result/schemas/hexbinary_0_0
new file mode 100644
index 0000000..783bab4
--- /dev/null
+++ b/result/schemas/hexbinary_0_0
@@ -0,0 +1 @@
+./test/schemas/hexbinary_0.xml validates
diff --git a/result/schemas/hexbinary_0_0.err b/result/schemas/hexbinary_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/hexbinary_0_0.err
diff --git a/result/schemas/hexbinary_0_1 b/result/schemas/hexbinary_0_1
new file mode 100644
index 0000000..37b10d1
--- /dev/null
+++ b/result/schemas/hexbinary_0_1
@@ -0,0 +1 @@
+./test/schemas/hexbinary_1.xml fails to validate
diff --git a/result/schemas/hexbinary_0_1.err b/result/schemas/hexbinary_0_1.err
new file mode 100644
index 0000000..c134ddb
--- /dev/null
+++ b/result/schemas/hexbinary_0_1.err
@@ -0,0 +1,9 @@
+./test/schemas/hexbinary_1.xml:4: element hex: Schemas validity error : Element hex: failed to validate basic type hexBinary
+./test/schemas/hexbinary_1.xml:5: element hex: Schemas validity error : Element hex: failed to validate basic type hexBinary
+./test/schemas/hexbinary_1.xml:6: element hex: Schemas validity error : Element hex: failed to validate basic type hexBinary
+./test/schemas/hexbinary_1.xml:7: element hex: Schemas validity error : Element hex: failed to validate basic type hexBinary
+./test/schemas/hexbinary_1.xml:8: element hex: Schemas validity error : Element hex: failed to validate basic type hexBinary
+./test/schemas/hexbinary_1.xml:9: element hex: Schemas validity error : Element hex: failed to validate basic type hexBinary
+./test/schemas/hexbinary_1.xml:11: element hex2: Schemas validity error : Failed to validate type with facet maxLength
+./test/schemas/hexbinary_1.xml:13: element hex3: Schemas validity error : Failed to validate type with facet length
+./test/schemas/hexbinary_1.xml:14: element hex3: Schemas validity error : Failed to validate type with facet length
diff --git a/result/schemas/import0_0_0 b/result/schemas/import0_0_0
new file mode 100644
index 0000000..1231800
--- /dev/null
+++ b/result/schemas/import0_0_0
@@ -0,0 +1 @@
+./test/schemas/import0_0.xml validates
diff --git a/result/schemas/import0_0_0.err b/result/schemas/import0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/import0_0_0.err
diff --git a/result/schemas/item_0_0 b/result/schemas/item_0_0
new file mode 100644
index 0000000..90fa561
--- /dev/null
+++ b/result/schemas/item_0_0
@@ -0,0 +1 @@
+./test/schemas/item_0.xml validates
diff --git a/result/schemas/item_0_0.err b/result/schemas/item_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/item_0_0.err
diff --git a/result/schemas/item_1_0 b/result/schemas/item_1_0
new file mode 100644
index 0000000..90fa561
--- /dev/null
+++ b/result/schemas/item_1_0
@@ -0,0 +1 @@
+./test/schemas/item_0.xml validates
diff --git a/result/schemas/item_1_0.err b/result/schemas/item_1_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/item_1_0.err
diff --git a/result/schemas/length1_0_0 b/result/schemas/length1_0_0
new file mode 100644
index 0000000..58cbe24
--- /dev/null
+++ b/result/schemas/length1_0_0
@@ -0,0 +1 @@
+./test/schemas/length1_0.xml validates
diff --git a/result/schemas/length1_0_0.err b/result/schemas/length1_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/length1_0_0.err
diff --git a/result/schemas/length2_0_0 b/result/schemas/length2_0_0
new file mode 100644
index 0000000..4fd27d6
--- /dev/null
+++ b/result/schemas/length2_0_0
@@ -0,0 +1 @@
+./test/schemas/length2_0.xml validates
diff --git a/result/schemas/length2_0_0.err b/result/schemas/length2_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/length2_0_0.err
diff --git a/result/schemas/length3_0_0 b/result/schemas/length3_0_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/length3_0_0
diff --git a/result/schemas/length3_0_0.err b/result/schemas/length3_0_0.err
new file mode 100644
index 0000000..048a3c6
--- /dev/null
+++ b/result/schemas/length3_0_0.err
@@ -0,0 +1 @@
+./test/schemas/length3_0.xsd:5: element element: Schemas parser error : Schemas: element size type non-positive-integer not found
diff --git a/result/schemas/list0_0_0 b/result/schemas/list0_0_0
new file mode 100644
index 0000000..37a2cdc
--- /dev/null
+++ b/result/schemas/list0_0_0
@@ -0,0 +1 @@
+./test/schemas/list0_0.xml validates
diff --git a/result/schemas/list0_0_0.err b/result/schemas/list0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/list0_0_0.err
diff --git a/result/schemas/list0_0_1 b/result/schemas/list0_0_1
new file mode 100644
index 0000000..da757f6
--- /dev/null
+++ b/result/schemas/list0_0_1
@@ -0,0 +1 @@
+./test/schemas/list0_1.xml fails to validate
diff --git a/result/schemas/list0_0_1.err b/result/schemas/list0_0_1.err
new file mode 100644
index 0000000..d82a4dc
--- /dev/null
+++ b/result/schemas/list0_0_1.err
@@ -0,0 +1 @@
+./test/schemas/list0_1.xml:1: element test: Schemas validity error : Element test content check failed
diff --git a/result/schemas/list0_0_2 b/result/schemas/list0_0_2
new file mode 100644
index 0000000..0ec6237
--- /dev/null
+++ b/result/schemas/list0_0_2
@@ -0,0 +1 @@
+./test/schemas/list0_2.xml validates
diff --git a/result/schemas/list0_0_2.err b/result/schemas/list0_0_2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/list0_0_2.err
diff --git a/result/schemas/list0_1_0 b/result/schemas/list0_1_0
new file mode 100644
index 0000000..2cf9806
--- /dev/null
+++ b/result/schemas/list0_1_0
@@ -0,0 +1 @@
+./test/schemas/list0_0.xml fails to validate
diff --git a/result/schemas/list0_1_0.err b/result/schemas/list0_1_0.err
new file mode 100644
index 0000000..0a29e1d
--- /dev/null
+++ b/result/schemas/list0_1_0.err
@@ -0,0 +1 @@
+./test/schemas/list0_0.xml:1: element test: Schemas validity error : Element test content check failed
diff --git a/result/schemas/list0_1_1 b/result/schemas/list0_1_1
new file mode 100644
index 0000000..da757f6
--- /dev/null
+++ b/result/schemas/list0_1_1
@@ -0,0 +1 @@
+./test/schemas/list0_1.xml fails to validate
diff --git a/result/schemas/list0_1_1.err b/result/schemas/list0_1_1.err
new file mode 100644
index 0000000..d82a4dc
--- /dev/null
+++ b/result/schemas/list0_1_1.err
@@ -0,0 +1 @@
+./test/schemas/list0_1.xml:1: element test: Schemas validity error : Element test content check failed
diff --git a/result/schemas/list0_1_2 b/result/schemas/list0_1_2
new file mode 100644
index 0000000..0ec6237
--- /dev/null
+++ b/result/schemas/list0_1_2
@@ -0,0 +1 @@
+./test/schemas/list0_2.xml validates
diff --git a/result/schemas/list0_1_2.err b/result/schemas/list0_1_2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/list0_1_2.err
diff --git a/result/schemas/mixed0_0_0 b/result/schemas/mixed0_0_0
new file mode 100644
index 0000000..bd2f0ed
--- /dev/null
+++ b/result/schemas/mixed0_0_0
@@ -0,0 +1 @@
+./test/schemas/mixed0_0.xml validates
diff --git a/result/schemas/mixed0_0_0.err b/result/schemas/mixed0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/mixed0_0_0.err
diff --git a/result/schemas/mixed1_0_0 b/result/schemas/mixed1_0_0
new file mode 100644
index 0000000..e9a6b01
--- /dev/null
+++ b/result/schemas/mixed1_0_0
@@ -0,0 +1 @@
+./test/schemas/mixed1_0.xml validates
diff --git a/result/schemas/mixed1_0_0.err b/result/schemas/mixed1_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/mixed1_0_0.err
diff --git a/result/schemas/ns0_0_0 b/result/schemas/ns0_0_0
new file mode 100644
index 0000000..44d1d44
--- /dev/null
+++ b/result/schemas/ns0_0_0
@@ -0,0 +1 @@
+./test/schemas/ns0_0.xml validates
diff --git a/result/schemas/ns0_0_0.err b/result/schemas/ns0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/ns0_0_0.err
diff --git a/result/schemas/ns0_0_1 b/result/schemas/ns0_0_1
new file mode 100644
index 0000000..2110249
--- /dev/null
+++ b/result/schemas/ns0_0_1
@@ -0,0 +1 @@
+./test/schemas/ns0_1.xml validates
diff --git a/result/schemas/ns0_0_1.err b/result/schemas/ns0_0_1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/ns0_0_1.err
diff --git a/result/schemas/ns0_0_2 b/result/schemas/ns0_0_2
new file mode 100644
index 0000000..03e85f7
--- /dev/null
+++ b/result/schemas/ns0_0_2
@@ -0,0 +1 @@
+./test/schemas/ns0_2.xml fails to validate
diff --git a/result/schemas/ns0_0_2.err b/result/schemas/ns0_0_2.err
new file mode 100644
index 0000000..ff70f7d
--- /dev/null
+++ b/result/schemas/ns0_0_2.err
@@ -0,0 +1,2 @@
+./test/schemas/ns0_2.xml:1: element foo: Schemas validity error : Element foo not declared
+./test/schemas/ns0_2.xml:1: element foo: Schemas validity error : Element foo not declared
diff --git a/result/schemas/ns0_0_3 b/result/schemas/ns0_0_3
new file mode 100644
index 0000000..473206c
--- /dev/null
+++ b/result/schemas/ns0_0_3
@@ -0,0 +1 @@
+./test/schemas/ns0_3.xml fails to validate
diff --git a/result/schemas/ns0_0_3.err b/result/schemas/ns0_0_3.err
new file mode 100644
index 0000000..6578c9e
--- /dev/null
+++ b/result/schemas/ns0_0_3.err
@@ -0,0 +1 @@
+./test/schemas/ns0_3.xml:1: element foo: Schemas validity error : Attribute id on foo is unknown
diff --git a/result/schemas/ns0_0_4 b/result/schemas/ns0_0_4
new file mode 100644
index 0000000..f10f45e
--- /dev/null
+++ b/result/schemas/ns0_0_4
@@ -0,0 +1 @@
+./test/schemas/ns0_4.xml fails to validate
diff --git a/result/schemas/ns0_0_4.err b/result/schemas/ns0_0_4.err
new file mode 100644
index 0000000..14b949d
--- /dev/null
+++ b/result/schemas/ns0_0_4.err
@@ -0,0 +1 @@
+./test/schemas/ns0_4.xml:2: element foo: Schemas validity error : Attribute id on foo is unknown
diff --git a/result/schemas/ns0_1_0 b/result/schemas/ns0_1_0
new file mode 100644
index 0000000..9ba0471
--- /dev/null
+++ b/result/schemas/ns0_1_0
@@ -0,0 +1 @@
+./test/schemas/ns0_0.xml fails to validate
diff --git a/result/schemas/ns0_1_0.err b/result/schemas/ns0_1_0.err
new file mode 100644
index 0000000..6e5ba4a
--- /dev/null
+++ b/result/schemas/ns0_1_0.err
@@ -0,0 +1 @@
+./test/schemas/ns0_0.xml:1: element foo: Schemas validity error : Attribute id on foo is unknown
diff --git a/result/schemas/ns0_1_1 b/result/schemas/ns0_1_1
new file mode 100644
index 0000000..9f464de
--- /dev/null
+++ b/result/schemas/ns0_1_1
@@ -0,0 +1 @@
+./test/schemas/ns0_1.xml fails to validate
diff --git a/result/schemas/ns0_1_1.err b/result/schemas/ns0_1_1.err
new file mode 100644
index 0000000..008b122
--- /dev/null
+++ b/result/schemas/ns0_1_1.err
@@ -0,0 +1 @@
+./test/schemas/ns0_1.xml:1: element foo: Schemas validity error : Attribute id on foo is unknown
diff --git a/result/schemas/ns0_1_2 b/result/schemas/ns0_1_2
new file mode 100644
index 0000000..03e85f7
--- /dev/null
+++ b/result/schemas/ns0_1_2
@@ -0,0 +1 @@
+./test/schemas/ns0_2.xml fails to validate
diff --git a/result/schemas/ns0_1_2.err b/result/schemas/ns0_1_2.err
new file mode 100644
index 0000000..ff70f7d
--- /dev/null
+++ b/result/schemas/ns0_1_2.err
@@ -0,0 +1,2 @@
+./test/schemas/ns0_2.xml:1: element foo: Schemas validity error : Element foo not declared
+./test/schemas/ns0_2.xml:1: element foo: Schemas validity error : Element foo not declared
diff --git a/result/schemas/ns0_1_3 b/result/schemas/ns0_1_3
new file mode 100644
index 0000000..1fc8772
--- /dev/null
+++ b/result/schemas/ns0_1_3
@@ -0,0 +1 @@
+./test/schemas/ns0_3.xml validates
diff --git a/result/schemas/ns0_1_3.err b/result/schemas/ns0_1_3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/ns0_1_3.err
diff --git a/result/schemas/ns0_1_4 b/result/schemas/ns0_1_4
new file mode 100644
index 0000000..7374ebf
--- /dev/null
+++ b/result/schemas/ns0_1_4
@@ -0,0 +1 @@
+./test/schemas/ns0_4.xml validates
diff --git a/result/schemas/ns0_1_4.err b/result/schemas/ns0_1_4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/ns0_1_4.err
diff --git a/result/schemas/ns1_0_0 b/result/schemas/ns1_0_0
new file mode 100644
index 0000000..ffcfb6c
--- /dev/null
+++ b/result/schemas/ns1_0_0
@@ -0,0 +1 @@
+./test/schemas/ns1_0.xml validates
diff --git a/result/schemas/ns1_0_0.err b/result/schemas/ns1_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/ns1_0_0.err
diff --git a/result/schemas/ns2_0_0 b/result/schemas/ns2_0_0
new file mode 100644
index 0000000..b2c181e
--- /dev/null
+++ b/result/schemas/ns2_0_0
@@ -0,0 +1 @@
+./test/schemas/ns2_0.xml validates
diff --git a/result/schemas/ns2_0_0.err b/result/schemas/ns2_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/ns2_0_0.err
diff --git a/result/schemas/po0_0_0 b/result/schemas/po0_0_0
new file mode 100644
index 0000000..9687b9d
--- /dev/null
+++ b/result/schemas/po0_0_0
@@ -0,0 +1 @@
+./test/schemas/po0_0.xml validates
diff --git a/result/schemas/po0_0_0.err b/result/schemas/po0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/po0_0_0.err
diff --git a/result/schemas/po1_0_0 b/result/schemas/po1_0_0
new file mode 100644
index 0000000..2c264ce
--- /dev/null
+++ b/result/schemas/po1_0_0
@@ -0,0 +1 @@
+./test/schemas/po1_0.xml validates
diff --git a/result/schemas/po1_0_0.err b/result/schemas/po1_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/po1_0_0.err
diff --git a/result/schemas/restriction0_0_0 b/result/schemas/restriction0_0_0
new file mode 100644
index 0000000..16ef2bc
--- /dev/null
+++ b/result/schemas/restriction0_0_0
@@ -0,0 +1 @@
+./test/schemas/restriction0_0.xml validates
diff --git a/result/schemas/restriction0_0_0.err b/result/schemas/restriction0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/restriction0_0_0.err
diff --git a/result/schemas/seq0_0_0 b/result/schemas/seq0_0_0
new file mode 100644
index 0000000..d4c8431
--- /dev/null
+++ b/result/schemas/seq0_0_0
@@ -0,0 +1 @@
+./test/schemas/seq0_0.xml validates
diff --git a/result/schemas/seq0_0_0.err b/result/schemas/seq0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/seq0_0_0.err
diff --git a/result/schemas/vdv-first0_0_0 b/result/schemas/vdv-first0_0_0
new file mode 100644
index 0000000..6d39ecb
--- /dev/null
+++ b/result/schemas/vdv-first0_0_0
@@ -0,0 +1 @@
+./test/schemas/vdv-first0_0.xml validates
diff --git a/result/schemas/vdv-first0_0_0.err b/result/schemas/vdv-first0_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/vdv-first0_0_0.err
diff --git a/result/schemas/vdv-first1_0_0 b/result/schemas/vdv-first1_0_0
new file mode 100644
index 0000000..54f4b15
--- /dev/null
+++ b/result/schemas/vdv-first1_0_0
@@ -0,0 +1 @@
+./test/schemas/vdv-first1_0.xml validates
diff --git a/result/schemas/vdv-first1_0_0.err b/result/schemas/vdv-first1_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/vdv-first1_0_0.err
diff --git a/result/schemas/vdv-first2_0_0 b/result/schemas/vdv-first2_0_0
new file mode 100644
index 0000000..7430eda
--- /dev/null
+++ b/result/schemas/vdv-first2_0_0
@@ -0,0 +1 @@
+./test/schemas/vdv-first2_0.xml validates
diff --git a/result/schemas/vdv-first2_0_0.err b/result/schemas/vdv-first2_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/vdv-first2_0_0.err
diff --git a/result/schemas/vdv-first3_0_0 b/result/schemas/vdv-first3_0_0
new file mode 100644
index 0000000..943e3e1
--- /dev/null
+++ b/result/schemas/vdv-first3_0_0
@@ -0,0 +1 @@
+./test/schemas/vdv-first3_0.xml validates
diff --git a/result/schemas/vdv-first3_0_0.err b/result/schemas/vdv-first3_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/vdv-first3_0_0.err
diff --git a/result/schemas/vdv-first4_0_0 b/result/schemas/vdv-first4_0_0
new file mode 100644
index 0000000..bfa9b29
--- /dev/null
+++ b/result/schemas/vdv-first4_0_0
@@ -0,0 +1 @@
+./test/schemas/vdv-first4_0.xml validates
diff --git a/result/schemas/vdv-first4_0_0.err b/result/schemas/vdv-first4_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/vdv-first4_0_0.err
diff --git a/result/schemas/vdv-first4_0_1 b/result/schemas/vdv-first4_0_1
new file mode 100644
index 0000000..19a7ac1
--- /dev/null
+++ b/result/schemas/vdv-first4_0_1
@@ -0,0 +1 @@
+./test/schemas/vdv-first4_1.xml fails to validate
diff --git a/result/schemas/vdv-first4_0_1.err b/result/schemas/vdv-first4_0_1.err
new file mode 100644
index 0000000..6eafb62
--- /dev/null
+++ b/result/schemas/vdv-first4_0_1.err
@@ -0,0 +1 @@
+./test/schemas/vdv-first4_1.xml:14: element born: Schemas validity error : Failed to validate basic type date
diff --git a/result/schemas/vdv-first4_0_2 b/result/schemas/vdv-first4_0_2
new file mode 100644
index 0000000..fb59b67
--- /dev/null
+++ b/result/schemas/vdv-first4_0_2
@@ -0,0 +1 @@
+./test/schemas/vdv-first4_2.xml fails to validate
diff --git a/result/schemas/vdv-first4_0_2.err b/result/schemas/vdv-first4_0_2.err
new file mode 100644
index 0000000..d37271a
--- /dev/null
+++ b/result/schemas/vdv-first4_0_2.err
@@ -0,0 +1 @@
+./test/schemas/vdv-first4_2.xml:24: element born: Schemas validity error : Failed to validate type with facet pattern
diff --git a/result/schemas/vdv-first5_0_0 b/result/schemas/vdv-first5_0_0
new file mode 100644
index 0000000..3f09315
--- /dev/null
+++ b/result/schemas/vdv-first5_0_0
@@ -0,0 +1 @@
+./test/schemas/vdv-first5_0.xml validates
diff --git a/result/schemas/vdv-first5_0_0.err b/result/schemas/vdv-first5_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/vdv-first5_0_0.err
diff --git a/result/scripts/base b/result/scripts/base
new file mode 100644
index 0000000..f64231a
--- /dev/null
+++ b/result/scripts/base
@@ -0,0 +1,4 @@
+/ > ./test/scripts/base.xml
+/ > e > http://example.com/base/
+e > img > http://example.com/base/images/
+img > \ No newline at end of file
diff --git a/result/scripts/base2 b/result/scripts/base2
new file mode 100644
index 0000000..93edf37
--- /dev/null
+++ b/result/scripts/base2
@@ -0,0 +1,4 @@
+/ > ./test/scripts/base2.xml
+/ > e > test/scripts/html/
+e > img > test/scripts/images/
+img > \ No newline at end of file
diff --git a/result/slashdot.rdf b/result/slashdot.rdf
new file mode 100644
index 0000000..33008ab
--- /dev/null
+++ b/result/slashdot.rdf
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">
+
+ <channel>
+ <title>Slashdot:News for Nerds. Stuff that Matters.</title>
+ <link>http://slashdot.org/</link>
+ <description>News for Nerds. Stuff that Matters</description>
+ </channel>
+
+ <image>
+ <title>Slashdot</title>
+ <url>http://slashdot.org/images/slashdotlg.gif</url>
+ <link>http://slashdot.org</link>
+ </image>
+
+ <item>
+ <title>100 Mbit/s on Fibre to the home</title>
+ <link>http://slashdot.org/articles/99/06/06/1440211.shtml</link>
+ </item>
+
+ <item>
+ <title>Gimp 1.2 Preview</title>
+ <link>http://slashdot.org/articles/99/06/06/1438246.shtml</link>
+ </item>
+
+ <item>
+ <title>Sony's AIBO robot Sold Out</title>
+ <link>http://slashdot.org/articles/99/06/06/1432256.shtml</link>
+ </item>
+
+ <item>
+ <title>Ask Slashdot: Another Word for "Hacker"?</title>
+ <link>http://slashdot.org/askslashdot/99/06/05/1815225.shtml</link>
+ </item>
+
+ <item>
+ <title>Corel Linux FAQ</title>
+ <link>http://slashdot.org/articles/99/06/05/1842218.shtml</link>
+ </item>
+
+ <item>
+ <title>Upside downsides MP3.COM.</title>
+ <link>http://slashdot.org/articles/99/06/05/1558210.shtml</link>
+ </item>
+
+ <item>
+ <title>2 Terabits of Bandwidth</title>
+ <link>http://slashdot.org/articles/99/06/05/1554258.shtml</link>
+ </item>
+
+ <item>
+ <title>Suppression of cold fusion research?</title>
+ <link>http://slashdot.org/articles/99/06/04/2313200.shtml</link>
+ </item>
+
+ <item>
+ <title>California Gov. Halts Wage Info Sale</title>
+ <link>http://slashdot.org/articles/99/06/04/235256.shtml</link>
+ </item>
+
+ <item>
+ <title>Red Hat Announces IPO</title>
+ <link>http://slashdot.org/articles/99/06/04/0849207.shtml</link>
+ </item>
+</rdf:RDF>
diff --git a/result/slashdot.rdf.rdr b/result/slashdot.rdf.rdr
new file mode 100644
index 0000000..fecd24d
--- /dev/null
+++ b/result/slashdot.rdf.rdr
@@ -0,0 +1,218 @@
+0 1 rdf:RDF 0 0
+1 14 #text 0 1
+
+
+1 1 channel 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Slashdot:News for Nerds. Stuff that Matters.
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/
+2 15 link 0 0
+2 14 #text 0 1
+
+2 1 description 0 0
+3 3 #text 0 1 News for Nerds. Stuff that Matters
+2 15 description 0 0
+2 14 #text 0 1
+
+1 15 channel 0 0
+1 14 #text 0 1
+
+
+1 1 image 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Slashdot
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/images/slashdotlg.gif
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 image 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 100 Mbit/s on Fibre to the home
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1440211.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Gimp 1.2 Preview
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1438246.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Sony's AIBO robot Sold Out
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1432256.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Ask Slashdot: Another Word for "Hacker"?
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/askslashdot/99/06/05/1815225.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Corel Linux FAQ
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/05/1842218.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Upside downsides MP3.COM.
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/05/1558210.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 2 Terabits of Bandwidth
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/05/1554258.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Suppression of cold fusion research?
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/04/2313200.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 California Gov. Halts Wage Info Sale
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/04/235256.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+
+1 1 item 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Red Hat Announces IPO
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 link 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/04/0849207.shtml
+2 15 link 0 0
+2 14 #text 0 1
+
+1 15 item 0 0
+1 14 #text 0 1
+
+0 15 rdf:RDF 0 0
diff --git a/result/slashdot.rdf.sax b/result/slashdot.rdf.sax
new file mode 100644
index 0000000..fe54376
--- /dev/null
+++ b/result/slashdot.rdf.sax
@@ -0,0 +1,221 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(rdf:RDF, xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#', xmlns='http://my.netscape.com/rdf/simple/0.9/')
+SAX.characters(
+
+ , 4)
+SAX.startElement(channel)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Slashdot:News for Nerds. Stuff, 44)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/, 20)
+SAX.endElement(link)
+SAX.characters(
+ , 5)
+SAX.startElement(description)
+SAX.characters(News for Nerds. Stuff that Ma, 35)
+SAX.endElement(description)
+SAX.characters(
+ , 3)
+SAX.endElement(channel)
+SAX.characters(
+
+ , 4)
+SAX.startElement(image)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Slashdot, 8)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/images/sla, 41)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org, 19)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(image)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(100 Mbit/s on Fibre to the hom, 31)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Gimp 1.2 Preview, 16)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Sony's AIBO robot Sold Out, 26)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Ask Slashdot: Another Word for, 40)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/askslashdo, 54)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Corel Linux FAQ, 15)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Upside downsides MP3.COM., 25)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(2 Terabits of Bandwidth, 23)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Suppression of cold fusion res, 36)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(California Gov. Halts Wage Inf, 36)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/articles/9, 50)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+
+ , 6)
+SAX.startElement(item)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Red Hat Announces IPO, 21)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(link)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(link)
+SAX.characters(
+ , 3)
+SAX.endElement(item)
+SAX.characters(
+, 1)
+SAX.endElement(rdf:RDF)
+SAX.endDocument()
diff --git a/result/slashdot.xml b/result/slashdot.xml
new file mode 100644
index 0000000..b648d5e
--- /dev/null
+++ b/result/slashdot.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<ultramode>
+ <story>
+ <title>100 Mbit/s on Fibre to the home</title>
+ <url>http://slashdot.org/articles/99/06/06/1440211.shtml</url>
+ <time>1999-06-06 14:39:59</time>
+ <author>CmdrTaco</author>
+ <department>wouldn't-it-be-nice</department>
+ <topic>internet</topic>
+ <comments>20</comments>
+ <section>articles</section>
+ <image>topicinternet.jpg</image>
+ </story>
+ <story>
+ <title>Gimp 1.2 Preview</title>
+ <url>http://slashdot.org/articles/99/06/06/1438246.shtml</url>
+ <time>1999-06-06 14:38:40</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-read</department>
+ <topic>gimp</topic>
+ <comments>12</comments>
+ <section>articles</section>
+ <image>topicgimp.gif</image>
+ </story>
+ <story>
+ <title>Sony's AIBO robot Sold Out</title>
+ <url>http://slashdot.org/articles/99/06/06/1432256.shtml</url>
+ <time>1999-06-06 14:32:51</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-see</department>
+ <topic>tech</topic>
+ <comments>10</comments>
+ <section>articles</section>
+ <image>topictech2.jpg</image>
+ </story>
+ <story>
+ <title>Ask Slashdot: Another Word for "Hacker"?</title>
+ <url>http://slashdot.org/askslashdot/99/06/05/1815225.shtml</url>
+ <time>1999-06-05 20:00:00</time>
+ <author>Cliff</author>
+ <department>hacker-vs-cracker</department>
+ <topic>news</topic>
+ <comments>385</comments>
+ <section>askslashdot</section>
+ <image>topicnews.gif</image>
+ </story>
+ <story>
+ <title>Corel Linux FAQ</title>
+ <url>http://slashdot.org/articles/99/06/05/1842218.shtml</url>
+ <time>1999-06-05 18:42:06</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-read</department>
+ <topic>corel</topic>
+ <comments>164</comments>
+ <section>articles</section>
+ <image>topiccorel.gif</image>
+ </story>
+ <story>
+ <title>Upside downsides MP3.COM.</title>
+ <url>http://slashdot.org/articles/99/06/05/1558210.shtml</url>
+ <time>1999-06-05 15:56:45</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-think-about</department>
+ <topic>music</topic>
+ <comments>48</comments>
+ <section>articles</section>
+ <image>topicmusic.gif</image>
+ </story>
+ <story>
+ <title>2 Terabits of Bandwidth</title>
+ <url>http://slashdot.org/articles/99/06/05/1554258.shtml</url>
+ <time>1999-06-05 15:53:43</time>
+ <author>CmdrTaco</author>
+ <department>faster-porn</department>
+ <topic>internet</topic>
+ <comments>66</comments>
+ <section>articles</section>
+ <image>topicinternet.jpg</image>
+ </story>
+ <story>
+ <title>Suppression of cold fusion research?</title>
+ <url>http://slashdot.org/articles/99/06/04/2313200.shtml</url>
+ <time>1999-06-04 23:12:29</time>
+ <author>Hemos</author>
+ <department>possibly-probably</department>
+ <topic>science</topic>
+ <comments>217</comments>
+ <section>articles</section>
+ <image>topicscience.gif</image>
+ </story>
+ <story>
+ <title>California Gov. Halts Wage Info Sale</title>
+ <url>http://slashdot.org/articles/99/06/04/235256.shtml</url>
+ <time>1999-06-04 23:05:34</time>
+ <author>Hemos</author>
+ <department>woo-hoo!</department>
+ <topic>usa</topic>
+ <comments>16</comments>
+ <section>articles</section>
+ <image>topicus.gif</image>
+ </story>
+ <story>
+ <title>Red Hat Announces IPO</title>
+ <url>http://slashdot.org/articles/99/06/04/0849207.shtml</url>
+ <time>1999-06-04 19:30:18</time>
+ <author>Justin</author>
+ <department>details-sketchy</department>
+ <topic>redhat</topic>
+ <comments>155</comments>
+ <section>articles</section>
+ <image>topicredhat.gif</image>
+ </story>
+</ultramode>
diff --git a/result/slashdot.xml.rdr b/result/slashdot.xml.rdr
new file mode 100644
index 0000000..56b6836
--- /dev/null
+++ b/result/slashdot.xml.rdr
@@ -0,0 +1,514 @@
+0 1 ultramode 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 100 Mbit/s on Fibre to the home
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1440211.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-06 14:39:59
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 wouldn't-it-be-nice
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 internet
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 20
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicinternet.jpg
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Gimp 1.2 Preview
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1438246.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-06 14:38:40
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-read
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 gimp
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 12
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicgimp.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Sony's AIBO robot Sold Out
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1432256.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-06 14:32:51
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-see
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 tech
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 10
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topictech2.jpg
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Ask Slashdot: Another Word for "Hacker"?
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/askslashdot/99/06/05/1815225.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-05 20:00:00
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 Cliff
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 hacker-vs-cracker
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 news
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 385
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 askslashdot
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicnews.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Corel Linux FAQ
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/05/1842218.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-05 18:42:06
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-read
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 corel
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 164
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topiccorel.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Upside downsides MP3.COM.
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/05/1558210.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-05 15:56:45
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-think-about
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 music
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 48
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicmusic.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 2 Terabits of Bandwidth
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/05/1554258.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-05 15:53:43
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 faster-porn
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 internet
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 66
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicinternet.jpg
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Suppression of cold fusion research?
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/04/2313200.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-04 23:12:29
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 Hemos
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 possibly-probably
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 science
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 217
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicscience.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 California Gov. Halts Wage Info Sale
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/04/235256.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-04 23:05:34
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 Hemos
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 woo-hoo!
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 usa
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 16
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicus.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Red Hat Announces IPO
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/04/0849207.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-04 19:30:18
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 Justin
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 details-sketchy
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 redhat
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 155
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicredhat.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+0 15 ultramode 0 0
diff --git a/result/slashdot.xml.sax b/result/slashdot.xml.sax
new file mode 100644
index 0000000..63b5f0d
--- /dev/null
+++ b/result/slashdot.xml.sax
@@ -0,0 +1,517 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(ultramode)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(100 Mbit/s on Fibre to the hom, 31)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-06 14:39:59, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(wouldn't-it-be-nice, 19)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(internet, 8)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(20, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicinternet.jpg, 17)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Gimp 1.2 Preview, 16)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-06 14:38:40, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-read, 13)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(gimp, 4)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(12, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicgimp.gif, 13)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Sony's AIBO robot Sold Out, 26)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-06 14:32:51, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-see, 12)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(tech, 4)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(10, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topictech2.jpg, 14)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Ask Slashdot: Another Word for, 40)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/askslashdo, 54)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-05 20:00:00, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(Cliff, 5)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(hacker-vs-cracker, 17)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(news, 4)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(385, 3)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(askslashdot, 11)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicnews.gif, 13)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Corel Linux FAQ, 15)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-05 18:42:06, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-read, 13)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(corel, 5)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(164, 3)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topiccorel.gif, 14)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Upside downsides MP3.COM., 25)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-05 15:56:45, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-think-about, 20)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(music, 5)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(48, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicmusic.gif, 14)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(2 Terabits of Bandwidth, 23)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-05 15:53:43, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(faster-porn, 11)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(internet, 8)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(66, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicinternet.jpg, 17)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Suppression of cold fusion res, 36)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-04 23:12:29, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(Hemos, 5)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(possibly-probably, 17)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(science, 7)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(217, 3)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicscience.gif, 16)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(California Gov. Halts Wage Inf, 36)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 50)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-04 23:05:34, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(Hemos, 5)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(woo-hoo!, 8)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(usa, 3)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(16, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicus.gif, 11)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Red Hat Announces IPO, 21)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-04 19:30:18, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(Justin, 6)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(details-sketchy, 15)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(redhat, 6)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(155, 3)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicredhat.gif, 15)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+, 1)
+SAX.endElement(ultramode)
+SAX.endDocument()
diff --git a/result/slashdot16.xml b/result/slashdot16.xml
new file mode 100644
index 0000000..f6a7f2a
--- /dev/null
+++ b/result/slashdot16.xml
Binary files differ
diff --git a/result/slashdot16.xml.rdr b/result/slashdot16.xml.rdr
new file mode 100644
index 0000000..cb7a86c
--- /dev/null
+++ b/result/slashdot16.xml.rdr
@@ -0,0 +1,718 @@
+0 1 ultramode 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 100 Mbit/s on Fibre to the home
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1440211.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-06 14:39:59
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 wouldn't-it-be-nice
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 internet
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 20
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicinternet.jpg
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Gimp 1.2 Preview
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1438246.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-06 14:38:40
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-read
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 gimp
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 12
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicgimp.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Sony's AIBO robot Sold Out
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1432256.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-06 14:32:51
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-see
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 tech
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 10
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topictech2.jpg
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Ask Slashdot: Another Word for "Hacker"?
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/askslashdot/99/06/05/1815225.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-05 20:00:00
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 Cliff
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 hacker-vs-cracker
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 news
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 385
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 askslashdot
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicnews.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 100 Mbit/s on Fibre to the home
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1440211.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-06 14:39:59
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 wouldn't-it-be-nice
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 internet
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 20
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicinternet.jpg
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Gimp 1.2 Preview
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1438246.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-06 14:38:40
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-read
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 gimp
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 12
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicgimp.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Sony's AIBO robot Sold Out
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/06/1432256.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-06 14:32:51
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-see
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 tech
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 10
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topictech2.jpg
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Ask Slashdot: Another Word for "Hacker"?
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/askslashdot/99/06/05/1815225.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-05 20:00:00
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 Cliff
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 hacker-vs-cracker
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 news
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 385
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 askslashdot
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicnews.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Corel Linux FAQ
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/05/1842218.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-05 18:42:06
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-read
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 corel
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 164
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topiccorel.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Upside downsides MP3.COM.
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/05/1558210.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-05 15:56:45
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 stuff-to-think-about
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 music
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 48
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicmusic.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 2 Terabits of Bandwidth
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/05/1554258.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-05 15:53:43
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 CmdrTaco
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 faster-porn
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 internet
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 66
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicinternet.jpg
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Suppression of cold fusion research?
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/04/2313200.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-04 23:12:29
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 Hemos
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 possibly-probably
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 science
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 217
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicscience.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 California Gov. Halts Wage Info Sale
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/04/235256.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-04 23:05:34
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 Hemos
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 woo-hoo!
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 usa
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 16
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicus.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+1 1 story 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Red Hat Announces IPO
+2 15 title 0 0
+2 14 #text 0 1
+
+2 1 url 0 0
+3 3 #text 0 1 http://slashdot.org/articles/99/06/04/0849207.shtml
+2 15 url 0 0
+2 14 #text 0 1
+
+2 1 time 0 0
+3 3 #text 0 1 1999-06-04 19:30:18
+2 15 time 0 0
+2 14 #text 0 1
+
+2 1 author 0 0
+3 3 #text 0 1 Justin
+2 15 author 0 0
+2 14 #text 0 1
+
+2 1 department 0 0
+3 3 #text 0 1 details-sketchy
+2 15 department 0 0
+2 14 #text 0 1
+
+2 1 topic 0 0
+3 3 #text 0 1 redhat
+2 15 topic 0 0
+2 14 #text 0 1
+
+2 1 comments 0 0
+3 3 #text 0 1 155
+2 15 comments 0 0
+2 14 #text 0 1
+
+2 1 section 0 0
+3 3 #text 0 1 articles
+2 15 section 0 0
+2 14 #text 0 1
+
+2 1 image 0 0
+3 3 #text 0 1 topicredhat.gif
+2 15 image 0 0
+2 14 #text 0 1
+
+1 15 story 0 0
+1 14 #text 0 1
+
+0 15 ultramode 0 0
diff --git a/result/slashdot16.xml.sax b/result/slashdot16.xml.sax
new file mode 100644
index 0000000..07cfaf0
--- /dev/null
+++ b/result/slashdot16.xml.sax
@@ -0,0 +1,721 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(ultramode)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(100 Mbit/s on Fibre to the hom, 31)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-06 14:39:59, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(wouldn't-it-be-nice, 19)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(internet, 8)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(20, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicinternet.jpg, 17)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Gimp 1.2 Preview, 16)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-06 14:38:40, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-read, 13)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(gimp, 4)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(12, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicgimp.gif, 13)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Sony's AIBO robot Sold Out, 26)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-06 14:32:51, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-see, 12)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(tech, 4)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(10, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topictech2.jpg, 14)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Ask Slashdot: Another Word for, 40)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/askslashdo, 54)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-05 20:00:00, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(Cliff, 5)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(hacker-vs-cracker, 17)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(news, 4)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(385, 3)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(askslashdot, 11)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicnews.gif, 13)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 3)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(100 Mbit/s on Fibre to the hom, 31)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-06 14:39:59, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(wouldn't-it-be-nice, 19)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(internet, 8)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(20, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicinternet.jpg, 17)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Gimp 1.2 Preview, 16)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-06 14:38:40, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-read, 13)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(gimp, 4)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(12, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicgimp.gif, 13)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Sony's AIBO robot Sold Out, 26)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-06 14:32:51, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-see, 12)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(tech, 4)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(10, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topictech2.jpg, 14)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Ask Slashdot: Another Word for, 40)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/askslashdo, 54)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-05 20:00:00, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(Cliff, 5)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(hacker-vs-cracker, 17)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(news, 4)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(385, 3)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(askslashdot, 11)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicnews.gif, 13)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+, 1)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Corel Linux FAQ, 15)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-05 18:42:06, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-read, 13)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(corel, 5)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(164, 3)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topiccorel.gif, 14)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Upside downsides MP3.COM., 25)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-05 15:56:45, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(stuff-to-think-about, 20)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(music, 5)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(48, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicmusic.gif, 14)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(2 Terabits of Bandwidth, 23)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-05 15:53:43, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(CmdrTaco, 8)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(faster-porn, 11)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(internet, 8)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(66, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicinternet.jpg, 17)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Suppression of cold fusion res, 36)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-04 23:12:29, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(Hemos, 5)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(possibly-probably, 17)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(science, 7)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(217, 3)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicscience.gif, 16)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(California Gov. Halts Wage Inf, 36)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 50)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-04 23:05:34, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(Hemos, 5)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(woo-hoo!, 8)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(usa, 3)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(16, 2)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicus.gif, 11)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+ , 2)
+SAX.startElement(story)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Red Hat Announces IPO, 21)
+SAX.endElement(title)
+SAX.characters(
+ , 5)
+SAX.startElement(url)
+SAX.characters(http://slashdot.org/articles/9, 51)
+SAX.endElement(url)
+SAX.characters(
+ , 5)
+SAX.startElement(time)
+SAX.characters(1999-06-04 19:30:18, 19)
+SAX.endElement(time)
+SAX.characters(
+ , 5)
+SAX.startElement(author)
+SAX.characters(Justin, 6)
+SAX.endElement(author)
+SAX.characters(
+ , 5)
+SAX.startElement(department)
+SAX.characters(details-sketchy, 15)
+SAX.endElement(department)
+SAX.characters(
+ , 5)
+SAX.startElement(topic)
+SAX.characters(redhat, 6)
+SAX.endElement(topic)
+SAX.characters(
+ , 5)
+SAX.startElement(comments)
+SAX.characters(155, 3)
+SAX.endElement(comments)
+SAX.characters(
+ , 5)
+SAX.startElement(section)
+SAX.characters(articles, 8)
+SAX.endElement(section)
+SAX.characters(
+ , 5)
+SAX.startElement(image)
+SAX.characters(topicredhat.gif, 15)
+SAX.endElement(image)
+SAX.characters(
+ , 3)
+SAX.endElement(story)
+SAX.characters(
+, 1)
+SAX.endElement(ultramode)
+SAX.endDocument()
diff --git a/result/svg1 b/result/svg1
new file mode 100644
index 0000000..359bd45
--- /dev/null
+++ b/result/svg1
@@ -0,0 +1,161 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="242px" height="383px">
+<g style="stroke: #000000">
+</g>
+<g style="fill: #f2cc99">
+ <polyline verts=" 69,18 82,8 99,3 118,5 135,12 149,21 156,13 165,9 177,13 183,28 180,50 164,91 155,107 154,114 151,121 141,127 139,136 155,206 157,251 126,342 133,357 128,376 83,376 75,368 67,350 61,350 53,369 4,369 2,361 5,354 12,342 16,321 4,257 4,244 7,218 9,179 26,127 43,93 32,77 30,70 24,67 16,49 17,35 18,23 30,12 40,7 53,7 62,12 69,18 69,18 69,18"/>
+</g>
+<g style="fill: #e5b27f">
+ <polyline verts=" 142,79 136,74 138,82 133,78 133,84 127,78 128,85 124,80 125,87 119,82 119,90 125,99 125,96 128,100 128,94 131,98 132,93 135,97 136,93 138,97 139,94 141,98 143,94 144,85 142,79 142,79 142,79"/>
+</g>
+<g style="fill: #eb8080">
+ <polyline verts=" 127,101 132,100 137,99 144,101 143,105 135,110 127,101 127,101 127,101"/>
+</g>
+<g style="fill: #f2cc99">
+ <polyline verts=" 178,229 157,248 139,296 126,349 137,356 158,357 183,342 212,332 235,288 235,261 228,252 212,250 188,251 178,229 178,229 178,229"/>
+</g>
+<g style="fill: #9c826b">
+ <polyline verts=" 56,229 48,241 48,250 57,281 63,325 71,338 81,315 76,321 79,311 83,301 75,308 80,298 73,303 76,296 71,298 74,292 69,293 74,284 78,278 71,278 74,274 68,273 70,268 66,267 68,261 60,266 62,259 65,253 57,258 59,251 55,254 55,248 60,237 54,240 58,234 54,236 56,229 56,229 56,229"/>
+ <polyline verts=" 74,363 79,368 81,368 85,362 89,363 92,370 96,373 101,372 108,361 110,371 113,373 116,371 120,358 122,363 123,371 126,371 129,367 132,357 135,361 130,376 127,377 94,378 84,376 76,371 74,363 74,363 74,363"/>
+ <polyline verts=" 212,250 219,251 228,258 236,270 235,287 225,304 205,332 177,343 171,352 158,357 166,352 168,346 168,339 165,333 155,327 155,323 161,320 165,316 169,316 167,312 171,313 168,308 173,309 170,306 177,306 175,308 177,311 174,311 176,316 171,315 174,319 168,320 168,323 175,327 179,332 183,326 184,332 189,323 190,328 194,320 194,325 199,316 201,320 204,313 206,316 208,310 211,305 219,298 226,288 229,279 228,266 224,259 217,253 212,250 212,250 212,250"/>
+ <polyline verts=" 151,205 151,238 149,252 141,268 128,282 121,301 130,300 126,313 118,324 116,337 120,346 133,352 133,340 137,333 145,329 156,327 153,319 153,291 157,271 170,259 178,277 193,250 174,216 151,205 151,205 151,205"/>
+ <polyline verts=" 78,127 90,142 95,155 108,164 125,167 139,175 150,206 152,191 141,140 121,148 100,136 78,127 78,127 78,127"/>
+ <polyline verts=" 21,58 35,63 38,68 32,69 42,74 40,79 47,80 54,83 45,94 34,81 32,73 24,66 21,58 21,58 21,58"/>
+ <polyline verts=" 71,34 67,34 66,27 59,24 54,17 48,17 39,22 30,26 28,31 31,39 38,46 29,45 36,54 41,61 41,70 50,69 54,71 55,58 67,52 76,43 76,39 68,44 71,34 71,34 71,34"/>
+ <polyline verts=" 139,74 141,83 143,89 144,104 148,104 155,106 154,86 157,77 155,72 150,77 144,77 139,74 139,74 139,74"/>
+ <polyline verts=" 105,44 102,53 108,58 111,62 112,55 105,44 105,44 105,44"/>
+ <polyline verts=" 141,48 141,54 144,58 139,62 137,66 136,59 137,52 141,48 141,48 141,48"/>
+ <polyline verts=" 98,135 104,130 105,134 108,132 108,135 112,134 113,137 116,136 116,139 119,139 124,141 128,140 133,138 140,133 139,140 126,146 104,144 98,135 98,135 98,135"/>
+ <polyline verts=" 97,116 103,119 103,116 111,118 116,117 122,114 127,107 135,111 142,107 141,114 145,118 149,121 145,125 140,124 127,121 113,125 100,124 97,116 97,116 97,116"/>
+ <polyline verts=" 147,33 152,35 157,34 153,31 160,31 156,28 161,28 159,24 163,25 163,21 165,22 170,23 167,17 172,21 174,18 175,23 176,22 177,28 177,33 174,37 176,39 174,44 171,49 168,53 164,57 159,68 156,70 154,60 150,51 146,43 144,35 147,33 147,33 147,33"/>
+ <polyline verts=" 85,72 89,74 93,75 100,76 105,75 102,79 94,79 88,76 85,72 85,72 85,72"/>
+ <polyline verts=" 86,214 79,221 76,232 82,225 78,239 82,234 78,245 81,243 79,255 84,250 84,267 87,254 90,271 90,257 95,271 93,256 95,249 92,252 93,243 89,253 89,241 86,250 87,236 83,245 87,231 82,231 90,219 84,221 86,214 86,214 86,214"/>
+</g>
+<g style="fill: #ffcc7f">
+ <polyline verts=" 93,68 96,72 100,73 106,72 108,66 105,63 100,62 93,68 93,68 93,68"/>
+ <polyline verts=" 144,64 142,68 142,73 146,74 150,73 154,64 149,62 144,64 144,64 144,64"/>
+</g>
+<g style="fill: #9c826b">
+ <polyline verts=" 57,91 42,111 52,105 41,117 53,112 46,120 53,116 50,124 57,119 55,127 61,122 60,130 67,126 66,134 71,129 72,136 77,130 76,137 80,133 82,138 86,135 96,135 94,129 86,124 83,117 77,123 79,117 73,120 75,112 68,116 71,111 65,114 69,107 63,110 68,102 61,107 66,98 61,103 63,97 57,99 57,91 57,91 57,91"/>
+ <polyline verts=" 83,79 76,79 67,82 75,83 65,88 76,87 65,92 76,91 68,96 77,95 70,99 80,98 72,104 80,102 76,108 85,103 92,101 87,98 93,96 86,94 91,93 85,91 93,89 99,89 105,93 107,85 102,82 92,80 83,79 83,79 83,79"/>
+ <polyline verts=" 109,77 111,83 109,89 113,94 117,90 117,81 114,78 109,77 109,77 109,77"/>
+ <polyline verts=" 122,128 127,126 134,127 136,129 134,130 130,128 124,129 122,128 122,128 122,128"/>
+ <polyline verts=" 78,27 82,32 80,33 82,36 78,37 82,40 78,42 81,46 76,47 78,49 74,50 82,52 87,50 83,48 91,46 86,45 91,42 88,40 92,37 86,34 90,31 86,29 89,26 78,27 78,27 78,27"/>
+ <polyline verts=" 82,17 92,20 79,21 90,25 81,25 94,28 93,26 101,30 101,26 107,33 108,28 111,40 113,34 115,45 117,39 119,54 121,46 124,58 126,47 129,59 130,49 134,58 133,44 137,48 133,37 137,40 133,32 126,20 135,26 132,19 138,23 135,17 142,18 132,11 116,6 94,6 78,11 92,12 80,14 90,16 82,17 82,17 82,17"/>
+ <polyline verts=" 142,234 132,227 124,223 115,220 110,225 118,224 127,229 135,236 122,234 115,237 113,242 121,238 139,243 121,245 111,254 95,254 102,244 104,235 110,229 100,231 104,224 113,216 122,215 132,217 141,224 145,230 149,240 142,234 142,234 142,234"/>
+ <polyline verts=" 115,252 125,248 137,249 143,258 134,255 125,254 115,252 115,252 115,252"/>
+ <polyline verts=" 114,212 130,213 140,219 147,225 144,214 137,209 128,207 114,212 114,212 114,212"/>
+ <polyline verts=" 102,263 108,258 117,257 131,258 116,260 109,265 102,263 102,263 102,263"/>
+ <polyline verts=" 51,241 35,224 40,238 23,224 31,242 19,239 28,247 17,246 25,250 37,254 39,263 44,271 47,294 48,317 51,328 60,351 60,323 53,262 47,246 51,241 51,241 51,241"/>
+ <polyline verts=" 2,364 9,367 14,366 18,355 20,364 26,366 31,357 35,364 39,364 42,357 47,363 53,360 59,357 54,369 7,373 2,364 2,364 2,364"/>
+ <polyline verts=" 7,349 19,345 25,339 18,341 23,333 28,326 23,326 27,320 23,316 25,311 20,298 15,277 12,264 9,249 10,223 3,248 5,261 15,307 17,326 11,343 7,349 7,349 7,349"/>
+ <polyline verts=" 11,226 15,231 25,236 18,227 11,226 11,226 11,226"/>
+ <polyline verts=" 13,214 19,217 32,227 23,214 16,208 15,190 24,148 31,121 24,137 14,170 8,189 13,214 13,214 13,214"/>
+ <polyline verts=" 202,254 195,258 199,260 193,263 197,263 190,268 196,268 191,273 188,282 200,272 194,272 201,266 197,265 204,262 200,258 204,256 202,254 202,254 202,254"/>
+</g>
+<g style="fill: #845433">
+ <polyline verts=" 151,213 165,212 179,225 189,246 187,262 179,275 176,263 177,247 171,233 163,230 165,251 157,264 146,298 145,321 133,326 143,285 154,260 153,240 151,213 151,213 151,213"/>
+ <polyline verts=" 91,132 95,145 97,154 104,148 107,155 109,150 111,158 115,152 118,159 120,153 125,161 126,155 133,164 132,154 137,163 137,152 142,163 147,186 152,192 148,167 141,143 124,145 105,143 91,132 91,132 91,132"/>
+</g>
+<g style="fill: #9c826b">
+ <polyline verts=" 31,57 23,52 26,51 20,44 23,42 21,36 22,29 25,23 24,32 30,43 26,41 30,50 26,48 31,57 31,57 31,57"/>
+ <polyline verts=" 147,21 149,28 155,21 161,16 167,14 175,15 173,11 161,9 147,21 147,21 147,21"/>
+ <polyline verts=" 181,39 175,51 169,57 171,65 165,68 165,75 160,76 162,91 171,71 180,51 181,39 181,39 181,39"/>
+ <polyline verts=" 132,346 139,348 141,346 142,341 147,342 143,355 133,350 132,346 132,346 132,346"/>
+ <polyline verts=" 146,355 151,352 155,348 157,343 160,349 151,356 147,357 146,355 146,355 146,355"/>
+ <polyline verts=" 99,266 100,281 94,305 86,322 78,332 72,346 73,331 91,291 99,266 99,266 99,266"/>
+ <polyline verts=" 20,347 32,342 45,340 54,345 45,350 42,353 38,350 31,353 29,356 23,350 19,353 15,349 20,347 20,347 20,347"/>
+ <polyline verts=" 78,344 86,344 92,349 88,358 84,352 78,344 78,344 78,344"/>
+ <polyline verts=" 93,347 104,344 117,345 124,354 121,357 116,351 112,351 108,355 102,351 93,347 93,347 93,347"/>
+</g>
+<g style="fill: #000000">
+ <polyline verts=" 105,12 111,18 113,24 113,29 119,34 116,23 112,16 105,12 105,12 105,12"/>
+ <polyline verts=" 122,27 125,34 127,43 128,34 125,29 122,27 122,27 122,27"/>
+ <polyline verts=" 115,13 122,19 122,15 113,10 115,13 115,13 115,13"/>
+</g>
+<g style="fill: #ffe5b2">
+ <polyline verts=" 116,172 107,182 98,193 98,183 90,199 89,189 84,207 88,206 87,215 95,206 93,219 91,230 98,216 97,226 104,214 112,209 104,208 113,202 126,200 139,207 132,198 142,203 134,192 142,195 134,187 140,185 130,181 136,177 126,177 125,171 116,180 116,172 116,172 116,172"/>
+ <polyline verts=" 74,220 67,230 67,221 59,235 63,233 60,248 70,232 65,249 71,243 67,256 73,250 69,262 73,259 71,267 76,262 72,271 78,270 76,275 82,274 78,290 86,279 86,289 92,274 88,275 87,264 82,270 82,258 77,257 78,247 73,246 77,233 72,236 74,220 74,220 74,220"/>
+ <polyline verts=" 133,230 147,242 148,250 145,254 138,247 129,246 142,245 138,241 128,237 137,238 133,230 133,230 133,230"/>
+ <polyline verts=" 133,261 125,261 116,263 111,267 125,265 133,261 133,261 133,261"/>
+ <polyline verts=" 121,271 109,273 103,279 99,305 92,316 85,327 83,335 89,340 97,341 94,336 101,336 96,331 103,330 97,327 108,325 99,322 109,321 100,318 110,317 105,314 110,312 107,310 113,308 105,306 114,303 105,301 115,298 107,295 115,294 108,293 117,291 109,289 117,286 109,286 118,283 112,281 118,279 114,278 119,276 115,274 121,271 121,271 121,271"/>
+ <polyline verts=" 79,364 74,359 74,353 76,347 80,351 83,356 82,360 79,364 79,364 79,364"/>
+ <polyline verts=" 91,363 93,356 97,353 103,355 105,360 103,366 99,371 94,368 91,363 91,363 91,363"/>
+ <polyline verts=" 110,355 114,353 118,357 117,363 113,369 111,362 110,355 110,355 110,355"/>
+ <polyline verts=" 126,354 123,358 124,367 126,369 129,361 129,357 126,354 126,354 126,354"/>
+ <polyline verts=" 30,154 24,166 20,182 23,194 29,208 37,218 41,210 41,223 46,214 46,227 52,216 52,227 61,216 59,225 68,213 73,219 70,207 77,212 69,200 77,202 70,194 78,197 68,187 76,182 64,182 58,175 58,185 53,177 50,186 46,171 44,182 39,167 36,172 36,162 30,166 30,154 30,154 30,154"/>
+ <polyline verts=" 44,130 41,137 45,136 43,150 48,142 48,157 53,150 52,164 60,156 61,169 64,165 66,175 70,167 74,176 77,168 80,183 85,172 90,182 93,174 98,181 99,173 104,175 105,169 114,168 102,163 95,157 94,166 90,154 87,162 82,149 75,159 72,148 68,155 67,143 62,148 62,138 58,145 56,133 52,142 52,128 49,134 47,125 44,130 44,130 44,130"/>
+ <polyline verts=" 13,216 19,219 36,231 22,223 16,222 22,227 12,224 13,220 16,220 13,216 13,216 13,216"/>
+ <polyline verts=" 10,231 14,236 25,239 27,237 19,234 10,231 10,231 10,231"/>
+ <polyline verts=" 9,245 14,242 25,245 13,245 9,245 9,245 9,245"/>
+ <polyline verts=" 33,255 26,253 18,254 25,256 18,258 27,260 18,263 27,265 19,267 29,270 21,272 29,276 21,278 30,281 22,283 31,287 24,288 32,292 23,293 34,298 26,299 37,303 32,305 39,309 33,309 39,314 34,314 40,318 34,317 40,321 34,321 41,326 33,326 40,330 33,332 39,333 33,337 42,337 54,341 49,337 52,335 47,330 50,330 45,325 49,325 45,321 48,321 45,316 46,306 45,286 43,274 36,261 33,255 33,255 33,255"/>
+ <polyline verts=" 7,358 9,351 14,351 17,359 11,364 7,358 7,358 7,358"/>
+ <polyline verts=" 44,354 49,351 52,355 49,361 44,354 44,354 44,354"/>
+ <polyline verts=" 32,357 37,353 40,358 36,361 32,357 32,357 32,357"/>
+ <polyline verts=" 139,334 145,330 154,330 158,334 154,341 152,348 145,350 149,340 147,336 141,339 139,345 136,342 136,339 139,334 139,334 139,334"/>
+ <polyline verts=" 208,259 215,259 212,255 220,259 224,263 225,274 224,283 220,292 208,300 206,308 203,304 199,315 197,309 195,318 193,313 190,322 190,316 185,325 182,318 180,325 172,321 178,320 176,313 186,312 180,307 188,307 184,303 191,302 186,299 195,294 187,290 197,288 192,286 201,283 194,280 203,277 198,275 207,271 200,269 209,265 204,265 212,262 208,259 208,259 208,259"/>
+ <polyline verts=" 106,126 106,131 109,132 111,134 115,132 115,135 119,133 118,137 123,137 128,137 133,134 136,130 136,127 132,124 118,128 112,128 106,126 106,126 106,126"/>
+ <polyline verts=" 107,114 101,110 98,102 105,97 111,98 119,102 121,108 118,112 113,115 107,114 107,114 107,114"/>
+ <polyline verts=" 148,106 145,110 146,116 150,118 152,111 151,107 148,106 148,106 148,106"/>
+ <polyline verts=" 80,55 70,52 75,58 63,57 72,61 57,61 67,66 57,67 62,69 54,71 61,73 54,77 63,78 53,85 60,84 56,90 69,84 63,82 75,76 70,75 77,72 72,71 78,69 72,66 81,67 78,64 82,63 80,60 86,62 80,55 80,55 80,55"/>
+ <polyline verts=" 87,56 91,52 96,50 102,56 98,56 92,60 87,56 87,56 87,56"/>
+ <polyline verts=" 85,68 89,73 98,76 106,74 96,73 91,70 85,68 85,68 85,68"/>
+ <polyline verts=" 115,57 114,64 111,64 115,75 122,81 122,74 126,79 126,74 131,78 130,72 133,77 131,68 126,61 119,57 115,57 115,57 115,57"/>
+ <polyline verts=" 145,48 143,53 147,59 151,59 150,55 145,48 145,48 145,48"/>
+ <polyline verts=" 26,22 34,15 43,10 52,10 59,16 47,15 32,22 26,22 26,22 26,22"/>
+ <polyline verts=" 160,19 152,26 149,34 154,33 152,30 157,30 155,26 158,27 157,23 161,23 160,19 160,19 160,19"/>
+</g>
+<g style="fill: #000000">
+ <polyline verts=" 98,117 105,122 109,122 105,117 113,120 121,120 130,112 128,108 123,103 123,99 128,101 132,106 135,109 142,105 142,101 145,101 145,91 148,101 145,105 136,112 135,116 143,124 148,120 150,122 142,128 133,122 121,125 112,126 103,125 100,129 96,124 98,117 98,117 98,117"/>
+ <polyline verts=" 146,118 152,118 152,115 149,115 146,118 146,118 146,118"/>
+ <polyline verts=" 148,112 154,111 154,109 149,109 148,112 148,112 148,112"/>
+ <polyline verts=" 106,112 108,115 114,116 118,114 106,112 106,112 106,112"/>
+ <polyline verts=" 108,108 111,110 116,110 119,108 108,108 108,108 108,108"/>
+ <polyline verts=" 106,104 109,105 117,106 115,104 106,104 106,104 106,104"/>
+ <polyline verts=" 50,25 41,26 34,33 39,43 49,58 36,51 47,68 55,69 54,59 61,57 74,46 60,52 67,42 57,48 61,40 54,45 60,36 59,29 48,38 52,30 47,32 50,25 50,25 50,25"/>
+ <polyline verts=" 147,34 152,41 155,49 161,53 157,47 164,47 158,43 168,44 159,40 164,37 169,37 164,33 169,34 165,28 170,30 170,25 173,29 175,27 176,32 173,36 175,39 172,42 172,46 168,49 170,55 162,57 158,63 155,58 153,50 149,46 147,34 147,34 147,34"/>
+ <polyline verts=" 155,71 159,80 157,93 157,102 155,108 150,101 149,93 154,101 152,91 151,83 155,79 155,71 155,71 155,71"/>
+ <polyline verts=" 112,78 115,81 114,91 112,87 113,82 112,78 112,78 112,78"/>
+ <polyline verts=" 78,28 64,17 58,11 47,9 36,10 28,16 21,26 18,41 20,51 23,61 33,65 28,68 37,74 36,81 43,87 48,90 43,100 40,98 39,90 31,80 30,72 22,71 17,61 14,46 16,28 23,17 33,9 45,6 54,6 65,12 78,28 78,28 78,28"/>
+ <polyline verts=" 67,18 76,9 87,5 101,2 118,3 135,8 149,20 149,26 144,19 132,12 121,9 105,7 89,8 76,14 70,20 67,18 67,18 67,18"/>
+ <polyline verts=" 56,98 48,106 56,103 47,112 56,110 52,115 57,113 52,121 62,115 58,123 65,119 63,125 69,121 68,127 74,125 74,129 79,128 83,132 94,135 93,129 85,127 81,122 76,126 75,121 71,124 71,117 66,121 66,117 62,117 64,112 60,113 60,110 57,111 61,105 57,107 60,101 55,102 56,98 56,98 56,98"/>
+ <polyline verts=" 101,132 103,138 106,134 106,139 112,136 111,142 115,139 114,143 119,142 125,145 131,142 135,138 140,134 140,129 143,135 145,149 150,171 149,184 145,165 141,150 136,147 132,151 131,149 126,152 125,150 121,152 117,148 111,152 110,148 105,149 104,145 98,150 96,138 94,132 94,130 98,132 101,132 101,132 101,132"/>
+ <polyline verts=" 41,94 32,110 23,132 12,163 6,190 7,217 5,236 3,247 9,230 12,211 12,185 18,160 26,134 35,110 43,99 41,94 41,94 41,94"/>
+ <polyline verts=" 32,246 41,250 50,257 52,267 53,295 53,323 59,350 54,363 51,365 44,366 42,360 40,372 54,372 59,366 62,353 71,352 75,335 73,330 66,318 68,302 64,294 67,288 63,286 63,279 59,275 58,267 56,262 50,247 42,235 44,246 32,236 35,244 32,246 32,246 32,246"/>
+ <polyline verts=" 134,324 146,320 159,322 173,327 179,337 179,349 172,355 158,357 170,350 174,343 170,333 163,328 152,326 134,329 134,324 134,324 134,324"/>
+ <polyline verts=" 173,339 183,334 184,338 191,329 194,332 199,323 202,325 206,318 209,320 213,309 221,303 228,296 232,289 234,279 233,269 230,262 225,256 219,253 208,252 198,252 210,249 223,250 232,257 237,265 238,277 238,291 232,305 221,323 218,335 212,342 200,349 178,348 173,339 173,339 173,339"/>
+ <polyline verts=" 165,296 158,301 156,310 156,323 162,324 159,318 162,308 162,304 165,296 165,296 165,296"/>
+ <polyline verts=" 99,252 105,244 107,234 115,228 121,228 131,235 122,233 113,235 109,246 121,239 133,243 121,243 110,251 99,252 99,252 99,252"/>
+ <polyline verts=" 117,252 124,247 134,249 136,253 126,252 117,252 117,252 117,252"/>
+ <polyline verts=" 117,218 132,224 144,233 140,225 132,219 117,218 117,218 117,218"/>
+ <polyline verts=" 122,212 134,214 143,221 141,213 132,210 122,212 122,212 122,212"/>
+ <polyline verts=" 69,352 70,363 76,373 86,378 97,379 108,379 120,377 128,378 132,373 135,361 133,358 132,366 127,375 121,374 121,362 119,367 117,374 110,376 110,362 107,357 106,371 104,375 97,376 90,375 90,368 86,362 83,364 86,369 85,373 78,370 73,362 71,351 69,352 69,352 69,352"/>
+ <polyline verts=" 100,360 96,363 99,369 102,364 100,360 100,360 100,360"/>
+ <polyline verts=" 115,360 112,363 114,369 117,364 115,360 115,360 115,360"/>
+ <polyline verts=" 127,362 125,364 126,369 128,365 127,362 127,362 127,362"/>
+ <polyline verts=" 5,255 7,276 11,304 15,320 13,334 6,348 2,353 0,363 5,372 12,374 25,372 38,372 44,369 42,367 36,368 31,369 30,360 27,368 20,370 16,361 15,368 10,369 3,366 3,359 6,352 11,348 17,331 19,316 12,291 9,274 5,255 5,255 5,255"/>
+ <polyline verts=" 10,358 7,362 10,366 11,362 10,358 10,358 10,358"/>
+ <polyline verts=" 25,357 22,360 24,366 27,360 25,357 25,357 25,357"/>
+ <polyline verts=" 37,357 34,361 36,365 38,361 37,357 37,357 37,357"/>
+ <polyline verts=" 49,356 46,359 47,364 50,360 49,356 49,356 49,356"/>
+ <polyline verts=" 130,101 132,102 135,101 139,102 143,103 142,101 137,100 133,100 130,101 130,101 130,101"/>
+ <polyline verts=" 106,48 105,52 108,56 109,52 106,48 106,48 106,48"/>
+ <polyline verts=" 139,52 139,56 140,60 142,58 141,56 139,52 139,52 139,52"/>
+ <polyline verts=" 25,349 29,351 30,355 33,350 37,348 42,351 45,347 49,345 44,343 36,345 25,349 25,349 25,349"/>
+ <polyline verts=" 98,347 105,351 107,354 109,349 115,349 120,353 118,349 113,346 104,346 98,347 98,347 98,347"/>
+ <polyline verts=" 83,348 87,352 87,357 89,351 87,348 83,348 83,348 83,348"/>
+ <polyline verts=" 155,107 163,107 170,107 186,108 175,109 155,109 155,107 155,107 155,107"/>
+ <polyline verts=" 153,114 162,113 175,112 192,114 173,114 154,115 153,114 153,114 153,114"/>
+ <polyline verts=" 152,118 164,120 180,123 197,129 169,123 151,120 152,118 152,118 152,118"/>
+ <polyline verts=" 68,109 87,106 107,106 106,108 88,108 68,109 68,109 68,109"/>
+ <polyline verts=" 105,111 95,112 79,114 71,116 85,115 102,113 105,111 105,111 105,111"/>
+ <polyline verts=" 108,101 98,99 87,99 78,99 93,100 105,102 108,101 108,101 108,101"/>
+ <polyline verts=" 85,63 91,63 97,60 104,60 108,62 111,69 112,75 110,74 108,71 103,73 106,69 105,65 103,64 103,67 102,70 99,70 97,66 94,67 97,72 88,67 84,66 85,63 85,63 85,63"/>
+ <polyline verts=" 140,74 141,66 144,61 150,61 156,62 153,70 150,73 152,65 150,65 151,68 149,71 146,71 144,66 143,70 143,74 140,74 140,74 140,74"/>
+ <polyline verts=" 146,20 156,11 163,9 172,9 178,14 182,18 184,32 182,42 182,52 177,58 176,67 171,76 165,90 157,105 160,92 164,85 168,78 167,73 173,66 172,62 175,59 174,55 177,53 180,46 181,29 179,21 173,13 166,11 159,13 153,18 148,23 146,20 146,20 146,20"/>
+ <polyline verts=" 150,187 148,211 150,233 153,247 148,267 135,283 125,299 136,292 131,313 122,328 122,345 129,352 133,359 133,367 137,359 148,356 140,350 131,347 129,340 132,332 140,328 137,322 140,304 154,265 157,244 155,223 161,220 175,229 186,247 185,260 176,275 178,287 185,277 188,261 196,253 189,236 174,213 150,187 150,187 150,187"/>
+ <polyline verts=" 147,338 142,341 143,345 141,354 147,343 147,338 147,338 147,338"/>
+ <polyline verts=" 157,342 156,349 150,356 157,353 163,346 162,342 157,342 157,342 157,342"/>
+ <polyline verts=" 99,265 96,284 92,299 73,339 73,333 87,300 99,265 99,265 99,265"/>
+</g></svg>
diff --git a/result/svg1.rdr b/result/svg1.rdr
new file mode 100644
index 0000000..91497d2
--- /dev/null
+++ b/result/svg1.rdr
@@ -0,0 +1,477 @@
+0 10 svg 0 0
+0 1 svg 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+0 15 svg 0 0
diff --git a/result/svg1.sax b/result/svg1.sax
new file mode 100644
index 0000000..b09f01f
--- /dev/null
+++ b/result/svg1.sax
@@ -0,0 +1,613 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(svg, -//W3C//DTD SVG April 1999//EN, http://www.w3.org/Graphics/SVG/svg-19990412.dtd)
+SAX.externalSubset(svg, -//W3C//DTD SVG April 1999//EN, http://www.w3.org/Graphics/SVG/svg-19990412.dtd)
+SAX.startElement(svg, width='242px', height='383px')
+SAX.characters(
+, 1)
+SAX.startElement(g, style='stroke: #000000')
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #f2cc99')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 69,18 82,8 99,3 118,5 135,12 149,21 156,13 165,9 177,13 183,28 180,50 164,91 155,107 154,114 151,121 141,127 139,136 155,206 157,251 126,342 133,357 128,376 83,376 75,368 67,350 61,350 53,369 4,369 2,361 5,354 12,342 16,321 4,257 4,244 7,218 9,179 26,127 43,93 32,77 30,70 24,67 16,49 17,35 18,23 30,12 40,7 53,7 62,12 69,18 69,18 69,18')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #e5b27f')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 142,79 136,74 138,82 133,78 133,84 127,78 128,85 124,80 125,87 119,82 119,90 125,99 125,96 128,100 128,94 131,98 132,93 135,97 136,93 138,97 139,94 141,98 143,94 144,85 142,79 142,79 142,79')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #eb8080')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 127,101 132,100 137,99 144,101 143,105 135,110 127,101 127,101 127,101')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #f2cc99')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 178,229 157,248 139,296 126,349 137,356 158,357 183,342 212,332 235,288 235,261 228,252 212,250 188,251 178,229 178,229 178,229')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #9c826b')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 56,229 48,241 48,250 57,281 63,325 71,338 81,315 76,321 79,311 83,301 75,308 80,298 73,303 76,296 71,298 74,292 69,293 74,284 78,278 71,278 74,274 68,273 70,268 66,267 68,261 60,266 62,259 65,253 57,258 59,251 55,254 55,248 60,237 54,240 58,234 54,236 56,229 56,229 56,229')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 74,363 79,368 81,368 85,362 89,363 92,370 96,373 101,372 108,361 110,371 113,373 116,371 120,358 122,363 123,371 126,371 129,367 132,357 135,361 130,376 127,377 94,378 84,376 76,371 74,363 74,363 74,363')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 212,250 219,251 228,258 236,270 235,287 225,304 205,332 177,343 171,352 158,357 166,352 168,346 168,339 165,333 155,327 155,323 161,320 165,316 169,316 167,312 171,313 168,308 173,309 170,306 177,306 175,308 177,311 174,311 176,316 171,315 174,319 168,320 168,323 175,327 179,332 183,326 184,332 189,323 190,328 194,320 194,325 199,316 201,320 204,313 206,316 208,310 211,305 219,298 226,288 229,279 228,266 224,259 217,253 212,250 212,250 212,250')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 151,205 151,238 149,252 141,268 128,282 121,301 130,300 126,313 118,324 116,337 120,346 133,352 133,340 137,333 145,329 156,327 153,319 153,291 157,271 170,259 178,277 193,250 174,216 151,205 151,205 151,205')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 78,127 90,142 95,155 108,164 125,167 139,175 150,206 152,191 141,140 121,148 100,136 78,127 78,127 78,127')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 21,58 35,63 38,68 32,69 42,74 40,79 47,80 54,83 45,94 34,81 32,73 24,66 21,58 21,58 21,58')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 71,34 67,34 66,27 59,24 54,17 48,17 39,22 30,26 28,31 31,39 38,46 29,45 36,54 41,61 41,70 50,69 54,71 55,58 67,52 76,43 76,39 68,44 71,34 71,34 71,34')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 139,74 141,83 143,89 144,104 148,104 155,106 154,86 157,77 155,72 150,77 144,77 139,74 139,74 139,74')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 105,44 102,53 108,58 111,62 112,55 105,44 105,44 105,44')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 141,48 141,54 144,58 139,62 137,66 136,59 137,52 141,48 141,48 141,48')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 98,135 104,130 105,134 108,132 108,135 112,134 113,137 116,136 116,139 119,139 124,141 128,140 133,138 140,133 139,140 126,146 104,144 98,135 98,135 98,135')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 97,116 103,119 103,116 111,118 116,117 122,114 127,107 135,111 142,107 141,114 145,118 149,121 145,125 140,124 127,121 113,125 100,124 97,116 97,116 97,116')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 147,33 152,35 157,34 153,31 160,31 156,28 161,28 159,24 163,25 163,21 165,22 170,23 167,17 172,21 174,18 175,23 176,22 177,28 177,33 174,37 176,39 174,44 171,49 168,53 164,57 159,68 156,70 154,60 150,51 146,43 144,35 147,33 147,33 147,33')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 85,72 89,74 93,75 100,76 105,75 102,79 94,79 88,76 85,72 85,72 85,72')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 86,214 79,221 76,232 82,225 78,239 82,234 78,245 81,243 79,255 84,250 84,267 87,254 90,271 90,257 95,271 93,256 95,249 92,252 93,243 89,253 89,241 86,250 87,236 83,245 87,231 82,231 90,219 84,221 86,214 86,214 86,214')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #ffcc7f')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 93,68 96,72 100,73 106,72 108,66 105,63 100,62 93,68 93,68 93,68')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 144,64 142,68 142,73 146,74 150,73 154,64 149,62 144,64 144,64 144,64')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #9c826b')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 57,91 42,111 52,105 41,117 53,112 46,120 53,116 50,124 57,119 55,127 61,122 60,130 67,126 66,134 71,129 72,136 77,130 76,137 80,133 82,138 86,135 96,135 94,129 86,124 83,117 77,123 79,117 73,120 75,112 68,116 71,111 65,114 69,107 63,110 68,102 61,107 66,98 61,103 63,97 57,99 57,91 57,91 57,91')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 83,79 76,79 67,82 75,83 65,88 76,87 65,92 76,91 68,96 77,95 70,99 80,98 72,104 80,102 76,108 85,103 92,101 87,98 93,96 86,94 91,93 85,91 93,89 99,89 105,93 107,85 102,82 92,80 83,79 83,79 83,79')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 109,77 111,83 109,89 113,94 117,90 117,81 114,78 109,77 109,77 109,77')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 122,128 127,126 134,127 136,129 134,130 130,128 124,129 122,128 122,128 122,128')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 78,27 82,32 80,33 82,36 78,37 82,40 78,42 81,46 76,47 78,49 74,50 82,52 87,50 83,48 91,46 86,45 91,42 88,40 92,37 86,34 90,31 86,29 89,26 78,27 78,27 78,27')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 82,17 92,20 79,21 90,25 81,25 94,28 93,26 101,30 101,26 107,33 108,28 111,40 113,34 115,45 117,39 119,54 121,46 124,58 126,47 129,59 130,49 134,58 133,44 137,48 133,37 137,40 133,32 126,20 135,26 132,19 138,23 135,17 142,18 132,11 116,6 94,6 78,11 92,12 80,14 90,16 82,17 82,17 82,17')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 142,234 132,227 124,223 115,220 110,225 118,224 127,229 135,236 122,234 115,237 113,242 121,238 139,243 121,245 111,254 95,254 102,244 104,235 110,229 100,231 104,224 113,216 122,215 132,217 141,224 145,230 149,240 142,234 142,234 142,234')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 115,252 125,248 137,249 143,258 134,255 125,254 115,252 115,252 115,252')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 114,212 130,213 140,219 147,225 144,214 137,209 128,207 114,212 114,212 114,212')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 102,263 108,258 117,257 131,258 116,260 109,265 102,263 102,263 102,263')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 51,241 35,224 40,238 23,224 31,242 19,239 28,247 17,246 25,250 37,254 39,263 44,271 47,294 48,317 51,328 60,351 60,323 53,262 47,246 51,241 51,241 51,241')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 2,364 9,367 14,366 18,355 20,364 26,366 31,357 35,364 39,364 42,357 47,363 53,360 59,357 54,369 7,373 2,364 2,364 2,364')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 7,349 19,345 25,339 18,341 23,333 28,326 23,326 27,320 23,316 25,311 20,298 15,277 12,264 9,249 10,223 3,248 5,261 15,307 17,326 11,343 7,349 7,349 7,349')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 11,226 15,231 25,236 18,227 11,226 11,226 11,226')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 13,214 19,217 32,227 23,214 16,208 15,190 24,148 31,121 24,137 14,170 8,189 13,214 13,214 13,214')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 202,254 195,258 199,260 193,263 197,263 190,268 196,268 191,273 188,282 200,272 194,272 201,266 197,265 204,262 200,258 204,256 202,254 202,254 202,254')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #845433')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 151,213 165,212 179,225 189,246 187,262 179,275 176,263 177,247 171,233 163,230 165,251 157,264 146,298 145,321 133,326 143,285 154,260 153,240 151,213 151,213 151,213')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 91,132 95,145 97,154 104,148 107,155 109,150 111,158 115,152 118,159 120,153 125,161 126,155 133,164 132,154 137,163 137,152 142,163 147,186 152,192 148,167 141,143 124,145 105,143 91,132 91,132 91,132')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #9c826b')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 31,57 23,52 26,51 20,44 23,42 21,36 22,29 25,23 24,32 30,43 26,41 30,50 26,48 31,57 31,57 31,57')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 147,21 149,28 155,21 161,16 167,14 175,15 173,11 161,9 147,21 147,21 147,21')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 181,39 175,51 169,57 171,65 165,68 165,75 160,76 162,91 171,71 180,51 181,39 181,39 181,39')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 132,346 139,348 141,346 142,341 147,342 143,355 133,350 132,346 132,346 132,346')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 146,355 151,352 155,348 157,343 160,349 151,356 147,357 146,355 146,355 146,355')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 99,266 100,281 94,305 86,322 78,332 72,346 73,331 91,291 99,266 99,266 99,266')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 20,347 32,342 45,340 54,345 45,350 42,353 38,350 31,353 29,356 23,350 19,353 15,349 20,347 20,347 20,347')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 78,344 86,344 92,349 88,358 84,352 78,344 78,344 78,344')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 93,347 104,344 117,345 124,354 121,357 116,351 112,351 108,355 102,351 93,347 93,347 93,347')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 105,12 111,18 113,24 113,29 119,34 116,23 112,16 105,12 105,12 105,12')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 122,27 125,34 127,43 128,34 125,29 122,27 122,27 122,27')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 115,13 122,19 122,15 113,10 115,13 115,13 115,13')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #ffe5b2')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 116,172 107,182 98,193 98,183 90,199 89,189 84,207 88,206 87,215 95,206 93,219 91,230 98,216 97,226 104,214 112,209 104,208 113,202 126,200 139,207 132,198 142,203 134,192 142,195 134,187 140,185 130,181 136,177 126,177 125,171 116,180 116,172 116,172 116,172')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 74,220 67,230 67,221 59,235 63,233 60,248 70,232 65,249 71,243 67,256 73,250 69,262 73,259 71,267 76,262 72,271 78,270 76,275 82,274 78,290 86,279 86,289 92,274 88,275 87,264 82,270 82,258 77,257 78,247 73,246 77,233 72,236 74,220 74,220 74,220')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 133,230 147,242 148,250 145,254 138,247 129,246 142,245 138,241 128,237 137,238 133,230 133,230 133,230')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 133,261 125,261 116,263 111,267 125,265 133,261 133,261 133,261')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 121,271 109,273 103,279 99,305 92,316 85,327 83,335 89,340 97,341 94,336 101,336 96,331 103,330 97,327 108,325 99,322 109,321 100,318 110,317 105,314 110,312 107,310 113,308 105,306 114,303 105,301 115,298 107,295 115,294 108,293 117,291 109,289 117,286 109,286 118,283 112,281 118,279 114,278 119,276 115,274 121,271 121,271 121,271')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 79,364 74,359 74,353 76,347 80,351 83,356 82,360 79,364 79,364 79,364')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 91,363 93,356 97,353 103,355 105,360 103,366 99,371 94,368 91,363 91,363 91,363')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 110,355 114,353 118,357 117,363 113,369 111,362 110,355 110,355 110,355')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 126,354 123,358 124,367 126,369 129,361 129,357 126,354 126,354 126,354')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 30,154 24,166 20,182 23,194 29,208 37,218 41,210 41,223 46,214 46,227 52,216 52,227 61,216 59,225 68,213 73,219 70,207 77,212 69,200 77,202 70,194 78,197 68,187 76,182 64,182 58,175 58,185 53,177 50,186 46,171 44,182 39,167 36,172 36,162 30,166 30,154 30,154 30,154')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 44,130 41,137 45,136 43,150 48,142 48,157 53,150 52,164 60,156 61,169 64,165 66,175 70,167 74,176 77,168 80,183 85,172 90,182 93,174 98,181 99,173 104,175 105,169 114,168 102,163 95,157 94,166 90,154 87,162 82,149 75,159 72,148 68,155 67,143 62,148 62,138 58,145 56,133 52,142 52,128 49,134 47,125 44,130 44,130 44,130')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 13,216 19,219 36,231 22,223 16,222 22,227 12,224 13,220 16,220 13,216 13,216 13,216')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 10,231 14,236 25,239 27,237 19,234 10,231 10,231 10,231')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 9,245 14,242 25,245 13,245 9,245 9,245 9,245')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 33,255 26,253 18,254 25,256 18,258 27,260 18,263 27,265 19,267 29,270 21,272 29,276 21,278 30,281 22,283 31,287 24,288 32,292 23,293 34,298 26,299 37,303 32,305 39,309 33,309 39,314 34,314 40,318 34,317 40,321 34,321 41,326 33,326 40,330 33,332 39,333 33,337 42,337 54,341 49,337 52,335 47,330 50,330 45,325 49,325 45,321 48,321 45,316 46,306 45,286 43,274 36,261 33,255 33,255 33,255')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 7,358 9,351 14,351 17,359 11,364 7,358 7,358 7,358')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 44,354 49,351 52,355 49,361 44,354 44,354 44,354')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 32,357 37,353 40,358 36,361 32,357 32,357 32,357')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 139,334 145,330 154,330 158,334 154,341 152,348 145,350 149,340 147,336 141,339 139,345 136,342 136,339 139,334 139,334 139,334')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 208,259 215,259 212,255 220,259 224,263 225,274 224,283 220,292 208,300 206,308 203,304 199,315 197,309 195,318 193,313 190,322 190,316 185,325 182,318 180,325 172,321 178,320 176,313 186,312 180,307 188,307 184,303 191,302 186,299 195,294 187,290 197,288 192,286 201,283 194,280 203,277 198,275 207,271 200,269 209,265 204,265 212,262 208,259 208,259 208,259')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 106,126 106,131 109,132 111,134 115,132 115,135 119,133 118,137 123,137 128,137 133,134 136,130 136,127 132,124 118,128 112,128 106,126 106,126 106,126')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 107,114 101,110 98,102 105,97 111,98 119,102 121,108 118,112 113,115 107,114 107,114 107,114')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 148,106 145,110 146,116 150,118 152,111 151,107 148,106 148,106 148,106')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 80,55 70,52 75,58 63,57 72,61 57,61 67,66 57,67 62,69 54,71 61,73 54,77 63,78 53,85 60,84 56,90 69,84 63,82 75,76 70,75 77,72 72,71 78,69 72,66 81,67 78,64 82,63 80,60 86,62 80,55 80,55 80,55')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 87,56 91,52 96,50 102,56 98,56 92,60 87,56 87,56 87,56')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 85,68 89,73 98,76 106,74 96,73 91,70 85,68 85,68 85,68')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 115,57 114,64 111,64 115,75 122,81 122,74 126,79 126,74 131,78 130,72 133,77 131,68 126,61 119,57 115,57 115,57 115,57')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 145,48 143,53 147,59 151,59 150,55 145,48 145,48 145,48')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 26,22 34,15 43,10 52,10 59,16 47,15 32,22 26,22 26,22 26,22')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 160,19 152,26 149,34 154,33 152,30 157,30 155,26 158,27 157,23 161,23 160,19 160,19 160,19')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 98,117 105,122 109,122 105,117 113,120 121,120 130,112 128,108 123,103 123,99 128,101 132,106 135,109 142,105 142,101 145,101 145,91 148,101 145,105 136,112 135,116 143,124 148,120 150,122 142,128 133,122 121,125 112,126 103,125 100,129 96,124 98,117 98,117 98,117')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 146,118 152,118 152,115 149,115 146,118 146,118 146,118')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 148,112 154,111 154,109 149,109 148,112 148,112 148,112')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 106,112 108,115 114,116 118,114 106,112 106,112 106,112')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 108,108 111,110 116,110 119,108 108,108 108,108 108,108')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 106,104 109,105 117,106 115,104 106,104 106,104 106,104')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 50,25 41,26 34,33 39,43 49,58 36,51 47,68 55,69 54,59 61,57 74,46 60,52 67,42 57,48 61,40 54,45 60,36 59,29 48,38 52,30 47,32 50,25 50,25 50,25')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 147,34 152,41 155,49 161,53 157,47 164,47 158,43 168,44 159,40 164,37 169,37 164,33 169,34 165,28 170,30 170,25 173,29 175,27 176,32 173,36 175,39 172,42 172,46 168,49 170,55 162,57 158,63 155,58 153,50 149,46 147,34 147,34 147,34')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 155,71 159,80 157,93 157,102 155,108 150,101 149,93 154,101 152,91 151,83 155,79 155,71 155,71 155,71')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 112,78 115,81 114,91 112,87 113,82 112,78 112,78 112,78')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 78,28 64,17 58,11 47,9 36,10 28,16 21,26 18,41 20,51 23,61 33,65 28,68 37,74 36,81 43,87 48,90 43,100 40,98 39,90 31,80 30,72 22,71 17,61 14,46 16,28 23,17 33,9 45,6 54,6 65,12 78,28 78,28 78,28')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 67,18 76,9 87,5 101,2 118,3 135,8 149,20 149,26 144,19 132,12 121,9 105,7 89,8 76,14 70,20 67,18 67,18 67,18')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 56,98 48,106 56,103 47,112 56,110 52,115 57,113 52,121 62,115 58,123 65,119 63,125 69,121 68,127 74,125 74,129 79,128 83,132 94,135 93,129 85,127 81,122 76,126 75,121 71,124 71,117 66,121 66,117 62,117 64,112 60,113 60,110 57,111 61,105 57,107 60,101 55,102 56,98 56,98 56,98')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 101,132 103,138 106,134 106,139 112,136 111,142 115,139 114,143 119,142 125,145 131,142 135,138 140,134 140,129 143,135 145,149 150,171 149,184 145,165 141,150 136,147 132,151 131,149 126,152 125,150 121,152 117,148 111,152 110,148 105,149 104,145 98,150 96,138 94,132 94,130 98,132 101,132 101,132 101,132')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 41,94 32,110 23,132 12,163 6,190 7,217 5,236 3,247 9,230 12,211 12,185 18,160 26,134 35,110 43,99 41,94 41,94 41,94')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 32,246 41,250 50,257 52,267 53,295 53,323 59,350 54,363 51,365 44,366 42,360 40,372 54,372 59,366 62,353 71,352 75,335 73,330 66,318 68,302 64,294 67,288 63,286 63,279 59,275 58,267 56,262 50,247 42,235 44,246 32,236 35,244 32,246 32,246 32,246')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 134,324 146,320 159,322 173,327 179,337 179,349 172,355 158,357 170,350 174,343 170,333 163,328 152,326 134,329 134,324 134,324 134,324')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 173,339 183,334 184,338 191,329 194,332 199,323 202,325 206,318 209,320 213,309 221,303 228,296 232,289 234,279 233,269 230,262 225,256 219,253 208,252 198,252 210,249 223,250 232,257 237,265 238,277 238,291 232,305 221,323 218,335 212,342 200,349 178,348 173,339 173,339 173,339')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 165,296 158,301 156,310 156,323 162,324 159,318 162,308 162,304 165,296 165,296 165,296')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 99,252 105,244 107,234 115,228 121,228 131,235 122,233 113,235 109,246 121,239 133,243 121,243 110,251 99,252 99,252 99,252')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 117,252 124,247 134,249 136,253 126,252 117,252 117,252 117,252')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 117,218 132,224 144,233 140,225 132,219 117,218 117,218 117,218')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 122,212 134,214 143,221 141,213 132,210 122,212 122,212 122,212')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 69,352 70,363 76,373 86,378 97,379 108,379 120,377 128,378 132,373 135,361 133,358 132,366 127,375 121,374 121,362 119,367 117,374 110,376 110,362 107,357 106,371 104,375 97,376 90,375 90,368 86,362 83,364 86,369 85,373 78,370 73,362 71,351 69,352 69,352 69,352')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 100,360 96,363 99,369 102,364 100,360 100,360 100,360')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 115,360 112,363 114,369 117,364 115,360 115,360 115,360')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 127,362 125,364 126,369 128,365 127,362 127,362 127,362')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 5,255 7,276 11,304 15,320 13,334 6,348 2,353 0,363 5,372 12,374 25,372 38,372 44,369 42,367 36,368 31,369 30,360 27,368 20,370 16,361 15,368 10,369 3,366 3,359 6,352 11,348 17,331 19,316 12,291 9,274 5,255 5,255 5,255')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 10,358 7,362 10,366 11,362 10,358 10,358 10,358')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 25,357 22,360 24,366 27,360 25,357 25,357 25,357')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 37,357 34,361 36,365 38,361 37,357 37,357 37,357')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 49,356 46,359 47,364 50,360 49,356 49,356 49,356')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 130,101 132,102 135,101 139,102 143,103 142,101 137,100 133,100 130,101 130,101 130,101')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 106,48 105,52 108,56 109,52 106,48 106,48 106,48')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 139,52 139,56 140,60 142,58 141,56 139,52 139,52 139,52')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 25,349 29,351 30,355 33,350 37,348 42,351 45,347 49,345 44,343 36,345 25,349 25,349 25,349')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 98,347 105,351 107,354 109,349 115,349 120,353 118,349 113,346 104,346 98,347 98,347 98,347')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 83,348 87,352 87,357 89,351 87,348 83,348 83,348 83,348')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 155,107 163,107 170,107 186,108 175,109 155,109 155,107 155,107 155,107')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 153,114 162,113 175,112 192,114 173,114 154,115 153,114 153,114 153,114')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 152,118 164,120 180,123 197,129 169,123 151,120 152,118 152,118 152,118')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 68,109 87,106 107,106 106,108 88,108 68,109 68,109 68,109')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 105,111 95,112 79,114 71,116 85,115 102,113 105,111 105,111 105,111')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 108,101 98,99 87,99 78,99 93,100 105,102 108,101 108,101 108,101')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 85,63 91,63 97,60 104,60 108,62 111,69 112,75 110,74 108,71 103,73 106,69 105,65 103,64 103,67 102,70 99,70 97,66 94,67 97,72 88,67 84,66 85,63 85,63 85,63')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 140,74 141,66 144,61 150,61 156,62 153,70 150,73 152,65 150,65 151,68 149,71 146,71 144,66 143,70 143,74 140,74 140,74 140,74')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 146,20 156,11 163,9 172,9 178,14 182,18 184,32 182,42 182,52 177,58 176,67 171,76 165,90 157,105 160,92 164,85 168,78 167,73 173,66 172,62 175,59 174,55 177,53 180,46 181,29 179,21 173,13 166,11 159,13 153,18 148,23 146,20 146,20 146,20')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 150,187 148,211 150,233 153,247 148,267 135,283 125,299 136,292 131,313 122,328 122,345 129,352 133,359 133,367 137,359 148,356 140,350 131,347 129,340 132,332 140,328 137,322 140,304 154,265 157,244 155,223 161,220 175,229 186,247 185,260 176,275 178,287 185,277 188,261 196,253 189,236 174,213 150,187 150,187 150,187')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 147,338 142,341 143,345 141,354 147,343 147,338 147,338 147,338')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 157,342 156,349 150,356 157,353 163,346 162,342 157,342 157,342 157,342')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 99,265 96,284 92,299 73,339 73,333 87,300 99,265 99,265 99,265')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.endElement(svg)
+SAX.endDocument()
diff --git a/result/svg2 b/result/svg2
new file mode 100644
index 0000000..6c3990c
--- /dev/null
+++ b/result/svg2
@@ -0,0 +1,56 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="268px" height="207px">
+<g style="stroke: #000000">
+ <path d=" M 29 28 "/>
+ <path d=" L 19 74 "/>
+</g>
+<g style="stroke: #800040">
+ <polyline verts=" 32,100 72,50 90,82 73,16 120,64 152,9 177,107"/>
+</g>
+<g style="stroke: #000000">
+</g>
+<g style="stroke: #0000ff">
+ <rect x="30" y="101" width="51" height="33"/>
+</g>
+<g style="fill: #0000ff">
+ <ellipse cx="182" cy="127" major="37" minor="31" angle="90"/>
+</g>
+<g style="fill: #ff0000">
+ <polyline verts=" 78,180 76,151 131,149 136,182 135,182 134,183 127,185 117,186 109,192 104,194 98,199 96,200 95,201 94,202 92,202 85,202 70,200 54,199 47,198 46,197 45,197 37,195 26,193 17,187 9,181 8,181 7,176 6,175 6,173 6,172 6,170 8,164 8,163 8,162 9,162 10,162 11,162 13,162 20,162 26,162 27,162 28,162 30,162 30,163 31,163 32,164 34,166 35,166 36,167 36,168 37,169 38,169 39,169 41,170 43,170 45,170 47,170 49,170 50,168 50,161 50,160 50,159 47,162 78,180"/>
+ <g>
+ <desc> Java Font definition:Dialog 0</desc>
+ </g>
+ <g>
+ <desc> Java Font definition:Helvetica 0</desc>
+ </g>
+</g>
+<g style="stroke: #000000">
+ <text x="188" y="36">this is text</text>
+</g>
+<g style="stroke: #000000">
+ <g>
+ <desc> Java Font definition:Dialog 0</desc>
+ </g>
+ <g>
+ <desc> Java Font definition:Helvetica 700</desc>
+ </g>
+</g>
+<g style="stroke: #008080">
+ <text x="176" y="85">sadfsadfsad</text>
+</g>
+<g style="stroke: #000000">
+</g>
+<g style="fill: #800040">
+ <ellipse cx="208" cy="180" major="45" minor="31" angle="0"/>
+</g>
+<g style="stroke: #000000">
+</g>
+<g style="fill: #ffffff">
+ <g>
+ <desc> Java Font definition:Dialog 700</desc>
+ </g>
+ <g>
+ <desc> Java Font definition:Dialog 700</desc>
+ </g>
+</g></svg>
diff --git a/result/svg2.rdr b/result/svg2.rdr
new file mode 100644
index 0000000..1eab152
--- /dev/null
+++ b/result/svg2.rdr
@@ -0,0 +1,178 @@
+0 10 svg 0 0
+0 1 svg 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 rect 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 ellipse 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 polyline 1 0
+2 14 #text 0 1
+
+2 1 g 0 0
+3 14 #text 0 1
+
+3 1 desc 0 0
+4 3 #text 0 1 Java Font definition:Dialog 0
+3 15 desc 0 0
+3 14 #text 0 1
+
+2 15 g 0 0
+2 14 #text 0 1
+
+2 1 g 0 0
+3 14 #text 0 1
+
+3 1 desc 0 0
+4 3 #text 0 1 Java Font definition:Helvetica 0
+3 15 desc 0 0
+3 14 #text 0 1
+
+2 15 g 0 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 text 0 0
+3 3 #text 0 1 this is text
+2 15 text 0 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 g 0 0
+3 14 #text 0 1
+
+3 1 desc 0 0
+4 3 #text 0 1 Java Font definition:Dialog 0
+3 15 desc 0 0
+3 14 #text 0 1
+
+2 15 g 0 0
+2 14 #text 0 1
+
+2 1 g 0 0
+3 14 #text 0 1
+
+3 1 desc 0 0
+4 3 #text 0 1 Java Font definition:Helvetica 700
+3 15 desc 0 0
+3 14 #text 0 1
+
+2 15 g 0 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 text 0 0
+3 3 #text 0 1 sadfsadfsad
+2 15 text 0 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 ellipse 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 g 0 0
+3 14 #text 0 1
+
+3 1 desc 0 0
+4 3 #text 0 1 Java Font definition:Dialog 700
+3 15 desc 0 0
+3 14 #text 0 1
+
+2 15 g 0 0
+2 14 #text 0 1
+
+2 1 g 0 0
+3 14 #text 0 1
+
+3 1 desc 0 0
+4 3 #text 0 1 Java Font definition:Dialog 700
+3 15 desc 0 0
+3 14 #text 0 1
+
+2 15 g 0 0
+2 14 #text 0 1
+
+1 15 g 0 0
+0 15 svg 0 0
diff --git a/result/svg2.sax b/result/svg2.sax
new file mode 100644
index 0000000..0134545
--- /dev/null
+++ b/result/svg2.sax
@@ -0,0 +1,189 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(svg, -//W3C//DTD SVG April 1999//EN, http://www.w3.org/Graphics/SVG/svg-19990412.dtd)
+SAX.externalSubset(svg, -//W3C//DTD SVG April 1999//EN, http://www.w3.org/Graphics/SVG/svg-19990412.dtd)
+SAX.startElement(svg, width='268px', height='207px')
+SAX.characters(
+, 1)
+SAX.startElement(g, style='stroke: #000000')
+SAX.characters(
+ , 5)
+SAX.startElement(path, d=' M 29 28 ')
+SAX.endElement(path)
+SAX.characters(
+ , 5)
+SAX.startElement(path, d=' L 19 74 ')
+SAX.endElement(path)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='stroke: #800040')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 32,100 72,50 90,82 73,16 120,64 152,9 177,107')
+SAX.endElement(polyline)
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='stroke: #000000')
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='stroke: #0000ff')
+SAX.characters(
+ , 5)
+SAX.startElement(rect, x='30', y='101', width='51', height='33')
+SAX.endElement(rect)
+SAX.characters(
+, 1)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #0000ff')
+SAX.characters(
+ , 5)
+SAX.startElement(ellipse, cx='182', cy='127', major='37', minor='31', angle='90')
+SAX.endElement(ellipse)
+SAX.characters(
+, 1)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #ff0000')
+SAX.characters(
+ , 5)
+SAX.startElement(polyline, verts=' 78,180 76,151 131,149 136,182 135,182 134,183 127,185 117,186 109,192 104,194 98,199 96,200 95,201 94,202 92,202 85,202 70,200 54,199 47,198 46,197 45,197 37,195 26,193 17,187 9,181 8,181 7,176 6,175 6,173 6,172 6,170 8,164 8,163 8,162 9,162 10,162 11,162 13,162 20,162 26,162 27,162 28,162 30,162 30,163 31,163 32,164 34,166 35,166 36,167 36,168 37,169 38,169 39,169 41,170 43,170 45,170 47,170 49,170 50,168 50,161 50,160 50,159 47,162 78,180')
+SAX.endElement(polyline)
+SAX.characters(
+ , 5)
+SAX.startElement(g)
+SAX.characters(
+ , 6)
+SAX.startElement(desc)
+SAX.characters( Java Font definition:Dialog 0, 30)
+SAX.endElement(desc)
+SAX.characters(
+ , 5)
+SAX.endElement(g)
+SAX.characters(
+ , 4)
+SAX.startElement(g)
+SAX.characters(
+ , 6)
+SAX.startElement(desc)
+SAX.characters( Java Font definition:Helvetic, 33)
+SAX.endElement(desc)
+SAX.characters(
+ , 5)
+SAX.endElement(g)
+SAX.characters(
+, 1)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='stroke: #000000')
+SAX.characters(
+ , 5)
+SAX.startElement(text, x='188', y='36')
+SAX.characters(this is text, 12)
+SAX.endElement(text)
+SAX.characters(
+, 1)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='stroke: #000000')
+SAX.characters(
+ , 5)
+SAX.startElement(g)
+SAX.characters(
+ , 6)
+SAX.startElement(desc)
+SAX.characters( Java Font definition:Dialog 0, 30)
+SAX.endElement(desc)
+SAX.characters(
+ , 5)
+SAX.endElement(g)
+SAX.characters(
+ , 4)
+SAX.startElement(g)
+SAX.characters(
+ , 6)
+SAX.startElement(desc)
+SAX.characters( Java Font definition:Helvetic, 35)
+SAX.endElement(desc)
+SAX.characters(
+ , 5)
+SAX.endElement(g)
+SAX.characters(
+, 1)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='stroke: #008080')
+SAX.characters(
+ , 5)
+SAX.startElement(text, x='176', y='85')
+SAX.characters(sadfsadfsad, 11)
+SAX.endElement(text)
+SAX.characters(
+, 1)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='stroke: #000000')
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #800040')
+SAX.characters(
+ , 5)
+SAX.startElement(ellipse, cx='208', cy='180', major='45', minor='31', angle='0')
+SAX.endElement(ellipse)
+SAX.characters(
+, 1)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='stroke: #000000')
+SAX.characters(
+, 2)
+SAX.endElement(g)
+SAX.characters(
+, 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 5)
+SAX.startElement(g)
+SAX.characters(
+ , 6)
+SAX.startElement(desc)
+SAX.characters( Java Font definition:Dialog 7, 32)
+SAX.endElement(desc)
+SAX.characters(
+ , 5)
+SAX.endElement(g)
+SAX.characters(
+ , 4)
+SAX.startElement(g)
+SAX.characters(
+ , 6)
+SAX.startElement(desc)
+SAX.characters( Java Font definition:Dialog 7, 32)
+SAX.endElement(desc)
+SAX.characters(
+ , 5)
+SAX.endElement(g)
+SAX.characters(
+, 1)
+SAX.endElement(g)
+SAX.endElement(svg)
+SAX.endDocument()
diff --git a/result/svg3 b/result/svg3
new file mode 100644
index 0000000..c4994b8
--- /dev/null
+++ b/result/svg3
@@ -0,0 +1,723 @@
+<?xml version="1.0"?>
+<svg>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M77.696 284.285C77.696 284.285 77.797 286.179 76.973 286.16C76.149 286.141 59.695 238.066 39.167 240.309C39.167 240.309 56.95 232.956 77.696 284.285z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M81.226 281.262C81.226 281.262 80.677 283.078 79.908 282.779C79.14 282.481 80.023 231.675 59.957 226.801C59.957 226.801 79.18 225.937 81.226 281.262z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M108.716 323.59C108.716 323.59 110.352 324.55 109.882 325.227C109.411 325.904 60.237 313.102 50.782 331.459C50.782 331.459 54.461 312.572 108.716 323.59z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M105.907 333.801C105.907 333.801 107.763 334.197 107.529 334.988C107.296 335.779 56.593 339.121 53.403 359.522C53.403 359.522 50.945 340.437 105.907 333.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M101.696 328.276C101.696 328.276 103.474 328.939 103.128 329.687C102.782 330.435 52.134 326.346 46.002 346.064C46.002 346.064 46.354 326.825 101.696 328.276z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M90.991 310.072C90.991 310.072 92.299 311.446 91.66 311.967C91.021 312.488 47.278 286.634 33.131 301.676C33.131 301.676 41.872 284.533 90.991 310.072z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M83.446 314.263C83.446 314.263 84.902 315.48 84.326 316.071C83.75 316.661 37.362 295.922 25.008 312.469C25.008 312.469 31.753 294.447 83.446 314.263z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M80.846 318.335C80.846 318.335 82.454 319.343 81.964 320.006C81.474 320.669 32.692 306.446 22.709 324.522C22.709 324.522 26.934 305.749 80.846 318.335z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M91.58 318.949C91.58 318.949 92.702 320.48 92.001 320.915C91.3 321.35 51.231 290.102 35.273 303.207C35.273 303.207 46.138 287.326 91.58 318.949z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M71.8 290C71.8 290 72.4 291.8 71.6 292C70.8 292.2 42.2 250.2 22.999 257.8C22.999 257.8 38.2 246 71.8 290z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M72.495 296.979C72.495 296.979 73.47 298.608 72.731 298.975C71.993 299.343 35.008 264.499 17.899 276.061C17.899 276.061 30.196 261.261 72.495 296.979z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M72.38 301.349C72.38 301.349 73.502 302.88 72.801 303.315C72.1 303.749 32.031 272.502 16.073 285.607C16.073 285.607 26.938 269.726 72.38 301.349z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000">
+ <path d="M70.17 303.065C70.673 309.113 71.661 315.682 73.4 318.801C73.4 318.801 69.8 331.201 78.6 344.401C78.6 344.401 78.2 351.601 79.8 354.801C79.8 354.801 83.8 363.201 88.6 364.001C92.484 364.648 101.207 367.717 111.068 369.121C111.068 369.121 128.2 383.201 125 396.001C125 396.001 124.6 412.401 121 414.001C121 414.001 132.6 402.801 123 419.601L118.6 438.401C118.6 438.401 144.2 416.801 128.6 435.201L118.6 461.201C118.6 461.201 138.2 442.801 131 451.201L127.8 460.001C127.8 460.001 171 432.801 140.2 462.401C140.2 462.401 148.2 458.801 152.6 461.601C152.6 461.601 159.4 460.401 158.6 462.001C158.6 462.001 137.8 472.401 134.2 490.801C134.2 490.801 142.6 480.801 139.4 491.601L139.8 503.201C139.8 503.201 143.8 481.601 143.4 519.201C143.4 519.201 162.6 501.201 151 522.001L151 538.801C151 538.801 166.2 522.401 159.8 535.201C159.8 535.201 169.8 526.401 165.8 541.601C165.8 541.601 165 552.001 169.4 540.801C169.4 540.801 185.4 510.201 179.4 536.401C179.4 536.401 178.6 555.601 183.4 540.801C183.4 540.801 183.8 551.201 193 558.401C193 558.401 191.8 507.601 204.6 543.601L208.6 560.001C208.6 560.001 211.4 550.801 211 545.601C211 545.601 225.8 529.201 219 553.601C219 553.601 234.2 530.801 231 544.001C231 544.001 223.4 560.001 225 564.801C225 564.801 241.8 530.001 243 528.401C243 528.401 241 570.802 251.8 534.801C251.8 534.801 257.4 546.801 254.6 551.201C254.6 551.201 262.6 543.201 261.8 540.001C261.8 540.001 266.4 531.801 269.2 545.401C269.2 545.401 271 554.801 272.6 551.601C272.6 551.601 276.6 575.602 277.8 552.801C277.8 552.801 279.4 539.201 272.2 527.601C272.2 527.601 273 524.401 270.2 520.401C270.2 520.401 283.8 542.001 276.6 513.201C276.6 513.201 287.801 521.201 289.001 521.201C289.001 521.201 275.4 498.001 284.2 502.801C284.2 502.801 279 492.401 297.001 504.401C297.001 504.401 281 488.401 298.601 498.001C298.601 498.001 306.601 504.401 299.001 494.401C299.001 494.401 284.6 478.401 306.601 496.401C306.601 496.401 318.201 512.801 319.001 515.601C319.001 515.601 309.001 486.401 304.601 483.601C304.601 483.601 313.001 447.201 354.201 462.801C354.201 462.801 361.001 480.001 365.401 461.601C365.401 461.601 378.201 455.201 389.401 482.801C389.401 482.801 393.401 469.201 392.601 466.401C392.601 466.401 399.401 467.601 398.601 466.401C398.601 466.401 411.801 470.801 413.001 470.001C413.001 470.001 419.801 476.801 420.201 473.201C420.201 473.201 429.401 476.001 427.401 472.401C427.401 472.401 436.201 488.001 436.601 491.601L439.001 477.601L441.001 480.401C441.001 480.401 442.601 472.801 441.801 471.601C441.001 470.401 461.801 478.401 466.601 499.201L468.601 507.601C468.601 507.601 474.601 492.801 473.001 488.801C473.001 488.801 478.201 489.601 478.601 494.001C478.601 494.001 482.601 470.801 477.801 464.801C477.801 464.801 482.201 464.001 483.401 467.601L483.401 460.401C483.401 460.401 490.601 461.201 490.601 458.801C490.601 458.801 495.001 454.801 497.001 459.601C497.001 459.601 484.601 424.401 503.001 443.601C503.001 443.601 510.201 454.401 506.601 435.601C503.001 416.801 499.001 415.201 503.801 414.801C503.801 414.801 504.601 411.201 502.601 409.601C500.601 408.001 503.801 409.601 503.801 409.601C503.801 409.601 508.601 413.601 503.401 391.601C503.401 391.601 509.801 393.201 497.801 364.001C497.801 364.001 500.601 361.601 496.601 353.201C496.601 353.201 504.601 357.601 507.401 356.001C507.401 356.001 507.001 354.401 503.801 350.401C503.801 350.401 482.201 295.6 502.601 317.601C502.601 317.601 514.451 331.151 508.051 308.351C508.051 308.351 498.94 284.341 499.717 280.045L70.17 303.065z"/>
+ </g>
+ <g style="fill: #cc7226; stroke:#000000">
+ <path d="M499.717 280.245C500.345 280.426 502.551 281.55 503.801 283.2C503.801 283.2 510.601 294 505.401 275.6C505.401 275.6 496.201 246.8 505.001 258C505.001 258 511.001 265.2 507.801 251.6C503.936 235.173 501.401 228.8 501.401 228.8C501.401 228.8 513.001 233.6 486.201 194L495.001 197.6C495.001 197.6 475.401 158 453.801 152.8L445.801 146.8C445.801 146.8 484.201 108.8 471.401 72C471.401 72 464.601 66.8 455.001 76C455.001 76 448.601 80.8 442.601 79.2C442.601 79.2 411.801 80.4 409.801 80.4C407.801 80.4 373.001 43.2 307.401 60.8C307.401 60.8 302.201 62.8 297.801 61.6C297.801 61.6 279.4 45.6 230.6 68.4C230.6 68.4 220.6 70.4 219 70.4C217.4 70.4 214.6 70.4 206.6 76.8C198.6 83.2 198.2 84 196.2 85.6C196.2 85.6 179.8 96.8 175 97.6C175 97.6 163.4 104 159 114L155.4 115.2C155.4 115.2 153.8 122.4 153.4 123.6C153.4 123.6 148.6 127.2 147.8 132.8C147.8 132.8 139 138.8 139.4 143.2C139.4 143.2 137.8 148.4 137 153.2C137 153.2 129.8 158 130.6 160.8C130.6 160.8 123 174.8 124.2 181.6C124.2 181.6 117.8 181.2 115 183.6C115 183.6 114.2 188.4 112.6 188.8C112.6 188.8 109.8 190 112.2 194C112.2 194 110.6 196.8 110.2 198.4C110.2 198.4 111 201.2 106.6 206.8C106.6 206.8 100.2 225.6 102.2 230.8C102.2 230.8 102.6 235.6 99.8 237.2C99.8 237.2 96.2 236.8 104.6 248.8C104.6 248.8 105.4 250 102.2 252.4C102.2 252.4 85 256 82.6 272.4C82.6 272.4 69 287.2 69 292.4C69 294.705 69.271 297.852 69.97 302.465C69.97 302.465 69.4 310.801 97 311.601C124.6 312.401 499.717 280.245 499.717 280.245z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M84.4 302.6C59.4 263.2 73.8 319.601 73.8 319.601C82.6 354.001 212.2 316.401 212.2 316.401C212.2 316.401 381.001 286 392.201 282C403.401 278 498.601 284.4 498.601 284.4L493.001 267.6C428.201 221.2 409.001 244.4 395.401 240.4C381.801 236.4 384.201 246 381.001 246.8C377.801 247.6 338.601 222.8 332.201 223.6C325.801 224.4 300.459 200.649 315.401 232.4C331.401 266.4 257 271.6 240.2 260.4C223.4 249.2 247.4 278.8 247.4 278.8C265.8 298.8 231.4 282 231.4 282C197 269.2 173 294.8 169.8 295.6C166.6 296.4 161.8 299.6 161 293.2C160.2 286.8 152.69 270.099 121 296.4C101 313.001 87.2 291 87.2 291L84.4 302.6z"/>
+ </g>
+ <g style="fill: #e87f3a">
+ <path d="M333.51 225.346C327.11 226.146 301.743 202.407 316.71 234.146C333.31 269.346 258.31 273.346 241.51 262.146C224.709 250.946 248.71 280.546 248.71 280.546C267.11 300.546 232.709 283.746 232.709 283.746C198.309 270.946 174.309 296.546 171.109 297.346C167.909 298.146 163.109 301.346 162.309 294.946C161.509 288.546 154.13 272.012 122.309 298.146C101.073 315.492 87.582 294.037 87.582 294.037L84.382 304.146C59.382 264.346 74.454 322.655 74.454 322.655C83.255 357.056 213.509 318.146 213.509 318.146C213.509 318.146 382.31 287.746 393.51 283.746C404.71 279.746 499.038 286.073 499.038 286.073L493.51 268.764C428.71 222.364 410.31 246.146 396.71 242.146C383.11 238.146 385.51 247.746 382.31 248.546C379.11 249.346 339.91 224.546 333.51 225.346z"/>
+ </g>
+ <g style="fill: #ea8c4d">
+ <path d="M334.819 227.091C328.419 227.891 303.685 203.862 318.019 235.891C334.219 272.092 259.619 275.092 242.819 263.892C226.019 252.692 250.019 282.292 250.019 282.292C268.419 302.292 234.019 285.492 234.019 285.492C199.619 272.692 175.618 298.292 172.418 299.092C169.218 299.892 164.418 303.092 163.618 296.692C162.818 290.292 155.57 273.925 123.618 299.892C101.145 317.983 87.964 297.074 87.964 297.074L84.364 305.692C60.564 266.692 75.109 325.71 75.109 325.71C83.909 360.11 214.819 319.892 214.819 319.892C214.819 319.892 383.619 289.492 394.819 285.492C406.019 281.492 499.474 287.746 499.474 287.746L494.02 269.928C429.219 223.528 411.619 247.891 398.019 243.891C384.419 239.891 386.819 249.491 383.619 250.292C380.419 251.092 341.219 226.291 334.819 227.091z"/>
+ </g>
+ <g style="fill: #ec9961">
+ <path d="M336.128 228.837C329.728 229.637 304.999 205.605 319.328 237.637C336.128 275.193 260.394 276.482 244.128 265.637C227.328 254.437 251.328 284.037 251.328 284.037C269.728 304.037 235.328 287.237 235.328 287.237C200.928 274.437 176.928 300.037 173.728 300.837C170.528 301.637 165.728 304.837 164.928 298.437C164.128 292.037 157.011 275.839 124.927 301.637C101.218 320.474 88.345 300.11 88.345 300.11L84.345 307.237C62.545 270.437 75.764 328.765 75.764 328.765C84.564 363.165 216.128 321.637 216.128 321.637C216.128 321.637 384.928 291.237 396.129 287.237C407.329 283.237 499.911 289.419 499.911 289.419L494.529 271.092C429.729 224.691 412.929 249.637 399.329 245.637C385.728 241.637 388.128 251.237 384.928 252.037C381.728 252.837 342.528 228.037 336.128 228.837z"/>
+ </g>
+ <g style="fill: #eea575">
+ <path d="M337.438 230.583C331.037 231.383 306.814 207.129 320.637 239.383C337.438 278.583 262.237 278.583 245.437 267.383C228.637 256.183 252.637 285.783 252.637 285.783C271.037 305.783 236.637 288.983 236.637 288.983C202.237 276.183 178.237 301.783 175.037 302.583C171.837 303.383 167.037 306.583 166.237 300.183C165.437 293.783 158.452 277.752 126.237 303.383C101.291 322.965 88.727 303.146 88.727 303.146L84.327 308.783C64.527 273.982 76.418 331.819 76.418 331.819C85.218 366.22 217.437 323.383 217.437 323.383C217.437 323.383 386.238 292.983 397.438 288.983C408.638 284.983 500.347 291.092 500.347 291.092L495.038 272.255C430.238 225.855 414.238 251.383 400.638 247.383C387.038 243.383 389.438 252.983 386.238 253.783C383.038 254.583 343.838 229.783 337.438 230.583z"/>
+ </g>
+ <g style="fill: #f1b288">
+ <path d="M338.747 232.328C332.347 233.128 306.383 209.677 321.947 241.128C341.147 279.928 263.546 280.328 246.746 269.128C229.946 257.928 253.946 287.528 253.946 287.528C272.346 307.528 237.946 290.728 237.946 290.728C203.546 277.928 179.546 303.528 176.346 304.328C173.146 305.128 168.346 308.328 167.546 301.928C166.746 295.528 159.892 279.665 127.546 305.128C101.364 325.456 89.109 306.183 89.109 306.183L84.309 310.328C66.309 277.128 77.073 334.874 77.073 334.874C85.873 369.274 218.746 325.128 218.746 325.128C218.746 325.128 387.547 294.728 398.747 290.728C409.947 286.728 500.783 292.764 500.783 292.764L495.547 273.419C430.747 227.019 415.547 253.128 401.947 249.128C388.347 245.128 390.747 254.728 387.547 255.528C384.347 256.328 345.147 231.528 338.747 232.328z"/>
+ </g>
+ <g style="fill: #f3bf9c">
+ <path d="M340.056 234.073C333.655 234.873 307.313 211.613 323.255 242.873C343.656 282.874 264.855 282.074 248.055 270.874C231.255 259.674 255.255 289.274 255.255 289.274C273.655 309.274 239.255 292.474 239.255 292.474C204.855 279.674 180.855 305.274 177.655 306.074C174.455 306.874 169.655 310.074 168.855 303.674C168.055 297.274 161.332 281.578 128.855 306.874C101.436 327.947 89.491 309.219 89.491 309.219L84.291 311.874C68.291 281.674 77.727 337.929 77.727 337.929C86.527 372.329 220.055 326.874 220.055 326.874C220.055 326.874 388.856 296.474 400.056 292.474C411.256 288.474 501.22 294.437 501.22 294.437L496.056 274.583C431.256 228.183 416.856 254.874 403.256 250.874C389.656 246.873 392.056 256.474 388.856 257.274C385.656 258.074 346.456 233.273 340.056 234.073z"/>
+ </g>
+ <g style="fill: #f5ccb0">
+ <path d="M341.365 235.819C334.965 236.619 307.523 213.944 324.565 244.619C346.565 284.219 266.164 283.819 249.364 272.619C232.564 261.419 256.564 291.019 256.564 291.019C274.964 311.019 240.564 294.219 240.564 294.219C206.164 281.419 182.164 307.019 178.964 307.819C175.764 308.619 170.964 311.819 170.164 305.419C169.364 299.019 162.773 283.492 130.164 308.619C101.509 330.438 89.873 312.256 89.873 312.256L84.273 313.419C69.872 285.019 78.382 340.983 78.382 340.983C87.182 375.384 221.364 328.619 221.364 328.619C221.364 328.619 390.165 298.219 401.365 294.219C412.565 290.219 501.656 296.11 501.656 296.11L496.565 275.746C431.765 229.346 418.165 256.619 404.565 252.619C390.965 248.619 393.365 258.219 390.165 259.019C386.965 259.819 347.765 235.019 341.365 235.819z"/>
+ </g>
+ <g style="fill: #f8d8c4">
+ <path d="M342.674 237.565C336.274 238.365 308.832 215.689 325.874 246.365C347.874 285.965 267.474 285.565 250.674 274.365C233.874 263.165 257.874 292.765 257.874 292.765C276.274 312.765 241.874 295.965 241.874 295.965C207.473 283.165 183.473 308.765 180.273 309.565C177.073 310.365 172.273 313.565 171.473 307.165C170.673 300.765 164.214 285.405 131.473 310.365C101.582 332.929 90.255 315.293 90.255 315.293L84.255 314.965C70.654 288.564 79.037 344.038 79.037 344.038C87.837 378.438 222.673 330.365 222.673 330.365C222.673 330.365 391.474 299.965 402.674 295.965C413.874 291.965 502.093 297.783 502.093 297.783L497.075 276.91C432.274 230.51 419.474 258.365 405.874 254.365C392.274 250.365 394.674 259.965 391.474 260.765C388.274 261.565 349.074 236.765 342.674 237.565z"/>
+ </g>
+ <g style="fill: #fae5d7">
+ <path d="M343.983 239.31C337.583 240.11 310.529 217.223 327.183 248.11C349.183 288.91 268.783 287.31 251.983 276.11C235.183 264.91 259.183 294.51 259.183 294.51C277.583 314.51 243.183 297.71 243.183 297.71C208.783 284.91 184.783 310.51 181.583 311.31C178.382 312.11 173.582 315.31 172.782 308.91C171.982 302.51 165.654 287.318 132.782 312.11C101.655 335.42 90.637 318.329 90.637 318.329L84.236 316.51C71.236 292.51 79.691 347.093 79.691 347.093C88.491 381.493 223.983 332.11 223.983 332.11C223.983 332.11 392.783 301.71 403.983 297.71C415.183 293.71 502.529 299.456 502.529 299.456L497.583 278.074C432.783 231.673 420.783 260.11 407.183 256.11C393.583 252.11 395.983 261.71 392.783 262.51C389.583 263.31 350.383 238.51 343.983 239.31z"/>
+ </g>
+ <g style="fill: #fcf2eb">
+ <path d="M345.292 241.055C338.892 241.855 312.917 218.411 328.492 249.855C349.692 292.656 270.092 289.056 253.292 277.856C236.492 266.656 260.492 296.256 260.492 296.256C278.892 316.256 244.492 299.456 244.492 299.456C210.092 286.656 186.092 312.256 182.892 313.056C179.692 313.856 174.892 317.056 174.092 310.656C173.292 304.256 167.095 289.232 134.092 313.856C101.727 337.911 91.018 321.365 91.018 321.365L84.218 318.056C71.418 294.856 80.346 350.147 80.346 350.147C89.146 384.547 225.292 333.856 225.292 333.856C225.292 333.856 394.093 303.456 405.293 299.456C416.493 295.456 502.965 301.128 502.965 301.128L498.093 279.237C433.292 232.837 422.093 261.856 408.493 257.856C394.893 253.855 397.293 263.456 394.093 264.256C390.892 265.056 351.692 240.255 345.292 241.055z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M84.2 319.601C71.4 297.6 81 353.201 81 353.201C89.8 387.601 226.6 335.601 226.6 335.601C226.6 335.601 395.401 305.2 406.601 301.2C417.801 297.2 503.401 302.8 503.401 302.8L498.601 280.4C433.801 234 423.401 263.6 409.801 259.6C396.201 255.6 398.601 265.2 395.401 266C392.201 266.8 353.001 242 346.601 242.8C340.201 243.6 314.981 219.793 329.801 251.6C352.028 299.307 269.041 289.227 254.6 279.6C237.8 268.4 261.8 298 261.8 298C280.2 318.001 245.8 301.2 245.8 301.2C211.4 288.4 187.4 314.001 184.2 314.801C181 315.601 176.2 318.801 175.4 312.401C174.6 306 168.535 291.144 135.4 315.601C101.8 340.401 91.4 324.401 91.4 324.401L84.2 319.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M125.8 349.601C125.8 349.601 118.6 361.201 139.4 374.401C139.4 374.401 140.8 375.801 122.8 371.601C122.8 371.601 116.6 369.601 115 359.201C115 359.201 110.2 354.801 105.4 349.201C100.6 343.601 125.8 349.601 125.8 349.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M265.8 302C265.8 302 283.498 328.821 282.9 333.601C281.6 344.001 281.4 353.601 284.6 357.601C287.801 361.601 296.601 394.801 296.601 394.801C296.601 394.801 296.201 396.001 308.601 358.001C308.601 358.001 320.201 342.001 300.201 323.601C300.201 323.601 265 294.8 265.8 302z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M145.8 376.401C145.8 376.401 157 383.601 142.6 414.801L149 412.401C149 412.401 148.2 423.601 145 426.001L152.2 422.801C152.2 422.801 157 430.801 153 435.601C153 435.601 169.8 443.601 169 450.001C169 450.001 175.4 442.001 171.4 435.601C167.4 429.201 160.2 433.201 161 414.801L152.2 418.001C152.2 418.001 157.8 409.201 157.8 402.801L149.8 405.201C149.8 405.201 165.269 378.623 154.6 377.201C148.6 376.401 145.8 376.401 145.8 376.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M178.2 393.201C178.2 393.201 181 388.801 178.2 389.601C175.4 390.401 144.2 405.201 138.2 414.801C138.2 414.801 172.6 390.401 178.2 393.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M188.6 401.201C188.6 401.201 191.4 396.801 188.6 397.601C185.8 398.401 154.6 413.201 148.6 422.801C148.6 422.801 183 398.401 188.6 401.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M201.8 386.001C201.8 386.001 204.6 381.601 201.8 382.401C199 383.201 167.8 398.001 161.8 407.601C161.8 407.601 196.2 383.201 201.8 386.001z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M178.6 429.601C178.6 429.601 178.6 423.601 175.8 424.401C173 425.201 137 442.801 131 452.401C131 452.401 173 426.801 178.6 429.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M179.8 418.801C179.8 418.801 181 414.001 178.2 414.801C176.2 414.801 149.8 426.401 143.8 436.001C143.8 436.001 173.4 414.401 179.8 418.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M165.4 466.401L155.4 474.001C155.4 474.001 165.8 466.401 169.4 467.601C169.4 467.601 162.6 478.801 161.8 484.001C161.8 484.001 172.2 471.201 177.8 471.601C177.8 471.601 185.4 472.001 185.4 482.801C185.4 482.801 191 472.401 194.2 472.801C194.2 472.801 195.4 479.201 194.2 486.001C194.2 486.001 198.2 478.401 202.2 480.001C202.2 480.001 208.6 478.001 207.8 489.601C207.8 489.601 207.8 500.001 207 502.801C207 502.801 212.6 476.401 215 476.001C215 476.001 223 474.801 227.8 483.601C227.8 483.601 223.8 476.001 228.6 478.001C228.6 478.001 239.4 479.601 242.6 486.401C242.6 486.401 235.8 474.401 241.4 477.601C241.4 477.601 248.2 477.601 249.4 484.001C249.4 484.001 257.8 505.201 259.8 506.801C259.8 506.801 252.2 485.201 253.8 485.201C253.8 485.201 251.8 473.201 257 488.001C257 488.001 253.8 474.001 259.4 474.801C265 475.601 269.4 485.601 277.8 483.201C277.8 483.201 287.401 488.801 289.401 419.601L165.4 466.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M170.2 373.601C170.2 373.601 185 367.601 225 373.601C225 373.601 232.2 374.001 239 365.201C245.8 356.401 272.6 349.201 279 351.201L288.601 357.601L289.401 358.801C289.401 358.801 301.801 369.201 302.201 376.801C302.601 384.401 287.801 432.401 278.2 448.401C268.6 464.401 259 476.801 239.8 474.401C239.8 474.401 219 470.401 193.4 474.401C193.4 474.401 164.2 472.801 161.4 464.801C158.6 456.801 172.6 441.601 172.6 441.601C172.6 441.601 177 433.201 175.8 418.801C174.6 404.401 175 376.401 170.2 373.601z"/>
+ </g>
+ <g style="fill: #e5668c">
+ <path d="M192.2 375.601C200.6 394.001 171 459.201 171 459.201C169 460.801 183.66 466.846 193.8 464.401C204.746 461.763 245 466.001 245 466.001C268.6 450.401 281.4 406.001 281.4 406.001C281.4 406.001 291.801 382.001 274.2 378.801C256.6 375.601 192.2 375.601 192.2 375.601z"/>
+ </g>
+ <g style="fill: #b23259">
+ <path d="M190.169 406.497C193.495 393.707 195.079 381.906 192.2 375.601C192.2 375.601 254.6 382.001 265.8 361.201C270.041 353.326 284.801 384.001 284.4 393.601C284.4 393.601 221.4 408.001 206.6 396.801L190.169 406.497z"/>
+ </g>
+ <g style="fill: #a5264c">
+ <path d="M194.6 422.801C194.6 422.801 196.6 430.001 194.2 434.001C194.2 434.001 192.6 434.801 191.4 435.201C191.4 435.201 192.6 438.801 198.6 440.401C198.6 440.401 200.6 444.801 203 445.201C205.4 445.601 210.2 451.201 214.2 450.001C218.2 448.801 229.4 444.801 229.4 444.801C229.4 444.801 235 441.601 243.8 445.201C243.8 445.201 246.175 444.399 246.6 440.401C247.1 435.701 250.2 432.001 252.2 430.001C254.2 428.001 263.8 415.201 262.6 414.801C261.4 414.401 194.6 422.801 194.6 422.801z"/>
+ </g>
+ <g style="fill: #ff727f; stroke:#000000">
+ <path d="M190.2 374.401C190.2 374.401 187.4 396.801 190.6 405.201C193.8 413.601 193 415.601 192.2 419.601C191.4 423.601 195.8 433.601 201.4 439.601L213.4 441.201C213.4 441.201 228.6 437.601 237.8 440.401C237.8 440.401 246.794 441.744 250.2 426.801C250.2 426.801 255 420.401 262.2 417.601C269.4 414.801 276.6 373.201 272.6 365.201C268.6 357.201 254.2 352.801 238.2 368.401C222.2 384.001 220.2 367.201 190.2 374.401z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M191.8 449.201C191.8 449.201 191 447.201 186.6 446.801C186.6 446.801 164.2 443.201 155.8 430.801C155.8 430.801 149 425.201 153.4 436.801C153.4 436.801 163.8 457.201 170.6 460.001C170.6 460.001 187 464.001 191.8 449.201z"/>
+ </g>
+ <g style="fill: #cc3f4c">
+ <path d="M271.742 385.229C272.401 377.323 274.354 368.709 272.6 365.201C266.154 352.307 249.181 357.695 238.2 368.401C222.2 384.001 220.2 367.201 190.2 374.401C190.2 374.401 188.455 388.364 189.295 398.376C189.295 398.376 226.6 386.801 227.4 392.401C227.4 392.401 229 389.201 238.2 389.201C247.4 389.201 270.142 388.029 271.742 385.229z"/>
+ </g>
+ <g style="stroke:#a51926; stroke-width:2">
+ <path d="M228.6 375.201C228.6 375.201 233.4 380.001 229.8 389.601C229.8 389.601 215.4 405.601 217.4 419.601"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M180.6 460.001C180.6 460.001 176.2 447.201 185 454.001C185 454.001 189.8 456.001 188.6 457.601C187.4 459.201 181.8 463.201 180.6 460.001z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M185.64 461.201C185.64 461.201 182.12 450.961 189.16 456.401C189.16 456.401 193.581 458.849 192.04 459.281C187.48 460.561 192.04 463.121 185.64 461.201z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M190.44 461.201C190.44 461.201 186.92 450.961 193.96 456.401C193.96 456.401 198.335 458.711 196.84 459.281C193.48 460.561 196.84 463.121 190.44 461.201z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M197.04 461.401C197.04 461.401 193.52 451.161 200.56 456.601C200.56 456.601 204.943 458.933 203.441 459.481C200.48 460.561 203.441 463.321 197.04 461.401z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M203.52 461.321C203.52 461.321 200 451.081 207.041 456.521C207.041 456.521 210.881 458.121 209.921 459.401C208.961 460.681 209.921 463.241 203.52 461.321z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M210.2 462.001C210.2 462.001 205.4 449.601 214.6 456.001C214.6 456.001 219.4 458.001 218.2 459.601C217 461.201 218.2 464.401 210.2 462.001z"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M181.8 444.801C181.8 444.801 195 442.001 201 445.201C201 445.201 207 446.401 208.2 446.001C209.4 445.601 212.6 445.201 212.6 445.201"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M215.8 453.601C215.8 453.601 227.8 440.001 239.8 444.401C246.816 446.974 245.8 443.601 246.6 440.801C247.4 438.001 247.6 433.801 252.6 430.801"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M233 437.601C233 437.601 229 426.801 226.2 439.601C223.4 452.401 220.2 456.001 218.6 458.801C218.6 458.801 218.6 464.001 227 463.601C227 463.601 237.8 463.201 238.2 460.401C238.6 457.601 237 446.001 233 437.601z"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M247 444.801C247 444.801 250.6 442.401 253 443.601"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M253.5 428.401C253.5 428.401 256.4 423.501 261.2 422.701"/>
+ </g>
+ <g style="fill: #b2b2b2">
+ <path d="M174.2 465.201C174.2 465.201 192.2 468.401 196.6 466.801C196.6 466.801 205.4 466.801 197 468.801C197 468.801 184.2 468.801 176.2 467.601C176.2 467.601 164.6 462.001 174.2 465.201z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M188.2 372.001C188.2 372.001 205.8 372.001 207.8 372.801C207.8 372.801 215 403.601 211.4 411.201C211.4 411.201 210.2 414.001 207.4 408.401C207.4 408.401 189 375.601 185.8 373.601C182.6 371.601 187 372.001 188.2 372.001z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M111.1 369.301C111.1 369.301 120 371.001 132.6 373.601C132.6 373.601 137.4 396.001 140.6 400.801C143.8 405.601 140.2 405.601 136.6 402.801C133 400.001 118.2 386.001 116.2 381.601C114.2 377.201 111.1 369.301 111.1 369.301z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M132.961 373.818C132.961 373.818 138.761 375.366 139.77 377.581C140.778 379.795 138.568 383.092 138.568 383.092C138.568 383.092 137.568 386.397 136.366 384.235C135.164 382.072 132.292 374.412 132.961 373.818z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M133 373.601C133 373.601 136.6 378.801 140.2 378.801C143.8 378.801 144.182 378.388 147 379.001C151.6 380.001 151.2 378.001 157.8 379.201C160.44 379.681 163 378.801 165.8 380.001C168.6 381.201 171.8 380.401 173 378.401C174.2 376.401 179 372.201 179 372.201C179 372.201 166.2 374.001 163.4 374.801C163.4 374.801 141 376.001 133 373.601z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M177.6 373.801C177.6 373.801 171.15 377.301 170.75 379.701C170.35 382.101 176 385.801 176 385.801C176 385.801 178.75 390.401 179.35 388.001C179.95 385.601 178.4 374.201 177.6 373.801z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M140.115 379.265C140.115 379.265 147.122 390.453 147.339 379.242C147.339 379.242 147.896 377.984 146.136 377.962C140.061 377.886 141.582 373.784 140.115 379.265z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M147.293 379.514C147.293 379.514 155.214 390.701 154.578 379.421C154.578 379.421 154.585 379.089 152.832 378.936C148.085 378.522 148.43 374.004 147.293 379.514z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M154.506 379.522C154.506 379.522 162.466 390.15 161.797 380.484C161.797 380.484 161.916 379.251 160.262 378.95C156.37 378.244 156.159 374.995 154.506 379.522z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M161.382 379.602C161.382 379.602 169.282 391.163 169.63 381.382C169.63 381.382 171.274 380.004 169.528 379.782C163.71 379.042 164.508 374.588 161.382 379.602z"/>
+ </g>
+ <g style="fill: #e5e5b2">
+ <path d="M125.208 383.132L117.55 381.601C114.95 376.601 112.85 370.451 112.85 370.451C112.85 370.451 119.2 371.451 131.7 374.251C131.7 374.251 132.576 377.569 134.048 383.364L125.208 383.132z"/>
+ </g>
+ <g style="fill: #e5e5b2">
+ <path d="M190.276 378.47C188.61 375.964 187.293 374.206 186.643 373.8C183.63 371.917 187.773 372.294 188.902 372.294C188.902 372.294 205.473 372.294 207.356 373.047C207.356 373.047 207.88 375.289 208.564 378.68C208.564 378.68 198.476 376.67 190.276 378.47z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M243.88 240.321C271.601 244.281 297.121 208.641 298.881 198.96C300.641 189.28 290.521 177.4 290.521 177.4C291.841 174.32 287.001 160.24 281.721 151C276.441 141.76 260.54 142.734 243 141.76C227.16 140.88 208.68 164.2 207.36 165.96C206.04 167.72 212.2 206.001 213.52 211.721C214.84 217.441 212.2 243.841 212.2 243.841C246.44 234.741 216.16 236.361 243.88 240.321z"/>
+ </g>
+ <g style="fill: #ea8e51">
+ <path d="M208.088 166.608C206.792 168.336 212.84 205.921 214.136 211.537C215.432 217.153 212.84 243.073 212.84 243.073C245.512 234.193 216.728 235.729 243.944 239.617C271.161 243.505 296.217 208.513 297.945 199.008C299.673 189.504 289.737 177.84 289.737 177.84C291.033 174.816 286.281 160.992 281.097 151.92C275.913 142.848 260.302 143.805 243.08 142.848C227.528 141.984 209.384 164.88 208.088 166.608z"/>
+ </g>
+ <g style="fill: #efaa7c">
+ <path d="M208.816 167.256C207.544 168.952 213.48 205.841 214.752 211.353C216.024 216.865 213.48 242.305 213.48 242.305C244.884 233.145 217.296 235.097 244.008 238.913C270.721 242.729 295.313 208.385 297.009 199.056C298.705 189.728 288.953 178.28 288.953 178.28C290.225 175.312 285.561 161.744 280.473 152.84C275.385 143.936 260.063 144.875 243.16 143.936C227.896 143.088 210.088 165.56 208.816 167.256z"/>
+ </g>
+ <g style="fill: #f4c6a8">
+ <path d="M209.544 167.904C208.296 169.568 214.12 205.761 215.368 211.169C216.616 216.577 214.12 241.537 214.12 241.537C243.556 232.497 217.864 234.465 244.072 238.209C270.281 241.953 294.409 208.257 296.073 199.105C297.737 189.952 288.169 178.72 288.169 178.72C289.417 175.808 284.841 162.496 279.849 153.76C274.857 145.024 259.824 145.945 243.24 145.024C228.264 144.192 210.792 166.24 209.544 167.904z"/>
+ </g>
+ <g style="fill: #f9e2d3">
+ <path d="M210.272 168.552C209.048 170.184 214.76 205.681 215.984 210.985C217.208 216.289 214.76 240.769 214.76 240.769C242.628 231.849 218.432 233.833 244.136 237.505C269.841 241.177 293.505 208.129 295.137 199.152C296.769 190.176 287.385 179.16 287.385 179.16C288.609 176.304 284.121 163.248 279.225 154.68C274.329 146.112 259.585 147.015 243.32 146.112C228.632 145.296 211.496 166.92 210.272 168.552z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M244.2 236.8C269.4 240.4 292.601 208 294.201 199.2C295.801 190.4 286.601 179.6 286.601 179.6C287.801 176.8 283.4 164 278.6 155.6C273.8 147.2 259.346 148.086 243.4 147.2C229 146.4 212.2 167.6 211 169.2C209.8 170.8 215.4 205.6 216.6 210.8C217.8 216 215.4 240 215.4 240C240.9 231.4 219 233.2 244.2 236.8z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M290.601 202.8C290.601 202.8 262.8 210.4 251.2 208.8C251.2 208.8 235.4 202.2 226.6 224C226.6 224 223 231.2 221 233.2C219 235.2 290.601 202.8 290.601 202.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M294.401 200.6C294.401 200.6 265.4 212.8 255.4 212.4C255.4 212.4 239 207.8 230.6 222.4C230.6 222.4 222.2 231.6 219 233.2C219 233.2 218.6 234.8 225 230.8L235.4 236C235.4 236 250.2 245.6 259.8 229.6C259.8 229.6 263.8 218.4 263.8 216.4C263.8 214.4 285 208.8 286.601 208.4C288.201 208 294.801 203.8 294.401 200.6z"/>
+ </g>
+ <g style="fill: #99cc32">
+ <path d="M247 236.514C240.128 236.514 231.755 232.649 231.755 226.4C231.755 220.152 240.128 213.887 247 213.887C253.874 213.887 259.446 218.952 259.446 225.2C259.446 231.449 253.874 236.514 247 236.514z"/>
+ </g>
+ <g style="fill: #659900">
+ <path d="M243.377 219.83C238.531 220.552 233.442 222.055 233.514 221.839C235.054 217.22 241.415 213.887 247 213.887C251.296 213.887 255.084 215.865 257.32 218.875C257.32 218.875 252.004 218.545 243.377 219.83z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M255.4 219.6C255.4 219.6 251 216.4 251 218.6C251 218.6 254.6 223 255.4 219.6z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M245.4 227.726C242.901 227.726 240.875 225.7 240.875 223.2C240.875 220.701 242.901 218.675 245.4 218.675C247.9 218.675 249.926 220.701 249.926 223.2C249.926 225.7 247.9 227.726 245.4 227.726z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M141.4 214.4C141.4 214.4 138.2 193.2 140.6 188.8C140.6 188.8 151.4 178.8 151 175.2C151 175.2 150.6 157.2 149.4 156.4C148.2 155.6 140.6 149.6 134.6 156C134.6 156 124.2 174 125 180.4L125 182.4C125 182.4 117.4 182 115.8 184C115.8 184 114.6 189.2 113.4 189.6C113.4 189.6 110.6 192 112.6 194.8C112.6 194.8 110.6 197.2 111 201.2L118.6 205.2C118.6 205.2 120.6 219.6 131.4 224.8C136.236 227.129 139.4 220.4 141.4 214.4z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M140.4 212.56C140.4 212.56 137.52 193.48 139.68 189.52C139.68 189.52 149.4 180.52 149.04 177.28C149.04 177.28 148.68 161.08 147.6 160.36C146.52 159.64 139.68 154.24 134.28 160C134.28 160 124.92 176.2 125.64 181.96L125.64 183.76C125.64 183.76 118.8 183.4 117.36 185.2C117.36 185.2 116.28 189.88 115.2 190.24C115.2 190.24 112.68 192.4 114.48 194.92C114.48 194.92 112.68 197.08 113.04 200.68L119.88 204.28C119.88 204.28 121.68 217.24 131.4 221.92C135.752 224.015 138.6 217.96 140.4 212.56z"/>
+ </g>
+ <g style="fill: #eb955c">
+ <path d="M148.95 157.39C147.86 156.53 140.37 150.76 134.52 157C134.52 157 124.38 174.55 125.16 180.79L125.16 182.74C125.16 182.74 117.75 182.35 116.19 184.3C116.19 184.3 115.02 189.37 113.85 189.76C113.85 189.76 111.12 192.1 113.07 194.83C113.07 194.83 111.12 197.17 111.51 201.07L118.92 204.97C118.92 204.97 120.87 219.01 131.4 224.08C136.114 226.35 139.2 219.79 141.15 213.94C141.15 213.94 138.03 193.27 140.37 188.98C140.37 188.98 150.9 179.23 150.51 175.72C150.51 175.72 150.12 158.17 148.95 157.39z"/>
+ </g>
+ <g style="fill: #f2b892">
+ <path d="M148.5 158.38C147.52 157.46 140.14 151.92 134.44 158C134.44 158 124.56 175.1 125.32 181.18L125.32 183.08C125.32 183.08 118.1 182.7 116.58 184.6C116.58 184.6 115.44 189.54 114.3 189.92C114.3 189.92 111.64 192.2 113.54 194.86C113.54 194.86 111.64 197.14 112.02 200.94L119.24 204.74C119.24 204.74 121.14 218.42 131.4 223.36C135.994 225.572 139 219.18 140.9 213.48C140.9 213.48 137.86 193.34 140.14 189.16C140.14 189.16 150.4 179.66 150.02 176.24C150.02 176.24 149.64 159.14 148.5 158.38z"/>
+ </g>
+ <g style="fill: #f8dcc8">
+ <path d="M148.05 159.37C147.18 158.39 139.91 153.08 134.36 159C134.36 159 124.74 175.65 125.48 181.57L125.48 183.42C125.48 183.42 118.45 183.05 116.97 184.9C116.97 184.9 115.86 189.71 114.75 190.08C114.75 190.08 112.16 192.3 114.01 194.89C114.01 194.89 112.16 197.11 112.53 200.81L119.56 204.51C119.56 204.51 121.41 217.83 131.4 222.64C135.873 224.794 138.8 218.57 140.65 213.02C140.65 213.02 137.69 193.41 139.91 189.34C139.91 189.34 149.9 180.09 149.53 176.76C149.53 176.76 149.16 160.11 148.05 159.37z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M140.4 212.46C140.4 212.46 137.52 193.48 139.68 189.52C139.68 189.52 149.4 180.52 149.04 177.28C149.04 177.28 148.68 161.08 147.6 160.36C146.84 159.32 139.68 154.24 134.28 160C134.28 160 124.92 176.2 125.64 181.96L125.64 183.76C125.64 183.76 118.8 183.4 117.36 185.2C117.36 185.2 116.28 189.88 115.2 190.24C115.2 190.24 112.68 192.4 114.48 194.92C114.48 194.92 112.68 197.08 113.04 200.68L119.88 204.28C119.88 204.28 121.68 217.24 131.4 221.92C135.752 224.015 138.6 217.86 140.4 212.46z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M137.3 206.2C137.3 206.2 115.7 196 114.8 195.2C114.8 195.2 123.9 203.4 124.7 203.4C125.5 203.4 137.3 206.2 137.3 206.2z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M120.2 200C120.2 200 138.6 203.6 138.6 208C138.6 210.912 138.357 224.331 133 222.8C124.6 220.4 128.2 206 120.2 200z"/>
+ </g>
+ <g style="fill: #99cc32">
+ <path d="M128.6 203.8C128.6 203.8 137.578 205.274 138.6 208C139.2 209.6 139.863 217.908 134.4 219C129.848 219.911 127.618 209.69 128.6 203.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M214.595 246.349C214.098 244.607 215.409 244.738 217.2 244.2C219.2 243.6 231.4 239.8 232.2 237.2C233 234.6 246.2 239 246.2 239C248 239.8 252.4 242.4 252.4 242.4C257.2 243.6 263.8 244 263.8 244C266.2 245 269.6 247.8 269.6 247.8C284.2 258 296.601 250.8 296.601 250.8C316.601 244.2 310.601 227 310.601 227C307.601 218 310.801 214.6 310.801 214.6C311.001 210.8 318.201 217.2 318.201 217.2C320.801 221.4 321.601 226.4 321.601 226.4C329.601 237.6 326.201 219.8 326.201 219.8C326.401 218.8 323.601 215.2 323.601 214C323.601 212.8 321.801 209.4 321.801 209.4C318.801 206 321.201 199 321.201 199C323.001 185.2 320.801 187 320.801 187C319.601 185.2 310.401 195.2 310.401 195.2C308.201 198.6 302.201 200.2 302.201 200.2C299.401 202 296.001 200.6 296.001 200.6C293.401 200.2 287.801 207.2 287.801 207.2C290.601 207 293.001 211.4 295.401 211.6C297.801 211.8 299.601 209.2 301.201 208.6C302.801 208 305.601 213.8 305.601 213.8C306.001 216.4 300.401 221.2 300.401 221.2C300.001 225.8 298.401 224.2 298.401 224.2C295.401 223.6 294.201 227.4 293.201 232C292.201 236.6 288.001 237 288.001 237C286.401 244.4 285.2 241.4 285.2 241.4C285 235.8 279 241.6 279 241.6C277.8 243.6 273.2 241.4 273.2 241.4C266.4 239.4 268.8 237.4 268.8 237.4C270.6 235.2 281.8 237.4 281.8 237.4C284 235.8 276 231.8 276 231.8C275.4 230 276.4 225.6 276.4 225.6C277.6 222.4 284.4 216.8 284.4 216.8C293.801 215.6 291.001 214 291.001 214C284.801 208.8 279 216.4 279 216.4C276.8 222.6 259.4 237.6 259.4 237.6C254.6 241 257.2 234.2 253.2 237.6C249.2 241 228.6 232 228.6 232C217.038 230.807 214.306 246.549 210.777 243.429C210.777 243.429 216.195 251.949 214.595 246.349z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M409.401 80C409.401 80 383.801 88 381.001 106.8C381.001 106.8 378.601 129.6 399.001 147.2C399.001 147.2 399.401 153.6 401.401 156.8C401.401 156.8 399.801 161.6 418.601 154L445.801 145.6C445.801 145.6 452.201 143.2 457.401 134.4C462.601 125.6 477.801 106.8 474.201 81.6C474.201 81.6 475.401 70.4 469.401 70C469.401 70 461.001 68.4 453.801 76C453.801 76 447.001 79.2 444.601 78.8L409.401 80z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M464.022 79.01C464.022 79.01 466.122 70.08 461.282 74.92C461.282 74.92 454.242 80.64 446.761 80.64C446.761 80.64 432.241 82.84 427.841 96.04C427.841 96.04 423.881 122.88 431.801 128.6C431.801 128.6 436.641 136.08 443.681 129.48C450.722 122.88 466.222 92.65 464.022 79.01z"/>
+ </g>
+ <g style="fill: #323232">
+ <path d="M463.648 79.368C463.648 79.368 465.738 70.624 460.986 75.376C460.986 75.376 454.074 80.992 446.729 80.992C446.729 80.992 432.473 83.152 428.153 96.112C428.153 96.112 424.265 122.464 432.041 128.08C432.041 128.08 436.793 135.424 443.705 128.944C450.618 122.464 465.808 92.76 463.648 79.368z"/>
+ </g>
+ <g style="fill: #666666">
+ <path d="M463.274 79.726C463.274 79.726 465.354 71.168 460.69 75.832C460.69 75.832 453.906 81.344 446.697 81.344C446.697 81.344 432.705 83.464 428.465 96.184C428.465 96.184 424.649 122.048 432.281 127.56C432.281 127.56 436.945 134.768 443.729 128.408C450.514 122.048 465.394 92.87 463.274 79.726z"/>
+ </g>
+ <g style="fill: #999999">
+ <path d="M462.9 80.084C462.9 80.084 464.97 71.712 460.394 76.288C460.394 76.288 453.738 81.696 446.665 81.696C446.665 81.696 432.937 83.776 428.777 96.256C428.777 96.256 425.033 121.632 432.521 127.04C432.521 127.04 437.097 134.112 443.753 127.872C450.41 121.632 464.98 92.98 462.9 80.084z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M462.526 80.442C462.526 80.442 464.586 72.256 460.098 76.744C460.098 76.744 453.569 82.048 446.633 82.048C446.633 82.048 433.169 84.088 429.089 96.328C429.089 96.328 425.417 121.216 432.761 126.52C432.761 126.52 437.249 133.456 443.777 127.336C450.305 121.216 464.566 93.09 462.526 80.442z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M462.151 80.8C462.151 80.8 464.201 72.8 459.801 77.2C459.801 77.2 453.401 82.4 446.601 82.4C446.601 82.4 433.401 84.4 429.401 96.4C429.401 96.4 425.801 120.8 433.001 126C433.001 126 437.401 132.8 443.801 126.8C450.201 120.8 464.151 93.2 462.151 80.8z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M250.6 284C250.6 284 230.2 264.8 222.2 264C222.2 264 187.8 260 173 278C173 278 190.6 257.6 218.2 263.2C218.2 263.2 196.6 258.8 184.2 262C184.2 262 167.4 262 157.8 276L155 280.8C155 280.8 159 266 177.4 260C177.4 260 200.2 255.2 211 260C211 260 189.4 253.2 179.4 255.2C179.4 255.2 149 252.8 136.2 279.2C136.2 279.2 140.2 264.8 155 257.6C155 257.6 168.6 248.8 189 251.6C189 251.6 203.4 254.8 208.6 257.2C213.8 259.6 212.6 256.8 204.2 252C204.2 252 198.6 242 184.6 242.4C184.6 242.4 141.8 246 131.4 258C131.4 258 145 246.8 155.4 244C155.4 244 177.8 236 186.2 236.8C186.2 236.8 211 237.8 218.6 233.8C218.6 233.8 207.4 238.8 210.6 242C213.8 245.2 220.6 252.8 220.6 254C220.6 255.2 244.8 277.3 248.4 281.7L250.6 284z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M389 478C389 478 373.5 441.5 361 432C361 432 387 448 390.5 466C390.5 466 390.5 476 389 478z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M436 485.5C436 485.5 409.5 430.5 391 406.5C391 406.5 434.5 444 439.5 470.5L440 476L437 473.5C437 473.5 436.5 482.5 436 485.5z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M492.5 437C492.5 437 430 377.5 428.5 375C428.5 375 489 441 492 448.5C492 448.5 490 439.5 492.5 437z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M304 480.5C304 480.5 323.5 428.5 342.5 451C342.5 451 357.5 461 357 464C357 464 353 457.5 335 458C335 458 316 455 304 480.5z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M494.5 353C494.5 353 449.5 324.5 442 323C430.193 320.639 491.5 352 496.5 362.5C496.5 362.5 498.5 360 494.5 353z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M343.801 459.601C343.801 459.601 364.201 457.601 371.001 450.801L375.401 454.401L393.001 416.001L396.601 421.201C396.601 421.201 411.001 406.401 410.201 398.401C409.401 390.401 423.001 404.401 423.001 404.401C423.001 404.401 422.201 392.801 429.401 399.601C429.401 399.601 427.001 384.001 435.401 392.001C435.401 392.001 424.864 361.844 447.401 387.601C453.001 394.001 448.601 387.201 448.601 387.201C448.601 387.201 422.601 339.201 444.201 353.601C444.201 353.601 446.201 330.801 445.001 326.401C443.801 322.001 441.801 299.6 437.001 294.4C432.201 289.2 437.401 287.6 443.001 292.8C443.001 292.8 431.801 268.8 445.001 280.8C445.001 280.8 441.401 265.6 437.001 262.8C437.001 262.8 431.401 245.6 446.601 256.4C446.601 256.4 442.201 244 439.001 240.8C439.001 240.8 427.401 213.2 434.601 218L439.001 221.6C439.001 221.6 432.201 207.6 438.601 212C445.001 216.4 445.001 216 445.001 216C445.001 216 423.801 182.8 444.201 200.4C444.201 200.4 436.042 186.482 432.601 179.6C432.601 179.6 413.801 159.2 428.201 165.6L433.001 167.2C433.001 167.2 424.201 157.2 416.201 155.6C408.201 154 418.601 147.6 425.001 149.6C431.401 151.6 447.001 159.2 447.001 159.2C447.001 159.2 459.801 178 463.801 178.4C463.801 178.4 443.801 170.8 449.801 178.8C449.801 178.8 464.201 192.8 457.001 192.4C457.001 192.4 451.001 199.6 455.801 208.4C455.801 208.4 437.342 190.009 452.201 215.6L459.001 232C459.001 232 434.601 207.2 445.801 229.2C445.801 229.2 463.001 252.8 465.001 253.2C467.001 253.6 471.401 262.4 471.401 262.4L467.001 260.4L472.201 269.2C472.201 269.2 461.001 257.2 467.001 270.4L472.601 284.8C472.601 284.8 452.201 262.8 465.801 292.4C465.801 292.4 449.401 287.2 458.201 304.4C458.201 304.4 456.601 320.401 457.001 325.601C457.401 330.801 458.601 359.201 454.201 367.201C449.801 375.201 460.201 394.401 462.201 398.401C464.201 402.401 467.801 413.201 459.001 404.001C450.201 394.801 454.601 400.401 456.601 409.201C458.601 418.001 464.601 433.601 463.801 439.201C463.801 439.201 462.601 440.401 459.401 436.801C459.401 436.801 444.601 414.001 446.201 428.401C446.201 428.401 445.001 436.401 441.801 445.201C441.801 445.201 438.601 456.001 438.601 447.201C438.601 447.201 435.401 430.401 432.601 438.001C429.801 445.601 426.201 451.601 423.401 454.001C420.601 456.401 415.401 433.601 414.201 444.001C414.201 444.001 402.201 431.601 397.401 448.001L385.801 464.401C385.801 464.401 385.401 452.001 384.201 458.001C384.201 458.001 354.201 464.001 343.801 459.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M309.401 102.8C309.401 102.8 297.801 94.8 293.801 95.2C289.801 95.6 321.401 86.4 362.601 114C362.601 114 367.401 116.8 371.001 116.4C371.001 116.4 374.201 118.8 371.401 122.4C371.401 122.4 362.601 132 373.801 143.2C373.801 143.2 392.201 150 386.601 141.2C386.601 141.2 397.401 145.2 399.801 149.2C402.201 153.2 401.001 149.2 401.001 149.2C401.001 149.2 394.601 142 388.601 136.8C388.601 136.8 383.401 134.8 380.601 126.4C377.801 118 375.401 108 379.801 104.8C379.801 104.8 375.801 109.2 376.601 105.2C377.401 101.2 381.001 97.6 382.601 97.2C384.201 96.8 400.601 81 407.401 80.6C407.401 80.6 398.201 82 395.201 81C392.201 80 365.601 68.6 359.601 67.4C359.601 67.4 342.801 60.8 354.801 62.8C354.801 62.8 390.601 66.6 408.801 79.8C408.801 79.8 401.601 71.4 383.201 64.4C383.201 64.4 361.001 51.8 325.801 56.8C325.801 56.8 308.001 60 300.201 61.8C300.201 61.8 297.601 61.2 297.001 60.8C296.401 60.4 284.6 51.4 257 58.4C257 58.4 240 63 231.4 67.8C231.4 67.8 216.2 69 212.6 72.2C212.6 72.2 194 86.8 192 87.6C190 88.4 178.6 96 177.8 96.4C177.8 96.4 202.4 89.8 204.8 87.4C207.2 85 224.6 82.4 227 83.8C229.4 85.2 237.8 84.6 228.2 85.2C228.2 85.2 303.801 100 304.601 102C305.401 104 309.401 102.8 309.401 102.8z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M380.801 93.6C380.801 93.6 370.601 86.2 368.601 86.2C366.601 86.2 354.201 76 350.001 76.4C345.801 76.8 333.601 66.8 306.201 75C306.201 75 305.601 73 309.201 72.2C309.201 72.2 315.601 70 316.001 69.4C316.001 69.4 336.201 65.2 343.401 68.8C343.401 68.8 352.601 71.4 358.801 77.6C358.801 77.6 370.001 80.8 373.201 79.8C373.201 79.8 382.001 82 382.401 83.8C382.401 83.8 388.201 86.8 386.401 89.4C386.401 89.4 386.801 91 380.801 93.6z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M368.33 91.491C369.137 92.123 370.156 92.221 370.761 93.03C370.995 93.344 370.706 93.67 370.391 93.767C369.348 94.084 368.292 93.514 367.15 94.102C366.748 94.309 366.106 94.127 365.553 93.978C363.921 93.537 362.092 93.512 360.401 94.2C358.416 93.071 356.056 93.655 353.975 92.654C353.917 92.627 353.695 92.973 353.621 92.946C350.575 91.801 346.832 92.084 344.401 89.8C341.973 89.388 339.616 88.926 337.188 88.246C335.37 87.737 333.961 86.748 332.341 85.916C330.964 85.208 329.507 84.686 327.973 84.314C326.11 83.862 324.279 83.974 322.386 83.454C322.293 83.429 322.101 83.773 322.019 83.746C321.695 83.638 321.405 83.055 321.234 83.108C319.553 83.63 318.065 82.658 316.401 83C315.223 81.776 313.495 82.021 311.949 81.579C308.985 80.731 305.831 82.001 302.801 81C306.914 79.158 311.601 80.39 315.663 78.321C317.991 77.135 320.653 78.237 323.223 77.477C323.71 77.333 324.401 77.131 324.801 77.8C324.935 77.665 325.117 77.426 325.175 77.454C327.625 78.611 329.94 79.885 332.422 80.951C332.763 81.097 333.295 80.865 333.547 81.067C335.067 82.283 337.01 82.18 338.401 83.4C340.099 82.898 341.892 83.278 343.621 82.654C343.698 82.627 343.932 82.968 343.965 82.946C345.095 82.198 346.25 82.469 347.142 82.773C347.48 82.888 348.143 83.135 348.448 83.209C349.574 83.485 350.43 83.965 351.609 84.148C351.723 84.166 351.908 83.826 351.98 83.854C353.103 84.292 354.145 84.236 354.801 85.4C354.936 85.265 355.101 85.027 355.183 85.054C356.21 85.392 356.859 86.147 357.96 86.388C358.445 86.494 359.057 87.12 359.633 87.296C362.025 88.027 363.868 89.556 366.062 90.451C366.821 90.761 367.697 90.995 368.33 91.491z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M291.696 77.261C289.178 75.536 286.81 74.43 284.368 72.644C284.187 72.511 283.827 72.681 283.625 72.559C282.618 71.95 281.73 71.369 280.748 70.673C280.209 70.291 279.388 70.302 278.88 70.044C276.336 68.752 273.707 68.194 271.2 67C271.882 66.362 273.004 66.606 273.6 65.8C273.795 66.08 274.033 66.364 274.386 66.173C276.064 65.269 277.914 65.116 279.59 65.206C281.294 65.298 283.014 65.603 284.789 65.875C285.096 65.922 285.295 66.445 285.618 66.542C287.846 67.205 290.235 66.68 292.354 67.518C293.945 68.147 295.515 68.97 296.754 70.245C297.006 70.505 296.681 70.806 296.401 71C296.789 70.891 297.062 71.097 297.173 71.41C297.257 71.649 297.257 71.951 297.173 72.19C297.061 72.502 296.782 72.603 296.408 72.654C295.001 72.844 296.773 71.464 296.073 71.912C294.8 72.726 295.546 74.132 294.801 75.4C294.521 75.206 294.291 74.988 294.401 74.6C294.635 75.122 294.033 75.412 293.865 75.728C293.48 76.453 292.581 77.868 291.696 77.261z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M259.198 84.609C256.044 83.815 252.994 83.93 249.978 82.654C249.911 82.626 249.688 82.973 249.624 82.946C248.258 82.352 247.34 81.386 246.264 80.34C245.351 79.452 243.693 79.839 242.419 79.352C242.095 79.228 241.892 78.716 241.591 78.677C240.372 78.52 239.445 77.571 238.4 77C240.736 76.205 243.147 76.236 245.609 75.852C245.722 75.834 245.867 76.155 246 76.155C246.136 76.155 246.266 75.934 246.4 75.8C246.595 76.08 246.897 76.406 247.154 76.152C247.702 75.612 248.258 75.802 248.798 75.842C248.942 75.852 249.067 76.155 249.2 76.155C249.336 76.155 249.467 75.844 249.6 75.844C249.736 75.845 249.867 76.155 250 76.155C250.136 76.155 250.266 75.934 250.4 75.8C251.092 76.582 251.977 76.028 252.799 76.207C253.837 76.434 254.104 77.582 255.178 77.88C259.893 79.184 264.03 81.329 268.393 83.416C268.7 83.563 268.91 83.811 268.8 84.2C269.067 84.2 269.38 84.112 269.57 84.244C270.628 84.976 271.669 85.524 272.366 86.622C272.582 86.961 272.253 87.368 272.02 87.316C267.591 86.321 263.585 85.713 259.198 84.609z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M245.338 128.821C243.746 127.602 243.162 125.571 242.034 123.779C241.82 123.439 242.094 123.125 242.411 123.036C242.971 122.877 243.514 123.355 243.923 123.557C245.668 124.419 247.203 125.661 249.2 125.8C251.19 128.034 255.45 128.419 255.457 131.8C255.458 132.659 254.03 131.741 253.6 132.6C251.149 131.597 248.76 131.7 246.38 130.233C245.763 129.852 246.093 129.399 245.338 128.821z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M217.8 76.244C217.935 76.245 224.966 76.478 224.949 76.592C224.904 76.901 217.174 77.95 216.81 77.78C216.646 77.704 209.134 80.134 209 80C209.268 79.865 217.534 76.244 217.8 76.244z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M233.2 86C233.2 86 218.4 87.8 214 89C209.6 90.2 191 97.8 188 99.8C188 99.8 174.6 105.2 157.6 125.2C157.6 125.2 165.2 121.8 167.4 119C167.4 119 181 106.4 180.8 109C180.8 109 193 100.4 192.4 102.6C192.4 102.6 216.8 91.4 214.8 94.6C214.8 94.6 236.4 90 235.4 92C235.4 92 254.2 96.4 251.4 96.6C251.4 96.6 245.6 97.8 252 101.4C252 101.4 248.6 105.8 243.2 101.8C237.8 97.8 240.8 100 235.8 101C235.8 101 233.2 101.8 228.6 97.8C228.6 97.8 223 93.2 214.2 96.8C214.2 96.8 183.6 109.4 181.6 110C181.6 110 178 112.8 175.6 116.4C175.6 116.4 169.8 120.8 166.8 122.2C166.8 122.2 154 133.8 152.8 135.2C152.8 135.2 149.4 140.4 148.6 140.8C148.6 140.8 155 137 157 135C157 135 171 125 176.4 124.2C176.4 124.2 180.8 121.2 181.6 119.8C181.6 119.8 196 110.6 200.2 110.6C200.2 110.6 209.4 115.8 211.8 108.8C211.8 108.8 217.6 107 223.2 108.2C223.2 108.2 226.4 105.6 225.6 103.4C225.6 103.4 227.2 101.6 228.2 105.4C228.2 105.4 231.6 109 236.4 107C236.4 107 240.4 106.8 238.4 109.2C238.4 109.2 234 113 222.2 113.2C222.2 113.2 209.8 113.8 193.4 121.4C193.4 121.4 163.6 131.8 154.4 142.2C154.4 142.2 148 151 142.6 152.2C142.6 152.2 136.8 153 130.8 160.4C130.8 160.4 140.6 154.6 149.6 154.6C149.6 154.6 153.6 152.2 149.8 155.8C149.8 155.8 146.2 163.4 147.8 168.8C147.8 168.8 147.2 174 146.4 175.6C146.4 175.6 138.6 188.4 138.6 190.8C138.6 193.2 139.8 203 140.2 203.6C140.6 204.2 139.2 202 143 204.4C146.8 206.8 149.6 208.4 150.4 211.2C151.2 214 148.4 205.8 148.2 204C148 202.2 143.8 195 144.6 192.6C144.6 192.6 145.6 193.6 146.4 195C146.4 195 145.8 194.4 146.4 190.8C146.4 190.8 147.2 185.6 148.6 182.4C150 179.2 152 175.4 152.4 174.6C152.8 173.8 152.8 168 154.2 170.6L157.6 173.2C157.6 173.2 154.8 170.6 157 168.4C157 168.4 156 162.8 157.8 160.2C157.8 160.2 164.8 151.8 166.4 150.8C168 149.8 166.6 150.2 166.6 150.2C166.6 150.2 172.6 146 166.8 147.6C166.8 147.6 162.8 149.2 159.8 149.2C159.8 149.2 152.2 151.2 156.2 147C160.2 142.8 170.2 137.4 174 137.6L174.8 139.2L186 136.8L184.8 137.6C184.8 137.6 184.6 137.4 188.8 137C193 136.6 198.8 138 200.2 136.2C201.6 134.4 205 133.4 204.6 134.8C204.2 136.2 204 138.2 204 138.2C204 138.2 209 132.4 208.4 134.6C207.8 136.8 199.6 142 198.2 148.2L208.6 140L212.2 137C212.2 137 215.8 139.2 216 137.6C216.2 136 220.8 130.2 222 130.4C223.2 130.6 225.2 127.8 225 130.4C224.8 133 232.4 138.4 232.4 138.4C232.4 138.4 235.6 136.6 237 138C238.4 139.4 242.6 118.2 242.6 118.2L267.6 107.6L311.201 104.2L294.201 97.4L233.2 86z"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M251.4 285C251.4 285 236.4 268.2 228 265.6C228 265.6 214.6 258.8 190 266.6"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M224.8 264.2C224.8 264.2 199.6 256.2 184.2 260.4C184.2 260.4 165.8 262.4 157.4 276.2"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M221.2 263C221.2 263 204.2 255.8 189.4 253.6C189.4 253.6 172.8 251 156.2 258.2C156.2 258.2 144 264.2 138.6 274.4"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M222.2 263.4C222.2 263.4 206.8 252.4 205.8 251C205.8 251 198.8 240 185.8 239.6C185.8 239.6 164.4 240.4 147.2 248.4"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M220.895 254.407C222.437 255.87 249.4 284.8 249.4 284.8C284.6 321.401 256.6 287.2 256.6 287.2C249 282.4 239.8 263.6 239.8 263.6C238.6 260.8 253.8 270.8 253.8 270.8C257.8 271.6 271.4 290.8 271.4 290.8C264.6 288.4 269.4 295.6 269.4 295.6C272.2 297.6 292.601 313.201 292.601 313.201C296.201 317.201 300.201 318.801 300.201 318.801C314.201 313.601 307.801 326.801 307.801 326.801C310.201 333.601 315.801 322.001 315.801 322.001C327.001 305.2 310.601 307.601 310.601 307.601C280.6 310.401 273.8 294.4 273.8 294.4C271.4 292 280.2 294.4 280.2 294.4C288.601 296.4 273 282 273 282C275.4 282 284.6 288.8 284.6 288.8C295.001 298 297.001 296 297.001 296C315.001 287.2 325.401 294.8 325.401 294.8C327.401 296.4 321.801 303.2 323.401 308.401C325.001 313.601 329.801 326.001 329.801 326.001C327.401 327.601 327.801 338.401 327.801 338.401C344.601 361.601 335.001 359.601 335.001 359.601C319.401 359.201 334.201 366.801 334.201 366.801C337.401 368.801 346.201 376.001 346.201 376.001C343.401 374.801 341.801 380.001 341.801 380.001C346.601 384.001 343.801 388.801 343.801 388.801C337.801 390.001 336.601 394.001 336.601 394.001C343.401 402.001 333.401 402.401 333.401 402.401C337.001 406.801 332.201 418.801 332.201 418.801C327.401 418.801 321.001 424.401 321.001 424.401C323.401 429.201 313.001 434.801 313.001 434.801C304.601 436.401 307.401 443.201 307.401 443.201C299.401 449.201 297.001 465.201 297.001 465.201C296.201 475.601 293.801 478.801 299.001 476.801C304.201 474.801 303.401 462.401 303.401 462.401C298.601 446.801 341.401 430.801 341.401 430.801C345.401 429.201 346.201 424.001 346.201 424.001C348.201 424.401 357.001 432.001 357.001 432.001C364.601 443.201 365.001 434.001 365.001 434.001C366.201 430.401 364.601 424.401 364.601 424.401C370.601 402.801 356.601 396.401 356.601 396.401C346.601 362.801 360.601 371.201 360.601 371.201C363.401 376.801 374.201 382.001 374.201 382.001L377.801 379.601C376.201 374.801 384.601 368.801 384.601 368.801C387.401 375.201 393.401 367.201 393.401 367.201C397.001 342.801 409.401 357.201 409.401 357.201C413.401 358.401 414.601 351.601 414.601 351.601C418.201 341.201 414.601 327.601 414.601 327.601C418.201 327.201 427.801 333.201 427.801 333.201C430.601 329.601 421.401 312.801 425.401 315.201C429.401 317.601 433.801 319.201 433.801 319.201C434.601 317.201 424.601 304.801 424.601 304.801C420.201 302 415.001 281.6 415.001 281.6C422.201 285.2 412.201 270 412.201 270C412.201 266.8 418.201 255.6 418.201 255.6C417.401 248.8 418.201 249.2 418.201 249.2C421.001 250.4 429.001 252 422.201 245.6C415.401 239.2 423.001 234.4 423.001 234.4C427.401 231.6 413.801 232 413.801 232C408.601 227.6 409.001 223.6 409.001 223.6C417.001 225.6 402.601 211.2 400.201 207.6C397.801 204 407.401 198.8 407.401 198.8C420.601 195.2 409.001 192 409.001 192C389.401 192.4 400.201 181.6 400.201 181.6C406.201 182 404.601 179.6 404.601 179.6C399.401 178.4 389.801 172 389.801 172C385.801 168.4 389.401 169.2 389.401 169.2C406.201 170.4 377.401 159.2 377.401 159.2C385.401 159.2 367.401 148.8 367.401 148.8C365.401 147.2 362.201 139.6 362.201 139.6C356.201 134.4 351.401 127.6 351.401 127.6C351.001 123.2 346.201 118.4 346.201 118.4C334.601 104.8 329.001 105.2 329.001 105.2C314.201 101.6 309.001 102.4 309.001 102.4L256.2 106.8C229.8 119.6 237.6 140.6 237.6 140.6C244 149 253.2 145.2 253.2 145.2C257.8 139 269.4 141.2 269.4 141.2C289.801 144.4 287.201 140.8 287.201 140.8C284.801 136.2 268.6 130 268.4 129.4C268.2 128.8 259.4 125.4 259.4 125.4C256.4 124.2 252 115 252 115C248.8 111.6 264.6 117.4 264.6 117.4C263.4 118.4 270.8 122.4 270.8 122.4C288.201 121.4 298.801 132.2 298.801 132.2C309.601 148.8 309.801 140.6 309.801 140.6C312.601 131.2 300.801 110 300.801 110C301.201 108 309.401 114.6 309.401 114.6C310.801 112.6 311.601 118.4 311.601 118.4C311.801 120.8 315.601 128.8 315.601 128.8C318.401 141.8 322.001 134.4 322.001 134.4L326.601 143.8C328.001 146.4 322.001 154 322.001 154C321.801 156.8 322.601 156.6 317.001 164.2C311.401 171.8 314.801 176.2 314.801 176.2C313.401 182.8 322.201 182.4 322.201 182.4C324.801 184.6 328.201 184.6 328.201 184.6C330.001 186.6 332.401 186 332.401 186C334.001 182.2 340.201 184.2 340.201 184.2C341.601 181.8 349.801 181.4 349.801 181.4C350.801 178.8 351.201 177.2 354.601 176.6C358.001 176 333.401 133 333.401 133C339.801 132.2 331.601 119.8 331.601 119.8C329.401 113.2 340.801 127.8 343.001 129.2C345.201 130.6 346.201 132.8 344.601 132.6C343.001 132.4 341.201 134.6 342.601 134.8C344.001 135 357.001 150 360.401 160.2C363.801 170.4 369.801 174.4 376.001 180.4C382.201 186.4 381.401 210.6 381.401 210.6C381.001 219.4 387.001 230 387.001 230C389.001 233.8 384.801 252 384.801 252C382.801 254.2 384.201 255 384.201 255C385.201 256.2 392.001 269.4 392.001 269.4C390.201 269.2 393.801 272.8 393.801 272.8C399.001 278.8 392.601 275.8 392.601 275.8C386.601 274.2 393.601 284 393.601 284C394.801 285.8 385.801 281.2 385.801 281.2C376.601 280.6 388.201 287.8 388.201 287.8C396.801 295 385.401 290.6 385.401 290.6C380.801 288.8 384.001 295.6 384.001 295.6C387.201 297.2 404.401 304.2 404.401 304.2C404.801 308.001 401.801 313.001 401.801 313.001C402.201 317.001 400.001 320.401 400.001 320.401C398.801 328.601 398.201 329.401 398.201 329.401C394.001 329.601 386.601 343.401 386.601 343.401C384.801 346.001 374.601 358.001 374.601 358.001C372.601 365.001 354.601 357.801 354.601 357.801C348.001 361.201 350.001 357.801 350.001 357.801C349.601 355.601 354.401 349.601 354.401 349.601C361.401 347.001 358.801 336.201 358.801 336.201C362.801 334.801 351.601 332.001 351.801 330.801C352.001 329.601 357.801 328.201 357.801 328.201C365.801 326.201 361.401 323.801 361.401 323.801C360.801 319.801 363.801 314.201 363.801 314.201C375.401 313.401 363.801 297.2 363.801 297.2C353.001 289.6 352.001 283.8 352.001 283.8C364.601 275.6 356.401 263.2 356.601 259.6C356.801 256 358.001 234.4 358.001 234.4C356.001 228.2 353.001 214.6 353.001 214.6C355.201 209.4 362.601 196.8 362.601 196.8C365.401 192.6 374.201 187.8 372.001 184.8C369.801 181.8 362.001 183.6 362.001 183.6C354.201 182.2 354.801 187.4 354.801 187.4C353.201 188.4 352.401 193.4 352.401 193.4C351.68 201.333 342.801 207.6 342.801 207.6C331.601 213.8 340.801 217.8 340.801 217.8C346.801 224.4 337.001 224.6 337.001 224.6C326.001 222.8 334.201 233 334.201 233C345.001 245.8 342.001 248.6 342.001 248.6C331.801 249.6 344.401 258.8 344.401 258.8C344.401 258.8 343.601 256.8 343.801 258.6C344.001 260.4 347.001 264.6 347.801 266.6C348.601 268.6 344.601 268.8 344.601 268.8C345.201 278.4 329.801 274.2 329.801 274.2C329.801 274.2 329.801 274.2 328.201 274.4C326.601 274.6 315.401 273.8 309.601 271.6C303.801 269.4 297.001 269.4 297.001 269.4C297.001 269.4 293.001 271.2 285.4 271C277.8 270.8 269.8 273.6 269.8 273.6C265.4 273.2 274 268.8 274.2 269C274.4 269.2 280 263.6 272 264.2C250.203 265.835 239.4 255.6 239.4 255.6C237.4 254.2 234.8 251.4 234.8 251.4C224.8 249.4 236.2 263.8 236.2 263.8C237.4 265.2 236 266.2 236 266.2C235.2 264.6 227.4 259.2 227.4 259.2C224.589 258.227 223.226 256.893 220.895 254.407z"/>
+ </g>
+ <g style="fill: #4c0000">
+ <path d="M197 242.8C197 242.8 208.6 248.4 211.2 251.2C213.8 254 227.8 265.4 227.8 265.4C227.8 265.4 222.4 263.4 219.8 261.6C217.2 259.8 206.4 251.6 206.4 251.6C206.4 251.6 202.6 245.6 197 242.8z"/>
+ </g>
+ <g style="fill: #99cc32">
+ <path d="M138.991 211.603C139.328 211.455 138.804 208.743 138.6 208.2C137.578 205.474 128.6 204 128.6 204C128.373 205.365 128.318 206.961 128.424 208.599C128.424 208.599 133.292 214.118 138.991 211.603z"/>
+ </g>
+ <g style="fill: #659900">
+ <path d="M138.991 211.403C138.542 211.561 138.976 208.669 138.8 208.2C137.778 205.474 128.6 203.9 128.6 203.9C128.373 205.265 128.318 206.861 128.424 208.499C128.424 208.499 132.692 213.618 138.991 211.403z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M134.6 211.546C133.975 211.546 133.469 210.406 133.469 209C133.469 207.595 133.975 206.455 134.6 206.455C135.225 206.455 135.732 207.595 135.732 209C135.732 210.406 135.225 211.546 134.6 211.546z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M134.6 209z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M89 309.601C89 309.601 83.4 319.601 108.2 313.601C108.2 313.601 122.2 312.401 124.6 310.001C125.8 310.801 134.166 313.734 137 314.401C143.8 316.001 152.2 306 152.2 306C152.2 306 156.8 295.5 159.6 295.5C162.4 295.5 159.2 297.1 159.2 297.1C159.2 297.1 152.6 307.201 153 308.801C153 308.801 147.8 328.801 131.8 329.601C131.8 329.601 115.65 330.551 117 336.401C117 336.401 125.8 334.001 128.2 336.401C128.2 336.401 139 336.001 131 342.401L124.2 354.001C124.2 354.001 124.34 357.919 114.2 354.401C104.4 351.001 94.1 338.101 94.1 338.101C94.1 338.101 78.15 323.551 89 309.601z"/>
+ </g>
+ <g style="fill: #e59999">
+ <path d="M87.8 313.601C87.8 313.601 85.8 323.201 122.6 312.801C122.6 312.801 127 312.801 129.4 313.601C131.8 314.401 143.8 317.201 145.8 316.001C145.8 316.001 138.6 329.601 127 328.001C127 328.001 113.8 329.601 114.2 334.401C114.2 334.401 118.2 341.601 123 344.001C123 344.001 125.8 346.401 125.4 349.601C125 352.801 122.2 354.401 120.2 355.201C118.2 356.001 115 352.801 113.4 352.801C111.8 352.801 103.4 346.401 99 341.601C94.6 336.801 86.2 324.801 86.6 322.001C87 319.201 87.8 313.601 87.8 313.601z"/>
+ </g>
+ <g style="fill: #b26565">
+ <path d="M91 331.051C93.6 335.001 96.8 339.201 99 341.601C103.4 346.401 111.8 352.801 113.4 352.801C115 352.801 118.2 356.001 120.2 355.201C122.2 354.401 125 352.801 125.4 349.601C125.8 346.401 123 344.001 123 344.001C119.934 342.468 117.194 338.976 115.615 336.653C115.615 336.653 115.8 339.201 110.6 338.401C105.4 337.601 100.2 334.801 98.6 331.601C97 328.401 94.6 326.001 96.2 329.601C97.8 333.201 100.2 336.801 101.8 337.201C103.4 337.601 103 338.801 100.6 338.401C98.2 338.001 95.4 337.601 91 332.401z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M88.4 310.001C88.4 310.001 90.2 296.4 91.4 292.4C91.4 292.4 90.6 285.6 93 281.4C95.4 277.2 97.4 271 100.4 265.6C103.4 260.2 103.6 256.2 107.6 254.6C111.6 253 117.6 244.4 120.4 243.4C123.2 242.4 123 243.2 123 243.2C123 243.2 129.8 228.4 143.4 232.4C143.4 232.4 127.2 229.6 143 220.2C143 220.2 138.2 221.3 141.5 214.3C143.701 209.632 143.2 216.4 132.2 228.2C132.2 228.2 127.2 236.8 122 239.8C116.8 242.8 104.8 249.8 103.6 253.6C102.4 257.4 99.2 263.2 97.2 264.8C95.2 266.4 92.4 270.6 92 274C92 274 90.8 278 89.4 279.2C88 280.4 87.8 283.6 87.8 285.6C87.8 287.6 85.8 290.4 86 292.8C86 292.8 86.8 311.801 86.4 313.801L88.4 310.001z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M79.8 314.601C79.8 314.601 77.8 313.201 73.4 319.201C73.4 319.201 80.7 352.201 80.7 353.601C80.7 353.601 81.8 351.501 80.5 344.301C79.2 337.101 78.3 324.401 78.3 324.401L79.8 314.601z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M101.4 254C101.4 254 83.8 257.2 84.2 286.4L83.4 311.201C83.4 311.201 82.2 285.6 81 284C79.8 282.4 83.8 271.2 80.6 277.2C80.6 277.2 66.6 291.2 74.6 312.401C74.6 312.401 76.1 315.701 73.1 311.101C73.1 311.101 68.5 298.5 69.6 292.1C69.6 292.1 69.8 289.9 71.7 287.1C71.7 287.1 80.3 275.4 83 273.1C83 273.1 84.8 258.7 100.2 253.5C100.2 253.5 105.9 251.2 101.4 254z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M240.8 187.8C241.46 187.446 241.451 186.476 242.031 186.303C243.18 185.959 243.344 184.892 243.862 184.108C244.735 182.789 244.928 181.256 245.51 179.765C245.782 179.065 245.809 178.11 245.496 177.45C244.322 174.969 243.62 172.52 242.178 170.094C241.91 169.644 241.648 168.85 241.447 168.252C240.984 166.868 239.727 165.877 238.867 164.557C238.579 164.116 239.104 163.191 238.388 163.107C237.491 163.002 236.042 162.422 235.809 163.448C235.221 166.035 236.232 168.558 237.2 171C236.418 171.692 236.752 172.613 236.904 173.38C237.614 176.986 236.416 180.338 235.655 183.812C235.632 183.916 235.974 184.114 235.946 184.176C234.724 186.862 233.272 189.307 231.453 191.688C230.695 192.68 229.823 193.596 229.326 194.659C228.958 195.446 228.55 196.412 228.8 197.4C225.365 200.18 223.115 204.025 220.504 207.871C220.042 208.551 220.333 209.76 220.884 210.029C221.697 210.427 222.653 209.403 223.123 208.557C223.512 207.859 223.865 207.209 224.356 206.566C224.489 206.391 224.31 205.972 224.445 205.851C227.078 203.504 228.747 200.568 231.2 198.2C233.15 197.871 234.687 196.873 236.435 195.86C236.743 195.681 237.267 195.93 237.557 195.735C239.31 194.558 239.308 192.522 239.414 190.612C239.464 189.728 239.66 188.411 240.8 187.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M231.959 183.334C232.083 183.257 231.928 182.834 232.037 182.618C232.199 182.294 232.602 182.106 232.764 181.782C232.873 181.566 232.71 181.186 232.846 181.044C235.179 178.597 235.436 175.573 234.4 172.6C235.424 171.98 235.485 170.718 235.06 169.871C234.207 168.171 234.014 166.245 233.039 164.702C232.237 163.433 230.659 162.189 229.288 163.492C228.867 163.892 228.546 164.679 228.824 165.391C228.888 165.554 229.173 165.7 229.146 165.782C229.039 166.106 228.493 166.33 228.487 166.602C228.457 168.098 227.503 169.609 228.133 170.938C228.905 172.567 229.724 174.424 230.4 176.2C229.166 178.316 230.199 180.765 228.446 182.642C228.31 182.788 228.319 183.174 228.441 183.376C228.733 183.862 229.139 184.268 229.625 184.56C229.827 184.681 230.175 184.683 230.375 184.559C230.953 184.197 231.351 183.71 231.959 183.334z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M294.771 173.023C296.16 174.815 296.45 177.61 294.401 179C294.951 182.309 298.302 180.33 300.401 179.8C300.292 179.412 300.519 179.068 300.802 179.063C301.859 179.048 302.539 178.016 303.601 178.2C304.035 176.643 305.673 175.941 306.317 174.561C308.043 170.866 307.452 166.593 304.868 163.347C304.666 163.093 304.883 162.576 304.759 162.214C304.003 160.003 301.935 159.688 300.001 159C298.824 155.125 298.163 151.094 296.401 147.4C294.787 147.15 294.089 145.411 292.752 144.691C291.419 143.972 290.851 145.551 290.892 146.597C290.899 146.802 291.351 147.026 291.181 147.391C291.105 147.555 290.845 147.666 290.845 147.8C290.846 147.935 291.067 148.066 291.201 148.2C290.283 149.02 288.86 149.497 288.565 150.642C287.611 154.352 290.184 157.477 291.852 160.678C292.443 161.813 291.707 163.084 290.947 164.292C290.509 164.987 290.617 166.114 290.893 166.97C291.645 169.301 293.236 171.04 294.771 173.023z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M257.611 191.409C256.124 193.26 252.712 195.829 255.629 197.757C255.823 197.886 256.193 197.89 256.366 197.756C258.387 196.191 260.39 195.288 262.826 194.706C262.95 194.677 263.224 195.144 263.593 194.983C265.206 194.28 267.216 194.338 268.4 193C272.167 193.224 275.732 192.108 279.123 190.8C280.284 190.352 281.554 189.793 282.755 189.291C284.131 188.715 285.335 187.787 286.447 186.646C286.58 186.51 286.934 186.6 287.201 186.6C287.161 185.737 288.123 185.61 288.37 184.988C288.462 184.756 288.312 184.36 288.445 184.258C290.583 182.628 291.503 180.61 290.334 178.233C290.049 177.655 289.8 177.037 289.234 176.561C288.149 175.65 287.047 176.504 286 176.2C285.841 176.828 285.112 176.656 284.726 176.854C283.867 177.293 282.534 176.708 281.675 177.146C280.313 177.841 279.072 178.01 277.65 178.387C277.338 178.469 276.56 178.373 276.4 179C276.266 178.866 276.118 178.632 276.012 178.654C274.104 179.05 272.844 179.264 271.543 180.956C271.44 181.089 270.998 180.91 270.839 181.045C269.882 181.853 269.477 183.087 268.376 183.759C268.175 183.882 267.823 183.714 267.629 183.843C266.983 184.274 266.616 184.915 265.974 185.362C265.645 185.591 265.245 185.266 265.277 185.01C265.522 183.063 266.175 181.276 265.6 179.4C267.677 176.88 270.194 174.931 272 172.2C272.015 170.034 272.707 167.888 272.594 165.811C272.584 165.618 272.296 164.885 272.17 164.538C271.858 163.684 272.764 162.618 271.92 161.894C270.516 160.691 269.224 161.567 268.4 163C266.562 163.39 264.496 164.083 262.918 162.849C261.911 162.062 261.333 161.156 260.534 160.1C259.549 158.798 259.884 157.362 259.954 155.798C259.96 155.67 259.645 155.534 259.645 155.4C259.646 155.265 259.866 155.134 260 155C259.294 154.374 259.019 153.316 258 153C258.305 151.908 257.629 151.024 256.758 150.722C254.763 150.031 253.086 151.943 251.194 152.016C250.68 152.035 250.213 150.997 249.564 150.672C249.132 150.456 248.428 150.423 248.066 150.689C247.378 151.193 246.789 151.307 246.031 151.512C244.414 151.948 243.136 153.042 241.656 153.897C240.171 154.754 239.216 156.191 238.136 157.511C237.195 158.663 237.059 161.077 238.479 161.577C240.322 162.227 241.626 159.524 243.592 159.85C243.904 159.901 244.11 160.212 244 160.6C244.389 160.709 244.607 160.48 244.8 160.2C245.658 161.219 246.822 161.556 247.76 162.429C248.73 163.333 250.476 162.915 251.491 163.912C253.02 165.414 252.461 168.095 254.4 169.4C253.814 170.713 253.207 171.99 252.872 173.417C252.59 174.623 253.584 175.82 254.795 175.729C256.053 175.635 256.315 174.876 256.8 173.8C257.067 174.067 257.536 174.364 257.495 174.58C257.038 176.967 256.011 178.96 255.553 181.391C255.494 181.708 255.189 181.91 254.8 181.8C254.332 185.949 250.28 188.343 247.735 191.508C247.332 192.01 247.328 193.259 247.737 193.662C249.14 195.049 251.1 193.503 252.8 193C253.013 191.794 253.872 190.852 255.204 190.908C255.46 190.918 255.695 190.376 256.019 190.246C256.367 190.108 256.869 190.332 257.155 190.134C258.884 188.939 260.292 187.833 262.03 186.644C262.222 186.513 262.566 186.672 262.782 186.564C263.107 186.402 263.294 186.015 263.617 185.83C263.965 185.63 264.207 185.92 264.4 186.2C263.754 186.549 263.75 187.506 263.168 187.708C262.393 187.976 261.832 188.489 261.158 188.936C260.866 189.129 260.207 188.881 260.103 189.06C259.505 190.088 258.321 190.526 257.611 191.409z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M202.2 142C202.2 142 192.962 139.128 181.8 164.8C181.8 164.8 179.4 170 177 172C174.6 174 163.4 177.6 161.4 181.6L151 197.6C151 197.6 165.8 181.6 169 179.2C169 179.2 177 170.8 173.8 177.6C173.8 177.6 159.8 188.4 161 197.6C161 197.6 155.4 212 154.6 214C154.6 214 170.6 182 173 180.8C175.4 179.6 176.6 179.6 175.4 183.2C174.2 186.8 173.8 203.2 171 205.2C171 205.2 179 184.8 178.2 181.6C178.2 181.6 181.4 178 183.8 183.2L182.6 199.2L187 211.2C187 211.2 184.6 200 186.2 184.4C186.2 184.4 184.2 174 188.2 179.6C192.2 185.2 201.8 191.2 201.8 196C201.8 196 196.6 178.4 187.4 173.6L183.4 179.6L182.2 177.6C182.2 177.6 178.6 176.8 183 170C187.4 163.2 187 162.4 187 162.4C187 162.4 193.4 169.6 195 169.6C195 169.6 208.2 162 209.4 186.4C209.4 186.4 216.2 172 207 165.2C207 165.2 192.2 163.2 193.4 158L200.6 145.6C204.2 140.4 202.6 143.2 202.6 143.2z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M182.2 158.4C182.2 158.4 169.4 158.4 166.2 163.6L159 173.2C159 173.2 176.2 163.2 180.2 162C184.2 160.8 182.2 158.4 182.2 158.4z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M142.2 164.8C142.2 164.8 140.2 166 139.8 168.8C139.4 171.6 137 172 137.8 174.8C138.6 177.6 140.6 180 140.6 176C140.6 172 142.2 170 143 168.8C143.8 167.6 145.4 163.2 142.2 164.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M133.4 226C133.4 226 125 222 121.8 218.4C118.6 214.8 119.052 219.966 114.2 219.6C108.353 219.159 109.4 203.2 109.4 203.2L105.4 210.8C105.4 210.8 104.2 225.2 112.2 222.8C116.107 221.628 117.4 223.2 115.8 224C114.2 224.8 121.4 225.2 118.6 226.8C115.8 228.4 130.2 223.2 127.8 233.6L133.4 226z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M120.8 240.4C120.8 240.4 105.4 244.8 101.8 235.2C101.8 235.2 97 237.6 99.2 240.6C101.4 243.6 102.6 244 102.6 244C102.6 244 108 245.2 107.4 246C106.8 246.8 104.4 250.2 104.4 250.2C104.4 250.2 114.6 244.2 120.8 240.4z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M349.201 318.601C348.774 320.735 347.103 321.536 345.201 322.201C343.284 321.243 340.686 318.137 338.801 320.201C338.327 319.721 337.548 319.661 337.204 318.999C336.739 318.101 337.011 317.055 336.669 316.257C336.124 314.985 335.415 313.619 335.601 312.201C337.407 311.489 338.002 309.583 337.528 307.82C337.459 307.563 337.03 307.366 337.23 307.017C337.416 306.694 337.734 306.467 338.001 306.2C337.866 306.335 337.721 306.568 337.61 306.548C337 306.442 337.124 305.805 337.254 305.418C337.839 303.672 339.853 303.408 341.201 304.6C341.457 304.035 341.966 304.229 342.401 304.2C342.351 303.621 342.759 303.094 342.957 302.674C343.475 301.576 345.104 302.682 345.901 302.07C346.977 301.245 348.04 300.546 349.118 301.149C350.927 302.162 352.636 303.374 353.835 305.115C354.41 305.949 354.65 307.23 354.592 308.188C354.554 308.835 353.173 308.483 352.83 309.412C352.185 311.16 354.016 311.679 354.772 313.017C354.97 313.366 354.706 313.67 354.391 313.768C353.98 313.896 353.196 313.707 353.334 314.16C354.306 317.353 351.55 318.031 349.201 318.601z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M339.6 338.201C339.593 336.463 337.992 334.707 339.201 333.001C339.336 333.135 339.467 333.356 339.601 333.356C339.736 333.356 339.867 333.135 340.001 333.001C341.496 335.217 345.148 336.145 345.006 338.991C344.984 339.438 343.897 340.356 344.801 341.001C342.988 342.349 342.933 344.719 342.001 346.601C340.763 346.315 339.551 345.952 338.401 345.401C338.753 343.915 338.636 342.231 339.456 340.911C339.89 340.213 339.603 339.134 339.6 338.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M173.4 329.201C173.4 329.201 156.542 339.337 170.6 324.001C179.4 314.401 189.4 308.801 189.4 308.801C189.4 308.801 199.8 304.4 203.4 303.2C207 302 222.2 296.8 225.4 296.4C228.6 296 238.2 292 245 296C251.8 300 259.8 304.4 259.8 304.4C259.8 304.4 243.4 296 239.8 298.4C236.2 300.8 229 300.4 223 303.6C223 303.6 208.2 308.001 205 310.001C201.8 312.001 191.4 323.601 189.8 322.801C188.2 322.001 190.2 321.601 191.4 318.801C192.6 316.001 190.6 314.401 182.6 320.801C174.6 327.201 173.4 329.201 173.4 329.201z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M180.805 323.234C180.805 323.234 182.215 310.194 190.693 311.859C190.693 311.859 198.919 307.689 201.641 305.721C201.641 305.721 209.78 304.019 211.09 303.402C229.569 294.702 244.288 299.221 244.835 298.101C245.381 296.982 265.006 304.099 268.615 308.185C269.006 308.628 258.384 302.588 248.686 300.697C240.413 299.083 218.811 300.944 207.905 306.48C204.932 307.989 195.987 313.773 193.456 313.662C190.925 313.55 180.805 323.234 180.805 323.234z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M177 348.801C177 348.801 161.8 346.401 178.6 344.801C178.6 344.801 196.6 342.801 200.6 337.601C200.6 337.601 214.2 328.401 217 328.001C219.8 327.601 249.8 320.401 250.2 318.001C250.6 315.601 256.2 315.601 257.8 316.401C259.4 317.201 258.6 318.401 255.8 319.201C253 320.001 221.8 336.401 215.4 337.601C209 338.801 197.4 346.401 192.6 347.601C187.8 348.801 177 348.801 177 348.801z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M196.52 341.403C196.52 341.403 187.938 340.574 196.539 339.755C196.539 339.755 205.355 336.331 207.403 333.668C207.403 333.668 214.367 328.957 215.8 328.753C217.234 328.548 231.194 324.861 231.399 323.633C231.604 322.404 265.67 309.823 270.09 313.013C273.001 315.114 263.1 313.437 253.466 317.847C252.111 318.467 218.258 333.054 214.981 333.668C211.704 334.283 205.765 338.174 203.307 338.788C200.85 339.403 196.52 341.403 196.52 341.403z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M188.6 343.601C188.6 343.601 193.8 343.201 192.6 344.801C191.4 346.401 189 345.601 189 345.601L188.6 343.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M181.4 345.201C181.4 345.201 186.6 344.801 185.4 346.401C184.2 348.001 181.8 347.201 181.8 347.201L181.4 345.201z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M171 346.801C171 346.801 176.2 346.401 175 348.001C173.8 349.601 171.4 348.801 171.4 348.801L171 346.801z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M163.4 347.601C163.4 347.601 168.6 347.201 167.4 348.801C166.2 350.401 163.8 349.601 163.8 349.601L163.4 347.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M201.8 308.001C201.8 308.001 206.2 308.001 205 309.601C203.8 311.201 200.6 310.801 200.6 310.801L201.8 308.001z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M191.8 313.601C191.8 313.601 198.306 311.46 195.8 314.801C194.6 316.401 192.2 315.601 192.2 315.601L191.8 313.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M180.6 318.401C180.6 318.401 185.8 318.001 184.6 319.601C183.4 321.201 181 320.401 181 320.401L180.6 318.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M173 324.401C173 324.401 178.2 324.001 177 325.601C175.8 327.201 173.4 326.401 173.4 326.401L173 324.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M166.2 329.201C166.2 329.201 171.4 328.801 170.2 330.401C169 332.001 166.6 331.201 166.6 331.201L166.2 329.201z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M205.282 335.598C205.282 335.598 212.203 335.066 210.606 337.195C209.009 339.325 205.814 338.26 205.814 338.26L205.282 335.598z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M215.682 330.798C215.682 330.798 222.603 330.266 221.006 332.395C219.409 334.525 216.214 333.46 216.214 333.46L215.682 330.798z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M226.482 326.398C226.482 326.398 233.403 325.866 231.806 327.995C230.209 330.125 227.014 329.06 227.014 329.06L226.482 326.398z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M236.882 321.598C236.882 321.598 243.803 321.066 242.206 323.195C240.609 325.325 237.414 324.26 237.414 324.26L236.882 321.598z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M209.282 303.598C209.282 303.598 216.203 303.066 214.606 305.195C213.009 307.325 209.014 307.06 209.014 307.06L209.282 303.598z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M219.282 300.398C219.282 300.398 226.203 299.866 224.606 301.995C223.009 304.125 218.614 303.86 218.614 303.86L219.282 300.398z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M196.6 340.401C196.6 340.401 201.8 340.001 200.6 341.601C199.4 343.201 197 342.401 197 342.401L196.6 340.401z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M123.4 241.2C123.4 241.2 119 250 118.6 253.2C118.6 253.2 119.4 244.4 120.6 242.4C121.8 240.4 123.4 241.2 123.4 241.2z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M105 255.2C105 255.2 101.8 269.6 102.2 272.4C102.2 272.4 101 260.8 101.4 259.6C101.8 258.4 105 255.2 105 255.2z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M125.8 180.6L125.6 183.8L123.4 184C123.4 184 137.6 196.6 138.2 204.2C138.2 204.2 139 196 125.8 180.6z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M129.784 181.865C129.353 181.449 129.572 180.704 129.164 180.444C128.355 179.928 130.462 179.871 130.234 179.155C129.851 177.949 130.038 177.928 129.916 176.652C129.859 176.054 130.447 174.514 130.832 174.074C132.278 172.422 130.954 169.49 132.594 167.939C132.898 167.65 133.274 167.098 133.559 166.68C134.218 165.717 135.402 165.229 136.352 164.401C136.67 164.125 136.469 163.298 137.038 163.39C137.752 163.505 138.993 163.375 138.948 164.216C138.835 166.336 137.506 168.056 136.226 169.724C136.677 170.428 136.219 171.063 135.935 171.62C134.6 174.24 134.789 177.081 134.615 179.921C134.61 180.006 134.303 180.084 134.311 180.137C134.664 182.472 135.248 184.671 136.127 186.9C136.493 187.83 136.964 188.725 137.114 189.652C137.225 190.338 137.328 191.171 136.92 191.876C138.955 194.766 137.646 197.417 138.815 200.948C139.022 201.573 140.714 203.487 140.251 203.326C137.738 202.455 137.626 202.057 137.449 201.304C137.303 200.681 136.973 199.304 136.736 198.702C136.672 198.538 136.501 196.654 136.423 196.532C134.91 194.15 136.268 194.326 134.898 191.968C133.47 191.288 132.504 190.184 131.381 189.022C131.183 188.818 132.326 188.094 132.145 187.881C131.053 186.592 129.9 185.825 130.236 184.332C130.391 183.642 130.528 182.585 129.784 181.865z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M126.2 183.6C126.2 183.6 126.6 190.4 129 192C131.4 193.6 130.2 192.8 127 191.6C123.8 190.4 125 189.6 125 189.6C125 189.6 122.2 190 124.6 192C127 194 130.6 196.4 129 196.4C127.4 196.4 119.8 192.4 119.8 189.6C119.8 186.8 118.8 182.7 118.8 182.7C118.8 182.7 119.9 181.9 124.7 182C124.7 182 126.1 182.7 126.2 183.6z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M125.4 202.2C125.4 202.2 116.88 199.409 98.4 202.8C98.4 202.8 107.431 200.722 126.2 203C136.5 204.25 125.4 202.2 125.4 202.2z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M127.498 202.129C127.498 202.129 119.252 198.611 100.547 200.392C100.547 200.392 109.725 199.103 128.226 202.995C138.38 205.131 127.498 202.129 127.498 202.129z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M129.286 202.222C129.286 202.222 121.324 198.101 102.539 198.486C102.539 198.486 111.787 197.882 129.948 203.14C139.914 206.025 129.286 202.222 129.286 202.222z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M130.556 202.445C130.556 202.445 123.732 198.138 106.858 197.04C106.858 197.04 115.197 197.21 131.078 203.319C139.794 206.672 130.556 202.445 130.556 202.445z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M245.84 212.961C245.84 212.961 244.91 213.605 245.124 212.424C245.339 211.243 273.547 198.073 277.161 198.323C277.161 198.323 246.913 211.529 245.84 212.961z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M242.446 213.6C242.446 213.6 241.57 214.315 241.691 213.121C241.812 211.927 268.899 196.582 272.521 196.548C272.521 196.548 243.404 212.089 242.446 213.6z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M239.16 214.975C239.16 214.975 238.332 215.747 238.374 214.547C238.416 213.348 258.233 197.851 268.045 195.977C268.045 195.977 250.015 204.104 239.16 214.975z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M236.284 216.838C236.284 216.838 235.539 217.532 235.577 216.453C235.615 215.373 253.449 201.426 262.28 199.74C262.28 199.74 246.054 207.054 236.284 216.838z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M204.6 364.801C204.6 364.801 189.4 362.401 206.2 360.801C206.2 360.801 224.2 358.801 228.2 353.601C228.2 353.601 241.8 344.401 244.6 344.001C247.4 343.601 263.8 340.001 264.2 337.601C264.6 335.201 270.6 332.801 272.2 333.601C273.8 334.401 273.8 343.601 271 344.401C268.2 345.201 249.4 352.401 243 353.601C236.6 354.801 225 362.401 220.2 363.601C215.4 364.801 204.6 364.801 204.6 364.801z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M277.6 327.401C277.6 327.401 274.6 329.001 273.4 331.601C273.4 331.601 267 342.201 252.8 345.401C252.8 345.401 229.8 354.401 222 356.401C222 356.401 208.6 361.401 201.2 360.601C201.2 360.601 194.2 360.801 200.4 362.401C200.4 362.401 220.6 360.401 224 358.601C224 358.601 239.6 353.401 242.6 350.801C245.6 348.201 263.8 343.201 266 341.201C268.2 339.201 278 330.801 277.6 327.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M218.882 358.911C218.882 358.911 224.111 358.685 222.958 360.234C221.805 361.784 219.357 360.91 219.357 360.91L218.882 358.911z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M211.68 360.263C211.68 360.263 216.908 360.037 215.756 361.586C214.603 363.136 212.155 362.263 212.155 362.263L211.68 360.263z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M201.251 361.511C201.251 361.511 206.48 361.284 205.327 362.834C204.174 364.383 201.726 363.51 201.726 363.51L201.251 361.511z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M193.617 362.055C193.617 362.055 198.846 361.829 197.693 363.378C196.54 364.928 194.092 364.054 194.092 364.054L193.617 362.055z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M235.415 351.513C235.415 351.513 242.375 351.212 240.84 353.274C239.306 355.336 236.047 354.174 236.047 354.174L235.415 351.513z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M245.73 347.088C245.73 347.088 251.689 343.787 251.155 348.849C250.885 351.405 246.362 349.749 246.362 349.749L245.73 347.088z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M254.862 344.274C254.862 344.274 262.021 340.573 260.287 346.035C259.509 348.485 255.493 346.935 255.493 346.935L254.862 344.274z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M264.376 339.449C264.376 339.449 268.735 334.548 269.801 341.21C270.207 343.748 265.008 342.11 265.008 342.11L264.376 339.449z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M226.834 355.997C226.834 355.997 232.062 355.77 230.91 357.32C229.757 358.869 227.308 357.996 227.308 357.996L226.834 355.997z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M262.434 234.603C262.434 234.603 261.708 235.268 261.707 234.197C261.707 233.127 279.191 219.863 288.034 218.479C288.034 218.479 271.935 225.208 262.434 234.603z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M265.4 298.4C265.4 298.4 287.401 320.801 296.601 324.401C296.601 324.401 305.801 335.601 301.801 361.601C301.801 361.601 298.601 369.201 295.401 348.401C295.401 348.401 298.601 323.201 287.401 339.201C287.401 339.201 279 329.301 285.4 329.601C285.4 329.601 288.601 331.601 289.001 330.001C289.401 328.401 281.4 314.801 264.2 300.4C247 286 265.4 298.4 265.4 298.4z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M207 337.201C207 337.201 206.8 335.401 208.6 336.201C210.4 337.001 304.601 343.201 336.201 367.201C336.201 367.201 291.001 344.001 207 337.201z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M217.4 332.801C217.4 332.801 217.2 331.001 219 331.801C220.8 332.601 357.401 331.601 381.001 364.001C381.001 364.001 359.001 338.801 217.4 332.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M229 328.801C229 328.801 228.8 327.001 230.6 327.801C232.4 328.601 405.801 315.601 429.401 348.001C429.401 348.001 419.801 322.401 229 328.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M239 324.001C239 324.001 238.8 322.201 240.6 323.001C242.4 323.801 364.601 285.2 388.201 317.601C388.201 317.601 374.801 293 239 324.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M181 346.801C181 346.801 180.8 345.001 182.6 345.801C184.4 346.601 202.2 348.801 204.2 387.601C204.2 387.601 197 345.601 181 346.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M172.2 348.401C172.2 348.401 172 346.601 173.8 347.401C175.6 348.201 189.8 343.601 187 382.401C187 382.401 188.2 347.201 172.2 348.401z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M164.2 348.801C164.2 348.801 164 347.001 165.8 347.801C167.6 348.601 183 349.201 170.6 371.601C170.6 371.601 180.2 347.601 164.2 348.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M211.526 304.465C211.526 304.465 211.082 306.464 212.631 305.247C228.699 292.622 261.141 233.72 316.826 228.086C316.826 228.086 278.518 215.976 211.526 304.465z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M222.726 302.665C222.726 302.665 221.363 301.472 223.231 300.847C225.099 300.222 337.541 227.72 376.826 235.686C376.826 235.686 349.719 228.176 222.726 302.665z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M201.885 308.767C201.885 308.767 201.376 310.366 203.087 309.39C212.062 304.27 215.677 247.059 259.254 245.804C259.254 245.804 226.843 231.09 201.885 308.767z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M181.962 319.793C181.962 319.793 180.885 321.079 182.838 320.825C193.084 319.493 214.489 278.222 258.928 283.301C258.928 283.301 226.962 268.955 181.962 319.793z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M193.2 313.667C193.2 313.667 192.389 315.136 194.258 314.511C204.057 311.237 217.141 266.625 261.729 263.078C261.729 263.078 227.603 255.135 193.2 313.667z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M174.922 324.912C174.922 324.912 174.049 325.954 175.631 325.748C183.93 324.669 201.268 291.24 237.264 295.354C237.264 295.354 211.371 283.734 174.922 324.912z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M167.323 330.821C167.323 330.821 166.318 331.866 167.909 331.748C172.077 331.439 202.715 298.36 221.183 313.862C221.183 313.862 209.168 295.139 167.323 330.821z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M236.855 298.898C236.855 298.898 235.654 297.543 237.586 297.158C239.518 296.774 360.221 239.061 398.184 251.927C398.184 251.927 372.243 241.053 236.855 298.898z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M203.4 363.201C203.4 363.201 203.2 361.401 205 362.201C206.8 363.001 222.2 363.601 209.8 386.001C209.8 386.001 219.4 362.001 203.4 363.201z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M213.8 361.601C213.8 361.601 213.6 359.801 215.4 360.601C217.2 361.401 235 363.601 237 402.401C237 402.401 229.8 360.401 213.8 361.601z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M220.6 360.001C220.6 360.001 220.4 358.201 222.2 359.001C224 359.801 248.6 363.201 272.2 395.601C272.2 395.601 236.6 358.801 220.6 360.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M228.225 357.972C228.225 357.972 227.788 356.214 229.678 356.768C231.568 357.322 252.002 355.423 290.099 389.599C290.099 389.599 243.924 354.656 228.225 357.972z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M238.625 353.572C238.625 353.572 238.188 351.814 240.078 352.368C241.968 352.922 276.802 357.423 328.499 392.399C328.499 392.399 254.324 350.256 238.625 353.572z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M198.2 342.001C198.2 342.001 198 340.201 199.8 341.001C201.6 341.801 255 344.401 285.4 371.201C285.4 371.201 250.499 346.426 198.2 342.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M188.2 346.001C188.2 346.001 188 344.201 189.8 345.001C191.6 345.801 216.2 349.201 239.8 381.601C239.8 381.601 204.2 344.801 188.2 346.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M249.503 348.962C249.503 348.962 248.938 347.241 250.864 347.655C252.79 348.068 287.86 350.004 341.981 381.098C341.981 381.098 264.317 346.704 249.503 348.962z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M257.903 346.562C257.903 346.562 257.338 344.841 259.264 345.255C261.19 345.668 296.26 347.604 350.381 378.698C350.381 378.698 273.317 343.904 257.903 346.562z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M267.503 341.562C267.503 341.562 266.938 339.841 268.864 340.255C270.79 340.668 313.86 345.004 403.582 379.298C403.582 379.298 282.917 338.904 267.503 341.562z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M156.2 348.401C156.2 348.401 161.4 348.001 160.2 349.601C159 351.201 156.6 350.401 156.6 350.401L156.2 348.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M187 362.401C187 362.401 192.2 362.001 191 363.601C189.8 365.201 187.4 364.401 187.4 364.401L187 362.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M178.2 362.001C178.2 362.001 183.4 361.601 182.2 363.201C181 364.801 178.6 364.001 178.6 364.001L178.2 362.001z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M82.831 350.182C82.831 350.182 87.876 351.505 86.218 352.624C84.561 353.744 82.554 352.202 82.554 352.202L82.831 350.182z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M84.831 340.582C84.831 340.582 89.876 341.905 88.218 343.024C86.561 344.144 84.554 342.602 84.554 342.602L84.831 340.582z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M77.631 336.182C77.631 336.182 82.676 337.505 81.018 338.624C79.361 339.744 77.354 338.202 77.354 338.202L77.631 336.182z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M157.4 411.201C157.4 411.201 155.8 411.201 151.8 413.201C149.8 413.201 138.6 416.801 133 426.801C133 426.801 145.4 417.201 157.4 411.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M245.116 503.847C245.257 504.105 245.312 504.525 245.604 504.542C246.262 504.582 247.495 504.883 247.37 504.247C246.522 499.941 245.648 495.004 241.515 493.197C240.876 492.918 239.434 493.331 239.36 494.215C239.233 495.739 239.116 497.088 239.425 498.554C239.725 499.975 241.883 499.985 242.8 498.601C243.736 500.273 244.168 502.116 245.116 503.847z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M234.038 508.581C234.786 509.994 234.659 511.853 236.074 512.416C236.814 512.71 238.664 511.735 238.246 510.661C237.444 508.6 237.056 506.361 235.667 504.55C235.467 504.288 235.707 503.755 235.547 503.427C234.953 502.207 233.808 501.472 232.4 501.801C231.285 504.004 232.433 506.133 233.955 507.842C234.091 507.994 233.925 508.37 234.038 508.581z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M194.436 503.391C194.328 503.014 194.29 502.551 194.455 502.23C194.986 501.197 195.779 500.075 195.442 499.053C195.094 497.997 193.978 498.179 193.328 498.748C192.193 499.742 192.144 501.568 191.453 502.927C191.257 503.313 191.308 503.886 190.867 504.277C190.393 504.698 189.953 506.222 190.049 506.793C190.102 507.106 189.919 517.014 190.141 516.751C190.76 516.018 193.81 506.284 193.879 505.392C193.936 504.661 194.668 504.196 194.436 503.391z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M168.798 496.599C171.432 494.1 174.222 491.139 173.78 487.427C173.664 486.451 171.889 486.978 171.702 487.824C170.9 491.449 168.861 494.11 166.293 496.502C164.097 498.549 162.235 504.893 162 505.401C165.697 500.145 167.954 497.399 168.798 496.599z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M155.224 490.635C155.747 490.265 155.445 489.774 155.662 489.442C156.615 487.984 157.916 486.738 157.934 485C157.937 484.723 157.559 484.414 157.224 484.638C156.947 484.822 156.605 484.952 156.497 485.082C154.467 487.531 153.067 490.202 151.624 493.014C151.441 493.371 150.297 497.862 150.61 497.973C150.849 498.058 152.569 493.877 152.779 493.763C154.042 493.077 154.054 491.462 155.224 490.635z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M171.957 510.179C172.401 509.31 173.977 508.108 173.864 507.219C173.746 506.291 174.214 504.848 173.302 505.536C172.045 506.484 168.596 507.833 168.326 513.641C168.3 514.212 171.274 511.519 171.957 510.179z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M186.4 493.001C186.8 492.333 187.508 492.806 187.967 492.543C188.615 492.171 189.226 491.613 189.518 490.964C190.488 488.815 192.257 486.995 192.4 484.601C190.909 483.196 190.23 485.236 189.6 486.201C188.277 484.554 187.278 486.428 185.978 486.947C185.908 486.975 185.695 486.628 185.62 486.655C184.443 487.095 183.763 488.176 182.765 488.957C182.594 489.091 182.189 488.911 182.042 489.047C181.39 489.65 180.417 489.975 180.137 490.657C179.027 493.364 175.887 495.459 174 503.001C174.381 503.91 178.512 496.359 178.999 495.661C179.835 494.465 179.953 497.322 181.229 496.656C181.28 496.629 181.466 496.867 181.6 497.001C181.794 496.721 182.012 496.492 182.4 496.601C182.4 496.201 182.266 495.645 182.467 495.486C183.704 494.509 183.62 493.441 184.4 492.201C184.858 492.99 185.919 492.271 186.4 493.001z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M246.2 547.401C246.2 547.401 253.6 527.001 249.2 515.801C249.2 515.801 260.6 537.401 256 548.601C256 548.601 255.6 538.201 251.6 533.201C251.6 533.201 247.6 546.001 246.2 547.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M231.4 544.801C231.4 544.801 236.8 536.001 228.8 517.601C228.8 517.601 228 538.001 221.2 549.001C221.2 549.001 235.4 528.801 231.4 544.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M221.4 542.801C221.4 542.801 221.2 522.801 221.6 519.801C221.6 519.801 217.8 536.401 207.6 546.001C207.6 546.001 222 534.001 221.4 542.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M211.8 510.801C211.8 510.801 217.8 524.401 207.8 542.801C207.8 542.801 214.2 530.601 209.4 523.601C209.4 523.601 212 520.201 211.8 510.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M192.6 542.401C192.6 542.401 191.6 526.801 193.4 524.601C193.4 524.601 193.6 518.201 193.2 517.201C193.2 517.201 197.2 511.001 197.4 518.401C197.4 518.401 198.8 526.201 201.6 530.801C201.6 530.801 205.2 536.201 205 542.601C205 542.601 195 512.401 192.6 542.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M189 514.801C189 514.801 182.4 525.601 180.6 544.601C180.6 544.601 179.2 538.401 183 524.001C183 524.001 187.2 508.601 189 514.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M167.2 534.601C167.2 534.601 172.2 529.201 173.6 524.201C173.6 524.201 177.2 508.401 170.8 517.001C170.8 517.001 171 525.001 162.8 532.401C162.8 532.401 167.6 530.001 167.2 534.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M161.4 529.601C161.4 529.601 164.8 512.201 165.6 511.401C165.6 511.401 167.4 508.001 164.6 511.201C164.6 511.201 155.8 530.401 151.8 537.001C151.8 537.001 159.8 527.801 161.4 529.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M155.6 513.001C155.6 513.001 167.2 490.601 145.4 516.401C145.4 516.401 156.4 506.601 155.6 513.001z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M140.2 498.401C140.2 498.401 145 479.601 147.6 479.801C147.6 479.801 155.8 470.801 149.2 481.401C149.2 481.401 143.2 491.001 143.8 500.801C143.8 500.801 143.2 491.201 140.2 498.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M470.5 487C470.5 487 458.5 477 456 473.5C456 473.5 469.5 492 469.5 499C469.5 499 472 491.5 470.5 487z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M476 465C476 465 455 450 451.5 442.5C451.5 442.5 478 472 478 476.5C478 476.5 478.5 467.5 476 465z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M493 311C493 311 481 303 479.5 305C479.5 305 490 311.5 492.5 320C492.5 320 491 311 493 311z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M501.5 391.5L484 379.5C484 379.5 503 396.5 503.5 400.5L501.5 391.5z"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M110.75 369L132.75 373.75"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M161 531C161 531 160.5 527.5 151.5 538"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M166.5 536C166.5 536 168.5 529.5 162 534"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M220.5 544.5C220.5 544.5 222 533.5 210.5 546.5"/>
+ </g>
+</svg>
diff --git a/result/svg3.rdr b/result/svg3.rdr
new file mode 100644
index 0000000..e4642a9
--- /dev/null
+++ b/result/svg3.rdr
@@ -0,0 +1,2164 @@
+0 1 svg 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+1 1 g 0 0
+2 14 #text 0 1
+
+2 1 path 1 0
+2 14 #text 0 1
+
+1 15 g 0 0
+1 14 #text 0 1
+
+0 15 svg 0 0
diff --git a/result/svg3.sax b/result/svg3.sax
new file mode 100644
index 0000000..3bb3da3
--- /dev/null
+++ b/result/svg3.sax
@@ -0,0 +1,2407 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(svg)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M77.696 284.285C77.696 284.285 77.797 286.179 76.973 286.16C76.149 286.141 59.695 238.066 39.167 240.309C39.167 240.309 56.95 232.956 77.696 284.285z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M81.226 281.262C81.226 281.262 80.677 283.078 79.908 282.779C79.14 282.481 80.023 231.675 59.957 226.801C59.957 226.801 79.18 225.937 81.226 281.262z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M108.716 323.59C108.716 323.59 110.352 324.55 109.882 325.227C109.411 325.904 60.237 313.102 50.782 331.459C50.782 331.459 54.461 312.572 108.716 323.59z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M105.907 333.801C105.907 333.801 107.763 334.197 107.529 334.988C107.296 335.779 56.593 339.121 53.403 359.522C53.403 359.522 50.945 340.437 105.907 333.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M101.696 328.276C101.696 328.276 103.474 328.939 103.128 329.687C102.782 330.435 52.134 326.346 46.002 346.064C46.002 346.064 46.354 326.825 101.696 328.276z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M90.991 310.072C90.991 310.072 92.299 311.446 91.66 311.967C91.021 312.488 47.278 286.634 33.131 301.676C33.131 301.676 41.872 284.533 90.991 310.072z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M83.446 314.263C83.446 314.263 84.902 315.48 84.326 316.071C83.75 316.661 37.362 295.922 25.008 312.469C25.008 312.469 31.753 294.447 83.446 314.263z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M80.846 318.335C80.846 318.335 82.454 319.343 81.964 320.006C81.474 320.669 32.692 306.446 22.709 324.522C22.709 324.522 26.934 305.749 80.846 318.335z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M91.58 318.949C91.58 318.949 92.702 320.48 92.001 320.915C91.3 321.35 51.231 290.102 35.273 303.207C35.273 303.207 46.138 287.326 91.58 318.949z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M71.8 290C71.8 290 72.4 291.8 71.6 292C70.8 292.2 42.2 250.2 22.999 257.8C22.999 257.8 38.2 246 71.8 290z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M72.495 296.979C72.495 296.979 73.47 298.608 72.731 298.975C71.993 299.343 35.008 264.499 17.899 276.061C17.899 276.061 30.196 261.261 72.495 296.979z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.172')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M72.38 301.349C72.38 301.349 73.502 302.88 72.801 303.315C72.1 303.749 32.031 272.502 16.073 285.607C16.073 285.607 26.938 269.726 72.38 301.349z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M70.17 303.065C70.673 309.113 71.661 315.682 73.4 318.801C73.4 318.801 69.8 331.201 78.6 344.401C78.6 344.401 78.2 351.601 79.8 354.801C79.8 354.801 83.8 363.201 88.6 364.001C92.484 364.648 101.207 367.717 111.068 369.121C111.068 369.121 128.2 383.201 125 396.001C125 396.001 124.6 412.401 121 414.001C121 414.001 132.6 402.801 123 419.601L118.6 438.401C118.6 438.401 144.2 416.801 128.6 435.201L118.6 461.201C118.6 461.201 138.2 442.801 131 451.201L127.8 460.001C127.8 460.001 171 432.801 140.2 462.401C140.2 462.401 148.2 458.801 152.6 461.601C152.6 461.601 159.4 460.401 158.6 462.001C158.6 462.001 137.8 472.401 134.2 490.801C134.2 490.801 142.6 480.801 139.4 491.601L139.8 503.201C139.8 503.201 143.8 481.601 143.4 519.201C143.4 519.201 162.6 501.201 151 522.001L151 538.801C151 538.801 166.2 522.401 159.8 535.201C159.8 535.201 169.8 526.401 165.8 541.601C165.8 541.601 165 552.001 169.4 540.801C169.4 540.801 185.4 510.201 179.4 536.401C179.4 536.401 178.6 555.601 183.4 540.801C183.4 540.801 183.8 551.201 193 558.401C193 558.401 191.8 507.601 204.6 543.601L208.6 560.001C208.6 560.001 211.4 550.801 211 545.601C211 545.601 225.8 529.201 219 553.601C219 553.601 234.2 530.801 231 544.001C231 544.001 223.4 560.001 225 564.801C225 564.801 241.8 530.001 243 528.401C243 528.401 241 570.802 251.8 534.801C251.8 534.801 257.4 546.801 254.6 551.201C254.6 551.201 262.6 543.201 261.8 540.001C261.8 540.001 266.4 531.801 269.2 545.401C269.2 545.401 271 554.801 272.6 551.601C272.6 551.601 276.6 575.602 277.8 552.801C277.8 552.801 279.4 539.201 272.2 527.601C272.2 527.601 273 524.401 270.2 520.401C270.2 520.401 283.8 542.001 276.6 513.201C276.6 513.201 287.801 521.201 289.001 521.201C289.001 521.201 275.4 498.001 284.2 502.801C284.2 502.801 279 492.401 297.001 504.401C297.001 504.401 281 488.401 298.601 498.001C298.601 498.001 306.601 504.401 299.001 494.401C299.001 494.401 284.6 478.401 306.601 496.401C306.601 496.401 318.201 512.801 319.001 515.601C319.001 515.601 309.001 486.401 304.601 483.601C304.601 483.601 313.001 447.201 354.201 462.801C354.201 462.801 361.001 480.001 365.401 461.601C365.401 461.601 378.201 455.201 389.401 482.801C389.401 482.801 393.401 469.201 392.601 466.401C392.601 466.401 399.401 467.601 398.601 466.401C398.601 466.401 411.801 470.801 413.001 470.001C413.001 470.001 419.801 476.801 420.201 473.201C420.201 473.201 429.401 476.001 427.401 472.401C427.401 472.401 436.201 488.001 436.601 491.601L439.001 477.601L441.001 480.401C441.001 480.401 442.601 472.801 441.801 471.601C441.001 470.401 461.801 478.401 466.601 499.201L468.601 507.601C468.601 507.601 474.601 492.801 473.001 488.801C473.001 488.801 478.201 489.601 478.601 494.001C478.601 494.001 482.601 470.801 477.801 464.801C477.801 464.801 482.201 464.001 483.401 467.601L483.401 460.401C483.401 460.401 490.601 461.201 490.601 458.801C490.601 458.801 495.001 454.801 497.001 459.601C497.001 459.601 484.601 424.401 503.001 443.601C503.001 443.601 510.201 454.401 506.601 435.601C503.001 416.801 499.001 415.201 503.801 414.801C503.801 414.801 504.601 411.201 502.601 409.601C500.601 408.001 503.801 409.601 503.801 409.601C503.801 409.601 508.601 413.601 503.401 391.601C503.401 391.601 509.801 393.201 497.801 364.001C497.801 364.001 500.601 361.601 496.601 353.201C496.601 353.201 504.601 357.601 507.401 356.001C507.401 356.001 507.001 354.401 503.801 350.401C503.801 350.401 482.201 295.6 502.601 317.601C502.601 317.601 514.451 331.151 508.051 308.351C508.051 308.351 498.94 284.341 499.717 280.045L70.17 303.065z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226; stroke:#000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M499.717 280.245C500.345 280.426 502.551 281.55 503.801 283.2C503.801 283.2 510.601 294 505.401 275.6C505.401 275.6 496.201 246.8 505.001 258C505.001 258 511.001 265.2 507.801 251.6C503.936 235.173 501.401 228.8 501.401 228.8C501.401 228.8 513.001 233.6 486.201 194L495.001 197.6C495.001 197.6 475.401 158 453.801 152.8L445.801 146.8C445.801 146.8 484.201 108.8 471.401 72C471.401 72 464.601 66.8 455.001 76C455.001 76 448.601 80.8 442.601 79.2C442.601 79.2 411.801 80.4 409.801 80.4C407.801 80.4 373.001 43.2 307.401 60.8C307.401 60.8 302.201 62.8 297.801 61.6C297.801 61.6 279.4 45.6 230.6 68.4C230.6 68.4 220.6 70.4 219 70.4C217.4 70.4 214.6 70.4 206.6 76.8C198.6 83.2 198.2 84 196.2 85.6C196.2 85.6 179.8 96.8 175 97.6C175 97.6 163.4 104 159 114L155.4 115.2C155.4 115.2 153.8 122.4 153.4 123.6C153.4 123.6 148.6 127.2 147.8 132.8C147.8 132.8 139 138.8 139.4 143.2C139.4 143.2 137.8 148.4 137 153.2C137 153.2 129.8 158 130.6 160.8C130.6 160.8 123 174.8 124.2 181.6C124.2 181.6 117.8 181.2 115 183.6C115 183.6 114.2 188.4 112.6 188.8C112.6 188.8 109.8 190 112.2 194C112.2 194 110.6 196.8 110.2 198.4C110.2 198.4 111 201.2 106.6 206.8C106.6 206.8 100.2 225.6 102.2 230.8C102.2 230.8 102.6 235.6 99.8 237.2C99.8 237.2 96.2 236.8 104.6 248.8C104.6 248.8 105.4 250 102.2 252.4C102.2 252.4 85 256 82.6 272.4C82.6 272.4 69 287.2 69 292.4C69 294.705 69.271 297.852 69.97 302.465C69.97 302.465 69.4 310.801 97 311.601C124.6 312.401 499.717 280.245 499.717 280.245z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M84.4 302.6C59.4 263.2 73.8 319.601 73.8 319.601C82.6 354.001 212.2 316.401 212.2 316.401C212.2 316.401 381.001 286 392.201 282C403.401 278 498.601 284.4 498.601 284.4L493.001 267.6C428.201 221.2 409.001 244.4 395.401 240.4C381.801 236.4 384.201 246 381.001 246.8C377.801 247.6 338.601 222.8 332.201 223.6C325.801 224.4 300.459 200.649 315.401 232.4C331.401 266.4 257 271.6 240.2 260.4C223.4 249.2 247.4 278.8 247.4 278.8C265.8 298.8 231.4 282 231.4 282C197 269.2 173 294.8 169.8 295.6C166.6 296.4 161.8 299.6 161 293.2C160.2 286.8 152.69 270.099 121 296.4C101 313.001 87.2 291 87.2 291L84.4 302.6z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #e87f3a')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M333.51 225.346C327.11 226.146 301.743 202.407 316.71 234.146C333.31 269.346 258.31 273.346 241.51 262.146C224.709 250.946 248.71 280.546 248.71 280.546C267.11 300.546 232.709 283.746 232.709 283.746C198.309 270.946 174.309 296.546 171.109 297.346C167.909 298.146 163.109 301.346 162.309 294.946C161.509 288.546 154.13 272.012 122.309 298.146C101.073 315.492 87.582 294.037 87.582 294.037L84.382 304.146C59.382 264.346 74.454 322.655 74.454 322.655C83.255 357.056 213.509 318.146 213.509 318.146C213.509 318.146 382.31 287.746 393.51 283.746C404.71 279.746 499.038 286.073 499.038 286.073L493.51 268.764C428.71 222.364 410.31 246.146 396.71 242.146C383.11 238.146 385.51 247.746 382.31 248.546C379.11 249.346 339.91 224.546 333.51 225.346z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ea8c4d')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M334.819 227.091C328.419 227.891 303.685 203.862 318.019 235.891C334.219 272.092 259.619 275.092 242.819 263.892C226.019 252.692 250.019 282.292 250.019 282.292C268.419 302.292 234.019 285.492 234.019 285.492C199.619 272.692 175.618 298.292 172.418 299.092C169.218 299.892 164.418 303.092 163.618 296.692C162.818 290.292 155.57 273.925 123.618 299.892C101.145 317.983 87.964 297.074 87.964 297.074L84.364 305.692C60.564 266.692 75.109 325.71 75.109 325.71C83.909 360.11 214.819 319.892 214.819 319.892C214.819 319.892 383.619 289.492 394.819 285.492C406.019 281.492 499.474 287.746 499.474 287.746L494.02 269.928C429.219 223.528 411.619 247.891 398.019 243.891C384.419 239.891 386.819 249.491 383.619 250.292C380.419 251.092 341.219 226.291 334.819 227.091z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ec9961')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M336.128 228.837C329.728 229.637 304.999 205.605 319.328 237.637C336.128 275.193 260.394 276.482 244.128 265.637C227.328 254.437 251.328 284.037 251.328 284.037C269.728 304.037 235.328 287.237 235.328 287.237C200.928 274.437 176.928 300.037 173.728 300.837C170.528 301.637 165.728 304.837 164.928 298.437C164.128 292.037 157.011 275.839 124.927 301.637C101.218 320.474 88.345 300.11 88.345 300.11L84.345 307.237C62.545 270.437 75.764 328.765 75.764 328.765C84.564 363.165 216.128 321.637 216.128 321.637C216.128 321.637 384.928 291.237 396.129 287.237C407.329 283.237 499.911 289.419 499.911 289.419L494.529 271.092C429.729 224.691 412.929 249.637 399.329 245.637C385.728 241.637 388.128 251.237 384.928 252.037C381.728 252.837 342.528 228.037 336.128 228.837z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #eea575')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M337.438 230.583C331.037 231.383 306.814 207.129 320.637 239.383C337.438 278.583 262.237 278.583 245.437 267.383C228.637 256.183 252.637 285.783 252.637 285.783C271.037 305.783 236.637 288.983 236.637 288.983C202.237 276.183 178.237 301.783 175.037 302.583C171.837 303.383 167.037 306.583 166.237 300.183C165.437 293.783 158.452 277.752 126.237 303.383C101.291 322.965 88.727 303.146 88.727 303.146L84.327 308.783C64.527 273.982 76.418 331.819 76.418 331.819C85.218 366.22 217.437 323.383 217.437 323.383C217.437 323.383 386.238 292.983 397.438 288.983C408.638 284.983 500.347 291.092 500.347 291.092L495.038 272.255C430.238 225.855 414.238 251.383 400.638 247.383C387.038 243.383 389.438 252.983 386.238 253.783C383.038 254.583 343.838 229.783 337.438 230.583z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #f1b288')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M338.747 232.328C332.347 233.128 306.383 209.677 321.947 241.128C341.147 279.928 263.546 280.328 246.746 269.128C229.946 257.928 253.946 287.528 253.946 287.528C272.346 307.528 237.946 290.728 237.946 290.728C203.546 277.928 179.546 303.528 176.346 304.328C173.146 305.128 168.346 308.328 167.546 301.928C166.746 295.528 159.892 279.665 127.546 305.128C101.364 325.456 89.109 306.183 89.109 306.183L84.309 310.328C66.309 277.128 77.073 334.874 77.073 334.874C85.873 369.274 218.746 325.128 218.746 325.128C218.746 325.128 387.547 294.728 398.747 290.728C409.947 286.728 500.783 292.764 500.783 292.764L495.547 273.419C430.747 227.019 415.547 253.128 401.947 249.128C388.347 245.128 390.747 254.728 387.547 255.528C384.347 256.328 345.147 231.528 338.747 232.328z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #f3bf9c')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M340.056 234.073C333.655 234.873 307.313 211.613 323.255 242.873C343.656 282.874 264.855 282.074 248.055 270.874C231.255 259.674 255.255 289.274 255.255 289.274C273.655 309.274 239.255 292.474 239.255 292.474C204.855 279.674 180.855 305.274 177.655 306.074C174.455 306.874 169.655 310.074 168.855 303.674C168.055 297.274 161.332 281.578 128.855 306.874C101.436 327.947 89.491 309.219 89.491 309.219L84.291 311.874C68.291 281.674 77.727 337.929 77.727 337.929C86.527 372.329 220.055 326.874 220.055 326.874C220.055 326.874 388.856 296.474 400.056 292.474C411.256 288.474 501.22 294.437 501.22 294.437L496.056 274.583C431.256 228.183 416.856 254.874 403.256 250.874C389.656 246.873 392.056 256.474 388.856 257.274C385.656 258.074 346.456 233.273 340.056 234.073z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #f5ccb0')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M341.365 235.819C334.965 236.619 307.523 213.944 324.565 244.619C346.565 284.219 266.164 283.819 249.364 272.619C232.564 261.419 256.564 291.019 256.564 291.019C274.964 311.019 240.564 294.219 240.564 294.219C206.164 281.419 182.164 307.019 178.964 307.819C175.764 308.619 170.964 311.819 170.164 305.419C169.364 299.019 162.773 283.492 130.164 308.619C101.509 330.438 89.873 312.256 89.873 312.256L84.273 313.419C69.872 285.019 78.382 340.983 78.382 340.983C87.182 375.384 221.364 328.619 221.364 328.619C221.364 328.619 390.165 298.219 401.365 294.219C412.565 290.219 501.656 296.11 501.656 296.11L496.565 275.746C431.765 229.346 418.165 256.619 404.565 252.619C390.965 248.619 393.365 258.219 390.165 259.019C386.965 259.819 347.765 235.019 341.365 235.819z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #f8d8c4')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M342.674 237.565C336.274 238.365 308.832 215.689 325.874 246.365C347.874 285.965 267.474 285.565 250.674 274.365C233.874 263.165 257.874 292.765 257.874 292.765C276.274 312.765 241.874 295.965 241.874 295.965C207.473 283.165 183.473 308.765 180.273 309.565C177.073 310.365 172.273 313.565 171.473 307.165C170.673 300.765 164.214 285.405 131.473 310.365C101.582 332.929 90.255 315.293 90.255 315.293L84.255 314.965C70.654 288.564 79.037 344.038 79.037 344.038C87.837 378.438 222.673 330.365 222.673 330.365C222.673 330.365 391.474 299.965 402.674 295.965C413.874 291.965 502.093 297.783 502.093 297.783L497.075 276.91C432.274 230.51 419.474 258.365 405.874 254.365C392.274 250.365 394.674 259.965 391.474 260.765C388.274 261.565 349.074 236.765 342.674 237.565z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #fae5d7')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M343.983 239.31C337.583 240.11 310.529 217.223 327.183 248.11C349.183 288.91 268.783 287.31 251.983 276.11C235.183 264.91 259.183 294.51 259.183 294.51C277.583 314.51 243.183 297.71 243.183 297.71C208.783 284.91 184.783 310.51 181.583 311.31C178.382 312.11 173.582 315.31 172.782 308.91C171.982 302.51 165.654 287.318 132.782 312.11C101.655 335.42 90.637 318.329 90.637 318.329L84.236 316.51C71.236 292.51 79.691 347.093 79.691 347.093C88.491 381.493 223.983 332.11 223.983 332.11C223.983 332.11 392.783 301.71 403.983 297.71C415.183 293.71 502.529 299.456 502.529 299.456L497.583 278.074C432.783 231.673 420.783 260.11 407.183 256.11C393.583 252.11 395.983 261.71 392.783 262.51C389.583 263.31 350.383 238.51 343.983 239.31z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #fcf2eb')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M345.292 241.055C338.892 241.855 312.917 218.411 328.492 249.855C349.692 292.656 270.092 289.056 253.292 277.856C236.492 266.656 260.492 296.256 260.492 296.256C278.892 316.256 244.492 299.456 244.492 299.456C210.092 286.656 186.092 312.256 182.892 313.056C179.692 313.856 174.892 317.056 174.092 310.656C173.292 304.256 167.095 289.232 134.092 313.856C101.727 337.911 91.018 321.365 91.018 321.365L84.218 318.056C71.418 294.856 80.346 350.147 80.346 350.147C89.146 384.547 225.292 333.856 225.292 333.856C225.292 333.856 394.093 303.456 405.293 299.456C416.493 295.456 502.965 301.128 502.965 301.128L498.093 279.237C433.292 232.837 422.093 261.856 408.493 257.856C394.893 253.855 397.293 263.456 394.093 264.256C390.892 265.056 351.692 240.255 345.292 241.055z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M84.2 319.601C71.4 297.6 81 353.201 81 353.201C89.8 387.601 226.6 335.601 226.6 335.601C226.6 335.601 395.401 305.2 406.601 301.2C417.801 297.2 503.401 302.8 503.401 302.8L498.601 280.4C433.801 234 423.401 263.6 409.801 259.6C396.201 255.6 398.601 265.2 395.401 266C392.201 266.8 353.001 242 346.601 242.8C340.201 243.6 314.981 219.793 329.801 251.6C352.028 299.307 269.041 289.227 254.6 279.6C237.8 268.4 261.8 298 261.8 298C280.2 318.001 245.8 301.2 245.8 301.2C211.4 288.4 187.4 314.001 184.2 314.801C181 315.601 176.2 318.801 175.4 312.401C174.6 306 168.535 291.144 135.4 315.601C101.8 340.401 91.4 324.401 91.4 324.401L84.2 319.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M125.8 349.601C125.8 349.601 118.6 361.201 139.4 374.401C139.4 374.401 140.8 375.801 122.8 371.601C122.8 371.601 116.6 369.601 115 359.201C115 359.201 110.2 354.801 105.4 349.201C100.6 343.601 125.8 349.601 125.8 349.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M265.8 302C265.8 302 283.498 328.821 282.9 333.601C281.6 344.001 281.4 353.601 284.6 357.601C287.801 361.601 296.601 394.801 296.601 394.801C296.601 394.801 296.201 396.001 308.601 358.001C308.601 358.001 320.201 342.001 300.201 323.601C300.201 323.601 265 294.8 265.8 302z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M145.8 376.401C145.8 376.401 157 383.601 142.6 414.801L149 412.401C149 412.401 148.2 423.601 145 426.001L152.2 422.801C152.2 422.801 157 430.801 153 435.601C153 435.601 169.8 443.601 169 450.001C169 450.001 175.4 442.001 171.4 435.601C167.4 429.201 160.2 433.201 161 414.801L152.2 418.001C152.2 418.001 157.8 409.201 157.8 402.801L149.8 405.201C149.8 405.201 165.269 378.623 154.6 377.201C148.6 376.401 145.8 376.401 145.8 376.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M178.2 393.201C178.2 393.201 181 388.801 178.2 389.601C175.4 390.401 144.2 405.201 138.2 414.801C138.2 414.801 172.6 390.401 178.2 393.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M188.6 401.201C188.6 401.201 191.4 396.801 188.6 397.601C185.8 398.401 154.6 413.201 148.6 422.801C148.6 422.801 183 398.401 188.6 401.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M201.8 386.001C201.8 386.001 204.6 381.601 201.8 382.401C199 383.201 167.8 398.001 161.8 407.601C161.8 407.601 196.2 383.201 201.8 386.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M178.6 429.601C178.6 429.601 178.6 423.601 175.8 424.401C173 425.201 137 442.801 131 452.401C131 452.401 173 426.801 178.6 429.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M179.8 418.801C179.8 418.801 181 414.001 178.2 414.801C176.2 414.801 149.8 426.401 143.8 436.001C143.8 436.001 173.4 414.401 179.8 418.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M165.4 466.401L155.4 474.001C155.4 474.001 165.8 466.401 169.4 467.601C169.4 467.601 162.6 478.801 161.8 484.001C161.8 484.001 172.2 471.201 177.8 471.601C177.8 471.601 185.4 472.001 185.4 482.801C185.4 482.801 191 472.401 194.2 472.801C194.2 472.801 195.4 479.201 194.2 486.001C194.2 486.001 198.2 478.401 202.2 480.001C202.2 480.001 208.6 478.001 207.8 489.601C207.8 489.601 207.8 500.001 207 502.801C207 502.801 212.6 476.401 215 476.001C215 476.001 223 474.801 227.8 483.601C227.8 483.601 223.8 476.001 228.6 478.001C228.6 478.001 239.4 479.601 242.6 486.401C242.6 486.401 235.8 474.401 241.4 477.601C241.4 477.601 248.2 477.601 249.4 484.001C249.4 484.001 257.8 505.201 259.8 506.801C259.8 506.801 252.2 485.201 253.8 485.201C253.8 485.201 251.8 473.201 257 488.001C257 488.001 253.8 474.001 259.4 474.801C265 475.601 269.4 485.601 277.8 483.201C277.8 483.201 287.401 488.801 289.401 419.601L165.4 466.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M170.2 373.601C170.2 373.601 185 367.601 225 373.601C225 373.601 232.2 374.001 239 365.201C245.8 356.401 272.6 349.201 279 351.201L288.601 357.601L289.401 358.801C289.401 358.801 301.801 369.201 302.201 376.801C302.601 384.401 287.801 432.401 278.2 448.401C268.6 464.401 259 476.801 239.8 474.401C239.8 474.401 219 470.401 193.4 474.401C193.4 474.401 164.2 472.801 161.4 464.801C158.6 456.801 172.6 441.601 172.6 441.601C172.6 441.601 177 433.201 175.8 418.801C174.6 404.401 175 376.401 170.2 373.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #e5668c')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M192.2 375.601C200.6 394.001 171 459.201 171 459.201C169 460.801 183.66 466.846 193.8 464.401C204.746 461.763 245 466.001 245 466.001C268.6 450.401 281.4 406.001 281.4 406.001C281.4 406.001 291.801 382.001 274.2 378.801C256.6 375.601 192.2 375.601 192.2 375.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #b23259')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M190.169 406.497C193.495 393.707 195.079 381.906 192.2 375.601C192.2 375.601 254.6 382.001 265.8 361.201C270.041 353.326 284.801 384.001 284.4 393.601C284.4 393.601 221.4 408.001 206.6 396.801L190.169 406.497z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #a5264c')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M194.6 422.801C194.6 422.801 196.6 430.001 194.2 434.001C194.2 434.001 192.6 434.801 191.4 435.201C191.4 435.201 192.6 438.801 198.6 440.401C198.6 440.401 200.6 444.801 203 445.201C205.4 445.601 210.2 451.201 214.2 450.001C218.2 448.801 229.4 444.801 229.4 444.801C229.4 444.801 235 441.601 243.8 445.201C243.8 445.201 246.175 444.399 246.6 440.401C247.1 435.701 250.2 432.001 252.2 430.001C254.2 428.001 263.8 415.201 262.6 414.801C261.4 414.401 194.6 422.801 194.6 422.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ff727f; stroke:#000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M190.2 374.401C190.2 374.401 187.4 396.801 190.6 405.201C193.8 413.601 193 415.601 192.2 419.601C191.4 423.601 195.8 433.601 201.4 439.601L213.4 441.201C213.4 441.201 228.6 437.601 237.8 440.401C237.8 440.401 246.794 441.744 250.2 426.801C250.2 426.801 255 420.401 262.2 417.601C269.4 414.801 276.6 373.201 272.6 365.201C268.6 357.201 254.2 352.801 238.2 368.401C222.2 384.001 220.2 367.201 190.2 374.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M191.8 449.201C191.8 449.201 191 447.201 186.6 446.801C186.6 446.801 164.2 443.201 155.8 430.801C155.8 430.801 149 425.201 153.4 436.801C153.4 436.801 163.8 457.201 170.6 460.001C170.6 460.001 187 464.001 191.8 449.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc3f4c')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M271.742 385.229C272.401 377.323 274.354 368.709 272.6 365.201C266.154 352.307 249.181 357.695 238.2 368.401C222.2 384.001 220.2 367.201 190.2 374.401C190.2 374.401 188.455 388.364 189.295 398.376C189.295 398.376 226.6 386.801 227.4 392.401C227.4 392.401 229 389.201 238.2 389.201C247.4 389.201 270.142 388.029 271.742 385.229z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#a51926; stroke-width:2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M228.6 375.201C228.6 375.201 233.4 380.001 229.8 389.601C229.8 389.601 215.4 405.601 217.4 419.601')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M180.6 460.001C180.6 460.001 176.2 447.201 185 454.001C185 454.001 189.8 456.001 188.6 457.601C187.4 459.201 181.8 463.201 180.6 460.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M185.64 461.201C185.64 461.201 182.12 450.961 189.16 456.401C189.16 456.401 193.581 458.849 192.04 459.281C187.48 460.561 192.04 463.121 185.64 461.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M190.44 461.201C190.44 461.201 186.92 450.961 193.96 456.401C193.96 456.401 198.335 458.711 196.84 459.281C193.48 460.561 196.84 463.121 190.44 461.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M197.04 461.401C197.04 461.401 193.52 451.161 200.56 456.601C200.56 456.601 204.943 458.933 203.441 459.481C200.48 460.561 203.441 463.321 197.04 461.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M203.52 461.321C203.52 461.321 200 451.081 207.041 456.521C207.041 456.521 210.881 458.121 209.921 459.401C208.961 460.681 209.921 463.241 203.52 461.321z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M210.2 462.001C210.2 462.001 205.4 449.601 214.6 456.001C214.6 456.001 219.4 458.001 218.2 459.601C217 461.201 218.2 464.401 210.2 462.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#a5264c; stroke-width:2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M181.8 444.801C181.8 444.801 195 442.001 201 445.201C201 445.201 207 446.401 208.2 446.001C209.4 445.601 212.6 445.201 212.6 445.201')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#a5264c; stroke-width:2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M215.8 453.601C215.8 453.601 227.8 440.001 239.8 444.401C246.816 446.974 245.8 443.601 246.6 440.801C247.4 438.001 247.6 433.801 252.6 430.801')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M233 437.601C233 437.601 229 426.801 226.2 439.601C223.4 452.401 220.2 456.001 218.6 458.801C218.6 458.801 218.6 464.001 227 463.601C227 463.601 237.8 463.201 238.2 460.401C238.6 457.601 237 446.001 233 437.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#a5264c; stroke-width:2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M247 444.801C247 444.801 250.6 442.401 253 443.601')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#a5264c; stroke-width:2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M253.5 428.401C253.5 428.401 256.4 423.501 261.2 422.701')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #b2b2b2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M174.2 465.201C174.2 465.201 192.2 468.401 196.6 466.801C196.6 466.801 205.4 466.801 197 468.801C197 468.801 184.2 468.801 176.2 467.601C176.2 467.601 164.6 462.001 174.2 465.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M188.2 372.001C188.2 372.001 205.8 372.001 207.8 372.801C207.8 372.801 215 403.601 211.4 411.201C211.4 411.201 210.2 414.001 207.4 408.401C207.4 408.401 189 375.601 185.8 373.601C182.6 371.601 187 372.001 188.2 372.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M111.1 369.301C111.1 369.301 120 371.001 132.6 373.601C132.6 373.601 137.4 396.001 140.6 400.801C143.8 405.601 140.2 405.601 136.6 402.801C133 400.001 118.2 386.001 116.2 381.601C114.2 377.201 111.1 369.301 111.1 369.301z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M132.961 373.818C132.961 373.818 138.761 375.366 139.77 377.581C140.778 379.795 138.568 383.092 138.568 383.092C138.568 383.092 137.568 386.397 136.366 384.235C135.164 382.072 132.292 374.412 132.961 373.818z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M133 373.601C133 373.601 136.6 378.801 140.2 378.801C143.8 378.801 144.182 378.388 147 379.001C151.6 380.001 151.2 378.001 157.8 379.201C160.44 379.681 163 378.801 165.8 380.001C168.6 381.201 171.8 380.401 173 378.401C174.2 376.401 179 372.201 179 372.201C179 372.201 166.2 374.001 163.4 374.801C163.4 374.801 141 376.001 133 373.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M177.6 373.801C177.6 373.801 171.15 377.301 170.75 379.701C170.35 382.101 176 385.801 176 385.801C176 385.801 178.75 390.401 179.35 388.001C179.95 385.601 178.4 374.201 177.6 373.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M140.115 379.265C140.115 379.265 147.122 390.453 147.339 379.242C147.339 379.242 147.896 377.984 146.136 377.962C140.061 377.886 141.582 373.784 140.115 379.265z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M147.293 379.514C147.293 379.514 155.214 390.701 154.578 379.421C154.578 379.421 154.585 379.089 152.832 378.936C148.085 378.522 148.43 374.004 147.293 379.514z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M154.506 379.522C154.506 379.522 162.466 390.15 161.797 380.484C161.797 380.484 161.916 379.251 160.262 378.95C156.37 378.244 156.159 374.995 154.506 379.522z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffcc; stroke:#000000; stroke-width:0.5')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M161.382 379.602C161.382 379.602 169.282 391.163 169.63 381.382C169.63 381.382 171.274 380.004 169.528 379.782C163.71 379.042 164.508 374.588 161.382 379.602z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #e5e5b2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M125.208 383.132L117.55 381.601C114.95 376.601 112.85 370.451 112.85 370.451C112.85 370.451 119.2 371.451 131.7 374.251C131.7 374.251 132.576 377.569 134.048 383.364L125.208 383.132z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #e5e5b2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M190.276 378.47C188.61 375.964 187.293 374.206 186.643 373.8C183.63 371.917 187.773 372.294 188.902 372.294C188.902 372.294 205.473 372.294 207.356 373.047C207.356 373.047 207.88 375.289 208.564 378.68C208.564 378.68 198.476 376.67 190.276 378.47z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M243.88 240.321C271.601 244.281 297.121 208.641 298.881 198.96C300.641 189.28 290.521 177.4 290.521 177.4C291.841 174.32 287.001 160.24 281.721 151C276.441 141.76 260.54 142.734 243 141.76C227.16 140.88 208.68 164.2 207.36 165.96C206.04 167.72 212.2 206.001 213.52 211.721C214.84 217.441 212.2 243.841 212.2 243.841C246.44 234.741 216.16 236.361 243.88 240.321z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ea8e51')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M208.088 166.608C206.792 168.336 212.84 205.921 214.136 211.537C215.432 217.153 212.84 243.073 212.84 243.073C245.512 234.193 216.728 235.729 243.944 239.617C271.161 243.505 296.217 208.513 297.945 199.008C299.673 189.504 289.737 177.84 289.737 177.84C291.033 174.816 286.281 160.992 281.097 151.92C275.913 142.848 260.302 143.805 243.08 142.848C227.528 141.984 209.384 164.88 208.088 166.608z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #efaa7c')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M208.816 167.256C207.544 168.952 213.48 205.841 214.752 211.353C216.024 216.865 213.48 242.305 213.48 242.305C244.884 233.145 217.296 235.097 244.008 238.913C270.721 242.729 295.313 208.385 297.009 199.056C298.705 189.728 288.953 178.28 288.953 178.28C290.225 175.312 285.561 161.744 280.473 152.84C275.385 143.936 260.063 144.875 243.16 143.936C227.896 143.088 210.088 165.56 208.816 167.256z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #f4c6a8')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M209.544 167.904C208.296 169.568 214.12 205.761 215.368 211.169C216.616 216.577 214.12 241.537 214.12 241.537C243.556 232.497 217.864 234.465 244.072 238.209C270.281 241.953 294.409 208.257 296.073 199.105C297.737 189.952 288.169 178.72 288.169 178.72C289.417 175.808 284.841 162.496 279.849 153.76C274.857 145.024 259.824 145.945 243.24 145.024C228.264 144.192 210.792 166.24 209.544 167.904z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #f9e2d3')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M210.272 168.552C209.048 170.184 214.76 205.681 215.984 210.985C217.208 216.289 214.76 240.769 214.76 240.769C242.628 231.849 218.432 233.833 244.136 237.505C269.841 241.177 293.505 208.129 295.137 199.152C296.769 190.176 287.385 179.16 287.385 179.16C288.609 176.304 284.121 163.248 279.225 154.68C274.329 146.112 259.585 147.015 243.32 146.112C228.632 145.296 211.496 166.92 210.272 168.552z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M244.2 236.8C269.4 240.4 292.601 208 294.201 199.2C295.801 190.4 286.601 179.6 286.601 179.6C287.801 176.8 283.4 164 278.6 155.6C273.8 147.2 259.346 148.086 243.4 147.2C229 146.4 212.2 167.6 211 169.2C209.8 170.8 215.4 205.6 216.6 210.8C217.8 216 215.4 240 215.4 240C240.9 231.4 219 233.2 244.2 236.8z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M290.601 202.8C290.601 202.8 262.8 210.4 251.2 208.8C251.2 208.8 235.4 202.2 226.6 224C226.6 224 223 231.2 221 233.2C219 235.2 290.601 202.8 290.601 202.8z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M294.401 200.6C294.401 200.6 265.4 212.8 255.4 212.4C255.4 212.4 239 207.8 230.6 222.4C230.6 222.4 222.2 231.6 219 233.2C219 233.2 218.6 234.8 225 230.8L235.4 236C235.4 236 250.2 245.6 259.8 229.6C259.8 229.6 263.8 218.4 263.8 216.4C263.8 214.4 285 208.8 286.601 208.4C288.201 208 294.801 203.8 294.401 200.6z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #99cc32')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M247 236.514C240.128 236.514 231.755 232.649 231.755 226.4C231.755 220.152 240.128 213.887 247 213.887C253.874 213.887 259.446 218.952 259.446 225.2C259.446 231.449 253.874 236.514 247 236.514z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #659900')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M243.377 219.83C238.531 220.552 233.442 222.055 233.514 221.839C235.054 217.22 241.415 213.887 247 213.887C251.296 213.887 255.084 215.865 257.32 218.875C257.32 218.875 252.004 218.545 243.377 219.83z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M255.4 219.6C255.4 219.6 251 216.4 251 218.6C251 218.6 254.6 223 255.4 219.6z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M245.4 227.726C242.901 227.726 240.875 225.7 240.875 223.2C240.875 220.701 242.901 218.675 245.4 218.675C247.9 218.675 249.926 220.701 249.926 223.2C249.926 225.7 247.9 227.726 245.4 227.726z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M141.4 214.4C141.4 214.4 138.2 193.2 140.6 188.8C140.6 188.8 151.4 178.8 151 175.2C151 175.2 150.6 157.2 149.4 156.4C148.2 155.6 140.6 149.6 134.6 156C134.6 156 124.2 174 125 180.4L125 182.4C125 182.4 117.4 182 115.8 184C115.8 184 114.6 189.2 113.4 189.6C113.4 189.6 110.6 192 112.6 194.8C112.6 194.8 110.6 197.2 111 201.2L118.6 205.2C118.6 205.2 120.6 219.6 131.4 224.8C136.236 227.129 139.4 220.4 141.4 214.4z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M140.4 212.56C140.4 212.56 137.52 193.48 139.68 189.52C139.68 189.52 149.4 180.52 149.04 177.28C149.04 177.28 148.68 161.08 147.6 160.36C146.52 159.64 139.68 154.24 134.28 160C134.28 160 124.92 176.2 125.64 181.96L125.64 183.76C125.64 183.76 118.8 183.4 117.36 185.2C117.36 185.2 116.28 189.88 115.2 190.24C115.2 190.24 112.68 192.4 114.48 194.92C114.48 194.92 112.68 197.08 113.04 200.68L119.88 204.28C119.88 204.28 121.68 217.24 131.4 221.92C135.752 224.015 138.6 217.96 140.4 212.56z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #eb955c')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M148.95 157.39C147.86 156.53 140.37 150.76 134.52 157C134.52 157 124.38 174.55 125.16 180.79L125.16 182.74C125.16 182.74 117.75 182.35 116.19 184.3C116.19 184.3 115.02 189.37 113.85 189.76C113.85 189.76 111.12 192.1 113.07 194.83C113.07 194.83 111.12 197.17 111.51 201.07L118.92 204.97C118.92 204.97 120.87 219.01 131.4 224.08C136.114 226.35 139.2 219.79 141.15 213.94C141.15 213.94 138.03 193.27 140.37 188.98C140.37 188.98 150.9 179.23 150.51 175.72C150.51 175.72 150.12 158.17 148.95 157.39z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #f2b892')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M148.5 158.38C147.52 157.46 140.14 151.92 134.44 158C134.44 158 124.56 175.1 125.32 181.18L125.32 183.08C125.32 183.08 118.1 182.7 116.58 184.6C116.58 184.6 115.44 189.54 114.3 189.92C114.3 189.92 111.64 192.2 113.54 194.86C113.54 194.86 111.64 197.14 112.02 200.94L119.24 204.74C119.24 204.74 121.14 218.42 131.4 223.36C135.994 225.572 139 219.18 140.9 213.48C140.9 213.48 137.86 193.34 140.14 189.16C140.14 189.16 150.4 179.66 150.02 176.24C150.02 176.24 149.64 159.14 148.5 158.38z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #f8dcc8')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M148.05 159.37C147.18 158.39 139.91 153.08 134.36 159C134.36 159 124.74 175.65 125.48 181.57L125.48 183.42C125.48 183.42 118.45 183.05 116.97 184.9C116.97 184.9 115.86 189.71 114.75 190.08C114.75 190.08 112.16 192.3 114.01 194.89C114.01 194.89 112.16 197.11 112.53 200.81L119.56 204.51C119.56 204.51 121.41 217.83 131.4 222.64C135.873 224.794 138.8 218.57 140.65 213.02C140.65 213.02 137.69 193.41 139.91 189.34C139.91 189.34 149.9 180.09 149.53 176.76C149.53 176.76 149.16 160.11 148.05 159.37z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M140.4 212.46C140.4 212.46 137.52 193.48 139.68 189.52C139.68 189.52 149.4 180.52 149.04 177.28C149.04 177.28 148.68 161.08 147.6 160.36C146.84 159.32 139.68 154.24 134.28 160C134.28 160 124.92 176.2 125.64 181.96L125.64 183.76C125.64 183.76 118.8 183.4 117.36 185.2C117.36 185.2 116.28 189.88 115.2 190.24C115.2 190.24 112.68 192.4 114.48 194.92C114.48 194.92 112.68 197.08 113.04 200.68L119.88 204.28C119.88 204.28 121.68 217.24 131.4 221.92C135.752 224.015 138.6 217.86 140.4 212.46z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M137.3 206.2C137.3 206.2 115.7 196 114.8 195.2C114.8 195.2 123.9 203.4 124.7 203.4C125.5 203.4 137.3 206.2 137.3 206.2z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M120.2 200C120.2 200 138.6 203.6 138.6 208C138.6 210.912 138.357 224.331 133 222.8C124.6 220.4 128.2 206 120.2 200z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #99cc32')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M128.6 203.8C128.6 203.8 137.578 205.274 138.6 208C139.2 209.6 139.863 217.908 134.4 219C129.848 219.911 127.618 209.69 128.6 203.8z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M214.595 246.349C214.098 244.607 215.409 244.738 217.2 244.2C219.2 243.6 231.4 239.8 232.2 237.2C233 234.6 246.2 239 246.2 239C248 239.8 252.4 242.4 252.4 242.4C257.2 243.6 263.8 244 263.8 244C266.2 245 269.6 247.8 269.6 247.8C284.2 258 296.601 250.8 296.601 250.8C316.601 244.2 310.601 227 310.601 227C307.601 218 310.801 214.6 310.801 214.6C311.001 210.8 318.201 217.2 318.201 217.2C320.801 221.4 321.601 226.4 321.601 226.4C329.601 237.6 326.201 219.8 326.201 219.8C326.401 218.8 323.601 215.2 323.601 214C323.601 212.8 321.801 209.4 321.801 209.4C318.801 206 321.201 199 321.201 199C323.001 185.2 320.801 187 320.801 187C319.601 185.2 310.401 195.2 310.401 195.2C308.201 198.6 302.201 200.2 302.201 200.2C299.401 202 296.001 200.6 296.001 200.6C293.401 200.2 287.801 207.2 287.801 207.2C290.601 207 293.001 211.4 295.401 211.6C297.801 211.8 299.601 209.2 301.201 208.6C302.801 208 305.601 213.8 305.601 213.8C306.001 216.4 300.401 221.2 300.401 221.2C300.001 225.8 298.401 224.2 298.401 224.2C295.401 223.6 294.201 227.4 293.201 232C292.201 236.6 288.001 237 288.001 237C286.401 244.4 285.2 241.4 285.2 241.4C285 235.8 279 241.6 279 241.6C277.8 243.6 273.2 241.4 273.2 241.4C266.4 239.4 268.8 237.4 268.8 237.4C270.6 235.2 281.8 237.4 281.8 237.4C284 235.8 276 231.8 276 231.8C275.4 230 276.4 225.6 276.4 225.6C277.6 222.4 284.4 216.8 284.4 216.8C293.801 215.6 291.001 214 291.001 214C284.801 208.8 279 216.4 279 216.4C276.8 222.6 259.4 237.6 259.4 237.6C254.6 241 257.2 234.2 253.2 237.6C249.2 241 228.6 232 228.6 232C217.038 230.807 214.306 246.549 210.777 243.429C210.777 243.429 216.195 251.949 214.595 246.349z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M409.401 80C409.401 80 383.801 88 381.001 106.8C381.001 106.8 378.601 129.6 399.001 147.2C399.001 147.2 399.401 153.6 401.401 156.8C401.401 156.8 399.801 161.6 418.601 154L445.801 145.6C445.801 145.6 452.201 143.2 457.401 134.4C462.601 125.6 477.801 106.8 474.201 81.6C474.201 81.6 475.401 70.4 469.401 70C469.401 70 461.001 68.4 453.801 76C453.801 76 447.001 79.2 444.601 78.8L409.401 80z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M464.022 79.01C464.022 79.01 466.122 70.08 461.282 74.92C461.282 74.92 454.242 80.64 446.761 80.64C446.761 80.64 432.241 82.84 427.841 96.04C427.841 96.04 423.881 122.88 431.801 128.6C431.801 128.6 436.641 136.08 443.681 129.48C450.722 122.88 466.222 92.65 464.022 79.01z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #323232')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M463.648 79.368C463.648 79.368 465.738 70.624 460.986 75.376C460.986 75.376 454.074 80.992 446.729 80.992C446.729 80.992 432.473 83.152 428.153 96.112C428.153 96.112 424.265 122.464 432.041 128.08C432.041 128.08 436.793 135.424 443.705 128.944C450.618 122.464 465.808 92.76 463.648 79.368z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #666666')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M463.274 79.726C463.274 79.726 465.354 71.168 460.69 75.832C460.69 75.832 453.906 81.344 446.697 81.344C446.697 81.344 432.705 83.464 428.465 96.184C428.465 96.184 424.649 122.048 432.281 127.56C432.281 127.56 436.945 134.768 443.729 128.408C450.514 122.048 465.394 92.87 463.274 79.726z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #999999')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M462.9 80.084C462.9 80.084 464.97 71.712 460.394 76.288C460.394 76.288 453.738 81.696 446.665 81.696C446.665 81.696 432.937 83.776 428.777 96.256C428.777 96.256 425.033 121.632 432.521 127.04C432.521 127.04 437.097 134.112 443.753 127.872C450.41 121.632 464.98 92.98 462.9 80.084z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M462.526 80.442C462.526 80.442 464.586 72.256 460.098 76.744C460.098 76.744 453.569 82.048 446.633 82.048C446.633 82.048 433.169 84.088 429.089 96.328C429.089 96.328 425.417 121.216 432.761 126.52C432.761 126.52 437.249 133.456 443.777 127.336C450.305 121.216 464.566 93.09 462.526 80.442z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M462.151 80.8C462.151 80.8 464.201 72.8 459.801 77.2C459.801 77.2 453.401 82.4 446.601 82.4C446.601 82.4 433.401 84.4 429.401 96.4C429.401 96.4 425.801 120.8 433.001 126C433.001 126 437.401 132.8 443.801 126.8C450.201 120.8 464.151 93.2 462.151 80.8z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #992600')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M250.6 284C250.6 284 230.2 264.8 222.2 264C222.2 264 187.8 260 173 278C173 278 190.6 257.6 218.2 263.2C218.2 263.2 196.6 258.8 184.2 262C184.2 262 167.4 262 157.8 276L155 280.8C155 280.8 159 266 177.4 260C177.4 260 200.2 255.2 211 260C211 260 189.4 253.2 179.4 255.2C179.4 255.2 149 252.8 136.2 279.2C136.2 279.2 140.2 264.8 155 257.6C155 257.6 168.6 248.8 189 251.6C189 251.6 203.4 254.8 208.6 257.2C213.8 259.6 212.6 256.8 204.2 252C204.2 252 198.6 242 184.6 242.4C184.6 242.4 141.8 246 131.4 258C131.4 258 145 246.8 155.4 244C155.4 244 177.8 236 186.2 236.8C186.2 236.8 211 237.8 218.6 233.8C218.6 233.8 207.4 238.8 210.6 242C213.8 245.2 220.6 252.8 220.6 254C220.6 255.2 244.8 277.3 248.4 281.7L250.6 284z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M389 478C389 478 373.5 441.5 361 432C361 432 387 448 390.5 466C390.5 466 390.5 476 389 478z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M436 485.5C436 485.5 409.5 430.5 391 406.5C391 406.5 434.5 444 439.5 470.5L440 476L437 473.5C437 473.5 436.5 482.5 436 485.5z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M492.5 437C492.5 437 430 377.5 428.5 375C428.5 375 489 441 492 448.5C492 448.5 490 439.5 492.5 437z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M304 480.5C304 480.5 323.5 428.5 342.5 451C342.5 451 357.5 461 357 464C357 464 353 457.5 335 458C335 458 316 455 304 480.5z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M494.5 353C494.5 353 449.5 324.5 442 323C430.193 320.639 491.5 352 496.5 362.5C496.5 362.5 498.5 360 494.5 353z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M343.801 459.601C343.801 459.601 364.201 457.601 371.001 450.801L375.401 454.401L393.001 416.001L396.601 421.201C396.601 421.201 411.001 406.401 410.201 398.401C409.401 390.401 423.001 404.401 423.001 404.401C423.001 404.401 422.201 392.801 429.401 399.601C429.401 399.601 427.001 384.001 435.401 392.001C435.401 392.001 424.864 361.844 447.401 387.601C453.001 394.001 448.601 387.201 448.601 387.201C448.601 387.201 422.601 339.201 444.201 353.601C444.201 353.601 446.201 330.801 445.001 326.401C443.801 322.001 441.801 299.6 437.001 294.4C432.201 289.2 437.401 287.6 443.001 292.8C443.001 292.8 431.801 268.8 445.001 280.8C445.001 280.8 441.401 265.6 437.001 262.8C437.001 262.8 431.401 245.6 446.601 256.4C446.601 256.4 442.201 244 439.001 240.8C439.001 240.8 427.401 213.2 434.601 218L439.001 221.6C439.001 221.6 432.201 207.6 438.601 212C445.001 216.4 445.001 216 445.001 216C445.001 216 423.801 182.8 444.201 200.4C444.201 200.4 436.042 186.482 432.601 179.6C432.601 179.6 413.801 159.2 428.201 165.6L433.001 167.2C433.001 167.2 424.201 157.2 416.201 155.6C408.201 154 418.601 147.6 425.001 149.6C431.401 151.6 447.001 159.2 447.001 159.2C447.001 159.2 459.801 178 463.801 178.4C463.801 178.4 443.801 170.8 449.801 178.8C449.801 178.8 464.201 192.8 457.001 192.4C457.001 192.4 451.001 199.6 455.801 208.4C455.801 208.4 437.342 190.009 452.201 215.6L459.001 232C459.001 232 434.601 207.2 445.801 229.2C445.801 229.2 463.001 252.8 465.001 253.2C467.001 253.6 471.401 262.4 471.401 262.4L467.001 260.4L472.201 269.2C472.201 269.2 461.001 257.2 467.001 270.4L472.601 284.8C472.601 284.8 452.201 262.8 465.801 292.4C465.801 292.4 449.401 287.2 458.201 304.4C458.201 304.4 456.601 320.401 457.001 325.601C457.401 330.801 458.601 359.201 454.201 367.201C449.801 375.201 460.201 394.401 462.201 398.401C464.201 402.401 467.801 413.201 459.001 404.001C450.201 394.801 454.601 400.401 456.601 409.201C458.601 418.001 464.601 433.601 463.801 439.201C463.801 439.201 462.601 440.401 459.401 436.801C459.401 436.801 444.601 414.001 446.201 428.401C446.201 428.401 445.001 436.401 441.801 445.201C441.801 445.201 438.601 456.001 438.601 447.201C438.601 447.201 435.401 430.401 432.601 438.001C429.801 445.601 426.201 451.601 423.401 454.001C420.601 456.401 415.401 433.601 414.201 444.001C414.201 444.001 402.201 431.601 397.401 448.001L385.801 464.401C385.801 464.401 385.401 452.001 384.201 458.001C384.201 458.001 354.201 464.001 343.801 459.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M309.401 102.8C309.401 102.8 297.801 94.8 293.801 95.2C289.801 95.6 321.401 86.4 362.601 114C362.601 114 367.401 116.8 371.001 116.4C371.001 116.4 374.201 118.8 371.401 122.4C371.401 122.4 362.601 132 373.801 143.2C373.801 143.2 392.201 150 386.601 141.2C386.601 141.2 397.401 145.2 399.801 149.2C402.201 153.2 401.001 149.2 401.001 149.2C401.001 149.2 394.601 142 388.601 136.8C388.601 136.8 383.401 134.8 380.601 126.4C377.801 118 375.401 108 379.801 104.8C379.801 104.8 375.801 109.2 376.601 105.2C377.401 101.2 381.001 97.6 382.601 97.2C384.201 96.8 400.601 81 407.401 80.6C407.401 80.6 398.201 82 395.201 81C392.201 80 365.601 68.6 359.601 67.4C359.601 67.4 342.801 60.8 354.801 62.8C354.801 62.8 390.601 66.6 408.801 79.8C408.801 79.8 401.601 71.4 383.201 64.4C383.201 64.4 361.001 51.8 325.801 56.8C325.801 56.8 308.001 60 300.201 61.8C300.201 61.8 297.601 61.2 297.001 60.8C296.401 60.4 284.6 51.4 257 58.4C257 58.4 240 63 231.4 67.8C231.4 67.8 216.2 69 212.6 72.2C212.6 72.2 194 86.8 192 87.6C190 88.4 178.6 96 177.8 96.4C177.8 96.4 202.4 89.8 204.8 87.4C207.2 85 224.6 82.4 227 83.8C229.4 85.2 237.8 84.6 228.2 85.2C228.2 85.2 303.801 100 304.601 102C305.401 104 309.401 102.8 309.401 102.8z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M380.801 93.6C380.801 93.6 370.601 86.2 368.601 86.2C366.601 86.2 354.201 76 350.001 76.4C345.801 76.8 333.601 66.8 306.201 75C306.201 75 305.601 73 309.201 72.2C309.201 72.2 315.601 70 316.001 69.4C316.001 69.4 336.201 65.2 343.401 68.8C343.401 68.8 352.601 71.4 358.801 77.6C358.801 77.6 370.001 80.8 373.201 79.8C373.201 79.8 382.001 82 382.401 83.8C382.401 83.8 388.201 86.8 386.401 89.4C386.401 89.4 386.801 91 380.801 93.6z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M368.33 91.491C369.137 92.123 370.156 92.221 370.761 93.03C370.995 93.344 370.706 93.67 370.391 93.767C369.348 94.084 368.292 93.514 367.15 94.102C366.748 94.309 366.106 94.127 365.553 93.978C363.921 93.537 362.092 93.512 360.401 94.2C358.416 93.071 356.056 93.655 353.975 92.654C353.917 92.627 353.695 92.973 353.621 92.946C350.575 91.801 346.832 92.084 344.401 89.8C341.973 89.388 339.616 88.926 337.188 88.246C335.37 87.737 333.961 86.748 332.341 85.916C330.964 85.208 329.507 84.686 327.973 84.314C326.11 83.862 324.279 83.974 322.386 83.454C322.293 83.429 322.101 83.773 322.019 83.746C321.695 83.638 321.405 83.055 321.234 83.108C319.553 83.63 318.065 82.658 316.401 83C315.223 81.776 313.495 82.021 311.949 81.579C308.985 80.731 305.831 82.001 302.801 81C306.914 79.158 311.601 80.39 315.663 78.321C317.991 77.135 320.653 78.237 323.223 77.477C323.71 77.333 324.401 77.131 324.801 77.8C324.935 77.665 325.117 77.426 325.175 77.454C327.625 78.611 329.94 79.885 332.422 80.951C332.763 81.097 333.295 80.865 333.547 81.067C335.067 82.283 337.01 82.18 338.401 83.4C340.099 82.898 341.892 83.278 343.621 82.654C343.698 82.627 343.932 82.968 343.965 82.946C345.095 82.198 346.25 82.469 347.142 82.773C347.48 82.888 348.143 83.135 348.448 83.209C349.574 83.485 350.43 83.965 351.609 84.148C351.723 84.166 351.908 83.826 351.98 83.854C353.103 84.292 354.145 84.236 354.801 85.4C354.936 85.265 355.101 85.027 355.183 85.054C356.21 85.392 356.859 86.147 357.96 86.388C358.445 86.494 359.057 87.12 359.633 87.296C362.025 88.027 363.868 89.556 366.062 90.451C366.821 90.761 367.697 90.995 368.33 91.491z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M291.696 77.261C289.178 75.536 286.81 74.43 284.368 72.644C284.187 72.511 283.827 72.681 283.625 72.559C282.618 71.95 281.73 71.369 280.748 70.673C280.209 70.291 279.388 70.302 278.88 70.044C276.336 68.752 273.707 68.194 271.2 67C271.882 66.362 273.004 66.606 273.6 65.8C273.795 66.08 274.033 66.364 274.386 66.173C276.064 65.269 277.914 65.116 279.59 65.206C281.294 65.298 283.014 65.603 284.789 65.875C285.096 65.922 285.295 66.445 285.618 66.542C287.846 67.205 290.235 66.68 292.354 67.518C293.945 68.147 295.515 68.97 296.754 70.245C297.006 70.505 296.681 70.806 296.401 71C296.789 70.891 297.062 71.097 297.173 71.41C297.257 71.649 297.257 71.951 297.173 72.19C297.061 72.502 296.782 72.603 296.408 72.654C295.001 72.844 296.773 71.464 296.073 71.912C294.8 72.726 295.546 74.132 294.801 75.4C294.521 75.206 294.291 74.988 294.401 74.6C294.635 75.122 294.033 75.412 293.865 75.728C293.48 76.453 292.581 77.868 291.696 77.261z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M259.198 84.609C256.044 83.815 252.994 83.93 249.978 82.654C249.911 82.626 249.688 82.973 249.624 82.946C248.258 82.352 247.34 81.386 246.264 80.34C245.351 79.452 243.693 79.839 242.419 79.352C242.095 79.228 241.892 78.716 241.591 78.677C240.372 78.52 239.445 77.571 238.4 77C240.736 76.205 243.147 76.236 245.609 75.852C245.722 75.834 245.867 76.155 246 76.155C246.136 76.155 246.266 75.934 246.4 75.8C246.595 76.08 246.897 76.406 247.154 76.152C247.702 75.612 248.258 75.802 248.798 75.842C248.942 75.852 249.067 76.155 249.2 76.155C249.336 76.155 249.467 75.844 249.6 75.844C249.736 75.845 249.867 76.155 250 76.155C250.136 76.155 250.266 75.934 250.4 75.8C251.092 76.582 251.977 76.028 252.799 76.207C253.837 76.434 254.104 77.582 255.178 77.88C259.893 79.184 264.03 81.329 268.393 83.416C268.7 83.563 268.91 83.811 268.8 84.2C269.067 84.2 269.38 84.112 269.57 84.244C270.628 84.976 271.669 85.524 272.366 86.622C272.582 86.961 272.253 87.368 272.02 87.316C267.591 86.321 263.585 85.713 259.198 84.609z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M245.338 128.821C243.746 127.602 243.162 125.571 242.034 123.779C241.82 123.439 242.094 123.125 242.411 123.036C242.971 122.877 243.514 123.355 243.923 123.557C245.668 124.419 247.203 125.661 249.2 125.8C251.19 128.034 255.45 128.419 255.457 131.8C255.458 132.659 254.03 131.741 253.6 132.6C251.149 131.597 248.76 131.7 246.38 130.233C245.763 129.852 246.093 129.399 245.338 128.821z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cc7226')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M217.8 76.244C217.935 76.245 224.966 76.478 224.949 76.592C224.904 76.901 217.174 77.95 216.81 77.78C216.646 77.704 209.134 80.134 209 80C209.268 79.865 217.534 76.244 217.8 76.244z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M233.2 86C233.2 86 218.4 87.8 214 89C209.6 90.2 191 97.8 188 99.8C188 99.8 174.6 105.2 157.6 125.2C157.6 125.2 165.2 121.8 167.4 119C167.4 119 181 106.4 180.8 109C180.8 109 193 100.4 192.4 102.6C192.4 102.6 216.8 91.4 214.8 94.6C214.8 94.6 236.4 90 235.4 92C235.4 92 254.2 96.4 251.4 96.6C251.4 96.6 245.6 97.8 252 101.4C252 101.4 248.6 105.8 243.2 101.8C237.8 97.8 240.8 100 235.8 101C235.8 101 233.2 101.8 228.6 97.8C228.6 97.8 223 93.2 214.2 96.8C214.2 96.8 183.6 109.4 181.6 110C181.6 110 178 112.8 175.6 116.4C175.6 116.4 169.8 120.8 166.8 122.2C166.8 122.2 154 133.8 152.8 135.2C152.8 135.2 149.4 140.4 148.6 140.8C148.6 140.8 155 137 157 135C157 135 171 125 176.4 124.2C176.4 124.2 180.8 121.2 181.6 119.8C181.6 119.8 196 110.6 200.2 110.6C200.2 110.6 209.4 115.8 211.8 108.8C211.8 108.8 217.6 107 223.2 108.2C223.2 108.2 226.4 105.6 225.6 103.4C225.6 103.4 227.2 101.6 228.2 105.4C228.2 105.4 231.6 109 236.4 107C236.4 107 240.4 106.8 238.4 109.2C238.4 109.2 234 113 222.2 113.2C222.2 113.2 209.8 113.8 193.4 121.4C193.4 121.4 163.6 131.8 154.4 142.2C154.4 142.2 148 151 142.6 152.2C142.6 152.2 136.8 153 130.8 160.4C130.8 160.4 140.6 154.6 149.6 154.6C149.6 154.6 153.6 152.2 149.8 155.8C149.8 155.8 146.2 163.4 147.8 168.8C147.8 168.8 147.2 174 146.4 175.6C146.4 175.6 138.6 188.4 138.6 190.8C138.6 193.2 139.8 203 140.2 203.6C140.6 204.2 139.2 202 143 204.4C146.8 206.8 149.6 208.4 150.4 211.2C151.2 214 148.4 205.8 148.2 204C148 202.2 143.8 195 144.6 192.6C144.6 192.6 145.6 193.6 146.4 195C146.4 195 145.8 194.4 146.4 190.8C146.4 190.8 147.2 185.6 148.6 182.4C150 179.2 152 175.4 152.4 174.6C152.8 173.8 152.8 168 154.2 170.6L157.6 173.2C157.6 173.2 154.8 170.6 157 168.4C157 168.4 156 162.8 157.8 160.2C157.8 160.2 164.8 151.8 166.4 150.8C168 149.8 166.6 150.2 166.6 150.2C166.6 150.2 172.6 146 166.8 147.6C166.8 147.6 162.8 149.2 159.8 149.2C159.8 149.2 152.2 151.2 156.2 147C160.2 142.8 170.2 137.4 174 137.6L174.8 139.2L186 136.8L184.8 137.6C184.8 137.6 184.6 137.4 188.8 137C193 136.6 198.8 138 200.2 136.2C201.6 134.4 205 133.4 204.6 134.8C204.2 136.2 204 138.2 204 138.2C204 138.2 209 132.4 208.4 134.6C207.8 136.8 199.6 142 198.2 148.2L208.6 140L212.2 137C212.2 137 215.8 139.2 216 137.6C216.2 136 220.8 130.2 222 130.4C223.2 130.6 225.2 127.8 225 130.4C224.8 133 232.4 138.4 232.4 138.4C232.4 138.4 235.6 136.6 237 138C238.4 139.4 242.6 118.2 242.6 118.2L267.6 107.6L311.201 104.2L294.201 97.4L233.2 86z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#4c0000; stroke-width:2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M251.4 285C251.4 285 236.4 268.2 228 265.6C228 265.6 214.6 258.8 190 266.6')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#4c0000; stroke-width:2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M224.8 264.2C224.8 264.2 199.6 256.2 184.2 260.4C184.2 260.4 165.8 262.4 157.4 276.2')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#4c0000; stroke-width:2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M221.2 263C221.2 263 204.2 255.8 189.4 253.6C189.4 253.6 172.8 251 156.2 258.2C156.2 258.2 144 264.2 138.6 274.4')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#4c0000; stroke-width:2')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M222.2 263.4C222.2 263.4 206.8 252.4 205.8 251C205.8 251 198.8 240 185.8 239.6C185.8 239.6 164.4 240.4 147.2 248.4')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M220.895 254.407C222.437 255.87 249.4 284.8 249.4 284.8C284.6 321.401 256.6 287.2 256.6 287.2C249 282.4 239.8 263.6 239.8 263.6C238.6 260.8 253.8 270.8 253.8 270.8C257.8 271.6 271.4 290.8 271.4 290.8C264.6 288.4 269.4 295.6 269.4 295.6C272.2 297.6 292.601 313.201 292.601 313.201C296.201 317.201 300.201 318.801 300.201 318.801C314.201 313.601 307.801 326.801 307.801 326.801C310.201 333.601 315.801 322.001 315.801 322.001C327.001 305.2 310.601 307.601 310.601 307.601C280.6 310.401 273.8 294.4 273.8 294.4C271.4 292 280.2 294.4 280.2 294.4C288.601 296.4 273 282 273 282C275.4 282 284.6 288.8 284.6 288.8C295.001 298 297.001 296 297.001 296C315.001 287.2 325.401 294.8 325.401 294.8C327.401 296.4 321.801 303.2 323.401 308.401C325.001 313.601 329.801 326.001 329.801 326.001C327.401 327.601 327.801 338.401 327.801 338.401C344.601 361.601 335.001 359.601 335.001 359.601C319.401 359.201 334.201 366.801 334.201 366.801C337.401 368.801 346.201 376.001 346.201 376.001C343.401 374.801 341.801 380.001 341.801 380.001C346.601 384.001 343.801 388.801 343.801 388.801C337.801 390.001 336.601 394.001 336.601 394.001C343.401 402.001 333.401 402.401 333.401 402.401C337.001 406.801 332.201 418.801 332.201 418.801C327.401 418.801 321.001 424.401 321.001 424.401C323.401 429.201 313.001 434.801 313.001 434.801C304.601 436.401 307.401 443.201 307.401 443.201C299.401 449.201 297.001 465.201 297.001 465.201C296.201 475.601 293.801 478.801 299.001 476.801C304.201 474.801 303.401 462.401 303.401 462.401C298.601 446.801 341.401 430.801 341.401 430.801C345.401 429.201 346.201 424.001 346.201 424.001C348.201 424.401 357.001 432.001 357.001 432.001C364.601 443.201 365.001 434.001 365.001 434.001C366.201 430.401 364.601 424.401 364.601 424.401C370.601 402.801 356.601 396.401 356.601 396.401C346.601 362.801 360.601 371.201 360.601 371.201C363.401 376.801 374.201 382.001 374.201 382.001L377.801 379.601C376.201 374.801 384.601 368.801 384.601 368.801C387.401 375.201 393.401 367.201 393.401 367.201C397.001 342.801 409.401 357.201 409.401 357.201C413.401 358.401 414.601 351.601 414.601 351.601C418.201 341.201 414.601 327.601 414.601 327.601C418.201 327.201 427.801 333.201 427.801 333.201C430.601 329.601 421.401 312.801 425.401 315.201C429.401 317.601 433.801 319.201 433.801 319.201C434.601 317.201 424.601 304.801 424.601 304.801C420.201 302 415.001 281.6 415.001 281.6C422.201 285.2 412.201 270 412.201 270C412.201 266.8 418.201 255.6 418.201 255.6C417.401 248.8 418.201 249.2 418.201 249.2C421.001 250.4 429.001 252 422.201 245.6C415.401 239.2 423.001 234.4 423.001 234.4C427.401 231.6 413.801 232 413.801 232C408.601 227.6 409.001 223.6 409.001 223.6C417.001 225.6 402.601 211.2 400.201 207.6C397.801 204 407.401 198.8 407.401 198.8C420.601 195.2 409.001 192 409.001 192C389.401 192.4 400.201 181.6 400.201 181.6C406.201 182 404.601 179.6 404.601 179.6C399.401 178.4 389.801 172 389.801 172C385.801 168.4 389.401 169.2 389.401 169.2C406.201 170.4 377.401 159.2 377.401 159.2C385.401 159.2 367.401 148.8 367.401 148.8C365.401 147.2 362.201 139.6 362.201 139.6C356.201 134.4 351.401 127.6 351.401 127.6C351.001 123.2 346.201 118.4 346.201 118.4C334.601 104.8 329.001 105.2 329.001 105.2C314.201 101.6 309.001 102.4 309.001 102.4L256.2 106.8C229.8 119.6 237.6 140.6 237.6 140.6C244 149 253.2 145.2 253.2 145.2C257.8 139 269.4 141.2 269.4 141.2C289.801 144.4 287.201 140.8 287.201 140.8C284.801 136.2 268.6 130 268.4 129.4C268.2 128.8 259.4 125.4 259.4 125.4C256.4 124.2 252 115 252 115C248.8 111.6 264.6 117.4 264.6 117.4C263.4 118.4 270.8 122.4 270.8 122.4C288.201 121.4 298.801 132.2 298.801 132.2C309.601 148.8 309.801 140.6 309.801 140.6C312.601 131.2 300.801 110 300.801 110C301.201 108 309.401 114.6 309.401 114.6C310.801 112.6 311.601 118.4 311.601 118.4C311.801 120.8 315.601 128.8 315.601 128.8C318.401 141.8 322.001 134.4 322.001 134.4L326.601 143.8C328.001 146.4 322.001 154 322.001 154C321.801 156.8 322.601 156.6 317.001 164.2C311.401 171.8 314.801 176.2 314.801 176.2C313.401 182.8 322.201 182.4 322.201 182.4C324.801 184.6 328.201 184.6 328.201 184.6C330.001 186.6 332.401 186 332.401 186C334.001 182.2 340.201 184.2 340.201 184.2C341.601 181.8 349.801 181.4 349.801 181.4C350.801 178.8 351.201 177.2 354.601 176.6C358.001 176 333.401 133 333.401 133C339.801 132.2 331.601 119.8 331.601 119.8C329.401 113.2 340.801 127.8 343.001 129.2C345.201 130.6 346.201 132.8 344.601 132.6C343.001 132.4 341.201 134.6 342.601 134.8C344.001 135 357.001 150 360.401 160.2C363.801 170.4 369.801 174.4 376.001 180.4C382.201 186.4 381.401 210.6 381.401 210.6C381.001 219.4 387.001 230 387.001 230C389.001 233.8 384.801 252 384.801 252C382.801 254.2 384.201 255 384.201 255C385.201 256.2 392.001 269.4 392.001 269.4C390.201 269.2 393.801 272.8 393.801 272.8C399.001 278.8 392.601 275.8 392.601 275.8C386.601 274.2 393.601 284 393.601 284C394.801 285.8 385.801 281.2 385.801 281.2C376.601 280.6 388.201 287.8 388.201 287.8C396.801 295 385.401 290.6 385.401 290.6C380.801 288.8 384.001 295.6 384.001 295.6C387.201 297.2 404.401 304.2 404.401 304.2C404.801 308.001 401.801 313.001 401.801 313.001C402.201 317.001 400.001 320.401 400.001 320.401C398.801 328.601 398.201 329.401 398.201 329.401C394.001 329.601 386.601 343.401 386.601 343.401C384.801 346.001 374.601 358.001 374.601 358.001C372.601 365.001 354.601 357.801 354.601 357.801C348.001 361.201 350.001 357.801 350.001 357.801C349.601 355.601 354.401 349.601 354.401 349.601C361.401 347.001 358.801 336.201 358.801 336.201C362.801 334.801 351.601 332.001 351.801 330.801C352.001 329.601 357.801 328.201 357.801 328.201C365.801 326.201 361.401 323.801 361.401 323.801C360.801 319.801 363.801 314.201 363.801 314.201C375.401 313.401 363.801 297.2 363.801 297.2C353.001 289.6 352.001 283.8 352.001 283.8C364.601 275.6 356.401 263.2 356.601 259.6C356.801 256 358.001 234.4 358.001 234.4C356.001 228.2 353.001 214.6 353.001 214.6C355.201 209.4 362.601 196.8 362.601 196.8C365.401 192.6 374.201 187.8 372.001 184.8C369.801 181.8 362.001 183.6 362.001 183.6C354.201 182.2 354.801 187.4 354.801 187.4C353.201 188.4 352.401 193.4 352.401 193.4C351.68 201.333 342.801 207.6 342.801 207.6C331.601 213.8 340.801 217.8 340.801 217.8C346.801 224.4 337.001 224.6 337.001 224.6C326.001 222.8 334.201 233 334.201 233C345.001 245.8 342.001 248.6 342.001 248.6C331.801 249.6 344.401 258.8 344.401 258.8C344.401 258.8 343.601 256.8 343.801 258.6C344.001 260.4 347.001 264.6 347.801 266.6C348.601 268.6 344.601 268.8 344.601 268.8C345.201 278.4 329.801 274.2 329.801 274.2C329.801 274.2 329.801 274.2 328.201 274.4C326.601 274.6 315.401 273.8 309.601 271.6C303.801 269.4 297.001 269.4 297.001 269.4C297.001 269.4 293.001 271.2 285.4 271C277.8 270.8 269.8 273.6 269.8 273.6C265.4 273.2 274 268.8 274.2 269C274.4 269.2 280 263.6 272 264.2C250.203 265.835 239.4 255.6 239.4 255.6C237.4 254.2 234.8 251.4 234.8 251.4C224.8 249.4 236.2 263.8 236.2 263.8C237.4 265.2 236 266.2 236 266.2C235.2 264.6 227.4 259.2 227.4 259.2C224.589 258.227 223.226 256.893 220.895 254.407z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #4c0000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M197 242.8C197 242.8 208.6 248.4 211.2 251.2C213.8 254 227.8 265.4 227.8 265.4C227.8 265.4 222.4 263.4 219.8 261.6C217.2 259.8 206.4 251.6 206.4 251.6C206.4 251.6 202.6 245.6 197 242.8z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #99cc32')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M138.991 211.603C139.328 211.455 138.804 208.743 138.6 208.2C137.578 205.474 128.6 204 128.6 204C128.373 205.365 128.318 206.961 128.424 208.599C128.424 208.599 133.292 214.118 138.991 211.603z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #659900')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M138.991 211.403C138.542 211.561 138.976 208.669 138.8 208.2C137.778 205.474 128.6 203.9 128.6 203.9C128.373 205.265 128.318 206.861 128.424 208.499C128.424 208.499 132.692 213.618 138.991 211.403z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M134.6 211.546C133.975 211.546 133.469 210.406 133.469 209C133.469 207.595 133.975 206.455 134.6 206.455C135.225 206.455 135.732 207.595 135.732 209C135.732 210.406 135.225 211.546 134.6 211.546z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M134.6 209z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M89 309.601C89 309.601 83.4 319.601 108.2 313.601C108.2 313.601 122.2 312.401 124.6 310.001C125.8 310.801 134.166 313.734 137 314.401C143.8 316.001 152.2 306 152.2 306C152.2 306 156.8 295.5 159.6 295.5C162.4 295.5 159.2 297.1 159.2 297.1C159.2 297.1 152.6 307.201 153 308.801C153 308.801 147.8 328.801 131.8 329.601C131.8 329.601 115.65 330.551 117 336.401C117 336.401 125.8 334.001 128.2 336.401C128.2 336.401 139 336.001 131 342.401L124.2 354.001C124.2 354.001 124.34 357.919 114.2 354.401C104.4 351.001 94.1 338.101 94.1 338.101C94.1 338.101 78.15 323.551 89 309.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #e59999')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M87.8 313.601C87.8 313.601 85.8 323.201 122.6 312.801C122.6 312.801 127 312.801 129.4 313.601C131.8 314.401 143.8 317.201 145.8 316.001C145.8 316.001 138.6 329.601 127 328.001C127 328.001 113.8 329.601 114.2 334.401C114.2 334.401 118.2 341.601 123 344.001C123 344.001 125.8 346.401 125.4 349.601C125 352.801 122.2 354.401 120.2 355.201C118.2 356.001 115 352.801 113.4 352.801C111.8 352.801 103.4 346.401 99 341.601C94.6 336.801 86.2 324.801 86.6 322.001C87 319.201 87.8 313.601 87.8 313.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #b26565')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M91 331.051C93.6 335.001 96.8 339.201 99 341.601C103.4 346.401 111.8 352.801 113.4 352.801C115 352.801 118.2 356.001 120.2 355.201C122.2 354.401 125 352.801 125.4 349.601C125.8 346.401 123 344.001 123 344.001C119.934 342.468 117.194 338.976 115.615 336.653C115.615 336.653 115.8 339.201 110.6 338.401C105.4 337.601 100.2 334.801 98.6 331.601C97 328.401 94.6 326.001 96.2 329.601C97.8 333.201 100.2 336.801 101.8 337.201C103.4 337.601 103 338.801 100.6 338.401C98.2 338.001 95.4 337.601 91 332.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #992600')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M88.4 310.001C88.4 310.001 90.2 296.4 91.4 292.4C91.4 292.4 90.6 285.6 93 281.4C95.4 277.2 97.4 271 100.4 265.6C103.4 260.2 103.6 256.2 107.6 254.6C111.6 253 117.6 244.4 120.4 243.4C123.2 242.4 123 243.2 123 243.2C123 243.2 129.8 228.4 143.4 232.4C143.4 232.4 127.2 229.6 143 220.2C143 220.2 138.2 221.3 141.5 214.3C143.701 209.632 143.2 216.4 132.2 228.2C132.2 228.2 127.2 236.8 122 239.8C116.8 242.8 104.8 249.8 103.6 253.6C102.4 257.4 99.2 263.2 97.2 264.8C95.2 266.4 92.4 270.6 92 274C92 274 90.8 278 89.4 279.2C88 280.4 87.8 283.6 87.8 285.6C87.8 287.6 85.8 290.4 86 292.8C86 292.8 86.8 311.801 86.4 313.801L88.4 310.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M79.8 314.601C79.8 314.601 77.8 313.201 73.4 319.201C73.4 319.201 80.7 352.201 80.7 353.601C80.7 353.601 81.8 351.501 80.5 344.301C79.2 337.101 78.3 324.401 78.3 324.401L79.8 314.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #992600')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M101.4 254C101.4 254 83.8 257.2 84.2 286.4L83.4 311.201C83.4 311.201 82.2 285.6 81 284C79.8 282.4 83.8 271.2 80.6 277.2C80.6 277.2 66.6 291.2 74.6 312.401C74.6 312.401 76.1 315.701 73.1 311.101C73.1 311.101 68.5 298.5 69.6 292.1C69.6 292.1 69.8 289.9 71.7 287.1C71.7 287.1 80.3 275.4 83 273.1C83 273.1 84.8 258.7 100.2 253.5C100.2 253.5 105.9 251.2 101.4 254z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M240.8 187.8C241.46 187.446 241.451 186.476 242.031 186.303C243.18 185.959 243.344 184.892 243.862 184.108C244.735 182.789 244.928 181.256 245.51 179.765C245.782 179.065 245.809 178.11 245.496 177.45C244.322 174.969 243.62 172.52 242.178 170.094C241.91 169.644 241.648 168.85 241.447 168.252C240.984 166.868 239.727 165.877 238.867 164.557C238.579 164.116 239.104 163.191 238.388 163.107C237.491 163.002 236.042 162.422 235.809 163.448C235.221 166.035 236.232 168.558 237.2 171C236.418 171.692 236.752 172.613 236.904 173.38C237.614 176.986 236.416 180.338 235.655 183.812C235.632 183.916 235.974 184.114 235.946 184.176C234.724 186.862 233.272 189.307 231.453 191.688C230.695 192.68 229.823 193.596 229.326 194.659C228.958 195.446 228.55 196.412 228.8 197.4C225.365 200.18 223.115 204.025 220.504 207.871C220.042 208.551 220.333 209.76 220.884 210.029C221.697 210.427 222.653 209.403 223.123 208.557C223.512 207.859 223.865 207.209 224.356 206.566C224.489 206.391 224.31 205.972 224.445 205.851C227.078 203.504 228.747 200.568 231.2 198.2C233.15 197.871 234.687 196.873 236.435 195.86C236.743 195.681 237.267 195.93 237.557 195.735C239.31 194.558 239.308 192.522 239.414 190.612C239.464 189.728 239.66 188.411 240.8 187.8z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M231.959 183.334C232.083 183.257 231.928 182.834 232.037 182.618C232.199 182.294 232.602 182.106 232.764 181.782C232.873 181.566 232.71 181.186 232.846 181.044C235.179 178.597 235.436 175.573 234.4 172.6C235.424 171.98 235.485 170.718 235.06 169.871C234.207 168.171 234.014 166.245 233.039 164.702C232.237 163.433 230.659 162.189 229.288 163.492C228.867 163.892 228.546 164.679 228.824 165.391C228.888 165.554 229.173 165.7 229.146 165.782C229.039 166.106 228.493 166.33 228.487 166.602C228.457 168.098 227.503 169.609 228.133 170.938C228.905 172.567 229.724 174.424 230.4 176.2C229.166 178.316 230.199 180.765 228.446 182.642C228.31 182.788 228.319 183.174 228.441 183.376C228.733 183.862 229.139 184.268 229.625 184.56C229.827 184.681 230.175 184.683 230.375 184.559C230.953 184.197 231.351 183.71 231.959 183.334z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M294.771 173.023C296.16 174.815 296.45 177.61 294.401 179C294.951 182.309 298.302 180.33 300.401 179.8C300.292 179.412 300.519 179.068 300.802 179.063C301.859 179.048 302.539 178.016 303.601 178.2C304.035 176.643 305.673 175.941 306.317 174.561C308.043 170.866 307.452 166.593 304.868 163.347C304.666 163.093 304.883 162.576 304.759 162.214C304.003 160.003 301.935 159.688 300.001 159C298.824 155.125 298.163 151.094 296.401 147.4C294.787 147.15 294.089 145.411 292.752 144.691C291.419 143.972 290.851 145.551 290.892 146.597C290.899 146.802 291.351 147.026 291.181 147.391C291.105 147.555 290.845 147.666 290.845 147.8C290.846 147.935 291.067 148.066 291.201 148.2C290.283 149.02 288.86 149.497 288.565 150.642C287.611 154.352 290.184 157.477 291.852 160.678C292.443 161.813 291.707 163.084 290.947 164.292C290.509 164.987 290.617 166.114 290.893 166.97C291.645 169.301 293.236 171.04 294.771 173.023z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M257.611 191.409C256.124 193.26 252.712 195.829 255.629 197.757C255.823 197.886 256.193 197.89 256.366 197.756C258.387 196.191 260.39 195.288 262.826 194.706C262.95 194.677 263.224 195.144 263.593 194.983C265.206 194.28 267.216 194.338 268.4 193C272.167 193.224 275.732 192.108 279.123 190.8C280.284 190.352 281.554 189.793 282.755 189.291C284.131 188.715 285.335 187.787 286.447 186.646C286.58 186.51 286.934 186.6 287.201 186.6C287.161 185.737 288.123 185.61 288.37 184.988C288.462 184.756 288.312 184.36 288.445 184.258C290.583 182.628 291.503 180.61 290.334 178.233C290.049 177.655 289.8 177.037 289.234 176.561C288.149 175.65 287.047 176.504 286 176.2C285.841 176.828 285.112 176.656 284.726 176.854C283.867 177.293 282.534 176.708 281.675 177.146C280.313 177.841 279.072 178.01 277.65 178.387C277.338 178.469 276.56 178.373 276.4 179C276.266 178.866 276.118 178.632 276.012 178.654C274.104 179.05 272.844 179.264 271.543 180.956C271.44 181.089 270.998 180.91 270.839 181.045C269.882 181.853 269.477 183.087 268.376 183.759C268.175 183.882 267.823 183.714 267.629 183.843C266.983 184.274 266.616 184.915 265.974 185.362C265.645 185.591 265.245 185.266 265.277 185.01C265.522 183.063 266.175 181.276 265.6 179.4C267.677 176.88 270.194 174.931 272 172.2C272.015 170.034 272.707 167.888 272.594 165.811C272.584 165.618 272.296 164.885 272.17 164.538C271.858 163.684 272.764 162.618 271.92 161.894C270.516 160.691 269.224 161.567 268.4 163C266.562 163.39 264.496 164.083 262.918 162.849C261.911 162.062 261.333 161.156 260.534 160.1C259.549 158.798 259.884 157.362 259.954 155.798C259.96 155.67 259.645 155.534 259.645 155.4C259.646 155.265 259.866 155.134 260 155C259.294 154.374 259.019 153.316 258 153C258.305 151.908 257.629 151.024 256.758 150.722C254.763 150.031 253.086 151.943 251.194 152.016C250.68 152.035 250.213 150.997 249.564 150.672C249.132 150.456 248.428 150.423 248.066 150.689C247.378 151.193 246.789 151.307 246.031 151.512C244.414 151.948 243.136 153.042 241.656 153.897C240.171 154.754 239.216 156.191 238.136 157.511C237.195 158.663 237.059 161.077 238.479 161.577C240.322 162.227 241.626 159.524 243.592 159.85C243.904 159.901 244.11 160.212 244 160.6C244.389 160.709 244.607 160.48 244.8 160.2C245.658 161.219 246.822 161.556 247.76 162.429C248.73 163.333 250.476 162.915 251.491 163.912C253.02 165.414 252.461 168.095 254.4 169.4C253.814 170.713 253.207 171.99 252.872 173.417C252.59 174.623 253.584 175.82 254.795 175.729C256.053 175.635 256.315 174.876 256.8 173.8C257.067 174.067 257.536 174.364 257.495 174.58C257.038 176.967 256.011 178.96 255.553 181.391C255.494 181.708 255.189 181.91 254.8 181.8C254.332 185.949 250.28 188.343 247.735 191.508C247.332 192.01 247.328 193.259 247.737 193.662C249.14 195.049 251.1 193.503 252.8 193C253.013 191.794 253.872 190.852 255.204 190.908C255.46 190.918 255.695 190.376 256.019 190.246C256.367 190.108 256.869 190.332 257.155 190.134C258.884 188.939 260.292 187.833 262.03 186.644C262.222 186.513 262.566 186.672 262.782 186.564C263.107 186.402 263.294 186.015 263.617 185.83C263.965 185.63 264.207 185.92 264.4 186.2C263.754 186.549 263.75 187.506 263.168 187.708C262.393 187.976 261.832 188.489 261.158 188.936C260.866 189.129 260.207 188.881 260.103 189.06C259.505 190.088 258.321 190.526 257.611 191.409z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M202.2 142C202.2 142 192.962 139.128 181.8 164.8C181.8 164.8 179.4 170 177 172C174.6 174 163.4 177.6 161.4 181.6L151 197.6C151 197.6 165.8 181.6 169 179.2C169 179.2 177 170.8 173.8 177.6C173.8 177.6 159.8 188.4 161 197.6C161 197.6 155.4 212 154.6 214C154.6 214 170.6 182 173 180.8C175.4 179.6 176.6 179.6 175.4 183.2C174.2 186.8 173.8 203.2 171 205.2C171 205.2 179 184.8 178.2 181.6C178.2 181.6 181.4 178 183.8 183.2L182.6 199.2L187 211.2C187 211.2 184.6 200 186.2 184.4C186.2 184.4 184.2 174 188.2 179.6C192.2 185.2 201.8 191.2 201.8 196C201.8 196 196.6 178.4 187.4 173.6L183.4 179.6L182.2 177.6C182.2 177.6 178.6 176.8 183 170C187.4 163.2 187 162.4 187 162.4C187 162.4 193.4 169.6 195 169.6C195 169.6 208.2 162 209.4 186.4C209.4 186.4 216.2 172 207 165.2C207 165.2 192.2 163.2 193.4 158L200.6 145.6C204.2 140.4 202.6 143.2 202.6 143.2z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M182.2 158.4C182.2 158.4 169.4 158.4 166.2 163.6L159 173.2C159 173.2 176.2 163.2 180.2 162C184.2 160.8 182.2 158.4 182.2 158.4z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M142.2 164.8C142.2 164.8 140.2 166 139.8 168.8C139.4 171.6 137 172 137.8 174.8C138.6 177.6 140.6 180 140.6 176C140.6 172 142.2 170 143 168.8C143.8 167.6 145.4 163.2 142.2 164.8z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M133.4 226C133.4 226 125 222 121.8 218.4C118.6 214.8 119.052 219.966 114.2 219.6C108.353 219.159 109.4 203.2 109.4 203.2L105.4 210.8C105.4 210.8 104.2 225.2 112.2 222.8C116.107 221.628 117.4 223.2 115.8 224C114.2 224.8 121.4 225.2 118.6 226.8C115.8 228.4 130.2 223.2 127.8 233.6L133.4 226z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M120.8 240.4C120.8 240.4 105.4 244.8 101.8 235.2C101.8 235.2 97 237.6 99.2 240.6C101.4 243.6 102.6 244 102.6 244C102.6 244 108 245.2 107.4 246C106.8 246.8 104.4 250.2 104.4 250.2C104.4 250.2 114.6 244.2 120.8 240.4z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M349.201 318.601C348.774 320.735 347.103 321.536 345.201 322.201C343.284 321.243 340.686 318.137 338.801 320.201C338.327 319.721 337.548 319.661 337.204 318.999C336.739 318.101 337.011 317.055 336.669 316.257C336.124 314.985 335.415 313.619 335.601 312.201C337.407 311.489 338.002 309.583 337.528 307.82C337.459 307.563 337.03 307.366 337.23 307.017C337.416 306.694 337.734 306.467 338.001 306.2C337.866 306.335 337.721 306.568 337.61 306.548C337 306.442 337.124 305.805 337.254 305.418C337.839 303.672 339.853 303.408 341.201 304.6C341.457 304.035 341.966 304.229 342.401 304.2C342.351 303.621 342.759 303.094 342.957 302.674C343.475 301.576 345.104 302.682 345.901 302.07C346.977 301.245 348.04 300.546 349.118 301.149C350.927 302.162 352.636 303.374 353.835 305.115C354.41 305.949 354.65 307.23 354.592 308.188C354.554 308.835 353.173 308.483 352.83 309.412C352.185 311.16 354.016 311.679 354.772 313.017C354.97 313.366 354.706 313.67 354.391 313.768C353.98 313.896 353.196 313.707 353.334 314.16C354.306 317.353 351.55 318.031 349.201 318.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M339.6 338.201C339.593 336.463 337.992 334.707 339.201 333.001C339.336 333.135 339.467 333.356 339.601 333.356C339.736 333.356 339.867 333.135 340.001 333.001C341.496 335.217 345.148 336.145 345.006 338.991C344.984 339.438 343.897 340.356 344.801 341.001C342.988 342.349 342.933 344.719 342.001 346.601C340.763 346.315 339.551 345.952 338.401 345.401C338.753 343.915 338.636 342.231 339.456 340.911C339.89 340.213 339.603 339.134 339.6 338.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M173.4 329.201C173.4 329.201 156.542 339.337 170.6 324.001C179.4 314.401 189.4 308.801 189.4 308.801C189.4 308.801 199.8 304.4 203.4 303.2C207 302 222.2 296.8 225.4 296.4C228.6 296 238.2 292 245 296C251.8 300 259.8 304.4 259.8 304.4C259.8 304.4 243.4 296 239.8 298.4C236.2 300.8 229 300.4 223 303.6C223 303.6 208.2 308.001 205 310.001C201.8 312.001 191.4 323.601 189.8 322.801C188.2 322.001 190.2 321.601 191.4 318.801C192.6 316.001 190.6 314.401 182.6 320.801C174.6 327.201 173.4 329.201 173.4 329.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M180.805 323.234C180.805 323.234 182.215 310.194 190.693 311.859C190.693 311.859 198.919 307.689 201.641 305.721C201.641 305.721 209.78 304.019 211.09 303.402C229.569 294.702 244.288 299.221 244.835 298.101C245.381 296.982 265.006 304.099 268.615 308.185C269.006 308.628 258.384 302.588 248.686 300.697C240.413 299.083 218.811 300.944 207.905 306.48C204.932 307.989 195.987 313.773 193.456 313.662C190.925 313.55 180.805 323.234 180.805 323.234z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M177 348.801C177 348.801 161.8 346.401 178.6 344.801C178.6 344.801 196.6 342.801 200.6 337.601C200.6 337.601 214.2 328.401 217 328.001C219.8 327.601 249.8 320.401 250.2 318.001C250.6 315.601 256.2 315.601 257.8 316.401C259.4 317.201 258.6 318.401 255.8 319.201C253 320.001 221.8 336.401 215.4 337.601C209 338.801 197.4 346.401 192.6 347.601C187.8 348.801 177 348.801 177 348.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M196.52 341.403C196.52 341.403 187.938 340.574 196.539 339.755C196.539 339.755 205.355 336.331 207.403 333.668C207.403 333.668 214.367 328.957 215.8 328.753C217.234 328.548 231.194 324.861 231.399 323.633C231.604 322.404 265.67 309.823 270.09 313.013C273.001 315.114 263.1 313.437 253.466 317.847C252.111 318.467 218.258 333.054 214.981 333.668C211.704 334.283 205.765 338.174 203.307 338.788C200.85 339.403 196.52 341.403 196.52 341.403z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M188.6 343.601C188.6 343.601 193.8 343.201 192.6 344.801C191.4 346.401 189 345.601 189 345.601L188.6 343.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M181.4 345.201C181.4 345.201 186.6 344.801 185.4 346.401C184.2 348.001 181.8 347.201 181.8 347.201L181.4 345.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M171 346.801C171 346.801 176.2 346.401 175 348.001C173.8 349.601 171.4 348.801 171.4 348.801L171 346.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M163.4 347.601C163.4 347.601 168.6 347.201 167.4 348.801C166.2 350.401 163.8 349.601 163.8 349.601L163.4 347.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M201.8 308.001C201.8 308.001 206.2 308.001 205 309.601C203.8 311.201 200.6 310.801 200.6 310.801L201.8 308.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M191.8 313.601C191.8 313.601 198.306 311.46 195.8 314.801C194.6 316.401 192.2 315.601 192.2 315.601L191.8 313.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M180.6 318.401C180.6 318.401 185.8 318.001 184.6 319.601C183.4 321.201 181 320.401 181 320.401L180.6 318.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M173 324.401C173 324.401 178.2 324.001 177 325.601C175.8 327.201 173.4 326.401 173.4 326.401L173 324.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M166.2 329.201C166.2 329.201 171.4 328.801 170.2 330.401C169 332.001 166.6 331.201 166.6 331.201L166.2 329.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M205.282 335.598C205.282 335.598 212.203 335.066 210.606 337.195C209.009 339.325 205.814 338.26 205.814 338.26L205.282 335.598z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M215.682 330.798C215.682 330.798 222.603 330.266 221.006 332.395C219.409 334.525 216.214 333.46 216.214 333.46L215.682 330.798z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M226.482 326.398C226.482 326.398 233.403 325.866 231.806 327.995C230.209 330.125 227.014 329.06 227.014 329.06L226.482 326.398z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M236.882 321.598C236.882 321.598 243.803 321.066 242.206 323.195C240.609 325.325 237.414 324.26 237.414 324.26L236.882 321.598z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M209.282 303.598C209.282 303.598 216.203 303.066 214.606 305.195C213.009 307.325 209.014 307.06 209.014 307.06L209.282 303.598z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M219.282 300.398C219.282 300.398 226.203 299.866 224.606 301.995C223.009 304.125 218.614 303.86 218.614 303.86L219.282 300.398z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M196.6 340.401C196.6 340.401 201.8 340.001 200.6 341.601C199.4 343.201 197 342.401 197 342.401L196.6 340.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #992600')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M123.4 241.2C123.4 241.2 119 250 118.6 253.2C118.6 253.2 119.4 244.4 120.6 242.4C121.8 240.4 123.4 241.2 123.4 241.2z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #992600')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M105 255.2C105 255.2 101.8 269.6 102.2 272.4C102.2 272.4 101 260.8 101.4 259.6C101.8 258.4 105 255.2 105 255.2z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M125.8 180.6L125.6 183.8L123.4 184C123.4 184 137.6 196.6 138.2 204.2C138.2 204.2 139 196 125.8 180.6z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M129.784 181.865C129.353 181.449 129.572 180.704 129.164 180.444C128.355 179.928 130.462 179.871 130.234 179.155C129.851 177.949 130.038 177.928 129.916 176.652C129.859 176.054 130.447 174.514 130.832 174.074C132.278 172.422 130.954 169.49 132.594 167.939C132.898 167.65 133.274 167.098 133.559 166.68C134.218 165.717 135.402 165.229 136.352 164.401C136.67 164.125 136.469 163.298 137.038 163.39C137.752 163.505 138.993 163.375 138.948 164.216C138.835 166.336 137.506 168.056 136.226 169.724C136.677 170.428 136.219 171.063 135.935 171.62C134.6 174.24 134.789 177.081 134.615 179.921C134.61 180.006 134.303 180.084 134.311 180.137C134.664 182.472 135.248 184.671 136.127 186.9C136.493 187.83 136.964 188.725 137.114 189.652C137.225 190.338 137.328 191.171 136.92 191.876C138.955 194.766 137.646 197.417 138.815 200.948C139.022 201.573 140.714 203.487 140.251 203.326C137.738 202.455 137.626 202.057 137.449 201.304C137.303 200.681 136.973 199.304 136.736 198.702C136.672 198.538 136.501 196.654 136.423 196.532C134.91 194.15 136.268 194.326 134.898 191.968C133.47 191.288 132.504 190.184 131.381 189.022C131.183 188.818 132.326 188.094 132.145 187.881C131.053 186.592 129.9 185.825 130.236 184.332C130.391 183.642 130.528 182.585 129.784 181.865z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M126.2 183.6C126.2 183.6 126.6 190.4 129 192C131.4 193.6 130.2 192.8 127 191.6C123.8 190.4 125 189.6 125 189.6C125 189.6 122.2 190 124.6 192C127 194 130.6 196.4 129 196.4C127.4 196.4 119.8 192.4 119.8 189.6C119.8 186.8 118.8 182.7 118.8 182.7C118.8 182.7 119.9 181.9 124.7 182C124.7 182 126.1 182.7 126.2 183.6z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M125.4 202.2C125.4 202.2 116.88 199.409 98.4 202.8C98.4 202.8 107.431 200.722 126.2 203C136.5 204.25 125.4 202.2 125.4 202.2z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M127.498 202.129C127.498 202.129 119.252 198.611 100.547 200.392C100.547 200.392 109.725 199.103 128.226 202.995C138.38 205.131 127.498 202.129 127.498 202.129z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M129.286 202.222C129.286 202.222 121.324 198.101 102.539 198.486C102.539 198.486 111.787 197.882 129.948 203.14C139.914 206.025 129.286 202.222 129.286 202.222z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M130.556 202.445C130.556 202.445 123.732 198.138 106.858 197.04C106.858 197.04 115.197 197.21 131.078 203.319C139.794 206.672 130.556 202.445 130.556 202.445z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M245.84 212.961C245.84 212.961 244.91 213.605 245.124 212.424C245.339 211.243 273.547 198.073 277.161 198.323C277.161 198.323 246.913 211.529 245.84 212.961z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M242.446 213.6C242.446 213.6 241.57 214.315 241.691 213.121C241.812 211.927 268.899 196.582 272.521 196.548C272.521 196.548 243.404 212.089 242.446 213.6z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M239.16 214.975C239.16 214.975 238.332 215.747 238.374 214.547C238.416 213.348 258.233 197.851 268.045 195.977C268.045 195.977 250.015 204.104 239.16 214.975z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M236.284 216.838C236.284 216.838 235.539 217.532 235.577 216.453C235.615 215.373 253.449 201.426 262.28 199.74C262.28 199.74 246.054 207.054 236.284 216.838z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M204.6 364.801C204.6 364.801 189.4 362.401 206.2 360.801C206.2 360.801 224.2 358.801 228.2 353.601C228.2 353.601 241.8 344.401 244.6 344.001C247.4 343.601 263.8 340.001 264.2 337.601C264.6 335.201 270.6 332.801 272.2 333.601C273.8 334.401 273.8 343.601 271 344.401C268.2 345.201 249.4 352.401 243 353.601C236.6 354.801 225 362.401 220.2 363.601C215.4 364.801 204.6 364.801 204.6 364.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M277.6 327.401C277.6 327.401 274.6 329.001 273.4 331.601C273.4 331.601 267 342.201 252.8 345.401C252.8 345.401 229.8 354.401 222 356.401C222 356.401 208.6 361.401 201.2 360.601C201.2 360.601 194.2 360.801 200.4 362.401C200.4 362.401 220.6 360.401 224 358.601C224 358.601 239.6 353.401 242.6 350.801C245.6 348.201 263.8 343.201 266 341.201C268.2 339.201 278 330.801 277.6 327.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M218.882 358.911C218.882 358.911 224.111 358.685 222.958 360.234C221.805 361.784 219.357 360.91 219.357 360.91L218.882 358.911z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M211.68 360.263C211.68 360.263 216.908 360.037 215.756 361.586C214.603 363.136 212.155 362.263 212.155 362.263L211.68 360.263z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M201.251 361.511C201.251 361.511 206.48 361.284 205.327 362.834C204.174 364.383 201.726 363.51 201.726 363.51L201.251 361.511z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M193.617 362.055C193.617 362.055 198.846 361.829 197.693 363.378C196.54 364.928 194.092 364.054 194.092 364.054L193.617 362.055z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M235.415 351.513C235.415 351.513 242.375 351.212 240.84 353.274C239.306 355.336 236.047 354.174 236.047 354.174L235.415 351.513z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M245.73 347.088C245.73 347.088 251.689 343.787 251.155 348.849C250.885 351.405 246.362 349.749 246.362 349.749L245.73 347.088z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M254.862 344.274C254.862 344.274 262.021 340.573 260.287 346.035C259.509 348.485 255.493 346.935 255.493 346.935L254.862 344.274z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M264.376 339.449C264.376 339.449 268.735 334.548 269.801 341.21C270.207 343.748 265.008 342.11 265.008 342.11L264.376 339.449z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M226.834 355.997C226.834 355.997 232.062 355.77 230.91 357.32C229.757 358.869 227.308 357.996 227.308 357.996L226.834 355.997z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M262.434 234.603C262.434 234.603 261.708 235.268 261.707 234.197C261.707 233.127 279.191 219.863 288.034 218.479C288.034 218.479 271.935 225.208 262.434 234.603z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M265.4 298.4C265.4 298.4 287.401 320.801 296.601 324.401C296.601 324.401 305.801 335.601 301.801 361.601C301.801 361.601 298.601 369.201 295.401 348.401C295.401 348.401 298.601 323.201 287.401 339.201C287.401 339.201 279 329.301 285.4 329.601C285.4 329.601 288.601 331.601 289.001 330.001C289.401 328.401 281.4 314.801 264.2 300.4C247 286 265.4 298.4 265.4 298.4z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M207 337.201C207 337.201 206.8 335.401 208.6 336.201C210.4 337.001 304.601 343.201 336.201 367.201C336.201 367.201 291.001 344.001 207 337.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M217.4 332.801C217.4 332.801 217.2 331.001 219 331.801C220.8 332.601 357.401 331.601 381.001 364.001C381.001 364.001 359.001 338.801 217.4 332.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M229 328.801C229 328.801 228.8 327.001 230.6 327.801C232.4 328.601 405.801 315.601 429.401 348.001C429.401 348.001 419.801 322.401 229 328.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M239 324.001C239 324.001 238.8 322.201 240.6 323.001C242.4 323.801 364.601 285.2 388.201 317.601C388.201 317.601 374.801 293 239 324.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M181 346.801C181 346.801 180.8 345.001 182.6 345.801C184.4 346.601 202.2 348.801 204.2 387.601C204.2 387.601 197 345.601 181 346.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M172.2 348.401C172.2 348.401 172 346.601 173.8 347.401C175.6 348.201 189.8 343.601 187 382.401C187 382.401 188.2 347.201 172.2 348.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M164.2 348.801C164.2 348.801 164 347.001 165.8 347.801C167.6 348.601 183 349.201 170.6 371.601C170.6 371.601 180.2 347.601 164.2 348.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M211.526 304.465C211.526 304.465 211.082 306.464 212.631 305.247C228.699 292.622 261.141 233.72 316.826 228.086C316.826 228.086 278.518 215.976 211.526 304.465z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M222.726 302.665C222.726 302.665 221.363 301.472 223.231 300.847C225.099 300.222 337.541 227.72 376.826 235.686C376.826 235.686 349.719 228.176 222.726 302.665z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M201.885 308.767C201.885 308.767 201.376 310.366 203.087 309.39C212.062 304.27 215.677 247.059 259.254 245.804C259.254 245.804 226.843 231.09 201.885 308.767z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M181.962 319.793C181.962 319.793 180.885 321.079 182.838 320.825C193.084 319.493 214.489 278.222 258.928 283.301C258.928 283.301 226.962 268.955 181.962 319.793z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M193.2 313.667C193.2 313.667 192.389 315.136 194.258 314.511C204.057 311.237 217.141 266.625 261.729 263.078C261.729 263.078 227.603 255.135 193.2 313.667z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M174.922 324.912C174.922 324.912 174.049 325.954 175.631 325.748C183.93 324.669 201.268 291.24 237.264 295.354C237.264 295.354 211.371 283.734 174.922 324.912z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M167.323 330.821C167.323 330.821 166.318 331.866 167.909 331.748C172.077 331.439 202.715 298.36 221.183 313.862C221.183 313.862 209.168 295.139 167.323 330.821z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M236.855 298.898C236.855 298.898 235.654 297.543 237.586 297.158C239.518 296.774 360.221 239.061 398.184 251.927C398.184 251.927 372.243 241.053 236.855 298.898z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M203.4 363.201C203.4 363.201 203.2 361.401 205 362.201C206.8 363.001 222.2 363.601 209.8 386.001C209.8 386.001 219.4 362.001 203.4 363.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M213.8 361.601C213.8 361.601 213.6 359.801 215.4 360.601C217.2 361.401 235 363.601 237 402.401C237 402.401 229.8 360.401 213.8 361.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M220.6 360.001C220.6 360.001 220.4 358.201 222.2 359.001C224 359.801 248.6 363.201 272.2 395.601C272.2 395.601 236.6 358.801 220.6 360.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M228.225 357.972C228.225 357.972 227.788 356.214 229.678 356.768C231.568 357.322 252.002 355.423 290.099 389.599C290.099 389.599 243.924 354.656 228.225 357.972z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M238.625 353.572C238.625 353.572 238.188 351.814 240.078 352.368C241.968 352.922 276.802 357.423 328.499 392.399C328.499 392.399 254.324 350.256 238.625 353.572z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M198.2 342.001C198.2 342.001 198 340.201 199.8 341.001C201.6 341.801 255 344.401 285.4 371.201C285.4 371.201 250.499 346.426 198.2 342.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M188.2 346.001C188.2 346.001 188 344.201 189.8 345.001C191.6 345.801 216.2 349.201 239.8 381.601C239.8 381.601 204.2 344.801 188.2 346.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M249.503 348.962C249.503 348.962 248.938 347.241 250.864 347.655C252.79 348.068 287.86 350.004 341.981 381.098C341.981 381.098 264.317 346.704 249.503 348.962z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M257.903 346.562C257.903 346.562 257.338 344.841 259.264 345.255C261.19 345.668 296.26 347.604 350.381 378.698C350.381 378.698 273.317 343.904 257.903 346.562z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #ffffff; stroke:#000000; stroke-width:0.1')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M267.503 341.562C267.503 341.562 266.938 339.841 268.864 340.255C270.79 340.668 313.86 345.004 403.582 379.298C403.582 379.298 282.917 338.904 267.503 341.562z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M156.2 348.401C156.2 348.401 161.4 348.001 160.2 349.601C159 351.201 156.6 350.401 156.6 350.401L156.2 348.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M187 362.401C187 362.401 192.2 362.001 191 363.601C189.8 365.201 187.4 364.401 187.4 364.401L187 362.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M178.2 362.001C178.2 362.001 183.4 361.601 182.2 363.201C181 364.801 178.6 364.001 178.6 364.001L178.2 362.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M82.831 350.182C82.831 350.182 87.876 351.505 86.218 352.624C84.561 353.744 82.554 352.202 82.554 352.202L82.831 350.182z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M84.831 340.582C84.831 340.582 89.876 341.905 88.218 343.024C86.561 344.144 84.554 342.602 84.554 342.602L84.831 340.582z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M77.631 336.182C77.631 336.182 82.676 337.505 81.018 338.624C79.361 339.744 77.354 338.202 77.354 338.202L77.631 336.182z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M157.4 411.201C157.4 411.201 155.8 411.201 151.8 413.201C149.8 413.201 138.6 416.801 133 426.801C133 426.801 145.4 417.201 157.4 411.201z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M245.116 503.847C245.257 504.105 245.312 504.525 245.604 504.542C246.262 504.582 247.495 504.883 247.37 504.247C246.522 499.941 245.648 495.004 241.515 493.197C240.876 492.918 239.434 493.331 239.36 494.215C239.233 495.739 239.116 497.088 239.425 498.554C239.725 499.975 241.883 499.985 242.8 498.601C243.736 500.273 244.168 502.116 245.116 503.847z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M234.038 508.581C234.786 509.994 234.659 511.853 236.074 512.416C236.814 512.71 238.664 511.735 238.246 510.661C237.444 508.6 237.056 506.361 235.667 504.55C235.467 504.288 235.707 503.755 235.547 503.427C234.953 502.207 233.808 501.472 232.4 501.801C231.285 504.004 232.433 506.133 233.955 507.842C234.091 507.994 233.925 508.37 234.038 508.581z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M194.436 503.391C194.328 503.014 194.29 502.551 194.455 502.23C194.986 501.197 195.779 500.075 195.442 499.053C195.094 497.997 193.978 498.179 193.328 498.748C192.193 499.742 192.144 501.568 191.453 502.927C191.257 503.313 191.308 503.886 190.867 504.277C190.393 504.698 189.953 506.222 190.049 506.793C190.102 507.106 189.919 517.014 190.141 516.751C190.76 516.018 193.81 506.284 193.879 505.392C193.936 504.661 194.668 504.196 194.436 503.391z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M168.798 496.599C171.432 494.1 174.222 491.139 173.78 487.427C173.664 486.451 171.889 486.978 171.702 487.824C170.9 491.449 168.861 494.11 166.293 496.502C164.097 498.549 162.235 504.893 162 505.401C165.697 500.145 167.954 497.399 168.798 496.599z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M155.224 490.635C155.747 490.265 155.445 489.774 155.662 489.442C156.615 487.984 157.916 486.738 157.934 485C157.937 484.723 157.559 484.414 157.224 484.638C156.947 484.822 156.605 484.952 156.497 485.082C154.467 487.531 153.067 490.202 151.624 493.014C151.441 493.371 150.297 497.862 150.61 497.973C150.849 498.058 152.569 493.877 152.779 493.763C154.042 493.077 154.054 491.462 155.224 490.635z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M171.957 510.179C172.401 509.31 173.977 508.108 173.864 507.219C173.746 506.291 174.214 504.848 173.302 505.536C172.045 506.484 168.596 507.833 168.326 513.641C168.3 514.212 171.274 511.519 171.957 510.179z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M186.4 493.001C186.8 492.333 187.508 492.806 187.967 492.543C188.615 492.171 189.226 491.613 189.518 490.964C190.488 488.815 192.257 486.995 192.4 484.601C190.909 483.196 190.23 485.236 189.6 486.201C188.277 484.554 187.278 486.428 185.978 486.947C185.908 486.975 185.695 486.628 185.62 486.655C184.443 487.095 183.763 488.176 182.765 488.957C182.594 489.091 182.189 488.911 182.042 489.047C181.39 489.65 180.417 489.975 180.137 490.657C179.027 493.364 175.887 495.459 174 503.001C174.381 503.91 178.512 496.359 178.999 495.661C179.835 494.465 179.953 497.322 181.229 496.656C181.28 496.629 181.466 496.867 181.6 497.001C181.794 496.721 182.012 496.492 182.4 496.601C182.4 496.201 182.266 495.645 182.467 495.486C183.704 494.509 183.62 493.441 184.4 492.201C184.858 492.99 185.919 492.271 186.4 493.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M246.2 547.401C246.2 547.401 253.6 527.001 249.2 515.801C249.2 515.801 260.6 537.401 256 548.601C256 548.601 255.6 538.201 251.6 533.201C251.6 533.201 247.6 546.001 246.2 547.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M231.4 544.801C231.4 544.801 236.8 536.001 228.8 517.601C228.8 517.601 228 538.001 221.2 549.001C221.2 549.001 235.4 528.801 231.4 544.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M221.4 542.801C221.4 542.801 221.2 522.801 221.6 519.801C221.6 519.801 217.8 536.401 207.6 546.001C207.6 546.001 222 534.001 221.4 542.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M211.8 510.801C211.8 510.801 217.8 524.401 207.8 542.801C207.8 542.801 214.2 530.601 209.4 523.601C209.4 523.601 212 520.201 211.8 510.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M192.6 542.401C192.6 542.401 191.6 526.801 193.4 524.601C193.4 524.601 193.6 518.201 193.2 517.201C193.2 517.201 197.2 511.001 197.4 518.401C197.4 518.401 198.8 526.201 201.6 530.801C201.6 530.801 205.2 536.201 205 542.601C205 542.601 195 512.401 192.6 542.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M189 514.801C189 514.801 182.4 525.601 180.6 544.601C180.6 544.601 179.2 538.401 183 524.001C183 524.001 187.2 508.601 189 514.801z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M167.2 534.601C167.2 534.601 172.2 529.201 173.6 524.201C173.6 524.201 177.2 508.401 170.8 517.001C170.8 517.001 171 525.001 162.8 532.401C162.8 532.401 167.6 530.001 167.2 534.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M161.4 529.601C161.4 529.601 164.8 512.201 165.6 511.401C165.6 511.401 167.4 508.001 164.6 511.201C164.6 511.201 155.8 530.401 151.8 537.001C151.8 537.001 159.8 527.801 161.4 529.601z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M155.6 513.001C155.6 513.001 167.2 490.601 145.4 516.401C145.4 516.401 156.4 506.601 155.6 513.001z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M140.2 498.401C140.2 498.401 145 479.601 147.6 479.801C147.6 479.801 155.8 470.801 149.2 481.401C149.2 481.401 143.2 491.001 143.8 500.801C143.8 500.801 143.2 491.201 140.2 498.401z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M470.5 487C470.5 487 458.5 477 456 473.5C456 473.5 469.5 492 469.5 499C469.5 499 472 491.5 470.5 487z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M476 465C476 465 455 450 451.5 442.5C451.5 442.5 478 472 478 476.5C478 476.5 478.5 467.5 476 465z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M493 311C493 311 481 303 479.5 305C479.5 305 490 311.5 492.5 320C492.5 320 491 311 493 311z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='fill: #cccccc')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M501.5 391.5L484 379.5C484 379.5 503 396.5 503.5 400.5L501.5 391.5z')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M110.75 369L132.75 373.75')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M161 531C161 531 160.5 527.5 151.5 538')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M166.5 536C166.5 536 168.5 529.5 162 534')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+ , 2)
+SAX.startElement(g, style='stroke:#000000')
+SAX.characters(
+ , 3)
+SAX.startElement(path, d='M220.5 544.5C220.5 544.5 222 533.5 210.5 546.5')
+SAX.endElement(path)
+SAX.characters(
+ , 2)
+SAX.endElement(g)
+SAX.characters(
+, 1)
+SAX.endElement(svg)
+SAX.endDocument()
diff --git a/result/title.xml b/result/title.xml
new file mode 100644
index 0000000..1b3fe07
--- /dev/null
+++ b/result/title.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<title>my title</title>
diff --git a/result/title.xml.rdr b/result/title.xml.rdr
new file mode 100644
index 0000000..b0d2be0
--- /dev/null
+++ b/result/title.xml.rdr
@@ -0,0 +1,3 @@
+0 1 title 0 0
+1 3 #text 0 1 my title
+0 15 title 0 0
diff --git a/result/title.xml.sax b/result/title.xml.sax
new file mode 100644
index 0000000..2af71e9
--- /dev/null
+++ b/result/title.xml.sax
@@ -0,0 +1,6 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(title)
+SAX.characters(my title, 8)
+SAX.endElement(title)
+SAX.endDocument()
diff --git a/result/tstblanks.xml b/result/tstblanks.xml
new file mode 100644
index 0000000..2561859
--- /dev/null
+++ b/result/tstblanks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<a test="passed">content</a>
diff --git a/result/tstblanks.xml.rdr b/result/tstblanks.xml.rdr
new file mode 100644
index 0000000..7d2e5fa
--- /dev/null
+++ b/result/tstblanks.xml.rdr
@@ -0,0 +1,3 @@
+0 1 a 0 0
+1 3 #text 0 1 content
+0 15 a 0 0
diff --git a/result/tstblanks.xml.sax b/result/tstblanks.xml.sax
new file mode 100644
index 0000000..a1f7b8b
--- /dev/null
+++ b/result/tstblanks.xml.sax
@@ -0,0 +1,6 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(a, test='passed')
+SAX.characters(content, 7)
+SAX.endElement(a)
+SAX.endDocument()
diff --git a/result/utf16bebom.xml b/result/utf16bebom.xml
new file mode 100644
index 0000000..3b5466d
--- /dev/null
+++ b/result/utf16bebom.xml
Binary files differ
diff --git a/result/utf16bebom.xml.rdr b/result/utf16bebom.xml.rdr
new file mode 100644
index 0000000..f69338a
--- /dev/null
+++ b/result/utf16bebom.xml.rdr
@@ -0,0 +1,4 @@
+0 8 #comment 0 1 This file is encoded in UTF-16BE
+0 1 repository 0 0
+1 1 namespace 1 0
+0 15 repository 0 0
diff --git a/result/utf16bebom.xml.sax b/result/utf16bebom.xml.sax
new file mode 100644
index 0000000..5b74a6d
--- /dev/null
+++ b/result/utf16bebom.xml.sax
@@ -0,0 +1,8 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.comment( This file is encoded in UTF-16BE )
+SAX.startElement(repository, repositroy_id='test')
+SAX.startElement(namespace, name='test')
+SAX.endElement(namespace)
+SAX.endElement(repository)
+SAX.endDocument()
diff --git a/result/utf16bom.xml b/result/utf16bom.xml
new file mode 100644
index 0000000..6ea296e
--- /dev/null
+++ b/result/utf16bom.xml
Binary files differ
diff --git a/result/utf16bom.xml.rdr b/result/utf16bom.xml.rdr
new file mode 100644
index 0000000..0fb84c6
--- /dev/null
+++ b/result/utf16bom.xml.rdr
@@ -0,0 +1,3 @@
+0 1 repository 0 0
+1 1 namespace 1 0
+0 15 repository 0 0
diff --git a/result/utf16bom.xml.sax b/result/utf16bom.xml.sax
new file mode 100644
index 0000000..bd9386e
--- /dev/null
+++ b/result/utf16bom.xml.sax
@@ -0,0 +1,7 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(repository, repositroy_id='test')
+SAX.startElement(namespace, name='test')
+SAX.endElement(namespace)
+SAX.endElement(repository)
+SAX.endDocument()
diff --git a/result/utf16lebom.xml b/result/utf16lebom.xml
new file mode 100644
index 0000000..933640c
--- /dev/null
+++ b/result/utf16lebom.xml
Binary files differ
diff --git a/result/utf16lebom.xml.rdr b/result/utf16lebom.xml.rdr
new file mode 100644
index 0000000..32a91e4
--- /dev/null
+++ b/result/utf16lebom.xml.rdr
@@ -0,0 +1,4 @@
+0 8 #comment 0 1 This file is encoded in UTF-16LE
+0 1 repository 0 0
+1 1 namespace 1 0
+0 15 repository 0 0
diff --git a/result/utf16lebom.xml.sax b/result/utf16lebom.xml.sax
new file mode 100644
index 0000000..e699631
--- /dev/null
+++ b/result/utf16lebom.xml.sax
@@ -0,0 +1,8 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.comment( This file is encoded in UTF-16LE )
+SAX.startElement(repository, repositroy_id='test')
+SAX.startElement(namespace, name='test')
+SAX.endElement(namespace)
+SAX.endElement(repository)
+SAX.endDocument()
diff --git a/result/utf8bom.xml b/result/utf8bom.xml
new file mode 100644
index 0000000..f4e5164
--- /dev/null
+++ b/result/utf8bom.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<foo/>
diff --git a/result/utf8bom.xml.rdr b/result/utf8bom.xml.rdr
new file mode 100644
index 0000000..55ad211
--- /dev/null
+++ b/result/utf8bom.xml.rdr
@@ -0,0 +1 @@
+0 1 foo 1 0
diff --git a/result/utf8bom.xml.sax b/result/utf8bom.xml.sax
new file mode 100644
index 0000000..792eb94
--- /dev/null
+++ b/result/utf8bom.xml.sax
@@ -0,0 +1,5 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(foo)
+SAX.endElement(foo)
+SAX.endDocument()
diff --git a/result/valid/127772.xml b/result/valid/127772.xml
new file mode 100644
index 0000000..c1e128f
--- /dev/null
+++ b/result/valid/127772.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE a SYSTEM "dtds/127772.dtd">
+<a>
+ <b xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://fakeurl.net">b text</b>
+</a>
diff --git a/result/valid/127772.xml.err b/result/valid/127772.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/127772.xml.err
diff --git a/result/valid/REC-xml-19980210.xml b/result/valid/REC-xml-19980210.xml
new file mode 100644
index 0000000..f31e963
--- /dev/null
+++ b/result/valid/REC-xml-19980210.xml
@@ -0,0 +1,4154 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE spec SYSTEM "dtds/spec.dtd" [
+<!-- LAST TOUCHED BY: Tim Bray, 8 February 1997 --><!-- The words 'FINAL EDIT' in comments mark places where changes
+need to be made after approval of the document by the ERB, before
+publication. --><!ENTITY XML.version "1.0">
+<!ENTITY doc.date "10 February 1998">
+<!ENTITY iso6.doc.date "19980210">
+<!ENTITY w3c.doc.date "02-Feb-1998">
+<!ENTITY draft.day "10">
+<!ENTITY draft.month "February">
+<!ENTITY draft.year "1998">
+<!ENTITY WebSGML "WebSGML Adaptations Annex to ISO 8879">
+<!ENTITY lt "<">
+<!ENTITY gt ">">
+<!ENTITY xmlpio "'&lt;?xml'">
+<!ENTITY pic "'?>'">
+<!ENTITY br "\n">
+<!ENTITY cellback "#c0d9c0">
+<!ENTITY mdash "--">
+<!-- &#x2014, but nsgmls doesn't grok hex --><!ENTITY com "--">
+<!ENTITY como "--">
+<!ENTITY comc "--">
+<!ENTITY hcro "&amp;#x">
+<!-- <!ENTITY nbsp " "> --><!ENTITY nbsp "&#160;">
+<!ENTITY magicents "<code>amp</code>,
+<code>lt</code>,
+<code>gt</code>,
+<code>apos</code>,
+<code>quot</code>">
+<!-- audience and distribution status: for use at publication time --><!ENTITY doc.audience "public review and discussion">
+<!ENTITY doc.distribution "may be distributed freely, as long as
+all text and legal notices remain intact">
+]>
+<!-- for Panorama *-->
+<?VERBATIM "eg" ?>
+<spec>
+<header>
+<title>Extensible Markup Language (XML) 1.0</title>
+<version/>
+<w3c-designation>REC-xml-&iso6.doc.date;</w3c-designation>
+<w3c-doctype>W3C Recommendation</w3c-doctype>
+<pubdate><day>&draft.day;</day><month>&draft.month;</month><year>&draft.year;</year></pubdate>
+
+<publoc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps</loc>
+</publoc>
+<latestloc>
+<loc href="http://www.w3.org/TR/REC-xml">
+http://www.w3.org/TR/REC-xml</loc>
+</latestloc>
+<prevlocs>
+<loc href="http://www.w3.org/TR/PR-xml-971208">
+http://www.w3.org/TR/PR-xml-971208</loc>
+<!--
+<loc href='http://www.w3.org/TR/WD-xml-961114'>
+http://www.w3.org/TR/WD-xml-961114</loc>
+<loc href='http://www.w3.org/TR/WD-xml-lang-970331'>
+http://www.w3.org/TR/WD-xml-lang-970331</loc>
+<loc href='http://www.w3.org/TR/WD-xml-lang-970630'>
+http://www.w3.org/TR/WD-xml-lang-970630</loc>
+<loc href='http://www.w3.org/TR/WD-xml-970807'>
+http://www.w3.org/TR/WD-xml-970807</loc>
+<loc href='http://www.w3.org/TR/WD-xml-971117'>
+http://www.w3.org/TR/WD-xml-971117</loc>-->
+</prevlocs>
+<authlist>
+<author><name>Tim Bray</name>
+<affiliation>Textuality and Netscape</affiliation>
+<email href="mailto:tbray@textuality.com">tbray@textuality.com</email></author>
+<author><name>Jean Paoli</name>
+<affiliation>Microsoft</affiliation>
+<email href="mailto:jeanpa@microsoft.com">jeanpa@microsoft.com</email></author>
+<author><name>C. M. Sperberg-McQueen</name>
+<affiliation>University of Illinois at Chicago</affiliation>
+<email href="mailto:cmsmcq@uic.edu">cmsmcq@uic.edu</email></author>
+</authlist>
+<abstract>
+<p>The Extensible Markup Language (XML) is a subset of
+SGML that is completely described in this document. Its goal is to
+enable generic SGML to be served, received, and processed on the Web
+in the way that is now possible with HTML. XML has been designed for
+ease of implementation and for interoperability with both SGML and
+HTML.</p>
+</abstract>
+<status>
+<p>This document has been reviewed by W3C Members and
+other interested parties and has been endorsed by the
+Director as a W3C Recommendation. It is a stable
+document and may be used as reference material or cited
+as a normative reference from another document. W3C's
+role in making the Recommendation is to draw attention
+to the specification and to promote its widespread
+deployment. This enhances the functionality and
+interoperability of the Web.</p>
+<p>
+This document specifies a syntax created by subsetting an existing,
+widely used international text processing standard (Standard
+Generalized Markup Language, ISO 8879:1986(E) as amended and
+corrected) for use on the World Wide Web. It is a product of the W3C
+XML Activity, details of which can be found at <loc href="http://www.w3.org/XML">http://www.w3.org/XML</loc>. A list of
+current W3C Recommendations and other technical documents can be found
+at <loc href="http://www.w3.org/TR">http://www.w3.org/TR</loc>.
+</p>
+<p>This specification uses the term URI, which is defined by <bibref ref="Berners-Lee"/>, a work in progress expected to update <bibref ref="RFC1738"/> and <bibref ref="RFC1808"/>.
+</p>
+<p>The list of known errors in this specification is
+available at
+<loc href="http://www.w3.org/XML/xml-19980210-errata">http://www.w3.org/XML/xml-19980210-errata</loc>.</p>
+<p>Please report errors in this document to
+<loc href="mailto:xml-editor@w3.org">xml-editor@w3.org</loc>.
+</p>
+</status>
+
+
+<pubstmt>
+<p>Chicago, Vancouver, Mountain View, et al.:
+World-Wide Web Consortium, XML Working Group, 1996, 1997.</p>
+</pubstmt>
+<sourcedesc>
+<p>Created in electronic form.</p>
+</sourcedesc>
+<langusage>
+<language id="EN">English</language>
+<language id="ebnf">Extended Backus-Naur Form (formal grammar)</language>
+</langusage>
+<revisiondesc>
+<slist>
+<sitem>1997-12-03 : CMSMcQ : yet further changes</sitem>
+<sitem>1997-12-02 : TB : further changes (see TB to XML WG,
+2 December 1997)</sitem>
+<sitem>1997-12-02 : CMSMcQ : deal with as many corrections and
+comments from the proofreaders as possible:
+entify hard-coded document date in pubdate element,
+change expansion of entity WebSGML,
+update status description as per Dan Connolly (am not sure
+about refernece to Berners-Lee et al.),
+add 'The' to abstract as per WG decision,
+move Relationship to Existing Standards to back matter and
+combine with References,
+re-order back matter so normative appendices come first,
+re-tag back matter so informative appendices are tagged informdiv1,
+remove XXX XXX from list of 'normative' specs in prose,
+move some references from Other References to Normative References,
+add RFC 1738, 1808, and 2141 to Other References (they are not
+normative since we do not require the processor to enforce any
+rules based on them),
+add reference to 'Fielding draft' (Berners-Lee et al.),
+move notation section to end of body,
+drop URIchar non-terminal and use SkipLit instead,
+lose stray reference to defunct nonterminal 'markupdecls',
+move reference to Aho et al. into appendix (Tim's right),
+add prose note saying that hash marks and fragment identifiers are
+NOT part of the URI formally speaking, and are NOT legal in
+system identifiers (processor 'may' signal an error).
+Work through:
+Tim Bray reacting to James Clark,
+Tim Bray on his own,
+Eve Maler,
+
+NOT DONE YET:
+change binary / text to unparsed / parsed.
+handle James's suggestion about &lt; in attriubte values
+uppercase hex characters,
+namechar list,
+</sitem>
+<sitem>1997-12-01 : JB : add some column-width parameters</sitem>
+<sitem>1997-12-01 : CMSMcQ : begin round of changes to incorporate
+recent WG decisions and other corrections:
+binding sources of character encoding info (27 Aug / 3 Sept),
+correct wording of Faust quotation (restore dropped line),
+drop SDD from EncodingDecl,
+change text at version number 1.0,
+drop misleading (wrong!) sentence about ignorables and extenders,
+modify definition of PCData to make bar on msc grammatical,
+change grammar's handling of internal subset (drop non-terminal markupdecls),
+change definition of includeSect to allow conditional sections,
+add integral-declaration constraint on internal subset,
+drop misleading / dangerous sentence about relationship of
+entities with system storage objects,
+change table body tag to htbody as per EM change to DTD,
+add rule about space normalization in public identifiers,
+add description of how to generate our name-space rules from
+Unicode character database (needs further work!).
+</sitem>
+<sitem>1997-10-08 : TB : Removed %-constructs again, new rules
+for PE appearance.</sitem>
+<sitem>1997-10-01 : TB : Case-sensitive markup; cleaned up
+element-type defs, lotsa little edits for style</sitem>
+<sitem>1997-09-25 : TB : Change to elm's new DTD, with
+substantial detail cleanup as a side-effect</sitem>
+<sitem>1997-07-24 : CMSMcQ : correct error (lost *) in definition
+of ignoreSectContents (thanks to Makoto Murata)</sitem>
+<sitem>Allow all empty elements to have end-tags, consistent with
+SGML TC (as per JJC).</sitem>
+<sitem>1997-07-23 : CMSMcQ : pre-emptive strike on pending corrections:
+introduce the term 'empty-element tag', note that all empty elements
+may use it, and elements declared EMPTY must use it.
+Add WFC requiring encoding decl to come first in an entity.
+Redefine notations to point to PIs as well as binary entities.
+Change autodetection table by removing bytes 3 and 4 from
+examples with Byte Order Mark.
+Add content model as a term and clarify that it applies to both
+mixed and element content.
+</sitem>
+<sitem>1997-06-30 : CMSMcQ : change date, some cosmetic changes,
+changes to productions for choice, seq, Mixed, NotationType,
+Enumeration. Follow James Clark's suggestion and prohibit
+conditional sections in internal subset. TO DO: simplify
+production for ignored sections as a result, since we don't
+need to worry about parsers which don't expand PErefs finding
+a conditional section.</sitem>
+<sitem>1997-06-29 : TB : various edits</sitem>
+<sitem>1997-06-29 : CMSMcQ : further changes:
+Suppress old FINAL EDIT comments and some dead material.
+Revise occurrences of % in grammar to exploit Henry Thompson's pun,
+especially markupdecl and attdef.
+Remove RMD requirement relating to element content (?).
+</sitem>
+<sitem>1997-06-28 : CMSMcQ : Various changes for 1 July draft:
+Add text for draconian error handling (introduce
+the term Fatal Error).
+RE deleta est (changing wording from
+original announcement to restrict the requirement to validating
+parsers).
+Tag definition of validating processor and link to it.
+Add colon as name character.
+Change def of %operator.
+Change standard definitions of lt, gt, amp.
+Strip leading zeros from #x00nn forms.</sitem>
+<sitem>1997-04-02 : CMSMcQ : final corrections of editorial errors
+found in last night's proofreading. Reverse course once more on
+well-formed: Webster's Second hyphenates it, and that's enough
+for me.</sitem>
+<sitem>1997-04-01 : CMSMcQ : corrections from JJC, EM, HT, and self</sitem>
+<sitem>1997-03-31 : Tim Bray : many changes</sitem>
+<sitem>1997-03-29 : CMSMcQ : some Henry Thompson (on entity handling),
+some Charles Goldfarb, some ERB decisions (PE handling in miscellaneous
+declarations. Changed Ident element to accept def attribute.
+Allow normalization of Unicode characters. move def of systemliteral
+into section on literals.</sitem>
+<sitem>1997-03-28 : CMSMcQ : make as many corrections as possible, from
+Terry Allen, Norbert Mikula, James Clark, Jon Bosak, Henry Thompson,
+Paul Grosso, and self. Among other things: give in on "well formed"
+(Terry is right), tentatively rename QuotedCData as AttValue
+and Literal as EntityValue to be more informative, since attribute
+values are the <emph>only</emph> place QuotedCData was used, and
+vice versa for entity text and Literal. (I'd call it Entity Text,
+but 8879 uses that name for both internal and external entities.)</sitem>
+<sitem>1997-03-26 : CMSMcQ : resynch the two forks of this draft, reapply
+my changes dated 03-20 and 03-21. Normalize old 'may not' to 'must not'
+except in the one case where it meant 'may or may not'.</sitem>
+<sitem>1997-03-21 : TB : massive changes on plane flight from Chicago
+to Vancouver</sitem>
+<sitem>1997-03-21 : CMSMcQ : correct as many reported errors as possible.
+</sitem>
+<sitem>1997-03-20 : CMSMcQ : correct typos listed in CMSMcQ hand copy of spec.</sitem>
+<sitem>1997-03-20 : CMSMcQ : cosmetic changes preparatory to revision for
+WWW conference April 1997: restore some of the internal entity
+references (e.g. to docdate, etc.), change character xA0 to &amp;nbsp;
+and define nbsp as &amp;#160;, and refill a lot of paragraphs for
+legibility.</sitem>
+<sitem>1996-11-12 : CMSMcQ : revise using Tim's edits:
+Add list type of NUMBERED and change most lists either to
+BULLETS or to NUMBERED.
+Suppress QuotedNames, Names (not used).
+Correct trivial-grammar doc type decl.
+Rename 'marked section' as 'CDATA section' passim.
+Also edits from James Clark:
+Define the set of characters from which [^abc] subtracts.
+Charref should use just [0-9] not Digit.
+Location info needs cleaner treatment: remove? (ERB
+question).
+One example of a PI has wrong pic.
+Clarify discussion of encoding names.
+Encoding failure should lead to unspecified results; don't
+prescribe error recovery.
+Don't require exposure of entity boundaries.
+Ignore white space in element content.
+Reserve entity names of the form u-NNNN.
+Clarify relative URLs.
+And some of my own:
+Correct productions for content model: model cannot
+consist of a name, so "elements ::= cp" is no good.
+</sitem>
+<sitem>1996-11-11 : CMSMcQ : revise for style.
+Add new rhs to entity declaration, for parameter entities.</sitem>
+<sitem>1996-11-10 : CMSMcQ : revise for style.
+Fix / complete section on names, characters.
+Add sections on parameter entities, conditional sections.
+Still to do: Add compatibility note on deterministic content models.
+Finish stylistic revision.</sitem>
+<sitem>1996-10-31 : TB : Add Entity Handling section</sitem>
+<sitem>1996-10-30 : TB : Clean up term &amp; termdef. Slip in
+ERB decision re EMPTY.</sitem>
+<sitem>1996-10-28 : TB : Change DTD. Implement some of Michael's
+suggestions. Change comments back to //. Introduce language for
+XML namespace reservation. Add section on white-space handling.
+Lots more cleanup.</sitem>
+<sitem>1996-10-24 : CMSMcQ : quick tweaks, implement some ERB
+decisions. Characters are not integers. Comments are /* */ not //.
+Add bibliographic refs to 10646, HyTime, Unicode.
+Rename old Cdata as MsData since it's <emph>only</emph> seen
+in marked sections. Call them attribute-value pairs not
+name-value pairs, except once. Internal subset is optional, needs
+'?'. Implied attributes should be signaled to the app, not
+have values supplied by processor.</sitem>
+<sitem>1996-10-16 : TB : track down &amp; excise all DSD references;
+introduce some EBNF for entity declarations.</sitem>
+<sitem>1996-10-?? : TB : consistency check, fix up scraps so
+they all parse, get formatter working, correct a few productions.</sitem>
+<sitem>1996-10-10/11 : CMSMcQ : various maintenance, stylistic, and
+organizational changes:
+Replace a few literals with xmlpio and
+pic entities, to make them consistent and ensure we can change pic
+reliably when the ERB votes.
+Drop paragraph on recognizers from notation section.
+Add match, exact match to terminology.
+Move old 2.2 XML Processors and Apps into intro.
+Mention comments, PIs, and marked sections in discussion of
+delimiter escaping.
+Streamline discussion of doctype decl syntax.
+Drop old section of 'PI syntax' for doctype decl, and add
+section on partial-DTD summary PIs to end of Logical Structures
+section.
+Revise DSD syntax section to use Tim's subset-in-a-PI
+mechanism.</sitem>
+<sitem>1996-10-10 : TB : eliminate name recognizers (and more?)</sitem>
+<sitem>1996-10-09 : CMSMcQ : revise for style, consistency through 2.3
+(Characters)</sitem>
+<sitem>1996-10-09 : CMSMcQ : re-unite everything for convenience,
+at least temporarily, and revise quickly</sitem>
+<sitem>1996-10-08 : TB : first major homogenization pass</sitem>
+<sitem>1996-10-08 : TB : turn "current" attribute on div type into
+CDATA</sitem>
+<sitem>1996-10-02 : TB : remould into skeleton + entities</sitem>
+<sitem>1996-09-30 : CMSMcQ : add a few more sections prior to exchange
+ with Tim.</sitem>
+<sitem>1996-09-20 : CMSMcQ : finish transcribing notes.</sitem>
+<sitem>1996-09-19 : CMSMcQ : begin transcribing notes for draft.</sitem>
+<sitem>1996-09-13 : CMSMcQ : made outline from notes of 09-06,
+do some housekeeping</sitem>
+</slist>
+</revisiondesc>
+</header>
+<body>
+<div1 id="sec-intro">
+<head>Introduction</head>
+<p>Extensible Markup Language, abbreviated XML, describes a class of
+data objects called <termref def="dt-xml-doc">XML documents</termref> and
+partially describes the behavior of
+computer programs which process them. XML is an application profile or
+restricted form of SGML, the Standard Generalized Markup
+Language <bibref ref="ISO8879"/>.
+By construction, XML documents
+are conforming SGML documents.
+</p>
+<p>XML documents are made up of storage units called <termref def="dt-entity">entities</termref>, which contain either parsed
+or unparsed data.
+Parsed data is made up of <termref def="dt-character">characters</termref>,
+some
+of which form <termref def="dt-chardata">character data</termref>,
+and some of which form <termref def="dt-markup">markup</termref>.
+Markup encodes a description of the document's storage layout and
+logical structure. XML provides a mechanism to impose constraints on
+the storage layout and logical structure.</p>
+<p><termdef id="dt-xml-proc" term="XML Processor">A software module
+called an <term>XML processor</term> is used to read XML documents
+and provide access to their content and structure.</termdef> <termdef id="dt-app" term="Application">It is assumed that an XML processor is
+doing its work on behalf of another module, called the
+<term>application</term>.</termdef> This specification describes the
+required behavior of an XML processor in terms of how it must read XML
+data and the information it must provide to the application.</p>
+
+<div2 id="sec-origin-goals">
+<head>Origin and Goals</head>
+<p>XML was developed by an XML Working Group (originally known as the
+SGML Editorial Review Board) formed under the auspices of the World
+Wide Web Consortium (W3C) in 1996.
+It was chaired by Jon Bosak of Sun
+Microsystems with the active participation of an XML Special
+Interest Group (previously known as the SGML Working Group) also
+organized by the W3C. The membership of the XML Working Group is given
+in an appendix. Dan Connolly served as the WG's contact with the W3C.
+</p>
+<p>The design goals for XML are:<olist>
+<item><p>XML shall be straightforwardly usable over the
+Internet.</p></item>
+<item><p>XML shall support a wide variety of applications.</p></item>
+<item><p>XML shall be compatible with SGML.</p></item>
+<item><p>It shall be easy to write programs which process XML
+documents.</p></item>
+<item><p>The number of optional features in XML is to be kept to the
+absolute minimum, ideally zero.</p></item>
+<item><p>XML documents should be human-legible and reasonably
+clear.</p></item>
+<item><p>The XML design should be prepared quickly.</p></item>
+<item><p>The design of XML shall be formal and concise.</p></item>
+<item><p>XML documents shall be easy to create.</p></item>
+<item><p>Terseness in XML markup is of minimal importance.</p></item></olist>
+</p>
+<p>This specification,
+together with associated standards
+(Unicode and ISO/IEC 10646 for characters,
+Internet RFC 1766 for language identification tags,
+ISO 639 for language name codes, and
+ISO 3166 for country name codes),
+provides all the information necessary to understand
+XML Version &XML.version;
+and construct computer programs to process it.</p>
+<p>This version of the XML specification
+<!-- is for &doc.audience;.-->
+&doc.distribution;.</p>
+
+</div2>
+
+
+
+
+<div2 id="sec-terminology">
+<head>Terminology</head>
+
+<p>The terminology used to describe XML documents is defined in the body of
+this specification.
+The terms defined in the following list are used in building those
+definitions and in describing the actions of an XML processor:
+<glist>
+<gitem>
+<label>may</label>
+<def><p><termdef id="dt-may" term="May">Conforming documents and XML
+processors are permitted to but need not behave as
+described.</termdef></p></def>
+</gitem>
+<gitem>
+<label>must</label>
+<def><p>Conforming documents and XML processors
+are required to behave as described; otherwise they are in error.
+<!-- do NOT change this! this is what defines a violation of
+a 'must' clause as 'an error'. -MSM -->
+</p></def>
+</gitem>
+<gitem>
+<label>error</label>
+<def><p><termdef id="dt-error" term="Error">A violation of the rules of this
+specification; results are
+undefined. Conforming software may detect and report an error and may
+recover from it.</termdef></p></def>
+</gitem>
+<gitem>
+<label>fatal error</label>
+<def><p><termdef id="dt-fatal" term="Fatal Error">An error
+which a conforming <termref def="dt-xml-proc">XML processor</termref>
+must detect and report to the application.
+After encountering a fatal error, the
+processor may continue
+processing the data to search for further errors and may report such
+errors to the application. In order to support correction of errors,
+the processor may make unprocessed data from the document (with
+intermingled character data and markup) available to the application.
+Once a fatal error is detected, however, the processor must not
+continue normal processing (i.e., it must not
+continue to pass character data and information about the document's
+logical structure to the application in the normal way).
+</termdef></p></def>
+</gitem>
+<gitem>
+<label>at user option</label>
+<def><p>Conforming software may or must (depending on the modal verb in the
+sentence) behave as described; if it does, it must
+provide users a means to enable or disable the behavior
+described.</p></def>
+</gitem>
+<gitem>
+<label>validity constraint</label>
+<def><p>A rule which applies to all
+<termref def="dt-valid">valid</termref> XML documents.
+Violations of validity constraints are errors; they must, at user option,
+be reported by
+<termref def="dt-validating">validating XML processors</termref>.</p></def>
+</gitem>
+<gitem>
+<label>well-formedness constraint</label>
+<def><p>A rule which applies to all <termref def="dt-wellformed">well-formed</termref> XML documents.
+Violations of well-formedness constraints are
+<termref def="dt-fatal">fatal errors</termref>.</p></def>
+</gitem>
+
+<gitem>
+<label>match</label>
+<def><p><termdef id="dt-match" term="match">(Of strings or names:)
+Two strings or names being compared must be identical.
+Characters with multiple possible representations in ISO/IEC 10646 (e.g.
+characters with
+both precomposed and base+diacritic forms) match only if they have the
+same representation in both strings.
+At user option, processors may normalize such characters to
+some canonical form.
+No case folding is performed.
+(Of strings and rules in the grammar:)
+A string matches a grammatical production if it belongs to the
+language generated by that production.
+(Of content and content models:)
+An element matches its declaration when it conforms
+in the fashion described in the constraint
+<specref ref="elementvalid"/>.
+</termdef>
+</p></def>
+</gitem>
+<gitem>
+<label>for compatibility</label>
+<def><p><termdef id="dt-compat" term="For Compatibility">A feature of
+XML included solely to ensure that XML remains compatible with SGML.
+</termdef></p></def>
+</gitem>
+<gitem>
+<label>for interoperability</label>
+<def><p><termdef id="dt-interop" term="For interoperability">A
+non-binding recommendation included to increase the chances that XML
+documents can be processed by the existing installed base of SGML
+processors which predate the
+&WebSGML;.</termdef></p></def>
+</gitem>
+</glist>
+</p>
+</div2>
+
+
+</div1>
+<!-- &Docs; -->
+
+<div1 id="sec-documents">
+<head>Documents</head>
+
+<p><termdef id="dt-xml-doc" term="XML Document">
+A data object is an
+<term>XML document</term> if it is
+<termref def="dt-wellformed">well-formed</termref>, as
+defined in this specification.
+A well-formed XML document may in addition be
+<termref def="dt-valid">valid</termref> if it meets certain further
+constraints.</termdef></p>
+
+<p>Each XML document has both a logical and a physical structure.
+Physically, the document is composed of units called <termref def="dt-entity">entities</termref>. An entity may <termref def="dt-entref">refer</termref> to other entities to cause their
+inclusion in the document. A document begins in a "root" or <termref def="dt-docent">document entity</termref>.
+Logically, the document is composed of declarations, elements,
+comments,
+character references, and
+processing
+instructions, all of which are indicated in the document by explicit
+markup.
+The logical and physical structures must nest properly, as described
+in <specref ref="wf-entities"/>.
+</p>
+
+<div2 id="sec-well-formed">
+<head>Well-Formed XML Documents</head>
+
+<p><termdef id="dt-wellformed" term="Well-Formed">
+A textual object is
+a well-formed XML document if:</termdef>
+<olist>
+<item><p>Taken as a whole, it
+matches the production labeled <nt def="NT-document">document</nt>.</p></item>
+<item><p>It
+meets all the well-formedness constraints given in this specification.</p>
+</item>
+<item><p>Each of the <termref def="dt-parsedent">parsed entities</termref>
+which is referenced directly or indirectly within the document is
+<titleref href="wf-entities">well-formed</titleref>.</p></item>
+</olist></p>
+<p>
+<scrap lang="ebnf" id="document">
+<head>Document</head>
+<prod id="NT-document"><lhs>document</lhs>
+<rhs><nt def="NT-prolog">prolog</nt>
+<nt def="NT-element">element</nt>
+<nt def="NT-Misc">Misc</nt>*</rhs></prod>
+</scrap>
+</p>
+<p>Matching the <nt def="NT-document">document</nt> production
+implies that:
+<olist>
+<item><p>It contains one or more
+<termref def="dt-element">elements</termref>.</p>
+</item>
+<!--* N.B. some readers (notably JC) find the following
+paragraph awkward and redundant. I agree it's logically redundant:
+it *says* it is summarizing the logical implications of
+matching the grammar, and that means by definition it's
+logically redundant. I don't think it's rhetorically
+redundant or unnecessary, though, so I'm keeping it. It
+could however use some recasting when the editors are feeling
+stronger. -MSM *-->
+<item><p><termdef id="dt-root" term="Root Element">There is exactly
+one element, called the <term>root</term>, or document element, no
+part of which appears in the <termref def="dt-content">content</termref> of any other element.</termdef>
+For all other elements, if the start-tag is in the content of another
+element, the end-tag is in the content of the same element. More
+simply stated, the elements, delimited by start- and end-tags, nest
+properly within each other.
+</p></item>
+</olist>
+</p>
+<p><termdef id="dt-parentchild" term="Parent/Child">As a consequence
+of this,
+for each non-root element
+<code>C</code> in the document, there is one other element <code>P</code>
+in the document such that
+<code>C</code> is in the content of <code>P</code>, but is not in
+the content of any other element that is in the content of
+<code>P</code>.
+<code>P</code> is referred to as the
+<term>parent</term> of <code>C</code>, and <code>C</code> as a
+<term>child</term> of <code>P</code>.</termdef></p></div2>
+
+<div2 id="charsets">
+<head>Characters</head>
+
+<p><termdef id="dt-text" term="Text">A parsed entity contains
+<term>text</term>, a sequence of
+<termref def="dt-character">characters</termref>,
+which may represent markup or character data.</termdef>
+<termdef id="dt-character" term="Character">A <term>character</term>
+is an atomic unit of text as specified by
+ISO/IEC 10646 <bibref ref="ISO10646"/>.
+Legal characters are tab, carriage return, line feed, and the legal
+graphic characters of Unicode and ISO/IEC 10646.
+The use of "compatibility characters", as defined in section 6.8
+of <bibref ref="Unicode"/>, is discouraged.
+</termdef>
+<scrap lang="ebnf" id="char32">
+<head>Character Range</head>
+<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
+<prod id="NT-Char"><lhs>Char</lhs>
+<rhs>#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
+| [#x10000-#x10FFFF]</rhs>
+<com>any Unicode character, excluding the
+surrogate blocks, FFFE, and FFFF.</com> </prod>
+</prodgroup>
+</scrap>
+</p>
+
+<p>The mechanism for encoding character code points into bit patterns may
+vary from entity to entity. All XML processors must accept the UTF-8
+and UTF-16 encodings of 10646; the mechanisms for signaling which of
+the two is in use, or for bringing other encodings into play, are
+discussed later, in <specref ref="charencoding"/>.
+</p>
+<!--
+<p>Regardless of the specific encoding used, any character in the ISO/IEC
+10646 character set may be referred to by the decimal or hexadecimal
+equivalent of its
+UCS-4 code value.
+</p>-->
+</div2>
+
+<div2 id="sec-common-syn">
+<head>Common Syntactic Constructs</head>
+
+<p>This section defines some symbols used widely in the grammar.</p>
+<p><nt def="NT-S">S</nt> (white space) consists of one or more space (#x20)
+characters, carriage returns, line feeds, or tabs.
+
+<scrap lang="ebnf" id="white">
+<head>White Space</head>
+<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
+<prod id="NT-S"><lhs>S</lhs>
+<rhs>(#x20 | #x9 | #xD | #xA)+</rhs>
+</prod>
+</prodgroup>
+</scrap></p>
+<p>Characters are classified for convenience as letters, digits, or other
+characters. Letters consist of an alphabetic or syllabic
+base character possibly
+followed by one or more combining characters, or of an ideographic
+character.
+Full definitions of the specific characters in each class
+are given in <specref ref="CharClasses"/>.</p>
+<p><termdef id="dt-name" term="Name">A <term>Name</term> is a token
+beginning with a letter or one of a few punctuation characters, and continuing
+with letters, digits, hyphens, underscores, colons, or full stops, together
+known as name characters.</termdef>
+Names beginning with the string "<code>xml</code>", or any string
+which would match <code>(('X'|'x') ('M'|'m') ('L'|'l'))</code>, are
+reserved for standardization in this or future versions of this
+specification.
+</p>
+<note>
+<p>The colon character within XML names is reserved for experimentation with
+name spaces.
+Its meaning is expected to be
+standardized at some future point, at which point those documents
+using the colon for experimental purposes may need to be updated.
+(There is no guarantee that any name-space mechanism
+adopted for XML will in fact use the colon as a name-space delimiter.)
+In practice, this means that authors should not use the colon in XML
+names except as part of name-space experiments, but that XML processors
+should accept the colon as a name character.</p>
+</note>
+<p>An
+<nt def="NT-Nmtoken">Nmtoken</nt> (name token) is any mixture of
+name characters.
+<scrap lang="ebnf">
+<head>Names and Tokens</head>
+<prod id="NT-NameChar"><lhs>NameChar</lhs>
+<rhs><nt def="NT-Letter">Letter</nt>
+| <nt def="NT-Digit">Digit</nt>
+| '.' | '-' | '_' | ':'
+| <nt def="NT-CombiningChar">CombiningChar</nt>
+| <nt def="NT-Extender">Extender</nt></rhs>
+</prod>
+<prod id="NT-Name"><lhs>Name</lhs>
+<rhs>(<nt def="NT-Letter">Letter</nt> | '_' | ':')
+(<nt def="NT-NameChar">NameChar</nt>)*</rhs></prod>
+<prod id="NT-Names"><lhs>Names</lhs>
+<rhs><nt def="NT-Name">Name</nt>
+(<nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt>)*</rhs></prod>
+<prod id="NT-Nmtoken"><lhs>Nmtoken</lhs>
+<rhs>(<nt def="NT-NameChar">NameChar</nt>)+</rhs></prod>
+<prod id="NT-Nmtokens"><lhs>Nmtokens</lhs>
+<rhs><nt def="NT-Nmtoken">Nmtoken</nt> (<nt def="NT-S">S</nt> <nt def="NT-Nmtoken">Nmtoken</nt>)*</rhs></prod>
+</scrap>
+</p>
+<p>Literal data is any quoted string not containing
+the quotation mark used as a delimiter for that string.
+Literals are used
+for specifying the content of internal entities
+(<nt def="NT-EntityValue">EntityValue</nt>),
+the values of attributes (<nt def="NT-AttValue">AttValue</nt>),
+and external identifiers
+(<nt def="NT-SystemLiteral">SystemLiteral</nt>).
+Note that a <nt def="NT-SystemLiteral">SystemLiteral</nt>
+can be parsed without scanning for markup.
+<scrap lang="ebnf">
+<head>Literals</head>
+<prod id="NT-EntityValue"><lhs>EntityValue</lhs>
+<rhs>'"'
+([^%&amp;"]
+| <nt def="NT-PEReference">PEReference</nt>
+| <nt def="NT-Reference">Reference</nt>)*
+'"'
+</rhs>
+<rhs>|&nbsp;
+"'"
+([^%&amp;']
+| <nt def="NT-PEReference">PEReference</nt>
+| <nt def="NT-Reference">Reference</nt>)*
+"'"</rhs>
+</prod>
+<prod id="NT-AttValue"><lhs>AttValue</lhs>
+<rhs>'"'
+([^&lt;&amp;"]
+| <nt def="NT-Reference">Reference</nt>)*
+'"'
+</rhs>
+<rhs>|&nbsp;
+"'"
+([^&lt;&amp;']
+| <nt def="NT-Reference">Reference</nt>)*
+"'"</rhs>
+</prod>
+<prod id="NT-SystemLiteral"><lhs>SystemLiteral</lhs>
+<rhs>('"' [^"]* '"') |&nbsp;("'" [^']* "'")
+</rhs>
+</prod>
+<prod id="NT-PubidLiteral"><lhs>PubidLiteral</lhs>
+<rhs>'"' <nt def="NT-PubidChar">PubidChar</nt>*
+'"'
+| "'" (<nt def="NT-PubidChar">PubidChar</nt> - "'")* "'"</rhs>
+</prod>
+<prod id="NT-PubidChar"><lhs>PubidChar</lhs>
+<rhs>#x20 | #xD | #xA
+|&nbsp;[a-zA-Z0-9]
+|&nbsp;[-'()+,./:=?;!*#@$_%]</rhs>
+</prod>
+</scrap>
+</p>
+
+</div2>
+
+<div2 id="syntax">
+<head>Character Data and Markup</head>
+
+<p><termref def="dt-text">Text</termref> consists of intermingled
+<termref def="dt-chardata">character
+data</termref> and markup.
+<termdef id="dt-markup" term="Markup"><term>Markup</term> takes the form of
+<termref def="dt-stag">start-tags</termref>,
+<termref def="dt-etag">end-tags</termref>,
+<termref def="dt-empty">empty-element tags</termref>,
+<termref def="dt-entref">entity references</termref>,
+<termref def="dt-charref">character references</termref>,
+<termref def="dt-comment">comments</termref>,
+<termref def="dt-cdsection">CDATA section</termref> delimiters,
+<termref def="dt-doctype">document type declarations</termref>, and
+<termref def="dt-pi">processing instructions</termref>.
+</termdef>
+</p>
+<p><termdef id="dt-chardata" term="Character Data">All text that is not markup
+constitutes the <term>character data</term> of
+the document.</termdef></p>
+<p>The ampersand character (&amp;) and the left angle bracket (&lt;)
+may appear in their literal form <emph>only</emph> when used as markup
+delimiters, or within a <termref def="dt-comment">comment</termref>, a
+<termref def="dt-pi">processing instruction</termref>,
+or a <termref def="dt-cdsection">CDATA section</termref>.
+
+They are also legal within the <termref def="dt-litentval">literal entity
+value</termref> of an internal entity declaration; see
+<specref ref="wf-entities"/>.
+<!-- FINAL EDIT: restore internal entity decl or leave it out. -->
+If they are needed elsewhere,
+they must be <termref def="dt-escape">escaped</termref>
+using either <termref def="dt-charref">numeric character references</termref>
+or the strings
+"<code>&amp;amp;</code>" and "<code>&amp;lt;</code>" respectively.
+The right angle
+bracket (&gt;) may be represented using the string
+"<code>&amp;gt;</code>", and must, <termref def="dt-compat">for
+compatibility</termref>,
+be escaped using
+"<code>&amp;gt;</code>" or a character reference
+when it appears in the string
+"<code>]]&gt;</code>"
+in content,
+when that string is not marking the end of
+a <termref def="dt-cdsection">CDATA section</termref>.
+</p>
+<p>
+In the content of elements, character data
+is any string of characters which does
+not contain the start-delimiter of any markup.
+In a CDATA section, character data
+is any string of characters not including the CDATA-section-close
+delimiter, "<code>]]&gt;</code>".</p>
+<p>
+To allow attribute values to contain both single and double quotes, the
+apostrophe or single-quote character (') may be represented as
+"<code>&amp;apos;</code>", and the double-quote character (") as
+"<code>&amp;quot;</code>".
+<scrap lang="ebnf">
+<head>Character Data</head>
+<prod id="NT-CharData">
+<lhs>CharData</lhs>
+<rhs>[^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)</rhs>
+</prod>
+</scrap>
+</p>
+</div2>
+
+<div2 id="sec-comments">
+<head>Comments</head>
+
+<p><termdef id="dt-comment" term="Comment"><term>Comments</term> may
+appear anywhere in a document outside other
+<termref def="dt-markup">markup</termref>; in addition,
+they may appear within the document type declaration
+at places allowed by the grammar.
+They are not part of the document's <termref def="dt-chardata">character
+data</termref>; an XML
+processor may, but need not, make it possible for an application to
+retrieve the text of comments.
+<termref def="dt-compat">For compatibility</termref>, the string
+"<code>--</code>" (double-hyphen) must not occur within
+comments.
+<scrap lang="ebnf">
+<head>Comments</head>
+<prod id="NT-Comment"><lhs>Comment</lhs>
+<rhs>'&lt;!--'
+((<nt def="NT-Char">Char</nt> - '-')
+| ('-' (<nt def="NT-Char">Char</nt> - '-')))*
+'--&gt;'</rhs>
+</prod>
+</scrap>
+</termdef></p>
+<p>An example of a comment:
+<eg>&lt;!&como; declarations for &lt;head&gt; &amp; &lt;body&gt; &comc;&gt;</eg>
+</p>
+</div2>
+
+<div2 id="sec-pi">
+<head>Processing Instructions</head>
+
+<p><termdef id="dt-pi" term="Processing instruction"><term>Processing
+instructions</term> (PIs) allow documents to contain instructions
+for applications.
+
+<scrap lang="ebnf">
+<head>Processing Instructions</head>
+<prod id="NT-PI"><lhs>PI</lhs>
+<rhs>'&lt;?' <nt def="NT-PITarget">PITarget</nt>
+(<nt def="NT-S">S</nt>
+(<nt def="NT-Char">Char</nt>* -
+(<nt def="NT-Char">Char</nt>* &pic; <nt def="NT-Char">Char</nt>*)))?
+&pic;</rhs></prod>
+<prod id="NT-PITarget"><lhs>PITarget</lhs>
+<rhs><nt def="NT-Name">Name</nt> -
+(('X' | 'x') ('M' | 'm') ('L' | 'l'))</rhs>
+</prod>
+</scrap></termdef>
+PIs are not part of the document's <termref def="dt-chardata">character
+data</termref>, but must be passed through to the application. The
+PI begins with a target (<nt def="NT-PITarget">PITarget</nt>) used
+to identify the application to which the instruction is directed.
+The target names "<code>XML</code>", "<code>xml</code>", and so on are
+reserved for standardization in this or future versions of this
+specification.
+The
+XML <termref def="dt-notation">Notation</termref> mechanism
+may be used for
+formal declaration of PI targets.
+</p>
+</div2>
+
+<div2 id="sec-cdata-sect">
+<head>CDATA Sections</head>
+
+<p><termdef id="dt-cdsection" term="CDATA Section"><term>CDATA sections</term>
+may occur
+anywhere character data may occur; they are
+used to escape blocks of text containing characters which would
+otherwise be recognized as markup. CDATA sections begin with the
+string "<code>&lt;![CDATA[</code>" and end with the string
+"<code>]]&gt;</code>":
+<scrap lang="ebnf">
+<head>CDATA Sections</head>
+<prod id="NT-CDSect"><lhs>CDSect</lhs>
+<rhs><nt def="NT-CDStart">CDStart</nt>
+<nt def="NT-CData">CData</nt>
+<nt def="NT-CDEnd">CDEnd</nt></rhs></prod>
+<prod id="NT-CDStart"><lhs>CDStart</lhs>
+<rhs>'&lt;![CDATA['</rhs>
+</prod>
+<prod id="NT-CData"><lhs>CData</lhs>
+<rhs>(<nt def="NT-Char">Char</nt>* -
+(<nt def="NT-Char">Char</nt>* ']]&gt;' <nt def="NT-Char">Char</nt>*))
+</rhs>
+</prod>
+<prod id="NT-CDEnd"><lhs>CDEnd</lhs>
+<rhs>']]&gt;'</rhs>
+</prod>
+</scrap>
+
+Within a CDATA section, only the <nt def="NT-CDEnd">CDEnd</nt> string is
+recognized as markup, so that left angle brackets and ampersands may occur in
+their literal form; they need not (and cannot) be escaped using
+"<code>&amp;lt;</code>" and "<code>&amp;amp;</code>". CDATA sections
+cannot nest.</termdef>
+</p>
+
+<p>An example of a CDATA section, in which "<code>&lt;greeting&gt;</code>" and
+"<code>&lt;/greeting&gt;</code>"
+are recognized as <termref def="dt-chardata">character data</termref>, not
+<termref def="dt-markup">markup</termref>:
+<eg>&lt;![CDATA[&lt;greeting&gt;Hello, world!&lt;/greeting&gt;]]&gt;</eg>
+</p>
+</div2>
+
+<div2 id="sec-prolog-dtd">
+<head>Prolog and Document Type Declaration</head>
+
+<p><termdef id="dt-xmldecl" term="XML Declaration">XML documents
+may, and should,
+begin with an <term>XML declaration</term> which specifies
+the version of
+XML being used.</termdef>
+For example, the following is a complete XML document, <termref def="dt-wellformed">well-formed</termref> but not
+<termref def="dt-valid">valid</termref>:
+<eg><![CDATA[<?xml version="1.0"?>
+<greeting>Hello, world!</greeting>
+]]></eg>
+and so is this:
+<eg><![CDATA[<greeting>Hello, world!</greeting>
+]]></eg>
+</p>
+
+<p>The version number "<code>1.0</code>" should be used to indicate
+conformance to this version of this specification; it is an error
+for a document to use the value "<code>1.0</code>"
+if it does not conform to this version of this specification.
+It is the intent
+of the XML working group to give later versions of this specification
+numbers other than "<code>1.0</code>", but this intent does not
+indicate a
+commitment to produce any future versions of XML, nor if any are produced, to
+use any particular numbering scheme.
+Since future versions are not ruled out, this construct is provided
+as a means to allow the possibility of automatic version recognition, should
+it become necessary.
+Processors may signal an error if they receive documents labeled with
+versions they do not support.
+</p>
+<p>The function of the markup in an XML document is to describe its
+storage and logical structure and to associate attribute-value pairs
+with its logical structures. XML provides a mechanism, the <termref def="dt-doctype">document type declaration</termref>, to define
+constraints on the logical structure and to support the use of
+predefined storage units.
+
+<termdef id="dt-valid" term="Validity">An XML document is
+<term>valid</term> if it has an associated document type
+declaration and if the document
+complies with the constraints expressed in it.</termdef></p>
+<p>The document type declaration must appear before
+the first <termref def="dt-element">element</termref> in the document.
+<scrap lang="ebnf" id="xmldoc">
+<head>Prolog</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id="NT-prolog"><lhs>prolog</lhs>
+<rhs><nt def="NT-XMLDecl">XMLDecl</nt>?
+<nt def="NT-Misc">Misc</nt>*
+(<nt def="NT-doctypedecl">doctypedecl</nt>
+<nt def="NT-Misc">Misc</nt>*)?</rhs></prod>
+<prod id="NT-XMLDecl"><lhs>XMLDecl</lhs>
+<rhs>&xmlpio;
+<nt def="NT-VersionInfo">VersionInfo</nt>
+<nt def="NT-EncodingDecl">EncodingDecl</nt>?
+<nt def="NT-SDDecl">SDDecl</nt>?
+<nt def="NT-S">S</nt>?
+&pic;</rhs>
+</prod>
+<prod id="NT-VersionInfo"><lhs>VersionInfo</lhs>
+<rhs><nt def="NT-S">S</nt> 'version' <nt def="NT-Eq">Eq</nt>
+(' <nt def="NT-VersionNum">VersionNum</nt> '
+| " <nt def="NT-VersionNum">VersionNum</nt> ")</rhs>
+</prod>
+<prod id="NT-Eq"><lhs>Eq</lhs>
+<rhs><nt def="NT-S">S</nt>? '=' <nt def="NT-S">S</nt>?</rhs></prod>
+<prod id="NT-VersionNum">
+<lhs>VersionNum</lhs>
+<rhs>([a-zA-Z0-9_.:] | '-')+</rhs>
+</prod>
+<prod id="NT-Misc"><lhs>Misc</lhs>
+<rhs><nt def="NT-Comment">Comment</nt> | <nt def="NT-PI">PI</nt> |
+<nt def="NT-S">S</nt></rhs></prod>
+</prodgroup>
+</scrap></p>
+
+<p><termdef id="dt-doctype" term="Document Type Declaration">The XML
+<term>document type declaration</term>
+contains or points to
+<termref def="dt-markupdecl">markup declarations</termref>
+that provide a grammar for a
+class of documents.
+This grammar is known as a document type definition,
+or <term>DTD</term>.
+The document type declaration can point to an external subset (a
+special kind of
+<termref def="dt-extent">external entity</termref>) containing markup
+declarations, or can
+contain the markup declarations directly in an internal subset, or can do
+both.
+The DTD for a document consists of both subsets taken
+together.</termdef>
+</p>
+<p><termdef id="dt-markupdecl" term="markup declaration">
+A <term>markup declaration</term> is
+an <termref def="dt-eldecl">element type declaration</termref>,
+an <termref def="dt-attdecl">attribute-list declaration</termref>,
+an <termref def="dt-entdecl">entity declaration</termref>, or
+a <termref def="dt-notdecl">notation declaration</termref>.
+</termdef>
+These declarations may be contained in whole or in part
+within <termref def="dt-PE">parameter entities</termref>,
+as described in the well-formedness and validity constraints below.
+For fuller information, see
+<specref ref="sec-physical-struct"/>.</p>
+<scrap lang="ebnf" id="dtd">
+<head>Document Type Definition</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id="NT-doctypedecl"><lhs>doctypedecl</lhs>
+<rhs>'&lt;!DOCTYPE' <nt def="NT-S">S</nt>
+<nt def="NT-Name">Name</nt> (<nt def="NT-S">S</nt>
+<nt def="NT-ExternalID">ExternalID</nt>)?
+<nt def="NT-S">S</nt>? ('['
+(<nt def="NT-markupdecl">markupdecl</nt>
+| <nt def="NT-PEReference">PEReference</nt>
+| <nt def="NT-S">S</nt>)*
+']'
+<nt def="NT-S">S</nt>?)? '&gt;'</rhs>
+<vc def="vc-roottype"/>
+</prod>
+<prod id="NT-markupdecl"><lhs>markupdecl</lhs>
+<rhs><nt def="NT-elementdecl">elementdecl</nt>
+| <nt def="NT-AttlistDecl">AttlistDecl</nt>
+| <nt def="NT-EntityDecl">EntityDecl</nt>
+| <nt def="NT-NotationDecl">NotationDecl</nt>
+| <nt def="NT-PI">PI</nt>
+| <nt def="NT-Comment">Comment</nt>
+</rhs>
+<vc def="vc-PEinMarkupDecl"/>
+<wfc def="wfc-PEinInternalSubset"/>
+</prod>
+
+</prodgroup>
+</scrap>
+
+<p>The markup declarations may be made up in whole or in part of
+the <termref def="dt-repltext">replacement text</termref> of
+<termref def="dt-PE">parameter entities</termref>.
+The productions later in this specification for
+individual nonterminals (<nt def="NT-elementdecl">elementdecl</nt>,
+<nt def="NT-AttlistDecl">AttlistDecl</nt>, and so on) describe
+the declarations <emph>after</emph> all the parameter entities have been
+<termref def="dt-include">included</termref>.</p>
+
+<vcnote id="vc-roottype">
+<head>Root Element Type</head>
+<p>
+The <nt def="NT-Name">Name</nt> in the document type declaration must
+match the element type of the <termref def="dt-root">root element</termref>.
+</p>
+</vcnote>
+
+<vcnote id="vc-PEinMarkupDecl">
+<head>Proper Declaration/PE Nesting</head>
+<p>Parameter-entity
+<termref def="dt-repltext">replacement text</termref> must be properly nested
+with markup declarations.
+That is to say, if either the first character
+or the last character of a markup
+declaration (<nt def="NT-markupdecl">markupdecl</nt> above)
+is contained in the replacement text for a
+<termref def="dt-PERef">parameter-entity reference</termref>,
+both must be contained in the same replacement text.</p>
+</vcnote>
+<wfcnote id="wfc-PEinInternalSubset">
+<head>PEs in Internal Subset</head>
+<p>In the internal DTD subset,
+<termref def="dt-PERef">parameter-entity references</termref>
+can occur only where markup declarations can occur, not
+within markup declarations. (This does not apply to
+references that occur in
+external parameter entities or to the external subset.)
+</p>
+</wfcnote>
+<p>
+Like the internal subset, the external subset and
+any external parameter entities referred to in the DTD
+must consist of a series of complete markup declarations of the types
+allowed by the non-terminal symbol
+<nt def="NT-markupdecl">markupdecl</nt>, interspersed with white space
+or <termref def="dt-PERef">parameter-entity references</termref>.
+However, portions of the contents
+of the
+external subset or of external parameter entities may conditionally be ignored
+by using
+the <termref def="dt-cond-section">conditional section</termref>
+construct; this is not allowed in the internal subset.
+
+<scrap id="ext-Subset">
+<head>External Subset</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id="NT-extSubset"><lhs>extSubset</lhs>
+<rhs><nt def="NT-TextDecl">TextDecl</nt>?
+<nt def="NT-extSubsetDecl">extSubsetDecl</nt></rhs></prod>
+<prod id="NT-extSubsetDecl"><lhs>extSubsetDecl</lhs>
+<rhs>(
+<nt def="NT-markupdecl">markupdecl</nt>
+| <nt def="NT-conditionalSect">conditionalSect</nt>
+| <nt def="NT-PEReference">PEReference</nt>
+| <nt def="NT-S">S</nt>
+)*</rhs>
+</prod>
+</prodgroup>
+</scrap></p>
+<p>The external subset and external parameter entities also differ
+from the internal subset in that in them,
+<termref def="dt-PERef">parameter-entity references</termref>
+are permitted <emph>within</emph> markup declarations,
+not only <emph>between</emph> markup declarations.</p>
+<p>An example of an XML document with a document type declaration:
+<eg><![CDATA[<?xml version="1.0"?>
+<!DOCTYPE greeting SYSTEM "hello.dtd">
+<greeting>Hello, world!</greeting>
+]]></eg>
+The <termref def="dt-sysid">system identifier</termref>
+"<code>hello.dtd</code>" gives the URI of a DTD for the document.</p>
+<p>The declarations can also be given locally, as in this
+example:
+<eg><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE greeting [
+ <!ELEMENT greeting (#PCDATA)>
+]>
+<greeting>Hello, world!</greeting>
+]]></eg>
+If both the external and internal subsets are used, the
+internal subset is considered to occur before the external subset.
+<!-- 'is considered to'? boo. whazzat mean? -->
+This has the effect that entity and attribute-list declarations in the
+internal subset take precedence over those in the external subset.
+</p>
+</div2>
+
+<div2 id="sec-rmd">
+<head>Standalone Document Declaration</head>
+<p>Markup declarations can affect the content of the document,
+as passed from an <termref def="dt-xml-proc">XML processor</termref>
+to an application; examples are attribute defaults and entity
+declarations.
+The standalone document declaration,
+which may appear as a component of the XML declaration, signals
+whether or not there are such declarations which appear external to
+the <termref def="dt-docent">document entity</termref>.
+<scrap lang="ebnf" id="fulldtd">
+<head>Standalone Document Declaration</head>
+<prodgroup pcw2="4" pcw4="19.5" pcw5="9">
+<prod id="NT-SDDecl"><lhs>SDDecl</lhs>
+<rhs>
+<nt def="NT-S">S</nt>
+'standalone' <nt def="NT-Eq">Eq</nt>
+(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"'))
+</rhs>
+<vc def="vc-check-rmd"/></prod>
+</prodgroup>
+</scrap></p>
+<p>
+In a standalone document declaration, the value "<code>yes</code>" indicates
+that there
+are no markup declarations external to the <termref def="dt-docent">document
+entity</termref> (either in the DTD external subset, or in an
+external parameter entity referenced from the internal subset)
+which affect the information passed from the XML processor to
+the application.
+The value "<code>no</code>" indicates that there are or may be such
+external markup declarations.
+Note that the standalone document declaration only
+denotes the presence of external <emph>declarations</emph>; the presence, in a
+document, of
+references to external <emph>entities</emph>, when those entities are
+internally declared,
+does not change its standalone status.</p>
+<p>If there are no external markup declarations, the standalone document
+declaration has no meaning.
+If there are external markup declarations but there is no standalone
+document declaration, the value "<code>no</code>" is assumed.</p>
+<p>Any XML document for which <code>standalone="no"</code> holds can
+be converted algorithmically to a standalone document,
+which may be desirable for some network delivery applications.</p>
+<vcnote id="vc-check-rmd">
+<head>Standalone Document Declaration</head>
+<p>The standalone document declaration must have
+the value "<code>no</code>" if any external markup declarations
+contain declarations of:</p><ulist>
+<item><p>attributes with <termref def="dt-default">default</termref> values, if
+elements to which
+these attributes apply appear in the document without
+specifications of values for these attributes, or</p></item>
+<item><p>entities (other than &magicents;),
+if <termref def="dt-entref">references</termref> to those
+entities appear in the document, or</p>
+</item>
+<item><p>attributes with values subject to
+<titleref href="AVNormalize">normalization</titleref>, where the
+attribute appears in the document with a value which will
+change as a result of normalization, or</p>
+</item>
+<item>
+<p>element types with <termref def="dt-elemcontent">element content</termref>,
+if white space occurs
+directly within any instance of those types.
+</p></item>
+</ulist>
+
+</vcnote>
+<p>An example XML declaration with a standalone document declaration:<eg>&lt;?xml version="&XML.version;" standalone='yes'?&gt;</eg></p>
+</div2>
+<div2 id="sec-white-space">
+<head>White Space Handling</head>
+
+<p>In editing XML documents, it is often convenient to use "white space"
+(spaces, tabs, and blank lines, denoted by the nonterminal
+<nt def="NT-S">S</nt> in this specification) to
+set apart the markup for greater readability. Such white space is typically
+not intended for inclusion in the delivered version of the document.
+On the other hand, "significant" white space that should be preserved in the
+delivered version is common, for example in poetry and
+source code.</p>
+<p>An <termref def="dt-xml-proc">XML processor</termref>
+must always pass all characters in a document that are not
+markup through to the application. A <termref def="dt-validating">
+validating XML processor</termref> must also inform the application
+which of these characters constitute white space appearing
+in <termref def="dt-elemcontent">element content</termref>.
+</p>
+<p>A special <termref def="dt-attr">attribute</termref>
+named <kw>xml:space</kw> may be attached to an element
+to signal an intention that in that element,
+white space should be preserved by applications.
+In valid documents, this attribute, like any other, must be
+<termref def="dt-attdecl">declared</termref> if it is used.
+When declared, it must be given as an
+<termref def="dt-enumerated">enumerated type</termref> whose only
+possible values are "<code>default</code>" and "<code>preserve</code>".
+For example:<eg><![CDATA[ <!ATTLIST poem xml:space (default|preserve) 'preserve'>]]></eg></p>
+<p>The value "<code>default</code>" signals that applications'
+default white-space processing modes are acceptable for this element; the
+value "<code>preserve</code>" indicates the intent that applications preserve
+all the white space.
+This declared intent is considered to apply to all elements within the content
+of the element where it is specified, unless overriden with another instance
+of the <kw>xml:space</kw> attribute.
+</p>
+<p>The <termref def="dt-root">root element</termref> of any document
+is considered to have signaled no intentions as regards application space
+handling, unless it provides a value for
+this attribute or the attribute is declared with a default value.
+</p>
+
+</div2>
+<div2 id="sec-line-ends">
+<head>End-of-Line Handling</head>
+<p>XML <termref def="dt-parsedent">parsed entities</termref> are often stored in
+computer files which, for editing convenience, are organized into lines.
+These lines are typically separated by some combination of the characters
+carriage-return (#xD) and line-feed (#xA).</p>
+<p>To simplify the tasks of <termref def="dt-app">applications</termref>,
+wherever an external parsed entity or the literal entity value
+of an internal parsed entity contains either the literal
+two-character sequence "#xD#xA" or a standalone literal
+#xD, an <termref def="dt-xml-proc">XML processor</termref> must
+pass to the application the single character #xA.
+(This behavior can
+conveniently be produced by normalizing all
+line breaks to #xA on input, before parsing.)
+</p>
+</div2>
+<div2 id="sec-lang-tag">
+<head>Language Identification</head>
+<p>In document processing, it is often useful to
+identify the natural or formal language
+in which the content is
+written.
+A special <termref def="dt-attr">attribute</termref> named
+<kw>xml:lang</kw> may be inserted in
+documents to specify the
+language used in the contents and attribute values
+of any element in an XML document.
+In valid documents, this attribute, like any other, must be
+<termref def="dt-attdecl">declared</termref> if it is used.
+The values of the attribute are language identifiers as defined
+by <bibref ref="RFC1766"/>, "Tags for the Identification of Languages":
+<scrap lang="ebnf">
+<head>Language Identification</head>
+<prod id="NT-LanguageID"><lhs>LanguageID</lhs>
+<rhs><nt def="NT-Langcode">Langcode</nt>
+('-' <nt def="NT-Subcode">Subcode</nt>)*</rhs></prod>
+<prod id="NT-Langcode"><lhs>Langcode</lhs>
+<rhs><nt def="NT-ISO639Code">ISO639Code</nt> |
+<nt def="NT-IanaCode">IanaCode</nt> |
+<nt def="NT-UserCode">UserCode</nt></rhs>
+</prod>
+<prod id="NT-ISO639Code"><lhs>ISO639Code</lhs>
+<rhs>([a-z] | [A-Z]) ([a-z] | [A-Z])</rhs></prod>
+<prod id="NT-IanaCode"><lhs>IanaCode</lhs>
+<rhs>('i' | 'I') '-' ([a-z] | [A-Z])+</rhs></prod>
+<prod id="NT-UserCode"><lhs>UserCode</lhs>
+<rhs>('x' | 'X') '-' ([a-z] | [A-Z])+</rhs></prod>
+<prod id="NT-Subcode"><lhs>Subcode</lhs>
+<rhs>([a-z] | [A-Z])+</rhs></prod>
+</scrap>
+The <nt def="NT-Langcode">Langcode</nt> may be any of the following:
+<ulist>
+<item><p>a two-letter language code as defined by
+<bibref ref="ISO639"/>, "Codes
+for the representation of names of languages"</p></item>
+<item><p>a language identifier registered with the Internet
+Assigned Numbers Authority <bibref ref="IANA"/>; these begin with the
+prefix "<code>i-</code>" (or "<code>I-</code>")</p></item>
+<item><p>a language identifier assigned by the user, or agreed on
+between parties in private use; these must begin with the
+prefix "<code>x-</code>" or "<code>X-</code>" in order to ensure that they do not conflict
+with names later standardized or registered with IANA</p></item>
+</ulist></p>
+<p>There may be any number of <nt def="NT-Subcode">Subcode</nt> segments; if
+the first
+subcode segment exists and the Subcode consists of two
+letters, then it must be a country code from
+<bibref ref="ISO3166"/>, "Codes
+for the representation of names of countries."
+If the first
+subcode consists of more than two letters, it must be
+a subcode for the language in question registered with IANA,
+unless the <nt def="NT-Langcode">Langcode</nt> begins with the prefix
+"<code>x-</code>" or
+"<code>X-</code>". </p>
+<p>It is customary to give the language code in lower case, and
+the country code (if any) in upper case.
+Note that these values, unlike other names in XML documents,
+are case insensitive.</p>
+<p>For example:
+<eg><![CDATA[<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
+<p xml:lang="en-GB">What colour is it?</p>
+<p xml:lang="en-US">What color is it?</p>
+<sp who="Faust" desc='leise' xml:lang="de">
+ <l>Habe nun, ach! Philosophie,</l>
+ <l>Juristerei, und Medizin</l>
+ <l>und leider auch Theologie</l>
+ <l>durchaus studiert mit heißem Bemüh'n.</l>
+ </sp>]]></eg></p>
+<!--<p>The xml:lang value is considered to apply both to the contents of an
+element and
+(unless otherwise via attribute default values) to the
+values of all of its attributes with free-text (CDATA) values. -->
+<p>The intent declared with <kw>xml:lang</kw> is considered to apply to
+all attributes and content of the element where it is specified,
+unless overridden with an instance of <kw>xml:lang</kw>
+on another element within that content.</p>
+<!--
+If no
+value is specified for xml:lang on an element, and no default value is
+defined for it in the DTD, then the xml:lang attribute of any element
+takes the same value it has in the parent element, if any. The two
+technical terms in the following example both have the same effective
+value for xml:lang:
+
+ <p xml:lang="en">Here the keywords are
+ <term xml:lang="en">shift</term> and
+ <term>reduce</term>. ...</p>
+
+The application, not the XML processor, is responsible for this '
+inheritance' of attribute values.
+-->
+<p>A simple declaration for <kw>xml:lang</kw> might take
+the form
+<eg>xml:lang NMTOKEN #IMPLIED</eg>
+but specific default values may also be given, if appropriate. In a
+collection of French poems for English students, with glosses and
+notes in English, the xml:lang attribute might be declared this way:
+<eg><![CDATA[ <!ATTLIST poem xml:lang NMTOKEN 'fr'>
+ <!ATTLIST gloss xml:lang NMTOKEN 'en'>
+ <!ATTLIST note xml:lang NMTOKEN 'en'>]]></eg>
+</p>
+
+</div2>
+</div1>
+<!-- &Elements; -->
+
+<div1 id="sec-logical-struct">
+<head>Logical Structures</head>
+
+<p><termdef id="dt-element" term="Element">Each <termref def="dt-xml-doc">XML document</termref> contains one or more
+<term>elements</term>, the boundaries of which are
+either delimited by <termref def="dt-stag">start-tags</termref>
+and <termref def="dt-etag">end-tags</termref>, or, for <termref def="dt-empty">empty</termref> elements, by an <termref def="dt-eetag">empty-element tag</termref>. Each element has a type,
+identified by name, sometimes called its "generic
+identifier" (GI), and may have a set of
+attribute specifications.</termdef> Each attribute specification
+has a <termref def="dt-attrname">name</termref> and a <termref def="dt-attrval">value</termref>.
+</p>
+<scrap lang="ebnf"><head>Element</head>
+<prod id="NT-element"><lhs>element</lhs>
+<rhs><nt def="NT-EmptyElemTag">EmptyElemTag</nt></rhs>
+<rhs>| <nt def="NT-STag">STag</nt> <nt def="NT-content">content</nt>
+<nt def="NT-ETag">ETag</nt></rhs>
+<wfc def="GIMatch"/>
+<vc def="elementvalid"/>
+</prod>
+</scrap>
+<p>This specification does not constrain the semantics, use, or (beyond
+syntax) names of the element types and attributes, except that names
+beginning with a match to <code>(('X'|'x')('M'|'m')('L'|'l'))</code>
+are reserved for standardization in this or future versions of this
+specification.
+</p>
+<wfcnote id="GIMatch">
+<head>Element Type Match</head>
+<p>
+The <nt def="NT-Name">Name</nt> in an element's end-tag must match
+the element type in
+the start-tag.
+</p>
+</wfcnote>
+<vcnote id="elementvalid">
+<head>Element Valid</head>
+<p>An element is
+valid if
+there is a declaration matching
+<nt def="NT-elementdecl">elementdecl</nt> where the
+<nt def="NT-Name">Name</nt> matches the element type, and
+one of the following holds:</p>
+<olist>
+<item><p>The declaration matches <kw>EMPTY</kw> and the element has no
+<termref def="dt-content">content</termref>.</p></item>
+<item><p>The declaration matches <nt def="NT-children">children</nt> and
+the sequence of
+<termref def="dt-parentchild">child elements</termref>
+belongs to the language generated by the regular expression in
+the content model, with optional white space (characters
+matching the nonterminal <nt def="NT-S">S</nt>) between each pair
+of child elements.</p></item>
+<item><p>The declaration matches <nt def="NT-Mixed">Mixed</nt> and
+the content consists of <termref def="dt-chardata">character
+data</termref> and <termref def="dt-parentchild">child elements</termref>
+whose types match names in the content model.</p></item>
+<item><p>The declaration matches <kw>ANY</kw>, and the types
+of any <termref def="dt-parentchild">child elements</termref> have
+been declared.</p></item>
+</olist>
+</vcnote>
+
+<div2 id="sec-starttags">
+<head>Start-Tags, End-Tags, and Empty-Element Tags</head>
+
+<p><termdef id="dt-stag" term="Start-Tag">The beginning of every
+non-empty XML element is marked by a <term>start-tag</term>.
+<scrap lang="ebnf">
+<head>Start-tag</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id="NT-STag"><lhs>STag</lhs>
+<rhs>'&lt;' <nt def="NT-Name">Name</nt>
+(<nt def="NT-S">S</nt> <nt def="NT-Attribute">Attribute</nt>)*
+<nt def="NT-S">S</nt>? '&gt;'</rhs>
+<wfc def="uniqattspec"/>
+</prod>
+<prod id="NT-Attribute"><lhs>Attribute</lhs>
+<rhs><nt def="NT-Name">Name</nt> <nt def="NT-Eq">Eq</nt>
+<nt def="NT-AttValue">AttValue</nt></rhs>
+<vc def="ValueType"/>
+<wfc def="NoExternalRefs"/>
+<wfc def="CleanAttrVals"/></prod>
+</prodgroup>
+</scrap>
+The <nt def="NT-Name">Name</nt> in
+the start- and end-tags gives the
+element's <term>type</term>.</termdef>
+<termdef id="dt-attr" term="Attribute">
+The <nt def="NT-Name">Name</nt>-<nt def="NT-AttValue">AttValue</nt> pairs are
+referred to as
+the <term>attribute specifications</term> of the element</termdef>,
+<termdef id="dt-attrname" term="Attribute Name">with the
+<nt def="NT-Name">Name</nt> in each pair
+referred to as the <term>attribute name</term></termdef> and
+<termdef id="dt-attrval" term="Attribute Value">the content of the
+<nt def="NT-AttValue">AttValue</nt> (the text between the
+<code>'</code> or <code>"</code> delimiters)
+as the <term>attribute value</term>.</termdef>
+</p>
+<wfcnote id="uniqattspec">
+<head>Unique Att Spec</head>
+<p>
+No attribute name may appear more than once in the same start-tag
+or empty-element tag.
+</p>
+</wfcnote>
+<vcnote id="ValueType">
+<head>Attribute Value Type</head>
+<p>
+The attribute must have been declared; the value must be of the type
+declared for it.
+(For attribute types, see <specref ref="attdecls"/>.)
+</p>
+</vcnote>
+<wfcnote id="NoExternalRefs">
+<head>No External Entity References</head>
+<p>
+Attribute values cannot contain direct or indirect entity references
+to external entities.
+</p>
+</wfcnote>
+<wfcnote id="CleanAttrVals">
+<head>No <code>&lt;</code> in Attribute Values</head>
+<p>The <termref def="dt-repltext">replacement text</termref> of any entity
+referred to directly or indirectly in an attribute
+value (other than "<code>&amp;lt;</code>") must not contain
+a <code>&lt;</code>.
+</p></wfcnote>
+<p>An example of a start-tag:
+<eg>&lt;termdef id="dt-dog" term="dog"&gt;</eg></p>
+<p><termdef id="dt-etag" term="End Tag">The end of every element
+that begins with a start-tag must
+be marked by an <term>end-tag</term>
+containing a name that echoes the element's type as given in the
+start-tag:
+<scrap lang="ebnf">
+<head>End-tag</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id="NT-ETag"><lhs>ETag</lhs>
+<rhs>'&lt;/' <nt def="NT-Name">Name</nt>
+<nt def="NT-S">S</nt>? '&gt;'</rhs></prod>
+</prodgroup>
+</scrap>
+</termdef></p>
+<p>An example of an end-tag:<eg>&lt;/termdef&gt;</eg></p>
+<p><termdef id="dt-content" term="Content">The
+<termref def="dt-text">text</termref> between the start-tag and
+end-tag is called the element's
+<term>content</term>:
+<scrap lang="ebnf">
+<head>Content of Elements</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id="NT-content"><lhs>content</lhs>
+<rhs>(<nt def="NT-element">element</nt> | <nt def="NT-CharData">CharData</nt>
+| <nt def="NT-Reference">Reference</nt> | <nt def="NT-CDSect">CDSect</nt>
+| <nt def="NT-PI">PI</nt> | <nt def="NT-Comment">Comment</nt>)*</rhs>
+</prod>
+</prodgroup>
+</scrap>
+</termdef></p>
+<p><termdef id="dt-empty" term="Empty">If an element is <term>empty</term>,
+it must be represented either by a start-tag immediately followed
+by an end-tag or by an empty-element tag.</termdef>
+<termdef id="dt-eetag" term="empty-element tag">An
+<term>empty-element tag</term> takes a special form:
+<scrap lang="ebnf">
+<head>Tags for Empty Elements</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id="NT-EmptyElemTag"><lhs>EmptyElemTag</lhs>
+<rhs>'&lt;' <nt def="NT-Name">Name</nt> (<nt def="NT-S">S</nt>
+<nt def="NT-Attribute">Attribute</nt>)* <nt def="NT-S">S</nt>?
+'/&gt;'</rhs>
+<wfc def="uniqattspec"/>
+</prod>
+</prodgroup>
+</scrap>
+</termdef></p>
+<p>Empty-element tags may be used for any element which has no
+content, whether or not it is declared using the keyword
+<kw>EMPTY</kw>.
+<termref def="dt-interop">For interoperability</termref>, the empty-element
+tag must be used, and can only be used, for elements which are
+<termref def="dt-eldecl">declared</termref> <kw>EMPTY</kw>.</p>
+<p>Examples of empty elements:
+<eg>&lt;IMG align="left"
+ src="http://www.w3.org/Icons/WWW/w3c_home" /&gt;
+&lt;br&gt;&lt;/br&gt;
+&lt;br/&gt;</eg></p>
+</div2>
+
+<div2 id="elemdecls">
+<head>Element Type Declarations</head>
+
+<p>The <termref def="dt-element">element</termref> structure of an
+<termref def="dt-xml-doc">XML document</termref> may, for
+<termref def="dt-valid">validation</termref> purposes,
+be constrained
+using element type and attribute-list declarations.
+An element type declaration constrains the element's
+<termref def="dt-content">content</termref>.
+</p>
+
+<p>Element type declarations often constrain which element types can
+appear as <termref def="dt-parentchild">children</termref> of the element.
+At user option, an XML processor may issue a warning
+when a declaration mentions an element type for which no declaration
+is provided, but this is not an error.</p>
+<p><termdef id="dt-eldecl" term="Element Type declaration">An <term>element
+type declaration</term> takes the form:
+<scrap lang="ebnf">
+<head>Element Type Declaration</head>
+<prodgroup pcw2="5.5" pcw4="18" pcw5="9">
+<prod id="NT-elementdecl"><lhs>elementdecl</lhs>
+<rhs>'&lt;!ELEMENT' <nt def="NT-S">S</nt>
+<nt def="NT-Name">Name</nt>
+<nt def="NT-S">S</nt>
+<nt def="NT-contentspec">contentspec</nt>
+<nt def="NT-S">S</nt>? '&gt;'</rhs>
+<vc def="EDUnique"/></prod>
+<prod id="NT-contentspec"><lhs>contentspec</lhs>
+<rhs>'EMPTY'
+| 'ANY'
+| <nt def="NT-Mixed">Mixed</nt>
+| <nt def="NT-children">children</nt>
+</rhs>
+</prod>
+</prodgroup>
+</scrap>
+where the <nt def="NT-Name">Name</nt> gives the element type
+being declared.</termdef>
+</p>
+
+<vcnote id="EDUnique">
+<head>Unique Element Type Declaration</head>
+<p>
+No element type may be declared more than once.
+</p>
+</vcnote>
+
+<p>Examples of element type declarations:
+<eg>&lt;!ELEMENT br EMPTY&gt;
+&lt;!ELEMENT p (#PCDATA|emph)* &gt;
+&lt;!ELEMENT %name.para; %content.para; &gt;
+&lt;!ELEMENT container ANY&gt;</eg></p>
+
+<div3 id="sec-element-content">
+<head>Element Content</head>
+
+<p><termdef id="dt-elemcontent" term="Element content">An element <termref def="dt-stag">type</termref> has
+<term>element content</term> when elements of that
+type must contain only <termref def="dt-parentchild">child</termref>
+elements (no character data), optionally separated by
+white space (characters matching the nonterminal
+<nt def="NT-S">S</nt>).
+</termdef>
+In this case, the
+constraint includes a content model, a simple grammar governing
+the allowed types of the child
+elements and the order in which they are allowed to appear.
+The grammar is built on
+content particles (<nt def="NT-cp">cp</nt>s), which consist of names,
+choice lists of content particles, or
+sequence lists of content particles:
+<scrap lang="ebnf">
+<head>Element-content Models</head>
+<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
+<prod id="NT-children"><lhs>children</lhs>
+<rhs>(<nt def="NT-choice">choice</nt>
+| <nt def="NT-seq">seq</nt>)
+('?' | '*' | '+')?</rhs></prod>
+<prod id="NT-cp"><lhs>cp</lhs>
+<rhs>(<nt def="NT-Name">Name</nt>
+| <nt def="NT-choice">choice</nt>
+| <nt def="NT-seq">seq</nt>)
+('?' | '*' | '+')?</rhs></prod>
+<prod id="NT-choice"><lhs>choice</lhs>
+<rhs>'(' <nt def="NT-S">S</nt>? cp
+( <nt def="NT-S">S</nt>? '|' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> )*
+<nt def="NT-S">S</nt>? ')'</rhs>
+<vc def="vc-PEinGroup"/></prod>
+<prod id="NT-seq"><lhs>seq</lhs>
+<rhs>'(' <nt def="NT-S">S</nt>? cp
+( <nt def="NT-S">S</nt>? ',' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> )*
+<nt def="NT-S">S</nt>? ')'</rhs>
+<vc def="vc-PEinGroup"/></prod>
+
+</prodgroup>
+</scrap>
+where each <nt def="NT-Name">Name</nt> is the type of an element which may
+appear as a <termref def="dt-parentchild">child</termref>.
+Any content
+particle in a choice list may appear in the <termref def="dt-elemcontent">element content</termref> at the location where
+the choice list appears in the grammar;
+content particles occurring in a sequence list must each
+appear in the <termref def="dt-elemcontent">element content</termref> in the
+order given in the list.
+The optional character following a name or list governs
+whether the element or the content particles in the list may occur one
+or more (<code>+</code>), zero or more (<code>*</code>), or zero or
+one times (<code>?</code>).
+The absence of such an operator means that the element or content particle
+must appear exactly once.
+This syntax
+and meaning are identical to those used in the productions in this
+specification.</p>
+<p>
+The content of an element matches a content model if and only if it is
+possible to trace out a path through the content model, obeying the
+sequence, choice, and repetition operators and matching each element in
+the content against an element type in the content model. <termref def="dt-compat">For compatibility</termref>, it is an error
+if an element in the document can
+match more than one occurrence of an element type in the content model.
+For more information, see <specref ref="determinism"/>.
+<!-- appendix <specref ref="determinism"/>. -->
+<!-- appendix on deterministic content models. -->
+</p>
+<vcnote id="vc-PEinGroup">
+<head>Proper Group/PE Nesting</head>
+<p>Parameter-entity
+<termref def="dt-repltext">replacement text</termref> must be properly nested
+with parenthetized groups.
+That is to say, if either of the opening or closing parentheses
+in a <nt def="NT-choice">choice</nt>, <nt def="NT-seq">seq</nt>, or
+<nt def="NT-Mixed">Mixed</nt> construct
+is contained in the replacement text for a
+<termref def="dt-PERef">parameter entity</termref>,
+both must be contained in the same replacement text.</p>
+<p><termref def="dt-interop">For interoperability</termref>,
+if a parameter-entity reference appears in a
+<nt def="NT-choice">choice</nt>, <nt def="NT-seq">seq</nt>, or
+<nt def="NT-Mixed">Mixed</nt> construct, its replacement text
+should not be empty, and
+neither the first nor last non-blank
+character of the replacement text should be a connector
+(<code>|</code> or <code>,</code>).
+</p>
+</vcnote>
+<p>Examples of element-content models:
+<eg>&lt;!ELEMENT spec (front, body, back?)&gt;
+&lt;!ELEMENT div1 (head, (p | list | note)*, div2*)&gt;
+&lt;!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*&gt;</eg></p>
+</div3>
+
+<div3 id="sec-mixed-content">
+<head>Mixed Content</head>
+
+<p><termdef id="dt-mixed" term="Mixed Content">An element
+<termref def="dt-stag">type</termref> has
+<term>mixed content</term> when elements of that type may contain
+character data, optionally interspersed with
+<termref def="dt-parentchild">child</termref> elements.</termdef>
+In this case, the types of the child elements
+may be constrained, but not their order or their number of occurrences:
+<scrap lang="ebnf">
+<head>Mixed-content Declaration</head>
+<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
+<prod id="NT-Mixed"><lhs>Mixed</lhs>
+<rhs>'(' <nt def="NT-S">S</nt>?
+'#PCDATA'
+(<nt def="NT-S">S</nt>?
+'|'
+<nt def="NT-S">S</nt>?
+<nt def="NT-Name">Name</nt>)*
+<nt def="NT-S">S</nt>?
+')*' </rhs>
+<rhs>| '(' <nt def="NT-S">S</nt>? '#PCDATA' <nt def="NT-S">S</nt>? ')'
+</rhs><vc def="vc-PEinGroup"/>
+<vc def="vc-MixedChildrenUnique"/>
+</prod>
+
+</prodgroup>
+</scrap>
+where the <nt def="NT-Name">Name</nt>s give the types of elements
+that may appear as children.
+</p>
+<vcnote id="vc-MixedChildrenUnique">
+<head>No Duplicate Types</head>
+<p>The same name must not appear more than once in a single mixed-content
+declaration.
+</p></vcnote>
+<p>Examples of mixed content declarations:
+<eg>&lt;!ELEMENT p (#PCDATA|a|ul|b|i|em)*&gt;
+&lt;!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* &gt;
+&lt;!ELEMENT b (#PCDATA)&gt;</eg></p>
+</div3>
+</div2>
+
+<div2 id="attdecls">
+<head>Attribute-List Declarations</head>
+
+<p><termref def="dt-attr">Attributes</termref> are used to associate
+name-value pairs with <termref def="dt-element">elements</termref>.
+Attribute specifications may appear only within <termref def="dt-stag">start-tags</termref>
+and <termref def="dt-eetag">empty-element tags</termref>;
+thus, the productions used to
+recognize them appear in <specref ref="sec-starttags"/>.
+Attribute-list
+declarations may be used:
+<ulist>
+<item><p>To define the set of attributes pertaining to a given
+element type.</p></item>
+<item><p>To establish type constraints for these
+attributes.</p></item>
+<item><p>To provide <termref def="dt-default">default values</termref>
+for attributes.</p></item>
+</ulist>
+</p>
+<p><termdef id="dt-attdecl" term="Attribute-List Declaration">
+<term>Attribute-list declarations</term> specify the name, data type, and default
+value (if any) of each attribute associated with a given element type:
+<scrap lang="ebnf">
+<head>Attribute-list Declaration</head>
+<prod id="NT-AttlistDecl"><lhs>AttlistDecl</lhs>
+<rhs>'&lt;!ATTLIST' <nt def="NT-S">S</nt>
+<nt def="NT-Name">Name</nt>
+<nt def="NT-AttDef">AttDef</nt>*
+<nt def="NT-S">S</nt>? '&gt;'</rhs>
+</prod>
+<prod id="NT-AttDef"><lhs>AttDef</lhs>
+<rhs><nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt>
+<nt def="NT-S">S</nt> <nt def="NT-AttType">AttType</nt>
+<nt def="NT-S">S</nt> <nt def="NT-DefaultDecl">DefaultDecl</nt></rhs>
+</prod>
+</scrap>
+The <nt def="NT-Name">Name</nt> in the
+<nt def="NT-AttlistDecl">AttlistDecl</nt> rule is the type of an element. At
+user option, an XML processor may issue a warning if attributes are
+declared for an element type not itself declared, but this is not an
+error. The <nt def="NT-Name">Name</nt> in the
+<nt def="NT-AttDef">AttDef</nt> rule is
+the name of the attribute.</termdef></p>
+<p>
+When more than one <nt def="NT-AttlistDecl">AttlistDecl</nt> is provided for a
+given element type, the contents of all those provided are merged. When
+more than one definition is provided for the same attribute of a
+given element type, the first declaration is binding and later
+declarations are ignored.
+<termref def="dt-interop">For interoperability,</termref> writers of DTDs
+may choose to provide at most one attribute-list declaration
+for a given element type, at most one attribute definition
+for a given attribute name, and at least one attribute definition
+in each attribute-list declaration.
+For interoperability, an XML processor may at user option
+issue a warning when more than one attribute-list declaration is
+provided for a given element type, or more than one attribute definition
+is provided
+for a given attribute, but this is not an error.
+</p>
+
+<div3 id="sec-attribute-types">
+<head>Attribute Types</head>
+
+<p>XML attribute types are of three kinds: a string type, a
+set of tokenized types, and enumerated types. The string type may take
+any literal string as a value; the tokenized types have varying lexical
+and semantic constraints, as noted:
+<scrap lang="ebnf">
+<head>Attribute Types</head>
+<prodgroup pcw4="14" pcw5="11.5">
+<prod id="NT-AttType"><lhs>AttType</lhs>
+<rhs><nt def="NT-StringType">StringType</nt>
+| <nt def="NT-TokenizedType">TokenizedType</nt>
+| <nt def="NT-EnumeratedType">EnumeratedType</nt>
+</rhs>
+</prod>
+<prod id="NT-StringType"><lhs>StringType</lhs>
+<rhs>'CDATA'</rhs>
+</prod>
+<prod id="NT-TokenizedType"><lhs>TokenizedType</lhs>
+<rhs>'ID'</rhs>
+<vc def="id"/>
+<vc def="one-id-per-el"/>
+<vc def="id-default"/>
+<rhs>| 'IDREF'</rhs>
+<vc def="idref"/>
+<rhs>| 'IDREFS'</rhs>
+<vc def="idref"/>
+<rhs>| 'ENTITY'</rhs>
+<vc def="entname"/>
+<rhs>| 'ENTITIES'</rhs>
+<vc def="entname"/>
+<rhs>| 'NMTOKEN'</rhs>
+<vc def="nmtok"/>
+<rhs>| 'NMTOKENS'</rhs>
+<vc def="nmtok"/></prod>
+</prodgroup>
+</scrap>
+</p>
+<vcnote id="id">
+<head>ID</head>
+<p>
+Values of type <kw>ID</kw> must match the
+<nt def="NT-Name">Name</nt> production.
+A name must not appear more than once in
+an XML document as a value of this type; i.e., ID values must uniquely
+identify the elements which bear them.
+</p>
+</vcnote>
+<vcnote id="one-id-per-el">
+<head>One ID per Element Type</head>
+<p>No element type may have more than one ID attribute specified.</p>
+</vcnote>
+<vcnote id="id-default">
+<head>ID Attribute Default</head>
+<p>An ID attribute must have a declared default of <kw>#IMPLIED</kw> or
+<kw>#REQUIRED</kw>.</p>
+</vcnote>
+<vcnote id="idref">
+<head>IDREF</head>
+<p>
+Values of type <kw>IDREF</kw> must match
+the <nt def="NT-Name">Name</nt> production, and
+values of type <kw>IDREFS</kw> must match
+<nt def="NT-Names">Names</nt>;
+each <nt def="NT-Name">Name</nt> must match the value of an ID attribute on
+some element in the XML document; i.e. <kw>IDREF</kw> values must
+match the value of some ID attribute.
+</p>
+</vcnote>
+<vcnote id="entname">
+<head>Entity Name</head>
+<p>
+Values of type <kw>ENTITY</kw>
+must match the <nt def="NT-Name">Name</nt> production,
+values of type <kw>ENTITIES</kw> must match
+<nt def="NT-Names">Names</nt>;
+each <nt def="NT-Name">Name</nt> must
+match the
+name of an <termref def="dt-unparsed">unparsed entity</termref> declared in the
+<termref def="dt-doctype">DTD</termref>.
+</p>
+</vcnote>
+<vcnote id="nmtok">
+<head>Name Token</head>
+<p>
+Values of type <kw>NMTOKEN</kw> must match the
+<nt def="NT-Nmtoken">Nmtoken</nt> production;
+values of type <kw>NMTOKENS</kw> must
+match <termref def="NT-Nmtokens">Nmtokens</termref>.
+</p>
+</vcnote>
+<!-- why?
+<p>The XML processor must normalize attribute values before
+passing them to the application, as described in
+<specref ref="AVNormalize"/>.</p>-->
+<p><termdef id="dt-enumerated" term="Enumerated Attribute Values"><term>Enumerated attributes</term> can take one
+of a list of values provided in the declaration</termdef>. There are two
+kinds of enumerated types:
+<scrap lang="ebnf">
+<head>Enumerated Attribute Types</head>
+<prod id="NT-EnumeratedType"><lhs>EnumeratedType</lhs>
+<rhs><nt def="NT-NotationType">NotationType</nt>
+| <nt def="NT-Enumeration">Enumeration</nt>
+</rhs></prod>
+<prod id="NT-NotationType"><lhs>NotationType</lhs>
+<rhs>'NOTATION'
+<nt def="NT-S">S</nt>
+'('
+<nt def="NT-S">S</nt>?
+<nt def="NT-Name">Name</nt>
+(<nt def="NT-S">S</nt>? '|' <nt def="NT-S">S</nt>?
+<nt def="NT-Name">Name</nt>)*
+<nt def="NT-S">S</nt>? ')'
+</rhs>
+<vc def="notatn"/></prod>
+<prod id="NT-Enumeration"><lhs>Enumeration</lhs>
+<rhs>'(' <nt def="NT-S">S</nt>?
+<nt def="NT-Nmtoken">Nmtoken</nt>
+(<nt def="NT-S">S</nt>? '|'
+<nt def="NT-S">S</nt>?
+<nt def="NT-Nmtoken">Nmtoken</nt>)*
+<nt def="NT-S">S</nt>?
+')'</rhs>
+<vc def="enum"/></prod>
+</scrap>
+A <kw>NOTATION</kw> attribute identifies a
+<termref def="dt-notation">notation</termref>, declared in the
+DTD with associated system and/or public identifiers, to
+be used in interpreting the element to which the attribute
+is attached.
+</p>
+
+<vcnote id="notatn">
+<head>Notation Attributes</head>
+<p>
+Values of this type must match
+one of the <titleref href="Notations">notation</titleref> names included in
+the declaration; all notation names in the declaration must
+be declared.
+</p>
+</vcnote>
+<vcnote id="enum">
+<head>Enumeration</head>
+<p>
+Values of this type
+must match one of the <nt def="NT-Nmtoken">Nmtoken</nt> tokens in the
+declaration.
+</p>
+</vcnote>
+<p><termref def="dt-interop">For interoperability,</termref> the same
+<nt def="NT-Nmtoken">Nmtoken</nt> should not occur more than once in the
+enumerated attribute types of a single element type.
+</p>
+</div3>
+
+<div3 id="sec-attr-defaults">
+<head>Attribute Defaults</head>
+
+<p>An <termref def="dt-attdecl">attribute declaration</termref> provides
+information on whether
+the attribute's presence is required, and if not, how an XML processor should
+react if a declared attribute is absent in a document.
+<scrap lang="ebnf">
+<head>Attribute Defaults</head>
+<prodgroup pcw4="14" pcw5="11.5">
+<prod id="NT-DefaultDecl"><lhs>DefaultDecl</lhs>
+<rhs>'#REQUIRED'
+|&nbsp;'#IMPLIED' </rhs>
+<rhs>| (('#FIXED' S)? <nt def="NT-AttValue">AttValue</nt>)</rhs>
+<vc def="RequiredAttr"/>
+<vc def="defattrvalid"/>
+<wfc def="CleanAttrVals"/>
+<vc def="FixedAttr"/>
+</prod>
+</prodgroup>
+</scrap>
+
+</p>
+<p>In an attribute declaration, <kw>#REQUIRED</kw> means that the
+attribute must always be provided, <kw>#IMPLIED</kw> that no default
+value is provided.
+<!-- not any more!!
+<kw>#IMPLIED</kw> means that if the attribute is omitted
+from an element of this type,
+the XML processor must inform the application
+that no value was specified; no constraint is placed on the behavior
+of the application. -->
+<termdef id="dt-default" term="Attribute Default">If the
+declaration
+is neither <kw>#REQUIRED</kw> nor <kw>#IMPLIED</kw>, then the
+<nt def="NT-AttValue">AttValue</nt> value contains the declared
+<term>default</term> value; the <kw>#FIXED</kw> keyword states that
+the attribute must always have the default value.
+If a default value
+is declared, when an XML processor encounters an omitted attribute, it
+is to behave as though the attribute were present with
+the declared default value.</termdef></p>
+<vcnote id="RequiredAttr">
+<head>Required Attribute</head>
+<p>If the default declaration is the keyword <kw>#REQUIRED</kw>, then
+the attribute must be specified for
+all elements of the type in the attribute-list declaration.
+</p></vcnote>
+<vcnote id="defattrvalid">
+<head>Attribute Default Legal</head>
+<p>
+The declared
+default value must meet the lexical constraints of the declared attribute type.
+</p>
+</vcnote>
+<vcnote id="FixedAttr">
+<head>Fixed Attribute Default</head>
+<p>If an attribute has a default value declared with the
+<kw>#FIXED</kw> keyword, instances of that attribute must
+match the default value.
+</p></vcnote>
+
+<p>Examples of attribute-list declarations:
+<eg>&lt;!ATTLIST termdef
+ id ID #REQUIRED
+ name CDATA #IMPLIED&gt;
+&lt;!ATTLIST list
+ type (bullets|ordered|glossary) "ordered"&gt;
+&lt;!ATTLIST form
+ method CDATA #FIXED "POST"&gt;</eg></p>
+</div3>
+<div3 id="AVNormalize">
+<head>Attribute-Value Normalization</head>
+<p>Before the value of an attribute is passed to the application
+or checked for validity, the
+XML processor must normalize it as follows:
+<ulist>
+<item><p>a character reference is processed by appending the referenced
+character to the attribute value</p></item>
+<item><p>an entity reference is processed by recursively processing the
+replacement text of the entity</p></item>
+<item><p>a whitespace character (#x20, #xD, #xA, #x9) is processed by
+appending #x20 to the normalized value, except that only a single #x20
+is appended for a "#xD#xA" sequence that is part of an external
+parsed entity or the literal entity value of an internal parsed
+entity</p></item>
+<item><p>other characters are processed by appending them to the normalized
+value</p>
+</item></ulist>
+</p>
+<p>If the declared value is not CDATA, then the XML processor must
+further process the normalized attribute value by discarding any
+leading and trailing space (#x20) characters, and by replacing
+sequences of space (#x20) characters by a single space (#x20)
+character.</p>
+<p>
+All attributes for which no declaration has been read should be treated
+by a non-validating parser as if declared
+<kw>CDATA</kw>.
+</p>
+</div3>
+</div2>
+<div2 id="sec-condition-sect">
+<head>Conditional Sections</head>
+<p><termdef id="dt-cond-section" term="conditional section">
+<term>Conditional sections</term> are portions of the
+<termref def="dt-doctype">document type declaration external subset</termref>
+which are
+included in, or excluded from, the logical structure of the DTD based on
+the keyword which governs them.</termdef>
+<scrap lang="ebnf">
+<head>Conditional Section</head>
+<prodgroup pcw2="9" pcw4="14.5">
+<prod id="NT-conditionalSect"><lhs>conditionalSect</lhs>
+<rhs><nt def="NT-includeSect">includeSect</nt>
+| <nt def="NT-ignoreSect">ignoreSect</nt>
+</rhs>
+</prod>
+<prod id="NT-includeSect"><lhs>includeSect</lhs>
+<rhs>'&lt;![' S? 'INCLUDE' S? '['
+
+<nt def="NT-extSubsetDecl">extSubsetDecl</nt>
+']]&gt;'
+</rhs>
+</prod>
+<prod id="NT-ignoreSect"><lhs>ignoreSect</lhs>
+<rhs>'&lt;![' S? 'IGNORE' S? '['
+<nt def="NT-ignoreSectContents">ignoreSectContents</nt>*
+']]&gt;'</rhs>
+</prod>
+
+<prod id="NT-ignoreSectContents"><lhs>ignoreSectContents</lhs>
+<rhs><nt def="NT-Ignore">Ignore</nt>
+('&lt;![' <nt def="NT-ignoreSectContents">ignoreSectContents</nt> ']]&gt;'
+<nt def="NT-Ignore">Ignore</nt>)*</rhs></prod>
+<prod id="NT-Ignore"><lhs>Ignore</lhs>
+<rhs><nt def="NT-Char">Char</nt>* -
+(<nt def="NT-Char">Char</nt>* ('&lt;![' | ']]&gt;')
+<nt def="NT-Char">Char</nt>*)
+</rhs></prod>
+
+</prodgroup>
+</scrap>
+</p>
+<p>Like the internal and external DTD subsets, a conditional section
+may contain one or more complete declarations,
+comments, processing instructions,
+or nested conditional sections, intermingled with white space.
+</p>
+<p>If the keyword of the
+conditional section is <kw>INCLUDE</kw>, then the contents of the conditional
+section are part of the DTD.
+If the keyword of the conditional
+section is <kw>IGNORE</kw>, then the contents of the conditional section are
+not logically part of the DTD.
+Note that for reliable parsing, the contents of even ignored
+conditional sections must be read in order to
+detect nested conditional sections and ensure that the end of the
+outermost (ignored) conditional section is properly detected.
+If a conditional section with a
+keyword of <kw>INCLUDE</kw> occurs within a larger conditional
+section with a keyword of <kw>IGNORE</kw>, both the outer and the
+inner conditional sections are ignored.</p>
+<p>If the keyword of the conditional section is a
+parameter-entity reference, the parameter entity must be replaced by its
+content before the processor decides whether to
+include or ignore the conditional section.</p>
+<p>An example:
+<eg>&lt;!ENTITY % draft 'INCLUDE' &gt;
+&lt;!ENTITY % final 'IGNORE' &gt;
+
+&lt;![%draft;[
+&lt;!ELEMENT book (comments*, title, body, supplements?)&gt;
+]]&gt;
+&lt;![%final;[
+&lt;!ELEMENT book (title, body, supplements?)&gt;
+]]&gt;
+</eg>
+</p>
+</div2>
+
+
+<!--
+<div2 id='sec-pass-to-app'>
+<head>XML Processor Treatment of Logical Structure</head>
+<p>When an XML processor encounters a start-tag, it must make
+at least the following information available to the application:
+<ulist>
+<item>
+<p>the element type's generic identifier</p>
+</item>
+<item>
+<p>the names of attributes known to apply to this element type
+(validating processors must make available names of all attributes
+declared for the element type; non-validating processors must
+make available at least the names of the attributes for which
+values are specified.
+</p>
+</item>
+</ulist>
+</p>
+</div2>
+-->
+
+</div1>
+<!-- &Entities; -->
+
+<div1 id="sec-physical-struct">
+<head>Physical Structures</head>
+
+<p><termdef id="dt-entity" term="Entity">An XML document may consist
+of one or many storage units. These are called
+<term>entities</term>; they all have <term>content</term> and are all
+(except for the document entity, see below, and
+the <termref def="dt-doctype">external DTD subset</termref>)
+identified by <term>name</term>.
+</termdef>
+Each XML document has one entity
+called the <termref def="dt-docent">document entity</termref>, which serves
+as the starting point for the <termref def="dt-xml-proc">XML
+processor</termref> and may contain the whole document.</p>
+<p>Entities may be either parsed or unparsed.
+<termdef id="dt-parsedent" term="Text Entity">A <term>parsed entity's</term>
+contents are referred to as its
+<termref def="dt-repltext">replacement text</termref>;
+this <termref def="dt-text">text</termref> is considered an
+integral part of the document.</termdef></p>
+
+<p><termdef id="dt-unparsed" term="Unparsed Entity">An
+<term>unparsed entity</term>
+is a resource whose contents may or may not be
+<termref def="dt-text">text</termref>, and if text, may not be XML.
+Each unparsed entity
+has an associated <termref def="dt-notation">notation</termref>, identified by name.
+Beyond a requirement
+that an XML processor make the identifiers for the entity and
+notation available to the application,
+XML places no constraints on the contents of unparsed entities.</termdef>
+</p>
+<p>
+Parsed entities are invoked by name using entity references;
+unparsed entities by name, given in the value of <kw>ENTITY</kw>
+or <kw>ENTITIES</kw>
+attributes.</p>
+<p><termdef id="gen-entity" term="general entity"><term>General entities</term>
+are entities for use within the document content.
+In this specification, general entities are sometimes referred
+to with the unqualified term <emph>entity</emph> when this leads
+to no ambiguity.</termdef>
+<termdef id="dt-PE" term="Parameter entity">Parameter entities
+are parsed entities for use within the DTD.</termdef>
+These two types of entities use different forms of reference and
+are recognized in different contexts.
+Furthermore, they occupy different namespaces; a parameter entity and
+a general entity with the same name are two distinct entities.
+</p>
+
+<div2 id="sec-references">
+<head>Character and Entity References</head>
+<p><termdef id="dt-charref" term="Character Reference">
+A <term>character reference</term> refers to a specific character in the
+ISO/IEC 10646 character set, for example one not directly accessible from
+available input devices.
+<scrap lang="ebnf">
+<head>Character Reference</head>
+<prod id="NT-CharRef"><lhs>CharRef</lhs>
+<rhs>'&amp;#' [0-9]+ ';' </rhs>
+<rhs>| '&hcro;' [0-9a-fA-F]+ ';'</rhs>
+<wfc def="wf-Legalchar"/>
+</prod>
+</scrap>
+<wfcnote id="wf-Legalchar">
+<head>Legal Character</head>
+<p>Characters referred to using character references must
+match the production for
+<termref def="NT-Char">Char</termref>.</p>
+</wfcnote>
+If the character reference begins with "<code>&amp;#x</code>", the digits and
+letters up to the terminating <code>;</code> provide a hexadecimal
+representation of the character's code point in ISO/IEC 10646.
+If it begins just with "<code>&amp;#</code>", the digits up to the terminating
+<code>;</code> provide a decimal representation of the character's
+code point.
+</termdef>
+</p>
+<p><termdef id="dt-entref" term="Entity Reference">An <term>entity
+reference</term> refers to the content of a named entity.</termdef>
+<termdef id="dt-GERef" term="General Entity Reference">References to
+parsed general entities
+use ampersand (<code>&amp;</code>) and semicolon (<code>;</code>) as
+delimiters.</termdef>
+<termdef id="dt-PERef" term="Parameter-entity reference">
+<term>Parameter-entity references</term> use percent-sign (<code>%</code>) and
+semicolon
+(<code>;</code>) as delimiters.</termdef>
+</p>
+<scrap lang="ebnf">
+<head>Entity Reference</head>
+<prod id="NT-Reference"><lhs>Reference</lhs>
+<rhs><nt def="NT-EntityRef">EntityRef</nt>
+| <nt def="NT-CharRef">CharRef</nt></rhs></prod>
+<prod id="NT-EntityRef"><lhs>EntityRef</lhs>
+<rhs>'&amp;' <nt def="NT-Name">Name</nt> ';'</rhs>
+<wfc def="wf-entdeclared"/>
+<vc def="vc-entdeclared"/>
+<wfc def="textent"/>
+<wfc def="norecursion"/>
+</prod>
+<prod id="NT-PEReference"><lhs>PEReference</lhs>
+<rhs>'%' <nt def="NT-Name">Name</nt> ';'</rhs>
+<vc def="vc-entdeclared"/>
+<wfc def="norecursion"/>
+<wfc def="indtd"/>
+</prod>
+</scrap>
+
+<wfcnote id="wf-entdeclared">
+<head>Entity Declared</head>
+<p>In a document without any DTD, a document with only an internal
+DTD subset which contains no parameter entity references, or a document with
+"<code>standalone='yes'</code>",
+the <nt def="NT-Name">Name</nt> given in the entity reference must
+<termref def="dt-match">match</termref> that in an
+<titleref href="sec-entity-decl">entity declaration</titleref>, except that
+well-formed documents need not declare
+any of the following entities: &magicents;.
+The declaration of a parameter entity must precede any reference to it.
+Similarly, the declaration of a general entity must precede any
+reference to it which appears in a default value in an attribute-list
+declaration.</p>
+<p>Note that if entities are declared in the external subset or in
+external parameter entities, a non-validating processor is
+<titleref href="include-if-valid">not obligated to</titleref> read
+and process their declarations; for such documents, the rule that
+an entity must be declared is a well-formedness constraint only
+if <titleref href="sec-rmd">standalone='yes'</titleref>.</p>
+</wfcnote>
+<vcnote id="vc-entdeclared">
+<head>Entity Declared</head>
+<p>In a document with an external subset or external parameter
+entities with "<code>standalone='no'</code>",
+the <nt def="NT-Name">Name</nt> given in the entity reference must <termref def="dt-match">match</termref> that in an
+<titleref href="sec-entity-decl">entity declaration</titleref>.
+For interoperability, valid documents should declare the entities
+&magicents;, in the form
+specified in <specref ref="sec-predefined-ent"/>.
+The declaration of a parameter entity must precede any reference to it.
+Similarly, the declaration of a general entity must precede any
+reference to it which appears in a default value in an attribute-list
+declaration.</p>
+</vcnote>
+<!-- FINAL EDIT: is this duplication too clumsy? -->
+<wfcnote id="textent">
+<head>Parsed Entity</head>
+<p>
+An entity reference must not contain the name of an <termref def="dt-unparsed">unparsed entity</termref>. Unparsed entities may be referred
+to only in <termref def="dt-attrval">attribute values</termref> declared to
+be of type <kw>ENTITY</kw> or <kw>ENTITIES</kw>.
+</p>
+</wfcnote>
+<wfcnote id="norecursion">
+<head>No Recursion</head>
+<p>
+A parsed entity must not contain a recursive reference to itself,
+either directly or indirectly.
+</p>
+</wfcnote>
+<wfcnote id="indtd">
+<head>In DTD</head>
+<p>
+Parameter-entity references may only appear in the
+<termref def="dt-doctype">DTD</termref>.
+</p>
+</wfcnote>
+<p>Examples of character and entity references:
+<eg>Type &lt;key&gt;less-than&lt;/key&gt; (&hcro;3C;) to save options.
+This document was prepared on &amp;docdate; and
+is classified &amp;security-level;.</eg></p>
+<p>Example of a parameter-entity reference:
+<eg><![CDATA[<!-- declare the parameter entity "ISOLat2"... -->
+<!ENTITY % ISOLat2
+ SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
+<!-- ... now reference it. -->
+%ISOLat2;]]></eg></p>
+</div2>
+
+<div2 id="sec-entity-decl">
+<head>Entity Declarations</head>
+
+<p><termdef id="dt-entdecl" term="entity declaration">
+Entities are declared thus:
+<scrap lang="ebnf">
+<head>Entity Declaration</head>
+<prodgroup pcw2="5" pcw4="18.5">
+<prod id="NT-EntityDecl"><lhs>EntityDecl</lhs>
+<rhs><nt def="NT-GEDecl">GEDecl</nt><!--</rhs><com>General entities</com>
+<rhs>--> | <nt def="NT-PEDecl">PEDecl</nt></rhs>
+<!--<com>Parameter entities</com>-->
+</prod>
+<prod id="NT-GEDecl"><lhs>GEDecl</lhs>
+<rhs>'&lt;!ENTITY' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt>
+<nt def="NT-S">S</nt> <nt def="NT-EntityDef">EntityDef</nt>
+<nt def="NT-S">S</nt>? '&gt;'</rhs>
+</prod>
+<prod id="NT-PEDecl"><lhs>PEDecl</lhs>
+<rhs>'&lt;!ENTITY' <nt def="NT-S">S</nt> '%' <nt def="NT-S">S</nt>
+<nt def="NT-Name">Name</nt> <nt def="NT-S">S</nt>
+<nt def="NT-PEDef">PEDef</nt> <nt def="NT-S">S</nt>? '&gt;'</rhs>
+<!--<com>Parameter entities</com>-->
+</prod>
+<prod id="NT-EntityDef"><lhs>EntityDef</lhs>
+<rhs><nt def="NT-EntityValue">EntityValue</nt>
+<!--</rhs>
+<rhs>-->| (<nt def="NT-ExternalID">ExternalID</nt>
+<nt def="NT-NDataDecl">NDataDecl</nt>?)</rhs>
+<!-- <nt def='NT-ExternalDef'>ExternalDef</nt></rhs> -->
+</prod>
+<!-- FINAL EDIT: what happened to WFs here? -->
+<prod id="NT-PEDef"><lhs>PEDef</lhs>
+<rhs><nt def="NT-EntityValue">EntityValue</nt>
+| <nt def="NT-ExternalID">ExternalID</nt></rhs></prod>
+</prodgroup>
+</scrap>
+The <nt def="NT-Name">Name</nt> identifies the entity in an
+<termref def="dt-entref">entity reference</termref> or, in the case of an
+unparsed entity, in the value of an <kw>ENTITY</kw> or <kw>ENTITIES</kw>
+attribute.
+If the same entity is declared more than once, the first declaration
+encountered is binding; at user option, an XML processor may issue a
+warning if entities are declared multiple times.</termdef>
+</p>
+
+<div3 id="sec-internal-ent">
+<head>Internal Entities</head>
+
+<p><termdef id="dt-internent" term="Internal Entity Replacement Text">If
+the entity definition is an
+<nt def="NT-EntityValue">EntityValue</nt>,
+the defined entity is called an <term>internal entity</term>.
+There is no separate physical
+storage object, and the content of the entity is given in the
+declaration. </termdef>
+Note that some processing of entity and character references in the
+<termref def="dt-litentval">literal entity value</termref> may be required to
+produce the correct <termref def="dt-repltext">replacement
+text</termref>: see <specref ref="intern-replacement"/>.
+</p>
+<p>An internal entity is a <termref def="dt-parsedent">parsed
+entity</termref>.</p>
+<p>Example of an internal entity declaration:
+<eg>&lt;!ENTITY Pub-Status "This is a pre-release of the
+ specification."&gt;</eg></p>
+</div3>
+
+<div3 id="sec-external-ent">
+<head>External Entities</head>
+
+<p><termdef id="dt-extent" term="External Entity">If the entity is not
+internal, it is an <term>external
+entity</term>, declared as follows:
+<scrap lang="ebnf">
+<head>External Entity Declaration</head>
+<!--
+<prod id='NT-ExternalDef'><lhs>ExternalDef</lhs>
+<rhs></prod> -->
+<prod id="NT-ExternalID"><lhs>ExternalID</lhs>
+<rhs>'SYSTEM' <nt def="NT-S">S</nt>
+<nt def="NT-SystemLiteral">SystemLiteral</nt></rhs>
+<rhs>| 'PUBLIC' <nt def="NT-S">S</nt>
+<nt def="NT-PubidLiteral">PubidLiteral</nt>
+<nt def="NT-S">S</nt>
+<nt def="NT-SystemLiteral">SystemLiteral</nt>
+</rhs>
+</prod>
+<prod id="NT-NDataDecl"><lhs>NDataDecl</lhs>
+<rhs><nt def="NT-S">S</nt> 'NDATA' <nt def="NT-S">S</nt>
+<nt def="NT-Name">Name</nt></rhs>
+<vc def="not-declared"/></prod>
+</scrap>
+If the <nt def="NT-NDataDecl">NDataDecl</nt> is present, this is a
+general <termref def="dt-unparsed">unparsed
+entity</termref>; otherwise it is a parsed entity.</termdef></p>
+<vcnote id="not-declared">
+<head>Notation Declared</head>
+<p>
+The <nt def="NT-Name">Name</nt> must match the declared name of a
+<termref def="dt-notation">notation</termref>.
+</p>
+</vcnote>
+<p><termdef id="dt-sysid" term="System Identifier">The
+<nt def="NT-SystemLiteral">SystemLiteral</nt>
+is called the entity's <term>system identifier</term>. It is a URI,
+which may be used to retrieve the entity.</termdef>
+Note that the hash mark (<code>#</code>) and fragment identifier
+frequently used with URIs are not, formally, part of the URI itself;
+an XML processor may signal an error if a fragment identifier is
+given as part of a system identifier.
+Unless otherwise provided by information outside the scope of this
+specification (e.g. a special XML element type defined by a particular
+DTD, or a processing instruction defined by a particular application
+specification), relative URIs are relative to the location of the
+resource within which the entity declaration occurs.
+A URI might thus be relative to the
+<termref def="dt-docent">document entity</termref>, to the entity
+containing the <termref def="dt-doctype">external DTD subset</termref>,
+or to some other <termref def="dt-extent">external parameter entity</termref>.
+</p>
+<p>An XML processor should handle a non-ASCII character in a URI by
+representing the character in UTF-8 as one or more bytes, and then
+escaping these bytes with the URI escaping mechanism (i.e., by
+converting each byte to %HH, where HH is the hexadecimal notation of the
+byte value).</p>
+<p><termdef id="dt-pubid" term="Public identifier">
+In addition to a system identifier, an external identifier may
+include a <term>public identifier</term>.</termdef>
+An XML processor attempting to retrieve the entity's content may use the public
+identifier to try to generate an alternative URI. If the processor
+is unable to do so, it must use the URI specified in the system
+literal. Before a match is attempted, all strings
+of white space in the public identifier must be normalized to single space characters (#x20),
+and leading and trailing white space must be removed.</p>
+<p>Examples of external entity declarations:
+<eg>&lt;!ENTITY open-hatch
+ SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"&gt;
+&lt;!ENTITY open-hatch
+ PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
+ "http://www.textuality.com/boilerplate/OpenHatch.xml"&gt;
+&lt;!ENTITY hatch-pic
+ SYSTEM "../grafix/OpenHatch.gif"
+ NDATA gif &gt;</eg></p>
+</div3>
+
+</div2>
+
+<div2 id="TextEntities">
+<head>Parsed Entities</head>
+<div3 id="sec-TextDecl">
+<head>The Text Declaration</head>
+<p>External parsed entities may each begin with a <term>text
+declaration</term>.
+<scrap lang="ebnf">
+<head>Text Declaration</head>
+<prodgroup pcw4="12.5" pcw5="13">
+<prod id="NT-TextDecl"><lhs>TextDecl</lhs>
+<rhs>&xmlpio;
+<nt def="NT-VersionInfo">VersionInfo</nt>?
+<nt def="NT-EncodingDecl">EncodingDecl</nt>
+<nt def="NT-S">S</nt>? &pic;</rhs>
+</prod>
+</prodgroup>
+</scrap>
+</p>
+<p>The text declaration must be provided literally, not
+by reference to a parsed entity.
+No text declaration may appear at any position other than the beginning of
+an external parsed entity.</p>
+</div3>
+<div3 id="wf-entities">
+<head>Well-Formed Parsed Entities</head>
+<p>The document entity is well-formed if it matches the production labeled
+<nt def="NT-document">document</nt>.
+An external general
+parsed entity is well-formed if it matches the production labeled
+<nt def="NT-extParsedEnt">extParsedEnt</nt>.
+An external parameter
+entity is well-formed if it matches the production labeled
+<nt def="NT-extPE">extPE</nt>.
+<scrap lang="ebnf">
+<head>Well-Formed External Parsed Entity</head>
+<prod id="NT-extParsedEnt"><lhs>extParsedEnt</lhs>
+<rhs><nt def="NT-TextDecl">TextDecl</nt>?
+<nt def="NT-content">content</nt></rhs>
+</prod>
+<prod id="NT-extPE"><lhs>extPE</lhs>
+<rhs><nt def="NT-TextDecl">TextDecl</nt>?
+<nt def="NT-extSubsetDecl">extSubsetDecl</nt></rhs>
+</prod>
+</scrap>
+An internal general parsed entity is well-formed if its replacement text
+matches the production labeled
+<nt def="NT-content">content</nt>.
+All internal parameter entities are well-formed by definition.
+</p>
+<p>A consequence of well-formedness in entities is that the logical
+and physical structures in an XML document are properly nested; no
+<termref def="dt-stag">start-tag</termref>,
+<termref def="dt-etag">end-tag</termref>,
+<termref def="dt-empty">empty-element tag</termref>,
+<termref def="dt-element">element</termref>,
+<termref def="dt-comment">comment</termref>,
+<termref def="dt-pi">processing instruction</termref>,
+<termref def="dt-charref">character
+reference</termref>, or
+<termref def="dt-entref">entity reference</termref>
+can begin in one entity and end in another.</p>
+</div3>
+<div3 id="charencoding">
+<head>Character Encoding in Entities</head>
+
+<p>Each external parsed entity in an XML document may use a different
+encoding for its characters. All XML processors must be able to read
+entities in either UTF-8 or UTF-16.
+
+</p>
+<p>Entities encoded in UTF-16 must
+begin with the Byte Order Mark described by ISO/IEC 10646 Annex E and
+Unicode Appendix B (the ZERO WIDTH NO-BREAK SPACE character, #xFEFF).
+This is an encoding signature, not part of either the markup or the
+character data of the XML document.
+XML processors must be able to use this character to
+differentiate between UTF-8 and UTF-16 encoded documents.</p>
+<p>Although an XML processor is required to read only entities in
+the UTF-8 and UTF-16 encodings, it is recognized that other encodings are
+used around the world, and it may be desired for XML processors
+to read entities that use them.
+Parsed entities which are stored in an encoding other than
+UTF-8 or UTF-16 must begin with a <titleref href="TextDecl">text
+declaration</titleref> containing an encoding declaration:
+<scrap lang="ebnf">
+<head>Encoding Declaration</head>
+<prod id="NT-EncodingDecl"><lhs>EncodingDecl</lhs>
+<rhs><nt def="NT-S">S</nt>
+'encoding' <nt def="NT-Eq">Eq</nt>
+('"' <nt def="NT-EncName">EncName</nt> '"' |
+"'" <nt def="NT-EncName">EncName</nt> "'" )
+</rhs>
+</prod>
+<prod id="NT-EncName"><lhs>EncName</lhs>
+<rhs>[A-Za-z] ([A-Za-z0-9._] | '-')*</rhs>
+<com>Encoding name contains only Latin characters</com>
+</prod>
+</scrap>
+In the <termref def="dt-docent">document entity</termref>, the encoding
+declaration is part of the <termref def="dt-xmldecl">XML declaration</termref>.
+The <nt def="NT-EncName">EncName</nt> is the name of the encoding used.
+</p>
+<!-- FINAL EDIT: check name of IANA and charset names -->
+<p>In an encoding declaration, the values
+"<code>UTF-8</code>",
+"<code>UTF-16</code>",
+"<code>ISO-10646-UCS-2</code>", and
+"<code>ISO-10646-UCS-4</code>" should be
+used for the various encodings and transformations of Unicode /
+ISO/IEC 10646, the values
+"<code>ISO-8859-1</code>",
+"<code>ISO-8859-2</code>", ...
+"<code>ISO-8859-9</code>" should be used for the parts of ISO 8859, and
+the values
+"<code>ISO-2022-JP</code>",
+"<code>Shift_JIS</code>", and
+"<code>EUC-JP</code>"
+should be used for the various encoded forms of JIS X-0208-1997. XML
+processors may recognize other encodings; it is recommended that
+character encodings registered (as <emph>charset</emph>s)
+with the Internet Assigned Numbers
+Authority <bibref ref="IANA"/>, other than those just listed, should be
+referred to
+using their registered names.
+Note that these registered names are defined to be
+case-insensitive, so processors wishing to match against them
+should do so in a case-insensitive
+way.</p>
+<p>In the absence of information provided by an external
+transport protocol (e.g. HTTP or MIME),
+it is an <termref def="dt-error">error</termref> for an entity including
+an encoding declaration to be presented to the XML processor
+in an encoding other than that named in the declaration,
+for an encoding declaration to occur other than at the beginning
+of an external entity, or for
+an entity which begins with neither a Byte Order Mark nor an encoding
+declaration to use an encoding other than UTF-8.
+Note that since ASCII
+is a subset of UTF-8, ordinary ASCII entities do not strictly need
+an encoding declaration.</p>
+
+<p>It is a <termref def="dt-fatal">fatal error</termref> when an XML processor
+encounters an entity with an encoding that it is unable to process.</p>
+<p>Examples of encoding declarations:
+<eg>&lt;?xml encoding='UTF-8'?&gt;
+&lt;?xml encoding='EUC-JP'?&gt;</eg></p>
+</div3>
+</div2>
+<div2 id="entproc">
+<head>XML Processor Treatment of Entities and References</head>
+<p>The table below summarizes the contexts in which character references,
+entity references, and invocations of unparsed entities might appear and the
+required behavior of an <termref def="dt-xml-proc">XML processor</termref> in
+each case.
+The labels in the leftmost column describe the recognition context:
+<glist>
+<gitem><label>Reference in Content</label>
+<def><p>as a reference
+anywhere after the <termref def="dt-stag">start-tag</termref> and
+before the <termref def="dt-etag">end-tag</termref> of an element; corresponds
+to the nonterminal <nt def="NT-content">content</nt>.</p></def>
+</gitem>
+<gitem>
+<label>Reference in Attribute Value</label>
+<def><p>as a reference within either the value of an attribute in a
+<termref def="dt-stag">start-tag</termref>, or a default
+value in an <termref def="dt-attdecl">attribute declaration</termref>;
+corresponds to the nonterminal
+<nt def="NT-AttValue">AttValue</nt>.</p></def></gitem>
+<gitem>
+<label>Occurs as Attribute Value</label>
+<def><p>as a <nt def="NT-Name">Name</nt>, not a reference, appearing either as
+the value of an
+attribute which has been declared as type <kw>ENTITY</kw>, or as one of
+the space-separated tokens in the value of an attribute which has been
+declared as type <kw>ENTITIES</kw>.</p>
+</def></gitem>
+<gitem><label>Reference in Entity Value</label>
+<def><p>as a reference
+within a parameter or internal entity's
+<termref def="dt-litentval">literal entity value</termref> in
+the entity's declaration; corresponds to the nonterminal
+<nt def="NT-EntityValue">EntityValue</nt>.</p></def></gitem>
+<gitem><label>Reference in DTD</label>
+<def><p>as a reference within either the internal or external subsets of the
+<termref def="dt-doctype">DTD</termref>, but outside
+of an <nt def="NT-EntityValue">EntityValue</nt> or
+<nt def="NT-AttValue">AttValue</nt>.</p></def>
+</gitem>
+</glist></p>
+<htable border="1" cellpadding="7" align="center">
+<htbody>
+<tr><td bgcolor="&cellback;" rowspan="2" colspan="1"/>
+<td bgcolor="&cellback;" align="center" valign="bottom" colspan="4">Entity Type</td>
+<td bgcolor="&cellback;" rowspan="2" align="center">Character</td>
+</tr>
+<tr align="center" valign="bottom">
+<td bgcolor="&cellback;">Parameter</td>
+<td bgcolor="&cellback;">Internal
+General</td>
+<td bgcolor="&cellback;">External Parsed
+General</td>
+<td bgcolor="&cellback;">Unparsed</td>
+</tr>
+<tr align="center" valign="middle">
+
+<td bgcolor="&cellback;" align="right">Reference
+in Content</td>
+<td bgcolor="&cellback;"><titleref href="not-recognized">Not recognized</titleref></td>
+<td bgcolor="&cellback;"><titleref href="included">Included</titleref></td>
+<td bgcolor="&cellback;"><titleref href="include-if-valid">Included if validating</titleref></td>
+<td bgcolor="&cellback;"><titleref href="forbidden">Forbidden</titleref></td>
+<td bgcolor="&cellback;"><titleref href="included">Included</titleref></td>
+</tr>
+<tr align="center" valign="middle">
+<td bgcolor="&cellback;" align="right">Reference
+in Attribute Value</td>
+<td bgcolor="&cellback;"><titleref href="not-recognized">Not recognized</titleref></td>
+<td bgcolor="&cellback;"><titleref href="inliteral">Included in literal</titleref></td>
+<td bgcolor="&cellback;"><titleref href="forbidden">Forbidden</titleref></td>
+<td bgcolor="&cellback;"><titleref href="forbidden">Forbidden</titleref></td>
+<td bgcolor="&cellback;"><titleref href="included">Included</titleref></td>
+</tr>
+<tr align="center" valign="middle">
+<td bgcolor="&cellback;" align="right">Occurs as
+Attribute Value</td>
+<td bgcolor="&cellback;"><titleref href="not-recognized">Not recognized</titleref></td>
+<td bgcolor="&cellback;"><titleref href="not-recognized">Forbidden</titleref></td>
+<td bgcolor="&cellback;"><titleref href="not-recognized">Forbidden</titleref></td>
+<td bgcolor="&cellback;"><titleref href="notify">Notify</titleref></td>
+<td bgcolor="&cellback;"><titleref href="not recognized">Not recognized</titleref></td>
+</tr>
+<tr align="center" valign="middle">
+<td bgcolor="&cellback;" align="right">Reference
+in EntityValue</td>
+<td bgcolor="&cellback;"><titleref href="inliteral">Included in literal</titleref></td>
+<td bgcolor="&cellback;"><titleref href="bypass">Bypassed</titleref></td>
+<td bgcolor="&cellback;"><titleref href="bypass">Bypassed</titleref></td>
+<td bgcolor="&cellback;"><titleref href="forbidden">Forbidden</titleref></td>
+<td bgcolor="&cellback;"><titleref href="included">Included</titleref></td>
+</tr>
+<tr align="center" valign="middle">
+<td bgcolor="&cellback;" align="right">Reference
+in DTD</td>
+<td bgcolor="&cellback;"><titleref href="as-PE">Included as PE</titleref></td>
+<td bgcolor="&cellback;"><titleref href="forbidden">Forbidden</titleref></td>
+<td bgcolor="&cellback;"><titleref href="forbidden">Forbidden</titleref></td>
+<td bgcolor="&cellback;"><titleref href="forbidden">Forbidden</titleref></td>
+<td bgcolor="&cellback;"><titleref href="forbidden">Forbidden</titleref></td>
+</tr>
+</htbody>
+</htable>
+<div3 id="not-recognized">
+<head>Not Recognized</head>
+<p>Outside the DTD, the <code>%</code> character has no
+special significance; thus, what would be parameter entity references in the
+DTD are not recognized as markup in <nt def="NT-content">content</nt>.
+Similarly, the names of unparsed entities are not recognized except
+when they appear in the value of an appropriately declared attribute.
+</p>
+</div3>
+<div3 id="included">
+<head>Included</head>
+<p><termdef id="dt-include" term="Include">An entity is
+<term>included</term> when its
+<termref def="dt-repltext">replacement text</termref> is retrieved
+and processed, in place of the reference itself,
+as though it were part of the document at the location the
+reference was recognized.
+The replacement text may contain both
+<termref def="dt-chardata">character data</termref>
+and (except for parameter entities) <termref def="dt-markup">markup</termref>,
+which must be recognized in
+the usual way, except that the replacement text of entities used to escape
+markup delimiters (the entities &magicents;) is always treated as
+data. (The string "<code>AT&amp;amp;T;</code>" expands to
+"<code>AT&amp;T;</code>" and the remaining ampersand is not recognized
+as an entity-reference delimiter.)
+A character reference is <term>included</term> when the indicated
+character is processed in place of the reference itself.
+</termdef></p>
+</div3>
+<div3 id="include-if-valid">
+<head>Included If Validating</head>
+<p>When an XML processor recognizes a reference to a parsed entity, in order
+to <termref def="dt-valid">validate</termref>
+the document, the processor must
+<termref def="dt-include">include</termref> its
+replacement text.
+If the entity is external, and the processor is not
+attempting to validate the XML document, the
+processor <termref def="dt-may">may</termref>, but need not,
+include the entity's replacement text.
+If a non-validating parser does not include the replacement text,
+it must inform the application that it recognized, but did not
+read, the entity.</p>
+<p>This rule is based on the recognition that the automatic inclusion
+provided by the SGML and XML entity mechanism, primarily designed
+to support modularity in authoring, is not necessarily
+appropriate for other applications, in particular document browsing.
+Browsers, for example, when encountering an external parsed entity reference,
+might choose to provide a visual indication of the entity's
+presence and retrieve it for display only on demand.
+</p>
+</div3>
+<div3 id="forbidden">
+<head>Forbidden</head>
+<p>The following are forbidden, and constitute
+<termref def="dt-fatal">fatal</termref> errors:
+<ulist>
+<item><p>the appearance of a reference to an
+<termref def="dt-unparsed">unparsed entity</termref>.
+</p></item>
+<item><p>the appearance of any character or general-entity reference in the
+DTD except within an <nt def="NT-EntityValue">EntityValue</nt> or
+<nt def="NT-AttValue">AttValue</nt>.</p></item>
+<item><p>a reference to an external entity in an attribute value.</p>
+</item>
+</ulist>
+</p>
+</div3>
+<div3 id="inliteral">
+<head>Included in Literal</head>
+<p>When an <termref def="dt-entref">entity reference</termref> appears in an
+attribute value, or a parameter entity reference appears in a literal entity
+value, its <termref def="dt-repltext">replacement text</termref> is
+processed in place of the reference itself as though it
+were part of the document at the location the reference was recognized,
+except that a single or double quote character in the replacement text
+is always treated as a normal data character and will not terminate the
+literal.
+For example, this is well-formed:
+<eg><![CDATA[<!ENTITY % YN '"Yes"' >
+<!ENTITY WhatHeSaid "He said &YN;" >]]></eg>
+while this is not:
+<eg>&lt;!ENTITY EndAttr "27'" &gt;
+&lt;element attribute='a-&amp;EndAttr;&gt;</eg>
+</p></div3>
+<div3 id="notify">
+<head>Notify</head>
+<p>When the name of an <termref def="dt-unparsed">unparsed
+entity</termref> appears as a token in the
+value of an attribute of declared type <kw>ENTITY</kw> or <kw>ENTITIES</kw>,
+a validating processor must inform the
+application of the <termref def="dt-sysid">system</termref>
+and <termref def="dt-pubid">public</termref> (if any)
+identifiers for both the entity and its associated
+<termref def="dt-notation">notation</termref>.</p>
+</div3>
+<div3 id="bypass">
+<head>Bypassed</head>
+<p>When a general entity reference appears in the
+<nt def="NT-EntityValue">EntityValue</nt> in an entity declaration,
+it is bypassed and left as is.</p>
+</div3>
+<div3 id="as-PE">
+<head>Included as PE</head>
+<p>Just as with external parsed entities, parameter entities
+need only be <titleref href="include-if-valid">included if
+validating</titleref>.
+When a parameter-entity reference is recognized in the DTD
+and included, its
+<termref def="dt-repltext">replacement
+text</termref> is enlarged by the attachment of one leading and one following
+space (#x20) character; the intent is to constrain the replacement
+text of parameter
+entities to contain an integral number of grammatical tokens in the DTD.
+</p>
+</div3>
+
+</div2>
+<div2 id="intern-replacement">
+<head>Construction of Internal Entity Replacement Text</head>
+<p>In discussing the treatment
+of internal entities, it is
+useful to distinguish two forms of the entity's value.
+<termdef id="dt-litentval" term="Literal Entity Value">The <term>literal
+entity value</term> is the quoted string actually
+present in the entity declaration, corresponding to the
+non-terminal <nt def="NT-EntityValue">EntityValue</nt>.</termdef>
+<termdef id="dt-repltext" term="Replacement Text">The <term>replacement
+text</term> is the content of the entity, after
+replacement of character references and parameter-entity
+references.
+</termdef></p>
+
+<p>The literal entity value
+as given in an internal entity declaration
+(<nt def="NT-EntityValue">EntityValue</nt>) may contain character,
+parameter-entity, and general-entity references.
+Such references must be contained entirely within the
+literal entity value.
+The actual replacement text that is
+<termref def="dt-include">included</termref> as described above
+must contain the <emph>replacement text</emph> of any
+parameter entities referred to, and must contain the character
+referred to, in place of any character references in the
+literal entity value; however,
+general-entity references must be left as-is, unexpanded.
+For example, given the following declarations:
+
+<eg><![CDATA[<!ENTITY % pub "&#xc9;ditions Gallimard" >
+<!ENTITY rights "All rights reserved" >
+<!ENTITY book "La Peste: Albert Camus,
+&#xA9; 1947 %pub;. &rights;" >]]></eg>
+then the replacement text for the entity "<code>book</code>" is:
+<eg>La Peste: Albert Camus,
+© 1947 Éditions Gallimard. &amp;rights;</eg>
+The general-entity reference "<code>&amp;rights;</code>" would be expanded
+should the reference "<code>&amp;book;</code>" appear in the document's
+content or an attribute value.</p>
+<p>These simple rules may have complex interactions; for a detailed
+discussion of a difficult example, see
+<specref ref="sec-entexpand"/>.
+</p>
+
+</div2>
+<div2 id="sec-predefined-ent">
+<head>Predefined Entities</head>
+<p><termdef id="dt-escape" term="escape">Entity and character
+references can both be used to <term>escape</term> the left angle bracket,
+ampersand, and other delimiters. A set of general entities
+(&magicents;) is specified for this purpose.
+Numeric character references may also be used; they are
+expanded immediately when recognized and must be treated as
+character data, so the numeric character references
+"<code>&amp;#60;</code>" and "<code>&amp;#38;</code>" may be used to
+escape <code>&lt;</code> and <code>&amp;</code> when they occur
+in character data.</termdef></p>
+<p>All XML processors must recognize these entities whether they
+are declared or not.
+<termref def="dt-interop">For interoperability</termref>,
+valid XML documents should declare these
+entities, like any others, before using them.
+If the entities in question are declared, they must be declared
+as internal entities whose replacement text is the single
+character being escaped or a character reference to
+that character, as shown below.
+<eg><![CDATA[<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY amp "&#38;#38;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">
+]]></eg>
+Note that the <code>&lt;</code> and <code>&amp;</code> characters
+in the declarations of "<code>lt</code>" and "<code>amp</code>"
+are doubly escaped to meet the requirement that entity replacement
+be well-formed.
+</p>
+</div2>
+
+<div2 id="Notations">
+<head>Notation Declarations</head>
+
+<p><termdef id="dt-notation" term="Notation"><term>Notations</term> identify by
+name the format of <termref def="dt-extent">unparsed
+entities</termref>, the
+format of elements which bear a notation attribute,
+or the application to which
+a <termref def="dt-pi">processing instruction</termref> is
+addressed.</termdef></p>
+<p><termdef id="dt-notdecl" term="Notation Declaration">
+<term>Notation declarations</term>
+provide a name for the notation, for use in
+entity and attribute-list declarations and in attribute specifications,
+and an external identifier for the notation which may allow an XML
+processor or its client application to locate a helper application
+capable of processing data in the given notation.
+<scrap lang="ebnf">
+<head>Notation Declarations</head>
+<prod id="NT-NotationDecl"><lhs>NotationDecl</lhs>
+<rhs>'&lt;!NOTATION' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt>
+<nt def="NT-S">S</nt>
+(<nt def="NT-ExternalID">ExternalID</nt> |
+<nt def="NT-PublicID">PublicID</nt>)
+<nt def="NT-S">S</nt>? '&gt;'</rhs></prod>
+<prod id="NT-PublicID"><lhs>PublicID</lhs>
+<rhs>'PUBLIC' <nt def="NT-S">S</nt>
+<nt def="NT-PubidLiteral">PubidLiteral</nt>
+</rhs></prod>
+</scrap>
+</termdef></p>
+<p>XML processors must provide applications with the name and external
+identifier(s) of any notation declared and referred to in an attribute
+value, attribute definition, or entity declaration. They may
+additionally resolve the external identifier into the
+<termref def="dt-sysid">system identifier</termref>,
+file name, or other information needed to allow the
+application to call a processor for data in the notation described. (It
+is not an error, however, for XML documents to declare and refer to
+notations for which notation-specific applications are not available on
+the system where the XML processor or application is running.)</p>
+</div2>
+
+
+<div2 id="sec-doc-entity">
+<head>Document Entity</head>
+
+<p><termdef id="dt-docent" term="Document Entity">The <term>document
+entity</term> serves as the root of the entity
+tree and a starting-point for an <termref def="dt-xml-proc">XML
+processor</termref>.</termdef>
+This specification does
+not specify how the document entity is to be located by an XML
+processor; unlike other entities, the document entity has no name and might
+well appear on a processor input stream
+without any identification at all.</p>
+</div2>
+
+
+</div1>
+<!-- &Conformance; -->
+
+<div1 id="sec-conformance">
+<head>Conformance</head>
+
+<div2 id="proc-types">
+<head>Validating and Non-Validating Processors</head>
+<p>Conforming <termref def="dt-xml-proc">XML processors</termref> fall into two
+classes: validating and non-validating.</p>
+<p>Validating and non-validating processors alike must report
+violations of this specification's well-formedness constraints
+in the content of the
+<termref def="dt-docent">document entity</termref> and any
+other <termref def="dt-parsedent">parsed entities</termref> that
+they read.</p>
+<p><termdef id="dt-validating" term="Validating Processor">
+<term>Validating processors</term> must report
+violations of the constraints expressed by the declarations in the
+<termref def="dt-doctype">DTD</termref>, and
+failures to fulfill the validity constraints given
+in this specification.
+</termdef>
+To accomplish this, validating XML processors must read and process the entire
+DTD and all external parsed entities referenced in the document.
+</p>
+<p>Non-validating processors are required to check only the
+<termref def="dt-docent">document entity</termref>, including
+the entire internal DTD subset, for well-formedness.
+<termdef id="dt-use-mdecl" term="Process Declarations">
+While they are not required to check the document for validity,
+they are required to
+<term>process</term> all the declarations they read in the
+internal DTD subset and in any parameter entity that they
+read, up to the first reference
+to a parameter entity that they do <emph>not</emph> read; that is to
+say, they must
+use the information in those declarations to
+<titleref href="AVNormalize">normalize</titleref> attribute values,
+<titleref href="included">include</titleref> the replacement text of
+internal entities, and supply
+<titleref href="sec-attr-defaults">default attribute values</titleref>.
+</termdef>
+They must not <termref def="dt-use-mdecl">process</termref>
+<termref def="dt-entdecl">entity declarations</termref> or
+<termref def="dt-attdecl">attribute-list declarations</termref>
+encountered after a reference to a parameter entity that is not
+read, since the entity may have contained overriding declarations.
+</p>
+</div2>
+<div2 id="safe-behavior">
+<head>Using XML Processors</head>
+<p>The behavior of a validating XML processor is highly predictable; it
+must read every piece of a document and report all well-formedness and
+validity violations.
+Less is required of a non-validating processor; it need not read any
+part of the document other than the document entity.
+This has two effects that may be important to users of XML processors:
+<ulist>
+<item><p>Certain well-formedness errors, specifically those that require
+reading external entities, may not be detected by a non-validating processor.
+Examples include the constraints entitled
+<titleref href="wf-entdeclared">Entity Declared</titleref>,
+<titleref href="wf-textent">Parsed Entity</titleref>, and
+<titleref href="wf-norecursion">No Recursion</titleref>, as well
+as some of the cases described as
+<titleref href="forbidden">forbidden</titleref> in
+<specref ref="entproc"/>.</p></item>
+<item><p>The information passed from the processor to the application may
+vary, depending on whether the processor reads
+parameter and external entities.
+For example, a non-validating processor may not
+<titleref href="AVNormalize">normalize</titleref> attribute values,
+<titleref href="included">include</titleref> the replacement text of
+internal entities, or supply
+<titleref href="sec-attr-defaults">default attribute values</titleref>,
+where doing so depends on having read declarations in
+external or parameter entities.</p></item>
+</ulist>
+</p>
+<p>For maximum reliability in interoperating between different XML
+processors, applications which use non-validating processors should not
+rely on any behaviors not required of such processors.
+Applications which require facilities such as the use of default
+attributes or internal entities which are declared in external
+entities should use validating XML processors.</p>
+</div2>
+</div1>
+
+<div1 id="sec-notation">
+<head>Notation</head>
+
+<p>The formal grammar of XML is given in this specification using a simple
+Extended Backus-Naur Form (EBNF) notation. Each rule in the grammar defines
+one symbol, in the form
+<eg>symbol ::= expression</eg></p>
+<p>Symbols are written with an initial capital letter if they are
+defined by a regular expression, or with an initial lower case letter
+otherwise.
+Literal strings are quoted.
+
+</p>
+
+<p>Within the expression on the right-hand side of a rule, the following
+expressions are used to match strings of one or more characters:
+<glist>
+<gitem>
+<label><code>#xN</code></label>
+<def><p>where <code>N</code> is a hexadecimal integer, the
+expression matches the character in ISO/IEC 10646 whose canonical
+(UCS-4)
+code value, when interpreted as an unsigned binary number, has
+the value indicated. The number of leading zeros in the
+<code>#xN</code> form is insignificant; the number of leading
+zeros in the corresponding code value
+is governed by the character
+encoding in use and is not significant for XML.</p></def>
+</gitem>
+<gitem>
+<label><code>[a-zA-Z]</code>, <code>[#xN-#xN]</code></label>
+<def><p>matches any <termref def="dt-character">character</termref>
+with a value in the range(s) indicated (inclusive).</p></def>
+</gitem>
+<gitem>
+<label><code>[^a-z]</code>, <code>[^#xN-#xN]</code></label>
+<def><p>matches any <termref def="dt-character">character</termref>
+with a value <emph>outside</emph> the
+range indicated.</p></def>
+</gitem>
+<gitem>
+<label><code>[^abc]</code>, <code>[^#xN#xN#xN]</code></label>
+<def><p>matches any <termref def="dt-character">character</termref>
+with a value not among the characters given.</p></def>
+</gitem>
+<gitem>
+<label><code>"string"</code></label>
+<def><p>matches a literal string <termref def="dt-match">matching</termref>
+that given inside the double quotes.</p></def>
+</gitem>
+<gitem>
+<label><code>'string'</code></label>
+<def><p>matches a literal string <termref def="dt-match">matching</termref>
+that given inside the single quotes.</p></def>
+</gitem>
+</glist>
+These symbols may be combined to match more complex patterns as follows,
+where <code>A</code> and <code>B</code> represent simple expressions:
+<glist>
+<gitem>
+<label>(<code>expression</code>)</label>
+<def><p><code>expression</code> is treated as a unit
+and may be combined as described in this list.</p></def>
+</gitem>
+<gitem>
+<label><code>A?</code></label>
+<def><p>matches <code>A</code> or nothing; optional <code>A</code>.</p></def>
+</gitem>
+<gitem>
+<label><code>A B</code></label>
+<def><p>matches <code>A</code> followed by <code>B</code>.</p></def>
+</gitem>
+<gitem>
+<label><code>A | B</code></label>
+<def><p>matches <code>A</code> or <code>B</code> but not both.</p></def>
+</gitem>
+<gitem>
+<label><code>A - B</code></label>
+<def><p>matches any string that matches <code>A</code> but does not match
+<code>B</code>.
+</p></def>
+</gitem>
+<gitem>
+<label><code>A+</code></label>
+<def><p>matches one or more occurrences of <code>A</code>.</p></def>
+</gitem>
+<gitem>
+<label><code>A*</code></label>
+<def><p>matches zero or more occurrences of <code>A</code>.</p></def>
+</gitem>
+
+</glist>
+Other notations used in the productions are:
+<glist>
+<gitem>
+<label><code>/* ... */</code></label>
+<def><p>comment.</p></def>
+</gitem>
+<gitem>
+<label><code>[ wfc: ... ]</code></label>
+<def><p>well-formedness constraint; this identifies by name a
+constraint on
+<termref def="dt-wellformed">well-formed</termref> documents
+associated with a production.</p></def>
+</gitem>
+<gitem>
+<label><code>[ vc: ... ]</code></label>
+<def><p>validity constraint; this identifies by name a constraint on
+<termref def="dt-valid">valid</termref> documents associated with
+a production.</p></def>
+</gitem>
+</glist>
+</p></div1>
+
+</body>
+<back>
+<!-- &SGML; -->
+
+
+<!-- &Biblio; -->
+<div1 id="sec-bibliography">
+
+<head>References</head>
+<div2 id="sec-existing-stds">
+<head>Normative References</head>
+
+<blist>
+<bibl id="IANA" key="IANA">
+(Internet Assigned Numbers Authority) <emph>Official Names for
+Character Sets</emph>,
+ed. Keld Simonsen et al.
+See <loc href="ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets">ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets</loc>.
+</bibl>
+
+<bibl id="RFC1766" key="IETF RFC 1766">
+IETF (Internet Engineering Task Force).
+<emph>RFC 1766: Tags for the Identification of Languages</emph>,
+ed. H. Alvestrand.
+1995.
+</bibl>
+
+<bibl id="ISO639" key="ISO 639">
+(International Organization for Standardization).
+<emph>ISO 639:1988 (E).
+Code for the representation of names of languages.</emph>
+[Geneva]: International Organization for
+Standardization, 1988.</bibl>
+
+<bibl id="ISO3166" key="ISO 3166">
+(International Organization for Standardization).
+<emph>ISO 3166-1:1997 (E).
+Codes for the representation of names of countries and their subdivisions
+&mdash; Part 1: Country codes</emph>
+[Geneva]: International Organization for
+Standardization, 1997.</bibl>
+
+<bibl id="ISO10646" key="ISO/IEC 10646">ISO
+(International Organization for Standardization).
+<emph>ISO/IEC 10646-1993 (E). Information technology &mdash; Universal
+Multiple-Octet Coded Character Set (UCS) &mdash; Part 1:
+Architecture and Basic Multilingual Plane.</emph>
+[Geneva]: International Organization for
+Standardization, 1993 (plus amendments AM 1 through AM 7).
+</bibl>
+
+<bibl id="Unicode" key="Unicode">The Unicode Consortium.
+<emph>The Unicode Standard, Version 2.0.</emph>
+Reading, Mass.: Addison-Wesley Developers Press, 1996.</bibl>
+
+</blist>
+
+</div2>
+
+<div2><head>Other References</head>
+
+<blist>
+
+<bibl id="Aho" key="Aho/Ullman">Aho, Alfred V.,
+Ravi Sethi, and Jeffrey D. Ullman.
+<emph>Compilers: Principles, Techniques, and Tools</emph>.
+Reading: Addison-Wesley, 1986, rpt. corr. 1988.</bibl>
+
+<bibl id="Berners-Lee" xml-link="simple" key="Berners-Lee et al.">
+Berners-Lee, T., R. Fielding, and L. Masinter.
+<emph>Uniform Resource Identifiers (URI): Generic Syntax and
+Semantics</emph>.
+1997.
+(Work in progress; see updates to RFC1738.)</bibl>
+
+<bibl id="ABK" key="Brüggemann-Klein">Brüggemann-Klein, Anne.
+<emph>Regular Expressions into Finite Automata</emph>.
+Extended abstract in I. Simon, Hrsg., LATIN 1992,
+S. 97-98. Springer-Verlag, Berlin 1992.
+Full Version in Theoretical Computer Science 120: 197-213, 1993.
+
+</bibl>
+
+<bibl id="ABKDW" key="Brüggemann-Klein and Wood">Brüggemann-Klein, Anne,
+and Derick Wood.
+<emph>Deterministic Regular Languages</emph>.
+Universität Freiburg, Institut für Informatik,
+Bericht 38, Oktober 1991.
+</bibl>
+
+<bibl id="Clark" key="Clark">James Clark.
+Comparison of SGML and XML. See
+<loc href="http://www.w3.org/TR/NOTE-sgml-xml-971215">http://www.w3.org/TR/NOTE-sgml-xml-971215</loc>.
+</bibl>
+<bibl id="RFC1738" xml-link="simple" key="IETF RFC1738">
+IETF (Internet Engineering Task Force).
+<emph>RFC 1738: Uniform Resource Locators (URL)</emph>,
+ed. T. Berners-Lee, L. Masinter, M. McCahill.
+1994.
+</bibl>
+
+<bibl id="RFC1808" xml-link="simple" key="IETF RFC1808">
+IETF (Internet Engineering Task Force).
+<emph>RFC 1808: Relative Uniform Resource Locators</emph>,
+ed. R. Fielding.
+1995.
+</bibl>
+
+<bibl id="RFC2141" xml-link="simple" key="IETF RFC2141">
+IETF (Internet Engineering Task Force).
+<emph>RFC 2141: URN Syntax</emph>,
+ed. R. Moats.
+1997.
+</bibl>
+
+<bibl id="ISO8879" key="ISO 8879">ISO
+(International Organization for Standardization).
+<emph>ISO 8879:1986(E). Information processing &mdash; Text and Office
+Systems &mdash; Standard Generalized Markup Language (SGML).</emph> First
+edition &mdash; 1986-10-15. [Geneva]: International Organization for
+Standardization, 1986.
+</bibl>
+
+
+<bibl id="ISO10744" key="ISO/IEC 10744">ISO
+(International Organization for Standardization).
+<emph>ISO/IEC 10744-1992 (E). Information technology &mdash;
+Hypermedia/Time-based Structuring Language (HyTime).
+</emph>
+[Geneva]: International Organization for
+Standardization, 1992.
+<emph>Extended Facilities Annexe.</emph>
+[Geneva]: International Organization for
+Standardization, 1996.
+</bibl>
+
+
+
+</blist>
+</div2>
+</div1>
+<div1 id="CharClasses">
+<head>Character Classes</head>
+<p>Following the characteristics defined in the Unicode standard,
+characters are classed as base characters (among others, these
+contain the alphabetic characters of the Latin alphabet, without
+diacritics), ideographic characters, and combining characters (among
+others, this class contains most diacritics); these classes combine
+to form the class of letters. Digits and extenders are
+also distinguished.
+<scrap lang="ebnf" id="CHARACTERS">
+<head>Characters</head>
+<prodgroup pcw3="3" pcw4="15">
+<prod id="NT-Letter"><lhs>Letter</lhs>
+<rhs><nt def="NT-BaseChar">BaseChar</nt>
+| <nt def="NT-Ideographic">Ideographic</nt></rhs> </prod>
+<prod id="NT-BaseChar"><lhs>BaseChar</lhs>
+<rhs>[#x0041-#x005A]
+|&nbsp;[#x0061-#x007A]
+|&nbsp;[#x00C0-#x00D6]
+|&nbsp;[#x00D8-#x00F6]
+|&nbsp;[#x00F8-#x00FF]
+|&nbsp;[#x0100-#x0131]
+|&nbsp;[#x0134-#x013E]
+|&nbsp;[#x0141-#x0148]
+|&nbsp;[#x014A-#x017E]
+|&nbsp;[#x0180-#x01C3]
+|&nbsp;[#x01CD-#x01F0]
+|&nbsp;[#x01F4-#x01F5]
+|&nbsp;[#x01FA-#x0217]
+|&nbsp;[#x0250-#x02A8]
+|&nbsp;[#x02BB-#x02C1]
+|&nbsp;#x0386
+|&nbsp;[#x0388-#x038A]
+|&nbsp;#x038C
+|&nbsp;[#x038E-#x03A1]
+|&nbsp;[#x03A3-#x03CE]
+|&nbsp;[#x03D0-#x03D6]
+|&nbsp;#x03DA
+|&nbsp;#x03DC
+|&nbsp;#x03DE
+|&nbsp;#x03E0
+|&nbsp;[#x03E2-#x03F3]
+|&nbsp;[#x0401-#x040C]
+|&nbsp;[#x040E-#x044F]
+|&nbsp;[#x0451-#x045C]
+|&nbsp;[#x045E-#x0481]
+|&nbsp;[#x0490-#x04C4]
+|&nbsp;[#x04C7-#x04C8]
+|&nbsp;[#x04CB-#x04CC]
+|&nbsp;[#x04D0-#x04EB]
+|&nbsp;[#x04EE-#x04F5]
+|&nbsp;[#x04F8-#x04F9]
+|&nbsp;[#x0531-#x0556]
+|&nbsp;#x0559
+|&nbsp;[#x0561-#x0586]
+|&nbsp;[#x05D0-#x05EA]
+|&nbsp;[#x05F0-#x05F2]
+|&nbsp;[#x0621-#x063A]
+|&nbsp;[#x0641-#x064A]
+|&nbsp;[#x0671-#x06B7]
+|&nbsp;[#x06BA-#x06BE]
+|&nbsp;[#x06C0-#x06CE]
+|&nbsp;[#x06D0-#x06D3]
+|&nbsp;#x06D5
+|&nbsp;[#x06E5-#x06E6]
+|&nbsp;[#x0905-#x0939]
+|&nbsp;#x093D
+|&nbsp;[#x0958-#x0961]
+|&nbsp;[#x0985-#x098C]
+|&nbsp;[#x098F-#x0990]
+|&nbsp;[#x0993-#x09A8]
+|&nbsp;[#x09AA-#x09B0]
+|&nbsp;#x09B2
+|&nbsp;[#x09B6-#x09B9]
+|&nbsp;[#x09DC-#x09DD]
+|&nbsp;[#x09DF-#x09E1]
+|&nbsp;[#x09F0-#x09F1]
+|&nbsp;[#x0A05-#x0A0A]
+|&nbsp;[#x0A0F-#x0A10]
+|&nbsp;[#x0A13-#x0A28]
+|&nbsp;[#x0A2A-#x0A30]
+|&nbsp;[#x0A32-#x0A33]
+|&nbsp;[#x0A35-#x0A36]
+|&nbsp;[#x0A38-#x0A39]
+|&nbsp;[#x0A59-#x0A5C]
+|&nbsp;#x0A5E
+|&nbsp;[#x0A72-#x0A74]
+|&nbsp;[#x0A85-#x0A8B]
+|&nbsp;#x0A8D
+|&nbsp;[#x0A8F-#x0A91]
+|&nbsp;[#x0A93-#x0AA8]
+|&nbsp;[#x0AAA-#x0AB0]
+|&nbsp;[#x0AB2-#x0AB3]
+|&nbsp;[#x0AB5-#x0AB9]
+|&nbsp;#x0ABD
+|&nbsp;#x0AE0
+|&nbsp;[#x0B05-#x0B0C]
+|&nbsp;[#x0B0F-#x0B10]
+|&nbsp;[#x0B13-#x0B28]
+|&nbsp;[#x0B2A-#x0B30]
+|&nbsp;[#x0B32-#x0B33]
+|&nbsp;[#x0B36-#x0B39]
+|&nbsp;#x0B3D
+|&nbsp;[#x0B5C-#x0B5D]
+|&nbsp;[#x0B5F-#x0B61]
+|&nbsp;[#x0B85-#x0B8A]
+|&nbsp;[#x0B8E-#x0B90]
+|&nbsp;[#x0B92-#x0B95]
+|&nbsp;[#x0B99-#x0B9A]
+|&nbsp;#x0B9C
+|&nbsp;[#x0B9E-#x0B9F]
+|&nbsp;[#x0BA3-#x0BA4]
+|&nbsp;[#x0BA8-#x0BAA]
+|&nbsp;[#x0BAE-#x0BB5]
+|&nbsp;[#x0BB7-#x0BB9]
+|&nbsp;[#x0C05-#x0C0C]
+|&nbsp;[#x0C0E-#x0C10]
+|&nbsp;[#x0C12-#x0C28]
+|&nbsp;[#x0C2A-#x0C33]
+|&nbsp;[#x0C35-#x0C39]
+|&nbsp;[#x0C60-#x0C61]
+|&nbsp;[#x0C85-#x0C8C]
+|&nbsp;[#x0C8E-#x0C90]
+|&nbsp;[#x0C92-#x0CA8]
+|&nbsp;[#x0CAA-#x0CB3]
+|&nbsp;[#x0CB5-#x0CB9]
+|&nbsp;#x0CDE
+|&nbsp;[#x0CE0-#x0CE1]
+|&nbsp;[#x0D05-#x0D0C]
+|&nbsp;[#x0D0E-#x0D10]
+|&nbsp;[#x0D12-#x0D28]
+|&nbsp;[#x0D2A-#x0D39]
+|&nbsp;[#x0D60-#x0D61]
+|&nbsp;[#x0E01-#x0E2E]
+|&nbsp;#x0E30
+|&nbsp;[#x0E32-#x0E33]
+|&nbsp;[#x0E40-#x0E45]
+|&nbsp;[#x0E81-#x0E82]
+|&nbsp;#x0E84
+|&nbsp;[#x0E87-#x0E88]
+|&nbsp;#x0E8A
+|&nbsp;#x0E8D
+|&nbsp;[#x0E94-#x0E97]
+|&nbsp;[#x0E99-#x0E9F]
+|&nbsp;[#x0EA1-#x0EA3]
+|&nbsp;#x0EA5
+|&nbsp;#x0EA7
+|&nbsp;[#x0EAA-#x0EAB]
+|&nbsp;[#x0EAD-#x0EAE]
+|&nbsp;#x0EB0
+|&nbsp;[#x0EB2-#x0EB3]
+|&nbsp;#x0EBD
+|&nbsp;[#x0EC0-#x0EC4]
+|&nbsp;[#x0F40-#x0F47]
+|&nbsp;[#x0F49-#x0F69]
+|&nbsp;[#x10A0-#x10C5]
+|&nbsp;[#x10D0-#x10F6]
+|&nbsp;#x1100
+|&nbsp;[#x1102-#x1103]
+|&nbsp;[#x1105-#x1107]
+|&nbsp;#x1109
+|&nbsp;[#x110B-#x110C]
+|&nbsp;[#x110E-#x1112]
+|&nbsp;#x113C
+|&nbsp;#x113E
+|&nbsp;#x1140
+|&nbsp;#x114C
+|&nbsp;#x114E
+|&nbsp;#x1150
+|&nbsp;[#x1154-#x1155]
+|&nbsp;#x1159
+|&nbsp;[#x115F-#x1161]
+|&nbsp;#x1163
+|&nbsp;#x1165
+|&nbsp;#x1167
+|&nbsp;#x1169
+|&nbsp;[#x116D-#x116E]
+|&nbsp;[#x1172-#x1173]
+|&nbsp;#x1175
+|&nbsp;#x119E
+|&nbsp;#x11A8
+|&nbsp;#x11AB
+|&nbsp;[#x11AE-#x11AF]
+|&nbsp;[#x11B7-#x11B8]
+|&nbsp;#x11BA
+|&nbsp;[#x11BC-#x11C2]
+|&nbsp;#x11EB
+|&nbsp;#x11F0
+|&nbsp;#x11F9
+|&nbsp;[#x1E00-#x1E9B]
+|&nbsp;[#x1EA0-#x1EF9]
+|&nbsp;[#x1F00-#x1F15]
+|&nbsp;[#x1F18-#x1F1D]
+|&nbsp;[#x1F20-#x1F45]
+|&nbsp;[#x1F48-#x1F4D]
+|&nbsp;[#x1F50-#x1F57]
+|&nbsp;#x1F59
+|&nbsp;#x1F5B
+|&nbsp;#x1F5D
+|&nbsp;[#x1F5F-#x1F7D]
+|&nbsp;[#x1F80-#x1FB4]
+|&nbsp;[#x1FB6-#x1FBC]
+|&nbsp;#x1FBE
+|&nbsp;[#x1FC2-#x1FC4]
+|&nbsp;[#x1FC6-#x1FCC]
+|&nbsp;[#x1FD0-#x1FD3]
+|&nbsp;[#x1FD6-#x1FDB]
+|&nbsp;[#x1FE0-#x1FEC]
+|&nbsp;[#x1FF2-#x1FF4]
+|&nbsp;[#x1FF6-#x1FFC]
+|&nbsp;#x2126
+|&nbsp;[#x212A-#x212B]
+|&nbsp;#x212E
+|&nbsp;[#x2180-#x2182]
+|&nbsp;[#x3041-#x3094]
+|&nbsp;[#x30A1-#x30FA]
+|&nbsp;[#x3105-#x312C]
+|&nbsp;[#xAC00-#xD7A3]
+</rhs></prod>
+<prod id="NT-Ideographic"><lhs>Ideographic</lhs>
+<rhs>[#x4E00-#x9FA5]
+|&nbsp;#x3007
+|&nbsp;[#x3021-#x3029]
+</rhs></prod>
+<prod id="NT-CombiningChar"><lhs>CombiningChar</lhs>
+<rhs>[#x0300-#x0345]
+|&nbsp;[#x0360-#x0361]
+|&nbsp;[#x0483-#x0486]
+|&nbsp;[#x0591-#x05A1]
+|&nbsp;[#x05A3-#x05B9]
+|&nbsp;[#x05BB-#x05BD]
+|&nbsp;#x05BF
+|&nbsp;[#x05C1-#x05C2]
+|&nbsp;#x05C4
+|&nbsp;[#x064B-#x0652]
+|&nbsp;#x0670
+|&nbsp;[#x06D6-#x06DC]
+|&nbsp;[#x06DD-#x06DF]
+|&nbsp;[#x06E0-#x06E4]
+|&nbsp;[#x06E7-#x06E8]
+|&nbsp;[#x06EA-#x06ED]
+|&nbsp;[#x0901-#x0903]
+|&nbsp;#x093C
+|&nbsp;[#x093E-#x094C]
+|&nbsp;#x094D
+|&nbsp;[#x0951-#x0954]
+|&nbsp;[#x0962-#x0963]
+|&nbsp;[#x0981-#x0983]
+|&nbsp;#x09BC
+|&nbsp;#x09BE
+|&nbsp;#x09BF
+|&nbsp;[#x09C0-#x09C4]
+|&nbsp;[#x09C7-#x09C8]
+|&nbsp;[#x09CB-#x09CD]
+|&nbsp;#x09D7
+|&nbsp;[#x09E2-#x09E3]
+|&nbsp;#x0A02
+|&nbsp;#x0A3C
+|&nbsp;#x0A3E
+|&nbsp;#x0A3F
+|&nbsp;[#x0A40-#x0A42]
+|&nbsp;[#x0A47-#x0A48]
+|&nbsp;[#x0A4B-#x0A4D]
+|&nbsp;[#x0A70-#x0A71]
+|&nbsp;[#x0A81-#x0A83]
+|&nbsp;#x0ABC
+|&nbsp;[#x0ABE-#x0AC5]
+|&nbsp;[#x0AC7-#x0AC9]
+|&nbsp;[#x0ACB-#x0ACD]
+|&nbsp;[#x0B01-#x0B03]
+|&nbsp;#x0B3C
+|&nbsp;[#x0B3E-#x0B43]
+|&nbsp;[#x0B47-#x0B48]
+|&nbsp;[#x0B4B-#x0B4D]
+|&nbsp;[#x0B56-#x0B57]
+|&nbsp;[#x0B82-#x0B83]
+|&nbsp;[#x0BBE-#x0BC2]
+|&nbsp;[#x0BC6-#x0BC8]
+|&nbsp;[#x0BCA-#x0BCD]
+|&nbsp;#x0BD7
+|&nbsp;[#x0C01-#x0C03]
+|&nbsp;[#x0C3E-#x0C44]
+|&nbsp;[#x0C46-#x0C48]
+|&nbsp;[#x0C4A-#x0C4D]
+|&nbsp;[#x0C55-#x0C56]
+|&nbsp;[#x0C82-#x0C83]
+|&nbsp;[#x0CBE-#x0CC4]
+|&nbsp;[#x0CC6-#x0CC8]
+|&nbsp;[#x0CCA-#x0CCD]
+|&nbsp;[#x0CD5-#x0CD6]
+|&nbsp;[#x0D02-#x0D03]
+|&nbsp;[#x0D3E-#x0D43]
+|&nbsp;[#x0D46-#x0D48]
+|&nbsp;[#x0D4A-#x0D4D]
+|&nbsp;#x0D57
+|&nbsp;#x0E31
+|&nbsp;[#x0E34-#x0E3A]
+|&nbsp;[#x0E47-#x0E4E]
+|&nbsp;#x0EB1
+|&nbsp;[#x0EB4-#x0EB9]
+|&nbsp;[#x0EBB-#x0EBC]
+|&nbsp;[#x0EC8-#x0ECD]
+|&nbsp;[#x0F18-#x0F19]
+|&nbsp;#x0F35
+|&nbsp;#x0F37
+|&nbsp;#x0F39
+|&nbsp;#x0F3E
+|&nbsp;#x0F3F
+|&nbsp;[#x0F71-#x0F84]
+|&nbsp;[#x0F86-#x0F8B]
+|&nbsp;[#x0F90-#x0F95]
+|&nbsp;#x0F97
+|&nbsp;[#x0F99-#x0FAD]
+|&nbsp;[#x0FB1-#x0FB7]
+|&nbsp;#x0FB9
+|&nbsp;[#x20D0-#x20DC]
+|&nbsp;#x20E1
+|&nbsp;[#x302A-#x302F]
+|&nbsp;#x3099
+|&nbsp;#x309A
+</rhs></prod>
+<prod id="NT-Digit"><lhs>Digit</lhs>
+<rhs>[#x0030-#x0039]
+|&nbsp;[#x0660-#x0669]
+|&nbsp;[#x06F0-#x06F9]
+|&nbsp;[#x0966-#x096F]
+|&nbsp;[#x09E6-#x09EF]
+|&nbsp;[#x0A66-#x0A6F]
+|&nbsp;[#x0AE6-#x0AEF]
+|&nbsp;[#x0B66-#x0B6F]
+|&nbsp;[#x0BE7-#x0BEF]
+|&nbsp;[#x0C66-#x0C6F]
+|&nbsp;[#x0CE6-#x0CEF]
+|&nbsp;[#x0D66-#x0D6F]
+|&nbsp;[#x0E50-#x0E59]
+|&nbsp;[#x0ED0-#x0ED9]
+|&nbsp;[#x0F20-#x0F29]
+</rhs></prod>
+<prod id="NT-Extender"><lhs>Extender</lhs>
+<rhs>#x00B7
+|&nbsp;#x02D0
+|&nbsp;#x02D1
+|&nbsp;#x0387
+|&nbsp;#x0640
+|&nbsp;#x0E46
+|&nbsp;#x0EC6
+|&nbsp;#x3005
+|&nbsp;[#x3031-#x3035]
+|&nbsp;[#x309D-#x309E]
+|&nbsp;[#x30FC-#x30FE]
+</rhs></prod>
+
+</prodgroup>
+</scrap>
+</p>
+<p>The character classes defined here can be derived from the
+Unicode character database as follows:
+<ulist>
+<item>
+<p>Name start characters must have one of the categories Ll, Lu,
+Lo, Lt, Nl.</p>
+</item>
+<item>
+<p>Name characters other than Name-start characters
+must have one of the categories Mc, Me, Mn, Lm, or Nd.</p>
+</item>
+<item>
+<p>Characters in the compatibility area (i.e. with character code
+greater than #xF900 and less than #xFFFE) are not allowed in XML
+names.</p>
+</item>
+<item>
+<p>Characters which have a font or compatibility decomposition (i.e. those
+with a "compatibility formatting tag" in field 5 of the database --
+marked by field 5 beginning with a "&lt;") are not allowed.</p>
+</item>
+<item>
+<p>The following characters are treated as name-start characters
+rather than name characters, because the property file classifies
+them as Alphabetic: [#x02BB-#x02C1], #x0559, #x06E5, #x06E6.</p>
+</item>
+<item>
+<p>Characters #x20DD-#x20E0 are excluded (in accordance with
+Unicode, section 5.14).</p>
+</item>
+<item>
+<p>Character #x00B7 is classified as an extender, because the
+property list so identifies it.</p>
+</item>
+<item>
+<p>Character #x0387 is added as a name character, because #x00B7
+is its canonical equivalent.</p>
+</item>
+<item>
+<p>Characters ':' and '_' are allowed as name-start characters.</p>
+</item>
+<item>
+<p>Characters '-' and '.' are allowed as name characters.</p>
+</item>
+</ulist>
+</p>
+</div1>
+<inform-div1 id="sec-xml-and-sgml">
+<head>XML and SGML</head>
+
+<p>XML is designed to be a subset of SGML, in that every
+<termref def="dt-valid">valid</termref> XML document should also be a
+conformant SGML document.
+For a detailed comparison of the additional restrictions that XML places on
+documents beyond those of SGML, see <bibref ref="Clark"/>.
+</p>
+</inform-div1>
+<inform-div1 id="sec-entexpand">
+<head>Expansion of Entity and Character References</head>
+<p>This appendix contains some examples illustrating the
+sequence of entity- and character-reference recognition and
+expansion, as specified in <specref ref="entproc"/>.</p>
+<p>
+If the DTD contains the declaration
+<eg><![CDATA[<!ENTITY example "<p>An ampersand (&#38;#38;) may be escaped
+numerically (&#38;#38;#38;) or with a general entity
+(&amp;amp;).</p>" >
+]]></eg>
+then the XML processor will recognize the character references
+when it parses the entity declaration, and resolve them before
+storing the following string as the
+value of the entity "<code>example</code>":
+<eg><![CDATA[<p>An ampersand (&#38;) may be escaped
+numerically (&#38;#38;) or with a general entity
+(&amp;amp;).</p>
+]]></eg>
+A reference in the document to "<code>&amp;example;</code>"
+will cause the text to be reparsed, at which time the
+start- and end-tags of the "<code>p</code>" element will be recognized
+and the three references will be recognized and expanded,
+resulting in a "<code>p</code>" element with the following content
+(all data, no delimiters or markup):
+<eg><![CDATA[An ampersand (&) may be escaped
+numerically (&#38;) or with a general entity
+(&amp;).
+]]></eg>
+</p>
+<p>A more complex example will illustrate the rules and their
+effects fully. In the following example, the line numbers are
+solely for reference.
+<eg><![CDATA[1 <?xml version='1.0'?>
+2 <!DOCTYPE test [
+3 <!ELEMENT test (#PCDATA) >
+4 <!ENTITY % xx '&#37;zz;'>
+5 <!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >' >
+6 %xx;
+7 ]>
+8 <test>This sample shows a &tricky; method.</test>
+]]></eg>
+This produces the following:
+<ulist spacing="compact">
+<item><p>in line 4, the reference to character 37 is expanded immediately,
+and the parameter entity "<code>xx</code>" is stored in the symbol
+table with the value "<code>%zz;</code>". Since the replacement text
+is not rescanned, the reference to parameter entity "<code>zz</code>"
+is not recognized. (And it would be an error if it were, since
+"<code>zz</code>" is not yet declared.)</p></item>
+<item><p>in line 5, the character reference "<code>&amp;#60;</code>" is
+expanded immediately and the parameter entity "<code>zz</code>" is
+stored with the replacement text
+"<code>&lt;!ENTITY tricky "error-prone" &gt;</code>",
+which is a well-formed entity declaration.</p></item>
+<item><p>in line 6, the reference to "<code>xx</code>" is recognized,
+and the replacement text of "<code>xx</code>" (namely
+"<code>%zz;</code>") is parsed. The reference to "<code>zz</code>"
+is recognized in its turn, and its replacement text
+("<code>&lt;!ENTITY tricky "error-prone" &gt;</code>") is parsed.
+The general entity "<code>tricky</code>" has now been
+declared, with the replacement text "<code>error-prone</code>".</p></item>
+<item><p>
+in line 8, the reference to the general entity "<code>tricky</code>" is
+recognized, and it is expanded, so the full content of the
+"<code>test</code>" element is the self-describing (and ungrammatical) string
+<emph>This sample shows a error-prone method.</emph>
+</p></item>
+</ulist>
+</p>
+</inform-div1>
+<inform-div1 id="determinism">
+<head>Deterministic Content Models</head>
+<p><termref def="dt-compat">For compatibility</termref>, it is
+required
+that content models in element type declarations be deterministic.
+</p>
+<!-- FINAL EDIT: WebSGML allows ambiguity? -->
+<p>SGML
+requires deterministic content models (it calls them
+"unambiguous"); XML processors built using SGML systems may
+flag non-deterministic content models as errors.</p>
+<p>For example, the content model <code>((b, c) | (b, d))</code> is
+non-deterministic, because given an initial <code>b</code> the parser
+cannot know which <code>b</code> in the model is being matched without
+looking ahead to see which element follows the <code>b</code>.
+In this case, the two references to
+<code>b</code> can be collapsed
+into a single reference, making the model read
+<code>(b, (c | d))</code>. An initial <code>b</code> now clearly
+matches only a single name in the content model. The parser doesn't
+need to look ahead to see what follows; either <code>c</code> or
+<code>d</code> would be accepted.</p>
+<p>More formally: a finite state automaton may be constructed from the
+content model using the standard algorithms, e.g. algorithm 3.5
+in section 3.9
+of Aho, Sethi, and Ullman <bibref ref="Aho"/>.
+In many such algorithms, a follow set is constructed for each
+position in the regular expression (i.e., each leaf
+node in the
+syntax tree for the regular expression);
+if any position has a follow set in which
+more than one following position is
+labeled with the same element type name,
+then the content model is in error
+and may be reported as an error.
+</p>
+<p>Algorithms exist which allow many but not all non-deterministic
+content models to be reduced automatically to equivalent deterministic
+models; see Brüggemann-Klein 1991 <bibref ref="ABK"/>.</p>
+</inform-div1>
+<inform-div1 id="sec-guessing">
+<head>Autodetection of Character Encodings</head>
+<p>The XML encoding declaration functions as an internal label on each
+entity, indicating which character encoding is in use. Before an XML
+processor can read the internal label, however, it apparently has to
+know what character encoding is in use&mdash;which is what the internal label
+is trying to indicate. In the general case, this is a hopeless
+situation. It is not entirely hopeless in XML, however, because XML
+limits the general case in two ways: each implementation is assumed
+to support only a finite set of character encodings, and the XML
+encoding declaration is restricted in position and content in order to
+make it feasible to autodetect the character encoding in use in each
+entity in normal cases. Also, in many cases other sources of information
+are available in addition to the XML data stream itself.
+Two cases may be distinguished,
+depending on whether the XML entity is presented to the
+processor without, or with, any accompanying
+(external) information. We consider the first case first.
+</p>
+<p>
+Because each XML entity not in UTF-8 or UTF-16 format <emph>must</emph>
+begin with an XML encoding declaration, in which the first characters
+must be '<code>&lt;?xml</code>', any conforming processor can detect,
+after two to four octets of input, which of the following cases apply.
+In reading this list, it may help to know that in UCS-4, '&lt;' is
+"<code>#x0000003C</code>" and '?' is "<code>#x0000003F</code>", and the Byte
+Order Mark required of UTF-16 data streams is "<code>#xFEFF</code>".</p>
+<p>
+<ulist>
+<item>
+<p><code>00 00 00 3C</code>: UCS-4, big-endian machine (1234 order)</p>
+</item>
+<item>
+<p><code>3C 00 00 00</code>: UCS-4, little-endian machine (4321 order)</p>
+</item>
+<item>
+<p><code>00 00 3C 00</code>: UCS-4, unusual octet order (2143)</p>
+</item>
+<item>
+<p><code>00 3C 00 00</code>: UCS-4, unusual octet order (3412)</p>
+</item>
+<item>
+<p><code>FE FF</code>: UTF-16, big-endian</p>
+</item>
+<item>
+<p><code>FF FE</code>: UTF-16, little-endian</p>
+</item>
+<item>
+<p><code>00 3C 00 3F</code>: UTF-16, big-endian, no Byte Order Mark
+(and thus, strictly speaking, in error)</p>
+</item>
+<item>
+<p><code>3C 00 3F 00</code>: UTF-16, little-endian, no Byte Order Mark
+(and thus, strictly speaking, in error)</p>
+</item>
+<item>
+<p><code>3C 3F 78 6D</code>: UTF-8, ISO 646, ASCII, some part of ISO 8859,
+Shift-JIS, EUC, or any other 7-bit, 8-bit, or mixed-width encoding
+which ensures that the characters of ASCII have their normal positions,
+width,
+and values; the actual encoding declaration must be read to
+detect which of these applies, but since all of these encodings
+use the same bit patterns for the ASCII characters, the encoding
+declaration itself may be read reliably
+</p>
+</item>
+<item>
+<p><code>4C 6F A7 94</code>: EBCDIC (in some flavor; the full
+encoding declaration must be read to tell which code page is in
+use)</p>
+</item>
+<item>
+<p>other: UTF-8 without an encoding declaration, or else
+the data stream is corrupt, fragmentary, or enclosed in
+a wrapper of some kind</p>
+</item>
+</ulist>
+</p>
+<p>
+This level of autodetection is enough to read the XML encoding
+declaration and parse the character-encoding identifier, which is
+still necessary to distinguish the individual members of each family
+of encodings (e.g. to tell UTF-8 from 8859, and the parts of 8859
+from each other, or to distinguish the specific EBCDIC code page in
+use, and so on).
+</p>
+<p>
+Because the contents of the encoding declaration are restricted to
+ASCII characters, a processor can reliably read the entire encoding
+declaration as soon as it has detected which family of encodings is in
+use. Since in practice, all widely used character encodings fall into
+one of the categories above, the XML encoding declaration allows
+reasonably reliable in-band labeling of character encodings, even when
+external sources of information at the operating-system or
+transport-protocol level are unreliable.
+</p>
+<p>
+Once the processor has detected the character encoding in use, it can
+act appropriately, whether by invoking a separate input routine for
+each case, or by calling the proper conversion function on each
+character of input.
+</p>
+<p>
+Like any self-labeling system, the XML encoding declaration will not
+work if any software changes the entity's character set or encoding
+without updating the encoding declaration. Implementors of
+character-encoding routines should be careful to ensure the accuracy
+of the internal and external information used to label the entity.
+</p>
+<p>The second possible case occurs when the XML entity is accompanied
+by encoding information, as in some file systems and some network
+protocols.
+When multiple sources of information are available,
+
+their relative
+priority and the preferred method of handling conflict should be
+specified as part of the higher-level protocol used to deliver XML.
+Rules for the relative priority of the internal label and the
+MIME-type label in an external header, for example, should be part of the
+RFC document defining the text/xml and application/xml MIME types. In
+the interests of interoperability, however, the following rules
+are recommended.
+<ulist>
+<item><p>If an XML entity is in a file, the Byte-Order Mark
+and encoding-declaration PI are used (if present) to determine the
+character encoding. All other heuristics and sources of information
+are solely for error recovery.
+</p></item>
+<item><p>If an XML entity is delivered with a
+MIME type of text/xml, then the <code>charset</code> parameter
+on the MIME type determines the
+character encoding method; all other heuristics and sources of
+information are solely for error recovery.
+</p></item>
+<item><p>If an XML entity is delivered
+with a
+MIME type of application/xml, then the Byte-Order Mark and
+encoding-declaration PI are used (if present) to determine the
+character encoding. All other heuristics and sources of
+information are solely for error recovery.
+</p></item>
+</ulist>
+These rules apply only in the absence of protocol-level documentation;
+in particular, when the MIME types text/xml and application/xml are
+defined, the recommendations of the relevant RFC will supersede
+these rules.
+</p>
+
+</inform-div1>
+
+<inform-div1 id="sec-xml-wg">
+<head>W3C XML Working Group</head>
+
+<p>This specification was prepared and approved for publication by the
+W3C XML Working Group (WG). WG approval of this specification does
+not necessarily imply that all WG members voted for its approval.
+The current and former members of the XML WG are:</p>
+
+<orglist>
+<member><name>Jon Bosak, Sun</name><role>Chair</role></member>
+<member><name>James Clark</name><role>Technical Lead</role></member>
+<member><name>Tim Bray, Textuality and Netscape</name><role>XML Co-editor</role></member>
+<member><name>Jean Paoli, Microsoft</name><role>XML Co-editor</role></member>
+<member><name>C. M. Sperberg-McQueen, U. of Ill.</name><role>XML
+Co-editor</role></member>
+<member><name>Dan Connolly, W3C</name><role>W3C Liaison</role></member>
+<member><name>Paula Angerstein, Texcel</name></member>
+<member><name>Steve DeRose, INSO</name></member>
+<member><name>Dave Hollander, HP</name></member>
+<member><name>Eliot Kimber, ISOGEN</name></member>
+<member><name>Eve Maler, ArborText</name></member>
+<member><name>Tom Magliery, NCSA</name></member>
+<member><name>Murray Maloney, Muzmo and Grif</name></member>
+<member><name>Makoto Murata, Fuji Xerox Information Systems</name></member>
+<member><name>Joel Nava, Adobe</name></member>
+<member><name>Conleth O'Connell, Vignette</name></member>
+<member><name>Peter Sharpe, SoftQuad</name></member>
+<member><name>John Tigue, DataChannel</name></member>
+</orglist>
+
+</inform-div1>
+</back>
+</spec>
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-default-dtd-file:"~/sgml/spec.ced"
+sgml-omittag:t
+sgml-shorttag:t
+End:
+-->
diff --git a/result/valid/REC-xml-19980210.xml.err b/result/valid/REC-xml-19980210.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/REC-xml-19980210.xml.err
diff --git a/result/valid/dia.xml b/result/valid/dia.xml
new file mode 100644
index 0000000..01e3253
--- /dev/null
+++ b/result/valid/dia.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0"?>
+<!DOCTYPE dia:diagram [
+<!ELEMENT dia:diagram (dia:diagramdata , dia:layer*)>
+<!ATTLIST dia:diagram xmlns:dia CDATA #FIXED "http://www.lysator.liu.se/~alla/dia/">
+<!ELEMENT dia:diagramdata (dia:attribute)*>
+<!ELEMENT dia:layer (dia:object | dia:group)*>
+<!ATTLIST dia:layer dia:name CDATA #REQUIRED>
+<!ATTLIST dia:layer dia:visible (true | false) #REQUIRED>
+<!ELEMENT dia:object (dia:attribute* , dia:connections?)>
+<!ATTLIST dia:object dia:type CDATA #REQUIRED>
+<!ATTLIST dia:object dia:version NMTOKEN #REQUIRED>
+<!ATTLIST dia:object dia:id ID #REQUIRED>
+<!ELEMENT dia:connections (dia:connection)*>
+<!ELEMENT dia:connection EMPTY>
+<!ATTLIST dia:connection dia:handle NMTOKEN #REQUIRED>
+<!ATTLIST dia:connection dia:to IDREF #REQUIRED>
+<!ATTLIST dia:connection dia:connection NMTOKEN #REQUIRED>
+<!ELEMENT dia:group (dia:object | dia:group)*>
+<!ELEMENT dia:attribute (dia:composite | dia:int | dia:enum | dia:real | dia:boolean | dia:color | dia:point | dia:rectangle | dia:string | dia:font)*>
+<!ATTLIST dia:attribute dia:name CDATA #REQUIRED>
+<!ELEMENT dia:composite (dia:attribute)*>
+<!ATTLIST dia:composite dia:type CDATA #IMPLIED>
+<!ELEMENT dia:int EMPTY>
+<!ATTLIST dia:int dia:val NMTOKEN #REQUIRED>
+<!ELEMENT dia:enum EMPTY>
+<!ATTLIST dia:enum dia:val NMTOKEN #REQUIRED>
+<!ELEMENT dia:real EMPTY>
+<!ATTLIST dia:real dia:val CDATA #REQUIRED>
+<!ELEMENT dia:boolean EMPTY>
+<!ATTLIST dia:boolean dia:val (true | false) #REQUIRED>
+<!ELEMENT dia:color EMPTY>
+<!ATTLIST dia:color dia:val CDATA #REQUIRED>
+<!ELEMENT dia:point EMPTY>
+<!ATTLIST dia:point dia:val CDATA #REQUIRED>
+<!ELEMENT dia:rectangle EMPTY>
+<!ATTLIST dia:rectangle dia:val CDATA #REQUIRED>
+<!ELEMENT dia:string EMPTY>
+<!ATTLIST dia:string dia:val CDATA #IMPLIED>
+<!ELEMENT dia:font EMPTY>
+<!ATTLIST dia:font dia:name CDATA #REQUIRED>
+]>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute dia:name="background">
+ <dia:color dia:val="#ffffff"/>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer dia:name="Background" dia:visible="true">
+ <dia:object dia:type="Standard - Line" dia:version="0" dia:id="O0">
+ <dia:attribute dia:name="obj_pos">
+ <dia:point dia:val="1.95,6.85"/>
+ </dia:attribute>
+ <dia:attribute dia:name="obj_bb">
+ <dia:rectangle dia:val="1.9,6.8;11,8.55"/>
+ </dia:attribute>
+ <dia:attribute dia:name="conn_endpoints">
+ <dia:point dia:val="1.95,6.85"/>
+ <dia:point dia:val="10.95,8.5"/>
+ </dia:attribute>
+ <dia:attribute dia:name="line_color">
+ <dia:color dia:val="#000000"/>
+ </dia:attribute>
+ <dia:attribute dia:name="line_width">
+ <dia:real dia:val="0.1"/>
+ </dia:attribute>
+ <dia:attribute dia:name="line_style">
+ <dia:enum dia:val="0"/>
+ </dia:attribute>
+ <dia:attribute dia:name="start_arrow">
+ <dia:enum dia:val="0"/>
+ </dia:attribute>
+ <dia:attribute dia:name="end_arrow">
+ <dia:enum dia:val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection dia:handle="1" dia:to="O2" dia:connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object dia:type="Standard - Text" dia:version="0" dia:id="O1">
+ <dia:attribute dia:name="obj_pos">
+ <dia:point dia:val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute dia:name="obj_bb">
+ <dia:rectangle dia:val="2.579,3.96359;7.021,4.96359"/>
+ </dia:attribute>
+ <dia:attribute dia:name="text">
+ <dia:composite dia:type="text">
+ <dia:attribute dia:name="string">
+ <dia:string dia:val="sdfsdfg"/>
+ </dia:attribute>
+ <dia:attribute dia:name="font">
+ <dia:font dia:name="Courier"/>
+ </dia:attribute>
+ <dia:attribute dia:name="height">
+ <dia:real dia:val="1"/>
+ </dia:attribute>
+ <dia:attribute dia:name="pos">
+ <dia:point dia:val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute dia:name="color">
+ <dia:color dia:val="#000000"/>
+ </dia:attribute>
+ <dia:attribute dia:name="alignment">
+ <dia:enum dia:val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ </dia:object>
+ <dia:object dia:type="Standard - Box" dia:version="0" dia:id="O2">
+ <dia:attribute dia:name="obj_pos">
+ <dia:point dia:val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute dia:name="obj_bb">
+ <dia:rectangle dia:val="10.9,7.45;13.05,9.55"/>
+ </dia:attribute>
+ <dia:attribute dia:name="elem_corner">
+ <dia:point dia:val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute dia:name="elem_width">
+ <dia:real dia:val="2.05"/>
+ </dia:attribute>
+ <dia:attribute dia:name="elem_height">
+ <dia:real dia:val="2"/>
+ </dia:attribute>
+ <dia:attribute dia:name="border_width">
+ <dia:real dia:val="0.1"/>
+ </dia:attribute>
+ <dia:attribute dia:name="border_color">
+ <dia:color dia:val="#000000"/>
+ </dia:attribute>
+ <dia:attribute dia:name="inner_color">
+ <dia:color dia:val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute dia:name="line_style">
+ <dia:enum dia:val="0"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/result/valid/dia.xml.err b/result/valid/dia.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/dia.xml.err
diff --git a/result/valid/id1.xml b/result/valid/id1.xml
new file mode 100644
index 0000000..4f0b9f7
--- /dev/null
+++ b/result/valid/id1.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (src | dest)*>
+<!ELEMENT src EMPTY>
+<!ELEMENT dest EMPTY>
+<!ATTLIST src ref IDREF #IMPLIED>
+<!ATTLIST dest id ID #IMPLIED>
+]>
+<doc>
+ <src ref="foo"/>
+ <dest id="foo"/>
+ <src ref="foo"/>
+</doc>
diff --git a/result/valid/id1.xml.err b/result/valid/id1.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/id1.xml.err
diff --git a/result/valid/id2.xml b/result/valid/id2.xml
new file mode 100644
index 0000000..0cef4a6
--- /dev/null
+++ b/result/valid/id2.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (src | dest)*>
+<!ELEMENT src EMPTY>
+<!ELEMENT dest EMPTY>
+<!ATTLIST src ref IDREF #IMPLIED>
+<!ATTLIST dest id ID #IMPLIED>
+<!ENTITY dest "<dest id='foo'/>">
+]>
+<doc>
+ <src ref="foo"/>
+ &dest;
+ <src ref="foo"/>
+</doc>
diff --git a/result/valid/id2.xml.err b/result/valid/id2.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/id2.xml.err
diff --git a/result/valid/id3.xml b/result/valid/id3.xml
new file mode 100644
index 0000000..623603c
--- /dev/null
+++ b/result/valid/id3.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (src | dest)*>
+<!ELEMENT src EMPTY>
+<!ELEMENT dest EMPTY>
+<!ATTLIST src ref IDREF #IMPLIED>
+<!ATTLIST dest id ID #IMPLIED>
+<!ENTITY dest SYSTEM "dtds/destfoo.ent">
+]>
+<doc>
+ <src ref="foo"/>
+ &dest;
+ <src ref="foo"/>
+</doc>
diff --git a/result/valid/id3.xml.err b/result/valid/id3.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/id3.xml.err
diff --git a/result/valid/index.xml b/result/valid/index.xml
new file mode 100644
index 0000000..734fa4d
--- /dev/null
+++ b/result/valid/index.xml
@@ -0,0 +1,808 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE NewsML PUBLIC "urn:newsml:iptc.org:20001006:NewsMLv1.0:1" "dtds/NewsMLv1.0.dtd" [
+<!ENTITY % nitf SYSTEM "dtds/nitf-2-5.dtd">
+<!--
+ News Industry Text Format
+ Document Type Definition - Version 2.5
+ http://www.nitf.org/
+
+ Copyright (c) 2000. All Rights Reserved.
+ International Press Telecommunications Council
+ http://www.iptc.org
+
+ Last changed: 9 August 2000 wb/kr/ak
+
+ For the list of modifications from previous releases, see:
+ http://www.nitf.org/recent-modifications.html
+
+ For the list of proposed modifications, see:
+ http://www.nitf.org/proposed-changes.html
+--><!ENTITY % enriched-text "
+ #PCDATA
+ | chron
+ | copyrite
+ | event
+ | function
+ | location
+ | money
+ | num
+ | object.title
+ | org
+ | person
+ | postaddr
+ | virtloc
+ | a
+ | br
+ | em
+ | lang
+ | pronounce
+ | q
+ ">
+<!ENTITY % block.head "dateline?, copyrite?, abstract?">
+<!ENTITY % block.content "p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr">
+<!ENTITY % block.end "datasource?">
+<!ENTITY % global-attributes "
+ id ID #IMPLIED
+ ">
+<!ENTITY % common-attributes "
+ %global-attributes;
+ class NMTOKENS #IMPLIED
+ style CDATA #IMPLIED
+ lang NMTOKEN #IMPLIED
+ dir (ltr | rtl) #IMPLIED
+ ">
+<!ENTITY % cell.align "
+ align (left | center | right | justify | char) #IMPLIED
+ char CDATA #IMPLIED
+ charoff CDATA #IMPLIED
+ ">
+<!ENTITY % cell.valign "
+ valign (top | middle | bottom | baseline) #IMPLIED
+ ">
+<!ENTITY % url.link "
+ md CDATA #IMPLIED
+ ">
+<!ENTITY % boolean "(true | false)">
+<!ELEMENT nitf (head , body)>
+<!ATTLIST nitf id ID #IMPLIED>
+<!ATTLIST nitf uno CDATA #IMPLIED>
+<!ATTLIST nitf version CDATA #FIXED "-//IPTC-NAA//DTD NITF-XML 2.1//EN">
+<!ATTLIST nitf change.date CDATA #FIXED "4 July 2000">
+<!ATTLIST nitf change.time CDATA #FIXED "1900">
+<!ATTLIST nitf baselang CDATA #IMPLIED>
+<!ATTLIST nitf class NMTOKENS #IMPLIED>
+<!ELEMENT head (title? , meta* , tobject? , iim? , docdata? , pubdata* , revision-history*)>
+<!ATTLIST head id ID #IMPLIED>
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title id ID #IMPLIED>
+<!ATTLIST title type (main | subtitle | parttitle | alternate | abbrev | other) #IMPLIED>
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta id ID #IMPLIED>
+<!ATTLIST meta http-equiv NMTOKEN #IMPLIED>
+<!ATTLIST meta name NMTOKEN #IMPLIED>
+<!ATTLIST meta content CDATA #REQUIRED>
+<!ELEMENT tobject (tobject.property* , tobject.subject*)>
+<!ATTLIST tobject id ID #IMPLIED>
+<!ATTLIST tobject tobject.type CDATA "news">
+<!ELEMENT tobject.property EMPTY>
+<!ATTLIST tobject.property id ID #IMPLIED>
+<!ATTLIST tobject.property tobject.property.type CDATA "current">
+<!ELEMENT tobject.subject EMPTY>
+<!ATTLIST tobject.subject id ID #IMPLIED>
+<!ATTLIST tobject.subject tobject.subject.ipr CDATA "IPTC">
+<!ATTLIST tobject.subject tobject.subject.refnum NMTOKEN #REQUIRED>
+<!ATTLIST tobject.subject tobject.subject.code CDATA #IMPLIED>
+<!ATTLIST tobject.subject tobject.subject.type CDATA #IMPLIED>
+<!ATTLIST tobject.subject tobject.subject.matter CDATA #IMPLIED>
+<!ATTLIST tobject.subject tobject.subject.detail CDATA #IMPLIED>
+<!ELEMENT iim (ds)*>
+<!ATTLIST iim id ID #IMPLIED>
+<!ATTLIST iim ver NMTOKEN #IMPLIED>
+<!ELEMENT ds EMPTY>
+<!ATTLIST ds id ID #IMPLIED>
+<!ATTLIST ds num NMTOKEN #REQUIRED>
+<!ATTLIST ds value CDATA #IMPLIED>
+<!ELEMENT docdata (correction | evloc | doc-id | del-list | urgency | fixture | date.issue | date.release | date.expire | doc-scope | series | ed-msg | du-key | doc.copyright | doc.rights | key-list)*>
+<!ATTLIST docdata id ID #IMPLIED>
+<!ELEMENT correction EMPTY>
+<!ATTLIST correction id ID #IMPLIED>
+<!ATTLIST correction info CDATA #IMPLIED>
+<!ATTLIST correction id-string CDATA #IMPLIED>
+<!ATTLIST correction reg-src CDATA #IMPLIED>
+<!ELEMENT evloc EMPTY>
+<!ATTLIST evloc id ID #IMPLIED>
+<!ATTLIST evloc iso-cc CDATA #IMPLIED>
+<!ATTLIST evloc state-prov CDATA #IMPLIED>
+<!ATTLIST evloc county-dist CDATA #IMPLIED>
+<!ATTLIST evloc city CDATA #IMPLIED>
+<!ELEMENT doc-id EMPTY>
+<!ATTLIST doc-id id ID #IMPLIED>
+<!ATTLIST doc-id regsrc CDATA #IMPLIED>
+<!ATTLIST doc-id id-string CDATA #IMPLIED>
+<!ELEMENT del-list (from-src)*>
+<!ATTLIST del-list id ID #IMPLIED>
+<!ELEMENT from-src EMPTY>
+<!ATTLIST from-src id ID #IMPLIED>
+<!ATTLIST from-src src-name CDATA #IMPLIED>
+<!ATTLIST from-src level-number CDATA #IMPLIED>
+<!ELEMENT urgency EMPTY>
+<!ATTLIST urgency id ID #IMPLIED>
+<!ATTLIST urgency ed-urg NMTOKEN #IMPLIED>
+<!ELEMENT fixture EMPTY>
+<!ATTLIST fixture id ID #IMPLIED>
+<!ATTLIST fixture fix-id CDATA #IMPLIED>
+<!ELEMENT date.issue EMPTY>
+<!ATTLIST date.issue id ID #IMPLIED>
+<!ATTLIST date.issue norm CDATA #IMPLIED>
+<!ELEMENT date.release EMPTY>
+<!ATTLIST date.release id ID #IMPLIED>
+<!ATTLIST date.release norm CDATA #IMPLIED>
+<!ELEMENT date.expire EMPTY>
+<!ATTLIST date.expire id ID #IMPLIED>
+<!ATTLIST date.expire norm CDATA #IMPLIED>
+<!ELEMENT doc-scope EMPTY>
+<!ATTLIST doc-scope id ID #IMPLIED>
+<!ATTLIST doc-scope scope CDATA #IMPLIED>
+<!ELEMENT series EMPTY>
+<!ATTLIST series id ID #IMPLIED>
+<!ATTLIST series series.name CDATA #IMPLIED>
+<!ATTLIST series series.part NMTOKEN "0">
+<!ATTLIST series series.totalpart NMTOKEN "0">
+<!ELEMENT ed-msg EMPTY>
+<!ATTLIST ed-msg id ID #IMPLIED>
+<!ATTLIST ed-msg msg-type CDATA #IMPLIED>
+<!ATTLIST ed-msg info CDATA #IMPLIED>
+<!ELEMENT du-key EMPTY>
+<!ATTLIST du-key id ID #IMPLIED>
+<!ATTLIST du-key generation NMTOKEN #IMPLIED>
+<!ATTLIST du-key part NMTOKEN #IMPLIED>
+<!ATTLIST du-key version NMTOKEN #IMPLIED>
+<!ATTLIST du-key key CDATA #IMPLIED>
+<!ELEMENT doc.copyright EMPTY>
+<!ATTLIST doc.copyright id ID #IMPLIED>
+<!ATTLIST doc.copyright year NMTOKEN #IMPLIED>
+<!ATTLIST doc.copyright holder CDATA #IMPLIED>
+<!ELEMENT doc.rights EMPTY>
+<!ATTLIST doc.rights id ID #IMPLIED>
+<!ATTLIST doc.rights owner CDATA #IMPLIED>
+<!ATTLIST doc.rights startdate CDATA #IMPLIED>
+<!ATTLIST doc.rights enddate CDATA #IMPLIED>
+<!ATTLIST doc.rights agent CDATA #IMPLIED>
+<!ATTLIST doc.rights geography CDATA #IMPLIED>
+<!ATTLIST doc.rights location-code CDATA #IMPLIED>
+<!ATTLIST doc.rights code-source CDATA #IMPLIED>
+<!ATTLIST doc.rights type CDATA #IMPLIED>
+<!ATTLIST doc.rights limitations CDATA #IMPLIED>
+<!ELEMENT key-list (keyword)*>
+<!ATTLIST key-list id ID #IMPLIED>
+<!ELEMENT keyword EMPTY>
+<!ATTLIST keyword id ID #IMPLIED>
+<!ATTLIST keyword key CDATA #IMPLIED>
+<!ELEMENT pubdata EMPTY>
+<!ATTLIST pubdata id ID #IMPLIED>
+<!ATTLIST pubdata type (print | audio | video | web | appliance | other) #IMPLIED>
+<!ATTLIST pubdata item-length CDATA #IMPLIED>
+<!ATTLIST pubdata unit-of-measure (word | character | byte | inch | pica | cm | hour | minute | second | other) #IMPLIED>
+<!ATTLIST pubdata date.publication CDATA #IMPLIED>
+<!ATTLIST pubdata name CDATA #IMPLIED>
+<!ATTLIST pubdata issn CDATA #IMPLIED>
+<!ATTLIST pubdata volume CDATA #IMPLIED>
+<!ATTLIST pubdata number CDATA #IMPLIED>
+<!ATTLIST pubdata issue CDATA #IMPLIED>
+<!ATTLIST pubdata edition.name CDATA #IMPLIED>
+<!ATTLIST pubdata edition.area CDATA #IMPLIED>
+<!ATTLIST pubdata position.section CDATA #IMPLIED>
+<!ATTLIST pubdata position.sequence CDATA #IMPLIED>
+<!ATTLIST pubdata ex-ref CDATA #IMPLIED>
+<!ELEMENT revision-history EMPTY>
+<!ATTLIST revision-history id ID #IMPLIED>
+<!ATTLIST revision-history name CDATA #IMPLIED>
+<!ATTLIST revision-history function (writer-author | editor | producer | archivist | videographer | graphic-artist | photographer | statistician | other) #IMPLIED>
+<!ATTLIST revision-history norm CDATA #IMPLIED>
+<!ATTLIST revision-history comment CDATA #IMPLIED>
+<!ELEMENT body (body.head? , body.content* , body.end?)>
+<!ATTLIST body id ID #IMPLIED>
+<!ATTLIST body class NMTOKENS #IMPLIED>
+<!ATTLIST body style CDATA #IMPLIED>
+<!ATTLIST body lang NMTOKEN #IMPLIED>
+<!ATTLIST body dir (ltr | rtl) #IMPLIED>
+<!ATTLIST body background CDATA #IMPLIED>
+<!ELEMENT body.head (hedline? , note* , rights? , byline* , distributor? , dateline* , abstract? , series?)>
+<!ATTLIST body.head id ID #IMPLIED>
+<!ELEMENT hedline (hl1 , hl2*)>
+<!ATTLIST hedline id ID #IMPLIED>
+<!ELEMENT hl1 (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST hl1 id ID #IMPLIED>
+<!ATTLIST hl1 class NMTOKENS #IMPLIED>
+<!ATTLIST hl1 style CDATA #IMPLIED>
+<!ATTLIST hl1 lang NMTOKEN #IMPLIED>
+<!ATTLIST hl1 dir (ltr | rtl) #IMPLIED>
+<!ELEMENT hl2 (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST hl2 id ID #IMPLIED>
+<!ATTLIST hl2 class NMTOKENS #IMPLIED>
+<!ATTLIST hl2 style CDATA #IMPLIED>
+<!ATTLIST hl2 lang NMTOKEN #IMPLIED>
+<!ATTLIST hl2 dir (ltr | rtl) #IMPLIED>
+<!ELEMENT note (body.content)+>
+<!ATTLIST note id ID #IMPLIED>
+<!ATTLIST note class NMTOKENS #IMPLIED>
+<!ATTLIST note style CDATA #IMPLIED>
+<!ATTLIST note lang NMTOKEN #IMPLIED>
+<!ATTLIST note dir (ltr | rtl) #IMPLIED>
+<!ATTLIST note noteclass (cpyrt | end | hd | editorsnote | trademk | undef) #IMPLIED>
+<!ATTLIST note type (std | pa | npa) "std">
+<!ATTLIST note src CDATA #IMPLIED>
+<!ATTLIST note md CDATA #IMPLIED>
+<!ELEMENT rights (#PCDATA | rights.owner | rights.startdate | rights.enddate | rights.agent | rights.geography | rights.type | rights.limitations)*>
+<!ATTLIST rights id ID #IMPLIED>
+<!ELEMENT rights.owner (#PCDATA)>
+<!ATTLIST rights.owner id ID #IMPLIED>
+<!ATTLIST rights.owner contact CDATA #IMPLIED>
+<!ELEMENT rights.startdate (#PCDATA)>
+<!ATTLIST rights.startdate id ID #IMPLIED>
+<!ATTLIST rights.startdate norm CDATA #IMPLIED>
+<!ELEMENT rights.enddate (#PCDATA)>
+<!ATTLIST rights.enddate id ID #IMPLIED>
+<!ATTLIST rights.enddate norm CDATA #IMPLIED>
+<!ELEMENT rights.agent (#PCDATA)>
+<!ATTLIST rights.agent id ID #IMPLIED>
+<!ATTLIST rights.agent contact CDATA #IMPLIED>
+<!ELEMENT rights.geography (#PCDATA)>
+<!ATTLIST rights.geography id ID #IMPLIED>
+<!ATTLIST rights.geography location-code CDATA #IMPLIED>
+<!ATTLIST rights.geography code-source CDATA #IMPLIED>
+<!ELEMENT rights.type (#PCDATA)>
+<!ATTLIST rights.type id ID #IMPLIED>
+<!ELEMENT rights.limitations (#PCDATA)>
+<!ATTLIST rights.limitations id ID #IMPLIED>
+<!ELEMENT byline (#PCDATA | person | byttl | location | virtloc)*>
+<!ATTLIST byline id ID #IMPLIED>
+<!ELEMENT byttl (#PCDATA | org)*>
+<!ATTLIST byttl id ID #IMPLIED>
+<!ELEMENT distributor (#PCDATA | org)*>
+<!ATTLIST distributor id ID #IMPLIED>
+<!ELEMENT dateline (#PCDATA | location | story.date)*>
+<!ATTLIST dateline id ID #IMPLIED>
+<!ATTLIST dateline class NMTOKENS #IMPLIED>
+<!ATTLIST dateline style CDATA #IMPLIED>
+<!ATTLIST dateline lang NMTOKEN #IMPLIED>
+<!ATTLIST dateline dir (ltr | rtl) #IMPLIED>
+<!ELEMENT story.date (#PCDATA)>
+<!ATTLIST story.date id ID #IMPLIED>
+<!ATTLIST story.date norm CDATA #IMPLIED>
+<!ELEMENT abstract (p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)+>
+<!ATTLIST abstract id ID #IMPLIED>
+<!ELEMENT copyrite (#PCDATA | copyrite.year | copyrite.holder)*>
+<!ATTLIST copyrite id ID #IMPLIED>
+<!ELEMENT copyrite.year (#PCDATA)>
+<!ATTLIST copyrite.year id ID #IMPLIED>
+<!ELEMENT copyrite.holder (#PCDATA)>
+<!ATTLIST copyrite.holder id ID #IMPLIED>
+<!ELEMENT body.content (block | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*>
+<!ATTLIST body.content id ID #IMPLIED>
+<!ELEMENT block ((dateline? , copyrite? , abstract?)? , (p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)* , datasource?)>
+<!ATTLIST block id ID #IMPLIED>
+<!ATTLIST block class NMTOKENS #IMPLIED>
+<!ATTLIST block style CDATA #IMPLIED>
+<!ATTLIST block lang NMTOKEN #IMPLIED>
+<!ATTLIST block dir (ltr | rtl) #IMPLIED>
+<!ELEMENT p (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST p id ID #IMPLIED>
+<!ATTLIST p class NMTOKENS #IMPLIED>
+<!ATTLIST p style CDATA #IMPLIED>
+<!ATTLIST p lang NMTOKEN #IMPLIED>
+<!ATTLIST p dir (ltr | rtl) #IMPLIED>
+<!ATTLIST p lede (true | false) #IMPLIED>
+<!ATTLIST p summary (true | false) #IMPLIED>
+<!ATTLIST p optional-text (true | false) #IMPLIED>
+<!ELEMENT table (caption? , (col* | colgroup*) , thead? , tfoot? , tbody+)>
+<!ATTLIST table id ID #IMPLIED>
+<!ATTLIST table class NMTOKENS #IMPLIED>
+<!ATTLIST table style CDATA #IMPLIED>
+<!ATTLIST table lang NMTOKEN #IMPLIED>
+<!ATTLIST table dir (ltr | rtl) #IMPLIED>
+<!ATTLIST table tabletype ENTITY #IMPLIED>
+<!ATTLIST table align (left | center | right) #IMPLIED>
+<!ATTLIST table width CDATA #IMPLIED>
+<!ATTLIST table cols NMTOKEN #IMPLIED>
+<!ATTLIST table border CDATA #IMPLIED>
+<!ATTLIST table frame (void | above | below | hsides | lhs | rhs | vsides | box | border) #IMPLIED>
+<!ATTLIST table rules (none | basic | rows | cols | all) #IMPLIED>
+<!ATTLIST table cellspacing CDATA #IMPLIED>
+<!ATTLIST table cellpadding CDATA #IMPLIED>
+<!ATTLIST table table.fmt CDATA #IMPLIED>
+<!ATTLIST table table.domain CDATA #IMPLIED>
+<!ATTLIST table table.inst CDATA #IMPLIED>
+<!ELEMENT media (media-metadata* , media-reference , media-object? , media-caption* , media-producer?)>
+<!ATTLIST media id ID #IMPLIED>
+<!ATTLIST media class NMTOKENS #IMPLIED>
+<!ATTLIST media style CDATA #IMPLIED>
+<!ATTLIST media lang NMTOKEN #IMPLIED>
+<!ATTLIST media dir (ltr | rtl) #IMPLIED>
+<!ATTLIST media media-type (text | audio | image | video | data | application | other) #REQUIRED>
+<!ELEMENT media-reference (#PCDATA)>
+<!ATTLIST media-reference id ID #IMPLIED>
+<!ATTLIST media-reference class NMTOKENS #IMPLIED>
+<!ATTLIST media-reference style CDATA #IMPLIED>
+<!ATTLIST media-reference lang NMTOKEN #IMPLIED>
+<!ATTLIST media-reference dir (ltr | rtl) #IMPLIED>
+<!ATTLIST media-reference data-location CDATA #REQUIRED>
+<!ATTLIST media-reference name CDATA #IMPLIED>
+<!ATTLIST media-reference source CDATA #IMPLIED>
+<!ATTLIST media-reference mime-type CDATA #REQUIRED>
+<!ATTLIST media-reference coding CDATA #IMPLIED>
+<!ATTLIST media-reference time CDATA #IMPLIED>
+<!ATTLIST media-reference time-unit-of-measure CDATA #IMPLIED>
+<!ATTLIST media-reference outcue CDATA #IMPLIED>
+<!ATTLIST media-reference source-credit CDATA #IMPLIED>
+<!ATTLIST media-reference copyright CDATA #IMPLIED>
+<!ATTLIST media-reference alternate-text CDATA #IMPLIED>
+<!ATTLIST media-reference height NMTOKEN #IMPLIED>
+<!ATTLIST media-reference width NMTOKEN #IMPLIED>
+<!ATTLIST media-reference units (pixels) "pixels">
+<!ATTLIST media-reference imagemap CDATA #IMPLIED>
+<!ATTLIST media-reference noflow (noflow) #IMPLIED>
+<!ELEMENT media-metadata EMPTY>
+<!ATTLIST media-metadata id ID #IMPLIED>
+<!ATTLIST media-metadata class NMTOKENS #IMPLIED>
+<!ATTLIST media-metadata style CDATA #IMPLIED>
+<!ATTLIST media-metadata lang NMTOKEN #IMPLIED>
+<!ATTLIST media-metadata dir (ltr | rtl) #IMPLIED>
+<!ATTLIST media-metadata name CDATA #REQUIRED>
+<!ATTLIST media-metadata value CDATA #IMPLIED>
+<!ELEMENT media-object (#PCDATA)>
+<!ATTLIST media-object id ID #IMPLIED>
+<!ATTLIST media-object class NMTOKENS #IMPLIED>
+<!ATTLIST media-object style CDATA #IMPLIED>
+<!ATTLIST media-object lang NMTOKEN #IMPLIED>
+<!ATTLIST media-object dir (ltr | rtl) #IMPLIED>
+<!ATTLIST media-object encoding CDATA #REQUIRED>
+<!ELEMENT media-caption (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*>
+<!ATTLIST media-caption id ID #IMPLIED>
+<!ATTLIST media-caption class NMTOKENS #IMPLIED>
+<!ATTLIST media-caption style CDATA #IMPLIED>
+<!ATTLIST media-caption lang NMTOKEN #IMPLIED>
+<!ATTLIST media-caption dir (ltr | rtl) #IMPLIED>
+<!ELEMENT media-producer (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST media-producer id ID #IMPLIED>
+<!ATTLIST media-producer class NMTOKENS #IMPLIED>
+<!ATTLIST media-producer style CDATA #IMPLIED>
+<!ATTLIST media-producer lang NMTOKEN #IMPLIED>
+<!ATTLIST media-producer dir (ltr | rtl) #IMPLIED>
+<!ELEMENT ol (li)+>
+<!ATTLIST ol id ID #IMPLIED>
+<!ATTLIST ol class NMTOKENS #IMPLIED>
+<!ATTLIST ol style CDATA #IMPLIED>
+<!ATTLIST ol lang NMTOKEN #IMPLIED>
+<!ATTLIST ol dir (ltr | rtl) #IMPLIED>
+<!ATTLIST ol continue (continue) #IMPLIED>
+<!ATTLIST ol seqnum NMTOKEN #IMPLIED>
+<!ATTLIST ol compact (compact) #IMPLIED>
+<!ELEMENT ul (li)+>
+<!ATTLIST ul id ID #IMPLIED>
+<!ATTLIST ul class NMTOKENS #IMPLIED>
+<!ATTLIST ul style CDATA #IMPLIED>
+<!ATTLIST ul lang NMTOKEN #IMPLIED>
+<!ATTLIST ul dir (ltr | rtl) #IMPLIED>
+<!ATTLIST ul wrap (vert | horiz | none) "none">
+<!ATTLIST ul plain (plain) #IMPLIED>
+<!ATTLIST ul dingbat ENTITY #IMPLIED>
+<!ATTLIST ul src CDATA #IMPLIED>
+<!ATTLIST ul md CDATA #IMPLIED>
+<!ATTLIST ul compact (compact) #IMPLIED>
+<!ELEMENT li (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*>
+<!ATTLIST li id ID #IMPLIED>
+<!ATTLIST li class NMTOKENS #IMPLIED>
+<!ATTLIST li style CDATA #IMPLIED>
+<!ATTLIST li lang NMTOKEN #IMPLIED>
+<!ATTLIST li dir (ltr | rtl) #IMPLIED>
+<!ATTLIST li dingbat ENTITY #IMPLIED>
+<!ATTLIST li src CDATA #IMPLIED>
+<!ATTLIST li md CDATA #IMPLIED>
+<!ATTLIST li skip NMTOKEN "0">
+<!ELEMENT dl (dt | dd)+>
+<!ATTLIST dl id ID #IMPLIED>
+<!ATTLIST dl class NMTOKENS #IMPLIED>
+<!ATTLIST dl style CDATA #IMPLIED>
+<!ATTLIST dl lang NMTOKEN #IMPLIED>
+<!ATTLIST dl dir (ltr | rtl) #IMPLIED>
+<!ELEMENT dt (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST dt id ID #IMPLIED>
+<!ATTLIST dt class NMTOKENS #IMPLIED>
+<!ATTLIST dt style CDATA #IMPLIED>
+<!ATTLIST dt lang NMTOKEN #IMPLIED>
+<!ATTLIST dt dir (ltr | rtl) #IMPLIED>
+<!ELEMENT dd (block)*>
+<!ATTLIST dd id ID #IMPLIED>
+<!ATTLIST dd class NMTOKENS #IMPLIED>
+<!ATTLIST dd style CDATA #IMPLIED>
+<!ATTLIST dd lang NMTOKEN #IMPLIED>
+<!ATTLIST dd dir (ltr | rtl) #IMPLIED>
+<!ELEMENT bq (block+ , credit?)*>
+<!ATTLIST bq id ID #IMPLIED>
+<!ATTLIST bq class NMTOKENS #IMPLIED>
+<!ATTLIST bq style CDATA #IMPLIED>
+<!ATTLIST bq lang NMTOKEN #IMPLIED>
+<!ATTLIST bq dir (ltr | rtl) #IMPLIED>
+<!ATTLIST bq nowrap (nowrap) #IMPLIED>
+<!ATTLIST bq quote-source CDATA #IMPLIED>
+<!ELEMENT credit (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST credit id ID #IMPLIED>
+<!ATTLIST credit class NMTOKENS #IMPLIED>
+<!ATTLIST credit style CDATA #IMPLIED>
+<!ATTLIST credit lang NMTOKEN #IMPLIED>
+<!ATTLIST credit dir (ltr | rtl) #IMPLIED>
+<!ELEMENT fn (body.content)+>
+<!ATTLIST fn id ID #IMPLIED>
+<!ATTLIST fn class NMTOKENS #IMPLIED>
+<!ATTLIST fn style CDATA #IMPLIED>
+<!ATTLIST fn lang NMTOKEN #IMPLIED>
+<!ATTLIST fn dir (ltr | rtl) #IMPLIED>
+<!ELEMENT pre (#PCDATA)>
+<!ATTLIST pre id ID #IMPLIED>
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr id ID #IMPLIED>
+<!ATTLIST hr src CDATA #IMPLIED>
+<!ELEMENT datasource (#PCDATA)>
+<!ATTLIST datasource id ID #IMPLIED>
+<!ELEMENT caption (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*>
+<!ATTLIST caption id ID #IMPLIED>
+<!ATTLIST caption class NMTOKENS #IMPLIED>
+<!ATTLIST caption style CDATA #IMPLIED>
+<!ATTLIST caption lang NMTOKEN #IMPLIED>
+<!ATTLIST caption dir (ltr | rtl) #IMPLIED>
+<!ATTLIST caption align (top | bottom | left | right) #IMPLIED>
+<!ELEMENT col EMPTY>
+<!ATTLIST col id ID #IMPLIED>
+<!ATTLIST col class NMTOKENS #IMPLIED>
+<!ATTLIST col style CDATA #IMPLIED>
+<!ATTLIST col lang NMTOKEN #IMPLIED>
+<!ATTLIST col dir (ltr | rtl) #IMPLIED>
+<!ATTLIST col span NMTOKEN "1">
+<!ATTLIST col width CDATA #IMPLIED>
+<!ATTLIST col align (left | center | right | justify | char) #IMPLIED>
+<!ATTLIST col char CDATA #IMPLIED>
+<!ATTLIST col charoff CDATA #IMPLIED>
+<!ATTLIST col valign (top | middle | bottom | baseline) #IMPLIED>
+<!ELEMENT colgroup (col)+>
+<!ATTLIST colgroup id ID #IMPLIED>
+<!ATTLIST colgroup class NMTOKENS #IMPLIED>
+<!ATTLIST colgroup style CDATA #IMPLIED>
+<!ATTLIST colgroup lang NMTOKEN #IMPLIED>
+<!ATTLIST colgroup dir (ltr | rtl) #IMPLIED>
+<!ATTLIST colgroup align (left | center | right | justify | char) #IMPLIED>
+<!ATTLIST colgroup char CDATA #IMPLIED>
+<!ATTLIST colgroup charoff CDATA #IMPLIED>
+<!ATTLIST colgroup valign (top | middle | bottom | baseline) #IMPLIED>
+<!ELEMENT thead (tr)+>
+<!ATTLIST thead id ID #IMPLIED>
+<!ATTLIST thead class NMTOKENS #IMPLIED>
+<!ATTLIST thead style CDATA #IMPLIED>
+<!ATTLIST thead lang NMTOKEN #IMPLIED>
+<!ATTLIST thead dir (ltr | rtl) #IMPLIED>
+<!ATTLIST thead align (left | center | right | justify | char) #IMPLIED>
+<!ATTLIST thead char CDATA #IMPLIED>
+<!ATTLIST thead charoff CDATA #IMPLIED>
+<!ATTLIST thead valign (top | middle | bottom | baseline) #IMPLIED>
+<!ELEMENT tbody (tr)+>
+<!ATTLIST tbody id ID #IMPLIED>
+<!ATTLIST tbody class NMTOKENS #IMPLIED>
+<!ATTLIST tbody style CDATA #IMPLIED>
+<!ATTLIST tbody lang NMTOKEN #IMPLIED>
+<!ATTLIST tbody dir (ltr | rtl) #IMPLIED>
+<!ATTLIST tbody align (left | center | right | justify | char) #IMPLIED>
+<!ATTLIST tbody char CDATA #IMPLIED>
+<!ATTLIST tbody charoff CDATA #IMPLIED>
+<!ATTLIST tbody valign (top | middle | bottom | baseline) #IMPLIED>
+<!ELEMENT tfoot (tr)+>
+<!ATTLIST tfoot id ID #IMPLIED>
+<!ATTLIST tfoot class NMTOKENS #IMPLIED>
+<!ATTLIST tfoot style CDATA #IMPLIED>
+<!ATTLIST tfoot lang NMTOKEN #IMPLIED>
+<!ATTLIST tfoot dir (ltr | rtl) #IMPLIED>
+<!ATTLIST tfoot align (left | center | right | justify | char) #IMPLIED>
+<!ATTLIST tfoot char CDATA #IMPLIED>
+<!ATTLIST tfoot charoff CDATA #IMPLIED>
+<!ATTLIST tfoot valign (top | middle | bottom | baseline) #IMPLIED>
+<!ELEMENT tr (th | td)+>
+<!ATTLIST tr id ID #IMPLIED>
+<!ATTLIST tr class NMTOKENS #IMPLIED>
+<!ATTLIST tr style CDATA #IMPLIED>
+<!ATTLIST tr lang NMTOKEN #IMPLIED>
+<!ATTLIST tr dir (ltr | rtl) #IMPLIED>
+<!ATTLIST tr align (left | center | right | justify | char) #IMPLIED>
+<!ATTLIST tr char CDATA #IMPLIED>
+<!ATTLIST tr charoff CDATA #IMPLIED>
+<!ATTLIST tr valign (top | middle | bottom | baseline) #IMPLIED>
+<!ELEMENT th (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*>
+<!ATTLIST th id ID #IMPLIED>
+<!ATTLIST th class NMTOKENS #IMPLIED>
+<!ATTLIST th style CDATA #IMPLIED>
+<!ATTLIST th lang NMTOKEN #IMPLIED>
+<!ATTLIST th dir (ltr | rtl) #IMPLIED>
+<!ATTLIST th axis CDATA #IMPLIED>
+<!ATTLIST th axes CDATA #IMPLIED>
+<!ATTLIST th nowrap (nowrap) #IMPLIED>
+<!ATTLIST th rowspan NMTOKEN "1">
+<!ATTLIST th colspan NMTOKEN "1">
+<!ATTLIST th align (left | center | right | justify | char) #IMPLIED>
+<!ATTLIST th char CDATA #IMPLIED>
+<!ATTLIST th charoff CDATA #IMPLIED>
+<!ATTLIST th valign (top | middle | bottom | baseline) #IMPLIED>
+<!ELEMENT td (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*>
+<!ATTLIST td id ID #IMPLIED>
+<!ATTLIST td class NMTOKENS #IMPLIED>
+<!ATTLIST td style CDATA #IMPLIED>
+<!ATTLIST td lang NMTOKEN #IMPLIED>
+<!ATTLIST td dir (ltr | rtl) #IMPLIED>
+<!ATTLIST td axis CDATA #IMPLIED>
+<!ATTLIST td axes CDATA #IMPLIED>
+<!ATTLIST td nowrap (nowrap) #IMPLIED>
+<!ATTLIST td rowspan NMTOKEN "1">
+<!ATTLIST td colspan NMTOKEN "1">
+<!ATTLIST td align (left | center | right | justify | char) #IMPLIED>
+<!ATTLIST td char CDATA #IMPLIED>
+<!ATTLIST td charoff CDATA #IMPLIED>
+<!ATTLIST td valign (top | middle | bottom | baseline) #IMPLIED>
+<!ELEMENT chron (#PCDATA)>
+<!ATTLIST chron id ID #IMPLIED>
+<!ATTLIST chron norm CDATA #IMPLIED>
+<!ELEMENT event (#PCDATA | alt-code)*>
+<!ATTLIST event id ID #IMPLIED>
+<!ATTLIST event start-date CDATA #IMPLIED>
+<!ATTLIST event end-date CDATA #IMPLIED>
+<!ATTLIST event idsrc CDATA #REQUIRED>
+<!ATTLIST event value CDATA #REQUIRED>
+<!ELEMENT function (#PCDATA | alt-code)*>
+<!ATTLIST function id ID #IMPLIED>
+<!ATTLIST function idsrc CDATA #REQUIRED>
+<!ATTLIST function value CDATA #REQUIRED>
+<!ELEMENT location (#PCDATA | sublocation | city | state | region | country | alt-code)*>
+<!ATTLIST location id ID #IMPLIED>
+<!ATTLIST location location-code CDATA #IMPLIED>
+<!ATTLIST location code-source CDATA #IMPLIED>
+<!ELEMENT sublocation (#PCDATA | alt-code)*>
+<!ATTLIST sublocation id ID #IMPLIED>
+<!ATTLIST sublocation location-code CDATA #IMPLIED>
+<!ATTLIST sublocation code-source CDATA #IMPLIED>
+<!ELEMENT city (#PCDATA | alt-code)*>
+<!ATTLIST city id ID #IMPLIED>
+<!ATTLIST city city-code CDATA #IMPLIED>
+<!ATTLIST city code-source CDATA #IMPLIED>
+<!ELEMENT state (#PCDATA | alt-code)*>
+<!ATTLIST state id ID #IMPLIED>
+<!ATTLIST state state-code CDATA #IMPLIED>
+<!ATTLIST state code-source CDATA #IMPLIED>
+<!ELEMENT region (#PCDATA | alt-code)*>
+<!ATTLIST region id ID #IMPLIED>
+<!ATTLIST region region-code CDATA #IMPLIED>
+<!ATTLIST region code-source CDATA #IMPLIED>
+<!ELEMENT country (#PCDATA | alt-code)*>
+<!ATTLIST country id ID #IMPLIED>
+<!ATTLIST country iso-cc CDATA #IMPLIED>
+<!ELEMENT money (#PCDATA)>
+<!ATTLIST money id ID #IMPLIED>
+<!ATTLIST money unit CDATA #IMPLIED>
+<!ATTLIST money date CDATA #IMPLIED>
+<!ELEMENT num (#PCDATA | frac | sub | sup)*>
+<!ATTLIST num id ID #IMPLIED>
+<!ATTLIST num units CDATA #IMPLIED>
+<!ATTLIST num decimal-ch CDATA #IMPLIED>
+<!ATTLIST num thousands-ch CDATA #IMPLIED>
+<!ELEMENT frac (numer , frac-sep? , denom)>
+<!ATTLIST frac id ID #IMPLIED>
+<!ELEMENT numer (#PCDATA)>
+<!ATTLIST numer id ID #IMPLIED>
+<!ELEMENT frac-sep (#PCDATA)>
+<!ATTLIST frac-sep id ID #IMPLIED>
+<!ELEMENT denom (#PCDATA)>
+<!ATTLIST denom id ID #IMPLIED>
+<!ELEMENT sub (#PCDATA)>
+<!ATTLIST sub id ID #IMPLIED>
+<!ATTLIST sub class NMTOKENS #IMPLIED>
+<!ATTLIST sub style CDATA #IMPLIED>
+<!ATTLIST sub lang NMTOKEN #IMPLIED>
+<!ATTLIST sub dir (ltr | rtl) #IMPLIED>
+<!ELEMENT sup (#PCDATA)>
+<!ATTLIST sup id ID #IMPLIED>
+<!ATTLIST sup class NMTOKENS #IMPLIED>
+<!ATTLIST sup style CDATA #IMPLIED>
+<!ATTLIST sup lang NMTOKEN #IMPLIED>
+<!ATTLIST sup dir (ltr | rtl) #IMPLIED>
+<!ELEMENT object.title (#PCDATA | alt-code)*>
+<!ATTLIST object.title id ID #IMPLIED>
+<!ATTLIST object.title class NMTOKENS #IMPLIED>
+<!ATTLIST object.title style CDATA #IMPLIED>
+<!ATTLIST object.title lang NMTOKEN #IMPLIED>
+<!ATTLIST object.title dir (ltr | rtl) #IMPLIED>
+<!ATTLIST object.title idsrc CDATA #REQUIRED>
+<!ATTLIST object.title value CDATA #REQUIRED>
+<!ELEMENT org (#PCDATA | alt-code)*>
+<!ATTLIST org id ID #IMPLIED>
+<!ATTLIST org idsrc CDATA #REQUIRED>
+<!ATTLIST org value CDATA #REQUIRED>
+<!ELEMENT alt-code EMPTY>
+<!ATTLIST alt-code id ID #IMPLIED>
+<!ATTLIST alt-code idsrc CDATA #REQUIRED>
+<!ATTLIST alt-code value CDATA #REQUIRED>
+<!ELEMENT person (#PCDATA | name.given | name.family | function | alt-code)*>
+<!ATTLIST person id ID #IMPLIED>
+<!ATTLIST person idsrc CDATA #REQUIRED>
+<!ATTLIST person value CDATA #REQUIRED>
+<!ELEMENT name.given (#PCDATA)>
+<!ATTLIST name.given id ID #IMPLIED>
+<!ELEMENT name.family (#PCDATA)>
+<!ATTLIST name.family id ID #IMPLIED>
+<!ELEMENT postaddr (addressee , delivery.point? , (postcode | delivery.office | region | country)*)>
+<!ATTLIST postaddr id ID #IMPLIED>
+<!ELEMENT virtloc (#PCDATA | alt-code)*>
+<!ATTLIST virtloc id ID #IMPLIED>
+<!ATTLIST virtloc idsrc CDATA #REQUIRED>
+<!ATTLIST virtloc value CDATA #REQUIRED>
+<!ELEMENT a (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST a id ID #IMPLIED>
+<!ATTLIST a class NMTOKENS #IMPLIED>
+<!ATTLIST a style CDATA #IMPLIED>
+<!ATTLIST a lang NMTOKEN #IMPLIED>
+<!ATTLIST a dir (ltr | rtl) #IMPLIED>
+<!ATTLIST a href CDATA #IMPLIED>
+<!ATTLIST a name CDATA #IMPLIED>
+<!ATTLIST a md CDATA #IMPLIED>
+<!ATTLIST a rel NMTOKEN #IMPLIED>
+<!ATTLIST a rev NMTOKEN #IMPLIED>
+<!ATTLIST a title CDATA #IMPLIED>
+<!ATTLIST a methods NMTOKENS #IMPLIED>
+<!ELEMENT br EMPTY>
+<!ATTLIST br id ID #IMPLIED>
+<!ELEMENT em (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST em id ID #IMPLIED>
+<!ATTLIST em class NMTOKENS #IMPLIED>
+<!ATTLIST em style CDATA #IMPLIED>
+<!ATTLIST em lang NMTOKEN #IMPLIED>
+<!ATTLIST em dir (ltr | rtl) #IMPLIED>
+<!ELEMENT lang (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST lang id ID #IMPLIED>
+<!ATTLIST lang class NMTOKENS #IMPLIED>
+<!ATTLIST lang style CDATA #IMPLIED>
+<!ATTLIST lang lang NMTOKEN #IMPLIED>
+<!ATTLIST lang dir (ltr | rtl) #IMPLIED>
+<!ELEMENT pronounce (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST pronounce id ID #IMPLIED>
+<!ATTLIST pronounce guide CDATA #IMPLIED>
+<!ATTLIST pronounce phonetic CDATA #IMPLIED>
+<!ELEMENT q (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST q id ID #IMPLIED>
+<!ATTLIST q class NMTOKENS #IMPLIED>
+<!ATTLIST q style CDATA #IMPLIED>
+<!ATTLIST q lang NMTOKEN #IMPLIED>
+<!ATTLIST q dir (ltr | rtl) #IMPLIED>
+<!ATTLIST q quote-source CDATA #IMPLIED>
+<!ELEMENT addressee (person , function? , care.of?)>
+<!ATTLIST addressee id ID #IMPLIED>
+<!ELEMENT care.of (#PCDATA)>
+<!ATTLIST care.of id ID #IMPLIED>
+<!ELEMENT delivery.point (#PCDATA | br)*>
+<!ATTLIST delivery.point id ID #IMPLIED>
+<!ATTLIST delivery.point point-code CDATA #IMPLIED>
+<!ATTLIST delivery.point code-source CDATA #IMPLIED>
+<!ELEMENT postcode (#PCDATA)>
+<!ATTLIST postcode id ID #IMPLIED>
+<!ATTLIST postcode code-source CDATA #IMPLIED>
+<!ELEMENT delivery.office (#PCDATA | br)*>
+<!ATTLIST delivery.office id ID #IMPLIED>
+<!ATTLIST delivery.office office-code CDATA #IMPLIED>
+<!ATTLIST delivery.office code-source CDATA #IMPLIED>
+<!ELEMENT body.end (tagline? , bibliography?)>
+<!ATTLIST body.end id ID #IMPLIED>
+<!ELEMENT tagline (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*>
+<!ATTLIST tagline id ID #IMPLIED>
+<!ATTLIST tagline type (std | pa | npa) "std">
+<!ELEMENT bibliography (#PCDATA)>
+<!ATTLIST bibliography id ID #IMPLIED>
+]>
+<NewsML>
+ <Catalog Href="http://www.afp.com/dtd/AFPCatalog.xml"/>
+ <NewsEnvelope>
+ <DateAndTime>20011022T154508Z</DateAndTime>
+ </NewsEnvelope>
+ <NewsItem>
+ <Identification>
+ <NewsIdentifier>
+ <ProviderId>afp.com</ProviderId>
+ <DateId>20011022</DateId>
+ <NewsItemId>mmd--deutsch--journal--spo</NewsItemId>
+ <RevisionId PreviousRevision="0" Update="N">1</RevisionId>
+ <PublicIdentifier>urn:NewsML:afp.com:20011022:mmd--deutsch--journal--spo:1</PublicIdentifier>
+ </NewsIdentifier>
+ <NameLabel>HINTERGRUND</NameLabel>
+ </Identification>
+ <NewsManagement>
+ <NewsItemType FormalName="News"/>
+ <FirstCreated>20011022T154508Z</FirstCreated>
+ <ThisRevisionCreated>20011022T154508Z</ThisRevisionCreated>
+ <Status FormalName="Usable"/>
+ </NewsManagement>
+ <NewsComponent>
+ <AdministrativeMetadata>
+ <Provider>
+ <Party FormalName="AFP"/>
+ </Provider>
+ </AdministrativeMetadata>
+ <DescriptiveMetadata>
+ <Language FormalName="de"/>
+ </DescriptiveMetadata>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Berliner SPD führt Gespräche mit FDP und Grünen</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022154450.sq80bp9h.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>INFOGRAFIK: Das Berliner Wahlergebnis</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022113032.remo00m7.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Schwierige Koalitionsverhandlungen in Berlin</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022124314.9hv2kozk.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Die Lieblingsfarben des Kanzlers sind Rot Gelb Grün</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022134541.cmmaoim7.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>INFOGRAFIK: Wen wählt Wowereit?</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022122545.hl3z2as6.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>CDU ist auch in kommunalen Rathäusern der Verlierer</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022120205.b8sykfvu.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Gutes Abschneiden der PDS hat verschiedene Gründe</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022134159.agvne048.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Ans Regieren hat sich Klaus Wowereit gewöhnt</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021161031.1oq7qyub.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Steffel brachte CDU nicht auf Erfolgskurs</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021165007.kt9qog9m.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Sibyll Klotz: Vollblutpolitikerin mit "Berliner Schnauze"</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021184658.lctevest.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Mit Gysi muss weiter gerechnet werden</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021180441.6tpvgx0y.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Rexrodt - das Stehaufmännchen der Berliner FDP</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021165558.gujrz59m.xml"/>
+ </NewsComponent>
+ </NewsComponent>
+ </NewsItem>
+</NewsML>
diff --git a/result/valid/index.xml.err b/result/valid/index.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/index.xml.err
diff --git a/result/valid/mixed_ns.xml b/result/valid/mixed_ns.xml
new file mode 100644
index 0000000..d8aedb8
--- /dev/null
+++ b/result/valid/mixed_ns.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE a [
+<!ELEMENT a (#PCDATA | b | s:b)*>
+<!ATTLIST a xmlns:s CDATA #IMPLIED>
+<!ELEMENT b EMPTY>
+<!ATTLIST b xmlns:s CDATA #IMPLIED>
+<!ELEMENT s:b EMPTY>
+<!ATTLIST s:b xmlns:s CDATA #IMPLIED>
+]>
+<a xmlns:s="http://some.test.ns/a">
+ Some text.
+ <b/>
+ Some text.
+ <s:b/>
+ Some text.
+</a>
diff --git a/result/valid/mixed_ns.xml.err b/result/valid/mixed_ns.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/mixed_ns.xml.err
diff --git a/result/valid/ns.xml b/result/valid/ns.xml
new file mode 100644
index 0000000..ddade86
--- /dev/null
+++ b/result/valid/ns.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE a:outer [
+<!ELEMENT a:outer EMPTY>
+<!ATTLIST a:outer xmlns:a CDATA #FIXED "urn:namespace">
+<!ATTLIST a:outer xmlns:b CDATA #FIXED "urn:namespaceb">
+]>
+<a:outer xmlns:a="urn:namespace" xmlns:b="urn:namespaceb"/>
diff --git a/result/valid/ns.xml.err b/result/valid/ns.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/ns.xml.err
diff --git a/result/valid/ns2.xml b/result/valid/ns2.xml
new file mode 100644
index 0000000..a4c30a8
--- /dev/null
+++ b/result/valid/ns2.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE a:outer [
+<!ELEMENT a:outer (a:inner)>
+<!ATTLIST a:outer xmlns:a CDATA #FIXED "urn:namespace">
+<!ELEMENT a:inner EMPTY>
+<!ATTLIST a:inner xmlns:a CDATA #FIXED "urn:namespace">
+<!ATTLIST a:inner attr CDATA #FIXED "yes">
+]>
+<a:outer xmlns:a="urn:namespace">
+ <a:inner/>
+</a:outer>
diff --git a/result/valid/ns2.xml.err b/result/valid/ns2.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/ns2.xml.err
diff --git a/result/valid/rss.xml b/result/valid/rss.xml
new file mode 100644
index 0000000..642fb80
--- /dev/null
+++ b/result/valid/rss.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE rss [
+<!--
+
+ Rich Site Summary (RSS) 0.91 official DTD, proposed.
+
+ RSS is an XML vocabulary for describing
+ metadata about websites, and enabling the display of
+ "channels" on the "My Netscape" website.
+
+ RSS Info can be found at http://my.netscape.com/publish/
+ XML Info can be found at http://www.w3.org/XML/
+
+ copyright Netscape Communications, 1999
+
+ Dan Libby - danda@netscape.com
+
+ Based on RSS DTD originally created by
+ Lars Marius Garshol - larsga@ifi.uio.no.
+
+--><!ELEMENT rss (channel)>
+<!ATTLIST rss version CDATA #REQUIRED>
+<!-- must be "0.91"> --><!ELEMENT channel (title | description | link | language | item+ | rating | image | textinput | copyright | pubDate | lastBuildDate | docs | managingEditor | webMaster | skipHours | skipDays)*>
+<!ELEMENT title (#PCDATA)>
+<!ELEMENT description (#PCDATA)>
+<!ELEMENT link (#PCDATA)>
+<!ELEMENT image (title | url | link | width | height | description)*>
+<!ELEMENT url (#PCDATA)>
+<!ELEMENT item (title | link | description)*>
+<!ELEMENT textinput (title | description | name | link)*>
+<!ELEMENT name (#PCDATA)>
+<!ELEMENT rating (#PCDATA)>
+<!ELEMENT language (#PCDATA)>
+<!ELEMENT width (#PCDATA)>
+<!ELEMENT height (#PCDATA)>
+<!ELEMENT copyright (#PCDATA)>
+<!ELEMENT pubDate (#PCDATA)>
+<!ELEMENT lastBuildDate (#PCDATA)>
+<!ELEMENT docs (#PCDATA)>
+<!ELEMENT managingEditor (#PCDATA)>
+<!ELEMENT webMaster (#PCDATA)>
+<!ELEMENT hour (#PCDATA)>
+<!ELEMENT day (#PCDATA)>
+<!ELEMENT skipHours (hour)+>
+<!ELEMENT skipDays (day)+>
+<!--
+ Copied from HTML 3.2 DTD, with modifications (removed CDATA)
+ http://www.w3.org/TR/REC-html32.html#dtd
+ =============== BEGIN ===================
+--><!--
+ Character Entities for ISO Latin-1
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+ This has been extended for use with HTML to cover the full
+ set of codes in the range 160-255 decimal.
+--><!-- Character entity set. Typical invocation:
+ <!ENTITY % ISOlat1 PUBLIC
+ "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML">
+ %ISOlat1;
+--><!ENTITY nbsp "&#160;">
+<!-- no-break space --><!ENTITY iexcl "&#161;">
+<!-- inverted exclamation mark --><!ENTITY cent "&#162;">
+<!-- cent sign --><!ENTITY pound "&#163;">
+<!-- pound sterling sign --><!ENTITY curren "&#164;">
+<!-- general currency sign --><!ENTITY yen "&#165;">
+<!-- yen sign --><!ENTITY brvbar "&#166;">
+<!-- broken (vertical) bar --><!ENTITY sect "&#167;">
+<!-- section sign --><!ENTITY uml "&#168;">
+<!-- umlaut (dieresis) --><!ENTITY copy "&#169;">
+<!-- copyright sign --><!ENTITY ordf "&#170;">
+<!-- ordinal indicator, feminine --><!ENTITY laquo "&#171;">
+<!-- angle quotation mark, left --><!ENTITY not "&#172;">
+<!-- not sign --><!ENTITY shy "&#173;">
+<!-- soft hyphen --><!ENTITY reg "&#174;">
+<!-- registered sign --><!ENTITY macr "&#175;">
+<!-- macron --><!ENTITY deg "&#176;">
+<!-- degree sign --><!ENTITY plusmn "&#177;">
+<!-- plus-or-minus sign --><!ENTITY sup2 "&#178;">
+<!-- superscript two --><!ENTITY sup3 "&#179;">
+<!-- superscript three --><!ENTITY acute "&#180;">
+<!-- acute accent --><!ENTITY micro "&#181;">
+<!-- micro sign --><!ENTITY para "&#182;">
+<!-- pilcrow (paragraph sign) --><!ENTITY middot "&#183;">
+<!-- middle dot --><!ENTITY cedil "&#184;">
+<!-- cedilla --><!ENTITY sup1 "&#185;">
+<!-- superscript one --><!ENTITY ordm "&#186;">
+<!-- ordinal indicator, masculine --><!ENTITY raquo "&#187;">
+<!-- angle quotation mark, right --><!ENTITY frac14 "&#188;">
+<!-- fraction one-quarter --><!ENTITY frac12 "&#189;">
+<!-- fraction one-half --><!ENTITY frac34 "&#190;">
+<!-- fraction three-quarters --><!ENTITY iquest "&#191;">
+<!-- inverted question mark --><!ENTITY Agrave "&#192;">
+<!-- capital A, grave accent --><!ENTITY Aacute "&#193;">
+<!-- capital A, acute accent --><!ENTITY Acirc "&#194;">
+<!-- capital A, circumflex accent --><!ENTITY Atilde "&#195;">
+<!-- capital A, tilde --><!ENTITY Auml "&#196;">
+<!-- capital A, dieresis or umlaut mark --><!ENTITY Aring "&#197;">
+<!-- capital A, ring --><!ENTITY AElig "&#198;">
+<!-- capital AE diphthong (ligature) --><!ENTITY Ccedil "&#199;">
+<!-- capital C, cedilla --><!ENTITY Egrave "&#200;">
+<!-- capital E, grave accent --><!ENTITY Eacute "&#201;">
+<!-- capital E, acute accent --><!ENTITY Ecirc "&#202;">
+<!-- capital E, circumflex accent --><!ENTITY Euml "&#203;">
+<!-- capital E, dieresis or umlaut mark --><!ENTITY Igrave "&#204;">
+<!-- capital I, grave accent --><!ENTITY Iacute "&#205;">
+<!-- capital I, acute accent --><!ENTITY Icirc "&#206;">
+<!-- capital I, circumflex accent --><!ENTITY Iuml "&#207;">
+<!-- capital I, dieresis or umlaut mark --><!ENTITY ETH "&#208;">
+<!-- capital Eth, Icelandic --><!ENTITY Ntilde "&#209;">
+<!-- capital N, tilde --><!ENTITY Ograve "&#210;">
+<!-- capital O, grave accent --><!ENTITY Oacute "&#211;">
+<!-- capital O, acute accent --><!ENTITY Ocirc "&#212;">
+<!-- capital O, circumflex accent --><!ENTITY Otilde "&#213;">
+<!-- capital O, tilde --><!ENTITY Ouml "&#214;">
+<!-- capital O, dieresis or umlaut mark --><!ENTITY times "&#215;">
+<!-- multiply sign --><!ENTITY Oslash "&#216;">
+<!-- capital O, slash --><!ENTITY Ugrave "&#217;">
+<!-- capital U, grave accent --><!ENTITY Uacute "&#218;">
+<!-- capital U, acute accent --><!ENTITY Ucirc "&#219;">
+<!-- capital U, circumflex accent --><!ENTITY Uuml "&#220;">
+<!-- capital U, dieresis or umlaut mark --><!ENTITY Yacute "&#221;">
+<!-- capital Y, acute accent --><!ENTITY THORN "&#222;">
+<!-- capital THORN, Icelandic --><!ENTITY szlig "&#223;">
+<!-- small sharp s, German (sz ligature) --><!ENTITY agrave "&#224;">
+<!-- small a, grave accent --><!ENTITY aacute "&#225;">
+<!-- small a, acute accent --><!ENTITY acirc "&#226;">
+<!-- small a, circumflex accent --><!ENTITY atilde "&#227;">
+<!-- small a, tilde --><!ENTITY auml "&#228;">
+<!-- small a, dieresis or umlaut mark --><!ENTITY aring "&#229;">
+<!-- small a, ring --><!ENTITY aelig "&#230;">
+<!-- small ae diphthong (ligature) --><!ENTITY ccedil "&#231;">
+<!-- small c, cedilla --><!ENTITY egrave "&#232;">
+<!-- small e, grave accent --><!ENTITY eacute "&#233;">
+<!-- small e, acute accent --><!ENTITY ecirc "&#234;">
+<!-- small e, circumflex accent --><!ENTITY euml "&#235;">
+<!-- small e, dieresis or umlaut mark --><!ENTITY igrave "&#236;">
+<!-- small i, grave accent --><!ENTITY iacute "&#237;">
+<!-- small i, acute accent --><!ENTITY icirc "&#238;">
+<!-- small i, circumflex accent --><!ENTITY iuml "&#239;">
+<!-- small i, dieresis or umlaut mark --><!ENTITY eth "&#240;">
+<!-- small eth, Icelandic --><!ENTITY ntilde "&#241;">
+<!-- small n, tilde --><!ENTITY ograve "&#242;">
+<!-- small o, grave accent --><!ENTITY oacute "&#243;">
+<!-- small o, acute accent --><!ENTITY ocirc "&#244;">
+<!-- small o, circumflex accent --><!ENTITY otilde "&#245;">
+<!-- small o, tilde --><!ENTITY ouml "&#246;">
+<!-- small o, dieresis or umlaut mark --><!ENTITY divide "&#247;">
+<!-- divide sign --><!ENTITY oslash "&#248;">
+<!-- small o, slash --><!ENTITY ugrave "&#249;">
+<!-- small u, grave accent --><!ENTITY uacute "&#250;">
+<!-- small u, acute accent --><!ENTITY ucirc "&#251;">
+<!-- small u, circumflex accent --><!ENTITY uuml "&#252;">
+<!-- small u, dieresis or umlaut mark --><!ENTITY yacute "&#253;">
+<!-- small y, acute accent --><!ENTITY thorn "&#254;">
+<!-- small thorn, Icelandic --><!ENTITY yuml "&#255;">
+<!-- small y, dieresis or umlaut mark --><!--
+ Copied from HTML 3.2 DTD, with modifications (removed CDATA)
+ http://www.w3.org/TR/REC-html32.html#dtd
+ ================= END ===================
+-->]>
+<rss>
+<channel>
+<image/>
+<title>PP</title>
+</channel>
+</rss>
diff --git a/result/valid/rss.xml.err b/result/valid/rss.xml.err
new file mode 100644
index 0000000..2ec7c9e
--- /dev/null
+++ b/result/valid/rss.xml.err
@@ -0,0 +1,3 @@
+./test/valid/rss.xml:177: element rss: validity error : Element rss does not carry attribute version
+</rss>
+ ^
diff --git a/result/valid/t4.dtd b/result/valid/t4.dtd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t4.dtd
diff --git a/result/valid/t4.dtd.err b/result/valid/t4.dtd.err
new file mode 100644
index 0000000..23a3258
--- /dev/null
+++ b/result/valid/t4.dtd.err
@@ -0,0 +1,6 @@
+./test/valid/t4.dtd:1: parser error : StartTag: invalid element name
+<!ENTITY % percent "&#x25;">
+ ^
+./test/valid/t4.dtd:1: parser error : Extra content at the end of the document
+<!ENTITY % percent "&#x25;">
+ ^
diff --git a/result/valid/t4.xml b/result/valid/t4.xml
new file mode 100644
index 0000000..c198f76
--- /dev/null
+++ b/result/valid/t4.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "t4.dtd">
+<root>&abc;</root>
diff --git a/result/valid/t4.xml.err b/result/valid/t4.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t4.xml.err
diff --git a/result/valid/t4a.dtd b/result/valid/t4a.dtd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t4a.dtd
diff --git a/result/valid/t4a.dtd.err b/result/valid/t4a.dtd.err
new file mode 100644
index 0000000..48cdd5f
--- /dev/null
+++ b/result/valid/t4a.dtd.err
@@ -0,0 +1,6 @@
+./test/valid/t4a.dtd:1: parser error : StartTag: invalid element name
+<!ENTITY % percent "&#x25;">
+ ^
+./test/valid/t4a.dtd:1: parser error : Extra content at the end of the document
+<!ENTITY % percent "&#x25;">
+ ^
diff --git a/result/valid/t4a.xml b/result/valid/t4a.xml
new file mode 100644
index 0000000..37e80f7
--- /dev/null
+++ b/result/valid/t4a.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "t4a.dtd">
+<root>&abc;</root>
diff --git a/result/valid/t4a.xml.err b/result/valid/t4a.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t4a.xml.err
diff --git a/result/valid/t6.dtd b/result/valid/t6.dtd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t6.dtd
diff --git a/result/valid/t6.dtd.err b/result/valid/t6.dtd.err
new file mode 100644
index 0000000..6e84d68
--- /dev/null
+++ b/result/valid/t6.dtd.err
@@ -0,0 +1,6 @@
+./test/valid/t6.dtd:1: parser error : StartTag: invalid element name
+<!ENTITY % xdef "def">
+ ^
+./test/valid/t6.dtd:1: parser error : Extra content at the end of the document
+<!ENTITY % xdef "def">
+ ^
diff --git a/result/valid/t6.xml b/result/valid/t6.xml
new file mode 100644
index 0000000..23f2d25
--- /dev/null
+++ b/result/valid/t6.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "t6.dtd">
+<root>&abc;</root>
diff --git a/result/valid/t6.xml.err b/result/valid/t6.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t6.xml.err
diff --git a/result/valid/t8.xml b/result/valid/t8.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t8.xml
diff --git a/result/valid/t8.xml.err b/result/valid/t8.xml.err
new file mode 100644
index 0000000..7ae7bb4
--- /dev/null
+++ b/result/valid/t8.xml.err
@@ -0,0 +1,18 @@
+Entity: line 1: parser error : internal error
+ %defroot;
+ ^
+Entity: line 1:
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: parser error : DOCTYPE improperly terminated
+ %defroot;
+ ^
+Entity: line 1:
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: parser error : Start tag expected, '<' not found
+ %defroot;
+ ^
+Entity: line 1:
+&lt;!ELEMENT root (middle) >
+ ^
diff --git a/result/valid/t8a.xml b/result/valid/t8a.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t8a.xml
diff --git a/result/valid/t8a.xml.err b/result/valid/t8a.xml.err
new file mode 100644
index 0000000..7ae7bb4
--- /dev/null
+++ b/result/valid/t8a.xml.err
@@ -0,0 +1,18 @@
+Entity: line 1: parser error : internal error
+ %defroot;
+ ^
+Entity: line 1:
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: parser error : DOCTYPE improperly terminated
+ %defroot;
+ ^
+Entity: line 1:
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: parser error : Start tag expected, '<' not found
+ %defroot;
+ ^
+Entity: line 1:
+&lt;!ELEMENT root (middle) >
+ ^
diff --git a/result/valid/t9.xml b/result/valid/t9.xml
new file mode 100644
index 0000000..6950b14
--- /dev/null
+++ b/result/valid/t9.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ENTITY % deftest "&#60;!ELEMENT test (#PCDATA) >">
+<!ENTITY % defmiddle "&#60;!ELEMENT middle (test) >">
+<!ENTITY % defroot "&#60;!ELEMENT root (middle) >">
+<!ELEMENT root (middle)>
+<!ELEMENT middle (test)>
+<!ELEMENT test (#PCDATA)>
+]>
+<root><middle><test>sample</test></middle></root>
diff --git a/result/valid/t9.xml.err b/result/valid/t9.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t9.xml.err
diff --git a/result/valid/t9a.xml b/result/valid/t9a.xml
new file mode 100644
index 0000000..6950b14
--- /dev/null
+++ b/result/valid/t9a.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ENTITY % deftest "&#60;!ELEMENT test (#PCDATA) >">
+<!ENTITY % defmiddle "&#60;!ELEMENT middle (test) >">
+<!ENTITY % defroot "&#60;!ELEMENT root (middle) >">
+<!ELEMENT root (middle)>
+<!ELEMENT middle (test)>
+<!ELEMENT test (#PCDATA)>
+]>
+<root><middle><test>sample</test></middle></root>
diff --git a/result/valid/t9a.xml.err b/result/valid/t9a.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/t9a.xml.err
diff --git a/result/valid/xhtml1.xhtml b/result/valid/xhtml1.xhtml
new file mode 100644
index 0000000..907209b
--- /dev/null
+++ b/result/valid/xhtml1.xhtml
@@ -0,0 +1,1453 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "dtds/xhtml1-strict.dtd">
+<?xml-stylesheet href="W3C-PR.css" type="text/css"?>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>XHTML 1.0: The Extensible HyperText Markup
+Language</title>
+<link rel="stylesheet" href="W3C-PR.css" type="text/css" />
+<style type="text/css">
+span.term { font-style: italic; color: rgb(0, 0, 192) }
+code {
+ color: green;
+ font-family: monospace;
+ font-weight: bold;
+}
+
+code.greenmono {
+ color: green;
+ font-family: monospace;
+ font-weight: bold;
+}
+.good {
+ border: solid green;
+ border-width: 2px;
+ color: green;
+ font-weight: bold;
+ margin-right: 5%;
+ margin-left: 0;
+}
+.bad {
+ border: solid red;
+ border-width: 2px;
+ margin-left: 0;
+ margin-right: 5%;
+ color: rgb(192, 101, 101);
+}
+
+img {
+ color: white;
+ border: none;
+}
+
+div.navbar { text-align: center; }
+div.contents {
+ background-color: rgb(204,204,255);
+ padding: 0.5em;
+ border: none;
+ margin-right: 5%;
+}
+.tocline { list-style: none; }
+table.exceptions { background-color: rgb(255,255,153); }
+</style>
+</head>
+<body>
+<div class="navbar">
+ <a href="#toc">table of contents</a>
+ <hr />
+</div>
+<div class="head"><p><a href="http://www.w3.org/"><img class="head" src="w3c_home.gif" alt="W3C" /></a></p>
+
+<h1 class="head"><a name="title" id="title">XHTML</a><sup>&#x2122;</sup> 1.0:
+The Extensible HyperText Markup Language</h1>
+
+<h2>A Reformulation of HTML 4.0 in XML 1.0</h2>
+
+<h3>W3C Proposed Recommendation 10 December 1999</h3>
+
+<dl>
+<dt>This version:</dt>
+
+<dd><a href="http://www.w3.org/TR/1999/PR-xhtml1-19991210">
+http://www.w3.org/TR/1999/PR-xhtml1-19991210</a> <br />
+(<a href="xhtml1.ps">Postscript version</a>,
+<a href="xhtml1.pdf">PDF version</a>,
+<a href="xhtml1.zip">ZIP archive</a>, or
+<a href="xhtml1.tgz">Gzip'd TAR archive</a>)
+</dd>
+
+<dt>Latest version:</dt>
+
+<dd><a href="http://www.w3.org/TR/xhtml1">
+http://www.w3.org/TR/xhtml1</a></dd>
+
+<dt>Previous versions:</dt>
+
+<dd><a href="http://www.w3.org/TR/1999/WD-xhtml1-19991124">
+http://www.w3.org/TR/1999/WD-xhtml1-19991124</a></dd>
+<dd><a href="http://www.w3.org/TR/1999/PR-xhtml1-19990824">
+http://www.w3.org/TR/1999/PR-xhtml1-19990824</a></dd>
+
+<dt>Authors:</dt>
+
+<dd>See <a href="#acks">acknowledgements</a>.</dd>
+</dl>
+
+<p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+Copyright</a> &copy; 1999 <a href="http://www.w3.org/">W3C</a><sup>&reg;</sup>
+(<a href="http://www.lcs.mit.edu/">MIT</a>, <a href="http://www.inria.fr/">INRIA</a>, <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. <abbr title="World Wide Web Consortium">W3C</abbr> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">
+liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">
+trademark</a>, <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+use</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-software">software
+licensing</a> rules apply.</p>
+<hr />
+</div>
+
+<h2 class="notoc">Abstract</h2>
+
+<p>This specification defines <abbr title="Extensible Hypertext Markup Language">XHTML</abbr> 1.0, a reformulation of HTML
+4.0 as an XML 1.0 application, and three <abbr title="Document Type Definition">DTDs</abbr> corresponding to
+the ones defined by HTML 4.0. The semantics of the elements and
+their attributes are defined in the W3C Recommendation for HTML
+4.0. These semantics provide the foundation for future
+extensibility of XHTML. Compatibility with existing HTML user
+agents is possible by following a small set of guidelines.</p>
+
+<h2>Status of this document</h2>
+
+<p><em>This section describes the status of this document at the time
+of its publication. Other documents may supersede this document. The
+latest status of this document series is maintained at the W3C.</em></p>
+
+<p>This specification is a Proposed Recommendation of the HTML Working Group. It is
+a revision of the Proposed Recommendation dated <a href="http://www.w3.org/TR/1999/PR-xhtml1-19990824/">24 August
+1999</a> incorporating changes as a result of comments from the Proposed
+Recommendation review, and
+comments and further deliberations of the W3C HTML Working Group. A
+<a href="xhtml1-diff-19991210.html">diff-marked version</a> from the previous
+proposed recommendation is available for comparison purposes.</p>
+
+<p>On 10 December 1999, this document enters a
+<a href="http://www.w3.org/Consortium/Process/#RecsPR">
+Proposed Recommendation</a> review period. From that date until 8 January
+2000,
+W3C Advisory Committee representatives are encouraged
+to review this specification and return comments in their completed
+ballots to w3c-html-review@w3.org. Please send any comments of a
+confidential nature in separate email to w3t-html@w3.org, which is
+visible to the Team only.</p>
+
+<p>No sooner than 14 days after the end of the review period, the
+Director will announce the document's disposition: it may become a W3C
+Recommendation (possibly with minor changes), it may revert to Working
+Draft status, or it may be dropped as a W3C work item.</p>
+
+<p>Publication as a Proposed Recommendation does not imply endorsement
+by the W3C membership. This is still a draft document and may be
+updated, replaced or obsoleted by other documents at any time. It is
+inappropriate to cite W3C Proposed Recommendation as other than "work
+in progress."</p>
+
+<p>This document has been produced as part of the <a href="http://www.w3.org/MarkUp/">W3C HTML Activity</a>. The goals of
+the <a href="http://www.w3.org/MarkUp/Group/">HTML Working
+Group</a> <i>(<a href="http://cgi.w3.org/MemberAccess/">members
+only</a>)</i> are discussed in the <a href="http://www.w3.org/MarkUp/Group/HTMLcharter">HTML Working Group
+charter</a> <i>(<a href="http://cgi.w3.org/MemberAccess/">members
+only</a>)</i>.</p>
+
+<p>A list of current W3C Recommendations and other technical documents
+can be found at <a href="http://www.w3.org/TR">http://www.w3.org/TR</a>.</p>
+
+<p>Public discussion on <abbr title="HyperText Markup Language">HTML</abbr> features takes place on the mailing list <a href="mailto:www-html@w3.org"> www-html@w3.org</a> (<a href="http://lists.w3.org/Archives/Public/www-html/">archive</a>). The W3C
+staff contact for work on HTML is <a href="mailto:dsr@w3.org">Dave
+Raggett</a>.</p>
+
+<p>Please report errors in this document to <a href="mailto:www-html-editor@w3.org">www-html-editor@w3.org</a>.</p>
+
+<p>The list of known errors in this specification is available at <a href="http://www.w3.org/1999/12/PR-xhtml1-19991210-errata">http://www.w3.org/1999/12/PR-xhtml1-19991210-errata</a>.</p>
+
+<h2 class="notoc"><a id="toc" name="toc">Contents</a></h2>
+
+<div class="contents">
+<ul class="toc">
+<li class="tocline">1. <a href="#xhtml">What is XHTML?</a>
+
+<ul class="toc">
+<li class="tocline">1.1 <a href="#html4">What is HTML 4.0?</a></li>
+
+<li class="tocline">1.2 <a href="#xml">What is XML?</a></li>
+
+<li class="tocline">1.3 <a href="#why">Why the need for XHTML?</a></li>
+</ul>
+</li>
+
+<li class="tocline">2. <a href="#defs">Definitions</a>
+
+<ul class="toc">
+<li class="tocline">2.1 <a href="#terms">Terminology</a></li>
+
+<li class="tocline">2.2 <a href="#general">General Terms</a></li>
+</ul>
+</li>
+
+<li class="tocline">3. <a href="#normative">Normative Definition of XHTML 1.0</a>
+
+
+<ul class="toc">
+<li class="tocline">3.1 <a href="#docconf">Document Conformance</a></li>
+
+<li class="tocline">3.2 <a href="#uaconf">User Agent Conformance</a></li>
+</ul>
+</li>
+
+<li class="tocline">4. <a href="#diffs">Differences with HTML 4.0</a>
+
+</li>
+
+<li class="tocline">5. <a href="#issues">Compatibility Issues</a>
+
+<ul class="toc">
+<li class="tocline">5.1 <a href="#media">Internet Media Types</a></li>
+</ul>
+</li>
+
+<li class="tocline">6. <a href="#future">Future Directions</a>
+
+<ul class="toc">
+<li class="tocline">6.1 <a href="#mods">Modularizing HTML</a></li>
+
+<li class="tocline">6.2 <a href="#extensions">Subsets and Extensibility</a></li>
+
+<li class="tocline">6.3 <a href="#profiles">Document Profiles</a></li>
+</ul>
+</li>
+
+<li class="tocline"><a href="#dtds">Appendix A. DTDs</a></li>
+
+<li class="tocline"><a href="#prohibitions">Appendix B. Element
+Prohibitions</a></li>
+
+<li class="tocline"><a href="#guidelines">Appendix C. HTML Compatibility Guidelines</a></li>
+
+<li class="tocline"><a href="#acks">Appendix D. Acknowledgements</a></li>
+
+<li class="tocline"><a href="#refs">Appendix E. References</a></li>
+</ul>
+</div>
+
+<!--OddPage-->
+<h1><a name="xhtml" id="xhtml">1. What is XHTML?</a></h1>
+
+<p>XHTML is a family of current and future document types and modules that
+reproduce, subset, and extend HTML 4.0 <a href="#ref-html4">[HTML]</a>. XHTML family document types are <abbr title="Extensible Markup Language">XML</abbr> based,
+and ultimately are designed to work in conjunction with XML-based user agents.
+The details of this family and its evolution are
+discussed in more detail in the section on <a href="#future">Future
+Directions</a>. </p>
+
+<p>XHTML 1.0 (this specification) is the first document type in the XHTML
+family. It is a reformulation of the three HTML 4.0 document types as
+applications of XML 1.0 <a href="#ref-xml"> [XML]</a>. It is intended
+to be used as a language for content that is both XML-conforming and, if some
+simple <a href="#guidelines">guidelines</a> are followed,
+operates in HTML 4.0 conforming user agents. Developers who migrate
+their content to XHTML 1.0 will realize the following benefits:</p>
+
+<ul>
+<li>XHTML documents are XML conforming. As such, they are readily viewed,
+edited, and validated with standard XML tools.</li>
+<li>XHTML documents can be written to
+to operate as well or better than they did before in existing
+HTML 4.0-conforming user agents as well as in new, XHTML 1.0 conforming user
+agents.</li>
+<li>XHTML documents can utilize applications (e.g. scripts and applets) that rely
+upon either the HTML Document Object Model or the XML Document Object Model <a href="#ref-dom">[DOM]</a>.</li>
+<li>As the XHTML family evolves, documents conforming to XHTML 1.0 will be more
+likely to interoperate within and among various XHTML environments.</li>
+</ul>
+
+<p>The XHTML family is the next step in the evolution of the Internet. By
+migrating to XHTML today, content developers can enter the XML world with all
+of its attendant benefits, while still remaining confident in their
+content's backward and future compatibility.</p>
+
+<h2><a name="html4" id="html4">1.1 What is HTML 4.0?</a></h2>
+
+<p>HTML 4.0 <a href="#ref-html4">[HTML]</a> is an <abbr title="Standard Generalized Markup Language">SGML</abbr> (Standard
+Generalized Markup Language) application conforming to
+International Standard <abbr title="Organization for International Standardization">ISO</abbr> 8879, and is widely regarded as the
+standard publishing language of the World Wide Web.</p>
+
+<p>SGML is a language for describing markup languages,
+particularly those used in electronic document exchange, document
+management, and document publishing. HTML is an example of a
+language defined in SGML.</p>
+
+<p>SGML has been around since the middle 1980's and has remained
+quite stable. Much of this stability stems from the fact that the
+language is both feature-rich and flexible. This flexibility,
+however, comes at a price, and that price is a level of
+complexity that has inhibited its adoption in a diversity of
+environments, including the World Wide Web.</p>
+
+<p>HTML, as originally conceived, was to be a language for the
+exchange of scientific and other technical documents, suitable
+for use by non-document specialists. HTML addressed the problem
+of SGML complexity by specifying a small set of structural and
+semantic tags suitable for authoring relatively simple documents.
+In addition to simplifying the document structure, HTML added
+support for hypertext. Multimedia capabilities were added
+later.</p>
+
+<p>In a remarkably short space of time, HTML became wildly
+popular and rapidly outgrew its original purpose. Since HTML's
+inception, there has been rapid invention of new elements for use
+within HTML (as a standard) and for adapting HTML to vertical,
+highly specialized, markets. This plethora of new elements has
+led to compatibility problems for documents across different
+platforms.</p>
+
+<p>As the heterogeneity of both software and platforms rapidly
+proliferate, it is clear that the suitability of 'classic' HTML
+4.0 for use on these platforms is somewhat limited.</p>
+
+<h2><a name="xml" id="xml">1.2 What is XML?</a></h2>
+
+<p>XML<sup>&#x2122;</sup> is the shorthand for Extensible Markup
+Language, and is an acronym of Extensible Markup Language <a href="#ref-xml">[XML]</a>.</p>
+
+<p>XML was conceived as a means of regaining the power and
+flexibility of SGML without most of its complexity. Although a
+restricted form of SGML, XML nonetheless preserves most of SGML's
+power and richness, and yet still retains all of SGML's commonly
+used features.</p>
+
+<p>While retaining these beneficial features, XML removes many of
+the more complex features of SGML that make the authoring and
+design of suitable software both difficult and costly.</p>
+
+<h2><a name="why" id="why">1.3 Why the need for XHTML?</a></h2>
+
+<p>The benefits of migrating to XHTML 1.0 are described above. Some of the
+benefits of migrating to XHTML in general are:</p>
+
+<ul>
+<li>Document developers and user agent designers are constantly
+discovering new ways to express their ideas through new markup. In XML, it is
+relatively easy to introduce new elements or additional element
+attributes. The XHTML family is designed to accommodate these extensions
+through XHTML modules and techniques for developing new XHTML-conforming
+modules (described in the forthcoming XHTML Modularization specification).
+These modules will permit the combination of existing and
+new feature sets when developing content and when designing new user
+agents.</li>
+
+<li>Alternate ways of accessing the Internet are constantly being
+introduced. Some estimates indicate that by the year 2002, 75% of
+Internet document viewing will be carried out on these alternate
+platforms. The XHTML family is designed with general user agent
+interoperability in mind. Through a new user agent and document profiling
+mechanism, servers, proxies, and user agents will be able to perform
+best effort content transformation. Ultimately, it will be possible to
+develop XHTML-conforming content that is usable by any XHTML-conforming
+user agent.</li>
+
+</ul>
+<!--OddPage-->
+<h1><a name="defs" id="defs">2. Definitions</a></h1>
+
+<h2><a name="terms" id="terms">2.1 Terminology</a></h2>
+
+<p>The following terms are used in this specification. These
+terms extend the definitions in <a href="#ref-rfc2119">
+[RFC2119]</a> in ways based upon similar definitions in ISO/<abbr title="International Electro-technical Commission">IEC</abbr>
+9945-1:1990 <a href="#ref-posix">[POSIX.1]</a>:</p>
+
+<dl>
+<dt>Implementation-defined</dt>
+
+<dd>A value or behavior is implementation-defined when it is left
+to the implementation to define [and document] the corresponding
+requirements for correct document construction.</dd>
+
+<dt>May</dt>
+
+<dd>With respect to implementations, the word "may" is to be
+interpreted as an optional feature that is not required in this
+specification but can be provided. With respect to <a href="#docconf">Document Conformance</a>, the word "may" means that
+the optional feature must not be used. The term "optional" has
+the same definition as "may".</dd>
+
+<dt>Must</dt>
+
+<dd>In this specification, the word "must" is to be interpreted
+as a mandatory requirement on the implementation or on Strictly
+Conforming XHTML Documents, depending upon the context. The term
+"shall" has the same definition as "must".</dd>
+
+<dt>Reserved</dt>
+
+<dd>A value or behavior is unspecified, but it is not allowed to
+be used by Conforming Documents nor to be supported by a
+Conforming User Agents.</dd>
+
+<dt>Should</dt>
+
+<dd>With respect to implementations, the word "should" is to be
+interpreted as an implementation recommendation, but not a
+requirement. With respect to documents, the word "should" is to
+be interpreted as recommended programming practice for documents
+and a requirement for Strictly Conforming XHTML Documents.</dd>
+
+<dt>Supported</dt>
+
+<dd>Certain facilities in this specification are optional. If a
+facility is supported, it behaves as specified by this
+specification.</dd>
+
+<dt>Unspecified</dt>
+
+<dd>When a value or behavior is unspecified, the specification
+defines no portability requirements for a facility on an
+implementation even when faced with a document that uses the
+facility. A document that requires specific behavior in such an
+instance, rather than tolerating any behavior when using that
+facility, is not a Strictly Conforming XHTML Document.</dd>
+</dl>
+
+<h2><a name="general" id="general">2.2 General Terms</a></h2>
+
+<dl>
+<dt>Attribute</dt>
+
+<dd>An attribute is a parameter to an element declared in the
+DTD. An attribute's type and value range, including a possible
+default value, are defined in the DTD.</dd>
+
+<dt>DTD</dt>
+
+<dd>A DTD, or document type definition, is a collection of XML
+declarations that, as a collection, defines the legal structure,
+<span class="term">elements</span>, and <span class="term">
+attributes</span> that are available for use in a document that
+complies to the DTD.</dd>
+
+<dt>Document</dt>
+
+<dd>A document is a stream of data that, after being combined
+with any other streams it references, is structured such that it
+holds information contained within <span class="term">
+elements</span> that are organized as defined in the associated
+<span class="term">DTD</span>. See <a href="#docconf">Document
+Conformance</a> for more information.</dd>
+
+<dt>Element</dt>
+
+<dd>An element is a document structuring unit declared in the
+<span class="term">DTD</span>. The element's content model is
+defined in the <span class="term">DTD</span>, and additional
+semantics may be defined in the prose description of the
+element.</dd>
+
+<dt><a name="facilities" id="facilities">Facilities</a></dt>
+
+<dd>Functionality includes <span class="term">elements</span>,
+<span class="term">attributes</span>, and the semantics
+associated with those <span class="term">elements</span> and
+<span class="term">attributes</span>. An implementation
+supporting that functionality is said to provide the necessary
+facilities.</dd>
+
+<dt>Implementation</dt>
+
+<dd>An implementation is a system that provides collection of
+<span class="term">facilities</span> and services that supports
+this specification. See <a href="#uaconf">User Agent
+Conformance</a> for more information.</dd>
+
+<dt>Parsing</dt>
+
+<dd>Parsing is the act whereby a <span class="term">
+document</span> is scanned, and the information contained within
+the <span class="term">document</span> is filtered into the
+context of the <span class="term">elements</span> in which the
+information is structured.</dd>
+
+<dt>Rendering</dt>
+
+<dd>Rendering is the act whereby the information in a <span class="term">document</span> is presented. This presentation is
+done in the form most appropriate to the environment (e.g.
+aurally, visually, in print).</dd>
+
+<dt>User Agent</dt>
+
+<dd>A user agent is an <span class="term">implementation</span>
+that retrieves and processes XHTML documents. See <a href="#uaconf">User Agent Conformance</a> for more information.</dd>
+
+<dt>Validation</dt>
+
+<dd>Validation is a process whereby <span class="term">
+documents</span> are verified against the associated <span class="term">DTD</span>, ensuring that the structure, use of <span class="term">elements</span>, and use of <span class="term">
+attributes</span> are consistent with the definitions in the
+<span class="term">DTD</span>.</dd>
+
+<dt><a name="wellformed" id="wellformed">Well-formed</a></dt>
+
+<dd>A <span class="term">document</span> is well-formed when it
+is structured according to the rules defined in <a href="http://www.w3.org/TR/REC-xml#sec-well-formed">Section 2.1</a> of
+the XML 1.0 Recommendation <a href="#ref-xml">[XML]</a>.
+Basically, this definition states that elements, delimited by
+their start and end tags, are nested properly within one
+another.</dd>
+</dl>
+
+<!--OddPage-->
+<h1><a name="normative" id="normative">3. Normative Definition of
+XHTML 1.0</a></h1>
+
+<h2><a name="docconf" id="docconf">3.1 Document
+Conformance</a></h2>
+
+<p>This version of XHTML provides a definition of strictly
+conforming XHTML documents, which are restricted to tags and
+attributes from the XHTML namespace. See <a href="#well-formed">Section 3.1.2</a> for information on using XHTML
+with other namespaces, for instance, to include metadata
+expressed in <abbr title="Resource Description Format">RDF</abbr> within XHTML documents.</p>
+
+<h3><a name="strict" id="strict">3.1.1 Strictly Conforming
+Documents</a></h3>
+
+<p>A Strictly Conforming XHTML Document is a document that
+requires only the facilities described as mandatory in this
+specification. Such a document must meet all of the following
+criteria:</p>
+
+<ol>
+<li>
+<p>It must validate against one of the three DTDs found in <a href="#dtds">Appendix&#xA0;A</a>.</p>
+</li>
+
+<li>
+<p>The root element of the document must be <code>
+&lt;html&gt;</code>.</p>
+</li>
+
+<li>
+<p>The root element of the document must designate the XHTML
+namespace using the <code>xmlns</code> attribute <a href="#ref-xmlns">[XMLNAMES]</a>. The namespace for XHTML is
+defined to be
+<code>http://www.w3.org/1999/xhtml</code>.</p>
+</li>
+
+<li>
+<p>There must be a DOCTYPE declaration in the document prior to
+the root element. The public identifier included in
+the DOCTYPE declaration must reference one of the three DTDs
+found in <a href="#dtds">Appendix&#xA0;A</a> using the respective
+Formal Public Identifier. The system identifier may be changed to reflect
+local system conventions.</p>
+
+<pre>
+&lt;!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-strict.dtd&gt;
+
+&lt;!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-transitional.dtd&gt;
+
+&lt;!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-frameset.dtd&gt;
+</pre>
+</li>
+</ol>
+
+<p>Here is an example of a minimal XHTML document.</p>
+
+<div class="good">
+<pre>
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-strict.dtd"&gt;
+&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
+ &lt;head&gt;
+ &lt;title&gt;Virtual Library&lt;/title&gt;
+ &lt;/head&gt;
+ &lt;body&gt;
+ &lt;p&gt;Moved to &lt;a href="http://vlib.org/"&gt;vlib.org&lt;/a&gt;.&lt;/p&gt;
+ &lt;/body&gt;
+&lt;/html&gt;</pre>
+</div>
+
+<p>Note that in this example, the XML declaration is included. An XML
+declaration like the one above is
+not required in all XML documents. XHTML document authors are strongly encouraged to use XML declarations in all their documents. Such a declaration is required
+when the character encoding of the document is other than the default UTF-8 or
+UTF-16.</p>
+
+<h3><a name="well-formed" id="well-formed">3.1.2 Using XHTML with
+other namespaces</a></h3>
+
+<p>The XHTML namespace may be used with other XML namespaces
+as per <a href="#ref-xmlns">[XMLNAMES]</a>, although such
+documents are not strictly conforming XHTML 1.0 documents as
+defined above. Future work by W3C will address ways to specify
+conformance for documents involving multiple namespaces.</p>
+
+<p>The following example shows the way in which XHTML 1.0 could
+be used in conjunction with the MathML Recommendation:</p>
+
+<div class="good">
+<pre>
+&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
+ &lt;head&gt;
+ &lt;title&gt;A Math Example&lt;/title&gt;
+ &lt;/head&gt;
+ &lt;body&gt;
+ &lt;p&gt;The following is MathML markup:&lt;/p&gt;
+ &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
+ &lt;apply&gt; &lt;log/&gt;
+ &lt;logbase&gt;
+ &lt;cn&gt; 3 &lt;/cn&gt;
+ &lt;/logbase&gt;
+ &lt;ci&gt; x &lt;/ci&gt;
+ &lt;/apply&gt;
+ &lt;/math&gt;
+ &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+</div>
+
+<p>The following example shows the way in which XHTML 1.0 markup
+could be incorporated into another XML namespace:</p>
+
+<div class="good">
+<pre>
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;!-- initially, the default namespace is "books" --&gt;
+&lt;book xmlns='urn:loc.gov:books'
+ xmlns:isbn='urn:ISBN:0-395-36341-6' xml:lang="en" lang="en"&gt;
+ &lt;title&gt;Cheaper by the Dozen&lt;/title&gt;
+ &lt;isbn:number&gt;1568491379&lt;/isbn:number&gt;
+ &lt;notes&gt;
+ &lt;!-- make HTML the default namespace for a hypertext commentary --&gt;
+ &lt;p xmlns='http://www.w3.org/1999/xhtml'&gt;
+ This is also available &lt;a href="http://www.w3.org/"&gt;online&lt;/a&gt;.
+ &lt;/p&gt;
+ &lt;/notes&gt;
+&lt;/book&gt;
+</pre>
+</div>
+
+<h2><a name="uaconf" id="uaconf">3.2 User Agent
+Conformance</a></h2>
+
+<p>A conforming user agent must meet all of the following
+criteria:</p>
+
+<ol>
+<li>In order to be consistent with the XML 1.0 Recommendation <a href="#ref-xml">[XML]</a>, the user agent must parse and evaluate
+an XHTML document for well-formedness. If the user agent claims
+to be a validating user agent, it must also validate documents
+against their referenced DTDs according to <a href="#ref-xml">
+[XML]</a>.</li>
+
+<li>When the user agent claims to support <a href="#facilities">
+facilities</a> defined within this specification or required by
+this specification through normative reference, it must do so in
+ways consistent with the facilities' definition.</li>
+
+<li>When a user agent processes an XHTML document as generic XML,
+it shall only recognize attributes of type
+<code>ID</code> (e.g. the <code>id</code> attribute on most XHTML elements)
+as fragment identifiers.</li>
+
+<li>If a user agent encounters an element it does not recognize,
+it must render the element's content.</li>
+
+<li>If a user agent encounters an attribute it does not
+recognize, it must ignore the entire attribute specification
+(i.e., the attribute and its value).</li>
+
+<li>If a user agent encounters an attribute value it doesn't
+recognize, it must use the default attribute value.</li>
+
+<li>If it encounters an entity reference (other than one
+of the predefined entities) for which the User Agent has
+processed no declaration (which could happen if the declaration
+is in the external subset which the User Agent hasn't read), the entity
+reference should be rendered as the characters (starting
+with the ampersand and ending with the semi-colon) that
+make up the entity reference.</li>
+
+<li>When rendering content, User Agents that encounter
+characters or character entity references that are recognized but not renderable should display the document in such a way that it is obvious to the user that normal rendering has not taken place.</li>
+
+<li>
+The following characters are defined in [XML] as whitespace characters:
+
+<ul>
+<li>Space (&amp;#x0020;)</li>
+<li>Tab (&amp;#x0009;)</li>
+<li>Carriage return (&amp;#x000D;)</li>
+<li>Line feed (&amp;#x000A;)</li>
+</ul>
+
+<p>
+The XML processor normalizes different system's line end codes into one
+single line-feed character, that is passed up to the application. The XHTML
+user agent in addition, must treat the following characters as whitespace:
+</p>
+
+<ul>
+<li>Form feed (&amp;#x000C;)</li>
+<li>Zero-width space (&amp;#x200B;)</li>
+</ul>
+
+<p>
+In elements where the 'xml:space' attribute is set to 'preserve', the user
+agent must leave all whitespace characters intact (with the exception of
+leading and trailing whitespace characters, which should be removed).
+Otherwise, whitespace
+is handled according to the following rules:
+</p>
+
+<ul>
+<li>
+All whitespace surrounding block elements should be removed.
+</li>
+<li>
+Comments are removed entirely and do not affect whitespace handling. One
+whitespace character on either side of a comment is treated as two white
+space characters.
+</li>
+<li>
+Leading and trailing whitespace inside a block element must be removed.
+</li>
+<li>Line feed characters within a block element must be converted into a
+space (except when the 'xml:space' attribute is set to 'preserve').
+</li>
+<li>
+A sequence of white space characters must be reduced to a single space
+character (except when the 'xml:space' attribute is set to 'preserve').
+</li>
+<li>
+With regard to rendition,
+the User Agent should render the content in a
+manner appropriate to the language in which the content is written.
+In languages whose primary script is Latinate, the ASCII space
+character is typically used to encode both grammatical word boundaries and
+typographic whitespace; in languages whose script is related to Nagari
+(e.g., Sanskrit, Thai, etc.), grammatical boundaries may be encoded using
+the ZW 'space' character, but will not typically be represented by
+typographic whitespace in rendered output; languages using Arabiform scripts
+may encode typographic whitespace using a space character, but may also use
+the ZW space character to delimit 'internal' grammatical boundaries (what
+look like words in Arabic to an English eye frequently encode several words,
+e.g. 'kitAbuhum' = 'kitAbu-hum' = 'book them' == their book); and languages
+in the Chinese script tradition typically neither encode such delimiters nor
+use typographic whitespace in this way.
+</li>
+</ul>
+
+<p>Whitespace in attribute values is processed according to <a href="#ref-xml">[XML]</a>.</p>
+</li>
+</ol>
+
+<!--OddPage-->
+<h1><a name="diffs" id="diffs">4. Differences with HTML
+4.0</a></h1>
+
+<p>Due to the fact that XHTML is an XML application, certain
+practices that were perfectly legal in SGML-based HTML 4.0 <a href="#ref-html4">[HTML]</a> must be changed.</p>
+
+<h2><a name="h-4.1" id="h-4.1">4.1 Documents must be
+well-formed</a></h2>
+
+<p><a href="#wellformed">Well-formedness</a> is a new concept
+introduced by <a href="#ref-xml">[XML]</a>. Essentially this
+means that all elements must either have closing tags or be
+written in a special form (as described below), and that all the
+elements must nest.</p>
+
+<p>Although overlapping is illegal in SGML, it was widely
+tolerated in existing browsers.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: nested elements.</em></strong></p>
+
+<p>&lt;p&gt;here is an emphasized
+&lt;em&gt;paragraph&lt;/em&gt;.&lt;/p&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: overlapping elements</em></strong></p>
+
+<p>&lt;p&gt;here is an emphasized
+&lt;em&gt;paragraph.&lt;/p&gt;&lt;/em&gt;</p>
+</div>
+
+<h2><a name="h-4.2" id="h-4.2">4.2 Element and attribute
+names must be in lower case</a></h2>
+
+<p>XHTML documents must use lower case for all HTML element and
+attribute names. This difference is necessary because XML is
+case-sensitive e.g. &lt;li&gt; and &lt;LI&gt; are different
+tags.</p>
+
+<h2><a name="h-4.3" id="h-4.3">4.3 For non-empty elements,
+end tags are required</a></h2>
+
+<p>In SGML-based HTML 4.0 certain elements were permitted to omit
+the end tag; with the elements that followed implying closure.
+This omission is not permitted in XML-based XHTML. All elements
+other than those declared in the DTD as <code>EMPTY</code> must
+have an end tag.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: terminated elements</em></strong></p>
+
+<p>&lt;p&gt;here is a paragraph.&lt;/p&gt;&lt;p&gt;here is
+another paragraph.&lt;/p&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: unterminated elements</em></strong></p>
+
+<p>&lt;p&gt;here is a paragraph.&lt;p&gt;here is another
+paragraph.</p>
+</div>
+
+<h2><a name="h-4.4" id="h-4.4">4.4 Attribute values must
+always be quoted</a></h2>
+
+<p>All attribute values must be quoted, even those which appear
+to be numeric.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: quoted attribute values</em></strong></p>
+
+<p>&lt;table rows="3"&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: unquoted attribute values</em></strong></p>
+
+<p>&lt;table rows=3&gt;</p>
+</div>
+
+<h2><a name="h-4.5" id="h-4.5">4.5 Attribute
+Minimization</a></h2>
+
+<p>XML does not support attribute minimization. Attribute-value
+pairs must be written in full. Attribute names such as <code>
+compact</code> and <code>checked</code> cannot occur in elements
+without their value being specified.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: unminimized attributes</em></strong></p>
+
+<p>&lt;dl compact="compact"&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: minimized attributes</em></strong></p>
+
+<p>&lt;dl compact&gt;</p>
+</div>
+
+<h2><a name="h-4.6" id="h-4.6">4.6 Empty Elements</a></h2>
+
+<p>Empty elements must either have an end tag or the start tag must end with <code>/&gt;</code>. For instance,
+<code>&lt;br/&gt;</code> or <code>&lt;hr&gt;&lt;/hr&gt;</code>. See <a href="#guidelines">HTML Compatibility Guidelines</a> for information on ways to
+ensure this is backward compatible with HTML 4.0 user agents.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: terminated empty tags</em></strong></p>
+
+<p>&lt;br/&gt;&lt;hr/&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: unterminated empty tags</em></strong></p>
+
+<p>&lt;br&gt;&lt;hr&gt;</p>
+</div>
+
+<h2><a name="h-4.7" id="h-4.7">4.7 Whitespace handling in
+attribute values</a></h2>
+
+<p>In attribute values, user agents will strip leading and
+trailing whitespace from attribute values and map sequences
+of one or more whitespace characters (including line breaks) to
+a single inter-word space (an ASCII space character for western
+scripts). See <a href="http://www.w3.org/TR/REC-xml#AVNormalize">
+Section 3.3.3</a> of <a href="#ref-xml">[XML]</a>.</p>
+
+<h2><a name="h-4.8" id="h-4.8">4.8 Script and Style
+elements</a></h2>
+
+<p>In XHTML, the script and style elements are declared as having
+<code>#PCDATA</code> content. As a result, <code>&lt;</code> and
+<code>&amp;</code> will be treated as the start of markup, and
+entities such as <code>&amp;lt;</code> and <code>&amp;amp;</code>
+will be recognized as entity references by the XML processor to
+<code>&lt;</code> and <code>&amp;</code> respectively. Wrapping
+the content of the script or style element within a <code>
+CDATA</code> marked section avoids the expansion of these
+entities.</p>
+
+<div class="good">
+<pre>
+&lt;script&gt;
+ &lt;![CDATA[
+ ... unescaped script content ...
+ ]]&gt;
+ &lt;/script&gt;
+</pre>
+</div>
+
+<p><code>CDATA</code> sections are recognized by the XML
+processor and appear as nodes in the Document Object Model, see
+<a href="http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-E067D597">
+Section 1.3</a> of the DOM Level 1 Recommendation <a href="#ref-dom">[DOM]</a>.</p>
+
+<p>An alternative is to use external script and style
+documents.</p>
+
+<h2><a name="h-4.9" id="h-4.9">4.9 SGML exclusions</a></h2>
+
+<p>SGML gives the writer of a DTD the ability to exclude specific
+elements from being contained within an element. Such
+prohibitions (called "exclusions") are not possible in XML.</p>
+
+<p>For example, the HTML 4.0 Strict DTD forbids the nesting of an
+'<code>a</code>' element within another '<code>a</code>' element
+to any descendant depth. It is not possible to spell out such
+prohibitions in XML. Even though these prohibitions cannot be
+defined in the DTD, certain elements should not be nested. A
+summary of such elements and the elements that should not be
+nested in them is found in the normative <a href="#prohibitions">
+Appendix&#xA0;B</a>.</p>
+
+<h2><a name="h-4.10" id="h-4.10">4.10 The elements with 'id' and 'name'
+attributes</a></h2>
+
+<p>HTML 4.0 defined the <code>name</code> attribute for the elements
+<code>a</code>,
+<code>applet</code>, <code>frame</code>,
+<code>iframe</code>, <code>img</code>, and <code>map</code>.
+HTML 4.0 also introduced
+the <code>id</code> attribute. Both of these attributes are designed to be
+used as fragment identifiers.</p>
+<p>In XML, fragment identifiers are of type <code>ID</code>, and
+there can only be a single attribute of type <code>ID</code> per element.
+Therefore, in XHTML 1.0 the <code>id</code>
+attribute is defined to be of type <code>ID</code>. In order to
+ensure that XHTML 1.0 documents are well-structured XML documents, XHTML 1.0
+documents MUST use the <code>id</code> attribute when defining fragment
+identifiers, even on elements that historically have also had a
+<code>name</code> attribute.
+See the <a href="#guidelines">HTML Compatibility
+Guidelines</a> for information on ensuring such anchors are backwards
+compatible when serving XHTML documents as media type <code>text/html</code>.
+</p>
+<p>Note that in XHTML 1.0, the <code>name</code> attribute of these
+elements is formally deprecated, and will be removed in a
+subsequent version of XHTML.</p>
+
+<!--OddPage-->
+<h1><a name="issues" id="issues">5. Compatibility Issues</a></h1>
+
+<p>Although there is no requirement for XHTML 1.0 documents to be
+compatible with existing user agents, in practice this is easy to
+accomplish. Guidelines for creating compatible documents can be
+found in <a href="#guidelines">Appendix&#xA0;C</a>.</p>
+
+<h2><a name="media" id="media">5.1 Internet Media Type</a></h2>
+<p>As of the publication of this recommendation, the general
+recommended MIME labeling for XML-based applications
+has yet to be resolved.</p>
+
+<p>However, XHTML Documents which follow the guidelines set forth
+in <a href="#guidelines">Appendix C</a>, "HTML Compatibility Guidelines" may be
+labeled with the Internet Media Type "text/html", as they
+are compatible with most HTML browsers. This document
+makes no recommendation about MIME labeling of other
+XHTML documents.</p>
+
+<!--OddPage-->
+<h1><a name="future" id="future">6. Future Directions</a></h1>
+
+<p>XHTML 1.0 provides the basis for a family of document types
+that will extend and subset XHTML, in order to support a wide
+range of new devices and applications, by defining modules and
+specifying a mechanism for combining these modules. This
+mechanism will enable the extension and sub-setting of XHTML 1.0
+in a uniform way through the definition of new modules.</p>
+
+<h2><a name="mods" id="mods">6.1 Modularizing HTML</a></h2>
+
+<p>As the use of XHTML moves from the traditional desktop user
+agents to other platforms, it is clear that not all of the XHTML
+elements will be required on all platforms. For example a hand
+held device or a cell-phone may only support a subset of XHTML
+elements.</p>
+
+<p>The process of modularization breaks XHTML up into a series of
+smaller element sets. These elements can then be recombined to
+meet the needs of different communities.</p>
+
+<p>These modules will be defined in a later W3C document.</p>
+
+<h2><a name="extensions" id="extensions">6.2 Subsets and
+Extensibility</a></h2>
+
+<p>Modularization brings with it several advantages:</p>
+
+<ul>
+<li>
+<p>It provides a formal mechanism for sub-setting XHTML.</p>
+</li>
+
+<li>
+<p>It provides a formal mechanism for extending XHTML.</p>
+</li>
+
+<li>
+<p>It simplifies the transformation between document types.</p>
+</li>
+
+<li>
+<p>It promotes the reuse of modules in new document types.</p>
+</li>
+</ul>
+
+<h2><a name="profiles" id="profiles">6.3 Document
+Profiles</a></h2>
+
+<p>A document profile specifies the syntax and semantics of a set
+of documents. Conformance to a document profile provides a basis
+for interoperability guarantees. The document profile specifies
+the facilities required to process documents of that type, e.g.
+which image formats can be used, levels of scripting, style sheet
+support, and so on.</p>
+
+<p>For product designers this enables various groups to define
+their own standard profile.</p>
+
+<p>For authors this will obviate the need to write several
+different versions of documents for different clients.</p>
+
+<p>For special groups such as chemists, medical doctors, or
+mathematicians this allows a special profile to be built using
+standard HTML elements plus a group of elements geared to the
+specialist's needs.</p>
+
+<!--OddPage-->
+<h1><a name="appendices" id="appendices"></a>
+<a name="dtds" id="dtds">Appendix A. DTDs</a></h1>
+
+<p><b>This appendix is normative.</b></p>
+
+<p>These DTDs and entity sets form a normative part of this
+specification. The complete set of DTD files together with an XML
+declaration and SGML Open Catalog is included in the <a href="xhtml1.zip">zip file</a> for this specification.</p>
+
+<h2><a name="h-A1" id="h-A1">A.1 Document Type
+Definitions</a></h2>
+
+<p>These DTDs approximate the HTML 4.0 DTDs. It is likely that
+when the DTDs are modularized, a method of DTD construction will
+be employed that corresponds more closely to HTML 4.0.</p>
+
+<ul>
+<li>
+<p><a href="DTD/xhtml1-strict.dtd" type="text/plain">
+XHTML-1.0-Strict</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml1-transitional.dtd" type="text/plain">
+XHTML-1.0-Transitional</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml1-frameset.dtd" type="text/plain">
+XHTML-1.0-Frameset</a></p>
+</li>
+</ul>
+
+<h2><a name="h-A2" id="h-A2">A.2 Entity Sets</a></h2>
+
+<p>The XHTML entity sets are the same as for HTML 4.0, but have
+been modified to be valid XML 1.0 entity declarations. Note the
+entity for the Euro currency sign (<code>&amp;euro;</code> or
+<code>&amp;#8364;</code> or <code>&amp;#x20AC;</code>) is defined
+as part of the special characters.</p>
+
+<ul>
+<li>
+<p><a href="DTD/xhtml-lat1.ent">Latin-1 characters</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml-special.ent">Special characters</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml-symbol.ent">Symbols</a></p>
+</li>
+</ul>
+
+<!--OddPage-->
+<h1><a name="prohibitions" id="prohibitions">Appendix B. Element
+Prohibitions</a></h1>
+
+<p><b>This appendix is normative.</b></p>
+
+<p>The following elements have prohibitions on which elements
+they can contain (see <a href="#h-4.9">Section 4.9</a>). This
+prohibition applies to all depths of nesting, i.e. it contains
+all the descendant elements.</p>
+
+<dl><dt><code class="tag">a</code></dt>
+<dd>
+cannot contain other <code>a</code> elements.</dd>
+<dt><code class="tag">pre</code></dt>
+<dd>cannot contain the <code>img</code>, <code>object</code>,
+<code>big</code>, <code>small</code>, <code>sub</code>, or <code>
+sup</code> elements.</dd>
+
+<dt><code class="tag">button</code></dt>
+<dd>cannot contain the <code>input</code>, <code>select</code>,
+<code>textarea</code>, <code>label</code>, <code>button</code>,
+<code>form</code>, <code>fieldset</code>, <code>iframe</code> or
+<code>isindex</code> elements.</dd>
+<dt><code class="tag">label</code></dt>
+<dd>cannot contain other <code class="tag">label</code> elements.</dd>
+<dt><code class="tag">form</code></dt>
+<dd>cannot contain other <code>form</code> elements.</dd>
+</dl>
+
+<!--OddPage-->
+<h1><a name="guidelines" id="guidelines">Appendix C.
+HTML Compatibility Guidelines</a></h1>
+
+<p><b>This appendix is informative.</b></p>
+
+<p>This appendix summarizes design guidelines for authors who
+wish their XHTML documents to render on existing HTML user
+agents.</p>
+
+<h2>C.1 Processing Instructions</h2>
+<p>Be aware that processing instructions are rendered on some
+user agents. However, also note that when the XML declaration is not included
+in a document, the document can only use the default character encodings UTF-8
+or UTF-16.</p>
+
+<h2>C.2 Empty Elements</h2>
+<p>Include a space before the trailing <code>/</code> and <code>
+&gt;</code> of empty elements, e.g. <code class="greenmono">
+&lt;br&#xA0;/&gt;</code>, <code class="greenmono">
+&lt;hr&#xA0;/&gt;</code> and <code class="greenmono">&lt;img
+src="karen.jpg" alt="Karen"&#xA0;/&gt;</code>. Also, use the
+minimized tag syntax for empty elements, e.g. <code class="greenmono">&lt;br /&gt;</code>, as the alternative syntax <code class="greenmono">&lt;br&gt;&lt;/br&gt;</code> allowed by XML
+gives uncertain results in many existing user agents.</p>
+
+<h2>C.3 Element Minimization and Empty Element Content</h2>
+<p>Given an empty instance of an element whose content model is
+not <code>EMPTY</code> (for example, an empty title or paragraph)
+do not use the minimized form (e.g. use <code class="greenmono">
+&lt;p&gt; &lt;/p&gt;</code> and not <code class="greenmono">
+&lt;p&#xA0;/&gt;</code>).</p>
+
+<h2>C.4 Embedded Style Sheets and Scripts</h2>
+<p>Use external style sheets if your style sheet uses <code>
+&lt;</code> or <code>&amp;</code> or <code>]]&gt;</code> or <code>--</code>. Use
+external scripts if your script uses <code>&lt;</code> or <code>
+&amp;</code> or <code>]]&gt;</code> or <code>--</code>. Note that XML parsers
+are permitted to silently remove the contents of comments. Therefore, the historical
+practice of "hiding" scripts and style sheets within comments to make the
+documents backward compatible is likely to not work as expected in XML-based
+implementations.</p>
+
+<h2>C.5 Line Breaks within Attribute Values</h2>
+<p>Avoid line breaks and multiple whitespace characters within
+attribute values. These are handled inconsistently by user
+agents.</p>
+
+<h2>C.6 Isindex</h2>
+<p>Don't include more than one <code>isindex</code> element in
+the document <code>head</code>. The <code>isindex</code> element
+is deprecated in favor of the <code>input</code> element.</p>
+
+<h2>C.7 The <code>lang</code> and <code>xml:lang</code> Attributes</h2>
+<p>Use both the <code>lang</code> and <code>xml:lang</code>
+attributes when specifying the language of an element. The value
+of the <code>xml:lang</code> attribute takes precedence.</p>
+
+<h2>C.8 Fragment Identifiers</h2>
+<p>In XML, <abbr title="Uniform Resource Identifiers">URIs</abbr> [<a href="#ref-rfc2396">RFC2396</a>] that end with fragment identifiers of the form
+<code>"#foo"</code> do not refer to elements with an attribute
+<code>name="foo"</code>; rather, they refer to elements with an
+attribute defined to be of type <code>ID</code>, e.g., the <code>
+id</code> attribute in HTML 4.0. Many existing HTML clients don't
+support the use of <code>ID</code>-type attributes in this way,
+so identical values may be supplied for both of these attributes to ensure
+maximum forward and backward compatibility (e.g., <code class="greenmono">&lt;a id="foo" name="foo"&gt;...&lt;/a&gt;</code>).</p>
+
+<p>Further, since the set of
+legal values for attributes of type <code>ID</code> is much smaller than
+for those of type <code>CDATA</code>, the type of the <code>name</code>
+attribute has been changed to <code>NMTOKEN</code>. This attribute is
+constrained such that it can only have the same values as type
+<code>ID</code>, or as the <code>Name</code> production in XML 1.0 Section
+2.5, production 5. Unfortunately, this constraint cannot be expressed in the
+XHTML 1.0 DTDs. Because of this change, care must be taken when
+converting existing HTML documents. The values of these attributes
+must be unique within the document, valid, and any references to these
+fragment identifiers (both
+internal and external) must be updated should the values be changed during
+conversion.</p>
+<p>Finally, note that XHTML 1.0 has deprecated the
+<code>name</code> attribute of the <code>a</code>, <code>applet</code>, <code>frame</code>, <code>iframe</code>, <code>img</code>, and <code>map</code>
+elements, and it will be
+removed from XHTML in subsequent versions.</p>
+
+<h2>C.9 Character Encoding</h2>
+<p>To specify a character encoding in the document, use both the
+encoding attribute specification on the xml declaration (e.g.
+<code class="greenmono">&lt;?xml version="1.0"
+encoding="EUC-JP"?&gt;</code>) and a meta http-equiv statement
+(e.g. <code class="greenmono">&lt;meta http-equiv="Content-type"
+content='text/html; charset="EUC-JP"'&#xA0;/&gt;</code>). The
+value of the encoding attribute of the xml processing instruction
+takes precedence.</p>
+
+<h2>C.10 Boolean Attributes</h2>
+<p>Some HTML user agents are unable to interpret boolean
+attributes when these appear in their full (non-minimized) form,
+as required by XML 1.0. Note this problem doesn't effect user
+agents compliant with HTML 4.0. The following attributes are
+involved: <code>compact</code>, <code>nowrap</code>, <code>
+ismap</code>, <code>declare</code>, <code>noshade</code>, <code>
+checked</code>, <code>disabled</code>, <code>readonly</code>,
+<code>multiple</code>, <code>selected</code>, <code>
+noresize</code>, <code>defer</code>.</p>
+
+<h2>C.11 Document Object Model and XHTML</h2>
+<p>
+The Document Object Model level 1 Recommendation [<a href="#ref-dom">DOM</a>]
+defines document object model interfaces for XML and HTML 4.0. The HTML 4.0
+document object model specifies that HTML element and attribute names are
+returned in upper-case. The XML document object model specifies that
+element and attribute names are returned in the case they are specified. In
+XHTML 1.0, elements and attributes are specified in lower-case. This apparent difference can be
+addressed in two ways:
+</p>
+<ol>
+<li>Applications that access XHTML documents served as Internet media type
+<code>text/html</code>
+via the <abbr title="Document Object Model">DOM</abbr> can use the HTML DOM,
+and can rely upon element and attribute names being returned in
+upper-case from those interfaces.</li>
+<li>Applications that access XHTML documents served as Internet media types
+<code>text/xml</code> or <code>application/xml</code>
+can also use the XML DOM. Elements and attributes will be returned in lower-case.
+Also, some XHTML elements may or may
+not appear
+in the object tree because they are optional in the content model
+(e.g. the <code>tbody</code> element within
+<code>table</code>). This occurs because in HTML 4.0 some elements were
+permitted to be minimized such that their start and end tags are both omitted
+(an SGML feature).
+This is not possible in XML. Rather than require document authors to insert
+extraneous elements, XHTML has made the elements optional.
+Applications need to adapt to this
+accordingly.</li>
+</ol>
+
+<h2>C.12 Using Ampersands in Attribute Values</h2>
+<p>
+When an attribute value contains an ampersand, it must be expressed as a character
+entity reference
+(e.g. "<code>&amp;amp;</code>"). For example, when the
+<code>href</code> attribute
+of the <code>a</code> element refers to a
+CGI script that takes parameters, it must be expressed as
+<code>http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;amp;name=user</code>
+rather than as
+<code>http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user</code>.
+</p>
+
+<h2>C.13 Cascading Style Sheets (CSS) and XHTML</h2>
+
+<p>The Cascading Style Sheets level 2 Recommendation [<a href="#ref-css2">CSS2</a>] defines style
+properties which are applied to the parse tree of the HTML or XML
+document. Differences in parsing will produce different visual or
+aural results, depending on the selectors used. The following hints
+will reduce this effect for documents which are served without
+modification as both media types:</p>
+
+<ol>
+<li>
+CSS style sheets for XHTML should use lower case element and
+attribute names.</li>
+
+
+<li>In tables, the tbody element will be inferred by the parser of an
+HTML user agent, but not by the parser of an XML user agent. Therefore
+you should always explicitely add a tbody element if it is referred to
+in a CSS selector.</li>
+
+<li>Within the XHTML name space, user agents are expected to
+recognize the "id" attribute as an attribute of type ID.
+Therefore, style sheets should be able to continue using the
+shorthand "#" selector syntax even if the user agent does not read
+the DTD.</li>
+
+<li>Within the XHTML name space, user agents are expected to
+recognize the "class" attribute. Therefore, style sheets should be
+able to continue using the shorthand "." selector syntax.</li>
+
+<li>
+CSS defines different conformance rules for HTML and XML documents;
+be aware that the HTML rules apply to XHTML documents delivered as
+HTML and the XML rules apply to XHTML documents delivered as XML.</li>
+</ol>
+<!--OddPage-->
+<h1><a name="acks" id="acks">Appendix D.
+Acknowledgements</a></h1>
+
+<p><b>This appendix is informative.</b></p>
+
+<p>This specification was written with the participation of the
+members of the W3C HTML working group:</p>
+
+<dl>
+<dd>Steven Pemberton, CWI (HTML Working Group Chair)<br />
+Murray Altheim, Sun Microsystems<br />
+Daniel Austin, CNET: The Computer Network<br />
+Frank Boumphrey, HTML Writers Guild<br />
+John Burger, Mitre<br />
+Andrew W. Donoho, IBM<br />
+Sam Dooley, IBM<br />
+Klaus Hofrichter, GMD<br />
+Philipp Hoschka, W3C<br />
+Masayasu Ishikawa, W3C<br />
+Warner ten Kate, Philips Electronics<br />
+Peter King, Phone.com<br />
+Paula Klante, JetForm<br />
+Shin'ichi Matsui, W3C/Panasonic<br />
+Shane McCarron, Applied Testing and Technology (The Open Group through August
+1999)<br />
+Ann Navarro, HTML Writers Guild<br />
+Zach Nies, Quark<br />
+Dave Raggett, W3C/HP (W3C lead for HTML)<br />
+Patrick Schmitz, Microsoft<br />
+Sebastian Schnitzenbaumer, Stack Overflow<br />
+Chris Wilson, Microsoft<br />
+Ted Wugofski, Gateway 2000<br />
+Dan Zigmond, WebTV Networks</dd>
+</dl>
+
+<!--OddPage-->
+<h1><a name="refs" id="refs">Appendix E. References</a></h1>
+
+<p><b>This appendix is informative.</b></p>
+
+<dl>
+
+<dt><a name="ref-css2" id="ref-css2"><b>[CSS2]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/REC-CSS2">"Cascading Style Sheets, level 2 (CSS2) Specification"</a>, B.
+Bos, H. W. Lie, C. Lilley, I. Jacobs, 12 May 1998.<br />
+Available at: <a href="http://www.w3.org/TR/REC-CSS2">
+http://www.w3.org/TR/REC-CSS2</a></dd>
+
+<dt><a name="ref-dom" id="ref-dom"><b>[DOM]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/REC-DOM-Level-1">"Document Object Model (DOM) Level 1 Specification"</a>, Lauren
+Wood <i>et al.</i>, 1 October 1998.<br />
+Available at: <a href="http://www.w3.org/TR/REC-DOM-Level-1">
+http://www.w3.org/TR/REC-DOM-Level-1</a></dd>
+
+<dt><a name="ref-html4" id="ref-html4"><b>[HTML]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/1999/PR-html40-19990824">"HTML 4.01 Specification"</a>, D. Raggett, A. Le&#xA0;Hors, I.
+Jacobs, 24 August 1999.<br />
+Available at: <a href="http://www.w3.org/TR/1999/PR-html40-19990824">
+http://www.w3.org/TR/1999/PR-html40-19990824</a></dd>
+
+<dt><a name="ref-posix" id="ref-posix"><b>[POSIX.1]</b></a></dt>
+
+<dd>"ISO/IEC 9945-1:1990 Information Technology - Portable
+Operating System Interface (POSIX) - Part 1: System Application
+Program Interface (API) [C Language]", Institute of Electrical
+and Electronics Engineers, Inc, 1990.</dd>
+
+<dt><a name="ref-rfc2046" id="ref-rfc2046"><b>
+[RFC2046]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2046.txt">"RFC2046: Multipurpose Internet Mail Extensions (MIME) Part
+Two: Media Types"</a>, N. Freed and N. Borenstein, November
+1996.<br />
+Available at <a href="http://www.ietf.org/rfc/rfc2046.txt">
+http://www.ietf.org/rfc/rfc2046.txt</a>. Note that this RFC
+obsoletes RFC1521, RFC1522, and RFC1590.</dd>
+
+<dt><a name="ref-rfc2119" id="ref-rfc2119"><b>
+[RFC2119]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2119.txt">"RFC2119: Key words for use in RFCs to Indicate Requirement
+Levels"</a>, S. Bradner, March 1997.<br />
+Available at: <a href="http://www.ietf.org/rfc/rfc2119.txt">
+http://www.ietf.org/rfc/rfc2119.txt</a></dd>
+
+<dt><a name="ref-rfc2376" id="ref-rfc2376"><b>
+[RFC2376]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2376.txt">"RFC2376: XML Media Types"</a>, E. Whitehead, M. Murata, July
+1998.<br />
+Available at: <a href="http://www.ietf.org/rfc/rfc2376.txt">
+http://www.ietf.org/rfc/rfc2376.txt</a></dd>
+
+<dt><a name="ref-rfc2396" id="ref-rfc2396"><b>
+[RFC2396]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2396.txt">"RFC2396: Uniform Resource Identifiers (URI): Generic
+Syntax"</a>, T. Berners-Lee, R. Fielding, L. Masinter, August
+1998.<br />
+This document updates RFC1738 and RFC1808.<br />
+Available at: <a href="http://www.ietf.org/rfc/rfc2396.txt">
+http://www.ietf.org/rfc/rfc2396.txt</a></dd>
+
+<dt><a name="ref-xml" id="ref-xml"><b>[XML]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/REC-xml">"Extensible Markup Language (XML) 1.0 Specification"</a>, T.
+Bray, J. Paoli, C. M. Sperberg-McQueen, 10 February 1998.<br />
+Available at: <a href="http://www.w3.org/TR/REC-xml">
+http://www.w3.org/TR/REC-xml</a></dd>
+
+<dt><a name="ref-xmlns" id="ref-xmlns"><b>[XMLNAMES]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/REC-xml-names">"Namespaces in XML"</a>, T. Bray, D. Hollander, A. Layman, 14
+January 1999.<br />
+XML namespaces provide a simple method for qualifying names used
+in XML documents by associating them with namespaces identified
+by URI.<br />
+Available at: <a href="http://www.w3.org/TR/REC-xml-names">
+http://www.w3.org/TR/REC-xml-names</a></dd>
+
+</dl>
+<p><a href="http://www.w3.org/WAI/WCAG1AAA-Conformance" title="Explanation of Level Triple-A Conformance">
+<img height="32" width="88" src="wcag1AAA.gif" alt="Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0" /></a></p>
+<div class="navbar">
+ <hr />
+ <a href="#toc">table of contents</a>
+</div>
+</body>
+</html>
diff --git a/result/valid/xhtml1.xhtml.err b/result/valid/xhtml1.xhtml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/xhtml1.xhtml.err
diff --git a/result/valid/xlink.xml b/result/valid/xlink.xml
new file mode 100644
index 0000000..7b35a0f
--- /dev/null
+++ b/result/valid/xlink.xml
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification::19990205//EN" "dtds/xmlspec.dtd" [
+<!ENTITY doc-type "WD">
+<!ENTITY iso6.doc.date "29-May-1999">
+]>
+<!--ArborText, Inc., 1988-1998, v.4002-->
+<?Pub UDT _bookmark _target?>
+<?Pub Inc?>
+<?xml-stylesheet href="file:///C|/Program%20Files/SoftQuad/XMetaL%201/display/xmlspec.css"
+type="text/css"?>
+<spec>
+
+<!-- Last edited: 27 May 1999 by bent -->
+<header><?Pub Dtl?>
+ <title>XML Linking Language (XLink)</title>
+ <version>Version 1.0</version>
+ <w3c-designation><!-- &doc-type;-&iso6.doc.date; --> WD-xlink-19990527</w3c-designation>
+ <w3c-doctype>World Wide Web Consortium Working Draft</w3c-doctype>
+ <pubdate><day>29</day><month>May</month><year>1999</year></pubdate>
+ <notice>
+ <p>This draft is for public discussion.</p>
+ </notice>
+ <publoc><loc href="http://www.w3.org/XML/Group/1999/05/WD-xlink-current">http://www.w3.org/XML/Group/1999/05/WD-xlink-current</loc></publoc>
+ <prevlocs>
+ <!--Check: was it actually August?-->
+ <loc href="http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527">http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527</loc>
+ <loc href="http://www.w3.org/XML/Group/1999/05/WD-xlink-19990505">http://www.w3.org/XML/Group/1999/05/WD-xlink-19990505</loc>
+ <loc href="http://www.w3.org/TR/1998/WD-xlink-19980303">http://www.w3.org/TR/1998/WD-xlink-19980303</loc>
+ <loc href="http://www.w3.org/TR/WD-xml-link-970630">http://www.w3.org/TR/WD-xml-link-970630</loc></prevlocs>
+
+ <authlist>
+ <!--Updated author hrefs dorchard-->
+ <!-- Update Steve's email - bent -->
+ <author>
+ <name>Steve DeRose</name>
+ <affiliation>Inso Corp. and Brown University</affiliation>
+ <email href="mailto:Steven_DeRose@Brown.edu">Steven_DeRose@Brown.edu</email>
+ </author>
+ <author>
+ <name>David Orchard</name>
+ <affiliation>IBM Corp.</affiliation>
+ <email href="mailto:dorchard@ca.ibm.com">dorchard@ca.ibm.com</email>
+ </author>
+ <author>
+ <name>Ben Trafford</name>
+ <affiliation>Invited Expert</affiliation>
+ <email href="mailto:bent@exemplary.net">bent@exemplary.net</email>
+ </author>
+ <!-- I suggest we move Eve and Tim down to the Acknowledgements section. We
+ also ought to add Gabe Beged-Dov there, as well. bent
+ how shall we cite Tim? sjd What about with an Acknowledgments section?
+ -elm <AUTHOR> <NAME>Tim Bray</NAME> <AFFILIATION>Textuality</AFFILIATION>
+ <EMAIL>tbray@textuality.com</EMAIL> </AUTHOR>-->
+ </authlist>
+
+ <status>
+ <p>This is a W3C Working Draft for review by W3C members and other interested parties. It is a draft document and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than "work in progress". A list of current W3C working drafts can be found at <loc href="http://www.w3.org/TR">http://www.w3.org/TR</loc>.</p>
+ <p><emph>Note:</emph> Since working drafts are subject to frequent change, you are advised to reference the above URI, rather than the URIs for working drafts themselves. Some of the work remaining is described in <specref ref="unfinished"/>. </p>
+ <p>This work is part of the W3C XML Activity (for current status, see <loc href="http://www.w3.org/MarkUp/SGML/Activity">http://www.w3.org/XML/Activity </loc>). For information about the XPointer language which is expected to be used with XLink, see <loc href="http://www.w3.org/MarkUp/SGML/Activity">http://www.w3.org/TR/WD-xptr</loc>.
+ </p>
+ <p>See <loc href="http://www.w3.org/TR/NOTE-xlink-principles">http://www.w3.org/TR/NOTE-xlink-principles </loc> for additional background on the design principles informing XLink.</p>
+ <p>Also see <loc href="http://www.w3.org/TR/NOTE-xlink-req/">http://www.w3.org/TR/NOTE-xlink-req/</loc> for the XLink requirements that this document attempts to satisfy.</p>
+ </status>
+
+ <abstract>
+ <!-- edited the abstract for further clarity - bent -->
+ <p>This specification defines constructs that may be inserted into XML DTDs, schemas and document instances to describe links between objects. It uses XML syntax to create structures that can describe the simple unidirectional hyperlinks of today's HTML as well as more sophisticated links.</p>
+ </abstract>
+
+ <pubstmt>
+ <p>Burlington, Seekonk, et al.: World-Wide Web Consortium, XML Working Group, 1998.</p>
+ </pubstmt>
+
+ <sourcedesc>
+ <p>Created in electronic form.</p>
+ </sourcedesc>
+
+ <langusage>
+ <language id="en">English</language>
+ <language id="ebnf">Extended Backus-Naur Form (formal grammar)</language>
+ </langusage>
+
+ <revisiondesc>
+ <slist>
+ <sitem>1997-01-15 : Skeleton draft by TB</sitem>
+ <sitem>1997-01-24 : Fleshed out by sjd</sitem>
+ <sitem>1997-04-08 : Substantive draft</sitem>
+ <sitem>1997-06-30 : Public draft</sitem>
+ <sitem>1997-08-01 : Public draft</sitem>
+ <sitem>1997-08-05 : Prose/organization work by sjd</sitem>
+ <sitem>1997-10-14: Conformance and design principles; a bit of cleanup by elm</sitem>
+ <sitem>1997-11-07: Update for editorial issues per issues doc, by sjd.</sitem>
+ <sitem>1997-12-01: Update for editorial issues per issues doc in preparation for F2F meeting, by sjd.</sitem>
+ <sitem>1998-01-13: Editorial cleanup, addition of new design principles, by elm.</sitem>
+ <sitem>1998-02-27: Splitting out of XLink and XPointer, by elm.</sitem>
+ <sitem>1998-03-03: Moved most of the XPointer locator stuff here. elm</sitem>
+ <sitem>1999-04-24: Editorial rewrites to represent new ideas on XLink, especially the inclusion of arcs. bent</sitem>
+ <sitem>1999-05-05: Prose/organization work by dorchard. Moved much of the semantics section around, from: locators, link semantics, remote resource semantics, local resource semantics; to: resource semantics, locators, behavior semantics, link semantics, arc semantics</sitem>
+ <sitem>1999-05-12: Prose/organization work. Re-organized some of the sections, removed XML constructs from the document, added descriptive prose, edited document text for clarity. Rewrote the link recognition section. bent</sitem>
+ <sitem>1999-05-17: Further prose work. Added non-normative examples. Clarified arcs. bent</sitem>
+ <sitem>1999-05-23: Edited for grammar and clarity. bent</sitem>
+ <sitem>1999-05-27: Final once-over before sending to group. Fixed sjd's email address. bent</sitem>
+ </slist>
+ </revisiondesc>
+</header>
+
+<body>
+ <div1><?Pub Dtl?>
+ <head>Introduction</head>
+ <p>This specification defines constructs that may be inserted into XML DTDs, schemas, and document instances to describe links between objects. A <termref def="dt-link">link</termref>, as the term is used here, is an explicit relationship between two or more data objects or portions of data objects. This specification is concerned with the syntax used to assert link existence and describe link characteristics. Implicit (unasserted) relationships, for example that of one word to the next or that of a word in a text to its entry in an on-line dictionary are obviously important, but outside its scope.</p>
+ <p>Links are asserted by <xtermref href="WD-xml-lang.html#dt-element">elements </xtermref> contained in <xtermref href="WD-xml-lang.html#dt-xml-doc">XML document instances</xtermref>. The simplest case is very like an HTML <code>A</code> link, and has these characteristics:
+ <ulist>
+ <item><p>The link is expressed at one of its ends (similar to the <code>A</code> element in some document)</p></item>
+ <item><p>Users can only initiate travel from that end to the other</p></item>
+ <item><p>The link's effect on windows, frames, go-back lists, stylesheets in use, and so on is mainly determined by browsers, not by the link itself. For example, traveral of <code>A</code> links normally replaces the current view, perhaps with a user option to open a new window.</p></item>
+ <item><p>The link goes to only one destination (although a server may have great freedom in finding or dynamically creating that destination).</p></item>
+ </ulist>
+ </p>
+ <p>While this set of characteristics is already very powerful and obviously has proven itself highly useful and effective, each of these assumptions also limits the range of hypertext functionality. The linking model defined here provides ways to create links that go beyond each of these specific characteristics, thus providing features previously available mostly in dedicated hypermedia systems.
+ </p>
+
+<div2>
+ <head>Origin and Goals</head>
+ <p>Following is a summary of the design principles governing XLink:
+ <olist>
+ <item><p>XLink must be straightforwardly usable over the Internet. </p></item>
+ <item><p>XLink must be usable by a wide variety of link usage domains and classes of linking application software.</p></item>
+ <item><p>XLink must support HTML 4.0 linking constructs.</p></item>
+ <item><p>The XLink expression language must be XML.</p></item>
+ <item><p>The XLink design must be formal, concise, and illustrative.</p></item>
+ <item><p>XLinks must be human-readable and human-writable.</p></item>
+ <item><p>XLinks may reside within or outside the documents in which the
+ participating resources reside. </p></item>
+ <item><p>XLink must represent the abstract structure and significance of links.</p></item>
+ <item><p>XLink must be feasible to implement.</p></item>
+ <item><p>XLink must be informed by knowledge of established hypermedia systems and standards.</p></item>
+ </olist>
+ </p>
+</div2>
+<!--Changed the list of requirements to reflect current XLink requirements
+document. bent-->
+
+<div2>
+ <head>Relationship to Existing Standards</head>
+ <p>Three standards have been especially influential:
+ <ulist>
+ <item><p><emph>HTML:</emph> Defines several SGML element types that represent links.</p></item>
+ <item><p><emph>HyTime:</emph> Defines inline and out-of-line link structures and some semantic features, including traversal control and presentation of objects. <!--Changed from "placement of objects into a display or other space" -elm-->
+ </p></item>
+ <item><p><emph>Text Encoding Initiative Guidelines (TEI P3):</emph> Provides structures for creating links, aggregate objects, and link collections out of them.</p></item>
+ </ulist>
+ </p>
+ <p>Many other linking systems have also informed this design, especially Dexter, FRESS, MicroCosm, and InterMedia.</p>
+</div2>
+
+<div2>
+ <head>Terminology</head>
+ <p>The following basic terms apply in this document. <!--<IMG
+ SRC="local://./linkdiag.gif">(figure to be inserted)-->
+ <glist>
+ <gitem>
+ <label><termdef id="dt-arc" term="Arc">arc</termdef></label>
+ <def><p>A symbolic representation of traversal behavior in links, especially the direction, context and timing of traversal.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-eltree" term="Element Tree">element tree</termdef></label>
+ <def><p>A representation of the relevant structure specified by the tags and attributes in an XML document, based on "groves" as defined in the ISO DSSSL standard. </p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-inline" term="In-Line Link">inline link</termdef></label>
+ <def><p>Abstractly, a <termref def="dt-link">link</termref> which serves as one of its own <termref def="dt-resource">resources</termref>. Concretely, a link where the content of the <termref def="dt-linkel">linking element</termref> serves as a <termref def="dt-particip-resource">participating resource</termref>.
+ HTML <code>A</code>, HyTime <code>clink</code>, and TEI <code>XREF</code>
+ are all inline links.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-link" term="Link">link</termdef></label>
+ <def><p>An explicit relationship between two or more data objects or portions of data objects.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-linkel" term="Linking Element">linking element </termdef></label>
+ <def><p>An <xtermref href="WD-xml-lang.html#dt-element">element</xtermref> that asserts the existence and describes the characteristics of a <termref def="dt-link"> link</termref>.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-local-resource" term="Local Resource">local resource</termdef></label>
+ <def><p>The content of an <termref def="dt-inline">inline</termref>linking element. Note that the content of the linking element could be explicitly pointed to by means of a regular <termref def="dt-locator">locator</termref> in the same linking element, in which case the resource is considered <termref def="dt-remote-resource"> remote</termref>, not local.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-locator" term="Locator">locator</termdef> </label>
+ <def><p>Data, provided as part of a link, which identifies a
+ <termref def="dt-resource">resource</termref>.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-multidir" term="Multi-Directional Link">multidirectional link</termdef></label>
+ <def><p>A <termref def="dt-link">link</termref> whose <termref def="dt-traversal"> traversal</termref> can be initiated from more than one of its <termref def="dt-particip-resource"> participating resources</termref>. Note that being able to "go back" after following a one-directional link does not make the link multidirectional.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-outofline" term="Out-of-line Link">out-of-line link</termdef></label>
+ <def><p>A <termref def="dt-link">link</termref> whose content does not serve as one of the link's <termref def="dt-particip-resource">participating resources </termref>. Such links presuppose a notion like <termref def="dt-xlg">extended link groups</termref>, which instruct application software where to look for links. Out-of-line links are generally required for supporting multidirectional <termref def="dt-traversal">traversal</termref> and for allowing read-only resources to have outgoing links.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-parsedq" term="Parsed">parsed</termdef></label> <def><p>In the context of link behavior, a parsed link is any link whose content is transcluded into the document where the link originated. The use of the term "parsed" directly refers to the concept in XML of a
+ parsed entity.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-particip-resource" term="Participating Resource"> participating resource</termdef></label>
+ <def><p>A <termref def="dt-resource">resource</termref> that belongs to a link. All resources are potential contributors to a link; participating resources are the actual contributors to a particular link.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-remote-resource" term="Remote Resource">remote resource</termdef></label>
+ <def><p>Any participating resource of a link that is pointed to with a locator. </p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-resource" term="Resource">resource</termdef></label>
+ <def><p>In the abstract sense, an addressable unit of information or service that is participating in a <termref def="dt-link">link</termref>. Examples include files, images, documents, programs, and query results. Concretely, anything reachable by the use of a <termref def="dt-locator">locator</termref> in some <termref def="dt-linkel">linking element</termref>. Note that this term and its definition are taken from the basic specifications governing the World Wide Web. <!--Joel notes: need link here. bent asks: A link?-->
+ </p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-subresource" term="sub-Resource">sub-resource</termdef></label>
+ <def><p>A portion of a resource, pointed to as the precise destination of a link. As one example, a link might specify that an entire document be retrieved and displayed, but that some specific part(s) of it is the specific linked data, to be treated in an application-appropriate manner such as indication by highlighting, scrolling, etc.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-traversal" term="Traversal">traversal</termdef></label>
+ <def><p>The action of using a <termref def="dt-link">link</termref>; that is, of accessing a <termref def="dt-resource">resource</termref>. Traversal may be initiated by a user action (for example, clicking on the displayed content of a <termref def="dt-linkel">linking element</termref>) or occur under program control.</p></def>
+ </gitem>
+ </glist>
+ </p>
+</div2>
+
+<div2>
+ <head>Notation</head>
+ <p>The formal grammar for <termref def="dt-locator">locators</termref> is given using a simple Extended Backus-Naur Form (EBNF) location, as described in <xspecref href="http://www.w3.org/TR/REC-xml#sec-notation">the XML specification</xspecref>.</p>
+ <!-- fixed link to XML spec - bent -->
+</div2>
+</div1>
+
+<div1 id="addressing"><?Pub Dtl?>
+ <head>Locator Syntax</head>
+ <p>The locator for a <termref def="dt-resource">resource</termref> is typically provided by means of a Uniform Resource Identifier, or URI. XPointers can be used in conjunction with the URI structure, as fragment identifiers, to specify a more precise sub-resource. </p>
+ <!-- Removed the discussion of queries from the previous paragraph, due to contention within the WG. bent -->
+ <p>A locator generally contains a URI, as described in IETF RFCs <bibref ref="rfc1738"/> and <bibref ref="rfc1808"/>. As these RFCs state, the URI may include a trailing <emph>query</emph> (marked by a leading "<code>?</code>"), and be followed by a "<code>#</code>" and a <emph>fragment identifier</emph>, with the query interpreted by the host providing the indicated resource, and the interpretation of the fragment identifier dependent on the data type of the indicated resource.</p>
+ <!--Is there some restriction on URNs having queries and/or fragment identifiers? Since these RFCs don't mention URIs explicitly, should the wording here lead from URLs to URIs more explicitly? -elm-->
+ <p>In order to locate XML documents and portions of documents, a locator value may contain either a <xtermref href="http://www.w3.org/Addressing/rfc1738.txt"> URI</xtermref> or a fragment identifier, or both. Any fragment identifier for pointing into XML must be an <xtermref href="http://www.w3.org/TR/WD-xptr#dt-xpointer"> XPointer</xtermref>.</p>
+ <p>Special syntax may be used to request the use of particular processing models in accessing the locator's resource. This is designed to reflect the realities of network operation, where it may or may not be desirable to exercise fine control over the distribution of work between local and remote processors.
+ <scrap id="locator" lang="ebnf">
+ <head>Locator</head>
+ <prod id="nt-locator">
+ <lhs>Locator</lhs>
+ <rhs><nt def="nt-uri">URI</nt></rhs>
+ <rhs>| <nt def="nt-connector">Connector</nt> (<xnt href="http://www.w3.org/TR/WD-xptr">XPointer</xnt> | <xnt href="WD-xml-lang.html#NT-Name">Name</xnt>)</rhs>
+ <rhs>| <nt def="nt-uri">URI</nt> <nt def="nt-connector">Connector</nt> (<xnt href="http://www.w3.org/TR/WD-xptr">XPointer</xnt> | <xnt href="WD-xml-lang.html#NT-Name">Name</xnt>)</rhs>
+ </prod>
+ <prod id="nt-connector">
+ <lhs>Connector</lhs><rhs>'#' | '|'</rhs>
+ </prod>
+ <prod id="nt-uri">
+ <lhs>URI</lhs><rhs><xnt href="WD-xml-lang.html#NT-URLchar">URIchar*</xnt></rhs>
+ </prod>
+ </scrap>
+ </p>
+ <p><termdef id="dt-designated" term="Designated Resource">In this discussion, the term <term>designated resource</term> refers to the resource which an entire locator serves to locate.</termdef> The following rules apply:
+ <ulist>
+ <item>
+ <p><termdef id="dt-containing-resource" term="Containing Resource"> The URI, if provided, locates a resource called the <term>containing resource</term>.</termdef></p>
+ </item>
+ <item>
+ <p>If the URI is not provided, the containing resource is considered to be the document in which the linking element is contained.
+ </p></item>
+ <item>
+ <p><termdef id="dt-sub-resource" term="Sub-Resource">If an XPointer is provided, the designated resource is a <term>sub-resource</term>
+ of the containing resource; otherwise the designated resource is the
+ containing resource.</termdef></p>
+ </item>
+ <!--Is this now incorrect, given the nature of the switch from here() to origin()? -elm
+ Oy, yes, i think so. it will require some fun wording, though, so i haven't fixed it yet here -sjd-->
+ <item>
+ <p>If the <nt def="nt-connector">Connector</nt> is followed directly by a <xnt href="http://www.w3.org/TR/REC-xml#NT-Name">Name</xnt>, the <xnt href="http://www.w3.org/TR/REC-xml#NT-Name">Name</xnt> is shorthand for the XPointer"<code>id(Name)</code>"; that is, the sub-resource is the element in the containing resource that has an XML <xtermref href="http://www.w3.org/TR/REC-xml#sec-attrtypes">ID attribute</xtermref> whose value <xtermref href="http://www.w3.org/TR/REC-xml#dt-match">matches</xtermref> the <xnt href="http://www.w3.org/TR/REC-xml#NT-Name">Name</xnt>. This shorthand is to encourage use of the robust <code>id</code> addressing mode.</p>
+ </item>
+ <!-- fixed links to the XML recommendation - bent -->
+ <item>
+ <p>If the connector is "<code>#</code>", this signals an intent that the containing resource is to be fetched as a whole from the host that provides it, and that the XPointer processing to extract the sub-resource
+ is to be performed on the client, that is to say on the same system where the linking element is recognized and processed.</p>
+ </item>
+ <item>
+ <p>If the connector is "<code>|</code>", no intent is signaled as to what processing model is to be used to go about accessing the designated resource.</p>
+ </item>
+ </ulist>
+ </p>
+ <p>Note that the definition of a URI includes an optional query component. </p>
+ <p>In the case where the URI contains a query (to be interpreted by the server), information providers and authors of server software are urged to use queries as follows:
+ <scrap id="querysyntax" lang="ebnf">
+ <head>Query</head>
+ <prod id="nt-query">
+ <lhs>Query</lhs><rhs>'XML-XPTR=' (<xnt href="http://www.w3.org/TR/WD-xptr"> XPointer</xnt> | <xnt href="http://www.w3.org/TR/REC-xml#NT-Name">Name</xnt>)</rhs>
+ </prod>
+ </scrap>
+ </p>
+ <!-- fixed link to XML recommendation - bent -->
+</div1>
+
+<div1><?Pub Dtl?>
+ <head>Link Recognition</head>
+ <p>The existence of a <termref def="dt-link">link</termref> is asserted by a <termref def="dt-linkel">linking element</termref>. Linking elements must be recognized reliably by application software in order to provide appropriate display and behavior. There are several ways link recognition could be accomplished: for example, reserving element type names, reserving attributes names, leaving the matter of recognition entirely up to stylesheets and application software, or using the XLink <xtermref href="http://www.w3.org/TR/REC-xml-names/">namespace</xtermref> to specify element names and attribute names that would be recognized by namespace and XLink-aware processors. Using element and attribute names within the XLink namespace provides a balance between giving users control of their own markup language design and keeping the identification of linking elements simple and unambiguous.</p>
+ <p>The two approaches to identifying linking elements are relatively simple to implement. For example, here's how the HTML <code>A</code> element would be declared using attributes within the XLink namespace, and then how an element within the XLink namespace might do the same:
+ <eg>&lt;A xlink:type="simple" xlink:href="http://www.w3.org/TR/wd-xlink/"
+xlink:title="The Xlink Working Draft"&gt;The XLink Working Draft.&lt;/A&gt;</eg>
+ <eg>&lt;xlink:simple href="http://www.w3.org/TR/wd-xlink/"
+title="The XLink Working Draft"&gt;The XLink Working Draft&lt;/xlink:simple&gt;</eg>
+ Any arbitrary element can be made into an XLink by using the <code>xlink:type</code> attribute. And, of course, the explicit XLink elements may be used, as well. This document will go on to describe the linking attributes that are associated with linking elements. It may be assumed by the reader that these attributes would require the <code>xlink</code> namespace prefix if they existed within an arbitrary element, or that they may be used directly if they exist within an explicit Xlink element.</p>
+ <!-- heavily modified this section to accomodate namespace-aware link recognition - bent -->
+</div1>
+
+<!-- Rewrote this entire section. - bent -->
+<div1>
+ <head>Linking Attributes</head>
+ <p>XLink has several attributes associated with the variety of links it may represent. These attributes define four main concepts: locators, arcs, behaviors, and semantics. <emph>Locators</emph> define where the actual resource is located. <emph>Arcs</emph> define the traversal of links. Where does the link come from? Where does it go to? All this information can be stored in the arc attributes. <emph>Behaviors</emph> define how the link is activated, and what the application should do with the resource being linked to. <emph>Semantics</emph> define useful information that the application may use, and enables the link for such specalized targets as constricted devices and accessibility software.</p>
+
+ <div2 id="link-locators">
+ <head>Locator Attributes</head>
+ <p>The only locator attribute at this time is <code>href</code>. This attribute must contain either a string in the form of a URI that defines the remote resource being linked to, a string containing a fragment identifier that links to a local resource, or a string containing a URI with a fragment identifier concacenated onto it.</p>
+ </div2>
+
+ <div2 id="link-arcs">
+ <head>Arc Attributes</head>
+ <p>Arcs contain two attributes, <code>from</code> and <code>to</code>. The <code>from</code> attribute may contain a string containing the content of a <code>role</code> attribute from the resource being linked from. The purpose of the <code>from</code> attribute is to define where this link is being actuated from.</p>
+ <p>The <code>to</code> attribute may contain a string containing the content of a <code>role</code> attribute from the resource being linked to. The purpose of the <code>to</code> attribute is to define where this link traverses to.</p>
+ <p>The application may use this information in a number of ways, especially in a complex hypertext system, but it is mainly useful in providing context for application behavior.</p>
+ <!-- I'm at a loss as to how to describe arcs more clearly than this. I don't want to devolve into discussions of directed graphs and n-ary links. -bent -->
+ </div2>
+
+ <div2 id="link-behaviors">
+ <head>Behavior Attributes</head>
+ <p>There are two attributes associated with behavior: <code>show</code> and <code>actuate</code>. The <code>show</code> attribute defines how the remote resource is to be revealed to the user. It has three options: <code>new</code>, <code>parsed</code>, and <code>replace</code>. The <code>new</code> option indicates that the remote resource should be shown in a new window (or other device context) without replacing the previous content. The <code>parsed</code> option, relating directly to the XML concept of a parsed entity, indicates that the content should be integrated into the document from which the link was actuated. The <code>replace</code> option is the one most commonly seen on the World Wide Web, where the document being linked from is entirely replaced by the object being linked to.</p>
+ <p>The <code>actuate</code> attribute defines how the link is initiated. It has two options: <code>user</code> and <code>auto</code>. The <code>user</code> option indicates that the link must be initiated by some sort of human-initiated selection, such as clicking on an HTML anchor. The <code>auto</code> option indicates that the link is automatically initiated when the application deems that the user has reached the link. It then follows the behavior set out in the <code>show</code> option.</p>
+ <!-- Something should be put here in terms of an example. Idea: "A" link versus automatically updating encyclopedia. -bent -->
+ </div2>
+
+ <div2 id="link-semantics">
+ <head>Semantic Attributes</head>
+ <p>There are two attributes associated with semantics, <code>role</code> and <code>title</code>. The <code>role</code> attribute is a generic string used to describe the function of the link's content. For example, a poem might have a link with a <code>role="stanza"</code>. The <code>role</code> is also used as an identifier for the <code>from</code> and <code>to</code> attributes of arcs.</p>
+ <p>The <code>title</code> attribute is designed to provide human-readable text describing the link. It is very useful for those who have text-based applications, whether that be due to a constricted device that cannot display the link's content, or if it's being read by an application to a visually-impaired user, or if it's being used to create a table of links. The <code>title</code> attribute contains a simple, descriptive string.</p>
+ </div2>
+</div1>
+
+<div1 id="linking-elements">
+ <head>Linking Elements</head>
+ <p>There are several kinds of linking elements in XLink: <code>simple</code> links, <code>locators</code>, <code>arcs</code>, and <code>extended</code> links. These elements may be instantiated via element declarations from the XLink namespace, or they may be instantiated via attribute declarations from the XLink namespace. Both kinds of instantiation are described in the definition of each linking element.</p>
+ <p>The <code>simple</code> link is used to declare a link that approximates the functionality of the HTML <code>A</code> element. It has, however, a few added features to increase its value, including the potential declaration of semantics and behavior. The <code>locator</code> elements are used to define the resource being linked to. Some links may contain multiple locators, representing a choice of potential links to be traversed. The <code>arcs</code> are used to define the traversal semantics of the link. Finally, an <code>extended</code> linking element differs from a simple link in that it can connect any number of resources, not just one local resource (optionally) and one remote resource, and in that extended links are more often out-of-line than simple links.</p>
+
+<div2 id="simple-links">
+ <head>Simple Links</head>
+ <p id="dt-simplelink"><termdef id="dt-simpleline" term="Simple Link"><term>Simple links</term> can be used for purposes that approximate the functionality of a basic HTML <code>A</code> link, but they can also support a limited amount of additional functionality. Simple links have only one locator and thus, for convenience, combine the functions of a linking element and a locator into a single element.</termdef> As a result of this combination, the simple linking element offers both a locator attribute and all the behavior and semantic attributes.</p>
+ <p>The following are two examples of linking elements, each showing all the possible attributes that can be associated with a simple link. Here is the explicit XLink simple linking element.
+ <eg>&lt;!ELEMENT xlink:simple ANY&gt;
+&lt;!ATTLIST xlink:slink
+ href CDATA #REQUIRED
+ role CDATA #IMPLIED
+ title CDATA #IMPLIED
+ show (new|parsed|replace) "replace"
+ actuate (user|auto) "user"
+&gt;</eg>
+ And here is how to make an arbitrary element into a simple link.
+ <eg>&lt;!ELEMENT xlink:simple ANY&gt;
+&lt;!ATTLIST foo
+ xlink:type (simple|extended|locator|arc) #FIXED "simple"
+ xlink:href CDATA #REQUIRED
+ xlink:role CDATA #IMPLIED
+ xlink:title CDATA #IMPLIED
+ xlink:show (new|parsed|replace) "replace"
+ xlink:actuate (user|auto) "user"
+&gt;</eg>
+ Here is how the first example might look in a document:
+<eg>&lt;xlink:simple href="http://www.w3.org/TR/wd-xlink" role="working draft"
+ title="The XLink Working Draft" show="replace" actuate="user"&gt;
+The XLink Working Draft.&lt;/xlink:simple&gt;</eg>
+<eg>&lt;foo xlink:href="http://www.w3.org/TR/wd-xlink" xlink:role="working draft"
+ xlink:title="The XLink Working Draft" xlink:show="new" xlink:actuate="user"&gt;
+The XLink Working Draft.&lt;/foo&gt;</eg>
+ Alternately, a simple link could be as terse as this:
+<eg>&lt;foo xlink:href="#stanza1"&gt;The First Stanza.&lt;/foo&gt;</eg>
+ </p>
+ <p>
+ There are no constraints on the contents of a simple linking element. In
+ the sample declaration above, it is given a content model of <code>ANY</code>
+ to illustrate that any content model or declared content is acceptable. In
+ a valid document, every element that is significant to XLink must still conform
+ to the constraints expressed in its governing DTD.</p>
+ <p>Note that it is meaningful to have an out-of-line simple link, although
+ such links are uncommon. They are called "one-ended" and are typically used
+ to associate discrete semantic properties with locations. The properties might
+ be expressed by attributes on the link, the link's element type name, or in
+ some other way, and are not considered full-fledged resources of the link.
+ Most out-of-line links are extended links, as these have a far wider range
+ of uses.</p>
+</div2>
+
+<div2 id="extended-link">
+<head>Extended Links</head>
+ <p><termdef id="dt-extendedlink" term="Extended Link">An <term>extended link</term> differs from a simple link in that it can connect any number of resources, not just one local resource (optionally) and one remote resource, and in that extended links are more often out-of-line than simple links.</termdef></p>
+ <p>These additional capabilities of extended links are required for:
+ <ulist>
+ <item>
+ <p>Enabling outgoing links in documents that cannot be modified to add an inline link</p>
+ </item>
+ <item>
+ <p>Creating links to and from resources in formats with no native support for embedded links (such as most multimedia formats)</p>
+ </item>
+ <item>
+ <p>Applying and filtering sets of relevant links on demand</p>
+ </item>
+ <item><p>Enabling other advanced hypermedia capabilities</p></item>
+ </ulist>
+ </p>
+ <p>Application software might be expected to provide traversal among all of a link's participating resources (subject to semantic constraints outside the scope of this specification) and to signal the fact that a given resource or sub-resource participates in one or more links when it is displayed (even though there is no markup at exactly that point to signal it).</p>
+ <p>A linking element for an extended link contains a series of <xtermref href="http://www.w3.org/TR/REC-xml/#dt-parentchild">child elements</xtermref> that serve as locators and arcs. Because an extended link can have more than one remote resource, it separates out linking itself from the mechanisms used to locate each resource (whereas a simple link combines the two).</p>
+ <p>The <code>xlink:type</code> attribute value for an extended link must be <code> extended</code>, if the link is being instantiated on an arbitrary element. Note that extended links introduce variants of the <code>show</code> and <code>actuate</code> behavior attributes. These attributes, the <code>showdefault</code> and <code>actuatedefault</code> define the same behavior as their counterparts. However, in this case, they are considered to define the default behavior for all the linking elements that they contain.</p>
+ <p>However, when a linking element within an extended link has a <code>show</code> or <code>actuate</code> attribute of its own, that attribute overrides the defaults set on the extended linking element.</p>
+ <p>The extended linking element itself retains those attributes relevant to the link as a whole, and to its local resource if any. Following are two sample declaration for an extended link. The first is an example of the explicit XLink extended link:
+
+<eg>&lt;!ELEMENT xlink:extended ((xlink:arc | xlink:locator)*)&gt;
+&lt;!ATTLIST xlink:extended
+ role CDATA #IMPLIED
+ title CDATA #IMPLIED
+ showdefault (new|parsed|replace) #IMPLIED
+ actuatedefault (user|auto) #IMPLIED &gt;</eg>
+
+ The second is an example of an arbitrary element being used an extended link:
+
+<eg>&lt;!ELEMENT foo ((xlink:arc | xlink:locator)*)&gt;
+&lt;!ATTLIST foo
+ xlink:type (simple|extended|locator|arc) #FIXED "extended"
+ xlink:role CDATA #IMPLIED
+ xlink:title CDATA #IMPLIED
+ xlink:showdefault (new|parsed|replace) #IMPLIED
+ xlink:actuatedefault (user|auto) #IMPLIED &gt;</eg>
+
+ The following two examples demonstrate how each of the above might appear within a document instance. Note that the content of these examples would be other elements. For brevity's sake, they've been left blank. The first example shows how the link might appear, using an explicit XLink extended link:
+
+<eg>&lt;xlink:extended role="address book" title="Ben's Address Book" showdefault="replace" actuatedefault="user"&gt; ... &lt;/xlink:extended&gt;</eg>
+
+ And the second shows how the link might appear, using an arbitrary element:
+
+<eg>&lt;foo xlink:type="extended" xlink:role="address book" xlink:title="Ben's Address Book" xlink:showdefault="replace" xlink:actuatedefault="user"&gt; ... &lt;/foo&gt;</eg>
+ </p>
+
+</div2>
+
+<div2 id="xlink-arcs">
+ <head>Arc Elements</head>
+ <p><termdef id="dt-arc" term="Arc">An <term>arc</term> is contained within an extended link for the purpose of defining traversal behavior.</termdef> More than one arc may be associated with a link. Otherwise, arc elements function exactly as the arc attributes might lead on to expect.</p>
+ <!-- More here? -bent -->
+</div2>
+
+</div1>
+<div1>
+<head>Conformance</head>
+<p>An element conforms to XLink if: <olist>
+<item><p>The element has an <code>xml:link</code> attribute whose value is
+one of the attribute values prescribed by this specification, and</p></item>
+<item><p>the element and all of its attributes and content adhere to the
+syntactic
+requirements imposed by the chosen <code>xml:link</code> attribute value,
+as prescribed in this specification.</p></item>
+</olist></p>
+<p>Note that conformance is assessed at the level of individual elements,
+rather than whole XML documents, because XLink and non-XLink linking mechanisms
+may be used side by side in any one document.</p>
+<p>An application conforms to XLink if it interprets XLink-conforming elements
+according to all required semantics prescribed by this specification and,
+for any optional semantics it chooses to support, supports them in the way
+prescribed. <!--If/when we split out the XLinkfunctionality
+(e.g. inline links and out-of-line links), the
+conformance language will have to address the different
+levels of support. -elm--> </p>
+</div1>
+</body><back>
+<div1 id="unfinished">
+<head>Unfinished Work</head>
+<div2>
+<head>Structured Titles</head>
+<p>The simple title mechanism described in this draft is insufficient to cope
+with internationalization or the use of multimedia in link titles. A future
+version will provide a mechanism for the use of structured link titles.</p>
+</div2>
+</div1>
+<div1>
+<head>References</head>
+<blist>
+<bibl id="xptr" key="XPTR">Eve Maler and Steve DeRose, editors. <titleref>
+XML Pointer Language (XPointer) V1.0</titleref>. ArborText, Inso, and Brown
+University. Burlington, Seekonk, et al.: World Wide Web Consortium, 1998.
+(See <loc href="http://www.w3.org/TR/WD-xptr">http://www.w3.org/TR/WD-xptr
+ </loc>.)</bibl>
+<bibl id="iso10744" key="ISO/IEC 10744">ISO (International Organization for
+Standardization). <titleref>ISO/IEC 10744-1992 (E). Information technology
+- Hypermedia/Time-based Structuring Language (HyTime).</titleref> [Geneva]:
+International Organization for Standardization, 1992. <titleref>Extended
+Facilities
+Annex.</titleref> [Geneva]: International Organization for Standardization,
+1996. (See <loc href="http://www.ornl.gov/sgml/wg8/hytime/html/is10744r.html">http://www.ornl.go
+v/sgml/wg8/hytime/html/is10744r.html </loc> <!--p m-r says this link is
+broken. elm --> ).</bibl>
+<bibl id="rfc1738" key="IETF RFC 1738">IETF (Internet Engineering Task
+Force). <titleref>
+RFC 1738: Uniform Resource Locators</titleref>. 1991. (See <loc href="http://www.w3.org/Addressing/rfc1738.txt">
+http://www.w3.org/Addressing/rfc1738.txt</loc>).</bibl>
+<bibl id="rfc1808" key="IETF RFC 1808">IETF (Internet Engineering Task
+Force). <titleref>
+RFC 1808: Relative Uniform Resource Locators</titleref>. 1995. (See <loc href="http://www.w3.org/Addressing/rfc1808.txt">http://www.w3.org/Addressing/rfc
+1808.txt </loc>).</bibl>
+<bibl id="tei" key="TEI">C. M. Sperberg-McQueen and Lou Burnard, editors.
+<titleref>
+Guidelines for Electronic Text Encoding and Interchange</titleref>. Association
+for Computers and the Humanities (ACH), Association for Computational
+Linguistics
+(ACL), and Association for Literary and Linguistic Computing (ALLC). Chicago,
+Oxford: Text Encoding Initiative, 1994. <!-- add cite to DOM work --> </bibl>
+<bibl id="chum" key="CHUM">]Steven J. DeRose and David G. Durand. 1995. "The
+TEI Hypertext Guidelines." In <titleref>Computing and the Humanities
+</titleref>29(3).
+Reprinted in <titleref>Text Encoding Initiative: Background and
+Context</titleref>,
+ed. Nancy Ide and Jean ronis <!-- fix this name -->, ISBN 0-7923-3704-2. </bibl>
+</blist></div1>
+</back></spec>
+<?Pub *0000052575?>
diff --git a/result/valid/xlink.xml.err b/result/valid/xlink.xml.err
new file mode 100644
index 0000000..08c84bd
--- /dev/null
+++ b/result/valid/xlink.xml.err
@@ -0,0 +1,6 @@
+./test/valid/xlink.xml:450: element termdef: validity error : ID dt-arc already defined
+ <p><termdef id="dt-arc" term="Arc">An <term>arc</term> is contained within an e
+ ^
+./test/valid/xlink.xml:530: element termref: validity error : IDREF attribute def references an unknown ID "dt-xlg"
+
+^
diff --git a/result/wap.xml b/result/wap.xml
new file mode 100644
index 0000000..694b49f
--- /dev/null
+++ b/result/wap.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://dark.wapit.com/vswap/tests/wap/DTD/wml11.dtd">
+<!-- (C) 1999, 2000 WAP Forum Ltd. All rights reserved -->
+<wml>
+<card id="card1">
+<onevent type="onenterforward">
+<go href="/vswap/run/result.eml">
+ <postfield name="var" value="$test"/>
+ <postfield name="v" value="dark"/>
+ <postfield name="ts" value="0003"/>
+ <postfield name="tp" value="wml/state/variables/parsing/1"/>
+ <postfield name="ti" value="1"/>
+ <postfield name="expected" value="var:pass"/>
+</go>
+</onevent>
+<p>If automatic testing failed, select <anchor>Failed<go href="/vswap/run/result.eml">
+ <postfield name="SUBMIT" value="No"/><postfield name="v" value="dark"/>
+ <postfield name="ts" value="0003"/>
+ <postfield name="tp" value="wml/state/variables/parsing/1"/>
+ <postfield name="ti" value="1"/>
+ <postfield name="expected" value="var:pass"/></go></anchor>.</p>
+</card>
+
+</wml>
diff --git a/result/wap.xml.rdr b/result/wap.xml.rdr
new file mode 100644
index 0000000..6867382
--- /dev/null
+++ b/result/wap.xml.rdr
@@ -0,0 +1,70 @@
+0 10 wml 0 0
+0 8 #comment 0 1 (C) 1999, 2000 WAP Forum Ltd. All rights reserved
+0 1 wml 0 0
+1 14 #text 0 1
+
+1 1 card 0 0
+2 14 #text 0 1
+
+2 1 onevent 0 0
+3 14 #text 0 1
+
+3 1 go 0 0
+4 14 #text 0 1
+
+4 1 postfield 1 0
+4 14 #text 0 1
+
+4 1 postfield 1 0
+4 14 #text 0 1
+
+4 1 postfield 1 0
+4 14 #text 0 1
+
+4 1 postfield 1 0
+4 14 #text 0 1
+
+4 1 postfield 1 0
+4 14 #text 0 1
+
+4 1 postfield 1 0
+4 14 #text 0 1
+
+3 15 go 0 0
+3 14 #text 0 1
+
+2 15 onevent 0 0
+2 14 #text 0 1
+
+2 1 p 0 0
+3 3 #text 0 1 If automatic testing failed, select
+3 1 anchor 0 0
+4 3 #text 0 1 Failed
+4 1 go 0 0
+5 14 #text 0 1
+
+5 1 postfield 1 0
+5 1 postfield 1 0
+5 14 #text 0 1
+
+5 1 postfield 1 0
+5 14 #text 0 1
+
+5 1 postfield 1 0
+5 14 #text 0 1
+
+5 1 postfield 1 0
+5 14 #text 0 1
+
+5 1 postfield 1 0
+4 15 go 0 0
+3 15 anchor 0 0
+3 3 #text 0 1 .
+2 15 p 0 0
+2 14 #text 0 1
+
+1 15 card 0 0
+1 14 #text 0 1
+
+
+0 15 wml 0 0
diff --git a/result/wap.xml.sax b/result/wap.xml.sax
new file mode 100644
index 0000000..ca89e70
--- /dev/null
+++ b/result/wap.xml.sax
@@ -0,0 +1,86 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(wml, -//WAPFORUM//DTD WML 1.1//EN, http://dark.wapit.com/vswap/tests/wap/DTD/wml11.dtd)
+SAX.externalSubset(wml, -//WAPFORUM//DTD WML 1.1//EN, http://dark.wapit.com/vswap/tests/wap/DTD/wml11.dtd)
+SAX.comment( (C) 1999, 2000 WAP Forum Ltd. All rights reserved )
+SAX.startElement(wml)
+SAX.characters(
+, 1)
+SAX.startElement(card, id='card1')
+SAX.characters(
+, 1)
+SAX.startElement(onevent, type='onenterforward')
+SAX.characters(
+, 1)
+SAX.startElement(go, href='/vswap/run/result.eml')
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='var', value='$test')
+SAX.endElement(postfield)
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='v', value='dark')
+SAX.endElement(postfield)
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='ts', value='0003')
+SAX.endElement(postfield)
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='tp', value='wml/state/variables/parsing/1')
+SAX.endElement(postfield)
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='ti', value='1')
+SAX.endElement(postfield)
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='expected', value='var:pass')
+SAX.endElement(postfield)
+SAX.characters(
+, 1)
+SAX.endElement(go)
+SAX.characters(
+, 1)
+SAX.endElement(onevent)
+SAX.characters(
+, 1)
+SAX.startElement(p)
+SAX.characters(If automatic testing failed, s, 36)
+SAX.startElement(anchor)
+SAX.characters(Failed, 6)
+SAX.startElement(go, href='/vswap/run/result.eml')
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='SUBMIT', value='No')
+SAX.endElement(postfield)
+SAX.startElement(postfield, name='v', value='dark')
+SAX.endElement(postfield)
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='ts', value='0003')
+SAX.endElement(postfield)
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='tp', value='wml/state/variables/parsing/1')
+SAX.endElement(postfield)
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='ti', value='1')
+SAX.endElement(postfield)
+SAX.characters(
+ , 9)
+SAX.startElement(postfield, name='expected', value='var:pass')
+SAX.endElement(postfield)
+SAX.endElement(go)
+SAX.endElement(anchor)
+SAX.characters(., 1)
+SAX.endElement(p)
+SAX.characters(
+, 1)
+SAX.endElement(card)
+SAX.characters(
+
+, 2)
+SAX.endElement(wml)
+SAX.endDocument()
diff --git a/result/wml.xml b/result/wml.xml
new file mode 100644
index 0000000..3a96562
--- /dev/null
+++ b/result/wml.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
+<wml>
+ <card id="card1" title="Rubriques 75008">
+ <p>
+ <a href="rubmenu.asp?CP=75008&amp;RB=01">Cin&#xE9;ma</a><br/>
+ </p>
+
+</card>
+</wml>
diff --git a/result/wml.xml.rdr b/result/wml.xml.rdr
new file mode 100644
index 0000000..1bb28d4
--- /dev/null
+++ b/result/wml.xml.rdr
@@ -0,0 +1,24 @@
+0 10 wml 0 0
+0 1 wml 0 0
+1 14 #text 0 1
+
+1 1 card 0 0
+2 14 #text 0 1
+
+2 1 p 0 0
+3 14 #text 0 1
+
+3 1 a 0 0
+4 3 #text 0 1 Cinéma
+3 15 a 0 0
+3 1 br 1 0
+3 14 #text 0 1
+
+2 15 p 0 0
+2 14 #text 0 1
+
+
+1 15 card 0 0
+1 14 #text 0 1
+
+0 15 wml 0 0
diff --git a/result/wml.xml.sax b/result/wml.xml.sax
new file mode 100644
index 0000000..46959bb
--- /dev/null
+++ b/result/wml.xml.sax
@@ -0,0 +1,31 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(wml, -//WAPFORUM//DTD WML 1.1//EN, http://www.wapforum.org/DTD/wml_1.1.xml)
+SAX.externalSubset(wml, -//WAPFORUM//DTD WML 1.1//EN, http://www.wapforum.org/DTD/wml_1.1.xml)
+SAX.startElement(wml)
+SAX.characters(
+ , 3)
+SAX.startElement(card, id='card1', title='Rubriques 75008')
+SAX.characters(
+ , 2)
+SAX.startElement(p)
+SAX.characters(
+ , 3)
+SAX.startElement(a, href='rubmenu.asp?CP=75008&#38;RB=01')
+SAX.characters(Cin, 3)
+SAX.characters(é, 2)
+SAX.characters(ma, 2)
+SAX.endElement(a)
+SAX.startElement(br)
+SAX.endElement(br)
+SAX.characters(
+ , 2)
+SAX.endElement(p)
+SAX.characters(
+
+, 2)
+SAX.endElement(card)
+SAX.characters(
+, 1)
+SAX.endElement(wml)
+SAX.endDocument()
diff --git a/result/xhtml1 b/result/xhtml1
new file mode 100644
index 0000000..d5179ee
--- /dev/null
+++ b/result/xhtml1
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- 3.1.1 3/ -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <title>Virtual Library</title>
+ </head>
+ <!-- 4.8 -->
+ <script type="text/javascript"><![CDATA[
+ ... unescaped script content ...
+ ]]></script>
+ <body>
+ <p>Moved to <a href="http://example.org/">example.org</a>.</p>
+ </body>
+ <!-- C2 -->
+ <img src="foo.gif" alt="foo" />
+ <!-- C3 -->
+ <p></p>
+ <!-- C7 -->
+ <p lang="fr" xml:lang="fr">coucou</p>
+ <p xml:lang="fr" lang="fr">salut</p>
+ <!-- C8 -->
+ <p name="fragid" id="fragid">test</p>
+ <!-- 4.5 -->
+ <dl compact="compact">
+ <dt>Internet Engineering Task Force</dt>
+ <dd>An organization which establishes technical standards for the Internet</dd>
+ </dl>
+
+</html>
diff --git a/result/xhtml1.rdr b/result/xhtml1.rdr
new file mode 100644
index 0000000..b7de2dd
--- /dev/null
+++ b/result/xhtml1.rdr
@@ -0,0 +1,95 @@
+0 10 html 0 0
+0 8 #comment 0 1 3.1.1 3/
+0 1 html 0 0
+1 14 #text 0 1
+
+1 1 head 0 0
+2 14 #text 0 1
+
+2 1 title 0 0
+3 3 #text 0 1 Virtual Library
+2 15 title 0 0
+2 14 #text 0 1
+
+1 15 head 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 4.8
+1 14 #text 0 1
+
+1 1 script 0 0
+2 3 #text 0 1
+ ... unescaped script content ...
+
+1 15 script 0 0
+1 14 #text 0 1
+
+1 1 body 0 0
+2 14 #text 0 1
+
+2 1 p 0 0
+3 3 #text 0 1 Moved to
+3 1 a 0 0
+4 3 #text 0 1 example.org
+3 15 a 0 0
+3 3 #text 0 1 .
+2 15 p 0 0
+2 14 #text 0 1
+
+1 15 body 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 C2
+1 14 #text 0 1
+
+1 1 img 1 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 C3
+1 14 #text 0 1
+
+1 1 p 1 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 C7
+1 14 #text 0 1
+
+1 1 p 0 0
+2 3 #text 0 1 coucou
+1 15 p 0 0
+1 14 #text 0 1
+
+1 1 p 0 0
+2 3 #text 0 1 salut
+1 15 p 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 C8
+1 14 #text 0 1
+
+1 1 p 0 0
+2 3 #text 0 1 test
+1 15 p 0 0
+1 14 #text 0 1
+
+1 8 #comment 0 1 4.5
+1 14 #text 0 1
+
+1 1 dl 0 0
+2 14 #text 0 1
+
+2 1 dt 0 0
+3 3 #text 0 1 Internet Engineering Task Force
+2 15 dt 0 0
+2 14 #text 0 1
+
+2 1 dd 0 0
+3 3 #text 0 1 An organization which establishes technical standards for the Internet
+2 15 dd 0 0
+2 14 #text 0 1
+
+1 15 dl 0 0
+1 14 #text 0 1
+
+
+0 15 html 0 0
diff --git a/result/xhtml1.sax b/result/xhtml1.sax
new file mode 100644
index 0000000..f71dd35
--- /dev/null
+++ b/result/xhtml1.sax
@@ -0,0 +1,100 @@
+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.externalSubset(html, -//W3C//DTD XHTML 1.0 Strict//EN, http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd)
+SAX.comment( 3.1.1 3/ )
+SAX.startElement(html, xml:lang='en', lang='en')
+SAX.characters(
+ , 3)
+SAX.startElement(head)
+SAX.characters(
+ , 5)
+SAX.startElement(title)
+SAX.characters(Virtual Library, 15)
+SAX.endElement(title)
+SAX.characters(
+ , 3)
+SAX.endElement(head)
+SAX.characters(
+ , 3)
+SAX.comment( 4.8 )
+SAX.characters(
+ , 3)
+SAX.startElement(script, type='text/javascript')
+SAX.characters(
+ ... unescaped script conten, 38)
+SAX.endElement(script)
+SAX.characters(
+ , 3)
+SAX.startElement(body)
+SAX.characters(
+ , 5)
+SAX.startElement(p)
+SAX.characters(Moved to , 9)
+SAX.startElement(a, href='http://example.org/')
+SAX.characters(example.org, 11)
+SAX.endElement(a)
+SAX.characters(., 1)
+SAX.endElement(p)
+SAX.characters(
+ , 3)
+SAX.endElement(body)
+SAX.characters(
+ , 3)
+SAX.comment( C2 )
+SAX.characters(
+ , 3)
+SAX.startElement(img, src='foo.gif', alt='foo')
+SAX.endElement(img)
+SAX.characters(
+ , 3)
+SAX.comment( C3 )
+SAX.characters(
+ , 3)
+SAX.startElement(p)
+SAX.endElement(p)
+SAX.characters(
+ , 3)
+SAX.comment( C7 )
+SAX.characters(
+ , 3)
+SAX.startElement(p, lang='fr')
+SAX.characters(coucou, 6)
+SAX.endElement(p)
+SAX.characters(
+ , 3)
+SAX.startElement(p, xml:lang='fr')
+SAX.characters(salut, 5)
+SAX.endElement(p)
+SAX.characters(
+ , 3)
+SAX.comment( C8 )
+SAX.characters(
+ , 3)
+SAX.startElement(p, name='fragid')
+SAX.characters(test, 4)
+SAX.endElement(p)
+SAX.characters(
+ , 3)
+SAX.comment( 4.5 )
+SAX.characters(
+ , 3)
+SAX.startElement(dl, compact='')
+SAX.characters(
+ , 3)
+SAX.startElement(dt)
+SAX.characters(Internet Engineering Task Forc, 31)
+SAX.endElement(dt)
+SAX.characters(
+ , 3)
+SAX.startElement(dd)
+SAX.characters(An organization which establis, 70)
+SAX.endElement(dd)
+SAX.characters(
+ , 3)
+SAX.endElement(dl)
+SAX.characters(
+
+, 2)
+SAX.endElement(html)
+SAX.endDocument()
diff --git a/result/xml1 b/result/xml1
new file mode 100644
index 0000000..d32f56c
--- /dev/null
+++ b/result/xml1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE test [
+<!ENTITY example "<p>An ampersand (&#38;#38;) may be escaped
+ numerically (&#38;#38;#38;) or with a general entity
+ (&amp;amp;).</p>">
+]>
+<test>&example;</test>
diff --git a/result/xml1.rdr b/result/xml1.rdr
new file mode 100644
index 0000000..9c9b943
--- /dev/null
+++ b/result/xml1.rdr
@@ -0,0 +1,4 @@
+0 10 test 0 0
+0 1 test 0 0
+1 5 example 0 0
+0 15 test 0 0
diff --git a/result/xml1.sax b/result/xml1.sax
new file mode 100644
index 0000000..915b19f
--- /dev/null
+++ b/result/xml1.sax
@@ -0,0 +1,24 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(test, , )
+SAX.entityDecl(example, 1, (null), (null), <p>An ampersand (&#38;) may be escaped
+ numerically (&#38;#38;) or with a general entity
+ (&amp;amp;).</p>)
+SAX.getEntity(example)
+SAX.externalSubset(test, , )
+SAX.startElement(test)
+SAX.getEntity(example)
+SAX.startElement(p)
+SAX.characters(An ampersand (, 14)
+SAX.characters(&, 1)
+SAX.characters() may be escaped
+ numerically , 31)
+SAX.characters(&, 1)
+SAX.characters(#38;) or with a general entity, 34)
+SAX.getEntity(amp)
+SAX.characters(&, 1)
+SAX.characters(amp;)., 6)
+SAX.endElement(p)
+SAX.reference(example)
+SAX.endElement(test)
+SAX.endDocument()
diff --git a/result/xml2 b/result/xml2
new file mode 100644
index 0000000..b26b358
--- /dev/null
+++ b/result/xml2
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE test [
+<!ELEMENT test (#PCDATA)>
+<!ENTITY % xx "&#37;zz;">
+<!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >'>
+<!ENTITY tricky "error-prone">
+]>
+<test>This sample shows a &tricky; method.</test>
diff --git a/result/xml2.rdr b/result/xml2.rdr
new file mode 100644
index 0000000..05dce2a
--- /dev/null
+++ b/result/xml2.rdr
@@ -0,0 +1,6 @@
+0 10 test 0 0
+0 1 test 0 0
+1 3 #text 0 1 This sample shows a
+1 5 tricky 0 0
+1 3 #text 0 1 method.
+0 15 test 0 0
diff --git a/result/xml2.sax b/result/xml2.sax
new file mode 100644
index 0000000..e848473
--- /dev/null
+++ b/result/xml2.sax
@@ -0,0 +1,17 @@
+xmlSAXUserParseFile returned error 27
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(test, , )
+SAX.elementDecl(test, 3, ...)
+SAX.entityDecl(xx, 4, (null), (null), %zz;)
+SAX.getParameterEntity(xx)
+SAX.entityDecl(zz, 4, (null), (null), <!ENTITY tricky "error-prone" >)
+SAX.getParameterEntity(zz)
+SAX.getParameterEntity(xx)
+SAX.error: PEReference: %xx; not found
+SAX.characters(This sample shows a , 20)
+SAX.getEntity(tricky)
+SAX.error: Entity 'tricky' not defined
+SAX.characters( method., 8)
+SAX.endDocument()
+xmlSAXUserParseFile returned error 27
diff --git a/test/.cvsignore b/test/.cvsignore
new file mode 100644
index 0000000..c038ed7
--- /dev/null
+++ b/test/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in \ No newline at end of file
diff --git a/test/.memdump b/test/.memdump
new file mode 100644
index 0000000..199a299
--- /dev/null
+++ b/test/.memdump
@@ -0,0 +1,4 @@
+ Tue Mar 20 13:25:40 2001
+
+ MEMORY ALLOCATED : 0, MAX was 172
+BLOCK NUMBER SIZE TYPE
diff --git a/test/HTML/Down.html b/test/HTML/Down.html
new file mode 100644
index 0000000..92eca21
--- /dev/null
+++ b/test/HTML/Down.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+ <title>This service is temporary down</title>
+</head>
+
+<body bgcolor="#FFFFFF">
+<h1 align="center">Sorry, this service is temporary down</h1>
+We are doing our best to get it back on-line,
+
+<p>The W3C system administrators</p>
+</body>
+</html>
diff --git a/test/HTML/attrents.html b/test/HTML/attrents.html
new file mode 100644
index 0000000..8486ec0
--- /dev/null
+++ b/test/HTML/attrents.html
@@ -0,0 +1,5 @@
+<html>
+<body bgcolor="#FFFFFF">
+ <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#107;&#97;&#116;&#104;&#101;&#114;&#105;&#110;&#101;&#64;&#99;&#98;&#102;&#97;&#110;&#99;&#46;&#111;&#114;&#103;&#44;&#119;&#101;&#98;&#115;&#105;&#116;&#101;&#64;&#98;&#105;&#115;&#46;&#100;&#111;&#99;&#46;&#103;&#111;&#118;&#63;&#115;&#117;&#98;&#106;&#101;&#99;&#116;&#61;&#83;&#111;&#117;&#116;&#104;&#32;&#83;&#97;&#110;&#32;&#70;&#114;&#97;&#110;&#99;&#105;&#115;&#99;&#111;&#32;&#66;&#73;&#83;&#32;&#83;&#101;&#109;&#105;&#110;&#97;&#114;&#32;&#45;&#32;&#79;&#99;&#116;&#111;&#98;&#101;&#114;&#32;&#49;&#54;&#116;&#104;"></a><br>
+</body>
+</html>
diff --git a/test/HTML/autoclose.html b/test/HTML/autoclose.html
new file mode 100644
index 0000000..e123ba7
--- /dev/null
+++ b/test/HTML/autoclose.html
@@ -0,0 +1 @@
+<hr>
diff --git a/test/HTML/autoclose2.html b/test/HTML/autoclose2.html
new file mode 100644
index 0000000..d40082c
--- /dev/null
+++ b/test/HTML/autoclose2.html
@@ -0,0 +1 @@
+<p>toto
diff --git a/test/HTML/autoclose3.html b/test/HTML/autoclose3.html
new file mode 100644
index 0000000..8c7a45a
--- /dev/null
+++ b/test/HTML/autoclose3.html
@@ -0,0 +1,3 @@
+<ul>
+<li>item 1
+<li>item 2
diff --git a/test/HTML/cf_128.html b/test/HTML/cf_128.html
new file mode 100644
index 0000000..4cd118c
--- /dev/null
+++ b/test/HTML/cf_128.html
@@ -0,0 +1,20 @@
+<!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>
+ <td bgcolor="white">
+ Foo1
+ <table border="4">
+ <tr>
+ <td>Foo2<p><p></td></tr></table>
+ </td>
+ <td bgcolor="blue">Foo3</td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/test/HTML/doc2.htm b/test/HTML/doc2.htm
new file mode 100644
index 0000000..ff6f285
--- /dev/null
+++ b/test/HTML/doc2.htm
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!-- saved from url=(0016)http://intranet/ -->
+<!-- BEGIN Naviscope Javascript --><HTML><HEAD><TITLE>Welcome to Copernic.com</TITLE>
+<SCRIPT language=javascript>
+ NS_ActualOpen=window.open;
+ function NS_NullWindow(){this.window;}
+ function NS_NewOpen(url,nam,atr){return(new NS_NullWindow());}
+ window.open=NS_NewOpen;
+</SCRIPT>
+<!-- END Naviscope Javascript --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><!-- saved from url=(0027)http://www.agents-tech.com/ -->
+<META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
+<META
+content="Copernic.com Inc. develops innovative agent technology solutions to efficiently access and manage the overwhelming quantity of information available on the Internet and intranets."
+name=DESCRIPTION>
+<META
+content=agent,technology,intranet,extranet,management,filtering,ranking,solution,service,intelligent,intelligence,client,server,architecture,developer,development,information,telecommunication,announcement,press,product,profile,contact,multi-agent,meta-search,metasearch,multi-thread,mobile,wireless,shopping,robot,PCS,Copernic,engine,toolkit,CDK,EDK
+name=KEYWORDS>
+<META content="MSHTML 5.00.3103.1000" name=GENERATOR></HEAD><FRAMESET
+border=false cols=172,* frameBorder=0 frameSpacing=0><FRAME marginHeight=0
+marginWidth=0 name=left noResize scrolling=no src="doc2_files/side.htm"
+target="rtop"><FRAMESET rows=43,*><FRAME marginHeight=0 marginWidth=0 name=rtop
+noResize scrolling=no src="doc2_files/top.htm" target="rbottom"><FRAME
+name=rbottom noResize src="doc2_files/contents.htm"
+target="_top"></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>
+ </NOFRAMES></FRAMESET></HTML>
diff --git a/test/HTML/doc3.htm b/test/HTML/doc3.htm
new file mode 100644
index 0000000..ba28998
--- /dev/null
+++ b/test/HTML/doc3.htm
@@ -0,0 +1,851 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!-- saved from url=(0025)http://bp6.gamesquad.net/ -->
+<!-- BEGIN Naviscope Javascript --><HTML><HEAD><TITLE>BP6.com #1 online resource for the BP6 Mobo....</TITLE>
+<SCRIPT language=javascript>
+ NS_ActualOpen=window.open;
+ function NS_NullWindow(){this.window;}
+ function NS_NewOpen(url,nam,atr){return(new NS_NullWindow());}
+ window.open=NS_NewOpen;
+</SCRIPT>
+<!-- END Naviscope Javascript --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><!--last modified on Tuesday, February 22, 2000 11:47 PM -->
+<META content=text/html;CHARSET=iso-8859-1 http-equiv=Content-Type>
+<META content=Tim name=Author>
+<STYLE type=text/css>A.nav {
+ COLOR: #003399; TEXT-DECORATION: none
+}
+A.nav:hover {
+ COLOR: #3366cc; TEXT-DECORATION: underline
+}
+</STYLE>
+
+<SCRIPT language=JavaScript>
+<!-- Idea by: Nic Wolfe (Nic@TimelapseProductions.com) -->
+<!-- Web URL: http://fineline.xs.mw -->
+
+<!-- This script and many more are available free online at -->
+<!-- The JavaScript Source!! http://javascript.internet.com -->
+
+<!-- Begin
+function popUp(URL) {
+day = new Date();
+id = day.getTime();
+eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0, location=0, statusbars=0, menubars=0, resizable=0, width=145, height=250');");
+}
+// End -->
+</SCRIPT>
+
+<META content="MSHTML 5.00.3103.1000" name=GENERATOR></HEAD>
+<BODY aLink=red bgColor=black link=red text=white vLink=red>
+<P>
+<DIV align=center>
+<TABLE border=0 cellPadding=0 cellSpacing=0 width="80%">
+ <TBODY>
+ <TR>
+ <TD vAlign=top width=31><A href="http://bp6.gamesquad.net/"><IMG
+ align=bottom border=0 height=74 src="doc3_files/logo.gif"
+width=252></A></TD>
+ <TD align=left bgColor=#000000><IMG height=15 src="doc3_files/spacer.gif"
+ width=15><!-- START GAMESQUAD.NET IFRAME RICH MEDIA CODE --> <!-- © 2000 GameSquad.net All Rights Reserved. --><IFRAME border=0
+ frameBorder=no height=60 marginHeight=0 marginWidth=0 scrolling=no
+ src="doc3_files/adcycle.htm"
+ width=468>
+<a href="http://ads.gamesquad.net/addclick.exe/adclick.cgi?REGION=game|tech|ent&id=1" target="_top"><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&media=1&id=1" width=468 height=60 border=0 ALT="GSN ROS Ad"></a>
+</IFRAME><!-- END GAMESQUAD.NET IFRAME RICH MEDIA CODE --><BR><IMG
+ height=15 src="doc3_files/spacer.gif" width=400> </TD></TR>
+ <TR>
+ <TD bgColor=#003399 colSpan=2>
+ <P align=right><IMG align=right border=0 height=18 hspace=0
+ src="doc3_files/trcorner.gif" width=20><IMG align=left border=0 height=18
+ hspace=0 src="doc3_files/tlcorner.gif" width=20><FONT face=Verdana
+ size=2>Monday, July 31st, 2000</FONT> </P></TD></TR>
+ <TR>
+ <TD colSpan=2>
+ <TABLE bgColor=#003399 border=0 cellPadding=0 cellSpacing=4
+ width="100%"><TBODY>
+ <TR>
+ <TD bgColor=#666666 width="100%">
+ <CENTER>
+ <P>
+ <TABLE bgColor=black border=0 cellPadding=0 cellSpacing=1
+ width="100%">
+ <TBODY>
+ <TR>
+ <TD background=doc3_files/hscan.gif bgColor=#666666
+ width="100%"><IMG height=1 src="doc3_files/spacer.gif"
+ width=738><BR>
+ <CENTER>
+ <TABLE border=0 cellPadding=2 cellSpacing=0 width="91%">
+ <TBODY>
+ <TR>
+ <TD vAlign=top width="15%">
+ <P align=center><A
+ href="http://bp6.gamesquad.net/specs.phtml"><IMG
+ align=bottom
+ alt="Abit BP6 Motherboard specification and information."
+ border=0 height=45 src="doc3_files/bp6icon.gif"
+ width=70></A><FONT face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/specs.phtml"><FONT
+ color=white face=Verdana size=1>BP6 Specs</FONT></A>
+ </P></TD>
+ <TD vAlign=top width="15%">
+ <P align=center><A
+ href="http://bp6.gamesquad.net/bxcool.phtml"><IMG
+ align=bottom
+ alt="How to cool the BX Chipset on your BP6." border=0
+ height=45 src="doc3_files/bxcool.gif" width=70></A><FONT
+ face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/uc.phtml"><FONT
+ color=white face=Verdana size=1>BX Cooling</FONT></A>
+ </P></TD>
+ <TD vAlign=top width="15%">
+ <P align=center><A
+ href="http://bp6.gamesquad.net/contest.phtml"><IMG
+ align=bottom
+ alt="The U;timate Gaming Contest - Coming Soon!"
+ border=0 height=45 src="doc3_files/ugmcontest.gif"
+ width=70></A><FONT face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/contest.phtml"><FONT
+ color=white face=Verdana size=1>UGM Contest</FONT></A>
+ </P></TD>
+ <TD vAlign=top width="15%">
+ <P align=center><A
+ href="http://bp6.gamesquad.net/uc.phtml"><IMG
+ align=bottom
+ alt="Cooling &amp; Heatsink review for the BP6."
+ border=0 height=45 src="doc3_files/alpha.gif"
+ width=70></A><FONT face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/uc.phtml"><FONT
+ color=white face=Verdana size=1>Heatsinks</FONT></A>
+ </P></TD>
+ <TD vAlign=top width="15%">
+ <P align=center><A
+ href="http://bp6.gamesquad.net/101.phtml"><IMG
+ align=bottom
+ alt="BP6 101 - Class is now in session. Welcome newbies!"
+ border=0 height=45 src="doc3_files/bp6101.gif"
+ width=70></A><FONT face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/101.phtml"><FONT
+ color=white face=Verdana size=1>BP6 101</FONT></A>
+ </P></TD>
+ <TD vAlign=top width="15%">
+ <P align=center><A
+ href="http://bp6.gamesquad.net/win2k_install.phtml"><IMG
+ align=bottom
+ alt="Install guide for installing Windows 2000 on the BP6 "
+ border=0 height=45 src="doc3_files/win2kht.gif"
+ width=70></A><FONT face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/win2k_install.phtml"><FONT
+ color=white face=Verdana size=1>Win2k Install</FONT></A>
+ </P></TD>
+ <TD vAlign=top width="15%">
+ <P align=center><A href="http://www.gentus.com/"><IMG
+ align=bottom
+ alt="Taking a first look at the Abit Linux release called "
+ border=0 height=45 src="doc3_files/gentusbox.gif"
+ width=70 Gentus?.?></A><BR><A
+ href="http://www.gentus.com/"><FONT color=white
+ face=Verdana size=1>Gentus</FONT></A>
+ </P></TD></TR></TBODY></TABLE></CENTER></TD></TR></TBODY></TABLE></CENTER></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
+<TABLE bgColor=#003399 border=0 cellSpacing=6 width="80%">
+ <TBODY>
+ <TR>
+ <TD bgColor=black vAlign=top width="10%">
+ <TABLE border=0 cellPadding=3 cellSpacing=0 width="100%">
+ <TBODY>
+ <TR>
+ <TD width="100%"><IMG height=1 src="doc3_files/spacer.gif"
+ width=111><BR><B><FONT color=yellow face=Verdana
+ size=2>REVIEWS</FONT></B><FONT face=Verdana size=2><BR>
+ <HR align=center>
+ </FONT><A href="http://bp6.gamesquad.net/bp6reviews.phtml"><FONT
+ color=white face=Verdana size=1>BP6 Reviews</FONT></A><FONT
+ face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/h2o.phtml"><FONT color=white
+ face=Verdana size=1>BP6 Watercooling</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/bxcool.phtml"><FONT color=white
+ face=Verdana size=1>BX Chipset Cooling</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/benchmark.phtml"><FONT color=white
+ face=Verdana size=1>Benchmarks</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/bp6fsb.phtml"><FONT color=white
+ face=Verdana size=1>BP6FSB Utility</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/powerleap.phtml"><FONT color=white
+ face=Verdana size=1>PowerLeap NEO S370</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/seti.phtml"><FONT color=white
+ face=Verdana size=1>SETI on the BP6</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/orbs.phtml"><FONT color=white
+ face=Verdana size=1>Golden Orbs I</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/orbs/orbs2.phtml"><FONT color=white
+ face=Verdana size=1>Golden Orbs II</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/Q6fix.phtml"><FONT color=white
+ face=Verdana size=1>VTT Solution</FONT></A><FONT face=Verdana
+ size=1><BR><BR></FONT><B><FONT color=yellow face=Verdana
+ size=2>NAVIGATE</FONT></B><FONT color=yellow face=Verdana size=2>
+ <HR align=center>
+ </FONT><A href="http://www.bp6.com/"><FONT color=white face=Verdana
+ size=1>News</FONT></A><FONT face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/chat.phtml"><FONT color=white
+ face=Verdana size=1>Online Text Chat</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A href="javascript:popUp('chat_popup.htm')"><FONT
+ color=white face=Verdana size=1>Voice Chat</FONT></A><BR><A
+ href="http://216.247.220.192/Forum"><FONT color=white face=Verdana
+ size=1>Messageboard</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A href="http://bp6.gamesquad.net/cooling"><FONT
+ color=white face=Verdana size=1>Temp. Converter</FONT></A><FONT
+ face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/uc.phtml"><FONT color=white
+ face=Verdana size=1>Picture Gallery</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/bios.phtml"><FONT color=white
+ face=Verdana size=1>Latest BIOS</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A href="http://bp6.gamesquad.net/files/"><FONT
+ color=white face=Verdana size=1>Drivers &amp; Files</FONT></A><FONT
+ face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/uc.phtml"><FONT color=white
+ face=Verdana size=1>UGM of the week</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/contest.phtml"><FONT color=white
+ face=Verdana size=1>BP6 Contest</FONT></A><FONT face=Verdana
+ size=1><BR><BR></FONT><B><FONT color=yellow face=Verdana
+ size=2>OTHER STUFF</FONT></B><FONT color=yellow face=Verdana size=2>
+
+ <HR align=center>
+ </FONT><A href="http://bp6.gamesquad.net/whois.phtml"><FONT
+ color=white face=Verdana size=1>Who is Tim?</FONT></A><FONT
+ face=Verdana size=1><BR></FONT><A href="mailto:tim@bp6.com"><FONT
+ color=white face=Verdana size=1>Contact BP6.com</FONT></A><FONT
+ face=Verdana size=1><BR></FONT><A
+ href="http://bp6.gamesquad.net/uc.phtml"><FONT color=white
+ face=Verdana size=1>Affiliates Section</FONT></A><FONT face=Verdana
+ size=1><BR></FONT><A href="http://bp6.gamesquad.net/uc.phtml"><FONT
+ color=white face=Verdana size=1>Sponsors Section <BR></FONT><A
+ href="http://bp6.gamesquad.net/links.phtml"><FONT color=white
+ face=Verdana size=1>Links<BR><BR></FONT></A><B><FONT color=yellow
+ face=Verdana size=2>PC SPECIALS</FONT></B><FONT color=yellow
+ face=Verdana size=2>
+ <HR align=center>
+ </FONT><A href="http://bp6.gamesquad.net/specials.phtml"><FONT
+ color=white face=Verdana size=1>Vendor
+ Specials<BR><BR></FONT></A><BR></FONT></A><B><FONT color=yellow
+ face=Verdana size=2>Pic of the day</FONT></B>
+ <HR>
+
+ <CENTER>
+ <P align=center><FONT face="Verdana, Arial, Helvetica" size=1><A
+ href="http://bp6.gamesquad.net/cgi-bin/schlabo/potd.pl"><IMG
+ alt="No picture is available for today." border=0
+ src="doc3_files/potd_na_110x83.gif"></A> </FONT></P></CENTER><BR>
+ <CENTER></CENTER><BR><!--<A HREF="code:javascript:ID_FTPWebView.InvokeHelp()"><FONT SIZE="1" COLOR="white" FACE="Verdana">FTP Help</FONT></A>--></TD></TR></TBODY></TABLE></TD>
+ <TD bgColor=white vAlign=top width="80%"><IMG height=1
+ src="doc3_files/spacer.gif" width=490><BR>
+ <CENTER>
+ <P>
+ <TABLE bgColor=white border=0 cellPadding=10 cellSpacing=0 height="100%"
+ width="100%">
+ <TBODY>
+ <TR>
+ <TD bgColor=white vAlign=top width="100%">
+ <CENTER><A href="http://www.encounter2001.com/" target=_blank><IMG
+ border=0 height=60 src="doc3_files/banner2.gif" width=468></A>
+ </CENTER><BR><A name=news_top></A><FONT color=#003366
+ face=verdana,arial size=2><B>Headlines</B></FONT><BR><FONT
+ face=arial size=1><A class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem965012956,78924,">Chat
+ with ABIT - 8:09PM PDT</A></FONT><BR><FONT face=arial size=1><A
+ class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem964766837,26344,">Fixed
+ wallpaper - 11:47PM PDT</A></FONT><BR><FONT face=arial size=1><A
+ class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem964762841,25865,">Seti
+ update - 10:40PM PDT</A></FONT><BR><FONT face=arial size=1><A
+ class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem964732235,45502,">Judge
+ gives Napster the Boot!! - 2:10PM PDT</A></FONT><BR><FONT face=arial
+ size=1><A class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem964713289,83675,">Ram
+ Sinks.. more cooling for small places. - 8:54AM
+ PDT</A></FONT><BR><FONT face=arial size=1><A class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem964671589,7831,">is
+ it [H]ard? - 9:19PM PDT</A></FONT><BR><FONT face=arial size=1><A
+ class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem964644047,60218,">WiLd
+ CaSe!! - 1:40PM PDT</A></FONT><BR><FONT face=arial size=1><A
+ class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem964631110,84122,">What
+ the heck is a Peltier?!?! - 10:05AM PDT</A></FONT><BR><FONT
+ face=arial size=1><A class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem964587833,74573,">HELLO
+ EVERYONE!!! - 10:03PM PDT</A></FONT><BR><FONT face=arial size=1><A
+ class=nav
+ href="http://bp6.gamesquad.net/index.phtml#newsitem964429577,13375,">BP6
+ Q3 server up and running.. - 2:06AM PDT</A></FONT><BR><BR><!-- NP v3.7.5 --><A
+ name=newsitem965012956,78924,></A>
+ <TABLE bgColor=#003399 width="100%">
+ <TBODY>
+ <TR>
+ <TD><FONT color=#ffffff face=Verdana,arial size=2><B>Sunday,
+ July 30, 2000</B></FONT></TD></TR></TBODY></TABLE><BR><!--<hr noshade width=100%>--><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>Chat with
+ ABIT</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:Holodeck@bp6.com">Holodeck2</A> @ 8:09PM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/965012956,78924,.html"><IMG
+ border=0 src="doc3_files/comments.gif">0 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>I&#8217;m slacking a little. All game no
+ work makes Holodeck2 a happy boy :-)<BR><BR>Wallpaper update: I got
+ off my lazy ass and redid the 1280x1024 wall paper, now it has the 2
+ celerons.<BR><BR><B><A href="http://fullon3d.com/chat/abit/"
+ target=3d>Fullon3d had a live chat with that Eric guy from Abit.
+ </A></B>Submitted by: MJS<BR><BR>Here&#8217;s a little clip:<BR>[Falcon]
+ BP6-2??<BR>[EricBoeing] We already have a micro ATX dual flip-chip
+ board<BR>[EricBoeing] but it's OEM only<BR>[EricBoeing] the full ATX
+ version should be out Septemberish<BR></FONT><BR><BR><A
+ name=newsitem964766837,26344,></A>
+ <TABLE bgColor=#003399 width="100%">
+ <TBODY>
+ <TR>
+ <TD><FONT color=#ffffff face=Verdana,arial size=2><B>Thursday,
+ July 27, 2000</B></FONT></TD></TR></TBODY></TABLE><BR><!--<hr noshade width=100%>--><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>Fixed
+ wallpaper</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:Holodeck@bp6.com">Holodeck2</A> @ 11:47PM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/964766837,26344,.html"><IMG
+ border=0 src="doc3_files/comments.gif">5 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2><B>Get them now!!</B><BR>This is a
+ fixed bp6 wallpaper. In all the popular flavors, err...
+ resolutions.<BR><IMG height=180 src="doc3_files/3-800.jpg"
+ width=240><BR>It's still the Intels Inside one with a spelling
+ change; from "Mothboard" to "Motherboard"<BR><BR>Thanks to Matt for
+ pointing that out to me.<BR>I would also like to thank Kevin for
+ hosting my last batch and Radu for the previous "DUEL"/"DUAL"
+ error.<BR>And 1 more person, THANK YOU TIM for letting me borrow
+ your server space ;-)<BR><BR>If you need a weird resolution, feel
+ free to <A href="mailto:Holodeck2@home.com">e-mail</A> me requesting
+ for one.<BR>If you have ideas or more errors to point out, <A
+ href="mailto:Holodeck2@home.com">mailto:Holodeck2@home.com</A><BR><BR><A
+ href="doc3_files/3-800.jpg" target=800>800x600 </A><BR><A
+ href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1024.jpg"
+ target=800>1024x768 </A><BR><A
+ href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1152.jpg"
+ target=800>1152x864 </A><BR><A
+ href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1280x1024.jpg"
+ target=800>1280x1024 </A><BR><A
+ href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1600.jpg"
+ target=800>1600x1200 </A><BR>
+ <P>Enjoy :-)<BR>
+ <P><A href="mailto:Holodeck2@home.com">Holodeck2,</A><BR>[H]ard at
+ work on the Brand Spanking New Wallpaper.<BR></FONT><BR><BR><A
+ name=newsitem964762841,25865,></A><B><U><FONT color=#003366
+ face="Verdana, Arial" size=2>Seti update</FONT></U></B><BR><FONT
+ color=#0066cc face=Arial size=1><SMALL>Posted by <A class=nav
+ href="mailto:Holodeck@bp6.com">Holodeck2</A> @ 10:40PM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/964762841,25865,.html"><IMG
+ border=0 src="doc3_files/comments.gif">5 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2><IMG height=54
+ src="doc3_files/setiupdate.jpg" width=400><BR>You like the
+ pic?<BR><BR>Bp6 User Group Update:<BR>Completed 61531
+ units!!<BR><B>#168 on Top 200 All Groups</B> (Going to pass CLRC in
+ a few days)<BR><B>#74 on Top 200 Teams</B> (Gaining fast on
+ Starfleet)<BR><BR>We are flying though at the speed of light (may be
+ a little slower).<BR>Good job everyone!!<BR><BR>Check this page at
+ least once a day for new stuff :-)<BR></FONT><BR><BR><A
+ name=newsitem964732235,45502,></A><B><U><FONT color=#003366
+ face="Verdana, Arial" size=2>Judge gives Napster the
+ Boot!!</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:Holodeck@bp6.com">Holodeck2</A> @ 2:10PM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/964732235,45502,.html"><IMG
+ border=0 src="doc3_files/comments.gif">0 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>Good afternoon for everyone living in
+ EST. I was going to post today morning but I didn't. Here's my
+ story:<BR>I woke up and thought about posting something but I
+ decided to wax my car before the sun came up (draw your own
+ conclusions), wax on, wax off, wax on,..., did that for about an
+ hour. Then I saw the sun rise (Aaahh I'm melting... not). I sat in
+ front of my comp and started to search for good news to post. Saw
+ that a stoopid judge temporally shuts down napster. Goes to room and
+ cry. and now I'm here :-)<BR><BR><A
+ href="http://www.msnbc.com/news/437532.asp"
+ target="Judge vs Napster">Judge shuts Napster down
+ <P><IMG height=143 src="doc3_files/669915.jpg"
+ width=200></A><BR>Check out the Goofy guy in the suit<BR>He's Sean
+ Fanning, founder of Napster.<BR><BR>Got news?? <A
+ href="mailto:Holodeck2@home.com">mailto:Holodeck2@home.com</A><BR></FONT><BR><BR><A
+ name=newsitem964713289,83675,></A><B><U><FONT color=#003366
+ face="Verdana, Arial" size=2>Ram Sinks.. more cooling for small
+ places.</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:tim@bp6.com">tim</A> @ 8:54AM PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/964713289,83675,.html"><IMG
+ border=0 src="doc3_files/comments.gif">0 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>Need some cooling for your Videocard
+ memory to get a little extra overclockability and FPS? <A
+ href="http://www.overclockershideout.com/RamSinks.html"
+ target=_BLANK>Overclockers Hiedout Ram Sinks</A> They just notified
+ me of their new design.<BR><IMG border=1
+ src="doc3_files/ramsink.jpg"></FONT><BR><BR><A
+ name=newsitem964671589,7831,></A>
+ <TABLE bgColor=#003399 width="100%">
+ <TBODY>
+ <TR>
+ <TD><FONT color=#ffffff face=Verdana,arial
+ size=2><B>Wednesday, July 26,
+ 2000</B></FONT></TD></TR></TBODY></TABLE><BR><!--<hr noshade width=100%>--><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>is it
+ [H]ard?</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:Holodeck@bp6.com">Holodeck2</A> @ 9:19PM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/964671589,7831,.html"><IMG
+ border=0 src="doc3_files/comments.gif">0 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>Big heatsinks are good, very good. The
+ bigger the better.<BR>You can never can have a too big of heatsink
+ on a small chip (CPU, GPU, CHIPSET, etc)<BR><BR><IMG height=173
+ src="doc3_files/voodooside2.jpg" width=230><BR>My overclocked
+ Voodoo3 2000 with a BIG mofo heatsink on top.<BR>Peltier and
+ watercooling next up :-)<BR>(if you pry off the heatsink you void
+ the warranty )<BR><BR>it was originally posted on <A
+ href="http://www.hardocp.com/">[H]ardOCP </A><BR>I&#8217;m not only a
+ BP6er but also a [H]ardOCPer<BR></FONT><BR><BR><A
+ name=newsitem964644047,60218,></A><B><U><FONT color=#003366
+ face="Verdana, Arial" size=2>WiLd CaSe!!</FONT></U></B><BR><FONT
+ color=#0066cc face=Arial size=1><SMALL>Posted by <A class=nav
+ href="mailto:Holodeck@bp6.com">Holodeck2</A> @ 1:40PM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/964644047,60218,.html"><IMG
+ border=0 src="doc3_files/comments.gif">8 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>Now this person really knows how to
+ keep his case cool!!<BR>Addin an 18" Fan!! WOW!!<BR><BR><A
+ href="http://www.envador.com/Photos/PVCII/" target=_blank><IMG
+ src="doc3_files/TN_OpenedUp1.jpg"></A><BR>Click to go to his
+ site.<BR></FONT><BR><BR><A
+ name=newsitem964631110,84122,></A><B><U><FONT color=#003366
+ face="Verdana, Arial" size=2>What the heck is a
+ Peltier?!?!</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:Holodeck@bp6.com">Holodeck2</A> @ 10:05AM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/964631110,84122,.html"><IMG
+ border=0 src="doc3_files/comments.gif">6 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>This is for all you people who wanted
+ to know what a peltier is.<BR><BR>The quest fo the Perfect
+ Peltier<BR><A
+ href="http://www.tweakmax.com/html/peltier/peltier-1.cfm"
+ target=_blank><IMG src="doc3_files/peltier.jpg"></A> <BR>Thanks to
+ <A href="http://www.tweakmax.com/" target=_blank>TweakMax.com</A>
+ <BR><BR>Note: Today morning when I woke up I saw my whole screen
+ cluttered with a bunch of IMs!! I live in the USA on EST. If you
+ live somewhere else please check the time in my area. for example:
+ If you live in Europe and IM me in the morning your time I would be
+ sleeping it would be like 4 in the morning here. Just to let you
+ know <IMG src="doc3_files/smile.gif"><BR>I'm not angry at anyone...
+ good thing I have a long fuse <IMG
+ src="doc3_files/tongue.gif"><BR></FONT><BR><BR><A
+ name=newsitem964587833,74573,></A>
+ <TABLE bgColor=#003399 width="100%">
+ <TBODY>
+ <TR>
+ <TD><FONT color=#ffffff face=Verdana,arial size=2><B>Tuesday,
+ July 25, 2000</B></FONT></TD></TR></TBODY></TABLE><BR><!--<hr noshade width=100%>--><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>HELLO
+ EVERYONE!!!</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:Holodeck@bp6.com">Holodeck2</A> @ 10:03PM
+ PDT</SMALL>&nbsp; <BR><FONT color=black face=Arial size=2>Hello
+ everyone, Woohoo!! I'm on!!<BR>Who is this Holodeck2 person
+ anyways?!?! Read on :-)<BR>I&#8217;m a regular on the bp6 messageboard,
+ trying to help people out with their problems.<BR>I&#8217;m the
+ self-proclaimed bp6 cooling expert, If you have a cooling idea, I&#8217;ve
+ probably already done it and can offer some incite.<BR>My computer
+ is always on so you can contact me whenever... problem is, I'm not
+ always in front of it. I'll try to update this page and keep
+ everyone happy :-)<BR>Any Questions or comments, you can either
+ contact me or post it on the messageboard.<BR><BR>Ways to contact
+ me.<BR>E-mail: <A
+ href="mailto:Holodeck2@home.com">Holodeck2@home.com</A> (All E-mails
+ will be answered in 24 hours or less, I guarantee it.)<BR>When you
+ write me an e-mail please put in the subject line "BP6" then the
+ rest of your subject so my e-mail program can sort it, thanks<BR><A
+ href="http://www.aol.com/aim">AIM: </A>Holodeck2 (instant response
+ if I&#8217;m in front of my comp and not trying to frag someone)<BR><A
+ href="http://www.icq.com/download">ICQ: </A>82640218 (rarely
+ on)<BR><BR>P.S. If someone named &#8220;Digital Vortex&#8221; on either Quake 3
+ or 2 frags you, it&#8217;s probably me. ;-)<BR></FONT><BR><BR><A
+ name=newsitem964429577,13375,></A>
+ <TABLE bgColor=#003399 width="100%">
+ <TBODY>
+ <TR>
+ <TD><FONT color=#ffffff face=Verdana,arial size=2><B>Monday,
+ July 24, 2000</B></FONT></TD></TR></TBODY></TABLE><BR><!--<hr noshade width=100%>--><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>BP6 Q3 server up and
+ running..</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:tim@bp6.com">tim</A> @ 2:06AM PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/964429577,13375,.html"><IMG
+ border=0 src="doc3_files/comments.gif">3 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>Setup a Q3 server for anyone wanting
+ to practice in preparation for Quakecon.. Connect to bp6.dyndns.org
+ default port. (SERVER: BP6 system, 256 MB ram, celeron 600 on a T3
+ connection)... Will be moved to another BP6 server eventually. This
+ is only a temporary test of the system and net connection. <BR>(BTW-
+ there are a few bot's running around in there..)</FONT><BR><BR><A
+ name=newsitem964425184,95812,></A><B><U><FONT color=#003366
+ face="Verdana, Arial" size=2>BIOS Savior to the
+ rescue....</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:tim@bp6.com">tim</A> @ 12:53AM PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/964425184,95812,.html"><IMG
+ border=0 src="doc3_files/comments.gif">2 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>Do you sweat during the BIOS flashing
+ procedure on your BP6 mobo? If so then this little gadget maybe
+ worth a first look. It's called the "<B>RD1 BIOS Savior</B>" and it
+ plugs in between your BIOS ROM and the BIOS ROM socket on your mobo.
+ This device will backup your BIOS and and allow you to recover your
+ BIOS in the event that your flashing session goes wrong. In the
+ event of a bad flash, just flip a switch on the RDI and boot up your
+ system, and flash again. This is also good as a failsafe in case you
+ don't believe in Virus Protecting your computer. (Thanks to Fred for
+ link)<BR><A href="http://www.ioss.com.tw/eg/rd1/RD1info0004.PDF"
+ target=_NEW>Manufacturers Brochure</A> (PDF Format)<BR><A
+ href="http://192.216.185.10/mwave/doc/A06950.html"
+ target='_BLANK"'>Another info page</A><BR><A
+ href="http://192.216.185.10/mwave/ProdMB-AC-MW.hmx?UID=&amp;CID=&amp;updepts=MB&amp;DNAME=%3Cb%3EMotherboards%3C%2Fb%3E&amp;Back=ProdMB-AC-MW.hmx?"
+ target=_BLANK>Available for about $20</A><BR><BR><IMG
+ src="doc3_files/rd1.jpg"></FONT><BR><BR><A
+ name=newsitem963875853,12731,></A>
+ <TABLE bgColor=#003399 width="100%">
+ <TBODY>
+ <TR>
+ <TD><FONT color=#ffffff face=Verdana,arial size=2><B>Monday,
+ July 17, 2000</B></FONT></TD></TR></TBODY></TABLE><BR><!--<hr noshade width=100%>--><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>How To
+ Overclock</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:killz@i82hq.com">DareDevil</A> @ 4:17PM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/963875853,12731,.html"><IMG
+ border=0 src="doc3_files/comments.gif">3 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>For those of you who are new to
+ overclocking, this guide will explain to you how to overclock, and
+ what some of the terms are. Like 'FSB' (what the heck is that!?
+ :0))<BR><BR><A href="http://netkills.qgl.org/a_oc_comp.shtml"
+ target=_blank>How To Overclock</A> </FONT><BR><BR><A
+ name=newsitem963875485,23353,></A><B><U><FONT color=#003366
+ face="Verdana, Arial" size=2>The Cardcooler
+ XT</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:killz@i82hq.com">DareDevil</A> @ 4:11PM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/963875485,23353,.html"><IMG
+ border=0 src="doc3_files/comments.gif">1 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>Wow! I am impressed! Nevermind keeping
+ the CPU's cool... Keep your whole board cool!<BR><BR><I>Even if your
+ not overclocking your system (or planning on it), this unit will
+ provide system stability and longevity. What would happen one day of
+ your GeForce or CPU fan went dead? You can also think of this
+ cooling unit as a backup to essential cooling fans in your
+ system.</I><BR><BR>Check this out!<BR><BR><A
+ href="http://www.brokenpixel.com/articles/coolerXT/cardcoolerXT_1.shtml"
+ target=_blank>http://www.brokenpixel.com/articles/coolerXT/cardcoolerXT_1.shtml</A>
+ </FONT><BR><BR><A name=newsitem963859982,88982,></A><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>'Nerd
+ Inside'</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:killz@i82hq.com">DareDevil</A> @ 11:53AM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/963859982,88982,.html"><IMG
+ border=0 src="doc3_files/comments.gif">1 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>We all need to have some fun
+ sometimes! Check out this little web site that sells 'nerd' clothing
+ ;) (I like the bibs in the Junior Hackerz section) :-Þ<BR><BR>
+ <DIV align=center><A href="http://www.nerdgear.com/"
+ target=_blank><IMG border=0
+ src="doc3_files/nerdinside.gif"></A></DIV></FONT><BR><BR><A
+ name=newsitem963819796,9688,></A><B><U><FONT color=#003366
+ face="Verdana, Arial" size=2>Dual PSU Wiring diagram... (preview to
+ Part 1 Watercooling Project)</FONT></U></B><BR><FONT color=#0066cc
+ face=Arial size=1><SMALL>Posted by <A class=nav
+ href="mailto:tim@bp6.com">tim</A> @ 12:43AM PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/963819796,9688,.html"><IMG
+ border=0 src="doc3_files/comments.gif">11 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>When is comes to overclocking your
+ system, cooling plays a big role. Powering all of those fans in your
+ system can cause quite a strain on your PSU (Power Supply Unit).
+ Depending on the number of peripherals in your system, adding a more
+ powerfull PSU or adding a second PSU may be neccesary. For
+ watercooling and using peltiers, dedicating a second PSU to power
+ the Peltiers (TEC's) is a good idea. Here I have come up with 2
+ diagrams on how I wired dual 300 watt ATX power supply units for the
+ Blizzard BP6 watercooling project. Consider this part of Step 1.
+ More will follow this week. BTW.. hacking up your PSU's is very
+ dangerous and is not recommended unless you know what you are doing.
+ <BR><BR>View Diagram 1 <A
+ href="http://bp6.gamesquad.net/images/wiring.jpg"
+ target=_BLANK>here</A>.<BR>View Diagram 2 <A
+ href="http://bp6.gamesquad.net/images/psu2.gif"
+ target=_BLANK>here</A>.<BR><BR>I used Tap-In Squeeze Connectors and
+ 22 guage wire to connect the wires. You can get them at Radio Shack
+ Part# 64-3053 or <A
+ href="http://www.radioshack.com/ProductCatalog/ProductDetail/Index/1,2098,,00.html?SKUString1=64&amp;SKUString2=3053"
+ target=_blank>click here</A>.</FONT><BR><BR><A
+ name=newsitem963766655,78511,></A>
+ <TABLE bgColor=#003399 width="100%">
+ <TBODY>
+ <TR>
+ <TD><FONT color=#ffffff face=Verdana,arial size=2><B>Sunday,
+ July 16, 2000</B></FONT></TD></TR></TBODY></TABLE><BR><!--<hr noshade width=100%>--><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>RAM Overclocking?
+ Hmmmmm.</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:killz@i82hq.com">DareDevil</A> @ 9:57AM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/963766655,78511,.html"><IMG
+ border=0 src="doc3_files/comments.gif">3 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>I know we're pretty big overclockers
+ here at BP6.Com so, this is a post of choice ;-) I've seen the
+ question in the message boards, 'why can't I overclock any higher?'
+ Well, it's not always the CPU that's holding you back... Many other
+ things need to be taken care of to overclock such as your PCI
+ devices (can they handle the higher bus speed), the actual CPU, and
+ your RAM. I'm not saying that that a high quality stick of silicon
+ will enable you to overclock your 366MHz to 1 GHZ (I wish!), but, it
+ will certainly help =)<BR><BR>Extreme Overclocking has tested
+ (overclocked) PC133 RAM to there full potential. Here's a quote I
+ found and the link:<BR><BR><I>Well, the guys at Extreme Overclocking
+ have been hard at work again with their latest review. This time
+ they have put seven 128MB PC133 memory modules through the torture
+ tests to determine their maximum overclocking potential. Which one's
+ came out on top? Read the review to find out....</I><BR><BR><A
+ href="http://www.extremeoverclocking.com/reviews/memory/ram_roundup_1.html"
+ target=_blank>Cooked RAM... Yummie</A><BR><BR>The
+ ÐÐ.</FONT><BR><BR><A name=newsitem963764236,76720,></A><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>CPU
+ Guide</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:killz@i82hq.com">DareDevil</A> @ 9:17AM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/963764236,76720,.html"><IMG
+ border=0 src="doc3_files/comments.gif">0 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>A follow up on the 'Weekly CPU
+ Prices', this guide will help you determine which cpu is best for
+ you (and your board ;-)). Sent to me by Spanky, here's the
+ link:<BR><BR>
+ <LI><A
+ href="http://www6.tomshardware.com/howto/00q2/000412/index.html"
+ target=_blank>http://www6.tomshardware.com/howto/00q2/000412/index.html</A></FONT><BR><BR><A
+ name=newsitem963685749,28290,></A>
+ <TABLE bgColor=#003399 width="100%">
+ <TBODY>
+ <TR>
+ <TD><FONT color=#ffffff face=Verdana,arial size=2><B>Saturday,
+ July 15, 2000</B></FONT></TD></TR></TBODY></TABLE><BR><!--<hr noshade width=100%>--><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>Weekly CPU
+ Prices</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:killz@i82hq.com">DareDevil</A> @ 11:29AM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/963685749,28290,.html"><IMG
+ border=0 src="doc3_files/comments.gif">2 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>Wow, found this very useful! Wanting
+ to buy a new CPU? Check out this detailed price list!<BR><BR><A
+ href="http://www.sharkyextreme.com/hardware/weekly_cpu/"
+ target=_blank>Click Here.</A> <BR><BR>Thanks Sharky
+ Extreme!</FONT><BR><BR><A
+ name=newsitem963679881,35277,></A><B><U><FONT color=#003366
+ face="Verdana, Arial" size=2>Fast Wallpapers</FONT></U></B><BR><FONT
+ color=#0066cc face=Arial size=1><SMALL>Posted by <A class=nav
+ href="mailto:killz@i82hq.com">DareDevil</A> @ 9:51AM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/963679881,35277,.html"><IMG
+ border=0 src="doc3_files/comments.gif">0 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>FAST-MHz has released some wallpapers!
+ <A href="http://64.29.18.111/wallpaper/index.html"
+ target=_blank>Click here</A> to view them. They come in sizes
+ 800x600 1024x768 and 1152x864. If you have your desktop set at a
+ larger size, just use the 'stretch' function in desktop properties
+ instead of 'center'. Works great.<BR><BR>In other news, we want to
+ finnish off all the sections at BP6.Com so, to start, we're going to
+ work on the <A href="http://bp6.gamesquad.net/uc.phtml"
+ target=_blank>Picture Gallery</A>. To help us out, you can send in
+ all your cool, wierd, crazy pics that you may have to: <A
+ href="mailto:thedaredevil@bp6.com">thedaredevil@bp6.com</A>. (The
+ topic being computers, duh! :0) And no... I don't want to recieve
+ any porno piccies in my mailbox! I have enough of those!) Kidding
+ guys.<BR><BR>Okay, that's all for now.<BR><BR>The
+ ÐÐ.</FONT><BR><BR><A name=newsitem963619505,3764,></A>
+ <TABLE bgColor=#003399 width="100%">
+ <TBODY>
+ <TR>
+ <TD><FONT color=#ffffff face=Verdana,arial size=2><B>Friday,
+ July 14, 2000</B></FONT></TD></TR></TBODY></TABLE><BR><!--<hr noshade width=100%>--><B><U><FONT
+ color=#003366 face="Verdana, Arial" size=2>Hey
+ There!</FONT></U></B><BR><FONT color=#0066cc face=Arial
+ size=1><SMALL>Posted by <A class=nav
+ href="mailto:killz@i82hq.com">DareDevil</A> @ 5:05PM
+ PDT</SMALL>&nbsp; <A
+ href="http://bp6.gamesquad.net/news/963619505,3764,.html"><IMG
+ border=0 src="doc3_files/comments.gif">7 comments</A>
+ &nbsp;|&nbsp;<A
+ href="http://bp6.gamesquad.net/#news_top">top</A></FONT> <BR><FONT
+ color=black face=Arial size=2>Hey guys, just wanted to introduce
+ myself, some of you may have already met me on the BP6.com board.
+ I'll be posting up news from time to time now so, if you'd like, you
+ may send me some news to be posted if you find any ( we don't want
+ to flood Tim ;-) ).<BR><BR>My e-mail address is <A
+ href="mailto:killz@i82hq.com">killz@i82hq.com</A><BR><BR>Ciao for
+ now.<BR><BR>The ÐÐ.</FONT><BR><BR>
+ <CENTER><IFRAME frameBorder=0 height=60 marginHeight=0 marginWidth=0
+ noResize scrolling=no src="doc3_files/ad_iframe.htm"
+ width=468><a href="http://ads.adflight.com/go_static.asp?asid=7708" target="_top"><img width=468 height=60 border=0 alt="Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&sid=1881&asid=7708"></a></IFRAME></CENTER></LI></FONT></TD></TR></TBODY></TABLE></CENTER></P></TD>
+ <TD bgColor=silver vAlign=top width="10%">
+ <CENTER>
+ <P>
+ <TABLE bgColor=silver border=0 cellPadding=0 cellSpacing=0 width="100%">
+ <TBODY>
+ <TR>
+ <TD COLSTART="1">
+ <CENTER><!-- <FORM ACTION="/cgi-bin/subscribe.pl" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">
+ <IMG SRC="/images/spacer.gif" WIDTH="111" HEIGHT="1"><BR>
+ <P><B><FONT SIZE="2" COLOR="#000066" FACE="Verdana">Newsletter</FONT></B><FONT SIZE="1" FACE="Verdana"><BR>
+ <INPUT TYPE="TEXT" NAME="email" SIZE="10" VALUE="ur@email.com"><BR>
+ <INPUT TYPE="HIDDEN" NAME="subscribe" SIZE="-1" VALUE="subscribe"><INPUT TYPE="IMAGE" SRC="/images/subscribe.gif" WIDTH="80"
+ HEIGHT="27" ALIGN="BOTTOM" BORDER="0"></FONT>
+ </FORM> -->
+ <FORM
+ action=http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?emaillist
+ method=post><IMG height=1 src="doc3_files/spacer.gif"
+ width=111><BR><FONT size=1>Newsletter<BR><INPUT name=npemail size=13
+ value="e-mail addr."><BR><INPUT name=npsubscribe style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type=submit value=Subscribe><BR><!-- <input type="submit" name="npunsubscribe" value="Unsubscribe" style="font-size: xx-small; font-family: Verdana; font-weight: bold; color: #ffffff; background-color: #000000;"> --></FONT></FORM><FONT
+ size=1>
+ <FORM
+ action=http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?search
+ method=post>Search news<BR><INPUT name=searchstring size=13><BR><INPUT name=submit style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type=submit value=Submit><BR><A
+ href="http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?newsall">News
+ archive</A></FONT> </FORM></CENTER></TD></TR></TBODY></TABLE><!-- <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" BGCOLOR="silver">
+ <TR>
+ <TD WIDTH="100%">
+ <P ALIGN="CENTER"><A HREF="http://www.free56k.com" target="_blank"><IMG SRC="/images/free56k.gif" WIDTH="100" HEIGHT="49"
+ ALIGN="BOTTOM" BORDER="0"></A>
+ </TD>
+ </TR>
+ </TABLE>
+-->
+ <TABLE bgColor=silver border=0 cellPadding=0 cellSpacing=0 width="100%">
+ <TBODY>
+ <TR>
+ <TD align=middle width="100%"><!-- BEGIN GoTo.com Search Box -->
+ <SCRIPT language=javascript type=text/javascript>
+ <!--
+ if ((parseInt(navigator.appVersion) >= 3)
+ && (navigator.appName != "Netscape")) {
+ document.write("<IFRAME marginheight=0 frameborder=0 ");
+ document.write("marginwidth=0 scrolling=no width=100 height");
+ document.write("=90 ");
+ document.write("SRC=http://www.goto.com/d/ssn/dynconsole/?t");
+ document.write("ype=html&size=100x90&url=http://www.goto.co");
+ document.write("m/d/search/ssn/&target=_blank&Partner=SSN80");
+ document.write("42DF8478957377></IFRAME>");
+ } else if ((parseInt(navigator.appVersion) > 3)
+ && (navigator.appName == "Netscape")) {
+ document.write("<SCRIPT language=javascript type=text/javas");
+ document.write("cript ");
+ document.write("SRC=http://www.goto.com/d/ssn/dynconsole/?t");
+ document.write("ype=js&size=100x90&url=http://www.goto.com/");
+ document.write("d/search/ssn/&target=_blank&Partner=SSN8042");
+ document.write("DF8478957377></SC");
+ document.write("RIPT>");
+ } else {
+ document.write("<A TARGET=_blank ");
+ document.write("HREF=http://www.goto.com/d/search/ssn/?from");
+ document.write("GIF=true>");
+ document.write("<IMG ismap ");
+ document.write("SRC=http://www.goto.com/d/ssn/dynconsole/?t");
+ document.write("ype=gif&size=100x90></A>");
+ }
+ // -->
+ </SCRIPT>
+ <B><NOSCRIPT></B><A
+ href="http://www.goto.com/d/search/ssn/?fromGIF=true"
+ target=_blank><IMG align=bottom border=0 height=90 isMap
+ src="doc3_files/100x90.gif" width=100></A><B><A
+ href="http://www.goto.com/d/search/ssn/?fromGIF=true" target=_blank>
+ </A></A></B><B></NOSCRIPT></B><B><!-- END GoTo.com Search Box --></B><!-- Pricewatch Search Box -->
+ <FORM action=http://www.pricewatch.com/search/search.asp method=get
+ target=_Blank>
+ <CENTER>
+ <P><B><FONT color=white face="ARIAL, HELVETICA" size=1>PC Price
+ Search<BR></FONT></B><INPUT maxLength=30 name=criteria size=10><BR><INPUT name=submit style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type=submit value=Search>
+ </FORM><!-- Pricewatch Search Box --><A
+ href="http://www.puicorp.com/bp6specials.htm" target=_BLANK><IMG
+ src="doc3_files/puibp6.gif"></A><BR><BR><BR><BR><A
+ href="http://store.yahoo.com/dunamis-site/maxtor.html"
+ target=_BLANK><IMG
+ alt="BP6.com Special - Enter CODE: BP6-hd in the order (notes) to receive a discount"
+ src="doc3_files/hd5.gif"><FONT size=1><BR>BP6.COM
+ Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></TABLE>
+ <TABLE bgColor=silver border=0 cellPadding=0 cellSpacing=0 height="100%"
+ width="100%">
+ <TBODY>
+ <TR>
+ <TD
+width="100%">&nbsp;</TD></TR></TBODY></TABLE></P></CENTER></TR></TBODY></TABLE><!-- </TABLE>-->
+<CENTER></CENTER></TD></TR><TR><TD COLSPAN="3" VALIGN="TOP"
+HEIGHT="70">&nbsp;</TD> </TR></TABLE>
+<TABLE border=0 width=780>
+ <TBODY>
+ <TR>
+ <TD width=780>
+ <P align=center><FONT color=#999999 face=verdana,arial size=1>Copyright
+ ©1999-2000 BP6.com, All rights reserved.<BR>Got news? Send it to </FONT><A
+ href="mailto:tim@bp6.com"><FONT color=white face=Verdana
+ size=1>Tim</FONT></A> </P></TD></TR><!-- <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>
+<SCRIPT> window.open=NS_ActualOpen; </SCRIPT>
+</BODY></HTML>
diff --git a/test/HTML/entities.html b/test/HTML/entities.html
new file mode 100644
index 0000000..97aeb14
--- /dev/null
+++ b/test/HTML/entities.html
@@ -0,0 +1,5 @@
+<p tst="a&amp;b" tst2="a&b" tst3="a & b">
+a&amp;b
+a&b
+a & b
+</p>
diff --git a/test/HTML/fp40.htm b/test/HTML/fp40.htm
new file mode 100644
index 0000000..840b81e
--- /dev/null
+++ b/test/HTML/fp40.htm
@@ -0,0 +1,166 @@
+<!doctype html public "-//IETF//DTD HTML//EN">
+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<title>README - Microsoft FrontPage 2000 Server Extensions</title>
+<meta name="Microsoft Theme" content="none">
+</head>
+
+<body>
+<font face="Verdana">
+<h1><a name="top">Microsoft FrontPage 2000 Server Extensions, UNIX</a></h1>
+
+<font size="2"><i>© Copyright Microsoft Corporation, 1999&nbsp;</i></font>
+
+
+<p>The FrontPage Server Extensions are a set of programs on the Web server that support:
+
+<ul>
+ <li>Authoring FrontPage webs</li>
+ <li>Administering FrontPage webs</li>
+ <li>Browse-time FrontPage web functionality</li>
+</ul>
+
+
+<h2>Contents&nbsp;</h2>
+
+<a href="#relnotes">Release Notes</a><br>
+<a href="#moreinfo">Resources for More Information</a>
+<p>&nbsp;</p>
+<hr>
+<h2><a name="relnotes">Release Notes</a></h2>
+
+<p>This section provides complementary or late-breaking
+information to supplement the Microsoft FrontPage Server Extensions documentation.</p>
+
+<p><a href="#apache">Apache 1.3.4 Support</a><br>
+<a href="#upgrading">Upgrading from previous version of FrontPage Server Extensions</a><br>
+<a href="#executables">Uploading files into executable folders</a></p>
+
+
+<p align="right"><font size="1"><a href="#top">Top of Page</a></font></p>
+
+
+<h3><a name="apache">Apache 1.3.4 Support</a></h3>
+
+<p>You need to take some special steps to run the FrontPage Server Extensions with Apache 1.3.4.
+FrontPage Server Extensions expect to find all resource directives in the main server
+configuration file, usually http.conf. To prevent the server extensions from using any secondary
+configuration files (access.conf, srm.conf), add the following lines to http.conf:</p>
+
+
+</font>
+<blockquote>
+ <font face="Courier New">
+ResourceConfig /dev/null&nbsp;<br>
+AccessConfig /dev/null</font>
+</blockquote>
+<font face="Verdana">
+
+
+<p>If you have some settings stored in secondary configuration files, move them to http.conf.</p>
+
+<p>You must stop and restart the web server for your changes to http.conf to take effect.</p>
+
+
+
+<p align="right"><font size="1"><a href="#relnotes">Top of Section</a></font></p>
+
+
+
+<h3><a name="upgrading">Upgrading from previous version of FrontPage Server Extensions</a></h3>
+
+<p>Custom entries in frontpage.cnf are not migrated to FrontPage 2000.</p>
+
+<p>When you install FrontPage 2000 Server Extensions, a new frontpage.cnf file is created in the /usr/local/frontpage/version4.0 directory.
+Any custom settings stored in a previous-version frontpage.cnf are not used. However, you can copy
+your custom settings from the previous-version frontpage.cnf file after you install the FrontPage 2000 Server Extensions.</p>
+
+<p>Do not overwrite the FrontPage 2000 frontpage.cnf file with a frontpage.cnf file from an
+earlier version of the FrontPage Server Extensions.</p>
+
+
+
+<p align="right"><font size="1"><a href="#relnotes">Top of Section</a></font></p>
+
+
+
+<h3><a name="executables">Uploading files into executable folders</a></h3>
+
+
+<p>After upgrading to FrontPage 2000, FrontPage authors will not be able to upload files into
+executable folders. For security reasons, the default setting on FrontPage 2000 webs does not
+allow authors to upload executable files into executable folders in a FrontPage web. This
+setting protects servers so that authors do not inadvertently upload a program containing a bug
+or a virus.</p>
+
+<p>To allow FrontPage authors to upload executables, set the NoExecutableCgiUpload configuration
+variable to zero (0). For information about FrontPage Server Extension configuration variables,
+see the FrontPage 2000 Server Extensions Resource Kit at <a href="http://officeupdate.microsoft.com/frontpage/wpp/serk/">http://officeupdate.microsoft.com/frontpage/wpp/serk/</a>.</p>
+
+
+
+<p align="right"><font size="1"><a href="#relnotes">Top of Section</a></font></p>
+
+
+
+<hr>
+
+
+
+<h2><a name="moreinfo">Resources for More Information</a></h2>
+
+<p>This section lists sources of more information about the
+FrontPage Server Extensions.</p>
+
+<p><a href="#serk">Server Extensions Resource Kit</a><br>
+<a href="#serkupdate">Server Extensions Resource Kit Update</a><br>
+<a href="#kb">Knowledge Base</a></p>
+
+
+<p align="right"><font size="1"><a href="#top">Top of Page</a></font></p>
+
+
+<h3><a name="serk">Server Extensions Resource Kit</a></h3>
+
+<p>The FrontPage 2000 Server Extensions include a full set of documentation: the Server
+Extensions Resource Kit. This is an HTML document installed on the server machine (by
+default) in /usr/local/frontpage/version4.0/serk. To view the Server Extensions Resource
+Kit, open /usr/local/frontpage/version4.0/serk/default.htm in your Web browser.</p>
+
+<p>The Server Extensions Resource Kit contains detailed information about installing and
+administering the FrontPage Server Extensions along with an overview of the Server
+Extensions, a detailed discussion of Server Extensions security on UNIX and Windows,
+troubleshooting information, and a full set of appendixes.</p>
+
+<p align="right"><font size="1"><a href="#moreinfo">Top of Section</a></font></p>
+
+
+<h3><a name="serkupdate">Server Extensions Resource Kit Update</a></h3>
+
+<p>For updated information about installing, setting up, and administrating the FrontPage Server
+Extensions, see the Server Extensions Resource Kit Update at: <a href="http://officeupdate.microsoft.com/frontpage/wpp/serk/">http://officeupdate.microsoft.com/frontpage/wpp/serk/</a>.</p>
+
+
+<p align="right"><font size="1"><a href="#moreinfo">Top of Section</a></font></p>
+
+
+<h3><a name="kb">Microsoft Knowledge Base</a></h3>
+
+<p>For further technical information on FrontPage, please consult Support Online. Use Support
+Online to easily search Microsoft Product Support Services' collection of resources including
+technical articles from Microsoft's extensive Knowledge Base, FAQs, & troubleshooters to find
+fast, accurate answers. You can also customize the site to control your search using either
+keywords or the site's natural language search engine, which uses normal everyday language for
+answering inquiries, so you can write your question in your own words. To begin, go to
+<a href="http://support.microsoft.com/support/">http://support.microsoft.com/support/</a>.</p>
+
+<p align="right"><font size="1"><a href="#moreinfo">Top of Section</a></font></p>
+
+
+<p>&nbsp;</p>
+
+</font>
+</body>
+</html>
diff --git a/test/HTML/liclose.html b/test/HTML/liclose.html
new file mode 100644
index 0000000..7364034
--- /dev/null
+++ b/test/HTML/liclose.html
@@ -0,0 +1,13 @@
+<!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>
+<li>First item
+<li>Second item, closes the first one
+</ul>
+
+</html>
diff --git a/test/HTML/lt.html b/test/HTML/lt.html
new file mode 100644
index 0000000..62f6d94
--- /dev/null
+++ b/test/HTML/lt.html
@@ -0,0 +1,5 @@
+<html>
+<head>
+<meta name="Author" content="Root <root@aol.com>">
+</head>
+</html>
diff --git a/test/HTML/pre.html b/test/HTML/pre.html
new file mode 100644
index 0000000..8e1a66d
--- /dev/null
+++ b/test/HTML/pre.html
@@ -0,0 +1,5 @@
+<html>
+<body>
+<pre><a href="toto"></a><img src="titi"></pre>
+</body>
+</html>
diff --git a/test/HTML/reg1.html b/test/HTML/reg1.html
new file mode 100644
index 0000000..ecdd007
--- /dev/null
+++ b/test/HTML/reg1.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title>Regression test 1</title>
+</head>
+<body>
+<h1>Regression test 1</h1>
+<p>
+Ok file no problem
+</body>
+</html>
diff --git a/test/HTML/reg2.html b/test/HTML/reg2.html
new file mode 100644
index 0000000..7145c19
--- /dev/null
+++ b/test/HTML/reg2.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+<title>Regression test 2</title>
+</head>
+<body>
+<h1>Regression test 2</h1>
+<p>
+Autoclose of tag P
+<p>
+Ok file no problem
+</body>
+</html>
diff --git a/test/HTML/reg3.html b/test/HTML/reg3.html
new file mode 100644
index 0000000..014483b
--- /dev/null
+++ b/test/HTML/reg3.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<title>Regression test 3</title>
+</head>
+<body>
+<h1>Regression test 3</h1>
+<p>
+Autoclose of tag P
+<hr>
+<p>
+Ok file no problem
+</body>
+</html>
diff --git a/test/HTML/reg4.html b/test/HTML/reg4.html
new file mode 100644
index 0000000..7d04ca2
--- /dev/null
+++ b/test/HTML/reg4.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+<title>Regression test 4</title>
+</head>
+<body>
+<h1>Regression test 4</h1>
+<p>
+Wrong close of tag P
+<hr>
+</p>
+</body>
+</html>
diff --git a/test/HTML/script.html b/test/HTML/script.html
new file mode 100644
index 0000000..197b002
--- /dev/null
+++ b/test/HTML/script.html
@@ -0,0 +1,9 @@
+<HTML>
+<HEAD><TITLE>Script tests</TITLE></HEAD>
+<BODY>
+<SCRIPT language=javascript>
+ if (window.open<max) ;
+</SCRIPT>
+<INPUT ONCLICK="if(window.open<max);">
+</BODY>
+</HTML>
diff --git a/test/HTML/test2.html b/test/HTML/test2.html
new file mode 100644
index 0000000..c8fd44c
--- /dev/null
+++ b/test/HTML/test2.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML><HEAD> <TITLE>Linux Today</TITLE></HEAD>
+<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">
+<a href="http://linuxtoday.com/cgi-bin/click.pl?adnum=49"><img src="/pics/door_linux.gif" border="0" width="468" height="60" alt="Atipa Linux solutions. Your reliable cluster, server, and workstation solution. Win a Free Celeron Linux Workstation!"></A>
+
+ </TD>
+ <TD><IMG SRC="/pics/lt.gif" VSPACE=5 alt="Linux Today Logo"><br><font size="-1"><a href="http://linux.com">linux.com</a> partner</font><p></TD>
+
+ </TR>
+</TABLE>
+<font size="2" face="Helvetica">
+[ <a href="http://linuxtoday.com/">headlines</A> |
+<a href="http://features.linuxtoday.com/">features</A> |
+<a href="http://commercial.linuxtoday.com/">commercial</a> |
+<a href="http://security.linuxtoday.com/">security</a> |
+<a href="http://jobs.linuxtoday.com/">jobs</a> |
+<a href="http://linuxtoday.com/volt/">volt</a> |
+<a href="http://linuxtoday.com/contrib.pl">contribute/submit</a> |
+<a href="http://linuxtoday.com/advertise/">advertise</A> |
+<a href="http://linuxtoday.com/search.html">search</A> |
+<a href="http://linuxtoday.com/digests/">site digests</A> |
+<a href="http://linuxtoday.com/mail-lists">mailing lists</A> |
+<a href="http://linuxtoday.com/about/">about us</a> |
+<a href="http://linuxtoday.com/linkus.html">link us</A> ]</font>
+</center>
+<P>
+</body>
+</html>
diff --git a/test/HTML/test3.html b/test/HTML/test3.html
new file mode 100644
index 0000000..af1f190
--- /dev/null
+++ b/test/HTML/test3.html
@@ -0,0 +1,34 @@
+<html>
+<head>
+<base target=contents>
+</head>
+<a name=ProblemDomain.Package><h2>Component Package diagram ProblemDomain</h2>
+</a><p><hr></p>
+<dl>
+<dt><b>Stereotype </b>problem domain</dt>
+<dt><b>Alias </b>Problem Domain</dt>
+<dt><b>Note </b><dd>The Problem Domain package is the model behind the Human
+<dd>Interface, thats stores and manipulates the Family Tree.
+</dl>
+<p><hr></p>
+<dl>
+
+<dt><h4>Class <a href=HumanInterface.FamilyFrame.html#HumanInterface.FamilyFrame>HumanInterface.FamilyFrame</a></h4></dt>
+<dt><h4>Class <a href=ProblemDomain.Birth.html#ProblemDomain.Birth>ProblemDomain.Birth</a></h4></dt>
+<dt><h4>Class <a href=ProblemDomain.Death.html#ProblemDomain.Death>ProblemDomain.Death</a></h4></dt>
+<dt><h4>Class <a href=ProblemDomain.Divorce.html#ProblemDomain.Divorce>ProblemDomain.Divorce</a></h4></dt>
+<dt><h4>Class <a href=ProblemDomain.Family.html#ProblemDomain.Family>ProblemDomain.Family</a></h4></dt>
+<dt><h4>Class <a href=ProblemDomain.Individual.html#ProblemDomain.Individual>ProblemDomain.Individual</a></h4></dt>
+<dt><h4>Class <a href=ProblemDomain.LifeEvent.html#ProblemDomain.LifeEvent>ProblemDomain.LifeEvent</a></h4></dt>
+<dt><h4>Class <a href=ProblemDomain.Marriage.html#ProblemDomain.Marriage>ProblemDomain.Marriage</a></h4></dt>
+<dt><h4>Class <a href=ProblemDomain.Note.html#ProblemDomain.Note>ProblemDomain.Note</a></h4></dt>
+</dl>
+
+<h4><b>Links</h4></b>
+<ul><li><b>Link to </b><a href=HumanInterface.Package.html#HumanInterface.Package>HumanInterface</a></li></ul>
+<dir></dir>
+<ul><li><b>Link to </b><a href=DataManagement.FlatFile.Package.html#DataManagement.FlatFile.Package>DataManagement.FlatFile</a></li></ul>
+<dir></dir>
+<ul><li><b>Link to </b><a href=DataManagement.Package.html#DataManagement.Package>DataManagement</a></li></ul>
+<dir></dir>
+</html>
diff --git a/test/HTML/wired.html b/test/HTML/wired.html
new file mode 100644
index 0000000..3d00d28
--- /dev/null
+++ b/test/HTML/wired.html
@@ -0,0 +1,516 @@
+<!-- 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&ProfileID=9688&RunID=14074&AdID=22584&GroupID=1&FamilyID=2684&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>
+<TR><TD BGCOLOR="#330099"><INPUT NAME="city" TYPE="text" SIZE="7" MAXLENGTH="20" VALUE="Seattle"></TD>
+<TD ROWSPAN=2 ALIGN=LEFT BGCOLOR=FFFFFF><INPUT TYPE="IMAGE" SRC="http://static.wired.com/advertising/blipverts/allapartments/990625jpa_ssthome.gif" WIDTH="375" HEIGHT="60" BORDER="0" VALUE="search" HSPACE=0 alt="Search over 6,000,000 Apts with SpringStreet"></TD></TR>
+<TR><TD BGCOLOR="#330099">
+<SELECT NAME="state">
+<OPTION VALUE="WA" SELECTED>WA
+<OPTION VALUE="AL">AL</OPTION><OPTION VALUE="AK">AK</OPTION>
+<OPTION VALUE="AZ">AZ</OPTION>
+<OPTION VALUE="AR">AR</OPTION>
+<OPTION VALUE="CA">CA</OPTION>
+<OPTION VALUE="CO">CO</OPTION>
+<OPTION VALUE="CT">CT</OPTION>
+<OPTION VALUE="DE">DE</OPTION>
+<OPTION VALUE="DC">DC</OPTION>
+<OPTION VALUE="FL">FL</OPTION>
+<OPTION VALUE="GA">GA</OPTION><OPTION VALUE="HI">HI</OPTION>
+<OPTION VALUE="ID">ID</OPTION>
+<OPTION VALUE="IL">IL</OPTION>
+<OPTION VALUE="IN">IN</OPTION><OPTION VALUE="IA">IA</OPTION><OPTION VALUE="KS">KS</OPTION><OPTION VALUE="KY">KY</OPTION>
+<OPTION VALUE="LA">LA</OPTION>
+<OPTION VALUE="ME">ME</OPTION><OPTION VALUE="MD">MD</OPTION>
+<OPTION VALUE="MA">MA</OPTION>
+<OPTION VALUE="MI">MI</OPTION><OPTION VALUE="MN">MN</OPTION><OPTION VALUE="MS">MS</OPTION>
+<OPTION VALUE="MO">MO</OPTION>
+<OPTION VALUE="MT">MT</OPTION><OPTION VALUE="NE">NE</OPTION>
+<OPTION VALUE="NV">NV</OPTION><OPTION VALUE="NH">NH</OPTION>
+<OPTION VALUE="NJ">NJ</OPTION>
+<OPTION VALUE="NM">NM</OPTION><OPTION VALUE="NY">NY</OPTION>
+<OPTION VALUE="NC">NC</OPTION>
+<OPTION VALUE="ND">ND</OPTION>
+<OPTION VALUE="OH">OH</OPTION><OPTION VALUE="OK">OK</OPTION>
+<OPTION VALUE="OR">OR</OPTION>
+<OPTION VALUE="PA">PA</OPTION>
+<OPTION VALUE="PR">PR</OPTION><OPTION VALUE="RI">RI</OPTION>
+<OPTION VALUE="SC">SC</OPTION>
+<OPTION VALUE="SD">SD</OPTION><OPTION VALUE="TN">TN</OPTION><OPTION VALUE="TX">TX</OPTION>
+<OPTION VALUE="UT">UT</OPTION>
+<OPTION VALUE="VT">VT</OPTION>
+<OPTION VALUE="VA">VA</OPTION>
+<OPTION VALUE="WA">WA</OPTION>
+<OPTION VALUE="WV">WV</OPTION>
+<OPTION VALUE="WI">WI</OPTION>
+<OPTION VALUE="WY">WY</OPTION>
+</SELECT><INPUT TYPE="hidden" NAME="source" VALUE="2hb8bhc059">
+</TD></TR></FORM>
+</TABLE></td>
+ <td valign="top" align="RIGHT"><a href="http://nsads.hotwired.com/event.ng/Type=click&ProfileID=5597&RunID=17167&AdID=22588&GroupID=1&FamilyID=3228&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">
+
+ <tr><td></td><td colspan="2"><img src="http://static.wired.com/news/images/spacer.gif" height="5" width="447" alt=""></td>
+</tr>
+
+ <tr>
+ <td valign="BOTTOM" align="RIGHT" class="wired" bgcolor="#FFFFFF"><a href="/news/0,1287,,00.html"><img src="http://static.wired.com/news/images/wired_000000.gif" width="153" height="30" border="0"></a></td>
+ <td bgcolor="#FF0000" valign="BOTTOM" align="LEFT" width="97"><a href="/news/0,1287,,00.html"><img src="http://static.wired.com/news/images/news_ffffff.gif" width="103" height="30" border="0"></a></td>
+
+
+<td bgcolor="#FF0000" align="left" valign="center"><nobr><img src="http://static.wired.com/news/images/spacer.gif" width="344" height="1"><br><font size="1" face="Verdana, Arial, Geneva, sans-serif" color="#FFFFFF">&nbsp;&nbsp;&nbsp;<b>updated 10:15 a.m.&nbsp;&nbsp;15.Oct.99.PDT</b></font></nobr></td>
+
+
+ </tr>
+ <tr>
+ <td valign="MIDDLE" align="RIGHT" bgcolor="#FFFFFF"><img src="http://static.wired.com/news/images/spacer.gif" width=1 height="30"></td>
+
+ <td colspan="2" bgcolor="#999999">
+
+ <TABLE border="0" cellspacing="0" cellpadding="5">
+<form name="RedirectSearch" action="http://redirect.wired.com/search">
+ <tr>
+ <td>
+<font face="courier" size="1"><input type="TEXT" name="query" size="20" value=""></font>
+ </td>
+
+ <td>
+<select name="url">
+
+ <option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&Filter=docs_filter.hts&ResultTemplate=vignette.hts&Collection=vignette&QueryMode=Internet&Query=" selected>Wired News</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&Filter=docs_filter.hts&ResultTemplate=webmonkey.hts&Collection=webmonkey&QueryMode=Internet&Query=">Webmonkey</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?collection=webmonkey_guides&Action=FilterSearch&filter=docs_filter.hts&ResultTemplate=webmonkey_guides.hts&QueryMode=Internet&Query=">Webmonkey Guides</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?collection=hotwired&Action=FilterSearch&filter=docs_filter.hts&ResultTemplate=hotwired_archive.hts&QueryMode=Internet&Query=">HotWired Archives</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&Filter=docs_filter.hts&ResultTemplate=magazine.hts&Collection=magazine&QueryMode=Internet&Query=">Wired Magazine</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&Filter=docs_filter.hts&ResultTemplate=animation.hts&Collection=animation&QueryMode=Internet&Query=">Animation Express</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?collection=suck&Action=FilterSearch&filter=docs_filter.hts&ResultTemplate=suck.hts&QueryMode=Internet&Query=">Suck.com</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?collection=uber_hotwired&Action=FilterSearch&filter=docs_filter.hts&ResultTemplate=uber_hotwired.hts&QueryMode=Internet&Query=">All of HotWired</option>
+ <option value="http://www.hotbot.com/?SM=MC&DV=0&LG=any&RD=RG&DC=10&DE=2&_v=2&OPs=MDRTP&MT=">The Web -> HotBot</option>
+</select>
+
+
+
+ </td>
+ <td>
+ <input type="SUBMIT" name="SUBMIT" value="SEARCH">
+ </td>
+ </tr>
+ </form>
+ </TABLE>
+ </td>
+ </tr>
+<!--
+<TR>
+<td></td>
+<TD valign="TOP" align="LEFT" colspan="3" bgcolor="#F0F0F0"><img src="http://static.wired.com/news/images/spacer.gif" height=1 width=15 alt=""><br>
+<i><font face="Verdana, Arial, Geneva, sans-serif" size="2">Sponsored by<a href="#">Sun Microsystems.</a> We're the dot in .com</font></i><i></i></TD>
+</TR>
+-->
+</table>
+<!-- end WIRED NEWS header -->
+
+<!-- begin upper left side Navigation -->
+
+<table border="0" cellpadding="3" cellspacing="0" align="LEFT" bgcolor="#FFFFFF">
+ <tr>
+ <td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF">
+ <img src="http://static.wired.com/news/images/spacer.gif" width=147 height=1 border=0><br><b>SECTIONS</b></font></td>
+ </tr>
+
+<tr><td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/business/0,1367,,00.html">Business</a></font></td></tr><tr><td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/culture/0,1284,,00.html">Culture</a></font></td></tr><tr><td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/technology/0,1282,,00.html">Technology</a></font></td></tr><tr><td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/politics/0,1283,,00.html">Politics</a></font></td></tr><tr>
+<td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF">
+<b>WIRE SERVICE NEWS</b></font></td>
+</tr>
+
+<tr>
+<td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/news/reuters/">Top Headlines</a></font></td>
+</tr>
+
+<tr>
+<td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/news/reuters/sports/">Sports</a></font></td>
+</tr>
+
+<tr>
+<td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/news/reuters/business/">Finance</a></font></td>
+</tr>
+<!-- End upper left nav --><!-- Begin lower Left Nav -->
+ <tr>
+ <td bgcolor="#FF0000"><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF">
+ <b><font size="1">FREE DELIVERY</font></b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#99FF99">
+<table cellspacing="0" cellpadding="0" border=0 >
+ <tr><td bgcolor="#99FF99">
+ <form action="http://r.hotwired.com/r/hw_wm_r_nav_nwsltr/http://perl.hotwired.com/massmail/cgiParser.cgi" method="get" target="_top">
+
+ <input type="hidden" name="success_page" value="http://www.hotwired.com/email/signup/wirednews-ascii.html">
+
+<input type="hidden" name="failure_page" value="http://www.hotwired.com/email/signup/wirednews-ascii.html">
+
+<input type="hidden" name="LIST" value="wn_ascii">
+<input type="hidden" name="SOURCE" value="other">
+ <input type="hidden" name="ACTION" value="subscribe">
+
+<input type="TEXT" name="from" size="10" value="enter email">&nbsp;
+</td>
+ <td valign="top" bgcolor="#99FF99">
+ <input type="SUBMIT" name="SUBMIT" value="GO">
+
+ </td>
+ </tr> </form>
+</table></td>
+ </tr>
+ <tr>
+ <td bgcolor="#FF0000"><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF">
+ <b><font size="1">STOCKS</font></b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#99FF99"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Get Quote:</font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#99FF99" marginwidth=0 marginheight=0><form method=get action="http://r.wired.com/r/10020/http://stocks.wired.com/stocks_quotes.asp"><input type="TEXT" name="Symbol" size="12">&nbsp;<input type="SUBMIT" name="submit" value="GO"></form></td>
+ </tr>
+<!-- BEGIN BUTTON ADS -->
+
+ <tr><td bgcolor="#CCFFCC">
+<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">Financial Services</font><br>
+<center>
+<img src="http://static.wired.com/news/images/spacer.gif" height=3 width=5 alt=""><BR><img src="http://static.wired.com/news/images/button_ads_news10.gif" width="143" height="56" border="0" ALT="" USEMAP="#buttons" hspace=0 vspace=0>
+</center>
+
+<MAP NAME="buttons">
+ <AREA SHAPE="RECT" ALT="Datek" COORDS="0,0,69,24" HREF="http://r.wired.com/r/1649/http://ads16.focalink.com/SmartBanner/page/1266.631">
+ <AREA SHAPE="RECT" ALT="Wired Index Fund" COORDS="73,0,142,24" HREF="http://r.wired.com/r/227/http://www.gffunds.com/wired">
+ <AREA SHAPE="RECT" ALT="internet.com Index Fund" COORDS="73,31,142,55" HREF="http://r.wired.com/r/298/http://www.gffunds.com/isdex/">
+ <AREA SHAPE="RECT" ALT="GetSmart's MortgageFinder" COORDS="0,31,69,55" HREF="http://r.wired.com/r/294/http://www.getsmartinc.com/mortgage/HomeBanner?BANNERNAME=www.getsmartinc.com/mwired001m6075x25"></MAP>
+ </td>
+ </tr> <!-- END BUTTON ADS -->
+
+ <tr>
+ <td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://redirect.wired.com/redir/51/http://stocks.wired.com/">Today's Summary</a></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://r.wired.com/r/hb_fin_r_wn_top/http://stocks.wired.com/stocks_indexes_detail.asp?Symbol=$WIRED">Wired Index</a> | <a href="http://redirect.wired.com/redir/52/http://stocks.wired.com/stocks_indexes.asp ">All Indexes</a></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://redirect.wired.com/redir/53/http://stocks.wired.com/stocks_portfolios.asp">Portfolios</a></font></td>
+ </tr>
+
+<!-- BEGIN B&N spot -->
+
+<tr>
+ <td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>FIND A BOOK</b></font></td>
+</tr>
+<tr><td bgcolor="#CCFFCC">
+<table cellspacing="0" cellpadding="0" border=0 width=145>
+ <tr><td bgcolor="#CCFFCC">
+ <form action="http://r.wired.com/r/wn_nav_c_bn/http://barnesandnoble.bfast.com/booklink/click">
+<input type="hidden" name="sourceid" value="383471">
+<input type=hidden name="categoryid" value="categorydropdown">
+ <font size="2">
+ <select name="Subjects" size=4>
+<option value="301">Business Top 20
+<option value="500">Computers
+<option value="503">Computer Games
+<option value="1604">Current Affairs
+<option value="511">Cyberculture
+<option value="510">Internet/Web
+<option value="303">Investing
+<option value="1606">Law
+<option value="513">Multimedia
+
+<option value="1605">Newsmakers
+<option value="1607">Politics/Govt.
+
+ <option value="315"> Web Business
+ <option value="2800"> Bargain Books
+
+<option value="4">Other
+
+
+
+
+
+ </select></font></td></tr>
+ <tr align=left valign=top>
+ <td valign="top" bgcolor="#CCFFCC"> <input type="submit" value="GO">
+
+<IMG SRC="http://barnesandnoble.bfast.com/booklink/serve?sourceid=383471&is_search=Y" border=0 align=top>
+<!--
+<IMG SRC="http://www.wired.com/partner/bn/trackingimg/ot_wn_nav_c_bn.gif" border=0 width=1 height=1 align=top>
+-->
+</td>
+
+ </tr>
+ <tr align=left valign=top>
+
+ <td align=left valign=top colspan="2" rowspan="1" bgcolor="#CCFFCC">
+<p>
+ <font size="1" face="Verdana, Arial, Helvetica, " color="#000000">Powered by <a href="http://r.wired.com/r/wn_nav_c_bn/http://barnesandnoble.bfast.com/booklink/click?sourceid=383471">barnesandnoble.com</a>
+ </font>
+<br clear=all>
+
+
+</td>
+ </tr> </form>
+ </table>
+
+</td></tr>
+ <!-- END B&N spot -->
+
+<!-- BEGIN MAGAZINE SPOT -->
+
+ <tr>
+ <td bgcolor="#000000"><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>WIRED
+ MAGAZINE </b></font></td>
+ </tr>
+<tr>
+<td bgcolor="#FFFF99" align="CENTER">
+<font face="verdana, arial, helvetica, sans-serif" size="1">
+<b>
+<br>
+
+<a href="http://www.wired.com/wired/"><img src="http://static.wired.com/news/images/wiredcover.gif" width="91" height="109" border="0" alt="Wired Magazine"></a><br></b>
+
+Issue 7.11
+</font>
+</td>
+</tr>
+
+<tr>
+<td bgcolor="#FFFF99" align="center">
+<font face="verdana, arial, helvetica, sans-serif" size="1">
+
+<a href="http://www.wired.com/wired/subscribe/special/79WN">Subscribe to Wired.<br>Special offer!</a>
+
+
+</font>
+</td>
+</tr>
+<!-- END MAGAZINE SPOT -->
+
+ <tr>
+ <td bgcolor="#000000">
+ <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>HOTWIRED</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#FFFF99"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">
+<a href="http://www.hotwired.com/">Frontdoor</a><br>
+<a href="http://www.hotwired.com/webmonkey/">Webmonkey</a><br>
+<a href="http://www.hotwired.com/webmonkey/guides/index.html">Webmonkey Guides</a><br>
+<a href="http://www.hotwired.com/rgb/">RGB Gallery</a><br>
+<a href="http://www.hotwired.com/animation/">Animation Express</a><br>
+<a href="http://go.suck.com/su_wnfd">Suck.com</a><br>
+</font></td>
+ </tr>
+
+ <tr>
+ <td bgcolor="#000000">
+ <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>HOTBOT</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#FFFF99"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">
+<a href="http://redirect.wired.com/redir/54/http://www.hotbot.com/">Search</a><br>
+<a href="http://shop.hotbot.com/">Shopping</a><br>
+</font></td>
+ </tr>
+
+ <tr><td>
+ <br>
+ <font face="Verdana, Arial, Helvetica, sans-serif" size="1">
+ <font face="Verdana, Arial, Helvetica, sans-serif" size="1">
+ Wired News <a href="/news/who/0,1362,,00.html">staff</a><br><br>
+
+ <!-- Wired News is <a href="http://www.wired.com/news/jobs.html">hiring</a><br><br> -->
+
+ <b><a href="/news/feedback/0,1364,,00.html">Contact us</a></b></font>
+
+
+ <br><br>
+
+ <font face="Verdana, Arial, Helvetica, sans-serif" size="1">Wired News delivered<br>by <a href="/news/palmpilot/0,1365,,00.html">PalmPilot</a>,<br><a href="http://www.hotwired.com/email/signup/wn_outlook.html">Outlook Express</a>,<br><a href="http://redirect.wired.com/redir/55/http://form.netscape.com/ibd/html/ibd_frameset.html">In-Box Direct</a>,<br>
+or <a href="/news/pointcast/0,1366,,00.html">PointCast</a></font><br>
+
+<!-- TRACKING -->
+<img src="http://www.wired.com/special/modx/news.gif" height=1 width=1 alt="">
+</td>
+ </tr>
+
+</table>
+
+<!-- end lower left side Navigation -->
+<!-- CONTENT TABLE -->
+
+<TABLE border="0" width="447" cellspacing="0" cellpadding="0" bordercolor="#66FF00">
+ <TR>
+ <TD valign="TOP" align="LEFT" rowspan="2">
+ <img src="http://static.wired.com/news/images/spacer.gif" height=1 width=15 alt=""><BR>
+ </TD>
+ <TD colspan="3" valign="TOP" align="LEFT"><img src="http://static.wired.com/news/images/spacer.gif" height=7 width=432 alt=""><BR>
+
+
+<!-- SQL query for Package here -->
+
+<font face="Verdana, Arial, Geneva, sans-serif" size=2><b><i>Nomad's Land</i></b></font><br><img src="http://static.wired.com/news/images/pix155.gif" height=10 width=155 alt=""><br><!-- IBD_SUBJECT: Homeless, but ID'd, in Seattle --><font face="Arial, Helvetica, sans-serif" size=5><b><a href="/news/politics/0,1283,31911,00.html">Homeless, but ID'd, in Seattle</a></b></font><br><font size=1 face="Verdana, Arial, Geneva, sans-serif" color=#FF0000>8:15 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>The city council approves a plan to track the homeless by a numbering system, saying it'll improve services. The implications worry privacy advocates, naturally. By Craig Bicknell.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/politics/0,1283,,00.html">in&nbsp;Politics</a></i></font><br><table bgcolor="#F0F0F0" cellpadding="0" cellspacing="0" border="0" width="147" align="RIGHT">
+ <!-- Commentary Frag Begin -->
+ <TR>
+ <TD bgcolor="#000000">&nbsp;</TD>
+ <TD bgcolor="#000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>HITS &amp; MISC.</b></font></TD>
+ </TR>
+ <tr>
+ <TD>&nbsp;</TD>
+ <td><img src="http://static.wired.com/news/images/spacer.gif" height=5 width=5 alt=""><br>
+
+ <font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/commentarySection/0,1292,31664,00.html">Calendar of E-Vents</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">Ongoing goings-on. </font><br><br><font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/commentarySection/0,1292,31926,00.html">Rants & Raves</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">Readers on Apple's G4 ... AOL's passwords ... MS vs. Linux.</font><br><br> </td>
+ </tr>
+<!-- Commentary Frag End -->
+<tr>
+<td align="left" bgcolor="#000000">&nbsp;</td>
+<td bgcolor="#000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>CURRENT HOO-HA</b></font></td>
+</tr>
+
+<tr>
+<td>&nbsp;</td>
+<td>
+<img src="http://static.wired.com/news/images/spacer.gif" height=5 width=5 alt="">
+<br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/mp3/0,1285,,00.html">MP3 Rocks the Web</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">Download the sound. <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_fd_mp3_r_mscm_txt/http://webfarm.mediaplex.com/click_thru_request/164-1361b-1052" style="text-decoration:none"><font color="#000000">Musicmaker</font></a></i></font><br><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/wireless/0,1382,,00.html">The Wireless World</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">Networking gets unplugged. <br><i>Sponsored by <a href="http://www.ericsson.se/get/internet/default.shtml" style="text-decoration:none"><font color="#000000">Ericsson</font></a></i></font><br><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/digiwood/0,1412,,00.html">Digital Hollywood</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">The buzz of tech.</font><br><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/ipo/0,1350,,00.html">IPO Outlook</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">Deals in the pipeline. <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_ipo_r_sun_txt/http://sun.com/ads/smi/brand/hotwired.html" style="text-decoration:none"><font color="#000000">Sun</font></a></i></font><br><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/ebiz/0,1272,,00.html">E-Biz</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">Business unusual. <br><i>Sponsored by <a href="http://r.wired.com/r/wn_fd_r_ebiz_ibm_txt/http://www.ibm.com" style="text-decoration:none"><font color="#000000">IBM</font></a></i></font><br><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/medtech/0,1286,,00.html">Med-Tech Center</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">From the bleeding edge.<br><i>Sponsored by WebMD</i></font><br><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/linux/0,1411,,00.html">The Linux Effect</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">Not just for geeks.</font><br><br> <img src="http://static.wired.com/news/images/spacer.gif" height=7 width=5 alt=""><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/exec/0,1370,,00.html">Executive Summary</a></b></font><br><font size=1 face="Arial, Helvetica, sans-serif" color="#000000">CEOs, COOs, CIOs unite. <br><i>Sponsored by <a href="http://r.wired.com/r/wn_exec_r_vign/http://www.vignette.com/" style="text-decoration:none"><font color="#000000">Vignette</a></i></font><br><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/school/0,1383,,00.html">Making the Grade</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">Reading, writing, and ROM. <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_sch_r_nav_uop/http://ads25.focalink.com/SmartBanner/page?12630.53" style="text-decoration:none"><font color="#000000">U of Phoenix</font></a></i></font><br><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/infostructure/0,1377,,00.html">Infostructure</a></b></font><br><font size=1 face="Arial, Helvetica, sans-serif" color="#000000">An IS/IT resource <br><i>Sponsored by <a href="http://r.wired.com/r/wn_is_r_ssec/http://ad.doubleclick.net/clk;653163;3599571;s?http://www.sprintbiz.com/s
+ervlet/appservlet?from=/wired/sprint/&template=/security/security.html&SITE=
+wired.com&BANNER=Sprint" style="text-decoration:none"><font color="#000000">Sprint</a></i></font</font><br><br>
+
+<font size=2 face="Arial,Helvetica, sans-serif"><b><a href="/news/y2k/0,1360,,00.html">Y2K Watch</a></b></font><br><font size=2 face="Arial, Helvetica, sans-serif"><font size=1 face="Arial, Geneva, sans-serif" color="#000000">Tick... Tick... Tick...</font><br><br>
+
+<font face="Arial, Helvetica, sans-serif" size=2><b><i><a href="/news/special_reports/1,1293,,00.html">More Hoo-Ha</a></i></b></font><br>&nbsp;<br>
+
+</td>
+</tr>
+<!-- start of Gen News -->
+ <tr>
+ <td bgcolor="#000000">&nbsp;</td>
+ <td bgcolor="#000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>MEANWHILE...</b></font></td>
+ </tr>
+
+ <tr>
+ <td>&nbsp;</td>
+ <td align="left" valign="top">
+ <img src="http://static.wired.com/news/images/spacer.gif" height=5 width=5 alt=""><br>
+
+
+<!-- 31942 -->
+<font size="2" face="Arial, Helvetica, sans-serif" color="#000000"><b>Führer Furor</b></font><br><font size="1" face="Arial, Geneva, sans-serif" color="#000000"><p>
+Contruction workers in Berlin opened an old wound in the German psyche this week when they accidentally stumbled across Adolf Hitler's bunker while excavating near the Brandenburg Gate. The bunker, just south of the Gate, was where Hitler and his closest associates barricaded themselves as the Red Army approached Berlin in the waning days of World War II. It is also where the Führer and his bride, Eva Braun, committed suicide rather than fall into the hands of the Russians. Although the bunker's location has never been a mystery, it has been sealed off since the end of the war to keep neo-Nazis from turning it into a shrine.
+<br><li>More from <a
+href="http://www.lycos.com/news/flash/hitlerbunker.html?v=wn1015&lpv=1">Lycos</a></font><br><br>
+ </td>
+ </tr>
+<!-- end of Gen News -->
+</table>
+
+
+<font size="1">&nbsp;<br></font>
+
+<br>
+
+<font face="Verdana, Arial, Geneva, sans-serif" size=2><b><i>Other Top Stories</i></b></font><br>
+<img src="http://static.wired.com/news/images/pix155.gif" height=10 width=155 alt=""><br>
+
+<!-- SQL query here -->
+<!-- IBD_SUBJECT:Wall Street Keeps Reeling --><font face="Arial, Helvetica, sans-serif" size=3><b><a href="/news/reuters/0,1349,31934,00.html">Wall Street Keeps Reeling</a></b></font><br><font color=#ff0000 face="Verdana, Arial, Geneva, sans-serif" size=1>10:15 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>The Dow and Nasdaq suffer sizeable losses during the first half of Friday trading. Why? Wholesale prices are the highest this decade, and Greenspan is concerned about stock prices.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/reuters/0,1349,,00.html">in&nbsp;Reuters</a></i></font><br><br><!-- IBD_SUBJECT:The Market's Madness --><font face="Arial, Helvetica, sans-serif" size=3><b><a href="/news/reuters/0,1349,31935,00.html">The Market's Madness</a></b></font><br><font color=#ff0000 face="Verdana, Arial, Geneva, sans-serif" size=1>9:10 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>The bulls and the bears are in the midst of a Battle Royale, and all this turbulence is not a healthy thing. So say the experts.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/reuters/0,1349,,00.html">in&nbsp;Reuters</a></i></font><br><br><!-- IBD_SUBJECT:'Want a Loan? What's Your Race?' --><font face="Arial, Helvetica, sans-serif" size=3><b><a href="/news/politics/0,1283,31533,00.html">'Want a Loan? What's Your Race?'</a></b></font><br><font color=#ff0000 face="Verdana, Arial, Geneva, sans-serif" size=1>3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>The Federal Reserve is in the middle of changing banking regulations to let banks collect data on the race, sex, religion, and national origin of their customers. By Declan McCullagh. </font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/politics/0,1283,,00.html">in&nbsp;Politics</a></i></font><br><br><!-- IBD_SUBJECT:Music Regs: A Bagful of Noise --><font face="Arial, Helvetica, sans-serif" size=3><b><a href="/news/business/0,1367,31832,00.html">Music Regs: A Bagful of Noise</a></b></font><br><font color=#ff0000 face="Verdana, Arial, Geneva, sans-serif" size=1>3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>The struggle to come up with a digital music standard that would minimize download piracy is pushing right up against the holiday gift-giving season. By Jennifer Sullivan.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><!-- IBD_SUBJECT:Can't Beat 'Em? Green 'Em --><font face="Arial, Helvetica, sans-serif" size=3><b><a href="/news/technology/0,1282,31927,00.html">Can't Beat 'Em? Green 'Em</a></b></font><br><font color=#ff0000 face="Verdana, Arial, Geneva, sans-serif" size=1>3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>High-tech companies are notoriously environmentally unfriendly, and a growing number of "Greenies" are trying to change things from the inside ... with varying results. By Chris Gaither.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- IBD_SUBJECT:Y2K Cloud Over MS Office --><font face="Arial, Helvetica, sans-serif" size=3><b><a href="/news/business/0,1367,31932,00.html">Y2K Cloud Over MS Office</a></b></font><br><font color=#ff0000 face="Verdana, Arial, Geneva, sans-serif" size=1>3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>Windows NT sales remain strong, but corporate clients are wary of upgrading to MS Office 2000. Analysts say that means strong, but not stunning, Microsoft earnings. </font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><font color=#FF0000 face="Verdana, Arial, Geneva, sans-serif" size=1>Med-Tech</font><br><!-- IBD_SUBJECT:Biochips for Custom Chemo --><font face="Arial, Helvetica, sans-serif" size=3><b><a href="/news/technology/0,1282,31914,00.html">Biochips for Custom Chemo</a></b></font><br><font color=#ff0000 face="Verdana, Arial, Geneva, sans-serif" size=1>3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>Different cancer patients need different medicine, but doctors can rarely determine the best match. New biochip technology promises chemotherapy tailored to a tumor's genetic make-up. By Kristen Philipkoski.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- IBD_SUBJECT:High Stakes in Priceline Suit --><font face="Arial, Helvetica, sans-serif" size=3><b><a href="/news/business/0,1367,31916,00.html">High Stakes in Priceline Suit</a></b></font><br><font color=#ff0000 face="Verdana, Arial, Geneva, sans-serif" size=1>3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>It's not just another round of Redmond-bashing. A Priceline.com lawsuit against Microsoft's Expedia.com may have a big impact on how Net companies protect their business models. By Joanna Glasner.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><!-- IBD_SUBJECT:Biodiversity Merges Online --><font face="Arial, Helvetica, sans-serif" size=3><b><a href="/news/technology/0,1282,31918,00.html">Biodiversity Merges Online</a></b></font><br><font color=#ff0000 face="Verdana, Arial, Geneva, sans-serif" size=1>3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size=2>The far-flung databases on global biodiversity get together to form one monster database. Soon the red-eyed tree frog will be eyeing those Swedish lingonberries. From the Environment News Service.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size=1><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- SQL above -->
+
+
+
+<!------TRADES--------->
+<br>
+<font face= "Verdana, Arial, Geneva, sans-serif" size=2><b><i>Elsewhere Today</i></b></font><br>
+<img src="http://static.wired.com/news/images/pix155.gif" height=10 width=155 alt=""><br>
+
+<!-- SQL query here -->
+<font face="helvetica, arial" size=3><b><a href="http://www.thestandard.com/articles/display/0,1449,6975,00.html?home.tf">FCC: Hands-Off on Broadband</a></b></font><br><font face="geneva, arial" size=2><cite>The Industry Standard</cite></font><br><br><font face="helvetica, arial" size=3><b><a href="http://news.lycos.com/stories/TopNews/19991014RTNEWS-ARMS-TREATY.asp">White House Lashes Out on Treaty</a></b></font><br><font face="geneva, arial" size=2>Lycos</font><br><br><font face="helvetica, arial" size=3><b><a href="http://www.pathfinder.com/time/magazine/articles/0,3266,32207,00.html">Steve Jobs at 44</a></b></font><br><font face="geneva, arial" size=2><cite>Time</cite></font><br><br><font face="helvetica, arial" size=3><b><a href="http://www.zdnet.com/zdnn/stories/news/0,4586,2353608,00.html">Computers May Run on Gas</a></b></font><br><font face="geneva, arial" size=2>ZDNN</font><br><br><font face="helvetica, arial" size=3><b><a href="http://www.nytimes.com/library/tech/99/10/biztech/articles/14free.html">Much Is Free in the Wired World</a></b></font><br><font face="geneva, arial" size=2><cite>The New York Times</cite> (Registration Required)</font><br><br><font face="helvetica, arial" size=3><b><a href="http://www.usatoday.com/life/cyber/nb/nb4.htm">Melissa: I'm Baaaack</a></b></font><br><font face="geneva, arial" size=2><cite>USA Today</cite></font><br><br><font face="helvetica, arial" size=3><b><a href="http://www.msnbc.com/news/322926.asp">Domain Owners Surrender Privacy</a></b></font><br><font face="geneva, arial" size=2>MSNBC</font><br><br><font face="helvetica, arial" size=3><b><a href="http://www.washingtonpost.com/wp-srv/business/longterm/tech/techthursday/download/download.htm">Dividing to Conquer in VC Game</a></b></font><br><font face="geneva, arial" size=2><cite>The Washington Post</cite></font><br><br><font face="helvetica, arial" size=3><b><a href="http://www.salon.com/tech/books/1999/10/14/redhat_book/index.html">The Red Hat Diaries</a></b></font><br><font face="geneva, arial" size=2>Salon</font><br><br><font face="helvetica, arial" size=3><b><a href="http://news.bbc.co.uk/hi/english/sci/tech/newsid_473000/473856.stm">Screensaver to Predict Climate</a></b></font><br><font face="geneva, arial" size=2>BBC News</font><br><br><!-- SQL above -->
+
+
+
+<!-- - - - - - - - - - - - - -->
+
+ </TD>
+ </TR>
+
+ <TR>
+ <TD valign="TOP" align="LEFT">
+
+ <img src="http://static.wired.com/news/images/spacer.gif" height=1 width=280 alt=""><BR>
+
+ <!-- FOOTER -->
+
+<br><img src="http://static.wired.com/news/images/pix155.gif" height=10 width=155 border=0 usemap="#navstrip.map" alt="">
+<br>
+
+<img src="http://static.wired.com/news/images/navstrip_off.gif" height=17 width=126 usemap="#navstrip.map" border=0 alt=""><br><br>
+
+<p><font face="Verdana, Arial, Geneva, sans-serif" size=1>
+<a href="http://www.wired.com/news/feedback.html">Send us feedback</a>
+&nbsp;|&nbsp;
+<a href="http://www.hotwired.com/jobs/">Work at Wired Digital</a>
+&nbsp;|&nbsp;
+<a href="http://home.wired.com/advertising/">Advertise with us</a>
+<br>
+<a href="http://home.wired.com/">About Wired Digital</a>
+&nbsp;|&nbsp;
+<a href="http://www.wired.com/home/digital/privacy/">Our Privacy Policy</a></font>
+
+
+<p><font face="Verdana, Arial, Geneva" size=1><a href="http://www.wired.com/home/copyright.html">Copyright</a> &copy; 1994-99 Wired Digital Inc. All rights reserved.</font>
+
+<br>
+<!-- TRACKING -->
+<img src="http://www.wired.com/special/modx/news.gif" height=1 width=1 alt="">
+
+<MAP NAME="navstrip.map">
+<AREA SHAPE=rect COORDS="0,0,14,16" HREF="/news">
+<AREA SHAPE=rect COORDS="15,0 31,16" HREF="/news/business/">
+<AREA SHAPE=rect COORDS="32,0,48,16" HREF="/news/culture/">
+<AREA SHAPE=rect COORDS="49,0,65,16" HREF="/news/technology/">
+<AREA SHAPE=rect COORDS="66,0,83,16" HREF="/news/politics/">
+</MAP>
+ </TD>
+ <TD valign="TOP" align="LEFT">
+ <img src="http://static.wired.com/news/images/spacer.gif" height=1 width=5 alt="">
+ </TD>
+ <TD valign="TOP" align="LEFT">
+ </TD>
+ </TR>
+</TABLE>
+
+
+<br>
+</body>
+</html>
+
diff --git a/test/SVG/4rects.xml b/test/SVG/4rects.xml
new file mode 100755
index 0000000..b8d1a65
--- /dev/null
+++ b/test/SVG/4rects.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Four separate rectangles
+ </desc>
+ <rect width="20" height="60"/>
+ <rect width="30" height="70"/>
+ <rect width="40" height="80"/>
+ <rect width="50" height="90"/>
+</svg>
diff --git a/test/SVG/a-valid.xml b/test/SVG/a-valid.xml
new file mode 100755
index 0000000..233b78c
--- /dev/null
+++ b/test/SVG/a-valid.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This valid svg document draws a triangle which is a hyperlink
+ </desc>
+ <a href="http://www.w3.org">
+ <p d="M 0 0 L 200 0 L 100 200 Z"/>
+ </a>
+</svg>
diff --git a/test/SVG/a-wf.xml b/test/SVG/a-wf.xml
new file mode 100755
index 0000000..756e9c6
--- /dev/null
+++ b/test/SVG/a-wf.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns = 'http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+ <desc>This well formed svg document draws a triangle which is a hyperlink
+ </desc>
+ <a xml:link="simple" show="replace" actuate="user" href="http://www.w3.org">
+ <p d="M 0 0 L 200 0 L 100 200 Z"/>
+ </a>
+</svg>
diff --git a/test/SVG/bike.xml b/test/SVG/bike.xml
new file mode 100755
index 0000000..796b996
--- /dev/null
+++ b/test/SVG/bike.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<!--DOCTYPE svg SYSTEM "svg-19990412.dtd"-->
+<svg width="4in" height="3in">
+ <title>Kona Lavadome mountain bike
+ </title>
+ <desc>This picture shows a mountain bike, a human-propelled,
+ multi-terrain vehicle. While it can be succesfully used on moorland,
+ forest, roads, and large hills it is not actually suitable for going
+ up mountains.
+ </desc>
+ <g id="bike">
+ <defs>
+ <symbol id="spoke"><desc>14/12 gauge double butted spoke</desc>
+ <!-- the path data goes here --></symbol>
+
+ <symbol id="hub"><desc>black anodised low torsion hub</desc>
+ <!--the path data goes here --></symbol>
+
+ <symbol id="rim"><desc>twin wall, eyeletted rim</desc>
+ <!-- the path data goes here--></symbol>
+
+ <symbol id="cogs"><desc>8 speed, wide ratio gearing</desc>
+ <!--the path data goes here --></symbol>
+
+ <symbol id="lacing"><desc>double cross lacing of 32 spokes</desc>
+ </symbol>
+ </defs>
+ <!-- the overall bike drawing goes here -->
+ <g id="frontwheel">
+ <title>Front wheel</title>
+ <desc>The front wheel provides grip, steering and some shock absorption</desc>
+ <use href="id(lacing)" style="rotation: 20deg; fillcolor: black"/>
+ </g>
+ <g id="backwheel">
+ </g>
+ <g id="frame"><!-- and so on -->
+ </g>
+ </g>
+</svg>
diff --git a/test/SVG/circle.xml b/test/SVG/circle.xml
new file mode 100755
index 0000000..44e70e7
--- /dev/null
+++ b/test/SVG/circle.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This is a blue circle with a red outline
+ </desc>
+ <g>
+ <circle style="fill: blue; stroke: red"
+ cx="200" cy="200" r="100"/>
+ </g>
+</svg>
diff --git a/test/SVG/defs.xml b/test/SVG/defs.xml
new file mode 100755
index 0000000..0bf5f27
--- /dev/null
+++ b/test/SVG/defs.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <rect id="TemplateObject01" width="100" height="37.34"/>
+ <lineargradient id="Gradient01">
+ <gradientstop offset="30%" color="#39F"/>
+ </lineargradient>
+ </defs>
+ <desc>Defining things for later use
+ </desc>
+ <!-- SVG elements in here would reference/use
+ the elements defined in the <defs> -->
+</svg>
diff --git a/test/SVG/desc.xml b/test/SVG/desc.xml
new file mode 100755
index 0000000..87838db
--- /dev/null
+++ b/test/SVG/desc.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg SYSTEM "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+<g>
+ <title>
+ Company sales by region
+ </title>
+ <desc>
+ This is a bar chart which shows
+ company sales by region.
+ </desc>
+ <!-- Bar chart defined as vector data -->
+</g>
+</svg>
diff --git a/test/SVG/ellipse.xml b/test/SVG/ellipse.xml
new file mode 100755
index 0000000..2097ef5
--- /dev/null
+++ b/test/SVG/ellipse.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This is an ellipse, axis aligned and centered on the origin
+ </desc>
+ <g>
+ <ellipse major="85" minor="45"/>
+ </g>
+</svg>
diff --git a/test/SVG/flower2.xml b/test/SVG/flower2.xml
new file mode 100755
index 0000000..10064c9
--- /dev/null
+++ b/test/SVG/flower2.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="800px" height="800px">
+ <desc>This sample SVG file draws a flower</desc>
+ <g style="transform: matrix(1 0 0 -1 -25.88 798.60);
+ stroke: #000; stroke-width: 1" >
+ <path style="fill: #1A5466" d = "m 242.33 684.19
+ C 346.44 757.48 271.45 647.38 213.17 641.37
+ C 271.45 647.38 383.43 575.21 256.71 613.30
+ C 383.43 575.21 251.04 565.90 205.23 609.68
+ C 251.04 565.90 265.13 432.88 210.71 557.95
+ C 265.13 432.88 175.04 531.37 175.67 596.26
+ C 175.04 531.37 80.63 437.67 138.96 559.82
+ C 80.63 437.67 100.67 569.80 146.75 611.20
+ C 100.67 569.80 -31.14 585.98 95.49 617.49
+ C -31.14 585.98 83.94 652.25 140.24 643.26
+ C 83.94 652.25 13.98 766.12 113.04 687.55
+ C 13.98 766.12 137.45 716.63 161.05 668.30
+ C 137.45 716.63 182.02 842.45 178.39 717.23
+ C 182.02 842.45 220.90 714.46 193.51 667.46
+ C 220.90 714.46 346.44 757.48 242.33 684.19 z" />
+ <path style="fill: #34AACD" d = "M 235.33 691.19
+ C 339.44 764.48 264.45 654.38 206.17 648.37
+ C 264.45 654.38 376.43 582.21 249.71 620.30
+ C 376.43 582.21 244.04 572.90 198.23 616.68
+ C 244.04 572.90 258.13 439.88 203.71 564.95
+ C 258.13 439.88 168.04 538.37 168.67 603.26
+ C 168.04 538.37 73.63 444.67 131.96 566.82
+ C 73.63 444.67 93.67 576.80 139.75 618.20
+ C 93.67 576.80 -38.14 592.98 88.49 624.49
+ C -38.14 592.98 76.94 659.25 133.24 650.26
+ C 76.94 659.25 6.98 773.12 106.04 694.55
+ C 6.98 773.12 130.45 723.63 154.05 675.30
+ C 130.45 723.63 175.02 849.45 171.39 724.23
+ C 175.02 849.45 213.90 721.46 186.51 674.46
+ C 213.90 721.46 339.44 764.48 235.33 691.19 z" />
+ <path style="fill: #F881BF" d = "M 199.44 634.43
+ C 199.44 622.16 189.19 612.21 176.54 612.21
+ C 163.89 612.21 153.63 622.16 153.63 634.43
+ C 153.63 646.71 163.89 656.66 176.54 656.66
+ C 189.19 656.66 199.44 646.71 199.44 634.43 z"/>
+ </g>
+</svg>
diff --git a/test/SVG/gradient.xml b/test/SVG/gradient.xml
new file mode 100755
index 0000000..328d5e8
--- /dev/null
+++ b/test/SVG/gradient.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN" "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Gradient example
+ </desc>
+ <g>
+ <defs>
+ <lineargradient id="MyGradient">
+ <!-- Define linear gradient here -->
+ <gradientstop offset="0%" color="#F60"/>
+ <gradientstop offset="70%" color="#FF6"/>
+ </lineargradient>
+ </defs>
+ <rect style="fill: url(#MyGradient)" width="20" height="15.8"/>
+ </g>
+</svg>
diff --git a/test/SVG/group01.xml b/test/SVG/group01.xml
new file mode 100755
index 0000000..906a220
--- /dev/null
+++ b/test/SVG/group01.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Two groups, each of two rectangles
+ </desc>
+ <g style="fillcolor:red">
+ <rect x="100" y="100" width="100" height="100" />
+ <rect x="300" y="100" width="100" height="100" />
+ </g>
+ <g style="fillcolor:blue">
+ <rect x="100" y="300" width="100" height="100" />
+ <rect x="300" y="300" width="100" height="100" />
+ </g>
+</svg>
diff --git a/test/SVG/group02.xml b/test/SVG/group02.xml
new file mode 100755
index 0000000..082474a
--- /dev/null
+++ b/test/SVG/group02.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Two named groups
+ </desc>
+ <g id="OBJECT1">
+ <rect x="100" y="100" width="100" height="100" />
+ </g>
+ <g id="OBJECT2">
+ <circle cx="150" cy="300" r="25" />
+ </g>
+</svg>
diff --git a/test/SVG/group03.xml b/test/SVG/group03.xml
new file mode 100755
index 0000000..ad25e93
--- /dev/null
+++ b/test/SVG/group03.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Groups can nest
+ </desc>
+ <g>
+ <g>
+ <g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/test/SVG/image-valid.xml b/test/SVG/image-valid.xml
new file mode 100755
index 0000000..320e8d2
--- /dev/null
+++ b/test/SVG/image-valid.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This graphic links to an external image
+ </desc>
+ <image x="200" y="200" style="width: 100px; height: 100px"
+ href="myimage.png">
+ <title>My image</title>
+ </image>
+</svg>
diff --git a/test/SVG/image-wf.xml b/test/SVG/image-wf.xml
new file mode 100755
index 0000000..6d13b33
--- /dev/null
+++ b/test/SVG/image-wf.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns='http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+ <desc>This links to an external image
+ </desc>
+ <image x="200" y="200" style="width: 100px; height: 100px"
+ xml:link = 'simple' show = 'embed' actuate = 'auto'
+ href="myimage.png">
+ <title>My image</title>
+ </image>
+</svg>
diff --git a/test/SVG/lin-gradient.xml b/test/SVG/lin-gradient.xml
new file mode 100755
index 0000000..8ace2b4
--- /dev/null
+++ b/test/SVG/lin-gradient.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Linear gradient example
+ </desc>
+ <g>
+ <defs>
+ <lineargradient id="MyGradient">
+ <gradientstop offset="0%" color="#F60"/>
+ <gradientstop offset="70%" color="#FF6"/>
+ </lineargradient>
+ </defs>
+ <rect style="fill: url(#MyGradient)" width="20" height="15.8"/>
+ </g>
+</svg>
diff --git a/test/SVG/marker.xml b/test/SVG/marker.xml
new file mode 100755
index 0000000..62716a2
--- /dev/null
+++ b/test/SVG/marker.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <symbol id="Triangle" min-x="0" min-y="0" max-x="100"
+ max-y="100" ref-x="0" ref-y="50">
+ <path d="M 0 0 L 0 100 L 100 50 z"/>
+ </symbol>
+ </defs>
+ <desc>An double-headed arrow example using markers
+ </desc>
+ <path d="M0 0">
+ <!-- Place an arrowhead rotated 180 degrees at the
+ beginning of the path -->
+ <marker href="#Triangle" width="200" height="200"
+ style="text-transform: rotate(180)"/>
+ <data d="M 2000 2000"/>
+
+ <!-- Turn off markers in the middle of the path -->
+ <marker href=""/>
+ <data d="L 4000 2000 L 4000 4000"/>
+
+ <!-- Place an arrowhead at the end of the path-->
+ <marker href="#Triangle" width="200" height="200"/>
+ <data d="L 6000 4000"/>
+ </path>
+</svg>
diff --git a/test/SVG/mask.xml b/test/SVG/mask.xml
new file mode 100755
index 0000000..f81aca1
--- /dev/null
+++ b/test/SVG/mask.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Example of using a mask
+ </desc>
+ <g>
+ <defs>
+ <image id="MyMask" href="transp.png"></image>
+ </defs>
+ <rect style="mask: url(#MyMask)" width="12.5" height="30" />
+ </g>
+</svg>
diff --git a/test/SVG/mathswitch.xml b/test/SVG/mathswitch.xml
new file mode 100755
index 0000000..4d28f33
--- /dev/null
+++ b/test/SVG/mathswitch.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns = 'http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+ <desc>This example uses the switch element to provide a
+ fallback graphical representation of an equation, if
+ MathML is not supported.
+ </desc>
+ <!-- The <switch> element will process the first child element
+ whose testing attributes evaluate to true.-->
+ <switch>
+
+ <!-- Process the MathML if the system-required attribute
+ evaluates to true (i.e., the user agent supports MathML
+ embedded within SVG). -->
+ <foreignobject
+ system-required="http://www.w3.org/TR/REC-MathML-19980407"
+ width="100" height="50">
+ <!-- MathML content goes here -->
+ </foreignobject>
+
+ <!-- Else, process the following alternate SVG.
+ Note that there are no testing attributes on the <g> element.
+ If no testing attributes are provided, it is as if there
+ were testing attributes and they evaluated to true.-->
+ <g>
+ <!-- Draw a red rectangle with a text string on top. -->
+ <rect style="fill: red"/>
+ <text>Formula goes here</text>
+ </g>
+
+ </switch>
+</svg>
diff --git a/test/SVG/parentns.xml b/test/SVG/parentns.xml
new file mode 100755
index 0000000..ba410e1
--- /dev/null
+++ b/test/SVG/parentns.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<ABC xmlns="http://parent.name.space"
+ xmlns:svg="http://www.w3.org/Graphics/SVG/1.0">
+ <!-- document in the parent namespace -->
+ <svg:svg width="40%" height="40%">
+ <svg:rectangle width="43.6" height="31.5"/>
+ <!-- svg graphic continues -->
+ </svg:svg>
+ <!-- document in parent namespace continues -->
+</ABC>
+
+
diff --git a/test/SVG/path01.xml b/test/SVG/path01.xml
new file mode 100755
index 0000000..4590b6c
--- /dev/null
+++ b/test/SVG/path01.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns = 'http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+<path d="M 100 100 L 140 100 L 120 140 z"/>
+</svg>
diff --git a/test/SVG/path02.xml b/test/SVG/path02.xml
new file mode 100755
index 0000000..a91aa61
--- /dev/null
+++ b/test/SVG/path02.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <path d="M 100 100">
+ <data d="L 140 100"/>
+ <data d="L 120 140"/>
+ <data d="z"/>
+ </path>
+</svg>
diff --git a/test/SVG/patternfill.xml b/test/SVG/patternfill.xml
new file mode 100755
index 0000000..292f4f7
--- /dev/null
+++ b/test/SVG/patternfill.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <symbol id="fourstar">
+ <!-- Define the pattern using standard graphics elements
+ such as paths, images, text and shapes -->
+ </symbol>
+ </defs>
+ <ellipse style="fill: url(#fourstar)" major="40" minor="27" />
+</svg>
diff --git a/test/SVG/polyline.xml b/test/SVG/polyline.xml
new file mode 100755
index 0000000..e6f7b62
--- /dev/null
+++ b/test/SVG/polyline.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>A sample polyline, and equivalent path
+ </desc>
+ <polyline verts="20,20 50,100 200,80 70,300"/>
+ <path d="M20,20 L50,100 L200,80 L70,300"/>
+</svg>
diff --git a/test/SVG/private.xml b/test/SVG/private.xml
new file mode 100755
index 0000000..3601365
--- /dev/null
+++ b/test/SVG/private.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns = 'http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+ <defs>
+ <private xmlns:myapp="http://mycompany/mapapp" >
+ <myapp:piechart title="Sales by Region">
+ <myapp:piece label="Northern Region" value="1.23"/>
+ <myapp:piece label="Eastern Region" value="2.53"/>
+ <myapp:piece label="Southern Region" value="3.89"/>
+ <myapp:piece label="Western Region" value="2.04"/>
+ <!-- Other private data goes here -->
+ </myapp:piechart>
+ </private>
+ </defs>
+ <desc>This chart includes private data in another namespace
+ </desc>
+ <!-- In here would be the actual graphics elements which
+ draw the pie chart -->
+</svg>
diff --git a/test/SVG/rad-gradient.xml b/test/SVG/rad-gradient.xml
new file mode 100755
index 0000000..9ad7683
--- /dev/null
+++ b/test/SVG/rad-gradient.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Radial gradient example with three gradient stops
+ </desc>
+ <g>
+ <defs>
+ <radialgradient id="MyGradient">
+ <gradientstop offset="0%" color="white"/>
+ <gradientstop offset="50%" color="red"/>
+ <gradientstop offset="100%" color="black"/>
+ </radialgradient>
+ </defs>
+ <circle style="fill: url(#MyGradient)" r="42"/>
+ </g>
+</svg>
diff --git a/test/SVG/rectangle.xml b/test/SVG/rectangle.xml
new file mode 100755
index 0000000..e6cdeea
--- /dev/null
+++ b/test/SVG/rectangle.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This is a rectangle
+ </desc>
+ <g>
+ <rect x="20" y="30" width="100" height="80"/>
+ </g>
+</svg>
diff --git a/test/SVG/richdesc.xml b/test/SVG/richdesc.xml
new file mode 100755
index 0000000..ccf8c8d
--- /dev/null
+++ b/test/SVG/richdesc.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+ <desc xmlns:mydoc="http://foo.org/mydoc">
+ <mydoc:title>This is an example SVG file</mydoc:title>
+ <mydoc:para>The global description uses markup from the
+ <mydoc:emph>mydoc</mydoc:emph> namespace.</mydoc:para>
+ </desc>
+ <g>
+ <!-- the picture goes here -->
+ </g>
+</svg>
diff --git a/test/SVG/script.xml b/test/SVG/script.xml
new file mode 100755
index 0000000..600365e
--- /dev/null
+++ b/test/SVG/script.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <script><![CDATA[
+ /* Beep on mouseclick */
+ MouseClickHandler() { beep(); }
+ ]]>
+ </script>
+ </defs>
+ <circle onclick="MouseClickHandler()" r="85"/>
+</svg>
diff --git a/test/SVG/structure01.xml b/test/SVG/structure01.xml
new file mode 100755
index 0000000..dec9143
--- /dev/null
+++ b/test/SVG/structure01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="yes"?>
+<parent xmlns="http://someplace.org"
+ xmlns:svg="http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+ <!-- parent stuff here -->
+ <svg:svg width="5cm" height="8cm">
+ <svg:ellipse major="200" minor="130" />
+ </svg:svg>
+ <!-- ... -->
+</parent>
+
diff --git a/test/SVG/style.xml b/test/SVG/style.xml
new file mode 100755
index 0000000..ba15041
--- /dev/null
+++ b/test/SVG/style.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <style><![CDATA[
+ .TitleText { font-size: 16; font-family: Helvetica } ]]>
+ </style>
+ </defs>
+ <text class="TitleText">Here is my title</text>
+</svg>
diff --git a/test/SVG/switch.xml b/test/SVG/switch.xml
new file mode 100755
index 0000000..18955c9
--- /dev/null
+++ b/test/SVG/switch.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" standalone="yes"?>
+<smil>
+ <body>
+ <!-- The SMIL <switch> element will process the
+ first child element which tests true and skip
+ past all others. -->
+ <switch>
+
+ <!-- The system-required attribute tests to see if
+ the user agent supports SVG. If true, then
+ render the file drawing.svg. -->
+ <ref system-required="http://www.w3.org/Graphics/SVG/svg-19990412.dtd"
+ type="image/svg" src="drawing.svg" />
+
+ <!-- Else, render the alternate image. -->
+ <img src="alternate_image.jpg" />
+ </switch>
+ </body>
+</smil>
+
+
diff --git a/test/SVG/symbol-use.xml b/test/SVG/symbol-use.xml
new file mode 100755
index 0000000..83bc458
--- /dev/null
+++ b/test/SVG/symbol-use.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <symbol id="TemplateObject01">
+ <!-- symbol definition here -->
+ </symbol>
+ </defs>
+
+ <desc>Examples of inline and referenced content
+ </desc>
+
+ <!-- <g> with inline content -->
+ <g>
+ <!-- Inline content goes here -->
+ </g>
+
+ <!-- referenced content -->
+ <use href="#TemplateObject01" />
+
+ <!-- <g> with both referenced and inline content -->
+ <g>
+ <use href="#TemplateObject01" />
+ <!-- Inline content goes here -->
+ </g>
+
+</svg>
diff --git a/test/SVG/template.xml b/test/SVG/template.xml
new file mode 100755
index 0000000..0a9fee7
--- /dev/null
+++ b/test/SVG/template.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<svg width="4in" height="3in"
+ xmlns = 'http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+ <desc>This well formed svg document contains a hyperlink
+ </desc>
+ <a xml:link="simple" show="replace" actuate="user" href="http://www.w3.org">
+ <p d="M 0 0 L 200 0 L 100 200 Z"/>
+ </a>
+</svg>
diff --git a/test/SVG/text01.xml b/test/SVG/text01.xml
new file mode 100755
index 0000000..395bafb
--- /dev/null
+++ b/test/SVG/text01.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <text id="TextToUse">XYZ</text>
+ </defs>
+ <text>ABC</text>
+ <text>
+ <src href="#TextToUse"/>
+ </text>
+</svg>
diff --git a/test/SVG/text02.xml b/test/SVG/text02.xml
new file mode 100755
index 0000000..7b95292
--- /dev/null
+++ b/test/SVG/text02.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns = 'http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+ <defs>
+ <textflow id="TF1">
+ <t href="#T1"/>
+ <t href="#T3"/>
+ </textflow>
+ <textflow id="TF2">
+ <t href="#T2"/>
+ <t href="#T4"/>
+ </textflow>
+ </defs>
+ <text x="100" y="100" id="T1"><tf href="#TF1">123</tf></text>
+ <text x="100" y="200" id="T2"><tf href="#TF2">ABC</tf></text>
+ <text x="150" y="100" id="T3"><tf href="#TF1">456</tf></text>
+ <text x="150" y="200" id="T4"><tf href="#TF2">DEF</tf></text></svg>
diff --git a/test/SVG/text03.xml b/test/SVG/text03.xml
new file mode 100755
index 0000000..fae9af1
--- /dev/null
+++ b/test/SVG/text03.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns = 'http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+ <textflow id="TF1">
+ <text x="100" y="100">123</text>
+ <text>456</text>
+ </textflow>
+</svg>
diff --git a/test/SVG/toap01.xml b/test/SVG/toap01.xml
new file mode 100755
index 0000000..32e16e6
--- /dev/null
+++ b/test/SVG/toap01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Simple text on a path
+ </desc>
+ <path id="MyPath" style="visibility: hidden"
+ d="M 100 100 C 125 125 175 125 200 100" />
+ <text><textpath href="#MyPath"/>Text on path</text>
+</svg>
diff --git a/test/SVG/toap02.xml b/test/SVG/toap02.xml
new file mode 100755
index 0000000..6898093
--- /dev/null
+++ b/test/SVG/toap02.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <defs>
+ <symbol id="Triangle1"
+ min-x="0" min-y="0" max-x="300" max-y="200">
+ <path d="M 50 0 L 50 200 L 250 0 z"/>
+ </symbol>
+ <symbol id="Triangle2"
+ min-x="0" min-y="0" max-x="300" max-y="200">
+ <path d="M 50 0 L 250 200 L 250 0 z"/>
+ </symbol>
+ </defs>
+
+ <desc>General graphics on a path
+ </desc>
+
+ <text>
+ <textpath href="#MyPath"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ <use href="#Triangle1"/>
+ <use href="#Triangle2"/>
+ </text>
+
+</svg>
diff --git a/test/SVG/transform.xml b/test/SVG/transform.xml
new file mode 100755
index 0000000..13075ee
--- /dev/null
+++ b/test/SVG/transform.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Demonstration of coordinate transforms
+ </desc>
+ <!-- The following two text elements will both draw with a
+ font height of 12 pixels -->
+ <text style="font-size: 12">This prints 12 pixels high.</text>
+ <text style="font-size: 12px">This prints 12 pixels high.</text>
+
+ <!-- Now scale the coordinate system by 2. -->
+ <g style="transform: scale(2)">
+
+ <!-- The following text will actually draw 24 pixels high
+ because each unit in the new coordinate system equals
+ 2 units in the previous coordinate system. -->
+ <text style="font-size: 12">This prints 24 pixels high.</text>
+
+ <!-- The following text will actually still draw 12 pixels high
+ because the CSS unit specifier has been provided. -->
+ <text style="font-size: 12px">This prints 12 pixels high.</text>
+
+ </g>
+
+</svg>
diff --git a/test/SVG/trivial.xml b/test/SVG/trivial.xml
new file mode 100755
index 0000000..b6122be
--- /dev/null
+++ b/test/SVG/trivial.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns = 'http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+ <!-- Insert drawing elements here -->
+</svg>
+
diff --git a/test/SVG/twin-gradients.xml b/test/SVG/twin-gradients.xml
new file mode 100755
index 0000000..6213f1b
--- /dev/null
+++ b/test/SVG/twin-gradients.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>Gradients apply to leaf nodes
+ </desc>
+ <g>
+ <defs>
+ <lineargradient id="MyGradient">
+ <gradientstop offset="0%" color="#F60"/>
+ <gradientstop offset="70%" color="#FF6"/>
+ </lineargradient>
+ </defs>
+ <g style="fill: url(#MyGradient)">
+ <rect width="20" height="15.8"/>
+ <rect width="35" height="8"/>
+ </g>
+ </g>
+</svg>
diff --git a/test/SVG/v-template.xml b/test/SVG/v-template.xml
new file mode 100755
index 0000000..d8643d7
--- /dev/null
+++ b/test/SVG/v-template.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>
+ </desc>
+ <g>
+ </g>
+</svg>
diff --git a/test/SVG/viewport-nest.xml b/test/SVG/viewport-nest.xml
new file mode 100755
index 0000000..981a7ac
--- /dev/null
+++ b/test/SVG/viewport-nest.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="4in" height="3in">
+ <desc>This SVG drawing embeds another one,
+ thus establishing a new viewport
+ </desc>
+ <!-- The following statement establishing a new viewport
+ and renders SVG drawing B into that viewport -->
+ <svg style="left: 25%; top: 25%" width="50%" height="50%">
+ <!-- drawing B goes here -->
+ </svg>
+</svg>
diff --git a/test/SVG/viewport-transform.xml b/test/SVG/viewport-transform.xml
new file mode 100755
index 0000000..e2434bd
--- /dev/null
+++ b/test/SVG/viewport-transform.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width="300px" height="3oopx">
+ <desc>Transformation with establishment of a new viewport
+ </desc>
+ <!-- The following two text elements will both draw with a
+ font height of 12 pixels -->
+ <text style="font-size: 12">This prints 12 pixels high.</text>
+ <text style="font-size: 12px">This prints 12 pixels high.</text>
+
+ <!-- Now scale the coordinate system by 2. -->
+ <g style="transform: scale(2)">
+
+ <!-- The following text will actually draw 24 pixels high
+ because each unit in the new coordinate system equals
+ 2 units in the previous coordinate system. -->
+ <text style="font-size: 12">This prints 24 pixels high.</text>
+
+ <!-- The following text will actually still draw 12 pixels high
+ because the CSS unit specifier has been provided. -->
+ <text style="font-size: 12px">This prints 12 pixels high.</text>
+ </g>
+
+ <!-- This time, scale the coordinate system by 3. -->
+ <g style="transform: scale(3)">
+
+ <!-- Establish a new viewport and thus change the meaning of
+ some CSS unit specifiers. -->
+ <svg style="left:0; top:0; right:100; bottom:100"
+ width="100%" height="100%">
+
+ <!-- The following two text elements will both draw with a
+ font height of 36 screen pixels. The first text element
+ defines its height in user coordinates, which have been
+ scaled by 3. The second text element defines its height
+ in CSS px units, which have been redefined to be three times
+ as big as screen pixels due the <svg> element establishing
+ a new viewport. -->
+ <text style="font-size: 12">This prints 36 pixels high.</text>
+ <text style="font-size: 12px">This prints 36 pixels high.</text>
+
+ </svg>
+ </g>
+
+</svg>
diff --git a/test/SVG/viewport.xml b/test/SVG/viewport.xml
new file mode 100755
index 0000000..0923fae
--- /dev/null
+++ b/test/SVG/viewport.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="yes"?>
+<parent xmlns="http://some.url">
+
+ <!-- SVG graphic -->
+ <svg xmlns='http://www.w3.org/Graphics/SVG/svg-19990412.dtd'
+ width="100px" height="200px">
+ <path d="M100,100 Q200,400,300,100"/>
+ <!-- rest of SVG graphic would go here -->
+ </svg>
+
+</parent>
diff --git a/test/SVG/wf-template.xml b/test/SVG/wf-template.xml
new file mode 100755
index 0000000..f1cad85
--- /dev/null
+++ b/test/SVG/wf-template.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="4in" height="3in"
+ xmlns = 'http://www.w3.org/Graphics/SVG/svg-19990412.dtd'>
+ <desc>
+ </desc>
+
+</svg>
diff --git a/test/URI/smith.uri b/test/URI/smith.uri
new file mode 100644
index 0000000..6cc6c87
--- /dev/null
+++ b/test/URI/smith.uri
@@ -0,0 +1,15 @@
+/foo/../bar
+foo/../bar
+./foo/../bar
+foo/./../bar
+foo/bar/.././../baz
+foo/..
+foo/bar/..
+./foo
+././foo
+.././foo./
+.././foo/.
+/foo
+../foo
+../../foo
+../../../foo
diff --git a/test/URI/uri.data b/test/URI/uri.data
new file mode 100644
index 0000000..a96ea5f
--- /dev/null
+++ b/test/URI/uri.data
@@ -0,0 +1,18 @@
+
+.
+bar
+bar#baz
+bar?baz
+bar?baz#baz2
+#baz
+?baz
+?baz#baz2
+../up.a.notch.html#wow
+../up.a.notch.html?wow
+../up.a.notch.html?wow#wow2
+/root.cgi#OK
+/root.cgi?OK
+/root.cgi?OK#OK2
+http://elsewhere.com/#deep
+http://elsewhere.com/?deep
+http://elsewhere.com/?deep#deep2
diff --git a/test/VC/AttributeDefaultLegal b/test/VC/AttributeDefaultLegal
new file mode 100644
index 0000000..471eb20
--- /dev/null
+++ b/test/VC/AttributeDefaultLegal
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+<!ATTLIST doc At NMTOKEN "$$$">
+<!ATTLIST doc Ok NMTOKEN "1abc_2">
+<!ATTLIST doc bad IDREF "1abc_2">
+<!ATTLIST doc ok2 IDREF "abc_2">
+<!ATTLIST doc bad2 IDREFS "abc:1 1abc_2">
+<!ATTLIST doc ok3 IDREFS "abc:1 a1bc_2">
+]>
+<doc val="v1"/>
+
diff --git a/test/VC/DuplicateType b/test/VC/DuplicateType
new file mode 100644
index 0000000..4b28804
--- /dev/null
+++ b/test/VC/DuplicateType
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE a [
+<!ELEMENT a (#PCDATA | b | c | d | c)*>
+]>
+<a> violates [ VC: No Duplicate Types ] </a>
diff --git a/test/VC/ElementValid b/test/VC/ElementValid
new file mode 100644
index 0000000..c297ce6
--- /dev/null
+++ b/test/VC/ElementValid
@@ -0,0 +1,3 @@
+<!DOCTYPE doc [
+]>
+<doc/>
diff --git a/test/VC/ElementValid2 b/test/VC/ElementValid2
new file mode 100644
index 0000000..672a0f5
--- /dev/null
+++ b/test/VC/ElementValid2
@@ -0,0 +1,4 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (p)*>
+]>
+<doc><p/></doc>
diff --git a/test/VC/ElementValid3 b/test/VC/ElementValid3
new file mode 100644
index 0000000..67cbab4
--- /dev/null
+++ b/test/VC/ElementValid3
@@ -0,0 +1,4 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc>Oops, this element was declared EMPTY</doc>
diff --git a/test/VC/ElementValid4 b/test/VC/ElementValid4
new file mode 100644
index 0000000..56df55a
--- /dev/null
+++ b/test/VC/ElementValid4
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA | a | b)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+]>
+<doc> This <b>seems</b> Ok <a/> but this <c>was not declared</c></doc>
diff --git a/test/VC/ElementValid5 b/test/VC/ElementValid5
new file mode 100644
index 0000000..2cef3c4
--- /dev/null
+++ b/test/VC/ElementValid5
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a , b* , c+)>
+<!ELEMENT a EMPTY>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+]>
+<doc><a/><b> but this</b><c>was not declared</c><b>seems</b></doc>
diff --git a/test/VC/ElementValid6 b/test/VC/ElementValid6
new file mode 100644
index 0000000..fbf721d
--- /dev/null
+++ b/test/VC/ElementValid6
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a , b? , c+)?>
+<!ELEMENT a EMPTY>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+]>
+<doc><a/><b>lacks c</b></doc>
diff --git a/test/VC/ElementValid7 b/test/VC/ElementValid7
new file mode 100644
index 0000000..a88115f
--- /dev/null
+++ b/test/VC/ElementValid7
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b)* , c+, a, b?, c, a?)>
+<!ELEMENT a EMPTY>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+]>
+<doc><a/><b/><a/><c/><c/><a/></doc>
diff --git a/test/VC/ElementValid8 b/test/VC/ElementValid8
new file mode 100644
index 0000000..5fd2044
--- /dev/null
+++ b/test/VC/ElementValid8
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ((a, b)| (a, c))>
+<!ELEMENT a EMPTY>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+]>
+<doc><a/><c> doc is non-deterministic </c></doc>
diff --git a/test/VC/Enumeration b/test/VC/Enumeration
new file mode 100644
index 0000000..6c63968
--- /dev/null
+++ b/test/VC/Enumeration
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+<!ATTLIST doc val (v1 | v2 | v3) #IMPLIED>
+]>
+<doc val="v4"></doc>
diff --git a/test/VC/NS1 b/test/VC/NS1
new file mode 100644
index 0000000..2f74463
--- /dev/null
+++ b/test/VC/NS1
@@ -0,0 +1,13 @@
+<!DOCTYPE ns:doc [
+<!ELEMENT ns:doc (#PCDATA | ns:a | ns:b)*>
+<!ATTLIST ns:doc
+ ns:attr CDATA #REQUIRED
+ xmlns:ns CDATA #IMPLIED>
+<!ELEMENT ns:a EMPTY>
+<!ELEMENT ns:b (#PCDATA)>
+]>
+<ns:doc ns:attr="val" xmlns:ns="http://www.example.org/test/">
+ <ns:a/>
+ <ns:b>first line</ns:b>
+ <ns:b>second line</ns:b>
+</ns:doc>
diff --git a/test/VC/NS2 b/test/VC/NS2
new file mode 100644
index 0000000..d748d1a
--- /dev/null
+++ b/test/VC/NS2
@@ -0,0 +1,13 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA | ns:a | ns:b)*>
+<!ATTLIST doc
+ attr CDATA #REQUIRED
+ xmlns:ns CDATA #IMPLIED>
+<!ELEMENT a EMPTY>
+<!ELEMENT b (#PCDATA)>
+]>
+<ns:doc ns:attr="val" xmlns:ns="http://www.example.org/test/">
+ <ns:a/>
+ <ns:b>first line</ns:b>
+ <ns:b>second line</ns:b>
+</ns:doc>
diff --git a/test/VC/NS3 b/test/VC/NS3
new file mode 100644
index 0000000..f53b0ca
--- /dev/null
+++ b/test/VC/NS3
@@ -0,0 +1,9 @@
+<?xml version="1.0" ?>
+<!DOCTYPE foo [
+<!ELEMENT foo EMPTY>
+<!ATTLIST foo
+ xmlns CDATA #FIXED "http://example.com/fooo"
+ xmlns:foo CDATA #REQUIRED
+ foo:info CDATA #IMPLIED>
+]>
+<foo xmlns="http://example.com/foo" xmlns:foo="http://example.com/fo" foo:info="toto"/>
diff --git a/test/VC/OneID b/test/VC/OneID
new file mode 100644
index 0000000..e9cbc0c
--- /dev/null
+++ b/test/VC/OneID
@@ -0,0 +1,6 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+<!ATTLIST doc val ID #IMPLIED>
+<!ATTLIST doc id ID #IMPLIED>
+]>
+<doc val="v1"></doc>
diff --git a/test/VC/OneID2 b/test/VC/OneID2
new file mode 100644
index 0000000..ffa9d1f
--- /dev/null
+++ b/test/VC/OneID2
@@ -0,0 +1,6 @@
+<!DOCTYPE doc [
+<!ATTLIST doc val ID #IMPLIED>
+<!ATTLIST doc id ID #IMPLIED>
+<!ELEMENT doc (#PCDATA)>
+]>
+<doc val="v1"></doc>
diff --git a/test/VC/OneID3 b/test/VC/OneID3
new file mode 100644
index 0000000..9696736
--- /dev/null
+++ b/test/VC/OneID3
@@ -0,0 +1,4 @@
+<!DOCTYPE doc SYSTEM "dtds/doc.dtd" [
+<!ATTLIST doc id ID #IMPLIED>
+]>
+<doc val="v1"></doc>
diff --git a/test/VC/PENesting b/test/VC/PENesting
new file mode 100644
index 0000000..17332ae
--- /dev/null
+++ b/test/VC/PENesting
@@ -0,0 +1,2 @@
+<!ENTITY % pe1 "EMPTY> <!ELEMENT e2 EMPTY>">
+<!ELEMENT e1 %pe1;
diff --git a/test/VC/PENesting2 b/test/VC/PENesting2
new file mode 100644
index 0000000..27b0cca
--- /dev/null
+++ b/test/VC/PENesting2
@@ -0,0 +1,3 @@
+<!ENTITY % p1 "(A|B">
+<!ENTITY % p2 "|C|D)">
+<!ELEMENT X %p1;%p2;>
diff --git a/test/VC/UniqueElementTypeDeclaration b/test/VC/UniqueElementTypeDeclaration
new file mode 100644
index 0000000..2246f17
--- /dev/null
+++ b/test/VC/UniqueElementTypeDeclaration
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE a SYSTEM "dtds/a.dtd" [
+<!ELEMENT a (#PCDATA | b | c)*>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+]>
+<a> violates [ VC: Unique Element Type Declaration ] </a>
diff --git a/test/VC/UniqueElementTypeDeclaration2 b/test/VC/UniqueElementTypeDeclaration2
new file mode 100644
index 0000000..0805f8d
--- /dev/null
+++ b/test/VC/UniqueElementTypeDeclaration2
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE a [
+<!ELEMENT a (#PCDATA | b | c)*>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT a (#PCDATA | b | c)*>
+]>
+<a> violates [ VC: Unique Element Type Declaration ] </a>
diff --git a/test/VC/dtds/a.dtd b/test/VC/dtds/a.dtd
new file mode 100644
index 0000000..b8571a4
--- /dev/null
+++ b/test/VC/dtds/a.dtd
@@ -0,0 +1,2 @@
+<!ELEMENT a (#PCDATA | b | c)*>
+<!ATTLIST doc id ID #IMPLIED>
diff --git a/test/VC/dtds/doc.dtd b/test/VC/dtds/doc.dtd
new file mode 100644
index 0000000..71f8b41
--- /dev/null
+++ b/test/VC/dtds/doc.dtd
@@ -0,0 +1,2 @@
+<!ELEMENT doc (#PCDATA)>
+<!ATTLIST doc val ID #IMPLIED>
diff --git a/test/VCM/21.xml b/test/VCM/21.xml
new file mode 100644
index 0000000..78c8713
--- /dev/null
+++ b/test/VCM/21.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a, (b | c)*, d*)? >
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+<!ELEMENT d EMPTY>
+]>
+<doc><a/><d/></doc>
diff --git a/test/VCM/v1.xml b/test/VCM/v1.xml
new file mode 100644
index 0000000..8a7f679
--- /dev/null
+++ b/test/VCM/v1.xml
@@ -0,0 +1,4 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/VCM/v10.xml b/test/VCM/v10.xml
new file mode 100644
index 0000000..f293a42
--- /dev/null
+++ b/test/VCM/v10.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a)* >
+<!ELEMENT a EMPTY>
+]>
+<doc></doc>
diff --git a/test/VCM/v11.xml b/test/VCM/v11.xml
new file mode 100644
index 0000000..c133523
--- /dev/null
+++ b/test/VCM/v11.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a)* >
+<!ELEMENT a EMPTY>
+]>
+<doc><a/></doc>
diff --git a/test/VCM/v12.xml b/test/VCM/v12.xml
new file mode 100644
index 0000000..3eed3d6
--- /dev/null
+++ b/test/VCM/v12.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a)* >
+<!ELEMENT a EMPTY>
+]>
+<doc>
+<a/>
+<a/>
+<a/>
+</doc>
diff --git a/test/VCM/v13.xml b/test/VCM/v13.xml
new file mode 100644
index 0000000..75f4352
--- /dev/null
+++ b/test/VCM/v13.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a)+ >
+<!ELEMENT a EMPTY>
+]>
+<doc>
+<a/>
+</doc>
diff --git a/test/VCM/v14.xml b/test/VCM/v14.xml
new file mode 100644
index 0000000..fa70f9f
--- /dev/null
+++ b/test/VCM/v14.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a)+ >
+<!ELEMENT a EMPTY>
+]>
+<doc>
+<a/>
+<a/>
+<a/>
+</doc>
diff --git a/test/VCM/v15.xml b/test/VCM/v15.xml
new file mode 100644
index 0000000..878e3e3
--- /dev/null
+++ b/test/VCM/v15.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b | c)*) >
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+]>
+<doc>
+<b/>
+</doc>
diff --git a/test/VCM/v16.xml b/test/VCM/v16.xml
new file mode 100644
index 0000000..e676347
--- /dev/null
+++ b/test/VCM/v16.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a | b)>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+]>
+<doc>
+<b/>
+</doc>
diff --git a/test/VCM/v17.xml b/test/VCM/v17.xml
new file mode 100644
index 0000000..bc9c8c2
--- /dev/null
+++ b/test/VCM/v17.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a? | b?) >
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+]>
+<doc></doc>
diff --git a/test/VCM/v18.xml b/test/VCM/v18.xml
new file mode 100644
index 0000000..fccc440
--- /dev/null
+++ b/test/VCM/v18.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a? | b?) >
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+]>
+<doc><b/></doc>
diff --git a/test/VCM/v19.xml b/test/VCM/v19.xml
new file mode 100644
index 0000000..17aacff
--- /dev/null
+++ b/test/VCM/v19.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a? | b+) >
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+]>
+<doc><b/></doc>
diff --git a/test/VCM/v2.xml b/test/VCM/v2.xml
new file mode 100644
index 0000000..35c63af
--- /dev/null
+++ b/test/VCM/v2.xml
@@ -0,0 +1,4 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+]>
+<doc>text</doc>
diff --git a/test/VCM/v20.xml b/test/VCM/v20.xml
new file mode 100644
index 0000000..a9b0529
--- /dev/null
+++ b/test/VCM/v20.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b)*, c, b) >
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+]>
+<doc>
+<c/>
+<b/>
+</doc>
diff --git a/test/VCM/v21.xml b/test/VCM/v21.xml
new file mode 100644
index 0000000..4c8d923
--- /dev/null
+++ b/test/VCM/v21.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b)+, c) >
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+]>
+<doc><a/><b/><c/></doc>
diff --git a/test/VCM/v22.xml b/test/VCM/v22.xml
new file mode 100644
index 0000000..d0376f7
--- /dev/null
+++ b/test/VCM/v22.xml
@@ -0,0 +1,15 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a, b, c, b, c, d) >
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+<!ELEMENT d EMPTY>
+<!ENTITY c "<c/>">
+<!ENTITY bc "<b/>&c;">
+]>
+<doc>
+<a/>
+&bc;
+&bc;
+<d/>
+</doc>
diff --git a/test/VCM/v23.xml b/test/VCM/v23.xml
new file mode 100644
index 0000000..6aedcfb
--- /dev/null
+++ b/test/VCM/v23.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a?, (b, c?)?, d)>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+<!ELEMENT d EMPTY>
+]>
+<doc>
+<d/>
+</doc>
diff --git a/test/VCM/v24.xml b/test/VCM/v24.xml
new file mode 100644
index 0000000..25367c4
--- /dev/null
+++ b/test/VCM/v24.xml
@@ -0,0 +1,16 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a?, (b, c?, d?)?, (e | f | g)*, (h+ | i | j+))>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+<!ELEMENT d EMPTY>
+<!ELEMENT e EMPTY>
+<!ELEMENT f EMPTY>
+<!ELEMENT g EMPTY>
+<!ELEMENT h EMPTY>
+<!ELEMENT i EMPTY>
+<!ELEMENT j EMPTY>
+]>
+<doc>
+<i/>
+</doc>
diff --git a/test/VCM/v3.xml b/test/VCM/v3.xml
new file mode 100644
index 0000000..f255589
--- /dev/null
+++ b/test/VCM/v3.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+]>
+<doc>
+<?pi value?>
+text
+<!-- and comments -->
+</doc>
diff --git a/test/VCM/v4.xml b/test/VCM/v4.xml
new file mode 100644
index 0000000..e96afe2
--- /dev/null
+++ b/test/VCM/v4.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a)>
+<!ELEMENT a EMPTY>
+]>
+<doc><a/></doc>
diff --git a/test/VCM/v5.xml b/test/VCM/v5.xml
new file mode 100644
index 0000000..a7ff5ba
--- /dev/null
+++ b/test/VCM/v5.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a)>
+<!ELEMENT a EMPTY>
+]>
+<doc>
+<a/>
+</doc>
diff --git a/test/VCM/v6.xml b/test/VCM/v6.xml
new file mode 100644
index 0000000..93fa4b8
--- /dev/null
+++ b/test/VCM/v6.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a, b)>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+]>
+<doc>
+<a/>
+<b/>
+</doc>
diff --git a/test/VCM/v7.xml b/test/VCM/v7.xml
new file mode 100644
index 0000000..240c480
--- /dev/null
+++ b/test/VCM/v7.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a | b)>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+]>
+<doc>
+<a/>
+</doc>
diff --git a/test/VCM/v8.xml b/test/VCM/v8.xml
new file mode 100644
index 0000000..421a1df
--- /dev/null
+++ b/test/VCM/v8.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a)? >
+<!ELEMENT a EMPTY>
+]>
+<doc></doc>
diff --git a/test/VCM/v9.xml b/test/VCM/v9.xml
new file mode 100644
index 0000000..1c639ec
--- /dev/null
+++ b/test/VCM/v9.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a)? >
+<!ELEMENT a EMPTY>
+]>
+<doc><a/></doc>
diff --git a/test/WFC/ElemTypeMatch b/test/WFC/ElemTypeMatch
new file mode 100644
index 0000000..11a2df3
--- /dev/null
+++ b/test/WFC/ElemTypeMatch
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<a> violates [ WFC: Element Type Match ] </b>
diff --git a/test/WFC/EntityDeclared b/test/WFC/EntityDeclared
new file mode 100644
index 0000000..e3427a1
--- /dev/null
+++ b/test/WFC/EntityDeclared
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<a> &unknown; violates [ WFC: Entity Declared ] </a>
diff --git a/test/WFC/EntityDeclared2 b/test/WFC/EntityDeclared2
new file mode 100644
index 0000000..e6d16dd
--- /dev/null
+++ b/test/WFC/EntityDeclared2
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE a [
+<!ENTITY e "an entity">
+]>
+<a> &unknown; violates [ WFC: Entity Declared ] </a>
diff --git a/test/WFC/EntityDeclared3 b/test/WFC/EntityDeclared3
new file mode 100644
index 0000000..1670980
--- /dev/null
+++ b/test/WFC/EntityDeclared3
@@ -0,0 +1,3 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE a SYSTEM "a.dtd">
+<a> &unknown; violates [ WFC: Entity Declared ] </a>
diff --git a/test/WFC/EntityDeclared4 b/test/WFC/EntityDeclared4
new file mode 100644
index 0000000..15354ac
--- /dev/null
+++ b/test/WFC/EntityDeclared4
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE a [
+%unknown;
+<!ENTITY % unknown "<!ELEMENT a (#PCDATA)>">
+]>
+<a> violates [ WFC: Entity Declared ] </a>
diff --git a/test/WFC/EntityDeclared5 b/test/WFC/EntityDeclared5
new file mode 100644
index 0000000..f125373
--- /dev/null
+++ b/test/WFC/EntityDeclared5
@@ -0,0 +1,6 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE a SYSTEM "a.dtd" [
+%unknown;
+<!ENTITY % unknown "<!ELEMENT a (#PCDATA)>">
+]>
+<a> violates [ WFC: Entity Declared ] </a>
diff --git a/test/WFC/LegalCharacter b/test/WFC/LegalCharacter
new file mode 100644
index 0000000..67ff388
--- /dev/null
+++ b/test/WFC/LegalCharacter
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<a> &#5; violates [ WFC: Legal Character ] </a>
diff --git a/test/WFC/NoExternalEntityRef b/test/WFC/NoExternalEntityRef
new file mode 100644
index 0000000..43cd192
--- /dev/null
+++ b/test/WFC/NoExternalEntityRef
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE a [
+<!ENTITY ext SYSTEM "ext.ent">
+]>
+<a att="wrong &ext; ref"> violates [ WFC: No External Entity References ] </a>
diff --git a/test/WFC/NoLtInAttValue b/test/WFC/NoLtInAttValue
new file mode 100644
index 0000000..cc459e9
--- /dev/null
+++ b/test/WFC/NoLtInAttValue
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE a [
+<!ENTITY ext "no < workie">
+]>
+<a att="wrong &ext; ref"> violates [ WFC: No < in Attribute Values ] </a>
diff --git a/test/WFC/NoRecursion b/test/WFC/NoRecursion
new file mode 100644
index 0000000..970b897
--- /dev/null
+++ b/test/WFC/NoRecursion
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY a "&b;">
+<!ENTITY b "&c;">
+<!ENTITY c "&a;">
+]>
+<doc> &a; violates [ WFC: No Recursion ] </doc>
diff --git a/test/WFC/PEintsubset b/test/WFC/PEintsubset
new file mode 100644
index 0000000..e1ea331
--- /dev/null
+++ b/test/WFC/PEintsubset
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE a [
+<!ENTITY % pcdata "(#PCDATA)">
+<!ELEMENT e %pcdata>
+]>
+<a> violates [ WFC: PEs in Internal Subset ] </a>
diff --git a/test/WFC/UniqueAttSpec b/test/WFC/UniqueAttSpec
new file mode 100644
index 0000000..5074ff2
--- /dev/null
+++ b/test/WFC/UniqueAttSpec
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<a att="Ok" att2="Ok" att="Bad"> violates [ WFC: Unique Att Spec ] </a>
diff --git a/test/WFC/UniqueAttSpec2 b/test/WFC/UniqueAttSpec2
new file mode 100644
index 0000000..e4511f1
--- /dev/null
+++ b/test/WFC/UniqueAttSpec2
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<a> <b att="Ok" att2="Ok" att="Bad"/> violates [ WFC: Unique Att Spec ] </a>
diff --git a/test/XInclude/docs/.memdump b/test/XInclude/docs/.memdump
new file mode 100644
index 0000000..aed5a9e
--- /dev/null
+++ b/test/XInclude/docs/.memdump
@@ -0,0 +1,4 @@
+ 11:55:34 AM
+
+ MEMORY ALLOCATED : 0, MAX was 20068
+BLOCK NUMBER SIZE TYPE
diff --git a/test/XInclude/docs/docids.xml b/test/XInclude/docs/docids.xml
new file mode 100644
index 0000000..7791620
--- /dev/null
+++ b/test/XInclude/docs/docids.xml
@@ -0,0 +1,15 @@
+<!DOCTYPE book [
+<!ELEMENT book (doc*)>
+<!ELEMENT doc (isid*)>
+<!ELEMENT isid EMPTY>
+<!ATTLIST isid myid ID #IMPLIED>
+]>
+<book>
+<doc>
+<isid myid="mine"/>
+<isid myid="dup"/>
+</doc>
+<!-- including another XML document with IDs -->
+<xinclude:include xmlns:xinclude="http://www.w3.org/2001/XInclude"
+ href="../ents/ids.xml"/>
+</book>
diff --git a/test/XInclude/docs/fallback.xml b/test/XInclude/docs/fallback.xml
new file mode 100644
index 0000000..e80222e
--- /dev/null
+++ b/test/XInclude/docs/fallback.xml
@@ -0,0 +1,6 @@
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of a fallback on unavailble URI -->
+ <xinclude:include href="something.xml">
+ <xinclude:fallback><warning>Inclusion failed</warning></xinclude:fallback>
+ </xinclude:include>
+</x>
diff --git a/test/XInclude/docs/include.xml b/test/XInclude/docs/include.xml
new file mode 100644
index 0000000..806ac23
--- /dev/null
+++ b/test/XInclude/docs/include.xml
@@ -0,0 +1,4 @@
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of including another XML document -->
+ <xinclude:include href="../ents/something.xml"/>
+</x>
diff --git a/test/XInclude/docs/nodes.xml b/test/XInclude/docs/nodes.xml
new file mode 100644
index 0000000..d0ccab9
--- /dev/null
+++ b/test/XInclude/docs/nodes.xml
@@ -0,0 +1,4 @@
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of including a set of nodes from an XML document -->
+ <xinclude:include href="../ents/something.xml#xpointer(//p)"/>
+</x>
diff --git a/test/XInclude/docs/nodes2.xml b/test/XInclude/docs/nodes2.xml
new file mode 100644
index 0000000..32f8cfe
--- /dev/null
+++ b/test/XInclude/docs/nodes2.xml
@@ -0,0 +1,4 @@
+<x xmlns:xinclude="http://www.w3.org/2003/XInclude">
+ <!-- Simple test of including a set of nodes from an XML document -->
+ <xinclude:include href="../ents/something.xml" xpointer="xpointer(//p)"/>
+</x>
diff --git a/test/XInclude/docs/nodes3.xml b/test/XInclude/docs/nodes3.xml
new file mode 100644
index 0000000..355c548
--- /dev/null
+++ b/test/XInclude/docs/nodes3.xml
@@ -0,0 +1,4 @@
+<x xmlns:xinclude="http://www.w3.org/2003/XInclude">
+ <!-- Simple test of including a set of nodes from an XML document -->
+ <xinclude:include href="../ents/something.xml#xpointer(//p)"/>
+</x>
diff --git a/test/XInclude/docs/recursive.xml b/test/XInclude/docs/recursive.xml
new file mode 100644
index 0000000..a9285ac
--- /dev/null
+++ b/test/XInclude/docs/recursive.xml
@@ -0,0 +1,3 @@
+<this><xinc:include href="../ents/sub-inc.ent" parse="xml"
+ xmlns:xinc="http://www.w3.org/2001/XInclude"/></this>
+
diff --git a/test/XInclude/docs/tstencoding.xml b/test/XInclude/docs/tstencoding.xml
new file mode 100644
index 0000000..b1309a9
--- /dev/null
+++ b/test/XInclude/docs/tstencoding.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of including another text document -->
+ <xinclude:include href="../ents/isolatin.txt" encoding="ISO-8859-1" parse="text"/>
+</x>
diff --git a/test/XInclude/docs/txtinclude.xml b/test/XInclude/docs/txtinclude.xml
new file mode 100644
index 0000000..f1af6a2
--- /dev/null
+++ b/test/XInclude/docs/txtinclude.xml
@@ -0,0 +1,4 @@
+<x xmlns:xinclude="http://www.w3.org/2001/XInclude">
+ <!-- Simple test of including another text document -->
+ <xinclude:include href="../ents/something.txt" parse="text"/>
+</x>
diff --git a/test/XInclude/ents/ids.xml b/test/XInclude/ents/ids.xml
new file mode 100644
index 0000000..8193231
--- /dev/null
+++ b/test/XInclude/ents/ids.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (isid*)>
+<!ELEMENT isid EMPTY>
+<!ATTLIST isid myid ID #IMPLIED>
+]>
+<doc>
+<isid myid="dup"/>
+<isid myid="foo"/>
+<isid myid="bar"/>
+</doc>
diff --git a/test/XInclude/ents/inc.txt b/test/XInclude/ents/inc.txt
new file mode 100644
index 0000000..d5cdd7c
--- /dev/null
+++ b/test/XInclude/ents/inc.txt
@@ -0,0 +1 @@
+is a test
diff --git a/test/XInclude/ents/isolatin.txt b/test/XInclude/ents/isolatin.txt
new file mode 100644
index 0000000..d1dbf70
--- /dev/null
+++ b/test/XInclude/ents/isolatin.txt
@@ -0,0 +1 @@
+test with accents in ISO-8859-1: À Á é è
diff --git a/test/XInclude/ents/something.txt b/test/XInclude/ents/something.txt
new file mode 100644
index 0000000..48c21b7
--- /dev/null
+++ b/test/XInclude/ents/something.txt
@@ -0,0 +1 @@
+this is some text in ASCII
diff --git a/test/XInclude/ents/something.xml b/test/XInclude/ents/something.xml
new file mode 100644
index 0000000..9bba683
--- /dev/null
+++ b/test/XInclude/ents/something.xml
@@ -0,0 +1,5 @@
+<doc>
+<p>something</p>
+<p>really</p>
+<p>simple</p>
+</doc>
diff --git a/test/XInclude/ents/sub-inc.ent b/test/XInclude/ents/sub-inc.ent
new file mode 100644
index 0000000..7726c9d
--- /dev/null
+++ b/test/XInclude/ents/sub-inc.ent
@@ -0,0 +1,2 @@
+<sub-inc><xinc:include href="inc.txt" parse="text"
+ xmlns:xinc="http://www.w3.org/2001/XInclude"/></sub-inc>
diff --git a/test/XPath/docs/chapters b/test/XPath/docs/chapters
new file mode 100644
index 0000000..c48f65e
--- /dev/null
+++ b/test/XPath/docs/chapters
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<EXAMPLE prop1="gnome is great" prop2="&amp; linux too">
+ <head>
+ <title>Welcome to Gnome</title>
+ </head>
+ <chapter id="chapter1">
+ <title>The Linux adventure</title>
+ <p>bla bla bla ...</p>
+ <image href="linus.gif"/>
+ <p>...</p>
+ </chapter>
+ <chapter id="chapter2">
+ <title>Chapter 2</title>
+ <p>this is chapter 2 ...</p>
+ </chapter>
+ <chapter id="chapter3">
+ <title>Chapter 3</title>
+ <p>this is chapter 3 ...</p>
+ </chapter>
+ <chapter id="chapter4">
+ <title>Chapter 4</title>
+ <p>this is chapter 4 ...</p>
+ </chapter>
+ <chapter id="chapter5">
+ <title>Chapter 5</title>
+ <p>this is chapter 5 ...</p>
+ </chapter>
+</EXAMPLE>
diff --git a/test/XPath/docs/id b/test/XPath/docs/id
new file mode 100644
index 0000000..4b6659f
--- /dev/null
+++ b/test/XPath/docs/id
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<EXAMPLE id="root" prop1="gnome is great" prop2="&amp; linux too">
+ <head id="head">
+ <title>Welcome to Gnome</title>
+ </head>
+ <chapter id="chapter1">
+ <title>The Linux adventure</title>
+ <p>bla bla bla ...</p>
+ <image href="linus.gif"/>
+ <p>...</p>
+ </chapter>
+ <chapter id="chapter2">
+ <title>Chapter 2</title>
+ <p>this is chapter 2 ...</p>
+ </chapter>
+ <chapter id="chapter3">
+ <title>Chapter 3</title>
+ <p>this is chapter 3 ...</p>
+ </chapter>
+ <chapter id="chapter4">
+ <title>Chapter 4</title>
+ <p>this is chapter 4 ...</p>
+ </chapter>
+ <chapter id="chapter5">
+ <title>Chapter 5</title>
+ <p>this is chapter 5 ...</p>
+ </chapter>
+</EXAMPLE>
diff --git a/test/XPath/docs/simple b/test/XPath/docs/simple
new file mode 100644
index 0000000..ca665a2
--- /dev/null
+++ b/test/XPath/docs/simple
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<EXAMPLE prop1="gnome is great" prop2="&amp; linux too">
+ <head>
+ <title>Welcome to Gnome</title>
+ </head>
+ <chapter>
+ <title>The Linux adventure</title>
+ <p>bla bla bla ...</p>
+ <image href="linus.gif"/>
+ <p>...</p>
+ </chapter>
+</EXAMPLE>
diff --git a/test/XPath/docs/str b/test/XPath/docs/str
new file mode 100644
index 0000000..547e54d
--- /dev/null
+++ b/test/XPath/docs/str
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<chapter>
+ <p>a simple test</p>
+ <p>multiple tests</p>
+ <p>a diff<em>i</em>cult one</p>
+ <p><p>a span</p>n<p>ing one</p></p>
+ <p><p>and an unbal</p><empty/>anced test</p>
+ <p>for empty string <seq>123</seq></p>
+</chapter>
diff --git a/test/XPath/docs/usr1 b/test/XPath/docs/usr1
new file mode 100644
index 0000000..44c7529
--- /dev/null
+++ b/test/XPath/docs/usr1
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<BODY>
+<DECLARACION importador="123456789" fecha="08/09/2000"
+monto_factura="100.09">
+<ITEM monto="50.12" divisa="DOL">
+<SUFIJO codigo="NL34" valor="negro"/>
+<SUFIJO codigo="AS34" valor="grande"/>
+</ITEM>
+</DECLARACION>
+<FIRMA>N</FIRMA>
+</BODY>
+
diff --git a/test/XPath/docs/vid b/test/XPath/docs/vid
new file mode 100644
index 0000000..cdb7437
--- /dev/null
+++ b/test/XPath/docs/vid
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<!DOCTYPE iddemo [
+<!ELEMENT iddemo (head?, (chapter)*)>
+<!ATTLIST iddemo id ID #IMPLIED>
+<!ELEMENT head (title?, (p)*)>
+<!ATTLIST head id ID #IMPLIED>
+<!ELEMENT chapter (title?, (p | image)*)>
+<!ATTLIST chapter id ID #IMPLIED>
+<!ELEMENT image EMPTY>
+<!ATTLIST image href CDATA #IMPLIED>
+<!ELEMENT title (#PCDATA)>
+<!ELEMENT p (#PCDATA)>
+]>
+
+<iddemo>
+ <head>
+ <title>Welcome to Gnome</title>
+ </head>
+ <chapter id="chapter1">
+ <title>The Linux adventure</title>
+ <p>bla bla bla ...</p>
+ <image href="linus.gif"/>
+ <p>...</p>
+ <p>third p</p>
+ <p>fourth p</p>
+ </chapter>
+ <chapter id="chapter2">
+ <title>Chapter 2</title>
+ <p>this is chapter 2 ...</p>
+ </chapter>
+ <chapter id="chapter3">
+ <title>Chapter 3</title>
+ <p>this is chapter 3 ...</p>
+ </chapter>
+ <chapter id="chapter4">
+ <title>Chapter 4</title>
+ <p>this is chapter 4 ...</p>
+ </chapter>
+ <chapter id="chapter5">
+ <title>Chapter 5</title>
+ <p>this is chapter 5 ...</p>
+ </chapter>
+</iddemo>
diff --git a/test/XPath/expr/base b/test/XPath/expr/base
new file mode 100644
index 0000000..9aaed4f
--- /dev/null
+++ b/test/XPath/expr/base
@@ -0,0 +1,5 @@
+1
+1+2
+2*3
+1+2*3+4
+(1+2)*(3+4)
diff --git a/test/XPath/expr/compare b/test/XPath/expr/compare
new file mode 100644
index 0000000..2d52eaf
--- /dev/null
+++ b/test/XPath/expr/compare
@@ -0,0 +1,46 @@
+0<0
+0<=0
+0>0
+0>=0
+0<1
+0<=1
+0>1
+0>=1
+1<0
+1<=0
+1>0
+1>=0
+1<1
+1<=1
+1>1
+1>=1
+'0'<1
+'0'<=1
+'0'>1
+'0'>=1
+0<'1.2'
+0<='1.2'
+0>'1.2'
+0>='1.2'
+0<'-0.2'
+0<='-0.2'
+0>'-0.2'
+0>='-0.2'
+false()<1
+false()<=1
+0>true()
+0>=true()
+'a' > 'a'
+'a' > 'b'
+'b' > 'a'
+'a' < 'a'
+'a' < 'b'
+'b' < 'a'
+'a' >= 'a'
+'a' >= 'b'
+'b' >= 'a'
+'a' <= 'a'
+'a' <= 'b'
+'b' <= 'a'
+'a' > '0.0'
+'a' < '0.0'
diff --git a/test/XPath/expr/equality b/test/XPath/expr/equality
new file mode 100644
index 0000000..7982173
--- /dev/null
+++ b/test/XPath/expr/equality
@@ -0,0 +1,26 @@
+1=1
+1!=1
+1=0
+1!=0
+true()=true()
+true()!=true()
+true()=false()
+false()!=true()
+'test'='test'
+'test'!='test'
+'test2'='test'
+'test2'!='test'
+false()=0
+false()!=0
+false()=1
+false()!=1
+0=true()
+0!=true()
+1=true()
+1!=true()
+true()='test'
+false()='test'
+'test'!=true()
+'test'!=false()
+'a'=0.0
+'a'!=0.0
diff --git a/test/XPath/expr/floats b/test/XPath/expr/floats
new file mode 100644
index 0000000..96c10d1
--- /dev/null
+++ b/test/XPath/expr/floats
@@ -0,0 +1,61 @@
+1
+123
+1.23
+0.123
+4.
+.4
+1.23e3
+1.23e-3
+1 div 0
+-1 div 0
+0 div 0
+1 div -0
+(1 div 0) > 0
+(1 div 0) < 0
+(-1 div 0) > 0
+(-1 div 0) < 0
+(0 div 0) > 0
+(0 div 0) < 0
+(1 div -0) > 0
+(1 div -0) < 0
+0 div 0 = 0 div 0
+0 div 0 != 0 div 0
+0 div 0 > 0 div 0
+0 div 0 < 0 div 0
+0 div 0 >= 0 div 0
+0 div 0 <= 0 div 0
+1 div 0 = -1 div 0
+1 div 0 != -1 div 0
+1 div 0 > -1 div 0
+1 div 0 < -1 div 0
+1 div 0 >= -1 div 0
+1 div 0 <= -1 div 0
+1 div 0 = 1 div 0
+1 div 0 != 1 div 0
+1 div 0 > 1 div 0
+1 div 0 < 1 div 0
+1 div 0 >= -1 div 0
+1 div 0 <= -1 div 0
+-2 div 0 = -1 div 0
+1 div floor(0.1)
+1 div floor(-0.1)
+1 div floor(-0)
+1 div floor(0)
+1 div ceiling(0.1)
+1 div ceiling(-0.1)
+1 div ceiling(-0)
+1 div ceiling(0)
+1 div round(0.1)
+1 div round(-0.1)
+1 div round(-0)
+1 div round(0)
+1 div number('f')
+number('f') div 1
+1 div (1 div 0)
+(1 div 0) div 1
+-(1 div 0) div 1
+5 mod 2
+5 mod -2
+-5 mod 2
+-5 mod -2
+8 mod 3 = 2
diff --git a/test/XPath/expr/functions b/test/XPath/expr/functions
new file mode 100644
index 0000000..d168b18
--- /dev/null
+++ b/test/XPath/expr/functions
@@ -0,0 +1,25 @@
+true()
+false()
+number("1.5")
+number('abc')
+-number('abc')
+floor(0.1)
+floor(-0.1)
+floor(-0)
+floor(0)
+floor(5.2)
+floor(-5.2)
+ceiling(0.1)
+ceiling(-0.1)
+ceiling(-0)
+ceiling(0)
+ceiling(5.2)
+ceiling(-5.2)
+round(0.1)
+round(5.2)
+round(5.5)
+round(5.6)
+round(-0.1)
+round(-5.2)
+round(-5.5)
+round(-5.6)
diff --git a/test/XPath/expr/strings b/test/XPath/expr/strings
new file mode 100644
index 0000000..849ca14
--- /dev/null
+++ b/test/XPath/expr/strings
@@ -0,0 +1,34 @@
+string(5)
+string(0.5)
+string(-0.5)
+string(true())
+string(false())
+concat("titi","toto")
+concat("titi","toto","tata")
+concat("titi",'toto')
+concat("titi",'toto',"tata","last")
+starts-with("tititoto","titi")
+starts-with("tititoto","to")
+contains("tititototata","titi")
+contains("tititototata","toto")
+contains("tititototata","tata")
+contains("tititototata","tita")
+substring("12345",2,3)
+substring("12345",2)
+substring("12345",-4)
+substring("12345",3.4)
+substring("12345",3.6)
+substring("12345",1.5,2.6)
+substring("12345",2.2,2.2)
+substring("12345",0,3)
+substring("12345",-8,10)
+substring("12345",4,-10)
+substring("12345",0 div 0, 3)
+substring("12345",1, 0 div 0)
+substring("12345",1 div 0, 3)
+substring("12345",3,-1 div 0)
+substring("12345",-42, 1 div 0)
+substring("12345",-1 div 0, 1 div 0)
+substring("12345",-1 div 0,5)
+string-length("")
+string-length("titi")
diff --git a/test/XPath/tests/chaptersbase b/test/XPath/tests/chaptersbase
new file mode 100644
index 0000000..daa53b7
--- /dev/null
+++ b/test/XPath/tests/chaptersbase
@@ -0,0 +1,9 @@
+/child::EXAMPLE
+/child::*
+/child::EXAMPLE/child::head
+/child::EXAMPLE/child::*
+/child::EXAMPLE/child::head/child::title
+/child::EXAMPLE/child::head/child::title/child::text()
+/child::EXAMPLE/child::head/node()
+/descendant::title
+/descendant::p/ancestor::chapter
diff --git a/test/XPath/tests/chaptersprefol b/test/XPath/tests/chaptersprefol
new file mode 100644
index 0000000..8f1e65b
--- /dev/null
+++ b/test/XPath/tests/chaptersprefol
@@ -0,0 +1,8 @@
+/following::*
+/preceding::*
+/child::EXAMPLE/preceding::*
+/child::EXAMPLE/following::*
+/child::EXAMPLE/child::chapter[3]/preceding::*
+/child::EXAMPLE/child::chapter[3]/following::*
+/child::EXAMPLE/child::chapter[1]/image/preceding::*
+/child::EXAMPLE/child::chapter[1]/image/following::*
diff --git a/test/XPath/tests/idsimple b/test/XPath/tests/idsimple
new file mode 100644
index 0000000..2841ae9
--- /dev/null
+++ b/test/XPath/tests/idsimple
@@ -0,0 +1,3 @@
+//*[@id="root"]
+//*[@id="chapter2"]
+//*[@id="chapter5"]
diff --git a/test/XPath/tests/simpleabbr b/test/XPath/tests/simpleabbr
new file mode 100644
index 0000000..8de476f
--- /dev/null
+++ b/test/XPath/tests/simpleabbr
@@ -0,0 +1,10 @@
+/EXAMPLE
+/EXAMPLE/head
+/EXAMPLE/chapter[1]
+//p
+//chapter/image
+//p/text()
+//p/text()[position()=1]
+//p/text()[position()=last()]
+(//p/text())[position()=1]
+(//p/text())[position()=last()]
diff --git a/test/XPath/tests/simplebase b/test/XPath/tests/simplebase
new file mode 100644
index 0000000..7e4203a
--- /dev/null
+++ b/test/XPath/tests/simplebase
@@ -0,0 +1,9 @@
+/child::*
+/child::EXAMPLE
+/child::EXAMPLE/child::head
+/child::EXAMPLE/child::*
+/child::EXAMPLE/child::head/child::title
+/child::EXAMPLE/child::head/child::title/child::text()
+/child::EXAMPLE/child::head/node()
+/descendant::title
+/descendant::p/ancestor::chapter
diff --git a/test/XPath/tests/usr1check b/test/XPath/tests/usr1check
new file mode 100644
index 0000000..c38d003
--- /dev/null
+++ b/test/XPath/tests/usr1check
@@ -0,0 +1 @@
+//ITEM[1]
diff --git a/test/XPath/tests/vidbase b/test/XPath/tests/vidbase
new file mode 100644
index 0000000..5cd79ac
--- /dev/null
+++ b/test/XPath/tests/vidbase
@@ -0,0 +1,5 @@
+id('chapter1')
+id('chapter3')
+id('chapter1')/p
+id('chapter1')//p
+id('chapter1')/p[1]
diff --git a/test/XPath/xptr/chapterschildseq b/test/XPath/xptr/chapterschildseq
new file mode 100644
index 0000000..3b52f5f
--- /dev/null
+++ b/test/XPath/xptr/chapterschildseq
@@ -0,0 +1,8 @@
+/1/2/3
+element(/1/2/3)
+element(foo)element(/1/2/3)
+element(/1/2/3)element(foo)
+chapter1/3
+element(chapter1/3)
+element(foo)element(chapter1/3)
+element(chapter1/3)element(foo)
diff --git a/test/XPath/xptr/chaptersparts b/test/XPath/xptr/chaptersparts
new file mode 100644
index 0000000..aadc47c
--- /dev/null
+++ b/test/XPath/xptr/chaptersparts
@@ -0,0 +1,6 @@
+xpointer(//chapitre[2])
+xpointer(//chapter[2])
+xpointer(//chapitre[2])xpointer(//chapter[2])
+xpointer(id("chapter1"))
+xpointer(//*[@id="chapter1"])
+xpointer(id("chapter1"))xpointer(//*[@id="chapter1"])
diff --git a/test/XPath/xptr/chaptersrange b/test/XPath/xptr/chaptersrange
new file mode 100644
index 0000000..4d7a55b
--- /dev/null
+++ b/test/XPath/xptr/chaptersrange
@@ -0,0 +1,4 @@
+xpointer(//chapter[position() = 2]/range-to(following::chapter[1]))
+xpointer(//chapter[position() <= 2]/range-to(following::chapter[1]))
+xpointer(//chapter[position() = last()]/range-to(following::chapter[1]))
+xpointer(//chapter[position() = 3]/range-to(/.//chapter[position() = 1]))
diff --git a/test/XPath/xptr/strpoint b/test/XPath/xptr/strpoint
new file mode 100644
index 0000000..0916ef1
--- /dev/null
+++ b/test/XPath/xptr/strpoint
@@ -0,0 +1,9 @@
+xpointer(start-point(string-range(//p,'multiple')))
+xpointer(end-point(string-range(//p,'multiple')))
+xpointer(start-point(string-range(//p,'test')))
+xpointer(end-point(string-range(//p,'test')))
+xpointer(start-point(string-range(//*,'multiple',1,0)))
+xpointer(end-point(string-range(//*,'multiple',1,0)))
+xpointer(start-point(string-range(//*,'multiple',1,1)))
+xpointer(end-point(string-range(//*,'multiple',1,1)))
+xpointer(start-point(string-range(//p,'test'))[1])
diff --git a/test/XPath/xptr/strrange b/test/XPath/xptr/strrange
new file mode 100644
index 0000000..3231927
--- /dev/null
+++ b/test/XPath/xptr/strrange
@@ -0,0 +1,6 @@
+xpointer(string-range(//p, 'simple'))
+xpointer(string-range(//p, 'test'))
+xpointer(string-range(//p, 'difficult'))
+xpointer(string-range(//p, 'spanning'))
+xpointer(string-range(//p, 'unbalanced'))
+xpointer(string-range(//seq, ''))
diff --git a/test/XPath/xptr/strrange2 b/test/XPath/xptr/strrange2
new file mode 100644
index 0000000..5133547
--- /dev/null
+++ b/test/XPath/xptr/strrange2
@@ -0,0 +1,3 @@
+xpointer(string-range(//p, 'test', 2))
+xpointer(string-range(//p, 'test', 2, 2))
+xpointer(string-range(//p, 'difficult', 1, 0))
diff --git a/test/XPath/xptr/strrange3 b/test/XPath/xptr/strrange3
new file mode 100644
index 0000000..aea5665
--- /dev/null
+++ b/test/XPath/xptr/strrange3
@@ -0,0 +1,4 @@
+xpointer(string-range(//p, 'test', 1, 0))
+xpointer(string-range(//*, 'test', 1, 0))
+xpointer(string-range(//p, 'test', 1, 0)[2])
+xpointer(string-range(//*, 'test', 1, 0)[2])
diff --git a/test/XPath/xptr/vidbase b/test/XPath/xptr/vidbase
new file mode 100644
index 0000000..b146383
--- /dev/null
+++ b/test/XPath/xptr/vidbase
@@ -0,0 +1,2 @@
+xpointer(id('chapter1')/p)
+xpointer(id('chapter1')/p[1]/range-to(following-sibling::p[2]))
diff --git a/test/XPath/xptr/vidchildseq b/test/XPath/xptr/vidchildseq
new file mode 100644
index 0000000..fe205dc
--- /dev/null
+++ b/test/XPath/xptr/vidchildseq
@@ -0,0 +1,4 @@
+/1/2/3
+element(/1/2/3)
+chapter1/3
+element(chapter1/3)
diff --git a/test/XPath/xptr/vidparts b/test/XPath/xptr/vidparts
new file mode 100644
index 0000000..3afbbdd
--- /dev/null
+++ b/test/XPath/xptr/vidparts
@@ -0,0 +1,3 @@
+xpointer(id("chapter1"))
+xpointer(//*[@id="chapter1"])
+xpointer(id("chapter1"))xpointer(//*[@id="chapter1"])
diff --git a/test/att1 b/test/att1
new file mode 100644
index 0000000..609e5cc
--- /dev/null
+++ b/test/att1
@@ -0,0 +1,2 @@
+<doc attr="to normalize
+with a space"/>
diff --git a/test/att2 b/test/att2
new file mode 100644
index 0000000..e630ff5
--- /dev/null
+++ b/test/att2
@@ -0,0 +1 @@
+<doc attr="to normalize with a space"/>
diff --git a/test/att3 b/test/att3
new file mode 100644
index 0000000..d576fec
--- /dev/null
+++ b/test/att3
@@ -0,0 +1 @@
+<select onclick="aaaa&#10; bbbb&#160;">f&#160;oo</select>
diff --git a/test/att4 b/test/att4
new file mode 100644
index 0000000..2e8bbca
--- /dev/null
+++ b/test/att4
@@ -0,0 +1,9264 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XML Spy v4.4 U (http://www.xmlspy.com) by Slava (GIVC) -->
+<electroxml modified="20021216T072726">
+ <data from="20021031T22" to="20021130T22">
+ <select>
+ <device serialnumb="E00003562">
+ <par memind="113400" h="3dc1a8de">
+ <val o="0" v="53"/>
+ <val o="e08" v="53"/>
+ <val o="1c32" v="53"/>
+ <val o="2a3c" v="53"/>
+ <val o="3835" v="53"/>
+ <val o="4645" v="53"/>
+ <val o="5455" v="53"/>
+ <val o="6265" v="53"/>
+ <val o="7075" v="53"/>
+ <val o="7e85" v="53"/>
+ <val o="8c96" v="53"/>
+ <val o="9aa5" v="53"/>
+ <val o="a8b6" v="53"/>
+ <val o="b6c5" v="53"/>
+ <val o="c4d7" v="53"/>
+ <val o="d30b" v="53"/>
+ <val o="e0f6" v="53"/>
+ <val o="ef06" v="53"/>
+ <val o="fd17" v="53"/>
+ <val o="10b27" v="53"/>
+ <val o="11937" v="53"/>
+ <val o="12746" v="53"/>
+ <val o="13556" v="53"/>
+ <val o="14366" v="53"/>
+ <val o="15181" v="53"/>
+ <val o="15f85" v="53"/>
+ <val o="16d95" v="53"/>
+ <val o="17ba4" v="53"/>
+ <val o="189b5" v="53"/>
+ <val o="197c4" v="53"/>
+ <val o="1a5d5" v="53"/>
+ <val o="1b3e6" v="53"/>
+ <val o="1c1f6" v="53"/>
+ <val o="1d005" v="53"/>
+ <val o="1de15" v="53"/>
+ <val o="1ec25" v="53"/>
+ <val o="1fa36" v="53"/>
+ <val o="20845" v="53"/>
+ <val o="21656" v="53"/>
+ <val o="22465" v="53"/>
+ <val o="23276" v="53"/>
+ <val o="24086" v="53"/>
+ <val o="24e99" v="53"/>
+ <val o="25ca7" v="53"/>
+ <val o="26ab7" v="53"/>
+ <val o="278c6" v="53"/>
+ <val o="286d6" v="53"/>
+ <val o="294e6" v="53"/>
+ <val o="2a301" v="53"/>
+ <val o="2b105" v="53"/>
+ <val o="2bf15" v="53"/>
+ <val o="2cd25" v="53"/>
+ <val o="2db35" v="53"/>
+ <val o="2e946" v="53"/>
+ <val o="2f755" v="53"/>
+ <val o="30566" v="53"/>
+ <val o="31375" v="53"/>
+ <val o="3219e" v="53"/>
+ <val o="32f96" v="53"/>
+ <val o="33da6" v="53"/>
+ <val o="34bb6" v="53"/>
+ <val o="359de" v="53"/>
+ <val o="367d6" v="53"/>
+ <val o="375e6" v="53"/>
+ <val o="3840e" v="53"/>
+ <val o="3921e" v="53"/>
+ <val o="3a016" v="53"/>
+ <val o="3ae27" v="53"/>
+ <val o="3bc36" v="53"/>
+ <val o="3ca47" v="53"/>
+ <val o="3d856" v="53"/>
+ <val o="3e667" v="53"/>
+ <val o="3f481" v="53"/>
+ <val o="40285" v="53"/>
+ <val o="41095" v="53"/>
+ <val o="41ea5" v="53"/>
+ <val o="42cb5" v="53"/>
+ <val o="43ac5" v="53"/>
+ <val o="448d5" v="53"/>
+ <val o="456e6" v="53"/>
+ <val o="464f5" v="53"/>
+ <val o="480ff" v="53"/>
+ <val o="48f0e" v="53"/>
+ <val o="49d1d" v="53"/>
+ <val o="4ab46" v="53"/>
+ <val o="4b955" v="53"/>
+ <val o="4c769" v="53"/>
+ <val o="4d577" v="53"/>
+ <val o="4e387" v="53"/>
+ <val o="4f196" v="53"/>
+ <val o="4ffa6" v="53"/>
+ <val o="50dd0" v="53"/>
+ <val o="51bc6" v="53"/>
+ <val o="529d6" v="53"/>
+ <val o="537e7" v="53"/>
+ <val o="54600" v="53"/>
+ <val o="55406" v="53"/>
+ <val o="56215" v="53"/>
+ <val o="57026" v="53"/>
+ <val o="57e36" v="53"/>
+ <val o="58c46" v="53"/>
+ <val o="59a70" v="53"/>
+ <val o="5a867" v="53"/>
+ <val o="5b676" v="53"/>
+ <val o="5c487" v="53"/>
+ <val o="5d296" v="53"/>
+ <val o="5e0a9" v="53"/>
+ <val o="5eeb8" v="53"/>
+ <val o="5fcc6" v="53"/>
+ <val o="60ad7" v="53"/>
+ <val o="618e7" v="53"/>
+ <val o="626f7" v="53"/>
+ <val o="63507" v="53"/>
+ <val o="64317" v="53"/>
+ <val o="65127" v="53"/>
+ <val o="65f37" v="53"/>
+ <val o="66d46" v="53"/>
+ <val o="67b57" v="53"/>
+ <val o="68967" v="53"/>
+ <val o="69782" v="53"/>
+ <val o="6a586" v="53"/>
+ <val o="6b395" v="53"/>
+ <val o="6c1a6" v="53"/>
+ <val o="6cfb5" v="53"/>
+ <val o="6ddc6" v="53"/>
+ <val o="6ebd6" v="53"/>
+ <val o="6f9e6" v="53"/>
+ <val o="707f6" v="53"/>
+ <val o="71607" v="53"/>
+ <val o="72417" v="53"/>
+ <val o="73227" v="53"/>
+ <val o="74037" v="53"/>
+ <val o="74e47" v="53"/>
+ <val o="75c57" v="53"/>
+ <val o="76a63" v="53"/>
+ <val o="77873" v="53"/>
+ <val o="78680" v="53"/>
+ <val o="7948f" v="53"/>
+ <val o="7a29f" v="53"/>
+ <val o="7b0af" v="53"/>
+ <val o="7bebf" v="53"/>
+ <val o="7cccf" v="53"/>
+ <val o="7dadf" v="53"/>
+ <val o="7e8fa" v="53"/>
+ <val o="7f70a" v="53"/>
+ <val o="8051a" v="53"/>
+ <val o="8132a" v="53"/>
+ <val o="8213a" v="53"/>
+ <val o="82f4a" v="53"/>
+ <val o="83d5a" v="53"/>
+ <val o="84b6a" v="53"/>
+ <val o="8597a" v="53"/>
+ <val o="8678b" v="53"/>
+ <val o="8759b" v="53"/>
+ <val o="883ac" v="53"/>
+ <val o="891bb" v="53"/>
+ <val o="89fca" v="53"/>
+ <val o="8adda" v="53"/>
+ <val o="8bbeb" v="53"/>
+ <val o="8c9fc" v="53"/>
+ <val o="8d80b" v="53"/>
+ <val o="8e61a" v="53"/>
+ <val o="8f42a" v="53"/>
+ <val o="9023a" v="53"/>
+ <val o="9104a" v="53"/>
+ <val o="91e5a" v="53"/>
+ <val o="92c6a" v="53"/>
+ <val o="93a84" v="53"/>
+ <val o="94885" v="53"/>
+ <val o="95694" v="53"/>
+ <val o="964a5" v="53"/>
+ <val o="972b4" v="53"/>
+ <val o="980c5" v="53"/>
+ <val o="98ed4" v="53"/>
+ <val o="99ce5" v="53"/>
+ <val o="9aaf5" v="53"/>
+ <val o="9b906" v="53"/>
+ <val o="9c716" v="53"/>
+ <val o="9d526" v="53"/>
+ <val o="9e336" v="53"/>
+ <val o="9f145" v="53"/>
+ <val o="9ff56" v="53"/>
+ <val o="a0d65" v="53"/>
+ <val o="a1b77" v="53"/>
+ <val o="a2986" v="53"/>
+ <val o="a3795" v="53"/>
+ <val o="a45a7" v="53"/>
+ <val o="a53b6" v="53"/>
+ <val o="a61c7" v="53"/>
+ <val o="a6fd6" v="53"/>
+ <val o="a7e00" v="53"/>
+ <val o="a8c00" v="53"/>
+ <val o="a9a05" v="53"/>
+ <val o="aa815" v="53"/>
+ <val o="ab625" v="53"/>
+ <val o="ac435" v="53"/>
+ <val o="ad245" v="53"/>
+ <val o="ae055" v="53"/>
+ <val o="aee65" v="53"/>
+ <val o="afc75" v="53"/>
+ <val o="b0a85" v="53"/>
+ <val o="b26a6" v="53"/>
+ <val o="b34b6" v="53"/>
+ <val o="b42c6" v="53"/>
+ <val o="b50d6" v="53"/>
+ <val o="b5ee7" v="53"/>
+ <val o="b6cf6" v="53"/>
+ <val o="b7b07" v="53"/>
+ <val o="b8917" v="53"/>
+ <val o="b9728" v="53"/>
+ <val o="ba537" v="53"/>
+ <val o="bb347" v="53"/>
+ <val o="bc157" v="53"/>
+ <val o="bcf67" v="53"/>
+ <val o="bdd81" v="53"/>
+ <val o="beb86" v="53"/>
+ <val o="bf995" v="53"/>
+ <val o="c07a6" v="53"/>
+ <val o="c15b5" v="53"/>
+ <val o="c23c6" v="53"/>
+ <val o="c31d5" v="53"/>
+ <val o="c3fe6" v="53"/>
+ <val o="c4df5" v="53"/>
+ <val o="c5c06" v="53"/>
+ <val o="c6a16" v="53"/>
+ <val o="c7826" v="53"/>
+ <val o="c8636" v="53"/>
+ <val o="c9446" v="53"/>
+ <val o="ca256" v="53"/>
+ <val o="cb066" v="53"/>
+ <val o="cbe76" v="53"/>
+ <val o="ccc87" v="53"/>
+ <val o="cda96" v="53"/>
+ <val o="ce8a8" v="53"/>
+ <val o="cf6b7" v="53"/>
+ <val o="d04c8" v="53"/>
+ <val o="d12d7" v="53"/>
+ <val o="d20e7" v="53"/>
+ <val o="d2f02" v="53"/>
+ <val o="d3d05" v="53"/>
+ <val o="d4b15" v="53"/>
+ <val o="d5926" v="53"/>
+ <val o="d6735" v="53"/>
+ <val o="d7546" v="53"/>
+ <val o="d8355" v="53"/>
+ <val o="d9166" v="53"/>
+ <val o="d9f75" v="53"/>
+ <val o="dad87" v="53"/>
+ <val o="dbb97" v="53"/>
+ <val o="dc9a8" v="53"/>
+ <val o="dd7b7" v="53"/>
+ <val o="de5c6" v="53"/>
+ <val o="df3d7" v="53"/>
+ <val o="e01d7" v="53"/>
+ <val o="e0fe5" v="53"/>
+ <val o="e1df5" v="53"/>
+ <val o="e2c04" v="53"/>
+ <val o="e3a14" v="53"/>
+ <val o="e4824" v="53"/>
+ <val o="e5634" v="53"/>
+ <val o="e6444" v="53"/>
+ <val o="e7255" v="53"/>
+ <val o="e806f" v="53"/>
+ <val o="e8e7f" v="53"/>
+ <val o="e9c8e" v="53"/>
+ <val o="eaa9f" v="53"/>
+ <val o="eb8ae" v="53"/>
+ <val o="ec6bf" v="53"/>
+ <val o="ed4ce" v="53"/>
+ <val o="ee2df" v="53"/>
+ <val o="ef0ef" v="53"/>
+ <val o="eff01" v="53"/>
+ <val o="f0d10" v="53"/>
+ <val o="f1b20" v="53"/>
+ <val o="f2930" v="53"/>
+ <val o="f3740" v="53"/>
+ <val o="f4551" v="53"/>
+ <val o="f5361" v="53"/>
+ <val o="f6172" v="53"/>
+ <val o="f6f80" v="53"/>
+ <val o="f7d91" v="53"/>
+ <val o="f8ba1" v="53"/>
+ <val o="f99b1" v="53"/>
+ <val o="fa7c0" v="53"/>
+ <val o="fb5d1" v="53"/>
+ <val o="fc3e0" v="53"/>
+ <val o="fd1fb" v="53"/>
+ <val o="fe00b" v="53"/>
+ <val o="fee1c" v="53"/>
+ <val o="ffc2c" v="53"/>
+ <val o="100a3b" v="53"/>
+ <val o="10184c" v="53"/>
+ <val o="10265b" v="53"/>
+ <val o="10346c" v="53"/>
+ <val o="10427b" v="53"/>
+ <val o="10508d" v="53"/>
+ <val o="105e9d" v="53"/>
+ <val o="106cad" v="53"/>
+ <val o="107abd" v="53"/>
+ <val o="1088cd" v="53"/>
+ <val o="1096de" v="53"/>
+ <val o="10a4ed" v="53"/>
+ <val o="10b2fe" v="53"/>
+ <val o="10c10d" v="53"/>
+ <val o="10cf1e" v="53"/>
+ <val o="10dd2e" v="53"/>
+ <val o="10eb66" v="53"/>
+ <val o="10f94e" v="53"/>
+ <val o="11075e" v="53"/>
+ <val o="11156d" v="53"/>
+ <val o="112388" v="53"/>
+ <val o="113187" v="53"/>
+ <val o="113fb0" v="53"/>
+ <val o="114da6" v="53"/>
+ <val o="115bb6" v="53"/>
+ <val o="1169c6" v="53"/>
+ <val o="1177d6" v="53"/>
+ <val o="1185e8" v="53"/>
+ <val o="1193f7" v="53"/>
+ <val o="11a208" v="53"/>
+ <val o="11b017" v="53"/>
+ <val o="11be2f" v="53"/>
+ <val o="11cc37" v="53"/>
+ <val o="11da47" v="53"/>
+ <val o="11e857" v="53"/>
+ <val o="11f667" v="53"/>
+ <val o="120578" v="53"/>
+ <val o="121386" v="53"/>
+ <val o="122196" v="53"/>
+ <val o="122fa6" v="53"/>
+ <val o="123db5" v="53"/>
+ <val o="124bc5" v="53"/>
+ <val o="1259d5" v="53"/>
+ <val o="1267e4" v="53"/>
+ <val o="127600" v="53"/>
+ <val o="128305" v="53"/>
+ <val o="129115" v="53"/>
+ <val o="129f25" v="53"/>
+ <val o="12ad35" v="53"/>
+ <val o="12bb45" v="53"/>
+ <val o="12c954" v="53"/>
+ <val o="12d766" v="53"/>
+ <val o="12e575" v="53"/>
+ <val o="12f386" v="53"/>
+ <val o="130196" v="53"/>
+ <val o="130fa6" v="53"/>
+ <val o="131db7" v="53"/>
+ <val o="132bc5" v="53"/>
+ <val o="1339d4" v="53"/>
+ <val o="1347e5" v="53"/>
+ <val o="1355f4" v="53"/>
+ <val o="136404" v="53"/>
+ <val o="137214" v="53"/>
+ <val o="138024" v="53"/>
+ <val o="138e33" v="53"/>
+ <val o="139c44" v="53"/>
+ <val o="13aa54" v="53"/>
+ <val o="13b865" v="53"/>
+ <val o="13c67e" v="53"/>
+ <val o="13d48e" v="53"/>
+ <val o="13e29e" v="53"/>
+ <val o="13f0ae" v="53"/>
+ <val o="13febf" v="53"/>
+ <val o="140ccf" v="53"/>
+ <val o="141adf" v="53"/>
+ <val o="1428ef" v="53"/>
+ <val o="1436ff" v="53"/>
+ <val o="14450f" v="53"/>
+ <val o="14531f" v="53"/>
+ <val o="146130" v="53"/>
+ <val o="146f40" v="53"/>
+ <val o="147d44" v="53"/>
+ <val o="148b57" v="53"/>
+ <val o="149965" v="53"/>
+ <val o="14a775" v="53"/>
+ <val o="14b584" v="53"/>
+ <val o="14c397" v="53"/>
+ <val o="14d1a4" v="53"/>
+ <val o="14dfb6" v="53"/>
+ <val o="14edc5" v="53"/>
+ <val o="14fbd5" v="53"/>
+ <val o="1509e5" v="53"/>
+ <val o="1517ff" v="53"/>
+ <val o="152605" v="53"/>
+ <val o="153415" v="53"/>
+ <val o="154225" v="53"/>
+ <val o="155035" v="53"/>
+ <val o="155e45" v="53"/>
+ <val o="156c55" v="53"/>
+ <val o="157a65" v="53"/>
+ <val o="158875" v="53"/>
+ <val o="159686" v="53"/>
+ <val o="15a495" v="53"/>
+ <val o="15b2a6" v="53"/>
+ <val o="15c0b6" v="53"/>
+ <val o="15cec6" v="53"/>
+ <val o="15dcd5" v="53"/>
+ <val o="15eae6" v="53"/>
+ <val o="15f8f5" v="53"/>
+ <val o="160706" v="53"/>
+ <val o="161517" v="53"/>
+ <val o="162326" v="53"/>
+ <val o="163137" v="53"/>
+ <val o="163f46" v="53"/>
+ <val o="164d57" v="53"/>
+ <val o="165b67" v="53"/>
+ <val o="166982" v="53"/>
+ <val o="167786" v="53"/>
+ <val o="168596" v="53"/>
+ <val o="1693a6" v="53"/>
+ <val o="16a1b5" v="53"/>
+ <val o="16afc6" v="53"/>
+ <val o="16bdd5" v="53"/>
+ <val o="16cbe6" v="53"/>
+ <val o="16d9f6" v="53"/>
+ <val o="16e807" v="53"/>
+ <val o="16f616" v="53"/>
+ <val o="170429" v="53"/>
+ <val o="171236" v="53"/>
+ <val o="172047" v="53"/>
+ <val o="172e57" v="53"/>
+ <val o="173c67" v="53"/>
+ <val o="174a77" v="53"/>
+ <val o="175887" v="53"/>
+ <val o="176694" v="53"/>
+ <val o="1774a3" v="53"/>
+ <val o="1782b3" v="53"/>
+ <val o="1790c5" v="53"/>
+ <val o="179ed4" v="53"/>
+ <val o="17ace4" v="53"/>
+ <val o="17bafd" v="53"/>
+ <val o="17c90f" v="53"/>
+ <val o="17d71e" v="53"/>
+ <val o="17e52f" v="53"/>
+ <val o="17f33f" v="53"/>
+ <val o="18014f" v="53"/>
+ <val o="180f5f" v="53"/>
+ <val o="181d6e" v="53"/>
+ <val o="182b7f" v="53"/>
+ <val o="18398f" v="53"/>
+ <val o="1847a1" v="53"/>
+ <val o="1855af" v="53"/>
+ <val o="1863c0" v="53"/>
+ <val o="1871cf" v="53"/>
+ <val o="187fe0" v="53"/>
+ <val o="188def" v="53"/>
+ <val o="189c00" v="53"/>
+ <val o="18b80d" v="53"/>
+ <val o="18c61c" v="53"/>
+ <val o="18d42c" v="53"/>
+ <val o="18e23b" v="53"/>
+ <val o="18f04b" v="53"/>
+ <val o="18fe5e" v="53"/>
+ <val o="190c76" v="53"/>
+ <val o="191a86" v="53"/>
+ <val o="192896" v="53"/>
+ <val o="1936a6" v="53"/>
+ <val o="1944b7" v="53"/>
+ <val o="1952c6" v="53"/>
+ <val o="1960d7" v="53"/>
+ <val o="196ee6" v="53"/>
+ <val o="197cf8" v="53"/>
+ <val o="198b0f" v="53"/>
+ <val o="19991f" v="53"/>
+ <val o="19b541" v="53"/>
+ <val o="19c34d" v="53"/>
+ <val o="19d15e" v="53"/>
+ <val o="19df80" v="53"/>
+ <val o="19ed90" v="53"/>
+ <val o="19eebe" v="53"/>
+ <val o="19fb8e" v="53"/>
+ <val o="1a09a0" v="53"/>
+ <val o="1a17ae" v="53"/>
+ <val o="1a25be" v="53"/>
+ <val o="1a33cd" v="53"/>
+ <val o="1a41dd" v="53"/>
+ <val o="1a4fed" v="53"/>
+ <val o="1a5e08" v="53"/>
+ <val o="1a6c05" v="53"/>
+ <val o="1a7a15" v="53"/>
+ <val o="1a8826" v="53"/>
+ <val o="1a9637" v="53"/>
+ <val o="1aa445" v="53"/>
+ <val o="1ab255" v="53"/>
+ <val o="1ac065" v="53"/>
+ <val o="1ace75" v="53"/>
+ <val o="1adc87" v="53"/>
+ <val o="1aea96" v="53"/>
+ <val o="1af8a7" v="53"/>
+ <val o="1b06b7" v="53"/>
+ <val o="1b14c6" v="53"/>
+ <val o="1c7460" v="55"/>
+ <val o="1c8270" v="55"/>
+ <val o="1c907e" v="55"/>
+ <val o="1c9e8f" v="55"/>
+ <val o="1caca2" v="55"/>
+ <val o="1cbab1" v="55"/>
+ <val o="1cc8c1" v="55"/>
+ <val o="1cd6d0" v="55"/>
+ <val o="1ce4de" v="55"/>
+ <val o="1cf2f0" v="55"/>
+ <val o="1d0109" v="55"/>
+ <val o="1d0f06" v="55"/>
+ <val o="1d1d15" v="55"/>
+ <val o="1d2b25" v="55"/>
+ <val o="1d3935" v="55"/>
+ <val o="1d4745" v="55"/>
+ <val o="1d5555" v="55"/>
+ <val o="1d6366" v="55"/>
+ <val o="1d7175" v="55"/>
+ <val o="1d7f86" v="55"/>
+ <val o="1d8d95" v="55"/>
+ <val o="1d9ba6" v="55"/>
+ <val o="1da9b6" v="55"/>
+ <val o="1db7c7" v="55"/>
+ <val o="1dc5d5" v="55"/>
+ <val o="1dd3e6" v="55"/>
+ <val o="1de1f5" v="55"/>
+ <val o="1df006" v="55"/>
+ <val o="1dfe16" v="55"/>
+ <val o="1e0c26" v="55"/>
+ <val o="1e1a36" v="55"/>
+ <val o="1e2847" v="55"/>
+ <val o="1e3659" v="55"/>
+ <val o="1e4467" v="55"/>
+ <val o="1e5281" v="55"/>
+ <val o="1e6086" v="55"/>
+ <val o="1e6e96" v="55"/>
+ <val o="1e7ca6" v="55"/>
+ <val o="1e8ab5" v="55"/>
+ <val o="1e98c6" v="55"/>
+ <val o="1ea6d5" v="55"/>
+ <val o="1eb4e6" v="55"/>
+ <val o="1ec2f6" v="55"/>
+ <val o="1ed106" v="55"/>
+ <val o="1edf16" v="55"/>
+ <val o="1eed26" v="55"/>
+ <val o="1efb36" v="55"/>
+ <val o="1f0946" v="55"/>
+ <val o="1f1756" v="55"/>
+ <val o="1f2566" v="55"/>
+ <val o="1f3376" v="55"/>
+ <val o="1f4187" v="55"/>
+ <val o="1f4f96" v="55"/>
+ <val o="1f5da7" v="55"/>
+ <val o="1f6bb6" v="55"/>
+ <val o="1f79c7" v="55"/>
+ <val o="1f87d6" v="55"/>
+ <val o="1f95e7" v="55"/>
+ <val o="1fa401" v="55"/>
+ <val o="1fb204" v="55"/>
+ <val o="1fc016" v="55"/>
+ <val o="1fce25" v="55"/>
+ <val o="1fdc35" v="55"/>
+ <val o="1fea45" v="55"/>
+ <val o="1ff855" v="55"/>
+ <val o="200665" v="55"/>
+ <val o="201475" v="55"/>
+ <val o="202286" v="55"/>
+ <val o="203095" v="55"/>
+ <val o="203ea5" v="55"/>
+ <val o="204cb6" v="55"/>
+ <val o="205ac6" v="55"/>
+ <val o="2068d6" v="55"/>
+ <val o="2076e6" v="55"/>
+ <val o="2084f6" v="55"/>
+ <val o="209306" v="55"/>
+ <val o="20a116" v="55"/>
+ <val o="20af26" v="55"/>
+ <val o="20bd37" v="55"/>
+ <val o="20cb46" v="55"/>
+ <val o="20d957" v="55"/>
+ <val o="20e767" v="55"/>
+ <val o="20f581" v="55"/>
+ <val o="210386" v="55"/>
+ <val o="211194" v="55"/>
+ <val o="211fa5" v="55"/>
+ <val o="212db5" v="55"/>
+ <val o="213bc5" v="55"/>
+ <val o="2149d6" v="55"/>
+ <val o="2157e5" v="55"/>
+ <val o="2165f6" v="55"/>
+ <val o="217406" v="55"/>
+ <val o="218217" v="55"/>
+ <val o="219026" v="55"/>
+ <val o="219e39" v="55"/>
+ <val o="21ac46" v="55"/>
+ <val o="21ba57" v="55"/>
+ <val o="21c867" v="55"/>
+ <val o="21d677" v="55"/>
+ <val o="21e487" v="55"/>
+ <val o="21f296" v="55"/>
+ <val o="2200a6" v="55"/>
+ <val o="220eb7" v="55"/>
+ <val o="221cc6" v="55"/>
+ <val o="222ad7" v="55"/>
+ <val o="2238e7" v="55"/>
+ <val o="224701" v="55"/>
+ <val o="225505" v="55"/>
+ <val o="226315" v="55"/>
+ <val o="227125" v="55"/>
+ <val o="227f35" v="55"/>
+ <val o="228d45" v="55"/>
+ <val o="229b54" v="55"/>
+ <val o="22a965" v="55"/>
+ <val o="22b776" v="55"/>
+ <val o="22c586" v="55"/>
+ <val o="22d397" v="55"/>
+ <val o="22e1a6" v="55"/>
+ <val o="22efb6" v="55"/>
+ <val o="22fdc7" v="55"/>
+ <val o="230bd7" v="55"/>
+ <val o="2319e6" v="55"/>
+ <val o="2327f6" v="55"/>
+ <val o="23361b" v="55"/>
+ <val o="234416" v="55"/>
+ <val o="235226" v="55"/>
+ <val o="236037" v="55"/>
+ <val o="236e46" v="55"/>
+ <val o="237c57" v="55"/>
+ <val o="238a66" v="55"/>
+ <val o="239881" v="55"/>
+ <val o="23a685" v="55"/>
+ <val o="23b495" v="55"/>
+ <val o="23c2a4" v="55"/>
+ <val o="23d0b5" v="55"/>
+ <val o="23dec4" v="55"/>
+ <val o="23ecd5" v="55"/>
+ <val o="23fae4" v="55"/>
+ <val o="2408f6" v="55"/>
+ <val o="241706" v="55"/>
+ <val o="242518" v="55"/>
+ <val o="243325" v="55"/>
+ <val o="244137" v="55"/>
+ <val o="244f46" v="55"/>
+ <val o="246b66" v="55"/>
+ <val o="247976" v="55"/>
+ <val o="248786" v="55"/>
+ <val o="24957e" v="55"/>
+ <val o="24a38f" v="55"/>
+ <val o="24b19c" v="55"/>
+ <val o="24bfac" v="55"/>
+ <val o="24cdbc" v="55"/>
+ <val o="24dbcd" v="55"/>
+ <val o="24e9e5" v="55"/>
+ <val o="24f808" v="55"/>
+ <val o="250616" v="55"/>
+ <val o="251426" v="55"/>
+ <val o="252236" v="55"/>
+ <val o="253047" v="55"/>
+ <val o="253e56" v="55"/>
+ <val o="254c67" v="55"/>
+ <val o="255a76" v="55"/>
+ <val o="256887" v="55"/>
+ <val o="257697" v="55"/>
+ <val o="2584a8" v="55"/>
+ <val o="2592b6" v="55"/>
+ <val o="25a0c7" v="55"/>
+ <val o="25aed7" v="55"/>
+ <val o="25bce7" v="55"/>
+ <val o="25caf8" v="55"/>
+ <val o="25d907" v="55"/>
+ <val o="25e718" v="55"/>
+ <val o="25f527" v="55"/>
+ <val o="260338" v="55"/>
+ <val o="261149" v="55"/>
+ <val o="261f59" v="55"/>
+ <val o="262d68" v="55"/>
+ <val o="263b83" v="55"/>
+ <val o="264986" v="55"/>
+ <val o="265795" v="55"/>
+ <val o="2665a6" v="55"/>
+ <val o="2673b5" v="55"/>
+ <val o="2681c6" v="55"/>
+ <val o="268fd5" v="55"/>
+ <val o="269de6" v="55"/>
+ <val o="26abf6" v="55"/>
+ <val o="26ba06" v="55"/>
+ <val o="26c817" v="55"/>
+ <val o="26d62b" v="55"/>
+ <val o="26e436" v="55"/>
+ <val o="26f247" v="55"/>
+ <val o="270057" v="55"/>
+ <val o="270e67" v="55"/>
+ <val o="271c77" v="55"/>
+ <val o="272a87" v="55"/>
+ <val o="273897" v="55"/>
+ <val o="2746a8" v="55"/>
+ <val o="2754b9" v="55"/>
+ <val o="2762c7" v="55"/>
+ <val o="2770d8" v="55"/>
+ <val o="277ee7" v="55"/>
+ </par>
+ <par memind="16936600" h="3dc1a8de">
+ <val o="0" v="196.4"/>
+ <val o="e08" v="199.5"/>
+ <val o="1c32" v="200.8"/>
+ <val o="2a3c" v="201.8"/>
+ <val o="3835" v="199.9"/>
+ <val o="4645" v="197.9"/>
+ <val o="5455" v="193.2"/>
+ <val o="6265" v="197.6"/>
+ <val o="7075" v="195.6"/>
+ <val o="7e85" v="192.7"/>
+ <val o="8c96" v="195.3"/>
+ <val o="9aa5" v="195.4"/>
+ <val o="a8b6" v="195.6"/>
+ <val o="b6c5" v="197.3"/>
+ <val o="c4d7" v="222.6"/>
+ <val o="d30b" v="220.9"/>
+ <val o="e0f6" v="222.8"/>
+ <val o="ef06" v="180"/>
+ <val o="fd17" v="180"/>
+ <val o="10b27" v="221.4"/>
+ <val o="11937" v="222.2"/>
+ <val o="12746" v="222.5"/>
+ <val o="13556" v="220.5"/>
+ <val o="14366" v="220.8"/>
+ <val o="15181" v="220"/>
+ <val o="15f85" v="221.2"/>
+ <val o="16d95" v="220.3"/>
+ <val o="17ba4" v="221.1"/>
+ <val o="189b5" v="220.6"/>
+ <val o="197c4" v="220.9"/>
+ <val o="1a5d5" v="219.2"/>
+ <val o="1b3e6" v="219.3"/>
+ <val o="1c1f6" v="220.5"/>
+ <val o="1d005" v="220.7"/>
+ <val o="1de15" v="220.1"/>
+ <val o="1ec25" v="220.4"/>
+ <val o="1fa36" v="220.1"/>
+ <val o="20845" v="220.1"/>
+ <val o="21656" v="220.7"/>
+ <val o="22465" v="220.7"/>
+ <val o="23276" v="220.5"/>
+ <val o="24086" v="180"/>
+ <val o="24e99" v="222"/>
+ <val o="25ca7" v="221.8"/>
+ <val o="26ab7" v="220.6"/>
+ <val o="278c6" v="180"/>
+ <val o="286d6" v="220.8"/>
+ <val o="294e6" v="218.9"/>
+ <val o="2a301" v="220"/>
+ <val o="2b105" v="180"/>
+ <val o="2bf15" v="180"/>
+ <val o="2cd25" v="218.8"/>
+ <val o="2db35" v="180"/>
+ <val o="2e946" v="180"/>
+ <val o="2f755" v="180"/>
+ <val o="30566" v="219.9"/>
+ <val o="31375" v="220.5"/>
+ <val o="3219e" v="219.7"/>
+ <val o="32f96" v="220.8"/>
+ <val o="33da6" v="220.6"/>
+ <val o="34bb6" v="219"/>
+ <val o="359de" v="220.3"/>
+ <val o="367d6" v="219.3"/>
+ <val o="375e6" v="180"/>
+ <val o="3840e" v="180"/>
+ <val o="3921e" v="180"/>
+ <val o="3a016" v="180"/>
+ <val o="3ae27" v="220.9"/>
+ <val o="3bc36" v="220.1"/>
+ <val o="3ca47" v="180"/>
+ <val o="3d856" v="221.4"/>
+ <val o="3e667" v="220.2"/>
+ <val o="3f481" v="217.6"/>
+ <val o="40285" v="218.4"/>
+ <val o="41095" v="218.1"/>
+ <val o="41ea5" v="218.7"/>
+ <val o="42cb5" v="219.9"/>
+ <val o="43ac5" v="218.7"/>
+ <val o="448d5" v="180"/>
+ <val o="456e6" v="220.7"/>
+ <val o="464f5" v="222.7"/>
+ <val o="480ff" v="180"/>
+ <val o="48f0e" v="180"/>
+ <val o="49d1d" v="180"/>
+ <val o="4ab46" v="180"/>
+ <val o="4b955" v="180"/>
+ <val o="4c769" v="180"/>
+ <val o="4d577" v="180"/>
+ <val o="4e387" v="180"/>
+ <val o="4f196" v="180"/>
+ <val o="4ffa6" v="180"/>
+ <val o="50dd0" v="180"/>
+ <val o="51bc6" v="180"/>
+ <val o="529d6" v="180"/>
+ <val o="537e7" v="220.5"/>
+ <val o="54600" v="218.9"/>
+ <val o="55406" v="219.3"/>
+ <val o="56215" v="219.6"/>
+ <val o="57026" v="219.3"/>
+ <val o="57e36" v="219.7"/>
+ <val o="58c46" v="220.4"/>
+ <val o="59a70" v="220.5"/>
+ <val o="5a867" v="221.8"/>
+ <val o="5b676" v="180"/>
+ <val o="5c487" v="180"/>
+ <val o="5d296" v="180"/>
+ <val o="5e0a9" v="222.5"/>
+ <val o="5eeb8" v="224.5"/>
+ <val o="5fcc6" v="223.6"/>
+ <val o="60ad7" v="180"/>
+ <val o="618e7" v="180"/>
+ <val o="626f7" v="180"/>
+ <val o="63507" v="180"/>
+ <val o="64317" v="180"/>
+ <val o="65127" v="222.3"/>
+ <val o="65f37" v="222.6"/>
+ <val o="66d46" v="220.8"/>
+ <val o="67b57" v="220.8"/>
+ <val o="68967" v="220.2"/>
+ <val o="69782" v="220.2"/>
+ <val o="6a586" v="219.3"/>
+ <val o="6b395" v="219.8"/>
+ <val o="6c1a6" v="219"/>
+ <val o="6cfb5" v="218.7"/>
+ <val o="6ddc6" v="220.7"/>
+ <val o="6ebd6" v="180"/>
+ <val o="6f9e6" v="221.8"/>
+ <val o="707f6" v="222.8"/>
+ <val o="71607" v="180"/>
+ <val o="72417" v="180"/>
+ <val o="73227" v="180"/>
+ <val o="74037" v="223.8"/>
+ <val o="74e47" v="223.4"/>
+ <val o="75c57" v="180"/>
+ <val o="76a63" v="180"/>
+ <val o="77873" v="180"/>
+ <val o="78680" v="180"/>
+ <val o="7948f" v="180"/>
+ <val o="7a29f" v="180"/>
+ <val o="7b0af" v="222.1"/>
+ <val o="7bebf" v="221"/>
+ <val o="7cccf" v="219.5"/>
+ <val o="7dadf" v="219.9"/>
+ <val o="7e8fa" v="220.8"/>
+ <val o="7f70a" v="220.8"/>
+ <val o="8051a" v="217.9"/>
+ <val o="8132a" v="219"/>
+ <val o="8213a" v="218.6"/>
+ <val o="82f4a" v="219.4"/>
+ <val o="83d5a" v="219.7"/>
+ <val o="84b6a" v="180"/>
+ <val o="8597a" v="180"/>
+ <val o="8678b" v="180"/>
+ <val o="8759b" v="180"/>
+ <val o="883ac" v="223.1"/>
+ <val o="891bb" v="222"/>
+ <val o="89fca" v="224.2"/>
+ <val o="8adda" v="180"/>
+ <val o="8bbeb" v="180"/>
+ <val o="8c9fc" v="180"/>
+ <val o="8d80b" v="180"/>
+ <val o="8e61a" v="180"/>
+ <val o="8f42a" v="180"/>
+ <val o="9023a" v="180"/>
+ <val o="9104a" v="220.4"/>
+ <val o="91e5a" v="180"/>
+ <val o="92c6a" v="219.6"/>
+ <val o="93a84" v="219.2"/>
+ <val o="94885" v="219"/>
+ <val o="95694" v="218.5"/>
+ <val o="964a5" v="219.3"/>
+ <val o="972b4" v="219.4"/>
+ <val o="980c5" v="221"/>
+ <val o="98ed4" v="220.7"/>
+ <val o="99ce5" v="180"/>
+ <val o="9aaf5" v="180"/>
+ <val o="9b906" v="225.2"/>
+ <val o="9c716" v="225"/>
+ <val o="9d526" v="222.6"/>
+ <val o="9e336" v="223.6"/>
+ <val o="9f145" v="224.1"/>
+ <val o="9ff56" v="223.2"/>
+ <val o="a0d65" v="180"/>
+ <val o="a1b77" v="195.9"/>
+ <val o="a2986" v="190"/>
+ <val o="a3795" v="122.3"/>
+ <val o="a45a7" v="354.6"/>
+ <val o="a53b6" v="333.2"/>
+ <val o="a61c7" v="323.3"/>
+ <val o="a6fd6" v="278.1"/>
+ <val o="a7e00" v="286.2"/>
+ <val o="a8c00" v="292.3"/>
+ <val o="a9a05" v="21.4"/>
+ <val o="aa815" v="273.7"/>
+ <val o="ab625" v="272.9"/>
+ <val o="ac435" v="285.4"/>
+ <val o="ad245" v="28.5"/>
+ <val o="ae055" v="68.4"/>
+ <val o="aee65" v="147.1"/>
+ <val o="afc75" v="95.7"/>
+ <val o="b0a85" v="89.6"/>
+ <val o="b26a6" v="88.3"/>
+ <val o="b34b6" v="92.4"/>
+ <val o="b42c6" v="149.7"/>
+ <val o="b50d6" v="148.7"/>
+ <val o="b5ee7" v="127.7"/>
+ <val o="b6cf6" v="198.2"/>
+ <val o="b7b07" v="187.2"/>
+ <val o="b8917" v="182.1"/>
+ <val o="b9728" v="195.8"/>
+ <val o="ba537" v="203.8"/>
+ <val o="bb347" v="124.5"/>
+ <val o="bc157" v="159.2"/>
+ <val o="bcf67" v="230.6"/>
+ <val o="bdd81" v="79.8"/>
+ <val o="beb86" v="51.3"/>
+ <val o="bf995" v="22.5"/>
+ <val o="c07a6" v="323.7"/>
+ <val o="c15b5" v="341.6"/>
+ <val o="c23c6" v="46.4"/>
+ <val o="c31d5" v="71.9"/>
+ <val o="c3fe6" v="71.9"/>
+ <val o="c4df5" v="63.4"/>
+ <val o="c5c06" v="76.4"/>
+ <val o="c6a16" v="58.4"/>
+ <val o="c7826" v="92"/>
+ <val o="c8636" v="79.6"/>
+ <val o="c9446" v="63.1"/>
+ <val o="ca256" v="51.3"/>
+ <val o="cb066" v="81.7"/>
+ <val o="cbe76" v="205.3"/>
+ <val o="ccc87" v="96.1"/>
+ <val o="cda96" v="95.7"/>
+ <val o="ce8a8" v="96.7"/>
+ <val o="cf6b7" v="92.8"/>
+ <val o="d04c8" v="91.4"/>
+ <val o="d12d7" v="86.1"/>
+ <val o="d20e7" v="270"/>
+ <val o="d2f02" v="270.4"/>
+ <val o="d3d05" v="296.7"/>
+ <val o="d4b15" v="306.8"/>
+ <val o="d5926" v="331.7"/>
+ <val o="d6735" v="13.7"/>
+ <val o="d7546" v="46.4"/>
+ <val o="d8355" v="262.1"/>
+ <val o="d9166" v="166.2"/>
+ <val o="d9f75" v="143.6"/>
+ <val o="dad87" v="127.2"/>
+ <val o="dbb97" v="132.7"/>
+ <val o="dc9a8" v="128.3"/>
+ <val o="dd7b7" v="155.6"/>
+ <val o="de5c6" v="170.8"/>
+ <val o="df3d7" v="176.1"/>
+ <val o="e01d7" v="176.8"/>
+ <val o="e0fe5" v="168.8"/>
+ <val o="e1df5" v="172.2"/>
+ <val o="e2c04" v="185.2"/>
+ <val o="e3a14" v="196.3"/>
+ <val o="e4824" v="178.5"/>
+ <val o="e5634" v="193.7"/>
+ <val o="e6444" v="176.2"/>
+ <val o="e7255" v="196.7"/>
+ <val o="e806f" v="202.2"/>
+ <val o="e8e7f" v="99.9"/>
+ <val o="e9c8e" v="130.2"/>
+ <val o="eaa9f" v="132.9"/>
+ <val o="eb8ae" v="121.7"/>
+ <val o="ec6bf" v="100.9"/>
+ <val o="ed4ce" v="192.9"/>
+ <val o="ee2df" v="153.7"/>
+ <val o="ef0ef" v="170.4"/>
+ <val o="eff01" v="155.2"/>
+ <val o="f0d10" v="167.3"/>
+ <val o="f1b20" v="165.5"/>
+ <val o="f2930" v="184.3"/>
+ <val o="f3740" v="159.2"/>
+ <val o="f4551" v="163.4"/>
+ <val o="f5361" v="163.5"/>
+ <val o="f6172" v="160.8"/>
+ <val o="f6f80" v="165"/>
+ <val o="f7d91" v="156.4"/>
+ <val o="f8ba1" v="163.8"/>
+ <val o="f99b1" v="162.9"/>
+ <val o="fa7c0" v="154.9"/>
+ <val o="fb5d1" v="157.1"/>
+ <val o="fc3e0" v="197.2"/>
+ <val o="fd1fb" v="203.8"/>
+ <val o="fe00b" v="212.5"/>
+ <val o="fee1c" v="185.4"/>
+ <val o="ffc2c" v="187.2"/>
+ <val o="100a3b" v="162"/>
+ <val o="10184c" v="149.3"/>
+ <val o="10265b" v="136.8"/>
+ <val o="10346c" v="145.9"/>
+ <val o="10427b" v="164.1"/>
+ <val o="10508d" v="158.2"/>
+ <val o="105e9d" v="163"/>
+ <val o="106cad" v="161.6"/>
+ <val o="107abd" v="168.9"/>
+ <val o="1088cd" v="168.5"/>
+ <val o="1096de" v="165.1"/>
+ <val o="10a4ed" v="168.2"/>
+ <val o="10b2fe" v="163.9"/>
+ <val o="10c10d" v="147.5"/>
+ <val o="10cf1e" v="163"/>
+ <val o="10dd2e" v="166.3"/>
+ <val o="10eb66" v="177.4"/>
+ <val o="10f94e" v="179.7"/>
+ <val o="11075e" v="161"/>
+ <val o="11156d" v="174.4"/>
+ <val o="112388" v="203.6"/>
+ <val o="113187" v="158.3"/>
+ <val o="113fb0" v="172.9"/>
+ <val o="114da6" v="172.7"/>
+ <val o="115bb6" v="168.4"/>
+ <val o="1169c6" v="138"/>
+ <val o="1177d6" v="135.8"/>
+ <val o="1185e8" v="157.8"/>
+ <val o="1193f7" v="160.6"/>
+ <val o="11a208" v="175.7"/>
+ <val o="11b017" v="184.1"/>
+ <val o="11be2f" v="188.6"/>
+ <val o="11cc37" v="170"/>
+ <val o="11da47" v="173.6"/>
+ <val o="11e857" v="167"/>
+ <val o="11f667" v="172.6"/>
+ <val o="120578" v="164.6"/>
+ <val o="121386" v="166.8"/>
+ <val o="122196" v="151.9"/>
+ <val o="122fa6" v="158.6"/>
+ <val o="123db5" v="170.8"/>
+ <val o="124bc5" v="185.4"/>
+ <val o="1259d5" v="160.1"/>
+ <val o="1267e4" v="188.6"/>
+ <val o="127600" v="207.7"/>
+ <val o="128305" v="214.6"/>
+ <val o="129115" v="213.7"/>
+ <val o="129f25" v="218.4"/>
+ <val o="12ad35" v="210.5"/>
+ <val o="12bb45" v="178.8"/>
+ <val o="12c954" v="162.6"/>
+ <val o="12d766" v="156.4"/>
+ <val o="12e575" v="153.5"/>
+ <val o="12f386" v="143.9"/>
+ <val o="130196" v="160.8"/>
+ <val o="130fa6" v="153.4"/>
+ <val o="131db7" v="163.6"/>
+ <val o="132bc5" v="168.2"/>
+ <val o="1339d4" v="169.3"/>
+ <val o="1347e5" v="139.1"/>
+ <val o="1355f4" v="142.4"/>
+ <val o="136404" v="122.1"/>
+ <val o="137214" v="125.5"/>
+ <val o="138024" v="110.7"/>
+ <val o="138e33" v="110.6"/>
+ <val o="139c44" v="190.2"/>
+ <val o="13aa54" v="99.6"/>
+ <val o="13b865" v="209.4"/>
+ <val o="13c67e" v="76.2"/>
+ <val o="13d48e" v="61.5"/>
+ <val o="13e29e" v="44.5"/>
+ <val o="13f0ae" v="44.2"/>
+ <val o="13febf" v="60.4"/>
+ <val o="140ccf" v="64.6"/>
+ <val o="141adf" v="67.3"/>
+ <val o="1428ef" v="341.2"/>
+ <val o="1436ff" v="115.8"/>
+ <val o="14450f" v="117.3"/>
+ <val o="14531f" v="180"/>
+ <val o="146130" v="252.4"/>
+ <val o="146f40" v="261.8"/>
+ <val o="147d44" v="313.3"/>
+ <val o="148b57" v="311.3"/>
+ <val o="149965" v="292"/>
+ <val o="14a775" v="57.6"/>
+ <val o="14b584" v="151.6"/>
+ <val o="14c397" v="92.7"/>
+ <val o="14d1a4" v="93.4"/>
+ <val o="14dfb6" v="100.3"/>
+ <val o="14edc5" v="97.4"/>
+ <val o="14fbd5" v="184"/>
+ <val o="1509e5" v="289.1"/>
+ <val o="1517ff" v="274.2"/>
+ <val o="152605" v="39.8"/>
+ <val o="153415" v="6.5"/>
+ <val o="154225" v="355.9"/>
+ <val o="155035" v="19.4"/>
+ <val o="155e45" v="44.2"/>
+ <val o="156c55" v="61.4"/>
+ <val o="157a65" v="55.5"/>
+ <val o="158875" v="60.2"/>
+ <val o="159686" v="71.7"/>
+ <val o="15a495" v="66.3"/>
+ <val o="15b2a6" v="61.5"/>
+ <val o="15c0b6" v="38.5"/>
+ <val o="15cec6" v="17.3"/>
+ <val o="15dcd5" v="35.6"/>
+ <val o="15eae6" v="44.9"/>
+ <val o="15f8f5" v="71.4"/>
+ <val o="160706" v="166.1"/>
+ <val o="161517" v="125"/>
+ <val o="162326" v="176"/>
+ <val o="163137" v="195.3"/>
+ <val o="163f46" v="99.1"/>
+ <val o="164d57" v="90"/>
+ <val o="165b67" v="273.9"/>
+ <val o="166982" v="344.7"/>
+ <val o="167786" v="307.2"/>
+ <val o="168596" v="271.8"/>
+ <val o="1693a6" v="278.8"/>
+ <val o="16a1b5" v="291.5"/>
+ <val o="16afc6" v="52.9"/>
+ <val o="16bdd5" v="76.6"/>
+ <val o="16cbe6" v="87.6"/>
+ <val o="16d9f6" v="170.1"/>
+ <val o="16e807" v="174.2"/>
+ <val o="16f616" v="175.6"/>
+ <val o="170429" v="186.7"/>
+ <val o="171236" v="183.2"/>
+ <val o="172047" v="181.7"/>
+ <val o="172e57" v="173.6"/>
+ <val o="173c67" v="170.7"/>
+ <val o="174a77" v="165.4"/>
+ <val o="175887" v="163.8"/>
+ <val o="176694" v="161.7"/>
+ <val o="1774a3" v="165.4"/>
+ <val o="1782b3" v="170.9"/>
+ <val o="1790c5" v="173.5"/>
+ <val o="179ed4" v="187.9"/>
+ <val o="17ace4" v="201.8"/>
+ <val o="17bafd" v="205.9"/>
+ <val o="17c90f" v="204.6"/>
+ <val o="17d71e" v="204.1"/>
+ <val o="17e52f" v="208.2"/>
+ <val o="17f33f" v="204.4"/>
+ <val o="18014f" v="193.5"/>
+ <val o="180f5f" v="186.4"/>
+ <val o="181d6e" v="192.4"/>
+ <val o="182b7f" v="194.3"/>
+ <val o="18398f" v="184.4"/>
+ <val o="1847a1" v="184.1"/>
+ <val o="1855af" v="185.6"/>
+ <val o="1863c0" v="194.9"/>
+ <val o="1871cf" v="192.1"/>
+ <val o="187fe0" v="192.1"/>
+ <val o="188def" v="190.6"/>
+ <val o="189c00" v="185.4"/>
+ <val o="18b80d" v="170.9"/>
+ <val o="18c61c" v="187.4"/>
+ <val o="18d42c" v="191.1"/>
+ <val o="18e23b" v="191.1"/>
+ <val o="18f04b" v="197.1"/>
+ <val o="18fe5e" v="195.9"/>
+ <val o="190c76" v="189.8"/>
+ <val o="191a86" v="201.9"/>
+ <val o="192896" v="202.2"/>
+ <val o="1936a6" v="204.4"/>
+ <val o="1944b7" v="196.3"/>
+ <val o="1952c6" v="182.6"/>
+ <val o="1960d7" v="162.6"/>
+ <val o="196ee6" v="187.2"/>
+ <val o="197cf8" v="187.3"/>
+ <val o="198b0f" v="179.7"/>
+ <val o="19991f" v="181.7"/>
+ <val o="19b541" v="188.3"/>
+ <val o="19c34d" v="186.2"/>
+ <val o="19d15e" v="183.5"/>
+ <val o="19df80" v="182.2"/>
+ <val o="19ed90" v="176.5"/>
+ <val o="19eebe" v="175.6"/>
+ <val o="19fb8e" v="178.5"/>
+ <val o="1a09a0" v="223.8"/>
+ <val o="1a17ae" v="228.1"/>
+ <val o="1a25be" v="229.7"/>
+ <val o="1a33cd" v="216.1"/>
+ <val o="1a41dd" v="226.4"/>
+ <val o="1a4fed" v="249.6"/>
+ <val o="1a5e08" v="245.8"/>
+ <val o="1a6c05" v="250.1"/>
+ <val o="1a7a15" v="251.1"/>
+ <val o="1a8826" v="252.5"/>
+ <val o="1a9637" v="259.4"/>
+ <val o="1aa445" v="254.8"/>
+ <val o="1ab255" v="218.7"/>
+ <val o="1ac065" v="228.3"/>
+ <val o="1ace75" v="227.3"/>
+ <val o="1adc87" v="214.2"/>
+ <val o="1aea96" v="218.7"/>
+ <val o="1af8a7" v="217"/>
+ <val o="1b06b7" v="231.7"/>
+ <val o="1b14c6" v="230.6"/>
+ <val o="1c7460" v="52"/>
+ <val o="1c8270" v="340.3"/>
+ <val o="1c907e" v="18.5"/>
+ <val o="1c9e8f" v="357.5"/>
+ <val o="1caca2" v="344.7"/>
+ <val o="1cbab1" v="338.4"/>
+ <val o="1cc8c1" v="28.4"/>
+ <val o="1cd6d0" v="21.8"/>
+ <val o="1ce4de" v="10.4"/>
+ <val o="1cf2f0" v="343.9"/>
+ <val o="1d0109" v="342.8"/>
+ <val o="1d0f06" v="358.2"/>
+ <val o="1d1d15" v="353.5"/>
+ <val o="1d2b25" v="353.4"/>
+ <val o="1d3935" v="1.4"/>
+ <val o="1d4745" v="6.4"/>
+ <val o="1d5555" v="10.5"/>
+ <val o="1d6366" v="350.7"/>
+ <val o="1d7175" v="350.8"/>
+ <val o="1d7f86" v="357.6"/>
+ <val o="1d8d95" v="181.1"/>
+ <val o="1d9ba6" v="184.8"/>
+ <val o="1da9b6" v="192.6"/>
+ <val o="1db7c7" v="193.1"/>
+ <val o="1dc5d5" v="194.7"/>
+ <val o="1dd3e6" v="190.8"/>
+ <val o="1de1f5" v="195"/>
+ <val o="1df006" v="195.8"/>
+ <val o="1dfe16" v="195.3"/>
+ <val o="1e0c26" v="198.1"/>
+ <val o="1e1a36" v="198.4"/>
+ <val o="1e2847" v="199.5"/>
+ <val o="1e3659" v="200.2"/>
+ <val o="1e4467" v="202.3"/>
+ <val o="1e5281" v="200.7"/>
+ <val o="1e6086" v="203.5"/>
+ <val o="1e6e96" v="204.6"/>
+ <val o="1e7ca6" v="188.4"/>
+ <val o="1e8ab5" v="193.9"/>
+ <val o="1e98c6" v="184.4"/>
+ <val o="1ea6d5" v="190.5"/>
+ <val o="1eb4e6" v="188.9"/>
+ <val o="1ec2f6" v="192.2"/>
+ <val o="1ed106" v="185.6"/>
+ <val o="1edf16" v="186.6"/>
+ <val o="1eed26" v="182.8"/>
+ <val o="1efb36" v="187.6"/>
+ <val o="1f0946" v="186.9"/>
+ <val o="1f1756" v="168.2"/>
+ <val o="1f2566" v="164.2"/>
+ <val o="1f3376" v="154.3"/>
+ <val o="1f4187" v="134.3"/>
+ <val o="1f4f96" v="154.2"/>
+ <val o="1f5da7" v="182.2"/>
+ <val o="1f6bb6" v="188.3"/>
+ <val o="1f79c7" v="176"/>
+ <val o="1f87d6" v="206.4"/>
+ <val o="1f95e7" v="216.5"/>
+ <val o="1fa401" v="211.5"/>
+ <val o="1fb204" v="210.8"/>
+ <val o="1fc016" v="211.2"/>
+ <val o="1fce25" v="192.4"/>
+ <val o="1fdc35" v="185.1"/>
+ <val o="1fea45" v="176.6"/>
+ <val o="1ff855" v="171.5"/>
+ <val o="200665" v="129.5"/>
+ <val o="201475" v="173.4"/>
+ <val o="202286" v="157.2"/>
+ <val o="203095" v="161.2"/>
+ <val o="203ea5" v="163.5"/>
+ <val o="204cb6" v="176.8"/>
+ <val o="205ac6" v="166.8"/>
+ <val o="2068d6" v="161.5"/>
+ <val o="2076e6" v="159.3"/>
+ <val o="2084f6" v="177.6"/>
+ <val o="209306" v="183.2"/>
+ <val o="20a116" v="185.4"/>
+ <val o="20af26" v="182.6"/>
+ <val o="20bd37" v="189.3"/>
+ <val o="20cb46" v="173.2"/>
+ <val o="20d957" v="179.4"/>
+ <val o="20e767" v="193.5"/>
+ <val o="20f581" v="202.6"/>
+ <val o="210386" v="197.8"/>
+ <val o="211194" v="186.9"/>
+ <val o="211fa5" v="188.3"/>
+ <val o="212db5" v="178.7"/>
+ <val o="213bc5" v="160.2"/>
+ <val o="2149d6" v="168.3"/>
+ <val o="2157e5" v="184"/>
+ <val o="2165f6" v="191.1"/>
+ <val o="217406" v="177.3"/>
+ <val o="218217" v="182.9"/>
+ <val o="219026" v="185.4"/>
+ <val o="219e39" v="176.3"/>
+ <val o="21ac46" v="170.1"/>
+ <val o="21ba57" v="169.3"/>
+ <val o="21c867" v="159.8"/>
+ <val o="21d677" v="190.9"/>
+ <val o="21e487" v="173.9"/>
+ <val o="21f296" v="175.5"/>
+ <val o="2200a6" v="187.5"/>
+ <val o="220eb7" v="188.5"/>
+ <val o="221cc6" v="160"/>
+ <val o="222ad7" v="175.5"/>
+ <val o="2238e7" v="192.4"/>
+ <val o="224701" v="200.8"/>
+ <val o="225505" v="116.9"/>
+ <val o="226315" v="166.3"/>
+ <val o="227125" v="162.8"/>
+ <val o="227f35" v="130.4"/>
+ <val o="228d45" v="122"/>
+ <val o="229b54" v="193.5"/>
+ <val o="22a965" v="183.9"/>
+ <val o="22b776" v="180"/>
+ <val o="22c586" v="157.3"/>
+ <val o="22d397" v="142.7"/>
+ <val o="22e1a6" v="145.9"/>
+ <val o="22efb6" v="182.2"/>
+ <val o="22fdc7" v="182.7"/>
+ <val o="230bd7" v="173.3"/>
+ <val o="2319e6" v="188.6"/>
+ <val o="2327f6" v="179.4"/>
+ <val o="23361b" v="169.8"/>
+ <val o="234416" v="164.3"/>
+ <val o="235226" v="170.2"/>
+ <val o="236037" v="178.8"/>
+ <val o="236e46" v="158"/>
+ <val o="237c57" v="161.6"/>
+ <val o="238a66" v="175.8"/>
+ <val o="239881" v="169.9"/>
+ <val o="23a685" v="185.3"/>
+ <val o="23b495" v="191.6"/>
+ <val o="23c2a4" v="176.8"/>
+ <val o="23d0b5" v="167.7"/>
+ <val o="23dec4" v="154.1"/>
+ <val o="23ecd5" v="167"/>
+ <val o="23fae4" v="180"/>
+ <val o="2408f6" v="166.9"/>
+ <val o="241706" v="146.9"/>
+ <val o="242518" v="155.4"/>
+ <val o="243325" v="157.6"/>
+ <val o="244137" v="189.9"/>
+ <val o="244f46" v="187.4"/>
+ <val o="246b66" v="186.9"/>
+ <val o="247976" v="179.5"/>
+ <val o="248786" v="139.6"/>
+ <val o="24957e" v="161.8"/>
+ <val o="24a38f" v="172"/>
+ <val o="24b19c" v="189.5"/>
+ <val o="24bfac" v="187.3"/>
+ <val o="24cdbc" v="188.2"/>
+ <val o="24dbcd" v="186.1"/>
+ <val o="24e9e5" v="198.1"/>
+ <val o="24f808" v="193.3"/>
+ <val o="250616" v="195.6"/>
+ <val o="251426" v="198.3"/>
+ <val o="252236" v="180.5"/>
+ <val o="253047" v="180"/>
+ <val o="253e56" v="161.6"/>
+ <val o="254c67" v="165.8"/>
+ <val o="255a76" v="165.6"/>
+ <val o="256887" v="160.4"/>
+ <val o="257697" v="147.2"/>
+ <val o="2584a8" v="196.9"/>
+ <val o="2592b6" v="195.7"/>
+ <val o="25a0c7" v="186.9"/>
+ <val o="25aed7" v="178.3"/>
+ <val o="25bce7" v="177.6"/>
+ <val o="25caf8" v="172"/>
+ <val o="25d907" v="156.5"/>
+ <val o="25e718" v="154.3"/>
+ <val o="25f527" v="157"/>
+ <val o="260338" v="179.5"/>
+ <val o="261149" v="166"/>
+ <val o="261f59" v="172.3"/>
+ <val o="262d68" v="196.4"/>
+ <val o="263b83" v="179.5"/>
+ <val o="264986" v="195.7"/>
+ <val o="265795" v="202.7"/>
+ <val o="2665a6" v="209.9"/>
+ <val o="2673b5" v="204.1"/>
+ <val o="2681c6" v="199.9"/>
+ <val o="268fd5" v="186.3"/>
+ <val o="269de6" v="175.6"/>
+ <val o="26abf6" v="170.1"/>
+ <val o="26ba06" v="159.2"/>
+ <val o="26c817" v="156.4"/>
+ <val o="26d62b" v="137.7"/>
+ <val o="26e436" v="146"/>
+ <val o="26f247" v="139.6"/>
+ <val o="270057" v="143.2"/>
+ <val o="270e67" v="137.7"/>
+ <val o="271c77" v="177.9"/>
+ <val o="272a87" v="186.9"/>
+ <val o="273897" v="184.5"/>
+ <val o="2746a8" v="188.2"/>
+ <val o="2754b9" v="191.1"/>
+ <val o="2762c7" v="146.7"/>
+ <val o="2770d8" v="161.4"/>
+ <val o="277ee7" v="188.7"/>
+ </par>
+ <par memind="10695000" h="3dc1a8de">
+ <val o="0" v="50"/>
+ <val o="e08" v="50"/>
+ <val o="1c32" v="50"/>
+ <val o="2a3c" v="50"/>
+ <val o="3835" v="49.9"/>
+ <val o="4645" v="49.9"/>
+ <val o="5455" v="50"/>
+ <val o="6265" v="50"/>
+ <val o="7075" v="50"/>
+ <val o="7e85" v="50"/>
+ <val o="8c96" v="50"/>
+ <val o="9aa5" v="50.1"/>
+ <val o="a8b6" v="50"/>
+ <val o="b6c5" v="50"/>
+ <val o="c4d7" v="50"/>
+ <val o="d30b" v="50"/>
+ <val o="e0f6" v="50"/>
+ <val o="ef06" v="50"/>
+ <val o="fd17" v="50"/>
+ <val o="10b27" v="50"/>
+ <val o="11937" v="50"/>
+ <val o="12746" v="50"/>
+ <val o="13556" v="50"/>
+ <val o="14366" v="50"/>
+ <val o="15181" v="50"/>
+ <val o="15f85" v="50"/>
+ <val o="16d95" v="50"/>
+ <val o="17ba4" v="50"/>
+ <val o="189b5" v="50"/>
+ <val o="197c4" v="50.1"/>
+ <val o="1a5d5" v="50"/>
+ <val o="1b3e6" v="50"/>
+ <val o="1c1f6" v="50.1"/>
+ <val o="1d005" v="50"/>
+ <val o="1de15" v="50"/>
+ <val o="1ec25" v="50"/>
+ <val o="1fa36" v="50"/>
+ <val o="20845" v="50"/>
+ <val o="21656" v="50"/>
+ <val o="22465" v="50"/>
+ <val o="23276" v="50"/>
+ <val o="24086" v="50"/>
+ <val o="24e99" v="50"/>
+ <val o="25ca7" v="50"/>
+ <val o="26ab7" v="50"/>
+ <val o="278c6" v="50"/>
+ <val o="286d6" v="50.1"/>
+ <val o="294e6" v="50"/>
+ <val o="2a301" v="50"/>
+ <val o="2b105" v="50"/>
+ <val o="2bf15" v="50"/>
+ <val o="2cd25" v="50"/>
+ <val o="2db35" v="50"/>
+ <val o="2e946" v="50"/>
+ <val o="2f755" v="50"/>
+ <val o="30566" v="50"/>
+ <val o="31375" v="50"/>
+ <val o="3219e" v="50"/>
+ <val o="32f96" v="50"/>
+ <val o="33da6" v="50"/>
+ <val o="34bb6" v="50"/>
+ <val o="359de" v="50"/>
+ <val o="367d6" v="50"/>
+ <val o="375e6" v="50"/>
+ <val o="3840e" v="50"/>
+ <val o="3921e" v="50"/>
+ <val o="3a016" v="50"/>
+ <val o="3ae27" v="50"/>
+ <val o="3bc36" v="50"/>
+ <val o="3ca47" v="50"/>
+ <val o="3d856" v="50"/>
+ <val o="3e667" v="50"/>
+ <val o="3f481" v="50"/>
+ <val o="40285" v="50"/>
+ <val o="41095" v="50"/>
+ <val o="41ea5" v="50"/>
+ <val o="42cb5" v="50"/>
+ <val o="43ac5" v="49.9"/>
+ <val o="448d5" v="50"/>
+ <val o="456e6" v="49.9"/>
+ <val o="464f5" v="50"/>
+ <val o="480ff" v="49.9"/>
+ <val o="48f0e" v="50"/>
+ <val o="49d1d" v="50"/>
+ <val o="4ab46" v="50"/>
+ <val o="4b955" v="50"/>
+ <val o="4c769" v="50"/>
+ <val o="4d577" v="50"/>
+ <val o="4e387" v="50"/>
+ <val o="4f196" v="50"/>
+ <val o="4ffa6" v="50"/>
+ <val o="50dd0" v="50"/>
+ <val o="51bc6" v="50"/>
+ <val o="529d6" v="50"/>
+ <val o="537e7" v="50"/>
+ <val o="54600" v="50"/>
+ <val o="55406" v="50"/>
+ <val o="56215" v="50"/>
+ <val o="57026" v="50"/>
+ <val o="57e36" v="50"/>
+ <val o="58c46" v="50"/>
+ <val o="59a70" v="50"/>
+ <val o="5a867" v="50"/>
+ <val o="5b676" v="49.9"/>
+ <val o="5c487" v="50"/>
+ <val o="5d296" v="50"/>
+ <val o="5e0a9" v="50"/>
+ <val o="5eeb8" v="50"/>
+ <val o="5fcc6" v="50"/>
+ <val o="60ad7" v="50"/>
+ <val o="618e7" v="50"/>
+ <val o="626f7" v="50"/>
+ <val o="63507" v="50"/>
+ <val o="64317" v="50"/>
+ <val o="65127" v="50.1"/>
+ <val o="65f37" v="50"/>
+ <val o="66d46" v="50"/>
+ <val o="67b57" v="50"/>
+ <val o="68967" v="50"/>
+ <val o="69782" v="50.1"/>
+ <val o="6a586" v="50"/>
+ <val o="6b395" v="50"/>
+ <val o="6c1a6" v="49.9"/>
+ <val o="6cfb5" v="50"/>
+ <val o="6ddc6" v="50"/>
+ <val o="6ebd6" v="50"/>
+ <val o="6f9e6" v="50"/>
+ <val o="707f6" v="50"/>
+ <val o="71607" v="50"/>
+ <val o="72417" v="50"/>
+ <val o="73227" v="50"/>
+ <val o="74037" v="50"/>
+ <val o="74e47" v="50"/>
+ <val o="75c57" v="50"/>
+ <val o="76a63" v="50"/>
+ <val o="77873" v="50"/>
+ <val o="78680" v="50"/>
+ <val o="7948f" v="50"/>
+ <val o="7a29f" v="50"/>
+ <val o="7b0af" v="50.1"/>
+ <val o="7bebf" v="50"/>
+ <val o="7cccf" v="50"/>
+ <val o="7dadf" v="49.9"/>
+ <val o="7e8fa" v="50"/>
+ <val o="7f70a" v="50"/>
+ <val o="8051a" v="50"/>
+ <val o="8132a" v="50"/>
+ <val o="8213a" v="50"/>
+ <val o="82f4a" v="50"/>
+ <val o="83d5a" v="50"/>
+ <val o="84b6a" v="50"/>
+ <val o="8597a" v="50"/>
+ <val o="8678b" v="50"/>
+ <val o="8759b" v="50"/>
+ <val o="883ac" v="50"/>
+ <val o="891bb" v="50"/>
+ <val o="89fca" v="50"/>
+ <val o="8adda" v="50"/>
+ <val o="8bbeb" v="50"/>
+ <val o="8c9fc" v="50"/>
+ <val o="8d80b" v="50"/>
+ <val o="8e61a" v="50.1"/>
+ <val o="8f42a" v="50"/>
+ <val o="9023a" v="50.1"/>
+ <val o="9104a" v="49.9"/>
+ <val o="91e5a" v="50"/>
+ <val o="92c6a" v="50"/>
+ <val o="93a84" v="49.9"/>
+ <val o="94885" v="50"/>
+ <val o="95694" v="50"/>
+ <val o="964a5" v="50"/>
+ <val o="972b4" v="49.9"/>
+ <val o="980c5" v="50"/>
+ <val o="98ed4" v="50"/>
+ <val o="99ce5" v="49.9"/>
+ <val o="9aaf5" v="50.1"/>
+ <val o="9b906" v="50.1"/>
+ <val o="9c716" v="50"/>
+ <val o="9d526" v="50"/>
+ <val o="9e336" v="50"/>
+ <val o="9f145" v="50"/>
+ <val o="9ff56" v="50"/>
+ <val o="a0d65" v="50"/>
+ <val o="a1b77" v="49.9"/>
+ <val o="a2986" v="50"/>
+ <val o="a3795" v="50"/>
+ <val o="a45a7" v="50"/>
+ <val o="a53b6" v="50"/>
+ <val o="a61c7" v="50"/>
+ <val o="a6fd6" v="50"/>
+ <val o="a7e00" v="50.1"/>
+ <val o="a8c00" v="49.9"/>
+ <val o="a9a05" v="50"/>
+ <val o="aa815" v="50"/>
+ <val o="ab625" v="50"/>
+ <val o="ac435" v="50"/>
+ <val o="ad245" v="50"/>
+ <val o="ae055" v="50"/>
+ <val o="aee65" v="50"/>
+ <val o="afc75" v="50"/>
+ <val o="b0a85" v="50"/>
+ <val o="b26a6" v="50"/>
+ <val o="b34b6" v="50"/>
+ <val o="b42c6" v="50"/>
+ <val o="b50d6" v="50"/>
+ <val o="b5ee7" v="50"/>
+ <val o="b6cf6" v="50"/>
+ <val o="b7b07" v="50"/>
+ <val o="b8917" v="50"/>
+ <val o="b9728" v="50"/>
+ <val o="ba537" v="50"/>
+ <val o="bb347" v="50"/>
+ <val o="bc157" v="50"/>
+ <val o="bcf67" v="50"/>
+ <val o="bdd81" v="50"/>
+ <val o="beb86" v="50"/>
+ <val o="bf995" v="50"/>
+ <val o="c07a6" v="50"/>
+ <val o="c15b5" v="50"/>
+ <val o="c23c6" v="50"/>
+ <val o="c31d5" v="49.9"/>
+ <val o="c3fe6" v="50"/>
+ <val o="c4df5" v="50"/>
+ <val o="c5c06" v="50"/>
+ <val o="c6a16" v="50"/>
+ <val o="c7826" v="50"/>
+ <val o="c8636" v="50"/>
+ <val o="c9446" v="50"/>
+ <val o="ca256" v="50"/>
+ <val o="cb066" v="50"/>
+ <val o="cbe76" v="50"/>
+ <val o="ccc87" v="50"/>
+ <val o="cda96" v="50"/>
+ <val o="ce8a8" v="50"/>
+ <val o="cf6b7" v="50"/>
+ <val o="d04c8" v="49.9"/>
+ <val o="d12d7" v="50"/>
+ <val o="d20e7" v="50"/>
+ <val o="d2f02" v="50"/>
+ <val o="d3d05" v="50"/>
+ <val o="d4b15" v="50"/>
+ <val o="d5926" v="50"/>
+ <val o="d6735" v="50"/>
+ <val o="d7546" v="50"/>
+ <val o="d8355" v="50"/>
+ <val o="d9166" v="50"/>
+ <val o="d9f75" v="50.1"/>
+ <val o="dad87" v="50"/>
+ <val o="dbb97" v="49.9"/>
+ <val o="dc9a8" v="50"/>
+ <val o="dd7b7" v="50"/>
+ <val o="de5c6" v="50"/>
+ <val o="df3d7" v="50"/>
+ <val o="e01d7" v="50"/>
+ <val o="e0fe5" v="50"/>
+ <val o="e1df5" v="50"/>
+ <val o="e2c04" v="50"/>
+ <val o="e3a14" v="50"/>
+ <val o="e4824" v="50"/>
+ <val o="e5634" v="50"/>
+ <val o="e6444" v="50"/>
+ <val o="e7255" v="50"/>
+ <val o="e806f" v="50"/>
+ <val o="e8e7f" v="50"/>
+ <val o="e9c8e" v="50"/>
+ <val o="eaa9f" v="50"/>
+ <val o="eb8ae" v="50"/>
+ <val o="ec6bf" v="50"/>
+ <val o="ed4ce" v="50"/>
+ <val o="ee2df" v="50"/>
+ <val o="ef0ef" v="50"/>
+ <val o="eff01" v="50.1"/>
+ <val o="f0d10" v="50"/>
+ <val o="f1b20" v="50"/>
+ <val o="f2930" v="50"/>
+ <val o="f3740" v="50"/>
+ <val o="f4551" v="50"/>
+ <val o="f5361" v="50"/>
+ <val o="f6172" v="50"/>
+ <val o="f6f80" v="50"/>
+ <val o="f7d91" v="50"/>
+ <val o="f8ba1" v="50"/>
+ <val o="f99b1" v="50"/>
+ <val o="fa7c0" v="50"/>
+ <val o="fb5d1" v="50"/>
+ <val o="fc3e0" v="50"/>
+ <val o="fd1fb" v="50"/>
+ <val o="fe00b" v="50"/>
+ <val o="fee1c" v="50.1"/>
+ <val o="ffc2c" v="50"/>
+ <val o="100a3b" v="50"/>
+ <val o="10184c" v="50"/>
+ <val o="10265b" v="49.9"/>
+ <val o="10346c" v="50"/>
+ <val o="10427b" v="50"/>
+ <val o="10508d" v="49.9"/>
+ <val o="105e9d" v="50"/>
+ <val o="106cad" v="50"/>
+ <val o="107abd" v="50"/>
+ <val o="1088cd" v="49.9"/>
+ <val o="1096de" v="50"/>
+ <val o="10a4ed" v="50"/>
+ <val o="10b2fe" v="49.9"/>
+ <val o="10c10d" v="50"/>
+ <val o="10cf1e" v="50"/>
+ <val o="10dd2e" v="50"/>
+ <val o="10eb66" v="50"/>
+ <val o="10f94e" v="49.9"/>
+ <val o="11075e" v="50.1"/>
+ <val o="11156d" v="50.1"/>
+ <val o="112388" v="50"/>
+ <val o="113187" v="49.9"/>
+ <val o="113fb0" v="50"/>
+ <val o="114da6" v="49.9"/>
+ <val o="115bb6" v="50"/>
+ <val o="1169c6" v="50"/>
+ <val o="1177d6" v="50"/>
+ <val o="1185e8" v="50"/>
+ <val o="1193f7" v="50"/>
+ <val o="11a208" v="50"/>
+ <val o="11b017" v="50"/>
+ <val o="11be2f" v="50.1"/>
+ <val o="11cc37" v="50"/>
+ <val o="11da47" v="50"/>
+ <val o="11e857" v="50"/>
+ <val o="11f667" v="50"/>
+ <val o="120578" v="50"/>
+ <val o="121386" v="50"/>
+ <val o="122196" v="50"/>
+ <val o="122fa6" v="50"/>
+ <val o="123db5" v="50"/>
+ <val o="124bc5" v="50"/>
+ <val o="1259d5" v="50"/>
+ <val o="1267e4" v="50"/>
+ <val o="127600" v="49.9"/>
+ <val o="128305" v="50"/>
+ <val o="129115" v="50"/>
+ <val o="129f25" v="50"/>
+ <val o="12ad35" v="49.9"/>
+ <val o="12bb45" v="49.9"/>
+ <val o="12c954" v="49.9"/>
+ <val o="12d766" v="49.9"/>
+ <val o="12e575" v="50.1"/>
+ <val o="12f386" v="50.1"/>
+ <val o="130196" v="50"/>
+ <val o="130fa6" v="50.1"/>
+ <val o="131db7" v="49.9"/>
+ <val o="132bc5" v="50"/>
+ <val o="1339d4" v="50"/>
+ <val o="1347e5" v="50"/>
+ <val o="1355f4" v="50"/>
+ <val o="136404" v="50"/>
+ <val o="137214" v="50.1"/>
+ <val o="138024" v="50"/>
+ <val o="138e33" v="50"/>
+ <val o="139c44" v="50"/>
+ <val o="13aa54" v="50"/>
+ <val o="13b865" v="50"/>
+ <val o="13c67e" v="50"/>
+ <val o="13d48e" v="50"/>
+ <val o="13e29e" v="50"/>
+ <val o="13f0ae" v="50"/>
+ <val o="13febf" v="50"/>
+ <val o="140ccf" v="50"/>
+ <val o="141adf" v="50"/>
+ <val o="1428ef" v="50"/>
+ <val o="1436ff" v="49.9"/>
+ <val o="14450f" v="50"/>
+ <val o="14531f" v="50"/>
+ <val o="146130" v="50"/>
+ <val o="146f40" v="50"/>
+ <val o="147d44" v="50"/>
+ <val o="148b57" v="50"/>
+ <val o="149965" v="50"/>
+ <val o="14a775" v="50"/>
+ <val o="14b584" v="50"/>
+ <val o="14c397" v="50"/>
+ <val o="14d1a4" v="50"/>
+ <val o="14dfb6" v="49.9"/>
+ <val o="14edc5" v="50.1"/>
+ <val o="14fbd5" v="50"/>
+ <val o="1509e5" v="50"/>
+ <val o="1517ff" v="50"/>
+ <val o="152605" v="50"/>
+ <val o="153415" v="50"/>
+ <val o="154225" v="50"/>
+ <val o="155035" v="50"/>
+ <val o="155e45" v="50"/>
+ <val o="156c55" v="50"/>
+ <val o="157a65" v="50"/>
+ <val o="158875" v="49.9"/>
+ <val o="159686" v="50"/>
+ <val o="15a495" v="50"/>
+ <val o="15b2a6" v="50"/>
+ <val o="15c0b6" v="50"/>
+ <val o="15cec6" v="50"/>
+ <val o="15dcd5" v="50"/>
+ <val o="15eae6" v="49.9"/>
+ <val o="15f8f5" v="50"/>
+ <val o="160706" v="49.9"/>
+ <val o="161517" v="50"/>
+ <val o="162326" v="49.9"/>
+ <val o="163137" v="50"/>
+ <val o="163f46" v="50"/>
+ <val o="164d57" v="50"/>
+ <val o="165b67" v="50"/>
+ <val o="166982" v="50"/>
+ <val o="167786" v="50"/>
+ <val o="168596" v="50"/>
+ <val o="1693a6" v="50"/>
+ <val o="16a1b5" v="49.9"/>
+ <val o="16afc6" v="50"/>
+ <val o="16bdd5" v="50"/>
+ <val o="16cbe6" v="50"/>
+ <val o="16d9f6" v="50"/>
+ <val o="16e807" v="49.9"/>
+ <val o="16f616" v="50"/>
+ <val o="170429" v="50"/>
+ <val o="171236" v="50"/>
+ <val o="172047" v="50"/>
+ <val o="172e57" v="50"/>
+ <val o="173c67" v="50"/>
+ <val o="174a77" v="50"/>
+ <val o="175887" v="50"/>
+ <val o="176694" v="49.9"/>
+ <val o="1774a3" v="50"/>
+ <val o="1782b3" v="50"/>
+ <val o="1790c5" v="50"/>
+ <val o="179ed4" v="50"/>
+ <val o="17ace4" v="50.1"/>
+ <val o="17bafd" v="50.1"/>
+ <val o="17c90f" v="50"/>
+ <val o="17d71e" v="50"/>
+ <val o="17e52f" v="50"/>
+ <val o="17f33f" v="50"/>
+ <val o="18014f" v="50"/>
+ <val o="180f5f" v="50"/>
+ <val o="181d6e" v="50.1"/>
+ <val o="182b7f" v="50"/>
+ <val o="18398f" v="50"/>
+ <val o="1847a1" v="50"/>
+ <val o="1855af" v="50"/>
+ <val o="1863c0" v="50"/>
+ <val o="1871cf" v="49.9"/>
+ <val o="187fe0" v="50"/>
+ <val o="188def" v="50"/>
+ <val o="189c00" v="50"/>
+ <val o="18b80d" v="50"/>
+ <val o="18c61c" v="49.9"/>
+ <val o="18d42c" v="50"/>
+ <val o="18e23b" v="50"/>
+ <val o="18f04b" v="50"/>
+ <val o="18fe5e" v="50"/>
+ <val o="190c76" v="50"/>
+ <val o="191a86" v="50"/>
+ <val o="192896" v="50"/>
+ <val o="1936a6" v="50"/>
+ <val o="1944b7" v="50"/>
+ <val o="1952c6" v="49.9"/>
+ <val o="1960d7" v="50"/>
+ <val o="196ee6" v="50"/>
+ <val o="197cf8" v="50"/>
+ <val o="198b0f" v="50"/>
+ <val o="19991f" v="50"/>
+ <val o="19b541" v="50"/>
+ <val o="19c34d" v="50"/>
+ <val o="19d15e" v="50"/>
+ <val o="19df80" v="50"/>
+ <val o="19ed90" v="50"/>
+ <val o="19eebe" v="50"/>
+ <val o="19fb8e" v="49.9"/>
+ <val o="1a09a0" v="50"/>
+ <val o="1a17ae" v="49.9"/>
+ <val o="1a25be" v="50"/>
+ <val o="1a33cd" v="50"/>
+ <val o="1a41dd" v="50"/>
+ <val o="1a4fed" v="50"/>
+ <val o="1a5e08" v="50"/>
+ <val o="1a6c05" v="50"/>
+ <val o="1a7a15" v="50.1"/>
+ <val o="1a8826" v="50"/>
+ <val o="1a9637" v="50"/>
+ <val o="1aa445" v="50"/>
+ <val o="1ab255" v="50"/>
+ <val o="1ac065" v="50"/>
+ <val o="1ace75" v="50"/>
+ <val o="1adc87" v="50"/>
+ <val o="1aea96" v="49.9"/>
+ <val o="1af8a7" v="50"/>
+ <val o="1b06b7" v="50"/>
+ <val o="1b14c6" v="50"/>
+ <val o="1c7460" v="50"/>
+ <val o="1c8270" v="50"/>
+ <val o="1c907e" v="50"/>
+ <val o="1c9e8f" v="50"/>
+ <val o="1caca2" v="50"/>
+ <val o="1cbab1" v="50"/>
+ <val o="1cc8c1" v="50"/>
+ <val o="1cd6d0" v="50"/>
+ <val o="1ce4de" v="50"/>
+ <val o="1cf2f0" v="50"/>
+ <val o="1d0109" v="50"/>
+ <val o="1d0f06" v="50"/>
+ <val o="1d1d15" v="50"/>
+ <val o="1d2b25" v="50"/>
+ <val o="1d3935" v="50"/>
+ <val o="1d4745" v="50"/>
+ <val o="1d5555" v="50"/>
+ <val o="1d6366" v="50"/>
+ <val o="1d7175" v="50"/>
+ <val o="1d7f86" v="50"/>
+ <val o="1d8d95" v="50"/>
+ <val o="1d9ba6" v="50"/>
+ <val o="1da9b6" v="50"/>
+ <val o="1db7c7" v="50"/>
+ <val o="1dc5d5" v="49.9"/>
+ <val o="1dd3e6" v="49.9"/>
+ <val o="1de1f5" v="50"/>
+ <val o="1df006" v="50"/>
+ <val o="1dfe16" v="50"/>
+ <val o="1e0c26" v="49.9"/>
+ <val o="1e1a36" v="49.9"/>
+ <val o="1e2847" v="50"/>
+ <val o="1e3659" v="50"/>
+ <val o="1e4467" v="50"/>
+ <val o="1e5281" v="50"/>
+ <val o="1e6086" v="50"/>
+ <val o="1e6e96" v="50"/>
+ <val o="1e7ca6" v="50"/>
+ <val o="1e8ab5" v="50"/>
+ <val o="1e98c6" v="49.9"/>
+ <val o="1ea6d5" v="50"/>
+ <val o="1eb4e6" v="50"/>
+ <val o="1ec2f6" v="50"/>
+ <val o="1ed106" v="50"/>
+ <val o="1edf16" v="50"/>
+ <val o="1eed26" v="49.9"/>
+ <val o="1efb36" v="50"/>
+ <val o="1f0946" v="50"/>
+ <val o="1f1756" v="50"/>
+ <val o="1f2566" v="50"/>
+ <val o="1f3376" v="50"/>
+ <val o="1f4187" v="50"/>
+ <val o="1f4f96" v="50"/>
+ <val o="1f5da7" v="50"/>
+ <val o="1f6bb6" v="50"/>
+ <val o="1f79c7" v="50.1"/>
+ <val o="1f87d6" v="50.1"/>
+ <val o="1f95e7" v="50"/>
+ <val o="1fa401" v="50"/>
+ <val o="1fb204" v="50"/>
+ <val o="1fc016" v="50"/>
+ <val o="1fce25" v="49.9"/>
+ <val o="1fdc35" v="50"/>
+ <val o="1fea45" v="50"/>
+ <val o="1ff855" v="50"/>
+ <val o="200665" v="49.9"/>
+ <val o="201475" v="50"/>
+ <val o="202286" v="49.9"/>
+ <val o="203095" v="49.9"/>
+ <val o="203ea5" v="50"/>
+ <val o="204cb6" v="50"/>
+ <val o="205ac6" v="50"/>
+ <val o="2068d6" v="50"/>
+ <val o="2076e6" v="50"/>
+ <val o="2084f6" v="50"/>
+ <val o="209306" v="50"/>
+ <val o="20a116" v="50"/>
+ <val o="20af26" v="49.9"/>
+ <val o="20bd37" v="49.9"/>
+ <val o="20cb46" v="49.9"/>
+ <val o="20d957" v="50"/>
+ <val o="20e767" v="50"/>
+ <val o="20f581" v="50"/>
+ <val o="210386" v="50"/>
+ <val o="211194" v="50"/>
+ <val o="211fa5" v="50"/>
+ <val o="212db5" v="50"/>
+ <val o="213bc5" v="50"/>
+ <val o="2149d6" v="50"/>
+ <val o="2157e5" v="50"/>
+ <val o="2165f6" v="50"/>
+ <val o="217406" v="50"/>
+ <val o="218217" v="50"/>
+ <val o="219026" v="50"/>
+ <val o="219e39" v="50"/>
+ <val o="21ac46" v="50"/>
+ <val o="21ba57" v="50"/>
+ <val o="21c867" v="50"/>
+ <val o="21d677" v="50"/>
+ <val o="21e487" v="50"/>
+ <val o="21f296" v="50"/>
+ <val o="2200a6" v="50"/>
+ <val o="220eb7" v="50"/>
+ <val o="221cc6" v="50"/>
+ <val o="222ad7" v="50"/>
+ <val o="2238e7" v="50"/>
+ <val o="224701" v="49.9"/>
+ <val o="225505" v="50"/>
+ <val o="226315" v="50"/>
+ <val o="227125" v="50"/>
+ <val o="227f35" v="50"/>
+ <val o="228d45" v="50"/>
+ <val o="229b54" v="50"/>
+ <val o="22a965" v="50"/>
+ <val o="22b776" v="50"/>
+ <val o="22c586" v="50"/>
+ <val o="22d397" v="50"/>
+ <val o="22e1a6" v="50"/>
+ <val o="22efb6" v="50.1"/>
+ <val o="22fdc7" v="50"/>
+ <val o="230bd7" v="50"/>
+ <val o="2319e6" v="50"/>
+ <val o="2327f6" v="50"/>
+ <val o="23361b" v="50"/>
+ <val o="234416" v="50"/>
+ <val o="235226" v="50"/>
+ <val o="236037" v="50"/>
+ <val o="236e46" v="49.9"/>
+ <val o="237c57" v="50"/>
+ <val o="238a66" v="50.1"/>
+ <val o="239881" v="50"/>
+ <val o="23a685" v="50"/>
+ <val o="23b495" v="50"/>
+ <val o="23c2a4" v="50"/>
+ <val o="23d0b5" v="50"/>
+ <val o="23dec4" v="50"/>
+ <val o="23ecd5" v="49.9"/>
+ <val o="23fae4" v="50"/>
+ <val o="2408f6" v="50"/>
+ <val o="241706" v="50"/>
+ <val o="242518" v="49.9"/>
+ <val o="243325" v="50"/>
+ <val o="244137" v="50"/>
+ <val o="244f46" v="50.1"/>
+ <val o="246b66" v="50"/>
+ <val o="247976" v="50"/>
+ <val o="248786" v="49.9"/>
+ <val o="24957e" v="50"/>
+ <val o="24a38f" v="49.9"/>
+ <val o="24b19c" v="50"/>
+ <val o="24bfac" v="50"/>
+ <val o="24cdbc" v="50"/>
+ <val o="24dbcd" v="50"/>
+ <val o="24e9e5" v="50"/>
+ <val o="24f808" v="50"/>
+ <val o="250616" v="50"/>
+ <val o="251426" v="49.9"/>
+ <val o="252236" v="50"/>
+ <val o="253047" v="50"/>
+ <val o="253e56" v="50"/>
+ <val o="254c67" v="50"/>
+ <val o="255a76" v="50"/>
+ <val o="256887" v="50"/>
+ <val o="257697" v="50"/>
+ <val o="2584a8" v="50"/>
+ <val o="2592b6" v="50"/>
+ <val o="25a0c7" v="50"/>
+ <val o="25aed7" v="50"/>
+ <val o="25bce7" v="50"/>
+ <val o="25caf8" v="50"/>
+ <val o="25d907" v="49.9"/>
+ <val o="25e718" v="50"/>
+ <val o="25f527" v="50"/>
+ <val o="260338" v="50"/>
+ <val o="261149" v="50"/>
+ <val o="261f59" v="50"/>
+ <val o="262d68" v="50.1"/>
+ <val o="263b83" v="50"/>
+ <val o="264986" v="50"/>
+ <val o="265795" v="50"/>
+ <val o="2665a6" v="50"/>
+ <val o="2673b5" v="50"/>
+ <val o="2681c6" v="50"/>
+ <val o="268fd5" v="50"/>
+ <val o="269de6" v="50"/>
+ <val o="26abf6" v="50"/>
+ <val o="26ba06" v="50"/>
+ <val o="26c817" v="50"/>
+ <val o="26d62b" v="50"/>
+ <val o="26e436" v="50"/>
+ <val o="26f247" v="50"/>
+ <val o="270057" v="50"/>
+ <val o="270e67" v="50"/>
+ <val o="271c77" v="50"/>
+ <val o="272a87" v="50"/>
+ <val o="273897" v="50"/>
+ <val o="2746a8" v="50"/>
+ <val o="2754b9" v="50"/>
+ <val o="2762c7" v="49.9"/>
+ <val o="2770d8" v="50"/>
+ <val o="277ee7" v="50"/>
+ </par>
+ <par memind="8612" h="3dc1a8de">
+ <val o="0" v="25.07"/>
+ <val o="e08" v="24.067"/>
+ <val o="1c32" v="23.438"/>
+ <val o="2a3c" v="23.245"/>
+ <val o="3835" v="22.784"/>
+ <val o="4645" v="22.746"/>
+ <val o="5455" v="26.297"/>
+ <val o="6265" v="28.878"/>
+ <val o="7075" v="34.451"/>
+ <val o="7e85" v="40.017"/>
+ <val o="8c96" v="40.572"/>
+ <val o="9aa5" v="38.682"/>
+ <val o="a8b6" v="35.869"/>
+ <val o="b6c5" v="34.12"/>
+ <val o="c4d7" v="0.035"/>
+ <val o="d30b" v="0.036"/>
+ <val o="e0f6" v="0.035"/>
+ <val o="ef06" v="0.037"/>
+ <val o="fd17" v="0.038"/>
+ <val o="10b27" v="0.037"/>
+ <val o="11937" v="0.037"/>
+ <val o="12746" v="0.036"/>
+ <val o="13556" v="0.035"/>
+ <val o="14366" v="0.036"/>
+ <val o="15181" v="0.037"/>
+ <val o="15f85" v="0.036"/>
+ <val o="16d95" v="0.036"/>
+ <val o="17ba4" v="0.035"/>
+ <val o="189b5" v="0.038"/>
+ <val o="197c4" v="0.036"/>
+ <val o="1a5d5" v="0.037"/>
+ <val o="1b3e6" v="0.034"/>
+ <val o="1c1f6" v="0.037"/>
+ <val o="1d005" v="0.035"/>
+ <val o="1de15" v="0.033"/>
+ <val o="1ec25" v="0.035"/>
+ <val o="1fa36" v="0.035"/>
+ <val o="20845" v="0.037"/>
+ <val o="21656" v="0.035"/>
+ <val o="22465" v="0.037"/>
+ <val o="23276" v="0.035"/>
+ <val o="24086" v="0.034"/>
+ <val o="24e99" v="0.035"/>
+ <val o="25ca7" v="0.035"/>
+ <val o="26ab7" v="0.035"/>
+ <val o="278c6" v="0.036"/>
+ <val o="286d6" v="0.035"/>
+ <val o="294e6" v="0.034"/>
+ <val o="2a301" v="0.036"/>
+ <val o="2b105" v="0.034"/>
+ <val o="2bf15" v="0.034"/>
+ <val o="2cd25" v="0.036"/>
+ <val o="2db35" v="0.034"/>
+ <val o="2e946" v="0.033"/>
+ <val o="2f755" v="0.034"/>
+ <val o="30566" v="0.035"/>
+ <val o="31375" v="0.035"/>
+ <val o="3219e" v="0.035"/>
+ <val o="32f96" v="0.036"/>
+ <val o="33da6" v="0.035"/>
+ <val o="34bb6" v="0.035"/>
+ <val o="359de" v="0.033"/>
+ <val o="367d6" v="0.035"/>
+ <val o="375e6" v="0.034"/>
+ <val o="3840e" v="0.033"/>
+ <val o="3921e" v="0.035"/>
+ <val o="3a016" v="0.035"/>
+ <val o="3ae27" v="0.036"/>
+ <val o="3bc36" v="0.035"/>
+ <val o="3ca47" v="0.035"/>
+ <val o="3d856" v="0.036"/>
+ <val o="3e667" v="0.035"/>
+ <val o="3f481" v="0.037"/>
+ <val o="40285" v="0.034"/>
+ <val o="41095" v="0.035"/>
+ <val o="41ea5" v="0.035"/>
+ <val o="42cb5" v="0.035"/>
+ <val o="43ac5" v="0.036"/>
+ <val o="448d5" v="0.038"/>
+ <val o="456e6" v="0.036"/>
+ <val o="464f5" v="0.039"/>
+ <val o="480ff" v="0.036"/>
+ <val o="48f0e" v="0.036"/>
+ <val o="49d1d" v="0.038"/>
+ <val o="4ab46" v="0.036"/>
+ <val o="4b955" v="0.037"/>
+ <val o="4c769" v="0.036"/>
+ <val o="4d577" v="0.036"/>
+ <val o="4e387" v="0.036"/>
+ <val o="4f196" v="0.036"/>
+ <val o="4ffa6" v="0.036"/>
+ <val o="50dd0" v="0.038"/>
+ <val o="51bc6" v="0.036"/>
+ <val o="529d6" v="0.036"/>
+ <val o="537e7" v="0.035"/>
+ <val o="54600" v="0.036"/>
+ <val o="55406" v="0.034"/>
+ <val o="56215" v="0.035"/>
+ <val o="57026" v="0.034"/>
+ <val o="57e36" v="0.036"/>
+ <val o="58c46" v="0.035"/>
+ <val o="59a70" v="0.04"/>
+ <val o="5a867" v="0.034"/>
+ <val o="5b676" v="0.035"/>
+ <val o="5c487" v="0.036"/>
+ <val o="5d296" v="0.037"/>
+ <val o="5e0a9" v="0.036"/>
+ <val o="5eeb8" v="0.039"/>
+ <val o="5fcc6" v="0.036"/>
+ <val o="60ad7" v="0.035"/>
+ <val o="618e7" v="0.036"/>
+ <val o="626f7" v="0.035"/>
+ <val o="63507" v="0.036"/>
+ <val o="64317" v="0.037"/>
+ <val o="65127" v="0.039"/>
+ <val o="65f37" v="0.037"/>
+ <val o="66d46" v="0.035"/>
+ <val o="67b57" v="0.036"/>
+ <val o="68967" v="0.035"/>
+ <val o="69782" v="0.035"/>
+ <val o="6a586" v="0.037"/>
+ <val o="6b395" v="0.035"/>
+ <val o="6c1a6" v="0.037"/>
+ <val o="6cfb5" v="0.035"/>
+ <val o="6ddc6" v="0.033"/>
+ <val o="6ebd6" v="0.033"/>
+ <val o="6f9e6" v="0.035"/>
+ <val o="707f6" v="0.035"/>
+ <val o="71607" v="0.037"/>
+ <val o="72417" v="0.037"/>
+ <val o="73227" v="0.037"/>
+ <val o="74037" v="0.037"/>
+ <val o="74e47" v="0.037"/>
+ <val o="75c57" v="0.04"/>
+ <val o="76a63" v="0.036"/>
+ <val o="77873" v="0.035"/>
+ <val o="78680" v="0.037"/>
+ <val o="7948f" v="0.036"/>
+ <val o="7a29f" v="0.036"/>
+ <val o="7b0af" v="0.036"/>
+ <val o="7bebf" v="0.036"/>
+ <val o="7cccf" v="0.037"/>
+ <val o="7dadf" v="0.036"/>
+ <val o="7e8fa" v="0.035"/>
+ <val o="7f70a" v="0.035"/>
+ <val o="8051a" v="0.036"/>
+ <val o="8132a" v="0.034"/>
+ <val o="8213a" v="0.035"/>
+ <val o="82f4a" v="0.036"/>
+ <val o="83d5a" v="0.035"/>
+ <val o="84b6a" v="0.034"/>
+ <val o="8597a" v="0.035"/>
+ <val o="8678b" v="0.036"/>
+ <val o="8759b" v="0.034"/>
+ <val o="883ac" v="0.037"/>
+ <val o="891bb" v="0.037"/>
+ <val o="89fca" v="0.035"/>
+ <val o="8adda" v="0.035"/>
+ <val o="8bbeb" v="0.035"/>
+ <val o="8c9fc" v="0.035"/>
+ <val o="8d80b" v="0.034"/>
+ <val o="8e61a" v="0.035"/>
+ <val o="8f42a" v="0.034"/>
+ <val o="9023a" v="0.036"/>
+ <val o="9104a" v="0.035"/>
+ <val o="91e5a" v="0.035"/>
+ <val o="92c6a" v="0.034"/>
+ <val o="93a84" v="0.035"/>
+ <val o="94885" v="0.036"/>
+ <val o="95694" v="0.034"/>
+ <val o="964a5" v="0.034"/>
+ <val o="972b4" v="0.034"/>
+ <val o="980c5" v="0.034"/>
+ <val o="98ed4" v="0.035"/>
+ <val o="99ce5" v="0.037"/>
+ <val o="9aaf5" v="0.034"/>
+ <val o="9b906" v="0.036"/>
+ <val o="9c716" v="0.037"/>
+ <val o="9d526" v="0.035"/>
+ <val o="9e336" v="0.035"/>
+ <val o="9f145" v="0.035"/>
+ <val o="9ff56" v="0.035"/>
+ <val o="a0d65" v="0.036"/>
+ <val o="a1b77" v="36.117"/>
+ <val o="a2986" v="17.613"/>
+ <val o="a3795" v="8.357"/>
+ <val o="a45a7" v="5.957"/>
+ <val o="a53b6" v="7.134"/>
+ <val o="a61c7" v="8.646"/>
+ <val o="a6fd6" v="6.429"/>
+ <val o="a7e00" v="10.235"/>
+ <val o="a8c00" v="14.027"/>
+ <val o="a9a05" v="3.549"/>
+ <val o="aa815" v="3.8"/>
+ <val o="ab625" v="6.093"/>
+ <val o="ac435" v="5.204"/>
+ <val o="ad245" v="7.526"/>
+ <val o="ae055" v="11.39"/>
+ <val o="aee65" v="0.954"/>
+ <val o="afc75" v="5.773"/>
+ <val o="b0a85" v="21.019"/>
+ <val o="b26a6" v="22.636"/>
+ <val o="b34b6" v="19.316"/>
+ <val o="b42c6" v="1.265"/>
+ <val o="b50d6" v="3.13"/>
+ <val o="b5ee7" v="6.091"/>
+ <val o="b6cf6" v="7.273"/>
+ <val o="b7b07" v="9.373"/>
+ <val o="b8917" v="7.711"/>
+ <val o="b9728" v="8.183"/>
+ <val o="ba537" v="9.843"/>
+ <val o="bb347" v="5.251"/>
+ <val o="bc157" v="2.646"/>
+ <val o="bcf67" v="7.175"/>
+ <val o="bdd81" v="19.697"/>
+ <val o="beb86" v="4.703"/>
+ <val o="bf995" v="5.017"/>
+ <val o="c07a6" v="5.028"/>
+ <val o="c15b5" v="4.406"/>
+ <val o="c23c6" v="5.164"/>
+ <val o="c31d5" v="10.951"/>
+ <val o="c3fe6" v="5.096"/>
+ <val o="c4df5" v="10.032"/>
+ <val o="c5c06" v="4.084"/>
+ <val o="c6a16" v="5.223"/>
+ <val o="c7826" v="6.622"/>
+ <val o="c8636" v="2.571"/>
+ <val o="c9446" v="3.766"/>
+ <val o="ca256" v="2.925"/>
+ <val o="cb066" v="4.239"/>
+ <val o="cbe76" v="2.442"/>
+ <val o="ccc87" v="10.653"/>
+ <val o="cda96" v="15.045"/>
+ <val o="ce8a8" v="10.497"/>
+ <val o="cf6b7" v="14.243"/>
+ <val o="d04c8" v="11.318"/>
+ <val o="d12d7" v="7.26"/>
+ <val o="d20e7" v="3.278"/>
+ <val o="d2f02" v="12.768"/>
+ <val o="d3d05" v="8.863"/>
+ <val o="d4b15" v="8.423"/>
+ <val o="d5926" v="7.503"/>
+ <val o="d6735" v="7.803"/>
+ <val o="d7546" v="10.91"/>
+ <val o="d8355" v="5.743"/>
+ <val o="d9166" v="2.082"/>
+ <val o="d9f75" v="7.751"/>
+ <val o="dad87" v="16.785"/>
+ <val o="dbb97" v="18.467"/>
+ <val o="dc9a8" v="18.801"/>
+ <val o="dd7b7" v="16.008"/>
+ <val o="de5c6" v="13.629"/>
+ <val o="df3d7" v="14.479"/>
+ <val o="e01d7" v="14.927"/>
+ <val o="e0fe5" v="14.349"/>
+ <val o="e1df5" v="15.502"/>
+ <val o="e2c04" v="20.07"/>
+ <val o="e3a14" v="20.011"/>
+ <val o="e4824" v="16.357"/>
+ <val o="e5634" v="17.03"/>
+ <val o="e6444" v="11.901"/>
+ <val o="e7255" v="10.138"/>
+ <val o="e806f" v="8.731"/>
+ <val o="e8e7f" v="14.357"/>
+ <val o="e9c8e" v="4.86"/>
+ <val o="eaa9f" v="4.149"/>
+ <val o="eb8ae" v="6.019"/>
+ <val o="ec6bf" v="14.635"/>
+ <val o="ed4ce" v="9.989"/>
+ <val o="ee2df" v="11.96"/>
+ <val o="ef0ef" v="15.422"/>
+ <val o="eff01" v="22.742"/>
+ <val o="f0d10" v="22.428"/>
+ <val o="f1b20" v="24.11"/>
+ <val o="f2930" v="23.076"/>
+ <val o="f3740" v="23.241"/>
+ <val o="f4551" v="24.018"/>
+ <val o="f5361" v="25.989"/>
+ <val o="f6172" v="24.748"/>
+ <val o="f6f80" v="25.323"/>
+ <val o="f7d91" v="23.122"/>
+ <val o="f8ba1" v="19.403"/>
+ <val o="f99b1" v="19.28"/>
+ <val o="fa7c0" v="16.12"/>
+ <val o="fb5d1" v="16.228"/>
+ <val o="fc3e0" v="16.654"/>
+ <val o="fd1fb" v="14.2"/>
+ <val o="fe00b" v="14.054"/>
+ <val o="fee1c" v="9.557"/>
+ <val o="ffc2c" v="9.072"/>
+ <val o="100a3b" v="8.333"/>
+ <val o="10184c" v="9.771"/>
+ <val o="10265b" v="14.337"/>
+ <val o="10346c" v="16.049"/>
+ <val o="10427b" v="19.911"/>
+ <val o="10508d" v="23.238"/>
+ <val o="105e9d" v="23.213"/>
+ <val o="106cad" v="25.179"/>
+ <val o="107abd" v="21.591"/>
+ <val o="1088cd" v="19.665"/>
+ <val o="1096de" v="21.079"/>
+ <val o="10a4ed" v="21.109"/>
+ <val o="10b2fe" v="22.363"/>
+ <val o="10c10d" v="25.172"/>
+ <val o="10cf1e" v="23.223"/>
+ <val o="10dd2e" v="20.912"/>
+ <val o="10eb66" v="22.017"/>
+ <val o="10f94e" v="18.729"/>
+ <val o="11075e" v="16.761"/>
+ <val o="11156d" v="13.145"/>
+ <val o="112388" v="13.912"/>
+ <val o="113187" v="8.712"/>
+ <val o="113fb0" v="8.106"/>
+ <val o="114da6" v="8.195"/>
+ <val o="115bb6" v="8.301"/>
+ <val o="1169c6" v="10.111"/>
+ <val o="1177d6" v="14.213"/>
+ <val o="1185e8" v="15.617"/>
+ <val o="1193f7" v="19.095"/>
+ <val o="11a208" v="23.986"/>
+ <val o="11b017" v="20.919"/>
+ <val o="11be2f" v="26.06"/>
+ <val o="11cc37" v="21.493"/>
+ <val o="11da47" v="21.006"/>
+ <val o="11e857" v="22.144"/>
+ <val o="11f667" v="19.124"/>
+ <val o="120578" v="0.019"/>
+ <val o="121386" v="0.021"/>
+ <val o="122196" v="0.021"/>
+ <val o="122fa6" v="0.018"/>
+ <val o="123db5" v="0.015"/>
+ <val o="124bc5" v="0.016"/>
+ <val o="1259d5" v="0.011"/>
+ <val o="1267e4" v="0.01"/>
+ <val o="127600" v="0.011"/>
+ <val o="128305" v="0.01"/>
+ <val o="129115" v="0.01"/>
+ <val o="129f25" v="0.01"/>
+ <val o="12ad35" v="0.009"/>
+ <val o="12bb45" v="0.006"/>
+ <val o="12c954" v="0.009"/>
+ <val o="12d766" v="0.011"/>
+ <val o="12e575" v="0.017"/>
+ <val o="12f386" v="0.012"/>
+ <val o="130196" v="0.019"/>
+ <val o="130fa6" v="0.014"/>
+ <val o="131db7" v="0.015"/>
+ <val o="132bc5" v="0.015"/>
+ <val o="1339d4" v="0.279"/>
+ <val o="1347e5" v="0.096"/>
+ <val o="1355f4" v="0.141"/>
+ <val o="136404" v="0.207"/>
+ <val o="137214" v="0.218"/>
+ <val o="138024" v="0.213"/>
+ <val o="138e33" v="0.214"/>
+ <val o="139c44" v="0.075"/>
+ <val o="13aa54" v="0.05"/>
+ <val o="13b865" v="0.034"/>
+ <val o="13c67e" v="0.449"/>
+ <val o="13d48e" v="0.217"/>
+ <val o="13e29e" v="0.167"/>
+ <val o="13f0ae" v="0.158"/>
+ <val o="13febf" v="0.232"/>
+ <val o="140ccf" v="0.339"/>
+ <val o="141adf" v="0.212"/>
+ <val o="1428ef" v="0.044"/>
+ <val o="1436ff" v="0.033"/>
+ <val o="14450f" v="0.025"/>
+ <val o="14531f" v="0.023"/>
+ <val o="146130" v="0.058"/>
+ <val o="146f40" v="0.145"/>
+ <val o="147d44" v="0.064"/>
+ <val o="148b57" v="0.08"/>
+ <val o="149965" v="0.067"/>
+ <val o="14a775" v="0.111"/>
+ <val o="14b584" v="0.05"/>
+ <val o="14c397" v="0.239"/>
+ <val o="14d1a4" v="0.206"/>
+ <val o="14dfb6" v="0.163"/>
+ <val o="14edc5" v="0.063"/>
+ <val o="14fbd5" v="0.027"/>
+ <val o="1509e5" v="0.077"/>
+ <val o="1517ff" v="0.153"/>
+ <val o="152605" v="0.181"/>
+ <val o="153415" v="0.149"/>
+ <val o="154225" v="0.157"/>
+ <val o="155035" v="0.166"/>
+ <val o="155e45" v="0.216"/>
+ <val o="156c55" v="0.306"/>
+ <val o="157a65" v="0.168"/>
+ <val o="158875" v="0.145"/>
+ <val o="159686" v="0.252"/>
+ <val o="15a495" v="0.213"/>
+ <val o="15b2a6" v="0.19"/>
+ <val o="15c0b6" v="0.111"/>
+ <val o="15cec6" v="0.114"/>
+ <val o="15dcd5" v="0.107"/>
+ <val o="15eae6" v="0.115"/>
+ <val o="15f8f5" v="0.302"/>
+ <val o="160706" v="0.03"/>
+ <val o="161517" v="0.06"/>
+ <val o="162326" v="0.048"/>
+ <val o="163137" v="0.069"/>
+ <val o="163f46" v="0.063"/>
+ <val o="164d57" v="0.029"/>
+ <val o="165b67" v="0.105"/>
+ <val o="166982" v="0.096"/>
+ <val o="167786" v="0.142"/>
+ <val o="168596" v="0.101"/>
+ <val o="1693a6" v="0.092"/>
+ <val o="16a1b5" v="0.071"/>
+ <val o="16afc6" v="0.067"/>
+ <val o="16bdd5" v="0.17"/>
+ <val o="16cbe6" v="0.212"/>
+ <val o="16d9f6" v="0.089"/>
+ <val o="16e807" v="0.607"/>
+ <val o="16f616" v="0.675"/>
+ <val o="170429" v="0.723"/>
+ <val o="171236" v="0.477"/>
+ <val o="172047" v="0.477"/>
+ <val o="172e57" v="0.491"/>
+ <val o="173c67" v="0.496"/>
+ <val o="174a77" v="0.579"/>
+ <val o="175887" v="0.62"/>
+ <val o="176694" v="35.716"/>
+ <val o="1774a3" v="33.973"/>
+ <val o="1782b3" v="35.295"/>
+ <val o="1790c5" v="32.429"/>
+ <val o="179ed4" v="28.433"/>
+ <val o="17ace4" v="29.24"/>
+ <val o="17bafd" v="30.943"/>
+ <val o="17c90f" v="28.05"/>
+ <val o="17d71e" v="27.792"/>
+ <val o="17e52f" v="28.102"/>
+ <val o="17f33f" v="25.534"/>
+ <val o="18014f" v="25.021"/>
+ <val o="180f5f" v="30.046"/>
+ <val o="181d6e" v="32.772"/>
+ <val o="182b7f" v="38.186"/>
+ <val o="18398f" v="64.34"/>
+ <val o="1847a1" v="63.582"/>
+ <val o="1855af" v="60.895"/>
+ <val o="1863c0" v="57.167"/>
+ <val o="1871cf" v="59.436"/>
+ <val o="187fe0" v="56.655"/>
+ <val o="188def" v="60.597"/>
+ <val o="189c00" v="56.836"/>
+ <val o="18b80d" v="37.581"/>
+ <val o="18c61c" v="40.1"/>
+ <val o="18d42c" v="38.214"/>
+ <val o="18e23b" v="32.175"/>
+ <val o="18f04b" v="30.662"/>
+ <val o="18fe5e" v="26.933"/>
+ <val o="190c76" v="21.269"/>
+ <val o="191a86" v="21.646"/>
+ <val o="192896" v="21.244"/>
+ <val o="1936a6" v="20.855"/>
+ <val o="1944b7" v="19.588"/>
+ <val o="1952c6" v="20.809"/>
+ <val o="1960d7" v="25.64"/>
+ <val o="196ee6" v="29.166"/>
+ <val o="197cf8" v="31.236"/>
+ <val o="198b0f" v="28.424"/>
+ <val o="19991f" v="32.717"/>
+ <val o="19b541" v="32.231"/>
+ <val o="19c34d" v="29.816"/>
+ <val o="19d15e" v="29.219"/>
+ <val o="19df80" v="29.861"/>
+ <val o="19ed90" v="29.093"/>
+ <val o="19eebe" v="29.004"/>
+ <val o="19fb8e" v="10.445"/>
+ <val o="1a09a0" v="18.158"/>
+ <val o="1a17ae" v="23.713"/>
+ <val o="1a25be" v="25.84"/>
+ <val o="1a33cd" v="13.692"/>
+ <val o="1a41dd" v="15.619"/>
+ <val o="1a4fed" v="22.235"/>
+ <val o="1a5e08" v="20.533"/>
+ <val o="1a6c05" v="14.806"/>
+ <val o="1a7a15" v="17.786"/>
+ <val o="1a8826" v="18.205"/>
+ <val o="1a9637" v="14.86"/>
+ <val o="1aa445" v="11.317"/>
+ <val o="1ab255" v="6.403"/>
+ <val o="1ac065" v="13.389"/>
+ <val o="1ace75" v="18.094"/>
+ <val o="1adc87" v="16.688"/>
+ <val o="1aea96" v="16.251"/>
+ <val o="1af8a7" v="17.902"/>
+ <val o="1b06b7" v="16.864"/>
+ <val o="1b14c6" v="16.076"/>
+ <val o="1c7460" v="4.33"/>
+ <val o="1c8270" v="4.33"/>
+ <val o="1c907e" v="21.221"/>
+ <val o="1c9e8f" v="20.86"/>
+ <val o="1caca2" v="22.903"/>
+ <val o="1cbab1" v="22.672"/>
+ <val o="1cc8c1" v="34.711"/>
+ <val o="1cd6d0" v="33.792"/>
+ <val o="1ce4de" v="32.717"/>
+ <val o="1cf2f0" v="33.04"/>
+ <val o="1d0109" v="34.047"/>
+ <val o="1d0f06" v="36.536"/>
+ <val o="1d1d15" v="36.673"/>
+ <val o="1d2b25" v="36.752"/>
+ <val o="1d3935" v="37.932"/>
+ <val o="1d4745" v="37.857"/>
+ <val o="1d5555" v="37.029"/>
+ <val o="1d6366" v="32.844"/>
+ <val o="1d7175" v="31.917"/>
+ <val o="1d7f86" v="31.363"/>
+ <val o="1d8d95" v="15.349"/>
+ <val o="1d9ba6" v="17.623"/>
+ <val o="1da9b6" v="17.658"/>
+ <val o="1db7c7" v="16.597"/>
+ <val o="1dc5d5" v="17.621"/>
+ <val o="1dd3e6" v="18.017"/>
+ <val o="1de1f5" v="32.337"/>
+ <val o="1df006" v="37.113"/>
+ <val o="1dfe16" v="36.896"/>
+ <val o="1e0c26" v="37.646"/>
+ <val o="1e1a36" v="37.465"/>
+ <val o="1e2847" v="35.96"/>
+ <val o="1e3659" v="34.217"/>
+ <val o="1e4467" v="31.472"/>
+ <val o="1e5281" v="27.913"/>
+ <val o="1e6086" v="27.77"/>
+ <val o="1e6e96" v="27.092"/>
+ <val o="1e7ca6" v="9.65"/>
+ <val o="1e8ab5" v="8.989"/>
+ <val o="1e98c6" v="8.871"/>
+ <val o="1ea6d5" v="11.525"/>
+ <val o="1eb4e6" v="11.312"/>
+ <val o="1ec2f6" v="13.145"/>
+ <val o="1ed106" v="12.866"/>
+ <val o="1edf16" v="13.503"/>
+ <val o="1eed26" v="12.977"/>
+ <val o="1efb36" v="12.853"/>
+ <val o="1f0946" v="12.322"/>
+ <val o="1f1756" v="11.244"/>
+ <val o="1f2566" v="11.357"/>
+ <val o="1f3376" v="13.909"/>
+ <val o="1f4187" v="20.778"/>
+ <val o="1f4f96" v="17.384"/>
+ <val o="1f5da7" v="17.882"/>
+ <val o="1f6bb6" v="17.779"/>
+ <val o="1f79c7" v="15.628"/>
+ <val o="1f87d6" v="18.718"/>
+ <val o="1f95e7" v="19.687"/>
+ <val o="1fa401" v="15.856"/>
+ <val o="1fb204" v="14.235"/>
+ <val o="1fc016" v="14.121"/>
+ <val o="1fce25" v="10.417"/>
+ <val o="1fdc35" v="10.192"/>
+ <val o="1fea45" v="10.247"/>
+ <val o="1ff855" v="12.409"/>
+ <val o="200665" v="18.782"/>
+ <val o="201475" v="17.709"/>
+ <val o="202286" v="24.468"/>
+ <val o="203095" v="27.895"/>
+ <val o="203ea5" v="31.135"/>
+ <val o="204cb6" v="28.073"/>
+ <val o="205ac6" v="26.781"/>
+ <val o="2068d6" v="27.955"/>
+ <val o="2076e6" v="31.834"/>
+ <val o="2084f6" v="30.684"/>
+ <val o="209306" v="33.239"/>
+ <val o="20a116" v="31.592"/>
+ <val o="20af26" v="27.051"/>
+ <val o="20bd37" v="26.891"/>
+ <val o="20cb46" v="22.834"/>
+ <val o="20d957" v="21.1"/>
+ <val o="20e767" v="20.723"/>
+ <val o="20f581" v="20.412"/>
+ <val o="210386" v="17.178"/>
+ <val o="211194" v="14.845"/>
+ <val o="211fa5" v="14.404"/>
+ <val o="212db5" v="13.895"/>
+ <val o="213bc5" v="14.291"/>
+ <val o="2149d6" v="18.376"/>
+ <val o="2157e5" v="22.682"/>
+ <val o="2165f6" v="29.056"/>
+ <val o="217406" v="30.985"/>
+ <val o="218217" v="31.244"/>
+ <val o="219026" v="30.501"/>
+ <val o="219e39" v="30.757"/>
+ <val o="21ac46" v="29.766"/>
+ <val o="21ba57" v="29.686"/>
+ <val o="21c867" v="30.47"/>
+ <val o="21d677" v="31.06"/>
+ <val o="21e487" v="28.958"/>
+ <val o="21f296" v="28.474"/>
+ <val o="2200a6" v="27.753"/>
+ <val o="220eb7" v="26.676"/>
+ <val o="221cc6" v="24.07"/>
+ <val o="222ad7" v="18.889"/>
+ <val o="2238e7" v="17.556"/>
+ <val o="224701" v="16.434"/>
+ <val o="225505" v="18.47"/>
+ <val o="226315" v="9.837"/>
+ <val o="227125" v="9.73"/>
+ <val o="227f35" v="12.672"/>
+ <val o="228d45" v="17.29"/>
+ <val o="229b54" v="17.161"/>
+ <val o="22a965" v="19.388"/>
+ <val o="22b776" v="22.792"/>
+ <val o="22c586" v="25.973"/>
+ <val o="22d397" v="28.305"/>
+ <val o="22e1a6" v="28.475"/>
+ <val o="22efb6" v="23.531"/>
+ <val o="22fdc7" v="22.62"/>
+ <val o="230bd7" v="22.13"/>
+ <val o="2319e6" v="27.159"/>
+ <val o="2327f6" v="27.705"/>
+ <val o="23361b" v="29.796"/>
+ <val o="234416" v="27.341"/>
+ <val o="235226" v="25.887"/>
+ <val o="236037" v="25.842"/>
+ <val o="236e46" v="23.266"/>
+ <val o="237c57" v="21.664"/>
+ <val o="238a66" v="19.437"/>
+ <val o="239881" v="15.912"/>
+ <val o="23a685" v="16.037"/>
+ <val o="23b495" v="15.674"/>
+ <val o="23c2a4" v="13.705"/>
+ <val o="23d0b5" v="14.331"/>
+ <val o="23dec4" v="15.781"/>
+ <val o="23ecd5" v="18.196"/>
+ <val o="23fae4" v="22.115"/>
+ <val o="2408f6" v="26.066"/>
+ <val o="241706" v="34.813"/>
+ <val o="242518" v="35.914"/>
+ <val o="243325" v="36.775"/>
+ <val o="244137" v="34.277"/>
+ <val o="244f46" v="32.056"/>
+ <val o="246b66" v="33.001"/>
+ <val o="247976" v="31.687"/>
+ <val o="248786" v="36.854"/>
+ <val o="24957e" v="30.428"/>
+ <val o="24a38f" v="28.246"/>
+ <val o="24b19c" v="28.984"/>
+ <val o="24bfac" v="27.176"/>
+ <val o="24cdbc" v="26.455"/>
+ <val o="24dbcd" v="21.891"/>
+ <val o="24e9e5" v="20.073"/>
+ <val o="24f808" v="17.083"/>
+ <val o="250616" v="17.921"/>
+ <val o="251426" v="17.972"/>
+ <val o="252236" v="16.1"/>
+ <val o="253047" v="17.324"/>
+ <val o="253e56" v="20.97"/>
+ <val o="254c67" v="21.269"/>
+ <val o="255a76" v="25.041"/>
+ <val o="256887" v="31.27"/>
+ <val o="257697" v="33.712"/>
+ <val o="2584a8" v="82.744"/>
+ <val o="2592b6" v="46.746"/>
+ <val o="25a0c7" v="22.903"/>
+ <val o="25aed7" v="31.343"/>
+ <val o="25bce7" v="30.438"/>
+ <val o="25caf8" v="28.883"/>
+ <val o="25d907" v="30.794"/>
+ <val o="25e718" v="31.011"/>
+ <val o="25f527" v="28.098"/>
+ <val o="260338" v="27.177"/>
+ <val o="261149" v="24.941"/>
+ <val o="261f59" v="22.834"/>
+ <val o="262d68" v="23.209"/>
+ <val o="263b83" v="17.56"/>
+ <val o="264986" v="17.555"/>
+ <val o="265795" v="18.761"/>
+ <val o="2665a6" v="20.698"/>
+ <val o="2673b5" v="19.372"/>
+ <val o="2681c6" v="18.644"/>
+ <val o="268fd5" v="18.792"/>
+ <val o="269de6" v="18.951"/>
+ <val o="26abf6" v="18.907"/>
+ <val o="26ba06" v="23.409"/>
+ <val o="26c817" v="23.511"/>
+ <val o="26d62b" v="26.941"/>
+ <val o="26e436" v="24.008"/>
+ <val o="26f247" v="23.147"/>
+ <val o="270057" v="23.935"/>
+ <val o="270e67" v="24"/>
+ <val o="271c77" v="22.888"/>
+ <val o="272a87" v="26.246"/>
+ <val o="273897" v="25.909"/>
+ <val o="2746a8" v="25.109"/>
+ <val o="2754b9" v="24.725"/>
+ <val o="2762c7" v="23.755"/>
+ <val o="2770d8" v="18.839"/>
+ <val o="277ee7" v="15.362"/>
+ </par>
+ <par memind="8608" h="3dc1a8de">
+ <val o="0" v="0"/>
+ <val o="e08" v="0"/>
+ <val o="1c32" v="0"/>
+ <val o="2a3c" v="0"/>
+ <val o="3835" v="0"/>
+ <val o="4645" v="0"/>
+ <val o="5455" v="0"/>
+ <val o="6265" v="0"/>
+ <val o="7075" v="0"/>
+ <val o="7e85" v="0"/>
+ <val o="8c96" v="0"/>
+ <val o="9aa5" v="0"/>
+ <val o="a8b6" v="0"/>
+ <val o="b6c5" v="0"/>
+ <val o="c4d7" v="0"/>
+ <val o="d30b" v="0"/>
+ <val o="e0f6" v="0"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="0"/>
+ <val o="11937" v="0"/>
+ <val o="12746" v="0"/>
+ <val o="13556" v="0"/>
+ <val o="14366" v="0"/>
+ <val o="15181" v="0"/>
+ <val o="15f85" v="0"/>
+ <val o="16d95" v="0"/>
+ <val o="17ba4" v="0"/>
+ <val o="189b5" v="0"/>
+ <val o="197c4" v="0"/>
+ <val o="1a5d5" v="0"/>
+ <val o="1b3e6" v="0"/>
+ <val o="1c1f6" v="0"/>
+ <val o="1d005" v="0"/>
+ <val o="1de15" v="0"/>
+ <val o="1ec25" v="0"/>
+ <val o="1fa36" v="0"/>
+ <val o="20845" v="0"/>
+ <val o="21656" v="0"/>
+ <val o="22465" v="0"/>
+ <val o="23276" v="0"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="0"/>
+ <val o="25ca7" v="0"/>
+ <val o="26ab7" v="0"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="0"/>
+ <val o="294e6" v="0"/>
+ <val o="2a301" v="0"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="0"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="0"/>
+ <val o="31375" v="0"/>
+ <val o="3219e" v="0"/>
+ <val o="32f96" v="0"/>
+ <val o="33da6" v="0"/>
+ <val o="34bb6" v="0"/>
+ <val o="359de" v="0"/>
+ <val o="367d6" v="0"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="0"/>
+ <val o="3bc36" v="0"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="0"/>
+ <val o="3e667" v="0"/>
+ <val o="3f481" v="0"/>
+ <val o="40285" v="0"/>
+ <val o="41095" v="0"/>
+ <val o="41ea5" v="0"/>
+ <val o="42cb5" v="0"/>
+ <val o="43ac5" v="0"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="0"/>
+ <val o="464f5" v="0"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="0"/>
+ <val o="54600" v="0"/>
+ <val o="55406" v="0"/>
+ <val o="56215" v="0"/>
+ <val o="57026" v="0"/>
+ <val o="57e36" v="0"/>
+ <val o="58c46" v="0"/>
+ <val o="59a70" v="0"/>
+ <val o="5a867" v="0"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="0"/>
+ <val o="5eeb8" v="0"/>
+ <val o="5fcc6" v="0"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="0"/>
+ <val o="65f37" v="0"/>
+ <val o="66d46" v="0"/>
+ <val o="67b57" v="0"/>
+ <val o="68967" v="0"/>
+ <val o="69782" v="0"/>
+ <val o="6a586" v="0"/>
+ <val o="6b395" v="0"/>
+ <val o="6c1a6" v="0"/>
+ <val o="6cfb5" v="0"/>
+ <val o="6ddc6" v="0"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="0"/>
+ <val o="707f6" v="0"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="0"/>
+ <val o="74e47" v="0"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="0"/>
+ <val o="7bebf" v="0"/>
+ <val o="7cccf" v="0"/>
+ <val o="7dadf" v="0"/>
+ <val o="7e8fa" v="0"/>
+ <val o="7f70a" v="0"/>
+ <val o="8051a" v="0"/>
+ <val o="8132a" v="0"/>
+ <val o="8213a" v="0"/>
+ <val o="82f4a" v="0"/>
+ <val o="83d5a" v="0"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="0"/>
+ <val o="891bb" v="0"/>
+ <val o="89fca" v="0"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="0"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="0"/>
+ <val o="93a84" v="0"/>
+ <val o="94885" v="0"/>
+ <val o="95694" v="0"/>
+ <val o="964a5" v="0"/>
+ <val o="972b4" v="0"/>
+ <val o="980c5" v="0"/>
+ <val o="98ed4" v="0"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="0"/>
+ <val o="9c716" v="0"/>
+ <val o="9d526" v="0"/>
+ <val o="9e336" v="0"/>
+ <val o="9f145" v="0"/>
+ <val o="9ff56" v="0"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="0"/>
+ <val o="a2986" v="0"/>
+ <val o="a3795" v="0"/>
+ <val o="a45a7" v="0"/>
+ <val o="a53b6" v="0"/>
+ <val o="a61c7" v="0"/>
+ <val o="a6fd6" v="0"/>
+ <val o="a7e00" v="0"/>
+ <val o="a8c00" v="0"/>
+ <val o="a9a05" v="0"/>
+ <val o="aa815" v="0"/>
+ <val o="ab625" v="0"/>
+ <val o="ac435" v="0"/>
+ <val o="ad245" v="0"/>
+ <val o="ae055" v="0"/>
+ <val o="aee65" v="0"/>
+ <val o="afc75" v="0"/>
+ <val o="b0a85" v="0"/>
+ <val o="b26a6" v="0"/>
+ <val o="b34b6" v="0"/>
+ <val o="b42c6" v="0"/>
+ <val o="b50d6" v="0"/>
+ <val o="b5ee7" v="0"/>
+ <val o="b6cf6" v="0"/>
+ <val o="b7b07" v="0"/>
+ <val o="b8917" v="0"/>
+ <val o="b9728" v="0"/>
+ <val o="ba537" v="0"/>
+ <val o="bb347" v="0"/>
+ <val o="bc157" v="0"/>
+ <val o="bcf67" v="0"/>
+ <val o="bdd81" v="0"/>
+ <val o="beb86" v="0"/>
+ <val o="bf995" v="0"/>
+ <val o="c07a6" v="0"/>
+ <val o="c15b5" v="0"/>
+ <val o="c23c6" v="0"/>
+ <val o="c31d5" v="0"/>
+ <val o="c3fe6" v="0"/>
+ <val o="c4df5" v="0"/>
+ <val o="c5c06" v="0"/>
+ <val o="c6a16" v="0"/>
+ <val o="c7826" v="0"/>
+ <val o="c8636" v="0"/>
+ <val o="c9446" v="0"/>
+ <val o="ca256" v="0"/>
+ <val o="cb066" v="0"/>
+ <val o="cbe76" v="0"/>
+ <val o="ccc87" v="0"/>
+ <val o="cda96" v="0"/>
+ <val o="ce8a8" v="0"/>
+ <val o="cf6b7" v="0"/>
+ <val o="d04c8" v="0"/>
+ <val o="d12d7" v="0"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="0"/>
+ <val o="d3d05" v="0"/>
+ <val o="d4b15" v="0"/>
+ <val o="d5926" v="0"/>
+ <val o="d6735" v="0"/>
+ <val o="d7546" v="0"/>
+ <val o="d8355" v="0"/>
+ <val o="d9166" v="0"/>
+ <val o="d9f75" v="0"/>
+ <val o="dad87" v="0"/>
+ <val o="dbb97" v="0"/>
+ <val o="dc9a8" v="0"/>
+ <val o="dd7b7" v="0"/>
+ <val o="de5c6" v="0"/>
+ <val o="df3d7" v="0"/>
+ <val o="e01d7" v="0"/>
+ <val o="e0fe5" v="0"/>
+ <val o="e1df5" v="0"/>
+ <val o="e2c04" v="0"/>
+ <val o="e3a14" v="0"/>
+ <val o="e4824" v="0"/>
+ <val o="e5634" v="0"/>
+ <val o="e6444" v="0"/>
+ <val o="e7255" v="0"/>
+ <val o="e806f" v="0"/>
+ <val o="e8e7f" v="0"/>
+ <val o="e9c8e" v="0"/>
+ <val o="eaa9f" v="0"/>
+ <val o="eb8ae" v="0"/>
+ <val o="ec6bf" v="0"/>
+ <val o="ed4ce" v="0"/>
+ <val o="ee2df" v="0"/>
+ <val o="ef0ef" v="0"/>
+ <val o="eff01" v="0"/>
+ <val o="f0d10" v="0"/>
+ <val o="f1b20" v="0"/>
+ <val o="f2930" v="0"/>
+ <val o="f3740" v="0"/>
+ <val o="f4551" v="0"/>
+ <val o="f5361" v="0"/>
+ <val o="f6172" v="0"/>
+ <val o="f6f80" v="0"/>
+ <val o="f7d91" v="0"/>
+ <val o="f8ba1" v="0"/>
+ <val o="f99b1" v="0"/>
+ <val o="fa7c0" v="0"/>
+ <val o="fb5d1" v="0"/>
+ <val o="fc3e0" v="0"/>
+ <val o="fd1fb" v="0"/>
+ <val o="fe00b" v="0"/>
+ <val o="fee1c" v="0"/>
+ <val o="ffc2c" v="0"/>
+ <val o="100a3b" v="0"/>
+ <val o="10184c" v="0"/>
+ <val o="10265b" v="0"/>
+ <val o="10346c" v="0"/>
+ <val o="10427b" v="0"/>
+ <val o="10508d" v="0"/>
+ <val o="105e9d" v="0"/>
+ <val o="106cad" v="0"/>
+ <val o="107abd" v="0"/>
+ <val o="1088cd" v="0"/>
+ <val o="1096de" v="0"/>
+ <val o="10a4ed" v="0"/>
+ <val o="10b2fe" v="0"/>
+ <val o="10c10d" v="0"/>
+ <val o="10cf1e" v="0"/>
+ <val o="10dd2e" v="0"/>
+ <val o="10eb66" v="0"/>
+ <val o="10f94e" v="0"/>
+ <val o="11075e" v="0"/>
+ <val o="11156d" v="0"/>
+ <val o="112388" v="0"/>
+ <val o="113187" v="0"/>
+ <val o="113fb0" v="0"/>
+ <val o="114da6" v="0"/>
+ <val o="115bb6" v="0"/>
+ <val o="1169c6" v="0"/>
+ <val o="1177d6" v="0"/>
+ <val o="1185e8" v="0"/>
+ <val o="1193f7" v="0"/>
+ <val o="11a208" v="0"/>
+ <val o="11b017" v="0"/>
+ <val o="11be2f" v="0"/>
+ <val o="11cc37" v="0"/>
+ <val o="11da47" v="0"/>
+ <val o="11e857" v="0"/>
+ <val o="11f667" v="0"/>
+ <val o="120578" v="0"/>
+ <val o="121386" v="0"/>
+ <val o="122196" v="0"/>
+ <val o="122fa6" v="0"/>
+ <val o="123db5" v="0"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="0"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="0"/>
+ <val o="128305" v="0"/>
+ <val o="129115" v="0"/>
+ <val o="129f25" v="0"/>
+ <val o="12ad35" v="0"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="0"/>
+ <val o="12d766" v="0"/>
+ <val o="12e575" v="0"/>
+ <val o="12f386" v="0"/>
+ <val o="130196" v="0"/>
+ <val o="130fa6" v="0"/>
+ <val o="131db7" v="0"/>
+ <val o="132bc5" v="0"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="0"/>
+ <val o="1774a3" v="0"/>
+ <val o="1782b3" v="0"/>
+ <val o="1790c5" v="0"/>
+ <val o="179ed4" v="0"/>
+ <val o="17ace4" v="0"/>
+ <val o="17bafd" v="0"/>
+ <val o="17c90f" v="0"/>
+ <val o="17d71e" v="0"/>
+ <val o="17e52f" v="0"/>
+ <val o="17f33f" v="0"/>
+ <val o="18014f" v="0"/>
+ <val o="180f5f" v="0"/>
+ <val o="181d6e" v="0"/>
+ <val o="182b7f" v="0"/>
+ <val o="18398f" v="0"/>
+ <val o="1847a1" v="0"/>
+ <val o="1855af" v="0"/>
+ <val o="1863c0" v="0"/>
+ <val o="1871cf" v="0"/>
+ <val o="187fe0" v="0"/>
+ <val o="188def" v="0"/>
+ <val o="189c00" v="0"/>
+ <val o="18b80d" v="0"/>
+ <val o="18c61c" v="0"/>
+ <val o="18d42c" v="0"/>
+ <val o="18e23b" v="0"/>
+ <val o="18f04b" v="0"/>
+ <val o="18fe5e" v="0"/>
+ <val o="190c76" v="0"/>
+ <val o="191a86" v="0"/>
+ <val o="192896" v="0"/>
+ <val o="1936a6" v="0"/>
+ <val o="1944b7" v="0"/>
+ <val o="1952c6" v="0"/>
+ <val o="1960d7" v="0"/>
+ <val o="196ee6" v="0"/>
+ <val o="197cf8" v="0"/>
+ <val o="198b0f" v="0"/>
+ <val o="19991f" v="0"/>
+ <val o="19b541" v="0"/>
+ <val o="19c34d" v="0"/>
+ <val o="19d15e" v="0"/>
+ <val o="19df80" v="0"/>
+ <val o="19ed90" v="0"/>
+ <val o="19eebe" v="0"/>
+ <val o="19fb8e" v="0"/>
+ <val o="1a09a0" v="0"/>
+ <val o="1a17ae" v="0"/>
+ <val o="1a25be" v="0"/>
+ <val o="1a33cd" v="0"/>
+ <val o="1a41dd" v="0"/>
+ <val o="1a4fed" v="0"/>
+ <val o="1a5e08" v="0"/>
+ <val o="1a6c05" v="0"/>
+ <val o="1a7a15" v="0"/>
+ <val o="1a8826" v="0"/>
+ <val o="1a9637" v="0"/>
+ <val o="1aa445" v="0"/>
+ <val o="1ab255" v="0"/>
+ <val o="1ac065" v="0"/>
+ <val o="1ace75" v="0"/>
+ <val o="1adc87" v="0"/>
+ <val o="1aea96" v="0"/>
+ <val o="1af8a7" v="0"/>
+ <val o="1b06b7" v="0"/>
+ <val o="1b14c6" v="0"/>
+ <val o="1c7460" v="0"/>
+ <val o="1c8270" v="0"/>
+ <val o="1c907e" v="0"/>
+ <val o="1c9e8f" v="0"/>
+ <val o="1caca2" v="0"/>
+ <val o="1cbab1" v="0"/>
+ <val o="1cc8c1" v="0"/>
+ <val o="1cd6d0" v="0"/>
+ <val o="1ce4de" v="0"/>
+ <val o="1cf2f0" v="0"/>
+ <val o="1d0109" v="0"/>
+ <val o="1d0f06" v="0"/>
+ <val o="1d1d15" v="0"/>
+ <val o="1d2b25" v="0"/>
+ <val o="1d3935" v="0"/>
+ <val o="1d4745" v="0"/>
+ <val o="1d5555" v="0"/>
+ <val o="1d6366" v="0"/>
+ <val o="1d7175" v="0"/>
+ <val o="1d7f86" v="0"/>
+ <val o="1d8d95" v="0"/>
+ <val o="1d9ba6" v="0"/>
+ <val o="1da9b6" v="0"/>
+ <val o="1db7c7" v="0"/>
+ <val o="1dc5d5" v="0"/>
+ <val o="1dd3e6" v="0"/>
+ <val o="1de1f5" v="0"/>
+ <val o="1df006" v="0"/>
+ <val o="1dfe16" v="0"/>
+ <val o="1e0c26" v="0"/>
+ <val o="1e1a36" v="0"/>
+ <val o="1e2847" v="0"/>
+ <val o="1e3659" v="0"/>
+ <val o="1e4467" v="0"/>
+ <val o="1e5281" v="0"/>
+ <val o="1e6086" v="0"/>
+ <val o="1e6e96" v="0"/>
+ <val o="1e7ca6" v="0"/>
+ <val o="1e8ab5" v="0"/>
+ <val o="1e98c6" v="0"/>
+ <val o="1ea6d5" v="0"/>
+ <val o="1eb4e6" v="0"/>
+ <val o="1ec2f6" v="0"/>
+ <val o="1ed106" v="0"/>
+ <val o="1edf16" v="0"/>
+ <val o="1eed26" v="0"/>
+ <val o="1efb36" v="0"/>
+ <val o="1f0946" v="0"/>
+ <val o="1f1756" v="0"/>
+ <val o="1f2566" v="0"/>
+ <val o="1f3376" v="0"/>
+ <val o="1f4187" v="0"/>
+ <val o="1f4f96" v="0"/>
+ <val o="1f5da7" v="0"/>
+ <val o="1f6bb6" v="0"/>
+ <val o="1f79c7" v="0"/>
+ <val o="1f87d6" v="0"/>
+ <val o="1f95e7" v="0"/>
+ <val o="1fa401" v="0"/>
+ <val o="1fb204" v="0"/>
+ <val o="1fc016" v="0"/>
+ <val o="1fce25" v="0"/>
+ <val o="1fdc35" v="0"/>
+ <val o="1fea45" v="0"/>
+ <val o="1ff855" v="0"/>
+ <val o="200665" v="0"/>
+ <val o="201475" v="0"/>
+ <val o="202286" v="0"/>
+ <val o="203095" v="0"/>
+ <val o="203ea5" v="0"/>
+ <val o="204cb6" v="0"/>
+ <val o="205ac6" v="0"/>
+ <val o="2068d6" v="0"/>
+ <val o="2076e6" v="0"/>
+ <val o="2084f6" v="0"/>
+ <val o="209306" v="0"/>
+ <val o="20a116" v="0"/>
+ <val o="20af26" v="0"/>
+ <val o="20bd37" v="0"/>
+ <val o="20cb46" v="0"/>
+ <val o="20d957" v="0"/>
+ <val o="20e767" v="0"/>
+ <val o="20f581" v="0"/>
+ <val o="210386" v="0"/>
+ <val o="211194" v="0"/>
+ <val o="211fa5" v="0"/>
+ <val o="212db5" v="0"/>
+ <val o="213bc5" v="0"/>
+ <val o="2149d6" v="0"/>
+ <val o="2157e5" v="0"/>
+ <val o="2165f6" v="0"/>
+ <val o="217406" v="0"/>
+ <val o="218217" v="0"/>
+ <val o="219026" v="0"/>
+ <val o="219e39" v="0"/>
+ <val o="21ac46" v="0"/>
+ <val o="21ba57" v="0"/>
+ <val o="21c867" v="0"/>
+ <val o="21d677" v="0"/>
+ <val o="21e487" v="0"/>
+ <val o="21f296" v="0"/>
+ <val o="2200a6" v="0"/>
+ <val o="220eb7" v="0"/>
+ <val o="221cc6" v="0"/>
+ <val o="222ad7" v="0"/>
+ <val o="2238e7" v="0"/>
+ <val o="224701" v="0"/>
+ <val o="225505" v="0"/>
+ <val o="226315" v="0"/>
+ <val o="227125" v="0"/>
+ <val o="227f35" v="0"/>
+ <val o="228d45" v="0"/>
+ <val o="229b54" v="0"/>
+ <val o="22a965" v="0"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="0"/>
+ <val o="22d397" v="0"/>
+ <val o="22e1a6" v="0"/>
+ <val o="22efb6" v="0"/>
+ <val o="22fdc7" v="0"/>
+ <val o="230bd7" v="0"/>
+ <val o="2319e6" v="0"/>
+ <val o="2327f6" v="0"/>
+ <val o="23361b" v="0"/>
+ <val o="234416" v="0"/>
+ <val o="235226" v="0"/>
+ <val o="236037" v="0"/>
+ <val o="236e46" v="0"/>
+ <val o="237c57" v="0"/>
+ <val o="238a66" v="0"/>
+ <val o="239881" v="0"/>
+ <val o="23a685" v="0"/>
+ <val o="23b495" v="0"/>
+ <val o="23c2a4" v="0"/>
+ <val o="23d0b5" v="0"/>
+ <val o="23dec4" v="0"/>
+ <val o="23ecd5" v="0"/>
+ <val o="23fae4" v="0"/>
+ <val o="2408f6" v="0"/>
+ <val o="241706" v="0"/>
+ <val o="242518" v="0"/>
+ <val o="243325" v="0"/>
+ <val o="244137" v="0"/>
+ <val o="244f46" v="0"/>
+ <val o="246b66" v="0"/>
+ <val o="247976" v="0"/>
+ <val o="248786" v="0"/>
+ <val o="24957e" v="0"/>
+ <val o="24a38f" v="0"/>
+ <val o="24b19c" v="0"/>
+ <val o="24bfac" v="0"/>
+ <val o="24cdbc" v="0"/>
+ <val o="24dbcd" v="0"/>
+ <val o="24e9e5" v="0"/>
+ <val o="24f808" v="0"/>
+ <val o="250616" v="0"/>
+ <val o="251426" v="0"/>
+ <val o="252236" v="0"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="0"/>
+ <val o="254c67" v="0"/>
+ <val o="255a76" v="0"/>
+ <val o="256887" v="0"/>
+ <val o="257697" v="0"/>
+ <val o="2584a8" v="0"/>
+ <val o="2592b6" v="0"/>
+ <val o="25a0c7" v="0"/>
+ <val o="25aed7" v="0"/>
+ <val o="25bce7" v="0"/>
+ <val o="25caf8" v="0"/>
+ <val o="25d907" v="0"/>
+ <val o="25e718" v="0"/>
+ <val o="25f527" v="0"/>
+ <val o="260338" v="0"/>
+ <val o="261149" v="0"/>
+ <val o="261f59" v="0"/>
+ <val o="262d68" v="0"/>
+ <val o="263b83" v="0"/>
+ <val o="264986" v="0"/>
+ <val o="265795" v="0"/>
+ <val o="2665a6" v="0"/>
+ <val o="2673b5" v="0"/>
+ <val o="2681c6" v="0"/>
+ <val o="268fd5" v="0"/>
+ <val o="269de6" v="0"/>
+ <val o="26abf6" v="0"/>
+ <val o="26ba06" v="0"/>
+ <val o="26c817" v="0"/>
+ <val o="26d62b" v="0"/>
+ <val o="26e436" v="0"/>
+ <val o="26f247" v="0"/>
+ <val o="270057" v="0"/>
+ <val o="270e67" v="0"/>
+ <val o="271c77" v="0"/>
+ <val o="272a87" v="0"/>
+ <val o="273897" v="0"/>
+ <val o="2746a8" v="0"/>
+ <val o="2754b9" v="0"/>
+ <val o="2762c7" v="0"/>
+ <val o="2770d8" v="0"/>
+ <val o="277ee7" v="0"/>
+ </par>
+ <par memind="8604" h="3dc1a8de">
+ <val o="0" v="21.043"/>
+ <val o="e08" v="20.051"/>
+ <val o="1c32" v="19.818"/>
+ <val o="2a3c" v="19.554"/>
+ <val o="3835" v="18.951"/>
+ <val o="4645" v="18.853"/>
+ <val o="5455" v="22.398"/>
+ <val o="6265" v="24.492"/>
+ <val o="7075" v="29.206"/>
+ <val o="7e85" v="35.063"/>
+ <val o="8c96" v="35.07"/>
+ <val o="9aa5" v="33.585"/>
+ <val o="a8b6" v="30.77"/>
+ <val o="b6c5" v="29.141"/>
+ <val o="c4d7" v="0.061"/>
+ <val o="d30b" v="0.061"/>
+ <val o="e0f6" v="0.06"/>
+ <val o="ef06" v="0.059"/>
+ <val o="fd17" v="0.06"/>
+ <val o="10b27" v="0.062"/>
+ <val o="11937" v="0.063"/>
+ <val o="12746" v="0.061"/>
+ <val o="13556" v="0.062"/>
+ <val o="14366" v="0.066"/>
+ <val o="15181" v="0.07"/>
+ <val o="15f85" v="0.064"/>
+ <val o="16d95" v="0.065"/>
+ <val o="17ba4" v="0.064"/>
+ <val o="189b5" v="0.063"/>
+ <val o="197c4" v="0.064"/>
+ <val o="1a5d5" v="0.066"/>
+ <val o="1b3e6" v="0.067"/>
+ <val o="1c1f6" v="0.066"/>
+ <val o="1d005" v="0.062"/>
+ <val o="1de15" v="0.062"/>
+ <val o="1ec25" v="0.063"/>
+ <val o="1fa36" v="0.066"/>
+ <val o="20845" v="0.066"/>
+ <val o="21656" v="0.066"/>
+ <val o="22465" v="0.064"/>
+ <val o="23276" v="0.063"/>
+ <val o="24086" v="0.061"/>
+ <val o="24e99" v="0.061"/>
+ <val o="25ca7" v="0.062"/>
+ <val o="26ab7" v="0.062"/>
+ <val o="278c6" v="0.061"/>
+ <val o="286d6" v="0.063"/>
+ <val o="294e6" v="0.066"/>
+ <val o="2a301" v="0.067"/>
+ <val o="2b105" v="0.06"/>
+ <val o="2bf15" v="0.061"/>
+ <val o="2cd25" v="0.063"/>
+ <val o="2db35" v="0.062"/>
+ <val o="2e946" v="0.061"/>
+ <val o="2f755" v="0.058"/>
+ <val o="30566" v="0.066"/>
+ <val o="31375" v="0.064"/>
+ <val o="3219e" v="0.066"/>
+ <val o="32f96" v="0.063"/>
+ <val o="33da6" v="0.062"/>
+ <val o="34bb6" v="0.063"/>
+ <val o="359de" v="0.064"/>
+ <val o="367d6" v="0.064"/>
+ <val o="375e6" v="0.062"/>
+ <val o="3840e" v="0.059"/>
+ <val o="3921e" v="0.06"/>
+ <val o="3a016" v="0.06"/>
+ <val o="3ae27" v="0.063"/>
+ <val o="3bc36" v="0.062"/>
+ <val o="3ca47" v="0.059"/>
+ <val o="3d856" v="0.062"/>
+ <val o="3e667" v="0.064"/>
+ <val o="3f481" v="0.068"/>
+ <val o="40285" v="0.065"/>
+ <val o="41095" v="0.066"/>
+ <val o="41ea5" v="0.065"/>
+ <val o="42cb5" v="0.066"/>
+ <val o="43ac5" v="0.064"/>
+ <val o="448d5" v="0.061"/>
+ <val o="456e6" v="0.062"/>
+ <val o="464f5" v="0.062"/>
+ <val o="480ff" v="0.058"/>
+ <val o="48f0e" v="0.056"/>
+ <val o="49d1d" v="0.057"/>
+ <val o="4ab46" v="0.056"/>
+ <val o="4b955" v="0.057"/>
+ <val o="4c769" v="0.055"/>
+ <val o="4d577" v="0.057"/>
+ <val o="4e387" v="0.057"/>
+ <val o="4f196" v="0.057"/>
+ <val o="4ffa6" v="0.058"/>
+ <val o="50dd0" v="0.06"/>
+ <val o="51bc6" v="0.062"/>
+ <val o="529d6" v="0.062"/>
+ <val o="537e7" v="0.065"/>
+ <val o="54600" v="0.067"/>
+ <val o="55406" v="0.065"/>
+ <val o="56215" v="0.065"/>
+ <val o="57026" v="0.065"/>
+ <val o="57e36" v="0.064"/>
+ <val o="58c46" v="0.063"/>
+ <val o="59a70" v="0.063"/>
+ <val o="5a867" v="0.06"/>
+ <val o="5b676" v="0.06"/>
+ <val o="5c487" v="0.056"/>
+ <val o="5d296" v="0.058"/>
+ <val o="5e0a9" v="0.06"/>
+ <val o="5eeb8" v="0.062"/>
+ <val o="5fcc6" v="0.061"/>
+ <val o="60ad7" v="0.057"/>
+ <val o="618e7" v="0.057"/>
+ <val o="626f7" v="0.059"/>
+ <val o="63507" v="0.059"/>
+ <val o="64317" v="0.061"/>
+ <val o="65127" v="0.062"/>
+ <val o="65f37" v="0.063"/>
+ <val o="66d46" v="0.062"/>
+ <val o="67b57" v="0.062"/>
+ <val o="68967" v="0.065"/>
+ <val o="69782" v="0.065"/>
+ <val o="6a586" v="0.064"/>
+ <val o="6b395" v="0.065"/>
+ <val o="6c1a6" v="0.066"/>
+ <val o="6cfb5" v="0.064"/>
+ <val o="6ddc6" v="0.063"/>
+ <val o="6ebd6" v="0.059"/>
+ <val o="6f9e6" v="0.061"/>
+ <val o="707f6" v="0.062"/>
+ <val o="71607" v="0.059"/>
+ <val o="72417" v="0.058"/>
+ <val o="73227" v="0.056"/>
+ <val o="74037" v="0.061"/>
+ <val o="74e47" v="0.061"/>
+ <val o="75c57" v="0.058"/>
+ <val o="76a63" v="0.058"/>
+ <val o="77873" v="0.058"/>
+ <val o="78680" v="0.058"/>
+ <val o="7948f" v="0.058"/>
+ <val o="7a29f" v="0.06"/>
+ <val o="7b0af" v="0.062"/>
+ <val o="7bebf" v="0.062"/>
+ <val o="7cccf" v="0.064"/>
+ <val o="7dadf" v="0.065"/>
+ <val o="7e8fa" v="0.065"/>
+ <val o="7f70a" v="0.067"/>
+ <val o="8051a" v="0.067"/>
+ <val o="8132a" v="0.066"/>
+ <val o="8213a" v="0.066"/>
+ <val o="82f4a" v="0.067"/>
+ <val o="83d5a" v="0.062"/>
+ <val o="84b6a" v="0.06"/>
+ <val o="8597a" v="0.059"/>
+ <val o="8678b" v="0.059"/>
+ <val o="8759b" v="0.057"/>
+ <val o="883ac" v="0.06"/>
+ <val o="891bb" v="0.061"/>
+ <val o="89fca" v="0.06"/>
+ <val o="8adda" v="0.059"/>
+ <val o="8bbeb" v="0.059"/>
+ <val o="8c9fc" v="0.058"/>
+ <val o="8d80b" v="0.058"/>
+ <val o="8e61a" v="0.059"/>
+ <val o="8f42a" v="0.06"/>
+ <val o="9023a" v="0.061"/>
+ <val o="9104a" v="0.062"/>
+ <val o="91e5a" v="0.06"/>
+ <val o="92c6a" v="0.063"/>
+ <val o="93a84" v="0.067"/>
+ <val o="94885" v="0.064"/>
+ <val o="95694" v="0.064"/>
+ <val o="964a5" v="0.065"/>
+ <val o="972b4" v="0.064"/>
+ <val o="980c5" v="0.062"/>
+ <val o="98ed4" v="0.065"/>
+ <val o="99ce5" v="0.064"/>
+ <val o="9aaf5" v="0.061"/>
+ <val o="9b906" v="0.061"/>
+ <val o="9c716" v="0.062"/>
+ <val o="9d526" v="0.062"/>
+ <val o="9e336" v="0.063"/>
+ <val o="9f145" v="0.063"/>
+ <val o="9ff56" v="0.061"/>
+ <val o="a0d65" v="0.061"/>
+ <val o="a1b77" v="30.22"/>
+ <val o="a2986" v="16.054"/>
+ <val o="a3795" v="10.22"/>
+ <val o="a45a7" v="3.839"/>
+ <val o="a53b6" v="3.301"/>
+ <val o="a61c7" v="4.19"/>
+ <val o="a6fd6" v="2.002"/>
+ <val o="a7e00" v="4.911"/>
+ <val o="a8c00" v="7.897"/>
+ <val o="a9a05" v="2.934"/>
+ <val o="aa815" v="1.487"/>
+ <val o="ab625" v="2.196"/>
+ <val o="ac435" v="1.679"/>
+ <val o="ad245" v="5.984"/>
+ <val o="ae055" v="10.661"/>
+ <val o="aee65" v="3.653"/>
+ <val o="afc75" v="7.252"/>
+ <val o="b0a85" v="19.708"/>
+ <val o="b26a6" v="21.128"/>
+ <val o="b34b6" v="18.358"/>
+ <val o="b42c6" v="3.456"/>
+ <val o="b50d6" v="4.916"/>
+ <val o="b5ee7" v="7.337"/>
+ <val o="b6cf6" v="7.205"/>
+ <val o="b7b07" v="9.191"/>
+ <val o="b8917" v="8.027"/>
+ <val o="b9728" v="7.688"/>
+ <val o="ba537" v="8.667"/>
+ <val o="bb347" v="7.734"/>
+ <val o="bc157" v="5.148"/>
+ <val o="bcf67" v="5.081"/>
+ <val o="bdd81" v="18.433"/>
+ <val o="beb86" v="4.676"/>
+ <val o="bf995" v="3.97"/>
+ <val o="c07a6" v="2.247"/>
+ <val o="c15b5" v="2.519"/>
+ <val o="c23c6" v="4.784"/>
+ <val o="c31d5" v="10.406"/>
+ <val o="c3fe6" v="5.863"/>
+ <val o="c4df5" v="9.668"/>
+ <val o="c5c06" v="5.194"/>
+ <val o="c6a16" v="5.35"/>
+ <val o="c7826" v="7.745"/>
+ <val o="c8636" v="3.651"/>
+ <val o="c9446" v="4.236"/>
+ <val o="ca256" v="3.281"/>
+ <val o="cb066" v="5.657"/>
+ <val o="cbe76" v="2.249"/>
+ <val o="ccc87" v="12.004"/>
+ <val o="cda96" v="15.833"/>
+ <val o="ce8a8" v="11.981"/>
+ <val o="cf6b7" v="15.145"/>
+ <val o="d04c8" v="12.386"/>
+ <val o="d12d7" v="8.53"/>
+ <val o="d20e7" v="1.474"/>
+ <val o="d2f02" v="7.441"/>
+ <val o="d3d05" v="4.262"/>
+ <val o="d4b15" v="3.805"/>
+ <val o="d5926" v="3.752"/>
+ <val o="d6735" v="5.538"/>
+ <val o="d7546" v="9.524"/>
+ <val o="d8355" v="1.988"/>
+ <val o="d9166" v="4.159"/>
+ <val o="d9f75" v="9.621"/>
+ <val o="dad87" v="17.704"/>
+ <val o="dbb97" v="19.171"/>
+ <val o="dc9a8" v="19.252"/>
+ <val o="dd7b7" v="14.961"/>
+ <val o="de5c6" v="12.816"/>
+ <val o="df3d7" v="13.113"/>
+ <val o="e01d7" v="13.435"/>
+ <val o="e0fe5" v="13.283"/>
+ <val o="e1df5" v="13.989"/>
+ <val o="e2c04" v="18.098"/>
+ <val o="e3a14" v="17.742"/>
+ <val o="e4824" v="15.229"/>
+ <val o="e5634" v="15.263"/>
+ <val o="e6444" v="11.968"/>
+ <val o="e7255" v="9.893"/>
+ <val o="e806f" v="7.997"/>
+ <val o="e8e7f" v="13.888"/>
+ <val o="e9c8e" v="6.336"/>
+ <val o="eaa9f" v="5.634"/>
+ <val o="eb8ae" v="7.369"/>
+ <val o="ec6bf" v="14.276"/>
+ <val o="ed4ce" v="9.674"/>
+ <val o="ee2df" v="12.81"/>
+ <val o="ef0ef" v="14.985"/>
+ <val o="eff01" v="21.531"/>
+ <val o="f0d10" v="21.038"/>
+ <val o="f1b20" v="22.908"/>
+ <val o="f2930" v="20.891"/>
+ <val o="f3740" v="22.234"/>
+ <val o="f4551" v="22.517"/>
+ <val o="f5361" v="24.172"/>
+ <val o="f6172" v="23.008"/>
+ <val o="f6f80" v="23.475"/>
+ <val o="f7d91" v="22.059"/>
+ <val o="f8ba1" v="18.671"/>
+ <val o="f99b1" v="18.447"/>
+ <val o="fa7c0" v="15.862"/>
+ <val o="fb5d1" v="16.38"/>
+ <val o="fc3e0" v="15.165"/>
+ <val o="fd1fb" v="12.335"/>
+ <val o="fe00b" v="12.283"/>
+ <val o="fee1c" v="8.941"/>
+ <val o="ffc2c" v="8.837"/>
+ <val o="100a3b" v="8.793"/>
+ <val o="10184c" v="10.043"/>
+ <val o="10265b" v="13.932"/>
+ <val o="10346c" v="15.974"/>
+ <val o="10427b" v="19.167"/>
+ <val o="10508d" v="22.237"/>
+ <val o="105e9d" v="21.533"/>
+ <val o="106cad" v="23.309"/>
+ <val o="107abd" v="20.333"/>
+ <val o="1088cd" v="18.556"/>
+ <val o="1096de" v="20.163"/>
+ <val o="10a4ed" v="19.978"/>
+ <val o="10b2fe" v="21.155"/>
+ <val o="10c10d" v="23.964"/>
+ <val o="10cf1e" v="21.874"/>
+ <val o="10dd2e" v="19.591"/>
+ <val o="10eb66" v="20.234"/>
+ <val o="10f94e" v="17.32"/>
+ <val o="11075e" v="16.556"/>
+ <val o="11156d" v="13.217"/>
+ <val o="112388" v="12.271"/>
+ <val o="113187" v="8.967"/>
+ <val o="113fb0" v="8.319"/>
+ <val o="114da6" v="8.357"/>
+ <val o="115bb6" v="8.49"/>
+ <val o="1169c6" v="10.458"/>
+ <val o="1177d6" v="13.998"/>
+ <val o="1185e8" v="15.461"/>
+ <val o="1193f7" v="18.331"/>
+ <val o="11a208" v="22.284"/>
+ <val o="11b017" v="19.151"/>
+ <val o="11be2f" v="23.464"/>
+ <val o="11cc37" v="20.211"/>
+ <val o="11da47" v="19.83"/>
+ <val o="11e857" v="20.8"/>
+ <val o="11f667" v="18.042"/>
+ <val o="120578" v="0.018"/>
+ <val o="121386" v="0.02"/>
+ <val o="122196" v="0.02"/>
+ <val o="122fa6" v="0.017"/>
+ <val o="123db5" v="0.015"/>
+ <val o="124bc5" v="0.014"/>
+ <val o="1259d5" v="0.011"/>
+ <val o="1267e4" v="0.01"/>
+ <val o="127600" v="0.009"/>
+ <val o="128305" v="0.008"/>
+ <val o="129115" v="0.008"/>
+ <val o="129f25" v="0.008"/>
+ <val o="12ad35" v="0.007"/>
+ <val o="12bb45" v="0.007"/>
+ <val o="12c954" v="0.01"/>
+ <val o="12d766" v="0.011"/>
+ <val o="12e575" v="0.016"/>
+ <val o="12f386" v="0.013"/>
+ <val o="130196" v="0.019"/>
+ <val o="130fa6" v="0.014"/>
+ <val o="131db7" v="0.015"/>
+ <val o="132bc5" v="0.015"/>
+ <val o="1339d4" v="0.269"/>
+ <val o="1347e5" v="0.124"/>
+ <val o="1355f4" v="0.16"/>
+ <val o="136404" v="0.227"/>
+ <val o="137214" v="0.243"/>
+ <val o="138024" v="0.236"/>
+ <val o="138e33" v="0.239"/>
+ <val o="139c44" v="0.074"/>
+ <val o="13aa54" v="0.086"/>
+ <val o="13b865" v="0.031"/>
+ <val o="13c67e" v="0.412"/>
+ <val o="13d48e" v="0.199"/>
+ <val o="13e29e" v="0.15"/>
+ <val o="13f0ae" v="0.14"/>
+ <val o="13febf" v="0.218"/>
+ <val o="140ccf" v="0.309"/>
+ <val o="141adf" v="0.206"/>
+ <val o="1428ef" v="0.032"/>
+ <val o="1436ff" v="0.065"/>
+ <val o="14450f" v="0.054"/>
+ <val o="14531f" v="0.037"/>
+ <val o="146130" v="0.025"/>
+ <val o="146f40" v="0.09"/>
+ <val o="147d44" v="0.03"/>
+ <val o="148b57" v="0.038"/>
+ <val o="149965" v="0.026"/>
+ <val o="14a775" v="0.109"/>
+ <val o="14b584" v="0.086"/>
+ <val o="14c397" v="0.251"/>
+ <val o="14d1a4" v="0.225"/>
+ <val o="14dfb6" v="0.193"/>
+ <val o="14edc5" v="0.103"/>
+ <val o="14fbd5" v="0.044"/>
+ <val o="1509e5" v="0.023"/>
+ <val o="1517ff" v="0.068"/>
+ <val o="152605" v="0.157"/>
+ <val o="153415" v="0.105"/>
+ <val o="154225" v="0.097"/>
+ <val o="155035" v="0.127"/>
+ <val o="155e45" v="0.189"/>
+ <val o="156c55" v="0.281"/>
+ <val o="157a65" v="0.162"/>
+ <val o="158875" v="0.15"/>
+ <val o="159686" v="0.246"/>
+ <val o="15a495" v="0.211"/>
+ <val o="15b2a6" v="0.188"/>
+ <val o="15c0b6" v="0.105"/>
+ <val o="15cec6" v="0.092"/>
+ <val o="15dcd5" v="0.099"/>
+ <val o="15eae6" v="0.112"/>
+ <val o="15f8f5" v="0.29"/>
+ <val o="160706" v="0.06"/>
+ <val o="161517" v="0.107"/>
+ <val o="162326" v="0.072"/>
+ <val o="163137" v="0.064"/>
+ <val o="163f46" v="0.101"/>
+ <val o="164d57" v="0.045"/>
+ <val o="165b67" v="0.035"/>
+ <val o="166982" v="0.057"/>
+ <val o="167786" v="0.07"/>
+ <val o="168596" v="0.035"/>
+ <val o="1693a6" v="0.029"/>
+ <val o="16a1b5" v="0.026"/>
+ <val o="16afc6" v="0.075"/>
+ <val o="16bdd5" v="0.178"/>
+ <val o="16cbe6" v="0.221"/>
+ <val o="16d9f6" v="0.109"/>
+ <val o="16e807" v="0.578"/>
+ <val o="16f616" v="0.633"/>
+ <val o="170429" v="0.678"/>
+ <val o="171236" v="0.456"/>
+ <val o="172047" v="0.461"/>
+ <val o="172e57" v="0.475"/>
+ <val o="173c67" v="0.487"/>
+ <val o="174a77" v="0.565"/>
+ <val o="175887" v="0.597"/>
+ <val o="176694" v="34.372"/>
+ <val o="1774a3" v="33.056"/>
+ <val o="1782b3" v="34.198"/>
+ <val o="1790c5" v="31.148"/>
+ <val o="179ed4" v="26.734"/>
+ <val o="17ace4" v="26.883"/>
+ <val o="17bafd" v="28.046"/>
+ <val o="17c90f" v="25.107"/>
+ <val o="17d71e" v="24.826"/>
+ <val o="17e52f" v="25.129"/>
+ <val o="17f33f" v="22.979"/>
+ <val o="18014f" v="22.968"/>
+ <val o="180f5f" v="28.04"/>
+ <val o="181d6e" v="30.608"/>
+ <val o="182b7f" v="35.156"/>
+ <val o="18398f" v="61.079"/>
+ <val o="1847a1" v="61.118"/>
+ <val o="1855af" v="58.214"/>
+ <val o="1863c0" v="54.149"/>
+ <val o="1871cf" v="56.141"/>
+ <val o="187fe0" v="53.757"/>
+ <val o="188def" v="57.188"/>
+ <val o="189c00" v="53.596"/>
+ <val o="18b80d" v="36.269"/>
+ <val o="18c61c" v="36.626"/>
+ <val o="18d42c" v="35.102"/>
+ <val o="18e23b" v="29.855"/>
+ <val o="18f04b" v="28.307"/>
+ <val o="18fe5e" v="25.364"/>
+ <val o="190c76" v="19.996"/>
+ <val o="191a86" v="19.748"/>
+ <val o="192896" v="19.345"/>
+ <val o="1936a6" v="18.873"/>
+ <val o="1944b7" v="18.11"/>
+ <val o="1952c6" v="20.032"/>
+ <val o="1960d7" v="25.137"/>
+ <val o="196ee6" v="27.508"/>
+ <val o="197cf8" v="29.449"/>
+ <val o="198b0f" v="27.372"/>
+ <val o="19991f" v="30.562"/>
+ <val o="19b541" v="29.963"/>
+ <val o="19c34d" v="28.336"/>
+ <val o="19d15e" v="28.102"/>
+ <val o="19df80" v="28.864"/>
+ <val o="19ed90" v="28.278"/>
+ <val o="19eebe" v="28.399"/>
+ <val o="19fb8e" v="11.016"/>
+ <val o="1a09a0" v="14.155"/>
+ <val o="1a17ae" v="19.132"/>
+ <val o="1a25be" v="20.28"/>
+ <val o="1a33cd" v="11.28"/>
+ <val o="1a41dd" v="12.25"/>
+ <val o="1a4fed" v="16.561"/>
+ <val o="1a5e08" v="15.15"/>
+ <val o="1a6c05" v="9.953"/>
+ <val o="1a7a15" v="12.732"/>
+ <val o="1a8826" v="12.958"/>
+ <val o="1a9637" v="9.685"/>
+ <val o="1aa445" v="6.805"/>
+ <val o="1ab255" v="4.559"/>
+ <val o="1ac065" v="10.632"/>
+ <val o="1ace75" v="14.64"/>
+ <val o="1adc87" v="14.182"/>
+ <val o="1aea96" v="13.717"/>
+ <val o="1af8a7" v="15.071"/>
+ <val o="1b06b7" v="13.236"/>
+ <val o="1b14c6" v="12.746"/>
+ <val o="1c7460" v="3.999"/>
+ <val o="1c8270" v="2.186"/>
+ <val o="1c907e" v="16.585"/>
+ <val o="1c9e8f" v="14.378"/>
+ <val o="1caca2" v="16.041"/>
+ <val o="1cbab1" v="15.799"/>
+ <val o="1cc8c1" v="29.25"/>
+ <val o="1cd6d0" v="27.621"/>
+ <val o="1ce4de" v="25.453"/>
+ <val o="1cf2f0" v="24.369"/>
+ <val o="1d0109" v="25.348"/>
+ <val o="1d0f06" v="28.687"/>
+ <val o="1d1d15" v="28.373"/>
+ <val o="1d2b25" v="28.801"/>
+ <val o="1d3935" v="30.045"/>
+ <val o="1d4745" v="30.644"/>
+ <val o="1d5555" v="30.354"/>
+ <val o="1d6366" v="24.933"/>
+ <val o="1d7175" v="23.813"/>
+ <val o="1d7f86" v="23.818"/>
+ <val o="1d8d95" v="15.153"/>
+ <val o="1d9ba6" v="16.69"/>
+ <val o="1da9b6" v="16.385"/>
+ <val o="1db7c7" v="15.643"/>
+ <val o="1dc5d5" v="16.269"/>
+ <val o="1dd3e6" v="16.689"/>
+ <val o="1de1f5" v="27.897"/>
+ <val o="1df006" v="31.449"/>
+ <val o="1dfe16" v="31.232"/>
+ <val o="1e0c26" v="32.001"/>
+ <val o="1e1a36" v="31.999"/>
+ <val o="1e2847" v="30.669"/>
+ <val o="1e3659" v="29.185"/>
+ <val o="1e4467" v="27.199"/>
+ <val o="1e5281" v="23.798"/>
+ <val o="1e6086" v="23.566"/>
+ <val o="1e6e96" v="23.035"/>
+ <val o="1e7ca6" v="8.573"/>
+ <val o="1e8ab5" v="7.913"/>
+ <val o="1e98c6" v="7.851"/>
+ <val o="1ea6d5" v="9.845"/>
+ <val o="1eb4e6" v="10.177"/>
+ <val o="1ec2f6" v="11.732"/>
+ <val o="1ed106" v="11.554"/>
+ <val o="1edf16" v="12.067"/>
+ <val o="1eed26" v="11.725"/>
+ <val o="1efb36" v="11.465"/>
+ <val o="1f0946" v="10.851"/>
+ <val o="1f1756" v="10.928"/>
+ <val o="1f2566" v="10.984"/>
+ <val o="1f3376" v="13.626"/>
+ <val o="1f4187" v="19.399"/>
+ <val o="1f4f96" v="16.326"/>
+ <val o="1f5da7" v="15.848"/>
+ <val o="1f6bb6" v="15.785"/>
+ <val o="1f79c7" v="14.319"/>
+ <val o="1f87d6" v="15.77"/>
+ <val o="1f95e7" v="16.295"/>
+ <val o="1fa401" v="13.382"/>
+ <val o="1fb204" v="11.752"/>
+ <val o="1fc016" v="11.694"/>
+ <val o="1fce25" v="9.24"/>
+ <val o="1fdc35" v="8.969"/>
+ <val o="1fea45" v="9.42"/>
+ <val o="1ff855" v="11.299"/>
+ <val o="200665" v="18.06"/>
+ <val o="201475" v="15.989"/>
+ <val o="202286" v="23.363"/>
+ <val o="203095" v="26.071"/>
+ <val o="203ea5" v="29.283"/>
+ <val o="204cb6" v="25.856"/>
+ <val o="205ac6" v="25.235"/>
+ <val o="2068d6" v="26.405"/>
+ <val o="2076e6" v="30.076"/>
+ <val o="2084f6" v="28.433"/>
+ <val o="209306" v="30.271"/>
+ <val o="20a116" v="28.557"/>
+ <val o="20af26" v="24.542"/>
+ <val o="20bd37" v="23.962"/>
+ <val o="20cb46" v="21.242"/>
+ <val o="20d957" v="19.633"/>
+ <val o="20e767" v="18.009"/>
+ <val o="20f581" v="17.798"/>
+ <val o="210386" v="15.304"/>
+ <val o="211194" v="13.453"/>
+ <val o="211fa5" v="13.055"/>
+ <val o="212db5" v="12.872"/>
+ <val o="213bc5" v="13.544"/>
+ <val o="2149d6" v="17.25"/>
+ <val o="2157e5" v="21.046"/>
+ <val o="2165f6" v="25.832"/>
+ <val o="217406" v="27.791"/>
+ <val o="218217" v="28.054"/>
+ <val o="219026" v="27.63"/>
+ <val o="219e39" v="28.457"/>
+ <val o="21ac46" v="27.725"/>
+ <val o="21ba57" v="27.922"/>
+ <val o="21c867" v="28.25"/>
+ <val o="21d677" v="27.539"/>
+ <val o="21e487" v="26.251"/>
+ <val o="21f296" v="25.947"/>
+ <val o="2200a6" v="24.671"/>
+ <val o="220eb7" v="24.383"/>
+ <val o="221cc6" v="22.742"/>
+ <val o="222ad7" v="17.742"/>
+ <val o="2238e7" v="16.117"/>
+ <val o="224701" v="14.548"/>
+ <val o="225505" v="18.418"/>
+ <val o="226315" v="10.147"/>
+ <val o="227125" v="10.648"/>
+ <val o="227f35" v="13.062"/>
+ <val o="228d45" v="17.082"/>
+ <val o="229b54" v="15.723"/>
+ <val o="22a965" v="17.627"/>
+ <val o="22b776" v="21.083"/>
+ <val o="22c586" v="24.293"/>
+ <val o="22d397" v="26.823"/>
+ <val o="22e1a6" v="27.04"/>
+ <val o="22efb6" v="22.091"/>
+ <val o="22fdc7" v="21.514"/>
+ <val o="230bd7" v="20.922"/>
+ <val o="2319e6" v="25.061"/>
+ <val o="2327f6" v="25.959"/>
+ <val o="23361b" v="27.644"/>
+ <val o="234416" v="25.578"/>
+ <val o="235226" v="24.199"/>
+ <val o="236037" v="23.83"/>
+ <val o="236e46" v="22.719"/>
+ <val o="237c57" v="20.952"/>
+ <val o="238a66" v="18.382"/>
+ <val o="239881" v="14.928"/>
+ <val o="23a685" v="14.859"/>
+ <val o="23b495" v="14.081"/>
+ <val o="23c2a4" v="13.309"/>
+ <val o="23d0b5" v="13.726"/>
+ <val o="23dec4" v="15.071"/>
+ <val o="23ecd5" v="17.064"/>
+ <val o="23fae4" v="20.612"/>
+ <val o="2408f6" v="24.891"/>
+ <val o="241706" v="32.942"/>
+ <val o="242518" v="34.247"/>
+ <val o="243325" v="34.787"/>
+ <val o="244137" v="31.176"/>
+ <val o="244f46" v="29.806"/>
+ <val o="246b66" v="30.569"/>
+ <val o="247976" v="29.175"/>
+ <val o="248786" v="34.921"/>
+ <val o="24957e" v="28.767"/>
+ <val o="24a38f" v="25.797"/>
+ <val o="24b19c" v="26.161"/>
+ <val o="24bfac" v="24.769"/>
+ <val o="24cdbc" v="24.053"/>
+ <val o="24dbcd" v="20.28"/>
+ <val o="24e9e5" v="18.22"/>
+ <val o="24f808" v="15.345"/>
+ <val o="250616" v="15.953"/>
+ <val o="251426" v="15.884"/>
+ <val o="252236" v="15.054"/>
+ <val o="253047" v="16.014"/>
+ <val o="253e56" v="19.574"/>
+ <val o="254c67" v="20.065"/>
+ <val o="255a76" v="23.936"/>
+ <val o="256887" v="29.274"/>
+ <val o="257697" v="31.691"/>
+ <val o="2584a8" v="75.154"/>
+ <val o="2592b6" v="41.458"/>
+ <val o="25a0c7" v="21.221"/>
+ <val o="25aed7" v="29.417"/>
+ <val o="25bce7" v="28.597"/>
+ <val o="25caf8" v="27.256"/>
+ <val o="25d907" v="28.925"/>
+ <val o="25e718" v="29.38"/>
+ <val o="25f527" v="26.559"/>
+ <val o="260338" v="25.234"/>
+ <val o="261149" v="23.312"/>
+ <val o="261f59" v="21.317"/>
+ <val o="262d68" v="20.761"/>
+ <val o="263b83" v="16.36"/>
+ <val o="264986" v="15.657"/>
+ <val o="265795" v="16.618"/>
+ <val o="2665a6" v="17.888"/>
+ <val o="2673b5" v="16.861"/>
+ <val o="2681c6" v="16.617"/>
+ <val o="268fd5" v="17.428"/>
+ <val o="269de6" v="18.225"/>
+ <val o="26abf6" v="18.415"/>
+ <val o="26ba06" v="22.126"/>
+ <val o="26c817" v="22.126"/>
+ <val o="26d62b" v="25.782"/>
+ <val o="26e436" v="22.774"/>
+ <val o="26f247" v="22.774"/>
+ <val o="270057" v="22.909"/>
+ <val o="270e67" v="23.139"/>
+ <val o="271c77" v="21.553"/>
+ <val o="272a87" v="23.539"/>
+ <val o="273897" v="23.139"/>
+ <val o="2746a8" v="22.735"/>
+ <val o="2754b9" v="22.335"/>
+ <val o="2762c7" v="23.205"/>
+ <val o="2770d8" v="18.238"/>
+ <val o="277ee7" v="14.136"/>
+ </par>
+ <par memind="9812" h="3dc1a8de">
+ <val o="0" v="114.081"/>
+ <val o="e08" v="117.19"/>
+ <val o="1c32" v="118.964"/>
+ <val o="2a3c" v="120.564"/>
+ <val o="3835" v="118.747"/>
+ <val o="4645" v="116.529"/>
+ <val o="5455" v="109.384"/>
+ <val o="6265" v="121.356"/>
+ <val o="7075" v="119.014"/>
+ <val o="7e85" v="116.226"/>
+ <val o="8c96" v="120.175"/>
+ <val o="9aa5" v="120.949"/>
+ <val o="a8b6" v="124.2"/>
+ <val o="b6c5" v="124.043"/>
+ <val o="c4d7" v="117.761"/>
+ <val o="d30b" v="118.092"/>
+ <val o="e0f6" v="118.354"/>
+ <val o="ef06" v="118.633"/>
+ <val o="fd17" v="118.494"/>
+ <val o="10b27" v="121.243"/>
+ <val o="11937" v="122.278"/>
+ <val o="12746" v="119.689"/>
+ <val o="13556" v="121.165"/>
+ <val o="14366" v="125.688"/>
+ <val o="15181" v="127.517"/>
+ <val o="15f85" v="119.508"/>
+ <val o="16d95" v="121.27"/>
+ <val o="17ba4" v="121.262"/>
+ <val o="189b5" v="120.595"/>
+ <val o="197c4" v="118.725"/>
+ <val o="1a5d5" v="126.913"/>
+ <val o="1b3e6" v="125.984"/>
+ <val o="1c1f6" v="124.971"/>
+ <val o="1d005" v="121.722"/>
+ <val o="1de15" v="122.233"/>
+ <val o="1ec25" v="122.836"/>
+ <val o="1fa36" v="124.125"/>
+ <val o="20845" v="125.105"/>
+ <val o="21656" v="125.266"/>
+ <val o="22465" v="125.381"/>
+ <val o="23276" v="123.688"/>
+ <val o="24086" v="119.437"/>
+ <val o="24e99" v="119.167"/>
+ <val o="25ca7" v="120.334"/>
+ <val o="26ab7" v="119.837"/>
+ <val o="278c6" v="120.109"/>
+ <val o="286d6" v="122.074"/>
+ <val o="294e6" v="125.542"/>
+ <val o="2a301" v="125.638"/>
+ <val o="2b105" v="117.398"/>
+ <val o="2bf15" v="118.807"/>
+ <val o="2cd25" v="119.644"/>
+ <val o="2db35" v="119.674"/>
+ <val o="2e946" v="117.549"/>
+ <val o="2f755" v="113.229"/>
+ <val o="30566" v="125.153"/>
+ <val o="31375" v="124.691"/>
+ <val o="3219e" v="123.556"/>
+ <val o="32f96" v="123.231"/>
+ <val o="33da6" v="123.404"/>
+ <val o="34bb6" v="123.932"/>
+ <val o="359de" v="123.328"/>
+ <val o="367d6" v="122.641"/>
+ <val o="375e6" v="121.544"/>
+ <val o="3840e" v="118.209"/>
+ <val o="3921e" v="118.675"/>
+ <val o="3a016" v="118.325"/>
+ <val o="3ae27" v="121.893"/>
+ <val o="3bc36" v="120.711"/>
+ <val o="3ca47" v="119.854"/>
+ <val o="3d856" v="120.165"/>
+ <val o="3e667" v="122.996"/>
+ <val o="3f481" v="126.557"/>
+ <val o="40285" v="124.061"/>
+ <val o="41095" v="124.874"/>
+ <val o="41ea5" v="125.244"/>
+ <val o="42cb5" v="125.083"/>
+ <val o="43ac5" v="123.182"/>
+ <val o="448d5" v="119.311"/>
+ <val o="456e6" v="122.524"/>
+ <val o="464f5" v="121.173"/>
+ <val o="480ff" v="118.696"/>
+ <val o="48f0e" v="117.559"/>
+ <val o="49d1d" v="118.947"/>
+ <val o="4ab46" v="118.797"/>
+ <val o="4b955" v="117.048"/>
+ <val o="4c769" v="116.182"/>
+ <val o="4d577" v="119.101"/>
+ <val o="4e387" v="119.152"/>
+ <val o="4f196" v="116.814"/>
+ <val o="4ffa6" v="118.943"/>
+ <val o="50dd0" v="120.844"/>
+ <val o="51bc6" v="119.109"/>
+ <val o="529d6" v="120.802"/>
+ <val o="537e7" v="123.095"/>
+ <val o="54600" v="125.922"/>
+ <val o="55406" v="122.082"/>
+ <val o="56215" v="123.001"/>
+ <val o="57026" v="123.033"/>
+ <val o="57e36" v="122.972"/>
+ <val o="58c46" v="120.717"/>
+ <val o="59a70" v="121.599"/>
+ <val o="5a867" v="120.977"/>
+ <val o="5b676" v="119.038"/>
+ <val o="5c487" v="115.798"/>
+ <val o="5d296" v="119.913"/>
+ <val o="5e0a9" v="120.284"/>
+ <val o="5eeb8" v="119.451"/>
+ <val o="5fcc6" v="118.325"/>
+ <val o="60ad7" v="117.111"/>
+ <val o="618e7" v="117.263"/>
+ <val o="626f7" v="120.147"/>
+ <val o="63507" v="117.534"/>
+ <val o="64317" v="118.902"/>
+ <val o="65127" v="120.099"/>
+ <val o="65f37" v="121.434"/>
+ <val o="66d46" v="121.986"/>
+ <val o="67b57" v="120.683"/>
+ <val o="68967" v="122.861"/>
+ <val o="69782" v="119.35"/>
+ <val o="6a586" v="120.845"/>
+ <val o="6b395" v="122.119"/>
+ <val o="6c1a6" v="122.506"/>
+ <val o="6cfb5" v="121.462"/>
+ <val o="6ddc6" v="118.909"/>
+ <val o="6ebd6" v="116.372"/>
+ <val o="6f9e6" v="121.311"/>
+ <val o="707f6" v="119.412"/>
+ <val o="71607" v="118.281"/>
+ <val o="72417" v="118.148"/>
+ <val o="73227" v="117.811"/>
+ <val o="74037" v="121.694"/>
+ <val o="74e47" v="120.755"/>
+ <val o="75c57" v="118.651"/>
+ <val o="76a63" v="118.08"/>
+ <val o="77873" v="118.282"/>
+ <val o="78680" v="113.911"/>
+ <val o="7948f" v="116.941"/>
+ <val o="7a29f" v="119.508"/>
+ <val o="7b0af" v="119.071"/>
+ <val o="7bebf" v="121.146"/>
+ <val o="7cccf" v="121.336"/>
+ <val o="7dadf" v="122.095"/>
+ <val o="7e8fa" v="121.785"/>
+ <val o="7f70a" v="124.065"/>
+ <val o="8051a" v="125.455"/>
+ <val o="8132a" v="126.011"/>
+ <val o="8213a" v="125.018"/>
+ <val o="82f4a" v="122.741"/>
+ <val o="83d5a" v="120.26"/>
+ <val o="84b6a" v="118.856"/>
+ <val o="8597a" v="118.817"/>
+ <val o="8678b" v="117.807"/>
+ <val o="8759b" v="117.444"/>
+ <val o="883ac" v="119.967"/>
+ <val o="891bb" v="121.141"/>
+ <val o="89fca" v="120.259"/>
+ <val o="8adda" v="118.558"/>
+ <val o="8bbeb" v="118.812"/>
+ <val o="8c9fc" v="118.633"/>
+ <val o="8d80b" v="118.948"/>
+ <val o="8e61a" v="117.315"/>
+ <val o="8f42a" v="118.146"/>
+ <val o="9023a" v="120.121"/>
+ <val o="9104a" v="120.561"/>
+ <val o="91e5a" v="118.638"/>
+ <val o="92c6a" v="122.844"/>
+ <val o="93a84" v="125.153"/>
+ <val o="94885" v="123.463"/>
+ <val o="95694" v="122.793"/>
+ <val o="964a5" v="123.093"/>
+ <val o="972b4" v="122.535"/>
+ <val o="980c5" v="120.189"/>
+ <val o="98ed4" v="123.097"/>
+ <val o="99ce5" v="119.336"/>
+ <val o="9aaf5" v="118.5"/>
+ <val o="9b906" v="115.743"/>
+ <val o="9c716" v="119.722"/>
+ <val o="9d526" v="120.222"/>
+ <val o="9e336" v="118.918"/>
+ <val o="9f145" v="117.551"/>
+ <val o="9ff56" v="116.649"/>
+ <val o="a0d65" v="116.52"/>
+ <val o="a1b77" v="116.703"/>
+ <val o="a2986" v="118.806"/>
+ <val o="a3795" v="118.461"/>
+ <val o="a45a7" v="119.593"/>
+ <val o="a53b6" v="119.78"/>
+ <val o="a61c7" v="119.973"/>
+ <val o="a6fd6" v="120.761"/>
+ <val o="a7e00" v="122.782"/>
+ <val o="a8c00" v="125.444"/>
+ <val o="a9a05" v="118.255"/>
+ <val o="aa815" v="119.302"/>
+ <val o="ab625" v="120.149"/>
+ <val o="ac435" v="119.678"/>
+ <val o="ad245" v="117.138"/>
+ <val o="ae055" v="114.681"/>
+ <val o="aee65" v="120.851"/>
+ <val o="afc75" v="119.099"/>
+ <val o="b0a85" v="116.609"/>
+ <val o="b26a6" v="116.729"/>
+ <val o="b34b6" v="118.045"/>
+ <val o="b42c6" v="115.477"/>
+ <val o="b50d6" v="115.891"/>
+ <val o="b5ee7" v="114.24"/>
+ <val o="b6cf6" v="122.794"/>
+ <val o="b7b07" v="119.002"/>
+ <val o="b8917" v="118.701"/>
+ <val o="b9728" v="119.602"/>
+ <val o="ba537" v="120.963"/>
+ <val o="bb347" v="119.924"/>
+ <val o="bc157" v="120.628"/>
+ <val o="bcf67" v="123.122"/>
+ <val o="bdd81" v="118.683"/>
+ <val o="beb86" v="118.301"/>
+ <val o="bf995" v="118.882"/>
+ <val o="c07a6" v="120.187"/>
+ <val o="c15b5" v="119.576"/>
+ <val o="c23c6" v="118.243"/>
+ <val o="c31d5" v="115.692"/>
+ <val o="c3fe6" v="117.56"/>
+ <val o="c4df5" v="116.057"/>
+ <val o="c5c06" v="117.411"/>
+ <val o="c6a16" v="117.486"/>
+ <val o="c7826" v="116.745"/>
+ <val o="c8636" v="118.265"/>
+ <val o="c9446" v="118.202"/>
+ <val o="ca256" v="118.004"/>
+ <val o="cb066" v="117.255"/>
+ <val o="cbe76" v="122.71"/>
+ <val o="ccc87" v="118.736"/>
+ <val o="cda96" v="116.734"/>
+ <val o="ce8a8" v="118.339"/>
+ <val o="cf6b7" v="118.66"/>
+ <val o="d04c8" v="119.703"/>
+ <val o="d12d7" v="121.536"/>
+ <val o="d20e7" v="123.419"/>
+ <val o="d2f02" v="126.186"/>
+ <val o="d3d05" v="119.31"/>
+ <val o="d4b15" v="120.58"/>
+ <val o="d5926" v="120.857"/>
+ <val o="d6735" v="119.582"/>
+ <val o="d7546" v="117.426"/>
+ <val o="d8355" v="124.349"/>
+ <val o="d9166" v="122.435"/>
+ <val o="d9f75" v="120.692"/>
+ <val o="dad87" v="117.233"/>
+ <val o="dbb97" v="116.862"/>
+ <val o="dc9a8" v="116.728"/>
+ <val o="dd7b7" v="118.212"/>
+ <val o="de5c6" v="117.857"/>
+ <val o="df3d7" v="117.176"/>
+ <val o="e01d7" v="117.271"/>
+ <val o="e0fe5" v="116.796"/>
+ <val o="e1df5" v="117.361"/>
+ <val o="e2c04" v="119.769"/>
+ <val o="e3a14" v="121.05"/>
+ <val o="e4824" v="120.921"/>
+ <val o="e5634" v="122.497"/>
+ <val o="e6444" v="120.677"/>
+ <val o="e7255" v="122.67"/>
+ <val o="e806f" v="123.778"/>
+ <val o="e8e7f" v="116.655"/>
+ <val o="e9c8e" v="118.109"/>
+ <val o="eaa9f" v="118.372"/>
+ <val o="eb8ae" v="117.527"/>
+ <val o="ec6bf" v="113.518"/>
+ <val o="ed4ce" v="123.496"/>
+ <val o="ee2df" v="120.611"/>
+ <val o="ef0ef" v="118.704"/>
+ <val o="eff01" v="115.651"/>
+ <val o="f0d10" v="117.487"/>
+ <val o="f1b20" v="117.186"/>
+ <val o="f2930" v="121.114"/>
+ <val o="f3740" v="117.611"/>
+ <val o="f4551" v="117.892"/>
+ <val o="f5361" v="117.718"/>
+ <val o="f6172" v="117.584"/>
+ <val o="f6f80" v="117.38"/>
+ <val o="f7d91" v="119.222"/>
+ <val o="f8ba1" v="121.037"/>
+ <val o="f99b1" v="120.221"/>
+ <val o="fa7c0" v="118.379"/>
+ <val o="fb5d1" v="118.238"/>
+ <val o="fc3e0" v="123.037"/>
+ <val o="fd1fb" v="123.007"/>
+ <val o="fe00b" v="126.294"/>
+ <val o="fee1c" v="123.682"/>
+ <val o="ffc2c" v="123.591"/>
+ <val o="100a3b" v="122.918"/>
+ <val o="10184c" v="121.387"/>
+ <val o="10265b" v="117.586"/>
+ <val o="10346c" v="117.716"/>
+ <val o="10427b" v="119.191"/>
+ <val o="10508d" v="117.355"/>
+ <val o="105e9d" v="117.862"/>
+ <val o="106cad" v="117.531"/>
+ <val o="107abd" v="119.886"/>
+ <val o="1088cd" v="119.426"/>
+ <val o="1096de" v="118.72"/>
+ <val o="10a4ed" v="119.004"/>
+ <val o="10b2fe" v="118.725"/>
+ <val o="10c10d" v="116.196"/>
+ <val o="10cf1e" v="118.111"/>
+ <val o="10dd2e" v="119.001"/>
+ <val o="10eb66" v="120.963"/>
+ <val o="10f94e" v="121.34"/>
+ <val o="11075e" v="119.151"/>
+ <val o="11156d" v="120.797"/>
+ <val o="112388" v="123.519"/>
+ <val o="113187" v="122.366"/>
+ <val o="113fb0" v="123.381"/>
+ <val o="114da6" v="123.296"/>
+ <val o="115bb6" v="123.047"/>
+ <val o="1169c6" v="120.874"/>
+ <val o="1177d6" v="118.017"/>
+ <val o="1185e8" v="118.388"/>
+ <val o="1193f7" v="117.753"/>
+ <val o="11a208" v="119.761"/>
+ <val o="11b017" v="121.547"/>
+ <val o="11be2f" v="122.028"/>
+ <val o="11cc37" v="122.195"/>
+ <val o="11da47" v="121.783"/>
+ <val o="11e857" v="120.581"/>
+ <val o="11f667" v="121.685"/>
+ <val o="120578" v="120.972"/>
+ <val o="121386" v="116.836"/>
+ <val o="122196" v="117.633"/>
+ <val o="122fa6" v="118.83"/>
+ <val o="123db5" v="120.746"/>
+ <val o="124bc5" v="122.541"/>
+ <val o="1259d5" v="120.249"/>
+ <val o="1267e4" v="122.708"/>
+ <val o="127600" v="124.538"/>
+ <val o="128305" v="125.289"/>
+ <val o="129115" v="125.325"/>
+ <val o="129f25" v="125.49"/>
+ <val o="12ad35" v="124.672"/>
+ <val o="12bb45" v="122.813"/>
+ <val o="12c954" v="121.573"/>
+ <val o="12d766" v="120.719"/>
+ <val o="12e575" v="119.706"/>
+ <val o="12f386" v="116.935"/>
+ <val o="130196" v="117.255"/>
+ <val o="130fa6" v="118.365"/>
+ <val o="131db7" v="119.829"/>
+ <val o="132bc5" v="119.607"/>
+ <val o="1339d4" v="0.109"/>
+ <val o="1347e5" v="0.109"/>
+ <val o="1355f4" v="0.108"/>
+ <val o="136404" v="0.106"/>
+ <val o="137214" v="0.106"/>
+ <val o="138024" v="0.107"/>
+ <val o="138e33" v="0.108"/>
+ <val o="139c44" v="0.109"/>
+ <val o="13aa54" v="0.108"/>
+ <val o="13b865" v="0.109"/>
+ <val o="13c67e" v="0.101"/>
+ <val o="13d48e" v="0.104"/>
+ <val o="13e29e" v="0.106"/>
+ <val o="13f0ae" v="0.106"/>
+ <val o="13febf" v="0.104"/>
+ <val o="140ccf" v="0.102"/>
+ <val o="141adf" v="0.104"/>
+ <val o="1428ef" v="0.108"/>
+ <val o="1436ff" v="0.107"/>
+ <val o="14450f" v="0.107"/>
+ <val o="14531f" v="0.107"/>
+ <val o="146130" v="0.108"/>
+ <val o="146f40" v="0.11"/>
+ <val o="147d44" v="0.108"/>
+ <val o="148b57" v="0.108"/>
+ <val o="149965" v="0.108"/>
+ <val o="14a775" v="0.106"/>
+ <val o="14b584" v="0.11"/>
+ <val o="14c397" v="0.107"/>
+ <val o="14d1a4" v="0.107"/>
+ <val o="14dfb6" v="0.108"/>
+ <val o="14edc5" v="0.11"/>
+ <val o="14fbd5" v="0.112"/>
+ <val o="1509e5" v="0.112"/>
+ <val o="1517ff" v="0.115"/>
+ <val o="152605" v="0.108"/>
+ <val o="153415" v="0.109"/>
+ <val o="154225" v="0.11"/>
+ <val o="155035" v="0.109"/>
+ <val o="155e45" v="0.107"/>
+ <val o="156c55" v="0.104"/>
+ <val o="157a65" v="0.107"/>
+ <val o="158875" v="0.107"/>
+ <val o="159686" v="0.106"/>
+ <val o="15a495" v="0.107"/>
+ <val o="15b2a6" v="0.108"/>
+ <val o="15c0b6" v="0.109"/>
+ <val o="15cec6" v="0.109"/>
+ <val o="15dcd5" v="0.108"/>
+ <val o="15eae6" v="0.108"/>
+ <val o="15f8f5" v="0.104"/>
+ <val o="160706" v="0.11"/>
+ <val o="161517" v="0.109"/>
+ <val o="162326" v="0.11"/>
+ <val o="163137" v="0.111"/>
+ <val o="163f46" v="0.109"/>
+ <val o="164d57" v="0.11"/>
+ <val o="165b67" v="0.112"/>
+ <val o="166982" v="0.111"/>
+ <val o="167786" v="0.112"/>
+ <val o="168596" v="0.113"/>
+ <val o="1693a6" v="0.113"/>
+ <val o="16a1b5" v="0.112"/>
+ <val o="16afc6" v="0.111"/>
+ <val o="16bdd5" v="0.109"/>
+ <val o="16cbe6" v="0.107"/>
+ <val o="16d9f6" v="0.111"/>
+ <val o="16e807" v="0.11"/>
+ <val o="16f616" v="0.11"/>
+ <val o="170429" v="0.111"/>
+ <val o="171236" v="0.112"/>
+ <val o="172047" v="0.112"/>
+ <val o="172e57" v="0.111"/>
+ <val o="173c67" v="0.111"/>
+ <val o="174a77" v="0.11"/>
+ <val o="175887" v="0.108"/>
+ <val o="176694" v="118.351"/>
+ <val o="1774a3" v="119.763"/>
+ <val o="1782b3" v="120.872"/>
+ <val o="1790c5" v="121.443"/>
+ <val o="179ed4" v="124.587"/>
+ <val o="17ace4" v="127.119"/>
+ <val o="17bafd" v="128.887"/>
+ <val o="17c90f" v="127.107"/>
+ <val o="17d71e" v="127.1"/>
+ <val o="17e52f" v="127.35"/>
+ <val o="17f33f" v="126.552"/>
+ <val o="18014f" v="124.71"/>
+ <val o="180f5f" v="124.077"/>
+ <val o="181d6e" v="125.099"/>
+ <val o="182b7f" v="125.025"/>
+ <val o="18398f" v="123.954"/>
+ <val o="1847a1" v="123.641"/>
+ <val o="1855af" v="124.308"/>
+ <val o="1863c0" v="126.201"/>
+ <val o="1871cf" v="125.426"/>
+ <val o="187fe0" v="125.045"/>
+ <val o="188def" v="124.868"/>
+ <val o="189c00" v="123.854"/>
+ <val o="18b80d" v="117.177"/>
+ <val o="18c61c" v="120.985"/>
+ <val o="18d42c" v="121.689"/>
+ <val o="18e23b" v="121.514"/>
+ <val o="18f04b" v="123.76"/>
+ <val o="18fe5e" v="125.848"/>
+ <val o="190c76" v="123.162"/>
+ <val o="191a86" v="124.87"/>
+ <val o="192896" v="126.457"/>
+ <val o="1936a6" v="126.565"/>
+ <val o="1944b7" v="125.821"/>
+ <val o="1952c6" v="123.654"/>
+ <val o="1960d7" v="120.985"/>
+ <val o="196ee6" v="121.019"/>
+ <val o="197cf8" v="120.771"/>
+ <val o="198b0f" v="120.139"/>
+ <val o="19991f" v="120.067"/>
+ <val o="19b541" v="122.459"/>
+ <val o="19c34d" v="121.603"/>
+ <val o="19d15e" v="120.856"/>
+ <val o="19df80" v="120.882"/>
+ <val o="19ed90" v="120.049"/>
+ <val o="19eebe" v="119.903"/>
+ <val o="19fb8e" v="116.012"/>
+ <val o="1a09a0" v="119.283"/>
+ <val o="1a17ae" v="120.303"/>
+ <val o="1a25be" v="121.728"/>
+ <val o="1a33cd" v="121.516"/>
+ <val o="1a41dd" v="122.849"/>
+ <val o="1a4fed" v="126.093"/>
+ <val o="1a5e08" v="126.725"/>
+ <val o="1a6c05" v="124.883"/>
+ <val o="1a7a15" v="125.931"/>
+ <val o="1a8826" v="126.096"/>
+ <val o="1a9637" v="124.906"/>
+ <val o="1aa445" v="123.654"/>
+ <val o="1ab255" v="121.493"/>
+ <val o="1ac065" v="123.897"/>
+ <val o="1ace75" v="123.756"/>
+ <val o="1adc87" v="122.369"/>
+ <val o="1aea96" v="121.934"/>
+ <val o="1af8a7" v="122.306"/>
+ <val o="1b06b7" v="124.041"/>
+ <val o="1b14c6" v="123.698"/>
+ <val o="1c7460" v="120.029"/>
+ <val o="1c8270" v="120.033"/>
+ <val o="1c907e" v="119.314"/>
+ <val o="1c9e8f" v="120.479"/>
+ <val o="1caca2" v="121.91"/>
+ <val o="1cbab1" v="122.485"/>
+ <val o="1cc8c1" v="118.564"/>
+ <val o="1cd6d0" v="119.367"/>
+ <val o="1ce4de" v="120.808"/>
+ <val o="1cf2f0" v="123.105"/>
+ <val o="1d0109" v="125.021"/>
+ <val o="1d0f06" v="123.274"/>
+ <val o="1d1d15" v="123.92"/>
+ <val o="1d2b25" v="123.876"/>
+ <val o="1d3935" v="122.883"/>
+ <val o="1d4745" v="122.072"/>
+ <val o="1d5555" v="121.544"/>
+ <val o="1d6366" v="123.27"/>
+ <val o="1d7175" v="123.513"/>
+ <val o="1d7f86" v="122.604"/>
+ <val o="1d8d95" v="121.281"/>
+ <val o="1d9ba6" v="121.716"/>
+ <val o="1da9b6" v="122.714"/>
+ <val o="1db7c7" v="123.129"/>
+ <val o="1dc5d5" v="123.431"/>
+ <val o="1dd3e6" v="122.987"/>
+ <val o="1de1f5" v="119.262"/>
+ <val o="1df006" v="118.087"/>
+ <val o="1dfe16" v="116.532"/>
+ <val o="1e0c26" v="118.618"/>
+ <val o="1e1a36" v="119.706"/>
+ <val o="1e2847" v="120.899"/>
+ <val o="1e3659" v="120.718"/>
+ <val o="1e4467" v="121.624"/>
+ <val o="1e5281" v="117.925"/>
+ <val o="1e6086" v="120.928"/>
+ <val o="1e6e96" v="122.34"/>
+ <val o="1e7ca6" v="122.972"/>
+ <val o="1e8ab5" v="123.05"/>
+ <val o="1e98c6" v="122.44"/>
+ <val o="1ea6d5" v="120.735"/>
+ <val o="1eb4e6" v="120.711"/>
+ <val o="1ec2f6" v="123.688"/>
+ <val o="1ed106" v="122.853"/>
+ <val o="1edf16" v="122.754"/>
+ <val o="1eed26" v="122.975"/>
+ <val o="1efb36" v="123.49"/>
+ <val o="1f0946" v="123.278"/>
+ <val o="1f1756" v="121.776"/>
+ <val o="1f2566" v="121.458"/>
+ <val o="1f3376" v="120.109"/>
+ <val o="1f4187" v="116.832"/>
+ <val o="1f4f96" v="119.948"/>
+ <val o="1f5da7" v="120.022"/>
+ <val o="1f6bb6" v="120.884"/>
+ <val o="1f79c7" v="119.618"/>
+ <val o="1f87d6" v="122.811"/>
+ <val o="1f95e7" v="123.997"/>
+ <val o="1fa401" v="126.654"/>
+ <val o="1fb204" v="125.574"/>
+ <val o="1fc016" v="126.495"/>
+ <val o="1fce25" v="126.021"/>
+ <val o="1fdc35" v="125.521"/>
+ <val o="1fea45" v="123.104"/>
+ <val o="1ff855" v="121.073"/>
+ <val o="200665" v="117.997"/>
+ <val o="201475" v="119.376"/>
+ <val o="202286" v="119.302"/>
+ <val o="203095" v="120.24"/>
+ <val o="203ea5" v="120.497"/>
+ <val o="204cb6" v="123.276"/>
+ <val o="205ac6" v="121.287"/>
+ <val o="2068d6" v="120.492"/>
+ <val o="2076e6" v="119.643"/>
+ <val o="2084f6" v="117.626"/>
+ <val o="209306" v="121.9"/>
+ <val o="20a116" v="120.861"/>
+ <val o="20af26" v="120.493"/>
+ <val o="20bd37" v="121.526"/>
+ <val o="20cb46" v="119.46"/>
+ <val o="20d957" v="120.284"/>
+ <val o="20e767" v="121.713"/>
+ <val o="20f581" v="124.203"/>
+ <val o="210386" v="126.587"/>
+ <val o="211194" v="124.627"/>
+ <val o="211fa5" v="124.526"/>
+ <val o="212db5" v="123.821"/>
+ <val o="213bc5" v="122.357"/>
+ <val o="2149d6" v="118.642"/>
+ <val o="2157e5" v="116.651"/>
+ <val o="2165f6" v="122.439"/>
+ <val o="217406" v="120.232"/>
+ <val o="218217" v="119.322"/>
+ <val o="219026" v="120.236"/>
+ <val o="219e39" v="120.346"/>
+ <val o="21ac46" v="119.148"/>
+ <val o="21ba57" v="118.907"/>
+ <val o="21c867" v="117.874"/>
+ <val o="21d677" v="122.584"/>
+ <val o="21e487" v="120.252"/>
+ <val o="21f296" v="120.469"/>
+ <val o="2200a6" v="121.303"/>
+ <val o="220eb7" v="122.183"/>
+ <val o="221cc6" v="118.747"/>
+ <val o="222ad7" v="120.81"/>
+ <val o="2238e7" v="123.937"/>
+ <val o="224701" v="126.687"/>
+ <val o="225505" v="119.553"/>
+ <val o="226315" v="119.757"/>
+ <val o="227125" v="119.753"/>
+ <val o="227f35" v="117.557"/>
+ <val o="228d45" v="116.262"/>
+ <val o="229b54" v="122.469"/>
+ <val o="22a965" v="119.765"/>
+ <val o="22b776" v="119.78"/>
+ <val o="22c586" v="119.006"/>
+ <val o="22d397" v="118.696"/>
+ <val o="22e1a6" v="119.018"/>
+ <val o="22efb6" v="120.765"/>
+ <val o="22fdc7" v="120.41"/>
+ <val o="230bd7" v="119.608"/>
+ <val o="2319e6" v="119.268"/>
+ <val o="2327f6" v="118.221"/>
+ <val o="23361b" v="119.234"/>
+ <val o="234416" v="118.199"/>
+ <val o="235226" v="119.524"/>
+ <val o="236037" v="120.76"/>
+ <val o="236e46" v="118.446"/>
+ <val o="237c57" v="119.86"/>
+ <val o="238a66" v="121.458"/>
+ <val o="239881" v="120.937"/>
+ <val o="23a685" v="122.353"/>
+ <val o="23b495" v="123.085"/>
+ <val o="23c2a4" v="123.145"/>
+ <val o="23d0b5" v="122.277"/>
+ <val o="23dec4" v="121.153"/>
+ <val o="23ecd5" v="119.31"/>
+ <val o="23fae4" v="120.616"/>
+ <val o="2408f6" v="118.482"/>
+ <val o="241706" v="117.789"/>
+ <val o="242518" v="118.178"/>
+ <val o="243325" v="118.65"/>
+ <val o="244137" v="119.893"/>
+ <val o="244f46" v="119.172"/>
+ <val o="246b66" v="118.88"/>
+ <val o="247976" v="118.03"/>
+ <val o="248786" v="115.2"/>
+ <val o="24957e" v="118.091"/>
+ <val o="24a38f" v="119.601"/>
+ <val o="24b19c" v="120.844"/>
+ <val o="24bfac" v="120.094"/>
+ <val o="24cdbc" v="123.851"/>
+ <val o="24dbcd" v="123.499"/>
+ <val o="24e9e5" v="124.806"/>
+ <val o="24f808" v="124.27"/>
+ <val o="250616" v="124.985"/>
+ <val o="251426" v="125.02"/>
+ <val o="252236" v="123.483"/>
+ <val o="253047" v="122.436"/>
+ <val o="253e56" v="120.041"/>
+ <val o="254c67" v="119.496"/>
+ <val o="255a76" v="119.362"/>
+ <val o="256887" v="117.767"/>
+ <val o="257697" v="118.616"/>
+ <val o="2584a8" v="117.274"/>
+ <val o="2592b6" v="118.975"/>
+ <val o="25a0c7" v="119.79"/>
+ <val o="25aed7" v="119.331"/>
+ <val o="25bce7" v="119.194"/>
+ <val o="25caf8" v="118.637"/>
+ <val o="25d907" v="120.535"/>
+ <val o="25e718" v="119.8"/>
+ <val o="25f527" v="120.403"/>
+ <val o="260338" v="121.054"/>
+ <val o="261149" v="119.413"/>
+ <val o="261f59" v="120.38"/>
+ <val o="262d68" v="123.203"/>
+ <val o="263b83" v="121.143"/>
+ <val o="264986" v="122.976"/>
+ <val o="265795" v="123.697"/>
+ <val o="2665a6" v="124.476"/>
+ <val o="2673b5" v="123.592"/>
+ <val o="2681c6" v="123.177"/>
+ <val o="268fd5" v="121.853"/>
+ <val o="269de6" v="121.298"/>
+ <val o="26abf6" v="120.593"/>
+ <val o="26ba06" v="118.763"/>
+ <val o="26c817" v="118.278"/>
+ <val o="26d62b" v="118.596"/>
+ <val o="26e436" v="119.984"/>
+ <val o="26f247" v="119.523"/>
+ <val o="270057" v="119.574"/>
+ <val o="270e67" v="119.013"/>
+ <val o="271c77" v="119.722"/>
+ <val o="272a87" v="120.875"/>
+ <val o="273897" v="120.668"/>
+ <val o="2746a8" v="121.451"/>
+ <val o="2754b9" v="121.838"/>
+ <val o="2762c7" v="119.053"/>
+ <val o="2770d8" v="121.03"/>
+ <val o="277ee7" v="123.544"/>
+ </par>
+ <par memind="9808" h="3dc1a8de">
+ <val o="0" v="0"/>
+ <val o="e08" v="0"/>
+ <val o="1c32" v="0"/>
+ <val o="2a3c" v="0"/>
+ <val o="3835" v="0"/>
+ <val o="4645" v="0"/>
+ <val o="5455" v="0"/>
+ <val o="6265" v="0"/>
+ <val o="7075" v="0"/>
+ <val o="7e85" v="0"/>
+ <val o="8c96" v="0"/>
+ <val o="9aa5" v="0"/>
+ <val o="a8b6" v="0"/>
+ <val o="b6c5" v="0"/>
+ <val o="c4d7" v="0"/>
+ <val o="d30b" v="0"/>
+ <val o="e0f6" v="0"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="0"/>
+ <val o="11937" v="0"/>
+ <val o="12746" v="0"/>
+ <val o="13556" v="0"/>
+ <val o="14366" v="0"/>
+ <val o="15181" v="0"/>
+ <val o="15f85" v="0"/>
+ <val o="16d95" v="0"/>
+ <val o="17ba4" v="0"/>
+ <val o="189b5" v="0"/>
+ <val o="197c4" v="0"/>
+ <val o="1a5d5" v="0"/>
+ <val o="1b3e6" v="0"/>
+ <val o="1c1f6" v="0"/>
+ <val o="1d005" v="0"/>
+ <val o="1de15" v="0"/>
+ <val o="1ec25" v="0"/>
+ <val o="1fa36" v="0"/>
+ <val o="20845" v="0"/>
+ <val o="21656" v="0"/>
+ <val o="22465" v="0"/>
+ <val o="23276" v="0"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="0"/>
+ <val o="25ca7" v="0"/>
+ <val o="26ab7" v="0"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="0"/>
+ <val o="294e6" v="0"/>
+ <val o="2a301" v="0"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="0"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="0"/>
+ <val o="31375" v="0"/>
+ <val o="3219e" v="0"/>
+ <val o="32f96" v="0"/>
+ <val o="33da6" v="0"/>
+ <val o="34bb6" v="0"/>
+ <val o="359de" v="0"/>
+ <val o="367d6" v="0"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="0"/>
+ <val o="3bc36" v="0"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="0"/>
+ <val o="3e667" v="0"/>
+ <val o="3f481" v="0"/>
+ <val o="40285" v="0"/>
+ <val o="41095" v="0"/>
+ <val o="41ea5" v="0"/>
+ <val o="42cb5" v="0"/>
+ <val o="43ac5" v="0"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="0"/>
+ <val o="464f5" v="0"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="0"/>
+ <val o="54600" v="0"/>
+ <val o="55406" v="0"/>
+ <val o="56215" v="0"/>
+ <val o="57026" v="0"/>
+ <val o="57e36" v="0"/>
+ <val o="58c46" v="0"/>
+ <val o="59a70" v="0"/>
+ <val o="5a867" v="0"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="0"/>
+ <val o="5eeb8" v="0"/>
+ <val o="5fcc6" v="0"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="0"/>
+ <val o="65f37" v="0"/>
+ <val o="66d46" v="0"/>
+ <val o="67b57" v="0"/>
+ <val o="68967" v="0"/>
+ <val o="69782" v="0"/>
+ <val o="6a586" v="0"/>
+ <val o="6b395" v="0"/>
+ <val o="6c1a6" v="0"/>
+ <val o="6cfb5" v="0"/>
+ <val o="6ddc6" v="0"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="0"/>
+ <val o="707f6" v="0"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="0"/>
+ <val o="74e47" v="0"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="0"/>
+ <val o="7bebf" v="0"/>
+ <val o="7cccf" v="0"/>
+ <val o="7dadf" v="0"/>
+ <val o="7e8fa" v="0"/>
+ <val o="7f70a" v="0"/>
+ <val o="8051a" v="0"/>
+ <val o="8132a" v="0"/>
+ <val o="8213a" v="0"/>
+ <val o="82f4a" v="0"/>
+ <val o="83d5a" v="0"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="0"/>
+ <val o="891bb" v="0"/>
+ <val o="89fca" v="0"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="0"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="0"/>
+ <val o="93a84" v="0"/>
+ <val o="94885" v="0"/>
+ <val o="95694" v="0"/>
+ <val o="964a5" v="0"/>
+ <val o="972b4" v="0"/>
+ <val o="980c5" v="0"/>
+ <val o="98ed4" v="0"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="0"/>
+ <val o="9c716" v="0"/>
+ <val o="9d526" v="0"/>
+ <val o="9e336" v="0"/>
+ <val o="9f145" v="0"/>
+ <val o="9ff56" v="0"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="0"/>
+ <val o="a2986" v="0"/>
+ <val o="a3795" v="0"/>
+ <val o="a45a7" v="0"/>
+ <val o="a53b6" v="0"/>
+ <val o="a61c7" v="0"/>
+ <val o="a6fd6" v="0"/>
+ <val o="a7e00" v="0"/>
+ <val o="a8c00" v="0"/>
+ <val o="a9a05" v="0"/>
+ <val o="aa815" v="0"/>
+ <val o="ab625" v="0"/>
+ <val o="ac435" v="0"/>
+ <val o="ad245" v="0"/>
+ <val o="ae055" v="0"/>
+ <val o="aee65" v="0"/>
+ <val o="afc75" v="0"/>
+ <val o="b0a85" v="0"/>
+ <val o="b26a6" v="0"/>
+ <val o="b34b6" v="0"/>
+ <val o="b42c6" v="0"/>
+ <val o="b50d6" v="0"/>
+ <val o="b5ee7" v="0"/>
+ <val o="b6cf6" v="0"/>
+ <val o="b7b07" v="0"/>
+ <val o="b8917" v="0"/>
+ <val o="b9728" v="0"/>
+ <val o="ba537" v="0"/>
+ <val o="bb347" v="0"/>
+ <val o="bc157" v="0"/>
+ <val o="bcf67" v="0"/>
+ <val o="bdd81" v="0"/>
+ <val o="beb86" v="0"/>
+ <val o="bf995" v="0"/>
+ <val o="c07a6" v="0"/>
+ <val o="c15b5" v="0"/>
+ <val o="c23c6" v="0"/>
+ <val o="c31d5" v="0"/>
+ <val o="c3fe6" v="0"/>
+ <val o="c4df5" v="0"/>
+ <val o="c5c06" v="0"/>
+ <val o="c6a16" v="0"/>
+ <val o="c7826" v="0"/>
+ <val o="c8636" v="0"/>
+ <val o="c9446" v="0"/>
+ <val o="ca256" v="0"/>
+ <val o="cb066" v="0"/>
+ <val o="cbe76" v="0"/>
+ <val o="ccc87" v="0"/>
+ <val o="cda96" v="0"/>
+ <val o="ce8a8" v="0"/>
+ <val o="cf6b7" v="0"/>
+ <val o="d04c8" v="0"/>
+ <val o="d12d7" v="0"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="0"/>
+ <val o="d3d05" v="0"/>
+ <val o="d4b15" v="0"/>
+ <val o="d5926" v="0"/>
+ <val o="d6735" v="0"/>
+ <val o="d7546" v="0"/>
+ <val o="d8355" v="0"/>
+ <val o="d9166" v="0"/>
+ <val o="d9f75" v="0"/>
+ <val o="dad87" v="0"/>
+ <val o="dbb97" v="0"/>
+ <val o="dc9a8" v="0"/>
+ <val o="dd7b7" v="0"/>
+ <val o="de5c6" v="0"/>
+ <val o="df3d7" v="0"/>
+ <val o="e01d7" v="0"/>
+ <val o="e0fe5" v="0"/>
+ <val o="e1df5" v="0"/>
+ <val o="e2c04" v="0"/>
+ <val o="e3a14" v="0"/>
+ <val o="e4824" v="0"/>
+ <val o="e5634" v="0"/>
+ <val o="e6444" v="0"/>
+ <val o="e7255" v="0"/>
+ <val o="e806f" v="0"/>
+ <val o="e8e7f" v="0"/>
+ <val o="e9c8e" v="0"/>
+ <val o="eaa9f" v="0"/>
+ <val o="eb8ae" v="0"/>
+ <val o="ec6bf" v="0"/>
+ <val o="ed4ce" v="0"/>
+ <val o="ee2df" v="0"/>
+ <val o="ef0ef" v="0"/>
+ <val o="eff01" v="0"/>
+ <val o="f0d10" v="0"/>
+ <val o="f1b20" v="0"/>
+ <val o="f2930" v="0"/>
+ <val o="f3740" v="0"/>
+ <val o="f4551" v="0"/>
+ <val o="f5361" v="0"/>
+ <val o="f6172" v="0"/>
+ <val o="f6f80" v="0"/>
+ <val o="f7d91" v="0"/>
+ <val o="f8ba1" v="0"/>
+ <val o="f99b1" v="0"/>
+ <val o="fa7c0" v="0"/>
+ <val o="fb5d1" v="0"/>
+ <val o="fc3e0" v="0"/>
+ <val o="fd1fb" v="0"/>
+ <val o="fe00b" v="0"/>
+ <val o="fee1c" v="0"/>
+ <val o="ffc2c" v="0"/>
+ <val o="100a3b" v="0"/>
+ <val o="10184c" v="0"/>
+ <val o="10265b" v="0"/>
+ <val o="10346c" v="0"/>
+ <val o="10427b" v="0"/>
+ <val o="10508d" v="0"/>
+ <val o="105e9d" v="0"/>
+ <val o="106cad" v="0"/>
+ <val o="107abd" v="0"/>
+ <val o="1088cd" v="0"/>
+ <val o="1096de" v="0"/>
+ <val o="10a4ed" v="0"/>
+ <val o="10b2fe" v="0"/>
+ <val o="10c10d" v="0"/>
+ <val o="10cf1e" v="0"/>
+ <val o="10dd2e" v="0"/>
+ <val o="10eb66" v="0"/>
+ <val o="10f94e" v="0"/>
+ <val o="11075e" v="0"/>
+ <val o="11156d" v="0"/>
+ <val o="112388" v="0"/>
+ <val o="113187" v="0"/>
+ <val o="113fb0" v="0"/>
+ <val o="114da6" v="0"/>
+ <val o="115bb6" v="0"/>
+ <val o="1169c6" v="0"/>
+ <val o="1177d6" v="0"/>
+ <val o="1185e8" v="0"/>
+ <val o="1193f7" v="0"/>
+ <val o="11a208" v="0"/>
+ <val o="11b017" v="0"/>
+ <val o="11be2f" v="0"/>
+ <val o="11cc37" v="0"/>
+ <val o="11da47" v="0"/>
+ <val o="11e857" v="0"/>
+ <val o="11f667" v="0"/>
+ <val o="120578" v="0"/>
+ <val o="121386" v="0"/>
+ <val o="122196" v="0"/>
+ <val o="122fa6" v="0"/>
+ <val o="123db5" v="0"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="0"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="0"/>
+ <val o="128305" v="0"/>
+ <val o="129115" v="0"/>
+ <val o="129f25" v="0"/>
+ <val o="12ad35" v="0"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="0"/>
+ <val o="12d766" v="0"/>
+ <val o="12e575" v="0"/>
+ <val o="12f386" v="0"/>
+ <val o="130196" v="0"/>
+ <val o="130fa6" v="0"/>
+ <val o="131db7" v="0"/>
+ <val o="132bc5" v="0"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="0"/>
+ <val o="1774a3" v="0"/>
+ <val o="1782b3" v="0"/>
+ <val o="1790c5" v="0"/>
+ <val o="179ed4" v="0"/>
+ <val o="17ace4" v="0"/>
+ <val o="17bafd" v="0"/>
+ <val o="17c90f" v="0"/>
+ <val o="17d71e" v="0"/>
+ <val o="17e52f" v="0"/>
+ <val o="17f33f" v="0"/>
+ <val o="18014f" v="0"/>
+ <val o="180f5f" v="0"/>
+ <val o="181d6e" v="0"/>
+ <val o="182b7f" v="0"/>
+ <val o="18398f" v="0"/>
+ <val o="1847a1" v="0"/>
+ <val o="1855af" v="0"/>
+ <val o="1863c0" v="0"/>
+ <val o="1871cf" v="0"/>
+ <val o="187fe0" v="0"/>
+ <val o="188def" v="0"/>
+ <val o="189c00" v="0"/>
+ <val o="18b80d" v="0"/>
+ <val o="18c61c" v="0"/>
+ <val o="18d42c" v="0"/>
+ <val o="18e23b" v="0"/>
+ <val o="18f04b" v="0"/>
+ <val o="18fe5e" v="0"/>
+ <val o="190c76" v="0"/>
+ <val o="191a86" v="0"/>
+ <val o="192896" v="0"/>
+ <val o="1936a6" v="0"/>
+ <val o="1944b7" v="0"/>
+ <val o="1952c6" v="0"/>
+ <val o="1960d7" v="0"/>
+ <val o="196ee6" v="0"/>
+ <val o="197cf8" v="0"/>
+ <val o="198b0f" v="0"/>
+ <val o="19991f" v="0"/>
+ <val o="19b541" v="0"/>
+ <val o="19c34d" v="0"/>
+ <val o="19d15e" v="0"/>
+ <val o="19df80" v="0"/>
+ <val o="19ed90" v="0"/>
+ <val o="19eebe" v="0"/>
+ <val o="19fb8e" v="0"/>
+ <val o="1a09a0" v="0"/>
+ <val o="1a17ae" v="0"/>
+ <val o="1a25be" v="0"/>
+ <val o="1a33cd" v="0"/>
+ <val o="1a41dd" v="0"/>
+ <val o="1a4fed" v="0"/>
+ <val o="1a5e08" v="0"/>
+ <val o="1a6c05" v="0"/>
+ <val o="1a7a15" v="0"/>
+ <val o="1a8826" v="0"/>
+ <val o="1a9637" v="0"/>
+ <val o="1aa445" v="0"/>
+ <val o="1ab255" v="0"/>
+ <val o="1ac065" v="0"/>
+ <val o="1ace75" v="0"/>
+ <val o="1adc87" v="0"/>
+ <val o="1aea96" v="0"/>
+ <val o="1af8a7" v="0"/>
+ <val o="1b06b7" v="0"/>
+ <val o="1b14c6" v="0"/>
+ <val o="1c7460" v="0"/>
+ <val o="1c8270" v="0"/>
+ <val o="1c907e" v="0"/>
+ <val o="1c9e8f" v="0"/>
+ <val o="1caca2" v="0"/>
+ <val o="1cbab1" v="0"/>
+ <val o="1cc8c1" v="0"/>
+ <val o="1cd6d0" v="0"/>
+ <val o="1ce4de" v="0"/>
+ <val o="1cf2f0" v="0"/>
+ <val o="1d0109" v="0"/>
+ <val o="1d0f06" v="0"/>
+ <val o="1d1d15" v="0"/>
+ <val o="1d2b25" v="0"/>
+ <val o="1d3935" v="0"/>
+ <val o="1d4745" v="0"/>
+ <val o="1d5555" v="0"/>
+ <val o="1d6366" v="0"/>
+ <val o="1d7175" v="0"/>
+ <val o="1d7f86" v="0"/>
+ <val o="1d8d95" v="0"/>
+ <val o="1d9ba6" v="0"/>
+ <val o="1da9b6" v="0"/>
+ <val o="1db7c7" v="0"/>
+ <val o="1dc5d5" v="0"/>
+ <val o="1dd3e6" v="0"/>
+ <val o="1de1f5" v="0"/>
+ <val o="1df006" v="0"/>
+ <val o="1dfe16" v="0"/>
+ <val o="1e0c26" v="0"/>
+ <val o="1e1a36" v="0"/>
+ <val o="1e2847" v="0"/>
+ <val o="1e3659" v="0"/>
+ <val o="1e4467" v="0"/>
+ <val o="1e5281" v="0"/>
+ <val o="1e6086" v="0"/>
+ <val o="1e6e96" v="0"/>
+ <val o="1e7ca6" v="0"/>
+ <val o="1e8ab5" v="0"/>
+ <val o="1e98c6" v="0"/>
+ <val o="1ea6d5" v="0"/>
+ <val o="1eb4e6" v="0"/>
+ <val o="1ec2f6" v="0"/>
+ <val o="1ed106" v="0"/>
+ <val o="1edf16" v="0"/>
+ <val o="1eed26" v="0"/>
+ <val o="1efb36" v="0"/>
+ <val o="1f0946" v="0"/>
+ <val o="1f1756" v="0"/>
+ <val o="1f2566" v="0"/>
+ <val o="1f3376" v="0"/>
+ <val o="1f4187" v="0"/>
+ <val o="1f4f96" v="0"/>
+ <val o="1f5da7" v="0"/>
+ <val o="1f6bb6" v="0"/>
+ <val o="1f79c7" v="0"/>
+ <val o="1f87d6" v="0"/>
+ <val o="1f95e7" v="0"/>
+ <val o="1fa401" v="0"/>
+ <val o="1fb204" v="0"/>
+ <val o="1fc016" v="0"/>
+ <val o="1fce25" v="0"/>
+ <val o="1fdc35" v="0"/>
+ <val o="1fea45" v="0"/>
+ <val o="1ff855" v="0"/>
+ <val o="200665" v="0"/>
+ <val o="201475" v="0"/>
+ <val o="202286" v="0"/>
+ <val o="203095" v="0"/>
+ <val o="203ea5" v="0"/>
+ <val o="204cb6" v="0"/>
+ <val o="205ac6" v="0"/>
+ <val o="2068d6" v="0"/>
+ <val o="2076e6" v="0"/>
+ <val o="2084f6" v="0"/>
+ <val o="209306" v="0"/>
+ <val o="20a116" v="0"/>
+ <val o="20af26" v="0"/>
+ <val o="20bd37" v="0"/>
+ <val o="20cb46" v="0"/>
+ <val o="20d957" v="0"/>
+ <val o="20e767" v="0"/>
+ <val o="20f581" v="0"/>
+ <val o="210386" v="0"/>
+ <val o="211194" v="0"/>
+ <val o="211fa5" v="0"/>
+ <val o="212db5" v="0"/>
+ <val o="213bc5" v="0"/>
+ <val o="2149d6" v="0"/>
+ <val o="2157e5" v="0"/>
+ <val o="2165f6" v="0"/>
+ <val o="217406" v="0"/>
+ <val o="218217" v="0"/>
+ <val o="219026" v="0"/>
+ <val o="219e39" v="0"/>
+ <val o="21ac46" v="0"/>
+ <val o="21ba57" v="0"/>
+ <val o="21c867" v="0"/>
+ <val o="21d677" v="0"/>
+ <val o="21e487" v="0"/>
+ <val o="21f296" v="0"/>
+ <val o="2200a6" v="0"/>
+ <val o="220eb7" v="0"/>
+ <val o="221cc6" v="0"/>
+ <val o="222ad7" v="0"/>
+ <val o="2238e7" v="0"/>
+ <val o="224701" v="0"/>
+ <val o="225505" v="0"/>
+ <val o="226315" v="0"/>
+ <val o="227125" v="0"/>
+ <val o="227f35" v="0"/>
+ <val o="228d45" v="0"/>
+ <val o="229b54" v="0"/>
+ <val o="22a965" v="0"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="0"/>
+ <val o="22d397" v="0"/>
+ <val o="22e1a6" v="0"/>
+ <val o="22efb6" v="0"/>
+ <val o="22fdc7" v="0"/>
+ <val o="230bd7" v="0"/>
+ <val o="2319e6" v="0"/>
+ <val o="2327f6" v="0"/>
+ <val o="23361b" v="0"/>
+ <val o="234416" v="0"/>
+ <val o="235226" v="0"/>
+ <val o="236037" v="0"/>
+ <val o="236e46" v="0"/>
+ <val o="237c57" v="0"/>
+ <val o="238a66" v="0"/>
+ <val o="239881" v="0"/>
+ <val o="23a685" v="0"/>
+ <val o="23b495" v="0"/>
+ <val o="23c2a4" v="0"/>
+ <val o="23d0b5" v="0"/>
+ <val o="23dec4" v="0"/>
+ <val o="23ecd5" v="0"/>
+ <val o="23fae4" v="0"/>
+ <val o="2408f6" v="0"/>
+ <val o="241706" v="0"/>
+ <val o="242518" v="0"/>
+ <val o="243325" v="0"/>
+ <val o="244137" v="0"/>
+ <val o="244f46" v="0"/>
+ <val o="246b66" v="0"/>
+ <val o="247976" v="0"/>
+ <val o="248786" v="0"/>
+ <val o="24957e" v="0"/>
+ <val o="24a38f" v="0"/>
+ <val o="24b19c" v="0"/>
+ <val o="24bfac" v="0"/>
+ <val o="24cdbc" v="0"/>
+ <val o="24dbcd" v="0"/>
+ <val o="24e9e5" v="0"/>
+ <val o="24f808" v="0"/>
+ <val o="250616" v="0"/>
+ <val o="251426" v="0"/>
+ <val o="252236" v="0"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="0"/>
+ <val o="254c67" v="0"/>
+ <val o="255a76" v="0"/>
+ <val o="256887" v="0"/>
+ <val o="257697" v="0"/>
+ <val o="2584a8" v="0"/>
+ <val o="2592b6" v="0"/>
+ <val o="25a0c7" v="0"/>
+ <val o="25aed7" v="0"/>
+ <val o="25bce7" v="0"/>
+ <val o="25caf8" v="0"/>
+ <val o="25d907" v="0"/>
+ <val o="25e718" v="0"/>
+ <val o="25f527" v="0"/>
+ <val o="260338" v="0"/>
+ <val o="261149" v="0"/>
+ <val o="261f59" v="0"/>
+ <val o="262d68" v="0"/>
+ <val o="263b83" v="0"/>
+ <val o="264986" v="0"/>
+ <val o="265795" v="0"/>
+ <val o="2665a6" v="0"/>
+ <val o="2673b5" v="0"/>
+ <val o="2681c6" v="0"/>
+ <val o="268fd5" v="0"/>
+ <val o="269de6" v="0"/>
+ <val o="26abf6" v="0"/>
+ <val o="26ba06" v="0"/>
+ <val o="26c817" v="0"/>
+ <val o="26d62b" v="0"/>
+ <val o="26e436" v="0"/>
+ <val o="26f247" v="0"/>
+ <val o="270057" v="0"/>
+ <val o="270e67" v="0"/>
+ <val o="271c77" v="0"/>
+ <val o="272a87" v="0"/>
+ <val o="273897" v="0"/>
+ <val o="2746a8" v="0"/>
+ <val o="2754b9" v="0"/>
+ <val o="2762c7" v="0"/>
+ <val o="2770d8" v="0"/>
+ <val o="277ee7" v="0"/>
+ </par>
+ <par memind="9804" h="3dc1a8de">
+ <val o="0" v="113.768"/>
+ <val o="e08" v="117.131"/>
+ <val o="1c32" v="118.794"/>
+ <val o="2a3c" v="120.362"/>
+ <val o="3835" v="118.504"/>
+ <val o="4645" v="116.275"/>
+ <val o="5455" v="109.258"/>
+ <val o="6265" v="121.127"/>
+ <val o="7075" v="118.849"/>
+ <val o="7e85" v="116.093"/>
+ <val o="8c96" v="120.108"/>
+ <val o="9aa5" v="120.84"/>
+ <val o="a8b6" v="124.045"/>
+ <val o="b6c5" v="124.042"/>
+ <val o="c4d7" v="117.713"/>
+ <val o="d30b" v="118.048"/>
+ <val o="e0f6" v="118.051"/>
+ <val o="ef06" v="118.259"/>
+ <val o="fd17" v="118.054"/>
+ <val o="10b27" v="120.844"/>
+ <val o="11937" v="121.925"/>
+ <val o="12746" v="119.353"/>
+ <val o="13556" v="120.867"/>
+ <val o="14366" v="125.48"/>
+ <val o="15181" v="127.434"/>
+ <val o="15f85" v="119.069"/>
+ <val o="16d95" v="120.904"/>
+ <val o="17ba4" v="120.974"/>
+ <val o="189b5" v="120.25"/>
+ <val o="197c4" v="118.291"/>
+ <val o="1a5d5" v="126.573"/>
+ <val o="1b3e6" v="125.637"/>
+ <val o="1c1f6" v="124.668"/>
+ <val o="1d005" v="121.393"/>
+ <val o="1de15" v="121.998"/>
+ <val o="1ec25" v="122.555"/>
+ <val o="1fa36" v="123.941"/>
+ <val o="20845" v="124.746"/>
+ <val o="21656" v="125.085"/>
+ <val o="22465" v="125.143"/>
+ <val o="23276" v="123.315"/>
+ <val o="24086" v="119.026"/>
+ <val o="24e99" v="118.683"/>
+ <val o="25ca7" v="119.815"/>
+ <val o="26ab7" v="119.25"/>
+ <val o="278c6" v="119.678"/>
+ <val o="286d6" v="121.708"/>
+ <val o="294e6" v="125.182"/>
+ <val o="2a301" v="125.217"/>
+ <val o="2b105" v="117.12"/>
+ <val o="2bf15" v="118.489"/>
+ <val o="2cd25" v="119.338"/>
+ <val o="2db35" v="119.392"/>
+ <val o="2e946" v="117.277"/>
+ <val o="2f755" v="112.967"/>
+ <val o="30566" v="124.775"/>
+ <val o="31375" v="124.409"/>
+ <val o="3219e" v="123.268"/>
+ <val o="32f96" v="122.956"/>
+ <val o="33da6" v="123.032"/>
+ <val o="34bb6" v="123.555"/>
+ <val o="359de" v="123.004"/>
+ <val o="367d6" v="122.125"/>
+ <val o="375e6" v="121.078"/>
+ <val o="3840e" v="117.701"/>
+ <val o="3921e" v="118.101"/>
+ <val o="3a016" v="117.771"/>
+ <val o="3ae27" v="121.393"/>
+ <val o="3bc36" v="120.16"/>
+ <val o="3ca47" v="119.387"/>
+ <val o="3d856" v="119.887"/>
+ <val o="3e667" v="122.64"/>
+ <val o="3f481" v="125.954"/>
+ <val o="40285" v="123.51"/>
+ <val o="41095" v="124.328"/>
+ <val o="41ea5" v="124.639"/>
+ <val o="42cb5" v="124.448"/>
+ <val o="43ac5" v="122.434"/>
+ <val o="448d5" v="118.623"/>
+ <val o="456e6" v="122.169"/>
+ <val o="464f5" v="120.979"/>
+ <val o="480ff" v="118.358"/>
+ <val o="48f0e" v="117.271"/>
+ <val o="49d1d" v="118.68"/>
+ <val o="4ab46" v="118.562"/>
+ <val o="4b955" v="116.842"/>
+ <val o="4c769" v="115.913"/>
+ <val o="4d577" v="118.894"/>
+ <val o="4e387" v="118.59"/>
+ <val o="4f196" v="116.293"/>
+ <val o="4ffa6" v="118.299"/>
+ <val o="50dd0" v="120.233"/>
+ <val o="51bc6" v="118.495"/>
+ <val o="529d6" v="120.406"/>
+ <val o="537e7" v="122.644"/>
+ <val o="54600" v="125.528"/>
+ <val o="55406" v="121.746"/>
+ <val o="56215" v="122.642"/>
+ <val o="57026" v="122.581"/>
+ <val o="57e36" v="122.623"/>
+ <val o="58c46" v="120.431"/>
+ <val o="59a70" v="121.329"/>
+ <val o="5a867" v="120.651"/>
+ <val o="5b676" v="118.876"/>
+ <val o="5c487" v="115.661"/>
+ <val o="5d296" v="119.835"/>
+ <val o="5e0a9" v="120.34"/>
+ <val o="5eeb8" v="119.439"/>
+ <val o="5fcc6" v="118.245"/>
+ <val o="60ad7" v="117.004"/>
+ <val o="618e7" v="117.165"/>
+ <val o="626f7" v="119.95"/>
+ <val o="63507" v="117.149"/>
+ <val o="64317" v="118.541"/>
+ <val o="65127" v="119.822"/>
+ <val o="65f37" v="121.013"/>
+ <val o="66d46" v="121.577"/>
+ <val o="67b57" v="120.289"/>
+ <val o="68967" v="122.62"/>
+ <val o="69782" v="119.093"/>
+ <val o="6a586" v="120.493"/>
+ <val o="6b395" v="121.919"/>
+ <val o="6c1a6" v="122.218"/>
+ <val o="6cfb5" v="121.022"/>
+ <val o="6ddc6" v="118.433"/>
+ <val o="6ebd6" v="115.978"/>
+ <val o="6f9e6" v="120.971"/>
+ <val o="707f6" v="119.234"/>
+ <val o="71607" v="118.015"/>
+ <val o="72417" v="117.922"/>
+ <val o="73227" v="117.566"/>
+ <val o="74037" v="121.469"/>
+ <val o="74e47" v="120.514"/>
+ <val o="75c57" v="118.485"/>
+ <val o="76a63" v="117.889"/>
+ <val o="77873" v="117.946"/>
+ <val o="78680" v="113.611"/>
+ <val o="7948f" v="116.583"/>
+ <val o="7a29f" v="119.306"/>
+ <val o="7b0af" v="118.802"/>
+ <val o="7bebf" v="120.799"/>
+ <val o="7cccf" v="120.857"/>
+ <val o="7dadf" v="121.594"/>
+ <val o="7e8fa" v="121.421"/>
+ <val o="7f70a" v="123.74"/>
+ <val o="8051a" v="125.189"/>
+ <val o="8132a" v="125.673"/>
+ <val o="8213a" v="124.777"/>
+ <val o="82f4a" v="122.432"/>
+ <val o="83d5a" v="120.011"/>
+ <val o="84b6a" v="118.622"/>
+ <val o="8597a" v="118.559"/>
+ <val o="8678b" v="117.524"/>
+ <val o="8759b" v="117.257"/>
+ <val o="883ac" v="119.909"/>
+ <val o="891bb" v="120.921"/>
+ <val o="89fca" v="119.96"/>
+ <val o="8adda" v="118.481"/>
+ <val o="8bbeb" v="118.605"/>
+ <val o="8c9fc" v="118.282"/>
+ <val o="8d80b" v="118.663"/>
+ <val o="8e61a" v="117.009"/>
+ <val o="8f42a" v="117.766"/>
+ <val o="9023a" v="119.722"/>
+ <val o="9104a" v="120.299"/>
+ <val o="91e5a" v="118.366"/>
+ <val o="92c6a" v="122.529"/>
+ <val o="93a84" v="124.833"/>
+ <val o="94885" v="123.06"/>
+ <val o="95694" v="122.396"/>
+ <val o="964a5" v="122.792"/>
+ <val o="972b4" v="122.232"/>
+ <val o="980c5" v="119.79"/>
+ <val o="98ed4" v="122.86"/>
+ <val o="99ce5" v="119.012"/>
+ <val o="9aaf5" v="118.321"/>
+ <val o="9b906" v="115.456"/>
+ <val o="9c716" v="119.374"/>
+ <val o="9d526" v="120.344"/>
+ <val o="9e336" v="119.254"/>
+ <val o="9f145" v="117.83"/>
+ <val o="9ff56" v="117.001"/>
+ <val o="a0d65" v="116.782"/>
+ <val o="a1b77" v="116.803"/>
+ <val o="a2986" v="118.75"/>
+ <val o="a3795" v="118.358"/>
+ <val o="a45a7" v="119.493"/>
+ <val o="a53b6" v="119.698"/>
+ <val o="a61c7" v="119.908"/>
+ <val o="a6fd6" v="120.675"/>
+ <val o="a7e00" v="122.754"/>
+ <val o="a8c00" v="125.385"/>
+ <val o="a9a05" v="118.214"/>
+ <val o="aa815" v="119.329"/>
+ <val o="ab625" v="120.11"/>
+ <val o="ac435" v="119.689"/>
+ <val o="ad245" v="117.12"/>
+ <val o="ae055" v="114.729"/>
+ <val o="aee65" v="120.871"/>
+ <val o="afc75" v="119.177"/>
+ <val o="b0a85" v="116.699"/>
+ <val o="b26a6" v="116.768"/>
+ <val o="b34b6" v="118.075"/>
+ <val o="b42c6" v="115.571"/>
+ <val o="b50d6" v="115.867"/>
+ <val o="b5ee7" v="114.309"/>
+ <val o="b6cf6" v="122.787"/>
+ <val o="b7b07" v="118.904"/>
+ <val o="b8917" v="118.531"/>
+ <val o="b9728" v="119.438"/>
+ <val o="ba537" v="120.908"/>
+ <val o="bb347" v="119.844"/>
+ <val o="bc157" v="120.575"/>
+ <val o="bcf67" v="123.212"/>
+ <val o="bdd81" v="118.712"/>
+ <val o="beb86" v="118.316"/>
+ <val o="bf995" v="118.859"/>
+ <val o="c07a6" v="120.092"/>
+ <val o="c15b5" v="119.532"/>
+ <val o="c23c6" v="118.179"/>
+ <val o="c31d5" v="115.731"/>
+ <val o="c3fe6" v="117.671"/>
+ <val o="c4df5" v="116.046"/>
+ <val o="c5c06" v="117.416"/>
+ <val o="c6a16" v="117.578"/>
+ <val o="c7826" v="116.758"/>
+ <val o="c8636" v="118.319"/>
+ <val o="c9446" v="118.355"/>
+ <val o="ca256" v="118.136"/>
+ <val o="cb066" v="117.225"/>
+ <val o="cbe76" v="122.659"/>
+ <val o="ccc87" v="118.547"/>
+ <val o="cda96" v="116.635"/>
+ <val o="ce8a8" v="118.105"/>
+ <val o="cf6b7" v="118.503"/>
+ <val o="d04c8" v="119.547"/>
+ <val o="d12d7" v="121.4"/>
+ <val o="d20e7" v="123.396"/>
+ <val o="d2f02" v="126.068"/>
+ <val o="d3d05" v="119.33"/>
+ <val o="d4b15" v="120.524"/>
+ <val o="d5926" v="120.742"/>
+ <val o="d6735" v="119.548"/>
+ <val o="d7546" v="117.358"/>
+ <val o="d8355" v="124.267"/>
+ <val o="d9166" v="122.388"/>
+ <val o="d9f75" v="120.774"/>
+ <val o="dad87" v="117.345"/>
+ <val o="dbb97" v="116.698"/>
+ <val o="dc9a8" v="116.798"/>
+ <val o="dd7b7" v="118.219"/>
+ <val o="de5c6" v="117.879"/>
+ <val o="df3d7" v="117.287"/>
+ <val o="e01d7" v="117.42"/>
+ <val o="e0fe5" v="116.798"/>
+ <val o="e1df5" v="117.184"/>
+ <val o="e2c04" v="119.665"/>
+ <val o="e3a14" v="121.033"/>
+ <val o="e4824" v="120.839"/>
+ <val o="e5634" v="122.456"/>
+ <val o="e6444" v="120.534"/>
+ <val o="e7255" v="122.766"/>
+ <val o="e806f" v="123.735"/>
+ <val o="e8e7f" v="116.654"/>
+ <val o="e9c8e" v="118.111"/>
+ <val o="eaa9f" v="118.441"/>
+ <val o="eb8ae" v="117.463"/>
+ <val o="ec6bf" v="113.549"/>
+ <val o="ed4ce" v="123.596"/>
+ <val o="ee2df" v="120.709"/>
+ <val o="ef0ef" v="118.94"/>
+ <val o="eff01" v="116.002"/>
+ <val o="f0d10" v="117.741"/>
+ <val o="f1b20" v="117.49"/>
+ <val o="f2930" v="121.433"/>
+ <val o="f3740" v="117.735"/>
+ <val o="f4551" v="118.165"/>
+ <val o="f5361" v="117.839"/>
+ <val o="f6172" v="117.685"/>
+ <val o="f6f80" v="117.518"/>
+ <val o="f7d91" v="119.385"/>
+ <val o="f8ba1" v="121.202"/>
+ <val o="f99b1" v="120.254"/>
+ <val o="fa7c0" v="118.336"/>
+ <val o="fb5d1" v="118.267"/>
+ <val o="fc3e0" v="123.088"/>
+ <val o="fd1fb" v="123.183"/>
+ <val o="fe00b" v="126.377"/>
+ <val o="fee1c" v="123.772"/>
+ <val o="ffc2c" v="123.634"/>
+ <val o="100a3b" v="123.008"/>
+ <val o="10184c" v="121.382"/>
+ <val o="10265b" v="117.696"/>
+ <val o="10346c" v="117.901"/>
+ <val o="10427b" v="119.404"/>
+ <val o="10508d" v="117.646"/>
+ <val o="105e9d" v="118.147"/>
+ <val o="106cad" v="117.802"/>
+ <val o="107abd" v="120.151"/>
+ <val o="1088cd" v="119.733"/>
+ <val o="1096de" v="119.096"/>
+ <val o="10a4ed" v="119.291"/>
+ <val o="10b2fe" v="118.973"/>
+ <val o="10c10d" v="116.336"/>
+ <val o="10cf1e" v="118.171"/>
+ <val o="10dd2e" v="119.082"/>
+ <val o="10eb66" v="120.953"/>
+ <val o="10f94e" v="121.41"/>
+ <val o="11075e" v="119.088"/>
+ <val o="11156d" v="120.941"/>
+ <val o="112388" v="123.699"/>
+ <val o="113187" v="122.48"/>
+ <val o="113fb0" v="123.378"/>
+ <val o="114da6" v="123.312"/>
+ <val o="115bb6" v="123.217"/>
+ <val o="1169c6" v="120.961"/>
+ <val o="1177d6" v="118.076"/>
+ <val o="1185e8" v="118.573"/>
+ <val o="1193f7" v="117.978"/>
+ <val o="11a208" v="120.019"/>
+ <val o="11b017" v="121.662"/>
+ <val o="11be2f" v="122.268"/>
+ <val o="11cc37" v="122.317"/>
+ <val o="11da47" v="121.934"/>
+ <val o="11e857" v="120.776"/>
+ <val o="11f667" v="121.889"/>
+ <val o="120578" v="121.064"/>
+ <val o="121386" v="116.824"/>
+ <val o="122196" v="117.556"/>
+ <val o="122fa6" v="118.784"/>
+ <val o="123db5" v="120.77"/>
+ <val o="124bc5" v="122.565"/>
+ <val o="1259d5" v="120.263"/>
+ <val o="1267e4" v="122.729"/>
+ <val o="127600" v="124.561"/>
+ <val o="128305" v="125.237"/>
+ <val o="129115" v="125.344"/>
+ <val o="129f25" v="125.492"/>
+ <val o="12ad35" v="124.67"/>
+ <val o="12bb45" v="122.819"/>
+ <val o="12c954" v="121.713"/>
+ <val o="12d766" v="120.883"/>
+ <val o="12e575" v="119.85"/>
+ <val o="12f386" v="117.176"/>
+ <val o="130196" v="117.447"/>
+ <val o="130fa6" v="118.679"/>
+ <val o="131db7" v="120.016"/>
+ <val o="132bc5" v="119.959"/>
+ <val o="1339d4" v="0.109"/>
+ <val o="1347e5" v="0.109"/>
+ <val o="1355f4" v="0.108"/>
+ <val o="136404" v="0.106"/>
+ <val o="137214" v="0.106"/>
+ <val o="138024" v="0.106"/>
+ <val o="138e33" v="0.108"/>
+ <val o="139c44" v="0.109"/>
+ <val o="13aa54" v="0.108"/>
+ <val o="13b865" v="0.109"/>
+ <val o="13c67e" v="0.101"/>
+ <val o="13d48e" v="0.104"/>
+ <val o="13e29e" v="0.106"/>
+ <val o="13f0ae" v="0.106"/>
+ <val o="13febf" v="0.104"/>
+ <val o="140ccf" v="0.102"/>
+ <val o="141adf" v="0.104"/>
+ <val o="1428ef" v="0.108"/>
+ <val o="1436ff" v="0.107"/>
+ <val o="14450f" v="0.107"/>
+ <val o="14531f" v="0.107"/>
+ <val o="146130" v="0.108"/>
+ <val o="146f40" v="0.11"/>
+ <val o="147d44" v="0.108"/>
+ <val o="148b57" v="0.108"/>
+ <val o="149965" v="0.108"/>
+ <val o="14a775" v="0.106"/>
+ <val o="14b584" v="0.11"/>
+ <val o="14c397" v="0.106"/>
+ <val o="14d1a4" v="0.107"/>
+ <val o="14dfb6" v="0.108"/>
+ <val o="14edc5" v="0.11"/>
+ <val o="14fbd5" v="0.112"/>
+ <val o="1509e5" v="0.112"/>
+ <val o="1517ff" v="0.115"/>
+ <val o="152605" v="0.107"/>
+ <val o="153415" v="0.109"/>
+ <val o="154225" v="0.11"/>
+ <val o="155035" v="0.109"/>
+ <val o="155e45" v="0.107"/>
+ <val o="156c55" v="0.104"/>
+ <val o="157a65" v="0.107"/>
+ <val o="158875" v="0.107"/>
+ <val o="159686" v="0.106"/>
+ <val o="15a495" v="0.107"/>
+ <val o="15b2a6" v="0.108"/>
+ <val o="15c0b6" v="0.109"/>
+ <val o="15cec6" v="0.109"/>
+ <val o="15dcd5" v="0.109"/>
+ <val o="15eae6" v="0.108"/>
+ <val o="15f8f5" v="0.104"/>
+ <val o="160706" v="0.11"/>
+ <val o="161517" v="0.109"/>
+ <val o="162326" v="0.11"/>
+ <val o="163137" v="0.111"/>
+ <val o="163f46" v="0.109"/>
+ <val o="164d57" v="0.11"/>
+ <val o="165b67" v="0.112"/>
+ <val o="166982" v="0.111"/>
+ <val o="167786" v="0.112"/>
+ <val o="168596" v="0.112"/>
+ <val o="1693a6" v="0.113"/>
+ <val o="16a1b5" v="0.112"/>
+ <val o="16afc6" v="0.11"/>
+ <val o="16bdd5" v="0.108"/>
+ <val o="16cbe6" v="0.107"/>
+ <val o="16d9f6" v="0.112"/>
+ <val o="16e807" v="0.11"/>
+ <val o="16f616" v="0.11"/>
+ <val o="170429" v="0.111"/>
+ <val o="171236" v="0.112"/>
+ <val o="172047" v="0.112"/>
+ <val o="172e57" v="0.111"/>
+ <val o="173c67" v="0.111"/>
+ <val o="174a77" v="0.11"/>
+ <val o="175887" v="0.108"/>
+ <val o="176694" v="117.84"/>
+ <val o="1774a3" v="119.199"/>
+ <val o="1782b3" v="120.226"/>
+ <val o="1790c5" v="120.924"/>
+ <val o="179ed4" v="124.038"/>
+ <val o="17ace4" v="126.747"/>
+ <val o="17bafd" v="128.364"/>
+ <val o="17c90f" v="126.55"/>
+ <val o="17d71e" v="126.522"/>
+ <val o="17e52f" v="126.893"/>
+ <val o="17f33f" v="126.114"/>
+ <val o="18014f" v="124.219"/>
+ <val o="180f5f" v="123.691"/>
+ <val o="181d6e" v="124.723"/>
+ <val o="182b7f" v="124.667"/>
+ <val o="18398f" v="123.666"/>
+ <val o="1847a1" v="123.337"/>
+ <val o="1855af" v="124.042"/>
+ <val o="1863c0" v="125.92"/>
+ <val o="1871cf" v="125.144"/>
+ <val o="187fe0" v="124.769"/>
+ <val o="188def" v="124.549"/>
+ <val o="189c00" v="123.483"/>
+ <val o="18b80d" v="116.63"/>
+ <val o="18c61c" v="120.461"/>
+ <val o="18d42c" v="121.228"/>
+ <val o="18e23b" v="121.154"/>
+ <val o="18f04b" v="123.409"/>
+ <val o="18fe5e" v="125.403"/>
+ <val o="190c76" v="122.716"/>
+ <val o="191a86" v="124.385"/>
+ <val o="192896" v="126.046"/>
+ <val o="1936a6" v="126.166"/>
+ <val o="1944b7" v="125.26"/>
+ <val o="1952c6" v="123.29"/>
+ <val o="1960d7" v="120.499"/>
+ <val o="196ee6" v="120.705"/>
+ <val o="197cf8" v="120.492"/>
+ <val o="198b0f" v="119.996"/>
+ <val o="19991f" v="120.265"/>
+ <val o="19b541" v="122.232"/>
+ <val o="19c34d" v="121.49"/>
+ <val o="19d15e" v="120.704"/>
+ <val o="19df80" v="120.614"/>
+ <val o="19ed90" v="119.839"/>
+ <val o="19eebe" v="119.685"/>
+ <val o="19fb8e" v="115.593"/>
+ <val o="1a09a0" v="118.86"/>
+ <val o="1a17ae" v="119.97"/>
+ <val o="1a25be" v="121.369"/>
+ <val o="1a33cd" v="121.096"/>
+ <val o="1a41dd" v="122.451"/>
+ <val o="1a4fed" v="125.765"/>
+ <val o="1a5e08" v="126.302"/>
+ <val o="1a6c05" v="124.495"/>
+ <val o="1a7a15" v="125.659"/>
+ <val o="1a8826" v="125.773"/>
+ <val o="1a9637" v="124.464"/>
+ <val o="1aa445" v="123.167"/>
+ <val o="1ab255" v="121.137"/>
+ <val o="1ac065" v="123.677"/>
+ <val o="1ace75" v="123.569"/>
+ <val o="1adc87" v="122.254"/>
+ <val o="1aea96" v="121.794"/>
+ <val o="1af8a7" v="122.088"/>
+ <val o="1b06b7" v="123.87"/>
+ <val o="1b14c6" v="123.556"/>
+ <val o="1c7460" v="119.682"/>
+ <val o="1c8270" v="119.676"/>
+ <val o="1c907e" v="118.821"/>
+ <val o="1c9e8f" v="119.836"/>
+ <val o="1caca2" v="121.192"/>
+ <val o="1cbab1" v="121.685"/>
+ <val o="1cc8c1" v="117.874"/>
+ <val o="1cd6d0" v="118.762"/>
+ <val o="1ce4de" v="120.263"/>
+ <val o="1cf2f0" v="122.468"/>
+ <val o="1d0109" v="124.536"/>
+ <val o="1d0f06" v="122.598"/>
+ <val o="1d1d15" v="123.2"/>
+ <val o="1d2b25" v="123.218"/>
+ <val o="1d3935" v="122.202"/>
+ <val o="1d4745" v="121.424"/>
+ <val o="1d5555" v="120.888"/>
+ <val o="1d6366" v="122.743"/>
+ <val o="1d7175" v="123.078"/>
+ <val o="1d7f86" v="122.237"/>
+ <val o="1d8d95" v="120.858"/>
+ <val o="1d9ba6" v="121.231"/>
+ <val o="1da9b6" v="122.185"/>
+ <val o="1db7c7" v="122.648"/>
+ <val o="1dc5d5" v="122.992"/>
+ <val o="1dd3e6" v="122.482"/>
+ <val o="1de1f5" v="118.707"/>
+ <val o="1df006" v="117.367"/>
+ <val o="1dfe16" v="115.714"/>
+ <val o="1e0c26" v="117.74"/>
+ <val o="1e1a36" v="119.048"/>
+ <val o="1e2847" v="120.179"/>
+ <val o="1e3659" v="119.949"/>
+ <val o="1e4467" v="120.906"/>
+ <val o="1e5281" v="117.251"/>
+ <val o="1e6086" v="120.118"/>
+ <val o="1e6e96" v="121.521"/>
+ <val o="1e7ca6" v="122.188"/>
+ <val o="1e8ab5" v="122.212"/>
+ <val o="1e98c6" v="121.531"/>
+ <val o="1ea6d5" v="119.981"/>
+ <val o="1eb4e6" v="119.977"/>
+ <val o="1ec2f6" v="122.939"/>
+ <val o="1ed106" v="122.289"/>
+ <val o="1edf16" v="122.05"/>
+ <val o="1eed26" v="122.271"/>
+ <val o="1efb36" v="122.856"/>
+ <val o="1f0946" v="122.611"/>
+ <val o="1f1756" v="121.148"/>
+ <val o="1f2566" v="120.864"/>
+ <val o="1f3376" v="119.609"/>
+ <val o="1f4187" v="116.101"/>
+ <val o="1f4f96" v="119.165"/>
+ <val o="1f5da7" v="119.287"/>
+ <val o="1f6bb6" v="120.208"/>
+ <val o="1f79c7" v="118.775"/>
+ <val o="1f87d6" v="122.222"/>
+ <val o="1f95e7" v="123.288"/>
+ <val o="1fa401" v="126.026"/>
+ <val o="1fb204" v="124.828"/>
+ <val o="1fc016" v="125.769"/>
+ <val o="1fce25" v="125.218"/>
+ <val o="1fdc35" v="124.795"/>
+ <val o="1fea45" v="122.393"/>
+ <val o="1ff855" v="120.523"/>
+ <val o="200665" v="117.319"/>
+ <val o="201475" v="118.772"/>
+ <val o="202286" v="118.808"/>
+ <val o="203095" v="119.686"/>
+ <val o="203ea5" v="119.99"/>
+ <val o="204cb6" v="122.708"/>
+ <val o="205ac6" v="120.762"/>
+ <val o="2068d6" v="119.92"/>
+ <val o="2076e6" v="119.129"/>
+ <val o="2084f6" v="117.091"/>
+ <val o="209306" v="121.219"/>
+ <val o="20a116" v="120.28"/>
+ <val o="20af26" v="119.69"/>
+ <val o="20bd37" v="120.677"/>
+ <val o="20cb46" v="118.756"/>
+ <val o="20d957" v="119.608"/>
+ <val o="20e767" v="121.059"/>
+ <val o="20f581" v="123.573"/>
+ <val o="210386" v="125.976"/>
+ <val o="211194" v="123.926"/>
+ <val o="211fa5" v="123.888"/>
+ <val o="212db5" v="123.08"/>
+ <val o="213bc5" v="121.69"/>
+ <val o="2149d6" v="117.916"/>
+ <val o="2157e5" v="116.014"/>
+ <val o="2165f6" v="121.935"/>
+ <val o="217406" v="119.675"/>
+ <val o="218217" v="118.8"/>
+ <val o="219026" v="119.649"/>
+ <val o="219e39" v="119.715"/>
+ <val o="21ac46" v="118.622"/>
+ <val o="21ba57" v="118.459"/>
+ <val o="21c867" v="117.339"/>
+ <val o="21d677" v="122.095"/>
+ <val o="21e487" v="119.556"/>
+ <val o="21f296" v="119.761"/>
+ <val o="2200a6" v="120.53"/>
+ <val o="220eb7" v="121.428"/>
+ <val o="221cc6" v="118.003"/>
+ <val o="222ad7" v="120.228"/>
+ <val o="2238e7" v="123.33"/>
+ <val o="224701" v="125.861"/>
+ <val o="225505" v="118.788"/>
+ <val o="226315" v="119.106"/>
+ <val o="227125" v="119.116"/>
+ <val o="227f35" v="116.908"/>
+ <val o="228d45" v="115.642"/>
+ <val o="229b54" v="122.013"/>
+ <val o="22a965" v="119.234"/>
+ <val o="22b776" v="119.31"/>
+ <val o="22c586" v="118.566"/>
+ <val o="22d397" v="118.243"/>
+ <val o="22e1a6" v="118.579"/>
+ <val o="22efb6" v="120.288"/>
+ <val o="22fdc7" v="119.996"/>
+ <val o="230bd7" v="119.249"/>
+ <val o="2319e6" v="118.866"/>
+ <val o="2327f6" v="117.741"/>
+ <val o="23361b" v="118.543"/>
+ <val o="234416" v="117.538"/>
+ <val o="235226" v="118.709"/>
+ <val o="236037" v="119.94"/>
+ <val o="236e46" v="117.668"/>
+ <val o="237c57" v="119.159"/>
+ <val o="238a66" v="120.771"/>
+ <val o="239881" v="120.234"/>
+ <val o="23a685" v="121.624"/>
+ <val o="23b495" v="122.272"/>
+ <val o="23c2a4" v="122.422"/>
+ <val o="23d0b5" v="121.687"/>
+ <val o="23dec4" v="120.361"/>
+ <val o="23ecd5" v="118.751"/>
+ <val o="23fae4" v="120.028"/>
+ <val o="2408f6" v="117.974"/>
+ <val o="241706" v="117.305"/>
+ <val o="242518" v="117.71"/>
+ <val o="243325" v="118.193"/>
+ <val o="244137" v="119.542"/>
+ <val o="244f46" v="118.741"/>
+ <val o="246b66" v="118.295"/>
+ <val o="247976" v="117.534"/>
+ <val o="248786" v="114.472"/>
+ <val o="24957e" v="117.357"/>
+ <val o="24a38f" v="118.851"/>
+ <val o="24b19c" v="120.137"/>
+ <val o="24bfac" v="119.349"/>
+ <val o="24cdbc" v="123.226"/>
+ <val o="24dbcd" v="122.921"/>
+ <val o="24e9e5" v="124.273"/>
+ <val o="24f808" v="123.515"/>
+ <val o="250616" v="124.182"/>
+ <val o="251426" v="124.27"/>
+ <val o="252236" v="122.827"/>
+ <val o="253047" v="121.801"/>
+ <val o="253e56" v="119.514"/>
+ <val o="254c67" v="118.922"/>
+ <val o="255a76" v="118.86"/>
+ <val o="256887" v="117.264"/>
+ <val o="257697" v="118.022"/>
+ <val o="2584a8" v="116.819"/>
+ <val o="2592b6" v="118.384"/>
+ <val o="25a0c7" v="119.276"/>
+ <val o="25aed7" v="118.81"/>
+ <val o="25bce7" v="118.676"/>
+ <val o="25caf8" v="118.108"/>
+ <val o="25d907" v="119.625"/>
+ <val o="25e718" v="119.042"/>
+ <val o="25f527" v="119.638"/>
+ <val o="260338" v="120.355"/>
+ <val o="261149" v="118.728"/>
+ <val o="261f59" v="119.777"/>
+ <val o="262d68" v="122.621"/>
+ <val o="263b83" v="120.494"/>
+ <val o="264986" v="122.335"/>
+ <val o="265795" v="123.001"/>
+ <val o="2665a6" v="123.827"/>
+ <val o="2673b5" v="122.939"/>
+ <val o="2681c6" v="122.398"/>
+ <val o="268fd5" v="121.212"/>
+ <val o="269de6" v="120.844"/>
+ <val o="26abf6" v="120.054"/>
+ <val o="26ba06" v="118.297"/>
+ <val o="26c817" v="117.795"/>
+ <val o="26d62b" v="117.996"/>
+ <val o="26e436" v="119.287"/>
+ <val o="26f247" v="118.815"/>
+ <val o="270057" v="118.955"/>
+ <val o="270e67" v="118.449"/>
+ <val o="271c77" v="119.157"/>
+ <val o="272a87" v="120.124"/>
+ <val o="273897" v="119.858"/>
+ <val o="2746a8" v="120.668"/>
+ <val o="2754b9" v="121.067"/>
+ <val o="2762c7" v="118.265"/>
+ <val o="2770d8" v="120.308"/>
+ <val o="277ee7" v="122.851"/>
+ </par>
+ <par memind="440600" h="3dc1a8de">
+ <val o="0" v="-1275"/>
+ <val o="e08" v="-1482"/>
+ <val o="1c32" v="-1562"/>
+ <val o="2a3c" v="-1643"/>
+ <val o="3835" v="-1446"/>
+ <val o="4645" v="-1276"/>
+ <val o="5455" v="-1049"/>
+ <val o="6265" v="-1694"/>
+ <val o="7075" v="-1760"/>
+ <val o="7e85" v="-1662"/>
+ <val o="8c96" v="-2067"/>
+ <val o="9aa5" v="-1992"/>
+ <val o="a8b6" v="-1928"/>
+ <val o="b6c5" v="-2018"/>
+ <val o="c4d7" v="-7"/>
+ <val o="d30b" v="-6"/>
+ <val o="e0f6" v="-7"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="-7"/>
+ <val o="11937" v="-7"/>
+ <val o="12746" v="-7"/>
+ <val o="13556" v="-7"/>
+ <val o="14366" v="-7"/>
+ <val o="15181" v="-8"/>
+ <val o="15f85" v="-7"/>
+ <val o="16d95" v="-7"/>
+ <val o="17ba4" v="-7"/>
+ <val o="189b5" v="-7"/>
+ <val o="197c4" v="-7"/>
+ <val o="1a5d5" v="-7"/>
+ <val o="1b3e6" v="-7"/>
+ <val o="1c1f6" v="-7"/>
+ <val o="1d005" v="-7"/>
+ <val o="1de15" v="-7"/>
+ <val o="1ec25" v="-7"/>
+ <val o="1fa36" v="-7"/>
+ <val o="20845" v="-7"/>
+ <val o="21656" v="-7"/>
+ <val o="22465" v="-7"/>
+ <val o="23276" v="-7"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="-7"/>
+ <val o="25ca7" v="-7"/>
+ <val o="26ab7" v="-7"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="-7"/>
+ <val o="294e6" v="-7"/>
+ <val o="2a301" v="-7"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="-7"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="-7"/>
+ <val o="31375" v="-7"/>
+ <val o="3219e" v="-7"/>
+ <val o="32f96" v="-7"/>
+ <val o="33da6" v="-7"/>
+ <val o="34bb6" v="-7"/>
+ <val o="359de" v="-7"/>
+ <val o="367d6" v="-7"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="-7"/>
+ <val o="3bc36" v="-7"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="-7"/>
+ <val o="3e667" v="-7"/>
+ <val o="3f481" v="-7"/>
+ <val o="40285" v="-7"/>
+ <val o="41095" v="-7"/>
+ <val o="41ea5" v="-7"/>
+ <val o="42cb5" v="-7"/>
+ <val o="43ac5" v="-7"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="-7"/>
+ <val o="464f5" v="-7"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="-7"/>
+ <val o="54600" v="-7"/>
+ <val o="55406" v="-7"/>
+ <val o="56215" v="-7"/>
+ <val o="57026" v="-7"/>
+ <val o="57e36" v="-7"/>
+ <val o="58c46" v="-7"/>
+ <val o="59a70" v="-7"/>
+ <val o="5a867" v="-7"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="-7"/>
+ <val o="5eeb8" v="-7"/>
+ <val o="5fcc6" v="-7"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="-7"/>
+ <val o="65f37" v="-7"/>
+ <val o="66d46" v="-7"/>
+ <val o="67b57" v="-7"/>
+ <val o="68967" v="-7"/>
+ <val o="69782" v="-7"/>
+ <val o="6a586" v="-7"/>
+ <val o="6b395" v="-7"/>
+ <val o="6c1a6" v="-7"/>
+ <val o="6cfb5" v="-7"/>
+ <val o="6ddc6" v="-7"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="-7"/>
+ <val o="707f6" v="-7"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="-7"/>
+ <val o="74e47" v="-7"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="-7"/>
+ <val o="7bebf" v="-7"/>
+ <val o="7cccf" v="-7"/>
+ <val o="7dadf" v="-7"/>
+ <val o="7e8fa" v="-7"/>
+ <val o="7f70a" v="-7"/>
+ <val o="8051a" v="-7"/>
+ <val o="8132a" v="-7"/>
+ <val o="8213a" v="-7"/>
+ <val o="82f4a" v="-7"/>
+ <val o="83d5a" v="-7"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="-7"/>
+ <val o="891bb" v="-7"/>
+ <val o="89fca" v="-7"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="-7"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="-7"/>
+ <val o="93a84" v="-7"/>
+ <val o="94885" v="-7"/>
+ <val o="95694" v="-7"/>
+ <val o="964a5" v="-7"/>
+ <val o="972b4" v="-7"/>
+ <val o="980c5" v="-7"/>
+ <val o="98ed4" v="-7"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="-7"/>
+ <val o="9c716" v="-7"/>
+ <val o="9d526" v="-7"/>
+ <val o="9e336" v="-7"/>
+ <val o="9f145" v="-7"/>
+ <val o="9ff56" v="-7"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="-1845"/>
+ <val o="a2986" v="-631"/>
+ <val o="a3795" v="1564"/>
+ <val o="a45a7" v="-66"/>
+ <val o="a53b6" v="-393"/>
+ <val o="a61c7" v="-691"/>
+ <val o="a6fd6" v="-883"/>
+ <val o="a7e00" v="-1575"/>
+ <val o="a8c00" v="-2209"/>
+ <val o="a9a05" v="109"/>
+ <val o="aa815" v="-420"/>
+ <val o="ab625" v="-859"/>
+ <val o="ac435" v="-628"/>
+ <val o="ad245" v="516"/>
+ <val o="ae055" v="1839"/>
+ <val o="aee65" v="293"/>
+ <val o="afc75" v="1185"/>
+ <val o="b0a85" v="3946"/>
+ <val o="b26a6" v="4230"/>
+ <val o="b34b6" v="3689"/>
+ <val o="b42c6" v="248"/>
+ <val o="b50d6" v="430"/>
+ <val o="b5ee7" v="1026"/>
+ <val o="b6cf6" v="-526"/>
+ <val o="b7b07" v="-258"/>
+ <val o="b8917" v="-65"/>
+ <val o="b9728" v="-489"/>
+ <val o="ba537" v="-842"/>
+ <val o="bb347" v="1082"/>
+ <val o="bc157" v="310"/>
+ <val o="bcf67" v="-1112"/>
+ <val o="bdd81" v="3632"/>
+ <val o="beb86" v="513"/>
+ <val o="bf995" v="214"/>
+ <val o="c07a6" v="-292"/>
+ <val o="c15b5" v="-127"/>
+ <val o="c23c6" v="495"/>
+ <val o="c31d5" v="1815"/>
+ <val o="c3fe6" v="818"/>
+ <val o="c4df5" v="1539"/>
+ <val o="c5c06" v="680"/>
+ <val o="c6a16" v="712"/>
+ <val o="c7826" v="1280"/>
+ <val o="c8636" v="397"/>
+ <val o="c9446" v="493"/>
+ <val o="ca256" v="250"/>
+ <val o="cb066" v="785"/>
+ <val o="cbe76" v="-201"/>
+ <val o="ccc87" v="2156"/>
+ <val o="cda96" v="2937"/>
+ <val o="ce8a8" v="2107"/>
+ <val o="cf6b7" v="2824"/>
+ <val o="d04c8" v="2269"/>
+ <val o="d12d7" v="1441"/>
+ <val o="d20e7" v="-297"/>
+ <val o="d2f02" v="-2280"/>
+ <val o="d3d05" v="-1189"/>
+ <val o="d4b15" v="-964"/>
+ <val o="d5926" v="-442"/>
+ <val o="d6735" v="261"/>
+ <val o="d7546" v="1309"/>
+ <val o="d8355" v="-849"/>
+ <val o="d9166" v="178"/>
+ <val o="d9f75" v="1111"/>
+ <val o="dad87" v="2750"/>
+ <val o="dbb97" v="2769"/>
+ <val o="dc9a8" v="2973"/>
+ <val o="dd7b7" v="1327"/>
+ <val o="de5c6" v="454"/>
+ <val o="df3d7" v="199"/>
+ <val o="e01d7" v="167"/>
+ <val o="e0fe5" v="556"/>
+ <val o="e1df5" v="416"/>
+ <val o="e2c04" v="-370"/>
+ <val o="e3a14" v="-1154"/>
+ <val o="e4824" v="93"/>
+ <val o="e5634" v="-843"/>
+ <val o="e6444" v="171"/>
+ <val o="e7255" v="-646"/>
+ <val o="e806f" v="-723"/>
+ <val o="e8e7f" v="2665"/>
+ <val o="e9c8e" v="837"/>
+ <val o="eaa9f" v="698"/>
+ <val o="eb8ae" v="1097"/>
+ <val o="ec6bf" v="2649"/>
+ <val o="ed4ce" v="-495"/>
+ <val o="ee2df" v="1165"/>
+ <val o="ef0ef" v="542"/>
+ <val o="eff01" v="1871"/>
+ <val o="f0d10" v="979"/>
+ <val o="f1b20" v="1210"/>
+ <val o="f2930" v="-356"/>
+ <val o="f3740" v="1654"/>
+ <val o="f4551" v="1368"/>
+ <val o="f5361" v="1462"/>
+ <val o="f6172" v="1612"/>
+ <val o="f6f80" v="1309"/>
+ <val o="f7d91" v="1886"/>
+ <val o="f8ba1" v="1136"/>
+ <val o="f99b1" v="1169"/>
+ <val o="fa7c0" v="1403"/>
+ <val o="fb5d1" v="1316"/>
+ <val o="fc3e0" v="-1041"/>
+ <val o="fd1fb" v="-1190"/>
+ <val o="fe00b" v="-1609"/>
+ <val o="fee1c" v="-199"/>
+ <val o="ffc2c" v="-252"/>
+ <val o="100a3b" v="585"/>
+ <val o="10184c" v="1069"/>
+ <val o="10265b" v="1973"/>
+ <val o="10346c" v="1831"/>
+ <val o="10427b" v="1127"/>
+ <val o="10508d" v="1767"/>
+ <val o="105e9d" v="1343"/>
+ <val o="106cad" v="1564"/>
+ <val o="107abd" v="849"/>
+ <val o="1088cd" v="805"/>
+ <val o="1096de" v="1093"/>
+ <val o="10a4ed" v="880"/>
+ <val o="10b2fe" v="1254"/>
+ <val o="10c10d" v="2664"/>
+ <val o="10cf1e" v="1368"/>
+ <val o="10dd2e" v="1009"/>
+ <val o="10eb66" v="208"/>
+ <val o="10f94e" v="22"/>
+ <val o="11075e" v="1142"/>
+ <val o="11156d" v="286"/>
+ <val o="112388" v="-1168"/>
+ <val o="113187" v="712"/>
+ <val o="113fb0" v="227"/>
+ <val o="114da6" v="236"/>
+ <val o="115bb6" v="372"/>
+ <val o="1169c6" v="1441"/>
+ <val o="1177d6" v="2015"/>
+ <val o="1185e8" v="1211"/>
+ <val o="1193f7" v="1284"/>
+ <val o="11a208" v="369"/>
+ <val o="11b017" v="-310"/>
+ <val o="11be2f" v="-802"/>
+ <val o="11cc37" v="781"/>
+ <val o="11da47" v="491"/>
+ <val o="11e857" v="1023"/>
+ <val o="11f667" v="516"/>
+ <val o="120578" v="1"/>
+ <val o="121386" v="1"/>
+ <val o="122196" v="2"/>
+ <val o="122fa6" v="1"/>
+ <val o="123db5" v="1"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="1"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="-1"/>
+ <val o="128305" v="-1"/>
+ <val o="129115" v="-1"/>
+ <val o="129f25" v="-1"/>
+ <val o="12ad35" v="-1"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="1"/>
+ <val o="12d766" v="1"/>
+ <val o="12e575" v="2"/>
+ <val o="12f386" v="1"/>
+ <val o="130196" v="1"/>
+ <val o="130fa6" v="1"/>
+ <val o="131db7" v="1"/>
+ <val o="132bc5" v="1"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="2274"/>
+ <val o="1774a3" v="1775"/>
+ <val o="1782b3" v="1153"/>
+ <val o="1790c5" v="769"/>
+ <val o="179ed4" v="-846"/>
+ <val o="17ace4" v="-2362"/>
+ <val o="17bafd" v="-2961"/>
+ <val o="17c90f" v="-2519"/>
+ <val o="17d71e" v="-2447"/>
+ <val o="17e52f" v="-2865"/>
+ <val o="17f33f" v="-2276"/>
+ <val o="18014f" v="-1250"/>
+ <val o="180f5f" v="-716"/>
+ <val o="181d6e" v="-1489"/>
+ <val o="182b7f" v="-2004"/>
+ <val o="18398f" v="-1055"/>
+ <val o="1847a1" v="-978"/>
+ <val o="1855af" v="-1269"/>
+ <val o="1863c0" v="-3170"/>
+ <val o="1871cf" v="-2668"/>
+ <val o="187fe0" v="-2540"/>
+ <val o="188def" v="-2377"/>
+ <val o="189c00" v="-1126"/>
+ <val o="18b80d" v="1219"/>
+ <val o="18c61c" v="-1061"/>
+ <val o="18d42c" v="-1519"/>
+ <val o="18e23b" v="-1284"/>
+ <val o="18f04b" v="-1902"/>
+ <val o="18fe5e" v="-1623"/>
+ <val o="190c76" v="-778"/>
+ <val o="191a86" v="-1730"/>
+ <val o="192896" v="-1745"/>
+ <val o="1936a6" v="-1872"/>
+ <val o="1944b7" v="-1207"/>
+ <val o="1952c6" v="-211"/>
+ <val o="1960d7" v="1619"/>
+ <val o="196ee6" v="-764"/>
+ <val o="197cf8" v="-827"/>
+ <val o="198b0f" v="40"/>
+ <val o="19991f" v="-199"/>
+ <val o="19b541" v="-967"/>
+ <val o="19c34d" v="-680"/>
+ <val o="19d15e" v="-385"/>
+ <val o="19df80" v="-241"/>
+ <val o="19ed90" v="371"/>
+ <val o="19eebe" v="471"/>
+ <val o="19fb8e" v="61"/>
+ <val o="1a09a0" v="-2440"/>
+ <val o="1a17ae" v="-3447"/>
+ <val o="1a25be" v="-3862"/>
+ <val o="1a33cd" v="-1657"/>
+ <val o="1a41dd" v="-2273"/>
+ <val o="1a4fed" v="-4132"/>
+ <val o="1a5e08" v="-3735"/>
+ <val o="1a6c05" v="-2655"/>
+ <val o="1a7a15" v="-3286"/>
+ <val o="1a8826" v="-3377"/>
+ <val o="1a9637" v="-2707"/>
+ <val o="1aa445" v="-1980"/>
+ <val o="1ab255" v="-797"/>
+ <val o="1ac065" v="-2046"/>
+ <val o="1ace75" v="-2793"/>
+ <val o="1adc87" v="-1939"/>
+ <val o="1aea96" v="-2092"/>
+ <val o="1af8a7" v="-2211"/>
+ <val o="1b06b7" v="-2679"/>
+ <val o="1b14c6" v="-2530"/>
+ <val o="1c7460" v="453"/>
+ <val o="1c8270" v="-157"/>
+ <val o="1c907e" v="1143"/>
+ <val o="1c9e8f" v="-146"/>
+ <val o="1caca2" v="-1002"/>
+ <val o="1cbab1" v="-1402"/>
+ <val o="1cc8c1" v="2949"/>
+ <val o="1cd6d0" v="2229"/>
+ <val o="1ce4de" v="1022"/>
+ <val o="1cf2f0" v="-1628"/>
+ <val o="1d0109" v="-1835"/>
+ <val o="1d0f06" v="-211"/>
+ <val o="1d1d15" v="-767"/>
+ <val o="1d2b25" v="-792"/>
+ <val o="1d3935" v="173"/>
+ <val o="1d4745" v="776"/>
+ <val o="1d5555" v="1249"/>
+ <val o="1d6366" v="-957"/>
+ <val o="1d7175" v="-911"/>
+ <val o="1d7f86" v="-243"/>
+ <val o="1d8d95" v="-65"/>
+ <val o="1d9ba6" v="-308"/>
+ <val o="1da9b6" v="-811"/>
+ <val o="1db7c7" v="-806"/>
+ <val o="1dc5d5" v="-952"/>
+ <val o="1dd3e6" v="-716"/>
+ <val o="1de1f5" v="-1618"/>
+ <val o="1df006" v="-1910"/>
+ <val o="1dfe16" v="-1809"/>
+ <val o="1e0c26" v="-2224"/>
+ <val o="1e1a36" v="-2272"/>
+ <val o="1e2847" v="-2317"/>
+ <val o="1e3659" v="-2283"/>
+ <val o="1e4467" v="-2334"/>
+ <val o="1e5281" v="-1860"/>
+ <val o="1e6086" v="-2139"/>
+ <val o="1e6e96" v="-2206"/>
+ <val o="1e7ca6" v="-296"/>
+ <val o="1e8ab5" v="-449"/>
+ <val o="1e98c6" v="-142"/>
+ <val o="1ea6d5" v="-422"/>
+ <val o="1eb4e6" v="-365"/>
+ <val o="1ec2f6" v="-581"/>
+ <val o="1ed106" v="-263"/>
+ <val o="1edf16" v="-325"/>
+ <val o="1eed26" v="-142"/>
+ <val o="1efb36" v="-355"/>
+ <val o="1f0946" v="-310"/>
+ <val o="1f1756" v="496"/>
+ <val o="1f2566" v="660"/>
+ <val o="1f3376" v="1246"/>
+ <val o="1f4187" v="2889"/>
+ <val o="1f4f96" v="1532"/>
+ <val o="1f5da7" v="-143"/>
+ <val o="1f6bb6" v="-518"/>
+ <val o="1f79c7" v="225"/>
+ <val o="1f87d6" v="-1667"/>
+ <val o="1f95e7" v="-2330"/>
+ <val o="1fa401" v="-1727"/>
+ <val o="1fb204" v="-1489"/>
+ <val o="1fc016" v="-1515"/>
+ <val o="1fce25" v="-476"/>
+ <val o="1fdc35" v="-193"/>
+ <val o="1fea45" v="128"/>
+ <val o="1ff855" v="376"/>
+ <val o="200665" v="2872"/>
+ <val o="201475" v="408"/>
+ <val o="202286" v="1923"/>
+ <val o="203095" v="1830"/>
+ <val o="203ea5" v="1798"/>
+ <val o="204cb6" v="334"/>
+ <val o="205ac6" v="1260"/>
+ <val o="2068d6" v="1815"/>
+ <val o="2076e6" v="2272"/>
+ <val o="2084f6" v="262"/>
+ <val o="209306" v="-387"/>
+ <val o="20a116" v="-613"/>
+ <val o="20af26" v="-251"/>
+ <val o="20bd37" v="-885"/>
+ <val o="20cb46" v="551"/>
+ <val o="20d957" v="48"/>
+ <val o="20e767" v="-982"/>
+ <val o="20f581" v="-1612"/>
+ <val o="210386" v="-1125"/>
+ <val o="211194" v="-381"/>
+ <val o="211fa5" v="-441"/>
+ <val o="212db5" v="71"/>
+ <val o="213bc5" v="1020"/>
+ <val o="2149d6" v="760"/>
+ <val o="2157e5" v="-319"/>
+ <val o="2165f6" v="-1144"/>
+ <val o="217406" v="302"/>
+ <val o="218217" v="-319"/>
+ <val o="219026" v="-582"/>
+ <val o="219e39" v="408"/>
+ <val o="21ac46" v="1031"/>
+ <val o="21ba57" v="1139"/>
+ <val o="21c867" v="2082"/>
+ <val o="21d677" v="-1202"/>
+ <val o="21e487" v="622"/>
+ <val o="21f296" v="456"/>
+ <val o="2200a6" v="-736"/>
+ <val o="220eb7" v="-818"/>
+ <val o="221cc6" v="1684"/>
+ <val o="222ad7" v="307"/>
+ <val o="2238e7" v="-801"/>
+ <val o="224701" v="-1256"/>
+ <val o="225505" v="3308"/>
+ <val o="226315" v="506"/>
+ <val o="227125" v="639"/>
+ <val o="227f35" v="1963"/>
+ <val o="228d45" v="2867"/>
+ <val o="229b54" v="-831"/>
+ <val o="22a965" v="-270"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="2010"/>
+ <val o="22d397" v="3408"/>
+ <val o="22e1a6" v="3190"/>
+ <val o="22efb6" v="-187"/>
+ <val o="22fdc7" v="-225"/>
+ <val o="230bd7" v="531"/>
+ <val o="2319e6" v="-823"/>
+ <val o="2327f6" v="62"/>
+ <val o="23361b" v="1079"/>
+ <val o="234416" v="1547"/>
+ <val o="235226" v="900"/>
+ <val o="236037" v="112"/>
+ <val o="236e46" v="1780"/>
+ <val o="237c57" v="1407"/>
+ <val o="238a66" v="298"/>
+ <val o="239881" v="565"/>
+ <val o="23a685" v="-311"/>
+ <val o="23b495" v="-657"/>
+ <val o="23c2a4" v="168"/>
+ <val o="23d0b5" v="647"/>
+ <val o="23dec4" v="1427"/>
+ <val o="23ecd5" v="829"/>
+ <val o="23fae4" v="-5"/>
+ <val o="2408f6" v="1197"/>
+ <val o="241706" v="3751"/>
+ <val o="242518" v="2991"/>
+ <val o="243325" v="2801"/>
+ <val o="244137" v="-1188"/>
+ <val o="244f46" v="-828"/>
+ <val o="246b66" v="-799"/>
+ <val o="247976" v="57"/>
+ <val o="248786" v="4601"/>
+ <val o="24957e" v="1911"/>
+ <val o="24a38f" v="799"/>
+ <val o="24b19c" v="-972"/>
+ <val o="24bfac" v="-708"/>
+ <val o="24cdbc" v="-790"/>
+ <val o="24dbcd" v="-490"/>
+ <val o="24e9e5" v="-1316"/>
+ <val o="24f808" v="-825"/>
+ <val o="250616" v="-1012"/>
+ <val o="251426" v="-1178"/>
+ <val o="252236" v="-35"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="1352"/>
+ <val o="254c67" v="1059"/>
+ <val o="255a76" v="1290"/>
+ <val o="256887" v="2079"/>
+ <val o="257697" v="3618"/>
+ <val o="2584a8" v="-4684"/>
+ <val o="2592b6" v="-2470"/>
+ <val o="25a0c7" v="-556"/>
+ <val o="25aed7" v="189"/>
+ <val o="25bce7" v="260"/>
+ <val o="25caf8" v="816"/>
+ <val o="25d907" v="2489"/>
+ <val o="25e718" v="2732"/>
+ <val o="25f527" v="2234"/>
+ <val o="260338" v="57"/>
+ <val o="261149" v="1219"/>
+ <val o="261f59" v="632"/>
+ <val o="262d68" v="-1360"/>
+ <val o="263b83" v="38"/>
+ <val o="264986" v="-980"/>
+ <val o="265795" v="-1501"/>
+ <val o="2665a6" v="-2119"/>
+ <val o="2673b5" v="-1618"/>
+ <val o="2681c6" v="-1314"/>
+ <val o="268fd5" v="-432"/>
+ <val o="269de6" v="309"/>
+ <val o="26abf6" v="685"/>
+ <val o="26ba06" v="1692"/>
+ <val o="26c817" v="1899"/>
+ <val o="26d62b" v="3622"/>
+ <val o="26e436" v="2709"/>
+ <val o="26f247" v="3037"/>
+ <val o="270057" v="2898"/>
+ <val o="270e67" v="3251"/>
+ <val o="271c77" v="186"/>
+ <val o="272a87" v="-636"/>
+ <val o="273897" v="-421"/>
+ <val o="2746a8" v="-729"/>
+ <val o="2754b9" v="-978"/>
+ <val o="2762c7" v="2670"/>
+ <val o="2770d8" v="1255"/>
+ <val o="277ee7" v="-496"/>
+ </par>
+ <par memind="424600" h="3dc1a8de">
+ <val o="0" v="-4313"/>
+ <val o="e08" v="-4163"/>
+ <val o="1c32" v="-4102"/>
+ <val o="2a3c" v="-4091"/>
+ <val o="3835" v="-3982"/>
+ <val o="4645" v="-3934"/>
+ <val o="5455" v="-4439"/>
+ <val o="6265" v="-5323"/>
+ <val o="7075" v="-6298"/>
+ <val o="7e85" v="-7332"/>
+ <val o="8c96" v="-7541"/>
+ <val o="9aa5" v="-7248"/>
+ <val o="a8b6" v="-6869"/>
+ <val o="b6c5" v="-6454"/>
+ <val o="c4d7" v="-7"/>
+ <val o="d30b" v="-7"/>
+ <val o="e0f6" v="-7"/>
+ <val o="ef06" v="-7"/>
+ <val o="fd17" v="-7"/>
+ <val o="10b27" v="-8"/>
+ <val o="11937" v="-8"/>
+ <val o="12746" v="-7"/>
+ <val o="13556" v="-8"/>
+ <val o="14366" v="-9"/>
+ <val o="15181" v="-9"/>
+ <val o="15f85" v="-8"/>
+ <val o="16d95" v="-8"/>
+ <val o="17ba4" v="-8"/>
+ <val o="189b5" v="-8"/>
+ <val o="197c4" v="-8"/>
+ <val o="1a5d5" v="-9"/>
+ <val o="1b3e6" v="-9"/>
+ <val o="1c1f6" v="-8"/>
+ <val o="1d005" v="-8"/>
+ <val o="1de15" v="-8"/>
+ <val o="1ec25" v="-8"/>
+ <val o="1fa36" v="-8"/>
+ <val o="20845" v="-9"/>
+ <val o="21656" v="-8"/>
+ <val o="22465" v="-8"/>
+ <val o="23276" v="-8"/>
+ <val o="24086" v="-7"/>
+ <val o="24e99" v="-7"/>
+ <val o="25ca7" v="-8"/>
+ <val o="26ab7" v="-8"/>
+ <val o="278c6" v="-8"/>
+ <val o="286d6" v="-8"/>
+ <val o="294e6" v="-9"/>
+ <val o="2a301" v="-9"/>
+ <val o="2b105" v="-8"/>
+ <val o="2bf15" v="-8"/>
+ <val o="2cd25" v="-8"/>
+ <val o="2db35" v="-8"/>
+ <val o="2e946" v="-8"/>
+ <val o="2f755" v="-7"/>
+ <val o="30566" v="-9"/>
+ <val o="31375" v="-8"/>
+ <val o="3219e" v="-8"/>
+ <val o="32f96" v="-8"/>
+ <val o="33da6" v="-8"/>
+ <val o="34bb6" v="-8"/>
+ <val o="359de" v="-8"/>
+ <val o="367d6" v="-8"/>
+ <val o="375e6" v="-8"/>
+ <val o="3840e" v="-7"/>
+ <val o="3921e" v="-7"/>
+ <val o="3a016" v="-7"/>
+ <val o="3ae27" v="-8"/>
+ <val o="3bc36" v="-8"/>
+ <val o="3ca47" v="-7"/>
+ <val o="3d856" v="-8"/>
+ <val o="3e667" v="-8"/>
+ <val o="3f481" v="-9"/>
+ <val o="40285" v="-9"/>
+ <val o="41095" v="-9"/>
+ <val o="41ea5" v="-9"/>
+ <val o="42cb5" v="-9"/>
+ <val o="43ac5" v="-8"/>
+ <val o="448d5" v="-7"/>
+ <val o="456e6" v="-8"/>
+ <val o="464f5" v="-7"/>
+ <val o="480ff" v="-7"/>
+ <val o="48f0e" v="-6"/>
+ <val o="49d1d" v="-7"/>
+ <val o="4ab46" v="-7"/>
+ <val o="4b955" v="-7"/>
+ <val o="4c769" v="-6"/>
+ <val o="4d577" v="-7"/>
+ <val o="4e387" v="-7"/>
+ <val o="4f196" v="-7"/>
+ <val o="4ffa6" v="-7"/>
+ <val o="50dd0" v="-7"/>
+ <val o="51bc6" v="-7"/>
+ <val o="529d6" v="-8"/>
+ <val o="537e7" v="-8"/>
+ <val o="54600" v="-9"/>
+ <val o="55406" v="-8"/>
+ <val o="56215" v="-8"/>
+ <val o="57026" v="-8"/>
+ <val o="57e36" v="-8"/>
+ <val o="58c46" v="-8"/>
+ <val o="59a70" v="-8"/>
+ <val o="5a867" v="-8"/>
+ <val o="5b676" v="-7"/>
+ <val o="5c487" v="-6"/>
+ <val o="5d296" v="-7"/>
+ <val o="5e0a9" v="-7"/>
+ <val o="5eeb8" v="-7"/>
+ <val o="5fcc6" v="-7"/>
+ <val o="60ad7" v="-7"/>
+ <val o="618e7" v="-7"/>
+ <val o="626f7" v="-7"/>
+ <val o="63507" v="-7"/>
+ <val o="64317" v="-7"/>
+ <val o="65127" v="-7"/>
+ <val o="65f37" v="-8"/>
+ <val o="66d46" v="-8"/>
+ <val o="67b57" v="-8"/>
+ <val o="68967" v="-8"/>
+ <val o="69782" v="-8"/>
+ <val o="6a586" v="-8"/>
+ <val o="6b395" v="-8"/>
+ <val o="6c1a6" v="-9"/>
+ <val o="6cfb5" v="-8"/>
+ <val o="6ddc6" v="-8"/>
+ <val o="6ebd6" v="-7"/>
+ <val o="6f9e6" v="-8"/>
+ <val o="707f6" v="-7"/>
+ <val o="71607" v="-6"/>
+ <val o="72417" v="-6"/>
+ <val o="73227" v="-6"/>
+ <val o="74037" v="-7"/>
+ <val o="74e47" v="-7"/>
+ <val o="75c57" v="-7"/>
+ <val o="76a63" v="-6"/>
+ <val o="77873" v="-7"/>
+ <val o="78680" v="-6"/>
+ <val o="7948f" v="-7"/>
+ <val o="7a29f" v="-7"/>
+ <val o="7b0af" v="-7"/>
+ <val o="7bebf" v="-8"/>
+ <val o="7cccf" v="-8"/>
+ <val o="7dadf" v="-8"/>
+ <val o="7e8fa" v="-8"/>
+ <val o="7f70a" v="-8"/>
+ <val o="8051a" v="-9"/>
+ <val o="8132a" v="-9"/>
+ <val o="8213a" v="-9"/>
+ <val o="82f4a" v="-8"/>
+ <val o="83d5a" v="-8"/>
+ <val o="84b6a" v="-7"/>
+ <val o="8597a" v="-7"/>
+ <val o="8678b" v="-7"/>
+ <val o="8759b" v="-7"/>
+ <val o="883ac" v="-7"/>
+ <val o="891bb" v="-8"/>
+ <val o="89fca" v="-7"/>
+ <val o="8adda" v="-7"/>
+ <val o="8bbeb" v="-7"/>
+ <val o="8c9fc" v="-7"/>
+ <val o="8d80b" v="-7"/>
+ <val o="8e61a" v="-7"/>
+ <val o="8f42a" v="-7"/>
+ <val o="9023a" v="-7"/>
+ <val o="9104a" v="-8"/>
+ <val o="91e5a" v="-7"/>
+ <val o="92c6a" v="-8"/>
+ <val o="93a84" v="-9"/>
+ <val o="94885" v="-8"/>
+ <val o="95694" v="-9"/>
+ <val o="964a5" v="-9"/>
+ <val o="972b4" v="-8"/>
+ <val o="980c5" v="-8"/>
+ <val o="98ed4" v="-8"/>
+ <val o="99ce5" v="-8"/>
+ <val o="9aaf5" v="-7"/>
+ <val o="9b906" v="-7"/>
+ <val o="9c716" v="-7"/>
+ <val o="9d526" v="-7"/>
+ <val o="9e336" v="-7"/>
+ <val o="9f145" v="-7"/>
+ <val o="9ff56" v="-7"/>
+ <val o="a0d65" v="-7"/>
+ <val o="a1b77" v="-6460"/>
+ <val o="a2986" v="-3546"/>
+ <val o="a3795" v="-986"/>
+ <val o="a45a7" v="697"/>
+ <val o="a53b6" v="776"/>
+ <val o="a61c7" v="925"/>
+ <val o="a6fd6" v="125"/>
+ <val o="a7e00" v="456"/>
+ <val o="a8c00" v="903"/>
+ <val o="a9a05" v="278"/>
+ <val o="aa815" v="27"/>
+ <val o="ab625" v="43"/>
+ <val o="ac435" v="173"/>
+ <val o="ad245" v="947"/>
+ <val o="ae055" v="728"/>
+ <val o="aee65" v="-452"/>
+ <val o="afc75" v="-117"/>
+ <val o="b0a85" v="23"/>
+ <val o="b26a6" v="182"/>
+ <val o="b34b6" v="-152"/>
+ <val o="b42c6" v="-423"/>
+ <val o="b50d6" v="-705"/>
+ <val o="b5ee7" v="-790"/>
+ <val o="b6cf6" v="-1575"/>
+ <val o="b7b07" v="-2027"/>
+ <val o="b8917" v="-1757"/>
+ <val o="b9728" v="-1722"/>
+ <val o="ba537" v="-1901"/>
+ <val o="bb347" v="-741"/>
+ <val o="bc157" v="-812"/>
+ <val o="bcf67" v="-891"/>
+ <val o="bdd81" v="652"/>
+ <val o="beb86" v="411"/>
+ <val o="bf995" v="516"/>
+ <val o="c07a6" v="398"/>
+ <val o="c15b5" v="382"/>
+ <val o="c23c6" v="470"/>
+ <val o="c31d5" v="591"/>
+ <val o="c3fe6" v="267"/>
+ <val o="c4df5" v="770"/>
+ <val o="c5c06" v="164"/>
+ <val o="c6a16" v="438"/>
+ <val o="c7826" v="-43"/>
+ <val o="c8636" v="72"/>
+ <val o="c9446" v="249"/>
+ <val o="ca256" v="201"/>
+ <val o="cb066" v="115"/>
+ <val o="cbe76" v="-425"/>
+ <val o="ccc87" v="-229"/>
+ <val o="cda96" v="-284"/>
+ <val o="ce8a8" v="-247"/>
+ <val o="cf6b7" v="-135"/>
+ <val o="d04c8" v="-54"/>
+ <val o="d12d7" v="96"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="16"/>
+ <val o="d3d05" v="598"/>
+ <val o="d4b15" v="721"/>
+ <val o="d5926" v="818"/>
+ <val o="d6735" v="1067"/>
+ <val o="d7546" v="1245"/>
+ <val o="d8355" v="-117"/>
+ <val o="d9166" v="-721"/>
+ <val o="d9f75" v="-1504"/>
+ <val o="dad87" v="-2084"/>
+ <val o="dbb97" v="-2554"/>
+ <val o="dc9a8" v="-2345"/>
+ <val o="dd7b7" v="-2920"/>
+ <val o="de5c6" v="-2712"/>
+ <val o="df3d7" v="-2858"/>
+ <val o="e01d7" v="-2928"/>
+ <val o="e0fe5" v="-2803"/>
+ <val o="e1df5" v="-3032"/>
+ <val o="e2c04" v="-4017"/>
+ <val o="e3a14" v="-3918"/>
+ <val o="e4824" v="-3412"/>
+ <val o="e5634" v="-3441"/>
+ <val o="e6444" v="-2561"/>
+ <val o="e7255" v="-2139"/>
+ <val o="e806f" v="-1765"/>
+ <val o="e8e7f" v="-465"/>
+ <val o="e9c8e" v="-702"/>
+ <val o="eaa9f" v="-647"/>
+ <val o="eb8ae" v="-676"/>
+ <val o="ec6bf" v="-509"/>
+ <val o="ed4ce" v="-2150"/>
+ <val o="ee2df" v="-2355"/>
+ <val o="ef0ef" v="-3171"/>
+ <val o="eff01" v="-4031"/>
+ <val o="f0d10" v="-4338"/>
+ <val o="f1b20" v="-4651"/>
+ <val o="f2930" v="-4668"/>
+ <val o="f3740" v="-4346"/>
+ <val o="f4551" v="-4571"/>
+ <val o="f5361" v="-4929"/>
+ <val o="f6172" v="-4607"/>
+ <val o="f6f80" v="-4866"/>
+ <val o="f7d91" v="-4308"/>
+ <val o="f8ba1" v="-3897"/>
+ <val o="f99b1" v="-3784"/>
+ <val o="fa7c0" v="-2988"/>
+ <val o="fb5d1" v="-3099"/>
+ <val o="fc3e0" v="-3335"/>
+ <val o="fd1fb" v="-2686"/>
+ <val o="fe00b" v="-2522"/>
+ <val o="fee1c" v="-2074"/>
+ <val o="ffc2c" v="-1989"/>
+ <val o="100a3b" v="-1788"/>
+ <val o="10184c" v="-1795"/>
+ <val o="10265b" v="-2075"/>
+ <val o="10346c" v="-2698"/>
+ <val o="10427b" v="-3932"/>
+ <val o="10508d" v="-4406"/>
+ <val o="105e9d" v="-4366"/>
+ <val o="106cad" v="-4692"/>
+ <val o="107abd" v="-4302"/>
+ <val o="1088cd" v="-3927"/>
+ <val o="1096de" v="-4101"/>
+ <val o="10a4ed" v="-4187"/>
+ <val o="10b2fe" v="-4342"/>
+ <val o="10c10d" v="-4162"/>
+ <val o="10cf1e" v="-4456"/>
+ <val o="10dd2e" v="-4132"/>
+ <val o="10eb66" v="-4499"/>
+ <val o="10f94e" v="-3882"/>
+ <val o="11075e" v="-3295"/>
+ <val o="11156d" v="-2863"/>
+ <val o="112388" v="-2668"/>
+ <val o="113187" v="-1778"/>
+ <val o="113fb0" v="-1810"/>
+ <val o="114da6" v="-1829"/>
+ <val o="115bb6" v="-1800"/>
+ <val o="1169c6" v="-1595"/>
+ <val o="1177d6" v="-2050"/>
+ <val o="1185e8" v="-2961"/>
+ <val o="1193f7" v="-3627"/>
+ <val o="11a208" v="-4830"/>
+ <val o="11b017" v="-4296"/>
+ <val o="11be2f" v="-5257"/>
+ <val o="11cc37" v="-4408"/>
+ <val o="11da47" v="-4326"/>
+ <val o="11e857" v="-4420"/>
+ <val o="11f667" v="-3950"/>
+ <val o="120578" v="-4"/>
+ <val o="121386" v="-4"/>
+ <val o="122196" v="-4"/>
+ <val o="122fa6" v="-3"/>
+ <val o="123db5" v="-3"/>
+ <val o="124bc5" v="-3"/>
+ <val o="1259d5" v="-2"/>
+ <val o="1267e4" v="-2"/>
+ <val o="127600" v="-2"/>
+ <val o="128305" v="-2"/>
+ <val o="129115" v="-2"/>
+ <val o="129f25" v="-2"/>
+ <val o="12ad35" v="-2"/>
+ <val o="12bb45" v="-1"/>
+ <val o="12c954" v="-2"/>
+ <val o="12d766" v="-2"/>
+ <val o="12e575" v="-3"/>
+ <val o="12f386" v="-2"/>
+ <val o="130196" v="-4"/>
+ <val o="130fa6" v="-3"/>
+ <val o="131db7" v="-3"/>
+ <val o="132bc5" v="-3"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="-6868"/>
+ <val o="1774a3" v="-6790"/>
+ <val o="1782b3" v="-7252"/>
+ <val o="1790c5" v="-6734"/>
+ <val o="179ed4" v="-6030"/>
+ <val o="17ace4" v="-5892"/>
+ <val o="17bafd" v="-6066"/>
+ <val o="17c90f" v="-5486"/>
+ <val o="17d71e" v="-5444"/>
+ <val o="17e52f" v="-5339"/>
+ <val o="17f33f" v="-4983"/>
+ <val o="18014f" v="-5190"/>
+ <val o="180f5f" v="-6313"/>
+ <val o="181d6e" v="-6839"/>
+ <val o="182b7f" v="-7853"/>
+ <val o="18398f" v="-13507"/>
+ <val o="1847a1" v="-13381"/>
+ <val o="1855af" v="-12778"/>
+ <val o="1863c0" v="-11890"/>
+ <val o="1871cf" v="-12338"/>
+ <val o="187fe0" v="-11774"/>
+ <val o="188def" v="-12649"/>
+ <val o="189c00" v="-11849"/>
+ <val o="18b80d" v="-7471"/>
+ <val o="18c61c" v="-8126"/>
+ <val o="18d42c" v="-7696"/>
+ <val o="18e23b" v="-6538"/>
+ <val o="18f04b" v="-6175"/>
+ <val o="18fe5e" v="-5664"/>
+ <val o="190c76" v="-4480"/>
+ <val o="191a86" v="-4300"/>
+ <val o="192896" v="-4263"/>
+ <val o="1936a6" v="-4119"/>
+ <val o="1944b7" v="-4103"/>
+ <val o="1952c6" v="-4511"/>
+ <val o="1960d7" v="-5135"/>
+ <val o="196ee6" v="-6038"/>
+ <val o="197cf8" v="-6392"/>
+ <val o="198b0f" v="-5899"/>
+ <val o="19991f" v="-6690"/>
+ <val o="19b541" v="-6603"/>
+ <val o="19c34d" v="-6159"/>
+ <val o="19d15e" v="-6128"/>
+ <val o="19df80" v="-6220"/>
+ <val o="19ed90" v="-6047"/>
+ <val o="19eebe" v="-6009"/>
+ <val o="19fb8e" v="-2295"/>
+ <val o="1a09a0" v="-2543"/>
+ <val o="1a17ae" v="-3085"/>
+ <val o="1a25be" v="-3269"/>
+ <val o="1a33cd" v="-2267"/>
+ <val o="1a41dd" v="-2159"/>
+ <val o="1a4fed" v="-1532"/>
+ <val o="1a5e08" v="-1675"/>
+ <val o="1a6c05" v="-960"/>
+ <val o="1a7a15" v="-1122"/>
+ <val o="1a8826" v="-1061"/>
+ <val o="1a9637" v="-505"/>
+ <val o="1aa445" v="-536"/>
+ <val o="1ab255" v="-991"/>
+ <val o="1ac065" v="-1818"/>
+ <val o="1ace75" v="-2574"/>
+ <val o="1adc87" v="-2844"/>
+ <val o="1aea96" v="-2608"/>
+ <val o="1af8a7" v="-2928"/>
+ <val o="1b06b7" v="-2112"/>
+ <val o="1b14c6" v="-2074"/>
+ <val o="1c7460" v="354"/>
+ <val o="1c8270" v="438"/>
+ <val o="1c907e" v="3408"/>
+ <val o="1c9e8f" v="3269"/>
+ <val o="1caca2" v="3655"/>
+ <val o="1cbab1" v="3521"/>
+ <val o="1cc8c1" v="5431"/>
+ <val o="1cd6d0" v="5560"/>
+ <val o="1ce4de" v="5660"/>
+ <val o="1cf2f0" v="5623"/>
+ <val o="1d0109" v="5896"/>
+ <val o="1d0f06" v="6656"/>
+ <val o="1d1d15" v="6647"/>
+ <val o="1d2b25" v="6733"/>
+ <val o="1d3935" v="6914"/>
+ <val o="1d4745" v="6873"/>
+ <val o="1d5555" v="6691"/>
+ <val o="1d6366" v="5814"/>
+ <val o="1d7175" v="5617"/>
+ <val o="1d7f86" v="5608"/>
+ <val o="1d8d95" v="-3230"/>
+ <val o="1d9ba6" v="-3656"/>
+ <val o="1da9b6" v="-3620"/>
+ <val o="1db7c7" v="-3449"/>
+ <val o="1dc5d5" v="-3601"/>
+ <val o="1dd3e6" v="-3735"/>
+ <val o="1de1f5" v="-5996"/>
+ <val o="1df006" v="-6718"/>
+ <val o="1dfe16" v="-6583"/>
+ <val o="1e0c26" v="-6767"/>
+ <val o="1e1a36" v="-6800"/>
+ <val o="1e2847" v="-6525"/>
+ <val o="1e3659" v="-6170"/>
+ <val o="1e4467" v="-5676"/>
+ <val o="1e5281" v="-4911"/>
+ <val o="1e6086" v="-4911"/>
+ <val o="1e6e96" v="-4801"/>
+ <val o="1e7ca6" v="-1982"/>
+ <val o="1e8ab5" v="-1810"/>
+ <val o="1e98c6" v="-1834"/>
+ <val o="1ea6d5" v="-2256"/>
+ <val o="1eb4e6" v="-2325"/>
+ <val o="1ec2f6" v="-2684"/>
+ <val o="1ed106" v="-2675"/>
+ <val o="1edf16" v="-2778"/>
+ <val o="1eed26" v="-2688"/>
+ <val o="1efb36" v="-2650"/>
+ <val o="1f0946" v="-2557"/>
+ <val o="1f1756" v="-2355"/>
+ <val o="1f2566" v="-2318"/>
+ <val o="1f3376" v="-2582"/>
+ <val o="1f4187" v="-2811"/>
+ <val o="1f4f96" v="-3182"/>
+ <val o="1f5da7" v="-3578"/>
+ <val o="1f6bb6" v="-3544"/>
+ <val o="1f79c7" v="-3148"/>
+ <val o="1f87d6" v="-3345"/>
+ <val o="1f95e7" v="-3137"/>
+ <val o="1fa401" v="-2809"/>
+ <val o="1fb204" v="-2501"/>
+ <val o="1fc016" v="-2493"/>
+ <val o="1fce25" v="-2157"/>
+ <val o="1fdc35" v="-2137"/>
+ <val o="1fea45" v="-2155"/>
+ <val o="1ff855" v="-2498"/>
+ <val o="200665" v="-2368"/>
+ <val o="201475" v="-3513"/>
+ <val o="202286" v="-4566"/>
+ <val o="203095" v="-5345"/>
+ <val o="203ea5" v="-6057"/>
+ <val o="204cb6" v="-5799"/>
+ <val o="205ac6" v="-5341"/>
+ <val o="2068d6" v="-5395"/>
+ <val o="2076e6" v="-5979"/>
+ <val o="2084f6" v="-6090"/>
+ <val o="209306" v="-6778"/>
+ <val o="20a116" v="-6378"/>
+ <val o="20af26" v="-5473"/>
+ <val o="20bd37" v="-5382"/>
+ <val o="20cb46" v="-4608"/>
+ <val o="20d957" v="-4316"/>
+ <val o="20e767" v="-4055"/>
+ <val o="20f581" v="-3867"/>
+ <val o="210386" v="-3482"/>
+ <val o="211194" v="-3116"/>
+ <val o="211fa5" v="-3010"/>
+ <val o="212db5" v="-2944"/>
+ <val o="213bc5" v="-2819"/>
+ <val o="2149d6" v="-3644"/>
+ <val o="2157e5" v="-4499"/>
+ <val o="2165f6" v="-5795"/>
+ <val o="217406" v="-6198"/>
+ <val o="218217" v="-6174"/>
+ <val o="219026" v="-6102"/>
+ <val o="219e39" v="-6218"/>
+ <val o="21ac46" v="-5898"/>
+ <val o="21ba57" v="-5986"/>
+ <val o="21c867" v="-5633"/>
+ <val o="21d677" v="-6210"/>
+ <val o="21e487" v="-5783"/>
+ <val o="21f296" v="-5726"/>
+ <val o="2200a6" v="-5539"/>
+ <val o="220eb7" v="-5408"/>
+ <val o="221cc6" v="-4608"/>
+ <val o="222ad7" v="-3876"/>
+ <val o="2238e7" v="-3618"/>
+ <val o="224701" v="-3292"/>
+ <val o="225505" v="-1685"/>
+ <val o="226315" v="-2072"/>
+ <val o="227125" v="-2050"/>
+ <val o="227f35" v="-1670"/>
+ <val o="228d45" v="-1792"/>
+ <val o="229b54" v="-3485"/>
+ <val o="22a965" v="-3911"/>
+ <val o="22b776" v="-4578"/>
+ <val o="22c586" v="-4788"/>
+ <val o="22d397" v="-4459"/>
+ <val o="22e1a6" v="-4693"/>
+ <val o="22efb6" v="-4830"/>
+ <val o="22fdc7" v="-4652"/>
+ <val o="230bd7" v="-4452"/>
+ <val o="2319e6" v="-5394"/>
+ <val o="2327f6" v="-5538"/>
+ <val o="23361b" v="-5866"/>
+ <val o="234416" v="-5225"/>
+ <val o="235226" v="-5162"/>
+ <val o="236037" v="-5250"/>
+ <val o="236e46" v="-4384"/>
+ <val o="237c57" v="-4218"/>
+ <val o="238a66" v="-4016"/>
+ <val o="239881" v="-3222"/>
+ <val o="23a685" v="-3311"/>
+ <val o="23b495" v="-3183"/>
+ <val o="23c2a4" v="-2974"/>
+ <val o="23d0b5" v="-2945"/>
+ <val o="23dec4" v="-2933"/>
+ <val o="23ecd5" v="-3570"/>
+ <val o="23fae4" v="-4545"/>
+ <val o="2408f6" v="-5119"/>
+ <val o="241706" v="-5737"/>
+ <val o="242518" v="-6515"/>
+ <val o="243325" v="-6776"/>
+ <val o="244137" v="-6755"/>
+ <val o="244f46" v="-6361"/>
+ <val o="246b66" v="-6546"/>
+ <val o="247976" v="-6273"/>
+ <val o="248786" v="-5402"/>
+ <val o="24957e" v="-5797"/>
+ <val o="24a38f" v="-5647"/>
+ <val o="24b19c" v="-5747"/>
+ <val o="24bfac" v="-5443"/>
+ <val o="24cdbc" v="-5445"/>
+ <val o="24dbcd" v="-4557"/>
+ <val o="24e9e5" v="-4019"/>
+ <val o="24f808" v="-3484"/>
+ <val o="250616" v="-3616"/>
+ <val o="251426" v="-3559"/>
+ <val o="252236" v="-3408"/>
+ <val o="253047" v="-3609"/>
+ <val o="253e56" v="-4020"/>
+ <val o="254c67" v="-4182"/>
+ <val o="255a76" v="-4997"/>
+ <val o="256887" v="-5810"/>
+ <val o="257697" v="-5595"/>
+ <val o="2584a8" v="-15224"/>
+ <val o="2592b6" v="-8695"/>
+ <val o="25a0c7" v="-4575"/>
+ <val o="25aed7" v="-6313"/>
+ <val o="25bce7" v="-6104"/>
+ <val o="25caf8" v="-5750"/>
+ <val o="25d907" v="-5764"/>
+ <val o="25e718" v="-5649"/>
+ <val o="25f527" v="-5249"/>
+ <val o="260338" v="-5562"/>
+ <val o="261149" v="-4875"/>
+ <val o="261f59" v="-4619"/>
+ <val o="262d68" v="-4611"/>
+ <val o="263b83" v="-3619"/>
+ <val o="264986" v="-3467"/>
+ <val o="265795" v="-3564"/>
+ <val o="2665a6" v="-3672"/>
+ <val o="2673b5" v="-3614"/>
+ <val o="2681c6" v="-3621"/>
+ <val o="268fd5" v="-3868"/>
+ <val o="269de6" v="-3969"/>
+ <val o="26abf6" v="-3886"/>
+ <val o="26ba06" v="-4381"/>
+ <val o="26c817" v="-4271"/>
+ <val o="26d62b" v="-3967"/>
+ <val o="26e436" v="-4002"/>
+ <val o="26f247" v="-3562"/>
+ <val o="270057" v="-3874"/>
+ <val o="270e67" v="-3561"/>
+ <val o="271c77" v="-4690"/>
+ <val o="272a87" v="-5196"/>
+ <val o="273897" v="-5211"/>
+ <val o="2746a8" v="-5037"/>
+ <val o="2754b9" v="-4963"/>
+ <val o="2762c7" v="-4048"/>
+ <val o="2770d8" v="-3708"/>
+ <val o="277ee7" v="-3215"/>
+ </par>
+ <par memind="438200" h="3dc1a8de">
+ <val o="0" v="-1103"/>
+ <val o="e08" v="-1286"/>
+ <val o="1c32" v="-1351"/>
+ <val o="2a3c" v="-1427"/>
+ <val o="3835" v="-1246"/>
+ <val o="4645" v="-1101"/>
+ <val o="5455" v="-909"/>
+ <val o="6265" v="-1472"/>
+ <val o="7075" v="-1523"/>
+ <val o="7e85" v="-1435"/>
+ <val o="8c96" v="-1784"/>
+ <val o="9aa5" v="-1757"/>
+ <val o="a8b6" v="-1682"/>
+ <val o="b6c5" v="-1745"/>
+ <val o="c4d7" v="-6"/>
+ <val o="d30b" v="-6"/>
+ <val o="e0f6" v="-6"/>
+ <val o="ef06" v="0"/>
+ <val o="fd17" v="0"/>
+ <val o="10b27" v="-6"/>
+ <val o="11937" v="-6"/>
+ <val o="12746" v="-6"/>
+ <val o="13556" v="-6"/>
+ <val o="14366" v="-6"/>
+ <val o="15181" v="-7"/>
+ <val o="15f85" v="-6"/>
+ <val o="16d95" v="-6"/>
+ <val o="17ba4" v="-6"/>
+ <val o="189b5" v="-6"/>
+ <val o="197c4" v="-6"/>
+ <val o="1a5d5" v="-6"/>
+ <val o="1b3e6" v="-6"/>
+ <val o="1c1f6" v="-6"/>
+ <val o="1d005" v="-6"/>
+ <val o="1de15" v="-6"/>
+ <val o="1ec25" v="-6"/>
+ <val o="1fa36" v="-6"/>
+ <val o="20845" v="-6"/>
+ <val o="21656" v="-6"/>
+ <val o="22465" v="-6"/>
+ <val o="23276" v="-6"/>
+ <val o="24086" v="0"/>
+ <val o="24e99" v="-6"/>
+ <val o="25ca7" v="-6"/>
+ <val o="26ab7" v="-6"/>
+ <val o="278c6" v="0"/>
+ <val o="286d6" v="-6"/>
+ <val o="294e6" v="-6"/>
+ <val o="2a301" v="-6"/>
+ <val o="2b105" v="0"/>
+ <val o="2bf15" v="0"/>
+ <val o="2cd25" v="-6"/>
+ <val o="2db35" v="0"/>
+ <val o="2e946" v="0"/>
+ <val o="2f755" v="0"/>
+ <val o="30566" v="-6"/>
+ <val o="31375" v="-6"/>
+ <val o="3219e" v="-6"/>
+ <val o="32f96" v="-6"/>
+ <val o="33da6" v="-6"/>
+ <val o="34bb6" v="-6"/>
+ <val o="359de" v="-6"/>
+ <val o="367d6" v="-6"/>
+ <val o="375e6" v="0"/>
+ <val o="3840e" v="0"/>
+ <val o="3921e" v="0"/>
+ <val o="3a016" v="0"/>
+ <val o="3ae27" v="-6"/>
+ <val o="3bc36" v="-6"/>
+ <val o="3ca47" v="0"/>
+ <val o="3d856" v="-6"/>
+ <val o="3e667" v="-6"/>
+ <val o="3f481" v="-6"/>
+ <val o="40285" v="-6"/>
+ <val o="41095" v="-6"/>
+ <val o="41ea5" v="-6"/>
+ <val o="42cb5" v="-6"/>
+ <val o="43ac5" v="-6"/>
+ <val o="448d5" v="0"/>
+ <val o="456e6" v="-6"/>
+ <val o="464f5" v="-6"/>
+ <val o="480ff" v="0"/>
+ <val o="48f0e" v="0"/>
+ <val o="49d1d" v="0"/>
+ <val o="4ab46" v="0"/>
+ <val o="4b955" v="0"/>
+ <val o="4c769" v="0"/>
+ <val o="4d577" v="0"/>
+ <val o="4e387" v="0"/>
+ <val o="4f196" v="0"/>
+ <val o="4ffa6" v="0"/>
+ <val o="50dd0" v="0"/>
+ <val o="51bc6" v="0"/>
+ <val o="529d6" v="0"/>
+ <val o="537e7" v="-6"/>
+ <val o="54600" v="-6"/>
+ <val o="55406" v="-6"/>
+ <val o="56215" v="-6"/>
+ <val o="57026" v="-6"/>
+ <val o="57e36" v="-6"/>
+ <val o="58c46" v="-6"/>
+ <val o="59a70" v="-6"/>
+ <val o="5a867" v="-6"/>
+ <val o="5b676" v="0"/>
+ <val o="5c487" v="0"/>
+ <val o="5d296" v="0"/>
+ <val o="5e0a9" v="-6"/>
+ <val o="5eeb8" v="-6"/>
+ <val o="5fcc6" v="-6"/>
+ <val o="60ad7" v="0"/>
+ <val o="618e7" v="0"/>
+ <val o="626f7" v="0"/>
+ <val o="63507" v="0"/>
+ <val o="64317" v="0"/>
+ <val o="65127" v="-6"/>
+ <val o="65f37" v="-6"/>
+ <val o="66d46" v="-6"/>
+ <val o="67b57" v="-6"/>
+ <val o="68967" v="-6"/>
+ <val o="69782" v="-6"/>
+ <val o="6a586" v="-6"/>
+ <val o="6b395" v="-6"/>
+ <val o="6c1a6" v="-6"/>
+ <val o="6cfb5" v="-6"/>
+ <val o="6ddc6" v="-6"/>
+ <val o="6ebd6" v="0"/>
+ <val o="6f9e6" v="-6"/>
+ <val o="707f6" v="-6"/>
+ <val o="71607" v="0"/>
+ <val o="72417" v="0"/>
+ <val o="73227" v="0"/>
+ <val o="74037" v="-6"/>
+ <val o="74e47" v="-6"/>
+ <val o="75c57" v="0"/>
+ <val o="76a63" v="0"/>
+ <val o="77873" v="0"/>
+ <val o="78680" v="0"/>
+ <val o="7948f" v="0"/>
+ <val o="7a29f" v="0"/>
+ <val o="7b0af" v="-6"/>
+ <val o="7bebf" v="-6"/>
+ <val o="7cccf" v="-6"/>
+ <val o="7dadf" v="-6"/>
+ <val o="7e8fa" v="-6"/>
+ <val o="7f70a" v="-6"/>
+ <val o="8051a" v="-6"/>
+ <val o="8132a" v="-6"/>
+ <val o="8213a" v="-6"/>
+ <val o="82f4a" v="-6"/>
+ <val o="83d5a" v="-6"/>
+ <val o="84b6a" v="0"/>
+ <val o="8597a" v="0"/>
+ <val o="8678b" v="0"/>
+ <val o="8759b" v="0"/>
+ <val o="883ac" v="-6"/>
+ <val o="891bb" v="-6"/>
+ <val o="89fca" v="-6"/>
+ <val o="8adda" v="0"/>
+ <val o="8bbeb" v="0"/>
+ <val o="8c9fc" v="0"/>
+ <val o="8d80b" v="0"/>
+ <val o="8e61a" v="0"/>
+ <val o="8f42a" v="0"/>
+ <val o="9023a" v="0"/>
+ <val o="9104a" v="-6"/>
+ <val o="91e5a" v="0"/>
+ <val o="92c6a" v="-6"/>
+ <val o="93a84" v="-6"/>
+ <val o="94885" v="-6"/>
+ <val o="95694" v="-6"/>
+ <val o="964a5" v="-6"/>
+ <val o="972b4" v="-6"/>
+ <val o="980c5" v="-6"/>
+ <val o="98ed4" v="-6"/>
+ <val o="99ce5" v="0"/>
+ <val o="9aaf5" v="0"/>
+ <val o="9b906" v="-6"/>
+ <val o="9c716" v="-6"/>
+ <val o="9d526" v="-6"/>
+ <val o="9e336" v="-6"/>
+ <val o="9f145" v="-6"/>
+ <val o="9ff56" v="-6"/>
+ <val o="a0d65" v="0"/>
+ <val o="a1b77" v="-1590"/>
+ <val o="a2986" v="-500"/>
+ <val o="a3795" v="1379"/>
+ <val o="a45a7" v="-45"/>
+ <val o="a53b6" v="-346"/>
+ <val o="a61c7" v="-580"/>
+ <val o="a6fd6" v="-752"/>
+ <val o="a7e00" v="-1367"/>
+ <val o="a8c00" v="-1906"/>
+ <val o="a9a05" v="101"/>
+ <val o="aa815" v="-366"/>
+ <val o="ab625" v="-740"/>
+ <val o="ac435" v="-550"/>
+ <val o="ad245" v="432"/>
+ <val o="ae055" v="1595"/>
+ <val o="aee65" v="275"/>
+ <val o="afc75" v="1019"/>
+ <val o="b0a85" v="3444"/>
+ <val o="b26a6" v="3629"/>
+ <val o="b34b6" v="3203"/>
+ <val o="b42c6" v="215"/>
+ <val o="b50d6" v="380"/>
+ <val o="b5ee7" v="890"/>
+ <val o="b6cf6" v="-446"/>
+ <val o="b7b07" v="-200"/>
+ <val o="b8917" v="-44"/>
+ <val o="b9728" v="-424"/>
+ <val o="ba537" v="-718"/>
+ <val o="bb347" v="946"/>
+ <val o="bc157" v="276"/>
+ <val o="bcf67" v="-944"/>
+ <val o="bdd81" v="3129"/>
+ <val o="beb86" v="453"/>
+ <val o="bf995" v="194"/>
+ <val o="c07a6" v="-246"/>
+ <val o="c15b5" v="-122"/>
+ <val o="c23c6" v="430"/>
+ <val o="c31d5" v="1582"/>
+ <val o="c3fe6" v="720"/>
+ <val o="c4df5" v="1333"/>
+ <val o="c5c06" v="588"/>
+ <val o="c6a16" v="642"/>
+ <val o="c7826" v="1096"/>
+ <val o="c8636" v="313"/>
+ <val o="c9446" v="374"/>
+ <val o="ca256" v="204"/>
+ <val o="cb066" v="692"/>
+ <val o="cbe76" v="-196"/>
+ <val o="ccc87" v="1888"/>
+ <val o="cda96" v="2502"/>
+ <val o="ce8a8" v="1840"/>
+ <val o="cf6b7" v="2437"/>
+ <val o="d04c8" v="1930"/>
+ <val o="d12d7" v="1219"/>
+ <val o="d20e7" v="-250"/>
+ <val o="d2f02" v="-1971"/>
+ <val o="d3d05" v="-1029"/>
+ <val o="d4b15" v="-1072"/>
+ <val o="d5926" v="-388"/>
+ <val o="d6735" v="229"/>
+ <val o="d7546" v="1131"/>
+ <val o="d8355" v="-726"/>
+ <val o="d9166" v="166"/>
+ <val o="d9f75" v="965"/>
+ <val o="dad87" v="2341"/>
+ <val o="dbb97" v="2354"/>
+ <val o="dc9a8" v="2565"/>
+ <val o="dd7b7" v="1136"/>
+ <val o="de5c6" v="367"/>
+ <val o="df3d7" v="173"/>
+ <val o="e01d7" v="156"/>
+ <val o="e0fe5" v="460"/>
+ <val o="e1df5" v="358"/>
+ <val o="e2c04" v="-308"/>
+ <val o="e3a14" v="-1006"/>
+ <val o="e4824" v="93"/>
+ <val o="e5634" v="-723"/>
+ <val o="e6444" v="147"/>
+ <val o="e7255" v="-551"/>
+ <val o="e806f" v="-626"/>
+ <val o="e8e7f" v="2316"/>
+ <val o="e9c8e" v="714"/>
+ <val o="eaa9f" v="600"/>
+ <val o="eb8ae" v="953"/>
+ <val o="ec6bf" v="2267"/>
+ <val o="ed4ce" v="-403"/>
+ <val o="ee2df" v="999"/>
+ <val o="ef0ef" v="475"/>
+ <val o="eff01" v="1663"/>
+ <val o="f0d10" v="829"/>
+ <val o="f1b20" v="1055"/>
+ <val o="f2930" v="-314"/>
+ <val o="f3740" v="1431"/>
+ <val o="f4551" v="1201"/>
+ <val o="f5361" v="1280"/>
+ <val o="f6172" v="1431"/>
+ <val o="f6f80" v="1145"/>
+ <val o="f7d91" v="1635"/>
+ <val o="f8ba1" v="957"/>
+ <val o="f99b1" v="1019"/>
+ <val o="fa7c0" v="1219"/>
+ <val o="fb5d1" v="1143"/>
+ <val o="fc3e0" v="-893"/>
+ <val o="fd1fb" v="-1019"/>
+ <val o="fe00b" v="-1389"/>
+ <val o="fee1c" v="-182"/>
+ <val o="ffc2c" v="-220"/>
+ <val o="100a3b" v="502"/>
+ <val o="10184c" v="940"/>
+ <val o="10265b" v="1719"/>
+ <val o="10346c" v="1592"/>
+ <val o="10427b" v="960"/>
+ <val o="10508d" v="1537"/>
+ <val o="105e9d" v="1177"/>
+ <val o="106cad" v="1337"/>
+ <val o="107abd" v="737"/>
+ <val o="1088cd" v="723"/>
+ <val o="1096de" v="917"/>
+ <val o="10a4ed" v="794"/>
+ <val o="10b2fe" v="1075"/>
+ <val o="10c10d" v="2328"/>
+ <val o="10cf1e" v="1192"/>
+ <val o="10dd2e" v="867"/>
+ <val o="10eb66" v="184"/>
+ <val o="10f94e" v="12"/>
+ <val o="11075e" v="978"/>
+ <val o="11156d" v="256"/>
+ <val o="112388" v="-1007"/>
+ <val o="113187" v="614"/>
+ <val o="113fb0" v="205"/>
+ <val o="114da6" v="195"/>
+ <val o="115bb6" v="316"/>
+ <val o="1169c6" v="1241"/>
+ <val o="1177d6" v="1748"/>
+ <val o="1185e8" v="1046"/>
+ <val o="1193f7" v="1099"/>
+ <val o="11a208" v="309"/>
+ <val o="11b017" v="-202"/>
+ <val o="11be2f" v="-722"/>
+ <val o="11cc37" v="680"/>
+ <val o="11da47" v="440"/>
+ <val o="11e857" v="870"/>
+ <val o="11f667" v="475"/>
+ <val o="120578" v="1"/>
+ <val o="121386" v="1"/>
+ <val o="122196" v="2"/>
+ <val o="122fa6" v="1"/>
+ <val o="123db5" v="0"/>
+ <val o="124bc5" v="0"/>
+ <val o="1259d5" v="1"/>
+ <val o="1267e4" v="0"/>
+ <val o="127600" v="-1"/>
+ <val o="128305" v="-1"/>
+ <val o="129115" v="-1"/>
+ <val o="129f25" v="-1"/>
+ <val o="12ad35" v="-1"/>
+ <val o="12bb45" v="0"/>
+ <val o="12c954" v="1"/>
+ <val o="12d766" v="1"/>
+ <val o="12e575" v="1"/>
+ <val o="12f386" v="1"/>
+ <val o="130196" v="1"/>
+ <val o="130fa6" v="1"/>
+ <val o="131db7" v="1"/>
+ <val o="132bc5" v="1"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="1959"/>
+ <val o="1774a3" v="1506"/>
+ <val o="1782b3" v="1027"/>
+ <val o="1790c5" v="677"/>
+ <val o="179ed4" v="-759"/>
+ <val o="17ace4" v="-2042"/>
+ <val o="17bafd" v="-2554"/>
+ <val o="17c90f" v="-2178"/>
+ <val o="17d71e" v="-2126"/>
+ <val o="17e52f" v="-2484"/>
+ <val o="17f33f" v="-1980"/>
+ <val o="18014f" v="-1072"/>
+ <val o="180f5f" v="-524"/>
+ <val o="181d6e" v="-1366"/>
+ <val o="182b7f" v="-1753"/>
+ <val o="18398f" v="-893"/>
+ <val o="1847a1" v="-845"/>
+ <val o="1855af" v="-1148"/>
+ <val o="1863c0" v="-2710"/>
+ <val o="1871cf" v="-2297"/>
+ <val o="187fe0" v="-2208"/>
+ <val o="188def" v="-2037"/>
+ <val o="189c00" v="-997"/>
+ <val o="18b80d" v="1048"/>
+ <val o="18c61c" v="-955"/>
+ <val o="18d42c" v="-1334"/>
+ <val o="18e23b" v="-1121"/>
+ <val o="18f04b" v="-1625"/>
+ <val o="18fe5e" v="-1419"/>
+ <val o="190c76" v="-671"/>
+ <val o="191a86" v="-1501"/>
+ <val o="192896" v="-1511"/>
+ <val o="1936a6" v="-1618"/>
+ <val o="1944b7" v="-1037"/>
+ <val o="1952c6" v="-192"/>
+ <val o="1960d7" v="1397"/>
+ <val o="196ee6" v="-627"/>
+ <val o="197cf8" v="-711"/>
+ <val o="198b0f" v="20"/>
+ <val o="19991f" v="-130"/>
+ <val o="19b541" v="-843"/>
+ <val o="19c34d" v="-642"/>
+ <val o="19d15e" v="-320"/>
+ <val o="19df80" v="-210"/>
+ <val o="19ed90" v="295"/>
+ <val o="19eebe" v="417"/>
+ <val o="19fb8e" v="37"/>
+ <val o="1a09a0" v="-2105"/>
+ <val o="1a17ae" v="-2980"/>
+ <val o="1a25be" v="-3329"/>
+ <val o="1a33cd" v="-1430"/>
+ <val o="1a41dd" v="-1986"/>
+ <val o="1a4fed" v="-3570"/>
+ <val o="1a5e08" v="-3230"/>
+ <val o="1a6c05" v="-2288"/>
+ <val o="1a7a15" v="-2846"/>
+ <val o="1a8826" v="-2946"/>
+ <val o="1a9637" v="-2342"/>
+ <val o="1aa445" v="-1719"/>
+ <val o="1ab255" v="-668"/>
+ <val o="1ac065" v="-1761"/>
+ <val o="1ace75" v="-2413"/>
+ <val o="1adc87" v="-1727"/>
+ <val o="1aea96" v="-1832"/>
+ <val o="1af8a7" v="-1889"/>
+ <val o="1b06b7" v="-2346"/>
+ <val o="1b14c6" v="-2176"/>
+ <val o="1c7460" v="374"/>
+ <val o="1c8270" v="-132"/>
+ <val o="1c907e" v="993"/>
+ <val o="1c9e8f" v="-150"/>
+ <val o="1caca2" v="-843"/>
+ <val o="1cbab1" v="-1196"/>
+ <val o="1cc8c1" v="2577"/>
+ <val o="1cd6d0" v="1582"/>
+ <val o="1ce4de" v="909"/>
+ <val o="1cf2f0" v="-1405"/>
+ <val o="1d0109" v="-1597"/>
+ <val o="1d0f06" v="-186"/>
+ <val o="1d1d15" v="-658"/>
+ <val o="1d2b25" v="-679"/>
+ <val o="1d3935" v="89"/>
+ <val o="1d4745" v="680"/>
+ <val o="1d5555" v="1095"/>
+ <val o="1d6366" v="-832"/>
+ <val o="1d7175" v="-785"/>
+ <val o="1d7f86" v="-228"/>
+ <val o="1d8d95" v="-40"/>
+ <val o="1d9ba6" v="-280"/>
+ <val o="1da9b6" v="-697"/>
+ <val o="1db7c7" v="-697"/>
+ <val o="1dc5d5" v="-811"/>
+ <val o="1dd3e6" v="-629"/>
+ <val o="1de1f5" v="-1408"/>
+ <val o="1df006" v="-1666"/>
+ <val o="1dfe16" v="-1574"/>
+ <val o="1e0c26" v="-1928"/>
+ <val o="1e1a36" v="-1970"/>
+ <val o="1e2847" v="-2017"/>
+ <val o="1e3659" v="-1984"/>
+ <val o="1e4467" v="-2007"/>
+ <val o="1e5281" v="-1611"/>
+ <val o="1e6086" v="-1851"/>
+ <val o="1e6e96" v="-1908"/>
+ <val o="1e7ca6" v="-251"/>
+ <val o="1e8ab5" v="-386"/>
+ <val o="1e98c6" v="-121"/>
+ <val o="1ea6d5" v="-365"/>
+ <val o="1eb4e6" v="-313"/>
+ <val o="1ec2f6" v="-506"/>
+ <val o="1ed106" v="-232"/>
+ <val o="1edf16" v="-288"/>
+ <val o="1eed26" v="-121"/>
+ <val o="1efb36" v="-310"/>
+ <val o="1f0946" v="-245"/>
+ <val o="1f1756" v="439"/>
+ <val o="1f2566" v="609"/>
+ <val o="1f3376" v="1078"/>
+ <val o="1f4187" v="2491"/>
+ <val o="1f4f96" v="1327"/>
+ <val o="1f5da7" v="-115"/>
+ <val o="1f6bb6" v="-442"/>
+ <val o="1f79c7" v="203"/>
+ <val o="1f87d6" v="-1439"/>
+ <val o="1f95e7" v="-2019"/>
+ <val o="1fa401" v="-1491"/>
+ <val o="1fb204" v="-1285"/>
+ <val o="1fc016" v="-1309"/>
+ <val o="1fce25" v="-409"/>
+ <val o="1fdc35" v="-162"/>
+ <val o="1fea45" v="90"/>
+ <val o="1ff855" v="319"/>
+ <val o="200665" v="2483"/>
+ <val o="201475" v="357"/>
+ <val o="202286" v="1681"/>
+ <val o="203095" v="1572"/>
+ <val o="203ea5" v="1575"/>
+ <val o="204cb6" v="302"/>
+ <val o="205ac6" v="1076"/>
+ <val o="2068d6" v="1555"/>
+ <val o="2076e6" v="1971"/>
+ <val o="2084f6" v="239"/>
+ <val o="209306" v="-351"/>
+ <val o="20a116" v="-527"/>
+ <val o="20af26" v="-215"/>
+ <val o="20bd37" v="-782"/>
+ <val o="20cb46" v="452"/>
+ <val o="20d957" v="60"/>
+ <val o="20e767" v="-848"/>
+ <val o="20f581" v="-1383"/>
+ <val o="210386" v="-989"/>
+ <val o="211194" v="-325"/>
+ <val o="211fa5" v="-382"/>
+ <val o="212db5" v="60"/>
+ <val o="213bc5" v="884"/>
+ <val o="2149d6" v="659"/>
+ <val o="2157e5" v="-264"/>
+ <val o="2165f6" v="-990"/>
+ <val o="217406" v="289"/>
+ <val o="218217" v="-292"/>
+ <val o="219026" v="-542"/>
+ <val o="219e39" v="366"/>
+ <val o="21ac46" v="909"/>
+ <val o="21ba57" v="992"/>
+ <val o="21c867" v="1808"/>
+ <val o="21d677" v="-1049"/>
+ <val o="21e487" v="543"/>
+ <val o="21f296" v="377"/>
+ <val o="2200a6" v="-619"/>
+ <val o="220eb7" v="-712"/>
+ <val o="221cc6" v="1459"/>
+ <val o="222ad7" v="257"/>
+ <val o="2238e7" v="-696"/>
+ <val o="224701" v="-1085"/>
+ <val o="225505" v="2873"/>
+ <val o="226315" v="421"/>
+ <val o="227125" v="557"/>
+ <val o="227f35" v="1696"/>
+ <val o="228d45" v="2480"/>
+ <val o="229b54" v="-707"/>
+ <val o="22a965" v="-237"/>
+ <val o="22b776" v="0"/>
+ <val o="22c586" v="1730"/>
+ <val o="22d397" v="2990"/>
+ <val o="22e1a6" v="2746"/>
+ <val o="22efb6" v="-174"/>
+ <val o="22fdc7" v="-194"/>
+ <val o="230bd7" v="485"/>
+ <val o="2319e6" v="-729"/>
+ <val o="2327f6" v="70"/>
+ <val o="23361b" v="907"/>
+ <val o="234416" v="1297"/>
+ <val o="235226" v="776"/>
+ <val o="236037" v="123"/>
+ <val o="236e46" v="1557"/>
+ <val o="237c57" v="1208"/>
+ <val o="238a66" v="253"/>
+ <val o="239881" v="508"/>
+ <val o="23a685" v="-274"/>
+ <val o="23b495" v="-571"/>
+ <val o="23c2a4" v="146"/>
+ <val o="23d0b5" v="567"/>
+ <val o="23dec4" v="1222"/>
+ <val o="23ecd5" v="733"/>
+ <val o="23fae4" v="8"/>
+ <val o="2408f6" v="1041"/>
+ <val o="241706" v="3222"/>
+ <val o="242518" v="2576"/>
+ <val o="243325" v="2422"/>
+ <val o="244137" v="-1036"/>
+ <val o="244f46" v="-746"/>
+ <val o="246b66" v="-661"/>
+ <val o="247976" v="45"/>
+ <val o="248786" v="3983"/>
+ <val o="24957e" v="1694"/>
+ <val o="24a38f" v="709"/>
+ <val o="24b19c" v="-844"/>
+ <val o="24bfac" v="-605"/>
+ <val o="24cdbc" v="-661"/>
+ <val o="24dbcd" v="-436"/>
+ <val o="24e9e5" v="-1155"/>
+ <val o="24f808" v="-716"/>
+ <val o="250616" v="-877"/>
+ <val o="251426" v="-1024"/>
+ <val o="252236" v="-7"/>
+ <val o="253047" v="0"/>
+ <val o="253e56" v="1185"/>
+ <val o="254c67" v="884"/>
+ <val o="255a76" v="1103"/>
+ <val o="256887" v="1789"/>
+ <val o="257697" v="3132"/>
+ <val o="2584a8" v="-4032"/>
+ <val o="2592b6" v="-2114"/>
+ <val o="25a0c7" v="-498"/>
+ <val o="25aed7" v="174"/>
+ <val o="25bce7" v="210"/>
+ <val o="25caf8" v="710"/>
+ <val o="25d907" v="2127"/>
+ <val o="25e718" v="2386"/>
+ <val o="25f527" v="1916"/>
+ <val o="260338" v="53"/>
+ <val o="261149" v="1070"/>
+ <val o="261f59" v="564"/>
+ <val o="262d68" v="-1181"/>
+ <val o="263b83" v="34"/>
+ <val o="264986" v="-847"/>
+ <val o="265795" v="-1318"/>
+ <val o="2665a6" v="-1842"/>
+ <val o="2673b5" v="-1404"/>
+ <val o="2681c6" v="-1129"/>
+ <val o="268fd5" v="-372"/>
+ <val o="269de6" v="269"/>
+ <val o="26abf6" v="572"/>
+ <val o="26ba06" v="1413"/>
+ <val o="26c817" v="1586"/>
+ <val o="26d62b" v="3161"/>
+ <val o="26e436" v="2347"/>
+ <val o="26f247" v="2627"/>
+ <val o="270057" v="2502"/>
+ <val o="270e67" v="2818"/>
+ <val o="271c77" v="158"/>
+ <val o="272a87" v="-545"/>
+ <val o="273897" v="-370"/>
+ <val o="2746a8" v="-624"/>
+ <val o="2754b9" v="-847"/>
+ <val o="2762c7" v="2315"/>
+ <val o="2770d8" v="1099"/>
+ <val o="277ee7" v="-417"/>
+ </par>
+ <par memind="422200" h="3dc1a8de">
+ <val o="0" v="-4307"/>
+ <val o="e08" v="-4169"/>
+ <val o="1c32" v="-4096"/>
+ <val o="2a3c" v="-4087"/>
+ <val o="3835" v="-3963"/>
+ <val o="4645" v="-3969"/>
+ <val o="5455" v="-4411"/>
+ <val o="6265" v="-5358"/>
+ <val o="7075" v="-6317"/>
+ <val o="7e85" v="-7298"/>
+ <val o="8c96" v="-7519"/>
+ <val o="9aa5" v="-7351"/>
+ <val o="a8b6" v="-6890"/>
+ <val o="b6c5" v="-6465"/>
+ <val o="c4d7" v="-7"/>
+ <val o="d30b" v="-7"/>
+ <val o="e0f6" v="-7"/>
+ <val o="ef06" v="-7"/>
+ <val o="fd17" v="-7"/>
+ <val o="10b27" v="-8"/>
+ <val o="11937" v="-8"/>
+ <val o="12746" v="-8"/>
+ <val o="13556" v="-8"/>
+ <val o="14366" v="-8"/>
+ <val o="15181" v="-9"/>
+ <val o="15f85" v="-8"/>
+ <val o="16d95" v="-8"/>
+ <val o="17ba4" v="-8"/>
+ <val o="189b5" v="-8"/>
+ <val o="197c4" v="-8"/>
+ <val o="1a5d5" v="-9"/>
+ <val o="1b3e6" v="-9"/>
+ <val o="1c1f6" v="-8"/>
+ <val o="1d005" v="-8"/>
+ <val o="1de15" v="-8"/>
+ <val o="1ec25" v="-8"/>
+ <val o="1fa36" v="-8"/>
+ <val o="20845" v="-9"/>
+ <val o="21656" v="-8"/>
+ <val o="22465" v="-8"/>
+ <val o="23276" v="-8"/>
+ <val o="24086" v="-7"/>
+ <val o="24e99" v="-7"/>
+ <val o="25ca7" v="-8"/>
+ <val o="26ab7" v="-8"/>
+ <val o="278c6" v="-8"/>
+ <val o="286d6" v="-8"/>
+ <val o="294e6" v="-9"/>
+ <val o="2a301" v="-9"/>
+ <val o="2b105" v="-8"/>
+ <val o="2bf15" v="-8"/>
+ <val o="2cd25" v="-8"/>
+ <val o="2db35" v="-8"/>
+ <val o="2e946" v="-8"/>
+ <val o="2f755" v="-7"/>
+ <val o="30566" v="-9"/>
+ <val o="31375" v="-8"/>
+ <val o="3219e" v="-8"/>
+ <val o="32f96" v="-8"/>
+ <val o="33da6" v="-8"/>
+ <val o="34bb6" v="-8"/>
+ <val o="359de" v="-8"/>
+ <val o="367d6" v="-8"/>
+ <val o="375e6" v="-8"/>
+ <val o="3840e" v="-7"/>
+ <val o="3921e" v="-7"/>
+ <val o="3a016" v="-7"/>
+ <val o="3ae27" v="-8"/>
+ <val o="3bc36" v="-8"/>
+ <val o="3ca47" v="-7"/>
+ <val o="3d856" v="-8"/>
+ <val o="3e667" v="-8"/>
+ <val o="3f481" v="-9"/>
+ <val o="40285" v="-9"/>
+ <val o="41095" v="-9"/>
+ <val o="41ea5" v="-9"/>
+ <val o="42cb5" v="-9"/>
+ <val o="43ac5" v="-8"/>
+ <val o="448d5" v="-8"/>
+ <val o="456e6" v="-8"/>
+ <val o="464f5" v="-7"/>
+ <val o="480ff" v="-7"/>
+ <val o="48f0e" v="-6"/>
+ <val o="49d1d" v="-6"/>
+ <val o="4ab46" v="-7"/>
+ <val o="4b955" v="-7"/>
+ <val o="4c769" v="-6"/>
+ <val o="4d577" v="-7"/>
+ <val o="4e387" v="-7"/>
+ <val o="4f196" v="-7"/>
+ <val o="4ffa6" v="-7"/>
+ <val o="50dd0" v="-7"/>
+ <val o="51bc6" v="-7"/>
+ <val o="529d6" v="-8"/>
+ <val o="537e7" v="-8"/>
+ <val o="54600" v="-9"/>
+ <val o="55406" v="-8"/>
+ <val o="56215" v="-8"/>
+ <val o="57026" v="-8"/>
+ <val o="57e36" v="-8"/>
+ <val o="58c46" v="-8"/>
+ <val o="59a70" v="-8"/>
+ <val o="5a867" v="-7"/>
+ <val o="5b676" v="-7"/>
+ <val o="5c487" v="-6"/>
+ <val o="5d296" v="-7"/>
+ <val o="5e0a9" v="-7"/>
+ <val o="5eeb8" v="-7"/>
+ <val o="5fcc6" v="-7"/>
+ <val o="60ad7" v="-7"/>
+ <val o="618e7" v="-7"/>
+ <val o="626f7" v="-7"/>
+ <val o="63507" v="-7"/>
+ <val o="64317" v="-7"/>
+ <val o="65127" v="-7"/>
+ <val o="65f37" v="-8"/>
+ <val o="66d46" v="-8"/>
+ <val o="67b57" v="-8"/>
+ <val o="68967" v="-8"/>
+ <val o="69782" v="-8"/>
+ <val o="6a586" v="-8"/>
+ <val o="6b395" v="-8"/>
+ <val o="6c1a6" v="-9"/>
+ <val o="6cfb5" v="-8"/>
+ <val o="6ddc6" v="-8"/>
+ <val o="6ebd6" v="-7"/>
+ <val o="6f9e6" v="-8"/>
+ <val o="707f6" v="-7"/>
+ <val o="71607" v="-7"/>
+ <val o="72417" v="-6"/>
+ <val o="73227" v="-6"/>
+ <val o="74037" v="-7"/>
+ <val o="74e47" v="-7"/>
+ <val o="75c57" v="-7"/>
+ <val o="76a63" v="-7"/>
+ <val o="77873" v="-7"/>
+ <val o="78680" v="-6"/>
+ <val o="7948f" v="-7"/>
+ <val o="7a29f" v="-7"/>
+ <val o="7b0af" v="-7"/>
+ <val o="7bebf" v="-8"/>
+ <val o="7cccf" v="-8"/>
+ <val o="7dadf" v="-8"/>
+ <val o="7e8fa" v="-8"/>
+ <val o="7f70a" v="-9"/>
+ <val o="8051a" v="-9"/>
+ <val o="8132a" v="-9"/>
+ <val o="8213a" v="-9"/>
+ <val o="82f4a" v="-9"/>
+ <val o="83d5a" v="-8"/>
+ <val o="84b6a" v="-7"/>
+ <val o="8597a" v="-7"/>
+ <val o="8678b" v="-7"/>
+ <val o="8759b" v="-7"/>
+ <val o="883ac" v="-7"/>
+ <val o="891bb" v="-8"/>
+ <val o="89fca" v="-7"/>
+ <val o="8adda" v="-7"/>
+ <val o="8bbeb" v="-7"/>
+ <val o="8c9fc" v="-7"/>
+ <val o="8d80b" v="-7"/>
+ <val o="8e61a" v="-7"/>
+ <val o="8f42a" v="-7"/>
+ <val o="9023a" v="-7"/>
+ <val o="9104a" v="-8"/>
+ <val o="91e5a" v="-7"/>
+ <val o="92c6a" v="-8"/>
+ <val o="93a84" v="-9"/>
+ <val o="94885" v="-8"/>
+ <val o="95694" v="-9"/>
+ <val o="964a5" v="-9"/>
+ <val o="972b4" v="-8"/>
+ <val o="980c5" v="-8"/>
+ <val o="98ed4" v="-8"/>
+ <val o="99ce5" v="-8"/>
+ <val o="9aaf5" v="-7"/>
+ <val o="9b906" v="-7"/>
+ <val o="9c716" v="-7"/>
+ <val o="9d526" v="-7"/>
+ <val o="9e336" v="-7"/>
+ <val o="9f145" v="-7"/>
+ <val o="9ff56" v="-7"/>
+ <val o="a0d65" v="-7"/>
+ <val o="a1b77" v="-6324"/>
+ <val o="a2986" v="-3516"/>
+ <val o="a3795" v="-963"/>
+ <val o="a45a7" v="644"/>
+ <val o="a53b6" v="700"/>
+ <val o="a61c7" v="942"/>
+ <val o="a6fd6" v="99"/>
+ <val o="a7e00" v="464"/>
+ <val o="a8c00" v="912"/>
+ <val o="a9a05" v="289"/>
+ <val o="aa815" v="32"/>
+ <val o="ab625" v="46"/>
+ <val o="ac435" v="200"/>
+ <val o="ad245" v="921"/>
+ <val o="ae055" v="744"/>
+ <val o="aee65" v="-561"/>
+ <val o="afc75" v="-68"/>
+ <val o="b0a85" v="31"/>
+ <val o="b26a6" v="142"/>
+ <val o="b34b6" v="-123"/>
+ <val o="b42c6" v="-451"/>
+ <val o="b50d6" v="-729"/>
+ <val o="b5ee7" v="-712"/>
+ <val o="b6cf6" v="-1584"/>
+ <val o="b7b07" v="-1983"/>
+ <val o="b8917" v="-1753"/>
+ <val o="b9728" v="-1758"/>
+ <val o="ba537" v="-1891"/>
+ <val o="bb347" v="-827"/>
+ <val o="bc157" v="-882"/>
+ <val o="bcf67" v="-899"/>
+ <val o="bdd81" v="644"/>
+ <val o="beb86" v="417"/>
+ <val o="bf995" v="524"/>
+ <val o="c07a6" v="400"/>
+ <val o="c15b5" v="372"/>
+ <val o="c23c6" v="484"/>
+ <val o="c31d5" v="591"/>
+ <val o="c3fe6" v="336"/>
+ <val o="c4df5" v="741"/>
+ <val o="c5c06" v="114"/>
+ <val o="c6a16" v="507"/>
+ <val o="c7826" v="-51"/>
+ <val o="c8636" v="136"/>
+ <val o="c9446" v="334"/>
+ <val o="ca256" v="235"/>
+ <val o="cb066" v="116"/>
+ <val o="cbe76" v="-417"/>
+ <val o="ccc87" v="-232"/>
+ <val o="cda96" v="-184"/>
+ <val o="ce8a8" v="-219"/>
+ <val o="cf6b7" v="-134"/>
+ <val o="d04c8" v="-51"/>
+ <val o="d12d7" v="143"/>
+ <val o="d20e7" v="0"/>
+ <val o="d2f02" v="11"/>
+ <val o="d3d05" v="600"/>
+ <val o="d4b15" v="644"/>
+ <val o="d5926" v="836"/>
+ <val o="d6735" v="1068"/>
+ <val o="d7546" v="1213"/>
+ <val o="d8355" v="-135"/>
+ <val o="d9166" v="-755"/>
+ <val o="d9f75" v="-1498"/>
+ <val o="dad87" v="-2011"/>
+ <val o="dbb97" v="-2561"/>
+ <val o="dc9a8" v="-2338"/>
+ <val o="dd7b7" v="-2895"/>
+ <val o="de5c6" v="-2780"/>
+ <val o="df3d7" v="-2912"/>
+ <val o="e01d7" v="-2913"/>
+ <val o="e0fe5" v="-2832"/>
+ <val o="e1df5" v="-3018"/>
+ <val o="e2c04" v="-4099"/>
+ <val o="e3a14" v="-3979"/>
+ <val o="e4824" v="-3370"/>
+ <val o="e5634" v="-3428"/>
+ <val o="e6444" v="-2551"/>
+ <val o="e7255" v="-2189"/>
+ <val o="e806f" v="-1757"/>
+ <val o="e8e7f" v="-477"/>
+ <val o="e9c8e" v="-709"/>
+ <val o="eaa9f" v="-653"/>
+ <val o="eb8ae" v="-653"/>
+ <val o="ec6bf" v="-468"/>
+ <val o="ed4ce" v="-2112"/>
+ <val o="ee2df" v="-2239"/>
+ <val o="ef0ef" v="-3198"/>
+ <val o="eff01" v="-4087"/>
+ <val o="f0d10" v="-4308"/>
+ <val o="f1b20" v="-4550"/>
+ <val o="f2930" v="-4628"/>
+ <val o="f3740" v="-4301"/>
+ <val o="f4551" v="-4608"/>
+ <val o="f5361" v="-4857"/>
+ <val o="f6172" v="-4613"/>
+ <val o="f6f80" v="-4818"/>
+ <val o="f7d91" v="-4244"/>
+ <val o="f8ba1" v="-3915"/>
+ <val o="f99b1" v="-3805"/>
+ <val o="fa7c0" v="-3025"/>
+ <val o="fb5d1" v="-3034"/>
+ <val o="fc3e0" v="-3295"/>
+ <val o="fd1fb" v="-2680"/>
+ <val o="fe00b" v="-2530"/>
+ <val o="fee1c" v="-2083"/>
+ <val o="ffc2c" v="-1982"/>
+ <val o="100a3b" v="-1790"/>
+ <val o="10184c" v="-1791"/>
+ <val o="10265b" v="-2077"/>
+ <val o="10346c" v="-2724"/>
+ <val o="10427b" v="-4016"/>
+ <val o="10508d" v="-4320"/>
+ <val o="105e9d" v="-4339"/>
+ <val o="106cad" v="-4725"/>
+ <val o="107abd" v="-4338"/>
+ <val o="1088cd" v="-3906"/>
+ <val o="1096de" v="-4119"/>
+ <val o="10a4ed" v="-4322"/>
+ <val o="10b2fe" v="-4345"/>
+ <val o="10c10d" v="-4169"/>
+ <val o="10cf1e" v="-4354"/>
+ <val o="10dd2e" v="-4160"/>
+ <val o="10eb66" v="-4453"/>
+ <val o="10f94e" v="-3895"/>
+ <val o="11075e" v="-3281"/>
+ <val o="11156d" v="-2866"/>
+ <val o="112388" v="-2663"/>
+ <val o="113187" v="-1794"/>
+ <val o="113fb0" v="-1797"/>
+ <val o="114da6" v="-1823"/>
+ <val o="115bb6" v="-1782"/>
+ <val o="1169c6" v="-1585"/>
+ <val o="1177d6" v="-2082"/>
+ <val o="1185e8" v="-2885"/>
+ <val o="1193f7" v="-3558"/>
+ <val o="11a208" v="-4838"/>
+ <val o="11b017" v="-4322"/>
+ <val o="11be2f" v="-5393"/>
+ <val o="11cc37" v="-4456"/>
+ <val o="11da47" v="-4279"/>
+ <val o="11e857" v="-4354"/>
+ <val o="11f667" v="-3900"/>
+ <val o="120578" v="-4"/>
+ <val o="121386" v="-4"/>
+ <val o="122196" v="-4"/>
+ <val o="122fa6" v="-3"/>
+ <val o="123db5" v="-3"/>
+ <val o="124bc5" v="-3"/>
+ <val o="1259d5" v="-2"/>
+ <val o="1267e4" v="-2"/>
+ <val o="127600" v="-2"/>
+ <val o="128305" v="-2"/>
+ <val o="129115" v="-2"/>
+ <val o="129f25" v="-2"/>
+ <val o="12ad35" v="-2"/>
+ <val o="12bb45" v="-1"/>
+ <val o="12c954" v="-2"/>
+ <val o="12d766" v="-2"/>
+ <val o="12e575" v="-3"/>
+ <val o="12f386" v="-2"/>
+ <val o="130196" v="-4"/>
+ <val o="130fa6" v="-3"/>
+ <val o="131db7" v="-3"/>
+ <val o="132bc5" v="-3"/>
+ <val o="1339d4" v="0"/>
+ <val o="1347e5" v="0"/>
+ <val o="1355f4" v="0"/>
+ <val o="136404" v="0"/>
+ <val o="137214" v="0"/>
+ <val o="138024" v="0"/>
+ <val o="138e33" v="0"/>
+ <val o="139c44" v="0"/>
+ <val o="13aa54" v="0"/>
+ <val o="13b865" v="0"/>
+ <val o="13c67e" v="0"/>
+ <val o="13d48e" v="0"/>
+ <val o="13e29e" v="0"/>
+ <val o="13f0ae" v="0"/>
+ <val o="13febf" v="0"/>
+ <val o="140ccf" v="0"/>
+ <val o="141adf" v="0"/>
+ <val o="1428ef" v="0"/>
+ <val o="1436ff" v="0"/>
+ <val o="14450f" v="0"/>
+ <val o="14531f" v="0"/>
+ <val o="146130" v="0"/>
+ <val o="146f40" v="0"/>
+ <val o="147d44" v="0"/>
+ <val o="148b57" v="0"/>
+ <val o="149965" v="0"/>
+ <val o="14a775" v="0"/>
+ <val o="14b584" v="0"/>
+ <val o="14c397" v="0"/>
+ <val o="14d1a4" v="0"/>
+ <val o="14dfb6" v="0"/>
+ <val o="14edc5" v="0"/>
+ <val o="14fbd5" v="0"/>
+ <val o="1509e5" v="0"/>
+ <val o="1517ff" v="0"/>
+ <val o="152605" v="0"/>
+ <val o="153415" v="0"/>
+ <val o="154225" v="0"/>
+ <val o="155035" v="0"/>
+ <val o="155e45" v="0"/>
+ <val o="156c55" v="0"/>
+ <val o="157a65" v="0"/>
+ <val o="158875" v="0"/>
+ <val o="159686" v="0"/>
+ <val o="15a495" v="0"/>
+ <val o="15b2a6" v="0"/>
+ <val o="15c0b6" v="0"/>
+ <val o="15cec6" v="0"/>
+ <val o="15dcd5" v="0"/>
+ <val o="15eae6" v="0"/>
+ <val o="15f8f5" v="0"/>
+ <val o="160706" v="0"/>
+ <val o="161517" v="0"/>
+ <val o="162326" v="0"/>
+ <val o="163137" v="0"/>
+ <val o="163f46" v="0"/>
+ <val o="164d57" v="0"/>
+ <val o="165b67" v="0"/>
+ <val o="166982" v="0"/>
+ <val o="167786" v="0"/>
+ <val o="168596" v="0"/>
+ <val o="1693a6" v="0"/>
+ <val o="16a1b5" v="0"/>
+ <val o="16afc6" v="0"/>
+ <val o="16bdd5" v="0"/>
+ <val o="16cbe6" v="0"/>
+ <val o="16d9f6" v="0"/>
+ <val o="16e807" v="0"/>
+ <val o="16f616" v="0"/>
+ <val o="170429" v="0"/>
+ <val o="171236" v="0"/>
+ <val o="172047" v="0"/>
+ <val o="172e57" v="0"/>
+ <val o="173c67" v="0"/>
+ <val o="174a77" v="0"/>
+ <val o="175887" v="0"/>
+ <val o="176694" v="-6844"/>
+ <val o="1774a3" v="-6848"/>
+ <val o="1782b3" v="-7276"/>
+ <val o="1790c5" v="-6718"/>
+ <val o="179ed4" v="-6044"/>
+ <val o="17ace4" v="-5879"/>
+ <val o="17bafd" v="-6067"/>
+ <val o="17c90f" v="-5484"/>
+ <val o="17d71e" v="-5437"/>
+ <val o="17e52f" v="-5342"/>
+ <val o="17f33f" v="-4981"/>
+ <val o="18014f" v="-5193"/>
+ <val o="180f5f" v="-6321"/>
+ <val o="181d6e" v="-6923"/>
+ <val o="182b7f" v="-7889"/>
+ <val o="18398f" v="-13464"/>
+ <val o="1847a1" v="-13354"/>
+ <val o="1855af" v="-12813"/>
+ <val o="1863c0" v="-11996"/>
+ <val o="1871cf" v="-12436"/>
+ <val o="187fe0" v="-11658"/>
+ <val o="188def" v="-12508"/>
+ <val o="189c00" v="-11965"/>
+ <val o="18b80d" v="-7567"/>
+ <val o="18c61c" v="-8100"/>
+ <val o="18d42c" v="-7676"/>
+ <val o="18e23b" v="-6565"/>
+ <val o="18f04b" v="-6167"/>
+ <val o="18fe5e" v="-5660"/>
+ <val o="190c76" v="-4475"/>
+ <val o="191a86" v="-4306"/>
+ <val o="192896" v="-4252"/>
+ <val o="1936a6" v="-4125"/>
+ <val o="1944b7" v="-4125"/>
+ <val o="1952c6" v="-4498"/>
+ <val o="1960d7" v="-5137"/>
+ <val o="196ee6" v="-5967"/>
+ <val o="197cf8" v="-6354"/>
+ <val o="198b0f" v="-5965"/>
+ <val o="19991f" v="-6615"/>
+ <val o="19b541" v="-6619"/>
+ <val o="19c34d" v="-6199"/>
+ <val o="19d15e" v="-6235"/>
+ <val o="19df80" v="-6313"/>
+ <val o="19ed90" v="-6079"/>
+ <val o="19eebe" v="-6075"/>
+ <val o="19fb8e" v="-2390"/>
+ <val o="1a09a0" v="-2600"/>
+ <val o="1a17ae" v="-3051"/>
+ <val o="1a25be" v="-3338"/>
+ <val o="1a33cd" v="-2238"/>
+ <val o="1a41dd" v="-2137"/>
+ <val o="1a4fed" v="-1546"/>
+ <val o="1a5e08" v="-1670"/>
+ <val o="1a6c05" v="-969"/>
+ <val o="1a7a15" v="-1123"/>
+ <val o="1a8826" v="-1072"/>
+ <val o="1a9637" v="-481"/>
+ <val o="1aa445" v="-537"/>
+ <val o="1ab255" v="-995"/>
+ <val o="1ac065" v="-1819"/>
+ <val o="1ace75" v="-2636"/>
+ <val o="1adc87" v="-2920"/>
+ <val o="1aea96" v="-2594"/>
+ <val o="1af8a7" v="-2898"/>
+ <val o="1b06b7" v="-2173"/>
+ <val o="1b14c6" v="-2092"/>
+ <val o="1c7460" v="311"/>
+ <val o="1c8270" v="399"/>
+ <val o="1c907e" v="3486"/>
+ <val o="1c9e8f" v="3357"/>
+ <val o="1caca2" v="3670"/>
+ <val o="1cbab1" v="3580"/>
+ <val o="1cc8c1" v="5398"/>
+ <val o="1cd6d0" v="5478"/>
+ <val o="1ce4de" v="5618"/>
+ <val o="1cf2f0" v="5659"/>
+ <val o="1d0109" v="5923"/>
+ <val o="1d0f06" v="6651"/>
+ <val o="1d1d15" v="6654"/>
+ <val o="1d2b25" v="6713"/>
+ <val o="1d3935" v="6885"/>
+ <val o="1d4745" v="6893"/>
+ <val o="1d5555" v="6705"/>
+ <val o="1d6366" v="5853"/>
+ <val o="1d7175" v="5545"/>
+ <val o="1d7f86" v="5589"/>
+ <val o="1d8d95" v="-3219"/>
+ <val o="1d9ba6" v="-3620"/>
+ <val o="1da9b6" v="-3623"/>
+ <val o="1db7c7" v="-3472"/>
+ <val o="1dc5d5" v="-3630"/>
+ <val o="1dd3e6" v="-3723"/>
+ <val o="1de1f5" v="-6033"/>
+ <val o="1df006" v="-6752"/>
+ <val o="1dfe16" v="-6647"/>
+ <val o="1e0c26" v="-6778"/>
+ <val o="1e1a36" v="-6794"/>
+ <val o="1e2847" v="-6593"/>
+ <val o="1e3659" v="-6136"/>
+ <val o="1e4467" v="-5653"/>
+ <val o="1e5281" v="-4910"/>
+ <val o="1e6086" v="-4908"/>
+ <val o="1e6e96" v="-4803"/>
+ <val o="1e7ca6" v="-1970"/>
+ <val o="1e8ab5" v="-1820"/>
+ <val o="1e98c6" v="-1821"/>
+ <val o="1ea6d5" v="-2271"/>
+ <val o="1eb4e6" v="-2332"/>
+ <val o="1ec2f6" v="-2646"/>
+ <val o="1ed106" v="-2644"/>
+ <val o="1edf16" v="-2749"/>
+ <val o="1eed26" v="-2728"/>
+ <val o="1efb36" v="-2587"/>
+ <val o="1f0946" v="-2548"/>
+ <val o="1f1756" v="-2377"/>
+ <val o="1f2566" v="-2339"/>
+ <val o="1f3376" v="-2566"/>
+ <val o="1f4187" v="-2784"/>
+ <val o="1f4f96" v="-3191"/>
+ <val o="1f5da7" v="-3581"/>
+ <val o="1f6bb6" v="-3591"/>
+ <val o="1f79c7" v="-3124"/>
+ <val o="1f87d6" v="-3337"/>
+ <val o="1f95e7" v="-3142"/>
+ <val o="1fa401" v="-2806"/>
+ <val o="1fb204" v="-2480"/>
+ <val o="1fc016" v="-2497"/>
+ <val o="1fce25" v="-2171"/>
+ <val o="1fdc35" v="-2133"/>
+ <val o="1fea45" v="-2159"/>
+ <val o="1ff855" v="-2500"/>
+ <val o="200665" v="-2395"/>
+ <val o="201475" v="-3469"/>
+ <val o="202286" v="-4512"/>
+ <val o="203095" v="-5355"/>
+ <val o="203ea5" v="-5915"/>
+ <val o="204cb6" v="-5771"/>
+ <val o="205ac6" v="-5287"/>
+ <val o="2068d6" v="-5386"/>
+ <val o="2076e6" v="-5976"/>
+ <val o="2084f6" v="-6100"/>
+ <val o="209306" v="-6742"/>
+ <val o="20a116" v="-6312"/>
+ <val o="20af26" v="-5533"/>
+ <val o="20bd37" v="-5455"/>
+ <val o="20cb46" v="-4630"/>
+ <val o="20d957" v="-4348"/>
+ <val o="20e767" v="-4046"/>
+ <val o="20f581" v="-3855"/>
+ <val o="210386" v="-3519"/>
+ <val o="211194" v="-3131"/>
+ <val o="211fa5" v="-3014"/>
+ <val o="212db5" v="-2904"/>
+ <val o="213bc5" v="-2826"/>
+ <val o="2149d6" v="-3680"/>
+ <val o="2157e5" v="-4507"/>
+ <val o="2165f6" v="-5844"/>
+ <val o="217406" v="-6195"/>
+ <val o="218217" v="-6165"/>
+ <val o="219026" v="-6142"/>
+ <val o="219e39" v="-6223"/>
+ <val o="21ac46" v="-5938"/>
+ <val o="21ba57" v="-5926"/>
+ <val o="21c867" v="-5557"/>
+ <val o="21d677" v="-6240"/>
+ <val o="21e487" v="-5750"/>
+ <val o="21f296" v="-5772"/>
+ <val o="2200a6" v="-5468"/>
+ <val o="220eb7" v="-5393"/>
+ <val o="221cc6" v="-4543"/>
+ <val o="222ad7" v="-3876"/>
+ <val o="2238e7" v="-3622"/>
+ <val o="224701" v="-3292"/>
+ <val o="225505" v="-1681"/>
+ <val o="226315" v="-2082"/>
+ <val o="227125" v="-2043"/>
+ <val o="227f35" v="-1675"/>
+ <val o="228d45" v="-1785"/>
+ <val o="229b54" v="-3494"/>
+ <val o="22a965" v="-4080"/>
+ <val o="22b776" v="-4454"/>
+ <val o="22c586" v="-4816"/>
+ <val o="22d397" v="-4405"/>
+ <val o="22e1a6" v="-4620"/>
+ <val o="22efb6" v="-4820"/>
+ <val o="22fdc7" v="-4643"/>
+ <val o="230bd7" v="-4435"/>
+ <val o="2319e6" v="-5397"/>
+ <val o="2327f6" v="-5558"/>
+ <val o="23361b" v="-5883"/>
+ <val o="234416" v="-5207"/>
+ <val o="235226" v="-5203"/>
+ <val o="236037" v="-5253"/>
+ <val o="236e46" v="-4342"/>
+ <val o="237c57" v="-4194"/>
+ <val o="238a66" v="-3991"/>
+ <val o="239881" v="-3195"/>
+ <val o="23a685" v="-3328"/>
+ <val o="23b495" v="-3191"/>
+ <val o="23c2a4" v="-2966"/>
+ <val o="23d0b5" v="-2959"/>
+ <val o="23dec4" v="-2916"/>
+ <val o="23ecd5" v="-3620"/>
+ <val o="23fae4" v="-4562"/>
+ <val o="2408f6" v="-5013"/>
+ <val o="241706" v="-5793"/>
+ <val o="242518" v="-6605"/>
+ <val o="243325" v="-6787"/>
+ <val o="244137" v="-6732"/>
+ <val o="244f46" v="-6435"/>
+ <val o="246b66" v="-6415"/>
+ <val o="247976" v="-6261"/>
+ <val o="248786" v="-5371"/>
+ <val o="24957e" v="-5703"/>
+ <val o="24a38f" v="-5668"/>
+ <val o="24b19c" v="-5810"/>
+ <val o="24bfac" v="-5495"/>
+ <val o="24cdbc" v="-5368"/>
+ <val o="24dbcd" v="-4539"/>
+ <val o="24e9e5" v="-4003"/>
+ <val o="24f808" v="-3487"/>
+ <val o="250616" v="-3597"/>
+ <val o="251426" v="-3575"/>
+ <val o="252236" v="-3422"/>
+ <val o="253047" v="-3610"/>
+ <val o="253e56" v="-4069"/>
+ <val o="254c67" v="-4209"/>
+ <val o="255a76" v="-4977"/>
+ <val o="256887" v="-5845"/>
+ <val o="257697" v="-5662"/>
+ <val o="2584a8" v="-15155"/>
+ <val o="2592b6" v="-8621"/>
+ <val o="25a0c7" v="-4609"/>
+ <val o="25aed7" v="-6329"/>
+ <val o="25bce7" v="-6120"/>
+ <val o="25caf8" v="-5819"/>
+ <val o="25d907" v="-5800"/>
+ <val o="25e718" v="-5627"/>
+ <val o="25f527" v="-5318"/>
+ <val o="260338" v="-5543"/>
+ <val o="261149" v="-4916"/>
+ <val o="261f59" v="-4589"/>
+ <val o="262d68" v="-4670"/>
+ <val o="263b83" v="-3694"/>
+ <val o="264986" v="-3491"/>
+ <val o="265795" v="-3582"/>
+ <val o="2665a6" v="-3683"/>
+ <val o="2673b5" v="-3608"/>
+ <val o="2681c6" v="-3681"/>
+ <val o="268fd5" v="-3850"/>
+ <val o="269de6" v="-3923"/>
+ <val o="26abf6" v="-3955"/>
+ <val o="26ba06" v="-4467"/>
+ <val o="26c817" v="-4257"/>
+ <val o="26d62b" v="-3915"/>
+ <val o="26e436" v="-3897"/>
+ <val o="26f247" v="-3531"/>
+ <val o="270057" v="-3798"/>
+ <val o="270e67" v="-3628"/>
+ <val o="271c77" v="-4540"/>
+ <val o="272a87" v="-5171"/>
+ <val o="273897" v="-5038"/>
+ <val o="2746a8" v="-5028"/>
+ <val o="2754b9" v="-5029"/>
+ <val o="2762c7" v="-3993"/>
+ <val o="2770d8" v="-3551"/>
+ <val o="277ee7" v="-3206"/>
+ </par>
+ <par memind="674601" h="3dc1a7e0">
+ <val o="0" v="22123:137:88:76:103:69:89:6047:6571:2134:6414:2223:2727.231:1435.675:5.979:0.067:0:4171:41039:29052:42104:12218:24721:13504:8975:11153:2990:8665:9759:11742"/>
+ </par>
+ <par memind="673801" h="3dc1a7e0">
+ <val o="0" v="0:0:0:0:0:0:0:2472:22505:25160:16425:30012:23514.229:11675.362:9.272:0.416:0:6491:3221:2867:4204:22822:3047:6263:15342:9785:32424:23346:21578:23508"/>
+ </par>
+ <par memind="673401" h="3dc1a7e0">
+ <val o="0" v="72898:191:188:176:178:174:181:10441:14079:1360:46667:74131:80996.13:50324.326:32.188:0.038:0:44027:200289:109216:52461:12951:75896:69196:104852:117036:96903:120714:124308:96207"/>
+ </par>
+ <par memind="673001" h="3dc1a7e0">
+ <val o="0" v="0:0:0:0:0:0:0:3476:3226:5597:4853:0:0:0:0.001:0.137:0:0:0:0:0:50735:59205:0:0:0:0:0:0:0"/>
+ </par>
+ <par memind="26274601" h="3dc1a7e0">
+ <val o="0" v="0::1305::2869::4482::6066::7396::8573::10262::11922::13773::15492::17522::19544::21452::22070::22075::22080::22084::22085::22090::22097::22103::22109::22116::0::6::13::20::27::32::34::41::48::54::61::68::75::82::89::96::103::110::110::111::116::119::123::129"/>
+ <val o="2a300" v="0::5::5::7::11::12::12::17::24::30::37::44::51::58::65::69::71::71::71::73::75::76::76::81::0::6::13::20::27::34::40::44::50::::51::51::51::51::51::51::51::51::51::51::54::60::63::69::0"/>
+ <val o="55410" v="6::13::20::27::34::38::44::46::46::47::52::58::65::66::66::67::69::69::70::76::83::89::96::0::5::12::19::25::30::31::35::37::37::37::37::38::44::45::45::45::45::45::45::48::51::56::62::0"/>
+ <val o="7f710" v="6::14::21::28::35::42::47::50::50::50::52::59::65::69::72::74::75::75::75::75::78::79::82::0::7::14::21::28::34::38::44::45::45::49::56::63::70::76::80::835::1675::2038::2039::2856::3158::3607::4431::0"/>
+ <val o="a9a10" v="629::797::1456::2382::2476::2477::2821::2821::2821::::2821::2821::2856::2865::2865::3049::3223::3267::3532::4304::5147::5147::5449::0::101::102::252::592::605::605::605::605::612::612::612::612::612::612::612::679::767::767::767::767::767::767::910::0::1158"/>
+ <val o="d4b20" v="2289::2701::3076::3076::3385::3904::3904::3904::3904::3904::3904::3904::3904::3904::3904::3911::4023::4599::5237::5494::5780::6072::0::622::622::622::622::622::716::819::819::819::819::819::819::870::870::870::870::870::870::870::870::870::870::1024::0::1127"/>
+ <val o="fee20" v="1954::2173::2377::2377::2377::2377::2377::2377::2381::2381::2381::2381::2381::2381::2381::2381::2381::2381::2381::2384::2400::2400::0::163::163::163::163::163::163::163::163::204::330::751::1400::1433::1433::1433::1435.1::1435.1::1435.1::1435.1::1435.1::1435.144::1435.375::1435.381::0::1.179"/>
+ <val o="129120" v="2.486::3.869::5.278::5.809::5.811::5.811::5.811::5.843::5.967::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.968::5.969::5.969::0::0::0::0::0::0::0::0::0::0::0::0.001::0.014::0.032::0.04::0.046::0.049::0.05::0.05::0.05::0.05::0.05::0.05::0.053::0::0.005"/>
+ <val o="153420" v="0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.005::0.009::0.009::0.009::0.009::0.009::0.009::0.014::0::0.004::0.02::0.031::0.042::0.044::0.044::0.044::0.044::0.044::0.044::0.044::0.047::0.05::0.051::0.054::0.054::0.054::0::0::0::0::175::1878::0::2303"/>
+ <val o="17d720" v="5016::7889::10825::12785::13428::14568::16281::17870::18757::19673::22314::25317::28017::30611::32571::::33078::33570::34865::36124::37670::39908::0::978::2540::4236::5992::6773::6818::6915::7643::8510::8618::::9354::10334::10857::11190::11387::11387::12818::15547::19011::21077::22610::25682::0::2682::5757::9094"/>
+ <val o="1a9640" v="12439::14810::16426::18172::20462::22851::24957::26912::29200::31789"/>
+ <val o="1c7460" v="8197::8264::8365::8365::8996::9996::10570::10570::10570::10807::0::388::776::1655::2374::2391::2391::2429::3332::3677::3768::3851::4294::4930::5847::6625::7852::9492::11328::13376::15620::17946::20170::22469::0::1979::4179::4817::5302::5612::5802::6075::6787::7172::7489::7668::7867::8184"/>
+ <val o="1f1760" v="8270::8270::8270::8270::8270::8279::8425::8766::9261::11379::0::967::2232::3224::3584::3708::3742::4192::4373::4379::4379::4379::4379::4379::4379::4468::4816::5111::5533::6393::6740::7394::7394::7988::0::1479::2407::2907::3341::3347::3347::3522::4521::4702::5104::5399::6511::6511"/>
+ <val o="21ba60" v="6511::6511::7554::8046::8046::8084::8781::9437::9437::10034::0::258::258::258::258::258::303::541::1097::1122::1122::1122::1122::1397::1429::2052::2638::2638::2638::2638::2638::2779::2779::2779::0::211::716::993::993::993::993::1058::1060::1060::1060::1060::1123::1640"/>
+ <val o="246b70" v="3280::3952::3962::3962::3962::4297::5586::6998::7956::0::492::1570::2683::3585::3615::3618::3659::3659::3659::3659::3973::6767::8644::8717::8718::8718::8718::8718::8718::8718::8898::8898::9205::0::502::1825::3722::5758::7237::8159::8226::8226::8226::8226::8226::8226::8226::8226"/>
+ <val o="270e70" v="8226::8240::8504::8980::9466::10308::10666::10666::10739"/>
+ </par>
+ <par memind="26273801" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::680::1753::2436::2439::2471::2472::2472::0"/>
+ <val o="a9a10" v="273::304::304::304::392::1467::1961::2735::4511::::12114::16337::18252::18452::19051::20724::21115::21611::21616::21616::21647::22460::22505::0::1428::1786::1821::1821::2100::3116::4606::5700::6263::7232::8321::9202::9706::10109::10567::11827::12356::14818::17416::20186::22628::24467::25160::0::16"/>
+ <val o="d4b20" v="16::16::18::761::2317::2345::3031::5010::7681::10719::13491::14079::14541::14788::15028::15551::16182::16182::16327::16351::16394::16424::0::1254::2521::3304::4214::6189::8542::8884::9714::10907::12447::13604::14407::14928::16855::18323::20016::22306::23952::25511::26700::27858::29512::30012::0::0"/>
+ <val o="fee20" v="14::14::16::848::2512::4114::5556::7070::7967::9424::10812::11722::12829::13950::15033::17095::19423::20670::21129::21828::22608::23444::0::1024::1508::1786::1985::2951::4900::6589::8053::8849::8929::8929::8929::9502::10380::11200::11669.43::11670.714::11671.501::11673.236::11674.324::11674.616::11674.887::11675.345::0::0"/>
+ <val o="129120" v="0::0::0::0::0.632::1.57::2.787::4.389::5.353::6.676::7.825::8.473::9.059::9.07::9.083::9.113::9.149::9.186::9.222::9.254::9.263::9.267::0::0.054::0.078::0.094::0.113::0.149::0.2::0.229::0.234::0.241::0.244::0.245::0.245::0.245::0.245::0.245::0.246::0.276::0.309::0.348::0.383::0.408::0.415::0.416::0::0.022"/>
+ <val o="153420" v="0.031::0.032::0.033::0.045::0.076::0.1::0.121::0.161::0.197::0.227::0.252::0.257::0.264::0.275::0.295::0.315::0.322::0.329::0.332::0.348::0.357::0.357::0::0::0::0::0::0::0.015::0.051::0.062::0.068::0.079::0.091::0.094::0.094::0.097::0.108::0.125::0.161::1425::3563::5087::6081::6491::6491::0::0"/>
+ <val o="17d720" v="0::0::0::0::3::4::17::17::17::17::83::83::83::83::83::::2815::3221::3221::3221::3221::3221::0::0::0::0::0::0::503::2124::2124::2135::2187::::2220::2220::2220::2220::2231::2857::2867::2867::2867::2867::2867::2867::0::0::0::0"/>
+ <val o="1a9640" v="0::0::0::0::5::5::5::5::5::5"/>
+ <val o="1c7460" v="14139::14218::14538::16467::16493::16493::17913::20388::22503::22822::0::242::242::242::242::473::1614::2783::2783::2785::3043::3046::3046::3047::3047::3047::3047::3047::3047::3047::3047::3047::3047::3047::0::0::0::101::101::101::155::155::155::155::155::158::158::158"/>
+ <val o="1f1760" v="303::689::1267::3291::5362::5964::5964::6205::6263::6263::0::67::78::78::78::96::279::1257::2169::3382::5628::7692::9144::9800::11410::13193::13770::14500::14502::14526::14528::14693::15337::15342::0::0::128::128::128::631::1960::2834::2847::2994::3445::3445::3445::4010"/>
+ <val o="21ba60" v="5304::6802::7188::7304::7777::8119::8119::8238::9731::9785::0::3202::5137::5593::6304::8577::12322::12561::12561::13960::16533::20127::22841::22863::23106::23247::23247::24987::26402::27590::28075::29263::31438::32325::0::171::171::200::344::1476::2425::3387::4145::5875::9210::12291::15144::15144"/>
+ <val o="246b70" v="15144::15144::17267::21864::23232::23346::23346::23346::23346::0::86::86::86::86::188::709::1333::2511::4313::7593::10434::10434::10443::10622::10810::11293::12302::14859::17476::19565::19742::21035::21234::0::13::13::13::13::13::13::216::929::2058::3700::5698::8782::11698::14663"/>
+ <val o="270e70" v="17767::18546::19155::19155::19155::19155::20730::23016::23508"/>
+ </par>
+ <par memind="26273401" h="3dc1a7e0">
+ <val o="0" v="0::4177::8348::12421::16466::20389::24550::29638::35390::42329::49608::56982::64119::70819::72824::72831::72838::72845::72851::72859::72866::72873::72881::72889::0::8::16::24::32::40::48::56::65::73::81::89::97::105::114::122::131::138::145::152::160::167::175::183"/>
+ <val o="2a300" v="0::8::16::23::31::39::47::55::63::71::79::87::96::104::112::120::128::135::142::150::157::165::172::180::0::8::17::25::34::43::51::58::66::::79::85::92::98::105::111::117::124::131::138::145::153::160::168::0"/>
+ <val o="55410" v="8::16::25::33::41::49::56::64::70::77::84::91::98::105::111::118::125::132::139::147::154::162::170::0::7::16::24::32::40::48::55::63::69::76::82::89::96::103::109::116::122::128::135::143::150::158::166::0"/>
+ <val o="7f710" v="8::17::25::34::43::51::58::66::73::80::87::94::101::108::115::122::129::135::142::150::157::165::172::0::8::17::25::34::42::50::58::65::72::78::85::92::100::107::114::2595::7913::10294::10439::10439::10439::10441::10441::0"/>
+ <val o="a9a10" v="2::4::9::9::9::9::69::181::236::::327::461::720::1393::2215::3059::4593::6342::8041::9944::11561::12314::13166::0::47::47::47::47::47::47::47::47::48::59::87::127::134::135::142::182::537::769::1000::1156::1208::1230::1264::0::0"/>
+ <val o="d4b20" v="0::0::0::0::58::464::1214::2866::5195::7644::10189::13108::15902::18773::21557::24345::28271::32267::36012::39360::42352::44782::0::1215::1879::2581::3232::3730::4627::6845::9426::13213::17460::21812::26408::30878::35346::40061::44776::49145::53501::57575::61429::64968::68029::71154::0::2541"/>
+ <val o="fee20" v="4757::6749::8707::10446::12296::14817::18021::22192::24710::29209::33799::38000::42199::46375::50681::55062::59387::63686::67971::71883::75378::78274::0::1965::3785::5589::7408::9042::10735::13143::16254::20473::25210::29898::34989::39265::43547::47659::50298.816::50302.733::50306.729::50310.326::50313.783::50317.062::50320.016::50322.277::0::1.986"/>
+ <val o="129120" v="3.746::5.427::7.116::8.649::10.225::12.377::14.972::18.155::21.519::24.079::26.789::29.872::32.038::32.075::32.093::32.11::32.132::32.149::32.163::32.173::32.181::32.183::0::0::0::0::0::0::0::0::0::0.001::0.005::0.008::0.012::0.014::0.014::0.014::0.014::0.017::0.023::0.026::0.029::0.032::0.035::0.038::0::0"/>
+ <val o="153420" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0.004::0.013::0.023::0.035::0.039::0.04::0.04::0::0::0::0::0::0::0::0::0.011::0.064::0.184::0.299::0.403::0.491::0.587::0.684::0.777::0.882::4649::11369::18384::25539::32098::38189::0::5631"/>
+ <val o="17d720" v="11134::16580::21819::26934::32449::39011::46164::57329::70535::83592::96112::107934::119836::131836::143932::::159972::167838::175759::182940::189261::195260::0::4361::8637::12844::17026::21292::26185::31514::37629::44147::50295::::62972::69142::75490::81871::88411::92634::95263::98136::101493::104338::106264::108086::0::1118::2125::3163"/>
+ <val o="1a9640" v="3972::4424::5117::6670::8682::11273::14036::16800::19585::21687"/>
+ <val o="1c7460" v="12951::12951::12951::12951::12951::12951::12951::12951::12951::12951::0::0::0::0::0::0::0::0::0::0::2097::5658::9307::12837::16437::20072::24855::31120::37813::44635::51509::58224::64519::70460::0::4912::9779::12468::14377::16196::18098::20357::22916::25572::28333::31048::33673::36268"/>
+ <val o="1f1760" v="38769::41197::43617::46222::49307::52694::56229::59586::62790::66147::0::2563::5010::7377::9547::11662::13970::16722::19820::23668::28455::34079::39799::45148::50589::56448::62674::69084::75584::81629::87007::92190::96664::100953::0::3686::6981::10109::13149::16039::19168::23164::28263::34238::40473::46590::52821::58868"/>
+ <val o="21ba60" v="64810::70628::77026::83160::89027::94673::100155::105383::109691::113559::0::1996::3876::5949::7945::9673::11583::15197::19355::23959::28689::33229::37981::42745::47470::52656::58228::63768::69353::74634::79872::84699::88966::93090::0::3272::6519::9646::12665::15529::18785::22767::27361::33026::39197::45634::52231::58688"/>
+ <val o="246b70" v="71623::77897::83661::88919::94509::100226::106004::111517::116497::0::3504::7147::10760::14341::17823::21561::25845::30381::35821::41529::48026::57310::64898::70924::77195::83135::89105::94900::100321::105698::111053::115727::120309::0::3610::7127::10778::14421::18015::21712::25564::29454::33598::37946::42100::46054::49824::53500"/>
+ <val o="270e70" v="57099::61385::66221::71352::76382::81368::85828::89677::93036"/>
+ </par>
+ <par memind="26273001" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::10::521::1009::1914::2329::2804::0"/>
+ <val o="a9a10" v="1070::1205::1242::1361::1873::2688::2888::2968::3013::::3093::3165::3226::3226::3226::3226::3226::3226::3226::3226::3226::3226::3226::0::504::975::1420::1776::2305::2796::3212::4002::4254::4373::4494::4549::4753::4950::5087::5453::5453::5453::5453::5454::5473::5509::5581::0::581"/>
+ <val o="d4b20" v="1231::1927::2760::3902::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::4853::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="fee20" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="129120" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0.017::0.031::0.048::0.065::0.085::0.105::0.114::0.116::0.116::0.116::0.116::0.116::0.117::0.12::0.123::0.128::0.135::0.135::0.135::0.135::0.135::0.135::0.136::0::0.016"/>
+ <val o="153420" v="0.036::0.054::0.074::0.096::0.119::0.137::0.152::0.165::0.178::0.19::0.204::0.216::0.228::0.237::0.249::0.256::0.256::0.256::0.256::0.256::0.256::0.257::0::0.012::0.018::0.02::0.021::0.025::0.032::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0.037::0::0::0::0::0::0::0::0"/>
+ <val o="17d720" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="1a9640" v="0::0::0::0::0::0::0::0::0::0"/>
+ <val o="1c7460" v="9208::9490::12579::16633::20164::23882::28334::33713::39220::44909::0::6542::13180::19855::26594::33432::40280::46777::52524::57875::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::59205::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="1f1760" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="21ba60" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="246b70" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="270e70" v="0::0::0::0::0::0::0::0::0"/>
+ </par>
+ <par memind="1314601" h="3dc1a7e0">
+ <val o="0" v="270370"/>
+ </par>
+ <par memind="1313801" h="3dc1a7e0">
+ <val o="0" v="306693"/>
+ </par>
+ <par memind="1313401" h="3dc1a7e0">
+ <val o="0" v="1576111"/>
+ </par>
+ <par memind="1313001" h="3dc1a7e0">
+ <val o="0" v="127098"/>
+ </par>
+ <par memind="52514601" h="3dc1a7e0">
+ <val o="0" v="0::1305::2869::4482::6066::7396::8573::10262::11922::13773::15492::17522::19544::21452::22070::22075::22080::22084::22085::22090::22097::22103::22109::22116::22123::22129::22136::22143::22150::22156::22158::22166::22173::22180::22186::22193::22200::22207::22214::22221::22228::22235::22235::22236::22241::22244::22247::22254"/>
+ <val o="2a300" v="22261::22267::22267::22269::22273::22274::22274::22280::22287::22294::22301::22308::22315::22322::22329::22333::22335::22335::22335::22336::22338::22339::22339::22344::22351::22358::22365::22372::22379::22386::22391::22395::22402::::22404::22404::22404::22404::22404::22404::22404::22404::22404::22404::22407::22413::22416::22422::22429"/>
+ <val o="55410" v="22436::22443::22450::22457::22464::22468::22475::22477::22477::22478::22483::22489::22495::22497::22497::22498::22499::22499::22500::22507::22513::22520::22526::22533::22538::22545::22552::22559::22564::22564::22569::22571::22572::22572::22572::22573::22579::22580::22580::22580::22580::22580::22580::22583::22585::22590::22596::22603"/>
+ <val o="7f710" v="22610::22617::22624::22632::22639::22645::22650::22653::22653::22653::22655::22662::22669::22672::22675::22677::22678::22678::22678::22678::22682::22683::22686::22693::22701::22708::22715::22722::22728::22732::22738::22740::22740::22744::22751::22758::22765::22770::22775::23529::24370::24733::24734::25551::25853::26301::27126::28742"/>
+ <val o="a9a10" v="29372::29540::30199::31125::31218::31219::31564::31564::31564::::31564::31564::31599::31607::31607::31792::31965::32010::32274::33047::33890::33890::34193::35316::35417::35418::35569::35909::35921::35921::35921::35921::35928::35928::35928::35928::35928::35928::35928::35995::36083::36083::36083::36083::36083::36083::36226::37450::38609"/>
+ <val o="d4b20" v="39740::40151::40527::40527::40836::41356::41356::41356::41356::41356::41356::41356::41356::41356::41356::41363::41476::42051::42690::42946::43231::43524::43865::44488::44488::44488::44488::44488::44582::44685::44685::44685::44685::44685::44685::44736::44736::44736::44736::44736::44736::44736::44736::44736::44736::44890::46089::47216"/>
+ <val o="fee20" v="48043::48262::48466::48466::48466::48466::48466::48466::48471::48471::48471::48471::48471::48471::48471::48471::48471::48471::48471::48474::48491::48491::48816::48980::48980::48980::48980::48980::48980::48980::48980::49022::49147::49569::50218::50251::50251::50251::50252.91::50252.91::50252.91::50252.91::50252.91::50252.954::50253.185::50253.192::50253.487::50254.667"/>
+ <val o="129120" v="50255.973::50257.356::50258.765::50259.296::50259.299::50259.299::50259.299::50259.332::50259.455::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.456::50259.457::50259.458::50259.458::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.467::50259.469::50259.482::50259.5::50259.507::50259.513::50259.516::50259.517::50259.517::50259.517::50259.517::50259.517::50259.517::50259.521::50259.535::50259.54"/>
+ <val o="153420" v="50259.54::50259.54::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.541::50259.546::50259.546::50259.546::50259.546::50259.547::50259.547::50259.552::50259.557::50259.561::50259.577::50259.588::50259.6::50259.601::50259.601::50259.601::50259.601::50259.601::50259.601::50259.601::50259.604::50259.608::50259.609::50259.612::50259.612::50259.612::50258::50258::50258::50258::50434::52137::54431::56734"/>
+ <val o="17d720" v="59447::62321::65257::67217::67860::69000::70713::72302::73189::74106::76746::79750::82449::85043::87003::::87510::88002::89297::90556::92102::94340::95470::96449::98011::99707::101463::102244::102289::102386::103115::103983::104091::::104826::105806::106330::106662::106859::106859::108290::111019::114483::116549::118083::121154::124524::127207::130282::133619"/>
+ <val o="1a9640" v="136963::139335::140951::142698::144988::147377::149483::151438::153726::156315"/>
+ <val o="1c7460" v="174829::174896::174996::174996::175627::176628::177201::177201::177201::177439::178849::179238::179626::180505::181224::181241::181241::181279::182183::182528::182619::182701::183144::183780::184697::185475::186702::188342::190179::192226::194470::196796::199020::201319::203571::205550::207751::208389::208873::209184::209373::209646::210358::210744::211061::211240::211439::211756"/>
+ <val o="1f1760" v="211843::211843::211843::211843::211843::211852::211998::212339::212833::214951::217077::218045::219309::220302::220662::220786::220819::221269::221451::221458::221458::221458::221458::221458::221458::221547::221895::222189::222611::223471::223818::224472::224473::225066::226054::227533::228461::228962::229396::229401::229401::229577::230576::230758::231159::231454::232566::232566"/>
+ <val o="21ba60" v="232566::232566::233609::234101::234101::234139::234836::235492::235492::236089::237208::237467::237467::237467::237467::237467::237511::237749::238306::238331::238331::238331::238331::238606::238637::239260::239846::239846::239846::239846::239847::239988::239988::239988::240200::240411::240916::241193::241194::241194::241194::241260::241262::241262::241262::241262::241325::241842"/>
+ <val o="246b70" v="243482::244154::244164::244164::244164::244499::245788::247200::248157::248866::249358::250436::251549::252452::252482::252484::252526::252526::252526::252526::252840::255634::257511::257584::257585::257585::257585::257585::257585::257585::257766::257766::258073::258628::259130::260454::262350::264387::265865::266787::266854::266854::266854::266854::266854::266854::266854::266854"/>
+ <val o="270e70" v="266854::266868::267132::267609::268095::268936::269294::269294::269367"/>
+ </par>
+ <par memind="52513801" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::680::1753::2436::2439::2471::2472::2472::2472"/>
+ <val o="a9a10" v="2745::2776::2776::2776::2864::3939::4434::5207::6983::::14587::18809::20724::20924::21523::23196::23587::24084::24088::24088::24119::24933::24978::24978::26406::26764::26799::26799::27079::28094::29584::30678::31242::32211::33301::34181::34685::35088::35546::36806::37336::39798::42396::45166::47608::49447::50139::50139::50155"/>
+ <val o="d4b20" v="50155::50156::50158::50901::52457::52486::53171::55151::57821::60860::63632::64220::64682::64929::65169::65692::66324::66324::66469::66492::66535::66565::66565::67820::69087::69869::70780::72755::75107::75449::76279::77473::79013::80171::80973::81494::83421::84889::86582::88872::90518::92077::93266::94424::96079::96579::96579::96579"/>
+ <val o="fee20" v="96594::96594::96596::97428::99092::100694::102136::103651::104547::106004::107392::108302::109410::110530::111613::113676::116005::117251::117711::118409::119188::120024::120093::121118::121602::121880::122079::123044::124994::126683::128148::128945::129025::129025::129025::129597::130475::131295::131764.303::131765.588::131766.375::131768.11::131769.198::131769.49::131769.761::131770.219::131770.236::131770.236"/>
+ <val o="129120" v="131770.236::131770.236::131770.236::131770.236::131770.868::131771.806::131773.023::131774.625::131775.589::131776.912::131778.062::131778.709::131779.295::131779.306::131779.319::131779.349::131779.386::131779.423::131779.458::131779.49::131779.499::131779.503::131779.509::131779.564::131779.587::131779.604::131779.623::131779.659::131779.709::131779.738::131779.744::131779.752::131779.755::131779.755::131779.755::131779.755::131779.755::131779.755::131779.756::131779.786::131779.819::131779.858::131779.893::131779.918::131779.926::131779.926::131779.926::131779.949"/>
+ <val o="153420" v="131779.958::131779.959::131779.96::131779.972::131780.003::131780.027::131780.049::131780.089::131780.125::131780.155::131780.179::131780.184::131780.191::131780.202::131780.222::131780.243::131780.251::131780.258::131780.261::131780.277::131780.285::131780.285::131780.288::131780.288::131780.288::131780.288::131780.288::131780.289::131780.303::131780.34::131780.35::131780.356::131780.368::131780.381::131780.384::131780.384::131780.386::131780.398::131780.415::131780.451::133205::135343::136866::137861::138272::138272::138272::138272"/>
+ <val o="17d720" v="138272::138272::138272::138272::138275::138277::138290::138290::138290::138290::138355::138355::138355::138355::138355::::141088::141493::141493::141493::141493::141493::141493::141493::141493::141493::141493::141493::141997::143618::143618::143629::143681::::143714::143714::143714::143714::143725::144351::144362::144362::144362::144362::144362::144362::144362::144362::144362::144362"/>
+ <val o="1a9640" v="144362::144362::144362::144362::144368::144368::144368::144368::144368::144368"/>
+ <val o="1c7460" v="162707::162786::163107::165035::165062::165062::166481::168956::171072::171391::171391::171634::171634::171634::171634::171865::173006::174175::174175::174177::174435::174438::174438::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174439::174540::174540::174540::174594::174594::174594::174594::174594::174598::174598::174598"/>
+ <val o="1f1760" v="174742::175129::175706::177731::179803::180405::180405::180646::180704::180704::180704::180771::180782::180782::180782::180801::180983::181961::182873::184086::186332::188396::189848::190504::192114::193897::194474::195204::195206::195230::195232::195397::196041::196046::196046::196046::196175::196175::196175::196678::198007::198881::198895::199043::199494::199494::199494::200058"/>
+ <val o="21ba60" v="201353::202851::203237::203353::203825::204167::204167::204286::205778::205833::205833::209036::210970::211426::212138::214410::218156::218395::218395::219795::222368::225963::228676::228698::228941::229082::229082::230822::232237::233425::233910::235098::237273::238160::238259::238431::238431::238460::238604::239735::240685::241648::242406::244137::247471::250551::253404::253404"/>
+ <val o="246b70" v="253404::253404::255527::260124::261492::261606::261606::261606::261606::261606::261692::261692::261692::261692::261794::262315::262939::264118::265921::269200::272041::272041::272049::272229::272417::272900::273909::276466::279084::281173::281349::282642::282841::283185::283198::283198::283198::283198::283198::283198::283402::284114::285244::286886::288884::291968::294884::297849"/>
+ <val o="270e70" v="300954::301733::302341::302341::302341::302341::303915::306201::306693"/>
+ </par>
+ <par memind="52513401" h="3dc1a7e0">
+ <val o="0" v="0::4177::8348::12421::16466::20389::24550::29638::35390::42329::49608::56982::64119::70819::72824::72831::72838::72845::72851::72859::72866::72873::72881::72889::72898::72906::72914::72922::72931::72938::72946::72955::72963::72972::72979::72987::72995::73004::73012::73021::73029::73037::73045::73052::73060::73067::73074::73083"/>
+ <val o="2a300" v="73092::73100::73108::73116::73124::73131::73139::73147::73155::73164::73172::73180::73189::73197::73205::73213::73221::73228::73235::73242::73250::73258::73265::73273::73281::73290::73298::73307::73316::73324::73333::73341::73349::::73362::73368::73374::73381::73387::73394::73400::73407::73414::73421::73428::73436::73443::73451::73459"/>
+ <val o="55410" v="73467::73476::73484::73492::73501::73508::73516::73523::73529::73536::73543::73550::73557::73564::73571::73578::73585::73592::73599::73607::73614::73622::73630::73639::73647::73655::73663::73672::73680::73687::73694::73702::73709::73715::73721::73728::73735::73742::73748::73755::73762::73769::73776::73783::73791::73798::73806::73814"/>
+ <val o="7f710" v="73823::73831::73840::73849::73858::73866::73874::73881::73888::73895::73902::73909::73917::73924::73931::73938::73945::73952::73959::73966::73973::73980::73988::73996::74005::74014::74022::74031::74039::74047::74055::74062::74069::74076::74084::74091::74098::74105::74112::76593::81912::84293::84438::84438::84438::84439::84440::84440"/>
+ <val o="a9a10" v="84442::84445::84450::84450::84450::84450::84510::84622::84677::::84768::84902::85161::85834::86656::87500::89034::90783::92482::94386::96003::96756::97608::98520::98568::98568::98568::98568::98568::98568::98569::98569::98570::98581::98609::98649::98656::98657::98664::98704::99059::99291::99522::99679::99730::99752::99786::99882::99882"/>
+ <val o="d4b20" v="99882::99882::99882::99882::99940::100346::101096::102749::105078::107527::110072::112991::115786::118656::121441::124228::128154::132149::135895::139243::142235::144665::146550::147766::148430::149132::149783::150281::151178::153396::155977::159764::164011::168363::172959::177429::181897::186612::191328::195697::200054::204127::207981::211520::214581::217705::220682::223224"/>
+ <val o="fee20" v="225440::227431::229389::231128::232979::235501::238705::242877::245395::249894::254484::258685::262884::267059::271365::275747::280072::284371::288656::292567::296062::298958::301678::303643::305464::307268::309087::310721::312414::314823::317933::322153::326889::331577::336668::340944::345227::349338::151978.697::151982.614::151986.61::151990.207::151993.665::151996.943::151999.897::152002.158::152004.207::152006.194"/>
+ <val o="129120" v="152007.954::152009.635::152011.324::152012.857::152014.433::152016.586::152019.181::152022.365::152025.728::152028.288::152030.998::152034.081::152036.247::152036.284::152036.302::152036.319::152036.341::152036.359::152036.372::152036.383::152036.39::152036.393::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.398::152036.399::152036.404::152036.407::152036.412::152036.414::152036.414::152036.414::152036.414::152036.417::152036.422::152036.425::152036.428::152036.432::152036.435::152036.437::152036.437::152036.437"/>
+ <val o="153420" v="152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.437::152036.441::152036.45::152036.46::152036.472::152036.476::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.478::152036.489::152036.543::152036.663::152036.778::152036.883::152036.971::152037.066::152037.164::152037.257::152037.361::356685::363405::370420::377575::384134::390225::396064::401696"/>
+ <val o="17d720" v="407198::412644::417883::422998::428513::435075::442229::453395::466601::479658::492177::504000::515901::527901::539997::::556036::563903::571823::579005::585326::591325::596354::600715::604992::609199::613381::617646::622539::627868::633983::640502::646650::::659328::665498::671845::678227::684766::688990::691619::694492::697849::700694::702620::704442::705572::706691::707697::708736"/>
+ <val o="1a9640" v="709545::709997::710690::712243::714255::716847::719609::722373::725158::727261"/>
+ <val o="1c7460" v="770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::770988::773086::776647::780296::783826::787426::791061::795844::802109::808801::815624::822498::829213::835508::841449::846886::851798::856665::859354::861263::863083::864985::867245::869803::872460::875221::877937::880561::883156"/>
+ <val o="1f1760" v="885657::888085::890505::893110::896194::899581::903116::906473::909677::913034::916082::918646::921093::923460::925630::927744::930053::932806::935904::939753::944540::950163::955884::961233::966673::972533::978758::985168::991668::997713::1003091::1008274::1012749::1017038::1020937::1024624::1027919::1031047::1034087::1036976::1040106::1044102::1049201::1055177::1061411::1067528::1073759::1079806"/>
+ <val o="21ba60" v="1085748::1091566::1097964::1104098::1109965::1115611::1121093::1126321::1130630::1134497::1137973::1139970::1141849::1143923::1145918::1147647::1149557::1153171::1157329::1161934::1166664::1171204::1175957::1180721::1185446::1190632::1196204::1201743::1207328::1212608::1217847::1222674::1226942::1231066::1234878::1238151::1241398::1244525::1247544::1250408::1253663::1257645::1262239::1267905::1274075::1280512::1287109::1293566"/>
+ <val o="246b70" v="1306501::1312775::1318539::1323798::1329387::1335105::1340883::1346396::1351376::1355594::1359099::1362742::1366355::1369936::1373418::1377156::1381440::1385976::1391416::1397124::1403622::1412905::1420494::1426519::1432791::1438731::1444700::1450495::1455916::1461293::1466648::1471323::1475904::1479903::1483514::1487030::1490682::1494324::1497918::1501615::1505468::1509358::1513503::1517850::1522004::1525957::1529728::1533403"/>
+ <val o="270e70" v="1537003::1541289::1546124::1551256::1556286::1561272::1565731::1569581::1572940"/>
+ </par>
+ <par memind="52513001" h="3dc1a7e0">
+ <val o="0" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="2a300" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="55410" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0"/>
+ <val o="7f710" v="0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::0::10::521::1009::1914::2329::2804::3476"/>
+ <val o="a9a10" v="4546::4682::4719::4838::5350::6165::6365::6445::6490::::6571::6643::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::6704::7208::7679::8124::8480::9010::9501::9918::10708::10960::11079::11200::11255::11459::11656::11793::12159::12159::12159::12159::12160::12179::12215::12287::12302::12884"/>
+ <val o="d4b20" v="13533::14230::15062::16204::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="fee20" v="17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492"/>
+ <val o="129120" v="17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.492::17157.493::17157.511::17157.525::17157.542::17157.558::17157.579::17157.599::17157.608::17157.611::17157.612::17157.612::17157.612::17157.612::17157.613::17157.616::17157.618::17157.623::17157.631::17157.631::17157.631::17157.631::17157.631::17157.631::17157.631::17157.632::17157.649"/>
+ <val o="153420" v="17157.669::17157.686::17157.706::17157.728::17157.752::17157.771::17157.786::17157.799::17157.812::17157.824::17157.838::17157.85::17157.861::17157.871::17157.883::17157.89::17157.89::17157.89::17157.89::17157.89::17157.89::17157.891::17157.899::17157.911::17157.918::17157.92::17157.921::17157.925::17157.932::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17157.937::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="17d720" v="17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="1a9640" v="17156::17156::17156::17156::17156::17156::17156::17156::17156::17156"/>
+ <val o="1c7460" v="26366::26648::29737::33790::37320::41038::45491::50870::56378::62066::67892::74435::81073::87748::94487::101325::108173::114671::120417::125768::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="1f1760" v="127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="21ba60" v="127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="246b70" v="127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ <val o="270e70" v="127098::127098::127098::127098::127098::127098::127098::127098::127098"/>
+ </par>
+ <par memind="34601" h="3dc1a7e0">
+ <val o="0" v="6094564::6095869::6097433::6099046::6100630::6101960::6103137::6104826::6106487::6108338::6110057::6112087::6114108::6116017::6116635::6116640::6116645::6116648::6116649::6116654::6116661::6116667::6116674::6116681::6116688::6116694::6116701::6116708::6116715::6116721::6116723::6116730::6116738::6116745::6116751::6116757::6116764::6116771::6116779::6116786::6116793::6116799::6116800::6116800::6116805::6116808::6116812::6116819"/>
+ <val o="2a300" v="6116826::6116832::6116832::6116834::6116838::6116839::6116839::6116845::6116852::6116859::6116866::6116873::6116880::6116887::6116893::6116898::6116899::6116899::6116899::6116901::6116902::6116904::6116905::6116910::6116917::6116924::6116931::6116938::6116945::6116952::6116957::6116961::6116968::::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116970::6116972::6116978::6116980::6116987::6116994"/>
+ <val o="55410" v="6117001::6117008::6117015::6117022::6117029::6117033::6117039::6117042::6117042::6117044::6117049::6117054::6117061::6117062::6117062::6117063::6117065::6117065::6117066::6117072::6117078::6117084::6117091::6117098::6117103::6117110::6117117::6117124::6117129::6117129::6117134::6117136::6117137::6117137::6117137::6117138::6117144::6117145::6117145::6117145::6117145::6117145::6117145::6117148::6117150::6117154::6117160::6117167"/>
+ <val o="7f710" v="6117174::6117181::6117189::6117196::6117203::6117210::6117216::6117219::6117220::6117220::6117222::6117228::6117235::6117239::6117241::6117244::6117244::6117244::6117244::6117244::6117247::6117248::6117252::6117259::6117266::6117273::6117280::6117287::6117293::6117297::6117303::6117304::6117305::6117309::6117316::6117323::6117330::6117336::6117340::6118095::6118936::6119299::6119300::6120117::6120419::6120867::6121692::6123308"/>
+ <val o="a9a10" v="6123938::6124106::6124765::6125691::6125784::6125785::6126129::6126129::6126129::::6126129::6126129::6126164::6126173::6126173::6126358::6126531::6126576::6126840::6127612::6128455::6128455::6128757::6129880::6129981::6129983::6130133::6130473::6130485::6130485::6130485::6130485::6130493::6130493::6130493::6130493::6130493::6130493::6130493::6130561::6130649::6130649::6130649::6130649::6130649::6130649::6130792::6132016::6133175"/>
+ <val o="d4b20" v="6134306::6134717::6135093::6135093::6135402::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135922::6135929::6136041::6136617::6137256::6137512::6137797::6138089::6138431::6139053::6139053::6139053::6139053::6139053::6139147::6139251::6139251::6139251::6139251::6139251::6139251::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139302::6139456::6140655::6141782"/>
+ <val o="fee20" v="6142609::6142828::6143032::6143032::6143032::6143032::6143032::6143032::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143036::6143039::6143056::6143056::6143382::6143545::6143545::6143545::6143545::6143545::6143545::6143545::6143545::6143587::6143713::6144135::6144783::6144816::6144816::6144816::144818.2::144818.2::144818.2::144818.2::144818.2::144818.243::144818.474::144818.48::144818.775::144819.955"/>
+ <val o="129120" v="144821.261::144822.644::144824.053::144824.584::144824.587::144824.587::144824.587::144824.62::144824.744::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.746::144824.755::144824.755::144824.755::144824.755::144824.755::144824.755::144824.755::144824.756::144824.756::144824.756::144824.756::144824.757::144824.77::144824.788::144824.796::144824.802::144824.805::144824.806::144824.806::144824.806::144824.806::144824.806::144824.806::144824.809::144824.823::144824.828"/>
+ <val o="153420" v="144824.828::144824.828::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.829::144824.834::144824.834::144824.834::144824.834::144824.835::144824.835::144824.84::144824.845::144824.849::144824.865::144824.876::144824.888::144824.889::144824.889::144824.889::144824.889::144824.889::144824.889::144824.889::144824.892::144824.896::144824.897::144824.9::144824.9::144824.9::6144824::6144824::6144824::6144824::6145000::6146702::6148995::6151298"/>
+ <val o="17d720" v="6154011::6156885::6159821::6161781::6162424::6163565::6165278::6166868::6167755::6168671::6171312::6174315::6177014::6179609::6181568::::6182076::6182567::6183863::6185122::6186668::6188906::6190037::6191016::6192577::6194274::6196029::6196810::6196855::6196952::6197681::6198548::6198657::::6199392::6200372::6200895::6201228::6201425::6201425::6202856::6205585::6209048::6211115::6212648::6215720::6219090::6221773::6224848::6228185"/>
+ <val o="1a9640" v="6231530::6233901::6235517::6237264::6239554::6241943::6244049::6246003::6248291::6250880"/>
+ <val o="1c7460" v="6269393::6269460::6269561::6269561::6270193::6271193::6271766::6271766::6271766::6272003::6273414::6273802::6274190::6275070::6275788::6275805::6275805::6275844::6276747::6277093::6277184::6277267::6277710::6278346::6279262::6280041::6281268::6282908::6284744::6286792::6289036::6291362::6293586::6295884::6298136::6300115::6302316::6302954::6303439::6303749::6303938::6304212::6304924::6305309::6305626::6305804::6306004::6306321"/>
+ <val o="1f1760" v="6306407::6306407::6306407::6306407::6306407::6306417::6306562::6306904::6307399::6309517::6311643::6312611::6313875::6314868::6315228::6315352::6315385::6315835::6316016::6316023::6316023::6316023::6316023::6316023::6316023::6316113::6316460::6316755::6317177::6318036::6318383::6319038::6319038::6319632::6320620::6322099::6323027::6323528::6323962::6323967::6323967::6324143::6325141::6325322::6325724::6326020::6327132::6327132"/>
+ <val o="21ba60" v="6327132::6327132::6328174::6328667::6328667::6328705::6329402::6330058::6330058::6330655::6331774::6332033::6332033::6332033::6332033::6332033::6332078::6332316::6332872::6332897::6332897::6332897::6332897::6333173::6333204::6333827::6334413::6334413::6334413::6334413::6334413::6334554::6334554::6334554::6334765::6334977::6335481::6335759::6335759::6335759::6335759::6335824::6335826::6335826::6335826::6335826::6335889::6336407"/>
+ <val o="246b70" v="6338047::6338719::6338729::6338729::6338729::6339065::6340354::6341766::6342723::6343432::6343924::6345002::6346115::6347018::6347048::6347050::6347091::6347091::6347091::6347091::6347406::6350200::6352077::6352150::6352150::6352150::6352150::6352150::6352150::6352150::6352331::6352331::6352638::6353193::6353695::6355019::6356915::6358952::6360430::6361352::6361420::6361420::6361420::6361420::6361420::6361420::6361420::6361420"/>
+ <val o="270e70" v="6361420::6361434::6361698::6362174::6362660::6363502::6363860::6363860::6363933"/>
+ </par>
+ <par memind="33801" h="3dc1a7e0">
+ <val o="0" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422"/>
+ <val o="2a300" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422"/>
+ <val o="55410" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422"/>
+ <val o="7f710" v="88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88179422::88180102::88181176::88181859::88181861::88181894::88181896::88181896::88181896"/>
+ <val o="a9a10" v="88182169::88182200::88182200::88182200::88182288::88183363::88183857::88184631::88186407::::88194010::88198233::88200148::88200348::88200947::88202620::88203011::88203507::88203512::88203512::88203543::88204356::88204401::88204401::88205830::88206188::88206222::88206222::88206502::88207517::88209008::88210102::88210666::88211635::88212724::88213604::88214108::88214512::88214969::88216229::88216759::88219221::88221818::88224589::88227031::88228870::88229563::88229563::88229580"/>
+ <val o="d4b20" v="88229580::88229580::88229582::88230325::88231881::88231910::88232595::88234574::88237245::88240283::88243056::88243643::88244105::88244352::88244593::88245115::88245746::88245746::88245891::88245915::88245959::88245988::88245989::88247244::88248510::88249293::88250203::88252178::88254531::88254874::88255704::88256898::88258438::88259595::88260398::88260919::88262845::88264314::88266006::88268297::88269942::88271502::88272690::88273849::88275503::88276003::88276003::88276003"/>
+ <val o="fee20" v="88276017::88276017::88276019::88276851::88278515::88280118::88281560::88283074::88283971::88285428::88286815::88287726::88288833::88289953::88291037::88293099::88295427::88296674::88297133::88297832::88298612::88299447::88299517::88300541::88301025::88301304::88301503::88302468::88304417::88306106::88307571::88308368::88308448::88308448::88308448::88309021::88309899::88310719::111188.016::111189.3::111190.088::111191.823::111192.91::111193.202::111193.473::111193.931::111193.948::111193.948"/>
+ <val o="129120" v="111193.948::111193.948::111193.948::111193.948::111194.58::111195.519::111196.735::111198.338::111199.302::111200.625::111201.775::111202.422::111203.008::111203.02::111203.032::111203.062::111203.098::111203.135::111203.171::111203.203::111203.212::111203.216::111203.221::111203.276::111203.299::111203.316::111203.335::111203.371::111203.422::111203.452::111203.457::111203.464::111203.468::111203.468::111203.468::111203.468::111203.468::111203.468::111203.469::111203.5::111203.532::111203.571::111203.606::111203.632::111203.639::111203.639::111203.639::111203.661"/>
+ <val o="153420" v="111203.671::111203.671::111203.672::111203.684::111203.715::111203.739::111203.761::111203.801::111203.837::111203.867::111203.891::111203.897::111203.904::111203.915::111203.935::111203.955::111203.962::111203.969::111203.972::111203.988::111203.997::111203.997::111204::111204.001::111204.001::111204.001::111204.001::111204.001::111204.016::111204.052::111204.063::111204.07::111204.081::111204.093::111204.097::111204.097::111204.099::111204.11::111204.128::111204.164::88312628::88314767::88316290::88317284::88317694::88317694::88317694::88317694"/>
+ <val o="17d720" v="88317694::88317694::88317694::88317694::88317698::88317700::88317713::88317713::88317713::88317713::88317778::88317778::88317778::88317778::88317778::::88320511::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88320917::88321420::88323042::88323042::88323053::88323105::::88323137::88323137::88323137::88323137::88323148::88323775::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785::88323785"/>
+ <val o="1a9640" v="88323785::88323785::88323785::88323785::88323790::88323790::88323790::88323790::88323790::88323790"/>
+ <val o="1c7460" v="88342130::88342209::88342529::88344458::88344485::88344485::88345905::88348379::88350494::88350813::88350813::88351056::88351056::88351056::88351056::88351287::88352428::88353598::88353598::88353601::88353859::88353862::88353862::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353863::88353965::88353965::88353965::88354018::88354018::88354018::88354018::88354018::88354021::88354021::88354021"/>
+ <val o="1f1760" v="88354166::88354552::88355130::88357154::88359226::88359828::88359828::88360068::88360126::88360126::88360126::88360194::88360205::88360205::88360205::88360223::88360406::88361385::88362297::88363511::88365757::88367821::88369273::88369929::88371538::88373322::88373899::88374629::88374631::88374655::88374657::88374822::88375466::88375471::88375471::88375471::88375599::88375599::88375599::88376102::88377432::88378306::88378319::88378467::88378917::88378917::88378918::88379482"/>
+ <val o="21ba60" v="88380777::88382275::88382661::88382777::88383250::88383592::88383592::88383711::88385203::88385257::88385257::88388459::88390394::88390850::88391561::88393834::88397579::88397819::88397819::88399218::88401792::88405386::88408100::88408122::88408365::88408505::88408505::88410246::88411660::88412849::88413333::88414521::88416696::88417583::88417683::88417854::88417854::88417883::88418027::88419159::88420108::88421071::88421828::88423559::88426894::88429975::88432828::88432828"/>
+ <val o="246b70" v="88432828::88432828::88434951::88439548::88440916::88441030::88441030::88441030::88441030::88441030::88441116::88441116::88441116::88441116::88441218::88441739::88442363::88443542::88445344::88448624::88451464::88451464::88451473::88451652::88451840::88452323::88453332::88455889::88458507::88460595::88460772::88462065::88462264::88462608::88462622::88462622::88462622::88462622::88462622::88462622::88462826::88463538::88464667::88466310::88468309::88471393::88474308::88477274"/>
+ <val o="270e70" v="88480378::88481157::88481766::88481766::88481766::88481766::88483340::88485626::88486118"/>
+ </par>
+ <par memind="33401" h="3dc1a7e0">
+ <val o="0" v="9437795::9441972::9446144::9450217::9454261::9458184::9462346::9467434::9473186::9480126::9487404::9494779::9501916::9508615::9510621::9510628::9510635::9510642::9510649::9510656::9510663::9510671::9510678::9510687::9510695::9510703::9510712::9510720::9510728::9510736::9510743::9510751::9510760::9510768::9510776::9510784::9510792::9510800::9510809::9510817::9510826::9510833::9510840::9510847::9510855::9510863::9510871::9510879"/>
+ <val o="2a300" v="9510888::9510896::9510904::9510912::9510920::9510928::9510935::9510944::9510952::9510960::9510968::9510976::9510984::9510993::9511001::9511009::9511016::9511023::9511030::9511038::9511045::9511053::9511061::9511069::9511078::9511086::9511095::9511103::9511112::9511121::9511129::9511137::9511144::::9511158::9511165::9511171::9511178::9511184::9511190::9511197::9511203::9511209::9511216::9511223::9511231::9511239::9511247::9511255"/>
+ <val o="55410" v="9511264::9511272::9511280::9511289::9511297::9511305::9511313::9511320::9511327::9511333::9511340::9511347::9511354::9511361::9511368::9511375::9511382::9511389::9511397::9511404::9511412::9511419::9511427::9511435::9511443::9511451::9511460::9511468::9511476::9511484::9511492::9511500::9511506::9511513::9511519::9511526::9511533::9511539::9511546::9511553::9511559::9511565::9511572::9511580::9511587::9511595::9511603::9511611"/>
+ <val o="7f710" v="9511619::9511628::9511637::9511646::9511654::9511662::9511670::9511677::9511684::9511691::9511698::9511705::9511713::9511720::9511727::9511734::9511740::9511747::9511754::9511761::9511769::9511777::9511785::9511794::9511803::9511811::9511820::9511828::9511836::9511844::9511852::9511859::9511866::9511873::9511880::9511888::9511895::9511902::9511909::9514390::9519709::9522089::9522234::9522234::9522234::9522235::9522235::9522235"/>
+ <val o="a9a10" v="9522237::9522240::9522245::9522245::9522245::9522245::9522305::9522417::9522472::::9522564::9522698::9522957::9523630::9524451::9525296::9526830::9528579::9530279::9532182::9533799::9534552::9535404::9536317::9536364::9536364::9536364::9536364::9536364::9536364::9536365::9536365::9536366::9536378::9536405::9536445::9536452::9536454::9536460::9536501::9536855::9537087::9537318::9537474::9537525::9537548::9537581::9537677::9537678"/>
+ <val o="d4b20" v="9537678::9537678::9537678::9537678::9537736::9538143::9538893::9540546::9542875::9545324::9547869::9550788::9553582::9556453::9559237::9562025::9565951::9569947::9573692::9577040::9580032::9582462::9584347::9585562::9586226::9586928::9587579::9588077::9588974::9591192::9593773::9597560::9601808::9606160::9610756::9615226::9619694::9624409::9629124::9633493::9637849::9641922::9645776::9649316::9652378::9655502::9658479::9661021"/>
+ <val o="fee20" v="9663237::9665228::9667187::9668925::9670776::9673297::9676502::9680673::9683191::9687690::9692279::9696481::9700679::9704855::9709161::9713542::9717867::9722167::9726451::9730363::9733859::9736754::9739475::9741440::9743260::9745064::9746883::9748517::9750210::9752619::9755730::9759949::9764686::9769374::9774465::9778741::9783023::9787135::89775.123::89779.04::89783.036::89786.633::89790.091::89793.369::89796.324::89798.585::89800.635::89802.621"/>
+ <val o="129120" v="89804.381::89806.063::89807.752::89809.284::89810.86::89813.012::89815.607::89818.79::89822.154::89824.714::89827.425::89830.508::89832.673::89832.71::89832.728::89832.745::89832.767::89832.785::89832.798::89832.809::89832.817::89832.82::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.825::89832.826::89832.831::89832.834::89832.838::89832.84::89832.84::89832.84::89832.84::89832.843::89832.848::89832.851::89832.854::89832.858::89832.861::89832.864::89832.864::89832.864"/>
+ <val o="153420" v="89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.864::89832.868::89832.877::89832.887::89832.899::89832.903::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.904::89832.916::89832.97::89833.09::89833.204::89833.309::89833.397::89833.492::89833.59::89833.683::89833.788::9794482::9801201::9808217::9815372::9821930::9828022::9833861::9839493"/>
+ <val o="17d720" v="9844996::9850441::9855681::9860795::9866311::9872873::9880027::9891193::9904398::9917454::9929974::9941796::9953698::9965698::9977794::::9993834::10001701::10009621::10016803::10023124::10029123::10034151::10038513::10042789::10046996::10051178::10055443::10060336::10065665::10071780::10078299::10084446::::10097123::10103293::10109641::10116023::10122562::10126785::10129414::10132288::10135645::10138489::10140416::10142238::10143368::10144487::10145494::10146532"/>
+ <val o="1a9640" v="10147341::10147793::10148486::10150039::10152051::10154643::10157406::10160170::10162955::10165058"/>
+ <val o="1c7460" v="10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10208784::10210882::10214444::10218093::10221623::10225223::10228858::10233641::10239906::10246598::10253420::10260295::10267010::10273305::10279245::10284682::10289594::10294461::10297150::10299060::10300879::10302781::10305041::10307600::10310256::10313017::10315732::10318357::10320952"/>
+ <val o="1f1760" v="10323453::10325881::10328301::10330906::10333991::10337378::10340913::10344270::10347474::10350831::10353880::10356443::10358890::10361257::10363427::10365542::10367850::10370602::10373700::10377548::10382335::10387959::10393679::10399028::10404469::10410328::10416554::10422964::10429464::10435510::10440887::10446070::10450544::10454833::10458732::10462419::10465714::10468842::10471882::10474772::10477901::10481897::10486997::10492973::10499207::10505324::10511555::10517602"/>
+ <val o="21ba60" v="10523544::10529362::10535760::10541894::10547762::10553407::10558890::10564118::10568426::10572294::10575771::10577767::10579647::10581720::10583716::10585444::10587354::10590968::10595126::10599731::10604460::10609000::10613753::10618516::10623241::10628428::10633999::10639539::10645125::10650405::10655643::10660471::10664738::10668862::10672675::10675947::10679195::10682322::10685340::10688204::10691460::10695443::10700037::10705702::10711873::10718309::10724907::10731364"/>
+ <val o="246b70" v="10744298::10750573::10756336::10761594::10767184::10772901::10778679::10784193::10789173::10793391::10796895::10800538::10804151::10807732::10811214::10814952::10819236::10823772::10829212::10834920::10841418::10850701::10858289::10864315::10870586::10876526::10882496::10888291::10893713::10899090::10904444::10909119::10913700::10917699::10921310::10924826::10928478::10932121::10935715::10939412::10943265::10947154::10951299::10955647::10959802::10963755::10967526::10971201"/>
+ <val o="270e70" v="10974801::10979086::10983922::10989053::10994083::10999069::11003529::11007379::11010738"/>
+ </par>
+ <par memind="33001" h="3dc1a7e0">
+ <val o="0" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576"/>
+ <val o="2a300" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576"/>
+ <val o="55410" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576"/>
+ <val o="7f710" v="38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612576::38612587::38613097::38613585::38614490::38614906::38615380::38616053"/>
+ <val o="a9a10" v="38617123::38617258::38617296::38617414::38617926::38618741::38618942::38619021::38619066::::38619147::38619219::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619281::38619786::38620257::38620702::38621058::38621587::38622078::38622494::38623284::38623536::38623655::38623776::38623831::38624035::38624232::38624369::38624735::38624735::38624735::38624735::38624737::38624755::38624791::38624863::38624879::38625460"/>
+ <val o="d4b20" v="38626110::38626807::38627639::38628781::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732"/>
+ <val o="fee20" v="38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::38629732::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398"/>
+ <val o="129120" v="229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.398::229734.399::229734.417::229734.431::229734.448::229734.465::229734.485::229734.505::229734.514::229734.517::229734.517::229734.517::229734.517::229734.517::229734.518::229734.521::229734.523::229734.528::229734.536::229734.536::229734.536::229734.536::229734.536::229734.536::229734.536::229734.537::229734.554"/>
+ </par>
+ </device>
+ </select>
+ </data>
+</electroxml>
diff --git a/test/att5 b/test/att5
new file mode 100644
index 0000000..2c05105
--- /dev/null
+++ b/test/att5
@@ -0,0 +1,73 @@
+<!DOCTYPE doc [<!ATTLIST normId attr NMTOKENS #IMPLIED>]>
+<doc>
+ <!-- no normalization -->
+ <norm attr=' '/>
+ <norm attr='
+ foo bar '/>
+ <norm attr='
+
+foobar'/>
+ <norm attr=' foo bar
+'/>
+ <norm attr='foobar
+
+'/>
+ <norm attr=' &amp; '/>
+ <norm attr='
+ foo&amp;bar '/>
+ <norm attr='
+
+foobar&amp;'/>
+ <norm attr='&amp;foo bar
+'/>
+ <norm attr='foobar
+
+&amp;'/>
+ <norm attr=' &lt; '/>
+ <norm attr='
+ foo&lt;bar '/>
+ <norm attr='
+
+foobar&lt;'/>
+ <norm attr='&lt;foo bar
+'/>
+ <norm attr='foobar
+
+&lt;'/>
+ <norm attr=' &#x20;&#13;&#xa;&#9; '/>
+ <!-- normalization -->
+ <normId attr=' '/>
+ <normId attr='
+ foo bar '/>
+ <normId attr='
+
+foobar'/>
+ <normId attr=' foo bar
+'/>
+ <normId attr='foobar
+
+'/>
+ <normId attr=' &amp; '/>
+ <normId attr='
+ foo&amp;bar '/>
+ <normId attr='
+
+foobar&amp;'/>
+ <normId attr='&amp;foo bar
+'/>
+ <normId attr='foobar
+
+&amp;'/>
+ <normId attr=' &lt; '/>
+ <normId attr='
+ foo&lt;bar '/>
+ <normId attr='
+
+foobar&lt;'/>
+ <normId attr='&lt;foo bar
+'/>
+ <normId attr='foobar
+
+&lt;'/>
+ <normId attr=' &#13;&#xa;&#9; '/> <!-- PBM serializing back -->
+</doc>
diff --git a/test/att6 b/test/att6
new file mode 100644
index 0000000..79508e9
--- /dev/null
+++ b/test/att6
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Invoice xmlns:ccts="urn:oasis:names:tc:ubl:CoreComponentParameters:1.0:0.70" xmlns:cct="urn:oasis:names:tc:ubl:CoreComponentTypes:1.0:0.70" xmlns:cat="urn:oasis:names:tc:ubl:CommonAggregateTypes:1.0:0.70" xmlns="urn:oasis:names:tc:ubl:Invoice:1.0:0.70">
+ <cat:ReferencedOrder>
+ <cat:SellersOrderID schemeID="pvalue->ReferencedOrder.SellersOrderID.schemeID" schemeAgencyID="pvalue->ReferencedOrder.SellersOrderID.schemeAgencyID" schemeVersionID="pvalue->ReferencedOrder.SellersOrderID.schemeVersionID" schemeAgencySchemeID="pvalue->ReferencedOrder.SellersOrderID.schemeAgencySchemeID" schemeAgencySchemeAgencyID="pvalue->ReferencedOrder.SellersOrderID.schemeAgencySchemeAgencyID" schemeDataURI="pvalue->ReferencedOrder.SellersOrderID.schemeDataURI" schemeURI="pvalue->ReferencedOrder.SellersOrderID.schemeURI" UID="pvalue->ReferencedOrder.SellersOrderID.UID" UIDRef="pvalue->ReferencedOrder.SellersOrderID.UIDRef" UIDRefs="pvalue-&gt;ReferencedOrder.SellersOrderID.UIDRefs0" language="pvalue->ReferencedOrder.SellersOrderID.language">pvalue-&gt;ReferencedOrder.SellersOrderID</cat:SellersOrderID>
+ </cat:ReferencedOrder>
+</Invoice> \ No newline at end of file
diff --git a/test/att7 b/test/att7
new file mode 100644
index 0000000..cd31c3d
--- /dev/null
+++ b/test/att7
@@ -0,0 +1,10 @@
+<!DOCTYPE x [
+<!ELEMENT x (test*)>
+<!ELEMENT test EMPTY>
+<!ATTLIST test att CDATA "attvalue">
+<!ENTITY test.ent "<test/>">
+]>
+<x>
+ <test/>
+ &test.ent;
+</x>
diff --git a/test/att8 b/test/att8
new file mode 100644
index 0000000..2cb6f56
--- /dev/null
+++ b/test/att8
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><ino:response xmlns:ino="http://namespaces.softwareag.com/tamino/response2" xmlns:xql="http://metalab.unc.edu/xql/" ino:sessionid="556" ino:sessionkey="1590469677"><xql:query>/bsk:DocPart[@docId=&apos;20040308152601345236&apos; and @docPartNo=1]</xql:query><ino:message ino:returnvalue="0"><ino:messageline>XQL Request processing</ino:messageline></ino:message><xql:result><bsk:DocPart docId="20040308152601345236" docPartNo="1" ino:id="15290" xmlns:bsk="http://www.heitec.net/sara4/tamino/basket"><bsk:File name="4898WPZEO2M65" size="75195"> </bsk:File></bsk:DocPart></xql:result><ino:message ino:returnvalue="0"><ino:messageline>XQL Request processed</ino:messageline></ino:message></ino:response>
diff --git a/test/attrib.xml b/test/attrib.xml
new file mode 100644
index 0000000..5be33fa
--- /dev/null
+++ b/test/attrib.xml
@@ -0,0 +1 @@
+<item title="Icrontic.com - Warning: Breakdancing midget with tourette&apos;s syndrome on-board&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;" url="http://www.icrontic.com/" first_time="985034339" last_time="985034339" visits="1"/>
diff --git a/test/automata/a b/test/automata/a
new file mode 100644
index 0000000..e1f3e91
--- /dev/null
+++ b/test/automata/a
@@ -0,0 +1,14 @@
+#
+# tests just "a"
+#
+t 0 1 a
+f 1
+-------
+a
+=>
+a
+a
+=>
+=>
+b
+=>
diff --git a/test/automata/aba b/test/automata/aba
new file mode 100644
index 0000000..ee9a873
--- /dev/null
+++ b/test/automata/aba
@@ -0,0 +1,26 @@
+#
+# Tests a[ab]*
+#
+t 0 1 a
+t 1 1 a
+t 1 1 b
+f 1
+-------
+a
+=>
+a
+a
+=>
+a
+b
+a
+b
+a
+b
+=>
+b
+=>
+a
+c
+=>
+=>
diff --git a/test/automata/abaa b/test/automata/abaa
new file mode 100644
index 0000000..7862ba2
--- /dev/null
+++ b/test/automata/abaa
@@ -0,0 +1,43 @@
+#
+# Tests: a[ab]*a{2,3}
+#
+t 0 1 a
+t 1 1 a
+t 1 1 b
+c 1 2 2 3 a
+f 2
+-------
+a
+a
+a
+=>
+# Pass
+a
+b
+a
+a
+=>
+# Pass
+a
+a
+a
+a
+a
+a
+a
+a
+a
+=>
+# Pass
+a
+b
+a
+=>
+# Fail
+a
+b
+a
+a
+b
+=>
+# Fail
diff --git a/test/automata/abba b/test/automata/abba
new file mode 100644
index 0000000..86c08f1
--- /dev/null
+++ b/test/automata/abba
@@ -0,0 +1,30 @@
+#
+# Tests ab*a with an eliminated epsilon transition
+#
+t 0 1 a
+t 1 2 b
+e 1 2
+t 2 2 b
+t 2 3 a
+f 3
+-------
+a
+a
+=>
+# Pass
+a
+b
+b
+a
+=>
+# Pass
+a
+b
+=>
+# Fail
+a
+b
+a
+b
+=>
+# Fail
diff --git a/test/automata/po b/test/automata/po
new file mode 100644
index 0000000..592b8c9
--- /dev/null
+++ b/test/automata/po
@@ -0,0 +1,19 @@
+#
+# purchaseOrder
+#
+t 0 1 shipTo
+t 1 2 billTo
+t 2 3 comment
+t 3 4 items
+e 2 3
+f 4
+-------
+shipTo
+billTo
+comment
+items
+=>
+shipTo
+billTo
+items
+=>
diff --git a/test/bigentname.xml b/test/bigentname.xml
new file mode 100644
index 0000000..aa6e336
--- /dev/null
+++ b/test/bigentname.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ENTITY very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name '"Yes"' >
+<!ENTITY WhatHeSaid "He said &very_big_entity_name01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_very_big_ent_name;" >
+]>
+<doc>&WhatHeSaid;</doc>
diff --git a/test/bigname.xml b/test/bigname.xml
new file mode 100644
index 0000000..6c303e4
--- /dev/null
+++ b/test/bigname.xml
@@ -0,0 +1 @@
+<this_is_a_very_large_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name/>
diff --git a/test/bigname2.xml b/test/bigname2.xml
new file mode 100644
index 0000000..c67cda9
--- /dev/null
+++ b/test/bigname2.xml
@@ -0,0 +1 @@
+<this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix:start_nc_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name xmlns:this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix="http://www.example.com/testns/"/>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-09.xml b/test/c14n/exc-without-comments/merlin-c14n-two-09.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-09.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-09.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-09.xpath
new file mode 100644
index 0000000..717b66a
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-09.xpath
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- everything -->
+ ancestor-or-self::bar:Something
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-10.xml b/test/c14n/exc-without-comments/merlin-c14n-two-10.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-10.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-10.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-10.xpath
new file mode 100644
index 0000000..8ea2795
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-10.xpath
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only text, elements or directly-used namespace nodes -->
+ ancestor-or-self::bar:Something and
+ ((name() != "bar") or parent::bar:Something) and
+ ((name() != "foo") or parent::foo:Something) and
+ ((name() != "baz") or parent::baz:Something) and
+ ((name() != "") or self::text())
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-11.xml b/test/c14n/exc-without-comments/merlin-c14n-two-11.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-11.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-11.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-11.xpath
new file mode 100644
index 0000000..37d65e0
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-11.xpath
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only text, elements or directly-used namespace nodes -->
+ ancestor-or-self::bar:Something and
+ (self::text() or
+ (namespace-uri() != "") or
+ (string(self::node()) = namespace-uri(parent::node())))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-12.xml b/test/c14n/exc-without-comments/merlin-c14n-two-12.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-12.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-12.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-12.xpath
new file mode 100644
index 0000000..ed8ae68
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-12.xpath
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only text, elements, or directly-used namespace nodes but not foo:Something -->
+ ancestor-or-self::bar:Something and
+ not (self::foo:Something) and
+ (self::text() or
+ (namespace-uri() != "") or
+ (string(self::node()) = namespace-uri(parent::node())))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-13.xml b/test/c14n/exc-without-comments/merlin-c14n-two-13.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-13.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-13.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-13.xpath
new file mode 100644
index 0000000..7d0170b
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-13.xpath
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- no namespace nodes; I am not in my parent's namespace axis -->
+ ancestor-or-self::bar:Something and
+ (count(parent::node()/namespace::*) !=
+ count(parent::node()/namespace::* | self::node()))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-14.xml b/test/c14n/exc-without-comments/merlin-c14n-two-14.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-14.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-14.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-14.xpath
new file mode 100644
index 0000000..2732894
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-14.xpath
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- no namespace nodes; I am text or have nonempty namespace URI -->
+ ancestor-or-self::bar:Something and
+ (self::text() or
+ (namespace-uri() != ""))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-15.xml b/test/c14n/exc-without-comments/merlin-c14n-two-15.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-15.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-15.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-15.xpath
new file mode 100644
index 0000000..ae6589e
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-15.xpath
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only namespace nodes -->
+ ancestor-or-self::bar:Something and
+ (count(parent::node()/namespace::*) =
+ count(parent::node()/namespace::* | self::node()))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-16.xml b/test/c14n/exc-without-comments/merlin-c14n-two-16.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-16.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-16.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-16.xpath
new file mode 100644
index 0000000..bdca528
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-16.xpath
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only directly-used namespace nodes -->
+ ancestor-or-self::bar:Something and
+ (string(self::node()) = namespace-uri(parent::node()))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-17.xml b/test/c14n/exc-without-comments/merlin-c14n-two-17.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-17.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-17.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-17.xpath
new file mode 100644
index 0000000..24fdd3f
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-17.xpath
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- no namespace nodes but the default on alternate elements -->
+ ancestor-or-self::bar:Something and
+ (self::text() or
+ (namespace-uri() != "") or
+ ((name() = "") and
+ ((count(ancestor-or-self::node()) mod 2) = 1)))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-18.ns b/test/c14n/exc-without-comments/merlin-c14n-two-18.ns
new file mode 100644
index 0000000..3886aed
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-18.ns
@@ -0,0 +1 @@
+#default \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-18.xml b/test/c14n/exc-without-comments/merlin-c14n-two-18.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-18.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-18.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-18.xpath
new file mode 100644
index 0000000..717b66a
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-18.xpath
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- everything -->
+ ancestor-or-self::bar:Something
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-19.ns b/test/c14n/exc-without-comments/merlin-c14n-two-19.ns
new file mode 100644
index 0000000..3886aed
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-19.ns
@@ -0,0 +1 @@
+#default \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-19.xml b/test/c14n/exc-without-comments/merlin-c14n-two-19.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-19.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-19.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-19.xpath
new file mode 100644
index 0000000..8ea2795
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-19.xpath
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only text, elements or directly-used namespace nodes -->
+ ancestor-or-self::bar:Something and
+ ((name() != "bar") or parent::bar:Something) and
+ ((name() != "foo") or parent::foo:Something) and
+ ((name() != "baz") or parent::baz:Something) and
+ ((name() != "") or self::text())
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-20.ns b/test/c14n/exc-without-comments/merlin-c14n-two-20.ns
new file mode 100644
index 0000000..3886aed
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-20.ns
@@ -0,0 +1 @@
+#default \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-20.xml b/test/c14n/exc-without-comments/merlin-c14n-two-20.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-20.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-20.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-20.xpath
new file mode 100644
index 0000000..37d65e0
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-20.xpath
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only text, elements or directly-used namespace nodes -->
+ ancestor-or-self::bar:Something and
+ (self::text() or
+ (namespace-uri() != "") or
+ (string(self::node()) = namespace-uri(parent::node())))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-21.ns b/test/c14n/exc-without-comments/merlin-c14n-two-21.ns
new file mode 100644
index 0000000..3886aed
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-21.ns
@@ -0,0 +1 @@
+#default \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-21.xml b/test/c14n/exc-without-comments/merlin-c14n-two-21.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-21.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-21.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-21.xpath
new file mode 100644
index 0000000..ed8ae68
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-21.xpath
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only text, elements, or directly-used namespace nodes but not foo:Something -->
+ ancestor-or-self::bar:Something and
+ not (self::foo:Something) and
+ (self::text() or
+ (namespace-uri() != "") or
+ (string(self::node()) = namespace-uri(parent::node())))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-22.ns b/test/c14n/exc-without-comments/merlin-c14n-two-22.ns
new file mode 100644
index 0000000..3886aed
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-22.ns
@@ -0,0 +1 @@
+#default \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-22.xml b/test/c14n/exc-without-comments/merlin-c14n-two-22.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-22.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-22.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-22.xpath
new file mode 100644
index 0000000..7d0170b
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-22.xpath
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- no namespace nodes; I am not in my parent's namespace axis -->
+ ancestor-or-self::bar:Something and
+ (count(parent::node()/namespace::*) !=
+ count(parent::node()/namespace::* | self::node()))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-23.ns b/test/c14n/exc-without-comments/merlin-c14n-two-23.ns
new file mode 100644
index 0000000..3886aed
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-23.ns
@@ -0,0 +1 @@
+#default \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-23.xml b/test/c14n/exc-without-comments/merlin-c14n-two-23.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-23.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-23.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-23.xpath
new file mode 100644
index 0000000..2732894
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-23.xpath
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- no namespace nodes; I am text or have nonempty namespace URI -->
+ ancestor-or-self::bar:Something and
+ (self::text() or
+ (namespace-uri() != ""))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-24.ns b/test/c14n/exc-without-comments/merlin-c14n-two-24.ns
new file mode 100644
index 0000000..3886aed
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-24.ns
@@ -0,0 +1 @@
+#default \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-24.xml b/test/c14n/exc-without-comments/merlin-c14n-two-24.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-24.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-24.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-24.xpath
new file mode 100644
index 0000000..ae6589e
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-24.xpath
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only namespace nodes -->
+ ancestor-or-self::bar:Something and
+ (count(parent::node()/namespace::*) =
+ count(parent::node()/namespace::* | self::node()))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-25.ns b/test/c14n/exc-without-comments/merlin-c14n-two-25.ns
new file mode 100644
index 0000000..3886aed
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-25.ns
@@ -0,0 +1 @@
+#default \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-25.xml b/test/c14n/exc-without-comments/merlin-c14n-two-25.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-25.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-25.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-25.xpath
new file mode 100644
index 0000000..bdca528
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-25.xpath
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only directly-used namespace nodes -->
+ ancestor-or-self::bar:Something and
+ (string(self::node()) = namespace-uri(parent::node()))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-26.ns b/test/c14n/exc-without-comments/merlin-c14n-two-26.ns
new file mode 100644
index 0000000..3886aed
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-26.ns
@@ -0,0 +1 @@
+#default \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-26.xml b/test/c14n/exc-without-comments/merlin-c14n-two-26.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-26.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/exc-without-comments/merlin-c14n-two-26.xpath b/test/c14n/exc-without-comments/merlin-c14n-two-26.xpath
new file mode 100644
index 0000000..24fdd3f
--- /dev/null
+++ b/test/c14n/exc-without-comments/merlin-c14n-two-26.xpath
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- no namespace nodes but the default on alternate elements -->
+ ancestor-or-self::bar:Something and
+ (self::text() or
+ (namespace-uri() != "") or
+ ((name() = "") and
+ ((count(ancestor-or-self::node()) mod 2) = 1)))
+ ]
+</XPath>
diff --git a/test/c14n/exc-without-comments/test-0.xml b/test/c14n/exc-without-comments/test-0.xml
new file mode 100644
index 0000000..c7c42d9
--- /dev/null
+++ b/test/c14n/exc-without-comments/test-0.xml
@@ -0,0 +1,18 @@
+<!DOCTYPE doc [<!ATTLIST e9 attr CDATA "default">]>
+<doc xmlns:foo="http://www.bar.org" xml:base="http://www.example.org/2002/">
+ <e1 />
+ <e2 ></e2>
+ <e3 name = "elem3" id="elem3" />
+ <e4 name="elem4" id="elem4" ></e4>
+ <e5 a:attr="out" b:attr="sorted" attr2="all" attr="I'm"
+ xmlns:b="http://www.ietf.org"
+ xmlns:a="http://www.w3.org"
+ xmlns="http://example.org"/>
+ <e6 xmlns="" test="../baz" xmlns:a="http://www.w3.org">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="" xmlns:a="http://www.w3.org" a:foo="bar">
+ <e9 xmlns="" xmlns:a="http://www.ietf.org"/>
+ </e8>
+ </e7>
+ </e6>
+</doc>
diff --git a/test/c14n/exc-without-comments/test-0.xpath b/test/c14n/exc-without-comments/test-0.xpath
new file mode 100644
index 0000000..faa0070
--- /dev/null
+++ b/test/c14n/exc-without-comments/test-0.xpath
@@ -0,0 +1,3 @@
+<XPath>
+(//. | //@* | //namespace::*)[ancestor-or-self::e6]
+</XPath> \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/test-1.ns b/test/c14n/exc-without-comments/test-1.ns
new file mode 100644
index 0000000..2e65efe
--- /dev/null
+++ b/test/c14n/exc-without-comments/test-1.ns
@@ -0,0 +1 @@
+a \ No newline at end of file
diff --git a/test/c14n/exc-without-comments/test-1.xml b/test/c14n/exc-without-comments/test-1.xml
new file mode 100644
index 0000000..c7c42d9
--- /dev/null
+++ b/test/c14n/exc-without-comments/test-1.xml
@@ -0,0 +1,18 @@
+<!DOCTYPE doc [<!ATTLIST e9 attr CDATA "default">]>
+<doc xmlns:foo="http://www.bar.org" xml:base="http://www.example.org/2002/">
+ <e1 />
+ <e2 ></e2>
+ <e3 name = "elem3" id="elem3" />
+ <e4 name="elem4" id="elem4" ></e4>
+ <e5 a:attr="out" b:attr="sorted" attr2="all" attr="I'm"
+ xmlns:b="http://www.ietf.org"
+ xmlns:a="http://www.w3.org"
+ xmlns="http://example.org"/>
+ <e6 xmlns="" test="../baz" xmlns:a="http://www.w3.org">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="" xmlns:a="http://www.w3.org" a:foo="bar">
+ <e9 xmlns="" xmlns:a="http://www.ietf.org"/>
+ </e8>
+ </e7>
+ </e6>
+</doc>
diff --git a/test/c14n/exc-without-comments/test-1.xpath b/test/c14n/exc-without-comments/test-1.xpath
new file mode 100644
index 0000000..faa0070
--- /dev/null
+++ b/test/c14n/exc-without-comments/test-1.xpath
@@ -0,0 +1,3 @@
+<XPath>
+(//. | //@* | //namespace::*)[ancestor-or-self::e6]
+</XPath> \ No newline at end of file
diff --git a/test/c14n/with-comments/doc.dtd b/test/c14n/with-comments/doc.dtd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/c14n/with-comments/doc.dtd
diff --git a/test/c14n/with-comments/example-1.xml b/test/c14n/with-comments/example-1.xml
new file mode 100644
index 0000000..ed450c7
--- /dev/null
+++ b/test/c14n/with-comments/example-1.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+
+<?xml-stylesheet href="doc.xsl"
+ type="text/xsl" ?>
+
+<!DOCTYPE doc SYSTEM "doc.dtd">
+
+<doc>Hello, world!<!-- Comment 1 --></doc>
+
+<?pi-without-data ?>
+
+<!-- Comment 2 -->
+
+<!-- Comment 3 -->
diff --git a/test/c14n/with-comments/example-2.xml b/test/c14n/with-comments/example-2.xml
new file mode 100644
index 0000000..74eeea1
--- /dev/null
+++ b/test/c14n/with-comments/example-2.xml
@@ -0,0 +1,11 @@
+<doc>
+ <clean> </clean>
+ <dirty> A B </dirty>
+ <mixed>
+ A
+ <clean> </clean>
+ B
+ <dirty> A B </dirty>
+ C
+ </mixed>
+</doc>
diff --git a/test/c14n/with-comments/example-3.xml b/test/c14n/with-comments/example-3.xml
new file mode 100644
index 0000000..a7a1950
--- /dev/null
+++ b/test/c14n/with-comments/example-3.xml
@@ -0,0 +1,18 @@
+<!DOCTYPE doc [<!ATTLIST e9 attr CDATA "default">]>
+<doc>
+ <e1 />
+ <e2 ></e2>
+ <e3 name = "elem3" id="elem3" />
+ <e4 name="elem4" id="elem4" ></e4>
+ <e5 a:attr="out" b:attr="sorted" attr2="all" attr="I'm"
+ xmlns:b="http://www.ietf.org"
+ xmlns:a="http://www.w3.org"
+ xmlns="http://www.uvic.ca"/>
+ <e6 xmlns="" xmlns:a="http://www.w3.org">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="" xmlns:a="http://www.w3.org">
+ <e9 xmlns="" xmlns:a="http://www.ietf.org"/>
+ </e8>
+ </e7>
+ </e6>
+</doc>
diff --git a/test/c14n/with-comments/example-4.xml b/test/c14n/with-comments/example-4.xml
new file mode 100644
index 0000000..3fba138
--- /dev/null
+++ b/test/c14n/with-comments/example-4.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE doc [<!ATTLIST normId id ID #IMPLIED>]>
+<doc>
+ <text>First line&#x0d;&#10;Second line</text>
+ <value>&#x32;</value>
+ <compute><![CDATA[value>"0" && value<"10" ?"valid":"error"]]></compute>
+ <compute expr='value>"0" &amp;&amp; value&lt;"10" ?"valid":"error"'>valid</compute>
+ <norm attr=' &apos; &#x20;&#13;&#xa;&#9; &apos; '/>
+ <normId id=' &apos; &#x20;&#13;&#xa;&#9; &apos; '/>
+</doc>
diff --git a/test/c14n/with-comments/example-5.xml b/test/c14n/with-comments/example-5.xml
new file mode 100644
index 0000000..92c5322
--- /dev/null
+++ b/test/c14n/with-comments/example-5.xml
@@ -0,0 +1,12 @@
+<!DOCTYPE doc [
+<!ATTLIST doc attrExtEnt ENTITY #IMPLIED>
+<!ENTITY ent1 "Hello">
+<!ENTITY ent2 SYSTEM "world.txt">
+<!ENTITY entExt SYSTEM "earth.gif" NDATA gif>
+<!NOTATION gif SYSTEM "viewgif.exe">
+]>
+<doc attrExtEnt="entExt">
+ &ent1;, &ent2;!
+</doc>
+
+<!-- Let world.txt contain "world" (excluding the quotes) -->
diff --git a/test/c14n/with-comments/example-6.xml b/test/c14n/with-comments/example-6.xml
new file mode 100644
index 0000000..31e2071
--- /dev/null
+++ b/test/c14n/with-comments/example-6.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<doc>&#169;</doc>
diff --git a/test/c14n/with-comments/example-7.xml b/test/c14n/with-comments/example-7.xml
new file mode 100644
index 0000000..41171cb
--- /dev/null
+++ b/test/c14n/with-comments/example-7.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE doc [
+<!ATTLIST e2 xml:space (default|preserve) 'preserve'>
+<!ATTLIST e3 id ID #IMPLIED>
+]>
+<doc xmlns="http://www.ietf.org" xmlns:w3c="http://www.w3.org">
+ <e1>
+ <e2 xmlns="">
+ <e3 id="E3"/>
+ </e2>
+ </e1>
+</doc>
diff --git a/test/c14n/with-comments/example-7.xpath b/test/c14n/with-comments/example-7.xpath
new file mode 100644
index 0000000..84ddb08
--- /dev/null
+++ b/test/c14n/with-comments/example-7.xpath
@@ -0,0 +1,10 @@
+<XPath xmlns:ietf="http://www.ietf.org" >
+ (//.|//@*|//namespace::*)
+ [
+ self::ietf:e1
+ or
+ (parent::ietf:e1 and not(self::text() or self::e2))
+ or
+ count(id("E3")|ancestor-or-self::node()) = count(ancestor-or-self::node())
+ ]
+</XPath> \ No newline at end of file
diff --git a/test/c14n/with-comments/world.txt b/test/c14n/with-comments/world.txt
new file mode 100644
index 0000000..04fea06
--- /dev/null
+++ b/test/c14n/with-comments/world.txt
@@ -0,0 +1 @@
+world \ No newline at end of file
diff --git a/test/c14n/without-comments/doc.dtd b/test/c14n/without-comments/doc.dtd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/c14n/without-comments/doc.dtd
diff --git a/test/c14n/without-comments/example-1.xml b/test/c14n/without-comments/example-1.xml
new file mode 100644
index 0000000..ed450c7
--- /dev/null
+++ b/test/c14n/without-comments/example-1.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+
+<?xml-stylesheet href="doc.xsl"
+ type="text/xsl" ?>
+
+<!DOCTYPE doc SYSTEM "doc.dtd">
+
+<doc>Hello, world!<!-- Comment 1 --></doc>
+
+<?pi-without-data ?>
+
+<!-- Comment 2 -->
+
+<!-- Comment 3 -->
diff --git a/test/c14n/without-comments/example-2.xml b/test/c14n/without-comments/example-2.xml
new file mode 100644
index 0000000..74eeea1
--- /dev/null
+++ b/test/c14n/without-comments/example-2.xml
@@ -0,0 +1,11 @@
+<doc>
+ <clean> </clean>
+ <dirty> A B </dirty>
+ <mixed>
+ A
+ <clean> </clean>
+ B
+ <dirty> A B </dirty>
+ C
+ </mixed>
+</doc>
diff --git a/test/c14n/without-comments/example-3.xml b/test/c14n/without-comments/example-3.xml
new file mode 100644
index 0000000..a7a1950
--- /dev/null
+++ b/test/c14n/without-comments/example-3.xml
@@ -0,0 +1,18 @@
+<!DOCTYPE doc [<!ATTLIST e9 attr CDATA "default">]>
+<doc>
+ <e1 />
+ <e2 ></e2>
+ <e3 name = "elem3" id="elem3" />
+ <e4 name="elem4" id="elem4" ></e4>
+ <e5 a:attr="out" b:attr="sorted" attr2="all" attr="I'm"
+ xmlns:b="http://www.ietf.org"
+ xmlns:a="http://www.w3.org"
+ xmlns="http://www.uvic.ca"/>
+ <e6 xmlns="" xmlns:a="http://www.w3.org">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="" xmlns:a="http://www.w3.org">
+ <e9 xmlns="" xmlns:a="http://www.ietf.org"/>
+ </e8>
+ </e7>
+ </e6>
+</doc>
diff --git a/test/c14n/without-comments/example-4.xml b/test/c14n/without-comments/example-4.xml
new file mode 100644
index 0000000..3fba138
--- /dev/null
+++ b/test/c14n/without-comments/example-4.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE doc [<!ATTLIST normId id ID #IMPLIED>]>
+<doc>
+ <text>First line&#x0d;&#10;Second line</text>
+ <value>&#x32;</value>
+ <compute><![CDATA[value>"0" && value<"10" ?"valid":"error"]]></compute>
+ <compute expr='value>"0" &amp;&amp; value&lt;"10" ?"valid":"error"'>valid</compute>
+ <norm attr=' &apos; &#x20;&#13;&#xa;&#9; &apos; '/>
+ <normId id=' &apos; &#x20;&#13;&#xa;&#9; &apos; '/>
+</doc>
diff --git a/test/c14n/without-comments/example-5.xml b/test/c14n/without-comments/example-5.xml
new file mode 100644
index 0000000..92c5322
--- /dev/null
+++ b/test/c14n/without-comments/example-5.xml
@@ -0,0 +1,12 @@
+<!DOCTYPE doc [
+<!ATTLIST doc attrExtEnt ENTITY #IMPLIED>
+<!ENTITY ent1 "Hello">
+<!ENTITY ent2 SYSTEM "world.txt">
+<!ENTITY entExt SYSTEM "earth.gif" NDATA gif>
+<!NOTATION gif SYSTEM "viewgif.exe">
+]>
+<doc attrExtEnt="entExt">
+ &ent1;, &ent2;!
+</doc>
+
+<!-- Let world.txt contain "world" (excluding the quotes) -->
diff --git a/test/c14n/without-comments/example-6.xml b/test/c14n/without-comments/example-6.xml
new file mode 100644
index 0000000..31e2071
--- /dev/null
+++ b/test/c14n/without-comments/example-6.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<doc>&#169;</doc>
diff --git a/test/c14n/without-comments/example-7.xml b/test/c14n/without-comments/example-7.xml
new file mode 100644
index 0000000..41171cb
--- /dev/null
+++ b/test/c14n/without-comments/example-7.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE doc [
+<!ATTLIST e2 xml:space (default|preserve) 'preserve'>
+<!ATTLIST e3 id ID #IMPLIED>
+]>
+<doc xmlns="http://www.ietf.org" xmlns:w3c="http://www.w3.org">
+ <e1>
+ <e2 xmlns="">
+ <e3 id="E3"/>
+ </e2>
+ </e1>
+</doc>
diff --git a/test/c14n/without-comments/example-7.xpath b/test/c14n/without-comments/example-7.xpath
new file mode 100644
index 0000000..84ddb08
--- /dev/null
+++ b/test/c14n/without-comments/example-7.xpath
@@ -0,0 +1,10 @@
+<XPath xmlns:ietf="http://www.ietf.org" >
+ (//.|//@*|//namespace::*)
+ [
+ self::ietf:e1
+ or
+ (parent::ietf:e1 and not(self::text() or self::e2))
+ or
+ count(id("E3")|ancestor-or-self::node()) = count(ancestor-or-self::node())
+ ]
+</XPath> \ No newline at end of file
diff --git a/test/c14n/without-comments/merlin-c14n-two-00.xml b/test/c14n/without-comments/merlin-c14n-two-00.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-00.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/without-comments/merlin-c14n-two-00.xpath b/test/c14n/without-comments/merlin-c14n-two-00.xpath
new file mode 100644
index 0000000..717b66a
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-00.xpath
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- everything -->
+ ancestor-or-self::bar:Something
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/merlin-c14n-two-01.xml b/test/c14n/without-comments/merlin-c14n-two-01.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-01.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/without-comments/merlin-c14n-two-01.xpath b/test/c14n/without-comments/merlin-c14n-two-01.xpath
new file mode 100644
index 0000000..8ea2795
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-01.xpath
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only text, elements or directly-used namespace nodes -->
+ ancestor-or-self::bar:Something and
+ ((name() != "bar") or parent::bar:Something) and
+ ((name() != "foo") or parent::foo:Something) and
+ ((name() != "baz") or parent::baz:Something) and
+ ((name() != "") or self::text())
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/merlin-c14n-two-02.xml b/test/c14n/without-comments/merlin-c14n-two-02.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-02.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/without-comments/merlin-c14n-two-02.xpath b/test/c14n/without-comments/merlin-c14n-two-02.xpath
new file mode 100644
index 0000000..37d65e0
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-02.xpath
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only text, elements or directly-used namespace nodes -->
+ ancestor-or-self::bar:Something and
+ (self::text() or
+ (namespace-uri() != "") or
+ (string(self::node()) = namespace-uri(parent::node())))
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/merlin-c14n-two-03.xml b/test/c14n/without-comments/merlin-c14n-two-03.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-03.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/without-comments/merlin-c14n-two-03.xpath b/test/c14n/without-comments/merlin-c14n-two-03.xpath
new file mode 100644
index 0000000..ed8ae68
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-03.xpath
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only text, elements, or directly-used namespace nodes but not foo:Something -->
+ ancestor-or-self::bar:Something and
+ not (self::foo:Something) and
+ (self::text() or
+ (namespace-uri() != "") or
+ (string(self::node()) = namespace-uri(parent::node())))
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/merlin-c14n-two-04.xml b/test/c14n/without-comments/merlin-c14n-two-04.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-04.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/without-comments/merlin-c14n-two-04.xpath b/test/c14n/without-comments/merlin-c14n-two-04.xpath
new file mode 100644
index 0000000..7d0170b
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-04.xpath
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- no namespace nodes; I am not in my parent's namespace axis -->
+ ancestor-or-self::bar:Something and
+ (count(parent::node()/namespace::*) !=
+ count(parent::node()/namespace::* | self::node()))
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/merlin-c14n-two-05.xml b/test/c14n/without-comments/merlin-c14n-two-05.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-05.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/without-comments/merlin-c14n-two-05.xpath b/test/c14n/without-comments/merlin-c14n-two-05.xpath
new file mode 100644
index 0000000..2732894
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-05.xpath
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- no namespace nodes; I am text or have nonempty namespace URI -->
+ ancestor-or-self::bar:Something and
+ (self::text() or
+ (namespace-uri() != ""))
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/merlin-c14n-two-06.xml b/test/c14n/without-comments/merlin-c14n-two-06.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-06.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/without-comments/merlin-c14n-two-06.xpath b/test/c14n/without-comments/merlin-c14n-two-06.xpath
new file mode 100644
index 0000000..ae6589e
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-06.xpath
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only namespace nodes -->
+ ancestor-or-self::bar:Something and
+ (count(parent::node()/namespace::*) =
+ count(parent::node()/namespace::* | self::node()))
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/merlin-c14n-two-07.xml b/test/c14n/without-comments/merlin-c14n-two-07.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-07.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/without-comments/merlin-c14n-two-07.xpath b/test/c14n/without-comments/merlin-c14n-two-07.xpath
new file mode 100644
index 0000000..bdca528
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-07.xpath
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- only directly-used namespace nodes -->
+ ancestor-or-self::bar:Something and
+ (string(self::node()) = namespace-uri(parent::node()))
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/merlin-c14n-two-08.xml b/test/c14n/without-comments/merlin-c14n-two-08.xml
new file mode 100644
index 0000000..714c9d1
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-08.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo:Root xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xmlns="http://example.org/" xml:lang="en-ie">
+ <bar:Something>
+ <foo:Something>
+ <bar:Something>
+ <foo:Something>
+ <baz:Something />
+ </foo:Something>
+ </bar:Something>
+ </foo:Something>
+ </bar:Something>
+</foo:Root>
diff --git a/test/c14n/without-comments/merlin-c14n-two-08.xpath b/test/c14n/without-comments/merlin-c14n-two-08.xpath
new file mode 100644
index 0000000..24fdd3f
--- /dev/null
+++ b/test/c14n/without-comments/merlin-c14n-two-08.xpath
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<XPath xmlns:bar="http://example.org/bar" xmlns:baz="http://example.org/baz" xmlns:foo="http://example.org/foo" xml:lang="en-ie">
+ (//. | //@* | //namespace::*)
+ [
+ <!-- no namespace nodes but the default on alternate elements -->
+ ancestor-or-self::bar:Something and
+ (self::text() or
+ (namespace-uri() != "") or
+ ((name() = "") and
+ ((count(ancestor-or-self::node()) mod 2) = 1)))
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/test-0.xml b/test/c14n/without-comments/test-0.xml
new file mode 100644
index 0000000..7e1f9d4
--- /dev/null
+++ b/test/c14n/without-comments/test-0.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE envelope [
+ <!ENTITY dsig "http://www.w3.org/2000/09/xmldsig#">
+ <!ENTITY c14n "http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
+ <!ENTITY xpath "http://www.w3.org/TR/1999/REC-xpath-19991116">
+ <!ENTITY xslt "http://www.w3.org/TR/1999/REC-xslt-19991116">
+ <!ATTLIST Notaries Id ID #IMPLIED>
+]>
+<Object Id="object-1" MimeType="text/plain">I am the text.</Object>
diff --git a/test/c14n/without-comments/test-0.xpath b/test/c14n/without-comments/test-0.xpath
new file mode 100644
index 0000000..1fca7bf
--- /dev/null
+++ b/test/c14n/without-comments/test-0.xpath
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE envelope [
+ <!ENTITY dsig "http://www.w3.org/2000/09/xmldsig#">
+ <!ENTITY c14n "http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
+ <!ENTITY xpath "http://www.w3.org/TR/1999/REC-xpath-19991116">
+ <!ENTITY xslt "http://www.w3.org/TR/1999/REC-xslt-19991116">
+ <!ATTLIST Notaries Id ID #IMPLIED>
+]>
+<XPath>
+ (//.|//@*|//namespace::*)
+ [
+ self::text()
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/test-1.xml b/test/c14n/without-comments/test-1.xml
new file mode 100644
index 0000000..2156615
--- /dev/null
+++ b/test/c14n/without-comments/test-1.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<!DOCTYPE envelope [
+ <!ENTITY dsig "http://www.w3.org/2000/09/xmldsig#">
+ <!ENTITY c14n "http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
+ <!ENTITY xpath "http://www.w3.org/TR/1999/REC-xpath-19991116">
+ <!ENTITY xslt "http://www.w3.org/TR/1999/REC-xslt-19991116">
+ <!ATTLIST Notaries Id ID #IMPLIED>
+]>
+ <Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="signature">
+ <Object Id="object-4">
+ <X509Data>
+ <X509SubjectName>
+ CN=Merlin Hughes,O=Baltimore Technologies\, Ltd.,ST=Dublin,C=IE
+ </X509SubjectName>
+ <X509IssuerSerial>
+ <X509IssuerName>
+ CN=Test DSA CA,O=Baltimore Technologies\, Ltd.,ST=Dublin,C=IE
+ </X509IssuerName>
+ <X509SerialNumber>970849936</X509SerialNumber>
+ </X509IssuerSerial>
+ <X509Certificate>
+ MIIDNzCCAvWgAwIBAgIEOd3+kDAJBgcqhkjOOAQDMFsxCzAJBgNVBAYTAklFMQ8w
+ DQYDVQQIEwZEdWJsaW4xJTAjBgNVBAoTHEJhbHRpbW9yZSBUZWNobm9sb2dpZXMs
+ IEx0ZC4xFDASBgNVBAMTC1Rlc3QgRFNBIENBMB4XDTAwMTAwNjE2MzIxNVoXDTAx
+ MTAwNjE2MzIxNFowXTELMAkGA1UEBhMCSUUxDzANBgNVBAgTBkR1YmxpbjElMCMG
+ A1UEChMcQmFsdGltb3JlIFRlY2hub2xvZ2llcywgTHRkLjEWMBQGA1UEAxMNTWVy
+ bGluIEh1Z2hlczCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQDaJjfDTrawMHf8MiUt
+ Y54b37hSmYNnR3KpGT10uU1Dqppcju06uN0iGbqf947DjkBC25hKnqykK31xBw0E
+ CPbYq/KC98kghdf2xJCu6B8aqJ95K9jdVflJ3WP7PQxJn+fmM23zy6HYLXVICpfq
+ etdNj/VHCShZE3bdJiE6VobSFQIVAPQecqS2PaTDprcQnkwx4MHTRXhrAoGAMuGA
+ lqeB1ax+vyO2+Osubjhl7pHxLu47RIH+/M52DjESA9KMSrwzsYx8yNR2WooByrE0
+ t6fu0VncK7UK8olO4t7wpv2z4AFQPRVCKFwo0qgn5aKIkICGMlrRy81avb27wGcW
+ othx3iPPMtFXtoDqK0JItaI9R8zc1msFhM1GKMYDgYQAAoGActA8YGxrtngg/zKV
+ vqEOefnwmViFztcnPBYPlJsvh6yKI4iDm68fnp4Mi3RrJ6bZAygFrUIQLxLjV+OJ
+ tgJAEto0xAs+Mehuq1DkSFEpP3oDzCTOsrOiS1DwQe4oIb7zVk/9l7aPtJMHW0LV
+ lMdwZNFNNJoqMcT2ZfCPrfvYvQ2jRzBFMB4GA1UdEQQXMBWBE21lcmxpbkBiYWx0
+ aW1vcmUuaWUwDgYDVR0PAQH/BAQDAgeAMBMGA1UdIwQMMAqACEJZQG0KwRbPMAkG
+ ByqGSM44BAMDMQAwLgIVAK4skWEFYgrggaJA8vYAwSjg12+KAhUAwHTo7wd4tENw
+ 9LAKPklQ/74fH18=
+ </X509Certificate>
+ </X509Data>
+ </Object>
+ </Signature> \ No newline at end of file
diff --git a/test/c14n/without-comments/test-1.xpath b/test/c14n/without-comments/test-1.xpath
new file mode 100644
index 0000000..3c11e29
--- /dev/null
+++ b/test/c14n/without-comments/test-1.xpath
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE envelope [
+ <!ENTITY dsig "http://www.w3.org/2000/09/xmldsig#">
+ <!ENTITY c14n "http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
+ <!ENTITY xpath "http://www.w3.org/TR/1999/REC-xpath-19991116">
+ <!ENTITY xslt "http://www.w3.org/TR/1999/REC-xslt-19991116">
+ <!ATTLIST Notaries Id ID #IMPLIED>
+]>
+<XPath xmlns:dsig="&dsig;">
+ (//.|//@*|//namespace::*)
+ [
+ ancestor-or-self::dsig:X509Data
+ ]
+</XPath>
diff --git a/test/c14n/without-comments/test-2.xml b/test/c14n/without-comments/test-2.xml
new file mode 100644
index 0000000..9fda49e
--- /dev/null
+++ b/test/c14n/without-comments/test-2.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<n0:local xmlns:n0="foo://bar" xmlns:n3="ftp://example.org">
+ <n1:elem2 xmlns:n1="http://example.net" xml:lang="en">
+ <n3:stuff xmlns:n3="ftp://example.org"/>
+ </n1:elem2>
+</n0:local>
+
+ \ No newline at end of file
diff --git a/test/c14n/without-comments/test-2.xpath b/test/c14n/without-comments/test-2.xpath
new file mode 100644
index 0000000..9653bc3
--- /dev/null
+++ b/test/c14n/without-comments/test-2.xpath
@@ -0,0 +1,8 @@
+
+<XPath xmlns:n1="http://example.net" >
+ (//. | //@* | //namespace::*)
+ [
+ ancestor-or-self::n1:elem2
+ ]
+</XPath>
+ \ No newline at end of file
diff --git a/test/c14n/without-comments/test-3.xml b/test/c14n/without-comments/test-3.xml
new file mode 100644
index 0000000..c7c42d9
--- /dev/null
+++ b/test/c14n/without-comments/test-3.xml
@@ -0,0 +1,18 @@
+<!DOCTYPE doc [<!ATTLIST e9 attr CDATA "default">]>
+<doc xmlns:foo="http://www.bar.org" xml:base="http://www.example.org/2002/">
+ <e1 />
+ <e2 ></e2>
+ <e3 name = "elem3" id="elem3" />
+ <e4 name="elem4" id="elem4" ></e4>
+ <e5 a:attr="out" b:attr="sorted" attr2="all" attr="I'm"
+ xmlns:b="http://www.ietf.org"
+ xmlns:a="http://www.w3.org"
+ xmlns="http://example.org"/>
+ <e6 xmlns="" test="../baz" xmlns:a="http://www.w3.org">
+ <e7 xmlns="http://www.ietf.org">
+ <e8 xmlns="" xmlns:a="http://www.w3.org" a:foo="bar">
+ <e9 xmlns="" xmlns:a="http://www.ietf.org"/>
+ </e8>
+ </e7>
+ </e6>
+</doc>
diff --git a/test/c14n/without-comments/test-3.xpath b/test/c14n/without-comments/test-3.xpath
new file mode 100644
index 0000000..faa0070
--- /dev/null
+++ b/test/c14n/without-comments/test-3.xpath
@@ -0,0 +1,3 @@
+<XPath>
+(//. | //@* | //namespace::*)[ancestor-or-self::e6]
+</XPath> \ No newline at end of file
diff --git a/test/c14n/without-comments/world.txt b/test/c14n/without-comments/world.txt
new file mode 100644
index 0000000..04fea06
--- /dev/null
+++ b/test/c14n/without-comments/world.txt
@@ -0,0 +1 @@
+world \ No newline at end of file
diff --git a/test/catalogs/.memdump b/test/catalogs/.memdump
new file mode 100644
index 0000000..18d8533
--- /dev/null
+++ b/test/catalogs/.memdump
@@ -0,0 +1,4 @@
+ 10:41:06 PM
+
+ MEMORY ALLOCATED : 0, MAX was 6175
+BLOCK NUMBER SIZE TYPE
diff --git a/test/catalogs/catal.script b/test/catalogs/catal.script
new file mode 100644
index 0000000..1c644d1
--- /dev/null
+++ b/test/catalogs/catal.script
@@ -0,0 +1,4 @@
+public "-//OASIS//DTD DocBook XML CALS Table Model V4.1//EN"
+public "-//Davenport//DTD DocBook V3.0//EN"
+public "-//OASIS//DTD XML Exchange Table Model 19990315//EN"
+public "-//Davenport//ENTITIES DocBook Additional General Entities V3.0//EN"
diff --git a/test/catalogs/catal.sgml b/test/catalogs/catal.sgml
new file mode 100644
index 0000000..03fc2c5
--- /dev/null
+++ b/test/catalogs/catal.sgml
@@ -0,0 +1,2 @@
+CATALOG catal1.sgml
+CATALOG catal2.sgml
diff --git a/test/catalogs/catal1.sgml b/test/catalogs/catal1.sgml
new file mode 100644
index 0000000..b8319ca
--- /dev/null
+++ b/test/catalogs/catal1.sgml
@@ -0,0 +1 @@
+CATALOG catal3.sgml
diff --git a/test/catalogs/catal2.sgml b/test/catalogs/catal2.sgml
new file mode 100644
index 0000000..ff4cf8c
--- /dev/null
+++ b/test/catalogs/catal2.sgml
@@ -0,0 +1,4 @@
+PUBLIC "-//Davenport//DTD DocBook V3.0//EN" "docbook.dtd"
+PUBLIC "-//USA-DOD//DTD Table Model 951010//EN" "cals-tbl.dtd"
+PUBLIC "-//Davenport//ELEMENTS DocBook Information Pool V3.0//EN" "dbpool.mod"
+PUBLIC "-//Davenport//ELEMENTS DocBook Document Hierarchy V3.0//EN" "dbhier.mod"PUBLIC "-//Davenport//ENTITIES DocBook Additional General Entities V3.0//EN" "dbgenent.mod"
diff --git a/test/catalogs/catal3.sgml b/test/catalogs/catal3.sgml
new file mode 100644
index 0000000..bf54724
--- /dev/null
+++ b/test/catalogs/catal3.sgml
@@ -0,0 +1,8 @@
+PUBLIC "-//OASIS//DTD DocBook XML CALS Table Model V4.1//EN" "calstblx.dtd"
+PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN" "soextblx.dtd"
+PUBLIC "-//OASIS//ELEMENTS DocBook XML Information Pool V4.1//EN" "dbpool.mod"
+PUBLIC "-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.1//EN" "dbhier.mod"PUBLIC "-//OASIS//ENTITIES DocBook XML Additional General Entities V4.1//EN" "dbgenent.mod"
+PUBLIC "-//OASIS//ENTITIES DocBook XML Notations V4.1//EN" "dbnotn.mod"
+PUBLIC "-//OASIS//ENTITIES DocBook XML Character Entities V4.1//EN" "dbcent.mod"
+
+
diff --git a/test/catalogs/docbook.script b/test/catalogs/docbook.script
new file mode 100644
index 0000000..faa06b0
--- /dev/null
+++ b/test/catalogs/docbook.script
@@ -0,0 +1,5 @@
+resolve toto http://www.oasis-open.org/docbook/xml/4.1.2/dbpoolx.mod
+public "-//OASIS//ENTITIES DocBook XML Character Entities V4.1.2//EN"
+system urn:publicid:-:OASIS:DTD+DocBook+XML+V4.1.2:EN
+public urn:publicid:-:OASIS:DTD+DocBook+XML+V4.1.2:EN
+resolve toto toto
diff --git a/test/catalogs/docbook.xml b/test/catalogs/docbook.xml
new file mode 100644
index 0000000..c8dd2bf
--- /dev/null
+++ b/test/catalogs/docbook.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN" uri="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/>
+<public publicId="-//OASIS//ENTITIES DocBook XML Notations V4.1.2//EN" uri="http://www.oasis-open.org/docbook/xml/4.1.2/dbnotnx.mod"/>
+<public publicId="-//OASIS//ENTITIES DocBook XML Character Entities V4.1.2//EN" uri="http://www.oasis-open.org/docbook/xml/4.1.2/dbcentx.mod"/>
+<public publicId="-//OASIS//ELEMENTS DocBook XML Information Pool V4.1.2//EN" uri="http://www.oasis-open.org/docbook/xml/4.1.2/dbpoolx.mod"/>
+<public publicId="-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.1.2//EN" uri="http://www.oasis-open.org/docbook/xml/4.1.2/dbhierx.mod"/>
+<public publicId="-//OASIS//ENTITIES DocBook XML Additional General Entities V4.1.2//EN" uri="http://www.oasis-open.org/docbook/xml/4.1.2/dbgenent.mod"/>
+<public publicId="-//OASIS//DTD DocBook XML CALS Table Model V4.1.2//EN" uri="http://www.oasis-open.org/docbook/xml/4.1.2/calstblx.dtd"/>
+<public publicId="-//OASIS//DTD DocBook MathML Module V1.0//EN" uri="http://www.oasis-open.org/docbook/xml/mathml/1.0/dbmathml.dtd"/>
+<nextCatalog catalog="stylesheet.xml"/>
+<rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/" rewritePrefix="/usr/share/xml/docbook/"/>
+</catalog>
diff --git a/test/catalogs/registry.script b/test/catalogs/registry.script
new file mode 100644
index 0000000..9bb944c
--- /dev/null
+++ b/test/catalogs/registry.script
@@ -0,0 +1,4 @@
+resolve toto http://www.oasis-open.org/docbook/xml/4.1.2/dbpoolx.mod
+public "-//OASIS//ENTITIES DocBook XML Character Entities V4.1.2//EN"
+system http://www.oasis-open.org/docbook/xml/4.1.2/dbpoolx.mod
+system urn:publicid:-:OASIS:DTD+DocBook+XML+V4.1.2:EN
diff --git a/test/catalogs/registry.xml b/test/catalogs/registry.xml
new file mode 100644
index 0000000..5caccfc
--- /dev/null
+++ b/test/catalogs/registry.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+
+<delegatePublic publicIdStartString="-//OASIS//"
+ catalog="oasis.xml"/>
+<delegateSystem systemIdStartString="http://www.oasis-open.org/"
+ catalog="oasis.xml"/>
+<delegateURI uriStartString="http://www.oasis-open.org/"
+ catalog="oasis.xml"/>
+
+<delegatePublic publicIdStartString="-//OASIS//DTD XML Catalog //"
+ catalog="docbook.xml"/>
+<delegatePublic publicIdStartString="-//OASIS//ENTITIES DocBook XML"
+ catalog="docbook.xml"/>
+<delegatePublic publicIdStartString="-//OASIS//DTD DocBook XML"
+ catalog="docbook.xml"/>
+<delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/"
+ catalog="docbook.xml"/>
+<delegateURI uriStartString="http://www.oasis-open.org/docbook/"
+ catalog="docbook.xml"/>
+
+</catalog>
diff --git a/test/catalogs/stylesheet.xml b/test/catalogs/stylesheet.xml
new file mode 100644
index 0000000..4b611e1
--- /dev/null
+++ b/test/catalogs/stylesheet.xml
@@ -0,0 +1,12 @@
+<!DOCTYPE catalog
+ PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
+ "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
+ prefer="public">
+
+<!-- Circumvent relative URI in spec.xsl that doesn't work online -->
+<uri name="http://www.oasis-open.org/committes/tr.xsl"
+ uri="http://www.oasis-open.org/committes/entity/stylesheets/base/tr.xsl"/>
+<public publicId="toto" uri="file:///usr/share/xml/toto/toto.dtd"/>
+</catalog>
+
diff --git a/test/cdata b/test/cdata
new file mode 100644
index 0000000..bd8c474
--- /dev/null
+++ b/test/cdata
@@ -0,0 +1,3 @@
+<doc>
+<![CDATA[<greeting>Hello, world!</greeting>]]>
+</doc>
diff --git a/test/cdata2 b/test/cdata2
new file mode 100644
index 0000000..b4db791
--- /dev/null
+++ b/test/cdata2
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<collection>
+ <test><![CDATA[
+ <![CDATA[abc]]]>]&gt;<![CDATA[
+ ]]></test>
+</collection>
diff --git a/test/comment.xml b/test/comment.xml
new file mode 100644
index 0000000..98c5eff
--- /dev/null
+++ b/test/comment.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<doc>
+<!-- document start -->
+<empty/>
+<!-- document end -->
+</doc>
diff --git a/test/comment2.xml b/test/comment2.xml
new file mode 100644
index 0000000..9e122ec
--- /dev/null
+++ b/test/comment2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!-- document start -->
+<doc>
+<empty/>
+</doc>
+<!-- document end -->
diff --git a/test/dav1 b/test/dav1
new file mode 100644
index 0000000..cbfd4c4
--- /dev/null
+++ b/test/dav1
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/" xmlns:R="http://www.foo.bar/boxschema">
+ <D:response>
+ <D:prop>
+ <R:bigbox>
+ <R:BoxType>Box type A</R:BoxType>
+ </R:bigbox>
+ <R:author>
+ <R:Name>J.J. Dingleheimerschmidt</R:Name>
+ </R:author>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:prop>
+ <R:DingALing/>
+ <R:Random/>
+ </D:prop>
+ <D:status>HTTP/1.1 403 Forbidden</D:status>
+ <D:responsedescription> The user does not have access to the DingALing property.
+ </D:responsedescription>
+ </D:response>
+ <D:responsedescription> There has been an access violation error.
+ </D:responsedescription>
+</D:multistatus>
diff --git a/test/dav10 b/test/dav10
new file mode 100644
index 0000000..4b00da4
--- /dev/null
+++ b/test/dav10
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<D:owner xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:href>http://www.ics.uci.edu/~ejw/contact.html</D:href>
+</D:owner>
diff --git a/test/dav11 b/test/dav11
new file mode 100644
index 0000000..8ac23d6
--- /dev/null
+++ b/test/dav11
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<D:prop xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:lockdiscovery>
+ <D:activelock>
+ <D:locktype>write</D:locktype>
+ <D:lockscope>exclusive</D:lockscope>
+ <D:addlocks/>
+ <D:owner>
+ <D:href>
+ http://www.ics.uci.edu/~ejw/contact.html
+ </D:href>
+ </D:owner>
+ <D:timeout>Second-604800</D:timeout>
+ <D:locktoken>
+ <D:href>
+ opaquelocktoken:xyz122393481230912asdfa09s8df09s7df
+ </D:href>
+ </D:locktoken>
+ </D:activelock>
+ </D:lockdiscovery>
+</D:prop>
diff --git a/test/dav12 b/test/dav12
new file mode 100644
index 0000000..d8d03fe
--- /dev/null
+++ b/test/dav12
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<D:href xmlns:D="http://www.ietf.org/standards/dav/">http://www.ics.uci.edu/~ejw/contact.html</D:href>
diff --git a/test/dav13 b/test/dav13
new file mode 100644
index 0000000..f44ae38
--- /dev/null
+++ b/test/dav13
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:href>
+ http://webdav.sb.aol.com/workspace/webdav/proposal.doc
+ </D:href>
+ <D:href>
+ http://webdav.sb.aol.com/workspace/webdav/
+ </D:href>
+ <D:status>HTTP/1.1 202 Accepted</D:status>
+ </D:response>
+ <D:response>
+ <D:href>http://foo.bar/blah</D:href>
+ <D:status>HTTP/1.1 403 Forbidden</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/test/dav15 b/test/dav15
new file mode 100644
index 0000000..b80802e
--- /dev/null
+++ b/test/dav15
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<D:prop xmlns:D="http://www.ietf.org/standards/dav/" xmlns:F="http://www.foocorp.com/Project/">
+ <D:Source>
+ <D:link>
+ <F:projfiles>Source</F:projfiles>
+ <D:src>http://foo.bar/program</D:src>
+ <D:dst>http://foo.bar/src/main.c</D:dst>
+ </D:link>
+ <D:link>
+ <F:projfiles>Library</F:projfiles>
+ <D:src>http://foo.bar/program</D:src>
+ <D:dst>http://foo.bar/src/main.lib</D:dst>
+ </D:link>
+ <D:link>
+ <F:projfiles>Makefile</F:projfiles>
+ <D:src>http://foo.bar/program</D:src>
+ <D:dst>http://foo.bar/src/makefile</D:dst>
+ </D:link>
+ </D:Source>
+</D:prop>
diff --git a/test/dav16 b/test/dav16
new file mode 100644
index 0000000..9a7dc36
--- /dev/null
+++ b/test/dav16
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<D:propfind xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:prop>
+ <lockdiscovery/>
+ </D:prop>
+</D:propfind>
diff --git a/test/dav17 b/test/dav17
new file mode 100644
index 0000000..1137662
--- /dev/null
+++ b/test/dav17
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:prop>
+ <D:lockdiscovery>
+ <D:activelock>
+ <D:locktype>write</D:locktype>
+ <D:lockscope>exclusive</D:lockscope>
+ <D:addlocks>
+ <D:href>http://foo.com/doc/</D:href>
+ </D:addlocks>
+ <D:owner>Jane Smith</D:owner>
+ <D:timeout>Infinite</D:timeout>
+ <D:locktoken>
+ <D:href>iamuri:unique!!!!!</D:href>
+ </D:locktoken>
+ </D:activelock>
+ </D:lockdiscovery>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/test/dav18 b/test/dav18
new file mode 100644
index 0000000..3de1c19
--- /dev/null
+++ b/test/dav18
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<D:propfind xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:prop>
+ <supportedlock/>
+ </D:prop>
+</D:propfind>
diff --git a/test/dav19 b/test/dav19
new file mode 100644
index 0000000..9535ffc
--- /dev/null
+++ b/test/dav19
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:prop>
+ <D:supportedlock>
+ <D:LockEntry>
+ <D:locktype>Write</D:locktype>
+ <D:lockscope>Exclusive</D:lockscope>
+ </D:LockEntry>
+ <D:LockEntry>
+ <D:locktype>Write</D:locktype>
+ <D:lockscope>Shared</D:lockscope>
+ </D:LockEntry>
+ </D:supportedlock>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/test/dav2 b/test/dav2
new file mode 100644
index 0000000..f831b4b
--- /dev/null
+++ b/test/dav2
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<S:multistatus xmlns:S="http://www.ietf.org/standards/dav/" xmlns:R="http://www.foo.bar/boxschema/">
+ <S:response>
+ <S:href>http://www.foo.bar/container/</S:href>
+ <S:prop>
+ <R:bigbox>
+ <R:BoxType>Box type A</R:BoxType>
+ </R:bigbox>
+ <R:author>
+ <R:Name>Hadrian</R:Name>
+ </R:author>
+ </S:prop>
+ <S:status>HTTP 1.1 200 OK</S:status>
+ </S:response>
+ <S:response>
+ <S:href>http://www.foo.bar/container/index.html</S:href>
+ <S:prop>
+ <R:bigbox>
+ <R:BoxType>Box type B</R:BoxType>
+ </R:bigbox>
+ </S:prop>
+ <S:status>HTTP 1.1 200 OK</S:status>
+ </S:response>
+</S:multistatus>
diff --git a/test/dav3 b/test/dav3
new file mode 100644
index 0000000..986b3fe
--- /dev/null
+++ b/test/dav3
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/" xmlns:R="http://www.foo.bar/boxschema/">
+ <D:response>
+ <D:href>http://www.foo.bar/container/</D:href>
+ <D:prop>
+ <R:bigbox/>
+ <R:author/>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:href>http://www.foo.bar/container/index.html</D:href>
+ <D:prop>
+ <R:bigbox/>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/test/dav4 b/test/dav4
new file mode 100644
index 0000000..9ab7ceb
--- /dev/null
+++ b/test/dav4
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<D:propertyupdate xmlns:D="http://www.ietf.org/standards/dav/" xmlns:Z="http://www.w3.com/standards/z39.50/">
+ <D:set>
+ <D:prop>
+ <Z:authors>
+ <Z:Author>Jim Whitehead</Z:Author>
+ <Z:Author>Roy Fielding</Z:Author>
+ </Z:authors>
+ </D:prop>
+ </D:set>
+ <D:remove>
+ <D:prop>
+ <Z:Copyright-Owner/>
+ </D:prop>
+ </D:remove>
+</D:propertyupdate>
diff --git a/test/dav5 b/test/dav5
new file mode 100644
index 0000000..68ebab9
--- /dev/null
+++ b/test/dav5
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/" xmlns:Z="http://www.w3.com/standards/z39.50/">
+ <D:response>
+ <D:prop>
+ <Z:Authors/>
+ </D:prop>
+ <D:status>HTTP/1.1 420 Method Failure</D:status>
+ </D:response>
+ <D:response>
+ <D:prop>
+ <Z:Copyright-Owner/>
+ </D:prop>
+ <D:status>HTTP/1.1 409 Conflict</D:status>
+ </D:response>
+ <D:responsedescription> Copyright Owner can not be deleted or
+altered.</D:responsedescription>
+</D:multistatus>
diff --git a/test/dav6 b/test/dav6
new file mode 100644
index 0000000..3d0de24
--- /dev/null
+++ b/test/dav6
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<D:multistatus xmlns:D="http://www.ietf.org/standards/dav/">
+ <D:response>
+ <D:href>http://www.microsoft.com/user/yarong/dav_drafts/
+ </D:href>
+ <D:prop>
+ <D:resourcetype>
+ <D:collection/>
+ </D:resourcetype>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:href>
+ http://www.microsoft.com/user/yarong/dav_drafts/base
+ </D:href>
+ <D:prop>
+ <D:resourcetype/>
+ </D:prop>
+ <D:status>HTTP 1.1 200 OK</D:status>
+ </D:response>
+</D:multistatus>
diff --git a/test/dav7 b/test/dav7
new file mode 100644
index 0000000..ec4a952
--- /dev/null
+++ b/test/dav7
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<d:multistatus xmlns:d="http://www.ietf.org/standards/dav/">
+ <d:response>
+ <d:href>http://www.foo.bar/container/resource1</d:href>
+ <d:href>http://www.foo.bar/container/resource2</d:href>
+ <d:status>HTTP/1.1 200 OK</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/container/</d:href>
+ <d:status>HTTP/1.1 420 Method Failure</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/container/resource3</d:href>
+ <d:status>HTTP/1.1 412 Precondition Failed</d:status>
+ </d:response>
+</d:multistatus>
diff --git a/test/dav8 b/test/dav8
new file mode 100644
index 0000000..7f99baf
--- /dev/null
+++ b/test/dav8
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<d:multistatus xmlns:d="http://www.ietf.org/standards/dav/">
+ <d:response>
+ <d:href>http://www.foo.bar/othercontainer/resource1</d:href>
+ <d:href>http://www.foo.bar/othercontainer/resource2</d:href>
+ <d:href>http://www.foo.bar/othercontainer/</d:href>
+ <d:href>http://www.foo.bar/othercontainer/R2/D2</d:href>
+ <d:status>HTTP/1.1 201 Created</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/othercontainer/R2/</d:href>
+ <d:status>HTTP/1.1 412 Precondition Failed</d:status>
+ </d:response>
+</d:multistatus>
diff --git a/test/dav9 b/test/dav9
new file mode 100644
index 0000000..8ed63b8
--- /dev/null
+++ b/test/dav9
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<d:multistatus xmlns:d="http://www.ietf.org/standards/dav/">
+ <d:response>
+ <d:href>http://www.foo.bar/container/resource1</d:href>
+ <d:href>http://www.foo.bar/container/resource2</d:href>
+ <d:href>http://www.foo.bar/container/</d:href>
+ <d:href>http://www.foo.bar/container/C2/R2</d:href>
+ <d:status>HTTP/1.1 201 Created</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/container/C2</d:href>
+ <d:status>HTTP/1.1 420 Method Failure</d:status>
+ </d:response>
+ <d:response>
+ <d:href>http://www.foo.bar/othercontainer/C2</d:href>
+ <d:status>HTTP/1.1 409 Conflict</d:status>
+ </d:response>
+</d:multistatus>
diff --git a/test/defattr.xml b/test/defattr.xml
new file mode 100644
index 0000000..3f16a50
--- /dev/null
+++ b/test/defattr.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+<!ATTLIST doc
+ xmlns CDATA #FIXED "http://www.example.com/">
+]>
+<doc/>
diff --git a/test/defattr2.xml b/test/defattr2.xml
new file mode 100644
index 0000000..ab50709
--- /dev/null
+++ b/test/defattr2.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+<!ATTLIST doc
+ defatt (0|1) "0"
+ xmlns:tst CDATA #FIXED "http://example.org"
+ tst:att (0|1) "1">
+]>
+<doc att="1"/>
diff --git a/test/dia1 b/test/dia1
new file mode 100644
index 0000000..207bd73
--- /dev/null
+++ b/test/dia1
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute name="background">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer name="Background" visible="true">
+ <dia:object type="Standard - Line" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="1.95,6.85"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.9,6.8;11,8.55"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="1.95,6.85"/>
+ <dia:point val="10.95,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O2" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.579,3.96359;7.021,4.96359"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string val="sdfsdfg"/>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.9,7.45;13.05,9.55"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/test/dia2 b/test/dia2
new file mode 100644
index 0000000..207bd73
--- /dev/null
+++ b/test/dia2
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute name="background">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer name="Background" visible="true">
+ <dia:object type="Standard - Line" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="1.95,6.85"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="1.9,6.8;11,8.55"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="1.95,6.85"/>
+ <dia:point val="10.95,8.5"/>
+ </dia:attribute>
+ <dia:attribute name="line_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="line_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="start_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="1" to="O2" connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="0" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="2.579,3.96359;7.021,4.96359"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string val="sdfsdfg"/>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="10.9,7.45;13.05,9.55"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="2.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.1"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#000000"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute name="line_style">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/test/dtd1 b/test/dtd1
new file mode 100644
index 0000000..35c9dc7
--- /dev/null
+++ b/test/dtd1
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE MEMO PUBLIC "-//SGMLSOURCE//DTD MEMO//EN"
+ "http://www.sgmlsource.com/dtds/memo.dtd">
+<MEMO>
+</MEMO>
diff --git a/test/dtd10 b/test/dtd10
new file mode 100644
index 0000000..f5e49e7
--- /dev/null
+++ b/test/dtd10
@@ -0,0 +1,8 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b)+ , c , d)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT d (#PCDATA)>
+]>
+<doc><b>This</b><c> is a</c><d> valid document</d></doc>
diff --git a/test/dtd11 b/test/dtd11
new file mode 100644
index 0000000..bdd512b
--- /dev/null
+++ b/test/dtd11
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+<!ATTLIST doc val CDATA #IMPLIED>
+]>
+<doc val="v1"/>
diff --git a/test/dtd12 b/test/dtd12
new file mode 100644
index 0000000..a0fbf22
--- /dev/null
+++ b/test/dtd12
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ENTITY YN '"Yes"' >
+<!ENTITY WhatHeSaid "He said &YN;" >
+]>
+<doc>&WhatHeSaid;</doc>
diff --git a/test/dtd13 b/test/dtd13
new file mode 100644
index 0000000..d18d00c
--- /dev/null
+++ b/test/dtd13
@@ -0,0 +1,6 @@
+<!-- comment before the DTD -->
+<!DOCTYPE doc [
+<!ELEMENT doc ANY>
+]>
+<!-- comment after the DTD -->
+<doc/>
diff --git a/test/dtd2 b/test/dtd2
new file mode 100644
index 0000000..3bcc101
--- /dev/null
+++ b/test/dtd2
@@ -0,0 +1,4 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA)>
+]>
+<doc>This is a valid document !</doc>
diff --git a/test/dtd3 b/test/dtd3
new file mode 100644
index 0000000..63f44a5
--- /dev/null
+++ b/test/dtd3
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ANY>
+]>
+<doc>This is a valid document !</doc>
+
diff --git a/test/dtd4 b/test/dtd4
new file mode 100644
index 0000000..5457b91
--- /dev/null
+++ b/test/dtd4
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>]>
+<doc/>
diff --git a/test/dtd5 b/test/dtd5
new file mode 100644
index 0000000..a33889b
--- /dev/null
+++ b/test/dtd5
@@ -0,0 +1,6 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (#PCDATA | a | b)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+]>
+<doc><a>This</a> is a <b>valid</b> document</doc>
diff --git a/test/dtd6 b/test/dtd6
new file mode 100644
index 0000000..35e63fc
--- /dev/null
+++ b/test/dtd6
@@ -0,0 +1,6 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a | b)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+]>
+<doc><a>This</a><b> is a valid</b><a> document</a></doc>
diff --git a/test/dtd7 b/test/dtd7
new file mode 100644
index 0000000..b151c21
--- /dev/null
+++ b/test/dtd7
@@ -0,0 +1,6 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (a , b)*>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+]>
+<doc><a>This</a><b> is a valid document</b></doc>
diff --git a/test/dtd8 b/test/dtd8
new file mode 100644
index 0000000..ce7a291
--- /dev/null
+++ b/test/dtd8
@@ -0,0 +1,8 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b) , (c | d))+>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT d (#PCDATA)>
+]>
+<doc><b>This</b><c> is a valid document</c></doc>
diff --git a/test/dtd9 b/test/dtd9
new file mode 100644
index 0000000..144b8c5
--- /dev/null
+++ b/test/dtd9
@@ -0,0 +1,8 @@
+<!DOCTYPE doc [
+<!ELEMENT doc ((a | b | c) , d)?>
+<!ELEMENT a (#PCDATA)>
+<!ELEMENT b (#PCDATA)>
+<!ELEMENT c (#PCDATA)>
+<!ELEMENT d (#PCDATA)>
+]>
+<doc><b>This</b><d> is a valid document</d></doc>
diff --git a/test/dtds/eve.dtd b/test/dtds/eve.dtd
new file mode 100644
index 0000000..b1fc883
--- /dev/null
+++ b/test/dtds/eve.dtd
@@ -0,0 +1,4 @@
+<!ENTITY % local.p.class "">
+<!ENTITY % p.class "p
+ %local.p.class;">
+
diff --git a/test/ent1 b/test/ent1
new file mode 100644
index 0000000..3e24756
--- /dev/null
+++ b/test/ent1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+]>
+<EXAMPLE>
+ &xml;
+</EXAMPLE>
diff --git a/test/ent2 b/test/ent2
new file mode 100644
index 0000000..155e2d2
--- /dev/null
+++ b/test/ent2
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+<!ENTITY title PUBLIC "-//MY-TITLE//FR" "title.xml">
+<!ENTITY image SYSTEM "img.gif" NDATA GIF>
+]>
+<EXAMPLE>
+ &title;
+ This text is about XML, the &xml; and this is an embedded <IMG src="image"/>
+</EXAMPLE>
+
diff --git a/test/ent3 b/test/ent3
new file mode 100644
index 0000000..f9803b8
--- /dev/null
+++ b/test/ent3
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+]>
+<EXAMPLE prop1="a&amp;b" prop2="&xml;">
+ Test of entities in attributes.
+</EXAMPLE>
+
diff --git a/test/ent4 b/test/ent4
new file mode 100644
index 0000000..e668b40
--- /dev/null
+++ b/test/ent4
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "Extensible Markup Language">
+]>
+<EXAMPLE >
+ Test of &amp;amp; behaviour a&amp;b .
+</EXAMPLE>
+
diff --git a/test/ent5 b/test/ent5
new file mode 100644
index 0000000..adb9ea7
--- /dev/null
+++ b/test/ent5
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<EXAMPLE>
+ This is an inverted exclamation sign &#xA1;
+ This is a space &#32;
+</EXAMPLE>
diff --git a/test/ent6 b/test/ent6
new file mode 100644
index 0000000..40b2f12
--- /dev/null
+++ b/test/ent6
@@ -0,0 +1,8 @@
+<!DOCTYPE doc [
+<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY amp "&#38;#38;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">
+]>
+<doc/>
diff --git a/test/ent7 b/test/ent7
new file mode 100644
index 0000000..3ef2030
--- /dev/null
+++ b/test/ent7
@@ -0,0 +1,7 @@
+<!DOCTYPE item [
+<!ENTITY % sampleEnt "<!ELEMENT item (para)+>">
+<!ENTITY sampleEnt "the hyacinth girl">
+%sampleEnt;
+<!ELEMENT para (#PCDATA)>
+]>
+<item><para>'they called me &sampleEnt;'</para></item>
diff --git a/test/ent8 b/test/ent8
new file mode 100644
index 0000000..5eeccf2
--- /dev/null
+++ b/test/ent8
@@ -0,0 +1,9 @@
+<!DOCTYPE doc [
+<!ENTITY test1 "test 1">
+<!ENTITY test2 "test 2">
+]>
+<doc>
+ <Content>Reten&#231;&#227;o</Content>
+ <Content>&lt;&gt;</Content>
+ <Content>&test1;&test2;</Content>
+</doc>
diff --git a/test/errors/attr1.xml b/test/errors/attr1.xml
new file mode 100644
index 0000000..96be477
--- /dev/null
+++ b/test/errors/attr1.xml
@@ -0,0 +1 @@
+<foo foo="oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
diff --git a/test/errors/attr2.xml b/test/errors/attr2.xml
new file mode 100644
index 0000000..e230c84
--- /dev/null
+++ b/test/errors/attr2.xml
@@ -0,0 +1 @@
+<foo foo=">oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
diff --git a/test/errors/dtd13 b/test/errors/dtd13
new file mode 100644
index 0000000..d7658b0
--- /dev/null
+++ b/test/errors/dtd13
@@ -0,0 +1,6 @@
+<!DOCTYPE doc [
+<!ENTITY EndAttr "27'" >
+]>
+<doc>
+<element attribute='a-&EndAttr;>
+</doc>
diff --git a/test/errors/name.xml b/test/errors/name.xml
new file mode 100644
index 0000000..0fc34b4
--- /dev/null
+++ b/test/errors/name.xml
@@ -0,0 +1 @@
+<foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
diff --git a/test/errors/name2.xml b/test/errors/name2.xml
new file mode 100644
index 0000000..af3592b
--- /dev/null
+++ b/test/errors/name2.xml
@@ -0,0 +1 @@
+<foo foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
diff --git a/test/eve.xml b/test/eve.xml
new file mode 100644
index 0000000..c6ca1c7
--- /dev/null
+++ b/test/eve.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE spec PUBLIC "-//testspec//" "dtds/eve.dtd" [
+<!ENTITY iso6.doc.date '29-May-1999'>
+]>
+<spec>
+</spec>
diff --git a/test/intsubset.xml b/test/intsubset.xml
new file mode 100644
index 0000000..709de15
--- /dev/null
+++ b/test/intsubset.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE root [
+<!ELEMENT root EMPTY>
+<!-- " -->
+]>
+<root/>
diff --git a/test/isolat1 b/test/isolat1
new file mode 100644
index 0000000..1e5a059
--- /dev/null
+++ b/test/isolat1
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<très>là</très>
diff --git a/test/isolat2 b/test/isolat2
new file mode 100644
index 0000000..8c290b9
--- /dev/null
+++ b/test/isolat2
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<tst>
+
+ The following table displays the characters in ISO 8859
+ Latin-1, which are printable and unlisted in the ascii
+ manual page.
+
+ Oct Dec Hex Char Description
+ --------------------------------------------------------------------
+ 240 160 A0 NO-BREAK SPACE
+ 241 161 A1 ¡ INVERTED EXCLAMATION MARK
+ 242 162 A2 ¢ CENT SIGN
+ 243 163 A3 £ POUND SIGN
+ 244 164 A4 ¤ CURRENCY SIGN
+ 245 165 A5 ¥ YEN SIGN
+ 246 166 A6 ¦ BROKEN BAR
+ 247 167 A7 § SECTION SIGN
+ 250 168 A8 ¨ DIAERESIS
+ 251 169 A9 © COPYRIGHT SIGN
+ 252 170 AA ª FEMININE ORDINAL INDICATOR
+ 253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 254 172 AC ¬ NOT SIGN
+ 255 173 AD ­ SOFT HYPHEN
+ 256 174 AE ® REGISTERED SIGN
+ 257 175 AF ¯ MACRON
+ 260 176 B0 ° DEGREE SIGN
+ 261 177 B1 ± PLUS-MINUS SIGN
+ 262 178 B2 ² SUPERSCRIPT TWO
+ 263 179 B3 ³ SUPERSCRIPT THREE
+ 264 180 B4 ´ ACUTE ACCENT
+ 265 181 B5 µ MICRO SIGN
+ 266 182 B6 ¶ PILCROW SIGN
+ 267 183 B7 · MIDDLE DOT
+ 270 184 B8 ¸ CEDILLA
+ 271 185 B9 ¹ SUPERSCRIPT ONE
+ 272 186 BA º MASCULINE ORDINAL INDICATOR
+ 273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 274 188 BC ¼ VULGAR FRACTION ONE QUARTER
+ 275 189 BD ½ VULGAR FRACTION ONE HALF
+ 276 190 BE ¾ VULGAR FRACTION THREE QUARTERS
+ 277 191 BF ¿ INVERTED QUESTION MARK
+ 300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
+ 301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
+ 302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ 303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
+ 304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
+ 305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
+ 306 198 C6 Æ LATIN CAPITAL LETTER AE
+ 307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
+ 310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
+ 311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
+ 312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ 313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
+ 314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
+ 315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
+ 316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ 317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
+ 320 208 D0 Ð LATIN CAPITAL LETTER ETH
+ 321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
+ 322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
+ 323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
+ 324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ 325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
+ 326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
+ 327 215 D7 × MULTIPLICATION SIGN
+ 330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
+ 331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
+ 332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
+ 333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ 334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
+ 335 221 DD Ý LATIN CAPITAL LETTER Y WITH ACUTE
+ 336 222 DE Þ LATIN CAPITAL LETTER THORN
+ 337 223 DF ß LATIN SMALL LETTER SHARP S
+ 340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
+ 341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
+ 342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
+ 343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
+ 344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
+ 345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
+ 346 230 E6 æ LATIN SMALL LETTER AE
+ 347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
+ 350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
+ 351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
+ 352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
+ 353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
+ 354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
+ 355 237 ED í LATIN SMALL LETTER I WITH ACUTE
+ 356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
+ 357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
+ 360 240 F0 ð LATIN SMALL LETTER ETH
+ 361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
+ 362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
+ 363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
+ 364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
+ 365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
+ 366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
+ 367 247 F7 ÷ DIVISION SIGN
+ 370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
+ 371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
+ 372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
+ 373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
+ 374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
+ 375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
+ 376 254 FE þ LATIN SMALL LETTER THORN
+ 377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
+
+</tst>
diff --git a/test/isolat3 b/test/isolat3
new file mode 100644
index 0000000..40fb3a0
--- /dev/null
+++ b/test/isolat3
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='ISO-8859-1'?>
+<rec>
+<eg><![CDATA[<!ENTITY % pub "&#xc9;ditions Gallimard" >
+<!ENTITY rights "All rights reserved" >
+<!ENTITY book "La Peste: Albert Camus,
+&#xA9; 1947 %pub;. &rights;" >]]></eg>
+then the replacement text for the entity "<code>book</code>" is:
+<eg>La Peste: Albert Camus,
+&#169; 1947 &#201;ditions Gallimard. &amp;rights;</eg>
+</rec>
diff --git a/test/namespaces/.memdump b/test/namespaces/.memdump
new file mode 100644
index 0000000..985efa7
--- /dev/null
+++ b/test/namespaces/.memdump
@@ -0,0 +1,4 @@
+ 11:53:33 AM
+
+ MEMORY ALLOCATED : 0, MAX was 18380
+BLOCK NUMBER SIZE TYPE
diff --git a/test/namespaces/err_0.xml b/test/namespaces/err_0.xml
new file mode 100644
index 0000000..50bdd32
--- /dev/null
+++ b/test/namespaces/err_0.xml
@@ -0,0 +1 @@
+<foo xmlnsbar="1"/>
diff --git a/test/namespaces/err_1.xml b/test/namespaces/err_1.xml
new file mode 100644
index 0000000..eb6f43b
--- /dev/null
+++ b/test/namespaces/err_1.xml
@@ -0,0 +1 @@
+<foo xmlns:="http://example.com/"/>
diff --git a/test/namespaces/err_10.xml b/test/namespaces/err_10.xml
new file mode 100644
index 0000000..cf36261
--- /dev/null
+++ b/test/namespaces/err_10.xml
@@ -0,0 +1 @@
+<tst xmlns="http://example.com/" xmlns="http://example.com/"/>
diff --git a/test/namespaces/err_11.xml b/test/namespaces/err_11.xml
new file mode 100644
index 0000000..9d81939
--- /dev/null
+++ b/test/namespaces/err_11.xml
@@ -0,0 +1 @@
+<tst xmlns:a="http://example.com/" xmlns:a="http://example.com/"/>
diff --git a/test/namespaces/err_2.xml b/test/namespaces/err_2.xml
new file mode 100644
index 0000000..9fd51b3
--- /dev/null
+++ b/test/namespaces/err_2.xml
@@ -0,0 +1 @@
+<:/>
diff --git a/test/namespaces/err_3.xml b/test/namespaces/err_3.xml
new file mode 100644
index 0000000..3d4d439
--- /dev/null
+++ b/test/namespaces/err_3.xml
@@ -0,0 +1 @@
+<:foo/>
diff --git a/test/namespaces/err_4.xml b/test/namespaces/err_4.xml
new file mode 100644
index 0000000..9dc294e
--- /dev/null
+++ b/test/namespaces/err_4.xml
@@ -0,0 +1 @@
+<f: xmlns:f="http://example.com/foo"/>
diff --git a/test/namespaces/err_5.xml b/test/namespaces/err_5.xml
new file mode 100644
index 0000000..5943c11
--- /dev/null
+++ b/test/namespaces/err_5.xml
@@ -0,0 +1 @@
+<f:a: xmlns:f="http://example.com/foo"/>
diff --git a/test/namespaces/err_6.xml b/test/namespaces/err_6.xml
new file mode 100644
index 0000000..e3eb3b2
--- /dev/null
+++ b/test/namespaces/err_6.xml
@@ -0,0 +1 @@
+<f:a:b xmlns:f="http://example.com/foo"/>
diff --git a/test/namespaces/err_7.xml b/test/namespaces/err_7.xml
new file mode 100644
index 0000000..5bbe235
--- /dev/null
+++ b/test/namespaces/err_7.xml
@@ -0,0 +1 @@
+<f:foo/>
diff --git a/test/namespaces/err_8.xml b/test/namespaces/err_8.xml
new file mode 100644
index 0000000..8321da2
--- /dev/null
+++ b/test/namespaces/err_8.xml
@@ -0,0 +1 @@
+<tst xmlns:xml="http://example.com/"/>
diff --git a/test/namespaces/err_9.xml b/test/namespaces/err_9.xml
new file mode 100644
index 0000000..4478c60
--- /dev/null
+++ b/test/namespaces/err_9.xml
@@ -0,0 +1,2 @@
+<tst xmlns:a="http://example.com/" xmlns:b="http://example.com/"
+ a:err="1" b:err="2"/>
diff --git a/test/ns b/test/ns
new file mode 100644
index 0000000..94b927e
--- /dev/null
+++ b/test/ns
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata dia:testattr="test"/>
+</dia:diagram>
diff --git a/test/ns2 b/test/ns2
new file mode 100644
index 0000000..80aaf94
--- /dev/null
+++ b/test/ns2
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"
+ dia:testattr="test"/>
diff --git a/test/ns3 b/test/ns3
new file mode 100644
index 0000000..76bb20d
--- /dev/null
+++ b/test/ns3
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<dia:diagram dia:testattr="test"
+ xmlns:dia="http://www.lysator.liu.se/~alla/dia/"/>
diff --git a/test/ns4 b/test/ns4
new file mode 100644
index 0000000..136bf92
--- /dev/null
+++ b/test/ns4
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<diagram testattr="test" xml:lang="en" xml:link="simple" xml:space="preserve"/>
diff --git a/test/p3p b/test/p3p
new file mode 100644
index 0000000..dad8fb7
--- /dev/null
+++ b/test/p3p
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<RDF:RDF xmlns:p3p="http://www.w3.org/TR/1998/WD-P3P10-syntax#proposal.DTD"
+ xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax#">
+<PROP realm="http://www.CoolCatalog.com/catalogue/"
+ entity="CoolCatalog" agreeID="94df1293a3e519bb"
+ assurance="http://www.TrustUs.org">
+ <USES>
+ <STATEMENT purp="2,3" recpnt="0" id="0"
+ consq="a site with clothes you'd appreciate.">
+ <WITH><PREFIX name="User.">
+ <REF name="Name.First"/>
+ <REF name="Bdate.Year" optional="1"/>
+ <REF name="Gender"/>
+ </PREFIX></WITH>
+ </STATEMENT>
+ </USES>
+ <USES>
+ <STATEMENT action="read&amp;write" purp="0" recpnt="0" id="1">
+ <REF name="User.Shipping."/>
+ </STATEMENT>
+ </USES>
+ <DISCLOSURE discURI="http://www.CoolCatalog.com/PrivacyPractice.html"
+ access="3" other="0,1"/>
+</PROP></RDF:RDF>
diff --git a/test/pi.xml b/test/pi.xml
new file mode 100644
index 0000000..48c7ff0
--- /dev/null
+++ b/test/pi.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<doc>
+<?document-start doc?>
+<empty/>
+<?document-end doc?>
+</doc>
diff --git a/test/pi2.xml b/test/pi2.xml
new file mode 100644
index 0000000..710d51c
--- /dev/null
+++ b/test/pi2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<?document-start doc?>
+<doc>
+<empty/>
+</doc>
+<?document-end doc?>
diff --git a/test/rdf1 b/test/rdf1
new file mode 100644
index 0000000..d44c3c6
--- /dev/null
+++ b/test/rdf1
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<RDF:RDF xmlns:RPM="http://www.rpm.org/" xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax#">
+ <RDF:Description HREF="ftp://rufus.w3.org/linux/redhat/redhat-5.1/i386/RedHat/RPMS/rpm-2.5-2.i386.rpm">
+ <RPM:Name>rpm</RPM:Name>
+ <RPM:Version>2.5</RPM:Version>
+ <RPM:Release>2</RPM:Release>
+ <RPM:Arch>i386</RPM:Arch>
+ <RPM:Os>Linux</RPM:Os>
+ <RPM:Distribution>Manhattan </RPM:Distribution>
+ <RPM:Vendor>Red Hat Software</RPM:Vendor>
+ <RPM:Packager>Red Hat Software &lt;bugs@redhat.com&gt;</RPM:Packager>
+ <RPM:Group>Utilities/System</RPM:Group>
+ <RPM:Summary>Red Hat Package Manager</RPM:Summary>
+ <RPM:Description>RPM is a powerful package manager, which can be used to build, install,
+query, verify, update, and uninstall individual software packages. A
+package consists of an archive of files, and package information, including
+name, version, and description.</RPM:Description>
+ <RPM:Copyright>GPL</RPM:Copyright>
+ <RPM:Changelog>* Sun May 10 1998 Prospector System &lt;bugs@redhat.com&gt;
+ - translations modified for de, fr, tr
+</RPM:Changelog>
+ <RPM:Sources>rpm-2.5-2.src.rpm</RPM:Sources>
+ <RPM:SourcesFtp>ftp://ftp.redhat.com/pub/redhat/redhat-5.1/SRPMS</RPM:SourcesFtp>
+ <RPM:BuildDate>Sun May 10 14:52:32 1998</RPM:BuildDate>
+ <RPM:Date>894826352</RPM:Date>
+ <RPM:Size>850599</RPM:Size>
+ <RPM:BuildHost>porky.redhat.com</RPM:BuildHost>
+ <RPM:Provides>
+ <RDF:Bag>
+ <RPM:Resource>rpm</RPM:Resource>
+ </RDF:Bag>
+ </RPM:Provides>
+ <RPM:Requires>
+ <RDF:Bag>
+ <RPM:Resource>/bin/sh</RPM:Resource>
+ <RPM:Resource>ld-linux.so.2</RPM:Resource>
+ <RPM:Resource>libc.so.6</RPM:Resource>
+ <RPM:Resource>libdb.so.2</RPM:Resource>
+ <RPM:Resource>libz.so.1</RPM:Resource>
+ <RPM:Resource>/bin/bash</RPM:Resource>
+ <RPM:Resource>/bin/sh</RPM:Resource>
+ </RDF:Bag>
+ </RPM:Requires>
+ <RPM:Files>/bin/rpm
+/usr/bin/find-provides
+/usr/bin/find-requires
+/usr/bin/gendiff
+/usr/bin/rpm2cpio
+/usr/doc/rpm-2.5
+/usr/doc/rpm-2.5/CHANGES
+/usr/doc/rpm-2.5/RPM-PGP-KEY
+/usr/doc/rpm-2.5/buildroot
+/usr/doc/rpm-2.5/dependencies
+/usr/doc/rpm-2.5/format
+/usr/doc/rpm-2.5/groups
+/usr/doc/rpm-2.5/macros
+/usr/doc/rpm-2.5/queryformat
+/usr/doc/rpm-2.5/relocatable
+/usr/doc/rpm-2.5/signatures
+/usr/doc/rpm-2.5/spec
+/usr/doc/rpm-2.5/triggers
+/usr/lib/rpmpopt
+/usr/lib/rpmrc
+/usr/man/man8/rpm.8
+/usr/man/man8/rpm2cpio.8
+/usr/share/locale/de/LC_MESSAGES/rpm.mo
+/usr/share/locale/fr/LC_MESSAGES/rpm.mo
+/usr/share/locale/pt-br/LC_MESSAGES/rpm.mo
+/usr/share/locale/sv/LC_MESSAGES/rpm.mo
+/usr/share/locale/tr/LC_MESSAGES/rpm.mo
+/usr/src/redhat
+/usr/src/redhat/BUILD
+/usr/src/redhat/RPMS
+/usr/src/redhat/RPMS/i386
+/usr/src/redhat/RPMS/noarch
+/usr/src/redhat/SOURCES
+/usr/src/redhat/SPECS
+/usr/src/redhat/SRPMS
+</RPM:Files>
+ </RDF:Description>
+</RDF:RDF>
diff --git a/test/rdf2 b/test/rdf2
new file mode 100644
index 0000000..fe80399
--- /dev/null
+++ b/test/rdf2
@@ -0,0 +1,1899 @@
+<?xml version="1.0"?>
+<RDF:RDF xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax#" xmlns:RPM="http://www.rpm.org/">
+ <RDF:Description about="ftp://rufus.w3.org/linux/dld/5.4/i386/RPMS/i386/ncurses4-4.2-3.i386.rpm">
+ <RPM:Name>ncurses4</RPM:Name>
+ <RPM:Version>4.2</RPM:Version>
+ <RPM:Release>3</RPM:Release>
+ <RPM:Arch>i386</RPM:Arch>
+ <RPM:Os>Linux</RPM:Os>
+ <RPM:Distribution>DLD</RPM:Distribution>
+ <RPM:Vendor>delix Computer GmbH</RPM:Vendor>
+ <RPM:Packager>Till Bubeck &lt;bubeck@delix.de&gt;, Ngo Than &lt;than@delix.de&gt;</RPM:Packager>
+ <RPM:Group>Libraries</RPM:Group>
+ <RPM:Summary>Bibliothek zur Ansteuerung von Terminals</RPM:Summary>
+ <RPM:Description>Diese Library stellt dem Programmierer vom Terminal unabh&#228;ngige
+Routinen zur Ansteuerung Ihres Bildschirms zur Verf&#252;gung, die
+speziell optimiert sind.
+Diese Version ist die &apos;new curses&apos; (ncurses) Variante und ist der
+anerkannte Ersatz f&#252;r die klassische Curses-Library, die nicht mehr
+weiterentwickelt wird.</RPM:Description>
+ <RPM:Copyright>GPL</RPM:Copyright>
+ <RPM:Sources>ncurses4-4.2-3.src.rpm</RPM:Sources>
+ <RPM:BuildDate>Tue May 12 19:30:26 1998</RPM:BuildDate>
+ <RPM:Date>895015826</RPM:Date>
+ <RPM:Size>1373513</RPM:Size>
+ <RPM:BuildHost>erdbeere.delix.de</RPM:BuildHost>
+ <RPM:Provides>
+ <RDF:Bag>
+ <RPM:Resource href="../../../../../resources/ncurses4.rdf">ncurses4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libpanel.so.4.rdf">libpanel.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libncurses.so.4.rdf">libncurses.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libmenu.so.4.rdf">libmenu.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/libform.so.4.rdf">libform.so.4</RPM:Resource>
+ <RPM:Resource href="../../../../../resources/ncurses.rdf">ncurses</RPM:Resource>
+ </RDF:Bag>
+ </RPM:Provides>
+ <RPM:Files>/lib/libncurses.so.4
+/lib/libncurses.so.4.2
+/usr/doc/ncurses4-4.2-3
+/usr/doc/ncurses4-4.2-3/ANNOUNCE.gz
+/usr/doc/ncurses4-4.2-3/NEWS.gz
+/usr/doc/ncurses4-4.2-3/README.gz
+/usr/doc/ncurses4-4.2-3/TO-DO.gz
+/usr/lib/libform.so.4
+/usr/lib/libform.so.4.2
+/usr/lib/libmenu.so.4
+/usr/lib/libmenu.so.4.2
+/usr/lib/libpanel.so.4
+/usr/lib/libpanel.so.4.2
+/usr/share/ncurses4
+/usr/share/ncurses4/tabset
+/usr/share/ncurses4/tabset/std
+/usr/share/ncurses4/tabset/stdcrt
+/usr/share/ncurses4/tabset/vt100
+/usr/share/ncurses4/tabset/vt300
+/usr/share/ncurses4/terminfo
+/usr/share/ncurses4/terminfo/1
+/usr/share/ncurses4/terminfo/1/1178
+/usr/share/ncurses4/terminfo/1/1730-lm
+/usr/share/ncurses4/terminfo/2
+/usr/share/ncurses4/terminfo/2/2621
+/usr/share/ncurses4/terminfo/2/2621-wl
+/usr/share/ncurses4/terminfo/2/2621A
+/usr/share/ncurses4/terminfo/2/2621a
+/usr/share/ncurses4/terminfo/3
+/usr/share/ncurses4/terminfo/3/386at
+/usr/share/ncurses4/terminfo/3/3b1
+/usr/share/ncurses4/terminfo/4
+/usr/share/ncurses4/terminfo/4/4025ex
+/usr/share/ncurses4/terminfo/4/4027ex
+/usr/share/ncurses4/terminfo/4/4410-w
+/usr/share/ncurses4/terminfo/5
+/usr/share/ncurses4/terminfo/5/5051
+/usr/share/ncurses4/terminfo/5/5410-w
+/usr/share/ncurses4/terminfo/5/5620
+/usr/share/ncurses4/terminfo/5/5630-24
+/usr/share/ncurses4/terminfo/5/5630DMD-24
+/usr/share/ncurses4/terminfo/6
+/usr/share/ncurses4/terminfo/6/630-lm
+/usr/share/ncurses4/terminfo/6/630MTG-24
+/usr/share/ncurses4/terminfo/7
+/usr/share/ncurses4/terminfo/7/730MTG-24
+/usr/share/ncurses4/terminfo/7/730MTG-41
+/usr/share/ncurses4/terminfo/7/730MTG-41r
+/usr/share/ncurses4/terminfo/7/730MTGr
+/usr/share/ncurses4/terminfo/7/730MTGr-24
+/usr/share/ncurses4/terminfo/8
+/usr/share/ncurses4/terminfo/8/8510
+/usr/share/ncurses4/terminfo/9
+/usr/share/ncurses4/terminfo/9/955-hb
+/usr/share/ncurses4/terminfo/9/955-w
+/usr/share/ncurses4/terminfo/P
+/usr/share/ncurses4/terminfo/P/P12
+/usr/share/ncurses4/terminfo/P/P12-M
+/usr/share/ncurses4/terminfo/P/P12-M-W
+/usr/share/ncurses4/terminfo/P/P12-W
+/usr/share/ncurses4/terminfo/P/P14
+/usr/share/ncurses4/terminfo/P/P14-M
+/usr/share/ncurses4/terminfo/P/P14-M-W
+/usr/share/ncurses4/terminfo/P/P14-W
+/usr/share/ncurses4/terminfo/P/P4
+/usr/share/ncurses4/terminfo/P/P5
+/usr/share/ncurses4/terminfo/P/P7
+/usr/share/ncurses4/terminfo/P/P8
+/usr/share/ncurses4/terminfo/P/P8-W
+/usr/share/ncurses4/terminfo/P/P9
+/usr/share/ncurses4/terminfo/P/P9-8
+/usr/share/ncurses4/terminfo/P/P9-8-W
+/usr/share/ncurses4/terminfo/P/P9-W
+/usr/share/ncurses4/terminfo/X
+/usr/share/ncurses4/terminfo/X/X-hpterm
+/usr/share/ncurses4/terminfo/a
+/usr/share/ncurses4/terminfo/a/a210
+/usr/share/ncurses4/terminfo/a/a80
+/usr/share/ncurses4/terminfo/a/a980
+/usr/share/ncurses4/terminfo/a/aa4080
+/usr/share/ncurses4/terminfo/a/aaa
+/usr/share/ncurses4/terminfo/a/aaa+dec
+/usr/share/ncurses4/terminfo/a/aaa+rv
+/usr/share/ncurses4/terminfo/a/aaa+unk
+/usr/share/ncurses4/terminfo/a/aaa-18
+/usr/share/ncurses4/terminfo/a/aaa-18-rv
+/usr/share/ncurses4/terminfo/a/aaa-20
+/usr/share/ncurses4/terminfo/a/aaa-22
+/usr/share/ncurses4/terminfo/a/aaa-24
+/usr/share/ncurses4/terminfo/a/aaa-24-rv
+/usr/share/ncurses4/terminfo/a/aaa-26
+/usr/share/ncurses4/terminfo/a/aaa-28
+/usr/share/ncurses4/terminfo/a/aaa-30
+/usr/share/ncurses4/terminfo/a/aaa-30-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-rv
+/usr/share/ncurses4/terminfo/a/aaa-30-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-s
+/usr/share/ncurses4/terminfo/a/aaa-30-s-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-30-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-30-s-rv-ct
+/usr/share/ncurses4/terminfo/a/aaa-36
+/usr/share/ncurses4/terminfo/a/aaa-36-rv
+/usr/share/ncurses4/terminfo/a/aaa-40
+/usr/share/ncurses4/terminfo/a/aaa-40-rv
+/usr/share/ncurses4/terminfo/a/aaa-48
+/usr/share/ncurses4/terminfo/a/aaa-48-rv
+/usr/share/ncurses4/terminfo/a/aaa-60
+/usr/share/ncurses4/terminfo/a/aaa-60-dec-rv
+/usr/share/ncurses4/terminfo/a/aaa-60-rv
+/usr/share/ncurses4/terminfo/a/aaa-60-s
+/usr/share/ncurses4/terminfo/a/aaa-60-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-db
+/usr/share/ncurses4/terminfo/a/aaa-rv
+/usr/share/ncurses4/terminfo/a/aaa-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-rv-unk
+/usr/share/ncurses4/terminfo/a/aaa-s
+/usr/share/ncurses4/terminfo/a/aaa-s-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-s-rv
+/usr/share/ncurses4/terminfo/a/aaa-s-rv-ctxt
+/usr/share/ncurses4/terminfo/a/aaa-unk
+/usr/share/ncurses4/terminfo/a/aas1901
+/usr/share/ncurses4/terminfo/a/abm80
+/usr/share/ncurses4/terminfo/a/abm85
+/usr/share/ncurses4/terminfo/a/abm85e
+/usr/share/ncurses4/terminfo/a/abm85h
+/usr/share/ncurses4/terminfo/a/abm85h-old
+/usr/share/ncurses4/terminfo/a/act4
+/usr/share/ncurses4/terminfo/a/act5
+/usr/share/ncurses4/terminfo/a/addrinfo
+/usr/share/ncurses4/terminfo/a/adds980
+/usr/share/ncurses4/terminfo/a/addsviewpoint
+/usr/share/ncurses4/terminfo/a/addsvp60
+/usr/share/ncurses4/terminfo/a/adm+sgr
+/usr/share/ncurses4/terminfo/a/adm1
+/usr/share/ncurses4/terminfo/a/adm11
+/usr/share/ncurses4/terminfo/a/adm1178
+/usr/share/ncurses4/terminfo/a/adm12
+/usr/share/ncurses4/terminfo/a/adm1a
+/usr/share/ncurses4/terminfo/a/adm2
+/usr/share/ncurses4/terminfo/a/adm20
+/usr/share/ncurses4/terminfo/a/adm21
+/usr/share/ncurses4/terminfo/a/adm22
+/usr/share/ncurses4/terminfo/a/adm3
+/usr/share/ncurses4/terminfo/a/adm31
+/usr/share/ncurses4/terminfo/a/adm31-old
+/usr/share/ncurses4/terminfo/a/adm36
+/usr/share/ncurses4/terminfo/a/adm3a
+/usr/share/ncurses4/terminfo/a/adm3a+
+/usr/share/ncurses4/terminfo/a/adm42
+/usr/share/ncurses4/terminfo/a/adm42-ns
+/usr/share/ncurses4/terminfo/a/adm5
+/usr/share/ncurses4/terminfo/a/aepro
+/usr/share/ncurses4/terminfo/a/aixterm-m
+/usr/share/ncurses4/terminfo/a/aixterm-m-old
+/usr/share/ncurses4/terminfo/a/aj
+/usr/share/ncurses4/terminfo/a/aj510
+/usr/share/ncurses4/terminfo/a/aj830
+/usr/share/ncurses4/terminfo/a/aj832
+/usr/share/ncurses4/terminfo/a/alt2
+/usr/share/ncurses4/terminfo/a/alt3
+/usr/share/ncurses4/terminfo/a/alt4
+/usr/share/ncurses4/terminfo/a/alt5
+/usr/share/ncurses4/terminfo/a/alt7
+/usr/share/ncurses4/terminfo/a/alt7pc
+/usr/share/ncurses4/terminfo/a/alto-h19
+/usr/share/ncurses4/terminfo/a/alto-heath
+/usr/share/ncurses4/terminfo/a/altoh19
+/usr/share/ncurses4/terminfo/a/altoheath
+/usr/share/ncurses4/terminfo/a/altos-2
+/usr/share/ncurses4/terminfo/a/altos-3
+/usr/share/ncurses4/terminfo/a/altos-4
+/usr/share/ncurses4/terminfo/a/altos-5
+/usr/share/ncurses4/terminfo/a/altos2
+/usr/share/ncurses4/terminfo/a/altos3
+/usr/share/ncurses4/terminfo/a/altos4
+/usr/share/ncurses4/terminfo/a/altos5
+/usr/share/ncurses4/terminfo/a/altos7
+/usr/share/ncurses4/terminfo/a/altos7pc
+/usr/share/ncurses4/terminfo/a/ambas
+/usr/share/ncurses4/terminfo/a/ambassador
+/usr/share/ncurses4/terminfo/a/amiga
+/usr/share/ncurses4/terminfo/a/amiga-h
+/usr/share/ncurses4/terminfo/a/amp219
+/usr/share/ncurses4/terminfo/a/amp219w
+/usr/share/ncurses4/terminfo/a/ampex-219
+/usr/share/ncurses4/terminfo/a/ampex-219w
+/usr/share/ncurses4/terminfo/a/ampex-232
+/usr/share/ncurses4/terminfo/a/ampex175
+/usr/share/ncurses4/terminfo/a/ampex175-b
+/usr/share/ncurses4/terminfo/a/ampex210
+/usr/share/ncurses4/terminfo/a/ampex219
+/usr/share/ncurses4/terminfo/a/ampex219w
+/usr/share/ncurses4/terminfo/a/ampex232
+/usr/share/ncurses4/terminfo/a/ampex232w
+/usr/share/ncurses4/terminfo/a/ampex80
+/usr/share/ncurses4/terminfo/a/annarbor4080
+/usr/share/ncurses4/terminfo/a/ansi
+/usr/share/ncurses4/terminfo/a/ansi-color-2-emx
+/usr/share/ncurses4/terminfo/a/ansi-color-3-emx
+/usr/share/ncurses4/terminfo/a/ansi-emx
+/usr/share/ncurses4/terminfo/a/ansi-m
+/usr/share/ncurses4/terminfo/a/ansi-mini
+/usr/share/ncurses4/terminfo/a/ansi-mono
+/usr/share/ncurses4/terminfo/a/ansi-nt
+/usr/share/ncurses4/terminfo/a/ansi.sys
+/usr/share/ncurses4/terminfo/a/ansi.sys-old
+/usr/share/ncurses4/terminfo/a/ansi.sysk
+/usr/share/ncurses4/terminfo/a/ansi43m
+/usr/share/ncurses4/terminfo/a/ansi77
+/usr/share/ncurses4/terminfo/a/ansi80x25
+/usr/share/ncurses4/terminfo/a/ansi80x25-mono
+/usr/share/ncurses4/terminfo/a/ansi80x25-raw
+/usr/share/ncurses4/terminfo/a/ansi80x30
+/usr/share/ncurses4/terminfo/a/ansi80x30-mono
+/usr/share/ncurses4/terminfo/a/ansi80x43
+/usr/share/ncurses4/terminfo/a/ansi80x43-mono
+/usr/share/ncurses4/terminfo/a/ansi80x50
+/usr/share/ncurses4/terminfo/a/ansi80x50-mono
+/usr/share/ncurses4/terminfo/a/ansi80x60
+/usr/share/ncurses4/terminfo/a/ansi80x60-mono
+/usr/share/ncurses4/terminfo/a/ansil
+/usr/share/ncurses4/terminfo/a/ansil-mono
+/usr/share/ncurses4/terminfo/a/ansis
+/usr/share/ncurses4/terminfo/a/ansis-mono
+/usr/share/ncurses4/terminfo/a/ansisysk
+/usr/share/ncurses4/terminfo/a/ansiw
+/usr/share/ncurses4/terminfo/a/ap-vm80
+/usr/share/ncurses4/terminfo/a/apl
+/usr/share/ncurses4/terminfo/a/apollo
+/usr/share/ncurses4/terminfo/a/apollo_15P
+/usr/share/ncurses4/terminfo/a/apollo_19L
+/usr/share/ncurses4/terminfo/a/apollo_color
+/usr/share/ncurses4/terminfo/a/apple-80
+/usr/share/ncurses4/terminfo/a/apple-ae
+/usr/share/ncurses4/terminfo/a/apple-soroc
+/usr/share/ncurses4/terminfo/a/apple-uterm
+/usr/share/ncurses4/terminfo/a/apple-uterm-vb
+/usr/share/ncurses4/terminfo/a/apple-videx
+/usr/share/ncurses4/terminfo/a/apple-videx2
+/usr/share/ncurses4/terminfo/a/apple-videx3
+/usr/share/ncurses4/terminfo/a/apple-vm80
+/usr/share/ncurses4/terminfo/a/apple2e
+/usr/share/ncurses4/terminfo/a/apple2e-p
+/usr/share/ncurses4/terminfo/a/apple80p
+/usr/share/ncurses4/terminfo/a/appleII
+/usr/share/ncurses4/terminfo/a/appleIIc
+/usr/share/ncurses4/terminfo/a/appleIIe
+/usr/share/ncurses4/terminfo/a/appleIIgs
+/usr/share/ncurses4/terminfo/a/at386
+/usr/share/ncurses4/terminfo/a/atari
+/usr/share/ncurses4/terminfo/a/att2300
+/usr/share/ncurses4/terminfo/a/att2350
+/usr/share/ncurses4/terminfo/a/att4410
+/usr/share/ncurses4/terminfo/a/att4410-w
+/usr/share/ncurses4/terminfo/a/att4410v1
+/usr/share/ncurses4/terminfo/a/att4410v1-w
+/usr/share/ncurses4/terminfo/a/att4415
+/usr/share/ncurses4/terminfo/a/att4415+nl
+/usr/share/ncurses4/terminfo/a/att4415-nl
+/usr/share/ncurses4/terminfo/a/att4415-rv
+/usr/share/ncurses4/terminfo/a/att4415-rv-nl
+/usr/share/ncurses4/terminfo/a/att4415-w
+/usr/share/ncurses4/terminfo/a/att4415-w-nl
+/usr/share/ncurses4/terminfo/a/att4415-w-rv
+/usr/share/ncurses4/terminfo/a/att4415-w-rv-n
+/usr/share/ncurses4/terminfo/a/att4418
+/usr/share/ncurses4/terminfo/a/att4418-w
+/usr/share/ncurses4/terminfo/a/att4420
+/usr/share/ncurses4/terminfo/a/att4424
+/usr/share/ncurses4/terminfo/a/att4424-1
+/usr/share/ncurses4/terminfo/a/att4424m
+/usr/share/ncurses4/terminfo/a/att4425
+/usr/share/ncurses4/terminfo/a/att4425-nl
+/usr/share/ncurses4/terminfo/a/att4425-w
+/usr/share/ncurses4/terminfo/a/att4426
+/usr/share/ncurses4/terminfo/a/att500
+/usr/share/ncurses4/terminfo/a/att505
+/usr/share/ncurses4/terminfo/a/att505-24
+/usr/share/ncurses4/terminfo/a/att510a
+/usr/share/ncurses4/terminfo/a/att510d
+/usr/share/ncurses4/terminfo/a/att513
+/usr/share/ncurses4/terminfo/a/att5310
+/usr/share/ncurses4/terminfo/a/att5320
+/usr/share/ncurses4/terminfo/a/att5410
+/usr/share/ncurses4/terminfo/a/att5410-w
+/usr/share/ncurses4/terminfo/a/att5410v1
+/usr/share/ncurses4/terminfo/a/att5410v1-w
+/usr/share/ncurses4/terminfo/a/att5418
+/usr/share/ncurses4/terminfo/a/att5418-w
+/usr/share/ncurses4/terminfo/a/att5420
+/usr/share/ncurses4/terminfo/a/att5420+nl
+/usr/share/ncurses4/terminfo/a/att5420-nl
+/usr/share/ncurses4/terminfo/a/att5420-rv
+/usr/share/ncurses4/terminfo/a/att5420-rv-nl
+/usr/share/ncurses4/terminfo/a/att5420-w
+/usr/share/ncurses4/terminfo/a/att5420-w-nl
+/usr/share/ncurses4/terminfo/a/att5420-w-rv
+/usr/share/ncurses4/terminfo/a/att5420-w-rv-n
+/usr/share/ncurses4/terminfo/a/att5420_2
+/usr/share/ncurses4/terminfo/a/att5420_2-w
+/usr/share/ncurses4/terminfo/a/att5425
+/usr/share/ncurses4/terminfo/a/att5425-nl
+/usr/share/ncurses4/terminfo/a/att5425-w
+/usr/share/ncurses4/terminfo/a/att5430
+/usr/share/ncurses4/terminfo/a/att5620
+/usr/share/ncurses4/terminfo/a/att5620-1
+/usr/share/ncurses4/terminfo/a/att5620-24
+/usr/share/ncurses4/terminfo/a/att5620-34
+/usr/share/ncurses4/terminfo/a/att5620-s
+/usr/share/ncurses4/terminfo/a/att605
+/usr/share/ncurses4/terminfo/a/att605-pc
+/usr/share/ncurses4/terminfo/a/att605-w
+/usr/share/ncurses4/terminfo/a/att610
+/usr/share/ncurses4/terminfo/a/att610-103k
+/usr/share/ncurses4/terminfo/a/att610-103k-w
+/usr/share/ncurses4/terminfo/a/att610-w
+/usr/share/ncurses4/terminfo/a/att615
+/usr/share/ncurses4/terminfo/a/att615-103k
+/usr/share/ncurses4/terminfo/a/att615-103k-w
+/usr/share/ncurses4/terminfo/a/att615-w
+/usr/share/ncurses4/terminfo/a/att620
+/usr/share/ncurses4/terminfo/a/att620-103k
+/usr/share/ncurses4/terminfo/a/att620-103k-w
+/usr/share/ncurses4/terminfo/a/att620-w
+/usr/share/ncurses4/terminfo/a/att630
+/usr/share/ncurses4/terminfo/a/att630-24
+/usr/share/ncurses4/terminfo/a/att6386
+/usr/share/ncurses4/terminfo/a/att730
+/usr/share/ncurses4/terminfo/a/att730-24
+/usr/share/ncurses4/terminfo/a/att730-41
+/usr/share/ncurses4/terminfo/a/att7300
+/usr/share/ncurses4/terminfo/a/att730r
+/usr/share/ncurses4/terminfo/a/att730r-24
+/usr/share/ncurses4/terminfo/a/att730r-41
+/usr/share/ncurses4/terminfo/a/avatar
+/usr/share/ncurses4/terminfo/a/avatar0
+/usr/share/ncurses4/terminfo/a/avatar0+
+/usr/share/ncurses4/terminfo/a/avatar1
+/usr/share/ncurses4/terminfo/a/avt
+/usr/share/ncurses4/terminfo/a/avt+s
+/usr/share/ncurses4/terminfo/a/avt-ns
+/usr/share/ncurses4/terminfo/a/avt-rv
+/usr/share/ncurses4/terminfo/a/avt-rv-ns
+/usr/share/ncurses4/terminfo/a/avt-rv-s
+/usr/share/ncurses4/terminfo/a/avt-s
+/usr/share/ncurses4/terminfo/a/avt-w
+/usr/share/ncurses4/terminfo/a/avt-w-ns
+/usr/share/ncurses4/terminfo/a/avt-w-rv
+/usr/share/ncurses4/terminfo/a/avt-w-rv-ns
+/usr/share/ncurses4/terminfo/a/avt-w-rv-s
+/usr/share/ncurses4/terminfo/a/avt-w-s
+/usr/share/ncurses4/terminfo/a/aws
+/usr/share/ncurses4/terminfo/a/awsc
+/usr/share/ncurses4/terminfo/b
+/usr/share/ncurses4/terminfo/b/b-128
+/usr/share/ncurses4/terminfo/b/bantam
+/usr/share/ncurses4/terminfo/b/basic4
+/usr/share/ncurses4/terminfo/b/basis
+/usr/share/ncurses4/terminfo/b/bct510a
+/usr/share/ncurses4/terminfo/b/bct510d
+/usr/share/ncurses4/terminfo/b/beacon
+/usr/share/ncurses4/terminfo/b/bee
+/usr/share/ncurses4/terminfo/b/beehive
+/usr/share/ncurses4/terminfo/b/beehive3
+/usr/share/ncurses4/terminfo/b/beehive4
+/usr/share/ncurses4/terminfo/b/beehiveIIIm
+/usr/share/ncurses4/terminfo/b/beterm
+/usr/share/ncurses4/terminfo/b/bg1.25
+/usr/share/ncurses4/terminfo/b/bg1.25nv
+/usr/share/ncurses4/terminfo/b/bg1.25rv
+/usr/share/ncurses4/terminfo/b/bg2.0
+/usr/share/ncurses4/terminfo/b/bg2.0nv
+/usr/share/ncurses4/terminfo/b/bg2.0rv
+/usr/share/ncurses4/terminfo/b/bg3.10
+/usr/share/ncurses4/terminfo/b/bg3.10nv
+/usr/share/ncurses4/terminfo/b/bg3.10rv
+/usr/share/ncurses4/terminfo/b/bh3m
+/usr/share/ncurses4/terminfo/b/bh4
+/usr/share/ncurses4/terminfo/b/bitgraph
+/usr/share/ncurses4/terminfo/b/blit
+/usr/share/ncurses4/terminfo/b/bobcat
+/usr/share/ncurses4/terminfo/b/bsdos
+/usr/share/ncurses4/terminfo/b/bsdos-bold
+/usr/share/ncurses4/terminfo/c
+/usr/share/ncurses4/terminfo/c/c100
+/usr/share/ncurses4/terminfo/c/c100-1p
+/usr/share/ncurses4/terminfo/c/c100-4p
+/usr/share/ncurses4/terminfo/c/c100-rv
+/usr/share/ncurses4/terminfo/c/c100-rv-4p
+/usr/share/ncurses4/terminfo/c/c104
+/usr/share/ncurses4/terminfo/c/c108
+/usr/share/ncurses4/terminfo/c/c108-4p
+/usr/share/ncurses4/terminfo/c/c108-8p
+/usr/share/ncurses4/terminfo/c/c108-rv
+/usr/share/ncurses4/terminfo/c/c108-rv-4p
+/usr/share/ncurses4/terminfo/c/c108-rv-8p
+/usr/share/ncurses4/terminfo/c/c108-w
+/usr/share/ncurses4/terminfo/c/c108-w-8p
+/usr/share/ncurses4/terminfo/c/c300
+/usr/share/ncurses4/terminfo/c/c301
+/usr/share/ncurses4/terminfo/c/c321
+/usr/share/ncurses4/terminfo/c/ca22851
+/usr/share/ncurses4/terminfo/c/cad68-2
+/usr/share/ncurses4/terminfo/c/cad68-3
+/usr/share/ncurses4/terminfo/c/cbblit
+/usr/share/ncurses4/terminfo/c/cbunix
+/usr/share/ncurses4/terminfo/c/cci
+/usr/share/ncurses4/terminfo/c/cci1
+/usr/share/ncurses4/terminfo/c/cdc456
+/usr/share/ncurses4/terminfo/c/cdc721
+/usr/share/ncurses4/terminfo/c/cdc721-esc
+/usr/share/ncurses4/terminfo/c/cdc721ll
+/usr/share/ncurses4/terminfo/c/cdc752
+/usr/share/ncurses4/terminfo/c/cdc756
+/usr/share/ncurses4/terminfo/c/cg7900
+/usr/share/ncurses4/terminfo/c/cgc2
+/usr/share/ncurses4/terminfo/c/cgc3
+/usr/share/ncurses4/terminfo/c/chromatics
+/usr/share/ncurses4/terminfo/c/ci8510
+/usr/share/ncurses4/terminfo/c/cit-80
+/usr/share/ncurses4/terminfo/c/cit101
+/usr/share/ncurses4/terminfo/c/cit101e
+/usr/share/ncurses4/terminfo/c/cit101e-132
+/usr/share/ncurses4/terminfo/c/cit101e-n
+/usr/share/ncurses4/terminfo/c/cit101e-n132
+/usr/share/ncurses4/terminfo/c/cit101e-rv
+/usr/share/ncurses4/terminfo/c/cit500
+/usr/share/ncurses4/terminfo/c/cit80
+/usr/share/ncurses4/terminfo/c/citc
+/usr/share/ncurses4/terminfo/c/citoh
+/usr/share/ncurses4/terminfo/c/citoh-6lpi
+/usr/share/ncurses4/terminfo/c/citoh-8lpi
+/usr/share/ncurses4/terminfo/c/citoh-comp
+/usr/share/ncurses4/terminfo/c/citoh-elite
+/usr/share/ncurses4/terminfo/c/citoh-pica
+/usr/share/ncurses4/terminfo/c/citoh-prop
+/usr/share/ncurses4/terminfo/c/citoh-ps
+/usr/share/ncurses4/terminfo/c/coco3
+/usr/share/ncurses4/terminfo/c/coherent
+/usr/share/ncurses4/terminfo/c/color_xterm
+/usr/share/ncurses4/terminfo/c/colorscan
+/usr/share/ncurses4/terminfo/c/commodore
+/usr/share/ncurses4/terminfo/c/concept
+/usr/share/ncurses4/terminfo/c/concept-avt
+/usr/share/ncurses4/terminfo/c/concept100
+/usr/share/ncurses4/terminfo/c/concept100-rv
+/usr/share/ncurses4/terminfo/c/concept108
+/usr/share/ncurses4/terminfo/c/concept108-4p
+/usr/share/ncurses4/terminfo/c/concept108-8p
+/usr/share/ncurses4/terminfo/c/concept108-w-8
+/usr/share/ncurses4/terminfo/c/concept108-w8p
+/usr/share/ncurses4/terminfo/c/concept108rv4p
+/usr/share/ncurses4/terminfo/c/cons25
+/usr/share/ncurses4/terminfo/c/cons25-iso-m
+/usr/share/ncurses4/terminfo/c/cons25-iso8859
+/usr/share/ncurses4/terminfo/c/cons25-koi8-r
+/usr/share/ncurses4/terminfo/c/cons25-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons25-m
+/usr/share/ncurses4/terminfo/c/cons25l1
+/usr/share/ncurses4/terminfo/c/cons25l1-m
+/usr/share/ncurses4/terminfo/c/cons25r
+/usr/share/ncurses4/terminfo/c/cons25r-m
+/usr/share/ncurses4/terminfo/c/cons25w
+/usr/share/ncurses4/terminfo/c/cons30
+/usr/share/ncurses4/terminfo/c/cons30-m
+/usr/share/ncurses4/terminfo/c/cons43
+/usr/share/ncurses4/terminfo/c/cons43-m
+/usr/share/ncurses4/terminfo/c/cons50
+/usr/share/ncurses4/terminfo/c/cons50-iso-m
+/usr/share/ncurses4/terminfo/c/cons50-iso8859
+/usr/share/ncurses4/terminfo/c/cons50-koi8r
+/usr/share/ncurses4/terminfo/c/cons50-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons50-m
+/usr/share/ncurses4/terminfo/c/cons50l1
+/usr/share/ncurses4/terminfo/c/cons50l1-m
+/usr/share/ncurses4/terminfo/c/cons50r
+/usr/share/ncurses4/terminfo/c/cons50r-m
+/usr/share/ncurses4/terminfo/c/cons60
+/usr/share/ncurses4/terminfo/c/cons60-iso
+/usr/share/ncurses4/terminfo/c/cons60-iso-m
+/usr/share/ncurses4/terminfo/c/cons60-koi8r
+/usr/share/ncurses4/terminfo/c/cons60-koi8r-m
+/usr/share/ncurses4/terminfo/c/cons60-m
+/usr/share/ncurses4/terminfo/c/cons60l1
+/usr/share/ncurses4/terminfo/c/cons60l1-m
+/usr/share/ncurses4/terminfo/c/cons60r
+/usr/share/ncurses4/terminfo/c/cons60r-m
+/usr/share/ncurses4/terminfo/c/contel300
+/usr/share/ncurses4/terminfo/c/contel301
+/usr/share/ncurses4/terminfo/c/contel320
+/usr/share/ncurses4/terminfo/c/contel321
+/usr/share/ncurses4/terminfo/c/cops
+/usr/share/ncurses4/terminfo/c/cops-10
+/usr/share/ncurses4/terminfo/c/cops10
+/usr/share/ncurses4/terminfo/c/cs10
+/usr/share/ncurses4/terminfo/c/cs10-w
+/usr/share/ncurses4/terminfo/c/ct82
+/usr/share/ncurses4/terminfo/c/ct8500
+/usr/share/ncurses4/terminfo/c/ctrm
+/usr/share/ncurses4/terminfo/c/cx
+/usr/share/ncurses4/terminfo/c/cx100
+/usr/share/ncurses4/terminfo/c/cyb110
+/usr/share/ncurses4/terminfo/c/cyb83
+/usr/share/ncurses4/terminfo/d
+/usr/share/ncurses4/terminfo/d/d132
+/usr/share/ncurses4/terminfo/d/d80
+/usr/share/ncurses4/terminfo/d/d800
+/usr/share/ncurses4/terminfo/d/datagraphix
+/usr/share/ncurses4/terminfo/d/datamedia2500
+/usr/share/ncurses4/terminfo/d/datapoint
+/usr/share/ncurses4/terminfo/d/dataspeed40
+/usr/share/ncurses4/terminfo/d/dd5000
+/usr/share/ncurses4/terminfo/d/ddr
+/usr/share/ncurses4/terminfo/d/ddr3180
+/usr/share/ncurses4/terminfo/d/dec-vt100
+/usr/share/ncurses4/terminfo/d/dec-vt220
+/usr/share/ncurses4/terminfo/d/dec-vt330
+/usr/share/ncurses4/terminfo/d/dec-vt340
+/usr/share/ncurses4/terminfo/d/dec-vt400
+/usr/share/ncurses4/terminfo/d/decpro
+/usr/share/ncurses4/terminfo/d/decwriter
+/usr/share/ncurses4/terminfo/d/delta
+/usr/share/ncurses4/terminfo/d/dg-ansi
+/usr/share/ncurses4/terminfo/d/dg100
+/usr/share/ncurses4/terminfo/d/dg200
+/usr/share/ncurses4/terminfo/d/dg210
+/usr/share/ncurses4/terminfo/d/dg211
+/usr/share/ncurses4/terminfo/d/dg450
+/usr/share/ncurses4/terminfo/d/dg460-ansi
+/usr/share/ncurses4/terminfo/d/dg6053
+/usr/share/ncurses4/terminfo/d/dg6134
+/usr/share/ncurses4/terminfo/d/diablo
+/usr/share/ncurses4/terminfo/d/diablo-lm
+/usr/share/ncurses4/terminfo/d/diablo1620
+/usr/share/ncurses4/terminfo/d/diablo1620-m8
+/usr/share/ncurses4/terminfo/d/diablo1640
+/usr/share/ncurses4/terminfo/d/diablo1640-lm
+/usr/share/ncurses4/terminfo/d/diablo1640-m8
+/usr/share/ncurses4/terminfo/d/diablo1720
+/usr/share/ncurses4/terminfo/d/diablo1730
+/usr/share/ncurses4/terminfo/d/diablo1740
+/usr/share/ncurses4/terminfo/d/diablo1740-lm
+/usr/share/ncurses4/terminfo/d/diablo450
+/usr/share/ncurses4/terminfo/d/diablo630
+/usr/share/ncurses4/terminfo/d/dialogue
+/usr/share/ncurses4/terminfo/d/dialogue80
+/usr/share/ncurses4/terminfo/d/digilog
+/usr/share/ncurses4/terminfo/d/dku7003
+/usr/share/ncurses4/terminfo/d/dku7003-dumb
+/usr/share/ncurses4/terminfo/d/dm1520
+/usr/share/ncurses4/terminfo/d/dm1521
+/usr/share/ncurses4/terminfo/d/dm2500
+/usr/share/ncurses4/terminfo/d/dm3025
+/usr/share/ncurses4/terminfo/d/dm3045
+/usr/share/ncurses4/terminfo/d/dm80
+/usr/share/ncurses4/terminfo/d/dm80w
+/usr/share/ncurses4/terminfo/d/dmchat
+/usr/share/ncurses4/terminfo/d/dmd
+/usr/share/ncurses4/terminfo/d/dmd-24
+/usr/share/ncurses4/terminfo/d/dmd-34
+/usr/share/ncurses4/terminfo/d/dmd1
+/usr/share/ncurses4/terminfo/d/dmdt80
+/usr/share/ncurses4/terminfo/d/dmdt80w
+/usr/share/ncurses4/terminfo/d/dmterm
+/usr/share/ncurses4/terminfo/d/dp3360
+/usr/share/ncurses4/terminfo/d/dp8242
+/usr/share/ncurses4/terminfo/d/ds40
+/usr/share/ncurses4/terminfo/d/ds40-2
+/usr/share/ncurses4/terminfo/d/dt-100
+/usr/share/ncurses4/terminfo/d/dt-100w
+/usr/share/ncurses4/terminfo/d/dt100
+/usr/share/ncurses4/terminfo/d/dt100w
+/usr/share/ncurses4/terminfo/d/dt110
+/usr/share/ncurses4/terminfo/d/dt80
+/usr/share/ncurses4/terminfo/d/dt80-sas
+/usr/share/ncurses4/terminfo/d/dt80w
+/usr/share/ncurses4/terminfo/d/dtc300s
+/usr/share/ncurses4/terminfo/d/dtc382
+/usr/share/ncurses4/terminfo/d/dtterm
+/usr/share/ncurses4/terminfo/d/dumb
+/usr/share/ncurses4/terminfo/d/dw
+/usr/share/ncurses4/terminfo/d/dw1
+/usr/share/ncurses4/terminfo/d/dw2
+/usr/share/ncurses4/terminfo/d/dw3
+/usr/share/ncurses4/terminfo/d/dw4
+/usr/share/ncurses4/terminfo/d/dwk
+/usr/share/ncurses4/terminfo/d/dwk-vt
+/usr/share/ncurses4/terminfo/e
+/usr/share/ncurses4/terminfo/e/ecma+color
+/usr/share/ncurses4/terminfo/e/ecma+sgr
+/usr/share/ncurses4/terminfo/e/emots
+/usr/share/ncurses4/terminfo/e/emu
+/usr/share/ncurses4/terminfo/e/env230
+/usr/share/ncurses4/terminfo/e/envision230
+/usr/share/ncurses4/terminfo/e/ep40
+/usr/share/ncurses4/terminfo/e/ep4000
+/usr/share/ncurses4/terminfo/e/ep4080
+/usr/share/ncurses4/terminfo/e/ep48
+/usr/share/ncurses4/terminfo/e/ergo4000
+/usr/share/ncurses4/terminfo/e/esprit
+/usr/share/ncurses4/terminfo/e/esprit-am
+/usr/share/ncurses4/terminfo/e/eterm
+/usr/share/ncurses4/terminfo/e/ex155
+/usr/share/ncurses4/terminfo/e/excel62
+/usr/share/ncurses4/terminfo/e/excel62-rv
+/usr/share/ncurses4/terminfo/e/excel62-w
+/usr/share/ncurses4/terminfo/e/excel64
+/usr/share/ncurses4/terminfo/e/excel64-rv
+/usr/share/ncurses4/terminfo/e/excel64-w
+/usr/share/ncurses4/terminfo/e/exec80
+/usr/share/ncurses4/terminfo/f
+/usr/share/ncurses4/terminfo/f/f100
+/usr/share/ncurses4/terminfo/f/f100-rv
+/usr/share/ncurses4/terminfo/f/f110
+/usr/share/ncurses4/terminfo/f/f110-14
+/usr/share/ncurses4/terminfo/f/f110-14w
+/usr/share/ncurses4/terminfo/f/f110-w
+/usr/share/ncurses4/terminfo/f/f1720
+/usr/share/ncurses4/terminfo/f/f1720a
+/usr/share/ncurses4/terminfo/f/f200
+/usr/share/ncurses4/terminfo/f/f200-w
+/usr/share/ncurses4/terminfo/f/f200vi
+/usr/share/ncurses4/terminfo/f/f200vi-w
+/usr/share/ncurses4/terminfo/f/falco
+/usr/share/ncurses4/terminfo/f/falco-p
+/usr/share/ncurses4/terminfo/f/fenix
+/usr/share/ncurses4/terminfo/f/fenixw
+/usr/share/ncurses4/terminfo/f/fixterm
+/usr/share/ncurses4/terminfo/f/fortune
+/usr/share/ncurses4/terminfo/f/fos
+/usr/share/ncurses4/terminfo/f/fox
+/usr/share/ncurses4/terminfo/f/freedom
+/usr/share/ncurses4/terminfo/f/freedom-rv
+/usr/share/ncurses4/terminfo/f/freedom100
+/usr/share/ncurses4/terminfo/f/freedom110
+/usr/share/ncurses4/terminfo/f/freedom200
+/usr/share/ncurses4/terminfo/g
+/usr/share/ncurses4/terminfo/g/gator
+/usr/share/ncurses4/terminfo/g/gator-52
+/usr/share/ncurses4/terminfo/g/gator-52t
+/usr/share/ncurses4/terminfo/g/gator-t
+/usr/share/ncurses4/terminfo/g/gigi
+/usr/share/ncurses4/terminfo/g/glasstty
+/usr/share/ncurses4/terminfo/g/go-225
+/usr/share/ncurses4/terminfo/g/go140
+/usr/share/ncurses4/terminfo/g/go140w
+/usr/share/ncurses4/terminfo/g/go225
+/usr/share/ncurses4/terminfo/g/graphos
+/usr/share/ncurses4/terminfo/g/graphos-30
+/usr/share/ncurses4/terminfo/g/gs5430
+/usr/share/ncurses4/terminfo/g/gs5430-22
+/usr/share/ncurses4/terminfo/g/gs5430-24
+/usr/share/ncurses4/terminfo/g/gs6300
+/usr/share/ncurses4/terminfo/g/gsi
+/usr/share/ncurses4/terminfo/g/gt100
+/usr/share/ncurses4/terminfo/g/gt100a
+/usr/share/ncurses4/terminfo/g/gt40
+/usr/share/ncurses4/terminfo/g/gt42
+/usr/share/ncurses4/terminfo/g/guru
+/usr/share/ncurses4/terminfo/g/guru+rv
+/usr/share/ncurses4/terminfo/g/guru+s
+/usr/share/ncurses4/terminfo/g/guru+unk
+/usr/share/ncurses4/terminfo/g/guru-24
+/usr/share/ncurses4/terminfo/g/guru-33
+/usr/share/ncurses4/terminfo/g/guru-33-rv
+/usr/share/ncurses4/terminfo/g/guru-33-s
+/usr/share/ncurses4/terminfo/g/guru-44
+/usr/share/ncurses4/terminfo/g/guru-44-s
+/usr/share/ncurses4/terminfo/g/guru-76
+/usr/share/ncurses4/terminfo/g/guru-76-lp
+/usr/share/ncurses4/terminfo/g/guru-76-s
+/usr/share/ncurses4/terminfo/g/guru-76-w
+/usr/share/ncurses4/terminfo/g/guru-76-w-s
+/usr/share/ncurses4/terminfo/g/guru-76-wm
+/usr/share/ncurses4/terminfo/g/guru-lp
+/usr/share/ncurses4/terminfo/g/guru-nctxt
+/usr/share/ncurses4/terminfo/g/guru-rv
+/usr/share/ncurses4/terminfo/g/guru-s
+/usr/share/ncurses4/terminfo/h
+/usr/share/ncurses4/terminfo/h/h-100
+/usr/share/ncurses4/terminfo/h/h-100bw
+/usr/share/ncurses4/terminfo/h/h100
+/usr/share/ncurses4/terminfo/h/h100bw
+/usr/share/ncurses4/terminfo/h/h19
+/usr/share/ncurses4/terminfo/h/h19-a
+/usr/share/ncurses4/terminfo/h/h19-b
+/usr/share/ncurses4/terminfo/h/h19-bs
+/usr/share/ncurses4/terminfo/h/h19-g
+/usr/share/ncurses4/terminfo/h/h19-smul
+/usr/share/ncurses4/terminfo/h/h19-u
+/usr/share/ncurses4/terminfo/h/h19-us
+/usr/share/ncurses4/terminfo/h/h19a
+/usr/share/ncurses4/terminfo/h/h19g
+/usr/share/ncurses4/terminfo/h/h19k
+/usr/share/ncurses4/terminfo/h/h19kermit
+/usr/share/ncurses4/terminfo/h/h19us
+/usr/share/ncurses4/terminfo/h/h29a-kc-bc
+/usr/share/ncurses4/terminfo/h/h29a-kc-uc
+/usr/share/ncurses4/terminfo/h/h29a-nkc-bc
+/usr/share/ncurses4/terminfo/h/h29a-nkc-uc
+/usr/share/ncurses4/terminfo/h/h80
+/usr/share/ncurses4/terminfo/h/ha8675
+/usr/share/ncurses4/terminfo/h/ha8686
+/usr/share/ncurses4/terminfo/h/hazel
+/usr/share/ncurses4/terminfo/h/hds200
+/usr/share/ncurses4/terminfo/h/he80
+/usr/share/ncurses4/terminfo/h/heath
+/usr/share/ncurses4/terminfo/h/heath-19
+/usr/share/ncurses4/terminfo/h/heath-ansi
+/usr/share/ncurses4/terminfo/h/heathkit
+/usr/share/ncurses4/terminfo/h/heathkit-a
+/usr/share/ncurses4/terminfo/h/hft
+/usr/share/ncurses4/terminfo/h/hft-c
+/usr/share/ncurses4/terminfo/h/hirez100
+/usr/share/ncurses4/terminfo/h/hirez100-w
+/usr/share/ncurses4/terminfo/h/hmod1
+/usr/share/ncurses4/terminfo/h/hp
+/usr/share/ncurses4/terminfo/h/hp+arrows
+/usr/share/ncurses4/terminfo/h/hp+color
+/usr/share/ncurses4/terminfo/h/hp+labels
+/usr/share/ncurses4/terminfo/h/hp+pfk+arrows
+/usr/share/ncurses4/terminfo/h/hp+pfk+cr
+/usr/share/ncurses4/terminfo/h/hp+pfk-cr
+/usr/share/ncurses4/terminfo/h/hp+printer
+/usr/share/ncurses4/terminfo/h/hp110
+/usr/share/ncurses4/terminfo/h/hp150
+/usr/share/ncurses4/terminfo/h/hp2
+/usr/share/ncurses4/terminfo/h/hp236
+/usr/share/ncurses4/terminfo/h/hp2382
+/usr/share/ncurses4/terminfo/h/hp2382a
+/usr/share/ncurses4/terminfo/h/hp2392
+/usr/share/ncurses4/terminfo/h/hp2397
+/usr/share/ncurses4/terminfo/h/hp2397a
+/usr/share/ncurses4/terminfo/h/hp2621
+/usr/share/ncurses4/terminfo/h/hp2621-48
+/usr/share/ncurses4/terminfo/h/hp2621-a
+/usr/share/ncurses4/terminfo/h/hp2621-ba
+/usr/share/ncurses4/terminfo/h/hp2621-fl
+/usr/share/ncurses4/terminfo/h/hp2621-k45
+/usr/share/ncurses4/terminfo/h/hp2621-nl
+/usr/share/ncurses4/terminfo/h/hp2621-nt
+/usr/share/ncurses4/terminfo/h/hp2621-wl
+/usr/share/ncurses4/terminfo/h/hp2621A
+/usr/share/ncurses4/terminfo/h/hp2621a
+/usr/share/ncurses4/terminfo/h/hp2621a-a
+/usr/share/ncurses4/terminfo/h/hp2621b
+/usr/share/ncurses4/terminfo/h/hp2621b-kx
+/usr/share/ncurses4/terminfo/h/hp2621b-kx-p
+/usr/share/ncurses4/terminfo/h/hp2621b-p
+/usr/share/ncurses4/terminfo/h/hp2621k45
+/usr/share/ncurses4/terminfo/h/hp2621p
+/usr/share/ncurses4/terminfo/h/hp2621p-a
+/usr/share/ncurses4/terminfo/h/hp2622
+/usr/share/ncurses4/terminfo/h/hp2622a
+/usr/share/ncurses4/terminfo/h/hp2623
+/usr/share/ncurses4/terminfo/h/hp2623a
+/usr/share/ncurses4/terminfo/h/hp2624
+/usr/share/ncurses4/terminfo/h/hp2624-10p
+/usr/share/ncurses4/terminfo/h/hp2624a
+/usr/share/ncurses4/terminfo/h/hp2624a-10p
+/usr/share/ncurses4/terminfo/h/hp2624b
+/usr/share/ncurses4/terminfo/h/hp2624b-10p
+/usr/share/ncurses4/terminfo/h/hp2624b-10p-p
+/usr/share/ncurses4/terminfo/h/hp2624b-4p
+/usr/share/ncurses4/terminfo/h/hp2624b-4p-p
+/usr/share/ncurses4/terminfo/h/hp2624b-p
+/usr/share/ncurses4/terminfo/h/hp2626
+/usr/share/ncurses4/terminfo/h/hp2626-12
+/usr/share/ncurses4/terminfo/h/hp2626-12-s
+/usr/share/ncurses4/terminfo/h/hp2626-12x40
+/usr/share/ncurses4/terminfo/h/hp2626-ns
+/usr/share/ncurses4/terminfo/h/hp2626-s
+/usr/share/ncurses4/terminfo/h/hp2626-x40
+/usr/share/ncurses4/terminfo/h/hp2626a
+/usr/share/ncurses4/terminfo/h/hp2626p
+/usr/share/ncurses4/terminfo/h/hp2627a
+/usr/share/ncurses4/terminfo/h/hp2627a-rev
+/usr/share/ncurses4/terminfo/h/hp2627c
+/usr/share/ncurses4/terminfo/h/hp262x
+/usr/share/ncurses4/terminfo/h/hp2640a
+/usr/share/ncurses4/terminfo/h/hp2640b
+/usr/share/ncurses4/terminfo/h/hp2641a
+/usr/share/ncurses4/terminfo/h/hp2644a
+/usr/share/ncurses4/terminfo/h/hp2645
+/usr/share/ncurses4/terminfo/h/hp2645a
+/usr/share/ncurses4/terminfo/h/hp2647a
+/usr/share/ncurses4/terminfo/h/hp2648
+/usr/share/ncurses4/terminfo/h/hp2648a
+/usr/share/ncurses4/terminfo/h/hp300h
+/usr/share/ncurses4/terminfo/h/hp45
+/usr/share/ncurses4/terminfo/h/hp700
+/usr/share/ncurses4/terminfo/h/hp700-wy
+/usr/share/ncurses4/terminfo/h/hp70092
+/usr/share/ncurses4/terminfo/h/hp70092A
+/usr/share/ncurses4/terminfo/h/hp70092a
+/usr/share/ncurses4/terminfo/h/hp9837
+/usr/share/ncurses4/terminfo/h/hp9845
+/usr/share/ncurses4/terminfo/h/hp98550
+/usr/share/ncurses4/terminfo/h/hp98550a
+/usr/share/ncurses4/terminfo/h/hp98720
+/usr/share/ncurses4/terminfo/h/hp98721
+/usr/share/ncurses4/terminfo/h/hpansi
+/usr/share/ncurses4/terminfo/h/hpex
+/usr/share/ncurses4/terminfo/h/hpex2
+/usr/share/ncurses4/terminfo/h/hpgeneric
+/usr/share/ncurses4/terminfo/h/hpsub
+/usr/share/ncurses4/terminfo/h/hpterm
+/usr/share/ncurses4/terminfo/h/htx11
+/usr/share/ncurses4/terminfo/h/hz1000
+/usr/share/ncurses4/terminfo/h/hz1420
+/usr/share/ncurses4/terminfo/h/hz1500
+/usr/share/ncurses4/terminfo/h/hz1510
+/usr/share/ncurses4/terminfo/h/hz1520
+/usr/share/ncurses4/terminfo/h/hz1520-noesc
+/usr/share/ncurses4/terminfo/h/hz1552
+/usr/share/ncurses4/terminfo/h/hz1552-rv
+/usr/share/ncurses4/terminfo/h/hz2000
+/usr/share/ncurses4/terminfo/i
+/usr/share/ncurses4/terminfo/i/i100
+/usr/share/ncurses4/terminfo/i/i3101
+/usr/share/ncurses4/terminfo/i/i3151
+/usr/share/ncurses4/terminfo/i/i3164
+/usr/share/ncurses4/terminfo/i/i400
+/usr/share/ncurses4/terminfo/i/ibcs2
+/usr/share/ncurses4/terminfo/i/ibm-apl
+/usr/share/ncurses4/terminfo/i/ibm-pc
+/usr/share/ncurses4/terminfo/i/ibm-system1
+/usr/share/ncurses4/terminfo/i/ibm3101
+/usr/share/ncurses4/terminfo/i/ibm3151
+/usr/share/ncurses4/terminfo/i/ibm3161
+/usr/share/ncurses4/terminfo/i/ibm3163
+/usr/share/ncurses4/terminfo/i/ibm3164
+/usr/share/ncurses4/terminfo/i/ibm327x
+/usr/share/ncurses4/terminfo/i/ibm5051
+/usr/share/ncurses4/terminfo/i/ibm5081
+/usr/share/ncurses4/terminfo/i/ibm5081-c
+/usr/share/ncurses4/terminfo/i/ibm5151
+/usr/share/ncurses4/terminfo/i/ibm5154
+/usr/share/ncurses4/terminfo/i/ibm5154-c
+/usr/share/ncurses4/terminfo/i/ibm6153
+/usr/share/ncurses4/terminfo/i/ibm6154
+/usr/share/ncurses4/terminfo/i/ibm6154-c
+/usr/share/ncurses4/terminfo/i/ibm6155
+/usr/share/ncurses4/terminfo/i/ibm8512
+/usr/share/ncurses4/terminfo/i/ibm8513
+/usr/share/ncurses4/terminfo/i/ibm8514
+/usr/share/ncurses4/terminfo/i/ibm8514-c
+/usr/share/ncurses4/terminfo/i/ibmaed
+/usr/share/ncurses4/terminfo/i/ibmapa16
+/usr/share/ncurses4/terminfo/i/ibmapa8
+/usr/share/ncurses4/terminfo/i/ibmapa8c
+/usr/share/ncurses4/terminfo/i/ibmapa8c-c
+/usr/share/ncurses4/terminfo/i/ibmega
+/usr/share/ncurses4/terminfo/i/ibmega-c
+/usr/share/ncurses4/terminfo/i/ibmmono
+/usr/share/ncurses4/terminfo/i/ibmmpel
+/usr/share/ncurses4/terminfo/i/ibmmpel-c
+/usr/share/ncurses4/terminfo/i/ibmpc
+/usr/share/ncurses4/terminfo/i/ibmpc3
+/usr/share/ncurses4/terminfo/i/ibmpc3r
+/usr/share/ncurses4/terminfo/i/ibmpc3r-mono
+/usr/share/ncurses4/terminfo/i/ibmpcx
+/usr/share/ncurses4/terminfo/i/ibmvga
+/usr/share/ncurses4/terminfo/i/ibmvga-c
+/usr/share/ncurses4/terminfo/i/ibmx
+/usr/share/ncurses4/terminfo/i/ifmr
+/usr/share/ncurses4/terminfo/i/ims-ansi
+/usr/share/ncurses4/terminfo/i/ims950
+/usr/share/ncurses4/terminfo/i/ims950-b
+/usr/share/ncurses4/terminfo/i/ims950-rv
+/usr/share/ncurses4/terminfo/i/infoton
+/usr/share/ncurses4/terminfo/i/intertec
+/usr/share/ncurses4/terminfo/i/intertube
+/usr/share/ncurses4/terminfo/i/intertube2
+/usr/share/ncurses4/terminfo/i/intext
+/usr/share/ncurses4/terminfo/i/intext2
+/usr/share/ncurses4/terminfo/i/intextii
+/usr/share/ncurses4/terminfo/i/ips
+/usr/share/ncurses4/terminfo/i/ipsi
+/usr/share/ncurses4/terminfo/i/iq120
+/usr/share/ncurses4/terminfo/i/iq140
+/usr/share/ncurses4/terminfo/i/iris-ansi
+/usr/share/ncurses4/terminfo/i/iris-ansi-ap
+/usr/share/ncurses4/terminfo/i/iris-color
+/usr/share/ncurses4/terminfo/i/iris40
+/usr/share/ncurses4/terminfo/j
+/usr/share/ncurses4/terminfo/j/jaixterm-m
+/usr/share/ncurses4/terminfo/j/jerq
+/usr/share/ncurses4/terminfo/k
+/usr/share/ncurses4/terminfo/k/k45
+/usr/share/ncurses4/terminfo/k/kaypro
+/usr/share/ncurses4/terminfo/k/kaypro2
+/usr/share/ncurses4/terminfo/k/kermit
+/usr/share/ncurses4/terminfo/k/kermit-am
+/usr/share/ncurses4/terminfo/k/klone+acs
+/usr/share/ncurses4/terminfo/k/klone+color
+/usr/share/ncurses4/terminfo/k/klone+koi8acs
+/usr/share/ncurses4/terminfo/k/klone+sgr
+/usr/share/ncurses4/terminfo/k/klone+sgr-dumb
+/usr/share/ncurses4/terminfo/k/kt7
+/usr/share/ncurses4/terminfo/k/kt7ix
+/usr/share/ncurses4/terminfo/k/kterm
+/usr/share/ncurses4/terminfo/k/ktm
+/usr/share/ncurses4/terminfo/l
+/usr/share/ncurses4/terminfo/l/la120
+/usr/share/ncurses4/terminfo/l/layer
+/usr/share/ncurses4/terminfo/l/linux
+/usr/share/ncurses4/terminfo/l/linux-c
+/usr/share/ncurses4/terminfo/l/linux-c-nc
+/usr/share/ncurses4/terminfo/l/linux-koi8
+/usr/share/ncurses4/terminfo/l/linux-koi8r
+/usr/share/ncurses4/terminfo/l/linux-m
+/usr/share/ncurses4/terminfo/l/linux-nic
+/usr/share/ncurses4/terminfo/l/lisa
+/usr/share/ncurses4/terminfo/l/lisaterm
+/usr/share/ncurses4/terminfo/l/lisaterm-w
+/usr/share/ncurses4/terminfo/l/liswb
+/usr/share/ncurses4/terminfo/l/ln03
+/usr/share/ncurses4/terminfo/l/ln03-w
+/usr/share/ncurses4/terminfo/l/lpr
+/usr/share/ncurses4/terminfo/l/luna
+/usr/share/ncurses4/terminfo/l/luna68k
+/usr/share/ncurses4/terminfo/m
+/usr/share/ncurses4/terminfo/m/m2-nam
+/usr/share/ncurses4/terminfo/m/mac
+/usr/share/ncurses4/terminfo/m/mac-w
+/usr/share/ncurses4/terminfo/m/macintosh
+/usr/share/ncurses4/terminfo/m/macterminal-w
+/usr/share/ncurses4/terminfo/m/mai
+/usr/share/ncurses4/terminfo/m/masscomp
+/usr/share/ncurses4/terminfo/m/masscomp1
+/usr/share/ncurses4/terminfo/m/masscomp2
+/usr/share/ncurses4/terminfo/m/mdl110
+/usr/share/ncurses4/terminfo/m/megatek
+/usr/share/ncurses4/terminfo/m/memhp
+/usr/share/ncurses4/terminfo/m/mgr
+/usr/share/ncurses4/terminfo/m/mgr-linux
+/usr/share/ncurses4/terminfo/m/mgr-sun
+/usr/share/ncurses4/terminfo/m/microb
+/usr/share/ncurses4/terminfo/m/microbee
+/usr/share/ncurses4/terminfo/m/microterm
+/usr/share/ncurses4/terminfo/m/microterm5
+/usr/share/ncurses4/terminfo/m/mime
+/usr/share/ncurses4/terminfo/m/mime-3ax
+/usr/share/ncurses4/terminfo/m/mime-fb
+/usr/share/ncurses4/terminfo/m/mime-hb
+/usr/share/ncurses4/terminfo/m/mime1
+/usr/share/ncurses4/terminfo/m/mime2
+/usr/share/ncurses4/terminfo/m/mime2a
+/usr/share/ncurses4/terminfo/m/mime2a-s
+/usr/share/ncurses4/terminfo/m/mime2a-v
+/usr/share/ncurses4/terminfo/m/mime314
+/usr/share/ncurses4/terminfo/m/mime340
+/usr/share/ncurses4/terminfo/m/mime3a
+/usr/share/ncurses4/terminfo/m/mime3ax
+/usr/share/ncurses4/terminfo/m/mimei
+/usr/share/ncurses4/terminfo/m/mimeii
+/usr/share/ncurses4/terminfo/m/minitel
+/usr/share/ncurses4/terminfo/m/minitel-2
+/usr/share/ncurses4/terminfo/m/minitel-2-nam
+/usr/share/ncurses4/terminfo/m/minix
+/usr/share/ncurses4/terminfo/m/minix-old
+/usr/share/ncurses4/terminfo/m/minix-old-am
+/usr/share/ncurses4/terminfo/m/mm314
+/usr/share/ncurses4/terminfo/m/mm340
+/usr/share/ncurses4/terminfo/m/mod
+/usr/share/ncurses4/terminfo/m/mod24
+/usr/share/ncurses4/terminfo/m/modgraph
+/usr/share/ncurses4/terminfo/m/modgraph2
+/usr/share/ncurses4/terminfo/m/modgraph48
+/usr/share/ncurses4/terminfo/m/mono-emx
+/usr/share/ncurses4/terminfo/m/msk227
+/usr/share/ncurses4/terminfo/m/msk22714
+/usr/share/ncurses4/terminfo/m/msk227am
+/usr/share/ncurses4/terminfo/m/mskermit227
+/usr/share/ncurses4/terminfo/m/mskermit22714
+/usr/share/ncurses4/terminfo/m/mskermit227am
+/usr/share/ncurses4/terminfo/m/mt-70
+/usr/share/ncurses4/terminfo/m/mt4520-rv
+/usr/share/ncurses4/terminfo/m/mt70
+/usr/share/ncurses4/terminfo/n
+/usr/share/ncurses4/terminfo/n/nansi.sys
+/usr/share/ncurses4/terminfo/n/nansi.sysk
+/usr/share/ncurses4/terminfo/n/nansisys
+/usr/share/ncurses4/terminfo/n/nansisysk
+/usr/share/ncurses4/terminfo/n/ncr7900
+/usr/share/ncurses4/terminfo/n/ncr7900i
+/usr/share/ncurses4/terminfo/n/ncr7900iv
+/usr/share/ncurses4/terminfo/n/ncr7901
+/usr/share/ncurses4/terminfo/n/nec
+/usr/share/ncurses4/terminfo/n/nec5520
+/usr/share/ncurses4/terminfo/n/newhp
+/usr/share/ncurses4/terminfo/n/newhpkeyboard
+/usr/share/ncurses4/terminfo/n/news
+/usr/share/ncurses4/terminfo/n/news-29
+/usr/share/ncurses4/terminfo/n/news-29-euc
+/usr/share/ncurses4/terminfo/n/news-29-sjis
+/usr/share/ncurses4/terminfo/n/news-33
+/usr/share/ncurses4/terminfo/n/news-33-euc
+/usr/share/ncurses4/terminfo/n/news-33-sjis
+/usr/share/ncurses4/terminfo/n/news-42
+/usr/share/ncurses4/terminfo/n/news-42-euc
+/usr/share/ncurses4/terminfo/n/news-42-sjis
+/usr/share/ncurses4/terminfo/n/news-a
+/usr/share/ncurses4/terminfo/n/news-o
+/usr/share/ncurses4/terminfo/n/news-old-unk
+/usr/share/ncurses4/terminfo/n/news-unk
+/usr/share/ncurses4/terminfo/n/news28
+/usr/share/ncurses4/terminfo/n/news28-a
+/usr/share/ncurses4/terminfo/n/news29
+/usr/share/ncurses4/terminfo/n/news31
+/usr/share/ncurses4/terminfo/n/news31-a
+/usr/share/ncurses4/terminfo/n/news31-o
+/usr/share/ncurses4/terminfo/n/news33
+/usr/share/ncurses4/terminfo/n/news40
+/usr/share/ncurses4/terminfo/n/news40-a
+/usr/share/ncurses4/terminfo/n/news40-o
+/usr/share/ncurses4/terminfo/n/news42
+/usr/share/ncurses4/terminfo/n/newscbm
+/usr/share/ncurses4/terminfo/n/newscbm-a
+/usr/share/ncurses4/terminfo/n/newscbm-o
+/usr/share/ncurses4/terminfo/n/newscbm33
+/usr/share/ncurses4/terminfo/n/next
+/usr/share/ncurses4/terminfo/n/nextshell
+/usr/share/ncurses4/terminfo/n/northstar
+/usr/share/ncurses4/terminfo/n/nwe501
+/usr/share/ncurses4/terminfo/n/nwe501-a
+/usr/share/ncurses4/terminfo/n/nwe501-o
+/usr/share/ncurses4/terminfo/n/nwp-511
+/usr/share/ncurses4/terminfo/n/nwp-517
+/usr/share/ncurses4/terminfo/n/nwp-517-w
+/usr/share/ncurses4/terminfo/n/nwp251-a
+/usr/share/ncurses4/terminfo/n/nwp251-o
+/usr/share/ncurses4/terminfo/n/nwp511
+/usr/share/ncurses4/terminfo/n/nwp512
+/usr/share/ncurses4/terminfo/n/nwp512-a
+/usr/share/ncurses4/terminfo/n/nwp512-o
+/usr/share/ncurses4/terminfo/n/nwp513
+/usr/share/ncurses4/terminfo/n/nwp513-a
+/usr/share/ncurses4/terminfo/n/nwp513-o
+/usr/share/ncurses4/terminfo/n/nwp514
+/usr/share/ncurses4/terminfo/n/nwp514-a
+/usr/share/ncurses4/terminfo/n/nwp514-o
+/usr/share/ncurses4/terminfo/n/nwp517
+/usr/share/ncurses4/terminfo/n/nwp517-w
+/usr/share/ncurses4/terminfo/n/nwp518
+/usr/share/ncurses4/terminfo/n/nwp518-a
+/usr/share/ncurses4/terminfo/n/nwp518-o
+/usr/share/ncurses4/terminfo/o
+/usr/share/ncurses4/terminfo/o/o31
+/usr/share/ncurses4/terminfo/o/o4112-nd
+/usr/share/ncurses4/terminfo/o/o85h
+/usr/share/ncurses4/terminfo/o/oabm85h
+/usr/share/ncurses4/terminfo/o/oblit
+/usr/share/ncurses4/terminfo/o/oc100
+/usr/share/ncurses4/terminfo/o/oconcept
+/usr/share/ncurses4/terminfo/o/ojerq
+/usr/share/ncurses4/terminfo/o/oldibmpc3
+/usr/share/ncurses4/terminfo/o/oldpc3
+/usr/share/ncurses4/terminfo/o/oldsun
+/usr/share/ncurses4/terminfo/o/omron
+/usr/share/ncurses4/terminfo/o/opus3n1+
+/usr/share/ncurses4/terminfo/o/origibmpc3
+/usr/share/ncurses4/terminfo/o/origpc3
+/usr/share/ncurses4/terminfo/o/os9LII
+/usr/share/ncurses4/terminfo/o/osborne
+/usr/share/ncurses4/terminfo/o/osborne-w
+/usr/share/ncurses4/terminfo/o/osborne1
+/usr/share/ncurses4/terminfo/o/osborne1-w
+/usr/share/ncurses4/terminfo/o/osexec
+/usr/share/ncurses4/terminfo/o/otek4112
+/usr/share/ncurses4/terminfo/o/otek4113
+/usr/share/ncurses4/terminfo/o/otek4114
+/usr/share/ncurses4/terminfo/o/otek4115
+/usr/share/ncurses4/terminfo/o/owl
+/usr/share/ncurses4/terminfo/p
+/usr/share/ncurses4/terminfo/p/p12
+/usr/share/ncurses4/terminfo/p/p12-m
+/usr/share/ncurses4/terminfo/p/p12-m-w
+/usr/share/ncurses4/terminfo/p/p12-w
+/usr/share/ncurses4/terminfo/p/p14
+/usr/share/ncurses4/terminfo/p/p14-m
+/usr/share/ncurses4/terminfo/p/p14-m-w
+/usr/share/ncurses4/terminfo/p/p14-w
+/usr/share/ncurses4/terminfo/p/p19
+/usr/share/ncurses4/terminfo/p/p4
+/usr/share/ncurses4/terminfo/p/p5
+/usr/share/ncurses4/terminfo/p/p7
+/usr/share/ncurses4/terminfo/p/p8
+/usr/share/ncurses4/terminfo/p/p8-w
+/usr/share/ncurses4/terminfo/p/p8gl
+/usr/share/ncurses4/terminfo/p/p9
+/usr/share/ncurses4/terminfo/p/p9-8
+/usr/share/ncurses4/terminfo/p/p9-8-w
+/usr/share/ncurses4/terminfo/p/p9-w
+/usr/share/ncurses4/terminfo/p/pc-coherent
+/usr/share/ncurses4/terminfo/p/pc-minix
+/usr/share/ncurses4/terminfo/p/pc-venix
+/usr/share/ncurses4/terminfo/p/pc3
+/usr/share/ncurses4/terminfo/p/pc3-bold
+/usr/share/ncurses4/terminfo/p/pc3r
+/usr/share/ncurses4/terminfo/p/pc3r-m
+/usr/share/ncurses4/terminfo/p/pc6300plus
+/usr/share/ncurses4/terminfo/p/pc7300
+/usr/share/ncurses4/terminfo/p/pcansi
+/usr/share/ncurses4/terminfo/p/pcansi-25
+/usr/share/ncurses4/terminfo/p/pcansi-25-m
+/usr/share/ncurses4/terminfo/p/pcansi-33
+/usr/share/ncurses4/terminfo/p/pcansi-33-m
+/usr/share/ncurses4/terminfo/p/pcansi-43
+/usr/share/ncurses4/terminfo/p/pcansi-43-m
+/usr/share/ncurses4/terminfo/p/pcansi-m
+/usr/share/ncurses4/terminfo/p/pcansi-mono
+/usr/share/ncurses4/terminfo/p/pcansi25
+/usr/share/ncurses4/terminfo/p/pcansi25m
+/usr/share/ncurses4/terminfo/p/pcansi33
+/usr/share/ncurses4/terminfo/p/pcansi33m
+/usr/share/ncurses4/terminfo/p/pcansi43
+/usr/share/ncurses4/terminfo/p/pccons
+/usr/share/ncurses4/terminfo/p/pcconsole
+/usr/share/ncurses4/terminfo/p/pcix
+/usr/share/ncurses4/terminfo/p/pckermit
+/usr/share/ncurses4/terminfo/p/pckermit12
+/usr/share/ncurses4/terminfo/p/pckermit120
+/usr/share/ncurses4/terminfo/p/pcplot
+/usr/share/ncurses4/terminfo/p/pcvt25
+/usr/share/ncurses4/terminfo/p/pcvt25w
+/usr/share/ncurses4/terminfo/p/pcvt28
+/usr/share/ncurses4/terminfo/p/pcvt28w
+/usr/share/ncurses4/terminfo/p/pcvt35
+/usr/share/ncurses4/terminfo/p/pcvt35w
+/usr/share/ncurses4/terminfo/p/pcvt40
+/usr/share/ncurses4/terminfo/p/pcvt40w
+/usr/share/ncurses4/terminfo/p/pcvt43
+/usr/share/ncurses4/terminfo/p/pcvt43w
+/usr/share/ncurses4/terminfo/p/pcvt50
+/usr/share/ncurses4/terminfo/p/pcvt50w
+/usr/share/ncurses4/terminfo/p/pcvtXX
+/usr/share/ncurses4/terminfo/p/pcz19
+/usr/share/ncurses4/terminfo/p/pe1100
+/usr/share/ncurses4/terminfo/p/pe1200
+/usr/share/ncurses4/terminfo/p/pe1251
+/usr/share/ncurses4/terminfo/p/pe550
+/usr/share/ncurses4/terminfo/p/pe6100
+/usr/share/ncurses4/terminfo/p/pe6300
+/usr/share/ncurses4/terminfo/p/pe6312
+/usr/share/ncurses4/terminfo/p/pe7000c
+/usr/share/ncurses4/terminfo/p/pe7000m
+/usr/share/ncurses4/terminfo/p/pilot
+/usr/share/ncurses4/terminfo/p/printer
+/usr/share/ncurses4/terminfo/p/prism12
+/usr/share/ncurses4/terminfo/p/prism12-m
+/usr/share/ncurses4/terminfo/p/prism12-m-w
+/usr/share/ncurses4/terminfo/p/prism12-w
+/usr/share/ncurses4/terminfo/p/prism14
+/usr/share/ncurses4/terminfo/p/prism14-m
+/usr/share/ncurses4/terminfo/p/prism14-m-w
+/usr/share/ncurses4/terminfo/p/prism14-w
+/usr/share/ncurses4/terminfo/p/prism2
+/usr/share/ncurses4/terminfo/p/prism4
+/usr/share/ncurses4/terminfo/p/prism5
+/usr/share/ncurses4/terminfo/p/prism7
+/usr/share/ncurses4/terminfo/p/prism8
+/usr/share/ncurses4/terminfo/p/prism8-w
+/usr/share/ncurses4/terminfo/p/prism8gl
+/usr/share/ncurses4/terminfo/p/prism9
+/usr/share/ncurses4/terminfo/p/prism9-8
+/usr/share/ncurses4/terminfo/p/prism9-8-w
+/usr/share/ncurses4/terminfo/p/prism9-w
+/usr/share/ncurses4/terminfo/p/pro350
+/usr/share/ncurses4/terminfo/p/ps300
+/usr/share/ncurses4/terminfo/p/psterm
+/usr/share/ncurses4/terminfo/p/psterm-80x24
+/usr/share/ncurses4/terminfo/p/psterm-90x28
+/usr/share/ncurses4/terminfo/p/psterm-96x48
+/usr/share/ncurses4/terminfo/p/psterm-basic
+/usr/share/ncurses4/terminfo/p/psterm-fast
+/usr/share/ncurses4/terminfo/p/psx_ansi
+/usr/share/ncurses4/terminfo/p/pt100
+/usr/share/ncurses4/terminfo/p/pt100w
+/usr/share/ncurses4/terminfo/p/pt200
+/usr/share/ncurses4/terminfo/p/pt200w
+/usr/share/ncurses4/terminfo/p/pt210
+/usr/share/ncurses4/terminfo/p/pt250
+/usr/share/ncurses4/terminfo/p/pt250w
+/usr/share/ncurses4/terminfo/p/pt505
+/usr/share/ncurses4/terminfo/p/pt505-22
+/usr/share/ncurses4/terminfo/p/pt505-24
+/usr/share/ncurses4/terminfo/p/pty
+/usr/share/ncurses4/terminfo/q
+/usr/share/ncurses4/terminfo/q/qdcons
+/usr/share/ncurses4/terminfo/q/qdss
+/usr/share/ncurses4/terminfo/q/qnx
+/usr/share/ncurses4/terminfo/q/qnx4
+/usr/share/ncurses4/terminfo/q/qume
+/usr/share/ncurses4/terminfo/q/qume5
+/usr/share/ncurses4/terminfo/q/qvt101
+/usr/share/ncurses4/terminfo/q/qvt101+
+/usr/share/ncurses4/terminfo/q/qvt101p
+/usr/share/ncurses4/terminfo/q/qvt102
+/usr/share/ncurses4/terminfo/q/qvt103
+/usr/share/ncurses4/terminfo/q/qvt103-w
+/usr/share/ncurses4/terminfo/q/qvt108
+/usr/share/ncurses4/terminfo/q/qvt119
+/usr/share/ncurses4/terminfo/q/qvt119+
+/usr/share/ncurses4/terminfo/q/qvt119+-25
+/usr/share/ncurses4/terminfo/q/qvt119+-25-w
+/usr/share/ncurses4/terminfo/q/qvt119+-w
+/usr/share/ncurses4/terminfo/q/qvt119-25-w
+/usr/share/ncurses4/terminfo/q/qvt119-w
+/usr/share/ncurses4/terminfo/q/qvt119p
+/usr/share/ncurses4/terminfo/q/qvt119p-25
+/usr/share/ncurses4/terminfo/q/qvt119p-25-w
+/usr/share/ncurses4/terminfo/q/qvt119p-w
+/usr/share/ncurses4/terminfo/q/qvt203
+/usr/share/ncurses4/terminfo/q/qvt203+
+/usr/share/ncurses4/terminfo/q/qvt203-25
+/usr/share/ncurses4/terminfo/q/qvt203-25-w
+/usr/share/ncurses4/terminfo/q/qvt203-w
+/usr/share/ncurses4/terminfo/q/qvt203-w-am
+/usr/share/ncurses4/terminfo/r
+/usr/share/ncurses4/terminfo/r/rbcomm
+/usr/share/ncurses4/terminfo/r/rbcomm-nam
+/usr/share/ncurses4/terminfo/r/rbcomm-w
+/usr/share/ncurses4/terminfo/r/rca
+/usr/share/ncurses4/terminfo/r/rebus3180
+/usr/share/ncurses4/terminfo/r/regent
+/usr/share/ncurses4/terminfo/r/regent100
+/usr/share/ncurses4/terminfo/r/regent20
+/usr/share/ncurses4/terminfo/r/regent200
+/usr/share/ncurses4/terminfo/r/regent25
+/usr/share/ncurses4/terminfo/r/regent40
+/usr/share/ncurses4/terminfo/r/regent40+
+/usr/share/ncurses4/terminfo/r/regent60
+/usr/share/ncurses4/terminfo/r/rt6221
+/usr/share/ncurses4/terminfo/r/rt6221-w
+/usr/share/ncurses4/terminfo/r/rtpc
+/usr/share/ncurses4/terminfo/r/rxvt
+/usr/share/ncurses4/terminfo/r/rxvt-basic
+/usr/share/ncurses4/terminfo/s
+/usr/share/ncurses4/terminfo/s/s
+/usr/share/ncurses4/terminfo/s/s4
+/usr/share/ncurses4/terminfo/s/sb1
+/usr/share/ncurses4/terminfo/s/sb2
+/usr/share/ncurses4/terminfo/s/sb3
+/usr/share/ncurses4/terminfo/s/sbi
+/usr/share/ncurses4/terminfo/s/sbobcat
+/usr/share/ncurses4/terminfo/s/sc410
+/usr/share/ncurses4/terminfo/s/sc415
+/usr/share/ncurses4/terminfo/s/scanset
+/usr/share/ncurses4/terminfo/s/scoansi
+/usr/share/ncurses4/terminfo/s/screen
+/usr/share/ncurses4/terminfo/s/screen-w
+/usr/share/ncurses4/terminfo/s/screen2
+/usr/share/ncurses4/terminfo/s/screen3
+/usr/share/ncurses4/terminfo/s/screwpoint
+/usr/share/ncurses4/terminfo/s/scrhp
+/usr/share/ncurses4/terminfo/s/simterm
+/usr/share/ncurses4/terminfo/s/soroc
+/usr/share/ncurses4/terminfo/s/soroc120
+/usr/share/ncurses4/terminfo/s/soroc140
+/usr/share/ncurses4/terminfo/s/spinwriter
+/usr/share/ncurses4/terminfo/s/st52
+/usr/share/ncurses4/terminfo/s/sun
+/usr/share/ncurses4/terminfo/s/sun-1
+/usr/share/ncurses4/terminfo/s/sun-12
+/usr/share/ncurses4/terminfo/s/sun-17
+/usr/share/ncurses4/terminfo/s/sun-24
+/usr/share/ncurses4/terminfo/s/sun-34
+/usr/share/ncurses4/terminfo/s/sun-48
+/usr/share/ncurses4/terminfo/s/sun-c
+/usr/share/ncurses4/terminfo/s/sun-cmd
+/usr/share/ncurses4/terminfo/s/sun-e
+/usr/share/ncurses4/terminfo/s/sun-e-s
+/usr/share/ncurses4/terminfo/s/sun-il
+/usr/share/ncurses4/terminfo/s/sun-nic
+/usr/share/ncurses4/terminfo/s/sun-s
+/usr/share/ncurses4/terminfo/s/sun-s-e
+/usr/share/ncurses4/terminfo/s/sun-ss5
+/usr/share/ncurses4/terminfo/s/sun1
+/usr/share/ncurses4/terminfo/s/sun2
+/usr/share/ncurses4/terminfo/s/sune
+/usr/share/ncurses4/terminfo/s/superbee
+/usr/share/ncurses4/terminfo/s/superbee-xsb
+/usr/share/ncurses4/terminfo/s/superbeeic
+/usr/share/ncurses4/terminfo/s/superbrain
+/usr/share/ncurses4/terminfo/s/sv80
+/usr/share/ncurses4/terminfo/s/swtp
+/usr/share/ncurses4/terminfo/s/synertek
+/usr/share/ncurses4/terminfo/s/synertek380
+/usr/share/ncurses4/terminfo/s/system1
+/usr/share/ncurses4/terminfo/t
+/usr/share/ncurses4/terminfo/t/t10
+/usr/share/ncurses4/terminfo/t/t1061
+/usr/share/ncurses4/terminfo/t/t1061f
+/usr/share/ncurses4/terminfo/t/t16
+/usr/share/ncurses4/terminfo/t/t3700
+/usr/share/ncurses4/terminfo/t/t3800
+/usr/share/ncurses4/terminfo/t/t653x
+/usr/share/ncurses4/terminfo/t/tab
+/usr/share/ncurses4/terminfo/t/tab132
+/usr/share/ncurses4/terminfo/t/tab132-15
+/usr/share/ncurses4/terminfo/t/tab132-rv
+/usr/share/ncurses4/terminfo/t/tab132-w
+/usr/share/ncurses4/terminfo/t/tab132-w-rv
+/usr/share/ncurses4/terminfo/t/tandem6510
+/usr/share/ncurses4/terminfo/t/tandem653
+/usr/share/ncurses4/terminfo/t/tek
+/usr/share/ncurses4/terminfo/t/tek4012
+/usr/share/ncurses4/terminfo/t/tek4013
+/usr/share/ncurses4/terminfo/t/tek4014
+/usr/share/ncurses4/terminfo/t/tek4014-sm
+/usr/share/ncurses4/terminfo/t/tek4015
+/usr/share/ncurses4/terminfo/t/tek4015-sm
+/usr/share/ncurses4/terminfo/t/tek4023
+/usr/share/ncurses4/terminfo/t/tek4024
+/usr/share/ncurses4/terminfo/t/tek4025
+/usr/share/ncurses4/terminfo/t/tek4025-17
+/usr/share/ncurses4/terminfo/t/tek4025-17-ws
+/usr/share/ncurses4/terminfo/t/tek4025-cr
+/usr/share/ncurses4/terminfo/t/tek4025-ex
+/usr/share/ncurses4/terminfo/t/tek4025a
+/usr/share/ncurses4/terminfo/t/tek4025ex
+/usr/share/ncurses4/terminfo/t/tek4027
+/usr/share/ncurses4/terminfo/t/tek4027-ex
+/usr/share/ncurses4/terminfo/t/tek4105
+/usr/share/ncurses4/terminfo/t/tek4105-30
+/usr/share/ncurses4/terminfo/t/tek4105a
+/usr/share/ncurses4/terminfo/t/tek4106brl
+/usr/share/ncurses4/terminfo/t/tek4107
+/usr/share/ncurses4/terminfo/t/tek4107brl
+/usr/share/ncurses4/terminfo/t/tek4109
+/usr/share/ncurses4/terminfo/t/tek4109brl
+/usr/share/ncurses4/terminfo/t/tek4112
+/usr/share/ncurses4/terminfo/t/tek4112-5
+/usr/share/ncurses4/terminfo/t/tek4112-nd
+/usr/share/ncurses4/terminfo/t/tek4113
+/usr/share/ncurses4/terminfo/t/tek4113-34
+/usr/share/ncurses4/terminfo/t/tek4113-nd
+/usr/share/ncurses4/terminfo/t/tek4114
+/usr/share/ncurses4/terminfo/t/tek4115
+/usr/share/ncurses4/terminfo/t/tek4125
+/usr/share/ncurses4/terminfo/t/tek4205
+/usr/share/ncurses4/terminfo/t/tek4207
+/usr/share/ncurses4/terminfo/t/tek4207-s
+/usr/share/ncurses4/terminfo/t/tek4404
+/usr/share/ncurses4/terminfo/t/teleray
+/usr/share/ncurses4/terminfo/t/teletec
+/usr/share/ncurses4/terminfo/t/terminet
+/usr/share/ncurses4/terminfo/t/terminet1200
+/usr/share/ncurses4/terminfo/t/terminet300
+/usr/share/ncurses4/terminfo/t/tgtelnet
+/usr/share/ncurses4/terminfo/t/ti700
+/usr/share/ncurses4/terminfo/t/ti733
+/usr/share/ncurses4/terminfo/t/ti735
+/usr/share/ncurses4/terminfo/t/ti745
+/usr/share/ncurses4/terminfo/t/ti800
+/usr/share/ncurses4/terminfo/t/ti916
+/usr/share/ncurses4/terminfo/t/ti916-132
+/usr/share/ncurses4/terminfo/t/ti916-220-7
+/usr/share/ncurses4/terminfo/t/ti916-220-8
+/usr/share/ncurses4/terminfo/t/ti916-8
+/usr/share/ncurses4/terminfo/t/ti916-8-132
+/usr/share/ncurses4/terminfo/t/ti924
+/usr/share/ncurses4/terminfo/t/ti924-8
+/usr/share/ncurses4/terminfo/t/ti924-8w
+/usr/share/ncurses4/terminfo/t/ti924w
+/usr/share/ncurses4/terminfo/t/ti926
+/usr/share/ncurses4/terminfo/t/ti926-8
+/usr/share/ncurses4/terminfo/t/ti928
+/usr/share/ncurses4/terminfo/t/ti928-8
+/usr/share/ncurses4/terminfo/t/ti931
+/usr/share/ncurses4/terminfo/t/ti_ansi
+/usr/share/ncurses4/terminfo/t/tn1200
+/usr/share/ncurses4/terminfo/t/tn300
+/usr/share/ncurses4/terminfo/t/trs16
+/usr/share/ncurses4/terminfo/t/trs2
+/usr/share/ncurses4/terminfo/t/trs80II
+/usr/share/ncurses4/terminfo/t/trsII
+/usr/share/ncurses4/terminfo/t/ts-1
+/usr/share/ncurses4/terminfo/t/ts-1p
+/usr/share/ncurses4/terminfo/t/ts1
+/usr/share/ncurses4/terminfo/t/ts100
+/usr/share/ncurses4/terminfo/t/ts100-ctxt
+/usr/share/ncurses4/terminfo/t/ts100-sp
+/usr/share/ncurses4/terminfo/t/ts1p
+/usr/share/ncurses4/terminfo/t/tt505-22
+/usr/share/ncurses4/terminfo/t/tty33
+/usr/share/ncurses4/terminfo/t/tty35
+/usr/share/ncurses4/terminfo/t/tty37
+/usr/share/ncurses4/terminfo/t/tty40
+/usr/share/ncurses4/terminfo/t/tty43
+/usr/share/ncurses4/terminfo/t/tty4420
+/usr/share/ncurses4/terminfo/t/tty4424
+/usr/share/ncurses4/terminfo/t/tty4424-1
+/usr/share/ncurses4/terminfo/t/tty4424m
+/usr/share/ncurses4/terminfo/t/tty4426
+/usr/share/ncurses4/terminfo/t/tty5410
+/usr/share/ncurses4/terminfo/t/tty5410-w
+/usr/share/ncurses4/terminfo/t/tty5410v1
+/usr/share/ncurses4/terminfo/t/tty5410v1-w
+/usr/share/ncurses4/terminfo/t/tty5420
+/usr/share/ncurses4/terminfo/t/tty5420+nl
+/usr/share/ncurses4/terminfo/t/tty5420-nl
+/usr/share/ncurses4/terminfo/t/tty5420-rv
+/usr/share/ncurses4/terminfo/t/tty5420-rv-nl
+/usr/share/ncurses4/terminfo/t/tty5420-w
+/usr/share/ncurses4/terminfo/t/tty5420-w-nl
+/usr/share/ncurses4/terminfo/t/tty5420-w-rv
+/usr/share/ncurses4/terminfo/t/tty5420-w-rv-n
+/usr/share/ncurses4/terminfo/t/tty5425
+/usr/share/ncurses4/terminfo/t/tty5425-nl
+/usr/share/ncurses4/terminfo/t/tty5425-w
+/usr/share/ncurses4/terminfo/t/tty5620
+/usr/share/ncurses4/terminfo/t/tty5620-1
+/usr/share/ncurses4/terminfo/t/tty5620-24
+/usr/share/ncurses4/terminfo/t/tty5620-34
+/usr/share/ncurses4/terminfo/t/tty5620-s
+/usr/share/ncurses4/terminfo/t/ttydmd
+/usr/share/ncurses4/terminfo/t/tvi-2p
+/usr/share/ncurses4/terminfo/t/tvi803
+/usr/share/ncurses4/terminfo/t/tvi9065
+/usr/share/ncurses4/terminfo/t/tvi910
+/usr/share/ncurses4/terminfo/t/tvi910+
+/usr/share/ncurses4/terminfo/t/tvi912
+/usr/share/ncurses4/terminfo/t/tvi912-2p
+/usr/share/ncurses4/terminfo/t/tvi912b
+/usr/share/ncurses4/terminfo/t/tvi912c
+/usr/share/ncurses4/terminfo/t/tvi912cc
+/usr/share/ncurses4/terminfo/t/tvi914
+/usr/share/ncurses4/terminfo/t/tvi920
+/usr/share/ncurses4/terminfo/t/tvi920-2p
+/usr/share/ncurses4/terminfo/t/tvi920b
+/usr/share/ncurses4/terminfo/t/tvi920c
+/usr/share/ncurses4/terminfo/t/tvi921
+/usr/share/ncurses4/terminfo/t/tvi924
+/usr/share/ncurses4/terminfo/t/tvi925
+/usr/share/ncurses4/terminfo/t/tvi925-hi
+/usr/share/ncurses4/terminfo/t/tvi92B
+/usr/share/ncurses4/terminfo/t/tvi92D
+/usr/share/ncurses4/terminfo/t/tvi950
+/usr/share/ncurses4/terminfo/t/tvi950-2p
+/usr/share/ncurses4/terminfo/t/tvi950-4p
+/usr/share/ncurses4/terminfo/t/tvi950-rv
+/usr/share/ncurses4/terminfo/t/tvi950-rv-2p
+/usr/share/ncurses4/terminfo/t/tvi950-rv-4p
+/usr/share/ncurses4/terminfo/t/tvi955
+/usr/share/ncurses4/terminfo/t/tvi955-hb
+/usr/share/ncurses4/terminfo/t/tvi955-w
+/usr/share/ncurses4/terminfo/t/tvi970
+/usr/share/ncurses4/terminfo/t/tvi970-2p
+/usr/share/ncurses4/terminfo/t/tvi970-vb
+/usr/share/ncurses4/terminfo/t/tvipt
+/usr/share/ncurses4/terminfo/u
+/usr/share/ncurses4/terminfo/u/ultima2
+/usr/share/ncurses4/terminfo/u/ultimaII
+/usr/share/ncurses4/terminfo/u/uniterm
+/usr/share/ncurses4/terminfo/u/uniterm49
+/usr/share/ncurses4/terminfo/u/unixpc
+/usr/share/ncurses4/terminfo/u/unknown
+/usr/share/ncurses4/terminfo/u/uts30
+/usr/share/ncurses4/terminfo/v
+/usr/share/ncurses4/terminfo/v/v200-nam
+/usr/share/ncurses4/terminfo/v/v320n
+/usr/share/ncurses4/terminfo/v/v3220
+/usr/share/ncurses4/terminfo/v/v5410
+/usr/share/ncurses4/terminfo/v/vapple
+/usr/share/ncurses4/terminfo/v/vc103
+/usr/share/ncurses4/terminfo/v/vc203
+/usr/share/ncurses4/terminfo/v/vc303
+/usr/share/ncurses4/terminfo/v/vc303a
+/usr/share/ncurses4/terminfo/v/vc403a
+/usr/share/ncurses4/terminfo/v/vc404
+/usr/share/ncurses4/terminfo/v/vc404-s
+/usr/share/ncurses4/terminfo/v/vc414
+/usr/share/ncurses4/terminfo/v/vc414h
+/usr/share/ncurses4/terminfo/v/vc415
+/usr/share/ncurses4/terminfo/v/venix
+/usr/share/ncurses4/terminfo/v/versaterm
+/usr/share/ncurses4/terminfo/v/vi200
+/usr/share/ncurses4/terminfo/v/vi200-f
+/usr/share/ncurses4/terminfo/v/vi200-rv
+/usr/share/ncurses4/terminfo/v/vi300
+/usr/share/ncurses4/terminfo/v/vi300-old
+/usr/share/ncurses4/terminfo/v/vi50
+/usr/share/ncurses4/terminfo/v/vi500
+/usr/share/ncurses4/terminfo/v/vi50adm
+/usr/share/ncurses4/terminfo/v/vi55
+/usr/share/ncurses4/terminfo/v/vi550
+/usr/share/ncurses4/terminfo/v/vi603
+/usr/share/ncurses4/terminfo/v/viewpoint
+/usr/share/ncurses4/terminfo/v/viewpoint3a+
+/usr/share/ncurses4/terminfo/v/viewpoint60
+/usr/share/ncurses4/terminfo/v/viewpoint90
+/usr/share/ncurses4/terminfo/v/visa50
+/usr/share/ncurses4/terminfo/v/visual603
+/usr/share/ncurses4/terminfo/v/vitty
+/usr/share/ncurses4/terminfo/v/vk100
+/usr/share/ncurses4/terminfo/v/vp3a+
+/usr/share/ncurses4/terminfo/v/vp60
+/usr/share/ncurses4/terminfo/v/vp90
+/usr/share/ncurses4/terminfo/v/vremote
+/usr/share/ncurses4/terminfo/v/vs100
+/usr/share/ncurses4/terminfo/v/vs100-x10
+/usr/share/ncurses4/terminfo/v/vsc
+/usr/share/ncurses4/terminfo/v/vt-61
+/usr/share/ncurses4/terminfo/v/vt100
+/usr/share/ncurses4/terminfo/v/vt100-am
+/usr/share/ncurses4/terminfo/v/vt100-bm
+/usr/share/ncurses4/terminfo/v/vt100-bm-o
+/usr/share/ncurses4/terminfo/v/vt100-bot-s
+/usr/share/ncurses4/terminfo/v/vt100-nam
+/usr/share/ncurses4/terminfo/v/vt100-nam-w
+/usr/share/ncurses4/terminfo/v/vt100-nav
+/usr/share/ncurses4/terminfo/v/vt100-nav-w
+/usr/share/ncurses4/terminfo/v/vt100-s
+/usr/share/ncurses4/terminfo/v/vt100-s-bot
+/usr/share/ncurses4/terminfo/v/vt100-s-top
+/usr/share/ncurses4/terminfo/v/vt100-top-s
+/usr/share/ncurses4/terminfo/v/vt100-vb
+/usr/share/ncurses4/terminfo/v/vt100-w
+/usr/share/ncurses4/terminfo/v/vt100-w-am
+/usr/share/ncurses4/terminfo/v/vt100-w-nam
+/usr/share/ncurses4/terminfo/v/vt100-w-nav
+/usr/share/ncurses4/terminfo/v/vt100nam
+/usr/share/ncurses4/terminfo/v/vt102
+/usr/share/ncurses4/terminfo/v/vt102-nsgr
+/usr/share/ncurses4/terminfo/v/vt102-w
+/usr/share/ncurses4/terminfo/v/vt125
+/usr/share/ncurses4/terminfo/v/vt131
+/usr/share/ncurses4/terminfo/v/vt132
+/usr/share/ncurses4/terminfo/v/vt200
+/usr/share/ncurses4/terminfo/v/vt200-js
+/usr/share/ncurses4/terminfo/v/vt200-w
+/usr/share/ncurses4/terminfo/v/vt220
+/usr/share/ncurses4/terminfo/v/vt220-8
+/usr/share/ncurses4/terminfo/v/vt220-js
+/usr/share/ncurses4/terminfo/v/vt220-nam
+/usr/share/ncurses4/terminfo/v/vt220-w
+/usr/share/ncurses4/terminfo/v/vt220d
+/usr/share/ncurses4/terminfo/v/vt300
+/usr/share/ncurses4/terminfo/v/vt300-nam
+/usr/share/ncurses4/terminfo/v/vt300-w
+/usr/share/ncurses4/terminfo/v/vt300-w-nam
+/usr/share/ncurses4/terminfo/v/vt320
+/usr/share/ncurses4/terminfo/v/vt320-k3
+/usr/share/ncurses4/terminfo/v/vt320-k311
+/usr/share/ncurses4/terminfo/v/vt320-nam
+/usr/share/ncurses4/terminfo/v/vt320-w
+/usr/share/ncurses4/terminfo/v/vt320-w-nam
+/usr/share/ncurses4/terminfo/v/vt320nam
+/usr/share/ncurses4/terminfo/v/vt330
+/usr/share/ncurses4/terminfo/v/vt340
+/usr/share/ncurses4/terminfo/v/vt400
+/usr/share/ncurses4/terminfo/v/vt400-24
+/usr/share/ncurses4/terminfo/v/vt420
+/usr/share/ncurses4/terminfo/v/vt420f
+/usr/share/ncurses4/terminfo/v/vt420pc
+/usr/share/ncurses4/terminfo/v/vt420pcdos
+/usr/share/ncurses4/terminfo/v/vt50
+/usr/share/ncurses4/terminfo/v/vt50h
+/usr/share/ncurses4/terminfo/v/vt510
+/usr/share/ncurses4/terminfo/v/vt510pc
+/usr/share/ncurses4/terminfo/v/vt510pcdos
+/usr/share/ncurses4/terminfo/v/vt52
+/usr/share/ncurses4/terminfo/v/vt520
+/usr/share/ncurses4/terminfo/v/vt525
+/usr/share/ncurses4/terminfo/v/vt61
+/usr/share/ncurses4/terminfo/v/vt61.5
+/usr/share/ncurses4/terminfo/w
+/usr/share/ncurses4/terminfo/w/wren
+/usr/share/ncurses4/terminfo/w/wrenw
+/usr/share/ncurses4/terminfo/w/wsiris
+/usr/share/ncurses4/terminfo/w/wy-75ap
+/usr/share/ncurses4/terminfo/w/wy100
+/usr/share/ncurses4/terminfo/w/wy100q
+/usr/share/ncurses4/terminfo/w/wy120
+/usr/share/ncurses4/terminfo/w/wy120-25
+/usr/share/ncurses4/terminfo/w/wy120-25-w
+/usr/share/ncurses4/terminfo/w/wy120-vb
+/usr/share/ncurses4/terminfo/w/wy120-w
+/usr/share/ncurses4/terminfo/w/wy120-w-vb
+/usr/share/ncurses4/terminfo/w/wy120-wvb
+/usr/share/ncurses4/terminfo/w/wy150
+/usr/share/ncurses4/terminfo/w/wy150-25
+/usr/share/ncurses4/terminfo/w/wy150-25-w
+/usr/share/ncurses4/terminfo/w/wy150-vb
+/usr/share/ncurses4/terminfo/w/wy150-w
+/usr/share/ncurses4/terminfo/w/wy150-w-vb
+/usr/share/ncurses4/terminfo/w/wy160
+/usr/share/ncurses4/terminfo/w/wy160-25
+/usr/share/ncurses4/terminfo/w/wy160-25-w
+/usr/share/ncurses4/terminfo/w/wy160-42
+/usr/share/ncurses4/terminfo/w/wy160-42-w
+/usr/share/ncurses4/terminfo/w/wy160-43
+/usr/share/ncurses4/terminfo/w/wy160-43-w
+/usr/share/ncurses4/terminfo/w/wy160-tek
+/usr/share/ncurses4/terminfo/w/wy160-vb
+/usr/share/ncurses4/terminfo/w/wy160-w
+/usr/share/ncurses4/terminfo/w/wy160-w-vb
+/usr/share/ncurses4/terminfo/w/wy160-wvb
+/usr/share/ncurses4/terminfo/w/wy185
+/usr/share/ncurses4/terminfo/w/wy185-24
+/usr/share/ncurses4/terminfo/w/wy185-vb
+/usr/share/ncurses4/terminfo/w/wy185-w
+/usr/share/ncurses4/terminfo/w/wy185-wvb
+/usr/share/ncurses4/terminfo/w/wy30
+/usr/share/ncurses4/terminfo/w/wy30-mc
+/usr/share/ncurses4/terminfo/w/wy30-vb
+/usr/share/ncurses4/terminfo/w/wy325
+/usr/share/ncurses4/terminfo/w/wy325-25
+/usr/share/ncurses4/terminfo/w/wy325-25w
+/usr/share/ncurses4/terminfo/w/wy325-42
+/usr/share/ncurses4/terminfo/w/wy325-42w
+/usr/share/ncurses4/terminfo/w/wy325-42w-vb
+/usr/share/ncurses4/terminfo/w/wy325-42wvb
+/usr/share/ncurses4/terminfo/w/wy325-43
+/usr/share/ncurses4/terminfo/w/wy325-43w
+/usr/share/ncurses4/terminfo/w/wy325-43w-vb
+/usr/share/ncurses4/terminfo/w/wy325-43wvb
+/usr/share/ncurses4/terminfo/w/wy325-80
+/usr/share/ncurses4/terminfo/w/wy325-vb
+/usr/share/ncurses4/terminfo/w/wy325-w
+/usr/share/ncurses4/terminfo/w/wy325-w-vb
+/usr/share/ncurses4/terminfo/w/wy325-wvb
+/usr/share/ncurses4/terminfo/w/wy325w-24
+/usr/share/ncurses4/terminfo/w/wy350
+/usr/share/ncurses4/terminfo/w/wy350-vb
+/usr/share/ncurses4/terminfo/w/wy350-w
+/usr/share/ncurses4/terminfo/w/wy350-wvb
+/usr/share/ncurses4/terminfo/w/wy370
+/usr/share/ncurses4/terminfo/w/wy370-101k
+/usr/share/ncurses4/terminfo/w/wy370-105k
+/usr/share/ncurses4/terminfo/w/wy370-EPC
+/usr/share/ncurses4/terminfo/w/wy370-nk
+/usr/share/ncurses4/terminfo/w/wy370-rv
+/usr/share/ncurses4/terminfo/w/wy370-tek
+/usr/share/ncurses4/terminfo/w/wy370-vb
+/usr/share/ncurses4/terminfo/w/wy370-w
+/usr/share/ncurses4/terminfo/w/wy370-wvb
+/usr/share/ncurses4/terminfo/w/wy50
+/usr/share/ncurses4/terminfo/w/wy50-mc
+/usr/share/ncurses4/terminfo/w/wy50-vb
+/usr/share/ncurses4/terminfo/w/wy50-w
+/usr/share/ncurses4/terminfo/w/wy50-wvb
+/usr/share/ncurses4/terminfo/w/wy520
+/usr/share/ncurses4/terminfo/w/wy520-24
+/usr/share/ncurses4/terminfo/w/wy520-36
+/usr/share/ncurses4/terminfo/w/wy520-36pc
+/usr/share/ncurses4/terminfo/w/wy520-36w
+/usr/share/ncurses4/terminfo/w/wy520-36wpc
+/usr/share/ncurses4/terminfo/w/wy520-48
+/usr/share/ncurses4/terminfo/w/wy520-48pc
+/usr/share/ncurses4/terminfo/w/wy520-48w
+/usr/share/ncurses4/terminfo/w/wy520-48wpc
+/usr/share/ncurses4/terminfo/w/wy520-epc
+/usr/share/ncurses4/terminfo/w/wy520-epc-24
+/usr/share/ncurses4/terminfo/w/wy520-epc-vb
+/usr/share/ncurses4/terminfo/w/wy520-epc-w
+/usr/share/ncurses4/terminfo/w/wy520-epc-wvb
+/usr/share/ncurses4/terminfo/w/wy520-vb
+/usr/share/ncurses4/terminfo/w/wy520-w
+/usr/share/ncurses4/terminfo/w/wy520-wvb
+/usr/share/ncurses4/terminfo/w/wy60
+/usr/share/ncurses4/terminfo/w/wy60-25
+/usr/share/ncurses4/terminfo/w/wy60-25-w
+/usr/share/ncurses4/terminfo/w/wy60-316X
+/usr/share/ncurses4/terminfo/w/wy60-42
+/usr/share/ncurses4/terminfo/w/wy60-42-w
+/usr/share/ncurses4/terminfo/w/wy60-43
+/usr/share/ncurses4/terminfo/w/wy60-43-w
+/usr/share/ncurses4/terminfo/w/wy60-vb
+/usr/share/ncurses4/terminfo/w/wy60-w
+/usr/share/ncurses4/terminfo/w/wy60-w-vb
+/usr/share/ncurses4/terminfo/w/wy60-wvb
+/usr/share/ncurses4/terminfo/w/wy75
+/usr/share/ncurses4/terminfo/w/wy75-mc
+/usr/share/ncurses4/terminfo/w/wy75-vb
+/usr/share/ncurses4/terminfo/w/wy75-w
+/usr/share/ncurses4/terminfo/w/wy75-wvb
+/usr/share/ncurses4/terminfo/w/wy75ap
+/usr/share/ncurses4/terminfo/w/wy85
+/usr/share/ncurses4/terminfo/w/wy85-vb
+/usr/share/ncurses4/terminfo/w/wy85-w
+/usr/share/ncurses4/terminfo/w/wy85-wvb
+/usr/share/ncurses4/terminfo/w/wy99gt
+/usr/share/ncurses4/terminfo/w/wy99gt-25
+/usr/share/ncurses4/terminfo/w/wy99gt-25-w
+/usr/share/ncurses4/terminfo/w/wy99gt-tek
+/usr/share/ncurses4/terminfo/w/wy99gt-vb
+/usr/share/ncurses4/terminfo/w/wy99gt-w
+/usr/share/ncurses4/terminfo/w/wy99gt-w-vb
+/usr/share/ncurses4/terminfo/w/wy99gt-wvb
+/usr/share/ncurses4/terminfo/w/wyse-325
+/usr/share/ncurses4/terminfo/w/wyse-75ap
+/usr/share/ncurses4/terminfo/w/wyse-vp
+/usr/share/ncurses4/terminfo/w/wyse120
+/usr/share/ncurses4/terminfo/w/wyse120-25
+/usr/share/ncurses4/terminfo/w/wyse120-25-w
+/usr/share/ncurses4/terminfo/w/wyse120-vb
+/usr/share/ncurses4/terminfo/w/wyse120-w
+/usr/share/ncurses4/terminfo/w/wyse120-wvb
+/usr/share/ncurses4/terminfo/w/wyse150
+/usr/share/ncurses4/terminfo/w/wyse150-25
+/usr/share/ncurses4/terminfo/w/wyse150-25-w
+/usr/share/ncurses4/terminfo/w/wyse150-vb
+/usr/share/ncurses4/terminfo/w/wyse150-w
+/usr/share/ncurses4/terminfo/w/wyse150-w-vb
+/usr/share/ncurses4/terminfo/w/wyse160
+/usr/share/ncurses4/terminfo/w/wyse160-25
+/usr/share/ncurses4/terminfo/w/wyse160-25-w
+/usr/share/ncurses4/terminfo/w/wyse160-42
+/usr/share/ncurses4/terminfo/w/wyse160-42-w
+/usr/share/ncurses4/terminfo/w/wyse160-43
+/usr/share/ncurses4/terminfo/w/wyse160-43-w
+/usr/share/ncurses4/terminfo/w/wyse160-vb
+/usr/share/ncurses4/terminfo/w/wyse160-w
+/usr/share/ncurses4/terminfo/w/wyse160-wvb
+/usr/share/ncurses4/terminfo/w/wyse185
+/usr/share/ncurses4/terminfo/w/wyse185-24
+/usr/share/ncurses4/terminfo/w/wyse185-vb
+/usr/share/ncurses4/terminfo/w/wyse185-w
+/usr/share/ncurses4/terminfo/w/wyse185-wvb
+/usr/share/ncurses4/terminfo/w/wyse30
+/usr/share/ncurses4/terminfo/w/wyse30-mc
+/usr/share/ncurses4/terminfo/w/wyse30-vb
+/usr/share/ncurses4/terminfo/w/wyse325
+/usr/share/ncurses4/terminfo/w/wyse325-25
+/usr/share/ncurses4/terminfo/w/wyse325-25w
+/usr/share/ncurses4/terminfo/w/wyse325-42
+/usr/share/ncurses4/terminfo/w/wyse325-42w
+/usr/share/ncurses4/terminfo/w/wyse325-43
+/usr/share/ncurses4/terminfo/w/wyse325-43w
+/usr/share/ncurses4/terminfo/w/wyse325-vb
+/usr/share/ncurses4/terminfo/w/wyse325-w
+/usr/share/ncurses4/terminfo/w/wyse325-wvb
+/usr/share/ncurses4/terminfo/w/wyse350
+/usr/share/ncurses4/terminfo/w/wyse350-vb
+/usr/share/ncurses4/terminfo/w/wyse350-w
+/usr/share/ncurses4/terminfo/w/wyse350-wvb
+/usr/share/ncurses4/terminfo/w/wyse370
+/usr/share/ncurses4/terminfo/w/wyse50
+/usr/share/ncurses4/terminfo/w/wyse50-mc
+/usr/share/ncurses4/terminfo/w/wyse50-vb
+/usr/share/ncurses4/terminfo/w/wyse50-w
+/usr/share/ncurses4/terminfo/w/wyse50-wvb
+/usr/share/ncurses4/terminfo/w/wyse520
+/usr/share/ncurses4/terminfo/w/wyse520-24
+/usr/share/ncurses4/terminfo/w/wyse520-36
+/usr/share/ncurses4/terminfo/w/wyse520-36pc
+/usr/share/ncurses4/terminfo/w/wyse520-36w
+/usr/share/ncurses4/terminfo/w/wyse520-36wpc
+/usr/share/ncurses4/terminfo/w/wyse520-48
+/usr/share/ncurses4/terminfo/w/wyse520-48pc
+/usr/share/ncurses4/terminfo/w/wyse520-48w
+/usr/share/ncurses4/terminfo/w/wyse520-48wpc
+/usr/share/ncurses4/terminfo/w/wyse520-epc
+/usr/share/ncurses4/terminfo/w/wyse520-epc-w
+/usr/share/ncurses4/terminfo/w/wyse520-p-wvb
+/usr/share/ncurses4/terminfo/w/wyse520-pc-24
+/usr/share/ncurses4/terminfo/w/wyse520-pc-vb
+/usr/share/ncurses4/terminfo/w/wyse520-vb
+/usr/share/ncurses4/terminfo/w/wyse520-w
+/usr/share/ncurses4/terminfo/w/wyse520-wvb
+/usr/share/ncurses4/terminfo/w/wyse60
+/usr/share/ncurses4/terminfo/w/wyse60-25
+/usr/share/ncurses4/terminfo/w/wyse60-25-w
+/usr/share/ncurses4/terminfo/w/wyse60-316X
+/usr/share/ncurses4/terminfo/w/wyse60-42
+/usr/share/ncurses4/terminfo/w/wyse60-42-w
+/usr/share/ncurses4/terminfo/w/wyse60-43
+/usr/share/ncurses4/terminfo/w/wyse60-43-w
+/usr/share/ncurses4/terminfo/w/wyse60-vb
+/usr/share/ncurses4/terminfo/w/wyse60-w
+/usr/share/ncurses4/terminfo/w/wyse60-wvb
+/usr/share/ncurses4/terminfo/w/wyse75
+/usr/share/ncurses4/terminfo/w/wyse75-mc
+/usr/share/ncurses4/terminfo/w/wyse75-vb
+/usr/share/ncurses4/terminfo/w/wyse75-w
+/usr/share/ncurses4/terminfo/w/wyse75-wvb
+/usr/share/ncurses4/terminfo/w/wyse75ap
+/usr/share/ncurses4/terminfo/w/wyse85
+/usr/share/ncurses4/terminfo/w/wyse85-vb
+/usr/share/ncurses4/terminfo/w/wyse85-w
+/usr/share/ncurses4/terminfo/w/wyse85-wvb
+/usr/share/ncurses4/terminfo/w/wyse99gt
+/usr/share/ncurses4/terminfo/w/wyse99gt-25
+/usr/share/ncurses4/terminfo/w/wyse99gt-25-w
+/usr/share/ncurses4/terminfo/w/wyse99gt-vb
+/usr/share/ncurses4/terminfo/w/wyse99gt-w
+/usr/share/ncurses4/terminfo/w/wyse99gt-wvb
+/usr/share/ncurses4/terminfo/x
+/usr/share/ncurses4/terminfo/x/x10term
+/usr/share/ncurses4/terminfo/x/x1700
+/usr/share/ncurses4/terminfo/x/x1700-lm
+/usr/share/ncurses4/terminfo/x/x1720
+/usr/share/ncurses4/terminfo/x/x1750
+/usr/share/ncurses4/terminfo/x/x68k
+/usr/share/ncurses4/terminfo/x/x68k-ite
+/usr/share/ncurses4/terminfo/x/x820
+/usr/share/ncurses4/terminfo/x/xenix
+/usr/share/ncurses4/terminfo/x/xerox
+/usr/share/ncurses4/terminfo/x/xerox-lm
+/usr/share/ncurses4/terminfo/x/xerox1720
+/usr/share/ncurses4/terminfo/x/xerox820
+/usr/share/ncurses4/terminfo/x/xl83
+/usr/share/ncurses4/terminfo/x/xtalk
+/usr/share/ncurses4/terminfo/x/xterm
+/usr/share/ncurses4/terminfo/x/xterm+sl
+/usr/share/ncurses4/terminfo/x/xterm+sl-twm
+/usr/share/ncurses4/terminfo/x/xterm-16color
+/usr/share/ncurses4/terminfo/x/xterm-8bit
+/usr/share/ncurses4/terminfo/x/xterm-bold
+/usr/share/ncurses4/terminfo/x/xterm-nic
+/usr/share/ncurses4/terminfo/x/xterm-old
+/usr/share/ncurses4/terminfo/x/xterm-pcolor
+/usr/share/ncurses4/terminfo/x/xterm-r5
+/usr/share/ncurses4/terminfo/x/xterm-r6
+/usr/share/ncurses4/terminfo/x/xterm-sun
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v32
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v33
+/usr/share/ncurses4/terminfo/x/xterm-xf86-v40
+/usr/share/ncurses4/terminfo/x/xterm-xi
+/usr/share/ncurses4/terminfo/x/xterm1
+/usr/share/ncurses4/terminfo/x/xterms
+/usr/share/ncurses4/terminfo/x/xterms-sun
+/usr/share/ncurses4/terminfo/x/xwsh
+/usr/share/ncurses4/terminfo/z
+/usr/share/ncurses4/terminfo/z/z-100
+/usr/share/ncurses4/terminfo/z/z-100bw
+/usr/share/ncurses4/terminfo/z/z100
+/usr/share/ncurses4/terminfo/z/z100bw
+/usr/share/ncurses4/terminfo/z/z110
+/usr/share/ncurses4/terminfo/z/z110bw
+/usr/share/ncurses4/terminfo/z/z19
+/usr/share/ncurses4/terminfo/z/z29
+/usr/share/ncurses4/terminfo/z/z29a
+/usr/share/ncurses4/terminfo/z/z29a-kc-bc
+/usr/share/ncurses4/terminfo/z/z29a-kc-uc
+/usr/share/ncurses4/terminfo/z/z29a-nkc-bc
+/usr/share/ncurses4/terminfo/z/z29a-nkc-uc
+/usr/share/ncurses4/terminfo/z/z29b
+/usr/share/ncurses4/terminfo/z/z30
+/usr/share/ncurses4/terminfo/z/z340
+/usr/share/ncurses4/terminfo/z/z340-nam
+/usr/share/ncurses4/terminfo/z/z39-a
+/usr/share/ncurses4/terminfo/z/z39a
+/usr/share/ncurses4/terminfo/z/z50
+/usr/share/ncurses4/terminfo/z/z8001
+/usr/share/ncurses4/terminfo/z/zen30
+/usr/share/ncurses4/terminfo/z/zen50
+/usr/share/ncurses4/terminfo/z/zen8001
+/usr/share/ncurses4/terminfo/z/zenith
+/usr/share/ncurses4/terminfo/z/zenith29
+/usr/share/ncurses4/terminfo/z/zenith39-a
+/usr/share/ncurses4/terminfo/z/zenith39-ansi
+/usr/share/ncurses4/terminfo/z/zt-1
+/usr/share/ncurses4/terminfo/z/ztx
+/usr/share/ncurses4/terminfo/z/ztx-1-a
+/usr/share/ncurses4/terminfo/z/ztx11
+</RPM:Files>
+ </RDF:Description>
+</RDF:RDF>
diff --git a/test/regexp/content b/test/regexp/content
new file mode 100644
index 0000000..9d01c8b
--- /dev/null
+++ b/test/regexp/content
@@ -0,0 +1,12 @@
+=>((a|b|c)def)
+adef
+bdef
+adefg
+aaef
+=>((a|b|c|d|e|f)?(g|h|i)+(k|l)*)
+g
+gi
+fil
+gikl
+cghhhiill
+ak
diff --git a/test/regexp/hard b/test/regexp/hard
new file mode 100644
index 0000000..40c6d2d
--- /dev/null
+++ b/test/regexp/hard
@@ -0,0 +1,7 @@
+=>((a|b|\p{Nd}){1,2}|aaa|bbbb){1,2}
+bab
+aaca
+aaabbbb
+a0b
+aa0aaa
+b0aaa
diff --git a/test/regexp/ncname b/test/regexp/ncname
new file mode 100644
index 0000000..1e452a8
--- /dev/null
+++ b/test/regexp/ncname
@@ -0,0 +1,6 @@
+=>[\i-[:]][\c-[:]]*
+a
+abc
+abc1d
+1ac
+a1b:c
diff --git a/test/regexp/ranges b/test/regexp/ranges
new file mode 100644
index 0000000..cb7c22f
--- /dev/null
+++ b/test/regexp/ranges
@@ -0,0 +1,15 @@
+=>a{2,3}
+a
+aa
+aaa
+aaaa
+=>ba{2,3}c
+bac
+baac
+baaac
+baaaac
+=>a(b|c){2,3}d
+abcd
+acccd
+abd
+accccd
diff --git a/test/regexp/xpath b/test/regexp/xpath
new file mode 100644
index 0000000..62c18c4
--- /dev/null
+++ b/test/regexp/xpath
@@ -0,0 +1,37 @@
+=>(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*(\|(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*)*
+a
+a12/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b3
+*
+a|b
+.//a:b
+a/b/c
+a/*/b
+a:*/b:*/c:*
+child::a/child::b:*
+child::a/child::b:*|a/*/b|.//a:b
+1
+1ab
+a:1
+@a
+ancestor::a
+#
+# the previous regexp from the Schemas for Schemas was broken
+# here is the fixed one:
+# http://lists.w3.org/Archives/Public/www-xml-schema-comments/2002AprJun/0005.html
+#
+=>(\.//)?(((child::)?(([\i-[:]][\c-[:]]*:)?([\i-[:]][\c-[:]]*|\*)))|\.)(/(((child::)?(([\i-[:]][\c-[:]]*:)?([\i-[:]][\c-[:]]*|\*)))|\.))*(\|(\.//)?(((child::)?(([\i-[:]][\c-[:]]*:)?([\i-[:]][\c-[:]]*|\*)))|\.)(/(((child::)?(([\i-[:]][\c-[:]]*:)?([\i-[:]][\c-[:]]*|\*)))|\.))*)*
+a
+a12/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b3
+*
+a|b
+.//a:b
+a/b/c
+a/*/b
+a:*/b:*/c:*
+child::a/child::b:*
+child::a/child::b:*|a/*/b|.//a:b
+1
+1ab
+a:1
+@a
+ancestor::a
diff --git a/test/relaxng/.memdump b/test/relaxng/.memdump
new file mode 100644
index 0000000..0f97d97
--- /dev/null
+++ b/test/relaxng/.memdump
@@ -0,0 +1,16 @@
+ 02:06:22 PM
+
+ MEMORY ALLOCATED : 2304, MAX was 94954
+BLOCK NUMBER SIZE TYPE
+0 3260 192 malloc() in none(0)
+1 3254 192 malloc() in none(0)
+2 3253 192 malloc() in none(0)
+3 3245 192 malloc() in none(0)
+4 3223 192 malloc() in none(0)
+5 3214 192 malloc() in none(0)
+6 3210 192 malloc() in none(0)
+7 3206 192 malloc() in none(0)
+8 3198 192 malloc() in none(0)
+9 3194 192 malloc() in none(0)
+10 3172 192 malloc() in none(0)
+11 3132 192 malloc() in none(0)
diff --git a/test/relaxng/OASIS/spectest.xml b/test/relaxng/OASIS/spectest.xml
new file mode 100644
index 0000000..18afb2e
--- /dev/null
+++ b/test/relaxng/OASIS/spectest.xml
@@ -0,0 +1,6845 @@
+<!DOCTYPE testSuite [
+<!ENTITY dii "<&#xE14;&#xE35;/>">
+]>
+<testSuite>
+<author>James Clark</author>
+<email>jjc@jclark.com</email>
+<documentation>For October 26 version of the spec.</documentation>
+<testSuite>
+<section>3</section>
+<testSuite>
+<documentation>Various possible syntax errors.</documentation>
+<testCase>
+<section>3</section>
+<incorrect>
+<thisIsJunk/>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="foo">
+ <empty/>
+ </element>
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <define name="bar">
+ <text/>
+ </define>
+ <text/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <name>foo</name>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <group>
+ <name>bar</name>
+ </group>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <anyName>
+ <except>
+ <name>foo</name>
+ </except>
+ <except>
+ <name>bar</name>
+ </except>
+ </anyName>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <nsName>
+ <except>
+ <name>foo</name>
+ </except>
+ <except>
+ <name>bar</name>
+ </except>
+ </nsName>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <data type="token">
+ <except>
+ <value>foo</value>
+ </except>
+ <except>
+ <value>bar</value>
+ </except>
+ </data>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <empty name="bar"/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo" extra="bar">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <empty>
+ <empty/>
+ </empty>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <text>
+ <empty/>
+ </text>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <choice>
+ <text/>
+ <notAllowed>
+ <empty/>
+ </notAllowed>
+ </choice>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo">
+ <empty/>
+ </ref>
+ </start>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <grammar>
+ <start>
+ <parentRef name="foo">
+ <empty/>
+ </parentRef>
+ </start>
+ </grammar>
+ </start>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Tests for obsolete syntax</documentation>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo" ns="http://www.example.com">
+ <attribute name="bar" global="true">
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <not>
+ <name>foo</name>
+ </not>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <difference>
+ <anyName/>
+ <name>foo</name>
+ </difference>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <data type="token" key="foo"/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <data type="token" keyRef="foo"/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <keyRef name="foo">
+ <data type="token"/>
+ </keyRef>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <key name="foo">
+ <data type="token"/>
+ </key>
+</element>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Tests for missing attributes and child elements</documentation>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <name>foo</name>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <list/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <mixed/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice/>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <anyName>
+ <except/>
+ </anyName>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <nsName ns="">
+ <except/>
+ </nsName>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string">
+ <except/>
+ </data>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string">
+ <param/>
+ </data>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <grammar>
+ <start/>
+ </grammar>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="bar">
+ <empty/>
+ </element>
+ </start>
+ <define name="baz"/>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <externalRef/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include/>
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+ <define>
+ <element name="bar">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref/>
+ </start>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <grammar>
+ <start>
+ <parentRef/>
+ </start>
+ </grammar>
+ </start>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Checking of ns attribute</documentation>
+<testCase>
+<section>3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="">
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>No checking of ns attribute is performed</documentation>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="DAV:">
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo xmlns="DAV:"/>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>No checking of ns attribute is performed</documentation>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="xyzzy">
+ <empty/>
+</element>
+</correct>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>No checking of ns attribute is performed</documentation>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="bad_scheme://">
+ <empty/>
+</element>
+</correct>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Checking of datatypeLibrary attribute</documentation>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="foo_bar:xyzzy">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="foobar:xyzzy">
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http:ok">
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="foo:">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.example.com/%">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.example.com/%xx">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must conform to RFC 2396</documentation>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.example.com/%Aa">
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must not be relative</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="xyzzy">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must not be relative</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="xyzzy#foo:bar">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must not be relative</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="xyzzy?foo:bar">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must not be relative</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="xyzzy/foo:bar">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="foo:bar">
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="">
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data datatypeLibrary="" type="string"/>
+</element>
+</correct>
+<valid>
+<foo>x</foo>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must not contain fragment identifier</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.example.com#xyzzy">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<documentation>Value of datatypeLibrary attribute must not contain fragment identifier</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.example.com#">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Tests for QName and NCNames in schemas</documentation>
+<testCase>
+<section>3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="&#xE14;&#xE35;">
+ <empty/>
+ </element>
+</element>
+</correct>
+<valid>
+<foo>&dii;</foo>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="&#xE35;" xmlns="http://relaxng.org/ns/structure/1.0">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="" xmlns="http://relaxng.org/ns/structure/1.0">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <name>&#xE35;</name>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="&#xE35;"/>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="&#xE35;"/>
+ </start>
+ <define name="&#xE35;">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="&#xE14;&#xE35;"/>
+ </start>
+ <define name="&#xE14;&#xE35;">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name=""/>
+ </start>
+ <define name="">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="x y"/>
+ </start>
+ <define name="x y">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+ xmlns:x="http://www.example.com/x">
+ <start>
+ <ref name="x:y"/>
+ </start>
+ <define name="x:y">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0"
+ xmlns:x="http://www.example.com/x"
+ name="x:&#xE35;">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0"
+ xmlns:x="http://www.example.com/x"
+ name="x:y:z">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0"
+ xmlns:x="http://www.example.com/x"
+ name="x:">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Tests for elements that allow only a single pattern child.</documentation>
+<testCase>
+<section>3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ <empty/>
+ </start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <attribute name="bar">
+ <text/>
+ <empty/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <attribute>
+ <name>bar</name>
+ <text/>
+ <empty/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Tests for foreign element and attribute handling.</documentation>
+<testCase>
+<section>3</section>
+<incorrect>
+<r:element name="foo" xmlns:r="http://relaxng.org/ns/structure/1.0" r:a="val">
+ <r:empty/>
+</r:element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <name>foo<eg:comment xmlns:eg="http://www.example.com"/></name>
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <value>foo<eg:comment xmlns:eg="http://www.example.com"/></value>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <data type="string"><eg:comment xmlns:eg="http://www.example.com"/></data>
+</element>
+</correct>
+<valid>
+<foo>X</foo>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <empty>
+ <ext xmlns="http://www.example.com">
+ <element xmlns="http://relaxng.org/ns/structure/1.0"/>
+ </ext>
+ </empty>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:eg="http://www.example.com">
+ <eg:comment/>
+ <eg:comment/>
+ <start>
+ <eg:comment/>
+ <element>
+ <eg:comment/>
+ <eg:comment/>
+ <name>foo</name>
+ <eg:comment/>
+ <data type="string"/>
+ <eg:comment/>
+ <empty>
+ <eg:comment/>
+ <eg:comment/>
+ </empty>
+ <eg:comment/>
+ <eg:comment/>
+ </element>
+ <eg:comment/>
+ </start>
+ <eg:comment/>
+</grammar>
+</correct>
+<valid>
+<foo>X</foo>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:eg="http://www.example.com"
+ eg:comment="">
+ <start eg:comment="">
+ <element eg:comment="">
+ <name eg:comment="">foo</name>
+ <data eg:comment="" type="string"/>
+ <empty eg:comment=""/>
+ </element>
+ </start>
+</grammar>
+</correct>
+<valid>
+<foo>X</foo>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0" xmlns="http://www.example.com">
+ <comment/>
+ <comment/>
+ <rng:start>
+ <comment/>
+ <rng:element>
+ <comment/>
+ <comment/>
+ <rng:name>foo</rng:name>
+ <comment/>
+ <rng:data type="string"/>
+ <comment/>
+ </rng:element>
+ <comment/>
+ </rng:start>
+ <comment/>
+</rng:grammar>
+</correct>
+<valid>
+<foo>X</foo>
+</valid>
+</testCase>
+<testCase>
+<section>3</section>
+<correct>
+<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0">
+ <comment/>
+ <comment/>
+ <rng:start>
+ <comment/>
+ <rng:element>
+ <comment/>
+ <comment/>
+ <rng:name>foo</rng:name>
+ <comment/>
+ <rng:data type="string"/>
+ <comment/>
+ </rng:element>
+ <comment/>
+ </rng:start>
+ <comment/>
+</rng:grammar>
+</correct>
+<valid>
+<foo>X</foo>
+</valid>
+</testCase>
+</testSuite>
+</testSuite>
+<testSuite>
+<section>4</section>
+<testSuite>
+<section>4.2</section>
+<testCase>
+<section>4.2</section>
+<correct>
+<element name="&#xA;&#xD;&#x20;&#x9;foo&#xA;&#xD;&#x20;&#x9;" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="&#xA;&#xD;&#x20;&#x9;bar&#xA;&#xD;&#x20;&#x9;"/>
+</element>
+</correct>
+<valid>
+<foo bar=""/>
+</valid>
+</testCase>
+<testCase>
+<section>4.2</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="&#xA;&#xD;&#x20;&#x9;string&#xA;&#xD;&#x20;&#x9;">bar</value>
+</element>
+</correct>
+<valid>
+<foo>bar</foo>
+</valid>
+<invalid>
+<foo>bar </foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.2</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="&#xA;&#xD;&#x20;&#x9;string&#xA;&#xD;&#x20;&#x9;"/>
+</element>
+</correct>
+<valid>
+<foo>X</foo>
+</valid>
+</testCase>
+<testCase>
+<section>4.2</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <name>&#xA;&#xD;&#x20;&#x9;foo&#xA;&#xD;&#x20;&#x9;</name>
+ <attribute><name>&#xA;&#xD;&#x20;&#x9;bar&#xA;&#xD;&#x20;&#x9;</name></attribute>
+</element>
+</correct>
+<valid>
+<foo bar=""/>
+</valid>
+</testCase>
+<testCase>
+<section>4.2</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start combine="&#xA;&#xD;&#x20;&#x9;choice&#xA;&#xD;&#x20;&#x9;">
+ <ref name="&#xA;&#xD;&#x20;&#x9;x&#xA;&#xD;&#x20;&#x9;"/>
+ </start>
+ <define name="x">
+ <ref name="y"/>
+ </define>
+ <define name="&#xA;&#xD;&#x20;&#x9;y&#xA;&#xD;&#x20;&#x9;">
+ <grammar>
+ <start combine="&#xA;&#xD;&#x20;&#x9;interleave&#xA;&#xD;&#x20;&#x9;">
+ <parentRef name="&#xA;&#xD;&#x20;&#x9;z&#xA;&#xD;&#x20;&#x9;"/>
+ </start>
+ </grammar>
+ </define>
+ <define name="z">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+</testSuite>
+<testCase>
+<section>4.4</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value datatypeLibrary="http://www.example.com/this-does-not-exist">bar</value>
+</element>
+</correct>
+<valid>
+<foo>bar</foo>
+</valid>
+<valid>
+<foo>
+ bar
+</foo>
+</valid>
+<valid>
+<foo> bar </foo>
+</valid>
+<invalid>
+<foo>baz</foo>
+</invalid>
+<invalid>
+<foo>ba r</foo>
+</invalid>
+</testCase>
+<testSuite>
+<section>4.5</section>
+<testCase>
+<section>4.5</section>
+<dir name="sub">
+<resource name="x">
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <empty/>
+</element>
+</resource>
+</dir>
+<correct>
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0"
+ xml:base="sub/y" href="x"/>
+</correct>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<bar/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.5</section>
+<resource name="x">
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="bar">
+ <empty/>
+</element>
+</resource>
+<dir name="sub1">
+<resource name="x">
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="bar">
+ <empty/>
+</element>
+</resource>
+<dir name="sub3">
+<resource name="x">
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <empty/>
+</element>
+</resource>
+</dir>
+</dir>
+<correct>
+<group xmlns="http://relaxng.org/ns/structure/1.0" xml:base="sub1/">
+ <group>
+ <group xml:base="sub2">
+ <group>
+ <group xml:base="sub3/y">
+ <externalRef href="x"/>
+ </group>
+ </group>
+ </group>
+ </group>
+</group>
+</correct>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<bar/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.5</section>
+<resource name="x">
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <empty/>
+</element>
+</resource>
+<incorrect>
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x#foo"/>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.6</section>
+<testCase>
+<section>4.6</section>
+<resource name="x">
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <empty/>
+</element>
+</resource>
+<correct>
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
+</correct>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<bar/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.6</section>
+<resource name="x">
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <empty/>
+</element>
+</resource>
+<correct>
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x" ns="http://www.example.com"/>
+</correct>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.6</section>
+<resource name="x">
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
+</resource>
+<incorrect>
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.6</section>
+<resource name="x">
+<start xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="foo">
+ <empty/>
+ </element>
+</start>
+</resource>
+<incorrect>
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.6</section>
+<resource name="x">
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="y"/>
+</resource>
+<resource name="y">
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
+</resource>
+<incorrect>
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="x"/>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.6</section>
+<documentation>Same value of href before resolution, but not a loop.</documentation>
+<dir name="sub">
+<resource name="x">
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="sub/x"/>
+</resource>
+<dir name="sub">
+<resource name="x">
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <empty/>
+</element>
+</resource>
+</dir>
+</dir>
+<correct>
+<externalRef xmlns="http://relaxng.org/ns/structure/1.0" href="sub/x"/>
+</correct>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<bar/>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.7</section>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x"/>
+</grammar>
+</correct>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<bar/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x" ns="http://www.example.com"/>
+</grammar>
+</correct>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="y"/>
+</grammar>
+</resource>
+<resource name="y">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x"/>
+</grammar>
+</correct>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<bar/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <empty/>
+</element>
+</resource>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x"/>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x"/>
+</grammar>
+</resource>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x"/>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="y"/>
+</grammar>
+</resource>
+<resource name="y">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x"/>
+</grammar>
+</resource>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x"/>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.7</section>
+<dir name="sub">
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="sub/x"/>
+</grammar>
+</resource>
+<dir name="sub">
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+</grammar>
+</resource>
+</dir>
+</dir>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="sub/x"/>
+</grammar>
+</correct>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<bar/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x">
+ <start>
+ <ref name="foo"/>
+ </start>
+ </include>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x"/>
+ <start>
+ <ref name="foo"/>
+ </start>
+</grammar>
+</correct>
+<valid><foo/></valid>
+<invalid><bar/></invalid>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo"/>
+ </start>
+</grammar>
+</resource>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x">
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+ </include>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo"/>
+ </start>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <include href="x"/>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid><foo/></valid>
+<invalid><bar/></invalid>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="x">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <define name="foo" combine="choice">
+ <element name="foo3">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo"/>
+ </start>
+ <include href="x">
+ <define name="foo" combine="choice">
+ <element name="foo1">
+ <empty/>
+ </element>
+ </define>
+ </include>
+ <define name="foo">
+ <element name="foo2">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid><foo1/></valid>
+<valid><foo2/></valid>
+<invalid><foo3/></invalid>
+</testCase>
+<testCase>
+<section>4.7</section>
+<resource name="level1.rng">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<include href="level2.rng">
+ <define name="foo">
+ <element name="bar">
+ <empty/>
+ </element>
+ </define>
+</include>
+</grammar>
+</resource>
+<resource name="level2.rng">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <define name="bar">
+ <element name="bar">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <ref name="foo"/>
+</start>
+<include href="level1.rng">
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</include>
+</grammar>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.8</section>
+<testCase>
+<section>4.8</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.example.com" name="foo">
+ <attribute name="bar" ns="http://www.example.com"/>
+</element>
+</correct>
+<valid>
+<eg:foo eg:bar="x" xmlns:eg="http://www.example.com"/>
+</valid>
+<invalid>
+<eg:foo xmlns:eg="http://www.example.com" bar="x"/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.8</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.example.com" name="foo">
+ <attribute name="bar"/>
+</element>
+</correct>
+<invalid>
+<eg:foo xmlns:eg="http://www.example.com" eg:bar="x"/>
+</invalid>
+<valid>
+<eg:foo xmlns:eg="http://www.example.com" bar="x"/>
+</valid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.9</section>
+<testCase>
+<section>4.9</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.example.com" name="foo">
+ <attribute>
+ <name>bar</name>
+ </attribute>
+</element>
+</correct>
+<valid>
+<eg:foo xmlns:eg="http://www.example.com" eg:bar="x"/>
+</valid>
+<invalid>
+<eg:foo xmlns:eg="http://www.example.com" bar="x"/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.6</section>
+<section>4.9</section>
+<resource name="x">
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <empty/>
+</element>
+</resource>
+<correct>
+<group ns="http://www.example.com" xmlns="http://relaxng.org/ns/structure/1.0" >
+<externalRef href="x"/>
+</group>
+</correct>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<group xmlns="http://relaxng.org/ns/structure/1.0">
+ <element ns="http://www.example.com">
+ <name>foo</name>
+ <empty/>
+ </element>
+</group>
+</correct>
+<valid><foo xmlns="http://www.example.com"/></valid>
+<invalid><foo/></invalid>
+</testCase>
+<testCase>
+<correct>
+<element ns="http://www.example.com" xmlns="http://relaxng.org/ns/structure/1.0">
+ <name>foo</name>
+ <empty/>
+</element>
+</correct>
+<valid><foo xmlns="http://www.example.com"/></valid>
+<invalid><foo/></invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute ns="http://www.example.com">
+ <name>bar</name>
+ <text/>
+ </attribute>
+</element>
+</correct>
+<valid><foo xmlns:x="http://www.example.com" x:bar="whatever"/></valid>
+<invalid><foo bar="whatever"/></invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.10</section>
+<testCase>
+<section>4.10</section>
+<incorrect>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo:bar">
+ <empty/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.10</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="eg:foo" xmlns:eg="http://www.example.com">
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+<invalid>
+<foo xmlns="http://www.example.com/"/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.10</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo" xmlns:eg="http://www.example.com">
+ <attribute name="eg:bar"/>
+</element>
+</correct>
+<valid>
+<foo xmlns:ex="http://www.example.com" ex:bar="x"/>
+</valid>
+<invalid>
+<foo xmlns:ex="http://www.example.com/" ex:bar="x"/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.10</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <attribute name="xml:lang"/>
+</element>
+</correct>
+<valid>
+<foo xml:lang="en"/>
+</valid>
+<invalid>
+<foo lang="en"/>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.11</section>
+<testCase>
+<section>4.11</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <div ns="http://www.example.com">
+ <div>
+ <start>
+ <ref name="foo"/>
+ </start>
+ </div>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+ </div>
+ <div/>
+</grammar>
+</correct>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<testCase>
+<section>4.12</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<start>
+ <element name="foo">
+ <ref name="bars"/>
+ </element>
+</start>
+
+<define name="bars">
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+</define>
+
+</grammar>
+</correct>
+<valid>
+<foo><bar/><bar/><bar/></foo>
+</valid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo></foo>
+</invalid>
+<invalid>
+<foo>X</foo>
+</invalid>
+<invalid>
+<foo><bar/>X<bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </oneOrMore>
+</element>
+</correct>
+<valid>
+<foo><bar/><bar/><bar/></foo>
+</valid>
+<valid>
+<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
+</valid>
+<invalid>
+<foo><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo></foo>
+</invalid>
+<invalid>
+<foo>X</foo>
+</invalid>
+<invalid>
+<foo><bar/>X<bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<section>4.15</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </zeroOrMore>
+</element>
+</correct>
+<valid>
+<foo><bar/><bar/><bar/></foo>
+</valid>
+<valid>
+<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
+</valid>
+<invalid>
+<foo><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<valid>
+<foo></foo>
+</valid>
+<invalid>
+<foo>X</foo>
+</invalid>
+<invalid>
+<foo><bar/>X<bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<section>4.14</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </optional>
+</element>
+</correct>
+<valid>
+<foo><bar/><bar/><bar/></foo>
+</valid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<valid>
+<foo></foo>
+</valid>
+<invalid>
+<foo>X</foo>
+</invalid>
+<invalid>
+<foo><bar/>X<bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <list>
+ <value>x</value>
+ <value>y</value>
+ <value>z</value>
+ </list>
+</element>
+</correct>
+<valid>
+<foo>x y z</foo>
+</valid>
+<invalid>
+<foo>x</foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<section>4.13</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <mixed>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </mixed>
+</element>
+</correct>
+<valid>
+<foo><bar/><bar/><bar/></foo>
+</valid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo></foo>
+</invalid>
+<valid>
+<foo><bar/>X<bar/><bar/></foo>
+</valid>
+<invalid>
+<foo>X</foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <name>foo</name>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+</element>
+</correct>
+<valid>
+<foo><bar/><bar/><bar/></foo>
+</valid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo></foo>
+</invalid>
+<invalid>
+<foo>X</foo>
+</invalid>
+<invalid>
+<foo><bar/>X<bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <anyName>
+ <except>
+ <name>foo</name>
+ <name>bar</name>
+ <name>baz</name>
+ </except>
+ </anyName>
+ <empty/>
+</element>
+</correct>
+<valid><xyzzy/></valid>
+<invalid><foo/></invalid>
+<invalid><bar/></invalid>
+<invalid><baz/></invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="token">
+ <except>
+ <value>x</value>
+ <value>y</value>
+ <value>z</value>
+ </except>
+ </data>
+</element>
+</correct>
+<valid><foo/></valid>
+<valid><foo>xyz</foo></valid>
+<invalid><foo>x</foo></invalid>
+<invalid><foo>y</foo></invalid>
+<invalid><foo>y</foo></invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar"/>
+</element>
+</correct>
+<valid>
+<foo bar=""/>
+</valid>
+<valid>
+<foo bar="x"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute>
+ <name>bar</name>
+ </attribute>
+</element>
+</correct>
+<valid>
+<foo bar=""/>
+</valid>
+<valid>
+<foo bar="x"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </group>
+</element>
+</correct>
+<valid>
+<foo><bar/><bar/><bar/></foo>
+</valid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo></foo>
+</invalid>
+<invalid>
+<foo>X</foo>
+</invalid>
+<invalid>
+<foo><bar/>X<bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/><bar/><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <element name="bar1">
+ <empty/>
+ </element>
+ <element name="bar2">
+ <empty/>
+ </element>
+ <element name="bar3">
+ <empty/>
+ </element>
+ </choice>
+</element>
+</correct>
+<valid><foo><bar1/></foo></valid>
+<valid><foo><bar2/></foo></valid>
+<valid><foo><bar3/></foo></valid>
+<invalid><foo/></invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar1">
+ <empty/>
+ </element>
+ <element name="bar2">
+ <empty/>
+ </element>
+ <element name="bar3">
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</correct>
+<valid><foo><bar1/><bar2/><bar3/></foo></valid>
+<valid><foo><bar1/><bar3/><bar2/></foo></valid>
+<valid><foo><bar2/><bar1/><bar3/></foo></valid>
+<valid><foo><bar2/><bar3/><bar1/></foo></valid>
+<valid><foo><bar3/><bar1/><bar2/></foo></valid>
+<valid><foo><bar3/><bar2/><bar1/></foo></valid>
+<invalid><foo><bar2/><bar1/></foo></invalid>
+<invalid><foo><bar1/><bar3/><bar2/><bar1/></foo></invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <element name="bar">
+ <empty/>
+ </element>
+ </group>
+</element>
+</correct>
+<valid><foo><bar/></foo></valid>
+<invalid><foo/></invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</correct>
+<valid><foo><bar/></foo></valid>
+<invalid><foo/></invalid>
+</testCase>
+<testCase>
+<section>4.12</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <element name="bar">
+ <empty/>
+ </element>
+ </choice>
+</element>
+</correct>
+<valid><foo><bar/></foo></valid>
+<invalid><foo/></invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.13</section>
+<testCase>
+<section>4.13</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <mixed>
+ <element name="bar">
+ <empty/>
+ </element>
+ </mixed>
+</element>
+</correct>
+<valid><foo>x<bar/></foo></valid>
+<valid><foo><bar/></foo></valid>
+<valid><foo><bar/>x</foo></valid>
+<valid><foo>x<bar/>y</foo></valid>
+<invalid><foo/></invalid>
+<invalid><foo><bar/><bar/></foo></invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.14</section>
+<testCase>
+<section>4.14</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <element name="bar">
+ <empty/>
+ </element>
+ </optional>
+</element>
+</correct>
+<valid><foo><bar/></foo></valid>
+<valid><foo/></valid>
+<invalid><foo>x<bar/></foo></invalid>
+<invalid><foo><bar/><bar/></foo></invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.15</section>
+<testCase>
+<section>4.15</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </zeroOrMore>
+</element>
+</correct>
+<valid><foo><bar/></foo></valid>
+<valid><foo/></valid>
+<invalid><foo>x<bar/></foo></invalid>
+<invalid><foo><baz/></foo></invalid>
+<valid><foo><bar/><bar/></foo></valid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.16</section>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element>
+ <anyName>
+ <except>
+ <anyName/>
+ </except>
+ </anyName>
+ <empty/>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element>
+ <anyName>
+ <except>
+ <choice>
+ <anyName/>
+ <name>foo</name>
+ </choice>
+ </except>
+ </anyName>
+ <empty/>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element>
+ <nsName ns="">
+ <except>
+ <nsName ns=""/>
+ </except>
+ </nsName>
+ <empty/>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element>
+ <nsName ns="">
+ <except>
+ <choice>
+ <nsName ns=""/>
+ <name>foo</name>
+ </choice>
+ </except>
+ </nsName>
+ <empty/>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element>
+ <nsName ns="">
+ <except>
+ <anyName/>
+ </except>
+ </nsName>
+ <empty/>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element>
+ <nsName ns="">
+ <except>
+ <choice>
+ <anyName/>
+ <name>foo</name>
+ </choice>
+ </except>
+ </nsName>
+ <empty/>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<documentation>Tests that 4.16 is before 4.20.</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <zeroOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <anyName/>
+ </except>
+ </anyName>
+ <text/>
+ </attribute>
+ <notAllowed/>
+ </zeroOrMore>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<documentation>Tests that 4.16 is before removal of unreachable definitions.</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <empty/>
+ </element>
+</start>
+<define name="bar">
+ <element>
+ <anyName>
+ <except>
+ <anyName/>
+ </except>
+ </anyName>
+ <empty/>
+ </element>
+</define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="xmlns">
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<correct>
+<element name="xmlns" xmlns="http://relaxng.org/ns/structure/1.0">
+ <empty/>
+</element>
+</correct>
+<valid><xmlns/></valid>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name=" xmlns">
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <notAllowed/>
+ <attribute name="xmlns">
+ <text/>
+ </attribute>
+ </optional>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+ <define name="foo">
+ <attribute name="xmlns">
+ <text/>
+ </attribute>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="xmlns" ns="">
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute>
+ <choice>
+ <name ns="">xmlns</name>
+ <name>foo</name>
+ </choice>
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute>
+ <name ns="">xmlns</name>
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute>
+ <name>xmlns</name>
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute>
+ <name>
+ xmlns
+ </name>
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute>
+ <choice>
+ <name>foo</name>
+ <name ns="">xmlns</name>
+ </choice>
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <name>xmlns</name>
+ </except>
+ </anyName>
+ <text/>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <nsName ns="">
+ <except>
+ <name>xmlns</name>
+ </except>
+ </nsName>
+ <text/>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute ns="http://www.w3.org/2000/xmlns" name="bar">
+ <text/>
+ </attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.w3.org/2000/xmlns">
+ <empty/>
+</element>
+</correct>
+<valid><foo xmlns="http://www.w3.org/2000/xmlns"/></valid>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="token">
+ <param name="minLength">2</param>
+ </data>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="tok"/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="tok"/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <notAllowed/>
+ <data type="token">
+ <param name="minLength">2</param>
+ </data>
+ </optional>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <notAllowed/>
+ <data type="tok"/>
+ </optional>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <notAllowed/>
+ <value type="tok"/>
+ </optional>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <empty/>
+ </element>
+</start>
+<define name="foo">
+ <data type="token">
+ <param name="minLength">2</param>
+ </data>
+</define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <empty/>
+ </element>
+</start>
+<define name="foo">
+ <data type="tok"/>
+</define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.16</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <empty/>
+ </element>
+</start>
+<define name="foo">
+ <value type="tok"/>
+</define>
+</grammar>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.17</section>
+<testCase>
+<section>4.17</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <ref name="x"/>
+</start>
+<define name="x">
+ <element name="foo1">
+ <empty/>
+ </element>
+</define>
+<define name="x" combine="choice">
+ <element name="foo2">
+ <empty/>
+ </element>
+</define>
+<define name="x">
+ <element name="foo3">
+ <empty/>
+ </element>
+</define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.17</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start name="x">
+ <element name="foo1">
+ <empty/>
+ </element>
+</start>
+<start name="x" combine="choice">
+ <element name="foo2">
+ <empty/>
+ </element>
+</start>
+<start name="x">
+ <element name="foo3">
+ <empty/>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.17</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <ref name="x"/>
+</start>
+<define name="x">
+ <element name="foo1">
+ <empty/>
+ </element>
+</define>
+<define name="x">
+ <element name="foo2">
+ <empty/>
+ </element>
+</define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.17</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start name="x">
+ <element name="foo1">
+ <empty/>
+ </element>
+</start>
+<start name="x">
+ <element name="foo2">
+ <empty/>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.17</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <ref name="x"/>
+</start>
+<define name="x" combine="choice">
+ <element name="foo1">
+ <empty/>
+ </element>
+</define>
+<define name="x" combine="choice">
+ <element name="foo2">
+ <empty/>
+ </element>
+</define>
+<define name="x">
+ <element name="foo3">
+ <empty/>
+ </element>
+</define>
+</grammar>
+</correct>
+<valid>
+<foo1/>
+</valid>
+<valid>
+<foo2/>
+</valid>
+<valid>
+<foo3/>
+</valid>
+<invalid>
+<foo4/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.17</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start combine="choice">
+ <element name="foo1">
+ <empty/>
+ </element>
+</start>
+<start combine="choice">
+ <element name="foo2">
+ <empty/>
+ </element>
+</start>
+<start>
+ <element name="foo3">
+ <empty/>
+ </element>
+</start>
+</grammar>
+</correct>
+<valid>
+<foo1/>
+</valid>
+<valid>
+<foo2/>
+</valid>
+<valid>
+<foo3/>
+</valid>
+<invalid>
+<foo4/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.17</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <ref name="x"/>
+ </element>
+</start>
+<define name="x" combine="choice">
+ <element name="bar1">
+ <empty/>
+ </element>
+</define>
+<define name="x">
+ <element name="bar2">
+ <empty/>
+ </element>
+</define>
+<define name="x" combine="interleave">
+ <element name="bar3">
+ <empty/>
+ </element>
+</define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.17</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+<grammar>
+<start name="x" combine="choice">
+ <element name="bar1">
+ <empty/>
+ </element>
+</start>
+<start name="x">
+ <element name="bar2">
+ <empty/>
+ </element>
+</start>
+<start name="x" combine="interleave">
+ <element name="bar3">
+ <empty/>
+ </element>
+</start>
+</grammar>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.17</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <ref name="x"/>
+ </element>
+</start>
+<define name="x" combine="interleave">
+ <element name="bar1">
+ <empty/>
+ </element>
+</define>
+<define name="x" combine="interleave">
+ <element name="bar2">
+ <empty/>
+ </element>
+</define>
+<define name="x">
+ <element name="bar3">
+ <empty/>
+ </element>
+</define>
+</grammar>
+</correct>
+<valid>
+<foo><bar1/><bar2/><bar3/></foo>
+</valid>
+<valid>
+<foo><bar1/><bar3/><bar2/></foo>
+</valid>
+<valid>
+<foo><bar2/><bar3/><bar1/></foo>
+</valid>
+<invalid>
+<foo><bar2/><bar3/><bar1/><bar2/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.17</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+<grammar>
+<start combine="interleave">
+ <element name="bar1">
+ <empty/>
+ </element>
+</start>
+<start>
+ <element name="bar2">
+ <empty/>
+ </element>
+</start>
+<start combine="interleave">
+ <element name="bar3">
+ <empty/>
+ </element>
+</start>
+</grammar>
+</element>
+</correct>
+<valid>
+<foo><bar1/><bar2/><bar3/></foo>
+</valid>
+<valid>
+<foo><bar1/><bar3/><bar2/></foo>
+</valid>
+<valid>
+<foo><bar2/><bar3/><bar1/></foo>
+</valid>
+<invalid>
+<foo><bar2/><bar3/><bar1/><bar2/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>4.17</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <ref name="x"/>
+ </element>
+</start>
+<define name="x">
+ <element name="bar1">
+ <empty/>
+ </element>
+</define>
+<define name="x" combine="interleave">
+ <element name="bar2">
+ <empty/>
+ </element>
+</define>
+<define name="x">
+ <element name="bar3">
+ <empty/>
+ </element>
+</define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.17</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+<grammar>
+<start name="x">
+ <element name="bar1">
+ <empty/>
+ </element>
+</start>
+<start name="x" combine="interleave">
+ <element name="bar2">
+ <empty/>
+ </element>
+</start>
+<start name="x">
+ <element name="bar3">
+ <empty/>
+ </element>
+</start>
+</grammar>
+</element>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.18</section>
+<testCase>
+<section>4.18</section>
+<documentation>grammar must have a start</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<documentation>4.17 is before 4.18</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+ <define name="bar">
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+ </grammar>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<documentation>4.17 is before 4.19</documentation>
+<incorrect>
+<choice xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="foo">
+ <empty/>
+ </element>
+ <group>
+ <notAllowed/>
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+ </grammar>
+ </group>
+</choice>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<documentation>every ref must have a def</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo"/>
+ </start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<documentation>4.17 is before 4.18</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+ <define name="foo">
+ <ref name="bar"/>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<documentation>4.17 is before 4.19</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <choice>
+ <element name="foo">
+ <empty/>
+ </element>
+ <group>
+ <notAllowed/>
+ <ref name="foo"/>
+ </group>
+ </choice>
+ </start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<documentation>every parentRef must have a def</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <parentRef name="foo"/>
+ </start>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+ </grammar>
+ </start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<documentation>4.17 is before 4.18</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+ <define name="bar">
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <parentRef name="foo"/>
+ </start>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+ </grammar>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<documentation>4.17 is before 4.19</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <choice>
+ <element name="foo">
+ <empty/>
+ </element>
+ <group>
+ <notAllowed/>
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <parentRef name="foo"/>
+ </start>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+ </grammar>
+ </group>
+ </choice>
+ </start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo"/>
+ </start>
+ <define name="foo">
+ <choice>
+ <element name="foo">
+ <empty/>
+ </element>
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <parentRef name="foo"/>
+ </start>
+ </grammar>
+ </choice>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.18</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo"/>
+ </start>
+ <define name="foo">
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo"/>
+ </start>
+ <define name="foo">
+ <element name="foo">
+ <empty/>
+ </element>
+ </define>
+ </grammar>
+ </define>
+</grammar>
+</correct>
+<valid><foo/></valid>
+</testCase>
+<testCase>
+<section>4.18</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <grammar>
+ <start>
+ <ref name="foo"/>
+ </start>
+ <define name="foo">
+ <element name="innerFoo">
+ <parentRef name="foo"/>
+ </element>
+ </define>
+ </grammar>
+ </start>
+ <define name="foo">
+ <element name="outerFoo">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid><innerFoo><outerFoo/></innerFoo></valid>
+<invalid><outerFoo/></invalid>
+</testCase>
+<testCase>
+<section>4.18</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo"/>
+ </start>
+ <define name="foo">
+ <element name="outerFoo">
+ <grammar>
+ <start>
+ <ref name="foo"/>
+ </start>
+ <define name="foo">
+ <element name="innerFoo">
+ <empty/>
+ </element>
+ </define>
+ </grammar>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid><outerFoo><innerFoo/></outerFoo></valid>
+<invalid><innerFoo/></invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>4.19</section>
+<testCase>
+<section>4.19</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <ref name="bar"/>
+ </element>
+ </start>
+ <define name="bar">
+ <optional>
+ <element name="bar">
+ <empty/>
+ </element>
+ <ref name="bar"/>
+ </optional>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>4.19</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <ref name="bar"/>
+ </element>
+ </start>
+ <define name="bar">
+ <element name="bar">
+ <optional>
+ <ref name="bar"/>
+ </optional>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid>
+<foo><bar/></foo>
+</valid>
+<valid>
+<foo><bar><bar/></bar></foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<section>4.19</section>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <empty/>
+ </element>
+ </start>
+ <define name="bar">
+ <ref name="bar"/>
+ </define>
+</grammar>
+</correct>
+<valid><foo/></valid>
+</testCase>
+<testCase>
+<section>4.19</section>
+<section>4.20</section>
+<documentation>Tests that recursion detection happens before
+normalization of notAllowed.</documentation>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <choice>
+ <element name="foo">
+ <empty/>
+ </element>
+ <group>
+ <notAllowed/>
+ <ref name="bar"/>
+ </group>
+ </choice>
+ </start>
+ <define name="bar">
+ <element name="bar">
+ <empty/>
+ </element>
+ <optional>
+ <ref name="bar"/>
+ </optional>
+ </define>
+</grammar>
+</incorrect>
+</testCase>
+</testSuite>
+</testSuite>
+<testSuite>
+<section>6</section>
+<testSuite>
+<section>6.1</section>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <anyName/>
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+</testCase>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <anyName>
+ <except>
+ <name ns="">foo</name>
+ </except>
+ </anyName>
+ <empty/>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+<valid>
+<bar/>
+</valid>
+</testCase>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ </except>
+ </anyName>
+ <empty/>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+</testCase>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <nsName ns=""/>
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<foo xmlns="http://www.example.com"/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <nsName ns="http://www.example.com"/>
+ <empty/>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo xmlns="HTTP://www.example.com"/>
+</invalid>
+<invalid>
+<foo xmlns="http://www.example.com/"/>
+</invalid>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+</testCase>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <nsName ns="http://www.example.com">
+ <except>
+ <name ns="http://www.example.com">foo</name>
+ </except>
+ </nsName>
+ <empty/>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo xmlns="http://www.example.com"/>
+</invalid>
+<valid>
+<bar xmlns="http://www.example.com"/>
+</valid>
+</testCase>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <nsName ns="http://www.example.com">
+ <except>
+ <name ns="">foo</name>
+ </except>
+ </nsName>
+ <empty/>
+</element>
+</correct>
+<invalid>
+<bar/>
+</invalid>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+<valid>
+<bar xmlns="http://www.example.com"/>
+</valid>
+</testCase>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <name ns="http://www.example.com">foo</name>
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo xmlns="http://www.example.com"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<bar xmlns="http://www.example.com"/>
+</invalid>
+<invalid>
+<foo xmlns="http://www.example.org"/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <name ns="">foo</name>
+ <empty/>
+</element>
+</correct>
+<invalid>
+<foo xmlns="http://www.example.com"/>
+</invalid>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<bar xmlns="http://www.example.com"/>
+</invalid>
+<invalid>
+<bar/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.1</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <name ns="">foo</name>
+ <name ns="">bar</name>
+ </choice>
+ <empty/>
+</element>
+</correct>
+<invalid>
+<baz/>
+</invalid>
+<valid>
+<foo/>
+</valid>
+<valid>
+<bar/>
+</valid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2</section>
+<testSuite>
+<section>6.2.1</section>
+<testCase>
+<section>6.2.1</section>
+<correct>
+<choice xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="foo">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+</choice>
+</correct>
+<valid>
+<foo/>
+</valid>
+<valid>
+<bar/>
+</valid>
+<invalid>
+<baz/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.1</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <group>
+ <element name="bar1">
+ <empty/>
+ </element>
+ <element name="bar2">
+ <empty/>
+ </element>
+ </group>
+ <group>
+ <element name="bar1">
+ <empty/>
+ </element>
+ <element name="bar3">
+ <empty/>
+ </element>
+ </group>
+ </choice>
+</element>
+</correct>
+<valid>
+<foo><bar1/><bar2/></foo>
+</valid>
+<valid>
+<foo><bar1/><bar3/></foo>
+</valid>
+<invalid>
+<foo><bar1/></foo>
+</invalid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo><bar2/></foo>
+</invalid>
+<invalid>
+<foo><bar3/></foo>
+</invalid>
+<invalid>
+<foo><bar1/><bar2/><bar3/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.1</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <group>
+ <attribute name="bar1">
+ <text/>
+ </attribute>
+ <attribute name="bar2">
+ <text/>
+ </attribute>
+ </group>
+ <group>
+ <attribute name="bar1">
+ <text/>
+ </attribute>
+ <attribute name="bar3">
+ <text/>
+ </attribute>
+ </group>
+ </choice>
+</element>
+</correct>
+<valid>
+<foo bar1="x" bar2="x"/>
+</valid>
+<valid>
+<foo bar1="x" bar3="x"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo bar1="x"/>
+</invalid>
+<invalid>
+<foo bar2="x"/>
+</invalid>
+<invalid>
+<foo bar3="x"/>
+</invalid>
+<invalid>
+<foo bar1="x" bar2="x" bar3="x"/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.1</section>
+<correct>
+<choice xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="foo">
+ <element name="bar">
+ <empty/>
+ </element>
+ </element>
+ <element name="foo">
+ <element name="baz">
+ <empty/>
+ </element>
+ </element>
+</choice>
+</correct>
+<valid>
+<foo><bar/></foo>
+</valid>
+<valid>
+<foo><baz/></foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo><foo/></foo>
+</invalid>
+<invalid>
+<bar/>
+</invalid>
+<invalid>
+<fobaz/>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2.2</section>
+<testCase>
+<section>6.2.2</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="baz">
+ <empty/>
+ </element>
+ </group>
+</element>
+</correct>
+<valid>
+<foo><bar/><baz/></foo>
+</valid>
+<invalid>
+<foo><baz/><bar/></foo>
+</invalid>
+<invalid>
+<foo><bar/><baz/><bar/><baz/></foo>
+</invalid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo><baz/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.2</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <attribute name="bar">
+ <text/>
+ </attribute>
+ <attribute name="baz">
+ <text/>
+ </attribute>
+ </group>
+</element>
+</correct>
+<valid>
+<foo bar="x" baz="x"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.2</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <attribute name="bar">
+ <text/>
+ </attribute>
+ <attribute name="baz">
+ <text/>
+ </attribute>
+ </group>
+</element>
+</correct>
+<valid>
+<foo bar="x" baz="x"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo bar="x"/>
+</invalid>
+<invalid>
+<foo baz="x"/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.2</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <attribute name="baz">
+ <text/>
+ </attribute>
+ <attribute name="bar">
+ <text/>
+ </attribute>
+ </group>
+</element>
+</correct>
+<valid>
+<foo bar="x" baz="x"/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo bar="x"/>
+</invalid>
+<invalid>
+<foo baz="x"/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.2</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <attribute name="bar">
+ <text/>
+ </attribute>
+ <element name="baz">
+ <empty/>
+ </element>
+ </group>
+</element>
+</correct>
+<valid>
+<foo bar="x"><baz/></foo>
+</valid>
+<invalid>
+<foo><baz/></foo>
+</invalid>
+<invalid>
+<foo bar="x"/>
+</invalid>
+<invalid>
+<foo baz="x"><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.2</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <element name="baz">
+ <empty/>
+ </element>
+ <attribute name="bar">
+ <text/>
+ </attribute>
+ </group>
+</element>
+</correct>
+<valid>
+<foo bar="x"><baz/></foo>
+</valid>
+<invalid>
+<foo><baz/></foo>
+</invalid>
+<invalid>
+<foo bar="x"/>
+</invalid>
+<invalid>
+<foo baz="x"><bar/></foo>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2.3</section>
+<testCase>
+<section>6.2.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+<valid>
+<foo> </foo>
+</valid>
+<valid>
+<foo>
+
+
+</foo>
+</valid>
+<valid>
+<foo>
+<?target data?>
+<?target data?>
+<?target data?>
+<?target data?>
+</foo>
+</valid>
+<invalid>
+<foo>x</foo>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo bar="x"/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar">
+ <empty/>
+ </attribute>
+</element>
+</correct>
+<valid><foo bar=""/></valid>
+<valid><foo bar=" "/></valid>
+<invalid><foo bar="x"/></invalid>
+</testCase>
+<testCase>
+<section>6.2.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <list>
+ <empty/>
+ </list>
+</element>
+</correct>
+<valid><foo/></valid>
+<valid><foo> </foo></valid>
+<invalid><foo>x</foo></invalid>
+<invalid><foo><bar/></foo></invalid>
+<invalid><foo bar=""/></invalid>
+</testCase>
+<testCase>
+<section>6.2.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar">
+ <list>
+ <empty/>
+ </list>
+ </attribute>
+</element>
+</correct>
+<valid><foo bar=""/></valid>
+<valid><foo bar=" "/></valid>
+<invalid><foo bar="x"/></invalid>
+</testCase>
+<testCase>
+<section>6.2.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <element name="bar">
+ <empty/>
+ </element>
+ <choice>
+ <empty/>
+ <element name="baz">
+ <empty/>
+ </element>
+ </choice>
+ </group>
+</element>
+</correct>
+<valid>
+<foo><bar/><baz/></foo>
+</valid>
+<valid>
+<foo><bar/></foo>
+</valid>
+<invalid>
+<foo></foo>
+</invalid>
+<invalid>
+<foo><bar/><baz/><baz/></foo>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <empty/>
+ <attribute name="bar">
+ <text/>
+ </attribute>
+ </choice>
+</element>
+</correct>
+<valid>
+<foo bar="x"/>
+</valid>
+<valid>
+<foo/>
+</valid>
+<invalid>
+<foo baz="x"/>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2.4</section>
+<testCase>
+<section>6.2.4</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <text/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+<valid>
+<foo> </foo>
+</valid>
+<valid>
+<foo>x</foo>
+</valid>
+<valid>
+<foo>
+x
+<?target data?>
+y
+</foo>
+</valid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.4</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <text/>
+ <element name="bar">
+ <empty/>
+ </element>
+ </group>
+</element>
+</correct>
+<valid>
+<foo><bar/></foo>
+</valid>
+<valid>
+<foo>
+<bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+x
+<bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+x
+<?target data?>
+y
+<bar/></foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo><bar/>x</foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.4</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <element name="bar">
+ <empty/>
+ </element>
+ <text/>
+ </group>
+</element>
+</correct>
+<valid>
+<foo><bar/></foo>
+</valid>
+<valid>
+<foo>
+<bar/>
+</foo>
+</valid>
+<invalid>
+<foo>
+x
+<bar/>
+</foo>
+</invalid>
+<valid>
+<foo>
+<bar/>
+x
+<?target data?>
+y
+</foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo><bar/>x</foo>
+</valid>
+</testCase>
+<testCase>
+<section>6.2.4</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <text/>
+ </interleave>
+</element>
+</correct>
+<valid>
+<foo><bar/></foo>
+</valid>
+<valid>
+<foo>
+<bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+x
+<bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+<bar/>
+x
+<?target data?>
+y
+</foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo><bar/>x</foo>
+</valid>
+<valid>
+<foo>x<bar/>x</foo>
+</valid>
+<invalid>
+<foo>x<bar/>x<bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.4</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar">
+ <text/>
+ </attribute>
+</element>
+</correct>
+<valid>
+<foo bar=""/>
+</valid>
+<valid>
+<foo bar="x"/>
+</valid>
+<valid>
+<foo bar=" "/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo><bar/>x<bar/></foo>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2.5</section>
+<testCase>
+<section>6.2.5</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </oneOrMore>
+</element>
+</correct>
+<valid>
+<foo><bar/></foo>
+</valid>
+<valid>
+<foo><bar/><bar/></foo>
+</valid>
+<valid>
+<foo><bar/><bar/><bar/></foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.5</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <group>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </group>
+ </oneOrMore>
+</element>
+</correct>
+<valid>
+<foo><bar/><bar/></foo>
+</valid>
+<valid>
+<foo><bar/><bar/><bar/><bar/></foo>
+</valid>
+<valid>
+<foo><bar/><bar/><bar/><bar/><bar/><bar/></foo>
+</valid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo><bar/><bar/><bar/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.5</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <nsName ns=""/>
+ <text/>
+ </attribute>
+ </oneOrMore>
+</element>
+</correct>
+<valid>
+<foo x=""/>
+</valid>
+<valid>
+<foo x="" y=""/>
+</valid>
+<valid>
+<foo x="" y="" z=""/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo xmlns:ns="http://www.example.com" ns:x=""/>
+</invalid>
+<invalid>
+<foo x="" xmlns:ns="http://www.example.com" ns:x=""/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.5</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <choice>
+ <attribute name="bar">
+ <text/>
+ </attribute>
+ <element name="bar">
+ <text/>
+ </element>
+ </choice>
+ </oneOrMore>
+</element>
+</correct>
+<valid>
+<foo bar=""><bar/><bar/></foo>
+</valid>
+<valid>
+<foo><bar/></foo>
+</valid>
+<valid>
+<foo bar=""/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2.6</section>
+<testCase>
+<section>6.2.6</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="baz">
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</correct>
+<valid>
+<foo><bar/><baz/></foo>
+</valid>
+<valid>
+<foo><baz/><bar/></foo>
+</valid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo><baz/></foo>
+</invalid>
+<invalid>
+<foo><bar/><bar/></foo>
+</invalid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.6</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <group>
+ <element name="bar1">
+ <empty/>
+ </element>
+ <element name="bar2">
+ <empty/>
+ </element>
+ </group>
+ <element name="baz">
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</correct>
+<valid>
+<foo><baz/><bar1/><bar2/></foo>
+</valid>
+<valid>
+<foo><bar1/><baz/><bar2/></foo>
+</valid>
+<valid>
+<foo><bar1/><bar2/><baz/></foo>
+</valid>
+<invalid>
+<foo><baz/><bar2/><bar1/></foo>
+</invalid>
+<invalid>
+<foo><bar2/><bar1/></foo>
+</invalid>
+<invalid>
+<foo><baz/><bar2/><bar1/></foo>
+</invalid>
+<invalid>
+<foo><baz/><bar1/></foo>
+</invalid>
+<invalid>
+<foo><baz/><bar2/></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.6</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <attribute name="bar">
+ <text/>
+ </attribute>
+ <attribute name="baz">
+ <text/>
+ </attribute>
+ </interleave>
+</element>
+</correct>
+<valid>
+<foo bar="" baz=""/>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo bar=""/>
+</invalid>
+<invalid>
+<foo baz=""/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.6</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <attribute name="baz">
+ <text/>
+ </attribute>
+ </interleave>
+</element>
+</correct>
+<valid>
+<foo baz=""><bar/></foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo bar=""/>
+</invalid>
+<invalid>
+<foo bar=""><baz/><baz/></foo>
+</invalid>
+<invalid>
+<foo><baz/><baz/></foo>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2.7</section>
+<testCase>
+<section>6.2.7</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute>
+ <name ns="">bar</name>
+ <value type="string" datatypeLibrary="">baz</value>
+ </attribute>
+</element>
+</correct>
+<valid>
+<foo bar="baz"/>
+</valid>
+<invalid>
+<foo bar=" baz"/>
+</invalid>
+<invalid>
+<foo bar="b"/>
+</invalid>
+<invalid>
+<foo bar=""/>
+</invalid>
+<invalid>
+<foo bar=" "/>
+</invalid>
+<invalid>
+<foo><bar>baz</bar></foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.7</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute>
+ <name ns="">bar</name>
+ <choice>
+ <value type="string" datatypeLibrary="">baz</value>
+ <empty/>
+ </choice>
+ </attribute>
+</element>
+</correct>
+<valid>
+<foo bar="baz"/>
+</valid>
+<valid>
+<foo bar=""/>
+</valid>
+<invalid>
+<foo bar=" baz"/>
+</invalid>
+<invalid>
+<foo bar="b"/>
+</invalid>
+<invalid>
+<foo><bar>baz</bar></foo>
+</invalid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.7</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute>
+ <name ns="">bar</name>
+ <value type="string"/>
+ </attribute>
+</element>
+</correct>
+<valid>
+<foo bar=""/>
+</valid>
+<invalid>
+<foo bar=" "/>
+</invalid>
+<invalid>
+<foo bar="x"/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.7</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <name ns="">foo</name>
+ <group>
+ <element>
+ <name ns="">bar</name>
+ <empty/>
+ </element>
+ <element>
+ <name ns="">baz</name>
+ <empty/>
+ </element>
+ </group>
+</element>
+</correct>
+<valid>
+<foo><bar/><baz/></foo>
+</valid>
+<valid>
+<foo>
+<bar/>
+<baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+<bar/>
+&#xD;
+<baz/>
+</foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<bar><bar/><baz/></bar>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.7</section>
+<section>6.2.8</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="string"/>
+</element>
+</correct>
+<valid><foo/></valid>
+<invalid><foo> </foo></invalid>
+<invalid><foo>x</foo></invalid>
+</testCase>
+<testCase>
+<section>6.2.7</section>
+<section>6.2.8</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <value type="string"/>
+ <empty/>
+ </choice>
+</element>
+</correct>
+<valid><foo/></valid>
+<valid><foo> </foo></valid>
+<invalid><foo>x</foo></invalid>
+</testCase>
+<testCase>
+<section>6.2.7</section>
+<section>6.2.8</section>
+<section>6.2.10</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <list>
+ <data type="token"/>
+ </list>
+</element>
+</correct>
+<invalid><foo/></invalid>
+<invalid><foo> </foo></invalid>
+<valid><foo>x</foo></valid>
+<valid><foo> x </foo></valid>
+<invalid><foo>x y</foo></invalid>
+</testCase>
+<testCase>
+<section>6.2.7</section>
+<section>6.2.8</section>
+<requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <param name="minLength">2</param>
+ </data>
+</element>
+</correct>
+<valid><foo>xx</foo></valid>
+<valid><foo>xxx</foo></valid>
+<valid><foo> </foo></valid>
+<valid><foo> </foo></valid>
+<invalid><foo>x</foo></invalid>
+<invalid><foo> </foo></invalid>
+<invalid><foo/></invalid>
+</testCase>
+<testCase>
+<section>6.2.7</section>
+<section>6.2.8</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <value>x</value>
+ <element name="bar">
+ <empty/>
+ </element>
+ </choice>
+</element>
+</correct>
+<valid><foo> x </foo></valid>
+<valid><foo>x</foo></valid>
+<invalid><foo>y</foo></invalid>
+<valid><foo><bar/></foo></valid>
+<valid>
+<foo>
+<bar/>
+</foo>
+</valid>
+<invalid><foo>x<bar/></foo></invalid>
+<invalid><foo/></invalid>
+<invalid><foo><bar/>x</foo></invalid>
+</testCase>
+<testCase>
+<section>6.2.7</section>
+<section>6.2.8</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <value>x</value>
+ <mixed>
+ <element name="bar">
+ <empty/>
+ </element>
+ </mixed>
+ </choice>
+</element>
+</correct>
+<valid><foo> x </foo></valid>
+<valid><foo>x</foo></valid>
+<invalid><foo>y</foo></invalid>
+<valid><foo><bar/></foo></valid>
+<valid>
+<foo>
+<bar/>
+</foo>
+</valid>
+<valid><foo>x<bar/></foo></valid>
+<invalid><foo/></invalid>
+<valid><foo><bar/>x</foo></valid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2.8</section>
+<testCase>
+<section>6.2.8</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string">
+ <except>
+ <choice>
+ <value>x</value>
+ <value>y</value>
+ </choice>
+ </except>
+ </data>
+</element>
+</correct>
+<valid>
+<foo>xyzzy</foo>
+</valid>
+<invalid>
+<foo>x</foo>
+</invalid>
+<invalid>
+<foo>y</foo>
+</invalid>
+<invalid>
+<foo> x</foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.8</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string"/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>6.2.8</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>6.2.8</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string">
+ <except>
+ <value/>
+ </except>
+ </data>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>x</foo>
+</valid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2.9</section>
+<testCase>
+<section>6.2.9</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string" datatypeLibrary=""/>
+</element>
+</correct>
+<valid>
+<foo>xyzzy</foo>
+</valid>
+<valid>
+<foo>
+x
+<?target data?>
+y
+<?target data?>
+z
+</foo>
+</valid>
+<valid>
+<foo></foo>
+</valid>
+<valid>
+<foo>
+</foo>
+</valid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo bar=""/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="token" datatypeLibrary=""/>
+</element>
+</correct>
+<valid>
+<foo>xyzzy</foo>
+</valid>
+<valid>
+<foo>
+x
+<?target data?>
+y
+<?target data?>
+z
+</foo>
+</valid>
+<valid>
+<foo></foo>
+</valid>
+<valid>
+<foo>
+</foo>
+</valid>
+<invalid>
+<foo><bar/></foo>
+</invalid>
+<invalid>
+<foo bar=""/>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="string" datatypeLibrary="">x</value>
+</element>
+</correct>
+<valid><foo>x</foo></valid>
+<invalid><foo>xy</foo></invalid>
+<invalid><foo> x</foo></invalid>
+<invalid><foo/></invalid>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="string" datatypeLibrary=""> x</value>
+</element>
+</correct>
+<valid><foo> x</foo></valid>
+<invalid><foo> xy</foo></invalid>
+<invalid><foo>x</foo></invalid>
+<invalid><foo/></invalid>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="token" datatypeLibrary="">x</value>
+</element>
+</correct>
+<valid><foo>x</foo></valid>
+<valid><foo> x</foo></valid>
+<valid><foo>x </foo></valid>
+<valid><foo>&#xA;&#xD;&#x9;&#x20;x&#xA;&#xD;&#x9;&#x20;</foo></valid>
+<invalid><foo/></invalid>
+<invalid><foo>xy</foo></invalid>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="token" datatypeLibrary="">x y</value>
+</element>
+</correct>
+<valid><foo>x y</foo></valid>
+<valid><foo> x y </foo></valid>
+<valid><foo>x&#xA;&#xD;&#x9;&#x20;y</foo></valid>
+<invalid><foo>xy</foo></invalid>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="token" datatypeLibrary="">&#xA;&#xD;&#x9;&#x20;x&#xA;&#xD;&#x9;&#x20;</value>
+</element>
+</correct>
+<valid><foo>x</foo></valid>
+<valid><foo> x</foo></valid>
+<valid><foo>x </foo></valid>
+<valid><foo>&#xD;&#x9;x&#x20;&#xA;</foo></valid>
+<invalid><foo/></invalid>
+<invalid><foo>xy</foo></invalid>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="token" datatypeLibrary="">x&#xA;&#xD;&#x9;&#x20;y</value>
+</element>
+</correct>
+<valid><foo>x y</foo></valid>
+<valid><foo>x y</foo></valid>
+<valid><foo> x y </foo></valid>
+<valid><foo>x&#xD;&#x9;y</foo></valid>
+<valid><foo>x&#x20;&#xA;y</foo></valid>
+<invalid><foo/></invalid>
+<invalid><foo>xy</foo></invalid>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="decimal" datatypeLibrary=""/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <value type="decimal" datatypeLibrary=""/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string" datatypeLibrary="">
+ <param name="length">2</param>
+ </data>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>6.2.9</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="token" datatypeLibrary="">
+ <param name="length">2</param>
+ </data>
+</element>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<section>6.2.10</section>
+<testCase>
+<section>6.2.10</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <list>
+ <value type="string">x</value>
+ </list>
+</element>
+</correct>
+<valid>
+<foo>x</foo>
+</valid>
+<valid>
+<foo> x </foo>
+</valid>
+<invalid>
+<foo>x x</foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.10</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <list>
+ <oneOrMore>
+ <value type="string">x</value>
+ </oneOrMore>
+ </list>
+</element>
+</correct>
+<valid>
+<foo>x</foo>
+</valid>
+<valid>
+<foo> x x x x </foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo>x y</foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.10</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <list>
+ <group>
+ <value type="string">x</value>
+ <value type="string">y</value>
+ </group>
+ </list>
+</element>
+</correct>
+<valid>
+<foo>x y</foo>
+</valid>
+<valid>
+<foo>x y</foo>
+</valid>
+<valid>
+<foo>&#xD;x&#xA;y&#x9;</foo>
+</valid>
+<invalid>
+<foo>x</foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.10</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <list>
+ <group>
+ <data type="token"/>
+ <data type="token"/>
+ </group>
+ </list>
+</element>
+</correct>
+<valid>
+<foo>x y</foo>
+</valid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo>x y z</foo>
+</invalid>
+</testCase>
+<testCase>
+<section>6.2.10</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <list>
+ <value>x y</value>
+ </list>
+</element>
+</correct>
+<invalid>
+<foo>x y</foo>
+</invalid>
+</testCase>
+</testSuite>
+</testSuite>
+</testSuite>
+<testSuite>
+<section>7</section>
+<testSuite>
+<section>7.1</section>
+<testCase>
+<section>7.1.1</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <attribute name="bar">
+ <element name="baz">
+ <empty/>
+ </element>
+ </attribute>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.1</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <attribute name="bar">
+ <choice>
+ <element name="baz">
+ <empty/>
+ </element>
+ <text/>
+ </choice>
+ </attribute>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.1</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <attribute name="bar">
+ <attribute name="baz"/>
+ </attribute>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.1</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <attribute name="bar">
+ <choice>
+ <attribute name="baz"/>
+ <text/>
+ </choice>
+ </attribute>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.2</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <oneOrMore>
+ <group>
+ <attribute name="bar"/>
+ <attribute name="baz"/>
+ </group>
+ </oneOrMore>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.2</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <oneOrMore>
+ <group>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </group>
+ </oneOrMore>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.2</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <oneOrMore>
+ <choice>
+ <group>
+ <choice>
+ <attribute name="bar"/>
+ <attribute name="baz"/>
+ </choice>
+ <choice>
+ <attribute name="bar"/>
+ <attribute name="baz"/>
+ </choice>
+ </group>
+ <attribute name="bar"/>
+ </choice>
+ </oneOrMore>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.2</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <oneOrMore>
+ <interleave>
+ <attribute name="bar"/>
+ <attribute name="baz"/>
+ </interleave>
+ </oneOrMore>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.2</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <oneOrMore>
+ <interleave>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </interleave>
+ </oneOrMore>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.2</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <oneOrMore>
+ <choice>
+ <interleave>
+ <choice>
+ <attribute name="bar"/>
+ <attribute name="baz"/>
+ </choice>
+ <choice>
+ <attribute name="bar"/>
+ <attribute name="baz"/>
+ </choice>
+ </interleave>
+ <attribute name="bar"/>
+ </choice>
+ </oneOrMore>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <list>
+ <list>
+ <data type="token"/>
+ </list>
+ </list>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <list>
+ <choice>
+ <list>
+ <data type="token"/>
+ </list>
+ <data type="token"/>
+ </choice>
+ </list>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <list>
+ <element name="bar">
+ <empty/>
+ </element>
+ </list>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <list>
+ <choice>
+ <data type="token"/>
+ <element name="bar">
+ <empty/>
+ </element>
+ </choice>
+ </list>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <list>
+ <attribute name="bar">
+ <empty/>
+ </attribute>
+ </list>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <list>
+ <choice>
+ <attribute name="bar">
+ <empty/>
+ </attribute>
+ <data type="token"/>
+ </choice>
+ </list>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <list>
+ <choice>
+ <text/>
+ <data type="token"/>
+ </choice>
+ </list>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <list>
+ <interleave>
+ <value>x</value>
+ <value>y</value>
+ </interleave>
+ </list>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.3</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <list>
+ <choice>
+ <interleave>
+ <value>x</value>
+ <value>y</value>
+ </interleave>
+ <value>z</value>
+ </choice>
+ </list>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.4</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <data type="string">
+ <except>
+ <attribute name="bar"/>
+ </except>
+ </data>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.4</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <data type="string">
+ <except>
+ <element name="bar">
+ <empty/>
+ </element>
+ </except>
+ </data>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.4</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <data type="string">
+ <except>
+ <text/>
+ </except>
+ </data>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.4</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <data type="string">
+ <except>
+ <list>
+ <data type="token"/>
+ </list>
+ </except>
+ </data>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.4</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <data type="string">
+ <except>
+ <group>
+ <data type="token"/>
+ <data type="token"/>
+ </group>
+ </except>
+ </data>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.4</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <data type="string">
+ <except>
+ <interleave>
+ <data type="token"/>
+ <data type="token"/>
+ </interleave>
+ </except>
+ </data>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.4</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <data type="string">
+ <except>
+ <oneOrMore>
+ <data type="token"/>
+ </oneOrMore>
+ </except>
+ </data>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.4</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <data type="string">
+ <except>
+ <empty/>
+ </except>
+ </data>
+ </element>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <attribute name="foo"/>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <data type="string"/>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <choice>
+ <data type="string"/>
+ <element name="foo">
+ <empty/>
+ </element>
+ </choice>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <choice>
+ <value>foo</value>
+ <element name="foo">
+ <empty/>
+ </element>
+ </choice>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <text/>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <choice>
+ <text/>
+ <element name="foo">
+ <empty/>
+ </element>
+ </choice>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <list>
+ <data type="token"/>
+ </list>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <choice>
+ <element name="foo">
+ <empty/>
+ </element>
+ <list>
+ <data type="token"/>
+ </list>
+ </choice>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <group>
+ <element name="foo">
+ <empty/>
+ </element>
+ <element name="foo">
+ <empty/>
+ </element>
+ </group>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <choice>
+ <element name="foo">
+ <empty/>
+ </element>
+ <group>
+ <element name="foo">
+ <empty/>
+ </element>
+ <element name="foo">
+ <empty/>
+ </element>
+ </group>
+ </choice>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <interleave>
+ <element name="foo">
+ <empty/>
+ </element>
+ <element name="foo">
+ <empty/>
+ </element>
+ </interleave>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <choice>
+ <element name="foo">
+ <empty/>
+ </element>
+ <interleave>
+ <element name="foo">
+ <empty/>
+ </element>
+ <element name="foo">
+ <empty/>
+ </element>
+ </interleave>
+ </choice>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <oneOrMore>
+ <element name="foo">
+ <empty/>
+ </element>
+ </oneOrMore>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <choice>
+ <oneOrMore>
+ <element name="foo">
+ <empty/>
+ </element>
+ </oneOrMore>
+ <element name="foo">
+ <empty/>
+ </element>
+ </choice>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <empty/>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <choice>
+ <element name="foo">
+ <empty/>
+ </element>
+ <empty/>
+ </choice>
+</start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<section>7</section>
+<section>4.18</section>
+<documentation>Tests that constraints are post-normalization</documentation>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <grammar>
+ <start>
+ <text/>
+ </start>
+ </grammar>
+</element>
+</correct>
+<valid>
+<foo>text</foo>
+</valid>
+</testCase>
+<testCase>
+<section>7.1.5</section>
+<section>7</section>
+<section>4.18</section>
+<incorrect>
+<text xmlns="http://relaxng.org/ns/structure/1.0"/>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.1.1</section>
+<section>7</section>
+<section>4.20</section>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <optional>
+ <attribute name="bar">
+ <group>
+ <notAllowed/>
+ <attribute name="baz"/>
+ </group>
+ </attribute>
+ </optional>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>7.1.1</section>
+<section>7</section>
+<section>4.20</section>
+<documentation>The nested attribute element is normalized out because
+of the not allowed.</documentation>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <attribute name="bar">
+ <choice>
+ <text/>
+ <group>
+ <notAllowed/>
+ <attribute name="baz"/>
+ </group>
+ </choice>
+ </attribute>
+</element>
+</correct>
+<valid>
+<foo bar="baz"/>
+</valid>
+</testCase>
+<testCase>
+<section>7.1.2</section>
+<section>7</section>
+<section>4.12</section>
+<documentation>The group element is normalized out.</documentation>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <oneOrMore>
+ <group>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </group>
+ </oneOrMore>
+ </element>
+</start>
+</grammar>
+</correct>
+<valid>
+<foo xyzzy1="val1" xyzzy2="val2"/>
+</valid>
+</testCase>
+<testCase>
+<section>7.1.2</section>
+<section>7</section>
+<section>4.21</section>
+<documentation>The group element is normalized out.</documentation>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <oneOrMore>
+ <group>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <empty/>
+ </group>
+ </oneOrMore>
+ </element>
+</start>
+</grammar>
+</correct>
+<valid>
+<foo xyzzy1="val1" xyzzy2="val2"/>
+</valid>
+</testCase>
+<testCase>
+<section>7.1.2</section>
+<section>7</section>
+<section>4.20</section>
+<documentation>The attribute elements are all normalized out.</documentation>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo">
+ <optional>
+ <attribute name="a1">
+ <attribute name="a2">
+ <attribute name="a3">
+ <notAllowed/>
+ </attribute>
+ </attribute>
+ </attribute>
+ </optional>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+</testSuite>
+<testSuite>
+<section>7.2</section>
+<testCase>
+<section>7.2</section>
+<incorrect>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="foo">
+ <group>
+ <data type="token"/>
+ <data type="token"/>
+ </group>
+ </element>
+ </start>
+</grammar>
+</incorrect>
+</testCase>
+<testCase>
+<documentation>Checks that normalization of notAllowed happens
+before string sequence checking.</documentation>
+<section>7.2</section>
+<section>4.20</section>
+<correct>
+<choice xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="foo">
+ <empty/>
+ </element>
+ <group>
+ <notAllowed/>
+ <element name="bar">
+ <group>
+ <data type="token"/>
+ <data type="token"/>
+ </group>
+ </element>
+ </group>
+</choice>
+</correct>
+<valid>
+<foo/>
+</valid>
+</testCase>
+<testCase>
+<section>4.20</section>
+<section>7.2</section>
+<documentation>notAllowed in an element is not normalized</documentation>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <group>
+ <element name="bar">
+ <notAllowed/>
+ </element>
+ <data type="token"/>
+ <data type="token"/>
+ </group>
+ <element name="baz">
+ <empty/>
+ </element>
+ </choice>
+</element>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<section>7.3</section>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar"/>
+ <attribute name="bar"/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar"/>
+ <zeroOrMore>
+ <attribute name="bar"/>
+ </zeroOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute name="bar"/>
+ </oneOrMore>
+</element>
+</correct>
+<valid>
+<foo bar="xx"/>
+</valid>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <attribute name="bar"/>
+ <attribute name="bar"/>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <attribute name="bar"/>
+ </optional>
+ <optional>
+ <attribute name="bar"/>
+ </optional>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar"/>
+ <oneOrMore>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar"/>
+ <oneOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <name>baz</name>
+ </except>
+ </anyName>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar"/>
+ <oneOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <name>bar</name>
+ </except>
+ </anyName>
+ </attribute>
+ </oneOrMore>
+</element>
+</correct>
+<valid>
+<foo bar="val" xyzzy="anotherval"/>
+</valid>
+<valid>
+<foo bar="val" baz=""/>
+</valid>
+<invalid>
+<foo bar="val"/>
+</invalid>
+<invalid>
+<foo/>
+</invalid>
+<invalid>
+<foo xyzzy="val"/>
+</invalid>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar"/>
+ <oneOrMore>
+ <attribute>
+ <nsName ns=""/>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar"/>
+ <oneOrMore>
+ <attribute>
+ <nsName ns="">
+ <except>
+ <name>baz</name>
+ </except>
+ </nsName>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </oneOrMore>
+ <oneOrMore>
+ <attribute>
+ <nsName ns=""/>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </oneOrMore>
+ <oneOrMore>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <nsName ns=""/>
+ </attribute>
+ </oneOrMore>
+ <oneOrMore>
+ <attribute>
+ <nsName ns="">
+ <except>
+ <name>bar</name>
+ </except>
+ </nsName>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <nsName>
+ <except>
+ <name>foo</name>
+ </except>
+ </nsName>
+ </except>
+ </anyName>
+ </attribute>
+ </oneOrMore>
+ <attribute name="foo"/>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <nsName>
+ <except>
+ <name>foo</name>
+ </except>
+ </nsName>
+ </except>
+ </anyName>
+ </attribute>
+ </oneOrMore>
+ <oneOrMore>
+ <attribute>
+ <nsName/>
+ </attribute>
+ </oneOrMore>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <nsName>
+ <except>
+ <name>bar</name>
+ </except>
+ </nsName>
+ </except>
+ </anyName>
+ </attribute>
+ </oneOrMore>
+ <attribute name="baz"/>
+</element>
+</correct>
+<valid>
+<foo bar="xx" baz="yy"/>
+</valid>
+<invalid>
+<foo x="xx" baz="yy"/>
+</invalid>
+<valid>
+<foo xmlns:eg="http://www.example.com/" eg:x="xx" baz="yy"/>
+</valid>
+</testCase>
+<testCase>
+<section>7.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <attribute>
+ <nsName ns="http://www.example.com/1"/>
+ </attribute>
+ </oneOrMore>
+ <oneOrMore>
+ <attribute>
+ <nsName ns="http://www.example.com/2"/>
+ </attribute>
+ </oneOrMore>
+</element>
+</correct>
+<valid>
+<foo xmlns:eg1="http://www.example.com/1"
+ xmlns:eg2="http://www.example.com/2"
+ eg1:x="xx" eg2:y="yy"/>
+</valid>
+</testCase>
+<testCase>
+<section>7.3</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <attribute name="bar"/>
+ <attribute name="bar"/>
+ </choice>
+</element>
+</correct>
+<valid>
+<foo bar="xx"/>
+</valid>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="bar"/>
+ <choice>
+ <attribute name="baz"/>
+ <attribute name="bar"/>
+ </choice>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute><anyName/><text/></attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute><nsName ns =""/><text/></attribute>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.3</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute><choice><nsName ns =""/><name>foo</name></choice><text/></attribute>
+</element>
+</incorrect>
+</testCase>
+</testSuite>
+<testSuite>
+<section>7.4</section>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <interleave>
+ <element name="baz">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </interleave>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <group>
+ <element name="baz">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </group>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <group>
+ <element name="baz">
+ <empty/>
+ </element>
+ <interleave>
+ <element name="baz">
+ <empty/>
+ </element>
+ <element name="bar">
+ <empty/>
+ </element>
+ </interleave>
+ </group>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <optional>
+ <element name="bar">
+ <empty/>
+ </element>
+ </optional>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element>
+ <nsName ns=""/>
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element>
+ <anyName/>
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <notAllowed/>
+ </element>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.4</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element>
+ <anyName>
+ <except>
+ <name>bar</name>
+ </except>
+ </anyName>
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</correct>
+<valid>
+<foo><bar/><baz/></foo>
+</valid>
+</testCase>
+<testCase>
+<section>7.4</section>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <choice>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="bar">
+ <text/>
+ </element>
+ </choice>
+ <element name="baz">
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</correct>
+<valid>
+<foo><bar/><baz/></foo>
+</valid>
+</testCase>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <text/>
+ <text/>
+ </interleave>
+</element>
+</incorrect>
+</testCase>
+<testCase>
+<section>7.4</section>
+<incorrect>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <mixed>
+ <mixed>
+ <element name="bar">
+ <empty/>
+ </element>
+ </mixed>
+ <element name="baz">
+ <empty/>
+ </element>
+ </mixed>
+</element>
+</incorrect>
+</testCase>
+</testSuite>
+</testSuite>
+<testSuite>
+<documentation>Regressions</documentation>
+<testCase>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <element name="foo">
+ <choice>
+ <group>
+ <attribute name="bar"><empty/></attribute>
+ <element name="baz1"><empty/></element>
+ </group>
+ <group>
+ <attribute name="bar"><text/></attribute>
+ <element name="baz2"><empty/></element>
+ </group>
+ </choice>
+ </element>
+</start>
+</grammar>
+</correct>
+<valid>
+<foo bar=" "><baz1/></foo>
+</valid>
+</testCase>
+<testCase>
+<correct>
+<notAllowed xmlns="http://relaxng.org/ns/structure/1.0"/>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+</testCase>
+</testSuite>
+</testSuite>
diff --git a/test/relaxng/addressBook.rng b/test/relaxng/addressBook.rng
new file mode 100644
index 0000000..3d910f9
--- /dev/null
+++ b/test/relaxng/addressBook.rng
@@ -0,0 +1,24 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <element name="addressBook">
+ <zeroOrMore>
+ <element name="card">
+ <ref name="cardContent"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="cardContent">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </define>
+
+</grammar>
+
+
diff --git a/test/relaxng/comps.rng b/test/relaxng/comps.rng
new file mode 100644
index 0000000..86172c1
--- /dev/null
+++ b/test/relaxng/comps.rng
@@ -0,0 +1,177 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+<start>
+ <ref name="comps"/>
+</start>
+
+<define name="package-name">
+ <text/>
+</define>
+
+<define name="group-name">
+ <text/>
+</define>
+
+<define name="lang">
+ <text/>
+</define>
+
+<define name="description-text">
+ <text/>
+</define>
+
+<define name="comps">
+ <element name="comps">
+ <oneOrMore>
+ <ref name="group"/>
+ </oneOrMore>
+ <ref name="grouphierarchy"/>
+ <oneOrMore>
+ <ref name="package"/>
+ </oneOrMore>
+ </element>
+</define>
+
+<define name="group">
+ <element name="group">
+ <element name="id">
+ <ref name="group-name"/>
+ </element>
+ <interleave>
+ <ref name="names"/>
+ <optional>
+ <element name="default">
+ <choice>
+ <value>true</value>
+ <value>false</value>
+ </choice>
+ </element>
+ </optional>
+ <optional>
+ <ref name="descriptions"/>
+ </optional>
+ <optional>
+ <element name="uservisible">
+ <choice>
+ <value>true</value>
+ <value>false</value>
+ </choice>
+ </element>
+ </optional>
+ <optional>
+ <element name="langonly">
+ <ref name="lang"/>
+ </element>
+ </optional>
+ </interleave>
+ <optional>
+ <element name="grouplist">
+ <zeroOrMore>
+ <element name="groupreq">
+ <ref name="group-name"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="metapkg">
+ <attribute name="type">
+ <choice>
+ <value>default</value>
+ <!-- <value>mandatory</value> ?? -->
+ <value>optional</value>
+ </choice>
+ </attribute>
+ <ref name="package-name"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </optional>
+ <optional>
+ <element name="packagelist">
+ <oneOrMore>
+ <element name="packagereq">
+ <attribute name="type">
+ <choice>
+ <value>default</value>
+ <value>mandatory</value>
+ <value>optional</value>
+ </choice>
+ </attribute>
+ <optional>
+ <attribute name="requires">
+ <ref name="package-name"/>
+ </attribute>
+ </optional>
+ <ref name="package-name"/>
+ </element>
+ </oneOrMore>
+ </element>
+ </optional>
+ </element>
+</define>
+
+<define name="grouphierarchy">
+ <element name="grouphierarchy">
+ <oneOrMore>
+ <ref name="category"/>
+ </oneOrMore>
+ </element>
+</define>
+
+<define name="category">
+ <element name="category">
+ <ref name="names"/>
+ <optional>
+ <element name="subcategories">
+ <oneOrMore>
+ <element name="subcategory">
+ <ref name="package-name"/>
+ </element>
+ </oneOrMore>
+ </element>
+ </optional>
+ </element>
+</define>
+
+<define name="package">
+ <element name="package">
+ <element name="name">
+ <ref name="package-name"/>
+ </element>
+ <element name="dependencylist">
+ <zeroOrMore>
+ <element name="dependency">
+ <ref name="package-name"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </element>
+</define>
+
+<define name="names">
+ <element name="name">
+ <ref name="description-text"/>
+ </element>
+ <zeroOrMore>
+ <element name="name">
+ <attribute name="xml:lang">
+ <ref name="lang"/>
+ </attribute>
+ <ref name="description-text"/>
+ </element>
+ </zeroOrMore>
+</define>
+
+<define name="descriptions">
+ <element name="description">
+ <ref name="description-text"/>
+ </element>
+ <zeroOrMore>
+ <element name="description">
+ <attribute name="xml:lang">
+ <ref name="lang"/>
+ </attribute>
+ <ref name="description-text"/>
+ </element>
+ </zeroOrMore>
+</define>
+
+</grammar>
diff --git a/test/relaxng/comps_0.xml b/test/relaxng/comps_0.xml
new file mode 100644
index 0000000..c0168a5
--- /dev/null
+++ b/test/relaxng/comps_0.xml
@@ -0,0 +1,17870 @@
+<?xml version="1.0"?>
+<comps>
+<!-- <meta> -->
+<!-- Meta information will go here eventually -->
+<!-- </meta> -->
+ <group>
+ <id>core</id>
+ <name>Core</name>
+ <name xml:lang="cs">Jádro</name>
+ <name xml:lang="da">Grundlæggende</name>
+ <name xml:lang="de">Haupt</name>
+ <name xml:lang="es">Núcleo</name>
+ <name xml:lang="fr">Tore</name>
+ <name xml:lang="is">Lágmarkskerfi</name>
+ <name xml:lang="it">Principale</name>
+ <name xml:lang="ja">コア</name>
+ <name xml:lang="ko">핵심</name>
+ <name xml:lang="no">Kjerne</name>
+ <name xml:lang="pt">Núcleo</name>
+ <name xml:lang="ru">ОÑнова</name>
+ <name xml:lang="sv">Grundläggande</name>
+ <name xml:lang="zh_CN">核心</name>
+ <name xml:lang="zh_TW">主è¦</name>
+ <default>true</default>
+ <description>Smallest possible installation</description>
+ <description xml:lang="cs">Nejmenší možná instalace</description>
+ <description xml:lang="da">Mindst mulige installation</description>
+ <description xml:lang="de">Kleinstmögliche Installation</description>
+ <description xml:lang="es">Instalación lo más pequeña posible</description>
+ <description xml:lang="fr">Plus petite installation possible</description>
+ <description xml:lang="is">Lágmarks uppsetning</description>
+ <description xml:lang="it">Installazione minima</description>
+ <description xml:lang="ja">最低å¯èƒ½ãªã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«</description>
+ <description xml:lang="ko">가능한 최소 설치</description>
+ <description xml:lang="no">Minste mulige installering</description>
+ <description xml:lang="pt">A mais pequena instalação possível</description>
+ <description xml:lang="ru">Минимально Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°Ñ ÑƒÑтановка</description>
+ <description xml:lang="sv">Minsta möjliga installation</description>
+ <description xml:lang="zh_CN">最å°å®‰è£…</description>
+ <description xml:lang="zh_TW">最å°çš„安è£</description>
+ <uservisible>false</uservisible>
+ <packagelist>
+ <packagereq type="default">ash</packagereq>
+ <packagereq type="mandatory">basesystem</packagereq>
+ <packagereq type="mandatory">bash</packagereq>
+ <packagereq type="mandatory">bdflush</packagereq>
+ <packagereq type="mandatory">cpio</packagereq>
+ <packagereq type="mandatory">e2fsprogs</packagereq>
+ <packagereq type="mandatory">ed</packagereq>
+ <packagereq type="mandatory">file</packagereq>
+ <packagereq type="mandatory">filesystem</packagereq>
+ <packagereq type="mandatory">glibc</packagereq>
+ <packagereq type="mandatory">grub</packagereq>
+ <packagereq type="mandatory">hdparm</packagereq>
+ <packagereq type="mandatory">hotplug</packagereq>
+ <packagereq type="mandatory">initscripts</packagereq>
+ <packagereq type="mandatory">iproute</packagereq>
+ <packagereq type="mandatory">iputils</packagereq>
+ <packagereq type="mandatory">kbd</packagereq>
+ <packagereq type="mandatory">kernel</packagereq>
+ <packagereq type="mandatory">ksymoops</packagereq>
+ <packagereq type="mandatory">libgcc</packagereq>
+ <packagereq type="mandatory">libtermcap</packagereq>
+ <packagereq type="mandatory">losetup</packagereq>
+ <packagereq type="mandatory">passwd</packagereq>
+ <packagereq type="mandatory">procps</packagereq>
+ <packagereq type="mandatory">raidtools</packagereq>
+ <packagereq type="mandatory">readline</packagereq>
+ <packagereq type="mandatory">redhat-logos</packagereq>
+ <packagereq type="mandatory">redhat-release</packagereq>
+ <packagereq type="mandatory">rootfiles</packagereq>
+ <packagereq type="mandatory">rpm</packagereq>
+ <packagereq type="mandatory">setserial</packagereq>
+ <packagereq type="mandatory">setup</packagereq>
+ <packagereq type="mandatory">sysklogd</packagereq>
+ <packagereq type="mandatory">SysVinit</packagereq>
+ <packagereq type="mandatory">termcap</packagereq>
+ <packagereq type="mandatory">util-linux</packagereq>
+ <packagereq type="mandatory">vim-minimal</packagereq>
+<!-- the following are needed for anaconda post-install bits -->
+ <packagereq type="mandatory">authconfig</packagereq>
+ <packagereq type="mandatory">kudzu</packagereq>
+ <packagereq type="default">lilo</packagereq>
+ <packagereq type="mandatory">mouseconfig</packagereq>
+ <packagereq type="mandatory">shadow-utils</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>base</id>
+ <name>Base</name>
+ <name xml:lang="cs">Základ</name>
+ <name xml:lang="da">Base</name>
+ <name xml:lang="de">Basis</name>
+ <name xml:lang="es">Base</name>
+ <name xml:lang="fr">Base</name>
+ <name xml:lang="is">Grunnur</name>
+ <name xml:lang="it">Base</name>
+ <name xml:lang="ja">ベース</name>
+ <name xml:lang="ko">기준</name>
+ <name xml:lang="no">Grunnpakker</name>
+ <name xml:lang="pt">Base</name>
+ <name xml:lang="ru">ОÑнова</name>
+ <name xml:lang="sv">Bas</name>
+ <name xml:lang="zh_CN">基本</name>
+ <name xml:lang="zh_TW">基礎</name>
+ <description></description>
+ <uservisible>false</uservisible>
+ <default>true</default>
+ <grouplist>
+ <groupreq>core</groupreq>
+ <groupreq>dialup</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">acl</packagereq>
+ <packagereq type="default">anacron</packagereq>
+ <packagereq type="default">apmd</packagereq>
+ <packagereq type="mandatory">aspell</packagereq>
+ <packagereq type="mandatory">at</packagereq>
+ <packagereq type="mandatory">attr</packagereq>
+ <packagereq type="mandatory">authconfig</packagereq>
+ <packagereq type="default">autofs</packagereq>
+ <packagereq type="mandatory">bc</packagereq>
+ <packagereq type="mandatory">bind-utils</packagereq>
+ <packagereq type="mandatory">bzip2</packagereq>
+ <packagereq type="mandatory">crontabs</packagereq>
+ <packagereq type="mandatory">cyrus-sasl-plain</packagereq>
+ <packagereq type="mandatory">dhclient</packagereq>
+ <packagereq type="mandatory">diffutils</packagereq>
+ <packagereq type="mandatory">dos2unix</packagereq>
+ <packagereq type="default">dosfstools</packagereq>
+ <packagereq type="default">dump</packagereq>
+ <packagereq type="mandatory">ethtool</packagereq>
+ <packagereq type="mandatory">eject</packagereq>
+ <packagereq type="default">fbset</packagereq>
+ <packagereq type="default">finger</packagereq>
+ <packagereq type="default">ftp</packagereq>
+ <packagereq type="default">gpm</packagereq>
+ <packagereq type="default">irda-utils</packagereq>
+ <packagereq type="mandatory">kbdconfig</packagereq>
+ <packagereq type="default">kernel-pcmcia-cs</packagereq>
+ <packagereq type="optional">krb5-workstation</packagereq>
+ <packagereq type="mandatory">kudzu</packagereq>
+ <packagereq type="default">lftp</packagereq>
+ <packagereq type="mandatory">lha</packagereq>
+ <packagereq type="mandatory">logrotate</packagereq>
+ <packagereq type="mandatory">lsof</packagereq>
+ <packagereq type="default">logwatch</packagereq>
+ <packagereq type="mandatory">lokkit</packagereq>
+ <packagereq type="mandatory">mailcap</packagereq>
+ <packagereq type="mandatory">man</packagereq>
+ <packagereq type="default">man-pages</packagereq>
+ <packagereq type="mandatory">mkbootdisk</packagereq>
+ <packagereq type="mandatory">mt-st</packagereq>
+ <packagereq type="default">mtools</packagereq>
+ <packagereq type="default">mtr</packagereq>
+ <packagereq type="mandatory">netconfig</packagereq>
+ <packagereq type="default">nfs-utils</packagereq>
+ <packagereq type="default">nss_ldap</packagereq>
+ <packagereq type="mandatory">ntsysv</packagereq>
+ <packagereq type="default">openssh-clients</packagereq>
+ <packagereq type="default">pam_krb5</packagereq>
+ <packagereq type="default">pam_smb</packagereq>
+ <packagereq type="mandatory">parted</packagereq>
+ <packagereq type="default">pax</packagereq>
+ <packagereq type="mandatory">pciutils</packagereq>
+ <packagereq type="optional">pidentd</packagereq>
+ <packagereq type="mandatory">pinfo</packagereq>
+ <packagereq type="mandatory">quota</packagereq>
+ <packagereq type="default">rdate</packagereq>
+ <packagereq type="mandatory">redhat-logos</packagereq>
+ <packagereq type="default">reiserfs-utils</packagereq>
+ <packagereq type="default">rp-pppoe</packagereq>
+ <packagereq type="default">rsh</packagereq>
+ <packagereq type="mandatory">rsync</packagereq>
+ <packagereq type="default">jfsutils</packagereq>
+ <packagereq type="default">setuptool</packagereq>
+ <packagereq type="default">sendmail</packagereq>
+ <packagereq type="mandatory">slocate</packagereq>
+ <packagereq type="default">specspo</packagereq>
+ <packagereq type="mandatory">star</packagereq>
+ <packagereq type="default">sudo</packagereq>
+ <packagereq type="default">stunnel</packagereq>
+ <packagereq type="mandatory">talk</packagereq>
+ <packagereq type="default">tcp_wrappers</packagereq>
+ <packagereq type="mandatory">tcsh</packagereq>
+ <packagereq type="mandatory">telnet</packagereq>
+ <packagereq type="mandatory">traceroute</packagereq>
+ <packagereq type="mandatory">time</packagereq>
+ <packagereq type="default">timeconfig</packagereq>
+ <packagereq type="mandatory">tmpwatch</packagereq>
+ <packagereq type="default">up2date</packagereq>
+ <packagereq type="mandatory">utempter</packagereq>
+ <packagereq type="default">wireless-tools</packagereq>
+ <packagereq type="default">rdist</packagereq>
+ <packagereq type="default">tcpdump</packagereq>
+ <packagereq type="default">net-snmp-utils</packagereq>
+ <packagereq type="default">openssh-server</packagereq>
+ <packagereq type="default">wget</packagereq>
+ <packagereq type="mandatory">unix2dos</packagereq>
+ <packagereq type="mandatory">unzip</packagereq>
+ <packagereq type="mandatory">whois</packagereq>
+ <packagereq type="mandatory">vim-common</packagereq>
+ <packagereq type="mandatory">vixie-cron</packagereq>
+ <packagereq type="default">ypbind</packagereq>
+ <packagereq type="mandatory">zip</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>printing</id>
+ <uservisible>true</uservisible>
+ <default>true</default>
+ <name>Printing Support</name>
+ <name xml:lang="cs">Podpora pro tisk</name>
+ <name xml:lang="da">Udskriftsunderstøttelse</name>
+ <name xml:lang="de">Drucker-Support</name>
+ <name xml:lang="es">Soporte para la impresión</name>
+ <name xml:lang="fr">Support d&apos;impression</name>
+ <name xml:lang="is">Prentstuðningur</name>
+ <name xml:lang="it">Supporto per la stampa</name>
+ <name xml:lang="ja">å°åˆ·ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ì¸ì‡„ ì§€ì›</name>
+ <name xml:lang="no">Skriverstøtte</name>
+ <name xml:lang="pt">Suporte a Impressão</name>
+ <name xml:lang="ru">Поддержка печати</name>
+ <name xml:lang="sv">Utskriftsstöd</name>
+ <name xml:lang="zh_CN">æ‰“å°æ”¯æŒ</name>
+ <name xml:lang="zh_TW">åˆ—å°æ”¯æ´</name>
+ <description>Install these tools to enable the system to print or act as a print server.</description>
+ <description xml:lang="cs">Nainstalováním tÄ›chto nástrojů umožníte VaÅ¡emu poÄítaÄi tisknout nebo vystupovat jako tiskový server.</description>
+ <description xml:lang="da">Installér disse værktøjer for at lade systemet udskrive eller fungere som udskriftsserver.</description>
+ <description xml:lang="de">Installieren Sie diese Tools, um es dem System zu ermöglichen zu drucken oder als Drucker-Server zu funktionieren.</description>
+ <description xml:lang="es">Instalar estas herramientas para habilitar el sistema para imprimir o actuar como un servidor de impresión.</description>
+ <description xml:lang="fr">Installer ces outils pour habiliter le système à imprimer ou agir comme un serveur d&apos;impression.</description>
+ <description xml:lang="is">Settu þessa pakka inn ef þú vilt prenta eða setja upp prentþjón.</description>
+ <description xml:lang="it">Installare questi strumenti per permettere al sistema di stampare o fungere da server di stampa.</description>
+ <description xml:lang="ja">ã“れらã®ãƒ„ールをインストールã—ã¦ã‚·ã‚¹ãƒ†ãƒ ã‚’å°åˆ·å¯èƒ½ã«ã€åˆã¯ãƒ—リントサーãƒã¨ã—㦠有効ã«ã—ã¾ã™ã€‚</description>
+ <description xml:lang="ko">시스템ì—서 ì¸ì‡„ 가능하게 하거나 ì¸ì‡„ 서버로 기능하게 하시려면 ì´ ë„구를 설치하십시오.</description>
+ <description xml:lang="no">Installer disse verktøyene for å kunne bruke skriver og å kunne sette opp systemet some utskriftstjener.</description>
+ <description xml:lang="pt">Instale estas ferramentas se desejar imprimir com o computador ou que este funcione como servidor de impressão.</description>
+ <description xml:lang="ru">УÑтановите Ñти пакеты, чтобы получить возможноÑть печатать файлы или иÑпользовать ÑиÑтему как Ñервер печати.</description>
+ <description xml:lang="sv">Installera dessa verktyg för att låta systemet skriva ut eller agera utskriftsserver.</description>
+ <description xml:lang="zh_CN">安装这些工具æ¥å¯ç”¨æ‰“å°ç³»ç»Ÿæˆ–å……å½“æ‰“å°æœåŠ¡å™¨çš„ç³»ç»Ÿã€‚</description>
+ <description xml:lang="zh_TW">請安è£é€™äº›å¥—件,以啟用系統的列å°åŠŸèƒ½æˆ–ç•¶ä½œä¸€éƒ¨åˆ—å°ä¼ºæœå™¨ã€‚</description>
+ <grouplist>
+ <metapkg type="optional">cups</metapkg>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">4Suite</packagereq>
+ <packagereq type="mandatory">XFree86-font-utils</packagereq>
+ <packagereq type="mandatory">a2ps</packagereq>
+ <packagereq type="mandatory">ghostscript</packagereq>
+ <packagereq type="default">hpijs</packagereq>
+ <packagereq type="default">LPRng</packagereq>
+ <packagereq type="mandatory">ttfprint</packagereq>
+ <packagereq type="mandatory">redhat-config-printer</packagereq>
+ <packagereq type="default">redhat-switch-printer</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>cups</id>
+ <uservisible>false</uservisible>
+ <default>false</default>
+ <name>Cups</name>
+ <name xml:lang="cs">Cups</name>
+ <name xml:lang="da">CUPS</name>
+ <name xml:lang="de">Cups</name>
+ <name xml:lang="es">Cups</name>
+ <name xml:lang="fr">Coupes </name>
+ <name xml:lang="is">Cups</name>
+ <name xml:lang="it">Cups</name>
+ <name xml:lang="ja">カップ</name>
+ <name xml:lang="ko">CUPS</name>
+ <name xml:lang="no">Cups</name>
+ <name xml:lang="pt">Cups</name>
+ <name xml:lang="ru">Cups</name>
+ <name xml:lang="sv">Cups</name>
+ <name xml:lang="zh_CN">Cups</name>
+ <name xml:lang="zh_TW">Cups</name>
+ <description>Cups printing service and drivers to use it.</description>
+ <description xml:lang="cs">Tisková služba Cups a ovladaÄe pro její použití.</description>
+ <description xml:lang="da">Udskriftstjenesten CUPS og de driverrutiner som behøves for brug af den.</description>
+ <description xml:lang="de">Cups Druckerdienst und Treiber für die Verwendung.</description>
+ <description xml:lang="es">Servicios de impresión cups y drivers para usarlo.</description>
+ <description xml:lang="fr">Service d&apos;impression des coupes et lecteurs pour l&apos;utiliser. </description>
+ <description xml:lang="is">Cups prentkerfið og reklar fyrir það.</description>
+ <description xml:lang="it">Servizio di stampa Cups e relativi driver per utilizzarlo.</description>
+ <description xml:lang="ja">カップå°åˆ·ã‚µãƒ¼ãƒ“スã¨ãれを使用ã™ã‚‹ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ </description>
+ <description xml:lang="ko">CUPS ì¸ì‡„ 서비스와 ì´ ì„œë¹„ìŠ¤ë¥¼ 사용할 드ë¼ì´ë²„.</description>
+ <description xml:lang="no">Utskriftssystemet Cups med drivere.</description>
+ <description xml:lang="pt">Serviço de impressão cups e controladores para o utilizar.</description>
+ <description xml:lang="ru">Служба печати Cups и драйверы Ð´Ð»Ñ ÐµÐµ иÑпользованиÑ</description>
+ <description xml:lang="sv">Utskriftstjänsten Cups och de drivrutiner som behövs för användning av den.</description>
+ <description xml:lang="zh_CN">Cups æ‰“å°æœåŠ¡åŠæ‰€éœ€é©±åŠ¨ç¨‹åºã€‚</description>
+ <description xml:lang="zh_TW">Cups åˆ—å°æœå‹™èˆ‡è¦ä½¿ç”¨çš„驅動程å¼ã€‚</description>
+ <packagelist>
+ <packagereq type="mandatory">cups</packagereq>
+ <packagereq type="mandatory">cups-drivers</packagereq>
+ <packagereq type="default">cups-drivers-hpijs</packagereq>
+ <packagereq type="default">cups-drivers-pnm2ppa</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>base-x</id>
+ <uservisible>true</uservisible>
+ <default>true</default>
+ <name>X Window System</name>
+ <name xml:lang="cs">X Window System</name>
+ <name xml:lang="da">Vinduessystemet X</name>
+ <name xml:lang="de">X Window System</name>
+ <name xml:lang="es">Sistema X Window</name>
+ <name xml:lang="fr">Système X Window</name>
+ <name xml:lang="is">X gluggakerfið</name>
+ <name xml:lang="it">Sistema X Window</name>
+ <name xml:lang="ja">X Window System</name>
+ <name xml:lang="ko">X 윈ë„ìš° 시스템</name>
+ <name xml:lang="no">X</name>
+ <name xml:lang="pt">Sistema de Janelas X</name>
+ <name xml:lang="ru">СиÑтема X Window</name>
+ <name xml:lang="sv">Fönstersystemet X</name>
+ <name xml:lang="zh_CN">X 窗å£ç³»ç»Ÿ</name>
+ <name xml:lang="zh_TW">X 視窗系統</name>
+ <description>Install this group of packages to use the base graphical (X) user interface.</description>
+ <description xml:lang="cs">Tuto skupinu balíÄků nainstalujte pro použití grafického (X) uživatelského prostÅ™edí.</description>
+ <description xml:lang="da">Installér denne pakkegruppe for at bruge den grundlæggende grafiske brugergrænseflade (X).</description>
+ <description xml:lang="de">Installieren Sie diese Paketgruppe, um die grafische Hauptbenutzeroberfläche (X) zu verwenden.</description>
+ <description xml:lang="es">Instalar este grupo de paquetes para usar la interfaz de usuario (X) gráfica.</description>
+ <description xml:lang="fr">Installer ce groupe de paquetages pour utiliser l&apos;interface utilisateur graphique de base (X).</description>
+ <description xml:lang="is">Settu þessa pakka inn ef þú vilt nota myndræn forrit (X).</description>
+ <description xml:lang="it">Installare questo gruppo di pacchetti per usare l&apos;interfaccia utente grafica (X) di base.</description>
+ <description xml:lang="ja">ã“ã®ãƒ‘ッケージã®ã‚°ãƒ«ãƒ¼ãƒ—をインストールã—ã¦ã€åŸºæœ¬çš„グラフィカル(X)ユーザーインターフェイスを使用ã—ã¾ã™ã€‚</description>
+ <description xml:lang="ko">기본 그래픽 (X) ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 사용하시려면 ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì„¤ì¹˜í•˜ì‹­ì‹œì˜¤.</description>
+ <description xml:lang="no">Installer denne pakkegruppen for å bruke et grafisk grensesnitt (X).</description>
+ <description xml:lang="pt">Instale este grupo de pacotes para usar a interface gráfica básica de utilizador (o X).</description>
+ <description xml:lang="ru">УÑтановите Ñту группу пакетов, чтобы получить графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (X)</description>
+ <description xml:lang="sv">Installera denna paketgrupp för att använda det grundläggande grafiska gränssnittet (X).</description>
+ <description xml:lang="zh_CN">安装这组软件包æ¥ä½¿ç”¨åŸºç¡€å›¾å½¢åŒ–用户界é¢(X)。</description>
+ <description xml:lang="zh_TW">請安è£é€™å€‹å¥—件群組,以用來使用基礎的圖形 (X) 使用者介é¢ã€‚</description>
+ <grouplist>
+ <groupreq>printing</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="default">authconfig-gtk</packagereq>
+ <packagereq type="mandatory">bitmap-fonts</packagereq>
+ <packagereq type="default">firstboot</packagereq>
+ <packagereq type="mandatory">desktop-backgrounds-basic</packagereq>
+ <packagereq type="default">desktop-backgrounds-extra</packagereq>
+ <packagereq type="default">gdm</packagereq>
+ <packagereq type="default">openssh-askpass</packagereq>
+ <packagereq type="default">openssh-askpass-gnome</packagereq>
+ <packagereq type="default">redhat-config-date</packagereq>
+ <packagereq type="default">redhat-config-network</packagereq>
+ <packagereq type="default">redhat-config-services</packagereq>
+ <packagereq type="default">redhat-config-soundcard</packagereq>
+ <packagereq type="default">redhat-config-users</packagereq>
+ <packagereq type="default">redhat-config-xfree86</packagereq>
+ <packagereq type="default">redhat-logviewer</packagereq>
+ <packagereq type="default">redhat-config-printer-gui</packagereq>
+ <packagereq type="default">redhat-switch-printer-gnome</packagereq>
+ <packagereq type="default">redhat-switchmail-gnome</packagereq>
+ <packagereq type="default">redhat-config-packages</packagereq>
+ <packagereq type="default">switchdesk</packagereq>
+ <packagereq type="default">usermode-gtk</packagereq>
+ <packagereq type="mandatory">XFree86</packagereq>
+ <packagereq type="mandatory">Xtest</packagereq>
+ <packagereq type="mandatory">XFree86-font-utils</packagereq>
+ <packagereq type="mandatory">XFree86-tools</packagereq>
+ <packagereq type="mandatory">XFree86-twm</packagereq>
+ <packagereq type="mandatory">XFree86-xauth</packagereq>
+ <packagereq type="mandatory">XFree86-75dpi-fonts</packagereq>
+ <packagereq type="mandatory">XFree86-100dpi-fonts</packagereq>
+ <packagereq type="mandatory">xinitrc</packagereq>
+ <packagereq type="default">XFree86-xdm</packagereq>
+ <packagereq type="default">up2date-gnome</packagereq>
+ <packagereq type="default">rhn-applet</packagereq>
+ <packagereq type="optional">WindowMaker</packagereq>
+ <packagereq type="default">xisdnload</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>dialup</id>
+ <uservisible>false</uservisible>
+ <default>true</default>
+ <name>Dialup Networking Support</name>
+ <name xml:lang="cs">Podpora vytáÄeného pÅ™ipojení k síti</name>
+ <name xml:lang="da">Understøttelse for opkaldt opkopling</name>
+ <name xml:lang="de">Dialup Netzwerk Support</name>
+ <name xml:lang="es">Soporte de red del marcado</name>
+ <name xml:lang="fr">Support d&apos;accès distant au réseau</name>
+ <name xml:lang="is">Upphringinetsstuðningur</name>
+ <name xml:lang="it">Supporto di networking dialup</name>
+ <name xml:lang="ja">ダイヤルアップãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">전화연결 네트워킹 ì§€ì›</name>
+ <name xml:lang="no">Støtte for oppringt nettverk</name>
+ <name xml:lang="pt">Suporte a Ligações Telefónicas</name>
+ <name xml:lang="ru">Удаленный доÑтуп к Ñети</name>
+ <name xml:lang="sv">Stöd för uppringd uppkoppling</name>
+ <name xml:lang="zh_CN">拨å·è”网支æŒ</name>
+ <name xml:lang="zh_TW">撥號網路支æ´</name>
+ <packagelist>
+ <packagereq type="mandatory">ppp</packagereq>
+ <packagereq type="default">lrzsz</packagereq>
+ <packagereq type="mandatory">minicom</packagereq>
+ <packagereq type="mandatory">statserial</packagereq>
+ <packagereq type="default">wvdial</packagereq>
+ <packagereq type="default">isdn4k-utils</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>gnome-desktop</id>
+ <uservisible>true</uservisible>
+ <default>true</default>
+ <name>GNOME Desktop Environment</name>
+ <name xml:lang="cs">Prostředí pracovní plochy GNOME</name>
+ <name xml:lang="da">Skrivebordsmiljøet Gnome</name>
+ <name xml:lang="de">GNOME Desktopumgebung</name>
+ <name xml:lang="es">Entorno de escritorio de GNOME</name>
+ <name xml:lang="fr">Environnement de bureau GNOME</name>
+ <name xml:lang="is">GNOME skjáborðið</name>
+ <name xml:lang="it">Ambiente desktop di GNOME</name>
+ <name xml:lang="ja">GNOMEデスクトップ環境</name>
+ <name xml:lang="ko">GNOME ë°ìФí¬íƒ‘ 환경</name>
+ <name xml:lang="no">Skrivebordsmiljøet GNOME</name>
+ <name xml:lang="pt">Ambiente de Trabalho GNOME</name>
+ <name xml:lang="ru">Окружение рабочего Ñтола GNOME</name>
+ <name xml:lang="sv">Skrivbordsmiljön GNOME</name>
+ <name xml:lang="zh_CN">GNOME 桌é¢çŽ¯å¢ƒ</name>
+ <name xml:lang="zh_TW">GNOME 桌é¢ç’°å¢ƒ</name>
+ <description>GNOME is a powerful, graphical user interface which includes a panel, desktop, system icons, and a graphical file manager.</description>
+ <description xml:lang="cs">GNOME je výkonné grafické uživatelské prostředí, které zahrnuje panel, prostředí pracovní plochy, systémové ikony a grafického správce souborů.</description>
+ <description xml:lang="da">Gnome er en stærk grafisk brugergrænseflade som indholder et panel, et skrivebord, systemikoner og en grafisk filbehandler.</description>
+ <description xml:lang="de">GNOME ist eine leistungsstarkes grafisches Benutzerinterface mit Panel, Desktop, Systemsymbolen und grafischem Fenstermanager.</description>
+ <description xml:lang="es">GNOME es una interfaz gráfica de usuario potente que incluye un panel, un escritorio, iconos del sistema y gestores de ficheros gráficos.</description>
+ <description xml:lang="fr">GNOME est une interface utilisateur graphique puissante qui comprend un tableau de bord, un bureau, des icônes de système et un gestionnaire de fichiers graphique.</description>
+ <description xml:lang="is">GNOME er öflugt myndrænt vinnuumhverfi sem inniheldur spjald, skjáborð, kerfissmámyndir og myndrænann skráarstjóra.</description>
+ <description xml:lang="it">GNOME è una potente interfaccia grafica utente che include un pannello, un desktop, icone di sistema e un file manager grafico.</description>
+ <description xml:lang="ja">GNOMEã¯ã€ãƒ‘ãƒãƒ«ã€ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã€ã‚·ã‚¹ãƒ†ãƒ ã‚¢ã‚¤ã‚³ãƒ³ã€åŠã³ã‚°ãƒ©ãƒ•ィカル ファイルマãƒã‚¸ãƒ£ã‚’å«ã‚€å¼·åŠ›ãªã‚°ãƒ©ãƒ•ィカルユーザーインターフェイスã§ã™ã€‚</description>
+ <description xml:lang="ko">GNOMEì€ ê°•ë ¥í•œ 그래픽 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¡œì„œ 패ë„, ë°ìФí¬íƒ‘, 시스템 ì•„ì´ì½˜ê³¼ 그래픽 íŒŒì¼ ê´€ë¦¬ìž ê¸°ëŠ¥ì„ ê°–ì¶”ê³  있습니다.</description>
+ <description xml:lang="no">GNOME er et kraftig, grafisk brukergrensesnitt som inkluderer et panel, skrivebord, systemikoner og en grafisk filhåndterer</description>
+ <description xml:lang="pt">GNOME is a powerful, graphical user interface which includes a panel, desktop, system icons, and a graphical file manager.</description>
+ <description xml:lang="ru">GNOME - Ñто мощный графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, который включает панель, рабочий Ñтол, ÑиÑтемные пиктограммы и графичеÑкий менеджер файлов.</description>
+ <description xml:lang="sv">GNOME är ett kraftfullt, grafiskt användargränssnitt som innehåller en panel, ett skrivbord, systemikoner och en grafisk filhanterare.</description>
+ <description xml:lang="zh_CN">GNOME 是一个功能强大的图形化用户界é¢ï¼Œå®ƒåŒ…æ‹¬ä¸€ä¸ªé¢æ¿ã€ 桌é¢ã€ç³»ç»Ÿå›¾æ ‡ã€ä»¥åŠå›¾å½¢åŒ–文件管ç†å™¨ã€‚</description>
+ <description xml:lang="zh_TW">GNOME 是一個功能強大的圖形使用者介é¢ï¼Œå®ƒå«æœ‰ä¸€å€‹é¢æ¿ã€æ¡Œé¢ã€ç³»çµ±åœ–示 以åŠä¸€å€‹åœ–形的檔案管ç†å“¡ã€‚</description>
+ <grouplist>
+ <groupreq>base-x</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">control-center</packagereq>
+ <packagereq type="mandatory">desktop-file-utils</packagereq>
+ <packagereq type="default">eog</packagereq>
+ <packagereq type="default">file-roller</packagereq>
+ <packagereq type="default">gconf-editor</packagereq>
+ <packagereq type="default">gedit</packagereq>
+ <packagereq type="default">gftp</packagereq>
+ <packagereq type="default">gimp-print-utils</packagereq>
+ <packagereq type="mandatory">gnome-applets</packagereq>
+ <packagereq type="default">gnome-audio</packagereq>
+ <packagereq type="default">gnome-media</packagereq>
+ <packagereq type="mandatory">gnome-panel</packagereq>
+ <packagereq type="mandatory">gnome-session</packagereq>
+ <packagereq type="mandatory">gnome-spell</packagereq>
+ <packagereq type="default">gnome-system-monitor</packagereq>
+ <packagereq type="mandatory">gnome-terminal</packagereq>
+ <packagereq type="default">gnome-user-docs</packagereq>
+ <packagereq type="mandatory">gnome-utils</packagereq>
+ <packagereq type="default">gnome-vfs-extras</packagereq>
+ <packagereq type="default">gnome-vfs2-extras</packagereq>
+ <packagereq type="default">gqview</packagereq>
+ <packagereq type="default">gtk-engines</packagereq>
+ <packagereq type="default">gtk2-engines</packagereq>
+ <packagereq type="default">ggv</packagereq>
+ <packagereq type="default">mtr-gtk</packagereq>
+ <packagereq type="default">magicdev</packagereq>
+ <packagereq type="default">hwbrowser</packagereq>
+ <packagereq type="mandatory">metacity</packagereq>
+ <packagereq type="mandatory">nautilus</packagereq>
+ <packagereq type="mandatory">switchdesk-gnome</packagereq>
+ <packagereq type="mandatory">yelp</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>kde-desktop</id>
+ <name>KDE Desktop Environment</name>
+ <name xml:lang="cs">Prostředí pracovní plochy KDE</name>
+ <name xml:lang="da">Skrivebordsmiljøet KDE</name>
+ <name xml:lang="de">KDE Desktopumgebung</name>
+ <name xml:lang="es">Entorno de escritorio para KDE</name>
+ <name xml:lang="fr">Environnement de bureau KDE</name>
+ <name xml:lang="is">KDE skjáborðið</name>
+ <name xml:lang="it">Ambiente desktop KDE</name>
+ <name xml:lang="ja">KDEデスクトップ環境</name>
+ <name xml:lang="ko">KDE ë°ìФí¬íƒ‘ 환경</name>
+ <name xml:lang="no">Skrivebordsmiljøet KDE</name>
+ <name xml:lang="pt">Ambiente de Trabalho KDE</name>
+ <name xml:lang="ru">Окружение рабочего Ñтола KDE</name>
+ <name xml:lang="sv">Skrivbordsmiljön KDE</name>
+ <name xml:lang="zh_CN">KDE 桌é¢çŽ¯å¢ƒ</name>
+ <name xml:lang="zh_TW">KDE 桌é¢ç’°å¢ƒ</name>
+ <description>KDE is a powerful, graphical user interface which includes a panel, desktop, system icons, and a graphical file manager.</description>
+ <description xml:lang="cs">KDE je výkonné grafické uživatelské prostředí, které zahrnuje panel, prostředí pracovní plochy, systémové ikony a grafického správce souborů.</description>
+ <description xml:lang="da">KDE er en stærk, grafisk brugergrænseflade som indholder et panel, et skrivebord, systemikoner og en grafisk filbehandler.</description>
+ <description xml:lang="de">KDE ist eine leistungsstarkes grafisches Benutzerinterface mit Panel, Desktop, Systemsymbolen und grafischem Fenstermanager.</description>
+ <description xml:lang="es">KDE es una interfaz de usuario gráfica y potente que incluye un panel, un escritorio, iconos del sistema y un gestor gráfico de ficheros. </description>
+ <description xml:lang="fr">KDE est une interface utilisateur graphique puissante comprenant un tableau de bord, un bureau, des icônes de système et un gestionnaire de fichier graphique. </description>
+ <description xml:lang="is">KDE er öflugt myndrænt vinnuumhverfi sem inniheldur spjald, skjáborð, kerfissmámyndir og myndrænann skráarstjóra.</description>
+ <description xml:lang="it">KDE è una potente interfaccia grafica utente che include un pannello, un desktop, icone di sistema e un file manager grafico.</description>
+ <description xml:lang="ja">KDEã¯ã€ãƒ‘ãƒãƒ«ã€ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã€ã‚·ã‚¹ãƒ†ãƒ ã‚¢ã‚¤ã‚³ãƒ³åŠã³ã‚°ãƒ©ãƒ•ィカルファイル マãƒã‚¸ãƒ£ã‚’å«ã‚€å¼·åŠ›ãªã‚°ãƒ©ãƒ•ィカルユーザーインターフェイスã§ã™ã€‚</description>
+ <description xml:lang="ko">KDE는 강력한 그래픽 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¡œì„œ 패ë„, ë°ìФí¬íƒ‘, 시스템 ì•„ì´ì½˜ê³¼ 그래픽 íŒŒì¼ ê´€ë¦¬ìž ê¸°ëŠ¥ì„ ê°–ì¶”ê³  있습니다.</description>
+ <description xml:lang="no">KDE er et kraftig, grafisk brukergrensesnitt som inkluderer et panel, skrivebord, systemikoner og en grafisk filhåndterer.</description>
+ <description xml:lang="pt">O KDE é uma interface gráfica poderosa que inclui um painel, um ambiente de trabalho, os ícones de sistema e um gestor de ficheiros gráfico.</description>
+ <description xml:lang="ru">KDE Ñто мощный графичеÑкий интерфейÑ, включающий в ÑÐµÐ±Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ приложений, рабочий Ñтол, ÑиÑтемные иконки, и графичеÑкий менеджер файлов.</description>
+ <description xml:lang="sv">KDE är ett kraftfullt, grafiskt användargränssnitt som innehåller en panel, ett skrivbord, systemikoner och en grafisk filhanterare.</description>
+ <description xml:lang="zh_CN">KDE 是一个功能强大的图形化用户界é¢ã€‚å®ƒåŒ…æ‹¬é¢æ¿ã€æ¡Œé¢ã€ 系统图标ã€ä»¥åŠå›¾å½¢åŒ–文件管ç†å™¨ã€‚</description>
+ <description xml:lang="zh_TW">KDE 是一個功能強大的圖形使用者介é¢ï¼Œå®ƒå«æœ‰ä¸€å€‹é¢æ¿ã€æ¡Œé¢ã€ç³»çµ±åœ–示 以åŠä¸€å€‹åœ–形的檔案管ç†å“¡ã€‚</description>
+ <grouplist>
+ <groupreq>base-x</groupreq>
+ <groupreq>dialup</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="default">ark</packagereq>
+ <packagereq type="mandatory">arts</packagereq>
+ <packagereq type="default">autorun</packagereq>
+ <packagereq type="mandatory">fam</packagereq>
+ <packagereq type="mandatory">htdig</packagereq>
+ <packagereq type="optional">kaboodle</packagereq>
+ <packagereq type="default">kamera</packagereq>
+ <packagereq type="optional">karm</packagereq>
+ <packagereq type="mandatory">kcalc</packagereq>
+ <packagereq type="mandatory">kcharselect</packagereq>
+ <packagereq type="optional">kdeaddons-kate</packagereq>
+ <packagereq type="optional">kdeaddons-noatun</packagereq>
+ <packagereq type="optional">kdeaddons-konqueror</packagereq>
+ <packagereq type="default">kdeaddons-kicker</packagereq>
+ <packagereq type="default">kdeaddons-konqueror</packagereq>
+ <packagereq type="optional">kdeadmin</packagereq>
+ <packagereq type="mandatory">kdeartwork</packagereq>
+ <packagereq type="default">kdeartwork-locolor</packagereq>
+ <packagereq type="mandatory">kdeartwork-screensavers</packagereq>
+ <packagereq type="default">kdemultimedia-arts</packagereq>
+ <packagereq type="default">kdemultimedia-kfile</packagereq>
+ <packagereq type="mandatory">kdepasswd</packagereq>
+ <packagereq type="default">kdepim</packagereq>
+ <packagereq type="mandatory">kdebase</packagereq>
+ <packagereq type="mandatory">kdessh</packagereq>
+ <packagereq type="mandatory">kdf</packagereq>
+ <packagereq type="default">kdict</packagereq>
+ <packagereq type="default">kedit</packagereq>
+ <packagereq type="default">kdeaddons-knewsticker</packagereq>
+ <packagereq type="mandatory">kdeutils-laptop</packagereq>
+ <packagereq type="mandatory">kfloppy</packagereq>
+ <packagereq type="mandatory">kfile-pdf</packagereq>
+ <packagereq type="mandatory">kfile-png</packagereq>
+ <packagereq type="mandatory">khexedit</packagereq>
+ <packagereq type="mandatory">kjots</packagereq>
+ <packagereq type="mandatory">kljettool</packagereq>
+ <packagereq type="mandatory">klprfax</packagereq>
+ <packagereq type="mandatory">klpq</packagereq>
+ <packagereq type="mandatory">kmix</packagereq>
+ <packagereq type="default">kpf</packagereq>
+ <packagereq type="mandatory">kregexpeditor</packagereq>
+ <packagereq type="mandatory">kscd</packagereq>
+ <packagereq type="mandatory">ksnapshot</packagereq>
+ <packagereq type="mandatory">ktimer</packagereq>
+ <packagereq type="default">lisa</packagereq>
+ <packagereq type="mandatory">switchdesk-kde</packagereq>
+ <packagereq type="mandatory">xinetd</packagereq>
+ <packagereq type="default">kppp</packagereq>
+ <packagereq type="default">kpppload</packagereq>
+ <packagereq type="default">kghostview</packagereq>
+ <packagereq type="default">kdvi</packagereq>
+ <packagereq type="default">kiconedit</packagereq>
+ <packagereq type="default">kmail</packagereq>
+ <packagereq type="default">kit</packagereq>
+ <packagereq type="default">koncd</packagereq>
+ <packagereq type="default">kpaint</packagereq>
+ <packagereq type="default">kuickshow</packagereq>
+ <packagereq type="default">kview</packagereq>
+ <packagereq type="default">kviewshell</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>graphical-internet</id>
+ <name>Graphical Internet</name>
+ <name xml:lang="cs">Grafický Internet</name>
+ <name xml:lang="da">Grafisk internet</name>
+ <name xml:lang="de">Grafisches Internet</name>
+ <name xml:lang="es">Internet gráfica</name>
+ <name xml:lang="fr">Internet graphique</name>
+ <name xml:lang="is">Myndræn Internettól</name>
+ <name xml:lang="it">Internet grafico</name>
+ <name xml:lang="ja">グラフィカルインターãƒãƒƒãƒˆ</name>
+ <name xml:lang="ko">그래픽 ì¸í„°ë„·</name>
+ <name xml:lang="no">Grafisk Internet</name>
+ <name xml:lang="pt">Internet em Modo Gráfico</name>
+ <name xml:lang="ru">ГрафичеÑкие ÑредÑтва Интернет</name>
+ <name xml:lang="sv">Grafiskt Internet</name>
+ <name xml:lang="zh_CN">图形化互è”网</name>
+ <name xml:lang="zh_TW">圖形化網際網路</name>
+ <description>This group includes graphical email, Web, and chat clients.</description>
+ <description xml:lang="cs">Tato skupina obsahuje grafické klienty pro email, WWW a chat.</description>
+ <description xml:lang="da">Denne gruppe indeholder grafiske klienter for e-post, netlæsning og chat.</description>
+ <description xml:lang="de">Diese Gruppe umfasst grafische E-Mail, Web und Chat-Clients.</description>
+ <description xml:lang="es">El grupo incluye clientes gráficos de correo electrónico, Web y chat. </description>
+ <description xml:lang="fr">Ce groupe comprend le courrier électronique graphique, Web et les clients de conversation.</description>
+ <description xml:lang="is">Þessi hópur inniheldur myndræn póst, vef og spjallforrit.</description>
+ <description xml:lang="it">Questo gruppo include e-mail, Web e chat client grafici.</description>
+ <description xml:lang="ja">ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€ã‚°ãƒ©ãƒ•ィカルemailã€Webã€åŠã³ãƒãƒ£ãƒƒãƒˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒ å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ê·¸ë£¹ì—는 그래픽 ì´ë©”ì¼, 웹, 채팅 í´ë¼ì´ì–¸íŠ¸ê°€ í¬í•¨ë˜ì–´ 있습니다.</description>
+ <description xml:lang="no">Denne gruppen inkluderer grafiske epost, web og chat-klienter.</description>
+ <description xml:lang="pt">Este grupo contém clientes gráficso de email, Web e chat.</description>
+ <description xml:lang="ru">Эта группа включает графичеÑкие клиенты Ñлектронной почты, Веб и чата.</description>
+ <description xml:lang="sv">Denna grupp inkluderar grafiska klienter för e-post, webbsurfande och chatt.</description>
+ <description xml:lang="zh_CN">这组软件包包å«å›¾å½¢åŒ–电å­é‚®ä»¶ã€ä¸‡ç»´ç½‘å’ŒèŠå¤©å®¢æˆ·ã€‚</description>
+ <description xml:lang="zh_TW">這個群組包括圖形的電å­éƒµä»¶ã€ç¶²é ä»¥åŠèŠå¤©ç”¨æˆ¶ç«¯ã€‚</description>
+ <uservisible>true</uservisible>
+ <default>true</default>
+ <packagelist>
+ <packagereq type="optional">balsa</packagereq>
+ <packagereq type="default">evolution</packagereq>
+ <packagereq type="default">gaim</packagereq>
+ <packagereq type="optional">galeon</packagereq>
+ <packagereq type="optional">gnomemeeting</packagereq>
+ <packagereq type="default">mozilla</packagereq>
+ <packagereq type="default">mozilla-psm</packagereq>
+ <packagereq type="optional">mozilla-chat</packagereq>
+ <packagereq type="default">mozilla-mail</packagereq>
+ <packagereq type="optional">pan</packagereq>
+ <packagereq type="default">xchat</packagereq>
+ <packagereq type="mandatory">indexhtml</packagereq>
+ <packagereq type="optional">licq-kde</packagereq>
+ <packagereq type="optional">ksirc</packagereq>
+ <packagereq type="optional">kmail</packagereq>
+ <packagereq type="optional">korn</packagereq>
+ <packagereq type="optional">knode</packagereq>
+ <packagereq type="optional">kit</packagereq>
+ <packagereq type="optional">quanta</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>text-internet</id>
+ <name>Text-based Internet</name>
+ <name xml:lang="cs">Textový Internet</name>
+ <name xml:lang="da">Tekstbaseret internet</name>
+ <name xml:lang="de">Textbasiertes Internet</name>
+ <name xml:lang="es">Internet basada en texto</name>
+ <name xml:lang="fr">Internet basé sur texte</name>
+ <name xml:lang="is">Internet með textaskilum</name>
+ <name xml:lang="it">Internet text-based</name>
+ <name xml:lang="ja">テキストベースã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆ</name>
+ <name xml:lang="ko">í…스트-기반 ì¸í„°ë„·</name>
+ <name xml:lang="no">Tekstbaserte Internett-programmer</name>
+ <name xml:lang="pt">Internet em modo texto</name>
+ <name xml:lang="ru">ТеÑтовые ÑредÑтва Интернет</name>
+ <name xml:lang="sv">Textbaserat Internet</name>
+ <name xml:lang="zh_CN">基于文本的互è”网</name>
+ <name xml:lang="zh_TW">文字為主的網際網路</name>
+ <description>This group includes text-based email, Web, and chat clients. These applications do not require the X Window System.</description>
+ <description xml:lang="cs">Tato skupina obsahuje textové klienty pro email, WWW a chat. Tyto aplikace nepotřebují X Window System.</description>
+ <description xml:lang="da">Denne gruppe indeholder tekst-baserede klienter for e-post, netlæsning og chat. Disse programmer kræver ikke vinduessystemet X.</description>
+ <description xml:lang="de">Diese Gruppe enthält text-basierte E-Mail, Web und Chat-Clients. Diese Anwendungen benötigen das X Window System nicht.</description>
+ <description xml:lang="es">Este grupo incluye correo electrónico en forma de texto, Web y clientes de chats. Estas aplicaciones no necesitan el sistema X Window.</description>
+ <description xml:lang="fr">Ce groupe contient une messagerie électronique en modalité texte et des clients de conversation. Ces applications ne nécessitent pas le système X Window.</description>
+ <description xml:lang="is">Þessi hópur inniheldur póst, vef og spjallforrit með textaskilum. Þessi tól þurfa ekki X gluggakerfið.</description>
+ <description xml:lang="it">Questo gruppo include e-mail, Web e chat client text-based. Tali applicazioni non richiedono il sistema X Window.</description>
+ <description xml:lang="ja">ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€ãƒ†ã‚­ã‚¹ãƒˆãƒ™ãƒ¼ã‚¹ã®email, Web,åŠã³ãƒãƒ£ãƒƒãƒˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒå«ã¾ã‚Œã¦ ã„ã¾ã™ã€‚ã“れらã®ã‚¢ãƒ—リケーションã¯X Window Systemã‚’å¿…è¦ã¨ã—ã¾ã›ã‚“。</description>
+ <description xml:lang="ko">ì´ ê·¸ë¦…ì—는 í…스트-기반 ì´ë©”ì¼, 웹, 채팅 í´ë¼ì´ì–¸íŠ¸ê°€ í¬í•¨ë˜ì–´ 있습니다. X 윈ë„ìš° ì‹œìŠ¤í…œì´ ì—†ì–´ë„ ìž‘ë™í•©ë‹ˆë‹¤.</description>
+ <description xml:lang="no">Denne gruppen inneholder tekstbaserte epost, web og chat-klienter. Disse programmene trenger ikke X.</description>
+ <description xml:lang="pt">Este grupo inclui o email em modo texto, a Web e os clientes de conversação. Estas aplicações não necessitam do X Window System.</description>
+ <description xml:lang="ru">Эта группа Ñодержит текÑтовые Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñлектронной почтой, интернетом, а также чат-клиенты. ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² Ñтой группе не требуют X Window System</description>
+ <description xml:lang="sv">Denna grupp inkluderar text-baserade klienter för e-post, webbsurfande och chatt. Dessa program kräver inte fönstersystemet X.</description>
+ <description xml:lang="zh_CN">这组软件包包å«åŸºäºŽæ–‡æœ¬çš„电å­é‚®ä»¶ã€ä¸‡ç»´ç½‘ã€å’ŒèŠå¤©å®¢æˆ·çš„软件包。 这些应用程åºä¸è¦æ±‚ X 窗å£ç³»ç»Ÿã€‚</description>
+ <description xml:lang="zh_TW">這個群組包括文字為主的電å­éƒµä»¶ã€ç¶²é èˆ‡èŠå¤©ç”¨æˆ¶ç«¯ã€‚ é€™äº›æ‡‰ç”¨ç¨‹å¼ ä¸¦ä¸éœ€è¦ X 視窗系統。</description>
+ <uservisible>true</uservisible>
+ <default>true</default>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="default">fetchmail</packagereq>
+ <packagereq type="optional">epic</packagereq>
+ <packagereq type="optional">lynx</packagereq>
+ <packagereq type="default">mutt</packagereq>
+ <packagereq type="optional">ncftp</packagereq>
+ <packagereq type="optional">pine</packagereq>
+ <packagereq type="default">slrn</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>sound-and-video</id>
+ <name>Sound and Video</name>
+ <name xml:lang="cs">Zvuk a video</name>
+ <name xml:lang="da">Lyd og video</name>
+ <name xml:lang="de">Sound und Video</name>
+ <name xml:lang="es">Sonido y vídeo</name>
+ <name xml:lang="fr">Son et vidéo</name>
+ <name xml:lang="is">Hljóð og mynd</name>
+ <name xml:lang="it">Audio e video</name>
+ <name xml:lang="ja">サウンドã¨ãƒ“デオ</name>
+ <name xml:lang="ko">사운드와 비디오</name>
+ <name xml:lang="no">Lyd og bilde</name>
+ <name xml:lang="pt">Som e Video</name>
+ <name xml:lang="ru">Звук и видео</name>
+ <name xml:lang="sv">Ljud och video</name>
+ <name xml:lang="zh_CN">视频和音频</name>
+ <name xml:lang="zh_TW">音效與視訊</name>
+ <description>From CD recording to playing audio CDs and multimedia files, this package group allows you to work with sound and video on the system.</description>
+ <description xml:lang="cs">Tato skupina balíÄků Vám umožňuje pracovat se zvukem a videem od vypalování CD po pÅ™ehrávání zvukových CD a multimediálních souborů.</description>
+ <description xml:lang="da">Denne gruppe lader dig arbejde med lyd og video på systemet, med altfra cd-optagning til afspilning af lyd-cd&apos;er og multimedie-filer.</description>
+ <description xml:lang="de">Von der Aufnahme von CDs bis zum Abspielen von Audio-CDs ermöglicht Ihnen diese Paketgruppe eine optimale Nutzung der Sound- und Videofunktionen des Systems.</description>
+ <description xml:lang="es">Desde la grabación de CDs hasta la reproducción de CDs de audio y archivos multimedia, este paquete le permite trabajar con audio y video en su sistema.</description>
+ <description xml:lang="ja">CDã®éŒ²éŸ³ã‹ã‚‰ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªCDã¨ãƒžãƒ«ãƒãƒ¡ãƒ‡ã‚£ã‚¢ãƒ•ァイルã®å†ç”Ÿã¾ã§ã€ã“㮠パッケージグループã§ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®ã‚µã‚¦ãƒ³ãƒ‰ã¨ãƒ“デオを機能を使用ã§ãã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ CD ë…¹ìŒì—서 오디오 CD ë° ë©€í‹°ë¯¸ë””ì–´ íŒŒì¼ ìž¬ìƒì— ì´ë¥´ê¸°ê¹Œì§€ 다양한 사운드와 비디오 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ì‹¤ 수 있습니다.</description>
+ <description xml:lang="no">Denne pakkegruppen inneholder programmer for å spille av CDer og multimediefiler samt arbeide med lyd og bilde på systemet.</description>
+ <description xml:lang="pt">Desde a gravação de CDs até à reprodução de CDs áudio e multimédia, este\ngrupo de pacotes permite-lhe lidar com o som e o vídeo no sistema.</description>
+ <description xml:lang="ru">От запиÑи CD до Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð·Ð²ÑƒÐºÐ¾Ð²Ñ‹Ñ… диÑков и MP3, Ñта группа пакетов позволÑет работать Ñо звуком и видео в ÑиÑтеме.</description>
+ <description xml:lang="sv">Denna paketgrupp låter dig arbeta med ljud och video, vare sig det gäller cdinspelning eller att lyssna på musikskivor och multimediafiler.</description>
+ <description xml:lang="zh_CN">从光盘录制到播放音频光盘和多媒体文件,该软件包组å…许您使用系统上的音频和视频资æºã€‚</description>
+ <description xml:lang="zh_TW">從燒錄 CD 到播放音效 CD 與多媒體檔案,這個套件群組讓您å¯ä»¥åœ¨ç³»çµ±ä¸Šä½¿ç”¨éŸ³æ•ˆèˆ‡è¦–訊的功能。</description>
+ <uservisible>true</uservisible>
+ <default>true</default>
+ <grouplist>
+ <groupreq>base</groupreq>
+ <groupreq>base-x</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">aumix</packagereq>
+ <packagereq type="default">cdda2wav</packagereq>
+ <packagereq type="default">cdlabelgen</packagereq>
+ <packagereq type="default">cdp</packagereq>
+ <packagereq type="default">cdparanoia</packagereq>
+ <packagereq type="default">cdrecord</packagereq>
+ <packagereq type="default">dvdrecord</packagereq>
+ <packagereq type="optional">dvgrab</packagereq>
+ <packagereq type="default">grip</packagereq>
+ <packagereq type="default">gtoaster</packagereq>
+ <packagereq type="optional">kaboodle</packagereq>
+ <packagereq type="optional">kdeaddons-noatun</packagereq>
+ <packagereq type="optional">kmid</packagereq>
+ <packagereq type="optional">kmidi</packagereq>
+ <packagereq type="optional">koncd</packagereq>
+ <packagereq type="optional">mikmod</packagereq>
+ <packagereq type="optional">sndconfig</packagereq>
+ <packagereq type="mandatory">sox</packagereq>
+ <packagereq type="mandatory">vorbis-tools</packagereq>
+ <packagereq type="default">xawtv</packagereq>
+ <packagereq type="optional">xcdroast</packagereq>
+ <packagereq type="default">xmms</packagereq>
+ <packagereq type="optional">xmms-skins</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>graphics</id>
+ <name>Graphics</name>
+ <name xml:lang="cs">Grafika</name>
+ <name xml:lang="da">Grafik</name>
+ <name xml:lang="de">Grafik</name>
+ <name xml:lang="es">Gráficos</name>
+ <name xml:lang="fr">Graphismes</name>
+ <name xml:lang="is">Myndvinnsla</name>
+ <name xml:lang="it">Grafica</name>
+ <name xml:lang="ja">グラフィクス</name>
+ <name xml:lang="ko">그래픽</name>
+ <name xml:lang="no">Grafikk</name>
+ <name xml:lang="pt">Gráficos</name>
+ <name xml:lang="ru">Графика</name>
+ <name xml:lang="sv">Grafik</name>
+ <name xml:lang="zh_CN">图形</name>
+ <name xml:lang="zh_TW">圖形</name>
+ <description>This group includes packages to help you manipulate and scan images.</description>
+ <description xml:lang="cs">Tato skupina obsahuje balíÄky, které Vám pomohou pracovat s obrázky a skenovat je.</description>
+ <description xml:lang="da">Denne gruppe indeholder pakker som hjælper dig med at manipulere og indlæse billeder.</description>
+ <description xml:lang="de">Diese Gruppe umfasst Pakete, mit denen Sie Bilder bearbeiten und scannen können.</description>
+ <description xml:lang="es">Este grupo incluye paquetes que le permitirán manipular y escanera imágenes.</description>
+ <description xml:lang="fr">Ce groupe comprend des paquetages qui vous aident à manipuler et scanner des images. </description>
+ <description xml:lang="is">Þessi hópur inniheldur pakka sem gera þér kleyft að skanna og breyta myndum.</description>
+ <description xml:lang="it">Questo gruppo include i pacchetti per la manipolazione e la scansione delle immagini.</description>
+ <description xml:lang="ja">ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã‚¤ãƒ¡ãƒ¼ã‚¸ã®å‡¦ç†ã¨ã‚¹ã‚­ãƒ£ãƒ³ã‚’手ä¼ã†ãƒ‘ッケージãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ê·¸ë£¹ì— í¬í•¨ëœ 패키지는 ì´ë¯¸ì§€ë¥¼ 스캔, ì¡°ìž‘ ìž‘ì—…ì„ ë„와드립니다.</description>
+ <description xml:lang="no">Denne gruppen inneholder pakker for manipulering og innscanning av bilder.</description>
+ <description xml:lang="pt">Este grupo inclui pacotes que o ajudam a manipular e digitalizar imagens.</description>
+ <description xml:lang="ru">Эта группа Ñодержит Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹Ðµ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¹ и Ñканерами.</description>
+ <description xml:lang="sv">Denna grupp inkluderar paket som hjälper dig manipulera och läsa in bilder.</description>
+ <description xml:lang="zh_CN">这组软件包包括用æ¥å¸®åŠ©æ‚¨æ“作和扫æå›¾åƒçš„软件包。</description>
+ <description xml:lang="zh_TW">這個群組包括了幫助您處ç†èˆ‡æŽƒæå½±åƒçš„套件。</description>
+ <uservisible>true</uservisible>
+ <default>true</default>
+ <grouplist>
+ <groupreq>base</groupreq>
+ <groupreq>base-x</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="default">ImageMagick</packagereq>
+ <packagereq type="default">sane-frontends</packagereq>
+ <packagereq type="default">xsane</packagereq>
+ <packagereq type="default">xsane-gimp</packagereq>
+ <packagereq type="default">dia</packagereq>
+ <packagereq type="default">gimp</packagereq>
+ <packagereq type="default">gimp-data-extras</packagereq>
+ <packagereq type="default">gtkam</packagereq>
+ <packagereq type="optional">gtkam-gimp</packagereq>
+ <packagereq type="optional">kamera</packagereq>
+ <packagereq type="optional">kcoloredit</packagereq>
+ <packagereq type="optional">kiconedit</packagereq>
+ <packagereq type="optional">kooka</packagereq>
+ <packagereq type="optional">kpaint</packagereq>
+ <packagereq type="optional">kuickshow</packagereq>
+ <packagereq type="default">netpbm-progs</packagereq>
+ <packagereq type="optional">xfig</packagereq>
+ </packagelist>
+ </group>
+
+
+ <group>
+ <id>office</id>
+ <name>Office/Productivity</name>
+ <name xml:lang="cs">Kancelář/produktivita</name>
+ <name xml:lang="da">Kontorprogrammel</name>
+ <name xml:lang="de">Office/Produktivität</name>
+ <name xml:lang="es">Oficina/Productividad</name>
+ <name xml:lang="fr">Bureau/Productivité</name>
+ <name xml:lang="is">Skrifstofuforrit</name>
+ <name xml:lang="it">Office/Produttività</name>
+ <name xml:lang="ja">Office/生産性</name>
+ <name xml:lang="ko">사무/ìƒì‚°ì„±</name>
+ <name xml:lang="no">Kontor/Produktivitet</name>
+ <name xml:lang="pt">Escritório/Produtividade</name>
+ <name xml:lang="ru">ОфиÑные приложениÑ</name>
+ <name xml:lang="sv">Kontorsprogramvara</name>
+ <name xml:lang="zh_CN">办公/生产率</name>
+ <name xml:lang="zh_TW">辦公軟體/作業軟體</name>
+ <description>The applications include office suites, PDF viewers, and more.</description>
+ <description xml:lang="cs">Aplikace zahrnují kancelářské balíky, prohlížeÄe PDF atd.</description>
+ <description xml:lang="da">Programmerne inkluderer suiter med kontorprogrammel, PDF-visere, med mere.</description>
+ <description xml:lang="de">Die Anwendungen enthalten Office-Programme, PDF-Anzeigeprogramme u.v.m.</description>
+ <description xml:lang="es">Las aplicaciones incluyen los paquetes de ofimática, los visualizadores de PDF y mucho más.</description>
+ <description xml:lang="fr">Les applications comprennent des suites de bureau, des afficheurs PDF et bien plus encore.</description>
+ <description xml:lang="is">Forritin innihalda meðal annars skrifstofutól, PDF sjár og fleira.</description>
+ <description xml:lang="it">Le applicazioni includono pacchetti per l&apos;ufficio, programmi per visualizzare i PDF e altro.</description>
+ <description xml:lang="ja">アプリケーションã«ã¯ã€ã‚ªãƒ•ィスセットã€PDFビューアåŠã³ãã®ä»–ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ì‘ìš© í”„ë¡œê·¸ëž¨ì€ ì‚¬ë¬´ìš© 프로그램 모ìŒ, PDF 보기 프로그램 ë“±ì„ í¬í•¨í•©ë‹ˆë‹¤.</description>
+ <description xml:lang="no">Applikasjonene innerholder kontorstøtteprogrammer, PDV-lesere og mer.</description>
+ <description xml:lang="pt">As aplicações incluem pacotes de escritório, visualizadores de PDF e outros.</description>
+ <description xml:lang="ru">Эта группа включает в ÑÐµÐ±Ñ Ð¾Ñ„Ð¸Ñные приложениÑ: редакторы текÑта, программы Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра PDF файлов, и проч.</description>
+ <description xml:lang="sv">Programmen inkluderar sviter med kontorsprogramvara, PDF-visare, med mera.</description>
+ <description xml:lang="zh_CN">åŒ…æ‹¬çš„åº”ç”¨ç¨‹åºæœ‰åŠžå…¬å¥—ä»¶ã€PDF 查看器等等。</description>
+ <description xml:lang="zh_TW">應用程å¼åŒ…括了辦公室套è£è»Ÿé«”ã€PDF 檢視器等等。</description>
+ <uservisible>true</uservisible>
+ <default>true</default>
+ <grouplist>
+ <groupreq>base-x</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="default">openoffice</packagereq>
+ <packagereq type="default">xpdf</packagereq>
+ <packagereq type="optional">MagicPoint</packagereq>
+ <packagereq type="optional">abiword</packagereq>
+ <packagereq type="optional">ggv</packagereq>
+ <packagereq type="optional">gnumeric</packagereq>
+ <packagereq type="optional">gnucash</packagereq>
+ <packagereq type="default">mrproject</packagereq>
+ <packagereq type="optional">kdepim-pilot</packagereq>
+ <packagereq type="optional">koffice</packagereq>
+ <packagereq type="optional">kdvi</packagereq>
+ <packagereq type="optional">kghostview</packagereq>
+ <packagereq type="optional">kfax</packagereq>
+ <packagereq type="optional">tetex-xdvi</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>mail-server</id>
+ <name>Mail Server</name>
+ <name xml:lang="cs">Poštovní server</name>
+ <name xml:lang="da">Postserver</name>
+ <name xml:lang="de">Mail-Server</name>
+ <name xml:lang="es">Servidor de correo </name>
+ <name xml:lang="fr">Serveur de courrier</name>
+ <name xml:lang="is">Póstþjónn</name>
+ <name xml:lang="it">Server Mail</name>
+ <name xml:lang="ja">メールサーãƒ</name>
+ <name xml:lang="ko">ë©”ì¼ ì„œë²„</name>
+ <name xml:lang="no">Eposttjener</name>
+ <name xml:lang="pt">Servidor de Mail</name>
+ <name xml:lang="ru">Сервер Ñлектронной почты</name>
+ <name xml:lang="sv">E-postserver</name>
+ <name xml:lang="zh_CN">邮件æœåС噍</name>
+ <name xml:lang="zh_TW">郵件伺æœå™¨</name>
+ <description>These packages allow you to configure an IMAP or Postfix mail server.</description>
+ <description xml:lang="cs">Tyto balíÄky Vám umožní nakonfigurovat server IMAP nebo poÅ¡tovní server Postfix.</description>
+ <description xml:lang="da">Disse pakker lader dig konfigurere en IMAP- eller Postfix-postserver.</description>
+ <description xml:lang="de">Mit diesen Paketen können Sie einen IMAP oder Postfix Mail-Server konfigurieren.</description>
+ <description xml:lang="es">Estos paquetes le permiten configurar un servidor de correo IMAP o Postfix.</description>
+ <description xml:lang="fr">Ces paquetages vous permettent de configurer un serveur de courrier IMAP ou Postfix.</description>
+ <description xml:lang="is">Þessir pakkar gera þér kleyft að setja upp IMAP eða Postfix pósthús.</description>
+ <description xml:lang="it">Questi pacchetti consentono di configurare un server di posta IMAP o Postfix.</description>
+ <description xml:lang="ja">ã“れらã®ãƒ‘ッケージã§ã€IMAP ã‹ Postfixメールサーãƒã‚’設定ã§ãã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ íŒ¨í‚¤ì§€ëŠ” IMAPê³¼ Postfix ë©”ì¼ ì„œë²„ ì„¤ì •ì„ ë„와ì¤ë‹ˆë‹¤.</description>
+ <description xml:lang="no">Disse pakkene lar deg konfigurere en IMAP eller Postfix eposttjener.</description>
+ <description xml:lang="pt">Este pacotes permitem-lhe configurar os servidores de mail IMAP ou Postfix.</description>
+ <description xml:lang="ru">Эти пакеты позволÑÑŽÑ‚ наÑтроить почтовый Ñервер IMAP или Postfix.</description>
+ <description xml:lang="sv">Dessa paket låter dig konfigurera en IMAP- eller Postfix-epostserver.</description>
+ <description xml:lang="zh_CN">这些软件包å…许您é…ç½® IMAP 或 Postfix 邮件æœåŠ¡å™¨ã€‚</description>
+ <description xml:lang="zh_TW">這些套件讓您å¯ä»¥è¨­å®šä¸€å€‹ IMAP 或 Postfix 郵件伺æœå™¨ã€‚</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">sendmail</packagereq>
+ <packagereq type="default">imap</packagereq>
+ <packagereq type="optional">sendmail-cf</packagereq>
+ <packagereq type="optional">mailman</packagereq>
+ <packagereq type="optional">spamassassin</packagereq>
+ <packagereq type="optional">squirrelmail</packagereq>
+ <packagereq type="optional">postfix</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>network-server</id>
+ <name>Network Servers</name>
+ <name xml:lang="cs">Síťové servery</name>
+ <name xml:lang="da">Netværksservere</name>
+ <name xml:lang="de">Netzwerk-Server</name>
+ <name xml:lang="es">Servidores de red</name>
+ <name xml:lang="fr">Serveur de réseau</name>
+ <name xml:lang="is">Netþjónustur</name>
+ <name xml:lang="it">Server di rete</name>
+ <name xml:lang="ja">ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒ¼ãƒ</name>
+ <name xml:lang="ko">ë„¤íŠ¸ì›Œí¬ ì„œë²„</name>
+ <name xml:lang="no">Nettverkstjener</name>
+ <name xml:lang="pt">Servidores de Rede</name>
+ <name xml:lang="ru">Сетевые Ñерверы</name>
+ <name xml:lang="sv">Nätverksservrar</name>
+ <name xml:lang="zh_CN">网络æœåС噍</name>
+ <name xml:lang="zh_TW">網路伺æœå™¨</name>
+ <description>These packages include network-based servers such as CIPE, DHCP, and telnet.</description>
+ <description xml:lang="cs">Tyto balíÄky zahrnují síťové servery jako CIPE, DHCP a telnet.</description>
+ <description xml:lang="da">Disse pakker inkluderer netværksbaserede servere som fx CIPE, DHCP og telnet.</description>
+ <description xml:lang="de">Diese Pakete enthalten netzwerkbasierte Server wie CIPE, DHCP und telnet.</description>
+ <description xml:lang="es">Estos paquetes incluyen servidores basados en la red tales como CIPE, DHCP, y telnet.</description>
+ <description xml:lang="fr">Ces paquetages comprennent des serveurs basés sur réseau comme CIPE, DHCP et telnet.</description>
+ <description xml:lang="is">Þessir pakkar innihalda netþjónustur eins og CIPE, DHCP og telnet.</description>
+ <description xml:lang="it">Questi pacchetti includono server network-based quali CIPE, DHCP e telnet.</description>
+ <description xml:lang="ja">ã“れらã®ãƒ‘ッケージã«ã¯ã€CIPE, DHCP, ã‚„ telnetãªã©ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ™ãƒ¼ã‚¹ã®ã‚µãƒ¼ãƒãŒ å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ íŒ¨í‚¤ì§€ì—는 CIPE, DHCP, telnetê³¼ ê°™ì€ ë„¤íŠ¸ì›Œí¬-기반 서버가 í¬í•¨ë˜ì–´ 있습니다.</description>
+ <description xml:lang="no">Disse pakkene inkluderer nettverks-baserte tjenester som CIPE, DHCP og telnet.</description>
+ <description xml:lang="pt">Estes pacotes incluem servdores de rede como o CIPE, DHCP e telnet.</description>
+ <description xml:lang="ru">Эти пакеты включают в ÑÐµÐ±Ñ Ñ‚Ð°ÐºÐ¸Ðµ Ñетевые ÑервиÑÑ‹, как CIPE, DHCP и telet</description>
+ <description xml:lang="sv">Dessa paket inkluderar nätverksbaserade servrar som exempelvis CIPE, DHCP och telnet.</description>
+ <description xml:lang="zh_CN">这些软件包包括基于网络的æœåŠ¡å™¨ï¼Œä¾‹å¦‚ CIPEã€DHCPã€å’Œ telnet。</description>
+ <description xml:lang="zh_TW">這些套件包括網路為主的伺æœå™¨ï¼Œä¾‹å¦‚ CIPE, DHCP 與 telnet。</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional">amanda-server</packagereq>
+ <packagereq type="optional">am-utils</packagereq>
+ <packagereq type="default">cipe</packagereq>
+ <packagereq type="optional">dhcp</packagereq>
+ <packagereq type="default">finger-server</packagereq>
+ <packagereq type="optional">krb5-server</packagereq>
+ <packagereq type="default">pxe</packagereq>
+ <packagereq type="optional">radvd</packagereq>
+ <packagereq type="default">rsh-server</packagereq>
+ <packagereq type="default">talk-server</packagereq>
+ <packagereq type="default">telnet-server</packagereq>
+ <packagereq type="default">ypserv</packagereq>
+ <packagereq type="optional">zebra</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>news-server</id>
+ <name>News Server</name>
+ <name xml:lang="cs">News server</name>
+ <name xml:lang="da">Nyhedsgruppesserver</name>
+ <name xml:lang="de">News-Server</name>
+ <name xml:lang="es">Servidor de noticias</name>
+ <name xml:lang="fr">Serveur de news</name>
+ <name xml:lang="is">Fréttaþjónn</name>
+ <name xml:lang="it">Server news</name>
+ <name xml:lang="ja">ニュースサーãƒ</name>
+ <name xml:lang="ko">뉴스 서버</name>
+ <name xml:lang="no">News-tjenere</name>
+ <name xml:lang="pt">Servidor de News</name>
+ <name xml:lang="ru">Сервер новоÑтей</name>
+ <name xml:lang="sv">Diskussionsgruppsserver</name>
+ <name xml:lang="zh_CN">æ–°é—»æœåС噍</name>
+ <name xml:lang="zh_TW">æ–°èžä¼ºæœå™¨</name>
+ <description>This group allows you to configure the system as a news server.</description>
+ <description xml:lang="cs">Tato skupina Vám umožní nakonfigurovat poÄítaÄ jako news server.</description>
+ <description xml:lang="da">Denne gruppe lader dig konfigurere systemet som en nyhedsgruppesserver.</description>
+ <description xml:lang="de">Mit dieser Gruppe können Sie das System als News-Server konfigurieren.</description>
+ <description xml:lang="es">Este grupo le permite configurar el sistema como un servidor nuevo.</description>
+ <description xml:lang="fr">Ce groupe vous permet de configurer le système comme nouveau serveur.</description>
+ <description xml:lang="is">Þessi tól gera þér kleyft að stilla vélina sem news þjón.</description>
+ <description xml:lang="it">Questo gruppo consente di configurare il sistema come server news.</description>
+ <description xml:lang="ja">ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã§ã€ãƒ‹ãƒ¥ãƒ¼ã‚¹ã‚µãƒ¼ãƒã¨ã—ã¦ã‚·ã‚¹ãƒ†ãƒ ã‚’設定ã§ãã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ ì‹œìŠ¤í…œì„ ë‰´ìŠ¤ 서버로 설정하실 수 있습니다.</description>
+ <description xml:lang="no">Disse verktøyene lar deg kjøre en news-tjener på systemet.</description>
+ <description xml:lang="pt">Este grupo permite-lhe configurar o sistema como um servidor de notícias.</description>
+ <description xml:lang="ru">Эта группа позволÑет иÑпользовать ÑиÑтему как Ñервер новоÑтей.</description>
+ <description xml:lang="sv">Denna grupp låter dig konfigurera systemet som en diskussionsgruppsserver.</description>
+ <description xml:lang="zh_CN">这组软件包å…许您把系统é…ç½®æˆæ–°é—»æœåŠ¡å™¨ã€‚</description>
+ <description xml:lang="zh_TW">這個群組讓您å¯ä»¥è¨­å®šç³»çµ±ç‚ºä¸€éƒ¨æ–°èžä¼ºæœå™¨ã€‚</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">inn</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>smb-server</id>
+ <name>Windows File Server</name>
+ <name xml:lang="cs">Souborový server pro Windows</name>
+ <name xml:lang="da">Windows-filserver</name>
+ <name xml:lang="de">Windows Datei-Server</name>
+ <name xml:lang="es">Servidor de ficheros Windows</name>
+ <name xml:lang="fr">Serveur de fichier Windows</name>
+ <name xml:lang="is">Skráaþjónn fyrir Windows</name>
+ <name xml:lang="it">File server Windows</name>
+ <name xml:lang="ja">Windowsファイルサーãƒ</name>
+ <name xml:lang="ko">Windows íŒŒì¼ ì„œë²„</name>
+ <name xml:lang="no">Filtjener for Windows</name>
+ <name xml:lang="pt">Servidor de Ficheiros Windows</name>
+ <name xml:lang="ru">Файловый Ñервер Ð´Ð»Ñ Windows</name>
+ <name xml:lang="sv">Windows-filserver</name>
+ <name xml:lang="zh_CN">Windows 文件æœåС噍</name>
+ <name xml:lang="zh_TW">Windows 檔案伺æœå™¨</name>
+ <description>This package group allows you to share files between Linux and MS Windows(tm) systems.</description>
+ <description xml:lang="cs">Tato skupina balíÄků Vám umožní sdílet soubory mezi systémy Linux a MS Windows (tm).</description>
+ <description xml:lang="da">Denne pakkegruppe lader dig dele filer mellem Linux og system med MS Windows(tm).</description>
+ <description xml:lang="de">Mit dieser Paketgruppe können Sie Dateien in Linux und MS Windows (tm) gemeinsam nutzen.</description>
+ <description xml:lang="es">Este grupo de paquetes le permite compartir ficheros entre los sistemas Linux y MS Windows (tm).</description>
+ <description xml:lang="fr">Ce groupe de paquetages vous permet de partager des fichiers entre les systèmes Linux et Windows (m).</description>
+ <description xml:lang="is">Þessi pakkahópur gerir þér kleyft að skiptast á skrám milli Linux og MS Windows véla.</description>
+ <description xml:lang="it">Questo gruppo di pacchetti consente di condividere i file tra sistemi Linux e MS Windows(tm).</description>
+ <description xml:lang="ja">ã“ã®ãƒ‘ッケージグループã§ã€Linux 㨠MS Windows(tm) システムã®é–“ã§ãƒ•ァイルを共有 ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ Linux와 MS Windows (tm) 시스템 사ì´ì—서 파ì¼ì„ 공유할 수 있습니다.</description>
+ <description xml:lang="no">Denne pakkegruppen lar deg dele filer mellom Linux og MS Windows(tm)-systemer.</description>
+ <description xml:lang="pt">Este grupo de pacotes permite-lhe partilhar os ficheiros entre os sistemas Linux e MS Windows (tm).</description>
+ <description xml:lang="ru">Эта группа пакетов делает возможным доÑтуп к файлам между ÑиÑтемами Linux и MS Windows(tm).</description>
+ <description xml:lang="sv">Denna paketgrupp låter dig dela ut filer mellan Linux och system med MS Windows(tm).</description>
+ <description xml:lang="zh_CN">该软件包组å…许您在 Linux å’Œ MS Windows(tm) 系统间共享文件。</description>
+ <description xml:lang="zh_TW">這個套件群組使您å¯ä»¥åœ¨ Linux 與 MS Windows (tm) 系統間共享檔案。</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">samba-client</packagereq>
+ <packagereq type="mandatory">samba</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>server-cfg</id>
+ <name>Server Configuration Tools</name>
+ <name xml:lang="cs">Nástroje pro konfiguraci serveru</name>
+ <name xml:lang="da">Serverkonfigurationsværktøjer</name>
+ <name xml:lang="de">Server Konfigurationstools</name>
+ <name xml:lang="es">Herramientas de configuración del servidor</name>
+ <name xml:lang="fr">Outils de configuration de serveur</name>
+ <name xml:lang="is">Stillingatól fyrir þjóna</name>
+ <name xml:lang="it">Tool di configurazione del server</name>
+ <name xml:lang="ja">サーãƒè¨­å®šãƒ„ール</name>
+ <name xml:lang="ko">서버 설정 ë„구</name>
+ <name xml:lang="no">Konfigurasjonsverktøy for tjenere</name>
+ <name xml:lang="pt">Ferramentas de Configuração de Servidores</name>
+ <name xml:lang="ru">СредÑтва наÑтройки Ñервера</name>
+ <name xml:lang="sv">Serverkonfigurationsverktyg</name>
+ <name xml:lang="zh_CN">æœåС噍é…置工具</name>
+ <name xml:lang="zh_TW">伺æœå™¨è¨­å®šå·¥å…·</name>
+ <description>This group contains all of Red Hat's custom server configuration tools.</description>
+ <description xml:lang="cs">Tato skupina obsahuje vÅ¡echny nástroje pro konfiguraci serveru od spoleÄnosti Red Hat.</description>
+ <description xml:lang="da">Denne gruppe indholder alle Red Hats specialtilpassede serverkonfigureringsværktøjer.</description>
+ <description xml:lang="de">Diese Gruppe enthält alle Tools für die benutzerdefinierte Konfiguration des Servers von Red Hat.</description>
+ <description xml:lang="es">Este grupo contiene todas las herramientas de configuración del servidor de personalización de Red Hat.</description>
+ <description xml:lang="fr">Ce groupe contient tous les outils de configuration du serveur personnalisé Red Hat.</description>
+ <description xml:lang="is">Þessi hópur inniheldur öll Red Hat stillingatólin.</description>
+ <description xml:lang="it">Questo gruppo contiene tutti gli strumenti per personalizzare la configurazione del server Red Hat.</description>
+ <description xml:lang="ja">ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€å…¨ã¦ã®Red Hatカスタムサーãƒè¨­å®šãƒ„ールãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ê·¸ë£¹ì—는 Red Hatì˜ ì‚¬ìš©ìž ì„¤ì • 서버 설정 ë„구가 ëª¨ë‘ í¬í•¨ë˜ì–´ 있습니다.</description>
+ <description xml:lang="no">Denne gruppen inneholder Red Hats konfigurasjonsverktøy.</description>
+ <description xml:lang="pt">Este grupo contém todas as ferramentas de configuração de servidores da Red Hat.</description>
+ <description xml:lang="ru">Эта группа включает в ÑÐµÐ±Ñ Ð²Ñе ÑредÑтва админиÑÑ‚Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñервера, напиÑанные в Red Hat.</description>
+ <description xml:lang="sv">Denna grupp innehåller alla Red Hats specialanpassade serverkonfigurationsverktyg.</description>
+ <description xml:lang="zh_CN">è¿™ç»„è½¯ä»¶åŒ…åŒ…å«æ‰€æœ‰ Red Hat 的定制æœåС噍é…置工具。</description>
+ <description xml:lang="zh_TW">這個群組包括所有 Red Hat 自訂的伺æœå™¨è¨­å®šå·¥å…·ã€‚</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="default">redhat-config-bind</packagereq>
+ <packagereq type="default">redhat-config-httpd</packagereq>
+ <packagereq type="default">redhat-config-nfs</packagereq>
+ <packagereq type="default">redhat-config-network</packagereq>
+ <packagereq type="default">redhat-config-printer</packagereq>
+ <packagereq type="default">redhat-config-printer-gui</packagereq>
+ <packagereq type="default">redhat-config-securitylevel</packagereq>
+ <packagereq type="default">redhat-config-services</packagereq>
+ <packagereq type="default">redhat-switch-printer</packagereq>
+ <packagereq type="default">redhat-switch-printer-gnome</packagereq>
+ <packagereq type="default">redhat-switchmail</packagereq>
+ <packagereq type="default">redhat-switchmail-gnome</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>ftp-server</id>
+ <name>FTP Server</name>
+ <name xml:lang="cs">FTP server</name>
+ <name xml:lang="da">FTP-server</name>
+ <name xml:lang="de">FTP-Server</name>
+ <name xml:lang="es">Servidor FTP</name>
+ <name xml:lang="fr">Serveur FTP</name>
+ <name xml:lang="is">FTP þjónn</name>
+ <name xml:lang="it">Server FTP</name>
+ <name xml:lang="ja">FTP サーãƒ</name>
+ <name xml:lang="ko">FTP 서버</name>
+ <name xml:lang="no">FTP-tjener</name>
+ <name xml:lang="pt">Servidor FTP</name>
+ <name xml:lang="ru">Сервер FTP</name>
+ <name xml:lang="sv">FTP-server</name>
+ <name xml:lang="zh_CN">FTP æœåС噍</name>
+ <name xml:lang="zh_TW">FTP 伺æœå™¨</name>
+ <description>These tools allow you to run an FTP server on the system.</description>
+ <description xml:lang="cs">Tyto nástroje Vám umožní na poÄítaÄi provozovat FTP server.</description>
+ <description xml:lang="da">Disse værktøjer lader dig køre en FTP-server på systemet.</description>
+ <description xml:lang="de">Mit diesen Tools können Sie einen FTP-Server im System ausführen.</description>
+ <description xml:lang="es">Estas herramientas le permiten ejecutar un servidor FTP en el sistema.</description>
+ <description xml:lang="fr">Ces outils vous permettent d&apos;exécuter un serveur FTP sur le système. </description>
+ <description xml:lang="is">Þessi tól gera þér kleyft að keyra FTP þjón á vélinni.</description>
+ <description xml:lang="it">Questi strumenti consentono di eseguire un server FTP sul sistema.</description>
+ <description xml:lang="ja">ã“れらã®ãƒ„ールã§ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®FTPサーãƒã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ë„구를 사용하여 시스템 ìƒì—서 FTP 서버를 ìš´ì˜í•˜ì‹¤ 수 있습니다.</description>
+ <description xml:lang="no">Disse verktøyene lar deg kjøre en ftp-tjener på systemet.</description>
+ <description xml:lang="pt">Estas ferramentas permitem-lhe correr um servidor FTP no seu computador.</description>
+ <description xml:lang="ru">Эти ÑредÑтва позволÑÑŽÑ‚ иÑпользовать ÑиÑтему как Ñервер FTP.</description>
+ <description xml:lang="sv">Dessa verktyg låter dig köra en FTP-server på systemet.</description>
+ <description xml:lang="zh_CN">这些工具å…许您在系统上è¿è¡Œ FTP æœåŠ¡å™¨ã€‚</description>
+ <description xml:lang="zh_TW">這些工具讓您å¯ä»¥åœ¨ç³»çµ±ä¸ŠåŸ·è¡Œä¸€å€‹ FTP 伺æœå™¨ã€‚</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">anonftp</packagereq>
+ <packagereq type="mandatory">vsftpd</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>sql-server</id>
+ <name>SQL Database Server</name>
+ <name xml:lang="cs">Databázový server SQL</name>
+ <name xml:lang="da">SQL-databaseserver</name>
+ <name xml:lang="de">SQL Datenbank-Server</name>
+ <name xml:lang="es">Servidor de la base de datos SQL</name>
+ <name xml:lang="fr">Serveur de base de données SQL</name>
+ <name xml:lang="is">SQL gagnagrunnur</name>
+ <name xml:lang="it">Server per database SQL</name>
+ <name xml:lang="ja">SQLデータベースサーãƒ</name>
+ <name xml:lang="ko">SQL ë°ì´í„°ë² ì´ìФ 서버</name>
+ <name xml:lang="no">Database-tjener</name>
+ <name xml:lang="pt">Servidor de Base de Dados SQL</name>
+ <name xml:lang="ru">Сервер базы данных SQL</name>
+ <name xml:lang="sv">SQL-databasserver</name>
+ <name xml:lang="zh_CN">SQL æ•°æ®åº“æœåС噍</name>
+ <name xml:lang="zh_TW">SQL 資料庫伺æœå™¨</name>
+ <description>This package group allows you to run an SQL server on the system.</description>
+ <description xml:lang="cs">Tato skupina balíÄků Vám umožní na poÄítaÄi provozovat SQL server.</description>
+ <description xml:lang="da">Denne pakkegruppe lader dig køre en SQL-server på systemet.</description>
+ <description xml:lang="de">Mit dieser Paketgruppe können Sie einen SQL-Server im System ausführen.</description>
+ <description xml:lang="es">Este grupo de paquetes le permite ejecutar un servidor SQL en el sistema. </description>
+ <description xml:lang="fr">Ce groupe de paquetages vous permet d&apos;exécuter un serveur SQL sur le système.</description>
+ <description xml:lang="is">Þessi pakkahópur gerir þér kleyft að keyra SQL þjónustu.</description>
+ <description xml:lang="it">Questo gruppo di pacchetti consente di eseguire un server SQL sul sistema.</description>
+ <description xml:lang="ja">ã“ã®ãƒ‘ッケージグループã§ã€ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®SQLサーãƒã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ 시스템 ìƒì—서 SQL 서버를 ìš´ì˜í•˜ì‹¤ 수 있습니다.</description>
+ <description xml:lang="no">Denne pakkegruppen lar deg kjøre en database-tjenere på systemet.</description>
+ <description xml:lang="pt">Este grupo de pacotes permite-lhe correr um servidor SQL no seu sistema.</description>
+ <description xml:lang="ru">Ð’ Ñту группу включены различные SQL Ñерверы.</description>
+ <description xml:lang="sv">Denna paketgrupp låter dig köra en SQL-server på systemet.</description>
+ <description xml:lang="zh_CN">该软件包组å…许您在系统上è¿è¡Œ SQL æœåŠ¡å™¨ã€‚</description>
+ <description xml:lang="zh_TW">這個套件群組讓您å¯ä»¥åœ¨ç³»çµ±ä¸ŠåŸ·è¡Œä¸€éƒ¨ SQL 伺æœå™¨ã€‚</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">postgresql-server</packagereq>
+ <packagereq type="mandatory">unixODBC</packagereq>
+ <packagereq type="mandatory">perl-DBD-Pg</packagereq>
+ <packagereq type="mandatory">perl-DB_File</packagereq>
+ <packagereq type="optional">mysql-server</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>web-server</id>
+ <name>Web Server</name>
+ <name xml:lang="cs">WWW server</name>
+ <name xml:lang="da">Webserver</name>
+ <name xml:lang="de">Web-Server</name>
+ <name xml:lang="es">Servidor Web</name>
+ <name xml:lang="fr">Serveur Web</name>
+ <name xml:lang="is">Vefþjónn</name>
+ <name xml:lang="it">Server Web</name>
+ <name xml:lang="ja">Webサーãƒ</name>
+ <name xml:lang="ko">웹 서버</name>
+ <name xml:lang="no">Webtjener</name>
+ <name xml:lang="pt">Servidor Web</name>
+ <name xml:lang="ru">Веб-Ñервер</name>
+ <name xml:lang="sv">Webbserver</name>
+ <name xml:lang="zh_CN">万维网æœåС噍</name>
+ <name xml:lang="zh_TW">ç¶²é ä¼ºæœå™¨</name>
+ <description>These tools allow you to run a Web server on the system.</description>
+ <description xml:lang="cs">Tyto nástroje Vám umožní na poÄítaÄi provozovat WWW server.</description>
+ <description xml:lang="da">Disse værktøjer lader dig køre en webserver på systemet.</description>
+ <description xml:lang="de">Mit diesen Tools können Sie einen Web-Server im System ausführen.</description>
+ <description xml:lang="es">Estas herramientas le permiten ejecutar un servidor Web en el sistema.</description>
+ <description xml:lang="fr">Ces outils vous permettent d&apos;exécuter un serveur Web sur le système.</description>
+ <description xml:lang="is">Þessi tól gera þér kleyft að keyra vefþjón á vélinni.</description>
+ <description xml:lang="it">Questi strumenti consentono di eseguire un server Web sul sistema.</description>
+ <description xml:lang="ja">ã“れらã®ãƒ„ールã§ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®Webサーãƒã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ë„구를 사용하여 시스템 ìƒì—서 웹서버를 ìš´ì˜í•˜ì‹¤ 수 있습니다.</description>
+ <description xml:lang="no">Disse verktøyene lar deg kjøre en web-tjener på systemet.</description>
+ <description xml:lang="pt">Estas ferramentas permitem-lhe correr um servidor Web no seu computador.</description>
+ <description xml:lang="ru">Эти ÑредÑтва позволÑÑŽÑ‚ иÑпользовать ÑиÑтему как Веб-Ñервер</description>
+ <description xml:lang="sv">Dessa verktyg låter dig köra en webbserver på systemet.</description>
+ <description xml:lang="zh_CN">这些工具å…许您在系统生è¿è¡Œä¸‡ç»´ç½‘æœåŠ¡å™¨ã€‚</description>
+ <description xml:lang="zh_TW">這些工具讓您å¯ä»¥åœ¨ç³»çµ±ä¸ŠåŸ·è¡Œä¸€å€‹ç¶²é ä¼ºæœå™¨ã€‚</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">httpd</packagereq>
+ <packagereq type="mandatory">httpd-manual</packagereq>
+ <packagereq type="default">hwcrypto</packagereq>
+ <packagereq type="default">mod_python</packagereq>
+ <packagereq type="default">mod_perl</packagereq>
+ <packagereq type="default">mod_ssl</packagereq>
+ <packagereq type="default">php</packagereq>
+ <packagereq type="default">php-imap</packagereq>
+ <packagereq type="default">php-ldap</packagereq>
+ <packagereq type="optional">php-pgsql</packagereq>
+ <packagereq type="optional">mod_auth_pgsql</packagereq>
+ <packagereq type="default">squid</packagereq>
+ <packagereq type="default">tux</packagereq>
+ <packagereq type="default">webalizer</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>dns-server</id>
+ <name>DNS Name Server</name>
+ <name xml:lang="cs">Jmenný server DNS</name>
+ <name xml:lang="da">DNS-navneserver</name>
+ <name xml:lang="de">DNS Name-Server</name>
+ <name xml:lang="es">Servidor del nombre DNS</name>
+ <name xml:lang="fr">Nom de serveur DNS</name>
+ <name xml:lang="is">DNS nafnaþjónn</name>
+ <name xml:lang="it">Nome server DNS</name>
+ <name xml:lang="ja">DNSãƒãƒ¼ãƒ ã‚µãƒ¼ãƒ</name>
+ <name xml:lang="ko">DNS ì´ë¦„ 서버</name>
+ <name xml:lang="no">DNS-tjener</name>
+ <name xml:lang="pt">Servidor de Nomes DNS</name>
+ <name xml:lang="ru">Сервер DNS</name>
+ <name xml:lang="sv">DNS-namnserver</name>
+ <name xml:lang="zh_CN">DNS åç§°æœåС噍</name>
+ <name xml:lang="zh_TW">DNS å稱伺æœå™¨</name>
+ <description>This package group allows you to run a DNS name server (BIND) on the system.</description>
+ <description xml:lang="cs">Tato skupina balíÄků Vám umožní na poÄítaÄi provozovat jmenný server DNS (BIND).</description>
+ <description xml:lang="da">Denne pakkegruppe lader dig køre en DNS-navneserver (BIND) på systemet.</description>
+ <description xml:lang="de">Mit dieser Paketgruppe können Sie einen DNS Name-Server (BIND) im System ausführen.</description>
+ <description xml:lang="es">Este paquete le permite ejecutar un servidor de nombre DNS (BIND) en el sistema.</description>
+ <description xml:lang="fr">Ce groupe de paquetages vous permet d&apos;exécuter un nom de serveur DNS (BIND) sur le système.</description>
+ <description xml:lang="is">Þessi pakkahópur gerir þér kleyft að keyra DNS nafnaþjón (BIND) á vélinni þinni.</description>
+ <description xml:lang="it">Questo gruppo di pacchetti consente di eseguire un name server DNS (BIND) sul sistema.</description>
+ <description xml:lang="ja">ã“ã®ãƒ‘ッケージグループã§ã€ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®DNSãƒãƒ¼ãƒ ã‚µãƒ¼ãƒ(BIND)を実行ã§ãã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ 시스템 ìƒì—서 DNS ì´ë¦„ 서버 (BIND)를 ìš´ì˜í•˜ì‹¤ 수 있습니다.</description>
+ <description xml:lang="no">Denne pakkegruppen lar deg kjøre en DNS-tjener (BIND) på systemet.</description>
+ <description xml:lang="pt">Este grupo de pacotes permite-lhe correr um servidor de nomes de DNS (o BIND) no sistema.</description>
+ <description xml:lang="ru">Пакеты в Ñтой группе позволÑÑ‚ вам уÑтановить и наÑтроить DNS (BIND).</description>
+ <description xml:lang="sv">Denna paketgrupp låter dig köra en DNS-namnserver (BIND) på systemet.</description>
+ <description xml:lang="zh_CN">该软件包组å…许您在系统上è¿è¡Œ DNS åç§°æœåС噍(BIND)。</description>
+ <description xml:lang="zh_TW">這個套件群組讓您å¯ä»¥åœ¨ç³»çµ±ä¸ŠåŸ·è¡Œä¸€éƒ¨ DNS å稱伺æœå™¨ (BIND)。</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="default">caching-nameserver</packagereq>
+ <packagereq type="mandatory">bind</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>authoring-and-publishing</id>
+ <name>Authoring and Publishing</name>
+ <name xml:lang="cs">Tvoření a publikování</name>
+ <name xml:lang="da">Forfatterskab og publicering</name>
+ <name xml:lang="de">Authoring und Publishing</name>
+ <name xml:lang="es">Autorización y publicación</name>
+ <name xml:lang="fr">Authoring et Publishing</name>
+ <name xml:lang="is">Umbrot og ritstörf</name>
+ <name xml:lang="it">Authoring e publishing</name>
+ <name xml:lang="ja">著作ã¨ç™ºè¡Œ</name>
+ <name xml:lang="ko">제작과 ì¶œíŒ</name>
+ <name xml:lang="no">Tekstpublisering</name>
+ <name xml:lang="pt">Autoria e Publicação</name>
+ <name xml:lang="ru">Подготовка публикаций</name>
+ <name xml:lang="sv">Författande och publicering</name>
+ <name xml:lang="zh_CN">授æƒå’Œå‡ºç‰ˆ</name>
+ <name xml:lang="zh_TW">編寫與出版</name>
+ <description>These tools allow you to create documentation in the DocBook format and convert them to HTML, PDF, Postscript, and text.</description>
+ <description xml:lang="cs">Tyto nástroje Vám umožní vytvářet dokumentaci ve formátu DocBook a konvertovat ji do HTML, PDF, Postscriptu a textu.</description>
+ <description xml:lang="da">Disse værktøjer lader dig skabe dokumentation i DocBook-formatet og konvertere dem til HTML, PDF, Postscript og tekst.</description>
+ <description xml:lang="de">Mit diesen Tools können Sie Dokumentation im DocBook Format anlegen und diese in die Formate HTML, PDF, Postscript und Text konvertieren.</description>
+ <description xml:lang="es">Estas herramientas le permiten crear documentación en formato DocBook y convertirla a HTML, PDF, Postscript y texto.</description>
+ <description xml:lang="fr">Ces outils vous permettent de créer de la documentation sous format DocBook et de la convertir en HTML, PDF, Postscript et texte.</description>
+ <description xml:lang="is">Þessi tól gera þér kleyft að búa til skjöl á DocBook sniði og breyta þeim í HTML, PDF, Postscript og texta.</description>
+ <description xml:lang="it">Questi strumenti consentono di creare documenti in formato DocBook e di convertirli in HTML, PDF, Postscript e testo.</description>
+ <description xml:lang="ja">ã“れらã®ãƒ„ールã§ã€DocBookå½¢å¼ã§æ–‡æ›¸ã‚’作æˆã—ã¦ã€ãれらをHTML, PDF, Postscript, åŠã³ textã¸å¤‰æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚.</description>
+ <description xml:lang="ko">ì´ ë„구를 사용하여 DocBook 형ì‹ì˜ 문서를 ìƒì„±í•˜ì‹¤ 수 있으며 ìƒì„±ëœ 문서를 HTML, PDF, Postscript와 í…스트 형ì‹ìœ¼ë¡œ 변환하실 수 있습니다.</description>
+ <description xml:lang="no">Disse verktøyene lar deg lage dokumentasjon i DocBook-formatet og konvertere dem til HTML, PDF, Postscript og tekst.</description>
+ <description xml:lang="pt">Estas ferramentas permitem-lhe criar a documentação no formato DocBook e convertê-la para HTML, PDF, PostScript e texto.</description>
+ <description xml:lang="ru">Эти ÑредÑтва позволÑÑŽÑ‚ Ñоздавать документацию в формате DocBook и преобразовывать в HTML, PDF, Postscript и текÑÑ‚.</description>
+ <description xml:lang="sv">Dessa verktyg låter dig skapa dokumentation i DocBook-formatet och konvertera dem till HTML, PDF, Postscript och text.</description>
+ <description xml:lang="zh_CN">这些软件包å…许您创建 DocBook æ ¼å¼çš„æ–‡æ¡£ï¼Œå¹¶å°†å®ƒä»¬è½¬æ¢æˆ HTML〠PDFã€Postscript 和文本格å¼ã€‚</description>
+ <description xml:lang="zh_TW">這些工具讓您å¯ä»¥å»ºç«‹ DocBook æ ¼å¼çš„說明文件,並且 將它們轉æ›ç‚º HTML, PDF, Postscript 與文字。</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">docbook-dtds</packagereq>
+ <packagereq type="mandatory">docbook-style-dsssl</packagereq>
+ <packagereq type="mandatory">docbook-utils</packagereq>
+ <packagereq type="mandatory">docbook-utils-pdf</packagereq>
+ <packagereq type="mandatory">linuxdoc-tools</packagereq>
+ <packagereq type="mandatory">tetex</packagereq>
+ <packagereq type="mandatory">tetex-afm</packagereq>
+ <packagereq type="default">tetex-xdvi</packagereq>
+ <packagereq type="optional">tetex-latex</packagereq>
+ <packagereq type="mandatory">xmlto</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>engineering-and-scientific</id>
+ <name>Engineering and Scientific</name>
+ <name xml:lang="cs">Vědecké nástroje</name>
+ <name xml:lang="da">Ingeniør- og naturvidenskab</name>
+ <name xml:lang="de">Engineering und Wissenschaft</name>
+ <name xml:lang="es">Ingeniería y científico</name>
+ <name xml:lang="fr">Engineering et Scientifique</name>
+ <name xml:lang="is">Vísindi og verkfræði</name>
+ <name xml:lang="it">Settori engineering e scientifico</name>
+ <name xml:lang="ja">技術系ã¨ç§‘学系</name>
+ <name xml:lang="ko">공학과 과학</name>
+ <name xml:lang="no">Vitenskapelige programmer</name>
+ <name xml:lang="pt">Engenharia e Ciência</name>
+ <name xml:lang="ru">Ðаучные и инженерные</name>
+ <name xml:lang="sv">Konstruktion och forskning</name>
+ <name xml:lang="zh_CN">工程和科学</name>
+ <name xml:lang="zh_TW">工程與科學</name>
+ <description>This group includes packages for performing mathematical and scientific computations and plotting, as well as unit conversion.</description>
+ <description xml:lang="cs">Tato skupina obsahuje balíÄky pro provádÄ›ní matematických a vÄ›deckých výpoÄtů, tvorbu grafů a pÅ™evod mezi jednotkami.</description>
+ <description xml:lang="da">Denne gruppe indeholder pakker for udførsel af matematiske og videnskabelige beregninger og diagramtegning såvel som enhedskonvertering.</description>
+ <description xml:lang="de">Diese Gruppe enthält Pakete für mathematische und wissenschaftliche Berechnungen und Plotting sowie die Konversion von Einheiten.</description>
+ <description xml:lang="es">El grupo incluye paquetes para ejecutar cálculos matemáticos y científicos y trazados, así como la conversión de la unidad.</description>
+ <description xml:lang="fr">Ce groupe comprend les paquetages pour exécuter des calculs mathématiques et scientifiques, le traçage et la conversion des unités.</description>
+ <description xml:lang="is">Þessi hópur inniheldur pakka til að framkvæma stærðfræði og vísindaútreikninga ásamt tólum til að umbreyta milli eininga.</description>
+ <description xml:lang="it">Questo gruppo include i pacchetti per l&apos;esecuzione e il plotting di operazioni matematiche e scientifiche, nonché la conversione di unità.</description>
+ <description xml:lang="ja">ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€ãƒ¦ãƒ‹ãƒƒãƒˆå¤‰æ›ã¨å…±ã«ã€æ•°å­¦çš„åŠã³ç§‘å­¦çš„ãªæ¼”ç®—ã¨ãƒ—ロッティングを 実践ã™ã‚‹ç‚ºã®ãƒ‘ッケージãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ê·¸ë£¹ì€ ë‹¨ìœ„ 변환 ê¸°ëŠ¥ì„ ë¹„ë¡¯í•˜ì—¬ 수학 계산과 과학 ê³„ì‚°ì„ ìˆ˜í–‰í•˜ê³  출력하는 패키지를 í¬í•¨í•©ë‹ˆë‹¤.</description>
+ <description xml:lang="no">Denne gruppen inneholder pakker for å utføre matematiske og vitenskapelige beregninger/visualiseringer samt enhetskonverteringer.</description>
+ <description xml:lang="pt">Este grupo inclui os pacotes para efecutar cálculos matemáticos e científicos, apresentá-los e efectuar a conversão de unidades.</description>
+ <description xml:lang="ru">Эта группа Ñодержит Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¼Ð°Ñ‚ÐµÐ¼Ð°Ñ‚Ð¸Ñ‡ÐµÑких и прочих научных вычиÑлений и преобразований.</description>
+ <description xml:lang="sv">Denna grupp inkluderar paket för utförande av matematiska och vetenskapliga beräkningar och diagramritning såväl som enhetskonvertering.</description>
+ <description xml:lang="zh_CN">è¿™ç»„è½¯ä»¶åŒ…åŒ…æ‹¬ç”¨æ¥æ‰§è¡Œæ•°å­¦å’Œç§‘学计算ã€ç»˜å›¾ã€ä»¥åŠè®¡é‡å•ä½è½¬æ¢çš„软件包。</description>
+ <description xml:lang="zh_TW">這個群組包括的套件å¯ç”¨ä¾†åŸ·è¡Œæ•¸å­¸èˆ‡ç§‘學的計算與繪圖,以åŠå–®ä½çš„æ›ç®—ã€‚</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional">blas</packagereq>
+ <packagereq type="default">gnuplot</packagereq>
+ <packagereq type="optional">lam</packagereq>
+ <packagereq type="optional">lapack</packagereq>
+ <packagereq type="default">octave</packagereq>
+ <packagereq type="optional">pvm</packagereq>
+ <packagereq type="default">units</packagereq>
+ </packagelist>
+ </group>
+
+
+ <group>
+ <id>editors</id>
+ <name>Editors</name>
+ <name xml:lang="cs">Editory</name>
+ <name xml:lang="da">Tekstredigering</name>
+ <name xml:lang="de">Editoren</name>
+ <name xml:lang="es">Editores</name>
+ <name xml:lang="fr">Editeurs</name>
+ <name xml:lang="is">Ritlar</name>
+ <name xml:lang="it">Editor</name>
+ <name xml:lang="ja">エディタ</name>
+ <name xml:lang="ko">편집기</name>
+ <name xml:lang="no">Editorer</name>
+ <name xml:lang="pt">Editores</name>
+ <name xml:lang="ru">Редакторы</name>
+ <name xml:lang="sv">Textredigerare</name>
+ <name xml:lang="zh_CN">编辑器</name>
+ <name xml:lang="zh_TW">編輯器</name>
+ <description>Sometimes called text editors, these are programs that allow you to create and edit files. These include Emacs and Vi.</description>
+ <description xml:lang="cs">NÄ›kdy oznaÄované jako textové editory, tyto programy Vám umožní vytvářet a upravovat soubory. Tato skupina zahrnuje Emacs a Vi.</description>
+ <description xml:lang="da">Dette er programmer som lader dig skabe og redigere filer, og de kaldes ofte for tekstredigerere. Disse inkluderer Emacs og Vi.</description>
+ <description xml:lang="de">Diese auch Text-Editoren genannten Programme ermöglichen das Anlegen und Bearbeiten von Dateien. Dazu gehören Emacs und Vi.</description>
+ <description xml:lang="es">Existen programas que permiten crear y modificar ficheros, a veces llamados editores de texto. Estos incluyen Emacs y Vi.</description>
+ <description xml:lang="fr">Parfois appelés éditeurs de texte, ces programmes vous permettent de créer et d&apos;éditer des fichiers. Ils comprennent Emacs et Vi.</description>
+ <description xml:lang="is">Forrit sem kallast ritlar. Þetta eru tólin sem gera þér kleyft að búa til og breyta skrám. Þetta inniheldur meðal annars Emacs og Vi.</description>
+ <description xml:lang="it">Talvolta definiti editor di testo, questi programmi consentono di creare emodificare i file. Sono inclusi Emacs e Vi.</description>
+ <description xml:lang="ja">時ã«ã¯ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ã¨å‘¼ã°ã‚Œã‚‹ãƒ•ァイルを作æˆã¨ç·¨é›†ã§ãるプログラム㌠ã‚りã¾ã™ã€‚ã“れらã«ã¯Emacs 㨠ViãŒå«ã¾ã‚Œã¾ã™ã€‚</description>
+ <description xml:lang="ko">ê°€ë”씩 í…스트 편집기ë¼ê³ ë„ 불리우는 ì´ í”„ë¡œê·¸ëž¨ì€ íŒŒì¼ì„ ìƒì„±í•˜ê³  íŽ¸ì§‘í•˜ëŠ”ë° ì‚¬ìš©ë©ë‹ˆë‹¤. ì´ëŸ¬í•œ 프로그램ì—는 Emacs와 Viê°€ í¬í•¨ë©ë‹ˆë‹¤.</description>
+ <description xml:lang="no">Disse programmene, ofte kalt teksteditorer, lar deg lage og redigere filer. Emacs og Vi er inkludert her.</description>
+ <description xml:lang="pt">Normalmente chamados editores de texto, estes programas permite-lhe criar e editar ficheiros. Inclui o Emacs e o Vi.</description>
+ <description xml:lang="ru">Эти программы, иногда называемые текÑтовыми редакторами, позволÑÑŽÑ‚ редактировать текÑты. Включают Emacs and Vi.</description>
+ <description xml:lang="sv">Detta är program som låter dig skapa och redigera filer, och kallas ofta textredigerare. Dessa inkluderar Emacs och Vi.</description>
+ <description xml:lang="zh_CN">有时å«åšæ–‡æœ¬ç¼–è¾‘å™¨ã€‚å®ƒä»¬æ˜¯å…许您创建和编辑文件的程åºã€‚包括 Emacs å’Œ Vi。</description>
+ <description xml:lang="zh_TW">這些是讓您å¯ä»¥å»ºç«‹èˆ‡ç·¨è¼¯æª”案的程å¼ï¼Œæœ‰æ™‚候稱為文字編輯器。 這些包括了 Emacs 與 Vi。</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ <metapkg type="default">emacs</metapkg>
+ <metapkg type="optional">xemacs</metapkg>
+ </grouplist>
+ <packagelist>
+ <packagereq type="default">vim-enhanced</packagereq>
+ </packagelist>
+ </group>
+
+
+ <group>
+ <id>emacs</id>
+ <name>Emacs</name>
+ <name xml:lang="cs">Emacs</name>
+ <name xml:lang="da">Emacs</name>
+ <name xml:lang="de">Emacs</name>
+ <name xml:lang="es">Emacs</name>
+ <name xml:lang="fr">Emacs</name>
+ <name xml:lang="is">Emacs</name>
+ <name xml:lang="it">Emacs</name>
+ <name xml:lang="ja">Emacs</name>
+ <name xml:lang="ko">Emacs</name>
+ <name xml:lang="no">Emacs</name>
+ <name xml:lang="pt">Emacs</name>
+ <name xml:lang="ru">Emacs</name>
+ <name xml:lang="sv">Emacs</name>
+ <name xml:lang="zh_CN">Emacs</name>
+ <name xml:lang="zh_TW">Emacs</name>
+ <description>The GNU Emacs text editor.</description>
+ <description xml:lang="cs">Textový editor GNU Emacs.</description>
+ <description xml:lang="da">Tekstredigereren GNU Emacs.</description>
+ <description xml:lang="de">Der Text-Editor GNU Emacs.</description>
+ <description xml:lang="es">Editor de textos Emacs de GNU.</description>
+ <description xml:lang="fr">Editeur de texte GNU Emacs.</description>
+ <description xml:lang="is">GNU Emacs ritillinn.</description>
+ <description xml:lang="it">Editor di testo GNU Emacs.</description>
+ <description xml:lang="ja">GNU Emacsテキストエディタ</description>
+ <description xml:lang="ko">GNU Emacs í…스트 편집기.</description>
+ <description xml:lang="no">Teksteditoren GNU Emacs.</description>
+ <description xml:lang="pt">O editor de texto GNU Emacs.</description>
+ <description xml:lang="ru">ТекÑтовый редактор GNU Emacs.</description>
+ <description xml:lang="sv">Textredigeraren GNU Emacs.</description>
+ <description xml:lang="zh_CN">GNU Emacs 文本编辑器</description>
+ <description xml:lang="zh_TW">GNU Emacs 文字編輯器。</description>
+ <uservisible>false</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">emacs</packagereq>
+ <packagereq type="mandatory">emacs-leim</packagereq>
+ <packagereq type="default">psgml</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>xemacs</id>
+ <name>XEmacs</name>
+ <name xml:lang="cs">XEmacs</name>
+ <name xml:lang="da">XEmacs</name>
+ <name xml:lang="de">XEmacs</name>
+ <name xml:lang="es">XEmacs</name>
+ <name xml:lang="fr">XEmacs</name>
+ <name xml:lang="is">XEmacs</name>
+ <name xml:lang="it">XEmacs</name>
+ <name xml:lang="ja">XEmacs</name>
+ <name xml:lang="ko">XEmacs</name>
+ <name xml:lang="no">XEmacs</name>
+ <name xml:lang="pt">XEmacs</name>
+ <name xml:lang="ru">XEmacs</name>
+ <name xml:lang="sv">XEmacs</name>
+ <name xml:lang="zh_CN">XEmacs</name>
+ <name xml:lang="zh_TW">XEmacs</name>
+ <description>The XEmacs text editor.</description>
+ <description xml:lang="cs">Textový editor XEmacs.</description>
+ <description xml:lang="da">Tekstredigereren XEmacs.</description>
+ <description xml:lang="de">Der Text-Editor XEmacs.</description>
+ <description xml:lang="es">Editor de textos de XEmacs.</description>
+ <description xml:lang="fr">Editeur de texte XEmacs.</description>
+ <description xml:lang="is">XEmacs ritillinn.</description>
+ <description xml:lang="it">Editor di testo XEmacs.</description>
+ <description xml:lang="ja">XEmacsテキストエディタ</description>
+ <description xml:lang="ko">XEmacs í…스트 편집기.</description>
+ <description xml:lang="no">Teksteditoren XEmacs.</description>
+ <description xml:lang="pt">O editor de texto XEmacs.</description>
+ <description xml:lang="ru">ТекÑтовый редактор XEmacs</description>
+ <description xml:lang="sv">Textredigeraren XEmacs.</description>
+ <description xml:lang="zh_CN">XEmacs 文本编辑器</description>
+ <description xml:lang="zh_TW">XEmacs 文字編輯器。</description>
+ <uservisible>false</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">xemacs</packagereq>
+ <packagereq type="mandatory">xemacs-el</packagereq>
+ <packagereq type="default">xemacs-info</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>system-tools</id>
+ <name>System Tools</name>
+ <name xml:lang="cs">Systémové nástroje</name>
+ <name xml:lang="da">Systemværktøjer</name>
+ <name xml:lang="de">Systemtools</name>
+ <name xml:lang="es">Herramientas del sistema </name>
+ <name xml:lang="fr">Outils de système</name>
+ <name xml:lang="is">Kerfistól</name>
+ <name xml:lang="it">Tool di sistema</name>
+ <name xml:lang="ja">システムツールã€</name>
+ <name xml:lang="ko">시스템 ë„구</name>
+ <name xml:lang="no">Systemverktøy</name>
+ <name xml:lang="pt">Ferramentas do Sistema</name>
+ <name xml:lang="ru">СиÑтемные ÑредÑтва</name>
+ <name xml:lang="sv">Systemverktyg</name>
+ <name xml:lang="zh_CN">系统工具</name>
+ <name xml:lang="zh_TW">系統工具</name>
+ <description>This group is a collection of various tools for the system, such as the client for connecting to SMB shares and tools to monitor network traffic.</description>
+ <description xml:lang="cs">Tato skupina je soubor různých systémových nástrojů, např. klient pro připojení ke svazkům SMB a nástroje pro sledování síťového provozu.</description>
+ <description xml:lang="da">Denne gruppe er en samling med diverse værktøjer til systemet, som fx klienten for tilslutning til SMB-delinger og værktøjer for overvågning af netværkstrafik.</description>
+ <description xml:lang="de">Diese Gruppe bietet eine Reihe Systemtools wie beispielsweise den Client für die Verbindung zu SMB-Shares sowie Tools für die Kontrolle des Netzwerkverkehrs.</description>
+ <description xml:lang="es">Este grupo es una colección de varias herramientas para el sistema, tales como el cliente para conectarse a las particiones SMB y herramientas para monitorizar el tráfico de redes. </description>
+ <description xml:lang="fr">Ce groupe est un ensemble de différents outils pour le système, ainsi qu&apos;un client pour la connexion aux parts SMB et d&apos;outils permettant de gérer le trafic dans le réseau. </description>
+ <description xml:lang="is">Þessi hópur inniheldur safn kerfistóla eins og til dæmis tól til að tengjast SMB deildum og tól til að fylgjast með umferð á neti.</description>
+ <description xml:lang="it">Questo gruppo è una raccolta di vari strumenti per il sistema, che comprende ilclient per la connessione alle partizioni SMB e gli strumenti per monitorare il traffico di rete.</description>
+ <description xml:lang="ja">ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã€SMBå…±æœ‰ã¸æŽ¥ç¶šã™ã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é€šä¿¡é‡ã‚’モニタã™ã‚‹ ツールãªã©ã®ã‚·ã‚¹ãƒ†ãƒ ç”¨ã®å„種ツールã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ê·¸ë£¹ì€ SMB ê³µìœ ì— ì ‘ì†í•˜ëŠ”ë° ì‚¬ìš©ë˜ëŠ” í´ë¼ì´ì–¸íŠ¸ì™€ ë„¤íŠ¸ì›Œí¬ ì†Œí†µëŸ‰ì„ ê°ì‹œí•˜ëŠ” ë„구와 ê°™ì€ ë‹¤ì–‘í•œ 시스템 ë„구 모ìŒìž…니다.</description>
+ <description xml:lang="no">Denne gruppen er en samling av ulike systemverktøy, som oppkobling mot SMB-ressurser og nettverksovervåkning.</description>
+ <description xml:lang="pt">Este grupo é uma colecção de ferramentas para o sistema, tal como o cliente para se ligar a partilhas de SMB e as ferramentas para monitorizar o tráfego de rede.</description>
+ <description xml:lang="ru">Эта группа Ñодержит различные ÑиÑтемные утилиты: например, Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ñтупа к SMB Ñерверам, и программы Ð´Ð»Ñ Ð¼Ð¾Ð½Ð¸Ñ‚Ð¾Ñ€Ð¸Ð½Ð³Ð° Ñетевого траффика.</description>
+ <description xml:lang="sv">Denna grupp är en samling med diverse verktyg för systemet, som exempelvis klienten för anslutning till SMB-utdelningar och verktyg för övervakning av nätverkstrafik.</description>
+ <description xml:lang="zh_CN">这组软件包是å„类系统工具的集åˆï¼Œè­¬å¦‚:连接 SMB 共享的客户;监控网络交通的工具。</description>
+ <description xml:lang="zh_TW">這個群組是系統上許多種工具的收集,例如用來連線到 SMB 共享的用戶端, 以åŠç”¨ä¾†ç›£è¦–網路æµé‡çš„工具。</description>
+ <uservisible>true</uservisible>
+ <packagelist>
+ <packagereq type="optional">amanda-client</packagereq>
+ <packagereq type="default">ethereal</packagereq>
+ <packagereq type="optional">ethereal-gnome</packagereq>
+ <packagereq type="optional">gnome-lokkit</packagereq>
+ <packagereq type="default">nmap</packagereq>
+ <packagereq type="optional">nmap-frontend</packagereq>
+ <packagereq type="optional">rdesktop</packagereq>
+ <packagereq type="default">samba-client</packagereq>
+ <packagereq type="optional">shapecfg</packagereq>
+ <packagereq type="optional">vnc</packagereq>
+ <packagereq type="default">xdelta</packagereq>
+ <packagereq type="optional">mc</packagereq>
+ <packagereq type="default">screen</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>admin-tools</id>
+ <name>Administration Tools</name>
+ <name xml:lang="cs">Nástroje pro administraci</name>
+ <name xml:lang="da">Administrationsværktøjer</name>
+ <name xml:lang="de">Verwaltungstools</name>
+ <name xml:lang="es">Herramientas de administración</name>
+ <name xml:lang="fr">Outils d&apos;administration</name>
+ <name xml:lang="is">Kerfisstjórnunartól</name>
+ <name xml:lang="it">Strumenti amministrativi</name>
+ <name xml:lang="ja">管ç†ãƒ„ール</name>
+ <name xml:lang="ko">관리 ë„구</name>
+ <name xml:lang="no">Administrasjonsverktøy</name>
+ <name xml:lang="pt">Ferramentas de Administração</name>
+ <name xml:lang="ru">СредÑтва админиÑтрированиÑ</name>
+ <name xml:lang="sv">Administrationsverktyg</name>
+ <name xml:lang="zh_CN">管ç†å·¥å…·</name>
+ <name xml:lang="zh_TW">管ç†å·¥å…·</name>
+ <description>This group is a collection of graphical administration tools for the system, such as for managing user accounts and configuring system hardware.</description>
+ <description xml:lang="cs">Tato skupina je soubor grafických nástrojů administrace, napÅ™. pro správu uživatelských úÄtů a nastavení hardware poÄítaÄe.</description>
+ <description xml:lang="da">Denne gruppe er en samling grafiske administrationsværktøjer for systemet, som fx behandling af brugerkonti og konfiguration af systemudstyr.</description>
+ <description xml:lang="de">Diese Gruppe bietet eine Reihe von grafische Verwaltungstools für das System, darunter Tools für die Verwaltung von Benutzeraccounts und die Konfiguration der Systemhardware.</description>
+ <description xml:lang="es">Este grupo es una colección de herramientas de administración gráficas, tales como cuentas de usuario de gestión y configuración del hardware del sistema.</description>
+ <description xml:lang="fr">Ce groupe est un ensemble d&apos;outils d&apos;administration graphique pour le système, ainsi que pour la gestion des comptes utilisateurs et la configuration du matériel système.</description>
+ <description xml:lang="is">Þessi hópur inniheldur safn myndrænna kerfisstjórnunartóla fyrir vélina eins og til dæmis tól til að vinna með notendur og stilla vélbúnað.</description>
+ <description xml:lang="it">Questo gruppo è una raccolta di tool per la gestione della grafica del sistema, che consente di gestire gli account utente e di configurare l&apos;hardware di sistema.</description>
+ <description xml:lang="ja">ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’管ç†ã—ãŸã‚Šã€ã‚·ã‚¹ãƒ†ãƒ ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚’設定ã—ãŸã‚Šã™ã‚‹ システムã®ç‚ºã®ã‚°ãƒ©ãƒ•ィカル管ç†ãƒ„ールã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ê·¸ë£¹ì€ ì‚¬ìš©ìž ê³„ì •ì„ ê´€ë¦¬í•˜ê³  시스템 하드웨어를 설정하는 그래픽 시스템 관리 ë„구 모ìŒìž…니다. </description>
+ <description xml:lang="no">Denne gruppen er en samling av grafiske administrasjonsverktøy for systemet, inkludert brukeradministrasjon og hardwarekonfigurering.</description>
+ <description xml:lang="pt">Este grupo é uma colecção de ferramentas gráficas de administração para o sistema, tal como a gestão das contas de utilizadores e configurar o &apos;hardware&apos; do sistema.</description>
+ <description xml:lang="ru">Эта группа Ñодержит графичеÑкие Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð½Ð°Ñтройки ÑиÑтемы. С помощью Ñтих приложений можно добавить новых пользователей, наÑтроить звук, разрешение Ñкрана, и проч.</description>
+ <description xml:lang="sv">Denna grupp är en samling grafiska administrationsverktyg för systemet, som exempelvis hantering av användarkonton och konfiguration av systemhårdvara.</description>
+ <description xml:lang="zh_CN">这组软件包包括一个系统图形化管ç†å·¥å…·çš„集åˆï¼Œè­¬å¦‚:管ç†ç”¨æˆ·å¸å·å’Œé…置系统硬件。</description>
+ <description xml:lang="zh_TW">這個群組是系統中圖形管ç†å·¥å…·çš„æ”¶é›†ï¼Œä¾‹å¦‚用來管ç†ä½¿ç”¨è€…帳號與 設定系統硬體。</description>
+ <uservisible>true</uservisible>
+ <packagelist>
+ <packagereq type="default">authconfig-gtk</packagereq>
+ <packagereq type="default">redhat-config-date</packagereq>
+ <packagereq type="default">redhat-config-keyboard</packagereq>
+ <packagereq type="default">redhat-config-kickstart</packagereq>
+ <packagereq type="default">redhat-config-language</packagereq>
+ <packagereq type="default">redhat-config-mouse</packagereq>
+ <packagereq type="default">redhat-config-rootpassword</packagereq>
+ <packagereq type="default">redhat-config-soundcard</packagereq>
+ <packagereq type="default">redhat-config-users</packagereq>
+ <packagereq type="default">redhat-config-packages</packagereq>
+ <packagereq type="default">redhat-config-proc</packagereq>
+ <packagereq type="default">redhat-logviewer</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>games</id>
+ <name>Games and Entertainment</name>
+ <name xml:lang="cs">Hry a zábava</name>
+ <name xml:lang="da">Spil og underholdning</name>
+ <name xml:lang="de">Spiele und Zeitvertreib</name>
+ <name xml:lang="es">Juegos y entretenimiento</name>
+ <name xml:lang="fr">Jeux et Divertissements</name>
+ <name xml:lang="is">Leikir og skemmtun</name>
+ <name xml:lang="it">Giochi e divertimento</name>
+ <name xml:lang="ja">ゲームã¨å¨¯æ¥½</name>
+ <name xml:lang="ko">게임과 오ë½</name>
+ <name xml:lang="no">Spill og underholdning</name>
+ <name xml:lang="pt">Jogos e Entretenimento</name>
+ <name xml:lang="ru">Игры и развлечениÑ</name>
+ <name xml:lang="sv">Spel och underhållning</name>
+ <name xml:lang="zh_CN">游æˆå’Œå¨±ä¹</name>
+ <name xml:lang="zh_TW">éŠæˆ²èˆ‡å¨›æ¨‚</name>
+ <description>Various ways to relax and spend your free time.</description>
+ <description xml:lang="cs">Různé způsoby, jak relaxovat a trávit volný Äas.</description>
+ <description xml:lang="da">Diverse måder at slappe af og bruge fritiden.</description>
+ <description xml:lang="de">Verschiedene Möglichkeiten zur Entspannung und zum Zeitvertreib.</description>
+ <description xml:lang="es">Maneras de relajarse y pasar el tiempo libre.</description>
+ <description xml:lang="fr">Différentes manières de vous relaxer et de passer le temps.</description>
+ <description xml:lang="is">Ãmslegt til að slappa af yfir og eyða lausum tíma.</description>
+ <description xml:lang="it">Vari modi per rilassarsi e passare il tempo libero.</description>
+ <description xml:lang="ja">リラックスã—ã¦æš‡ãªæ™‚é–“ã‚’éŽã”ã™ã„ã‚ã„ã‚ãªæ–¹æ³•</description>
+ <description xml:lang="ko">휴ì‹ì„ 취하면서 여가 ì‹œê°„ì„ ë³´ë‚¼ 수 있는 다양한 방법.</description>
+ <description xml:lang="no">Forskjellige måter å slappe av og fordrive fritiden.</description>
+ <description xml:lang="pt">Várias maneiras de relaxar e passar o seu tempo livre.</description>
+ <description xml:lang="ru">Различные ÑпоÑобы раÑÑлабитьÑÑ Ð¸ провеÑти Ñвободное времÑ.</description>
+ <description xml:lang="sv">Diverse sätt att slappna av och fördriva ledig tid.</description>
+ <description xml:lang="zh_CN">放æ¾å’Œæ‰“呿—¶é—´çš„途径。</description>
+ <description xml:lang="zh_TW">è¨±å¤šç¨®è®“æ‚¨æ”¾é¬†ä»¥åŠæ¶ˆç£¨æ™‚間的方法。</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>base</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">fortune-mod</packagereq>
+ <packagereq type="mandatory">joystick</packagereq>
+ <packagereq type="default">Maelstrom</packagereq>
+ <packagereq type="default">chromium</packagereq>
+ <packagereq type="default">freeciv</packagereq>
+ <packagereq type="default">tuxracer</packagereq>
+ <packagereq type="default">xboard</packagereq>
+ <packagereq type="default">gnome-games</packagereq>
+ <packagereq type="default">kdegames</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>ISO8859-2-support</id>
+ <name>ISO8859-2 Support</name>
+ <name xml:lang="cs">Podpora pro ISO8859-2</name>
+ <name xml:lang="da">Understøttelse for ISO8-859-2</name>
+ <name xml:lang="de">ISO8859-2 Support</name>
+ <name xml:lang="es">Soporte ISO8859-2</name>
+ <name xml:lang="fr">Support ISO8859-2 </name>
+ <name xml:lang="is">ISO8859-2 stuðningur</name>
+ <name xml:lang="it">Supporto ISO8859-2</name>
+ <name xml:lang="ja">ISO8859-2 サãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ISO8859-2 ì§€ì›</name>
+ <name xml:lang="no">Støtte for ISO8859-2</name>
+ <name xml:lang="pt">Suporte a ISO8859-2</name>
+ <name xml:lang="ru">Поддержка ISO8859-2</name>
+ <name xml:lang="sv">Stöd för ISO8859-2</name>
+ <name xml:lang="zh_CN">ISO8859-2 支æŒ</name>
+ <name xml:lang="zh_TW">ISO8859-2 支æ´</name>
+ <uservisible>false</uservisible>
+ <packagelist>
+ <packagereq type="mandatory">fonts-ISO8859-2</packagereq>
+ <packagereq type="mandatory">fonts-ISO8859-2-75dpi</packagereq>
+ <packagereq type="mandatory">fonts-ISO8859-2-100dpi</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>ISO8859-9-support</id>
+ <name>ISO8859-9 Support</name>
+ <name xml:lang="cs">Podpora pro ISO8859-9</name>
+ <name xml:lang="da">Understøttelse for ISO-8859-9</name>
+ <name xml:lang="de">ISO8859-9 Support</name>
+ <name xml:lang="es">Soporte ISO8859-9</name>
+ <name xml:lang="fr">Support ISO8859-9 </name>
+ <name xml:lang="is">ISO8859-9 stuðningur</name>
+ <name xml:lang="it">Supporto ISO8859-9</name>
+ <name xml:lang="ja">ISO8859-9 サãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ISO8859-9 ì§€ì›</name>
+ <name xml:lang="no">Støtte for ISO8859-9</name>
+ <name xml:lang="pt">Suporte a ISO8859-9</name>
+ <name xml:lang="ru">Поддержка ISO8859-9</name>
+ <name xml:lang="sv">Stöd för ISO8859-9</name>
+ <name xml:lang="zh_CN">ISO8859-9 支æŒ</name>
+ <name xml:lang="zh_TW">ISO8859-9 支æ´</name>
+ <uservisible>false</uservisible>
+ <packagelist>
+ <packagereq type="mandatory">XFree86-ISO8859-9-75dpi-fonts</packagereq>
+ <packagereq type="mandatory">XFree86-ISO8859-9-100dpi-fonts</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>cyrillic-support</id>
+ <uservisible>false</uservisible>
+ <name>Cyrillic Support</name>
+ <name xml:lang="cs">Podpora pro azbuku</name>
+ <name xml:lang="da">Understøttelse for kyrillisk alfabet</name>
+ <name xml:lang="de">Support für Kyrillisch</name>
+ <name xml:lang="es">Soporte para el cirílico</name>
+ <name xml:lang="fr">Support cyrillique</name>
+ <name xml:lang="is">Kýrílíska</name>
+ <name xml:lang="it">Supporto per il cirillico</name>
+ <name xml:lang="ja">シリル語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">키릴 ë¬¸ìž ì§€ì›</name>
+ <name xml:lang="no">Støtte for kyrillisk</name>
+ <name xml:lang="pt">Suporte a Cirilico</name>
+ <name xml:lang="ru">Поддержка кириллицы</name>
+ <name xml:lang="sv">Stöd för kyrilliskt alfabet</name>
+ <name xml:lang="zh_CN">西里尔语支æŒ</name>
+ <name xml:lang="zh_TW">斯拉夫語支æ´</name>
+ <packagelist>
+ <packagereq type="mandatory">XFree86-cyrillic-fonts</packagereq>
+ <packagereq type="mandatory">fonts-KOI8-R</packagereq>
+ <packagereq type="mandatory">fonts-KOI8-R-100dpi</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>british-support</id>
+ <uservisible>false</uservisible>
+ <name>British Support</name>
+ <name xml:lang="cs">Podpora pro angliÄtinu (Velká Británie)</name>
+ <name xml:lang="da">Understøttelse for britisk engelsk</name>
+ <name xml:lang="de">Support für Englisch (Großbritannien)</name>
+ <name xml:lang="es">Soporte para el inglés británico</name>
+ <name xml:lang="fr">Support anglais</name>
+ <name xml:lang="is">Breska</name>
+ <name xml:lang="it">Supporto per l&apos;inglese britannico</name>
+ <name xml:lang="ja">英国語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ì˜êµ­ì‹ ì˜ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for britisk</name>
+ <name xml:lang="pt">Suporte a Inglês Britânico</name>
+ <name xml:lang="ru">Поддержка британÑкого английÑкого</name>
+ <name xml:lang="sv">Stöd för brittisk engelska</name>
+ <name xml:lang="zh_CN">英å¼è‹±è¯­æ”¯æŒ</name>
+ <name xml:lang="zh_TW">英å¼è‹±æ–‡æ”¯æ´</name>
+ <langonly>en_GB</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-en-gb</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-British</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>canadian-support</id>
+ <uservisible>false</uservisible>
+ <name>Canadian Support</name>
+ <name xml:lang="cs">Podpora pro angliÄtinu (Kanada)</name>
+ <name xml:lang="da">Understøttelse for canadisk engelsk</name>
+ <name xml:lang="de">Support für Englisch (Kanada)</name>
+ <name xml:lang="es">Soporte para el francés de Canadá</name>
+ <name xml:lang="fr">Support canadien</name>
+ <name xml:lang="is">Canadíska</name>
+ <name xml:lang="it">Supporto per il canadese</name>
+ <name xml:lang="ja">カナダ英語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ìºë‚˜ë‹¤ì‹ ì˜ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for kanadisk</name>
+ <name xml:lang="pt">Suporte a Canadiano</name>
+ <name xml:lang="ru">Поддержка канадÑкого английÑкого</name>
+ <name xml:lang="sv">Stöd för kanadensisk engelska</name>
+ <name xml:lang="zh_CN">加拿大å¼è‹±è¯­æ”¯æŒ</name>
+ <name xml:lang="zh_TW">加拿大英文支æ´</name>
+ <langonly>en_CA</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-en-ca</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>catalan-support</id>
+ <uservisible>false</uservisible>
+ <name>Catalan Support</name>
+ <name xml:lang="cs">Podpora pro katalánštinu</name>
+ <name xml:lang="da">Understøttelse for katalansk</name>
+ <name xml:lang="de">Support für Spanisch (Katalanien)</name>
+ <name xml:lang="es">Soporte para el catalán</name>
+ <name xml:lang="fr">Support catalan</name>
+ <name xml:lang="is">Catalónska</name>
+ <name xml:lang="it">Supporto per il catalano</name>
+ <name xml:lang="ja">カタルーニャ語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">카탈로니아어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for katalansk</name>
+ <name xml:lang="pt">Suporte a Catalão</name>
+ <name xml:lang="ru">Поддержка каталонÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för katalanska</name>
+ <name xml:lang="zh_CN">加泰隆语支æŒ</name>
+ <name xml:lang="zh_TW">加泰隆語支æ´</name>
+ <langonly>ca</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-ca</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Catalan</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>brazilian-support</id>
+ <uservisible>false</uservisible>
+ <name>Brazilian Support</name>
+ <name xml:lang="cs">Podpora pro portugalštinu (Brazílie)</name>
+ <name xml:lang="da">Understøttelse for brasiliansk portugisisk</name>
+ <name xml:lang="de">Support für Portugiesisch (Brasilien)</name>
+ <name xml:lang="es">Soporte para el brasileño</name>
+ <name xml:lang="fr">Support brésilien</name>
+ <name xml:lang="is">Brasílíska</name>
+ <name xml:lang="it">Supporto per il brasiliano</name>
+ <name xml:lang="ja">ブラジル語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">브ë¼ì§ˆì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for portugisisk(Brasil)</name>
+ <name xml:lang="pt">Suporte a Português do Brasil</name>
+ <name xml:lang="ru">Поддержка бразильÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för brasiliansk portugisiska</name>
+ <name xml:lang="zh_CN">巴西语支æŒ</name>
+ <name xml:lang="zh_TW">巴西å¼è‘¡è„牙語支æ´</name>
+ <langonly>pt_BR</langonly>
+ <grouplist>
+ <groupreq>portuguese-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">aspell-pt_BR</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Brazil</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>czech-support</id>
+ <uservisible>false</uservisible>
+ <name>Czech Support</name>
+ <name xml:lang="cs">Podpora pro ÄeÅ¡tinu</name>
+ <name xml:lang="da">Understøttelse for tjekkisk</name>
+ <name xml:lang="de">Support für Tschechisch</name>
+ <name xml:lang="es">Soporte para el checo</name>
+ <name xml:lang="fr">Support tchèque</name>
+ <name xml:lang="is">Tjékkneska</name>
+ <name xml:lang="it">Supporto per il ceco</name>
+ <name xml:lang="ja">ãƒã‚§ã‚³èªžã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">체코어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for tsjekkisk</name>
+ <name xml:lang="pt">Suporte a Checo</name>
+ <name xml:lang="ru">Поддержка чешÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för tjeckiska</name>
+ <name xml:lang="zh_CN">æ·å…‹è¯­æ”¯æŒ</name>
+ <name xml:lang="zh_TW">æ·å…‹èªžæ”¯æ´</name>
+ <langonly>cz</langonly>
+ <grouplist>
+ <groupreq>ISO8859-2-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Czech</packagereq>
+ <packagereq type="mandatory">man-pages-cs</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>danish-support</id>
+ <uservisible>false</uservisible>
+ <name>Danish Support</name>
+ <name xml:lang="cs">Podpora pro dánštinu</name>
+ <name xml:lang="da">Understøttelse for dansk</name>
+ <name xml:lang="de">Support für Dänisch</name>
+ <name xml:lang="es">Soporte para el danés</name>
+ <name xml:lang="fr">Support danois</name>
+ <name xml:lang="is">Danska</name>
+ <name xml:lang="it">Supporto per il danese</name>
+ <name xml:lang="ja">デンマーク語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ë´ë§ˆí¬ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for dansk</name>
+ <name xml:lang="pt">Suporte a Dinamarquês</name>
+ <name xml:lang="ru">Поддержка датÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för danska</name>
+ <name xml:lang="zh_CN">丹麦语支æŒ</name>
+ <name xml:lang="zh_TW">丹麥語支æ´</name>
+ <langonly>da_DK</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-da</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Danish</packagereq>
+ <packagereq type="mandatory">man-pages-da</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>dutch-support</id>
+ <uservisible>false</uservisible>
+ <name>Dutch Support</name>
+ <name xml:lang="cs">Podpora holandštiny</name>
+ <name xml:lang="da">Understøttelse for hollandsk</name>
+ <name xml:lang="de">Support für Holländisch</name>
+ <name xml:lang="es">Soporte para el holandés</name>
+ <name xml:lang="fr">Support hollandais</name>
+ <name xml:lang="is">Hollenska</name>
+ <name xml:lang="it">Supporto per l&apos;olandese</name>
+ <name xml:lang="ja">オランダ語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">네ë¸ëž€ë“œì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for nederlandsk</name>
+ <name xml:lang="pt">Suporte a Holandês</name>
+ <name xml:lang="ru">Поддержка датÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för nederländska</name>
+ <name xml:lang="zh_CN">è·å…°è¯­æ”¯æŒ</name>
+ <name xml:lang="zh_TW">è·è˜­èªžæ”¯æ´</name>
+ <langonly>nl</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-nl</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Dutch</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>estonian-support</id>
+ <uservisible>false</uservisible>
+ <name>Estonian Support</name>
+ <name xml:lang="cs">Podpora pro estonštinu</name>
+ <name xml:lang="da">Understøttelse for estisk</name>
+ <name xml:lang="de">Support für Estonisch</name>
+ <name xml:lang="es">Soporte para el estonio</name>
+ <name xml:lang="fr">Support estonien</name>
+ <name xml:lang="is">Eistneska</name>
+ <name xml:lang="it">Supporto per l&apos;estone</name>
+ <name xml:lang="ja">エストニア語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ì—스토니아어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for estlandsk</name>
+ <name xml:lang="pt">Suporte a Estónio</name>
+ <name xml:lang="ru">Поддержка ÑÑтонÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för estniska</name>
+ <name xml:lang="zh_CN">爱沙尼亚语支æŒ</name>
+ <name xml:lang="zh_TW">愛沙尼亞語支æ´</name>
+ <langonly>et_EE</langonly>
+ <grouplist>
+ <groupreq>ISO8859-2-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Estonian</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>finish-support</id>
+ <uservisible>false</uservisible>
+ <name>Finnish Support</name>
+ <name xml:lang="cs">Podpora pro finštinu</name>
+ <name xml:lang="da">Understøttelse for finsk</name>
+ <name xml:lang="de">Support für Finnisch</name>
+ <name xml:lang="es">Finalizar el soporte</name>
+ <name xml:lang="fr">Support finnois</name>
+ <name xml:lang="is">Finnska</name>
+ <name xml:lang="it">Supporto per il finlandese</name>
+ <name xml:lang="ja">フィンランド語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">핀란드어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for finsk</name>
+ <name xml:lang="pt">Suporte a Finlandês</name>
+ <name xml:lang="ru">Поддержка финÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för finska</name>
+ <name xml:lang="zh_CN">芬兰语支æŒ</name>
+ <name xml:lang="zh_TW">芬蘭語支æ´</name>
+ <langonly>fi_FI</langonly>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Finnish</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>german-support</id>
+ <uservisible>false</uservisible>
+ <name>German Support</name>
+ <name xml:lang="cs">Podpora pro nÄ›mÄinu</name>
+ <name xml:lang="da">Understøttelse for tysk</name>
+ <name xml:lang="de">Support für Deutsch</name>
+ <name xml:lang="es">Soporte para el alemán</name>
+ <name xml:lang="fr">Support allemand</name>
+ <name xml:lang="is">Þýska</name>
+ <name xml:lang="it">Supporto per il tedesco</name>
+ <name xml:lang="ja">ドイツ語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ë…ì¼ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for tysk</name>
+ <name xml:lang="pt">Suporte a Alemão</name>
+ <name xml:lang="ru">Поддержка немецкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för tyska</name>
+ <name xml:lang="zh_CN">德语支æŒ</name>
+ <name xml:lang="zh_TW">德語支æ´</name>
+ <langonly>de_DE</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-de</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-German</packagereq>
+ <packagereq type="mandatory">man-pages-de</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>greek-support</id>
+ <uservisible>false</uservisible>
+ <name>Greek Support</name>
+ <name xml:lang="cs">Podpora pro Å™eÄtinu</name>
+ <name xml:lang="da">Understøttelse for græsk</name>
+ <name xml:lang="de">Support für Griechisch</name>
+ <name xml:lang="es">Soporte para el griego</name>
+ <name xml:lang="fr">Support grec</name>
+ <name xml:lang="is">Gríska</name>
+ <name xml:lang="it">Supporto per il greco</name>
+ <name xml:lang="ja">ギリシャ語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">그리스어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for gresk</name>
+ <name xml:lang="pt">Suporte a Grego</name>
+ <name xml:lang="ru">Поддержка гречеÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för grekiska</name>
+ <name xml:lang="zh_CN">希腊语支æŒ</name>
+ <name xml:lang="zh_TW">希臘語支æ´</name>
+ <langonly>el_GR</langonly>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Greek</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>hebrew-support</id>
+ <uservisible>false</uservisible>
+ <name>Hebrew Support</name>
+ <name xml:lang="cs">Podpora pro hebrejštinu</name>
+ <name xml:lang="da">Understøttelse for hebraisk</name>
+ <name xml:lang="de">Support für Hebräisch</name>
+ <name xml:lang="es">Soporte para el hebreo</name>
+ <name xml:lang="fr">Support hébreu</name>
+ <name xml:lang="is">Hebreska</name>
+ <name xml:lang="it">Supporto per l&apos;ebraico</name>
+ <name xml:lang="ja">ヘブライ語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">헤브루어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for hebraisk</name>
+ <name xml:lang="pt">Suporte a Hebreu</name>
+ <name xml:lang="ru">Поддержка Ñзыка иврит</name>
+ <name xml:lang="sv">Stöd för hebreiska</name>
+ <name xml:lang="zh_CN">希伯æ¥è¯­æ”¯æŒ</name>
+ <name xml:lang="zh_TW">希伯來語支æ´</name>
+ <langonly>he_IL</langonly>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Hebrew</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>hungarian-support</id>
+ <uservisible>false</uservisible>
+ <name>Hungarian Support</name>
+ <name xml:lang="cs">Podpora pro maÄarÅ¡tinu</name>
+ <name xml:lang="da">Understøttelse for ungarnsk</name>
+ <name xml:lang="de">Support für Ungarisch</name>
+ <name xml:lang="es">Soporte para el húngaro</name>
+ <name xml:lang="fr">Support hongrois</name>
+ <name xml:lang="is">Ungverska</name>
+ <name xml:lang="it">Supporto per l&apos;ungherese</name>
+ <name xml:lang="ja">ãƒãƒ³ã‚¬ãƒªãƒ¼èªžã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">í—가리아어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for ungarsk</name>
+ <name xml:lang="pt">Suporte a Hungaro</name>
+ <name xml:lang="ru">Поддержка венгерÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för ungerska</name>
+ <name xml:lang="zh_CN">匈牙利语支æŒ</name>
+ <name xml:lang="zh_TW">匈牙利語支æ´</name>
+ <langonly>hu_HU</langonly>
+ <grouplist>
+ <groupreq>ISO8859-2-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Hungarian</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>spanish-support</id>
+ <uservisible>false</uservisible>
+ <name>Spanish Support</name>
+ <name xml:lang="cs">Podpora pro španělštinu</name>
+ <name xml:lang="da">Understøttelse for spansk</name>
+ <name xml:lang="de">Support für Spanisch</name>
+ <name xml:lang="es">Soporte para el español</name>
+ <name xml:lang="fr">Support espagnol</name>
+ <name xml:lang="is">Spánska</name>
+ <name xml:lang="it">Supporto per lo spagnolo</name>
+ <name xml:lang="ja">スペイン語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">스페ì¸ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for spansk</name>
+ <name xml:lang="pt">Suporte a Espanhol</name>
+ <name xml:lang="ru">Поддержка иÑпанÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för spanska</name>
+ <name xml:lang="zh_CN">西ç­ç‰™è¯­æ”¯æŒ</name>
+ <name xml:lang="zh_TW">西ç­ç‰™èªžæ”¯æ´</name>
+ <langonly>es_ES</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-es</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Spanish</packagereq>
+ <packagereq type="mandatory">man-pages-es</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>french-support</id>
+ <uservisible>false</uservisible>
+ <name>French Support</name>
+ <name xml:lang="cs">Podpora pro francouzštinu</name>
+ <name xml:lang="da">Understøttelse for fransk</name>
+ <name xml:lang="de">Support für Französisch</name>
+ <name xml:lang="es">Soporte para el francés</name>
+ <name xml:lang="fr">Support français</name>
+ <name xml:lang="is">Franska</name>
+ <name xml:lang="it">Supporto per il francese</name>
+ <name xml:lang="ja">フランス語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">프랑스어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for fransk</name>
+ <name xml:lang="pt">Suporte a Francês</name>
+ <name xml:lang="ru">Поддержка французÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för franska</name>
+ <name xml:lang="zh_CN">法语支æŒ</name>
+ <name xml:lang="zh_TW">法語支æ´</name>
+ <langonly>fr_FR</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-fr</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-French</packagereq>
+ <packagereq type="mandatory">man-pages-fr</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>icelandic-support</id>
+ <uservisible>false</uservisible>
+ <name>Icelandic Support</name>
+ <name xml:lang="cs">Podpora pro islandštinu</name>
+ <name xml:lang="da">Understøttelse for islandsk</name>
+ <name xml:lang="de">Support für Isländisch</name>
+ <name xml:lang="es">Soporte para el islandés</name>
+ <name xml:lang="fr">Support islandais</name>
+ <name xml:lang="is">Ãslenska</name>
+ <name xml:lang="it">Supporto per l&apos;islandese</name>
+ <name xml:lang="ja">アイスランド語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ì•„ì´ìŠ¬ëž€ë“œì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for islandsk</name>
+ <name xml:lang="pt">Suporte a Islandês</name>
+ <name xml:lang="ru">Поддержка иÑландÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för isländska</name>
+ <name xml:lang="zh_CN">冰岛语支æŒ</name>
+ <name xml:lang="zh_TW">冰島語支æ´</name>
+ <langonly>is_IS</langonly>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Icelandic</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>italian-support</id>
+ <uservisible>false</uservisible>
+ <name>Italian Support</name>
+ <name xml:lang="cs">Podpora pro italštinu</name>
+ <name xml:lang="da">Understøttelse for italiensk</name>
+ <name xml:lang="de">Support für Italienisch</name>
+ <name xml:lang="es">Soporte para el italiano</name>
+ <name xml:lang="fr">Support italien</name>
+ <name xml:lang="is">Ãtalska</name>
+ <name xml:lang="it">Supporto per l&apos;italiano</name>
+ <name xml:lang="ja">イタリア語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ì´íƒˆë¦¬ì•„ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for italiensk</name>
+ <name xml:lang="pt">Suporte a Italiano</name>
+ <name xml:lang="ru">Поддержка итальÑнÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för italienska</name>
+ <name xml:lang="zh_CN">æ„大利语支æŒ</name>
+ <name xml:lang="zh_TW">義大利文支æ´</name>
+ <langonly>it_IT</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-it</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Italian</packagereq>
+ <packagereq type="mandatory">man-pages-it</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>korean-support</id>
+ <uservisible>false</uservisible>
+ <name>Korean Support</name>
+ <name xml:lang="cs">Podpora pro korejštinu</name>
+ <name xml:lang="da">Understøttelse for koreansk</name>
+ <name xml:lang="de">Support für Koreanisch</name>
+ <name xml:lang="es">Soporte para el coreano</name>
+ <name xml:lang="fr">Support coréen</name>
+ <name xml:lang="is">Kóreska</name>
+ <name xml:lang="it">Supporto per il coreano</name>
+ <name xml:lang="ja">韓国語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">한국어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for koreansk</name>
+ <name xml:lang="pt">Suporte a Coreano</name>
+ <name xml:lang="ru">Поддержка корейÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för koreanska</name>
+ <name xml:lang="zh_CN">韩文支æŒ</name>
+ <name xml:lang="zh_TW">韓文支æ´</name>
+ <langonly>ko_KR</langonly>
+ <packagelist>
+ <packagereq type="mandatory">nvi-m17n</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Korean</packagereq>
+ <packagereq type="mandatory">man-pages-ko</packagereq>
+ <packagereq type="mandatory">kWnn-devel</packagereq>
+ <packagereq type="mandatory">ami</packagereq>
+ <packagereq type="mandatory">kWnn</packagereq>
+ <packagereq type="mandatory">hanterm-xf</packagereq>
+ <packagereq type="mandatory">h2ps</packagereq>
+ <packagereq type="mandatory">nhpf</packagereq>
+ <packagereq type="mandatory">ttfonts-ko</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>norwegian-support</id>
+ <uservisible>false</uservisible>
+ <name>Norwegian Support</name>
+ <name xml:lang="cs">Podpora pro norštinu</name>
+ <name xml:lang="da">Understøttelse for norsk</name>
+ <name xml:lang="de">Support für Norwegisch</name>
+ <name xml:lang="es">Soporte para el noruego</name>
+ <name xml:lang="fr">Support norvégien</name>
+ <name xml:lang="is">Norska</name>
+ <name xml:lang="it">Supporto per il norvegese</name>
+ <name xml:lang="ja">ノルウェー語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">노르웨ì´ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for norsk</name>
+ <name xml:lang="pt">Suporte a Norueguês</name>
+ <name xml:lang="ru">Поддержка норвежÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för norska</name>
+ <name xml:lang="zh_CN">æŒªå¨æ”¯æŒ</name>
+ <name xml:lang="zh_TW">挪å¨èªžæ”¯æ´</name>
+ <langonly>no_NO</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-no</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Norwegian</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Norwegian-Nynorsk</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>polish-support</id>
+ <uservisible>false</uservisible>
+ <name>Polish Support</name>
+ <name xml:lang="cs">Podpora pro polštinu</name>
+ <name xml:lang="da">Understøttelse for polsk</name>
+ <name xml:lang="de">Support für Polnisch</name>
+ <name xml:lang="es">Soporte para el polaco</name>
+ <name xml:lang="fr">Support polonais</name>
+ <name xml:lang="is">Pólska</name>
+ <name xml:lang="it">Supporto per il polacco</name>
+ <name xml:lang="ja">ãƒãƒ¼ãƒ©ãƒ³ãƒ‰èªžã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">í´ëž€ë“œì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for polsk</name>
+ <name xml:lang="pt">Suporte a Polaco</name>
+ <name xml:lang="ru">Поддержка польÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för polska</name>
+ <name xml:lang="zh_CN">波兰语支æŒ</name>
+ <name xml:lang="zh_TW">波蘭語支æ´</name>
+ <langonly>pl_PL</langonly>
+ <grouplist>
+ <groupreq>ISO8859-2-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Polish</packagereq>
+ <packagereq type="mandatory">man-pages-pl</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>portuguese-support</id>
+ <uservisible>false</uservisible>
+ <name>Portuguese Support</name>
+ <name xml:lang="cs">Podpora pro portugalštinu</name>
+ <name xml:lang="da">Understøttelse for portugisisk</name>
+ <name xml:lang="de">Support für Portugiesisch</name>
+ <name xml:lang="es">Soporte para el portugués</name>
+ <name xml:lang="fr">Support portugais</name>
+ <name xml:lang="is">Portúgalska</name>
+ <name xml:lang="it">Supporto per il portoghese</name>
+ <name xml:lang="ja">ãƒãƒ«ãƒˆã‚¬ãƒ«èªžã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">í¬ë¥´íˆ¬ê°ˆì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for portugisisk</name>
+ <name xml:lang="pt">Suporte a Português</name>
+ <name xml:lang="ru">Поддержка португальÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för portugisiska</name>
+ <name xml:lang="zh_CN">è‘¡è„牙语支æŒ</name>
+ <name xml:lang="zh_TW">è‘¡è„牙語支æ´</name>
+ <langonly>pt</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-pt</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Portuguese</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>romanian-support</id>
+ <uservisible>false</uservisible>
+ <name>Romanian Support</name>
+ <name xml:lang="cs">Podpora pro rumunštinu</name>
+ <name xml:lang="da">Understøttelse for rumænsk</name>
+ <name xml:lang="de">Support für Rumänisch</name>
+ <name xml:lang="es">Soporte para el rumano</name>
+ <name xml:lang="fr">Support roumain</name>
+ <name xml:lang="is">Rómanska</name>
+ <name xml:lang="it">Supporto per il romeno</name>
+ <name xml:lang="ja">ルーマニア語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">루마니아어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for rumensk</name>
+ <name xml:lang="pt">Suporte a Romeno</name>
+ <name xml:lang="ru">Поддержка румынÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för rumänska</name>
+ <name xml:lang="zh_CN">罗马尼亚语支æŒ</name>
+ <name xml:lang="zh_TW">羅馬尼亞語支æ´</name>
+ <langonly>ro_RO</langonly>
+ <grouplist>
+ <groupreq>ISO8859-2-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Romanian</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>russian-support</id>
+ <uservisible>false</uservisible>
+ <name>Russian Support</name>
+ <name xml:lang="cs">Podpora pro ruštinu</name>
+ <name xml:lang="da">Understøttelse for russisk</name>
+ <name xml:lang="de">Support für Russisch</name>
+ <name xml:lang="es">Soporte para el ruso</name>
+ <name xml:lang="fr">Support russe</name>
+ <name xml:lang="is">Rússnenska</name>
+ <name xml:lang="it">Supporto per il russo</name>
+ <name xml:lang="ja">ロシア語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">러시아어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for russisk</name>
+ <name xml:lang="pt">Suporte a Russo</name>
+ <name xml:lang="ru">Поддержка руÑÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för ryska</name>
+ <name xml:lang="zh_CN">俄语支æŒ</name>
+ <name xml:lang="zh_TW">俄語支æ´</name>
+ <langonly>ru_RU</langonly>
+ <grouplist>
+ <groupreq>cyrillic-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Russian</packagereq>
+ <packagereq type="mandatory">man-pages-ru</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>serbian-support</id>
+ <uservisible>false</uservisible>
+ <name>Serbian Support</name>
+ <name xml:lang="cs">Podpora srbštiny</name>
+ <name xml:lang="da">Understøttelse for serbisk</name>
+ <name xml:lang="de">Support für Serbisch</name>
+ <name xml:lang="es">Soporte para el serbio</name>
+ <name xml:lang="fr">Support serbe</name>
+ <name xml:lang="is">Serbneska</name>
+ <name xml:lang="it">Supporto per il serbo</name>
+ <name xml:lang="ja">シベリア語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">세르비아어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for serbisk</name>
+ <name xml:lang="pt">Suporte a Sérvio</name>
+ <name xml:lang="ru">Поддержка ÑербÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för serbiska</name>
+ <name xml:lang="zh_CN">塞尔维亚语支æŒ</name>
+ <name xml:lang="zh_TW">賽爾維亞語支æ´</name>
+ <langonly>sr_YU</langonly>
+ <grouplist>
+ <groupreq>ISO8859-2-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Serbian</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>slovak-support</id>
+ <uservisible>false</uservisible>
+ <name>Slovak Support</name>
+ <name xml:lang="cs">Podpora pro slovenštinu</name>
+ <name xml:lang="da">Understøttelse for slovakisk</name>
+ <name xml:lang="de">Support für Slowakisch</name>
+ <name xml:lang="es">Soporte para el eslovaco</name>
+ <name xml:lang="fr">Support slovaque</name>
+ <name xml:lang="is">Slóvak</name>
+ <name xml:lang="it">Supporto per lo slovacco</name>
+ <name xml:lang="ja">スロãƒã‚­ã‚¢èªžã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">슬로바키아어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for slovakisk</name>
+ <name xml:lang="pt">Suporte a Eslovaco</name>
+ <name xml:lang="ru">Поддержка Ñловацкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för slovakiska</name>
+ <name xml:lang="zh_CN">斯洛ä¼å…‹è¯­æ”¯æŒ</name>
+ <name xml:lang="zh_TW">斯洛ä¼å…‹èªžæ”¯æ´</name>
+ <langonly>sk_SK</langonly>
+ <grouplist>
+ <groupreq>ISO8859-2-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Slovak</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>slovenian-support</id>
+ <uservisible>false</uservisible>
+ <name>Slovenian Support</name>
+ <name xml:lang="cs">Podpora pro slovinštinu</name>
+ <name xml:lang="da">Understøttelse for slovensk</name>
+ <name xml:lang="de">Support für Slowenisch</name>
+ <name xml:lang="es">Soporte para el eslovenio</name>
+ <name xml:lang="fr">Support slovène</name>
+ <name xml:lang="is">Slóvnenska</name>
+ <name xml:lang="it">Supporto per lo sloveno</name>
+ <name xml:lang="ja">スロベニア語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">슬로베ì´ì•„ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for slovensk</name>
+ <name xml:lang="pt">Suporte a Eslovénio</name>
+ <name xml:lang="ru">Поддержка ÑловенÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för slovenska</name>
+ <name xml:lang="zh_CN">斯洛文尼亚语支æŒ</name>
+ <name xml:lang="zh_TW">斯洛法尼亞語支æ´</name>
+ <langonly>sl_SI</langonly>
+ <grouplist>
+ <groupreq>ISO8859-2-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Slovenian</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>swedish-support</id>
+ <uservisible>false</uservisible>
+ <name>Swedish Support</name>
+ <name xml:lang="cs">Podpora pro švédštinu</name>
+ <name xml:lang="da">Understøttelse for svensk</name>
+ <name xml:lang="de">Support für Schwedisch</name>
+ <name xml:lang="es">Soporte para el sueco</name>
+ <name xml:lang="fr">Support suédois</name>
+ <name xml:lang="is">Sænska</name>
+ <name xml:lang="it">Supporto per lo svedese</name>
+ <name xml:lang="ja">スウェデーン語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">스웨ë´ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for svensk</name>
+ <name xml:lang="pt">Suporte a Sueco</name>
+ <name xml:lang="ru">Поддержка шведÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för svenska</name>
+ <name xml:lang="zh_CN">瑞典语支æŒ</name>
+ <name xml:lang="zh_TW">瑞典語支æ´</name>
+ <langonly>sv_SE</langonly>
+ <packagelist>
+ <packagereq type="mandatory">aspell-sv</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Swedish</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>turkish-support</id>
+ <uservisible>false</uservisible>
+ <name>Turkish Support</name>
+ <name xml:lang="cs">Podpora pro tureÄtinu</name>
+ <name xml:lang="da">Understøttelse for tyrkisk</name>
+ <name xml:lang="de">Support für Türkisch</name>
+ <name xml:lang="es">Soporte para el turco</name>
+ <name xml:lang="fr">Support turc</name>
+ <name xml:lang="is">Tyrkneska</name>
+ <name xml:lang="it">Supporto per il turco</name>
+ <name xml:lang="ja">トルコ語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">터키어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for Tyrkisk</name>
+ <name xml:lang="pt">Suporte a Turco</name>
+ <name xml:lang="ru">Поддержка турецкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för turkiska</name>
+ <name xml:lang="zh_CN">土耳其语支æŒ</name>
+ <name xml:lang="zh_TW">土耳其語支æ´</name>
+ <langonly>tr_TR</langonly>
+ <grouplist>
+ <groupreq>ISO8859-9-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Turkish</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>ukrainian-support</id>
+ <uservisible>false</uservisible>
+ <name>Ukrainian Support</name>
+ <name xml:lang="cs">Podpora pro ukrajinštinu</name>
+ <name xml:lang="da">Understøttelse for ukrainsk</name>
+ <name xml:lang="de">Support für Ukrainisch</name>
+ <name xml:lang="es">Soporte para el ucraniano </name>
+ <name xml:lang="fr">Support ukrainien</name>
+ <name xml:lang="is">Úkraínska</name>
+ <name xml:lang="it">Supporto per l&apos;ucraino</name>
+ <name xml:lang="ja">ウクライナ語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ìš°í¬ë¼ì´ë‚˜ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for ukrainsk</name>
+ <name xml:lang="pt">Suporte a Ucraniano</name>
+ <name xml:lang="ru">Поддержка украинÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för ukrainska</name>
+ <name xml:lang="zh_CN">乌克兰语支æŒ</name>
+ <name xml:lang="zh_TW">çƒå…‹è˜­èªžæ”¯æ´</name>
+ <langonly>uk_UA</langonly>
+ <grouplist>
+ <groupreq>cyrillic-support</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Ukrainian</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>chinese-support</id>
+ <uservisible>false</uservisible>
+ <name>Chinese Support</name>
+ <name xml:lang="cs">Podpora pro ÄínÅ¡tinu</name>
+ <name xml:lang="da">Understøttelse for kinesisk</name>
+ <name xml:lang="de">Support für Chinesisch</name>
+ <name xml:lang="es">Soporte para el chino </name>
+ <name xml:lang="fr">Support chinois</name>
+ <name xml:lang="is">Kínverska</name>
+ <name xml:lang="it">Supporto per il cinese</name>
+ <name xml:lang="ja">中国語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">중국어 ì§€ì›</name>
+ <name xml:lang="no">Støtte for kinesisk</name>
+ <name xml:lang="pt">Suporte a Chinês</name>
+ <name xml:lang="ru">Поддержка китайÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för kinesiska</name>
+ <name xml:lang="zh_CN">中文支æŒ</name>
+ <name xml:lang="zh_TW">中文支æ´</name>
+ <langonly>zh</langonly>
+ <packagelist>
+ <packagereq type="mandatory">nvi-m17n</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Chinese</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Chinese-Big5</packagereq>
+ <packagereq type="mandatory">man-pages-ko</packagereq>
+ <packagereq type="mandatory">cWnn-devel</packagereq>
+ <packagereq type="mandatory">libtabe-devel</packagereq>
+ <packagereq type="mandatory">cWnn</packagereq>
+ <packagereq type="mandatory">miniChinput</packagereq>
+ <packagereq type="mandatory">stardict</packagereq>
+ <packagereq type="mandatory">tWnn</packagereq>
+ <packagereq type="mandatory">ttfonts-zh_TW</packagereq>
+ <packagereq type="mandatory">ttfonts-zh_CN</packagereq>
+ <packagereq type="mandatory">taipeifonts</packagereq>
+ <packagereq type="mandatory">xcin</packagereq>
+ <packagereq type="mandatory">bg5ps</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>japanese-support</id>
+ <uservisible>false</uservisible>
+ <name>Japanese Support</name>
+ <name xml:lang="cs">Podpora pro japonštinu</name>
+ <name xml:lang="da">Understøttelse for japansk</name>
+ <name xml:lang="de">Support für Japanisch</name>
+ <name xml:lang="es">Soporte para el japonés</name>
+ <name xml:lang="fr">Support japonais</name>
+ <name xml:lang="is">Japanska</name>
+ <name xml:lang="it">Supporto per il giapponese</name>
+ <name xml:lang="ja">日本語ã®ã‚µãƒãƒ¼ãƒˆ</name>
+ <name xml:lang="ko">ì¼ë³¸ì–´ ì§€ì›</name>
+ <name xml:lang="no">Støtte for japansk</name>
+ <name xml:lang="pt">Suporte a Japonês</name>
+ <name xml:lang="ru">Поддержка ÑпонÑкого Ñзыка</name>
+ <name xml:lang="sv">Stöd för japanska</name>
+ <name xml:lang="zh_CN">日语支æŒ</name>
+ <name xml:lang="zh_TW">日文支æ´</name>
+ <langonly>ja_JP</langonly>
+ <packagelist>
+ <packagereq type="mandatory">Canna</packagereq>
+ <packagereq type="mandatory">jcode.pl</packagereq>
+ <packagereq type="mandatory">kakasi-dict</packagereq>
+ <packagereq type="mandatory">kcc</packagereq>
+ <packagereq type="mandatory">kon2</packagereq>
+ <packagereq type="mandatory">kon2-fonts</packagereq>
+ <packagereq type="mandatory">lv</packagereq>
+ <packagereq type="mandatory">nvi-m17n</packagereq>
+ <packagereq type="mandatory">nvi-m17n-canna</packagereq>
+ <packagereq type="mandatory">perl-NKF</packagereq>
+ <packagereq type="mandatory">perl-Text-Kakasi</packagereq>
+ <packagereq type="mandatory">nkf</packagereq>
+ <packagereq type="mandatory">ttfonts-ja</packagereq>
+ <packagereq type="mandatory">watanabe-vf</packagereq>
+ <packagereq type="optional" requires="kdelibs">kde-i18n-Japanese</packagereq>
+ <packagereq type="mandatory">fonts-ja</packagereq>
+ <packagereq type="mandatory">jisksp14</packagereq>
+ <packagereq type="mandatory">jisksp16-1990</packagereq>
+ <packagereq type="mandatory">FreeWnn</packagereq>
+ <packagereq type="mandatory">kappa20</packagereq>
+ <packagereq type="mandatory">kinput2-canna-wnn6</packagereq>
+ <packagereq type="mandatory">knm_new</packagereq>
+ <packagereq type="mandatory">kterm</packagereq>
+ <packagereq type="mandatory">skkdic</packagereq>
+ <packagereq type="mandatory">skkinput</packagereq>
+ <packagereq type="mandatory">man-pages-ja</packagereq>
+ <packagereq type="mandatory">kakasi-devel</packagereq>
+ <packagereq type="mandatory">Wnn6-SDK-devel</packagereq>
+ <packagereq type="mandatory">namazu-devel</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>development-tools</id>
+ <name>Development Tools</name>
+ <name xml:lang="cs">Vývojové nástroje</name>
+ <name xml:lang="da">Udviklingsværktøjer</name>
+ <name xml:lang="de">Entwicklungstools</name>
+ <name xml:lang="es">Herramientas de desarrollo</name>
+ <name xml:lang="fr">Outils de développement</name>
+ <name xml:lang="is">Þróunartól</name>
+ <name xml:lang="it">Strumenti di sviluppo</name>
+ <name xml:lang="ja">開発ツール</name>
+ <name xml:lang="ko">개발용 ë„구</name>
+ <name xml:lang="no">Utviklingsverktøy</name>
+ <name xml:lang="pt">Ferramentas de Desenvolvimento</name>
+ <name xml:lang="ru">СредÑтва разработки</name>
+ <name xml:lang="sv">Utvecklingsverktyg</name>
+ <name xml:lang="zh_CN">å¼€å‘工具</name>
+ <name xml:lang="zh_TW">開發工具</name>
+ <description>These tools include core development tools such as automake, gcc, perl, python, and debuggers.</description>
+ <description xml:lang="cs">Tyto nástroje zahrnují základní vývojové nástroje jako automake, gcc, perl, python a ladící nástroje.</description>
+ <description xml:lang="da">Disse værktøjer inkluderer basale udviklingsværktøjer som fx automake, gcc, perl, python og fejlsøgningsværktøjer.</description>
+ <description xml:lang="de">Zu diesen Tools gehören grundlegende Entwicklungstools wie automake, gcc, perl, python und debuggers.</description>
+ <description xml:lang="es">Estas herramientas incluyen herramientas de desarrollo de núcleo como por ejemplo automake, gcc, perl, python y depuradores.</description>
+ <description xml:lang="fr">Ces outils comprennent des outils de développement mémoire comme automake, gcc, perl, python, ainsi que des débogueurs.</description>
+ <description xml:lang="is">Þessi tól eru meðal annars automake, gcc, perl, python og aflúsunartól.</description>
+ <description xml:lang="it">Questi strumenti includono i principali tool di sviluppo tra cui automake, gcc, perl, python, e i debugger.</description>
+ <description xml:lang="ja">ã“れらã®ãƒ„ールã«ã¯ã€automake, gcc, perl, python, åŠã³ãƒ‡ãƒãƒƒã‚¬ãªã©ã®ã‚³ã‚¢é–‹ç™ºãƒ„ール㌠å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ ë„구ì—는 automake, gcc, perl, pythonê³¼ 디버거와 ê°™ì€ í•µì‹¬ 개발용 ë„구가 í¬í•¨ë˜ì–´ 있습니다.</description>
+ <description xml:lang="no">Disse verktøyene inkluderer utviklingsverktøy som automake, gcc, perl, python og avlusere.</description>
+ <description xml:lang="pt">Estas ferramentas incluem as ferramentas básicas de desenvolvimento como o automake, o gcc, o perl, o python e os depuradores.</description>
+ <description xml:lang="ru">Эти ÑредÑтва включают оÑновные ÑредÑтва разработки, такие как automake, gcc, perl, python и отладчики.</description>
+ <description xml:lang="sv">Dessa verktyg inkluderar kärnutvecklingsverktyg som exempelvis automake, gcc, perl, python och felsökningsverktyg.</description>
+ <description xml:lang="zh_CN">这些工具包括 automakeã€gccã€perlã€python 和调试器之类的核心开å‘工具。</description>
+ <description xml:lang="zh_TW">這些工具包括主è¦çš„開發工具,例如 automake, gcc, perl, python ä»¥åŠ debuggers。</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>development-libs</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="optional">ElectricFence</packagereq>
+ <packagereq type="mandatory">autoconf</packagereq>
+ <packagereq type="default">automake14</packagereq>
+ <packagereq type="default">automake15</packagereq>
+ <packagereq type="mandatory">automake</packagereq>
+ <packagereq type="mandatory">binutils</packagereq>
+ <packagereq type="mandatory">bison</packagereq>
+ <packagereq type="mandatory">byacc</packagereq>
+ <packagereq type="mandatory">cdecl</packagereq>
+ <packagereq type="optional">cproto</packagereq>
+ <packagereq type="default">cvs</packagereq>
+ <packagereq type="optional">ddd</packagereq>
+ <packagereq type="mandatory">dev86</packagereq>
+ <packagereq type="default">diffstat</packagereq>
+ <packagereq type="default">doxygen</packagereq>
+ <packagereq type="optional">dmalloc</packagereq>
+ <packagereq type="optional">expect</packagereq>
+ <packagereq type="mandatory">flex</packagereq>
+ <packagereq type="mandatory">gcc</packagereq>
+ <packagereq type="mandatory">gcc-c++</packagereq>
+ <packagereq type="default">gcc-g77</packagereq>
+ <packagereq type="default">gcc-gnat</packagereq>
+ <packagereq type="default">gcc-java</packagereq>
+ <packagereq type="optional">gcc-objc</packagereq>
+ <packagereq type="mandatory">gdb</packagereq>
+ <packagereq type="mandatory">gettext</packagereq>
+ <packagereq type="default">indent</packagereq>
+ <packagereq type="mandatory">libtool</packagereq>
+ <packagereq type="default">ltrace</packagereq>
+ <packagereq type="mandatory">make</packagereq>
+ <packagereq type="default">memprof</packagereq>
+ <packagereq type="optional">nasm</packagereq>
+ <packagereq type="optional">njamd</packagereq>
+ <packagereq type="default">patchutils</packagereq>
+ <packagereq type="mandatory">perl-CPAN</packagereq>
+ <packagereq type="mandatory">pkgconfig</packagereq>
+ <packagereq type="optional">pmake</packagereq>
+ <packagereq type="optional">pstack</packagereq>
+ <packagereq type="mandatory">python-devel</packagereq>
+ <packagereq type="default">rcs</packagereq>
+ <packagereq type="mandatory">rpm-build</packagereq>
+ <packagereq type="mandatory">redhat-rpm-config</packagereq>
+ <packagereq type="default">splint</packagereq>
+ <packagereq type="mandatory">strace</packagereq>
+ <packagereq type="mandatory">texinfo</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>development-libs</id>
+ <name>Development Libraries</name>
+ <name xml:lang="cs">Knihovny pro vývoj</name>
+ <name xml:lang="da">Udviklingsbiblioteker</name>
+ <name xml:lang="de">Entwicklungsbibliotheken</name>
+ <name xml:lang="es">Librerías de desarrollo</name>
+ <name xml:lang="fr">Bibliothèques de développement</name>
+ <name xml:lang="is">Þróunaraðgerðasöfn</name>
+ <name xml:lang="it">Librerie di sviluppo</name>
+ <name xml:lang="ja">開発ライブラリ</name>
+ <name xml:lang="ko">개발용 ë¼ì´ë¸ŒëŸ¬ë¦¬</name>
+ <name xml:lang="no">Utviklingsbibliotek</name>
+ <name xml:lang="pt">Bibliotecas de Desenvolvimento</name>
+ <name xml:lang="ru">Библиотеки Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸</name>
+ <name xml:lang="sv">Utvecklingsbibliotek</name>
+ <name xml:lang="zh_CN">å¼€å‘库</name>
+ <name xml:lang="zh_TW">開發函å¼åº«</name>
+ <description>The packages in this group are core libraries needed to develop applications.</description>
+ <description xml:lang="cs">BalíÄky v této skupinÄ› jsou základní knihovny potÅ™ebné pro vývoj aplikací.</description>
+ <description xml:lang="da">Pakkerne i denne gruppe er basale biblioteker som behøves til udvikling af program.</description>
+ <description xml:lang="de">Bei den Paketen dieser Gruppe handelt es sich um grundlegende Bibliotheken für die Entwicklung von Anwendungen.</description>
+ <description xml:lang="es">Los paquetes de este grupo son librerías de núcleo necesarias para desarrollar aplicaciones.</description>
+ <description xml:lang="fr">Les paquetages de ce groupe sont des bibliothèques de mémoire nécessaires au développement d&apos;applications.</description>
+ <description xml:lang="is">Pakkarnir í þessum hóp eru grunnaðgerðasöfnin sem þarf til að þróa hugbúnað.</description>
+ <description xml:lang="it">I pacchetti di questo gruppo sono le principali librerie di sviluppo delle applicazioni.</description>
+ <description xml:lang="ja">ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ‘ッケージã¯ã‚¢ãƒ—リケーションã®é–‹ç™ºã«å¿…è¦ãªã‚³ã‚¢ãƒ©ã‚¤ãƒ–ラリã§ã™ã€‚</description>
+ <description xml:lang="ko">ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì€ ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•˜ëŠ”ë° í•„ìš”í•œ 핵심 ë¼ì´ë¸ŒëŸ¬ë¦¬ìž…니다.</description>
+ <description xml:lang="no">Pakkene i denne gruppen er basis-biblioteker for bruk ved programutvikling.</description>
+ <description xml:lang="pt">Os pacotes neste grupo contém bibliotecas de base necessárias para desenvolver aplicações.</description>
+ <description xml:lang="ru">Эта группа Ñодержит библиотеки необходимые Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ приложений.</description>
+ <description xml:lang="sv">Paketen i denna grupp är kärnbibliotek som behövs för utveckling av program.</description>
+ <description xml:lang="zh_CN">该组中的软件包是开å‘åº”ç”¨ç¨‹åºæ‰€éœ€çš„æ ¸å¿ƒåº“。</description>
+ <description xml:lang="zh_TW">é€™å€‹ç¾¤çµ„ä¸­çš„å¥—ä»¶æ˜¯ç”¨ä¾†é–‹ç™¼æ‡‰ç”¨ç¨‹å¼æ‰€éœ€çš„主è¦å‡½å¼åº«ã€‚</description>
+ <uservisible>false</uservisible>
+ <packagelist>
+ <packagereq type="mandatory">curl-devel</packagereq>
+ <packagereq type="mandatory">cyrus-sasl-devel</packagereq>
+ <packagereq type="mandatory">db4-devel</packagereq>
+ <packagereq type="mandatory">db4-utils</packagereq>
+ <packagereq type="mandatory">dialog</packagereq>
+ <packagereq type="mandatory">expat-devel</packagereq>
+ <packagereq type="mandatory">gdbm-devel</packagereq>
+ <packagereq type="mandatory">gmp-devel</packagereq>
+ <packagereq type="mandatory">gpm-devel</packagereq>
+ <packagereq type="mandatory">hesiod-devel</packagereq>
+ <packagereq type="mandatory">krb5-devel</packagereq>
+ <packagereq type="mandatory">krbafs-devel</packagereq>
+ <packagereq type="mandatory">kudzu-devel</packagereq>
+ <packagereq type="mandatory">libcap-devel</packagereq>
+ <packagereq type="mandatory">libtermcap-devel</packagereq>
+ <packagereq type="mandatory">libusb-devel</packagereq>
+ <packagereq type="mandatory">libuser-devel</packagereq>
+ <packagereq type="mandatory">libxml-devel</packagereq>
+ <packagereq type="mandatory">libxml2-devel</packagereq>
+ <packagereq type="mandatory">lockdev-devel</packagereq>
+ <packagereq type="mandatory">modutils-devel</packagereq>
+ <packagereq type="mandatory">ncurses-devel</packagereq>
+ <packagereq type="mandatory">newt-devel</packagereq>
+ <packagereq type="mandatory">openldap-devel</packagereq>
+ <packagereq type="mandatory">openssl-devel</packagereq>
+ <packagereq type="mandatory">pam-devel</packagereq>
+ <packagereq type="mandatory">pciutils-devel</packagereq>
+ <packagereq type="mandatory">readline-devel</packagereq>
+ <packagereq type="mandatory">rpm-devel</packagereq>
+ <packagereq type="mandatory">slang-devel</packagereq>
+ <packagereq type="mandatory">swig</packagereq>
+ <packagereq type="mandatory">zlib-devel</packagereq>
+ <packagereq type="default">libogg-devel</packagereq>
+ <packagereq type="default">libvorbis-devel</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>kernel-development</id>
+ <name>Kernel Development</name>
+ <name xml:lang="cs">Vývoj jádra</name>
+ <name xml:lang="da">Kerneudvikling</name>
+ <name xml:lang="de">Kernel-Entwicklung</name>
+ <name xml:lang="es">Desarrollo del kernel</name>
+ <name xml:lang="fr">Développement du noyau</name>
+ <name xml:lang="is">Kjarnaþróun</name>
+ <name xml:lang="it">Sviluppo del kernel</name>
+ <name xml:lang="ja">カーãƒãƒ«é–‹ç™º</name>
+ <name xml:lang="ko">ì»¤ë„ ê°œë°œ</name>
+ <name xml:lang="no">Kjerneutvikling</name>
+ <name xml:lang="pt">Desenvolvimento do Kernel</name>
+ <name xml:lang="ru">СредÑтва Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ñдра</name>
+ <name xml:lang="sv">Kärnutveckling</name>
+ <name xml:lang="zh_CN">内核开å‘</name>
+ <name xml:lang="zh_TW">核心開發</name>
+ <description>Install these packages to recompile the kernel.</description>
+ <description xml:lang="cs">Tyto balíÄky nainstalujte pro rekompilaci jádra.</description>
+ <description xml:lang="da">Installér disse pakker for at oversætte om kernen.</description>
+ <description xml:lang="de">Installieren Sie diese Pakete, wenn Sie selber den Kernel übersetzen möchten.</description>
+ <description xml:lang="is">Settu þessa pakka inn ef þú vilt endurþýða kjarnann.</description>
+ <description xml:lang="ja">カーãƒãƒ«ã‚’å†ã‚³ãƒ³ãƒ‘イルã™ã‚‹ç‚ºã«ã“れらã®ãƒ‘ッケージをインストールã—ã¾ã™ã€‚</description>
+ <description xml:lang="ko">커ë„ì„ ìž¬ì»´íŒŒì¼í•˜ì‹œë ¤ë©´ ì´ íŒ¨í‚¤ì§€ë¥¼ 설치하십시오.</description>
+ <description xml:lang="no">Installer disse pakkene for å rekompilere kjernen.</description>
+ <description xml:lang="pt">Instale estes pacotes para recompilar o núcleo.</description>
+ <description xml:lang="ru">УÑтановите Ñти пакеты Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции Ñдра ÑиÑтемы.</description>
+ <description xml:lang="sv">Installera dessa paket för att kompilera om kärnan.</description>
+ <description xml:lang="zh_CN">安装这些软件包æ¥é‡æ–°ç¼–译内核。</description>
+ <description xml:lang="zh_TW">請安è£é€™äº›å¥—件以釿–°ç·¨è­¯æ ¸å¿ƒã€‚</description>
+ <uservisible>true</uservisible>
+ <grouplist>
+ <groupreq>development-tools</groupreq>
+ </grouplist>
+ <packagelist>
+ <packagereq type="mandatory">kernel-source</packagereq>
+ <packagereq type="mandatory">libattr-devel</packagereq>
+ <packagereq type="mandatory">libacl-devel</packagereq>
+ <packagereq type="default">tk</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>legacy-software-development</id>
+ <name>Legacy Software Development</name>
+ <name xml:lang="cs">Podpora pro vývoj zděděného software</name>
+ <name xml:lang="da">Udvikling af ældre programmel</name>
+ <name xml:lang="de">Legacy-Software Entwicklung</name>
+ <name xml:lang="es">Desarrollo del software de legado</name>
+ <name xml:lang="fr">Développement du logiciel hérité</name>
+ <name xml:lang="is">Þróunartól fyrir gömul forrit</name>
+ <name xml:lang="it">Sviluppo del legacy software</name>
+ <name xml:lang="ja">レガシーソフトウェアーã®é–‹ç™º</name>
+ <name xml:lang="ko">레거시 소프트웨어 개발</name>
+ <name xml:lang="no">Programvareutvikling for eldre systemer.</name>
+ <name xml:lang="pt">Desenvolvimento de Software Legado</name>
+ <name xml:lang="ru">СредÑтва Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ уÑтаревших приложений</name>
+ <name xml:lang="sv">Utveckling av äldre programvara</name>
+ <name xml:lang="zh_CN">原有的软件开å‘</name>
+ <name xml:lang="zh_TW">舊å¼è»Ÿé«”開發</name>
+ <uservisible>false</uservisible>
+ <packagelist>
+ <packagereq type="mandatory">compat-gcc</packagereq>
+ <packagereq type="mandatory">compat-gcc-c++</packagereq>
+ <packagereq type="mandatory">compat-gcc-g77</packagereq>
+ <packagereq type="mandatory">compat-libstdc++</packagereq>
+ <packagereq type="mandatory">compat-libstdc++-devel</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>x-software-development</id>
+ <name>X Software Development</name>
+ <name xml:lang="cs">Vývoj software pro X</name>
+ <name xml:lang="da">X-programmeludvikling</name>
+ <name xml:lang="de">X Softwareentwicklung</name>
+ <name xml:lang="es">Desarrollo del software X</name>
+ <name xml:lang="fr">Développement du logiciel X</name>
+ <name xml:lang="is">Hugbúnaðarþróun fyrir X gluggakerfið</name>
+ <name xml:lang="it">Sviluppo del software X</name>
+ <name xml:lang="ja">Xソフトウェア開発</name>
+ <name xml:lang="ko">X 소프트웨어 개발</name>
+ <name xml:lang="no">Programvareutvikling for X</name>
+ <name xml:lang="pt">Desenvolvimento de Software para X</name>
+ <name xml:lang="ru">Разработка ПО Ð´Ð»Ñ X</name>
+ <name xml:lang="sv">X-programvaruutveckling</name>
+ <name xml:lang="zh_CN">X 软件开å‘</name>
+ <name xml:lang="zh_TW">X 軟體開發</name>
+ <description>These packages allow you to develop applications for the X Window System.</description>
+ <description xml:lang="cs">Tyto balíÄky Vám umožní vyvíjet aplikace pro X Window System.</description>
+ <description xml:lang="da">Disse pakker lader dig udvikle programmer for vinduessystemet X.</description>
+ <description xml:lang="de">Mit diesen Paketen können Sie Anwendungen für das X Window System entwickeln.</description>
+ <description xml:lang="es">Estos paquetes le permiten desarrollar aplicaciones para el sistema X Window.</description>
+ <description xml:lang="fr">Ces paquetages vous permettent de développer les applications pour le système X Window.</description>
+ <description xml:lang="is">Þessir pakkar gera þér kleyft að þróa hugbúnað fyrir X gluggakerfið.</description>
+ <description xml:lang="it">Questi pacchetti consentono di sviluppare applicazioni per il sistema X Window.</description>
+ <description xml:lang="ja">ã“れらã®ãƒ‘ッケージã§X Window System用ã®ã‚¢ãƒ—リケーションを開発ã§ãã¾ã™ã€‚</description>
+ <description xml:lang="ko">ì´ íŒ¨í‚¤ì§€ëŠ” X 윈ë„ìš° 시스템ì—서 ì‚¬ìš©ë  ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•  수 있게 í•´ì¤ë‹ˆë‹¤.</description>
+ <description xml:lang="no">Disse pakkene lar deg utvikle programmer for X.</description>
+ <description xml:lang="pt">Este pacotes permitem-lhe desenvolver aplicações para o X Window System.</description>
+ <description xml:lang="ru">Эти пакеты позволÑÑŽÑ‚ разрабатывать Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ X Window System.</description>
+ <description xml:lang="sv">Dessa paket låter dig utveckla program för fönstersystemet X.</description>
+ <description xml:lang="zh_CN">这些软件包å…许您开å‘用于 X 窗å£ç³»ç»Ÿçš„应用程åºã€‚</description>
+ <description xml:lang="zh_TW">這些套件讓您å¯ä»¥ç‚º X 視窗系統開發應用程å¼ã€‚</description>
+ <uservisible>true</uservisible>
+ <packagelist>
+ <packagereq type="mandatory">Glide3-devel</packagereq>
+ <packagereq type="mandatory">XFree86-devel</packagereq>
+ <packagereq type="mandatory">Xaw3d-devel</packagereq>
+ <packagereq type="mandatory">gd-devel</packagereq>
+ <packagereq type="default">lesstif-devel</packagereq>
+ <packagereq type="mandatory">libjpeg-devel</packagereq>
+ <packagereq type="mandatory">libtiff-devel</packagereq>
+ <packagereq type="mandatory">libpng-devel</packagereq>
+ <packagereq type="mandatory">libmng-devel</packagereq>
+ <packagereq type="mandatory">libungif-devel</packagereq>
+ <packagereq type="mandatory">freetype-devel</packagereq>
+ <packagereq type="mandatory">netpbm-devel</packagereq>
+ <packagereq type="default">libpng10-devel</packagereq>
+ <packagereq type="default">openmotif-devel</packagereq>
+ <packagereq type="default">SDL-devel</packagereq>
+ <packagereq type="default">SDL_image-devel</packagereq>
+ <packagereq type="default">SDL_mixer-devel</packagereq>
+ <packagereq type="default">SDL_net-devel</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>gnome-software-development</id>
+ <name>GNOME Software Development</name>
+ <name xml:lang="cs">Vývoj software pro GNOMOE</name>
+ <name xml:lang="da">Gnome-programmeludvikling</name>
+ <name xml:lang="de">GNOME Softwareentwicklung</name>
+ <name xml:lang="es">Desarrollo de software de GNOME</name>
+ <name xml:lang="fr">Développement de logiciel GNOME</name>
+ <name xml:lang="is">Hugbúnaðarþróun fyrir GNOME</name>
+ <name xml:lang="it">Sviluppo del software di GNOME</name>
+ <name xml:lang="ja">GNOME ソフトウェア開発</name>
+ <name xml:lang="ko">GNOME 소프트웨어 개발</name>
+ <name xml:lang="no">Programvareutvikling for GNOME</name>
+ <name xml:lang="pt">Desenvolvimento de Software GNOME</name>
+ <name xml:lang="ru">Разработка Ñ Ð¸Ñпользованием GNOME</name>
+ <name xml:lang="sv">GNOME-programvaruutveckling</name>
+ <name xml:lang="zh_CN">GNOME 软件开å‘</name>
+ <name xml:lang="zh_TW">GNOME 軟體開發</name>
+ <description>Install these packages in order to develop GTK+ and GNOME graphical applications.</description>
+ <description xml:lang="cs">Tyto balíÄky nainstalujte pro vývoj grafických aplikací pro GTK+ a GNOME.</description>
+ <description xml:lang="da">Installér disse pakker for at kunne udvikle grafiske programmer som bruger GTK+ og Gnome.</description>
+ <description xml:lang="de">Installieren Sie diese Pakete, um Applikationen für GTK+ und GNOME zu entwickeln.</description>
+ <description xml:lang="es">Instalar estos paquetes para desarrollar GTK+ y las aplicaciones gráficas de GNOME. </description>
+ <description xml:lang="fr">Installer ces paquetages pour développer les applications graphiques GTK+ et GNOME.</description>
+ <description xml:lang="is">Settu þessa pakka inn ef þú vilt þróa GTK+ og GNOME forrit.</description>
+ <description xml:lang="it">Installare questi pacchetti per sviluppare le applicazioni grafiche GTK+ e GNOME.</description>
+ <description xml:lang="ja">GTK+ 㨠GNOMEã®ã‚°ãƒ©ãƒ•ィカルアプリケーションを開発ã™ã‚‹ç‚ºã«ã¯ã“れら㮠パッケージをインストールã—ã¦ä¸‹ã•ã„。</description>
+ <description xml:lang="ko">GTK+와 GNOME 그래픽 ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•˜ì‹œë ¤ë©´ ì´ íŒ¨í‚¤ì§€ë¥¼ 설치하십시오.</description>
+ <description xml:lang="no">Installer disse pakkene for utvikling av GTK+- og GNOME-programmer.</description>
+ <description xml:lang="pt">Instale estes pacotes se quiser desenvolver aplicações gráficas GTK+ ou GNOME.</description>
+ <description xml:lang="ru">УÑтановите Ñти пакеты Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ графичеÑких приложений GTK+ и GNOME.</description>
+ <description xml:lang="sv">Installera dessa paket för att kunna utveckla grafiska program som använder GTK+ och GNOME.</description>
+ <description xml:lang="zh_CN">安装这些软件包æ¥å¼€å‘ GTK+ å’Œ GNOME 图形化应用程åºã€‚</description>
+ <description xml:lang="zh_TW">請安è£é€™äº›å¥—件,用來開發 GTK+ 與 GNOME 的圖形應用程å¼ã€‚</description>
+ <uservisible>true</uservisible>
+ <packagelist>
+ <packagereq type="default">bug-buddy</packagereq>
+ <packagereq type="default">pygtk2-devel</packagereq>
+ <packagereq type="mandatory">glib-devel</packagereq>
+ <packagereq type="mandatory">glib2-devel</packagereq>
+ <packagereq type="mandatory">gtk+-devel</packagereq>
+ <packagereq type="mandatory">GConf-devel</packagereq>
+ <packagereq type="mandatory">GConf2-devel</packagereq>
+ <packagereq type="default">Guppi-devel</packagereq>
+ <packagereq type="mandatory">ORBit-devel</packagereq>
+ <packagereq type="mandatory">ORBit2-devel</packagereq>
+ <packagereq type="mandatory">atk-devel</packagereq>
+ <packagereq type="mandatory">bonobo-activation-devel</packagereq>
+ <packagereq type="default">bonobo-conf-devel</packagereq>
+ <packagereq type="mandatory">bonobo-devel</packagereq>
+ <packagereq type="mandatory">eel2-devel</packagereq>
+ <packagereq type="mandatory">fontconfig-devel</packagereq>
+ <packagereq type="mandatory">gail-devel</packagereq>
+ <packagereq type="mandatory">gal-devel</packagereq>
+ <packagereq type="mandatory">gdk-pixbuf-devel</packagereq>
+ <packagereq type="mandatory">gnome-libs-devel</packagereq>
+ <packagereq type="default">gnome-pilot-devel</packagereq>
+ <packagereq type="mandatory">gnome-print-devel</packagereq>
+ <packagereq type="mandatory">gnome-vfs-devel</packagereq>
+ <packagereq type="mandatory">gnome-vfs2-devel</packagereq>
+ <packagereq type="mandatory">gtkhtml-devel</packagereq>
+ <packagereq type="mandatory">gtk2-devel</packagereq>
+ <packagereq type="default">imlib-devel</packagereq>
+ <packagereq type="mandatory">libIDL-devel</packagereq>
+ <packagereq type="mandatory">libart_lgpl-devel</packagereq>
+ <packagereq type="mandatory">libbonobo-devel</packagereq>
+ <packagereq type="mandatory">libbonoboui-devel</packagereq>
+ <packagereq type="mandatory">libglade-devel</packagereq>
+ <packagereq type="mandatory">libglade2-devel</packagereq>
+ <packagereq type="mandatory">libgnome-devel</packagereq>
+ <packagereq type="mandatory">libgnomecanvas-devel</packagereq>
+ <packagereq type="mandatory">libgnomeui-devel</packagereq>
+ <packagereq type="mandatory">libgtop-devel</packagereq>
+ <packagereq type="mandatory">libole2-devel</packagereq>
+ <packagereq type="mandatory">librsvg-devel</packagereq>
+ <packagereq type="mandatory">librsvg2-devel</packagereq>
+ <packagereq type="mandatory">libunicode-devel</packagereq>
+ <packagereq type="mandatory">libxslt-devel</packagereq>
+ <packagereq type="mandatory">linc-devel</packagereq>
+ <packagereq type="mandatory">oaf-devel</packagereq>
+ <packagereq type="mandatory">pango-devel</packagereq>
+ <packagereq type="optional">glade</packagereq>
+ <packagereq type="optional">glade2</packagereq>
+ </packagelist>
+ </group>
+
+ <group>
+ <id>kde-software-development</id>
+ <name>KDE Software Development</name>
+ <name xml:lang="cs">Vývoj software pro GNOME</name>
+ <name xml:lang="da">KDE-programmeludvikling</name>
+ <name xml:lang="de">KDE Softwareentwicklung</name>
+ <name xml:lang="es">Desarrollo de software para KDE</name>
+ <name xml:lang="fr">Développement de logiciel KDE</name>
+ <name xml:lang="is">Hugbúnaðarþróun fyrir KDE</name>
+ <name xml:lang="it">Sviluppo software KDE</name>
+ <name xml:lang="ja">KDEソフトウェア開発</name>
+ <name xml:lang="ko">KDE 소프트웨어 개발</name>
+ <name xml:lang="no">Programvareutvikling for KDE</name>
+ <name xml:lang="pt">Desenvolvimento de Software KDE</name>
+ <name xml:lang="ru">СредÑтва Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ в KDE</name>
+ <name xml:lang="sv">KDE-programvaruutveckling</name>
+ <name xml:lang="zh_CN">KDE 软件开å‘</name>
+ <name xml:lang="zh_TW">KDE 軟體開發</name>
+ <description>Install these packages to develop QT and KDE graphical applications.</description>
+ <description xml:lang="cs">Tyto balíÄky nainstalujte pro vývoj grafických aplikací pro QT a KDE.</description>
+ <description xml:lang="da">Installér disse pakker for at udvikle grafiske programmer som bruger QT og KDE.</description>
+ <description xml:lang="de">Installieren Sie diese Pakete, um Applikationen für QT und KDE zu entwickeln.</description>
+ <description xml:lang="es">Instalar estos paquetes para desarrollar las aplicaciones gráficas QT y KDE.</description>
+ <description xml:lang="fr">Installer ces paquetages pour développer les applications graphiques QT et KDE.</description>
+ <description xml:lang="is">Settu þessa pakka inn ef þú vilt þróa QT og KDE forrit</description>
+ <description xml:lang="it">Installare questi pacchetti per sviluppare le applicazioni grafiche QT e KDE.</description>
+ <description xml:lang="ja">QTã¨KDEã®ã‚°ãƒ©ãƒ•ィカルアプリケーション開発ã«ã¯ã“れらã®ãƒ‘ッケージをインストールã—ã¾ã™ã€‚</description>
+ <description xml:lang="ko">QT와 KDE 그래픽 ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•˜ì‹œë ¤ë©´ ì´ íŒ¨í‚¤ì§€ë¥¼ 설치하십시오.</description>
+ <description xml:lang="no">Installer disse pakkene for utvikling av QT og KDE-programmer.</description>
+ <description xml:lang="pt">Instale estes pacotes se quiser desenvolver aplicações gráficas QT ou KDE.</description>
+ <description xml:lang="ru">УÑтановите Ñти пакеты Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ приложений QT и KDE.</description>
+ <description xml:lang="sv">Installera dessa paket för att utveckla grafiska program för QT och KDE.</description>
+ <description xml:lang="zh_CN">安装这些软件包æ¥å¼€å‘ QT å’Œ KDE 图形化应用程åºã€‚</description>
+ <description xml:lang="zh_TW">請安è£é€™äº›å¥—件,用來開發 QT 與 KDE 的圖形應用程å¼ã€‚</description>
+ <uservisible>true</uservisible>
+ <packagelist>
+ <packagereq type="mandatory">PyQt-devel</packagereq>
+ <packagereq type="mandatory">arts-devel</packagereq>
+ <packagereq type="mandatory">cdparanoia-devel</packagereq>
+ <packagereq type="mandatory">cervisia</packagereq>
+ <packagereq type="mandatory">cups-devel</packagereq>
+ <packagereq type="mandatory">kdbg</packagereq>
+ <packagereq type="mandatory">kdebase-devel</packagereq>
+ <packagereq type="mandatory">kdelibs-devel</packagereq>
+ <packagereq type="mandatory">kdenetwork-devel</packagereq>
+ <packagereq type="mandatory">kdesdk-kapptemplate</packagereq>
+ <packagereq type="mandatory">kdesdk-kbabel</packagereq>
+ <packagereq type="mandatory">kdesdk-kbugbuster</packagereq>
+ <packagereq type="mandatory">kdesdk-kmtrace</packagereq>
+ <packagereq type="mandatory">kdesdk-kompare</packagereq>
+ <packagereq type="mandatory">kdesdk-kspy</packagereq>
+ <packagereq type="mandatory">kdepim-devel</packagereq>
+ <packagereq type="mandatory">kdevelop</packagereq>
+ <packagereq type="mandatory">kdoc</packagereq>
+ <packagereq type="mandatory">kregexpeditor-devel</packagereq>
+ <packagereq type="mandatory">kviewshell-devel</packagereq>
+ <packagereq type="mandatory">libkscan-devel</packagereq>
+ <packagereq type="mandatory">pilot-link-devel</packagereq>
+ <packagereq type="mandatory">qt-designer</packagereq>
+ <packagereq type="mandatory">qt-devel</packagereq>
+ <packagereq type="mandatory">sane-backends-devel</packagereq>
+ <packagereq type="mandatory">sip-devel</packagereq>
+ <packagereq type="mandatory">libxslt-devel</packagereq>
+ </packagelist>
+ </group>
+
+ <!-- META GROUPS -->
+ <group>
+ <id>workstation-common</id>
+ <uservisible>false</uservisible>
+ <name>Workstation Common</name>
+ <name xml:lang="cs">SpoleÄné pro pracovní stanici</name>
+ <name xml:lang="da">Fælles for arbejdsstation</name>
+ <name xml:lang="de">Workstation Common</name>
+ <name xml:lang="es">Zona común de la estación de trabajo</name>
+ <name xml:lang="fr">Poste de travail commun</name>
+ <name xml:lang="is">Almennt fyrir vinnustöðvar</name>
+ <name xml:lang="it">Workstation Common</name>
+ <name xml:lang="ja">ワークステーション共通</name>
+ <name xml:lang="ko">ì›ìŠ¤í…Œì´ì…˜ 공통</name>
+ <name xml:lang="no">Arbeidsstasjon - felles</name>
+ <name xml:lang="pt">Estação de Trabalho Comum</name>
+ <name xml:lang="ru">Ð¢Ð¸Ð¿Ð¾Ð²Ð°Ñ Ð Ð°Ð±Ð¾Ñ‡Ð°Ñ Ð¡Ñ‚Ð°Ð½Ñ†Ð¸Ñ</name>
+ <name xml:lang="sv">Gemensamt för arbetsstation</name>
+ <name xml:lang="zh_CN">工作站通用</name>
+ <name xml:lang="zh_TW">工作站共åŒ</name>
+ <grouplist>
+ <groupreq>base</groupreq>
+ <groupreq>base-x</groupreq>
+ <groupreq>admin-tools</groupreq>
+ <groupreq>editors</groupreq>
+ <groupreq>sound-and-video</groupreq>
+ <groupreq>dialup</groupreq>
+ <groupreq>office</groupreq>
+ <groupreq>graphical-internet</groupreq>
+ <groupreq>text-internet</groupreq>
+ <groupreq>printing</groupreq>
+ <groupreq>graphics</groupreq>
+ <groupreq>games</groupreq>
+ </grouplist>
+ </group>
+
+ <group>
+ <id>server</id>
+ <uservisible>false</uservisible>
+ <name>Server</name>
+ <name xml:lang="cs">Server</name>
+ <name xml:lang="da">Server</name>
+ <name xml:lang="de">Server</name>
+ <name xml:lang="es">Servidor</name>
+ <name xml:lang="fr">Serveur</name>
+ <name xml:lang="is">Þjónn</name>
+ <name xml:lang="it">Server</name>
+ <name xml:lang="ja">サーãƒ</name>
+ <name xml:lang="ko">서버</name>
+ <name xml:lang="no">Tjener</name>
+ <name xml:lang="pt">Servidor</name>
+ <name xml:lang="ru">Сервер</name>
+ <name xml:lang="sv">Server</name>
+ <name xml:lang="zh_CN">æœåС噍</name>
+ <name xml:lang="zh_TW">伺æœå™¨</name>
+ <grouplist>
+ <groupreq>base</groupreq>
+ <groupreq>printing</groupreq>
+ <groupreq>text-internet</groupreq>
+ <groupreq>dialup</groupreq>
+ <groupreq>web-server</groupreq>
+ <groupreq>smb-server</groupreq>
+ <groupreq>server-cfg</groupreq>
+ <groupreq>admin-tools</groupreq>
+ </grouplist>
+ </group>
+
+ <group>
+ <id>gnome</id>
+ <uservisible>false</uservisible>
+ <name>GNOME</name>
+ <name xml:lang="cs">GNOME</name>
+ <name xml:lang="da">Gnome</name>
+ <name xml:lang="de">GNOME</name>
+ <name xml:lang="es">GNOME</name>
+ <name xml:lang="fr">GNOME</name>
+ <name xml:lang="is">GNOME</name>
+ <name xml:lang="it">GNOME</name>
+ <name xml:lang="ja">GNOME </name>
+ <name xml:lang="ko">GNOME</name>
+ <name xml:lang="no">GNOME</name>
+ <name xml:lang="pt">GNOME</name>
+ <name xml:lang="ru">GNOME</name>
+ <name xml:lang="sv">GNOME</name>
+ <name xml:lang="zh_CN">GNOME</name>
+ <name xml:lang="zh_TW">GNOME</name>
+ <grouplist>
+ <groupreq>gnome-desktop</groupreq>
+ </grouplist>
+ </group>
+
+ <group>
+ <id>kde</id>
+ <uservisible>false</uservisible>
+ <name>KDE</name>
+ <name xml:lang="cs">KDE</name>
+ <name xml:lang="da">KDE</name>
+ <name xml:lang="de">KDE</name>
+ <name xml:lang="es">KDE</name>
+ <name xml:lang="fr">KDE</name>
+ <name xml:lang="is">KDE</name>
+ <name xml:lang="it">KDE</name>
+ <name xml:lang="ja">KDE</name>
+ <name xml:lang="ko">KDE</name>
+ <name xml:lang="no">KDE</name>
+ <name xml:lang="pt">KDE</name>
+ <name xml:lang="ru">KDE</name>
+ <name xml:lang="sv">KDE</name>
+ <name xml:lang="zh_CN">KDE</name>
+ <name xml:lang="zh_TW">KDE</name>
+ <grouplist>
+ <groupreq>kde-desktop</groupreq>
+ </grouplist>
+ </group>
+
+ <group>
+ <id>supported</id>
+ <uservisible>false</uservisible>
+ <name>Supported Packages</name>
+ <name xml:lang="cs">Podporované balíÄky</name>
+ <name xml:lang="da">Pakker som understøttes</name>
+ <name xml:lang="de">Unterstützte Pakete</name>
+ <name xml:lang="es">Paquetes soportados</name>
+ <name xml:lang="fr">Paquetages pris en charge</name>
+ <name xml:lang="is">Studdir pakkar</name>
+ <name xml:lang="it">Pacchetti supportati</name>
+ <name xml:lang="ja">サãƒãƒ¼ãƒˆã•れるパッケージ</name>
+ <name xml:lang="ko">ì§€ì›í•˜ëŠ” 패키지</name>
+ <name xml:lang="no">Støttede pakker</name>
+ <name xml:lang="pt">Pacotes Suportados</name>
+ <name xml:lang="ru">Поддерживаемые пакеты</name>
+ <name xml:lang="sv">Paket som stöds</name>
+ <name xml:lang="zh_CN">支æŒçš„软件包</name>
+ <name xml:lang="zh_TW">支æ´çš„套件</name>
+ <packagelist>
+ <packagereq type="optional">anaconda</packagereq>
+ <packagereq type="optional">anaconda-help</packagereq>
+ <packagereq type="optional">anaconda-images</packagereq>
+ <packagereq type="optional">anaconda-runtime</packagereq>
+ <packagereq type="optional">booty</packagereq>
+ </packagelist>
+ </group>
+
+ <!-- group hierarchy -->
+ <grouphierarchy>
+ <category>
+ <name>Desktops</name>
+ <name xml:lang="cs">Prostředí pracovní plochy</name>
+ <name xml:lang="da">Skriveborde</name>
+ <name xml:lang="is">Skjáborð</name>
+ <name xml:lang="ja">デスクトップ</name>
+ <name xml:lang="ko">ë°ìФí¬íƒ‘</name>
+ <name xml:lang="no">Skrivebord</name>
+ <name xml:lang="pt">Ambiente de Trabalho</name>
+ <name xml:lang="ru">Оконные менеджеры</name>
+ <name xml:lang="sv">Skrivbord</name>
+ <name xml:lang="zh_CN">桌é¢</name>
+ <name xml:lang="zh_TW">桌é¢</name>
+ <subcategories>
+ <subcategory>base-x</subcategory>
+ <subcategory>gnome-desktop</subcategory>
+ <subcategory>kde-desktop</subcategory>
+ </subcategories>
+ </category>
+ <category>
+ <name>Applications</name>
+ <name xml:lang="cs">Aplikace</name>
+ <name xml:lang="da">Programmer</name>
+ <name xml:lang="is">Forrit</name>
+ <name xml:lang="ja">アプリケーション</name>
+ <name xml:lang="ko">ì‘ìš© 프로그램</name>
+ <name xml:lang="no">Programmer</name>
+ <name xml:lang="pt">Aplicações</name>
+ <name xml:lang="ru">ПриложениÑ</name>
+ <name xml:lang="sv">Program</name>
+ <name xml:lang="zh_CN">应用程åº</name>
+ <name xml:lang="zh_TW">應用程å¼</name>
+ <subcategories>
+ <subcategory>editors</subcategory>
+ <subcategory>engineering-and-scientific</subcategory>
+ <subcategory>graphical-internet</subcategory>
+ <subcategory>text-internet</subcategory>
+ <subcategory>office</subcategory>
+ <subcategory>sound-and-video</subcategory>
+ <subcategory>authoring-and-publishing</subcategory>
+ <subcategory>graphics</subcategory>
+ <subcategory>games</subcategory>
+ </subcategories>
+ </category>
+ <category>
+ <name>Servers</name>
+ <name xml:lang="cs">Servery</name>
+ <name xml:lang="da">Servere</name>
+ <name xml:lang="de">Server</name>
+ <name xml:lang="is">Þjónar</name>
+ <name xml:lang="ja">サーãƒ</name>
+ <name xml:lang="ko">서버</name>
+ <name xml:lang="no">Tjenere</name>
+ <name xml:lang="pt">Servidores</name>
+ <name xml:lang="ru">Серверы</name>
+ <name xml:lang="sv">Servrar</name>
+ <name xml:lang="zh_CN">æœåС噍</name>
+ <name xml:lang="zh_TW">伺æœå™¨</name>
+ <subcategories>
+ <subcategory>server-cfg</subcategory>
+ <subcategory>web-server</subcategory>
+ <subcategory>mail-server</subcategory>
+ <subcategory>smb-server</subcategory>
+ <subcategory>dns-server</subcategory>
+ <subcategory>ftp-server</subcategory>
+ <subcategory>sql-server</subcategory>
+ <subcategory>news-server</subcategory>
+ <subcategory>network-server</subcategory>
+ </subcategories>
+ </category>
+ <category>
+ <name>Development</name>
+ <name xml:lang="cs">Vývoj</name>
+ <name xml:lang="da">Udvikling</name>
+ <name xml:lang="de">Softwareentwicklung</name>
+ <name xml:lang="is">Þróun</name>
+ <name xml:lang="ja">開発</name>
+ <name xml:lang="ko">개발용 ë„구</name>
+ <name xml:lang="no">Utviklingsverktøy</name>
+ <name xml:lang="pt">Desenvolvimento</name>
+ <name xml:lang="ru">Программирование</name>
+ <name xml:lang="sv">Utveckling</name>
+ <name xml:lang="zh_CN">å¼€å‘</name>
+ <name xml:lang="zh_TW">程å¼é–‹ç™¼</name>
+ <subcategories>
+ <subcategory>development-tools</subcategory>
+ <subcategory>kernel-development</subcategory>
+ <subcategory>x-software-development</subcategory>
+ <subcategory>gnome-software-development</subcategory>
+ <subcategory>kde-software-development</subcategory>
+ </subcategories>
+ </category>
+ <category>
+ <name>System</name>
+ <name xml:lang="cs">Systém</name>
+ <name xml:lang="da">System</name>
+ <name xml:lang="de">Systemtools</name>
+ <name xml:lang="is">Kerfi</name>
+ <name xml:lang="ja">システム</name>
+ <name xml:lang="ko">시스템</name>
+ <name xml:lang="no">System</name>
+ <name xml:lang="pt">Sistema</name>
+ <name xml:lang="ru">СиÑтема</name>
+ <name xml:lang="sv">System</name>
+ <name xml:lang="zh_CN">系统</name>
+ <name xml:lang="zh_TW">系統</name>
+ <subcategories>
+ <subcategory>admin-tools</subcategory>
+ <subcategory>system-tools</subcategory>
+ <subcategory>printing</subcategory>
+ </subcategories>
+ </category>
+ </grouphierarchy>
+
+ <!-- packages -->
+ <package>
+ <name>busybox</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libtool-libs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kpaint</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Estonian</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libpng10-devel</name>
+ <dependencylist>
+ <dependency>libpng10</dependency>
+ <dependency>zlib-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tclx</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>tcl</dependency>
+ <dependency>tk</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnomemeeting</name>
+ <dependencylist>
+ <dependency>openh323</dependency>
+ <dependency>pwlib</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>openldap</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>SDL</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtk+-devel</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>glib-devel</dependency>
+ <dependency>XFree86-devel</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gdbm</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdrecord-devel</name>
+ <dependencylist>
+ <dependency>cdrecord</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wl-xemacs</name>
+ <dependencylist>
+ <dependency>xemacs</dependency>
+ <dependency>wl-common</dependency>
+ <dependency>flim-xemacs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lapack-man</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Compress-Zlib</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>modutils-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnuchess</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-audio</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mikmod</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ruby-tcltk</name>
+ <dependencylist>
+ <dependency>ruby-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>tcl</dependency>
+ <dependency>tk</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql-libs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tk</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>tcl</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Xbae</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>openmotif</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bzip2-libs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cadaver</name>
+ <dependencylist>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>klpq</name>
+ <dependencylist>
+ <dependency>LPRng</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-es</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-es</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fam</name>
+ <dependencylist>
+ <dependency>portmap</dependency>
+ <dependency>xinetd</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openh323</name>
+ <dependencylist>
+ <dependency>pwlib</dependency>
+ <dependency>glibc</dependency>
+ <dependency>openssl</dependency>
+ <dependency>expat</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ncftp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>basesystem</name>
+ <dependencylist>
+ <dependency>setup</dependency>
+ <dependency>filesystem</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ttfonts-ko</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rpm-build</name>
+ <dependencylist>
+ <dependency>rpm</dependency>
+ <dependency>patch</dependency>
+ <dependency>file</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libelf</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mew-common</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rhmask</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libaio-devel</name>
+ <dependencylist>
+ <dependency>libaio</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lisa</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gimp-perl</name>
+ <dependencylist>
+ <dependency>gimp</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Gtk-Perl</dependency>
+ <dependency>perl-PDL</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>parted</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>e2fsprogs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>zlib</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dosfstools</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xmms</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>unzip</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>redhat-artwork</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>mikmod</dependency>
+ <dependency>libogg</dependency>
+ <dependency>libvorbis</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libtermcap</name>
+ <dependencylist>
+ <dependency>termcap</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>firstboot</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>usermode</dependency>
+ <dependency>metacity</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>redhat-config-date</dependency>
+ <dependency>redhat-config-language</dependency>
+ <dependency>redhat-config-mouse</dependency>
+ <dependency>redhat-config-keyboard</dependency>
+ <dependency>redhat-config-soundcard</dependency>
+ <dependency>redhat-config-securitylevel</dependency>
+ <dependency>redhat-config-rootpassword</dependency>
+ <dependency>redhat-config-packages</dependency>
+ <dependency>up2date</dependency>
+ <dependency>redhat-logos</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libxslt</name>
+ <dependencylist>
+ <dependency>libxml2</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-base-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-DBD-Pg</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-DBI</dependency>
+ <dependency>glibc</dependency>
+ <dependency>postgresql-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sendmail</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>gawk</dependency>
+ <dependency>sed</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>procmail</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>hesiod</dependency>
+ <dependency>openldap</dependency>
+ <dependency>cyrus-sasl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Devel-Symdump</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssl-devel</name>
+ <dependencylist>
+ <dependency>openssl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>asp2php</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel-pcmcia-cs</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>kudzu</dependency>
+ <dependency>hotplug</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libwnck-devel</name>
+ <dependencylist>
+ <dependency>libwnck</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>pango-devel</dependency>
+ <dependency>gtk2-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pump-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ggv</name>
+ <dependencylist>
+ <dependency>GConf2</dependency>
+ <dependency>scrollkeeper</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ncurses-devel</name>
+ <dependencylist>
+ <dependency>ncurses</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-printer</name>
+ <dependencylist>
+ <dependency>alchemist</dependency>
+ <dependency>python</dependency>
+ <dependency>perl</dependency>
+ <dependency>PyXML</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>gzip</dependency>
+ <dependency>sed</dependency>
+ <dependency>LPRng</dependency>
+ <dependency>m4</dependency>
+ <dependency>pnm2ppa</dependency>
+ <dependency>bzip2</dependency>
+ <dependency>foomatic</dependency>
+ <dependency>ghostscript</dependency>
+ <dependency>newt</dependency>
+ <dependency>Omni-foomatic</dependency>
+ <dependency>mpage</dependency>
+ <dependency>usermode</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libao-devel</name>
+ <dependencylist>
+ <dependency>libao</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mew</name>
+ <dependencylist>
+ <dependency>emacs</dependency>
+ <dependency>mew-common</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xinetd</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>filesystem</dependency>
+ <dependency>setup</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>knewsticker</name>
+ <dependencylist>
+ <dependency>kdenetwork-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>galeon</name>
+ <dependencylist>
+ <dependency>glib</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>libxml</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>GConf</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>oaf</dependency>
+ <dependency>gnome-vfs</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>libglade</dependency>
+ <dependency>mozilla</dependency>
+ <dependency>perl</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libxslt-devel</name>
+ <dependencylist>
+ <dependency>libxslt</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vim-X11</name>
+ <dependencylist>
+ <dependency>vim-common</dependency>
+ <dependency>libacl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>gpm</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>perl</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>symlinks</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rpm2html</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>popt</dependency>
+ <dependency>rpm</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtkam</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>gphoto2</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sh-utils</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-twm</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>alchemist</name>
+ <dependencylist>
+ <dependency>libxml2</dependency>
+ <dependency>libxslt</dependency>
+ <dependency>glibc</dependency>
+ <dependency>python</dependency>
+ <dependency>glib</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>njamd</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xosview</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dictd</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ethereal-gnome</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>usermode</dependency>
+ <dependency>ethereal</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>libpcap</dependency>
+ <dependency>net-snmp</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>netpbm-devel</name>
+ <dependencylist>
+ <dependency>netpbm</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mouseconfig</name>
+ <dependencylist>
+ <dependency>findutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>newt</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeaddons-kate</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vlock</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-lsb</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>gawk</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>cpio</dependency>
+ <dependency>grep</dependency>
+ <dependency>gzip</dependency>
+ <dependency>net-tools</dependency>
+ <dependency>util-linux</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>mount</dependency>
+ <dependency>procps</dependency>
+ <dependency>sed</dependency>
+ <dependency>bash</dependency>
+ <dependency>tar</dependency>
+ <dependency>psmisc</dependency>
+ <dependency>SysVinit</dependency>
+ <dependency>binutils</dependency>
+ <dependency>at</dependency>
+ <dependency>bc</dependency>
+ <dependency>diffutils</dependency>
+ <dependency>vixie-cron</dependency>
+ <dependency>file</dependency>
+ <dependency>findutils</dependency>
+ <dependency>glibc-common</dependency>
+ <dependency>LPRng</dependency>
+ <dependency>m4</dependency>
+ <dependency>make</dependency>
+ <dependency>man</dependency>
+ <dependency>passwd</dependency>
+ <dependency>patch</dependency>
+ <dependency>rsync</dependency>
+ <dependency>time</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>postfix</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>usermode-gtk</name>
+ <dependencylist>
+ <dependency>usermode</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ltrace</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-XML-Parser</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-libwww-perl</dependency>
+ <dependency>perl-URI</dependency>
+ <dependency>glibc</dependency>
+ <dependency>expat</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fortune-mod</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gphoto2-devel</name>
+ <dependencylist>
+ <dependency>gphoto2</dependency>
+ <dependency>pkgconfig</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>librsvg-devel</name>
+ <dependencylist>
+ <dependency>librsvg</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-vfs2-devel</name>
+ <dependencylist>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>GConf2-devel</dependency>
+ <dependency>libbonobo-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mysql-devel</name>
+ <dependencylist>
+ <dependency>mysql</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kpppload</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Filter-Simple</name>
+ <dependencylist>
+ <dependency>perl-Filter</dependency>
+ <dependency>perl-Parse-RecDescent</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gmp-devel</name>
+ <dependencylist>
+ <dependency>gmp</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-kickstart</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>python</dependency>
+ <dependency>hwdata</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kmid</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>WindowMaker-libs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libungif</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-spell</name>
+ <dependencylist>
+ <dependency>gnome-libs</dependency>
+ <dependency>aspell</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>bonobo</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgal19</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>libglade</dependency>
+ <dependency>glib</dependency>
+ <dependency>gdk-pixbuf-gnome</dependency>
+ <dependency>libgnomeprint15</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>oaf</dependency>
+ <dependency>pspell</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vte-devel</name>
+ <dependencylist>
+ <dependency>vte</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libbonoboui</name>
+ <dependencylist>
+ <dependency>libxml2</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glibc</dependency>
+ <dependency>atk</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>linc</dependency>
+ <dependency>pango</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>m4</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>timeconfig</name>
+ <dependencylist>
+ <dependency>initscripts</dependency>
+ <dependency>glibc</dependency>
+ <dependency>util-linux</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>gawk</dependency>
+ <dependency>bash</dependency>
+ <dependency>newt</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bash</name>
+ <dependencylist>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kmix</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Frontier-RPC</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-libwww-perl</dependency>
+ <dependency>perl-XML-Parser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>blas</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnomeprintui-devel</name>
+ <dependencylist>
+ <dependency>libgnomeprintui</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>libgnomeprint-devel</dependency>
+ <dependency>libgnomecanvas-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>expat</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nkf</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>authconfig-gtk</name>
+ <dependencylist>
+ <dependency>authconfig</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>pam</dependency>
+ <dependency>python</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>statserial</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdenetwork-devel</name>
+ <dependencylist>
+ <dependency>kdenetwork-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>perl</dependency>
+ <dependency>psmisc</dependency>
+ <dependency>mozilla-nspr</dependency>
+ <dependency>indexhtml</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>compat-libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>portmap</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>util-linux</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Maelstrom</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>SDL</dependency>
+ <dependency>SDL_net</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sysreport</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>gawk</dependency>
+ <dependency>grep</dependency>
+ <dependency>sed</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdparanoia</name>
+ <dependencylist>
+ <dependency>cdparanoia-libs</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>indent</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xsane</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>sane-backends</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libusb</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>parted-devel</name>
+ <dependencylist>
+ <dependency>parted</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mc</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>dev</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>e2fsprogs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>gpm</dependency>
+ <dependency>slang</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>autoconf213</name>
+ <dependencylist>
+ <dependency>gawk</dependency>
+ <dependency>m4</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>perl</dependency>
+ <dependency>textutils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ruby-libs</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>setup</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>desktop-backgrounds-basic</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-ISO8859-9-75dpi-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>db4-utils</name>
+ <dependencylist>
+ <dependency>db4</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql-jdbc</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Norwegian</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kamera</name>
+ <dependencylist>
+ <dependency>gphoto2</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libusb</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>samba-swat</name>
+ <dependencylist>
+ <dependency>samba</dependency>
+ <dependency>xinetd</dependency>
+ <dependency>libacl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>pam</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mx</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bg5ps</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ <dependency>freetype</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nautilus</name>
+ <dependencylist>
+ <dependency>fam</dependency>
+ <dependency>filesystem</dependency>
+ <dependency>eog</dependency>
+ <dependency>scrollkeeper</dependency>
+ <dependency>desktop-backgrounds-basic</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>redhat-artwork</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>eel2</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gail</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>gnome-desktop</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>librsvg2</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sendmail-cf</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>diffstat</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-75dpi-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtk2-devel</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>pango-devel</dependency>
+ <dependency>atk-devel</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>XFree86-devel</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-libgcj-devel</name>
+ <dependencylist>
+ <dependency>zip</dependency>
+ <dependency>compat-libgcj</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>SDL_mixer-devel</name>
+ <dependencylist>
+ <dependency>SDL_mixer</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Serbian</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ncurses4</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openldap-devel</name>
+ <dependencylist>
+ <dependency>openldap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kon2-fonts</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>routed</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-vfs2</name>
+ <dependencylist>
+ <dependency>gnome-mime-data</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>fam</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ImageMagick-c++</name>
+ <dependencylist>
+ <dependency>ImageMagick</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glib-devel</name>
+ <dependencylist>
+ <dependency>glib</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xloadimage</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>eruby</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>eruby-libs</dependency>
+ <dependency>ruby-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cyrus-sasl-gssapi</name>
+ <dependencylist>
+ <dependency>cyrus-sasl</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>passivetex</name>
+ <dependencylist>
+ <dependency>tetex</dependency>
+ <dependency>xmltex</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-pilot-devel</name>
+ <dependencylist>
+ <dependency>ORBit-devel</dependency>
+ <dependency>pilot-link-devel</dependency>
+ <dependency>gnome-pilot</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>emacs-leim</name>
+ <dependencylist>
+ <dependency>emacs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnomeui-devel</name>
+ <dependencylist>
+ <dependency>libgnomeui</dependency>
+ <dependency>zlib-devel</dependency>
+ <dependency>esound-devel</dependency>
+ <dependency>ORBit2-devel</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>pango-devel</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>GConf2-devel</dependency>
+ <dependency>gnome-vfs2-devel</dependency>
+ <dependency>libgnomecanvas-devel</dependency>
+ <dependency>bonobo-activation-devel</dependency>
+ <dependency>libbonobo-devel</dependency>
+ <dependency>libbonoboui-devel</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>libgnome-devel</dependency>
+ <dependency>libart_lgpl-devel</dependency>
+ <dependency>libglade2-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rhpl</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtk-engines</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Xft</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>freetype</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lam</name>
+ <dependencylist>
+ <dependency>openssh-server</dependency>
+ <dependency>openssh-clients</dependency>
+ <dependency>bash</dependency>
+ <dependency>libaio</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>jadetex</name>
+ <dependencylist>
+ <dependency>sgml-common</dependency>
+ <dependency>tetex</dependency>
+ <dependency>tetex-latex</dependency>
+ <dependency>openjade</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-vfs-extras</name>
+ <dependencylist>
+ <dependency>gnome-vfs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>jfsutils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cWnn-devel</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>inn-devel</name>
+ <dependencylist>
+ <dependency>inn</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xdelta</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>glib</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ghostscript-gtk</name>
+ <dependencylist>
+ <dependency>ghostscript</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fonts-ISO8859-2-100dpi</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>netdump-server</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>openssh-server</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Crypt-SSLeay</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell</name>
+ <dependencylist>
+ <dependency>pspell</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libtool-libs</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdemultimedia-kfile</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libogg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libvorbis</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openh323-devel</name>
+ <dependencylist>
+ <dependency>openh323</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lha</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postfix</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>pcre</dependency>
+ <dependency>cyrus-sasl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mrproject</name>
+ <dependencylist>
+ <dependency>glib</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>libxml</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>oaf</dependency>
+ <dependency>gnome-vfs</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>bonobo</dependency>
+ <dependency>popt</dependency>
+ <dependency>gnome-print</dependency>
+ <dependency>gal</dependency>
+ <dependency>libglade</dependency>
+ <dependency>libmrproject</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pciutils</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>hwdata</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Glide3</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libwvstreams</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>openssl</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wine</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>arts</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>sane-backends</dependency>
+ <dependency>libusb</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssh-clients</name>
+ <dependencylist>
+ <dependency>openssh</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qtcups</name>
+ <dependencylist>
+ <dependency>cups</dependency>
+ <dependency>qt</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libIDL-devel</name>
+ <dependencylist>
+ <dependency>libIDL</dependency>
+ <dependency>pkgconfig</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mars-nwe</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>ipxutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-fr</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Time-HiRes</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>x3270</name>
+ <dependencylist>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xmms-skins</name>
+ <dependencylist>
+ <dependency>xmms</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>anonftp</name>
+ <dependencylist>
+ <dependency>vsftpd</dependency>
+ <dependency>grep</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>gzip</dependency>
+ <dependency>cpio</dependency>
+ <dependency>tar</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>python-tools</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bonobo-conf</name>
+ <dependencylist>
+ <dependency>bonobo</dependency>
+ <dependency>GConf</dependency>
+ <dependency>oaf</dependency>
+ <dependency>glib</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>esound</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libungif-devel</name>
+ <dependencylist>
+ <dependency>libungif</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-devel</name>
+ <dependencylist>
+ <dependency>fontconfig</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kregexpeditor</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ttfonts-ja</name>
+ <dependencylist>
+ <dependency>fontconfig</dependency>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cipe</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lslk</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libmng-devel</name>
+ <dependencylist>
+ <dependency>libmng</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>im-sdk</name>
+ <dependencylist>
+ <dependency>Canna-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>pam</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fonts-KOI8-R-75dpi</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-nss</name>
+ <dependencylist>
+ <dependency>mozilla-nspr</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>doxygen-doxywizard</name>
+ <dependencylist>
+ <dependency>doxygen</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kmidi</name>
+ <dependencylist>
+ <dependency>timidity++</dependency>
+ <dependency>arts</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-logos</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-gcc-g77</name>
+ <dependencylist>
+ <dependency>compat-gcc</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Dutch</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdemultimedia-libs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libogg</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libvorbis</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>quanta</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-libs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>grep</dependency>
+ <dependency>textutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>freetype</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>atk-devel</name>
+ <dependencylist>
+ <dependency>atk</dependency>
+ <dependency>glib2-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>giftrans</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtk2-engines</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>foomatic</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-DateManip</dependency>
+ <dependency>perl-libxml-enno</dependency>
+ <dependency>perl-libxml-perl</dependency>
+ <dependency>perl-Parse-Yapp</dependency>
+ <dependency>perl-XML-Dumper</dependency>
+ <dependency>perl-XML-Encoding</dependency>
+ <dependency>perl-XML-Parser</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ <dependency>perl-libwww-perl</dependency>
+ <dependency>perl-XML-Grove</dependency>
+ <dependency>perl-XML-Twig</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ncpfs</name>
+ <dependencylist>
+ <dependency>ipxutils</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-mime-data</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ImageMagick-c++-devel</name>
+ <dependencylist>
+ <dependency>ImageMagick</dependency>
+ <dependency>ImageMagick-c++</dependency>
+ <dependency>ImageMagick-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kcharselect</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dhclient</name>
+ <dependencylist>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libdbi</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Slovenian</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xmltex</name>
+ <dependencylist>
+ <dependency>tetex</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libxml2-devel</name>
+ <dependencylist>
+ <dependency>libxml2</dependency>
+ <dependency>zlib-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>amanda-server</name>
+ <dependencylist>
+ <dependency>gnuplot</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>xinetd</dependency>
+ <dependency>amanda</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>diskcheck</name>
+ <dependencylist>
+ <dependency>crontabs</dependency>
+ <dependency>postfix</dependency>
+ <dependency>grep</dependency>
+ <dependency>bash</dependency>
+ <dependency>python</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>e2fsprogs-devel</name>
+ <dependencylist>
+ <dependency>e2fsprogs</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pdksh</name>
+ <dependencylist>
+ <dependency>grep</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fonts-ja</name>
+ <dependencylist>
+ <dependency>XFree86-100dpi-fonts</dependency>
+ <dependency>XFree86-75dpi-fonts</dependency>
+ <dependency>chkfontpath</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kWnn-devel</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>awesfx</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-doc</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-applets</name>
+ <dependencylist>
+ <dependency>scrollkeeper</dependency>
+ <dependency>gnome-panel</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>gail</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>libgtop2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-SGMLSpm</name>
+ <dependencylist>
+ <dependency>openjade</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libtool-libs13</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>koffice</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>arts</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>libxslt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>docbook-style-dsssl</name>
+ <dependencylist>
+ <dependency>openjade</dependency>
+ <dependency>docbook-dtds</dependency>
+ <dependency>sgml-common</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libavc1394-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cyrus-sasl-devel</name>
+ <dependencylist>
+ <dependency>cyrus-sasl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>pam</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>umb-scheme</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>eel2-devel</name>
+ <dependencylist>
+ <dependency>eel2</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>libgnomeui-devel</dependency>
+ <dependency>gnome-vfs2-devel</dependency>
+ <dependency>librsvg2-devel</dependency>
+ <dependency>bonobo-activation-devel</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>libart_lgpl-devel</dependency>
+ <dependency>gail-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>expect</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>tcl</dependency>
+ <dependency>tk</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gimp-print-cups</name>
+ <dependencylist>
+ <dependency>cups</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>gimp-print</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-kerberos</name>
+ <dependencylist>
+ <dependency>atk</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ftp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>enscript</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>noatun</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdemultimedia-arts</dependency>
+ <dependency>arts</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnomeprint-devel</name>
+ <dependencylist>
+ <dependency>libgnomeprint</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>pango-devel</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>libart_lgpl-devel</dependency>
+ <dependency>libbonobo-devel</dependency>
+ <dependency>bonobo-activation-devel</dependency>
+ <dependency>freetype</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>freeciv</name>
+ <dependencylist>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>Xaw3d</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>librpm404</name>
+ <dependencylist>
+ <dependency>gawk</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-print-devel</name>
+ <dependencylist>
+ <dependency>gnome-print</dependency>
+ <dependency>gdk-pixbuf-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>librep-devel</name>
+ <dependencylist>
+ <dependency>librep</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtkhtml2-devel</name>
+ <dependencylist>
+ <dependency>gtkhtml2</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>gnome-vfs2-devel</dependency>
+ <dependency>gail-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xtraceroute</name>
+ <dependencylist>
+ <dependency>gtkglarea</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-libstdc++-devel</name>
+ <dependencylist>
+ <dependency>compat-libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>losetup</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ntp</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>sed</dependency>
+ <dependency>libcap</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sharutils</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql-python</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>mx</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>postgresql-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>PyQt-examples</name>
+ <dependencylist>
+ <dependency>PyQt</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>SDL_mixer</name>
+ <dependencylist>
+ <dependency>SDL</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libogg</dependency>
+ <dependency>libvorbis</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ktalkd</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ash</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>eruby-libs</name>
+ <dependencylist>
+ <dependency>ruby-libs</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdebase-devel</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdebindings-qtc</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>VFlib2</name>
+ <dependencylist>
+ <dependency>XFree86-truetype-fonts</dependency>
+ <dependency>glibc</dependency>
+ <dependency>freetype</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xsane-gimp</name>
+ <dependencylist>
+ <dependency>gawk</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>gimp</dependency>
+ <dependency>glib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>sane-backends</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libusb</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libtabe-devel</name>
+ <dependencylist>
+ <dependency>libtabe</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-media</name>
+ <dependencylist>
+ <dependency>scrollkeeper</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gail</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssh</name>
+ <dependencylist>
+ <dependency>util-linux</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssl</name>
+ <dependencylist>
+ <dependency>mktemp</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>festival</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>stardict</name>
+ <dependencylist>
+ <dependency>openmotif</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qmkbootdisk</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>qt</dependency>
+ <dependency>mkbootdisk</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ImageMagick</name>
+ <dependencylist>
+ <dependency>bzip2</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libungif</dependency>
+ <dependency>zlib</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libxml2</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wordtrans-web</name>
+ <dependencylist>
+ <dependency>wordtrans</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nedit</name>
+ <dependencylist>
+ <dependency>openmotif</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fonts-KOI8-R-100dpi</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>oaf-devel</name>
+ <dependencylist>
+ <dependency>oaf</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ipxutils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kudzu-devel</name>
+ <dependencylist>
+ <dependency>pciutils-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ethereal</name>
+ <dependencylist>
+ <dependency>libpcap</dependency>
+ <dependency>net-snmp</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bootparamd</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>portmap</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>licq-gnome</name>
+ <dependencylist>
+ <dependency>licq</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdbg</name>
+ <dependencylist>
+ <dependency>gdb</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>usbview</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cups</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>htmlview</dependency>
+ <dependency>xinetd</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gpm</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>glibc</dependency>
+ <dependency>info</dependency>
+ <dependency>pam</dependency>
+ <dependency>bash</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pmake</name>
+ <dependencylist>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Xbae-devel</name>
+ <dependencylist>
+ <dependency>Xbae</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pkgconfig</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-mysql</name>
+ <dependencylist>
+ <dependency>php</dependency>
+ <dependency>perl</dependency>
+ <dependency>grep</dependency>
+ <dependency>mysql</dependency>
+ <dependency>zlib</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>jed</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>slang</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>autorun</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>krb5-server</name>
+ <dependencylist>
+ <dependency>krb5-libs</dependency>
+ <dependency>grep</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gkrellm</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kmessedwords</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtkhtml</name>
+ <dependencylist>
+ <dependency>gnome-print</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>pspell</dependency>
+ <dependency>bonobo</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>libcapplet0</dependency>
+ <dependency>esound</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgal19</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>libghttp</dependency>
+ <dependency>libglade</dependency>
+ <dependency>glib</dependency>
+ <dependency>gdk-pixbuf-gnome</dependency>
+ <dependency>libgnomeprint15</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>oaf</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel-bigmem</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>modutils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>mkinitrd</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt-PostgreSQL</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>postgresql-libs</dependency>
+ <dependency>Xft</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>setuptool</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>newt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lrzsz</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>skkdic</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wordtrans</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>beecrypt</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>isdn4k-utils-devel</name>
+ <dependencylist>
+ <dependency>isdn4k-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>grep</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>pcre</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>guile</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>readline</dependency>
+ <dependency>umb-scheme</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ttfprint</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mkbootdisk</name>
+ <dependencylist>
+ <dependency>mkinitrd</dependency>
+ <dependency>dosfstools</dependency>
+ <dependency>syslinux</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tree</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>isdn4k-utils</name>
+ <dependencylist>
+ <dependency>initscripts</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>PyQt</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>qt</dependency>
+ <dependency>sip</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>h2ps</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openmotif</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnupg</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>openldap</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Italian</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>emacs-el</name>
+ <dependencylist>
+ <dependency>emacs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>python-docs</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-httpd</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>alchemist</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>gnome-python2</dependency>
+ <dependency>httpd</dependency>
+ <dependency>usermode</dependency>
+ <dependency>4Suite</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kstars</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cproto</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-British</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libraw1394-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>knotes</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ORBit</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssl095a</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Spanish</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Parse-RecDescent</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>linuxdoc-tools</name>
+ <dependencylist>
+ <dependency>openjade</dependency>
+ <dependency>tetex-latex</dependency>
+ <dependency>gawk</dependency>
+ <dependency>groff</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libxml-devel</name>
+ <dependencylist>
+ <dependency>libxml</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fonts-KOI8-R</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-libgcj</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>zip</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-ISO8859-2-100dpi-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>amanda-devel</name>
+ <dependencylist>
+ <dependency>amanda</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>genromfs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>python-devel</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kvoctrain</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>licq-qt</name>
+ <dependencylist>
+ <dependency>licq</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>automake14</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>automake15</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-date</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>gnome-python2-canvas</dependency>
+ <dependency>usermode</dependency>
+ <dependency>ntp</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gimp-print</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ghostscript</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-sv</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wireless-tools</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>passwd</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>popt</dependency>
+ <dependency>libuser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-ldap</name>
+ <dependencylist>
+ <dependency>php</dependency>
+ <dependency>perl</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>openldap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>quota</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>isdn4k-utils-vboxgetty</name>
+ <dependencylist>
+ <dependency>isdn4k-utils</dependency>
+ <dependency>tcl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>SDL</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gdk-pixbuf</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>desktop-file-utils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gdm</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>scrollkeeper</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>librsvg2</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>pam</dependency>
+ <dependency>xinitrc</dependency>
+ <dependency>usermode</dependency>
+ <dependency>xsri</dependency>
+ <dependency>util-linux</dependency>
+ <dependency>redhat-artwork</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libwnck</name>
+ <dependencylist>
+ <dependency>glib2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glibc</dependency>
+ <dependency>atk</dependency>
+ <dependency>pango</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>eel2</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>librsvg2</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>gail</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>atk</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>usermode</name>
+ <dependencylist>
+ <dependency>util-linux</dependency>
+ <dependency>pam</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libuser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hesiod-devel</name>
+ <dependencylist>
+ <dependency>hesiod</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sendmail-doc</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt-designer</name>
+ <dependencylist>
+ <dependency>qt-devel</dependency>
+ <dependency>glibc</dependency>
+ <dependency>qt</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Xft</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdelibs</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>arts</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>python</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>pcre</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>libxslt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql-contrib</name>
+ <dependencylist>
+ <dependency>postgresql-libs</dependency>
+ <dependency>postgresql</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>perl</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>zlib</dependency>
+ <dependency>perl-DBD-Pg</dependency>
+ <dependency>perl-DBI</dependency>
+ <dependency>postgresql-perl</dependency>
+ <dependency>perl-Time-HiRes</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gsl</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pam</name>
+ <dependencylist>
+ <dependency>cracklib</dependency>
+ <dependency>cracklib-dicts</dependency>
+ <dependency>glib</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>grep</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>sed</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>db4</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-dom-inspector</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>mozilla</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>mozilla-nspr</dependency>
+ <dependency>compat-libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>librsvg2-devel</name>
+ <dependencylist>
+ <dependency>librsvg2</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>freetype-devel</dependency>
+ <dependency>libart_lgpl-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ac-archive</name>
+ <dependencylist>
+ <dependency>autoconf</dependency>
+ <dependency>perl</dependency>
+ <dependency>automake</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bonobo-activation-devel</name>
+ <dependencylist>
+ <dependency>bonobo-activation</dependency>
+ <dependency>ORBit2-devel</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>glib2-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>anaconda-runtime</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-nspr-devel</name>
+ <dependencylist>
+ <dependency>mozilla-nspr</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-mouse</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>usermode</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>pyxf86config</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openldap-servers</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>make</dependency>
+ <dependency>openldap</dependency>
+ <dependency>openssl</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>libtool-libs</dependency>
+ <dependency>pam</dependency>
+ <dependency>cyrus-sasl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-XML-Twig</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-XML-Parser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>stunnel</name>
+ <dependencylist>
+ <dependency>textutils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>glibc</dependency>
+ <dependency>words</dependency>
+ <dependency>net-tools</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc-common</dependency>
+ <dependency>make</dependency>
+ <dependency>openssl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ddskk</name>
+ <dependencylist>
+ <dependency>emacs</dependency>
+ <dependency>apel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeartwork-kworldclock</name>
+ <dependencylist>
+ <dependency>kdetoys</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-system-monitor</name>
+ <dependencylist>
+ <dependency>libgnomeui</dependency>
+ <dependency>libgtop2</dependency>
+ <dependency>libwnck</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>findutils</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>isicom</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>popt</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>finger-server</name>
+ <dependencylist>
+ <dependency>xinetd</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fontconfig</name>
+ <dependencylist>
+ <dependency>freetype</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>expat</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>up2date-gnome</name>
+ <dependencylist>
+ <dependency>up2date</dependency>
+ <dependency>usermode</dependency>
+ <dependency>pam</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>gnome-python2</dependency>
+ <dependency>gnome-python2-canvas</dependency>
+ <dependency>usermode-gtk</dependency>
+ <dependency>python</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>patchutils</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sox-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-tools</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>freetype</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gcc-c++</name>
+ <dependencylist>
+ <dependency>gcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libstdc++-devel</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gimp-print-utils</name>
+ <dependencylist>
+ <dependency>gimp-print</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gsl-devel</name>
+ <dependencylist>
+ <dependency>gsl</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>iptables</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kinput2-canna-wnn6</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>Canna-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Wnn6-SDK</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kviewshell-devel</name>
+ <dependencylist>
+ <dependency>kviewshell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-XML-Dumper</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-XML-Parser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>unix2dos</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>licq-text</name>
+ <dependencylist>
+ <dependency>licq</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libdbi-devel</name>
+ <dependencylist>
+ <dependency>libdbi</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>prelink</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kernel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-gcc-c++</name>
+ <dependencylist>
+ <dependency>compat-gcc</dependency>
+ <dependency>compat-libstdc++</dependency>
+ <dependency>compat-libstdc++-devel</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdepim-cellphone</name>
+ <dependencylist>
+ <dependency>kdepim</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bitmap-fonts</name>
+ <dependencylist>
+ <dependency>fontconfig</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gdbm-devel</name>
+ <dependencylist>
+ <dependency>gdbm</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdvi</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>kviewshell</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeaddons-noatun</name>
+ <dependencylist>
+ <dependency>noatun</dependency>
+ <dependency>kdemultimedia-arts</dependency>
+ <dependency>arts</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>SDL</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aumix-X11</name>
+ <dependencylist>
+ <dependency>aumix</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>gpm</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libelf-devel</name>
+ <dependencylist>
+ <dependency>libelf</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tetex-dvips</name>
+ <dependencylist>
+ <dependency>tetex</dependency>
+ <dependency>psutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-CPAN</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>patch</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mew-xemacs</name>
+ <dependencylist>
+ <dependency>xemacs</dependency>
+ <dependency>mew-common</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libelf</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdesdk-kspy</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnome-devel</name>
+ <dependencylist>
+ <dependency>libgnome</dependency>
+ <dependency>zlib-devel</dependency>
+ <dependency>esound-devel</dependency>
+ <dependency>ORBit2-devel</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>libbonobo-devel</dependency>
+ <dependency>GConf2-devel</dependency>
+ <dependency>gnome-vfs2-devel</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>libxslt-devel</dependency>
+ <dependency>bonobo-activation-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>taipeifonts</name>
+ <dependencylist>
+ <dependency>grep</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-python2</name>
+ <dependencylist>
+ <dependency>gnome-python2-bonobo</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pcre-devel</name>
+ <dependencylist>
+ <dependency>pcre</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dump</name>
+ <dependencylist>
+ <dependency>setup</dependency>
+ <dependency>rmt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nut</name>
+ <dependencylist>
+ <dependency>nut-client</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssh-askpass</name>
+ <dependencylist>
+ <dependency>openssh</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rdesktop</name>
+ <dependencylist>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sed</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>LPRng</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>gawk</dependency>
+ <dependency>bash</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pygtk2-libglade</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mgetty</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ark</name>
+ <dependencylist>
+ <dependency>zip</dependency>
+ <dependency>unzip</dependency>
+ <dependency>tar</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mdadm</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-xtrap-clients</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libaio</name>
+ <dependencylist>
+ <dependency>initscripts</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libart_lgpl-devel</name>
+ <dependencylist>
+ <dependency>libart_lgpl</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xawtv</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>usermode</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libungif-progs</name>
+ <dependencylist>
+ <dependency>libungif</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel-debug</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>modutils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>mkinitrd</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>indexhtml</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libmng-static</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>timidity++</name>
+ <dependencylist>
+ <dependency>arts</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libogg</dependency>
+ <dependency>slang</dependency>
+ <dependency>libvorbis</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>finger</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glibc-debug-static</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>glibc-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libpng</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnomeprint</name>
+ <dependencylist>
+ <dependency>urw-fonts</dependency>
+ <dependency>ghostscript</dependency>
+ <dependency>ghostscript-fonts</dependency>
+ <dependency>libxml</dependency>
+ <dependency>perl</dependency>
+ <dependency>XFree86</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>freetype</dependency>
+ <dependency>glib2</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>irb</name>
+ <dependencylist>
+ <dependency>ruby</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdebindings</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>kdebase</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kterm</name>
+ <dependencylist>
+ <dependency>utempter</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libole2-devel</name>
+ <dependencylist>
+ <dependency>libole2</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-terminal</name>
+ <dependencylist>
+ <dependency>vte</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-DateManip</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wl</name>
+ <dependencylist>
+ <dependency>emacs</dependency>
+ <dependency>wl-common</dependency>
+ <dependency>flim</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cyrus-sasl</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>db4</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>pam</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>WindowMaker</name>
+ <dependencylist>
+ <dependency>cpp</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libungif</dependency>
+ <dependency>WindowMaker-libs</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Guppi-devel</name>
+ <dependencylist>
+ <dependency>Guppi</dependency>
+ <dependency>gnome-libs-devel</dependency>
+ <dependency>gnome-print-devel</dependency>
+ <dependency>bonobo-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pydict</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>newt</name>
+ <dependencylist>
+ <dependency>slang</dependency>
+ <dependency>glibc</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xchat</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-print</name>
+ <dependencylist>
+ <dependency>gnome-libs</dependency>
+ <dependency>urw-fonts</dependency>
+ <dependency>ghostscript</dependency>
+ <dependency>ghostscript-fonts</dependency>
+ <dependency>libxml</dependency>
+ <dependency>perl</dependency>
+ <dependency>XFree86</dependency>
+ <dependency>libgnomeprint15</dependency>
+ <dependency>bash</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>freetype</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mrtg</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>gd</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libpng</dependency>
+ <dependency>zlib</dependency>
+ <dependency>perl-CGI</dependency>
+ <dependency>perl-URI</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Xaw3d-devel</name>
+ <dependencylist>
+ <dependency>Xaw3d</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kfile-pdf</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sysstat</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>vixie-cron</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fonts-ISO8859-2</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>arts-devel</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>arts</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeartwork-screensavers</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>iptables-ipv6</name>
+ <dependencylist>
+ <dependency>iptables</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lsof</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>binutils</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>freetype-demos</name>
+ <dependencylist>
+ <dependency>freetype</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-RPM2</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libelf</dependency>
+ <dependency>popt</dependency>
+ <dependency>rpm</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>namazu</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-File-MMagic</dependency>
+ <dependency>perl-NKF</dependency>
+ <dependency>kakasi</dependency>
+ <dependency>perl-Text-Kakasi</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ElectricFence</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>autoconvert-xchat</name>
+ <dependencylist>
+ <dependency>xchat</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Gtk-Perl</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>gtkglarea</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>libglade</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng10</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ <dependency>perl-libwww-perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdicconf</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libglade</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>krbafs-utils</name>
+ <dependencylist>
+ <dependency>krbafs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>krb5-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>byacc</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>memprof</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>binutils</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-rpm-config</name>
+ <dependencylist>
+ <dependency>rpm-build</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Japanese</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-slang</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Inline</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtkglarea</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mod_perl</name>
+ <dependencylist>
+ <dependency>httpd</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glibc-kernheaders</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>specspo</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-printer-gui</name>
+ <dependencylist>
+ <dependency>redhat-config-printer</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>gnome-python2</dependency>
+ <dependency>gnome-python2-gtkhtml2</dependency>
+ <dependency>usermode</dependency>
+ <dependency>python</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ncurses</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nfs-utils</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>portmap</dependency>
+ <dependency>sed</dependency>
+ <dependency>gawk</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>util-linux</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gal</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gedit</name>
+ <dependencylist>
+ <dependency>scrollkeeper</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>eel2</dependency>
+ <dependency>gail</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeprint</dependency>
+ <dependency>libgnomeprintui</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libpng10</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>squirrelmail</name>
+ <dependencylist>
+ <dependency>httpd</dependency>
+ <dependency>php</dependency>
+ <dependency>perl</dependency>
+ <dependency>tmpwatch</dependency>
+ <dependency>postfix</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>imap</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>xinetd</dependency>
+ <dependency>bash</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>metacity</name>
+ <dependencylist>
+ <dependency>redhat-artwork</dependency>
+ <dependency>bash</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xpdf-japanese</name>
+ <dependencylist>
+ <dependency>xpdf</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>librep</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>gmp</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>busybox-anaconda</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>readline-devel</name>
+ <dependencylist>
+ <dependency>readline</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>amanda-client</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>xinetd</dependency>
+ <dependency>amanda</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeaddons-knewsticker</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ <dependency>kdenetwork-libs</dependency>
+ <dependency>knewsticker</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pam_krb5</name>
+ <dependencylist>
+ <dependency>krbafs</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>irda-utils</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>grep</dependency>
+ <dependency>modutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hwcrypto</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>gawk</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdebindings-kmozilla</name>
+ <dependencylist>
+ <dependency>mozilla</dependency>
+ <dependency>kdebase</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdebindings</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdparanoia-libs</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-DBD-MySQL</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-DBI</dependency>
+ <dependency>glibc</dependency>
+ <dependency>mysql</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kaboodle</name>
+ <dependencylist>
+ <dependency>arts</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tripwire</name>
+ <dependencylist>
+ <dependency>sed</dependency>
+ <dependency>grep</dependency>
+ <dependency>gzip</dependency>
+ <dependency>tar</dependency>
+ <dependency>gawk</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdecl</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>net-snmp-devel</name>
+ <dependencylist>
+ <dependency>net-snmp</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libart_lgpl</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>freetype-devel</name>
+ <dependencylist>
+ <dependency>freetype</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libxml</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tetex</name>
+ <dependencylist>
+ <dependency>tmpwatch</dependency>
+ <dependency>dialog</dependency>
+ <dependency>ed</dependency>
+ <dependency>info</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>tetex-fonts</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ksymoops</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gimp</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>glib</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libpng10</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Canna</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>setup</dependency>
+ <dependency>grep</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>Canna-libs</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Wnn6-SDK-devel</name>
+ <dependencylist>
+ <dependency>Wnn6-SDK</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openmotif21</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>make</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>balsa</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>libesmtp</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgal19</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>libglade</dependency>
+ <dependency>glib</dependency>
+ <dependency>gdk-pixbuf-gnome</dependency>
+ <dependency>libgnomeprint15</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>gtkhtml</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>openldap</dependency>
+ <dependency>libtool-libs</dependency>
+ <dependency>pcre</dependency>
+ <dependency>pspell</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>slang-devel</name>
+ <dependencylist>
+ <dependency>slang</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ruby-mode</name>
+ <dependencylist>
+ <dependency>emacs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vnc-server</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>bash</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>beecrypt-devel</name>
+ <dependencylist>
+ <dependency>beecrypt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gconf-editor</name>
+ <dependencylist>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ipchains</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>karm</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>itcl</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>tcl</dependency>
+ <dependency>tk</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Korean</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-dbg-server</name>
+ <dependencylist>
+ <dependency>php</dependency>
+ <dependency>perl</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>SDL_image-devel</name>
+ <dependencylist>
+ <dependency>SDL_image</dependency>
+ <dependency>SDL-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kit</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fam-devel</name>
+ <dependencylist>
+ <dependency>fam</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>exmh</name>
+ <dependencylist>
+ <dependency>nmh</dependency>
+ <dependency>tk</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Filter</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgcj-devel</name>
+ <dependencylist>
+ <dependency>zip</dependency>
+ <dependency>libgcj</dependency>
+ <dependency>gawk</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-utils</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>e2fsprogs</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>gnome-panel</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-python2-canvas</name>
+ <dependencylist>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libxml10</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gqview</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>libpng</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ImageMagick-perl</name>
+ <dependencylist>
+ <dependency>ImageMagick</dependency>
+ <dependency>perl</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cups-libs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>openssl</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>GConf2-devel</name>
+ <dependencylist>
+ <dependency>GConf2</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>ORBit2-devel</dependency>
+ <dependency>glib2-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ghostscript-devel</name>
+ <dependencylist>
+ <dependency>ghostscript</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>slrn</name>
+ <dependencylist>
+ <dependency>slang</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ORBit2-devel</name>
+ <dependencylist>
+ <dependency>indent</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>linc-devel</dependency>
+ <dependency>libIDL-devel</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libIDL</dependency>
+ <dependency>linc</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeadmin</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>usermode</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>pam</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gzip</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>less</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lilo</name>
+ <dependencylist>
+ <dependency>mkinitrd</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Russian</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nss_db-compat</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dejagnu</name>
+ <dependencylist>
+ <dependency>tcl</dependency>
+ <dependency>expect</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>librsvg2</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>popt</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>libpng</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel-uml</name>
+ <dependencylist>
+ <dependency>kernel-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-logviewer</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>usermode</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>spamassassin</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>perl-Net-DNS</dependency>
+ <dependency>perl-Time-HiRes</dependency>
+ <dependency>procmail</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>mrtg</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rhn-applet</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>rpm</dependency>
+ <dependency>rpm-python</dependency>
+ <dependency>rhnlib</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>up2date-gnome</dependency>
+ <dependency>gnome-python2</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>gnome-python2-gtkhtml2</dependency>
+ <dependency>up2date</dependency>
+ <dependency>e2fsprogs</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mysql</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>info</dependency>
+ <dependency>grep</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl-DBI</dependency>
+ <dependency>perl-DBD-MySQL</dependency>
+ <dependency>perl</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ <dependency>perl-CGI</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>netconfig</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>newt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnomeprintui</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>libgnomeprint</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>glib2</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Chinese</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libpcap</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>w3c-libwww</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdessh</name>
+ <dependencylist>
+ <dependency>openssh-clients</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tuxracer</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>SDL</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>tcl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>skkinput</name>
+ <dependencylist>
+ <dependency>dbskkd-cdb</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lokkit</name>
+ <dependencylist>
+ <dependency>iptables</dependency>
+ <dependency>glibc</dependency>
+ <dependency>newt</dependency>
+ <dependency>popt</dependency>
+ <dependency>slang</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel-utils</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>net-snmp</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-pwdb</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kfax</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>kviewshell</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libattr-devel</name>
+ <dependencylist>
+ <dependency>libattr</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdebase</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>xinitrc</dependency>
+ <dependency>XFree86-xdm</dependency>
+ <dependency>cdparanoia-libs</dependency>
+ <dependency>desktop-backgrounds-basic</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>redhat-artwork</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>lm_sensors</dependency>
+ <dependency>glibc</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>XFree86-xfs</dependency>
+ <dependency>bash</dependency>
+ <dependency>arts</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>openssl</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>openldap</dependency>
+ <dependency>pam</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libvorbis</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gd-devel</name>
+ <dependencylist>
+ <dependency>gd</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kjots</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cups-drivers-hpijs</name>
+ <dependencylist>
+ <dependency>hpijs</dependency>
+ <dependency>ghostscript</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql-devel</name>
+ <dependencylist>
+ <dependency>postgresql-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>eruby-devel</name>
+ <dependencylist>
+ <dependency>eruby-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>desktop-backgrounds-extra</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>w3m-el</name>
+ <dependencylist>
+ <dependency>w3m-el-common</dependency>
+ <dependency>emacs</dependency>
+ <dependency>flim</dependency>
+ <dependency>w3m</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bonobo-activation</name>
+ <dependencylist>
+ <dependency>linc</dependency>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ <dependency>glib2</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>w3c-libwww-devel</name>
+ <dependencylist>
+ <dependency>w3c-libwww</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ktimer</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>magicdev</name>
+ <dependencylist>
+ <dependency>gnome-mime-data</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-TermReadKey</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pyOpenSSL</name>
+ <dependencylist>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rsync</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnat</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libpng-devel</name>
+ <dependencylist>
+ <dependency>libpng</dependency>
+ <dependency>zlib-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>g-wrap-devel</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>g-wrap</dependency>
+ <dependency>guile-devel</dependency>
+ <dependency>bash</dependency>
+ <dependency>guile</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gcc-g77</name>
+ <dependencylist>
+ <dependency>gcc</dependency>
+ <dependency>libf2c</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>termcap</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tetex-latex</name>
+ <dependencylist>
+ <dependency>tetex</dependency>
+ <dependency>netpbm-progs</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vnc-doc</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>klettres</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdebindings-qtjava</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>libgcj</dependency>
+ <dependency>jdkgcj</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cWnn</name>
+ <dependencylist>
+ <dependency>FreeWnn-common</dependency>
+ <dependency>cWnn-common</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vnc</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xemacs</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>ctags</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>perl</dependency>
+ <dependency>Canna-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>openldap</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libpng</dependency>
+ <dependency>postgresql-libs</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>FreeWnn-libs</dependency>
+ <dependency>openmotif</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgal19</name>
+ <dependencylist>
+ <dependency>gal</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdesdk-kbugbuster</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sysklogd</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dvdrecord</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kedit</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>GConf2</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ <dependency>atk</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sylpheed</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgtop2</name>
+ <dependencylist>
+ <dependency>glib2</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glibc</name>
+ <dependencylist>
+ <dependency>glibc-common</dependency>
+ <dependency>basesystem</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86</name>
+ <dependencylist>
+ <dependency>utempter</dependency>
+ <dependency>cpp</dependency>
+ <dependency>XFree86-xauth</dependency>
+ <dependency>Glide3</dependency>
+ <dependency>XFree86-xfs</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>XFree86-base-fonts</dependency>
+ <dependency>pam</dependency>
+ <dependency>kernel</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>freetype</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>x3270-x11</name>
+ <dependencylist>
+ <dependency>x3270</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Wnn6-SDK</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdepim-pilot</name>
+ <dependencylist>
+ <dependency>kdepim</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>pilot-link</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libtermcap-devel</name>
+ <dependencylist>
+ <dependency>libtermcap</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>epic</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libtiff-devel</name>
+ <dependencylist>
+ <dependency>libtiff</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>FreeWnn-devel</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bc</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>grep</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-gcc</name>
+ <dependencylist>
+ <dependency>binutils</dependency>
+ <dependency>glibc-devel</dependency>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtkam-gimp</name>
+ <dependencylist>
+ <dependency>gtkam</dependency>
+ <dependency>gimp</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>gawk</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>gphoto2</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wget</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdesdk-kapptemplate</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libdbi-dbd-mysql</name>
+ <dependencylist>
+ <dependency>libdbi</dependency>
+ <dependency>glibc</dependency>
+ <dependency>mysql</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sawfish</name>
+ <dependencylist>
+ <dependency>librep</dependency>
+ <dependency>rep-gtk</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>atk</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>gmp</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>imlib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>pango</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libungif</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdepim-devel</name>
+ <dependencylist>
+ <dependency>kdepim</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdemultimedia-arts</name>
+ <dependencylist>
+ <dependency>kdemultimedia-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>arts</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libogg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libvorbis</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>postgresql-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>pam</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mgetty-voice</name>
+ <dependencylist>
+ <dependency>mgetty</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>freetype-utils</name>
+ <dependencylist>
+ <dependency>freetype</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-bind</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>alchemist</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>gnome-python2</dependency>
+ <dependency>bind</dependency>
+ <dependency>4Suite</dependency>
+ <dependency>usermode</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>words</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>FreeWnn-common</name>
+ <dependencylist>
+ <dependency>grep</dependency>
+ <dependency>textutils</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-xfree86</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>python</dependency>
+ <dependency>usermode</dependency>
+ <dependency>hwdata</dependency>
+ <dependency>kudzu</dependency>
+ <dependency>pyxf86config</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dialog</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pccts</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glib2</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ncurses-c++-devel</name>
+ <dependencylist>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdesdk-kmtrace</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hesiod</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libmrproject-devel</name>
+ <dependencylist>
+ <dependency>libmrproject</dependency>
+ <dependency>gtk+-devel</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Finnish</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>webalizer</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>gd</dependency>
+ <dependency>libpng</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel-BOOT</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>modutils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>SDL_image</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>SDL</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>httpd-devel</name>
+ <dependencylist>
+ <dependency>libtool</dependency>
+ <dependency>httpd</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdesdk-gimp</name>
+ <dependencylist>
+ <dependency>gimp</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xemacs-el</name>
+ <dependencylist>
+ <dependency>xemacs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pilot-link095-compat</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>shapecfg</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>iproute</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dhcp-devel</name>
+ <dependencylist>
+ <dependency>dhcp</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>GConf</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glib</dependency>
+ <dependency>oaf</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>libxml</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>popt</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sox</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libogg</dependency>
+ <dependency>libvorbis</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bdflush</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pcre</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sane-frontends</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>gimp</dependency>
+ <dependency>sane-backends</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libusb</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-devel</name>
+ <dependencylist>
+ <dependency>pspell-devel</dependency>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sane-backends</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>grep</dependency>
+ <dependency>textutils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libusb</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-snmp</name>
+ <dependencylist>
+ <dependency>php</dependency>
+ <dependency>perl</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>net-snmp</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-ru</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>recode-devel</name>
+ <dependencylist>
+ <dependency>recode</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ctags</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tcpdump</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>zisofs-tools</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Polish</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>docbook-utils</name>
+ <dependencylist>
+ <dependency>docbook-style-dsssl</dependency>
+ <dependency>docbook-dtds</dependency>
+ <dependency>perl-SGMLSpm</dependency>
+ <dependency>which</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt-MySQL</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>mysql</dependency>
+ <dependency>Xft</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>traceroute</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cyrus-sasl-plain</name>
+ <dependencylist>
+ <dependency>cyrus-sasl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>file-roller</name>
+ <dependencylist>
+ <dependency>scrollkeeper</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mod_auth_pgsql</name>
+ <dependencylist>
+ <dependency>httpd</dependency>
+ <dependency>glibc</dependency>
+ <dependency>postgresql-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-truetype-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-python2-applet</name>
+ <dependencylist>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>gnome-panel</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libcapplet0-devel</name>
+ <dependencylist>
+ <dependency>libcapplet0</dependency>
+ <dependency>gnome-libs-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rp-pppoe</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>ppp</dependency>
+ <dependency>kernel</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>info</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pwlib-devel</name>
+ <dependencylist>
+ <dependency>pwlib</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>expat</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>attr</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libattr</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdesdk-kompare</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-it</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mtr</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cervisia</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fontconfig-devel</name>
+ <dependencylist>
+ <dependency>fontconfig</dependency>
+ <dependency>freetype-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>autofs</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>sed</dependency>
+ <dependency>gawk</dependency>
+ <dependency>textutils</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>grep</dependency>
+ <dependency>procps</dependency>
+ <dependency>redhat-release</dependency>
+ <dependency>glibc</dependency>
+ <dependency>hesiod</dependency>
+ <dependency>openldap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ppp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>autoconf</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>gawk</dependency>
+ <dependency>m4</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>perl</dependency>
+ <dependency>textutils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xinitrc</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>bash</dependency>
+ <dependency>switchdesk</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pam-devel</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-mail</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>mozilla</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>mozilla-nspr</dependency>
+ <dependency>compat-libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ypserv</name>
+ <dependencylist>
+ <dependency>gawk</dependency>
+ <dependency>make</dependency>
+ <dependency>portmap</dependency>
+ <dependency>bash</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>arpwatch</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-vfs</name>
+ <dependencylist>
+ <dependency>glib</dependency>
+ <dependency>GConf</dependency>
+ <dependency>oaf</dependency>
+ <dependency>gnome-mime-data</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mailx</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ksirc</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Date-Calc</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl-Bit-Vector</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>diffutils</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ruby-docs</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>curl</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hpijs</name>
+ <dependencylist>
+ <dependency>ghostscript</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tix</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>tcl</dependency>
+ <dependency>tk</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnuplot</name>
+ <dependencylist>
+ <dependency>gd</dependency>
+ <dependency>libpng</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-NKF</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nc</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kgeo</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kviewshell</name>
+ <dependencylist>
+ <dependency>kview</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cups-drivers</name>
+ <dependencylist>
+ <dependency>cups</dependency>
+ <dependency>ghostscript</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>plugger</name>
+ <dependencylist>
+ <dependency>mozilla</dependency>
+ <dependency>mikmod</dependency>
+ <dependency>xloadimage</dependency>
+ <dependency>sox</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>FreeWnn</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>grep</dependency>
+ <dependency>textutils</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>FreeWnn-common</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>korn</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>kdenetwork-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-session</name>
+ <dependencylist>
+ <dependency>redhat-artwork</dependency>
+ <dependency>redhat-logos</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeartwork</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>GConf-devel</name>
+ <dependencylist>
+ <dependency>GConf</dependency>
+ <dependency>ORBit-devel</dependency>
+ <dependency>glib-devel</dependency>
+ <dependency>oaf-devel</dependency>
+ <dependency>gtk+-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Digest-HMAC</name>
+ <dependencylist>
+ <dependency>perl-Digest-SHA1</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-desktop</name>
+ <dependencylist>
+ <dependency>redhat-artwork</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>htdig-web</name>
+ <dependencylist>
+ <dependency>htdig</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libogg</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ncompress</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pwlib</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>openssl</dependency>
+ <dependency>expat</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dos2unix</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt2-designer</name>
+ <dependencylist>
+ <dependency>qt2-devel</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libmng</dependency>
+ <dependency>libpng</dependency>
+ <dependency>compat-libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xemacs-info</name>
+ <dependencylist>
+ <dependency>xemacs</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hanterm-xf</name>
+ <dependencylist>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Xaw3d</dependency>
+ <dependency>ttfonts-ko</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>utempter</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnomecanvas</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>time</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kxmlrpcd</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-lokkit</name>
+ <dependencylist>
+ <dependency>gnome-libs</dependency>
+ <dependency>iptables</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nasm</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gv</name>
+ <dependencylist>
+ <dependency>ghostscript</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Xaw3d</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cyrus-sasl-md5</name>
+ <dependencylist>
+ <dependency>cyrus-sasl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gkermit</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>iputils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-HTML-Tagset</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-cyrillic-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>python-optik</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-switchmail</name>
+ <dependencylist>
+ <dependency>newt</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>python</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gd</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pciutils-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>recode</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-pgsql</name>
+ <dependencylist>
+ <dependency>php</dependency>
+ <dependency>perl</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>postgresql-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fileutils</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>grep</dependency>
+ <dependency>bash</dependency>
+ <dependency>libacl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xsnow</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wmix</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dtach</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>klprfax</name>
+ <dependencylist>
+ <dependency>LPRng</dependency>
+ <dependency>kdebase</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gcc-objc</name>
+ <dependencylist>
+ <dependency>gcc</dependency>
+ <dependency>libobjc</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kview</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rpm-devel</name>
+ <dependencylist>
+ <dependency>rpm</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>libelf</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tcllib</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lftp</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>unzip</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>psacct</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssl096</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kcc</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>linc-devel</name>
+ <dependencylist>
+ <dependency>linc</dependency>
+ <dependency>pkgconfig</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mkisofs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-Xnest</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtk2</name>
+ <dependencylist>
+ <dependency>glib2</dependency>
+ <dependency>atk</dependency>
+ <dependency>pango</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Xft</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtk+</name>
+ <dependencylist>
+ <dependency>glib</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>apmd</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ghostscript</name>
+ <dependencylist>
+ <dependency>VFlib2</dependency>
+ <dependency>zlib</dependency>
+ <dependency>libpng</dependency>
+ <dependency>glib</dependency>
+ <dependency>urw-fonts</dependency>
+ <dependency>ghostscript-fonts</dependency>
+ <dependency>Omni</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>gimp-print</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>freetype</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bind-devel</name>
+ <dependencylist>
+ <dependency>bind</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnucash</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>bonobo</dependency>
+ <dependency>esound</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgal19</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>libghttp</dependency>
+ <dependency>libglade</dependency>
+ <dependency>glib</dependency>
+ <dependency>gdk-pixbuf-gnome</dependency>
+ <dependency>libgnomeprint15</dependency>
+ <dependency>gtkhtml</dependency>
+ <dependency>guile</dependency>
+ <dependency>Guppi</dependency>
+ <dependency>g-wrap</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>oaf</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ <dependency>perl-CPAN</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dia</name>
+ <dependencylist>
+ <dependency>libxml</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>popt</dependency>
+ <dependency>libunicode</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fbset</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-devel</name>
+ <dependencylist>
+ <dependency>mozilla</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>mozilla-nspr</dependency>
+ <dependency>compat-libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>a2ps</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>info</dependency>
+ <dependency>psutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>booty</name>
+ <dependencylist>
+ <dependency>rhpl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdenetwork-libs</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rusers</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fetchmail</name>
+ <dependencylist>
+ <dependency>postfix</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>hesiod</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tora</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nss_ldap</name>
+ <dependencylist>
+ <dependency>nscd</dependency>
+ <dependency>grep</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>sed</dependency>
+ <dependency>textutils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>openldap</dependency>
+ <dependency>pam</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-python2-nautilus</name>
+ <dependencylist>
+ <dependency>orbit-python</dependency>
+ <dependency>nautilus</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>eel2</dependency>
+ <dependency>gail</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dev</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>sed</dependency>
+ <dependency>textutils</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>anaconda</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>rpm404-python</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>python</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>e2fsprogs</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mktemp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>jisksp14</name>
+ <dependencylist>
+ <dependency>XFree86-xfs</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>imlib-devel</name>
+ <dependencylist>
+ <dependency>imlib</dependency>
+ <dependency>libtiff-devel</dependency>
+ <dependency>libjpeg-devel</dependency>
+ <dependency>zlib-devel</dependency>
+ <dependency>gtk+-devel</dependency>
+ <dependency>libungif-devel</dependency>
+ <dependency>XFree86-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mkinitrd</name>
+ <dependencylist>
+ <dependency>dev</dependency>
+ <dependency>e2fsprogs</dependency>
+ <dependency>bash</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>mount</dependency>
+ <dependency>gzip</dependency>
+ <dependency>tar</dependency>
+ <dependency>modutils</dependency>
+ <dependency>losetup</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>findutils</dependency>
+ <dependency>lvm</dependency>
+ <dependency>filesystem</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>reiserfs-utils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-dbg-base</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kakasi</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nvi-m17n</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>tcsh</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Catalan</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bridge-utils-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel-doc</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>macutils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gawk</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tcl</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>raidtools</name>
+ <dependencylist>
+ <dependency>MAKEDEV</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-panel</name>
+ <dependencylist>
+ <dependency>gnome-desktop</dependency>
+ <dependency>gawk</dependency>
+ <dependency>textutils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libpng</dependency>
+ <dependency>popt</dependency>
+ <dependency>libwnck</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>octave</name>
+ <dependencylist>
+ <dependency>gnuplot</dependency>
+ <dependency>less</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>blas</dependency>
+ <dependency>libf2c</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>lapack</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gimp-devel</name>
+ <dependencylist>
+ <dependency>gtk+-devel</dependency>
+ <dependency>gimp</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libbonoboui-devel</name>
+ <dependencylist>
+ <dependency>libbonoboui</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>ORBit2-devel</dependency>
+ <dependency>bonobo-activation-devel</dependency>
+ <dependency>libbonobo-devel</dependency>
+ <dependency>libgnomecanvas-devel</dependency>
+ <dependency>libgnome-devel</dependency>
+ <dependency>libart_lgpl-devel</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>libglade2-devel</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xpdf</name>
+ <dependencylist>
+ <dependency>urw-fonts</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>unixODBC-kde</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>unixODBC</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xpdf-korean</name>
+ <dependencylist>
+ <dependency>xpdf</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>scrollkeeper</name>
+ <dependencylist>
+ <dependency>intltool</dependency>
+ <dependency>docbook-dtds</dependency>
+ <dependency>openjade</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>libxslt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnomeui</name>
+ <dependencylist>
+ <dependency>ORBit2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>esound</dependency>
+ <dependency>Xft</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>glibc</dependency>
+ <dependency>atk</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>popt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdda2wav</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libraw1394</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bind-utils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>openssl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-en-gb</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-language</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>usermode</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kudzu</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>modutils</dependency>
+ <dependency>pam</dependency>
+ <dependency>hwdata</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>newt</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nmap</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-ja</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>comsat</name>
+ <dependencylist>
+ <dependency>xinetd</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-fr</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pxe</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-psm</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>mozilla</dependency>
+ <dependency>mozilla-nss</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>mozilla-nspr</dependency>
+ <dependency>compat-libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>zip</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libstdc++-devel</name>
+ <dependencylist>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>perl-Filter</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kregexpeditor-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dietlibc</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>w3c-libwww-apps</name>
+ <dependencylist>
+ <dependency>w3c-libwww</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>telnet-server</name>
+ <dependencylist>
+ <dependency>xinetd</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pygtk2-devel</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sudo</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bug-buddy</name>
+ <dependencylist>
+ <dependency>gdb</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Hebrew</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ntsysv</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>glibc</dependency>
+ <dependency>newt</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pinfo</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>jisksp16-1990</name>
+ <dependencylist>
+ <dependency>XFree86-xfs</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>netdump</name>
+ <dependencylist>
+ <dependency>openssh</dependency>
+ <dependency>openssh-clients</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>gawk</dependency>
+ <dependency>net-tools</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-services</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>gnome-python2</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>gnome-python2-canvas</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>usermode</dependency>
+ <dependency>usermode-gtk</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lm_sensors</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xfig</name>
+ <dependencylist>
+ <dependency>transfig</dependency>
+ <dependency>xpdf</dependency>
+ <dependency>ImageMagick</dependency>
+ <dependency>aspell</dependency>
+ <dependency>htmlview</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>Xaw3d</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libjpeg-devel</name>
+ <dependencylist>
+ <dependency>libjpeg</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>flim-xemacs</name>
+ <dependencylist>
+ <dependency>xemacs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xpdf-chinese-traditional</name>
+ <dependencylist>
+ <dependency>xpdf</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sip-devel</name>
+ <dependencylist>
+ <dependency>sip</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>htmlview</name>
+ <dependencylist>
+ <dependency>redhat-menus</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xsri</name>
+ <dependencylist>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tar</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-File-MMagic</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wu-ftpd</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>openssl</dependency>
+ <dependency>xinetd</dependency>
+ <dependency>pam</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pilot-link-devel</name>
+ <dependencylist>
+ <dependency>pilot-link</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>keduca</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Hungarian</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>imlib</name>
+ <dependencylist>
+ <dependency>libtiff</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>zlib</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libungif</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>logrotate</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cWnn-common</name>
+ <dependencylist>
+ <dependency>FreeWnn-common</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-libs</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>imlib</dependency>
+ <dependency>esound</dependency>
+ <dependency>htmlview</dependency>
+ <dependency>utempter</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng10</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>htdig</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rdist</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glibc-devel</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc-kernheaders</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gcc</name>
+ <dependencylist>
+ <dependency>cpp</dependency>
+ <dependency>binutils</dependency>
+ <dependency>glibc-devel</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sip</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>python</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mod_ssl</name>
+ <dependencylist>
+ <dependency>openssl</dependency>
+ <dependency>dev</dependency>
+ <dependency>textutils</dependency>
+ <dependency>httpd</dependency>
+ <dependency>make</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kghostview</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>librsvg</name>
+ <dependencylist>
+ <dependency>glib</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>libxml</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>popt</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libpng</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>fonts-ISO8859-2-75dpi</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-desktop-devel</name>
+ <dependencylist>
+ <dependency>gnome-desktop</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>GConf2-devel</dependency>
+ <dependency>gnome-vfs2-devel</dependency>
+ <dependency>libgnomeui-devel</dependency>
+ <dependency>libgnome-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openoffice-libs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rep-gtk</name>
+ <dependencylist>
+ <dependency>librep</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>bash</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>guile-devel</name>
+ <dependencylist>
+ <dependency>guile</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sndconfig</name>
+ <dependencylist>
+ <dependency>sox</dependency>
+ <dependency>kudzu</dependency>
+ <dependency>aumix</dependency>
+ <dependency>kernel</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libxslt-python</name>
+ <dependencylist>
+ <dependency>libxslt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tcsh</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nut-client</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-en-ca</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>librpm404-devel</name>
+ <dependencylist>
+ <dependency>librpm404</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nasm-rdoff</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>caching-nameserver</name>
+ <dependencylist>
+ <dependency>bind</dependency>
+ <dependency>textutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wmapm</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pspell</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libtool-libs</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kljettool</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pyxf86config</name>
+ <dependencylist>
+ <dependency>glib2</dependency>
+ <dependency>python</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libf2c</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>less</dependency>
+ <dependency>groff</dependency>
+ <dependency>findutils</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>zlib-devel</name>
+ <dependencylist>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>miniChinput</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>imlib</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Xft</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bind</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>textutils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>sed</dependency>
+ <dependency>bind-utils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>logwatch</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>textutils</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>grep</dependency>
+ <dependency>mailx</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libglade2-devel</name>
+ <dependencylist>
+ <dependency>libglade2</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>python</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pvm</name>
+ <dependencylist>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>tcsh</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rpm404-python</name>
+ <dependencylist>
+ <dependency>librpm404</dependency>
+ <dependency>python</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>popt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>talk</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libao</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt-Xt</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Xft</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libuser</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>openldap</dependency>
+ <dependency>pam</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libole2</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nss_db</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>make</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sgml-common</name>
+ <dependencylist>
+ <dependency>sh-utils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kbd</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>usermode</dependency>
+ <dependency>sed</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gcc-gnat</name>
+ <dependencylist>
+ <dependency>gcc</dependency>
+ <dependency>libgnat</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Archive-Tar</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pine</name>
+ <dependencylist>
+ <dependency>krb5-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>openldap</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>pam</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mutt</name>
+ <dependencylist>
+ <dependency>slang</dependency>
+ <dependency>postfix</dependency>
+ <dependency>wget</dependency>
+ <dependency>bash</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cyrus-sasl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>transfig</name>
+ <dependencylist>
+ <dependency>tcsh</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>anaconda-images</name>
+ <dependencylist>
+ <dependency>anaconda-runtime</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>netatalk-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tmpwatch</name>
+ <dependencylist>
+ <dependency>psmisc</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wvdial</name>
+ <dependencylist>
+ <dependency>ppp</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>lockdev</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libwvstreams</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>SDL_net-devel</name>
+ <dependencylist>
+ <dependency>SDL_net</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bonobo-conf-devel</name>
+ <dependencylist>
+ <dependency>bonobo-conf</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdemultimedia-devel</name>
+ <dependencylist>
+ <dependency>kdemultimedia-arts</dependency>
+ <dependency>noatun</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libglade2</name>
+ <dependencylist>
+ <dependency>libxml2</dependency>
+ <dependency>glibc</dependency>
+ <dependency>atk</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Afrikaans</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>jpilot</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>pilot-link</dependency>
+ <dependency>glibc</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pilot-link</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libpng</dependency>
+ <dependency>readline</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ruby</name>
+ <dependencylist>
+ <dependency>ruby-libs</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xcpustate</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Text-Kakasi</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>kakasi</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>apel</name>
+ <dependencylist>
+ <dependency>emacs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>at-spi-devel</name>
+ <dependencylist>
+ <dependency>at-spi</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>libbonobo-devel</dependency>
+ <dependency>ORBit2-devel</dependency>
+ <dependency>gail-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>flex</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>am-utils</name>
+ <dependencylist>
+ <dependency>portmap</dependency>
+ <dependency>grep</dependency>
+ <dependency>gawk</dependency>
+ <dependency>findutils</dependency>
+ <dependency>info</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>hesiod</dependency>
+ <dependency>openldap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sendmail-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Swedish</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>python</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>expat</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>gmp</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>splint</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdegames</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>arts</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>w3m-el-xemacs</name>
+ <dependencylist>
+ <dependency>w3m-el-common</dependency>
+ <dependency>xemacs</dependency>
+ <dependency>flim-xemacs</dependency>
+ <dependency>w3m</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>SysVinit</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>groff-gxditview</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>net-snmp-utils</name>
+ <dependencylist>
+ <dependency>net-snmp</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pango</name>
+ <dependencylist>
+ <dependency>glib2</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>freetype</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Xft</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wl-common</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libstdc++</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>krb5-devel</name>
+ <dependencylist>
+ <dependency>krb5-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>knm_new</name>
+ <dependencylist>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-gcc-java</name>
+ <dependencylist>
+ <dependency>compat-gcc</dependency>
+ <dependency>compat-libgcj</dependency>
+ <dependency>compat-libgcj-devel</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libjpeg</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cleanfeed</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>expat-devel</name>
+ <dependencylist>
+ <dependency>expat</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wordtrans-qt</name>
+ <dependencylist>
+ <dependency>wordtrans</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qtcups-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>psmisc</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Czech</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xmms-devel</name>
+ <dependencylist>
+ <dependency>xmms</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kpf</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wordtrans-kde</name>
+ <dependencylist>
+ <dependency>wordtrans</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bonobo</name>
+ <dependencylist>
+ <dependency>gnome-libs</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>oaf</dependency>
+ <dependency>libxml</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>esound</dependency>
+ <dependency>freetype</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>libgnomeprint15</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>popt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssh-askpass-gnome</name>
+ <dependencylist>
+ <dependency>openssh</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeaddons-kicker</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ed</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openoffice</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>perl</dependency>
+ <dependency>openoffice-libs</dependency>
+ <dependency>openoffice-i18n</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>mozilla</dependency>
+ <dependency>mozilla-mail</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xtoolwait</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gpm-devel</name>
+ <dependencylist>
+ <dependency>gpm</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgcc</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>zebra</name>
+ <dependencylist>
+ <dependency>grep</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>pam</dependency>
+ <dependency>readline</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libmng</name>
+ <dependencylist>
+ <dependency>zlib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bitmap-fonts-cjk</name>
+ <dependencylist>
+ <dependency>fontconfig</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgcj</name>
+ <dependencylist>
+ <dependency>zip</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pvm-gui</name>
+ <dependencylist>
+ <dependency>pvm</dependency>
+ <dependency>tcsh</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>tcl</dependency>
+ <dependency>tk</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nhpf</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeutils-laptop</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bzip2-devel</name>
+ <dependencylist>
+ <dependency>bzip2</dependency>
+ <dependency>bzip2-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-Mesa-libGL</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gperf</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rwall-server</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>portmap</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libtabe</name>
+ <dependencylist>
+ <dependency>db4</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql-odbc</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dhcp</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mtx</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openjade</name>
+ <dependencylist>
+ <dependency>sgml-common</dependency>
+ <dependency>docbook-dtds</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdepim</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-devel</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Parse-Yapp</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-audio-extra</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kcoloredit</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt2-devel</name>
+ <dependencylist>
+ <dependency>qt2</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libmng</dependency>
+ <dependency>libpng</dependency>
+ <dependency>compat-libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-ISO8859-15-75dpi-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>procmail</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dev86</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnumeric</name>
+ <dependencylist>
+ <dependency>gnome-libs</dependency>
+ <dependency>libglade</dependency>
+ <dependency>guile</dependency>
+ <dependency>gnome-print</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glibc</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>bonobo</dependency>
+ <dependency>esound</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgal19</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>gdk-pixbuf-gnome</dependency>
+ <dependency>libole2</dependency>
+ <dependency>libgnomeprint15</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>oaf</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rdate</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-switchmail-gnome</name>
+ <dependencylist>
+ <dependency>redhat-switchmail</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>chkconfig</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-XML-Encoding</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-XML-Parser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt-ODBC</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>unixODBC</dependency>
+ <dependency>Xft</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glibc-common</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-xdm</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>pam</dependency>
+ <dependency>xinitrc</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdict</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rootfiles</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt-devel</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>Xft</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openoffice-i18n</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>blas-man</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libdbi-dbd-pgsql</name>
+ <dependencylist>
+ <dependency>libdbi</dependency>
+ <dependency>glibc</dependency>
+ <dependency>postgresql-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rarpd</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>slocate</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mt-st</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tftp-server</name>
+ <dependencylist>
+ <dependency>xinetd</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-db</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>compat-libstdc++</dependency>
+ <dependency>tcl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glibc-debug</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>glibc-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tWnn</name>
+ <dependencylist>
+ <dependency>FreeWnn-common</dependency>
+ <dependency>cWnn-common</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tcp_wrappers</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pam_smb</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mtools</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pygtk2</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-French</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openldap12</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>open</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-nl</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-no</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vim-minimal</name>
+ <dependencylist>
+ <dependency>vim-common</dependency>
+ <dependency>libacl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rmt</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>SDL_net</name>
+ <dependencylist>
+ <dependency>SDL</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glibc-profile</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>emacspeak</name>
+ <dependencylist>
+ <dependency>emacs</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kWnn</name>
+ <dependencylist>
+ <dependency>FreeWnn-common</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-it</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>groff-perl</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>urw-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libkscan-devel</name>
+ <dependencylist>
+ <dependency>libkscan</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>alchemist-devel</name>
+ <dependencylist>
+ <dependency>alchemist</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kmail</name>
+ <dependencylist>
+ <dependency>kdenetwork-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xmlto</name>
+ <dependencylist>
+ <dependency>docbook-style-xsl</dependency>
+ <dependency>passivetex</dependency>
+ <dependency>libxslt</dependency>
+ <dependency>docbook-dtds</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-vfs-devel</name>
+ <dependencylist>
+ <dependency>gnome-vfs</dependency>
+ <dependency>GConf-devel</dependency>
+ <dependency>oaf-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>SDL-devel</name>
+ <dependencylist>
+ <dependency>SDL</dependency>
+ <dependency>XFree86-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>comps-extras</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mgetty-sendfax</name>
+ <dependencylist>
+ <dependency>mgetty</dependency>
+ <dependency>netpbm-progs</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rsh</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql-perl</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>postgresql-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdelibs-devel</name>
+ <dependencylist>
+ <dependency>qt-devel</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>pcre-devel</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kcalc</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ftpcopy</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>psutils</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>authconfig</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ <dependency>glib2</dependency>
+ <dependency>newt</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libusb</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hdparm</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-100dpi-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libcap-devel</name>
+ <dependencylist>
+ <dependency>libcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql-server</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>postgresql</dependency>
+ <dependency>postgresql-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Xlt</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>jdkgcj</name>
+ <dependencylist>
+ <dependency>gcc-java</dependency>
+ <dependency>libgcj</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-pt</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-HTML-Parser</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-HTML-Tagset</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kruler</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Xaw3d</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ttcp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel-source</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>gawk</dependency>
+ <dependency>gcc</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lm_sensors-devel</name>
+ <dependencylist>
+ <dependency>lm_sensors</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Xtest</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gftp</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>docbook-dtds</name>
+ <dependencylist>
+ <dependency>xml-common</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>perl</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>sgml-common</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>privoxy</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>httpd-manual</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>zsh</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>info</dependency>
+ <dependency>libcap</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pidentd</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>sed</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>util-linux</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Xft-devel</name>
+ <dependencylist>
+ <dependency>Xft</dependency>
+ <dependency>freetype-devel</dependency>
+ <dependency>fontconfig-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>setserial</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libobjc</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bonobo-devel</name>
+ <dependencylist>
+ <dependency>bonobo</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>control-center</name>
+ <dependencylist>
+ <dependency>xscreensaver</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>esound</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>freetype</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>gnome-desktop</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>Xft</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xisdnload</name>
+ <dependencylist>
+ <dependency>isdn4k-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xboard</name>
+ <dependencylist>
+ <dependency>gnuchess</dependency>
+ <dependency>info</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtkhtml2</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>gail</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>pango</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ypbind</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>portmap</dependency>
+ <dependency>yp-tools</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>licq</name>
+ <dependencylist>
+ <dependency>htmlview</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>inews</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libelf</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-securitylevel</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>usermode</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>crontabs</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-vfs2-extras</name>
+ <dependencylist>
+ <dependency>gnome-vfs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>net-snmp</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>libelf</dependency>
+ <dependency>popt</dependency>
+ <dependency>rpm</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dbskkd-cdb</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Greek</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libglade-devel</name>
+ <dependencylist>
+ <dependency>libglade</dependency>
+ <dependency>gnome-libs-devel</dependency>
+ <dependency>libxml-devel</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>VFlib2-conf-ja</name>
+ <dependencylist>
+ <dependency>VFlib2</dependency>
+ <dependency>ttfonts-ja</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vixie-cron</name>
+ <dependencylist>
+ <dependency>sysklogd</dependency>
+ <dependency>bash</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-libxml-enno</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-DateManip</dependency>
+ <dependency>perl-libwww-perl</dependency>
+ <dependency>perl-Parse-Yapp</dependency>
+ <dependency>perl-XML-Encoding</dependency>
+ <dependency>perl-XML-Parser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>which</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libcap</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-packages</name>
+ <dependencylist>
+ <dependency>initscripts</dependency>
+ <dependency>usermode</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>comps-extras</dependency>
+ <dependency>rpm404-python</dependency>
+ <dependency>libxml2-python</dependency>
+ <dependency>gnome-python2</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>samba-client</name>
+ <dependencylist>
+ <dependency>samba-common</dependency>
+ <dependency>bash</dependency>
+ <dependency>libacl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>pam</dependency>
+ <dependency>popt</dependency>
+ <dependency>readline</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kscd</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hwbrowser</name>
+ <dependencylist>
+ <dependency>gnome-python2</dependency>
+ <dependency>usermode</dependency>
+ <dependency>kudzu</dependency>
+ <dependency>parted</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cracklib-dicts</name>
+ <dependencylist>
+ <dependency>words</dependency>
+ <dependency>bash</dependency>
+ <dependency>cracklib</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-ko</name>
+ <dependencylist>
+ <dependency>man</dependency>
+ <dependency>gzip</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-pt_BR</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gal-devel</name>
+ <dependencylist>
+ <dependency>gal</dependency>
+ <dependency>libgal19</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Norwegian-Nynorsk</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-python2-gtkhtml2</name>
+ <dependencylist>
+ <dependency>gtkhtml2</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wmclock</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdetoys</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-nspr</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>eject</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdoc</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>strace</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libbonobo</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>glib2</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pango-devel</name>
+ <dependencylist>
+ <dependency>pango</dependency>
+ <dependency>XFree86-devel</dependency>
+ <dependency>glib2-devel</dependency>
+ <dependency>freetype-devel</dependency>
+ <dependency>fontconfig-devel</dependency>
+ <dependency>Xft-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>elinks</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gpm</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hwdata</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libusb-devel</name>
+ <dependencylist>
+ <dependency>libusb</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>readline41</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tetex-xdvi</name>
+ <dependencylist>
+ <dependency>tetex-fonts</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>w3c-libwww</dependency>
+ <dependency>VFlib2</dependency>
+ <dependency>Xaw3d</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ktouch</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gail</name>
+ <dependencylist>
+ <dependency>atk</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>iproute</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>docbook-style-xsl</name>
+ <dependencylist>
+ <dependency>docbook-dtds</dependency>
+ <dependency>xml-common</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libkscan</name>
+ <dependencylist>
+ <dependency>sane-backends</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libusb</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ImageMagick-devel</name>
+ <dependencylist>
+ <dependency>ImageMagick</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>docbook-utils-pdf</name>
+ <dependencylist>
+ <dependency>tetex-dvips</dependency>
+ <dependency>jadetex</dependency>
+ <dependency>docbook-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>db4-java</name>
+ <dependencylist>
+ <dependency>db4</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgtop-examples</name>
+ <dependencylist>
+ <dependency>libgtop</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>glib</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>guile</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libIDL</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>linc</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openldap-clients</name>
+ <dependencylist>
+ <dependency>openldap</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>pam</dependency>
+ <dependency>cyrus-sasl</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bash-doc</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>unixODBC-devel</name>
+ <dependencylist>
+ <dependency>unixODBC</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>krb5-workstation</name>
+ <dependencylist>
+ <dependency>krb5-libs</dependency>
+ <dependency>grep</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>up2date</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>rpm</dependency>
+ <dependency>rpm-python</dependency>
+ <dependency>gnupg</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>rhnlib</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>mkinitrd</dependency>
+ <dependency>python-optik</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>newt</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgtop2-devel</name>
+ <dependencylist>
+ <dependency>libgtop2</dependency>
+ <dependency>glib2-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ethtool</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ksnapshot</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vorbis-tools</name>
+ <dependencylist>
+ <dependency>libogg</dependency>
+ <dependency>libvorbis</dependency>
+ <dependency>libao</dependency>
+ <dependency>glibc</dependency>
+ <dependency>curl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Xlt-devel</name>
+ <dependencylist>
+ <dependency>Xlt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-rootpassword</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>usermode</dependency>
+ <dependency>libuser</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pnm2ppa</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdegames-devel</name>
+ <dependencylist>
+ <dependency>kdegames</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cpio</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kfract</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nmap-frontend</name>
+ <dependencylist>
+ <dependency>nmap</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tetex-fonts</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>textutils</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>util-linux</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>db4</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-Xvfb</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>evolution</name>
+ <dependencylist>
+ <dependency>scrollkeeper</dependency>
+ <dependency>bonobo</dependency>
+ <dependency>GConf</dependency>
+ <dependency>oaf</dependency>
+ <dependency>mozilla-nss</dependency>
+ <dependency>mozilla-nspr</dependency>
+ <dependency>glibc</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>perl</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>bonobo-conf</dependency>
+ <dependency>esound</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgal19</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>libglade</dependency>
+ <dependency>glib</dependency>
+ <dependency>gdk-pixbuf-gnome</dependency>
+ <dependency>libgnomeprint15</dependency>
+ <dependency>gnome-vfs</dependency>
+ <dependency>gnome-pilot</dependency>
+ <dependency>gtkhtml</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>openldap</dependency>
+ <dependency>pilot-link</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lesstif</name>
+ <dependencylist>
+ <dependency>XFree86</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glibc-utils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>gd</dependency>
+ <dependency>libpng</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>Xft</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libmng</dependency>
+ <dependency>libpng</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libvorbis-devel</name>
+ <dependencylist>
+ <dependency>libogg-devel</dependency>
+ <dependency>libvorbis</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>krb5-libs</name>
+ <dependencylist>
+ <dependency>grep</dependency>
+ <dependency>glibc</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bison</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>net-tools</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libvorbis</name>
+ <dependencylist>
+ <dependency>libogg</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libunicode-devel</name>
+ <dependencylist>
+ <dependency>libunicode</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>amanda</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>grep</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>tar</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>autoconvert</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt2-static</name>
+ <dependencylist>
+ <dependency>qt2-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>modutils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>mkinitrd</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>asp2php-gtk</name>
+ <dependencylist>
+ <dependency>asp2php</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lockdev-devel</name>
+ <dependencylist>
+ <dependency>lockdev</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openmotif-devel</name>
+ <dependencylist>
+ <dependency>openmotif</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-manual</name>
+ <dependencylist>
+ <dependency>php</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>adjtimex</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>w3m-el-common</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-nfs</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>nfs-utils</dependency>
+ <dependency>usermode</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>efax</name>
+ <dependencylist>
+ <dependency>make</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>MySQL-python</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>mx</dependency>
+ <dependency>mysql</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tmake</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mailcap</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libghttp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdepasswd</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-menus</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Portuguese</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-release</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-ca</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ORBit2</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>linc</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ipvsadm</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>VFlib2-VFjfm</name>
+ <dependencylist>
+ <dependency>VFlib2</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnome</name>
+ <dependencylist>
+ <dependency>glib2</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>libxslt</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>utempter</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>esound</dependency>
+ <dependency>linc</dependency>
+ <dependency>popt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>krbafs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libunicode</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-network</name>
+ <dependencylist>
+ <dependency>initscripts</dependency>
+ <dependency>usermode</dependency>
+ <dependency>alchemist</dependency>
+ <dependency>kudzu</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>gnome-python2</dependency>
+ <dependency>wvdial</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>gnome-python2-canvas</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tux</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-proc</name>
+ <dependencylist>
+ <dependency>procps</dependency>
+ <dependency>usermode</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt2</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libmng</dependency>
+ <dependency>libpng</dependency>
+ <dependency>compat-libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>audiofile-devel</name>
+ <dependencylist>
+ <dependency>audiofile</dependency>
+ <dependency>pkgconfig</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kakasi-dict</name>
+ <dependencylist>
+ <dependency>kakasi</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>screen</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ <dependency>utempter</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lynx</name>
+ <dependencylist>
+ <dependency>indexhtml</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>zlib</dependency>
+ <dependency>perl-CGI</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>MyODBC</name>
+ <dependencylist>
+ <dependency>unixODBC</dependency>
+ <dependency>glibc</dependency>
+ <dependency>mysql</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nscd</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kfloppy</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>joe</name>
+ <dependencylist>
+ <dependency>ncurses</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vte</name>
+ <dependencylist>
+ <dependency>bitmap-fonts</dependency>
+ <dependency>glibc</dependency>
+ <dependency>atk</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>freetype</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>Xft</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-xauth</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtk-doc</name>
+ <dependencylist>
+ <dependency>docbook-utils</dependency>
+ <dependency>openjade</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libghttp-devel</name>
+ <dependencylist>
+ <dependency>libghttp</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tkinter</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ <dependency>tcl</dependency>
+ <dependency>tix</dependency>
+ <dependency>tk</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ORBit-devel</name>
+ <dependencylist>
+ <dependency>indent</dependency>
+ <dependency>glib-devel</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-XML-Grove</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-libxml-perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Canna-devel</name>
+ <dependencylist>
+ <dependency>Canna-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdrecord</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lockdev</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>filesystem</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kakasi-devel</name>
+ <dependencylist>
+ <dependency>kakasi</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ami</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-pilot</name>
+ <dependencylist>
+ <dependency>pilot-link</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>libglade</dependency>
+ <dependency>libxml</dependency>
+ <dependency>gnome-vfs</dependency>
+ <dependency>redhat-menus</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>libcapplet0</dependency>
+ <dependency>esound</dependency>
+ <dependency>GConf</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>oaf</dependency>
+ <dependency>popt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mtr-gtk</name>
+ <dependencylist>
+ <dependency>mtr</dependency>
+ <dependency>usermode</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>switchdesk-kde</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libattr</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>modutils</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kappa20</name>
+ <dependencylist>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-DBI</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gdk-pixbuf-gnome</name>
+ <dependencylist>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lesstif-devel</name>
+ <dependencylist>
+ <dependency>XFree86-devel</dependency>
+ <dependency>lesstif</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kernel-smp</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>modutils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>mkinitrd</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-German</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mysql-server</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>mysql</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>at-spi</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>gail</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>db4-devel</name>
+ <dependencylist>
+ <dependency>db4</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Glide3-devel</name>
+ <dependencylist>
+ <dependency>Glide3</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lv</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>arts</name>
+ <dependencylist>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-switch-printer</name>
+ <dependencylist>
+ <dependency>newt</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>python</dependency>
+ <dependency>sh-utils</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-dbg-client</name>
+ <dependencylist>
+ <dependency>php-dbg-base</dependency>
+ <dependency>php-dbg-server</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>pcre</dependency>
+ <dependency>readline</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>yp-tools</name>
+ <dependencylist>
+ <dependency>ypbind</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libacl</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libattr</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>PyQt-devel</name>
+ <dependencylist>
+ <dependency>PyQt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Omni-foomatic</name>
+ <dependencylist>
+ <dependency>Omni</dependency>
+ <dependency>foomatic</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-imap</name>
+ <dependencylist>
+ <dependency>php</dependency>
+ <dependency>perl</dependency>
+ <dependency>bash</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rhnlib</name>
+ <dependencylist>
+ <dependency>pyOpenSSL</dependency>
+ <dependency>python</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssl-perl</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>openssl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glib2-devel</name>
+ <dependencylist>
+ <dependency>pkgconfig</dependency>
+ <dependency>glib2</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>radvd</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cracklib</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php-odbc</name>
+ <dependencylist>
+ <dependency>php</dependency>
+ <dependency>perl</dependency>
+ <dependency>grep</dependency>
+ <dependency>unixODBC</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>esound</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>audiofile</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>talk-server</name>
+ <dependencylist>
+ <dependency>xinetd</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Chinese-Big5</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rsh-server</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-URI</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>doxygen</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nasm-doc</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>chkfontpath</name>
+ <dependencylist>
+ <dependency>XFree86-xfs</dependency>
+ <dependency>SysVinit</dependency>
+ <dependency>glibc</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>utempter</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mgetty-viewfax</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libogg-devel</name>
+ <dependencylist>
+ <dependency>libogg</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>netpbm-progs</name>
+ <dependencylist>
+ <dependency>netpbm</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mount</name>
+ <dependencylist>
+ <dependency>mktemp</dependency>
+ <dependency>gawk</dependency>
+ <dependency>diffutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>licq-kde</name>
+ <dependencylist>
+ <dependency>licq</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cvs</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>tcsh</dependency>
+ <dependency>perl</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pstack</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>netpbm</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>MagicPoint</name>
+ <dependencylist>
+ <dependency>watanabe-vf</dependency>
+ <dependency>VFlib2</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libmng</dependency>
+ <dependency>libpng</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libungif</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgtop</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>glib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gd-progs</name>
+ <dependencylist>
+ <dependency>gd</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>procps</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-de</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kfile-png</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pychecker</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hexedit</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-da</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tetex-doc</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libxml2</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-de</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>squid</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>logrotate</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>openldap</dependency>
+ <dependency>pam</dependency>
+ <dependency>perl-URI</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Ukrainian</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aspell-da</name>
+ <dependencylist>
+ <dependency>aspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>imlib-cfgeditor</name>
+ <dependencylist>
+ <dependency>imlib</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Brazil</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>chkconfig</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>texinfo</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>switchdesk</name>
+ <dependencylist>
+ <dependency>textutils</dependency>
+ <dependency>desktop-file-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ttfonts-zh_TW</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>PyXML</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mpage</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>whois</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Net-DNS</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-Digest-HMAC</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pax</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-ISO8859-9-100dpi-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>iscsi</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sane-backends-devel</name>
+ <dependencylist>
+ <dependency>sane-backends</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgail-gnome</name>
+ <dependencylist>
+ <dependency>atk</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>at-spi</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glade2</name>
+ <dependencylist>
+ <dependency>gail-devel</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeprint</dependency>
+ <dependency>libgnomeprintui</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>units</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>psgml</name>
+ <dependencylist>
+ <dependency>sgml-common</dependency>
+ <dependency>emacs</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Digest-SHA1</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pan</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ddskk-xemacs</name>
+ <dependencylist>
+ <dependency>xemacs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-cs</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-nss-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>unixODBC</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>qt</dependency>
+ <dependency>readline</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bzip2</name>
+ <dependencylist>
+ <dependency>bzip2-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>namazu-devel</name>
+ <dependencylist>
+ <dependency>namazu</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mod_auth_mysql</name>
+ <dependencylist>
+ <dependency>httpd</dependency>
+ <dependency>glibc</dependency>
+ <dependency>mysql</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>m2crypto</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ <dependency>openssl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openldap</name>
+ <dependencylist>
+ <dependency>cyrus-sasl</dependency>
+ <dependency>cyrus-sasl-md5</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>glibc</dependency>
+ <dependency>openssl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rpm-python</name>
+ <dependencylist>
+ <dependency>rpm</dependency>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>libelf</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gcc-java</name>
+ <dependencylist>
+ <dependency>gcc</dependency>
+ <dependency>libgcj</dependency>
+ <dependency>libgcj-devel</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>php</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>httpd</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>curl</dependency>
+ <dependency>db4</dependency>
+ <dependency>expat</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>gd</dependency>
+ <dependency>gmp</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libtool-libs</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>pam</dependency>
+ <dependency>libpng</dependency>
+ <dependency>pspell</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-soundcard</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>usermode</dependency>
+ <dependency>sox</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tftp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libacl-devel</name>
+ <dependencylist>
+ <dependency>libacl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>imap-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gdk-pixbuf-devel</name>
+ <dependencylist>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>gdk-pixbuf-gnome</dependency>
+ <dependency>gnome-libs-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeartwork-locolor</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>filesystem</name>
+ <dependencylist>
+ <dependency>setup</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>namazu-cgi</name>
+ <dependencylist>
+ <dependency>namazu</dependency>
+ <dependency>httpd</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>joystick</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kbdconfig</name>
+ <dependencylist>
+ <dependency>kbd</dependency>
+ <dependency>glibc</dependency>
+ <dependency>newt</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nut-cgi</name>
+ <dependencylist>
+ <dependency>httpd</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gd</dependency>
+ <dependency>libpng</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-user-docs</name>
+ <dependencylist>
+ <dependency>scrollkeeper</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vim-common</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>gawk</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xml-common</name>
+ <dependencylist>
+ <dependency>sh-utils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>grep</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>less</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glut</name>
+ <dependencylist>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnomecanvas-devel</name>
+ <dependencylist>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>libart_lgpl-devel</dependency>
+ <dependency>libglade2-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vsftpd</name>
+ <dependencylist>
+ <dependency>xinetd</dependency>
+ <dependency>logrotate</dependency>
+ <dependency>libcap</dependency>
+ <dependency>glibc</dependency>
+ <dependency>pam</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gdb</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xferstats</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>glib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-python2-gconf</name>
+ <dependencylist>
+ <dependency>GConf2</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>glib2</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>orbit-python-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kon2</name>
+ <dependencylist>
+ <dependency>sh-utils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>termcap</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>samba</name>
+ <dependencylist>
+ <dependency>pam</dependency>
+ <dependency>samba-common</dependency>
+ <dependency>logrotate</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>psmisc</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>sed</dependency>
+ <dependency>bash</dependency>
+ <dependency>tcsh</dependency>
+ <dependency>perl</dependency>
+ <dependency>libacl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>popt</dependency>
+ <dependency>perl-CGI</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xcdroast</name>
+ <dependencylist>
+ <dependency>cdrecord</dependency>
+ <dependency>mkisofs</dependency>
+ <dependency>cdda2wav</dependency>
+ <dependency>usermode</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libungif</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mingetty</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lapack</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>blas</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xscreensaver</name>
+ <dependencylist>
+ <dependency>fortune-mod</dependency>
+ <dependency>redhat-logos</dependency>
+ <dependency>pam</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-PDL</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gsl</dependency>
+ <dependency>perl-Filter</dependency>
+ <dependency>perl-Inline</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgtop-devel</name>
+ <dependencylist>
+ <dependency>libgtop</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nvi-m17n-canna</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>Canna-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cups-devel</name>
+ <dependencylist>
+ <dependency>cups-libs</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdebindings-devel</name>
+ <dependencylist>
+ <dependency>kdebindings</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>watanabe-vf</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>chromium</name>
+ <dependencylist>
+ <dependency>zlib</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-Mesa-libGLU</dependency>
+ <dependency>qt</dependency>
+ <dependency>SDL</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libbonobo-devel</name>
+ <dependencylist>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation-devel</dependency>
+ <dependency>ORBit2-devel</dependency>
+ <dependency>libxml2-devel</dependency>
+ <dependency>linc-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gmp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>grip</name>
+ <dependencylist>
+ <dependency>vorbis-tools</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>cdparanoia-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>libghttp</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>jcode.pl</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ruby-devel</name>
+ <dependencylist>
+ <dependency>ruby-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libesmtp-devel</name>
+ <dependencylist>
+ <dependency>libesmtp</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>swig</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>orbit-python</name>
+ <dependencylist>
+ <dependency>ORBit2</dependency>
+ <dependency>linc</dependency>
+ <dependency>libIDL</dependency>
+ <dependency>glib2</dependency>
+ <dependency>python</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libcapplet0</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ORBit</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libglade</name>
+ <dependencylist>
+ <dependency>gnome-libs</dependency>
+ <dependency>libxml</dependency>
+ <dependency>glibc</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xcin</name>
+ <dependencylist>
+ <dependency>libtabe</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Romanian</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde2-compat</name>
+ <dependencylist>
+ <dependency>qt2</dependency>
+ <dependency>openssl</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ <dependency>python</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>fam</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>pcre</dependency>
+ <dependency>libpng</dependency>
+ <dependency>compat-libstdc++</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>libxslt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ytalk</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Icelandic</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>minicom</name>
+ <dependencylist>
+ <dependency>lockdev</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-Mesa-libGLU</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-Bit-Vector</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl-Date-Calc</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rusers-server</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>portmap</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>procps</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-DB_File</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>postgresql-tcl</name>
+ <dependencylist>
+ <dependency>tcl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ <dependency>e2fsprogs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>pam</dependency>
+ <dependency>postgresql-libs</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>grub</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-libs-devel</name>
+ <dependencylist>
+ <dependency>gnome-libs</dependency>
+ <dependency>gtk+-devel</dependency>
+ <dependency>ORBit-devel</dependency>
+ <dependency>imlib-devel</dependency>
+ <dependency>esound-devel</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdf</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-users</name>
+ <dependencylist>
+ <dependency>libuser</dependency>
+ <dependency>python</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>usermode</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kiconedit</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>switchdesk-gnome</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>pspell-devel</name>
+ <dependencylist>
+ <dependency>pspell</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-libxml-perl</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-XML-Parser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>intltool</name>
+ <dependencylist>
+ <dependency>patch</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rpm</name>
+ <dependencylist>
+ <dependency>gawk</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>popt</dependency>
+ <dependency>libelf</dependency>
+ <dependency>bash</dependency>
+ <dependency>bzip2-libs</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>automake</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>shadow-utils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libwvstreams-devel</name>
+ <dependencylist>
+ <dependency>libwvstreams</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-TimeDate</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdeaddons-konqueror</name>
+ <dependencylist>
+ <dependency>kdebase</dependency>
+ <dependency>arts</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ddd</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>openmotif</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libelf</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>x3270-text</name>
+ <dependencylist>
+ <dependency>x3270</dependency>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtkhtml-devel</name>
+ <dependencylist>
+ <dependency>gtkhtml</dependency>
+ <dependency>gnome-libs-devel</dependency>
+ <dependency>gnome-print-devel</dependency>
+ <dependency>libunicode-devel</dependency>
+ <dependency>gdk-pixbuf-devel</dependency>
+ <dependency>libglade-devel</dependency>
+ <dependency>libxml-devel</dependency>
+ <dependency>bonobo-devel</dependency>
+ <dependency>gal-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dvgrab</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libraw1394</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Canna-libs</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cups-drivers-pnm2ppa</name>
+ <dependencylist>
+ <dependency>pnm2ppa</dependency>
+ <dependency>ghostscript</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>anacron</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>vixie-cron</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>syslinux</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-games</name>
+ <dependencylist>
+ <dependency>scrollkeeper</dependency>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>guile</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdesdk-kbabel</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Danish</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mailman</name>
+ <dependencylist>
+ <dependency>shadow-utils</dependency>
+ <dependency>postfix</dependency>
+ <dependency>vixie-cron</dependency>
+ <dependency>httpd</dependency>
+ <dependency>python</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>MAKEDEV</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nmh</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>vim-enhanced</name>
+ <dependencylist>
+ <dependency>vim-common</dependency>
+ <dependency>bash</dependency>
+ <dependency>libacl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gpm</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Turkish</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libuser-devel</name>
+ <dependencylist>
+ <dependency>libuser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libesmtp</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>openssl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Guppi</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>bonobo</dependency>
+ <dependency>esound</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgal19</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>libglade</dependency>
+ <dependency>glib</dependency>
+ <dependency>gdk-pixbuf-gnome</dependency>
+ <dependency>libgnomeprint15</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>oaf</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glut-devel</name>
+ <dependencylist>
+ <dependency>glut</dependency>
+ <dependency>XFree86-Mesa-libGL</dependency>
+ <dependency>XFree86-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glade</name>
+ <dependencylist>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>acl</name>
+ <dependencylist>
+ <dependency>libacl</dependency>
+ <dependency>libattr</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gimp-print-devel</name>
+ <dependencylist>
+ <dependency>gimp-print</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>iptraf</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>khexedit</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>abiword</name>
+ <dependencylist>
+ <dependency>libpng10</dependency>
+ <dependency>chkfontpath</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>libtool-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>pspell</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libtool</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>autoconf</dependency>
+ <dependency>automake</dependency>
+ <dependency>m4</dependency>
+ <dependency>perl</dependency>
+ <dependency>libtool-libs</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>festival-devel</name>
+ <dependencylist>
+ <dependency>festival</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libgnomeprint15</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>esound</dependency>
+ <dependency>freetype</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libavc1394</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libraw1394</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gail-devel</name>
+ <dependencylist>
+ <dependency>gail</dependency>
+ <dependency>gtk2-devel</dependency>
+ <dependency>libgnomecanvas-devel</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libtiff</name>
+ <dependencylist>
+ <dependency>zlib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-gcc-objc</name>
+ <dependencylist>
+ <dependency>compat-gcc</dependency>
+ <dependency>libobjc</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-artwork</name>
+ <dependencylist>
+ <dependency>redhat-logos</dependency>
+ <dependency>qt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xdelta-devel</name>
+ <dependencylist>
+ <dependency>xdelta</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>aumix</name>
+ <dependencylist>
+ <dependency>initscripts</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gpm</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>g-wrap</name>
+ <dependencylist>
+ <dependency>guile</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libungif</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mod_python</name>
+ <dependencylist>
+ <dependency>httpd</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>knode</name>
+ <dependencylist>
+ <dependency>kdenetwork-libs</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kooka</name>
+ <dependencylist>
+ <dependency>libkscan</dependency>
+ <dependency>sane-backends</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libusb</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>w3m</name>
+ <dependencylist>
+ <dependency>indexhtml</dependency>
+ <dependency>perl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>ImageMagick</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gpm</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>imlib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libungif</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>httpd</name>
+ <dependencylist>
+ <dependency>mailcap</dependency>
+ <dependency>gawk</dependency>
+ <dependency>file</dependency>
+ <dependency>findutils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>textutils</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>expat</dependency>
+ <dependency>gdbm</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-ISO8859-15-100dpi-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rcs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>netatalk</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>initscripts</dependency>
+ <dependency>pam</dependency>
+ <dependency>tcp_wrappers</dependency>
+ <dependency>openssl</dependency>
+ <dependency>cracklib</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>emacs</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>dev</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libungif</dependency>
+ <dependency>Xaw3d</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-libwww-perl</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>perl-URI</dependency>
+ <dependency>perl-HTML-Parser</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>groff</name>
+ <dependencylist>
+ <dependency>mktemp</dependency>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>wine-devel</name>
+ <dependencylist>
+ <dependency>wine</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>glib</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-js-debugger</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>mozilla</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hotplug-gtk</name>
+ <dependencylist>
+ <dependency>gnome-libs</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>esound</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>imlib</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>openssh-server</name>
+ <dependencylist>
+ <dependency>openssh</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>pam</dependency>
+ <dependency>bash</dependency>
+ <dependency>krb5-libs</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kde-i18n-Slovak</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-switch-printer-gnome</name>
+ <dependencylist>
+ <dependency>redhat-switch-printer</dependency>
+ <dependency>libglade2</dependency>
+ <dependency>pygtk2-libglade</dependency>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>chkconfig</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>dmalloc</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>unarj</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gaim</name>
+ <dependencylist>
+ <dependency>gtk+</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gnome-desktop</dependency>
+ <dependency>aspell</dependency>
+ <dependency>htmlview</dependency>
+ <dependency>bash</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>esound</dependency>
+ <dependency>gdk-pixbuf</dependency>
+ <dependency>glib</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libmrproject</name>
+ <dependencylist>
+ <dependency>gtk2</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnome-python2-bonobo</name>
+ <dependencylist>
+ <dependency>orbit-python</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>bridge-utils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>VFlib2-devel</name>
+ <dependencylist>
+ <dependency>VFlib2</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>4Suite</name>
+ <dependencylist>
+ <dependency>python</dependency>
+ <dependency>PyXML</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdrdao</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>flim</name>
+ <dependencylist>
+ <dependency>emacs</dependency>
+ <dependency>apel</dependency>
+ <dependency>info</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>initscripts</name>
+ <dependencylist>
+ <dependency>mingetty</dependency>
+ <dependency>gawk</dependency>
+ <dependency>sed</dependency>
+ <dependency>mktemp</dependency>
+ <dependency>e2fsprogs</dependency>
+ <dependency>procps</dependency>
+ <dependency>sysklogd</dependency>
+ <dependency>setup</dependency>
+ <dependency>psmisc</dependency>
+ <dependency>which</dependency>
+ <dependency>grep</dependency>
+ <dependency>modutils</dependency>
+ <dependency>util-linux</dependency>
+ <dependency>mount</dependency>
+ <dependency>bash</dependency>
+ <dependency>SysVinit</dependency>
+ <dependency>iproute</dependency>
+ <dependency>iputils</dependency>
+ <dependency>net-tools</dependency>
+ <dependency>bdflush</dependency>
+ <dependency>redhat-release</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>libxml2-python</name>
+ <dependencylist>
+ <dependency>libxml2</dependency>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>xpdf-chinese-simplified</name>
+ <dependencylist>
+ <dependency>xpdf</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-xfs</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>sed</dependency>
+ <dependency>shadow-utils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gphoto2</name>
+ <dependencylist>
+ <dependency>hotplug</dependency>
+ <dependency>glibc</dependency>
+ <dependency>grep</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>lockdev</dependency>
+ <dependency>bash</dependency>
+ <dependency>glib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>ncurses</dependency>
+ <dependency>readline</dependency>
+ <dependency>libusb</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-CGI</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>lvm</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>newt-devel</name>
+ <dependencylist>
+ <dependency>slang-devel</dependency>
+ <dependency>newt</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>procinfo</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-BSD-Resource</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>koffice-devel</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>krbafs-devel</name>
+ <dependencylist>
+ <dependency>krbafs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>koncd</name>
+ <dependencylist>
+ <dependency>cdrecord</dependency>
+ <dependency>mkisofs</dependency>
+ <dependency>arts</dependency>
+ <dependency>audiofile</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>hotplug</name>
+ <dependencylist>
+ <dependency>usbutils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>compat-libstdc++</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>inn</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>grep</dependency>
+ <dependency>textutils</dependency>
+ <dependency>sed</dependency>
+ <dependency>fileutils</dependency>
+ <dependency>sh-utils</dependency>
+ <dependency>cleanfeed</dependency>
+ <dependency>bash</dependency>
+ <dependency>inews</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>db4</dependency>
+ <dependency>libelf</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>at</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>file</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rwall</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>samba-common</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>libacl</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ <dependency>pam</dependency>
+ <dependency>popt</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>mozilla-chat</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>mozilla</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>anaconda-help</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>oaf</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>perl</dependency>
+ <dependency>glib</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdevelop</name>
+ <dependencylist>
+ <dependency>kdelibs-devel</dependency>
+ <dependency>make</dependency>
+ <dependency>perl</dependency>
+ <dependency>autoconf</dependency>
+ <dependency>automake</dependency>
+ <dependency>flex</dependency>
+ <dependency>qt-designer</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>uucp</name>
+ <dependencylist>
+ <dependency>fileutils</dependency>
+ <dependency>info</dependency>
+ <dependency>lockdev</dependency>
+ <dependency>bash</dependency>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>freetype</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>perl-suidperl</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gettext</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>python</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libgcj</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdparanoia-devel</name>
+ <dependencylist>
+ <dependency>cdparanoia-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gtoaster</name>
+ <dependencylist>
+ <dependency>cdrecord</dependency>
+ <dependency>cdrdao</dependency>
+ <dependency>mkisofs</dependency>
+ <dependency>cdda2wav</dependency>
+ <dependency>sox</dependency>
+ <dependency>usermode</dependency>
+ <dependency>glibc</dependency>
+ <dependency>gtk+</dependency>
+ <dependency>glib</dependency>
+ <dependency>ORBit</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>esound-devel</name>
+ <dependencylist>
+ <dependency>esound</dependency>
+ <dependency>audiofile-devel</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gimp-data-extras</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-font-utils</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>freetype</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>redhat-config-keyboard</name>
+ <dependencylist>
+ <dependency>pygtk2</dependency>
+ <dependency>python</dependency>
+ <dependency>usermode</dependency>
+ <dependency>rhpl</dependency>
+ <dependency>pyxf86config</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>stat</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>gnumeric-devel</name>
+ <dependencylist>
+ <dependency>gnumeric</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>star</name>
+ <dependencylist>
+ <dependency>libacl</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>rwho</name>
+ <dependencylist>
+ <dependency>chkconfig</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>nvi-m17n-nocanna</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libtermcap</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>telnet</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>ncurses</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdebindings-kdejava</name>
+ <dependencylist>
+ <dependency>kdelibs</dependency>
+ <dependency>kdebindings-qtjava</dependency>
+ <dependency>libgcj</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>pcre</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kppp</name>
+ <dependencylist>
+ <dependency>usermode</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>man-pages-pl</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+ <package>
+ <name>readline</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>curl-devel</name>
+ <dependencylist>
+ <dependency>curl</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>slang</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>eog</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>libgnomeprint</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>libpng</dependency>
+ <dependency>popt</dependency>
+ <dependency>librsvg2</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kuickshow</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>imlib</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>libpng</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>libtiff</dependency>
+ <dependency>libungif</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>yelp</name>
+ <dependencylist>
+ <dependency>scrollkeeper</dependency>
+ <dependency>gtk2</dependency>
+ <dependency>gnome-vfs2</dependency>
+ <dependency>gtkhtml2</dependency>
+ <dependency>libgnomeui</dependency>
+ <dependency>libbonobo</dependency>
+ <dependency>libart_lgpl</dependency>
+ <dependency>atk</dependency>
+ <dependency>bonobo-activation</dependency>
+ <dependency>libbonoboui</dependency>
+ <dependency>glibc</dependency>
+ <dependency>GConf2</dependency>
+ <dependency>glib2</dependency>
+ <dependency>libgnome</dependency>
+ <dependency>libgnomecanvas</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>linc</dependency>
+ <dependency>ORBit2</dependency>
+ <dependency>pango</dependency>
+ <dependency>popt</dependency>
+ <dependency>libxml2</dependency>
+ <dependency>libxslt</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>Omni</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>cups-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>tetex-afm</name>
+ <dependencylist>
+ <dependency>tetex</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>slrn-pull</name>
+ <dependencylist>
+ <dependency>slrn</dependency>
+ <dependency>bash</dependency>
+ <dependency>openssl</dependency>
+ <dependency>glibc</dependency>
+ <dependency>slang</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>kdebindings-kdec</name>
+ <dependencylist>
+ <dependency>qt</dependency>
+ <dependency>kdebindings-qtc</dependency>
+ <dependency>glibc</dependency>
+ <dependency>kdelibs</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>XFree86-libs</dependency>
+ <dependency>libjpeg</dependency>
+ <dependency>pcre</dependency>
+ <dependency>libpng</dependency>
+ <dependency>libstdc++</dependency>
+ <dependency>zlib</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>usbutils</name>
+ <dependencylist>
+ <dependency>hwdata</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>e2fsprogs</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>audiofile</name>
+ <dependencylist>
+ <dependency>glibc</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>XFree86-ISO8859-2-75dpi-fonts</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ttfonts-zh_CN</name>
+ <dependencylist>
+ <dependency>chkfontpath</dependency>
+ <dependency>XFree86-font-utils</dependency>
+ <dependency>fontconfig</dependency>
+ <dependency>bash</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cdlabelgen</name>
+ <dependencylist>
+ <dependency>perl</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>ghostscript-fonts</name>
+ <dependencylist>
+ <dependency>ghostscript</dependency>
+ <dependency>fontconfig</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>FreeWnn-libs</name>
+ <dependencylist>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>qt2-Xt</name>
+ <dependencylist>
+ <dependency>qt2</dependency>
+ <dependency>glibc</dependency>
+ <dependency>compat-libstdc++</dependency>
+ <dependency>XFree86-libs</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>cpp</name>
+ <dependencylist>
+ <dependency>info</dependency>
+ <dependency>bash</dependency>
+ <dependency>glibc</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>oprofile</name>
+ <dependencylist>
+ <dependency>kernel</dependency>
+ <dependency>bash</dependency>
+ <dependency>binutils</dependency>
+ <dependency>glibc</dependency>
+ <dependency>libgcc</dependency>
+ <dependency>popt</dependency>
+ <dependency>qt</dependency>
+ <dependency>libstdc++</dependency>
+ </dependencylist>
+ </package>
+ <package>
+ <name>sash</name>
+ <dependencylist>
+ </dependencylist>
+ </package>
+</comps>
diff --git a/test/relaxng/demo.rng b/test/relaxng/demo.rng
new file mode 100644
index 0000000..1a7f17c
--- /dev/null
+++ b/test/relaxng/demo.rng
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+<include href="demo2.rng">
+<define name="TEI.prose"><ref name="INCLUDE"/></define>
+</include>
+</grammar>
+
+
+
diff --git a/test/relaxng/demo.xml b/test/relaxng/demo.xml
new file mode 100644
index 0000000..6b0cac1
--- /dev/null
+++ b/test/relaxng/demo.xml
@@ -0,0 +1 @@
+<TEI.2>hello</TEI.2> \ No newline at end of file
diff --git a/test/relaxng/demo2.rng b/test/relaxng/demo2.rng
new file mode 100644
index 0000000..f528f73
--- /dev/null
+++ b/test/relaxng/demo2.rng
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:t="http://www.thaiopensource.com/ns/annotations" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+ <start>
+ <ref name="TEI.2"/>
+ </start>
+ <define name="IGNORE">
+ <notAllowed/>
+ </define>
+ <define name="INCLUDE">
+ <empty/>
+ </define>
+
+
+ <include href="demo3.rng"/>
+
+ <define name="TEI.2">
+ <element name="TEI.2">
+ <text/>
+ </element>
+ </define>
+
+</grammar> \ No newline at end of file
diff --git a/test/relaxng/demo3.rng b/test/relaxng/demo3.rng
new file mode 100644
index 0000000..73e1eb6
--- /dev/null
+++ b/test/relaxng/demo3.rng
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:t="http://www.thaiopensource.com/ns/annotations" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+ <define name="TEI.prose" combine="interleave">
+ <ref name="IGNORE"/>
+ </define>
+
+</grammar> \ No newline at end of file
diff --git a/test/relaxng/docbook.rng b/test/relaxng/docbook.rng
new file mode 100644
index 0000000..996e800
--- /dev/null
+++ b/test/relaxng/docbook.rng
@@ -0,0 +1,9141 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id: docbook.rng,v 1.1 2003/03/19 21:02:28 veillard Exp $ -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <start>
+ <choice>
+ <ref name="set"/>
+ <ref name="book"/>
+ <ref name="chapter"/>
+ <ref name="appendix"/>
+ <ref name="article"/>
+ <ref name="part"/>
+ <ref name="reference"/>
+ <ref name="refentry"/>
+ <ref name="section"/>
+ <ref name="sect1"/>
+ <ref name="sect2"/>
+ <ref name="sect3"/>
+ <ref name="sect4"/>
+ <ref name="sect5"/>
+ <ref name="para"/>
+ </choice>
+ </start>
+ <define name="ndxterm.class">
+ <ref name="indexterm"/>
+ </define>
+ <define name="list.class">
+ <choice>
+ <ref name="calloutlist"/>
+ <ref name="glosslist"/>
+ <ref name="itemizedlist"/>
+ <ref name="orderedlist"/>
+ <ref name="segmentedlist"/>
+ <ref name="simplelist"/>
+ <ref name="variablelist"/>
+ </choice>
+ </define>
+ <define name="admon.class">
+ <choice>
+ <ref name="caution"/>
+ <ref name="important"/>
+ <ref name="note"/>
+ <ref name="tip"/>
+ <ref name="warning"/>
+ </choice>
+ </define>
+ <define name="linespecific.class">
+ <choice>
+ <ref name="literallayout"/>
+ <ref name="programlisting"/>
+ <ref name="programlistingco"/>
+ <ref name="screen"/>
+ <ref name="screenco"/>
+ <ref name="screenshot"/>
+ </choice>
+ </define>
+ <define name="method.synop.class">
+ <choice>
+ <ref name="constructorsynopsis"/>
+ <ref name="destructorsynopsis"/>
+ <ref name="methodsynopsis"/>
+ </choice>
+ </define>
+ <define name="synop.class">
+ <choice>
+ <ref name="synopsis"/>
+ <ref name="cmdsynopsis"/>
+ <ref name="funcsynopsis"/>
+ <ref name="classsynopsis"/>
+ <ref name="fieldsynopsis"/>
+ </choice>
+ </define>
+ <define name="para.class">
+ <choice>
+ <ref name="formalpara"/>
+ <ref name="para"/>
+ <ref name="simpara"/>
+ </choice>
+ </define>
+ <define name="informal.class">
+ <choice>
+ <ref name="address"/>
+ <ref name="blockquote"/>
+ <ref name="graphic"/>
+ <ref name="graphicco"/>
+ <ref name="mediaobject"/>
+ <ref name="mediaobjectco"/>
+ <ref name="informalequation"/>
+ <ref name="informalexample"/>
+ <ref name="informalfigure"/>
+ <ref name="informaltable"/>
+ </choice>
+ </define>
+ <define name="formal.class">
+ <choice>
+ <ref name="equation"/>
+ <ref name="example"/>
+ <ref name="figure"/>
+ <ref name="table"/>
+ </choice>
+ </define>
+ <define name="compound.class">
+ <choice>
+ <ref name="msgset"/>
+ <ref name="procedure"/>
+ <ref name="sidebar"/>
+ <ref name="qandaset"/>
+ </choice>
+ </define>
+ <define name="genobj.class">
+ <choice>
+ <ref name="anchor"/>
+ <ref name="bridgehead"/>
+ <ref name="remark"/>
+ <ref name="highlights"/>
+ </choice>
+ </define>
+ <define name="descobj.class">
+ <choice>
+ <ref name="abstract"/>
+ <ref name="authorblurb"/>
+ <ref name="epigraph"/>
+ </choice>
+ </define>
+ <define name="xref.char.class">
+ <choice>
+ <ref name="footnoteref"/>
+ <ref name="xref"/>
+ </choice>
+ </define>
+ <define name="gen.char.class">
+ <choice>
+ <ref name="abbrev"/>
+ <ref name="acronym"/>
+ <ref name="citation"/>
+ <ref name="citerefentry"/>
+ <ref name="citetitle"/>
+ <ref name="emphasis"/>
+ <ref name="firstterm"/>
+ <ref name="foreignphrase"/>
+ <ref name="glossterm"/>
+ <ref name="footnote"/>
+ <ref name="phrase"/>
+ <ref name="quote"/>
+ <ref name="trademark"/>
+ <ref name="wordasword"/>
+ </choice>
+ </define>
+ <define name="link.char.class">
+ <choice>
+ <ref name="link"/>
+ <ref name="olink"/>
+ <ref name="ulink"/>
+ </choice>
+ </define>
+ <define name="tech.char.class">
+ <choice>
+ <ref name="action"/>
+ <ref name="application"/>
+ <ref name="classname"/>
+ <ref name="methodname"/>
+ <ref name="interfacename"/>
+ <ref name="exceptionname"/>
+ <ref name="ooclass"/>
+ <ref name="oointerface"/>
+ <ref name="ooexception"/>
+ <ref name="command"/>
+ <ref name="computeroutput"/>
+ <ref name="database"/>
+ <ref name="email"/>
+ <ref name="envar"/>
+ <ref name="errorcode"/>
+ <ref name="errorname"/>
+ <ref name="errortype"/>
+ <ref name="filename"/>
+ <ref name="function"/>
+ <ref name="guibutton"/>
+ <ref name="guiicon"/>
+ <ref name="guilabel"/>
+ <ref name="guimenu"/>
+ <ref name="guimenuitem"/>
+ <ref name="guisubmenu"/>
+ <ref name="hardware"/>
+ <ref name="interface"/>
+ <ref name="keycap"/>
+ <ref name="keycode"/>
+ <ref name="keycombo"/>
+ <ref name="keysym"/>
+ <ref name="literal"/>
+ <ref name="constant"/>
+ <ref name="markup"/>
+ <ref name="medialabel"/>
+ <ref name="menuchoice"/>
+ <ref name="mousebutton"/>
+ <ref name="option"/>
+ <ref name="optional"/>
+ <ref name="parameter"/>
+ <ref name="prompt"/>
+ <ref name="property"/>
+ <ref name="replaceable"/>
+ <ref name="returnvalue"/>
+ <ref name="sgmltag"/>
+ <ref name="structfield"/>
+ <ref name="structname"/>
+ <ref name="symbol"/>
+ <ref name="systemitem"/>
+ <ref name="token"/>
+ <ref name="type"/>
+ <ref name="userinput"/>
+ <ref name="varname"/>
+ </choice>
+ </define>
+ <define name="base.char.class">
+ <ref name="anchor"/>
+ </define>
+ <define name="docinfo.char.class">
+ <choice>
+ <ref name="author"/>
+ <ref name="authorinitials"/>
+ <ref name="corpauthor"/>
+ <ref name="modespec"/>
+ <ref name="othercredit"/>
+ <ref name="productname"/>
+ <ref name="productnumber"/>
+ <ref name="revhistory"/>
+ </choice>
+ </define>
+ <define name="other.char.class">
+ <choice>
+ <ref name="remark"/>
+ <ref name="subscript"/>
+ <ref name="superscript"/>
+ </choice>
+ </define>
+ <define name="inlineobj.char.class">
+ <choice>
+ <ref name="inlinegraphic"/>
+ <ref name="inlinemediaobject"/>
+ <ref name="inlineequation"/>
+ </choice>
+ </define>
+ <define name="component.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="formal.class"/>
+ <ref name="compound.class"/>
+ <ref name="genobj.class"/>
+ <ref name="descobj.class"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="sidebar.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="formal.class"/>
+ <ref name="procedure"/>
+ <ref name="genobj.class"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="qandaset.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="formal.class"/>
+ <ref name="procedure"/>
+ <ref name="genobj.class"/>
+ <ref name="ndxterm.class"/>
+ </choice>
+ </define>
+ <define name="revdescription.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="formal.class"/>
+ <ref name="procedure"/>
+ <ref name="genobj.class"/>
+ <ref name="ndxterm.class"/>
+ </choice>
+ </define>
+ <define name="footnote.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ </choice>
+ </define>
+ <define name="example.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="highlights.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="para.class"/>
+ <ref name="ndxterm.class"/>
+ </choice>
+ </define>
+ <define name="para.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="informal.class"/>
+ <ref name="formal.class"/>
+ </choice>
+ </define>
+ <define name="admon.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="formal.class"/>
+ <ref name="procedure"/>
+ <ref name="sidebar"/>
+ <ref name="anchor"/>
+ <ref name="bridgehead"/>
+ <ref name="remark"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="figure.mix">
+ <choice>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="informal.class"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="tabentry.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="para.class"/>
+ <ref name="graphic"/>
+ <ref name="mediaobject"/>
+ </choice>
+ </define>
+ <define name="glossdef.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="formal.class"/>
+ <ref name="remark"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="legalnotice.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="para.class"/>
+ <ref name="blockquote"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="textobject.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="para.class"/>
+ <ref name="blockquote"/>
+ </choice>
+ </define>
+ <define name="mediaobject.mix">
+ <choice>
+ <ref name="videoobject"/>
+ <ref name="audioobject"/>
+ <ref name="imageobject"/>
+ </choice>
+ </define>
+ <define name="para.char.mix">
+ <choice>
+ <ref name="xref.char.class"/>
+ <ref name="gen.char.class"/>
+ <ref name="link.char.class"/>
+ <ref name="tech.char.class"/>
+ <ref name="base.char.class"/>
+ <ref name="docinfo.char.class"/>
+ <ref name="other.char.class"/>
+ <ref name="inlineobj.char.class"/>
+ <ref name="synop.class"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="title.char.mix">
+ <choice>
+ <ref name="xref.char.class"/>
+ <ref name="gen.char.class"/>
+ <ref name="link.char.class"/>
+ <ref name="tech.char.class"/>
+ <ref name="base.char.class"/>
+ <ref name="docinfo.char.class"/>
+ <ref name="other.char.class"/>
+ <ref name="inlineobj.char.class"/>
+ <ref name="ndxterm.class"/>
+ </choice>
+ </define>
+ <define name="ndxterm.char.mix">
+ <choice>
+ <ref name="xref.char.class"/>
+ <ref name="gen.char.class"/>
+ <ref name="link.char.class"/>
+ <ref name="tech.char.class"/>
+ <ref name="base.char.class"/>
+ <ref name="docinfo.char.class"/>
+ <ref name="other.char.class"/>
+ <ref name="inlinegraphic"/>
+ <ref name="inlinemediaobject"/>
+ </choice>
+ </define>
+ <define name="cptr.char.mix">
+ <choice>
+ <ref name="link.char.class"/>
+ <ref name="tech.char.class"/>
+ <ref name="base.char.class"/>
+ <ref name="other.char.class"/>
+ <ref name="inlinegraphic"/>
+ <ref name="inlinemediaobject"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="smallcptr.char.mix">
+ <choice>
+ <ref name="replaceable"/>
+ <ref name="inlinegraphic"/>
+ <ref name="inlinemediaobject"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="word.char.mix">
+ <choice>
+ <ref name="acronym"/>
+ <ref name="emphasis"/>
+ <ref name="trademark"/>
+ <ref name="link.char.class"/>
+ <ref name="base.char.class"/>
+ <ref name="other.char.class"/>
+ <ref name="inlinegraphic"/>
+ <ref name="inlinemediaobject"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="docinfo.char.mix">
+ <choice>
+ <ref name="link.char.class"/>
+ <ref name="emphasis"/>
+ <ref name="trademark"/>
+ <ref name="replaceable"/>
+ <ref name="other.char.class"/>
+ <ref name="inlinegraphic"/>
+ <ref name="inlinemediaobject"/>
+ <ref name="ndxterm.class"/>
+ </choice>
+ </define>
+ <define name="formalobject.title.content">
+ <ref name="title"/>
+ <optional>
+ <ref name="titleabbrev"/>
+ </optional>
+ </define>
+ <define name="arch.attrib">
+ <optional>
+ <attribute name="arch">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="condition.attrib">
+ <optional>
+ <attribute name="condition">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="conformance.attrib">
+ <optional>
+ <attribute name="conformance">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="os.attrib">
+ <optional>
+ <attribute name="os">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="revision.attrib">
+ <optional>
+ <attribute name="revision">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="security.attrib">
+ <optional>
+ <attribute name="security">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="userlevel.attrib">
+ <optional>
+ <attribute name="userlevel">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="vendor.attrib">
+ <optional>
+ <attribute name="vendor">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="effectivity.attrib">
+ <ref name="arch.attrib"/>
+ <ref name="condition.attrib"/>
+ <ref name="conformance.attrib"/>
+ <ref name="os.attrib"/>
+ <ref name="revision.attrib"/>
+ <ref name="security.attrib"/>
+ <ref name="userlevel.attrib"/>
+ <ref name="vendor.attrib"/>
+ </define>
+ <define name="id.attrib">
+ <optional>
+ <attribute name="id">
+ <data type="ID"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="idreq.attrib">
+ <attribute name="id">
+ <data type="ID"/>
+ </attribute>
+ </define>
+ <define name="lang.attrib">
+ <optional>
+ <attribute name="lang">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="remap.attrib">
+ <optional>
+ <attribute name="remap">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="role.attrib">
+ <optional>
+ <attribute name="role">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="xreflabel.attrib">
+ <optional>
+ <attribute name="xreflabel">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="revisionflag.attrib">
+ <optional>
+ <attribute name="revisionflag">
+ <choice>
+ <value>changed</value>
+ <value>added</value>
+ <value>deleted</value>
+ <value>off</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="common.attrib">
+ <ref name="id.attrib"/>
+ <ref name="lang.attrib"/>
+ <ref name="remap.attrib"/>
+ <ref name="xreflabel.attrib"/>
+ <ref name="revisionflag.attrib"/>
+ <ref name="effectivity.attrib"/>
+ </define>
+ <define name="idreq.common.attrib">
+ <ref name="idreq.attrib"/>
+ <ref name="lang.attrib"/>
+ <ref name="remap.attrib"/>
+ <ref name="xreflabel.attrib"/>
+ <ref name="revisionflag.attrib"/>
+ <ref name="effectivity.attrib"/>
+ </define>
+ <define name="graphics.attrib">
+ <optional>
+ <attribute name="fileref">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="format">
+ <choice>
+ <value>BMP</value>
+ <value>CGM-CHAR</value>
+ <value>CGM-BINARY</value>
+ <value>CGM-CLEAR</value>
+ <value>DITROFF</value>
+ <value>DVI</value>
+ <value>EPS</value>
+ <value>EQN</value>
+ <value>FAX</value>
+ <value>GIF</value>
+ <value>GIF87a</value>
+ <value>GIF89a</value>
+ <value>JPG</value>
+ <value>JPEG</value>
+ <value>IGES</value>
+ <value>PCX</value>
+ <value>PIC</value>
+ <value>PNG</value>
+ <value>PS</value>
+ <value>SGML</value>
+ <value>TBL</value>
+ <value>TEX</value>
+ <value>TIFF</value>
+ <value>WMF</value>
+ <value>WPG</value>
+ <value>linespecific</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="srccredit">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="width">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="depth">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="align">
+ <choice>
+ <value>left</value>
+ <value>right</value>
+ <value>center</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="scale">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="scalefit">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="keyaction.attrib">
+ <optional>
+ <attribute name="action">
+ <choice>
+ <value>click</value>
+ <value>double-click</value>
+ <value>press</value>
+ <value>seq</value>
+ <value>simul</value>
+ <value>other</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="otheraction">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="label.attrib">
+ <optional>
+ <attribute name="label">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="linespecific.attrib">
+ <optional>
+ <attribute name="format">
+ <value>linespecific</value>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="linenumbering">
+ <choice>
+ <value>numbered</value>
+ <value>unnumbered</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="linkend.attrib">
+ <optional>
+ <attribute name="linkend">
+ <data type="IDREF"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="linkendreq.attrib">
+ <attribute name="linkend">
+ <data type="IDREF"/>
+ </attribute>
+ </define>
+ <define name="linkends.attrib">
+ <optional>
+ <attribute name="linkends">
+ <data type="IDREFS"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="mark.attrib">
+ <optional>
+ <attribute name="mark">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="moreinfo.attrib">
+ <optional>
+ <attribute name="moreinfo">
+ <choice>
+ <value>refentry</value>
+ <value>none</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="pagenum.attrib">
+ <optional>
+ <attribute name="pagenum">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="status.attrib">
+ <optional>
+ <attribute name="status">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="width.attrib">
+ <optional>
+ <attribute name="width">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="title.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="title">
+ <element name="title">
+ <ref name="title.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="title.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="title.attlist">
+ <ref name="pagenum.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="title.role.attrib"/>
+ </define>
+ <define name="titleabbrev.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="titleabbrev">
+ <element name="titleabbrev">
+ <ref name="titleabbrev.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="title.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="titleabbrev.attlist">
+ <ref name="common.attrib"/>
+ <ref name="titleabbrev.role.attrib"/>
+ </define>
+ <define name="subtitle.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="subtitle">
+ <element name="subtitle">
+ <ref name="subtitle.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="title.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="subtitle.attlist">
+ <ref name="common.attrib"/>
+ <ref name="subtitle.role.attrib"/>
+ </define>
+ <define name="person.ident.mix">
+ <choice>
+ <ref name="honorific"/>
+ <ref name="firstname"/>
+ <ref name="surname"/>
+ <ref name="lineage"/>
+ <ref name="othername"/>
+ <ref name="affiliation"/>
+ <ref name="authorblurb"/>
+ <ref name="contrib"/>
+ </choice>
+ </define>
+ <define name="bibliocomponent.mix">
+ <choice>
+ <ref name="abbrev"/>
+ <ref name="abstract"/>
+ <ref name="address"/>
+ <ref name="artpagenums"/>
+ <ref name="author"/>
+ <ref name="authorgroup"/>
+ <ref name="authorinitials"/>
+ <ref name="bibliomisc"/>
+ <ref name="biblioset"/>
+ <ref name="collab"/>
+ <ref name="confgroup"/>
+ <ref name="contractnum"/>
+ <ref name="contractsponsor"/>
+ <ref name="copyright"/>
+ <ref name="corpauthor"/>
+ <ref name="corpname"/>
+ <ref name="date"/>
+ <ref name="edition"/>
+ <ref name="editor"/>
+ <ref name="invpartnumber"/>
+ <ref name="isbn"/>
+ <ref name="issn"/>
+ <ref name="issuenum"/>
+ <ref name="orgname"/>
+ <ref name="othercredit"/>
+ <ref name="pagenums"/>
+ <ref name="printhistory"/>
+ <ref name="productname"/>
+ <ref name="productnumber"/>
+ <ref name="pubdate"/>
+ <ref name="publisher"/>
+ <ref name="publishername"/>
+ <ref name="pubsnumber"/>
+ <ref name="releaseinfo"/>
+ <ref name="revhistory"/>
+ <ref name="seriesvolnums"/>
+ <ref name="subtitle"/>
+ <ref name="title"/>
+ <ref name="titleabbrev"/>
+ <ref name="volumenum"/>
+ <ref name="citetitle"/>
+ <ref name="person.ident.mix"/>
+ <ref name="ndxterm.class"/>
+ </choice>
+ </define>
+ <define name="biblioentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="biblioentry">
+ <element name="biblioentry">
+ <ref name="biblioentry.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="articleinfo"/>
+ <ref name="bibliocomponent.mix"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="biblioentry.attlist">
+ <ref name="common.attrib"/>
+ <ref name="biblioentry.role.attrib"/>
+ </define>
+ <define name="bibliomixed.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="bibliomixed">
+ <element name="bibliomixed">
+ <ref name="bibliomixed.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="bibliocomponent.mix"/>
+ <ref name="bibliomset"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="bibliomixed.attlist">
+ <ref name="common.attrib"/>
+ <ref name="bibliomixed.role.attrib"/>
+ </define>
+ <define name="articleinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="infoContentModel">
+ <oneOrMore>
+ <choice>
+ <ref name="graphic"/>
+ <ref name="mediaobject"/>
+ <ref name="legalnotice"/>
+ <ref name="modespec"/>
+ <ref name="subjectset"/>
+ <ref name="keywordset"/>
+ <ref name="itermset"/>
+ <ref name="bibliocomponent.mix"/>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="articleinfo">
+ <element name="articleinfo">
+ <ref name="articleinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="articleinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="articleinfo.role.attrib"/>
+ </define>
+ <define name="biblioset.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="biblioset">
+ <element name="biblioset">
+ <ref name="biblioset.attlist"/>
+ <oneOrMore>
+ <ref name="bibliocomponent.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="biblioset.attlist">
+ <ref name="common.attrib"/>
+ <ref name="biblioset.role.attrib"/>
+ <optional>
+ <attribute name="relation">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="bibliomset.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="bibliomset">
+ <element name="bibliomset">
+ <ref name="bibliomset.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="bibliocomponent.mix"/>
+ <ref name="bibliomset"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="bibliomset.attlist">
+ <ref name="bibliomset.role.attrib"/>
+ <ref name="common.attrib"/>
+ <optional>
+ <attribute name="relation">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="bibliomisc.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="bibliomisc">
+ <element name="bibliomisc">
+ <ref name="bibliomisc.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="bibliomisc.attlist">
+ <ref name="common.attrib"/>
+ <ref name="bibliomisc.role.attrib"/>
+ </define>
+ <define name="subjectset.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="subjectset">
+ <element name="subjectset">
+ <ref name="subjectset.attlist"/>
+ <oneOrMore>
+ <ref name="subject"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="subjectset.attlist">
+ <ref name="common.attrib"/>
+ <ref name="subjectset.role.attrib"/>
+ <optional>
+ <attribute name="scheme">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="subject.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="subject">
+ <element name="subject">
+ <ref name="subject.attlist"/>
+ <oneOrMore>
+ <ref name="subjectterm"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="subject.attlist">
+ <ref name="common.attrib"/>
+ <ref name="subject.role.attrib"/>
+ <optional>
+ <attribute name="weight">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="subjectterm.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="subjectterm">
+ <element name="subjectterm">
+ <ref name="subjectterm.attlist"/>
+ <text/>
+ </element>
+ </define>
+ <define name="subjectterm.attlist">
+ <ref name="common.attrib"/>
+ <ref name="subjectterm.role.attrib"/>
+ </define>
+ <define name="keywordset.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="keywordset">
+ <element name="keywordset">
+ <ref name="keywordset.attlist"/>
+ <oneOrMore>
+ <ref name="keyword"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="keywordset.attlist">
+ <ref name="common.attrib"/>
+ <ref name="keywordset.role.attrib"/>
+ </define>
+ <define name="keyword.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="keyword">
+ <element name="keyword">
+ <ref name="keyword.attlist"/>
+ <text/>
+ </element>
+ </define>
+ <define name="keyword.attlist">
+ <ref name="common.attrib"/>
+ <ref name="keyword.role.attrib"/>
+ </define>
+ <define name="itermset.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="itermset">
+ <element name="itermset">
+ <ref name="itermset.attlist"/>
+ <oneOrMore>
+ <ref name="indexterm"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="itermset.attlist">
+ <ref name="common.attrib"/>
+ <ref name="itermset.role.attrib"/>
+ </define>
+ <define name="msgset.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msgset">
+ <element name="msgset">
+ <ref name="msgset.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <choice>
+ <oneOrMore>
+ <ref name="msgentry"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="simplemsgentry"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="msgset.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msgset.role.attrib"/>
+ </define>
+ <define name="msgentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msgentry">
+ <element name="msgentry">
+ <ref name="msgentry.attlist"/>
+ <oneOrMore>
+ <ref name="msg"/>
+ </oneOrMore>
+ <optional>
+ <ref name="msginfo"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="msgexplan"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="msgentry.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msgentry.role.attrib"/>
+ </define>
+ <define name="simplemsgentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="simplemsgentry">
+ <element name="simplemsgentry">
+ <ref name="simplemsgentry.attlist"/>
+ <ref name="msgtext"/>
+ <ref name="msgexplan"/>
+ </element>
+ </define>
+ <define name="simplemsgentry.attlist">
+ <ref name="common.attrib"/>
+ <ref name="simplemsgentry.role.attrib"/>
+ <optional>
+ <attribute name="audience">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="level">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="origin">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="msg.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msg">
+ <element name="msg">
+ <ref name="msg.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <ref name="msgmain"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="msgsub"/>
+ <ref name="msgrel"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="msg.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msg.role.attrib"/>
+ </define>
+ <define name="msgmain.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msgmain">
+ <element name="msgmain">
+ <ref name="msgmain.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <ref name="msgtext"/>
+ </element>
+ </define>
+ <define name="msgmain.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msgmain.role.attrib"/>
+ </define>
+ <define name="msgsub.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msgsub">
+ <element name="msgsub">
+ <ref name="msgsub.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <ref name="msgtext"/>
+ </element>
+ </define>
+ <define name="msgsub.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msgsub.role.attrib"/>
+ </define>
+ <define name="msgrel.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msgrel">
+ <element name="msgrel">
+ <ref name="msgrel.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <ref name="msgtext"/>
+ </element>
+ </define>
+ <define name="msgrel.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msgrel.role.attrib"/>
+ </define>
+ <define name="msginfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msginfo">
+ <element name="msginfo">
+ <ref name="msginfo.attlist"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="msglevel"/>
+ <ref name="msgorig"/>
+ <ref name="msgaud"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="msginfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msginfo.role.attrib"/>
+ </define>
+ <define name="msglevel.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msglevel">
+ <element name="msglevel">
+ <ref name="msglevel.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="msglevel.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msglevel.role.attrib"/>
+ </define>
+ <define name="msgorig.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msgorig">
+ <element name="msgorig">
+ <ref name="msgorig.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="msgorig.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msgorig.role.attrib"/>
+ </define>
+ <define name="msgaud.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msgaud">
+ <element name="msgaud">
+ <ref name="msgaud.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="msgaud.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msgaud.role.attrib"/>
+ </define>
+ <define name="msgexplan.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msgexplan">
+ <element name="msgexplan">
+ <ref name="msgexplan.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="msgexplan.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msgexplan.role.attrib"/>
+ </define>
+ <define name="qandset.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="qandaset">
+ <element name="qandaset">
+ <ref name="qandaset.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="qandaset.mix"/>
+ </zeroOrMore>
+ <choice>
+ <oneOrMore>
+ <ref name="qandadiv"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="qandaentry"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="qandaset.attlist">
+ <ref name="common.attrib"/>
+ <ref name="qandset.role.attrib"/>
+ <optional>
+ <attribute name="defaultlabel">
+ <choice>
+ <value>qanda</value>
+ <value>number</value>
+ <value>none</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="qandadiv.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="qandadiv">
+ <element name="qandadiv">
+ <ref name="qandadiv.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="qandaset.mix"/>
+ </zeroOrMore>
+ <choice>
+ <oneOrMore>
+ <ref name="qandadiv"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="qandaentry"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="qandadiv.attlist">
+ <ref name="common.attrib"/>
+ <ref name="qandadiv.role.attrib"/>
+ </define>
+ <define name="qandaentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="qandaentry">
+ <element name="qandaentry">
+ <ref name="qandaentry.attlist"/>
+ <optional>
+ <ref name="revhistory"/>
+ </optional>
+ <ref name="question"/>
+ <zeroOrMore>
+ <ref name="answer"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="qandaentry.attlist">
+ <ref name="common.attrib"/>
+ <ref name="qandaentry.role.attrib"/>
+ </define>
+ <define name="question.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="question">
+ <element name="question">
+ <ref name="question.attlist"/>
+ <optional>
+ <ref name="label"/>
+ </optional>
+ <oneOrMore>
+ <ref name="qandaset.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="question.attlist">
+ <ref name="common.attrib"/>
+ <ref name="question.role.attrib"/>
+ </define>
+ <define name="answer.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="answer">
+ <element name="answer">
+ <ref name="answer.attlist"/>
+ <optional>
+ <ref name="label"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="qandaset.mix"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="qandaentry"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="answer.attlist">
+ <ref name="common.attrib"/>
+ <ref name="answer.role.attrib"/>
+ </define>
+ <define name="label.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="label">
+ <element name="label">
+ <ref name="label.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="word.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="label.attlist">
+ <ref name="common.attrib"/>
+ <ref name="label.role.attrib"/>
+ </define>
+ <define name="procedure.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="procedure">
+ <element name="procedure">
+ <ref name="procedure.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ <oneOrMore>
+ <ref name="step"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="procedure.attlist">
+ <ref name="common.attrib"/>
+ <ref name="procedure.role.attrib"/>
+ </define>
+ <define name="step.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="step">
+ <element name="step">
+ <ref name="step.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="component.mix"/>
+ </oneOrMore>
+ <optional>
+ <ref name="substeps"/>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ </optional>
+ </group>
+ <group>
+ <ref name="substeps"/>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ </group>
+ </choice>
+ </element>
+ </define>
+ <define name="step.attlist">
+ <ref name="common.attrib"/>
+ <ref name="step.role.attrib"/>
+ <optional>
+ <attribute name="performance">
+ <choice>
+ <value>optional</value>
+ <value>required</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="substeps.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="substeps">
+ <element name="substeps">
+ <ref name="substeps.attlist"/>
+ <oneOrMore>
+ <ref name="step"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="substeps.attlist">
+ <ref name="common.attrib"/>
+ <ref name="substeps.role.attrib"/>
+ <optional>
+ <attribute name="performance">
+ <choice>
+ <value>optional</value>
+ <value>required</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="sidebarinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sidebarinfo">
+ <element name="sidebarinfo">
+ <ref name="sidebarinfo.attlist"/>
+ <text/>
+ </element>
+ </define>
+ <define name="sidebarinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sidebarinfo.role.attrib"/>
+ </define>
+ <define name="sidebar.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sidebar">
+ <element name="sidebar">
+ <ref name="sidebar.attlist"/>
+ <optional>
+ <ref name="sidebarinfo"/>
+ </optional>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <oneOrMore>
+ <ref name="sidebar.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="sidebar.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sidebar.role.attrib"/>
+ </define>
+ <define name="abstract.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="abstract">
+ <element name="abstract">
+ <ref name="abstract.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <oneOrMore>
+ <ref name="para.class"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="abstract.attlist">
+ <ref name="common.attrib"/>
+ <ref name="abstract.role.attrib"/>
+ </define>
+ <define name="authorblurb.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="authorblurb">
+ <element name="authorblurb">
+ <ref name="authorblurb.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <oneOrMore>
+ <ref name="para.class"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="authorblurb.attlist">
+ <ref name="common.attrib"/>
+ <ref name="authorblurb.role.attrib"/>
+ </define>
+ <define name="blockquote.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="blockquote">
+ <element name="blockquote">
+ <ref name="blockquote.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <optional>
+ <ref name="attribution"/>
+ </optional>
+ <oneOrMore>
+ <ref name="component.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="blockquote.attlist">
+ <ref name="common.attrib"/>
+ <ref name="blockquote.role.attrib"/>
+ </define>
+ <define name="attribution.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="attribution">
+ <element name="attribution">
+ <ref name="attribution.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="attribution.attlist">
+ <ref name="common.attrib"/>
+ <ref name="attribution.role.attrib"/>
+ </define>
+ <define name="bridgehead.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="bridgehead">
+ <element name="bridgehead">
+ <ref name="bridgehead.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="title.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="bridgehead.attlist">
+ <ref name="common.attrib"/>
+ <ref name="bridgehead.role.attrib"/>
+ <optional>
+ <attribute name="renderas">
+ <choice>
+ <value>other</value>
+ <value>sect1</value>
+ <value>sect2</value>
+ <value>sect3</value>
+ <value>sect4</value>
+ <value>sect5</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="remark.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="remark">
+ <element name="remark">
+ <ref name="remark.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="remark.attlist">
+ <ref name="common.attrib"/>
+ <ref name="remark.role.attrib"/>
+ </define>
+ <define name="epigraph.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="epigraph">
+ <element name="epigraph">
+ <ref name="epigraph.attlist"/>
+ <optional>
+ <ref name="attribution"/>
+ </optional>
+ <oneOrMore>
+ <ref name="para.class"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="epigraph.attlist">
+ <ref name="common.attrib"/>
+ <ref name="epigraph.role.attrib"/>
+ </define>
+ <define name="footnote.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="footnote">
+ <element name="footnote">
+ <ref name="footnote.attlist"/>
+ <oneOrMore>
+ <ref name="footnote.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="footnote.attlist">
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="footnote.role.attrib"/>
+ </define>
+ <define name="highlights.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="highlights">
+ <element name="highlights">
+ <ref name="highlights.attlist"/>
+ <oneOrMore>
+ <ref name="highlights.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="highlights.attlist">
+ <ref name="common.attrib"/>
+ <ref name="highlights.role.attrib"/>
+ </define>
+ <define name="formalpara.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="formalpara">
+ <element name="formalpara">
+ <ref name="formalpara.attlist"/>
+ <ref name="title"/>
+ <zeroOrMore>
+ <ref name="ndxterm.class"/>
+ </zeroOrMore>
+ <ref name="para"/>
+ </element>
+ </define>
+ <define name="formalpara.attlist">
+ <ref name="common.attrib"/>
+ <ref name="formalpara.role.attrib"/>
+ </define>
+ <define name="para.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="para">
+ <element name="para">
+ <ref name="para.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="para.char.mix"/>
+ <ref name="para.mix"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="para.attlist">
+ <ref name="common.attrib"/>
+ <ref name="para.role.attrib"/>
+ </define>
+ <define name="simpara.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="simpara">
+ <element name="simpara">
+ <ref name="simpara.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="simpara.attlist">
+ <ref name="common.attrib"/>
+ <ref name="simpara.role.attrib"/>
+ </define>
+ <define name="admon.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="admonitionType">
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <oneOrMore>
+ <ref name="admon.mix"/>
+ </oneOrMore>
+ </define>
+ <define name="important">
+ <element name="important">
+ <ref name="important.attlist"/>
+ <ref name="admonitionType"/>
+ </element>
+ </define>
+ <define name="important.attlist">
+ <ref name="common.attrib"/>
+ <ref name="admon.role.attrib"/>
+ </define>
+ <define name="warning">
+ <element name="warning">
+ <ref name="warning.attlist"/>
+ <ref name="admonitionType"/>
+ </element>
+ </define>
+ <define name="warning.attlist">
+ <ref name="common.attrib"/>
+ <ref name="admon.role.attrib"/>
+ </define>
+ <define name="caution">
+ <element name="caution">
+ <ref name="caution.attlist"/>
+ <ref name="admonitionType"/>
+ </element>
+ </define>
+ <define name="caution.attlist">
+ <ref name="common.attrib"/>
+ <ref name="admon.role.attrib"/>
+ </define>
+ <define name="note">
+ <element name="note">
+ <ref name="note.attlist"/>
+ <ref name="admonitionType"/>
+ </element>
+ </define>
+ <define name="note.attlist">
+ <ref name="common.attrib"/>
+ <ref name="admon.role.attrib"/>
+ </define>
+ <define name="tip">
+ <element name="tip">
+ <ref name="tip.attlist"/>
+ <ref name="admonitionType"/>
+ </element>
+ </define>
+ <define name="tip.attlist">
+ <ref name="common.attrib"/>
+ <ref name="admon.role.attrib"/>
+ </define>
+ <define name="glosslist.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="glosslist">
+ <element name="glosslist">
+ <ref name="glosslist.attlist"/>
+ <oneOrMore>
+ <ref name="glossentry"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="glosslist.attlist">
+ <ref name="common.attrib"/>
+ <ref name="glosslist.role.attrib"/>
+ </define>
+ <define name="glossentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="glossentry">
+ <element name="glossentry">
+ <ref name="glossentry.attlist"/>
+ <ref name="glossterm"/>
+ <optional>
+ <ref name="acronym"/>
+ </optional>
+ <optional>
+ <ref name="abbrev"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="ndxterm.class"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="revhistory"/>
+ </optional>
+ <choice>
+ <ref name="glosssee"/>
+ <oneOrMore>
+ <ref name="glossdef"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="glossentry.attlist">
+ <ref name="common.attrib"/>
+ <ref name="glossentry.role.attrib"/>
+ <optional>
+ <attribute name="sortas">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="glossdef.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="glossdef">
+ <element name="glossdef">
+ <ref name="glossdef.attlist"/>
+ <oneOrMore>
+ <ref name="glossdef.mix"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="glossseealso"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="glossdef.attlist">
+ <ref name="common.attrib"/>
+ <ref name="glossdef.role.attrib"/>
+ <optional>
+ <attribute name="subject">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="glosssee.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="glosssee">
+ <element name="glosssee">
+ <ref name="glosssee.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="glosssee.attlist">
+ <ref name="common.attrib"/>
+ <ref name="glosssee.role.attrib"/>
+ <optional>
+ <attribute name="otherterm">
+ <data type="IDREF"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="glossseealso.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="glossseealso">
+ <element name="glossseealso">
+ <ref name="glossseealso.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="glossseealso.attlist">
+ <ref name="common.attrib"/>
+ <ref name="glossseealso.role.attrib"/>
+ <optional>
+ <attribute name="otherterm">
+ <data type="IDREF"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="itemizedlist.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="itemizedlist">
+ <element name="itemizedlist">
+ <ref name="itemizedlist.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <oneOrMore>
+ <ref name="listitem"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="itemizedlist.attlist">
+ <ref name="mark.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="itemizedlist.role.attrib"/>
+ <optional>
+ <attribute name="spacing">
+ <choice>
+ <value>normal</value>
+ <value>compact</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="orderedlist.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="orderedlist">
+ <element name="orderedlist">
+ <ref name="orderedlist.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <oneOrMore>
+ <ref name="listitem"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="orderedlist.attlist">
+ <ref name="common.attrib"/>
+ <ref name="orderedlist.role.attrib"/>
+ <optional>
+ <attribute name="numeration">
+ <choice>
+ <value>arabic</value>
+ <value>upperalpha</value>
+ <value>loweralpha</value>
+ <value>upperroman</value>
+ <value>lowerroman</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="inheritnum">
+ <choice>
+ <value>inherit</value>
+ <value>ignore</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="continuation">
+ <choice>
+ <value>continues</value>
+ <value>restarts</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="spacing">
+ <choice>
+ <value>normal</value>
+ <value>compact</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="listitem.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="listitem">
+ <element name="listitem">
+ <ref name="listitem.attlist"/>
+ <oneOrMore>
+ <ref name="component.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="listitem.attlist">
+ <ref name="common.attrib"/>
+ <ref name="listitem.role.attrib"/>
+ <optional>
+ <attribute name="override">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="segmentedlist.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="segmentedlist">
+ <element name="segmentedlist">
+ <ref name="segmentedlist.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <ref name="segtitle"/>
+ <zeroOrMore>
+ <ref name="segtitle"/>
+ </zeroOrMore>
+ <oneOrMore>
+ <ref name="seglistitem"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="segmentedlist.attlist">
+ <ref name="common.attrib"/>
+ <ref name="segmentedlist.role.attrib"/>
+ </define>
+ <define name="segtitle.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="segtitle">
+ <element name="segtitle">
+ <ref name="segtitle.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="title.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="segtitle.attlist">
+ <ref name="common.attrib"/>
+ <ref name="segtitle.role.attrib"/>
+ </define>
+ <define name="seglistitem.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="seglistitem">
+ <element name="seglistitem">
+ <ref name="seglistitem.attlist"/>
+ <ref name="seg"/>
+ <zeroOrMore>
+ <ref name="seg"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="seglistitem.attlist">
+ <ref name="common.attrib"/>
+ <ref name="seglistitem.role.attrib"/>
+ </define>
+ <define name="seg.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="seg">
+ <element name="seg">
+ <ref name="seg.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="seg.attlist">
+ <ref name="common.attrib"/>
+ <ref name="seg.role.attrib"/>
+ </define>
+ <define name="simplelist.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="simplelist">
+ <element name="simplelist">
+ <ref name="simplelist.attlist"/>
+ <oneOrMore>
+ <ref name="member"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="simplelist.attlist">
+ <ref name="common.attrib"/>
+ <ref name="simplelist.role.attrib"/>
+ <optional>
+ <attribute name="columns">
+ <data type="integer"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <choice>
+ <value>inline</value>
+ <value>vert</value>
+ <value>horiz</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="member.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="member">
+ <element name="member">
+ <ref name="member.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="member.attlist">
+ <ref name="common.attrib"/>
+ <ref name="member.role.attrib"/>
+ </define>
+ <define name="variablelist.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="variablelist">
+ <element name="variablelist">
+ <ref name="variablelist.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <oneOrMore>
+ <ref name="varlistentry"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="variablelist.attlist">
+ <ref name="common.attrib"/>
+ <ref name="variablelist.role.attrib"/>
+ <optional>
+ <attribute name="termlength">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="varlistentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="varlistentry">
+ <element name="varlistentry">
+ <ref name="varlistentry.attlist"/>
+ <oneOrMore>
+ <ref name="term"/>
+ </oneOrMore>
+ <ref name="listitem"/>
+ </element>
+ </define>
+ <define name="varlistentry.attlist">
+ <ref name="common.attrib"/>
+ <ref name="varlistentry.role.attrib"/>
+ </define>
+ <define name="term.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="term">
+ <element name="term">
+ <ref name="term.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="term.attlist">
+ <ref name="common.attrib"/>
+ <ref name="term.role.attrib"/>
+ </define>
+ <define name="calloutlist.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="calloutlist">
+ <element name="calloutlist">
+ <ref name="calloutlist.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <oneOrMore>
+ <ref name="callout"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="calloutlist.attlist">
+ <ref name="common.attrib"/>
+ <ref name="calloutlist.role.attrib"/>
+ </define>
+ <define name="callout.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="callout">
+ <element name="callout">
+ <ref name="callout.attlist"/>
+ <oneOrMore>
+ <ref name="component.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="callout.attlist">
+ <ref name="common.attrib"/>
+ <ref name="callout.role.attrib"/>
+ <optional>
+ <attribute name="arearefs">
+ <data type="IDREFS"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="example.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="example">
+ <element name="example">
+ <ref name="example.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <oneOrMore>
+ <ref name="example.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="example.attlist">
+ <ref name="label.attrib"/>
+ <ref name="width.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="example.role.attrib"/>
+ </define>
+ <define name="informalexample.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="informalexample">
+ <element name="informalexample">
+ <ref name="informalexample.attlist"/>
+ <oneOrMore>
+ <ref name="example.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="informalexample.attlist">
+ <ref name="width.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="informalexample.role.attrib"/>
+ </define>
+ <define name="programlistingco.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="programlistingco">
+ <element name="programlistingco">
+ <ref name="programlistingco.attlist"/>
+ <ref name="areaspec"/>
+ <ref name="programlisting"/>
+ <zeroOrMore>
+ <ref name="calloutlist"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="programlistingco.attlist">
+ <ref name="common.attrib"/>
+ <ref name="programlistingco.role.attrib"/>
+ </define>
+ <define name="areaspec.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="areaspec">
+ <element name="areaspec">
+ <ref name="areaspec.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="area"/>
+ <ref name="areaset"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="areaspec.attlist">
+ <ref name="common.attrib"/>
+ <ref name="areaspec.role.attrib"/>
+ <optional>
+ <attribute name="units">
+ <choice>
+ <value>calspair</value>
+ <value>linecolumn</value>
+ <value>linerange</value>
+ <value>linecolumnpair</value>
+ <value>other</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="otherunits">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="area.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="area">
+ <element name="area">
+ <ref name="area.attlist"/>
+ </element>
+ </define>
+ <define name="area.attlist">
+ <ref name="label.attrib"/>
+ <ref name="linkends.attrib"/>
+ <ref name="idreq.common.attrib"/>
+ <ref name="area.role.attrib"/>
+ <optional>
+ <attribute name="units">
+ <choice>
+ <value>calspair</value>
+ <value>linecolumn</value>
+ <value>linerange</value>
+ <value>linecolumnpair</value>
+ <value>other</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="otherunits">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ <attribute name="coords">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="areaset.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="areaset">
+ <element name="areaset">
+ <ref name="areaset.attlist"/>
+ <oneOrMore>
+ <ref name="area"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="areaset.attlist">
+ <ref name="label.attrib"/>
+ <ref name="idreq.common.attrib"/>
+ <ref name="areaset.role.attrib"/>
+ <optional>
+ <attribute name="units">
+ <choice>
+ <value>calspair</value>
+ <value>linecolumn</value>
+ <value>linerange</value>
+ <value>linecolumnpair</value>
+ <value>other</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="otherunits">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ <attribute name="coords">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="programlisting.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="programlisting">
+ <element name="programlisting">
+ <ref name="programlisting.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="para.char.mix"/>
+ <ref name="co"/>
+ <ref name="lineannotation"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="programlisting.attlist">
+ <ref name="width.attrib"/>
+ <ref name="linespecific.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="programlisting.role.attrib"/>
+ </define>
+ <define name="literallayout.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="literallayout">
+ <element name="literallayout">
+ <ref name="literallayout.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="para.char.mix"/>
+ <ref name="co"/>
+ <ref name="lineannotation"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="literallayout.attlist">
+ <ref name="width.attrib"/>
+ <ref name="linespecific.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="literallayout.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>monospaced</value>
+ <value>normal</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="screenco.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="screenco">
+ <element name="screenco">
+ <ref name="screenco.attlist"/>
+ <ref name="areaspec"/>
+ <ref name="screen"/>
+ <zeroOrMore>
+ <ref name="calloutlist"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="screenco.attlist">
+ <ref name="common.attrib"/>
+ <ref name="screenco.role.attrib"/>
+ </define>
+ <define name="screen.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="screen">
+ <element name="screen">
+ <ref name="screen.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="para.char.mix"/>
+ <ref name="co"/>
+ <ref name="lineannotation"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="screen.attlist">
+ <ref name="width.attrib"/>
+ <ref name="linespecific.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="screen.role.attrib"/>
+ </define>
+ <define name="screenshot.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="screenshot">
+ <element name="screenshot">
+ <ref name="screenshot.attlist"/>
+ <optional>
+ <ref name="screeninfo"/>
+ </optional>
+ <choice>
+ <ref name="graphic"/>
+ <ref name="graphicco"/>
+ <ref name="mediaobject"/>
+ <ref name="mediaobjectco"/>
+ </choice>
+ </element>
+ </define>
+ <define name="screenshot.attlist">
+ <ref name="common.attrib"/>
+ <ref name="screenshot.role.attrib"/>
+ </define>
+ <define name="screeninfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="screeninfo">
+ <element name="screeninfo">
+ <ref name="screeninfo.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="screeninfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="screeninfo.role.attrib"/>
+ </define>
+ <define name="figure.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="figure">
+ <element name="figure">
+ <ref name="figure.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <oneOrMore>
+ <choice>
+ <ref name="figure.mix"/>
+ <ref name="link.char.class"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="figure.attlist">
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="figure.role.attrib"/>
+ <optional>
+ <attribute name="float">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="pgwide">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="informalfigure.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="informalfigure">
+ <element name="informalfigure">
+ <ref name="informalfigure.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="figure.mix"/>
+ <ref name="link.char.class"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="informalfigure.attlist">
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="informalfigure.role.attrib"/>
+ <optional>
+ <attribute name="float">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="pgwide">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="graphicco.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="graphicco">
+ <element name="graphicco">
+ <ref name="graphicco.attlist"/>
+ <ref name="areaspec"/>
+ <ref name="graphic"/>
+ <zeroOrMore>
+ <ref name="calloutlist"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="graphicco.attlist">
+ <ref name="common.attrib"/>
+ <ref name="graphicco.role.attrib"/>
+ </define>
+ <define name="graphic.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="graphic">
+ <element name="graphic">
+ <ref name="graphic.attlist"/>
+ </element>
+ </define>
+ <define name="graphic.attlist">
+ <ref name="graphics.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="graphic.role.attrib"/>
+ </define>
+ <define name="inlinegraphic.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="inlinegraphic">
+ <element name="inlinegraphic">
+ <ref name="inlinegraphic.attlist"/>
+ </element>
+ </define>
+ <define name="inlinegraphic.attlist">
+ <ref name="graphics.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="inlinegraphic.role.attrib"/>
+ </define>
+ <define name="mediaobject.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="mediaobject">
+ <element name="mediaobject">
+ <ref name="mediaobject.attlist"/>
+ <optional>
+ <ref name="objectinfo"/>
+ </optional>
+ <ref name="mediaobject.mix"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="mediaobject.mix"/>
+ <ref name="textobject"/>
+ </choice>
+ </zeroOrMore>
+ <optional>
+ <ref name="caption"/>
+ </optional>
+ </element>
+ </define>
+ <define name="mediaobject.attlist">
+ <ref name="common.attrib"/>
+ <ref name="mediaobject.role.attrib"/>
+ </define>
+ <define name="inlinemediaobject.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="inlinemediaobject">
+ <element name="inlinemediaobject">
+ <ref name="inlinemediaobject.attlist"/>
+ <optional>
+ <ref name="objectinfo"/>
+ </optional>
+ <ref name="mediaobject.mix"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="mediaobject.mix"/>
+ <ref name="textobject"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="inlinemediaobject.attlist">
+ <ref name="common.attrib"/>
+ <ref name="inlinemediaobject.role.attrib"/>
+ </define>
+ <define name="videoobject.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="videoobject">
+ <element name="videoobject">
+ <ref name="videoobject.attlist"/>
+ <optional>
+ <ref name="objectinfo"/>
+ </optional>
+ <ref name="videodata"/>
+ </element>
+ </define>
+ <define name="videoobject.attlist">
+ <ref name="common.attrib"/>
+ <ref name="videoobject.role.attrib"/>
+ </define>
+ <define name="audioobject.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="audioobject">
+ <element name="audioobject">
+ <ref name="audioobject.attlist"/>
+ <optional>
+ <ref name="objectinfo"/>
+ </optional>
+ <ref name="audiodata"/>
+ </element>
+ </define>
+ <define name="audioobject.attlist">
+ <ref name="common.attrib"/>
+ <ref name="audioobject.role.attrib"/>
+ </define>
+ <define name="imageobject.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="imageobject">
+ <element name="imageobject">
+ <ref name="imageobject.attlist"/>
+ <optional>
+ <ref name="objectinfo"/>
+ </optional>
+ <ref name="imagedata"/>
+ </element>
+ </define>
+ <define name="imageobject.attlist">
+ <ref name="common.attrib"/>
+ <ref name="imageobject.role.attrib"/>
+ </define>
+ <define name="textobject.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="textobject">
+ <element name="textobject">
+ <ref name="textobject.attlist"/>
+ <optional>
+ <ref name="objectinfo"/>
+ </optional>
+ <choice>
+ <ref name="phrase"/>
+ <oneOrMore>
+ <ref name="textobject.mix"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="textobject.attlist">
+ <ref name="common.attrib"/>
+ <ref name="textobject.role.attrib"/>
+ </define>
+ <define name="objectinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="objectinfo">
+ <element name="objectinfo">
+ <ref name="objectinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="objectinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="objectinfo.role.attrib"/>
+ </define>
+ <define name="objectdata.attrib">
+ <optional>
+ <attribute name="fileref">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="format">
+ <choice>
+ <value>BMP</value>
+ <value>CGM-CHAR</value>
+ <value>CGM-BINARY</value>
+ <value>CGM-CLEAR</value>
+ <value>DITROFF</value>
+ <value>DVI</value>
+ <value>EPS</value>
+ <value>EQN</value>
+ <value>FAX</value>
+ <value>GIF</value>
+ <value>GIF87a</value>
+ <value>GIF89a</value>
+ <value>JPG</value>
+ <value>JPEG</value>
+ <value>IGES</value>
+ <value>PCX</value>
+ <value>PIC</value>
+ <value>PNG</value>
+ <value>PS</value>
+ <value>SGML</value>
+ <value>TBL</value>
+ <value>TEX</value>
+ <value>TIFF</value>
+ <value>WMF</value>
+ <value>WPG</value>
+ <value>linespecific</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="srccredit">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="videodata.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="videodata">
+ <element name="videodata">
+ <ref name="videodata.attlist"/>
+ </element>
+ </define>
+ <define name="videodata.attlist">
+ <ref name="common.attrib"/>
+ <ref name="objectdata.attrib"/>
+ <optional>
+ <attribute name="width">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="depth">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="align">
+ <choice>
+ <value>left</value>
+ <value>right</value>
+ <value>center</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="scale">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="scalefit">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="audiodata.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="audiodata">
+ <element name="audiodata">
+ <ref name="audiodata.attlist"/>
+ </element>
+ </define>
+ <define name="audiodata.attlist">
+ <ref name="common.attrib"/>
+ <ref name="objectdata.attrib"/>
+ <ref name="audiodata.role.attrib"/>
+ </define>
+ <define name="imagedata.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="imagedata">
+ <element name="imagedata">
+ <ref name="imagedata.attlist"/>
+ </element>
+ </define>
+ <define name="imagedata.attlist">
+ <ref name="common.attrib"/>
+ <ref name="objectdata.attrib"/>
+ <ref name="imagedata.role.attrib"/>
+ <optional>
+ <attribute name="width">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="depth">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="align">
+ <choice>
+ <value>left</value>
+ <value>right</value>
+ <value>center</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="scale">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="scalefit">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="caption.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="caption">
+ <element name="caption">
+ <ref name="caption.attlist"/>
+ <zeroOrMore>
+ <ref name="textobject.mix"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="caption.attlist">
+ <ref name="common.attrib"/>
+ <ref name="caption.role.attrib"/>
+ </define>
+ <define name="mediaobjectco.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="mediaobjectco">
+ <element name="mediaobjectco">
+ <ref name="mediaobjectco.attlist"/>
+ <optional>
+ <ref name="objectinfo"/>
+ </optional>
+ <ref name="imageobjectco"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="imageobjectco"/>
+ <ref name="textobject"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="mediaobjectco.attlist">
+ <ref name="common.attrib"/>
+ <ref name="mediaobjectco.role.attrib"/>
+ </define>
+ <define name="imageobjectco.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="imageobjectco">
+ <element name="imageobjectco">
+ <ref name="imageobjectco.attlist"/>
+ <ref name="areaspec"/>
+ <ref name="imageobject"/>
+ <zeroOrMore>
+ <ref name="calloutlist"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="imageobjectco.attlist">
+ <ref name="common.attrib"/>
+ <ref name="imageobjectco.role.attrib"/>
+ </define>
+ <define name="equation.content">
+ <optional>
+ <ref name="alt"/>
+ </optional>
+ <choice>
+ <oneOrMore>
+ <ref name="graphic"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="mediaobject"/>
+ </oneOrMore>
+ </choice>
+ </define>
+ <define name="inlineequation.content">
+ <optional>
+ <ref name="alt"/>
+ </optional>
+ <choice>
+ <oneOrMore>
+ <ref name="graphic"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="inlinemediaobject"/>
+ </oneOrMore>
+ </choice>
+ </define>
+ <define name="equation.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="equation">
+ <element name="equation">
+ <ref name="equation.attlist"/>
+ <optional>
+ <ref name="formalobject.title.content"/>
+ </optional>
+ <choice>
+ <ref name="informalequation"/>
+ <ref name="equation.content"/>
+ </choice>
+ </element>
+ </define>
+ <define name="equation.attlist">
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="equation.role.attrib"/>
+ </define>
+ <define name="informalequation.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="informalequation">
+ <element name="informalequation">
+ <ref name="informalequation.attlist"/>
+ <ref name="equation.content"/>
+ </element>
+ </define>
+ <define name="informalequation.attlist">
+ <ref name="common.attrib"/>
+ <ref name="informalequation.role.attrib"/>
+ </define>
+ <define name="inlineequation.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="inlineequation">
+ <element name="inlineequation">
+ <ref name="inlineequation.attlist"/>
+ <ref name="inlineequation.content"/>
+ </element>
+ </define>
+ <define name="inlineequation.attlist">
+ <ref name="common.attrib"/>
+ <ref name="inlineequation.role.attrib"/>
+ </define>
+ <define name="alt.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="alt">
+ <element name="alt">
+ <ref name="alt.attlist"/>
+ <text/>
+ </element>
+ </define>
+ <define name="alt.attlist">
+ <ref name="common.attrib"/>
+ <ref name="alt.role.attrib"/>
+ </define>
+ <define name="synopsis.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="synopsis">
+ <element name="synopsis">
+ <ref name="synopsis.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="para.char.mix"/>
+ <ref name="graphic"/>
+ <ref name="mediaobject"/>
+ <ref name="lineannotation"/>
+ <ref name="co"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="synopsis.attlist">
+ <ref name="label.attrib"/>
+ <ref name="linespecific.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="synopsis.role.attrib"/>
+ </define>
+ <define name="cmdsynopsis.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="cmdsynopsis">
+ <element name="cmdsynopsis">
+ <ref name="cmdsynopsis.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="command"/>
+ <ref name="arg"/>
+ <ref name="group"/>
+ <ref name="sbr"/>
+ </choice>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="synopfragment"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="cmdsynopsis.attlist">
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="cmdsynopsis.role.attrib"/>
+ <optional>
+ <attribute name="sepchar">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cmdlength">
+ <data type="integer"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="arg.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="arg">
+ <element name="arg">
+ <ref name="arg.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="arg"/>
+ <ref name="group"/>
+ <ref name="option"/>
+ <ref name="synopfragmentref"/>
+ <ref name="replaceable"/>
+ <ref name="sbr"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="arg.attlist">
+ <ref name="common.attrib"/>
+ <ref name="arg.role.attrib"/>
+ <optional>
+ <attribute name="choice">
+ <choice>
+ <value>opt</value>
+ <value>req</value>
+ <value>plain</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rep">
+ <choice>
+ <value>norepeat</value>
+ <value>repeat</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="group.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="group">
+ <element name="group">
+ <ref name="group.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="arg"/>
+ <ref name="group"/>
+ <ref name="option"/>
+ <ref name="synopfragmentref"/>
+ <ref name="replaceable"/>
+ <ref name="sbr"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="group.attlist">
+ <ref name="common.attrib"/>
+ <ref name="group.role.attrib"/>
+ <optional>
+ <attribute name="choice">
+ <choice>
+ <value>opt</value>
+ <value>req</value>
+ <value>plain</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rep">
+ <choice>
+ <value>norepeat</value>
+ <value>repeat</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="sbr.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sbr">
+ <element name="sbr">
+ <ref name="sbr.attlist"/>
+ </element>
+ </define>
+ <define name="sbr.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sbr.role.attrib"/>
+ </define>
+ <define name="synopfragmentref.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="synopfragmentref">
+ <element name="synopfragmentref">
+ <ref name="synopfragmentref.attlist"/>
+ <text/>
+ </element>
+ </define>
+ <define name="synopfragmentref.attlist">
+ <ref name="linkendreq.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="synopfragmentref.role.attrib"/>
+ </define>
+ <define name="synopfragment.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="synopfragment">
+ <element name="synopfragment">
+ <ref name="synopfragment.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="arg"/>
+ <ref name="group"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="synopfragment.attlist">
+ <ref name="idreq.common.attrib"/>
+ <ref name="synopfragment.role.attrib"/>
+ </define>
+ <define name="funcsynopsis.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="funcsynopsis">
+ <element name="funcsynopsis">
+ <ref name="funcsynopsis.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="funcsynopsisinfo"/>
+ <ref name="funcprototype"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="funcsynopsis.attlist">
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="funcsynopsis.role.attrib"/>
+ </define>
+ <define name="funcsynopsisinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="funcsynopsisinfo">
+ <element name="funcsynopsisinfo">
+ <ref name="funcsynopsisinfo.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="cptr.char.mix"/>
+ <ref name="lineannotation"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="funcsynopsisinfo.attlist">
+ <ref name="linespecific.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="funcsynopsisinfo.role.attrib"/>
+ </define>
+ <define name="funcprototype.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="funcprototype">
+ <element name="funcprototype">
+ <ref name="funcprototype.attlist"/>
+ <ref name="funcdef"/>
+ <oneOrMore>
+ <choice>
+ <ref name="void"/>
+ <ref name="varargs"/>
+ <ref name="paramdef"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="funcprototype.attlist">
+ <ref name="common.attrib"/>
+ <ref name="funcprototype.role.attrib"/>
+ </define>
+ <define name="funcdef.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="funcdef">
+ <element name="funcdef">
+ <ref name="funcdef.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="replaceable"/>
+ <ref name="function"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="funcdef.attlist">
+ <ref name="common.attrib"/>
+ <ref name="funcdef.role.attrib"/>
+ </define>
+ <define name="void.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="void">
+ <element name="void">
+ <ref name="void.attlist"/>
+ </element>
+ </define>
+ <define name="void.attlist">
+ <ref name="common.attrib"/>
+ <ref name="void.role.attrib"/>
+ </define>
+ <define name="varargs.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="varargs">
+ <element name="varargs">
+ <ref name="varargs.attlist"/>
+ </element>
+ </define>
+ <define name="varargs.attlist">
+ <ref name="common.attrib"/>
+ <ref name="varargs.role.attrib"/>
+ </define>
+ <define name="paramdef.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="paramdef">
+ <element name="paramdef">
+ <ref name="paramdef.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="replaceable"/>
+ <ref name="parameter"/>
+ <ref name="funcparams"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="paramdef.attlist">
+ <ref name="common.attrib"/>
+ <ref name="paramdef.role.attrib"/>
+ </define>
+ <define name="funcparams.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="funcparams">
+ <element name="funcparams">
+ <ref name="funcparams.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="cptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="funcparams.attlist">
+ <ref name="common.attrib"/>
+ <ref name="funcparams.role.attrib"/>
+ </define>
+ <define name="classsynopsis.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="classsynopsis">
+ <element name="classsynopsis">
+ <ref name="classsynopsis.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="ooclass"/>
+ <ref name="oointerface"/>
+ <ref name="ooexception"/>
+ </choice>
+ </oneOrMore>
+ <zeroOrMore>
+ <choice>
+ <ref name="classsynopsisinfo"/>
+ <ref name="fieldsynopsis"/>
+ <ref name="method.synop.class"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="classsynopsis.attlist">
+ <ref name="common.attrib"/>
+ <ref name="classsynopsis.role.attrib"/>
+ <optional>
+ <attribute name="language">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>class</value>
+ <value>interface</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="classsynopsisinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="classsynopsisinfo">
+ <element name="classsynopsisinfo">
+ <ref name="classsynopsisinfo.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="cptr.char.mix"/>
+ <ref name="lineannotation"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="classsynopsisinfo.attlist">
+ <ref name="linespecific.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="classsynopsisinfo.role.attrib"/>
+ </define>
+ <define name="ooclass.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="ooclass">
+ <element name="ooclass">
+ <ref name="ooclass.attlist"/>
+ <zeroOrMore>
+ <ref name="modifier"/>
+ </zeroOrMore>
+ <ref name="classname"/>
+ </element>
+ </define>
+ <define name="ooclass.attlist">
+ <ref name="common.attrib"/>
+ <ref name="ooclass.role.attrib"/>
+ </define>
+ <define name="oointerface.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="oointerface">
+ <element name="oointerface">
+ <ref name="oointerface.attlist"/>
+ <zeroOrMore>
+ <ref name="modifier"/>
+ </zeroOrMore>
+ <ref name="interfacename"/>
+ </element>
+ </define>
+ <define name="oointerface.attlist">
+ <ref name="common.attrib"/>
+ <ref name="oointerface.role.attrib"/>
+ </define>
+ <define name="ooexception.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="ooexception">
+ <element name="ooexception">
+ <ref name="ooexception.attlist"/>
+ <zeroOrMore>
+ <ref name="modifier"/>
+ </zeroOrMore>
+ <ref name="exceptionname"/>
+ </element>
+ </define>
+ <define name="ooexception.attlist">
+ <ref name="common.attrib"/>
+ <ref name="ooexception.role.attrib"/>
+ </define>
+ <define name="modifier.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="modifier">
+ <element name="modifier">
+ <ref name="modifier.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="modifier.attlist">
+ <ref name="common.attrib"/>
+ <ref name="modifier.role.attrib"/>
+ </define>
+ <define name="interfacename.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="interfacename">
+ <element name="interfacename">
+ <ref name="interfacename.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="interfacename.attlist">
+ <ref name="common.attrib"/>
+ <ref name="interfacename.role.attrib"/>
+ </define>
+ <define name="exceptionname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="exceptionname">
+ <element name="exceptionname">
+ <ref name="exceptionname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="exceptionname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="exceptionname.role.attrib"/>
+ </define>
+ <define name="fieldsynopsis.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="fieldsynopsis">
+ <element name="fieldsynopsis">
+ <ref name="fieldsynopsis.attlist"/>
+ <zeroOrMore>
+ <ref name="modifier"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="type"/>
+ </optional>
+ <ref name="varname"/>
+ <optional>
+ <ref name="initializer"/>
+ </optional>
+ </element>
+ </define>
+ <define name="fieldsynopsis.attlist">
+ <ref name="common.attrib"/>
+ <ref name="fieldsynopsis.role.attrib"/>
+ </define>
+ <define name="initializer.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="initializer">
+ <element name="initializer">
+ <ref name="initializer.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="initializer.attlist">
+ <ref name="common.attrib"/>
+ <ref name="initializer.role.attrib"/>
+ </define>
+ <define name="constructorsynopsis.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="constructorsynopsis">
+ <element name="constructorsynopsis">
+ <ref name="constructorsynopsis.attlist"/>
+ <zeroOrMore>
+ <ref name="modifier"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="methodname"/>
+ </optional>
+ <choice>
+ <oneOrMore>
+ <ref name="methodparam"/>
+ </oneOrMore>
+ <ref name="void"/>
+ </choice>
+ <zeroOrMore>
+ <ref name="exceptionname"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="constructorsynopsis.attlist">
+ <ref name="common.attrib"/>
+ <ref name="constructorsynopsis.role.attrib"/>
+ </define>
+ <define name="destructorsynopsis.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="destructorsynopsis">
+ <element name="destructorsynopsis">
+ <ref name="destructorsynopsis.attlist"/>
+ <zeroOrMore>
+ <ref name="modifier"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="methodname"/>
+ </optional>
+ <choice>
+ <oneOrMore>
+ <ref name="methodparam"/>
+ </oneOrMore>
+ <ref name="void"/>
+ </choice>
+ <zeroOrMore>
+ <ref name="exceptionname"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="destructorsynopsis.attlist">
+ <ref name="common.attrib"/>
+ <ref name="destructorsynopsis.role.attrib"/>
+ </define>
+ <define name="methodsynopsis.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="methodsynopsis">
+ <element name="methodsynopsis">
+ <ref name="methodsynopsis.attlist"/>
+ <zeroOrMore>
+ <ref name="modifier"/>
+ </zeroOrMore>
+ <optional>
+ <choice>
+ <ref name="type"/>
+ <ref name="void"/>
+ </choice>
+ </optional>
+ <optional>
+ <ref name="methodname"/>
+ </optional>
+ <choice>
+ <oneOrMore>
+ <ref name="methodparam"/>
+ </oneOrMore>
+ <ref name="void"/>
+ </choice>
+ <zeroOrMore>
+ <ref name="exceptionname"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="modifier"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="methodsynopsis.attlist">
+ <ref name="common.attrib"/>
+ <ref name="methodsynopsis.role.attrib"/>
+ </define>
+ <define name="methodname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="methodname">
+ <element name="methodname">
+ <ref name="methodname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="methodname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="methodname.role.attrib"/>
+ </define>
+ <define name="methodparam.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="methodparam">
+ <element name="methodparam">
+ <ref name="methodparam.attlist"/>
+ <zeroOrMore>
+ <element name="modifier">
+ <text/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="type">
+ <text/>
+ </element>
+ </optional>
+ <choice>
+ <group>
+ <element name="parameter">
+ <text/>
+ </element>
+ <optional>
+ <element name="initializer">
+ <text/>
+ </element>
+ </optional>
+ </group>
+ <element name="funcparams">
+ <text/>
+ </element>
+ </choice>
+ <zeroOrMore>
+ <element name="modifier">
+ <text/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="methodparam.attlist">
+ <ref name="common.attrib"/>
+ <ref name="methodparam.role.attrib"/>
+ <optional>
+ <attribute name="choice">
+ <choice>
+ <value>opt</value>
+ <value>req</value>
+ <value>plain</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rep">
+ <choice>
+ <value>norepeat</value>
+ <value>repeat</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ackno.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="ackno">
+ <element name="ackno">
+ <ref name="ackno.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="ackno.attlist">
+ <ref name="common.attrib"/>
+ <ref name="ackno.role.attrib"/>
+ </define>
+ <define name="address.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="address">
+ <element name="address">
+ <ref name="address.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="person.ident.mix"/>
+ <ref name="street"/>
+ <ref name="pob"/>
+ <ref name="postcode"/>
+ <ref name="city"/>
+ <ref name="state"/>
+ <ref name="country"/>
+ <ref name="phone"/>
+ <ref name="fax"/>
+ <ref name="email"/>
+ <ref name="otheraddr"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="address.attlist">
+ <ref name="linespecific.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="address.role.attrib"/>
+ </define>
+ <define name="street.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="street">
+ <element name="street">
+ <ref name="street.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="street.attlist">
+ <ref name="common.attrib"/>
+ <ref name="street.role.attrib"/>
+ </define>
+ <define name="pob.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="pob">
+ <element name="pob">
+ <ref name="pob.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="pob.attlist">
+ <ref name="common.attrib"/>
+ <ref name="pob.role.attrib"/>
+ </define>
+ <define name="postcode.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="postcode">
+ <element name="postcode">
+ <ref name="postcode.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="postcode.attlist">
+ <ref name="common.attrib"/>
+ <ref name="postcode.role.attrib"/>
+ </define>
+ <define name="city.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="city">
+ <element name="city">
+ <ref name="city.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="city.attlist">
+ <ref name="common.attrib"/>
+ <ref name="city.role.attrib"/>
+ </define>
+ <define name="state.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="state">
+ <element name="state">
+ <ref name="state.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="state.attlist">
+ <ref name="common.attrib"/>
+ <ref name="state.role.attrib"/>
+ </define>
+ <define name="country.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="country">
+ <element name="country">
+ <ref name="country.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="country.attlist">
+ <ref name="common.attrib"/>
+ <ref name="country.role.attrib"/>
+ </define>
+ <define name="phone.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="phone">
+ <element name="phone">
+ <ref name="phone.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="phone.attlist">
+ <ref name="common.attrib"/>
+ <ref name="phone.role.attrib"/>
+ </define>
+ <define name="fax.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="fax">
+ <element name="fax">
+ <ref name="fax.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="fax.attlist">
+ <ref name="common.attrib"/>
+ <ref name="fax.role.attrib"/>
+ </define>
+ <define name="otheraddr.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="otheraddr">
+ <element name="otheraddr">
+ <ref name="otheraddr.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="otheraddr.attlist">
+ <ref name="common.attrib"/>
+ <ref name="otheraddr.role.attrib"/>
+ </define>
+ <define name="affiliation.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="affiliation">
+ <element name="affiliation">
+ <ref name="affiliation.attlist"/>
+ <optional>
+ <ref name="shortaffil"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="jobtitle"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="orgname"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="orgdiv"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="address"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="affiliation.attlist">
+ <ref name="common.attrib"/>
+ <ref name="affiliation.role.attrib"/>
+ </define>
+ <define name="shortaffil.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="shortaffil">
+ <element name="shortaffil">
+ <ref name="shortaffil.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="shortaffil.attlist">
+ <ref name="common.attrib"/>
+ <ref name="shortaffil.role.attrib"/>
+ </define>
+ <define name="jobtitle.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="jobtitle">
+ <element name="jobtitle">
+ <ref name="jobtitle.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="jobtitle.attlist">
+ <ref name="common.attrib"/>
+ <ref name="jobtitle.role.attrib"/>
+ </define>
+ <define name="orgdiv.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="orgdiv">
+ <element name="orgdiv">
+ <ref name="orgdiv.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="orgdiv.attlist">
+ <ref name="common.attrib"/>
+ <ref name="orgdiv.role.attrib"/>
+ </define>
+ <define name="artpagenums.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="artpagenums">
+ <element name="artpagenums">
+ <ref name="artpagenums.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="artpagenums.attlist">
+ <ref name="common.attrib"/>
+ <ref name="artpagenums.role.attrib"/>
+ </define>
+ <define name="author.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="author">
+ <element name="author">
+ <ref name="author.attlist"/>
+ <oneOrMore>
+ <ref name="person.ident.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="author.attlist">
+ <ref name="common.attrib"/>
+ <ref name="author.role.attrib"/>
+ </define>
+ <define name="authorgroup.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="authorgroup">
+ <element name="authorgroup">
+ <ref name="authorgroup.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="author"/>
+ <ref name="editor"/>
+ <ref name="collab"/>
+ <ref name="corpauthor"/>
+ <ref name="othercredit"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="authorgroup.attlist">
+ <ref name="common.attrib"/>
+ <ref name="authorgroup.role.attrib"/>
+ </define>
+ <define name="collab.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="collab">
+ <element name="collab">
+ <ref name="collab.attlist"/>
+ <ref name="collabname"/>
+ <zeroOrMore>
+ <ref name="affiliation"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="collab.attlist">
+ <ref name="common.attrib"/>
+ <ref name="collab.role.attrib"/>
+ </define>
+ <define name="collabname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="collabname">
+ <element name="collabname">
+ <ref name="collabname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="collabname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="collabname.role.attrib"/>
+ </define>
+ <define name="authorinitials.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="authorinitials">
+ <element name="authorinitials">
+ <ref name="authorinitials.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="authorinitials.attlist">
+ <ref name="common.attrib"/>
+ <ref name="authorinitials.role.attrib"/>
+ </define>
+ <define name="confgroup.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="confgroup">
+ <element name="confgroup">
+ <ref name="confgroup.attlist"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="confdates"/>
+ <ref name="conftitle"/>
+ <ref name="confnum"/>
+ <ref name="address"/>
+ <ref name="confsponsor"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="confgroup.attlist">
+ <ref name="common.attrib"/>
+ <ref name="confgroup.role.attrib"/>
+ </define>
+ <define name="confdates.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="confdates">
+ <element name="confdates">
+ <ref name="confdates.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="confdates.attlist">
+ <ref name="common.attrib"/>
+ <ref name="confdates.role.attrib"/>
+ </define>
+ <define name="conftitle.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="conftitle">
+ <element name="conftitle">
+ <ref name="conftitle.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="conftitle.attlist">
+ <ref name="common.attrib"/>
+ <ref name="conftitle.role.attrib"/>
+ </define>
+ <define name="confnum.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="confnum">
+ <element name="confnum">
+ <ref name="confnum.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="confnum.attlist">
+ <ref name="common.attrib"/>
+ <ref name="confnum.role.attrib"/>
+ </define>
+ <define name="confsponsor.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="confsponsor">
+ <element name="confsponsor">
+ <ref name="confsponsor.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="confsponsor.attlist">
+ <ref name="common.attrib"/>
+ <ref name="confsponsor.role.attrib"/>
+ </define>
+ <define name="contractnum.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="contractnum">
+ <element name="contractnum">
+ <ref name="contractnum.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="contractnum.attlist">
+ <ref name="common.attrib"/>
+ <ref name="contractnum.role.attrib"/>
+ </define>
+ <define name="contractsponsor.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="contractsponsor">
+ <element name="contractsponsor">
+ <ref name="contractsponsor.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="contractsponsor.attlist">
+ <ref name="common.attrib"/>
+ <ref name="contractsponsor.role.attrib"/>
+ </define>
+ <define name="copyright.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="copyright">
+ <element name="copyright">
+ <ref name="copyright.attlist"/>
+ <oneOrMore>
+ <ref name="year"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="holder"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="copyright.attlist">
+ <ref name="common.attrib"/>
+ <ref name="copyright.role.attrib"/>
+ </define>
+ <define name="year.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="year">
+ <element name="year">
+ <ref name="year.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="year.attlist">
+ <ref name="common.attrib"/>
+ <ref name="year.role.attrib"/>
+ </define>
+ <define name="holder.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="holder">
+ <element name="holder">
+ <ref name="holder.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="holder.attlist">
+ <ref name="common.attrib"/>
+ <ref name="holder.role.attrib"/>
+ </define>
+ <define name="corpauthor.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="corpauthor">
+ <element name="corpauthor">
+ <ref name="corpauthor.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="corpauthor.attlist">
+ <ref name="common.attrib"/>
+ <ref name="corpauthor.role.attrib"/>
+ </define>
+ <define name="corpname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="corpname">
+ <element name="corpname">
+ <ref name="corpname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="corpname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="corpname.role.attrib"/>
+ </define>
+ <define name="date.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="date">
+ <element name="date">
+ <ref name="date.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="date.attlist">
+ <ref name="common.attrib"/>
+ <ref name="date.role.attrib"/>
+ </define>
+ <define name="edition.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="edition">
+ <element name="edition">
+ <ref name="edition.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="edition.attlist">
+ <ref name="common.attrib"/>
+ <ref name="edition.role.attrib"/>
+ </define>
+ <define name="editor.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="editor">
+ <element name="editor">
+ <ref name="editor.attlist"/>
+ <oneOrMore>
+ <ref name="person.ident.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="editor.attlist">
+ <ref name="common.attrib"/>
+ <ref name="editor.role.attrib"/>
+ </define>
+ <define name="isbn.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="isbn">
+ <element name="isbn">
+ <ref name="isbn.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="isbn.attlist">
+ <ref name="common.attrib"/>
+ <ref name="isbn.role.attrib"/>
+ </define>
+ <define name="issn.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="issn">
+ <element name="issn">
+ <ref name="issn.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="issn.attlist">
+ <ref name="common.attrib"/>
+ <ref name="issn.role.attrib"/>
+ </define>
+ <define name="invpartnumber.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="invpartnumber">
+ <element name="invpartnumber">
+ <ref name="invpartnumber.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="invpartnumber.attlist">
+ <ref name="common.attrib"/>
+ <ref name="invpartnumber.role.attrib"/>
+ </define>
+ <define name="issuenum.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="issuenum">
+ <element name="issuenum">
+ <ref name="issuenum.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="issuenum.attlist">
+ <ref name="common.attrib"/>
+ <ref name="issuenum.role.attrib"/>
+ </define>
+ <define name="legalnotice.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="legalnotice">
+ <element name="legalnotice">
+ <ref name="legalnotice.attlist"/>
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <oneOrMore>
+ <ref name="legalnotice.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="legalnotice.attlist">
+ <ref name="common.attrib"/>
+ <ref name="legalnotice.role.attrib"/>
+ </define>
+ <define name="modespec.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="modespec">
+ <element name="modespec">
+ <ref name="modespec.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="modespec.attlist">
+ <ref name="common.attrib"/>
+ <ref name="modespec.role.attrib"/>
+ <optional>
+ <attribute name="application">
+ <choice>
+ <value>BMP</value>
+ <value>CGM-CHAR</value>
+ <value>CGM-BINARY</value>
+ <value>CGM-CLEAR</value>
+ <value>DITROFF</value>
+ <value>DVI</value>
+ <value>EPS</value>
+ <value>EQN</value>
+ <value>FAX</value>
+ <value>GIF</value>
+ <value>GIF87a</value>
+ <value>GIF89a</value>
+ <value>JPG</value>
+ <value>JPEG</value>
+ <value>IGES</value>
+ <value>PCX</value>
+ <value>PIC</value>
+ <value>PNG</value>
+ <value>PS</value>
+ <value>SGML</value>
+ <value>TBL</value>
+ <value>TEX</value>
+ <value>TIFF</value>
+ <value>WMF</value>
+ <value>WPG</value>
+ <value>linespecific</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="orgname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="orgname">
+ <element name="orgname">
+ <ref name="orgname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="orgname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="orgname.role.attrib"/>
+ </define>
+ <define name="othercredit.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="othercredit">
+ <element name="othercredit">
+ <ref name="othercredit.attlist"/>
+ <oneOrMore>
+ <ref name="person.ident.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="othercredit.attlist">
+ <ref name="common.attrib"/>
+ <ref name="othercredit.role.attrib"/>
+ </define>
+ <define name="pagenums.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="pagenums">
+ <element name="pagenums">
+ <ref name="pagenums.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="pagenums.attlist">
+ <ref name="common.attrib"/>
+ <ref name="pagenums.role.attrib"/>
+ </define>
+ <define name="contrib.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="contrib">
+ <element name="contrib">
+ <ref name="contrib.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="contrib.attlist">
+ <ref name="common.attrib"/>
+ <ref name="contrib.role.attrib"/>
+ </define>
+ <define name="firstname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="firstname">
+ <element name="firstname">
+ <ref name="firstname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="firstname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="firstname.role.attrib"/>
+ </define>
+ <define name="honorific.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="honorific">
+ <element name="honorific">
+ <ref name="honorific.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="honorific.attlist">
+ <ref name="common.attrib"/>
+ <ref name="honorific.role.attrib"/>
+ </define>
+ <define name="lineage.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="lineage">
+ <element name="lineage">
+ <ref name="lineage.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="lineage.attlist">
+ <ref name="common.attrib"/>
+ <ref name="lineage.role.attrib"/>
+ </define>
+ <define name="othername.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="othername">
+ <element name="othername">
+ <ref name="othername.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="othername.attlist">
+ <ref name="common.attrib"/>
+ <ref name="othername.role.attrib"/>
+ </define>
+ <define name="surname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="surname">
+ <element name="surname">
+ <ref name="surname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="surname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="surname.role.attrib"/>
+ </define>
+ <define name="printhistory.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="printhistory">
+ <element name="printhistory">
+ <ref name="printhistory.attlist"/>
+ <oneOrMore>
+ <ref name="para.class"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="printhistory.attlist">
+ <ref name="common.attrib"/>
+ <ref name="printhistory.role.attrib"/>
+ </define>
+ <define name="productname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="productname">
+ <element name="productname">
+ <ref name="productname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="productname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="productname.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>service</value>
+ <value>trade</value>
+ <value>registered</value>
+ <value>copyright</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="productnumber.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="productnumber">
+ <element name="productnumber">
+ <ref name="productnumber.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="productnumber.attlist">
+ <ref name="common.attrib"/>
+ <ref name="productnumber.role.attrib"/>
+ </define>
+ <define name="pubdate.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="pubdate">
+ <element name="pubdate">
+ <ref name="pubdate.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="pubdate.attlist">
+ <ref name="common.attrib"/>
+ <ref name="pubdate.role.attrib"/>
+ </define>
+ <define name="publisher.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="publisher">
+ <element name="publisher">
+ <ref name="publisher.attlist"/>
+ <ref name="publishername"/>
+ <zeroOrMore>
+ <ref name="address"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="publisher.attlist">
+ <ref name="common.attrib"/>
+ <ref name="publisher.role.attrib"/>
+ </define>
+ <define name="publishername.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="publishername">
+ <element name="publishername">
+ <ref name="publishername.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="publishername.attlist">
+ <ref name="common.attrib"/>
+ <ref name="publishername.role.attrib"/>
+ </define>
+ <define name="pubsnumber.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="pubsnumber">
+ <element name="pubsnumber">
+ <ref name="pubsnumber.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="pubsnumber.attlist">
+ <ref name="common.attrib"/>
+ <ref name="pubsnumber.role.attrib"/>
+ </define>
+ <define name="releaseinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="releaseinfo">
+ <element name="releaseinfo">
+ <ref name="releaseinfo.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="releaseinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="releaseinfo.role.attrib"/>
+ </define>
+ <define name="revhistory.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="revhistory">
+ <element name="revhistory">
+ <ref name="revhistory.attlist"/>
+ <oneOrMore>
+ <ref name="revision"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="revhistory.attlist">
+ <ref name="common.attrib"/>
+ <ref name="revhistory.role.attrib"/>
+ </define>
+ <define name="revision.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="revision">
+ <element name="revision">
+ <ref name="revision.attlist"/>
+ <ref name="revnumber"/>
+ <ref name="date"/>
+ <zeroOrMore>
+ <ref name="authorinitials"/>
+ </zeroOrMore>
+ <optional>
+ <choice>
+ <ref name="revremark"/>
+ <ref name="revdescription"/>
+ </choice>
+ </optional>
+ </element>
+ </define>
+ <define name="revision.attlist">
+ <ref name="common.attrib"/>
+ <ref name="revision.role.attrib"/>
+ </define>
+ <define name="revnumber.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="revnumber">
+ <element name="revnumber">
+ <ref name="revnumber.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="revnumber.attlist">
+ <ref name="common.attrib"/>
+ <ref name="revnumber.role.attrib"/>
+ </define>
+ <define name="revremark.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="revremark">
+ <element name="revremark">
+ <ref name="revremark.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="revremark.attlist">
+ <ref name="common.attrib"/>
+ <ref name="revremark.role.attrib"/>
+ </define>
+ <define name="revdescription.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="revdescription">
+ <element name="revdescription">
+ <ref name="revdescription.attlist"/>
+ <oneOrMore>
+ <ref name="revdescription.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="revdescription.attlist">
+ <ref name="common.attrib"/>
+ <ref name="revdescription.role.attrib"/>
+ </define>
+ <define name="seriesvolnums.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="seriesvolnums">
+ <element name="seriesvolnums">
+ <ref name="seriesvolnums.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="seriesvolnums.attlist">
+ <ref name="common.attrib"/>
+ <ref name="seriesvolnums.role.attrib"/>
+ </define>
+ <define name="volumenum.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="volumenum">
+ <element name="volumenum">
+ <ref name="volumenum.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="volumenum.attlist">
+ <ref name="common.attrib"/>
+ <ref name="volumenum.role.attrib"/>
+ </define>
+ <define name="accel.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="accel">
+ <element name="accel">
+ <ref name="accel.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="accel.attlist">
+ <ref name="common.attrib"/>
+ <ref name="accel.role.attrib"/>
+ </define>
+ <define name="action.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="action">
+ <element name="action">
+ <ref name="action.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="action.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="action.role.attrib"/>
+ </define>
+ <define name="application.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="application">
+ <element name="application">
+ <ref name="application.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="application.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="application.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>hardware</value>
+ <value>software</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="classname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="classname">
+ <element name="classname">
+ <ref name="classname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="classname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="classname.role.attrib"/>
+ </define>
+ <define name="co.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="co">
+ <element name="co">
+ <ref name="co.attlist"/>
+ </element>
+ </define>
+ <define name="co.attlist">
+ <ref name="label.attrib"/>
+ <ref name="linkends.attrib"/>
+ <ref name="idreq.common.attrib"/>
+ <ref name="co.role.attrib"/>
+ </define>
+ <define name="command.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="command">
+ <element name="command">
+ <ref name="command.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="cptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="command.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="command.role.attrib"/>
+ </define>
+ <define name="computeroutput.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="computeroutput">
+ <element name="computeroutput">
+ <ref name="computeroutput.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="cptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="computeroutput.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="computeroutput.role.attrib"/>
+ </define>
+ <define name="database.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="database">
+ <element name="database">
+ <ref name="database.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="database.attlist">
+ <ref name="common.attrib"/>
+ <ref name="database.role.attrib"/>
+ <ref name="moreinfo.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>name</value>
+ <value>table</value>
+ <value>field</value>
+ <value>key1</value>
+ <value>key2</value>
+ <value>record</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="email.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="email">
+ <element name="email">
+ <ref name="email.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="email.attlist">
+ <ref name="common.attrib"/>
+ <ref name="email.role.attrib"/>
+ </define>
+ <define name="envar.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="envar">
+ <element name="envar">
+ <ref name="envar.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="envar.attlist">
+ <ref name="common.attrib"/>
+ <ref name="envar.role.attrib"/>
+ </define>
+ <define name="errorcode.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="errorcode">
+ <element name="errorcode">
+ <ref name="errorcode.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="errorcode.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="errorcode.role.attrib"/>
+ </define>
+ <define name="errorname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="errorname">
+ <element name="errorname">
+ <ref name="errorname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="errorname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="errorname.role.attrib"/>
+ </define>
+ <define name="errortype.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="errortype">
+ <element name="errortype">
+ <ref name="errortype.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="errortype.attlist">
+ <ref name="common.attrib"/>
+ <ref name="errortype.role.attrib"/>
+ </define>
+ <define name="filename.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="filename">
+ <element name="filename">
+ <ref name="filename.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="filename.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="filename.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>headerfile</value>
+ <value>devicefile</value>
+ <value>libraryfile</value>
+ <value>directory</value>
+ <value>symlink</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="path">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="function.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="function">
+ <element name="function">
+ <ref name="function.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="cptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="function.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="function.role.attrib"/>
+ </define>
+ <define name="guibutton.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="guibutton">
+ <element name="guibutton">
+ <ref name="guibutton.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="smallcptr.char.mix"/>
+ <ref name="accel"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="guibutton.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="guibutton.role.attrib"/>
+ </define>
+ <define name="guiicon.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="guiicon">
+ <element name="guiicon">
+ <ref name="guiicon.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="smallcptr.char.mix"/>
+ <ref name="accel"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="guiicon.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="guiicon.role.attrib"/>
+ </define>
+ <define name="guilabel.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="guilabel">
+ <element name="guilabel">
+ <ref name="guilabel.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="smallcptr.char.mix"/>
+ <ref name="accel"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="guilabel.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="guilabel.role.attrib"/>
+ </define>
+ <define name="guimenu.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="guimenu">
+ <element name="guimenu">
+ <ref name="guimenu.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="smallcptr.char.mix"/>
+ <ref name="accel"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="guimenu.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="guimenu.role.attrib"/>
+ </define>
+ <define name="guimenuitem.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="guimenuitem">
+ <element name="guimenuitem">
+ <ref name="guimenuitem.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="smallcptr.char.mix"/>
+ <ref name="accel"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="guimenuitem.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="guimenuitem.role.attrib"/>
+ </define>
+ <define name="guisubmenu.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="guisubmenu">
+ <element name="guisubmenu">
+ <ref name="guisubmenu.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="smallcptr.char.mix"/>
+ <ref name="accel"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="guisubmenu.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="guisubmenu.role.attrib"/>
+ </define>
+ <define name="hardware.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="hardware">
+ <element name="hardware">
+ <ref name="hardware.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="hardware.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="hardware.role.attrib"/>
+ </define>
+ <define name="interface.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="interface">
+ <element name="interface">
+ <ref name="interface.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="smallcptr.char.mix"/>
+ <ref name="accel"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="interface.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="interface.role.attrib"/>
+ </define>
+ <define name="keycap.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="keycap">
+ <element name="keycap">
+ <ref name="keycap.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="keycap.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="keycap.role.attrib"/>
+ </define>
+ <define name="keycode.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="keycode">
+ <element name="keycode">
+ <ref name="keycode.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="keycode.attlist">
+ <ref name="common.attrib"/>
+ <ref name="keycode.role.attrib"/>
+ </define>
+ <define name="keycombo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="keycombo">
+ <element name="keycombo">
+ <ref name="keycombo.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="keycap"/>
+ <ref name="keycombo"/>
+ <ref name="keysym"/>
+ <ref name="mousebutton"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="keycombo.attlist">
+ <ref name="keyaction.attrib"/>
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="keycombo.role.attrib"/>
+ </define>
+ <define name="keysysm.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="keysym">
+ <element name="keysym">
+ <ref name="keysym.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="keysym.attlist">
+ <ref name="common.attrib"/>
+ <ref name="keysysm.role.attrib"/>
+ </define>
+ <define name="lineannotation.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="lineannotation">
+ <element name="lineannotation">
+ <ref name="lineannotation.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="lineannotation.attlist">
+ <ref name="common.attrib"/>
+ <ref name="lineannotation.role.attrib"/>
+ </define>
+ <define name="literal.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="literal">
+ <element name="literal">
+ <ref name="literal.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="cptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="literal.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="literal.role.attrib"/>
+ </define>
+ <define name="constant.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="constant">
+ <element name="constant">
+ <ref name="constant.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="constant.attlist">
+ <ref name="common.attrib"/>
+ <ref name="constant.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <value>limit</value>
+ </attribute>
+ </optional>
+ </define>
+ <define name="varname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="varname">
+ <element name="varname">
+ <ref name="varname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="varname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="varname.role.attrib"/>
+ </define>
+ <define name="markup.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="markup">
+ <element name="markup">
+ <ref name="markup.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="markup.attlist">
+ <ref name="common.attrib"/>
+ <ref name="markup.role.attrib"/>
+ </define>
+ <define name="medialabel.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="medialabel">
+ <element name="medialabel">
+ <ref name="medialabel.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="medialabel.attlist">
+ <ref name="common.attrib"/>
+ <ref name="medialabel.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>cartridge</value>
+ <value>cdrom</value>
+ <value>disk</value>
+ <value>tape</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="menuchoice.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="menuchoice">
+ <element name="menuchoice">
+ <ref name="menuchoice.attlist"/>
+ <optional>
+ <ref name="shortcut"/>
+ </optional>
+ <oneOrMore>
+ <choice>
+ <ref name="guibutton"/>
+ <ref name="guiicon"/>
+ <ref name="guilabel"/>
+ <ref name="guimenu"/>
+ <ref name="guimenuitem"/>
+ <ref name="guisubmenu"/>
+ <ref name="interface"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="menuchoice.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="menuchoice.role.attrib"/>
+ </define>
+ <define name="shortcut.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="shortcut">
+ <element name="shortcut">
+ <ref name="shortcut.attlist"/>
+ <oneOrMore>
+ <choice>
+ <ref name="keycap"/>
+ <ref name="keycombo"/>
+ <ref name="keysym"/>
+ <ref name="mousebutton"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="shortcut.attlist">
+ <ref name="keyaction.attrib"/>
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="shortcut.role.attrib"/>
+ </define>
+ <define name="mousebutton.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="mousebutton">
+ <element name="mousebutton">
+ <ref name="mousebutton.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="mousebutton.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="mousebutton.role.attrib"/>
+ </define>
+ <define name="msgtext.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="msgtext">
+ <element name="msgtext">
+ <ref name="msgtext.attlist"/>
+ <oneOrMore>
+ <ref name="component.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="msgtext.attlist">
+ <ref name="common.attrib"/>
+ <ref name="msgtext.role.attrib"/>
+ </define>
+ <define name="option.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="option">
+ <element name="option">
+ <ref name="option.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="option.attlist">
+ <ref name="common.attrib"/>
+ <ref name="option.role.attrib"/>
+ </define>
+ <define name="optional.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="optional">
+ <element name="optional">
+ <ref name="optional.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="cptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="optional.attlist">
+ <ref name="common.attrib"/>
+ <ref name="optional.role.attrib"/>
+ </define>
+ <define name="parameter.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="parameter">
+ <element name="parameter">
+ <ref name="parameter.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="parameter.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="parameter.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>command</value>
+ <value>function</value>
+ <value>option</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="prompt.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="prompt">
+ <element name="prompt">
+ <ref name="prompt.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="prompt.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="prompt.role.attrib"/>
+ </define>
+ <define name="property.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="property">
+ <element name="property">
+ <ref name="property.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="property.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="property.role.attrib"/>
+ </define>
+ <define name="replaceable.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="replaceable">
+ <element name="replaceable">
+ <ref name="replaceable.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="link.char.class"/>
+ <ref name="optional"/>
+ <ref name="base.char.class"/>
+ <ref name="other.char.class"/>
+ <ref name="inlinegraphic"/>
+ <ref name="inlinemediaobject"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="replaceable.attlist">
+ <ref name="common.attrib"/>
+ <ref name="replaceable.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>command</value>
+ <value>function</value>
+ <value>option</value>
+ <value>parameter</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="returnvalue.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="returnvalue">
+ <element name="returnvalue">
+ <ref name="returnvalue.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="returnvalue.attlist">
+ <ref name="common.attrib"/>
+ <ref name="returnvalue.role.attrib"/>
+ </define>
+ <define name="sgmltag.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sgmltag">
+ <element name="sgmltag">
+ <ref name="sgmltag.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="sgmltag.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sgmltag.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>attribute</value>
+ <value>attvalue</value>
+ <value>element</value>
+ <value>endtag</value>
+ <value>emptytag</value>
+ <value>genentity</value>
+ <value>numcharref</value>
+ <value>paramentity</value>
+ <value>pi</value>
+ <value>xmlpi</value>
+ <value>starttag</value>
+ <value>sgmlcomment</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="structfield.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="structfield">
+ <element name="structfield">
+ <ref name="structfield.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="structfield.attlist">
+ <ref name="common.attrib"/>
+ <ref name="structfield.role.attrib"/>
+ </define>
+ <define name="structname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="structname">
+ <element name="structname">
+ <ref name="structname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="structname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="structname.role.attrib"/>
+ </define>
+ <define name="symbol.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="symbol">
+ <element name="symbol">
+ <ref name="symbol.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="symbol.attlist">
+ <ref name="common.attrib"/>
+ <ref name="symbol.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <value>limit</value>
+ </attribute>
+ </optional>
+ </define>
+ <define name="systemitem.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="systemitem">
+ <element name="systemitem">
+ <ref name="systemitem.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="smallcptr.char.mix"/>
+ <ref name="acronym"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="systemitem.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="systemitem.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>constant</value>
+ <value>groupname</value>
+ <value>library</value>
+ <value>macro</value>
+ <value>osname</value>
+ <value>resource</value>
+ <value>systemname</value>
+ <value>username</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="token.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="token">
+ <element name="token">
+ <ref name="token.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="token.attlist">
+ <ref name="common.attrib"/>
+ <ref name="token.role.attrib"/>
+ </define>
+ <define name="type.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="type">
+ <element name="type">
+ <ref name="type.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="smallcptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="type.attlist">
+ <ref name="common.attrib"/>
+ <ref name="type.role.attrib"/>
+ </define>
+ <define name="userinput.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="userinput">
+ <element name="userinput">
+ <ref name="userinput.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="cptr.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="userinput.attlist">
+ <ref name="moreinfo.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="userinput.role.attrib"/>
+ </define>
+ <define name="abbrev.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="abbrev">
+ <element name="abbrev">
+ <ref name="abbrev.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="word.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="abbrev.attlist">
+ <ref name="common.attrib"/>
+ <ref name="abbrev.role.attrib"/>
+ </define>
+ <define name="acronym.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="acronym">
+ <element name="acronym">
+ <ref name="acronym.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="word.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="acronym.attlist">
+ <ref name="common.attrib"/>
+ <ref name="acronym.role.attrib"/>
+ </define>
+ <define name="citation.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="citation">
+ <element name="citation">
+ <ref name="citation.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="citation.attlist">
+ <ref name="common.attrib"/>
+ <ref name="citation.role.attrib"/>
+ </define>
+ <define name="citerefentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="citerefentry">
+ <element name="citerefentry">
+ <ref name="citerefentry.attlist"/>
+ <ref name="refentrytitle"/>
+ <optional>
+ <ref name="manvolnum"/>
+ </optional>
+ </element>
+ </define>
+ <define name="citerefentry.attlist">
+ <ref name="common.attrib"/>
+ <ref name="citerefentry.role.attrib"/>
+ </define>
+ <define name="refentrytitle.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refentrytitle">
+ <element name="refentrytitle">
+ <ref name="refentrytitle.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="refentrytitle.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refentrytitle.role.attrib"/>
+ </define>
+ <define name="namvolnum.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="manvolnum">
+ <element name="manvolnum">
+ <ref name="manvolnum.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="word.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="manvolnum.attlist">
+ <ref name="common.attrib"/>
+ <ref name="namvolnum.role.attrib"/>
+ </define>
+ <define name="citetitle.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="citetitle">
+ <element name="citetitle">
+ <ref name="citetitle.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="citetitle.attlist">
+ <ref name="common.attrib"/>
+ <ref name="citetitle.role.attrib"/>
+ <optional>
+ <attribute name="pubwork">
+ <choice>
+ <value>article</value>
+ <value>book</value>
+ <value>chapter</value>
+ <value>part</value>
+ <value>refentry</value>
+ <value>section</value>
+ <value>journal</value>
+ <value>series</value>
+ <value>set</value>
+ <value>manuscript</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="emphasis.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="emphasis">
+ <element name="emphasis">
+ <ref name="emphasis.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="emphasis.attlist">
+ <ref name="common.attrib"/>
+ <ref name="emphasis.role.attrib"/>
+ </define>
+ <define name="firstterm.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="firstterm">
+ <element name="firstterm">
+ <ref name="firstterm.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="word.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="firstterm.attlist">
+ <ref name="common.attrib"/>
+ <ref name="firstterm.role.attrib"/>
+ <ref name="linkend.attrib"/>
+ </define>
+ <define name="foreignphrase.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="foreignphrase">
+ <element name="foreignphrase">
+ <ref name="foreignphrase.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="foreignphrase.attlist">
+ <ref name="common.attrib"/>
+ <ref name="foreignphrase.role.attrib"/>
+ </define>
+ <define name="glossterm.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="glossterm">
+ <element name="glossterm">
+ <ref name="glossterm.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="glossterm.attlist">
+ <ref name="common.attrib"/>
+ <ref name="glossterm.role.attrib"/>
+ <ref name="linkend.attrib"/>
+ <optional>
+ <attribute name="baseform">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="phrase.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="phrase">
+ <element name="phrase">
+ <ref name="phrase.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="phrase.attlist">
+ <ref name="common.attrib"/>
+ <ref name="phrase.role.attrib"/>
+ </define>
+ <define name="quote.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="quote">
+ <element name="quote">
+ <ref name="quote.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="quote.attlist">
+ <ref name="common.attrib"/>
+ <ref name="quote.role.attrib"/>
+ </define>
+ <define name="ssscript.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="subscriptContentModel">
+ <zeroOrMore>
+ <choice>
+ <ref name="link.char.class"/>
+ <ref name="emphasis"/>
+ <ref name="replaceable"/>
+ <ref name="symbol"/>
+ <ref name="inlinegraphic"/>
+ <ref name="inlinemediaobject"/>
+ <ref name="base.char.class"/>
+ <ref name="other.char.class"/>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="subscript">
+ <element name="subscript">
+ <ref name="subscript.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="subscriptContentModel"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="subscript.attlist">
+ <ref name="common.attrib"/>
+ <ref name="ssscript.role.attrib"/>
+ </define>
+ <define name="superscript">
+ <element name="superscript">
+ <ref name="superscript.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="subscriptContentModel"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="superscript.attlist">
+ <ref name="common.attrib"/>
+ <ref name="ssscript.role.attrib"/>
+ </define>
+ <define name="trademark.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="trademark">
+ <element name="trademark">
+ <ref name="trademark.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="link.char.class"/>
+ <ref name="tech.char.class"/>
+ <ref name="base.char.class"/>
+ <ref name="other.char.class"/>
+ <ref name="inlinegraphic"/>
+ <ref name="inlinemediaobject"/>
+ <ref name="emphasis"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="trademark.attlist">
+ <ref name="common.attrib"/>
+ <ref name="trademark.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>service</value>
+ <value>trade</value>
+ <value>registered</value>
+ <value>copyright</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="wordasword.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="wordasword">
+ <element name="wordasword">
+ <ref name="wordasword.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="word.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="wordasword.attlist">
+ <ref name="common.attrib"/>
+ <ref name="wordasword.role.attrib"/>
+ </define>
+ <define name="link.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="link">
+ <element name="link">
+ <ref name="link.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="link.attlist">
+ <ref name="linkendreq.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="link.role.attrib"/>
+ <optional>
+ <attribute name="endterm">
+ <data type="IDREF"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="olink.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="olink">
+ <element name="olink">
+ <ref name="olink.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="olink.attlist">
+ <ref name="common.attrib"/>
+ <ref name="olink.role.attrib"/>
+ <optional>
+ <attribute name="linkmode">
+ <data type="IDREF"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="localinfo">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ulink.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="ulink">
+ <element name="ulink">
+ <ref name="ulink.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="ulink.attlist">
+ <ref name="common.attrib"/>
+ <ref name="ulink.role.attrib"/>
+ <attribute name="url">
+ <data type="string"/>
+ </attribute>
+ <optional>
+ <attribute name="type">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="footnoteref.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="footnoteref">
+ <element name="footnoteref">
+ <ref name="footnoteref.attlist"/>
+ </element>
+ </define>
+ <define name="footnoteref.attlist">
+ <ref name="linkendreq.attrib"/>
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="footnoteref.role.attrib"/>
+ </define>
+ <define name="xref.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="xref">
+ <element name="xref">
+ <ref name="xref.attlist"/>
+ </element>
+ </define>
+ <define name="xref.attlist">
+ <ref name="linkendreq.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="xref.role.attrib"/>
+ <optional>
+ <attribute name="endterm">
+ <data type="IDREF"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="anchor.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="anchor">
+ <element name="anchor">
+ <ref name="anchor.attlist"/>
+ </element>
+ </define>
+ <define name="anchor.attlist">
+ <ref name="idreq.attrib"/>
+ <ref name="pagenum.attrib"/>
+ <ref name="remap.attrib"/>
+ <ref name="xreflabel.attrib"/>
+ <ref name="revisionflag.attrib"/>
+ <ref name="effectivity.attrib"/>
+ <ref name="anchor.role.attrib"/>
+ </define>
+ <define name="beginpage.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="beginpage">
+ <element name="beginpage">
+ <ref name="beginpage.attlist"/>
+ </element>
+ </define>
+ <define name="beginpage.attlist">
+ <ref name="pagenum.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="beginpage.role.attrib"/>
+ </define>
+ <define name="indexterm.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="indexterm">
+ <element name="indexterm">
+ <ref name="indexterm.attlist"/>
+ <optional>
+ <ref name="primary"/>
+ </optional>
+ <optional>
+ <choice>
+ <group>
+ <ref name="secondary"/>
+ <optional>
+ <choice>
+ <group>
+ <ref name="tertiary"/>
+ <optional>
+ <choice>
+ <ref name="see"/>
+ <oneOrMore>
+ <ref name="seealso"/>
+ </oneOrMore>
+ </choice>
+ </optional>
+ </group>
+ <ref name="see"/>
+ <oneOrMore>
+ <ref name="seealso"/>
+ </oneOrMore>
+ </choice>
+ </optional>
+ </group>
+ <ref name="see"/>
+ <oneOrMore>
+ <ref name="seealso"/>
+ </oneOrMore>
+ </choice>
+ </optional>
+ </element>
+ </define>
+ <define name="indexterm.attlist">
+ <ref name="common.attrib"/>
+ <ref name="indexterm.role.attrib"/>
+ <ref name="pagenum.attrib"/>
+ <optional>
+ <attribute name="scope">
+ <choice>
+ <value>all</value>
+ <value>global</value>
+ <value>local</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="significance">
+ <choice>
+ <value>preferred</value>
+ <value>normal</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>singular</value>
+ <value>startofrange</value>
+ <value>endofrange</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startref">
+ <data type="IDREF"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="zone">
+ <data type="IDREFS"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="primsecter.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="primary">
+ <element name="primary">
+ <ref name="primary.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="primary.attlist">
+ <ref name="common.attrib"/>
+ <ref name="primsecter.role.attrib"/>
+ <optional>
+ <attribute name="sortas">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="secondary">
+ <element name="secondary">
+ <ref name="secondary.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="secondary.attlist">
+ <ref name="common.attrib"/>
+ <ref name="primsecter.role.attrib"/>
+ <optional>
+ <attribute name="sortas">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="tertiary">
+ <element name="tertiary">
+ <ref name="tertiary.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="tertiary.attlist">
+ <ref name="common.attrib"/>
+ <ref name="primsecter.role.attrib"/>
+ <optional>
+ <attribute name="sortas">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="seeseealso.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="see">
+ <element name="see">
+ <ref name="see.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="see.attlist">
+ <ref name="common.attrib"/>
+ <ref name="seeseealso.role.attrib"/>
+ </define>
+ <define name="seealso">
+ <element name="seealso">
+ <ref name="seealso.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="seealso.attlist">
+ <ref name="common.attrib"/>
+ <ref name="seeseealso.role.attrib"/>
+ </define>
+ <define name="appendix.class">
+ <ref name="appendix"/>
+ </define>
+ <define name="article.class">
+ <ref name="article"/>
+ </define>
+ <define name="book.class">
+ <ref name="book"/>
+ </define>
+ <define name="chapter.class">
+ <ref name="chapter"/>
+ </define>
+ <define name="index.class">
+ <choice>
+ <ref name="index"/>
+ <ref name="setindex"/>
+ </choice>
+ </define>
+ <define name="refentry.class">
+ <ref name="refentry"/>
+ </define>
+ <define name="nav.class">
+ <choice>
+ <ref name="toc"/>
+ <ref name="lot"/>
+ <ref name="index"/>
+ <ref name="glossary"/>
+ <ref name="bibliography"/>
+ </choice>
+ </define>
+ <define name="divcomponent.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="formal.class"/>
+ <ref name="compound.class"/>
+ <ref name="genobj.class"/>
+ <ref name="descobj.class"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="refcomponent.mix">
+ <choice>
+ <ref name="list.class"/>
+ <ref name="admon.class"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="formal.class"/>
+ <ref name="compound.class"/>
+ <ref name="genobj.class"/>
+ <ref name="descobj.class"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="indexdivcomponent.mix">
+ <choice>
+ <ref name="itemizedlist"/>
+ <ref name="orderedlist"/>
+ <ref name="variablelist"/>
+ <ref name="simplelist"/>
+ <ref name="linespecific.class"/>
+ <ref name="synop.class"/>
+ <ref name="para.class"/>
+ <ref name="informal.class"/>
+ <ref name="anchor"/>
+ <ref name="remark"/>
+ <ref name="link.char.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="refname.char.mix">
+ <ref name="tech.char.class"/>
+ </define>
+ <define name="partcontent.mix">
+ <choice>
+ <ref name="appendix.class"/>
+ <ref name="chapter.class"/>
+ <ref name="nav.class"/>
+ <ref name="article.class"/>
+ <ref name="preface"/>
+ <ref name="refentry.class"/>
+ <ref name="reference"/>
+ </choice>
+ </define>
+ <define name="refinline.char.mix">
+ <choice>
+ <ref name="xref.char.class"/>
+ <ref name="gen.char.class"/>
+ <ref name="link.char.class"/>
+ <ref name="tech.char.class"/>
+ <ref name="base.char.class"/>
+ <ref name="docinfo.char.class"/>
+ <ref name="other.char.class"/>
+ <ref name="ndxterm.class"/>
+ <ref name="beginpage"/>
+ </choice>
+ </define>
+ <define name="refclass.char.mix">
+ <ref name="application"/>
+ </define>
+ <define name="div.title.content">
+ <ref name="title"/>
+ <optional>
+ <ref name="subtitle"/>
+ </optional>
+ <optional>
+ <ref name="titleabbrev"/>
+ </optional>
+ </define>
+ <define name="bookcomponent.title.content">
+ <ref name="title"/>
+ <optional>
+ <ref name="subtitle"/>
+ </optional>
+ <optional>
+ <ref name="titleabbrev"/>
+ </optional>
+ </define>
+ <define name="sect.title.content">
+ <ref name="title"/>
+ <optional>
+ <ref name="subtitle"/>
+ </optional>
+ <optional>
+ <ref name="titleabbrev"/>
+ </optional>
+ </define>
+ <define name="refsect.title.content">
+ <ref name="title"/>
+ <optional>
+ <ref name="subtitle"/>
+ </optional>
+ <optional>
+ <ref name="titleabbrev"/>
+ </optional>
+ </define>
+ <define name="bookcomponent.content">
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="divcomponent.mix"/>
+ </oneOrMore>
+ <choice>
+ <zeroOrMore>
+ <ref name="sect1"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="refentry.class"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="simplesect"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="section"/>
+ </zeroOrMore>
+ </choice>
+ </group>
+ <choice>
+ <oneOrMore>
+ <ref name="sect1"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="refentry.class"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="simplesect"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="section"/>
+ </oneOrMore>
+ </choice>
+ </choice>
+ </define>
+ <define name="set.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="set">
+ <element name="set">
+ <ref name="set.attlist"/>
+ <optional>
+ <ref name="div.title.content"/>
+ </optional>
+ <optional>
+ <ref name="setinfo"/>
+ </optional>
+ <optional>
+ <ref name="toc"/>
+ </optional>
+ <oneOrMore>
+ <ref name="book.class"/>
+ </oneOrMore>
+ <optional>
+ <ref name="setindex"/>
+ </optional>
+ </element>
+ </define>
+ <define name="set.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="set.role.attrib"/>
+ <optional>
+ <attribute name="fpi">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="setinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="setinfo">
+ <element name="setinfo">
+ <ref name="setinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="setinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="setinfo.role.attrib"/>
+ <optional>
+ <attribute name="contents">
+ <data type="IDREFS"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="book.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="book">
+ <element name="book">
+ <ref name="book.attlist"/>
+ <optional>
+ <ref name="div.title.content"/>
+ </optional>
+ <optional>
+ <ref name="bookinfo"/>
+ </optional>
+ <zeroOrMore>
+ <choice>
+ <ref name="dedication"/>
+ <ref name="toc"/>
+ <ref name="lot"/>
+ <ref name="glossary"/>
+ <ref name="bibliography"/>
+ <ref name="preface"/>
+ <ref name="chapter.class"/>
+ <ref name="reference"/>
+ <ref name="part"/>
+ <ref name="article.class"/>
+ <ref name="appendix.class"/>
+ <ref name="index.class"/>
+ <ref name="colophon"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="book.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="book.role.attrib"/>
+ <optional>
+ <attribute name="fpi">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="bookinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="bookinfo">
+ <element name="bookinfo">
+ <ref name="bookinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="bookinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="bookinfo.role.attrib"/>
+ <optional>
+ <attribute name="contents">
+ <data type="IDREFS"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="dedication.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="dedication">
+ <element name="dedication">
+ <ref name="dedication.attlist"/>
+ <optional>
+ <ref name="sect.title.content"/>
+ </optional>
+ <oneOrMore>
+ <ref name="legalnotice.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="dedication.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="dedication.role.attrib"/>
+ </define>
+ <define name="colophon.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="colophon">
+ <element name="colophon">
+ <ref name="colophon.attlist"/>
+ <optional>
+ <ref name="sect.title.content"/>
+ </optional>
+ <oneOrMore>
+ <ref name="textobject.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="colophon.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="colophon.role.attrib"/>
+ </define>
+ <define name="toc.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="toc">
+ <element name="toc">
+ <ref name="toc.attlist"/>
+ <optional>
+ <ref name="bookcomponent.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="tocfront"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <choice>
+ <ref name="tocpart"/>
+ <ref name="tocchap"/>
+ </choice>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="tocback"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="toc.attlist">
+ <ref name="pagenum.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="toc.role.attrib"/>
+ </define>
+ <define name="tocfront.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="tocfront">
+ <element name="tocfront">
+ <ref name="tocfront.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="tocfront.attlist">
+ <ref name="label.attrib"/>
+ <ref name="linkend.attrib"/>
+ <ref name="pagenum.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="tocfront.role.attrib"/>
+ </define>
+ <define name="tocentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="tocentry">
+ <element name="tocentry">
+ <ref name="tocentry.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="tocentry.attlist">
+ <ref name="linkend.attrib"/>
+ <ref name="pagenum.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="tocentry.role.attrib"/>
+ </define>
+ <define name="tocpart.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="tocpart">
+ <element name="tocpart">
+ <ref name="tocpart.attlist"/>
+ <oneOrMore>
+ <ref name="tocentry"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="tocchap"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="tocpart.attlist">
+ <ref name="common.attrib"/>
+ <ref name="tocpart.role.attrib"/>
+ </define>
+ <define name="tocchap.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="tocchap">
+ <element name="tocchap">
+ <ref name="tocchap.attlist"/>
+ <oneOrMore>
+ <ref name="tocentry"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="toclevel1"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="tocchap.attlist">
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="tocchap.role.attrib"/>
+ </define>
+ <define name="toclevel1.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="toclevel1">
+ <element name="toclevel1">
+ <ref name="toclevel1.attlist"/>
+ <oneOrMore>
+ <ref name="tocentry"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="toclevel2"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="toclevel1.attlist">
+ <ref name="common.attrib"/>
+ <ref name="toclevel1.role.attrib"/>
+ </define>
+ <define name="toclevel2.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="toclevel2">
+ <element name="toclevel2">
+ <ref name="toclevel2.attlist"/>
+ <oneOrMore>
+ <ref name="tocentry"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="toclevel3"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="toclevel2.attlist">
+ <ref name="common.attrib"/>
+ <ref name="toclevel2.role.attrib"/>
+ </define>
+ <define name="toclevel3.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="toclevel3">
+ <element name="toclevel3">
+ <ref name="toclevel3.attlist"/>
+ <oneOrMore>
+ <ref name="tocentry"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="toclevel4"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="toclevel3.attlist">
+ <ref name="common.attrib"/>
+ <ref name="toclevel3.role.attrib"/>
+ </define>
+ <define name="toclevel4.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="toclevel4">
+ <element name="toclevel4">
+ <ref name="toclevel4.attlist"/>
+ <oneOrMore>
+ <ref name="tocentry"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="toclevel5"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="toclevel4.attlist">
+ <ref name="common.attrib"/>
+ <ref name="toclevel4.role.attrib"/>
+ </define>
+ <define name="toclevel5.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="toclevel5">
+ <element name="toclevel5">
+ <ref name="toclevel5.attlist"/>
+ <oneOrMore>
+ <ref name="tocentry"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="toclevel5.attlist">
+ <ref name="common.attrib"/>
+ <ref name="toclevel5.role.attrib"/>
+ </define>
+ <define name="tocback.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="tocback">
+ <element name="tocback">
+ <ref name="tocback.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="tocback.attlist">
+ <ref name="label.attrib"/>
+ <ref name="linkend.attrib"/>
+ <ref name="pagenum.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="tocback.role.attrib"/>
+ </define>
+ <define name="lot.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="lot">
+ <element name="lot">
+ <ref name="lot.attlist"/>
+ <optional>
+ <ref name="bookcomponent.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="lotentry"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="lot.attlist">
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="lot.role.attrib"/>
+ </define>
+ <define name="lotentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="lotentry">
+ <element name="lotentry">
+ <ref name="lotentry.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="para.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="lotentry.attlist">
+ <ref name="pagenum.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="linkend.attrib"/>
+ <ref name="lotentry.role.attrib"/>
+ <optional>
+ <attribute name="srccredit">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="appendix.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="appendix">
+ <element name="appendix">
+ <ref name="appendix.attlist"/>
+ <optional>
+ <ref name="appendixinfo"/>
+ </optional>
+ <ref name="bookcomponent.title.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="tocchap"/>
+ </optional>
+ <ref name="bookcomponent.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="appendix.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="appendix.role.attrib"/>
+ </define>
+ <define name="chapter.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="chapter">
+ <element name="chapter">
+ <ref name="chapter.attlist"/>
+ <optional>
+ <ref name="chapterinfo"/>
+ </optional>
+ <ref name="bookcomponent.title.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="tocchap"/>
+ </optional>
+ <ref name="bookcomponent.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="chapter.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="chapter.role.attrib"/>
+ </define>
+ <define name="part.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="part">
+ <element name="part">
+ <ref name="part.attlist"/>
+ <optional>
+ <ref name="partinfo"/>
+ </optional>
+ <ref name="bookcomponent.title.content"/>
+ <optional>
+ <ref name="partintro"/>
+ </optional>
+ <oneOrMore>
+ <ref name="partcontent.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="part.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="part.role.attrib"/>
+ </define>
+ <define name="preface.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="preface">
+ <element name="preface">
+ <ref name="preface.attlist"/>
+ <optional>
+ <ref name="prefaceinfo"/>
+ </optional>
+ <ref name="bookcomponent.title.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="tocchap"/>
+ </optional>
+ <ref name="bookcomponent.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="preface.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="preface.role.attrib"/>
+ </define>
+ <define name="reference.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="reference">
+ <element name="reference">
+ <ref name="reference.attlist"/>
+ <optional>
+ <ref name="referenceinfo"/>
+ </optional>
+ <ref name="bookcomponent.title.content"/>
+ <optional>
+ <ref name="partintro"/>
+ </optional>
+ <oneOrMore>
+ <ref name="refentry.class"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="reference.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="reference.role.attrib"/>
+ </define>
+ <define name="partintro.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="partintro">
+ <element name="partintro">
+ <ref name="partintro.attlist"/>
+ <optional>
+ <ref name="div.title.content"/>
+ </optional>
+ <ref name="bookcomponent.content"/>
+ </element>
+ </define>
+ <define name="partintro.attlist">
+ <ref name="label.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="partintro.role.attrib"/>
+ </define>
+ <define name="appendixinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="appendixinfo">
+ <element name="appendixinfo">
+ <ref name="appendixinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="appendixinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="appendixinfo.role.attrib"/>
+ </define>
+ <define name="bibliographyinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="bibliographyinfo">
+ <element name="bibliographyinfo">
+ <ref name="bibliographyinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="bibliographyinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="bibliographyinfo.role.attrib"/>
+ </define>
+ <define name="chapterinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="chapterinfo">
+ <element name="chapterinfo">
+ <ref name="chapterinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="chapterinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="chapterinfo.role.attrib"/>
+ </define>
+ <define name="glossaryinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="glossaryinfo">
+ <element name="glossaryinfo">
+ <ref name="glossaryinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="glossaryinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="glossaryinfo.role.attrib"/>
+ </define>
+ <define name="indexinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="indexinfo">
+ <element name="indexinfo">
+ <ref name="indexinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="indexinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="indexinfo.role.attrib"/>
+ </define>
+ <define name="setindexinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="setindexinfo">
+ <element name="setindexinfo">
+ <ref name="setindexinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="setindexinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="setindexinfo.role.attrib"/>
+ </define>
+ <define name="partinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="partinfo">
+ <element name="partinfo">
+ <ref name="partinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="partinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="partinfo.role.attrib"/>
+ </define>
+ <define name="prefaceinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="prefaceinfo">
+ <element name="prefaceinfo">
+ <ref name="prefaceinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="prefaceinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="prefaceinfo.role.attrib"/>
+ </define>
+ <define name="refentryinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refentryinfo">
+ <element name="refentryinfo">
+ <ref name="refentryinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="refentryinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refentryinfo.role.attrib"/>
+ </define>
+ <define name="refsect1info.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refsect1info">
+ <element name="refsect1info">
+ <ref name="refsect1info.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="refsect1info.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refsect1info.role.attrib"/>
+ </define>
+ <define name="refsect2info.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refsect2info">
+ <element name="refsect2info">
+ <ref name="refsect2info.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="refsect2info.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refsect2info.role.attrib"/>
+ </define>
+ <define name="refsect3info.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refsect3info">
+ <element name="refsect3info">
+ <ref name="refsect3info.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="refsect3info.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refsect3info.role.attrib"/>
+ </define>
+ <define name="refsynopsisdivinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refsynopsisdivinfo">
+ <element name="refsynopsisdivinfo">
+ <ref name="refsynopsisdivinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="refsynopsisdivinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refsynopsisdivinfo.role.attrib"/>
+ </define>
+ <define name="referenceinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="referenceinfo">
+ <element name="referenceinfo">
+ <ref name="referenceinfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="referenceinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="referenceinfo.role.attrib"/>
+ </define>
+ <define name="sect1info.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect1info">
+ <element name="sect1info">
+ <ref name="sect1info.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="sect1info.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sect1info.role.attrib"/>
+ </define>
+ <define name="sect2info.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect2info">
+ <element name="sect2info">
+ <ref name="sect2info.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="sect2info.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sect2info.role.attrib"/>
+ </define>
+ <define name="sect3info.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect3info">
+ <element name="sect3info">
+ <ref name="sect3info.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="sect3info.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sect3info.role.attrib"/>
+ </define>
+ <define name="sect4info.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect4info">
+ <element name="sect4info">
+ <ref name="sect4info.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="sect4info.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sect4info.role.attrib"/>
+ </define>
+ <define name="sect5info.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect5info">
+ <element name="sect5info">
+ <ref name="sect5info.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="sect5info.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sect5info.role.attrib"/>
+ </define>
+ <define name="section.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="section">
+ <element name="section">
+ <ref name="section.attlist"/>
+ <optional>
+ <ref name="sectioninfo"/>
+ </optional>
+ <ref name="sect.title.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="divcomponent.mix"/>
+ </oneOrMore>
+ <choice>
+ <zeroOrMore>
+ <ref name="refentry.class"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="section"/>
+ </zeroOrMore>
+ </choice>
+ </group>
+ <choice>
+ <oneOrMore>
+ <ref name="refentry.class"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="section"/>
+ </oneOrMore>
+ </choice>
+ </choice>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="section.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="section.role.attrib"/>
+ </define>
+ <define name="sectioninfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sectioninfo">
+ <element name="sectioninfo">
+ <ref name="sectioninfo.attlist"/>
+ <ref name="infoContentModel"/>
+ </element>
+ </define>
+ <define name="sectioninfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="sectioninfo.role.attrib"/>
+ </define>
+ <define name="sect1.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect1">
+ <element name="sect1">
+ <ref name="sect1.attlist"/>
+ <optional>
+ <ref name="sect1info"/>
+ </optional>
+ <ref name="sect.title.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="divcomponent.mix"/>
+ </oneOrMore>
+ <choice>
+ <zeroOrMore>
+ <ref name="refentry.class"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="sect2"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="simplesect"/>
+ </zeroOrMore>
+ </choice>
+ </group>
+ <choice>
+ <oneOrMore>
+ <ref name="refentry.class"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="sect2"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="simplesect"/>
+ </oneOrMore>
+ </choice>
+ </choice>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="sect1.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="sect1.role.attrib"/>
+ <optional>
+ <attribute name="renderas">
+ <choice>
+ <value>sect2</value>
+ <value>sect3</value>
+ <value>sect4</value>
+ <value>sect5</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="sect2.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect2">
+ <element name="sect2">
+ <ref name="sect2.attlist"/>
+ <optional>
+ <ref name="sect2info"/>
+ </optional>
+ <ref name="sect.title.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="divcomponent.mix"/>
+ </oneOrMore>
+ <choice>
+ <zeroOrMore>
+ <ref name="refentry.class"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="sect3"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="simplesect"/>
+ </zeroOrMore>
+ </choice>
+ </group>
+ <choice>
+ <oneOrMore>
+ <ref name="refentry.class"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="sect3"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="simplesect"/>
+ </oneOrMore>
+ </choice>
+ </choice>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="sect2.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="sect2.role.attrib"/>
+ <optional>
+ <attribute name="renderas">
+ <choice>
+ <value>sect1</value>
+ <value>sect3</value>
+ <value>sect4</value>
+ <value>sect5</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="sect3.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect3">
+ <element name="sect3">
+ <ref name="sect3.attlist"/>
+ <optional>
+ <ref name="sect3info"/>
+ </optional>
+ <ref name="sect.title.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="divcomponent.mix"/>
+ </oneOrMore>
+ <choice>
+ <zeroOrMore>
+ <ref name="refentry.class"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="sect4"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="simplesect"/>
+ </zeroOrMore>
+ </choice>
+ </group>
+ <choice>
+ <oneOrMore>
+ <ref name="refentry.class"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="sect4"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="simplesect"/>
+ </oneOrMore>
+ </choice>
+ </choice>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="sect3.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="sect3.role.attrib"/>
+ <optional>
+ <attribute name="renderas">
+ <choice>
+ <value>sect1</value>
+ <value>sect2</value>
+ <value>sect4</value>
+ <value>sect5</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="sect4.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect4">
+ <element name="sect4">
+ <ref name="sect4.attlist"/>
+ <optional>
+ <ref name="sect4info"/>
+ </optional>
+ <ref name="sect.title.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="divcomponent.mix"/>
+ </oneOrMore>
+ <choice>
+ <zeroOrMore>
+ <ref name="refentry.class"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="sect5"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="simplesect"/>
+ </zeroOrMore>
+ </choice>
+ </group>
+ <choice>
+ <oneOrMore>
+ <ref name="refentry.class"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="sect5"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="simplesect"/>
+ </oneOrMore>
+ </choice>
+ </choice>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="sect4.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="sect4.role.attrib"/>
+ <optional>
+ <attribute name="renderas">
+ <choice>
+ <value>sect1</value>
+ <value>sect2</value>
+ <value>sect3</value>
+ <value>sect5</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="sect5.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="sect5">
+ <element name="sect5">
+ <ref name="sect5.attlist"/>
+ <optional>
+ <ref name="sect5info"/>
+ </optional>
+ <ref name="sect.title.content"/>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="divcomponent.mix"/>
+ </oneOrMore>
+ <choice>
+ <zeroOrMore>
+ <ref name="refentry.class"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="simplesect"/>
+ </zeroOrMore>
+ </choice>
+ </group>
+ <choice>
+ <oneOrMore>
+ <ref name="refentry.class"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="simplesect"/>
+ </oneOrMore>
+ </choice>
+ </choice>
+ <zeroOrMore>
+ <ref name="nav.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="sect5.attlist">
+ <ref name="label.attrib"/>
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="sect5.role.attrib"/>
+ <optional>
+ <attribute name="renderas">
+ <choice>
+ <value>sect1</value>
+ <value>sect2</value>
+ <value>sect3</value>
+ <value>sect4</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="simplesect.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="simplesect">
+ <element name="simplesect">
+ <ref name="simplesect.attlist"/>
+ <ref name="sect.title.content"/>
+ <oneOrMore>
+ <ref name="divcomponent.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="simplesect.attlist">
+ <ref name="common.attrib"/>
+ <ref name="simplesect.role.attrib"/>
+ </define>
+ <define name="bibliography.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="bibliography">
+ <element name="bibliography">
+ <ref name="bibliography.attlist"/>
+ <zeroOrMore>
+ <ref name="bibliographyinfo"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="bookcomponent.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ <choice>
+ <oneOrMore>
+ <ref name="bibliodiv"/>
+ </oneOrMore>
+ <oneOrMore>
+ <choice>
+ <ref name="biblioentry"/>
+ <ref name="bibliomixed"/>
+ </choice>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="bibliography.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="bibliography.role.attrib"/>
+ </define>
+ <define name="bibliodiv.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="bibliodiv">
+ <element name="bibliodiv">
+ <ref name="bibliodiv.attlist"/>
+ <optional>
+ <ref name="sect.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ <oneOrMore>
+ <choice>
+ <ref name="biblioentry"/>
+ <ref name="bibliomixed"/>
+ </choice>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="bibliodiv.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="bibliodiv.role.attrib"/>
+ </define>
+ <define name="glossary.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="glossary">
+ <element name="glossary">
+ <ref name="glossary.attlist"/>
+ <zeroOrMore>
+ <ref name="glossaryinfo"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="bookcomponent.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ <choice>
+ <oneOrMore>
+ <ref name="glossdiv"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="glossentry"/>
+ </oneOrMore>
+ </choice>
+ <optional>
+ <ref name="bibliography"/>
+ </optional>
+ </element>
+ </define>
+ <define name="glossary.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="glossary.role.attrib"/>
+ </define>
+ <define name="glossdiv.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="glossdiv">
+ <element name="glossdiv">
+ <ref name="glossdiv.attlist"/>
+ <optional>
+ <ref name="sect.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ <oneOrMore>
+ <ref name="glossentry"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="glossdiv.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="glossdiv.role.attrib"/>
+ </define>
+ <define name="indexes.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="index">
+ <element name="index">
+ <ref name="index.attlist"/>
+ <zeroOrMore>
+ <ref name="indexinfo"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="bookcomponent.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ <choice>
+ <oneOrMore>
+ <ref name="indexdiv"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="indexentry"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="index.attlist">
+ <ref name="common.attrib"/>
+ <ref name="indexes.role.attrib"/>
+ </define>
+ <define name="setindex">
+ <element name="setindex">
+ <ref name="setindex.attlist"/>
+ <zeroOrMore>
+ <ref name="setindexinfo"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="bookcomponent.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="component.mix"/>
+ </zeroOrMore>
+ <choice>
+ <oneOrMore>
+ <ref name="indexdiv"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="indexentry"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="setindex.attlist">
+ <ref name="common.attrib"/>
+ <ref name="indexes.role.attrib"/>
+ </define>
+ <define name="indexdiv.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="indexdiv">
+ <element name="indexdiv">
+ <ref name="indexdiv.attlist"/>
+ <optional>
+ <ref name="sect.title.content"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="indexdivcomponent.mix"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="indexentry"/>
+ </zeroOrMore>
+ <ref name="segmentedlist"/>
+ </element>
+ </define>
+ <define name="indexdiv.attlist">
+ <ref name="common.attrib"/>
+ <ref name="indexdiv.role.attrib"/>
+ </define>
+ <define name="indexentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="indexentry">
+ <element name="indexentry">
+ <ref name="indexentry.attlist"/>
+ <ref name="primaryie"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="seeie"/>
+ <ref name="seealsoie"/>
+ </choice>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="secondaryie"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="seeie"/>
+ <ref name="seealsoie"/>
+ <ref name="tertiaryie"/>
+ </choice>
+ </zeroOrMore>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="indexentry.attlist">
+ <ref name="common.attrib"/>
+ <ref name="indexentry.role.attrib"/>
+ </define>
+ <define name="primsecterie.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="primaryie">
+ <element name="primaryie">
+ <ref name="primaryie.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="primaryie.attlist">
+ <ref name="linkends.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="primsecterie.role.attrib"/>
+ </define>
+ <define name="secondaryie">
+ <element name="secondaryie">
+ <ref name="secondaryie.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="secondaryie.attlist">
+ <ref name="linkends.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="primsecterie.role.attrib"/>
+ </define>
+ <define name="tertiaryie">
+ <element name="tertiaryie">
+ <ref name="tertiaryie.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="tertiaryie.attlist">
+ <ref name="linkends.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="primsecterie.role.attrib"/>
+ </define>
+ <define name="seeie.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="seeie">
+ <element name="seeie">
+ <ref name="seeie.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="seeie.attlist">
+ <ref name="linkend.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="seeie.role.attrib"/>
+ </define>
+ <define name="seealsoie.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="seealsoie">
+ <element name="seealsoie">
+ <ref name="seealsoie.attlist"/>
+ <zeroOrMore>
+ <ref name="ndxterm.char.mix"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="seealsoie.attlist">
+ <ref name="linkends.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="seealsoie.role.attrib"/>
+ </define>
+ <define name="refentry.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refentry">
+ <element name="refentry">
+ <ref name="refentry.attlist"/>
+ <zeroOrMore>
+ <ref name="ndxterm.class"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="refentryinfo"/>
+ </optional>
+ <optional>
+ <ref name="refmeta"/>
+ </optional>
+ <zeroOrMore>
+ <choice>
+ <ref name="remark"/>
+ <ref name="link.char.class"/>
+ </choice>
+ </zeroOrMore>
+ <ref name="refnamediv"/>
+ <optional>
+ <ref name="refsynopsisdiv"/>
+ </optional>
+ <oneOrMore>
+ <ref name="refsect1"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="refentry.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="refentry.role.attrib"/>
+ </define>
+ <define name="refmeta.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refmeta">
+ <element name="refmeta">
+ <ref name="refmeta.attlist"/>
+ <zeroOrMore>
+ <ref name="ndxterm.class"/>
+ </zeroOrMore>
+ <ref name="refentrytitle"/>
+ <optional>
+ <ref name="manvolnum"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="refmiscinfo"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="ndxterm.class"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="refmeta.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refmeta.role.attrib"/>
+ </define>
+ <define name="refmiscinfo.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refmiscinfo">
+ <element name="refmiscinfo">
+ <ref name="refmiscinfo.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="docinfo.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="refmiscinfo.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refmiscinfo.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="refnamediv.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refnamediv">
+ <element name="refnamediv">
+ <ref name="refnamediv.attlist"/>
+ <optional>
+ <ref name="refdescriptor"/>
+ </optional>
+ <oneOrMore>
+ <ref name="refname"/>
+ </oneOrMore>
+ <ref name="refpurpose"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="remark"/>
+ <ref name="link.char.class"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="refnamediv.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refnamediv.role.attrib"/>
+ </define>
+ <define name="refdescriptor.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refdescriptor">
+ <element name="refdescriptor">
+ <ref name="refdescriptor.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="refname.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="refdescriptor.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refdescriptor.role.attrib"/>
+ </define>
+ <define name="refname.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refname">
+ <element name="refname">
+ <ref name="refname.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="refname.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="refname.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refname.role.attrib"/>
+ </define>
+ <define name="refpurpose.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refpurpose">
+ <element name="refpurpose">
+ <ref name="refpurpose.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="refinline.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="refpurpose.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refpurpose.role.attrib"/>
+ </define>
+ <define name="refclass.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refclass">
+ <element name="refclass">
+ <ref name="refclass.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <ref name="refclass.char.mix"/>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="refclass.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refclass.role.attrib"/>
+ </define>
+ <define name="refsynopsisdiv.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refsynopsisdiv">
+ <element name="refsynopsisdiv">
+ <ref name="refsynopsisdiv.attlist"/>
+ <optional>
+ <ref name="refsynopsisdivinfo"/>
+ </optional>
+ <optional>
+ <ref name="refsect.title.content"/>
+ </optional>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="refcomponent.mix"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="refsect2"/>
+ </zeroOrMore>
+ </group>
+ <oneOrMore>
+ <ref name="refsect2"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="refsynopsisdiv.attlist">
+ <ref name="common.attrib"/>
+ <ref name="refsynopsisdiv.role.attrib"/>
+ </define>
+ <define name="refsect1.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refsect1">
+ <element name="refsect1">
+ <ref name="refsect1.attlist"/>
+ <optional>
+ <ref name="refsect1info"/>
+ </optional>
+ <ref name="refsect.title.content"/>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="refcomponent.mix"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="refsect2"/>
+ </zeroOrMore>
+ </group>
+ <oneOrMore>
+ <ref name="refsect2"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="refsect1.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="refsect1.role.attrib"/>
+ </define>
+ <define name="refsect2.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refsect2">
+ <element name="refsect2">
+ <ref name="refsect2.attlist"/>
+ <optional>
+ <ref name="refsect2info"/>
+ </optional>
+ <ref name="refsect.title.content"/>
+ <choice>
+ <group>
+ <oneOrMore>
+ <ref name="refcomponent.mix"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <ref name="refsect3"/>
+ </zeroOrMore>
+ </group>
+ <oneOrMore>
+ <ref name="refsect3"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="refsect2.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="refsect2.role.attrib"/>
+ </define>
+ <define name="refsect3.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="refsect3">
+ <element name="refsect3">
+ <ref name="refsect3.attlist"/>
+ <optional>
+ <ref name="refsect3info"/>
+ </optional>
+ <ref name="refsect.title.content"/>
+ <oneOrMore>
+ <ref name="refcomponent.mix"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="refsect3.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="refsect3.role.attrib"/>
+ </define>
+ <define name="article.role.attrib">
+ <ref name="role.attrib"/>
+ </define>
+ <define name="article">
+ <element name="article">
+ <ref name="article.attlist"/>
+ <optional>
+ <ref name="div.title.content"/>
+ </optional>
+ <optional>
+ <ref name="articleinfo"/>
+ </optional>
+ <optional>
+ <ref name="tocchap"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="lot"/>
+ </zeroOrMore>
+ <ref name="bookcomponent.content"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="nav.class"/>
+ <ref name="appendix.class"/>
+ <ref name="ackno"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="article.attlist">
+ <ref name="status.attrib"/>
+ <ref name="common.attrib"/>
+ <ref name="article.role.attrib"/>
+ <optional>
+ <attribute name="class">
+ <choice>
+ <value>journalarticle</value>
+ <value>productsheet</value>
+ <value>whitepaper</value>
+ <value>techreport</value>
+ <value>specification</value>
+ <value>faq</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="parentbook">
+ <data type="IDREF"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="table.att">
+ <empty/>
+ </define>
+ <define name="tgroup.att">
+ <empty/>
+ </define>
+ <define name="colspec.att">
+ <empty/>
+ </define>
+ <define name="thead.att">
+ <empty/>
+ </define>
+ <define name="tbody.att">
+ <empty/>
+ </define>
+ <define name="row.att">
+ <empty/>
+ </define>
+ <define name="entry.att">
+ <empty/>
+ </define>
+ <define name="table">
+ <element name="table">
+ <ref name="table.attlist"/>
+ <ref name="formalobject.title.content"/>
+ <optional>
+ <ref name="ndxterm.class"/>
+ </optional>
+ <choice>
+ <oneOrMore>
+ <ref name="graphic"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="mediaobject"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="tgroup"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="table.attlist">
+ <ref name="table.att"/>
+ <optional>
+ <attribute name="frame">
+ <choice>
+ <value>top</value>
+ <value>bottom</value>
+ <value>topbot</value>
+ <value>all</value>
+ <value>sides</value>
+ <value>none</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rowsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="informaltable">
+ <element name="informaltable">
+ <ref name="informaltable.attlist"/>
+ <choice>
+ <oneOrMore>
+ <ref name="graphic"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="mediaobject"/>
+ </oneOrMore>
+ <oneOrMore>
+ <ref name="tgroup"/>
+ </oneOrMore>
+ </choice>
+ </element>
+ </define>
+ <define name="informaltable.attlist">
+ <ref name="table.att"/>
+ <optional>
+ <attribute name="frame">
+ <choice>
+ <value>top</value>
+ <value>bottom</value>
+ <value>topbot</value>
+ <value>all</value>
+ <value>sides</value>
+ <value>none</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rowsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="tgroup">
+ <element name="tgroup">
+ <ref name="tgroup.attlist"/>
+ <zeroOrMore>
+ <ref name="colspec"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="thead"/>
+ </optional>
+ <ref name="tbody"/>
+ </element>
+ </define>
+ <define name="tgroup.attlist">
+ <ref name="tgroup.att"/>
+ <attribute name="cols">
+ <data type="integer"/>
+ </attribute>
+ <optional>
+ <attribute name="colsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rowsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="align">
+ <choice>
+ <value>left</value>
+ <value>right</value>
+ <value>center</value>
+ <value>justify</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="colspec">
+ <element name="colspec">
+ <ref name="colspec.attlist"/>
+ </element>
+ </define>
+ <define name="colspec.attlist">
+ <ref name="colspec.att"/>
+ <optional>
+ <attribute name="colnum">
+ <data type="integer"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colname">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colwidth">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rowsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="align">
+ <choice>
+ <value>left</value>
+ <value>right</value>
+ <value>center</value>
+ <value>justify</value>
+ <value>char</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="char">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="charoff">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="thead">
+ <element name="thead">
+ <ref name="thead.attlist"/>
+ <oneOrMore>
+ <ref name="row"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="thead.attlist">
+ <ref name="thead.att"/>
+ <optional>
+ <attribute name="valign">
+ <choice>
+ <value>top</value>
+ <value>middle</value>
+ <value>bottom</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="tbody">
+ <element name="tbody">
+ <ref name="tbody.attlist"/>
+ <oneOrMore>
+ <ref name="row"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="tbody.attlist">
+ <ref name="tbody.att"/>
+ <optional>
+ <attribute name="valign">
+ <choice>
+ <value>top</value>
+ <value>middle</value>
+ <value>bottom</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="row">
+ <element name="row">
+ <ref name="row.attlist"/>
+ <oneOrMore>
+ <ref name="entry"/>
+ </oneOrMore>
+ </element>
+ </define>
+ <define name="row.attlist">
+ <ref name="row.att"/>
+ <optional>
+ <attribute name="rowsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="valign">
+ <choice>
+ <value>top</value>
+ <value>middle</value>
+ <value>bottom</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="entry">
+ <element name="entry">
+ <ref name="entry.attlist"/>
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <ref name="para.char.mix"/>
+ <ref name="tabentry.mix"/>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ </element>
+ </define>
+ <define name="entry.attlist">
+ <ref name="entry.att"/>
+ <optional>
+ <attribute name="colname">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="namest">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="nameend">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="morerows">
+ <data type="integer"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rowsep">
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="align">
+ <choice>
+ <value>left</value>
+ <value>right</value>
+ <value>center</value>
+ <value>justify</value>
+ <value>char</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="char">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="charoff">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="valign">
+ <choice>
+ <value>top</value>
+ <value>middle</value>
+ <value>bottom</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+</grammar>
diff --git a/test/relaxng/docbook_0.xml b/test/relaxng/docbook_0.xml
new file mode 100644
index 0000000..6fe6253
--- /dev/null
+++ b/test/relaxng/docbook_0.xml
@@ -0,0 +1,4448 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "../dtd/4.1.2/docbookx.dtd" [
+<!ENTITY version "1.0.53">
+<!ENTITY mdash "--">
+<!ENTITY hellip "...">
+ <!-- replace version above with actual application version number-->
+ <!-- Template Version: 1.0.1 (do not remove this line) -->
+
+
+
+<!ENTITY APPLET-TEMPLATE-1x-SHELL SYSTEM
+"templates/applet_template_1-applet.sgml.cdata">
+<!ENTITY APPLET-TEMPLATE-1x SYSTEM
+"templates/applet_template_1.sgml.cdata">
+]>
+
+<!-- Version: 1.0.1 -->
+
+<article id="index">
+ <articleinfo>
+
+ <authorgroup>
+
+ <author>
+ <firstname>David</firstname>
+ <surname>Mason</surname>
+ <affiliation>
+ <orgname>Red Hat, Inc.</orgname>
+ <address>
+ <email>dcm@redhat.com</email>
+ </address>
+ </affiliation>
+ </author>
+
+ <author>
+ <firstname>Daniel</firstname>
+ <surname>Mueth</surname>
+ <affiliation>
+ <address>
+ <email>d-mueth@uchicago.edu</email>
+ </address>
+ </affiliation>
+ </author>
+
+ <author>
+ <firstname>Alexander</firstname>
+ <surname>Kirillov</surname>
+ <affiliation>
+ <address>
+ <email>kirillov@math.sunysb.edu</email>
+ </address>
+ </affiliation>
+ </author>
+
+ </authorgroup>
+
+ <releaseinfo>
+ This is a pre-release!
+ </releaseinfo>
+
+ <revhistory>
+ <revision>
+ <revnumber>
+ 0.99
+ </revnumber>
+ <date>
+ 04.10.2000
+ </date>
+ </revision>
+ </revhistory>
+
+ <copyright>
+ <year>2000</year>
+ <holder>Red Hat, Inc., Daniel Mueth, and Alexander Kirillov</holder>
+ </copyright>
+
+ <legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the <citetitle>GNU Free Documentation
+ License</citetitle>, Version 1.1 or any later version published
+ by the Free Software Foundation with no Invariant Sections, no
+ Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy
+ of the <citetitle>GNU Free Documentation License</citetitle> from
+ the Free Software Foundation by visiting <ulink type="http"
+ url="http://www.fsf.org">their Web site</ulink> or by writing to:
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ </para>
+ <para>
+ Many of the names used by companies to distinguish their products and
+ services are claimed as trademarks. Where those names appear in any
+ GNOME documentation, and those trademarks are made aware to the members
+ of the GNOME Documentation Project, the names have been printed in caps
+ or initial caps.
+ </para>
+ </legalnotice>
+
+ <title>The GNOME Handbook of Writing Software Documentation</title>
+
+ </articleinfo>
+
+ <!-- ################# Introduction ############### -->
+
+ <sect1 id="intro">
+ <title>Introduction</title>
+
+ <!-- ####### Introduction | The GNOME Documentation Project ####### -->
+
+ <sect2 id="gdp">
+ <title>The GNOME Documentation Project</title>
+
+ <sect3 id="goals">
+ <title>Goals</title>
+ <para>
+ The GNOME Documentation Project (GDP) aims to provide GNOME
+ and GNOME applications with a complete, intuitive, and clear
+ documentation system. At the center of the GDP is the
+ <application>GNOME Help Browser</application>, which
+ presents a unified interface to GNOME-specific documentation
+ as well as other Linux documentation such as man pages and
+ texinfo documents. The GNOME Help System provides a
+ comprehensive view of documentation on a machine by
+ dynamically assembling the documentation of GNOME
+ applications and components which are installed. The GDP is
+ responsible for writing numerous GNOME-related documents,
+ both for developers and for users. Developer documentation
+ includes <ulink url="http://developer.gnome.org/doc/API/"
+ type="http">APIs for the GNOME libraries</ulink>, <ulink
+ url="http://developer.gnome.org/doc/whitepapers/"
+ type="http"><citetitle>GNOME White
+ Papers</citetitle></ulink>, GNOME developer <ulink
+ url="http://developer.gnome.org/doc/tutorials/"
+ type="http">tutorials</ulink>, the <ulink
+ url="http://developer.gnome.org/doc/FAQ/"
+ type="http"><citetitle>GNOME Developer
+ FAQ</citetitle></ulink>, the <ulink
+ url="http://developer.gnome.org" type="http">GNOME
+ Developer's Website</ulink>, and <citetitle>GNOME
+ Handbook</citetitle>'s, such as the one you are reading.
+ User documentation include the <ulink
+ url="http://www.gnome.org/learn/"
+ type="http"><citetitle>GNOME User's
+ Guide</citetitle></ulink>, the <ulink
+ url="http://www.gnome.org/learn/"
+ type="http"><citetitle>GNOME FAQ</citetitle></ulink>, and
+ GNOME application documentation. Most GNOME applications
+ have their own manual in addition to context sensitive help.
+ </para>
+ </sect3>
+
+ <sect3 id="joining">
+ <title>Joining the GDP</title>
+ <para>
+ Documenting GNOME and all the numerous GNOME applications is
+ a very large project. The GDP is always looking for people
+ to help write, update, and edit documentation. If you are
+ interested in joining the GDP team, you should join the
+ <ulink url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
+ <citetitle>gnome-doc-list mailing list</citetitle> </ulink>.
+ Read <xref linkend="gettingstarted" />, for help selecting a
+ project to work on. Feel free to introduce yourself on the
+ gnome-doc-list mailing list and indicate which project you
+ intend to work on, or else ask for suggestions of important
+ documents which need work done. You may also want to join the
+ #docs IRC channel on irc.gnome.org to meet other GDP members
+ and discuss any questions you may have. For a list of GDP
+ projects and members, see the
+ <ulink url="http://developer.gnome.org/projects/gdp">
+ <citetitle>GDP Website</citetitle></ulink>.
+ </para>
+ </sect3>
+
+ <sect3 id="collaborating">
+ <title>Collaborating with the GDP</title>
+ <para>
+ GNOME developers, packagers, and translators may not be
+ writing GNOME documentation but will want to understand how
+ the GNOME documentation system works and will need to
+ collaborate with GDP members. This document should help to
+ outline the structure of how the GNOME documentation system
+ works. Developers who do not write the documentation for
+ their applications are encouraged to find a GDP member to
+ write the documentation. This is best done by sending an
+ email to the <ulink
+ url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
+ <citetitle>gnome-doc-list mailing list</citetitle> </ulink>
+ describing the application, where it can be downloaded from,
+ and that the developer(s) would like a GDP member to write
+ documentation for the application. The #docs IRC channel on
+ irc.gnome.org is another option for contacting GDP members.
+ </para>
+ </sect3>
+ </sect2>
+
+ <!-- ####### Introduction | Notation and Conventions ####### -->
+
+ <sect2 id="notation">
+ <title>Notation and Conventions</title>
+ <para>
+ This Handbook uses the following notation:
+ <informaltable frame="none">
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry>
+ <filename class="directory">/usr/bin</filename>
+ </entry>
+ <entry>
+ Directory
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <filename>foo.sgml</filename>
+ </entry>
+ <entry>
+ Filename
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <command>command</command>
+ </entry>
+ <entry>
+ Command or text that would be typed.
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <command><replaceable>replaceable</replaceable></command>
+ </entry>
+ <entry>
+ "Variable" text that can be replaced.
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <literal>Program or Doc Code</literal>
+ </entry>
+ <entry>Program or document code</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </para>
+ </sect2>
+
+ <!-- ####### Introduction | About This Handbook ####### -->
+
+ <sect2 id="about">
+ <title>About This Handbook</title>
+ <para>
+ This Handbook is a guide for both writing documentation for
+ GNOME components and applications and for properly binding and
+ packaging documentation into GNOME applications.
+ </para>
+ <para>
+ This Handbook, like all GNOME documentation, was written in
+ DocBook(SGML) and is available in several formats including
+ SGML, HTML, PostScript, and PDF. For the latest version, see
+ <ulink
+ url="http://developer.gnome.org/projects/gdp/handbook.html">
+ <citetitle>Getting The GNOME Handbook of Writing Software
+ Documentation</citetitle> </ulink>. Alternately, one may
+ download it anonymously from GNOME CVS under <filename
+ class="directory">gnome-docu/gdp</filename>.
+ </para>
+ </sect2>
+ </sect1>
+
+<!-- ################# Getting Started ############### -->
+
+ <sect1 id="gettingstarted">
+ <title>Getting Started Writing GNOME Documentation</title>
+
+<!--####### Getting Started | Selecting A Document ####### -->
+
+ <sect2 id="selecting">
+ <title>Selecting A Document</title>
+
+ <sect3 id="know">
+ <title>Document Something You Know</title>
+ <para>
+ The most frequently asked question of new contributors who
+ join the GDP is "which document should I start
+ with?". Because most people involved are volunteers, we do
+ not <emphasis>assign</emphasis> projects and applications to
+ write documents for. The first step is all yours - you must
+ decide what about GNOME interests you most and find out if
+ it has complete documents or not.
+ </para>
+ <para>
+ It is also important to spend some time with GNOME to make
+ sure you are familiar enough with it to be
+ <emphasis>authoritative</emphasis> in your writing. The
+ best way to do this is to just sit down and play with GNOME
+ as much as possible before starting to write.
+ </para>
+ <para>
+ The easiest way to get started is to improve existing
+ documentation. If you notice some inaccuracies or omissions
+ in the documentation, or you think that you can explain the
+ material more clearly, just send your suggestions to the
+ author of the original documentation or to the GNOME
+ documentation project at <email>docs@gnome.org</email>.
+ </para>
+ </sect3>
+
+ <sect3 id="doctable">
+ <title>The GNOME Documentation Status Table</title>
+ <para>
+ The <citetitle>GDP Documentation Status Table</citetitle>
+ (<citetitle>DocTable</citetitle>) (<ulink
+ url="http://www.gnome.org/gdp/doctable/"
+ type="http">http://www.gnome.org/gdp/doctable/</ulink>) is a
+ web page which tracks the status of all the various
+ documentation components of GNOME. These components include
+ application documentation, internal GNOME component
+ documentation, user documentation, and developer
+ documentation. For each documentation item, it tracks the
+ current status of the documentation, who is working on the
+ particular document, where the documentation can be found,
+ and provides a forum for the discussion of each item.
+ </para>
+ <para>
+ You should use the <citetitle>DocTable</citetitle> to help
+ you select a documentation item which needs work done. Once
+ you have selected an item to work on, please register
+ yourself as an author so that other authors do not duplicate
+ your work and may contact you to help or offer suggestions.
+ Also be sure to keep the status icons up-to-date so that
+ the GDP team can easily identify which items need additional
+ help. The <citetitle>DocTable</citetitle> also allows
+ people to make announcements and suggestions and to discuss
+ issues in the comments section.
+ </para>
+ <note>
+ <title>Note</title>
+ <para>
+ Note that the information in the
+ <citetitle>DocTable</citetitle> may not always be up-to-date
+ or accurate. When you assign yourself to documenting an
+ application, make sure you find out the latest status of
+ documentation by contacting the application author.
+ </para>
+ </note>
+ </sect3>
+ </sect2>
+
+<!-- ####### Getting Started | Installing And Using DocBook ####### -->
+
+ <sect2 id="docbook">
+ <title>Installing and Using DocBook</title>
+ <para>
+ All documentation for the GNOME project is written in SGML
+ using the DocBook DTD. There are many advantages to using
+ this for documentation, not least of which is the single
+ source nature of SGML. To contribute to the GDP you should
+ learn to use DocBook.
+ </para>
+ <note>
+ <title>NOTE</title>
+ <para>
+ To get started writing for the GDP you do not need to rush
+ out and learn DocBook - if you feel it is too much to handle
+ for now, you can submit plain ASCII text to the <ulink
+ url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
+ <citetitle>gnome-doc-list mailing list</citetitle>
+ </ulink>and a volunteer will mark it up for you. Seeing your
+ document marked up will also be a great way for you to start
+ learning DocBook.
+ </para>
+ </note>
+ <sect3 id="installingdocbook">
+ <title>Installing DocBook</title>
+ <para>
+ Download and install the following <ulink
+ url="ftp://sourceware.cygnus.com:/pub/docbook-tools/"
+ type="ftp">DocBook Tools packages</ulink>: jade, docbook,
+ jadetex, sgml-common, and stylesheets. (RPM users should note
+ that jade is platform dependent (eg. i386), while the other packages
+ are in the <filename class="directory">noarch</filename>
+ directory.) You can find more
+ information on DocBook Tools <ulink url="
+ http://sourceware.cygnus.com/docbook-tools/"
+ type="http">here</ulink>.
+ </para>
+ <para>
+ If you are an <application>Emacs</application> user you may
+ want to grab the psgml package as well. This is a major mode
+ for editing sgml files in <application>Emacs</application>.
+ </para>
+ </sect3>
+
+ <sect3 id="gdpstylesheets">
+ <title>GDP Stylesheets</title>
+ <para>
+ The GDP uses its own DocBook stylesheets. To use the GDP
+ stylesheets, you should download the file
+ <filename>gdp-both.dsl</filename> from the <filename
+ class="directory">gnome-docu/gdp/dsssl</filename> module in
+ CVS (or from <ulink
+ url="http://developer.gnome.org/projects/gdp/stylesheets.html">
+ GDP Custom DSSSL Stylesheet</ulink>)and copy it
+<!-- into <filename
+ class="directory">/usr/lib/sgml/stylesheets</filename>. You
+ will need to point DocBook Tools to this stylesheet with the
+ <command><option>-d</option></command> option:
+ <command>db2html -d /usr/lib/sgml/stylesheets/gdp-both.dsl
+ <replaceable>foo.sgml</replaceable></command>. (Creating an
+ alias to include this option and path is convenient.)
+ Alternately, you could overwrite
+ <filename>/usr/lib/sgml/stylesheets/cygnus-both.dsl</filename>
+ with <filename>gdp-both.dsl</filename>.
+-->
+ over the file
+ <filename>/usr/lib/sgml/stylesheets/cygnus-both.dsl</filename>.
+ Alternately, you can download and install the
+ <ulink url="http://people.redhat.com/dcm/software.html"
+ type="http">gnome-doc-tools package</ulink> which will set
+ up the stylesheets as well as the DTD discussed below.
+ </para>
+
+<!-- <note>
+ <para>
+ The current version of the DocBook Tools command
+ <command>db2ps</command> does not have a
+ <command><option>-d</option></command> option. In order to
+ create PostScript output, you must overwrite
+ <filename>/usr/lib/sgml/stylesheets/cygnus-both.dsl</filename>
+ with <filename>gdp-both.dsl</filename>.
+ </para>
+ </note>
+-->
+ </sect3>
+
+ <sect3 id="gdpdtd">
+ <title>GDP DTD (PNG Image Support)</title>
+ <para>
+ Due to some license issues involved with the creation of
+ gifs, the GNOME Documentation Project has decided to use the
+ PNG image format for all images in GNOME documentation. You
+ can read more about the issues involved with gifs at <ulink
+ url="http://www.gnu.org/philosophy/gif.html"
+ type="http">http://www.gnu.org/philosophy/gif.html</ulink>.
+ </para>
+ <para>
+ The current DocBook DTD(3.1) does not include support for
+ embedding PNG images in your documents. Since the GDP uses
+ many screenshots in its documentation, we use our own
+ variation on the DocBook DTD which has PNG image support.
+ We encourage everybody to use this DTD instead of the
+ default DocBook DTD since your source document header and
+ your output document appearance subtly vary between the two
+ DTD's. To install the GDP custom DTD with PNG image support
+ by hand:
+ </para>
+ <itemizedlist mark="opencircle">
+ <listitem>
+ <para>
+ Download <ulink
+ url="http://www.labs.redhat.com/png/png-support.html">the
+ GDP DocBook DTD for PNG support</ulink> and install it
+ where you keep your DTD's. (On Red Hat use <filename
+ class="directory">/usr/lib/sgml/</filename>.) Note that
+ the 3.0 DTD is missing support for the
+ <sgmltag>&lt;legalnotice></sgmltag> tag, so it is
+ recommended that you use version 3.1
+ </para>
+ </listitem>
+ <listitem override="bullet">
+ <para>
+ Add the new DTD to your SGML CATALOG file. The location
+ of your SGML CATALOG file may vary depending upon your
+ distribution. (On Red Hat it is usually in
+ /usr/lib/sgml/CATALOG.) Add the following line to this
+ file:
+ <programlisting>
+PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.0//EN" "png-support-3.0.dtd"
+ </programlisting>
+ If you are using the 3.1 DTD, use:
+ <programlisting>
+PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN" "png-support-3.1.dtd"
+ </programlisting>
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ Alternately, you can download and install the
+ <ulink url="http://people.redhat.com/dcm/software.html"
+ type="http">gnome-doc-tools package</ulink> which will set
+ up the custom stylesheets and DTD for you.
+ </para>
+ <para>
+ To include PNG files in your documents, you will need to
+ indicate that you are using this special DTD. To do
+ this, use the following headers:
+ </para>
+ <para>
+ Articles:
+ <programlisting>
+<![CDATA[<!DOCTYPE Article PUBLIC "-//GNOME//DTD DocBook PNG Variant
+V1.1//EN"[]>]]>
+ </programlisting>
+ </para>
+ <para>
+ Books:
+ <programlisting>
+<![CDATA[<!DOCTYPE Book PUBLIC "-//GNOME//DTD DocBook PNG Variant
+V1.1//EN"[]>]]>
+ </programlisting>
+ </para>
+
+ </sect3>
+
+ <sect3 id="editors">
+ <title>Editors</title>
+ <para>
+ There are many editors on Linux and UNIX systems available
+ to you. Which editor you use to work on the sgml documents
+ is completely up to you, as long as the editor is able to
+ preserve sgml and produce the source in a format that is
+ readable by everyone.
+ </para>
+ <para>
+ Probably the two most popular editors available are
+ <application>Emacs</application> and
+ <application>vi</application>. These and other editors are
+ used regularly by members of the GDP. Emacs has a major
+ mode, psgml, for editing sgml files which can save you time
+ and effort in adding and closing tags. You will find the
+ psgml package in DocBook Tools, which is the standard set of
+ tools for the GDP. You may find out more about DocBook Tools
+ in <xref linkend="installingdocbook" />.
+ </para>
+ </sect3>
+
+ <sect3 id="make-output">
+ <title>Creating Something Useful with your Docs</title>
+ <para>
+ The tools available in DocBook Tools allow you to convert
+ your sgml document to many different formats including html
+ and Postscript. The primary tool used to do the conversion
+ is an application called <application>Jade</application>. In
+ most cases you will not have to work directly with
+ <application>Jade</application>; Instead, you will use the
+ scripts provided by DocBook Tools.
+ </para>
+ <para>
+ To preview your DocBook document, it is easiest to convert
+ it to <filename>html</filename>. If you have installed the
+ DocBook tools described above, all you have to do is to run
+ the command <prompt>$</prompt><command>db2html
+ mydocument.sgml</command>. If there are no sgml syntax
+ errors, this will create a directory <filename
+ class="directory">mydocument</filename> and place the
+ resulting html files in it. The title page of the document
+ will typically be
+ <filename>mydocument/index.html</filename>. If you have
+ screenshots in your document, you will have to copy these
+ files into the <filename
+ class="directory">mydocument</filename> directory by
+ hand. You can use any web browser to view your document.
+ Note that every time you run <command>db2html</command>, it
+ creates the <filename
+ class="directory">mydocument</filename> directory over, so
+ you will have to copy the screenshots over each time.
+ </para>
+ <para>
+ You can also convert your document to PostScript by running
+ the command <prompt>$</prompt><command>db2ps
+ mydocument.sgml</command>, after which you can print out or
+ view the resulting .ps file.
+ </para>
+ <note>
+ <title>NOTE</title>
+ <para>
+ The html files you get will not look quite the same as the
+ documentation distributed with GNOME unless you have the
+ custom stylesheets installed on your machine. DocBook
+ Tools' default stylesheets will produce a different look
+ to your docs. You can read more about the GDP stylesheets
+ in <xref linkend="gdpstylesheets" />.
+ </para>
+ </note>
+ </sect3>
+
+ <sect3 id="jadeimages">
+ <title>Images in DocBook Tools</title>
+ <para>
+ If your document uses images you will need to take note of a
+ few things that should take place in order for you to make
+ use of those images in your output.
+ </para>
+ <para>
+ The DocBook Tools scripts and applications are smart enough
+ to know that when you are creating html you will be using
+ PNG files and when you are creating Postscript you will be
+ using EPS files (you must use EPS with Postscript).
+ </para>
+ <para>
+ Thus, you should never explicitly
+ include the extension of the image file, since DocBook
+ Tools will automatically insert it for you. For example:
+ </para>
+ <programlisting>
+<![CDATA[
+<figure>
+ <title>My Image</title>
+ <screenshot>
+ <screeninfo>Sample GNOME Display</screeninfo>
+ <graphic format="png" fileref="myfile" srccredit="me">
+ </graphic>
+ </screenshot>
+</figure>
+]]> </programlisting>
+ <para>
+ You will notice in this example that the file
+ <filename>myfile.png</filename> was referred to as simply
+ <filename>myfile</filename>. Now when you run
+ <command>db2html</command> to create an html file, it will
+ automatically look for <filename>myfile.png</filename> in
+ the directory.
+ </para>
+ <para>
+ If you want to create PostScript ouput, you will need to create an
+ EPS version of your image file to be displayed in the
+ PostScript file. There is a simple script available which
+ allows you to change a PNG image into an EPS file
+ easily. You can download this file - img2eps - from <ulink
+ url="http://people.redhat.com/dcm/sgml.html"
+ type="html">http://people.redhat.com/dcm/sgml.html</ulink>
+ (look for the img2eps section). Note that this script is
+ included in the gnome-doc-tools package, so if you are using
+ this package, you should already have
+ <command>img2eps</command> on you system.
+ </para>
+ </sect3>
+
+ <sect3 id="moredocbookinfo">
+ <title>Learning DocBook</title>
+ <para>
+ There are many resources available to help you learn DocBook.
+ The following resources on the web are useful for learning
+ DocBook:
+ </para>
+ <itemizedlist mark="bullet">
+ <listitem>
+ <para>
+ <ulink url="http://www.docbook.org"
+ type="http">http://www.docbook.org</ulink> - Norman
+ Walsh's <citetitle>DocBook: The Definitive
+ Guide</citetitle>. Online O'Reilly book on using
+ DocBook. Contains an excellent element reference. May be
+ too formal for a beginner.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ulink
+ url="http://www.oswg.org/oswg-nightly/oswg/en_US.ISO_8859-1/articles/DocBook-Intro/docbook-intro/index.html"
+ type="http">A Practical Introduction to DocBook</ulink>
+ - The Open Source Writers Group's introduction to using
+ DocBook. This is an excellent HOW-TO type article on
+ getting started.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ulink
+ url="http://nis-www.lanl.gov/~rosalia/mydocs/docbook-intro/docbook-intro.html"
+ type="http">Getting Going with DocBook: Notes for
+ Hackers</ulink> - Mark Galassi's introduction to DocBook
+ for hackers. This has to be one of the first
+ introductions to DocBook ever - still as good as it ever
+ was.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ulink type="http" url="http://www.freebsd.org/tutorials/docproj-primer/">
+ FreeBSD Documentation Project Primer for New
+ Contributors</ulink> - FreeBSD documentation project
+ primer. Chapter 4.2 provides a very good introduction to
+ writing documentation using DocBook. Note that it also
+ describes some custom extensions of DocBook;
+ fortunately, they are clearly marked as such.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ Norman Walsh's book is also available in print.
+ </para>
+ <para>
+ The following sections of this document are designed to help
+ documentation authors write correct and consistent DocBook:
+ </para>
+ <itemizedlist mark="bullet">
+ <listitem>
+ <para>
+ <xref linkend="docbookbasics" /> - Descriptions of
+ commonly used DocBook tags.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ You may also discuss specific DocBook questions with GDP
+ members on the #docs IRC channel at irc.gnome.org and on the
+ gnome-doc-list mailing list.
+ </para>
+ </sect3>
+ </sect2>
+
+<!-- ####### Getting Started | GDP Document Examples ####### -->
+<!--
+ <sect2 id="examples">
+ <title>GDP Document Examples</title>
+ <para>
+ Examples of various types of GNOME documents are found in
+ <xref linkend="examples" />. There is also an example GNOME
+ application with documentation called
+ <application>gnome-hello</application> in GNOME cvs.
+ </para>
+ </sect2>
+-->
+<!-- ####### Getting Started | GDP Document Templates ####### -->
+
+ <sect2 id="gdptemplates">
+ <title>GDP Document Templates</title>
+ <para>
+ Templates for various types of GNOME documents are found in
+ <xref linkend="templates" />. They are kept in CVS in
+ gnome-docu/gdp/templates. The easiest source to get them from
+ is probably the <ulink
+ url="http://developer.gnome.org/projects/gdp/templates.html"
+ type="http">GDP
+ Document Templates</ulink> web page, which is typically kept
+ completely up-to-date with CVS and has a basic description of
+ each file from CVS.
+ </para>
+ </sect2>
+
+<!-- ####### Getting Started | Screenshots ####### -->
+
+ <sect2 id="screenshots">
+ <title>Screenshots</title>
+ <para>
+ Most GNOME documents will have screenshots of the particular
+ applet, application, GNOME component, or widget being
+ discussed. As discussed above in <xref linkend="gdpdtd"/> you
+ will need to install the special GDP DocBook DTD which
+ supports PNG images, the format used for all images in GNOME
+ documentation. For the basic DocBook structure used to insert
+ images in a document, see <xref linkend="jadeimages"/> above.
+ </para>
+ <sect3 id="screenshotappearance">
+ <title>Screenshot Appearance</title>
+ <para>
+ For all screenshots of windows that typically have border
+ decorations (e.g. applications and dialogs, but not applets
+ in a <interface>panel</interface>), GDP standards dictate
+ the appearance of the window. (This is to minimize possible
+ confusion to the reader, improve the appearance of GNOME
+ documents, and guarantee the screenshot is readable when
+ printed.) All screenshots should be taken with the SawFish
+ (formerly known as Sawmill) window manager using the
+ MicroGui theme and Helvetica 12pt font. (A different window
+ manager can be used provided the MicroGui theme is available
+ for this window manager and the appearance is identical to
+ that when using the SawFish window manager.) The default
+ GTK+ theme(gtk) and font (Helvetica 12 pt) should be used
+ for all screenshots. If you are unable to provide
+ screenshots in this form, you should create screenshots as
+ you wish them to appear and send them to the
+ <ulink url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
+ <citetitle>gnome-doc-list mailing list</citetitle> </ulink>
+ requesting a GDP member reproduce these screenshots in the
+ correct format and email them to you.
+ </para>
+ </sect3>
+ <sect3 id="screenshottools">
+ <title>Screenshot Tools</title>
+ <para>
+ There are many tools for taking screenshots in
+ GNOME/Linux. Perhaps the most convenient is the
+ <application>Screen-Shooter Applet</application>. Just click
+ on the window icon in the applet and then on the window you
+ would like to take a screenshot of. (Note that
+ at the time of this writing, PNG images taken by
+ screenshooter do not appear properly in
+ <application>Netscape</application> or the
+ <application>GNOME Help Browser</application>. You
+ should save your screenshot as a GIF and
+ then use <command>convert filename.gif
+ filename.png</command>.) For applets
+ in a <interface>Panel</interface>,
+ <application>xv</application> can be used to crop the
+ screenshot to only include the relevant portion of the
+ <interface>Panel</interface>. Note that
+ <application>xv</application> and
+ <application>gimp</application> can both be used for taking
+ screenshots, cropping screenshots, and converting image
+ formats.
+ </para>
+ </sect3>
+ <sect3 id="screenshotfiles">
+ <title>Screenshot Files</title>
+ <para>
+ Screenshots should be kept in the main documentation
+ directory with your SGML file for applets, or should be
+ kept in a directory called "figs" for application and other
+ documentation. After you use <command>db2html</command> to
+ convert your SGML file to HTML (see <xref
+ linkend="make-output"/>), you will need to copy your
+ screenshots (either the individual PNG files for applet
+ documentation, or the whole "figs" directory for other
+ documentation) into the newly created HTML directory. Note
+ that every time you use <command>db2html</command> the HTML
+ directory is erased and rewritten, so do not store your only
+ copy of the screenshots in that directory. If you wish to
+ create PostScript or PDF output, you will need to manually
+ convert the PNG images to EPS as described in <xref
+ linkend="jadeimages"/>, but will not need to copy these
+ images from their default location, as they are included
+ directly into the output(PostScript of PDF) file.
+ </para>
+ </sect3>
+ </sect2>
+
+
+<!-- ####### Getting Started | Application Bugs ####### -->
+
+ <sect2 id="applicationbugs">
+ <title>Application Bugs</title>
+ <para>
+ Documentation authors tend to investigate and test applets and
+ applications more thoroughly than most
+ users. Often documentation authors will discover one or
+ more bugs in the software. These bugs vary from small ones,
+ such as mis-spelled words or missing
+ <interface>About</interface> dialogs in the menu, to large
+ ones which cause the applet to crash. As all users, you
+ should be sure to report these bugs so that application
+ developers know of them and can fix them. The easiest way to
+ submit a bug report is by using the <application>Bug
+ Buddy</application> applet which is part of the gnome-applets
+ package.
+ </para>
+ </sect2>
+
+
+<!-- ####### Getting Started | Using CVS ####### -->
+
+ <sect2 id="cvs">
+ <title>Using CVS</title>
+ <para>
+ CVS (Concurrent Versions System) is a tool that allows
+ multiple developers to concurrently work on a set of
+ documents, keeping track of the modifications made by each
+ person. The files are stored on a server and each developer
+ checks files out, modifies them, and then checks in their
+ modified version of the files. Many GNOME programs and
+ documents are stored in CVS. The GNOME CVS server allows
+ users to anonymously check out CVS files. Most GDP members
+ will need to use anonymous CVS to download the most up-to-date
+ version of documentation or programs. Modified documents will
+ typically be emailed to the the application developer. Core
+ GDP members may also be granted login CVS privileges so they
+ may commit modified files directly to CVS.
+ </para>
+
+ <sect3 id="anonymouscvs">
+ <title>Anonymous CVS</title>
+ <para>
+ To anonymously check out documents from CVS, you must first
+ log in. From the bash shell, you should set your CVSROOT
+ shell variable with <command> export
+ CVSROOT=':pserver:anonymous@anoncvs.gnome.org:/cvs/gnome'</command>
+ and then login with <command>cvs login</command>(there is no
+ password, just hit return). As an example, we will use the
+ "gnome-docu/gdp" module which contains this and several
+ other documents. To check these documents out for the first
+ time, type <command>cvs -z3 checkout
+ gnome-docu/gdp</command>. After you have this document
+ checked out and you would like to download any updates on
+ the CVS server, use <command>cvs -z3 update -Pd</command>.
+ </para>
+ </sect3>
+
+ <sect3 id="logincvs">
+ <title>Login CVS</title> <para> If you have been given a
+ login for the GNOME CVS server, you may commit your file
+ modifications to CVS. Be sure to read the following section
+ on CVS etiquette before making any commits to CVS. To log in
+ to the CVS server as user
+ <command><replaceable>username</replaceable></command> with a
+ password, you must first set your CVSROOT shell variable with
+ <command> export
+ CVSROOT=':pserver:<replaceable>username</replaceable>@cvs.gnome.org:/cvs/gnome'</command>.
+ Log in with <command>cvs login</command> and enter your
+ password. You may check out and update modules as described
+ above for anonymous CVS access. As a login CVS user, you may
+ also check modified versions of a file into the CVS server.
+ To check
+ <command><replaceable>filename</replaceable></command> into
+ the CVS server, type <command>cvs -z3 commit
+ <replaceable>filename</replaceable></command>. You will be
+ given a vi editor window to type in a brief log entry,
+ summarizing your changes. The default editor can be changed
+ using the <varname>EDITOR</varname> environment variable or
+ with the <command><option>-e</option></command> option. You
+ may also check in any modifications to files in the working
+ directory and subdirectories using <command>cvs -z3
+ commit</command>. To
+ add a new file to the CVS server, use <command>cvs -z3 add
+ <replaceable>filename</replaceable></command>, followed by the
+ commit command.
+ </para>
+ </sect3>
+
+ <sect3 id="cvsetiquette">
+ <title>CVS Etiquette</title>
+ <para>
+ Because files in CVS are typically used and modified by
+ multiple developers and documentation authors, users should
+ exercise a few simple practices out of courtesy towards the
+ other CVS users and the project leader. First, you should
+ not make CVS commits to a package without first discussing
+ your plans with the project leader. This way, the project
+ leader knows who is modifying the files and generally, what
+ sort of changes/development is being done. Also, whenever a
+ CVS user commits a file to CVS, they should make an entry in
+ the CVS log and in the <filename>ChangeLog</filename> so
+ that other users know who is making modifications and what
+ is being modified. When modifying files created by others,
+ you should follow the indentation scheme used by the initial
+ author.
+ </para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+<!-- ################# The GNOME Documentation System###############
+-->
+
+ <sect1 id="gnomedocsystem">
+ <title>The GNOME Documentation System</title>
+
+<!-- ####### The GNOME Documentation System | The GNOME Help Browser
+####### -->
+
+ <sect2 id="gnomehelpbrowser">
+ <title>The GNOME Help Browser</title>
+ <para>
+ At the core of the GNOME help system is the <application>GNOME
+ Help Browser</application>. The <application>Help
+ Browser</application> provides a unified interface to several
+ distinct documentation systems on Linux/Unix systems: man
+ pages, texinfo pages, Linux Documentation Project(LDP)
+ documents, GNOME application documentation, and other GNOME
+ documents.
+ </para>
+ <para>
+ The <application>GNOME Help Browser</application> works by
+ searching standard directories for documents which are to be
+ presented. Thus, the documentation that appears in the GHB is
+ specific to each computer and will typically only represent
+ software that is installed on the computer.
+ </para>
+ </sect2>
+
+<!-- ####### The GNOME Documentation System | The GNOME Help Browser
+####### -->
+
+ <sect2 id="gnomehelpbrowser2">
+ <title>The GNOME Help Browser (GNOME-2.0)</title> <para> In
+ GNOME 2.0, the <application>GNOME Help Browser</application>
+ will be replaced by <application>Nautilus</application>.
+ Nautilus will be the file manager/graphical shell for GNOME 2.0
+ and will also implement a more sophisticated help system than
+ that used by the <application>GNOME Help Browser</application>
+ used in GNOME 1.0. It will read and display DocBook files
+ directly, avoiding the need for duplicating documents in both
+ DocBook and HTML formats. Its display engine for DocBook will
+ be much faster than running <application>jade</application> to
+ convert to HTML for rendering. Because it uses the original
+ DocBook source for documentation, it will be possible to do more
+ sophisticated searching using the meta information included in
+ the documents. And since Nautilus is a virtual file system
+ layer which is Internet-capable, it will be able to find and
+ display documents which are on the web as well as those on the
+ local file system. For more information on
+ <application>Nautilus</application>, visit the #nautilus IRC
+ channel on irc.gnome.org. </para>
+ </sect2>
+
+<!-- ####### The GNOME Documentation System | GNOME On-The-Fly
+Documentation Generation ####### -->
+
+ <sect2 id="gnomehelponthefly">
+ <title>Dynamic Document Synthesis(GNOME-2.0)</title>
+ <para>
+ GNOME uses the documentation presented by all the various
+ GNOME components and applications installed on the system to
+ present a complete and customized documentation environment
+ describing only components which are currently installed on a
+ users system. Some of this documentation, such as the manuals
+ for applets, will be combined in such a way that it appears to
+ be a single document.
+ </para>
+ <para>
+ By using such a system, you can be sure that any GNOME app you
+ install that has documentation will show up in the index,
+ table of contents, any search you do in the help browser.
+ </para>
+ </sect2>
+
+<!-- ####### The GNOME Documentation System | The GNOME Documentation
+Components ####### -->
+
+ <sect2 id="gnomehelpcomponents">
+ <title>The GNOME Documentation Components</title>
+
+ <sect3 id="applicationmanualsintro">
+ <title>Application Manuals</title>
+ <para>
+ Every GNOME application should have an application manual.
+ An application manual is a document specific to the
+ particular application which explains the various windows
+ and features of the application. Application Manuals
+ typically use screenshots (PNG format) for clarity. Writing
+ application manuals is discussed in more detail in <xref
+ linkend="writingapplicationmanuals" /> below.
+ </para>
+ </sect3>
+
+ <sect3 id="applicationhelpintro">
+ <title>Application Help</title>
+ <para>
+ Applications should have a <guibutton>Help</guibutton>
+ button on screens on which users may need help. These
+ <guibutton>Help</guibutton> buttons should pull up the
+ default help browser, determined by the
+ <varname>ghelp</varname> URL Handler (configured using the
+ <application>Control Center</application>), typically the
+ <application>GNOME Help Browser</application>. The help
+ browser should show either the first page of the application
+ manual, or else the relevant page thereof. Application help
+ is described in more detail in <xref
+ linkend="applicationhelpbuttons" /> below.
+ </para>
+ </sect3>
+
+ <sect3 id="contextsensitivehelpintro">
+ <title>Application Context Sensitive Help (coming in
+ GNOME-2.0)</title>
+ <para>
+ Context sensitive help is a system which will allow the user
+ to query any part (button, widget, etc.) of an application
+ window. This is done by either entering a CS Help mode by
+ clicking on an icon or by right clicking on the application
+ part and selecting "What's This" or whatever is decided on
+ at the time. Context sensitive help is described in more
+ detail in <xref linkend="writingcontextsensitivehelp" />
+ below.
+ </para>
+ </sect3>
+
+ <sect3 id="userguide">
+ <title>The GNOME User Guide</title>
+ <para>
+ The <citetitle>GNOME User Guide</citetitle> describes the
+ GNOME desktop environment and core components of GNOME such
+ as the <application>panel</application> and
+ <application>control center</application>. In GNOME 1.x this
+ was the main and only source of documentation. In GNOME 2.0
+ this will become a document for the web and for printing
+ that is derived from various parts chosen in the system that
+ are necessary for the new user to understand.
+ </para>
+ </sect3>
+
+ <sect3 id="userdocs">
+ <title>User Documents</title>
+ <para>
+ Aside from the <citetitle>GNOME User Guide</citetitle>,
+ there are several other documents to help GNOME users learn
+ GNOME, including the <citetitle>GNOME FAQ</citetitle>,
+ <citetitle>GNOME Installation and Configuration
+ Guide</citetitle>, and the <citetitle>GNOME Administrators
+ Guide</citetitle>.
+ </para>
+ </sect3>
+
+ <sect3 id="developerdocs">
+ <title>Developer Documents</title>
+ <para>
+ There are many White Papers, Tutorials, HOWTO's and FAQ's to
+ make programming GNOME and GNOME applications as easy as
+ possible.
+ </para>
+ <para>
+ API documentation is also available for the GNOME libraries. This is
+ detailed documentation of the code that is used to build GNOME
+ apps. You can keep up with the GNOME API docs on the <ulink
+ url="http://developer.gnome.org/doc/API/" type="http">GNOME API
+ Reference</ulink> page.
+ </para>
+ </sect3>
+
+ <sect3 id="projectdocs">
+ <title>Project Documents</title>
+ <para>
+ Some GNOME projects have documentation to maintain
+ consistency in their product and to help new contributors
+ get up to speed quickly. Among these are the GDP documents,
+ such as the one you are reading now.
+ </para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+
+<!-- ################# DocBook Basics ############### -->
+
+ <sect1 id="docbookbasics">
+ <title>DocBook Basics </title>
+<!-- ####### DocBook Basics | Introduction to DocBook ####### -->
+
+ <sect2 id="introtodocbook">
+ <title>Introduction to DocBook</title>
+ <para>
+ To understand DocBook, a basic understanding of SGML is
+ helpful. SGML stands for Standard General Markup Language and
+ is one of the first markup languages every created. HTML is
+ actually derived from SGML and XML is a subset of SGML. SGML
+ uses what is called a Document Type Definition to specify
+ <emphasis>elements</emphasis> which are contained between
+ brackets, &lt; and >. Text is marked by both beginning and
+ ending elements, for example in the DocBook DTD, one denotes a
+ title with <sgmltag>&lt;title></sgmltag>The
+ Title<sgmltag>&lt;/title></sgmltag>.
+ </para>
+ <para>
+ The DTD (in the case of the GDP, DocBook) defines rules for how the
+ elements can be used. For example, if one element can only be used when
+ embedded within another, this is defined in the DTD.
+ </para>
+ <para>
+ An SGML file is just a plain ASCII file containing the text
+ with the markup specified above. To convert it to some easily
+ readable format, you need special tools. The GDP uses <emphasis>DocBook
+ Tools</emphasis>, a free package of utilities for working with DocBook
+ which includes <emphasis>Jade</emphasis>, which does the SGML/DSSL
+ parsing. You can read more about DocBook Tools in <xref
+ linkend="installingdocbook" />.
+ </para>
+ <para>
+ The final appearance of the output (e.g. PostScript or HTML)
+ is determined by a
+ <emphasis>stylesheet</emphasis>. Stylesheets are files,
+ written in a special language (DSSSL &mdash; Document Style
+ Semantics and Specification Language), which specify the
+ appearance of various DocBook elements, for example,
+ what fonts to use for titles and various inline elements, page
+ numbering style, and much more. DocBook tools come with a
+ collection of stylesheets (Norman Walsh's modular
+ stylesheets); GNOME Document Project uses some customized
+ version of this stylesheets &mdash; see <xref
+ linkend="gdpstylesheets"/>.
+ </para>
+ <para>
+ The advantage of specifying the <emphasis>structure</emphasis>
+ of a document with SGML instead of specifying the
+ <emphasis>appearance</emphasis> of the document with a typical
+ word processor, or with html, is that the resulting document
+ can be processed in a variety of ways using the structural
+ information. Whereas formatting a document for appearance
+ assumes a medium (typically written text on a standard-sized
+ piece of paper), SGML can be processed to produce output for a
+ large variety of media such as text, postscript, HTML,
+ Braille, audio, and potentially many other formats.
+ </para>
+ <para>
+ Using 'content' as the elements to define the text of a document also
+ allows for search engines to make use of the actual elements to make a
+ "smarter search". For example, if you are searching for all documents
+ written by the author "Susie" your search engine could be made smart
+ enough to only search &lt;author> elements, making for a faster and more
+ accurate search.
+ </para>
+ <para>
+ Since the overall appearance of the output is determined not by the DTD
+ or the SGML document, but rather by a stylesheet, the appearance of a
+ document can be easily changed just by changing the stylesheet. This
+ allows everyone in the project to create documents that all look the
+ same.
+ </para>
+ <para>
+ As stated before, the GDP uses the DocBook DTD. For a list of
+ introductory and reference resources on DocBook, see <xref
+ linkend="resources" />. The following sections also provide
+ convenient instructions on which markup tags to use in various
+ circumstances. Be sure to read <xref linkend="conventions" />
+ for GDP documentation-specific guidelines.
+ </para>
+ </sect2>
+
+ <!-- ###### DocBook Basics | XML and SGML ########-->
+ <sect2 id="xml">
+ <title>XML and SGML</title>
+
+ <para> In not so distant future (probably before GNOME 2.0),
+ DocBook itself and GNOME Documentation project will migrate from
+ SGML to XML. This transition should be relatively painless:
+ (almost) all DocBook tags will remain the same. However, XML has
+ stricter syntax rules than SGML; thus, some constructions which
+ are valid in SGML will not be valid in XML. Therefore, to be
+ ready for this transistion, it is <emphasis>strongly
+ advised</emphasis> that the documentation writers conform to XML
+ syntax rules. Here are most important differences:
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term> <emphasis>Minimization</emphasis></term>
+ <listitem>
+
+ <para>
+ It is possible with some implementations of SGML to use
+ minimizations to close elements in a document by using
+ &lt;/>, for example:
+ <literal><sgmltag>&lt;title></sgmltag>The
+ Title<sgmltag>&lt;/></sgmltag></literal>. This is not
+ allowed in XML. You can use <command>sgmlnorm</command> command,
+ included in DocBook Tools package, to expand minimized tags;
+ if you are using <application>Emacs</application> with psgml
+ mode, you can also use menu command
+ <menuchoice>
+ <guimenu>Modify</guimenu>
+ <guimenuitem>Normalize</guimenuitem>
+ </menuchoice>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term> <emphasis>Self-closing tags</emphasis></term>
+ <listitem>
+
+ <para>
+ Also, in SGML some tags are allowed not to have closing
+ tags. For example, it is legal for
+ <sgmltag>&lt;xref></sgmltag> not to have a closing tag:
+ <literal><sgmltag>&lt;xref
+ linkend="someid"></sgmltag></literal>. In
+ XML, it is illegal; instead, you should use
+ <literal><sgmltag>&lt;xref
+ linkend="someid"/></sgmltag></literal> (note the
+ slash!).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term> <emphasis>Case sensitive tags</emphasis></term>
+ <listitem>
+ <para>
+ In XML, unlike SGML, tags are case-senstive
+ <sgmltag>&lt;title></sgmltag> and
+ <sgmltag>&lt;TITLE></sgmltag> are different tags!
+ Therefore, please always use lowercase tags (except for
+ things like <literal>DOCTYPE, CDATA</literal> and
+ <literal>ENTITY</literal>, which are not DocBook tags).
+ </para>
+ </listitem>
+ </varlistentry>
+
+
+
+</variablelist>
+</sect2>
+
+
+
+ <!-- ####### DocBook Basics | Structure Elements ####### -->
+
+
+ <sect2 id="structure"> <title> Structure Elements</title>
+
+ <sect3 id="section">
+ <title>Sections and paragraphs</title>
+ <para>
+ Top-level element of a book body must be
+ <sgmltag>&lt;chapter></sgmltag>; it may contain one or more
+ <sgmltag>&lt;sect1></sgmltag>, each of them may contain
+ <sgmltag>&lt;sect2></sgmltag> and so on up to
+ <sgmltag>&lt;sect5></sgmltag>. The top-level element of an
+ article body is always
+ <sgmltag>&lt;sect1></sgmltag>. Regardless of which elements
+ you use, give each structural element a unique id, so that
+ you can link to it. For usage example, see the template.
+ </para>
+ <para> Please try to avoid using deeply nested sections; for
+ most situations, <sgmltag>&lt;sect1></sgmltag> and
+ <sgmltag>&lt;sect2></sgmltag> should be sufficient. If not,
+ you probably should split your <sgmltag>&lt;sect1></sgmltag>
+ into several smaller ones.
+ </para>
+ <para> Use the tag <sgmltag>&lt;para></sgmltag> for
+ paragraphs, even if there is only one paragraph in a
+ section&mdash;see template for examples.
+ </para>
+ </sect3>
+
+ <sect3 id="notes">
+ <title>Notes, Warnings, And Tips</title>
+ <para>
+ For notes, tips, warnings, and important information, which
+ should be set apart from the main text (usually as a
+ paragraph with some warning sign on the margin), use tags
+ <sgmltag>&lt;note></sgmltag>, <sgmltag>&lt;tip></sgmltag>,
+ <sgmltag>&lt;warning></sgmltag>,
+ <sgmltag>&lt;important></sgmltag> respectively. For example:
+ <programlisting>
+<![CDATA[
+<tip>
+ <title>TIP</title>
+ <para>
+ To speed up program compilation, use <application>gcc</application>
+ compiler with Pentium optimization.
+ </para>
+</tip>]]> </programlisting> produces
+ </para>
+ <tip id="extip">
+ <title>TIP</title>
+ <para>
+ To speed up program compilation, use
+ <application>gcc</application> compiler with Pentium
+ optimization. </para>
+ </tip>
+ <para>
+ Note that this should not be inside a
+ <sgmltag>&lt;para></sgmltag> but between paragraphs.
+ </para>
+ </sect3>
+ <sect3 id="figures">
+ <title> Screenshots and other figures</title>
+ <para>
+ To include screenshots and other figures, use the following
+ tags:
+
+ <programlisting>
+<![CDATA[
+<figure id="shot1">
+ <title>Screenshot</title>
+ <screenshot>
+ <screeninfo>Screenshot of a program</screeninfo>
+ <graphic format="PNG" fileref="figures/example_screenshot" srccredit="ME">
+ </graphic>
+ </screenshot>
+</figure>]]>
+ </programlisting>
+ replacing <filename>example_screenshot</filename> with the
+ actual file name (without extension). The result will look like this:
+
+ <figure id="shot1">
+ <title>Screenshot</title>
+ <screenshot>
+ <screeninfo>Screenshot of a program</screeninfo>
+ <graphic format="PNG"
+ fileref="figures/example_screenshot" srccredit="ME"/>
+
+ </screenshot>
+ </figure>
+ </para>
+ <note>
+ <title>NOTE</title>
+ <para>
+ Notice in this example that the screenshot file name does
+ not include the file type extension &mdash; to find out
+ why, please read <xref linkend="jadeimages" />.
+ </para>
+ </note>
+ </sect3>
+ <sect3 id="listing">
+ <title>Program listings and terminal session</title> <para>
+ To show a file fragment&mdash;for example, program
+ listing&mdash;use <sgmltag>&lt;programlisting></sgmltag> tag:
+ <programlisting>
+<![CDATA[
+<programlisting>
+[Desktop Entry]
+Name=Gnumeric spreadsheet
+Exec=gnumeric
+Icon=gnome-gnumeric.png
+Terminal=0
+Type=Application
+</programlisting>]]>
+ </programlisting>
+ which produces
+ <programlisting>
+[Desktop Entry]
+Name=Gnumeric spreadsheet
+Exec=gnumeric
+Icon=gnome-gnumeric.png
+Terminal=0
+Type=Application
+ </programlisting>
+ As a matter of fact, all examples in this document were
+ produced using <sgmltag>&lt;programlisting></sgmltag>.
+ </para>
+ <para>
+ To show a record of terminal session&mdash;i.e., sequence of
+ commands entered at the command line&mdash;use
+ <sgmltag>&lt;screen></sgmltag> tag:
+ <programlisting>
+<![CDATA[
+<screen>
+<prompt>bash$</prompt><userinput>make love</userinput>
+make: *** No rule to make target `love'. Stop.
+</screen>]]>
+ </programlisting>
+ which produces
+ <screen>
+<prompt>bash$</prompt><userinput>make love</userinput>
+make: *** No rule to make target `love'. Stop.
+ </screen>
+ Note the use of tags <sgmltag>&lt;prompt></sgmltag> and
+ <sgmltag>&lt;userinput></sgmltag> for marking system prompt
+ and commands entered by user.
+ <note>
+ <title>NOTE</title>
+ <para>
+ Note that both <sgmltag>&lt;programlisting></sgmltag>
+ and <sgmltag>&lt;screen></sgmltag> preserve linebreaks,
+ but interpret SGML tags (unlike LaTeX
+ <markup>verbatim</markup> environment). Take a look at
+ the source of this document to see how you can have SGML
+ tags literally shown but not interpreted,
+ </para>
+ </note>
+ </para>
+ </sect3>
+ <sect3 id="lists">
+ <title> Lists</title>
+ <para>
+ The most common list types in DocBook are
+ <sgmltag>&lt;itemizedlist></sgmltag>,
+ <sgmltag>&lt;orderedlist></sgmltag>, and
+ <sgmltag>&lt;variablelist></sgmltag>.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term> <sgmltag>&lt;itemizedlist></sgmltag></term>
+ <listitem><para>
+ This is the simplest unnumbered list, parallel to
+ <sgmltag>&lt;ul></sgmltag> in HTML. Here is an example:
+ <programlisting>
+<![CDATA[
+<itemizedlist>
+ <listitem>
+ <para>
+ <guilabel>Show backup files</guilabel> &mdash; This will
+ show any backup file that might be on your system.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <guilabel>Show hidden files</guilabel> &mdash; This will
+ show all "dot files" or files that begin with a dot. This
+ files typically include configuration files and directories.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <guilabel>Mix files and directories</guilabel> &mdash; This
+ option will display files and directories in the order you
+ sort them instead of
+ always having directories shown above files.
+ </para>
+ </listitem>
+</itemizedlist>
+]]>
+ </programlisting>
+ and output:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <guilabel>Show backup files</guilabel> &mdash;
+ This will show any backup file that might be on
+ your system.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guilabel>Show hidden files</guilabel> &mdash;
+ This will show all "dot files" or files that
+ begin with a dot. This files typically include
+ configuration files and directories.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guilabel>Mix files and directories</guilabel>
+ &mdash; This option will display files and
+ directories in the order you sort them instead
+ of always having directories shown above files.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para> Note the use of <sgmltag>&amp;mdash;</sgmltag>
+ for long dash (see <xref linkend="specsymb" />). Also,
+ please note that the result looks much nicer because the
+ terms being explained (<guilabel>Show backup
+ files</guilabel>, etc.) are set in a different font. In
+ this case, it was achieved by using <link
+ linkend="gui"><sgmltag>&lt;guilabel></sgmltag></link>
+ tag. In other cases, use appropriate tags such as
+ <link linkend="gui"><sgmltag>&lt;guimenuitem></sgmltag></link>,
+ <link
+ linkend="filenames"><sgmltag>&lt;command></sgmltag></link>,
+ or &mdash; if none of
+ this applies &mdash; use
+ <link linkend="gui"><sgmltag>&lt;emphasis></sgmltag></link>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term> <sgmltag>&lt;orderedlist></sgmltag></term>
+ <listitem><para>
+ This list is completely analogous to
+ <sgmltag>&lt;itemizedlist></sgmltag> and has the same
+ syntax, but it produces numbered list. By default,
+ this list uses Arabic numerals for numbering entries;
+ you can override this using <sgmltag>numeration</sgmltag>,
+ for example <sgmltag>&lt;orderedlist
+ numeration="lowerroman"></sgmltag>. Possible values of
+ these attribute are <sgmltag>arabic</sgmltag>,
+ <sgmltag>upperalpha</sgmltag>,
+ <sgmltag>loweralpha</sgmltag>,
+ <sgmltag>upperroman</sgmltag>,
+ <sgmltag>lowerroman</sgmltag>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term> <sgmltag>&lt;variablelist></sgmltag></term>
+ <listitem><para> This list is used when each entry is
+ rather long, so it should be formatted as a block of text
+ with some subtitle, like a small subsection. The
+ <sgmltag>&lt;variablelist></sgmltag> is more complicated
+ than itemizedlists, but for larger blocks of text, or when
+ you're explaining or defining something, it's best to use
+ them. Their greatest advantage is that it's easier for a
+ computer to search. The lines you are reading now were
+ produced by <sgmltag>&lt;variablelist></sgmltag>. The
+ source looked liked this:
+ <programlisting>
+<![CDATA[
+<variablelist>
+ <varlistentry>
+ <term> <sgmltag>&lt;itemizedlist></sgmltag></term>
+ <listitem><para>
+ This is the simplest unnumbered list, parallel to
+ <sgmltag>&lt;ul></sgmltag> in HTML. Here is an example:...
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term> <sgmltag>&lt;orderedlist></sgmltag></term>
+ <listitem><para>
+ This list is completely analogous to
+ <sgmltag>&lt;itemizedlist></sgmltag>
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term> <sgmltag>&lt;variablelist></sgmltag></term>
+ <listitem><para>
+ This list is used when each entry is rather long,...
+ </para></listitem>
+ </varlistentry>
+</variablelist>
+]]>
+ </programlisting>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para>
+ Lists can be nested; in this case, the stylesheets
+ are smart enough to change the numeration (for
+ <sgmltag>&lt;orderedlist></sgmltag>) or marks of each entry
+ (in <sgmltag>&lt;itemizedlist></sgmltag>) for sub-lists
+ </para>
+ </sect3>
+
+ </sect2>
+
+<!-- ####### DocBook Basics | Inline Elements ####### -->
+
+ <sect2 id="inline">
+ <title>Inline Elements</title>
+
+ <sect3 id="gui">
+ <title>GUI elements</title>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <sgmltag>&lt;guibutton></sgmltag> &mdash; used for
+ buttons, including checkbuttons and radio buttons
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <sgmltag>&lt;guimenu></sgmltag>,
+ <sgmltag>&lt;guisubmenu></sgmltag> &mdash;used for
+ top-level menus and submenus
+ respectively, for example <literal><![CDATA[
+ <guisubmenu>Utilities</guisubmenu> submenu of the
+ <guimenu>Main Menu</guimenu>]]></literal>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <sgmltag>&lt;guimenuitem></sgmltag>&mdash;an entry in a
+ menu
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <sgmltag>&lt;guiicon></sgmltag>&mdash;an icon
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <sgmltag>&lt;guilabel></sgmltag>&mdash;for items which have
+ labels, like tabs, or bounding boxes.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <sgmltag>&lt;interface></sgmltag>&mdash; for most everything
+ else... a window, a dialog box, the Panel, etc.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ If you need to refer to a sequence of menu choices, such as
+ <menuchoice>
+ <guimenu>Main Menu</guimenu>
+ <guisubmenu>Utilities</guisubmenu> <guimenuitem>GNOME
+ terminal</guimenuitem>
+ </menuchoice>
+ there is a special construction for this, too:
+ <programlisting>
+<![CDATA[
+<menuchoice>
+ <guimenu>Main Menu</guimenu> <guisubmenu>Utilities</guisubmenu>
+ <guimenuitem>GNOME terminal</guimenuitem> </menuchoice>]]>
+ </programlisting>
+ </para>
+ </sect3>
+
+ <sect3 id="links">
+ <title>Links and references</title>
+ <para>
+ To refer to another place in the same document, you can use
+ tags <sgmltag>&lt;xref></sgmltag> and
+ <sgmltag>&lt;link></sgmltag>. The first of them
+ automatically inserts the full name of the element you refer
+ to (section, figure, etc.), while the second just creates a
+ link (in HTML output). Here is an example:
+ <programlisting>
+<![CDATA[An example of a <link linkend="extip">tip</link> was given in
+<xref linkend="notes" />. ]]>
+ </programlisting>
+ which produces: An example of a <link
+ linkend="extip">tip</link> was given in <xref
+ linkend="notes" />.
+ </para>
+ <para>
+ Here <sgmltag>notes</sgmltag> and <sgmltag>extip</sgmltag>
+ are the id attributes of <xref linkend="notes" /> and of the
+ example of a tip in it.
+ </para>
+ <para> To produce a link to an external source, such as a
+ Web page or a local file, use <sgmltag>&lt;ulink></sgmltag>
+ tag, for example:
+ <programlisting>
+<![CDATA[ To find more about GNOME, please visit <ulink type="http"
+url="http://www.gnome.org">GNOME Web page</ulink> ]]>
+ </programlisting>
+ which produces: To find more about GNOME, please visit
+ <ulink type="http" url="http://www.gnome.org">The GNOME Web
+ Site</ulink> You can use any of the standard URL types, such
+ as <literal>http, ftp, file, telnet, mailto</literal> (in
+ most cases, however, use of <literal>mailto</literal> is
+ unnecessary&mdash;see discussion of
+ <sgmltag>&lt;email></sgmltag> tag).
+ </para>
+ </sect3>
+
+ <sect3 id="filenames"> <title>Filenames, commands, and other
+ computer-related things</title>
+ <para>
+ Here are some tags used to describe operating system-related
+ things:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para> <sgmltag>&lt;filename></sgmltag> &mdash; used
+ for filenames,
+ e.g.<sgmltag>&lt;filename></sgmltag>
+ foo.sgml
+ <sgmltag>&lt;/filename></sgmltag>
+ produces: <filename>foo.sgml</filename>.
+ </para>
+ </listitem>
+ <listitem>
+ <para> <sgmltag>&lt;filename
+ class="directory"></sgmltag> &mdash; used for
+ directories, e.g.<sgmltag>&lt;filename
+ class="directory"></sgmltag>/usr/bin
+ <sgmltag>&lt;/filename></sgmltag>
+ produces: <filename
+ class="directory">/usr/bin</filename>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <sgmltag>&lt;application></sgmltag> &mdash; used for
+ application names,
+ e.g. <sgmltag>&lt;application></sgmltag>Gnumeric
+ <sgmltag>&lt;/application></sgmltag> produces:
+ <application>Gnumeric</application>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <sgmltag>&lt;envar></sgmltag> &mdash; used for
+ environment variables, e.g.
+ <sgmltag>&lt;envar></sgmltag>PATH<sgmltag>&lt;/envar></sgmltag>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <sgmltag>&lt;command></sgmltag> &mdash; used for
+ commands entered on command line, e.g.
+ <sgmltag>&lt;command></sgmltag>make install
+ <sgmltag>&lt;/command></sgmltag> produces:
+ <command>make install</command>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <sgmltag>&lt;replaceable></sgmltag> &mdash; used for
+ replaceable text, e.g.
+ <sgmltag>&lt;command></sgmltag>db2html<sgmltag>&lt;replaceable></sgmltag>
+ foo.sgml
+ <sgmltag>&lt;/replaceable></sgmltag><sgmltag>&lt;/command></sgmltag>
+ produces: <command>db2html
+ <replaceable>foo.sgml</replaceable></command>.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3 id="keys">
+ <title>Keyboard input</title>
+ <para> To mark up text input by the user, use
+ <sgmltag>&lt;userinput></sgmltag>.
+ </para>
+ <para> To mark keystrokes such as shortcuts and other
+ commands, use <sgmltag>&lt;keycap></sgmltag>.
+ This is used for marking up what is printed on the top
+ of the physical key on the keyboard. There are a couple of
+ other tags for keys, too: <sgmltag>&lt;keysym&gt;</sgmltag>
+ and <sgmltag>&lt;keycode&gt;</sgmltag>. However you are
+ unlikely to need these for most documentation. For reference,
+ <sgmltag>&lt;keysym&gt;</sgmltag> is for the <quote>symbolic
+ name</quote> of a key. <sgmltag>&lt;keycode&gt;</sgmltag> is
+ for the <quote>scan code</quote> of a key. These are not
+ terms commonly required in <acronym>GNOME</acronym> documentation,
+ although <sgmltag>&lt;keysym&gt;</sgmltag> is useful for marking
+ up control codes.
+ </para>
+ <para>
+ To mark up a combination of keystrokes, use the
+ <sgmltag>&lt;keycombo></sgmltag> wrapper:
+ <programlisting>
+<![CDATA[
+<keycombo>
+ <keycap>Ctrl</keycap>
+ <keycap>Alt</keycap>
+ <keycap>F1</keycap>
+</keycombo>]]>
+ </programlisting>
+ </para>
+ <para>
+ Finally, if you want to show a shortcut for some menu
+ command, here are the appropriate tags (rather long):
+ <programlisting>
+<![CDATA[
+<menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>q</keycap></keycombo>
+ </shortcut>
+ <guimenuitem> Quit</guimenuitem>
+</menuchoice>]]>
+ </programlisting>
+ which produces simply
+ <menuchoice>
+ <shortcut> <keysym>Ctrl-q</keysym> </shortcut>
+ <guimenuitem> Quit</guimenuitem>
+ </menuchoice>
+ </para>
+ </sect3>
+
+ <sect3 id="email">
+ <title>E-mail addresses</title> <para> To mark up e-mail
+ address, use <sgmltag>&lt;email></sgmltag>:
+ <programlisting>
+<![CDATA[ The easiest way to get in touch with me is by e-mail
+(<email>me@mydomain.com</email>)]]>
+ </programlisting>
+ which produces: The easiest way to get in touch with me is
+ by e-mail (<email>me@mydomain.com</email>) Note that
+ <sgmltag>&lt;email></sgmltag> automatically produces a link
+ in html version.
+ </para>
+ </sect3>
+
+ <sect3 id="specsymb">
+ <title> Special symbols </title>
+ <para>
+ DocBook also provides special means for entering
+ typographic symbols which can not be entered directly
+ form the keyboard (such as copyright sign). This is done using
+ <emphasis>entities</emphasis>, which is SGML analogue of
+ macros, or commands, of LaTeX. They generally have the form
+ <sgmltag>&amp;entityname;</sgmltag>. Note that the semicolon
+ is required.
+ </para>
+ <para>
+ here is partial list of most commonly used enitites:
+ </para>
+ <itemizedlist>
+ <listitem><para>
+ <sgmltag>&amp;amp;</sgmltag> &mdash; ampersend (&amp;)
+ </para></listitem>
+ <listitem><para>
+ <sgmltag>&amp;lt;</sgmltag> &mdash; left angle bracket (&lt;)
+ </para></listitem>
+ <listitem><para>
+ <sgmltag>&amp;copy;</sgmltag> &mdash; copyright sign (&copy;)
+ </para></listitem>
+ <listitem><para>
+ <sgmltag>&amp;mdash;</sgmltag> &mdash; long dash (&mdash;)
+ </para></listitem>
+ <listitem><para>
+ <sgmltag>&amp;hellip;</sgmltag> &mdash; ellipsis (&hellip;)
+ </para></listitem>
+ </itemizedlist>
+ <para>
+ Note that the actual look of the resulting symbols depends
+ on the fonts used by your browser; for example, it might
+ happen that long dash (<sgmltag>&amp;mdash;</sgmltag>) looks
+ exactly like the usual dash (-). However, in the PostScript
+ (and thus, in print) the output will look markedly better if
+ you use appropriate tags.
+ </para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+<!-- ################# GDP Documentation Conventions ############### -->
+
+ <sect1 id="conventions">
+ <title>GDP Documentation Conventions </title>
+
+<!-- ####### GDP Documentation Conventions | All Documentation ####### -->
+
+ <sect2 id="conventionsalldocs">
+ <title>Conventions for All GDP Documentation</title>
+ <sect3 id="xmlcomp">
+ <title> XML compatibility </title>
+ <para>
+ All GNOME documentation should conform to XML syntax
+ requirements, which are stricter than SGML ones &mdash; see
+ <xref linkend="xml" /> for more informaion.
+ </para>
+ </sect3>
+
+ <sect3 id="authorsnames">
+ <title> Authors' names</title>
+ <para>
+ All GNOME documentation should contain the names of both the
+ application authors and documentation authors, as well as a
+ link to the application web page (if it exists) and
+ information for bug submission &mdash; see templates for an
+ example.
+ </para>
+ </sect3>
+ </sect2>
+
+<!-- ####### GDP Documentation Conventions | All Documentation ####### -->
+
+ <sect2 id="conventionsappdocs">
+ <title>Conventions for Application Documentation</title>
+
+ <sect3 id="applicationversionid">
+ <title>Application Version Identification</title>
+ <para>
+ Application documentation should identify the version of the
+ application for which the documentation is written:
+ <programlisting>
+<![CDATA[
+<sect1 id="intro">
+ <title>Introduction</title>
+ <para>
+ blah-blah-blah This document describes version 1.0.53 of gfoo.
+ </para>
+</sect1>]]>
+ </programlisting>
+ </para>
+ </sect3>
+ <sect3 id="license">
+ <title> Copyright information </title>
+ <para> Application
+ documentation should contain a copyright notice, stating the
+ licensing terms. It is suggested that you use the GNU Free
+ Documentation License. You could also use some other license
+ allowing free redistribution, such as GPL or Open Content
+ license. If documentation uses some trademarks (such as UNIX,
+ Linux, Windows, etc.), proper legal junk should also be
+ included (see templates).
+ </para>
+ </sect3>
+ <sect3 id="license2">
+ <title>Software license</title>
+ <para>
+ All GNOME applications must contain information about the
+ license (for software, not for documentation), either in the
+ "About" box or in the manual.
+ </para>
+ </sect3>
+
+ <sect3 id="bugtraq">
+ <title> Bug reporting</title>
+ <para>
+ Application documentation should give an address for
+ reporting bugs and for submitting comments about the
+ documentaion (see templates for an example).
+ </para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+<!-- ################# Writing Application Manuals ###############-->
+
+ <sect1 id="writingapplicationmanuals">
+ <title>Writing Application and Applet Manuals</title>
+ <para>
+ Every GNOME application or applet should have a manual specific
+ to that particular application. This manual should be a complete
+ and authoritative guide. The manual should describe what the
+ program does and how to use it. Manuals will typically describe
+ each window or panel presented to the user using screenshots (in
+ PNG format only) when appropriate. They should also describe
+ each feature and preference option available.
+ </para>
+ <note>
+ <title>Documentation Availability</title>
+ <para>
+ Applications and applets should not rely on documentation
+ which is only available on the internet. All manuals and
+ other documentation should be packaged with the application or
+ applet and be made available to the user through the standard
+ GNOME help system methods described below.
+ </para>
+ </note>
+ <para> Application manuals should be based on the template in
+ <xref linkend="template1" />. Applet manuals should be based on
+ the templates in <xref linkend="template2-1x" /> for GNOME
+ versions 1.x and the templates in <xref linkend="template2-2x" />
+ for GNOME versions 2.x.
+ </para>
+ <note>
+ <title>Manuals For Large Applications</title>
+ <para>
+ Manuals for very large applications, such as GNOME Workshop
+ components should be a <sgmltag>&lt;book></sgmltag> (and thus
+ use <sgmltag>&lt;chapter></sgmltag> for each primary section)
+ , instead of <sgmltag>&lt;article></sgmltag> which most
+ applications use(with each primary section being a
+ <sgmltag>&lt;sect1></sgmltag>).
+ </para>
+ </note>
+ <note>
+ <title>Applet Manuals in GNOME 2.0</title>
+ <para>
+ Note that applet manuals in GNOME 2.0 are treated in a special
+ way. The manuals for all applets are merged into a single
+ virtual document by Nautilus. For this reason, the header
+ information for applet manuals is omitted and the first
+ section of each applet is
+ <sgmltag>&lt;sect1></sgmltag>. Applet manuals will typically
+ have several sections, each of which is
+ <sgmltag>&lt;sect2></sgmltag>.
+ </para>
+ </note>
+ <para>
+ Application manuals should be made available by having a
+ "Manual" entry in the <guimenu>Help</guimenu> pull-down menu
+ at the top of the
+ application, as described in <xref linkend="listingdocsinhelpmenu" />.
+ Applets should make their manuals available by
+ right-clicking on the applet.
+ </para>
+ </sect1>
+
+
+<!-- ############### Listing Documents in the Help Menu ############# -->
+
+ <sect1 id="listingdocsinhelpmenu">
+ <title>Listing Documents in the Help Menu</title>
+
+ <note>
+ <title>Developer Information</title>
+ <para>
+ This section is for developers. Documentation authors
+ generally do not need to know this material.
+ </para>
+ </note>
+ <para>
+ Typically the application manual and possibly additional help
+ documents will be made available to the user under the
+ <guimenu>Help</guimenu> menu at the top right of the
+ application. To do this, you must first write a
+ <filename>topic.dat</filename> file. The format for this file is:
+ <programlisting>
+One line for each 'topic'.
+
+Two columns, as defined by perl -e 'split(/\s+/,$aline,2)'
+
+First column is the HTML file (and optional section) for the topic,
+relative to the app's help file dir.
+
+Second column is the user-visible topic name.
+ </programlisting>
+ For example, <application>Gnumeric</application>'s
+ <filename>topic.dat</filename> file is:
+ <programlisting>
+gnumeric.html Gnumeric manual
+function-reference.html Gnumeric function reference
+ </programlisting>
+ When the application is installed, the
+ <filename>topic.dat</filename> file should be placed in the
+ <filename
+ class="directory">$prefix/share/gnome/help/<replaceable>appname</replaceable>/C/</filename> directory
+ where <replaceable>appname</replaceable> is replaced by the
+ application's name. The application documentation (converted
+ from SGML into HTML with <command>db2html</command>) should be
+ placed in this directory too.
+ </para>
+ <note>
+ <para>
+ If the help files are not present in the correct directory, the
+ menu items will NOT appear when the program is run.
+ </para>
+ </note>
+ <para>
+ The <filename>topic.dat</filename> file is used by the GNOME
+ menu building code to generate the <guimenu>Help</guimenu>
+ menu. When you define your menu:
+<programlisting>
+GnomeUIInfo helpmenu[] = {
+ {GNOME_APP_UI_ITEM,
+ N_("About"), N_("Info about this program"),
+ about_cb, NULL, NULL,
+ GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ABOUT,
+ 0, 0, NULL},
+ GNOMEUIINFO_SEPARATOR,
+ GNOMEUIINFO_HELP("<emphasis>appname</emphasis>"),
+ GNOMEUIINFO_END
+ };
+</programlisting>
+ the line specifying <varname>GNOMEUIINFO_HELP</varname> causes
+ GNOME to create a menu entry which is tied to the documentation
+ in the directory mentioned above. Also, all the topics in the
+ <filename>topic.dat</filename> file will get menu entries in the
+ <guimenu>Help</guimenu> menu. When the user selects any of these
+ topics from the <guimenu>Help</guimenu> menu, a help browser
+ will be started with the associated HTML documentation.
+ </para>
+ </sect1>
+
+
+<!-- ################# Application Help Buttons ############### -->
+
+ <sect1 id="applicationhelpbuttons">
+ <title>Application Help Buttons</title>
+
+ <note>
+ <title>Developer Information</title>
+ <para>
+ This section is for developers. Documentation authors
+ generally do not need to know this material.
+ </para>
+ </note>
+ <para>
+ Most GNOME applications will have <guibutton>Help</guibutton>
+ buttons. These are most often seen in Preference windows. (All
+ Preference windows should have <guibutton>Help</guibutton>
+ buttons.) Most <guibutton>Help</guibutton> buttons will connect
+ to the application manual, although some may connect to special
+ documents. Because the <guibutton>Help</guibutton> buttons do
+ not generally have their own special documentation, the
+ documentation author(s) do not need to do very much. However,
+ the application author must be careful to guarantee that the
+ application correctly opens the help documentation when the
+ <guibutton>Help</guibutton> buttons are pressed.
+ </para>
+ <para>
+ To make the Help buttons call the correct document in the GNOME Help
+ Browser the developer should add code based on the following example:
+ </para>
+ <programlisting>
+gchar *tmp;
+tmp = gnome_help_file_find_file ("module", "page.html");
+if (tmp) {
+ gnome_help_goto(0, tmp);
+ g_free(tmp);
+}
+ </programlisting>
+ <note>
+ <title>NOTE</title>
+ <para>
+ The example above is in the C language, please refer to other
+ documentation or forums for other GNOME language bindings.
+ </para>
+ </note>
+ </sect1>
+
+<!-- ################# Packaging Applet Documentation ############### -->
+
+ <sect1 id="packagingappletdocs">
+ <title>Packaging Applet Documentation</title>
+ <sect2 id="appletfiles">
+ <title>Applet Documentation Files</title>
+ <para>
+ In GNOME 2.0 each applet will have its own documentation
+ installed separately, and the GNOME 2.0 help
+ browser (<application>Nautilus</application>) will dynamically
+ merge the applet documents into a single virtual book
+ called <citetitle>GNOME Applets</citetitle>. During the
+ transitionary stage between GNOME 1.0 and GNOME 2.0, each
+ applet in the gnome-applets package has its own manual(stored
+ with the applet in CVS), but they are merged together manually
+ to create the <citetitle>GNOME Applets</citetitle> book before
+ distribution. Telsa
+ <email>hobbit@aloss.ukuu.org.uk</email> is the maintainer of
+ this document. Applet documentation should be sent to Telsa
+ (or placed in CVS) who will make sure they are correctly
+ packaged with the applets. The applet author should be
+ contacted to modify the menu items and help buttons to bind to
+ the applet documentation if necessary.
+ </para>
+ <para>
+ Images which are part of the applet documentation should be in
+ PNG format and should reside in the same directory as the SGML
+ document file in CVS(gnome-applets/APPLETNAME/help/C).
+ </para>
+ <para>
+ Applets which are not part of the gnome-applets package must
+ package their documentation with the particular applet
+ package. They should use the same applet template as other
+ applets. However, the <sgmltag>&lt;xref></sgmltag> links to
+ the introductory chapter of the <citetitle>GNOME
+ Applets</citetitle> book must be removed (as the 1.x
+ <application>GNOME Help Browser</application> does not allow
+ you to create links between separate documents) and replaced
+ with suitable text. Note that since this document is not part
+ of the <citetitle>GNOME Applets</citetitle> book, you must
+ remember to add <sgmltag>&lt;legalnotice></sgmltag> and
+ <sgmltag>&lt;copyright></sgmltag> sections.
+ </para>
+ </sect2>
+
+ <sect2 id="appletmenu">
+ <title>Adding Documentation to an Applet Menu</title>
+ <note>
+ <title>Developer Information</title>
+ <para>
+ This section is for developers. Documentation authors
+ generally do not need to know this material.
+ </para>
+ </note>
+ <para>
+ Applets should have <guimenu>About</guimenu> and
+ <guimenu>Manual</guimenu> menu items, typically as the first
+ and second top-most items in the menu respectively. This
+ section describes how the developer creates these menu items
+ and links them to the documentation.
+ </para>
+ <para>
+ To add an applet's manual to its applet menu, use:
+<programlisting>
+/* add an item to the applet menu */
+applet_widget_register_callback(APPLET_WIDGET(applet), "manual",
+_("Manual"), &amp;open_manual, NULL);
+</programlisting>
+ Here the second argument is an arbitrary name for the
+ callback, the third argument is the label which will appear
+ when the user right clicks on the applet, and the fourth
+ argument is the callback function.
+ </para>
+ <para>
+ You will need to write a simple callback function to open the
+ help browser to the appropriate document. This is done using
+ the <function>gnome_help_file_find_file</function> function,
+ as described in <xref linkend="applicationhelpbuttons" />.
+ </para>
+ <para>
+ You will also want to add an <guimenu>About</guimenu> menu
+ item to the applet's menu. This is a
+ stock menu item and is done:
+<programlisting>
+applet_widget_register_stock_callback (APPLET_WIDGET(applet), "about",
+ GNOME_STOCK_MENU_ABOUT, _("About"), &amp;my_applet_cb_about,
+ NULL);
+</programlisting>
+ </para>
+ <para>
+ More information can be found at <ulink type="http"
+ url="http://developer.gnome.org/doc/tutorials/applet/index.html">Writing
+ GNOME panel applets using the GTK+/GTK-- widget set</ulink>.
+ </para>
+ </sect2>
+ </sect1>
+
+
+<!-- ################# Writing Context Sensitive Help ###############
+-->
+
+ <sect1 id="writingcontextsensitivehelp">
+ <title>Writing Context Sensitive Help (coming in GNOME-2.0)</title>
+ <para>
+ Context sensitive help, also known as "pop-up" help, will allow
+ a user to obtain help information about specific buttons or
+ parts of an application.
+ </para>
+ <para>
+ Context sensitive help is still under development and not all
+ the details are available at this time. However, the basics can
+ be shown here so that you can understand how the system will
+ work.
+ </para>
+ <para>
+ The Context Sensitive Help system is designed to allow the
+ developer to give an id to a particular portion of the User
+ Interface, for example, a button. Once the interface is complete
+ a Perl script can then be run against the interface code to
+ create a "map" file. This map file allows the developer or
+ writer to associate particular paragraph sections from an XML
+ document to the interface items.
+ </para>
+ <para>
+ The XML used for the document is a small XML DTD that is being
+ developed to use the same tags (albeit, much fewer) as DocBook
+ so that writers do not have to re-learn a new DTD.
+ </para>
+ <para>
+ Once the document is written and map file is complete, when the
+ user launches context sensitive help on the interface (either by
+ pressing a button and then clicking on the interface item they
+ want information on, or by right mouse clicking on the interface
+ item and selecting a pop-up menu item like "What's This") a
+ small transient window will appear with brief but detailed
+ information on the interface item.
+ </para>
+ </sect1>
+
+<!-- ################# Referring to Other GNOME Documentation
+############# -->
+
+ <sect1 id="referring">
+ <title>Referring to Other GNOME Documentation (coming in
+ GNOME-2.0)</title>
+ <para>
+ In the GNOME 2.0 Help System, you will be able to create links
+ from one document to another. The exact mechanism for doing
+ this is in development.
+ </para>
+ </sect1>
+
+
+<!-- ################# Basics of Documentation Style ############### -->
+
+ <sect1 id="basics">
+ <title>Basics of Documentation Style</title>
+ <para>
+ Most people have never enjoyed reading a software manual, and
+ they probably never will. Many times, they'll read the
+ documentation only when they run into problems, and they'll be
+ frustrated and upset before they even read a word. On the
+ other hand, some readers will read the manual all the way
+ through, or at least look at the introduction before they
+ start. Your document might serve as a reference for an expert
+ or a guide to a beginner, and it must have enough depth to
+ satisfy the first without overwhelming the second. Ideally, it
+ will serve beginners as they <emphasis>become</emphasis>
+ experts. Remember, your goal is to produce <emphasis>complete,
+ intuitive and clear</emphasis> documentation.
+ </para>
+ <para>
+ In order to write useful documentation, you'll have to know who
+ your audience is likely to be. Then, you can look for the
+ problems they're likely to run into, and solve them. It will
+ also help if you focus on the tasks users will perform, and
+ group features accordingly, rather than simply describing
+ features at random.
+ </para>
+
+<!-- *********** Basics of Documentation Style: planning -->
+
+ <sect2 id="styleplanning">
+ <title>Planning</title>
+ <para>
+ Begin documenting by learning how to use the application and
+ reading over any existing documentation. Pay attention to
+ places where your document will differ from the template. It
+ may help to develop a document skeleton: a valid XML or SGML
+ document that has little or no content. For very large
+ applications, you will need to make significant departures
+ from the templates, since you'll be using the
+ <sgmltag>&lt;book></sgmltag> tag instead of
+ <sgmltag>&lt;chapter></sgmltag> or
+ <sgmltag>&lt;article></sgmltag>.
+ </para>
+ </sect2>
+
+
+<!-- ####### Basics of Documentation Style | Balance ####### -->
+ <sect2 id="balance">
+ <title>Achieving a Balanced Style</title>
+
+ <para>
+ Just as you need to juggle expert and novice readers,
+ you'll have to juggle a number of other extremes as you write:
+ <itemizedlist>
+ <listitem>
+ <para>
+ Documents should be complete, yet concise. You should
+ describe every feature, but you'll have decide how much
+ detail is really necessary. It's not, for example,
+ necessary to describe every button and form field in a
+ dialog box, but you should make sure that your readers
+ know how to bring up the dialog and what it does. If
+ you spend fewer words on the obvious, you can spend more
+ time clarifying the ambiguous labels and explaining
+ items that are more complex.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Be engaging and friendly, yet professional. Games
+ documents may be less formal than productivity
+ application documents (people don't
+ <emphasis>use</emphasis> games, they
+ <emphasis>play</emphasis> them), but all of them should
+ maintain a standard of style which holds the reader's
+ interest without resorting to jokes and untranslatable
+ allusions or puns.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Examples, tips, notes, and screenshots are useful to
+ break up long stretches of text, but too many can get in
+ the way, and make your documents too choppy to read.
+ It's good to provide a screenshot of any dialog windows
+ a user might run into, but if a dialog box has several
+ tabs, it's not usually necessary to have one for each.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The GDP strives to have all of its documentation conform
+ to certain standards of style and content, but every
+ document (and every writer) is different. You will need
+ to use your judgement, and write documents to fit with
+ the rest of the project, without compromising the
+ individual needs of your subject, or your own
+ individuality as a writer.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </para>
+ </sect2>
+
+
+<!-- ####### Basics of Documentation Style | Structure ####### -->
+
+ <sect2 id="stylestructure">
+ <title>Structure</title>
+ <para>
+ In general, you won't have to worry too much about structure,
+ because the templates provide you with an excellent example.
+ As a general rule, try to follow that structural example.
+ That means using links, hierarchical nesting, and, if
+ necessary, a glossary or index. You probably won't need to
+ use every available structural tag, but take advantage of
+ what DocBook provides you.
+ </para>
+ <para>
+ As to linking, there's some disagreement about whether to use
+ <sgmltag>&lt;xref></sgmltag> <sgmltag>&lt;link></sgmltag>
+ when you make links within your documents. You'll have to
+ decide, based on the different ways that they are presented
+ in output, which is more appropriate given the context.
+ Regardless of which you use, you should not forget to use
+ them. Help your readers find information that relevant to
+ the issue at hand.
+ </para>
+ <para>
+ The table of contents will be generated automatically, but
+ you will probably have to develop your own index if you wish
+ to have one. The Nautilus Help Browser will have new, and
+ currently unknown, indexing capabilities, so index style and
+ structure are still under discussion. The GNOME User's Guide
+ will contain a glossary in its next versions; unless you're
+ writing a<sgmltag>&lt;book></sgmltag>, it will probably be best to
+ contribute to that rather than developing your own.
+ </para>
+ </sect2>
+<!-- ####### Basics of Documentation Style | Grammar & Spelling ####### -->
+
+ <sect2 id="stylegrammar">
+ <title>Grammar and Spelling</title>
+ <para>
+ Nobody expects you to be perfect; they just expect the
+ documentation for their software to be error-free. That means
+ that, in the same way that developers look for bugs and accept
+ bug reports, writers must check for errors in their documents.
+ Poor grammar, bad spelling, and gross technical errors in
+ draft documents are fine. However, if those problems show up
+ in a "real" release, they can count against the credibility of
+ GNOME and Linux. They'll also make you look bad.
+ </para>
+ <para>
+ There is no substitute for a human proofreader; use a
+ spell-check program, then read it over yourself, and then find
+ someone else to help you. Other GDP members are, of course,
+ willing and able to help you, but non-writers are often at
+ least as helpful.
+ </para>
+ <para>
+ Proofreading documents is both a also a good way to
+ familiarize yourself with documentation, and it certainly
+ makes you valuable to the GDP. Help other writers proof their
+ documents, and they will help you with yours.
+ </para>
+ </sect2>
+ </sect1>
+
+<!-- ################# Teamwork ############### -->
+
+ <sect1 id="teamwork">
+ <title>Teamwork</title> <!-- ####### Teamwork | Working With The
+GDP Team ####### -->
+
+ <sect2 id="teamworkgdp">
+ <title>Working With The GDP Team</title>
+ <para>
+ The GDP team is a valuable resource for any documentation
+ author. GDP members can answer most questions documentation
+ authors have during the course of their work. It is also
+ important to make sure you are not duplicating work of other
+ GDP members by visiting the <citetitle>GDP Documentation
+ Status Table</citetitle> (<ulink
+ url="http://www.gnome.org/gdp/doctable/"
+ type="http">http://www.gnome.org/gdp/doctable/</ulink>) and
+ assigning a documentation item to yourself. This table also
+ provides a forum for making suggestions and announcements for
+ each documentation item. The best way to get in touch with
+ GDP members is on the #docs IRC channel at irc.gnome.org or
+ else by emailing the <ulink type="http"
+ url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
+ <citetitle>gnome-doc-list mailing list</citetitle></ulink>.
+ </para>
+ <para>
+ After an author has finished a document (or even a draft
+ version of the document), it is a good idea to ask a member of
+ the GDP team to read the document, checking it for grammar,
+ proper DocBook markup, and clarity. One may typically find
+ another author to do this by either asking on the #docs IRC
+ channel at irc.gnome.org or by emailing the <ulink type="http"
+ url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
+ <citetitle>gnome-doc-list mailing list</citetitle></ulink>.
+ </para>
+ </sect2>
+
+<!-- ####### Teamwork | Working With Developers ####### -->
+
+ <sect2 id="teamworkdevelopers">
+ <title>Working With Developers</title>
+ <para>
+ Writing documentation typically involves a certain amount of
+ interaction with the developers of GNOME or the application
+ which is being documented. Often a document author will need
+ to ask the developer technical questions during the course of
+ writing a document. After the document is finished, it is good
+ idea to ask the developer to read the document to make sure it
+ is technically correct. The documentation author should also
+ make sure that the application author correctly binds and
+ packages the documentation with the application.
+ </para>
+ </sect2>
+
+<!-- ####### Teamwork | Working With Users #######
+
+ <sect2 id="teamworkusers">
+ <title>Working With Users</title>
+ <para>
+ Some document authors may wish to get feedback on their
+ documents directly from users. This may be done by ...
+ </para>
+ </sect2>-->
+ </sect1>
+
+<!-- ################# Finishing a Document ############### -->
+
+ <sect1 id="finishing">
+ <title>Finishing A Document</title>
+
+<!-- ####### Finishing a Document | Editting the Document ####### -->
+
+ <sect2 id="editting">
+ <title>Editing The Document</title>
+ <para>
+ When the document is finished, the document should be edited
+ by another member of the GDP for spelling, clarity, and
+ DocBook markup. It should also be read by an application
+ author to make sure the document is technically accurate.
+ </para>
+ </sect2>
+
+<!-- ####### Finishing a Document | Submitting the Document ####### -->
+
+ <sect2 id="submitting">
+ <title>Submitting The Document</title>
+ <para>
+ After the document has been edited and checked for technical
+ accuracy, it is ready to be combined with the application or
+ documentation package. This is typically done by passing the
+ document to the application or package developer. In some
+ cases, the documents can be committed directly into CVS,
+ however this should only be done after obtaining permission to
+ make CVS commits from the developer. Note that in many cases,
+ the application may need to be modified to correctly link to
+ the documentation. The packaging system (tarballs and binary
+ packages) may also need to be modified to include the
+ documentation in the package. Generally, this should be done
+ by the developers.
+ </para>
+ <para>
+ The final step is to email the GNOME Translation Team at
+ <email>gnome-i18n@nuclecu.unam.mx</email> to notify them that
+ there is a new document for them to translate.
+ </para>
+ </sect2>
+ </sect1>
+
+<!-- ################# Resources ############### -->
+
+ <sect1 id="resources">
+ <title>Resources</title>
+<!-- ####### Resources | Resources on the Web ####### -->
+
+ <sect2 id="resourcesweb">
+ <title>Resources On The Web</title> <para> The <ulink
+ type="http" url="http://developer.gnome.org/projects/gdp/">GNOME
+ Documentation Project Web page</ulink> lists current GDP
+ projects and members.
+ </para>
+ <para>
+ The <ulink url="http://www.gnome.org/gdp/doctable/"
+ type="http">GDP Documentation Status Table</ulink> tracks the
+ status of all the various documentation components of GNOME.
+ </para>
+ <para>
+ Norman Walsh's <ulink url="http://www.docbook.org"
+ type="http"> <citetitle>DocBook: The Definitive
+ Guide</citetitle></ulink> in an excellent book on DocBook,
+ available both online and in print.
+ </para>
+ </sect2>
+
+<!-- ####### Resources | Books ####### -->
+
+ <sect2 id="resourcesbooks">
+ <title>Books</title>
+ <para>
+ Docbook: The Definitive Guide is available in both printed
+ form and on the web at:
+ <ulink url="http://www.docbook.org/tdg/index.html">
+ <citetitle>Docbook: The Definitive Guide</citetitle>
+ </ulink>
+ </para>
+ </sect2>
+
+<!-- ####### Resources | Mailing Lists ####### -->
+
+ <sect2 id="mailinglists">
+ <title>Mailing Lists</title>
+ <para>
+ The <emphasis>gnome-docs-list</emphasis> mailing list is the
+ main discussion area for all contributors to the GNOME
+ Documentation Project. You can find out how to subscribe to
+ this list on <ulink
+ url="http://www.gnome.org/resources/mailing-lists.html"
+ type="http">GNOME Mailing Lists</ulink>. This is a rather
+ low-volume list, so you will not be flooded with messages.
+ </para>
+ </sect2>
+
+<!-- ####### Resources | IRC ####### -->
+
+ <sect2 id="irc">
+ <title>IRC</title>
+ <para>
+ Internet Relay Chat (IRC) is a fast and easy way to get in
+ touch with other GDP members. There are generally at least a
+ few members here who can answer questions or discuss
+ documentation issues. The IRC channel is #docs at
+ irc.gnome.org.
+ </para>
+ </sect2>
+ </sect1>
+
+<!-- ################# Example Docs ###############
+
+ <appendix id="exampledocs">
+ <title>Example Docs</title>
+
+####### Example Docs | Example 1: Application Manual #######
+
+ <sect1 id="ex1">
+ <title>Example 1: Application Manual</title>
+ <programlisting>
+<![CDATA[ (Put sgml here.)]]> </programlisting>
+ </sect1>
+
+####### Example Docs | Example 2: Applet Manual #######
+
+ <sect1 id="ex2">
+ <title>Example 2: Applet Manual</title>
+ <programlisting>
+<![CDATA[(Put sgml here.)]]> </programlisting>
+ </sect1>
+
+##### Example Docs | Example 3: Application Context Sensitive Help ####
+
+ <sect1 id="ex3">
+ <title>Example 3: Application Context Sensitive Help</title>
+ <programlisting>
+<![CDATA[(Put sgml here.)]]> </programlisting>
+ </sect1>
+
+####### Example Docs | Example 4: Complete Application: gnome-hello #######
+
+ <sect1 id="ex4">
+ <title>Example 4: Complete Application: gnome-hello</title>
+ <programlisting>
+<![CDATA[(Put sgml here.)]]> </programlisting>
+ </sect1>
+
+####### Example Docs | Example 5: Tutorial #######
+
+ <sect1 id="ex5">
+ <title>Example 5: Tutorial</title>
+ <programlisting>
+<![CDATA[(Put sgml here.)]]> </programlisting>
+ </sect1>
+ </appendix>-->
+
+<!-- ################# Document Templates ############### -->
+
+ <appendix id="templates">
+ <title>Document Templates</title>
+<!-- ####### Document Templates | Templates 1: Application Manual ####### -->
+
+ <sect1 id="template1">
+ <title>Template 1: Application Manual</title>
+ <para>
+ The following template should be used for all application
+ manuals. You can always get the latest copy of this
+ template from <ulink type="http"
+ url="http://developer.gnome.org/projects/gdp/templates.html">GDP
+ Documentation Templates</ulink>.
+ <programlisting>
+
+<![CDATA[
+<!DOCTYPE Article PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN"[
+ <!-- if not using PNG graphic, replace reference above with
+ .....PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[
+ -->
+<!ENTITY version "1.0.53">
+ <!-- replace version above with actual application version number-->
+ <!-- Template Version: 1.0.1 (do not remove this line) -->
+]>
+
+
+<!-- This is a GNOME documentation template, designed by the GNOME
+ Documentation Project Team. Please use it for writing GNOME
+ documentation, making obvious changes. In particular, all the words
+ written in UPPERCASE (with the exception of GNOME) should be
+ replaced. As for "legalnotice", please leave the reference
+ unchanged.
+
+ Remember that this is a guide, rather than a perfect model to follow
+ slavishly. Make your manual logical and readable. And don't forget
+ to remove these comments in your final documentation! ;-)
+ -->
+
+<!-- =============Document Header ============================= -->
+
+<article id="index"> <!-- please do not change the id -->
+
+ <artheader>
+ <title>MY-GNOME-APP</title>
+ <copyright>
+ <year>2000</year>
+ <holder>ME-THE-AUTHOR</holder>
+ </copyright>
+
+ <!-- translators: uncomment this:
+
+ <copyright>
+ <year>2000</year>
+ <holder>ME-THE-TRANSLATOR (Latin translation)</holder>
+ </copyright>
+
+ -->
+
+ <!-- do not put authorname in the header except in copyright - use
+ section "authors" below -->
+
+ <legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the <citetitle>GNU Free
+ Documentation License</citetitle>, Version 1.1 or any later
+ version published by the Free Software Foundation with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. You may obtain a copy of the <citetitle>GNU Free
+ Documentation License</citetitle> from the Free Software
+ Foundation by visiting <ulink type="http"
+ url="http://www.fsf.org">their Web site</ulink> or by writing
+ to: Free Software Foundation, Inc., 59 Temple Place - Suite
+ 330, Boston, MA 02111-1307, USA.
+ </para>
+ <para>
+ Many of the names used by companies to distinguish their
+ products and services are claimed as trademarks. Where those
+ names appear in any GNOME documentation, and those trademarks
+ are made aware to the members of the GNOME Documentation
+ Project, the names have been printed in caps or initial caps.
+ </para>
+ </legalnotice>
+
+ <!-- this is the version of manual, not application -->
+ <releaseinfo>
+ This is version 1.0 of MY-GNOME-APP manual.
+ </releaseinfo>
+
+ </artheader>
+
+ <!-- ============= Document Body ============================= -->
+
+ <!-- ============= Introduction ============================== -->
+ <sect1 id="intro">
+ <title>Introduction</title>
+
+ <para>
+ <application>MY-GNOME-APP</application> is an application which
+ proves mathematical theorems. It has all the basic features
+ expected from a mathematical theorem prover, as well as a number
+ of advanced ones, such as proof by confusion. In fact, many of
+ the proofs produced by <application>MY-GNOME-APP</application>
+ are so complex that they are capable of proving almost anything
+ with a virtually null likelihood of being disproven. It also has
+ the very popular predecessor of proof by confusion, proof by
+ dialog, first implemented by Plato.
+ </para>
+ <para>
+ It also allows you to save and print theorem proofs and to add
+ comments to the proofs it produces.
+ </para>
+
+ <para>
+ To run <application>MY-GNOME-APP</application>, select
+ <menuchoice>
+ <guisubmenu>SUBMENU</guisubmenu>
+ <guimenuitem>MY-GNOME-APP</guimenuitem>
+ </menuchoice>
+ from the <guimenu>Main Menu</guimenu>, or type
+ <command>MYGNOMEAPP</command> on the command line.
+ </para>
+
+ <para>
+ <application>MY-GNOME-APP</application> is included in the
+ <filename>GNOME-PACKAGE</filename> package, which is part of the
+ GNOME desktop environment. This document describes version
+ &version; of <application>MY-GNOME-APP</application>.
+ </para>
+ </sect1>
+
+
+ <!-- ================ Usage ================================ -->
+ <!-- This section should describe basic usage of the application. -->
+
+ <sect1 id="usage">
+ <title>Using MY-GNOME-APP</title>
+ <para>
+ <application>MY-GNOME-APP</application> can be used to produce a
+ perfect proof of <emphasis>any</emphasis> mathematical theorem
+ (provided, of course, that this theorem is correct), thus
+ providing for new users an easy-to-use graphical interface to
+ modern mathematics. This section describes basic usage of
+ <application>MY-GNOME-APP</application>.
+ </para>
+
+ <!-- ========= Basic Usage =========================== -->
+ <sect2 id="mainwin">
+ <title>Basic usage</title>
+ <para>
+ Starting <application>MY-GNOME-APP</application> opens the
+ <interface>Main window</interface>, shown in <xref
+ linkend="mainwindow-fig">. The window is at first empty.
+
+ <!-- ==== Figure ==== -->
+ <figure id="mainwindow-fig">
+ <title>MY-GNOME-APP Main Window</title>
+ <screenshot>
+ <screeninfo>MY-GNOME-APP Main Window</screeninfo>
+ <graphic fileref="SCREENSHOT" format="png" srccredit="ME">
+ </graphic>
+ </screenshot>
+ </figure>
+ <!-- ==== End of Figure ==== -->
+ </para>
+
+
+ <!-- For this app, one could put "proving" or "edit" (probably even
+ both of them) as sect2's seperate from the main window
+ section. Since they were both so closely involved with the main
+ window, I decided to have them as sect3's isntead. Judgement
+ call. -->
+
+ <sect3 id="proving">
+ <title>Proving a Theorem</title>
+ <para>
+ To get a proof of a theorem, select
+ <menuchoice>
+ <guisubmenu>File</guisubmenu>
+ <guimenuitem>New</guimenuitem>
+ </menuchoice>,
+ which will
+ bring up the <interface>New Proof</interface> dialog box.
+ Enter the statement of the theorem in the
+ <guilabel>Theorem statement</guilabel> field, select your
+ desired proof type from the drop-down menu, and and press
+ <guibutton>Prove!</guibutton>.
+ </para>
+ <para>
+ If <application>MY-GNOME-APP</application> cannot prove the
+ theorem by the method you have chosen, or if you have not
+ selected a proof type at all,
+ <application>MY-GNOME-APP</application> will attempt to
+ choose the one that it thinks is most conclusive. In order,
+ it will attempt to prove the theorem with the following techniques:
+
+ <variablelist>
+ <varlistentry>
+ <term>Deduction</term>
+ <listitem>
+ <para>
+ This is a proof method that is generally accepted
+ for full credit by Logic professors.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Induction</term>
+ <listitem>
+ <para>
+ This logical style will also earn you full credit on
+ your homework.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Dialog</term>
+ <listitem>
+ <para>
+ This logical method is best for Philosophy classes,
+ and will probably only merit partial credit on Logic
+ or Mathematics homework.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Confusion</term>
+ <listitem>
+ <para>
+ Suitable only for political debates, battles of wits
+ against the unarmed, and Philosophy classes focusing
+ on the works of Kant. Use with caution.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+
+ <!-- You might want to include a note, warning, or tip, e.g. -->
+
+ <warning>
+ <title>Proving Incorrect Theorms</title>
+ <para>
+ <application>MY-GNOME-APP</application> cannot prove
+ incorrect theorems. If the theorem you have entered is not
+ demonstrably true, you will get a message to that effect
+ in the main window. To disprove a theorem, ask
+ <application>MY-GNOME-APP</application> to prove its
+ logical inverse.
+ </para>
+ </warning>
+ </sect3>
+ <sect3 id="editing">
+ <title>Editing Proofs</title>
+ <para>
+ Once you have proven the theorem, it will be displayed in
+ the <interface>main window</interface>. There, you can read
+ it over, choose text styles for different portions of it,
+ and make comments on it. This section will guide you through
+ that process.
+ </para>
+ <para>
+ To alter text styles, first select the statement you wish to
+ change by clicking on it once. You can select several
+ statements by Then, choose the style you want to apply from
+ the <guisubmenu>Style</guisubmenu> submenu of the
+ <guimenu>Edit</guimenu> menu.
+ <application>MY-GNOME-APP</application> will convert the
+ text to that style.
+ </para>
+ <para>
+ You can also enter comments on a statement by selecting that
+ statement, and then beginning to type. Comments will appear
+ after the statement you have selected.
+ </para>
+
+ <note>
+ <title>Altering The Proofs Themselves</title>
+ <para>
+ <application>MY-GNOME-APP</application> does not allow you
+ to alter a proof it has produced itself. You can, save
+ your proof as a plain text file (using the
+ <guimenuitem>Save as...</guimenuitem> menu), and alter it
+ that way. Be aware, however, that
+ <application>MY-GNOME-APP</application> uses its own file
+ format for saved proofs, and cannot re-open a file unless
+ it is in the .mga format.
+ </para>
+ </note>
+ </sect3>
+
+
+ <!-- If there are other functions performed from the main window,
+ they belong here. -->
+
+ </sect2>
+
+ <!-- =========================================================
+ Additional Sect2's should describe additional windows, such as
+ larger dialog boxes, or functionality that differs significantly
+ from the most immediate functions of the application. Make the
+ structure logical.
+ ============================================================= -->
+
+
+ <sect2 id="toolbar">
+ <title>Toolbar</title>
+ <para>
+ The toolbar (shown in <xref linkend="figure-usage-toolbar">)
+ provides access to several commonly used routines.
+ <figure id="figure-usage-toolbar">
+ <title>MY-GNOME-APP Toolbar</title>
+ <screenshot>
+ <screeninfo>MY-GNOME-APP Toolbar</screeninfo>
+ <graphic fileref="usage-toolbar.png" format="png"></graphic>
+ </screenshot>
+ </figure>
+ <variablelist>
+ <varlistentry>
+ <term>New</term>
+ <listitem>
+ <para>
+ Brings up the <interface>New Theorem</interface>
+ dialog.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Open</term>
+ <listitem>
+ <para>
+ Open an exisiting theorem you want to prove, or a
+ completed proof you wish to print or format.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Save</term>
+ <listitem>
+ <para>
+ Save the current theorem permanently in a
+ file.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect2>
+ <!-- ========= Menus =========================== -->
+
+ <sect2 id="menubar">
+
+ <!-- Describing the menubar ensures comprehensive feature
+ coverage. Nest itemizedlists inside variablelists so that each
+ menu is easily located by indexing software. Proper indentation
+ makes it easier! -->
+
+ <title>Menus</title>
+ <para>
+ The menu bar, located at the top of the <interface>Main
+ Window</interface>, contains the following menus:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><guimenu>File</guimenu></term>
+ <listitem>
+ <para>
+ This menu contains:
+ <itemizedlist>
+ <listitem>
+ <para>
+ <menuchoice>
+ <shortcut>
+ <keycap>F3</keycap>
+ </shortcut>
+ <guimenuitem>Open</guimenuitem>
+ </menuchoice>
+ &mdash; This opens a file which is saved on your computer.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>S</keycap></keycombo>
+ </shortcut>
+ <guimenuitem>Save</guimenuitem>
+ </menuchoice>
+ &mdash; This saves your file.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>W</keycap></keycombo>
+ </shortcut>
+ <guimenuitem>Close</guimenuitem>
+ </menuchoice>
+ &mdash; This closes your file.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>Q</keycap></keycombo>
+ </shortcut>
+ <guimenuitem>Exit</guimenuitem>
+ </menuchoice>
+ &mdash; This quits the application.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guimenu>Edit</guimenu></term>
+ <listitem>
+ <para>
+ This menu contains:
+ <itemizedlist>
+ <listitem>
+ <para>
+ <menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>X</keycap></keycombo>
+ </shortcut>
+ <guimenuitem>Cut</guimenuitem>
+ </menuchoice>
+ &mdash; This removes any text or data which is selected and
+ places it in the buffer.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>
+ </shortcut>
+ <guimenuitem>Copy</guimenuitem>
+ </menuchoice>
+ &mdash; This copies any text or data which is selected into
+ the buffer.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>V</keycap></keycombo>
+ </shortcut>
+ <guimenuitem>Paste</guimenuitem>
+ </menuchoice>
+ &mdash; This pastes any text or data which is copied into
+ the buffer.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <guimenuitem>COMMAND1&hellip;</guimenuitem>
+ &mdash; This opens the <interface>COMMAND1</interface>
+ dialog, which is used to ....
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <guimenuitem>COMMAND2</guimenuitem>
+ &mdash; This ....
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term><guimenu>Settings</guimenu></term>
+ <listitem>
+ <para>
+ This menu contains:
+ <itemizedlist>
+ <listitem>
+ <para>
+ <guimenuitem>Preferences&hellip;</guimenuitem>
+ &mdash; This opens the <link
+ linkend="prefs"><interface>Preferences
+ Dialog</interface></link>, which allows you to configure
+ many settings.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <guimenuitem>COMMAND3</guimenuitem> &mdash;
+ This command does something.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guimenu>Help</guimenu></term>
+ <listitem>
+ <para>
+ This menu contains:
+ <itemizedlist>
+ <listitem>
+ <para>
+ <guimenuitem>Manual</guimenuitem> &mdash; This
+ opens the <application>GNOME Help
+ Browser</application> and displays this manual.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guimenuitem>About</guimenuitem> &mdash; This
+ opens the <interface>About</interface> dialog
+ which shows basic information about
+ <application>MY-GNOME-APP</application>, such as
+ the author's name, the application version number,
+ and the URL for the application's Web page if one
+ exists.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+ </sect1>
+
+
+
+ <!-- ============= Customization ============================= -->
+
+ <sect1 id="prefs">
+ <title>Customization</title>
+ <para>
+ To change the application settings, select
+ <menuchoice>
+ <guimenu>Settings</guimenu>
+ <guimenuitem>Preferences...</guimenuitem>
+ </menuchoice>. This opens the
+ <interface>Preferences</interface> dialog, shown in <xref
+ linkend="preferences-fig">.
+ </para>
+
+ <figure id="preferences-fig">
+ <title>Preferences Dialog</title>
+ <screenshot>
+ <screeninfo>Preferences Dialog</screeninfo>
+ <graphic fileref="SCREENSHOT" format="png"
+ srccredit="ME">
+ </graphic>
+ </screenshot>
+ </figure>
+
+ <para>
+ The properties in the <guilabel>PREFSTABNAME</guilabel> tab are:
+
+ <!--many people use itemizedlists in cases like this. Variablelists
+ are more appropriate -->
+
+ <variablelist>
+ <varlistentry>
+ <term> <guilabel>Default Text Style</guilabel></term>
+ <listitem>
+ <para>
+ Select the default text style for statements in your
+ proof. You can still change the style for individual
+ proofs or sections of a proof at a later date.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>(Configuration Item Label)</term>
+ <listitem>
+ <para>
+ (Description of Configuration)
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>(Configuration Item Label)</term>
+ <listitem>
+ <para>
+ (Description of Configuration)
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+
+ <para>
+ The properties in the <guilabel>SECONDTABNAME</guilabel> tab are:
+ <variablelist>
+ <varlistentry>
+ <term>(Configuration Item Label)</term>
+ <listitem>
+ <para>
+ (Description of Configuration)
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>(Configuration Item Label)</term>
+ <listitem>
+ <para>
+ (Description of Configuration)
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+
+ <para>
+ After you have made all the changes you want, click on
+ <guibutton>OK</guibutton> to apply the changes and close the
+ <interface>Properties</interface> dialog. To cancel the changes
+ and return to previous values, click the
+ <guibutton>Close</guibutton> button.
+ </para>
+
+ </sect1>
+
+
+ <!-- ============= Various Sections ============================= -->
+
+ <!-- Here you should add, if necessary, several more sect1's,
+ describing other windows (besides the main one), file formats,
+ preferences dialogs, etc. as appropriate. Try not to make any of
+ these sections too long. -->
+
+
+ <!-- ============= Bugs ================================== -->
+ <!-- This section should describe known bugs and limitations of
+ the program if there are any - please be frank and list all
+ problems you know of. -->
+ <sect1 id="bugs">
+ <title>Known Bugs and Limitations</title>
+ <para>
+ This application has no known bugs.
+ </para>
+ </sect1>
+
+
+<!-- ============= Authors ================================ -->
+
+ <sect1 id="authors">
+ <title>Authors</title>
+ <para>
+ <application>MY-GNOME-APP</application> was written by GNOME-HACKER
+ (<email>hacker@gnome.org</email>). To find more information about
+ <application>MY-GNOME-APP</application>, please visit the <ulink
+ url="http://www.my-gnome-app.org" type="http">MY-GNOME-APP Web
+ page</ulink>. Please send all comments, suggestions, and bug
+ reports to the <ulink url="http://bugs.gnome.org" type="http">GNOME
+ bug tracking database</ulink>. (Instructions for submitting bug
+ reports can be found <ulink
+ url="http://bugs.gnome.org/Reporting.html" type="http">
+ on-line</ulink>.) You can also use <application>Bug Report
+ Tool</application> (<command>bug-buddy</command>), available in the
+ <guisubmenu>Utilities</guisubmenu> submenu of <guimenu>Main
+ Menu</guimenu>, for submitting bug reports.
+ </para>
+
+ <para>
+ This manual was written by ME
+ (<email>MYNAME@MYADDRESS</email>). Please send all comments and
+ suggestions regarding this manual to the <ulink type="http"
+ url="http://developer.gnome.org/projects/gdp">GNOME Documentation
+ Project</ulink> by sending an email to
+ <email>docs@gnome.org</email>. You can also add your comments online
+ by using the <ulink type="http"
+ url="http://www.gnome.org/gdp/doctable/">GNOME Documentation Status
+ Table</ulink>.
+ </para>
+
+ <!-- For translations: uncomment this:
+
+ <para>
+ Latin translation was done by ME
+ (<email>MYNAME@MYADDRESS</email>). Please send all comments and
+ suggestions regarding this translation to SOMEWHERE.
+ </para>
+
+ -->
+
+ </sect1>
+
+
+ <!-- ============= Application License ============================= -->
+
+ <sect1 id="license">
+ <title>License</title>
+ <para>
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the <citetitle>GNU General Public
+ License</citetitle> as published by the Free Software Foundation;
+ either version 2 of the License, or (at your option) any later
+ version.
+ </para>
+ <para>
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ <citetitle>GNU General Public License</citetitle> for more details.
+ </para>
+ <para>
+ A copy of the <citetitle>GNU General Public License</citetitle> is
+ included as an appendix to the <citetitle>GNOME Users
+ Guide</citetitle>. You may also obtain a copy of the
+ <citetitle>GNU General Public License</citetitle> from the Free
+ Software Foundation by visiting <ulink type="http"
+ url="http://www.fsf.org">their Web site</ulink> or by writing to
+ <address>
+ Free Software Foundation, Inc.
+ <street>59 Temple Place</street> - Suite 330
+ <city>Boston</city>, <state>MA</state> <postcode>02111-1307</postcode>
+ <country>USA</country>
+ </address>
+ </para>
+ </sect1>
+</article>
+
+
+
+
+
+
+
+
+
+]]>
+
+
+</programlisting>
+ </para>
+ </sect1>
+
+<!-- ####### Document Templates | Templates 2-1.x: Applet Manual ####### -->
+
+ <sect1 id="template2-1x">
+ <title>Template 2: Applet Manual For GNOME 1.x</title>
+ <para>
+ The following templates should be used for all applet
+ manuals in GNOME 1.x releases. You can always get the latest
+ copy of these templates from <ulink type="http"
+ url="http://developer.gnome.org/projects/gdp/templates.html">GDP
+ Documentation Templates</ulink>. Note that the template
+ consists of two files; the first file calls the second as an
+ entity. You should name the first file
+ <filename><replaceable>appletname</replaceable>-applet.sgml</filename>
+ and the second file should be named
+ <filename><replaceable>appletname</replaceable>.sgml</filename>,
+ where
+ <filename><replaceable>appletname</replaceable></filename> is
+ the name of the applet.
+ <programlisting>
+
+<![CDATA[
+<!DOCTYPE Article PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN"[
+ <!entity APPLETNAME.sgml SYSTEM "applet_template_1.sgml">
+ <!-- Template Version: 1.0.1 (do not remove this line) -->
+]>
+
+<!-- This is a GNOME documentation template, designed by the GNOME
+ Documentation Project Team. Please use it for writing GNOME
+ documentation, making obvious changes. In particular, all the words
+ written in UPPERCASE (with the exception of GNOME) should be
+ replaced. As for "legalnotice", please leave the reference
+ unchanged,make sure to add/remove trademarks to the list as
+ appropriate for your document.
+
+ Please don't forget to remove these comments in your final documentation,
+ thanks ;-).
+-->
+
+<article id="index"> <!-- please do not change the id -->
+
+ <!-- ============= Document Header ============================= -->
+ <artheader>
+ <title>APPLETNAME Applet</title>
+ <copyright>
+ <year>2000</year>
+ <holder>YOURFULLNAME</holder>
+ </copyright>
+
+ <!-- translators: uncomment this:
+
+ <copyright>
+ <year>2000</year>
+ <holder>ME-THE-TRANSLATOR (Latin translation)</holder>
+ </copyright>
+
+ -->
+
+ <!-- do not put authorname in the header except in copyright - use
+ section "authors" below -->
+
+ <legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the <citetitle>GNU Free Documentation
+ License</citetitle>, Version 1.1 or any later version published
+ by the Free Software Foundation with no Invariant Sections, no
+ Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy
+ of the <citetitle>GNU Free Documentation License</citetitle> from
+ the Free Software Foundation by visiting <ulink type="http"
+ url="http://www.fsf.org">their Web site</ulink> or by writing to:
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ </para>
+ <para>
+ Many of the names used by companies to distinguish their products and
+ services are claimed as trademarks. Where those names appear in any
+ GNOME documentation, and those trademarks are made aware to the members
+ of the GNOME Documentation Project, the names have been printed in caps
+ or initial caps.
+ </para>
+ </legalnotice>
+
+ <releaseinfo>
+ This is version XXX of the APPLETNAME applet manual.
+ </releaseinfo>
+ </artheader>
+
+ <!-- ============= Document Body ============================= -->
+
+ &APPLETNAME.sgml;
+
+</article>
+
+
+]]>
+
+
+</programlisting>
+ <programlisting>
+<![CDATA[
+ <!-- Template Version: 1.0.1 (do not remove this line) -->
+
+ <sect1 id="APPLET">
+ <title>APPLET Applet</title>
+
+ <para>
+ <application>APPLET</application> applet, shown in <xref
+ linkend="APPLETapplet-fig">, allows you to &hellip;. To add this
+ applet to a <interface>Panel</interface>,
+ right-click on the <interface>Panel</interface> and choose
+ <menuchoice>
+ <guimenu>Panel</guimenu>
+ <guisubmenu>Add to panel</guisubmenu>
+ <guisubmenu>Applet</guisubmenu>
+ <guisubmenu>SECTION</guisubmenu>
+ <guimenuitem>APPLET</guimenuitem>
+ </menuchoice>.
+ </para>
+
+ <figure id="APPLETapplet-fig">
+ <title>APPLET Applet</title>
+ <screenshot>
+ <screeninfo>APPLET Applet</screeninfo>
+ <graphic format="png" fileref="APPLET_applet"
+ srccredit="YOURNAME">
+ </graphic>
+ </screenshot>
+ </figure>
+
+ <!-- ============= Usage ================================ -->
+ <sect2 id="APPLET-usage">
+ <title>Usage</title>
+ <para>
+ (Place a short description of how to use the applet here.)
+ </para>
+
+ <para>
+ Right-clicking on the applet brings up a menu containing the
+ following items:
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <guimenuitem>Properties&hellip;</guimenuitem> &mdash;
+ opens the <link linkend="APPLET-prefs">
+ <guilabel>Properties</guilabel></link> dialog.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guimenuitem>Help</guimenuitem> &mdash;
+ displays this document.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guimenuitem>About&hellip;</guimenuitem> &mdash;
+ shows basic information about <application>APPLET
+ Applet</application>, including the applet's version and the
+ author's name.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </para>
+ </sect2>
+
+
+ <!-- ============= Customization ============================= -->
+ <sect2 id="APPLET-prefs">
+ <title>Customization</title>
+ <para>
+ You can customize <application>APPLET</application>
+ applet by right-clicking on it and choosing
+ <guimenuitem>Properties&hellip;</guimenuitem>. This will open the
+ <interface>Properties</interface> dialog(shown in <xref
+ linkend="APPLET-settings-fig">), which allows you to
+ change various settings.
+ </para>
+
+ <figure id="APPLET-settings-fig">
+ <title>Properties dialog</title>
+ <screenshot>
+ <screeninfo>Properties dialog</screeninfo>
+ <graphic format="png" fileref="APPLET_settings"
+ srccredit="YOURNAME">
+ </graphic>
+ </screenshot>
+ </figure>
+
+ <para>
+ The properties are:
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ (Configuration Item Label) &mdash; If this button is
+ checked&hellip;(description)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ (Configuration Item Label) &mdash; Selecting this
+ button&hellip;(description)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ (Configuration Item Label) &mdash; Enter the name of
+ &hellip;(description)
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ After you have made all the changes you want, click on
+ <guibutton>OK</guibutton> to apply the changes and close the
+ <interface>Properties</interface> dialog. To cancel the changes
+ and return to previous values, click the
+ <guibutton>Close</guibutton> button.
+ </para>
+ </sect2>
+
+
+ <!-- ============= Bugs ================================== -->
+ <!-- This section should describe known bugs and limitations of
+ the program if there are any - please be frank and list all
+ problems you know of -->
+ <sect2 id="bugs">
+ <title>Known Bugs and Limitations</title>
+ <para>
+ This applet has no known bugs.
+ </para>
+ </sect2>
+
+
+ <!-- ============= Authors ================================ -->
+
+ <sect2 id="authors">
+ <title>Authors</title>
+ <para>
+ <application>APPLET</application> was written by GNOME-HACKER
+ (<email>hacker@gnome.org</email>). Please send all comments,
+ suggestions, and bug
+ reports to the <ulink url="http://bugs.gnome.org" type="http">GNOME
+ bug tracking database</ulink>. (Instructions for submitting bug
+ reports can be found <ulink
+ url="http://bugs.gnome.org/Reporting.html" type="http">
+ on-line</ulink>. You can also use <application>Bug Report
+ Tool</application> (<command>bug-buddy</command>), available in the
+ <guisubmenu>Utilities</guisubmenu> submenu of <guimenu>Main
+ Menu</guimenu>, for submitting bug reports.
+ </para>
+
+ <para>
+ This manual was written by ME
+ (<email>MYNAME@MYADDRESS</email>). Please send all comments and
+ suggestions regarding this manual to the <ulink type="http"
+ url="http://developer.gnome.org/projects/gdp">GNOME Documentation
+ Project</ulink> by sending an email to
+ <email>docs@gnome.org</email>. You can also submit comments online
+ by using the <ulink type="http"
+ url="http://www.gnome.org/gdp/doctable/">GNOME Documentation
+ Status Table</ulink>.
+ </para>
+
+ <!-- For translations: uncomment this:
+
+ <para>
+ Latin translation was done by ME
+ (<email>MYNAME@MYADDRESS</email>). Please send all comments and
+ suggestions regarding this translation to SOMEWHERE.
+ </para>
+
+ -->
+
+ </sect2>
+
+
+ <!-- ============= Application License ============================= -->
+
+ <sect2 id="license">
+ <title>License</title>
+ <para>
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the <citetitle>GNU General Public
+ License</citetitle> as published by the Free Software Foundation;
+ either version 2 of the License, or (at your option) any later
+ version.
+ </para>
+ <para>
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ <citetitle>GNU General Public License</citetitle> for more details.
+ </para>
+ <para>
+ A copy of the <citetitle>GNU General Public License</citetitle> is
+ included as an appendix to the <citetitle>GNOME Users
+ Guide</citetitle>. You may also obtain a copy of the
+ <citetitle>GNU General Public License</citetitle> from the Free
+ Software Foundation by visiting <ulink type="http"
+ url="http://www.fsf.org">their Web site</ulink> or by writing to
+ <address>
+ Free Software Foundation, Inc.
+ <street>59 Temple Place</street> - Suite 330
+ <city>Boston</city>, <state>MA</state> <postcode>02111-1307</postcode>
+ <country>USA</country>
+ </address>
+ </para>
+ </sect2>
+
+ </sect1>
+
+
+
+
+]]>
+
+
+
+</programlisting>
+ </para>
+ </sect1>
+
+<!-- ####### Document Templates | Templates 2-2.x: Applet Manual ####### -->
+
+ <sect1 id="template2-2x">
+ <title>Template 2: Applet Manual For GNOME 2.x</title>
+ <para>
+ The following templates should be used for all applet
+ manuals in GNOME 2.x releases. You can always get the latest
+ copy of these templates from <ulink type="http"
+ url="http://developer.gnome.org/projects/gdp/templates.html">GDP
+ Documentation Templates</ulink>.
+ </para>
+ <para>
+ Note that this template consists of two files. The first file
+ is an introductory chapter. You should not modify this
+ chapter. The second file is the actual applet document, which
+ you should modify to describe the applet you are documenting.
+ You can name the first file whatever you like, such as
+ <filename>gnome-applets.sgml</filename>. Name the second file
+ according to the applet's name:
+ <filename><replaceable>appletname</replaceable>-applet.sgml</filename>.
+ Make sure you update the entity
+ at the top of the shell document to reflect the new name of
+ the applet document.
+ </para>
+ <para>
+ <programlisting>
+<![CDATA[
+<!DOCTYPE book PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN"[
+<!ENTITY TEMPLATE-APPLET SYSTEM "gnome-applet-template.sgml.part">
+
+]>
+
+<book id="gnome-applets">
+
+ <bookinfo>
+ <title>GNOME Applets</title>
+ <authorgroup>
+ <author><firstname>Telsa</firstname><surname>Gwynne</surname></author>
+ <author><firstname>John</firstname><surname>Fleck</surname></author>
+ <author><firstname>David</firstname><surname>Mason</surname>
+ <affiliation><orgname>Red Hat, Inc.</orgname></affiliation>
+ </author>
+ <author><firstname>Dan</firstname><surname>Mueth</surname></author>
+ <author><firstname>Alexander</firstname><surname>Kirillov</surname></author>
+ </authorgroup>
+ <edition>GNOME Applets version 0.1 for GNOME 1.1.5</edition>
+ <pubdate>2000</pubdate>
+ <copyright>
+ <year>2000</year>
+ <holder>Telsa Gwynne, John Fleck, Red Hat Inc., Dan Mueth, and
+ Alexander Kirillov</holder>
+ </copyright>
+ <legalnotice>
+ <para>
+ Permission is granted to make and distribute verbatim copies of this
+ manual provided the copyright notice and this permission notice are
+ preserved on all copies.
+ </para>
+ <para>
+ Permission is granted to copy and distribute modified versions of
+ this manual under the conditions for verbatim copying, provided that
+ the entire resulting derived work is distributed under the terms of a
+ permission notice identical to this one.
+ </para>
+ <para>
+ Permission is granted to copy and distribute translations of this
+ manual into another language, under the above conditions for modified
+ versions, except that this permission notice may be stated in a
+ translation approved by the Free Software Foundation.
+ </para>
+ <para>
+ Many of the names used by companies to distinguish their products and
+ services are claimed as trademarks. Where those names appear in any
+ GNOME documentation, and those trademarks are made aware to the members
+ of the GNOME Documentation Project, the names have been printed in caps
+ or initial caps.
+ </para>
+ </legalnotice>
+ </bookinfo>
+
+ <!-- #### Introduction ###### -->
+ <chapter id="applets-intro">
+ <title>Introduction</title>
+
+ <!-- #### Intro | What Are Applets? ###### -->
+ <sect1 id="applets-what-are">
+ <title>What Are Applets?</title>
+ <para>
+ Applets are one of the most popular and useful objects you can add
+ to your <interface>Panel</interface> to customize your desktop.
+ An applet is a small application which runs inside a small area of
+ your <interface>Panel</interface>. Applets have been written for
+ a wide range of purposes. Some are very powerful interactive
+ tools, such as the <application>Tasklist</application> Applet
+ which allows you to easily
+ control all of your main applications. Others are simple system
+ monitors, displaying information such as the amount of power left
+ in the battery on your laptop (see <application>Battery Charge
+ Monitor</application>) or weather
+ information(see <application>GNOME Weather</application>). Some
+ are simply for amusement(see <application>Fish</application>).
+ </para>
+
+ <para>
+ Applets are similar to swallowed applications in that both of them
+ reside within the <interface>Panel</interface>. However,
+ swallowed applications are generally applications which were
+ not designed to run within the <interface>Panel</interface>.
+ Typically one will swallow an application which already exists in
+ the main <interface>desktop</interface> area, putting it into your
+ <interface>Panel</interface>. The application will continue to
+ run in the <interface>Panel</interface> until you end the
+ application or unswallow it, placing it back onto the main part of
+ your desktop when you need to.
+ </para>
+
+ <para>
+ <figure id="example-applets-fig">
+ <title>Example Applets</title>
+ <screenshot>
+ <screeninfo>Example Applets</screeninfo>
+ <graphic fileref="example_applets" format="png"
+ srccredit="muet">
+ </graphic>
+ </screenshot>
+ </figure>
+ Several example applets are shown in <xref
+ linkend="example-applets-fig">. From left to right, they are: (1)
+ <application>Mixer Applet</application>, which allows you to turn
+ on/off sound and control its volume by clicking on the applet. (2)
+ <application>Sound Monitor</application> Applet, which displays
+ the current volume of sound being played and allows you to control
+ various sound features. (3) <application>GTCD</application>
+ Applet, a CD player which has all its controls
+ available in the applet and displays the track and time. (4)
+ <application>Drive Mount</application> Applet, used to mount and
+ unmount drives with a single click of the mouse. (5)
+ <application>Desk Guide</application> which allows you to view
+ and control multiple virtual screens. (6)
+ <application>Tasklist</application> Applet which allows you to
+ control your various windows and applications.
+ </para>
+ <para>
+ There are many other applets to choose from. The rest of this
+ chapter will explain the basic information to get you started
+ adding, moving, and removing applets from your
+ <interface>Panels</interface> and using them. The following
+ chapters go through each of the standard GNOME applets describing
+ them in detail. There are also additional applets which can be
+ downloaded off the Web. See <ulink type="http"
+ url="http://www.gnome.org/applist/list-martin.phtml">The GNOME
+ Software Map</ulink> for lists of additional GNOME applications
+ and applets.
+ </para>
+ <para>
+ As you read through the the rest of this chapter, you should try
+ adding and removing applets from your <interface>Panel</interface> and
+ experiment with them freely.
+ </para>
+ </sect1>
+
+ <!-- #### Intro | Adding, Moving, and Removing Applets ###### -->
+ <sect1 id="applet-add-move-replace">
+ <title>Adding, Moving, and Removing Applets</title>
+
+ <sect2 id="adding-applets">
+ <title>Adding Applets to a Panel</title>
+ <para>
+ To add an applet to a <interface>Panel</interface>, right-click
+ on the <interface>Panel</interface> and select
+ <menuchoice><guimenu>Panel</guimenu><guisubmenu>Add to panel</guisubmenu>
+ <guisubmenu>Applet</guisubmenu></menuchoice>. This will show you
+ the menu of all the applets on your system, divided into
+ categories. Choosing any applet from this menu will add it to the
+ <interface>Panel</interface>.
+ </para>
+ </sect2>
+
+ <sect2 id="moving-applets">
+ <title>Moving Applets In or Between Panels</title>
+ <para>
+ It is easy to move applets in a <interface>Panel</interface> or
+ between two <interface>Panels</interface>. If you have a
+ three-button mouse, just move the mouse over the applet, depress
+ the middle mouse button and drag the applet to its new location,
+ releasing the middle mouse button when you are finished. Note
+ that you can drag applets within a <interface>Panel</interface>
+ or between two <interface>Panels</interface> this way. If you
+ don't have a three-button mouse, just
+ right-click on the applet and choose
+ <guimenuitem>Move</guimenuitem>. The cursor will turn into a
+ cross and the applet will move with your mouse until you press
+ any mouse button to indicate you are finished moving it.
+ If, in the course of this movement, it hits
+ other objects, the behavior depends on the global preferences
+ you have set for your <interface>Panels</interface> in the
+ <application>GNOME Control Center</application>: the applet you are
+ moving can switch places with other objects, "push" all objects
+ it meets, or "jump" over all other objects without disturbing
+ them. You can also override the default behavior by holding
+ <keycap>Shift</keycap> button (for "push" mode),
+ <keycap>Ctrl</keycap> (for "switched" mode), or
+ <keycap>Alt</keycap> (for "free" mode, i.e. jumping other other
+ objects without disturbing them) button while dragging.
+ </para>
+ <para>
+ To change the global Panel preferences, right-click on any applet
+ or <interface>Panel</interface> and select
+ <menuchoice>
+ <guimenu>Panel</guimenu>
+ <guimenuitem>Global Preferences...</guimenuitem>
+ </menuchoice>.
+ The <guilabel>Default movement mode</guilabel> is set under the
+ <guilabel>Applets</guilabel> tab.
+ </para>
+ </sect2>
+
+ <sect2 id="removing-applets">
+ <title>Removing Applets from a Panel</title>
+ <para>
+ To remove an applet from a <interface>Panel</interface>,
+ right-click on the applet and select <guimenuitem>Remove from
+ panel...</guimenuitem>.
+ </para>
+ </sect2>
+ </sect1>
+
+
+ <!-- #### Intro | The Right-Click Pop-Up Menu ###### -->
+ <sect1 id="right-click-pop-up-menu">
+ <title>The Right-Click Pop-Up Menu</title>
+ <para>
+ Clicking the right mouse button on any applet brings up
+ a <guimenu>pop-up menu</guimenu>. This
+ menu always has certain standard menu items in it and
+ often has additional items which vary depending on the particular
+ applet.
+ </para>
+ <sect2 id="standard-right-click-items">
+ <title>Standard Pop-Up Items</title>
+ <para>
+ All applets should have the following items in their right-click
+ <guimenu>pop-up menu</guimenu>:
+ <variablelist>
+ <varlistentry>
+ <term>Remove from panel</term>
+ <listitem>
+ <para>
+ The <guimenuitem>Remove from panel</guimenuitem> menu item
+ removes the applet from the <interface>Panel</interface>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Move</term>
+ <listitem>
+ <para>
+ After selecting <guimenuitem>Move</guimenuitem>, your mouse
+ pointer will change appearance (typically to a cross with
+ arrows in each direction). As you move your mouse, the applet
+ will move with it. When you have finished moving the applet,
+ click any mouse button and the applet will anchor in its
+ current position. Note that applets can be moved between two
+ <interface>Panels</interface> this way.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Panel</term>
+ <listitem>
+ <para>
+ The <guisubmenu>Panel</guisubmenu> submenu contains various
+ items and submenus for adding and removing
+ <interface>Panels</interface> and applets and for changing
+ the configuration.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>About</term>
+ <listitem>
+ <para>
+ The <guimenuitem>About...</guimenuitem> menu item brings up a
+ dialogue box containing various information about the applet,
+ typically including the applet's name, version, author,
+ copyright, license and desciption.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Help</term>
+ <listitem>
+ <para>
+ The <guimenuitem>Help</guimenuitem> menu item brings up the help
+ manual for the applet.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect2>
+
+ <sect2 id="applet-properties-dialog">
+ <title>The Applet Properties Dialog</title>
+ <para>
+ Many applets have customizable properties. These applets will
+ have a <guimenuitem>Properties...</guimenuitem> menu item in their
+ right-click <guimenu>pop-up menu</guimenu> which brings up the
+ <interface>Properties</interface> dialog where you can alter the
+ appearance or behaviour of the applet.
+ <figure id="example-props-dialog-fig">
+ <title>An Example Applet Properties Dialog</title>
+ <screenshot>
+ <screeninfo>An Example Applets Properties Dialog</screeninfo>
+ <graphic fileref="applet_props_dialog" format="png"
+ srccredit="muet">
+ </graphic>
+ </screenshot>
+ </figure>
+ All <interface>Properties</interface> dialogs have the following
+ buttons at the bottom of the dialog:
+ <itemizedlist>
+ <listitem>
+ <para>
+ <guibutton>OK</guibutton> &mdash;
+ Pressing <guibutton>OK</guibutton> will activate any changes
+ in the properties you have made and close the
+ <interface>Properties</interface> dialog.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <guibutton>Apply</guibutton> &mdash;
+ Pressing <guibutton>Apply</guibutton> at any time will
+ make your changes active without closing the
+ <interface>Properties</interface> dialog. This is helpful if
+ you would like to test the effects of the changes you have
+ made but may want to continue changing the properties.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <guibutton>Close</guibutton> &mdash;
+ Pressing <guibutton>Close</guibutton> will close the
+ <interface>Properties</interface> dialog. Only changes in the
+ configuration which were previously applied with the
+ <guibutton>Apply</guibutton> button will persist. Other
+ changes will not be made active.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <guibutton>Help</guibutton> &mdash;
+ Pressing <guibutton>Help</guibutton> brings up the manual for
+ the application, opening it to the page describing the
+ <interface>Properties</interface> dialog.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+
+ <sect2 id="common-right-click-items">
+ <title>Other Common Pop-Up Items</title>
+ <para>
+ Many applets also have one or more of the following items in their
+ right-click pop-up menu:
+ <variablelist>
+ <varlistentry>
+ <term>Run...</term>
+ <listitem>
+ <para>
+ The <guimenuitem>Run...</guimenuitem> menu item generally
+ invokes a program which is related to the applet in some way
+ but which runs in its own window rather than in the
+ panel. For example:
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ The <application>CPU Load</application> applet, which monitors
+ what programs are running, has a <guimenuitem>Run
+ gtop...</guimenuitem> menu item. Selecting this menu item
+ starts <application>GTop</application>, which allows you to
+ view and control programs which are running.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The <application>CD Player</application> applet has a
+ <guimenuitem>Run gtcd...</guimenuitem> menu item which
+ starts the GNOME <application>CD Player</application> when
+ selected, which has more capabilities than the applet.
+ </para>
+ </listitem>
+ </orderedlist>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="feedback">
+ <title>Feedback</title>
+ <sect2 id="reporting-bugs">
+ <title>Reporting Applet Bugs</title>
+ <para>
+ GNOME users are encouraged to report bugs to <ulink type="http"
+ url="http://bugs.gnome.org">The GNOME Bug Tracking
+ System</ulink>. The easiest way to submit bugs is to use the
+ <application>Bug Report Tool</application> program by selecting
+ <menuchoice>
+ <guimenu>Main Menu</guimenu> <guisubmenu>Utilities</guisubmenu>
+ <guimenuitem>Bug Report Tool</guimenuitem>
+ </menuchoice>.
+ Be sure to be complete in describing what you did to cause the
+ bug to surface and, if possible, describe how the developer can
+ reproduce the the scenario.
+ </para>
+ </sect2>
+ <sect2 id="documentation-feedback">
+ <title>Providing Feedback</title>
+ <para>
+ GNOME users are welcome to provide suggestions for how
+ applications and documentation can be improved. Suggestions for
+ application changes should be submitted using the
+ <application>Bug Report Tool</application> discussed above.
+ Suggestions for documentation changes can be emailed directly to
+ the documentation author (whose email should be included in the
+ "Authors" section of the document) or by sending an email to
+ <email>docs@gnome.org</email>.
+ </para>
+ </sect2>
+ <sect2 id="joining-gnome">
+ <title>Joining GNOME</title>
+ <para>
+ GNOME is a community project, created by hundreds of programmers,
+ documentation writers, icon design artists, web masters, and
+ other people, most of whom work on a volunteer basis. New GNOME
+ contributors are always welcome. To join the GNOME team, visit
+ these web sites: developers &mdash; <ulink type="http"
+ url="http://developer.gnome.org">The GNOME Development
+ Site</ulink>, documentation writers &mdash; <ulink type="http"
+ url="http://developer.gnome.org/projects/gdp">The GNOME Documentation
+ Project</ulink>, icon design artists &mdash; <ulink type="http"
+ url="http://gnome-icons.sourceforge.net/">Gnome Icon Web</ulink>,
+ general &mdash; <ulink type="http"
+ url="http://developer.gnome.org/helping/">Helping GNOME</ulink>,
+ or just join the gnome-list email list (see <ulink type="http"
+ url="http://www.gnome.org/resources/mailing-lists.html">GNOME Mailing
+ Lists</ulink>) to discuss what you are interested in doing.
+ </para>
+ </sect2>
+ </sect1>
+ </chapter>
+
+ <!-- ############### Template Applets ##################### -->
+ <chapter id="template-applets">
+ <title>Template Applets</title>
+
+ &TEMPLATE-APPLET
+
+ </chapter>
+
+</book>
+
+
+
+
+
+
+
+]]>
+ </programlisting>
+
+ <programlisting>
+<![CDATA[
+
+ <!-- Please replace everywhere below GNOMEAPPLET with the name of -->
+ <!-- your applet. Most importantly, all id attributes should start -->
+ <!-- with the name of your applet - this is necessary to avoid name -->
+ <!-- conflict among different applets -->
+ <!-- Please replace YOUR-NAME with your name and YOUR-EMAIL with your email-->
+ <!-- Please replace HACKER-NAME with the applet author's name and -->
+ <!-- HACKER-EMAIL with the applet author's email -->
+
+ <!-- You should name your file: GNOMEAPPLET-applet.sgml -->
+ <!-- Screenshots should be in PNG format and placed in the -->
+ <!-- same directory as GNOMEAPPLET-applet.sgml -->
+
+ <!-- Applet docs will be merged into <chapter>'s inside a -->
+ <!-- <book>. Thus, the indentation below (2 spaces before the <sect1>) is -->
+ <!-- correct.-->
+
+ <!-- Permission is granted to make and distribute verbatim copies of -->
+ <!-- this manual provided the copyright notice and this permission -->
+ <!-- notice are preserved on all copies. -->
+ <!-- -->
+ <!-- Permission is granted to copy and distribute modified versions of -->
+ <!-- this manual under the conditions for verbatim copying, provided -->
+ <!-- that the entire resulting derived work is distributed under the -->
+ <!-- terms of a permission notice identical to this one. -->
+ <!-- -->
+ <!-- Permission is granted to copy and distribute translations of this -->
+ <!-- manual into another language, under the above conditions for -->
+ <!-- modified versions, except that this permission notice may be -->
+ <!-- stated in a translation approved by the Foundation. -->
+
+ <!-- ############### GNOMEAPPLET ############### -->
+ <sect1 id="GNOMEAPPLET">
+ <title>GNOMEAPPLET Applet</title>
+
+ <para>
+ <application>GNOMEAPPLET</application> applet, shown in <xref
+ linkend="GNOMEAPPLET-fig">, does this and that. To learn how to
+ add this applet to a <interface>Panel</interface>, see <xref
+ linkend="adding-applets">.
+ </para>
+
+
+ <figure id="GNOMEAPPLET-fig">
+ <title>GNOMEAPPLET</title>
+ <screenshot>
+ <screeninfo>GNOMEAPPLET</screeninfo>
+ <graphic format="png" fileref="GNOMEAPPLET-fig" srccredit="ME">
+ </graphic>
+ </screenshot>
+ </figure>
+
+ <sect2 id="GNOMEAPPLET-usage">
+ <title>Usage</title>
+ <para>
+ This applet does nothing. To use it, just
+ left-click on it and it will instantly do nothing.
+ </para>
+ </sect2>
+
+ <sect2 id="GNOMEAPPLET-right-click">
+ <title>Right-Click Pop-Up Menu Items</title>
+ <para>
+ In addition to the standard menu items (see <xref
+ linkend="standard-right-click-items">), the right-click pop-up menu has
+ the following items:
+ <itemizedlist>
+ <listitem>
+ <para>
+ <guimenuitem>Properties...</guimenuitem> &mdash; This menu
+ item opens the <interface>Properties</interface> dialog (see
+ <xref linkend="GNOMEAPPLET-properties">) which allows you to
+ customize the appearance and behavior of this applet.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <guimenuitem>Run Hello World...</guimenuitem> &mdash; This
+ menu item starts the program <application>Hello
+ World</application>, used to say "hello" to the world.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+
+ <sect2 id="GNOMEAPPLET-properties">
+ <title>Properties</title>
+ <para>
+ You can configure <application>GNOMEAPPLET</application> applet by
+ right-clicking on the applet and choosing the
+ <guimenuitem>Properties...</guimenuitem> menu item. This will open the
+ <interface>Properties</interface> dialog, shown in <xref
+ linkend="GNOMEAPPLET-properties-fig">.
+ </para>
+ <figure id="GNOMEAPPLET-properties-fig">
+ <title>Properties Dialog</title>
+ <screenshot>
+ <screeninfo>Properties Dialog</screeninfo>
+ <graphic format="png" fileref="GNOMEAPPLET-properties" srccredit="ME">
+ </graphic>
+ </screenshot>
+ </figure>
+
+ <para>
+ To change the color of the applet, click on the
+ <guibutton>color</guibutton> button. To change other properties,
+ click on other buttons.
+ </para>
+
+ <para>
+ For more information on the <interface>Properties</interface>
+ dialog, including descriptions of the <guibutton>OK</guibutton>,
+ <guibutton>Apply</guibutton>, <guibutton>Cancel</guibutton>, and
+ <guibutton>Help</guibutton> buttons, see <xref
+ linkend="applet-properties-dialog">.
+ </para>
+ </sect2>
+
+ <sect2 id="GNOMEAPPLET-bugs">
+ <title> Known Bugs and Limitations</title>
+ <para>
+ There are no known bugs in the
+ <application>GNOMEAPPLET</application> applet.
+ </para>
+ </sect2>
+
+ <sect2 id="GNOMEAPPLET-authors">
+ <title>Authors</title>
+ <para>
+ This applet was writen by HACKER-NAME
+ <email>HACKER-EMAIL</email>. The documentation for this applet
+ which you are reading now was written by
+ YOUR-NAME <email>YOUR-EMAIL</email>. For information on submitting
+ bug reports and suggestions for improvements, see <xref
+ linkend="feedback">.
+ </para>
+ </sect2>
+
+ </sect1>
+
+
+
+
+
+]]>
+
+
+</programlisting>
+ </para>
+ </sect1>
+
+<!-- ####### Document Templates | Templates 3: Application Help #######
+
+ <sect1 id="template3">
+ <title>Template 2: Application Help</title>
+ <programlisting>
+<![CDATA[(Put sgml here.)]]> </programlisting>
+ </sect1>
+
+####### Document Templates | Templates 4: Application Context Sensitive Help #######
+
+ <sect1 id="template4">
+ <title>Template 3: Application Context Sensitive Help</title>
+ <para>
+ Context sensitive help is still in development.
+ </para>
+ </sect1>
+
+####### Document Templates | Templates 5: Complete Application: gnome-hello #######
+
+ <sect1 id="template5">
+ <title>Template 4: Complete Application: gnome-hello</title>
+ <programlisting>
+<![CDATA[(Put sgml here.)]]>
+ </programlisting>
+ </sect1>
+
+####### Document Templates | Templates 6: Tutorial #######
+
+ <sect1 id="template6">
+ <title>Template 5: Tutorial</title>
+ <programlisting>
+<![CDATA[(Put sgml here.)]]>
+ </programlisting>
+ </sect1>-->
+ </appendix>
+
+</article>
diff --git a/test/relaxng/empty0.rng b/test/relaxng/empty0.rng
new file mode 100644
index 0000000..dbe4f5e
--- /dev/null
+++ b/test/relaxng/empty0.rng
@@ -0,0 +1,16 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="top"/>
+ </start>
+ <define name="empty">
+ <empty/>
+ </define>
+ <define name="top">
+ <element name="top">
+ <ref name="empty"/>
+ <element name="a">
+ <text/>
+ </element>
+ </element>
+ </define>
+</grammar>
diff --git a/test/relaxng/empty0_0.xml b/test/relaxng/empty0_0.xml
new file mode 100644
index 0000000..32b42bc
--- /dev/null
+++ b/test/relaxng/empty0_0.xml
@@ -0,0 +1,3 @@
+<top>
+ <a/>
+</top>
diff --git a/test/relaxng/empty1.rng b/test/relaxng/empty1.rng
new file mode 100644
index 0000000..45dceff
--- /dev/null
+++ b/test/relaxng/empty1.rng
@@ -0,0 +1,18 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="top"/>
+ </start>
+ <define name="empty">
+ <empty/>
+ </define>
+ <define name="top">
+ <element name="top">
+ <choice>
+ <ref name="empty"/>
+ <element name="a">
+ <text/>
+ </element>
+ </choice>
+ </element>
+ </define>
+</grammar>
diff --git a/test/relaxng/empty1_0.xml b/test/relaxng/empty1_0.xml
new file mode 100644
index 0000000..32b42bc
--- /dev/null
+++ b/test/relaxng/empty1_0.xml
@@ -0,0 +1,3 @@
+<top>
+ <a/>
+</top>
diff --git a/test/relaxng/empty1_1.xml b/test/relaxng/empty1_1.xml
new file mode 100644
index 0000000..a5a04a7
--- /dev/null
+++ b/test/relaxng/empty1_1.xml
@@ -0,0 +1,2 @@
+<top>
+</top>
diff --git a/test/relaxng/inline.rng b/test/relaxng/inline.rng
new file mode 100644
index 0000000..7b40959
--- /dev/null
+++ b/test/relaxng/inline.rng
@@ -0,0 +1,20 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="inline"/>
+ </start>
+
+ <define name="inline">
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <element name="code">
+ <ref name="inline"/>
+ </element>
+ <element name="em">
+ <ref name="inline"/>
+ </element>
+ <!-- etc -->
+ </choice>
+ </zeroOrMore>
+ </define>
+</grammar>
diff --git a/test/relaxng/inline2.rng b/test/relaxng/inline2.rng
new file mode 100644
index 0000000..088dc2b
--- /dev/null
+++ b/test/relaxng/inline2.rng
@@ -0,0 +1,21 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <define name="inline">
+ <zeroOrMore>
+ <ref name="inline.class"/>
+ </zeroOrMore>
+ </define>
+
+ <define name="inline.class">
+ <choice>
+ <text/>
+ <element name="bold">
+ <ref name="inline"/>
+ </element>
+ <element name="italic">
+ <ref name="inline"/>
+ </element>
+ </choice>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/inline3.rng b/test/relaxng/inline3.rng
new file mode 100644
index 0000000..72f9db6
--- /dev/null
+++ b/test/relaxng/inline3.rng
@@ -0,0 +1,22 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <define name="inline">
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <element name="bold">
+ <ref name="inline"/>
+ </element>
+ <element name="italic">
+ <ref name="inline"/>
+ </element>
+ <ref name="inline.extra"/>
+ </choice>
+ </zeroOrMore>
+ </define>
+
+ <define name="inline.extra">
+ <notAllowed/>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/interleave0_0.rng b/test/relaxng/interleave0_0.rng
new file mode 100644
index 0000000..b105549
--- /dev/null
+++ b/test/relaxng/interleave0_0.rng
@@ -0,0 +1,24 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <interleave>
+ <zeroOrMore>
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="company">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </zeroOrMore>
+ </interleave>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/interleave1_0.rng b/test/relaxng/interleave1_0.rng
new file mode 100644
index 0000000..e8e94d0
--- /dev/null
+++ b/test/relaxng/interleave1_0.rng
@@ -0,0 +1,15 @@
+<element name="doc" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="a">
+ <empty/>
+ </element>
+ <zeroOrMore>
+ <element name="b">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ </interleave>
+ <element name="c">
+ <empty/>
+ </element>
+</element>
diff --git a/test/relaxng/log b/test/relaxng/log
new file mode 100644
index 0000000..cd0e15c
--- /dev/null
+++ b/test/relaxng/log
@@ -0,0 +1,275 @@
+Start validating ref pattern on element
+ Start validating def pattern on element
+ Start validating choice on element
+ Start validating element element on element
+ Start validating choice on text
+ Start validating attribute name on text
+xmlRelaxNGValidateAttribute(name): 0
+ Validating attribute name suceeded
+ Validating choice suceeded
+ Start validating ref common-atts on text
+ Start validating def common-atts on text
+ Start validating optional on text
+ Start validating attribute ns on text
+ Validating attribute ns failed
+ Validating optional suceeded
+ Start validating optional on text
+ Start validating attribute datatypeLibrary on text
+ Validating attribute datatypeLibrary failed
+ Validating optional suceeded
+ Start validating zeroOrMore on text
+ Start validating attribute on text
+ Validating attribute failed
+ Validating zeroOrMore suceeded
+ Validating def common-atts suceeded
+ Validating ref common-atts suceeded
+ Start validating ref open-patterns on text
+ Start validating def open-patterns on text
+ Start validating interleave on text
+ Start validating oneOrMore on zeroOrMore
+ Start validating ref pattern on zeroOrMore
+ Start validating def pattern on zeroOrMore
+ Start validating choice on zeroOrMore
+ Start validating element element on zeroOrMore
+ Validating element element failed
+ Start validating element attribute on zeroOrMore
+ Validating element attribute failed
+ Start validating element group on zeroOrMore
+ Validating element group failed
+ Start validating element interleave on zeroOrMore
+ Validating element interleave failed
+ Start validating element choice on zeroOrMore
+ Validating element choice failed
+ Start validating element optional on zeroOrMore
+ Validating element optional failed
+ Start validating element zeroOrMore on zeroOrMore
+ Start validating ref common-atts on text
+ Start validating def common-atts on text
+ Start validating optional on text
+ Start validating attribute ns on text
+ Validating attribute ns failed
+ Validating optional suceeded
+ Start validating optional on text
+ Start validating attribute datatypeLibrary on text
+ Validating attribute datatypeLibrary failed
+ Validating optional suceeded
+ Start validating zeroOrMore on text
+ Start validating attribute on text
+ Validating attribute failed
+ Validating zeroOrMore suceeded
+ Validating def common-atts suceeded
+ Validating ref common-atts suceeded
+ Start validating ref open-patterns on text
+ Start validating def open-patterns on text
+ Start validating interleave on text
+ Start validating oneOrMore on element
+ Start validating ref pattern on element
+ Start validating def pattern on element
+ Start validating choice on element
+ Start validating element element on element
+ Start validating choice on text
+ Start validating attribute name on text
+xmlRelaxNGValidateAttribute(name): 0
+ Validating attribute name suceeded
+ Validating choice suceeded
+ Start validating ref common-atts on text
+ Start validating def common-atts on text
+ Start validating optional on text
+ Start validating attribute ns on text
+ Validating attribute ns failed
+ Validating optional suceeded
+ Start validating optional on text
+ Start validating attribute datatypeLibrary on text
+ Validating attribute datatypeLibrary failed
+ Validating optional suceeded
+ Start validating zeroOrMore on text
+ Start validating attribute on text
+ Validating attribute failed
+ Validating zeroOrMore suceeded
+ Validating def common-atts suceeded
+ Validating ref common-atts suceeded
+ Start validating ref open-patterns on text
+ Start validating def open-patterns on text
+ Start validating interleave on text
+ Start validating ref other
+ Start validating def other
+ Start validating zeroOrMore
+ Validating zeroOrMore suceeded
+ Validating def other suceeded
+ Validating ref other suceeded
+ Start validating oneOrMore
+ Start validating ref pattern
+ Start validating def pattern
+ Start validating choice
+ Start validating element element
+ Validating element element failed
+ Start validating element attribute
+ Validating element attribute failed
+ Start validating element group
+ Validating element group failed
+ Start validating element interleave
+ Validating element interleave failed
+ Start validating element choice
+ Validating element choice failed
+ Start validating element optional
+ Validating element optional failed
+ Start validating element zeroOrMore
+ Validating element zeroOrMore failed
+ Start validating element oneOrMore
+ Validating element oneOrMore failed
+ Start validating element list
+ Validating element list failed
+ Start validating element mixed
+ Validating element mixed failed
+ Start validating element ref
+ Validating element ref failed
+ Start validating element parentRef
+ Validating element parentRef failed
+ Start validating element empty
+ Validating element empty failed
+ Start validating element text
+ Validating element text failed
+ Start validating element value
+ Validating element value failed
+ Start validating element data
+ Validating element data failed
+ Start validating element notAllowed
+ Validating element notAllowed failed
+ Start validating element externalRef
+ Validating element externalRef failed
+ Start validating element grammar
+ Validating element grammar failed
+ Validating choice failed
+ Validating def pattern failed
+ Validating ref pattern failed
+ Validating oneOrMore failed
+ Validating interleave failed
+ Validating def open-patterns failed
+ Validating ref open-patterns failed
+E: Element element failed to validate element content
+E: Element element has extra content: documentation
+xmlRelaxNGValidateDefinition(): validated element : -1: done
+ Validating element element failed
+ Start validating element attribute on element
+ Validating element attribute failed
+ Start validating element group on element
+ Validating element group failed
+ Start validating element interleave on element
+ Validating element interleave failed
+ Start validating element choice on element
+ Validating element choice failed
+ Start validating element optional on element
+ Validating element optional failed
+ Start validating element zeroOrMore on element
+ Validating element zeroOrMore failed
+ Start validating element oneOrMore on element
+ Validating element oneOrMore failed
+ Start validating element list on element
+ Validating element list failed
+ Start validating element mixed on element
+ Validating element mixed failed
+ Start validating element ref on element
+ Validating element ref failed
+ Start validating element parentRef on element
+ Validating element parentRef failed
+ Start validating element empty on element
+ Validating element empty failed
+ Start validating element text on element
+ Validating element text failed
+ Start validating element value on element
+ Validating element value failed
+ Start validating element data on element
+ Validating element data failed
+ Start validating element notAllowed on element
+ Validating element notAllowed failed
+ Start validating element externalRef on element
+ Validating element externalRef failed
+ Start validating element grammar on element
+ Validating element grammar failed
+ Validating choice failed
+ Validating def pattern failed
+ Validating ref pattern failed
+ Validating oneOrMore failed
+ Validating interleave failed
+ Validating def open-patterns failed
+ Validating ref open-patterns failed
+E: Element zeroOrMore failed to validate element content
+E: Element zeroOrMore has extra content: element
+xmlRelaxNGValidateDefinition(): validated zeroOrMore : -1: done
+ Validating element zeroOrMore failed
+ Start validating element oneOrMore on zeroOrMore
+ Validating element oneOrMore failed
+ Start validating element list on zeroOrMore
+ Validating element list failed
+ Start validating element mixed on zeroOrMore
+ Validating element mixed failed
+ Start validating element ref on zeroOrMore
+ Validating element ref failed
+ Start validating element parentRef on zeroOrMore
+ Validating element parentRef failed
+ Start validating element empty on zeroOrMore
+ Validating element empty failed
+ Start validating element text on zeroOrMore
+ Validating element text failed
+ Start validating element value on zeroOrMore
+ Validating element value failed
+ Start validating element data on zeroOrMore
+ Validating element data failed
+ Start validating element notAllowed on zeroOrMore
+ Validating element notAllowed failed
+ Start validating element externalRef on zeroOrMore
+ Validating element externalRef failed
+ Start validating element grammar on zeroOrMore
+ Validating element grammar failed
+ Validating choice failed
+ Validating def pattern failed
+ Validating ref pattern failed
+ Validating oneOrMore failed
+ Validating interleave failed
+ Validating def open-patterns failed
+ Validating ref open-patterns failed
+E: Element element failed to validate element content
+E: Element element has extra content: zeroOrMore
+xmlRelaxNGValidateDefinition(): validated element : -1: done
+ Validating element element failed
+ Start validating element attribute on element
+ Validating element attribute failed
+ Start validating element group on element
+ Validating element group failed
+ Start validating element interleave on element
+ Validating element interleave failed
+ Start validating element choice on element
+ Validating element choice failed
+ Start validating element optional on element
+ Validating element optional failed
+ Start validating element zeroOrMore on element
+ Validating element zeroOrMore failed
+ Start validating element oneOrMore on element
+ Validating element oneOrMore failed
+ Start validating element list on element
+ Validating element list failed
+ Start validating element mixed on element
+ Validating element mixed failed
+ Start validating element ref on element
+ Validating element ref failed
+ Start validating element parentRef on element
+ Validating element parentRef failed
+ Start validating element empty on element
+ Validating element empty failed
+ Start validating element text on element
+ Validating element text failed
+ Start validating element value on element
+ Validating element value failed
+ Start validating element data on element
+ Validating element data failed
+ Start validating element notAllowed on element
+ Validating element notAllowed failed
+ Start validating element externalRef on element
+ Validating element externalRef failed
+ Start validating element grammar on element
+ Validating element grammar failed
+ Validating choice failed
+ Validating def pattern failed
+Validating ref pattern failed
+error detected at relaxng.c:7308
+extra data on the document
diff --git a/test/relaxng/pattern1.rng b/test/relaxng/pattern1.rng
new file mode 100644
index 0000000..a585e85
--- /dev/null
+++ b/test/relaxng/pattern1.rng
@@ -0,0 +1,8 @@
+<group xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="a">
+ <text/>
+ </element>
+ <element name="b">
+ <text/>
+ </element>
+</group>
diff --git a/test/relaxng/pattern2.rng b/test/relaxng/pattern2.rng
new file mode 100644
index 0000000..66a4a44
--- /dev/null
+++ b/test/relaxng/pattern2.rng
@@ -0,0 +1,9 @@
+<group xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="c">
+ <text/>
+ </element>
+ <element name="d">
+ <text/>
+ </element>
+</group>
+
diff --git a/test/relaxng/proofsystem.rng b/test/relaxng/proofsystem.rng
new file mode 100644
index 0000000..7fe6bd3
--- /dev/null
+++ b/test/relaxng/proofsystem.rng
@@ -0,0 +1,96 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+ ns="http://relaxng.org/ns/proofsystem">
+
+<start>
+ <element name="proofSystem">
+ <oneOrMore>
+ <element name="rule">
+ <attribute name="name"/>
+ <zeroOrMore>
+ <ref name="antecedent"/>
+ </zeroOrMore>
+ <ref name="consequent"/>
+ </element>
+ </oneOrMore>
+ </element>
+</start>
+
+<define name="formula">
+ <element name="formula">
+ <choice>
+ <ref name="judgement"/>
+ <ref name="expr"/>
+ </choice>
+ </element>
+</define>
+
+<define name="consequent">
+ <ref name="judgement"/>
+</define>
+
+<define name="antecedent">
+ <ref name="judgement"/>
+</define>
+
+<define name="judgement">
+ <choice>
+ <element name="judgement">
+ <attribute name="name"/>
+ <zeroOrMore>
+ <ref name="expr"/>
+ </zeroOrMore>
+ </element>
+ <element name="not">
+ <ref name="judgement"/>
+ </element>
+ </choice>
+</define>
+
+<define name="expr">
+ <choice>
+ <element name="var">
+ <attribute name="range"/>
+ <optional>
+ <attribute name="index"/>
+ </optional>
+ <optional>
+ <attribute name="sub"/>
+ </optional>
+ </element>
+ <element name="function">
+ <attribute name="name"/>
+ <zeroOrMore>
+ <ref name="expr"/>
+ </zeroOrMore>
+ </element>
+ <element name="element">
+ <attribute name="name"/>
+ <zeroOrMore>
+ <element name="attribute">
+ <attribute name="name"/>
+ <ref name="expr"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <ref name="context"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="expr"/>
+ </zeroOrMore>
+ </element>
+ <element name="group">
+ <zeroOrMore>
+ <ref name="expr"/>
+ </zeroOrMore>
+ </element>
+ <element name="string"><text/></element>
+ </choice>
+</define>
+
+<define name="context">
+ <element name="context">
+ <ref name="expr"/>
+ </element>
+</define>
+
+</grammar>
diff --git a/test/relaxng/res b/test/relaxng/res
new file mode 100644
index 0000000..1df8b69
--- /dev/null
+++ b/test/relaxng/res
@@ -0,0 +1,500 @@
+docbook_0.xml:1760: error: Entity 'copy' not defined
+ <sgmltag>&amp;copy;</sgmltag> &mdash; copyright sign (&copy;)
+ ^
+RNG validity error
+Did not expect element articleinfo there
+RNG validity error
+Did not expect element authorgroup there
+RNG validity error
+Did not expect element author there
+RNG validity error
+Did not expect element firstname there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element surname there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element affiliation there
+RNG validity error
+Did not expect element orgname there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element address there
+RNG validity error
+Did not expect element email there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element author there
+RNG validity error
+Did not expect element firstname there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element surname there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element affiliation there
+RNG validity error
+Did not expect element address there
+RNG validity error
+Did not expect element email there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element author there
+RNG validity error
+Did not expect element firstname there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element surname there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element affiliation there
+RNG validity error
+Did not expect element address there
+RNG validity error
+Did not expect element email there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element releaseinfo there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element revhistory there
+RNG validity error
+Did not expect element revision there
+RNG validity error
+Did not expect element revnumber there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element date there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element copyright there
+RNG validity error
+Did not expect element year there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element holder there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element legalnotice there
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element citetitle there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element citetitle there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element ulink there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect1 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect2 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element note there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element application there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element application there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element xref there
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element programlisting there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element ulink there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element command there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect2 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect2 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect1 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect2 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element variablelist there
+RNG validity error
+Did not expect element varlistentry there
+RNG validity error
+Did not expect element term there
+RNG validity error
+Did not expect element emphasis there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element listitem there
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element literal there
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element command there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element application there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element menuchoice there
+RNG validity error
+Did not expect element guimenu there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element guimenuitem there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element varlistentry there
+RNG validity error
+Did not expect element term there
+RNG validity error
+Did not expect element emphasis there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element listitem there
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element literal there
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element literal there
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element varlistentry there
+RNG validity error
+Did not expect element term there
+RNG validity error
+Did not expect element emphasis there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element listitem there
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element literal there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element literal there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect2 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element xref there
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element quote there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element quote there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element acronym there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element programlisting there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element menuchoice there
+RNG validity error
+Did not expect element shortcut there
+RNG validity error
+Did not expect element keysym there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element guimenuitem there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element sect3 there
+RNG validity error
+Did not expect element title there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element itemizedlist there
+RNG validity error
+Did not expect element listitem there
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element listitem there
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element listitem there
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element listitem there
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+RNG validity error
+Did not expect element listitem there
+RNG validity error
+Did not expect element para there
+RNG validity error
+Did not expect element sgmltag there
+RNG validity error
+Did not expect text in element TODO content
+docbook_0.xml:1767: error: End tag : expected '>'
+ </paraamp;</sgmltag> &mdash; ampersend (&amp;)
+ ^
+docbook_0.xml:1767: error: Opening and ending tag mismatch: para line 0 and paraamp
+ </paraamp;</sgmltag> &mdash; ampersend (&amp;)
+ ^
+docbook_0.xml:1767: error: Opening and ending tag mismatch: listitem line 0 and sgmltag
+ </paraamp;</sgmltag> &mdash; ampersend (&amp;)
+ ^
+docbook_0.xml:1768: error: Opening and ending tag mismatch: itemizedlist line 0 and para
+ </para></listitem>
+ ^
+docbook_0.xml:1768: error: Opening and ending tag mismatch: sect3 line 0 and listitem
+ </para></listitem>
+ ^
+docbook_0.xml:1773: error: Entity 'copy' not defined
+ <sgmltag>&amp;copy;</sgmltag> &mdash; copyright sign (&copy;)
+ ^
+Expand failed !
+docbook_0.xml fails to validate
+docbook_0.xml : failed to parse
diff --git a/test/relaxng/rngbug-001.ext b/test/relaxng/rngbug-001.ext
new file mode 100644
index 0000000..cb1883d
--- /dev/null
+++ b/test/relaxng/rngbug-001.ext
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="e2"/>
+ </start>
+ <define name="e2">
+ <element name="e2">
+ <element name="e3">
+ <text/>
+ </element>
+ </element>
+ </define>
+</grammar>
diff --git a/test/relaxng/rngbug-001.rng b/test/relaxng/rngbug-001.rng
new file mode 100644
index 0000000..0bb5b0a
--- /dev/null
+++ b/test/relaxng/rngbug-001.rng
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="root"/>
+ </start>
+ <define name="root">
+ <element name="root">
+ <interleave>
+ <element name="e1">
+ <text/>
+ </element>
+ <externalRef href="rngbug-001.ext"/>
+ </interleave>
+ </element>
+ </define>
+</grammar>
diff --git a/test/relaxng/rngbug-001.xml b/test/relaxng/rngbug-001.xml
new file mode 100644
index 0000000..83ba73e
--- /dev/null
+++ b/test/relaxng/rngbug-001.xml
@@ -0,0 +1,6 @@
+ <root>
+ <e1>x</e1>
+ <e2>
+ <e3>y</e3>
+ </e2>
+ </root>
diff --git a/test/relaxng/spec.rng b/test/relaxng/spec.rng
new file mode 100644
index 0000000..0852546
--- /dev/null
+++ b/test/relaxng/spec.rng
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- $Id: spec.rng,v 1.1 2003/03/19 21:02:29 veillard Exp $ -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
+ xmlns:p="http://relaxng.org/ns/proofsystem">
+
+<start>
+ <grammar>
+ <include href="docbook.rng"/>
+ <define name="synop.class" combine="choice">
+ <choice>
+ <parentRef name="rngref"/>
+ <parentRef name="grammarref"/>
+ <grammar>
+ <include href="proofsystem.rng"/>
+ <start combine="choice">
+ <ref name="formula"/>
+ </start>
+ </grammar>
+ </choice>
+ </define>
+ <define name="tech.char.class" combine="choice">
+ <parentRef name="terms"/>
+ </define>
+ </grammar>
+</start>
+
+<define name="rngref">
+ <element name="rngref">
+ <attribute name="src">
+ <data type="anyURI"/>
+ </attribute>
+ </element>
+</define>
+
+<define name="grammarref">
+ <element name="grammarref">
+ <attribute name="src">
+ <data type="anyURI"/>
+ </attribute>
+ </element>
+</define>
+
+<define name="terms">
+ <grammar>
+ <include href="proofsystem.rng">
+ <start>
+ <choice>
+ <ref name="expr"/>
+ <ref name="judgement"/>
+ <ref name="context"/>
+ </choice>
+ </start>
+ </include>
+ </grammar>
+</define>
+
+</grammar>
+
+
diff --git a/test/relaxng/spec1.rng b/test/relaxng/spec1.rng
new file mode 100644
index 0000000..e8e9ef2
--- /dev/null
+++ b/test/relaxng/spec1.rng
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<element name="foo"
+ xmlns="http://relaxng.org/ns/structure/1.0"
+ xmlns:a="http://relaxng.org/ns/annotation/1.0"
+ xmlns:ex1="http://www.example.com/n1"
+ xmlns:ex2="http://www.example.com/n2">
+ <a:documentation>A foo element.</a:documentation>
+ <element name="ex1:bar1">
+ <empty/>
+ </element>
+ <element name="ex2:bar2">
+ <empty/>
+ </element>
+</element>
diff --git a/test/relaxng/spec1_1.xml b/test/relaxng/spec1_1.xml
new file mode 100644
index 0000000..e12b620
--- /dev/null
+++ b/test/relaxng/spec1_1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<foo><pre1:bar1 xmlns:pre1="http://www.example.com/n1"/><pre2:bar2 xmlns:pre2="http://www.example.com/n2"/></foo>
+
diff --git a/test/relaxng/spec_0.xml b/test/relaxng/spec_0.xml
new file mode 100644
index 0000000..733eb6e
--- /dev/null
+++ b/test/relaxng/spec_0.xml
@@ -0,0 +1,3589 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE article [
+<!-- ELEMENT declarations work around MSXML bug. -->
+<!ELEMENT section ANY>
+<!ATTLIST section id ID #IMPLIED>
+<!ELEMENT appendix ANY>
+<!ATTLIST appendix id ID #IMPLIED>
+<!ELEMENT bibliomixed ANY>
+<!ATTLIST bibliomixed id ID #IMPLIED>
+]>
+<article status="Committee Specification" xmlns:p="http://relaxng.org/ns/proofsystem">
+
+<articleinfo>
+<releaseinfo>$Id: spec_0.xml,v 1.1 2003/03/19 21:02:29 veillard Exp $</releaseinfo>
+<title>RELAX NG Specification</title>
+<authorgroup>
+<editor>
+ <firstname>James</firstname><surname>Clark</surname>
+ <affiliation>
+ <address><email>jjc@jclark.com</email></address>
+ </affiliation>
+</editor>
+<editor>
+ <surname>MURATA</surname><firstname>Makoto</firstname>
+ <affiliation>
+ <address><email>EB2M-MRT@asahi-net.or.jp</email></address>
+ </affiliation>
+</editor>
+</authorgroup>
+<pubdate>3 December 2001</pubdate>
+<releaseinfo role="meta">
+$Id: spec_0.xml,v 1.1 2003/03/19 21:02:29 veillard Exp $
+</releaseinfo>
+
+<copyright><year>2001</year><holder>OASIS</holder></copyright>
+
+<legalnotice>
+
+<para>Copyright &#169; The Organization for the Advancement of
+Structured Information Standards [OASIS] 2001. All Rights
+Reserved.</para>
+
+<para>This document and translations of it may be copied and furnished
+to others, and derivative works that comment on or otherwise explain
+it or assist in its implementation may be prepared, copied, published
+and distributed, in whole or in part, without restriction of any kind,
+provided that the above copyright notice and this paragraph are
+included on all such copies and derivative works. However, this
+document itself may not be modified in any way, such as by removing
+the copyright notice or references to OASIS, except as needed for the
+purpose of developing OASIS specifications, in which case the
+procedures for copyrights defined in the OASIS Intellectual Property
+Rights document must be followed, or as required to translate it into
+languages other than English.</para>
+
+<para>The limited permissions granted above are perpetual and will not
+be revoked by OASIS or its successors or assigns.</para>
+
+<para>This document and the information contained herein is provided
+on an <quote>AS IS</quote> basis and OASIS DISCLAIMS ALL WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
+USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY
+IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE.</para>
+
+</legalnotice>
+
+<legalnotice role="status"><title>Status of this Document</title>
+
+<para>This Committee Specification was approved for publication by the
+OASIS RELAX NG technical committee. It is a stable document which
+represents the consensus of the committee. Comments on this document
+may be sent to <ulink
+url="mailto:relax-ng-comment@lists.oasis-open.org"
+>relax-ng-comment@lists.oasis-open.org</ulink>.</para>
+
+<para>A list of known errors in this document is available at <ulink
+url="http://www.oasis-open.org/committees/relax-ng/spec-20011203-errata.html"
+>http://www.oasis-open.org/committees/relax-ng/spec-20011203-errata.html</ulink
+>.</para>
+
+</legalnotice>
+
+<abstract>
+<para>This is the definitive specification of RELAX NG, a simple
+schema language for XML, based on <xref linkend="relax"/> and <xref
+linkend="trex"/>. A RELAX NG schema specifies a pattern for the
+structure and content of an XML document. A RELAX NG schema is itself
+an XML document.</para>
+</abstract>
+
+<revhistory>
+<revision>
+ <revnumber>Committee Specification</revnumber>
+ <date>3 December 2001</date>
+</revision>
+<revision>
+ <revnumber>Committee Specification</revnumber>
+ <date>11 August 2001</date>
+</revision>
+</revhistory>
+</articleinfo>
+
+
+<section>
+<title>Introduction</title>
+
+<para>This document specifies</para>
+
+<itemizedlist>
+
+<listitem><para>when an XML document is a correct RELAX NG
+schema</para></listitem>
+
+<listitem><para>when an XML document is valid with respect to a
+correct RELAX NG schema</para></listitem>
+
+</itemizedlist>
+
+<para>An XML document that is being validated with respect to a RELAX NG
+schema is referred to as an instance.</para>
+
+<para>The structure of this document is as follows. <xref
+linkend="data-model"/> describes the data model, which is the
+abstraction of an XML document used throughout the rest of the
+document. <xref linkend="full-syntax"/> describes the syntax of a
+RELAX NG schema; any correct RELAX NG schema must conform to this
+syntax. <xref linkend="simplification"/> describes a sequence of
+transformations that are applied to simplify a RELAX NG schema;
+applying the transformations also involves checking certain
+restrictions that must be satisfied by a correct RELAX NG
+schema. <xref linkend="simple-syntax"/> describes the syntax that
+results from applying the transformations; this simple syntax is a
+subset of the full syntax. <xref linkend="semantics"/> describes the
+semantics of a correct RELAX NG schema that uses the simple syntax;
+the semantics specify when an element is valid with respect to a RELAX
+NG schema. <xref linkend="restriction"/> describes restrictions in
+terms of the simple syntax; a correct RELAX NG schema must be such
+that, after transformation into the simple form, it satisfies these
+restrictions. Finally, <xref linkend="conformance"/> describes
+conformance requirements for RELAX NG validators.</para>
+
+<para>A tutorial is available separately (see <xref
+linkend="tutorial"/>).</para>
+
+</section>
+
+<section id="data-model">
+<title>Data model</title>
+
+<para>RELAX NG deals with XML documents representing both schemas and
+instances through an abstract data model. XML documents representing
+schemas and instances must be well-formed in conformance with <xref
+linkend="xml-rec"/> and must conform to the constraints of <xref
+linkend="xml-names"/>.</para>
+
+<para>An XML document is represented by an element. An element consists
+of</para>
+
+<itemizedlist>
+
+<listitem><para>a name</para></listitem>
+
+<listitem><para>a context</para></listitem>
+
+<listitem><para>a set of attributes</para></listitem>
+
+<listitem><para>an ordered sequence of zero or more children; each
+child is either an element or a non-empty string; the sequence never contains
+two consecutive strings</para></listitem>
+
+</itemizedlist>
+
+<para>A name consists of</para>
+
+<itemizedlist>
+<listitem><para>a string representing the namespace URI; the empty
+string has special significance, representing the absence of any
+namespace</para></listitem>
+
+<listitem><para>a string representing the local name; this string matches the NCName
+production of <xref linkend="xml-names"/></para></listitem>
+</itemizedlist>
+
+<para>A context consists of</para>
+
+<itemizedlist>
+<listitem><para>a base URI</para></listitem>
+<listitem><para>a namespace map; this maps prefixes to namespace URIs,
+and also may specify a default namespace URI (as declared
+by the <literal>xmlns</literal> attribute)</para></listitem>
+</itemizedlist>
+
+<para>An attribute consists of</para>
+
+<itemizedlist>
+<listitem><para>a name</para></listitem>
+<listitem><para>a string representing the value</para></listitem>
+</itemizedlist>
+
+<para>A string consists of a sequence of zero or more characters,
+where a character is as defined in <xref linkend="xml-rec"/>.</para>
+
+<para>The element for an XML document is constructed from an instance
+of the <xref linkend="infoset"/> as follows. We use the notation
+[<replaceable>x</replaceable>] to refer to the value of the
+<replaceable>x</replaceable> property of an information item. An
+element is constructed from a document information item by
+constructing an element from the [document element]. An element is
+constructed from an element information item by constructing the name
+from the [namespace name] and [local name], the context from the [base
+URI] and [in-scope namespaces], the attributes from the [attributes],
+and the children from the [children]. The attributes of an element
+are constructed from the unordered set of attribute information items
+by constructing an attribute for each attribute information item. The
+children of an element are constructed from the list of child
+information items first by removing information items other than
+element information items and character information items, and then by
+constructing an element for each element information item in the list
+and a string for each maximal sequence of character information items.
+An attribute is constructed from an attribute information item by
+constructing the name from the [namespace name] and [local name], and
+the value from the [normalized value]. When constructing the name of
+an element or attribute from the [namespace name] and [local name], if
+the [namespace name] property is not present, then the name is
+constructed from an empty string and the [local name]. A string is
+constructed from a sequence of character information items by
+constructing a character from the [character code] of each character
+information item.</para>
+
+<para>It is possible for there to be multiple distinct infosets for a
+single XML document. This is because XML parsers are not required to
+process all DTD declarations or expand all external parsed general
+entities. Amongst these multiple infosets, there is exactly one
+infoset for which [all declarations processed] is true and which does
+not contain any unexpanded entity reference information items. This
+is the infoset that is the basis for defining the RELAX NG data
+model.</para>
+
+<section id="data-model-example">
+<title>Example</title>
+
+<para>Suppose the document
+<literal>http://www.example.com/doc.xml</literal> is as
+follows:</para>
+
+<programlisting><![CDATA[<?xml version="1.0"?>
+<foo><pre1:bar1 xmlns:pre1="http://www.example.com/n1"/><pre2:bar2
+ xmlns:pre2="http://www.example.com/n2"/></foo>
+]]></programlisting>
+
+<para>The element representing this document has</para>
+
+<itemizedlist>
+<listitem><para>a name which has</para>
+<itemizedlist>
+
+<listitem><para>the empty string as the namespace URI, representing
+the absence of any namespace</para></listitem>
+
+<listitem><para><literal>foo</literal> as the local
+name</para></listitem>
+
+</itemizedlist>
+
+</listitem>
+
+<listitem><para>a context which has</para>
+
+<itemizedlist>
+<listitem><para><literal>http://www.example.com/doc.xml</literal> as the base
+URI</para></listitem>
+
+<listitem><para>a namespace map which</para>
+
+<itemizedlist>
+
+<listitem><para>maps the prefix <literal>xml</literal> to the
+namespace URI
+<literal>http://www.w3.org/XML/1998/namespace</literal>
+(the <literal>xml</literal> prefix is implicitly declared
+by every XML document)</para></listitem>
+
+<listitem><para>specifies the empty string as the default namespace
+URI</para></listitem>
+
+</itemizedlist>
+
+</listitem>
+
+</itemizedlist>
+
+</listitem>
+
+<listitem><para>an empty set of attributes</para></listitem>
+
+<listitem><para>a sequence of children consisting
+of an element which has</para>
+
+<itemizedlist>
+<listitem><para>a name which has</para>
+<itemizedlist>
+
+<listitem><para><literal>http://www.example.com/n1</literal> as the
+namespace URI</para></listitem>
+
+<listitem><para><literal>bar1</literal> as the local
+name</para></listitem>
+
+</itemizedlist>
+
+</listitem>
+
+<listitem><para>a context which has</para>
+
+<itemizedlist>
+<listitem><para><literal>http://www.example.com/doc.xml</literal> as the base
+URI</para></listitem>
+
+<listitem><para>a namespace map which</para>
+
+<itemizedlist>
+
+<listitem><para>maps the prefix <literal>pre1</literal> to the
+namespace URI
+<literal>http://www.example.com/n1</literal></para></listitem>
+
+<listitem><para>maps the prefix <literal>xml</literal> to the
+namespace URI
+<literal>http://www.w3.org/XML/1998/namespace</literal></para></listitem>
+
+<listitem><para>specifies the empty string as the default namespace
+URI</para></listitem>
+
+</itemizedlist>
+
+</listitem>
+
+</itemizedlist>
+
+</listitem>
+
+<listitem><para>an empty set of attributes</para></listitem>
+
+<listitem><para>an empty sequence of children</para></listitem>
+
+</itemizedlist>
+
+<para>followed by an element which has</para>
+
+<itemizedlist>
+<listitem><para>a name which has</para>
+<itemizedlist>
+
+<listitem><para><literal>http://www.example.com/n2</literal> as the
+namespace URI</para></listitem>
+
+<listitem><para><literal>bar2</literal> as the local
+name</para></listitem>
+
+</itemizedlist>
+
+</listitem>
+
+<listitem><para>a context which has</para>
+
+<itemizedlist>
+<listitem><para><literal>http://www.example.com/doc.xml</literal> as the base
+URI</para></listitem>
+
+<listitem><para>a namespace map which</para>
+
+<itemizedlist>
+
+<listitem><para>maps the prefix <literal>pre2</literal> to the
+namespace URI
+<literal>http://www.example.com/n2</literal></para></listitem>
+
+<listitem><para>maps the prefix <literal>xml</literal> to the
+namespace URI
+<literal>http://www.w3.org/XML/1998/namespace</literal></para></listitem>
+
+<listitem><para>specifies the empty string as the default namespace
+URI</para></listitem>
+
+</itemizedlist>
+
+</listitem>
+
+</itemizedlist>
+
+</listitem>
+
+<listitem><para>an empty set of attributes</para></listitem>
+
+<listitem><para>an empty sequence of children</para></listitem>
+
+</itemizedlist>
+
+</listitem>
+</itemizedlist>
+
+</section>
+
+</section>
+
+<section id="full-syntax">
+<title>Full syntax</title>
+
+<para>The following grammar summarizes the syntax of RELAX NG.
+Although we use a notation based on the XML representation of an RELAX
+NG schema as a sequence of characters, the grammar must be understood
+as operating at the data model level. For example, although the
+syntax uses <literal><![CDATA[<text/>]]></literal>, an instance or
+schema can use <literal><![CDATA[<text></text>]]></literal> instead,
+because they both represent the same element at the data model level.
+All elements shown in the grammar are qualified with the namespace
+URI:</para>
+
+<programlisting>http://relaxng.org/ns/structure/1.0</programlisting>
+
+<para>The symbols QName and NCName are defined in <xref
+linkend="xml-names"/>. The anyURI symbol has the same meaning as the
+anyURI datatype of <xref linkend="xmlschema-2"/>: it indicates a
+string that, after escaping of disallowed values as described in
+Section 5.4 of <xref linkend="xlink"/>, is a URI reference as defined
+in <xref linkend="rfc2396"/> (as modified by <xref
+linkend="rfc2732"/>). The symbol string matches any string.</para>
+
+<para>In addition to the attributes shown explicitly, any element can
+have an <literal>ns</literal> attribute and any element can have a
+<literal>datatypeLibrary</literal> attribute. The
+<literal>ns</literal> attribute can have any value. The value of the
+<literal>datatypeLibrary</literal> attribute must match the anyURI
+symbol as described in the previous paragraph; in addition, it must
+not use the relative form of URI reference and must not have a
+fragment identifier; as an exception to this, the value may be the
+empty string.</para>
+
+<para>Any element can also have foreign attributes in addition to the
+attributes shown in the grammar. A foreign attribute is an attribute
+with a name whose namespace URI is neither the empty string nor the
+RELAX NG namespace URI. Any element that cannot have string children
+(that is, any element other than <literal>value</literal>, <literal>param</literal>
+and <literal>name</literal>) may have foreign child elements in addition
+to the child elements shown in the grammar. A foreign element is an
+element with a name whose namespace URI is not the RELAX NG namespace
+URI. There are no constraints on the relative position of foreign
+child elements with respect to other child elements.</para>
+
+<para>Any element can also have as children strings that consist
+entirely of whitespace characters, where a whitespace character is one
+of #x20, #x9, #xD or #xA. There are no constraints on the relative
+position of whitespace string children with respect to child
+elements.</para>
+
+<para>Leading and trailing whitespace is allowed for value of each
+<literal>name</literal>, <literal>type</literal> and
+<literal>combine</literal> attribute and for the content of each
+<literal>name</literal> element.</para>
+
+<grammarref src="full.rng"/>
+
+<section id="full-syntax-example">
+<title>Example</title>
+
+<para>Here is an example of a schema in the full syntax for the
+document in <xref linkend="data-model-example"/>.</para>
+
+<programlisting><![CDATA[<?xml version="1.0"?>
+<element name="foo"
+ xmlns="http://relaxng.org/ns/structure/1.0"
+ xmlns:a="http://relaxng.org/ns/annotation/1.0"
+ xmlns:ex1="http://www.example.com/n1"
+ xmlns:ex2="http://www.example.com/n2">
+ <a:documentation>A foo element.</a:document>
+ <element name="ex1:bar1">
+ <empty/>
+ </element>
+ <element name="ex2:bar2">
+ <empty/>
+ </element>
+</element>]]></programlisting>
+
+</section>
+
+</section>
+
+<section id="simplification">
+<title>Simplification</title>
+
+<para>The full syntax given in the previous section is transformed
+into a simpler syntax by applying the following transformation rules
+in order. The effect must be as if each rule was applied to all
+elements in the schema before the next rule is applied. A
+transformation rule may also specify constraints that must be
+satisfied by a correct schema. The transformation rules are applied
+at the data model level. Before the transformations are applied, the
+schema is parsed into an instance of the data model.</para>
+
+<section>
+<title>Annotations</title>
+
+<para>Foreign attributes and elements are removed.</para>
+
+<note><para>It is safe to remove <literal>xml:base</literal>
+attributes at this stage because <literal>xml:base</literal>
+attributes are used in determining the [base URI] of an element
+information item, which is in turn used to construct the base URI of
+the context of an element. Thus, after a document has been parsed
+into an instance of the data model, <literal>xml:base</literal>
+attributes can be discarded.</para></note>
+
+</section>
+
+<section>
+<title>Whitespace</title>
+
+<para>For each element other than <literal>value</literal> and
+<literal>param</literal>, each child that is a string containing only
+whitespace characters is removed.</para>
+
+<para>Leading and trailing whitespace characters are removed from the
+value of each <literal>name</literal>, <literal>type</literal> and
+<literal>combine</literal> attribute and from the content of each
+<literal>name</literal> element.</para>
+
+</section>
+
+<section>
+<title><literal>datatypeLibrary</literal> attribute</title>
+
+<para>The value of each <literal>datatypeLibary</literal> attribute is
+transformed by escaping disallowed characters as specified in Section
+5.4 of <xref linkend="xlink"/>.</para>
+
+<para>For any <literal>data</literal> or <literal>value</literal>
+element that does not have a <literal>datatypeLibrary</literal>
+attribute, a <literal>datatypeLibrary</literal> attribute is
+added. The value of the added <literal>datatypeLibrary</literal>
+attribute is the value of the <literal>datatypeLibrary</literal>
+attribute of the nearest ancestor element that has a
+<literal>datatypeLibrary</literal> attribute, or the empty string if
+there is no such ancestor. Then, any <literal>datatypeLibrary</literal>
+attribute that is on an element other than <literal>data</literal> or
+<literal>value</literal> is removed.</para>
+
+</section>
+
+<section>
+<title><literal>type</literal> attribute of <literal>value</literal> element</title>
+
+<para>For any <literal>value</literal> element that does not have a
+<literal>type</literal> attribute, a <literal>type</literal> attribute
+is added with value <literal>token</literal> and the value of the
+<literal>datatypeLibrary</literal> attribute is changed to the empty
+string.</para>
+
+</section>
+
+<section id="href">
+<title><literal>href</literal> attribute</title>
+
+<para>The value of the <literal>href</literal> attribute on an
+<literal>externalRef</literal> or <literal>include</literal> element
+is first transformed by escaping disallowed characters as specified in
+Section 5.4 of <xref linkend="xlink"/>. The URI reference is then
+resolved into an absolute form as described in section 5.2 of <xref
+linkend="rfc2396"/> using the base URI from the context of the element
+that bears the <literal>href</literal> attribute.</para>
+
+<para>The value of the <literal>href</literal> attribute will be used
+to construct an element (as specified in <xref
+linkend="data-model"/>). This must be done as follows. The URI
+reference consists of the URI itself and an optional fragment
+identifier. The resource identified by the URI is retrieved. The
+result is a MIME entity: a sequence of bytes labeled with a MIME
+media type. The media type determines how an element is constructed
+from the MIME entity and optional fragment identifier. When the media
+type is <literal>application/xml</literal> or
+<literal>text/xml</literal>, the MIME entity must be parsed as an XML
+document in accordance with the applicable RFC (at the term of writing
+<xref linkend="rfc3023"/>) and an element constructed from the result
+of the parse as specified in <xref linkend="data-model"/>. In
+particular, the <literal>charset</literal> parameter must be handled
+as specified by the RFC. This specification does not define the
+handling of media types other than <literal>application/xml</literal>
+and <literal>text/xml</literal>. The <literal>href</literal> attribute
+must not include a fragment identifier unless the registration of the
+media type of the resource identified by the attribute defines the
+interpretation of fragment identifiers for that media type.</para>
+
+<note><para><xref linkend="rfc3023"/> does not define the
+interpretation of fragment identifiers for
+<literal>application/xml</literal> or
+<literal>text/xml</literal>.</para></note>
+
+</section>
+
+<section>
+<title><literal>externalRef</literal> element</title>
+
+<para>An <literal>externalRef</literal> element is transformed as
+follows. An element is constructed using the URI reference that is
+the value of <literal>href</literal> attribute as specified in <xref
+linkend="href"/>. This element must match the syntax for pattern. The
+element is transformed by recursively applying the rules from this
+subsection and from previous subsections of this section. This must
+not result in a loop. In other words, the transformation of the
+referenced element must not require the dereferencing of an
+<literal>externalRef</literal> attribute with an
+<literal>href</literal> attribute with the same value.</para>
+
+<para>Any <literal>ns</literal> attribute on the
+<literal>externalRef</literal> element is transferred to the
+referenced element if the referenced element does not already have an
+<literal>ns</literal> attribute. The <literal>externalRef</literal>
+element is then replaced by the referenced element.</para>
+
+</section>
+
+<section>
+<title><literal>include</literal> element</title>
+
+<para>An <literal>include</literal> element is transformed as follows.
+An element is constructed using the URI reference that is the value of
+<literal>href</literal> attribute as specified in <xref
+linkend="href"/>. This element must be a <literal>grammar</literal>
+element, matching the syntax for grammar.</para>
+
+<para>This <literal>grammar</literal> element is transformed by
+recursively applying the rules from this subsection and from previous
+subsections of this section. This must not result in a loop. In other
+words, the transformation of the <literal>grammar</literal> element
+must not require the dereferencing of an <literal>include</literal>
+attribute with an <literal>href</literal> attribute with the same
+value.</para>
+
+<para>Define the <firstterm>components</firstterm> of an element to
+be the children of the element together with the components of any
+<literal>div</literal> child elements. If the
+<literal>include</literal> element has a <literal>start</literal>
+component, then the <literal>grammar</literal> element must have a
+<literal>start</literal> component. If the <literal>include</literal>
+element has a <literal>start</literal> component, then all
+<literal>start</literal> components are removed from the
+<literal>grammar</literal> element. If the <literal>include</literal>
+element has a <literal>define</literal> component, then the
+<literal>grammar</literal> element must have a
+<literal>define</literal> component with the same name. For every
+<literal>define</literal> component of the <literal>include</literal>
+element, all <literal>define</literal> components with the same name
+are removed from the <literal>grammar</literal> element.</para>
+
+<para>The <literal>include</literal> element is transformed into a
+<literal>div</literal> element. The attributes of the
+<literal>div</literal> element are the attributes of the
+<literal>include</literal> element other than the
+<literal>href</literal> attribute. The children of the
+<literal>div</literal> element are the <literal>grammar</literal>
+element (after the removal of the <literal>start</literal> and
+<literal>define</literal> components described by the preceding
+paragraph) followed by the children of the <literal>include</literal>
+element. The <literal>grammar</literal> element is then renamed to
+<literal>div</literal>.</para>
+
+</section>
+
+<section>
+<title><literal>name</literal> attribute of <literal>element</literal>
+and <literal>attribute</literal> elements</title>
+
+<para>The <literal>name</literal> attribute on an
+<literal>element</literal> or <literal>attribute</literal> element is
+transformed into a <literal>name</literal> child element.</para>
+
+<para>If an <literal>attribute</literal> element has a
+<literal>name</literal> attribute but no <literal>ns</literal>
+attribute, then an <literal>ns=""</literal> attribute is added to the
+<literal>name</literal> child element.</para>
+
+</section>
+
+<section>
+<title><literal>ns</literal> attribute</title>
+
+<para>For any <literal>name</literal>, <literal>nsName</literal> or
+<literal>value</literal> element that does not have an
+<literal>ns</literal> attribute, an <literal>ns</literal> attribute is
+added. The value of the added <literal>ns</literal> attribute is the
+value of the <literal>ns</literal> attribute of the nearest ancestor
+element that has an <literal>ns</literal> attribute, or the empty
+string if there is no such ancestor. Then, any <literal>ns</literal>
+attribute that is on an element other than <literal>name</literal>,
+<literal>nsName</literal> or <literal>value</literal> is
+removed.</para>
+
+<note><para>The value of the <literal>ns</literal> attribute is
+<emphasis role="strong">not</emphasis> transformed either by escaping
+disallowed characters, or in any other way, because the value of the
+<literal>ns</literal> attribute is compared against namespace URIs in
+the instance, which are not subject to any
+transformation.</para></note>
+
+<note><para>Since <literal>include</literal> and
+<literal>externalRef</literal> elements are resolved after
+<literal>datatypeLibrary</literal> attributes are added but before
+<literal>ns</literal> attributes are added, <literal>ns</literal>
+attributes are inherited into external schemas but
+<literal>datatypeLibrary</literal> attributes are not.</para></note>
+
+</section>
+
+<section>
+<title>QNames</title>
+
+<para>For any <literal>name</literal> element containing a prefix, the
+prefix is removed and an <literal>ns</literal> attribute is added
+replacing any existing <literal>ns</literal> attribute. The value of
+the added <literal>ns</literal> attribute is the value to which the
+namespace map of the context of the <literal>name</literal> element
+maps the prefix. The context must have a mapping for the
+prefix.</para>
+
+</section>
+
+<section>
+<title><literal>div</literal> element</title>
+
+<para>Each <literal>div</literal> element is replaced by its
+children.</para>
+
+</section>
+
+<section id="number-child-elements">
+<title>Number of child elements</title>
+
+<para>A <literal>define</literal>, <literal>oneOrMore</literal>,
+<literal>zeroOrMore</literal>, <literal>optional</literal>, <literal>list</literal> or
+<literal>mixed</literal> element is transformed so that it has exactly
+one child element. If it has more than one child element, then its
+child elements are wrapped in a <literal>group</literal>
+element. Similarly, an <literal>element</literal> element is transformed so
+that it has exactly two child elements, the first being a name class
+and the second being a pattern. If it has more than two child elements,
+then the child elements other than the first are wrapped in a
+<literal>group</literal> element.</para>
+
+<para>A <literal>except</literal> element is transformed
+so that it has exactly one child element. If it has more
+than one child element, then its child elements are wrapped
+in a <literal>choice</literal> element.</para>
+
+<para>If an <literal>attribute</literal> element has only one child
+element (a name class), then a <literal>text</literal> element is
+added.</para>
+
+<para>A <literal>choice</literal>, <literal>group</literal> or
+<literal>interleave</literal> element is transformed so that it has
+exactly two child elements. If it has one child element, then it is
+replaced by its child element. If it has more than two child
+elements, then the first two child elements are combined into a new
+element with the same name as the parent element and with the first
+two child elements as its children. For example,</para>
+
+<programlisting>&lt;choice&gt; <replaceable>p1</replaceable> <replaceable>p2</replaceable> <replaceable>p3</replaceable> &lt;/choice&gt;</programlisting>
+
+<para>is transformed to</para>
+
+<programlisting>&lt;choice&gt; &lt;choice&gt; <replaceable>p1</replaceable> <replaceable>p2</replaceable> &lt;/choice&gt; <replaceable>p3</replaceable> &lt;/choice&gt;</programlisting>
+
+<para>This reduces the number of child elements by one. The
+transformation is applied repeatedly until there are exactly two child
+elements.</para>
+
+</section>
+
+<section>
+<title><literal>mixed</literal> element</title>
+
+<para>A <literal>mixed</literal> element is transformed into an
+interleaving with a <literal>text</literal> element:</para>
+
+<programlisting>&lt;mixed> <replaceable>p</replaceable> &lt;/mixed></programlisting>
+
+<para>is transformed into</para>
+
+<programlisting>&lt;interleave> <replaceable>p</replaceable> &lt;text/> &lt;/interleave></programlisting>
+
+</section>
+
+<section>
+<title><literal>optional</literal> element</title>
+
+<para>An <literal>optional</literal> element is transformed into
+a choice with <literal>empty</literal>:</para>
+
+<programlisting>&lt;optional> <replaceable>p</replaceable> &lt;/optional></programlisting>
+
+<para>is transformed into</para>
+
+<programlisting>&lt;choice> <replaceable>p</replaceable> &lt;empty/> &lt;/choice></programlisting>
+
+</section>
+
+<section>
+<title><literal>zeroOrMore</literal> element</title>
+
+<para>A <literal>zeroOrMore</literal> element is transformed into a choice
+between <literal>oneOrMore</literal> and
+<literal>empty</literal>:</para>
+
+<programlisting>&lt;zeroOrMore> <replaceable>p</replaceable> &lt;/zeroOrMore></programlisting>
+
+<para>is transformed into</para>
+
+<programlisting>&lt;choice> &lt;oneOrMore> <replaceable>p</replaceable> &lt;/oneOrMore> &lt;empty/> &lt;/choice></programlisting>
+
+</section>
+
+<section id="constraints">
+<title>Constraints</title>
+
+<para>In this rule, no transformation is performed, but various
+constraints are checked.</para>
+
+<note><para>The constraints in this section, unlike the constraints
+specified in <xref linkend="restriction"/>, can be checked without
+resolving any <literal>ref</literal> elements, and are accordingly
+applied even to patterns that will disappear during later stages of
+simplification because they are not reachable (see <xref
+linkend="define-ref"/>) or because of <literal>notAllowed</literal>
+(see <xref linkend="notAllowed"/>).</para></note>
+
+<para>An <literal>except</literal> element that is a child of an
+<literal>anyName</literal> element must not have any
+<literal>anyName</literal> descendant elements. An
+<literal>except</literal> element that is a child of an
+<literal>nsName</literal> element must not have any
+<literal>nsName</literal> or <literal>anyName</literal> descendant
+elements.</para>
+
+<para>A <literal>name</literal> element that occurs as the first child
+of an <literal>attribute</literal> element or as the descendant of the
+first child of an <literal>attribute</literal> element and that has an
+<literal>ns</literal> attribute with value equal to the empty string
+must not have content equal to <literal>xmlns</literal>.</para>
+
+<para>A <literal>name</literal> or <literal>nsName</literal> element
+that occurs as the first child of an <literal>attribute</literal>
+element or as the descendant of the first child of an
+<literal>attribute</literal> element must not have an
+<literal>ns</literal> attribute with value
+<literal>http://www.w3.org/2000/xmlns</literal>.</para>
+
+<note><para>The <xref linkend="infoset"/> defines the namespace URI of
+namespace declaration attributes to be
+<literal>http://www.w3.org/2000/xmlns</literal>.</para></note>
+
+<para>A <literal>data</literal> or <literal>value</literal> element
+must be correct in its use of datatypes. Specifically, the
+<literal>type</literal> attribute must identify a datatype within the
+datatype library identified by the value of the
+<literal>datatypeLibrary</literal> attribute. For a
+<literal>data</literal> element, the parameter list must be one that
+is allowed by the datatype (see <xref
+linkend="data-pattern"/>).</para>
+
+</section>
+
+<section>
+<title><literal>combine</literal> attribute</title>
+
+<para>For each <literal>grammar</literal> element, all
+<literal>define</literal> elements with the same name are combined
+together. For any name, there must not be more than one
+<literal>define</literal> element with that name that does not have a
+<literal>combine</literal> attribute. For any name, if there is a
+<literal>define</literal> element with that name that has a
+<literal>combine</literal> attribute with the value
+<literal>choice</literal>, then there must not also be a
+<literal>define</literal> element with that name that has a
+<literal>combine</literal> attribute with the value
+<literal>interleave</literal>. Thus, for any name, if there is more
+than one <literal>define</literal> element with that name, then there
+is a unique value for the <literal>combine</literal> attribute for
+that name. After determining this unique value, the
+<literal>combine</literal> attributes are removed. A pair of
+definitions</para>
+
+<programlisting>&lt;define name="<replaceable>n</replaceable>"&gt;
+ <replaceable>p1</replaceable>
+&lt;/define>
+&lt;define name="<replaceable>n</replaceable>"&gt;
+ <replaceable>p2</replaceable>
+&lt;/define></programlisting>
+
+<para>is combined into</para>
+
+<programlisting>&lt;define name="<replaceable>n</replaceable>">
+ &lt;<replaceable>c</replaceable>&gt;
+ <replaceable>p1</replaceable>
+ <replaceable>p2</replaceable>
+ &lt;/<replaceable>c</replaceable>&gt;
+&lt;/define></programlisting>
+
+<para>where <replaceable>c</replaceable> is the value of the
+<literal>combine</literal> attribute. Pairs of definitions are
+combined until there is exactly one <literal>define</literal> element
+for each name.</para>
+
+<para>Similarly, for each <literal>grammar</literal> element all
+<literal>start</literal> elements are combined together. There must
+not be more than one <literal>start</literal> element that does not
+have a <literal>combine</literal> attribute. If there is a
+<literal>start</literal> element that has a <literal>combine</literal>
+attribute with the value <literal>choice</literal>, there must not
+also be a <literal>start</literal> element that has a
+<literal>combine</literal> attribute with the value
+<literal>interleave</literal>.</para>
+
+</section>
+
+<section>
+<title><literal>grammar</literal> element</title>
+
+<para>In this rule, the schema is transformed so that its top-level
+element is <literal>grammar</literal> and so that it has no other
+<literal>grammar</literal> elements.</para>
+
+<para>Define the <firstterm>in-scope grammar</firstterm> for an
+element to be the nearest ancestor <literal>grammar</literal> element. A
+<literal>ref</literal> element <firstterm>refers to</firstterm> a
+<literal>define</literal> element if the value of their
+<literal>name</literal> attributes is the same and their in-scope
+grammars are the same. A <literal>parentRef</literal> element
+<firstterm>refers to</firstterm> a <literal>define</literal> element
+if the value of their <literal>name</literal> attributes is the same
+and the in-scope grammar of the in-scope grammar of the
+<literal>parentRef</literal> element is the same as the in-scope
+grammar of the <literal>define</literal> element. Every
+<literal>ref</literal> or <literal>parentRef</literal> element must
+refer to a <literal>define</literal> element. A
+<literal>grammar</literal> must have a <literal>start</literal> child
+element.</para>
+
+<para>First, transform the top-level pattern
+<replaceable>p</replaceable> into
+<literal>&lt;grammar>&lt;start><replaceable>p</replaceable>&lt;/start>&lt;/grammar></literal>.
+Next, rename <literal>define</literal> elements so that no two
+<literal>define</literal> elements anywhere in the schema have the
+same name. To rename a <literal>define</literal> element, change the
+value of its <literal>name</literal> attribute and change the value of
+the <literal>name</literal> attribute of all <literal>ref</literal>
+and <literal>parentRef</literal> elements that refer to that
+<literal>define</literal> element. Next, move all
+<literal>define</literal> elements to be children of the top-level
+<literal>grammar</literal> element, replace each nested
+<literal>grammar</literal> element by the child of its
+<literal>start</literal> element and rename each
+<literal>parentRef</literal> element to <literal>ref</literal>.</para>
+
+</section>
+
+
+<section id="define-ref">
+<title><literal>define</literal> and <literal>ref</literal> elements</title>
+
+<para>In this rule, the grammar is transformed so that every
+<literal>element</literal> element is the child of a
+<literal>define</literal> element, and the child of every
+<literal>define</literal> element is an <literal>element</literal>
+element.</para>
+
+<para>First, remove any <literal>define</literal> element that is not
+<firstterm>reachable</firstterm>. A <literal>define</literal> element
+is reachable if there is reachable <literal>ref</literal> element
+referring to it. A <literal>ref</literal> element is reachable if it
+is the descendant of the <literal>start</literal> element or of a
+reachable <literal>define</literal> element. Now, for
+each <literal>element</literal> element that is not the child of a
+<literal>define</literal> element, add a <literal>define</literal>
+element to the <literal>grammar</literal> element, and replace the
+<literal>element</literal> element by a <literal>ref</literal> element
+referring to the added <literal>define</literal> element. The value of
+the <literal>name</literal> attribute of the added
+<literal>define</literal> element must be different from value of the
+<literal>name</literal> attribute of all other
+<literal>define</literal> elements. The child of the added
+<literal>define</literal> element is the <literal>element</literal>
+element.</para>
+
+<para>Define a <literal>ref</literal> element to be
+<firstterm>expandable</firstterm> if it refers to a
+<literal>define</literal> element whose child is not an
+<literal>element</literal> element. For each <literal>ref</literal>
+element that is expandable and is a descendant of a
+<literal>start</literal> element or an <literal>element</literal>
+element, expand it by replacing the <literal>ref</literal> element by
+the child of the <literal>define</literal> element to which it refers and
+then recursively expanding any expandable <literal>ref</literal>
+elements in this replacement. This must not result in a loop.
+In other words expanding the replacement of a
+<literal>ref</literal> element having a <literal>name</literal> with
+value <replaceable>n</replaceable> must not require the expansion of
+<literal>ref</literal> element also having a <literal>name</literal>
+with value <replaceable>n</replaceable>. Finally, remove any
+<literal>define</literal> element whose child is not an
+<literal>element</literal> element.</para>
+
+</section>
+
+<section id="notAllowed">
+<title><literal>notAllowed</literal> element</title>
+
+<para>In this rule, the grammar is transformed so that a
+<literal>notAllowed</literal> element occurs only as the child of
+a <literal>start</literal> or <literal>element</literal> element. An
+<literal>attribute</literal>, <literal>list</literal>,
+<literal>group</literal>, <literal>interleave</literal>,
+or <literal>oneOrMore</literal> element that has a
+<literal>notAllowed</literal> child element is transformed into a
+<literal>notAllowed</literal> element. A <literal>choice</literal>
+element that has two <literal>notAllowed</literal> child elements is
+transformed into a <literal>notAllowed</literal> element. A
+<literal>choice</literal> element that has one
+<literal>notAllowed</literal> child element is transformed into its
+other child element. An <literal>except</literal> element that has a
+<literal>notAllowed</literal> child element is removed.
+The preceding transformations are applied
+repeatedly until none of them is applicable any more.
+Any <literal>define</literal> element that is no longer reachable
+is removed.</para>
+
+</section>
+
+<section>
+<title><literal>empty</literal> element</title>
+
+<para>In this rule, the grammar is transformed so that an
+<literal>empty</literal> element does not occur as a child of a
+<literal>group</literal>, <literal>interleave</literal>, or
+<literal>oneOrMore</literal> element or as the second child of
+a <literal>choice</literal> element. A <literal>group</literal>,
+<literal>interleave</literal> or <literal>choice</literal> element
+that has two <literal>empty</literal> child elements is transformed
+into an <literal>empty</literal> element. A <literal>group</literal>
+or <literal>interleave</literal> element that has one
+<literal>empty</literal> child element is transformed into its other
+child element. A <literal>choice</literal> element whose
+second child element is an <literal>empty</literal> element is
+transformed by interchanging its two child elements. A
+<literal>oneOrMore</literal> element that has an
+<literal>empty</literal> child element is transformed into an
+<literal>empty</literal> element. The preceding transformations are applied
+repeatedly until none of them is applicable any more.</para>
+
+</section>
+
+</section>
+
+<section id="simple-syntax">
+<title>Simple syntax</title>
+
+<para>After applying all the rules in <xref
+linkend="simplification"/>, the schema will match the following
+grammar:</para>
+
+<grammarref src="simple.rng"/>
+
+<para>With this grammar, no elements or attributes are allowed other
+than those explicitly shown.</para>
+
+<section id="simple-syntax-example">
+<title>Example</title>
+
+<para>The following is an example of how the schema in <xref
+linkend="full-syntax-example"/> can be transformed into the simple
+syntax:</para>
+
+<programlisting><![CDATA[<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="foo.element"/>
+ </start>
+
+ <define name="foo.element">
+ <element>
+ <name ns="">foo</name>
+ <group>
+ <ref name="bar1.element"/>
+ <ref name="bar2.element"/>
+ </group>
+ </element>
+ </define>
+
+ <define name="bar1.element">
+ <element>
+ <name ns="http://www.example.com/n1">bar1</name>
+ <empty/>
+ </element>
+ </define>
+
+ <define name="bar2.element">
+ <element>
+ <name ns="http://www.example.com/n2">bar2</name>
+ <empty/>
+ </element>
+ </define>
+</grammar>]]></programlisting>
+
+<note><para>Strictly speaking, the result of simplification is an
+instance of the data model rather than an XML document. For
+convenience, we use an XML document to represent an instance of the
+data model.</para></note>
+
+</section>
+
+</section>
+
+<section id="semantics">
+<title>Semantics</title>
+
+<para>In this section, we define the semantics of a correct RELAX NG
+schema that has been transformed into the simple syntax. The
+semantics of a RELAX NG schema consist of a specification of what XML
+documents are valid with respect to that schema. The semantics are
+described formally. The formalism uses axioms and inference rules.
+Axioms are propositions that are provable unconditionally. An
+inference rule consists of one or more antecedents and exactly one
+consequent. An antecedent is either positive or negative. If all the
+positive antecedents of an inference rule are provable and none of the
+negative antecedents are provable, then the consequent of the
+inference rule is provable. An XML document is valid with respect to a
+RELAX NG schema if and only if the proposition that it is valid is
+provable in the formalism specified in this section.</para>
+
+<note><para>This kind of formalism is similar to a proof system.
+However, a traditional proof system only has positive
+antecedents.</para></note>
+
+<para>The notation for inference rules separates the antecedents from
+the consequent by a horizontal line: the antecedents are above the
+line; the consequent is below the line. If an antecedent is of the
+form not(<replaceable>p</replaceable>), then it is a negative
+antecedent; otherwise, it is a positive antecedent. Both axioms and
+inferences
+rules may use variables. A variable has a name and optionally a
+subscript. The name of a variable is italicized. Each variable has a
+range that is determined by its name. Axioms and inference rules are
+implicitly universally quantified over the variables they contain. We
+explain this further below.</para>
+
+<para>The possibility that an inference rule or axiom may contain more
+than one occurrence of a particular variable requires that an identity
+relation be defined on each kind of object over which a variable can
+range. The identity relation for all kinds of object is value-based.
+Two objects of a particular kind are identical if the constituents of
+the objects are identical. For example, two attributes are considered
+the same if they have the same name and the same value. Two characters
+are identical if their Unicode character codes are the same.</para>
+
+<section id="name-classes">
+<title>Name classes</title>
+
+<para>The main semantic concept for name classes is that of a name
+belonging to a name class. A name class is an element that matches the
+production nameClass. A name is as defined in <xref
+linkend="data-model"/>: it consists of a namespace URI and a local
+name.</para>
+
+<para>We use the following notation:</para>
+
+<variablelist>
+
+<varlistentry><term><p:var range="name"/></term><listitem><para>is a variable
+that ranges over names</para></listitem></varlistentry>
+
+<varlistentry><term><p:var range="nameClass"/></term><listitem><para>ranges over name classes</para></listitem></varlistentry>
+
+<varlistentry><term><p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:var range="nameClass"/>
+ </p:judgement></term><listitem><para>
+
+asserts that name <p:var range="name"/> is a member of name class <p:var range="nameClass"/>
+
+</para></listitem></varlistentry>
+
+</variablelist>
+
+<para>We are now ready for our first axiom, which is called "anyName
+1":</para>
+
+<p:proofSystem>
+ <p:rule name="anyName 1">
+ <p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:element name="anyName"/>
+ </p:judgement>
+ </p:rule>
+</p:proofSystem>
+
+<para>This says for any name <p:var range="name"/>, <p:var
+range="name"/> belongs to the name class <p:element name="anyName"/>,
+in other words <p:element name="anyName"/> matches any name. Note the
+effect of the implicit universal quantification over the variables in
+the axiom: this is what makes the axiom apply for any name <p:var
+range="name"/>.</para>
+
+<para>Our first inference rule is almost as simple:</para>
+
+<p:proofSystem>
+ <p:rule name="anyName 2">
+ <p:not>
+ <p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:var range="nameClass"/>
+ </p:judgement>
+ </p:not>
+ <p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:element name="anyName">
+ <p:element name="except">
+ <p:var range="nameClass"/>
+ </p:element>
+ </p:element>
+ </p:judgement>
+ </p:rule>
+
+</p:proofSystem>
+
+<para>This says that for any name <p:var range="name"/>
+and for any name class <p:var range="nameClass"/>,
+if <p:var range="name"/> does not belong to <p:var range="nameClass"/>,
+then <p:var range="name"/> belongs to
+ <p:element name="anyName">
+ <p:element name="except">
+ <p:var range="nameClass"/>
+ </p:element>
+ </p:element>. In other words, <p:element name="anyName">
+ <p:element name="except">
+ <p:var range="nameClass"/>
+ </p:element>
+ </p:element> matches any name that does not match <p:var range="nameClass"/>.</para>
+
+<para>We now need the following additional notation:</para>
+
+<variablelist>
+
+<varlistentry><term><p:var range="ncname"/></term>
+
+<listitem><para>ranges over local names; a local name is a string that
+matches the NCName production of <xref linkend="xml-names"/>, that is,
+a name with no colons</para></listitem>
+</varlistentry>
+
+<varlistentry><term><p:var range="uri"/></term><listitem><para>ranges over URIs</para></listitem></varlistentry>
+
+<varlistentry>
+<term>
+ <p:function name="name">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ </p:function>
+</term>
+<listitem><para>constructs a name with URI <p:var range="uri"/> and local
+name <p:var range="ncname"/></para></listitem>
+</varlistentry>
+
+</variablelist>
+
+<para>The remaining axioms and inference rules for name classes are as
+follows:</para>
+
+<p:proofSystem>
+
+ <p:rule name="nsName 1">
+ <p:judgement name="belongs">
+ <p:function name="name">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ </p:function>
+ <p:element name="nsName">
+ <p:attribute name="ns">
+ <p:var range="uri"/>
+ </p:attribute>
+ </p:element>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="nsName 2">
+ <p:not>
+ <p:judgement name="belongs">
+ <p:function name="name">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ </p:function>
+ <p:var range="nameClass"/>
+ </p:judgement>
+ </p:not>
+ <p:judgement name="belongs">
+ <p:function name="name">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ </p:function>
+ <p:element name="nsName">
+ <p:attribute name="ns">
+ <p:var range="uri"/>
+ </p:attribute>
+ <p:element name="except">
+ <p:var range="nameClass"/>
+ </p:element>
+ </p:element>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="name">
+ <p:judgement name="belongs">
+ <p:function name="name">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ </p:function>
+ <p:element name="name">
+ <p:attribute name="ns">
+ <p:var range="uri"/>
+ </p:attribute>
+ <p:var range="ncname"/>
+ </p:element>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="name choice 1">
+ <p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:var range="nameClass" sub="1"/>
+ </p:judgement>
+ <p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:element name="choice">
+ <p:var range="nameClass" sub="1"/>
+ <p:var range="nameClass" sub="2"/>
+ </p:element>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="name choice 2">
+ <p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:var range="nameClass" sub="2"/>
+ </p:judgement>
+ <p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:element name="choice">
+ <p:var range="nameClass" sub="1"/>
+ <p:var range="nameClass" sub="2"/>
+ </p:element>
+ </p:judgement>
+ </p:rule>
+
+</p:proofSystem>
+
+</section>
+
+
+<section>
+<title>Patterns</title>
+
+<para>The axioms and inference rules for patterns use the following
+notation:</para>
+
+<variablelist>
+
+<varlistentry><term><p:var range="context"/></term><listitem><para>ranges
+over contexts (as defined in <xref
+linkend="data-model"/>)</para></listitem></varlistentry>
+
+<varlistentry><term><p:var range="att"/></term><listitem><para>ranges over
+sets of attributes; a set with a single member
+is considered the same as that member</para></listitem></varlistentry>
+
+<varlistentry><term><p:var
+range="mixed"/></term><listitem><para>ranges over sequences of
+elements and strings; a sequence with a single member is considered
+the same as that member; the sequences ranged over by <p:var
+range="mixed"/> may contain consecutive strings and may contain strings
+that are empty; thus, there are sequences ranged over by <p:var
+range="mixed"/> that cannot occur as the children of an
+element</para></listitem></varlistentry>
+
+<varlistentry><term><p:var range="pattern"/></term><listitem><para>ranges
+over patterns (elements matching the pattern
+production)</para></listitem></varlistentry>
+
+<varlistentry><term><p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:var range="pattern"/>
+ </p:judgement></term><listitem><para>
+
+asserts that with respect to context <p:var range="context"/>, the
+attributes <p:var range="att"/> and the sequence of elements and
+strings <p:var range="mixed"/> matches the pattern <p:var
+range="pattern"/></para></listitem></varlistentry>
+
+</variablelist>
+
+<section id="choice-pattern">
+<title><literal>choice</literal> pattern</title>
+
+<para>The semantics of the <literal>choice</literal> pattern are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="choice 1">
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:var range="pattern" sub="1"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:element name="choice">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="pattern" sub="2"/>
+ </p:element>
+ </p:judgement>
+
+ </p:rule>
+
+ <p:rule name="choice 2">
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:var range="pattern" sub="2"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:element name="choice">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="pattern" sub="2"/>
+ </p:element>
+ </p:judgement>
+
+ </p:rule>
+
+
+</p:proofSystem>
+
+</section>
+
+<section>
+<title><literal>group</literal> pattern</title>
+
+<para>We use the following additional notation:</para>
+
+<variablelist>
+
+<varlistentry><term><p:function name="append">
+ <p:var range="mixed" sub="1"/>
+ <p:var range="mixed" sub="2"/>
+ </p:function></term><listitem>
+<para>represents the concatenation of the sequences <p:var range="mixed" sub="1"/> and <p:var range="mixed" sub="2"/>
+
+</para></listitem></varlistentry>
+
+<varlistentry><term><p:function name="union">
+ <p:var range="att" sub="1"/>
+ <p:var range="att" sub="2"/>
+ </p:function></term><listitem>
+<para>represents the union of <p:var range="att" sub="1"/>
+and <p:var range="att" sub="2"/></para>
+</listitem>
+</varlistentry>
+
+</variablelist>
+
+<para>The semantics of the <literal>group</literal> pattern are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="group">
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att" sub="1"/>
+ <p:var range="mixed" sub="1"/>
+ <p:var range="pattern" sub="1"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att" sub="2"/>
+ <p:var range="mixed" sub="2"/>
+ <p:var range="pattern" sub="2"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="union">
+ <p:var range="att" sub="1"/>
+ <p:var range="att" sub="2"/>
+ </p:function>
+ <p:function name="append">
+ <p:var range="mixed" sub="1"/>
+ <p:var range="mixed" sub="2"/>
+ </p:function>
+ <p:element name="group">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="pattern" sub="2"/>
+ </p:element>
+ </p:judgement>
+
+ </p:rule>
+
+</p:proofSystem>
+
+<note><para>The restriction in <xref linkend="attribute-restrictions"/>
+ensures that the set of attributes constructed in the consequent will
+not have multiple attributes with the same name.</para></note>
+
+</section>
+
+
+<section id="empty-pattern">
+<title><literal>empty</literal> pattern</title>
+
+<para>We use the following additional notation:</para>
+
+<variablelist>
+<varlistentry><term><p:function name="emptySequence"/></term><listitem><para>represents an empty sequence</para></listitem></varlistentry>
+
+<varlistentry><term><p:function name="emptySet"/></term><listitem><para>represents an empty set</para></listitem></varlistentry>
+
+</variablelist>
+
+<para>The semantics of the <literal>empty</literal> pattern are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="empty">
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:function name="emptySequence"/>
+ <p:element name="empty"></p:element>
+ <p:function name="emptySet"/>
+ <p:function name="emptySet"/>
+ </p:judgement>
+ </p:rule>
+</p:proofSystem>
+
+</section>
+
+
+<section id="text-pattern">
+<title><literal>text</literal> pattern</title>
+
+<para>We use the following additional notation:</para>
+
+<variablelist>
+<varlistentry><term><p:var range="string"/></term><listitem><para>ranges
+over strings</para></listitem></varlistentry>
+</variablelist>
+
+<para>The semantics of the <literal>text</literal> pattern are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="text 1">
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:function name="emptySequence"/>
+ <p:element name="text"></p:element>
+ <p:function name="emptySet"/>
+ <p:function name="emptySet"/>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="text 2">
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:var range="mixed"/>
+ <p:element name="text"></p:element>
+ <p:function name="emptySet"/>
+ <p:function name="emptySet"/>
+ </p:judgement>
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:function name="append">
+ <p:var range="mixed"/>
+ <p:var range="string"/>
+ </p:function>
+ <p:element name="text"></p:element>
+ <p:function name="emptySet"/>
+ <p:function name="emptySet"/>
+ </p:judgement>
+ </p:rule>
+
+</p:proofSystem>
+
+<para>The effect of the above rule is that a <literal>text</literal>
+element matches zero or more strings.</para>
+
+</section>
+
+
+<section>
+<title><literal>oneOrMore</literal> pattern</title>
+
+<para>We use the following additional notation:</para>
+
+<variablelist>
+<varlistentry><term><p:judgement name="disjoint">
+ <p:var range="att" sub="1"/>
+ <p:var range="att" sub="2"/>
+ </p:judgement></term><listitem><para>
+asserts that there is no name that is
+the name of both an attribute in <p:var range="att" sub="1"/>
+and of an attribute in <p:var range="att" sub="2"/>
+</para></listitem></varlistentry>
+</variablelist>
+
+<para>The semantics of the <literal>oneOrMore</literal> pattern are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="oneOrMore 1">
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:element name="oneOrMore">
+ <p:var range="pattern"/>
+ </p:element>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="oneOrMore 2">
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att" sub="1"/>
+ <p:var range="mixed" sub="1"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att" sub="2"/>
+ <p:var range="mixed" sub="2"/>
+ <p:element name="oneOrMore">
+ <p:var range="pattern"/>
+ </p:element>
+ </p:judgement>
+
+ <p:judgement name="disjoint">
+ <p:var range="att" sub="1"/>
+ <p:var range="att" sub="2"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="union">
+ <p:var range="att" sub="1"/>
+ <p:var range="att" sub="2"/>
+ </p:function>
+ <p:function name="append">
+ <p:var range="mixed" sub="1"/>
+ <p:var range="mixed" sub="2"/>
+ </p:function>
+ <p:element name="oneOrMore">
+ <p:var range="pattern"/>
+ </p:element>
+ </p:judgement>
+ </p:rule>
+
+</p:proofSystem>
+
+</section>
+
+
+<section>
+<title><literal>interleave</literal> pattern</title>
+
+<para>We use the following additional notation:</para>
+
+<variablelist>
+<varlistentry><term><p:judgement name="interleave">
+ <p:var range="mixed" sub="1"/>
+ <p:var range="mixed" sub="2"/>
+ <p:var range="mixed" sub="3"/>
+ </p:judgement></term><listitem><para>
+
+asserts that <p:var range="mixed" sub="1"/>
+is an interleaving of <p:var range="mixed" sub="2"/>
+and <p:var range="mixed" sub="3"/>
+</para></listitem></varlistentry>
+
+</variablelist>
+
+<para>The semantics of interleaving are defined by the following rules.</para>
+
+
+<p:proofSystem>
+ <p:rule name="interleaves 1">
+
+ <p:judgement name="interleave">
+ <p:function name="emptySequence"/>
+ <p:function name="emptySequence"/>
+ <p:function name="emptySequence"/>
+ </p:judgement>
+
+ </p:rule>
+
+ <p:rule name="interleaves 2">
+
+ <p:judgement name="interleave">
+ <p:var range="mixed" sub="1"/>
+ <p:var range="mixed" sub="2"/>
+ <p:var range="mixed" sub="3"/>
+ </p:judgement>
+
+ <p:judgement name="interleave">
+ <p:function name="append">
+ <p:var range="mixed" sub="4"/>
+ <p:var range="mixed" sub="1"/>
+ </p:function>
+ <p:function name="append">
+ <p:var range="mixed" sub="4"/>
+ <p:var range="mixed" sub="2"/>
+ </p:function>
+ <p:var range="mixed" sub="3"/>
+ </p:judgement>
+
+ </p:rule>
+
+ <p:rule name="interleaves 3">
+
+ <p:judgement name="interleave">
+ <p:var range="mixed" sub="1"/>
+ <p:var range="mixed" sub="2"/>
+ <p:var range="mixed" sub="3"/>
+ </p:judgement>
+
+ <p:judgement name="interleave">
+ <p:function name="append">
+ <p:var range="mixed" sub="4"/>
+ <p:var range="mixed" sub="1"/>
+ </p:function>
+ <p:var range="mixed" sub="2"/>
+ <p:function name="append">
+ <p:var range="mixed" sub="4"/>
+ <p:var range="mixed" sub="3"/>
+ </p:function>
+ </p:judgement>
+
+ </p:rule>
+
+</p:proofSystem>
+
+<para>For example, the interleavings of
+<literal><![CDATA[<a/><a/>]]></literal> and
+<literal><![CDATA[<b/>]]></literal> are
+<literal><![CDATA[<a/><a/><b/>]]></literal>,
+<literal><![CDATA[<a/><b/><a/>]]></literal>, and
+<literal><![CDATA[<b/><a/><a/>]]></literal>.</para>
+
+<para>The semantics of the <literal>interleave</literal> pattern are
+as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="interleave">
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att" sub="1"/>
+ <p:var range="mixed" sub="1"/>
+ <p:var range="pattern" sub="1"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att" sub="2"/>
+ <p:var range="mixed" sub="2"/>
+ <p:var range="pattern" sub="2"/>
+ </p:judgement>
+
+ <p:judgement name="interleave">
+ <p:var range="mixed" sub="3"/>
+ <p:var range="mixed" sub="1"/>
+ <p:var range="mixed" sub="2"/>
+ </p:judgement>
+
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="union">
+ <p:var range="att" sub="1"/>
+ <p:var range="att" sub="2"/>
+ </p:function>
+ <p:var range="mixed" sub="3"/>
+ <p:element name="interleave">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="pattern" sub="2"/>
+ </p:element>
+ </p:judgement>
+
+ </p:rule>
+
+</p:proofSystem>
+
+<note><para>The restriction in <xref linkend="attribute-restrictions"/>
+ensures that the set of attributes constructed in the consequent will
+not have multiple attributes with the same name.</para></note>
+
+</section>
+
+<section id="element-pattern">
+<title><literal>element</literal> and <literal>attribute</literal> pattern</title>
+
+<para>The value of an attribute is always a single string, which may
+be empty. Thus, the empty sequence is not a possible attribute value.
+On the hand, the children of an element can be an empty sequence and
+cannot consist of an empty string. In order to ensure that validation
+handles attributes and elements consistently, we introduce a variant
+of matching called <firstterm>weak matching</firstterm>. Weak
+matching is used when matching the pattern for the value of an
+attribute or for the attributes and children of an element. We use
+the following notation to define weak matching.</para>
+
+<variablelist>
+
+<varlistentry><term><p:function
+name="emptyString"/></term><listitem><para>represents an empty
+string</para></listitem></varlistentry>
+
+<varlistentry><term><p:var
+range="whiteSpace"/></term><listitem><para>ranges over the empty
+sequence and strings that consist entirely of
+whitespace</para></listitem></varlistentry>
+
+<varlistentry><term><p:judgement name="weakMatch">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:var range="pattern"/>
+ </p:judgement></term><listitem><para>
+
+asserts that with respect to context <p:var range="context"/>, the
+attributes <p:var range="att"/> and the sequence of elements and
+strings <p:var range="mixed"/> weakly matches the pattern <p:var
+range="pattern"/></para></listitem></varlistentry>
+
+</variablelist>
+
+<para>The semantics of weak matching are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="weak match 1">
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+ <p:judgement name="weakMatch">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+ </p:rule>
+ <p:rule name="weak match 2">
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:function name="emptySequence"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+ <p:judgement name="weakMatch">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="whiteSpace"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+ </p:rule>
+ <p:rule name="weak match 3">
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:function name="emptyString"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+ <p:judgement name="weakMatch">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:function name="emptySequence"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+ </p:rule>
+</p:proofSystem>
+
+<para>We use the following additional notation:</para>
+
+<variablelist>
+
+<varlistentry><term><p:function name="attribute">
+ <p:var range="name"/>
+ <p:var range="string"/>
+ </p:function></term><listitem><para>
+
+constructs an attribute with name <p:var range="name"/>
+and value <p:var range="string"/>
+</para></listitem></varlistentry>
+
+<varlistentry><term><p:function name="element">
+ <p:var range="name"/>
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ </p:function></term><listitem><para>
+
+constructs an element with name <p:var range="name"/>,
+context <p:var range="context"/>,
+attributes <p:var range="att"/>
+and mixed sequence <p:var range="mixed"/> as children
+</para></listitem></varlistentry>
+
+<varlistentry><term><p:judgement name="okAsChildren">
+ <p:var range="mixed"/>
+ </p:judgement></term><listitem><para>
+
+asserts that the mixed sequence <p:var range="mixed"/> can occur as
+the children of an element: it does not contain any member that is an
+empty string, nor does it contain two consecutive members that are
+both strings</para></listitem></varlistentry>
+
+<varlistentry><term><p:judgement name="bind">
+ <p:var range="ncname"/>
+ <p:var range="nameClass"/>
+ <p:var range="pattern"/>
+ </p:judgement></term><listitem><para>
+
+asserts that the grammar contains
+<p:element name="define">
+ <p:attribute name="name">
+ <p:var range="ncname"/>
+ </p:attribute>
+ <p:element name="element">
+ <p:var range="nameClass"/>
+ <p:var range="pattern"/>
+ </p:element>
+</p:element>
+</para></listitem></varlistentry>
+
+</variablelist>
+
+<para>The semantics of the <literal>attribute</literal> pattern are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="attribute">
+
+ <p:judgement name="weakMatch">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:var range="string"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+
+ <p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:var range="nameClass"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="attribute">
+ <p:var range="name"/>
+ <p:var range="string"/>
+ </p:function>
+ <p:function name="emptySequence"/>
+ <p:element name="attribute">
+ <p:var range="nameClass"/>
+ <p:var range="pattern"/>
+ </p:element>
+ </p:judgement>
+
+ </p:rule>
+
+</p:proofSystem>
+
+<para>The semantics of the <literal>element</literal> pattern are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="element">
+
+ <p:judgement name="weakMatch">
+ <p:var range="context" sub="1"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+
+ <p:judgement name="belongs">
+ <p:var range="name"/>
+ <p:var range="nameClass"/>
+ </p:judgement>
+
+ <p:judgement name="okAsChildren">
+ <p:var range="mixed"/>
+ </p:judgement>
+
+ <p:judgement name="bind">
+ <p:var range="ncname"/>
+ <p:var range="nameClass"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context" sub="2"/>
+ <p:function name="emptySet"/>
+ <p:function name="append">
+ <p:var range="whiteSpace" sub="1"/>
+ <p:function name="element">
+ <p:var range="name"/>
+ <p:var range="context" sub="1"/>
+ <p:var range="att"/>
+ <p:var range="mixed"/>
+ </p:function>
+ <p:var range="whiteSpace" sub="2"/>
+ </p:function>
+ <p:element name="ref">
+ <p:attribute name="name">
+ <p:var range="ncname"/>
+ </p:attribute>
+ </p:element>
+ </p:judgement>
+
+ </p:rule>
+
+</p:proofSystem>
+
+
+</section>
+
+<section id="data-pattern">
+<title><literal>data</literal> and <literal>value</literal> pattern</title>
+
+<para>RELAX NG relies on datatype libraries to perform datatyping.
+A datatype library is identified by a URI. A datatype within a
+datatype library is identified by an NCName. A datatype library
+provides two services.</para>
+
+<itemizedlist>
+
+<listitem><para>It can determine whether a string is a legal
+representation of a datatype. This service accepts a list of zero or
+more parameters. For example, a string datatype might have a parameter
+specifying the length of a string. The datatype library determines
+what parameters are applicable for each datatype.</para></listitem>
+
+<listitem><para>It can determine whether two strings represent the
+same value of a datatype. This service does not have any
+parameters.</para></listitem>
+
+</itemizedlist>
+
+<para>Both services may make use of the context of a string. For
+example, a datatype representing a QName would use the namespace
+map.</para>
+
+<para>We use the following additional notation:</para>
+
+<variablelist>
+<varlistentry><term><p:judgement name="datatypeAllows">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="params"/>
+ <p:var range="string"/>
+ <p:var range="context"/>
+ </p:judgement></term><listitem><para>
+
+asserts that in the datatype library identified by URI <p:var range="uri"/>, the string <p:var range="string"/> interpreted with
+context <p:var range="context"/> is a legal
+value of datatype <p:var range="ncname"/> with parameters <p:var range="params"/></para></listitem></varlistentry>
+
+<varlistentry><term><p:judgement name="datatypeEqual">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="string" sub="1"/>
+ <p:var range="context" sub="1"/>
+ <p:var range="string" sub="2"/>
+ <p:var range="context" sub="2"/>
+ </p:judgement></term><listitem><para>
+
+asserts that in the datatype library identified by URI <p:var range="uri"/>, string <p:var range="string" sub="1"/> interpreted with
+context <p:var range="context" sub="1"/> represents the same value of
+the datatype <p:var range="ncname"/> as the string <p:var range="string" sub="2"/> interpreted in the context of <p:var range="context" sub="2"/>
+</para></listitem></varlistentry>
+
+<varlistentry><term><p:var range="params"/></term><listitem><para>ranges over sequences of parameters</para></listitem></varlistentry>
+
+<varlistentry><term><p:context>
+ <p:var range="context"/>
+ </p:context></term><listitem><para>
+
+within the start-tag of a pattern refers to the context
+of the pattern element
+</para></listitem></varlistentry>
+
+<varlistentry>
+<term>
+ <p:function name="context">
+ <p:var range="uri"/>
+ <p:var range="context"/>
+ </p:function>
+</term>
+<listitem><para>constructs a context which is the same as <p:var range="context"/>
+except that the default namespace is <p:var range="uri"/>; if <p:var
+range="uri"/> is the empty string, then there is no default namespace
+in the constructed context</para></listitem></varlistentry>
+
+</variablelist>
+
+<para>The datatypeEqual function must be reflexive, transitive
+and symmetric, that is, the following inference rules must hold:</para>
+
+<p:proofSystem>
+ <p:rule name="datatypeEqual reflexive">
+ <p:judgement name="datatypeAllows">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="params"/>
+ <p:var range="string"/>
+ <p:var range="context"/>
+ </p:judgement>
+ <p:judgement name="datatypeEqual">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="string"/>
+ <p:var range="context"/>
+ <p:var range="string"/>
+ <p:var range="context"/>
+ </p:judgement>
+ </p:rule>
+ <p:rule name="datatypeEqual transitive">
+ <p:judgement name="datatypeEqual">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="string" sub="1"/>
+ <p:var range="context" sub="1"/>
+ <p:var range="string" sub="2"/>
+ <p:var range="context" sub="2"/>
+ </p:judgement>
+ <p:judgement name="datatypeEqual">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="string" sub="2"/>
+ <p:var range="context" sub="3"/>
+ <p:var range="string" sub="3"/>
+ <p:var range="context" sub="3"/>
+ </p:judgement>
+ <p:judgement name="datatypeEqual">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="string" sub="1"/>
+ <p:var range="context" sub="1"/>
+ <p:var range="string" sub="3"/>
+ <p:var range="context" sub="3"/>
+ </p:judgement>
+ </p:rule>
+ <p:rule name="datatypeEqual symmetric">
+ <p:judgement name="datatypeEqual">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="string" sub="1"/>
+ <p:var range="context" sub="1"/>
+ <p:var range="string" sub="2"/>
+ <p:var range="context" sub="2"/>
+ </p:judgement>
+ <p:judgement name="datatypeEqual">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="string" sub="2"/>
+ <p:var range="context" sub="2"/>
+ <p:var range="string" sub="1"/>
+ <p:var range="context" sub="1"/>
+ </p:judgement>
+ </p:rule>
+</p:proofSystem>
+
+<para>The semantics of the <literal>data</literal> and
+<literal>value</literal> patterns are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="value">
+ <p:judgement name="datatypeEqual">
+ <p:var range="uri" sub="1"/>
+ <p:var range="ncname"/>
+ <p:var range="string" sub="1"/>
+ <p:var range="context" sub="1"/>
+ <p:var range="string" sub="2"/>
+ <p:function name="context">
+ <p:var range="uri" sub="2"/>
+ <p:var range="context" sub="2"/>
+ </p:function>
+ </p:judgement>
+ <p:judgement name="match">
+ <p:var range="context" sub="1"/>
+ <p:function name="emptySet"/>
+ <p:var range="string" sub="1"/>
+ <p:element name="value">
+ <p:attribute name="datatypeLibrary">
+ <p:var range="uri" sub="1"/>
+ </p:attribute>
+ <p:attribute name="type">
+ <p:var range="ncname"/>
+ </p:attribute>
+ <p:attribute name="ns">
+ <p:var range="uri" sub="2"/>
+ </p:attribute>
+ <p:context>
+ <p:var range="context" sub="2"/>
+ </p:context>
+ <p:var range="string" sub="2"/>
+ </p:element>
+ <p:function name="emptySet"/>
+ <p:function name="emptySet"/>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="data 1">
+ <p:judgement name="datatypeAllows">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="params"/>
+ <p:var range="string"/>
+ <p:var range="context"/>
+ </p:judgement>
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:var range="string"/>
+ <p:element name="data">
+ <p:attribute name="datatypeLibrary">
+ <p:var range="uri"/>
+ </p:attribute>
+ <p:attribute name="type">
+ <p:var range="ncname"/>
+ </p:attribute>
+ <p:var range="params"/>
+ </p:element>
+ <p:function name="emptySet"/>
+ <p:function name="emptySet"/>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="data 2">
+ <p:judgement name="datatypeAllows">
+ <p:var range="uri"/>
+ <p:var range="ncname"/>
+ <p:var range="params"/>
+ <p:var range="string"/>
+ <p:var range="context"/>
+ </p:judgement>
+ <p:not>
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:var range="att"/>
+ <p:var range="string"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+ </p:not>
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:var range="string"/>
+ <p:element name="data">
+ <p:attribute name="datatypeLibrary">
+ <p:var range="uri"/>
+ </p:attribute>
+ <p:attribute name="type">
+ <p:var range="ncname"/>
+ </p:attribute>
+ <p:var range="params"/>
+ <p:element name="except">
+ <p:var range="pattern"/>
+ </p:element>
+ </p:element>
+ <p:function name="emptySet"/>
+ <p:function name="emptySet"/>
+ </p:judgement>
+ </p:rule>
+
+</p:proofSystem>
+
+</section>
+
+<section id="built-in-datatype">
+<title>Built-in datatype library</title>
+
+<para>The empty URI identifies a special built-in datatype library.
+This provides two datatypes, <literal>string</literal> and
+<literal>token</literal>. No parameters are allowed for either of
+these datatypes.</para>
+
+<variablelist>
+<varlistentry><term>
+ <p:judgement name="equal">
+ <p:var range="string" sub="1"/>
+ <p:var range="string" sub="2"/>
+ </p:judgement></term>
+<listitem><para>asserts that <p:var range="string" sub="1"/>
+and <p:var range="string" sub="2"/> are identical</para></listitem>
+</varlistentry>
+
+<varlistentry><term>
+ <p:function name="normalizeWhiteSpace">
+ <p:var range="string"/>
+ </p:function>
+</term>
+<listitem><para>returns the string <p:var range="string"/>,
+with leading and trailing whitespace characters removed,
+and with each other maximal sequence of whitespace characters
+replaced by a single space character </para></listitem>
+</varlistentry>
+</variablelist>
+
+<para>The semantics of the two built-in datatypes are as
+follows:</para>
+
+<p:proofSystem>
+
+ <p:rule name="string allows">
+ <p:judgement name="datatypeAllows">
+ <p:function name="emptyString"/>
+ <p:string>string</p:string>
+ <p:function name="emptySequence"/>
+ <p:var range="string"/>
+ <p:var range="context"/>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="string equal">
+ <p:judgement name="datatypeEqual">
+ <p:function name="emptyString"/>
+ <p:string>string</p:string>
+ <p:var range="string"/>
+ <p:var range="context" sub="1"/>
+ <p:var range="string"/>
+ <p:var range="context" sub="2"/>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="token allows">
+ <p:judgement name="datatypeAllows">
+ <p:function name="emptyString"/>
+ <p:string>token</p:string>
+ <p:function name="emptySequence"/>
+ <p:var range="string"/>
+ <p:var range="context"/>
+ </p:judgement>
+ </p:rule>
+
+ <p:rule name="token equal">
+ <p:judgement name="equal">
+ <p:function name="normalizeWhiteSpace">
+ <p:var range="string" sub="1"/>
+ </p:function>
+ <p:function name="normalizeWhiteSpace">
+ <p:var range="string" sub="2"/>
+ </p:function>
+ </p:judgement>
+ <p:judgement name="datatypeEqual">
+ <p:function name="emptyString"/>
+ <p:string>token</p:string>
+ <p:var range="string" sub="1"/>
+ <p:var range="context" sub="1"/>
+ <p:var range="string" sub="2"/>
+ <p:var range="context" sub="2"/>
+ </p:judgement>
+ </p:rule>
+
+</p:proofSystem>
+
+</section>
+
+<section>
+<title><literal>list</literal> pattern</title>
+
+<para>We use the following additional notation:</para>
+
+<variablelist>
+<varlistentry><term><p:function name="split">
+ <p:var range="string"/>
+ </p:function></term><listitem><para>
+
+returns a sequence of strings one for each whitespace delimited token
+of <p:var range="string"/>; each string in the returned sequence will
+be non-empty and will not contain any
+whitespace</para></listitem></varlistentry>
+
+</variablelist>
+
+<para>The semantics of the <literal>list</literal> pattern are as follows:</para>
+
+<p:proofSystem>
+ <p:rule name="list">
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:function name="split">
+ <p:var range="string"/>
+ </p:function>
+ <p:var range="pattern"/>
+ </p:judgement>
+
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:var range="string"/>
+ <p:element name="list">
+ <p:var range="pattern"/>
+ </p:element>
+ </p:judgement>
+
+ </p:rule>
+</p:proofSystem>
+
+<note><para>It is crucial in the above inference rule that the
+sequence that is matched against a pattern can contain consecutive
+strings.</para></note>
+
+</section>
+
+</section>
+
+<section id="validity">
+<title>Validity</title>
+
+<para>Now we can define when an element is valid with respect to a
+schema. We use the following additional notation:</para>
+
+<variablelist>
+
+<varlistentry><term><p:var range="element"/></term><listitem><para>ranges over elements</para></listitem></varlistentry>
+
+<varlistentry><term><p:judgement name="valid">
+ <p:var range="element"/>
+ </p:judgement></term><listitem><para>
+
+asserts that the element <p:var range="element"/> is valid with
+respect to the grammar</para></listitem></varlistentry>
+
+<varlistentry><term><p:judgement name="start">
+ <p:var range="pattern"/>
+ </p:judgement></term><listitem><para>
+asserts that the grammar contains
+<p:element name="start"><p:var range="pattern"/> </p:element></para></listitem></varlistentry>
+
+</variablelist>
+
+<para>An element is valid if together with an empty set of attributes
+it matches the <literal>start</literal> pattern of the grammar.</para>
+
+<p:proofSystem>
+ <p:rule name="valid">
+ <p:judgement name="start">
+ <p:var range="pattern"/>
+ </p:judgement>
+ <p:judgement name="match">
+ <p:var range="context"/>
+ <p:function name="emptySet"/>
+ <p:var range="element"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+ <p:judgement name="valid">
+ <p:var range="element"/>
+ </p:judgement>
+ </p:rule>
+
+
+</p:proofSystem>
+
+</section>
+
+<section>
+<title>Example</title>
+
+<para>Let <p:var range="element" sub="0"/> be</para>
+
+<p:formula>
+
+<p:function name="element">
+ <p:function name="name">
+ <p:function name="emptyString"/>
+ <p:string>foo</p:string>
+ </p:function>
+ <p:var range="context" sub="0"/>
+ <p:function name="emptySet"/>
+ <p:var range="mixed"/>
+</p:function>
+
+</p:formula>
+
+<para>where <p:var range="mixed"/> is</para>
+
+<p:formula>
+ <p:function name="append">
+ <p:var range="element" sub="1"/>
+ <p:var range="element" sub="2"/>
+ </p:function>
+</p:formula>
+
+<para>and <p:var range="element" sub="1"/> is</para>
+
+<p:formula>
+ <p:function name="element">
+ <p:function name="name">
+ <p:string>http://www.example.com/n1</p:string>
+ <p:string>bar1</p:string>
+ </p:function>
+ <p:var range="context" sub="1"/>
+ <p:function name="emptySet"/>
+ <p:function name="emptySequence"/>
+ </p:function>
+</p:formula>
+
+<para>and <p:var range="element" sub="2"/> is</para>
+
+<p:formula>
+ <p:function name="element">
+ <p:function name="name">
+ <p:string>http://www.example.com/n2</p:string>
+ <p:string>bar2</p:string>
+ </p:function>
+ <p:var range="context" sub="2"/>
+ <p:function name="emptySet"/>
+ <p:function name="emptySequence"/>
+ </p:function>
+</p:formula>
+
+<para>Assuming appropriate definitions of <p:var range="context"
+sub="0"/>, <p:var range="context" sub="1"/> and <p:var range="context"
+sub="2"/>, this represents the document in <xref
+linkend="data-model-example"/>.</para>
+
+<para>We now show how <p:var range="element" sub="0"/> can be shown to
+be valid with respect to the schema in <xref
+linkend="simple-syntax-example"/>. The schema is equivalent to the
+following propositions:</para>
+
+<p:formula>
+ <p:judgement name="start">
+ <p:element name="ref">
+ <p:attribute name="name"><p:string>foo</p:string></p:attribute>
+ </p:element>
+ </p:judgement>
+</p:formula>
+
+<p:formula>
+ <p:judgement name="bind">
+ <p:string>foo.element</p:string>
+ <p:element name="name">
+ <p:attribute name="ns"><p:function name="emptyString"/></p:attribute>
+ <p:string>foo</p:string>
+ </p:element>
+ <p:element name="group">
+ <p:element name="ref">
+ <p:attribute name="name">
+ <p:string>bar1</p:string>
+ </p:attribute>
+ </p:element>
+ <p:element name="ref">
+ <p:attribute name="name">
+ <p:string>bar2</p:string>
+ </p:attribute>
+ </p:element>
+ </p:element>
+ </p:judgement>
+</p:formula>
+
+<p:formula>
+ <p:judgement name="bind">
+ <p:string>bar1.element</p:string>
+ <p:element name="name">
+ <p:attribute name="ns">
+ <p:string>http://www.example.com/n1</p:string>
+ </p:attribute>
+ <p:string>bar1</p:string>
+ </p:element>
+ <p:element name="empty"/>
+ </p:judgement>
+</p:formula>
+
+<p:formula>
+ <p:judgement name="bind">
+ <p:string>bar2.element</p:string>
+ <p:element name="name">
+ <p:attribute name="ns">
+ <p:string>http://www.example.com/n2</p:string>
+ </p:attribute>
+ <p:string>bar2</p:string>
+ </p:element>
+ <p:element name="empty"/>
+ </p:judgement>
+</p:formula>
+
+
+<para>Let name class <p:var range="nameClass" sub="1"/> be</para>
+
+<p:formula>
+ <p:element name="name">
+ <p:attribute name="ns">
+ <p:string>http://www.example.com/n1</p:string>
+ </p:attribute>
+ <p:string>bar1</p:string>
+ </p:element>
+</p:formula>
+
+<para>and let <p:var range="nameClass" sub="2"/> be</para>
+
+<p:formula>
+ <p:element name="name">
+ <p:attribute name="ns">
+ <p:string>http://www.example.com/n2</p:string>
+ </p:attribute>
+ <p:string>bar2</p:string>
+ </p:element>
+</p:formula>
+
+<para>Then, by the inference rule (name) in <xref
+linkend="name-classes"/>, we have</para>
+
+<p:formula>
+ <p:judgement name="belongs">
+ <p:function name="name">
+ <p:string>http://www.example.com/n1</p:string>
+ <p:string>bar1</p:string>
+ </p:function>
+ <p:var range="nameClass" sub="1"/>
+ </p:judgement>
+</p:formula>
+
+<para>and</para>
+
+<p:formula>
+ <p:judgement name="belongs">
+ <p:function name="name">
+ <p:string>http://www.example.com/n2</p:string>
+ <p:string>bar2</p:string>
+ </p:function>
+ <p:var range="nameClass" sub="2"/>
+ </p:judgement>
+</p:formula>
+
+
+<para>By the inference rule (empty) in <xref linkend="empty-pattern"/>,
+we have</para>
+
+<p:formula>
+ <p:judgement name="match">
+ <p:var range="context" sub="1"/>
+ <p:function name="emptySet"/>
+ <p:function name="emptySequence"/>
+ <p:element name="empty"></p:element>
+ </p:judgement>
+</p:formula>
+
+<para>and</para>
+
+<p:formula>
+ <p:judgement name="match">
+ <p:var range="context" sub="2"/>
+ <p:function name="emptySet"/>
+ <p:function name="emptySequence"/>
+ <p:element name="empty"></p:element>
+ </p:judgement>
+</p:formula>
+
+<para>Thus by the inference rule (element) in <xref
+linkend="element-pattern"/>, we have</para>
+
+<p:formula>
+ <p:judgement name="match">
+ <p:var range="context" sub="0"/>
+ <p:function name="emptySet"/>
+ <p:var range="element" sub="1"/>
+ <p:element name="ref">
+ <p:attribute name="name">
+ <p:string>bar1</p:string>
+ </p:attribute>
+ </p:element>
+ </p:judgement>
+</p:formula>
+
+<para>Note that we have chosen <p:var
+range="context" sub="0"/>, since any context is allowed.</para>
+
+<para>Likewise, we have</para>
+
+<p:formula>
+ <p:judgement name="match">
+ <p:var range="context" sub="0"/>
+ <p:function name="emptySet"/>
+ <p:var range="element" sub="2"/>
+ <p:element name="ref">
+ <p:attribute name="name">
+ <p:string>bar2</p:string>
+ </p:attribute>
+ </p:element>
+ </p:judgement>
+</p:formula>
+
+<para>By the inference rule (group) in <xref
+linkend="choice-pattern"/>, we have</para>
+
+<p:formula>
+ <p:judgement name="match">
+ <p:var range="context" sub="0"/>
+ <p:function name="emptySet"/>
+ <p:function name="append">
+ <p:var range="element" sub="1"/>
+ <p:var range="element" sub="2"/>
+ </p:function>
+ <p:element name="group">
+ <p:element name="ref">
+ <p:attribute name="name">
+ <p:string>bar1</p:string>
+ </p:attribute>
+ </p:element>
+ <p:element name="ref">
+ <p:attribute name="name">
+ <p:string>bar2</p:string>
+ </p:attribute>
+ </p:element>
+ </p:element>
+ </p:judgement>
+</p:formula>
+
+<para>By the inference rule (element) in <xref
+linkend="element-pattern"/>, we have</para>
+
+<p:formula>
+ <p:judgement name="match">
+ <p:var range="context" sub="3"/>
+ <p:function name="emptySet"/>
+ <p:function name="element">
+ <p:function name="name">
+ <p:function name="emptyString"/>
+ <p:string>foo</p:string>
+ </p:function>
+ <p:var range="context" sub="0"/>
+ <p:function name="emptySet"/>
+ <p:var range="mixed"/>
+ </p:function>
+ <p:element name="ref">
+ <p:attribute name="name">
+ <p:string>foo</p:string>
+ </p:attribute>
+ </p:element>
+ </p:judgement>
+</p:formula>
+
+<para>Here <p:var range="context" sub="3"/> is an arbitrary
+context.</para>
+
+<para>Thus we can apply the inference rule (valid) in <xref
+linkend="validity"/> and obtain</para>
+
+<p:formula>
+ <p:judgement name="valid">
+ <p:var range="element" sub="0"/>
+ </p:judgement>
+</p:formula>
+
+</section>
+
+</section>
+
+<section id="restriction">
+<title>Restrictions</title>
+
+<para>The following constraints are all checked after the grammar has
+been transformed to the simple form described in <xref
+linkend="simple-syntax"/>. The purpose of these restrictions is to
+catch user errors and to facilitate implementation.</para>
+
+<section id="contextual-restriction">
+<title>Contextual restrictions</title>
+
+<para>In this section we describe restrictions on where elements are
+allowed in the schema based on the names of the ancestor elements. We
+use the concept of a <firstterm>prohibited path</firstterm> to
+describe these restrictions. A path is a sequence of NCNames separated
+by <literal>/</literal> or <literal>//</literal>.</para>
+
+<itemizedlist>
+
+<listitem><para>An element matches a path
+<replaceable>x</replaceable>, where <replaceable>x</replaceable> is an
+NCName, if and only if the local name of the element is
+<replaceable>x</replaceable></para></listitem>
+
+<listitem><para>An element matches a path
+<replaceable>x</replaceable><literal>/</literal><replaceable>p</replaceable>,
+where <replaceable>x</replaceable> is an NCName and
+<replaceable>p</replaceable> is a path, if and only if the local name
+of the element is <replaceable>x</replaceable> and the element has a
+child that matches <replaceable>p</replaceable></para></listitem>
+
+<listitem><para>An element matches a path
+<replaceable>x</replaceable><literal>//</literal><replaceable>p</replaceable>,
+where <replaceable>x</replaceable> is an NCName and
+<replaceable>p</replaceable> is a path, if and only if the local name
+of the element is <replaceable>x</replaceable> and the element has a
+descendant that matches <replaceable>p</replaceable></para></listitem>
+
+</itemizedlist>
+
+<para>For example, the element</para>
+
+<programlisting><![CDATA[<foo>
+ <bar>
+ <baz/>
+ </bar>
+</foo>]]></programlisting>
+
+<para>matches the paths <literal>foo</literal>,
+<literal>foo/bar</literal>, <literal>foo//bar</literal>,
+<literal>foo//baz</literal>, <literal>foo/bar/baz</literal>,
+<literal>foo/bar//baz</literal> and <literal>foo//bar/baz</literal>,
+but not <literal>foo/baz</literal> or
+<literal>foobar</literal>.</para>
+
+<para>A correct RELAX NG schema must be such that, after
+transformation to the simple form, it does not contain any element
+that matches a prohibited path.</para>
+
+<section>
+<title><literal>attribute</literal> pattern</title>
+
+<para>The following paths are prohibited:</para>
+
+<itemizedlist>
+<listitem><para><literal>attribute//ref</literal></para></listitem>
+<listitem><para><literal>attribute//attribute</literal></para></listitem>
+</itemizedlist>
+
+</section>
+
+<section>
+<title><literal>oneOrMore</literal> pattern</title>
+
+<para>The following paths are prohibited:</para>
+
+<itemizedlist>
+<listitem><para><literal>oneOrMore//group//attribute</literal></para></listitem>
+<listitem><para><literal>oneOrMore//interleave//attribute</literal></para></listitem>
+</itemizedlist>
+
+</section>
+
+<section id="list-restrictions">
+<title><literal>list</literal> pattern</title>
+
+<para>The following paths are prohibited:</para>
+
+<itemizedlist>
+<listitem><para><literal>list//list</literal></para></listitem>
+<listitem><para><literal>list//ref</literal></para></listitem>
+<listitem><para><literal>list//attribute</literal></para></listitem>
+<listitem><para><literal>list//text</literal></para></listitem>
+<listitem><para><literal>list//interleave</literal></para></listitem>
+</itemizedlist>
+</section>
+
+<section id="context-data-except">
+<title><literal>except</literal> in <literal>data</literal> pattern</title>
+
+<para>The following paths are prohibited:</para>
+
+<itemizedlist>
+<listitem><para><literal>data/except//attribute</literal></para></listitem>
+<listitem><para><literal>data/except//ref</literal></para></listitem>
+<listitem><para><literal>data/except//text</literal></para></listitem>
+<listitem><para><literal>data/except//list</literal></para></listitem>
+<listitem><para><literal>data/except//group</literal></para></listitem>
+<listitem><para><literal>data/except//interleave</literal></para></listitem>
+<listitem><para><literal>data/except//oneOrMore</literal></para></listitem>
+<listitem><para><literal>data/except//empty</literal></para></listitem>
+</itemizedlist>
+
+<note><para>This implies that an <literal>except</literal> element
+with a <literal>data</literal> parent can contain only
+<literal>data</literal>, <literal>value</literal> and
+<literal>choice</literal> elements.</para></note>
+
+</section>
+
+<section id="context-start">
+<title><literal>start</literal> element</title>
+
+<para>The following paths are prohibited:</para>
+
+<itemizedlist>
+<listitem><para><literal>start//attribute</literal></para></listitem>
+<listitem><para><literal>start//data</literal></para></listitem>
+<listitem><para><literal>start//value</literal></para></listitem>
+<listitem><para><literal>start//text</literal></para></listitem>
+<listitem><para><literal>start//list</literal></para></listitem>
+<listitem><para><literal>start//group</literal></para></listitem>
+<listitem><para><literal>start//interleave</literal></para></listitem>
+<listitem><para><literal>start//oneOrMore</literal></para></listitem>
+<listitem><para><literal>start//empty</literal></para></listitem>
+</itemizedlist>
+</section>
+
+</section>
+
+<section id="string-sequences">
+<title>String sequences</title>
+
+<para>RELAX NG does not allow a pattern such as:</para>
+
+<programlisting><![CDATA[<element name="foo">
+ <group>
+ <data type="int"/>
+ <element name="bar">
+ <empty/>
+ </element>
+ </group>
+</element>]]></programlisting>
+
+<para>Nor does it allow a pattern such as:</para>
+
+<programlisting><![CDATA[<element name="foo">
+ <group>
+ <data type="int"/>
+ <text/>
+ </group>
+</element>]]></programlisting>
+
+<para>More generally, if the pattern for the content of an element or
+attribute contains</para>
+
+<itemizedlist>
+
+<listitem><para>a pattern that can match a child
+(that is, an <literal>element</literal>, <literal>data</literal>,
+<literal>value</literal>, <literal>list</literal> or
+<literal>text</literal> pattern), and</para></listitem>
+
+<listitem><para>a pattern that matches a single string (that is, a
+<literal>data</literal>, <literal>value</literal> or
+<literal>list</literal> pattern),</para></listitem>
+
+</itemizedlist>
+
+<para>then the two patterns must be alternatives to each other.</para>
+
+<para>This rule does not apply to patterns occurring within a
+<literal>list</literal> pattern.</para>
+
+<para>To formalize this, we use the concept of a content-type. A
+pattern that is allowable as the content of an element has one of
+three content-types: empty, complex and simple. We use the following
+notation.</para>
+
+<variablelist>
+
+<varlistentry>
+<term><p:function name="empty"/></term>
+<listitem><para>returns the empty content-type</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><p:function name="complex"/></term>
+<listitem><para>returns the complex content-type</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><p:function name="simple"/></term>
+<listitem><para>returns the simple content-type</para></listitem>
+</varlistentry>
+
+<varlistentry><term><p:var range="contentType"/></term>
+<listitem><para>ranges over content-types</para></listitem>
+</varlistentry>
+
+<varlistentry><term>
+ <p:judgement name="groupable">
+ <p:var range="contentType" sub="1"/>
+ <p:var range="contentType" sub="2"/>
+ </p:judgement>
+</term>
+<listitem><para>asserts that the content-types <p:var
+range="contentType" sub="1"/> and <p:var range="contentType" sub="2"/>
+are groupable</para></listitem>
+</varlistentry>
+
+</variablelist>
+
+<para>The empty content-type is groupable with anything. In addition,
+the complex content-type is groupable with the complex content-type. The
+following rules formalize this.</para>
+
+<p:proofSystem>
+<p:rule name="group empty 1">
+ <p:judgement name="groupable">
+ <p:function name="empty"/>
+ <p:var range="contentType"/>
+ </p:judgement>
+</p:rule>
+<p:rule name="group empty 2">
+ <p:judgement name="groupable">
+ <p:var range="contentType"/>
+ <p:function name="empty"/>
+ </p:judgement>
+</p:rule>
+<p:rule name="group complex">
+ <p:judgement name="groupable">
+ <p:function name="complex"/>
+ <p:function name="complex"/>
+ </p:judgement>
+</p:rule>
+</p:proofSystem>
+
+<para>Some patterns have a content-type. We use the following
+additional notation.</para>
+
+<variablelist>
+
+<varlistentry><term>
+ <p:judgement name="contentType">
+ <p:var range="pattern"/>
+ <p:var range="contentType"/>
+ </p:judgement>
+</term>
+<listitem><para>asserts that pattern <p:var range="pattern"/> has
+content-type <p:var range="contentType"/></para></listitem>
+</varlistentry>
+
+<varlistentry><term>
+ <p:function name="max">
+ <p:var range="contentType" sub="1"/>
+ <p:var range="contentType" sub="2"/>
+ </p:function>
+</term>
+<listitem><para>returns the maximum of <p:var range="contentType"
+sub="1"/> and <p:var range="contentType" sub="2"/> where the
+content-types in increasing order are <p:function name="empty"/>,
+<p:function name="complex"/>, <p:function
+name="simple"/></para></listitem>
+</varlistentry>
+
+</variablelist>
+
+<para>The following rules define when a pattern has a content-type and,
+if so, what it is.</para>
+
+<p:proofSystem>
+<p:rule name="value">
+ <p:judgement name="contentType">
+ <p:element name="value">
+ <p:attribute name="datatypeLibrary">
+ <p:var range="uri" sub="1"/>
+ </p:attribute>
+ <p:attribute name="type">
+ <p:var range="ncname"/>
+ </p:attribute>
+ <p:attribute name="ns">
+ <p:var range="uri" sub="2"/>
+ </p:attribute>
+ <p:var range="string"/>
+ </p:element>
+ <p:function name="simple"/>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="data 1">
+ <p:judgement name="contentType">
+ <p:element name="data">
+ <p:attribute name="datatypeLibrary">
+ <p:var range="uri"/>
+ </p:attribute>
+ <p:attribute name="type">
+ <p:var range="ncname"/>
+ </p:attribute>
+ <p:var range="params"/>
+ </p:element>
+ <p:function name="simple"/>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="data 2">
+ <p:judgement name="contentType">
+ <p:var range="pattern"/>
+ <p:var range="contentType"/>
+ </p:judgement>
+ <p:judgement name="contentType">
+ <p:element name="data">
+ <p:attribute name="datatypeLibrary">
+ <p:var range="uri"/>
+ </p:attribute>
+ <p:attribute name="type">
+ <p:var range="ncname"/>
+ </p:attribute>
+ <p:var range="params"/>
+ <p:element name="except">
+ <p:var range="pattern"/>
+ </p:element>
+ </p:element>
+ <p:function name="simple"/>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="list">
+ <p:judgement name="contentType">
+ <p:element name="list">
+ <p:var range="pattern"/>
+ </p:element>
+ <p:function name="simple"/>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="text">
+ <p:judgement name="contentType">
+ <p:element name="text"/>
+ <p:function name="complex"/>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="ref">
+ <p:judgement name="contentType">
+ <p:element name="ref">
+ <p:attribute name="name">
+ <p:var range="ncname"/>
+ </p:attribute>
+ </p:element>
+ <p:function name="complex"/>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="empty">
+ <p:judgement name="contentType">
+ <p:element name="empty"/>
+ <p:function name="empty"/>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="attribute">
+ <p:judgement name="contentType">
+ <p:var range="pattern"/>
+ <p:var range="contentType"/>
+ </p:judgement>
+ <p:judgement name="contentType">
+ <p:element name="attribute">
+ <p:var range="nameClass"/>
+ <p:var range="pattern"/>
+ </p:element>
+ <p:function name="empty"/>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="group">
+ <p:judgement name="contentType">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="contentType" sub="1"/>
+ </p:judgement>
+ <p:judgement name="contentType">
+ <p:var range="pattern" sub="2"/>
+ <p:var range="contentType" sub="2"/>
+ </p:judgement>
+ <p:judgement name="groupable">
+ <p:var range="contentType" sub="1"/>
+ <p:var range="contentType" sub="2"/>
+ </p:judgement>
+ <p:judgement name="contentType">
+ <p:element name="group">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="pattern" sub="2"/>
+ </p:element>
+ <p:function name="max">
+ <p:var range="contentType" sub="1"/>
+ <p:var range="contentType" sub="2"/>
+ </p:function>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="interleave">
+ <p:judgement name="contentType">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="contentType" sub="1"/>
+ </p:judgement>
+ <p:judgement name="contentType">
+ <p:var range="pattern" sub="2"/>
+ <p:var range="contentType" sub="2"/>
+ </p:judgement>
+ <p:judgement name="groupable">
+ <p:var range="contentType" sub="1"/>
+ <p:var range="contentType" sub="2"/>
+ </p:judgement>
+ <p:judgement name="contentType">
+ <p:element name="interleave">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="pattern" sub="2"/>
+ </p:element>
+ <p:function name="max">
+ <p:var range="contentType" sub="1"/>
+ <p:var range="contentType" sub="2"/>
+ </p:function>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="oneOrMore">
+ <p:judgement name="contentType">
+ <p:var range="pattern"/>
+ <p:var range="contentType"/>
+ </p:judgement>
+ <p:judgement name="groupable">
+ <p:var range="contentType"/>
+ <p:var range="contentType"/>
+ </p:judgement>
+ <p:judgement name="contentType">
+ <p:element name="oneOrMore">
+ <p:var range="pattern"/>
+ </p:element>
+ <p:var range="contentType"/>
+ </p:judgement>
+</p:rule>
+
+<p:rule name="choice">
+ <p:judgement name="contentType">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="contentType" sub="1"/>
+ </p:judgement>
+ <p:judgement name="contentType">
+ <p:var range="pattern" sub="2"/>
+ <p:var range="contentType" sub="2"/>
+ </p:judgement>
+ <p:judgement name="contentType">
+ <p:element name="choice">
+ <p:var range="pattern" sub="1"/>
+ <p:var range="pattern" sub="2"/>
+ </p:element>
+ <p:function name="max">
+ <p:var range="contentType" sub="1"/>
+ <p:var range="contentType" sub="2"/>
+ </p:function>
+ </p:judgement>
+</p:rule>
+
+</p:proofSystem>
+
+<note><para>The antecedent in the (data 2) rule above is in fact
+redundant because of the prohibited paths in <xref
+linkend="context-data-except"/>.</para></note>
+
+<para>Now we can describe the restriction. We use the following
+notation.</para>
+
+<variablelist>
+
+<varlistentry><term>
+ <p:judgement name="incorrectSchema"/>
+</term>
+<listitem><para>asserts that the schema is incorrect</para></listitem>
+</varlistentry>
+
+</variablelist>
+
+<para>All patterns occurring as the content of an element pattern must
+have a content-type.</para>
+
+<p:proofSystem>
+
+<p:rule name="element">
+ <p:judgement name="bind">
+ <p:var range="ncname"/>
+ <p:var range="nameClass"/>
+ <p:var range="pattern"/>
+ </p:judgement>
+ <p:not>
+ <p:judgement name="contentType">
+ <p:var range="pattern"/>
+ <p:var range="contentType"/>
+ </p:judgement>
+ </p:not>
+ <p:judgement name="incorrectSchema"/>
+</p:rule>
+
+</p:proofSystem>
+
+</section>
+
+<section id="attribute-restrictions">
+<title>Restrictions on attributes</title>
+
+<para>Duplicate attributes are not allowed. More precisely, for a
+pattern <literal>&lt;group> <replaceable>p1</replaceable>
+<replaceable>p2</replaceable> &lt;/group></literal> or
+<literal>&lt;interleave> <replaceable>p1</replaceable>
+<replaceable>p2</replaceable> &lt;/interleave></literal>, there must
+not be a name that belongs to both the name class of an
+<literal>attribute</literal> pattern occurring in
+<replaceable>p1</replaceable> and the name class of an
+<literal>attribute</literal> pattern occurring in
+<replaceable>p2</replaceable>. A pattern <replaceable>p1</replaceable>
+is defined to <firstterm>occur in</firstterm> a pattern
+<replaceable>p2</replaceable> if</para>
+
+<itemizedlist>
+
+<listitem><para><replaceable>p1</replaceable> is
+<replaceable>p2</replaceable>, or</para></listitem>
+
+<listitem><para><replaceable>p2</replaceable> is a
+<literal>choice</literal>, <literal>interleave</literal>,
+<literal>group</literal> or <literal>oneOrMore</literal> element and
+<replaceable>p1</replaceable> occurs in one or more children of
+<replaceable>p2</replaceable>.</para></listitem>
+
+</itemizedlist>
+
+<para>Attributes using infinite name classes must be repeated. More
+precisely, an <literal>attribute</literal> element that has an
+<literal>anyName</literal> or <literal>nsName</literal> descendant
+element must have a <literal>oneOrMore</literal> ancestor
+element.</para>
+
+<note><para>This restriction is necessary for closure under
+negation.</para></note>
+
+</section>
+
+<section id="interleave-restrictions">
+<title>Restrictions on <literal>interleave</literal></title>
+
+<para>For a pattern <literal>&lt;interleave>
+<replaceable>p1</replaceable> <replaceable>p2</replaceable>
+&lt;/interleave></literal>,</para>
+
+<itemizedlist>
+
+<listitem><para>there must not be a name that belongs to both the name
+class of an <literal>element</literal> pattern referenced by a
+<literal>ref</literal> pattern occurring in
+<replaceable>p1</replaceable> and the name class of an
+<literal>element</literal> pattern referenced by a
+<literal>ref</literal> pattern occurring in
+<replaceable>p2</replaceable>, and</para></listitem>
+
+<listitem><para>a <literal>text</literal> pattern must not occur in
+both <replaceable>p1</replaceable> and
+<replaceable>p2</replaceable>.</para></listitem>
+
+</itemizedlist>
+
+<para><xref linkend="attribute-restrictions"/> defines when one
+pattern is considered to occur in another pattern.</para>
+
+</section>
+
+</section>
+
+<section id="conformance">
+<title>Conformance</title>
+
+<para>A conforming RELAX NG validator must be able to determine for
+any XML document whether it is a correct RELAX NG schema. A
+conforming RELAX NG validator must be able to determine for any XML
+document and for any correct RELAX NG schema whether the document is
+valid with respect to the schema.</para>
+
+<para>However, the requirements in the preceding paragraph do not
+apply if the schema uses a datatype library that the validator does
+not support. A conforming RELAX NG validator is only required to
+support the built-in datatype library described in <xref
+linkend="built-in-datatype"/>. A validator that claims conformance to
+RELAX NG should document which datatype libraries it supports. The
+requirements in the preceding paragraph also do not apply if the
+schema includes <literal>externalRef</literal> or
+<literal>include</literal> elements and the validator is unable to
+retrieve the resource identified by the URI or is unable to construct
+an element from the retrieved resource. A validator that claims
+conformance to RELAX NG should document its capabilities for handling
+URI references.</para>
+
+</section>
+
+<appendix>
+<title>RELAX NG schema for RELAX NG</title>
+
+<rngref src="relaxng.rng"/>
+
+</appendix>
+
+<appendix>
+<title>Changes since version 0.9</title>
+
+<para>The changes in this version relative to version 0.9
+are as follows:</para>
+
+<itemizedlist>
+
+<listitem><para>in the namespace URI, <literal>0.9</literal> has been
+changed to <literal>1.0</literal></para></listitem>
+
+<listitem><para><literal>data/except//empty</literal> has been added
+as a prohibited path (see <xref
+linkend="context-data-except"/>)</para></listitem>
+
+<listitem><para><literal>start//empty</literal> has been added
+as a prohibited path (see <xref
+linkend="context-start"/>)</para></listitem>
+
+<listitem><para><xref linkend="number-child-elements"/> now specifies how a
+<literal>list</literal> element with more than one child element is
+transformed</para></listitem>
+
+<listitem><para><xref linkend="notAllowed"/> now specifies how a
+<literal>notAllowed</literal> element occurring in an
+<literal>except</literal> element is transformed</para></listitem>
+
+<listitem><para>although a relative URI is not allowed as the value of
+the <literal>ns</literal> and <literal>datatypeLibrary</literal>
+attributes, an empty string is allowed (see <xref
+linkend="full-syntax"/>)</para></listitem>
+
+<listitem><para>the removal of unreachable definitions in <xref
+linkend="define-ref"/> is now correctly specified</para></listitem>
+
+<listitem><para><xref linkend="notAllowed"/> now specifies that
+<literal>define</literal> elements that are no longer reachable are
+removed</para></listitem>
+
+<listitem><para><xref linkend="constraints"/> has been added; the
+restrictions on the contents of <literal>except</literal> in name
+classes that are now specified in the newly added section were
+previously specified in a subsection of <xref
+linkend="contextual-restriction"/>, which has been
+removed</para></listitem>
+
+<listitem><para>the treatment of element and attribute values that
+consist only of whitespace has been refined (see <xref
+linkend="element-pattern"/> and <xref
+linkend="data-pattern"/>)</para></listitem>
+
+<listitem><para>attributes with infinite name classes are now required
+to be repeated (see <xref
+linkend="attribute-restrictions"/>)</para></listitem>
+
+<listitem><para>restrictions have been imposed on
+<literal>interleave</literal> (see <xref
+linkend="interleave-restrictions"/>); <literal>list//interleave</literal>
+has been added as a prohibited path (see <xref
+linkend="list-restrictions"/>)</para></listitem>
+
+<listitem><para>some of the prohibited paths in <xref
+linkend="contextual-restriction"/> have been corrected to use
+<literal>ref</literal> rather than
+<literal>element</literal></para></listitem>
+
+<listitem><para>an error in the inference rule (text 1) in <xref
+linkend="text-pattern"/> has been corrected</para></listitem>
+
+<listitem><para>the value of the <literal>ns</literal> attribute is
+now unconstrained (see <xref
+linkend="full-syntax"/>)</para></listitem>
+
+</itemizedlist>
+
+</appendix>
+
+<appendix>
+<title>RELAX NG TC (Non-Normative)</title>
+
+<para>This specification was prepared and approved for publication by
+the RELAX NG TC. The current members of the TC are:</para>
+
+<itemizedlist>
+<listitem><para>Fabio Arciniegas</para></listitem>
+<listitem><para>James Clark</para></listitem>
+<listitem><para>Mike Fitzgerald</para></listitem>
+<listitem><para>KAWAGUCHI Kohsuke</para></listitem>
+<listitem><para>Josh Lubell</para></listitem>
+<listitem><para>MURATA Makoto</para></listitem>
+<listitem><para>Norman Walsh</para></listitem>
+<listitem><para>David Webber</para></listitem>
+</itemizedlist>
+
+</appendix>
+
+<bibliography><title>References</title>
+
+<bibliodiv><title>Normative</title>
+
+<bibliomixed id="xml-rec"><abbrev>XML 1.0</abbrev>Tim Bray,
+Jean Paoli, and
+C. M. Sperberg-McQueen, Eve Maler, editors.
+<citetitle><ulink url="http://www.w3.org/TR/REC-xml">Extensible Markup
+Language (XML) 1.0 Second Edition</ulink></citetitle>.
+W3C (World Wide Web Consortium), 2000.</bibliomixed>
+
+<bibliomixed id="xml-names"><abbrev>XML Namespaces</abbrev>Tim Bray,
+Dave Hollander,
+and Andrew Layman, editors.
+<citetitle><ulink url="http://www.w3.org/TR/REC-xml-names/">Namespaces in
+XML</ulink></citetitle>.
+W3C (World Wide Web Consortium), 1999.</bibliomixed>
+
+<bibliomixed id="xlink"><abbrev>XLink</abbrev>Steve DeRose, Eve Maler
+and David Orchard, editors.
+<citetitle><ulink url="http://www.w3.org/TR/xlink/">XML Linking
+Language (XLink) Version 1.0</ulink></citetitle>.
+W3C (World Wide Web Consortium), 2001.</bibliomixed>
+
+<bibliomixed id="infoset"><abbrev>XML Infoset</abbrev>John Cowan, Richard Tobin,
+editors.
+<citetitle><ulink url="http://www.w3.org/TR/xml-infoset/">XML
+Information Set</ulink></citetitle>.
+W3C (World Wide Web Consortium), 2001.</bibliomixed>
+
+<bibliomixed id="rfc2396"><abbrev>RFC 2396</abbrev>T. Berners-Lee, R. Fielding, L. Masinter.
+<citetitle><ulink url="http://www.ietf.org/rfc/rfc2396.txt" >RFC 2396:
+Uniform Resource Identifiers (URI): Generic
+Syntax</ulink></citetitle>.
+IETF (Internet Engineering Task Force). 1998.</bibliomixed>
+
+<bibliomixed id="rfc2732"><abbrev>RFC 2732</abbrev>R. Hinden, B. Carpenter, L. Masinter.
+<citetitle><ulink url="http://www.ietf.org/rfc/rfc2732.txt">RFC 2732: Format for Literal IPv6 Addresses in URL's</ulink></citetitle>.
+IETF (Internet Engineering Task Force), 1999.</bibliomixed>
+
+<bibliomixed id="rfc3023"><abbrev>RFC 3023</abbrev> M. Murata,
+S. St.Laurent, D. Kohn. <citetitle><ulink
+url="http://www.ietf.org/rfc/rfc3023.txt">RFC 3023: XML Media
+Types</ulink></citetitle>. IETF (Internet Engineering Task Force),
+2001.</bibliomixed>
+
+</bibliodiv>
+
+<bibliodiv><title>Non-Normative</title>
+
+<bibliomixed id="xmlschema-2"><abbrev>W3C XML Schema Datatypes</abbrev>Paul V. Biron, Ashok Malhotra, editors.
+<citetitle><ulink url="http://www.w3.org/TR/xmlschema-2/">XML Schema Part 2: Datatypes</ulink></citetitle>.
+W3C (World Wide Web Consortium), 2001.</bibliomixed>
+
+<bibliomixed id="trex"><abbrev>TREX</abbrev>James Clark.
+<citetitle><ulink url="http://www.thaiopensource.com/trex/">TREX - Tree Regular Expressions for XML</ulink></citetitle>.
+Thai Open Source Software Center, 2001.</bibliomixed>
+
+<bibliomixed id="relax"><abbrev>RELAX</abbrev>MURATA Makoto.
+<citetitle><ulink url="http://www.xml.gr.jp/relax/">RELAX (Regular
+Language description for XML)</ulink></citetitle>. INSTAC
+(Information Technology Research and Standardization Center), 2001.</bibliomixed>
+
+<bibliomixed id="xsfd"><abbrev>XML Schema Formal</abbrev>Allen Brown,
+Matthew Fuchs, Jonathan Robie, Philip Wadler, editors.
+<citetitle><ulink url="http://www.w3.org/TR/xmlschema-formal/">XML Schema: Formal Description</ulink></citetitle>.
+W3C (World Wide Web Consortium), 2001.</bibliomixed>
+
+<bibliomixed id="tutorial"><abbrev>Tutorial</abbrev>James Clark,
+Makoto MURATA, editors. <citetitle><ulink
+url="http://www.oasis-open.org/committees/relax-ng/tutorial.html">RELAX
+NG Tutorial</ulink></citetitle>. OASIS, 2001.</bibliomixed>
+
+</bibliodiv>
+
+</bibliography>
+
+</article>
diff --git a/test/relaxng/table.rng b/test/relaxng/table.rng
new file mode 100644
index 0000000..c14e603
--- /dev/null
+++ b/test/relaxng/table.rng
@@ -0,0 +1,21 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="cell.content">
+ <notAllowed/>
+</define>
+
+<start>
+ <element name="table">
+ <oneOrMore>
+ <element name="tr">
+ <oneOrMore>
+ <element name="td">
+ <ref name="cell.content"/>
+ </element>
+ </oneOrMore>
+ </element>
+ </oneOrMore>
+ </element>
+</start>
+
+</grammar>
diff --git a/test/relaxng/testsuite.xml b/test/relaxng/testsuite.xml
new file mode 100644
index 0000000..09a8f38
--- /dev/null
+++ b/test/relaxng/testsuite.xml
@@ -0,0 +1,1708 @@
+<testSuite>
+<author>Daniel Veillard</author>
+<email>daniel@veillard.com</email>
+<documentation>For libxml2 implementation of Relax NG spec.</documentation>
+<testSuite>
+<documentation>Test of node matches</documentation>
+<testCase>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0">
+ <anyName>
+ <except>
+ <nsName ns="http://example.org"/>
+ </except>
+ </anyName>
+ <empty/>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+<valid>
+<foo xmlns="http://example.org/"/>
+</valid>
+<valid>
+<foo xmlns="http://EXAMPLE.ORG"/>
+</valid>
+<invalid>
+<foo xmlns="http://example.org"/>
+</invalid>
+<invalid>
+<a:foo xmlns:a="http://example.org"/>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="top" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="foo" ns="http://example.org">
+ <empty/>
+ </element>
+ <element>
+ <anyName>
+ <except>
+ <nsName ns="http://example.org"/>
+ </except>
+ </anyName>
+ <empty/>
+ </element>
+ </interleave>
+</element>
+</correct>
+<invalid>
+<top>
+<foo/>
+<bar/>
+</top>
+</invalid>
+<invalid>
+<top>
+<foo xmlns="http://example.org"/>
+<bar xmlns="http://example.org"/>
+</top>
+</invalid>
+<valid>
+<top>
+<foo xmlns="http://example.org"/>
+<bar/>
+</top>
+</valid>
+<valid>
+<top>
+<bar/>
+<foo xmlns="http://example.org"/>
+</top>
+</valid>
+<valid>
+<top>
+<foo xmlns="http://example.org"/>
+<bar xmlns="http://example.org/"/>
+</top>
+</valid>
+<valid>
+<top>
+<bar xmlns="http://example.org/"/>
+<foo xmlns="http://example.org"/>
+</top>
+</valid>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Test of indeterminism</documentation>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <element name="baz">
+ <empty/>
+ </element>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+ <baz/>
+</foo>
+</valid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <element name="baz">
+ <empty/>
+ </element>
+ </group>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+ <baz/>
+</foo>
+</valid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </group>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <element name="baz">
+ <empty/>
+ </element>
+ </choice>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+<valid>
+<foo>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+<invalid>
+<foo>
+ <bar/>
+ <baz/>
+</foo>
+</invalid>
+<invalid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+ <bar/>
+ <baz/>
+</foo>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <element name="baz">
+ <empty/>
+ </element>
+ </choice>
+ <element name="baz">
+ <empty/>
+ </element>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <baz/>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+ <baz/>
+</foo>
+</valid>
+<invalid>
+<foo>
+ <bar/>
+ <baz/>
+ <baz/>
+</foo>
+</invalid>
+<invalid>
+<foo>
+ <baz/>
+ <bar/>
+ <baz/>
+</foo>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </choice>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+<valid>
+<foo>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <zeroOrMore>
+ <choice>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="baz">
+ <empty/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </choice>
+</element>
+</correct>
+<valid>
+<foo/>
+</valid>
+<valid>
+<foo>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <baz/>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <baz/>
+ <baz/>
+ <baz/>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <baz/>
+ <bar/>
+ <baz/>
+ <bar/>
+</foo>
+</valid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <element name="bar">
+ <empty/>
+ </element>
+ </optional>
+ <element name="baz">
+ <empty/>
+ </element>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <baz/>
+</foo>
+</valid>
+<invalid>
+<foo>
+ <bar/>
+ <bar/>
+ <baz/>
+</foo>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <element name="bar">
+ <empty/>
+ </element>
+ </optional>
+ <element name="bar">
+ <empty/>
+ </element>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+<invalid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+</foo>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <oneOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </oneOrMore>
+ </optional>
+ <element name="baz">
+ <empty/>
+ </element>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <baz/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <baz/>
+</foo>
+</valid>
+<invalid>
+<foo>
+ <bar/>
+ <bar/>
+</foo>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <optional>
+ <oneOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </oneOrMore>
+ </optional>
+ <element name="bar">
+ <empty/>
+ </element>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+</testCase>
+<testCase>
+<correct>
+<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0">
+ <group>
+ <zeroOrMore>
+ <choice>
+ <element name="bar">
+ <empty/>
+ </element>
+ <element name="baz">
+ <empty/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ <element name="bar">
+ <empty/>
+ </element>
+ </group>
+</element>
+</correct>
+<invalid>
+<foo/>
+</invalid>
+<valid>
+<foo>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <baz/>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <bar/>
+ <bar/>
+ <bar/>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <baz/>
+ <baz/>
+ <baz/>
+ <bar/>
+</foo>
+</valid>
+<valid>
+<foo>
+ <baz/>
+ <bar/>
+ <baz/>
+ <bar/>
+</foo>
+</valid>
+<invalid>
+<foo>
+ <bar/>
+ <baz/>
+ <bar/>
+ <baz/>
+</foo>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="list" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <element name="label">
+ <empty/>
+ </element>
+ <optional>
+ <element name="opt">
+ <empty/>
+ </element>
+ </optional>
+ <element name="item">
+ <empty/>
+ </element>
+ </oneOrMore>
+</element>
+</correct>
+<invalid>
+<list>
+</list>
+</invalid>
+<valid>
+<list>
+ <label/>
+ <item/>
+</list>
+</valid>
+<valid>
+<list>
+ <label/>
+ <item/>
+ <label/>
+ <item/>
+</list>
+</valid>
+<valid>
+<list>
+ <label/>
+ <opt/>
+ <item/>
+ <label/>
+ <opt/>
+ <item/>
+</list>
+</valid>
+<invalid>
+<list>
+ <label/>
+ <item/>
+ <label/>
+ <opt/>
+ <opt/>
+ <item/>
+</list>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="list" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <element name="label">
+ <empty/>
+ </element>
+ <zeroOrMore>
+ <element name="opt">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <element name="item">
+ <empty/>
+ </element>
+ </oneOrMore>
+</element>
+</correct>
+<invalid>
+<list>
+</list>
+</invalid>
+<valid>
+<list>
+ <label/>
+ <item/>
+</list>
+</valid>
+<valid>
+<list>
+ <label/>
+ <item/>
+ <label/>
+ <item/>
+</list>
+</valid>
+<valid>
+<list>
+ <label/>
+ <opt/>
+ <item/>
+ <label/>
+ <opt/>
+ <item/>
+</list>
+</valid>
+<valid>
+<list>
+ <label/>
+ <item/>
+ <label/>
+ <opt/>
+ <opt/>
+ <item/>
+</list>
+</valid>
+</testCase>
+<testCase>
+<correct>
+<element name="list" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <element name="label">
+ <empty/>
+ </element>
+ <zeroOrMore>
+ <element name="opt">
+ <empty/>
+ </element>
+ <element name="opt2">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ <element name="item">
+ <empty/>
+ </element>
+ </oneOrMore>
+</element>
+</correct>
+<invalid>
+<list>
+</list>
+</invalid>
+<valid>
+<list>
+ <label/>
+ <item/>
+</list>
+</valid>
+<valid>
+<list>
+ <label/>
+ <item/>
+ <label/>
+ <item/>
+</list>
+</valid>
+<valid>
+<list>
+ <label/>
+ <opt/>
+ <opt2/>
+ <item/>
+ <label/>
+ <opt/>
+ <opt2/>
+ <item/>
+</list>
+</valid>
+<valid>
+<list>
+ <label/>
+ <item/>
+ <label/>
+ <opt/>
+ <opt2/>
+ <opt/>
+ <opt2/>
+ <item/>
+</list>
+</valid>
+<invalid>
+<list>
+ <label/>
+ <opt/>
+ <item/>
+ <label/>
+ <item/>
+</list>
+</invalid>
+<invalid>
+<list>
+ <label/>
+ <item/>
+ <label/>
+ <opt2/>
+ <opt/>
+ <item/>
+</list>
+</invalid>
+<invalid>
+<list>
+ <label/>
+ <item/>
+ <label/>
+ <opt/>
+ <opt2/>
+ <opt/>
+ <item/>
+</list>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Test of grammars merging</documentation>
+<testCase>
+<resource name="dbk.rng">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="p"/>
+ </start>
+ <define name="p.ext">
+ <notAllowed/>
+ </define>
+ <define name="p">
+ <element name="p">
+ <choice>
+ <ref name="p.ext"/>
+ <empty/>
+ <element name="a">
+ <text/>
+ </element>
+ </choice>
+ </element>
+ </define>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <grammar>
+ <include href="dbk.rng"/>
+ <define name="p.ext" combine="choice">
+ <element name="b">
+ <text/>
+ </element>
+ </define>
+ </grammar>
+ </start>
+</grammar>
+</correct>
+<valid>
+<p/>
+</valid>
+<valid>
+<p>
+ <a/>
+</p>
+</valid>
+<valid>
+<p>
+ <b/>
+</p>
+</valid>
+<invalid>
+<b/>
+</invalid>
+<invalid>
+<p>
+ <b/>
+ <b/>
+</p>
+</invalid>
+</testCase>
+<testCase>
+<resource name="dbk.rng">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="p"/>
+ </start>
+ <define name="p.ext">
+ <notAllowed/>
+ </define>
+ <define name="p">
+ <element name="p">
+ <choice>
+ <ref name="p.ext"/>
+ <empty/>
+ <element name="a">
+ <text/>
+ </element>
+ </choice>
+ </element>
+ </define>
+ <define name="c">
+ <element name="c">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <grammar>
+ <include href="dbk.rng"/>
+ <define name="p.ext" combine="choice">
+ <choice>
+ <ref name="c"/>
+ <parentRef name="d"/>
+ <element name="b">
+ <text/>
+ </element>
+ </choice>
+ </define>
+ </grammar>
+ </start>
+ <define name="d">
+ <element name="d">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid>
+<p/>
+</valid>
+<valid>
+<p>
+ <a/>
+</p>
+</valid>
+<valid>
+<p>
+ <b/>
+</p>
+</valid>
+<valid>
+<p>
+ <c/>
+</p>
+</valid>
+<valid>
+<p>
+ <d/>
+</p>
+</valid>
+<invalid>
+<b/>
+</invalid>
+<invalid>
+<c/>
+</invalid>
+<invalid>
+<d/>
+</invalid>
+<invalid>
+<p>
+ <b/>
+ <c/>
+</p>
+</invalid>
+<invalid>
+<p>
+ <d/>
+ <c/>
+</p>
+</invalid>
+</testCase>
+<testCase>
+<resource name="dbk.rng">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="p"/>
+ </start>
+ <define name="p.ext">
+ <notAllowed/>
+ </define>
+ <define name="p">
+ <element name="p">
+ <choice>
+ <ref name="p.ext"/>
+ <empty/>
+ <element name="a">
+ <text/>
+ </element>
+ </choice>
+ </element>
+ </define>
+ <define name="c">
+ <element name="c">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<resource name="proof.rng">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="e"/>
+ </start>
+ <define name="d">
+ <element name="d">
+ <empty/>
+ </element>
+ </define>
+ <define name="e">
+ <element name="e">
+ <empty/>
+ </element>
+ </define>
+ <define name="f">
+ <element name="f">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <grammar>
+ <include href="dbk.rng"/>
+ <define name="p.ext" combine="choice">
+ <choice>
+ <ref name="c"/>
+ <grammar>
+ <include href="proof.rng"/>
+ <start combine="choice">
+ <ref name="d"/>
+ </start>
+ </grammar>
+ <element name="b">
+ <text/>
+ </element>
+ </choice>
+ </define>
+ </grammar>
+ </start>
+ <define name="g">
+ <element name="g">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid>
+<p/>
+</valid>
+<valid>
+<p>
+ <a/>
+</p>
+</valid>
+<valid>
+<p>
+ <b/>
+</p>
+</valid>
+<valid>
+<p>
+ <c/>
+</p>
+</valid>
+<valid>
+<p>
+ <d/>
+</p>
+</valid>
+<valid>
+<p>
+ <e/>
+</p>
+</valid>
+<invalid>
+<p>
+ <f/>
+</p>
+</invalid>
+<invalid>
+<p>
+ <g/>
+</p>
+</invalid>
+<invalid>
+<b/>
+</invalid>
+<invalid>
+<c/>
+</invalid>
+<invalid>
+<d/>
+</invalid>
+<invalid>
+<e/>
+</invalid>
+<invalid>
+<f/>
+</invalid>
+<invalid>
+<g/>
+</invalid>
+<invalid>
+<p>
+ <d/>
+ <c/>
+</p>
+</invalid>
+<invalid>
+<p>
+ <d/>
+ <e/>
+</p>
+</invalid>
+</testCase>
+<testCase>
+<resource name="dbk.rng">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="p"/>
+ </start>
+ <define name="p.ext">
+ <notAllowed/>
+ </define>
+ <define name="p">
+ <element name="p">
+ <choice>
+ <ref name="p.ext"/>
+ <empty/>
+ <element name="a">
+ <text/>
+ </element>
+ </choice>
+ </element>
+ </define>
+ <define name="c">
+ <element name="c">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<resource name="proof.rng">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+ ns="http://example.org/ns/proofsystem">
+ <start>
+ <ref name="e"/>
+ </start>
+ <define name="d">
+ <element name="d">
+ <empty/>
+ </element>
+ </define>
+ <define name="e">
+ <element name="e">
+ <empty/>
+ </element>
+ </define>
+ <define name="f">
+ <element name="f">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <grammar>
+ <include href="dbk.rng"/>
+ <define name="p.ext" combine="choice">
+ <choice>
+ <ref name="c"/>
+ <grammar>
+ <include href="proof.rng"/>
+ <start combine="choice">
+ <ref name="d"/>
+ </start>
+ </grammar>
+ <element name="b">
+ <text/>
+ </element>
+ </choice>
+ </define>
+ </grammar>
+ </start>
+ <define name="g">
+ <element name="g">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</correct>
+<valid>
+<p/>
+</valid>
+<valid>
+<p>
+ <a/>
+</p>
+</valid>
+<valid>
+<p>
+ <b/>
+</p>
+</valid>
+<valid>
+<p>
+ <c/>
+</p>
+</valid>
+<valid>
+<p xmlns:p="http://example.org/ns/proofsystem">
+ <p:d/>
+</p>
+</valid>
+<invalid>
+<p>
+ <d/>
+</p>
+</invalid>
+<valid>
+<p xmlns:p="http://example.org/ns/proofsystem">
+ <p:e/>
+</p>
+</valid>
+<invalid>
+<p>
+ <e/>
+</p>
+</invalid>
+<invalid>
+<p xmlns:p="http://example.org/ns/proofsystem">
+ <p:f/>
+</p>
+</invalid>
+<invalid>
+<p>
+ <f/>
+</p>
+</invalid>
+<invalid>
+<p>
+ <g/>
+</p>
+</invalid>
+<invalid>
+<b/>
+</invalid>
+<invalid>
+<c/>
+</invalid>
+<invalid>
+<d/>
+</invalid>
+<invalid>
+<e/>
+</invalid>
+<invalid>
+<f/>
+</invalid>
+<invalid>
+<g/>
+</invalid>
+<invalid>
+<p xmlns:p="http://example.org/ns/proofsystem">
+ <p:d/>
+ <c/>
+</p>
+</invalid>
+<invalid>
+<p xmlns:p="http://example.org/ns/proofsystem">
+ <p:d/>
+ <p:e/>
+</p>
+</invalid>
+</testCase>
+<testCase>
+<resource name="ext.rng">
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="p"/>
+ </start>
+ <define name="p">
+ <element name="p">
+ <empty/>
+ </element>
+ </define>
+</grammar>
+</resource>
+<correct>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="top">
+ <choice>
+ <ref name="include1"/>
+ <ref name="include2"/>
+ </choice>
+ </element>
+ </start>
+ <define name="include1">
+ <grammar>
+ <include href="ext.rng">
+ <start>
+ <element name="a">
+ <choice>
+ <empty/>
+ <ref name="p"/>
+ </choice>
+ </element>
+ </start>
+ </include>
+ </grammar>
+ </define>
+ <define name="include2">
+ <grammar>
+ <include href="ext.rng">
+ <start>
+ <element name="b">
+ <choice>
+ <empty/>
+ <ref name="p"/>
+ </choice>
+ </element>
+ </start>
+ </include>
+ </grammar>
+ </define>
+</grammar>
+</correct>
+<invalid>
+<top/>
+</invalid>
+<invalid>
+<a/>
+</invalid>
+<invalid>
+<b/>
+</invalid>
+<invalid>
+<p/>
+</invalid>
+<valid>
+<top>
+ <a/>
+</top>
+</valid>
+<valid>
+<top>
+ <b/>
+</top>
+</valid>
+<valid>
+<top>
+ <a>
+ <p/>
+ </a>
+</top>
+</valid>
+<valid>
+<top>
+ <b>
+ <p/>
+ </b>
+</top>
+</valid>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Test of ID/IDREF</documentation>
+<testCase>
+<correct>
+<element name="top" xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <zeroOrMore>
+ <choice>
+ <element name="ref">
+ <attribute name="id">
+ <data type="ID"/>
+ </attribute>
+ <text/>
+ </element>
+ <element name="xref">
+ <attribute name="link">
+ <data type="IDREF"/>
+ </attribute>
+ <text/>
+ </element>
+ </choice>
+ </zeroOrMore>
+</element>
+</correct>
+<valid>
+<top>
+</top>
+</valid>
+<invalid>
+<top>
+ <xref link="id1"/>
+</top>
+</invalid>
+<valid>
+<top>
+ <ref id="id1"/>
+</top>
+</valid>
+<valid>
+<top>
+ <xref link="id1"/>
+ <ref id="id1"/>
+</top>
+</valid>
+<valid>
+<top>
+ <xref link=" id1 "/>
+ <ref id=" id1 "/>
+ <xref link="id1 "/>
+ <xref link=" id1"/>
+</top>
+</valid>
+<valid>
+<top>
+ <ref id="id1"/>
+ <xref link="id1"/>
+</top>
+</valid>
+<invalid>
+<top>
+ <ref id="id1"/>
+ <ref id="id1"/>
+</top>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element name="top" xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <zeroOrMore>
+ <choice>
+ <element name="ref">
+ <attribute name="id">
+ <data type="ID"/>
+ </attribute>
+ <text/>
+ </element>
+ <element name="xref">
+ <attribute name="link">
+ <data type="IDREFS"/>
+ </attribute>
+ <text/>
+ </element>
+ </choice>
+ </zeroOrMore>
+</element>
+</correct>
+<valid>
+<top>
+</top>
+</valid>
+<invalid>
+<top>
+ <xref link="id1"/>
+</top>
+</invalid>
+<valid>
+<top>
+ <ref id="id1"/>
+</top>
+</valid>
+<valid>
+<top>
+ <xref link="id1"/>
+ <ref id="id1"/>
+</top>
+</valid>
+<valid>
+<top>
+ <xref link="id1 id1"/>
+ <ref id="id1"/>
+</top>
+</valid>
+<valid>
+<top>
+ <ref id="id1"/>
+ <xref link="id1"/>
+</top>
+</valid>
+<valid>
+<top>
+ <ref id="id2"/>
+ <xref link="id1 id2"/>
+ <ref id="id1"/>
+</top>
+</valid>
+<valid>
+<top>
+ <ref id="id2"/>
+ <xref link=" id2 id1 id2 "/>
+ <ref id="id1"/>
+</top>
+</valid>
+<invalid>
+<top>
+ <ref id="id2"/>
+ <xref link="id1 id2"/>
+</top>
+</invalid>
+<invalid>
+<top>
+ <xref link="id1 id2"/>
+ <ref id="id1"/>
+</top>
+</invalid>
+<invalid>
+<top>
+ <ref id="id1"/>
+ <ref id="id1"/>
+</top>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Test of ENTITY/ENTITIES</documentation>
+<testCase>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="ENTITY"/>
+</element>
+</correct>
+<invalid>
+<doc></doc>
+</invalid>
+<invalid>
+<doc>foo</doc>
+</invalid>
+<valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt;&#10;]&gt;">
+<doc>foo</doc>
+</valid>
+<valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt;&#10;]&gt;">
+<doc> foo </doc>
+</valid>
+<invalid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt;&#10;]&gt;">
+<doc>foo bar</doc>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="ENTITIES"/>
+</element>
+</correct>
+<invalid>
+<doc></doc>
+</invalid>
+<invalid>
+<doc>foo</doc>
+</invalid>
+<valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt; &#10;&lt;!ENTITY bar SYSTEM 'whatever' NDATA jpeg&gt; &#10;]&gt;">
+<doc> foo bar </doc>
+</valid>
+<valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt; &#10;&lt;!ENTITY bar SYSTEM 'whatever' NDATA jpeg&gt; &#10;]&gt;">
+<doc> foo bar foo</doc>
+</valid>
+<invalid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt;]&gt;">
+<doc>foo bar</doc>
+</invalid>
+</testCase>
+</testSuite>
+<testSuite>
+<documentation>Test of Mixed</documentation>
+<testCase>
+<correct>
+<element name="mix" xmlns="http://relaxng.org/ns/structure/1.0">
+ <mixed>
+ <zeroOrMore>
+ <choice>
+ <element name="a">
+ <empty/>
+ </element>
+ <element name="b">
+ <empty/>
+ </element>
+ <element name="c">
+ <empty/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </mixed>
+ <element name="d">
+ <empty/>
+ </element>
+</element>
+</correct>
+<valid>
+<mix>
+ <d/>
+</mix>
+</valid>
+<valid>
+<mix>
+ <b/>
+ <a/>
+ <c/>
+ <b/>
+ <d/>
+</mix>
+</valid>
+<valid>
+<mix>
+ mixed
+ <c/>
+ <d/>
+</mix>
+</valid>
+<valid>
+<mix>
+ <c/>
+ mixed
+ <d/>
+</mix>
+</valid>
+<valid>
+<mix>
+ <b/>
+ is
+ <a/>
+ inter
+ <c/>
+ mixed
+ <b/>
+ <d/>
+</mix>
+</valid>
+<valid>
+<mix>
+ mixed
+ <b/>
+ .
+ <d/>
+</mix>
+</valid>
+<valid>
+<mix>
+ this
+ <b/>
+ is
+ <a/>
+ inter
+ <c/>
+ mixed
+ <b/>
+ .
+ <d/>
+</mix>
+</valid>
+</testCase>
+</testSuite>
+</testSuite>
diff --git a/test/relaxng/tutor10_1.rng b/test/relaxng/tutor10_1.rng
new file mode 100644
index 0000000..98df277
--- /dev/null
+++ b/test/relaxng/tutor10_1.rng
@@ -0,0 +1,4 @@
+<element name="foo" ns="http://www.example.com"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+ <empty/>
+</element>
diff --git a/test/relaxng/tutor10_10.rng b/test/relaxng/tutor10_10.rng
new file mode 100644
index 0000000..375b628
--- /dev/null
+++ b/test/relaxng/tutor10_10.rng
@@ -0,0 +1,13 @@
+<element name="addressBook" ns="http://www.example.com/addressBook"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card" ns="http://www.example.com/addressBook">
+ <element name="name" ns="http://www.example.com/address">
+ <text/>
+ </element>
+ <element name="email" ns="http://www.example.com/address">
+ <text/>
+ </element>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor10_10_1.xml b/test/relaxng/tutor10_10_1.xml
new file mode 100644
index 0000000..607982a
--- /dev/null
+++ b/test/relaxng/tutor10_10_1.xml
@@ -0,0 +1,5 @@
+<a:addressBook xmlns:a="http://www.example.com/addressBook">
+ <a:card xmlns="http://www.example.com/address">
+ <name>foo</name><email>bar</email>
+ </a:card>
+</a:addressBook>
diff --git a/test/relaxng/tutor10_1_1.xml b/test/relaxng/tutor10_1_1.xml
new file mode 100644
index 0000000..898193d
--- /dev/null
+++ b/test/relaxng/tutor10_1_1.xml
@@ -0,0 +1 @@
+<foo xmlns="http://www.example.com"/>
diff --git a/test/relaxng/tutor10_1_2.xml b/test/relaxng/tutor10_1_2.xml
new file mode 100644
index 0000000..16d900a
--- /dev/null
+++ b/test/relaxng/tutor10_1_2.xml
@@ -0,0 +1 @@
+<e:foo xmlns:e="http://www.example.com"/>
diff --git a/test/relaxng/tutor10_1_3.xml b/test/relaxng/tutor10_1_3.xml
new file mode 100644
index 0000000..756c73f
--- /dev/null
+++ b/test/relaxng/tutor10_1_3.xml
@@ -0,0 +1 @@
+<example:foo xmlns:example="http://www.example.com"/>
diff --git a/test/relaxng/tutor10_1_4.xml b/test/relaxng/tutor10_1_4.xml
new file mode 100644
index 0000000..f1999f8
--- /dev/null
+++ b/test/relaxng/tutor10_1_4.xml
@@ -0,0 +1 @@
+<foo/>
diff --git a/test/relaxng/tutor10_1_5.xml b/test/relaxng/tutor10_1_5.xml
new file mode 100644
index 0000000..ed0f048
--- /dev/null
+++ b/test/relaxng/tutor10_1_5.xml
@@ -0,0 +1 @@
+<e:foo xmlns:e="http://WWW.EXAMPLE.COM"/>
diff --git a/test/relaxng/tutor10_1_6.xml b/test/relaxng/tutor10_1_6.xml
new file mode 100644
index 0000000..7dd6aed
--- /dev/null
+++ b/test/relaxng/tutor10_1_6.xml
@@ -0,0 +1 @@
+<example:foo xmlns:example="http://www.example.net"/>
diff --git a/test/relaxng/tutor10_2.rng b/test/relaxng/tutor10_2.rng
new file mode 100644
index 0000000..ebf08de
--- /dev/null
+++ b/test/relaxng/tutor10_2.rng
@@ -0,0 +1,3 @@
+<element name="foo" ns="" xmlns="http://relaxng.org/ns/structure/1.0">
+ <empty/>
+</element>
diff --git a/test/relaxng/tutor10_2_1.xml b/test/relaxng/tutor10_2_1.xml
new file mode 100644
index 0000000..24e0b22
--- /dev/null
+++ b/test/relaxng/tutor10_2_1.xml
@@ -0,0 +1 @@
+<foo xmlns=""/>
diff --git a/test/relaxng/tutor10_2_2.xml b/test/relaxng/tutor10_2_2.xml
new file mode 100644
index 0000000..f1999f8
--- /dev/null
+++ b/test/relaxng/tutor10_2_2.xml
@@ -0,0 +1 @@
+<foo/>
diff --git a/test/relaxng/tutor10_2_3.xml b/test/relaxng/tutor10_2_3.xml
new file mode 100644
index 0000000..898193d
--- /dev/null
+++ b/test/relaxng/tutor10_2_3.xml
@@ -0,0 +1 @@
+<foo xmlns="http://www.example.com"/>
diff --git a/test/relaxng/tutor10_2_4.xml b/test/relaxng/tutor10_2_4.xml
new file mode 100644
index 0000000..16d900a
--- /dev/null
+++ b/test/relaxng/tutor10_2_4.xml
@@ -0,0 +1 @@
+<e:foo xmlns:e="http://www.example.com"/>
diff --git a/test/relaxng/tutor10_3.rng b/test/relaxng/tutor10_3.rng
new file mode 100644
index 0000000..86f8cd1
--- /dev/null
+++ b/test/relaxng/tutor10_3.rng
@@ -0,0 +1,12 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor10_3_1.xml b/test/relaxng/tutor10_3_1.xml
new file mode 100644
index 0000000..693df18
--- /dev/null
+++ b/test/relaxng/tutor10_3_1.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card><name>foo</name><email>bar</email></card>
+</addressBook>
diff --git a/test/relaxng/tutor10_4.rng b/test/relaxng/tutor10_4.rng
new file mode 100644
index 0000000..9a0ad34
--- /dev/null
+++ b/test/relaxng/tutor10_4.rng
@@ -0,0 +1,12 @@
+<element name="addressBook" ns="" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card" ns="">
+ <element name="name" ns="">
+ <text/>
+ </element>
+ <element name="email" ns="">
+ <text/>
+ </element>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor10_4_1.xml b/test/relaxng/tutor10_4_1.xml
new file mode 100644
index 0000000..693df18
--- /dev/null
+++ b/test/relaxng/tutor10_4_1.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card><name>foo</name><email>bar</email></card>
+</addressBook>
diff --git a/test/relaxng/tutor10_5.rng b/test/relaxng/tutor10_5.rng
new file mode 100644
index 0000000..85f5418
--- /dev/null
+++ b/test/relaxng/tutor10_5.rng
@@ -0,0 +1,13 @@
+<element name="addressBook" ns="http://www.example.com"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor10_5_1.xml b/test/relaxng/tutor10_5_1.xml
new file mode 100644
index 0000000..94e62f0
--- /dev/null
+++ b/test/relaxng/tutor10_5_1.xml
@@ -0,0 +1,3 @@
+<addressBook xmlns="http://www.example.com">
+ <card><name>foo</name><email>bar</email></card>
+</addressBook>
diff --git a/test/relaxng/tutor10_6.rng b/test/relaxng/tutor10_6.rng
new file mode 100644
index 0000000..fd50547
--- /dev/null
+++ b/test/relaxng/tutor10_6.rng
@@ -0,0 +1,13 @@
+<element name="addressBook" ns="http://www.example.com"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card" ns="http://www.example.com">
+ <element name="name" ns="http://www.example.com">
+ <text/>
+ </element>
+ <element name="email" ns="http://www.example.com">
+ <text/>
+ </element>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor10_6_1.xml b/test/relaxng/tutor10_6_1.xml
new file mode 100644
index 0000000..94e62f0
--- /dev/null
+++ b/test/relaxng/tutor10_6_1.xml
@@ -0,0 +1,3 @@
+<addressBook xmlns="http://www.example.com">
+ <card><name>foo</name><email>bar</email></card>
+</addressBook>
diff --git a/test/relaxng/tutor10_7.rng b/test/relaxng/tutor10_7.rng
new file mode 100644
index 0000000..ce93df7
--- /dev/null
+++ b/test/relaxng/tutor10_7.rng
@@ -0,0 +1,9 @@
+<element name="addressBook" ns="http://www.example.com"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <attribute name="name"/>
+ <attribute name="email"/>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor10_7_1.xml b/test/relaxng/tutor10_7_1.xml
new file mode 100644
index 0000000..740d0d3
--- /dev/null
+++ b/test/relaxng/tutor10_7_1.xml
@@ -0,0 +1,3 @@
+<addressBook xmlns="http://www.example.com">
+ <card name="John Smith" email="js@example.com"/>
+</addressBook>
diff --git a/test/relaxng/tutor10_7_2.xml b/test/relaxng/tutor10_7_2.xml
new file mode 100644
index 0000000..97436e5
--- /dev/null
+++ b/test/relaxng/tutor10_7_2.xml
@@ -0,0 +1,3 @@
+<example:addressBook xmlns:example="http://www.example.com">
+ <example:card name="John Smith" email="js@example.com"/>
+</example:addressBook>
diff --git a/test/relaxng/tutor10_7_3.xml b/test/relaxng/tutor10_7_3.xml
new file mode 100644
index 0000000..7f58a8b
--- /dev/null
+++ b/test/relaxng/tutor10_7_3.xml
@@ -0,0 +1,3 @@
+<example:addressBook xmlns:example="http://www.example.com">
+ <example:card example:name="John Smith" example:email="js@example.com"/>
+</example:addressBook>
diff --git a/test/relaxng/tutor10_8.rng b/test/relaxng/tutor10_8.rng
new file mode 100644
index 0000000..caeffec
--- /dev/null
+++ b/test/relaxng/tutor10_8.rng
@@ -0,0 +1,9 @@
+<element name="addressBook" ns="http://www.example.com"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card" ns="http://www.example.com">
+ <attribute name="name" ns=""/>
+ <attribute name="email" ns=""/>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor10_8_1.xml b/test/relaxng/tutor10_8_1.xml
new file mode 100644
index 0000000..740d0d3
--- /dev/null
+++ b/test/relaxng/tutor10_8_1.xml
@@ -0,0 +1,3 @@
+<addressBook xmlns="http://www.example.com">
+ <card name="John Smith" email="js@example.com"/>
+</addressBook>
diff --git a/test/relaxng/tutor10_8_2.xml b/test/relaxng/tutor10_8_2.xml
new file mode 100644
index 0000000..97436e5
--- /dev/null
+++ b/test/relaxng/tutor10_8_2.xml
@@ -0,0 +1,3 @@
+<example:addressBook xmlns:example="http://www.example.com">
+ <example:card name="John Smith" email="js@example.com"/>
+</example:addressBook>
diff --git a/test/relaxng/tutor10_8_3.xml b/test/relaxng/tutor10_8_3.xml
new file mode 100644
index 0000000..7f58a8b
--- /dev/null
+++ b/test/relaxng/tutor10_8_3.xml
@@ -0,0 +1,3 @@
+<example:addressBook xmlns:example="http://www.example.com">
+ <example:card example:name="John Smith" example:email="js@example.com"/>
+</example:addressBook>
diff --git a/test/relaxng/tutor10_9.rng b/test/relaxng/tutor10_9.rng
new file mode 100644
index 0000000..c954a91
--- /dev/null
+++ b/test/relaxng/tutor10_9.rng
@@ -0,0 +1,14 @@
+<element name="ab:addressBook" xmlns:ab="http://www.example.com/addressBook"
+ xmlns:a="http://www.example.com/address"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="ab:card">
+ <element name="a:name">
+ <text/>
+ </element>
+ <element name="a:email">
+ <text/>
+ </element>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor10_9_1.xml b/test/relaxng/tutor10_9_1.xml
new file mode 100644
index 0000000..607982a
--- /dev/null
+++ b/test/relaxng/tutor10_9_1.xml
@@ -0,0 +1,5 @@
+<a:addressBook xmlns:a="http://www.example.com/addressBook">
+ <a:card xmlns="http://www.example.com/address">
+ <name>foo</name><email>bar</email>
+ </a:card>
+</a:addressBook>
diff --git a/test/relaxng/tutor11_1.rng b/test/relaxng/tutor11_1.rng
new file mode 100644
index 0000000..2511af1
--- /dev/null
+++ b/test/relaxng/tutor11_1.rng
@@ -0,0 +1,22 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <ref name="anyElement"/>
+ </start>
+
+ <define name="anyElement">
+ <element>
+ <anyName/>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="anyElement"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor11_1_1.xml b/test/relaxng/tutor11_1_1.xml
new file mode 100644
index 0000000..2511af1
--- /dev/null
+++ b/test/relaxng/tutor11_1_1.xml
@@ -0,0 +1,22 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <ref name="anyElement"/>
+ </start>
+
+ <define name="anyElement">
+ <element>
+ <anyName/>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="anyElement"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor11_1_2.xml b/test/relaxng/tutor11_1_2.xml
new file mode 100644
index 0000000..f45fc3b
--- /dev/null
+++ b/test/relaxng/tutor11_1_2.xml
@@ -0,0 +1,7 @@
+<addressBook>
+ <card>
+ <name>foo</name>
+ <email>bar</email>
+ <note>this guy is <em>annoying</em> !</note>
+ </card>
+</addressBook>
diff --git a/test/relaxng/tutor11_1_3.xml b/test/relaxng/tutor11_1_3.xml
new file mode 100644
index 0000000..c778ce0
--- /dev/null
+++ b/test/relaxng/tutor11_1_3.xml
@@ -0,0 +1,4197 @@
+<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?>
+<!DOCTYPE spec SYSTEM "../valid/dtds/spec.dtd" [
+
+<!-- LAST TOUCHED BY: Tim Bray, 8 February 1997 -->
+
+<!-- The words 'FINAL EDIT' in comments mark places where changes
+need to be made after approval of the document by the ERB, before
+publication. -->
+
+<!ENTITY XML.version "1.0">
+<!ENTITY doc.date "10 February 1998">
+<!ENTITY iso6.doc.date "19980210">
+<!ENTITY w3c.doc.date "02-Feb-1998">
+<!ENTITY draft.day '10'>
+<!ENTITY draft.month 'February'>
+<!ENTITY draft.year '1998'>
+
+<!ENTITY WebSGML
+ 'WebSGML Adaptations Annex to ISO 8879'>
+
+<!ENTITY lt "<">
+<!ENTITY gt ">">
+<!ENTITY xmlpio "'&lt;?xml'">
+<!ENTITY pic "'?>'">
+<!ENTITY br "\n">
+<!ENTITY cellback '#c0d9c0'>
+<!ENTITY mdash "--"> <!-- &#x2014, but nsgmls doesn't grok hex -->
+<!ENTITY com "--">
+<!ENTITY como "--">
+<!ENTITY comc "--">
+<!ENTITY hcro "&amp;#x">
+<!-- <!ENTITY nbsp " "> -->
+<!ENTITY nbsp "&#160;">
+<!ENTITY magicents "<code>amp</code>,
+<code>lt</code>,
+<code>gt</code>,
+<code>apos</code>,
+<code>quot</code>">
+
+<!-- audience and distribution status: for use at publication time -->
+<!ENTITY doc.audience "public review and discussion">
+<!ENTITY doc.distribution "may be distributed freely, as long as
+all text and legal notices remain intact">
+
+]>
+
+<!-- for Panorama *-->
+<?VERBATIM "eg" ?>
+
+<spec>
+<header>
+<title>Extensible Markup Language (XML) 1.0</title>
+<version></version>
+<w3c-designation>REC-xml-&iso6.doc.date;</w3c-designation>
+<w3c-doctype>W3C Recommendation</w3c-doctype>
+<pubdate><day>&draft.day;</day><month>&draft.month;</month><year>&draft.year;</year></pubdate>
+
+<publoc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps</loc>
+</publoc>
+<latestloc>
+<loc href="http://www.w3.org/TR/REC-xml">
+http://www.w3.org/TR/REC-xml</loc>
+</latestloc>
+<prevlocs>
+<loc href="http://www.w3.org/TR/PR-xml-971208">
+http://www.w3.org/TR/PR-xml-971208</loc>
+<!--
+<loc href='http://www.w3.org/TR/WD-xml-961114'>
+http://www.w3.org/TR/WD-xml-961114</loc>
+<loc href='http://www.w3.org/TR/WD-xml-lang-970331'>
+http://www.w3.org/TR/WD-xml-lang-970331</loc>
+<loc href='http://www.w3.org/TR/WD-xml-lang-970630'>
+http://www.w3.org/TR/WD-xml-lang-970630</loc>
+<loc href='http://www.w3.org/TR/WD-xml-970807'>
+http://www.w3.org/TR/WD-xml-970807</loc>
+<loc href='http://www.w3.org/TR/WD-xml-971117'>
+http://www.w3.org/TR/WD-xml-971117</loc>-->
+</prevlocs>
+<authlist>
+<author><name>Tim Bray</name>
+<affiliation>Textuality and Netscape</affiliation>
+<email
+href="mailto:tbray@textuality.com">tbray@textuality.com</email></author>
+<author><name>Jean Paoli</name>
+<affiliation>Microsoft</affiliation>
+<email href="mailto:jeanpa@microsoft.com">jeanpa@microsoft.com</email></author>
+<author><name>C. M. Sperberg-McQueen</name>
+<affiliation>University of Illinois at Chicago</affiliation>
+<email href="mailto:cmsmcq@uic.edu">cmsmcq@uic.edu</email></author>
+</authlist>
+<abstract>
+<p>The Extensible Markup Language (XML) is a subset of
+SGML that is completely described in this document. Its goal is to
+enable generic SGML to be served, received, and processed on the Web
+in the way that is now possible with HTML. XML has been designed for
+ease of implementation and for interoperability with both SGML and
+HTML.</p>
+</abstract>
+<status>
+<p>This document has been reviewed by W3C Members and
+other interested parties and has been endorsed by the
+Director as a W3C Recommendation. It is a stable
+document and may be used as reference material or cited
+as a normative reference from another document. W3C's
+role in making the Recommendation is to draw attention
+to the specification and to promote its widespread
+deployment. This enhances the functionality and
+interoperability of the Web.</p>
+<p>
+This document specifies a syntax created by subsetting an existing,
+widely used international text processing standard (Standard
+Generalized Markup Language, ISO 8879:1986(E) as amended and
+corrected) for use on the World Wide Web. It is a product of the W3C
+XML Activity, details of which can be found at <loc
+href='http://www.w3.org/XML'>http://www.w3.org/XML</loc>. A list of
+current W3C Recommendations and other technical documents can be found
+at <loc href='http://www.w3.org/TR'>http://www.w3.org/TR</loc>.
+</p>
+<p>This specification uses the term URI, which is defined by <bibref
+ref="Berners-Lee"/>, a work in progress expected to update <bibref
+ref="RFC1738"/> and <bibref ref="RFC1808"/>.
+</p>
+<p>The list of known errors in this specification is
+available at
+<loc href='http://www.w3.org/XML/xml-19980210-errata'>http://www.w3.org/XML/xml-19980210-errata</loc>.</p>
+<p>Please report errors in this document to
+<loc href='mailto:xml-editor@w3.org'>xml-editor@w3.org</loc>.
+</p>
+</status>
+
+
+<pubstmt>
+<p>Chicago, Vancouver, Mountain View, et al.:
+World-Wide Web Consortium, XML Working Group, 1996, 1997.</p>
+</pubstmt>
+<sourcedesc>
+<p>Created in electronic form.</p>
+</sourcedesc>
+<langusage>
+<language id='EN'>English</language>
+<language id='ebnf'>Extended Backus-Naur Form (formal grammar)</language>
+</langusage>
+<revisiondesc>
+<slist>
+<sitem>1997-12-03 : CMSMcQ : yet further changes</sitem>
+<sitem>1997-12-02 : TB : further changes (see TB to XML WG,
+2 December 1997)</sitem>
+<sitem>1997-12-02 : CMSMcQ : deal with as many corrections and
+comments from the proofreaders as possible:
+entify hard-coded document date in pubdate element,
+change expansion of entity WebSGML,
+update status description as per Dan Connolly (am not sure
+about refernece to Berners-Lee et al.),
+add 'The' to abstract as per WG decision,
+move Relationship to Existing Standards to back matter and
+combine with References,
+re-order back matter so normative appendices come first,
+re-tag back matter so informative appendices are tagged informdiv1,
+remove XXX XXX from list of 'normative' specs in prose,
+move some references from Other References to Normative References,
+add RFC 1738, 1808, and 2141 to Other References (they are not
+normative since we do not require the processor to enforce any
+rules based on them),
+add reference to 'Fielding draft' (Berners-Lee et al.),
+move notation section to end of body,
+drop URIchar non-terminal and use SkipLit instead,
+lose stray reference to defunct nonterminal 'markupdecls',
+move reference to Aho et al. into appendix (Tim's right),
+add prose note saying that hash marks and fragment identifiers are
+NOT part of the URI formally speaking, and are NOT legal in
+system identifiers (processor 'may' signal an error).
+Work through:
+Tim Bray reacting to James Clark,
+Tim Bray on his own,
+Eve Maler,
+
+NOT DONE YET:
+change binary / text to unparsed / parsed.
+handle James's suggestion about &lt; in attriubte values
+uppercase hex characters,
+namechar list,
+</sitem>
+<sitem>1997-12-01 : JB : add some column-width parameters</sitem>
+<sitem>1997-12-01 : CMSMcQ : begin round of changes to incorporate
+recent WG decisions and other corrections:
+binding sources of character encoding info (27 Aug / 3 Sept),
+correct wording of Faust quotation (restore dropped line),
+drop SDD from EncodingDecl,
+change text at version number 1.0,
+drop misleading (wrong!) sentence about ignorables and extenders,
+modify definition of PCData to make bar on msc grammatical,
+change grammar's handling of internal subset (drop non-terminal markupdecls),
+change definition of includeSect to allow conditional sections,
+add integral-declaration constraint on internal subset,
+drop misleading / dangerous sentence about relationship of
+entities with system storage objects,
+change table body tag to htbody as per EM change to DTD,
+add rule about space normalization in public identifiers,
+add description of how to generate our name-space rules from
+Unicode character database (needs further work!).
+</sitem>
+<sitem>1997-10-08 : TB : Removed %-constructs again, new rules
+for PE appearance.</sitem>
+<sitem>1997-10-01 : TB : Case-sensitive markup; cleaned up
+element-type defs, lotsa little edits for style</sitem>
+<sitem>1997-09-25 : TB : Change to elm's new DTD, with
+substantial detail cleanup as a side-effect</sitem>
+<sitem>1997-07-24 : CMSMcQ : correct error (lost *) in definition
+of ignoreSectContents (thanks to Makoto Murata)</sitem>
+<sitem>Allow all empty elements to have end-tags, consistent with
+SGML TC (as per JJC).</sitem>
+<sitem>1997-07-23 : CMSMcQ : pre-emptive strike on pending corrections:
+introduce the term 'empty-element tag', note that all empty elements
+may use it, and elements declared EMPTY must use it.
+Add WFC requiring encoding decl to come first in an entity.
+Redefine notations to point to PIs as well as binary entities.
+Change autodetection table by removing bytes 3 and 4 from
+examples with Byte Order Mark.
+Add content model as a term and clarify that it applies to both
+mixed and element content.
+</sitem>
+<sitem>1997-06-30 : CMSMcQ : change date, some cosmetic changes,
+changes to productions for choice, seq, Mixed, NotationType,
+Enumeration. Follow James Clark's suggestion and prohibit
+conditional sections in internal subset. TO DO: simplify
+production for ignored sections as a result, since we don't
+need to worry about parsers which don't expand PErefs finding
+a conditional section.</sitem>
+<sitem>1997-06-29 : TB : various edits</sitem>
+<sitem>1997-06-29 : CMSMcQ : further changes:
+Suppress old FINAL EDIT comments and some dead material.
+Revise occurrences of % in grammar to exploit Henry Thompson's pun,
+especially markupdecl and attdef.
+Remove RMD requirement relating to element content (?).
+</sitem>
+<sitem>1997-06-28 : CMSMcQ : Various changes for 1 July draft:
+Add text for draconian error handling (introduce
+the term Fatal Error).
+RE deleta est (changing wording from
+original announcement to restrict the requirement to validating
+parsers).
+Tag definition of validating processor and link to it.
+Add colon as name character.
+Change def of %operator.
+Change standard definitions of lt, gt, amp.
+Strip leading zeros from #x00nn forms.</sitem>
+<sitem>1997-04-02 : CMSMcQ : final corrections of editorial errors
+found in last night's proofreading. Reverse course once more on
+well-formed: Webster's Second hyphenates it, and that's enough
+for me.</sitem>
+<sitem>1997-04-01 : CMSMcQ : corrections from JJC, EM, HT, and self</sitem>
+<sitem>1997-03-31 : Tim Bray : many changes</sitem>
+<sitem>1997-03-29 : CMSMcQ : some Henry Thompson (on entity handling),
+some Charles Goldfarb, some ERB decisions (PE handling in miscellaneous
+declarations. Changed Ident element to accept def attribute.
+Allow normalization of Unicode characters. move def of systemliteral
+into section on literals.</sitem>
+<sitem>1997-03-28 : CMSMcQ : make as many corrections as possible, from
+Terry Allen, Norbert Mikula, James Clark, Jon Bosak, Henry Thompson,
+Paul Grosso, and self. Among other things: give in on "well formed"
+(Terry is right), tentatively rename QuotedCData as AttValue
+and Literal as EntityValue to be more informative, since attribute
+values are the <emph>only</emph> place QuotedCData was used, and
+vice versa for entity text and Literal. (I'd call it Entity Text,
+but 8879 uses that name for both internal and external entities.)</sitem>
+<sitem>1997-03-26 : CMSMcQ : resynch the two forks of this draft, reapply
+my changes dated 03-20 and 03-21. Normalize old 'may not' to 'must not'
+except in the one case where it meant 'may or may not'.</sitem>
+<sitem>1997-03-21 : TB : massive changes on plane flight from Chicago
+to Vancouver</sitem>
+<sitem>1997-03-21 : CMSMcQ : correct as many reported errors as possible.
+</sitem>
+<sitem>1997-03-20 : CMSMcQ : correct typos listed in CMSMcQ hand copy of spec.</sitem>
+<sitem>1997-03-20 : CMSMcQ : cosmetic changes preparatory to revision for
+WWW conference April 1997: restore some of the internal entity
+references (e.g. to docdate, etc.), change character xA0 to &amp;nbsp;
+and define nbsp as &amp;#160;, and refill a lot of paragraphs for
+legibility.</sitem>
+<sitem>1996-11-12 : CMSMcQ : revise using Tim's edits:
+Add list type of NUMBERED and change most lists either to
+BULLETS or to NUMBERED.
+Suppress QuotedNames, Names (not used).
+Correct trivial-grammar doc type decl.
+Rename 'marked section' as 'CDATA section' passim.
+Also edits from James Clark:
+Define the set of characters from which [^abc] subtracts.
+Charref should use just [0-9] not Digit.
+Location info needs cleaner treatment: remove? (ERB
+question).
+One example of a PI has wrong pic.
+Clarify discussion of encoding names.
+Encoding failure should lead to unspecified results; don't
+prescribe error recovery.
+Don't require exposure of entity boundaries.
+Ignore white space in element content.
+Reserve entity names of the form u-NNNN.
+Clarify relative URLs.
+And some of my own:
+Correct productions for content model: model cannot
+consist of a name, so "elements ::= cp" is no good.
+</sitem>
+<sitem>1996-11-11 : CMSMcQ : revise for style.
+Add new rhs to entity declaration, for parameter entities.</sitem>
+<sitem>1996-11-10 : CMSMcQ : revise for style.
+Fix / complete section on names, characters.
+Add sections on parameter entities, conditional sections.
+Still to do: Add compatibility note on deterministic content models.
+Finish stylistic revision.</sitem>
+<sitem>1996-10-31 : TB : Add Entity Handling section</sitem>
+<sitem>1996-10-30 : TB : Clean up term &amp; termdef. Slip in
+ERB decision re EMPTY.</sitem>
+<sitem>1996-10-28 : TB : Change DTD. Implement some of Michael's
+suggestions. Change comments back to //. Introduce language for
+XML namespace reservation. Add section on white-space handling.
+Lots more cleanup.</sitem>
+<sitem>1996-10-24 : CMSMcQ : quick tweaks, implement some ERB
+decisions. Characters are not integers. Comments are /* */ not //.
+Add bibliographic refs to 10646, HyTime, Unicode.
+Rename old Cdata as MsData since it's <emph>only</emph> seen
+in marked sections. Call them attribute-value pairs not
+name-value pairs, except once. Internal subset is optional, needs
+'?'. Implied attributes should be signaled to the app, not
+have values supplied by processor.</sitem>
+<sitem>1996-10-16 : TB : track down &amp; excise all DSD references;
+introduce some EBNF for entity declarations.</sitem>
+<sitem>1996-10-?? : TB : consistency check, fix up scraps so
+they all parse, get formatter working, correct a few productions.</sitem>
+<sitem>1996-10-10/11 : CMSMcQ : various maintenance, stylistic, and
+organizational changes:
+Replace a few literals with xmlpio and
+pic entities, to make them consistent and ensure we can change pic
+reliably when the ERB votes.
+Drop paragraph on recognizers from notation section.
+Add match, exact match to terminology.
+Move old 2.2 XML Processors and Apps into intro.
+Mention comments, PIs, and marked sections in discussion of
+delimiter escaping.
+Streamline discussion of doctype decl syntax.
+Drop old section of 'PI syntax' for doctype decl, and add
+section on partial-DTD summary PIs to end of Logical Structures
+section.
+Revise DSD syntax section to use Tim's subset-in-a-PI
+mechanism.</sitem>
+<sitem>1996-10-10 : TB : eliminate name recognizers (and more?)</sitem>
+<sitem>1996-10-09 : CMSMcQ : revise for style, consistency through 2.3
+(Characters)</sitem>
+<sitem>1996-10-09 : CMSMcQ : re-unite everything for convenience,
+at least temporarily, and revise quickly</sitem>
+<sitem>1996-10-08 : TB : first major homogenization pass</sitem>
+<sitem>1996-10-08 : TB : turn "current" attribute on div type into
+CDATA</sitem>
+<sitem>1996-10-02 : TB : remould into skeleton + entities</sitem>
+<sitem>1996-09-30 : CMSMcQ : add a few more sections prior to exchange
+ with Tim.</sitem>
+<sitem>1996-09-20 : CMSMcQ : finish transcribing notes.</sitem>
+<sitem>1996-09-19 : CMSMcQ : begin transcribing notes for draft.</sitem>
+<sitem>1996-09-13 : CMSMcQ : made outline from notes of 09-06,
+do some housekeeping</sitem>
+</slist>
+</revisiondesc>
+</header>
+<body>
+<div1 id='sec-intro'>
+<head>Introduction</head>
+<p>Extensible Markup Language, abbreviated XML, describes a class of
+data objects called <termref def="dt-xml-doc">XML documents</termref> and
+partially describes the behavior of
+computer programs which process them. XML is an application profile or
+restricted form of SGML, the Standard Generalized Markup
+Language <bibref ref='ISO8879'/>.
+By construction, XML documents
+are conforming SGML documents.
+</p>
+<p>XML documents are made up of storage units called <termref
+def="dt-entity">entities</termref>, which contain either parsed
+or unparsed data.
+Parsed data is made up of <termref def="dt-character">characters</termref>,
+some
+of which form <termref def="dt-chardata">character data</termref>,
+and some of which form <termref def="dt-markup">markup</termref>.
+Markup encodes a description of the document's storage layout and
+logical structure. XML provides a mechanism to impose constraints on
+the storage layout and logical structure.</p>
+<p><termdef id="dt-xml-proc" term="XML Processor">A software module
+called an <term>XML processor</term> is used to read XML documents
+and provide access to their content and structure.</termdef> <termdef
+id="dt-app" term="Application">It is assumed that an XML processor is
+doing its work on behalf of another module, called the
+<term>application</term>.</termdef> This specification describes the
+required behavior of an XML processor in terms of how it must read XML
+data and the information it must provide to the application.</p>
+
+<div2 id='sec-origin-goals'>
+<head>Origin and Goals</head>
+<p>XML was developed by an XML Working Group (originally known as the
+SGML Editorial Review Board) formed under the auspices of the World
+Wide Web Consortium (W3C) in 1996.
+It was chaired by Jon Bosak of Sun
+Microsystems with the active participation of an XML Special
+Interest Group (previously known as the SGML Working Group) also
+organized by the W3C. The membership of the XML Working Group is given
+in an appendix. Dan Connolly served as the WG's contact with the W3C.
+</p>
+<p>The design goals for XML are:<olist>
+<item><p>XML shall be straightforwardly usable over the
+Internet.</p></item>
+<item><p>XML shall support a wide variety of applications.</p></item>
+<item><p>XML shall be compatible with SGML.</p></item>
+<item><p>It shall be easy to write programs which process XML
+documents.</p></item>
+<item><p>The number of optional features in XML is to be kept to the
+absolute minimum, ideally zero.</p></item>
+<item><p>XML documents should be human-legible and reasonably
+clear.</p></item>
+<item><p>The XML design should be prepared quickly.</p></item>
+<item><p>The design of XML shall be formal and concise.</p></item>
+<item><p>XML documents shall be easy to create.</p></item>
+<item><p>Terseness in XML markup is of minimal importance.</p></item></olist>
+</p>
+<p>This specification,
+together with associated standards
+(Unicode and ISO/IEC 10646 for characters,
+Internet RFC 1766 for language identification tags,
+ISO 639 for language name codes, and
+ISO 3166 for country name codes),
+provides all the information necessary to understand
+XML Version &XML.version;
+and construct computer programs to process it.</p>
+<p>This version of the XML specification
+<!-- is for &doc.audience;.-->
+&doc.distribution;.</p>
+
+</div2>
+
+
+
+
+<div2 id='sec-terminology'>
+<head>Terminology</head>
+
+<p>The terminology used to describe XML documents is defined in the body of
+this specification.
+The terms defined in the following list are used in building those
+definitions and in describing the actions of an XML processor:
+<glist>
+<gitem>
+<label>may</label>
+<def><p><termdef id="dt-may" term="May">Conforming documents and XML
+processors are permitted to but need not behave as
+described.</termdef></p></def>
+</gitem>
+<gitem>
+<label>must</label>
+<def><p>Conforming documents and XML processors
+are required to behave as described; otherwise they are in error.
+<!-- do NOT change this! this is what defines a violation of
+a 'must' clause as 'an error'. -MSM -->
+</p></def>
+</gitem>
+<gitem>
+<label>error</label>
+<def><p><termdef id='dt-error' term='Error'
+>A violation of the rules of this
+specification; results are
+undefined. Conforming software may detect and report an error and may
+recover from it.</termdef></p></def>
+</gitem>
+<gitem>
+<label>fatal error</label>
+<def><p><termdef id="dt-fatal" term="Fatal Error">An error
+which a conforming <termref def="dt-xml-proc">XML processor</termref>
+must detect and report to the application.
+After encountering a fatal error, the
+processor may continue
+processing the data to search for further errors and may report such
+errors to the application. In order to support correction of errors,
+the processor may make unprocessed data from the document (with
+intermingled character data and markup) available to the application.
+Once a fatal error is detected, however, the processor must not
+continue normal processing (i.e., it must not
+continue to pass character data and information about the document's
+logical structure to the application in the normal way).
+</termdef></p></def>
+</gitem>
+<gitem>
+<label>at user option</label>
+<def><p>Conforming software may or must (depending on the modal verb in the
+sentence) behave as described; if it does, it must
+provide users a means to enable or disable the behavior
+described.</p></def>
+</gitem>
+<gitem>
+<label>validity constraint</label>
+<def><p>A rule which applies to all
+<termref def="dt-valid">valid</termref> XML documents.
+Violations of validity constraints are errors; they must, at user option,
+be reported by
+<termref def="dt-validating">validating XML processors</termref>.</p></def>
+</gitem>
+<gitem>
+<label>well-formedness constraint</label>
+<def><p>A rule which applies to all <termref
+def="dt-wellformed">well-formed</termref> XML documents.
+Violations of well-formedness constraints are
+<termref def="dt-fatal">fatal errors</termref>.</p></def>
+</gitem>
+
+<gitem>
+<label>match</label>
+<def><p><termdef id="dt-match" term="match">(Of strings or names:)
+Two strings or names being compared must be identical.
+Characters with multiple possible representations in ISO/IEC 10646 (e.g.
+characters with
+both precomposed and base+diacritic forms) match only if they have the
+same representation in both strings.
+At user option, processors may normalize such characters to
+some canonical form.
+No case folding is performed.
+(Of strings and rules in the grammar:)
+A string matches a grammatical production if it belongs to the
+language generated by that production.
+(Of content and content models:)
+An element matches its declaration when it conforms
+in the fashion described in the constraint
+<specref ref='elementvalid'/>.
+</termdef>
+</p></def>
+</gitem>
+<gitem>
+<label>for compatibility</label>
+<def><p><termdef id="dt-compat" term="For Compatibility">A feature of
+XML included solely to ensure that XML remains compatible with SGML.
+</termdef></p></def>
+</gitem>
+<gitem>
+<label>for interoperability</label>
+<def><p><termdef id="dt-interop" term="For interoperability">A
+non-binding recommendation included to increase the chances that XML
+documents can be processed by the existing installed base of SGML
+processors which predate the
+&WebSGML;.</termdef></p></def>
+</gitem>
+</glist>
+</p>
+</div2>
+
+
+</div1>
+<!-- &Docs; -->
+
+<div1 id='sec-documents'>
+<head>Documents</head>
+
+<p><termdef id="dt-xml-doc" term="XML Document">
+A data object is an
+<term>XML document</term> if it is
+<termref def="dt-wellformed">well-formed</termref>, as
+defined in this specification.
+A well-formed XML document may in addition be
+<termref def="dt-valid">valid</termref> if it meets certain further
+constraints.</termdef></p>
+
+<p>Each XML document has both a logical and a physical structure.
+Physically, the document is composed of units called <termref
+def="dt-entity">entities</termref>. An entity may <termref
+def="dt-entref">refer</termref> to other entities to cause their
+inclusion in the document. A document begins in a "root" or <termref
+def="dt-docent">document entity</termref>.
+Logically, the document is composed of declarations, elements,
+comments,
+character references, and
+processing
+instructions, all of which are indicated in the document by explicit
+markup.
+The logical and physical structures must nest properly, as described
+in <specref ref='wf-entities'/>.
+</p>
+
+<div2 id='sec-well-formed'>
+<head>Well-Formed XML Documents</head>
+
+<p><termdef id="dt-wellformed" term="Well-Formed">
+A textual object is
+a well-formed XML document if:</termdef>
+<olist>
+<item><p>Taken as a whole, it
+matches the production labeled <nt def='NT-document'>document</nt>.</p></item>
+<item><p>It
+meets all the well-formedness constraints given in this specification.</p>
+</item>
+<item><p>Each of the <termref def='dt-parsedent'>parsed entities</termref>
+which is referenced directly or indirectly within the document is
+<titleref href='wf-entities'>well-formed</titleref>.</p></item>
+</olist></p>
+<p>
+<scrap lang='ebnf' id='document'>
+<head>Document</head>
+<prod id='NT-document'><lhs>document</lhs>
+<rhs><nt def='NT-prolog'>prolog</nt>
+<nt def='NT-element'>element</nt>
+<nt def='NT-Misc'>Misc</nt>*</rhs></prod>
+</scrap>
+</p>
+<p>Matching the <nt def="NT-document">document</nt> production
+implies that:
+<olist>
+<item><p>It contains one or more
+<termref def="dt-element">elements</termref>.</p>
+</item>
+<!--* N.B. some readers (notably JC) find the following
+paragraph awkward and redundant. I agree it's logically redundant:
+it *says* it is summarizing the logical implications of
+matching the grammar, and that means by definition it's
+logically redundant. I don't think it's rhetorically
+redundant or unnecessary, though, so I'm keeping it. It
+could however use some recasting when the editors are feeling
+stronger. -MSM *-->
+<item><p><termdef id="dt-root" term="Root Element">There is exactly
+one element, called the <term>root</term>, or document element, no
+part of which appears in the <termref
+def="dt-content">content</termref> of any other element.</termdef>
+For all other elements, if the start-tag is in the content of another
+element, the end-tag is in the content of the same element. More
+simply stated, the elements, delimited by start- and end-tags, nest
+properly within each other.
+</p></item>
+</olist>
+</p>
+<p><termdef id="dt-parentchild" term="Parent/Child">As a consequence
+of this,
+for each non-root element
+<code>C</code> in the document, there is one other element <code>P</code>
+in the document such that
+<code>C</code> is in the content of <code>P</code>, but is not in
+the content of any other element that is in the content of
+<code>P</code>.
+<code>P</code> is referred to as the
+<term>parent</term> of <code>C</code>, and <code>C</code> as a
+<term>child</term> of <code>P</code>.</termdef></p></div2>
+
+<div2 id="charsets">
+<head>Characters</head>
+
+<p><termdef id="dt-text" term="Text">A parsed entity contains
+<term>text</term>, a sequence of
+<termref def="dt-character">characters</termref>,
+which may represent markup or character data.</termdef>
+<termdef id="dt-character" term="Character">A <term>character</term>
+is an atomic unit of text as specified by
+ISO/IEC 10646 <bibref ref="ISO10646"/>.
+Legal characters are tab, carriage return, line feed, and the legal
+graphic characters of Unicode and ISO/IEC 10646.
+The use of "compatibility characters", as defined in section 6.8
+of <bibref ref='Unicode'/>, is discouraged.
+</termdef>
+<scrap lang="ebnf" id="char32">
+<head>Character Range</head>
+<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
+<prod id="NT-Char"><lhs>Char</lhs>
+<rhs>#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
+| [#x10000-#x10FFFF]</rhs>
+<com>any Unicode character, excluding the
+surrogate blocks, FFFE, and FFFF.</com> </prod>
+</prodgroup>
+</scrap>
+</p>
+
+<p>The mechanism for encoding character code points into bit patterns may
+vary from entity to entity. All XML processors must accept the UTF-8
+and UTF-16 encodings of 10646; the mechanisms for signaling which of
+the two is in use, or for bringing other encodings into play, are
+discussed later, in <specref ref='charencoding'/>.
+</p>
+<!--
+<p>Regardless of the specific encoding used, any character in the ISO/IEC
+10646 character set may be referred to by the decimal or hexadecimal
+equivalent of its
+UCS-4 code value.
+</p>-->
+</div2>
+
+<div2 id='sec-common-syn'>
+<head>Common Syntactic Constructs</head>
+
+<p>This section defines some symbols used widely in the grammar.</p>
+<p><nt def="NT-S">S</nt> (white space) consists of one or more space (#x20)
+characters, carriage returns, line feeds, or tabs.
+
+<scrap lang="ebnf" id='white'>
+<head>White Space</head>
+<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
+<prod id='NT-S'><lhs>S</lhs>
+<rhs>(#x20 | #x9 | #xD | #xA)+</rhs>
+</prod>
+</prodgroup>
+</scrap></p>
+<p>Characters are classified for convenience as letters, digits, or other
+characters. Letters consist of an alphabetic or syllabic
+base character possibly
+followed by one or more combining characters, or of an ideographic
+character.
+Full definitions of the specific characters in each class
+are given in <specref ref='CharClasses'/>.</p>
+<p><termdef id="dt-name" term="Name">A <term>Name</term> is a token
+beginning with a letter or one of a few punctuation characters, and continuing
+with letters, digits, hyphens, underscores, colons, or full stops, together
+known as name characters.</termdef>
+Names beginning with the string "<code>xml</code>", or any string
+which would match <code>(('X'|'x') ('M'|'m') ('L'|'l'))</code>, are
+reserved for standardization in this or future versions of this
+specification.
+</p>
+<note>
+<p>The colon character within XML names is reserved for experimentation with
+name spaces.
+Its meaning is expected to be
+standardized at some future point, at which point those documents
+using the colon for experimental purposes may need to be updated.
+(There is no guarantee that any name-space mechanism
+adopted for XML will in fact use the colon as a name-space delimiter.)
+In practice, this means that authors should not use the colon in XML
+names except as part of name-space experiments, but that XML processors
+should accept the colon as a name character.</p>
+</note>
+<p>An
+<nt def='NT-Nmtoken'>Nmtoken</nt> (name token) is any mixture of
+name characters.
+<scrap lang='ebnf'>
+<head>Names and Tokens</head>
+<prod id='NT-NameChar'><lhs>NameChar</lhs>
+<rhs><nt def="NT-Letter">Letter</nt>
+| <nt def='NT-Digit'>Digit</nt>
+| '.' | '-' | '_' | ':'
+| <nt def='NT-CombiningChar'>CombiningChar</nt>
+| <nt def='NT-Extender'>Extender</nt></rhs>
+</prod>
+<prod id='NT-Name'><lhs>Name</lhs>
+<rhs>(<nt def='NT-Letter'>Letter</nt> | '_' | ':')
+(<nt def='NT-NameChar'>NameChar</nt>)*</rhs></prod>
+<prod id='NT-Names'><lhs>Names</lhs>
+<rhs><nt def='NT-Name'>Name</nt>
+(<nt def='NT-S'>S</nt> <nt def='NT-Name'>Name</nt>)*</rhs></prod>
+<prod id='NT-Nmtoken'><lhs>Nmtoken</lhs>
+<rhs>(<nt def='NT-NameChar'>NameChar</nt>)+</rhs></prod>
+<prod id='NT-Nmtokens'><lhs>Nmtokens</lhs>
+<rhs><nt def='NT-Nmtoken'>Nmtoken</nt> (<nt def='NT-S'>S</nt> <nt def='NT-Nmtoken'>Nmtoken</nt>)*</rhs></prod>
+</scrap>
+</p>
+<p>Literal data is any quoted string not containing
+the quotation mark used as a delimiter for that string.
+Literals are used
+for specifying the content of internal entities
+(<nt def='NT-EntityValue'>EntityValue</nt>),
+the values of attributes (<nt def='NT-AttValue'>AttValue</nt>),
+and external identifiers
+(<nt def="NT-SystemLiteral">SystemLiteral</nt>).
+Note that a <nt def='NT-SystemLiteral'>SystemLiteral</nt>
+can be parsed without scanning for markup.
+<scrap lang='ebnf'>
+<head>Literals</head>
+<prod id='NT-EntityValue'><lhs>EntityValue</lhs>
+<rhs>'"'
+([^%&amp;"]
+| <nt def='NT-PEReference'>PEReference</nt>
+| <nt def='NT-Reference'>Reference</nt>)*
+'"'
+</rhs>
+<rhs>|&nbsp;
+"'"
+([^%&amp;']
+| <nt def='NT-PEReference'>PEReference</nt>
+| <nt def='NT-Reference'>Reference</nt>)*
+"'"</rhs>
+</prod>
+<prod id='NT-AttValue'><lhs>AttValue</lhs>
+<rhs>'"'
+([^&lt;&amp;"]
+| <nt def='NT-Reference'>Reference</nt>)*
+'"'
+</rhs>
+<rhs>|&nbsp;
+"'"
+([^&lt;&amp;']
+| <nt def='NT-Reference'>Reference</nt>)*
+"'"</rhs>
+</prod>
+<prod id="NT-SystemLiteral"><lhs>SystemLiteral</lhs>
+<rhs>('"' [^"]* '"') |&nbsp;("'" [^']* "'")
+</rhs>
+</prod>
+<prod id="NT-PubidLiteral"><lhs>PubidLiteral</lhs>
+<rhs>'"' <nt def='NT-PubidChar'>PubidChar</nt>*
+'"'
+| "'" (<nt def='NT-PubidChar'>PubidChar</nt> - "'")* "'"</rhs>
+</prod>
+<prod id="NT-PubidChar"><lhs>PubidChar</lhs>
+<rhs>#x20 | #xD | #xA
+|&nbsp;[a-zA-Z0-9]
+|&nbsp;[-'()+,./:=?;!*#@$_%]</rhs>
+</prod>
+</scrap>
+</p>
+
+</div2>
+
+<div2 id='syntax'>
+<head>Character Data and Markup</head>
+
+<p><termref def='dt-text'>Text</termref> consists of intermingled
+<termref def="dt-chardata">character
+data</termref> and markup.
+<termdef id="dt-markup" term="Markup"><term>Markup</term> takes the form of
+<termref def="dt-stag">start-tags</termref>,
+<termref def="dt-etag">end-tags</termref>,
+<termref def="dt-empty">empty-element tags</termref>,
+<termref def="dt-entref">entity references</termref>,
+<termref def="dt-charref">character references</termref>,
+<termref def="dt-comment">comments</termref>,
+<termref def="dt-cdsection">CDATA section</termref> delimiters,
+<termref def="dt-doctype">document type declarations</termref>, and
+<termref def="dt-pi">processing instructions</termref>.
+</termdef>
+</p>
+<p><termdef id="dt-chardata" term="Character Data">All text that is not markup
+constitutes the <term>character data</term> of
+the document.</termdef></p>
+<p>The ampersand character (&amp;) and the left angle bracket (&lt;)
+may appear in their literal form <emph>only</emph> when used as markup
+delimiters, or within a <termref def="dt-comment">comment</termref>, a
+<termref def="dt-pi">processing instruction</termref>,
+or a <termref def="dt-cdsection">CDATA section</termref>.
+
+They are also legal within the <termref def='dt-litentval'>literal entity
+value</termref> of an internal entity declaration; see
+<specref ref='wf-entities'/>.
+<!-- FINAL EDIT: restore internal entity decl or leave it out. -->
+If they are needed elsewhere,
+they must be <termref def="dt-escape">escaped</termref>
+using either <termref def='dt-charref'>numeric character references</termref>
+or the strings
+"<code>&amp;amp;</code>" and "<code>&amp;lt;</code>" respectively.
+The right angle
+bracket (>) may be represented using the string
+"<code>&amp;gt;</code>", and must, <termref def='dt-compat'>for
+compatibility</termref>,
+be escaped using
+"<code>&amp;gt;</code>" or a character reference
+when it appears in the string
+"<code>]]&gt;</code>"
+in content,
+when that string is not marking the end of
+a <termref def="dt-cdsection">CDATA section</termref>.
+</p>
+<p>
+In the content of elements, character data
+is any string of characters which does
+not contain the start-delimiter of any markup.
+In a CDATA section, character data
+is any string of characters not including the CDATA-section-close
+delimiter, "<code>]]&gt;</code>".</p>
+<p>
+To allow attribute values to contain both single and double quotes, the
+apostrophe or single-quote character (') may be represented as
+"<code>&amp;apos;</code>", and the double-quote character (") as
+"<code>&amp;quot;</code>".
+<scrap lang="ebnf">
+<head>Character Data</head>
+<prod id='NT-CharData'>
+<lhs>CharData</lhs>
+<rhs>[^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)</rhs>
+</prod>
+</scrap>
+</p>
+</div2>
+
+<div2 id='sec-comments'>
+<head>Comments</head>
+
+<p><termdef id="dt-comment" term="Comment"><term>Comments</term> may
+appear anywhere in a document outside other
+<termref def='dt-markup'>markup</termref>; in addition,
+they may appear within the document type declaration
+at places allowed by the grammar.
+They are not part of the document's <termref def="dt-chardata">character
+data</termref>; an XML
+processor may, but need not, make it possible for an application to
+retrieve the text of comments.
+<termref def="dt-compat">For compatibility</termref>, the string
+"<code>--</code>" (double-hyphen) must not occur within
+comments.
+<scrap lang="ebnf">
+<head>Comments</head>
+<prod id='NT-Comment'><lhs>Comment</lhs>
+<rhs>'&lt;!--'
+((<nt def='NT-Char'>Char</nt> - '-')
+| ('-' (<nt def='NT-Char'>Char</nt> - '-')))*
+'-->'</rhs>
+</prod>
+</scrap>
+</termdef></p>
+<p>An example of a comment:
+<eg>&lt;!&como; declarations for &lt;head> &amp; &lt;body> &comc;&gt;</eg>
+</p>
+</div2>
+
+<div2 id='sec-pi'>
+<head>Processing Instructions</head>
+
+<p><termdef id="dt-pi" term="Processing instruction"><term>Processing
+instructions</term> (PIs) allow documents to contain instructions
+for applications.
+
+<scrap lang="ebnf">
+<head>Processing Instructions</head>
+<prod id='NT-PI'><lhs>PI</lhs>
+<rhs>'&lt;?' <nt def='NT-PITarget'>PITarget</nt>
+(<nt def='NT-S'>S</nt>
+(<nt def='NT-Char'>Char</nt>* -
+(<nt def='NT-Char'>Char</nt>* &pic; <nt def='NT-Char'>Char</nt>*)))?
+&pic;</rhs></prod>
+<prod id='NT-PITarget'><lhs>PITarget</lhs>
+<rhs><nt def='NT-Name'>Name</nt> -
+(('X' | 'x') ('M' | 'm') ('L' | 'l'))</rhs>
+</prod>
+</scrap></termdef>
+PIs are not part of the document's <termref def="dt-chardata">character
+data</termref>, but must be passed through to the application. The
+PI begins with a target (<nt def='NT-PITarget'>PITarget</nt>) used
+to identify the application to which the instruction is directed.
+The target names "<code>XML</code>", "<code>xml</code>", and so on are
+reserved for standardization in this or future versions of this
+specification.
+The
+XML <termref def='dt-notation'>Notation</termref> mechanism
+may be used for
+formal declaration of PI targets.
+</p>
+</div2>
+
+<div2 id='sec-cdata-sect'>
+<head>CDATA Sections</head>
+
+<p><termdef id="dt-cdsection" term="CDATA Section"><term>CDATA sections</term>
+may occur
+anywhere character data may occur; they are
+used to escape blocks of text containing characters which would
+otherwise be recognized as markup. CDATA sections begin with the
+string "<code>&lt;![CDATA[</code>" and end with the string
+"<code>]]&gt;</code>":
+<scrap lang="ebnf">
+<head>CDATA Sections</head>
+<prod id='NT-CDSect'><lhs>CDSect</lhs>
+<rhs><nt def='NT-CDStart'>CDStart</nt>
+<nt def='NT-CData'>CData</nt>
+<nt def='NT-CDEnd'>CDEnd</nt></rhs></prod>
+<prod id='NT-CDStart'><lhs>CDStart</lhs>
+<rhs>'&lt;![CDATA['</rhs>
+</prod>
+<prod id='NT-CData'><lhs>CData</lhs>
+<rhs>(<nt def='NT-Char'>Char</nt>* -
+(<nt def='NT-Char'>Char</nt>* ']]&gt;' <nt def='NT-Char'>Char</nt>*))
+</rhs>
+</prod>
+<prod id='NT-CDEnd'><lhs>CDEnd</lhs>
+<rhs>']]&gt;'</rhs>
+</prod>
+</scrap>
+
+Within a CDATA section, only the <nt def='NT-CDEnd'>CDEnd</nt> string is
+recognized as markup, so that left angle brackets and ampersands may occur in
+their literal form; they need not (and cannot) be escaped using
+"<code>&amp;lt;</code>" and "<code>&amp;amp;</code>". CDATA sections
+cannot nest.</termdef>
+</p>
+
+<p>An example of a CDATA section, in which "<code>&lt;greeting></code>" and
+"<code>&lt;/greeting></code>"
+are recognized as <termref def='dt-chardata'>character data</termref>, not
+<termref def='dt-markup'>markup</termref>:
+<eg>&lt;![CDATA[&lt;greeting>Hello, world!&lt;/greeting>]]&gt;</eg>
+</p>
+</div2>
+
+<div2 id='sec-prolog-dtd'>
+<head>Prolog and Document Type Declaration</head>
+
+<p><termdef id='dt-xmldecl' term='XML Declaration'>XML documents
+may, and should,
+begin with an <term>XML declaration</term> which specifies
+the version of
+XML being used.</termdef>
+For example, the following is a complete XML document, <termref
+def="dt-wellformed">well-formed</termref> but not
+<termref def="dt-valid">valid</termref>:
+<eg><![CDATA[<?xml version="1.0"?>
+<greeting>Hello, world!</greeting>
+]]></eg>
+and so is this:
+<eg><![CDATA[<greeting>Hello, world!</greeting>
+]]></eg>
+</p>
+
+<p>The version number "<code>1.0</code>" should be used to indicate
+conformance to this version of this specification; it is an error
+for a document to use the value "<code>1.0</code>"
+if it does not conform to this version of this specification.
+It is the intent
+of the XML working group to give later versions of this specification
+numbers other than "<code>1.0</code>", but this intent does not
+indicate a
+commitment to produce any future versions of XML, nor if any are produced, to
+use any particular numbering scheme.
+Since future versions are not ruled out, this construct is provided
+as a means to allow the possibility of automatic version recognition, should
+it become necessary.
+Processors may signal an error if they receive documents labeled with
+versions they do not support.
+</p>
+<p>The function of the markup in an XML document is to describe its
+storage and logical structure and to associate attribute-value pairs
+with its logical structures. XML provides a mechanism, the <termref
+def="dt-doctype">document type declaration</termref>, to define
+constraints on the logical structure and to support the use of
+predefined storage units.
+
+<termdef id="dt-valid" term="Validity">An XML document is
+<term>valid</term> if it has an associated document type
+declaration and if the document
+complies with the constraints expressed in it.</termdef></p>
+<p>The document type declaration must appear before
+the first <termref def="dt-element">element</termref> in the document.
+<scrap lang="ebnf" id='xmldoc'>
+<head>Prolog</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id='NT-prolog'><lhs>prolog</lhs>
+<rhs><nt def='NT-XMLDecl'>XMLDecl</nt>?
+<nt def='NT-Misc'>Misc</nt>*
+(<nt def='NT-doctypedecl'>doctypedecl</nt>
+<nt def='NT-Misc'>Misc</nt>*)?</rhs></prod>
+<prod id='NT-XMLDecl'><lhs>XMLDecl</lhs>
+<rhs>&xmlpio;
+<nt def='NT-VersionInfo'>VersionInfo</nt>
+<nt def='NT-EncodingDecl'>EncodingDecl</nt>?
+<nt def='NT-SDDecl'>SDDecl</nt>?
+<nt def="NT-S">S</nt>?
+&pic;</rhs>
+</prod>
+<prod id='NT-VersionInfo'><lhs>VersionInfo</lhs>
+<rhs><nt def="NT-S">S</nt> 'version' <nt def='NT-Eq'>Eq</nt>
+(' <nt def="NT-VersionNum">VersionNum</nt> '
+| " <nt def="NT-VersionNum">VersionNum</nt> ")</rhs>
+</prod>
+<prod id='NT-Eq'><lhs>Eq</lhs>
+<rhs><nt def='NT-S'>S</nt>? '=' <nt def='NT-S'>S</nt>?</rhs></prod>
+<prod id="NT-VersionNum">
+<lhs>VersionNum</lhs>
+<rhs>([a-zA-Z0-9_.:] | '-')+</rhs>
+</prod>
+<prod id='NT-Misc'><lhs>Misc</lhs>
+<rhs><nt def='NT-Comment'>Comment</nt> | <nt def='NT-PI'>PI</nt> |
+<nt def='NT-S'>S</nt></rhs></prod>
+</prodgroup>
+</scrap></p>
+
+<p><termdef id="dt-doctype" term="Document Type Declaration">The XML
+<term>document type declaration</term>
+contains or points to
+<termref def='dt-markupdecl'>markup declarations</termref>
+that provide a grammar for a
+class of documents.
+This grammar is known as a document type definition,
+or <term>DTD</term>.
+The document type declaration can point to an external subset (a
+special kind of
+<termref def='dt-extent'>external entity</termref>) containing markup
+declarations, or can
+contain the markup declarations directly in an internal subset, or can do
+both.
+The DTD for a document consists of both subsets taken
+together.</termdef>
+</p>
+<p><termdef id="dt-markupdecl" term="markup declaration">
+A <term>markup declaration</term> is
+an <termref def="dt-eldecl">element type declaration</termref>,
+an <termref def="dt-attdecl">attribute-list declaration</termref>,
+an <termref def="dt-entdecl">entity declaration</termref>, or
+a <termref def="dt-notdecl">notation declaration</termref>.
+</termdef>
+These declarations may be contained in whole or in part
+within <termref def='dt-PE'>parameter entities</termref>,
+as described in the well-formedness and validity constraints below.
+For fuller information, see
+<specref ref="sec-physical-struct"/>.</p>
+<scrap lang="ebnf" id='dtd'>
+<head>Document Type Definition</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id='NT-doctypedecl'><lhs>doctypedecl</lhs>
+<rhs>'&lt;!DOCTYPE' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt> (<nt def='NT-S'>S</nt>
+<nt def='NT-ExternalID'>ExternalID</nt>)?
+<nt def='NT-S'>S</nt>? ('['
+(<nt def='NT-markupdecl'>markupdecl</nt>
+| <nt def='NT-PEReference'>PEReference</nt>
+| <nt def='NT-S'>S</nt>)*
+']'
+<nt def='NT-S'>S</nt>?)? '>'</rhs>
+<vc def="vc-roottype"/>
+</prod>
+<prod id='NT-markupdecl'><lhs>markupdecl</lhs>
+<rhs><nt def='NT-elementdecl'>elementdecl</nt>
+| <nt def='NT-AttlistDecl'>AttlistDecl</nt>
+| <nt def='NT-EntityDecl'>EntityDecl</nt>
+| <nt def='NT-NotationDecl'>NotationDecl</nt>
+| <nt def='NT-PI'>PI</nt>
+| <nt def='NT-Comment'>Comment</nt>
+</rhs>
+<vc def='vc-PEinMarkupDecl'/>
+<wfc def="wfc-PEinInternalSubset"/>
+</prod>
+
+</prodgroup>
+</scrap>
+
+<p>The markup declarations may be made up in whole or in part of
+the <termref def='dt-repltext'>replacement text</termref> of
+<termref def='dt-PE'>parameter entities</termref>.
+The productions later in this specification for
+individual nonterminals (<nt def='NT-elementdecl'>elementdecl</nt>,
+<nt def='NT-AttlistDecl'>AttlistDecl</nt>, and so on) describe
+the declarations <emph>after</emph> all the parameter entities have been
+<termref def='dt-include'>included</termref>.</p>
+
+<vcnote id="vc-roottype">
+<head>Root Element Type</head>
+<p>
+The <nt def='NT-Name'>Name</nt> in the document type declaration must
+match the element type of the <termref def='dt-root'>root element</termref>.
+</p>
+</vcnote>
+
+<vcnote id='vc-PEinMarkupDecl'>
+<head>Proper Declaration/PE Nesting</head>
+<p>Parameter-entity
+<termref def='dt-repltext'>replacement text</termref> must be properly nested
+with markup declarations.
+That is to say, if either the first character
+or the last character of a markup
+declaration (<nt def='NT-markupdecl'>markupdecl</nt> above)
+is contained in the replacement text for a
+<termref def='dt-PERef'>parameter-entity reference</termref>,
+both must be contained in the same replacement text.</p>
+</vcnote>
+<wfcnote id="wfc-PEinInternalSubset">
+<head>PEs in Internal Subset</head>
+<p>In the internal DTD subset,
+<termref def='dt-PERef'>parameter-entity references</termref>
+can occur only where markup declarations can occur, not
+within markup declarations. (This does not apply to
+references that occur in
+external parameter entities or to the external subset.)
+</p>
+</wfcnote>
+<p>
+Like the internal subset, the external subset and
+any external parameter entities referred to in the DTD
+must consist of a series of complete markup declarations of the types
+allowed by the non-terminal symbol
+<nt def="NT-markupdecl">markupdecl</nt>, interspersed with white space
+or <termref def="dt-PERef">parameter-entity references</termref>.
+However, portions of the contents
+of the
+external subset or of external parameter entities may conditionally be ignored
+by using
+the <termref def="dt-cond-section">conditional section</termref>
+construct; this is not allowed in the internal subset.
+
+<scrap id="ext-Subset">
+<head>External Subset</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id='NT-extSubset'><lhs>extSubset</lhs>
+<rhs><nt def='NT-TextDecl'>TextDecl</nt>?
+<nt def='NT-extSubsetDecl'>extSubsetDecl</nt></rhs></prod>
+<prod id='NT-extSubsetDecl'><lhs>extSubsetDecl</lhs>
+<rhs>(
+<nt def='NT-markupdecl'>markupdecl</nt>
+| <nt def='NT-conditionalSect'>conditionalSect</nt>
+| <nt def='NT-PEReference'>PEReference</nt>
+| <nt def='NT-S'>S</nt>
+)*</rhs>
+</prod>
+</prodgroup>
+</scrap></p>
+<p>The external subset and external parameter entities also differ
+from the internal subset in that in them,
+<termref def="dt-PERef">parameter-entity references</termref>
+are permitted <emph>within</emph> markup declarations,
+not only <emph>between</emph> markup declarations.</p>
+<p>An example of an XML document with a document type declaration:
+<eg><![CDATA[<?xml version="1.0"?>
+<!DOCTYPE greeting SYSTEM "hello.dtd">
+<greeting>Hello, world!</greeting>
+]]></eg>
+The <termref def="dt-sysid">system identifier</termref>
+"<code>hello.dtd</code>" gives the URI of a DTD for the document.</p>
+<p>The declarations can also be given locally, as in this
+example:
+<eg><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE greeting [
+ <!ELEMENT greeting (#PCDATA)>
+]>
+<greeting>Hello, world!</greeting>
+]]></eg>
+If both the external and internal subsets are used, the
+internal subset is considered to occur before the external subset.
+<!-- 'is considered to'? boo. whazzat mean? -->
+This has the effect that entity and attribute-list declarations in the
+internal subset take precedence over those in the external subset.
+</p>
+</div2>
+
+<div2 id='sec-rmd'>
+<head>Standalone Document Declaration</head>
+<p>Markup declarations can affect the content of the document,
+as passed from an <termref def="dt-xml-proc">XML processor</termref>
+to an application; examples are attribute defaults and entity
+declarations.
+The standalone document declaration,
+which may appear as a component of the XML declaration, signals
+whether or not there are such declarations which appear external to
+the <termref def='dt-docent'>document entity</termref>.
+<scrap lang="ebnf" id='fulldtd'>
+<head>Standalone Document Declaration</head>
+<prodgroup pcw2="4" pcw4="19.5" pcw5="9">
+<prod id='NT-SDDecl'><lhs>SDDecl</lhs>
+<rhs>
+<nt def="NT-S">S</nt>
+'standalone' <nt def='NT-Eq'>Eq</nt>
+(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"'))
+</rhs>
+<vc def='vc-check-rmd'/></prod>
+</prodgroup>
+</scrap></p>
+<p>
+In a standalone document declaration, the value "<code>yes</code>" indicates
+that there
+are no markup declarations external to the <termref def='dt-docent'>document
+entity</termref> (either in the DTD external subset, or in an
+external parameter entity referenced from the internal subset)
+which affect the information passed from the XML processor to
+the application.
+The value "<code>no</code>" indicates that there are or may be such
+external markup declarations.
+Note that the standalone document declaration only
+denotes the presence of external <emph>declarations</emph>; the presence, in a
+document, of
+references to external <emph>entities</emph>, when those entities are
+internally declared,
+does not change its standalone status.</p>
+<p>If there are no external markup declarations, the standalone document
+declaration has no meaning.
+If there are external markup declarations but there is no standalone
+document declaration, the value "<code>no</code>" is assumed.</p>
+<p>Any XML document for which <code>standalone="no"</code> holds can
+be converted algorithmically to a standalone document,
+which may be desirable for some network delivery applications.</p>
+<vcnote id='vc-check-rmd'>
+<head>Standalone Document Declaration</head>
+<p>The standalone document declaration must have
+the value "<code>no</code>" if any external markup declarations
+contain declarations of:</p><ulist>
+<item><p>attributes with <termref def="dt-default">default</termref> values, if
+elements to which
+these attributes apply appear in the document without
+specifications of values for these attributes, or</p></item>
+<item><p>entities (other than &magicents;),
+if <termref def="dt-entref">references</termref> to those
+entities appear in the document, or</p>
+</item>
+<item><p>attributes with values subject to
+<titleref href='AVNormalize'>normalization</titleref>, where the
+attribute appears in the document with a value which will
+change as a result of normalization, or</p>
+</item>
+<item>
+<p>element types with <termref def="dt-elemcontent">element content</termref>,
+if white space occurs
+directly within any instance of those types.
+</p></item>
+</ulist>
+
+</vcnote>
+<p>An example XML declaration with a standalone document declaration:<eg
+>&lt;?xml version="&XML.version;" standalone='yes'?></eg></p>
+</div2>
+<div2 id='sec-white-space'>
+<head>White Space Handling</head>
+
+<p>In editing XML documents, it is often convenient to use "white space"
+(spaces, tabs, and blank lines, denoted by the nonterminal
+<nt def='NT-S'>S</nt> in this specification) to
+set apart the markup for greater readability. Such white space is typically
+not intended for inclusion in the delivered version of the document.
+On the other hand, "significant" white space that should be preserved in the
+delivered version is common, for example in poetry and
+source code.</p>
+<p>An <termref def='dt-xml-proc'>XML processor</termref>
+must always pass all characters in a document that are not
+markup through to the application. A <termref def='dt-validating'>
+validating XML processor</termref> must also inform the application
+which of these characters constitute white space appearing
+in <termref def="dt-elemcontent">element content</termref>.
+</p>
+<p>A special <termref def='dt-attr'>attribute</termref>
+named <kw>xml:space</kw> may be attached to an element
+to signal an intention that in that element,
+white space should be preserved by applications.
+In valid documents, this attribute, like any other, must be
+<termref def="dt-attdecl">declared</termref> if it is used.
+When declared, it must be given as an
+<termref def='dt-enumerated'>enumerated type</termref> whose only
+possible values are "<code>default</code>" and "<code>preserve</code>".
+For example:<eg><![CDATA[ <!ATTLIST poem xml:space (default|preserve) 'preserve'>]]></eg></p>
+<p>The value "<code>default</code>" signals that applications'
+default white-space processing modes are acceptable for this element; the
+value "<code>preserve</code>" indicates the intent that applications preserve
+all the white space.
+This declared intent is considered to apply to all elements within the content
+of the element where it is specified, unless overriden with another instance
+of the <kw>xml:space</kw> attribute.
+</p>
+<p>The <termref def='dt-root'>root element</termref> of any document
+is considered to have signaled no intentions as regards application space
+handling, unless it provides a value for
+this attribute or the attribute is declared with a default value.
+</p>
+
+</div2>
+<div2 id='sec-line-ends'>
+<head>End-of-Line Handling</head>
+<p>XML <termref def='dt-parsedent'>parsed entities</termref> are often stored in
+computer files which, for editing convenience, are organized into lines.
+These lines are typically separated by some combination of the characters
+carriage-return (#xD) and line-feed (#xA).</p>
+<p>To simplify the tasks of <termref def='dt-app'>applications</termref>,
+wherever an external parsed entity or the literal entity value
+of an internal parsed entity contains either the literal
+two-character sequence "#xD#xA" or a standalone literal
+#xD, an <termref def='dt-xml-proc'>XML processor</termref> must
+pass to the application the single character #xA.
+(This behavior can
+conveniently be produced by normalizing all
+line breaks to #xA on input, before parsing.)
+</p>
+</div2>
+<div2 id='sec-lang-tag'>
+<head>Language Identification</head>
+<p>In document processing, it is often useful to
+identify the natural or formal language
+in which the content is
+written.
+A special <termref def="dt-attr">attribute</termref> named
+<kw>xml:lang</kw> may be inserted in
+documents to specify the
+language used in the contents and attribute values
+of any element in an XML document.
+In valid documents, this attribute, like any other, must be
+<termref def="dt-attdecl">declared</termref> if it is used.
+The values of the attribute are language identifiers as defined
+by <bibref ref="RFC1766"/>, "Tags for the Identification of Languages":
+<scrap lang='ebnf'>
+<head>Language Identification</head>
+<prod id='NT-LanguageID'><lhs>LanguageID</lhs>
+<rhs><nt def='NT-Langcode'>Langcode</nt>
+('-' <nt def='NT-Subcode'>Subcode</nt>)*</rhs></prod>
+<prod id='NT-Langcode'><lhs>Langcode</lhs>
+<rhs><nt def='NT-ISO639Code'>ISO639Code</nt> |
+<nt def='NT-IanaCode'>IanaCode</nt> |
+<nt def='NT-UserCode'>UserCode</nt></rhs>
+</prod>
+<prod id='NT-ISO639Code'><lhs>ISO639Code</lhs>
+<rhs>([a-z] | [A-Z]) ([a-z] | [A-Z])</rhs></prod>
+<prod id='NT-IanaCode'><lhs>IanaCode</lhs>
+<rhs>('i' | 'I') '-' ([a-z] | [A-Z])+</rhs></prod>
+<prod id='NT-UserCode'><lhs>UserCode</lhs>
+<rhs>('x' | 'X') '-' ([a-z] | [A-Z])+</rhs></prod>
+<prod id='NT-Subcode'><lhs>Subcode</lhs>
+<rhs>([a-z] | [A-Z])+</rhs></prod>
+</scrap>
+The <nt def='NT-Langcode'>Langcode</nt> may be any of the following:
+<ulist>
+<item><p>a two-letter language code as defined by
+<bibref ref="ISO639"/>, "Codes
+for the representation of names of languages"</p></item>
+<item><p>a language identifier registered with the Internet
+Assigned Numbers Authority <bibref ref='IANA'/>; these begin with the
+prefix "<code>i-</code>" (or "<code>I-</code>")</p></item>
+<item><p>a language identifier assigned by the user, or agreed on
+between parties in private use; these must begin with the
+prefix "<code>x-</code>" or "<code>X-</code>" in order to ensure that they do not conflict
+with names later standardized or registered with IANA</p></item>
+</ulist></p>
+<p>There may be any number of <nt def='NT-Subcode'>Subcode</nt> segments; if
+the first
+subcode segment exists and the Subcode consists of two
+letters, then it must be a country code from
+<bibref ref="ISO3166"/>, "Codes
+for the representation of names of countries."
+If the first
+subcode consists of more than two letters, it must be
+a subcode for the language in question registered with IANA,
+unless the <nt def='NT-Langcode'>Langcode</nt> begins with the prefix
+"<code>x-</code>" or
+"<code>X-</code>". </p>
+<p>It is customary to give the language code in lower case, and
+the country code (if any) in upper case.
+Note that these values, unlike other names in XML documents,
+are case insensitive.</p>
+<p>For example:
+<eg><![CDATA[<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
+<p xml:lang="en-GB">What colour is it?</p>
+<p xml:lang="en-US">What color is it?</p>
+<sp who="Faust" desc='leise' xml:lang="de">
+ <l>Habe nun, ach! Philosophie,</l>
+ <l>Juristerei, und Medizin</l>
+ <l>und leider auch Theologie</l>
+ <l>durchaus studiert mit heißem Bemüh'n.</l>
+ </sp>]]></eg></p>
+<!--<p>The xml:lang value is considered to apply both to the contents of an
+element and
+(unless otherwise via attribute default values) to the
+values of all of its attributes with free-text (CDATA) values. -->
+<p>The intent declared with <kw>xml:lang</kw> is considered to apply to
+all attributes and content of the element where it is specified,
+unless overridden with an instance of <kw>xml:lang</kw>
+on another element within that content.</p>
+<!--
+If no
+value is specified for xml:lang on an element, and no default value is
+defined for it in the DTD, then the xml:lang attribute of any element
+takes the same value it has in the parent element, if any. The two
+technical terms in the following example both have the same effective
+value for xml:lang:
+
+ <p xml:lang="en">Here the keywords are
+ <term xml:lang="en">shift</term> and
+ <term>reduce</term>. ...</p>
+
+The application, not the XML processor, is responsible for this '
+inheritance' of attribute values.
+-->
+<p>A simple declaration for <kw>xml:lang</kw> might take
+the form
+<eg>xml:lang NMTOKEN #IMPLIED</eg>
+but specific default values may also be given, if appropriate. In a
+collection of French poems for English students, with glosses and
+notes in English, the xml:lang attribute might be declared this way:
+<eg><![CDATA[ <!ATTLIST poem xml:lang NMTOKEN 'fr'>
+ <!ATTLIST gloss xml:lang NMTOKEN 'en'>
+ <!ATTLIST note xml:lang NMTOKEN 'en'>]]></eg>
+</p>
+
+</div2>
+</div1>
+<!-- &Elements; -->
+
+<div1 id='sec-logical-struct'>
+<head>Logical Structures</head>
+
+<p><termdef id="dt-element" term="Element">Each <termref
+def="dt-xml-doc">XML document</termref> contains one or more
+<term>elements</term>, the boundaries of which are
+either delimited by <termref def="dt-stag">start-tags</termref>
+and <termref def="dt-etag">end-tags</termref>, or, for <termref
+def="dt-empty">empty</termref> elements, by an <termref
+def="dt-eetag">empty-element tag</termref>. Each element has a type,
+identified by name, sometimes called its "generic
+identifier" (GI), and may have a set of
+attribute specifications.</termdef> Each attribute specification
+has a <termref
+def="dt-attrname">name</termref> and a <termref
+def="dt-attrval">value</termref>.
+</p>
+<scrap lang='ebnf'><head>Element</head>
+<prod id='NT-element'><lhs>element</lhs>
+<rhs><nt def='NT-EmptyElemTag'>EmptyElemTag</nt></rhs>
+<rhs>| <nt def='NT-STag'>STag</nt> <nt def='NT-content'>content</nt>
+<nt def='NT-ETag'>ETag</nt></rhs>
+<wfc def='GIMatch'/>
+<vc def='elementvalid'/>
+</prod>
+</scrap>
+<p>This specification does not constrain the semantics, use, or (beyond
+syntax) names of the element types and attributes, except that names
+beginning with a match to <code>(('X'|'x')('M'|'m')('L'|'l'))</code>
+are reserved for standardization in this or future versions of this
+specification.
+</p>
+<wfcnote id='GIMatch'>
+<head>Element Type Match</head>
+<p>
+The <nt def='NT-Name'>Name</nt> in an element's end-tag must match
+the element type in
+the start-tag.
+</p>
+</wfcnote>
+<vcnote id='elementvalid'>
+<head>Element Valid</head>
+<p>An element is
+valid if
+there is a declaration matching
+<nt def='NT-elementdecl'>elementdecl</nt> where the
+<nt def='NT-Name'>Name</nt> matches the element type, and
+one of the following holds:</p>
+<olist>
+<item><p>The declaration matches <kw>EMPTY</kw> and the element has no
+<termref def='dt-content'>content</termref>.</p></item>
+<item><p>The declaration matches <nt def='NT-children'>children</nt> and
+the sequence of
+<termref def="dt-parentchild">child elements</termref>
+belongs to the language generated by the regular expression in
+the content model, with optional white space (characters
+matching the nonterminal <nt def='NT-S'>S</nt>) between each pair
+of child elements.</p></item>
+<item><p>The declaration matches <nt def='NT-Mixed'>Mixed</nt> and
+the content consists of <termref def='dt-chardata'>character
+data</termref> and <termref def='dt-parentchild'>child elements</termref>
+whose types match names in the content model.</p></item>
+<item><p>The declaration matches <kw>ANY</kw>, and the types
+of any <termref def='dt-parentchild'>child elements</termref> have
+been declared.</p></item>
+</olist>
+</vcnote>
+
+<div2 id='sec-starttags'>
+<head>Start-Tags, End-Tags, and Empty-Element Tags</head>
+
+<p><termdef id="dt-stag" term="Start-Tag">The beginning of every
+non-empty XML element is marked by a <term>start-tag</term>.
+<scrap lang='ebnf'>
+<head>Start-tag</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id='NT-STag'><lhs>STag</lhs>
+<rhs>'&lt;' <nt def='NT-Name'>Name</nt>
+(<nt def='NT-S'>S</nt> <nt def='NT-Attribute'>Attribute</nt>)*
+<nt def='NT-S'>S</nt>? '>'</rhs>
+<wfc def="uniqattspec"/>
+</prod>
+<prod id='NT-Attribute'><lhs>Attribute</lhs>
+<rhs><nt def='NT-Name'>Name</nt> <nt def='NT-Eq'>Eq</nt>
+<nt def='NT-AttValue'>AttValue</nt></rhs>
+<vc def='ValueType'/>
+<wfc def='NoExternalRefs'/>
+<wfc def='CleanAttrVals'/></prod>
+</prodgroup>
+</scrap>
+The <nt def='NT-Name'>Name</nt> in
+the start- and end-tags gives the
+element's <term>type</term>.</termdef>
+<termdef id="dt-attr" term="Attribute">
+The <nt def='NT-Name'>Name</nt>-<nt def='NT-AttValue'>AttValue</nt> pairs are
+referred to as
+the <term>attribute specifications</term> of the element</termdef>,
+<termdef id="dt-attrname" term="Attribute Name">with the
+<nt def='NT-Name'>Name</nt> in each pair
+referred to as the <term>attribute name</term></termdef> and
+<termdef id="dt-attrval" term="Attribute Value">the content of the
+<nt def='NT-AttValue'>AttValue</nt> (the text between the
+<code>'</code> or <code>"</code> delimiters)
+as the <term>attribute value</term>.</termdef>
+</p>
+<wfcnote id='uniqattspec'>
+<head>Unique Att Spec</head>
+<p>
+No attribute name may appear more than once in the same start-tag
+or empty-element tag.
+</p>
+</wfcnote>
+<vcnote id='ValueType'>
+<head>Attribute Value Type</head>
+<p>
+The attribute must have been declared; the value must be of the type
+declared for it.
+(For attribute types, see <specref ref='attdecls'/>.)
+</p>
+</vcnote>
+<wfcnote id='NoExternalRefs'>
+<head>No External Entity References</head>
+<p>
+Attribute values cannot contain direct or indirect entity references
+to external entities.
+</p>
+</wfcnote>
+<wfcnote id='CleanAttrVals'>
+<head>No <code>&lt;</code> in Attribute Values</head>
+<p>The <termref def='dt-repltext'>replacement text</termref> of any entity
+referred to directly or indirectly in an attribute
+value (other than "<code>&amp;lt;</code>") must not contain
+a <code>&lt;</code>.
+</p></wfcnote>
+<p>An example of a start-tag:
+<eg>&lt;termdef id="dt-dog" term="dog"></eg></p>
+<p><termdef id="dt-etag" term="End Tag">The end of every element
+that begins with a start-tag must
+be marked by an <term>end-tag</term>
+containing a name that echoes the element's type as given in the
+start-tag:
+<scrap lang='ebnf'>
+<head>End-tag</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id='NT-ETag'><lhs>ETag</lhs>
+<rhs>'&lt;/' <nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt>? '>'</rhs></prod>
+</prodgroup>
+</scrap>
+</termdef></p>
+<p>An example of an end-tag:<eg>&lt;/termdef></eg></p>
+<p><termdef id="dt-content" term="Content">The
+<termref def='dt-text'>text</termref> between the start-tag and
+end-tag is called the element's
+<term>content</term>:
+<scrap lang='ebnf'>
+<head>Content of Elements</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id='NT-content'><lhs>content</lhs>
+<rhs>(<nt def='NT-element'>element</nt> | <nt def='NT-CharData'>CharData</nt>
+| <nt def='NT-Reference'>Reference</nt> | <nt def='NT-CDSect'>CDSect</nt>
+| <nt def='NT-PI'>PI</nt> | <nt def='NT-Comment'>Comment</nt>)*</rhs>
+</prod>
+</prodgroup>
+</scrap>
+</termdef></p>
+<p><termdef id="dt-empty" term="Empty">If an element is <term>empty</term>,
+it must be represented either by a start-tag immediately followed
+by an end-tag or by an empty-element tag.</termdef>
+<termdef id="dt-eetag" term="empty-element tag">An
+<term>empty-element tag</term> takes a special form:
+<scrap lang='ebnf'>
+<head>Tags for Empty Elements</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id='NT-EmptyElemTag'><lhs>EmptyElemTag</lhs>
+<rhs>'&lt;' <nt def='NT-Name'>Name</nt> (<nt def='NT-S'>S</nt>
+<nt def='NT-Attribute'>Attribute</nt>)* <nt def='NT-S'>S</nt>?
+'/&gt;'</rhs>
+<wfc def="uniqattspec"/>
+</prod>
+</prodgroup>
+</scrap>
+</termdef></p>
+<p>Empty-element tags may be used for any element which has no
+content, whether or not it is declared using the keyword
+<kw>EMPTY</kw>.
+<termref def='dt-interop'>For interoperability</termref>, the empty-element
+tag must be used, and can only be used, for elements which are
+<termref def='dt-eldecl'>declared</termref> <kw>EMPTY</kw>.</p>
+<p>Examples of empty elements:
+<eg>&lt;IMG align="left"
+ src="http://www.w3.org/Icons/WWW/w3c_home" />
+&lt;br>&lt;/br>
+&lt;br/></eg></p>
+</div2>
+
+<div2 id='elemdecls'>
+<head>Element Type Declarations</head>
+
+<p>The <termref def="dt-element">element</termref> structure of an
+<termref def="dt-xml-doc">XML document</termref> may, for
+<termref def="dt-valid">validation</termref> purposes,
+be constrained
+using element type and attribute-list declarations.
+An element type declaration constrains the element's
+<termref def="dt-content">content</termref>.
+</p>
+
+<p>Element type declarations often constrain which element types can
+appear as <termref def="dt-parentchild">children</termref> of the element.
+At user option, an XML processor may issue a warning
+when a declaration mentions an element type for which no declaration
+is provided, but this is not an error.</p>
+<p><termdef id="dt-eldecl" term="Element Type declaration">An <term>element
+type declaration</term> takes the form:
+<scrap lang='ebnf'>
+<head>Element Type Declaration</head>
+<prodgroup pcw2="5.5" pcw4="18" pcw5="9">
+<prod id='NT-elementdecl'><lhs>elementdecl</lhs>
+<rhs>'&lt;!ELEMENT' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt>
+<nt def='NT-contentspec'>contentspec</nt>
+<nt def='NT-S'>S</nt>? '>'</rhs>
+<vc def='EDUnique'/></prod>
+<prod id='NT-contentspec'><lhs>contentspec</lhs>
+<rhs>'EMPTY'
+| 'ANY'
+| <nt def='NT-Mixed'>Mixed</nt>
+| <nt def='NT-children'>children</nt>
+</rhs>
+</prod>
+</prodgroup>
+</scrap>
+where the <nt def='NT-Name'>Name</nt> gives the element type
+being declared.</termdef>
+</p>
+
+<vcnote id='EDUnique'>
+<head>Unique Element Type Declaration</head>
+<p>
+No element type may be declared more than once.
+</p>
+</vcnote>
+
+<p>Examples of element type declarations:
+<eg>&lt;!ELEMENT br EMPTY>
+&lt;!ELEMENT p (#PCDATA|emph)* >
+&lt;!ELEMENT %name.para; %content.para; >
+&lt;!ELEMENT container ANY></eg></p>
+
+<div3 id='sec-element-content'>
+<head>Element Content</head>
+
+<p><termdef id='dt-elemcontent' term='Element content'>An element <termref
+def="dt-stag">type</termref> has
+<term>element content</term> when elements of that
+type must contain only <termref def='dt-parentchild'>child</termref>
+elements (no character data), optionally separated by
+white space (characters matching the nonterminal
+<nt def='NT-S'>S</nt>).
+</termdef>
+In this case, the
+constraint includes a content model, a simple grammar governing
+the allowed types of the child
+elements and the order in which they are allowed to appear.
+The grammar is built on
+content particles (<nt def='NT-cp'>cp</nt>s), which consist of names,
+choice lists of content particles, or
+sequence lists of content particles:
+<scrap lang='ebnf'>
+<head>Element-content Models</head>
+<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
+<prod id='NT-children'><lhs>children</lhs>
+<rhs>(<nt def='NT-choice'>choice</nt>
+| <nt def='NT-seq'>seq</nt>)
+('?' | '*' | '+')?</rhs></prod>
+<prod id='NT-cp'><lhs>cp</lhs>
+<rhs>(<nt def='NT-Name'>Name</nt>
+| <nt def='NT-choice'>choice</nt>
+| <nt def='NT-seq'>seq</nt>)
+('?' | '*' | '+')?</rhs></prod>
+<prod id='NT-choice'><lhs>choice</lhs>
+<rhs>'(' <nt def='NT-S'>S</nt>? cp
+( <nt def='NT-S'>S</nt>? '|' <nt def='NT-S'>S</nt>? <nt def='NT-cp'>cp</nt> )*
+<nt def='NT-S'>S</nt>? ')'</rhs>
+<vc def='vc-PEinGroup'/></prod>
+<prod id='NT-seq'><lhs>seq</lhs>
+<rhs>'(' <nt def='NT-S'>S</nt>? cp
+( <nt def='NT-S'>S</nt>? ',' <nt def='NT-S'>S</nt>? <nt def='NT-cp'>cp</nt> )*
+<nt def='NT-S'>S</nt>? ')'</rhs>
+<vc def='vc-PEinGroup'/></prod>
+
+</prodgroup>
+</scrap>
+where each <nt def='NT-Name'>Name</nt> is the type of an element which may
+appear as a <termref def="dt-parentchild">child</termref>.
+Any content
+particle in a choice list may appear in the <termref
+def="dt-elemcontent">element content</termref> at the location where
+the choice list appears in the grammar;
+content particles occurring in a sequence list must each
+appear in the <termref def="dt-elemcontent">element content</termref> in the
+order given in the list.
+The optional character following a name or list governs
+whether the element or the content particles in the list may occur one
+or more (<code>+</code>), zero or more (<code>*</code>), or zero or
+one times (<code>?</code>).
+The absence of such an operator means that the element or content particle
+must appear exactly once.
+This syntax
+and meaning are identical to those used in the productions in this
+specification.</p>
+<p>
+The content of an element matches a content model if and only if it is
+possible to trace out a path through the content model, obeying the
+sequence, choice, and repetition operators and matching each element in
+the content against an element type in the content model. <termref
+def='dt-compat'>For compatibility</termref>, it is an error
+if an element in the document can
+match more than one occurrence of an element type in the content model.
+For more information, see <specref ref="determinism"/>.
+<!-- appendix <specref ref="determinism"/>. -->
+<!-- appendix on deterministic content models. -->
+</p>
+<vcnote id='vc-PEinGroup'>
+<head>Proper Group/PE Nesting</head>
+<p>Parameter-entity
+<termref def='dt-repltext'>replacement text</termref> must be properly nested
+with parenthetized groups.
+That is to say, if either of the opening or closing parentheses
+in a <nt def='NT-choice'>choice</nt>, <nt def='NT-seq'>seq</nt>, or
+<nt def='NT-Mixed'>Mixed</nt> construct
+is contained in the replacement text for a
+<termref def='dt-PERef'>parameter entity</termref>,
+both must be contained in the same replacement text.</p>
+<p><termref def='dt-interop'>For interoperability</termref>,
+if a parameter-entity reference appears in a
+<nt def='NT-choice'>choice</nt>, <nt def='NT-seq'>seq</nt>, or
+<nt def='NT-Mixed'>Mixed</nt> construct, its replacement text
+should not be empty, and
+neither the first nor last non-blank
+character of the replacement text should be a connector
+(<code>|</code> or <code>,</code>).
+</p>
+</vcnote>
+<p>Examples of element-content models:
+<eg>&lt;!ELEMENT spec (front, body, back?)>
+&lt;!ELEMENT div1 (head, (p | list | note)*, div2*)>
+&lt;!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*></eg></p>
+</div3>
+
+<div3 id='sec-mixed-content'>
+<head>Mixed Content</head>
+
+<p><termdef id='dt-mixed' term='Mixed Content'>An element
+<termref def='dt-stag'>type</termref> has
+<term>mixed content</term> when elements of that type may contain
+character data, optionally interspersed with
+<termref def="dt-parentchild">child</termref> elements.</termdef>
+In this case, the types of the child elements
+may be constrained, but not their order or their number of occurrences:
+<scrap lang='ebnf'>
+<head>Mixed-content Declaration</head>
+<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
+<prod id='NT-Mixed'><lhs>Mixed</lhs>
+<rhs>'(' <nt def='NT-S'>S</nt>?
+'#PCDATA'
+(<nt def='NT-S'>S</nt>?
+'|'
+<nt def='NT-S'>S</nt>?
+<nt def='NT-Name'>Name</nt>)*
+<nt def='NT-S'>S</nt>?
+')*' </rhs>
+<rhs>| '(' <nt def='NT-S'>S</nt>? '#PCDATA' <nt def='NT-S'>S</nt>? ')'
+</rhs><vc def='vc-PEinGroup'/>
+<vc def='vc-MixedChildrenUnique'/>
+</prod>
+
+</prodgroup>
+</scrap>
+where the <nt def='NT-Name'>Name</nt>s give the types of elements
+that may appear as children.
+</p>
+<vcnote id='vc-MixedChildrenUnique'>
+<head>No Duplicate Types</head>
+<p>The same name must not appear more than once in a single mixed-content
+declaration.
+</p></vcnote>
+<p>Examples of mixed content declarations:
+<eg>&lt;!ELEMENT p (#PCDATA|a|ul|b|i|em)*>
+&lt;!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* >
+&lt;!ELEMENT b (#PCDATA)></eg></p>
+</div3>
+</div2>
+
+<div2 id='attdecls'>
+<head>Attribute-List Declarations</head>
+
+<p><termref def="dt-attr">Attributes</termref> are used to associate
+name-value pairs with <termref def="dt-element">elements</termref>.
+Attribute specifications may appear only within <termref
+def="dt-stag">start-tags</termref>
+and <termref def="dt-eetag">empty-element tags</termref>;
+thus, the productions used to
+recognize them appear in <specref ref='sec-starttags'/>.
+Attribute-list
+declarations may be used:
+<ulist>
+<item><p>To define the set of attributes pertaining to a given
+element type.</p></item>
+<item><p>To establish type constraints for these
+attributes.</p></item>
+<item><p>To provide <termref def="dt-default">default values</termref>
+for attributes.</p></item>
+</ulist>
+</p>
+<p><termdef id="dt-attdecl" term="Attribute-List Declaration">
+<term>Attribute-list declarations</term> specify the name, data type, and default
+value (if any) of each attribute associated with a given element type:
+<scrap lang='ebnf'>
+<head>Attribute-list Declaration</head>
+<prod id='NT-AttlistDecl'><lhs>AttlistDecl</lhs>
+<rhs>'&lt;!ATTLIST' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt>
+<nt def='NT-AttDef'>AttDef</nt>*
+<nt def='NT-S'>S</nt>? '&gt;'</rhs>
+</prod>
+<prod id='NT-AttDef'><lhs>AttDef</lhs>
+<rhs><nt def='NT-S'>S</nt> <nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt> <nt def='NT-AttType'>AttType</nt>
+<nt def='NT-S'>S</nt> <nt def='NT-DefaultDecl'>DefaultDecl</nt></rhs>
+</prod>
+</scrap>
+The <nt def="NT-Name">Name</nt> in the
+<nt def='NT-AttlistDecl'>AttlistDecl</nt> rule is the type of an element. At
+user option, an XML processor may issue a warning if attributes are
+declared for an element type not itself declared, but this is not an
+error. The <nt def='NT-Name'>Name</nt> in the
+<nt def='NT-AttDef'>AttDef</nt> rule is
+the name of the attribute.</termdef></p>
+<p>
+When more than one <nt def='NT-AttlistDecl'>AttlistDecl</nt> is provided for a
+given element type, the contents of all those provided are merged. When
+more than one definition is provided for the same attribute of a
+given element type, the first declaration is binding and later
+declarations are ignored.
+<termref def='dt-interop'>For interoperability,</termref> writers of DTDs
+may choose to provide at most one attribute-list declaration
+for a given element type, at most one attribute definition
+for a given attribute name, and at least one attribute definition
+in each attribute-list declaration.
+For interoperability, an XML processor may at user option
+issue a warning when more than one attribute-list declaration is
+provided for a given element type, or more than one attribute definition
+is provided
+for a given attribute, but this is not an error.
+</p>
+
+<div3 id='sec-attribute-types'>
+<head>Attribute Types</head>
+
+<p>XML attribute types are of three kinds: a string type, a
+set of tokenized types, and enumerated types. The string type may take
+any literal string as a value; the tokenized types have varying lexical
+and semantic constraints, as noted:
+<scrap lang='ebnf'>
+<head>Attribute Types</head>
+<prodgroup pcw4="14" pcw5="11.5">
+<prod id='NT-AttType'><lhs>AttType</lhs>
+<rhs><nt def='NT-StringType'>StringType</nt>
+| <nt def='NT-TokenizedType'>TokenizedType</nt>
+| <nt def='NT-EnumeratedType'>EnumeratedType</nt>
+</rhs>
+</prod>
+<prod id='NT-StringType'><lhs>StringType</lhs>
+<rhs>'CDATA'</rhs>
+</prod>
+<prod id='NT-TokenizedType'><lhs>TokenizedType</lhs>
+<rhs>'ID'</rhs>
+<vc def='id'/>
+<vc def='one-id-per-el'/>
+<vc def='id-default'/>
+<rhs>| 'IDREF'</rhs>
+<vc def='idref'/>
+<rhs>| 'IDREFS'</rhs>
+<vc def='idref'/>
+<rhs>| 'ENTITY'</rhs>
+<vc def='entname'/>
+<rhs>| 'ENTITIES'</rhs>
+<vc def='entname'/>
+<rhs>| 'NMTOKEN'</rhs>
+<vc def='nmtok'/>
+<rhs>| 'NMTOKENS'</rhs>
+<vc def='nmtok'/></prod>
+</prodgroup>
+</scrap>
+</p>
+<vcnote id='id' >
+<head>ID</head>
+<p>
+Values of type <kw>ID</kw> must match the
+<nt def='NT-Name'>Name</nt> production.
+A name must not appear more than once in
+an XML document as a value of this type; i.e., ID values must uniquely
+identify the elements which bear them.
+</p>
+</vcnote>
+<vcnote id='one-id-per-el'>
+<head>One ID per Element Type</head>
+<p>No element type may have more than one ID attribute specified.</p>
+</vcnote>
+<vcnote id='id-default'>
+<head>ID Attribute Default</head>
+<p>An ID attribute must have a declared default of <kw>#IMPLIED</kw> or
+<kw>#REQUIRED</kw>.</p>
+</vcnote>
+<vcnote id='idref'>
+<head>IDREF</head>
+<p>
+Values of type <kw>IDREF</kw> must match
+the <nt def="NT-Name">Name</nt> production, and
+values of type <kw>IDREFS</kw> must match
+<nt def="NT-Names">Names</nt>;
+each <nt def='NT-Name'>Name</nt> must match the value of an ID attribute on
+some element in the XML document; i.e. <kw>IDREF</kw> values must
+match the value of some ID attribute.
+</p>
+</vcnote>
+<vcnote id='entname'>
+<head>Entity Name</head>
+<p>
+Values of type <kw>ENTITY</kw>
+must match the <nt def="NT-Name">Name</nt> production,
+values of type <kw>ENTITIES</kw> must match
+<nt def="NT-Names">Names</nt>;
+each <nt def="NT-Name">Name</nt> must
+match the
+name of an <termref def="dt-unparsed">unparsed entity</termref> declared in the
+<termref def="dt-doctype">DTD</termref>.
+</p>
+</vcnote>
+<vcnote id='nmtok'>
+<head>Name Token</head>
+<p>
+Values of type <kw>NMTOKEN</kw> must match the
+<nt def="NT-Nmtoken">Nmtoken</nt> production;
+values of type <kw>NMTOKENS</kw> must
+match <termref def="NT-Nmtokens">Nmtokens</termref>.
+</p>
+</vcnote>
+<!-- why?
+<p>The XML processor must normalize attribute values before
+passing them to the application, as described in
+<specref ref="AVNormalize"/>.</p>-->
+<p><termdef id='dt-enumerated' term='Enumerated Attribute
+Values'><term>Enumerated attributes</term> can take one
+of a list of values provided in the declaration</termdef>. There are two
+kinds of enumerated types:
+<scrap lang='ebnf'>
+<head>Enumerated Attribute Types</head>
+<prod id='NT-EnumeratedType'><lhs>EnumeratedType</lhs>
+<rhs><nt def='NT-NotationType'>NotationType</nt>
+| <nt def='NT-Enumeration'>Enumeration</nt>
+</rhs></prod>
+<prod id='NT-NotationType'><lhs>NotationType</lhs>
+<rhs>'NOTATION'
+<nt def='NT-S'>S</nt>
+'('
+<nt def='NT-S'>S</nt>?
+<nt def='NT-Name'>Name</nt>
+(<nt def='NT-S'>S</nt>? '|' <nt def='NT-S'>S</nt>?
+<nt def='NT-Name'>Name</nt>)*
+<nt def='NT-S'>S</nt>? ')'
+</rhs>
+<vc def='notatn' /></prod>
+<prod id='NT-Enumeration'><lhs>Enumeration</lhs>
+<rhs>'(' <nt def='NT-S'>S</nt>?
+<nt def='NT-Nmtoken'>Nmtoken</nt>
+(<nt def='NT-S'>S</nt>? '|'
+<nt def='NT-S'>S</nt>?
+<nt def='NT-Nmtoken'>Nmtoken</nt>)*
+<nt def='NT-S'>S</nt>?
+')'</rhs>
+<vc def='enum'/></prod>
+</scrap>
+A <kw>NOTATION</kw> attribute identifies a
+<termref def='dt-notation'>notation</termref>, declared in the
+DTD with associated system and/or public identifiers, to
+be used in interpreting the element to which the attribute
+is attached.
+</p>
+
+<vcnote id='notatn'>
+<head>Notation Attributes</head>
+<p>
+Values of this type must match
+one of the <titleref href='Notations'>notation</titleref> names included in
+the declaration; all notation names in the declaration must
+be declared.
+</p>
+</vcnote>
+<vcnote id='enum'>
+<head>Enumeration</head>
+<p>
+Values of this type
+must match one of the <nt def='NT-Nmtoken'>Nmtoken</nt> tokens in the
+declaration.
+</p>
+</vcnote>
+<p><termref def='dt-interop'>For interoperability,</termref> the same
+<nt def='NT-Nmtoken'>Nmtoken</nt> should not occur more than once in the
+enumerated attribute types of a single element type.
+</p>
+</div3>
+
+<div3 id='sec-attr-defaults'>
+<head>Attribute Defaults</head>
+
+<p>An <termref def="dt-attdecl">attribute declaration</termref> provides
+information on whether
+the attribute's presence is required, and if not, how an XML processor should
+react if a declared attribute is absent in a document.
+<scrap lang='ebnf'>
+<head>Attribute Defaults</head>
+<prodgroup pcw4="14" pcw5="11.5">
+<prod id='NT-DefaultDecl'><lhs>DefaultDecl</lhs>
+<rhs>'#REQUIRED'
+|&nbsp;'#IMPLIED' </rhs>
+<rhs>| (('#FIXED' S)? <nt def='NT-AttValue'>AttValue</nt>)</rhs>
+<vc def='RequiredAttr'/>
+<vc def='defattrvalid'/>
+<wfc def="CleanAttrVals"/>
+<vc def='FixedAttr'/>
+</prod>
+</prodgroup>
+</scrap>
+
+</p>
+<p>In an attribute declaration, <kw>#REQUIRED</kw> means that the
+attribute must always be provided, <kw>#IMPLIED</kw> that no default
+value is provided.
+<!-- not any more!!
+<kw>#IMPLIED</kw> means that if the attribute is omitted
+from an element of this type,
+the XML processor must inform the application
+that no value was specified; no constraint is placed on the behavior
+of the application. -->
+<termdef id="dt-default" term="Attribute Default">If the
+declaration
+is neither <kw>#REQUIRED</kw> nor <kw>#IMPLIED</kw>, then the
+<nt def='NT-AttValue'>AttValue</nt> value contains the declared
+<term>default</term> value; the <kw>#FIXED</kw> keyword states that
+the attribute must always have the default value.
+If a default value
+is declared, when an XML processor encounters an omitted attribute, it
+is to behave as though the attribute were present with
+the declared default value.</termdef></p>
+<vcnote id='RequiredAttr'>
+<head>Required Attribute</head>
+<p>If the default declaration is the keyword <kw>#REQUIRED</kw>, then
+the attribute must be specified for
+all elements of the type in the attribute-list declaration.
+</p></vcnote>
+<vcnote id='defattrvalid'>
+<head>Attribute Default Legal</head>
+<p>
+The declared
+default value must meet the lexical constraints of the declared attribute type.
+</p>
+</vcnote>
+<vcnote id='FixedAttr'>
+<head>Fixed Attribute Default</head>
+<p>If an attribute has a default value declared with the
+<kw>#FIXED</kw> keyword, instances of that attribute must
+match the default value.
+</p></vcnote>
+
+<p>Examples of attribute-list declarations:
+<eg>&lt;!ATTLIST termdef
+ id ID #REQUIRED
+ name CDATA #IMPLIED>
+&lt;!ATTLIST list
+ type (bullets|ordered|glossary) "ordered">
+&lt;!ATTLIST form
+ method CDATA #FIXED "POST"></eg></p>
+</div3>
+<div3 id='AVNormalize'>
+<head>Attribute-Value Normalization</head>
+<p>Before the value of an attribute is passed to the application
+or checked for validity, the
+XML processor must normalize it as follows:
+<ulist>
+<item><p>a character reference is processed by appending the referenced
+character to the attribute value</p></item>
+<item><p>an entity reference is processed by recursively processing the
+replacement text of the entity</p></item>
+<item><p>a whitespace character (#x20, #xD, #xA, #x9) is processed by
+appending #x20 to the normalized value, except that only a single #x20
+is appended for a "#xD#xA" sequence that is part of an external
+parsed entity or the literal entity value of an internal parsed
+entity</p></item>
+<item><p>other characters are processed by appending them to the normalized
+value</p>
+</item></ulist>
+</p>
+<p>If the declared value is not CDATA, then the XML processor must
+further process the normalized attribute value by discarding any
+leading and trailing space (#x20) characters, and by replacing
+sequences of space (#x20) characters by a single space (#x20)
+character.</p>
+<p>
+All attributes for which no declaration has been read should be treated
+by a non-validating parser as if declared
+<kw>CDATA</kw>.
+</p>
+</div3>
+</div2>
+<div2 id='sec-condition-sect'>
+<head>Conditional Sections</head>
+<p><termdef id='dt-cond-section' term='conditional section'>
+<term>Conditional sections</term> are portions of the
+<termref def='dt-doctype'>document type declaration external subset</termref>
+which are
+included in, or excluded from, the logical structure of the DTD based on
+the keyword which governs them.</termdef>
+<scrap lang='ebnf'>
+<head>Conditional Section</head>
+<prodgroup pcw2="9" pcw4="14.5">
+<prod id='NT-conditionalSect'><lhs>conditionalSect</lhs>
+<rhs><nt def='NT-includeSect'>includeSect</nt>
+| <nt def='NT-ignoreSect'>ignoreSect</nt>
+</rhs>
+</prod>
+<prod id='NT-includeSect'><lhs>includeSect</lhs>
+<rhs>'&lt;![' S? 'INCLUDE' S? '['
+
+<nt def="NT-extSubsetDecl">extSubsetDecl</nt>
+']]&gt;'
+</rhs>
+</prod>
+<prod id='NT-ignoreSect'><lhs>ignoreSect</lhs>
+<rhs>'&lt;![' S? 'IGNORE' S? '['
+<nt def="NT-ignoreSectContents">ignoreSectContents</nt>*
+']]&gt;'</rhs>
+</prod>
+
+<prod id='NT-ignoreSectContents'><lhs>ignoreSectContents</lhs>
+<rhs><nt def='NT-Ignore'>Ignore</nt>
+('&lt;![' <nt def='NT-ignoreSectContents'>ignoreSectContents</nt> ']]&gt;'
+<nt def='NT-Ignore'>Ignore</nt>)*</rhs></prod>
+<prod id='NT-Ignore'><lhs>Ignore</lhs>
+<rhs><nt def='NT-Char'>Char</nt>* -
+(<nt def='NT-Char'>Char</nt>* ('&lt;![' | ']]&gt;')
+<nt def='NT-Char'>Char</nt>*)
+</rhs></prod>
+
+</prodgroup>
+</scrap>
+</p>
+<p>Like the internal and external DTD subsets, a conditional section
+may contain one or more complete declarations,
+comments, processing instructions,
+or nested conditional sections, intermingled with white space.
+</p>
+<p>If the keyword of the
+conditional section is <kw>INCLUDE</kw>, then the contents of the conditional
+section are part of the DTD.
+If the keyword of the conditional
+section is <kw>IGNORE</kw>, then the contents of the conditional section are
+not logically part of the DTD.
+Note that for reliable parsing, the contents of even ignored
+conditional sections must be read in order to
+detect nested conditional sections and ensure that the end of the
+outermost (ignored) conditional section is properly detected.
+If a conditional section with a
+keyword of <kw>INCLUDE</kw> occurs within a larger conditional
+section with a keyword of <kw>IGNORE</kw>, both the outer and the
+inner conditional sections are ignored.</p>
+<p>If the keyword of the conditional section is a
+parameter-entity reference, the parameter entity must be replaced by its
+content before the processor decides whether to
+include or ignore the conditional section.</p>
+<p>An example:
+<eg>&lt;!ENTITY % draft 'INCLUDE' >
+&lt;!ENTITY % final 'IGNORE' >
+
+&lt;![%draft;[
+&lt;!ELEMENT book (comments*, title, body, supplements?)>
+]]&gt;
+&lt;![%final;[
+&lt;!ELEMENT book (title, body, supplements?)>
+]]&gt;
+</eg>
+</p>
+</div2>
+
+
+<!--
+<div2 id='sec-pass-to-app'>
+<head>XML Processor Treatment of Logical Structure</head>
+<p>When an XML processor encounters a start-tag, it must make
+at least the following information available to the application:
+<ulist>
+<item>
+<p>the element type's generic identifier</p>
+</item>
+<item>
+<p>the names of attributes known to apply to this element type
+(validating processors must make available names of all attributes
+declared for the element type; non-validating processors must
+make available at least the names of the attributes for which
+values are specified.
+</p>
+</item>
+</ulist>
+</p>
+</div2>
+-->
+
+</div1>
+<!-- &Entities; -->
+
+<div1 id='sec-physical-struct'>
+<head>Physical Structures</head>
+
+<p><termdef id="dt-entity" term="Entity">An XML document may consist
+of one or many storage units. These are called
+<term>entities</term>; they all have <term>content</term> and are all
+(except for the document entity, see below, and
+the <termref def='dt-doctype'>external DTD subset</termref>)
+identified by <term>name</term>.
+</termdef>
+Each XML document has one entity
+called the <termref def="dt-docent">document entity</termref>, which serves
+as the starting point for the <termref def="dt-xml-proc">XML
+processor</termref> and may contain the whole document.</p>
+<p>Entities may be either parsed or unparsed.
+<termdef id="dt-parsedent" term="Text Entity">A <term>parsed entity's</term>
+contents are referred to as its
+<termref def='dt-repltext'>replacement text</termref>;
+this <termref def="dt-text">text</termref> is considered an
+integral part of the document.</termdef></p>
+
+<p><termdef id="dt-unparsed" term="Unparsed Entity">An
+<term>unparsed entity</term>
+is a resource whose contents may or may not be
+<termref def='dt-text'>text</termref>, and if text, may not be XML.
+Each unparsed entity
+has an associated <termref
+def="dt-notation">notation</termref>, identified by name.
+Beyond a requirement
+that an XML processor make the identifiers for the entity and
+notation available to the application,
+XML places no constraints on the contents of unparsed entities.</termdef>
+</p>
+<p>
+Parsed entities are invoked by name using entity references;
+unparsed entities by name, given in the value of <kw>ENTITY</kw>
+or <kw>ENTITIES</kw>
+attributes.</p>
+<p><termdef id='gen-entity' term='general entity'
+><term>General entities</term>
+are entities for use within the document content.
+In this specification, general entities are sometimes referred
+to with the unqualified term <emph>entity</emph> when this leads
+to no ambiguity.</termdef>
+<termdef id='dt-PE' term='Parameter entity'>Parameter entities
+are parsed entities for use within the DTD.</termdef>
+These two types of entities use different forms of reference and
+are recognized in different contexts.
+Furthermore, they occupy different namespaces; a parameter entity and
+a general entity with the same name are two distinct entities.
+</p>
+
+<div2 id='sec-references'>
+<head>Character and Entity References</head>
+<p><termdef id="dt-charref" term="Character Reference">
+A <term>character reference</term> refers to a specific character in the
+ISO/IEC 10646 character set, for example one not directly accessible from
+available input devices.
+<scrap lang='ebnf'>
+<head>Character Reference</head>
+<prod id='NT-CharRef'><lhs>CharRef</lhs>
+<rhs>'&amp;#' [0-9]+ ';' </rhs>
+<rhs>| '&hcro;' [0-9a-fA-F]+ ';'</rhs>
+<wfc def="wf-Legalchar"/>
+</prod>
+</scrap>
+<wfcnote id="wf-Legalchar">
+<head>Legal Character</head>
+<p>Characters referred to using character references must
+match the production for
+<termref def="NT-Char">Char</termref>.</p>
+</wfcnote>
+If the character reference begins with "<code>&amp;#x</code>", the digits and
+letters up to the terminating <code>;</code> provide a hexadecimal
+representation of the character's code point in ISO/IEC 10646.
+If it begins just with "<code>&amp;#</code>", the digits up to the terminating
+<code>;</code> provide a decimal representation of the character's
+code point.
+</termdef>
+</p>
+<p><termdef id="dt-entref" term="Entity Reference">An <term>entity
+reference</term> refers to the content of a named entity.</termdef>
+<termdef id='dt-GERef' term='General Entity Reference'>References to
+parsed general entities
+use ampersand (<code>&amp;</code>) and semicolon (<code>;</code>) as
+delimiters.</termdef>
+<termdef id='dt-PERef' term='Parameter-entity reference'>
+<term>Parameter-entity references</term> use percent-sign (<code>%</code>) and
+semicolon
+(<code>;</code>) as delimiters.</termdef>
+</p>
+<scrap lang="ebnf">
+<head>Entity Reference</head>
+<prod id='NT-Reference'><lhs>Reference</lhs>
+<rhs><nt def='NT-EntityRef'>EntityRef</nt>
+| <nt def='NT-CharRef'>CharRef</nt></rhs></prod>
+<prod id='NT-EntityRef'><lhs>EntityRef</lhs>
+<rhs>'&amp;' <nt def='NT-Name'>Name</nt> ';'</rhs>
+<wfc def='wf-entdeclared'/>
+<vc def='vc-entdeclared'/>
+<wfc def='textent'/>
+<wfc def='norecursion'/>
+</prod>
+<prod id='NT-PEReference'><lhs>PEReference</lhs>
+<rhs>'%' <nt def='NT-Name'>Name</nt> ';'</rhs>
+<vc def='vc-entdeclared'/>
+<wfc def='norecursion'/>
+<wfc def='indtd'/>
+</prod>
+</scrap>
+
+<wfcnote id='wf-entdeclared'>
+<head>Entity Declared</head>
+<p>In a document without any DTD, a document with only an internal
+DTD subset which contains no parameter entity references, or a document with
+"<code>standalone='yes'</code>",
+the <nt def='NT-Name'>Name</nt> given in the entity reference must
+<termref def="dt-match">match</termref> that in an
+<titleref href='sec-entity-decl'>entity declaration</titleref>, except that
+well-formed documents need not declare
+any of the following entities: &magicents;.
+The declaration of a parameter entity must precede any reference to it.
+Similarly, the declaration of a general entity must precede any
+reference to it which appears in a default value in an attribute-list
+declaration.</p>
+<p>Note that if entities are declared in the external subset or in
+external parameter entities, a non-validating processor is
+<titleref href='include-if-valid'>not obligated to</titleref> read
+and process their declarations; for such documents, the rule that
+an entity must be declared is a well-formedness constraint only
+if <titleref href='sec-rmd'>standalone='yes'</titleref>.</p>
+</wfcnote>
+<vcnote id="vc-entdeclared">
+<head>Entity Declared</head>
+<p>In a document with an external subset or external parameter
+entities with "<code>standalone='no'</code>",
+the <nt def='NT-Name'>Name</nt> given in the entity reference must <termref
+def="dt-match">match</termref> that in an
+<titleref href='sec-entity-decl'>entity declaration</titleref>.
+For interoperability, valid documents should declare the entities
+&magicents;, in the form
+specified in <specref ref="sec-predefined-ent"/>.
+The declaration of a parameter entity must precede any reference to it.
+Similarly, the declaration of a general entity must precede any
+reference to it which appears in a default value in an attribute-list
+declaration.</p>
+</vcnote>
+<!-- FINAL EDIT: is this duplication too clumsy? -->
+<wfcnote id='textent'>
+<head>Parsed Entity</head>
+<p>
+An entity reference must not contain the name of an <termref
+def="dt-unparsed">unparsed entity</termref>. Unparsed entities may be referred
+to only in <termref def="dt-attrval">attribute values</termref> declared to
+be of type <kw>ENTITY</kw> or <kw>ENTITIES</kw>.
+</p>
+</wfcnote>
+<wfcnote id='norecursion'>
+<head>No Recursion</head>
+<p>
+A parsed entity must not contain a recursive reference to itself,
+either directly or indirectly.
+</p>
+</wfcnote>
+<wfcnote id='indtd'>
+<head>In DTD</head>
+<p>
+Parameter-entity references may only appear in the
+<termref def='dt-doctype'>DTD</termref>.
+</p>
+</wfcnote>
+<p>Examples of character and entity references:
+<eg>Type &lt;key>less-than&lt;/key> (&hcro;3C;) to save options.
+This document was prepared on &amp;docdate; and
+is classified &amp;security-level;.</eg></p>
+<p>Example of a parameter-entity reference:
+<eg><![CDATA[<!-- declare the parameter entity "ISOLat2"... -->
+<!ENTITY % ISOLat2
+ SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
+<!-- ... now reference it. -->
+%ISOLat2;]]></eg></p>
+</div2>
+
+<div2 id='sec-entity-decl'>
+<head>Entity Declarations</head>
+
+<p><termdef id="dt-entdecl" term="entity declaration">
+Entities are declared thus:
+<scrap lang='ebnf'>
+<head>Entity Declaration</head>
+<prodgroup pcw2="5" pcw4="18.5">
+<prod id='NT-EntityDecl'><lhs>EntityDecl</lhs>
+<rhs><nt def="NT-GEDecl">GEDecl</nt><!--</rhs><com>General entities</com>
+<rhs>--> | <nt def="NT-PEDecl">PEDecl</nt></rhs>
+<!--<com>Parameter entities</com>-->
+</prod>
+<prod id='NT-GEDecl'><lhs>GEDecl</lhs>
+<rhs>'&lt;!ENTITY' <nt def='NT-S'>S</nt> <nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt> <nt def='NT-EntityDef'>EntityDef</nt>
+<nt def='NT-S'>S</nt>? '&gt;'</rhs>
+</prod>
+<prod id='NT-PEDecl'><lhs>PEDecl</lhs>
+<rhs>'&lt;!ENTITY' <nt def='NT-S'>S</nt> '%' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt> <nt def='NT-S'>S</nt>
+<nt def='NT-PEDef'>PEDef</nt> <nt def='NT-S'>S</nt>? '&gt;'</rhs>
+<!--<com>Parameter entities</com>-->
+</prod>
+<prod id='NT-EntityDef'><lhs>EntityDef</lhs>
+<rhs><nt def='NT-EntityValue'>EntityValue</nt>
+<!--</rhs>
+<rhs>-->| (<nt def='NT-ExternalID'>ExternalID</nt>
+<nt def='NT-NDataDecl'>NDataDecl</nt>?)</rhs>
+<!-- <nt def='NT-ExternalDef'>ExternalDef</nt></rhs> -->
+</prod>
+<!-- FINAL EDIT: what happened to WFs here? -->
+<prod id='NT-PEDef'><lhs>PEDef</lhs>
+<rhs><nt def='NT-EntityValue'>EntityValue</nt>
+| <nt def='NT-ExternalID'>ExternalID</nt></rhs></prod>
+</prodgroup>
+</scrap>
+The <nt def='NT-Name'>Name</nt> identifies the entity in an
+<termref def="dt-entref">entity reference</termref> or, in the case of an
+unparsed entity, in the value of an <kw>ENTITY</kw> or <kw>ENTITIES</kw>
+attribute.
+If the same entity is declared more than once, the first declaration
+encountered is binding; at user option, an XML processor may issue a
+warning if entities are declared multiple times.</termdef>
+</p>
+
+<div3 id='sec-internal-ent'>
+<head>Internal Entities</head>
+
+<p><termdef id='dt-internent' term="Internal Entity Replacement Text">If
+the entity definition is an
+<nt def='NT-EntityValue'>EntityValue</nt>,
+the defined entity is called an <term>internal entity</term>.
+There is no separate physical
+storage object, and the content of the entity is given in the
+declaration. </termdef>
+Note that some processing of entity and character references in the
+<termref def='dt-litentval'>literal entity value</termref> may be required to
+produce the correct <termref def='dt-repltext'>replacement
+text</termref>: see <specref ref='intern-replacement'/>.
+</p>
+<p>An internal entity is a <termref def="dt-parsedent">parsed
+entity</termref>.</p>
+<p>Example of an internal entity declaration:
+<eg>&lt;!ENTITY Pub-Status "This is a pre-release of the
+ specification."></eg></p>
+</div3>
+
+<div3 id='sec-external-ent'>
+<head>External Entities</head>
+
+<p><termdef id="dt-extent" term="External Entity">If the entity is not
+internal, it is an <term>external
+entity</term>, declared as follows:
+<scrap lang='ebnf'>
+<head>External Entity Declaration</head>
+<!--
+<prod id='NT-ExternalDef'><lhs>ExternalDef</lhs>
+<rhs></prod> -->
+<prod id='NT-ExternalID'><lhs>ExternalID</lhs>
+<rhs>'SYSTEM' <nt def='NT-S'>S</nt>
+<nt def='NT-SystemLiteral'>SystemLiteral</nt></rhs>
+<rhs>| 'PUBLIC' <nt def='NT-S'>S</nt>
+<nt def='NT-PubidLiteral'>PubidLiteral</nt>
+<nt def='NT-S'>S</nt>
+<nt def='NT-SystemLiteral'>SystemLiteral</nt>
+</rhs>
+</prod>
+<prod id='NT-NDataDecl'><lhs>NDataDecl</lhs>
+<rhs><nt def='NT-S'>S</nt> 'NDATA' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt></rhs>
+<vc def='not-declared'/></prod>
+</scrap>
+If the <nt def='NT-NDataDecl'>NDataDecl</nt> is present, this is a
+general <termref def="dt-unparsed">unparsed
+entity</termref>; otherwise it is a parsed entity.</termdef></p>
+<vcnote id='not-declared'>
+<head>Notation Declared</head>
+<p>
+The <nt def='NT-Name'>Name</nt> must match the declared name of a
+<termref def="dt-notation">notation</termref>.
+</p>
+</vcnote>
+<p><termdef id="dt-sysid" term="System Identifier">The
+<nt def='NT-SystemLiteral'>SystemLiteral</nt>
+is called the entity's <term>system identifier</term>. It is a URI,
+which may be used to retrieve the entity.</termdef>
+Note that the hash mark (<code>#</code>) and fragment identifier
+frequently used with URIs are not, formally, part of the URI itself;
+an XML processor may signal an error if a fragment identifier is
+given as part of a system identifier.
+Unless otherwise provided by information outside the scope of this
+specification (e.g. a special XML element type defined by a particular
+DTD, or a processing instruction defined by a particular application
+specification), relative URIs are relative to the location of the
+resource within which the entity declaration occurs.
+A URI might thus be relative to the
+<termref def='dt-docent'>document entity</termref>, to the entity
+containing the <termref def='dt-doctype'>external DTD subset</termref>,
+or to some other <termref def='dt-extent'>external parameter entity</termref>.
+</p>
+<p>An XML processor should handle a non-ASCII character in a URI by
+representing the character in UTF-8 as one or more bytes, and then
+escaping these bytes with the URI escaping mechanism (i.e., by
+converting each byte to %HH, where HH is the hexadecimal notation of the
+byte value).</p>
+<p><termdef id="dt-pubid" term="Public identifier">
+In addition to a system identifier, an external identifier may
+include a <term>public identifier</term>.</termdef>
+An XML processor attempting to retrieve the entity's content may use the public
+identifier to try to generate an alternative URI. If the processor
+is unable to do so, it must use the URI specified in the system
+literal. Before a match is attempted, all strings
+of white space in the public identifier must be normalized to single space characters (#x20),
+and leading and trailing white space must be removed.</p>
+<p>Examples of external entity declarations:
+<eg>&lt;!ENTITY open-hatch
+ SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
+&lt;!ENTITY open-hatch
+ PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
+ "http://www.textuality.com/boilerplate/OpenHatch.xml">
+&lt;!ENTITY hatch-pic
+ SYSTEM "../grafix/OpenHatch.gif"
+ NDATA gif ></eg></p>
+</div3>
+
+</div2>
+
+<div2 id='TextEntities'>
+<head>Parsed Entities</head>
+<div3 id='sec-TextDecl'>
+<head>The Text Declaration</head>
+<p>External parsed entities may each begin with a <term>text
+declaration</term>.
+<scrap lang='ebnf'>
+<head>Text Declaration</head>
+<prodgroup pcw4="12.5" pcw5="13">
+<prod id='NT-TextDecl'><lhs>TextDecl</lhs>
+<rhs>&xmlpio;
+<nt def='NT-VersionInfo'>VersionInfo</nt>?
+<nt def='NT-EncodingDecl'>EncodingDecl</nt>
+<nt def='NT-S'>S</nt>? &pic;</rhs>
+</prod>
+</prodgroup>
+</scrap>
+</p>
+<p>The text declaration must be provided literally, not
+by reference to a parsed entity.
+No text declaration may appear at any position other than the beginning of
+an external parsed entity.</p>
+</div3>
+<div3 id='wf-entities'>
+<head>Well-Formed Parsed Entities</head>
+<p>The document entity is well-formed if it matches the production labeled
+<nt def='NT-document'>document</nt>.
+An external general
+parsed entity is well-formed if it matches the production labeled
+<nt def='NT-extParsedEnt'>extParsedEnt</nt>.
+An external parameter
+entity is well-formed if it matches the production labeled
+<nt def='NT-extPE'>extPE</nt>.
+<scrap lang='ebnf'>
+<head>Well-Formed External Parsed Entity</head>
+<prod id='NT-extParsedEnt'><lhs>extParsedEnt</lhs>
+<rhs><nt def='NT-TextDecl'>TextDecl</nt>?
+<nt def='NT-content'>content</nt></rhs>
+</prod>
+<prod id='NT-extPE'><lhs>extPE</lhs>
+<rhs><nt def='NT-TextDecl'>TextDecl</nt>?
+<nt def='NT-extSubsetDecl'>extSubsetDecl</nt></rhs>
+</prod>
+</scrap>
+An internal general parsed entity is well-formed if its replacement text
+matches the production labeled
+<nt def='NT-content'>content</nt>.
+All internal parameter entities are well-formed by definition.
+</p>
+<p>A consequence of well-formedness in entities is that the logical
+and physical structures in an XML document are properly nested; no
+<termref def='dt-stag'>start-tag</termref>,
+<termref def='dt-etag'>end-tag</termref>,
+<termref def="dt-empty">empty-element tag</termref>,
+<termref def='dt-element'>element</termref>,
+<termref def='dt-comment'>comment</termref>,
+<termref def='dt-pi'>processing instruction</termref>,
+<termref def='dt-charref'>character
+reference</termref>, or
+<termref def='dt-entref'>entity reference</termref>
+can begin in one entity and end in another.</p>
+</div3>
+<div3 id='charencoding'>
+<head>Character Encoding in Entities</head>
+
+<p>Each external parsed entity in an XML document may use a different
+encoding for its characters. All XML processors must be able to read
+entities in either UTF-8 or UTF-16.
+
+</p>
+<p>Entities encoded in UTF-16 must
+begin with the Byte Order Mark described by ISO/IEC 10646 Annex E and
+Unicode Appendix B (the ZERO WIDTH NO-BREAK SPACE character, #xFEFF).
+This is an encoding signature, not part of either the markup or the
+character data of the XML document.
+XML processors must be able to use this character to
+differentiate between UTF-8 and UTF-16 encoded documents.</p>
+<p>Although an XML processor is required to read only entities in
+the UTF-8 and UTF-16 encodings, it is recognized that other encodings are
+used around the world, and it may be desired for XML processors
+to read entities that use them.
+Parsed entities which are stored in an encoding other than
+UTF-8 or UTF-16 must begin with a <titleref href='TextDecl'>text
+declaration</titleref> containing an encoding declaration:
+<scrap lang='ebnf'>
+<head>Encoding Declaration</head>
+<prod id='NT-EncodingDecl'><lhs>EncodingDecl</lhs>
+<rhs><nt def="NT-S">S</nt>
+'encoding' <nt def='NT-Eq'>Eq</nt>
+('"' <nt def='NT-EncName'>EncName</nt> '"' |
+"'" <nt def='NT-EncName'>EncName</nt> "'" )
+</rhs>
+</prod>
+<prod id='NT-EncName'><lhs>EncName</lhs>
+<rhs>[A-Za-z] ([A-Za-z0-9._] | '-')*</rhs>
+<com>Encoding name contains only Latin characters</com>
+</prod>
+</scrap>
+In the <termref def='dt-docent'>document entity</termref>, the encoding
+declaration is part of the <termref def="dt-xmldecl">XML declaration</termref>.
+The <nt def="NT-EncName">EncName</nt> is the name of the encoding used.
+</p>
+<!-- FINAL EDIT: check name of IANA and charset names -->
+<p>In an encoding declaration, the values
+"<code>UTF-8</code>",
+"<code>UTF-16</code>",
+"<code>ISO-10646-UCS-2</code>", and
+"<code>ISO-10646-UCS-4</code>" should be
+used for the various encodings and transformations of Unicode /
+ISO/IEC 10646, the values
+"<code>ISO-8859-1</code>",
+"<code>ISO-8859-2</code>", ...
+"<code>ISO-8859-9</code>" should be used for the parts of ISO 8859, and
+the values
+"<code>ISO-2022-JP</code>",
+"<code>Shift_JIS</code>", and
+"<code>EUC-JP</code>"
+should be used for the various encoded forms of JIS X-0208-1997. XML
+processors may recognize other encodings; it is recommended that
+character encodings registered (as <emph>charset</emph>s)
+with the Internet Assigned Numbers
+Authority <bibref ref='IANA'/>, other than those just listed, should be
+referred to
+using their registered names.
+Note that these registered names are defined to be
+case-insensitive, so processors wishing to match against them
+should do so in a case-insensitive
+way.</p>
+<p>In the absence of information provided by an external
+transport protocol (e.g. HTTP or MIME),
+it is an <termref def="dt-error">error</termref> for an entity including
+an encoding declaration to be presented to the XML processor
+in an encoding other than that named in the declaration,
+for an encoding declaration to occur other than at the beginning
+of an external entity, or for
+an entity which begins with neither a Byte Order Mark nor an encoding
+declaration to use an encoding other than UTF-8.
+Note that since ASCII
+is a subset of UTF-8, ordinary ASCII entities do not strictly need
+an encoding declaration.</p>
+
+<p>It is a <termref def='dt-fatal'>fatal error</termref> when an XML processor
+encounters an entity with an encoding that it is unable to process.</p>
+<p>Examples of encoding declarations:
+<eg>&lt;?xml encoding='UTF-8'?>
+&lt;?xml encoding='EUC-JP'?></eg></p>
+</div3>
+</div2>
+<div2 id='entproc'>
+<head>XML Processor Treatment of Entities and References</head>
+<p>The table below summarizes the contexts in which character references,
+entity references, and invocations of unparsed entities might appear and the
+required behavior of an <termref def='dt-xml-proc'>XML processor</termref> in
+each case.
+The labels in the leftmost column describe the recognition context:
+<glist>
+<gitem><label>Reference in Content</label>
+<def><p>as a reference
+anywhere after the <termref def='dt-stag'>start-tag</termref> and
+before the <termref def='dt-etag'>end-tag</termref> of an element; corresponds
+to the nonterminal <nt def='NT-content'>content</nt>.</p></def>
+</gitem>
+<gitem>
+<label>Reference in Attribute Value</label>
+<def><p>as a reference within either the value of an attribute in a
+<termref def='dt-stag'>start-tag</termref>, or a default
+value in an <termref def='dt-attdecl'>attribute declaration</termref>;
+corresponds to the nonterminal
+<nt def='NT-AttValue'>AttValue</nt>.</p></def></gitem>
+<gitem>
+<label>Occurs as Attribute Value</label>
+<def><p>as a <nt def='NT-Name'>Name</nt>, not a reference, appearing either as
+the value of an
+attribute which has been declared as type <kw>ENTITY</kw>, or as one of
+the space-separated tokens in the value of an attribute which has been
+declared as type <kw>ENTITIES</kw>.</p>
+</def></gitem>
+<gitem><label>Reference in Entity Value</label>
+<def><p>as a reference
+within a parameter or internal entity's
+<termref def='dt-litentval'>literal entity value</termref> in
+the entity's declaration; corresponds to the nonterminal
+<nt def='NT-EntityValue'>EntityValue</nt>.</p></def></gitem>
+<gitem><label>Reference in DTD</label>
+<def><p>as a reference within either the internal or external subsets of the
+<termref def='dt-doctype'>DTD</termref>, but outside
+of an <nt def='NT-EntityValue'>EntityValue</nt> or
+<nt def="NT-AttValue">AttValue</nt>.</p></def>
+</gitem>
+</glist></p>
+<htable border='1' cellpadding='7' align='center'>
+<htbody>
+<tr><td bgcolor='&cellback;' rowspan='2' colspan='1'></td>
+<td bgcolor='&cellback;' align='center' valign='bottom' colspan='4'>Entity Type</td>
+<td bgcolor='&cellback;' rowspan='2' align='center'>Character</td>
+</tr>
+<tr align='center' valign='bottom'>
+<td bgcolor='&cellback;'>Parameter</td>
+<td bgcolor='&cellback;'>Internal
+General</td>
+<td bgcolor='&cellback;'>External Parsed
+General</td>
+<td bgcolor='&cellback;'>Unparsed</td>
+</tr>
+<tr align='center' valign='middle'>
+
+<td bgcolor='&cellback;' align='right'>Reference
+in Content</td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Not recognized</titleref></td>
+<td bgcolor='&cellback;'><titleref href='included'>Included</titleref></td>
+<td bgcolor='&cellback;'><titleref href='include-if-valid'>Included if validating</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='included'>Included</titleref></td>
+</tr>
+<tr align='center' valign='middle'>
+<td bgcolor='&cellback;' align='right'>Reference
+in Attribute Value</td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Not recognized</titleref></td>
+<td bgcolor='&cellback;'><titleref href='inliteral'>Included in literal</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='included'>Included</titleref></td>
+</tr>
+<tr align='center' valign='middle'>
+<td bgcolor='&cellback;' align='right'>Occurs as
+Attribute Value</td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Not recognized</titleref></td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='notify'>Notify</titleref></td>
+<td bgcolor='&cellback;'><titleref href='not recognized'>Not recognized</titleref></td>
+</tr>
+<tr align='center' valign='middle'>
+<td bgcolor='&cellback;' align='right'>Reference
+in EntityValue</td>
+<td bgcolor='&cellback;'><titleref href='inliteral'>Included in literal</titleref></td>
+<td bgcolor='&cellback;'><titleref href='bypass'>Bypassed</titleref></td>
+<td bgcolor='&cellback;'><titleref href='bypass'>Bypassed</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='included'>Included</titleref></td>
+</tr>
+<tr align='center' valign='middle'>
+<td bgcolor='&cellback;' align='right'>Reference
+in DTD</td>
+<td bgcolor='&cellback;'><titleref href='as-PE'>Included as PE</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+</tr>
+</htbody>
+</htable>
+<div3 id='not-recognized'>
+<head>Not Recognized</head>
+<p>Outside the DTD, the <code>%</code> character has no
+special significance; thus, what would be parameter entity references in the
+DTD are not recognized as markup in <nt def='NT-content'>content</nt>.
+Similarly, the names of unparsed entities are not recognized except
+when they appear in the value of an appropriately declared attribute.
+</p>
+</div3>
+<div3 id='included'>
+<head>Included</head>
+<p><termdef id="dt-include" term="Include">An entity is
+<term>included</term> when its
+<termref def='dt-repltext'>replacement text</termref> is retrieved
+and processed, in place of the reference itself,
+as though it were part of the document at the location the
+reference was recognized.
+The replacement text may contain both
+<termref def='dt-chardata'>character data</termref>
+and (except for parameter entities) <termref def="dt-markup">markup</termref>,
+which must be recognized in
+the usual way, except that the replacement text of entities used to escape
+markup delimiters (the entities &magicents;) is always treated as
+data. (The string "<code>AT&amp;amp;T;</code>" expands to
+"<code>AT&amp;T;</code>" and the remaining ampersand is not recognized
+as an entity-reference delimiter.)
+A character reference is <term>included</term> when the indicated
+character is processed in place of the reference itself.
+</termdef></p>
+</div3>
+<div3 id='include-if-valid'>
+<head>Included If Validating</head>
+<p>When an XML processor recognizes a reference to a parsed entity, in order
+to <termref def="dt-valid">validate</termref>
+the document, the processor must
+<termref def="dt-include">include</termref> its
+replacement text.
+If the entity is external, and the processor is not
+attempting to validate the XML document, the
+processor <termref def="dt-may">may</termref>, but need not,
+include the entity's replacement text.
+If a non-validating parser does not include the replacement text,
+it must inform the application that it recognized, but did not
+read, the entity.</p>
+<p>This rule is based on the recognition that the automatic inclusion
+provided by the SGML and XML entity mechanism, primarily designed
+to support modularity in authoring, is not necessarily
+appropriate for other applications, in particular document browsing.
+Browsers, for example, when encountering an external parsed entity reference,
+might choose to provide a visual indication of the entity's
+presence and retrieve it for display only on demand.
+</p>
+</div3>
+<div3 id='forbidden'>
+<head>Forbidden</head>
+<p>The following are forbidden, and constitute
+<termref def='dt-fatal'>fatal</termref> errors:
+<ulist>
+<item><p>the appearance of a reference to an
+<termref def='dt-unparsed'>unparsed entity</termref>.
+</p></item>
+<item><p>the appearance of any character or general-entity reference in the
+DTD except within an <nt def='NT-EntityValue'>EntityValue</nt> or
+<nt def="NT-AttValue">AttValue</nt>.</p></item>
+<item><p>a reference to an external entity in an attribute value.</p>
+</item>
+</ulist>
+</p>
+</div3>
+<div3 id='inliteral'>
+<head>Included in Literal</head>
+<p>When an <termref def='dt-entref'>entity reference</termref> appears in an
+attribute value, or a parameter entity reference appears in a literal entity
+value, its <termref def='dt-repltext'>replacement text</termref> is
+processed in place of the reference itself as though it
+were part of the document at the location the reference was recognized,
+except that a single or double quote character in the replacement text
+is always treated as a normal data character and will not terminate the
+literal.
+For example, this is well-formed:
+<eg><![CDATA[<!ENTITY % YN '"Yes"' >
+<!ENTITY WhatHeSaid "He said &YN;" >]]></eg>
+while this is not:
+<eg>&lt;!ENTITY EndAttr "27'" >
+&lt;element attribute='a-&amp;EndAttr;></eg>
+</p></div3>
+<div3 id='notify'>
+<head>Notify</head>
+<p>When the name of an <termref def='dt-unparsed'>unparsed
+entity</termref> appears as a token in the
+value of an attribute of declared type <kw>ENTITY</kw> or <kw>ENTITIES</kw>,
+a validating processor must inform the
+application of the <termref def='dt-sysid'>system</termref>
+and <termref def='dt-pubid'>public</termref> (if any)
+identifiers for both the entity and its associated
+<termref def="dt-notation">notation</termref>.</p>
+</div3>
+<div3 id='bypass'>
+<head>Bypassed</head>
+<p>When a general entity reference appears in the
+<nt def='NT-EntityValue'>EntityValue</nt> in an entity declaration,
+it is bypassed and left as is.</p>
+</div3>
+<div3 id='as-PE'>
+<head>Included as PE</head>
+<p>Just as with external parsed entities, parameter entities
+need only be <titleref href='include-if-valid'>included if
+validating</titleref>.
+When a parameter-entity reference is recognized in the DTD
+and included, its
+<termref def='dt-repltext'>replacement
+text</termref> is enlarged by the attachment of one leading and one following
+space (#x20) character; the intent is to constrain the replacement
+text of parameter
+entities to contain an integral number of grammatical tokens in the DTD.
+</p>
+</div3>
+
+</div2>
+<div2 id='intern-replacement'>
+<head>Construction of Internal Entity Replacement Text</head>
+<p>In discussing the treatment
+of internal entities, it is
+useful to distinguish two forms of the entity's value.
+<termdef id="dt-litentval" term='Literal Entity Value'>The <term>literal
+entity value</term> is the quoted string actually
+present in the entity declaration, corresponding to the
+non-terminal <nt def='NT-EntityValue'>EntityValue</nt>.</termdef>
+<termdef id='dt-repltext' term='Replacement Text'>The <term>replacement
+text</term> is the content of the entity, after
+replacement of character references and parameter-entity
+references.
+</termdef></p>
+
+<p>The literal entity value
+as given in an internal entity declaration
+(<nt def='NT-EntityValue'>EntityValue</nt>) may contain character,
+parameter-entity, and general-entity references.
+Such references must be contained entirely within the
+literal entity value.
+The actual replacement text that is
+<termref def='dt-include'>included</termref> as described above
+must contain the <emph>replacement text</emph> of any
+parameter entities referred to, and must contain the character
+referred to, in place of any character references in the
+literal entity value; however,
+general-entity references must be left as-is, unexpanded.
+For example, given the following declarations:
+
+<eg><![CDATA[<!ENTITY % pub "&#xc9;ditions Gallimard" >
+<!ENTITY rights "All rights reserved" >
+<!ENTITY book "La Peste: Albert Camus,
+&#xA9; 1947 %pub;. &rights;" >]]></eg>
+then the replacement text for the entity "<code>book</code>" is:
+<eg>La Peste: Albert Camus,
+&#169; 1947 &#201;ditions Gallimard. &amp;rights;</eg>
+The general-entity reference "<code>&amp;rights;</code>" would be expanded
+should the reference "<code>&amp;book;</code>" appear in the document's
+content or an attribute value.</p>
+<p>These simple rules may have complex interactions; for a detailed
+discussion of a difficult example, see
+<specref ref='sec-entexpand'/>.
+</p>
+
+</div2>
+<div2 id='sec-predefined-ent'>
+<head>Predefined Entities</head>
+<p><termdef id="dt-escape" term="escape">Entity and character
+references can both be used to <term>escape</term> the left angle bracket,
+ampersand, and other delimiters. A set of general entities
+(&magicents;) is specified for this purpose.
+Numeric character references may also be used; they are
+expanded immediately when recognized and must be treated as
+character data, so the numeric character references
+"<code>&amp;#60;</code>" and "<code>&amp;#38;</code>" may be used to
+escape <code>&lt;</code> and <code>&amp;</code> when they occur
+in character data.</termdef></p>
+<p>All XML processors must recognize these entities whether they
+are declared or not.
+<termref def='dt-interop'>For interoperability</termref>,
+valid XML documents should declare these
+entities, like any others, before using them.
+If the entities in question are declared, they must be declared
+as internal entities whose replacement text is the single
+character being escaped or a character reference to
+that character, as shown below.
+<eg><![CDATA[<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY amp "&#38;#38;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">
+]]></eg>
+Note that the <code>&lt;</code> and <code>&amp;</code> characters
+in the declarations of "<code>lt</code>" and "<code>amp</code>"
+are doubly escaped to meet the requirement that entity replacement
+be well-formed.
+</p>
+</div2>
+
+<div2 id='Notations'>
+<head>Notation Declarations</head>
+
+<p><termdef id="dt-notation" term="Notation"><term>Notations</term> identify by
+name the format of <termref def="dt-extent">unparsed
+entities</termref>, the
+format of elements which bear a notation attribute,
+or the application to which
+a <termref def="dt-pi">processing instruction</termref> is
+addressed.</termdef></p>
+<p><termdef id="dt-notdecl" term="Notation Declaration">
+<term>Notation declarations</term>
+provide a name for the notation, for use in
+entity and attribute-list declarations and in attribute specifications,
+and an external identifier for the notation which may allow an XML
+processor or its client application to locate a helper application
+capable of processing data in the given notation.
+<scrap lang='ebnf'>
+<head>Notation Declarations</head>
+<prod id='NT-NotationDecl'><lhs>NotationDecl</lhs>
+<rhs>'&lt;!NOTATION' <nt def='NT-S'>S</nt> <nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt>
+(<nt def='NT-ExternalID'>ExternalID</nt> |
+<nt def='NT-PublicID'>PublicID</nt>)
+<nt def='NT-S'>S</nt>? '>'</rhs></prod>
+<prod id='NT-PublicID'><lhs>PublicID</lhs>
+<rhs>'PUBLIC' <nt def='NT-S'>S</nt>
+<nt def='NT-PubidLiteral'>PubidLiteral</nt>
+</rhs></prod>
+</scrap>
+</termdef></p>
+<p>XML processors must provide applications with the name and external
+identifier(s) of any notation declared and referred to in an attribute
+value, attribute definition, or entity declaration. They may
+additionally resolve the external identifier into the
+<termref def="dt-sysid">system identifier</termref>,
+file name, or other information needed to allow the
+application to call a processor for data in the notation described. (It
+is not an error, however, for XML documents to declare and refer to
+notations for which notation-specific applications are not available on
+the system where the XML processor or application is running.)</p>
+</div2>
+
+
+<div2 id='sec-doc-entity'>
+<head>Document Entity</head>
+
+<p><termdef id="dt-docent" term="Document Entity">The <term>document
+entity</term> serves as the root of the entity
+tree and a starting-point for an <termref def="dt-xml-proc">XML
+processor</termref>.</termdef>
+This specification does
+not specify how the document entity is to be located by an XML
+processor; unlike other entities, the document entity has no name and might
+well appear on a processor input stream
+without any identification at all.</p>
+</div2>
+
+
+</div1>
+<!-- &Conformance; -->
+
+<div1 id='sec-conformance'>
+<head>Conformance</head>
+
+<div2 id='proc-types'>
+<head>Validating and Non-Validating Processors</head>
+<p>Conforming <termref def="dt-xml-proc">XML processors</termref> fall into two
+classes: validating and non-validating.</p>
+<p>Validating and non-validating processors alike must report
+violations of this specification's well-formedness constraints
+in the content of the
+<termref def='dt-docent'>document entity</termref> and any
+other <termref def='dt-parsedent'>parsed entities</termref> that
+they read.</p>
+<p><termdef id="dt-validating" term="Validating Processor">
+<term>Validating processors</term> must report
+violations of the constraints expressed by the declarations in the
+<termref def="dt-doctype">DTD</termref>, and
+failures to fulfill the validity constraints given
+in this specification.
+</termdef>
+To accomplish this, validating XML processors must read and process the entire
+DTD and all external parsed entities referenced in the document.
+</p>
+<p>Non-validating processors are required to check only the
+<termref def='dt-docent'>document entity</termref>, including
+the entire internal DTD subset, for well-formedness.
+<termdef id='dt-use-mdecl' term='Process Declarations'>
+While they are not required to check the document for validity,
+they are required to
+<term>process</term> all the declarations they read in the
+internal DTD subset and in any parameter entity that they
+read, up to the first reference
+to a parameter entity that they do <emph>not</emph> read; that is to
+say, they must
+use the information in those declarations to
+<titleref href='AVNormalize'>normalize</titleref> attribute values,
+<titleref href='included'>include</titleref> the replacement text of
+internal entities, and supply
+<titleref href='sec-attr-defaults'>default attribute values</titleref>.
+</termdef>
+They must not <termref def='dt-use-mdecl'>process</termref>
+<termref def='dt-entdecl'>entity declarations</termref> or
+<termref def='dt-attdecl'>attribute-list declarations</termref>
+encountered after a reference to a parameter entity that is not
+read, since the entity may have contained overriding declarations.
+</p>
+</div2>
+<div2 id='safe-behavior'>
+<head>Using XML Processors</head>
+<p>The behavior of a validating XML processor is highly predictable; it
+must read every piece of a document and report all well-formedness and
+validity violations.
+Less is required of a non-validating processor; it need not read any
+part of the document other than the document entity.
+This has two effects that may be important to users of XML processors:
+<ulist>
+<item><p>Certain well-formedness errors, specifically those that require
+reading external entities, may not be detected by a non-validating processor.
+Examples include the constraints entitled
+<titleref href='wf-entdeclared'>Entity Declared</titleref>,
+<titleref href='wf-textent'>Parsed Entity</titleref>, and
+<titleref href='wf-norecursion'>No Recursion</titleref>, as well
+as some of the cases described as
+<titleref href='forbidden'>forbidden</titleref> in
+<specref ref='entproc'/>.</p></item>
+<item><p>The information passed from the processor to the application may
+vary, depending on whether the processor reads
+parameter and external entities.
+For example, a non-validating processor may not
+<titleref href='AVNormalize'>normalize</titleref> attribute values,
+<titleref href='included'>include</titleref> the replacement text of
+internal entities, or supply
+<titleref href='sec-attr-defaults'>default attribute values</titleref>,
+where doing so depends on having read declarations in
+external or parameter entities.</p></item>
+</ulist>
+</p>
+<p>For maximum reliability in interoperating between different XML
+processors, applications which use non-validating processors should not
+rely on any behaviors not required of such processors.
+Applications which require facilities such as the use of default
+attributes or internal entities which are declared in external
+entities should use validating XML processors.</p>
+</div2>
+</div1>
+
+<div1 id='sec-notation'>
+<head>Notation</head>
+
+<p>The formal grammar of XML is given in this specification using a simple
+Extended Backus-Naur Form (EBNF) notation. Each rule in the grammar defines
+one symbol, in the form
+<eg>symbol ::= expression</eg></p>
+<p>Symbols are written with an initial capital letter if they are
+defined by a regular expression, or with an initial lower case letter
+otherwise.
+Literal strings are quoted.
+
+</p>
+
+<p>Within the expression on the right-hand side of a rule, the following
+expressions are used to match strings of one or more characters:
+<glist>
+<gitem>
+<label><code>#xN</code></label>
+<def><p>where <code>N</code> is a hexadecimal integer, the
+expression matches the character in ISO/IEC 10646 whose canonical
+(UCS-4)
+code value, when interpreted as an unsigned binary number, has
+the value indicated. The number of leading zeros in the
+<code>#xN</code> form is insignificant; the number of leading
+zeros in the corresponding code value
+is governed by the character
+encoding in use and is not significant for XML.</p></def>
+</gitem>
+<gitem>
+<label><code>[a-zA-Z]</code>, <code>[#xN-#xN]</code></label>
+<def><p>matches any <termref def='dt-character'>character</termref>
+with a value in the range(s) indicated (inclusive).</p></def>
+</gitem>
+<gitem>
+<label><code>[^a-z]</code>, <code>[^#xN-#xN]</code></label>
+<def><p>matches any <termref def='dt-character'>character</termref>
+with a value <emph>outside</emph> the
+range indicated.</p></def>
+</gitem>
+<gitem>
+<label><code>[^abc]</code>, <code>[^#xN#xN#xN]</code></label>
+<def><p>matches any <termref def='dt-character'>character</termref>
+with a value not among the characters given.</p></def>
+</gitem>
+<gitem>
+<label><code>"string"</code></label>
+<def><p>matches a literal string <termref def="dt-match">matching</termref>
+that given inside the double quotes.</p></def>
+</gitem>
+<gitem>
+<label><code>'string'</code></label>
+<def><p>matches a literal string <termref def="dt-match">matching</termref>
+that given inside the single quotes.</p></def>
+</gitem>
+</glist>
+These symbols may be combined to match more complex patterns as follows,
+where <code>A</code> and <code>B</code> represent simple expressions:
+<glist>
+<gitem>
+<label>(<code>expression</code>)</label>
+<def><p><code>expression</code> is treated as a unit
+and may be combined as described in this list.</p></def>
+</gitem>
+<gitem>
+<label><code>A?</code></label>
+<def><p>matches <code>A</code> or nothing; optional <code>A</code>.</p></def>
+</gitem>
+<gitem>
+<label><code>A B</code></label>
+<def><p>matches <code>A</code> followed by <code>B</code>.</p></def>
+</gitem>
+<gitem>
+<label><code>A | B</code></label>
+<def><p>matches <code>A</code> or <code>B</code> but not both.</p></def>
+</gitem>
+<gitem>
+<label><code>A - B</code></label>
+<def><p>matches any string that matches <code>A</code> but does not match
+<code>B</code>.
+</p></def>
+</gitem>
+<gitem>
+<label><code>A+</code></label>
+<def><p>matches one or more occurrences of <code>A</code>.</p></def>
+</gitem>
+<gitem>
+<label><code>A*</code></label>
+<def><p>matches zero or more occurrences of <code>A</code>.</p></def>
+</gitem>
+
+</glist>
+Other notations used in the productions are:
+<glist>
+<gitem>
+<label><code>/* ... */</code></label>
+<def><p>comment.</p></def>
+</gitem>
+<gitem>
+<label><code>[ wfc: ... ]</code></label>
+<def><p>well-formedness constraint; this identifies by name a
+constraint on
+<termref def="dt-wellformed">well-formed</termref> documents
+associated with a production.</p></def>
+</gitem>
+<gitem>
+<label><code>[ vc: ... ]</code></label>
+<def><p>validity constraint; this identifies by name a constraint on
+<termref def="dt-valid">valid</termref> documents associated with
+a production.</p></def>
+</gitem>
+</glist>
+</p></div1>
+
+</body>
+<back>
+<!-- &SGML; -->
+
+
+<!-- &Biblio; -->
+<div1 id='sec-bibliography'>
+
+<head>References</head>
+<div2 id='sec-existing-stds'>
+<head>Normative References</head>
+
+<blist>
+<bibl id='IANA' key='IANA'>
+(Internet Assigned Numbers Authority) <emph>Official Names for
+Character Sets</emph>,
+ed. Keld Simonsen et al.
+See <loc href='ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets'>ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets</loc>.
+</bibl>
+
+<bibl id='RFC1766' key='IETF RFC 1766'>
+IETF (Internet Engineering Task Force).
+<emph>RFC 1766: Tags for the Identification of Languages</emph>,
+ed. H. Alvestrand.
+1995.
+</bibl>
+
+<bibl id='ISO639' key='ISO 639'>
+(International Organization for Standardization).
+<emph>ISO 639:1988 (E).
+Code for the representation of names of languages.</emph>
+[Geneva]: International Organization for
+Standardization, 1988.</bibl>
+
+<bibl id='ISO3166' key='ISO 3166'>
+(International Organization for Standardization).
+<emph>ISO 3166-1:1997 (E).
+Codes for the representation of names of countries and their subdivisions
+&mdash; Part 1: Country codes</emph>
+[Geneva]: International Organization for
+Standardization, 1997.</bibl>
+
+<bibl id='ISO10646' key='ISO/IEC 10646'>ISO
+(International Organization for Standardization).
+<emph>ISO/IEC 10646-1993 (E). Information technology &mdash; Universal
+Multiple-Octet Coded Character Set (UCS) &mdash; Part 1:
+Architecture and Basic Multilingual Plane.</emph>
+[Geneva]: International Organization for
+Standardization, 1993 (plus amendments AM 1 through AM 7).
+</bibl>
+
+<bibl id='Unicode' key='Unicode'>The Unicode Consortium.
+<emph>The Unicode Standard, Version 2.0.</emph>
+Reading, Mass.: Addison-Wesley Developers Press, 1996.</bibl>
+
+</blist>
+
+</div2>
+
+<div2><head>Other References</head>
+
+<blist>
+
+<bibl id='Aho' key='Aho/Ullman'>Aho, Alfred V.,
+Ravi Sethi, and Jeffrey D. Ullman.
+<emph>Compilers: Principles, Techniques, and Tools</emph>.
+Reading: Addison-Wesley, 1986, rpt. corr. 1988.</bibl>
+
+<bibl id="Berners-Lee" xml-link="simple" key="Berners-Lee et al.">
+Berners-Lee, T., R. Fielding, and L. Masinter.
+<emph>Uniform Resource Identifiers (URI): Generic Syntax and
+Semantics</emph>.
+1997.
+(Work in progress; see updates to RFC1738.)</bibl>
+
+<bibl id='ABK' key='Brüggemann-Klein'>Brüggemann-Klein, Anne.
+<emph>Regular Expressions into Finite Automata</emph>.
+Extended abstract in I. Simon, Hrsg., LATIN 1992,
+S. 97-98. Springer-Verlag, Berlin 1992.
+Full Version in Theoretical Computer Science 120: 197-213, 1993.
+
+</bibl>
+
+<bibl id='ABKDW' key='Brüggemann-Klein and Wood'>Brüggemann-Klein, Anne,
+and Derick Wood.
+<emph>Deterministic Regular Languages</emph>.
+Universität Freiburg, Institut für Informatik,
+Bericht 38, Oktober 1991.
+</bibl>
+
+<bibl id='Clark' key='Clark'>James Clark.
+Comparison of SGML and XML. See
+<loc href='http://www.w3.org/TR/NOTE-sgml-xml-971215'>http://www.w3.org/TR/NOTE-sgml-xml-971215</loc>.
+</bibl>
+<bibl id="RFC1738" xml-link="simple" key="IETF RFC1738">
+IETF (Internet Engineering Task Force).
+<emph>RFC 1738: Uniform Resource Locators (URL)</emph>,
+ed. T. Berners-Lee, L. Masinter, M. McCahill.
+1994.
+</bibl>
+
+<bibl id="RFC1808" xml-link="simple" key="IETF RFC1808">
+IETF (Internet Engineering Task Force).
+<emph>RFC 1808: Relative Uniform Resource Locators</emph>,
+ed. R. Fielding.
+1995.
+</bibl>
+
+<bibl id="RFC2141" xml-link="simple" key="IETF RFC2141">
+IETF (Internet Engineering Task Force).
+<emph>RFC 2141: URN Syntax</emph>,
+ed. R. Moats.
+1997.
+</bibl>
+
+<bibl id='ISO8879' key='ISO 8879'>ISO
+(International Organization for Standardization).
+<emph>ISO 8879:1986(E). Information processing &mdash; Text and Office
+Systems &mdash; Standard Generalized Markup Language (SGML).</emph> First
+edition &mdash; 1986-10-15. [Geneva]: International Organization for
+Standardization, 1986.
+</bibl>
+
+
+<bibl id='ISO10744' key='ISO/IEC 10744'>ISO
+(International Organization for Standardization).
+<emph>ISO/IEC 10744-1992 (E). Information technology &mdash;
+Hypermedia/Time-based Structuring Language (HyTime).
+</emph>
+[Geneva]: International Organization for
+Standardization, 1992.
+<emph>Extended Facilities Annexe.</emph>
+[Geneva]: International Organization for
+Standardization, 1996.
+</bibl>
+
+
+
+</blist>
+</div2>
+</div1>
+<div1 id='CharClasses'>
+<head>Character Classes</head>
+<p>Following the characteristics defined in the Unicode standard,
+characters are classed as base characters (among others, these
+contain the alphabetic characters of the Latin alphabet, without
+diacritics), ideographic characters, and combining characters (among
+others, this class contains most diacritics); these classes combine
+to form the class of letters. Digits and extenders are
+also distinguished.
+<scrap lang="ebnf" id="CHARACTERS">
+<head>Characters</head>
+<prodgroup pcw3="3" pcw4="15">
+<prod id="NT-Letter"><lhs>Letter</lhs>
+<rhs><nt def="NT-BaseChar">BaseChar</nt>
+| <nt def="NT-Ideographic">Ideographic</nt></rhs> </prod>
+<prod id='NT-BaseChar'><lhs>BaseChar</lhs>
+<rhs>[#x0041-#x005A]
+|&nbsp;[#x0061-#x007A]
+|&nbsp;[#x00C0-#x00D6]
+|&nbsp;[#x00D8-#x00F6]
+|&nbsp;[#x00F8-#x00FF]
+|&nbsp;[#x0100-#x0131]
+|&nbsp;[#x0134-#x013E]
+|&nbsp;[#x0141-#x0148]
+|&nbsp;[#x014A-#x017E]
+|&nbsp;[#x0180-#x01C3]
+|&nbsp;[#x01CD-#x01F0]
+|&nbsp;[#x01F4-#x01F5]
+|&nbsp;[#x01FA-#x0217]
+|&nbsp;[#x0250-#x02A8]
+|&nbsp;[#x02BB-#x02C1]
+|&nbsp;#x0386
+|&nbsp;[#x0388-#x038A]
+|&nbsp;#x038C
+|&nbsp;[#x038E-#x03A1]
+|&nbsp;[#x03A3-#x03CE]
+|&nbsp;[#x03D0-#x03D6]
+|&nbsp;#x03DA
+|&nbsp;#x03DC
+|&nbsp;#x03DE
+|&nbsp;#x03E0
+|&nbsp;[#x03E2-#x03F3]
+|&nbsp;[#x0401-#x040C]
+|&nbsp;[#x040E-#x044F]
+|&nbsp;[#x0451-#x045C]
+|&nbsp;[#x045E-#x0481]
+|&nbsp;[#x0490-#x04C4]
+|&nbsp;[#x04C7-#x04C8]
+|&nbsp;[#x04CB-#x04CC]
+|&nbsp;[#x04D0-#x04EB]
+|&nbsp;[#x04EE-#x04F5]
+|&nbsp;[#x04F8-#x04F9]
+|&nbsp;[#x0531-#x0556]
+|&nbsp;#x0559
+|&nbsp;[#x0561-#x0586]
+|&nbsp;[#x05D0-#x05EA]
+|&nbsp;[#x05F0-#x05F2]
+|&nbsp;[#x0621-#x063A]
+|&nbsp;[#x0641-#x064A]
+|&nbsp;[#x0671-#x06B7]
+|&nbsp;[#x06BA-#x06BE]
+|&nbsp;[#x06C0-#x06CE]
+|&nbsp;[#x06D0-#x06D3]
+|&nbsp;#x06D5
+|&nbsp;[#x06E5-#x06E6]
+|&nbsp;[#x0905-#x0939]
+|&nbsp;#x093D
+|&nbsp;[#x0958-#x0961]
+|&nbsp;[#x0985-#x098C]
+|&nbsp;[#x098F-#x0990]
+|&nbsp;[#x0993-#x09A8]
+|&nbsp;[#x09AA-#x09B0]
+|&nbsp;#x09B2
+|&nbsp;[#x09B6-#x09B9]
+|&nbsp;[#x09DC-#x09DD]
+|&nbsp;[#x09DF-#x09E1]
+|&nbsp;[#x09F0-#x09F1]
+|&nbsp;[#x0A05-#x0A0A]
+|&nbsp;[#x0A0F-#x0A10]
+|&nbsp;[#x0A13-#x0A28]
+|&nbsp;[#x0A2A-#x0A30]
+|&nbsp;[#x0A32-#x0A33]
+|&nbsp;[#x0A35-#x0A36]
+|&nbsp;[#x0A38-#x0A39]
+|&nbsp;[#x0A59-#x0A5C]
+|&nbsp;#x0A5E
+|&nbsp;[#x0A72-#x0A74]
+|&nbsp;[#x0A85-#x0A8B]
+|&nbsp;#x0A8D
+|&nbsp;[#x0A8F-#x0A91]
+|&nbsp;[#x0A93-#x0AA8]
+|&nbsp;[#x0AAA-#x0AB0]
+|&nbsp;[#x0AB2-#x0AB3]
+|&nbsp;[#x0AB5-#x0AB9]
+|&nbsp;#x0ABD
+|&nbsp;#x0AE0
+|&nbsp;[#x0B05-#x0B0C]
+|&nbsp;[#x0B0F-#x0B10]
+|&nbsp;[#x0B13-#x0B28]
+|&nbsp;[#x0B2A-#x0B30]
+|&nbsp;[#x0B32-#x0B33]
+|&nbsp;[#x0B36-#x0B39]
+|&nbsp;#x0B3D
+|&nbsp;[#x0B5C-#x0B5D]
+|&nbsp;[#x0B5F-#x0B61]
+|&nbsp;[#x0B85-#x0B8A]
+|&nbsp;[#x0B8E-#x0B90]
+|&nbsp;[#x0B92-#x0B95]
+|&nbsp;[#x0B99-#x0B9A]
+|&nbsp;#x0B9C
+|&nbsp;[#x0B9E-#x0B9F]
+|&nbsp;[#x0BA3-#x0BA4]
+|&nbsp;[#x0BA8-#x0BAA]
+|&nbsp;[#x0BAE-#x0BB5]
+|&nbsp;[#x0BB7-#x0BB9]
+|&nbsp;[#x0C05-#x0C0C]
+|&nbsp;[#x0C0E-#x0C10]
+|&nbsp;[#x0C12-#x0C28]
+|&nbsp;[#x0C2A-#x0C33]
+|&nbsp;[#x0C35-#x0C39]
+|&nbsp;[#x0C60-#x0C61]
+|&nbsp;[#x0C85-#x0C8C]
+|&nbsp;[#x0C8E-#x0C90]
+|&nbsp;[#x0C92-#x0CA8]
+|&nbsp;[#x0CAA-#x0CB3]
+|&nbsp;[#x0CB5-#x0CB9]
+|&nbsp;#x0CDE
+|&nbsp;[#x0CE0-#x0CE1]
+|&nbsp;[#x0D05-#x0D0C]
+|&nbsp;[#x0D0E-#x0D10]
+|&nbsp;[#x0D12-#x0D28]
+|&nbsp;[#x0D2A-#x0D39]
+|&nbsp;[#x0D60-#x0D61]
+|&nbsp;[#x0E01-#x0E2E]
+|&nbsp;#x0E30
+|&nbsp;[#x0E32-#x0E33]
+|&nbsp;[#x0E40-#x0E45]
+|&nbsp;[#x0E81-#x0E82]
+|&nbsp;#x0E84
+|&nbsp;[#x0E87-#x0E88]
+|&nbsp;#x0E8A
+|&nbsp;#x0E8D
+|&nbsp;[#x0E94-#x0E97]
+|&nbsp;[#x0E99-#x0E9F]
+|&nbsp;[#x0EA1-#x0EA3]
+|&nbsp;#x0EA5
+|&nbsp;#x0EA7
+|&nbsp;[#x0EAA-#x0EAB]
+|&nbsp;[#x0EAD-#x0EAE]
+|&nbsp;#x0EB0
+|&nbsp;[#x0EB2-#x0EB3]
+|&nbsp;#x0EBD
+|&nbsp;[#x0EC0-#x0EC4]
+|&nbsp;[#x0F40-#x0F47]
+|&nbsp;[#x0F49-#x0F69]
+|&nbsp;[#x10A0-#x10C5]
+|&nbsp;[#x10D0-#x10F6]
+|&nbsp;#x1100
+|&nbsp;[#x1102-#x1103]
+|&nbsp;[#x1105-#x1107]
+|&nbsp;#x1109
+|&nbsp;[#x110B-#x110C]
+|&nbsp;[#x110E-#x1112]
+|&nbsp;#x113C
+|&nbsp;#x113E
+|&nbsp;#x1140
+|&nbsp;#x114C
+|&nbsp;#x114E
+|&nbsp;#x1150
+|&nbsp;[#x1154-#x1155]
+|&nbsp;#x1159
+|&nbsp;[#x115F-#x1161]
+|&nbsp;#x1163
+|&nbsp;#x1165
+|&nbsp;#x1167
+|&nbsp;#x1169
+|&nbsp;[#x116D-#x116E]
+|&nbsp;[#x1172-#x1173]
+|&nbsp;#x1175
+|&nbsp;#x119E
+|&nbsp;#x11A8
+|&nbsp;#x11AB
+|&nbsp;[#x11AE-#x11AF]
+|&nbsp;[#x11B7-#x11B8]
+|&nbsp;#x11BA
+|&nbsp;[#x11BC-#x11C2]
+|&nbsp;#x11EB
+|&nbsp;#x11F0
+|&nbsp;#x11F9
+|&nbsp;[#x1E00-#x1E9B]
+|&nbsp;[#x1EA0-#x1EF9]
+|&nbsp;[#x1F00-#x1F15]
+|&nbsp;[#x1F18-#x1F1D]
+|&nbsp;[#x1F20-#x1F45]
+|&nbsp;[#x1F48-#x1F4D]
+|&nbsp;[#x1F50-#x1F57]
+|&nbsp;#x1F59
+|&nbsp;#x1F5B
+|&nbsp;#x1F5D
+|&nbsp;[#x1F5F-#x1F7D]
+|&nbsp;[#x1F80-#x1FB4]
+|&nbsp;[#x1FB6-#x1FBC]
+|&nbsp;#x1FBE
+|&nbsp;[#x1FC2-#x1FC4]
+|&nbsp;[#x1FC6-#x1FCC]
+|&nbsp;[#x1FD0-#x1FD3]
+|&nbsp;[#x1FD6-#x1FDB]
+|&nbsp;[#x1FE0-#x1FEC]
+|&nbsp;[#x1FF2-#x1FF4]
+|&nbsp;[#x1FF6-#x1FFC]
+|&nbsp;#x2126
+|&nbsp;[#x212A-#x212B]
+|&nbsp;#x212E
+|&nbsp;[#x2180-#x2182]
+|&nbsp;[#x3041-#x3094]
+|&nbsp;[#x30A1-#x30FA]
+|&nbsp;[#x3105-#x312C]
+|&nbsp;[#xAC00-#xD7A3]
+</rhs></prod>
+<prod id='NT-Ideographic'><lhs>Ideographic</lhs>
+<rhs>[#x4E00-#x9FA5]
+|&nbsp;#x3007
+|&nbsp;[#x3021-#x3029]
+</rhs></prod>
+<prod id='NT-CombiningChar'><lhs>CombiningChar</lhs>
+<rhs>[#x0300-#x0345]
+|&nbsp;[#x0360-#x0361]
+|&nbsp;[#x0483-#x0486]
+|&nbsp;[#x0591-#x05A1]
+|&nbsp;[#x05A3-#x05B9]
+|&nbsp;[#x05BB-#x05BD]
+|&nbsp;#x05BF
+|&nbsp;[#x05C1-#x05C2]
+|&nbsp;#x05C4
+|&nbsp;[#x064B-#x0652]
+|&nbsp;#x0670
+|&nbsp;[#x06D6-#x06DC]
+|&nbsp;[#x06DD-#x06DF]
+|&nbsp;[#x06E0-#x06E4]
+|&nbsp;[#x06E7-#x06E8]
+|&nbsp;[#x06EA-#x06ED]
+|&nbsp;[#x0901-#x0903]
+|&nbsp;#x093C
+|&nbsp;[#x093E-#x094C]
+|&nbsp;#x094D
+|&nbsp;[#x0951-#x0954]
+|&nbsp;[#x0962-#x0963]
+|&nbsp;[#x0981-#x0983]
+|&nbsp;#x09BC
+|&nbsp;#x09BE
+|&nbsp;#x09BF
+|&nbsp;[#x09C0-#x09C4]
+|&nbsp;[#x09C7-#x09C8]
+|&nbsp;[#x09CB-#x09CD]
+|&nbsp;#x09D7
+|&nbsp;[#x09E2-#x09E3]
+|&nbsp;#x0A02
+|&nbsp;#x0A3C
+|&nbsp;#x0A3E
+|&nbsp;#x0A3F
+|&nbsp;[#x0A40-#x0A42]
+|&nbsp;[#x0A47-#x0A48]
+|&nbsp;[#x0A4B-#x0A4D]
+|&nbsp;[#x0A70-#x0A71]
+|&nbsp;[#x0A81-#x0A83]
+|&nbsp;#x0ABC
+|&nbsp;[#x0ABE-#x0AC5]
+|&nbsp;[#x0AC7-#x0AC9]
+|&nbsp;[#x0ACB-#x0ACD]
+|&nbsp;[#x0B01-#x0B03]
+|&nbsp;#x0B3C
+|&nbsp;[#x0B3E-#x0B43]
+|&nbsp;[#x0B47-#x0B48]
+|&nbsp;[#x0B4B-#x0B4D]
+|&nbsp;[#x0B56-#x0B57]
+|&nbsp;[#x0B82-#x0B83]
+|&nbsp;[#x0BBE-#x0BC2]
+|&nbsp;[#x0BC6-#x0BC8]
+|&nbsp;[#x0BCA-#x0BCD]
+|&nbsp;#x0BD7
+|&nbsp;[#x0C01-#x0C03]
+|&nbsp;[#x0C3E-#x0C44]
+|&nbsp;[#x0C46-#x0C48]
+|&nbsp;[#x0C4A-#x0C4D]
+|&nbsp;[#x0C55-#x0C56]
+|&nbsp;[#x0C82-#x0C83]
+|&nbsp;[#x0CBE-#x0CC4]
+|&nbsp;[#x0CC6-#x0CC8]
+|&nbsp;[#x0CCA-#x0CCD]
+|&nbsp;[#x0CD5-#x0CD6]
+|&nbsp;[#x0D02-#x0D03]
+|&nbsp;[#x0D3E-#x0D43]
+|&nbsp;[#x0D46-#x0D48]
+|&nbsp;[#x0D4A-#x0D4D]
+|&nbsp;#x0D57
+|&nbsp;#x0E31
+|&nbsp;[#x0E34-#x0E3A]
+|&nbsp;[#x0E47-#x0E4E]
+|&nbsp;#x0EB1
+|&nbsp;[#x0EB4-#x0EB9]
+|&nbsp;[#x0EBB-#x0EBC]
+|&nbsp;[#x0EC8-#x0ECD]
+|&nbsp;[#x0F18-#x0F19]
+|&nbsp;#x0F35
+|&nbsp;#x0F37
+|&nbsp;#x0F39
+|&nbsp;#x0F3E
+|&nbsp;#x0F3F
+|&nbsp;[#x0F71-#x0F84]
+|&nbsp;[#x0F86-#x0F8B]
+|&nbsp;[#x0F90-#x0F95]
+|&nbsp;#x0F97
+|&nbsp;[#x0F99-#x0FAD]
+|&nbsp;[#x0FB1-#x0FB7]
+|&nbsp;#x0FB9
+|&nbsp;[#x20D0-#x20DC]
+|&nbsp;#x20E1
+|&nbsp;[#x302A-#x302F]
+|&nbsp;#x3099
+|&nbsp;#x309A
+</rhs></prod>
+<prod id='NT-Digit'><lhs>Digit</lhs>
+<rhs>[#x0030-#x0039]
+|&nbsp;[#x0660-#x0669]
+|&nbsp;[#x06F0-#x06F9]
+|&nbsp;[#x0966-#x096F]
+|&nbsp;[#x09E6-#x09EF]
+|&nbsp;[#x0A66-#x0A6F]
+|&nbsp;[#x0AE6-#x0AEF]
+|&nbsp;[#x0B66-#x0B6F]
+|&nbsp;[#x0BE7-#x0BEF]
+|&nbsp;[#x0C66-#x0C6F]
+|&nbsp;[#x0CE6-#x0CEF]
+|&nbsp;[#x0D66-#x0D6F]
+|&nbsp;[#x0E50-#x0E59]
+|&nbsp;[#x0ED0-#x0ED9]
+|&nbsp;[#x0F20-#x0F29]
+</rhs></prod>
+<prod id='NT-Extender'><lhs>Extender</lhs>
+<rhs>#x00B7
+|&nbsp;#x02D0
+|&nbsp;#x02D1
+|&nbsp;#x0387
+|&nbsp;#x0640
+|&nbsp;#x0E46
+|&nbsp;#x0EC6
+|&nbsp;#x3005
+|&nbsp;[#x3031-#x3035]
+|&nbsp;[#x309D-#x309E]
+|&nbsp;[#x30FC-#x30FE]
+</rhs></prod>
+
+</prodgroup>
+</scrap>
+</p>
+<p>The character classes defined here can be derived from the
+Unicode character database as follows:
+<ulist>
+<item>
+<p>Name start characters must have one of the categories Ll, Lu,
+Lo, Lt, Nl.</p>
+</item>
+<item>
+<p>Name characters other than Name-start characters
+must have one of the categories Mc, Me, Mn, Lm, or Nd.</p>
+</item>
+<item>
+<p>Characters in the compatibility area (i.e. with character code
+greater than #xF900 and less than #xFFFE) are not allowed in XML
+names.</p>
+</item>
+<item>
+<p>Characters which have a font or compatibility decomposition (i.e. those
+with a "compatibility formatting tag" in field 5 of the database --
+marked by field 5 beginning with a "&lt;") are not allowed.</p>
+</item>
+<item>
+<p>The following characters are treated as name-start characters
+rather than name characters, because the property file classifies
+them as Alphabetic: [#x02BB-#x02C1], #x0559, #x06E5, #x06E6.</p>
+</item>
+<item>
+<p>Characters #x20DD-#x20E0 are excluded (in accordance with
+Unicode, section 5.14).</p>
+</item>
+<item>
+<p>Character #x00B7 is classified as an extender, because the
+property list so identifies it.</p>
+</item>
+<item>
+<p>Character #x0387 is added as a name character, because #x00B7
+is its canonical equivalent.</p>
+</item>
+<item>
+<p>Characters ':' and '_' are allowed as name-start characters.</p>
+</item>
+<item>
+<p>Characters '-' and '.' are allowed as name characters.</p>
+</item>
+</ulist>
+</p>
+</div1>
+<inform-div1 id="sec-xml-and-sgml">
+<head>XML and SGML</head>
+
+<p>XML is designed to be a subset of SGML, in that every
+<termref def="dt-valid">valid</termref> XML document should also be a
+conformant SGML document.
+For a detailed comparison of the additional restrictions that XML places on
+documents beyond those of SGML, see <bibref ref='Clark'/>.
+</p>
+</inform-div1>
+<inform-div1 id="sec-entexpand">
+<head>Expansion of Entity and Character References</head>
+<p>This appendix contains some examples illustrating the
+sequence of entity- and character-reference recognition and
+expansion, as specified in <specref ref='entproc'/>.</p>
+<p>
+If the DTD contains the declaration
+<eg><![CDATA[<!ENTITY example "<p>An ampersand (&#38;#38;) may be escaped
+numerically (&#38;#38;#38;) or with a general entity
+(&amp;amp;).</p>" >
+]]></eg>
+then the XML processor will recognize the character references
+when it parses the entity declaration, and resolve them before
+storing the following string as the
+value of the entity "<code>example</code>":
+<eg><![CDATA[<p>An ampersand (&#38;) may be escaped
+numerically (&#38;#38;) or with a general entity
+(&amp;amp;).</p>
+]]></eg>
+A reference in the document to "<code>&amp;example;</code>"
+will cause the text to be reparsed, at which time the
+start- and end-tags of the "<code>p</code>" element will be recognized
+and the three references will be recognized and expanded,
+resulting in a "<code>p</code>" element with the following content
+(all data, no delimiters or markup):
+<eg><![CDATA[An ampersand (&) may be escaped
+numerically (&#38;) or with a general entity
+(&amp;).
+]]></eg>
+</p>
+<p>A more complex example will illustrate the rules and their
+effects fully. In the following example, the line numbers are
+solely for reference.
+<eg><![CDATA[1 <?xml version='1.0'?>
+2 <!DOCTYPE test [
+3 <!ELEMENT test (#PCDATA) >
+4 <!ENTITY % xx '&#37;zz;'>
+5 <!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >' >
+6 %xx;
+7 ]>
+8 <test>This sample shows a &tricky; method.</test>
+]]></eg>
+This produces the following:
+<ulist spacing="compact">
+<item><p>in line 4, the reference to character 37 is expanded immediately,
+and the parameter entity "<code>xx</code>" is stored in the symbol
+table with the value "<code>%zz;</code>". Since the replacement text
+is not rescanned, the reference to parameter entity "<code>zz</code>"
+is not recognized. (And it would be an error if it were, since
+"<code>zz</code>" is not yet declared.)</p></item>
+<item><p>in line 5, the character reference "<code>&amp;#60;</code>" is
+expanded immediately and the parameter entity "<code>zz</code>" is
+stored with the replacement text
+"<code>&lt;!ENTITY tricky "error-prone" ></code>",
+which is a well-formed entity declaration.</p></item>
+<item><p>in line 6, the reference to "<code>xx</code>" is recognized,
+and the replacement text of "<code>xx</code>" (namely
+"<code>%zz;</code>") is parsed. The reference to "<code>zz</code>"
+is recognized in its turn, and its replacement text
+("<code>&lt;!ENTITY tricky "error-prone" ></code>") is parsed.
+The general entity "<code>tricky</code>" has now been
+declared, with the replacement text "<code>error-prone</code>".</p></item>
+<item><p>
+in line 8, the reference to the general entity "<code>tricky</code>" is
+recognized, and it is expanded, so the full content of the
+"<code>test</code>" element is the self-describing (and ungrammatical) string
+<emph>This sample shows a error-prone method.</emph>
+</p></item>
+</ulist>
+</p>
+</inform-div1>
+<inform-div1 id="determinism">
+<head>Deterministic Content Models</head>
+<p><termref def='dt-compat'>For compatibility</termref>, it is
+required
+that content models in element type declarations be deterministic.
+</p>
+<!-- FINAL EDIT: WebSGML allows ambiguity? -->
+<p>SGML
+requires deterministic content models (it calls them
+"unambiguous"); XML processors built using SGML systems may
+flag non-deterministic content models as errors.</p>
+<p>For example, the content model <code>((b, c) | (b, d))</code> is
+non-deterministic, because given an initial <code>b</code> the parser
+cannot know which <code>b</code> in the model is being matched without
+looking ahead to see which element follows the <code>b</code>.
+In this case, the two references to
+<code>b</code> can be collapsed
+into a single reference, making the model read
+<code>(b, (c | d))</code>. An initial <code>b</code> now clearly
+matches only a single name in the content model. The parser doesn't
+need to look ahead to see what follows; either <code>c</code> or
+<code>d</code> would be accepted.</p>
+<p>More formally: a finite state automaton may be constructed from the
+content model using the standard algorithms, e.g. algorithm 3.5
+in section 3.9
+of Aho, Sethi, and Ullman <bibref ref='Aho'/>.
+In many such algorithms, a follow set is constructed for each
+position in the regular expression (i.e., each leaf
+node in the
+syntax tree for the regular expression);
+if any position has a follow set in which
+more than one following position is
+labeled with the same element type name,
+then the content model is in error
+and may be reported as an error.
+</p>
+<p>Algorithms exist which allow many but not all non-deterministic
+content models to be reduced automatically to equivalent deterministic
+models; see Brüggemann-Klein 1991 <bibref ref='ABK'/>.</p>
+</inform-div1>
+<inform-div1 id="sec-guessing">
+<head>Autodetection of Character Encodings</head>
+<p>The XML encoding declaration functions as an internal label on each
+entity, indicating which character encoding is in use. Before an XML
+processor can read the internal label, however, it apparently has to
+know what character encoding is in use&mdash;which is what the internal label
+is trying to indicate. In the general case, this is a hopeless
+situation. It is not entirely hopeless in XML, however, because XML
+limits the general case in two ways: each implementation is assumed
+to support only a finite set of character encodings, and the XML
+encoding declaration is restricted in position and content in order to
+make it feasible to autodetect the character encoding in use in each
+entity in normal cases. Also, in many cases other sources of information
+are available in addition to the XML data stream itself.
+Two cases may be distinguished,
+depending on whether the XML entity is presented to the
+processor without, or with, any accompanying
+(external) information. We consider the first case first.
+</p>
+<p>
+Because each XML entity not in UTF-8 or UTF-16 format <emph>must</emph>
+begin with an XML encoding declaration, in which the first characters
+must be '<code>&lt;?xml</code>', any conforming processor can detect,
+after two to four octets of input, which of the following cases apply.
+In reading this list, it may help to know that in UCS-4, '&lt;' is
+"<code>#x0000003C</code>" and '?' is "<code>#x0000003F</code>", and the Byte
+Order Mark required of UTF-16 data streams is "<code>#xFEFF</code>".</p>
+<p>
+<ulist>
+<item>
+<p><code>00 00 00 3C</code>: UCS-4, big-endian machine (1234 order)</p>
+</item>
+<item>
+<p><code>3C 00 00 00</code>: UCS-4, little-endian machine (4321 order)</p>
+</item>
+<item>
+<p><code>00 00 3C 00</code>: UCS-4, unusual octet order (2143)</p>
+</item>
+<item>
+<p><code>00 3C 00 00</code>: UCS-4, unusual octet order (3412)</p>
+</item>
+<item>
+<p><code>FE FF</code>: UTF-16, big-endian</p>
+</item>
+<item>
+<p><code>FF FE</code>: UTF-16, little-endian</p>
+</item>
+<item>
+<p><code>00 3C 00 3F</code>: UTF-16, big-endian, no Byte Order Mark
+(and thus, strictly speaking, in error)</p>
+</item>
+<item>
+<p><code>3C 00 3F 00</code>: UTF-16, little-endian, no Byte Order Mark
+(and thus, strictly speaking, in error)</p>
+</item>
+<item>
+<p><code>3C 3F 78 6D</code>: UTF-8, ISO 646, ASCII, some part of ISO 8859,
+Shift-JIS, EUC, or any other 7-bit, 8-bit, or mixed-width encoding
+which ensures that the characters of ASCII have their normal positions,
+width,
+and values; the actual encoding declaration must be read to
+detect which of these applies, but since all of these encodings
+use the same bit patterns for the ASCII characters, the encoding
+declaration itself may be read reliably
+</p>
+</item>
+<item>
+<p><code>4C 6F A7 94</code>: EBCDIC (in some flavor; the full
+encoding declaration must be read to tell which code page is in
+use)</p>
+</item>
+<item>
+<p>other: UTF-8 without an encoding declaration, or else
+the data stream is corrupt, fragmentary, or enclosed in
+a wrapper of some kind</p>
+</item>
+</ulist>
+</p>
+<p>
+This level of autodetection is enough to read the XML encoding
+declaration and parse the character-encoding identifier, which is
+still necessary to distinguish the individual members of each family
+of encodings (e.g. to tell UTF-8 from 8859, and the parts of 8859
+from each other, or to distinguish the specific EBCDIC code page in
+use, and so on).
+</p>
+<p>
+Because the contents of the encoding declaration are restricted to
+ASCII characters, a processor can reliably read the entire encoding
+declaration as soon as it has detected which family of encodings is in
+use. Since in practice, all widely used character encodings fall into
+one of the categories above, the XML encoding declaration allows
+reasonably reliable in-band labeling of character encodings, even when
+external sources of information at the operating-system or
+transport-protocol level are unreliable.
+</p>
+<p>
+Once the processor has detected the character encoding in use, it can
+act appropriately, whether by invoking a separate input routine for
+each case, or by calling the proper conversion function on each
+character of input.
+</p>
+<p>
+Like any self-labeling system, the XML encoding declaration will not
+work if any software changes the entity's character set or encoding
+without updating the encoding declaration. Implementors of
+character-encoding routines should be careful to ensure the accuracy
+of the internal and external information used to label the entity.
+</p>
+<p>The second possible case occurs when the XML entity is accompanied
+by encoding information, as in some file systems and some network
+protocols.
+When multiple sources of information are available,
+
+their relative
+priority and the preferred method of handling conflict should be
+specified as part of the higher-level protocol used to deliver XML.
+Rules for the relative priority of the internal label and the
+MIME-type label in an external header, for example, should be part of the
+RFC document defining the text/xml and application/xml MIME types. In
+the interests of interoperability, however, the following rules
+are recommended.
+<ulist>
+<item><p>If an XML entity is in a file, the Byte-Order Mark
+and encoding-declaration PI are used (if present) to determine the
+character encoding. All other heuristics and sources of information
+are solely for error recovery.
+</p></item>
+<item><p>If an XML entity is delivered with a
+MIME type of text/xml, then the <code>charset</code> parameter
+on the MIME type determines the
+character encoding method; all other heuristics and sources of
+information are solely for error recovery.
+</p></item>
+<item><p>If an XML entity is delivered
+with a
+MIME type of application/xml, then the Byte-Order Mark and
+encoding-declaration PI are used (if present) to determine the
+character encoding. All other heuristics and sources of
+information are solely for error recovery.
+</p></item>
+</ulist>
+These rules apply only in the absence of protocol-level documentation;
+in particular, when the MIME types text/xml and application/xml are
+defined, the recommendations of the relevant RFC will supersede
+these rules.
+</p>
+
+</inform-div1>
+
+<inform-div1 id="sec-xml-wg">
+<head>W3C XML Working Group</head>
+
+<p>This specification was prepared and approved for publication by the
+W3C XML Working Group (WG). WG approval of this specification does
+not necessarily imply that all WG members voted for its approval.
+The current and former members of the XML WG are:</p>
+
+<orglist>
+<member><name>Jon Bosak, Sun</name><role>Chair</role></member>
+<member><name>James Clark</name><role>Technical Lead</role></member>
+<member><name>Tim Bray, Textuality and Netscape</name><role>XML Co-editor</role></member>
+<member><name>Jean Paoli, Microsoft</name><role>XML Co-editor</role></member>
+<member><name>C. M. Sperberg-McQueen, U. of Ill.</name><role>XML
+Co-editor</role></member>
+<member><name>Dan Connolly, W3C</name><role>W3C Liaison</role></member>
+<member><name>Paula Angerstein, Texcel</name></member>
+<member><name>Steve DeRose, INSO</name></member>
+<member><name>Dave Hollander, HP</name></member>
+<member><name>Eliot Kimber, ISOGEN</name></member>
+<member><name>Eve Maler, ArborText</name></member>
+<member><name>Tom Magliery, NCSA</name></member>
+<member><name>Murray Maloney, Muzmo and Grif</name></member>
+<member><name>Makoto Murata, Fuji Xerox Information Systems</name></member>
+<member><name>Joel Nava, Adobe</name></member>
+<member><name>Conleth O'Connell, Vignette</name></member>
+<member><name>Peter Sharpe, SoftQuad</name></member>
+<member><name>John Tigue, DataChannel</name></member>
+</orglist>
+
+</inform-div1>
+</back>
+</spec>
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-default-dtd-file:"~/sgml/spec.ced"
+sgml-omittag:t
+sgml-shorttag:t
+End:
+-->
diff --git a/test/relaxng/tutor11_2.rng b/test/relaxng/tutor11_2.rng
new file mode 100644
index 0000000..038ac48
--- /dev/null
+++ b/test/relaxng/tutor11_2.rng
@@ -0,0 +1,14 @@
+<element name="card" ns="http://www.example.com"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <nsName/>
+ <nsName ns=""/>
+ </except>
+ </anyName>
+ </attribute>
+ </zeroOrMore>
+ <text/>
+</element>
diff --git a/test/relaxng/tutor11_2_1.xml b/test/relaxng/tutor11_2_1.xml
new file mode 100644
index 0000000..2b84ebb
--- /dev/null
+++ b/test/relaxng/tutor11_2_1.xml
@@ -0,0 +1,5 @@
+<card xmlns="http://www.example.com"
+ xmlns:a="http://www.example.com/a" a:foo="works"
+ xmlns:b="http://www.example.com/b" b:foo="works">
+ This should work
+</card>
diff --git a/test/relaxng/tutor11_2_2.xml b/test/relaxng/tutor11_2_2.xml
new file mode 100644
index 0000000..b06b4e7
--- /dev/null
+++ b/test/relaxng/tutor11_2_2.xml
@@ -0,0 +1,5 @@
+<card xmlns="http://www.example.com"
+ xmlns:a="http://www.example.com/a" a:foo="works"
+ xmlns:b="http://www.example.com" b:foo="fails">
+ This should fail
+</card>
diff --git a/test/relaxng/tutor11_2_3.xml b/test/relaxng/tutor11_2_3.xml
new file mode 100644
index 0000000..c849c03
--- /dev/null
+++ b/test/relaxng/tutor11_2_3.xml
@@ -0,0 +1,5 @@
+<card xmlns="http://www.example.com"
+ xmlns:a="http://example.com/a" a:foo="works"
+ b="fails">
+ This should fail
+</card>
diff --git a/test/relaxng/tutor11_3.rng b/test/relaxng/tutor11_3.rng
new file mode 100644
index 0000000..72e041d
--- /dev/null
+++ b/test/relaxng/tutor11_3.rng
@@ -0,0 +1,15 @@
+<element name="example" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </zeroOrMore>
+ <optional>
+ <attribute name="xml:space">
+ <choice>
+ <value>default</value>
+ <value>preserve</value>
+ </choice>
+ </attribute>
+ </optional>
+</element>
diff --git a/test/relaxng/tutor11_3_1.xml b/test/relaxng/tutor11_3_1.xml
new file mode 100644
index 0000000..01b47fc
--- /dev/null
+++ b/test/relaxng/tutor11_3_1.xml
@@ -0,0 +1 @@
+<example foo="bar" xml:space="default"/>
diff --git a/test/relaxng/tutor11_4.rng b/test/relaxng/tutor11_4.rng
new file mode 100644
index 0000000..158c7a5
--- /dev/null
+++ b/test/relaxng/tutor11_4.rng
@@ -0,0 +1,19 @@
+<element name="example" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <name>xml:space</name>
+ </except>
+ </anyName>
+ </attribute>
+ </zeroOrMore>
+ <optional>
+ <attribute name="xml:space">
+ <choice>
+ <value>default</value>
+ <value>preserve</value>
+ </choice>
+ </attribute>
+ </optional>
+</element>
diff --git a/test/relaxng/tutor11_4_1.xml b/test/relaxng/tutor11_4_1.xml
new file mode 100644
index 0000000..01b47fc
--- /dev/null
+++ b/test/relaxng/tutor11_4_1.xml
@@ -0,0 +1 @@
+<example foo="bar" xml:space="default"/>
diff --git a/test/relaxng/tutor12_1.rng b/test/relaxng/tutor12_1.rng
new file mode 100644
index 0000000..3902687
--- /dev/null
+++ b/test/relaxng/tutor12_1.rng
@@ -0,0 +1,13 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://www.example.com/annotation">
+ <zeroOrMore>
+ <element name="card">
+ <a:documentation>Information about a single email address.</a:documentation>
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor12_1_1.xml b/test/relaxng/tutor12_1_1.xml
new file mode 100644
index 0000000..693df18
--- /dev/null
+++ b/test/relaxng/tutor12_1_1.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card><name>foo</name><email>bar</email></card>
+</addressBook>
diff --git a/test/relaxng/tutor13_1.rng b/test/relaxng/tutor13_1.rng
new file mode 100644
index 0000000..f945142
--- /dev/null
+++ b/test/relaxng/tutor13_1.rng
@@ -0,0 +1,33 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<start>
+ <element name="doc">
+ <zeroOrMore>
+ <choice>
+ <element name="p">
+ <ref name="inline"/>
+ </element>
+ <grammar>
+ <include href="table.rng">
+ <define name="cell.content">
+ <parentRef name="inline"/>
+ </define>
+ </include>
+ </grammar>
+ </choice>
+ </zeroOrMore>
+ </element>
+</start>
+
+<define name="inline">
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <element name="em">
+ <ref name="inline"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+</define>
+
+</grammar>
diff --git a/test/relaxng/tutor13_1_1.xml b/test/relaxng/tutor13_1_1.xml
new file mode 100644
index 0000000..a5cb437
--- /dev/null
+++ b/test/relaxng/tutor13_1_1.xml
@@ -0,0 +1,12 @@
+<doc>
+ <p>start</p>
+ <table>
+ <tr>
+ <td> <em>hello</em> !</td>
+ </tr>
+ <tr>
+ <td></td>
+ </tr>
+ </table>
+ <p>end</p>
+</doc>
diff --git a/test/relaxng/tutor14_1.rng b/test/relaxng/tutor14_1.rng
new file mode 100644
index 0000000..8744356
--- /dev/null
+++ b/test/relaxng/tutor14_1.rng
@@ -0,0 +1,53 @@
+<element name="html" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="head">
+ <element name="title">
+ <text/>
+ </element>
+ </element>
+ <element name="body">
+ <element name="table">
+ <attribute name="class">
+ <value>addressBook</value>
+ </attribute>
+ <oneOrMore>
+ <element name="tr">
+ <attribute name="class">
+ <value>card</value>
+ </attribute>
+ <element name="td">
+ <attribute name="class">
+ <value>name</value>
+ </attribute>
+ <interleave>
+ <text/>
+ <optional>
+ <element name="span">
+ <attribute name="class">
+ <value>givenName</value>
+ </attribute>
+ <text/>
+ </element>
+ </optional>
+ <optional>
+ <element name="span">
+ <attribute name="class">
+ <value>familyName</value>
+ </attribute>
+ <text/>
+ </element>
+ </optional>
+ </interleave>
+ </element>
+ <element name="td">
+ <attribute name="class">
+ <value>email</value>
+ </attribute>
+ <text/>
+ </element>
+ </element>
+ </oneOrMore>
+ </element>
+ </element>
+</element>
+
+
diff --git a/test/relaxng/tutor1_1.rng b/test/relaxng/tutor1_1.rng
new file mode 100644
index 0000000..86f8cd1
--- /dev/null
+++ b/test/relaxng/tutor1_1.rng
@@ -0,0 +1,12 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor1_1_1.xml b/test/relaxng/tutor1_1_1.xml
new file mode 100644
index 0000000..edac8ba
--- /dev/null
+++ b/test/relaxng/tutor1_1_1.xml
@@ -0,0 +1,10 @@
+<addressBook>
+ <card>
+ <name>John Smith</name>
+ <email>js@example.com</email>
+ </card>
+ <card>
+ <name>Fred Bloggs</name>
+ <email>fb@example.net</email>
+ </card>
+</addressBook>
diff --git a/test/relaxng/tutor1_2.rng b/test/relaxng/tutor1_2.rng
new file mode 100644
index 0000000..ed9cf7a
--- /dev/null
+++ b/test/relaxng/tutor1_2.rng
@@ -0,0 +1,12 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <oneOrMore>
+ <element name="card">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </element>
+ </oneOrMore>
+</element>
diff --git a/test/relaxng/tutor1_2_1.xml b/test/relaxng/tutor1_2_1.xml
new file mode 100644
index 0000000..edac8ba
--- /dev/null
+++ b/test/relaxng/tutor1_2_1.xml
@@ -0,0 +1,10 @@
+<addressBook>
+ <card>
+ <name>John Smith</name>
+ <email>js@example.com</email>
+ </card>
+ <card>
+ <name>Fred Bloggs</name>
+ <email>fb@example.net</email>
+ </card>
+</addressBook>
diff --git a/test/relaxng/tutor1_3.rng b/test/relaxng/tutor1_3.rng
new file mode 100644
index 0000000..23886d0
--- /dev/null
+++ b/test/relaxng/tutor1_3.rng
@@ -0,0 +1,17 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ <optional>
+ <element name="note">
+ <text/>
+ </element>
+ </optional>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor1_3_1.xml b/test/relaxng/tutor1_3_1.xml
new file mode 100644
index 0000000..edac8ba
--- /dev/null
+++ b/test/relaxng/tutor1_3_1.xml
@@ -0,0 +1,10 @@
+<addressBook>
+ <card>
+ <name>John Smith</name>
+ <email>js@example.com</email>
+ </card>
+ <card>
+ <name>Fred Bloggs</name>
+ <email>fb@example.net</email>
+ </card>
+</addressBook>
diff --git a/test/relaxng/tutor1_4.rng b/test/relaxng/tutor1_4.rng
new file mode 100644
index 0000000..5744fce
--- /dev/null
+++ b/test/relaxng/tutor1_4.rng
@@ -0,0 +1,12 @@
+<rng:element name="addressBook" xmlns:rng="http://relaxng.org/ns/structure/1.0">
+ <rng:zeroOrMore>
+ <rng:element name="card">
+ <rng:element name="name">
+ <rng:text/>
+ </rng:element>
+ <rng:element name="email">
+ <rng:text/>
+ </rng:element>
+ </rng:element>
+ </rng:zeroOrMore>
+</rng:element>
diff --git a/test/relaxng/tutor1_4_1.xml b/test/relaxng/tutor1_4_1.xml
new file mode 100644
index 0000000..edac8ba
--- /dev/null
+++ b/test/relaxng/tutor1_4_1.xml
@@ -0,0 +1,10 @@
+<addressBook>
+ <card>
+ <name>John Smith</name>
+ <email>js@example.com</email>
+ </card>
+ <card>
+ <name>Fred Bloggs</name>
+ <email>fb@example.net</email>
+ </card>
+</addressBook>
diff --git a/test/relaxng/tutor2_1.rng b/test/relaxng/tutor2_1.rng
new file mode 100644
index 0000000..76a3ce4
--- /dev/null
+++ b/test/relaxng/tutor2_1.rng
@@ -0,0 +1,27 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <choice>
+ <element name="name">
+ <text/>
+ </element>
+ <group>
+ <element name="givenName">
+ <text/>
+ </element>
+ <element name="familyName">
+ <text/>
+ </element>
+ </group>
+ </choice>
+ <element name="email">
+ <text/>
+ </element>
+ <optional>
+ <element name="note">
+ <text/>
+ </element>
+ </optional>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor2_1_1.xml b/test/relaxng/tutor2_1_1.xml
new file mode 100644
index 0000000..79b5584
--- /dev/null
+++ b/test/relaxng/tutor2_1_1.xml
@@ -0,0 +1,11 @@
+<addressBook>
+ <card>
+ <givenName>John</givenName>
+ <familyName>Smith</familyName>
+ <email>js@example.com</email>
+ </card>
+ <card>
+ <name>Fred Bloggs</name>
+ <email>fb@example.net</email>
+ </card>
+</addressBook>
diff --git a/test/relaxng/tutor3_1.rng b/test/relaxng/tutor3_1.rng
new file mode 100644
index 0000000..78d6736
--- /dev/null
+++ b/test/relaxng/tutor3_1.rng
@@ -0,0 +1,12 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <attribute name="name">
+ <text/>
+ </attribute>
+ <attribute name="email">
+ <text/>
+ </attribute>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor3_1_1.xml b/test/relaxng/tutor3_1_1.xml
new file mode 100644
index 0000000..f9849e6
--- /dev/null
+++ b/test/relaxng/tutor3_1_1.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card name="John Smith" email="js@example.com"/>
+</addressBook>
diff --git a/test/relaxng/tutor3_1_2.xml b/test/relaxng/tutor3_1_2.xml
new file mode 100644
index 0000000..e9a766f
--- /dev/null
+++ b/test/relaxng/tutor3_1_2.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card email="js@example.com" name="John Smith"/>
+</addressBook>
diff --git a/test/relaxng/tutor3_2.rng b/test/relaxng/tutor3_2.rng
new file mode 100644
index 0000000..eeb6fa4
--- /dev/null
+++ b/test/relaxng/tutor3_2.rng
@@ -0,0 +1,8 @@
+<element name="card" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+</element>
diff --git a/test/relaxng/tutor3_2_1.xml b/test/relaxng/tutor3_2_1.xml
new file mode 100644
index 0000000..73c2fa6
--- /dev/null
+++ b/test/relaxng/tutor3_2_1.xml
@@ -0,0 +1 @@
+<card><email>js@example.com</email><name>John Smith</name></card>
diff --git a/test/relaxng/tutor3_3.rng b/test/relaxng/tutor3_3.rng
new file mode 100644
index 0000000..66193e8
--- /dev/null
+++ b/test/relaxng/tutor3_3.rng
@@ -0,0 +1,17 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <attribute name="name">
+ <text/>
+ </attribute>
+ <attribute name="email">
+ <text/>
+ </attribute>
+ <optional>
+ <attribute name="note">
+ <text/>
+ </attribute>
+ </optional>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor3_3_1.xml b/test/relaxng/tutor3_3_1.xml
new file mode 100644
index 0000000..d9c9560
--- /dev/null
+++ b/test/relaxng/tutor3_3_1.xml
@@ -0,0 +1,4 @@
+<addressBook>
+ <card name="foo" email="bar"/>
+ <card name="foo2" note="second" email="bar2"/>
+</addressBook>
diff --git a/test/relaxng/tutor3_4.rng b/test/relaxng/tutor3_4.rng
new file mode 100644
index 0000000..9a63917
--- /dev/null
+++ b/test/relaxng/tutor3_4.rng
@@ -0,0 +1,22 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <choice>
+ <attribute name="name">
+ <text/>
+ </attribute>
+ <group>
+ <attribute name="givenName">
+ <text/>
+ </attribute>
+ <attribute name="familyName">
+ <text/>
+ </attribute>
+ </group>
+ </choice>
+ <attribute name="email">
+ <text/>
+ </attribute>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor3_4_1.xml b/test/relaxng/tutor3_4_1.xml
new file mode 100644
index 0000000..bb2a54b
--- /dev/null
+++ b/test/relaxng/tutor3_4_1.xml
@@ -0,0 +1,4 @@
+<addressBook>
+ <card name="foo" email="bar"/>
+ <card givenName="d" familyName="v" email="bar"/>
+</addressBook>
diff --git a/test/relaxng/tutor3_5.rng b/test/relaxng/tutor3_5.rng
new file mode 100644
index 0000000..829f219
--- /dev/null
+++ b/test/relaxng/tutor3_5.rng
@@ -0,0 +1,22 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <choice>
+ <element name="name">
+ <text/>
+ </element>
+ <attribute name="name">
+ <text/>
+ </attribute>
+ </choice>
+ <choice>
+ <element name="email">
+ <text/>
+ </element>
+ <attribute name="email">
+ <text/>
+ </attribute>
+ </choice>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor3_5_1.xml b/test/relaxng/tutor3_5_1.xml
new file mode 100644
index 0000000..a457220
--- /dev/null
+++ b/test/relaxng/tutor3_5_1.xml
@@ -0,0 +1,7 @@
+<addressBook>
+<card name="John Smith" email="js@example.com"/>
+<card email="js@example.com" name="John Smith"/>
+<card email="js@example.com"><name>John Smith</name></card>
+<card name="John Smith"><email>js@example.com</email></card>
+<card><name>John Smith</name><email>js@example.com</email></card>
+</addressBook>
diff --git a/test/relaxng/tutor3_5_2.xml b/test/relaxng/tutor3_5_2.xml
new file mode 100644
index 0000000..baa56dc
--- /dev/null
+++ b/test/relaxng/tutor3_5_2.xml
@@ -0,0 +1,3 @@
+<addressBook>
+<card><email>js@example.com</email><name>John Smith</name></card>
+</addressBook>
diff --git a/test/relaxng/tutor3_6.rng b/test/relaxng/tutor3_6.rng
new file mode 100644
index 0000000..1c8814a
--- /dev/null
+++ b/test/relaxng/tutor3_6.rng
@@ -0,0 +1,8 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <attribute name="email"/>
+ </element>
+ </zeroOrMore>
+</element>
+
diff --git a/test/relaxng/tutor3_6_1.xml b/test/relaxng/tutor3_6_1.xml
new file mode 100644
index 0000000..8081734
--- /dev/null
+++ b/test/relaxng/tutor3_6_1.xml
@@ -0,0 +1,3 @@
+<addressBook>
+<card email="js@example.com"/>
+</addressBook>
diff --git a/test/relaxng/tutor3_7.rng b/test/relaxng/tutor3_7.rng
new file mode 100644
index 0000000..84ff576
--- /dev/null
+++ b/test/relaxng/tutor3_7.rng
@@ -0,0 +1,2 @@
+<element name="x" xmlns="http://relaxng.org/ns/structure/1.0"/>
+
diff --git a/test/relaxng/tutor3_7_1.xml b/test/relaxng/tutor3_7_1.xml
new file mode 100644
index 0000000..61aa6d7
--- /dev/null
+++ b/test/relaxng/tutor3_7_1.xml
@@ -0,0 +1 @@
+<x/>
diff --git a/test/relaxng/tutor3_8.rng b/test/relaxng/tutor3_8.rng
new file mode 100644
index 0000000..1b780e6
--- /dev/null
+++ b/test/relaxng/tutor3_8.rng
@@ -0,0 +1,17 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ <optional>
+ <element name="prefersHTML">
+ <empty/>
+ </element>
+ </optional>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor3_8_1.xml b/test/relaxng/tutor3_8_1.xml
new file mode 100644
index 0000000..8d47e27
--- /dev/null
+++ b/test/relaxng/tutor3_8_1.xml
@@ -0,0 +1,4 @@
+<addressBook>
+ <card><name>foo</name><email>bar</email><prefersHTML/></card>
+ <card><name>foo</name><email>bar</email></card>
+</addressBook>
diff --git a/test/relaxng/tutor3_9.rng b/test/relaxng/tutor3_9.rng
new file mode 100644
index 0000000..a3895cc
--- /dev/null
+++ b/test/relaxng/tutor3_9.rng
@@ -0,0 +1,5 @@
+<element name="card" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="email">
+ <text/>
+ </attribute>
+</element>
diff --git a/test/relaxng/tutor3_9_1.xml b/test/relaxng/tutor3_9_1.xml
new file mode 100644
index 0000000..9153bc8
--- /dev/null
+++ b/test/relaxng/tutor3_9_1.xml
@@ -0,0 +1 @@
+<card email="foo"/>
diff --git a/test/relaxng/tutor4_1.rng b/test/relaxng/tutor4_1.rng
new file mode 100644
index 0000000..dd10602
--- /dev/null
+++ b/test/relaxng/tutor4_1.rng
@@ -0,0 +1,22 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <element name="addressBook">
+ <zeroOrMore>
+ <element name="card">
+ <ref name="cardContent"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="cardContent">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor4_1_1.xml b/test/relaxng/tutor4_1_1.xml
new file mode 100644
index 0000000..9b8616a
--- /dev/null
+++ b/test/relaxng/tutor4_1_1.xml
@@ -0,0 +1,4 @@
+<addressBook>
+ <card><name>John Smith</name><email>js@example.com"</email></card>
+ <card><name>John Smith2</name><email>js2@example.com"</email></card>
+</addressBook>
diff --git a/test/relaxng/tutor4_2.rng b/test/relaxng/tutor4_2.rng
new file mode 100644
index 0000000..644b06e
--- /dev/null
+++ b/test/relaxng/tutor4_2.rng
@@ -0,0 +1,34 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <ref name="AddressBook"/>
+ </start>
+
+ <define name="AddressBook">
+ <element name="addressBook">
+ <zeroOrMore>
+ <ref name="Card"/>
+ </zeroOrMore>
+ </element>
+ </define>
+
+ <define name="Card">
+ <element name="card">
+ <ref name="Name"/>
+ <ref name="Email"/>
+ </element>
+ </define>
+
+ <define name="Name">
+ <element name="name">
+ <text/>
+ </element>
+ </define>
+
+ <define name="Email">
+ <element name="email">
+ <text/>
+ </element>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor4_2_1.xml b/test/relaxng/tutor4_2_1.xml
new file mode 100644
index 0000000..9b8616a
--- /dev/null
+++ b/test/relaxng/tutor4_2_1.xml
@@ -0,0 +1,4 @@
+<addressBook>
+ <card><name>John Smith</name><email>js@example.com"</email></card>
+ <card><name>John Smith2</name><email>js2@example.com"</email></card>
+</addressBook>
diff --git a/test/relaxng/tutor4_3.rng b/test/relaxng/tutor4_3.rng
new file mode 100644
index 0000000..0f2a0a9
--- /dev/null
+++ b/test/relaxng/tutor4_3.rng
@@ -0,0 +1,27 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="p">
+ <ref name="inline"/>
+ </element>
+ </start>
+
+ <define name="inline">
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <element name="bold">
+ <ref name="inline"/>
+ </element>
+ <element name="italic">
+ <ref name="inline"/>
+ </element>
+ <element name="span">
+ <optional>
+ <attribute name="style"/>
+ </optional>
+ <ref name="inline"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </define>
+</grammar>
diff --git a/test/relaxng/tutor4_3_1.xml b/test/relaxng/tutor4_3_1.xml
new file mode 100644
index 0000000..31ee882
--- /dev/null
+++ b/test/relaxng/tutor4_3_1.xml
@@ -0,0 +1 @@
+<p></p>
diff --git a/test/relaxng/tutor4_3_2.xml b/test/relaxng/tutor4_3_2.xml
new file mode 100644
index 0000000..3a8b953
--- /dev/null
+++ b/test/relaxng/tutor4_3_2.xml
@@ -0,0 +1 @@
+<p>a</p>
diff --git a/test/relaxng/tutor4_3_3.xml b/test/relaxng/tutor4_3_3.xml
new file mode 100644
index 0000000..dbf9bd5
--- /dev/null
+++ b/test/relaxng/tutor4_3_3.xml
@@ -0,0 +1 @@
+<p><bold></bold></p>
diff --git a/test/relaxng/tutor4_3_4.xml b/test/relaxng/tutor4_3_4.xml
new file mode 100644
index 0000000..5c284e6
--- /dev/null
+++ b/test/relaxng/tutor4_3_4.xml
@@ -0,0 +1 @@
+<p><bold><italic>c</italic></bold></p>
diff --git a/test/relaxng/tutor4_3_5.xml b/test/relaxng/tutor4_3_5.xml
new file mode 100644
index 0000000..ddc7af2
--- /dev/null
+++ b/test/relaxng/tutor4_3_5.xml
@@ -0,0 +1 @@
+<p>a<bold>b<italic>c</italic>d</bold>e<span>f</span>g</p>
diff --git a/test/relaxng/tutor4_3_6.xml b/test/relaxng/tutor4_3_6.xml
new file mode 100644
index 0000000..f715763
--- /dev/null
+++ b/test/relaxng/tutor4_3_6.xml
@@ -0,0 +1 @@
+<p>a<bold>b<span style="foo">c</span>d</bold>e<italic>f</italic>g</p>
diff --git a/test/relaxng/tutor4_4.rng b/test/relaxng/tutor4_4.rng
new file mode 100644
index 0000000..4e4f19c
--- /dev/null
+++ b/test/relaxng/tutor4_4.rng
@@ -0,0 +1,28 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="p">
+ <ref name="inline"/>
+ </element>
+ </start>
+
+ <define name="inline">
+ <choice>
+ <text/>
+ <element name="bold">
+ <ref name="inline"/>
+ </element>
+ <element name="italic">
+ <ref name="inline"/>
+ </element>
+ <element name="span">
+ <optional>
+ <attribute name="style"/>
+ </optional>
+ <ref name="inline"/>
+ </element>
+ </choice>
+ <optional>
+ <ref name="inline"/>
+ </optional>
+ </define>
+</grammar>
diff --git a/test/relaxng/tutor4_4_1.xml b/test/relaxng/tutor4_4_1.xml
new file mode 100644
index 0000000..ddc7af2
--- /dev/null
+++ b/test/relaxng/tutor4_4_1.xml
@@ -0,0 +1 @@
+<p>a<bold>b<italic>c</italic>d</bold>e<span>f</span>g</p>
diff --git a/test/relaxng/tutor5_1.rng b/test/relaxng/tutor5_1.rng
new file mode 100644
index 0000000..503a043
--- /dev/null
+++ b/test/relaxng/tutor5_1.rng
@@ -0,0 +1,3 @@
+<element name="number" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="int" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+</element>
diff --git a/test/relaxng/tutor5_1_1.xml b/test/relaxng/tutor5_1_1.xml
new file mode 100644
index 0000000..aa01853
--- /dev/null
+++ b/test/relaxng/tutor5_1_1.xml
@@ -0,0 +1 @@
+<number>5</number>
diff --git a/test/relaxng/tutor5_2.rng b/test/relaxng/tutor5_2.rng
new file mode 100644
index 0000000..9d749dc
--- /dev/null
+++ b/test/relaxng/tutor5_2.rng
@@ -0,0 +1,9 @@
+<element name="point" xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <element name="x">
+ <data type="double"/>
+ </element>
+ <element name="y">
+ <data type="double"/>
+ </element>
+</element>
diff --git a/test/relaxng/tutor5_2_1.xml b/test/relaxng/tutor5_2_1.xml
new file mode 100644
index 0000000..75c387d
--- /dev/null
+++ b/test/relaxng/tutor5_2_1.xml
@@ -0,0 +1 @@
+<point><x>1</x><y>5.20</y></point>
diff --git a/test/relaxng/tutor5_3.rng b/test/relaxng/tutor5_3.rng
new file mode 100644
index 0000000..e49f6ec
--- /dev/null
+++ b/test/relaxng/tutor5_3.rng
@@ -0,0 +1,6 @@
+<element name="bad" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string"/>
+ <element name="note">
+ <text/>
+ </element>
+</element>
diff --git a/test/relaxng/tutor5_3_1.xml b/test/relaxng/tutor5_3_1.xml
new file mode 100644
index 0000000..bd73098
--- /dev/null
+++ b/test/relaxng/tutor5_3_1.xml
@@ -0,0 +1 @@
+<bad>5<note>fails</note></bad>
diff --git a/test/relaxng/tutor5_4.rng b/test/relaxng/tutor5_4.rng
new file mode 100644
index 0000000..e6aae94
--- /dev/null
+++ b/test/relaxng/tutor5_4.rng
@@ -0,0 +1,6 @@
+<element name="ok" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string"/>
+ <attribute name="note">
+ <text/>
+ </attribute>
+</element>
diff --git a/test/relaxng/tutor5_4_1.xml b/test/relaxng/tutor5_4_1.xml
new file mode 100644
index 0000000..c9cdef4
--- /dev/null
+++ b/test/relaxng/tutor5_4_1.xml
@@ -0,0 +1 @@
+<ok note="foo">5</ok>
diff --git a/test/relaxng/tutor5_5.rng b/test/relaxng/tutor5_5.rng
new file mode 100644
index 0000000..b620ab8
--- /dev/null
+++ b/test/relaxng/tutor5_5.rng
@@ -0,0 +1,5 @@
+<element name="email" xmlns="http://relaxng.org/ns/structure/1.0">
+ <data type="string">
+ <param name="maxLength">127</param>
+ </data>
+</element>
diff --git a/test/relaxng/tutor6_1.rng b/test/relaxng/tutor6_1.rng
new file mode 100644
index 0000000..7a06092
--- /dev/null
+++ b/test/relaxng/tutor6_1.rng
@@ -0,0 +1,10 @@
+<element name="card" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="name"/>
+ <attribute name="email"/>
+ <attribute name="preferredFormat">
+ <choice>
+ <value>html</value>
+ <value>text</value>
+ </choice>
+ </attribute>
+</element>
diff --git a/test/relaxng/tutor6_1_1.xml b/test/relaxng/tutor6_1_1.xml
new file mode 100644
index 0000000..30460ae
--- /dev/null
+++ b/test/relaxng/tutor6_1_1.xml
@@ -0,0 +1 @@
+<card name="foo" email="bar" preferredFormat="text"/>
diff --git a/test/relaxng/tutor6_1_2.xml b/test/relaxng/tutor6_1_2.xml
new file mode 100644
index 0000000..bf3dfc2
--- /dev/null
+++ b/test/relaxng/tutor6_1_2.xml
@@ -0,0 +1 @@
+<card name="foo" email="bar" preferredFormat="html"/>
diff --git a/test/relaxng/tutor6_1_3.xml b/test/relaxng/tutor6_1_3.xml
new file mode 100644
index 0000000..6038d79
--- /dev/null
+++ b/test/relaxng/tutor6_1_3.xml
@@ -0,0 +1 @@
+<card name="foo" email="bar" preferredFormat="error"/>
diff --git a/test/relaxng/tutor6_1_4.xml b/test/relaxng/tutor6_1_4.xml
new file mode 100644
index 0000000..0ad64dd
--- /dev/null
+++ b/test/relaxng/tutor6_1_4.xml
@@ -0,0 +1 @@
+<card name="John Smith" email="js@example.com" preferredFormat=" html "/>
diff --git a/test/relaxng/tutor6_1_5.xml b/test/relaxng/tutor6_1_5.xml
new file mode 100644
index 0000000..c5d22bd
--- /dev/null
+++ b/test/relaxng/tutor6_1_5.xml
@@ -0,0 +1,2 @@
+<card name="John Smith" email="js@example.com" preferredFormat="html"/>
+
diff --git a/test/relaxng/tutor6_2.rng b/test/relaxng/tutor6_2.rng
new file mode 100644
index 0000000..1237fa7
--- /dev/null
+++ b/test/relaxng/tutor6_2.rng
@@ -0,0 +1,14 @@
+<element name="card" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ <element name="preferredFormat">
+ <choice>
+ <value>html</value>
+ <value>text</value>
+ </choice>
+ </element>
+</element>
diff --git a/test/relaxng/tutor6_2_1.xml b/test/relaxng/tutor6_2_1.xml
new file mode 100644
index 0000000..5064bf2
--- /dev/null
+++ b/test/relaxng/tutor6_2_1.xml
@@ -0,0 +1,5 @@
+<card>
+ <name>John Smith</name>
+ <email>js@example.com</email>
+ <preferredFormat>text</preferredFormat>
+</card>
diff --git a/test/relaxng/tutor6_2_2.xml b/test/relaxng/tutor6_2_2.xml
new file mode 100644
index 0000000..57da2e8
--- /dev/null
+++ b/test/relaxng/tutor6_2_2.xml
@@ -0,0 +1,5 @@
+<card>
+ <name>John Smith</name>
+ <email>js@example.com</email>
+ <preferredFormat>html</preferredFormat>
+</card>
diff --git a/test/relaxng/tutor6_2_3.xml b/test/relaxng/tutor6_2_3.xml
new file mode 100644
index 0000000..acca979
--- /dev/null
+++ b/test/relaxng/tutor6_2_3.xml
@@ -0,0 +1,5 @@
+<card>
+ <name>John Smith</name>
+ <email>js@example.com</email>
+ <preferredFormat> html </preferredFormat>
+</card>
diff --git a/test/relaxng/tutor6_2_4.xml b/test/relaxng/tutor6_2_4.xml
new file mode 100644
index 0000000..c3f723b
--- /dev/null
+++ b/test/relaxng/tutor6_2_4.xml
@@ -0,0 +1,5 @@
+<card>
+ <name>John Smith</name>
+ <email>js@example.com</email>
+ <preferredFormat>error</preferredFormat>
+</card>
diff --git a/test/relaxng/tutor6_3.rng b/test/relaxng/tutor6_3.rng
new file mode 100644
index 0000000..0683d0b
--- /dev/null
+++ b/test/relaxng/tutor6_3.rng
@@ -0,0 +1,10 @@
+<element name="card" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="name"/>
+ <attribute name="email"/>
+ <attribute name="preferredFormat">
+ <choice>
+ <value type="string">html</value>
+ <value type="string">text</value>
+ </choice>
+ </attribute>
+</element>
diff --git a/test/relaxng/tutor6_3_1.xml b/test/relaxng/tutor6_3_1.xml
new file mode 100644
index 0000000..0ad64dd
--- /dev/null
+++ b/test/relaxng/tutor6_3_1.xml
@@ -0,0 +1 @@
+<card name="John Smith" email="js@example.com" preferredFormat=" html "/>
diff --git a/test/relaxng/tutor7_1.rng b/test/relaxng/tutor7_1.rng
new file mode 100644
index 0000000..116e912
--- /dev/null
+++ b/test/relaxng/tutor7_1.rng
@@ -0,0 +1,7 @@
+<element name="vector" xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <list>
+ <data type="float"/>
+ <data type="float"/>
+ </list>
+</element>
diff --git a/test/relaxng/tutor7_1_1.xml b/test/relaxng/tutor7_1_1.xml
new file mode 100644
index 0000000..3f03eea
--- /dev/null
+++ b/test/relaxng/tutor7_1_1.xml
@@ -0,0 +1 @@
+<vector>1.2 3.4</vector>
diff --git a/test/relaxng/tutor7_1_2.xml b/test/relaxng/tutor7_1_2.xml
new file mode 100644
index 0000000..adbfdbd
--- /dev/null
+++ b/test/relaxng/tutor7_1_2.xml
@@ -0,0 +1 @@
+<vector>1.2</vector>
diff --git a/test/relaxng/tutor7_1_3.xml b/test/relaxng/tutor7_1_3.xml
new file mode 100644
index 0000000..f9eeb5c
--- /dev/null
+++ b/test/relaxng/tutor7_1_3.xml
@@ -0,0 +1 @@
+<vector>1.2 3.4 5.6</vector>
diff --git a/test/relaxng/tutor7_1_4.xml b/test/relaxng/tutor7_1_4.xml
new file mode 100644
index 0000000..c9bda7f
--- /dev/null
+++ b/test/relaxng/tutor7_1_4.xml
@@ -0,0 +1 @@
+<vector> 1.2 3.4 </vector>
diff --git a/test/relaxng/tutor7_2.rng b/test/relaxng/tutor7_2.rng
new file mode 100644
index 0000000..a1c71d2
--- /dev/null
+++ b/test/relaxng/tutor7_2.rng
@@ -0,0 +1,8 @@
+<element name="vector" xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <list>
+ <oneOrMore>
+ <data type="double"/>
+ </oneOrMore>
+ </list>
+</element>
diff --git a/test/relaxng/tutor7_2_1.xml b/test/relaxng/tutor7_2_1.xml
new file mode 100644
index 0000000..adbfdbd
--- /dev/null
+++ b/test/relaxng/tutor7_2_1.xml
@@ -0,0 +1 @@
+<vector>1.2</vector>
diff --git a/test/relaxng/tutor7_2_2.xml b/test/relaxng/tutor7_2_2.xml
new file mode 100644
index 0000000..f9eeb5c
--- /dev/null
+++ b/test/relaxng/tutor7_2_2.xml
@@ -0,0 +1 @@
+<vector>1.2 3.4 5.6</vector>
diff --git a/test/relaxng/tutor7_2_3.xml b/test/relaxng/tutor7_2_3.xml
new file mode 100644
index 0000000..5274bad
--- /dev/null
+++ b/test/relaxng/tutor7_2_3.xml
@@ -0,0 +1 @@
+<vector> 1.2 3.4 </vector>
diff --git a/test/relaxng/tutor7_2_4.xml b/test/relaxng/tutor7_2_4.xml
new file mode 100644
index 0000000..719ba5f
--- /dev/null
+++ b/test/relaxng/tutor7_2_4.xml
@@ -0,0 +1 @@
+<vector></vector>
diff --git a/test/relaxng/tutor7_3.rng b/test/relaxng/tutor7_3.rng
new file mode 100644
index 0000000..cbedaf9
--- /dev/null
+++ b/test/relaxng/tutor7_3.rng
@@ -0,0 +1,9 @@
+<element name="path" xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <list>
+ <oneOrMore>
+ <data type="double"/>
+ <data type="double"/>
+ </oneOrMore>
+ </list>
+</element>
diff --git a/test/relaxng/tutor7_3_1.xml b/test/relaxng/tutor7_3_1.xml
new file mode 100644
index 0000000..bf61b50
--- /dev/null
+++ b/test/relaxng/tutor7_3_1.xml
@@ -0,0 +1 @@
+<path>1.2 3.4</path>
diff --git a/test/relaxng/tutor7_3_2.xml b/test/relaxng/tutor7_3_2.xml
new file mode 100644
index 0000000..45b4857
--- /dev/null
+++ b/test/relaxng/tutor7_3_2.xml
@@ -0,0 +1 @@
+<path>1.2 3.4 5 6 7 8</path>
diff --git a/test/relaxng/tutor7_3_3.xml b/test/relaxng/tutor7_3_3.xml
new file mode 100644
index 0000000..4abd17d
--- /dev/null
+++ b/test/relaxng/tutor7_3_3.xml
@@ -0,0 +1 @@
+<path> 1.2 3.4 5 6 </path>
diff --git a/test/relaxng/tutor7_3_4.xml b/test/relaxng/tutor7_3_4.xml
new file mode 100644
index 0000000..62099ae
--- /dev/null
+++ b/test/relaxng/tutor7_3_4.xml
@@ -0,0 +1 @@
+<path>1.2 3.4 5.6</path>
diff --git a/test/relaxng/tutor7_3_5.xml b/test/relaxng/tutor7_3_5.xml
new file mode 100644
index 0000000..fef5f25
--- /dev/null
+++ b/test/relaxng/tutor7_3_5.xml
@@ -0,0 +1 @@
+<path>1.2</path>
diff --git a/test/relaxng/tutor8_1.rng b/test/relaxng/tutor8_1.rng
new file mode 100644
index 0000000..c7bbe8b
--- /dev/null
+++ b/test/relaxng/tutor8_1.rng
@@ -0,0 +1,15 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <interleave>
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </interleave>
+ </element>
+ </zeroOrMore>
+</element>
+
diff --git a/test/relaxng/tutor8_1_1.xml b/test/relaxng/tutor8_1_1.xml
new file mode 100644
index 0000000..8f1e1a8
--- /dev/null
+++ b/test/relaxng/tutor8_1_1.xml
@@ -0,0 +1,6 @@
+<addressBook>
+ <card>
+ <email>b@b</email>
+ <name>b</name>
+ </card>
+</addressBook>
diff --git a/test/relaxng/tutor8_1_2.xml b/test/relaxng/tutor8_1_2.xml
new file mode 100644
index 0000000..c1f3767
--- /dev/null
+++ b/test/relaxng/tutor8_1_2.xml
@@ -0,0 +1,7 @@
+<addressBook>
+ <card>
+ <name>b</name>
+ <email>b@b</email>
+ </card>
+</addressBook>
+
diff --git a/test/relaxng/tutor8_2.rng b/test/relaxng/tutor8_2.rng
new file mode 100644
index 0000000..495968e
--- /dev/null
+++ b/test/relaxng/tutor8_2.rng
@@ -0,0 +1,57 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <ref name="head"/>
+ </start>
+ <define name="head">
+ <element name="head">
+ <interleave>
+ <ref name="title"/>
+ <optional>
+ <ref name="base"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="style"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="script"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="link"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="meta"/>
+ </zeroOrMore>
+ </interleave>
+ </element>
+ </define>
+ <define name="title">
+ <element name="title">
+ <text/>
+ </element>
+ </define>
+ <define name="base">
+ <element name="base">
+ <text/>
+ </element>
+ </define>
+ <define name="style">
+ <element name="style">
+ <text/>
+ </element>
+ </define>
+ <define name="script">
+ <element name="script">
+ <text/>
+ </element>
+ </define>
+ <define name="meta">
+ <element name="meta">
+ <text/>
+ </element>
+ </define>
+ <define name="link">
+ <element name="link">
+ <text/>
+ </element>
+ </define>
+</grammar>
diff --git a/test/relaxng/tutor8_2_1.xml b/test/relaxng/tutor8_2_1.xml
new file mode 100644
index 0000000..fed80d4
--- /dev/null
+++ b/test/relaxng/tutor8_2_1.xml
@@ -0,0 +1,5 @@
+<head>
+ <meta>meta1</meta>
+ <title>foo</title>
+ <meta>meta2</meta>
+</head>
diff --git a/test/relaxng/tutor8_2_2.xml b/test/relaxng/tutor8_2_2.xml
new file mode 100644
index 0000000..24c2e6b
--- /dev/null
+++ b/test/relaxng/tutor8_2_2.xml
@@ -0,0 +1,36 @@
+<head>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <base>base</base>
+ <title>foo</title>
+ <meta>meta</meta>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <meta>meta</meta>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+ <script>script</script>
+ <link>link</link>
+ <style>link</style>
+</head>
diff --git a/test/relaxng/tutor8_2_3.xml b/test/relaxng/tutor8_2_3.xml
new file mode 100644
index 0000000..920f99d
--- /dev/null
+++ b/test/relaxng/tutor8_2_3.xml
@@ -0,0 +1,3 @@
+<head>
+ <title>title</title>
+</head>
diff --git a/test/relaxng/tutor8_2_4.xml b/test/relaxng/tutor8_2_4.xml
new file mode 100644
index 0000000..68f3865
--- /dev/null
+++ b/test/relaxng/tutor8_2_4.xml
@@ -0,0 +1,6 @@
+<head>
+ <meta>meta1</meta>
+ <title>foo</title>
+ <meta>meta2</meta>
+ <title>error</title>
+</head>
diff --git a/test/relaxng/tutor8_2_5.xml b/test/relaxng/tutor8_2_5.xml
new file mode 100644
index 0000000..75b9d53
--- /dev/null
+++ b/test/relaxng/tutor8_2_5.xml
@@ -0,0 +1,3 @@
+<head>
+ <meta>meta2</meta>
+</head>
diff --git a/test/relaxng/tutor8_2_6.xml b/test/relaxng/tutor8_2_6.xml
new file mode 100644
index 0000000..20fb4c7
--- /dev/null
+++ b/test/relaxng/tutor8_2_6.xml
@@ -0,0 +1,5 @@
+<head>
+ <base>base</base>
+ <title>foo</title>
+ <base>error</base>
+</head>
diff --git a/test/relaxng/tutor8_3.rng b/test/relaxng/tutor8_3.rng
new file mode 100644
index 0000000..b68814d
--- /dev/null
+++ b/test/relaxng/tutor8_3.rng
@@ -0,0 +1,9 @@
+<element name="content" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <text/>
+ <element name="p">
+ <text/>
+ </element>
+ </interleave>
+</element>
+
diff --git a/test/relaxng/tutor8_3_1.xml b/test/relaxng/tutor8_3_1.xml
new file mode 100644
index 0000000..86ea447
--- /dev/null
+++ b/test/relaxng/tutor8_3_1.xml
@@ -0,0 +1 @@
+<content> how are you <p> 'yau de poelle </p> ? </content>
diff --git a/test/relaxng/tutor9_1.rng b/test/relaxng/tutor9_1.rng
new file mode 100644
index 0000000..43a59fc
--- /dev/null
+++ b/test/relaxng/tutor9_1.rng
@@ -0,0 +1,17 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ <optional>
+ <element name="note">
+ <externalRef href="inline.rng"/>
+ </element>
+ </optional>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/tutor9_10.rng b/test/relaxng/tutor9_10.rng
new file mode 100644
index 0000000..c5b38db
--- /dev/null
+++ b/test/relaxng/tutor9_10.rng
@@ -0,0 +1,26 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <include href="inline3.rng"/>
+
+ <start>
+ <element name="doc">
+ <zeroOrMore>
+ <element name="p">
+ <ref name="inline"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="inline.extra" combine="choice">
+ <choice>
+ <element name="code">
+ <ref name="inline"/>
+ </element>
+ <element name="em">
+ <ref name="inline"/>
+ </element>
+ </choice>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor9_10_1.xml b/test/relaxng/tutor9_10_1.xml
new file mode 100644
index 0000000..139a079
--- /dev/null
+++ b/test/relaxng/tutor9_10_1.xml
@@ -0,0 +1,3 @@
+<doc>
+ <p>a<bold>b<em>c<italic>d</italic>e</em>f</bold>g</p>
+</doc>
diff --git a/test/relaxng/tutor9_11.rng b/test/relaxng/tutor9_11.rng
new file mode 100644
index 0000000..cf63b02
--- /dev/null
+++ b/test/relaxng/tutor9_11.rng
@@ -0,0 +1,16 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <include href="addressBook.rng">
+
+ <define name="cardContent">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="emailAddress">
+ <text/>
+ </element>
+ </define>
+
+ </include>
+
+</grammar>
diff --git a/test/relaxng/tutor9_11_1.xml b/test/relaxng/tutor9_11_1.xml
new file mode 100644
index 0000000..c542fa6
--- /dev/null
+++ b/test/relaxng/tutor9_11_1.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card><name>foo</name><emailAddress>bar</emailAddress></card>
+</addressBook>
diff --git a/test/relaxng/tutor9_12.rng b/test/relaxng/tutor9_12.rng
new file mode 100644
index 0000000..be10b85
--- /dev/null
+++ b/test/relaxng/tutor9_12.rng
@@ -0,0 +1,22 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <element name="addressBook">
+ <zeroOrMore>
+ <element name="card">
+ <ref name="cardContent"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="cardContent">
+ <element name="name">
+ <text/>
+ </element>
+ <element name="emailAddress">
+ <text/>
+ </element>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor9_12_1.xml b/test/relaxng/tutor9_12_1.xml
new file mode 100644
index 0000000..c542fa6
--- /dev/null
+++ b/test/relaxng/tutor9_12_1.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card><name>foo</name><emailAddress>bar</emailAddress></card>
+</addressBook>
diff --git a/test/relaxng/tutor9_1_1.xml b/test/relaxng/tutor9_1_1.xml
new file mode 100644
index 0000000..f45fc3b
--- /dev/null
+++ b/test/relaxng/tutor9_1_1.xml
@@ -0,0 +1,7 @@
+<addressBook>
+ <card>
+ <name>foo</name>
+ <email>bar</email>
+ <note>this guy is <em>annoying</em> !</note>
+ </card>
+</addressBook>
diff --git a/test/relaxng/tutor9_2.rng b/test/relaxng/tutor9_2.rng
new file mode 100644
index 0000000..cb434bd
--- /dev/null
+++ b/test/relaxng/tutor9_2.rng
@@ -0,0 +1,7 @@
+<element name="data" xmlns="http://relaxng.org/ns/structure/1.0">
+ <choice>
+ <externalRef href="pattern1.rng"/>
+ <externalRef href="pattern2.rng"/>
+ </choice>
+</element>
+
diff --git a/test/relaxng/tutor9_2_1.xml b/test/relaxng/tutor9_2_1.xml
new file mode 100644
index 0000000..2ca54ee
--- /dev/null
+++ b/test/relaxng/tutor9_2_1.xml
@@ -0,0 +1,4 @@
+<data>
+ <a>a</a>
+ <b>a</b>
+</data>
diff --git a/test/relaxng/tutor9_2_2.xml b/test/relaxng/tutor9_2_2.xml
new file mode 100644
index 0000000..2ca54ee
--- /dev/null
+++ b/test/relaxng/tutor9_2_2.xml
@@ -0,0 +1,4 @@
+<data>
+ <a>a</a>
+ <b>a</b>
+</data>
diff --git a/test/relaxng/tutor9_3.rng b/test/relaxng/tutor9_3.rng
new file mode 100644
index 0000000..62c6e7d
--- /dev/null
+++ b/test/relaxng/tutor9_3.rng
@@ -0,0 +1,37 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="data">
+ <interleave>
+ <text/>
+ <ref name="inline.class"/>
+ </interleave>
+ </element>
+ </start>
+
+ <define name="inline.class" combine="choice">
+ <element name="bold">
+ <ref name="inline"/>
+ </element>
+ </define>
+
+ <define name="inline.class" combine="choice">
+ <element name="italic">
+ <ref name="inline"/>
+ </element>
+ </define>
+
+ <define name="inline">
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <element name="code">
+ <ref name="inline"/>
+ </element>
+ <element name="em">
+ <ref name="inline"/>
+ </element>
+ <!-- etc -->
+ </choice>
+ </zeroOrMore>
+ </define>
+</grammar>
diff --git a/test/relaxng/tutor9_3_1.xml b/test/relaxng/tutor9_3_1.xml
new file mode 100644
index 0000000..50bfa20
--- /dev/null
+++ b/test/relaxng/tutor9_3_1.xml
@@ -0,0 +1 @@
+<data> a <bold> b <em> c </em> d </bold> e </data>
diff --git a/test/relaxng/tutor9_3_2.xml b/test/relaxng/tutor9_3_2.xml
new file mode 100644
index 0000000..f089542
--- /dev/null
+++ b/test/relaxng/tutor9_3_2.xml
@@ -0,0 +1 @@
+<data> a <italic> b <code> c </code> d <em>foo</em> </italic> e </data>
diff --git a/test/relaxng/tutor9_4.rng b/test/relaxng/tutor9_4.rng
new file mode 100644
index 0000000..d3b7e8e
--- /dev/null
+++ b/test/relaxng/tutor9_4.rng
@@ -0,0 +1,36 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="data">
+ <interleave>
+ <text/>
+ <ref name="inline.class"/>
+ </interleave>
+ </element>
+ </start>
+
+ <define name="inline.class">
+ <choice>
+ <element name="bold">
+ <ref name="inline"/>
+ </element>
+ <element name="italic">
+ <ref name="inline"/>
+ </element>
+ </choice>
+ </define>
+
+ <define name="inline">
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <element name="code">
+ <ref name="inline"/>
+ </element>
+ <element name="em">
+ <ref name="inline"/>
+ </element>
+ <!-- etc -->
+ </choice>
+ </zeroOrMore>
+ </define>
+</grammar>
diff --git a/test/relaxng/tutor9_4_1.xml b/test/relaxng/tutor9_4_1.xml
new file mode 100644
index 0000000..50bfa20
--- /dev/null
+++ b/test/relaxng/tutor9_4_1.xml
@@ -0,0 +1 @@
+<data> a <bold> b <em> c </em> d </bold> e </data>
diff --git a/test/relaxng/tutor9_4_2.xml b/test/relaxng/tutor9_4_2.xml
new file mode 100644
index 0000000..f089542
--- /dev/null
+++ b/test/relaxng/tutor9_4_2.xml
@@ -0,0 +1 @@
+<data> a <italic> b <code> c </code> d <em>foo</em> </italic> e </data>
diff --git a/test/relaxng/tutor9_5.rng b/test/relaxng/tutor9_5.rng
new file mode 100644
index 0000000..b8b0a84
--- /dev/null
+++ b/test/relaxng/tutor9_5.rng
@@ -0,0 +1,25 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <element name="addressBook">
+ <zeroOrMore>
+ <element name="card">
+ <ref name="card.attlist"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="card.attlist" combine="interleave">
+ <attribute name="name">
+ <text/>
+ </attribute>
+ </define>
+
+ <define name="card.attlist" combine="interleave">
+ <attribute name="email">
+ <text/>
+ </attribute>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor9_5_1.xml b/test/relaxng/tutor9_5_1.xml
new file mode 100644
index 0000000..275753b
--- /dev/null
+++ b/test/relaxng/tutor9_5_1.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card name="foo" email="bar"/>
+</addressBook>
diff --git a/test/relaxng/tutor9_5_2.xml b/test/relaxng/tutor9_5_2.xml
new file mode 100644
index 0000000..1ff1d3c
--- /dev/null
+++ b/test/relaxng/tutor9_5_2.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card name="foo"/>
+</addressBook>
diff --git a/test/relaxng/tutor9_5_3.xml b/test/relaxng/tutor9_5_3.xml
new file mode 100644
index 0000000..b70c5bf
--- /dev/null
+++ b/test/relaxng/tutor9_5_3.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card name="foo" email="bar" error="extra"/>
+</addressBook>
diff --git a/test/relaxng/tutor9_6.rng b/test/relaxng/tutor9_6.rng
new file mode 100644
index 0000000..0730038
--- /dev/null
+++ b/test/relaxng/tutor9_6.rng
@@ -0,0 +1,24 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <element name="addressBook">
+ <zeroOrMore>
+ <element name="card">
+ <ref name="card.attlist"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="card.attlist">
+ <group>
+ <attribute name="name">
+ <text/>
+ </attribute>
+ <attribute name="email">
+ <text/>
+ </attribute>
+ </group>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor9_6_1.xml b/test/relaxng/tutor9_6_1.xml
new file mode 100644
index 0000000..275753b
--- /dev/null
+++ b/test/relaxng/tutor9_6_1.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card name="foo" email="bar"/>
+</addressBook>
diff --git a/test/relaxng/tutor9_6_2.xml b/test/relaxng/tutor9_6_2.xml
new file mode 100644
index 0000000..1ff1d3c
--- /dev/null
+++ b/test/relaxng/tutor9_6_2.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card name="foo"/>
+</addressBook>
diff --git a/test/relaxng/tutor9_6_3.xml b/test/relaxng/tutor9_6_3.xml
new file mode 100644
index 0000000..b70c5bf
--- /dev/null
+++ b/test/relaxng/tutor9_6_3.xml
@@ -0,0 +1,3 @@
+<addressBook>
+ <card name="foo" email="bar" error="extra"/>
+</addressBook>
diff --git a/test/relaxng/tutor9_7.rng b/test/relaxng/tutor9_7.rng
new file mode 100644
index 0000000..ae5e509
--- /dev/null
+++ b/test/relaxng/tutor9_7.rng
@@ -0,0 +1,26 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <include href="inline2.rng"/>
+
+ <start>
+ <element name="doc">
+ <zeroOrMore>
+ <element name="p">
+ <ref name="inline"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="inline.class" combine="choice">
+ <choice>
+ <element name="code">
+ <ref name="inline"/>
+ </element>
+ <element name="em">
+ <ref name="inline"/>
+ </element>
+ </choice>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor9_7_1.xml b/test/relaxng/tutor9_7_1.xml
new file mode 100644
index 0000000..139a079
--- /dev/null
+++ b/test/relaxng/tutor9_7_1.xml
@@ -0,0 +1,3 @@
+<doc>
+ <p>a<bold>b<em>c<italic>d</italic>e</em>f</bold>g</p>
+</doc>
diff --git a/test/relaxng/tutor9_8.rng b/test/relaxng/tutor9_8.rng
new file mode 100644
index 0000000..16a141d
--- /dev/null
+++ b/test/relaxng/tutor9_8.rng
@@ -0,0 +1,42 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <define name="inline">
+ <zeroOrMore>
+ <ref name="inline.class"/>
+ </zeroOrMore>
+ </define>
+
+ <define name="inline.class">
+ <choice>
+ <text/>
+ <element name="bold">
+ <ref name="inline"/>
+ </element>
+ <element name="italic">
+ <ref name="inline"/>
+ </element>
+ </choice>
+ </define>
+
+ <start>
+ <element name="doc">
+ <zeroOrMore>
+ <element name="p">
+ <ref name="inline"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+ <define name="inline.class" combine="choice">
+ <choice>
+ <element name="code">
+ <ref name="inline"/>
+ </element>
+ <element name="em">
+ <ref name="inline"/>
+ </element>
+ </choice>
+ </define>
+
+</grammar>
diff --git a/test/relaxng/tutor9_8_1.xml b/test/relaxng/tutor9_8_1.xml
new file mode 100644
index 0000000..139a079
--- /dev/null
+++ b/test/relaxng/tutor9_8_1.xml
@@ -0,0 +1,3 @@
+<doc>
+ <p>a<bold>b<em>c<italic>d</italic>e</em>f</bold>g</p>
+</doc>
diff --git a/test/relaxng/tutor9_9.rng b/test/relaxng/tutor9_9.rng
new file mode 100644
index 0000000..9f2e5ea
--- /dev/null
+++ b/test/relaxng/tutor9_9.rng
@@ -0,0 +1,37 @@
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <define name="inline">
+ <zeroOrMore>
+ <ref name="inline.class"/>
+ </zeroOrMore>
+ </define>
+
+ <define name="inline.class">
+ <choice>
+ <text/>
+ <element name="bold">
+ <ref name="inline"/>
+ </element>
+ <element name="italic">
+ <ref name="inline"/>
+ </element>
+ <element name="code">
+ <ref name="inline"/>
+ </element>
+ <element name="em">
+ <ref name="inline"/>
+ </element>
+ </choice>
+ </define>
+
+ <start>
+ <element name="doc">
+ <zeroOrMore>
+ <element name="p">
+ <ref name="inline"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </start>
+
+</grammar>
diff --git a/test/relaxng/tutor9_9_1.xml b/test/relaxng/tutor9_9_1.xml
new file mode 100644
index 0000000..139a079
--- /dev/null
+++ b/test/relaxng/tutor9_9_1.xml
@@ -0,0 +1,3 @@
+<doc>
+ <p>a<bold>b<em>c<italic>d</italic>e</em>f</bold>g</p>
+</doc>
diff --git a/test/relaxng/tutorA.rng b/test/relaxng/tutorA.rng
new file mode 100644
index 0000000..b9ef4e1
--- /dev/null
+++ b/test/relaxng/tutorA.rng
@@ -0,0 +1,334 @@
+<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
+ ns="http://relaxng.org/ns/structure/1.0"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <ref name="pattern"/>
+ </start>
+
+ <define name="pattern">
+ <choice>
+ <element name="element">
+ <choice>
+ <attribute name="name">
+ <data type="QName"/>
+ </attribute>
+ <ref name="open-name-class"/>
+ </choice>
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="attribute">
+ <ref name="common-atts"/>
+ <choice>
+ <attribute name="name">
+ <data type="QName"/>
+ </attribute>
+ <ref name="open-name-class"/>
+ </choice>
+ <interleave>
+ <ref name="other"/>
+ <optional>
+ <ref name="pattern"/>
+ </optional>
+ </interleave>
+ </element>
+ <element name="group">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="interleave">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="choice">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="optional">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="zeroOrMore">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="oneOrMore">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="list">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="mixed">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="ref">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="parentRef">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="empty">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="text">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="value">
+ <optional>
+ <attribute name="type">
+ <data type="NCName"/>
+ </attribute>
+ </optional>
+ <ref name="common-atts"/>
+ <text/>
+ </element>
+ <element name="data">
+ <attribute name="type">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <interleave>
+ <ref name="other"/>
+ <group>
+ <zeroOrMore>
+ <element name="param">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <text/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="except">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ </optional>
+ </group>
+ </interleave>
+ </element>
+ <element name="notAllowed">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="externalRef">
+ <attribute name="href">
+ <data type="anyURI"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="grammar">
+ <ref name="common-atts"/>
+ <ref name="grammar-content"/>
+ </element>
+ </choice>
+ </define>
+
+ <define name="grammar-content">
+ <interleave>
+ <ref name="other"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="start-element"/>
+ <ref name="define-element"/>
+ <element name="div">
+ <ref name="common-atts"/>
+ <ref name="grammar-content"/>
+ </element>
+ <element name="include">
+ <attribute name="href">
+ <data type="anyURI"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="include-content"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </interleave>
+ </define>
+
+ <define name="include-content">
+ <interleave>
+ <ref name="other"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="start-element"/>
+ <ref name="define-element"/>
+ <element name="div">
+ <ref name="common-atts"/>
+ <ref name="include-content"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </interleave>
+ </define>
+
+ <define name="start-element">
+ <element name="start">
+ <ref name="combine-att"/>
+ <ref name="common-atts"/>
+ <ref name="open-pattern"/>
+ </element>
+ </define>
+
+ <define name="define-element">
+ <element name="define">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="combine-att"/>
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ </define>
+
+ <define name="combine-att">
+ <optional>
+ <attribute name="combine">
+ <choice>
+ <value>choice</value>
+ <value>interleave</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+
+ <define name="open-patterns">
+ <interleave>
+ <ref name="other"/>
+ <oneOrMore>
+ <ref name="pattern"/>
+ </oneOrMore>
+ </interleave>
+ </define>
+
+ <define name="open-pattern">
+ <interleave>
+ <ref name="other"/>
+ <ref name="pattern"/>
+ </interleave>
+ </define>
+
+ <define name="name-class">
+ <choice>
+ <element name="name">
+ <ref name="common-atts"/>
+ <data type="QName"/>
+ </element>
+ <element name="anyName">
+ <ref name="common-atts"/>
+ <ref name="except-name-class"/>
+ </element>
+ <element name="nsName">
+ <ref name="common-atts"/>
+ <ref name="except-name-class"/>
+ </element>
+ <element name="choice">
+ <ref name="common-atts"/>
+ <ref name="open-name-classes"/>
+ </element>
+ </choice>
+ </define>
+
+ <define name="except-name-class">
+ <interleave>
+ <ref name="other"/>
+ <optional>
+ <element name="except">
+ <ref name="open-name-classes"/>
+ </element>
+ </optional>
+ </interleave>
+ </define>
+
+ <define name="open-name-classes">
+ <interleave>
+ <ref name="other"/>
+ <oneOrMore>
+ <ref name="name-class"/>
+ </oneOrMore>
+ </interleave>
+ </define>
+
+ <define name="open-name-class">
+ <interleave>
+ <ref name="other"/>
+ <ref name="name-class"/>
+ </interleave>
+ </define>
+
+ <define name="common-atts">
+ <optional>
+ <attribute name="ns"/>
+ </optional>
+ <optional>
+ <attribute name="datatypeLibrary">
+ <data type="anyURI"/>
+ </attribute>
+ </optional>
+ <zeroOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <nsName/>
+ <nsName ns=""/>
+ </except>
+ </anyName>
+ </attribute>
+ </zeroOrMore>
+ </define>
+
+ <define name="other">
+ <zeroOrMore>
+ <element>
+ <anyName>
+ <except>
+ <nsName/>
+ </except>
+ </anyName>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="any"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </zeroOrMore>
+ </define>
+
+ <define name="any">
+ <element>
+ <anyName/>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="any"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+
+</grammar>
+
diff --git a/test/schemas/.memdump b/test/schemas/.memdump
new file mode 100644
index 0000000..0a6efc4
--- /dev/null
+++ b/test/schemas/.memdump
@@ -0,0 +1,4 @@
+ 01:13:40 PM
+
+ MEMORY ALLOCATED : 0, MAX was 28425
+BLOCK NUMBER SIZE TYPE
diff --git a/test/schemas/all.xsd b/test/schemas/all.xsd
new file mode 100644
index 0000000..b2e70e3
--- /dev/null
+++ b/test/schemas/all.xsd
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:complexType name="PurchaseOrderType">
+ <xsd:sequence>
+ <xsd:all>
+ <xsd:element name="shipTo" type="USAddress"/>
+ <xsd:element name="billTo" type="USAddress"/>
+ <xsd:element name="items" type="Items"/>
+ </xsd:all>
+ <xsd:sequence>
+ <xsd:element ref="comment" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:sequence>
+ <xsd:attribute name="orderDate" type="xsd:date"/>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/test/schemas/all1_0.xml b/test/schemas/all1_0.xml
new file mode 100644
index 0000000..f50088c
--- /dev/null
+++ b/test/schemas/all1_0.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<a>
+ <b/>
+</a>
diff --git a/test/schemas/all1_0.xsd b/test/schemas/all1_0.xsd
new file mode 100644
index 0000000..28fee0e
--- /dev/null
+++ b/test/schemas/all1_0.xsd
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:complexType name="A">
+ <xs:all>
+ <xs:element name="b" type="xs:string" minOccurs="0"/>
+ </xs:all>
+ </xs:complexType>
+
+ <xs:element name="a" type="A"/>
+</xs:schema>
diff --git a/test/schemas/all_0.xml b/test/schemas/all_0.xml
new file mode 100644
index 0000000..fb5b0fa
--- /dev/null
+++ b/test/schemas/all_0.xml
@@ -0,0 +1 @@
+<doc><a/><b/><c/></doc>
diff --git a/test/schemas/all_0.xsd b/test/schemas/all_0.xsd
new file mode 100644
index 0000000..55c04ee
--- /dev/null
+++ b/test/schemas/all_0.xsd
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="doc">
+ <xsd:complexType>
+ <xsd:all minOccurs="1">
+ <xsd:element name="a"/>
+ <xsd:element name="b"/>
+ <xsd:element name="c"/>
+ </xsd:all>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/all_1.xml b/test/schemas/all_1.xml
new file mode 100644
index 0000000..41d797e
--- /dev/null
+++ b/test/schemas/all_1.xml
@@ -0,0 +1,2 @@
+<doc><b/><c/><a/></doc>
+
diff --git a/test/schemas/all_1.xsd b/test/schemas/all_1.xsd
new file mode 100644
index 0000000..bc386f3
--- /dev/null
+++ b/test/schemas/all_1.xsd
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="doc">
+ <xsd:complexType>
+ <xsd:all minOccurs="0">
+ <xsd:element name="a"/>
+ <xsd:element name="b"/>
+ <xsd:element name="c"/>
+ </xsd:all>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/all_2.xml b/test/schemas/all_2.xml
new file mode 100644
index 0000000..cc1580b
--- /dev/null
+++ b/test/schemas/all_2.xml
@@ -0,0 +1 @@
+<doc><b/><a/><c/></doc>
diff --git a/test/schemas/all_2.xsd b/test/schemas/all_2.xsd
new file mode 100644
index 0000000..630b0df
--- /dev/null
+++ b/test/schemas/all_2.xsd
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="doc">
+ <xsd:complexType>
+ <xsd:all>
+ <xsd:element name="a"/>
+ <xsd:element minOccurs="0" name="b"/>
+ </xsd:all>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/all_3.xml b/test/schemas/all_3.xml
new file mode 100644
index 0000000..c011b3f
--- /dev/null
+++ b/test/schemas/all_3.xml
@@ -0,0 +1 @@
+<doc><a/><b/></doc>
diff --git a/test/schemas/all_4.xml b/test/schemas/all_4.xml
new file mode 100644
index 0000000..afa807c
--- /dev/null
+++ b/test/schemas/all_4.xml
@@ -0,0 +1 @@
+<doc></doc>
diff --git a/test/schemas/all_5.xml b/test/schemas/all_5.xml
new file mode 100644
index 0000000..d68f321
--- /dev/null
+++ b/test/schemas/all_5.xml
@@ -0,0 +1 @@
+<doc><a/><b/><a/></doc>
diff --git a/test/schemas/all_6.xml b/test/schemas/all_6.xml
new file mode 100644
index 0000000..7dd71b1
--- /dev/null
+++ b/test/schemas/all_6.xml
@@ -0,0 +1 @@
+<doc><a/></doc>
diff --git a/test/schemas/all_7.xml b/test/schemas/all_7.xml
new file mode 100644
index 0000000..c011b3f
--- /dev/null
+++ b/test/schemas/all_7.xml
@@ -0,0 +1 @@
+<doc><a/><b/></doc>
diff --git a/test/schemas/attr0_0.xml b/test/schemas/attr0_0.xml
new file mode 100644
index 0000000..cb5b1a6
--- /dev/null
+++ b/test/schemas/attr0_0.xml
@@ -0,0 +1 @@
+<foo id="abc"/>
diff --git a/test/schemas/attr0_0.xsd b/test/schemas/attr0_0.xsd
new file mode 100644
index 0000000..d2031ba
--- /dev/null
+++ b/test/schemas/attr0_0.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="foo">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
+
diff --git a/test/schemas/choice_0.xml b/test/schemas/choice_0.xml
new file mode 100644
index 0000000..677b039
--- /dev/null
+++ b/test/schemas/choice_0.xml
@@ -0,0 +1,3 @@
+<doc>
+<a/>
+</doc>
diff --git a/test/schemas/choice_0.xsd b/test/schemas/choice_0.xsd
new file mode 100644
index 0000000..1491b6b
--- /dev/null
+++ b/test/schemas/choice_0.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:element name="doc">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:choice minOccurs="1" maxOccurs="1">
+ <xs:element name="a"/>
+ <xs:element name="b"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/choice_1.xml b/test/schemas/choice_1.xml
new file mode 100644
index 0000000..d5c0dd1
--- /dev/null
+++ b/test/schemas/choice_1.xml
@@ -0,0 +1,3 @@
+<doc>
+<b/>
+</doc>
diff --git a/test/schemas/choice_1.xsd b/test/schemas/choice_1.xsd
new file mode 100644
index 0000000..00614d0
--- /dev/null
+++ b/test/schemas/choice_1.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:element name="doc">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="1">
+ <xs:element name="a"/>
+ <xs:element name="b"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/choice_2.xml b/test/schemas/choice_2.xml
new file mode 100644
index 0000000..7b27f17
--- /dev/null
+++ b/test/schemas/choice_2.xml
@@ -0,0 +1,4 @@
+<doc>
+<a/>
+<b/>
+</doc>
diff --git a/test/schemas/choice_2.xsd b/test/schemas/choice_2.xsd
new file mode 100644
index 0000000..9f2b094
--- /dev/null
+++ b/test/schemas/choice_2.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:element name="doc">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:choice minOccurs="1" maxOccurs="3">
+ <xs:element name="a"/>
+ <xs:element name="b"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/choice_3.xml b/test/schemas/choice_3.xml
new file mode 100644
index 0000000..0358109
--- /dev/null
+++ b/test/schemas/choice_3.xml
@@ -0,0 +1,4 @@
+<doc>
+<a/>
+<a/>
+</doc>
diff --git a/test/schemas/choice_4.xml b/test/schemas/choice_4.xml
new file mode 100644
index 0000000..636923c
--- /dev/null
+++ b/test/schemas/choice_4.xml
@@ -0,0 +1,2 @@
+<doc>
+</doc>
diff --git a/test/schemas/choice_5.xml b/test/schemas/choice_5.xml
new file mode 100644
index 0000000..3345a68
--- /dev/null
+++ b/test/schemas/choice_5.xml
@@ -0,0 +1,6 @@
+<doc>
+<a/>
+<b/>
+<a/>
+</doc>
+
diff --git a/test/schemas/choice_6.xml b/test/schemas/choice_6.xml
new file mode 100644
index 0000000..394153d
--- /dev/null
+++ b/test/schemas/choice_6.xml
@@ -0,0 +1,7 @@
+<doc>
+<a/>
+<b/>
+<a/>
+<a/>
+</doc>
+
diff --git a/test/schemas/date_0.xml b/test/schemas/date_0.xml
new file mode 100644
index 0000000..fbef1e5
--- /dev/null
+++ b/test/schemas/date_0.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<date>
+ <time>01:02:59</time>
+ <time1>01:02:59</time1>
+ <time2>12:59:59.0001</time2>
+ <time2>12:00:00</time2>
+ <date1>1996-05-20</date1>
+ <date1>2002-05-18</date1>
+ <date2>1996-05-19Z</date2>
+ <date2>2002-05-19Z</date2>
+ <date1>2002-05-18Z</date1>
+ <date1>2000-05-18Z</date1>
+ <dt1>2000-05-18T00:00:00</dt1>
+ <dt2>2002-05-19T21:30:00.99</dt2>
+ <hol>--01-01</hol>
+ <hol>--07-04</hol>
+ <hol>--12-25</hol>
+ <year1>2002</year1>
+ <yearmon1>2002-05</yearmon1>
+ <mon1>--05Z</mon1>
+ <day1>---31</day1>
+ <monthday1>--02-28Z</monthday1>
+ <monthday1>--12-31-06:00</monthday1>
+ <dt2>2003-04-30T18:00:00-06:00</dt2>
+</date>
diff --git a/test/schemas/date_0.xsd b/test/schemas/date_0.xsd
new file mode 100644
index 0000000..7247394
--- /dev/null
+++ b/test/schemas/date_0.xsd
@@ -0,0 +1,122 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:annotation>
+ <xsd:documentation xml:lang="en">
+ Testing date/time data types
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="date">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:choice minOccurs="1" maxOccurs="unbounded">
+ <xsd:element name="time" type="xsd:time"/>
+ <xsd:element name="time1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:time">
+ <xsd:maxInclusive value="23:59:59.9999999"/>
+ <xsd:minInclusive value="00:00:00"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="time2">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:time">
+ <xsd:maxInclusive value="13:50:50"/>
+ <xsd:minInclusive value="12:00:00"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="date1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:date">
+ <xsd:maxExclusive value="2002-05-19"/>
+ <xsd:minExclusive value="1996-05-19"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="date2">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:date">
+ <xsd:maxInclusive value="2002-05-19Z"/>
+ <xsd:minInclusive value="1996-05-19Z"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="dt1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:dateTime">
+ <xsd:maxExclusive value="2002-01-01T00:00:00Z"/>
+ <xsd:minExclusive value="1970-01-01T00:00:00Z"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="dt2">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:dateTime">
+ <xsd:maxInclusive value="2003-05-01T00:00:00Z"/>
+ <xsd:minInclusive value="1996-05-19T21:30:00Z"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="hol" type="holidays"/>
+ <xsd:element name="year1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:gYear">
+ <xsd:maxInclusive value="2003Z"/>
+ <xsd:minInclusive value="1996Z"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="yearmon1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:gYearMonth">
+ <xsd:maxInclusive value="2003-05Z"/>
+ <xsd:minInclusive value="1996-05Z"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="mon1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:gMonth">
+ <xsd:minInclusive value="--01Z"/>
+ <xsd:maxInclusive value="--05Z"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="day1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:gDay">
+ <xsd:minInclusive value="---28"/>
+ <xsd:maxInclusive value="---31"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="monthday1" type="xsd:gMonthDay"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:simpleType name='holidays'>
+ <xsd:annotation>
+ <xsd:documentation>some US holidays</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base='xsd:gMonthDay'>
+ <xsd:enumeration value='--01-01'>
+ <xsd:annotation>
+ <xsd:documentation>New Year's day</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value='--07-04'>
+ <xsd:annotation>
+ <xsd:documentation>4th of July</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value='--12-25'>
+ <xsd:annotation>
+ <xsd:documentation>Christmas</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema>
+
diff --git a/test/schemas/deter0_0.xml b/test/schemas/deter0_0.xml
new file mode 100644
index 0000000..0ea1a41
--- /dev/null
+++ b/test/schemas/deter0_0.xml
@@ -0,0 +1,5 @@
+<book>
+ <odd-page>first page</odd-page>
+ <even-page>second page</even-page>
+ <odd-page>third page</odd-page>
+</book>
diff --git a/test/schemas/deter0_0.xsd b/test/schemas/deter0_0.xsd
new file mode 100644
index 0000000..8b5da69
--- /dev/null
+++ b/test/schemas/deter0_0.xsd
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:element name="odd-page" type="xs:string"/>
+ <xs:element name="even-page" type="xs:string"/>
+ <xs:element name="book">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="odd-page"/>
+ <xs:element ref="even-page"/>
+ </xs:sequence>
+ <xs:element ref="odd-page" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/dur_0.xml b/test/schemas/dur_0.xml
new file mode 100644
index 0000000..be84943
--- /dev/null
+++ b/test/schemas/dur_0.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<duration>
+ <second1>PT0.9S</second1>
+ <second2>PT0.1S</second2>
+ <second2>PT0.999999S</second2>
+ <month1>P0Y27D</month1>
+ <month1>P27DT23H59M59S</month1>
+ <month2>P0Y</month2>
+ <year1>P367DT23H59M59S</year1>
+ <year1>P13M</year1>
+ <year2>P12M</year2>
+ <month3>PT86399S</month3>
+</duration>
diff --git a/test/schemas/dur_0.xsd b/test/schemas/dur_0.xsd
new file mode 100644
index 0000000..374c038
--- /dev/null
+++ b/test/schemas/dur_0.xsd
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:annotation>
+ <xsd:documentation xml:lang="en">
+ Testing duration data types
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="duration">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:choice minOccurs="1" maxOccurs="unbounded">
+ <xsd:element name="second1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:duration">
+ <xsd:maxExclusive value="PT1S"/>
+ <xsd:minExclusive value="PT0.1S"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="second2">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:duration">
+ <xsd:maxInclusive value="PT1S"/>
+ <xsd:minInclusive value="PT0.1S"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="month1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:duration">
+ <xsd:maxExclusive value="P1M"/>
+ <xsd:minExclusive value="P0M"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="month2">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:duration">
+ <xsd:maxInclusive value="P1M"/>
+ <xsd:minInclusive value="P0M"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="month3" type="MSD"/>
+ <xsd:element name="year1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:duration">
+ <xsd:maxExclusive value="P2Y"/>
+ <xsd:minExclusive value="P1Y"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="year2">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:duration">
+ <xsd:maxInclusive value="P2Y"/>
+ <xsd:minInclusive value="P1Y"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:simpleType name="MSD">
+ <xsd:restriction base="xsd:duration">
+ <xsd:maxExclusive value="PT24H"/>
+ <xsd:minExclusive value="-PT24H"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema>
+
diff --git a/test/schemas/elem0_0.xml b/test/schemas/elem0_0.xml
new file mode 100644
index 0000000..f741c58
--- /dev/null
+++ b/test/schemas/elem0_0.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<doc/>
+
diff --git a/test/schemas/elem0_0.xsd b/test/schemas/elem0_0.xsd
new file mode 100644
index 0000000..2c5bf5f
--- /dev/null
+++ b/test/schemas/elem0_0.xsd
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:annotation>
+ <xsd:documentation>
+ Testing min and max occurance attributes on element
+ </xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:element name="doc">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name='a' minOccurs='0' maxOccurs='3'/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/empty_0.xml b/test/schemas/empty_0.xml
new file mode 100644
index 0000000..e9906b7
--- /dev/null
+++ b/test/schemas/empty_0.xml
@@ -0,0 +1 @@
+<internationalPrice currency="EUR" value="423.46"/>
diff --git a/test/schemas/empty_0.xsd b/test/schemas/empty_0.xsd
new file mode 100644
index 0000000..76e5f45
--- /dev/null
+++ b/test/schemas/empty_0.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="internationalPrice">
+ <xsd:complexType>
+ <xsd:complexContent>
+ <xsd:restriction base="xsd:anyType">
+ <xsd:attribute name="currency" type="xsd:string"/>
+ <xsd:attribute name="value" type="xsd:decimal"/>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/empty_1.xsd b/test/schemas/empty_1.xsd
new file mode 100644
index 0000000..2c81c09
--- /dev/null
+++ b/test/schemas/empty_1.xsd
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="internationalPrice">
+ <xsd:complexType>
+ <xsd:attribute name="currency" type="xsd:string"/>
+ <xsd:attribute name="value" type="xsd:decimal"/>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/extension0_0.xml b/test/schemas/extension0_0.xml
new file mode 100644
index 0000000..60dd348
--- /dev/null
+++ b/test/schemas/extension0_0.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<addressee>
+ <forename>Albert</forename>
+ <forename>Arnold</forename>
+ <surname>Gore</surname>
+ <generation>Jr</generation>
+</addressee>
diff --git a/test/schemas/extension0_0.xsd b/test/schemas/extension0_0.xsd
new file mode 100644
index 0000000..d89751a
--- /dev/null
+++ b/test/schemas/extension0_0.xsd
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:complexType name="personName">
+ <xs:sequence>
+ <xs:element name="title" minOccurs="0"/>
+ <xs:element name="forename" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="surname"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="extendedName">
+ <xs:complexContent>
+ <xs:extension base="personName">
+ <xs:sequence>
+ <xs:element name="generation" minOccurs="0"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="addressee" type="extendedName"/>
+</xs:schema>
diff --git a/test/schemas/extension1_0.xml b/test/schemas/extension1_0.xml
new file mode 100644
index 0000000..5c3a0c9
--- /dev/null
+++ b/test/schemas/extension1_0.xml
@@ -0,0 +1 @@
+<title lang="fr">salut</title>
diff --git a/test/schemas/extension1_0.xsd b/test/schemas/extension1_0.xsd
new file mode 100644
index 0000000..0a11e14
--- /dev/null
+++ b/test/schemas/extension1_0.xsd
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:simpleType name="string255">
+ <xs:restriction base="xs:token">
+ <xs:maxLength value="255"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="title">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="string255">
+ <xs:attribute name="lang" type="xs:language"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/extension1_1.xml b/test/schemas/extension1_1.xml
new file mode 100644
index 0000000..7780cf6
--- /dev/null
+++ b/test/schemas/extension1_1.xml
@@ -0,0 +1 @@
+<title langue="fr">salut</title>
diff --git a/test/schemas/extension1_2.xml b/test/schemas/extension1_2.xml
new file mode 100644
index 0000000..3d65bb0
--- /dev/null
+++ b/test/schemas/extension1_2.xml
@@ -0,0 +1 @@
+<title lang="fr"><salut/></title>
diff --git a/test/schemas/group0_0.xml b/test/schemas/group0_0.xml
new file mode 100644
index 0000000..bf58ba6
--- /dev/null
+++ b/test/schemas/group0_0.xml
@@ -0,0 +1,3 @@
+<author>
+ <name>Foo Bar</name>
+</author>
diff --git a/test/schemas/group0_0.xsd b/test/schemas/group0_0.xsd
new file mode 100644
index 0000000..7dfa393
--- /dev/null
+++ b/test/schemas/group0_0.xsd
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:group name="name">
+ <xs:choice>
+ <xs:element name="name" type="xs:string"/>
+ <xs:sequence>
+ <xs:element name="first-name" type="xs:string"/>
+ <xs:element name="middle-name" type="xs:string" minOccurs="0"/>
+ <xs:element name="last-name" type="xs:string"/>
+ </xs:sequence>
+ </xs:choice>
+ </xs:group>
+ <xs:element name="author">
+ <xs:complexType>
+ <xs:group ref="name"/>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/hexbinary_0.xml b/test/schemas/hexbinary_0.xml
new file mode 100644
index 0000000..9513445
--- /dev/null
+++ b/test/schemas/hexbinary_0.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<xsd_hexBinary>
+ <hex>00</hex>
+ <hex>0123456789ABCDEF</hex>
+ <hex>abcdef0123456789</hex>
+ <hex>0123456789abcdef</hex>
+ <hex>0123456789ABCDEF</hex>
+ <hex>0123456789abcdef0123456789ABCDEF</hex>
+ <hex>0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF</hex>
+ <hex>01234567899876543210</hex>
+ <hex>00112233445566778899aAbBcCdDeEfF</hex>
+ <hex>A0B1C2D3E4F5</hex>
+ <!-- minLength and maxLength -->
+ <hex2>00</hex2>
+ <hex2>0000000000000000</hex2>
+ <hex2>1122334455667788</hex2>
+ <!-- length -->
+ <hex3>abcd</hex3>
+ <hex3>0ed0</hex3>
+</xsd_hexBinary>
diff --git a/test/schemas/hexbinary_0.xsd b/test/schemas/hexbinary_0.xsd
new file mode 100644
index 0000000..60a6bec
--- /dev/null
+++ b/test/schemas/hexbinary_0.xsd
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="unqualified"
+ attributeFormDefault="unqualified">
+ <xsd:annotation>
+ <xsd:documentation xml:lang="en">
+ Testing hexBinary data types
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="xsd_hexBinary">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:choice minOccurs="1" maxOccurs="unbounded">
+ <xsd:element name="hex" type="xsd:hexBinary"/>
+ <xsd:element name="hex2">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:hexBinary">
+ <xsd:maxLength value="8"/>
+ <xsd:minLength value="1"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="hex3">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:hexBinary">
+ <xsd:length value="2"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
+
diff --git a/test/schemas/hexbinary_1.xml b/test/schemas/hexbinary_1.xml
new file mode 100644
index 0000000..b9d6923
--- /dev/null
+++ b/test/schemas/hexbinary_1.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!-- all should fail to validate -->
+<xsd_hexBinary>
+ <hex></hex>
+ <hex/>
+ <hex>0</hex>
+ <hex>0123456789ABCDEFGH</hex>
+ <hex>+abcdef0123456789</hex>
+ <hex>-0123456789abcdef</hex>
+ <!-- minLength and maxLength -->
+ <hex2>112233445566778899</hex2>
+ <!-- length -->
+ <hex3>ab</hex3>
+ <hex3>00fedc</hex3>
+</xsd_hexBinary>
diff --git a/test/schemas/import0_0.imp b/test/schemas/import0_0.imp
new file mode 100644
index 0000000..ce446d8
--- /dev/null
+++ b/test/schemas/import0_0.imp
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema targetNamespace="http://example.net/xmlschema2"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://example.net/xmlschema2"
+ elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+<xs:simpleType name="tfoo">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:maxLength value="2"/>
+ </xs:restriction>
+</xs:simpleType>
+
+</xs:schema>
diff --git a/test/schemas/import0_0.xml b/test/schemas/import0_0.xml
new file mode 100644
index 0000000..5ba7e3f
--- /dev/null
+++ b/test/schemas/import0_0.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<bar xmlns="http://example.net/xmlschema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://example.net/xmlschema testImportTypes.xsd">
+ <foo1>
+ xy
+ </foo1>
+</bar>
diff --git a/test/schemas/import0_0.xsd b/test/schemas/import0_0.xsd
new file mode 100644
index 0000000..e973d64
--- /dev/null
+++ b/test/schemas/import0_0.xsd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema targetNamespace="http://example.net/xmlschema"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:ns1="http://example.net/xmlschema"
+ xmlns:ns2="http://example.net/xmlschema2"
+ xmlns="http://example.net/xmlschema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+<xs:import namespace="http://example.net/xmlschema2"
+ schemaLocation="import0_0.imp"/>
+
+<xs:element name="bar">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="foo1" type="ns2:tfoo"/>
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+
+
+</xs:schema>
diff --git a/test/schemas/item_0.xml b/test/schemas/item_0.xml
new file mode 100644
index 0000000..19d0790
--- /dev/null
+++ b/test/schemas/item_0.xml
@@ -0,0 +1,6 @@
+<Item partNum="926-AA" shipBy="air">
+<productName>foo</productName>
+<quantity>2</quantity>
+<USPrice>1.0</USPrice>
+<comment>No comment !</comment>
+</Item>
diff --git a/test/schemas/item_0.xsd b/test/schemas/item_0.xsd
new file mode 100644
index 0000000..3d95ef3
--- /dev/null
+++ b/test/schemas/item_0.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="comment" type="xsd:string"/>
+ <!-- Stock Keeping Unit, a code for identifying products -->
+ <xsd:simpleType name="SKU">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="\d{3}-[A-Z]{2}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="productName" type="xsd:string"/>
+ <xsd:element name="quantity">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:positiveInteger">
+ <xsd:maxExclusive value="100"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="USPrice" type="xsd:decimal"/>
+ <xsd:element ref="comment" minOccurs="0"/>
+ <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="partNum" type="SKU" use="required"/>
+ <!-- add weightKg and shipBy attributes -->
+ <xsd:attribute name="weightKg" type="xsd:decimal"/>
+ <xsd:attribute name="shipBy">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="air"/>
+ <xsd:enumeration value="land"/>
+ <xsd:enumeration value="any"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/item_1.xsd b/test/schemas/item_1.xsd
new file mode 100644
index 0000000..cea1f01
--- /dev/null
+++ b/test/schemas/item_1.xsd
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="comment" type="xsd:string"/>
+<!-- Stock Keeping Unit, a code for identifying products -->
+ <xsd:simpleType name="SKU">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="\d{3}-[A-Z]{2}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="productName" type="xsd:string"/>
+ <xsd:element name="quantity">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:positiveInteger">
+ <xsd:maxExclusive value="100"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="USPrice" type="xsd:decimal"/>
+ <xsd:element ref="comment" minOccurs="0"/>
+ <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
+ </xsd:sequence>
+<!-- attributeGroup replaces individual declarations -->
+ <xsd:attributeGroup ref="ItemDelivery"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:attributeGroup name="ItemDelivery">
+ <xsd:attribute name="partNum" type="SKU" use="required"/>
+ <xsd:attribute name="weightKg" type="xsd:decimal"/>
+ <xsd:attribute name="shipBy">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="air"/>
+ <xsd:enumeration value="land"/>
+ <xsd:enumeration value="any"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:attributeGroup>
+</xsd:schema>
diff --git a/test/schemas/length1_0.xml b/test/schemas/length1_0.xml
new file mode 100644
index 0000000..0a8cd3f
--- /dev/null
+++ b/test/schemas/length1_0.xml
@@ -0,0 +1 @@
+<width unit="cm">25</width>
diff --git a/test/schemas/length1_0.xsd b/test/schemas/length1_0.xsd
new file mode 100644
index 0000000..8a1ba0f
--- /dev/null
+++ b/test/schemas/length1_0.xsd
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:complexType name="length1">
+ <xs:simpleContent>
+ <xs:extension base="xs:nonNegativeInteger">
+ <xs:attribute name="unit" type="xs:NMTOKEN"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:element name="width" type="length1"/>
+</xs:schema>
diff --git a/test/schemas/length2_0.xml b/test/schemas/length2_0.xml
new file mode 100644
index 0000000..5c851da
--- /dev/null
+++ b/test/schemas/length2_0.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<depth>
+ <size>25</size>
+ <unit>cm</unit>
+</depth>
diff --git a/test/schemas/length2_0.xsd b/test/schemas/length2_0.xsd
new file mode 100644
index 0000000..76d73c0
--- /dev/null
+++ b/test/schemas/length2_0.xsd
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:complexType name="length2">
+ <xs:complexContent>
+ <xs:restriction base="xs:anyType">
+ <xs:sequence>
+ <xs:element name="size" type="xs:nonNegativeInteger"/>
+ <xs:element name="unit" type="xs:NMTOKEN"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="depth" type="length2"/>
+</xs:schema>
diff --git a/test/schemas/length3_0.xml b/test/schemas/length3_0.xml
new file mode 100644
index 0000000..5c851da
--- /dev/null
+++ b/test/schemas/length3_0.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<depth>
+ <size>25</size>
+ <unit>cm</unit>
+</depth>
diff --git a/test/schemas/length3_0.xsd b/test/schemas/length3_0.xsd
new file mode 100644
index 0000000..b97e688
--- /dev/null
+++ b/test/schemas/length3_0.xsd
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:complexType name="length3">
+ <xs:sequence>
+ <xs:element name="size" type="xs:non-positive-integer"/>
+ <xs:element name="unit" type="xs:NMTOKEN"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="depth" type="length3"/>
+</xs:schema>
diff --git a/test/schemas/list0_0.xml b/test/schemas/list0_0.xml
new file mode 100644
index 0000000..a58fe8b
--- /dev/null
+++ b/test/schemas/list0_0.xml
@@ -0,0 +1,6 @@
+<test>
+ <string>hello world</string>
+ <string>hello world</string>
+ <string>hello world</string>
+ <string>hello world</string>
+</test>
diff --git a/test/schemas/list0_0.xsd b/test/schemas/list0_0.xsd
new file mode 100644
index 0000000..33d7d66
--- /dev/null
+++ b/test/schemas/list0_0.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <xs:element name="test">
+ <xs:annotation>
+ <xs:documentation>Comment describing your root element</xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="string" type="xs:string" minOccurs="2" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/list0_1.xml b/test/schemas/list0_1.xml
new file mode 100644
index 0000000..8878e5d
--- /dev/null
+++ b/test/schemas/list0_1.xml
@@ -0,0 +1,3 @@
+<test>
+ <string>hello world</string>
+</test>
diff --git a/test/schemas/list0_1.xsd b/test/schemas/list0_1.xsd
new file mode 100644
index 0000000..8966075
--- /dev/null
+++ b/test/schemas/list0_1.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <xs:element name="test">
+ <xs:annotation>
+ <xs:documentation>Comment describing your root element</xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="string" type="xs:string" minOccurs="2" maxOccurs="3"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/list0_2.xml b/test/schemas/list0_2.xml
new file mode 100644
index 0000000..e94d481
--- /dev/null
+++ b/test/schemas/list0_2.xml
@@ -0,0 +1,4 @@
+<test>
+ <string>hello world</string>
+ <string>hello world</string>
+</test>
diff --git a/test/schemas/mixed0_0.xml b/test/schemas/mixed0_0.xml
new file mode 100644
index 0000000..5864343
--- /dev/null
+++ b/test/schemas/mixed0_0.xml
@@ -0,0 +1 @@
+<my>x</my>
diff --git a/test/schemas/mixed0_0.xsd b/test/schemas/mixed0_0.xsd
new file mode 100644
index 0000000..a82226e
--- /dev/null
+++ b/test/schemas/mixed0_0.xsd
@@ -0,0 +1,5 @@
+<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
+ <xs:element name='my'>
+ <xs:complexType mixed='true'/>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/mixed1_0.xml b/test/schemas/mixed1_0.xml
new file mode 100644
index 0000000..d8cf633
--- /dev/null
+++ b/test/schemas/mixed1_0.xml
@@ -0,0 +1 @@
+<my myattr='y'>x</my>
diff --git a/test/schemas/mixed1_0.xsd b/test/schemas/mixed1_0.xsd
new file mode 100644
index 0000000..a9ea6cc
--- /dev/null
+++ b/test/schemas/mixed1_0.xsd
@@ -0,0 +1,7 @@
+<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
+ <xs:element name='my'>
+ <xs:complexType mixed='true'>
+ <xs:attribute name='myattr' type='xs:string' use='required'/>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/ns0_0.xml b/test/schemas/ns0_0.xml
new file mode 100644
index 0000000..1cbaf1f
--- /dev/null
+++ b/test/schemas/ns0_0.xml
@@ -0,0 +1,2 @@
+<foo xmlns="http://example.com/xsd/ns" id="abc"/>
+
diff --git a/test/schemas/ns0_0.xsd b/test/schemas/ns0_0.xsd
new file mode 100644
index 0000000..38951d6
--- /dev/null
+++ b/test/schemas/ns0_0.xsd
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://example.com/xsd/ns"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified">
+ <xsd:element name="foo">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
+
diff --git a/test/schemas/ns0_1.xml b/test/schemas/ns0_1.xml
new file mode 100644
index 0000000..6550f5c
--- /dev/null
+++ b/test/schemas/ns0_1.xml
@@ -0,0 +1,2 @@
+<n:foo xmlns:n="http://example.com/xsd/ns" id="abc"/>
+
diff --git a/test/schemas/ns0_1.xsd b/test/schemas/ns0_1.xsd
new file mode 100644
index 0000000..df2e79a
--- /dev/null
+++ b/test/schemas/ns0_1.xsd
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://example.com/xsd/ns"
+ elementFormDefault="qualified"
+ attributeFormDefault="qualified">
+ <xsd:element name="foo">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="id" type="xsd:ID"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
+
diff --git a/test/schemas/ns0_2.xml b/test/schemas/ns0_2.xml
new file mode 100644
index 0000000..8f2bdba
--- /dev/null
+++ b/test/schemas/ns0_2.xml
@@ -0,0 +1,2 @@
+<foo id="abc"/>
+
diff --git a/test/schemas/ns0_3.xml b/test/schemas/ns0_3.xml
new file mode 100644
index 0000000..4c5c1e4
--- /dev/null
+++ b/test/schemas/ns0_3.xml
@@ -0,0 +1,2 @@
+<n:foo xmlns:n="http://example.com/xsd/ns" n:id="abc"/>
+
diff --git a/test/schemas/ns0_4.xml b/test/schemas/ns0_4.xml
new file mode 100644
index 0000000..dcdd418
--- /dev/null
+++ b/test/schemas/ns0_4.xml
@@ -0,0 +1,3 @@
+<l:foo xmlns:l="http://example.com/xsd/ns"
+ xmlns:b="http://example.com/xsd/ns" b:id="abc"/>
+
diff --git a/test/schemas/ns1_0.xml b/test/schemas/ns1_0.xml
new file mode 100644
index 0000000..410ed26
--- /dev/null
+++ b/test/schemas/ns1_0.xml
@@ -0,0 +1,2 @@
+<my xmlns='http://my.ns/'
+>some</my>
diff --git a/test/schemas/ns1_0.xsd b/test/schemas/ns1_0.xsd
new file mode 100644
index 0000000..a77ec57
--- /dev/null
+++ b/test/schemas/ns1_0.xsd
@@ -0,0 +1,3 @@
+<schema xmlns='http://www.w3.org/2001/XMLSchema' targetNamespace='http://my.ns/'>
+ <element name='my' type='string'/>
+</schema>
diff --git a/test/schemas/ns2_0.xml b/test/schemas/ns2_0.xml
new file mode 100644
index 0000000..c3bb126
--- /dev/null
+++ b/test/schemas/ns2_0.xml
@@ -0,0 +1 @@
+<m:my xmlns:m='http://my.ns/' m:other='1'>content</m:my>
diff --git a/test/schemas/ns2_0.xsd b/test/schemas/ns2_0.xsd
new file mode 100644
index 0000000..9393beb
--- /dev/null
+++ b/test/schemas/ns2_0.xsd
@@ -0,0 +1,15 @@
+<schema xmlns:my='http://my.ns/'
+ xmlns='http://www.w3.org/2001/XMLSchema'
+ targetNamespace='http://my.ns/'
+ >
+ <attribute name='other' type='string'/>
+ <element name='my'>
+ <complexType>
+ <simpleContent>
+ <extension base='string'>
+ <attribute ref='my:other'/>
+ </extension>
+ </simpleContent>
+ </complexType>
+ </element>
+</schema>
diff --git a/test/schemas/po0_0.xml b/test/schemas/po0_0.xml
new file mode 100644
index 0000000..387232d
--- /dev/null
+++ b/test/schemas/po0_0.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<purchaseOrder orderDate="1999-10-20">
+ <shipTo country="US">
+ <name>Alice Smith</name>
+ <street>123 Maple Street</street>
+ <city>Mill Valley</city>
+ <state>CA</state>
+ <zip>90952</zip>
+ </shipTo>
+ <billTo country="US">
+ <name>Robert Smith</name>
+ <street>8 Oak Avenue</street>
+ <city>Old Town</city>
+ <state>PA</state>
+ <zip>95819</zip>
+ </billTo>
+ <comment>Hurry, my lawn is going wild!</comment>
+ <items>
+ <item partNum="872-AA">
+ <productName>Lawnmower</productName>
+ <quantity>1</quantity>
+ <USPrice>148.95</USPrice>
+ <comment>Confirm this is electric</comment>
+ </item>
+ <item partNum="926-AA">
+ <productName>Baby Monitor</productName>
+ <quantity>1</quantity>
+ <USPrice>39.98</USPrice>
+ <shipDate>1999-05-21</shipDate>
+ </item>
+ </items>
+</purchaseOrder>
diff --git a/test/schemas/po0_0.xsd b/test/schemas/po0_0.xsd
new file mode 100644
index 0000000..5a1e660
--- /dev/null
+++ b/test/schemas/po0_0.xsd
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:annotation>
+ <xsd:documentation xml:lang="en">
+Purchase order schema for Example.com.
+ Copyright 2000 Example.com. All rights reserved.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
+ <xsd:element name="comment" type="xsd:string"/>
+ <xsd:complexType name="PurchaseOrderType">
+ <xsd:sequence>
+ <xsd:element name="shipTo" type="USAddress"/>
+ <xsd:element name="billTo" type="USAddress"/>
+ <xsd:element ref="comment" minOccurs="0"/>
+ <xsd:element name="items" type="Items"/>
+ </xsd:sequence>
+ <xsd:attribute name="orderDate" type="xsd:date"/>
+ </xsd:complexType>
+ <xsd:complexType name="USAddress">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="street" type="xsd:string"/>
+ <xsd:element name="city" type="xsd:string"/>
+ <xsd:element name="state" type="xsd:string"/>
+ <xsd:element name="zip" type="xsd:decimal"/>
+ </xsd:sequence>
+ <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
+ </xsd:complexType>
+ <xsd:complexType name="Items">
+ <xsd:sequence>
+ <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="productName" type="xsd:string"/>
+ <xsd:element name="quantity">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:positiveInteger">
+ <xsd:maxExclusive value="100"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="USPrice" type="xsd:decimal"/>
+ <xsd:element ref="comment" minOccurs="0"/>
+ <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="partNum" type="SKU" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+<!-- Stock Keeping Unit, a code for identifying products -->
+ <xsd:simpleType name="SKU">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="\d{3}-[A-Z]{2}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema>
+
diff --git a/test/schemas/po1_0.xml b/test/schemas/po1_0.xml
new file mode 100644
index 0000000..eb8dac6
--- /dev/null
+++ b/test/schemas/po1_0.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<apo:purchaseOrder xmlns:apo="http://www.example.com/PO1"
+ orderDate="1999-10-20">
+ <shipTo country="US">
+ <name>Alice Smith</name>
+ <street>123 Maple Street</street>
+ <city>Mill Valley</city>
+ <state>CA</state>
+ <zip>90952</zip>
+ </shipTo>
+ <billTo country="US">
+ <name>Robert Smith</name>
+ <street>8 Oak Avenue</street>
+ <city>Old Town</city>
+ <state>PA</state>
+ <zip>95819</zip>
+ </billTo>
+ <apo:comment>Hurry, my lawn is going wild!</apo:comment>
+ <items>
+ <item partNum="872-AA">
+ <productName>Lawnmower</productName>
+ <quantity>1</quantity>
+ <USPrice>148.95</USPrice>
+ <comment>Confirm this is electric</comment>
+ </item>
+ <item partNum="926-AA">
+ <productName>Baby Monitor</productName>
+ <quantity>1</quantity>
+ <USPrice>39.98</USPrice>
+ <shipDate>1999-05-21</shipDate>
+ </item>
+ </items>
+</apo:purchaseOrder>
diff --git a/test/schemas/po1_0.xsd b/test/schemas/po1_0.xsd
new file mode 100644
index 0000000..84f45a7
--- /dev/null
+++ b/test/schemas/po1_0.xsd
@@ -0,0 +1,63 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:po="http://www.example.com/PO1"
+ targetNamespace="http://www.example.com/PO1"
+ elementFormDefault="unqualified"
+ attributeFormDefault="unqualified">
+ <xsd:annotation>
+ <xsd:documentation xml:lang="en">
+Purchase order schema for Example.com.
+ Copyright 2000 Example.com. All rights reserved.
+ </xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="purchaseOrder" type="po:PurchaseOrderType"/>
+ <xsd:element name="comment" type="xsd:string"/>
+ <xsd:complexType name="PurchaseOrderType">
+ <xsd:sequence>
+ <xsd:element name="shipTo" type="po:USAddress"/>
+ <xsd:element name="billTo" type="po:USAddress"/>
+ <xsd:element ref="comment" minOccurs="0"/>
+ <xsd:element name="items" type="po:Items"/>
+ </xsd:sequence>
+ <xsd:attribute name="orderDate" type="xsd:date"/>
+ </xsd:complexType>
+ <xsd:complexType name="USAddress">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="street" type="xsd:string"/>
+ <xsd:element name="city" type="xsd:string"/>
+ <xsd:element name="state" type="xsd:string"/>
+ <xsd:element name="zip" type="xsd:decimal"/>
+ </xsd:sequence>
+ <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
+ </xsd:complexType>
+ <xsd:complexType name="Items">
+ <xsd:sequence>
+ <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="productName" type="xsd:string"/>
+ <xsd:element name="quantity">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:positiveInteger">
+ <xsd:maxExclusive value="100"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="USPrice" type="xsd:decimal"/>
+ <xsd:element ref="comment" minOccurs="0"/>
+ <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="partNum" type="po:SKU" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+<!-- Stock Keeping Unit, a code for identifying products -->
+ <xsd:simpleType name="SKU">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="\d{3}-[A-Z]{2}"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema>
+
diff --git a/test/schemas/restriction0_0.xml b/test/schemas/restriction0_0.xml
new file mode 100644
index 0000000..8656d2c
--- /dev/null
+++ b/test/schemas/restriction0_0.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<who>
+ <forename>Bill</forename>
+ <surname>Clinton</surname>
+</who>
diff --git a/test/schemas/restriction0_0.xsd b/test/schemas/restriction0_0.xsd
new file mode 100644
index 0000000..6b35b9f
--- /dev/null
+++ b/test/schemas/restriction0_0.xsd
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:complexType name="personName">
+ <xs:sequence>
+ <xs:element name="title" minOccurs="0"/>
+ <xs:element name="forename" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="surname"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="simpleName">
+ <xs:complexContent>
+ <xs:restriction base="personName">
+ <xs:sequence>
+ <xs:element name="forename" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="surname"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="who" type="simpleName"/>
+</xs:schema>
diff --git a/test/schemas/seq0_0.xml b/test/schemas/seq0_0.xml
new file mode 100644
index 0000000..54b1c1c
--- /dev/null
+++ b/test/schemas/seq0_0.xml
@@ -0,0 +1,61 @@
+<doc>
+ <!-- at least one present -->
+ <z-o>
+ <b/>
+ </z-o>
+ <o-o>
+ <c/>
+ </o-o>
+ <z-u>
+ <d/>
+ </z-u>
+ <o-u>
+ <e/>
+ </o-u>
+ <z-3>
+ <f/>
+ </z-3>
+ <o-3>
+ <g/>
+ </o-3>
+ <!-- more than one present when allowed -->
+ <z-o>
+ <b/>
+ </z-o>
+ <o-o>
+ <c/>
+ </o-o>
+ <z-u>
+ <d/>
+ <d/>
+ <d/>
+ </z-u>
+ <o-u>
+ <e/>
+ <e/>
+ <e/>
+ </o-u>
+ <z-3>
+ <f/>
+ <f/>
+ <f/>
+ </z-3>
+ <o-3>
+ <g/>
+ <g/>
+ <g/>
+ </o-3>
+ <!-- min 0 are not present -->
+ <z-o/>
+ <o-o>
+ <c/>
+ </o-o>
+ <z-u/>
+ <o-u>
+ <e/>
+ </o-u>
+ <z-3/>
+ <o-3>
+ <g/>
+ </o-3>
+</doc>
diff --git a/test/schemas/seq0_0.xsd b/test/schemas/seq0_0.xsd
new file mode 100644
index 0000000..34d3a78
--- /dev/null
+++ b/test/schemas/seq0_0.xsd
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:annotation>
+ <xsd:documentation>
+ Testing min and max occurance attributes on sequences
+ </xsd:documentation>
+ </xsd:annotation>
+
+ <xsd:element name="doc">
+ <xsd:complexType>
+ <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
+
+ <xsd:element name="z-o">
+ <xsd:complexType>
+ <xsd:sequence minOccurs='0' maxOccurs='1'>
+ <xsd:element name='b'/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="o-o">
+ <xsd:complexType>
+ <xsd:sequence minOccurs='1' maxOccurs='1'>
+ <xsd:element name='c'/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="z-u">
+ <xsd:complexType>
+ <xsd:sequence minOccurs='0' maxOccurs='unbounded'>
+ <xsd:element name='d'/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="o-u">
+ <xsd:complexType>
+ <xsd:sequence minOccurs='1' maxOccurs='unbounded'>
+ <xsd:element name='e'/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="z-3">
+ <xsd:complexType>
+ <xsd:sequence minOccurs='0' maxOccurs='3'>
+ <xsd:element name='f'/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="o-3">
+ <xsd:complexType>
+ <xsd:sequence minOccurs='1' maxOccurs='3'>
+ <xsd:element name='g'/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/vdv-complexTypes.xsd b/test/schemas/vdv-complexTypes.xsd
new file mode 100644
index 0000000..c320e6d
--- /dev/null
+++ b/test/schemas/vdv-complexTypes.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-complexTypes.xsd,v 1.1 2003/11/25 15:38:59 veillard Exp $ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+
+ <xs:complexType name="elementWithID">
+ <xs:attribute ref="id"/>
+ </xs:complexType>
+ <xs:complexType name="bookTmp">
+ <xs:complexContent>
+ <xs:extension base="elementWithID">
+ <xs:sequence>
+ <xs:element ref="isbn"/>
+ <xs:element ref="title"/>
+ <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute ref="available"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:complexType name="personType">
+ <xs:complexContent>
+ <xs:extension base="elementWithID">
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="dead" minOccurs="0"/>
+ <xs:element ref="qualification" minOccurs="0"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+
+</xs:schema>
diff --git a/test/schemas/vdv-first0_0.xml b/test/schemas/vdv-first0_0.xml
new file mode 100644
index 0000000..7d4e662
--- /dev/null
+++ b/test/schemas/vdv-first0_0.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first0_0.xml,v 1.1 2003/11/22 20:37:51 veillard Exp $ -->
+<library>
+ <book id="b0836217462" available="true">
+ <isbn>0836217462</isbn>
+ <title lang="en">Being a Dog Is a Full-Time Job</title>
+ <author id="CMS">
+ <name>Charles M Schulz</name>
+ <born>1922-11-26</born>
+ <dead>2000-02-12</dead>
+ </author>
+ <character id="PP">
+ <name>Peppermint Patty</name>
+ <born>1966-08-22</born>
+ <qualification>bold, brash and tomboyish</qualification>
+ </character>
+ <character id="Snoopy">
+ <name>Snoopy</name>
+ <born>1950-10-04</born>
+ <qualification>extroverted beagle</qualification>
+ </character>
+ <character id="Schroeder">
+ <name>Schroeder</name>
+ <born>1951-05-30</born>
+ <qualification>brought classical music to the Peanuts strip</qualification>
+ </character>
+ <character id="Lucy">
+ <name>Lucy</name>
+ <born>1952-03-03</born>
+ <qualification>bossy, crabby and selfish</qualification>
+ </character>
+ </book>
+</library>
diff --git a/test/schemas/vdv-first0_0.xsd b/test/schemas/vdv-first0_0.xsd
new file mode 100644
index 0000000..e58bed2
--- /dev/null
+++ b/test/schemas/vdv-first0_0.xsd
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="qualification" type="xs:string"/>
+ <xs:element name="born" type="xs:date"/>
+ <xs:element name="dead" type="xs:date"/>
+ <xs:element name="isbn" type="xs:integer"/>
+
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="available" type="xs:boolean"/>
+ <xs:attribute name="lang" type="xs:language"/>
+
+ <xs:element name="title">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute ref="lang"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="library">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="book" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="author">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="dead" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="book">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="isbn"/>
+ <xs:element ref="title"/>
+ <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ <xs:attribute ref="available"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="character">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="qualification"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
diff --git a/test/schemas/vdv-first1_0.xml b/test/schemas/vdv-first1_0.xml
new file mode 100644
index 0000000..10f0409
--- /dev/null
+++ b/test/schemas/vdv-first1_0.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first1_0.xml,v 1.1 2003/11/22 20:37:51 veillard Exp $ -->
+<library>
+ <book id="b0836217462" available="true">
+ <isbn>0836217462</isbn>
+ <title lang="en">Being a Dog Is a Full-Time Job</title>
+ <author id="CMS">
+ <name>Charles M Schulz</name>
+ <born>1922-11-26</born>
+ <dead>2000-02-12</dead>
+ </author>
+ <character id="PP">
+ <name>Peppermint Patty</name>
+ <born>1966-08-22</born>
+ <qualification>bold, brash and tomboyish</qualification>
+ </character>
+ <character id="Snoopy">
+ <name>Snoopy</name>
+ <born>1950-10-04</born>
+ <qualification>extroverted beagle</qualification>
+ </character>
+ <character id="Schroeder">
+ <name>Schroeder</name>
+ <born>1951-05-30</born>
+ <qualification>brought classical music to the Peanuts strip</qualification>
+ </character>
+ <character id="Lucy">
+ <name>Lucy</name>
+ <born>1952-03-03</born>
+ <qualification>bossy, crabby and selfish</qualification>
+ </character>
+ </book>
+</library>
diff --git a/test/schemas/vdv-first1_0.xsd b/test/schemas/vdv-first1_0.xsd
new file mode 100644
index 0000000..c0d6f27
--- /dev/null
+++ b/test/schemas/vdv-first1_0.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:element name="library">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="book" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="isbn" type="xs:integer"/>
+ <xs:element name="title">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="lang" type="xs:language"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="author" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="born" type="xs:date"/>
+ <xs:element name="dead" type="xs:date"/>
+ </xs:sequence>
+ <xs:attribute name="id" type="xs:ID"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="character" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="born" type="xs:date"/>
+ <xs:element name="qualification" type="xs:string"/>
+ </xs:sequence>
+ <xs:attribute name="id" type="xs:ID"/>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="available" type="xs:boolean"/>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/vdv-first2_0.xml b/test/schemas/vdv-first2_0.xml
new file mode 100644
index 0000000..b652536
--- /dev/null
+++ b/test/schemas/vdv-first2_0.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first2_0.xml,v 1.1 2003/11/22 20:37:51 veillard Exp $ -->
+<library>
+ <book id="b0836217462" available="true">
+ <isbn>0836217462</isbn>
+ <title lang="en">Being a Dog Is a Full-Time Job</title>
+ <author id="CMS">
+ <name>Charles M Schulz</name>
+ <born>1922-11-26</born>
+ <dead>2000-02-12</dead>
+ </author>
+ <character id="PP">
+ <name>Peppermint Patty</name>
+ <born>1966-08-22</born>
+ <qualification>bold, brash and tomboyish</qualification>
+ </character>
+ <character id="Snoopy">
+ <name>Snoopy</name>
+ <born>1950-10-04</born>
+ <qualification>extroverted beagle</qualification>
+ </character>
+ <character id="Schroeder">
+ <name>Schroeder</name>
+ <born>1951-05-30</born>
+ <qualification>brought classical music to the Peanuts strip</qualification>
+ </character>
+ <character id="Lucy">
+ <name>Lucy</name>
+ <born>1952-03-03</born>
+ <qualification>bossy, crabby and selfish</qualification>
+ </character>
+ </book>
+</library>
diff --git a/test/schemas/vdv-first2_0.xsd b/test/schemas/vdv-first2_0.xsd
new file mode 100644
index 0000000..5e34e33
--- /dev/null
+++ b/test/schemas/vdv-first2_0.xsd
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first2_0.xsd,v 1.1 2003/11/22 20:37:51 veillard Exp $ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:simpleType name="string255">
+ <xs:restriction base="xs:token">
+ <xs:maxLength value="255"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="string32">
+ <xs:restriction base="xs:token">
+ <xs:maxLength value="32"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="isbn">
+ <xs:restriction base="xs:unsignedLong">
+ <xs:totalDigits value="10"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="supportedLanguages">
+ <xs:restriction base="xs:language">
+ <xs:enumeration value="en"/>
+ <xs:enumeration value="es"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="name" type="string32"/>
+ <xs:element name="qualification" type="string255"/>
+ <xs:element name="born" type="xs:date"/>
+ <xs:element name="dead" type="xs:date"/>
+ <xs:element name="isbn" type="isbn"/>
+
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="available" type="xs:boolean"/>
+ <xs:attribute name="lang" type="supportedLanguages"/>
+
+ <xs:element name="title">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="string255">
+ <xs:attribute ref="lang"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="library">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="book" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="author">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="dead" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="book">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="isbn"/>
+ <xs:element ref="title"/>
+ <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ <xs:attribute ref="available"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="character">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="qualification"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
diff --git a/test/schemas/vdv-first3_0.xml b/test/schemas/vdv-first3_0.xml
new file mode 100644
index 0000000..0b2d7e2
--- /dev/null
+++ b/test/schemas/vdv-first3_0.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first3_0.xml,v 1.1 2003/11/22 20:37:51 veillard Exp $ -->
+<library>
+ <book id="b0836217462" available="true">
+ <isbn>0836217462</isbn>
+ <title lang="en">Being a Dog Is a Full-Time Job</title>
+ <author id="CMS">
+ <name>Charles M Schulz</name>
+ <born>1922-11-26</born>
+ <dead>2000-02-12</dead>
+ </author>
+ <character id="PP">
+ <name>Peppermint Patty</name>
+ <born>1966-08-22</born>
+ <qualification>bold, brash and tomboyish</qualification>
+ </character>
+ <character id="Snoopy">
+ <name>Snoopy</name>
+ <born>1950-10-04</born>
+ <qualification>extroverted beagle</qualification>
+ </character>
+ <character id="Schroeder">
+ <name>Schroeder</name>
+ <born>1951-05-30</born>
+ <qualification>brought classical music to the Peanuts strip</qualification>
+ </character>
+ <character id="Lucy">
+ <name>Lucy</name>
+ <born>1952-03-03</born>
+ <qualification>bossy, crabby and selfish</qualification>
+ </character>
+ </book>
+</library>
diff --git a/test/schemas/vdv-first3_0.xsd b/test/schemas/vdv-first3_0.xsd
new file mode 100644
index 0000000..6fd44d6
--- /dev/null
+++ b/test/schemas/vdv-first3_0.xsd
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first3_0.xsd,v 1.1 2003/11/22 20:37:51 veillard Exp $ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="name" type="xs:token"/>
+ <xs:element name="qualification" type="xs:token"/>
+ <xs:element name="born" type="xs:date"/>
+ <xs:element name="dead" type="xs:date"/>
+ <xs:element name="isbn" type="xs:unsignedLong"/>
+
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="available" type="xs:boolean"/>
+ <xs:attribute name="lang" type="xs:language"/>
+
+ <xs:element name="title">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:token">
+ <xs:attribute ref="lang"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="library">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="book" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="author">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="dead" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="book">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="isbn"/>
+ <xs:element ref="title"/>
+ <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ <xs:attribute ref="available"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="character">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="qualification"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
diff --git a/test/schemas/vdv-first4_0.xml b/test/schemas/vdv-first4_0.xml
new file mode 100644
index 0000000..b44164d
--- /dev/null
+++ b/test/schemas/vdv-first4_0.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first4_0.xml,v 1.1 2003/11/24 13:04:35 veillard Exp $ -->
+<library>
+ <book id="b0836217462" available="true">
+ <isbn>0836217462</isbn>
+ <title lang="en">Being a Dog Is a Full-Time Job</title>
+ <author id="CMS">
+ <name>Charles M Schulz</name>
+ <born>1922-11-26</born>
+ <dead>2000-02-12</dead>
+ </author>
+ <character id="PP">
+ <name>Peppermint Patty</name>
+ <born>1966-08-22</born>
+ <qualification>bold, brash and tomboyish</qualification>
+ </character>
+ <character id="Snoopy">
+ <name>Snoopy</name>
+ <born>1950-10-04</born>
+ <qualification>extroverted beagle</qualification>
+ </character>
+ <character id="Schroeder">
+ <name>Schroeder</name>
+ <born>1951-05-30</born>
+ <qualification>brought classical music to the Peanuts strip</qualification>
+ </character>
+ <character id="Lucy">
+ <name>Lucy</name>
+ <born>1952-03-03</born>
+ <qualification>bossy, crabby and selfish</qualification>
+ </character>
+ </book>
+</library>
diff --git a/test/schemas/vdv-first4_0.xsd b/test/schemas/vdv-first4_0.xsd
new file mode 100644
index 0000000..913a310
--- /dev/null
+++ b/test/schemas/vdv-first4_0.xsd
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first4_0.xsd,v 1.1 2003/11/24 13:04:35 veillard Exp $ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:simpleType name="string255">
+ <xs:restriction base="xs:token">
+ <xs:maxLength value="255"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="string32">
+ <xs:restriction base="xs:token">
+ <xs:maxLength value="32"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="isbn">
+ <xs:restriction base="xs:unsignedLong">
+ <xs:totalDigits value="10"/>
+ <xs:pattern value="\d{10}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="bookID">
+ <xs:restriction base="xs:ID">
+ <xs:pattern value="b\d{10}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="supportedLanguages">
+ <xs:restriction base="xs:language">
+ <xs:enumeration value="en"/>
+ <xs:enumeration value="es"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="date">
+ <xs:restriction base="xs:date">
+ <xs:pattern value="[^:Z]*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="name" type="string32"/>
+ <xs:element name="qualification" type="string255"/>
+ <xs:element name="born" type="date"/>
+ <xs:element name="dead" type="date"/>
+ <xs:element name="isbn" type="isbn"/>
+
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="available" type="xs:boolean"/>
+ <xs:attribute name="lang" type="supportedLanguages"/>
+
+ <xs:complexType name="elementWithID">
+ <xs:attribute ref="id"/>
+ </xs:complexType>
+
+ <xs:complexType name="bookTmp">
+ <xs:complexContent>
+ <xs:extension base="elementWithID">
+ <xs:sequence>
+ <xs:element ref="isbn"/>
+ <xs:element ref="title"/>
+ <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute ref="available"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:complexType name="personType">
+ <xs:complexContent>
+ <xs:extension base="elementWithID">
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="dead" minOccurs="0"/>
+ <xs:element ref="qualification" minOccurs="0"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:element name="title">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="string255">
+ <xs:attribute ref="lang"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="library">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="book" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="book">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:restriction base="bookTmp">
+ <xs:sequence>
+ <xs:element ref="isbn"/>
+ <xs:element ref="title"/>
+ <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="id" type="bookID"/>
+ <xs:attribute ref="available"/>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="author">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:restriction base="personType">
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="dead" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+
+ <xs:element name="character">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:restriction base="personType">
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="qualification"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
diff --git a/test/schemas/vdv-first4_1.xml b/test/schemas/vdv-first4_1.xml
new file mode 100644
index 0000000..535b48f
--- /dev/null
+++ b/test/schemas/vdv-first4_1.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first4_1.xml,v 1.1 2003/11/24 13:04:35 veillard Exp $ -->
+<library>
+ <book id="b0836217462" available="true">
+ <isbn>0836217462</isbn>
+ <title lang="en">Being a Dog Is a Full-Time Job</title>
+ <author id="CMS">
+ <name>Charles M Schulz</name>
+ <born>1922-11-26</born>
+ <dead>2000-02-12</dead>
+ </author>
+ <character id="PP">
+ <name>Peppermint Patty</name>
+ <born>196T6-08-22</born>
+ <qualification>bold, brash and tomboyish</qualification>
+ </character>
+ <character id="Snoopy">
+ <name>Snoopy</name>
+ <born>1950-10-04</born>
+ <qualification>extroverted beagle</qualification>
+ </character>
+ <character id="Schroeder">
+ <name>Schroeder</name>
+ <born>1951-05-30</born>
+ <qualification>brought classical music to the Peanuts strip</qualification>
+ </character>
+ <character id="Lucy">
+ <name>Lucy</name>
+ <born>1952-03-03</born>
+ <qualification>bossy, crabby and selfish</qualification>
+ </character>
+ </book>
+</library>
diff --git a/test/schemas/vdv-first4_2.xml b/test/schemas/vdv-first4_2.xml
new file mode 100644
index 0000000..29b2c0e
--- /dev/null
+++ b/test/schemas/vdv-first4_2.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first4_2.xml,v 1.1 2003/11/24 13:04:35 veillard Exp $ -->
+<library>
+ <book id="b0836217462" available="true">
+ <isbn>0836217462</isbn>
+ <title lang="en">Being a Dog Is a Full-Time Job</title>
+ <author id="CMS">
+ <name>Charles M Schulz</name>
+ <born>1922-11-26</born>
+ <dead>2000-02-12</dead>
+ </author>
+ <character id="PP">
+ <name>Peppermint Patty</name>
+ <born>1966-08-22</born>
+ <qualification>bold, brash and tomboyish</qualification>
+ </character>
+ <character id="Snoopy">
+ <name>Snoopy</name>
+ <born>1950-10-04</born>
+ <qualification>extroverted beagle</qualification>
+ </character>
+ <character id="Schroeder">
+ <name>Schroeder</name>
+ <born>2000-01-20Z</born>
+ <qualification>brought classical music to the Peanuts strip</qualification>
+ </character>
+ <character id="Lucy">
+ <name>Lucy</name>
+ <born>1952-03-03</born>
+ <qualification>bossy, crabby and selfish</qualification>
+ </character>
+ </book>
+</library>
diff --git a/test/schemas/vdv-first5_0.xml b/test/schemas/vdv-first5_0.xml
new file mode 100644
index 0000000..1404219
--- /dev/null
+++ b/test/schemas/vdv-first5_0.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first5_0.xml,v 1.1 2003/11/25 15:38:59 veillard Exp $ -->
+<library>
+ <book id="b0836217462" available="true">
+ <isbn>0836217462</isbn>
+ <title lang="en">Being a Dog Is a Full-Time Job</title>
+ <author id="CMS">
+ <name>Charles M Schulz</name>
+ <born>1922-11-26</born>
+ <dead>2000-02-12</dead>
+ </author>
+ <character id="PP">
+ <name>Peppermint Patty</name>
+ <born>1966-08-22</born>
+ <qualification>bold, brash and tomboyish</qualification>
+ </character>
+ <character id="Snoopy">
+ <name>Snoopy</name>
+ <born>1950-10-04</born>
+ <qualification>extroverted beagle</qualification>
+ </character>
+ <character id="Schroeder">
+ <name>Schroeder</name>
+ <born>1951-05-30</born>
+ <qualification>brought classical music to the Peanuts strip</qualification>
+ </character>
+ <character id="Lucy">
+ <name>Lucy</name>
+ <born>1952-03-03</born>
+ <qualification>bossy, crabby and selfish</qualification>
+ </character>
+ </book>
+</library>
diff --git a/test/schemas/vdv-first5_0.xsd b/test/schemas/vdv-first5_0.xsd
new file mode 100644
index 0000000..bb9b7ef
--- /dev/null
+++ b/test/schemas/vdv-first5_0.xsd
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-first5_0.xsd,v 1.1 2003/11/25 15:38:59 veillard Exp $ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+<xs:include schemaLocation="vdv-simpleTypes.xsd"/>
+<xs:include schemaLocation="vdv-complexTypes.xsd"/>
+
+ <xs:element name="name" type="string32"/>
+ <xs:element name="qualification" type="string255"/>
+ <xs:element name="born" type="date"/>
+ <xs:element name="dead" type="date"/>
+ <xs:element name="isbn" type="isbn"/>
+
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="available" type="xs:boolean"/>
+ <xs:attribute name="lang" type="supportedLanguages"/>
+
+
+ <xs:element name="title">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="string255">
+ <xs:attribute ref="lang"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="library">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="book" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="book">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:restriction base="bookTmp">
+ <xs:sequence>
+ <xs:element ref="isbn"/>
+ <xs:element ref="title"/>
+ <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="id" type="bookID"/>
+ <xs:attribute ref="available"/>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="author">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:restriction base="personType">
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="dead" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+
+ <xs:element name="character">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:restriction base="personType">
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element ref="born"/>
+ <xs:element ref="qualification"/>
+ </xs:sequence>
+ <xs:attribute ref="id"/>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
diff --git a/test/schemas/vdv-simpleTypes.xsd b/test/schemas/vdv-simpleTypes.xsd
new file mode 100644
index 0000000..68f7c82
--- /dev/null
+++ b/test/schemas/vdv-simpleTypes.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Header: /cvs/gnome/gnome-xml/test/schemas/vdv-simpleTypes.xsd,v 1.1 2003/11/25 15:38:59 veillard Exp $ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:simpleType name="string255">
+ <xs:restriction base="xs:token">
+ <xs:maxLength value="255"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="string32">
+ <xs:restriction base="xs:token">
+ <xs:maxLength value="32"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="isbn">
+ <xs:restriction base="xs:unsignedLong">
+ <xs:totalDigits value="10"/>
+ <xs:pattern value="\d{10}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="bookID">
+ <xs:restriction base="xs:ID">
+ <xs:pattern value="b\d{10}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="supportedLanguages">
+ <xs:restriction base="xs:language">
+ <xs:enumeration value="en"/>
+ <xs:enumeration value="es"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="date">
+ <xs:restriction base="xs:date">
+ <xs:pattern value="[^:Z]*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+</xs:schema>
diff --git a/test/scripts/.memdump b/test/scripts/.memdump
new file mode 100644
index 0000000..65b5fcc
--- /dev/null
+++ b/test/scripts/.memdump
@@ -0,0 +1,4 @@
+ 05:38:46 PM
+
+ MEMORY ALLOCATED : 0, MAX was 15611
+BLOCK NUMBER SIZE TYPE
diff --git a/test/scripts/base.script b/test/scripts/base.script
new file mode 100644
index 0000000..1fc3f57
--- /dev/null
+++ b/test/scripts/base.script
@@ -0,0 +1,7 @@
+base
+cd //e
+base
+cd .//img
+base
+exit
+
diff --git a/test/scripts/base.xml b/test/scripts/base.xml
new file mode 100644
index 0000000..81f71cb
--- /dev/null
+++ b/test/scripts/base.xml
@@ -0,0 +1,7 @@
+<doc>
+ <e xml:base="http://example.com/base/">
+ <images xml:base="images/">
+ <img href="img1.gif"/>
+ </images>
+ </e>
+</doc>
diff --git a/test/scripts/base2.script b/test/scripts/base2.script
new file mode 100644
index 0000000..1fc3f57
--- /dev/null
+++ b/test/scripts/base2.script
@@ -0,0 +1,7 @@
+base
+cd //e
+base
+cd .//img
+base
+exit
+
diff --git a/test/scripts/base2.xml b/test/scripts/base2.xml
new file mode 100644
index 0000000..0e92a10
--- /dev/null
+++ b/test/scripts/base2.xml
@@ -0,0 +1,7 @@
+<doc>
+ <e xml:base="html/">
+ <images xml:base="../images/">
+ <img href="img1.gif"/>
+ </images>
+ </e>
+</doc>
diff --git a/test/slashdot.rdf b/test/slashdot.rdf
new file mode 100644
index 0000000..a7a624c
--- /dev/null
+++ b/test/slashdot.rdf
@@ -0,0 +1,66 @@
+<?xml version="1.0"?><rdf:RDF
+xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+xmlns="http://my.netscape.com/rdf/simple/0.9/">
+
+ <channel>
+ <title>Slashdot:News for Nerds. Stuff that Matters.</title>
+ <link>http://slashdot.org/</link>
+ <description>News for Nerds. Stuff that Matters</description>
+ </channel>
+
+ <image>
+ <title>Slashdot</title>
+ <url>http://slashdot.org/images/slashdotlg.gif</url>
+ <link>http://slashdot.org</link>
+ </image>
+
+ <item>
+ <title>100 Mbit/s on Fibre to the home</title>
+ <link>http://slashdot.org/articles/99/06/06/1440211.shtml</link>
+ </item>
+
+ <item>
+ <title>Gimp 1.2 Preview</title>
+ <link>http://slashdot.org/articles/99/06/06/1438246.shtml</link>
+ </item>
+
+ <item>
+ <title>Sony's AIBO robot Sold Out</title>
+ <link>http://slashdot.org/articles/99/06/06/1432256.shtml</link>
+ </item>
+
+ <item>
+ <title>Ask Slashdot: Another Word for "Hacker"?</title>
+ <link>http://slashdot.org/askslashdot/99/06/05/1815225.shtml</link>
+ </item>
+
+ <item>
+ <title>Corel Linux FAQ</title>
+ <link>http://slashdot.org/articles/99/06/05/1842218.shtml</link>
+ </item>
+
+ <item>
+ <title>Upside downsides MP3.COM.</title>
+ <link>http://slashdot.org/articles/99/06/05/1558210.shtml</link>
+ </item>
+
+ <item>
+ <title>2 Terabits of Bandwidth</title>
+ <link>http://slashdot.org/articles/99/06/05/1554258.shtml</link>
+ </item>
+
+ <item>
+ <title>Suppression of cold fusion research?</title>
+ <link>http://slashdot.org/articles/99/06/04/2313200.shtml</link>
+ </item>
+
+ <item>
+ <title>California Gov. Halts Wage Info Sale</title>
+ <link>http://slashdot.org/articles/99/06/04/235256.shtml</link>
+ </item>
+
+ <item>
+ <title>Red Hat Announces IPO</title>
+ <link>http://slashdot.org/articles/99/06/04/0849207.shtml</link>
+ </item>
+</rdf:RDF> \ No newline at end of file
diff --git a/test/slashdot.xml b/test/slashdot.xml
new file mode 100644
index 0000000..f8e79e6
--- /dev/null
+++ b/test/slashdot.xml
@@ -0,0 +1,112 @@
+<ultramode>
+ <story>
+ <title>100 Mbit/s on Fibre to the home</title>
+ <url>http://slashdot.org/articles/99/06/06/1440211.shtml</url>
+ <time>1999-06-06 14:39:59</time>
+ <author>CmdrTaco</author>
+ <department>wouldn't-it-be-nice</department>
+ <topic>internet</topic>
+ <comments>20</comments>
+ <section>articles</section>
+ <image>topicinternet.jpg</image>
+ </story>
+ <story>
+ <title>Gimp 1.2 Preview</title>
+ <url>http://slashdot.org/articles/99/06/06/1438246.shtml</url>
+ <time>1999-06-06 14:38:40</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-read</department>
+ <topic>gimp</topic>
+ <comments>12</comments>
+ <section>articles</section>
+ <image>topicgimp.gif</image>
+ </story>
+ <story>
+ <title>Sony's AIBO robot Sold Out</title>
+ <url>http://slashdot.org/articles/99/06/06/1432256.shtml</url>
+ <time>1999-06-06 14:32:51</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-see</department>
+ <topic>tech</topic>
+ <comments>10</comments>
+ <section>articles</section>
+ <image>topictech2.jpg</image>
+ </story>
+ <story>
+ <title>Ask Slashdot: Another Word for "Hacker"?</title>
+ <url>http://slashdot.org/askslashdot/99/06/05/1815225.shtml</url>
+ <time>1999-06-05 20:00:00</time>
+ <author>Cliff</author>
+ <department>hacker-vs-cracker</department>
+ <topic>news</topic>
+ <comments>385</comments>
+ <section>askslashdot</section>
+ <image>topicnews.gif</image>
+ </story>
+ <story>
+ <title>Corel Linux FAQ</title>
+ <url>http://slashdot.org/articles/99/06/05/1842218.shtml</url>
+ <time>1999-06-05 18:42:06</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-read</department>
+ <topic>corel</topic>
+ <comments>164</comments>
+ <section>articles</section>
+ <image>topiccorel.gif</image>
+ </story>
+ <story>
+ <title>Upside downsides MP3.COM.</title>
+ <url>http://slashdot.org/articles/99/06/05/1558210.shtml</url>
+ <time>1999-06-05 15:56:45</time>
+ <author>CmdrTaco</author>
+ <department>stuff-to-think-about</department>
+ <topic>music</topic>
+ <comments>48</comments>
+ <section>articles</section>
+ <image>topicmusic.gif</image>
+ </story>
+ <story>
+ <title>2 Terabits of Bandwidth</title>
+ <url>http://slashdot.org/articles/99/06/05/1554258.shtml</url>
+ <time>1999-06-05 15:53:43</time>
+ <author>CmdrTaco</author>
+ <department>faster-porn</department>
+ <topic>internet</topic>
+ <comments>66</comments>
+ <section>articles</section>
+ <image>topicinternet.jpg</image>
+ </story>
+ <story>
+ <title>Suppression of cold fusion research?</title>
+ <url>http://slashdot.org/articles/99/06/04/2313200.shtml</url>
+ <time>1999-06-04 23:12:29</time>
+ <author>Hemos</author>
+ <department>possibly-probably</department>
+ <topic>science</topic>
+ <comments>217</comments>
+ <section>articles</section>
+ <image>topicscience.gif</image>
+ </story>
+ <story>
+ <title>California Gov. Halts Wage Info Sale</title>
+ <url>http://slashdot.org/articles/99/06/04/235256.shtml</url>
+ <time>1999-06-04 23:05:34</time>
+ <author>Hemos</author>
+ <department>woo-hoo!</department>
+ <topic>usa</topic>
+ <comments>16</comments>
+ <section>articles</section>
+ <image>topicus.gif</image>
+ </story>
+ <story>
+ <title>Red Hat Announces IPO</title>
+ <url>http://slashdot.org/articles/99/06/04/0849207.shtml</url>
+ <time>1999-06-04 19:30:18</time>
+ <author>Justin</author>
+ <department>details-sketchy</department>
+ <topic>redhat</topic>
+ <comments>155</comments>
+ <section>articles</section>
+ <image>topicredhat.gif</image>
+ </story>
+</ultramode>
diff --git a/test/slashdot16.xml b/test/slashdot16.xml
new file mode 100644
index 0000000..f6a7f2a
--- /dev/null
+++ b/test/slashdot16.xml
Binary files differ
diff --git a/test/svg1 b/test/svg1
new file mode 100644
index 0000000..53bf38f
--- /dev/null
+++ b/test/svg1
@@ -0,0 +1,163 @@
+<?xml version = "1.0" standalone = "yes"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width = "242px" height="383px">
+<g style = "stroke: #000000" >
+</g>
+<g style = "fill: #f2cc99" >
+ <polyline verts = " 69,18 82,8 99,3 118,5 135,12 149,21 156,13 165,9 177,13 183,28 180,50 164,91 155,107 154,114 151,121 141,127 139,136 155,206 157,251 126,342 133,357 128,376 83,376 75,368 67,350 61,350 53,369 4,369 2,361 5,354 12,342 16,321 4,257 4,244 7,218 9,179 26,127 43,93 32,77 30,70 24,67 16,49 17,35 18,23 30,12 40,7 53,7 62,12 69,18 69,18 69,18"/>
+</g>
+<g style = "fill: #e5b27f" >
+ <polyline verts = " 142,79 136,74 138,82 133,78 133,84 127,78 128,85 124,80 125,87 119,82 119,90 125,99 125,96 128,100 128,94 131,98 132,93 135,97 136,93 138,97 139,94 141,98 143,94 144,85 142,79 142,79 142,79"/>
+</g>
+<g style = "fill: #eb8080" >
+ <polyline verts = " 127,101 132,100 137,99 144,101 143,105 135,110 127,101 127,101 127,101"/>
+</g>
+<g style = "fill: #f2cc99" >
+ <polyline verts = " 178,229 157,248 139,296 126,349 137,356 158,357 183,342 212,332 235,288 235,261 228,252 212,250 188,251 178,229 178,229 178,229"/>
+</g>
+<g style = "fill: #9c826b" >
+ <polyline verts = " 56,229 48,241 48,250 57,281 63,325 71,338 81,315 76,321 79,311 83,301 75,308 80,298 73,303 76,296 71,298 74,292 69,293 74,284 78,278 71,278 74,274 68,273 70,268 66,267 68,261 60,266 62,259 65,253 57,258 59,251 55,254 55,248 60,237 54,240 58,234 54,236 56,229 56,229 56,229"/>
+ <polyline verts = " 74,363 79,368 81,368 85,362 89,363 92,370 96,373 101,372 108,361 110,371 113,373 116,371 120,358 122,363 123,371 126,371 129,367 132,357 135,361 130,376 127,377 94,378 84,376 76,371 74,363 74,363 74,363"/>
+ <polyline verts = " 212,250 219,251 228,258 236,270 235,287 225,304 205,332 177,343 171,352 158,357 166,352 168,346 168,339 165,333 155,327 155,323 161,320 165,316 169,316 167,312 171,313 168,308 173,309 170,306 177,306 175,308 177,311 174,311 176,316 171,315 174,319 168,320 168,323 175,327 179,332 183,326 184,332 189,323 190,328 194,320 194,325 199,316 201,320 204,313 206,316 208,310 211,305 219,298 226,288 229,279 228,266 224,259 217,253 212,250 212,250 212,250"/>
+ <polyline verts = " 151,205 151,238 149,252 141,268 128,282 121,301 130,300 126,313 118,324 116,337 120,346 133,352 133,340 137,333 145,329 156,327 153,319 153,291 157,271 170,259 178,277 193,250 174,216 151,205 151,205 151,205"/>
+ <polyline verts = " 78,127 90,142 95,155 108,164 125,167 139,175 150,206 152,191 141,140 121,148 100,136 78,127 78,127 78,127"/>
+ <polyline verts = " 21,58 35,63 38,68 32,69 42,74 40,79 47,80 54,83 45,94 34,81 32,73 24,66 21,58 21,58 21,58"/>
+ <polyline verts = " 71,34 67,34 66,27 59,24 54,17 48,17 39,22 30,26 28,31 31,39 38,46 29,45 36,54 41,61 41,70 50,69 54,71 55,58 67,52 76,43 76,39 68,44 71,34 71,34 71,34"/>
+ <polyline verts = " 139,74 141,83 143,89 144,104 148,104 155,106 154,86 157,77 155,72 150,77 144,77 139,74 139,74 139,74"/>
+ <polyline verts = " 105,44 102,53 108,58 111,62 112,55 105,44 105,44 105,44"/>
+ <polyline verts = " 141,48 141,54 144,58 139,62 137,66 136,59 137,52 141,48 141,48 141,48"/>
+ <polyline verts = " 98,135 104,130 105,134 108,132 108,135 112,134 113,137 116,136 116,139 119,139 124,141 128,140 133,138 140,133 139,140 126,146 104,144 98,135 98,135 98,135"/>
+ <polyline verts = " 97,116 103,119 103,116 111,118 116,117 122,114 127,107 135,111 142,107 141,114 145,118 149,121 145,125 140,124 127,121 113,125 100,124 97,116 97,116 97,116"/>
+ <polyline verts = " 147,33 152,35 157,34 153,31 160,31 156,28 161,28 159,24 163,25 163,21 165,22 170,23 167,17 172,21 174,18 175,23 176,22 177,28 177,33 174,37 176,39 174,44 171,49 168,53 164,57 159,68 156,70 154,60 150,51 146,43 144,35 147,33 147,33 147,33"/>
+ <polyline verts = " 85,72 89,74 93,75 100,76 105,75 102,79 94,79 88,76 85,72 85,72 85,72"/>
+ <polyline verts = " 86,214 79,221 76,232 82,225 78,239 82,234 78,245 81,243 79,255 84,250 84,267 87,254 90,271 90,257 95,271 93,256 95,249 92,252 93,243 89,253 89,241 86,250 87,236 83,245 87,231 82,231 90,219 84,221 86,214 86,214 86,214"/>
+</g>
+<g style = "fill: #ffcc7f" >
+ <polyline verts = " 93,68 96,72 100,73 106,72 108,66 105,63 100,62 93,68 93,68 93,68"/>
+ <polyline verts = " 144,64 142,68 142,73 146,74 150,73 154,64 149,62 144,64 144,64 144,64"/>
+</g>
+<g style = "fill: #9c826b" >
+ <polyline verts = " 57,91 42,111 52,105 41,117 53,112 46,120 53,116 50,124 57,119 55,127 61,122 60,130 67,126 66,134 71,129 72,136 77,130 76,137 80,133 82,138 86,135 96,135 94,129 86,124 83,117 77,123 79,117 73,120 75,112 68,116 71,111 65,114 69,107 63,110 68,102 61,107 66,98 61,103 63,97 57,99 57,91 57,91 57,91"/>
+ <polyline verts = " 83,79 76,79 67,82 75,83 65,88 76,87 65,92 76,91 68,96 77,95 70,99 80,98 72,104 80,102 76,108 85,103 92,101 87,98 93,96 86,94 91,93 85,91 93,89 99,89 105,93 107,85 102,82 92,80 83,79 83,79 83,79"/>
+ <polyline verts = " 109,77 111,83 109,89 113,94 117,90 117,81 114,78 109,77 109,77 109,77"/>
+ <polyline verts = " 122,128 127,126 134,127 136,129 134,130 130,128 124,129 122,128 122,128 122,128"/>
+ <polyline verts = " 78,27 82,32 80,33 82,36 78,37 82,40 78,42 81,46 76,47 78,49 74,50 82,52 87,50 83,48 91,46 86,45 91,42 88,40 92,37 86,34 90,31 86,29 89,26 78,27 78,27 78,27"/>
+ <polyline verts = " 82,17 92,20 79,21 90,25 81,25 94,28 93,26 101,30 101,26 107,33 108,28 111,40 113,34 115,45 117,39 119,54 121,46 124,58 126,47 129,59 130,49 134,58 133,44 137,48 133,37 137,40 133,32 126,20 135,26 132,19 138,23 135,17 142,18 132,11 116,6 94,6 78,11 92,12 80,14 90,16 82,17 82,17 82,17"/>
+ <polyline verts = " 142,234 132,227 124,223 115,220 110,225 118,224 127,229 135,236 122,234 115,237 113,242 121,238 139,243 121,245 111,254 95,254 102,244 104,235 110,229 100,231 104,224 113,216 122,215 132,217 141,224 145,230 149,240 142,234 142,234 142,234"/>
+ <polyline verts = " 115,252 125,248 137,249 143,258 134,255 125,254 115,252 115,252 115,252"/>
+ <polyline verts = " 114,212 130,213 140,219 147,225 144,214 137,209 128,207 114,212 114,212 114,212"/>
+ <polyline verts = " 102,263 108,258 117,257 131,258 116,260 109,265 102,263 102,263 102,263"/>
+ <polyline verts = " 51,241 35,224 40,238 23,224 31,242 19,239 28,247 17,246 25,250 37,254 39,263 44,271 47,294 48,317 51,328 60,351 60,323 53,262 47,246 51,241 51,241 51,241"/>
+ <polyline verts = " 2,364 9,367 14,366 18,355 20,364 26,366 31,357 35,364 39,364 42,357 47,363 53,360 59,357 54,369 7,373 2,364 2,364 2,364"/>
+ <polyline verts = " 7,349 19,345 25,339 18,341 23,333 28,326 23,326 27,320 23,316 25,311 20,298 15,277 12,264 9,249 10,223 3,248 5,261 15,307 17,326 11,343 7,349 7,349 7,349"/>
+ <polyline verts = " 11,226 15,231 25,236 18,227 11,226 11,226 11,226"/>
+ <polyline verts = " 13,214 19,217 32,227 23,214 16,208 15,190 24,148 31,121 24,137 14,170 8,189 13,214 13,214 13,214"/>
+ <polyline verts = " 202,254 195,258 199,260 193,263 197,263 190,268 196,268 191,273 188,282 200,272 194,272 201,266 197,265 204,262 200,258 204,256 202,254 202,254 202,254"/>
+</g>
+<g style = "fill: #845433" >
+ <polyline verts = " 151,213 165,212 179,225 189,246 187,262 179,275 176,263 177,247 171,233 163,230 165,251 157,264 146,298 145,321 133,326 143,285 154,260 153,240 151,213 151,213 151,213"/>
+ <polyline verts = " 91,132 95,145 97,154 104,148 107,155 109,150 111,158 115,152 118,159 120,153 125,161 126,155 133,164 132,154 137,163 137,152 142,163 147,186 152,192 148,167 141,143 124,145 105,143 91,132 91,132 91,132"/>
+</g>
+<g style = "fill: #9c826b" >
+ <polyline verts = " 31,57 23,52 26,51 20,44 23,42 21,36 22,29 25,23 24,32 30,43 26,41 30,50 26,48 31,57 31,57 31,57"/>
+ <polyline verts = " 147,21 149,28 155,21 161,16 167,14 175,15 173,11 161,9 147,21 147,21 147,21"/>
+ <polyline verts = " 181,39 175,51 169,57 171,65 165,68 165,75 160,76 162,91 171,71 180,51 181,39 181,39 181,39"/>
+ <polyline verts = " 132,346 139,348 141,346 142,341 147,342 143,355 133,350 132,346 132,346 132,346"/>
+ <polyline verts = " 146,355 151,352 155,348 157,343 160,349 151,356 147,357 146,355 146,355 146,355"/>
+ <polyline verts = " 99,266 100,281 94,305 86,322 78,332 72,346 73,331 91,291 99,266 99,266 99,266"/>
+ <polyline verts = " 20,347 32,342 45,340 54,345 45,350 42,353 38,350 31,353 29,356 23,350 19,353 15,349 20,347 20,347 20,347"/>
+ <polyline verts = " 78,344 86,344 92,349 88,358 84,352 78,344 78,344 78,344"/>
+ <polyline verts = " 93,347 104,344 117,345 124,354 121,357 116,351 112,351 108,355 102,351 93,347 93,347 93,347"/>
+</g>
+<g style = "fill: #000000" >
+ <polyline verts = " 105,12 111,18 113,24 113,29 119,34 116,23 112,16 105,12 105,12 105,12"/>
+ <polyline verts = " 122,27 125,34 127,43 128,34 125,29 122,27 122,27 122,27"/>
+ <polyline verts = " 115,13 122,19 122,15 113,10 115,13 115,13 115,13"/>
+</g>
+<g style = "fill: #ffe5b2" >
+ <polyline verts = " 116,172 107,182 98,193 98,183 90,199 89,189 84,207 88,206 87,215 95,206 93,219 91,230 98,216 97,226 104,214 112,209 104,208 113,202 126,200 139,207 132,198 142,203 134,192 142,195 134,187 140,185 130,181 136,177 126,177 125,171 116,180 116,172 116,172 116,172"/>
+ <polyline verts = " 74,220 67,230 67,221 59,235 63,233 60,248 70,232 65,249 71,243 67,256 73,250 69,262 73,259 71,267 76,262 72,271 78,270 76,275 82,274 78,290 86,279 86,289 92,274 88,275 87,264 82,270 82,258 77,257 78,247 73,246 77,233 72,236 74,220 74,220 74,220"/>
+ <polyline verts = " 133,230 147,242 148,250 145,254 138,247 129,246 142,245 138,241 128,237 137,238 133,230 133,230 133,230"/>
+ <polyline verts = " 133,261 125,261 116,263 111,267 125,265 133,261 133,261 133,261"/>
+ <polyline verts = " 121,271 109,273 103,279 99,305 92,316 85,327 83,335 89,340 97,341 94,336 101,336 96,331 103,330 97,327 108,325 99,322 109,321 100,318 110,317 105,314 110,312 107,310 113,308 105,306 114,303 105,301 115,298 107,295 115,294 108,293 117,291 109,289 117,286 109,286 118,283 112,281 118,279 114,278 119,276 115,274 121,271 121,271 121,271"/>
+ <polyline verts = " 79,364 74,359 74,353 76,347 80,351 83,356 82,360 79,364 79,364 79,364"/>
+ <polyline verts = " 91,363 93,356 97,353 103,355 105,360 103,366 99,371 94,368 91,363 91,363 91,363"/>
+ <polyline verts = " 110,355 114,353 118,357 117,363 113,369 111,362 110,355 110,355 110,355"/>
+ <polyline verts = " 126,354 123,358 124,367 126,369 129,361 129,357 126,354 126,354 126,354"/>
+ <polyline verts = " 30,154 24,166 20,182 23,194 29,208 37,218 41,210 41,223 46,214 46,227 52,216 52,227 61,216 59,225 68,213 73,219 70,207 77,212 69,200 77,202 70,194 78,197 68,187 76,182 64,182 58,175 58,185 53,177 50,186 46,171 44,182 39,167 36,172 36,162 30,166 30,154 30,154 30,154"/>
+ <polyline verts = " 44,130 41,137 45,136 43,150 48,142 48,157 53,150 52,164 60,156 61,169 64,165 66,175 70,167 74,176 77,168 80,183 85,172 90,182 93,174 98,181 99,173 104,175 105,169 114,168 102,163 95,157 94,166 90,154 87,162 82,149 75,159 72,148 68,155 67,143 62,148 62,138 58,145 56,133 52,142 52,128 49,134 47,125 44,130 44,130 44,130"/>
+ <polyline verts = " 13,216 19,219 36,231 22,223 16,222 22,227 12,224 13,220 16,220 13,216 13,216 13,216"/>
+ <polyline verts = " 10,231 14,236 25,239 27,237 19,234 10,231 10,231 10,231"/>
+ <polyline verts = " 9,245 14,242 25,245 13,245 9,245 9,245 9,245"/>
+ <polyline verts = " 33,255 26,253 18,254 25,256 18,258 27,260 18,263 27,265 19,267 29,270 21,272 29,276 21,278 30,281 22,283 31,287 24,288 32,292 23,293 34,298 26,299 37,303 32,305 39,309 33,309 39,314 34,314 40,318 34,317 40,321 34,321 41,326 33,326 40,330 33,332 39,333 33,337 42,337 54,341 49,337 52,335 47,330 50,330 45,325 49,325 45,321 48,321 45,316 46,306 45,286 43,274 36,261 33,255 33,255 33,255"/>
+ <polyline verts = " 7,358 9,351 14,351 17,359 11,364 7,358 7,358 7,358"/>
+ <polyline verts = " 44,354 49,351 52,355 49,361 44,354 44,354 44,354"/>
+ <polyline verts = " 32,357 37,353 40,358 36,361 32,357 32,357 32,357"/>
+ <polyline verts = " 139,334 145,330 154,330 158,334 154,341 152,348 145,350 149,340 147,336 141,339 139,345 136,342 136,339 139,334 139,334 139,334"/>
+ <polyline verts = " 208,259 215,259 212,255 220,259 224,263 225,274 224,283 220,292 208,300 206,308 203,304 199,315 197,309 195,318 193,313 190,322 190,316 185,325 182,318 180,325 172,321 178,320 176,313 186,312 180,307 188,307 184,303 191,302 186,299 195,294 187,290 197,288 192,286 201,283 194,280 203,277 198,275 207,271 200,269 209,265 204,265 212,262 208,259 208,259 208,259"/>
+ <polyline verts = " 106,126 106,131 109,132 111,134 115,132 115,135 119,133 118,137 123,137 128,137 133,134 136,130 136,127 132,124 118,128 112,128 106,126 106,126 106,126"/>
+ <polyline verts = " 107,114 101,110 98,102 105,97 111,98 119,102 121,108 118,112 113,115 107,114 107,114 107,114"/>
+ <polyline verts = " 148,106 145,110 146,116 150,118 152,111 151,107 148,106 148,106 148,106"/>
+ <polyline verts = " 80,55 70,52 75,58 63,57 72,61 57,61 67,66 57,67 62,69 54,71 61,73 54,77 63,78 53,85 60,84 56,90 69,84 63,82 75,76 70,75 77,72 72,71 78,69 72,66 81,67 78,64 82,63 80,60 86,62 80,55 80,55 80,55"/>
+ <polyline verts = " 87,56 91,52 96,50 102,56 98,56 92,60 87,56 87,56 87,56"/>
+ <polyline verts = " 85,68 89,73 98,76 106,74 96,73 91,70 85,68 85,68 85,68"/>
+ <polyline verts = " 115,57 114,64 111,64 115,75 122,81 122,74 126,79 126,74 131,78 130,72 133,77 131,68 126,61 119,57 115,57 115,57 115,57"/>
+ <polyline verts = " 145,48 143,53 147,59 151,59 150,55 145,48 145,48 145,48"/>
+ <polyline verts = " 26,22 34,15 43,10 52,10 59,16 47,15 32,22 26,22 26,22 26,22"/>
+ <polyline verts = " 160,19 152,26 149,34 154,33 152,30 157,30 155,26 158,27 157,23 161,23 160,19 160,19 160,19"/>
+</g>
+<g style = "fill: #000000" >
+ <polyline verts = " 98,117 105,122 109,122 105,117 113,120 121,120 130,112 128,108 123,103 123,99 128,101 132,106 135,109 142,105 142,101 145,101 145,91 148,101 145,105 136,112 135,116 143,124 148,120 150,122 142,128 133,122 121,125 112,126 103,125 100,129 96,124 98,117 98,117 98,117"/>
+ <polyline verts = " 146,118 152,118 152,115 149,115 146,118 146,118 146,118"/>
+ <polyline verts = " 148,112 154,111 154,109 149,109 148,112 148,112 148,112"/>
+ <polyline verts = " 106,112 108,115 114,116 118,114 106,112 106,112 106,112"/>
+ <polyline verts = " 108,108 111,110 116,110 119,108 108,108 108,108 108,108"/>
+ <polyline verts = " 106,104 109,105 117,106 115,104 106,104 106,104 106,104"/>
+ <polyline verts = " 50,25 41,26 34,33 39,43 49,58 36,51 47,68 55,69 54,59 61,57 74,46 60,52 67,42 57,48 61,40 54,45 60,36 59,29 48,38 52,30 47,32 50,25 50,25 50,25"/>
+ <polyline verts = " 147,34 152,41 155,49 161,53 157,47 164,47 158,43 168,44 159,40 164,37 169,37 164,33 169,34 165,28 170,30 170,25 173,29 175,27 176,32 173,36 175,39 172,42 172,46 168,49 170,55 162,57 158,63 155,58 153,50 149,46 147,34 147,34 147,34"/>
+ <polyline verts = " 155,71 159,80 157,93 157,102 155,108 150,101 149,93 154,101 152,91 151,83 155,79 155,71 155,71 155,71"/>
+ <polyline verts = " 112,78 115,81 114,91 112,87 113,82 112,78 112,78 112,78"/>
+ <polyline verts = " 78,28 64,17 58,11 47,9 36,10 28,16 21,26 18,41 20,51 23,61 33,65 28,68 37,74 36,81 43,87 48,90 43,100 40,98 39,90 31,80 30,72 22,71 17,61 14,46 16,28 23,17 33,9 45,6 54,6 65,12 78,28 78,28 78,28"/>
+ <polyline verts = " 67,18 76,9 87,5 101,2 118,3 135,8 149,20 149,26 144,19 132,12 121,9 105,7 89,8 76,14 70,20 67,18 67,18 67,18"/>
+ <polyline verts = " 56,98 48,106 56,103 47,112 56,110 52,115 57,113 52,121 62,115 58,123 65,119 63,125 69,121 68,127 74,125 74,129 79,128 83,132 94,135 93,129 85,127 81,122 76,126 75,121 71,124 71,117 66,121 66,117 62,117 64,112 60,113 60,110 57,111 61,105 57,107 60,101 55,102 56,98 56,98 56,98"/>
+ <polyline verts = " 101,132 103,138 106,134 106,139 112,136 111,142 115,139 114,143 119,142 125,145 131,142 135,138 140,134 140,129 143,135 145,149 150,171 149,184 145,165 141,150 136,147 132,151 131,149 126,152 125,150 121,152 117,148 111,152 110,148 105,149 104,145 98,150 96,138 94,132 94,130 98,132 101,132 101,132 101,132"/>
+ <polyline verts = " 41,94 32,110 23,132 12,163 6,190 7,217 5,236 3,247 9,230 12,211 12,185 18,160 26,134 35,110 43,99 41,94 41,94 41,94"/>
+ <polyline verts = " 32,246 41,250 50,257 52,267 53,295 53,323 59,350 54,363 51,365 44,366 42,360 40,372 54,372 59,366 62,353 71,352 75,335 73,330 66,318 68,302 64,294 67,288 63,286 63,279 59,275 58,267 56,262 50,247 42,235 44,246 32,236 35,244 32,246 32,246 32,246"/>
+ <polyline verts = " 134,324 146,320 159,322 173,327 179,337 179,349 172,355 158,357 170,350 174,343 170,333 163,328 152,326 134,329 134,324 134,324 134,324"/>
+ <polyline verts = " 173,339 183,334 184,338 191,329 194,332 199,323 202,325 206,318 209,320 213,309 221,303 228,296 232,289 234,279 233,269 230,262 225,256 219,253 208,252 198,252 210,249 223,250 232,257 237,265 238,277 238,291 232,305 221,323 218,335 212,342 200,349 178,348 173,339 173,339 173,339"/>
+ <polyline verts = " 165,296 158,301 156,310 156,323 162,324 159,318 162,308 162,304 165,296 165,296 165,296"/>
+ <polyline verts = " 99,252 105,244 107,234 115,228 121,228 131,235 122,233 113,235 109,246 121,239 133,243 121,243 110,251 99,252 99,252 99,252"/>
+ <polyline verts = " 117,252 124,247 134,249 136,253 126,252 117,252 117,252 117,252"/>
+ <polyline verts = " 117,218 132,224 144,233 140,225 132,219 117,218 117,218 117,218"/>
+ <polyline verts = " 122,212 134,214 143,221 141,213 132,210 122,212 122,212 122,212"/>
+ <polyline verts = " 69,352 70,363 76,373 86,378 97,379 108,379 120,377 128,378 132,373 135,361 133,358 132,366 127,375 121,374 121,362 119,367 117,374 110,376 110,362 107,357 106,371 104,375 97,376 90,375 90,368 86,362 83,364 86,369 85,373 78,370 73,362 71,351 69,352 69,352 69,352"/>
+ <polyline verts = " 100,360 96,363 99,369 102,364 100,360 100,360 100,360"/>
+ <polyline verts = " 115,360 112,363 114,369 117,364 115,360 115,360 115,360"/>
+ <polyline verts = " 127,362 125,364 126,369 128,365 127,362 127,362 127,362"/>
+ <polyline verts = " 5,255 7,276 11,304 15,320 13,334 6,348 2,353 0,363 5,372 12,374 25,372 38,372 44,369 42,367 36,368 31,369 30,360 27,368 20,370 16,361 15,368 10,369 3,366 3,359 6,352 11,348 17,331 19,316 12,291 9,274 5,255 5,255 5,255"/>
+ <polyline verts = " 10,358 7,362 10,366 11,362 10,358 10,358 10,358"/>
+ <polyline verts = " 25,357 22,360 24,366 27,360 25,357 25,357 25,357"/>
+ <polyline verts = " 37,357 34,361 36,365 38,361 37,357 37,357 37,357"/>
+ <polyline verts = " 49,356 46,359 47,364 50,360 49,356 49,356 49,356"/>
+ <polyline verts = " 130,101 132,102 135,101 139,102 143,103 142,101 137,100 133,100 130,101 130,101 130,101"/>
+ <polyline verts = " 106,48 105,52 108,56 109,52 106,48 106,48 106,48"/>
+ <polyline verts = " 139,52 139,56 140,60 142,58 141,56 139,52 139,52 139,52"/>
+ <polyline verts = " 25,349 29,351 30,355 33,350 37,348 42,351 45,347 49,345 44,343 36,345 25,349 25,349 25,349"/>
+ <polyline verts = " 98,347 105,351 107,354 109,349 115,349 120,353 118,349 113,346 104,346 98,347 98,347 98,347"/>
+ <polyline verts = " 83,348 87,352 87,357 89,351 87,348 83,348 83,348 83,348"/>
+ <polyline verts = " 155,107 163,107 170,107 186,108 175,109 155,109 155,107 155,107 155,107"/>
+ <polyline verts = " 153,114 162,113 175,112 192,114 173,114 154,115 153,114 153,114 153,114"/>
+ <polyline verts = " 152,118 164,120 180,123 197,129 169,123 151,120 152,118 152,118 152,118"/>
+ <polyline verts = " 68,109 87,106 107,106 106,108 88,108 68,109 68,109 68,109"/>
+ <polyline verts = " 105,111 95,112 79,114 71,116 85,115 102,113 105,111 105,111 105,111"/>
+ <polyline verts = " 108,101 98,99 87,99 78,99 93,100 105,102 108,101 108,101 108,101"/>
+ <polyline verts = " 85,63 91,63 97,60 104,60 108,62 111,69 112,75 110,74 108,71 103,73 106,69 105,65 103,64 103,67 102,70 99,70 97,66 94,67 97,72 88,67 84,66 85,63 85,63 85,63"/>
+ <polyline verts = " 140,74 141,66 144,61 150,61 156,62 153,70 150,73 152,65 150,65 151,68 149,71 146,71 144,66 143,70 143,74 140,74 140,74 140,74"/>
+ <polyline verts = " 146,20 156,11 163,9 172,9 178,14 182,18 184,32 182,42 182,52 177,58 176,67 171,76 165,90 157,105 160,92 164,85 168,78 167,73 173,66 172,62 175,59 174,55 177,53 180,46 181,29 179,21 173,13 166,11 159,13 153,18 148,23 146,20 146,20 146,20"/>
+ <polyline verts = " 150,187 148,211 150,233 153,247 148,267 135,283 125,299 136,292 131,313 122,328 122,345 129,352 133,359 133,367 137,359 148,356 140,350 131,347 129,340 132,332 140,328 137,322 140,304 154,265 157,244 155,223 161,220 175,229 186,247 185,260 176,275 178,287 185,277 188,261 196,253 189,236 174,213 150,187 150,187 150,187"/>
+ <polyline verts = " 147,338 142,341 143,345 141,354 147,343 147,338 147,338 147,338"/>
+ <polyline verts = " 157,342 156,349 150,356 157,353 163,346 162,342 157,342 157,342 157,342"/>
+ <polyline verts = " 99,265 96,284 92,299 73,339 73,333 87,300 99,265 99,265 99,265"/>
+</g></svg>
+
diff --git a/test/svg2 b/test/svg2
new file mode 100644
index 0000000..aa1adac
--- /dev/null
+++ b/test/svg2
@@ -0,0 +1,58 @@
+<?xml version = "1.0" standalone = "yes"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG April 1999//EN"
+ "http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
+<svg width = "268px" height="207px">
+<g style = "stroke: #000000" >
+ <path d = " M 29 28 "/>
+ <path d = " L 19 74 "/>
+</g>
+<g style = "stroke: #800040" >
+ <polyline verts = " 32,100 72,50 90,82 73,16 120,64 152,9 177,107"/>
+</g>
+<g style = "stroke: #000000" >
+</g>
+<g style = "stroke: #0000ff" >
+ <rect x = "30" y = "101" width = "51" height = "33"/>
+</g>
+<g style = "fill: #0000ff" >
+ <ellipse cx = "182" cy = "127" major = "37" minor = "31" angle = "90"/>
+</g>
+<g style = "fill: #ff0000" >
+ <polyline verts = " 78,180 76,151 131,149 136,182 135,182 134,183 127,185 117,186 109,192 104,194 98,199 96,200 95,201 94,202 92,202 85,202 70,200 54,199 47,198 46,197 45,197 37,195 26,193 17,187 9,181 8,181 7,176 6,175 6,173 6,172 6,170 8,164 8,163 8,162 9,162 10,162 11,162 13,162 20,162 26,162 27,162 28,162 30,162 30,163 31,163 32,164 34,166 35,166 36,167 36,168 37,169 38,169 39,169 41,170 43,170 45,170 47,170 49,170 50,168 50,161 50,160 50,159 47,162 78,180"/>
+ <g>
+ <desc> Java Font definition:Dialog 0</desc>
+ </g>
+ <g>
+ <desc> Java Font definition:Helvetica 0</desc>
+ </g>
+</g>
+<g style = "stroke: #000000" >
+ <text x = "188" y = "36" >this is text</text>
+</g>
+<g style = "stroke: #000000" >
+ <g>
+ <desc> Java Font definition:Dialog 0</desc>
+ </g>
+ <g>
+ <desc> Java Font definition:Helvetica 700</desc>
+ </g>
+</g>
+<g style = "stroke: #008080" >
+ <text x = "176" y = "85" >sadfsadfsad</text>
+</g>
+<g style = "stroke: #000000" >
+</g>
+<g style = "fill: #800040" >
+ <ellipse cx = "208" cy = "180" major = "45" minor = "31" angle = "0"/>
+</g>
+<g style = "stroke: #000000" >
+</g>
+<g style = "fill: #ffffff" >
+ <g>
+ <desc> Java Font definition:Dialog 700</desc>
+ </g>
+ <g>
+ <desc> Java Font definition:Dialog 700</desc>
+ </g>
+</g></svg>
+
diff --git a/test/svg3 b/test/svg3
new file mode 100644
index 0000000..9b0de5a
--- /dev/null
+++ b/test/svg3
@@ -0,0 +1,722 @@
+<svg>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M77.696 284.285C77.696 284.285 77.797 286.179 76.973 286.16C76.149 286.141 59.695 238.066 39.167 240.309C39.167 240.309 56.95 232.956 77.696 284.285z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M81.226 281.262C81.226 281.262 80.677 283.078 79.908 282.779C79.14 282.481 80.023 231.675 59.957 226.801C59.957 226.801 79.18 225.937 81.226 281.262z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M108.716 323.59C108.716 323.59 110.352 324.55 109.882 325.227C109.411 325.904 60.237 313.102 50.782 331.459C50.782 331.459 54.461 312.572 108.716 323.59z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M105.907 333.801C105.907 333.801 107.763 334.197 107.529 334.988C107.296 335.779 56.593 339.121 53.403 359.522C53.403 359.522 50.945 340.437 105.907 333.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M101.696 328.276C101.696 328.276 103.474 328.939 103.128 329.687C102.782 330.435 52.134 326.346 46.002 346.064C46.002 346.064 46.354 326.825 101.696 328.276z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M90.991 310.072C90.991 310.072 92.299 311.446 91.66 311.967C91.021 312.488 47.278 286.634 33.131 301.676C33.131 301.676 41.872 284.533 90.991 310.072z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M83.446 314.263C83.446 314.263 84.902 315.48 84.326 316.071C83.75 316.661 37.362 295.922 25.008 312.469C25.008 312.469 31.753 294.447 83.446 314.263z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M80.846 318.335C80.846 318.335 82.454 319.343 81.964 320.006C81.474 320.669 32.692 306.446 22.709 324.522C22.709 324.522 26.934 305.749 80.846 318.335z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M91.58 318.949C91.58 318.949 92.702 320.48 92.001 320.915C91.3 321.35 51.231 290.102 35.273 303.207C35.273 303.207 46.138 287.326 91.58 318.949z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M71.8 290C71.8 290 72.4 291.8 71.6 292C70.8 292.2 42.2 250.2 22.999 257.8C22.999 257.8 38.2 246 71.8 290z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M72.495 296.979C72.495 296.979 73.47 298.608 72.731 298.975C71.993 299.343 35.008 264.499 17.899 276.061C17.899 276.061 30.196 261.261 72.495 296.979z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.172">
+ <path d="M72.38 301.349C72.38 301.349 73.502 302.88 72.801 303.315C72.1 303.749 32.031 272.502 16.073 285.607C16.073 285.607 26.938 269.726 72.38 301.349z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000">
+ <path d="M70.17 303.065C70.673 309.113 71.661 315.682 73.4 318.801C73.4 318.801 69.8 331.201 78.6 344.401C78.6 344.401 78.2 351.601 79.8 354.801C79.8 354.801 83.8 363.201 88.6 364.001C92.484 364.648 101.207 367.717 111.068 369.121C111.068 369.121 128.2 383.201 125 396.001C125 396.001 124.6 412.401 121 414.001C121 414.001 132.6 402.801 123 419.601L118.6 438.401C118.6 438.401 144.2 416.801 128.6 435.201L118.6 461.201C118.6 461.201 138.2 442.801 131 451.201L127.8 460.001C127.8 460.001 171 432.801 140.2 462.401C140.2 462.401 148.2 458.801 152.6 461.601C152.6 461.601 159.4 460.401 158.6 462.001C158.6 462.001 137.8 472.401 134.2 490.801C134.2 490.801 142.6 480.801 139.4 491.601L139.8 503.201C139.8 503.201 143.8 481.601 143.4 519.201C143.4 519.201 162.6 501.201 151 522.001L151 538.801C151 538.801 166.2 522.401 159.8 535.201C159.8 535.201 169.8 526.401 165.8 541.601C165.8 541.601 165 552.001 169.4 540.801C169.4 540.801 185.4 510.201 179.4 536.401C179.4 536.401 178.6 555.601 183.4 540.801C183.4 540.801 183.8 551.201 193 558.401C193 558.401 191.8 507.601 204.6 543.601L208.6 560.001C208.6 560.001 211.4 550.801 211 545.601C211 545.601 225.8 529.201 219 553.601C219 553.601 234.2 530.801 231 544.001C231 544.001 223.4 560.001 225 564.801C225 564.801 241.8 530.001 243 528.401C243 528.401 241 570.802 251.8 534.801C251.8 534.801 257.4 546.801 254.6 551.201C254.6 551.201 262.6 543.201 261.8 540.001C261.8 540.001 266.4 531.801 269.2 545.401C269.2 545.401 271 554.801 272.6 551.601C272.6 551.601 276.6 575.602 277.8 552.801C277.8 552.801 279.4 539.201 272.2 527.601C272.2 527.601 273 524.401 270.2 520.401C270.2 520.401 283.8 542.001 276.6 513.201C276.6 513.201 287.801 521.201 289.001 521.201C289.001 521.201 275.4 498.001 284.2 502.801C284.2 502.801 279 492.401 297.001 504.401C297.001 504.401 281 488.401 298.601 498.001C298.601 498.001 306.601 504.401 299.001 494.401C299.001 494.401 284.6 478.401 306.601 496.401C306.601 496.401 318.201 512.801 319.001 515.601C319.001 515.601 309.001 486.401 304.601 483.601C304.601 483.601 313.001 447.201 354.201 462.801C354.201 462.801 361.001 480.001 365.401 461.601C365.401 461.601 378.201 455.201 389.401 482.801C389.401 482.801 393.401 469.201 392.601 466.401C392.601 466.401 399.401 467.601 398.601 466.401C398.601 466.401 411.801 470.801 413.001 470.001C413.001 470.001 419.801 476.801 420.201 473.201C420.201 473.201 429.401 476.001 427.401 472.401C427.401 472.401 436.201 488.001 436.601 491.601L439.001 477.601L441.001 480.401C441.001 480.401 442.601 472.801 441.801 471.601C441.001 470.401 461.801 478.401 466.601 499.201L468.601 507.601C468.601 507.601 474.601 492.801 473.001 488.801C473.001 488.801 478.201 489.601 478.601 494.001C478.601 494.001 482.601 470.801 477.801 464.801C477.801 464.801 482.201 464.001 483.401 467.601L483.401 460.401C483.401 460.401 490.601 461.201 490.601 458.801C490.601 458.801 495.001 454.801 497.001 459.601C497.001 459.601 484.601 424.401 503.001 443.601C503.001 443.601 510.201 454.401 506.601 435.601C503.001 416.801 499.001 415.201 503.801 414.801C503.801 414.801 504.601 411.201 502.601 409.601C500.601 408.001 503.801 409.601 503.801 409.601C503.801 409.601 508.601 413.601 503.401 391.601C503.401 391.601 509.801 393.201 497.801 364.001C497.801 364.001 500.601 361.601 496.601 353.201C496.601 353.201 504.601 357.601 507.401 356.001C507.401 356.001 507.001 354.401 503.801 350.401C503.801 350.401 482.201 295.6 502.601 317.601C502.601 317.601 514.451 331.151 508.051 308.351C508.051 308.351 498.94 284.341 499.717 280.045L70.17 303.065z"/>
+ </g>
+ <g style="fill: #cc7226; stroke:#000000">
+ <path d="M499.717 280.245C500.345 280.426 502.551 281.55 503.801 283.2C503.801 283.2 510.601 294 505.401 275.6C505.401 275.6 496.201 246.8 505.001 258C505.001 258 511.001 265.2 507.801 251.6C503.936 235.173 501.401 228.8 501.401 228.8C501.401 228.8 513.001 233.6 486.201 194L495.001 197.6C495.001 197.6 475.401 158 453.801 152.8L445.801 146.8C445.801 146.8 484.201 108.8 471.401 72C471.401 72 464.601 66.8 455.001 76C455.001 76 448.601 80.8 442.601 79.2C442.601 79.2 411.801 80.4 409.801 80.4C407.801 80.4 373.001 43.2 307.401 60.8C307.401 60.8 302.201 62.8 297.801 61.6C297.801 61.6 279.4 45.6 230.6 68.4C230.6 68.4 220.6 70.4 219 70.4C217.4 70.4 214.6 70.4 206.6 76.8C198.6 83.2 198.2 84 196.2 85.6C196.2 85.6 179.8 96.8 175 97.6C175 97.6 163.4 104 159 114L155.4 115.2C155.4 115.2 153.8 122.4 153.4 123.6C153.4 123.6 148.6 127.2 147.8 132.8C147.8 132.8 139 138.8 139.4 143.2C139.4 143.2 137.8 148.4 137 153.2C137 153.2 129.8 158 130.6 160.8C130.6 160.8 123 174.8 124.2 181.6C124.2 181.6 117.8 181.2 115 183.6C115 183.6 114.2 188.4 112.6 188.8C112.6 188.8 109.8 190 112.2 194C112.2 194 110.6 196.8 110.2 198.4C110.2 198.4 111 201.2 106.6 206.8C106.6 206.8 100.2 225.6 102.2 230.8C102.2 230.8 102.6 235.6 99.8 237.2C99.8 237.2 96.2 236.8 104.6 248.8C104.6 248.8 105.4 250 102.2 252.4C102.2 252.4 85 256 82.6 272.4C82.6 272.4 69 287.2 69 292.4C69 294.705 69.271 297.852 69.97 302.465C69.97 302.465 69.4 310.801 97 311.601C124.6 312.401 499.717 280.245 499.717 280.245z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M84.4 302.6C59.4 263.2 73.8 319.601 73.8 319.601C82.6 354.001 212.2 316.401 212.2 316.401C212.2 316.401 381.001 286 392.201 282C403.401 278 498.601 284.4 498.601 284.4L493.001 267.6C428.201 221.2 409.001 244.4 395.401 240.4C381.801 236.4 384.201 246 381.001 246.8C377.801 247.6 338.601 222.8 332.201 223.6C325.801 224.4 300.459 200.649 315.401 232.4C331.401 266.4 257 271.6 240.2 260.4C223.4 249.2 247.4 278.8 247.4 278.8C265.8 298.8 231.4 282 231.4 282C197 269.2 173 294.8 169.8 295.6C166.6 296.4 161.8 299.6 161 293.2C160.2 286.8 152.69 270.099 121 296.4C101 313.001 87.2 291 87.2 291L84.4 302.6z"/>
+ </g>
+ <g style="fill: #e87f3a">
+ <path d="M333.51 225.346C327.11 226.146 301.743 202.407 316.71 234.146C333.31 269.346 258.31 273.346 241.51 262.146C224.709 250.946 248.71 280.546 248.71 280.546C267.11 300.546 232.709 283.746 232.709 283.746C198.309 270.946 174.309 296.546 171.109 297.346C167.909 298.146 163.109 301.346 162.309 294.946C161.509 288.546 154.13 272.012 122.309 298.146C101.073 315.492 87.582 294.037 87.582 294.037L84.382 304.146C59.382 264.346 74.454 322.655 74.454 322.655C83.255 357.056 213.509 318.146 213.509 318.146C213.509 318.146 382.31 287.746 393.51 283.746C404.71 279.746 499.038 286.073 499.038 286.073L493.51 268.764C428.71 222.364 410.31 246.146 396.71 242.146C383.11 238.146 385.51 247.746 382.31 248.546C379.11 249.346 339.91 224.546 333.51 225.346z"/>
+ </g>
+ <g style="fill: #ea8c4d">
+ <path d="M334.819 227.091C328.419 227.891 303.685 203.862 318.019 235.891C334.219 272.092 259.619 275.092 242.819 263.892C226.019 252.692 250.019 282.292 250.019 282.292C268.419 302.292 234.019 285.492 234.019 285.492C199.619 272.692 175.618 298.292 172.418 299.092C169.218 299.892 164.418 303.092 163.618 296.692C162.818 290.292 155.57 273.925 123.618 299.892C101.145 317.983 87.964 297.074 87.964 297.074L84.364 305.692C60.564 266.692 75.109 325.71 75.109 325.71C83.909 360.11 214.819 319.892 214.819 319.892C214.819 319.892 383.619 289.492 394.819 285.492C406.019 281.492 499.474 287.746 499.474 287.746L494.02 269.928C429.219 223.528 411.619 247.891 398.019 243.891C384.419 239.891 386.819 249.491 383.619 250.292C380.419 251.092 341.219 226.291 334.819 227.091z"/>
+ </g>
+ <g style="fill: #ec9961">
+ <path d="M336.128 228.837C329.728 229.637 304.999 205.605 319.328 237.637C336.128 275.193 260.394 276.482 244.128 265.637C227.328 254.437 251.328 284.037 251.328 284.037C269.728 304.037 235.328 287.237 235.328 287.237C200.928 274.437 176.928 300.037 173.728 300.837C170.528 301.637 165.728 304.837 164.928 298.437C164.128 292.037 157.011 275.839 124.927 301.637C101.218 320.474 88.345 300.11 88.345 300.11L84.345 307.237C62.545 270.437 75.764 328.765 75.764 328.765C84.564 363.165 216.128 321.637 216.128 321.637C216.128 321.637 384.928 291.237 396.129 287.237C407.329 283.237 499.911 289.419 499.911 289.419L494.529 271.092C429.729 224.691 412.929 249.637 399.329 245.637C385.728 241.637 388.128 251.237 384.928 252.037C381.728 252.837 342.528 228.037 336.128 228.837z"/>
+ </g>
+ <g style="fill: #eea575">
+ <path d="M337.438 230.583C331.037 231.383 306.814 207.129 320.637 239.383C337.438 278.583 262.237 278.583 245.437 267.383C228.637 256.183 252.637 285.783 252.637 285.783C271.037 305.783 236.637 288.983 236.637 288.983C202.237 276.183 178.237 301.783 175.037 302.583C171.837 303.383 167.037 306.583 166.237 300.183C165.437 293.783 158.452 277.752 126.237 303.383C101.291 322.965 88.727 303.146 88.727 303.146L84.327 308.783C64.527 273.982 76.418 331.819 76.418 331.819C85.218 366.22 217.437 323.383 217.437 323.383C217.437 323.383 386.238 292.983 397.438 288.983C408.638 284.983 500.347 291.092 500.347 291.092L495.038 272.255C430.238 225.855 414.238 251.383 400.638 247.383C387.038 243.383 389.438 252.983 386.238 253.783C383.038 254.583 343.838 229.783 337.438 230.583z"/>
+ </g>
+ <g style="fill: #f1b288">
+ <path d="M338.747 232.328C332.347 233.128 306.383 209.677 321.947 241.128C341.147 279.928 263.546 280.328 246.746 269.128C229.946 257.928 253.946 287.528 253.946 287.528C272.346 307.528 237.946 290.728 237.946 290.728C203.546 277.928 179.546 303.528 176.346 304.328C173.146 305.128 168.346 308.328 167.546 301.928C166.746 295.528 159.892 279.665 127.546 305.128C101.364 325.456 89.109 306.183 89.109 306.183L84.309 310.328C66.309 277.128 77.073 334.874 77.073 334.874C85.873 369.274 218.746 325.128 218.746 325.128C218.746 325.128 387.547 294.728 398.747 290.728C409.947 286.728 500.783 292.764 500.783 292.764L495.547 273.419C430.747 227.019 415.547 253.128 401.947 249.128C388.347 245.128 390.747 254.728 387.547 255.528C384.347 256.328 345.147 231.528 338.747 232.328z"/>
+ </g>
+ <g style="fill: #f3bf9c">
+ <path d="M340.056 234.073C333.655 234.873 307.313 211.613 323.255 242.873C343.656 282.874 264.855 282.074 248.055 270.874C231.255 259.674 255.255 289.274 255.255 289.274C273.655 309.274 239.255 292.474 239.255 292.474C204.855 279.674 180.855 305.274 177.655 306.074C174.455 306.874 169.655 310.074 168.855 303.674C168.055 297.274 161.332 281.578 128.855 306.874C101.436 327.947 89.491 309.219 89.491 309.219L84.291 311.874C68.291 281.674 77.727 337.929 77.727 337.929C86.527 372.329 220.055 326.874 220.055 326.874C220.055 326.874 388.856 296.474 400.056 292.474C411.256 288.474 501.22 294.437 501.22 294.437L496.056 274.583C431.256 228.183 416.856 254.874 403.256 250.874C389.656 246.873 392.056 256.474 388.856 257.274C385.656 258.074 346.456 233.273 340.056 234.073z"/>
+ </g>
+ <g style="fill: #f5ccb0">
+ <path d="M341.365 235.819C334.965 236.619 307.523 213.944 324.565 244.619C346.565 284.219 266.164 283.819 249.364 272.619C232.564 261.419 256.564 291.019 256.564 291.019C274.964 311.019 240.564 294.219 240.564 294.219C206.164 281.419 182.164 307.019 178.964 307.819C175.764 308.619 170.964 311.819 170.164 305.419C169.364 299.019 162.773 283.492 130.164 308.619C101.509 330.438 89.873 312.256 89.873 312.256L84.273 313.419C69.872 285.019 78.382 340.983 78.382 340.983C87.182 375.384 221.364 328.619 221.364 328.619C221.364 328.619 390.165 298.219 401.365 294.219C412.565 290.219 501.656 296.11 501.656 296.11L496.565 275.746C431.765 229.346 418.165 256.619 404.565 252.619C390.965 248.619 393.365 258.219 390.165 259.019C386.965 259.819 347.765 235.019 341.365 235.819z"/>
+ </g>
+ <g style="fill: #f8d8c4">
+ <path d="M342.674 237.565C336.274 238.365 308.832 215.689 325.874 246.365C347.874 285.965 267.474 285.565 250.674 274.365C233.874 263.165 257.874 292.765 257.874 292.765C276.274 312.765 241.874 295.965 241.874 295.965C207.473 283.165 183.473 308.765 180.273 309.565C177.073 310.365 172.273 313.565 171.473 307.165C170.673 300.765 164.214 285.405 131.473 310.365C101.582 332.929 90.255 315.293 90.255 315.293L84.255 314.965C70.654 288.564 79.037 344.038 79.037 344.038C87.837 378.438 222.673 330.365 222.673 330.365C222.673 330.365 391.474 299.965 402.674 295.965C413.874 291.965 502.093 297.783 502.093 297.783L497.075 276.91C432.274 230.51 419.474 258.365 405.874 254.365C392.274 250.365 394.674 259.965 391.474 260.765C388.274 261.565 349.074 236.765 342.674 237.565z"/>
+ </g>
+ <g style="fill: #fae5d7">
+ <path d="M343.983 239.31C337.583 240.11 310.529 217.223 327.183 248.11C349.183 288.91 268.783 287.31 251.983 276.11C235.183 264.91 259.183 294.51 259.183 294.51C277.583 314.51 243.183 297.71 243.183 297.71C208.783 284.91 184.783 310.51 181.583 311.31C178.382 312.11 173.582 315.31 172.782 308.91C171.982 302.51 165.654 287.318 132.782 312.11C101.655 335.42 90.637 318.329 90.637 318.329L84.236 316.51C71.236 292.51 79.691 347.093 79.691 347.093C88.491 381.493 223.983 332.11 223.983 332.11C223.983 332.11 392.783 301.71 403.983 297.71C415.183 293.71 502.529 299.456 502.529 299.456L497.583 278.074C432.783 231.673 420.783 260.11 407.183 256.11C393.583 252.11 395.983 261.71 392.783 262.51C389.583 263.31 350.383 238.51 343.983 239.31z"/>
+ </g>
+ <g style="fill: #fcf2eb">
+ <path d="M345.292 241.055C338.892 241.855 312.917 218.411 328.492 249.855C349.692 292.656 270.092 289.056 253.292 277.856C236.492 266.656 260.492 296.256 260.492 296.256C278.892 316.256 244.492 299.456 244.492 299.456C210.092 286.656 186.092 312.256 182.892 313.056C179.692 313.856 174.892 317.056 174.092 310.656C173.292 304.256 167.095 289.232 134.092 313.856C101.727 337.911 91.018 321.365 91.018 321.365L84.218 318.056C71.418 294.856 80.346 350.147 80.346 350.147C89.146 384.547 225.292 333.856 225.292 333.856C225.292 333.856 394.093 303.456 405.293 299.456C416.493 295.456 502.965 301.128 502.965 301.128L498.093 279.237C433.292 232.837 422.093 261.856 408.493 257.856C394.893 253.855 397.293 263.456 394.093 264.256C390.892 265.056 351.692 240.255 345.292 241.055z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M84.2 319.601C71.4 297.6 81 353.201 81 353.201C89.8 387.601 226.6 335.601 226.6 335.601C226.6 335.601 395.401 305.2 406.601 301.2C417.801 297.2 503.401 302.8 503.401 302.8L498.601 280.4C433.801 234 423.401 263.6 409.801 259.6C396.201 255.6 398.601 265.2 395.401 266C392.201 266.8 353.001 242 346.601 242.8C340.201 243.6 314.981 219.793 329.801 251.6C352.028 299.307 269.041 289.227 254.6 279.6C237.8 268.4 261.8 298 261.8 298C280.2 318.001 245.8 301.2 245.8 301.2C211.4 288.4 187.4 314.001 184.2 314.801C181 315.601 176.2 318.801 175.4 312.401C174.6 306 168.535 291.144 135.4 315.601C101.8 340.401 91.4 324.401 91.4 324.401L84.2 319.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M125.8 349.601C125.8 349.601 118.6 361.201 139.4 374.401C139.4 374.401 140.8 375.801 122.8 371.601C122.8 371.601 116.6 369.601 115 359.201C115 359.201 110.2 354.801 105.4 349.201C100.6 343.601 125.8 349.601 125.8 349.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M265.8 302C265.8 302 283.498 328.821 282.9 333.601C281.6 344.001 281.4 353.601 284.6 357.601C287.801 361.601 296.601 394.801 296.601 394.801C296.601 394.801 296.201 396.001 308.601 358.001C308.601 358.001 320.201 342.001 300.201 323.601C300.201 323.601 265 294.8 265.8 302z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M145.8 376.401C145.8 376.401 157 383.601 142.6 414.801L149 412.401C149 412.401 148.2 423.601 145 426.001L152.2 422.801C152.2 422.801 157 430.801 153 435.601C153 435.601 169.8 443.601 169 450.001C169 450.001 175.4 442.001 171.4 435.601C167.4 429.201 160.2 433.201 161 414.801L152.2 418.001C152.2 418.001 157.8 409.201 157.8 402.801L149.8 405.201C149.8 405.201 165.269 378.623 154.6 377.201C148.6 376.401 145.8 376.401 145.8 376.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M178.2 393.201C178.2 393.201 181 388.801 178.2 389.601C175.4 390.401 144.2 405.201 138.2 414.801C138.2 414.801 172.6 390.401 178.2 393.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M188.6 401.201C188.6 401.201 191.4 396.801 188.6 397.601C185.8 398.401 154.6 413.201 148.6 422.801C148.6 422.801 183 398.401 188.6 401.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M201.8 386.001C201.8 386.001 204.6 381.601 201.8 382.401C199 383.201 167.8 398.001 161.8 407.601C161.8 407.601 196.2 383.201 201.8 386.001z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M178.6 429.601C178.6 429.601 178.6 423.601 175.8 424.401C173 425.201 137 442.801 131 452.401C131 452.401 173 426.801 178.6 429.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M179.8 418.801C179.8 418.801 181 414.001 178.2 414.801C176.2 414.801 149.8 426.401 143.8 436.001C143.8 436.001 173.4 414.401 179.8 418.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M165.4 466.401L155.4 474.001C155.4 474.001 165.8 466.401 169.4 467.601C169.4 467.601 162.6 478.801 161.8 484.001C161.8 484.001 172.2 471.201 177.8 471.601C177.8 471.601 185.4 472.001 185.4 482.801C185.4 482.801 191 472.401 194.2 472.801C194.2 472.801 195.4 479.201 194.2 486.001C194.2 486.001 198.2 478.401 202.2 480.001C202.2 480.001 208.6 478.001 207.8 489.601C207.8 489.601 207.8 500.001 207 502.801C207 502.801 212.6 476.401 215 476.001C215 476.001 223 474.801 227.8 483.601C227.8 483.601 223.8 476.001 228.6 478.001C228.6 478.001 239.4 479.601 242.6 486.401C242.6 486.401 235.8 474.401 241.4 477.601C241.4 477.601 248.2 477.601 249.4 484.001C249.4 484.001 257.8 505.201 259.8 506.801C259.8 506.801 252.2 485.201 253.8 485.201C253.8 485.201 251.8 473.201 257 488.001C257 488.001 253.8 474.001 259.4 474.801C265 475.601 269.4 485.601 277.8 483.201C277.8 483.201 287.401 488.801 289.401 419.601L165.4 466.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M170.2 373.601C170.2 373.601 185 367.601 225 373.601C225 373.601 232.2 374.001 239 365.201C245.8 356.401 272.6 349.201 279 351.201L288.601 357.601L289.401 358.801C289.401 358.801 301.801 369.201 302.201 376.801C302.601 384.401 287.801 432.401 278.2 448.401C268.6 464.401 259 476.801 239.8 474.401C239.8 474.401 219 470.401 193.4 474.401C193.4 474.401 164.2 472.801 161.4 464.801C158.6 456.801 172.6 441.601 172.6 441.601C172.6 441.601 177 433.201 175.8 418.801C174.6 404.401 175 376.401 170.2 373.601z"/>
+ </g>
+ <g style="fill: #e5668c">
+ <path d="M192.2 375.601C200.6 394.001 171 459.201 171 459.201C169 460.801 183.66 466.846 193.8 464.401C204.746 461.763 245 466.001 245 466.001C268.6 450.401 281.4 406.001 281.4 406.001C281.4 406.001 291.801 382.001 274.2 378.801C256.6 375.601 192.2 375.601 192.2 375.601z"/>
+ </g>
+ <g style="fill: #b23259">
+ <path d="M190.169 406.497C193.495 393.707 195.079 381.906 192.2 375.601C192.2 375.601 254.6 382.001 265.8 361.201C270.041 353.326 284.801 384.001 284.4 393.601C284.4 393.601 221.4 408.001 206.6 396.801L190.169 406.497z"/>
+ </g>
+ <g style="fill: #a5264c">
+ <path d="M194.6 422.801C194.6 422.801 196.6 430.001 194.2 434.001C194.2 434.001 192.6 434.801 191.4 435.201C191.4 435.201 192.6 438.801 198.6 440.401C198.6 440.401 200.6 444.801 203 445.201C205.4 445.601 210.2 451.201 214.2 450.001C218.2 448.801 229.4 444.801 229.4 444.801C229.4 444.801 235 441.601 243.8 445.201C243.8 445.201 246.175 444.399 246.6 440.401C247.1 435.701 250.2 432.001 252.2 430.001C254.2 428.001 263.8 415.201 262.6 414.801C261.4 414.401 194.6 422.801 194.6 422.801z"/>
+ </g>
+ <g style="fill: #ff727f; stroke:#000000">
+ <path d="M190.2 374.401C190.2 374.401 187.4 396.801 190.6 405.201C193.8 413.601 193 415.601 192.2 419.601C191.4 423.601 195.8 433.601 201.4 439.601L213.4 441.201C213.4 441.201 228.6 437.601 237.8 440.401C237.8 440.401 246.794 441.744 250.2 426.801C250.2 426.801 255 420.401 262.2 417.601C269.4 414.801 276.6 373.201 272.6 365.201C268.6 357.201 254.2 352.801 238.2 368.401C222.2 384.001 220.2 367.201 190.2 374.401z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M191.8 449.201C191.8 449.201 191 447.201 186.6 446.801C186.6 446.801 164.2 443.201 155.8 430.801C155.8 430.801 149 425.201 153.4 436.801C153.4 436.801 163.8 457.201 170.6 460.001C170.6 460.001 187 464.001 191.8 449.201z"/>
+ </g>
+ <g style="fill: #cc3f4c">
+ <path d="M271.742 385.229C272.401 377.323 274.354 368.709 272.6 365.201C266.154 352.307 249.181 357.695 238.2 368.401C222.2 384.001 220.2 367.201 190.2 374.401C190.2 374.401 188.455 388.364 189.295 398.376C189.295 398.376 226.6 386.801 227.4 392.401C227.4 392.401 229 389.201 238.2 389.201C247.4 389.201 270.142 388.029 271.742 385.229z"/>
+ </g>
+ <g style="stroke:#a51926; stroke-width:2">
+ <path d="M228.6 375.201C228.6 375.201 233.4 380.001 229.8 389.601C229.8 389.601 215.4 405.601 217.4 419.601"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M180.6 460.001C180.6 460.001 176.2 447.201 185 454.001C185 454.001 189.8 456.001 188.6 457.601C187.4 459.201 181.8 463.201 180.6 460.001z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M185.64 461.201C185.64 461.201 182.12 450.961 189.16 456.401C189.16 456.401 193.581 458.849 192.04 459.281C187.48 460.561 192.04 463.121 185.64 461.201z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M190.44 461.201C190.44 461.201 186.92 450.961 193.96 456.401C193.96 456.401 198.335 458.711 196.84 459.281C193.48 460.561 196.84 463.121 190.44 461.201z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M197.04 461.401C197.04 461.401 193.52 451.161 200.56 456.601C200.56 456.601 204.943 458.933 203.441 459.481C200.48 460.561 203.441 463.321 197.04 461.401z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M203.52 461.321C203.52 461.321 200 451.081 207.041 456.521C207.041 456.521 210.881 458.121 209.921 459.401C208.961 460.681 209.921 463.241 203.52 461.321z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M210.2 462.001C210.2 462.001 205.4 449.601 214.6 456.001C214.6 456.001 219.4 458.001 218.2 459.601C217 461.201 218.2 464.401 210.2 462.001z"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M181.8 444.801C181.8 444.801 195 442.001 201 445.201C201 445.201 207 446.401 208.2 446.001C209.4 445.601 212.6 445.201 212.6 445.201"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M215.8 453.601C215.8 453.601 227.8 440.001 239.8 444.401C246.816 446.974 245.8 443.601 246.6 440.801C247.4 438.001 247.6 433.801 252.6 430.801"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M233 437.601C233 437.601 229 426.801 226.2 439.601C223.4 452.401 220.2 456.001 218.6 458.801C218.6 458.801 218.6 464.001 227 463.601C227 463.601 237.8 463.201 238.2 460.401C238.6 457.601 237 446.001 233 437.601z"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M247 444.801C247 444.801 250.6 442.401 253 443.601"/>
+ </g>
+ <g style="stroke:#a5264c; stroke-width:2">
+ <path d="M253.5 428.401C253.5 428.401 256.4 423.501 261.2 422.701"/>
+ </g>
+ <g style="fill: #b2b2b2">
+ <path d="M174.2 465.201C174.2 465.201 192.2 468.401 196.6 466.801C196.6 466.801 205.4 466.801 197 468.801C197 468.801 184.2 468.801 176.2 467.601C176.2 467.601 164.6 462.001 174.2 465.201z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M188.2 372.001C188.2 372.001 205.8 372.001 207.8 372.801C207.8 372.801 215 403.601 211.4 411.201C211.4 411.201 210.2 414.001 207.4 408.401C207.4 408.401 189 375.601 185.8 373.601C182.6 371.601 187 372.001 188.2 372.001z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M111.1 369.301C111.1 369.301 120 371.001 132.6 373.601C132.6 373.601 137.4 396.001 140.6 400.801C143.8 405.601 140.2 405.601 136.6 402.801C133 400.001 118.2 386.001 116.2 381.601C114.2 377.201 111.1 369.301 111.1 369.301z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M132.961 373.818C132.961 373.818 138.761 375.366 139.77 377.581C140.778 379.795 138.568 383.092 138.568 383.092C138.568 383.092 137.568 386.397 136.366 384.235C135.164 382.072 132.292 374.412 132.961 373.818z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M133 373.601C133 373.601 136.6 378.801 140.2 378.801C143.8 378.801 144.182 378.388 147 379.001C151.6 380.001 151.2 378.001 157.8 379.201C160.44 379.681 163 378.801 165.8 380.001C168.6 381.201 171.8 380.401 173 378.401C174.2 376.401 179 372.201 179 372.201C179 372.201 166.2 374.001 163.4 374.801C163.4 374.801 141 376.001 133 373.601z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M177.6 373.801C177.6 373.801 171.15 377.301 170.75 379.701C170.35 382.101 176 385.801 176 385.801C176 385.801 178.75 390.401 179.35 388.001C179.95 385.601 178.4 374.201 177.6 373.801z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M140.115 379.265C140.115 379.265 147.122 390.453 147.339 379.242C147.339 379.242 147.896 377.984 146.136 377.962C140.061 377.886 141.582 373.784 140.115 379.265z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M147.293 379.514C147.293 379.514 155.214 390.701 154.578 379.421C154.578 379.421 154.585 379.089 152.832 378.936C148.085 378.522 148.43 374.004 147.293 379.514z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M154.506 379.522C154.506 379.522 162.466 390.15 161.797 380.484C161.797 380.484 161.916 379.251 160.262 378.95C156.37 378.244 156.159 374.995 154.506 379.522z"/>
+ </g>
+ <g style="fill: #ffffcc; stroke:#000000; stroke-width:0.5">
+ <path d="M161.382 379.602C161.382 379.602 169.282 391.163 169.63 381.382C169.63 381.382 171.274 380.004 169.528 379.782C163.71 379.042 164.508 374.588 161.382 379.602z"/>
+ </g>
+ <g style="fill: #e5e5b2">
+ <path d="M125.208 383.132L117.55 381.601C114.95 376.601 112.85 370.451 112.85 370.451C112.85 370.451 119.2 371.451 131.7 374.251C131.7 374.251 132.576 377.569 134.048 383.364L125.208 383.132z"/>
+ </g>
+ <g style="fill: #e5e5b2">
+ <path d="M190.276 378.47C188.61 375.964 187.293 374.206 186.643 373.8C183.63 371.917 187.773 372.294 188.902 372.294C188.902 372.294 205.473 372.294 207.356 373.047C207.356 373.047 207.88 375.289 208.564 378.68C208.564 378.68 198.476 376.67 190.276 378.47z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M243.88 240.321C271.601 244.281 297.121 208.641 298.881 198.96C300.641 189.28 290.521 177.4 290.521 177.4C291.841 174.32 287.001 160.24 281.721 151C276.441 141.76 260.54 142.734 243 141.76C227.16 140.88 208.68 164.2 207.36 165.96C206.04 167.72 212.2 206.001 213.52 211.721C214.84 217.441 212.2 243.841 212.2 243.841C246.44 234.741 216.16 236.361 243.88 240.321z"/>
+ </g>
+ <g style="fill: #ea8e51">
+ <path d="M208.088 166.608C206.792 168.336 212.84 205.921 214.136 211.537C215.432 217.153 212.84 243.073 212.84 243.073C245.512 234.193 216.728 235.729 243.944 239.617C271.161 243.505 296.217 208.513 297.945 199.008C299.673 189.504 289.737 177.84 289.737 177.84C291.033 174.816 286.281 160.992 281.097 151.92C275.913 142.848 260.302 143.805 243.08 142.848C227.528 141.984 209.384 164.88 208.088 166.608z"/>
+ </g>
+ <g style="fill: #efaa7c">
+ <path d="M208.816 167.256C207.544 168.952 213.48 205.841 214.752 211.353C216.024 216.865 213.48 242.305 213.48 242.305C244.884 233.145 217.296 235.097 244.008 238.913C270.721 242.729 295.313 208.385 297.009 199.056C298.705 189.728 288.953 178.28 288.953 178.28C290.225 175.312 285.561 161.744 280.473 152.84C275.385 143.936 260.063 144.875 243.16 143.936C227.896 143.088 210.088 165.56 208.816 167.256z"/>
+ </g>
+ <g style="fill: #f4c6a8">
+ <path d="M209.544 167.904C208.296 169.568 214.12 205.761 215.368 211.169C216.616 216.577 214.12 241.537 214.12 241.537C243.556 232.497 217.864 234.465 244.072 238.209C270.281 241.953 294.409 208.257 296.073 199.105C297.737 189.952 288.169 178.72 288.169 178.72C289.417 175.808 284.841 162.496 279.849 153.76C274.857 145.024 259.824 145.945 243.24 145.024C228.264 144.192 210.792 166.24 209.544 167.904z"/>
+ </g>
+ <g style="fill: #f9e2d3">
+ <path d="M210.272 168.552C209.048 170.184 214.76 205.681 215.984 210.985C217.208 216.289 214.76 240.769 214.76 240.769C242.628 231.849 218.432 233.833 244.136 237.505C269.841 241.177 293.505 208.129 295.137 199.152C296.769 190.176 287.385 179.16 287.385 179.16C288.609 176.304 284.121 163.248 279.225 154.68C274.329 146.112 259.585 147.015 243.32 146.112C228.632 145.296 211.496 166.92 210.272 168.552z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M244.2 236.8C269.4 240.4 292.601 208 294.201 199.2C295.801 190.4 286.601 179.6 286.601 179.6C287.801 176.8 283.4 164 278.6 155.6C273.8 147.2 259.346 148.086 243.4 147.2C229 146.4 212.2 167.6 211 169.2C209.8 170.8 215.4 205.6 216.6 210.8C217.8 216 215.4 240 215.4 240C240.9 231.4 219 233.2 244.2 236.8z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M290.601 202.8C290.601 202.8 262.8 210.4 251.2 208.8C251.2 208.8 235.4 202.2 226.6 224C226.6 224 223 231.2 221 233.2C219 235.2 290.601 202.8 290.601 202.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M294.401 200.6C294.401 200.6 265.4 212.8 255.4 212.4C255.4 212.4 239 207.8 230.6 222.4C230.6 222.4 222.2 231.6 219 233.2C219 233.2 218.6 234.8 225 230.8L235.4 236C235.4 236 250.2 245.6 259.8 229.6C259.8 229.6 263.8 218.4 263.8 216.4C263.8 214.4 285 208.8 286.601 208.4C288.201 208 294.801 203.8 294.401 200.6z"/>
+ </g>
+ <g style="fill: #99cc32">
+ <path d="M247 236.514C240.128 236.514 231.755 232.649 231.755 226.4C231.755 220.152 240.128 213.887 247 213.887C253.874 213.887 259.446 218.952 259.446 225.2C259.446 231.449 253.874 236.514 247 236.514z"/>
+ </g>
+ <g style="fill: #659900">
+ <path d="M243.377 219.83C238.531 220.552 233.442 222.055 233.514 221.839C235.054 217.22 241.415 213.887 247 213.887C251.296 213.887 255.084 215.865 257.32 218.875C257.32 218.875 252.004 218.545 243.377 219.83z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M255.4 219.6C255.4 219.6 251 216.4 251 218.6C251 218.6 254.6 223 255.4 219.6z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M245.4 227.726C242.901 227.726 240.875 225.7 240.875 223.2C240.875 220.701 242.901 218.675 245.4 218.675C247.9 218.675 249.926 220.701 249.926 223.2C249.926 225.7 247.9 227.726 245.4 227.726z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M141.4 214.4C141.4 214.4 138.2 193.2 140.6 188.8C140.6 188.8 151.4 178.8 151 175.2C151 175.2 150.6 157.2 149.4 156.4C148.2 155.6 140.6 149.6 134.6 156C134.6 156 124.2 174 125 180.4L125 182.4C125 182.4 117.4 182 115.8 184C115.8 184 114.6 189.2 113.4 189.6C113.4 189.6 110.6 192 112.6 194.8C112.6 194.8 110.6 197.2 111 201.2L118.6 205.2C118.6 205.2 120.6 219.6 131.4 224.8C136.236 227.129 139.4 220.4 141.4 214.4z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M140.4 212.56C140.4 212.56 137.52 193.48 139.68 189.52C139.68 189.52 149.4 180.52 149.04 177.28C149.04 177.28 148.68 161.08 147.6 160.36C146.52 159.64 139.68 154.24 134.28 160C134.28 160 124.92 176.2 125.64 181.96L125.64 183.76C125.64 183.76 118.8 183.4 117.36 185.2C117.36 185.2 116.28 189.88 115.2 190.24C115.2 190.24 112.68 192.4 114.48 194.92C114.48 194.92 112.68 197.08 113.04 200.68L119.88 204.28C119.88 204.28 121.68 217.24 131.4 221.92C135.752 224.015 138.6 217.96 140.4 212.56z"/>
+ </g>
+ <g style="fill: #eb955c">
+ <path d="M148.95 157.39C147.86 156.53 140.37 150.76 134.52 157C134.52 157 124.38 174.55 125.16 180.79L125.16 182.74C125.16 182.74 117.75 182.35 116.19 184.3C116.19 184.3 115.02 189.37 113.85 189.76C113.85 189.76 111.12 192.1 113.07 194.83C113.07 194.83 111.12 197.17 111.51 201.07L118.92 204.97C118.92 204.97 120.87 219.01 131.4 224.08C136.114 226.35 139.2 219.79 141.15 213.94C141.15 213.94 138.03 193.27 140.37 188.98C140.37 188.98 150.9 179.23 150.51 175.72C150.51 175.72 150.12 158.17 148.95 157.39z"/>
+ </g>
+ <g style="fill: #f2b892">
+ <path d="M148.5 158.38C147.52 157.46 140.14 151.92 134.44 158C134.44 158 124.56 175.1 125.32 181.18L125.32 183.08C125.32 183.08 118.1 182.7 116.58 184.6C116.58 184.6 115.44 189.54 114.3 189.92C114.3 189.92 111.64 192.2 113.54 194.86C113.54 194.86 111.64 197.14 112.02 200.94L119.24 204.74C119.24 204.74 121.14 218.42 131.4 223.36C135.994 225.572 139 219.18 140.9 213.48C140.9 213.48 137.86 193.34 140.14 189.16C140.14 189.16 150.4 179.66 150.02 176.24C150.02 176.24 149.64 159.14 148.5 158.38z"/>
+ </g>
+ <g style="fill: #f8dcc8">
+ <path d="M148.05 159.37C147.18 158.39 139.91 153.08 134.36 159C134.36 159 124.74 175.65 125.48 181.57L125.48 183.42C125.48 183.42 118.45 183.05 116.97 184.9C116.97 184.9 115.86 189.71 114.75 190.08C114.75 190.08 112.16 192.3 114.01 194.89C114.01 194.89 112.16 197.11 112.53 200.81L119.56 204.51C119.56 204.51 121.41 217.83 131.4 222.64C135.873 224.794 138.8 218.57 140.65 213.02C140.65 213.02 137.69 193.41 139.91 189.34C139.91 189.34 149.9 180.09 149.53 176.76C149.53 176.76 149.16 160.11 148.05 159.37z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M140.4 212.46C140.4 212.46 137.52 193.48 139.68 189.52C139.68 189.52 149.4 180.52 149.04 177.28C149.04 177.28 148.68 161.08 147.6 160.36C146.84 159.32 139.68 154.24 134.28 160C134.28 160 124.92 176.2 125.64 181.96L125.64 183.76C125.64 183.76 118.8 183.4 117.36 185.2C117.36 185.2 116.28 189.88 115.2 190.24C115.2 190.24 112.68 192.4 114.48 194.92C114.48 194.92 112.68 197.08 113.04 200.68L119.88 204.28C119.88 204.28 121.68 217.24 131.4 221.92C135.752 224.015 138.6 217.86 140.4 212.46z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M137.3 206.2C137.3 206.2 115.7 196 114.8 195.2C114.8 195.2 123.9 203.4 124.7 203.4C125.5 203.4 137.3 206.2 137.3 206.2z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M120.2 200C120.2 200 138.6 203.6 138.6 208C138.6 210.912 138.357 224.331 133 222.8C124.6 220.4 128.2 206 120.2 200z"/>
+ </g>
+ <g style="fill: #99cc32">
+ <path d="M128.6 203.8C128.6 203.8 137.578 205.274 138.6 208C139.2 209.6 139.863 217.908 134.4 219C129.848 219.911 127.618 209.69 128.6 203.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M214.595 246.349C214.098 244.607 215.409 244.738 217.2 244.2C219.2 243.6 231.4 239.8 232.2 237.2C233 234.6 246.2 239 246.2 239C248 239.8 252.4 242.4 252.4 242.4C257.2 243.6 263.8 244 263.8 244C266.2 245 269.6 247.8 269.6 247.8C284.2 258 296.601 250.8 296.601 250.8C316.601 244.2 310.601 227 310.601 227C307.601 218 310.801 214.6 310.801 214.6C311.001 210.8 318.201 217.2 318.201 217.2C320.801 221.4 321.601 226.4 321.601 226.4C329.601 237.6 326.201 219.8 326.201 219.8C326.401 218.8 323.601 215.2 323.601 214C323.601 212.8 321.801 209.4 321.801 209.4C318.801 206 321.201 199 321.201 199C323.001 185.2 320.801 187 320.801 187C319.601 185.2 310.401 195.2 310.401 195.2C308.201 198.6 302.201 200.2 302.201 200.2C299.401 202 296.001 200.6 296.001 200.6C293.401 200.2 287.801 207.2 287.801 207.2C290.601 207 293.001 211.4 295.401 211.6C297.801 211.8 299.601 209.2 301.201 208.6C302.801 208 305.601 213.8 305.601 213.8C306.001 216.4 300.401 221.2 300.401 221.2C300.001 225.8 298.401 224.2 298.401 224.2C295.401 223.6 294.201 227.4 293.201 232C292.201 236.6 288.001 237 288.001 237C286.401 244.4 285.2 241.4 285.2 241.4C285 235.8 279 241.6 279 241.6C277.8 243.6 273.2 241.4 273.2 241.4C266.4 239.4 268.8 237.4 268.8 237.4C270.6 235.2 281.8 237.4 281.8 237.4C284 235.8 276 231.8 276 231.8C275.4 230 276.4 225.6 276.4 225.6C277.6 222.4 284.4 216.8 284.4 216.8C293.801 215.6 291.001 214 291.001 214C284.801 208.8 279 216.4 279 216.4C276.8 222.6 259.4 237.6 259.4 237.6C254.6 241 257.2 234.2 253.2 237.6C249.2 241 228.6 232 228.6 232C217.038 230.807 214.306 246.549 210.777 243.429C210.777 243.429 216.195 251.949 214.595 246.349z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M409.401 80C409.401 80 383.801 88 381.001 106.8C381.001 106.8 378.601 129.6 399.001 147.2C399.001 147.2 399.401 153.6 401.401 156.8C401.401 156.8 399.801 161.6 418.601 154L445.801 145.6C445.801 145.6 452.201 143.2 457.401 134.4C462.601 125.6 477.801 106.8 474.201 81.6C474.201 81.6 475.401 70.4 469.401 70C469.401 70 461.001 68.4 453.801 76C453.801 76 447.001 79.2 444.601 78.8L409.401 80z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M464.022 79.01C464.022 79.01 466.122 70.08 461.282 74.92C461.282 74.92 454.242 80.64 446.761 80.64C446.761 80.64 432.241 82.84 427.841 96.04C427.841 96.04 423.881 122.88 431.801 128.6C431.801 128.6 436.641 136.08 443.681 129.48C450.722 122.88 466.222 92.65 464.022 79.01z"/>
+ </g>
+ <g style="fill: #323232">
+ <path d="M463.648 79.368C463.648 79.368 465.738 70.624 460.986 75.376C460.986 75.376 454.074 80.992 446.729 80.992C446.729 80.992 432.473 83.152 428.153 96.112C428.153 96.112 424.265 122.464 432.041 128.08C432.041 128.08 436.793 135.424 443.705 128.944C450.618 122.464 465.808 92.76 463.648 79.368z"/>
+ </g>
+ <g style="fill: #666666">
+ <path d="M463.274 79.726C463.274 79.726 465.354 71.168 460.69 75.832C460.69 75.832 453.906 81.344 446.697 81.344C446.697 81.344 432.705 83.464 428.465 96.184C428.465 96.184 424.649 122.048 432.281 127.56C432.281 127.56 436.945 134.768 443.729 128.408C450.514 122.048 465.394 92.87 463.274 79.726z"/>
+ </g>
+ <g style="fill: #999999">
+ <path d="M462.9 80.084C462.9 80.084 464.97 71.712 460.394 76.288C460.394 76.288 453.738 81.696 446.665 81.696C446.665 81.696 432.937 83.776 428.777 96.256C428.777 96.256 425.033 121.632 432.521 127.04C432.521 127.04 437.097 134.112 443.753 127.872C450.41 121.632 464.98 92.98 462.9 80.084z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M462.526 80.442C462.526 80.442 464.586 72.256 460.098 76.744C460.098 76.744 453.569 82.048 446.633 82.048C446.633 82.048 433.169 84.088 429.089 96.328C429.089 96.328 425.417 121.216 432.761 126.52C432.761 126.52 437.249 133.456 443.777 127.336C450.305 121.216 464.566 93.09 462.526 80.442z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M462.151 80.8C462.151 80.8 464.201 72.8 459.801 77.2C459.801 77.2 453.401 82.4 446.601 82.4C446.601 82.4 433.401 84.4 429.401 96.4C429.401 96.4 425.801 120.8 433.001 126C433.001 126 437.401 132.8 443.801 126.8C450.201 120.8 464.151 93.2 462.151 80.8z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M250.6 284C250.6 284 230.2 264.8 222.2 264C222.2 264 187.8 260 173 278C173 278 190.6 257.6 218.2 263.2C218.2 263.2 196.6 258.8 184.2 262C184.2 262 167.4 262 157.8 276L155 280.8C155 280.8 159 266 177.4 260C177.4 260 200.2 255.2 211 260C211 260 189.4 253.2 179.4 255.2C179.4 255.2 149 252.8 136.2 279.2C136.2 279.2 140.2 264.8 155 257.6C155 257.6 168.6 248.8 189 251.6C189 251.6 203.4 254.8 208.6 257.2C213.8 259.6 212.6 256.8 204.2 252C204.2 252 198.6 242 184.6 242.4C184.6 242.4 141.8 246 131.4 258C131.4 258 145 246.8 155.4 244C155.4 244 177.8 236 186.2 236.8C186.2 236.8 211 237.8 218.6 233.8C218.6 233.8 207.4 238.8 210.6 242C213.8 245.2 220.6 252.8 220.6 254C220.6 255.2 244.8 277.3 248.4 281.7L250.6 284z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M389 478C389 478 373.5 441.5 361 432C361 432 387 448 390.5 466C390.5 466 390.5 476 389 478z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M436 485.5C436 485.5 409.5 430.5 391 406.5C391 406.5 434.5 444 439.5 470.5L440 476L437 473.5C437 473.5 436.5 482.5 436 485.5z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M492.5 437C492.5 437 430 377.5 428.5 375C428.5 375 489 441 492 448.5C492 448.5 490 439.5 492.5 437z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M304 480.5C304 480.5 323.5 428.5 342.5 451C342.5 451 357.5 461 357 464C357 464 353 457.5 335 458C335 458 316 455 304 480.5z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M494.5 353C494.5 353 449.5 324.5 442 323C430.193 320.639 491.5 352 496.5 362.5C496.5 362.5 498.5 360 494.5 353z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M343.801 459.601C343.801 459.601 364.201 457.601 371.001 450.801L375.401 454.401L393.001 416.001L396.601 421.201C396.601 421.201 411.001 406.401 410.201 398.401C409.401 390.401 423.001 404.401 423.001 404.401C423.001 404.401 422.201 392.801 429.401 399.601C429.401 399.601 427.001 384.001 435.401 392.001C435.401 392.001 424.864 361.844 447.401 387.601C453.001 394.001 448.601 387.201 448.601 387.201C448.601 387.201 422.601 339.201 444.201 353.601C444.201 353.601 446.201 330.801 445.001 326.401C443.801 322.001 441.801 299.6 437.001 294.4C432.201 289.2 437.401 287.6 443.001 292.8C443.001 292.8 431.801 268.8 445.001 280.8C445.001 280.8 441.401 265.6 437.001 262.8C437.001 262.8 431.401 245.6 446.601 256.4C446.601 256.4 442.201 244 439.001 240.8C439.001 240.8 427.401 213.2 434.601 218L439.001 221.6C439.001 221.6 432.201 207.6 438.601 212C445.001 216.4 445.001 216 445.001 216C445.001 216 423.801 182.8 444.201 200.4C444.201 200.4 436.042 186.482 432.601 179.6C432.601 179.6 413.801 159.2 428.201 165.6L433.001 167.2C433.001 167.2 424.201 157.2 416.201 155.6C408.201 154 418.601 147.6 425.001 149.6C431.401 151.6 447.001 159.2 447.001 159.2C447.001 159.2 459.801 178 463.801 178.4C463.801 178.4 443.801 170.8 449.801 178.8C449.801 178.8 464.201 192.8 457.001 192.4C457.001 192.4 451.001 199.6 455.801 208.4C455.801 208.4 437.342 190.009 452.201 215.6L459.001 232C459.001 232 434.601 207.2 445.801 229.2C445.801 229.2 463.001 252.8 465.001 253.2C467.001 253.6 471.401 262.4 471.401 262.4L467.001 260.4L472.201 269.2C472.201 269.2 461.001 257.2 467.001 270.4L472.601 284.8C472.601 284.8 452.201 262.8 465.801 292.4C465.801 292.4 449.401 287.2 458.201 304.4C458.201 304.4 456.601 320.401 457.001 325.601C457.401 330.801 458.601 359.201 454.201 367.201C449.801 375.201 460.201 394.401 462.201 398.401C464.201 402.401 467.801 413.201 459.001 404.001C450.201 394.801 454.601 400.401 456.601 409.201C458.601 418.001 464.601 433.601 463.801 439.201C463.801 439.201 462.601 440.401 459.401 436.801C459.401 436.801 444.601 414.001 446.201 428.401C446.201 428.401 445.001 436.401 441.801 445.201C441.801 445.201 438.601 456.001 438.601 447.201C438.601 447.201 435.401 430.401 432.601 438.001C429.801 445.601 426.201 451.601 423.401 454.001C420.601 456.401 415.401 433.601 414.201 444.001C414.201 444.001 402.201 431.601 397.401 448.001L385.801 464.401C385.801 464.401 385.401 452.001 384.201 458.001C384.201 458.001 354.201 464.001 343.801 459.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M309.401 102.8C309.401 102.8 297.801 94.8 293.801 95.2C289.801 95.6 321.401 86.4 362.601 114C362.601 114 367.401 116.8 371.001 116.4C371.001 116.4 374.201 118.8 371.401 122.4C371.401 122.4 362.601 132 373.801 143.2C373.801 143.2 392.201 150 386.601 141.2C386.601 141.2 397.401 145.2 399.801 149.2C402.201 153.2 401.001 149.2 401.001 149.2C401.001 149.2 394.601 142 388.601 136.8C388.601 136.8 383.401 134.8 380.601 126.4C377.801 118 375.401 108 379.801 104.8C379.801 104.8 375.801 109.2 376.601 105.2C377.401 101.2 381.001 97.6 382.601 97.2C384.201 96.8 400.601 81 407.401 80.6C407.401 80.6 398.201 82 395.201 81C392.201 80 365.601 68.6 359.601 67.4C359.601 67.4 342.801 60.8 354.801 62.8C354.801 62.8 390.601 66.6 408.801 79.8C408.801 79.8 401.601 71.4 383.201 64.4C383.201 64.4 361.001 51.8 325.801 56.8C325.801 56.8 308.001 60 300.201 61.8C300.201 61.8 297.601 61.2 297.001 60.8C296.401 60.4 284.6 51.4 257 58.4C257 58.4 240 63 231.4 67.8C231.4 67.8 216.2 69 212.6 72.2C212.6 72.2 194 86.8 192 87.6C190 88.4 178.6 96 177.8 96.4C177.8 96.4 202.4 89.8 204.8 87.4C207.2 85 224.6 82.4 227 83.8C229.4 85.2 237.8 84.6 228.2 85.2C228.2 85.2 303.801 100 304.601 102C305.401 104 309.401 102.8 309.401 102.8z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M380.801 93.6C380.801 93.6 370.601 86.2 368.601 86.2C366.601 86.2 354.201 76 350.001 76.4C345.801 76.8 333.601 66.8 306.201 75C306.201 75 305.601 73 309.201 72.2C309.201 72.2 315.601 70 316.001 69.4C316.001 69.4 336.201 65.2 343.401 68.8C343.401 68.8 352.601 71.4 358.801 77.6C358.801 77.6 370.001 80.8 373.201 79.8C373.201 79.8 382.001 82 382.401 83.8C382.401 83.8 388.201 86.8 386.401 89.4C386.401 89.4 386.801 91 380.801 93.6z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M368.33 91.491C369.137 92.123 370.156 92.221 370.761 93.03C370.995 93.344 370.706 93.67 370.391 93.767C369.348 94.084 368.292 93.514 367.15 94.102C366.748 94.309 366.106 94.127 365.553 93.978C363.921 93.537 362.092 93.512 360.401 94.2C358.416 93.071 356.056 93.655 353.975 92.654C353.917 92.627 353.695 92.973 353.621 92.946C350.575 91.801 346.832 92.084 344.401 89.8C341.973 89.388 339.616 88.926 337.188 88.246C335.37 87.737 333.961 86.748 332.341 85.916C330.964 85.208 329.507 84.686 327.973 84.314C326.11 83.862 324.279 83.974 322.386 83.454C322.293 83.429 322.101 83.773 322.019 83.746C321.695 83.638 321.405 83.055 321.234 83.108C319.553 83.63 318.065 82.658 316.401 83C315.223 81.776 313.495 82.021 311.949 81.579C308.985 80.731 305.831 82.001 302.801 81C306.914 79.158 311.601 80.39 315.663 78.321C317.991 77.135 320.653 78.237 323.223 77.477C323.71 77.333 324.401 77.131 324.801 77.8C324.935 77.665 325.117 77.426 325.175 77.454C327.625 78.611 329.94 79.885 332.422 80.951C332.763 81.097 333.295 80.865 333.547 81.067C335.067 82.283 337.01 82.18 338.401 83.4C340.099 82.898 341.892 83.278 343.621 82.654C343.698 82.627 343.932 82.968 343.965 82.946C345.095 82.198 346.25 82.469 347.142 82.773C347.48 82.888 348.143 83.135 348.448 83.209C349.574 83.485 350.43 83.965 351.609 84.148C351.723 84.166 351.908 83.826 351.98 83.854C353.103 84.292 354.145 84.236 354.801 85.4C354.936 85.265 355.101 85.027 355.183 85.054C356.21 85.392 356.859 86.147 357.96 86.388C358.445 86.494 359.057 87.12 359.633 87.296C362.025 88.027 363.868 89.556 366.062 90.451C366.821 90.761 367.697 90.995 368.33 91.491z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M291.696 77.261C289.178 75.536 286.81 74.43 284.368 72.644C284.187 72.511 283.827 72.681 283.625 72.559C282.618 71.95 281.73 71.369 280.748 70.673C280.209 70.291 279.388 70.302 278.88 70.044C276.336 68.752 273.707 68.194 271.2 67C271.882 66.362 273.004 66.606 273.6 65.8C273.795 66.08 274.033 66.364 274.386 66.173C276.064 65.269 277.914 65.116 279.59 65.206C281.294 65.298 283.014 65.603 284.789 65.875C285.096 65.922 285.295 66.445 285.618 66.542C287.846 67.205 290.235 66.68 292.354 67.518C293.945 68.147 295.515 68.97 296.754 70.245C297.006 70.505 296.681 70.806 296.401 71C296.789 70.891 297.062 71.097 297.173 71.41C297.257 71.649 297.257 71.951 297.173 72.19C297.061 72.502 296.782 72.603 296.408 72.654C295.001 72.844 296.773 71.464 296.073 71.912C294.8 72.726 295.546 74.132 294.801 75.4C294.521 75.206 294.291 74.988 294.401 74.6C294.635 75.122 294.033 75.412 293.865 75.728C293.48 76.453 292.581 77.868 291.696 77.261z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M259.198 84.609C256.044 83.815 252.994 83.93 249.978 82.654C249.911 82.626 249.688 82.973 249.624 82.946C248.258 82.352 247.34 81.386 246.264 80.34C245.351 79.452 243.693 79.839 242.419 79.352C242.095 79.228 241.892 78.716 241.591 78.677C240.372 78.52 239.445 77.571 238.4 77C240.736 76.205 243.147 76.236 245.609 75.852C245.722 75.834 245.867 76.155 246 76.155C246.136 76.155 246.266 75.934 246.4 75.8C246.595 76.08 246.897 76.406 247.154 76.152C247.702 75.612 248.258 75.802 248.798 75.842C248.942 75.852 249.067 76.155 249.2 76.155C249.336 76.155 249.467 75.844 249.6 75.844C249.736 75.845 249.867 76.155 250 76.155C250.136 76.155 250.266 75.934 250.4 75.8C251.092 76.582 251.977 76.028 252.799 76.207C253.837 76.434 254.104 77.582 255.178 77.88C259.893 79.184 264.03 81.329 268.393 83.416C268.7 83.563 268.91 83.811 268.8 84.2C269.067 84.2 269.38 84.112 269.57 84.244C270.628 84.976 271.669 85.524 272.366 86.622C272.582 86.961 272.253 87.368 272.02 87.316C267.591 86.321 263.585 85.713 259.198 84.609z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M245.338 128.821C243.746 127.602 243.162 125.571 242.034 123.779C241.82 123.439 242.094 123.125 242.411 123.036C242.971 122.877 243.514 123.355 243.923 123.557C245.668 124.419 247.203 125.661 249.2 125.8C251.19 128.034 255.45 128.419 255.457 131.8C255.458 132.659 254.03 131.741 253.6 132.6C251.149 131.597 248.76 131.7 246.38 130.233C245.763 129.852 246.093 129.399 245.338 128.821z"/>
+ </g>
+ <g style="fill: #cc7226">
+ <path d="M217.8 76.244C217.935 76.245 224.966 76.478 224.949 76.592C224.904 76.901 217.174 77.95 216.81 77.78C216.646 77.704 209.134 80.134 209 80C209.268 79.865 217.534 76.244 217.8 76.244z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M233.2 86C233.2 86 218.4 87.8 214 89C209.6 90.2 191 97.8 188 99.8C188 99.8 174.6 105.2 157.6 125.2C157.6 125.2 165.2 121.8 167.4 119C167.4 119 181 106.4 180.8 109C180.8 109 193 100.4 192.4 102.6C192.4 102.6 216.8 91.4 214.8 94.6C214.8 94.6 236.4 90 235.4 92C235.4 92 254.2 96.4 251.4 96.6C251.4 96.6 245.6 97.8 252 101.4C252 101.4 248.6 105.8 243.2 101.8C237.8 97.8 240.8 100 235.8 101C235.8 101 233.2 101.8 228.6 97.8C228.6 97.8 223 93.2 214.2 96.8C214.2 96.8 183.6 109.4 181.6 110C181.6 110 178 112.8 175.6 116.4C175.6 116.4 169.8 120.8 166.8 122.2C166.8 122.2 154 133.8 152.8 135.2C152.8 135.2 149.4 140.4 148.6 140.8C148.6 140.8 155 137 157 135C157 135 171 125 176.4 124.2C176.4 124.2 180.8 121.2 181.6 119.8C181.6 119.8 196 110.6 200.2 110.6C200.2 110.6 209.4 115.8 211.8 108.8C211.8 108.8 217.6 107 223.2 108.2C223.2 108.2 226.4 105.6 225.6 103.4C225.6 103.4 227.2 101.6 228.2 105.4C228.2 105.4 231.6 109 236.4 107C236.4 107 240.4 106.8 238.4 109.2C238.4 109.2 234 113 222.2 113.2C222.2 113.2 209.8 113.8 193.4 121.4C193.4 121.4 163.6 131.8 154.4 142.2C154.4 142.2 148 151 142.6 152.2C142.6 152.2 136.8 153 130.8 160.4C130.8 160.4 140.6 154.6 149.6 154.6C149.6 154.6 153.6 152.2 149.8 155.8C149.8 155.8 146.2 163.4 147.8 168.8C147.8 168.8 147.2 174 146.4 175.6C146.4 175.6 138.6 188.4 138.6 190.8C138.6 193.2 139.8 203 140.2 203.6C140.6 204.2 139.2 202 143 204.4C146.8 206.8 149.6 208.4 150.4 211.2C151.2 214 148.4 205.8 148.2 204C148 202.2 143.8 195 144.6 192.6C144.6 192.6 145.6 193.6 146.4 195C146.4 195 145.8 194.4 146.4 190.8C146.4 190.8 147.2 185.6 148.6 182.4C150 179.2 152 175.4 152.4 174.6C152.8 173.8 152.8 168 154.2 170.6L157.6 173.2C157.6 173.2 154.8 170.6 157 168.4C157 168.4 156 162.8 157.8 160.2C157.8 160.2 164.8 151.8 166.4 150.8C168 149.8 166.6 150.2 166.6 150.2C166.6 150.2 172.6 146 166.8 147.6C166.8 147.6 162.8 149.2 159.8 149.2C159.8 149.2 152.2 151.2 156.2 147C160.2 142.8 170.2 137.4 174 137.6L174.8 139.2L186 136.8L184.8 137.6C184.8 137.6 184.6 137.4 188.8 137C193 136.6 198.8 138 200.2 136.2C201.6 134.4 205 133.4 204.6 134.8C204.2 136.2 204 138.2 204 138.2C204 138.2 209 132.4 208.4 134.6C207.8 136.8 199.6 142 198.2 148.2L208.6 140L212.2 137C212.2 137 215.8 139.2 216 137.6C216.2 136 220.8 130.2 222 130.4C223.2 130.6 225.2 127.8 225 130.4C224.8 133 232.4 138.4 232.4 138.4C232.4 138.4 235.6 136.6 237 138C238.4 139.4 242.6 118.2 242.6 118.2L267.6 107.6L311.201 104.2L294.201 97.4L233.2 86z"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M251.4 285C251.4 285 236.4 268.2 228 265.6C228 265.6 214.6 258.8 190 266.6"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M224.8 264.2C224.8 264.2 199.6 256.2 184.2 260.4C184.2 260.4 165.8 262.4 157.4 276.2"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M221.2 263C221.2 263 204.2 255.8 189.4 253.6C189.4 253.6 172.8 251 156.2 258.2C156.2 258.2 144 264.2 138.6 274.4"/>
+ </g>
+ <g style="stroke:#4c0000; stroke-width:2">
+ <path d="M222.2 263.4C222.2 263.4 206.8 252.4 205.8 251C205.8 251 198.8 240 185.8 239.6C185.8 239.6 164.4 240.4 147.2 248.4"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M220.895 254.407C222.437 255.87 249.4 284.8 249.4 284.8C284.6 321.401 256.6 287.2 256.6 287.2C249 282.4 239.8 263.6 239.8 263.6C238.6 260.8 253.8 270.8 253.8 270.8C257.8 271.6 271.4 290.8 271.4 290.8C264.6 288.4 269.4 295.6 269.4 295.6C272.2 297.6 292.601 313.201 292.601 313.201C296.201 317.201 300.201 318.801 300.201 318.801C314.201 313.601 307.801 326.801 307.801 326.801C310.201 333.601 315.801 322.001 315.801 322.001C327.001 305.2 310.601 307.601 310.601 307.601C280.6 310.401 273.8 294.4 273.8 294.4C271.4 292 280.2 294.4 280.2 294.4C288.601 296.4 273 282 273 282C275.4 282 284.6 288.8 284.6 288.8C295.001 298 297.001 296 297.001 296C315.001 287.2 325.401 294.8 325.401 294.8C327.401 296.4 321.801 303.2 323.401 308.401C325.001 313.601 329.801 326.001 329.801 326.001C327.401 327.601 327.801 338.401 327.801 338.401C344.601 361.601 335.001 359.601 335.001 359.601C319.401 359.201 334.201 366.801 334.201 366.801C337.401 368.801 346.201 376.001 346.201 376.001C343.401 374.801 341.801 380.001 341.801 380.001C346.601 384.001 343.801 388.801 343.801 388.801C337.801 390.001 336.601 394.001 336.601 394.001C343.401 402.001 333.401 402.401 333.401 402.401C337.001 406.801 332.201 418.801 332.201 418.801C327.401 418.801 321.001 424.401 321.001 424.401C323.401 429.201 313.001 434.801 313.001 434.801C304.601 436.401 307.401 443.201 307.401 443.201C299.401 449.201 297.001 465.201 297.001 465.201C296.201 475.601 293.801 478.801 299.001 476.801C304.201 474.801 303.401 462.401 303.401 462.401C298.601 446.801 341.401 430.801 341.401 430.801C345.401 429.201 346.201 424.001 346.201 424.001C348.201 424.401 357.001 432.001 357.001 432.001C364.601 443.201 365.001 434.001 365.001 434.001C366.201 430.401 364.601 424.401 364.601 424.401C370.601 402.801 356.601 396.401 356.601 396.401C346.601 362.801 360.601 371.201 360.601 371.201C363.401 376.801 374.201 382.001 374.201 382.001L377.801 379.601C376.201 374.801 384.601 368.801 384.601 368.801C387.401 375.201 393.401 367.201 393.401 367.201C397.001 342.801 409.401 357.201 409.401 357.201C413.401 358.401 414.601 351.601 414.601 351.601C418.201 341.201 414.601 327.601 414.601 327.601C418.201 327.201 427.801 333.201 427.801 333.201C430.601 329.601 421.401 312.801 425.401 315.201C429.401 317.601 433.801 319.201 433.801 319.201C434.601 317.201 424.601 304.801 424.601 304.801C420.201 302 415.001 281.6 415.001 281.6C422.201 285.2 412.201 270 412.201 270C412.201 266.8 418.201 255.6 418.201 255.6C417.401 248.8 418.201 249.2 418.201 249.2C421.001 250.4 429.001 252 422.201 245.6C415.401 239.2 423.001 234.4 423.001 234.4C427.401 231.6 413.801 232 413.801 232C408.601 227.6 409.001 223.6 409.001 223.6C417.001 225.6 402.601 211.2 400.201 207.6C397.801 204 407.401 198.8 407.401 198.8C420.601 195.2 409.001 192 409.001 192C389.401 192.4 400.201 181.6 400.201 181.6C406.201 182 404.601 179.6 404.601 179.6C399.401 178.4 389.801 172 389.801 172C385.801 168.4 389.401 169.2 389.401 169.2C406.201 170.4 377.401 159.2 377.401 159.2C385.401 159.2 367.401 148.8 367.401 148.8C365.401 147.2 362.201 139.6 362.201 139.6C356.201 134.4 351.401 127.6 351.401 127.6C351.001 123.2 346.201 118.4 346.201 118.4C334.601 104.8 329.001 105.2 329.001 105.2C314.201 101.6 309.001 102.4 309.001 102.4L256.2 106.8C229.8 119.6 237.6 140.6 237.6 140.6C244 149 253.2 145.2 253.2 145.2C257.8 139 269.4 141.2 269.4 141.2C289.801 144.4 287.201 140.8 287.201 140.8C284.801 136.2 268.6 130 268.4 129.4C268.2 128.8 259.4 125.4 259.4 125.4C256.4 124.2 252 115 252 115C248.8 111.6 264.6 117.4 264.6 117.4C263.4 118.4 270.8 122.4 270.8 122.4C288.201 121.4 298.801 132.2 298.801 132.2C309.601 148.8 309.801 140.6 309.801 140.6C312.601 131.2 300.801 110 300.801 110C301.201 108 309.401 114.6 309.401 114.6C310.801 112.6 311.601 118.4 311.601 118.4C311.801 120.8 315.601 128.8 315.601 128.8C318.401 141.8 322.001 134.4 322.001 134.4L326.601 143.8C328.001 146.4 322.001 154 322.001 154C321.801 156.8 322.601 156.6 317.001 164.2C311.401 171.8 314.801 176.2 314.801 176.2C313.401 182.8 322.201 182.4 322.201 182.4C324.801 184.6 328.201 184.6 328.201 184.6C330.001 186.6 332.401 186 332.401 186C334.001 182.2 340.201 184.2 340.201 184.2C341.601 181.8 349.801 181.4 349.801 181.4C350.801 178.8 351.201 177.2 354.601 176.6C358.001 176 333.401 133 333.401 133C339.801 132.2 331.601 119.8 331.601 119.8C329.401 113.2 340.801 127.8 343.001 129.2C345.201 130.6 346.201 132.8 344.601 132.6C343.001 132.4 341.201 134.6 342.601 134.8C344.001 135 357.001 150 360.401 160.2C363.801 170.4 369.801 174.4 376.001 180.4C382.201 186.4 381.401 210.6 381.401 210.6C381.001 219.4 387.001 230 387.001 230C389.001 233.8 384.801 252 384.801 252C382.801 254.2 384.201 255 384.201 255C385.201 256.2 392.001 269.4 392.001 269.4C390.201 269.2 393.801 272.8 393.801 272.8C399.001 278.8 392.601 275.8 392.601 275.8C386.601 274.2 393.601 284 393.601 284C394.801 285.8 385.801 281.2 385.801 281.2C376.601 280.6 388.201 287.8 388.201 287.8C396.801 295 385.401 290.6 385.401 290.6C380.801 288.8 384.001 295.6 384.001 295.6C387.201 297.2 404.401 304.2 404.401 304.2C404.801 308.001 401.801 313.001 401.801 313.001C402.201 317.001 400.001 320.401 400.001 320.401C398.801 328.601 398.201 329.401 398.201 329.401C394.001 329.601 386.601 343.401 386.601 343.401C384.801 346.001 374.601 358.001 374.601 358.001C372.601 365.001 354.601 357.801 354.601 357.801C348.001 361.201 350.001 357.801 350.001 357.801C349.601 355.601 354.401 349.601 354.401 349.601C361.401 347.001 358.801 336.201 358.801 336.201C362.801 334.801 351.601 332.001 351.801 330.801C352.001 329.601 357.801 328.201 357.801 328.201C365.801 326.201 361.401 323.801 361.401 323.801C360.801 319.801 363.801 314.201 363.801 314.201C375.401 313.401 363.801 297.2 363.801 297.2C353.001 289.6 352.001 283.8 352.001 283.8C364.601 275.6 356.401 263.2 356.601 259.6C356.801 256 358.001 234.4 358.001 234.4C356.001 228.2 353.001 214.6 353.001 214.6C355.201 209.4 362.601 196.8 362.601 196.8C365.401 192.6 374.201 187.8 372.001 184.8C369.801 181.8 362.001 183.6 362.001 183.6C354.201 182.2 354.801 187.4 354.801 187.4C353.201 188.4 352.401 193.4 352.401 193.4C351.68 201.333 342.801 207.6 342.801 207.6C331.601 213.8 340.801 217.8 340.801 217.8C346.801 224.4 337.001 224.6 337.001 224.6C326.001 222.8 334.201 233 334.201 233C345.001 245.8 342.001 248.6 342.001 248.6C331.801 249.6 344.401 258.8 344.401 258.8C344.401 258.8 343.601 256.8 343.801 258.6C344.001 260.4 347.001 264.6 347.801 266.6C348.601 268.6 344.601 268.8 344.601 268.8C345.201 278.4 329.801 274.2 329.801 274.2C329.801 274.2 329.801 274.2 328.201 274.4C326.601 274.6 315.401 273.8 309.601 271.6C303.801 269.4 297.001 269.4 297.001 269.4C297.001 269.4 293.001 271.2 285.4 271C277.8 270.8 269.8 273.6 269.8 273.6C265.4 273.2 274 268.8 274.2 269C274.4 269.2 280 263.6 272 264.2C250.203 265.835 239.4 255.6 239.4 255.6C237.4 254.2 234.8 251.4 234.8 251.4C224.8 249.4 236.2 263.8 236.2 263.8C237.4 265.2 236 266.2 236 266.2C235.2 264.6 227.4 259.2 227.4 259.2C224.589 258.227 223.226 256.893 220.895 254.407z"/>
+ </g>
+ <g style="fill: #4c0000">
+ <path d="M197 242.8C197 242.8 208.6 248.4 211.2 251.2C213.8 254 227.8 265.4 227.8 265.4C227.8 265.4 222.4 263.4 219.8 261.6C217.2 259.8 206.4 251.6 206.4 251.6C206.4 251.6 202.6 245.6 197 242.8z"/>
+ </g>
+ <g style="fill: #99cc32">
+ <path d="M138.991 211.603C139.328 211.455 138.804 208.743 138.6 208.2C137.578 205.474 128.6 204 128.6 204C128.373 205.365 128.318 206.961 128.424 208.599C128.424 208.599 133.292 214.118 138.991 211.603z"/>
+ </g>
+ <g style="fill: #659900">
+ <path d="M138.991 211.403C138.542 211.561 138.976 208.669 138.8 208.2C137.778 205.474 128.6 203.9 128.6 203.9C128.373 205.265 128.318 206.861 128.424 208.499C128.424 208.499 132.692 213.618 138.991 211.403z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M134.6 211.546C133.975 211.546 133.469 210.406 133.469 209C133.469 207.595 133.975 206.455 134.6 206.455C135.225 206.455 135.732 207.595 135.732 209C135.732 210.406 135.225 211.546 134.6 211.546z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M134.6 209z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M89 309.601C89 309.601 83.4 319.601 108.2 313.601C108.2 313.601 122.2 312.401 124.6 310.001C125.8 310.801 134.166 313.734 137 314.401C143.8 316.001 152.2 306 152.2 306C152.2 306 156.8 295.5 159.6 295.5C162.4 295.5 159.2 297.1 159.2 297.1C159.2 297.1 152.6 307.201 153 308.801C153 308.801 147.8 328.801 131.8 329.601C131.8 329.601 115.65 330.551 117 336.401C117 336.401 125.8 334.001 128.2 336.401C128.2 336.401 139 336.001 131 342.401L124.2 354.001C124.2 354.001 124.34 357.919 114.2 354.401C104.4 351.001 94.1 338.101 94.1 338.101C94.1 338.101 78.15 323.551 89 309.601z"/>
+ </g>
+ <g style="fill: #e59999">
+ <path d="M87.8 313.601C87.8 313.601 85.8 323.201 122.6 312.801C122.6 312.801 127 312.801 129.4 313.601C131.8 314.401 143.8 317.201 145.8 316.001C145.8 316.001 138.6 329.601 127 328.001C127 328.001 113.8 329.601 114.2 334.401C114.2 334.401 118.2 341.601 123 344.001C123 344.001 125.8 346.401 125.4 349.601C125 352.801 122.2 354.401 120.2 355.201C118.2 356.001 115 352.801 113.4 352.801C111.8 352.801 103.4 346.401 99 341.601C94.6 336.801 86.2 324.801 86.6 322.001C87 319.201 87.8 313.601 87.8 313.601z"/>
+ </g>
+ <g style="fill: #b26565">
+ <path d="M91 331.051C93.6 335.001 96.8 339.201 99 341.601C103.4 346.401 111.8 352.801 113.4 352.801C115 352.801 118.2 356.001 120.2 355.201C122.2 354.401 125 352.801 125.4 349.601C125.8 346.401 123 344.001 123 344.001C119.934 342.468 117.194 338.976 115.615 336.653C115.615 336.653 115.8 339.201 110.6 338.401C105.4 337.601 100.2 334.801 98.6 331.601C97 328.401 94.6 326.001 96.2 329.601C97.8 333.201 100.2 336.801 101.8 337.201C103.4 337.601 103 338.801 100.6 338.401C98.2 338.001 95.4 337.601 91 332.401z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M88.4 310.001C88.4 310.001 90.2 296.4 91.4 292.4C91.4 292.4 90.6 285.6 93 281.4C95.4 277.2 97.4 271 100.4 265.6C103.4 260.2 103.6 256.2 107.6 254.6C111.6 253 117.6 244.4 120.4 243.4C123.2 242.4 123 243.2 123 243.2C123 243.2 129.8 228.4 143.4 232.4C143.4 232.4 127.2 229.6 143 220.2C143 220.2 138.2 221.3 141.5 214.3C143.701 209.632 143.2 216.4 132.2 228.2C132.2 228.2 127.2 236.8 122 239.8C116.8 242.8 104.8 249.8 103.6 253.6C102.4 257.4 99.2 263.2 97.2 264.8C95.2 266.4 92.4 270.6 92 274C92 274 90.8 278 89.4 279.2C88 280.4 87.8 283.6 87.8 285.6C87.8 287.6 85.8 290.4 86 292.8C86 292.8 86.8 311.801 86.4 313.801L88.4 310.001z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M79.8 314.601C79.8 314.601 77.8 313.201 73.4 319.201C73.4 319.201 80.7 352.201 80.7 353.601C80.7 353.601 81.8 351.501 80.5 344.301C79.2 337.101 78.3 324.401 78.3 324.401L79.8 314.601z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M101.4 254C101.4 254 83.8 257.2 84.2 286.4L83.4 311.201C83.4 311.201 82.2 285.6 81 284C79.8 282.4 83.8 271.2 80.6 277.2C80.6 277.2 66.6 291.2 74.6 312.401C74.6 312.401 76.1 315.701 73.1 311.101C73.1 311.101 68.5 298.5 69.6 292.1C69.6 292.1 69.8 289.9 71.7 287.1C71.7 287.1 80.3 275.4 83 273.1C83 273.1 84.8 258.7 100.2 253.5C100.2 253.5 105.9 251.2 101.4 254z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M240.8 187.8C241.46 187.446 241.451 186.476 242.031 186.303C243.18 185.959 243.344 184.892 243.862 184.108C244.735 182.789 244.928 181.256 245.51 179.765C245.782 179.065 245.809 178.11 245.496 177.45C244.322 174.969 243.62 172.52 242.178 170.094C241.91 169.644 241.648 168.85 241.447 168.252C240.984 166.868 239.727 165.877 238.867 164.557C238.579 164.116 239.104 163.191 238.388 163.107C237.491 163.002 236.042 162.422 235.809 163.448C235.221 166.035 236.232 168.558 237.2 171C236.418 171.692 236.752 172.613 236.904 173.38C237.614 176.986 236.416 180.338 235.655 183.812C235.632 183.916 235.974 184.114 235.946 184.176C234.724 186.862 233.272 189.307 231.453 191.688C230.695 192.68 229.823 193.596 229.326 194.659C228.958 195.446 228.55 196.412 228.8 197.4C225.365 200.18 223.115 204.025 220.504 207.871C220.042 208.551 220.333 209.76 220.884 210.029C221.697 210.427 222.653 209.403 223.123 208.557C223.512 207.859 223.865 207.209 224.356 206.566C224.489 206.391 224.31 205.972 224.445 205.851C227.078 203.504 228.747 200.568 231.2 198.2C233.15 197.871 234.687 196.873 236.435 195.86C236.743 195.681 237.267 195.93 237.557 195.735C239.31 194.558 239.308 192.522 239.414 190.612C239.464 189.728 239.66 188.411 240.8 187.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M231.959 183.334C232.083 183.257 231.928 182.834 232.037 182.618C232.199 182.294 232.602 182.106 232.764 181.782C232.873 181.566 232.71 181.186 232.846 181.044C235.179 178.597 235.436 175.573 234.4 172.6C235.424 171.98 235.485 170.718 235.06 169.871C234.207 168.171 234.014 166.245 233.039 164.702C232.237 163.433 230.659 162.189 229.288 163.492C228.867 163.892 228.546 164.679 228.824 165.391C228.888 165.554 229.173 165.7 229.146 165.782C229.039 166.106 228.493 166.33 228.487 166.602C228.457 168.098 227.503 169.609 228.133 170.938C228.905 172.567 229.724 174.424 230.4 176.2C229.166 178.316 230.199 180.765 228.446 182.642C228.31 182.788 228.319 183.174 228.441 183.376C228.733 183.862 229.139 184.268 229.625 184.56C229.827 184.681 230.175 184.683 230.375 184.559C230.953 184.197 231.351 183.71 231.959 183.334z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M294.771 173.023C296.16 174.815 296.45 177.61 294.401 179C294.951 182.309 298.302 180.33 300.401 179.8C300.292 179.412 300.519 179.068 300.802 179.063C301.859 179.048 302.539 178.016 303.601 178.2C304.035 176.643 305.673 175.941 306.317 174.561C308.043 170.866 307.452 166.593 304.868 163.347C304.666 163.093 304.883 162.576 304.759 162.214C304.003 160.003 301.935 159.688 300.001 159C298.824 155.125 298.163 151.094 296.401 147.4C294.787 147.15 294.089 145.411 292.752 144.691C291.419 143.972 290.851 145.551 290.892 146.597C290.899 146.802 291.351 147.026 291.181 147.391C291.105 147.555 290.845 147.666 290.845 147.8C290.846 147.935 291.067 148.066 291.201 148.2C290.283 149.02 288.86 149.497 288.565 150.642C287.611 154.352 290.184 157.477 291.852 160.678C292.443 161.813 291.707 163.084 290.947 164.292C290.509 164.987 290.617 166.114 290.893 166.97C291.645 169.301 293.236 171.04 294.771 173.023z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M257.611 191.409C256.124 193.26 252.712 195.829 255.629 197.757C255.823 197.886 256.193 197.89 256.366 197.756C258.387 196.191 260.39 195.288 262.826 194.706C262.95 194.677 263.224 195.144 263.593 194.983C265.206 194.28 267.216 194.338 268.4 193C272.167 193.224 275.732 192.108 279.123 190.8C280.284 190.352 281.554 189.793 282.755 189.291C284.131 188.715 285.335 187.787 286.447 186.646C286.58 186.51 286.934 186.6 287.201 186.6C287.161 185.737 288.123 185.61 288.37 184.988C288.462 184.756 288.312 184.36 288.445 184.258C290.583 182.628 291.503 180.61 290.334 178.233C290.049 177.655 289.8 177.037 289.234 176.561C288.149 175.65 287.047 176.504 286 176.2C285.841 176.828 285.112 176.656 284.726 176.854C283.867 177.293 282.534 176.708 281.675 177.146C280.313 177.841 279.072 178.01 277.65 178.387C277.338 178.469 276.56 178.373 276.4 179C276.266 178.866 276.118 178.632 276.012 178.654C274.104 179.05 272.844 179.264 271.543 180.956C271.44 181.089 270.998 180.91 270.839 181.045C269.882 181.853 269.477 183.087 268.376 183.759C268.175 183.882 267.823 183.714 267.629 183.843C266.983 184.274 266.616 184.915 265.974 185.362C265.645 185.591 265.245 185.266 265.277 185.01C265.522 183.063 266.175 181.276 265.6 179.4C267.677 176.88 270.194 174.931 272 172.2C272.015 170.034 272.707 167.888 272.594 165.811C272.584 165.618 272.296 164.885 272.17 164.538C271.858 163.684 272.764 162.618 271.92 161.894C270.516 160.691 269.224 161.567 268.4 163C266.562 163.39 264.496 164.083 262.918 162.849C261.911 162.062 261.333 161.156 260.534 160.1C259.549 158.798 259.884 157.362 259.954 155.798C259.96 155.67 259.645 155.534 259.645 155.4C259.646 155.265 259.866 155.134 260 155C259.294 154.374 259.019 153.316 258 153C258.305 151.908 257.629 151.024 256.758 150.722C254.763 150.031 253.086 151.943 251.194 152.016C250.68 152.035 250.213 150.997 249.564 150.672C249.132 150.456 248.428 150.423 248.066 150.689C247.378 151.193 246.789 151.307 246.031 151.512C244.414 151.948 243.136 153.042 241.656 153.897C240.171 154.754 239.216 156.191 238.136 157.511C237.195 158.663 237.059 161.077 238.479 161.577C240.322 162.227 241.626 159.524 243.592 159.85C243.904 159.901 244.11 160.212 244 160.6C244.389 160.709 244.607 160.48 244.8 160.2C245.658 161.219 246.822 161.556 247.76 162.429C248.73 163.333 250.476 162.915 251.491 163.912C253.02 165.414 252.461 168.095 254.4 169.4C253.814 170.713 253.207 171.99 252.872 173.417C252.59 174.623 253.584 175.82 254.795 175.729C256.053 175.635 256.315 174.876 256.8 173.8C257.067 174.067 257.536 174.364 257.495 174.58C257.038 176.967 256.011 178.96 255.553 181.391C255.494 181.708 255.189 181.91 254.8 181.8C254.332 185.949 250.28 188.343 247.735 191.508C247.332 192.01 247.328 193.259 247.737 193.662C249.14 195.049 251.1 193.503 252.8 193C253.013 191.794 253.872 190.852 255.204 190.908C255.46 190.918 255.695 190.376 256.019 190.246C256.367 190.108 256.869 190.332 257.155 190.134C258.884 188.939 260.292 187.833 262.03 186.644C262.222 186.513 262.566 186.672 262.782 186.564C263.107 186.402 263.294 186.015 263.617 185.83C263.965 185.63 264.207 185.92 264.4 186.2C263.754 186.549 263.75 187.506 263.168 187.708C262.393 187.976 261.832 188.489 261.158 188.936C260.866 189.129 260.207 188.881 260.103 189.06C259.505 190.088 258.321 190.526 257.611 191.409z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M202.2 142C202.2 142 192.962 139.128 181.8 164.8C181.8 164.8 179.4 170 177 172C174.6 174 163.4 177.6 161.4 181.6L151 197.6C151 197.6 165.8 181.6 169 179.2C169 179.2 177 170.8 173.8 177.6C173.8 177.6 159.8 188.4 161 197.6C161 197.6 155.4 212 154.6 214C154.6 214 170.6 182 173 180.8C175.4 179.6 176.6 179.6 175.4 183.2C174.2 186.8 173.8 203.2 171 205.2C171 205.2 179 184.8 178.2 181.6C178.2 181.6 181.4 178 183.8 183.2L182.6 199.2L187 211.2C187 211.2 184.6 200 186.2 184.4C186.2 184.4 184.2 174 188.2 179.6C192.2 185.2 201.8 191.2 201.8 196C201.8 196 196.6 178.4 187.4 173.6L183.4 179.6L182.2 177.6C182.2 177.6 178.6 176.8 183 170C187.4 163.2 187 162.4 187 162.4C187 162.4 193.4 169.6 195 169.6C195 169.6 208.2 162 209.4 186.4C209.4 186.4 216.2 172 207 165.2C207 165.2 192.2 163.2 193.4 158L200.6 145.6C204.2 140.4 202.6 143.2 202.6 143.2z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M182.2 158.4C182.2 158.4 169.4 158.4 166.2 163.6L159 173.2C159 173.2 176.2 163.2 180.2 162C184.2 160.8 182.2 158.4 182.2 158.4z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M142.2 164.8C142.2 164.8 140.2 166 139.8 168.8C139.4 171.6 137 172 137.8 174.8C138.6 177.6 140.6 180 140.6 176C140.6 172 142.2 170 143 168.8C143.8 167.6 145.4 163.2 142.2 164.8z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M133.4 226C133.4 226 125 222 121.8 218.4C118.6 214.8 119.052 219.966 114.2 219.6C108.353 219.159 109.4 203.2 109.4 203.2L105.4 210.8C105.4 210.8 104.2 225.2 112.2 222.8C116.107 221.628 117.4 223.2 115.8 224C114.2 224.8 121.4 225.2 118.6 226.8C115.8 228.4 130.2 223.2 127.8 233.6L133.4 226z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M120.8 240.4C120.8 240.4 105.4 244.8 101.8 235.2C101.8 235.2 97 237.6 99.2 240.6C101.4 243.6 102.6 244 102.6 244C102.6 244 108 245.2 107.4 246C106.8 246.8 104.4 250.2 104.4 250.2C104.4 250.2 114.6 244.2 120.8 240.4z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M349.201 318.601C348.774 320.735 347.103 321.536 345.201 322.201C343.284 321.243 340.686 318.137 338.801 320.201C338.327 319.721 337.548 319.661 337.204 318.999C336.739 318.101 337.011 317.055 336.669 316.257C336.124 314.985 335.415 313.619 335.601 312.201C337.407 311.489 338.002 309.583 337.528 307.82C337.459 307.563 337.03 307.366 337.23 307.017C337.416 306.694 337.734 306.467 338.001 306.2C337.866 306.335 337.721 306.568 337.61 306.548C337 306.442 337.124 305.805 337.254 305.418C337.839 303.672 339.853 303.408 341.201 304.6C341.457 304.035 341.966 304.229 342.401 304.2C342.351 303.621 342.759 303.094 342.957 302.674C343.475 301.576 345.104 302.682 345.901 302.07C346.977 301.245 348.04 300.546 349.118 301.149C350.927 302.162 352.636 303.374 353.835 305.115C354.41 305.949 354.65 307.23 354.592 308.188C354.554 308.835 353.173 308.483 352.83 309.412C352.185 311.16 354.016 311.679 354.772 313.017C354.97 313.366 354.706 313.67 354.391 313.768C353.98 313.896 353.196 313.707 353.334 314.16C354.306 317.353 351.55 318.031 349.201 318.601z"/>
+ </g>
+ <g style="fill: #ffffff">
+ <path d="M339.6 338.201C339.593 336.463 337.992 334.707 339.201 333.001C339.336 333.135 339.467 333.356 339.601 333.356C339.736 333.356 339.867 333.135 340.001 333.001C341.496 335.217 345.148 336.145 345.006 338.991C344.984 339.438 343.897 340.356 344.801 341.001C342.988 342.349 342.933 344.719 342.001 346.601C340.763 346.315 339.551 345.952 338.401 345.401C338.753 343.915 338.636 342.231 339.456 340.911C339.89 340.213 339.603 339.134 339.6 338.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M173.4 329.201C173.4 329.201 156.542 339.337 170.6 324.001C179.4 314.401 189.4 308.801 189.4 308.801C189.4 308.801 199.8 304.4 203.4 303.2C207 302 222.2 296.8 225.4 296.4C228.6 296 238.2 292 245 296C251.8 300 259.8 304.4 259.8 304.4C259.8 304.4 243.4 296 239.8 298.4C236.2 300.8 229 300.4 223 303.6C223 303.6 208.2 308.001 205 310.001C201.8 312.001 191.4 323.601 189.8 322.801C188.2 322.001 190.2 321.601 191.4 318.801C192.6 316.001 190.6 314.401 182.6 320.801C174.6 327.201 173.4 329.201 173.4 329.201z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M180.805 323.234C180.805 323.234 182.215 310.194 190.693 311.859C190.693 311.859 198.919 307.689 201.641 305.721C201.641 305.721 209.78 304.019 211.09 303.402C229.569 294.702 244.288 299.221 244.835 298.101C245.381 296.982 265.006 304.099 268.615 308.185C269.006 308.628 258.384 302.588 248.686 300.697C240.413 299.083 218.811 300.944 207.905 306.48C204.932 307.989 195.987 313.773 193.456 313.662C190.925 313.55 180.805 323.234 180.805 323.234z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M177 348.801C177 348.801 161.8 346.401 178.6 344.801C178.6 344.801 196.6 342.801 200.6 337.601C200.6 337.601 214.2 328.401 217 328.001C219.8 327.601 249.8 320.401 250.2 318.001C250.6 315.601 256.2 315.601 257.8 316.401C259.4 317.201 258.6 318.401 255.8 319.201C253 320.001 221.8 336.401 215.4 337.601C209 338.801 197.4 346.401 192.6 347.601C187.8 348.801 177 348.801 177 348.801z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M196.52 341.403C196.52 341.403 187.938 340.574 196.539 339.755C196.539 339.755 205.355 336.331 207.403 333.668C207.403 333.668 214.367 328.957 215.8 328.753C217.234 328.548 231.194 324.861 231.399 323.633C231.604 322.404 265.67 309.823 270.09 313.013C273.001 315.114 263.1 313.437 253.466 317.847C252.111 318.467 218.258 333.054 214.981 333.668C211.704 334.283 205.765 338.174 203.307 338.788C200.85 339.403 196.52 341.403 196.52 341.403z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M188.6 343.601C188.6 343.601 193.8 343.201 192.6 344.801C191.4 346.401 189 345.601 189 345.601L188.6 343.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M181.4 345.201C181.4 345.201 186.6 344.801 185.4 346.401C184.2 348.001 181.8 347.201 181.8 347.201L181.4 345.201z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M171 346.801C171 346.801 176.2 346.401 175 348.001C173.8 349.601 171.4 348.801 171.4 348.801L171 346.801z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M163.4 347.601C163.4 347.601 168.6 347.201 167.4 348.801C166.2 350.401 163.8 349.601 163.8 349.601L163.4 347.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M201.8 308.001C201.8 308.001 206.2 308.001 205 309.601C203.8 311.201 200.6 310.801 200.6 310.801L201.8 308.001z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M191.8 313.601C191.8 313.601 198.306 311.46 195.8 314.801C194.6 316.401 192.2 315.601 192.2 315.601L191.8 313.601z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M180.6 318.401C180.6 318.401 185.8 318.001 184.6 319.601C183.4 321.201 181 320.401 181 320.401L180.6 318.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M173 324.401C173 324.401 178.2 324.001 177 325.601C175.8 327.201 173.4 326.401 173.4 326.401L173 324.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M166.2 329.201C166.2 329.201 171.4 328.801 170.2 330.401C169 332.001 166.6 331.201 166.6 331.201L166.2 329.201z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M205.282 335.598C205.282 335.598 212.203 335.066 210.606 337.195C209.009 339.325 205.814 338.26 205.814 338.26L205.282 335.598z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M215.682 330.798C215.682 330.798 222.603 330.266 221.006 332.395C219.409 334.525 216.214 333.46 216.214 333.46L215.682 330.798z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M226.482 326.398C226.482 326.398 233.403 325.866 231.806 327.995C230.209 330.125 227.014 329.06 227.014 329.06L226.482 326.398z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M236.882 321.598C236.882 321.598 243.803 321.066 242.206 323.195C240.609 325.325 237.414 324.26 237.414 324.26L236.882 321.598z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M209.282 303.598C209.282 303.598 216.203 303.066 214.606 305.195C213.009 307.325 209.014 307.06 209.014 307.06L209.282 303.598z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M219.282 300.398C219.282 300.398 226.203 299.866 224.606 301.995C223.009 304.125 218.614 303.86 218.614 303.86L219.282 300.398z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M196.6 340.401C196.6 340.401 201.8 340.001 200.6 341.601C199.4 343.201 197 342.401 197 342.401L196.6 340.401z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M123.4 241.2C123.4 241.2 119 250 118.6 253.2C118.6 253.2 119.4 244.4 120.6 242.4C121.8 240.4 123.4 241.2 123.4 241.2z"/>
+ </g>
+ <g style="fill: #992600">
+ <path d="M105 255.2C105 255.2 101.8 269.6 102.2 272.4C102.2 272.4 101 260.8 101.4 259.6C101.8 258.4 105 255.2 105 255.2z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M125.8 180.6L125.6 183.8L123.4 184C123.4 184 137.6 196.6 138.2 204.2C138.2 204.2 139 196 125.8 180.6z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M129.784 181.865C129.353 181.449 129.572 180.704 129.164 180.444C128.355 179.928 130.462 179.871 130.234 179.155C129.851 177.949 130.038 177.928 129.916 176.652C129.859 176.054 130.447 174.514 130.832 174.074C132.278 172.422 130.954 169.49 132.594 167.939C132.898 167.65 133.274 167.098 133.559 166.68C134.218 165.717 135.402 165.229 136.352 164.401C136.67 164.125 136.469 163.298 137.038 163.39C137.752 163.505 138.993 163.375 138.948 164.216C138.835 166.336 137.506 168.056 136.226 169.724C136.677 170.428 136.219 171.063 135.935 171.62C134.6 174.24 134.789 177.081 134.615 179.921C134.61 180.006 134.303 180.084 134.311 180.137C134.664 182.472 135.248 184.671 136.127 186.9C136.493 187.83 136.964 188.725 137.114 189.652C137.225 190.338 137.328 191.171 136.92 191.876C138.955 194.766 137.646 197.417 138.815 200.948C139.022 201.573 140.714 203.487 140.251 203.326C137.738 202.455 137.626 202.057 137.449 201.304C137.303 200.681 136.973 199.304 136.736 198.702C136.672 198.538 136.501 196.654 136.423 196.532C134.91 194.15 136.268 194.326 134.898 191.968C133.47 191.288 132.504 190.184 131.381 189.022C131.183 188.818 132.326 188.094 132.145 187.881C131.053 186.592 129.9 185.825 130.236 184.332C130.391 183.642 130.528 182.585 129.784 181.865z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M126.2 183.6C126.2 183.6 126.6 190.4 129 192C131.4 193.6 130.2 192.8 127 191.6C123.8 190.4 125 189.6 125 189.6C125 189.6 122.2 190 124.6 192C127 194 130.6 196.4 129 196.4C127.4 196.4 119.8 192.4 119.8 189.6C119.8 186.8 118.8 182.7 118.8 182.7C118.8 182.7 119.9 181.9 124.7 182C124.7 182 126.1 182.7 126.2 183.6z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M125.4 202.2C125.4 202.2 116.88 199.409 98.4 202.8C98.4 202.8 107.431 200.722 126.2 203C136.5 204.25 125.4 202.2 125.4 202.2z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M127.498 202.129C127.498 202.129 119.252 198.611 100.547 200.392C100.547 200.392 109.725 199.103 128.226 202.995C138.38 205.131 127.498 202.129 127.498 202.129z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M129.286 202.222C129.286 202.222 121.324 198.101 102.539 198.486C102.539 198.486 111.787 197.882 129.948 203.14C139.914 206.025 129.286 202.222 129.286 202.222z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M130.556 202.445C130.556 202.445 123.732 198.138 106.858 197.04C106.858 197.04 115.197 197.21 131.078 203.319C139.794 206.672 130.556 202.445 130.556 202.445z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M245.84 212.961C245.84 212.961 244.91 213.605 245.124 212.424C245.339 211.243 273.547 198.073 277.161 198.323C277.161 198.323 246.913 211.529 245.84 212.961z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M242.446 213.6C242.446 213.6 241.57 214.315 241.691 213.121C241.812 211.927 268.899 196.582 272.521 196.548C272.521 196.548 243.404 212.089 242.446 213.6z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M239.16 214.975C239.16 214.975 238.332 215.747 238.374 214.547C238.416 213.348 258.233 197.851 268.045 195.977C268.045 195.977 250.015 204.104 239.16 214.975z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M236.284 216.838C236.284 216.838 235.539 217.532 235.577 216.453C235.615 215.373 253.449 201.426 262.28 199.74C262.28 199.74 246.054 207.054 236.284 216.838z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M204.6 364.801C204.6 364.801 189.4 362.401 206.2 360.801C206.2 360.801 224.2 358.801 228.2 353.601C228.2 353.601 241.8 344.401 244.6 344.001C247.4 343.601 263.8 340.001 264.2 337.601C264.6 335.201 270.6 332.801 272.2 333.601C273.8 334.401 273.8 343.601 271 344.401C268.2 345.201 249.4 352.401 243 353.601C236.6 354.801 225 362.401 220.2 363.601C215.4 364.801 204.6 364.801 204.6 364.801z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M277.6 327.401C277.6 327.401 274.6 329.001 273.4 331.601C273.4 331.601 267 342.201 252.8 345.401C252.8 345.401 229.8 354.401 222 356.401C222 356.401 208.6 361.401 201.2 360.601C201.2 360.601 194.2 360.801 200.4 362.401C200.4 362.401 220.6 360.401 224 358.601C224 358.601 239.6 353.401 242.6 350.801C245.6 348.201 263.8 343.201 266 341.201C268.2 339.201 278 330.801 277.6 327.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M218.882 358.911C218.882 358.911 224.111 358.685 222.958 360.234C221.805 361.784 219.357 360.91 219.357 360.91L218.882 358.911z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M211.68 360.263C211.68 360.263 216.908 360.037 215.756 361.586C214.603 363.136 212.155 362.263 212.155 362.263L211.68 360.263z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M201.251 361.511C201.251 361.511 206.48 361.284 205.327 362.834C204.174 364.383 201.726 363.51 201.726 363.51L201.251 361.511z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M193.617 362.055C193.617 362.055 198.846 361.829 197.693 363.378C196.54 364.928 194.092 364.054 194.092 364.054L193.617 362.055z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M235.415 351.513C235.415 351.513 242.375 351.212 240.84 353.274C239.306 355.336 236.047 354.174 236.047 354.174L235.415 351.513z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M245.73 347.088C245.73 347.088 251.689 343.787 251.155 348.849C250.885 351.405 246.362 349.749 246.362 349.749L245.73 347.088z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M254.862 344.274C254.862 344.274 262.021 340.573 260.287 346.035C259.509 348.485 255.493 346.935 255.493 346.935L254.862 344.274z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M264.376 339.449C264.376 339.449 268.735 334.548 269.801 341.21C270.207 343.748 265.008 342.11 265.008 342.11L264.376 339.449z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M226.834 355.997C226.834 355.997 232.062 355.77 230.91 357.32C229.757 358.869 227.308 357.996 227.308 357.996L226.834 355.997z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M262.434 234.603C262.434 234.603 261.708 235.268 261.707 234.197C261.707 233.127 279.191 219.863 288.034 218.479C288.034 218.479 271.935 225.208 262.434 234.603z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M265.4 298.4C265.4 298.4 287.401 320.801 296.601 324.401C296.601 324.401 305.801 335.601 301.801 361.601C301.801 361.601 298.601 369.201 295.401 348.401C295.401 348.401 298.601 323.201 287.401 339.201C287.401 339.201 279 329.301 285.4 329.601C285.4 329.601 288.601 331.601 289.001 330.001C289.401 328.401 281.4 314.801 264.2 300.4C247 286 265.4 298.4 265.4 298.4z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M207 337.201C207 337.201 206.8 335.401 208.6 336.201C210.4 337.001 304.601 343.201 336.201 367.201C336.201 367.201 291.001 344.001 207 337.201z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M217.4 332.801C217.4 332.801 217.2 331.001 219 331.801C220.8 332.601 357.401 331.601 381.001 364.001C381.001 364.001 359.001 338.801 217.4 332.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M229 328.801C229 328.801 228.8 327.001 230.6 327.801C232.4 328.601 405.801 315.601 429.401 348.001C429.401 348.001 419.801 322.401 229 328.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M239 324.001C239 324.001 238.8 322.201 240.6 323.001C242.4 323.801 364.601 285.2 388.201 317.601C388.201 317.601 374.801 293 239 324.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M181 346.801C181 346.801 180.8 345.001 182.6 345.801C184.4 346.601 202.2 348.801 204.2 387.601C204.2 387.601 197 345.601 181 346.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M172.2 348.401C172.2 348.401 172 346.601 173.8 347.401C175.6 348.201 189.8 343.601 187 382.401C187 382.401 188.2 347.201 172.2 348.401z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M164.2 348.801C164.2 348.801 164 347.001 165.8 347.801C167.6 348.601 183 349.201 170.6 371.601C170.6 371.601 180.2 347.601 164.2 348.801z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M211.526 304.465C211.526 304.465 211.082 306.464 212.631 305.247C228.699 292.622 261.141 233.72 316.826 228.086C316.826 228.086 278.518 215.976 211.526 304.465z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M222.726 302.665C222.726 302.665 221.363 301.472 223.231 300.847C225.099 300.222 337.541 227.72 376.826 235.686C376.826 235.686 349.719 228.176 222.726 302.665z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M201.885 308.767C201.885 308.767 201.376 310.366 203.087 309.39C212.062 304.27 215.677 247.059 259.254 245.804C259.254 245.804 226.843 231.09 201.885 308.767z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M181.962 319.793C181.962 319.793 180.885 321.079 182.838 320.825C193.084 319.493 214.489 278.222 258.928 283.301C258.928 283.301 226.962 268.955 181.962 319.793z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M193.2 313.667C193.2 313.667 192.389 315.136 194.258 314.511C204.057 311.237 217.141 266.625 261.729 263.078C261.729 263.078 227.603 255.135 193.2 313.667z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M174.922 324.912C174.922 324.912 174.049 325.954 175.631 325.748C183.93 324.669 201.268 291.24 237.264 295.354C237.264 295.354 211.371 283.734 174.922 324.912z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M167.323 330.821C167.323 330.821 166.318 331.866 167.909 331.748C172.077 331.439 202.715 298.36 221.183 313.862C221.183 313.862 209.168 295.139 167.323 330.821z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M236.855 298.898C236.855 298.898 235.654 297.543 237.586 297.158C239.518 296.774 360.221 239.061 398.184 251.927C398.184 251.927 372.243 241.053 236.855 298.898z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M203.4 363.201C203.4 363.201 203.2 361.401 205 362.201C206.8 363.001 222.2 363.601 209.8 386.001C209.8 386.001 219.4 362.001 203.4 363.201z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M213.8 361.601C213.8 361.601 213.6 359.801 215.4 360.601C217.2 361.401 235 363.601 237 402.401C237 402.401 229.8 360.401 213.8 361.601z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M220.6 360.001C220.6 360.001 220.4 358.201 222.2 359.001C224 359.801 248.6 363.201 272.2 395.601C272.2 395.601 236.6 358.801 220.6 360.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M228.225 357.972C228.225 357.972 227.788 356.214 229.678 356.768C231.568 357.322 252.002 355.423 290.099 389.599C290.099 389.599 243.924 354.656 228.225 357.972z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M238.625 353.572C238.625 353.572 238.188 351.814 240.078 352.368C241.968 352.922 276.802 357.423 328.499 392.399C328.499 392.399 254.324 350.256 238.625 353.572z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M198.2 342.001C198.2 342.001 198 340.201 199.8 341.001C201.6 341.801 255 344.401 285.4 371.201C285.4 371.201 250.499 346.426 198.2 342.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M188.2 346.001C188.2 346.001 188 344.201 189.8 345.001C191.6 345.801 216.2 349.201 239.8 381.601C239.8 381.601 204.2 344.801 188.2 346.001z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M249.503 348.962C249.503 348.962 248.938 347.241 250.864 347.655C252.79 348.068 287.86 350.004 341.981 381.098C341.981 381.098 264.317 346.704 249.503 348.962z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M257.903 346.562C257.903 346.562 257.338 344.841 259.264 345.255C261.19 345.668 296.26 347.604 350.381 378.698C350.381 378.698 273.317 343.904 257.903 346.562z"/>
+ </g>
+ <g style="fill: #ffffff; stroke:#000000; stroke-width:0.1">
+ <path d="M267.503 341.562C267.503 341.562 266.938 339.841 268.864 340.255C270.79 340.668 313.86 345.004 403.582 379.298C403.582 379.298 282.917 338.904 267.503 341.562z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M156.2 348.401C156.2 348.401 161.4 348.001 160.2 349.601C159 351.201 156.6 350.401 156.6 350.401L156.2 348.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M187 362.401C187 362.401 192.2 362.001 191 363.601C189.8 365.201 187.4 364.401 187.4 364.401L187 362.401z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M178.2 362.001C178.2 362.001 183.4 361.601 182.2 363.201C181 364.801 178.6 364.001 178.6 364.001L178.2 362.001z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M82.831 350.182C82.831 350.182 87.876 351.505 86.218 352.624C84.561 353.744 82.554 352.202 82.554 352.202L82.831 350.182z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M84.831 340.582C84.831 340.582 89.876 341.905 88.218 343.024C86.561 344.144 84.554 342.602 84.554 342.602L84.831 340.582z"/>
+ </g>
+ <g style="fill: #000000">
+ <path d="M77.631 336.182C77.631 336.182 82.676 337.505 81.018 338.624C79.361 339.744 77.354 338.202 77.354 338.202L77.631 336.182z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M157.4 411.201C157.4 411.201 155.8 411.201 151.8 413.201C149.8 413.201 138.6 416.801 133 426.801C133 426.801 145.4 417.201 157.4 411.201z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M245.116 503.847C245.257 504.105 245.312 504.525 245.604 504.542C246.262 504.582 247.495 504.883 247.37 504.247C246.522 499.941 245.648 495.004 241.515 493.197C240.876 492.918 239.434 493.331 239.36 494.215C239.233 495.739 239.116 497.088 239.425 498.554C239.725 499.975 241.883 499.985 242.8 498.601C243.736 500.273 244.168 502.116 245.116 503.847z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M234.038 508.581C234.786 509.994 234.659 511.853 236.074 512.416C236.814 512.71 238.664 511.735 238.246 510.661C237.444 508.6 237.056 506.361 235.667 504.55C235.467 504.288 235.707 503.755 235.547 503.427C234.953 502.207 233.808 501.472 232.4 501.801C231.285 504.004 232.433 506.133 233.955 507.842C234.091 507.994 233.925 508.37 234.038 508.581z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M194.436 503.391C194.328 503.014 194.29 502.551 194.455 502.23C194.986 501.197 195.779 500.075 195.442 499.053C195.094 497.997 193.978 498.179 193.328 498.748C192.193 499.742 192.144 501.568 191.453 502.927C191.257 503.313 191.308 503.886 190.867 504.277C190.393 504.698 189.953 506.222 190.049 506.793C190.102 507.106 189.919 517.014 190.141 516.751C190.76 516.018 193.81 506.284 193.879 505.392C193.936 504.661 194.668 504.196 194.436 503.391z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M168.798 496.599C171.432 494.1 174.222 491.139 173.78 487.427C173.664 486.451 171.889 486.978 171.702 487.824C170.9 491.449 168.861 494.11 166.293 496.502C164.097 498.549 162.235 504.893 162 505.401C165.697 500.145 167.954 497.399 168.798 496.599z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M155.224 490.635C155.747 490.265 155.445 489.774 155.662 489.442C156.615 487.984 157.916 486.738 157.934 485C157.937 484.723 157.559 484.414 157.224 484.638C156.947 484.822 156.605 484.952 156.497 485.082C154.467 487.531 153.067 490.202 151.624 493.014C151.441 493.371 150.297 497.862 150.61 497.973C150.849 498.058 152.569 493.877 152.779 493.763C154.042 493.077 154.054 491.462 155.224 490.635z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M171.957 510.179C172.401 509.31 173.977 508.108 173.864 507.219C173.746 506.291 174.214 504.848 173.302 505.536C172.045 506.484 168.596 507.833 168.326 513.641C168.3 514.212 171.274 511.519 171.957 510.179z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M186.4 493.001C186.8 492.333 187.508 492.806 187.967 492.543C188.615 492.171 189.226 491.613 189.518 490.964C190.488 488.815 192.257 486.995 192.4 484.601C190.909 483.196 190.23 485.236 189.6 486.201C188.277 484.554 187.278 486.428 185.978 486.947C185.908 486.975 185.695 486.628 185.62 486.655C184.443 487.095 183.763 488.176 182.765 488.957C182.594 489.091 182.189 488.911 182.042 489.047C181.39 489.65 180.417 489.975 180.137 490.657C179.027 493.364 175.887 495.459 174 503.001C174.381 503.91 178.512 496.359 178.999 495.661C179.835 494.465 179.953 497.322 181.229 496.656C181.28 496.629 181.466 496.867 181.6 497.001C181.794 496.721 182.012 496.492 182.4 496.601C182.4 496.201 182.266 495.645 182.467 495.486C183.704 494.509 183.62 493.441 184.4 492.201C184.858 492.99 185.919 492.271 186.4 493.001z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M246.2 547.401C246.2 547.401 253.6 527.001 249.2 515.801C249.2 515.801 260.6 537.401 256 548.601C256 548.601 255.6 538.201 251.6 533.201C251.6 533.201 247.6 546.001 246.2 547.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M231.4 544.801C231.4 544.801 236.8 536.001 228.8 517.601C228.8 517.601 228 538.001 221.2 549.001C221.2 549.001 235.4 528.801 231.4 544.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M221.4 542.801C221.4 542.801 221.2 522.801 221.6 519.801C221.6 519.801 217.8 536.401 207.6 546.001C207.6 546.001 222 534.001 221.4 542.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M211.8 510.801C211.8 510.801 217.8 524.401 207.8 542.801C207.8 542.801 214.2 530.601 209.4 523.601C209.4 523.601 212 520.201 211.8 510.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M192.6 542.401C192.6 542.401 191.6 526.801 193.4 524.601C193.4 524.601 193.6 518.201 193.2 517.201C193.2 517.201 197.2 511.001 197.4 518.401C197.4 518.401 198.8 526.201 201.6 530.801C201.6 530.801 205.2 536.201 205 542.601C205 542.601 195 512.401 192.6 542.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M189 514.801C189 514.801 182.4 525.601 180.6 544.601C180.6 544.601 179.2 538.401 183 524.001C183 524.001 187.2 508.601 189 514.801z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M167.2 534.601C167.2 534.601 172.2 529.201 173.6 524.201C173.6 524.201 177.2 508.401 170.8 517.001C170.8 517.001 171 525.001 162.8 532.401C162.8 532.401 167.6 530.001 167.2 534.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M161.4 529.601C161.4 529.601 164.8 512.201 165.6 511.401C165.6 511.401 167.4 508.001 164.6 511.201C164.6 511.201 155.8 530.401 151.8 537.001C151.8 537.001 159.8 527.801 161.4 529.601z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M155.6 513.001C155.6 513.001 167.2 490.601 145.4 516.401C145.4 516.401 156.4 506.601 155.6 513.001z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M140.2 498.401C140.2 498.401 145 479.601 147.6 479.801C147.6 479.801 155.8 470.801 149.2 481.401C149.2 481.401 143.2 491.001 143.8 500.801C143.8 500.801 143.2 491.201 140.2 498.401z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M470.5 487C470.5 487 458.5 477 456 473.5C456 473.5 469.5 492 469.5 499C469.5 499 472 491.5 470.5 487z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M476 465C476 465 455 450 451.5 442.5C451.5 442.5 478 472 478 476.5C478 476.5 478.5 467.5 476 465z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M493 311C493 311 481 303 479.5 305C479.5 305 490 311.5 492.5 320C492.5 320 491 311 493 311z"/>
+ </g>
+ <g style="fill: #cccccc">
+ <path d="M501.5 391.5L484 379.5C484 379.5 503 396.5 503.5 400.5L501.5 391.5z"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M110.75 369L132.75 373.75"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M161 531C161 531 160.5 527.5 151.5 538"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M166.5 536C166.5 536 168.5 529.5 162 534"/>
+ </g>
+ <g style="stroke:#000000">
+ <path d="M220.5 544.5C220.5 544.5 222 533.5 210.5 546.5"/>
+ </g>
+</svg>
diff --git a/test/threads/.memdump b/test/threads/.memdump
new file mode 100644
index 0000000..706dd2f
--- /dev/null
+++ b/test/threads/.memdump
@@ -0,0 +1,4 @@
+ 12:33:11 PM
+
+ MEMORY ALLOCATED : 0, MAX was 15480
+BLOCK NUMBER SIZE TYPE
diff --git a/test/threads/a.example.org.xml b/test/threads/a.example.org.xml
new file mode 100644
index 0000000..3de2c45
--- /dev/null
+++ b/test/threads/a.example.org.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<rewriteSystem systemIdStartString="http://example.org/a" rewritePrefix="a"/>
+<nextCatalog catalog="c.example.org.xml"/>
+</catalog>
diff --git a/test/threads/a/a.dtd b/test/threads/a/a.dtd
new file mode 100644
index 0000000..b298085
--- /dev/null
+++ b/test/threads/a/a.dtd
@@ -0,0 +1 @@
+<!ELEMENT a (#PCDATA)>
diff --git a/test/threads/abc.dtd b/test/threads/abc.dtd
new file mode 100644
index 0000000..b7a08fe
--- /dev/null
+++ b/test/threads/abc.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ELEMENT abc (a, b, c)>
diff --git a/test/threads/abc.xml b/test/threads/abc.xml
new file mode 100644
index 0000000..ee98144
--- /dev/null
+++ b/test/threads/abc.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE abc SYSTEM "http://example.org/abc.dtd">
+<abc>
+ <a>Let's use predefined entites &amp; &lt; &gt;</a>
+ <b>Let's use a DTD defined entity &bent;</b>
+ <c/>
+</abc>
+
diff --git a/test/threads/acb.dtd b/test/threads/acb.dtd
new file mode 100644
index 0000000..9fc77c5
--- /dev/null
+++ b/test/threads/acb.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ELEMENT acb (a, c, b)>
diff --git a/test/threads/acb.xml b/test/threads/acb.xml
new file mode 100644
index 0000000..a14e362
--- /dev/null
+++ b/test/threads/acb.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE acb SYSTEM "http://example.org/acb.dtd">
+<acb>
+ <a>Let's use predefined entites &amp; &lt; &gt;</a>
+ <c/>
+ <b>Let's use a DTD defined entity &bent;</b>
+</acb>
+
diff --git a/test/threads/b.example.org.xml b/test/threads/b.example.org.xml
new file mode 100644
index 0000000..2dfe5fc
--- /dev/null
+++ b/test/threads/b.example.org.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<rewriteSystem systemIdStartString="http://example.org/b" rewritePrefix="b"/>
+<nextCatalog catalog="c.example.org.xml"/>
+</catalog>
diff --git a/test/threads/b/b.dtd b/test/threads/b/b.dtd
new file mode 100644
index 0000000..59de88e
--- /dev/null
+++ b/test/threads/b/b.dtd
@@ -0,0 +1,2 @@
+<!ELEMENT b (#PCDATA)>
+<!ENTITY bent "the b entity">
diff --git a/test/threads/bac.dtd b/test/threads/bac.dtd
new file mode 100644
index 0000000..d36a4e6
--- /dev/null
+++ b/test/threads/bac.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ELEMENT bac (b, a, c)>
diff --git a/test/threads/bac.xml b/test/threads/bac.xml
new file mode 100644
index 0000000..63d6efc
--- /dev/null
+++ b/test/threads/bac.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE bac SYSTEM "http://example.org/bac.dtd">
+<bac>
+ <b>Let's use a DTD defined entity &bent;</b>
+ <a>Let's use predefined entites &amp; &lt; &gt;</a>
+ <c/>
+</bac>
+
diff --git a/test/threads/bca.dtd b/test/threads/bca.dtd
new file mode 100644
index 0000000..239192a
--- /dev/null
+++ b/test/threads/bca.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ELEMENT bca (b, c, a)>
diff --git a/test/threads/bca.xml b/test/threads/bca.xml
new file mode 100644
index 0000000..ce60d01
--- /dev/null
+++ b/test/threads/bca.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE bca SYSTEM "http://example.org/bca.dtd">
+<bca>
+ <b>Let's use a DTD defined entity &bent;</b>
+ <c/>
+ <a>Let's use predefined entites &amp; &lt; &gt;</a>
+</bca>
+
diff --git a/test/threads/c.example.org.xml b/test/threads/c.example.org.xml
new file mode 100644
index 0000000..41348b1
--- /dev/null
+++ b/test/threads/c.example.org.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<rewriteSystem systemIdStartString="http://example.org/c" rewritePrefix="c"/>
+<rewriteSystem systemIdStartString="http://example.org/" rewritePrefix="./"/>
+</catalog>
diff --git a/test/threads/c/c.dtd b/test/threads/c/c.dtd
new file mode 100644
index 0000000..7248a5b
--- /dev/null
+++ b/test/threads/c/c.dtd
@@ -0,0 +1 @@
+<!ELEMENT c EMPTY>
diff --git a/test/threads/cab.dtd b/test/threads/cab.dtd
new file mode 100644
index 0000000..0a62e91
--- /dev/null
+++ b/test/threads/cab.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ELEMENT cab (c, a, b)>
diff --git a/test/threads/cab.xml b/test/threads/cab.xml
new file mode 100644
index 0000000..a1631d0
--- /dev/null
+++ b/test/threads/cab.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE cab SYSTEM "http://example.org/cab.dtd">
+<cab>
+ <c/>
+ <a>Let's use predefined entites &amp; &lt; &gt;</a>
+ <b>Let's use a DTD defined entity &bent;</b>
+</cab>
+
diff --git a/test/threads/cba.dtd b/test/threads/cba.dtd
new file mode 100644
index 0000000..71b96b4
--- /dev/null
+++ b/test/threads/cba.dtd
@@ -0,0 +1,7 @@
+<!ENTITY % c SYSTEM "http://example.org/c/c.dtd">
+%c;
+<!ENTITY % b SYSTEM "http://example.org/b/b.dtd">
+%b;
+<!ENTITY % a SYSTEM "http://example.org/a/a.dtd">
+%a;
+<!ELEMENT cba (c, b, a)>
diff --git a/test/threads/cba.xml b/test/threads/cba.xml
new file mode 100644
index 0000000..78708e4
--- /dev/null
+++ b/test/threads/cba.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE cba SYSTEM "http://example.org/cba.dtd">
+<cba>
+ <c/>
+ <b>Let's use a DTD defined entity &bent;</b>
+ <a>Let's use predefined entites &amp; &lt; &gt;</a>
+</cba>
+
diff --git a/test/threads/complex.xml b/test/threads/complex.xml
new file mode 100644
index 0000000..0174e90
--- /dev/null
+++ b/test/threads/complex.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<delegateSystem systemIdStartString="http://example.org/"
+ catalog="example.org.xml"/>
+</catalog>
diff --git a/test/threads/example.org.xml b/test/threads/example.org.xml
new file mode 100644
index 0000000..21c2602
--- /dev/null
+++ b/test/threads/example.org.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+<delegateSystem systemIdStartString="http://example.org/a"
+ catalog="a.example.org.xml"/>
+<delegateSystem systemIdStartString="http://example.org/b"
+ catalog="b.example.org.xml"/>
+<nextCatalog catalog="c.example.org.xml"/>
+</catalog>
diff --git a/test/threads/invalid.xml b/test/threads/invalid.xml
new file mode 100644
index 0000000..9123275
--- /dev/null
+++ b/test/threads/invalid.xml
@@ -0,0 +1,2 @@
+<!-- Well formed but invalid -->
+<doc/>
diff --git a/test/threads/res b/test/threads/res
new file mode 100644
index 0000000..3dad6fe
--- /dev/null
+++ b/test/threads/res
@@ -0,0 +1,80 @@
+Adding document catalog complex.xml
+Local resolve: sysID http://example.org/bac.dtd
+Parsing catalog complex.xml
+complex.xml added to file hash
+example.org.xml not found in file hash
+Parsing catalog example.org.xml
+example.org.xml added to file hash
+Trying system delegate example.org.xml
+b.example.org.xml not found in file hash
+Parsing catalog b.example.org.xml
+b.example.org.xml added to file hash
+Trying system delegate b.example.org.xml
+Using rewriting rule http://example.org/b
+Local resolve: sysID http://example.org/b/b.dtd
+Trying system delegate example.org.xml
+Trying system delegate b.example.org.xml
+Using rewriting rule http://example.org/b
+Local resolve: sysID http://example.org/a/a.dtd
+Trying system delegate example.org.xml
+a.example.org.xml not found in file hash
+Parsing catalog a.example.org.xml
+a.example.org.xml added to file hash
+Trying system delegate a.example.org.xml
+Using rewriting rule http://example.org/a
+Local resolve: sysID http://example.org/c/c.dtd
+Trying system delegate example.org.xml
+c.example.org.xml not found in file hash
+Parsing catalog c.example.org.xml
+c.example.org.xml added to file hash
+Using rewriting rule http://example.org/c
+<?xml version="1.0"?>
+<?oasis-xml-catalog catalog="complex.xml"?>
+<!DOCTYPE bac SYSTEM "http://example.org/bac.dtd">
+<bac>
+ <b/>
+ <a/>
+ <c/>
+</bac>
+Adding document catalog complex.xml
+Local resolve: sysID http://example.org/abc.dtd
+Found complex.xml in file hash
+Trying system delegate example.org.xml
+Trying system delegate a.example.org.xml
+Using rewriting rule http://example.org/a
+Local resolve: sysID http://example.org/a/a.dtd
+Trying system delegate example.org.xml
+Trying system delegate a.example.org.xml
+Using rewriting rule http://example.org/a
+Local resolve: sysID http://example.org/b/b.dtd
+Trying system delegate example.org.xml
+Trying system delegate b.example.org.xml
+Using rewriting rule http://example.org/b
+Local resolve: sysID http://example.org/c/c.dtd
+Trying system delegate example.org.xml
+Using rewriting rule http://example.org/c
+Free catalog entry complex.xml
+<?xml version="1.0"?>
+<?oasis-xml-catalog catalog="complex.xml"?>
+<!DOCTYPE abc SYSTEM "http://example.org/abc.dtd">
+<abc>
+ <a/>
+ <b/>
+ <c/>
+</abc>
+Catalogs cleanup
+Free catalog entry http://example.org/c
+Free catalog entry http://example.org/
+Free catalog entry c.example.org.xml
+Free catalog entry http://example.org/
+Free catalog entry complex.xml
+Free catalog entry http://example.org/a
+Free catalog entry http://example.org/b
+Free catalog entry c.example.org.xml
+Free catalog entry example.org.xml
+Free catalog entry http://example.org/a
+Free catalog entry c.example.org.xml
+Free catalog entry a.example.org.xml
+Free catalog entry http://example.org/b
+Free catalog entry c.example.org.xml
+Free catalog entry b.example.org.xml
diff --git a/test/title.xml b/test/title.xml
new file mode 100644
index 0000000..1b3fe07
--- /dev/null
+++ b/test/title.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<title>my title</title>
diff --git a/test/tstblanks.xml b/test/tstblanks.xml
new file mode 100644
index 0000000..7c5a23d
--- /dev/null
+++ b/test/tstblanks.xml
@@ -0,0 +1,495 @@
+<?xml version="1.0"?>
+<a
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test="passed">content</a>
diff --git a/test/utf16bebom.xml b/test/utf16bebom.xml
new file mode 100644
index 0000000..f0c2c2b
--- /dev/null
+++ b/test/utf16bebom.xml
Binary files differ
diff --git a/test/utf16bom.xml b/test/utf16bom.xml
new file mode 100644
index 0000000..1916dc1
--- /dev/null
+++ b/test/utf16bom.xml
Binary files differ
diff --git a/test/utf16lebom.xml b/test/utf16lebom.xml
new file mode 100644
index 0000000..933640c
--- /dev/null
+++ b/test/utf16lebom.xml
Binary files differ
diff --git a/test/utf8bom.xml b/test/utf8bom.xml
new file mode 100644
index 0000000..b4cdff0
--- /dev/null
+++ b/test/utf8bom.xml
@@ -0,0 +1 @@
+<foo/>
diff --git a/test/valid/.memdump b/test/valid/.memdump
new file mode 100644
index 0000000..d2ee355
--- /dev/null
+++ b/test/valid/.memdump
@@ -0,0 +1,4 @@
+ 11:29:33 AM
+
+ MEMORY ALLOCATED : 0, MAX was 56739
+BLOCK NUMBER SIZE TYPE
diff --git a/test/valid/127772.xml b/test/valid/127772.xml
new file mode 100644
index 0000000..ba39194
--- /dev/null
+++ b/test/valid/127772.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE a SYSTEM "dtds/127772.dtd">
+
+<a>
+ <b xlink:href="http://fakeurl.net">b text</b>
+</a>
+
diff --git a/test/valid/REC-xml-19980210.xml b/test/valid/REC-xml-19980210.xml
new file mode 100644
index 0000000..4e93fb3
--- /dev/null
+++ b/test/valid/REC-xml-19980210.xml
@@ -0,0 +1,4197 @@
+<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?>
+<!DOCTYPE spec SYSTEM "dtds/spec.dtd" [
+
+<!-- LAST TOUCHED BY: Tim Bray, 8 February 1997 -->
+
+<!-- The words 'FINAL EDIT' in comments mark places where changes
+need to be made after approval of the document by the ERB, before
+publication. -->
+
+<!ENTITY XML.version "1.0">
+<!ENTITY doc.date "10 February 1998">
+<!ENTITY iso6.doc.date "19980210">
+<!ENTITY w3c.doc.date "02-Feb-1998">
+<!ENTITY draft.day '10'>
+<!ENTITY draft.month 'February'>
+<!ENTITY draft.year '1998'>
+
+<!ENTITY WebSGML
+ 'WebSGML Adaptations Annex to ISO 8879'>
+
+<!ENTITY lt "<">
+<!ENTITY gt ">">
+<!ENTITY xmlpio "'&lt;?xml'">
+<!ENTITY pic "'?>'">
+<!ENTITY br "\n">
+<!ENTITY cellback '#c0d9c0'>
+<!ENTITY mdash "--"> <!-- &#x2014, but nsgmls doesn't grok hex -->
+<!ENTITY com "--">
+<!ENTITY como "--">
+<!ENTITY comc "--">
+<!ENTITY hcro "&amp;#x">
+<!-- <!ENTITY nbsp " "> -->
+<!ENTITY nbsp "&#160;">
+<!ENTITY magicents "<code>amp</code>,
+<code>lt</code>,
+<code>gt</code>,
+<code>apos</code>,
+<code>quot</code>">
+
+<!-- audience and distribution status: for use at publication time -->
+<!ENTITY doc.audience "public review and discussion">
+<!ENTITY doc.distribution "may be distributed freely, as long as
+all text and legal notices remain intact">
+
+]>
+
+<!-- for Panorama *-->
+<?VERBATIM "eg" ?>
+
+<spec>
+<header>
+<title>Extensible Markup Language (XML) 1.0</title>
+<version></version>
+<w3c-designation>REC-xml-&iso6.doc.date;</w3c-designation>
+<w3c-doctype>W3C Recommendation</w3c-doctype>
+<pubdate><day>&draft.day;</day><month>&draft.month;</month><year>&draft.year;</year></pubdate>
+
+<publoc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps">
+http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps</loc>
+</publoc>
+<latestloc>
+<loc href="http://www.w3.org/TR/REC-xml">
+http://www.w3.org/TR/REC-xml</loc>
+</latestloc>
+<prevlocs>
+<loc href="http://www.w3.org/TR/PR-xml-971208">
+http://www.w3.org/TR/PR-xml-971208</loc>
+<!--
+<loc href='http://www.w3.org/TR/WD-xml-961114'>
+http://www.w3.org/TR/WD-xml-961114</loc>
+<loc href='http://www.w3.org/TR/WD-xml-lang-970331'>
+http://www.w3.org/TR/WD-xml-lang-970331</loc>
+<loc href='http://www.w3.org/TR/WD-xml-lang-970630'>
+http://www.w3.org/TR/WD-xml-lang-970630</loc>
+<loc href='http://www.w3.org/TR/WD-xml-970807'>
+http://www.w3.org/TR/WD-xml-970807</loc>
+<loc href='http://www.w3.org/TR/WD-xml-971117'>
+http://www.w3.org/TR/WD-xml-971117</loc>-->
+</prevlocs>
+<authlist>
+<author><name>Tim Bray</name>
+<affiliation>Textuality and Netscape</affiliation>
+<email
+href="mailto:tbray@textuality.com">tbray@textuality.com</email></author>
+<author><name>Jean Paoli</name>
+<affiliation>Microsoft</affiliation>
+<email href="mailto:jeanpa@microsoft.com">jeanpa@microsoft.com</email></author>
+<author><name>C. M. Sperberg-McQueen</name>
+<affiliation>University of Illinois at Chicago</affiliation>
+<email href="mailto:cmsmcq@uic.edu">cmsmcq@uic.edu</email></author>
+</authlist>
+<abstract>
+<p>The Extensible Markup Language (XML) is a subset of
+SGML that is completely described in this document. Its goal is to
+enable generic SGML to be served, received, and processed on the Web
+in the way that is now possible with HTML. XML has been designed for
+ease of implementation and for interoperability with both SGML and
+HTML.</p>
+</abstract>
+<status>
+<p>This document has been reviewed by W3C Members and
+other interested parties and has been endorsed by the
+Director as a W3C Recommendation. It is a stable
+document and may be used as reference material or cited
+as a normative reference from another document. W3C's
+role in making the Recommendation is to draw attention
+to the specification and to promote its widespread
+deployment. This enhances the functionality and
+interoperability of the Web.</p>
+<p>
+This document specifies a syntax created by subsetting an existing,
+widely used international text processing standard (Standard
+Generalized Markup Language, ISO 8879:1986(E) as amended and
+corrected) for use on the World Wide Web. It is a product of the W3C
+XML Activity, details of which can be found at <loc
+href='http://www.w3.org/XML'>http://www.w3.org/XML</loc>. A list of
+current W3C Recommendations and other technical documents can be found
+at <loc href='http://www.w3.org/TR'>http://www.w3.org/TR</loc>.
+</p>
+<p>This specification uses the term URI, which is defined by <bibref
+ref="Berners-Lee"/>, a work in progress expected to update <bibref
+ref="RFC1738"/> and <bibref ref="RFC1808"/>.
+</p>
+<p>The list of known errors in this specification is
+available at
+<loc href='http://www.w3.org/XML/xml-19980210-errata'>http://www.w3.org/XML/xml-19980210-errata</loc>.</p>
+<p>Please report errors in this document to
+<loc href='mailto:xml-editor@w3.org'>xml-editor@w3.org</loc>.
+</p>
+</status>
+
+
+<pubstmt>
+<p>Chicago, Vancouver, Mountain View, et al.:
+World-Wide Web Consortium, XML Working Group, 1996, 1997.</p>
+</pubstmt>
+<sourcedesc>
+<p>Created in electronic form.</p>
+</sourcedesc>
+<langusage>
+<language id='EN'>English</language>
+<language id='ebnf'>Extended Backus-Naur Form (formal grammar)</language>
+</langusage>
+<revisiondesc>
+<slist>
+<sitem>1997-12-03 : CMSMcQ : yet further changes</sitem>
+<sitem>1997-12-02 : TB : further changes (see TB to XML WG,
+2 December 1997)</sitem>
+<sitem>1997-12-02 : CMSMcQ : deal with as many corrections and
+comments from the proofreaders as possible:
+entify hard-coded document date in pubdate element,
+change expansion of entity WebSGML,
+update status description as per Dan Connolly (am not sure
+about refernece to Berners-Lee et al.),
+add 'The' to abstract as per WG decision,
+move Relationship to Existing Standards to back matter and
+combine with References,
+re-order back matter so normative appendices come first,
+re-tag back matter so informative appendices are tagged informdiv1,
+remove XXX XXX from list of 'normative' specs in prose,
+move some references from Other References to Normative References,
+add RFC 1738, 1808, and 2141 to Other References (they are not
+normative since we do not require the processor to enforce any
+rules based on them),
+add reference to 'Fielding draft' (Berners-Lee et al.),
+move notation section to end of body,
+drop URIchar non-terminal and use SkipLit instead,
+lose stray reference to defunct nonterminal 'markupdecls',
+move reference to Aho et al. into appendix (Tim's right),
+add prose note saying that hash marks and fragment identifiers are
+NOT part of the URI formally speaking, and are NOT legal in
+system identifiers (processor 'may' signal an error).
+Work through:
+Tim Bray reacting to James Clark,
+Tim Bray on his own,
+Eve Maler,
+
+NOT DONE YET:
+change binary / text to unparsed / parsed.
+handle James's suggestion about &lt; in attriubte values
+uppercase hex characters,
+namechar list,
+</sitem>
+<sitem>1997-12-01 : JB : add some column-width parameters</sitem>
+<sitem>1997-12-01 : CMSMcQ : begin round of changes to incorporate
+recent WG decisions and other corrections:
+binding sources of character encoding info (27 Aug / 3 Sept),
+correct wording of Faust quotation (restore dropped line),
+drop SDD from EncodingDecl,
+change text at version number 1.0,
+drop misleading (wrong!) sentence about ignorables and extenders,
+modify definition of PCData to make bar on msc grammatical,
+change grammar's handling of internal subset (drop non-terminal markupdecls),
+change definition of includeSect to allow conditional sections,
+add integral-declaration constraint on internal subset,
+drop misleading / dangerous sentence about relationship of
+entities with system storage objects,
+change table body tag to htbody as per EM change to DTD,
+add rule about space normalization in public identifiers,
+add description of how to generate our name-space rules from
+Unicode character database (needs further work!).
+</sitem>
+<sitem>1997-10-08 : TB : Removed %-constructs again, new rules
+for PE appearance.</sitem>
+<sitem>1997-10-01 : TB : Case-sensitive markup; cleaned up
+element-type defs, lotsa little edits for style</sitem>
+<sitem>1997-09-25 : TB : Change to elm's new DTD, with
+substantial detail cleanup as a side-effect</sitem>
+<sitem>1997-07-24 : CMSMcQ : correct error (lost *) in definition
+of ignoreSectContents (thanks to Makoto Murata)</sitem>
+<sitem>Allow all empty elements to have end-tags, consistent with
+SGML TC (as per JJC).</sitem>
+<sitem>1997-07-23 : CMSMcQ : pre-emptive strike on pending corrections:
+introduce the term 'empty-element tag', note that all empty elements
+may use it, and elements declared EMPTY must use it.
+Add WFC requiring encoding decl to come first in an entity.
+Redefine notations to point to PIs as well as binary entities.
+Change autodetection table by removing bytes 3 and 4 from
+examples with Byte Order Mark.
+Add content model as a term and clarify that it applies to both
+mixed and element content.
+</sitem>
+<sitem>1997-06-30 : CMSMcQ : change date, some cosmetic changes,
+changes to productions for choice, seq, Mixed, NotationType,
+Enumeration. Follow James Clark's suggestion and prohibit
+conditional sections in internal subset. TO DO: simplify
+production for ignored sections as a result, since we don't
+need to worry about parsers which don't expand PErefs finding
+a conditional section.</sitem>
+<sitem>1997-06-29 : TB : various edits</sitem>
+<sitem>1997-06-29 : CMSMcQ : further changes:
+Suppress old FINAL EDIT comments and some dead material.
+Revise occurrences of % in grammar to exploit Henry Thompson's pun,
+especially markupdecl and attdef.
+Remove RMD requirement relating to element content (?).
+</sitem>
+<sitem>1997-06-28 : CMSMcQ : Various changes for 1 July draft:
+Add text for draconian error handling (introduce
+the term Fatal Error).
+RE deleta est (changing wording from
+original announcement to restrict the requirement to validating
+parsers).
+Tag definition of validating processor and link to it.
+Add colon as name character.
+Change def of %operator.
+Change standard definitions of lt, gt, amp.
+Strip leading zeros from #x00nn forms.</sitem>
+<sitem>1997-04-02 : CMSMcQ : final corrections of editorial errors
+found in last night's proofreading. Reverse course once more on
+well-formed: Webster's Second hyphenates it, and that's enough
+for me.</sitem>
+<sitem>1997-04-01 : CMSMcQ : corrections from JJC, EM, HT, and self</sitem>
+<sitem>1997-03-31 : Tim Bray : many changes</sitem>
+<sitem>1997-03-29 : CMSMcQ : some Henry Thompson (on entity handling),
+some Charles Goldfarb, some ERB decisions (PE handling in miscellaneous
+declarations. Changed Ident element to accept def attribute.
+Allow normalization of Unicode characters. move def of systemliteral
+into section on literals.</sitem>
+<sitem>1997-03-28 : CMSMcQ : make as many corrections as possible, from
+Terry Allen, Norbert Mikula, James Clark, Jon Bosak, Henry Thompson,
+Paul Grosso, and self. Among other things: give in on "well formed"
+(Terry is right), tentatively rename QuotedCData as AttValue
+and Literal as EntityValue to be more informative, since attribute
+values are the <emph>only</emph> place QuotedCData was used, and
+vice versa for entity text and Literal. (I'd call it Entity Text,
+but 8879 uses that name for both internal and external entities.)</sitem>
+<sitem>1997-03-26 : CMSMcQ : resynch the two forks of this draft, reapply
+my changes dated 03-20 and 03-21. Normalize old 'may not' to 'must not'
+except in the one case where it meant 'may or may not'.</sitem>
+<sitem>1997-03-21 : TB : massive changes on plane flight from Chicago
+to Vancouver</sitem>
+<sitem>1997-03-21 : CMSMcQ : correct as many reported errors as possible.
+</sitem>
+<sitem>1997-03-20 : CMSMcQ : correct typos listed in CMSMcQ hand copy of spec.</sitem>
+<sitem>1997-03-20 : CMSMcQ : cosmetic changes preparatory to revision for
+WWW conference April 1997: restore some of the internal entity
+references (e.g. to docdate, etc.), change character xA0 to &amp;nbsp;
+and define nbsp as &amp;#160;, and refill a lot of paragraphs for
+legibility.</sitem>
+<sitem>1996-11-12 : CMSMcQ : revise using Tim's edits:
+Add list type of NUMBERED and change most lists either to
+BULLETS or to NUMBERED.
+Suppress QuotedNames, Names (not used).
+Correct trivial-grammar doc type decl.
+Rename 'marked section' as 'CDATA section' passim.
+Also edits from James Clark:
+Define the set of characters from which [^abc] subtracts.
+Charref should use just [0-9] not Digit.
+Location info needs cleaner treatment: remove? (ERB
+question).
+One example of a PI has wrong pic.
+Clarify discussion of encoding names.
+Encoding failure should lead to unspecified results; don't
+prescribe error recovery.
+Don't require exposure of entity boundaries.
+Ignore white space in element content.
+Reserve entity names of the form u-NNNN.
+Clarify relative URLs.
+And some of my own:
+Correct productions for content model: model cannot
+consist of a name, so "elements ::= cp" is no good.
+</sitem>
+<sitem>1996-11-11 : CMSMcQ : revise for style.
+Add new rhs to entity declaration, for parameter entities.</sitem>
+<sitem>1996-11-10 : CMSMcQ : revise for style.
+Fix / complete section on names, characters.
+Add sections on parameter entities, conditional sections.
+Still to do: Add compatibility note on deterministic content models.
+Finish stylistic revision.</sitem>
+<sitem>1996-10-31 : TB : Add Entity Handling section</sitem>
+<sitem>1996-10-30 : TB : Clean up term &amp; termdef. Slip in
+ERB decision re EMPTY.</sitem>
+<sitem>1996-10-28 : TB : Change DTD. Implement some of Michael's
+suggestions. Change comments back to //. Introduce language for
+XML namespace reservation. Add section on white-space handling.
+Lots more cleanup.</sitem>
+<sitem>1996-10-24 : CMSMcQ : quick tweaks, implement some ERB
+decisions. Characters are not integers. Comments are /* */ not //.
+Add bibliographic refs to 10646, HyTime, Unicode.
+Rename old Cdata as MsData since it's <emph>only</emph> seen
+in marked sections. Call them attribute-value pairs not
+name-value pairs, except once. Internal subset is optional, needs
+'?'. Implied attributes should be signaled to the app, not
+have values supplied by processor.</sitem>
+<sitem>1996-10-16 : TB : track down &amp; excise all DSD references;
+introduce some EBNF for entity declarations.</sitem>
+<sitem>1996-10-?? : TB : consistency check, fix up scraps so
+they all parse, get formatter working, correct a few productions.</sitem>
+<sitem>1996-10-10/11 : CMSMcQ : various maintenance, stylistic, and
+organizational changes:
+Replace a few literals with xmlpio and
+pic entities, to make them consistent and ensure we can change pic
+reliably when the ERB votes.
+Drop paragraph on recognizers from notation section.
+Add match, exact match to terminology.
+Move old 2.2 XML Processors and Apps into intro.
+Mention comments, PIs, and marked sections in discussion of
+delimiter escaping.
+Streamline discussion of doctype decl syntax.
+Drop old section of 'PI syntax' for doctype decl, and add
+section on partial-DTD summary PIs to end of Logical Structures
+section.
+Revise DSD syntax section to use Tim's subset-in-a-PI
+mechanism.</sitem>
+<sitem>1996-10-10 : TB : eliminate name recognizers (and more?)</sitem>
+<sitem>1996-10-09 : CMSMcQ : revise for style, consistency through 2.3
+(Characters)</sitem>
+<sitem>1996-10-09 : CMSMcQ : re-unite everything for convenience,
+at least temporarily, and revise quickly</sitem>
+<sitem>1996-10-08 : TB : first major homogenization pass</sitem>
+<sitem>1996-10-08 : TB : turn "current" attribute on div type into
+CDATA</sitem>
+<sitem>1996-10-02 : TB : remould into skeleton + entities</sitem>
+<sitem>1996-09-30 : CMSMcQ : add a few more sections prior to exchange
+ with Tim.</sitem>
+<sitem>1996-09-20 : CMSMcQ : finish transcribing notes.</sitem>
+<sitem>1996-09-19 : CMSMcQ : begin transcribing notes for draft.</sitem>
+<sitem>1996-09-13 : CMSMcQ : made outline from notes of 09-06,
+do some housekeeping</sitem>
+</slist>
+</revisiondesc>
+</header>
+<body>
+<div1 id='sec-intro'>
+<head>Introduction</head>
+<p>Extensible Markup Language, abbreviated XML, describes a class of
+data objects called <termref def="dt-xml-doc">XML documents</termref> and
+partially describes the behavior of
+computer programs which process them. XML is an application profile or
+restricted form of SGML, the Standard Generalized Markup
+Language <bibref ref='ISO8879'/>.
+By construction, XML documents
+are conforming SGML documents.
+</p>
+<p>XML documents are made up of storage units called <termref
+def="dt-entity">entities</termref>, which contain either parsed
+or unparsed data.
+Parsed data is made up of <termref def="dt-character">characters</termref>,
+some
+of which form <termref def="dt-chardata">character data</termref>,
+and some of which form <termref def="dt-markup">markup</termref>.
+Markup encodes a description of the document's storage layout and
+logical structure. XML provides a mechanism to impose constraints on
+the storage layout and logical structure.</p>
+<p><termdef id="dt-xml-proc" term="XML Processor">A software module
+called an <term>XML processor</term> is used to read XML documents
+and provide access to their content and structure.</termdef> <termdef
+id="dt-app" term="Application">It is assumed that an XML processor is
+doing its work on behalf of another module, called the
+<term>application</term>.</termdef> This specification describes the
+required behavior of an XML processor in terms of how it must read XML
+data and the information it must provide to the application.</p>
+
+<div2 id='sec-origin-goals'>
+<head>Origin and Goals</head>
+<p>XML was developed by an XML Working Group (originally known as the
+SGML Editorial Review Board) formed under the auspices of the World
+Wide Web Consortium (W3C) in 1996.
+It was chaired by Jon Bosak of Sun
+Microsystems with the active participation of an XML Special
+Interest Group (previously known as the SGML Working Group) also
+organized by the W3C. The membership of the XML Working Group is given
+in an appendix. Dan Connolly served as the WG's contact with the W3C.
+</p>
+<p>The design goals for XML are:<olist>
+<item><p>XML shall be straightforwardly usable over the
+Internet.</p></item>
+<item><p>XML shall support a wide variety of applications.</p></item>
+<item><p>XML shall be compatible with SGML.</p></item>
+<item><p>It shall be easy to write programs which process XML
+documents.</p></item>
+<item><p>The number of optional features in XML is to be kept to the
+absolute minimum, ideally zero.</p></item>
+<item><p>XML documents should be human-legible and reasonably
+clear.</p></item>
+<item><p>The XML design should be prepared quickly.</p></item>
+<item><p>The design of XML shall be formal and concise.</p></item>
+<item><p>XML documents shall be easy to create.</p></item>
+<item><p>Terseness in XML markup is of minimal importance.</p></item></olist>
+</p>
+<p>This specification,
+together with associated standards
+(Unicode and ISO/IEC 10646 for characters,
+Internet RFC 1766 for language identification tags,
+ISO 639 for language name codes, and
+ISO 3166 for country name codes),
+provides all the information necessary to understand
+XML Version &XML.version;
+and construct computer programs to process it.</p>
+<p>This version of the XML specification
+<!-- is for &doc.audience;.-->
+&doc.distribution;.</p>
+
+</div2>
+
+
+
+
+<div2 id='sec-terminology'>
+<head>Terminology</head>
+
+<p>The terminology used to describe XML documents is defined in the body of
+this specification.
+The terms defined in the following list are used in building those
+definitions and in describing the actions of an XML processor:
+<glist>
+<gitem>
+<label>may</label>
+<def><p><termdef id="dt-may" term="May">Conforming documents and XML
+processors are permitted to but need not behave as
+described.</termdef></p></def>
+</gitem>
+<gitem>
+<label>must</label>
+<def><p>Conforming documents and XML processors
+are required to behave as described; otherwise they are in error.
+<!-- do NOT change this! this is what defines a violation of
+a 'must' clause as 'an error'. -MSM -->
+</p></def>
+</gitem>
+<gitem>
+<label>error</label>
+<def><p><termdef id='dt-error' term='Error'
+>A violation of the rules of this
+specification; results are
+undefined. Conforming software may detect and report an error and may
+recover from it.</termdef></p></def>
+</gitem>
+<gitem>
+<label>fatal error</label>
+<def><p><termdef id="dt-fatal" term="Fatal Error">An error
+which a conforming <termref def="dt-xml-proc">XML processor</termref>
+must detect and report to the application.
+After encountering a fatal error, the
+processor may continue
+processing the data to search for further errors and may report such
+errors to the application. In order to support correction of errors,
+the processor may make unprocessed data from the document (with
+intermingled character data and markup) available to the application.
+Once a fatal error is detected, however, the processor must not
+continue normal processing (i.e., it must not
+continue to pass character data and information about the document's
+logical structure to the application in the normal way).
+</termdef></p></def>
+</gitem>
+<gitem>
+<label>at user option</label>
+<def><p>Conforming software may or must (depending on the modal verb in the
+sentence) behave as described; if it does, it must
+provide users a means to enable or disable the behavior
+described.</p></def>
+</gitem>
+<gitem>
+<label>validity constraint</label>
+<def><p>A rule which applies to all
+<termref def="dt-valid">valid</termref> XML documents.
+Violations of validity constraints are errors; they must, at user option,
+be reported by
+<termref def="dt-validating">validating XML processors</termref>.</p></def>
+</gitem>
+<gitem>
+<label>well-formedness constraint</label>
+<def><p>A rule which applies to all <termref
+def="dt-wellformed">well-formed</termref> XML documents.
+Violations of well-formedness constraints are
+<termref def="dt-fatal">fatal errors</termref>.</p></def>
+</gitem>
+
+<gitem>
+<label>match</label>
+<def><p><termdef id="dt-match" term="match">(Of strings or names:)
+Two strings or names being compared must be identical.
+Characters with multiple possible representations in ISO/IEC 10646 (e.g.
+characters with
+both precomposed and base+diacritic forms) match only if they have the
+same representation in both strings.
+At user option, processors may normalize such characters to
+some canonical form.
+No case folding is performed.
+(Of strings and rules in the grammar:)
+A string matches a grammatical production if it belongs to the
+language generated by that production.
+(Of content and content models:)
+An element matches its declaration when it conforms
+in the fashion described in the constraint
+<specref ref='elementvalid'/>.
+</termdef>
+</p></def>
+</gitem>
+<gitem>
+<label>for compatibility</label>
+<def><p><termdef id="dt-compat" term="For Compatibility">A feature of
+XML included solely to ensure that XML remains compatible with SGML.
+</termdef></p></def>
+</gitem>
+<gitem>
+<label>for interoperability</label>
+<def><p><termdef id="dt-interop" term="For interoperability">A
+non-binding recommendation included to increase the chances that XML
+documents can be processed by the existing installed base of SGML
+processors which predate the
+&WebSGML;.</termdef></p></def>
+</gitem>
+</glist>
+</p>
+</div2>
+
+
+</div1>
+<!-- &Docs; -->
+
+<div1 id='sec-documents'>
+<head>Documents</head>
+
+<p><termdef id="dt-xml-doc" term="XML Document">
+A data object is an
+<term>XML document</term> if it is
+<termref def="dt-wellformed">well-formed</termref>, as
+defined in this specification.
+A well-formed XML document may in addition be
+<termref def="dt-valid">valid</termref> if it meets certain further
+constraints.</termdef></p>
+
+<p>Each XML document has both a logical and a physical structure.
+Physically, the document is composed of units called <termref
+def="dt-entity">entities</termref>. An entity may <termref
+def="dt-entref">refer</termref> to other entities to cause their
+inclusion in the document. A document begins in a "root" or <termref
+def="dt-docent">document entity</termref>.
+Logically, the document is composed of declarations, elements,
+comments,
+character references, and
+processing
+instructions, all of which are indicated in the document by explicit
+markup.
+The logical and physical structures must nest properly, as described
+in <specref ref='wf-entities'/>.
+</p>
+
+<div2 id='sec-well-formed'>
+<head>Well-Formed XML Documents</head>
+
+<p><termdef id="dt-wellformed" term="Well-Formed">
+A textual object is
+a well-formed XML document if:</termdef>
+<olist>
+<item><p>Taken as a whole, it
+matches the production labeled <nt def='NT-document'>document</nt>.</p></item>
+<item><p>It
+meets all the well-formedness constraints given in this specification.</p>
+</item>
+<item><p>Each of the <termref def='dt-parsedent'>parsed entities</termref>
+which is referenced directly or indirectly within the document is
+<titleref href='wf-entities'>well-formed</titleref>.</p></item>
+</olist></p>
+<p>
+<scrap lang='ebnf' id='document'>
+<head>Document</head>
+<prod id='NT-document'><lhs>document</lhs>
+<rhs><nt def='NT-prolog'>prolog</nt>
+<nt def='NT-element'>element</nt>
+<nt def='NT-Misc'>Misc</nt>*</rhs></prod>
+</scrap>
+</p>
+<p>Matching the <nt def="NT-document">document</nt> production
+implies that:
+<olist>
+<item><p>It contains one or more
+<termref def="dt-element">elements</termref>.</p>
+</item>
+<!--* N.B. some readers (notably JC) find the following
+paragraph awkward and redundant. I agree it's logically redundant:
+it *says* it is summarizing the logical implications of
+matching the grammar, and that means by definition it's
+logically redundant. I don't think it's rhetorically
+redundant or unnecessary, though, so I'm keeping it. It
+could however use some recasting when the editors are feeling
+stronger. -MSM *-->
+<item><p><termdef id="dt-root" term="Root Element">There is exactly
+one element, called the <term>root</term>, or document element, no
+part of which appears in the <termref
+def="dt-content">content</termref> of any other element.</termdef>
+For all other elements, if the start-tag is in the content of another
+element, the end-tag is in the content of the same element. More
+simply stated, the elements, delimited by start- and end-tags, nest
+properly within each other.
+</p></item>
+</olist>
+</p>
+<p><termdef id="dt-parentchild" term="Parent/Child">As a consequence
+of this,
+for each non-root element
+<code>C</code> in the document, there is one other element <code>P</code>
+in the document such that
+<code>C</code> is in the content of <code>P</code>, but is not in
+the content of any other element that is in the content of
+<code>P</code>.
+<code>P</code> is referred to as the
+<term>parent</term> of <code>C</code>, and <code>C</code> as a
+<term>child</term> of <code>P</code>.</termdef></p></div2>
+
+<div2 id="charsets">
+<head>Characters</head>
+
+<p><termdef id="dt-text" term="Text">A parsed entity contains
+<term>text</term>, a sequence of
+<termref def="dt-character">characters</termref>,
+which may represent markup or character data.</termdef>
+<termdef id="dt-character" term="Character">A <term>character</term>
+is an atomic unit of text as specified by
+ISO/IEC 10646 <bibref ref="ISO10646"/>.
+Legal characters are tab, carriage return, line feed, and the legal
+graphic characters of Unicode and ISO/IEC 10646.
+The use of "compatibility characters", as defined in section 6.8
+of <bibref ref='Unicode'/>, is discouraged.
+</termdef>
+<scrap lang="ebnf" id="char32">
+<head>Character Range</head>
+<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
+<prod id="NT-Char"><lhs>Char</lhs>
+<rhs>#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
+| [#x10000-#x10FFFF]</rhs>
+<com>any Unicode character, excluding the
+surrogate blocks, FFFE, and FFFF.</com> </prod>
+</prodgroup>
+</scrap>
+</p>
+
+<p>The mechanism for encoding character code points into bit patterns may
+vary from entity to entity. All XML processors must accept the UTF-8
+and UTF-16 encodings of 10646; the mechanisms for signaling which of
+the two is in use, or for bringing other encodings into play, are
+discussed later, in <specref ref='charencoding'/>.
+</p>
+<!--
+<p>Regardless of the specific encoding used, any character in the ISO/IEC
+10646 character set may be referred to by the decimal or hexadecimal
+equivalent of its
+UCS-4 code value.
+</p>-->
+</div2>
+
+<div2 id='sec-common-syn'>
+<head>Common Syntactic Constructs</head>
+
+<p>This section defines some symbols used widely in the grammar.</p>
+<p><nt def="NT-S">S</nt> (white space) consists of one or more space (#x20)
+characters, carriage returns, line feeds, or tabs.
+
+<scrap lang="ebnf" id='white'>
+<head>White Space</head>
+<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
+<prod id='NT-S'><lhs>S</lhs>
+<rhs>(#x20 | #x9 | #xD | #xA)+</rhs>
+</prod>
+</prodgroup>
+</scrap></p>
+<p>Characters are classified for convenience as letters, digits, or other
+characters. Letters consist of an alphabetic or syllabic
+base character possibly
+followed by one or more combining characters, or of an ideographic
+character.
+Full definitions of the specific characters in each class
+are given in <specref ref='CharClasses'/>.</p>
+<p><termdef id="dt-name" term="Name">A <term>Name</term> is a token
+beginning with a letter or one of a few punctuation characters, and continuing
+with letters, digits, hyphens, underscores, colons, or full stops, together
+known as name characters.</termdef>
+Names beginning with the string "<code>xml</code>", or any string
+which would match <code>(('X'|'x') ('M'|'m') ('L'|'l'))</code>, are
+reserved for standardization in this or future versions of this
+specification.
+</p>
+<note>
+<p>The colon character within XML names is reserved for experimentation with
+name spaces.
+Its meaning is expected to be
+standardized at some future point, at which point those documents
+using the colon for experimental purposes may need to be updated.
+(There is no guarantee that any name-space mechanism
+adopted for XML will in fact use the colon as a name-space delimiter.)
+In practice, this means that authors should not use the colon in XML
+names except as part of name-space experiments, but that XML processors
+should accept the colon as a name character.</p>
+</note>
+<p>An
+<nt def='NT-Nmtoken'>Nmtoken</nt> (name token) is any mixture of
+name characters.
+<scrap lang='ebnf'>
+<head>Names and Tokens</head>
+<prod id='NT-NameChar'><lhs>NameChar</lhs>
+<rhs><nt def="NT-Letter">Letter</nt>
+| <nt def='NT-Digit'>Digit</nt>
+| '.' | '-' | '_' | ':'
+| <nt def='NT-CombiningChar'>CombiningChar</nt>
+| <nt def='NT-Extender'>Extender</nt></rhs>
+</prod>
+<prod id='NT-Name'><lhs>Name</lhs>
+<rhs>(<nt def='NT-Letter'>Letter</nt> | '_' | ':')
+(<nt def='NT-NameChar'>NameChar</nt>)*</rhs></prod>
+<prod id='NT-Names'><lhs>Names</lhs>
+<rhs><nt def='NT-Name'>Name</nt>
+(<nt def='NT-S'>S</nt> <nt def='NT-Name'>Name</nt>)*</rhs></prod>
+<prod id='NT-Nmtoken'><lhs>Nmtoken</lhs>
+<rhs>(<nt def='NT-NameChar'>NameChar</nt>)+</rhs></prod>
+<prod id='NT-Nmtokens'><lhs>Nmtokens</lhs>
+<rhs><nt def='NT-Nmtoken'>Nmtoken</nt> (<nt def='NT-S'>S</nt> <nt def='NT-Nmtoken'>Nmtoken</nt>)*</rhs></prod>
+</scrap>
+</p>
+<p>Literal data is any quoted string not containing
+the quotation mark used as a delimiter for that string.
+Literals are used
+for specifying the content of internal entities
+(<nt def='NT-EntityValue'>EntityValue</nt>),
+the values of attributes (<nt def='NT-AttValue'>AttValue</nt>),
+and external identifiers
+(<nt def="NT-SystemLiteral">SystemLiteral</nt>).
+Note that a <nt def='NT-SystemLiteral'>SystemLiteral</nt>
+can be parsed without scanning for markup.
+<scrap lang='ebnf'>
+<head>Literals</head>
+<prod id='NT-EntityValue'><lhs>EntityValue</lhs>
+<rhs>'"'
+([^%&amp;"]
+| <nt def='NT-PEReference'>PEReference</nt>
+| <nt def='NT-Reference'>Reference</nt>)*
+'"'
+</rhs>
+<rhs>|&nbsp;
+"'"
+([^%&amp;']
+| <nt def='NT-PEReference'>PEReference</nt>
+| <nt def='NT-Reference'>Reference</nt>)*
+"'"</rhs>
+</prod>
+<prod id='NT-AttValue'><lhs>AttValue</lhs>
+<rhs>'"'
+([^&lt;&amp;"]
+| <nt def='NT-Reference'>Reference</nt>)*
+'"'
+</rhs>
+<rhs>|&nbsp;
+"'"
+([^&lt;&amp;']
+| <nt def='NT-Reference'>Reference</nt>)*
+"'"</rhs>
+</prod>
+<prod id="NT-SystemLiteral"><lhs>SystemLiteral</lhs>
+<rhs>('"' [^"]* '"') |&nbsp;("'" [^']* "'")
+</rhs>
+</prod>
+<prod id="NT-PubidLiteral"><lhs>PubidLiteral</lhs>
+<rhs>'"' <nt def='NT-PubidChar'>PubidChar</nt>*
+'"'
+| "'" (<nt def='NT-PubidChar'>PubidChar</nt> - "'")* "'"</rhs>
+</prod>
+<prod id="NT-PubidChar"><lhs>PubidChar</lhs>
+<rhs>#x20 | #xD | #xA
+|&nbsp;[a-zA-Z0-9]
+|&nbsp;[-'()+,./:=?;!*#@$_%]</rhs>
+</prod>
+</scrap>
+</p>
+
+</div2>
+
+<div2 id='syntax'>
+<head>Character Data and Markup</head>
+
+<p><termref def='dt-text'>Text</termref> consists of intermingled
+<termref def="dt-chardata">character
+data</termref> and markup.
+<termdef id="dt-markup" term="Markup"><term>Markup</term> takes the form of
+<termref def="dt-stag">start-tags</termref>,
+<termref def="dt-etag">end-tags</termref>,
+<termref def="dt-empty">empty-element tags</termref>,
+<termref def="dt-entref">entity references</termref>,
+<termref def="dt-charref">character references</termref>,
+<termref def="dt-comment">comments</termref>,
+<termref def="dt-cdsection">CDATA section</termref> delimiters,
+<termref def="dt-doctype">document type declarations</termref>, and
+<termref def="dt-pi">processing instructions</termref>.
+</termdef>
+</p>
+<p><termdef id="dt-chardata" term="Character Data">All text that is not markup
+constitutes the <term>character data</term> of
+the document.</termdef></p>
+<p>The ampersand character (&amp;) and the left angle bracket (&lt;)
+may appear in their literal form <emph>only</emph> when used as markup
+delimiters, or within a <termref def="dt-comment">comment</termref>, a
+<termref def="dt-pi">processing instruction</termref>,
+or a <termref def="dt-cdsection">CDATA section</termref>.
+
+They are also legal within the <termref def='dt-litentval'>literal entity
+value</termref> of an internal entity declaration; see
+<specref ref='wf-entities'/>.
+<!-- FINAL EDIT: restore internal entity decl or leave it out. -->
+If they are needed elsewhere,
+they must be <termref def="dt-escape">escaped</termref>
+using either <termref def='dt-charref'>numeric character references</termref>
+or the strings
+"<code>&amp;amp;</code>" and "<code>&amp;lt;</code>" respectively.
+The right angle
+bracket (>) may be represented using the string
+"<code>&amp;gt;</code>", and must, <termref def='dt-compat'>for
+compatibility</termref>,
+be escaped using
+"<code>&amp;gt;</code>" or a character reference
+when it appears in the string
+"<code>]]&gt;</code>"
+in content,
+when that string is not marking the end of
+a <termref def="dt-cdsection">CDATA section</termref>.
+</p>
+<p>
+In the content of elements, character data
+is any string of characters which does
+not contain the start-delimiter of any markup.
+In a CDATA section, character data
+is any string of characters not including the CDATA-section-close
+delimiter, "<code>]]&gt;</code>".</p>
+<p>
+To allow attribute values to contain both single and double quotes, the
+apostrophe or single-quote character (') may be represented as
+"<code>&amp;apos;</code>", and the double-quote character (") as
+"<code>&amp;quot;</code>".
+<scrap lang="ebnf">
+<head>Character Data</head>
+<prod id='NT-CharData'>
+<lhs>CharData</lhs>
+<rhs>[^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)</rhs>
+</prod>
+</scrap>
+</p>
+</div2>
+
+<div2 id='sec-comments'>
+<head>Comments</head>
+
+<p><termdef id="dt-comment" term="Comment"><term>Comments</term> may
+appear anywhere in a document outside other
+<termref def='dt-markup'>markup</termref>; in addition,
+they may appear within the document type declaration
+at places allowed by the grammar.
+They are not part of the document's <termref def="dt-chardata">character
+data</termref>; an XML
+processor may, but need not, make it possible for an application to
+retrieve the text of comments.
+<termref def="dt-compat">For compatibility</termref>, the string
+"<code>--</code>" (double-hyphen) must not occur within
+comments.
+<scrap lang="ebnf">
+<head>Comments</head>
+<prod id='NT-Comment'><lhs>Comment</lhs>
+<rhs>'&lt;!--'
+((<nt def='NT-Char'>Char</nt> - '-')
+| ('-' (<nt def='NT-Char'>Char</nt> - '-')))*
+'-->'</rhs>
+</prod>
+</scrap>
+</termdef></p>
+<p>An example of a comment:
+<eg>&lt;!&como; declarations for &lt;head> &amp; &lt;body> &comc;&gt;</eg>
+</p>
+</div2>
+
+<div2 id='sec-pi'>
+<head>Processing Instructions</head>
+
+<p><termdef id="dt-pi" term="Processing instruction"><term>Processing
+instructions</term> (PIs) allow documents to contain instructions
+for applications.
+
+<scrap lang="ebnf">
+<head>Processing Instructions</head>
+<prod id='NT-PI'><lhs>PI</lhs>
+<rhs>'&lt;?' <nt def='NT-PITarget'>PITarget</nt>
+(<nt def='NT-S'>S</nt>
+(<nt def='NT-Char'>Char</nt>* -
+(<nt def='NT-Char'>Char</nt>* &pic; <nt def='NT-Char'>Char</nt>*)))?
+&pic;</rhs></prod>
+<prod id='NT-PITarget'><lhs>PITarget</lhs>
+<rhs><nt def='NT-Name'>Name</nt> -
+(('X' | 'x') ('M' | 'm') ('L' | 'l'))</rhs>
+</prod>
+</scrap></termdef>
+PIs are not part of the document's <termref def="dt-chardata">character
+data</termref>, but must be passed through to the application. The
+PI begins with a target (<nt def='NT-PITarget'>PITarget</nt>) used
+to identify the application to which the instruction is directed.
+The target names "<code>XML</code>", "<code>xml</code>", and so on are
+reserved for standardization in this or future versions of this
+specification.
+The
+XML <termref def='dt-notation'>Notation</termref> mechanism
+may be used for
+formal declaration of PI targets.
+</p>
+</div2>
+
+<div2 id='sec-cdata-sect'>
+<head>CDATA Sections</head>
+
+<p><termdef id="dt-cdsection" term="CDATA Section"><term>CDATA sections</term>
+may occur
+anywhere character data may occur; they are
+used to escape blocks of text containing characters which would
+otherwise be recognized as markup. CDATA sections begin with the
+string "<code>&lt;![CDATA[</code>" and end with the string
+"<code>]]&gt;</code>":
+<scrap lang="ebnf">
+<head>CDATA Sections</head>
+<prod id='NT-CDSect'><lhs>CDSect</lhs>
+<rhs><nt def='NT-CDStart'>CDStart</nt>
+<nt def='NT-CData'>CData</nt>
+<nt def='NT-CDEnd'>CDEnd</nt></rhs></prod>
+<prod id='NT-CDStart'><lhs>CDStart</lhs>
+<rhs>'&lt;![CDATA['</rhs>
+</prod>
+<prod id='NT-CData'><lhs>CData</lhs>
+<rhs>(<nt def='NT-Char'>Char</nt>* -
+(<nt def='NT-Char'>Char</nt>* ']]&gt;' <nt def='NT-Char'>Char</nt>*))
+</rhs>
+</prod>
+<prod id='NT-CDEnd'><lhs>CDEnd</lhs>
+<rhs>']]&gt;'</rhs>
+</prod>
+</scrap>
+
+Within a CDATA section, only the <nt def='NT-CDEnd'>CDEnd</nt> string is
+recognized as markup, so that left angle brackets and ampersands may occur in
+their literal form; they need not (and cannot) be escaped using
+"<code>&amp;lt;</code>" and "<code>&amp;amp;</code>". CDATA sections
+cannot nest.</termdef>
+</p>
+
+<p>An example of a CDATA section, in which "<code>&lt;greeting></code>" and
+"<code>&lt;/greeting></code>"
+are recognized as <termref def='dt-chardata'>character data</termref>, not
+<termref def='dt-markup'>markup</termref>:
+<eg>&lt;![CDATA[&lt;greeting>Hello, world!&lt;/greeting>]]&gt;</eg>
+</p>
+</div2>
+
+<div2 id='sec-prolog-dtd'>
+<head>Prolog and Document Type Declaration</head>
+
+<p><termdef id='dt-xmldecl' term='XML Declaration'>XML documents
+may, and should,
+begin with an <term>XML declaration</term> which specifies
+the version of
+XML being used.</termdef>
+For example, the following is a complete XML document, <termref
+def="dt-wellformed">well-formed</termref> but not
+<termref def="dt-valid">valid</termref>:
+<eg><![CDATA[<?xml version="1.0"?>
+<greeting>Hello, world!</greeting>
+]]></eg>
+and so is this:
+<eg><![CDATA[<greeting>Hello, world!</greeting>
+]]></eg>
+</p>
+
+<p>The version number "<code>1.0</code>" should be used to indicate
+conformance to this version of this specification; it is an error
+for a document to use the value "<code>1.0</code>"
+if it does not conform to this version of this specification.
+It is the intent
+of the XML working group to give later versions of this specification
+numbers other than "<code>1.0</code>", but this intent does not
+indicate a
+commitment to produce any future versions of XML, nor if any are produced, to
+use any particular numbering scheme.
+Since future versions are not ruled out, this construct is provided
+as a means to allow the possibility of automatic version recognition, should
+it become necessary.
+Processors may signal an error if they receive documents labeled with
+versions they do not support.
+</p>
+<p>The function of the markup in an XML document is to describe its
+storage and logical structure and to associate attribute-value pairs
+with its logical structures. XML provides a mechanism, the <termref
+def="dt-doctype">document type declaration</termref>, to define
+constraints on the logical structure and to support the use of
+predefined storage units.
+
+<termdef id="dt-valid" term="Validity">An XML document is
+<term>valid</term> if it has an associated document type
+declaration and if the document
+complies with the constraints expressed in it.</termdef></p>
+<p>The document type declaration must appear before
+the first <termref def="dt-element">element</termref> in the document.
+<scrap lang="ebnf" id='xmldoc'>
+<head>Prolog</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id='NT-prolog'><lhs>prolog</lhs>
+<rhs><nt def='NT-XMLDecl'>XMLDecl</nt>?
+<nt def='NT-Misc'>Misc</nt>*
+(<nt def='NT-doctypedecl'>doctypedecl</nt>
+<nt def='NT-Misc'>Misc</nt>*)?</rhs></prod>
+<prod id='NT-XMLDecl'><lhs>XMLDecl</lhs>
+<rhs>&xmlpio;
+<nt def='NT-VersionInfo'>VersionInfo</nt>
+<nt def='NT-EncodingDecl'>EncodingDecl</nt>?
+<nt def='NT-SDDecl'>SDDecl</nt>?
+<nt def="NT-S">S</nt>?
+&pic;</rhs>
+</prod>
+<prod id='NT-VersionInfo'><lhs>VersionInfo</lhs>
+<rhs><nt def="NT-S">S</nt> 'version' <nt def='NT-Eq'>Eq</nt>
+(' <nt def="NT-VersionNum">VersionNum</nt> '
+| " <nt def="NT-VersionNum">VersionNum</nt> ")</rhs>
+</prod>
+<prod id='NT-Eq'><lhs>Eq</lhs>
+<rhs><nt def='NT-S'>S</nt>? '=' <nt def='NT-S'>S</nt>?</rhs></prod>
+<prod id="NT-VersionNum">
+<lhs>VersionNum</lhs>
+<rhs>([a-zA-Z0-9_.:] | '-')+</rhs>
+</prod>
+<prod id='NT-Misc'><lhs>Misc</lhs>
+<rhs><nt def='NT-Comment'>Comment</nt> | <nt def='NT-PI'>PI</nt> |
+<nt def='NT-S'>S</nt></rhs></prod>
+</prodgroup>
+</scrap></p>
+
+<p><termdef id="dt-doctype" term="Document Type Declaration">The XML
+<term>document type declaration</term>
+contains or points to
+<termref def='dt-markupdecl'>markup declarations</termref>
+that provide a grammar for a
+class of documents.
+This grammar is known as a document type definition,
+or <term>DTD</term>.
+The document type declaration can point to an external subset (a
+special kind of
+<termref def='dt-extent'>external entity</termref>) containing markup
+declarations, or can
+contain the markup declarations directly in an internal subset, or can do
+both.
+The DTD for a document consists of both subsets taken
+together.</termdef>
+</p>
+<p><termdef id="dt-markupdecl" term="markup declaration">
+A <term>markup declaration</term> is
+an <termref def="dt-eldecl">element type declaration</termref>,
+an <termref def="dt-attdecl">attribute-list declaration</termref>,
+an <termref def="dt-entdecl">entity declaration</termref>, or
+a <termref def="dt-notdecl">notation declaration</termref>.
+</termdef>
+These declarations may be contained in whole or in part
+within <termref def='dt-PE'>parameter entities</termref>,
+as described in the well-formedness and validity constraints below.
+For fuller information, see
+<specref ref="sec-physical-struct"/>.</p>
+<scrap lang="ebnf" id='dtd'>
+<head>Document Type Definition</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id='NT-doctypedecl'><lhs>doctypedecl</lhs>
+<rhs>'&lt;!DOCTYPE' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt> (<nt def='NT-S'>S</nt>
+<nt def='NT-ExternalID'>ExternalID</nt>)?
+<nt def='NT-S'>S</nt>? ('['
+(<nt def='NT-markupdecl'>markupdecl</nt>
+| <nt def='NT-PEReference'>PEReference</nt>
+| <nt def='NT-S'>S</nt>)*
+']'
+<nt def='NT-S'>S</nt>?)? '>'</rhs>
+<vc def="vc-roottype"/>
+</prod>
+<prod id='NT-markupdecl'><lhs>markupdecl</lhs>
+<rhs><nt def='NT-elementdecl'>elementdecl</nt>
+| <nt def='NT-AttlistDecl'>AttlistDecl</nt>
+| <nt def='NT-EntityDecl'>EntityDecl</nt>
+| <nt def='NT-NotationDecl'>NotationDecl</nt>
+| <nt def='NT-PI'>PI</nt>
+| <nt def='NT-Comment'>Comment</nt>
+</rhs>
+<vc def='vc-PEinMarkupDecl'/>
+<wfc def="wfc-PEinInternalSubset"/>
+</prod>
+
+</prodgroup>
+</scrap>
+
+<p>The markup declarations may be made up in whole or in part of
+the <termref def='dt-repltext'>replacement text</termref> of
+<termref def='dt-PE'>parameter entities</termref>.
+The productions later in this specification for
+individual nonterminals (<nt def='NT-elementdecl'>elementdecl</nt>,
+<nt def='NT-AttlistDecl'>AttlistDecl</nt>, and so on) describe
+the declarations <emph>after</emph> all the parameter entities have been
+<termref def='dt-include'>included</termref>.</p>
+
+<vcnote id="vc-roottype">
+<head>Root Element Type</head>
+<p>
+The <nt def='NT-Name'>Name</nt> in the document type declaration must
+match the element type of the <termref def='dt-root'>root element</termref>.
+</p>
+</vcnote>
+
+<vcnote id='vc-PEinMarkupDecl'>
+<head>Proper Declaration/PE Nesting</head>
+<p>Parameter-entity
+<termref def='dt-repltext'>replacement text</termref> must be properly nested
+with markup declarations.
+That is to say, if either the first character
+or the last character of a markup
+declaration (<nt def='NT-markupdecl'>markupdecl</nt> above)
+is contained in the replacement text for a
+<termref def='dt-PERef'>parameter-entity reference</termref>,
+both must be contained in the same replacement text.</p>
+</vcnote>
+<wfcnote id="wfc-PEinInternalSubset">
+<head>PEs in Internal Subset</head>
+<p>In the internal DTD subset,
+<termref def='dt-PERef'>parameter-entity references</termref>
+can occur only where markup declarations can occur, not
+within markup declarations. (This does not apply to
+references that occur in
+external parameter entities or to the external subset.)
+</p>
+</wfcnote>
+<p>
+Like the internal subset, the external subset and
+any external parameter entities referred to in the DTD
+must consist of a series of complete markup declarations of the types
+allowed by the non-terminal symbol
+<nt def="NT-markupdecl">markupdecl</nt>, interspersed with white space
+or <termref def="dt-PERef">parameter-entity references</termref>.
+However, portions of the contents
+of the
+external subset or of external parameter entities may conditionally be ignored
+by using
+the <termref def="dt-cond-section">conditional section</termref>
+construct; this is not allowed in the internal subset.
+
+<scrap id="ext-Subset">
+<head>External Subset</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id='NT-extSubset'><lhs>extSubset</lhs>
+<rhs><nt def='NT-TextDecl'>TextDecl</nt>?
+<nt def='NT-extSubsetDecl'>extSubsetDecl</nt></rhs></prod>
+<prod id='NT-extSubsetDecl'><lhs>extSubsetDecl</lhs>
+<rhs>(
+<nt def='NT-markupdecl'>markupdecl</nt>
+| <nt def='NT-conditionalSect'>conditionalSect</nt>
+| <nt def='NT-PEReference'>PEReference</nt>
+| <nt def='NT-S'>S</nt>
+)*</rhs>
+</prod>
+</prodgroup>
+</scrap></p>
+<p>The external subset and external parameter entities also differ
+from the internal subset in that in them,
+<termref def="dt-PERef">parameter-entity references</termref>
+are permitted <emph>within</emph> markup declarations,
+not only <emph>between</emph> markup declarations.</p>
+<p>An example of an XML document with a document type declaration:
+<eg><![CDATA[<?xml version="1.0"?>
+<!DOCTYPE greeting SYSTEM "hello.dtd">
+<greeting>Hello, world!</greeting>
+]]></eg>
+The <termref def="dt-sysid">system identifier</termref>
+"<code>hello.dtd</code>" gives the URI of a DTD for the document.</p>
+<p>The declarations can also be given locally, as in this
+example:
+<eg><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE greeting [
+ <!ELEMENT greeting (#PCDATA)>
+]>
+<greeting>Hello, world!</greeting>
+]]></eg>
+If both the external and internal subsets are used, the
+internal subset is considered to occur before the external subset.
+<!-- 'is considered to'? boo. whazzat mean? -->
+This has the effect that entity and attribute-list declarations in the
+internal subset take precedence over those in the external subset.
+</p>
+</div2>
+
+<div2 id='sec-rmd'>
+<head>Standalone Document Declaration</head>
+<p>Markup declarations can affect the content of the document,
+as passed from an <termref def="dt-xml-proc">XML processor</termref>
+to an application; examples are attribute defaults and entity
+declarations.
+The standalone document declaration,
+which may appear as a component of the XML declaration, signals
+whether or not there are such declarations which appear external to
+the <termref def='dt-docent'>document entity</termref>.
+<scrap lang="ebnf" id='fulldtd'>
+<head>Standalone Document Declaration</head>
+<prodgroup pcw2="4" pcw4="19.5" pcw5="9">
+<prod id='NT-SDDecl'><lhs>SDDecl</lhs>
+<rhs>
+<nt def="NT-S">S</nt>
+'standalone' <nt def='NT-Eq'>Eq</nt>
+(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"'))
+</rhs>
+<vc def='vc-check-rmd'/></prod>
+</prodgroup>
+</scrap></p>
+<p>
+In a standalone document declaration, the value "<code>yes</code>" indicates
+that there
+are no markup declarations external to the <termref def='dt-docent'>document
+entity</termref> (either in the DTD external subset, or in an
+external parameter entity referenced from the internal subset)
+which affect the information passed from the XML processor to
+the application.
+The value "<code>no</code>" indicates that there are or may be such
+external markup declarations.
+Note that the standalone document declaration only
+denotes the presence of external <emph>declarations</emph>; the presence, in a
+document, of
+references to external <emph>entities</emph>, when those entities are
+internally declared,
+does not change its standalone status.</p>
+<p>If there are no external markup declarations, the standalone document
+declaration has no meaning.
+If there are external markup declarations but there is no standalone
+document declaration, the value "<code>no</code>" is assumed.</p>
+<p>Any XML document for which <code>standalone="no"</code> holds can
+be converted algorithmically to a standalone document,
+which may be desirable for some network delivery applications.</p>
+<vcnote id='vc-check-rmd'>
+<head>Standalone Document Declaration</head>
+<p>The standalone document declaration must have
+the value "<code>no</code>" if any external markup declarations
+contain declarations of:</p><ulist>
+<item><p>attributes with <termref def="dt-default">default</termref> values, if
+elements to which
+these attributes apply appear in the document without
+specifications of values for these attributes, or</p></item>
+<item><p>entities (other than &magicents;),
+if <termref def="dt-entref">references</termref> to those
+entities appear in the document, or</p>
+</item>
+<item><p>attributes with values subject to
+<titleref href='AVNormalize'>normalization</titleref>, where the
+attribute appears in the document with a value which will
+change as a result of normalization, or</p>
+</item>
+<item>
+<p>element types with <termref def="dt-elemcontent">element content</termref>,
+if white space occurs
+directly within any instance of those types.
+</p></item>
+</ulist>
+
+</vcnote>
+<p>An example XML declaration with a standalone document declaration:<eg
+>&lt;?xml version="&XML.version;" standalone='yes'?></eg></p>
+</div2>
+<div2 id='sec-white-space'>
+<head>White Space Handling</head>
+
+<p>In editing XML documents, it is often convenient to use "white space"
+(spaces, tabs, and blank lines, denoted by the nonterminal
+<nt def='NT-S'>S</nt> in this specification) to
+set apart the markup for greater readability. Such white space is typically
+not intended for inclusion in the delivered version of the document.
+On the other hand, "significant" white space that should be preserved in the
+delivered version is common, for example in poetry and
+source code.</p>
+<p>An <termref def='dt-xml-proc'>XML processor</termref>
+must always pass all characters in a document that are not
+markup through to the application. A <termref def='dt-validating'>
+validating XML processor</termref> must also inform the application
+which of these characters constitute white space appearing
+in <termref def="dt-elemcontent">element content</termref>.
+</p>
+<p>A special <termref def='dt-attr'>attribute</termref>
+named <kw>xml:space</kw> may be attached to an element
+to signal an intention that in that element,
+white space should be preserved by applications.
+In valid documents, this attribute, like any other, must be
+<termref def="dt-attdecl">declared</termref> if it is used.
+When declared, it must be given as an
+<termref def='dt-enumerated'>enumerated type</termref> whose only
+possible values are "<code>default</code>" and "<code>preserve</code>".
+For example:<eg><![CDATA[ <!ATTLIST poem xml:space (default|preserve) 'preserve'>]]></eg></p>
+<p>The value "<code>default</code>" signals that applications'
+default white-space processing modes are acceptable for this element; the
+value "<code>preserve</code>" indicates the intent that applications preserve
+all the white space.
+This declared intent is considered to apply to all elements within the content
+of the element where it is specified, unless overriden with another instance
+of the <kw>xml:space</kw> attribute.
+</p>
+<p>The <termref def='dt-root'>root element</termref> of any document
+is considered to have signaled no intentions as regards application space
+handling, unless it provides a value for
+this attribute or the attribute is declared with a default value.
+</p>
+
+</div2>
+<div2 id='sec-line-ends'>
+<head>End-of-Line Handling</head>
+<p>XML <termref def='dt-parsedent'>parsed entities</termref> are often stored in
+computer files which, for editing convenience, are organized into lines.
+These lines are typically separated by some combination of the characters
+carriage-return (#xD) and line-feed (#xA).</p>
+<p>To simplify the tasks of <termref def='dt-app'>applications</termref>,
+wherever an external parsed entity or the literal entity value
+of an internal parsed entity contains either the literal
+two-character sequence "#xD#xA" or a standalone literal
+#xD, an <termref def='dt-xml-proc'>XML processor</termref> must
+pass to the application the single character #xA.
+(This behavior can
+conveniently be produced by normalizing all
+line breaks to #xA on input, before parsing.)
+</p>
+</div2>
+<div2 id='sec-lang-tag'>
+<head>Language Identification</head>
+<p>In document processing, it is often useful to
+identify the natural or formal language
+in which the content is
+written.
+A special <termref def="dt-attr">attribute</termref> named
+<kw>xml:lang</kw> may be inserted in
+documents to specify the
+language used in the contents and attribute values
+of any element in an XML document.
+In valid documents, this attribute, like any other, must be
+<termref def="dt-attdecl">declared</termref> if it is used.
+The values of the attribute are language identifiers as defined
+by <bibref ref="RFC1766"/>, "Tags for the Identification of Languages":
+<scrap lang='ebnf'>
+<head>Language Identification</head>
+<prod id='NT-LanguageID'><lhs>LanguageID</lhs>
+<rhs><nt def='NT-Langcode'>Langcode</nt>
+('-' <nt def='NT-Subcode'>Subcode</nt>)*</rhs></prod>
+<prod id='NT-Langcode'><lhs>Langcode</lhs>
+<rhs><nt def='NT-ISO639Code'>ISO639Code</nt> |
+<nt def='NT-IanaCode'>IanaCode</nt> |
+<nt def='NT-UserCode'>UserCode</nt></rhs>
+</prod>
+<prod id='NT-ISO639Code'><lhs>ISO639Code</lhs>
+<rhs>([a-z] | [A-Z]) ([a-z] | [A-Z])</rhs></prod>
+<prod id='NT-IanaCode'><lhs>IanaCode</lhs>
+<rhs>('i' | 'I') '-' ([a-z] | [A-Z])+</rhs></prod>
+<prod id='NT-UserCode'><lhs>UserCode</lhs>
+<rhs>('x' | 'X') '-' ([a-z] | [A-Z])+</rhs></prod>
+<prod id='NT-Subcode'><lhs>Subcode</lhs>
+<rhs>([a-z] | [A-Z])+</rhs></prod>
+</scrap>
+The <nt def='NT-Langcode'>Langcode</nt> may be any of the following:
+<ulist>
+<item><p>a two-letter language code as defined by
+<bibref ref="ISO639"/>, "Codes
+for the representation of names of languages"</p></item>
+<item><p>a language identifier registered with the Internet
+Assigned Numbers Authority <bibref ref='IANA'/>; these begin with the
+prefix "<code>i-</code>" (or "<code>I-</code>")</p></item>
+<item><p>a language identifier assigned by the user, or agreed on
+between parties in private use; these must begin with the
+prefix "<code>x-</code>" or "<code>X-</code>" in order to ensure that they do not conflict
+with names later standardized or registered with IANA</p></item>
+</ulist></p>
+<p>There may be any number of <nt def='NT-Subcode'>Subcode</nt> segments; if
+the first
+subcode segment exists and the Subcode consists of two
+letters, then it must be a country code from
+<bibref ref="ISO3166"/>, "Codes
+for the representation of names of countries."
+If the first
+subcode consists of more than two letters, it must be
+a subcode for the language in question registered with IANA,
+unless the <nt def='NT-Langcode'>Langcode</nt> begins with the prefix
+"<code>x-</code>" or
+"<code>X-</code>". </p>
+<p>It is customary to give the language code in lower case, and
+the country code (if any) in upper case.
+Note that these values, unlike other names in XML documents,
+are case insensitive.</p>
+<p>For example:
+<eg><![CDATA[<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
+<p xml:lang="en-GB">What colour is it?</p>
+<p xml:lang="en-US">What color is it?</p>
+<sp who="Faust" desc='leise' xml:lang="de">
+ <l>Habe nun, ach! Philosophie,</l>
+ <l>Juristerei, und Medizin</l>
+ <l>und leider auch Theologie</l>
+ <l>durchaus studiert mit heißem Bemüh'n.</l>
+ </sp>]]></eg></p>
+<!--<p>The xml:lang value is considered to apply both to the contents of an
+element and
+(unless otherwise via attribute default values) to the
+values of all of its attributes with free-text (CDATA) values. -->
+<p>The intent declared with <kw>xml:lang</kw> is considered to apply to
+all attributes and content of the element where it is specified,
+unless overridden with an instance of <kw>xml:lang</kw>
+on another element within that content.</p>
+<!--
+If no
+value is specified for xml:lang on an element, and no default value is
+defined for it in the DTD, then the xml:lang attribute of any element
+takes the same value it has in the parent element, if any. The two
+technical terms in the following example both have the same effective
+value for xml:lang:
+
+ <p xml:lang="en">Here the keywords are
+ <term xml:lang="en">shift</term> and
+ <term>reduce</term>. ...</p>
+
+The application, not the XML processor, is responsible for this '
+inheritance' of attribute values.
+-->
+<p>A simple declaration for <kw>xml:lang</kw> might take
+the form
+<eg>xml:lang NMTOKEN #IMPLIED</eg>
+but specific default values may also be given, if appropriate. In a
+collection of French poems for English students, with glosses and
+notes in English, the xml:lang attribute might be declared this way:
+<eg><![CDATA[ <!ATTLIST poem xml:lang NMTOKEN 'fr'>
+ <!ATTLIST gloss xml:lang NMTOKEN 'en'>
+ <!ATTLIST note xml:lang NMTOKEN 'en'>]]></eg>
+</p>
+
+</div2>
+</div1>
+<!-- &Elements; -->
+
+<div1 id='sec-logical-struct'>
+<head>Logical Structures</head>
+
+<p><termdef id="dt-element" term="Element">Each <termref
+def="dt-xml-doc">XML document</termref> contains one or more
+<term>elements</term>, the boundaries of which are
+either delimited by <termref def="dt-stag">start-tags</termref>
+and <termref def="dt-etag">end-tags</termref>, or, for <termref
+def="dt-empty">empty</termref> elements, by an <termref
+def="dt-eetag">empty-element tag</termref>. Each element has a type,
+identified by name, sometimes called its "generic
+identifier" (GI), and may have a set of
+attribute specifications.</termdef> Each attribute specification
+has a <termref
+def="dt-attrname">name</termref> and a <termref
+def="dt-attrval">value</termref>.
+</p>
+<scrap lang='ebnf'><head>Element</head>
+<prod id='NT-element'><lhs>element</lhs>
+<rhs><nt def='NT-EmptyElemTag'>EmptyElemTag</nt></rhs>
+<rhs>| <nt def='NT-STag'>STag</nt> <nt def='NT-content'>content</nt>
+<nt def='NT-ETag'>ETag</nt></rhs>
+<wfc def='GIMatch'/>
+<vc def='elementvalid'/>
+</prod>
+</scrap>
+<p>This specification does not constrain the semantics, use, or (beyond
+syntax) names of the element types and attributes, except that names
+beginning with a match to <code>(('X'|'x')('M'|'m')('L'|'l'))</code>
+are reserved for standardization in this or future versions of this
+specification.
+</p>
+<wfcnote id='GIMatch'>
+<head>Element Type Match</head>
+<p>
+The <nt def='NT-Name'>Name</nt> in an element's end-tag must match
+the element type in
+the start-tag.
+</p>
+</wfcnote>
+<vcnote id='elementvalid'>
+<head>Element Valid</head>
+<p>An element is
+valid if
+there is a declaration matching
+<nt def='NT-elementdecl'>elementdecl</nt> where the
+<nt def='NT-Name'>Name</nt> matches the element type, and
+one of the following holds:</p>
+<olist>
+<item><p>The declaration matches <kw>EMPTY</kw> and the element has no
+<termref def='dt-content'>content</termref>.</p></item>
+<item><p>The declaration matches <nt def='NT-children'>children</nt> and
+the sequence of
+<termref def="dt-parentchild">child elements</termref>
+belongs to the language generated by the regular expression in
+the content model, with optional white space (characters
+matching the nonterminal <nt def='NT-S'>S</nt>) between each pair
+of child elements.</p></item>
+<item><p>The declaration matches <nt def='NT-Mixed'>Mixed</nt> and
+the content consists of <termref def='dt-chardata'>character
+data</termref> and <termref def='dt-parentchild'>child elements</termref>
+whose types match names in the content model.</p></item>
+<item><p>The declaration matches <kw>ANY</kw>, and the types
+of any <termref def='dt-parentchild'>child elements</termref> have
+been declared.</p></item>
+</olist>
+</vcnote>
+
+<div2 id='sec-starttags'>
+<head>Start-Tags, End-Tags, and Empty-Element Tags</head>
+
+<p><termdef id="dt-stag" term="Start-Tag">The beginning of every
+non-empty XML element is marked by a <term>start-tag</term>.
+<scrap lang='ebnf'>
+<head>Start-tag</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id='NT-STag'><lhs>STag</lhs>
+<rhs>'&lt;' <nt def='NT-Name'>Name</nt>
+(<nt def='NT-S'>S</nt> <nt def='NT-Attribute'>Attribute</nt>)*
+<nt def='NT-S'>S</nt>? '>'</rhs>
+<wfc def="uniqattspec"/>
+</prod>
+<prod id='NT-Attribute'><lhs>Attribute</lhs>
+<rhs><nt def='NT-Name'>Name</nt> <nt def='NT-Eq'>Eq</nt>
+<nt def='NT-AttValue'>AttValue</nt></rhs>
+<vc def='ValueType'/>
+<wfc def='NoExternalRefs'/>
+<wfc def='CleanAttrVals'/></prod>
+</prodgroup>
+</scrap>
+The <nt def='NT-Name'>Name</nt> in
+the start- and end-tags gives the
+element's <term>type</term>.</termdef>
+<termdef id="dt-attr" term="Attribute">
+The <nt def='NT-Name'>Name</nt>-<nt def='NT-AttValue'>AttValue</nt> pairs are
+referred to as
+the <term>attribute specifications</term> of the element</termdef>,
+<termdef id="dt-attrname" term="Attribute Name">with the
+<nt def='NT-Name'>Name</nt> in each pair
+referred to as the <term>attribute name</term></termdef> and
+<termdef id="dt-attrval" term="Attribute Value">the content of the
+<nt def='NT-AttValue'>AttValue</nt> (the text between the
+<code>'</code> or <code>"</code> delimiters)
+as the <term>attribute value</term>.</termdef>
+</p>
+<wfcnote id='uniqattspec'>
+<head>Unique Att Spec</head>
+<p>
+No attribute name may appear more than once in the same start-tag
+or empty-element tag.
+</p>
+</wfcnote>
+<vcnote id='ValueType'>
+<head>Attribute Value Type</head>
+<p>
+The attribute must have been declared; the value must be of the type
+declared for it.
+(For attribute types, see <specref ref='attdecls'/>.)
+</p>
+</vcnote>
+<wfcnote id='NoExternalRefs'>
+<head>No External Entity References</head>
+<p>
+Attribute values cannot contain direct or indirect entity references
+to external entities.
+</p>
+</wfcnote>
+<wfcnote id='CleanAttrVals'>
+<head>No <code>&lt;</code> in Attribute Values</head>
+<p>The <termref def='dt-repltext'>replacement text</termref> of any entity
+referred to directly or indirectly in an attribute
+value (other than "<code>&amp;lt;</code>") must not contain
+a <code>&lt;</code>.
+</p></wfcnote>
+<p>An example of a start-tag:
+<eg>&lt;termdef id="dt-dog" term="dog"></eg></p>
+<p><termdef id="dt-etag" term="End Tag">The end of every element
+that begins with a start-tag must
+be marked by an <term>end-tag</term>
+containing a name that echoes the element's type as given in the
+start-tag:
+<scrap lang='ebnf'>
+<head>End-tag</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id='NT-ETag'><lhs>ETag</lhs>
+<rhs>'&lt;/' <nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt>? '>'</rhs></prod>
+</prodgroup>
+</scrap>
+</termdef></p>
+<p>An example of an end-tag:<eg>&lt;/termdef></eg></p>
+<p><termdef id="dt-content" term="Content">The
+<termref def='dt-text'>text</termref> between the start-tag and
+end-tag is called the element's
+<term>content</term>:
+<scrap lang='ebnf'>
+<head>Content of Elements</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id='NT-content'><lhs>content</lhs>
+<rhs>(<nt def='NT-element'>element</nt> | <nt def='NT-CharData'>CharData</nt>
+| <nt def='NT-Reference'>Reference</nt> | <nt def='NT-CDSect'>CDSect</nt>
+| <nt def='NT-PI'>PI</nt> | <nt def='NT-Comment'>Comment</nt>)*</rhs>
+</prod>
+</prodgroup>
+</scrap>
+</termdef></p>
+<p><termdef id="dt-empty" term="Empty">If an element is <term>empty</term>,
+it must be represented either by a start-tag immediately followed
+by an end-tag or by an empty-element tag.</termdef>
+<termdef id="dt-eetag" term="empty-element tag">An
+<term>empty-element tag</term> takes a special form:
+<scrap lang='ebnf'>
+<head>Tags for Empty Elements</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id='NT-EmptyElemTag'><lhs>EmptyElemTag</lhs>
+<rhs>'&lt;' <nt def='NT-Name'>Name</nt> (<nt def='NT-S'>S</nt>
+<nt def='NT-Attribute'>Attribute</nt>)* <nt def='NT-S'>S</nt>?
+'/&gt;'</rhs>
+<wfc def="uniqattspec"/>
+</prod>
+</prodgroup>
+</scrap>
+</termdef></p>
+<p>Empty-element tags may be used for any element which has no
+content, whether or not it is declared using the keyword
+<kw>EMPTY</kw>.
+<termref def='dt-interop'>For interoperability</termref>, the empty-element
+tag must be used, and can only be used, for elements which are
+<termref def='dt-eldecl'>declared</termref> <kw>EMPTY</kw>.</p>
+<p>Examples of empty elements:
+<eg>&lt;IMG align="left"
+ src="http://www.w3.org/Icons/WWW/w3c_home" />
+&lt;br>&lt;/br>
+&lt;br/></eg></p>
+</div2>
+
+<div2 id='elemdecls'>
+<head>Element Type Declarations</head>
+
+<p>The <termref def="dt-element">element</termref> structure of an
+<termref def="dt-xml-doc">XML document</termref> may, for
+<termref def="dt-valid">validation</termref> purposes,
+be constrained
+using element type and attribute-list declarations.
+An element type declaration constrains the element's
+<termref def="dt-content">content</termref>.
+</p>
+
+<p>Element type declarations often constrain which element types can
+appear as <termref def="dt-parentchild">children</termref> of the element.
+At user option, an XML processor may issue a warning
+when a declaration mentions an element type for which no declaration
+is provided, but this is not an error.</p>
+<p><termdef id="dt-eldecl" term="Element Type declaration">An <term>element
+type declaration</term> takes the form:
+<scrap lang='ebnf'>
+<head>Element Type Declaration</head>
+<prodgroup pcw2="5.5" pcw4="18" pcw5="9">
+<prod id='NT-elementdecl'><lhs>elementdecl</lhs>
+<rhs>'&lt;!ELEMENT' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt>
+<nt def='NT-contentspec'>contentspec</nt>
+<nt def='NT-S'>S</nt>? '>'</rhs>
+<vc def='EDUnique'/></prod>
+<prod id='NT-contentspec'><lhs>contentspec</lhs>
+<rhs>'EMPTY'
+| 'ANY'
+| <nt def='NT-Mixed'>Mixed</nt>
+| <nt def='NT-children'>children</nt>
+</rhs>
+</prod>
+</prodgroup>
+</scrap>
+where the <nt def='NT-Name'>Name</nt> gives the element type
+being declared.</termdef>
+</p>
+
+<vcnote id='EDUnique'>
+<head>Unique Element Type Declaration</head>
+<p>
+No element type may be declared more than once.
+</p>
+</vcnote>
+
+<p>Examples of element type declarations:
+<eg>&lt;!ELEMENT br EMPTY>
+&lt;!ELEMENT p (#PCDATA|emph)* >
+&lt;!ELEMENT %name.para; %content.para; >
+&lt;!ELEMENT container ANY></eg></p>
+
+<div3 id='sec-element-content'>
+<head>Element Content</head>
+
+<p><termdef id='dt-elemcontent' term='Element content'>An element <termref
+def="dt-stag">type</termref> has
+<term>element content</term> when elements of that
+type must contain only <termref def='dt-parentchild'>child</termref>
+elements (no character data), optionally separated by
+white space (characters matching the nonterminal
+<nt def='NT-S'>S</nt>).
+</termdef>
+In this case, the
+constraint includes a content model, a simple grammar governing
+the allowed types of the child
+elements and the order in which they are allowed to appear.
+The grammar is built on
+content particles (<nt def='NT-cp'>cp</nt>s), which consist of names,
+choice lists of content particles, or
+sequence lists of content particles:
+<scrap lang='ebnf'>
+<head>Element-content Models</head>
+<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
+<prod id='NT-children'><lhs>children</lhs>
+<rhs>(<nt def='NT-choice'>choice</nt>
+| <nt def='NT-seq'>seq</nt>)
+('?' | '*' | '+')?</rhs></prod>
+<prod id='NT-cp'><lhs>cp</lhs>
+<rhs>(<nt def='NT-Name'>Name</nt>
+| <nt def='NT-choice'>choice</nt>
+| <nt def='NT-seq'>seq</nt>)
+('?' | '*' | '+')?</rhs></prod>
+<prod id='NT-choice'><lhs>choice</lhs>
+<rhs>'(' <nt def='NT-S'>S</nt>? cp
+( <nt def='NT-S'>S</nt>? '|' <nt def='NT-S'>S</nt>? <nt def='NT-cp'>cp</nt> )*
+<nt def='NT-S'>S</nt>? ')'</rhs>
+<vc def='vc-PEinGroup'/></prod>
+<prod id='NT-seq'><lhs>seq</lhs>
+<rhs>'(' <nt def='NT-S'>S</nt>? cp
+( <nt def='NT-S'>S</nt>? ',' <nt def='NT-S'>S</nt>? <nt def='NT-cp'>cp</nt> )*
+<nt def='NT-S'>S</nt>? ')'</rhs>
+<vc def='vc-PEinGroup'/></prod>
+
+</prodgroup>
+</scrap>
+where each <nt def='NT-Name'>Name</nt> is the type of an element which may
+appear as a <termref def="dt-parentchild">child</termref>.
+Any content
+particle in a choice list may appear in the <termref
+def="dt-elemcontent">element content</termref> at the location where
+the choice list appears in the grammar;
+content particles occurring in a sequence list must each
+appear in the <termref def="dt-elemcontent">element content</termref> in the
+order given in the list.
+The optional character following a name or list governs
+whether the element or the content particles in the list may occur one
+or more (<code>+</code>), zero or more (<code>*</code>), or zero or
+one times (<code>?</code>).
+The absence of such an operator means that the element or content particle
+must appear exactly once.
+This syntax
+and meaning are identical to those used in the productions in this
+specification.</p>
+<p>
+The content of an element matches a content model if and only if it is
+possible to trace out a path through the content model, obeying the
+sequence, choice, and repetition operators and matching each element in
+the content against an element type in the content model. <termref
+def='dt-compat'>For compatibility</termref>, it is an error
+if an element in the document can
+match more than one occurrence of an element type in the content model.
+For more information, see <specref ref="determinism"/>.
+<!-- appendix <specref ref="determinism"/>. -->
+<!-- appendix on deterministic content models. -->
+</p>
+<vcnote id='vc-PEinGroup'>
+<head>Proper Group/PE Nesting</head>
+<p>Parameter-entity
+<termref def='dt-repltext'>replacement text</termref> must be properly nested
+with parenthetized groups.
+That is to say, if either of the opening or closing parentheses
+in a <nt def='NT-choice'>choice</nt>, <nt def='NT-seq'>seq</nt>, or
+<nt def='NT-Mixed'>Mixed</nt> construct
+is contained in the replacement text for a
+<termref def='dt-PERef'>parameter entity</termref>,
+both must be contained in the same replacement text.</p>
+<p><termref def='dt-interop'>For interoperability</termref>,
+if a parameter-entity reference appears in a
+<nt def='NT-choice'>choice</nt>, <nt def='NT-seq'>seq</nt>, or
+<nt def='NT-Mixed'>Mixed</nt> construct, its replacement text
+should not be empty, and
+neither the first nor last non-blank
+character of the replacement text should be a connector
+(<code>|</code> or <code>,</code>).
+</p>
+</vcnote>
+<p>Examples of element-content models:
+<eg>&lt;!ELEMENT spec (front, body, back?)>
+&lt;!ELEMENT div1 (head, (p | list | note)*, div2*)>
+&lt;!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*></eg></p>
+</div3>
+
+<div3 id='sec-mixed-content'>
+<head>Mixed Content</head>
+
+<p><termdef id='dt-mixed' term='Mixed Content'>An element
+<termref def='dt-stag'>type</termref> has
+<term>mixed content</term> when elements of that type may contain
+character data, optionally interspersed with
+<termref def="dt-parentchild">child</termref> elements.</termdef>
+In this case, the types of the child elements
+may be constrained, but not their order or their number of occurrences:
+<scrap lang='ebnf'>
+<head>Mixed-content Declaration</head>
+<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
+<prod id='NT-Mixed'><lhs>Mixed</lhs>
+<rhs>'(' <nt def='NT-S'>S</nt>?
+'#PCDATA'
+(<nt def='NT-S'>S</nt>?
+'|'
+<nt def='NT-S'>S</nt>?
+<nt def='NT-Name'>Name</nt>)*
+<nt def='NT-S'>S</nt>?
+')*' </rhs>
+<rhs>| '(' <nt def='NT-S'>S</nt>? '#PCDATA' <nt def='NT-S'>S</nt>? ')'
+</rhs><vc def='vc-PEinGroup'/>
+<vc def='vc-MixedChildrenUnique'/>
+</prod>
+
+</prodgroup>
+</scrap>
+where the <nt def='NT-Name'>Name</nt>s give the types of elements
+that may appear as children.
+</p>
+<vcnote id='vc-MixedChildrenUnique'>
+<head>No Duplicate Types</head>
+<p>The same name must not appear more than once in a single mixed-content
+declaration.
+</p></vcnote>
+<p>Examples of mixed content declarations:
+<eg>&lt;!ELEMENT p (#PCDATA|a|ul|b|i|em)*>
+&lt;!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* >
+&lt;!ELEMENT b (#PCDATA)></eg></p>
+</div3>
+</div2>
+
+<div2 id='attdecls'>
+<head>Attribute-List Declarations</head>
+
+<p><termref def="dt-attr">Attributes</termref> are used to associate
+name-value pairs with <termref def="dt-element">elements</termref>.
+Attribute specifications may appear only within <termref
+def="dt-stag">start-tags</termref>
+and <termref def="dt-eetag">empty-element tags</termref>;
+thus, the productions used to
+recognize them appear in <specref ref='sec-starttags'/>.
+Attribute-list
+declarations may be used:
+<ulist>
+<item><p>To define the set of attributes pertaining to a given
+element type.</p></item>
+<item><p>To establish type constraints for these
+attributes.</p></item>
+<item><p>To provide <termref def="dt-default">default values</termref>
+for attributes.</p></item>
+</ulist>
+</p>
+<p><termdef id="dt-attdecl" term="Attribute-List Declaration">
+<term>Attribute-list declarations</term> specify the name, data type, and default
+value (if any) of each attribute associated with a given element type:
+<scrap lang='ebnf'>
+<head>Attribute-list Declaration</head>
+<prod id='NT-AttlistDecl'><lhs>AttlistDecl</lhs>
+<rhs>'&lt;!ATTLIST' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt>
+<nt def='NT-AttDef'>AttDef</nt>*
+<nt def='NT-S'>S</nt>? '&gt;'</rhs>
+</prod>
+<prod id='NT-AttDef'><lhs>AttDef</lhs>
+<rhs><nt def='NT-S'>S</nt> <nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt> <nt def='NT-AttType'>AttType</nt>
+<nt def='NT-S'>S</nt> <nt def='NT-DefaultDecl'>DefaultDecl</nt></rhs>
+</prod>
+</scrap>
+The <nt def="NT-Name">Name</nt> in the
+<nt def='NT-AttlistDecl'>AttlistDecl</nt> rule is the type of an element. At
+user option, an XML processor may issue a warning if attributes are
+declared for an element type not itself declared, but this is not an
+error. The <nt def='NT-Name'>Name</nt> in the
+<nt def='NT-AttDef'>AttDef</nt> rule is
+the name of the attribute.</termdef></p>
+<p>
+When more than one <nt def='NT-AttlistDecl'>AttlistDecl</nt> is provided for a
+given element type, the contents of all those provided are merged. When
+more than one definition is provided for the same attribute of a
+given element type, the first declaration is binding and later
+declarations are ignored.
+<termref def='dt-interop'>For interoperability,</termref> writers of DTDs
+may choose to provide at most one attribute-list declaration
+for a given element type, at most one attribute definition
+for a given attribute name, and at least one attribute definition
+in each attribute-list declaration.
+For interoperability, an XML processor may at user option
+issue a warning when more than one attribute-list declaration is
+provided for a given element type, or more than one attribute definition
+is provided
+for a given attribute, but this is not an error.
+</p>
+
+<div3 id='sec-attribute-types'>
+<head>Attribute Types</head>
+
+<p>XML attribute types are of three kinds: a string type, a
+set of tokenized types, and enumerated types. The string type may take
+any literal string as a value; the tokenized types have varying lexical
+and semantic constraints, as noted:
+<scrap lang='ebnf'>
+<head>Attribute Types</head>
+<prodgroup pcw4="14" pcw5="11.5">
+<prod id='NT-AttType'><lhs>AttType</lhs>
+<rhs><nt def='NT-StringType'>StringType</nt>
+| <nt def='NT-TokenizedType'>TokenizedType</nt>
+| <nt def='NT-EnumeratedType'>EnumeratedType</nt>
+</rhs>
+</prod>
+<prod id='NT-StringType'><lhs>StringType</lhs>
+<rhs>'CDATA'</rhs>
+</prod>
+<prod id='NT-TokenizedType'><lhs>TokenizedType</lhs>
+<rhs>'ID'</rhs>
+<vc def='id'/>
+<vc def='one-id-per-el'/>
+<vc def='id-default'/>
+<rhs>| 'IDREF'</rhs>
+<vc def='idref'/>
+<rhs>| 'IDREFS'</rhs>
+<vc def='idref'/>
+<rhs>| 'ENTITY'</rhs>
+<vc def='entname'/>
+<rhs>| 'ENTITIES'</rhs>
+<vc def='entname'/>
+<rhs>| 'NMTOKEN'</rhs>
+<vc def='nmtok'/>
+<rhs>| 'NMTOKENS'</rhs>
+<vc def='nmtok'/></prod>
+</prodgroup>
+</scrap>
+</p>
+<vcnote id='id' >
+<head>ID</head>
+<p>
+Values of type <kw>ID</kw> must match the
+<nt def='NT-Name'>Name</nt> production.
+A name must not appear more than once in
+an XML document as a value of this type; i.e., ID values must uniquely
+identify the elements which bear them.
+</p>
+</vcnote>
+<vcnote id='one-id-per-el'>
+<head>One ID per Element Type</head>
+<p>No element type may have more than one ID attribute specified.</p>
+</vcnote>
+<vcnote id='id-default'>
+<head>ID Attribute Default</head>
+<p>An ID attribute must have a declared default of <kw>#IMPLIED</kw> or
+<kw>#REQUIRED</kw>.</p>
+</vcnote>
+<vcnote id='idref'>
+<head>IDREF</head>
+<p>
+Values of type <kw>IDREF</kw> must match
+the <nt def="NT-Name">Name</nt> production, and
+values of type <kw>IDREFS</kw> must match
+<nt def="NT-Names">Names</nt>;
+each <nt def='NT-Name'>Name</nt> must match the value of an ID attribute on
+some element in the XML document; i.e. <kw>IDREF</kw> values must
+match the value of some ID attribute.
+</p>
+</vcnote>
+<vcnote id='entname'>
+<head>Entity Name</head>
+<p>
+Values of type <kw>ENTITY</kw>
+must match the <nt def="NT-Name">Name</nt> production,
+values of type <kw>ENTITIES</kw> must match
+<nt def="NT-Names">Names</nt>;
+each <nt def="NT-Name">Name</nt> must
+match the
+name of an <termref def="dt-unparsed">unparsed entity</termref> declared in the
+<termref def="dt-doctype">DTD</termref>.
+</p>
+</vcnote>
+<vcnote id='nmtok'>
+<head>Name Token</head>
+<p>
+Values of type <kw>NMTOKEN</kw> must match the
+<nt def="NT-Nmtoken">Nmtoken</nt> production;
+values of type <kw>NMTOKENS</kw> must
+match <termref def="NT-Nmtokens">Nmtokens</termref>.
+</p>
+</vcnote>
+<!-- why?
+<p>The XML processor must normalize attribute values before
+passing them to the application, as described in
+<specref ref="AVNormalize"/>.</p>-->
+<p><termdef id='dt-enumerated' term='Enumerated Attribute
+Values'><term>Enumerated attributes</term> can take one
+of a list of values provided in the declaration</termdef>. There are two
+kinds of enumerated types:
+<scrap lang='ebnf'>
+<head>Enumerated Attribute Types</head>
+<prod id='NT-EnumeratedType'><lhs>EnumeratedType</lhs>
+<rhs><nt def='NT-NotationType'>NotationType</nt>
+| <nt def='NT-Enumeration'>Enumeration</nt>
+</rhs></prod>
+<prod id='NT-NotationType'><lhs>NotationType</lhs>
+<rhs>'NOTATION'
+<nt def='NT-S'>S</nt>
+'('
+<nt def='NT-S'>S</nt>?
+<nt def='NT-Name'>Name</nt>
+(<nt def='NT-S'>S</nt>? '|' <nt def='NT-S'>S</nt>?
+<nt def='NT-Name'>Name</nt>)*
+<nt def='NT-S'>S</nt>? ')'
+</rhs>
+<vc def='notatn' /></prod>
+<prod id='NT-Enumeration'><lhs>Enumeration</lhs>
+<rhs>'(' <nt def='NT-S'>S</nt>?
+<nt def='NT-Nmtoken'>Nmtoken</nt>
+(<nt def='NT-S'>S</nt>? '|'
+<nt def='NT-S'>S</nt>?
+<nt def='NT-Nmtoken'>Nmtoken</nt>)*
+<nt def='NT-S'>S</nt>?
+')'</rhs>
+<vc def='enum'/></prod>
+</scrap>
+A <kw>NOTATION</kw> attribute identifies a
+<termref def='dt-notation'>notation</termref>, declared in the
+DTD with associated system and/or public identifiers, to
+be used in interpreting the element to which the attribute
+is attached.
+</p>
+
+<vcnote id='notatn'>
+<head>Notation Attributes</head>
+<p>
+Values of this type must match
+one of the <titleref href='Notations'>notation</titleref> names included in
+the declaration; all notation names in the declaration must
+be declared.
+</p>
+</vcnote>
+<vcnote id='enum'>
+<head>Enumeration</head>
+<p>
+Values of this type
+must match one of the <nt def='NT-Nmtoken'>Nmtoken</nt> tokens in the
+declaration.
+</p>
+</vcnote>
+<p><termref def='dt-interop'>For interoperability,</termref> the same
+<nt def='NT-Nmtoken'>Nmtoken</nt> should not occur more than once in the
+enumerated attribute types of a single element type.
+</p>
+</div3>
+
+<div3 id='sec-attr-defaults'>
+<head>Attribute Defaults</head>
+
+<p>An <termref def="dt-attdecl">attribute declaration</termref> provides
+information on whether
+the attribute's presence is required, and if not, how an XML processor should
+react if a declared attribute is absent in a document.
+<scrap lang='ebnf'>
+<head>Attribute Defaults</head>
+<prodgroup pcw4="14" pcw5="11.5">
+<prod id='NT-DefaultDecl'><lhs>DefaultDecl</lhs>
+<rhs>'#REQUIRED'
+|&nbsp;'#IMPLIED' </rhs>
+<rhs>| (('#FIXED' S)? <nt def='NT-AttValue'>AttValue</nt>)</rhs>
+<vc def='RequiredAttr'/>
+<vc def='defattrvalid'/>
+<wfc def="CleanAttrVals"/>
+<vc def='FixedAttr'/>
+</prod>
+</prodgroup>
+</scrap>
+
+</p>
+<p>In an attribute declaration, <kw>#REQUIRED</kw> means that the
+attribute must always be provided, <kw>#IMPLIED</kw> that no default
+value is provided.
+<!-- not any more!!
+<kw>#IMPLIED</kw> means that if the attribute is omitted
+from an element of this type,
+the XML processor must inform the application
+that no value was specified; no constraint is placed on the behavior
+of the application. -->
+<termdef id="dt-default" term="Attribute Default">If the
+declaration
+is neither <kw>#REQUIRED</kw> nor <kw>#IMPLIED</kw>, then the
+<nt def='NT-AttValue'>AttValue</nt> value contains the declared
+<term>default</term> value; the <kw>#FIXED</kw> keyword states that
+the attribute must always have the default value.
+If a default value
+is declared, when an XML processor encounters an omitted attribute, it
+is to behave as though the attribute were present with
+the declared default value.</termdef></p>
+<vcnote id='RequiredAttr'>
+<head>Required Attribute</head>
+<p>If the default declaration is the keyword <kw>#REQUIRED</kw>, then
+the attribute must be specified for
+all elements of the type in the attribute-list declaration.
+</p></vcnote>
+<vcnote id='defattrvalid'>
+<head>Attribute Default Legal</head>
+<p>
+The declared
+default value must meet the lexical constraints of the declared attribute type.
+</p>
+</vcnote>
+<vcnote id='FixedAttr'>
+<head>Fixed Attribute Default</head>
+<p>If an attribute has a default value declared with the
+<kw>#FIXED</kw> keyword, instances of that attribute must
+match the default value.
+</p></vcnote>
+
+<p>Examples of attribute-list declarations:
+<eg>&lt;!ATTLIST termdef
+ id ID #REQUIRED
+ name CDATA #IMPLIED>
+&lt;!ATTLIST list
+ type (bullets|ordered|glossary) "ordered">
+&lt;!ATTLIST form
+ method CDATA #FIXED "POST"></eg></p>
+</div3>
+<div3 id='AVNormalize'>
+<head>Attribute-Value Normalization</head>
+<p>Before the value of an attribute is passed to the application
+or checked for validity, the
+XML processor must normalize it as follows:
+<ulist>
+<item><p>a character reference is processed by appending the referenced
+character to the attribute value</p></item>
+<item><p>an entity reference is processed by recursively processing the
+replacement text of the entity</p></item>
+<item><p>a whitespace character (#x20, #xD, #xA, #x9) is processed by
+appending #x20 to the normalized value, except that only a single #x20
+is appended for a "#xD#xA" sequence that is part of an external
+parsed entity or the literal entity value of an internal parsed
+entity</p></item>
+<item><p>other characters are processed by appending them to the normalized
+value</p>
+</item></ulist>
+</p>
+<p>If the declared value is not CDATA, then the XML processor must
+further process the normalized attribute value by discarding any
+leading and trailing space (#x20) characters, and by replacing
+sequences of space (#x20) characters by a single space (#x20)
+character.</p>
+<p>
+All attributes for which no declaration has been read should be treated
+by a non-validating parser as if declared
+<kw>CDATA</kw>.
+</p>
+</div3>
+</div2>
+<div2 id='sec-condition-sect'>
+<head>Conditional Sections</head>
+<p><termdef id='dt-cond-section' term='conditional section'>
+<term>Conditional sections</term> are portions of the
+<termref def='dt-doctype'>document type declaration external subset</termref>
+which are
+included in, or excluded from, the logical structure of the DTD based on
+the keyword which governs them.</termdef>
+<scrap lang='ebnf'>
+<head>Conditional Section</head>
+<prodgroup pcw2="9" pcw4="14.5">
+<prod id='NT-conditionalSect'><lhs>conditionalSect</lhs>
+<rhs><nt def='NT-includeSect'>includeSect</nt>
+| <nt def='NT-ignoreSect'>ignoreSect</nt>
+</rhs>
+</prod>
+<prod id='NT-includeSect'><lhs>includeSect</lhs>
+<rhs>'&lt;![' S? 'INCLUDE' S? '['
+
+<nt def="NT-extSubsetDecl">extSubsetDecl</nt>
+']]&gt;'
+</rhs>
+</prod>
+<prod id='NT-ignoreSect'><lhs>ignoreSect</lhs>
+<rhs>'&lt;![' S? 'IGNORE' S? '['
+<nt def="NT-ignoreSectContents">ignoreSectContents</nt>*
+']]&gt;'</rhs>
+</prod>
+
+<prod id='NT-ignoreSectContents'><lhs>ignoreSectContents</lhs>
+<rhs><nt def='NT-Ignore'>Ignore</nt>
+('&lt;![' <nt def='NT-ignoreSectContents'>ignoreSectContents</nt> ']]&gt;'
+<nt def='NT-Ignore'>Ignore</nt>)*</rhs></prod>
+<prod id='NT-Ignore'><lhs>Ignore</lhs>
+<rhs><nt def='NT-Char'>Char</nt>* -
+(<nt def='NT-Char'>Char</nt>* ('&lt;![' | ']]&gt;')
+<nt def='NT-Char'>Char</nt>*)
+</rhs></prod>
+
+</prodgroup>
+</scrap>
+</p>
+<p>Like the internal and external DTD subsets, a conditional section
+may contain one or more complete declarations,
+comments, processing instructions,
+or nested conditional sections, intermingled with white space.
+</p>
+<p>If the keyword of the
+conditional section is <kw>INCLUDE</kw>, then the contents of the conditional
+section are part of the DTD.
+If the keyword of the conditional
+section is <kw>IGNORE</kw>, then the contents of the conditional section are
+not logically part of the DTD.
+Note that for reliable parsing, the contents of even ignored
+conditional sections must be read in order to
+detect nested conditional sections and ensure that the end of the
+outermost (ignored) conditional section is properly detected.
+If a conditional section with a
+keyword of <kw>INCLUDE</kw> occurs within a larger conditional
+section with a keyword of <kw>IGNORE</kw>, both the outer and the
+inner conditional sections are ignored.</p>
+<p>If the keyword of the conditional section is a
+parameter-entity reference, the parameter entity must be replaced by its
+content before the processor decides whether to
+include or ignore the conditional section.</p>
+<p>An example:
+<eg>&lt;!ENTITY % draft 'INCLUDE' >
+&lt;!ENTITY % final 'IGNORE' >
+
+&lt;![%draft;[
+&lt;!ELEMENT book (comments*, title, body, supplements?)>
+]]&gt;
+&lt;![%final;[
+&lt;!ELEMENT book (title, body, supplements?)>
+]]&gt;
+</eg>
+</p>
+</div2>
+
+
+<!--
+<div2 id='sec-pass-to-app'>
+<head>XML Processor Treatment of Logical Structure</head>
+<p>When an XML processor encounters a start-tag, it must make
+at least the following information available to the application:
+<ulist>
+<item>
+<p>the element type's generic identifier</p>
+</item>
+<item>
+<p>the names of attributes known to apply to this element type
+(validating processors must make available names of all attributes
+declared for the element type; non-validating processors must
+make available at least the names of the attributes for which
+values are specified.
+</p>
+</item>
+</ulist>
+</p>
+</div2>
+-->
+
+</div1>
+<!-- &Entities; -->
+
+<div1 id='sec-physical-struct'>
+<head>Physical Structures</head>
+
+<p><termdef id="dt-entity" term="Entity">An XML document may consist
+of one or many storage units. These are called
+<term>entities</term>; they all have <term>content</term> and are all
+(except for the document entity, see below, and
+the <termref def='dt-doctype'>external DTD subset</termref>)
+identified by <term>name</term>.
+</termdef>
+Each XML document has one entity
+called the <termref def="dt-docent">document entity</termref>, which serves
+as the starting point for the <termref def="dt-xml-proc">XML
+processor</termref> and may contain the whole document.</p>
+<p>Entities may be either parsed or unparsed.
+<termdef id="dt-parsedent" term="Text Entity">A <term>parsed entity's</term>
+contents are referred to as its
+<termref def='dt-repltext'>replacement text</termref>;
+this <termref def="dt-text">text</termref> is considered an
+integral part of the document.</termdef></p>
+
+<p><termdef id="dt-unparsed" term="Unparsed Entity">An
+<term>unparsed entity</term>
+is a resource whose contents may or may not be
+<termref def='dt-text'>text</termref>, and if text, may not be XML.
+Each unparsed entity
+has an associated <termref
+def="dt-notation">notation</termref>, identified by name.
+Beyond a requirement
+that an XML processor make the identifiers for the entity and
+notation available to the application,
+XML places no constraints on the contents of unparsed entities.</termdef>
+</p>
+<p>
+Parsed entities are invoked by name using entity references;
+unparsed entities by name, given in the value of <kw>ENTITY</kw>
+or <kw>ENTITIES</kw>
+attributes.</p>
+<p><termdef id='gen-entity' term='general entity'
+><term>General entities</term>
+are entities for use within the document content.
+In this specification, general entities are sometimes referred
+to with the unqualified term <emph>entity</emph> when this leads
+to no ambiguity.</termdef>
+<termdef id='dt-PE' term='Parameter entity'>Parameter entities
+are parsed entities for use within the DTD.</termdef>
+These two types of entities use different forms of reference and
+are recognized in different contexts.
+Furthermore, they occupy different namespaces; a parameter entity and
+a general entity with the same name are two distinct entities.
+</p>
+
+<div2 id='sec-references'>
+<head>Character and Entity References</head>
+<p><termdef id="dt-charref" term="Character Reference">
+A <term>character reference</term> refers to a specific character in the
+ISO/IEC 10646 character set, for example one not directly accessible from
+available input devices.
+<scrap lang='ebnf'>
+<head>Character Reference</head>
+<prod id='NT-CharRef'><lhs>CharRef</lhs>
+<rhs>'&amp;#' [0-9]+ ';' </rhs>
+<rhs>| '&hcro;' [0-9a-fA-F]+ ';'</rhs>
+<wfc def="wf-Legalchar"/>
+</prod>
+</scrap>
+<wfcnote id="wf-Legalchar">
+<head>Legal Character</head>
+<p>Characters referred to using character references must
+match the production for
+<termref def="NT-Char">Char</termref>.</p>
+</wfcnote>
+If the character reference begins with "<code>&amp;#x</code>", the digits and
+letters up to the terminating <code>;</code> provide a hexadecimal
+representation of the character's code point in ISO/IEC 10646.
+If it begins just with "<code>&amp;#</code>", the digits up to the terminating
+<code>;</code> provide a decimal representation of the character's
+code point.
+</termdef>
+</p>
+<p><termdef id="dt-entref" term="Entity Reference">An <term>entity
+reference</term> refers to the content of a named entity.</termdef>
+<termdef id='dt-GERef' term='General Entity Reference'>References to
+parsed general entities
+use ampersand (<code>&amp;</code>) and semicolon (<code>;</code>) as
+delimiters.</termdef>
+<termdef id='dt-PERef' term='Parameter-entity reference'>
+<term>Parameter-entity references</term> use percent-sign (<code>%</code>) and
+semicolon
+(<code>;</code>) as delimiters.</termdef>
+</p>
+<scrap lang="ebnf">
+<head>Entity Reference</head>
+<prod id='NT-Reference'><lhs>Reference</lhs>
+<rhs><nt def='NT-EntityRef'>EntityRef</nt>
+| <nt def='NT-CharRef'>CharRef</nt></rhs></prod>
+<prod id='NT-EntityRef'><lhs>EntityRef</lhs>
+<rhs>'&amp;' <nt def='NT-Name'>Name</nt> ';'</rhs>
+<wfc def='wf-entdeclared'/>
+<vc def='vc-entdeclared'/>
+<wfc def='textent'/>
+<wfc def='norecursion'/>
+</prod>
+<prod id='NT-PEReference'><lhs>PEReference</lhs>
+<rhs>'%' <nt def='NT-Name'>Name</nt> ';'</rhs>
+<vc def='vc-entdeclared'/>
+<wfc def='norecursion'/>
+<wfc def='indtd'/>
+</prod>
+</scrap>
+
+<wfcnote id='wf-entdeclared'>
+<head>Entity Declared</head>
+<p>In a document without any DTD, a document with only an internal
+DTD subset which contains no parameter entity references, or a document with
+"<code>standalone='yes'</code>",
+the <nt def='NT-Name'>Name</nt> given in the entity reference must
+<termref def="dt-match">match</termref> that in an
+<titleref href='sec-entity-decl'>entity declaration</titleref>, except that
+well-formed documents need not declare
+any of the following entities: &magicents;.
+The declaration of a parameter entity must precede any reference to it.
+Similarly, the declaration of a general entity must precede any
+reference to it which appears in a default value in an attribute-list
+declaration.</p>
+<p>Note that if entities are declared in the external subset or in
+external parameter entities, a non-validating processor is
+<titleref href='include-if-valid'>not obligated to</titleref> read
+and process their declarations; for such documents, the rule that
+an entity must be declared is a well-formedness constraint only
+if <titleref href='sec-rmd'>standalone='yes'</titleref>.</p>
+</wfcnote>
+<vcnote id="vc-entdeclared">
+<head>Entity Declared</head>
+<p>In a document with an external subset or external parameter
+entities with "<code>standalone='no'</code>",
+the <nt def='NT-Name'>Name</nt> given in the entity reference must <termref
+def="dt-match">match</termref> that in an
+<titleref href='sec-entity-decl'>entity declaration</titleref>.
+For interoperability, valid documents should declare the entities
+&magicents;, in the form
+specified in <specref ref="sec-predefined-ent"/>.
+The declaration of a parameter entity must precede any reference to it.
+Similarly, the declaration of a general entity must precede any
+reference to it which appears in a default value in an attribute-list
+declaration.</p>
+</vcnote>
+<!-- FINAL EDIT: is this duplication too clumsy? -->
+<wfcnote id='textent'>
+<head>Parsed Entity</head>
+<p>
+An entity reference must not contain the name of an <termref
+def="dt-unparsed">unparsed entity</termref>. Unparsed entities may be referred
+to only in <termref def="dt-attrval">attribute values</termref> declared to
+be of type <kw>ENTITY</kw> or <kw>ENTITIES</kw>.
+</p>
+</wfcnote>
+<wfcnote id='norecursion'>
+<head>No Recursion</head>
+<p>
+A parsed entity must not contain a recursive reference to itself,
+either directly or indirectly.
+</p>
+</wfcnote>
+<wfcnote id='indtd'>
+<head>In DTD</head>
+<p>
+Parameter-entity references may only appear in the
+<termref def='dt-doctype'>DTD</termref>.
+</p>
+</wfcnote>
+<p>Examples of character and entity references:
+<eg>Type &lt;key>less-than&lt;/key> (&hcro;3C;) to save options.
+This document was prepared on &amp;docdate; and
+is classified &amp;security-level;.</eg></p>
+<p>Example of a parameter-entity reference:
+<eg><![CDATA[<!-- declare the parameter entity "ISOLat2"... -->
+<!ENTITY % ISOLat2
+ SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
+<!-- ... now reference it. -->
+%ISOLat2;]]></eg></p>
+</div2>
+
+<div2 id='sec-entity-decl'>
+<head>Entity Declarations</head>
+
+<p><termdef id="dt-entdecl" term="entity declaration">
+Entities are declared thus:
+<scrap lang='ebnf'>
+<head>Entity Declaration</head>
+<prodgroup pcw2="5" pcw4="18.5">
+<prod id='NT-EntityDecl'><lhs>EntityDecl</lhs>
+<rhs><nt def="NT-GEDecl">GEDecl</nt><!--</rhs><com>General entities</com>
+<rhs>--> | <nt def="NT-PEDecl">PEDecl</nt></rhs>
+<!--<com>Parameter entities</com>-->
+</prod>
+<prod id='NT-GEDecl'><lhs>GEDecl</lhs>
+<rhs>'&lt;!ENTITY' <nt def='NT-S'>S</nt> <nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt> <nt def='NT-EntityDef'>EntityDef</nt>
+<nt def='NT-S'>S</nt>? '&gt;'</rhs>
+</prod>
+<prod id='NT-PEDecl'><lhs>PEDecl</lhs>
+<rhs>'&lt;!ENTITY' <nt def='NT-S'>S</nt> '%' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt> <nt def='NT-S'>S</nt>
+<nt def='NT-PEDef'>PEDef</nt> <nt def='NT-S'>S</nt>? '&gt;'</rhs>
+<!--<com>Parameter entities</com>-->
+</prod>
+<prod id='NT-EntityDef'><lhs>EntityDef</lhs>
+<rhs><nt def='NT-EntityValue'>EntityValue</nt>
+<!--</rhs>
+<rhs>-->| (<nt def='NT-ExternalID'>ExternalID</nt>
+<nt def='NT-NDataDecl'>NDataDecl</nt>?)</rhs>
+<!-- <nt def='NT-ExternalDef'>ExternalDef</nt></rhs> -->
+</prod>
+<!-- FINAL EDIT: what happened to WFs here? -->
+<prod id='NT-PEDef'><lhs>PEDef</lhs>
+<rhs><nt def='NT-EntityValue'>EntityValue</nt>
+| <nt def='NT-ExternalID'>ExternalID</nt></rhs></prod>
+</prodgroup>
+</scrap>
+The <nt def='NT-Name'>Name</nt> identifies the entity in an
+<termref def="dt-entref">entity reference</termref> or, in the case of an
+unparsed entity, in the value of an <kw>ENTITY</kw> or <kw>ENTITIES</kw>
+attribute.
+If the same entity is declared more than once, the first declaration
+encountered is binding; at user option, an XML processor may issue a
+warning if entities are declared multiple times.</termdef>
+</p>
+
+<div3 id='sec-internal-ent'>
+<head>Internal Entities</head>
+
+<p><termdef id='dt-internent' term="Internal Entity Replacement Text">If
+the entity definition is an
+<nt def='NT-EntityValue'>EntityValue</nt>,
+the defined entity is called an <term>internal entity</term>.
+There is no separate physical
+storage object, and the content of the entity is given in the
+declaration. </termdef>
+Note that some processing of entity and character references in the
+<termref def='dt-litentval'>literal entity value</termref> may be required to
+produce the correct <termref def='dt-repltext'>replacement
+text</termref>: see <specref ref='intern-replacement'/>.
+</p>
+<p>An internal entity is a <termref def="dt-parsedent">parsed
+entity</termref>.</p>
+<p>Example of an internal entity declaration:
+<eg>&lt;!ENTITY Pub-Status "This is a pre-release of the
+ specification."></eg></p>
+</div3>
+
+<div3 id='sec-external-ent'>
+<head>External Entities</head>
+
+<p><termdef id="dt-extent" term="External Entity">If the entity is not
+internal, it is an <term>external
+entity</term>, declared as follows:
+<scrap lang='ebnf'>
+<head>External Entity Declaration</head>
+<!--
+<prod id='NT-ExternalDef'><lhs>ExternalDef</lhs>
+<rhs></prod> -->
+<prod id='NT-ExternalID'><lhs>ExternalID</lhs>
+<rhs>'SYSTEM' <nt def='NT-S'>S</nt>
+<nt def='NT-SystemLiteral'>SystemLiteral</nt></rhs>
+<rhs>| 'PUBLIC' <nt def='NT-S'>S</nt>
+<nt def='NT-PubidLiteral'>PubidLiteral</nt>
+<nt def='NT-S'>S</nt>
+<nt def='NT-SystemLiteral'>SystemLiteral</nt>
+</rhs>
+</prod>
+<prod id='NT-NDataDecl'><lhs>NDataDecl</lhs>
+<rhs><nt def='NT-S'>S</nt> 'NDATA' <nt def='NT-S'>S</nt>
+<nt def='NT-Name'>Name</nt></rhs>
+<vc def='not-declared'/></prod>
+</scrap>
+If the <nt def='NT-NDataDecl'>NDataDecl</nt> is present, this is a
+general <termref def="dt-unparsed">unparsed
+entity</termref>; otherwise it is a parsed entity.</termdef></p>
+<vcnote id='not-declared'>
+<head>Notation Declared</head>
+<p>
+The <nt def='NT-Name'>Name</nt> must match the declared name of a
+<termref def="dt-notation">notation</termref>.
+</p>
+</vcnote>
+<p><termdef id="dt-sysid" term="System Identifier">The
+<nt def='NT-SystemLiteral'>SystemLiteral</nt>
+is called the entity's <term>system identifier</term>. It is a URI,
+which may be used to retrieve the entity.</termdef>
+Note that the hash mark (<code>#</code>) and fragment identifier
+frequently used with URIs are not, formally, part of the URI itself;
+an XML processor may signal an error if a fragment identifier is
+given as part of a system identifier.
+Unless otherwise provided by information outside the scope of this
+specification (e.g. a special XML element type defined by a particular
+DTD, or a processing instruction defined by a particular application
+specification), relative URIs are relative to the location of the
+resource within which the entity declaration occurs.
+A URI might thus be relative to the
+<termref def='dt-docent'>document entity</termref>, to the entity
+containing the <termref def='dt-doctype'>external DTD subset</termref>,
+or to some other <termref def='dt-extent'>external parameter entity</termref>.
+</p>
+<p>An XML processor should handle a non-ASCII character in a URI by
+representing the character in UTF-8 as one or more bytes, and then
+escaping these bytes with the URI escaping mechanism (i.e., by
+converting each byte to %HH, where HH is the hexadecimal notation of the
+byte value).</p>
+<p><termdef id="dt-pubid" term="Public identifier">
+In addition to a system identifier, an external identifier may
+include a <term>public identifier</term>.</termdef>
+An XML processor attempting to retrieve the entity's content may use the public
+identifier to try to generate an alternative URI. If the processor
+is unable to do so, it must use the URI specified in the system
+literal. Before a match is attempted, all strings
+of white space in the public identifier must be normalized to single space characters (#x20),
+and leading and trailing white space must be removed.</p>
+<p>Examples of external entity declarations:
+<eg>&lt;!ENTITY open-hatch
+ SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
+&lt;!ENTITY open-hatch
+ PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
+ "http://www.textuality.com/boilerplate/OpenHatch.xml">
+&lt;!ENTITY hatch-pic
+ SYSTEM "../grafix/OpenHatch.gif"
+ NDATA gif ></eg></p>
+</div3>
+
+</div2>
+
+<div2 id='TextEntities'>
+<head>Parsed Entities</head>
+<div3 id='sec-TextDecl'>
+<head>The Text Declaration</head>
+<p>External parsed entities may each begin with a <term>text
+declaration</term>.
+<scrap lang='ebnf'>
+<head>Text Declaration</head>
+<prodgroup pcw4="12.5" pcw5="13">
+<prod id='NT-TextDecl'><lhs>TextDecl</lhs>
+<rhs>&xmlpio;
+<nt def='NT-VersionInfo'>VersionInfo</nt>?
+<nt def='NT-EncodingDecl'>EncodingDecl</nt>
+<nt def='NT-S'>S</nt>? &pic;</rhs>
+</prod>
+</prodgroup>
+</scrap>
+</p>
+<p>The text declaration must be provided literally, not
+by reference to a parsed entity.
+No text declaration may appear at any position other than the beginning of
+an external parsed entity.</p>
+</div3>
+<div3 id='wf-entities'>
+<head>Well-Formed Parsed Entities</head>
+<p>The document entity is well-formed if it matches the production labeled
+<nt def='NT-document'>document</nt>.
+An external general
+parsed entity is well-formed if it matches the production labeled
+<nt def='NT-extParsedEnt'>extParsedEnt</nt>.
+An external parameter
+entity is well-formed if it matches the production labeled
+<nt def='NT-extPE'>extPE</nt>.
+<scrap lang='ebnf'>
+<head>Well-Formed External Parsed Entity</head>
+<prod id='NT-extParsedEnt'><lhs>extParsedEnt</lhs>
+<rhs><nt def='NT-TextDecl'>TextDecl</nt>?
+<nt def='NT-content'>content</nt></rhs>
+</prod>
+<prod id='NT-extPE'><lhs>extPE</lhs>
+<rhs><nt def='NT-TextDecl'>TextDecl</nt>?
+<nt def='NT-extSubsetDecl'>extSubsetDecl</nt></rhs>
+</prod>
+</scrap>
+An internal general parsed entity is well-formed if its replacement text
+matches the production labeled
+<nt def='NT-content'>content</nt>.
+All internal parameter entities are well-formed by definition.
+</p>
+<p>A consequence of well-formedness in entities is that the logical
+and physical structures in an XML document are properly nested; no
+<termref def='dt-stag'>start-tag</termref>,
+<termref def='dt-etag'>end-tag</termref>,
+<termref def="dt-empty">empty-element tag</termref>,
+<termref def='dt-element'>element</termref>,
+<termref def='dt-comment'>comment</termref>,
+<termref def='dt-pi'>processing instruction</termref>,
+<termref def='dt-charref'>character
+reference</termref>, or
+<termref def='dt-entref'>entity reference</termref>
+can begin in one entity and end in another.</p>
+</div3>
+<div3 id='charencoding'>
+<head>Character Encoding in Entities</head>
+
+<p>Each external parsed entity in an XML document may use a different
+encoding for its characters. All XML processors must be able to read
+entities in either UTF-8 or UTF-16.
+
+</p>
+<p>Entities encoded in UTF-16 must
+begin with the Byte Order Mark described by ISO/IEC 10646 Annex E and
+Unicode Appendix B (the ZERO WIDTH NO-BREAK SPACE character, #xFEFF).
+This is an encoding signature, not part of either the markup or the
+character data of the XML document.
+XML processors must be able to use this character to
+differentiate between UTF-8 and UTF-16 encoded documents.</p>
+<p>Although an XML processor is required to read only entities in
+the UTF-8 and UTF-16 encodings, it is recognized that other encodings are
+used around the world, and it may be desired for XML processors
+to read entities that use them.
+Parsed entities which are stored in an encoding other than
+UTF-8 or UTF-16 must begin with a <titleref href='TextDecl'>text
+declaration</titleref> containing an encoding declaration:
+<scrap lang='ebnf'>
+<head>Encoding Declaration</head>
+<prod id='NT-EncodingDecl'><lhs>EncodingDecl</lhs>
+<rhs><nt def="NT-S">S</nt>
+'encoding' <nt def='NT-Eq'>Eq</nt>
+('"' <nt def='NT-EncName'>EncName</nt> '"' |
+"'" <nt def='NT-EncName'>EncName</nt> "'" )
+</rhs>
+</prod>
+<prod id='NT-EncName'><lhs>EncName</lhs>
+<rhs>[A-Za-z] ([A-Za-z0-9._] | '-')*</rhs>
+<com>Encoding name contains only Latin characters</com>
+</prod>
+</scrap>
+In the <termref def='dt-docent'>document entity</termref>, the encoding
+declaration is part of the <termref def="dt-xmldecl">XML declaration</termref>.
+The <nt def="NT-EncName">EncName</nt> is the name of the encoding used.
+</p>
+<!-- FINAL EDIT: check name of IANA and charset names -->
+<p>In an encoding declaration, the values
+"<code>UTF-8</code>",
+"<code>UTF-16</code>",
+"<code>ISO-10646-UCS-2</code>", and
+"<code>ISO-10646-UCS-4</code>" should be
+used for the various encodings and transformations of Unicode /
+ISO/IEC 10646, the values
+"<code>ISO-8859-1</code>",
+"<code>ISO-8859-2</code>", ...
+"<code>ISO-8859-9</code>" should be used for the parts of ISO 8859, and
+the values
+"<code>ISO-2022-JP</code>",
+"<code>Shift_JIS</code>", and
+"<code>EUC-JP</code>"
+should be used for the various encoded forms of JIS X-0208-1997. XML
+processors may recognize other encodings; it is recommended that
+character encodings registered (as <emph>charset</emph>s)
+with the Internet Assigned Numbers
+Authority <bibref ref='IANA'/>, other than those just listed, should be
+referred to
+using their registered names.
+Note that these registered names are defined to be
+case-insensitive, so processors wishing to match against them
+should do so in a case-insensitive
+way.</p>
+<p>In the absence of information provided by an external
+transport protocol (e.g. HTTP or MIME),
+it is an <termref def="dt-error">error</termref> for an entity including
+an encoding declaration to be presented to the XML processor
+in an encoding other than that named in the declaration,
+for an encoding declaration to occur other than at the beginning
+of an external entity, or for
+an entity which begins with neither a Byte Order Mark nor an encoding
+declaration to use an encoding other than UTF-8.
+Note that since ASCII
+is a subset of UTF-8, ordinary ASCII entities do not strictly need
+an encoding declaration.</p>
+
+<p>It is a <termref def='dt-fatal'>fatal error</termref> when an XML processor
+encounters an entity with an encoding that it is unable to process.</p>
+<p>Examples of encoding declarations:
+<eg>&lt;?xml encoding='UTF-8'?>
+&lt;?xml encoding='EUC-JP'?></eg></p>
+</div3>
+</div2>
+<div2 id='entproc'>
+<head>XML Processor Treatment of Entities and References</head>
+<p>The table below summarizes the contexts in which character references,
+entity references, and invocations of unparsed entities might appear and the
+required behavior of an <termref def='dt-xml-proc'>XML processor</termref> in
+each case.
+The labels in the leftmost column describe the recognition context:
+<glist>
+<gitem><label>Reference in Content</label>
+<def><p>as a reference
+anywhere after the <termref def='dt-stag'>start-tag</termref> and
+before the <termref def='dt-etag'>end-tag</termref> of an element; corresponds
+to the nonterminal <nt def='NT-content'>content</nt>.</p></def>
+</gitem>
+<gitem>
+<label>Reference in Attribute Value</label>
+<def><p>as a reference within either the value of an attribute in a
+<termref def='dt-stag'>start-tag</termref>, or a default
+value in an <termref def='dt-attdecl'>attribute declaration</termref>;
+corresponds to the nonterminal
+<nt def='NT-AttValue'>AttValue</nt>.</p></def></gitem>
+<gitem>
+<label>Occurs as Attribute Value</label>
+<def><p>as a <nt def='NT-Name'>Name</nt>, not a reference, appearing either as
+the value of an
+attribute which has been declared as type <kw>ENTITY</kw>, or as one of
+the space-separated tokens in the value of an attribute which has been
+declared as type <kw>ENTITIES</kw>.</p>
+</def></gitem>
+<gitem><label>Reference in Entity Value</label>
+<def><p>as a reference
+within a parameter or internal entity's
+<termref def='dt-litentval'>literal entity value</termref> in
+the entity's declaration; corresponds to the nonterminal
+<nt def='NT-EntityValue'>EntityValue</nt>.</p></def></gitem>
+<gitem><label>Reference in DTD</label>
+<def><p>as a reference within either the internal or external subsets of the
+<termref def='dt-doctype'>DTD</termref>, but outside
+of an <nt def='NT-EntityValue'>EntityValue</nt> or
+<nt def="NT-AttValue">AttValue</nt>.</p></def>
+</gitem>
+</glist></p>
+<htable border='1' cellpadding='7' align='center'>
+<htbody>
+<tr><td bgcolor='&cellback;' rowspan='2' colspan='1'></td>
+<td bgcolor='&cellback;' align='center' valign='bottom' colspan='4'>Entity Type</td>
+<td bgcolor='&cellback;' rowspan='2' align='center'>Character</td>
+</tr>
+<tr align='center' valign='bottom'>
+<td bgcolor='&cellback;'>Parameter</td>
+<td bgcolor='&cellback;'>Internal
+General</td>
+<td bgcolor='&cellback;'>External Parsed
+General</td>
+<td bgcolor='&cellback;'>Unparsed</td>
+</tr>
+<tr align='center' valign='middle'>
+
+<td bgcolor='&cellback;' align='right'>Reference
+in Content</td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Not recognized</titleref></td>
+<td bgcolor='&cellback;'><titleref href='included'>Included</titleref></td>
+<td bgcolor='&cellback;'><titleref href='include-if-valid'>Included if validating</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='included'>Included</titleref></td>
+</tr>
+<tr align='center' valign='middle'>
+<td bgcolor='&cellback;' align='right'>Reference
+in Attribute Value</td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Not recognized</titleref></td>
+<td bgcolor='&cellback;'><titleref href='inliteral'>Included in literal</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='included'>Included</titleref></td>
+</tr>
+<tr align='center' valign='middle'>
+<td bgcolor='&cellback;' align='right'>Occurs as
+Attribute Value</td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Not recognized</titleref></td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='not-recognized'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='notify'>Notify</titleref></td>
+<td bgcolor='&cellback;'><titleref href='not recognized'>Not recognized</titleref></td>
+</tr>
+<tr align='center' valign='middle'>
+<td bgcolor='&cellback;' align='right'>Reference
+in EntityValue</td>
+<td bgcolor='&cellback;'><titleref href='inliteral'>Included in literal</titleref></td>
+<td bgcolor='&cellback;'><titleref href='bypass'>Bypassed</titleref></td>
+<td bgcolor='&cellback;'><titleref href='bypass'>Bypassed</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='included'>Included</titleref></td>
+</tr>
+<tr align='center' valign='middle'>
+<td bgcolor='&cellback;' align='right'>Reference
+in DTD</td>
+<td bgcolor='&cellback;'><titleref href='as-PE'>Included as PE</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+<td bgcolor='&cellback;'><titleref href='forbidden'>Forbidden</titleref></td>
+</tr>
+</htbody>
+</htable>
+<div3 id='not-recognized'>
+<head>Not Recognized</head>
+<p>Outside the DTD, the <code>%</code> character has no
+special significance; thus, what would be parameter entity references in the
+DTD are not recognized as markup in <nt def='NT-content'>content</nt>.
+Similarly, the names of unparsed entities are not recognized except
+when they appear in the value of an appropriately declared attribute.
+</p>
+</div3>
+<div3 id='included'>
+<head>Included</head>
+<p><termdef id="dt-include" term="Include">An entity is
+<term>included</term> when its
+<termref def='dt-repltext'>replacement text</termref> is retrieved
+and processed, in place of the reference itself,
+as though it were part of the document at the location the
+reference was recognized.
+The replacement text may contain both
+<termref def='dt-chardata'>character data</termref>
+and (except for parameter entities) <termref def="dt-markup">markup</termref>,
+which must be recognized in
+the usual way, except that the replacement text of entities used to escape
+markup delimiters (the entities &magicents;) is always treated as
+data. (The string "<code>AT&amp;amp;T;</code>" expands to
+"<code>AT&amp;T;</code>" and the remaining ampersand is not recognized
+as an entity-reference delimiter.)
+A character reference is <term>included</term> when the indicated
+character is processed in place of the reference itself.
+</termdef></p>
+</div3>
+<div3 id='include-if-valid'>
+<head>Included If Validating</head>
+<p>When an XML processor recognizes a reference to a parsed entity, in order
+to <termref def="dt-valid">validate</termref>
+the document, the processor must
+<termref def="dt-include">include</termref> its
+replacement text.
+If the entity is external, and the processor is not
+attempting to validate the XML document, the
+processor <termref def="dt-may">may</termref>, but need not,
+include the entity's replacement text.
+If a non-validating parser does not include the replacement text,
+it must inform the application that it recognized, but did not
+read, the entity.</p>
+<p>This rule is based on the recognition that the automatic inclusion
+provided by the SGML and XML entity mechanism, primarily designed
+to support modularity in authoring, is not necessarily
+appropriate for other applications, in particular document browsing.
+Browsers, for example, when encountering an external parsed entity reference,
+might choose to provide a visual indication of the entity's
+presence and retrieve it for display only on demand.
+</p>
+</div3>
+<div3 id='forbidden'>
+<head>Forbidden</head>
+<p>The following are forbidden, and constitute
+<termref def='dt-fatal'>fatal</termref> errors:
+<ulist>
+<item><p>the appearance of a reference to an
+<termref def='dt-unparsed'>unparsed entity</termref>.
+</p></item>
+<item><p>the appearance of any character or general-entity reference in the
+DTD except within an <nt def='NT-EntityValue'>EntityValue</nt> or
+<nt def="NT-AttValue">AttValue</nt>.</p></item>
+<item><p>a reference to an external entity in an attribute value.</p>
+</item>
+</ulist>
+</p>
+</div3>
+<div3 id='inliteral'>
+<head>Included in Literal</head>
+<p>When an <termref def='dt-entref'>entity reference</termref> appears in an
+attribute value, or a parameter entity reference appears in a literal entity
+value, its <termref def='dt-repltext'>replacement text</termref> is
+processed in place of the reference itself as though it
+were part of the document at the location the reference was recognized,
+except that a single or double quote character in the replacement text
+is always treated as a normal data character and will not terminate the
+literal.
+For example, this is well-formed:
+<eg><![CDATA[<!ENTITY % YN '"Yes"' >
+<!ENTITY WhatHeSaid "He said &YN;" >]]></eg>
+while this is not:
+<eg>&lt;!ENTITY EndAttr "27'" >
+&lt;element attribute='a-&amp;EndAttr;></eg>
+</p></div3>
+<div3 id='notify'>
+<head>Notify</head>
+<p>When the name of an <termref def='dt-unparsed'>unparsed
+entity</termref> appears as a token in the
+value of an attribute of declared type <kw>ENTITY</kw> or <kw>ENTITIES</kw>,
+a validating processor must inform the
+application of the <termref def='dt-sysid'>system</termref>
+and <termref def='dt-pubid'>public</termref> (if any)
+identifiers for both the entity and its associated
+<termref def="dt-notation">notation</termref>.</p>
+</div3>
+<div3 id='bypass'>
+<head>Bypassed</head>
+<p>When a general entity reference appears in the
+<nt def='NT-EntityValue'>EntityValue</nt> in an entity declaration,
+it is bypassed and left as is.</p>
+</div3>
+<div3 id='as-PE'>
+<head>Included as PE</head>
+<p>Just as with external parsed entities, parameter entities
+need only be <titleref href='include-if-valid'>included if
+validating</titleref>.
+When a parameter-entity reference is recognized in the DTD
+and included, its
+<termref def='dt-repltext'>replacement
+text</termref> is enlarged by the attachment of one leading and one following
+space (#x20) character; the intent is to constrain the replacement
+text of parameter
+entities to contain an integral number of grammatical tokens in the DTD.
+</p>
+</div3>
+
+</div2>
+<div2 id='intern-replacement'>
+<head>Construction of Internal Entity Replacement Text</head>
+<p>In discussing the treatment
+of internal entities, it is
+useful to distinguish two forms of the entity's value.
+<termdef id="dt-litentval" term='Literal Entity Value'>The <term>literal
+entity value</term> is the quoted string actually
+present in the entity declaration, corresponding to the
+non-terminal <nt def='NT-EntityValue'>EntityValue</nt>.</termdef>
+<termdef id='dt-repltext' term='Replacement Text'>The <term>replacement
+text</term> is the content of the entity, after
+replacement of character references and parameter-entity
+references.
+</termdef></p>
+
+<p>The literal entity value
+as given in an internal entity declaration
+(<nt def='NT-EntityValue'>EntityValue</nt>) may contain character,
+parameter-entity, and general-entity references.
+Such references must be contained entirely within the
+literal entity value.
+The actual replacement text that is
+<termref def='dt-include'>included</termref> as described above
+must contain the <emph>replacement text</emph> of any
+parameter entities referred to, and must contain the character
+referred to, in place of any character references in the
+literal entity value; however,
+general-entity references must be left as-is, unexpanded.
+For example, given the following declarations:
+
+<eg><![CDATA[<!ENTITY % pub "&#xc9;ditions Gallimard" >
+<!ENTITY rights "All rights reserved" >
+<!ENTITY book "La Peste: Albert Camus,
+&#xA9; 1947 %pub;. &rights;" >]]></eg>
+then the replacement text for the entity "<code>book</code>" is:
+<eg>La Peste: Albert Camus,
+&#169; 1947 &#201;ditions Gallimard. &amp;rights;</eg>
+The general-entity reference "<code>&amp;rights;</code>" would be expanded
+should the reference "<code>&amp;book;</code>" appear in the document's
+content or an attribute value.</p>
+<p>These simple rules may have complex interactions; for a detailed
+discussion of a difficult example, see
+<specref ref='sec-entexpand'/>.
+</p>
+
+</div2>
+<div2 id='sec-predefined-ent'>
+<head>Predefined Entities</head>
+<p><termdef id="dt-escape" term="escape">Entity and character
+references can both be used to <term>escape</term> the left angle bracket,
+ampersand, and other delimiters. A set of general entities
+(&magicents;) is specified for this purpose.
+Numeric character references may also be used; they are
+expanded immediately when recognized and must be treated as
+character data, so the numeric character references
+"<code>&amp;#60;</code>" and "<code>&amp;#38;</code>" may be used to
+escape <code>&lt;</code> and <code>&amp;</code> when they occur
+in character data.</termdef></p>
+<p>All XML processors must recognize these entities whether they
+are declared or not.
+<termref def='dt-interop'>For interoperability</termref>,
+valid XML documents should declare these
+entities, like any others, before using them.
+If the entities in question are declared, they must be declared
+as internal entities whose replacement text is the single
+character being escaped or a character reference to
+that character, as shown below.
+<eg><![CDATA[<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY amp "&#38;#38;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">
+]]></eg>
+Note that the <code>&lt;</code> and <code>&amp;</code> characters
+in the declarations of "<code>lt</code>" and "<code>amp</code>"
+are doubly escaped to meet the requirement that entity replacement
+be well-formed.
+</p>
+</div2>
+
+<div2 id='Notations'>
+<head>Notation Declarations</head>
+
+<p><termdef id="dt-notation" term="Notation"><term>Notations</term> identify by
+name the format of <termref def="dt-extent">unparsed
+entities</termref>, the
+format of elements which bear a notation attribute,
+or the application to which
+a <termref def="dt-pi">processing instruction</termref> is
+addressed.</termdef></p>
+<p><termdef id="dt-notdecl" term="Notation Declaration">
+<term>Notation declarations</term>
+provide a name for the notation, for use in
+entity and attribute-list declarations and in attribute specifications,
+and an external identifier for the notation which may allow an XML
+processor or its client application to locate a helper application
+capable of processing data in the given notation.
+<scrap lang='ebnf'>
+<head>Notation Declarations</head>
+<prod id='NT-NotationDecl'><lhs>NotationDecl</lhs>
+<rhs>'&lt;!NOTATION' <nt def='NT-S'>S</nt> <nt def='NT-Name'>Name</nt>
+<nt def='NT-S'>S</nt>
+(<nt def='NT-ExternalID'>ExternalID</nt> |
+<nt def='NT-PublicID'>PublicID</nt>)
+<nt def='NT-S'>S</nt>? '>'</rhs></prod>
+<prod id='NT-PublicID'><lhs>PublicID</lhs>
+<rhs>'PUBLIC' <nt def='NT-S'>S</nt>
+<nt def='NT-PubidLiteral'>PubidLiteral</nt>
+</rhs></prod>
+</scrap>
+</termdef></p>
+<p>XML processors must provide applications with the name and external
+identifier(s) of any notation declared and referred to in an attribute
+value, attribute definition, or entity declaration. They may
+additionally resolve the external identifier into the
+<termref def="dt-sysid">system identifier</termref>,
+file name, or other information needed to allow the
+application to call a processor for data in the notation described. (It
+is not an error, however, for XML documents to declare and refer to
+notations for which notation-specific applications are not available on
+the system where the XML processor or application is running.)</p>
+</div2>
+
+
+<div2 id='sec-doc-entity'>
+<head>Document Entity</head>
+
+<p><termdef id="dt-docent" term="Document Entity">The <term>document
+entity</term> serves as the root of the entity
+tree and a starting-point for an <termref def="dt-xml-proc">XML
+processor</termref>.</termdef>
+This specification does
+not specify how the document entity is to be located by an XML
+processor; unlike other entities, the document entity has no name and might
+well appear on a processor input stream
+without any identification at all.</p>
+</div2>
+
+
+</div1>
+<!-- &Conformance; -->
+
+<div1 id='sec-conformance'>
+<head>Conformance</head>
+
+<div2 id='proc-types'>
+<head>Validating and Non-Validating Processors</head>
+<p>Conforming <termref def="dt-xml-proc">XML processors</termref> fall into two
+classes: validating and non-validating.</p>
+<p>Validating and non-validating processors alike must report
+violations of this specification's well-formedness constraints
+in the content of the
+<termref def='dt-docent'>document entity</termref> and any
+other <termref def='dt-parsedent'>parsed entities</termref> that
+they read.</p>
+<p><termdef id="dt-validating" term="Validating Processor">
+<term>Validating processors</term> must report
+violations of the constraints expressed by the declarations in the
+<termref def="dt-doctype">DTD</termref>, and
+failures to fulfill the validity constraints given
+in this specification.
+</termdef>
+To accomplish this, validating XML processors must read and process the entire
+DTD and all external parsed entities referenced in the document.
+</p>
+<p>Non-validating processors are required to check only the
+<termref def='dt-docent'>document entity</termref>, including
+the entire internal DTD subset, for well-formedness.
+<termdef id='dt-use-mdecl' term='Process Declarations'>
+While they are not required to check the document for validity,
+they are required to
+<term>process</term> all the declarations they read in the
+internal DTD subset and in any parameter entity that they
+read, up to the first reference
+to a parameter entity that they do <emph>not</emph> read; that is to
+say, they must
+use the information in those declarations to
+<titleref href='AVNormalize'>normalize</titleref> attribute values,
+<titleref href='included'>include</titleref> the replacement text of
+internal entities, and supply
+<titleref href='sec-attr-defaults'>default attribute values</titleref>.
+</termdef>
+They must not <termref def='dt-use-mdecl'>process</termref>
+<termref def='dt-entdecl'>entity declarations</termref> or
+<termref def='dt-attdecl'>attribute-list declarations</termref>
+encountered after a reference to a parameter entity that is not
+read, since the entity may have contained overriding declarations.
+</p>
+</div2>
+<div2 id='safe-behavior'>
+<head>Using XML Processors</head>
+<p>The behavior of a validating XML processor is highly predictable; it
+must read every piece of a document and report all well-formedness and
+validity violations.
+Less is required of a non-validating processor; it need not read any
+part of the document other than the document entity.
+This has two effects that may be important to users of XML processors:
+<ulist>
+<item><p>Certain well-formedness errors, specifically those that require
+reading external entities, may not be detected by a non-validating processor.
+Examples include the constraints entitled
+<titleref href='wf-entdeclared'>Entity Declared</titleref>,
+<titleref href='wf-textent'>Parsed Entity</titleref>, and
+<titleref href='wf-norecursion'>No Recursion</titleref>, as well
+as some of the cases described as
+<titleref href='forbidden'>forbidden</titleref> in
+<specref ref='entproc'/>.</p></item>
+<item><p>The information passed from the processor to the application may
+vary, depending on whether the processor reads
+parameter and external entities.
+For example, a non-validating processor may not
+<titleref href='AVNormalize'>normalize</titleref> attribute values,
+<titleref href='included'>include</titleref> the replacement text of
+internal entities, or supply
+<titleref href='sec-attr-defaults'>default attribute values</titleref>,
+where doing so depends on having read declarations in
+external or parameter entities.</p></item>
+</ulist>
+</p>
+<p>For maximum reliability in interoperating between different XML
+processors, applications which use non-validating processors should not
+rely on any behaviors not required of such processors.
+Applications which require facilities such as the use of default
+attributes or internal entities which are declared in external
+entities should use validating XML processors.</p>
+</div2>
+</div1>
+
+<div1 id='sec-notation'>
+<head>Notation</head>
+
+<p>The formal grammar of XML is given in this specification using a simple
+Extended Backus-Naur Form (EBNF) notation. Each rule in the grammar defines
+one symbol, in the form
+<eg>symbol ::= expression</eg></p>
+<p>Symbols are written with an initial capital letter if they are
+defined by a regular expression, or with an initial lower case letter
+otherwise.
+Literal strings are quoted.
+
+</p>
+
+<p>Within the expression on the right-hand side of a rule, the following
+expressions are used to match strings of one or more characters:
+<glist>
+<gitem>
+<label><code>#xN</code></label>
+<def><p>where <code>N</code> is a hexadecimal integer, the
+expression matches the character in ISO/IEC 10646 whose canonical
+(UCS-4)
+code value, when interpreted as an unsigned binary number, has
+the value indicated. The number of leading zeros in the
+<code>#xN</code> form is insignificant; the number of leading
+zeros in the corresponding code value
+is governed by the character
+encoding in use and is not significant for XML.</p></def>
+</gitem>
+<gitem>
+<label><code>[a-zA-Z]</code>, <code>[#xN-#xN]</code></label>
+<def><p>matches any <termref def='dt-character'>character</termref>
+with a value in the range(s) indicated (inclusive).</p></def>
+</gitem>
+<gitem>
+<label><code>[^a-z]</code>, <code>[^#xN-#xN]</code></label>
+<def><p>matches any <termref def='dt-character'>character</termref>
+with a value <emph>outside</emph> the
+range indicated.</p></def>
+</gitem>
+<gitem>
+<label><code>[^abc]</code>, <code>[^#xN#xN#xN]</code></label>
+<def><p>matches any <termref def='dt-character'>character</termref>
+with a value not among the characters given.</p></def>
+</gitem>
+<gitem>
+<label><code>"string"</code></label>
+<def><p>matches a literal string <termref def="dt-match">matching</termref>
+that given inside the double quotes.</p></def>
+</gitem>
+<gitem>
+<label><code>'string'</code></label>
+<def><p>matches a literal string <termref def="dt-match">matching</termref>
+that given inside the single quotes.</p></def>
+</gitem>
+</glist>
+These symbols may be combined to match more complex patterns as follows,
+where <code>A</code> and <code>B</code> represent simple expressions:
+<glist>
+<gitem>
+<label>(<code>expression</code>)</label>
+<def><p><code>expression</code> is treated as a unit
+and may be combined as described in this list.</p></def>
+</gitem>
+<gitem>
+<label><code>A?</code></label>
+<def><p>matches <code>A</code> or nothing; optional <code>A</code>.</p></def>
+</gitem>
+<gitem>
+<label><code>A B</code></label>
+<def><p>matches <code>A</code> followed by <code>B</code>.</p></def>
+</gitem>
+<gitem>
+<label><code>A | B</code></label>
+<def><p>matches <code>A</code> or <code>B</code> but not both.</p></def>
+</gitem>
+<gitem>
+<label><code>A - B</code></label>
+<def><p>matches any string that matches <code>A</code> but does not match
+<code>B</code>.
+</p></def>
+</gitem>
+<gitem>
+<label><code>A+</code></label>
+<def><p>matches one or more occurrences of <code>A</code>.</p></def>
+</gitem>
+<gitem>
+<label><code>A*</code></label>
+<def><p>matches zero or more occurrences of <code>A</code>.</p></def>
+</gitem>
+
+</glist>
+Other notations used in the productions are:
+<glist>
+<gitem>
+<label><code>/* ... */</code></label>
+<def><p>comment.</p></def>
+</gitem>
+<gitem>
+<label><code>[ wfc: ... ]</code></label>
+<def><p>well-formedness constraint; this identifies by name a
+constraint on
+<termref def="dt-wellformed">well-formed</termref> documents
+associated with a production.</p></def>
+</gitem>
+<gitem>
+<label><code>[ vc: ... ]</code></label>
+<def><p>validity constraint; this identifies by name a constraint on
+<termref def="dt-valid">valid</termref> documents associated with
+a production.</p></def>
+</gitem>
+</glist>
+</p></div1>
+
+</body>
+<back>
+<!-- &SGML; -->
+
+
+<!-- &Biblio; -->
+<div1 id='sec-bibliography'>
+
+<head>References</head>
+<div2 id='sec-existing-stds'>
+<head>Normative References</head>
+
+<blist>
+<bibl id='IANA' key='IANA'>
+(Internet Assigned Numbers Authority) <emph>Official Names for
+Character Sets</emph>,
+ed. Keld Simonsen et al.
+See <loc href='ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets'>ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets</loc>.
+</bibl>
+
+<bibl id='RFC1766' key='IETF RFC 1766'>
+IETF (Internet Engineering Task Force).
+<emph>RFC 1766: Tags for the Identification of Languages</emph>,
+ed. H. Alvestrand.
+1995.
+</bibl>
+
+<bibl id='ISO639' key='ISO 639'>
+(International Organization for Standardization).
+<emph>ISO 639:1988 (E).
+Code for the representation of names of languages.</emph>
+[Geneva]: International Organization for
+Standardization, 1988.</bibl>
+
+<bibl id='ISO3166' key='ISO 3166'>
+(International Organization for Standardization).
+<emph>ISO 3166-1:1997 (E).
+Codes for the representation of names of countries and their subdivisions
+&mdash; Part 1: Country codes</emph>
+[Geneva]: International Organization for
+Standardization, 1997.</bibl>
+
+<bibl id='ISO10646' key='ISO/IEC 10646'>ISO
+(International Organization for Standardization).
+<emph>ISO/IEC 10646-1993 (E). Information technology &mdash; Universal
+Multiple-Octet Coded Character Set (UCS) &mdash; Part 1:
+Architecture and Basic Multilingual Plane.</emph>
+[Geneva]: International Organization for
+Standardization, 1993 (plus amendments AM 1 through AM 7).
+</bibl>
+
+<bibl id='Unicode' key='Unicode'>The Unicode Consortium.
+<emph>The Unicode Standard, Version 2.0.</emph>
+Reading, Mass.: Addison-Wesley Developers Press, 1996.</bibl>
+
+</blist>
+
+</div2>
+
+<div2><head>Other References</head>
+
+<blist>
+
+<bibl id='Aho' key='Aho/Ullman'>Aho, Alfred V.,
+Ravi Sethi, and Jeffrey D. Ullman.
+<emph>Compilers: Principles, Techniques, and Tools</emph>.
+Reading: Addison-Wesley, 1986, rpt. corr. 1988.</bibl>
+
+<bibl id="Berners-Lee" xml-link="simple" key="Berners-Lee et al.">
+Berners-Lee, T., R. Fielding, and L. Masinter.
+<emph>Uniform Resource Identifiers (URI): Generic Syntax and
+Semantics</emph>.
+1997.
+(Work in progress; see updates to RFC1738.)</bibl>
+
+<bibl id='ABK' key='Brüggemann-Klein'>Brüggemann-Klein, Anne.
+<emph>Regular Expressions into Finite Automata</emph>.
+Extended abstract in I. Simon, Hrsg., LATIN 1992,
+S. 97-98. Springer-Verlag, Berlin 1992.
+Full Version in Theoretical Computer Science 120: 197-213, 1993.
+
+</bibl>
+
+<bibl id='ABKDW' key='Brüggemann-Klein and Wood'>Brüggemann-Klein, Anne,
+and Derick Wood.
+<emph>Deterministic Regular Languages</emph>.
+Universität Freiburg, Institut für Informatik,
+Bericht 38, Oktober 1991.
+</bibl>
+
+<bibl id='Clark' key='Clark'>James Clark.
+Comparison of SGML and XML. See
+<loc href='http://www.w3.org/TR/NOTE-sgml-xml-971215'>http://www.w3.org/TR/NOTE-sgml-xml-971215</loc>.
+</bibl>
+<bibl id="RFC1738" xml-link="simple" key="IETF RFC1738">
+IETF (Internet Engineering Task Force).
+<emph>RFC 1738: Uniform Resource Locators (URL)</emph>,
+ed. T. Berners-Lee, L. Masinter, M. McCahill.
+1994.
+</bibl>
+
+<bibl id="RFC1808" xml-link="simple" key="IETF RFC1808">
+IETF (Internet Engineering Task Force).
+<emph>RFC 1808: Relative Uniform Resource Locators</emph>,
+ed. R. Fielding.
+1995.
+</bibl>
+
+<bibl id="RFC2141" xml-link="simple" key="IETF RFC2141">
+IETF (Internet Engineering Task Force).
+<emph>RFC 2141: URN Syntax</emph>,
+ed. R. Moats.
+1997.
+</bibl>
+
+<bibl id='ISO8879' key='ISO 8879'>ISO
+(International Organization for Standardization).
+<emph>ISO 8879:1986(E). Information processing &mdash; Text and Office
+Systems &mdash; Standard Generalized Markup Language (SGML).</emph> First
+edition &mdash; 1986-10-15. [Geneva]: International Organization for
+Standardization, 1986.
+</bibl>
+
+
+<bibl id='ISO10744' key='ISO/IEC 10744'>ISO
+(International Organization for Standardization).
+<emph>ISO/IEC 10744-1992 (E). Information technology &mdash;
+Hypermedia/Time-based Structuring Language (HyTime).
+</emph>
+[Geneva]: International Organization for
+Standardization, 1992.
+<emph>Extended Facilities Annexe.</emph>
+[Geneva]: International Organization for
+Standardization, 1996.
+</bibl>
+
+
+
+</blist>
+</div2>
+</div1>
+<div1 id='CharClasses'>
+<head>Character Classes</head>
+<p>Following the characteristics defined in the Unicode standard,
+characters are classed as base characters (among others, these
+contain the alphabetic characters of the Latin alphabet, without
+diacritics), ideographic characters, and combining characters (among
+others, this class contains most diacritics); these classes combine
+to form the class of letters. Digits and extenders are
+also distinguished.
+<scrap lang="ebnf" id="CHARACTERS">
+<head>Characters</head>
+<prodgroup pcw3="3" pcw4="15">
+<prod id="NT-Letter"><lhs>Letter</lhs>
+<rhs><nt def="NT-BaseChar">BaseChar</nt>
+| <nt def="NT-Ideographic">Ideographic</nt></rhs> </prod>
+<prod id='NT-BaseChar'><lhs>BaseChar</lhs>
+<rhs>[#x0041-#x005A]
+|&nbsp;[#x0061-#x007A]
+|&nbsp;[#x00C0-#x00D6]
+|&nbsp;[#x00D8-#x00F6]
+|&nbsp;[#x00F8-#x00FF]
+|&nbsp;[#x0100-#x0131]
+|&nbsp;[#x0134-#x013E]
+|&nbsp;[#x0141-#x0148]
+|&nbsp;[#x014A-#x017E]
+|&nbsp;[#x0180-#x01C3]
+|&nbsp;[#x01CD-#x01F0]
+|&nbsp;[#x01F4-#x01F5]
+|&nbsp;[#x01FA-#x0217]
+|&nbsp;[#x0250-#x02A8]
+|&nbsp;[#x02BB-#x02C1]
+|&nbsp;#x0386
+|&nbsp;[#x0388-#x038A]
+|&nbsp;#x038C
+|&nbsp;[#x038E-#x03A1]
+|&nbsp;[#x03A3-#x03CE]
+|&nbsp;[#x03D0-#x03D6]
+|&nbsp;#x03DA
+|&nbsp;#x03DC
+|&nbsp;#x03DE
+|&nbsp;#x03E0
+|&nbsp;[#x03E2-#x03F3]
+|&nbsp;[#x0401-#x040C]
+|&nbsp;[#x040E-#x044F]
+|&nbsp;[#x0451-#x045C]
+|&nbsp;[#x045E-#x0481]
+|&nbsp;[#x0490-#x04C4]
+|&nbsp;[#x04C7-#x04C8]
+|&nbsp;[#x04CB-#x04CC]
+|&nbsp;[#x04D0-#x04EB]
+|&nbsp;[#x04EE-#x04F5]
+|&nbsp;[#x04F8-#x04F9]
+|&nbsp;[#x0531-#x0556]
+|&nbsp;#x0559
+|&nbsp;[#x0561-#x0586]
+|&nbsp;[#x05D0-#x05EA]
+|&nbsp;[#x05F0-#x05F2]
+|&nbsp;[#x0621-#x063A]
+|&nbsp;[#x0641-#x064A]
+|&nbsp;[#x0671-#x06B7]
+|&nbsp;[#x06BA-#x06BE]
+|&nbsp;[#x06C0-#x06CE]
+|&nbsp;[#x06D0-#x06D3]
+|&nbsp;#x06D5
+|&nbsp;[#x06E5-#x06E6]
+|&nbsp;[#x0905-#x0939]
+|&nbsp;#x093D
+|&nbsp;[#x0958-#x0961]
+|&nbsp;[#x0985-#x098C]
+|&nbsp;[#x098F-#x0990]
+|&nbsp;[#x0993-#x09A8]
+|&nbsp;[#x09AA-#x09B0]
+|&nbsp;#x09B2
+|&nbsp;[#x09B6-#x09B9]
+|&nbsp;[#x09DC-#x09DD]
+|&nbsp;[#x09DF-#x09E1]
+|&nbsp;[#x09F0-#x09F1]
+|&nbsp;[#x0A05-#x0A0A]
+|&nbsp;[#x0A0F-#x0A10]
+|&nbsp;[#x0A13-#x0A28]
+|&nbsp;[#x0A2A-#x0A30]
+|&nbsp;[#x0A32-#x0A33]
+|&nbsp;[#x0A35-#x0A36]
+|&nbsp;[#x0A38-#x0A39]
+|&nbsp;[#x0A59-#x0A5C]
+|&nbsp;#x0A5E
+|&nbsp;[#x0A72-#x0A74]
+|&nbsp;[#x0A85-#x0A8B]
+|&nbsp;#x0A8D
+|&nbsp;[#x0A8F-#x0A91]
+|&nbsp;[#x0A93-#x0AA8]
+|&nbsp;[#x0AAA-#x0AB0]
+|&nbsp;[#x0AB2-#x0AB3]
+|&nbsp;[#x0AB5-#x0AB9]
+|&nbsp;#x0ABD
+|&nbsp;#x0AE0
+|&nbsp;[#x0B05-#x0B0C]
+|&nbsp;[#x0B0F-#x0B10]
+|&nbsp;[#x0B13-#x0B28]
+|&nbsp;[#x0B2A-#x0B30]
+|&nbsp;[#x0B32-#x0B33]
+|&nbsp;[#x0B36-#x0B39]
+|&nbsp;#x0B3D
+|&nbsp;[#x0B5C-#x0B5D]
+|&nbsp;[#x0B5F-#x0B61]
+|&nbsp;[#x0B85-#x0B8A]
+|&nbsp;[#x0B8E-#x0B90]
+|&nbsp;[#x0B92-#x0B95]
+|&nbsp;[#x0B99-#x0B9A]
+|&nbsp;#x0B9C
+|&nbsp;[#x0B9E-#x0B9F]
+|&nbsp;[#x0BA3-#x0BA4]
+|&nbsp;[#x0BA8-#x0BAA]
+|&nbsp;[#x0BAE-#x0BB5]
+|&nbsp;[#x0BB7-#x0BB9]
+|&nbsp;[#x0C05-#x0C0C]
+|&nbsp;[#x0C0E-#x0C10]
+|&nbsp;[#x0C12-#x0C28]
+|&nbsp;[#x0C2A-#x0C33]
+|&nbsp;[#x0C35-#x0C39]
+|&nbsp;[#x0C60-#x0C61]
+|&nbsp;[#x0C85-#x0C8C]
+|&nbsp;[#x0C8E-#x0C90]
+|&nbsp;[#x0C92-#x0CA8]
+|&nbsp;[#x0CAA-#x0CB3]
+|&nbsp;[#x0CB5-#x0CB9]
+|&nbsp;#x0CDE
+|&nbsp;[#x0CE0-#x0CE1]
+|&nbsp;[#x0D05-#x0D0C]
+|&nbsp;[#x0D0E-#x0D10]
+|&nbsp;[#x0D12-#x0D28]
+|&nbsp;[#x0D2A-#x0D39]
+|&nbsp;[#x0D60-#x0D61]
+|&nbsp;[#x0E01-#x0E2E]
+|&nbsp;#x0E30
+|&nbsp;[#x0E32-#x0E33]
+|&nbsp;[#x0E40-#x0E45]
+|&nbsp;[#x0E81-#x0E82]
+|&nbsp;#x0E84
+|&nbsp;[#x0E87-#x0E88]
+|&nbsp;#x0E8A
+|&nbsp;#x0E8D
+|&nbsp;[#x0E94-#x0E97]
+|&nbsp;[#x0E99-#x0E9F]
+|&nbsp;[#x0EA1-#x0EA3]
+|&nbsp;#x0EA5
+|&nbsp;#x0EA7
+|&nbsp;[#x0EAA-#x0EAB]
+|&nbsp;[#x0EAD-#x0EAE]
+|&nbsp;#x0EB0
+|&nbsp;[#x0EB2-#x0EB3]
+|&nbsp;#x0EBD
+|&nbsp;[#x0EC0-#x0EC4]
+|&nbsp;[#x0F40-#x0F47]
+|&nbsp;[#x0F49-#x0F69]
+|&nbsp;[#x10A0-#x10C5]
+|&nbsp;[#x10D0-#x10F6]
+|&nbsp;#x1100
+|&nbsp;[#x1102-#x1103]
+|&nbsp;[#x1105-#x1107]
+|&nbsp;#x1109
+|&nbsp;[#x110B-#x110C]
+|&nbsp;[#x110E-#x1112]
+|&nbsp;#x113C
+|&nbsp;#x113E
+|&nbsp;#x1140
+|&nbsp;#x114C
+|&nbsp;#x114E
+|&nbsp;#x1150
+|&nbsp;[#x1154-#x1155]
+|&nbsp;#x1159
+|&nbsp;[#x115F-#x1161]
+|&nbsp;#x1163
+|&nbsp;#x1165
+|&nbsp;#x1167
+|&nbsp;#x1169
+|&nbsp;[#x116D-#x116E]
+|&nbsp;[#x1172-#x1173]
+|&nbsp;#x1175
+|&nbsp;#x119E
+|&nbsp;#x11A8
+|&nbsp;#x11AB
+|&nbsp;[#x11AE-#x11AF]
+|&nbsp;[#x11B7-#x11B8]
+|&nbsp;#x11BA
+|&nbsp;[#x11BC-#x11C2]
+|&nbsp;#x11EB
+|&nbsp;#x11F0
+|&nbsp;#x11F9
+|&nbsp;[#x1E00-#x1E9B]
+|&nbsp;[#x1EA0-#x1EF9]
+|&nbsp;[#x1F00-#x1F15]
+|&nbsp;[#x1F18-#x1F1D]
+|&nbsp;[#x1F20-#x1F45]
+|&nbsp;[#x1F48-#x1F4D]
+|&nbsp;[#x1F50-#x1F57]
+|&nbsp;#x1F59
+|&nbsp;#x1F5B
+|&nbsp;#x1F5D
+|&nbsp;[#x1F5F-#x1F7D]
+|&nbsp;[#x1F80-#x1FB4]
+|&nbsp;[#x1FB6-#x1FBC]
+|&nbsp;#x1FBE
+|&nbsp;[#x1FC2-#x1FC4]
+|&nbsp;[#x1FC6-#x1FCC]
+|&nbsp;[#x1FD0-#x1FD3]
+|&nbsp;[#x1FD6-#x1FDB]
+|&nbsp;[#x1FE0-#x1FEC]
+|&nbsp;[#x1FF2-#x1FF4]
+|&nbsp;[#x1FF6-#x1FFC]
+|&nbsp;#x2126
+|&nbsp;[#x212A-#x212B]
+|&nbsp;#x212E
+|&nbsp;[#x2180-#x2182]
+|&nbsp;[#x3041-#x3094]
+|&nbsp;[#x30A1-#x30FA]
+|&nbsp;[#x3105-#x312C]
+|&nbsp;[#xAC00-#xD7A3]
+</rhs></prod>
+<prod id='NT-Ideographic'><lhs>Ideographic</lhs>
+<rhs>[#x4E00-#x9FA5]
+|&nbsp;#x3007
+|&nbsp;[#x3021-#x3029]
+</rhs></prod>
+<prod id='NT-CombiningChar'><lhs>CombiningChar</lhs>
+<rhs>[#x0300-#x0345]
+|&nbsp;[#x0360-#x0361]
+|&nbsp;[#x0483-#x0486]
+|&nbsp;[#x0591-#x05A1]
+|&nbsp;[#x05A3-#x05B9]
+|&nbsp;[#x05BB-#x05BD]
+|&nbsp;#x05BF
+|&nbsp;[#x05C1-#x05C2]
+|&nbsp;#x05C4
+|&nbsp;[#x064B-#x0652]
+|&nbsp;#x0670
+|&nbsp;[#x06D6-#x06DC]
+|&nbsp;[#x06DD-#x06DF]
+|&nbsp;[#x06E0-#x06E4]
+|&nbsp;[#x06E7-#x06E8]
+|&nbsp;[#x06EA-#x06ED]
+|&nbsp;[#x0901-#x0903]
+|&nbsp;#x093C
+|&nbsp;[#x093E-#x094C]
+|&nbsp;#x094D
+|&nbsp;[#x0951-#x0954]
+|&nbsp;[#x0962-#x0963]
+|&nbsp;[#x0981-#x0983]
+|&nbsp;#x09BC
+|&nbsp;#x09BE
+|&nbsp;#x09BF
+|&nbsp;[#x09C0-#x09C4]
+|&nbsp;[#x09C7-#x09C8]
+|&nbsp;[#x09CB-#x09CD]
+|&nbsp;#x09D7
+|&nbsp;[#x09E2-#x09E3]
+|&nbsp;#x0A02
+|&nbsp;#x0A3C
+|&nbsp;#x0A3E
+|&nbsp;#x0A3F
+|&nbsp;[#x0A40-#x0A42]
+|&nbsp;[#x0A47-#x0A48]
+|&nbsp;[#x0A4B-#x0A4D]
+|&nbsp;[#x0A70-#x0A71]
+|&nbsp;[#x0A81-#x0A83]
+|&nbsp;#x0ABC
+|&nbsp;[#x0ABE-#x0AC5]
+|&nbsp;[#x0AC7-#x0AC9]
+|&nbsp;[#x0ACB-#x0ACD]
+|&nbsp;[#x0B01-#x0B03]
+|&nbsp;#x0B3C
+|&nbsp;[#x0B3E-#x0B43]
+|&nbsp;[#x0B47-#x0B48]
+|&nbsp;[#x0B4B-#x0B4D]
+|&nbsp;[#x0B56-#x0B57]
+|&nbsp;[#x0B82-#x0B83]
+|&nbsp;[#x0BBE-#x0BC2]
+|&nbsp;[#x0BC6-#x0BC8]
+|&nbsp;[#x0BCA-#x0BCD]
+|&nbsp;#x0BD7
+|&nbsp;[#x0C01-#x0C03]
+|&nbsp;[#x0C3E-#x0C44]
+|&nbsp;[#x0C46-#x0C48]
+|&nbsp;[#x0C4A-#x0C4D]
+|&nbsp;[#x0C55-#x0C56]
+|&nbsp;[#x0C82-#x0C83]
+|&nbsp;[#x0CBE-#x0CC4]
+|&nbsp;[#x0CC6-#x0CC8]
+|&nbsp;[#x0CCA-#x0CCD]
+|&nbsp;[#x0CD5-#x0CD6]
+|&nbsp;[#x0D02-#x0D03]
+|&nbsp;[#x0D3E-#x0D43]
+|&nbsp;[#x0D46-#x0D48]
+|&nbsp;[#x0D4A-#x0D4D]
+|&nbsp;#x0D57
+|&nbsp;#x0E31
+|&nbsp;[#x0E34-#x0E3A]
+|&nbsp;[#x0E47-#x0E4E]
+|&nbsp;#x0EB1
+|&nbsp;[#x0EB4-#x0EB9]
+|&nbsp;[#x0EBB-#x0EBC]
+|&nbsp;[#x0EC8-#x0ECD]
+|&nbsp;[#x0F18-#x0F19]
+|&nbsp;#x0F35
+|&nbsp;#x0F37
+|&nbsp;#x0F39
+|&nbsp;#x0F3E
+|&nbsp;#x0F3F
+|&nbsp;[#x0F71-#x0F84]
+|&nbsp;[#x0F86-#x0F8B]
+|&nbsp;[#x0F90-#x0F95]
+|&nbsp;#x0F97
+|&nbsp;[#x0F99-#x0FAD]
+|&nbsp;[#x0FB1-#x0FB7]
+|&nbsp;#x0FB9
+|&nbsp;[#x20D0-#x20DC]
+|&nbsp;#x20E1
+|&nbsp;[#x302A-#x302F]
+|&nbsp;#x3099
+|&nbsp;#x309A
+</rhs></prod>
+<prod id='NT-Digit'><lhs>Digit</lhs>
+<rhs>[#x0030-#x0039]
+|&nbsp;[#x0660-#x0669]
+|&nbsp;[#x06F0-#x06F9]
+|&nbsp;[#x0966-#x096F]
+|&nbsp;[#x09E6-#x09EF]
+|&nbsp;[#x0A66-#x0A6F]
+|&nbsp;[#x0AE6-#x0AEF]
+|&nbsp;[#x0B66-#x0B6F]
+|&nbsp;[#x0BE7-#x0BEF]
+|&nbsp;[#x0C66-#x0C6F]
+|&nbsp;[#x0CE6-#x0CEF]
+|&nbsp;[#x0D66-#x0D6F]
+|&nbsp;[#x0E50-#x0E59]
+|&nbsp;[#x0ED0-#x0ED9]
+|&nbsp;[#x0F20-#x0F29]
+</rhs></prod>
+<prod id='NT-Extender'><lhs>Extender</lhs>
+<rhs>#x00B7
+|&nbsp;#x02D0
+|&nbsp;#x02D1
+|&nbsp;#x0387
+|&nbsp;#x0640
+|&nbsp;#x0E46
+|&nbsp;#x0EC6
+|&nbsp;#x3005
+|&nbsp;[#x3031-#x3035]
+|&nbsp;[#x309D-#x309E]
+|&nbsp;[#x30FC-#x30FE]
+</rhs></prod>
+
+</prodgroup>
+</scrap>
+</p>
+<p>The character classes defined here can be derived from the
+Unicode character database as follows:
+<ulist>
+<item>
+<p>Name start characters must have one of the categories Ll, Lu,
+Lo, Lt, Nl.</p>
+</item>
+<item>
+<p>Name characters other than Name-start characters
+must have one of the categories Mc, Me, Mn, Lm, or Nd.</p>
+</item>
+<item>
+<p>Characters in the compatibility area (i.e. with character code
+greater than #xF900 and less than #xFFFE) are not allowed in XML
+names.</p>
+</item>
+<item>
+<p>Characters which have a font or compatibility decomposition (i.e. those
+with a "compatibility formatting tag" in field 5 of the database --
+marked by field 5 beginning with a "&lt;") are not allowed.</p>
+</item>
+<item>
+<p>The following characters are treated as name-start characters
+rather than name characters, because the property file classifies
+them as Alphabetic: [#x02BB-#x02C1], #x0559, #x06E5, #x06E6.</p>
+</item>
+<item>
+<p>Characters #x20DD-#x20E0 are excluded (in accordance with
+Unicode, section 5.14).</p>
+</item>
+<item>
+<p>Character #x00B7 is classified as an extender, because the
+property list so identifies it.</p>
+</item>
+<item>
+<p>Character #x0387 is added as a name character, because #x00B7
+is its canonical equivalent.</p>
+</item>
+<item>
+<p>Characters ':' and '_' are allowed as name-start characters.</p>
+</item>
+<item>
+<p>Characters '-' and '.' are allowed as name characters.</p>
+</item>
+</ulist>
+</p>
+</div1>
+<inform-div1 id="sec-xml-and-sgml">
+<head>XML and SGML</head>
+
+<p>XML is designed to be a subset of SGML, in that every
+<termref def="dt-valid">valid</termref> XML document should also be a
+conformant SGML document.
+For a detailed comparison of the additional restrictions that XML places on
+documents beyond those of SGML, see <bibref ref='Clark'/>.
+</p>
+</inform-div1>
+<inform-div1 id="sec-entexpand">
+<head>Expansion of Entity and Character References</head>
+<p>This appendix contains some examples illustrating the
+sequence of entity- and character-reference recognition and
+expansion, as specified in <specref ref='entproc'/>.</p>
+<p>
+If the DTD contains the declaration
+<eg><![CDATA[<!ENTITY example "<p>An ampersand (&#38;#38;) may be escaped
+numerically (&#38;#38;#38;) or with a general entity
+(&amp;amp;).</p>" >
+]]></eg>
+then the XML processor will recognize the character references
+when it parses the entity declaration, and resolve them before
+storing the following string as the
+value of the entity "<code>example</code>":
+<eg><![CDATA[<p>An ampersand (&#38;) may be escaped
+numerically (&#38;#38;) or with a general entity
+(&amp;amp;).</p>
+]]></eg>
+A reference in the document to "<code>&amp;example;</code>"
+will cause the text to be reparsed, at which time the
+start- and end-tags of the "<code>p</code>" element will be recognized
+and the three references will be recognized and expanded,
+resulting in a "<code>p</code>" element with the following content
+(all data, no delimiters or markup):
+<eg><![CDATA[An ampersand (&) may be escaped
+numerically (&#38;) or with a general entity
+(&amp;).
+]]></eg>
+</p>
+<p>A more complex example will illustrate the rules and their
+effects fully. In the following example, the line numbers are
+solely for reference.
+<eg><![CDATA[1 <?xml version='1.0'?>
+2 <!DOCTYPE test [
+3 <!ELEMENT test (#PCDATA) >
+4 <!ENTITY % xx '&#37;zz;'>
+5 <!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >' >
+6 %xx;
+7 ]>
+8 <test>This sample shows a &tricky; method.</test>
+]]></eg>
+This produces the following:
+<ulist spacing="compact">
+<item><p>in line 4, the reference to character 37 is expanded immediately,
+and the parameter entity "<code>xx</code>" is stored in the symbol
+table with the value "<code>%zz;</code>". Since the replacement text
+is not rescanned, the reference to parameter entity "<code>zz</code>"
+is not recognized. (And it would be an error if it were, since
+"<code>zz</code>" is not yet declared.)</p></item>
+<item><p>in line 5, the character reference "<code>&amp;#60;</code>" is
+expanded immediately and the parameter entity "<code>zz</code>" is
+stored with the replacement text
+"<code>&lt;!ENTITY tricky "error-prone" ></code>",
+which is a well-formed entity declaration.</p></item>
+<item><p>in line 6, the reference to "<code>xx</code>" is recognized,
+and the replacement text of "<code>xx</code>" (namely
+"<code>%zz;</code>") is parsed. The reference to "<code>zz</code>"
+is recognized in its turn, and its replacement text
+("<code>&lt;!ENTITY tricky "error-prone" ></code>") is parsed.
+The general entity "<code>tricky</code>" has now been
+declared, with the replacement text "<code>error-prone</code>".</p></item>
+<item><p>
+in line 8, the reference to the general entity "<code>tricky</code>" is
+recognized, and it is expanded, so the full content of the
+"<code>test</code>" element is the self-describing (and ungrammatical) string
+<emph>This sample shows a error-prone method.</emph>
+</p></item>
+</ulist>
+</p>
+</inform-div1>
+<inform-div1 id="determinism">
+<head>Deterministic Content Models</head>
+<p><termref def='dt-compat'>For compatibility</termref>, it is
+required
+that content models in element type declarations be deterministic.
+</p>
+<!-- FINAL EDIT: WebSGML allows ambiguity? -->
+<p>SGML
+requires deterministic content models (it calls them
+"unambiguous"); XML processors built using SGML systems may
+flag non-deterministic content models as errors.</p>
+<p>For example, the content model <code>((b, c) | (b, d))</code> is
+non-deterministic, because given an initial <code>b</code> the parser
+cannot know which <code>b</code> in the model is being matched without
+looking ahead to see which element follows the <code>b</code>.
+In this case, the two references to
+<code>b</code> can be collapsed
+into a single reference, making the model read
+<code>(b, (c | d))</code>. An initial <code>b</code> now clearly
+matches only a single name in the content model. The parser doesn't
+need to look ahead to see what follows; either <code>c</code> or
+<code>d</code> would be accepted.</p>
+<p>More formally: a finite state automaton may be constructed from the
+content model using the standard algorithms, e.g. algorithm 3.5
+in section 3.9
+of Aho, Sethi, and Ullman <bibref ref='Aho'/>.
+In many such algorithms, a follow set is constructed for each
+position in the regular expression (i.e., each leaf
+node in the
+syntax tree for the regular expression);
+if any position has a follow set in which
+more than one following position is
+labeled with the same element type name,
+then the content model is in error
+and may be reported as an error.
+</p>
+<p>Algorithms exist which allow many but not all non-deterministic
+content models to be reduced automatically to equivalent deterministic
+models; see Brüggemann-Klein 1991 <bibref ref='ABK'/>.</p>
+</inform-div1>
+<inform-div1 id="sec-guessing">
+<head>Autodetection of Character Encodings</head>
+<p>The XML encoding declaration functions as an internal label on each
+entity, indicating which character encoding is in use. Before an XML
+processor can read the internal label, however, it apparently has to
+know what character encoding is in use&mdash;which is what the internal label
+is trying to indicate. In the general case, this is a hopeless
+situation. It is not entirely hopeless in XML, however, because XML
+limits the general case in two ways: each implementation is assumed
+to support only a finite set of character encodings, and the XML
+encoding declaration is restricted in position and content in order to
+make it feasible to autodetect the character encoding in use in each
+entity in normal cases. Also, in many cases other sources of information
+are available in addition to the XML data stream itself.
+Two cases may be distinguished,
+depending on whether the XML entity is presented to the
+processor without, or with, any accompanying
+(external) information. We consider the first case first.
+</p>
+<p>
+Because each XML entity not in UTF-8 or UTF-16 format <emph>must</emph>
+begin with an XML encoding declaration, in which the first characters
+must be '<code>&lt;?xml</code>', any conforming processor can detect,
+after two to four octets of input, which of the following cases apply.
+In reading this list, it may help to know that in UCS-4, '&lt;' is
+"<code>#x0000003C</code>" and '?' is "<code>#x0000003F</code>", and the Byte
+Order Mark required of UTF-16 data streams is "<code>#xFEFF</code>".</p>
+<p>
+<ulist>
+<item>
+<p><code>00 00 00 3C</code>: UCS-4, big-endian machine (1234 order)</p>
+</item>
+<item>
+<p><code>3C 00 00 00</code>: UCS-4, little-endian machine (4321 order)</p>
+</item>
+<item>
+<p><code>00 00 3C 00</code>: UCS-4, unusual octet order (2143)</p>
+</item>
+<item>
+<p><code>00 3C 00 00</code>: UCS-4, unusual octet order (3412)</p>
+</item>
+<item>
+<p><code>FE FF</code>: UTF-16, big-endian</p>
+</item>
+<item>
+<p><code>FF FE</code>: UTF-16, little-endian</p>
+</item>
+<item>
+<p><code>00 3C 00 3F</code>: UTF-16, big-endian, no Byte Order Mark
+(and thus, strictly speaking, in error)</p>
+</item>
+<item>
+<p><code>3C 00 3F 00</code>: UTF-16, little-endian, no Byte Order Mark
+(and thus, strictly speaking, in error)</p>
+</item>
+<item>
+<p><code>3C 3F 78 6D</code>: UTF-8, ISO 646, ASCII, some part of ISO 8859,
+Shift-JIS, EUC, or any other 7-bit, 8-bit, or mixed-width encoding
+which ensures that the characters of ASCII have their normal positions,
+width,
+and values; the actual encoding declaration must be read to
+detect which of these applies, but since all of these encodings
+use the same bit patterns for the ASCII characters, the encoding
+declaration itself may be read reliably
+</p>
+</item>
+<item>
+<p><code>4C 6F A7 94</code>: EBCDIC (in some flavor; the full
+encoding declaration must be read to tell which code page is in
+use)</p>
+</item>
+<item>
+<p>other: UTF-8 without an encoding declaration, or else
+the data stream is corrupt, fragmentary, or enclosed in
+a wrapper of some kind</p>
+</item>
+</ulist>
+</p>
+<p>
+This level of autodetection is enough to read the XML encoding
+declaration and parse the character-encoding identifier, which is
+still necessary to distinguish the individual members of each family
+of encodings (e.g. to tell UTF-8 from 8859, and the parts of 8859
+from each other, or to distinguish the specific EBCDIC code page in
+use, and so on).
+</p>
+<p>
+Because the contents of the encoding declaration are restricted to
+ASCII characters, a processor can reliably read the entire encoding
+declaration as soon as it has detected which family of encodings is in
+use. Since in practice, all widely used character encodings fall into
+one of the categories above, the XML encoding declaration allows
+reasonably reliable in-band labeling of character encodings, even when
+external sources of information at the operating-system or
+transport-protocol level are unreliable.
+</p>
+<p>
+Once the processor has detected the character encoding in use, it can
+act appropriately, whether by invoking a separate input routine for
+each case, or by calling the proper conversion function on each
+character of input.
+</p>
+<p>
+Like any self-labeling system, the XML encoding declaration will not
+work if any software changes the entity's character set or encoding
+without updating the encoding declaration. Implementors of
+character-encoding routines should be careful to ensure the accuracy
+of the internal and external information used to label the entity.
+</p>
+<p>The second possible case occurs when the XML entity is accompanied
+by encoding information, as in some file systems and some network
+protocols.
+When multiple sources of information are available,
+
+their relative
+priority and the preferred method of handling conflict should be
+specified as part of the higher-level protocol used to deliver XML.
+Rules for the relative priority of the internal label and the
+MIME-type label in an external header, for example, should be part of the
+RFC document defining the text/xml and application/xml MIME types. In
+the interests of interoperability, however, the following rules
+are recommended.
+<ulist>
+<item><p>If an XML entity is in a file, the Byte-Order Mark
+and encoding-declaration PI are used (if present) to determine the
+character encoding. All other heuristics and sources of information
+are solely for error recovery.
+</p></item>
+<item><p>If an XML entity is delivered with a
+MIME type of text/xml, then the <code>charset</code> parameter
+on the MIME type determines the
+character encoding method; all other heuristics and sources of
+information are solely for error recovery.
+</p></item>
+<item><p>If an XML entity is delivered
+with a
+MIME type of application/xml, then the Byte-Order Mark and
+encoding-declaration PI are used (if present) to determine the
+character encoding. All other heuristics and sources of
+information are solely for error recovery.
+</p></item>
+</ulist>
+These rules apply only in the absence of protocol-level documentation;
+in particular, when the MIME types text/xml and application/xml are
+defined, the recommendations of the relevant RFC will supersede
+these rules.
+</p>
+
+</inform-div1>
+
+<inform-div1 id="sec-xml-wg">
+<head>W3C XML Working Group</head>
+
+<p>This specification was prepared and approved for publication by the
+W3C XML Working Group (WG). WG approval of this specification does
+not necessarily imply that all WG members voted for its approval.
+The current and former members of the XML WG are:</p>
+
+<orglist>
+<member><name>Jon Bosak, Sun</name><role>Chair</role></member>
+<member><name>James Clark</name><role>Technical Lead</role></member>
+<member><name>Tim Bray, Textuality and Netscape</name><role>XML Co-editor</role></member>
+<member><name>Jean Paoli, Microsoft</name><role>XML Co-editor</role></member>
+<member><name>C. M. Sperberg-McQueen, U. of Ill.</name><role>XML
+Co-editor</role></member>
+<member><name>Dan Connolly, W3C</name><role>W3C Liaison</role></member>
+<member><name>Paula Angerstein, Texcel</name></member>
+<member><name>Steve DeRose, INSO</name></member>
+<member><name>Dave Hollander, HP</name></member>
+<member><name>Eliot Kimber, ISOGEN</name></member>
+<member><name>Eve Maler, ArborText</name></member>
+<member><name>Tom Magliery, NCSA</name></member>
+<member><name>Murray Maloney, Muzmo and Grif</name></member>
+<member><name>Makoto Murata, Fuji Xerox Information Systems</name></member>
+<member><name>Joel Nava, Adobe</name></member>
+<member><name>Conleth O'Connell, Vignette</name></member>
+<member><name>Peter Sharpe, SoftQuad</name></member>
+<member><name>John Tigue, DataChannel</name></member>
+</orglist>
+
+</inform-div1>
+</back>
+</spec>
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-default-dtd-file:"~/sgml/spec.ced"
+sgml-omittag:t
+sgml-shorttag:t
+End:
+-->
diff --git a/test/valid/dia.xml b/test/valid/dia.xml
new file mode 100644
index 0000000..3ab3d06
--- /dev/null
+++ b/test/valid/dia.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0"?>
+<!DOCTYPE dia:diagram [
+<!ELEMENT dia:diagram (dia:diagramdata, (dia:layer)*) >
+<!ATTLIST dia:diagram
+ xmlns:dia CDATA #FIXED "http://www.lysator.liu.se/~alla/dia/">
+
+
+<!ELEMENT dia:diagramdata (dia:attribute)* >
+
+<!ELEMENT dia:layer (dia:object | dia:group)*>
+<!ATTLIST dia:layer
+ dia:name CDATA #REQUIRED
+ dia:visible (true|false) #REQUIRED >
+
+<!ELEMENT dia:object ((dia:attribute)*, dia:connections?)>
+<!ATTLIST dia:object
+ dia:type CDATA #REQUIRED
+ dia:version NMTOKEN #REQUIRED
+ dia:id ID #REQUIRED >
+
+<!ELEMENT dia:connections (dia:connection)*>
+
+<!ELEMENT dia:connection EMPTY>
+<!ATTLIST dia:connection
+ dia:handle NMTOKEN #REQUIRED
+ dia:to IDREF #REQUIRED
+ dia:connection NMTOKEN #REQUIRED>
+
+<!ELEMENT dia:group (dia:object | dia:group)*>
+
+<!ELEMENT dia:attribute (dia:composite | dia:int | dia:enum | dia:real | dia:boolean |
+ dia:color | dia:point | dia:rectangle | dia:string | dia:font)*>
+<!ATTLIST dia:attribute dia:name CDATA #REQUIRED >
+
+<!ELEMENT dia:composite (dia:attribute)*>
+<!ATTLIST dia:composite dia:type CDATA #IMPLIED>
+
+<!ELEMENT dia:int EMPTY>
+<!ATTLIST dia:int dia:val NMTOKEN #REQUIRED>
+
+<!ELEMENT dia:enum EMPTY>
+<!ATTLIST dia:enum dia:val NMTOKEN #REQUIRED>
+
+<!ELEMENT dia:real EMPTY>
+<!ATTLIST dia:real dia:val CDATA #REQUIRED>
+
+<!ELEMENT dia:boolean EMPTY>
+<!ATTLIST dia:boolean dia:val (true|false) #REQUIRED>
+
+<!ELEMENT dia:color EMPTY>
+<!ATTLIST dia:color dia:val CDATA #REQUIRED>
+
+<!ELEMENT dia:point EMPTY>
+<!ATTLIST dia:point dia:val CDATA #REQUIRED>
+
+<!ELEMENT dia:rectangle EMPTY>
+<!ATTLIST dia:rectangle dia:val CDATA #REQUIRED>
+
+<!ELEMENT dia:string EMPTY>
+<!ATTLIST dia:string dia:val CDATA #IMPLIED>
+
+<!ELEMENT dia:font EMPTY>
+<!ATTLIST dia:font dia:name CDATA #REQUIRED>
+]>
+
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute dia:name="background">
+ <dia:color dia:val="#ffffff"/>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer dia:name="Background" dia:visible="true">
+ <dia:object dia:type="Standard - Line" dia:version="0" dia:id="O0">
+ <dia:attribute dia:name="obj_pos">
+ <dia:point dia:val="1.95,6.85"/>
+ </dia:attribute>
+ <dia:attribute dia:name="obj_bb">
+ <dia:rectangle dia:val="1.9,6.8;11,8.55"/>
+ </dia:attribute>
+ <dia:attribute dia:name="conn_endpoints">
+ <dia:point dia:val="1.95,6.85"/>
+ <dia:point dia:val="10.95,8.5"/>
+ </dia:attribute>
+ <dia:attribute dia:name="line_color">
+ <dia:color dia:val="#000000"/>
+ </dia:attribute>
+ <dia:attribute dia:name="line_width">
+ <dia:real dia:val="0.1"/>
+ </dia:attribute>
+ <dia:attribute dia:name="line_style">
+ <dia:enum dia:val="0"/>
+ </dia:attribute>
+ <dia:attribute dia:name="start_arrow">
+ <dia:enum dia:val="0"/>
+ </dia:attribute>
+ <dia:attribute dia:name="end_arrow">
+ <dia:enum dia:val="0"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection dia:handle="1" dia:to="O2" dia:connection="3"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object dia:type="Standard - Text" dia:version="0" dia:id="O1">
+ <dia:attribute dia:name="obj_pos">
+ <dia:point dia:val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute dia:name="obj_bb">
+ <dia:rectangle dia:val="2.579,3.96359;7.021,4.96359"/>
+ </dia:attribute>
+ <dia:attribute dia:name="text">
+ <dia:composite dia:type="text">
+ <dia:attribute dia:name="string">
+ <dia:string dia:val="sdfsdfg"/>
+ </dia:attribute>
+ <dia:attribute dia:name="font">
+ <dia:font dia:name="Courier"/>
+ </dia:attribute>
+ <dia:attribute dia:name="height">
+ <dia:real dia:val="1"/>
+ </dia:attribute>
+ <dia:attribute dia:name="pos">
+ <dia:point dia:val="4.8,4.75"/>
+ </dia:attribute>
+ <dia:attribute dia:name="color">
+ <dia:color dia:val="#000000"/>
+ </dia:attribute>
+ <dia:attribute dia:name="alignment">
+ <dia:enum dia:val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ </dia:object>
+ <dia:object dia:type="Standard - Box" dia:version="0" dia:id="O2">
+ <dia:attribute dia:name="obj_pos">
+ <dia:point dia:val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute dia:name="obj_bb">
+ <dia:rectangle dia:val="10.9,7.45;13.05,9.55"/>
+ </dia:attribute>
+ <dia:attribute dia:name="elem_corner">
+ <dia:point dia:val="10.95,7.5"/>
+ </dia:attribute>
+ <dia:attribute dia:name="elem_width">
+ <dia:real dia:val="2.05"/>
+ </dia:attribute>
+ <dia:attribute dia:name="elem_height">
+ <dia:real dia:val="2"/>
+ </dia:attribute>
+ <dia:attribute dia:name="border_width">
+ <dia:real dia:val="0.1"/>
+ </dia:attribute>
+ <dia:attribute dia:name="border_color">
+ <dia:color dia:val="#000000"/>
+ </dia:attribute>
+ <dia:attribute dia:name="inner_color">
+ <dia:color dia:val="#ffffff"/>
+ </dia:attribute>
+ <dia:attribute dia:name="line_style">
+ <dia:enum dia:val="0"/>
+ </dia:attribute>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/test/valid/dtds/127772.dtd b/test/valid/dtds/127772.dtd
new file mode 100644
index 0000000..873fb35
--- /dev/null
+++ b/test/valid/dtds/127772.dtd
@@ -0,0 +1,7 @@
+<!ELEMENT a (b*)>
+
+<!ELEMENT b (#PCDATA)>
+<!ATTLIST b xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink'
+ xlink:type (simple) #FIXED 'simple'
+ xlink:href CDATA #IMPLIED>
+
diff --git a/test/valid/dtds/NewsMLv1.0.dtd b/test/valid/dtds/NewsMLv1.0.dtd
new file mode 100644
index 0000000..5799b29
--- /dev/null
+++ b/test/valid/dtds/NewsMLv1.0.dtd
@@ -0,0 +1,1578 @@
+<!--
+ ===========================================
+ NewsML Document Type Definition Version 1.0
+ ===========================================
+ International Press Telecommunications Council
+ 6 October 2000
+ Copyright (c) IPTC, 2000
+ All rights reserved
+ NewsML is a trademark of IPTC
+
+ ======================================
+ DO NOT REMOVE THESE LICENCE CONDITIONS
+ ======================================
+ LICENCE OF THE IPTC NewsML TRADEMARK TO NON-MEMBERS OF THE IPTC
+
+Use of the IPTC trademark shall be licensed by the IPTC ("the Licensor") to a
+Non-Member ("the Licensee") in consideration of the following obligations
+undertaken by the Licensee under the terms of this contract.
+
+ 1. The Licensee recognises the Licensor as the sole owner of the intellectual
+ property protected by the trademark.
+
+ 2. The Licensee recognises that the Licensor has the right to grant licenses
+ of the intellectual property protected by the trademark and has agreed to
+ grant such a licence to the Licensee in the terms set out in this contract.
+
+ 3. The Licensee shall not during the subsistence of this contract or at any
+ future time register to use in its own name as proprietor any of the
+ intellectual property protected by the trademark.
+
+ 4. The Licensee shall not claim any right title or interest in the
+ intellectual property or any part of it save as is granted by this contract.
+
+ 5. The Licensee shall immediately call to the attention of the Licensor the use
+ of any part of the intellectual property by any third party or any activity
+ of any third party which might in the opinion of the Licensee amount to
+ infringement of the rights protected by the trademark.
+
+ 6. The Licensee shall not assign the benefit of this contract or grant any
+ sub-licence without the prior written consent of the Licensor.
+
+ 7. Use of the IPTC trademark is licensed only to those Licensees who comply
+ with the requirements of the official published description of NewsML.
+
+ 8. The Licensee promises to respect the integrity and quality standard of the
+ trademark and shall refrain from all acts and omissions which threaten the
+ integrity of the trademark as a mark of quality.
+
+ 9. The Licensee shall communicate immediately to the IPTC any instances of
+ actual or suspected misuse or non-compliance with the official published
+ description of NewsML which come to the attention of the Licensee.
+
+10. The Licensee shall, at the request of the IPTC Management Committee acting
+ unanimously, accede to any reasonable request of the IPTC to inspect the
+ address of the Licensee to verify compliance and each Licensee shall afford
+ to the IPTC such assistance as is requested by the IPTC in response to the
+ latter's reasonable enquiries in instances of suspected non-compliance with
+ the official published description of NewsML requirements.
+
+The Licensee shall from time to time provide the IPTC with the full address of
+its place of business and that place will be deemed the Licensee's address.
+
+The IPTC reserves the right to terminate the use of the trademark by the
+Licensee at any time without notice or without the need to give reasons to the
+Licensee for such termination.
+
+This contract shall be governed and construed in accordance with the laws of
+England and Wales whose courts shall be courts of competent jurisdiction.
+-->
+<!--
+ ================
+ NOTE ON SPELLING
+ ================
+NewsML element and attribute names use US-English spellings. With this
+exception, this DTD and its accompanying specification use British English
+spellings.
+-->
+<!--
+ =============================
+ PARAMETER ENTITY DECLARATIONS
+ =============================
+-->
+<!--
+================================================================================
+ Attribute sets
+================================================================================
+-->
+<!--
+================================== assignment ==================================
+AssignedBy
+==========
+An identifier for the party assigning a piece of metadata. This can be a
+string that designates the party informally (for example, a person's name),
+or a pointer in the form a fragment identifier consisting of a # character
+followed by the Duid of a Topic corresponding to the party.
+
+Importance
+==========
+An indication of the importance the party assigning a piece of metadata
+attaches to it. The value of the Importance attribute is a formal name for a
+level of importance. Its meaning and permitted values are determined by a
+controlled vocabulary.
+
+Confidence
+==========
+An indication of the confidence with which a piece of metadata has been
+assigned. The value of the Confidence attribute is a formal name for a
+degree of confidence. Its meaning and permitted values are determined by a
+controlled vocabulary.
+
+HowPresent
+==========
+An indication of the way in which a piece of metadata applies. The value of
+the HowPresent attribute is a formal name for the way the metadata applies.
+Its meaning and permitted values are determined by a controlled vocabulary.
+
+DateAndTime
+===========
+The date and (optionally) time at which a piece of metadata was assigned.
+
+Uses the format CCYYMMDDTHHMMSS{+or-}HHMM (century, year, month, day, time
+separator, hours, minutes, seconds, timezone separator, hours, minutes). If
+only the Date is needed, then the substring from T onwards may be omitted.
+
+This is the Basic Format defined by ISO 8601. CCYY is a 4-digit year number.
+MM is a 2-digit month number. DD is a 2-digit day number. T is the letter 'T'.
+HH is a 2-digit hour number (using a 24-hour clock). MM is a 2 digit minute
+number. (Note that midnight may be represented as 2400 or 240000 on the date
+of the day that is ending, or as 0000 or 000000 on the date of the day that is
+beginning.)
+
+{+or-} is the '+' character or the '-' character, and the following HHMM are
+hours and minutes of offset from Universal Co-ordinated Time (UTC) as defined
+by ISO 8601. If the time is being expressed in UTC, then the timezone offset
+may be '+0000' or '-0000'. If the time is behind UTC, the timezone separator
+is '-'. If the time is ahead of UTC the timezone separator is '+'.
+
+Example: 10:27 p.m. in New York on 31 December 2000 would be expressed as
+"20001231T222700-0500" as New York is five hours behind UTC in winter.
+At the same moment in London, the date and time would be expressed as
+time would be expressed as "20010101T032700+0000" or as , "20010101T00+0000", as
+in London, it is now 3:27 a.m. on 1 January 2001. At the same moment in Paris,
+the date and time would be expressed as "20010101T042700+0100", as Paris is one
+hour ahead of UTC in winter, and it is now 4:27 a.m. on 1 January 2001.
+================================================================================
+
+-->
+<!ENTITY % assignment " AssignedBy CDATA #IMPLIED
+ Importance CDATA #IMPLIED
+ Confidence CDATA #IMPLIED
+ HowPresent CDATA #IMPLIED
+ DateAndTime CDATA #IMPLIED">
+
+<!--
+================================= formalname ===================================
+
+FormalName
+==========
+A string of characters whose meaning is determined by a controlled vocabulary.
+
+Vocabulary
+==========
+The Vocabulary attribute, if present, provides a pointer to a TopicSet which is
+the controlled vocabulary that can be used to resolve the meaning of the
+FormalName. The value of the Vocabulary attribute is an http URL or a NewsML
+URN, or the # character followed by the value of the Duid attribute of the a
+TopicSet in the current document.
+
+If there is no Vocabulary attribute, then the controlled vocabulary to be used
+is located by the following algorithm:
+- Proceed to the parent of the current element.
+- If it has a Catalog element as its immediate child, see whether that Catalog
+ contains a Resource element whose DefaultVocabularyFor child contains an XPath
+ pattern that is matched by the current element. If so, then the controlled
+ vocabulary is the resource identified by that Resource element.
+- If the parent does not meet the above condition, proceed to its parent and
+ check the same condition.
+- Continue until a vocabulary is found, or no further parent elements are
+ available because the root element has been reached and it too fails to meet
+ the condition.
+
+If there is no Vocabulary attribute and the above algorithm fails to identify
+a resource that serves as the controlled vocabulary, there is an error, which
+the NewsML system may signal to the user.
+
+The NewsML system may also signal an error if a vocabulary is successfully
+identified, but it contains no item that matches the value of the FormalName
+whose meaning is sought.
+
+Scheme
+======
+The Scheme attribute, if present, serves to distinguish which of possibly
+multiple naming schemes in the controlled vocabulary is the one that governs
+this FormalName. For a match to be obtained within the controlled vocabulary,
+the rule is that the FormalName and the Scheme must both match. If there is
+no Scheme attribute on the current element, the match will be to an item in
+the vocabulary that has the current formal name and no scheme. If there is a
+Scheme attribute on the current element, then both the formal name and the
+scheme in the controlled vocabulary must match.
+================================================================================
+-->
+<!ENTITY % formalname " FormalName CDATA #REQUIRED
+ Vocabulary CDATA #IMPLIED
+ Scheme CDATA #IMPLIED">
+
+<!--
+=================================== localid ====================================
+
+Duid
+====
+Duid is a "Document-unique Identifier". It must satisfy the rules for XML ID
+attributes: it must only contain name characters, and it must start with a
+name-start character (not a digit). Its value must be unique within any NewsML
+document.
+
+Every NewsML element type has Duid as an optional attribute. Combined with the
+Identifier element, providing a value for the Duid of any element in a NewsML
+document makes the element globally identifiable. The Identifier element gives
+global identification to the document, and the Duid provides local
+identification for the element within the document.
+
+Euid
+====
+Euid is an "Element-unique Identifier". Its value must be unique among elements
+of the same element-type and having the same parent element.
+
+Use of Euid attribute makes it possible to identify any NewsML element within
+the context of its local branch of the NewsML document tree. This makes it
+possible to copy, or include by reference, subtrees into new combinations in
+ways that would break the uniqueness of Duids (thereby forcing new Duids to be
+allocated), but still being able to retain the identity of each element. If
+Euids are maintained at every level, it is possible to identify, for example
+"The ContentItem whose Euid is abc within the NewsComponent whose Euid is def".
+Such identification patterns would be preserved even after "pruning and
+grafting" of subtrees.
+================================================================================
+-->
+<!ENTITY % localid " Duid ID #IMPLIED
+ Euid CDATA #IMPLIED">
+
+<!--
+================================================================================
+ Content Models
+================================================================================
+-->
+<!--
+===================================== data =====================================
+Where data is included, it may be directly in the form of a DataContent element,
+or in the form of DataContent wrapped in an Encoding element, or by reference
+through an Href attribute, in which case neither a DataContent nor an Encoding
+element will be present.
+================================================================================
+-->
+<!ENTITY % data " (Encoding
+ | DataContent )?">
+
+<!--
+==================================== party =====================================
+Person, organisation or company playing a specific role in the
+news workflow. The role being played is determined by the parent element. More
+information about it can be provided in the optional Comment subelements.
+================================================================================
+
+-->
+<!ENTITY % party " (Comment*
+ , Party+ )">
+
+<!--
+ =========================
+ ELEMENT TYPE DECLARATIONS
+ =========================
+-->
+<!--
+============================ AdministrativeMetadata ============================
+Information about the provenance of a NewsComponent.
+================================================================================
+-->
+<!ELEMENT AdministrativeMetadata (Catalog? , FileName? , SystemIdentifier? , Provider? , Creator? , Source* , Contributor* , Property* )>
+<!ATTLIST AdministrativeMetadata %localid; >
+<!--
+
+================================ AssociatedWith ================================
+A reference to a NewsItem with which this one is associated (for example, a
+series of articles, or a collection of photos, of which it is a part). The
+NewsItem attribute identifies the relevant NewsItem. Its value can be an
+http URL or a NewsML URN as described in the comment to PublicIdentifier. The
+Comment can be used to indicate the nature of the association.
+================================================================================
+
+-->
+<!ELEMENT AssociatedWith (Comment* )>
+<!ATTLIST AssociatedWith %localid;
+ NewsItem CDATA #IMPLIED >
+<!--
+================================ BasisForChoice ================================
+The content of this element is an XPath statement or element-type name
+identifying information within each NewsComponent or ContentItem that can be
+used as a basis for choice between equivalent NewsComponents or ContentItems.
+The root of the XPath corresponds to the NewsComponent or ContentItem itself.
+The optional Rank attribute allows providers to place a numerical order on the
+importance they think should be attached to the different bases for choice.
+Smaller numbers represent higher importance.
+================================================================================
+-->
+<!ELEMENT BasisForChoice (#PCDATA )>
+<!ATTLIST BasisForChoice %localid;
+ Rank CDATA #IMPLIED >
+<!--
+
+==================================== ByLine ====================================
+A natural-language statement of the author/creator information.
+================================================================================
+-->
+<!ELEMENT ByLine (#PCDATA | Origin )*>
+<!ATTLIST ByLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+=================================== Catalog ====================================
+A container for Resource and TopicUse elements. Resource elements map URNs to
+URLs and indicate default vocabularies which apply to the formal names of
+certain elements within the subtree that begins with the immediate parent of
+the Catalog element. TopicUse elements indicate where in the NewsML document
+certain Topics are used. The optional Href attribute provides a pointer to
+a Catalog element elsewhere in this or another document. Its value consists of
+a # character followed by the value of the Duid attribute of the referenced
+Catalog element and preceded, if the referenced Catalog is not in the current
+document, by an http URL or a NewsML URN identifying the document or NewsItem
+in which the Catalog appears. If the Href attribute is present on a Catalog
+element, then that element should be empty. If it contains subelements, the
+NewsML system may signal an error.
+================================================================================
+-->
+<!ELEMENT Catalog (Resource* , TopicUse* )>
+<!ATTLIST Catalog %localid;
+ Href CDATA #IMPLIED >
+<!--
+=============================== Characteristics ================================
+Information about the physical characteristics of a ContentItem.
+================================================================================
+-->
+<!ELEMENT Characteristics (SizeInBytes? , Property* )>
+<!ATTLIST Characteristics %localid; >
+<!--
+=================================== Comment ====================================
+A natural-language description of, or statement about, the current element. The
+optional TranslationOf attribute is a pointer to another Comment element, of
+which this one is a direct translation.
+================================================================================
+-->
+<!ELEMENT Comment (#PCDATA )>
+<!ATTLIST Comment %localid;
+ xml:lang CDATA #IMPLIED
+ TranslationOf IDREF #IMPLIED >
+<!--
+================================= ContentItem ==================================
+A news object that carries or identifies content intended for presentation to
+humans.
+================================================================================
+-->
+<!ELEMENT ContentItem (Comment* , Catalog? , MediaType? , Format? , MimeType? , Notation? , Characteristics? , %data; )>
+<!ATTLIST ContentItem %localid;
+ Href CDATA #IMPLIED >
+<!--
+================================= Contributor ==================================
+An individual and/or company or organisation that modified or enhanced a news
+object after its creation.
+================================================================================
+-->
+<!ELEMENT Contributor (%party; )>
+<!ATTLIST Contributor %localid; >
+<!--
+================================== Copyright ===================================
+The copyright that pertains to a news object.
+================================================================================
+-->
+<!ELEMENT Copyright (Comment* , CopyrightHolder , CopyrightDate )>
+<!ATTLIST Copyright %localid;
+ %assignment; >
+<!--
+================================ CopyrightDate =================================
+A natural-language statement of the copyright date.
+================================================================================
+
+-->
+<!ELEMENT CopyrightDate (#PCDATA | Origin )*>
+<!ATTLIST CopyrightDate %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+=============================== CopyrightHolder ================================
+A natural-language statement indicating who owns the copyright.
+================================================================================
+-->
+<!ELEMENT CopyrightHolder (#PCDATA | Origin )*>
+<!ATTLIST CopyrightHolder %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================ CopyrightLine =================================
+A natural-language statement of the copyright information.
+================================================================================
+-->
+<!ELEMENT CopyrightLine (#PCDATA | Origin )*>
+<!ATTLIST CopyrightLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+=================================== Creator ====================================
+An individual and/or company or organisation that created a news object.
+================================================================================
+-->
+<!ELEMENT Creator (%party; )>
+<!ATTLIST Creator %localid; >
+<!--
+================================== CreditLine ==================================
+A natural-language statement of credit information.
+================================================================================
+-->
+<!ELEMENT CreditLine (#PCDATA | Origin )*>
+<!ATTLIST CreditLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================= DataContent ==================================
+The data that carries the content of a ContentItem.
+================================================================================
+-->
+<!ELEMENT DataContent ANY>
+<!ATTLIST DataContent %localid; >
+<!--
+================================= DateAndTime ==================================
+A formal representation of a date and, optionally, time, expressed in ISO 8601
+Basic Format, as described in the comment to the DateAndTime attribute within
+the assignment ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT DateAndTime (#PCDATA )>
+<!ATTLIST DateAndTime %localid; >
+<!--
+==================================== DateId ====================================
+A date identifier of a NewsItem in short ISO 8601 Basic Format (CCYYMMDD), as
+described in the comment to the DateAndTime attribute within the assignment
+ENTITY declaration above. The DateId is part of the formal identification of the
+NewsItem, and must remain the same through successive revisions of the same
+NewsItem.
+================================================================================
+-->
+<!ELEMENT DateId (#PCDATA )>
+
+<!--
+================================== DateLabel ===================================
+A string representation of a date or date and time, used by human users to help
+identify a NewsItem.
+================================================================================
+-->
+<!ELEMENT DateLabel (#PCDATA )>
+<!ATTLIST DateLabel %localid; >
+<!--
+=================================== DateLine ===================================
+A natural-language statement of the date and/or place of creation.
+================================================================================
+-->
+<!ELEMENT DateLine (#PCDATA | Origin )*>
+<!ATTLIST DateLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+============================ DefaultVocabularyFor ==============================
+An indication that the parent Resource provides the default vocabulary that
+determines the meanings and permitted values of the data occurring in a
+particular part of a NewsML document subtree. The Context attribute is an
+XPath statement identifying the data to which the default vocabulary applies.
+The optional Scheme attribute identifies the relevant naming scheme if the
+Resource contains more than one naming scheme. If the Resource is a NewsML
+TopicSet, then the meaning of the data identified by the Context is provided
+by the Topic whose FormalName subelement matches that data. If the Resource is
+not a NewsML TopicSet, then the way in which it is interpreted in order to
+provide a meaning for the data is not defined by NewsML but by the authority
+that governs whatever format the Resource uses.
+
+Example:
+<DescriptiveMetadata>
+ <Catalog>
+ <Resource Duid="resource1">
+ <Urn>urn:newsml:iptc.org:20001006:Ranking:1</Urn>
+ <Url>www.iptc.com/vocabularies/iptc-rank.xml</Url>
+ <DefaultVocabularyFor Context="@Confidence"/>
+ <DefaultVocabularyFor Context="@Importance"/>
+ </Resource>
+ <Resource Duid="resource2">
+ <Urn>urn:newsml:iptc.org:20001006:TopicTypes:1</Urn>
+ <Url>www.iptc.com/vocabularies/iptc-topictype.xml</Url>
+ <DefaultVocabularyFor Context="TopicType@FormalName"/>
+ </Resource>
+ </Catalog>
+ <TopicSet>
+ <Topic Duid="topic1">
+ <TopicType FormalName="Person">
+ <Description Variant="Name">Bill Clinton</Description>
+ <Description Variant="Position">President of the USA</Description>
+ </Topic>
+ </TopicSet>
+ <TopicOccurrence
+ AssignedBy="Desk Editor"
+ Confidence="High"
+ HowPresent="principal subject"
+ Topic="#topic1"/>
+</DescriptiveMetadata>
+================================================================================
+-->
+<!ELEMENT DefaultVocabularyFor EMPTY>
+<!ATTLIST DefaultVocabularyFor %localid;
+ Context CDATA #REQUIRED
+ Scheme CDATA #IMPLIED >
+<!--
+==================================== Delete ====================================
+An instruction to delete an element within a NewsItem. The NewsItem is
+the previous revision of the current one, and the element to be deleted is the
+one whose Duid value is equal to the value of the Delete element's DuidRef
+attribute.
+================================================================================
+-->
+<!ELEMENT Delete EMPTY>
+<!ATTLIST Delete %localid;
+ DuidRef CDATA #REQUIRED >
+<!--
+================================= DerivedFrom ==================================
+A reference to an NewsItem from which this one is derived. The NewsItem attribute
+identifies the relevant NewsItem. Its value can be an http URL or a NewsML URN
+as described in the comment to PublicIdentifier.
+================================================================================
+-->
+<!ELEMENT DerivedFrom (Comment* )>
+<!ATTLIST DerivedFrom %localid;
+ NewsItem CDATA #IMPLIED >
+<!--
+================================= Description ==================================
+A description that identifies a Topic, thereby indicating the meaning of a
+formal name associated with that Topic. The xml:lang attribute indicates what
+language the description is in. The optional Variant attribute allows multiple
+descriptions to be given in the same language, and meaningfully distinguished
+from one another.
+================================================================================
+-->
+<!ELEMENT Description (#PCDATA )>
+<!ATTLIST Description %localid;
+ xml:lang CDATA #IMPLIED
+ Variant CDATA #IMPLIED >
+<!--
+============================= DescriptiveMetadata ==============================
+Information describing the content of a NewsComponent.
+================================================================================
+-->
+<!ELEMENT DescriptiveMetadata (Catalog? , Language* , Genre? , SubjectCode* , OfInterestTo* , TopicOccurrence* , Property* )>
+<!ATTLIST DescriptiveMetadata %localid;
+ %assignment; >
+<!--
+=================================== Encoding ===================================
+The encoding of the data comprising the content of a ContentItem.
+================================================================================
+-->
+<!ELEMENT Encoding %data;>
+<!ATTLIST Encoding %localid;
+ Notation CDATA #REQUIRED >
+<!--
+=================================== EndDate ====================================
+A natural-language statement of the date at which specified usage rights come
+to an end.
+================================================================================
+-->
+<!ELEMENT EndDate (#PCDATA | Origin )*>
+<!ATTLIST EndDate %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+=================================== FileName ===================================
+The suggested or actual storage file name for a NewsItem.
+================================================================================
+-->
+<!ELEMENT FileName (#PCDATA )>
+<!ATTLIST FileName %localid; >
+<!--
+================================= FirstCreated =================================
+The date and, optionally, time at which a NewsItem was first created, expressed
+in ISO 8601 Basic Format, as described in the comment to the DateAndTime
+attribute within the assignment ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT FirstCreated (#PCDATA )>
+<!ATTLIST FirstCreated %localid; >
+<!--
+================================= FormalName ===================================
+A string of characters whose meaning is determined by a naming scheme within a
+controlled vocabulary. The controlled vocabulary may (but is not required to)
+take the form of a NewsML TopicSet. The optional Scheme attribute determines
+which naming scheme applies, when several exist within the same controlled
+vocabulary.
+================================================================================
+-->
+<!ELEMENT FormalName (#PCDATA )>
+<!ATTLIST FormalName %localid;
+ Scheme CDATA #IMPLIED >
+<!--
+==================================== Format ====================================
+An indication of the format of a ContentItem. The value of the FormalName
+attribute is a formal name for the Format. Its meaning and permitted values are
+determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Format EMPTY>
+<!ATTLIST Format %localid;
+ %formalname; >
+<!--
+================================= FutureStatus =================================
+An indication of the status a NewsItem will have at a specified future date. The
+value of the FormalName attribute is a formal name for the FutureStatus. Its
+meaning is determined by a controlled vocabulary as described in the comment
+to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT FutureStatus EMPTY>
+<!ATTLIST FutureStatus %localid;
+ %formalname; >
+<!--
+==================================== Genre =====================================
+An indication of the Genre of a NewsComponent. The value of the FormalName
+attribute is a formal name for the Genre. Its meaning and permitted values are
+determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Genre EMPTY>
+<!ATTLIST Genre %localid;
+ %formalname;
+ %assignment; >
+<!--
+================================== Geography ===================================
+A natural-language statement of the geographical area or areas to which
+specified usage rights apply.
+================================================================================
+-->
+<!ELEMENT Geography (#PCDATA | Origin )*>
+<!ATTLIST Geography %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+=================================== HeadLine ===================================
+A displayable headline.
+================================================================================
+-->
+<!ELEMENT HeadLine (#PCDATA | Origin )*>
+<!ATTLIST HeadLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================ Identification ================================
+Identification information for the NewsItem.
+================================================================================
+-->
+<!ELEMENT Identification (NewsIdentifier , NameLabel? , DateLabel? , Label* )>
+<!ATTLIST Identification %localid; >
+<!--
+================================= InsertAfter ==================================
+An instruction to insert content after a designated element within a NewsItem.
+The content to be inserted is the content of the InsertAfter element. The
+NewsItem into which it is to be inserted is the previous revision of the current
+one, and the element after which it is to be inserted is the one whose Duid
+value is equal to the value of the InsertAfter element's DuidRef attribute.
+================================================================================
+-->
+<!ELEMENT InsertAfter ANY>
+<!ATTLIST InsertAfter %localid;
+ DuidRef CDATA #REQUIRED >
+<!--
+================================= InsertBefore =================================
+An instruction to insert content before a designated element within a NewsItem.
+The content to be inserted is the content of the InsertBefore element. The
+NewsItem into which it is to be inserted is the previous revision of the current
+one, and the element before which it is to be inserted is the one whose Duid
+value is equal to the value of the InsertBefore element's DuidRef attribute.
+================================================================================
+-->
+<!ELEMENT InsertBefore ANY>
+<!ATTLIST InsertBefore %localid;
+ DuidRef CDATA #REQUIRED >
+<!--
+================================= Instruction ==================================
+An instruction from a news provider to the recipient of a NewsItem. A special
+case of Instruction is an indication of the effect the current revision of a
+NewsItem has on the status of any previous revisions of the NewsItem that may
+still be on the recipient's system. In this case, it will contain one or more
+RevisionStatus elements. Otherwise, the value of the FormalName attribute is a
+formal name for the Instruction, and its meaning is determined by a controlled
+vocabulary as described in the comment to the formalname ENTITY declaration
+above.
+================================================================================
+-->
+<!ELEMENT Instruction (RevisionStatus* )>
+<!ATTLIST Instruction %localid;
+ %formalname; >
+<!--
+================================= KeywordLine ==================================
+A displayable set of keywords relevant to a news object. This can be used by a
+NewsML system to assist manual or automated searches.
+================================================================================
+-->
+<!ELEMENT KeywordLine (#PCDATA | Origin )*>
+<!ATTLIST KeywordLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+==================================== Label =====================================
+A human-readable label for a NewsItem.
+================================================================================
+-->
+<!ELEMENT Label (LabelType , LabelText )>
+<!ATTLIST Label %localid; >
+<!--
+=================================== LabelText ==================================
+The text that constitutes a Label of a given LabelType.
+================================================================================
+-->
+<!ELEMENT LabelText (#PCDATA )>
+<!ATTLIST LabelText %localid; >
+<!--
+================================= LabelType ====================================
+A user-defined type of label. The value of the FormalName attribute is a formal
+name for the LabelType. Its meaning and permitted values are determined by a
+controlled vocabulary as described in the comment to the formalname ENTITY
+declaration above.
+================================================================================
+-->
+<!ELEMENT LabelType EMPTY>
+<!ATTLIST LabelType %localid;
+ %formalname; >
+<!--
+=================================== Language ===================================
+An indication of the, or a, language used in a content item. The value of the
+FormalName attribute is a formal name for the Language. Its meaning and
+permitted values are determined by a controlled vocabulary as described in the
+comment to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Language EMPTY>
+<!ATTLIST Language %localid;
+ %formalname;
+ %assignment; >
+<!--
+================================= Limitations ==================================
+A natural-language statement of the terms and conditions that apply to the
+specified usage rights.
+================================================================================
+-->
+<!ELEMENT Limitations (#PCDATA | Origin )*>
+<!ATTLIST Limitations %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+================================== MediaType ===================================
+An indication of the media type of a ContentItem. The value of the FormalName
+attribute is a formal name for the MediaType. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT MediaType EMPTY>
+<!ATTLIST MediaType %localid;
+ %formalname; >
+<!--
+=================================== Metadata ===================================
+An container for a user-defined type of metadata.
+================================================================================
+-->
+<!ELEMENT Metadata (Catalog? , MetadataType , Property+ )>
+<!ATTLIST Metadata %localid; >
+<!--
+=============================== MetadataType ===================================
+An indication of the type of metadata that is represented by the Property
+elements within this Metadata element. The value of the FormalName attribute is
+a formal name for the MetadataType. Its meaning and permitted values are
+determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT MetadataType EMPTY>
+<!ATTLIST MetadataType %localid;
+ %formalname; >
+<!--
+=================================== MimeType ===================================
+An indication of the MIME-type of a ContentItem. The value of the FormalName
+attribute is a formal name for the MimeType. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT MimeType EMPTY>
+<!ATTLIST MimeType %localid;
+ %formalname; >
+<!--
+================================== NameLabel ===================================
+A string used by human users as a name to help identify a NewsItem. Its form is
+determined by the provider. It might be identical to the textual content of
+the SlugLine element, for example, but even if this is so, the system should not
+process the NameLabel as a slugline. Nothing can be assumed about the nature of
+the string within NameLabel beyond the fact that it can help to identify the
+NewsItem to humans.
+================================================================================
+-->
+<!ELEMENT NameLabel (#PCDATA )>
+<!ATTLIST NameLabel %localid; >
+<!--
+================================ NewsComponent =================================
+A container for news objects, used to identify the role of news objects in
+relation to one another, and to ascribe metadata to them. The Essential
+attribute indicates whether the provider considers that this NewsComponent
+is essential to the meaning of the NewsComponent within which it is contained.
+The EquivalentsList attribute indicates whether or not the NewsItems or
+NewsItemRefs, NewsComponents or ContentItems contained within this one are
+equivalent to one another in content and/or meaning
+================================================================================
+-->
+<!ELEMENT NewsComponent (Comment* , Catalog? , TopicSet* , Role? , BasisForChoice* , NewsLines? , AdministrativeMetadata? , RightsMetadata? , DescriptiveMetadata? , Metadata* , ( (NewsItem | NewsItemRef )+ | NewsComponent+ | ContentItem+ )? )>
+<!ATTLIST NewsComponent %localid;
+ Essential (yes | no ) 'no'
+ EquivalentsList (yes | no ) 'no'
+ xml:lang CDATA #IMPLIED >
+<!--
+================================= NewsEnvelope =================================
+Information about the transmission of one or more NewsItems as a NewsML
+document.
+================================================================================
+-->
+<!ELEMENT NewsEnvelope (TransmissionId? , SentFrom? , SentTo? , DateAndTime , NewsService* , NewsProduct* , Priority? )>
+<!ATTLIST NewsEnvelope %localid; >
+<!--
+================================ NewsIdentifier ================================
+A globally unique identifier for a NewsItem.
+================================================================================
+-->
+<!ELEMENT NewsIdentifier (ProviderId , DateId , NewsItemId , RevisionId , PublicIdentifier )>
+
+<!--
+=================================== NewsItem ===================================
+A managed set of information representing a point of view, at a given time, on
+some event or events. Its Identification and NewsManagement provide
+manageability. It may contain either a NewsComponent, or one or more Updates
+that modify aspects of a previous Revision of the same NewsItem, or a
+TopicSet.
+================================================================================
+-->
+<!ELEMENT NewsItem (Comment* , Catalog? , Identification , NewsManagement , (NewsComponent | Update+ | TopicSet )? )>
+<!ATTLIST NewsItem %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================== NewsItemId ==================================
+An identifier for the NewsItem. The combination of NewsItemId and DateId must
+be unique among NewsItems that emanate from the same provider. Within these
+constraints, the NewsItemId can take any form the provider wishes. It may take
+the form of a name for the NewsItem that will be meaningful to humans, but this
+is not a requirement. The provider may optionally relate the values of
+NewsItemId to a controlled vocabulary, which is invoked by the Vocabulary
+attribute. The value ofthe Vocabulary attribute may be an http URL, a NewsML
+URN, or the # character followed by the value of the Duid attribute of a
+TopicSet in the current document. The Scheme attribute, if present, serves to
+distinguish which of possibly multiple naming schemes in the controlled
+vocabulary is the one that governs the NewsItemId.
+================================================================================
+-->
+<!ELEMENT NewsItemId (#PCDATA )>
+<!ATTLIST NewsItemId Vocabulary CDATA #IMPLIED
+ Scheme CDATA #IMPLIED >
+<!--
+================================= NewsItemRef ==================================
+A pointer to a NewsItem that is deemed to replace the NewsItemRef element. The
+NewsItem attribute is a pointer to the relevant NewsItem. Its value can be an
+http URL, or a NewsML URN as described in the comment to PublicIdentifier, or a
+fragment identifier consisting of a # character followed by the Duid of a
+NewsItem in the current document.
+================================================================================
+-->
+<!ELEMENT NewsItemRef (Comment* )>
+<!ATTLIST NewsItemRef %localid;
+ NewsItem CDATA #IMPLIED >
+<!--
+================================= NewsItemType =================================
+An indication of the type of a NewsItem. The value of the FormalName attribute
+is a formal name for the NewsItemType. Its meaning and permitted values are
+determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT NewsItemType EMPTY>
+<!ATTLIST NewsItemType %localid;
+ %formalname; >
+<!--
+=================================== NewsLine ===================================
+A newsline of a type not included in the NewsML specification.
+================================================================================
+-->
+<!ELEMENT NewsLine (NewsLineType , NewsLineText+ )>
+<!ATTLIST NewsLine %localid; >
+<!--
+=================================== NewsLineText ===================================
+The text of a NewsLine of user-defined type.
+================================================================================
+-->
+<!ELEMENT NewsLineText (#PCDATA | Origin )*>
+<!ATTLIST NewsLineText %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================ NewsLineType ==================================
+An indication of a user-defined NewsLine type. The value of the FormalName
+attribute is a formal name for the NewsLineType. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment
+to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT NewsLineType EMPTY>
+<!ATTLIST NewsLineType %localid;
+ %formalname; >
+<!--
+================================== NewsLines ===================================
+A container for all the NewsLines that a NewsComponent has.
+================================================================================
+-->
+<!ELEMENT NewsLines ( (HeadLine , SubHeadLine? )* , ByLine* , DateLine* , CreditLine* , CopyrightLine* , RightsLine* , SeriesLine* , SlugLine* , KeywordLine* , NewsLine* )>
+<!ATTLIST NewsLines %localid; >
+<!--
+================================ NewsManagement ================================
+Information relevant to the management of a NewsItem.
+================================================================================
+-->
+<!ELEMENT NewsManagement (NewsItemType , FirstCreated , ThisRevisionCreated , Status , StatusWillChange? , Urgency? , RevisionHistory? , DerivedFrom* , AssociatedWith* , Instruction* , Property* )>
+<!ATTLIST NewsManagement %localid; >
+<!--
+==================================== NewsML ====================================
+A NewsML document, which must contain a NewsEnvelope and one or more NewsItems,
+and may include a Catalog element and a TopicSet element.
+================================================================================
+-->
+<!ELEMENT NewsML (Catalog? , TopicSet* , (NewsEnvelope , NewsItem+ ) )>
+<!ATTLIST NewsML %localid; >
+<!--
+================================= NewsProduct ==================================
+An identifier for a product to which all the NewsItems in a NewsML document
+belong. The value of the FormalName attribute is a formal name for the
+NewsProduct. Its meaning and permitted values are determined by a controlled
+vocabulary as described in the comment to the formalname ENTITY declaration
+above.
+================================================================================
+-->
+<!ELEMENT NewsProduct EMPTY>
+<!ATTLIST NewsProduct %localid;
+ %formalname; >
+<!--
+================================= NewsService ==================================
+An identifier for a service to which all the NewsItems in a NewsML document
+belong. The value of the FormalName attribute is a formal name for the
+NewsService. Its meaning and permitted values are determined by a controlled
+vocabulary as described in the comment to the formalname ENTITY declaration
+above.
+================================================================================
+-->
+<!ELEMENT NewsService EMPTY>
+<!ATTLIST NewsService %localid;
+ %formalname; >
+<!--
+=================================== Notation ===================================
+An indication of the notation of a ContentItem. The value of the FormalName
+attribute is a formal name for the Notation. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Notation EMPTY>
+<!ATTLIST Notation %localid;
+ %formalname; >
+<!--
+================================= OfInterestTo =================================
+An indication of the target audience of a NewsItem. The value of the FormalName
+attribute is a formal name for the target audience. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment to
+the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT OfInterestTo (Relevance? )>
+<!ATTLIST OfInterestTo %localid;
+ %formalname;
+ %assignment; >
+<!--
+==================================== Origin ====================================
+A wrapper for all or part of the text of a piece of text, which provides a
+pointer to an item of data corresponding formally to what is being described
+here in natural language. The Href attribute identifies the relevant data, and
+may be an http URL or a NewsML URN as described in the comment to
+PublicIdentifier, optionally including a fragment identifier. Alternatively, it
+can be a simple fragment identifier consisting of a # character followed by the
+value of the Duid of an element in the current document.
+================================================================================
+-->
+<!ELEMENT Origin (#PCDATA | Origin )*>
+<!ATTLIST Origin %localid;
+ %assignment;
+ Href CDATA #IMPLIED >
+<!--
+=================================== Party ======================================
+An indication of the person, company or organisation that has a particular
+relationship to this NewsItem in the news workflow. The value of the FormalName
+attribute is a formal name for the Party. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Party EMPTY>
+<!ATTLIST Party %localid;
+ %formalname;
+ Topic CDATA #IMPLIED >
+<!--
+=================================== Priority ===================================
+An indication of the priority notation of a NewsItem. The value of the
+FormalName attribute is a formal name for the Priority. Its meaning and
+permitted values are determined by a controlled vocabulary as described in
+the comment to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Priority EMPTY>
+<!ATTLIST Priority %localid;
+ %formalname; >
+<!--
+=================================== Property ===================================
+A property of a NewsComponent or of a Topic. The property has a name and either
+a simple Value or a complex value consisting of a set of further properties.
+
+Value
+=====
+A string representation of the value of a Property.
+
+ValueRef
+========
+A pointer to the value of the Property. This might be a Topic in a TopicSet, or
+any other piece of data. If both Value and ValueRef are provided, then ValueRef
+identifies the actual value of the property, with Value simply providing a
+string representation or mnemonic for it.
+
+
+Example:
+<Catalog>
+ <Resource Duid="resource1">
+ <Urn>urn:newsml:reuters.com:20001001:Physical Characteristics:3</Urn>
+ <Url>www.reuters.com/vocabs/physical.xml</Url>
+ <Url>www.iptc.com/vocabularies/memberdefined/reuters/physical.xml</Url>
+ <DefaultVocabularyFor Scheme="short" Context="Metadata/Property[@FormalName='Width']"/>
+ </Resource>
+</Catalog>
+<Property FormalName="Width" Vocabulary="#resource1">
+ <Property FormalName="Unit" ValueRef="urn:newsml:iptc.org:20001006:units:1#cm"/>
+ <Property FormalName="Quantity" Value="7.5"/>
+</Property>
+
+AllowedValues
+=============
+The AllowedValues attribute, if present, is a pointer to a controlled vocabulary
+that delimits the set of allowed values for the property. This may be an http
+URL, or a NewsML URN, or a fragment identifier consisting of a # charactger
+followed by the Duid of an element in the current document. The pointer must
+reference either a Resource element that designates an external controlled
+vocabulary, or a TopicSet element, that is itself the controlled vocabulary.
+================================================================================
+-->
+<!ELEMENT Property (Property* )>
+<!ATTLIST Property %localid;
+ %formalname;
+ %assignment;
+ Value CDATA #IMPLIED
+ ValueRef CDATA #IMPLIED
+ AllowedValues CDATA #IMPLIED >
+<!--
+=================================== Provider ===================================
+An individual and/or company or organisation that released a news object for
+publication.
+================================================================================
+-->
+<!ELEMENT Provider (%party; )>
+<!ATTLIST Provider %localid; >
+<!--
+================================== ProviderId ==================================
+An identifier for the news provider that produced the NewsItem. The
+provider's ID is specified in the element content. This should be an Internet
+domain name that is owned by the provider at the date identified by the DateId
+subelement of the NewsIdentifier, or the name for the Provider drawn from a
+controlled vocabulary identified by a URN specified in the Vocabulary attribute.
+This will ensure that the identity of the provider can be inferred unambiguously
+from the full NewsIdentifier.
+
+Example:
+<NewsIdentifier>
+ <ProviderId>iptc.org</ProviderId>
+ <DateId>20001001</DateId>
+ <NewsItemId>NewsML version 1.0</NewsItemId>
+ <RevisionId>1</RevisionId
+</NewsIdentifier>
+
+Because the domain name "iptc.org" was owned on 1 October 2000 by the
+International Press Telecommunications Council (IPTC) and no-one else, it is
+certain that IPTC is the provider in this case.
+================================================================================
+-->
+<!ELEMENT ProviderId (#PCDATA )>
+<!ATTLIST ProviderId Vocabulary CDATA #IMPLIED >
+<!--
+=============================== PublicIdentifier ===============================
+A public identifier (in the sense defined by the XML 1,0 Specification) for a
+NewsItem. This is the NewsML URN, and must be constructed as follows:
+
+If the ProviderId is a domain name
+
+urn:newsml:{ProviderId}:{DateId}:{NewsItemId}:{RevisionId}{RevisionId@Update}
+
+If the ProviderId is name drawn from a controlled vocabulary
+
+urn:newsml:|{ProviderId@Vocabulary}|{ProviderId}|:{DateId}:{NewsItemId}:{RevisionId}{RevisionId@Update}
+
+where {x} means "the content of the x subelement of the NewsIdentifier" and
+{x@y} means "the value of the y attribute of the x subelement of the
+NewsIdentifier", with the exception that if the Update attribute of the
+RevisionId element has its default value of N, it is omitted from the URN, and
+that the Vocabulary attribute of the ProviderId element is stripped of the
+substring "urn:" with which it begins. The Vocabulary attribute of ProviderId
+necessarily begins with the characters "urn:" because, as stated in the
+comment to the ProviderId element above, it must take the form of a URN
+identifying a controlled vocabulary.
+
+Note that the existence of this URN enables the NewsItem to be referenced
+unambiguously by pointers from other XML elements or resources. Within such
+pointers, if the RevisionId, its preceding : character and its following Update
+qualifier are omitted, then the pointer designates the most recent revision at
+the time it is resolved.
+================================================================================
+-->
+<!ELEMENT PublicIdentifier (#PCDATA )>
+
+<!--
+================================== Relevance ===================================
+An indication of the relevance of a NewsItem to a given target audience. The
+value of the FormalName attribute is a formal name for the Relevance. Its
+meaning and permitted values are determined by a controlled vocabulary as
+described in the comment to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Relevance EMPTY>
+<!ATTLIST Relevance %localid;
+ %formalname;
+ %assignment; >
+<!--
+=================================== Replace ====================================
+An instruction to replace a designated element within a NewsItem. The element
+that is to replace the designated element is the content of the Replace element.
+The NewsItem within which the replacement takes place is the previous revision
+of the current one, and the element to be replaced is the one whose Duid
+value is equal to the value of the Replace element's DuidRef attribute.
+================================================================================
+-->
+<!ELEMENT Replace ANY>
+<!ATTLIST Replace %localid;
+ DuidRef CDATA #REQUIRED >
+<!--
+================================== Resource ====================================
+An indication where a given resource can be found, and whether it is to be used
+as the default vocabulary for certain formal names within the current subtree
+of a NewsML document. The Urn attribute provides a NewsML URN for the resource.
+THe Url attribute(s) provide(s) a location or locations where the resource may
+be found. The DefaultVocabularyFor element contains an XPath pattern. The
+identified resource acts as default vocabulary for any element within the
+subtree whose root is the parent of the current Catalog, that matches this XPath
+pattern.
+================================================================================
+-->
+<!ELEMENT Resource (Urn? , Url* , DefaultVocabularyFor* )>
+<!ATTLIST Resource %localid; >
+<!--
+=============================== RevisionHistory ================================
+A pointer to a file containing the revision history of the NewsItem.
+================================================================================
+-->
+<!ELEMENT RevisionHistory EMPTY>
+<!ATTLIST RevisionHistory %localid;
+ Href CDATA #REQUIRED >
+<!--
+================================== RevisionId ==================================
+A positive integer indicating which Revision of a given NewsItem this is. Any
+positive integer may be used, but it must always be the case that of two
+instances of a NewsItem that have the same ProviderId, DateId and NewsItemId,
+the one whose RevisionId has the larger value must be the more recent revision.
+A RevisionId of 0 is not permitted. The PreviousRevision attribute must be
+present, and its value must be equal to the content of the RevisionId element
+of the NewsItem's previous revision, if there is one, and 0 if the NewsItem has
+no previous revision. If the NewsItem contains an Update element or elements,
+then the Update attribute must be set to U. If the NewsItem consists only of a
+replacement set of NewsManagement data, then the Update attribute must be set
+to A. If neither of these is the case, then the Update attribute must be set
+to N.
+================================================================================
+-->
+<!ELEMENT RevisionId (#PCDATA )>
+<!ATTLIST RevisionId PreviousRevision CDATA #REQUIRED
+ Update CDATA #REQUIRED >
+<!--
+================================ RevisionStatus ================================
+Indicates the status that previous revisions now has as a result of the release
+of the current revision. The optional Revision attribute is an integer, equal to
+the RevisionId of the revision in question. If it is not present, then the
+status applies to ALL previous revisions, without exception.
+================================================================================
+-->
+<!ELEMENT RevisionStatus (Status )>
+<!ATTLIST RevisionStatus %localid;
+ Revision CDATA #IMPLIED >
+<!--
+================================= RightsHolder =================================
+A string of text indicating who has the usage rights, optionally enriched with
+pointers to further information about the relevant people, companies or
+organisations.
+================================================================================
+-->
+<!ELEMENT RightsHolder (#PCDATA | Origin )*>
+<!ATTLIST RightsHolder %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+================================== RightsLine ==================================
+A displayable version of rights information. Note that this is distinct from
+copyright information. Copyright information is about who owns a news object;
+rights information is about who is allowed to use it, in what way and under
+what circumstances.
+================================================================================
+-->
+<!ELEMENT RightsLine (#PCDATA | Origin )*>
+<!ATTLIST RightsLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================ RightsMetadata ================================
+Information about the rights pertaining to a NewsComponent.
+================================================================================
+-->
+<!ELEMENT RightsMetadata (Catalog? , Copyright* , UsageRights* , Property* )>
+<!ATTLIST RightsMetadata %localid;
+ %assignment; >
+<!--
+===================================== Role =====================================
+An identifier of the role played by a NewsComponent within a NewsComponent
+that contains it. The outermost NewsComponent within a NewsItem need not
+specify a Role attribute value. The value of the FormalName attribute is a
+formal name for the Role. Its meaning and permitted values are determined by
+a controlled vocabulary as described in the comment to the formalname ENTITY
+declaration above.
+================================================================================
+-->
+<!ELEMENT Role EMPTY>
+<!ATTLIST Role %localid;
+ %formalname; >
+<!--
+=================================== SentFrom ===================================
+An individual and/or company or organisation from whom the NewsML document is
+being sent.
+================================================================================
+-->
+<!ELEMENT SentFrom (%party; )>
+<!ATTLIST SentFrom %localid; >
+<!--
+==================================== SentTo ====================================
+An individual and/or company or organisation to whom the NewsML document is
+being sent.
+================================================================================
+-->
+<!ELEMENT SentTo (%party; )>
+<!ATTLIST SentTo %localid; >
+<!--
+================================== SeriesLine ==================================
+A displayable version of information about a news object's place in a series.
+================================================================================
+-->
+<!ELEMENT SeriesLine (#PCDATA | Origin )*>
+<!ATTLIST SeriesLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================== SizeInBytes =================================
+The exact size in bytes of a ContentItem's inline or referenced data object.
+================================================================================
+-->
+<!ELEMENT SizeInBytes (#PCDATA )>
+<!ATTLIST SizeInBytes %localid; >
+<!--
+=================================== SlugLine ===================================
+A string of text, possibly embellished by hyperlinks and/or formatting, used to
+display a NewsItem's slug line. (Note that the meaning of the term "slug line",
+and the uses to which it is put, are a matter for individual providers to
+define within their own workflow and business practice.)
+================================================================================
+-->
+<!ELEMENT SlugLine (#PCDATA | Origin )*>
+<!ATTLIST SlugLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+==================================== Source ====================================
+An individual and/or company or organisation that provided source material for
+a news object. The optional NewsItem attribute must be present in the case of
+a syndicated NewsItem. It provides the URN of the NewsItem that is being
+syndicated. Note that a sequence of Source elements can be used to indicate the
+sequence of syndicators through which a NewsItem has passed.
+================================================================================
+-->
+<!ELEMENT Source (%party; )>
+<!ATTLIST Source %localid;
+ NewsItem CDATA #IMPLIED >
+<!--
+================================== StartDate ===================================
+A natural-language statement of the date at which specified usage rights come
+into effect.
+================================================================================
+-->
+<!ELEMENT StartDate (#PCDATA | Origin )*>
+<!ATTLIST StartDate %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+==================================== Status ===================================
+An indication of the Status of a NewsItem. The value of the FormalName
+attribute is a formal name for the Status. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Status EMPTY>
+<!ATTLIST Status %localid;
+ %formalname; >
+<!--
+=============================== StatusWillChange ===============================
+Advance notification of a status change that will automatically occur at the
+specified date and time. For example, an item with a Status of "embargoed" might
+have a StatusWillChange element stating that the status will become "usable" at
+a specified time. This is equivalent to announcing in advance the time at which
+the embargo will end and the item will be released.
+================================================================================
+-->
+<!ELEMENT StatusWillChange (FutureStatus , DateAndTime )>
+<!ATTLIST StatusWillChange %localid; >
+<!--
+================================= SubHeadLine ==================================
+A displayable subsidiary headline.
+================================================================================
+-->
+<!ELEMENT SubHeadLine (#PCDATA | Origin )*>
+<!ATTLIST SubHeadLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+=================================== Subject ====================================
+An indication of the Subject of a NewsItem. The value of the FormalName
+attribute is a formal name for the Subject. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Subject EMPTY>
+<!ATTLIST Subject %localid;
+ %formalname;
+ %assignment; >
+<!--
+================================= SubjectCode ==================================
+A container for the IPTC Subject Codes that indicate the subject of a NewsItem,
+as defined in the IPTC Information Interchange Model. It consists of one more
+Subject, SubjectMatter and SubjectDetail elements, optionally amplified by one
+or more SubjectQualifier elements.
+================================================================================
+-->
+<!ELEMENT SubjectCode ( (Subject | SubjectMatter | SubjectDetail ) , SubjectQualifier* )*>
+<!ATTLIST SubjectCode %localid;
+ %assignment; >
+<!--
+================================ SubjectDetail =================================
+An indication of the SubjectDetail of a NewsItem. The value of the FormalName
+attribute is a formal name for the SubjectDetail. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment
+to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT SubjectDetail EMPTY>
+<!ATTLIST SubjectDetail %localid;
+ %formalname;
+ %assignment; >
+<!--
+================================ SubjectMatter =================================
+An indication of the SubjectMatter of a NewsItem. The value of the FormalName
+attribute is a formal name for the SubjectMatter. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment to
+the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT SubjectMatter EMPTY>
+<!ATTLIST SubjectMatter %localid;
+ %formalname;
+ %assignment; >
+<!--
+=============================== SubjectQualifier ===============================
+An indication of the SubjectQualifier of a NewsItem. The value of the FormalName
+attribute is a formal name for the SubjectQualifier. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment to
+the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT SubjectQualifier EMPTY>
+<!ATTLIST SubjectQualifier %localid;
+ %formalname;
+ %assignment; >
+<!--
+=============================== SystemIdentifier ===============================
+A system identifier (in the sense defined by the XML 1,0 Specification) for a
+NewsItem.
+================================================================================
+-->
+<!ELEMENT SystemIdentifier (#PCDATA )>
+<!ATTLIST SystemIdentifier %localid; >
+<!--
+============================= ThisRevisionCreated ==============================
+The date and, optionally, time at which the current revision of a NewsItem was
+created, expressed in ISO 8601 Basic Format, as described in the comment to the
+DateAndTime attribute within the assignment ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT ThisRevisionCreated (#PCDATA )>
+<!ATTLIST ThisRevisionCreated %localid; >
+<!--
+==================================== Topic =====================================
+This element provides information about a thing (Topic) named by a formal
+name or occurring in a NewsComponent. A Topic must have one or more TopicType
+subelements, which state what type of Topic it is. The optional Details
+attribute provides a pointer, in the form of a URL or URN, to additional
+information about the Topic.
+================================================================================
+-->
+<!ELEMENT Topic (Comment* , Catalog? , TopicType+ , FormalName* , Description* , Property* )>
+<!ATTLIST Topic %localid;
+ Details CDATA #IMPLIED >
+<!--
+=============================== TopicOccurrence ================================
+An indication that a particular topic occurs within the content of a
+NewsComponent. The optional HowPresent attribute indicates the nature of that
+topic's occurrence. The value of the Topic attribute must consist of a #
+character followed by the value of the Duid attribute of a Topic in the current
+document.
+================================================================================
+-->
+<!ELEMENT TopicOccurrence EMPTY>
+<!ATTLIST TopicOccurrence %localid;
+ %assignment;
+ Topic CDATA #IMPLIED >
+<!--
+================================== TopicSet ====================================
+A container for Topics. The value of the FormalName attribute is a formal name
+for the TopicSet. Its meaning and permitted values are determined by a
+controlled vocabulary as described in the comment to the formalname ENTITY
+declaration above.
+================================================================================
+-->
+<!ELEMENT TopicSet (Comment* , Catalog? , TopicSetRef* , Topic* )>
+<!ATTLIST TopicSet %localid;
+ %formalname; >
+<!--
+================================= TopicSetRef ==================================
+A pointer to a TopicSet that is to be merged with the current one. The TopicSet
+attribute is a pointer to the relevant TopicSet. Its value can be an http URL,
+or a NewsML URN as described in the comment to PublicIdentifier, or a fragment
+identifier consisting of a # character followed by the Duid of a TopicSet in the
+current document. The presence of a TopicSetRef child in a TopicSet has the
+effect that all the Topics in the referenced TopicSet are included by reference
+within the current TopicSet. When this merging results in there exising two
+FormalName grandchildren of the same TopicSet that have the same content and
+the same Scheme attribute value, then the Topics whose children are in fact the
+same topic, and are deemed to be merged. The merging of Topics need not be
+performed physically by the system, but the meaning of the data is
+exactly the same as if the merging were actually performed. Merging two
+Topcis consists of creating a single Topic that contains all the children of
+both, and eliminating duplicates.
+================================================================================
+-->
+<!ELEMENT TopicSetRef (Comment* )>
+<!ATTLIST TopicSetRef %localid;
+ TopicSet CDATA #IMPLIED >
+<!--
+================================== TopicType ===================================
+An indication of the type of a Topic. The value of the FormalName attribute is
+a formal name for the TopicType. Its meaning and permitted values are determined
+by a controlled vocabulary as described in the comment to the formalname ENTITY
+declaration above.
+================================================================================
+-->
+<!ELEMENT TopicType EMPTY>
+<!ATTLIST TopicType %localid;
+ %formalname; >
+<!--
+================================== TopicUse ====================================
+An indication of where a particular Topic is used in a NewsML document. The
+value of the Topic attribute must consist of a # character followed by the
+value of the Duid of a Topic in the current document. The value of the Context
+attribute is an XPath pattern indicating the context where the referenced topic
+is used within the subtree to which the current Catalog applies. If the Context
+attribute is not present, the TopicUse element simply states that this topic is
+present somewhere in the subtree.
+================================================================================
+-->
+<!ELEMENT TopicUse EMPTY>
+<!ATTLIST TopicUse Topic CDATA #REQUIRED
+ Context CDATA #IMPLIED >
+<!--
+================================ TransmissionId ================================
+An identifier for the NewsML document transmission. This should be unique among
+all distinct transmissions from the same publisher. If a transmission is
+repeated (perhaps because the sender is not confident that it was successfully
+received) then the same TransmissionId content may be used, but a Repeat
+attribute should be provided to distinguish the second transmission from the
+first. The form that the value of the Repeat attribute takes is determined by
+the provider. Likewise, the format for the TransmissionId itself is for the
+provider to decide. It could for example consist of a channel identifier
+followed by a sequence number.
+================================================================================
+-->
+<!ELEMENT TransmissionId (#PCDATA )>
+<!ATTLIST TransmissionId %localid;
+ Repeat CDATA #IMPLIED >
+<!--
+==================================== Update ====================================
+A modification to an existing NewsItem. This can be an insertion, replacement
+or deletion. Note that the Update element cannot be used to modify the
+NewsManagement or Identification element, or any of their descendants.
+Modifications to these parts of the NewsItem can be made by issuing the
+NewsItem under the current revision number, with only the Identification and
+NewsManagement elements present. These will replace the previous Identification
+and NewsManagement elements in their totality.
+================================================================================
+-->
+<!ELEMENT Update (InsertBefore | InsertAfter | Replace | Delete )*>
+<!ATTLIST Update %localid; >
+<!--
+=================================== Urgency ====================================
+An indication of the urgency of a NewsItem. The value of the FormalName
+attribute is a formal name for the Urgency. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Urgency EMPTY>
+<!ATTLIST Urgency %localid;
+ %formalname; >
+<!--
+===================================== Url ======================================
+A URL that can be used to locate a Resource.
+================================================================================
+-->
+<!ELEMENT Url (#PCDATA )>
+<!ATTLIST Url %localid; >
+<!--
+===================================== Urn ======================================
+A URN that provides a global identifier for a resource. This will typically (but
+not necessarily) be a NewsML URN as described in the comment to PublicIdentifier.
+================================================================================
+-->
+<!ELEMENT Urn (#PCDATA )>
+<!ATTLIST Urn %localid; >
+<!--
+================================= UsageRights ==================================
+Information about the usage rights pertaining to a NewsComponent.
+================================================================================
+-->
+<!ELEMENT UsageRights (UsageType? , Geography? , RightsHolder? , Limitations? , StartDate? , EndDate? )>
+<!ATTLIST UsageRights %localid;
+ %assignment; >
+<!--
+================================== UsageType ===================================
+A natural-language indication of the type of usage to which the rights apply.
+================================================================================
+-->
+<!ELEMENT UsageType (#PCDATA | Origin )*>
+<!ATTLIST UsageType %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
diff --git a/test/valid/dtds/destfoo.ent b/test/valid/dtds/destfoo.ent
new file mode 100644
index 0000000..0791e1a
--- /dev/null
+++ b/test/valid/dtds/destfoo.ent
@@ -0,0 +1 @@
+<dest id='foo'/>
diff --git a/test/valid/dtds/nitf-2-5.dtd b/test/valid/dtds/nitf-2-5.dtd
new file mode 100644
index 0000000..253e620
--- /dev/null
+++ b/test/valid/dtds/nitf-2-5.dtd
@@ -0,0 +1,1004 @@
+ <!--
+ News Industry Text Format
+ Document Type Definition - Version 2.5
+ http://www.nitf.org/
+
+ Copyright (c) 2000. All Rights Reserved.
+ International Press Telecommunications Council
+ http://www.iptc.org
+
+ Last changed: 9 August 2000 wb/kr/ak
+
+ For the list of modifications from previous releases, see:
+ http://www.nitf.org/recent-modifications.html
+
+ For the list of proposed modifications, see:
+ http://www.nitf.org/proposed-changes.html
+-->
+
+
+
+<!ENTITY % enriched-text '
+ #PCDATA
+ | chron
+ | copyrite
+ | event
+ | function
+ | location
+ | money
+ | num
+ | object.title
+ | org
+ | person
+ | postaddr
+ | virtloc
+ | a
+ | br
+ | em
+ | lang
+ | pronounce
+ | q
+ '>
+
+<!ENTITY % block.head "dateline?, copyrite?, abstract?">
+<!ENTITY % block.content "p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr">
+<!ENTITY % block.end "datasource?">
+
+
+<!ENTITY % global-attributes '
+ id ID #IMPLIED
+ '>
+<!ENTITY % common-attributes '
+ %global-attributes;
+ class NMTOKENS #IMPLIED
+ style CDATA #IMPLIED
+ lang NMTOKEN #IMPLIED
+ dir (ltr | rtl) #IMPLIED
+ '>
+<!ENTITY % cell.align '
+ align (left | center | right | justify | char) #IMPLIED
+ char CDATA #IMPLIED
+ charoff CDATA #IMPLIED
+ '>
+<!ENTITY % cell.valign '
+ valign (top | middle | bottom | baseline) #IMPLIED
+ '>
+<!ENTITY % url.link '
+ md CDATA #IMPLIED
+ '>
+<!ENTITY % boolean '(true | false)'>
+
+
+<!ELEMENT nitf (head, body)>
+<!ATTLIST nitf
+ %global-attributes;
+ uno CDATA #IMPLIED
+ version CDATA #FIXED "-//IPTC-NAA//DTD NITF-XML 2.1//EN"
+ change.date CDATA #FIXED "4 July 2000"
+ change.time CDATA #FIXED "1900"
+ baselang CDATA #IMPLIED
+ class NMTOKENS #IMPLIED
+ >
+
+
+<!ELEMENT head (title?, meta*, tobject?, iim?, docdata?, pubdata*, revision-history*)>
+<!ATTLIST head
+ %global-attributes;
+ >
+
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title
+ %global-attributes;
+ type (
+ main
+ | subtitle
+ | parttitle
+ | alternate
+ | abbrev
+ | other
+ ) #IMPLIED
+ >
+
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+ %global-attributes;
+ http-equiv NMTOKEN #IMPLIED
+ name NMTOKEN #IMPLIED
+ content CDATA #REQUIRED
+ >
+
+<!ELEMENT tobject (tobject.property*, tobject.subject*)>
+<!ATTLIST tobject
+ %global-attributes;
+ tobject.type CDATA "news"
+ >
+
+ <!ELEMENT tobject.property EMPTY>
+ <!ATTLIST tobject.property
+ %global-attributes;
+ tobject.property.type CDATA "current"
+ >
+
+ <!ELEMENT tobject.subject EMPTY>
+ <!ATTLIST tobject.subject
+ %global-attributes;
+ tobject.subject.ipr CDATA "IPTC"
+ tobject.subject.refnum NMTOKEN #REQUIRED
+ tobject.subject.code CDATA #IMPLIED
+ tobject.subject.type CDATA #IMPLIED
+ tobject.subject.matter CDATA #IMPLIED
+ tobject.subject.detail CDATA #IMPLIED
+ >
+
+<!ELEMENT iim (ds*)>
+<!ATTLIST iim
+ %global-attributes;
+ ver NMTOKEN #IMPLIED
+ >
+
+ <!ELEMENT ds EMPTY>
+ <!ATTLIST ds
+ %global-attributes;
+ num NMTOKEN #REQUIRED
+ value CDATA #IMPLIED
+ >
+
+<!ELEMENT docdata (
+ correction
+ | evloc
+ | doc-id
+ | del-list
+ | urgency
+ | fixture
+ | date.issue
+ | date.release
+ | date.expire
+ | doc-scope
+ | series
+ | ed-msg
+ | du-key
+ | doc.copyright
+ | doc.rights
+ | key-list
+ )*>
+<!ATTLIST docdata
+ %global-attributes;
+ >
+
+ <!ELEMENT correction EMPTY>
+ <!ATTLIST correction
+ %global-attributes;
+ info CDATA #IMPLIED
+ id-string CDATA #IMPLIED
+ reg-src CDATA #IMPLIED
+ >
+
+ <!ELEMENT evloc EMPTY>
+ <!ATTLIST evloc
+ %global-attributes;
+ iso-cc CDATA #IMPLIED
+ state-prov CDATA #IMPLIED
+ county-dist CDATA #IMPLIED
+ city CDATA #IMPLIED
+ >
+
+ <!ELEMENT doc-id EMPTY>
+ <!ATTLIST doc-id
+ %global-attributes;
+ regsrc CDATA #IMPLIED
+ id-string CDATA #IMPLIED
+ >
+
+ <!ELEMENT del-list (from-src)*>
+ <!ATTLIST del-list
+ %global-attributes;
+ >
+
+ <!ELEMENT from-src EMPTY>
+ <!ATTLIST from-src
+ %global-attributes;
+ src-name CDATA #IMPLIED
+ level-number CDATA #IMPLIED
+ >
+
+ <!ELEMENT urgency EMPTY>
+ <!ATTLIST urgency
+ %global-attributes;
+ ed-urg NMTOKEN #IMPLIED
+ >
+
+ <!ELEMENT fixture EMPTY>
+ <!ATTLIST fixture
+ %global-attributes;
+ fix-id CDATA #IMPLIED
+ >
+
+ <!ELEMENT date.issue EMPTY>
+ <!ATTLIST date.issue
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT date.release EMPTY>
+ <!ATTLIST date.release
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT date.expire EMPTY>
+ <!ATTLIST date.expire
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT doc-scope EMPTY>
+ <!ATTLIST doc-scope
+ %global-attributes;
+ scope CDATA #IMPLIED
+ >
+
+ <!ELEMENT series EMPTY>
+ <!ATTLIST series
+ %global-attributes;
+ series.name CDATA #IMPLIED
+ series.part NMTOKEN "0"
+ series.totalpart NMTOKEN "0"
+ >
+
+ <!ELEMENT ed-msg EMPTY>
+ <!ATTLIST ed-msg
+ %global-attributes;
+ msg-type CDATA #IMPLIED
+ info CDATA #IMPLIED
+ >
+
+ <!ELEMENT du-key EMPTY>
+ <!ATTLIST du-key
+ %global-attributes;
+ generation NMTOKEN #IMPLIED
+ part NMTOKEN #IMPLIED
+ version NMTOKEN #IMPLIED
+ key CDATA #IMPLIED
+ >
+
+ <!ELEMENT doc.copyright EMPTY>
+ <!ATTLIST doc.copyright
+ %global-attributes;
+ year NMTOKEN #IMPLIED
+ holder CDATA #IMPLIED
+ >
+
+ <!ELEMENT doc.rights EMPTY>
+ <!ATTLIST doc.rights
+ %global-attributes;
+ owner CDATA #IMPLIED
+ startdate CDATA #IMPLIED
+ enddate CDATA #IMPLIED
+ agent CDATA #IMPLIED
+ geography CDATA #IMPLIED
+ location-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ type CDATA #IMPLIED
+ limitations CDATA #IMPLIED
+ >
+
+ <!ELEMENT key-list (keyword)*>
+ <!ATTLIST key-list
+ %global-attributes;
+ >
+
+ <!ELEMENT keyword EMPTY>
+ <!ATTLIST keyword
+ %global-attributes;
+ key CDATA #IMPLIED
+ >
+
+<!ELEMENT pubdata EMPTY>
+<!ATTLIST pubdata
+ %global-attributes;
+ type (
+ print
+ | audio
+ | video
+ | web
+ | appliance
+ | other
+ ) #IMPLIED
+ item-length CDATA #IMPLIED
+ unit-of-measure (
+ word
+ | character
+ | byte
+ | inch
+ | pica
+ | cm
+ | hour
+ | minute
+ | second
+ | other
+ ) #IMPLIED
+ date.publication CDATA #IMPLIED
+ name CDATA #IMPLIED
+ issn CDATA #IMPLIED
+ volume CDATA #IMPLIED
+ number CDATA #IMPLIED
+ issue CDATA #IMPLIED
+ edition.name CDATA #IMPLIED
+ edition.area CDATA #IMPLIED
+ position.section CDATA #IMPLIED
+ position.sequence CDATA #IMPLIED
+ ex-ref CDATA #IMPLIED
+ >
+
+<!ELEMENT revision-history EMPTY>
+<!ATTLIST revision-history
+ %global-attributes;
+ name CDATA #IMPLIED
+ function (
+ writer-author
+ | editor
+ | producer
+ | archivist
+ | videographer
+ | graphic-artist
+ | photographer
+ | statistician
+ | other
+ ) #IMPLIED
+ norm CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ >
+
+
+<!ELEMENT body (body.head?, body.content*, body.end?)>
+<!ATTLIST body
+ %common-attributes;
+ background CDATA #IMPLIED
+ >
+
+
+<!ELEMENT body.head (
+ hedline?,
+ note*,
+ rights?,
+ byline*,
+ distributor?,
+ dateline*,
+ abstract?,
+ series?
+ )>
+<!ATTLIST body.head
+ %global-attributes;
+ >
+
+<!ELEMENT hedline (hl1, hl2*)>
+<!ATTLIST hedline
+ %global-attributes;
+ >
+
+ <!ELEMENT hl1 (%enriched-text;)*>
+ <!ATTLIST hl1 %common-attributes;>
+
+ <!ELEMENT hl2 (%enriched-text;)*>
+ <!ATTLIST hl2 %common-attributes;>
+
+<!ELEMENT note (body.content)+>
+<!ATTLIST note
+ %common-attributes;
+ noteclass (
+ cpyrt
+ | end
+ | hd
+ | editorsnote
+ | trademk
+ | undef
+ ) #IMPLIED
+ type (std | pa | npa) "std"
+ src CDATA #IMPLIED
+ %url.link;
+ >
+
+<!ELEMENT rights (
+ #PCDATA
+ | rights.owner
+ | rights.startdate
+ | rights.enddate
+ | rights.agent
+ | rights.geography
+ | rights.type
+ | rights.limitations
+ )*>
+<!ATTLIST rights
+ %global-attributes;
+ >
+
+ <!ELEMENT rights.owner (#PCDATA)>
+ <!ATTLIST rights.owner
+ %global-attributes;
+ contact CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.startdate (#PCDATA)>
+ <!ATTLIST rights.startdate
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.enddate (#PCDATA)>
+ <!ATTLIST rights.enddate
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.agent (#PCDATA)>
+ <!ATTLIST rights.agent
+ %global-attributes;
+ contact CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.geography (#PCDATA)>
+ <!ATTLIST rights.geography
+ %global-attributes;
+ location-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.type (#PCDATA)>
+ <!ATTLIST rights.type
+ %global-attributes;
+ >
+
+ <!ELEMENT rights.limitations (#PCDATA)>
+ <!ATTLIST rights.limitations
+ %global-attributes;
+ >
+
+<!ELEMENT byline (#PCDATA | person | byttl | location | virtloc)*>
+<!ATTLIST byline
+ %global-attributes;
+ >
+
+ <!ELEMENT byttl (#PCDATA | org )*>
+ <!ATTLIST byttl
+ %global-attributes;
+ >
+
+<!ELEMENT distributor (#PCDATA | org)*>
+<!ATTLIST distributor
+ %global-attributes;
+ >
+
+<!ELEMENT dateline (#PCDATA | location | story.date)*>
+<!ATTLIST dateline %common-attributes;>
+
+ <!ELEMENT story.date (#PCDATA)>
+ <!ATTLIST story.date
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+<!ELEMENT abstract (%block.content;)+>
+<!ATTLIST abstract
+ %global-attributes;
+ >
+
+
+<!ELEMENT copyrite (#PCDATA | copyrite.year | copyrite.holder)*>
+<!ATTLIST copyrite
+ %global-attributes;
+ >
+
+ <!ELEMENT copyrite.year (#PCDATA)>
+ <!ATTLIST copyrite.year
+ %global-attributes;
+ >
+
+ <!ELEMENT copyrite.holder (#PCDATA)>
+ <!ATTLIST copyrite.holder
+ %global-attributes;
+ >
+
+
+<!ELEMENT body.content (block | %block.content;)*>
+<!ATTLIST body.content
+ %global-attributes;
+ >
+
+<!ELEMENT block ((%block.head;)?, (%block.content;)*, (%block.end;)?)>
+<!ATTLIST block %common-attributes;>
+
+<!ELEMENT p (%enriched-text;)*>
+<!ATTLIST p
+ %common-attributes;
+ lede %boolean; #IMPLIED
+ summary %boolean; #IMPLIED
+ optional-text %boolean; #IMPLIED
+ >
+
+
+<!ELEMENT table (caption?, (col* | colgroup*), thead?, tfoot?, tbody+)>
+<!ATTLIST table
+ %common-attributes;
+ tabletype ENTITY #IMPLIED
+ align (
+ left
+ | center
+ | right
+ ) #IMPLIED
+ width CDATA #IMPLIED
+ cols NMTOKEN #IMPLIED
+ border CDATA #IMPLIED
+ frame (
+ void
+ | above
+ | below
+ | hsides
+ | lhs
+ | rhs
+ | vsides
+ | box
+ | border
+ ) #IMPLIED
+ rules (
+ none
+ | basic
+ | rows
+ | cols
+ | all
+ ) #IMPLIED
+ cellspacing CDATA #IMPLIED
+ cellpadding CDATA #IMPLIED
+ table.fmt CDATA #IMPLIED
+ table.domain CDATA #IMPLIED
+ table.inst CDATA #IMPLIED
+ >
+
+<!ELEMENT media (media-metadata*, media-reference, media-object?, media-caption*, media-producer?)>
+<!ATTLIST media
+ %common-attributes;
+ media-type (
+ text
+ | audio
+ | image
+ | video
+ | data
+ | application
+ | other
+ ) #REQUIRED
+ >
+
+ <!ELEMENT media-reference (#PCDATA)>
+ <!ATTLIST media-reference
+ %common-attributes;
+ data-location CDATA #REQUIRED
+ name CDATA #IMPLIED
+ source CDATA #IMPLIED
+ mime-type CDATA #REQUIRED
+ coding CDATA #IMPLIED
+ time CDATA #IMPLIED
+ time-unit-of-measure CDATA #IMPLIED
+ outcue CDATA #IMPLIED
+ source-credit CDATA #IMPLIED
+ copyright CDATA #IMPLIED
+ alternate-text CDATA #IMPLIED
+ height NMTOKEN #IMPLIED
+ width NMTOKEN #IMPLIED
+ units (pixels) "pixels"
+ imagemap CDATA #IMPLIED
+ noflow (noflow) #IMPLIED
+ >
+
+ <!ELEMENT media-metadata EMPTY>
+ <!ATTLIST media-metadata
+ %common-attributes;
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+ >
+
+ <!ELEMENT media-object (#PCDATA)>
+ <!ATTLIST media-object
+ %common-attributes;
+ encoding CDATA #REQUIRED
+ >
+
+ <!ELEMENT media-caption (%enriched-text; | %block.content;)*>
+ <!ATTLIST media-caption
+ %common-attributes;
+ >
+
+ <!ELEMENT media-producer (%enriched-text;)*>
+ <!ATTLIST media-producer
+ %common-attributes;
+ >
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+ %common-attributes;
+ continue (continue) #IMPLIED
+ seqnum NMTOKEN #IMPLIED
+ compact (compact) #IMPLIED
+ >
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+ %common-attributes;
+ wrap (vert | horiz | none) "none"
+ plain (plain) #IMPLIED
+ dingbat ENTITY #IMPLIED
+ src CDATA #IMPLIED
+ %url.link;
+ compact (compact) #IMPLIED
+ >
+
+ <!ELEMENT li (%enriched-text; | %block.content;)*>
+ <!ATTLIST li
+ %common-attributes;
+ dingbat ENTITY #IMPLIED
+ src CDATA #IMPLIED
+ %url.link;
+ skip NMTOKEN "0"
+ >
+
+<!ELEMENT dl (dt | dd)+>
+<!ATTLIST dl %common-attributes;>
+
+ <!ELEMENT dt (%enriched-text;)*>
+ <!ATTLIST dt %common-attributes;>
+
+ <!ELEMENT dd (block)*>
+ <!ATTLIST dd %common-attributes;>
+
+<!ELEMENT bq (block+, credit?)*>
+<!ATTLIST bq
+ %common-attributes;
+ nowrap (nowrap) #IMPLIED
+ quote-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT credit (%enriched-text;)*>
+ <!ATTLIST credit %common-attributes;>
+
+<!ELEMENT fn (body.content)+>
+<!ATTLIST fn %common-attributes;>
+
+
+<!ELEMENT pre (#PCDATA)>
+<!ATTLIST pre
+ %global-attributes;
+ >
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+ %global-attributes;
+ src CDATA #IMPLIED
+ >
+
+
+<!ELEMENT datasource (#PCDATA)>
+<!ATTLIST datasource
+ %global-attributes;
+ >
+
+
+
+<!ELEMENT caption (%enriched-text; | %block.content;)*>
+<!ATTLIST caption
+ %common-attributes;
+ align (
+ top
+ | bottom
+ | left
+ | right
+ ) #IMPLIED
+ >
+
+<!ELEMENT col EMPTY>
+<!ATTLIST col
+ %common-attributes;
+ span NMTOKEN "1"
+ width CDATA #IMPLIED
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT colgroup (col+)>
+<!ATTLIST colgroup
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT thead (tr+)>
+<!ATTLIST thead
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT tbody (tr+)>
+<!ATTLIST tbody
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT tfoot (tr+)>
+<!ATTLIST tfoot
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT tr (th | td)+>
+<!ATTLIST tr
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT th (%enriched-text; | %block.content;)*>
+<!ATTLIST th
+ %common-attributes;
+ axis CDATA #IMPLIED
+ axes CDATA #IMPLIED
+ nowrap (nowrap) #IMPLIED
+ rowspan NMTOKEN "1"
+ colspan NMTOKEN "1"
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT td (%enriched-text; | %block.content;)*>
+<!ATTLIST td
+ %common-attributes;
+ axis CDATA #IMPLIED
+ axes CDATA #IMPLIED
+ nowrap (nowrap) #IMPLIED
+ rowspan NMTOKEN "1"
+ colspan NMTOKEN "1"
+ %cell.align;
+ %cell.valign;
+ >
+
+
+<!ELEMENT chron (#PCDATA)>
+<!ATTLIST chron
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+
+<!ELEMENT event (#PCDATA | alt-code)*>
+<!ATTLIST event
+ %global-attributes;
+ start-date CDATA #IMPLIED
+ end-date CDATA #IMPLIED
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT function (#PCDATA | alt-code)*>
+<!ATTLIST function
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT location (#PCDATA | sublocation | city | state | region | country | alt-code)*>
+<!ATTLIST location
+ %global-attributes;
+ location-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT sublocation (#PCDATA | alt-code)*>
+ <!ATTLIST sublocation
+ %global-attributes;
+ location-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT city (#PCDATA | alt-code)*>
+ <!ATTLIST city
+ %global-attributes;
+ city-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT state (#PCDATA | alt-code)*>
+ <!ATTLIST state
+ %global-attributes;
+ state-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT region (#PCDATA | alt-code)*>
+ <!ATTLIST region
+ %global-attributes;
+ region-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT country (#PCDATA | alt-code)*>
+ <!ATTLIST country
+ %global-attributes;
+ iso-cc CDATA #IMPLIED
+ >
+
+<!ELEMENT money (#PCDATA)>
+<!ATTLIST money
+ %global-attributes;
+ unit CDATA #IMPLIED
+ date CDATA #IMPLIED
+ >
+
+<!ELEMENT num (#PCDATA | frac | sub | sup)*>
+<!ATTLIST num
+ %global-attributes;
+ units CDATA #IMPLIED
+ decimal-ch CDATA #IMPLIED
+ thousands-ch CDATA #IMPLIED
+ >
+
+ <!ELEMENT frac (numer, frac-sep?, denom)>
+ <!ATTLIST frac
+ %global-attributes;
+ >
+
+ <!ELEMENT numer (#PCDATA)>
+ <!ATTLIST numer
+ %global-attributes;
+ >
+
+ <!ELEMENT frac-sep (#PCDATA)>
+ <!ATTLIST frac-sep
+ %global-attributes;
+ >
+
+ <!ELEMENT denom (#PCDATA)>
+ <!ATTLIST denom
+ %global-attributes;
+ >
+
+ <!ELEMENT sub (#PCDATA)>
+ <!ATTLIST sub %common-attributes;>
+
+ <!ELEMENT sup (#PCDATA)>
+ <!ATTLIST sup %common-attributes;>
+
+<!ELEMENT object.title (#PCDATA | alt-code)*>
+<!ATTLIST object.title
+ %common-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT org (#PCDATA | alt-code)*>
+<!ATTLIST org
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+ <!ELEMENT alt-code EMPTY>
+ <!ATTLIST alt-code
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT person (#PCDATA | name.given | name.family | function | alt-code)*>
+<!ATTLIST person
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+ <!ELEMENT name.given (#PCDATA)>
+ <!ATTLIST name.given
+ %global-attributes;
+ >
+
+ <!ELEMENT name.family (#PCDATA)>
+ <!ATTLIST name.family
+ %global-attributes;
+ >
+
+<!ELEMENT postaddr (addressee, delivery.point?, (postcode | delivery.office | region | country)*)>
+<!ATTLIST postaddr
+ %global-attributes;
+ >
+
+<!ELEMENT virtloc (#PCDATA | alt-code)*>
+<!ATTLIST virtloc
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT a (%enriched-text;)*>
+<!ATTLIST a
+ %common-attributes;
+ href CDATA #IMPLIED
+ name CDATA #IMPLIED
+ %url.link;
+ rel NMTOKEN #IMPLIED
+ rev NMTOKEN #IMPLIED
+ title CDATA #IMPLIED
+ methods NMTOKENS #IMPLIED
+ >
+
+<!ELEMENT br EMPTY>
+<!ATTLIST br
+ %global-attributes;
+ >
+
+<!ELEMENT em (%enriched-text;)*>
+<!ATTLIST em %common-attributes;>
+
+<!ELEMENT lang (%enriched-text;)*>
+<!ATTLIST lang %common-attributes;>
+
+<!ELEMENT pronounce (%enriched-text;)*>
+<!ATTLIST pronounce
+ %global-attributes;
+ guide CDATA #IMPLIED
+ phonetic CDATA #IMPLIED
+ >
+
+<!ELEMENT q (%enriched-text;)*>
+<!ATTLIST q
+ %common-attributes;
+ quote-source CDATA #IMPLIED
+ >
+
+
+<!ELEMENT addressee (person, function?, care.of?)>
+<!ATTLIST addressee
+ %global-attributes;
+ >
+
+ <!ELEMENT care.of (#PCDATA)>
+ <!ATTLIST care.of
+ %global-attributes;
+ >
+
+<!ELEMENT delivery.point (#PCDATA | br)*>
+<!ATTLIST delivery.point
+ %global-attributes;
+ point-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+<!ELEMENT postcode (#PCDATA)>
+<!ATTLIST postcode
+ %global-attributes;
+ code-source CDATA #IMPLIED
+ >
+
+<!ELEMENT delivery.office (#PCDATA | br)*>
+<!ATTLIST delivery.office
+ %global-attributes;
+ office-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+
+
+
+<!ELEMENT body.end (tagline?, bibliography?)>
+<!ATTLIST body.end
+ %global-attributes;
+ >
+
+<!ELEMENT tagline (%enriched-text;)*>
+<!ATTLIST tagline
+ %global-attributes;
+ type (std | pa | npa) "std"
+ >
+
+<!ELEMENT bibliography (#PCDATA)>
+<!ATTLIST bibliography
+ %global-attributes;
+ >
+
diff --git a/test/valid/dtds/spec.dtd b/test/valid/dtds/spec.dtd
new file mode 100755
index 0000000..0fdfb86
--- /dev/null
+++ b/test/valid/dtds/spec.dtd
@@ -0,0 +1,972 @@
+<!-- ............................................................... -->
+<!-- XML specification DTD ......................................... -->
+<!-- ............................................................... -->
+
+<!--
+TYPICAL INVOCATION:
+# <!DOCTYPE spec PUBLIC
+# "-//W3C//DTD Specification::19980323//EN"
+# "http://www.w3.org/XML/Group/DTD/xmlspec.dtd">
+
+PURPOSE:
+ This DTD was developed for use with the XML family of W3C
+ specifications. It is an XML-compliant DTD based in part on
+ the TEI Lite and Sweb DTDs.
+
+DEPENDENCIES:
+ None.
+
+CHANGE HISTORY:
+ The list of changes is at the end of the DTD.
+
+ For all details, see the design report at:
+
+ <http://www.w3.org/XML/Group/DTD/xmlspec-report.htm>
+
+ The "typical invocation" FPI always gets updated to reflect the
+ date of the most recent changes.
+
+ Search this file for "#" in the first column to see change history
+ comments.
+
+MAINTAINER:
+ Eve Maler
+ ArborText Inc.
+ elm@arbortext.com
+ voice: +1 781 270 5750
+ fax: +1 781 273 3760
+-->
+
+<!-- ............................................................... -->
+<!-- Entities for characters and symbols ........................... -->
+
+<!--
+#1998-03-10: maler: Added &ldquo; and &rdquo;.
+# Used 8879:1986-compatible decimal character
+# references.
+# Merged charent.mod file back into main file.
+-->
+
+<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY amp "&#38;#38;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">
+<!ENTITY mdash "--">
+<!ENTITY nbsp "&#160;">
+<!ENTITY ldquo "#x201C;">
+<!ENTITY rdquo "#x201D;">
+
+<!-- ............................................................... -->
+<!-- Entities for classes of standalone elements ................... -->
+
+<!--
+#1997-10-16: maler: Added table to %illus.class;.
+#1997-11-28: maler: Added htable to %illus.class;.
+#1997-12-29: maler: IGNOREd table.
+#1998-03-10: maler: Removed SGML Open-specific %illus.class;.
+# Added "local" entities for customization.
+-->
+
+<!ENTITY % local.p.class "">
+<!ENTITY % p.class "p
+ %local.p.class;">
+
+<!ENTITY % local.statusp.class "">
+<!ENTITY % statusp.class "statusp
+ %local.statusp.class;">
+
+<!ENTITY % local.list.class "">
+<!ENTITY % list.class "ulist|olist|slist|glist
+ %local.list.class;">
+
+<!ENTITY % local.speclist.class "">
+<!ENTITY % speclist.class "orglist|blist
+ %local.speclist.class;">
+
+<!ENTITY % local.note.class "">
+<!ENTITY % note.class "note|wfcnote|vcnote
+ %local.note.class;">
+
+<!ENTITY % local.illus.class "">
+<!ENTITY % illus.class "eg|graphic|scrap|htable
+ %local.illus.class;">
+
+<!-- ............................................................... -->
+<!-- Entities for classes of phrase-level elements ................. -->
+
+<!--
+#1997-12-29: maler: Added xspecref to %ref.class;.
+#1998-03-10: maler: Added %ednote.class;.
+# Added "local" entities for customization.
+-->
+
+<!ENTITY % local.annot.class "">
+<!ENTITY % annot.class "footnote
+ %local.annot.class;">
+
+<!ENTITY % local.termdef.class "">
+<!ENTITY % termdef.class "termdef|term
+ %local.termdef.class;">
+
+<!ENTITY % local.emph.class "">
+<!ENTITY % emph.class "emph|quote
+ %local.emph.class;">
+
+<!ENTITY % local.ref.class "">
+<!ENTITY % ref.class "bibref|specref|termref|titleref
+ |xspecref|xtermref
+ %local.ref.class;">
+
+<!ENTITY % local.loc.class "">
+<!ENTITY % loc.class "loc
+ %local.loc.class;">
+
+<!ENTITY % local.tech.class "">
+<!ENTITY % tech.class "kw|nt|xnt|code
+ %local.tech.class;">
+
+<!ENTITY % local.ednote.class "">
+<!ENTITY % ednote.class "ednote
+ %local.ednote.class;">
+
+<!-- ............................................................... -->
+<!-- Entities for mixtures of standalone elements .................. -->
+
+<!--
+#1997-09-30: maler: Created %p.mix; to eliminate p from self.
+#1997-09-30: maler: Added %speclist.class; to %obj.mix; and %p.mix;.
+#1997-09-30: maler: Added %note.class; to %obj.mix; and %p.mix;.
+#1997-10-16: maler: Created %entry.mix;. Note that some elements
+# left out here are still allowed in termdef,
+# which entry can contain through %p.pcd.mix;.
+#1997-11-28: maler: Added %p.class; to %statusobj.mix;.
+#1998-03-10: maler: Added %ednote.class; to all mixtures, except
+# %p.mix; and %statusobj.mix;, because paragraphs
+# and status paragraphs will contain ednote
+# through %p.pcd.mix;.
+#1998-03-123: maler: Added %termdef.mix; (broken out from
+# %termdef.pcd.mix;).
+-->
+
+<!ENTITY % div.mix
+ "%p.class;|%list.class;|%speclist.class;|%note.class;
+ |%illus.class;|%ednote.class;">
+<!ENTITY % obj.mix
+ "%p.class;|%list.class;|%speclist.class;|%note.class;
+ |%illus.class;|%ednote.class;">
+<!ENTITY % p.mix
+ "%list.class;|%speclist.class;|%note.class;|%illus.class;">
+<!ENTITY % entry.mix
+ "%list.class;|note|eg|graphic|%ednote.class;">
+<!ENTITY % statusobj.mix
+ "%p.class;|%statusp.class;|%list.class;">
+<!ENTITY % hdr.mix
+ "%p.class;|%list.class;|%ednote.class;">
+<!ENTITY % termdef.mix
+ "%note.class;|%illus.class;">
+
+<!-- ............................................................... -->
+<!-- Entities for mixtures of #PCDATA and phrase-level elements .... -->
+
+<!-- Note that %termdef.pcd.mix contains %note.class;
+ and %illus.class;, considered standalone elements. -->
+
+<!--
+#1997-09-30: maler: Added scrap and %note.class; to %termdef.pcd.mix;.
+#1997-11-28: maler: Added %loc.class; to %p.pcd.mix;.
+#1998-03-10: maler: Added %ednote.class; to all mixtures.
+#1998-03-23: maler: Moved some %termdef.pcd.mix; stuff out to
+# %termdef.mix;.
+-->
+
+<!ENTITY % p.pcd.mix
+ "#PCDATA|%annot.class;|%termdef.class;|%emph.class;
+ |%ref.class;|%tech.class;|%loc.class;|%ednote.class;">
+<!ENTITY % statusp.pcd.mix
+ "#PCDATA|%annot.class;|%termdef.class;|%emph.class;
+ |%ref.class;|%tech.class;|%loc.class;|%ednote.class;">
+<!ENTITY % head.pcd.mix
+ "#PCDATA|%annot.class;|%emph.class;|%tech.class;|%ednote.class;">
+<!ENTITY % label.pcd.mix
+ "#PCDATA|%annot.class;|%termdef.class;|%emph.class;|%tech.class;
+ |%ednote.class;">
+<!ENTITY % eg.pcd.mix
+ "#PCDATA|%annot.class;|%emph.class;|%ednote.class;">
+<!ENTITY % termdef.pcd.mix
+ "#PCDATA|term|%emph.class;|%ref.class;|%tech.class;
+ |%ednote.class;">
+<!ENTITY % bibl.pcd.mix
+ "#PCDATA|%emph.class;|%ref.class;|%loc.class;|%ednote.class;">
+<!ENTITY % tech.pcd.mix
+ "#PCDATA|%ednote.class;">
+<!ENTITY % loc.pcd.mix
+ "#PCDATA|%loc.class;|%ednote.class;">
+
+<!-- ............................................................... -->
+<!-- Entities for customizable content models ...................... -->
+
+<!--
+#1998-03-10: maler: Added customization entities.
+-->
+
+<!ENTITY % spec.mdl
+ "header, front?, body, back?">
+
+<!ENTITY % header.mdl
+ "title, subtitle?, version, w3c-designation, w3c-doctype,
+ pubdate, notice*, publoc, latestloc?, prevlocs?, authlist,
+ abstract, status, pubstmt?, sourcedesc?, langusage,
+ revisiondesc">
+
+<!ENTITY % pubdate.mdl
+ "day?, month, year">
+
+<!-- ............................................................... -->
+<!-- Entities for common attributes ................................ -->
+
+<!-- key attribute:
+ Optionally provides a sorting or indexing key, for cases when
+ the element content is inappropriate for this purpose. -->
+<!ENTITY % key.att
+ 'key CDATA #IMPLIED'>
+
+<!-- def attribute:
+ Points to the element where the relevant definition can be
+ found, using the IDREF mechanism. %def.att; is for optional
+ def attributes, and %def-req.att; is for required def
+ attributes. -->
+<!ENTITY % def.att
+ 'def IDREF #IMPLIED'>
+<!ENTITY % def-req.att
+ 'def IDREF #REQUIRED'>
+
+<!-- ref attribute:
+ Points to the element where more information can be found,
+ using the IDREF mechanism. %ref.att; is for optional
+ ref attributes, and %ref-req.att; is for required ref
+ attributes. -->
+<!ENTITY % ref.att
+ 'ref IDREF #IMPLIED'>
+<!ENTITY % ref-req.att
+ 'ref IDREF #REQUIRED'>
+
+<!--
+#1998-03-23: maler: Added show and actuate attributes to href.
+# Added semi-common xml:space attribute.
+-->
+
+<!-- HREF and source attributes:
+ Points to the element where more information or source data
+ can be found, using the URL (XLL simple link) mechanism.
+ For some purposes, is associated with additional XLL
+ attributes. %href.att; is for optional HREF attributes,
+ and %href-req.att; is for required HREF attributes.
+ %source-req.att; is for the source attribute, which
+ is always required. -->
+<!ENTITY % href.att
+ 'xml-link CDATA #FIXED "simple"
+ href CDATA #IMPLIED
+ show CDATA #FIXED "embed"
+ actuate CDATA #FIXED "auto"'>
+
+<!ENTITY % href-req.att
+ 'xml-link CDATA #FIXED "simple"
+ href CDATA #REQUIRED
+ show CDATA #FIXED "embed"
+ actuate CDATA #FIXED "auto"'>
+
+<!ENTITY % source-req.att
+ 'xml-link CDATA #FIXED "simple"
+ xml:attributes NMTOKENS #FIXED "href source"
+ source CDATA #REQUIRED
+ show CDATA #FIXED "embed"
+ actuate CDATA #FIXED "auto"'>
+
+<!-- xml:space attribute:
+ Indicates that the element contains white space
+ that the formatter or other application should retain,
+ as appropriate to its function. -->
+<!ENTITY % xmlspace.att
+ 'xml:space (default
+ |preserve) #FIXED "preserve"'>
+
+<!-- Common attributes:
+ Every element has an ID attribute (sometimes required,
+ but usually optional) for links, and a Role attribute
+ for extending the useful life of the DTD by allowing
+ authors to make subclasses for any element. %common.att;
+ is for common attributes where the ID is optional, and
+ %common-idreq.att; is for common attributes where the
+ ID is required. -->
+<!ENTITY % common.att
+ 'id ID #IMPLIED
+ role NMTOKEN #IMPLIED'>
+<!ENTITY % common-idreq.att
+ 'id ID #REQUIRED
+ role NMTOKEN #IMPLIED'>
+
+<!-- ............................................................... -->
+<!-- Common elements ............................................... -->
+
+<!-- head: Title on divisions, productions, and the like -->
+<!ELEMENT head (%head.pcd.mix;)*>
+<!ATTLIST head %common.att;>
+
+<!-- ............................................................... -->
+<!-- Major specification structure ................................. -->
+
+<!--
+#1998-03-10: maler: Made spec content model easily customizable.
+-->
+
+<!ELEMENT spec (%spec.mdl;)>
+<!ATTLIST spec %common.att;>
+
+<!ELEMENT front (div1+)>
+<!ATTLIST front %common.att;>
+
+<!ELEMENT body (div1+)>
+<!ATTLIST body %common.att;>
+
+<!--
+#1997-09-30: maler: Added inform-div1 to back content.
+-->
+
+<!ELEMENT back ((div1+, inform-div1*) | inform-div1+)>
+<!ATTLIST back %common.att;>
+
+<!ELEMENT div1 (head, (%div.mix;)*, div2*)>
+<!ATTLIST div1 %common.att;>
+
+<!--
+#1997-09-30: maler: Added inform-div1 declarations.
+-->
+
+<!-- inform-div1: Non-normative division in back matter -->
+<!ELEMENT inform-div1 (head, (%div.mix;)*, div2*)>
+<!ATTLIST inform-div1 %common.att;>
+
+<!ELEMENT div2 (head, (%div.mix;)*, div3*)>
+<!ATTLIST div2 %common.att;>
+
+<!ELEMENT div3 (head, (%div.mix;)*, div4*)>
+<!ATTLIST div3 %common.att;>
+
+<!ELEMENT div4 (head, (%div.mix;)*)>
+<!ATTLIST div4 %common.att;>
+
+<!-- Specification header .......... -->
+
+<!--
+#1998-03-10: maler: Made header content model easily customizable.
+-->
+
+<!ELEMENT header (%header.mdl;)>
+<!ATTLIST header %common.att;>
+
+<!-- Example of title: "Extensible Cheese Language (XCL)" -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title %common.att;>
+
+<!-- Example of subtitle: "A Cheesy Specification" -->
+<!ELEMENT subtitle (#PCDATA)>
+<!ATTLIST subtitle %common.att;>
+
+<!-- Example of version: "Version 666.0" -->
+<!ELEMENT version (#PCDATA)>
+<!ATTLIST version %common.att;>
+
+<!-- Example of w3c-designation: "WD-xcl-19991231" -->
+<!ELEMENT w3c-designation (#PCDATA)>
+<!ATTLIST w3c-designation %common.att;>
+
+<!-- Example of w3c-doctype: "World Wide Web Consortium Working
+ Draft" -->
+<!ELEMENT w3c-doctype (#PCDATA)>
+<!ATTLIST w3c-doctype %common.att;>
+
+<!--
+#1998-03-10: maler: Made pubdate content model easily customizable.
+-->
+
+<!ELEMENT pubdate (%pubdate.mdl;)>
+<!ATTLIST pubdate %common.att;>
+
+<!ELEMENT day (#PCDATA)>
+<!ATTLIST day %common.att;>
+
+<!ELEMENT month (#PCDATA)>
+<!ATTLIST month %common.att;>
+
+<!ELEMENT year (#PCDATA)>
+<!ATTLIST year %common.att;>
+
+<!-- Example of notice: "This draft is for public comment..." -->
+<!ELEMENT notice (%hdr.mix;)+>
+<!ATTLIST notice %common.att;>
+
+<!ELEMENT publoc (loc+)>
+<!ATTLIST publoc %common.att;>
+
+<!ELEMENT prevlocs (loc+)>
+<!ATTLIST prevlocs %common.att;>
+
+<!ELEMENT latestloc (loc+)>
+<!ATTLIST latestloc %common.att;>
+
+<!-- loc (defined in "Phrase-level elements" below) -->
+
+<!ELEMENT authlist (author+)>
+<!ATTLIST authlist %common.att;>
+
+<!--
+#1997-09-30: maler: Made affiliation optional.
+#1998-03-10: maler: Made email optional.
+-->
+
+<!ELEMENT author (name, affiliation?, email?)>
+<!ATTLIST author %common.att;>
+
+<!ELEMENT name (#PCDATA)>
+<!ATTLIST name
+ %common.att;
+ %key.att;>
+
+<!ELEMENT affiliation (#PCDATA)>
+<!ATTLIST affiliation %common.att;>
+
+<!ELEMENT email (#PCDATA)>
+<!-- HREF attribute:
+ email functions as a hypertext reference through this
+ required attribute. Typically the reference would use
+ the mailto: scheme. -->
+<!ATTLIST email
+ %common.att;
+ %href-req.att;>
+
+<!-- The status element now contains both statusp and p, and
+ the latter now allows loc. Use p; statusp will be removed
+ eventually. -->
+<!ELEMENT status (%statusobj.mix;)+>
+<!ATTLIST status %common.att;>
+
+<!ELEMENT abstract (%hdr.mix;)*>
+<!ATTLIST abstract %common.att;>
+
+<!ELEMENT pubstmt (%hdr.mix;)+>
+<!ATTLIST pubstmt %common.att;>
+
+<!ELEMENT sourcedesc (%hdr.mix;)+>
+<!ATTLIST sourcedesc %common.att;>
+
+<!ELEMENT langusage (language+)>
+<!ATTLIST langusage %common.att;>
+
+<!ELEMENT language (#PCDATA)>
+<!ATTLIST language %common.att;>
+
+<!ELEMENT revisiondesc (%hdr.mix;)+>
+<!ATTLIST revisiondesc %common.att;>
+
+<!-- ............................................................... -->
+<!-- Standalone elements ........................................... -->
+
+<!-- Paragraphs .................... -->
+
+<!--
+#1997-09-30: maler: Changed from %obj.mix; to %p.mix;.
+#1997-12-29: maler: Changed order of %p.mix; and %p.pcd.mix; references.
+#1997-12-29: maler: Changed order of %statusobj.mix; and %statusp.pcd.mix;
+# references.
+-->
+
+<!ELEMENT p (%p.pcd.mix;|%p.mix;)*>
+<!ATTLIST p %common.att;>
+
+<!-- statusp: Special paragraph that allows loc inside it (note that
+ p now also allows loc) -->
+<!ELEMENT statusp (%statusp.pcd.mix;|%statusobj.mix;)*>
+<!ATTLIST statusp %common.att;>
+
+<!-- Lists ......................... -->
+
+<!ELEMENT ulist (item+)>
+<!-- spacing attribute:
+ Use "normal" to get normal vertical spacing for items;
+ use "compact" to get less spacing. The default is dependent
+ on the stylesheet. -->
+<!ATTLIST ulist
+ %common.att;
+ spacing (normal|compact) #IMPLIED>
+
+<!ELEMENT olist (item+)>
+<!-- spacing attribute:
+ Use "normal" to get normal vertical spacing for items;
+ use "compact" to get less spacing. The default is dependent
+ on the stylesheet. -->
+<!ATTLIST olist
+ %common.att;
+ spacing (normal|compact) #IMPLIED>
+
+<!ELEMENT item (%obj.mix;)+>
+<!ATTLIST item %common.att;>
+
+<!ELEMENT slist (sitem+)>
+<!ATTLIST slist %common.att;>
+
+<!ELEMENT sitem (%p.pcd.mix;)*>
+<!ATTLIST sitem %common.att;>
+
+<!ELEMENT glist (gitem+)>
+<!ATTLIST glist %common.att;>
+
+<!ELEMENT gitem (label, def)>
+<!ATTLIST gitem %common.att;>
+
+<!ELEMENT label (%label.pcd.mix;)*>
+<!ATTLIST label %common.att;>
+
+<!ELEMENT def (%obj.mix;)*>
+<!ATTLIST def %common.att;>
+
+<!-- Special lists ................. -->
+
+<!ELEMENT blist (bibl+)>
+<!ATTLIST blist %common.att;>
+
+<!ELEMENT bibl (%bibl.pcd.mix;)*>
+
+<!-- HREF attribute:
+ bibl optionally functions as a hypertext reference to the
+ referred-to resource through this attribute. -->
+
+<!ATTLIST bibl
+ %common.att;
+ %href.att;
+ %key.att;>
+
+<!ELEMENT orglist (member+)>
+<!ATTLIST orglist %common.att;>
+
+<!--
+#1997-09-30: maler: Added optional affiliation.
+-->
+
+<!ELEMENT member (name, affiliation?, role?)>
+<!ATTLIST member %common.att;>
+
+<!-- name (defined in "Specification header" above) -->
+<!-- affiliation (defined in "Specification header" above) -->
+
+<!ELEMENT role (#PCDATA)>
+<!ATTLIST role %common.att;>
+
+<!-- Notes ......................... -->
+
+<!ELEMENT note (%obj.mix;)+>
+<!ATTLIST note %common.att;>
+
+<!ELEMENT wfcnote (head, (%obj.mix;)+)>
+<!-- ID attribute:
+ wfcnote must have an ID so that it can be pointed to
+ from a wfc element in a production. -->
+<!ATTLIST wfcnote
+ %common-idreq.att;>
+
+<!ELEMENT vcnote (head, (%obj.mix;)+)>
+<!-- ID attribute:
+ vcnote must have an ID so that it can be pointed to
+ from a vc element in a production. -->
+<!ATTLIST vcnote
+ %common-idreq.att;>
+
+<!-- Illustrations ................. -->
+
+<!--
+#1998-03-23: maler: Added xml:space attribute.
+-->
+
+<!ELEMENT eg (%eg.pcd.mix;)*>
+<!ATTLIST eg
+ %common.att;
+ %xmlspace.att;>
+
+<!ELEMENT graphic EMPTY>
+<!-- source attribute:
+ The graphic data must reside at the location pointed to.
+ This is a hypertext reference, but for practical purposes,
+ for now it should just be a pathname. -->
+<!ATTLIST graphic
+ %common.att;
+ %source-req.att;
+ alt CDATA #IMPLIED>
+
+<!--
+#1997-11-28: maler: Added prodgroup to scrap and defined it.
+-->
+
+<!ELEMENT scrap (head, (prodgroup+ | prod+ | bnf))>
+<!-- lang attribute:
+ The scrap can link to a description of the language used,
+ found in a language element in the header. -->
+<!ATTLIST scrap
+ %common.att;
+ lang IDREF #IMPLIED>
+
+<!ELEMENT prodgroup (prod+)>
+<!-- pcw<n> attributes:
+ Presentational attributes to control the width
+ of the "pseudo-table" columns used to output
+ groups of productions. -->
+<!ATTLIST prodgroup
+ %common.att;
+ pcw1 CDATA #IMPLIED
+ pcw2 CDATA #IMPLIED
+ pcw3 CDATA #IMPLIED
+ pcw4 CDATA #IMPLIED
+ pcw5 CDATA #IMPLIED
+>
+
+<!ELEMENT prod (lhs, (rhs, (com|wfc|vc)*)+)>
+<!-- ID attribute:
+ The production must have an ID so that cross-references
+ (specref) and mentions of nonterminals (nt) can link to
+ it. -->
+<!ATTLIST prod
+ %common-idreq.att;>
+
+<!ELEMENT lhs (#PCDATA)>
+<!ATTLIST lhs %common.att;>
+
+<!ELEMENT rhs (#PCDATA|nt|xnt|com)*>
+<!ATTLIST rhs %common.att;>
+
+<!-- nt and xnt (defined in "Phrase-level elements" below) -->
+
+<!--
+#1997-11-28: maler: Added loc and bibref to com content.
+-->
+
+<!ELEMENT com (#PCDATA|loc|bibref)*>
+<!ATTLIST com %common.att;>
+
+<!-- wfc: Should generate the head of the wfcnote pointed to -->
+<!ELEMENT wfc EMPTY>
+<!-- def attribute:
+ Each well formedness tagline in a production must link to the
+ wfcnote that defines it. -->
+<!ATTLIST wfc
+ %def-req.att;
+ %common.att;>
+
+<!-- vc: Should generate the head of the vcnote pointed to -->
+<!ELEMENT vc EMPTY>
+<!-- def attribute:
+ Each validity tagline in a production must link to the vcnote
+ that defines it. -->
+<!ATTLIST vc
+ %def-req.att;
+ %common.att;>
+
+<!--
+#1998-03-23: maler: Added xml:space attribute.
+-->
+
+<!-- bnf: Un-marked-up production -->
+<!ELEMENT bnf (%eg.pcd.mix;)*>
+<!ATTLIST bnf
+ %common.att;
+ %xmlspace.att;>
+
+<!--
+#1997-10-16: maler: Added table mechanism.
+#1997-11-28: maler: Added non-null system ID to entity declaration.
+# Added HTML table module.
+#1997-12-29: maler: IGNOREd SGML Open table model.
+#1998-03-10: maler: Removed SGML Open table model.
+# Merged html-tbl.mod file into main file.
+# Added %common.att; to all HTML table elements.
+-->
+
+<!-- TR and TD attributes:
+ Alignment attributes. No default. -->
+<!ENTITY % trtd.att
+ "align (left
+ |center
+ |right) #IMPLIED
+ valign (top
+ |middle
+ |bottom) #IMPLIED">
+
+<!ELEMENT htable (htbody+)>
+<!ATTLIST htable
+ border CDATA "0"
+ cellpadding CDATA "0"
+ align (left
+ |center
+ |right) "left">
+
+<!ELEMENT htbody (tr+)>
+<!ATTLIST htbody %common.att;>
+
+<!ELEMENT tr (td+)>
+<!ATTLIST tr
+ %common.att;
+ %trtd.att;>
+
+<!ELEMENT td (%p.pcd.mix;)*>
+<!ATTLIST td
+ %common.att;
+ %trtd.att;
+ bgcolor CDATA #IMPLIED
+ rowspan CDATA "1"
+ colspan CDATA "1">
+
+<!-- ............................................................... -->
+<!-- Phrase-level elements ......................................... -->
+
+<!-- bibref: Should generate, in square brackets, "key" on bibl -->
+<!ELEMENT bibref EMPTY>
+<!-- ref attribute:
+ A bibliography reference must link to the bibl element that
+ describes the resource. -->
+<!ATTLIST bibref
+ %common.att;
+ %ref-req.att;>
+
+<!ELEMENT code (%tech.pcd.mix;)*>
+<!ATTLIST code %common.att;>
+
+<!--
+#1998-03-10: maler: Declared ednote and related elements.
+-->
+
+<!ELEMENT ednote (name?, date?, edtext)>
+<!ATTLIST ednote %common.att;>
+
+<!ELEMENT date (#PCDATA)>
+<!ATTLIST date %common.att;>
+
+<!ELEMENT edtext (#PCDATA)>
+<!ATTLIST edtext %common.att;>
+
+<!ELEMENT emph (#PCDATA)>
+<!ATTLIST emph %common.att;>
+
+<!-- footnote: Both footnote content and call to footnote -->
+<!ELEMENT footnote (%obj.mix;)+>
+<!ATTLIST footnote %common.att;>
+
+<!ELEMENT kw (%tech.pcd.mix;)*>
+<!ATTLIST kw %common.att;>
+
+<!ELEMENT loc (#PCDATA)>
+<!-- HREF attribute:
+ The purpose of a loc element is to function as a hypertext
+ link to a resource. (Ideally, the content of loc will also
+ mention the URI of the resource, so that readers of the
+ printed version will be able to locate the resource.) -->
+<!ATTLIST loc
+ %common.att;
+ %href-req.att;>
+
+<!ELEMENT nt (#PCDATA)>
+<!-- def attribute:
+ The nonterminal must link to the production that defines
+ it. -->
+<!ATTLIST nt
+ %common.att;
+ %def-req.att;>
+
+<!--
+#1998-03-10: maler: Declared quote.
+-->
+
+<!-- quote: Scare quotes and other purely presentational quotes -->
+<!ELEMENT quote (%p.pcd.mix;)*>
+<!ATTLIST quote %common.att;>
+
+<!-- specref: Should generate italic "[n.n], Section Title" for
+ div, "n" for numbered item, or "[n]" for production -->
+<!ELEMENT specref EMPTY>
+<!-- ref attribute:
+ The purpose of a specref element is to link to a div, item
+ in an olist, or production in the current spec. -->
+<!ATTLIST specref
+ %common.att;
+ %ref-req.att;>
+
+<!ELEMENT term (#PCDATA)>
+<!ATTLIST term %common.att;>
+
+<!ELEMENT termdef (%termdef.pcd.mix;|%termdef.mix;)*>
+<!-- ID attribute:
+ A term definition must have an ID so that it can be linked
+ to from termref elements. -->
+<!-- term attribute:
+ The canonical form of the term or phrase being defined must
+ appear in this attribute, even if the term or phrase also
+ appears in the element content in identical form (e.g., in
+ the term element). -->
+<!ATTLIST termdef
+ %common-idreq.att;
+ term CDATA #REQUIRED>
+
+<!ELEMENT termref (#PCDATA)>
+<!-- ref attribute:
+ A term reference must link to the termdef element that
+ defines the term. -->
+<!ATTLIST termref
+ %common.att;
+ %def-req.att;>
+
+<!ELEMENT titleref (#PCDATA)>
+<!-- HREF attribute:
+ A title reference can optionally function as a hypertext
+ link to the resource with this title. -->
+<!ATTLIST titleref
+ %common.att;
+ %href.att;>
+
+<!ELEMENT xnt (#PCDATA)>
+<!-- HREF attribute:
+ The nonterminal must hyperlink to a resource that serves
+ to define it (e.g., a production in a related XML
+ specification). -->
+<!ATTLIST xnt
+ %common.att;
+ %href-req.att;>
+
+<!--
+#1997-12-29: maler: Declared xspecref.
+-->
+
+<!ELEMENT xspecref (#PCDATA)>
+<!-- HREF attribute:
+ The spec reference must hyperlink to the resource to
+ cross-refer to (e.g., a section in a related XML
+ specification). -->
+<!ATTLIST xspecref
+ %common.att;
+ %href-req.att;>
+
+<!ELEMENT xtermref (#PCDATA)>
+<!-- HREF attribute:
+ The term reference must hyperlink to the resource that
+ serves to define the term (e.g., a term definition in
+ a related XML specification). -->
+<!ATTLIST xtermref
+ %common.att;
+ %href-req.att;>
+
+<!-- ............................................................... -->
+<!-- Unused elements for ADEPT ..................................... -->
+
+<!--
+#1997-09-30: maler: Added unusued elements.
+#1997-10-14: maler: Fixed div to move nested div to the mixture.
+-->
+
+<!-- The following elements are purposely declared but never
+ referenced. Declaring them allows them to be pasted from
+ an HTML document into a document using this DTD in ADEPT.
+ The ATD Context Transformation mechanism will try to convert
+ them to the appropriate element for this DTD. While this
+ conversion will not work for all fragments, it does allow
+ many cases to work reasonably well. -->
+
+<!ELEMENT div
+ (head?, (%div.mix;|ul|ol|h1|h2|h3|h4|h5|h6|div)*)>
+<!ELEMENT h1 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h2 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h3 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h4 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h5 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h6 (%head.pcd.mix;|em|a)*>
+<!ELEMENT pre (%eg.pcd.mix;|em)*>
+<!ELEMENT ul (item|li)*>
+<!ELEMENT ol (item|li)*>
+<!ELEMENT li (#PCDATA|%obj.mix;)*>
+<!ELEMENT em (#PCDATA)>
+<!ELEMENT a (#PCDATA)>
+
+<!-- ............................................................... -->
+<!-- Change history ................................................ -->
+
+<!--
+#1997-08-18: maler
+#- Did a major revision.
+#1997-09-10: maler
+#- Updated FPI.
+#- Removed namekey element and put key attribute on name element.
+#- Made statusp element and supporting entities.
+#- Added slist element with sitem+ content.
+#- Required head on scrap and added new bnf subelement.
+#- Added an xnt element and allowed it and nt in regular text and rhs.
+#- Removed the ntref element.
+#- Added back the com element to the content of rhs.
+#- Added a key attribute to bibl.
+#- Removed the ident element.
+#- Added a term element to be used inside termdef.
+#- Added an xtermref element parallel to termref.
+#- Beefed up DTD comments.
+#1997-09-12: maler
+#- Allowed term element in general text.
+#- Changed bibref to EMPTY.
+#- Added ref.class to termdef.pcd.mix.
+#1997-09-14: maler
+#- Changed main attribute of xtermref from def to href.
+#- Added termdef.class to label contents.
+#1997-09-30: maler
+#- Added character entity module and added new entities.
+#- Removed p from appearing directly in self; created %p.mix;.
+#- Added inform-div (non-normative division) element.
+#- Fixed xtermref comment to mention HREF, not ref.
+#- Extended orglist model to allow optional affiliation.
+#- Modified author to make affiliation optional.
+#- Added %speclist.class; and %note.class; to %obj.mix; and %p.mix;.
+#- Added %note.class; and %illus.class; to %termdef.pcd.mix;.
+#- Added unused HTML elements.
+#- Put empty system ID next to public ID in entity declarations.
+#1997-10-14: maler
+#- Fixed "unused" div content model to move nested div to mixture.
+#1997-10-16: maler
+#- Added SGML Open Exchange tables.
+#1997-11-28: maler
+#- Added support for prodgroup and its attributes.
+#- Added support for HTML tables.
+#- Added loc and bibref to content of com.
+#- Added loc to general p content models.
+#- Allowed p as alternative to statusp in status.
+#- Added non-null system IDs to external parameter entity declarations.
+#- (Modified the SGML Open table module to make it XML-compliant.)
+#- (Modified the character entity module.)
+#1997-12-29: maler
+#- Moved #PCDATA occurrences to come before GIs in content models.
+#- Removed use of the SGML Open table module.
+#- Added xspecref element.
+#- Ensured that all FPIs contain 4-digit year.
+#- (Modified the character entity module.)
+#1997-03-10: maler
+#- Merged the character entity and table modules into the main file.
+#- Added ldquo and rdquo entities.
+#- Added common attributes to prodgroup.
+#- Made the email element in header optional.
+#- Removed reference to the SGML Open table model.
+#- Added ednote element.
+#- Added quote element.
+#- Updated XLink usage to reflect 3 March 1998 WD.
+#- Added "local" entities to the class entities for customization.
+#- Parameterized several content models to allow for customization.
+#1997-03-23: maler
+#- Cleaned up some comments and removed some others.
+#- Added xml:space semi-common attribute to eg and bnf elements.
+#- Added show and embed attributes on all the uses of href.
+#- Added %common.att; to all HTML table elements.
+#- Added a real URI to the "typical invocation" comment.
+-->
+
+<!-- ............................................................... -->
+<!-- End of XML specification DTD .................................. -->
+<!-- ............................................................... -->
diff --git a/test/valid/dtds/xhtml-lat1.ent b/test/valid/dtds/xhtml-lat1.ent
new file mode 100644
index 0000000..aaae738
--- /dev/null
+++ b/test/valid/dtds/xhtml-lat1.ent
@@ -0,0 +1,196 @@
+<!-- Portions (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+-->
+<!-- Character entity set. Typical invocation:
+ <!ENTITY % HTMLlat1 PUBLIC
+ "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
+ %HTMLlat1;
+-->
+
+<!ENTITY nbsp "&#160;"> <!-- no-break space = non-breaking space,
+ U+00A0 ISOnum -->
+<!ENTITY iexcl "&#161;"> <!-- inverted exclamation mark, U+00A1 ISOnum -->
+<!ENTITY cent "&#162;"> <!-- cent sign, U+00A2 ISOnum -->
+<!ENTITY pound "&#163;"> <!-- pound sign, U+00A3 ISOnum -->
+<!ENTITY curren "&#164;"> <!-- currency sign, U+00A4 ISOnum -->
+<!ENTITY yen "&#165;"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->
+<!ENTITY brvbar "&#166;"> <!-- broken bar = broken vertical bar,
+ U+00A6 ISOnum -->
+<!ENTITY sect "&#167;"> <!-- section sign, U+00A7 ISOnum -->
+<!ENTITY uml "&#168;"> <!-- diaeresis = spacing diaeresis,
+ U+00A8 ISOdia -->
+<!ENTITY copy "&#169;"> <!-- copyright sign, U+00A9 ISOnum -->
+<!ENTITY ordf "&#170;"> <!-- feminine ordinal indicator, U+00AA ISOnum -->
+<!ENTITY laquo "&#171;"> <!-- left-pointing double angle quotation mark
+ = left pointing guillemet, U+00AB ISOnum -->
+<!ENTITY not "&#172;"> <!-- not sign = discretionary hyphen,
+ U+00AC ISOnum -->
+<!ENTITY shy "&#173;"> <!-- soft hyphen = discretionary hyphen,
+ U+00AD ISOnum -->
+<!ENTITY reg "&#174;"> <!-- registered sign = registered trade mark sign,
+ U+00AE ISOnum -->
+<!ENTITY macr "&#175;"> <!-- macron = spacing macron = overline
+ = APL overbar, U+00AF ISOdia -->
+<!ENTITY deg "&#176;"> <!-- degree sign, U+00B0 ISOnum -->
+<!ENTITY plusmn "&#177;"> <!-- plus-minus sign = plus-or-minus sign,
+ U+00B1 ISOnum -->
+<!ENTITY sup2 "&#178;"> <!-- superscript two = superscript digit two
+ = squared, U+00B2 ISOnum -->
+<!ENTITY sup3 "&#179;"> <!-- superscript three = superscript digit three
+ = cubed, U+00B3 ISOnum -->
+<!ENTITY acute "&#180;"> <!-- acute accent = spacing acute,
+ U+00B4 ISOdia -->
+<!ENTITY micro "&#181;"> <!-- micro sign, U+00B5 ISOnum -->
+<!ENTITY para "&#182;"> <!-- pilcrow sign = paragraph sign,
+ U+00B6 ISOnum -->
+<!ENTITY middot "&#183;"> <!-- middle dot = Georgian comma
+ = Greek middle dot, U+00B7 ISOnum -->
+<!ENTITY cedil "&#184;"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
+<!ENTITY sup1 "&#185;"> <!-- superscript one = superscript digit one,
+ U+00B9 ISOnum -->
+<!ENTITY ordm "&#186;"> <!-- masculine ordinal indicator,
+ U+00BA ISOnum -->
+<!ENTITY raquo "&#187;"> <!-- right-pointing double angle quotation mark
+ = right pointing guillemet, U+00BB ISOnum -->
+<!ENTITY frac14 "&#188;"> <!-- vulgar fraction one quarter
+ = fraction one quarter, U+00BC ISOnum -->
+<!ENTITY frac12 "&#189;"> <!-- vulgar fraction one half
+ = fraction one half, U+00BD ISOnum -->
+<!ENTITY frac34 "&#190;"> <!-- vulgar fraction three quarters
+ = fraction three quarters, U+00BE ISOnum -->
+<!ENTITY iquest "&#191;"> <!-- inverted question mark
+ = turned question mark, U+00BF ISOnum -->
+<!ENTITY Agrave "&#192;"> <!-- latin capital letter A with grave
+ = latin capital letter A grave,
+ U+00C0 ISOlat1 -->
+<!ENTITY Aacute "&#193;"> <!-- latin capital letter A with acute,
+ U+00C1 ISOlat1 -->
+<!ENTITY Acirc "&#194;"> <!-- latin capital letter A with circumflex,
+ U+00C2 ISOlat1 -->
+<!ENTITY Atilde "&#195;"> <!-- latin capital letter A with tilde,
+ U+00C3 ISOlat1 -->
+<!ENTITY Auml "&#196;"> <!-- latin capital letter A with diaeresis,
+ U+00C4 ISOlat1 -->
+<!ENTITY Aring "&#197;"> <!-- latin capital letter A with ring above
+ = latin capital letter A ring,
+ U+00C5 ISOlat1 -->
+<!ENTITY AElig "&#198;"> <!-- latin capital letter AE
+ = latin capital ligature AE,
+ U+00C6 ISOlat1 -->
+<!ENTITY Ccedil "&#199;"> <!-- latin capital letter C with cedilla,
+ U+00C7 ISOlat1 -->
+<!ENTITY Egrave "&#200;"> <!-- latin capital letter E with grave,
+ U+00C8 ISOlat1 -->
+<!ENTITY Eacute "&#201;"> <!-- latin capital letter E with acute,
+ U+00C9 ISOlat1 -->
+<!ENTITY Ecirc "&#202;"> <!-- latin capital letter E with circumflex,
+ U+00CA ISOlat1 -->
+<!ENTITY Euml "&#203;"> <!-- latin capital letter E with diaeresis,
+ U+00CB ISOlat1 -->
+<!ENTITY Igrave "&#204;"> <!-- latin capital letter I with grave,
+ U+00CC ISOlat1 -->
+<!ENTITY Iacute "&#205;"> <!-- latin capital letter I with acute,
+ U+00CD ISOlat1 -->
+<!ENTITY Icirc "&#206;"> <!-- latin capital letter I with circumflex,
+ U+00CE ISOlat1 -->
+<!ENTITY Iuml "&#207;"> <!-- latin capital letter I with diaeresis,
+ U+00CF ISOlat1 -->
+<!ENTITY ETH "&#208;"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->
+<!ENTITY Ntilde "&#209;"> <!-- latin capital letter N with tilde,
+ U+00D1 ISOlat1 -->
+<!ENTITY Ograve "&#210;"> <!-- latin capital letter O with grave,
+ U+00D2 ISOlat1 -->
+<!ENTITY Oacute "&#211;"> <!-- latin capital letter O with acute,
+ U+00D3 ISOlat1 -->
+<!ENTITY Ocirc "&#212;"> <!-- latin capital letter O with circumflex,
+ U+00D4 ISOlat1 -->
+<!ENTITY Otilde "&#213;"> <!-- latin capital letter O with tilde,
+ U+00D5 ISOlat1 -->
+<!ENTITY Ouml "&#214;"> <!-- latin capital letter O with diaeresis,
+ U+00D6 ISOlat1 -->
+<!ENTITY times "&#215;"> <!-- multiplication sign, U+00D7 ISOnum -->
+<!ENTITY Oslash "&#216;"> <!-- latin capital letter O with stroke
+ = latin capital letter O slash,
+ U+00D8 ISOlat1 -->
+<!ENTITY Ugrave "&#217;"> <!-- latin capital letter U with grave,
+ U+00D9 ISOlat1 -->
+<!ENTITY Uacute "&#218;"> <!-- latin capital letter U with acute,
+ U+00DA ISOlat1 -->
+<!ENTITY Ucirc "&#219;"> <!-- latin capital letter U with circumflex,
+ U+00DB ISOlat1 -->
+<!ENTITY Uuml "&#220;"> <!-- latin capital letter U with diaeresis,
+ U+00DC ISOlat1 -->
+<!ENTITY Yacute "&#221;"> <!-- latin capital letter Y with acute,
+ U+00DD ISOlat1 -->
+<!ENTITY THORN "&#222;"> <!-- latin capital letter THORN,
+ U+00DE ISOlat1 -->
+<!ENTITY szlig "&#223;"> <!-- latin small letter sharp s = ess-zed,
+ U+00DF ISOlat1 -->
+<!ENTITY agrave "&#224;"> <!-- latin small letter a with grave
+ = latin small letter a grave,
+ U+00E0 ISOlat1 -->
+<!ENTITY aacute "&#225;"> <!-- latin small letter a with acute,
+ U+00E1 ISOlat1 -->
+<!ENTITY acirc "&#226;"> <!-- latin small letter a with circumflex,
+ U+00E2 ISOlat1 -->
+<!ENTITY atilde "&#227;"> <!-- latin small letter a with tilde,
+ U+00E3 ISOlat1 -->
+<!ENTITY auml "&#228;"> <!-- latin small letter a with diaeresis,
+ U+00E4 ISOlat1 -->
+<!ENTITY aring "&#229;"> <!-- latin small letter a with ring above
+ = latin small letter a ring,
+ U+00E5 ISOlat1 -->
+<!ENTITY aelig "&#230;"> <!-- latin small letter ae
+ = latin small ligature ae, U+00E6 ISOlat1 -->
+<!ENTITY ccedil "&#231;"> <!-- latin small letter c with cedilla,
+ U+00E7 ISOlat1 -->
+<!ENTITY egrave "&#232;"> <!-- latin small letter e with grave,
+ U+00E8 ISOlat1 -->
+<!ENTITY eacute "&#233;"> <!-- latin small letter e with acute,
+ U+00E9 ISOlat1 -->
+<!ENTITY ecirc "&#234;"> <!-- latin small letter e with circumflex,
+ U+00EA ISOlat1 -->
+<!ENTITY euml "&#235;"> <!-- latin small letter e with diaeresis,
+ U+00EB ISOlat1 -->
+<!ENTITY igrave "&#236;"> <!-- latin small letter i with grave,
+ U+00EC ISOlat1 -->
+<!ENTITY iacute "&#237;"> <!-- latin small letter i with acute,
+ U+00ED ISOlat1 -->
+<!ENTITY icirc "&#238;"> <!-- latin small letter i with circumflex,
+ U+00EE ISOlat1 -->
+<!ENTITY iuml "&#239;"> <!-- latin small letter i with diaeresis,
+ U+00EF ISOlat1 -->
+<!ENTITY eth "&#240;"> <!-- latin small letter eth, U+00F0 ISOlat1 -->
+<!ENTITY ntilde "&#241;"> <!-- latin small letter n with tilde,
+ U+00F1 ISOlat1 -->
+<!ENTITY ograve "&#242;"> <!-- latin small letter o with grave,
+ U+00F2 ISOlat1 -->
+<!ENTITY oacute "&#243;"> <!-- latin small letter o with acute,
+ U+00F3 ISOlat1 -->
+<!ENTITY ocirc "&#244;"> <!-- latin small letter o with circumflex,
+ U+00F4 ISOlat1 -->
+<!ENTITY otilde "&#245;"> <!-- latin small letter o with tilde,
+ U+00F5 ISOlat1 -->
+<!ENTITY ouml "&#246;"> <!-- latin small letter o with diaeresis,
+ U+00F6 ISOlat1 -->
+<!ENTITY divide "&#247;"> <!-- division sign, U+00F7 ISOnum -->
+<!ENTITY oslash "&#248;"> <!-- latin small letter o with stroke,
+ = latin small letter o slash,
+ U+00F8 ISOlat1 -->
+<!ENTITY ugrave "&#249;"> <!-- latin small letter u with grave,
+ U+00F9 ISOlat1 -->
+<!ENTITY uacute "&#250;"> <!-- latin small letter u with acute,
+ U+00FA ISOlat1 -->
+<!ENTITY ucirc "&#251;"> <!-- latin small letter u with circumflex,
+ U+00FB ISOlat1 -->
+<!ENTITY uuml "&#252;"> <!-- latin small letter u with diaeresis,
+ U+00FC ISOlat1 -->
+<!ENTITY yacute "&#253;"> <!-- latin small letter y with acute,
+ U+00FD ISOlat1 -->
+<!ENTITY thorn "&#254;"> <!-- latin small letter thorn with,
+ U+00FE ISOlat1 -->
+<!ENTITY yuml "&#255;"> <!-- latin small letter y with diaeresis,
+ U+00FF ISOlat1 -->
diff --git a/test/valid/dtds/xhtml-special.ent b/test/valid/dtds/xhtml-special.ent
new file mode 100644
index 0000000..cf709d1
--- /dev/null
+++ b/test/valid/dtds/xhtml-special.ent
@@ -0,0 +1,79 @@
+<!-- Special characters for HTML -->
+
+<!-- Character entity set. Typical invocation:
+ <!ENTITY % HTMLspecial PUBLIC
+ "-//W3C//ENTITIES Special for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
+ %HTMLspecial;
+-->
+
+<!-- Portions (C) International Organization for Standardization 1986:
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+ New names (i.e., not in ISO 8879 list) do not clash with any
+ existing ISO 8879 entity names. ISO 10646 character numbers
+ are given for each character, in hex. values are decimal
+ conversions of the ISO 10646 values and refer to the document
+ character set. Names are Unicode names.
+-->
+
+<!-- C0 Controls and Basic Latin -->
+<!ENTITY quot "&#34;"> <!-- quotation mark = APL quote,
+ U+0022 ISOnum -->
+<!ENTITY amp "&#38;#38;"> <!-- ampersand, U+0026 ISOnum -->
+<!ENTITY lt "&#38;#60;"> <!-- less-than sign, U+003C ISOnum -->
+<!ENTITY gt "&#62;"> <!-- greater-than sign, U+003E ISOnum -->
+<!ENTITY apos "&#39;"> <!-- apostrophe mark, U+0027 ISOnum -->
+
+<!-- Latin Extended-A -->
+<!ENTITY OElig "&#338;"> <!-- latin capital ligature OE,
+ U+0152 ISOlat2 -->
+<!ENTITY oelig "&#339;"> <!-- latin small ligature oe, U+0153 ISOlat2 -->
+<!-- ligature is a misnomer, this is a separate character in some languages -->
+<!ENTITY Scaron "&#352;"> <!-- latin capital letter S with caron,
+ U+0160 ISOlat2 -->
+<!ENTITY scaron "&#353;"> <!-- latin small letter s with caron,
+ U+0161 ISOlat2 -->
+<!ENTITY Yuml "&#376;"> <!-- latin capital letter Y with diaeresis,
+ U+0178 ISOlat2 -->
+
+<!-- Spacing Modifier Letters -->
+<!ENTITY circ "&#710;"> <!-- modifier letter circumflex accent,
+ U+02C6 ISOpub -->
+<!ENTITY tilde "&#732;"> <!-- small tilde, U+02DC ISOdia -->
+
+<!-- General Punctuation -->
+<!ENTITY ensp "&#8194;"> <!-- en space, U+2002 ISOpub -->
+<!ENTITY emsp "&#8195;"> <!-- em space, U+2003 ISOpub -->
+<!ENTITY thinsp "&#8201;"> <!-- thin space, U+2009 ISOpub -->
+<!ENTITY zwnj "&#8204;"> <!-- zero width non-joiner,
+ U+200C NEW RFC 2070 -->
+<!ENTITY zwj "&#8205;"> <!-- zero width joiner, U+200D NEW RFC 2070 -->
+<!ENTITY lrm "&#8206;"> <!-- left-to-right mark, U+200E NEW RFC 2070 -->
+<!ENTITY rlm "&#8207;"> <!-- right-to-left mark, U+200F NEW RFC 2070 -->
+<!ENTITY ndash "&#8211;"> <!-- en dash, U+2013 ISOpub -->
+<!ENTITY mdash "&#8212;"> <!-- em dash, U+2014 ISOpub -->
+<!ENTITY lsquo "&#8216;"> <!-- left single quotation mark,
+ U+2018 ISOnum -->
+<!ENTITY rsquo "&#8217;"> <!-- right single quotation mark,
+ U+2019 ISOnum -->
+<!ENTITY sbquo "&#8218;"> <!-- single low-9 quotation mark, U+201A NEW -->
+<!ENTITY ldquo "&#8220;"> <!-- left double quotation mark,
+ U+201C ISOnum -->
+<!ENTITY rdquo "&#8221;"> <!-- right double quotation mark,
+ U+201D ISOnum -->
+<!ENTITY bdquo "&#8222;"> <!-- double low-9 quotation mark, U+201E NEW -->
+<!ENTITY dagger "&#8224;"> <!-- dagger, U+2020 ISOpub -->
+<!ENTITY Dagger "&#8225;"> <!-- double dagger, U+2021 ISOpub -->
+<!ENTITY permil "&#8240;"> <!-- per mille sign, U+2030 ISOtech -->
+<!ENTITY lsaquo "&#8249;"> <!-- single left-pointing angle quotation mark,
+ U+2039 ISO proposed -->
+<!-- lsaquo is proposed but not yet ISO standardized -->
+<!ENTITY rsaquo "&#8250;"> <!-- single right-pointing angle quotation mark,
+ U+203A ISO proposed -->
+<!-- rsaquo is proposed but not yet ISO standardized -->
+<!ENTITY euro "&#8364;"> <!-- euro sign, U+20AC NEW -->
diff --git a/test/valid/dtds/xhtml-symbol.ent b/test/valid/dtds/xhtml-symbol.ent
new file mode 100644
index 0000000..16f876b
--- /dev/null
+++ b/test/valid/dtds/xhtml-symbol.ent
@@ -0,0 +1,242 @@
+<!-- Mathematical, Greek and Symbolic characters for HTML -->
+
+<!-- Character entity set. Typical invocation:
+ <!ENTITY % HTMLsymbol PUBLIC
+ "-//W3C//ENTITIES Symbols for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
+ %HTMLsymbol;
+-->
+
+<!-- Portions (C) International Organization for Standardization 1986:
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+ New names (i.e., not in ISO 8879 list) do not clash with any
+ existing ISO 8879 entity names. ISO 10646 character numbers
+ are given for each character, in hex. values are decimal
+ conversions of the ISO 10646 values and refer to the document
+ character set. Names are Unicode names.
+-->
+
+<!-- Latin Extended-B -->
+<!ENTITY fnof "&#402;"> <!-- latin small f with hook = function
+ = florin, U+0192 ISOtech -->
+
+<!-- Greek -->
+<!ENTITY Alpha "&#913;"> <!-- greek capital letter alpha, U+0391 -->
+<!ENTITY Beta "&#914;"> <!-- greek capital letter beta, U+0392 -->
+<!ENTITY Gamma "&#915;"> <!-- greek capital letter gamma,
+ U+0393 ISOgrk3 -->
+<!ENTITY Delta "&#916;"> <!-- greek capital letter delta,
+ U+0394 ISOgrk3 -->
+<!ENTITY Epsilon "&#917;"> <!-- greek capital letter epsilon, U+0395 -->
+<!ENTITY Zeta "&#918;"> <!-- greek capital letter zeta, U+0396 -->
+<!ENTITY Eta "&#919;"> <!-- greek capital letter eta, U+0397 -->
+<!ENTITY Theta "&#920;"> <!-- greek capital letter theta,
+ U+0398 ISOgrk3 -->
+<!ENTITY Iota "&#921;"> <!-- greek capital letter iota, U+0399 -->
+<!ENTITY Kappa "&#922;"> <!-- greek capital letter kappa, U+039A -->
+<!ENTITY Lambda "&#923;"> <!-- greek capital letter lambda,
+ U+039B ISOgrk3 -->
+<!ENTITY Mu "&#924;"> <!-- greek capital letter mu, U+039C -->
+<!ENTITY Nu "&#925;"> <!-- greek capital letter nu, U+039D -->
+<!ENTITY Xi "&#926;"> <!-- greek capital letter xi, U+039E ISOgrk3 -->
+<!ENTITY Omicron "&#927;"> <!-- greek capital letter omicron, U+039F -->
+<!ENTITY Pi "&#928;"> <!-- greek capital letter pi, U+03A0 ISOgrk3 -->
+<!ENTITY Rho "&#929;"> <!-- greek capital letter rho, U+03A1 -->
+<!-- there is no Sigmaf, and no U+03A2 character either -->
+<!ENTITY Sigma "&#931;"> <!-- greek capital letter sigma,
+ U+03A3 ISOgrk3 -->
+<!ENTITY Tau "&#932;"> <!-- greek capital letter tau, U+03A4 -->
+<!ENTITY Upsilon "&#933;"> <!-- greek capital letter upsilon,
+ U+03A5 ISOgrk3 -->
+<!ENTITY Phi "&#934;"> <!-- greek capital letter phi,
+ U+03A6 ISOgrk3 -->
+<!ENTITY Chi "&#935;"> <!-- greek capital letter chi, U+03A7 -->
+<!ENTITY Psi "&#936;"> <!-- greek capital letter psi,
+ U+03A8 ISOgrk3 -->
+<!ENTITY Omega "&#937;"> <!-- greek capital letter omega,
+ U+03A9 ISOgrk3 -->
+
+<!ENTITY alpha "&#945;"> <!-- greek small letter alpha,
+ U+03B1 ISOgrk3 -->
+<!ENTITY beta "&#946;"> <!-- greek small letter beta, U+03B2 ISOgrk3 -->
+<!ENTITY gamma "&#947;"> <!-- greek small letter gamma,
+ U+03B3 ISOgrk3 -->
+<!ENTITY delta "&#948;"> <!-- greek small letter delta,
+ U+03B4 ISOgrk3 -->
+<!ENTITY epsilon "&#949;"> <!-- greek small letter epsilon,
+ U+03B5 ISOgrk3 -->
+<!ENTITY zeta "&#950;"> <!-- greek small letter zeta, U+03B6 ISOgrk3 -->
+<!ENTITY eta "&#951;"> <!-- greek small letter eta, U+03B7 ISOgrk3 -->
+<!ENTITY theta "&#952;"> <!-- greek small letter theta,
+ U+03B8 ISOgrk3 -->
+<!ENTITY iota "&#953;"> <!-- greek small letter iota, U+03B9 ISOgrk3 -->
+<!ENTITY kappa "&#954;"> <!-- greek small letter kappa,
+ U+03BA ISOgrk3 -->
+<!ENTITY lambda "&#955;"> <!-- greek small letter lambda,
+ U+03BB ISOgrk3 -->
+<!ENTITY mu "&#956;"> <!-- greek small letter mu, U+03BC ISOgrk3 -->
+<!ENTITY nu "&#957;"> <!-- greek small letter nu, U+03BD ISOgrk3 -->
+<!ENTITY xi "&#958;"> <!-- greek small letter xi, U+03BE ISOgrk3 -->
+<!ENTITY omicron "&#959;"> <!-- greek small letter omicron, U+03BF NEW -->
+<!ENTITY pi "&#960;"> <!-- greek small letter pi, U+03C0 ISOgrk3 -->
+<!ENTITY rho "&#961;"> <!-- greek small letter rho, U+03C1 ISOgrk3 -->
+<!ENTITY sigmaf "&#962;"> <!-- greek small letter final sigma,
+ U+03C2 ISOgrk3 -->
+<!ENTITY sigma "&#963;"> <!-- greek small letter sigma,
+ U+03C3 ISOgrk3 -->
+<!ENTITY tau "&#964;"> <!-- greek small letter tau, U+03C4 ISOgrk3 -->
+<!ENTITY upsilon "&#965;"> <!-- greek small letter upsilon,
+ U+03C5 ISOgrk3 -->
+<!ENTITY phi "&#966;"> <!-- greek small letter phi, U+03C6 ISOgrk3 -->
+<!ENTITY chi "&#967;"> <!-- greek small letter chi, U+03C7 ISOgrk3 -->
+<!ENTITY psi "&#968;"> <!-- greek small letter psi, U+03C8 ISOgrk3 -->
+<!ENTITY omega "&#969;"> <!-- greek small letter omega,
+ U+03C9 ISOgrk3 -->
+<!ENTITY thetasym "&#977;"> <!-- greek small letter theta symbol,
+ U+03D1 NEW -->
+<!ENTITY upsih "&#978;"> <!-- greek upsilon with hook symbol,
+ U+03D2 NEW -->
+<!ENTITY piv "&#982;"> <!-- greek pi symbol, U+03D6 ISOgrk3 -->
+
+<!-- General Punctuation -->
+<!ENTITY bull "&#8226;"> <!-- bullet = black small circle,
+ U+2022 ISOpub -->
+<!-- bullet is NOT the same as bullet operator, U+2219 -->
+<!ENTITY hellip "&#8230;"> <!-- horizontal ellipsis = three dot leader,
+ U+2026 ISOpub -->
+<!ENTITY prime "&#8242;"> <!-- prime = minutes = feet, U+2032 ISOtech -->
+<!ENTITY Prime "&#8243;"> <!-- double prime = seconds = inches,
+ U+2033 ISOtech -->
+<!ENTITY oline "&#8254;"> <!-- overline = spacing overscore,
+ U+203E NEW -->
+<!ENTITY frasl "&#8260;"> <!-- fraction slash, U+2044 NEW -->
+
+<!-- Letterlike Symbols -->
+<!ENTITY weierp "&#8472;"> <!-- script capital P = power set
+ = Weierstrass p, U+2118 ISOamso -->
+<!ENTITY image "&#8465;"> <!-- blackletter capital I = imaginary part,
+ U+2111 ISOamso -->
+<!ENTITY real "&#8476;"> <!-- blackletter capital R = real part symbol,
+ U+211C ISOamso -->
+<!ENTITY trade "&#8482;"> <!-- trade mark sign, U+2122 ISOnum -->
+<!ENTITY alefsym "&#8501;"> <!-- alef symbol = first transfinite cardinal,
+ U+2135 NEW -->
+<!-- alef symbol is NOT the same as hebrew letter alef,
+ U+05D0 although the same glyph could be used to depict both characters -->
+
+<!-- Arrows -->
+<!ENTITY larr "&#8592;"> <!-- leftwards arrow, U+2190 ISOnum -->
+<!ENTITY uarr "&#8593;"> <!-- upwards arrow, U+2191 ISOnum-->
+<!ENTITY rarr "&#8594;"> <!-- rightwards arrow, U+2192 ISOnum -->
+<!ENTITY darr "&#8595;"> <!-- downwards arrow, U+2193 ISOnum -->
+<!ENTITY harr "&#8596;"> <!-- left right arrow, U+2194 ISOamsa -->
+<!ENTITY crarr "&#8629;"> <!-- downwards arrow with corner leftwards
+ = carriage return, U+21B5 NEW -->
+<!ENTITY lArr "&#8656;"> <!-- leftwards double arrow, U+21D0 ISOtech -->
+<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
+ but also does not have any other character for that function. So ? lArr can
+ be used for 'is implied by' as ISOtech suggests -->
+<!ENTITY uArr "&#8657;"> <!-- upwards double arrow, U+21D1 ISOamsa -->
+<!ENTITY rArr "&#8658;"> <!-- rightwards double arrow,
+ U+21D2 ISOtech -->
+<!-- Unicode does not say this is the 'implies' character but does not have
+ another character with this function so ?
+ rArr can be used for 'implies' as ISOtech suggests -->
+<!ENTITY dArr "&#8659;"> <!-- downwards double arrow, U+21D3 ISOamsa -->
+<!ENTITY hArr "&#8660;"> <!-- left right double arrow,
+ U+21D4 ISOamsa -->
+
+<!-- Mathematical Operators -->
+<!ENTITY forall "&#8704;"> <!-- for all, U+2200 ISOtech -->
+<!ENTITY part "&#8706;"> <!-- partial differential, U+2202 ISOtech -->
+<!ENTITY exist "&#8707;"> <!-- there exists, U+2203 ISOtech -->
+<!ENTITY empty "&#8709;"> <!-- empty set = null set = diameter,
+ U+2205 ISOamso -->
+<!ENTITY nabla "&#8711;"> <!-- nabla = backward difference,
+ U+2207 ISOtech -->
+<!ENTITY isin "&#8712;"> <!-- element of, U+2208 ISOtech -->
+<!ENTITY notin "&#8713;"> <!-- not an element of, U+2209 ISOtech -->
+<!ENTITY ni "&#8715;"> <!-- contains as member, U+220B ISOtech -->
+<!-- should there be a more memorable name than 'ni'? -->
+<!ENTITY prod "&#8719;"> <!-- n-ary product = product sign,
+ U+220F ISOamsb -->
+<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
+ the same glyph might be used for both -->
+<!ENTITY sum "&#8721;"> <!-- n-ary sumation, U+2211 ISOamsb -->
+<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
+ though the same glyph might be used for both -->
+<!ENTITY minus "&#8722;"> <!-- minus sign, U+2212 ISOtech -->
+<!ENTITY lowast "&#8727;"> <!-- asterisk operator, U+2217 ISOtech -->
+<!ENTITY radic "&#8730;"> <!-- square root = radical sign,
+ U+221A ISOtech -->
+<!ENTITY prop "&#8733;"> <!-- proportional to, U+221D ISOtech -->
+<!ENTITY infin "&#8734;"> <!-- infinity, U+221E ISOtech -->
+<!ENTITY ang "&#8736;"> <!-- angle, U+2220 ISOamso -->
+<!ENTITY and "&#8743;"> <!-- logical and = wedge, U+2227 ISOtech -->
+<!ENTITY or "&#8744;"> <!-- logical or = vee, U+2228 ISOtech -->
+<!ENTITY cap "&#8745;"> <!-- intersection = cap, U+2229 ISOtech -->
+<!ENTITY cup "&#8746;"> <!-- union = cup, U+222A ISOtech -->
+<!ENTITY int "&#8747;"> <!-- integral, U+222B ISOtech -->
+<!ENTITY there4 "&#8756;"> <!-- therefore, U+2234 ISOtech -->
+<!ENTITY sim "&#8764;"> <!-- tilde operator = varies with = similar to,
+ U+223C ISOtech -->
+<!-- tilde operator is NOT the same character as the tilde, U+007E,
+ although the same glyph might be used to represent both -->
+<!ENTITY cong "&#8773;"> <!-- approximately equal to, U+2245 ISOtech -->
+<!ENTITY asymp "&#8776;"> <!-- almost equal to = asymptotic to,
+ U+2248 ISOamsr -->
+<!ENTITY ne "&#8800;"> <!-- not equal to, U+2260 ISOtech -->
+<!ENTITY equiv "&#8801;"> <!-- identical to, U+2261 ISOtech -->
+<!ENTITY le "&#8804;"> <!-- less-than or equal to, U+2264 ISOtech -->
+<!ENTITY ge "&#8805;"> <!-- greater-than or equal to,
+ U+2265 ISOtech -->
+<!ENTITY sub "&#8834;"> <!-- subset of, U+2282 ISOtech -->
+<!ENTITY sup "&#8835;"> <!-- superset of, U+2283 ISOtech -->
+<!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol
+ font encoding and is not included. Should it be, for symmetry?
+ It is in ISOamsn -->
+<!ENTITY nsub "&#8836;"> <!-- not a subset of, U+2284 ISOamsn -->
+<!ENTITY sube "&#8838;"> <!-- subset of or equal to, U+2286 ISOtech -->
+<!ENTITY supe "&#8839;"> <!-- superset of or equal to,
+ U+2287 ISOtech -->
+<!ENTITY oplus "&#8853;"> <!-- circled plus = direct sum,
+ U+2295 ISOamsb -->
+<!ENTITY otimes "&#8855;"> <!-- circled times = vector product,
+ U+2297 ISOamsb -->
+<!ENTITY perp "&#8869;"> <!-- up tack = orthogonal to = perpendicular,
+ U+22A5 ISOtech -->
+<!ENTITY sdot "&#8901;"> <!-- dot operator, U+22C5 ISOamsb -->
+<!-- dot operator is NOT the same character as U+00B7 middle dot -->
+
+<!-- Miscellaneous Technical -->
+<!ENTITY lceil "&#8968;"> <!-- left ceiling = apl upstile,
+ U+2308 ISOamsc -->
+<!ENTITY rceil "&#8969;"> <!-- right ceiling, U+2309 ISOamsc -->
+<!ENTITY lfloor "&#8970;"> <!-- left floor = apl downstile,
+ U+230A ISOamsc -->
+<!ENTITY rfloor "&#8971;"> <!-- right floor, U+230B ISOamsc -->
+<!ENTITY lang "&#9001;"> <!-- left-pointing angle bracket = bra,
+ U+2329 ISOtech -->
+<!-- lang is NOT the same character as U+003C 'less than'
+ or U+2039 'single left-pointing angle quotation mark' -->
+<!ENTITY rang "&#9002;"> <!-- right-pointing angle bracket = ket,
+ U+232A ISOtech -->
+<!-- rang is NOT the same character as U+003E 'greater than'
+ or U+203A 'single right-pointing angle quotation mark' -->
+
+<!-- Geometric Shapes -->
+<!ENTITY loz "&#9674;"> <!-- lozenge, U+25CA ISOpub -->
+
+<!-- Miscellaneous Symbols -->
+<!ENTITY spades "&#9824;"> <!-- black spade suit, U+2660 ISOpub -->
+<!-- black here seems to mean filled as opposed to hollow -->
+<!ENTITY clubs "&#9827;"> <!-- black club suit = shamrock,
+ U+2663 ISOpub -->
+<!ENTITY hearts "&#9829;"> <!-- black heart suit = valentine,
+ U+2665 ISOpub -->
+<!ENTITY diams "&#9830;"> <!-- black diamond suit, U+2666 ISOpub -->
diff --git a/test/valid/dtds/xhtml.cat b/test/valid/dtds/xhtml.cat
new file mode 100644
index 0000000..0624dea
--- /dev/null
+++ b/test/valid/dtds/xhtml.cat
@@ -0,0 +1,14 @@
+OVERRIDE YES
+ -- Oasis entity catalog for Extensible HTML 1.0 --
+
+PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "xhtml1-strict.dtd"
+PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd"
+PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "xhtml1-frameset.dtd"
+
+ -- ISO latin 1 entity set for Extensible HTML (XML 1.0 format) --
+
+PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "xhtml-lat1.ent"
+PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "xhtml-symbol.ent"
+PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "xhtml-special.ent"
+
+SGMLDECL "xhtml1.dcl"
diff --git a/test/valid/dtds/xhtml1-frameset.dtd b/test/valid/dtds/xhtml1-frameset.dtd
new file mode 100644
index 0000000..1dd44e5
--- /dev/null
+++ b/test/valid/dtds/xhtml1-frameset.dtd
@@ -0,0 +1,1223 @@
+<!--
+ Extensible HTML version 1.0 Frameset DTD
+
+ This is the same as HTML 4.0 Frameset except for
+ changes due to the differences between XML and SGML.
+
+ Namespace = http://www.w3.org/1999/xhtml
+
+ For further information, see: http://www.w3.org/TR/xhtml1
+
+ Copyright (c) 1998-1999 W3C (MIT, INRIA, Keio),
+ All Rights Reserved.
+
+ This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"
+
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!ENTITY % HTMLlat1 PUBLIC
+ "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+ "-//W3C//ENTITIES Symbols for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+ "-//W3C//ENTITIES Special for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
+%HTMLspecial;
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+ <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+ <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+ <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+ <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+ <!-- a language code, as per [RFC1766] -->
+
+<!ENTITY % Character "CDATA">
+ <!-- a single character from [ISO10646] -->
+
+<!ENTITY % Number "CDATA">
+ <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+ <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+ <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+ <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+ <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+ <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+ <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+ <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+ <!-- used for titles etc. -->
+
+<!ENTITY % FrameTarget "NMTOKEN">
+ <!-- render in this frame -->
+
+<!ENTITY % Length "CDATA">
+ <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+ <!-- pixel, percentage, or relative -->
+
+<!ENTITY % MultiLengths "CDATA">
+ <!-- comma-separated list of MultiLength -->
+
+<!ENTITY % Pixels "CDATA">
+ <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+ <!-- comma separated list of lengths -->
+
+<!-- used for object, applet, img, input and iframe -->
+<!ENTITY % ImgAlign "(top|middle|bottom|left|right)">
+
+<!-- a color using sRGB: #RRGGBB as Hex values -->
+<!ENTITY % Color "CDATA">
+
+<!-- There are also 16 widely known color names with their sRGB values:
+
+ Black = #000000 Green = #008000
+ Silver = #C0C0C0 Lime = #00FF00
+ Gray = #808080 Olive = #808000
+ White = #FFFFFF Yellow = #FFFF00
+ Maroon = #800000 Navy = #000080
+ Red = #FF0000 Blue = #0000FF
+ Purple = #800080 Teal = #008080
+ Fuchsia= #FF00FF Aqua = #00FFFF
+-->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+ id document-wide unique id
+ class space separated list of classes
+ style associated style info
+ title advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id ID #IMPLIED
+ class CDATA #IMPLIED
+ style %StyleSheet; #IMPLIED
+ title %Text; #IMPLIED"
+ >
+
+<!-- internationalization attributes
+ lang language code (backwards compatible)
+ xml:lang language code (as per XML 1.0 spec)
+ dir direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang %LanguageCode; #IMPLIED
+ xml:lang %LanguageCode; #IMPLIED
+ dir (ltr|rtl) #IMPLIED"
+ >
+
+<!-- attributes for common UI events
+ onclick a pointer button was clicked
+ ondblclick a pointer button was double clicked
+ onmousedown a pointer button was pressed down
+ onmouseup a pointer button was released
+ onmousemove a pointer was moved onto the element
+ onmouseout a pointer was moved away from the element
+ onkeypress a key was pressed and released
+ onkeydown a key was pressed down
+ onkeyup a key was released
+-->
+<!ENTITY % events
+ "onclick %Script; #IMPLIED
+ ondblclick %Script; #IMPLIED
+ onmousedown %Script; #IMPLIED
+ onmouseup %Script; #IMPLIED
+ onmouseover %Script; #IMPLIED
+ onmousemove %Script; #IMPLIED
+ onmouseout %Script; #IMPLIED
+ onkeypress %Script; #IMPLIED
+ onkeydown %Script; #IMPLIED
+ onkeyup %Script; #IMPLIED"
+ >
+
+<!-- attributes for elements that can get the focus
+ accesskey accessibility key character
+ tabindex position in tabbing order
+ onfocus the element got the focus
+ onblur the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey %Character; #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED"
+ >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!-- text alignment for p, div, h1-h6. The default is
+ align="left" for ltr headings, "right" for rtl -->
+
+<!ENTITY % TextAlign "align (left|center|right) #IMPLIED">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special
+ "br | span | bdo |object | applet | img | map | iframe">
+
+<!ENTITY % fontstyle "tt | i | b | big | small | u
+ | s | strike |font | basefont">
+
+<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup |
+ samp | kbd | var | cite | abbr | acronym">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc "ins | del | script | noscript">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl | menu | dir">
+<!ENTITY % blocktext "pre | hr | blockquote | address | center">
+
+<!ENTITY % block
+ "p | %heading; | div | %lists; | %blocktext; | isindex | fieldset | table">
+
+<!ENTITY % Block "(%block; | form | %misc;)*">
+
+<!-- %Flow; mixes Block and Inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+ "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*">
+
+<!-- pre uses %Inline excluding img, object, applet, big, small,
+ sub, sup, font, or basefont -->
+
+<!ENTITY % pre.content
+ "(#PCDATA | a | br | span | bdo | map | tt | i | b | u | s |
+ %phrase; | %inline.forms;)*">
+
+<!-- form uses %Flow; excluding form -->
+
+<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form, form controls, iframe -->
+
+<!ENTITY % button.content
+ "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+ table | br | span | bdo | object | applet | img | map |
+ %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, frameset)>
+<!ATTLIST html
+ %i18n;
+ xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml'
+ >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object|isindex)*">
+
+<!-- content model is %head.misc; combined with a single
+ title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+ ((title, %head.misc;, (base, %head.misc;)?) |
+ (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+ %i18n;
+ profile %URI; #IMPLIED
+ >
+
+<!-- The title element is not considered part of the flow of text.
+ It should be displayed, for example as the page header or
+ window title. Exactly one title is required per document.
+ -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title %i18n;>
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+ href %URI; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+ %i18n;
+ http-equiv CDATA #IMPLIED
+ name CDATA #IMPLIED
+ content CDATA #REQUIRED
+ scheme CDATA #IMPLIED
+ >
+
+<!--
+ Relationship values can be used in principle:
+
+ a) for document specific toolbars/menus when used
+ with the link element in document head e.g.
+ start, contents, previous, next, index, end, help
+ b) to link to a separate style sheet (rel="stylesheet")
+ c) to make a link to a script (rel="script")
+ d) by stylesheets to control how collections of
+ html nodes are rendered into printed documents
+ e) to make a link to a printable version of this document
+ e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+ %attrs;
+ charset %Charset; #IMPLIED
+ href %URI; #IMPLIED
+ hreflang %LanguageCode; #IMPLIED
+ type %ContentType; #IMPLIED
+ rel %LinkTypes; #IMPLIED
+ rev %LinkTypes; #IMPLIED
+ media %MediaDesc; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+ %i18n;
+ type %ContentType; #REQUIRED
+ media %MediaDesc; #IMPLIED
+ title %Text; #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+ charset %Charset; #IMPLIED
+ type %ContentType; #REQUIRED
+ language CDATA #IMPLIED
+ src %URI; #IMPLIED
+ defer (defer) #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Flow;>
+<!ATTLIST noscript
+ %attrs;
+ >
+
+<!--======================= Frames =======================================-->
+
+<!-- only one noframes element permitted per document -->
+
+<!ELEMENT frameset (frameset|frame|noframes)*>
+<!ATTLIST frameset
+ %coreattrs;
+ rows %MultiLengths; #IMPLIED
+ cols %MultiLengths; #IMPLIED
+ onload %Script; #IMPLIED
+ onunload %Script; #IMPLIED
+ >
+
+<!-- reserved frame names start with "_" otherwise starts with letter -->
+
+<!-- tiled window within frameset -->
+
+<!ELEMENT frame EMPTY>
+<!ATTLIST frame
+ %coreattrs;
+ longdesc %URI; #IMPLIED
+ name NMTOKEN #IMPLIED
+ src %URI; #IMPLIED
+ frameborder (1|0) "1"
+ marginwidth %Pixels; #IMPLIED
+ marginheight %Pixels; #IMPLIED
+ noresize (noresize) #IMPLIED
+ scrolling (yes|no|auto) "auto"
+ >
+
+<!-- inline subwindow -->
+
+<!ELEMENT iframe %Flow;>
+<!ATTLIST iframe
+ %coreattrs;
+ longdesc %URI; #IMPLIED
+ name NMTOKEN #IMPLIED
+ src %URI; #IMPLIED
+ frameborder (1|0) "1"
+ marginwidth %Pixels; #IMPLIED
+ marginheight %Pixels; #IMPLIED
+ scrolling (yes|no|auto) "auto"
+ align %ImgAlign; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ >
+
+<!-- alternate content container for non frame-based rendering -->
+
+<!ELEMENT noframes (body)>
+<!ATTLIST noframes
+ %attrs;
+ >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Flow;>
+<!ATTLIST body
+ %attrs;
+ onload %Script; #IMPLIED
+ onunload %Script; #IMPLIED
+ background %URI; #IMPLIED
+ bgcolor %Color; #IMPLIED
+ text %Color; #IMPLIED
+ link %Color; #IMPLIED
+ vlink %Color; #IMPLIED
+ alink %Color; #IMPLIED
+ >
+
+<!ELEMENT div %Flow;> <!-- generic language/style container -->
+<!ATTLIST div
+ %attrs;
+ %TextAlign;
+ >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+ %attrs;
+ %TextAlign;
+ >
+
+<!--=================== Headings =========================================-->
+
+<!--
+ There are six levels of headings from h1 (the most important)
+ to h6 (the least important).
+-->
+
+<!ELEMENT h1 %Inline;>
+<!ATTLIST h1
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+ %attrs;
+ %TextAlign;
+ >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list bullet styles -->
+
+<!ENTITY % ULStyle "(disc|square|circle)">
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+ %attrs;
+ type %ULStyle; #IMPLIED
+ compact (compact) #IMPLIED
+ >
+
+<!-- Ordered list numbering style
+
+ 1 arabic numbers 1, 2, 3, ...
+ a lower alpha a, b, c, ...
+ A upper alpha A, B, C, ...
+ i lower roman i, ii, iii, ...
+ I upper roman I, II, III, ...
+
+ The style is applied to the sequence number which by default
+ is reset to 1 for the first list item in an ordered list.
+-->
+<!ENTITY % OLStyle "CDATA">
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+ %attrs;
+ type %OLStyle; #IMPLIED
+ compact (compact) #IMPLIED
+ start %Number; #IMPLIED
+ >
+
+<!-- single column list (DEPRECATED) -->
+<!ELEMENT menu (li)+>
+<!ATTLIST menu
+ %attrs;
+ compact (compact) #IMPLIED
+ >
+
+<!-- multiple column list (DEPRECATED) -->
+<!ELEMENT dir (li)+>
+<!ATTLIST dir
+ %attrs;
+ compact (compact) #IMPLIED
+ >
+
+<!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" -->
+<!ENTITY % LIStyle "CDATA">
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+ %attrs;
+ type %LIStyle; #IMPLIED
+ value %Number; #IMPLIED
+ >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+ %attrs;
+ compact (compact) #IMPLIED
+ >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+ %attrs;
+ >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+ %attrs;
+ >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address %Inline;>
+<!ATTLIST address
+ %attrs;
+ >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+ %attrs;
+ align (left|center|right) #IMPLIED
+ noshade (noshade) #IMPLIED
+ size %Pixels; #IMPLIED
+ width %Length; #IMPLIED
+ >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding
+ "img|object|applet|big|small|sub|sup|font|basefont" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+ %attrs;
+ width %Number; #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Flow;>
+<!ATTLIST blockquote
+ %attrs;
+ cite %URI; #IMPLIED
+ >
+
+<!--=================== Text alignment ===================================-->
+
+<!-- center content -->
+<!ELEMENT center %Flow;>
+<!ATTLIST center
+ %attrs;
+ >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+
+<!--
+ ins/del are allowed in block and inline content, but its
+ inappropriate to include block content within an ins element
+ occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+ %attrs;
+ cite %URI; #IMPLIED
+ datetime %Datetime; #IMPLIED
+ >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+ %attrs;
+ cite %URI; #IMPLIED
+ datetime %Datetime; #IMPLIED
+ >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+ %attrs;
+ charset %Charset; #IMPLIED
+ type %ContentType; #IMPLIED
+ name NMTOKEN #IMPLIED
+ href %URI; #IMPLIED
+ hreflang %LanguageCode; #IMPLIED
+ rel %LinkTypes; #IMPLIED
+ rev %LinkTypes; #IMPLIED
+ accesskey %Character; #IMPLIED
+ shape %Shape; "rect"
+ coords %Coords; #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+ %attrs;
+ >
+
+<!ELEMENT bdo %Inline;> <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+ %coreattrs;
+ %events;
+ lang %LanguageCode; #IMPLIED
+ xml:lang %LanguageCode; #IMPLIED
+ dir (ltr|rtl) #REQUIRED
+ >
+
+<!ELEMENT br EMPTY> <!-- forced line break -->
+<!ATTLIST br
+ %coreattrs;
+ clear (left|all|right|none) "none"
+ >
+
+<!ELEMENT em %Inline;> <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;> <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;> <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;> <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;> <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;> <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;> <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;> <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;> <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;> <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;> <!-- inlined quote -->
+<!ATTLIST q
+ %attrs;
+ cite %URI; #IMPLIED
+ >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;> <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;> <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;> <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;> <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;> <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!ELEMENT u %Inline;> <!-- underline -->
+<!ATTLIST u %attrs;>
+
+<!ELEMENT s %Inline;> <!-- strike-through -->
+<!ATTLIST s %attrs;>
+
+<!ELEMENT strike %Inline;> <!-- strike-through -->
+<!ATTLIST strike %attrs;>
+
+<!ELEMENT basefont EMPTY> <!-- base font size -->
+<!ATTLIST basefont
+ id ID #IMPLIED
+ size CDATA #REQUIRED
+ color %Color; #IMPLIED
+ face CDATA #IMPLIED
+ >
+
+<!ELEMENT font %Inline;> <!-- local change to font -->
+<!ATTLIST font
+ %coreattrs;
+ %i18n;
+ size CDATA #IMPLIED
+ color %Color; #IMPLIED
+ face CDATA #IMPLIED
+ >
+
+<!--==================== Object ======================================-->
+<!--
+ object is used to embed objects as part of HTML pages.
+ param elements should precede other content. Parameters
+ can also be expressed as attribute/value pairs on the
+ object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form |%inline; | %misc;)*>
+<!ATTLIST object
+ %attrs;
+ declare (declare) #IMPLIED
+ classid %URI; #IMPLIED
+ codebase %URI; #IMPLIED
+ data %URI; #IMPLIED
+ type %ContentType; #IMPLIED
+ codetype %ContentType; #IMPLIED
+ archive %UriList; #IMPLIED
+ standby %Text; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ usemap %URI; #IMPLIED
+ name NMTOKEN #IMPLIED
+ tabindex %Number; #IMPLIED
+ align %ImgAlign; #IMPLIED
+ border %Pixels; #IMPLIED
+ hspace %Pixels; #IMPLIED
+ vspace %Pixels; #IMPLIED
+ >
+
+<!--
+ param is used to supply a named property value.
+ In XML it would seem natural to follow RDF and support an
+ abbreviated syntax where the param elements are replaced
+ by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+ id ID #IMPLIED
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+ valuetype (data|ref|object) "data"
+ type %ContentType; #IMPLIED
+ >
+
+<!--=================== Java applet ==================================-->
+<!--
+ One of code or object attributes must be present.
+ Place param elements before other content.
+-->
+<!ELEMENT applet (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST applet
+ %coreattrs;
+ codebase %URI; #IMPLIED
+ archive CDATA #IMPLIED
+ code CDATA #IMPLIED
+ object CDATA #IMPLIED
+ alt %Text; #IMPLIED
+ name NMTOKEN #IMPLIED
+ width %Length; #REQUIRED
+ height %Length; #REQUIRED
+ align %ImgAlign; #IMPLIED
+ hspace %Pixels; #IMPLIED
+ vspace %Pixels; #IMPLIED
+ >
+
+<!--=================== Images ===========================================-->
+
+<!--
+ To avoid accessibility problems for people who aren't
+ able to see the image, you should provide a text
+ description using the alt and longdesc attributes.
+ In addition, avoid the use of server-side image maps.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+ %attrs;
+ src %URI; #REQUIRED
+ alt %Text; #REQUIRED
+ name NMTOKEN #IMPLIED
+ longdesc %URI; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ usemap %URI; #IMPLIED
+ ismap (ismap) #IMPLIED
+ align %ImgAlign; #IMPLIED
+ border %Pixels; #IMPLIED
+ hspace %Pixels; #IMPLIED
+ vspace %Pixels; #IMPLIED
+ >
+
+<!-- usemap points to a map element which may be in this document
+ or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+ separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+ %i18n;
+ %events;
+ id ID #REQUIRED
+ class CDATA #IMPLIED
+ style %StyleSheet; #IMPLIED
+ title %Text; #IMPLIED
+ name NMTOKEN #IMPLIED
+ >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+ %attrs;
+ shape %Shape; "rect"
+ coords %Coords; #IMPLIED
+ href %URI; #IMPLIED
+ nohref (nohref) #IMPLIED
+ alt %Text; #REQUIRED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!--================ Forms ===============================================-->
+
+<!ELEMENT form %form.content;> <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+ %attrs;
+ action %URI; #REQUIRED
+ method (get|post) "get"
+ name NMTOKEN #IMPLIED
+ enctype %ContentType; "application/x-www-form-urlencoded"
+ onsubmit %Script; #IMPLIED
+ onreset %Script; #IMPLIED
+ accept %ContentTypes; #IMPLIED
+ accept-charset %Charsets; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!--
+ Each label must not contain more than ONE field
+ Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+ %attrs;
+ for IDREF #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ >
+
+<!ENTITY % InputType
+ "(text | password | checkbox |
+ radio | submit | reset |
+ file | hidden | image | button)"
+ >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY> <!-- form control -->
+<!ATTLIST input
+ %attrs;
+ type %InputType; "text"
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED
+ checked (checked) #IMPLIED
+ disabled (disabled) #IMPLIED
+ readonly (readonly) #IMPLIED
+ size CDATA #IMPLIED
+ maxlength %Number; #IMPLIED
+ src %URI; #IMPLIED
+ alt CDATA #IMPLIED
+ usemap %URI; #IMPLIED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onselect %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ accept %ContentTypes; #IMPLIED
+ align %ImgAlign; #IMPLIED
+ >
+
+<!ELEMENT select (optgroup|option)+> <!-- option selector -->
+<!ATTLIST select
+ %attrs;
+ name CDATA #IMPLIED
+ size %Number; #IMPLIED
+ multiple (multiple) #IMPLIED
+ disabled (disabled) #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ >
+
+<!ELEMENT optgroup (option)+> <!-- option group -->
+<!ATTLIST optgroup
+ %attrs;
+ disabled (disabled) #IMPLIED
+ label %Text; #REQUIRED
+ >
+
+<!ELEMENT option (#PCDATA)> <!-- selectable choice -->
+<!ATTLIST option
+ %attrs;
+ selected (selected) #IMPLIED
+ disabled (disabled) #IMPLIED
+ label %Text; #IMPLIED
+ value CDATA #IMPLIED
+ >
+
+<!ELEMENT textarea (#PCDATA)> <!-- multi-line text field -->
+<!ATTLIST textarea
+ %attrs;
+ name CDATA #IMPLIED
+ rows %Number; #REQUIRED
+ cols %Number; #REQUIRED
+ disabled (disabled) #IMPLIED
+ readonly (readonly) #IMPLIED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onselect %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ >
+
+<!--
+ The fieldset element is used to group form fields.
+ Only one legend element should occur in the content
+ and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+ %attrs;
+ >
+
+<!ENTITY % LAlign "(top|bottom|left|right)">
+
+<!ELEMENT legend %Inline;> <!-- fieldset label -->
+<!ATTLIST legend
+ %attrs;
+ accesskey %Character; #IMPLIED
+ align %LAlign; #IMPLIED
+ >
+
+<!--
+ Content is %Flow; excluding a, form, form controls, iframe
+-->
+<!ELEMENT button %button.content;> <!-- push button -->
+<!ATTLIST button
+ %attrs;
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED
+ type (button|submit|reset) "submit"
+ disabled (disabled) #IMPLIED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ >
+
+<!-- single-line text input control (DEPRECATED) -->
+<!ELEMENT isindex EMPTY>
+<!ATTLIST isindex
+ %coreattrs;
+ %i18n;
+ prompt %Text; #IMPLIED
+ >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+ "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+
+<!-- horizontal placement of table relative to document -->
+<!ENTITY % TAlign "(left|center|right)">
+
+<!-- horizontal alignment attributes for cell contents
+
+ char alignment char, e.g. char=":"
+ charoff offset for alignment char
+-->
+<!ENTITY % cellhalign
+ "align (left|center|right|justify|char) #IMPLIED
+ char %Character; #IMPLIED
+ charoff %Length; #IMPLIED"
+ >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+ "valign (top|middle|bottom|baseline) #IMPLIED"
+ >
+
+<!ELEMENT table
+ (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption %Inline;>
+<!ELEMENT thead (tr)+>
+<!ELEMENT tfoot (tr)+>
+<!ELEMENT tbody (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col EMPTY>
+<!ELEMENT tr (th|td)+>
+<!ELEMENT th %Flow;>
+<!ELEMENT td %Flow;>
+
+<!ATTLIST table
+ %attrs;
+ summary %Text; #IMPLIED
+ width %Length; #IMPLIED
+ border %Pixels; #IMPLIED
+ frame %TFrame; #IMPLIED
+ rules %TRules; #IMPLIED
+ cellspacing %Length; #IMPLIED
+ cellpadding %Length; #IMPLIED
+ align %TAlign; #IMPLIED
+ bgcolor %Color; #IMPLIED
+ >
+
+<!ENTITY % CAlign "(top|bottom|left|right)">
+
+<!ATTLIST caption
+ %attrs;
+ align %CAlign; #IMPLIED
+ >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+ %attrs;
+ span %Number; "1"
+ width %MultiLength; #IMPLIED
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+ width=64 width in screen pixels
+ width=0.5* relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+ %attrs;
+ span %Number; "1"
+ width %MultiLength; #IMPLIED
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!--
+ Use thead to duplicate headers when breaking table
+ across page boundaries, or for static headers when
+ tbody sections are rendered in scrolling panel.
+
+ Use tfoot to duplicate footers when breaking table
+ across page boundaries, or for static footers when
+ tbody sections are rendered in scrolling panel.
+
+ Use multiple tbody sections when rules are needed
+ between groups of table rows.
+-->
+<!ATTLIST thead
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tfoot
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tbody
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tr
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ bgcolor %Color; #IMPLIED
+ >
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+ %attrs;
+ abbr %Text; #IMPLIED
+ axis CDATA #IMPLIED
+ headers IDREFS #IMPLIED
+ scope %Scope; #IMPLIED
+ rowspan %Number; "1"
+ colspan %Number; "1"
+ %cellhalign;
+ %cellvalign;
+ nowrap (nowrap) #IMPLIED
+ bgcolor %Color; #IMPLIED
+ width %Pixels; #IMPLIED
+ height %Pixels; #IMPLIED
+ >
+
+<!ATTLIST td
+ %attrs;
+ abbr %Text; #IMPLIED
+ axis CDATA #IMPLIED
+ headers IDREFS #IMPLIED
+ scope %Scope; #IMPLIED
+ rowspan %Number; "1"
+ colspan %Number; "1"
+ %cellhalign;
+ %cellvalign;
+ nowrap (nowrap) #IMPLIED
+ bgcolor %Color; #IMPLIED
+ width %Pixels; #IMPLIED
+ height %Pixels; #IMPLIED
+ >
+
diff --git a/test/valid/dtds/xhtml1-strict.dtd b/test/valid/dtds/xhtml1-strict.dtd
new file mode 100644
index 0000000..d7c3da2
--- /dev/null
+++ b/test/valid/dtds/xhtml1-strict.dtd
@@ -0,0 +1,986 @@
+<!--
+ Extensible HTML version 1.0 Strict DTD
+
+ This is the same as HTML 4.0 Strict except for
+ changes due to the differences between XML and SGML.
+
+ Namespace = http://www.w3.org/1999/xhtml
+
+ For further information, see: http://www.w3.org/TR/xhtml1
+
+ Copyright (c) 1998-1999 W3C (MIT, INRIA, Keio),
+ All Rights Reserved.
+
+ This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!ENTITY % HTMLlat1 PUBLIC
+ "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ "xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+ "-//W3C//ENTITIES Symbols for XHTML//EN"
+ "xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+ "-//W3C//ENTITIES Special for XHTML//EN"
+ "xhtml-special.ent">
+%HTMLspecial;
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+ <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+ <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+ <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+ <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+ <!-- a language code, as per [RFC1766] -->
+
+<!ENTITY % Character "CDATA">
+ <!-- a single character from [ISO10646] -->
+
+<!ENTITY % Number "CDATA">
+ <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+ <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+ <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+ <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+ <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+ <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+ <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+ <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+ <!-- used for titles etc. -->
+
+<!ENTITY % FrameTarget "NMTOKEN">
+ <!-- render in this frame -->
+
+<!ENTITY % Length "CDATA">
+ <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+ <!-- pixel, percentage, or relative -->
+
+<!ENTITY % MultiLengths "CDATA">
+ <!-- comma-separated list of MultiLength -->
+
+<!ENTITY % Pixels "CDATA">
+ <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+ <!-- comma separated list of lengths -->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+ id document-wide unique id
+ class space separated list of classes
+ style associated style info
+ title advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id ID #IMPLIED
+ class CDATA #IMPLIED
+ style %StyleSheet; #IMPLIED
+ title %Text; #IMPLIED"
+ >
+
+<!-- internationalization attributes
+ lang language code (backwards compatible)
+ xml:lang language code (as per XML 1.0 spec)
+ dir direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang %LanguageCode; #IMPLIED
+ xml:lang %LanguageCode; #IMPLIED
+ dir (ltr|rtl) #IMPLIED"
+ >
+
+<!-- attributes for common UI events
+ onclick a pointer button was clicked
+ ondblclick a pointer button was double clicked
+ onmousedown a pointer button was pressed down
+ onmouseup a pointer button was released
+ onmousemove a pointer was moved onto the element
+ onmouseout a pointer was moved away from the element
+ onkeypress a key was pressed and released
+ onkeydown a key was pressed down
+ onkeyup a key was released
+-->
+<!ENTITY % events
+ "onclick %Script; #IMPLIED
+ ondblclick %Script; #IMPLIED
+ onmousedown %Script; #IMPLIED
+ onmouseup %Script; #IMPLIED
+ onmouseover %Script; #IMPLIED
+ onmousemove %Script; #IMPLIED
+ onmouseout %Script; #IMPLIED
+ onkeypress %Script; #IMPLIED
+ onkeydown %Script; #IMPLIED
+ onkeyup %Script; #IMPLIED"
+ >
+
+<!-- attributes for elements that can get the focus
+ accesskey accessibility key character
+ tabindex position in tabbing order
+ onfocus the element got the focus
+ onblur the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey %Character; #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED"
+ >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special
+ "br | span | bdo | object | img | map">
+
+<!ENTITY % fontstyle "tt | i | b | big | small">
+
+<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup |
+ samp | kbd | var | cite | abbr | acronym">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc "ins | del | script | noscript">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl">
+<!ENTITY % blocktext "pre | hr | blockquote | address">
+
+<!ENTITY % block
+ "p | %heading; | div | %lists; | %blocktext; | fieldset | table">
+
+<!ENTITY % Block "(%block; | form | %misc;)*">
+
+<!-- %Flow; mixes Block and Inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+ "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*">
+
+<!-- pre uses %Inline excluding img, object, big, small, sup or sup -->
+
+<!ENTITY % pre.content
+ "(#PCDATA | a | br | span | bdo | map | tt | i | b |
+ %phrase; | %inline.forms;)*">
+
+<!-- form uses %Block; excluding form -->
+
+<!ENTITY % form.content "(%block; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form and form controls -->
+
+<!ENTITY % button.content
+ "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+ table | %special; | %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, body)>
+<!ATTLIST html
+ %i18n;
+ xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml'
+ >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object)*">
+
+<!-- content model is %head.misc; combined with a single
+ title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+ ((title, %head.misc;, (base, %head.misc;)?) |
+ (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+ %i18n;
+ profile %URI; #IMPLIED
+ >
+
+<!-- The title element is not considered part of the flow of text.
+ It should be displayed, for example as the page header or
+ window title. Exactly one title is required per document.
+ -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title %i18n;>
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+ href %URI; #IMPLIED
+ >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+ %i18n;
+ http-equiv CDATA #IMPLIED
+ name CDATA #IMPLIED
+ content CDATA #REQUIRED
+ scheme CDATA #IMPLIED
+ >
+
+<!--
+ Relationship values can be used in principle:
+
+ a) for document specific toolbars/menus when used
+ with the link element in document head e.g.
+ start, contents, previous, next, index, end, help
+ b) to link to a separate style sheet (rel="stylesheet")
+ c) to make a link to a script (rel="script")
+ d) by stylesheets to control how collections of
+ html nodes are rendered into printed documents
+ e) to make a link to a printable version of this document
+ e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+ %attrs;
+ charset %Charset; #IMPLIED
+ href %URI; #IMPLIED
+ hreflang %LanguageCode; #IMPLIED
+ type %ContentType; #IMPLIED
+ rel %LinkTypes; #IMPLIED
+ rev %LinkTypes; #IMPLIED
+ media %MediaDesc; #IMPLIED
+ >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+ %i18n;
+ type %ContentType; #REQUIRED
+ media %MediaDesc; #IMPLIED
+ title %Text; #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+ charset %Charset; #IMPLIED
+ type %ContentType; #REQUIRED
+ src %URI; #IMPLIED
+ defer (defer) #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Block;>
+<!ATTLIST noscript
+ %attrs;
+ >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Block;>
+<!ATTLIST body
+ %attrs;
+ onload %Script; #IMPLIED
+ onunload %Script; #IMPLIED
+ >
+
+<!ELEMENT div %Flow;> <!-- generic language/style container -->
+<!ATTLIST div
+ %attrs;
+ >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+ %attrs;
+ >
+
+<!--=================== Headings =========================================-->
+
+<!--
+ There are six levels of headings from h1 (the most important)
+ to h6 (the least important).
+-->
+
+<!ELEMENT h1 %Inline;>
+<!ATTLIST h1
+ %attrs;
+ >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+ %attrs;
+ >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+ %attrs;
+ >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+ %attrs;
+ >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+ %attrs;
+ >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+ %attrs;
+ >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+ %attrs;
+ >
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+ %attrs;
+ >
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+ %attrs;
+ >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+ %attrs;
+ >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+ %attrs;
+ >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+ %attrs;
+ >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address %Inline;>
+<!ATTLIST address
+ %attrs;
+ >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+ %attrs;
+ >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding "img|object|big|small|sub|sup" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+ %attrs;
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Block;>
+<!ATTLIST blockquote
+ %attrs;
+ cite %URI; #IMPLIED
+ >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+<!--
+ ins/del are allowed in block and inline content, but its
+ inappropriate to include block content within an ins element
+ occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+ %attrs;
+ cite %URI; #IMPLIED
+ datetime %Datetime; #IMPLIED
+ >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+ %attrs;
+ cite %URI; #IMPLIED
+ datetime %Datetime; #IMPLIED
+ >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+ %attrs;
+ charset %Charset; #IMPLIED
+ type %ContentType; #IMPLIED
+ name NMTOKEN #IMPLIED
+ href %URI; #IMPLIED
+ hreflang %LanguageCode; #IMPLIED
+ rel %LinkTypes; #IMPLIED
+ rev %LinkTypes; #IMPLIED
+ accesskey %Character; #IMPLIED
+ shape %Shape; "rect"
+ coords %Coords; #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+ %attrs;
+ >
+
+<!ELEMENT bdo %Inline;> <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+ %coreattrs;
+ %events;
+ lang %LanguageCode; #IMPLIED
+ xml:lang %LanguageCode; #IMPLIED
+ dir (ltr|rtl) #REQUIRED
+ >
+
+<!ELEMENT br EMPTY> <!-- forced line break -->
+<!ATTLIST br
+ %coreattrs;
+ >
+
+<!ELEMENT em %Inline;> <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;> <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;> <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;> <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;> <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;> <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;> <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;> <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;> <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;> <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;> <!-- inlined quote -->
+<!ATTLIST q
+ %attrs;
+ cite %URI; #IMPLIED
+ >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;> <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;> <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;> <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;> <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;> <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!--==================== Object ======================================-->
+<!--
+ object is used to embed objects as part of HTML pages.
+ param elements should precede other content. Parameters
+ can also be expressed as attribute/value pairs on the
+ object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST object
+ %attrs;
+ declare (declare) #IMPLIED
+ classid %URI; #IMPLIED
+ codebase %URI; #IMPLIED
+ data %URI; #IMPLIED
+ type %ContentType; #IMPLIED
+ codetype %ContentType; #IMPLIED
+ archive %UriList; #IMPLIED
+ standby %Text; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ usemap %URI; #IMPLIED
+ name NMTOKEN #IMPLIED
+ tabindex %Number; #IMPLIED
+ >
+
+<!--
+ param is used to supply a named property value.
+ In XML it would seem natural to follow RDF and support an
+ abbreviated syntax where the param elements are replaced
+ by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED
+ valuetype (data|ref|object) "data"
+ type %ContentType; #IMPLIED
+ >
+
+<!--=================== Images ===========================================-->
+
+<!--
+ To avoid accessibility problems for people who aren't
+ able to see the image, you should provide a text
+ description using the alt and longdesc attributes.
+ In addition, avoid the use of server-side image maps.
+ Note that in this DTD there is no name attribute. That
+ is only available in the transitional and frameset DTD.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+ %attrs;
+ src %URI; #REQUIRED
+ alt %Text; #REQUIRED
+ longdesc %URI; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ usemap %URI; #IMPLIED
+ ismap (ismap) #IMPLIED
+ >
+
+<!-- usemap points to a map element which may be in this document
+ or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+ separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+ %i18n;
+ %events;
+ id ID #REQUIRED
+ class CDATA #IMPLIED
+ style %StyleSheet; #IMPLIED
+ title %Text; #IMPLIED
+ name NMTOKEN #IMPLIED
+ >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+ %attrs;
+ shape %Shape; "rect"
+ coords %Coords; #IMPLIED
+ href %URI; #IMPLIED
+ nohref (nohref) #IMPLIED
+ alt %Text; #REQUIRED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ >
+
+<!--================ Forms ===============================================-->
+<!ELEMENT form %form.content;> <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+ %attrs;
+ action %URI; #REQUIRED
+ method (get|post) "get"
+ enctype %ContentType; "application/x-www-form-urlencoded"
+ onsubmit %Script; #IMPLIED
+ onreset %Script; #IMPLIED
+ accept %ContentTypes; #IMPLIED
+ accept-charset %Charsets; #IMPLIED
+ >
+
+<!--
+ Each label must not contain more than ONE field
+ Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+ %attrs;
+ for IDREF #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ >
+
+<!ENTITY % InputType
+ "(text | password | checkbox |
+ radio | submit | reset |
+ file | hidden | image | button)"
+ >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY> <!-- form control -->
+<!ATTLIST input
+ %attrs;
+ type %InputType; "text"
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED
+ checked (checked) #IMPLIED
+ disabled (disabled) #IMPLIED
+ readonly (readonly) #IMPLIED
+ size CDATA #IMPLIED
+ maxlength %Number; #IMPLIED
+ src %URI; #IMPLIED
+ alt CDATA #IMPLIED
+ usemap %URI; #IMPLIED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onselect %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ accept %ContentTypes; #IMPLIED
+ >
+
+<!ELEMENT select (optgroup|option)+> <!-- option selector -->
+<!ATTLIST select
+ %attrs;
+ name CDATA #IMPLIED
+ size %Number; #IMPLIED
+ multiple (multiple) #IMPLIED
+ disabled (disabled) #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ >
+
+<!ELEMENT optgroup (option)+> <!-- option group -->
+<!ATTLIST optgroup
+ %attrs;
+ disabled (disabled) #IMPLIED
+ label %Text; #REQUIRED
+ >
+
+<!ELEMENT option (#PCDATA)> <!-- selectable choice -->
+<!ATTLIST option
+ %attrs;
+ selected (selected) #IMPLIED
+ disabled (disabled) #IMPLIED
+ label %Text; #IMPLIED
+ value CDATA #IMPLIED
+ >
+
+<!ELEMENT textarea (#PCDATA)> <!-- multi-line text field -->
+<!ATTLIST textarea
+ %attrs;
+ name CDATA #IMPLIED
+ rows %Number; #REQUIRED
+ cols %Number; #REQUIRED
+ disabled (disabled) #IMPLIED
+ readonly (readonly) #IMPLIED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onselect %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ >
+
+<!--
+ The fieldset element is used to group form fields.
+ Only one legend element should occur in the content
+ and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+ %attrs;
+ >
+
+<!ELEMENT legend %Inline;> <!-- fieldset label -->
+<!ATTLIST legend
+ %attrs;
+ accesskey %Character; #IMPLIED
+ >
+
+<!--
+ Content is %Flow; excluding a, form and form controls
+-->
+<!ELEMENT button %button.content;> <!-- push button -->
+<!ATTLIST button
+ %attrs;
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED
+ type (button|submit|reset) "submit"
+ disabled (disabled) #IMPLIED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+ "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+
+<!-- horizontal placement of table relative to document -->
+<!ENTITY % TAlign "(left|center|right)">
+
+<!-- horizontal alignment attributes for cell contents
+
+ char alignment char, e.g. char=':'
+ charoff offset for alignment char
+-->
+<!ENTITY % cellhalign
+ "align (left|center|right|justify|char) #IMPLIED
+ char %Character; #IMPLIED
+ charoff %Length; #IMPLIED"
+ >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+ "valign (top|middle|bottom|baseline) #IMPLIED"
+ >
+
+<!ELEMENT table
+ (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption %Inline;>
+<!ELEMENT thead (tr)+>
+<!ELEMENT tfoot (tr)+>
+<!ELEMENT tbody (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col EMPTY>
+<!ELEMENT tr (th|td)+>
+<!ELEMENT th %Flow;>
+<!ELEMENT td %Flow;>
+
+<!ATTLIST table
+ %attrs;
+ summary %Text; #IMPLIED
+ width %Length; #IMPLIED
+ border %Pixels; #IMPLIED
+ frame %TFrame; #IMPLIED
+ rules %TRules; #IMPLIED
+ cellspacing %Length; #IMPLIED
+ cellpadding %Length; #IMPLIED
+ >
+
+<!ENTITY % CAlign "(top|bottom|left|right)">
+
+<!ATTLIST caption
+ %attrs;
+ >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+ %attrs;
+ span %Number; "1"
+ width %MultiLength; #IMPLIED
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+ width=64 width in screen pixels
+ width=0.5* relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+ %attrs;
+ span %Number; "1"
+ width %MultiLength; #IMPLIED
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!--
+ Use thead to duplicate headers when breaking table
+ across page boundaries, or for static headers when
+ tbody sections are rendered in scrolling panel.
+
+ Use tfoot to duplicate footers when breaking table
+ across page boundaries, or for static footers when
+ tbody sections are rendered in scrolling panel.
+
+ Use multiple tbody sections when rules are needed
+ between groups of table rows.
+-->
+<!ATTLIST thead
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tfoot
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tbody
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tr
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+ %attrs;
+ abbr %Text; #IMPLIED
+ axis CDATA #IMPLIED
+ headers IDREFS #IMPLIED
+ scope %Scope; #IMPLIED
+ rowspan %Number; "1"
+ colspan %Number; "1"
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST td
+ %attrs;
+ abbr %Text; #IMPLIED
+ axis CDATA #IMPLIED
+ headers IDREFS #IMPLIED
+ scope %Scope; #IMPLIED
+ rowspan %Number; "1"
+ colspan %Number; "1"
+ %cellhalign;
+ %cellvalign;
+ >
+
diff --git a/test/valid/dtds/xhtml1-transitional.dtd b/test/valid/dtds/xhtml1-transitional.dtd
new file mode 100644
index 0000000..def8d66
--- /dev/null
+++ b/test/valid/dtds/xhtml1-transitional.dtd
@@ -0,0 +1,1194 @@
+<!--
+ Extensible HTML version 1.0 Transitional DTD
+
+ This is the same as HTML 4.0 Transitional except for
+ changes due to the differences between XML and SGML.
+
+ Namespace = http://www.w3.org/1999/xhtml
+
+ For further information, see: http://www.w3.org/TR/xhtml1
+
+ Copyright (c) 1998-1999 W3C (MIT, INRIA, Keio),
+ All Rights Reserved.
+
+ This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!ENTITY % HTMLlat1 PUBLIC
+ "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+ "-//W3C//ENTITIES Symbols for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+ "-//W3C//ENTITIES Special for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
+%HTMLspecial;
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+ <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+ <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+ <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+ <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+ <!-- a language code, as per [RFC1766] -->
+
+<!ENTITY % Character "CDATA">
+ <!-- a single character from [ISO10646] -->
+
+<!ENTITY % Number "CDATA">
+ <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+ <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+ <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+ <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+ <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+ <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+ <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+ <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+ <!-- used for titles etc. -->
+
+<!ENTITY % FrameTarget "NMTOKEN">
+ <!-- render in this frame -->
+
+<!ENTITY % Length "CDATA">
+ <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+ <!-- pixel, percentage, or relative -->
+
+<!ENTITY % MultiLengths "CDATA">
+ <!-- comma-separated list of MultiLength -->
+
+<!ENTITY % Pixels "CDATA">
+ <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+ <!-- comma separated list of lengths -->
+
+<!-- used for object, applet, img, input and iframe -->
+<!ENTITY % ImgAlign "(top|middle|bottom|left|right)">
+
+<!-- a color using sRGB: #RRGGBB as Hex values -->
+<!ENTITY % Color "CDATA">
+
+<!-- There are also 16 widely known color names with their sRGB values:
+
+ Black = #000000 Green = #008000
+ Silver = #C0C0C0 Lime = #00FF00
+ Gray = #808080 Olive = #808000
+ White = #FFFFFF Yellow = #FFFF00
+ Maroon = #800000 Navy = #000080
+ Red = #FF0000 Blue = #0000FF
+ Purple = #800080 Teal = #008080
+ Fuchsia= #FF00FF Aqua = #00FFFF
+-->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+ id document-wide unique id
+ class space separated list of classes
+ style associated style info
+ title advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id ID #IMPLIED
+ class CDATA #IMPLIED
+ style %StyleSheet; #IMPLIED
+ title %Text; #IMPLIED"
+ >
+
+<!-- internationalization attributes
+ lang language code (backwards compatible)
+ xml:lang language code (as per XML 1.0 spec)
+ dir direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang %LanguageCode; #IMPLIED
+ xml:lang %LanguageCode; #IMPLIED
+ dir (ltr|rtl) #IMPLIED"
+ >
+
+<!-- attributes for common UI events
+ onclick a pointer button was clicked
+ ondblclick a pointer button was double clicked
+ onmousedown a pointer button was pressed down
+ onmouseup a pointer button was released
+ onmousemove a pointer was moved onto the element
+ onmouseout a pointer was moved away from the element
+ onkeypress a key was pressed and released
+ onkeydown a key was pressed down
+ onkeyup a key was released
+-->
+<!ENTITY % events
+ "onclick %Script; #IMPLIED
+ ondblclick %Script; #IMPLIED
+ onmousedown %Script; #IMPLIED
+ onmouseup %Script; #IMPLIED
+ onmouseover %Script; #IMPLIED
+ onmousemove %Script; #IMPLIED
+ onmouseout %Script; #IMPLIED
+ onkeypress %Script; #IMPLIED
+ onkeydown %Script; #IMPLIED
+ onkeyup %Script; #IMPLIED"
+ >
+
+<!-- attributes for elements that can get the focus
+ accesskey accessibility key character
+ tabindex position in tabbing order
+ onfocus the element got the focus
+ onblur the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey %Character; #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED"
+ >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!-- text alignment for p, div, h1-h6. The default is
+ align="left" for ltr headings, "right" for rtl -->
+
+<!ENTITY % TextAlign "align (left|center|right) #IMPLIED">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special
+ "br | span | bdo | object | applet | img | map | iframe">
+
+<!ENTITY % fontstyle "tt | i | b | big | small | u
+ | s | strike |font | basefont">
+
+<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup |
+ samp | kbd | var | cite | abbr | acronym">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc "ins | del | script | noscript">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl | menu | dir">
+<!ENTITY % blocktext "pre | hr | blockquote | address | center | noframes">
+
+<!ENTITY % block
+ "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">
+
+<!ENTITY % Block "(%block; | form | %misc;)*">
+
+<!-- %Flow; mixes Block and Inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+ "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*">
+
+<!-- pre uses %Inline excluding img, object, applet, big, small,
+ sub, sup, font, or basefont -->
+
+<!ENTITY % pre.content
+ "(#PCDATA | a | br | span | bdo | map | tt | i | b | u | s |
+ %phrase; | %inline.forms;)*">
+
+<!-- form uses %Flow; excluding form -->
+
+<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form, form controls, iframe -->
+
+<!ENTITY % button.content
+ "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+ table | br | span | bdo | object | applet | img | map |
+ %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, body)>
+<!ATTLIST html
+ %i18n;
+ xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml'
+ >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object|isindex)*">
+
+<!-- content model is %head.misc; combined with a single
+ title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+ ((title, %head.misc;, (base, %head.misc;)?) |
+ (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+ %i18n;
+ profile %URI; #IMPLIED
+ >
+
+<!-- The title element is not considered part of the flow of text.
+ It should be displayed, for example as the page header or
+ window title. Exactly one title is required per document.
+ -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title %i18n;>
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+ href %URI; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+ %i18n;
+ http-equiv CDATA #IMPLIED
+ name CDATA #IMPLIED
+ content CDATA #REQUIRED
+ scheme CDATA #IMPLIED
+ >
+
+<!--
+ Relationship values can be used in principle:
+
+ a) for document specific toolbars/menus when used
+ with the link element in document head e.g.
+ start, contents, previous, next, index, end, help
+ b) to link to a separate style sheet (rel="stylesheet")
+ c) to make a link to a script (rel="script")
+ d) by stylesheets to control how collections of
+ html nodes are rendered into printed documents
+ e) to make a link to a printable version of this document
+ e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+ %attrs;
+ charset %Charset; #IMPLIED
+ href %URI; #IMPLIED
+ hreflang %LanguageCode; #IMPLIED
+ type %ContentType; #IMPLIED
+ rel %LinkTypes; #IMPLIED
+ rev %LinkTypes; #IMPLIED
+ media %MediaDesc; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+ %i18n;
+ type %ContentType; #REQUIRED
+ media %MediaDesc; #IMPLIED
+ title %Text; #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+ charset %Charset; #IMPLIED
+ type %ContentType; #REQUIRED
+ language CDATA #IMPLIED
+ src %URI; #IMPLIED
+ defer (defer) #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Flow;>
+<!ATTLIST noscript
+ %attrs;
+ >
+
+<!--======================= Frames =======================================-->
+
+<!-- inline subwindow -->
+
+<!ELEMENT iframe %Flow;>
+<!ATTLIST iframe
+ %coreattrs;
+ longdesc %URI; #IMPLIED
+ name NMTOKEN #IMPLIED
+ src %URI; #IMPLIED
+ frameborder (1|0) "1"
+ marginwidth %Pixels; #IMPLIED
+ marginheight %Pixels; #IMPLIED
+ scrolling (yes|no|auto) "auto"
+ align %ImgAlign; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ >
+
+<!-- alternate content container for non frame-based rendering -->
+
+<!ELEMENT noframes %Flow;>
+<!ATTLIST noframes
+ %attrs;
+ >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Flow;>
+<!ATTLIST body
+ %attrs;
+ onload %Script; #IMPLIED
+ onunload %Script; #IMPLIED
+ background %URI; #IMPLIED
+ bgcolor %Color; #IMPLIED
+ text %Color; #IMPLIED
+ link %Color; #IMPLIED
+ vlink %Color; #IMPLIED
+ alink %Color; #IMPLIED
+ >
+
+<!ELEMENT div %Flow;> <!-- generic language/style container -->
+<!ATTLIST div
+ %attrs;
+ %TextAlign;
+ >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+ %attrs;
+ %TextAlign;
+ >
+
+<!--=================== Headings =========================================-->
+
+<!--
+ There are six levels of headings from h1 (the most important)
+ to h6 (the least important).
+-->
+
+<!ELEMENT h1 %Inline;>
+<!ATTLIST h1
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+ %attrs;
+ %TextAlign;
+ >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list bullet styles -->
+
+<!ENTITY % ULStyle "(disc|square|circle)">
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+ %attrs;
+ type %ULStyle; #IMPLIED
+ compact (compact) #IMPLIED
+ >
+
+<!-- Ordered list numbering style
+
+ 1 arabic numbers 1, 2, 3, ...
+ a lower alpha a, b, c, ...
+ A upper alpha A, B, C, ...
+ i lower roman i, ii, iii, ...
+ I upper roman I, II, III, ...
+
+ The style is applied to the sequence number which by default
+ is reset to 1 for the first list item in an ordered list.
+-->
+<!ENTITY % OLStyle "CDATA">
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+ %attrs;
+ type %OLStyle; #IMPLIED
+ compact (compact) #IMPLIED
+ start %Number; #IMPLIED
+ >
+
+<!-- single column list (DEPRECATED) -->
+<!ELEMENT menu (li)+>
+<!ATTLIST menu
+ %attrs;
+ compact (compact) #IMPLIED
+ >
+
+<!-- multiple column list (DEPRECATED) -->
+<!ELEMENT dir (li)+>
+<!ATTLIST dir
+ %attrs;
+ compact (compact) #IMPLIED
+ >
+
+<!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" -->
+<!ENTITY % LIStyle "CDATA">
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+ %attrs;
+ type %LIStyle; #IMPLIED
+ value %Number; #IMPLIED
+ >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+ %attrs;
+ compact (compact) #IMPLIED
+ >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+ %attrs;
+ >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+ %attrs;
+ >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address %Inline;>
+<!ATTLIST address
+ %attrs;
+ >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+ %attrs;
+ align (left|center|right) #IMPLIED
+ noshade (noshade) #IMPLIED
+ size %Pixels; #IMPLIED
+ width %Length; #IMPLIED
+ >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding
+ "img|object|applet|big|small|sub|sup|font|basefont" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+ %attrs;
+ width %Number; #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Flow;>
+<!ATTLIST blockquote
+ %attrs;
+ cite %URI; #IMPLIED
+ >
+
+<!--=================== Text alignment ===================================-->
+
+<!-- center content -->
+<!ELEMENT center %Flow;>
+<!ATTLIST center
+ %attrs;
+ >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+<!--
+ ins/del are allowed in block and inline content, but its
+ inappropriate to include block content within an ins element
+ occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+ %attrs;
+ cite %URI; #IMPLIED
+ datetime %Datetime; #IMPLIED
+ >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+ %attrs;
+ cite %URI; #IMPLIED
+ datetime %Datetime; #IMPLIED
+ >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+ %attrs;
+ charset %Charset; #IMPLIED
+ type %ContentType; #IMPLIED
+ name NMTOKEN #IMPLIED
+ href %URI; #IMPLIED
+ hreflang %LanguageCode; #IMPLIED
+ rel %LinkTypes; #IMPLIED
+ rev %LinkTypes; #IMPLIED
+ accesskey %Character; #IMPLIED
+ shape %Shape; "rect"
+ coords %Coords; #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+ %attrs;
+ >
+
+<!ELEMENT bdo %Inline;> <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+ %coreattrs;
+ %events;
+ lang %LanguageCode; #IMPLIED
+ xml:lang %LanguageCode; #IMPLIED
+ dir (ltr|rtl) #REQUIRED
+ >
+
+<!ELEMENT br EMPTY> <!-- forced line break -->
+<!ATTLIST br
+ %coreattrs;
+ clear (left|all|right|none) "none"
+ >
+
+<!ELEMENT em %Inline;> <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;> <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;> <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;> <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;> <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;> <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;> <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;> <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;> <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;> <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;> <!-- inlined quote -->
+<!ATTLIST q
+ %attrs;
+ cite %URI; #IMPLIED
+ >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;> <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;> <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;> <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;> <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;> <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!ELEMENT u %Inline;> <!-- underline -->
+<!ATTLIST u %attrs;>
+
+<!ELEMENT s %Inline;> <!-- strike-through -->
+<!ATTLIST s %attrs;>
+
+<!ELEMENT strike %Inline;> <!-- strike-through -->
+<!ATTLIST strike %attrs;>
+
+<!ELEMENT basefont EMPTY> <!-- base font size -->
+<!ATTLIST basefont
+ id ID #IMPLIED
+ size CDATA #REQUIRED
+ color %Color; #IMPLIED
+ face CDATA #IMPLIED
+ >
+
+<!ELEMENT font %Inline;> <!-- local change to font -->
+<!ATTLIST font
+ %coreattrs;
+ %i18n;
+ size CDATA #IMPLIED
+ color %Color; #IMPLIED
+ face CDATA #IMPLIED
+ >
+
+<!--==================== Object ======================================-->
+<!--
+ object is used to embed objects as part of HTML pages.
+ param elements should precede other content. Parameters
+ can also be expressed as attribute/value pairs on the
+ object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST object
+ %attrs;
+ declare (declare) #IMPLIED
+ classid %URI; #IMPLIED
+ codebase %URI; #IMPLIED
+ data %URI; #IMPLIED
+ type %ContentType; #IMPLIED
+ codetype %ContentType; #IMPLIED
+ archive %UriList; #IMPLIED
+ standby %Text; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ usemap %URI; #IMPLIED
+ name NMTOKEN #IMPLIED
+ tabindex %Number; #IMPLIED
+ align %ImgAlign; #IMPLIED
+ border %Pixels; #IMPLIED
+ hspace %Pixels; #IMPLIED
+ vspace %Pixels; #IMPLIED
+ >
+
+<!--
+ param is used to supply a named property value.
+ In XML it would seem natural to follow RDF and support an
+ abbreviated syntax where the param elements are replaced
+ by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+ id ID #IMPLIED
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+ valuetype (data|ref|object) "data"
+ type %ContentType; #IMPLIED
+ >
+
+<!--=================== Java applet ==================================-->
+<!--
+ One of code or object attributes must be present.
+ Place param elements before other content.
+-->
+<!ELEMENT applet (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST applet
+ %coreattrs;
+ codebase %URI; #IMPLIED
+ archive CDATA #IMPLIED
+ code CDATA #IMPLIED
+ object CDATA #IMPLIED
+ alt %Text; #IMPLIED
+ name NMTOKEN #IMPLIED
+ width %Length; #REQUIRED
+ height %Length; #REQUIRED
+ align %ImgAlign; #IMPLIED
+ hspace %Pixels; #IMPLIED
+ vspace %Pixels; #IMPLIED
+ >
+
+<!--=================== Images ===========================================-->
+
+<!--
+ To avoid accessibility problems for people who aren't
+ able to see the image, you should provide a text
+ description using the alt and longdesc attributes.
+ In addition, avoid the use of server-side image maps.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+ %attrs;
+ src %URI; #REQUIRED
+ alt %Text; #REQUIRED
+ name NMTOKEN #IMPLIED
+ longdesc %URI; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ usemap %URI; #IMPLIED
+ ismap (ismap) #IMPLIED
+ align %ImgAlign; #IMPLIED
+ border %Length; #IMPLIED
+ hspace %Pixels; #IMPLIED
+ vspace %Pixels; #IMPLIED
+ >
+
+<!-- usemap points to a map element which may be in this document
+ or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+ separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+ %i18n;
+ %events;
+ id ID #REQUIRED
+ class CDATA #IMPLIED
+ style %StyleSheet; #IMPLIED
+ title %Text; #IMPLIED
+ name CDATA #IMPLIED
+ >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+ %attrs;
+ shape %Shape; "rect"
+ coords %Coords; #IMPLIED
+ href %URI; #IMPLIED
+ nohref (nohref) #IMPLIED
+ alt %Text; #REQUIRED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!--================ Forms ===============================================-->
+
+<!ELEMENT form %form.content;> <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+ %attrs;
+ action %URI; #REQUIRED
+ method (get|post) "get"
+ name NMTOKEN #IMPLIED
+ enctype %ContentType; "application/x-www-form-urlencoded"
+ onsubmit %Script; #IMPLIED
+ onreset %Script; #IMPLIED
+ accept %ContentTypes; #IMPLIED
+ accept-charset %Charsets; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!--
+ Each label must not contain more than ONE field
+ Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+ %attrs;
+ for IDREF #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ >
+
+<!ENTITY % InputType
+ "(text | password | checkbox |
+ radio | submit | reset |
+ file | hidden | image | button)"
+ >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY> <!-- form control -->
+<!ATTLIST input
+ %attrs;
+ type %InputType; "text"
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED
+ checked (checked) #IMPLIED
+ disabled (disabled) #IMPLIED
+ readonly (readonly) #IMPLIED
+ size CDATA #IMPLIED
+ maxlength %Number; #IMPLIED
+ src %URI; #IMPLIED
+ alt CDATA #IMPLIED
+ usemap %URI; #IMPLIED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onselect %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ accept %ContentTypes; #IMPLIED
+ align %ImgAlign; #IMPLIED
+ >
+
+<!ELEMENT select (optgroup|option)+> <!-- option selector -->
+<!ATTLIST select
+ %attrs;
+ name CDATA #IMPLIED
+ size %Number; #IMPLIED
+ multiple (multiple) #IMPLIED
+ disabled (disabled) #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ >
+
+<!ELEMENT optgroup (option)+> <!-- option group -->
+<!ATTLIST optgroup
+ %attrs;
+ disabled (disabled) #IMPLIED
+ label %Text; #REQUIRED
+ >
+
+<!ELEMENT option (#PCDATA)> <!-- selectable choice -->
+<!ATTLIST option
+ %attrs;
+ selected (selected) #IMPLIED
+ disabled (disabled) #IMPLIED
+ label %Text; #IMPLIED
+ value CDATA #IMPLIED
+ >
+
+<!ELEMENT textarea (#PCDATA)> <!-- multi-line text field -->
+<!ATTLIST textarea
+ %attrs;
+ name CDATA #IMPLIED
+ rows %Number; #REQUIRED
+ cols %Number; #REQUIRED
+ disabled (disabled) #IMPLIED
+ readonly (readonly) #IMPLIED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onselect %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ >
+
+<!--
+ The fieldset element is used to group form fields.
+ Only one legend element should occur in the content
+ and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+ %attrs;
+ >
+
+<!ENTITY % LAlign "(top|bottom|left|right)">
+
+<!ELEMENT legend %Inline;> <!-- fieldset label -->
+<!ATTLIST legend
+ %attrs;
+ accesskey %Character; #IMPLIED
+ align %LAlign; #IMPLIED
+ >
+
+<!--
+ Content is %Flow; excluding a, form, form controls, iframe
+-->
+<!ELEMENT button %button.content;> <!-- push button -->
+<!ATTLIST button
+ %attrs;
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED
+ type (button|submit|reset) "submit"
+ disabled (disabled) #IMPLIED
+ tabindex %Number; #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ >
+
+<!-- single-line text input control (DEPRECATED) -->
+<!ELEMENT isindex EMPTY>
+<!ATTLIST isindex
+ %coreattrs;
+ %i18n;
+ prompt %Text; #IMPLIED
+ >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+ "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+
+<!-- horizontal placement of table relative to document -->
+<!ENTITY % TAlign "(left|center|right)">
+
+<!-- horizontal alignment attributes for cell contents
+
+ char alignment char, e.g. char=':'
+ charoff offset for alignment char
+-->
+<!ENTITY % cellhalign
+ "align (left|center|right|justify|char) #IMPLIED
+ char %Character; #IMPLIED
+ charoff %Length; #IMPLIED"
+ >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+ "valign (top|middle|bottom|baseline) #IMPLIED"
+ >
+
+<!ELEMENT table
+ (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption %Inline;>
+<!ELEMENT thead (tr)+>
+<!ELEMENT tfoot (tr)+>
+<!ELEMENT tbody (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col EMPTY>
+<!ELEMENT tr (th|td)+>
+<!ELEMENT th %Flow;>
+<!ELEMENT td %Flow;>
+
+<!ATTLIST table
+ %attrs;
+ summary %Text; #IMPLIED
+ width %Length; #IMPLIED
+ border %Pixels; #IMPLIED
+ frame %TFrame; #IMPLIED
+ rules %TRules; #IMPLIED
+ cellspacing %Length; #IMPLIED
+ cellpadding %Length; #IMPLIED
+ align %TAlign; #IMPLIED
+ bgcolor %Color; #IMPLIED
+ >
+
+<!ENTITY % CAlign "(top|bottom|left|right)">
+
+<!ATTLIST caption
+ %attrs;
+ align %CAlign; #IMPLIED
+ >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+ %attrs;
+ span %Number; "1"
+ width %MultiLength; #IMPLIED
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+ width=64 width in screen pixels
+ width=0.5* relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+ %attrs;
+ span %Number; "1"
+ width %MultiLength; #IMPLIED
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!--
+ Use thead to duplicate headers when breaking table
+ across page boundaries, or for static headers when
+ tbody sections are rendered in scrolling panel.
+
+ Use tfoot to duplicate footers when breaking table
+ across page boundaries, or for static footers when
+ tbody sections are rendered in scrolling panel.
+
+ Use multiple tbody sections when rules are needed
+ between groups of table rows.
+-->
+<!ATTLIST thead
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tfoot
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tbody
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tr
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ bgcolor %Color; #IMPLIED
+ >
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+ %attrs;
+ abbr %Text; #IMPLIED
+ axis CDATA #IMPLIED
+ headers IDREFS #IMPLIED
+ scope %Scope; #IMPLIED
+ rowspan %Number; "1"
+ colspan %Number; "1"
+ %cellhalign;
+ %cellvalign;
+ nowrap (nowrap) #IMPLIED
+ bgcolor %Color; #IMPLIED
+ width %Pixels; #IMPLIED
+ height %Pixels; #IMPLIED
+ >
+
+<!ATTLIST td
+ %attrs;
+ abbr %Text; #IMPLIED
+ axis CDATA #IMPLIED
+ headers IDREFS #IMPLIED
+ scope %Scope; #IMPLIED
+ rowspan %Number; "1"
+ colspan %Number; "1"
+ %cellhalign;
+ %cellvalign;
+ nowrap (nowrap) #IMPLIED
+ bgcolor %Color; #IMPLIED
+ width %Pixels; #IMPLIED
+ height %Pixels; #IMPLIED
+ >
+
diff --git a/test/valid/dtds/xhtml1.dcl b/test/valid/dtds/xhtml1.dcl
new file mode 100644
index 0000000..fed2103
--- /dev/null
+++ b/test/valid/dtds/xhtml1.dcl
@@ -0,0 +1,179 @@
+<!SGML -- SGML Declaration for valid XML documents --
+ "ISO 8879:1986 (WWW)"
+
+ CHARSET
+ BASESET
+ "ISO Registration Number 176//CHARSET
+ ISO/IEC 10646-1:1993 UCS-4 with implementation
+ level 3//ESC 2/5 2/15 4/6"
+ DESCSET
+ 0 9 UNUSED
+ 9 2 9
+ 11 2 UNUSED
+ 13 1 13
+ 14 18 UNUSED
+ 32 95 32
+ 127 1 UNUSED
+ 128 32 UNUSED
+ -- use this instead of the official declaration because SP only
+ supports 16-bit characters --
+ 160 65374 160
+ 65534 2 UNUSED
+ -- 55296 2048 UNUSED
+ 57344 8190 57344
+ 65534 2 UNUSED
+ 65536 1048576 65536 --
+ CAPACITY NONE
+
+ SCOPE DOCUMENT
+
+ SYNTAX
+ SHUNCHAR NONE
+ BASESET "ISO Registration Number 176//CHARSET
+ ISO/IEC 10646-1:1993 UCS-4 with implementation
+ level 3//ESC 2/5 2/15 4/6"
+ DESCSET
+ 0 1114112 0
+ FUNCTION
+ RE 13
+ RS 10
+ SPACE 32
+ TAB SEPCHAR 9
+
+ NAMING
+ LCNMSTRT ""
+ UCNMSTRT ""
+ NAMESTRT
+ 58 95 192-214 216-246 248-305 308-318 321-328
+ 330-382 384-451 461-496 500-501 506-535 592-680
+ 699-705 902 904-906 908 910-929 931-974 976-982
+ 986 988 990 992 994-1011 1025-1036 1038-1103
+ 1105-1116 1118-1153 1168-1220 1223-1224
+ 1227-1228 1232-1259 1262-1269 1272-1273
+ 1329-1366 1369 1377-1414 1488-1514 1520-1522
+ 1569-1594 1601-1610 1649-1719 1722-1726
+ 1728-1742 1744-1747 1749 1765-1766 2309-2361
+ 2365 2392-2401 2437-2444 2447-2448 2451-2472
+ 2474-2480 2482 2486-2489 2524-2525 2527-2529
+ 2544-2545 2565-2570 2575-2576 2579-2600
+ 2602-2608 2610-2611 2613-2614 2616-2617
+ 2649-2652 2654 2674-2676 2693-2699 2701
+ 2703-2705 2707-2728 2730-2736 2738-2739
+ 2741-2745 2749 2784 2821-2828 2831-2832
+ 2835-2856 2858-2864 2866-2867 2870-2873 2877
+ 2908-2909 2911-2913 2949-2954 2958-2960
+ 2962-2965 2969-2970 2972 2974-2975 2979-2980
+ 2984-2986 2990-2997 2999-3001 3077-3084
+ 3086-3088 3090-3112 3114-3123 3125-3129
+ 3168-3169 3205-3212 3214-3216 3218-3240
+ 3242-3251 3253-3257 3294 3296-3297 3333-3340
+ 3342-3344 3346-3368 3370-3385 3424-3425
+ 3585-3630 3632 3634-3635 3648-3653 3713-3714
+ 3716 3719-3720 3722 3725 3732-3735 3737-3743
+ 3745-3747 3749 3751 3754-3755 3757-3758 3760
+ 3762-3763 3773 3776-3780 3904-3911 3913-3945
+ 4256-4293 4304-4342 4352 4354-4355 4357-4359
+ 4361 4363-4364 4366-4370 4412 4414 4416 4428
+ 4430 4432 4436-4437 4441 4447-4449 4451 4453
+ 4455 4457 4461-4462 4466-4467 4469 4510 4520
+ 4523 4526-4527 4535-4536 4538 4540-4546 4587
+ 4592 4601 7680-7835 7840-7929 7936-7957
+ 7960-7965 7968-8005 8008-8013 8016-8023 8025
+ 8027 8029 8031-8061 8064-8116 8118-8124 8126
+ 8130-8132 8134-8140 8144-8147 8150-8155
+ 8160-8172 8178-8180 8182-8188 8486 8490-8491
+ 8494 8576-8578 12295 12321-12329 12353-12436
+ 12449-12538 12549-12588 19968-40869 44032-55203
+
+ LCNMCHAR ""
+ UCNMCHAR ""
+ NAMECHAR
+ 45-46 183 720-721 768-837 864-865 903 1155-1158
+ 1425-1441 1443-1465 1467-1469 1471 1473-1474
+ 1476 1600 1611-1618 1632-1641 1648 1750-1764
+ 1767-1768 1770-1773 1776-1785 2305-2307 2364
+ 2366-2381 2385-2388 2402-2403 2406-2415
+ 2433-2435 2492 2494-2500 2503-2504 2507-2509
+ 2519 2530-2531 2534-2543 2562 2620 2622-2626
+ 2631-2632 2635-2637 2662-2673 2689-2691 2748
+ 2750-2757 2759-2761 2763-2765 2790-2799
+ 2817-2819 2876 2878-2883 2887-2888 2891-2893
+ 2902-2903 2918-2927 2946-2947 3006-3010
+ 3014-3016 3018-3021 3031 3047-3055 3073-3075
+ 3134-3140 3142-3144 3146-3149 3157-3158
+ 3174-3183 3202-3203 3262-3268 3270-3272
+ 3274-3277 3285-3286 3302-3311 3330-3331
+ 3390-3395 3398-3400 3402-3405 3415 3430-3439
+ 3633 3636-3642 3654-3662 3664-3673 3761
+ 3764-3769 3771-3772 3782 3784-3789 3792-3801
+ 3864-3865 3872-3881 3893 3895 3897 3902-3903
+ 3953-3972 3974-3979 3984-3989 3991 3993-4013
+ 4017-4023 4025 8400-8412 8417 12293 12330-12335
+ 12337-12341 12441-12442 12445-12446 12540-12542
+
+ NAMECASE
+ GENERAL NO
+ ENTITY NO
+
+ DELIM
+ GENERAL SGMLREF
+ HCRO "&#38;#x" -- 38 is the number for ampersand --
+ NESTC "/"
+ NET ">"
+ PIC "?>"
+ SHORTREF NONE
+
+ NAMES
+ SGMLREF
+
+ QUANTITY NONE
+
+ ENTITIES
+ "amp" 38
+ "lt" 60
+ "gt" 62
+ "quot" 34
+ "apos" 39
+
+ FEATURES
+ MINIMIZE
+ DATATAG NO
+ OMITTAG NO
+ RANK NO
+ SHORTTAG
+ STARTTAG
+ EMPTY NO
+ UNCLOSED NO
+ NETENABL IMMEDNET
+ ENDTAG
+ EMPTY NO
+ UNCLOSED NO
+ ATTRIB
+ DEFAULT YES
+ OMITNAME NO
+ VALUE NO
+ EMPTYNRM YES
+ IMPLYDEF
+ ATTLIST NO
+ DOCTYPE NO
+ ELEMENT NO
+ ENTITY NO
+ NOTATION NO
+ LINK
+ SIMPLE NO
+ IMPLICIT NO
+ EXPLICIT NO
+ OTHER
+ CONCUR NO
+ SUBDOC NO
+ FORMAL NO
+ URN NO
+ KEEPRSRE YES
+ VALIDITY TYPE
+ ENTITIES
+ REF ANY
+ INTEGRAL YES
+ APPINFO NONE
+ SEEALSO "ISO 8879:1986//NOTATION
+ Extensible Markup Language (XML) 1.0//EN"
+>
diff --git a/test/valid/dtds/xmlspec.dtd b/test/valid/dtds/xmlspec.dtd
new file mode 100644
index 0000000..55cfba6
--- /dev/null
+++ b/test/valid/dtds/xmlspec.dtd
@@ -0,0 +1,1102 @@
+<!-- ............................................................... -->
+<!-- XML specification DTD ......................................... -->
+<!-- ............................................................... -->
+
+<!--
+TYPICAL INVOCATION:
+# <!DOCTYPE spec PUBLIC
+# "-//W3C//DTD Specification::19980521//EN"
+# "http://www.w3.org/XML/1998/06/xmlspec-19980521.dtd">
+
+PURPOSE:
+ This DTD was developed for use with the XML family of W3C
+ specifications. It is an XML-compliant DTD based in part on
+ the TEI Lite and Sweb DTDs.
+
+DEPENDENCIES:
+ None.
+
+CHANGE HISTORY:
+ The list of changes is at the end of the DTD.
+
+ For all details, see the design report at:
+
+# <http://www.w3.org/XML/1998/06/xmlspec-report-19980521.htm>
+
+ The "typical invocation" FPI always gets updated to reflect the
+ date of the most recent changes.
+
+ Search this file for "#" in the first column to see change history
+ comments.
+
+MAINTAINER:
+ Eve Maler
+ ArborText Inc.
+ elm@arbortext.com
+ voice: +1 781 270 5750
+ fax: +1 781 273 3760
+-->
+
+<!-- ............................................................... -->
+<!-- Entities for characters and symbols ........................... -->
+
+<!--
+#1998-03-10: maler: Added &ldquo; and &rdquo;.
+# Used 8879:1986-compatible decimal character
+# references.
+# Merged charent.mod file back into main file.
+#1998-05-14: maler: Fixed ldquo and rdquo. Gave mdash a real number.
+-->
+
+<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY amp "&#38;#38;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">
+<!ENTITY nbsp "&#160;">
+<!--
+<!ENTITY mdash "&#x2014;">
+<!ENTITY ldquo "&#x201C;">
+<!ENTITY rdquo "&#x201D;">
+-->
+
+<!-- ............................................................... -->
+<!-- Entities for classes of standalone elements ................... -->
+
+<!--
+#1997-10-16: maler: Added table to %illus.class;.
+#1997-11-28: maler: Added htable to %illus.class;.
+#1997-12-29: maler: IGNOREd table.
+#1998-03-10: maler: Removed SGML Open-specific %illus.class;.
+# Added "local" entities for customization.
+#1998-05-14: maler: Added issue to %note.class;.
+# Removed %[local.]statusp.class;.
+#1998-05-21: maler: Added constraintnote to %note.class;.
+-->
+
+<!ENTITY % local.p.class "">
+<!ENTITY % p.class "p
+ %local.p.class;">
+
+<!ENTITY % local.list.class "">
+<!ENTITY % list.class "ulist|olist|slist|glist
+ %local.list.class;">
+
+<!ENTITY % local.speclist.class "">
+<!ENTITY % speclist.class "orglist|blist
+ %local.speclist.class;">
+
+<!ENTITY % local.note.class "">
+<!ENTITY % note.class "note|issue|wfcnote|vcnote
+ |constraintnote %local.note.class;">
+
+<!ENTITY % local.illus.class "">
+<!ENTITY % illus.class "eg|graphic|scrap|htable
+ %local.illus.class;">
+
+<!-- ............................................................... -->
+<!-- Entities for classes of phrase-level elements ................. -->
+
+<!--
+#1997-12-29: maler: Added xspecref to %ref.class;.
+#1998-03-10: maler: Added %ednote.class;.
+# Added "local" entities for customization.
+-->
+
+<!ENTITY % local.annot.class "">
+<!ENTITY % annot.class "footnote
+ %local.annot.class;">
+
+<!ENTITY % local.termdef.class "">
+<!ENTITY % termdef.class "termdef|term
+ %local.termdef.class;">
+
+<!ENTITY % local.emph.class "">
+<!ENTITY % emph.class "emph|quote
+ %local.emph.class;">
+
+<!ENTITY % local.ref.class "">
+<!ENTITY % ref.class "bibref|specref|termref|titleref
+ |xspecref|xtermref
+ %local.ref.class;">
+
+<!ENTITY % local.loc.class "">
+<!ENTITY % loc.class "loc
+ %local.loc.class;">
+
+<!ENTITY % local.tech.class "">
+<!ENTITY % tech.class "kw|nt|xnt|code
+ %local.tech.class;">
+
+<!ENTITY % local.ednote.class "">
+<!ENTITY % ednote.class "ednote
+ %local.ednote.class;">
+
+<!-- ............................................................... -->
+<!-- Entities for mixtures of standalone elements .................. -->
+
+<!--
+#1997-09-30: maler: Created %p.mix; to eliminate p from self.
+#1997-09-30: maler: Added %speclist.class; to %obj.mix; and %p.mix;.
+#1997-09-30: maler: Added %note.class; to %obj.mix; and %p.mix;.
+#1997-10-16: maler: Created %entry.mix;. Note that some elements
+# left out here are still allowed in termdef,
+# which entry can contain through %p.pcd.mix;.
+#1997-11-28: maler: Added %p.class; to %statusobj.mix;.
+#1998-03-10: maler: Added %ednote.class; to all mixtures, except
+# %p.mix; and %statusobj.mix;, because paragraphs
+# and status paragraphs will contain ednote
+# through %p.pcd.mix;.
+#1998-03-23: maler: Added %termdef.mix; (broken out from
+# %termdef.pcd.mix;).
+#1998-05-14: maler: Removed %statusobj.mix; and all mentions of
+# %statusp.mix;.
+-->
+
+<!ENTITY % div.mix
+ "%p.class;|%list.class;|%speclist.class;|%note.class;
+ |%illus.class;|%ednote.class;">
+<!ENTITY % obj.mix
+ "%p.class;|%list.class;|%speclist.class;|%note.class;
+ |%illus.class;|%ednote.class;">
+<!ENTITY % p.mix
+ "%list.class;|%speclist.class;|%note.class;|%illus.class;">
+<!ENTITY % entry.mix
+ "%list.class;|note|eg|graphic|%ednote.class;">
+<!ENTITY % hdr.mix
+ "%p.class;|%list.class;|%ednote.class;">
+<!ENTITY % termdef.mix
+ "%note.class;|%illus.class;">
+
+<!-- ............................................................... -->
+<!-- Entities for mixtures of #PCDATA and phrase-level elements .... -->
+
+<!-- Note that %termdef.pcd.mix contains %note.class;
+ and %illus.class;, considered standalone elements. -->
+
+<!--
+#1997-09-30: maler: Added scrap and %note.class; to %termdef.pcd.mix;.
+#1997-11-28: maler: Added %loc.class; to %p.pcd.mix;.
+#1998-03-10: maler: Added %ednote.class; to all mixtures.
+#1998-03-23: maler: Moved some %termdef.pcd.mix; stuff out to
+# %termdef.mix;.
+#1998-05-14: maler: Removed %statusp.pcd.mix;.
+#1998-05-21: maler: Added constraint element to %eg.pcd.mix;.
+-->
+
+<!ENTITY % p.pcd.mix
+ "#PCDATA|%annot.class;|%termdef.class;|%emph.class;
+ |%ref.class;|%tech.class;|%loc.class;|%ednote.class;">
+<!ENTITY % head.pcd.mix
+ "#PCDATA|%annot.class;|%emph.class;|%tech.class;|%ednote.class;">
+<!ENTITY % label.pcd.mix
+ "#PCDATA|%annot.class;|%termdef.class;|%emph.class;|%tech.class;
+ |%ednote.class;">
+<!ENTITY % eg.pcd.mix
+ "#PCDATA|%annot.class;|%emph.class;|%ednote.class;|constraint">
+<!ENTITY % termdef.pcd.mix
+ "#PCDATA|term|%emph.class;|%ref.class;|%tech.class;
+ |%ednote.class;">
+<!ENTITY % bibl.pcd.mix
+ "#PCDATA|%emph.class;|%ref.class;|%loc.class;|%ednote.class;">
+<!ENTITY % tech.pcd.mix
+ "#PCDATA|%ednote.class;">
+<!ENTITY % loc.pcd.mix
+ "#PCDATA|%loc.class;|%ednote.class;">
+
+<!-- ............................................................... -->
+<!-- Entities for customizable content models ...................... -->
+
+<!--
+#1998-03-10: maler: Added customization entities.
+#1998-05-14: maler: Allowed prevlocs and latestloc in either order.
+-->
+
+<!ENTITY % spec.mdl
+ "header, front?, body, back?">
+
+<!ENTITY % header.mdl
+ "title, subtitle?, version, w3c-designation, w3c-doctype,
+ pubdate, notice*, publoc, ((prevlocs, latestloc?) |
+ (latestloc, prevlocs?))?, authlist, status, abstract,
+ pubstmt?, sourcedesc?, langusage, revisiondesc">
+
+<!ENTITY % pubdate.mdl
+ "day?, month, year">
+
+<!-- ............................................................... -->
+<!-- Entities for common attributes ................................ -->
+
+<!-- key attribute:
+ Optionally provides a sorting or indexing key, for cases when
+ the element content is inappropriate for this purpose. -->
+<!ENTITY % key.att
+ 'key CDATA #IMPLIED'>
+
+<!-- def attribute:
+ Points to the element where the relevant definition can be
+ found, using the IDREF mechanism. %def.att; is for optional
+ def attributes, and %def-req.att; is for required def
+ attributes. -->
+<!ENTITY % def.att
+ 'def IDREF #IMPLIED'>
+<!ENTITY % def-req.att
+ 'def IDREF #REQUIRED'>
+
+<!-- ref attribute:
+ Points to the element where more information can be found,
+ using the IDREF mechanism. %ref.att; is for optional
+ ref attributes, and %ref-req.att; is for required ref
+ attributes. -->
+<!ENTITY % ref.att
+ 'ref IDREF #IMPLIED'>
+<!ENTITY % ref-req.att
+ 'ref IDREF #REQUIRED'>
+
+<!--
+#1998-03-23: maler: Added show and actuate attributes to href.
+# Added semi-common xml:space attribute.
+-->
+
+<!-- HREF and source attributes:
+ Points to the element where more information or source data
+ can be found, using the URL (XLL simple link) mechanism.
+ For some purposes, is associated with additional XLL
+ attributes. %href.att; is for optional HREF attributes,
+ and %href-req.att; is for required HREF attributes.
+ %source-req.att; is for the source attribute, which
+ is always required. -->
+<!ENTITY % href.att
+ 'xml:link CDATA #FIXED "simple"
+ href CDATA #IMPLIED
+ show CDATA #FIXED "embed"
+ actuate CDATA #FIXED "auto"'>
+
+<!ENTITY % href-req.att
+ 'xml:link CDATA #FIXED "simple"
+ href CDATA #REQUIRED
+ show CDATA #FIXED "embed"
+ actuate CDATA #FIXED "auto"'>
+
+<!ENTITY % source-req.att
+ 'xml:link CDATA #FIXED "simple"
+ xml:attributes NMTOKENS #FIXED "href source"
+ source CDATA #REQUIRED
+ show CDATA #FIXED "embed"
+ actuate CDATA #FIXED "auto"'>
+
+<!-- xml:space attribute:
+ Indicates that the element contains white space
+ that the formatter or other application should retain,
+ as appropriate to its function. -->
+<!ENTITY % xmlspace.att
+ 'xml:space (default
+ |preserve) #FIXED "preserve"'>
+
+<!-- Common attributes:
+ Every element has an ID attribute (sometimes required,
+ but usually optional) for links, and a Role attribute
+ for extending the useful life of the DTD by allowing
+ authors to make subclasses for any element. %common.att;
+ is for common attributes where the ID is optional, and
+ %common-idreq.att; is for common attributes where the
+ ID is required. -->
+<!ENTITY % common.att
+ 'id ID #IMPLIED
+ role NMTOKEN #IMPLIED'>
+<!ENTITY % common-idreq.att
+ 'id ID #REQUIRED
+ role NMTOKEN #IMPLIED'>
+
+<!-- ............................................................... -->
+<!-- Common elements ............................................... -->
+
+<!-- head: Title on divisions, productions, and the like -->
+<!ELEMENT head (%head.pcd.mix;)*>
+<!ATTLIST head %common.att;>
+
+<!-- ............................................................... -->
+<!-- Major specification structure ................................. -->
+
+<!--
+#1998-03-10: maler: Made spec content model easily customizable.
+-->
+
+<!ELEMENT spec (%spec.mdl;)>
+<!ATTLIST spec %common.att;>
+
+<!ELEMENT front (div1+)>
+<!ATTLIST front %common.att;>
+
+<!ELEMENT body (div1+)>
+<!ATTLIST body %common.att;>
+
+<!--
+#1997-09-30: maler: Added inform-div1 to back content.
+-->
+
+<!ELEMENT back ((div1+, inform-div1*) | inform-div1+)>
+<!ATTLIST back %common.att;>
+
+<!ELEMENT div1 (head, (%div.mix;)*, div2*)>
+<!ATTLIST div1 %common.att;>
+
+<!--
+#1997-09-30: maler: Added inform-div1 declarations.
+-->
+
+<!-- inform-div1: Non-normative division in back matter -->
+<!ELEMENT inform-div1 (head, (%div.mix;)*, div2*)>
+<!ATTLIST inform-div1 %common.att;>
+
+<!ELEMENT div2 (head, (%div.mix;)*, div3*)>
+<!ATTLIST div2 %common.att;>
+
+<!ELEMENT div3 (head, (%div.mix;)*, div4*)>
+<!ATTLIST div3 %common.att;>
+
+<!ELEMENT div4 (head, (%div.mix;)*)>
+<!ATTLIST div4 %common.att;>
+
+<!-- Specification header .......... -->
+
+<!--
+#1998-03-10: maler: Made header content model easily customizable.
+-->
+
+<!ELEMENT header (%header.mdl;)>
+<!ATTLIST header %common.att;>
+
+<!-- Example of title: "Extensible Cheese Language (XCL)" -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title %common.att;>
+
+<!-- Example of subtitle: "A Cheesy Specification" -->
+<!ELEMENT subtitle (#PCDATA)>
+<!ATTLIST subtitle %common.att;>
+
+<!-- Example of version: "Version 666.0" -->
+<!ELEMENT version (#PCDATA)>
+<!ATTLIST version %common.att;>
+
+<!-- Example of w3c-designation: "WD-xcl-19991231" -->
+<!ELEMENT w3c-designation (#PCDATA)>
+<!ATTLIST w3c-designation %common.att;>
+
+<!-- Example of w3c-doctype: "World Wide Web Consortium Working
+ Draft" -->
+<!ELEMENT w3c-doctype (#PCDATA)>
+<!ATTLIST w3c-doctype %common.att;>
+
+<!--
+#1998-03-10: maler: Made pubdate content model easily customizable.
+-->
+
+<!ELEMENT pubdate (%pubdate.mdl;)>
+<!ATTLIST pubdate %common.att;>
+
+<!ELEMENT day (#PCDATA)>
+<!ATTLIST day %common.att;>
+
+<!ELEMENT month (#PCDATA)>
+<!ATTLIST month %common.att;>
+
+<!ELEMENT year (#PCDATA)>
+<!ATTLIST year %common.att;>
+
+<!-- Example of notice: "This draft is for public comment..." -->
+<!ELEMENT notice (%hdr.mix;)+>
+<!ATTLIST notice %common.att;>
+
+<!ELEMENT publoc (loc+)>
+<!ATTLIST publoc %common.att;>
+
+<!ELEMENT prevlocs (loc+)>
+<!ATTLIST prevlocs %common.att;>
+
+<!ELEMENT latestloc (loc+)>
+<!ATTLIST latestloc %common.att;>
+
+<!-- loc (defined in "Phrase-level elements" below) -->
+
+<!ELEMENT authlist (author+)>
+<!ATTLIST authlist %common.att;>
+
+<!--
+#1997-09-30: maler: Made affiliation optional.
+#1998-03-10: maler: Made email optional.
+-->
+
+<!ELEMENT author (name, affiliation?, email?)>
+<!ATTLIST author %common.att;>
+
+<!ELEMENT name (#PCDATA)>
+<!ATTLIST name
+ %common.att;
+ %key.att;>
+
+<!ELEMENT affiliation (#PCDATA)>
+<!ATTLIST affiliation %common.att;>
+
+<!ELEMENT email (#PCDATA)>
+<!-- HREF attribute:
+ email functions as a hypertext reference through this
+ required attribute. Typically the reference would use
+ the mailto: scheme. -->
+<!ATTLIST email
+ %common.att;
+ %href-req.att;>
+
+<!--
+#1998-05-15: maler: Changed status content from %statusobj.mix;
+# to plain %obj.mix;. statusp is obsolete.
+-->
+
+<!ELEMENT status (%obj.mix;)+>
+<!ATTLIST status %common.att;>
+
+<!ELEMENT abstract (%hdr.mix;)*>
+<!ATTLIST abstract %common.att;>
+
+<!ELEMENT pubstmt (%hdr.mix;)+>
+<!ATTLIST pubstmt %common.att;>
+
+<!ELEMENT sourcedesc (%hdr.mix;)+>
+<!ATTLIST sourcedesc %common.att;>
+
+<!ELEMENT langusage (language+)>
+<!ATTLIST langusage %common.att;>
+
+<!ELEMENT language (#PCDATA)>
+<!ATTLIST language %common.att;>
+
+<!ELEMENT revisiondesc (%hdr.mix;)+>
+<!ATTLIST revisiondesc %common.att;>
+
+<!-- ............................................................... -->
+<!-- Standalone elements ........................................... -->
+
+<!-- Paragraphs .................... -->
+
+<!--
+#1997-09-30: maler: Changed from %obj.mix; to %p.mix;.
+#1997-12-29: maler: Changed order of %p.mix; and %p.pcd.mix;
+# references.
+#1997-12-29: maler: Changed order of %statusobj.mix; and
+# %statusp.pcd.mix; references.
+#1998-05-14: maler: Removed statusp declarations.
+-->
+
+<!ELEMENT p (%p.pcd.mix;|%p.mix;)*>
+<!ATTLIST p %common.att;>
+
+<!-- Lists ......................... -->
+
+<!ELEMENT ulist (item+)>
+<!-- spacing attribute:
+ Use "normal" to get normal vertical spacing for items;
+ use "compact" to get less spacing. The default is dependent
+ on the stylesheet. -->
+<!ATTLIST ulist
+ %common.att;
+ spacing (normal|compact) #IMPLIED>
+
+<!ELEMENT olist (item+)>
+<!-- spacing attribute:
+ Use "normal" to get normal vertical spacing for items;
+ use "compact" to get less spacing. The default is dependent
+ on the stylesheet. -->
+<!ATTLIST olist
+ %common.att;
+ spacing (normal|compact) #IMPLIED>
+
+<!ELEMENT item (%obj.mix;)+>
+<!ATTLIST item %common.att;>
+
+<!ELEMENT slist (sitem+)>
+<!ATTLIST slist %common.att;>
+
+<!ELEMENT sitem (%p.pcd.mix;)*>
+<!ATTLIST sitem %common.att;>
+
+<!ELEMENT glist (gitem+)>
+<!ATTLIST glist %common.att;>
+
+<!ELEMENT gitem (label, def)>
+<!ATTLIST gitem %common.att;>
+
+<!ELEMENT label (%label.pcd.mix;)*>
+<!ATTLIST label %common.att;>
+
+<!ELEMENT def (%obj.mix;)*>
+<!ATTLIST def %common.att;>
+
+<!-- Special lists ................. -->
+
+<!ELEMENT blist (bibl+)>
+<!ATTLIST blist %common.att;>
+
+<!ELEMENT bibl (%bibl.pcd.mix;)*>
+<!-- HREF attribute:
+ bibl optionally functions as a hypertext reference to the
+ referred-to resource through this attribute. -->
+<!ATTLIST bibl
+ %common.att;
+ %href.att;
+ %key.att;>
+
+<!ELEMENT orglist (member+)>
+<!ATTLIST orglist %common.att;>
+
+<!--
+#1997-09-30: maler: Added optional affiliation.
+-->
+
+<!ELEMENT member (name, affiliation?, role?)>
+<!ATTLIST member %common.att;>
+
+<!-- name (defined in "Specification header" above) -->
+<!-- affiliation (defined in "Specification header" above) -->
+
+<!ELEMENT role (#PCDATA)>
+<!ATTLIST role %common.att;>
+
+<!-- Notes ......................... -->
+
+<!ELEMENT note (%obj.mix;)+>
+<!ATTLIST note %common.att;>
+
+<!--
+#1998-05-14: maler: Declared issue element.
+-->
+
+<!ELEMENT issue (%obj.mix;)+>
+<!ATTLIST issue %common-idreq.att;>
+
+<!ELEMENT wfcnote (head, (%obj.mix;)+)>
+<!-- ID attribute:
+ wfcnote must have an ID so that it can be pointed to
+ from a wfc element in a production. -->
+<!ATTLIST wfcnote
+ %common-idreq.att;>
+
+<!ELEMENT vcnote (head, (%obj.mix;)+)>
+<!-- ID attribute:
+ vcnote must have an ID so that it can be pointed to
+ from a vc element in a production. -->
+<!ATTLIST vcnote
+ %common-idreq.att;>
+
+<!--
+#1998-05-21: maler: Declared generic constraintnote element.
+-->
+
+<!ELEMENT constraintnote (head, (%obj.mix;)+)>
+<!-- ID attribute:
+ cnote must have an ID so that it can be pointed to
+ from a constraint element in a production. -->
+<!-- type attribute:
+ cnote must have a type value keyword so that it can be
+ correctly characterized in the specification. -->
+<!ATTLIST constraintnote
+ %common-idreq.att;
+ type NMTOKEN #REQUIRED>
+
+<!-- Illustrations ................. -->
+
+<!--
+#1998-03-23: maler: Added xml:space attribute.
+-->
+
+<!ELEMENT eg (%eg.pcd.mix;)*>
+<!ATTLIST eg
+ %common.att;
+ %xmlspace.att;>
+
+<!ELEMENT graphic EMPTY>
+<!-- source attribute:
+ The graphic data must reside at the location pointed to.
+ This is a hypertext reference, but for practical purposes,
+ for now it should just be a pathname. -->
+<!ATTLIST graphic
+ %common.att;
+ %source-req.att;
+ alt CDATA #IMPLIED>
+
+<!--
+#1997-11-28: maler: Added prodgroup to scrap and defined it.
+#1998-05-21: maler: Added constraint to prod.
+-->
+
+<!ELEMENT scrap (head, (prodgroup+ | prod+ | bnf))>
+<!-- lang attribute:
+ The scrap can link to a description of the language used,
+ found in a language element in the header. -->
+<!ATTLIST scrap
+ %common.att;
+ lang IDREF #IMPLIED>
+
+<!ELEMENT prodgroup (prod+)>
+<!-- pcw<n> attributes:
+ Presentational attributes to control the width
+ of the "pseudo-table" columns used to output
+ groups of productions. -->
+<!ATTLIST prodgroup
+ %common.att;
+ pcw1 CDATA #IMPLIED
+ pcw2 CDATA #IMPLIED
+ pcw3 CDATA #IMPLIED
+ pcw4 CDATA #IMPLIED
+ pcw5 CDATA #IMPLIED
+>
+
+<!ELEMENT prod (lhs, (rhs, (com|wfc|vc|constraint)*)+)>
+<!-- ID attribute:
+ The production must have an ID so that cross-references
+ (specref) and mentions of nonterminals (nt) can link to
+ it. -->
+<!ATTLIST prod
+ %common-idreq.att;>
+
+<!ELEMENT lhs (#PCDATA)>
+<!ATTLIST lhs %common.att;>
+
+<!ELEMENT rhs (#PCDATA|nt|xnt|com)*>
+<!ATTLIST rhs %common.att;>
+
+<!-- nt and xnt (defined in "Phrase-level elements" below) -->
+
+<!--
+#1997-11-28: maler: Added loc and bibref to com content.
+-->
+
+<!ELEMENT com (#PCDATA|loc|bibref)*>
+<!ATTLIST com %common.att;>
+
+<!-- wfc: Should generate the head of the wfcnote pointed to -->
+<!ELEMENT wfc EMPTY>
+<!-- def attribute:
+ Each well formedness tagline in a production must link to the
+ wfcnote that defines it. -->
+<!ATTLIST wfc
+ %def-req.att;
+ %common.att;>
+
+<!-- vc: Should generate the head of the vcnote pointed to -->
+<!ELEMENT vc EMPTY>
+<!-- def attribute:
+ Each validity tagline in a production must link to the vcnote
+ that defines it. -->
+<!ATTLIST vc
+ %def-req.att;
+ %common.att;>
+
+<!--
+#1998-05-21: maler: Declared generic constraint element.
+-->
+
+<!-- constraint: Should generate the head of the constraintnote
+ pointed to -->
+<!ELEMENT constraint EMPTY>
+<!-- def attribute:
+ Each constraint tagline in a production must link to the
+ constraint note that defines it. -->
+<!ATTLIST constraint
+ %def-req.att;
+ %common.att;>
+
+<!--
+#1998-03-23: maler: Added xml:space attribute.
+-->
+
+<!-- bnf: Un-marked-up production -->
+<!ELEMENT bnf (%eg.pcd.mix;)*>
+<!ATTLIST bnf
+ %common.att;
+ %xmlspace.att;>
+
+<!--
+#1997-10-16: maler: Added table mechanism.
+#1997-11-28: maler: Added non-null system ID to entity declaration.
+# Added HTML table module.
+#1997-12-29: maler: IGNOREd SGML Open table model.
+#1998-03-10: maler: Removed SGML Open table model.
+# Merged html-tbl.mod file into main file.
+# Added %common.att; to all HTML table elements.
+#1998-05-14: maler: Replaced table model with full HTML 4.0 model.
+# Removed htable in favor of table.
+# Removed htbody in favor of tbody.
+-->
+
+<!ENTITY % cellhalign.att
+ 'align (left|center
+ |right|justify
+ |char) #IMPLIED
+ char CDATA #IMPLIED
+ charoff CDATA #IMPLIED'>
+
+<!ENTITY % cellvalign.att
+ 'valign (top|middle
+ |bottom
+ |baseline) #IMPLIED'>
+
+<!ENTITY % thtd.att
+ 'abbr CDATA #IMPLIED
+ axis CDATA #IMPLIED
+ headers IDREFS #IMPLIED
+ scope (row
+ |col
+ |rowgroup
+ |colgroup) #IMPLIED
+ rowspan NMTOKEN "1"
+ colspan NMTOKEN "1"'>
+
+<!ENTITY % width.att
+ 'width CDATA #IMPLIED'>
+
+<!ENTITY % span.att
+ 'span NMTOKEN "1"'>
+
+<!ELEMENT table
+ (caption?, (col*|colgroup*), thead?, tfoot?, tbody+)>
+<!ATTLIST table
+ %common.att;
+ %width.att;
+ summary CDATA #IMPLIED
+ border CDATA #IMPLIED
+ frame (void|above
+ |below|hsides
+ |lhs|rhs
+ |vsides|box
+ |border) #IMPLIED
+ rules (none|groups
+ |rows|cols
+ |all) #IMPLIED
+ cellspacing CDATA #IMPLIED
+ cellpadding CDATA #IMPLIED>
+
+<!ELEMENT caption (%p.pcd.mix;)*>
+<!ATTLIST caption %common.att;>
+
+<!ELEMENT col EMPTY>
+<!ATTLIST col
+ %common.att;
+ %span.att;
+ %width.att;
+ %cellhalign.att;
+ %cellvalign.att;>
+
+<!ELEMENT colgroup (col)*>
+<!ATTLIST colgroup
+ %common.att;
+ %span.att;
+ %width.att;
+ %cellhalign.att;
+ %cellvalign.att;>
+
+<!ELEMENT thead (tr)+>
+<!ATTLIST thead
+ %common.att;
+ %cellhalign.att;
+ %cellvalign.att;>
+
+<!ELEMENT tfoot (tr)+>
+<!ATTLIST tfoot
+ %common.att;
+ %cellhalign.att;
+ %cellvalign.att;>
+
+<!ELEMENT tbody (tr)+>
+<!ATTLIST tbody
+ %common.att;
+ %cellhalign.att;
+ %cellvalign.att;>
+
+<!ELEMENT tr (th|td)+>
+<!ATTLIST tr
+ %common.att;
+ %cellhalign.att;
+ %cellvalign.att;>
+
+<!ELEMENT th (%p.pcd.mix;|%p.mix;)*>
+<!ATTLIST th
+ %common.att;
+ %thtd.att;
+ %cellhalign.att;
+ %cellvalign.att;>
+
+<!ELEMENT td (%p.pcd.mix;|%p.mix;)*>
+<!ATTLIST td
+ %common.att;
+ %thtd.att;
+ %cellhalign.att;
+ %cellvalign.att;>
+
+<!-- ............................................................... -->
+<!-- Phrase-level elements ......................................... -->
+
+<!-- bibref: Should generate, in square brackets, "key" on bibl -->
+<!ELEMENT bibref EMPTY>
+<!-- ref attribute:
+ A bibliography reference must link to the bibl element that
+ describes the resource. -->
+<!ATTLIST bibref
+ %common.att;
+ %ref-req.att;>
+
+<!ELEMENT code (%tech.pcd.mix;)*>
+<!ATTLIST code %common.att;>
+
+<!--
+#1998-03-10: maler: Declared ednote and related elements.
+-->
+
+<!ELEMENT ednote (name?, date?, edtext)>
+<!ATTLIST ednote %common.att;>
+
+<!ELEMENT date (#PCDATA)>
+<!ATTLIST date %common.att;>
+
+<!ELEMENT edtext (#PCDATA)>
+<!ATTLIST edtext %common.att;>
+
+<!ELEMENT emph (#PCDATA)>
+<!ATTLIST emph %common.att;>
+
+<!-- footnote: Both footnote content and call to footnote -->
+<!ELEMENT footnote (%obj.mix;)+>
+<!ATTLIST footnote %common.att;>
+
+<!ELEMENT kw (%tech.pcd.mix;)*>
+<!ATTLIST kw %common.att;>
+
+<!ELEMENT loc (#PCDATA)>
+<!-- HREF attribute:
+ The purpose of a loc element is to function as a hypertext
+ link to a resource. (Ideally, the content of loc will also
+ mention the URI of the resource, so that readers of the
+ printed version will be able to locate the resource.) -->
+<!ATTLIST loc
+ %common.att;
+ %href-req.att;>
+
+<!ELEMENT nt (#PCDATA)>
+<!-- def attribute:
+ The nonterminal must link to the production that defines
+ it. -->
+<!ATTLIST nt
+ %common.att;
+ %def-req.att;>
+
+<!--
+#1998-03-10: maler: Declared quote.
+-->
+
+<!-- quote: Scare quotes and other purely presentational quotes -->
+<!ELEMENT quote (%p.pcd.mix;)*>
+<!ATTLIST quote %common.att;>
+
+<!-- specref: Should generate italic "[n.n], Section Title" for
+ div, "n" for numbered item, "[n]" for production, or
+ "Issue n" for issue -->
+<!ELEMENT specref EMPTY>
+<!-- ref attribute:
+ The purpose of a specref element is to link to a div, item
+ in an olist, or production in the current spec. -->
+<!ATTLIST specref
+ %common.att;
+ %ref-req.att;>
+
+<!ELEMENT term (#PCDATA)>
+<!ATTLIST term %common.att;>
+
+<!ELEMENT termdef (%termdef.pcd.mix;|%termdef.mix;)*>
+<!-- ID attribute:
+ A term definition must have an ID so that it can be linked
+ to from termref elements. -->
+<!-- term attribute:
+ The canonical form of the term or phrase being defined must
+ appear in this attribute, even if the term or phrase also
+ appears in the element content in identical form (e.g., in
+ the term element). -->
+<!ATTLIST termdef
+ %common-idreq.att;
+ term CDATA #REQUIRED>
+
+<!ELEMENT termref (#PCDATA)>
+<!-- ref attribute:
+ A term reference must link to the termdef element that
+ defines the term. -->
+<!ATTLIST termref
+ %common.att;
+ %def-req.att;>
+
+<!ELEMENT titleref (#PCDATA)>
+<!-- HREF attribute:
+ A title reference can optionally function as a hypertext
+ link to the resource with this title. -->
+<!ATTLIST titleref
+ %common.att;
+ %href.att;>
+
+<!ELEMENT xnt (#PCDATA)>
+<!-- HREF attribute:
+ The nonterminal must hyperlink to a resource that serves
+ to define it (e.g., a production in a related XML
+ specification). -->
+<!ATTLIST xnt
+ %common.att;
+ %href-req.att;>
+
+<!--
+#1997-12-29: maler: Declared xspecref.
+-->
+
+<!ELEMENT xspecref (#PCDATA)>
+<!-- HREF attribute:
+ The spec reference must hyperlink to the resource to
+ cross-refer to (e.g., a section in a related XML
+ specification). -->
+<!ATTLIST xspecref
+ %common.att;
+ %href-req.att;>
+
+<!ELEMENT xtermref (#PCDATA)>
+<!-- HREF attribute:
+ The term reference must hyperlink to the resource that
+ serves to define the term (e.g., a term definition in
+ a related XML specification). -->
+<!ATTLIST xtermref
+ %common.att;
+ %href-req.att;>
+
+<!-- ............................................................... -->
+<!-- Unused elements for ADEPT ..................................... -->
+
+<!--
+#1997-09-30: maler: Added unusued elements.
+#1997-10-14: maler: Fixed div to move nested div to the mixture.
+#1998-05-14: maler: Added key-term, htable, and htbody.
+-->
+
+<!-- The following elements are purposely declared but never
+ referenced. Declaring them allows them to be pasted from
+ an HTML document or an earlier version of an XML spec document
+ into a document using this DTD in ADEPT. The ATD Context
+ Transformation mechanism will try to convert them to the
+ appropriate element for this DTD. While this conversion
+ will not work for all fragments, it does allow many cases
+ to work reasonably well. -->
+
+<!ELEMENT div
+ (head?, (%div.mix;|ul|ol|h1|h2|h3|h4|h5|h6|div)*)>
+<!ELEMENT h1 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h2 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h3 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h4 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h5 (%head.pcd.mix;|em|a)*>
+<!ELEMENT h6 (%head.pcd.mix;|em|a)*>
+<!ELEMENT pre (%eg.pcd.mix;|em)*>
+<!ELEMENT ul (item|li)*>
+<!ELEMENT ol (item|li)*>
+<!ELEMENT li (#PCDATA|%obj.mix;)*>
+<!ELEMENT em (#PCDATA)>
+<!ELEMENT a (#PCDATA)>
+
+<!ELEMENT key-term (#PCDATA)>
+<!ELEMENT htable
+ (caption?, (col*|colgroup*), thead?, tfoot?, tbody+)>
+<!ELEMENT htbody (tr)+>
+<!ELEMENT statusp (%p.pcd.mix;|%p.mix;)*>
+
+<!-- ............................................................... -->
+<!-- Change history ................................................ -->
+
+<!--
+#1997-08-18: maler
+#- Did a major revision.
+#1997-09-10: maler
+#- Updated FPI.
+#- Removed namekey element and put key attribute on name element.
+#- Made statusp element and supporting entities.
+#- Added slist element with sitem+ content.
+#- Required head on scrap and added new bnf subelement.
+#- Added an xnt element and allowed it and nt in regular text and rhs.
+#- Removed the ntref element.
+#- Added back the com element to the content of rhs.
+#- Added a key attribute to bibl.
+#- Removed the ident element.
+#- Added a term element to be used inside termdef.
+#- Added an xtermref element parallel to termref.
+#- Beefed up DTD comments.
+#1997-09-12: maler
+#- Allowed term element in general text.
+#- Changed bibref to EMPTY.
+#- Added ref.class to termdef.pcd.mix.
+#1997-09-14: maler
+#- Changed main attribute of xtermref from def to href.
+#- Added termdef.class to label contents.
+#1997-09-30: maler
+#- Added character entity module and added new entities.
+#- Removed p from appearing directly in self; created %p.mix;.
+#- Added inform-div (non-normative division) element.
+#- Fixed xtermref comment to mention HREF, not ref.
+#- Extended orglist model to allow optional affiliation.
+#- Modified author to make affiliation optional.
+#- Added %speclist.class; and %note.class; to %obj.mix; and %p.mix;.
+#- Added %note.class; and %illus.class; to %termdef.pcd.mix;.
+#- Added unused HTML elements.
+#- Put empty system ID next to public ID in entity declarations.
+#1997-10-14: maler
+#- Fixed "unused" div content model to move nested div to mixture.
+#1997-10-16: maler
+#- Added SGML Open Exchange tables.
+#1997-11-28: maler
+#- Added support for prodgroup and its attributes.
+#- Added support for HTML tables.
+#- Added loc and bibref to content of com.
+#- Added loc to general p content models.
+#- Allowed p as alternative to statusp in status.
+#- Added non-null system IDs to external parameter entity declarations.
+#- (Modified the SGML Open table module to make it XML-compliant.)
+#- (Modified the character entity module.)
+#1997-12-29: maler
+#- Moved #PCDATA occurrences to come before GIs in content models.
+#- Removed use of the SGML Open table module.
+#- Added xspecref element.
+#- Ensured that all FPIs contain 4-digit year.
+#- (Modified the character entity module.)
+#1998-03-10: maler
+#- Merged the character entity and table modules into the main file.
+#- Added ldquo and rdquo entities.
+#- Added common attributes to prodgroup.
+#- Made the email element in header optional.
+#- Removed reference to the SGML Open table model.
+#- Added ednote element.
+#- Added quote element.
+#- Updated XLink usage to reflect 3 March 1998 WD.
+#- Added "local" entities to the class entities for customization.
+#- Parameterized several content models to allow for customization.
+#1998-03-23: maler
+#- Cleaned up some comments and removed some others.
+#- Added xml:space semi-common attribute to eg and bnf elements.
+#- Added show and embed attributes on all the uses of href.
+#- Added %common.att; to all HTML table elements.
+#- Added a real URI to the "typical invocation" comment.
+#1998-05-14: maler
+#- Fixed mdash, ldquo, and rdquo character entities.
+#- Switched to the full HTML 4.0 table model.
+#- Removed htable/htbody elements and replaced them with table/tbody.
+#- Added issue element to %note.class; and declared it.
+#- Allowed prevlocs and latestloc in either order.
+#- Added key-term, htable, htbody, and statusp as unused elements.
+#- Removed real statusp element in favor of plain p.
+#1998-05-21: maler
+#- Declared generic constraint and constraintnote elements.
+#- Added constraintnote to %note.class;.
+#- Added constraint to %eg.pcd.mix; and prod content model.
+-->
+
+<!-- ............................................................... -->
+<!-- End of XML specification DTD .................................. -->
+<!-- ............................................................... --> \ No newline at end of file
diff --git a/test/valid/id1.xml b/test/valid/id1.xml
new file mode 100644
index 0000000..7390f5e
--- /dev/null
+++ b/test/valid/id1.xml
@@ -0,0 +1,13 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (src | dest)*>
+<!ELEMENT src EMPTY>
+<!ELEMENT dest EMPTY>
+<!ATTLIST src ref IDREF #IMPLIED>
+<!ATTLIST dest id ID #IMPLIED>
+]>
+<doc>
+ <src ref="foo"/>
+ <dest id="foo"/>
+ <src ref="foo"/>
+</doc>
+
diff --git a/test/valid/id2.xml b/test/valid/id2.xml
new file mode 100644
index 0000000..5b4a77a
--- /dev/null
+++ b/test/valid/id2.xml
@@ -0,0 +1,14 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (src | dest)*>
+<!ELEMENT src EMPTY>
+<!ELEMENT dest EMPTY>
+<!ATTLIST src ref IDREF #IMPLIED>
+<!ATTLIST dest id ID #IMPLIED>
+<!ENTITY dest "<dest id='foo'/>">
+]>
+<doc>
+ <src ref="foo"/>
+ &dest;
+ <src ref="foo"/>
+</doc>
+
diff --git a/test/valid/id3.xml b/test/valid/id3.xml
new file mode 100644
index 0000000..933d06d
--- /dev/null
+++ b/test/valid/id3.xml
@@ -0,0 +1,14 @@
+<!DOCTYPE doc [
+<!ELEMENT doc (src | dest)*>
+<!ELEMENT src EMPTY>
+<!ELEMENT dest EMPTY>
+<!ATTLIST src ref IDREF #IMPLIED>
+<!ATTLIST dest id ID #IMPLIED>
+<!ENTITY dest SYSTEM "dtds/destfoo.ent">
+]>
+<doc>
+ <src ref="foo"/>
+ &dest;
+ <src ref="foo"/>
+</doc>
+
diff --git a/test/valid/index.xml b/test/valid/index.xml
new file mode 100644
index 0000000..2a0e671
--- /dev/null
+++ b/test/valid/index.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE NewsML PUBLIC "urn:newsml:iptc.org:20001006:NewsMLv1.0:1" "dtds/NewsMLv1.0.dtd" [
+ <!ENTITY % nitf SYSTEM "dtds/nitf-2-5.dtd">
+ %nitf;
+]>
+<NewsML>
+ <Catalog Href="http://www.afp.com/dtd/AFPCatalog.xml"/>
+ <NewsEnvelope>
+ <DateAndTime>20011022T154508Z</DateAndTime>
+ </NewsEnvelope>
+ <NewsItem>
+ <Identification>
+ <NewsIdentifier>
+ <ProviderId>afp.com</ProviderId>
+ <DateId>20011022</DateId>
+ <NewsItemId>mmd--deutsch--journal--spo</NewsItemId>
+ <RevisionId PreviousRevision="0" Update="N">1</RevisionId>
+ <PublicIdentifier>urn:NewsML:afp.com:20011022:mmd--deutsch--journal--spo:1</PublicIdentifier>
+ </NewsIdentifier>
+ <NameLabel>HINTERGRUND</NameLabel>
+ </Identification>
+ <NewsManagement>
+ <NewsItemType FormalName="News"/>
+ <FirstCreated>20011022T154508Z</FirstCreated>
+ <ThisRevisionCreated>20011022T154508Z</ThisRevisionCreated>
+ <Status FormalName="Usable"/>
+ </NewsManagement>
+ <NewsComponent>
+ <AdministrativeMetadata>
+ <Provider>
+ <Party FormalName="AFP"/>
+ </Provider>
+ </AdministrativeMetadata>
+ <DescriptiveMetadata>
+ <Language FormalName="de"/>
+ </DescriptiveMetadata>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Berliner SPD führt Gespräche mit FDP und Grünen</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022154450.sq80bp9h.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>INFOGRAFIK: Das Berliner Wahlergebnis</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022113032.remo00m7.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Schwierige Koalitionsverhandlungen in Berlin</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022124314.9hv2kozk.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Die Lieblingsfarben des Kanzlers sind Rot Gelb Grün</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022134541.cmmaoim7.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>INFOGRAFIK: Wen wählt Wowereit?</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022122545.hl3z2as6.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>CDU ist auch in kommunalen Rathäusern der Verlierer</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022120205.b8sykfvu.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Gutes Abschneiden der PDS hat verschiedene Gründe</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011022134159.agvne048.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Ans Regieren hat sich Klaus Wowereit gewöhnt</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021161031.1oq7qyub.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Steffel brachte CDU nicht auf Erfolgskurs</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021165007.kt9qog9m.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Sibyll Klotz: Vollblutpolitikerin mit "Berliner Schnauze"</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021184658.lctevest.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Mit Gysi muss weiter gerechnet werden</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021180441.6tpvgx0y.xml"/>
+ </NewsComponent>
+ <NewsComponent>
+ <NewsLines>
+ <HeadLine>Rexrodt - das Stehaufmännchen der Berliner FDP</HeadLine>
+ </NewsLines>
+ <NewsItemRef NewsItem="011021165558.gujrz59m.xml"/>
+ </NewsComponent>
+ </NewsComponent>
+ </NewsItem>
+</NewsML>
diff --git a/test/valid/mixed_ns.xml b/test/valid/mixed_ns.xml
new file mode 100644
index 0000000..22d8ed8
--- /dev/null
+++ b/test/valid/mixed_ns.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE a [
+<!ELEMENT a (#PCDATA|b|s:b)*>
+<!ATTLIST a xmlns:s CDATA #IMPLIED>
+<!ELEMENT b EMPTY>
+<!ATTLIST b xmlns:s CDATA #IMPLIED>
+<!ELEMENT s:b EMPTY>
+<!ATTLIST s:b xmlns:s CDATA #IMPLIED>
+]>
+<a xmlns:s="http://some.test.ns/a">
+ Some text.
+ <b/>
+ Some text.
+ <s:b/>
+ Some text.
+</a>
diff --git a/test/valid/ns.xml b/test/valid/ns.xml
new file mode 100644
index 0000000..117c30f
--- /dev/null
+++ b/test/valid/ns.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE a:outer [
+
+<!ELEMENT a:outer EMPTY>
+<!ATTLIST a:outer xmlns:a CDATA #FIXED 'urn:namespace'>
+<!ATTLIST a:outer xmlns:b CDATA #FIXED 'urn:namespaceb'>
+]>
+
+<a:outer />
diff --git a/test/valid/ns2.xml b/test/valid/ns2.xml
new file mode 100644
index 0000000..bfab69a
--- /dev/null
+++ b/test/valid/ns2.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE a:outer [
+
+<!ELEMENT a:outer (a:inner)>
+<!ATTLIST a:outer xmlns:a CDATA #FIXED 'urn:namespace'>
+
+<!ELEMENT a:inner EMPTY>
+<!ATTLIST a:inner xmlns:a CDATA #FIXED 'urn:namespace'>
+<!ATTLIST a:inner attr CDATA #FIXED 'yes'>
+]>
+
+<a:outer xmlns:a="urn:namespace">
+ <a:inner />
+</a:outer>
diff --git a/test/valid/rss.xml b/test/valid/rss.xml
new file mode 100644
index 0000000..5d6102d
--- /dev/null
+++ b/test/valid/rss.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE rss [
+<!--
+
+ Rich Site Summary (RSS) 0.91 official DTD, proposed.
+
+ RSS is an XML vocabulary for describing
+ metadata about websites, and enabling the display of
+ "channels" on the "My Netscape" website.
+
+ RSS Info can be found at http://my.netscape.com/publish/
+ XML Info can be found at http://www.w3.org/XML/
+
+ copyright Netscape Communications, 1999
+
+ Dan Libby - danda@netscape.com
+
+ Based on RSS DTD originally created by
+ Lars Marius Garshol - larsga@ifi.uio.no.
+
+-->
+<!ELEMENT rss (channel)>
+<!ATTLIST rss version CDATA #REQUIRED>
+<!-- must be "0.91"> --><!ELEMENT channel (title | description | link
+| language | item+ | rating? | image? | textinput? | copyright? |
+pubDate? | lastBuildDate? | docs? | managingEditor? | webMaster? |
+skipHours? | skipDays?)*>
+<!ELEMENT title (#PCDATA)>
+<!ELEMENT description (#PCDATA)>
+<!ELEMENT link (#PCDATA)>
+<!ELEMENT image (title | url | link | width? | height? | description?)*>
+<!ELEMENT url (#PCDATA)>
+<!ELEMENT item (title | link | description)*>
+<!ELEMENT textinput (title | description | name | link)*>
+<!ELEMENT name (#PCDATA)>
+<!ELEMENT rating (#PCDATA)>
+<!ELEMENT language (#PCDATA)>
+<!ELEMENT width (#PCDATA)>
+<!ELEMENT height (#PCDATA)>
+<!ELEMENT copyright (#PCDATA)>
+<!ELEMENT pubDate (#PCDATA)>
+<!ELEMENT lastBuildDate (#PCDATA)>
+<!ELEMENT docs (#PCDATA)>
+<!ELEMENT managingEditor (#PCDATA)>
+<!ELEMENT webMaster (#PCDATA)>
+<!ELEMENT hour (#PCDATA)>
+<!ELEMENT day (#PCDATA)>
+<!ELEMENT skipHours (hour)+>
+<!ELEMENT skipDays (day)+>
+<!--
+ Copied from HTML 3.2 DTD, with modifications (removed CDATA)
+ http://www.w3.org/TR/REC-html32.html#dtd
+ =============== BEGIN ===================
+-->
+<!--
+ Character Entities for ISO Latin-1
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+ This has been extended for use with HTML to cover the full
+ set of codes in the range 160-255 decimal.
+-->
+<!-- Character entity set. Typical invocation:
+ <!ENTITY % ISOlat1 PUBLIC
+ "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML">
+ %ISOlat1;
+-->
+<!ENTITY nbsp "&#160;"> <!-- no-break space -->
+<!ENTITY iexcl "&#161;">
+<!-- inverted exclamation mark --><!ENTITY cent "&#162;">
+<!-- cent sign --><!ENTITY pound "&#163;">
+<!-- pound sterling sign --><!ENTITY curren "&#164;">
+<!-- general currency sign --><!ENTITY yen "&#165;">
+<!-- yen sign --><!ENTITY brvbar "&#166;">
+<!-- broken (vertical) bar --><!ENTITY sect "&#167;">
+<!-- section sign --><!ENTITY uml "&#168;">
+<!-- umlaut (dieresis) --><!ENTITY copy "&#169;">
+<!-- copyright sign --><!ENTITY ordf "&#170;">
+<!-- ordinal indicator, feminine --><!ENTITY laquo "&#171;">
+<!-- angle quotation mark, left --><!ENTITY not "&#172;">
+<!-- not sign --><!ENTITY shy "&#173;">
+<!-- soft hyphen --><!ENTITY reg "&#174;">
+<!-- registered sign --><!ENTITY macr "&#175;">
+<!-- macron --><!ENTITY deg "&#176;">
+<!-- degree sign --><!ENTITY plusmn "&#177;">
+<!-- plus-or-minus sign --><!ENTITY sup2 "&#178;">
+<!-- superscript two --><!ENTITY sup3 "&#179;">
+<!-- superscript three --><!ENTITY acute "&#180;">
+<!-- acute accent --><!ENTITY micro "&#181;">
+<!-- micro sign --><!ENTITY para "&#182;">
+<!-- pilcrow (paragraph sign) --><!ENTITY middot "&#183;">
+<!-- middle dot --><!ENTITY cedil "&#184;">
+<!-- cedilla --><!ENTITY sup1 "&#185;">
+<!-- superscript one --><!ENTITY ordm "&#186;">
+<!-- ordinal indicator, masculine --><!ENTITY raquo "&#187;">
+<!-- angle quotation mark, right --><!ENTITY frac14 "&#188;">
+<!-- fraction one-quarter --><!ENTITY frac12 "&#189;">
+<!-- fraction one-half --><!ENTITY frac34 "&#190;">
+<!-- fraction three-quarters --><!ENTITY iquest "&#191;">
+<!-- inverted question mark --><!ENTITY Agrave "&#192;">
+<!-- capital A, grave accent --><!ENTITY Aacute "&#193;">
+<!-- capital A, acute accent --><!ENTITY Acirc "&#194;">
+<!-- capital A, circumflex accent --><!ENTITY Atilde "&#195;">
+<!-- capital A, tilde --><!ENTITY Auml "&#196;">
+<!-- capital A, dieresis or umlaut mark --><!ENTITY Aring "&#197;">
+<!-- capital A, ring --><!ENTITY AElig "&#198;">
+<!-- capital AE diphthong (ligature) --><!ENTITY Ccedil "&#199;">
+<!-- capital C, cedilla --><!ENTITY Egrave "&#200;">
+<!-- capital E, grave accent --><!ENTITY Eacute "&#201;">
+<!-- capital E, acute accent --><!ENTITY Ecirc "&#202;">
+<!-- capital E, circumflex accent --><!ENTITY Euml "&#203;">
+<!-- capital E, dieresis or umlaut mark --><!ENTITY Igrave "&#204;">
+<!-- capital I, grave accent --><!ENTITY Iacute "&#205;">
+<!-- capital I, acute accent --><!ENTITY Icirc "&#206;">
+<!-- capital I, circumflex accent --><!ENTITY Iuml "&#207;">
+<!-- capital I, dieresis or umlaut mark --><!ENTITY ETH "&#208;">
+<!-- capital Eth, Icelandic --><!ENTITY Ntilde "&#209;">
+<!-- capital N, tilde --><!ENTITY Ograve "&#210;">
+<!-- capital O, grave accent --><!ENTITY Oacute "&#211;">
+<!-- capital O, acute accent --><!ENTITY Ocirc "&#212;">
+<!-- capital O, circumflex accent --><!ENTITY Otilde "&#213;">
+<!-- capital O, tilde --><!ENTITY Ouml "&#214;">
+<!-- capital O, dieresis or umlaut mark --><!ENTITY times "&#215;">
+<!-- multiply sign --><!ENTITY Oslash "&#216;">
+<!-- capital O, slash --><!ENTITY Ugrave "&#217;">
+<!-- capital U, grave accent --><!ENTITY Uacute "&#218;">
+<!-- capital U, acute accent --><!ENTITY Ucirc "&#219;">
+<!-- capital U, circumflex accent --><!ENTITY Uuml "&#220;">
+<!-- capital U, dieresis or umlaut mark --><!ENTITY Yacute "&#221;">
+<!-- capital Y, acute accent --><!ENTITY THORN "&#222;">
+<!-- capital THORN, Icelandic --><!ENTITY szlig "&#223;">
+<!-- small sharp s, German (sz ligature) --><!ENTITY agrave "&#224;">
+<!-- small a, grave accent --><!ENTITY aacute "&#225;">
+<!-- small a, acute accent --><!ENTITY acirc "&#226;">
+<!-- small a, circumflex accent --><!ENTITY atilde "&#227;">
+<!-- small a, tilde --><!ENTITY auml "&#228;">
+<!-- small a, dieresis or umlaut mark --><!ENTITY aring "&#229;">
+<!-- small a, ring --><!ENTITY aelig "&#230;">
+<!-- small ae diphthong (ligature) --><!ENTITY ccedil "&#231;">
+<!-- small c, cedilla --><!ENTITY egrave "&#232;">
+<!-- small e, grave accent --><!ENTITY eacute "&#233;">
+<!-- small e, acute accent --><!ENTITY ecirc "&#234;">
+<!-- small e, circumflex accent --><!ENTITY euml "&#235;">
+<!-- small e, dieresis or umlaut mark --><!ENTITY igrave "&#236;">
+<!-- small i, grave accent --><!ENTITY iacute "&#237;">
+<!-- small i, acute accent --><!ENTITY icirc "&#238;">
+<!-- small i, circumflex accent --><!ENTITY iuml "&#239;">
+<!-- small i, dieresis or umlaut mark --><!ENTITY eth "&#240;">
+<!-- small eth, Icelandic --><!ENTITY ntilde "&#241;">
+<!-- small n, tilde --><!ENTITY ograve "&#242;">
+<!-- small o, grave accent --><!ENTITY oacute "&#243;">
+<!-- small o, acute accent --><!ENTITY ocirc "&#244;">
+<!-- small o, circumflex accent --><!ENTITY otilde "&#245;">
+<!-- small o, tilde --><!ENTITY ouml "&#246;">
+<!-- small o, dieresis or umlaut mark --><!ENTITY divide "&#247;">
+<!-- divide sign --><!ENTITY oslash "&#248;">
+<!-- small o, slash --><!ENTITY ugrave "&#249;">
+<!-- small u, grave accent --><!ENTITY uacute "&#250;">
+<!-- small u, acute accent --><!ENTITY ucirc "&#251;">
+<!-- small u, circumflex accent --><!ENTITY uuml "&#252;">
+<!-- small u, dieresis or umlaut mark --><!ENTITY yacute "&#253;">
+<!-- small y, acute accent --><!ENTITY thorn "&#254;">
+<!-- small thorn, Icelandic --><!ENTITY yuml "&#255;">
+<!-- small y, dieresis or umlaut mark --><!--
+ Copied from HTML 3.2 DTD, with modifications (removed CDATA)
+ http://www.w3.org/TR/REC-html32.html#dtd
+ ================= END ===================
+-->
+]>
+<rss>
+<channel>
+<image/>
+<title>PP</title>
+</channel>
+</rss>
diff --git a/test/valid/t4.dtd b/test/valid/t4.dtd
new file mode 100644
index 0000000..27292bc
--- /dev/null
+++ b/test/valid/t4.dtd
@@ -0,0 +1,4 @@
+<!ENTITY % percent "&#x25;">
+<!ENTITY %percent; def "ghi">
+<!ENTITY abc "%def;">
+<!ELEMENT root (#PCDATA)>
diff --git a/test/valid/t4.xml b/test/valid/t4.xml
new file mode 100644
index 0000000..baeb9d0
--- /dev/null
+++ b/test/valid/t4.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<!DOCTYPE root SYSTEM 't4.dtd'>
+<root>&abc;</root>
diff --git a/test/valid/t4a.dtd b/test/valid/t4a.dtd
new file mode 100644
index 0000000..b7cdc7c
--- /dev/null
+++ b/test/valid/t4a.dtd
@@ -0,0 +1,5 @@
+<!ENTITY % percent "&#x25;">
+<!ENTITY%percent;def "ghi">
+<!ENTITY abc "%def;">
+<!ELEMENT root (#PCDATA)>
+
diff --git a/test/valid/t4a.xml b/test/valid/t4a.xml
new file mode 100644
index 0000000..27fa603
--- /dev/null
+++ b/test/valid/t4a.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<!DOCTYPE root SYSTEM 't4a.dtd'>
+<root>&abc;</root>
diff --git a/test/valid/t6.dtd b/test/valid/t6.dtd
new file mode 100644
index 0000000..7497c28
--- /dev/null
+++ b/test/valid/t6.dtd
@@ -0,0 +1,5 @@
+<!ENTITY % xdef "def">
+<!ENTITY % %xdef; "ghi">
+<!ENTITY abc "%def;">
+<!ELEMENT root (#PCDATA)>
+
diff --git a/test/valid/t6.xml b/test/valid/t6.xml
new file mode 100644
index 0000000..b9f62ca
--- /dev/null
+++ b/test/valid/t6.xml
@@ -0,0 +1,3 @@
+<?xml version='1.0'?>
+<!DOCTYPE root SYSTEM 't6.dtd'>
+<root>&abc;</root>
diff --git a/test/valid/t8.xml b/test/valid/t8.xml
new file mode 100644
index 0000000..c7c2b0a
--- /dev/null
+++ b/test/valid/t8.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<!DOCTYPE root [
+<!ENTITY % deftest '&lt;!ELEMENT test (#PCDATA) >' >
+<!ENTITY % defmiddle '&lt;!ELEMENT middle (test) >' >
+<!ENTITY % defroot '&lt;!ELEMENT root (middle) >' >
+%defroot; %defmiddle; %deftest;
+]>
+<root><middle><test>sample</test></middle></root>
diff --git a/test/valid/t8a.xml b/test/valid/t8a.xml
new file mode 100644
index 0000000..13470eb
--- /dev/null
+++ b/test/valid/t8a.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<!DOCTYPE root [
+<!ENTITY % deftest '&lt;!ELEMENT test (#PCDATA) >' >
+<!ENTITY % defmiddle '&lt;!ELEMENT middle (test) >' >
+<!ENTITY % defroot '&lt;!ELEMENT root (middle) >' >
+%defroot;%defmiddle;%deftest;
+]>
+<root><middle><test>sample</test></middle></root>
diff --git a/test/valid/t9.xml b/test/valid/t9.xml
new file mode 100644
index 0000000..645d35a
--- /dev/null
+++ b/test/valid/t9.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<!DOCTYPE root [
+<!ENTITY % deftest '&#60;!ELEMENT test (#PCDATA) >' >
+<!ENTITY % defmiddle '&#60;!ELEMENT middle (test) >' >
+<!ENTITY % defroot '&#60;!ELEMENT root (middle) >' >
+%defroot; %defmiddle; %deftest;
+]>
+<root><middle><test>sample</test></middle></root>
diff --git a/test/valid/t9a.xml b/test/valid/t9a.xml
new file mode 100644
index 0000000..23d3c06
--- /dev/null
+++ b/test/valid/t9a.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<!DOCTYPE root [
+<!ENTITY % deftest '&#60;!ELEMENT test (#PCDATA) >' >
+<!ENTITY % defmiddle '&#60;!ELEMENT middle (test) >' >
+<!ENTITY % defroot '&#60;!ELEMENT root (middle) >' >
+%defroot;%defmiddle;%deftest;
+]>
+<root><middle><test>sample</test></middle></root>
diff --git a/test/valid/xhtml1.xhtml b/test/valid/xhtml1.xhtml
new file mode 100644
index 0000000..24d68f4
--- /dev/null
+++ b/test/valid/xhtml1.xhtml
@@ -0,0 +1,1505 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "dtds/xhtml1-strict.dtd">
+<?xml-stylesheet href="W3C-PR.css" type="text/css"?>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<title>XHTML 1.0: The Extensible HyperText Markup
+Language</title>
+<link rel="stylesheet"
+href="W3C-PR.css" type="text/css" />
+<style type="text/css">
+span.term { font-style: italic; color: rgb(0, 0, 192) }
+code {
+ color: green;
+ font-family: monospace;
+ font-weight: bold;
+}
+
+code.greenmono {
+ color: green;
+ font-family: monospace;
+ font-weight: bold;
+}
+.good {
+ border: solid green;
+ border-width: 2px;
+ color: green;
+ font-weight: bold;
+ margin-right: 5%;
+ margin-left: 0;
+}
+.bad {
+ border: solid red;
+ border-width: 2px;
+ margin-left: 0;
+ margin-right: 5%;
+ color: rgb(192, 101, 101);
+}
+
+img {
+ color: white;
+ border: none;
+}
+
+div.navbar { text-align: center; }
+div.contents {
+ background-color: rgb(204,204,255);
+ padding: 0.5em;
+ border: none;
+ margin-right: 5%;
+}
+.tocline { list-style: none; }
+table.exceptions { background-color: rgb(255,255,153); }
+</style>
+</head>
+<body>
+<div class="navbar">
+ <a href="#toc">table of contents</a>
+ <hr />
+</div>
+<div class="head"><p><a href="http://www.w3.org/"><img class="head"
+src="w3c_home.gif" alt="W3C" /></a></p>
+
+<h1 class="head"><a name="title" id="title">XHTML</a><sup>&#8482;</sup> 1.0:
+The Extensible HyperText Markup Language</h1>
+
+<h2>A Reformulation of HTML 4.0 in XML 1.0</h2>
+
+<h3>W3C Proposed Recommendation 10 December 1999</h3>
+
+<dl>
+<dt>This version:</dt>
+
+<dd><a href=
+"http://www.w3.org/TR/1999/PR-xhtml1-19991210">
+http://www.w3.org/TR/1999/PR-xhtml1-19991210</a> <br />
+(<a href="xhtml1.ps">Postscript version</a>,
+<a href="xhtml1.pdf">PDF version</a>,
+<a href="xhtml1.zip">ZIP archive</a>, or
+<a href="xhtml1.tgz">Gzip'd TAR archive</a>)
+</dd>
+
+<dt>Latest version:</dt>
+
+<dd><a href="http://www.w3.org/TR/xhtml1">
+http://www.w3.org/TR/xhtml1</a></dd>
+
+<dt>Previous versions:</dt>
+
+<dd><a href=
+"http://www.w3.org/TR/1999/WD-xhtml1-19991124">
+http://www.w3.org/TR/1999/WD-xhtml1-19991124</a></dd>
+<dd><a href=
+"http://www.w3.org/TR/1999/PR-xhtml1-19990824">
+http://www.w3.org/TR/1999/PR-xhtml1-19990824</a></dd>
+
+<dt>Authors:</dt>
+
+<dd>See <a href="#acks">acknowledgements</a>.</dd>
+</dl>
+
+<p class="copyright"><a href=
+"http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+Copyright</a> &copy; 1999 <a href="http://www.w3.org/">W3C</a><sup>&reg;</sup>
+(<a href="http://www.lcs.mit.edu/">MIT</a>, <a href=
+"http://www.inria.fr/">INRIA</a>, <a href=
+"http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. <abbr
+title="World Wide Web Consortium">W3C</abbr> <a
+href=
+"http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">
+liability</a>, <a href=
+"http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">
+trademark</a>, <a href=
+"http://www.w3.org/Consortium/Legal/copyright-documents">document
+use</a> and <a href=
+"http://www.w3.org/Consortium/Legal/copyright-software">software
+licensing</a> rules apply.</p>
+<hr />
+</div>
+
+<h2 class="notoc">Abstract</h2>
+
+<p>This specification defines <abbr title="Extensible Hypertext Markup
+Language">XHTML</abbr> 1.0, a reformulation of HTML
+4.0 as an XML 1.0 application, and three <abbr title="Document Type
+Definition">DTDs</abbr> corresponding to
+the ones defined by HTML 4.0. The semantics of the elements and
+their attributes are defined in the W3C Recommendation for HTML
+4.0. These semantics provide the foundation for future
+extensibility of XHTML. Compatibility with existing HTML user
+agents is possible by following a small set of guidelines.</p>
+
+<h2>Status of this document</h2>
+
+<p><em>This section describes the status of this document at the time
+of its publication. Other documents may supersede this document. The
+latest status of this document series is maintained at the W3C.</em></p>
+
+<p>This specification is a Proposed Recommendation of the HTML Working Group. It is
+a revision of the Proposed Recommendation dated <a
+href= "http://www.w3.org/TR/1999/PR-xhtml1-19990824/">24 August
+1999</a> incorporating changes as a result of comments from the Proposed
+Recommendation review, and
+comments and further deliberations of the W3C HTML Working Group. A
+<a href="xhtml1-diff-19991210.html">diff-marked version</a> from the previous
+proposed recommendation is available for comparison purposes.</p>
+
+<p>On 10 December 1999, this document enters a
+<a href="http://www.w3.org/Consortium/Process/#RecsPR">
+Proposed Recommendation</a> review period. From that date until 8 January
+2000,
+W3C Advisory Committee representatives are encouraged
+to review this specification and return comments in their completed
+ballots to w3c-html-review@w3.org. Please send any comments of a
+confidential nature in separate email to w3t-html@w3.org, which is
+visible to the Team only.</p>
+
+<p>No sooner than 14 days after the end of the review period, the
+Director will announce the document's disposition: it may become a W3C
+Recommendation (possibly with minor changes), it may revert to Working
+Draft status, or it may be dropped as a W3C work item.</p>
+
+<p>Publication as a Proposed Recommendation does not imply endorsement
+by the W3C membership. This is still a draft document and may be
+updated, replaced or obsoleted by other documents at any time. It is
+inappropriate to cite W3C Proposed Recommendation as other than "work
+in progress."</p>
+
+<p>This document has been produced as part of the <a href=
+"http://www.w3.org/MarkUp/">W3C HTML Activity</a>. The goals of
+the <a href="http://www.w3.org/MarkUp/Group/">HTML Working
+Group</a> <i>(<a href="http://cgi.w3.org/MemberAccess/">members
+only</a>)</i> are discussed in the <a href=
+"http://www.w3.org/MarkUp/Group/HTMLcharter">HTML Working Group
+charter</a> <i>(<a href="http://cgi.w3.org/MemberAccess/">members
+only</a>)</i>.</p>
+
+<p>A list of current W3C Recommendations and other technical documents
+can be found at <a
+href="http://www.w3.org/TR">http://www.w3.org/TR</a>.</p>
+
+<p>Public discussion on <abbr title="HyperText Markup
+Language">HTML</abbr> features takes place on the mailing list <a
+href="mailto:www-html@w3.org"> www-html@w3.org</a> (<a href=
+"http://lists.w3.org/Archives/Public/www-html/">archive</a>). The W3C
+staff contact for work on HTML is <a href= "mailto:dsr@w3.org">Dave
+Raggett</a>.</p>
+
+<p>Please report errors in this document to <a
+href="mailto:www-html-editor@w3.org">www-html-editor@w3.org</a>.</p>
+
+<p>The list of known errors in this specification is available at <a
+href="http://www.w3.org/1999/12/PR-xhtml1-19991210-errata">http://www.w3.org/1999/12/PR-xhtml1-19991210-errata</a>.</p>
+
+<h2 class="notoc"><a id="toc" name="toc">Contents</a></h2>
+
+<div class="contents">
+<ul class="toc">
+<li class="tocline">1. <a href="#xhtml">What is XHTML?</a>
+
+<ul class="toc">
+<li class="tocline">1.1 <a href="#html4">What is HTML 4.0?</a></li>
+
+<li class="tocline">1.2 <a href="#xml">What is XML?</a></li>
+
+<li class="tocline">1.3 <a href="#why">Why the need for XHTML?</a></li>
+</ul>
+</li>
+
+<li class="tocline">2. <a href="#defs">Definitions</a>
+
+<ul class="toc">
+<li class="tocline">2.1 <a href="#terms">Terminology</a></li>
+
+<li class="tocline">2.2 <a href="#general">General Terms</a></li>
+</ul>
+</li>
+
+<li class="tocline">3. <a href="#normative">Normative Definition of XHTML 1.0</a>
+
+
+<ul class="toc">
+<li class="tocline">3.1 <a href="#docconf">Document Conformance</a></li>
+
+<li class="tocline">3.2 <a href="#uaconf">User Agent Conformance</a></li>
+</ul>
+</li>
+
+<li class="tocline">4. <a href="#diffs">Differences with HTML 4.0</a>
+
+</li>
+
+<li class="tocline">5. <a href="#issues">Compatibility Issues</a>
+
+<ul class="toc">
+<li class="tocline">5.1 <a href="#media">Internet Media Types</a></li>
+</ul>
+</li>
+
+<li class="tocline">6. <a href="#future">Future Directions</a>
+
+<ul class="toc">
+<li class="tocline">6.1 <a href="#mods">Modularizing HTML</a></li>
+
+<li class="tocline">6.2 <a href="#extensions">Subsets and Extensibility</a></li>
+
+<li class="tocline">6.3 <a href="#profiles">Document Profiles</a></li>
+</ul>
+</li>
+
+<li class="tocline"><a href="#dtds">Appendix A. DTDs</a></li>
+
+<li class="tocline"><a href="#prohibitions">Appendix B. Element
+Prohibitions</a></li>
+
+<li class="tocline"><a href="#guidelines">Appendix C. HTML Compatibility Guidelines</a></li>
+
+<li class="tocline"><a href="#acks">Appendix D. Acknowledgements</a></li>
+
+<li class="tocline"><a href="#refs">Appendix E. References</a></li>
+</ul>
+</div>
+
+<!--OddPage-->
+<h1><a name="xhtml" id="xhtml">1. What is XHTML?</a></h1>
+
+<p>XHTML is a family of current and future document types and modules that
+reproduce, subset, and extend HTML 4.0 <a href="#ref-html4">[HTML]</a>. XHTML family document types are <abbr title="Extensible Markup Language">XML</abbr> based,
+and ultimately are designed to work in conjunction with XML-based user agents.
+The details of this family and its evolution are
+discussed in more detail in the section on <a href="#future">Future
+Directions</a>. </p>
+
+<p>XHTML 1.0 (this specification) is the first document type in the XHTML
+family. It is a reformulation of the three HTML 4.0 document types as
+applications of XML 1.0 <a href="#ref-xml"> [XML]</a>. It is intended
+to be used as a language for content that is both XML-conforming and, if some
+simple <a href="#guidelines">guidelines</a> are followed,
+operates in HTML 4.0 conforming user agents. Developers who migrate
+their content to XHTML 1.0 will realize the following benefits:</p>
+
+<ul>
+<li>XHTML documents are XML conforming. As such, they are readily viewed,
+edited, and validated with standard XML tools.</li>
+<li>XHTML documents can be written to
+to operate as well or better than they did before in existing
+HTML 4.0-conforming user agents as well as in new, XHTML 1.0 conforming user
+agents.</li>
+<li>XHTML documents can utilize applications (e.g. scripts and applets) that rely
+upon either the HTML Document Object Model or the XML Document Object Model <a
+href="#ref-dom">[DOM]</a>.</li>
+<li>As the XHTML family evolves, documents conforming to XHTML 1.0 will be more
+likely to interoperate within and among various XHTML environments.</li>
+</ul>
+
+<p>The XHTML family is the next step in the evolution of the Internet. By
+migrating to XHTML today, content developers can enter the XML world with all
+of its attendant benefits, while still remaining confident in their
+content's backward and future compatibility.</p>
+
+<h2><a name="html4" id="html4">1.1 What is HTML 4.0?</a></h2>
+
+<p>HTML 4.0 <a href="#ref-html4">[HTML]</a> is an <abbr title="Standard
+Generalized Markup Language">SGML</abbr> (Standard
+Generalized Markup Language) application conforming to
+International Standard <abbr title="Organization for International
+Standardization">ISO</abbr> 8879, and is widely regarded as the
+standard publishing language of the World Wide Web.</p>
+
+<p>SGML is a language for describing markup languages,
+particularly those used in electronic document exchange, document
+management, and document publishing. HTML is an example of a
+language defined in SGML.</p>
+
+<p>SGML has been around since the middle 1980's and has remained
+quite stable. Much of this stability stems from the fact that the
+language is both feature-rich and flexible. This flexibility,
+however, comes at a price, and that price is a level of
+complexity that has inhibited its adoption in a diversity of
+environments, including the World Wide Web.</p>
+
+<p>HTML, as originally conceived, was to be a language for the
+exchange of scientific and other technical documents, suitable
+for use by non-document specialists. HTML addressed the problem
+of SGML complexity by specifying a small set of structural and
+semantic tags suitable for authoring relatively simple documents.
+In addition to simplifying the document structure, HTML added
+support for hypertext. Multimedia capabilities were added
+later.</p>
+
+<p>In a remarkably short space of time, HTML became wildly
+popular and rapidly outgrew its original purpose. Since HTML's
+inception, there has been rapid invention of new elements for use
+within HTML (as a standard) and for adapting HTML to vertical,
+highly specialized, markets. This plethora of new elements has
+led to compatibility problems for documents across different
+platforms.</p>
+
+<p>As the heterogeneity of both software and platforms rapidly
+proliferate, it is clear that the suitability of 'classic' HTML
+4.0 for use on these platforms is somewhat limited.</p>
+
+<h2><a name="xml" id="xml">1.2 What is XML?</a></h2>
+
+<p>XML<sup>&#8482;</sup> is the shorthand for Extensible Markup
+Language, and is an acronym of Extensible Markup Language <a
+href="#ref-xml">[XML]</a>.</p>
+
+<p>XML was conceived as a means of regaining the power and
+flexibility of SGML without most of its complexity. Although a
+restricted form of SGML, XML nonetheless preserves most of SGML's
+power and richness, and yet still retains all of SGML's commonly
+used features.</p>
+
+<p>While retaining these beneficial features, XML removes many of
+the more complex features of SGML that make the authoring and
+design of suitable software both difficult and costly.</p>
+
+<h2><a name="why" id="why">1.3 Why the need for XHTML?</a></h2>
+
+<p>The benefits of migrating to XHTML 1.0 are described above. Some of the
+benefits of migrating to XHTML in general are:</p>
+
+<ul>
+<li>Document developers and user agent designers are constantly
+discovering new ways to express their ideas through new markup. In XML, it is
+relatively easy to introduce new elements or additional element
+attributes. The XHTML family is designed to accommodate these extensions
+through XHTML modules and techniques for developing new XHTML-conforming
+modules (described in the forthcoming XHTML Modularization specification).
+These modules will permit the combination of existing and
+new feature sets when developing content and when designing new user
+agents.</li>
+
+<li>Alternate ways of accessing the Internet are constantly being
+introduced. Some estimates indicate that by the year 2002, 75% of
+Internet document viewing will be carried out on these alternate
+platforms. The XHTML family is designed with general user agent
+interoperability in mind. Through a new user agent and document profiling
+mechanism, servers, proxies, and user agents will be able to perform
+best effort content transformation. Ultimately, it will be possible to
+develop XHTML-conforming content that is usable by any XHTML-conforming
+user agent.</li>
+
+</ul>
+<!--OddPage-->
+<h1><a name="defs" id="defs">2. Definitions</a></h1>
+
+<h2><a name="terms" id="terms">2.1 Terminology</a></h2>
+
+<p>The following terms are used in this specification. These
+terms extend the definitions in <a href="#ref-rfc2119">
+[RFC2119]</a> in ways based upon similar definitions in ISO/<abbr
+title="International Electro-technical Commission">IEC</abbr>
+9945-1:1990 <a href="#ref-posix">[POSIX.1]</a>:</p>
+
+<dl>
+<dt>Implementation-defined</dt>
+
+<dd>A value or behavior is implementation-defined when it is left
+to the implementation to define [and document] the corresponding
+requirements for correct document construction.</dd>
+
+<dt>May</dt>
+
+<dd>With respect to implementations, the word "may" is to be
+interpreted as an optional feature that is not required in this
+specification but can be provided. With respect to <a href=
+"#docconf">Document Conformance</a>, the word "may" means that
+the optional feature must not be used. The term "optional" has
+the same definition as "may".</dd>
+
+<dt>Must</dt>
+
+<dd>In this specification, the word "must" is to be interpreted
+as a mandatory requirement on the implementation or on Strictly
+Conforming XHTML Documents, depending upon the context. The term
+"shall" has the same definition as "must".</dd>
+
+<dt>Reserved</dt>
+
+<dd>A value or behavior is unspecified, but it is not allowed to
+be used by Conforming Documents nor to be supported by a
+Conforming User Agents.</dd>
+
+<dt>Should</dt>
+
+<dd>With respect to implementations, the word "should" is to be
+interpreted as an implementation recommendation, but not a
+requirement. With respect to documents, the word "should" is to
+be interpreted as recommended programming practice for documents
+and a requirement for Strictly Conforming XHTML Documents.</dd>
+
+<dt>Supported</dt>
+
+<dd>Certain facilities in this specification are optional. If a
+facility is supported, it behaves as specified by this
+specification.</dd>
+
+<dt>Unspecified</dt>
+
+<dd>When a value or behavior is unspecified, the specification
+defines no portability requirements for a facility on an
+implementation even when faced with a document that uses the
+facility. A document that requires specific behavior in such an
+instance, rather than tolerating any behavior when using that
+facility, is not a Strictly Conforming XHTML Document.</dd>
+</dl>
+
+<h2><a name="general" id="general">2.2 General Terms</a></h2>
+
+<dl>
+<dt>Attribute</dt>
+
+<dd>An attribute is a parameter to an element declared in the
+DTD. An attribute's type and value range, including a possible
+default value, are defined in the DTD.</dd>
+
+<dt>DTD</dt>
+
+<dd>A DTD, or document type definition, is a collection of XML
+declarations that, as a collection, defines the legal structure,
+<span class="term">elements</span>, and <span class="term">
+attributes</span> that are available for use in a document that
+complies to the DTD.</dd>
+
+<dt>Document</dt>
+
+<dd>A document is a stream of data that, after being combined
+with any other streams it references, is structured such that it
+holds information contained within <span class="term">
+elements</span> that are organized as defined in the associated
+<span class="term">DTD</span>. See <a href="#docconf">Document
+Conformance</a> for more information.</dd>
+
+<dt>Element</dt>
+
+<dd>An element is a document structuring unit declared in the
+<span class="term">DTD</span>. The element's content model is
+defined in the <span class="term">DTD</span>, and additional
+semantics may be defined in the prose description of the
+element.</dd>
+
+<dt><a name="facilities" id="facilities">Facilities</a></dt>
+
+<dd>Functionality includes <span class="term">elements</span>,
+<span class="term">attributes</span>, and the semantics
+associated with those <span class="term">elements</span> and
+<span class="term">attributes</span>. An implementation
+supporting that functionality is said to provide the necessary
+facilities.</dd>
+
+<dt>Implementation</dt>
+
+<dd>An implementation is a system that provides collection of
+<span class="term">facilities</span> and services that supports
+this specification. See <a href="#uaconf">User Agent
+Conformance</a> for more information.</dd>
+
+<dt>Parsing</dt>
+
+<dd>Parsing is the act whereby a <span class="term">
+document</span> is scanned, and the information contained within
+the <span class="term">document</span> is filtered into the
+context of the <span class="term">elements</span> in which the
+information is structured.</dd>
+
+<dt>Rendering</dt>
+
+<dd>Rendering is the act whereby the information in a <span
+class="term">document</span> is presented. This presentation is
+done in the form most appropriate to the environment (e.g.
+aurally, visually, in print).</dd>
+
+<dt>User Agent</dt>
+
+<dd>A user agent is an <span class="term">implementation</span>
+that retrieves and processes XHTML documents. See <a href=
+"#uaconf">User Agent Conformance</a> for more information.</dd>
+
+<dt>Validation</dt>
+
+<dd>Validation is a process whereby <span class="term">
+documents</span> are verified against the associated <span class=
+"term">DTD</span>, ensuring that the structure, use of <span
+class="term">elements</span>, and use of <span class="term">
+attributes</span> are consistent with the definitions in the
+<span class="term">DTD</span>.</dd>
+
+<dt><a name="wellformed" id="wellformed">Well-formed</a></dt>
+
+<dd>A <span class="term">document</span> is well-formed when it
+is structured according to the rules defined in <a href=
+"http://www.w3.org/TR/REC-xml#sec-well-formed">Section 2.1</a> of
+the XML 1.0 Recommendation <a href="#ref-xml">[XML]</a>.
+Basically, this definition states that elements, delimited by
+their start and end tags, are nested properly within one
+another.</dd>
+</dl>
+
+<!--OddPage-->
+<h1><a name="normative" id="normative">3. Normative Definition of
+XHTML 1.0</a></h1>
+
+<h2><a name="docconf" id="docconf">3.1 Document
+Conformance</a></h2>
+
+<p>This version of XHTML provides a definition of strictly
+conforming XHTML documents, which are restricted to tags and
+attributes from the XHTML namespace. See <a href=
+"#well-formed">Section 3.1.2</a> for information on using XHTML
+with other namespaces, for instance, to include metadata
+expressed in <abbr title="Resource Description Format">RDF</abbr> within XHTML documents.</p>
+
+<h3><a name="strict" id="strict">3.1.1 Strictly Conforming
+Documents</a></h3>
+
+<p>A Strictly Conforming XHTML Document is a document that
+requires only the facilities described as mandatory in this
+specification. Such a document must meet all of the following
+criteria:</p>
+
+<ol>
+<li>
+<p>It must validate against one of the three DTDs found in <a
+href="#dtds">Appendix&#160;A</a>.</p>
+</li>
+
+<li>
+<p>The root element of the document must be <code>
+&lt;html&gt;</code>.</p>
+</li>
+
+<li>
+<p>The root element of the document must designate the XHTML
+namespace using the <code>xmlns</code> attribute <a href=
+"#ref-xmlns">[XMLNAMES]</a>. The namespace for XHTML is
+defined to be
+<code>http://www.w3.org/1999/xhtml</code>.</p>
+</li>
+
+<li>
+<p>There must be a DOCTYPE declaration in the document prior to
+the root element. The public identifier included in
+the DOCTYPE declaration must reference one of the three DTDs
+found in <a href="#dtds">Appendix&#160;A</a> using the respective
+Formal Public Identifier. The system identifier may be changed to reflect
+local system conventions.</p>
+
+<pre>
+&lt;!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-strict.dtd&gt;
+
+&lt;!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-transitional.dtd&gt;
+
+&lt;!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-frameset.dtd&gt;
+</pre>
+</li>
+</ol>
+
+<p>Here is an example of a minimal XHTML document.</p>
+
+<div class="good">
+<pre>
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-strict.dtd"&gt;
+&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
+ &lt;head&gt;
+ &lt;title&gt;Virtual Library&lt;/title&gt;
+ &lt;/head&gt;
+ &lt;body&gt;
+ &lt;p&gt;Moved to &lt;a href="http://vlib.org/"&gt;vlib.org&lt;/a&gt;.&lt;/p&gt;
+ &lt;/body&gt;
+&lt;/html&gt;</pre>
+</div>
+
+<p>Note that in this example, the XML declaration is included. An XML
+declaration like the one above is
+not required in all XML documents. XHTML document authors are strongly encouraged to use XML declarations in all their documents. Such a declaration is required
+when the character encoding of the document is other than the default UTF-8 or
+UTF-16.</p>
+
+<h3><a name="well-formed" id="well-formed">3.1.2 Using XHTML with
+other namespaces</a></h3>
+
+<p>The XHTML namespace may be used with other XML namespaces
+as per <a href="#ref-xmlns">[XMLNAMES]</a>, although such
+documents are not strictly conforming XHTML 1.0 documents as
+defined above. Future work by W3C will address ways to specify
+conformance for documents involving multiple namespaces.</p>
+
+<p>The following example shows the way in which XHTML 1.0 could
+be used in conjunction with the MathML Recommendation:</p>
+
+<div class="good">
+<pre>
+&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
+ &lt;head&gt;
+ &lt;title&gt;A Math Example&lt;/title&gt;
+ &lt;/head&gt;
+ &lt;body&gt;
+ &lt;p&gt;The following is MathML markup:&lt;/p&gt;
+ &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
+ &lt;apply&gt; &lt;log/&gt;
+ &lt;logbase&gt;
+ &lt;cn&gt; 3 &lt;/cn&gt;
+ &lt;/logbase&gt;
+ &lt;ci&gt; x &lt;/ci&gt;
+ &lt;/apply&gt;
+ &lt;/math&gt;
+ &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+</div>
+
+<p>The following example shows the way in which XHTML 1.0 markup
+could be incorporated into another XML namespace:</p>
+
+<div class="good">
+<pre>
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;!-- initially, the default namespace is "books" --&gt;
+&lt;book xmlns='urn:loc.gov:books'
+ xmlns:isbn='urn:ISBN:0-395-36341-6' xml:lang="en" lang="en"&gt;
+ &lt;title&gt;Cheaper by the Dozen&lt;/title&gt;
+ &lt;isbn:number&gt;1568491379&lt;/isbn:number&gt;
+ &lt;notes&gt;
+ &lt;!-- make HTML the default namespace for a hypertext commentary --&gt;
+ &lt;p xmlns='http://www.w3.org/1999/xhtml'&gt;
+ This is also available &lt;a href="http://www.w3.org/"&gt;online&lt;/a&gt;.
+ &lt;/p&gt;
+ &lt;/notes&gt;
+&lt;/book&gt;
+</pre>
+</div>
+
+<h2><a name="uaconf" id="uaconf">3.2 User Agent
+Conformance</a></h2>
+
+<p>A conforming user agent must meet all of the following
+criteria:</p>
+
+<ol>
+<li>In order to be consistent with the XML 1.0 Recommendation <a
+href="#ref-xml">[XML]</a>, the user agent must parse and evaluate
+an XHTML document for well-formedness. If the user agent claims
+to be a validating user agent, it must also validate documents
+against their referenced DTDs according to <a href="#ref-xml">
+[XML]</a>.</li>
+
+<li>When the user agent claims to support <a href="#facilities">
+facilities</a> defined within this specification or required by
+this specification through normative reference, it must do so in
+ways consistent with the facilities' definition.</li>
+
+<li>When a user agent processes an XHTML document as generic XML,
+it shall only recognize attributes of type
+<code>ID</code> (e.g. the <code>id</code> attribute on most XHTML elements)
+as fragment identifiers.</li>
+
+<li>If a user agent encounters an element it does not recognize,
+it must render the element's content.</li>
+
+<li>If a user agent encounters an attribute it does not
+recognize, it must ignore the entire attribute specification
+(i.e., the attribute and its value).</li>
+
+<li>If a user agent encounters an attribute value it doesn't
+recognize, it must use the default attribute value.</li>
+
+<li>If it encounters an entity reference (other than one
+of the predefined entities) for which the User Agent has
+processed no declaration (which could happen if the declaration
+is in the external subset which the User Agent hasn't read), the entity
+reference should be rendered as the characters (starting
+with the ampersand and ending with the semi-colon) that
+make up the entity reference.</li>
+
+<li>When rendering content, User Agents that encounter
+characters or character entity references that are recognized but not renderable should display the document in such a way that it is obvious to the user that normal rendering has not taken place.</li>
+
+<li>
+The following characters are defined in [XML] as whitespace characters:
+
+<ul>
+<li>Space (&amp;#x0020;)</li>
+<li>Tab (&amp;#x0009;)</li>
+<li>Carriage return (&amp;#x000D;)</li>
+<li>Line feed (&amp;#x000A;)</li>
+</ul>
+
+<p>
+The XML processor normalizes different system's line end codes into one
+single line-feed character, that is passed up to the application. The XHTML
+user agent in addition, must treat the following characters as whitespace:
+</p>
+
+<ul>
+<li>Form feed (&amp;#x000C;)</li>
+<li>Zero-width space (&amp;#x200B;)</li>
+</ul>
+
+<p>
+In elements where the 'xml:space' attribute is set to 'preserve', the user
+agent must leave all whitespace characters intact (with the exception of
+leading and trailing whitespace characters, which should be removed).
+Otherwise, whitespace
+is handled according to the following rules:
+</p>
+
+<ul>
+<li>
+All whitespace surrounding block elements should be removed.
+</li>
+<li>
+Comments are removed entirely and do not affect whitespace handling. One
+whitespace character on either side of a comment is treated as two white
+space characters.
+</li>
+<li>
+Leading and trailing whitespace inside a block element must be removed.
+</li>
+<li>Line feed characters within a block element must be converted into a
+space (except when the 'xml:space' attribute is set to 'preserve').
+</li>
+<li>
+A sequence of white space characters must be reduced to a single space
+character (except when the 'xml:space' attribute is set to 'preserve').
+</li>
+<li>
+With regard to rendition,
+the User Agent should render the content in a
+manner appropriate to the language in which the content is written.
+In languages whose primary script is Latinate, the ASCII space
+character is typically used to encode both grammatical word boundaries and
+typographic whitespace; in languages whose script is related to Nagari
+(e.g., Sanskrit, Thai, etc.), grammatical boundaries may be encoded using
+the ZW 'space' character, but will not typically be represented by
+typographic whitespace in rendered output; languages using Arabiform scripts
+may encode typographic whitespace using a space character, but may also use
+the ZW space character to delimit 'internal' grammatical boundaries (what
+look like words in Arabic to an English eye frequently encode several words,
+e.g. 'kitAbuhum' = 'kitAbu-hum' = 'book them' == their book); and languages
+in the Chinese script tradition typically neither encode such delimiters nor
+use typographic whitespace in this way.
+</li>
+</ul>
+
+<p>Whitespace in attribute values is processed according to <a
+href="#ref-xml">[XML]</a>.</p>
+</li>
+</ol>
+
+<!--OddPage-->
+<h1><a name="diffs" id="diffs">4. Differences with HTML
+4.0</a></h1>
+
+<p>Due to the fact that XHTML is an XML application, certain
+practices that were perfectly legal in SGML-based HTML 4.0 <a
+href="#ref-html4">[HTML]</a> must be changed.</p>
+
+<h2><a name="h-4.1" id="h-4.1">4.1 Documents must be
+well-formed</a></h2>
+
+<p><a href="#wellformed">Well-formedness</a> is a new concept
+introduced by <a href="#ref-xml">[XML]</a>. Essentially this
+means that all elements must either have closing tags or be
+written in a special form (as described below), and that all the
+elements must nest.</p>
+
+<p>Although overlapping is illegal in SGML, it was widely
+tolerated in existing browsers.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: nested elements.</em></strong></p>
+
+<p>&lt;p&gt;here is an emphasized
+&lt;em&gt;paragraph&lt;/em&gt;.&lt;/p&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: overlapping elements</em></strong></p>
+
+<p>&lt;p&gt;here is an emphasized
+&lt;em&gt;paragraph.&lt;/p&gt;&lt;/em&gt;</p>
+</div>
+
+<h2><a name="h-4.2" id="h-4.2">4.2 Element and attribute
+names must be in lower case</a></h2>
+
+<p>XHTML documents must use lower case for all HTML element and
+attribute names. This difference is necessary because XML is
+case-sensitive e.g. &lt;li&gt; and &lt;LI&gt; are different
+tags.</p>
+
+<h2><a name="h-4.3" id="h-4.3">4.3 For non-empty elements,
+end tags are required</a></h2>
+
+<p>In SGML-based HTML 4.0 certain elements were permitted to omit
+the end tag; with the elements that followed implying closure.
+This omission is not permitted in XML-based XHTML. All elements
+other than those declared in the DTD as <code>EMPTY</code> must
+have an end tag.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: terminated elements</em></strong></p>
+
+<p>&lt;p&gt;here is a paragraph.&lt;/p&gt;&lt;p&gt;here is
+another paragraph.&lt;/p&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: unterminated elements</em></strong></p>
+
+<p>&lt;p&gt;here is a paragraph.&lt;p&gt;here is another
+paragraph.</p>
+</div>
+
+<h2><a name="h-4.4" id="h-4.4">4.4 Attribute values must
+always be quoted</a></h2>
+
+<p>All attribute values must be quoted, even those which appear
+to be numeric.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: quoted attribute values</em></strong></p>
+
+<p>&lt;table rows="3"&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: unquoted attribute values</em></strong></p>
+
+<p>&lt;table rows=3&gt;</p>
+</div>
+
+<h2><a name="h-4.5" id="h-4.5">4.5 Attribute
+Minimization</a></h2>
+
+<p>XML does not support attribute minimization. Attribute-value
+pairs must be written in full. Attribute names such as <code>
+compact</code> and <code>checked</code> cannot occur in elements
+without their value being specified.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: unminimized attributes</em></strong></p>
+
+<p>&lt;dl compact="compact"&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: minimized attributes</em></strong></p>
+
+<p>&lt;dl compact&gt;</p>
+</div>
+
+<h2><a name="h-4.6" id="h-4.6">4.6 Empty Elements</a></h2>
+
+<p>Empty elements must either have an end tag or the start tag must end with <code>/&gt;</code>. For instance,
+<code>&lt;br/&gt;</code> or <code>&lt;hr&gt;&lt;/hr&gt;</code>. See <a
+href="#guidelines">HTML Compatibility Guidelines</a> for information on ways to
+ensure this is backward compatible with HTML 4.0 user agents.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: terminated empty tags</em></strong></p>
+
+<p>&lt;br/&gt;&lt;hr/&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: unterminated empty tags</em></strong></p>
+
+<p>&lt;br&gt;&lt;hr&gt;</p>
+</div>
+
+<h2><a name="h-4.7" id="h-4.7">4.7 Whitespace handling in
+attribute values</a></h2>
+
+<p>In attribute values, user agents will strip leading and
+trailing whitespace from attribute values and map sequences
+of one or more whitespace characters (including line breaks) to
+a single inter-word space (an ASCII space character for western
+scripts). See <a href="http://www.w3.org/TR/REC-xml#AVNormalize">
+Section 3.3.3</a> of <a href="#ref-xml">[XML]</a>.</p>
+
+<h2><a name="h-4.8" id="h-4.8">4.8 Script and Style
+elements</a></h2>
+
+<p>In XHTML, the script and style elements are declared as having
+<code>#PCDATA</code> content. As a result, <code>&lt;</code> and
+<code>&amp;</code> will be treated as the start of markup, and
+entities such as <code>&amp;lt;</code> and <code>&amp;amp;</code>
+will be recognized as entity references by the XML processor to
+<code>&lt;</code> and <code>&amp;</code> respectively. Wrapping
+the content of the script or style element within a <code>
+CDATA</code> marked section avoids the expansion of these
+entities.</p>
+
+<div class="good">
+<pre>
+&lt;script&gt;
+ &lt;![CDATA[
+ ... unescaped script content ...
+ ]]&gt;
+ &lt;/script&gt;
+</pre>
+</div>
+
+<p><code>CDATA</code> sections are recognized by the XML
+processor and appear as nodes in the Document Object Model, see
+<a href=
+"http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-E067D597">
+Section 1.3</a> of the DOM Level 1 Recommendation <a href=
+"#ref-dom">[DOM]</a>.</p>
+
+<p>An alternative is to use external script and style
+documents.</p>
+
+<h2><a name="h-4.9" id="h-4.9">4.9 SGML exclusions</a></h2>
+
+<p>SGML gives the writer of a DTD the ability to exclude specific
+elements from being contained within an element. Such
+prohibitions (called "exclusions") are not possible in XML.</p>
+
+<p>For example, the HTML 4.0 Strict DTD forbids the nesting of an
+'<code>a</code>' element within another '<code>a</code>' element
+to any descendant depth. It is not possible to spell out such
+prohibitions in XML. Even though these prohibitions cannot be
+defined in the DTD, certain elements should not be nested. A
+summary of such elements and the elements that should not be
+nested in them is found in the normative <a href="#prohibitions">
+Appendix&#160;B</a>.</p>
+
+<h2><a name="h-4.10" id="h-4.10">4.10 The elements with 'id' and 'name'
+attributes</a></h2>
+
+<p>HTML 4.0 defined the <code>name</code> attribute for the elements
+<code>a</code>,
+<code>applet</code>, <code>frame</code>,
+<code>iframe</code>, <code>img</code>, and <code>map</code>.
+HTML 4.0 also introduced
+the <code>id</code> attribute. Both of these attributes are designed to be
+used as fragment identifiers.</p>
+<p>In XML, fragment identifiers are of type <code>ID</code>, and
+there can only be a single attribute of type <code>ID</code> per element.
+Therefore, in XHTML 1.0 the <code>id</code>
+attribute is defined to be of type <code>ID</code>. In order to
+ensure that XHTML 1.0 documents are well-structured XML documents, XHTML 1.0
+documents MUST use the <code>id</code> attribute when defining fragment
+identifiers, even on elements that historically have also had a
+<code>name</code> attribute.
+See the <a href="#guidelines">HTML Compatibility
+Guidelines</a> for information on ensuring such anchors are backwards
+compatible when serving XHTML documents as media type <code>text/html</code>.
+</p>
+<p>Note that in XHTML 1.0, the <code>name</code> attribute of these
+elements is formally deprecated, and will be removed in a
+subsequent version of XHTML.</p>
+
+<!--OddPage-->
+<h1><a name="issues" id="issues">5. Compatibility Issues</a></h1>
+
+<p>Although there is no requirement for XHTML 1.0 documents to be
+compatible with existing user agents, in practice this is easy to
+accomplish. Guidelines for creating compatible documents can be
+found in <a href="#guidelines">Appendix&#160;C</a>.</p>
+
+<h2><a name="media" id="media">5.1 Internet Media Type</a></h2>
+<p>As of the publication of this recommendation, the general
+recommended MIME labeling for XML-based applications
+has yet to be resolved.</p>
+
+<p>However, XHTML Documents which follow the guidelines set forth
+in <a href="#guidelines">Appendix C</a>, "HTML Compatibility Guidelines" may be
+labeled with the Internet Media Type "text/html", as they
+are compatible with most HTML browsers. This document
+makes no recommendation about MIME labeling of other
+XHTML documents.</p>
+
+<!--OddPage-->
+<h1><a name="future" id="future">6. Future Directions</a></h1>
+
+<p>XHTML 1.0 provides the basis for a family of document types
+that will extend and subset XHTML, in order to support a wide
+range of new devices and applications, by defining modules and
+specifying a mechanism for combining these modules. This
+mechanism will enable the extension and sub-setting of XHTML 1.0
+in a uniform way through the definition of new modules.</p>
+
+<h2><a name="mods" id="mods">6.1 Modularizing HTML</a></h2>
+
+<p>As the use of XHTML moves from the traditional desktop user
+agents to other platforms, it is clear that not all of the XHTML
+elements will be required on all platforms. For example a hand
+held device or a cell-phone may only support a subset of XHTML
+elements.</p>
+
+<p>The process of modularization breaks XHTML up into a series of
+smaller element sets. These elements can then be recombined to
+meet the needs of different communities.</p>
+
+<p>These modules will be defined in a later W3C document.</p>
+
+<h2><a name="extensions" id="extensions">6.2 Subsets and
+Extensibility</a></h2>
+
+<p>Modularization brings with it several advantages:</p>
+
+<ul>
+<li>
+<p>It provides a formal mechanism for sub-setting XHTML.</p>
+</li>
+
+<li>
+<p>It provides a formal mechanism for extending XHTML.</p>
+</li>
+
+<li>
+<p>It simplifies the transformation between document types.</p>
+</li>
+
+<li>
+<p>It promotes the reuse of modules in new document types.</p>
+</li>
+</ul>
+
+<h2><a name="profiles" id="profiles">6.3 Document
+Profiles</a></h2>
+
+<p>A document profile specifies the syntax and semantics of a set
+of documents. Conformance to a document profile provides a basis
+for interoperability guarantees. The document profile specifies
+the facilities required to process documents of that type, e.g.
+which image formats can be used, levels of scripting, style sheet
+support, and so on.</p>
+
+<p>For product designers this enables various groups to define
+their own standard profile.</p>
+
+<p>For authors this will obviate the need to write several
+different versions of documents for different clients.</p>
+
+<p>For special groups such as chemists, medical doctors, or
+mathematicians this allows a special profile to be built using
+standard HTML elements plus a group of elements geared to the
+specialist's needs.</p>
+
+<!--OddPage-->
+<h1><a name="appendices" id="appendices"></a>
+<a name="dtds" id="dtds">Appendix A. DTDs</a></h1>
+
+<p><b>This appendix is normative.</b></p>
+
+<p>These DTDs and entity sets form a normative part of this
+specification. The complete set of DTD files together with an XML
+declaration and SGML Open Catalog is included in the <a href=
+"xhtml1.zip">zip file</a> for this specification.</p>
+
+<h2><a name="h-A1" id="h-A1">A.1 Document Type
+Definitions</a></h2>
+
+<p>These DTDs approximate the HTML 4.0 DTDs. It is likely that
+when the DTDs are modularized, a method of DTD construction will
+be employed that corresponds more closely to HTML 4.0.</p>
+
+<ul>
+<li>
+<p><a href="DTD/xhtml1-strict.dtd" type="text/plain">
+XHTML-1.0-Strict</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml1-transitional.dtd" type="text/plain">
+XHTML-1.0-Transitional</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml1-frameset.dtd" type="text/plain">
+XHTML-1.0-Frameset</a></p>
+</li>
+</ul>
+
+<h2><a name="h-A2" id="h-A2">A.2 Entity Sets</a></h2>
+
+<p>The XHTML entity sets are the same as for HTML 4.0, but have
+been modified to be valid XML 1.0 entity declarations. Note the
+entity for the Euro currency sign (<code>&amp;euro;</code> or
+<code>&amp;#8364;</code> or <code>&amp;#x20AC;</code>) is defined
+as part of the special characters.</p>
+
+<ul>
+<li>
+<p><a href="DTD/xhtml-lat1.ent">Latin-1 characters</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml-special.ent">Special characters</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml-symbol.ent">Symbols</a></p>
+</li>
+</ul>
+
+<!--OddPage-->
+<h1><a name="prohibitions" id="prohibitions">Appendix B. Element
+Prohibitions</a></h1>
+
+<p><b>This appendix is normative.</b></p>
+
+<p>The following elements have prohibitions on which elements
+they can contain (see <a href="#h-4.9">Section 4.9</a>). This
+prohibition applies to all depths of nesting, i.e. it contains
+all the descendant elements.</p>
+
+<dl><dt><code class="tag">a</code></dt>
+<dd>
+cannot contain other <code>a</code> elements.</dd>
+<dt><code class="tag">pre</code></dt>
+<dd>cannot contain the <code>img</code>, <code>object</code>,
+<code>big</code>, <code>small</code>, <code>sub</code>, or <code>
+sup</code> elements.</dd>
+
+<dt><code class="tag">button</code></dt>
+<dd>cannot contain the <code>input</code>, <code>select</code>,
+<code>textarea</code>, <code>label</code>, <code>button</code>,
+<code>form</code>, <code>fieldset</code>, <code>iframe</code> or
+<code>isindex</code> elements.</dd>
+<dt><code class="tag">label</code></dt>
+<dd>cannot contain other <code class="tag">label</code> elements.</dd>
+<dt><code class="tag">form</code></dt>
+<dd>cannot contain other <code>form</code> elements.</dd>
+</dl>
+
+<!--OddPage-->
+<h1><a name="guidelines" id="guidelines">Appendix C.
+HTML Compatibility Guidelines</a></h1>
+
+<p><b>This appendix is informative.</b></p>
+
+<p>This appendix summarizes design guidelines for authors who
+wish their XHTML documents to render on existing HTML user
+agents.</p>
+
+<h2>C.1 Processing Instructions</h2>
+<p>Be aware that processing instructions are rendered on some
+user agents. However, also note that when the XML declaration is not included
+in a document, the document can only use the default character encodings UTF-8
+or UTF-16.</p>
+
+<h2>C.2 Empty Elements</h2>
+<p>Include a space before the trailing <code>/</code> and <code>
+&gt;</code> of empty elements, e.g. <code class="greenmono">
+&lt;br&#160;/&gt;</code>, <code class="greenmono">
+&lt;hr&#160;/&gt;</code> and <code class="greenmono">&lt;img
+src="karen.jpg" alt="Karen"&#160;/&gt;</code>. Also, use the
+minimized tag syntax for empty elements, e.g. <code class=
+"greenmono">&lt;br /&gt;</code>, as the alternative syntax <code
+class="greenmono">&lt;br&gt;&lt;/br&gt;</code> allowed by XML
+gives uncertain results in many existing user agents.</p>
+
+<h2>C.3 Element Minimization and Empty Element Content</h2>
+<p>Given an empty instance of an element whose content model is
+not <code>EMPTY</code> (for example, an empty title or paragraph)
+do not use the minimized form (e.g. use <code class="greenmono">
+&lt;p&gt; &lt;/p&gt;</code> and not <code class="greenmono">
+&lt;p&#160;/&gt;</code>).</p>
+
+<h2>C.4 Embedded Style Sheets and Scripts</h2>
+<p>Use external style sheets if your style sheet uses <code>
+&lt;</code> or <code>&amp;</code> or <code>]]&gt;</code> or <code>--</code>. Use
+external scripts if your script uses <code>&lt;</code> or <code>
+&amp;</code> or <code>]]&gt;</code> or <code>--</code>. Note that XML parsers
+are permitted to silently remove the contents of comments. Therefore, the historical
+practice of "hiding" scripts and style sheets within comments to make the
+documents backward compatible is likely to not work as expected in XML-based
+implementations.</p>
+
+<h2>C.5 Line Breaks within Attribute Values</h2>
+<p>Avoid line breaks and multiple whitespace characters within
+attribute values. These are handled inconsistently by user
+agents.</p>
+
+<h2>C.6 Isindex</h2>
+<p>Don't include more than one <code>isindex</code> element in
+the document <code>head</code>. The <code>isindex</code> element
+is deprecated in favor of the <code>input</code> element.</p>
+
+<h2>C.7 The <code>lang</code> and <code>xml:lang</code> Attributes</h2>
+<p>Use both the <code>lang</code> and <code>xml:lang</code>
+attributes when specifying the language of an element. The value
+of the <code>xml:lang</code> attribute takes precedence.</p>
+
+<h2>C.8 Fragment Identifiers</h2>
+<p>In XML, <abbr title="Uniform Resource Identifiers">URIs</abbr> [<a href="#ref-rfc2396">RFC2396</a>] that end with fragment identifiers of the form
+<code>"#foo"</code> do not refer to elements with an attribute
+<code>name="foo"</code>; rather, they refer to elements with an
+attribute defined to be of type <code>ID</code>, e.g., the <code>
+id</code> attribute in HTML 4.0. Many existing HTML clients don't
+support the use of <code>ID</code>-type attributes in this way,
+so identical values may be supplied for both of these attributes to ensure
+maximum forward and backward compatibility (e.g., <code class=
+"greenmono">&lt;a id="foo" name="foo"&gt;...&lt;/a&gt;</code>).</p>
+
+<p>Further, since the set of
+legal values for attributes of type <code>ID</code> is much smaller than
+for those of type <code>CDATA</code>, the type of the <code>name</code>
+attribute has been changed to <code>NMTOKEN</code>. This attribute is
+constrained such that it can only have the same values as type
+<code>ID</code>, or as the <code>Name</code> production in XML 1.0 Section
+2.5, production 5. Unfortunately, this constraint cannot be expressed in the
+XHTML 1.0 DTDs. Because of this change, care must be taken when
+converting existing HTML documents. The values of these attributes
+must be unique within the document, valid, and any references to these
+fragment identifiers (both
+internal and external) must be updated should the values be changed during
+conversion.</p>
+<p>Finally, note that XHTML 1.0 has deprecated the
+<code>name</code> attribute of the <code>a</code>, <code>applet</code>, <code>frame</code>, <code>iframe</code>, <code>img</code>, and <code>map</code>
+elements, and it will be
+removed from XHTML in subsequent versions.</p>
+
+<h2>C.9 Character Encoding</h2>
+<p>To specify a character encoding in the document, use both the
+encoding attribute specification on the xml declaration (e.g.
+<code class="greenmono">&lt;?xml version="1.0"
+encoding="EUC-JP"?&gt;</code>) and a meta http-equiv statement
+(e.g. <code class="greenmono">&lt;meta http-equiv="Content-type"
+content='text/html; charset="EUC-JP"'&#160;/&gt;</code>). The
+value of the encoding attribute of the xml processing instruction
+takes precedence.</p>
+
+<h2>C.10 Boolean Attributes</h2>
+<p>Some HTML user agents are unable to interpret boolean
+attributes when these appear in their full (non-minimized) form,
+as required by XML 1.0. Note this problem doesn't effect user
+agents compliant with HTML 4.0. The following attributes are
+involved: <code>compact</code>, <code>nowrap</code>, <code>
+ismap</code>, <code>declare</code>, <code>noshade</code>, <code>
+checked</code>, <code>disabled</code>, <code>readonly</code>,
+<code>multiple</code>, <code>selected</code>, <code>
+noresize</code>, <code>defer</code>.</p>
+
+<h2>C.11 Document Object Model and XHTML</h2>
+<p>
+The Document Object Model level 1 Recommendation [<a href="#ref-dom">DOM</a>]
+defines document object model interfaces for XML and HTML 4.0. The HTML 4.0
+document object model specifies that HTML element and attribute names are
+returned in upper-case. The XML document object model specifies that
+element and attribute names are returned in the case they are specified. In
+XHTML 1.0, elements and attributes are specified in lower-case. This apparent difference can be
+addressed in two ways:
+</p>
+<ol>
+<li>Applications that access XHTML documents served as Internet media type
+<code>text/html</code>
+via the <abbr title="Document Object Model">DOM</abbr> can use the HTML DOM,
+and can rely upon element and attribute names being returned in
+upper-case from those interfaces.</li>
+<li>Applications that access XHTML documents served as Internet media types
+<code>text/xml</code> or <code>application/xml</code>
+can also use the XML DOM. Elements and attributes will be returned in lower-case.
+Also, some XHTML elements may or may
+not appear
+in the object tree because they are optional in the content model
+(e.g. the <code>tbody</code> element within
+<code>table</code>). This occurs because in HTML 4.0 some elements were
+permitted to be minimized such that their start and end tags are both omitted
+(an SGML feature).
+This is not possible in XML. Rather than require document authors to insert
+extraneous elements, XHTML has made the elements optional.
+Applications need to adapt to this
+accordingly.</li>
+</ol>
+
+<h2>C.12 Using Ampersands in Attribute Values</h2>
+<p>
+When an attribute value contains an ampersand, it must be expressed as a character
+entity reference
+(e.g. "<code>&amp;amp;</code>"). For example, when the
+<code>href</code> attribute
+of the <code>a</code> element refers to a
+CGI script that takes parameters, it must be expressed as
+<code>http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;amp;name=user</code>
+rather than as
+<code>http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user</code>.
+</p>
+
+<h2>C.13 Cascading Style Sheets (CSS) and XHTML</h2>
+
+<p>The Cascading Style Sheets level 2 Recommendation [<a href="#ref-css2">CSS2</a>] defines style
+properties which are applied to the parse tree of the HTML or XML
+document. Differences in parsing will produce different visual or
+aural results, depending on the selectors used. The following hints
+will reduce this effect for documents which are served without
+modification as both media types:</p>
+
+<ol>
+<li>
+CSS style sheets for XHTML should use lower case element and
+attribute names.</li>
+
+
+<li>In tables, the tbody element will be inferred by the parser of an
+HTML user agent, but not by the parser of an XML user agent. Therefore
+you should always explicitely add a tbody element if it is referred to
+in a CSS selector.</li>
+
+<li>Within the XHTML name space, user agents are expected to
+recognize the "id" attribute as an attribute of type ID.
+Therefore, style sheets should be able to continue using the
+shorthand "#" selector syntax even if the user agent does not read
+the DTD.</li>
+
+<li>Within the XHTML name space, user agents are expected to
+recognize the "class" attribute. Therefore, style sheets should be
+able to continue using the shorthand "." selector syntax.</li>
+
+<li>
+CSS defines different conformance rules for HTML and XML documents;
+be aware that the HTML rules apply to XHTML documents delivered as
+HTML and the XML rules apply to XHTML documents delivered as XML.</li>
+</ol>
+<!--OddPage-->
+<h1><a name="acks" id="acks">Appendix D.
+Acknowledgements</a></h1>
+
+<p><b>This appendix is informative.</b></p>
+
+<p>This specification was written with the participation of the
+members of the W3C HTML working group:</p>
+
+<dl>
+<dd>Steven Pemberton, CWI (HTML Working Group Chair)<br />
+Murray Altheim, Sun Microsystems<br />
+Daniel Austin, CNET: The Computer Network<br />
+Frank Boumphrey, HTML Writers Guild<br />
+John Burger, Mitre<br />
+Andrew W. Donoho, IBM<br />
+Sam Dooley, IBM<br />
+Klaus Hofrichter, GMD<br />
+Philipp Hoschka, W3C<br />
+Masayasu Ishikawa, W3C<br />
+Warner ten Kate, Philips Electronics<br />
+Peter King, Phone.com<br />
+Paula Klante, JetForm<br />
+Shin'ichi Matsui, W3C/Panasonic<br />
+Shane McCarron, Applied Testing and Technology (The Open Group through August
+1999)<br />
+Ann Navarro, HTML Writers Guild<br />
+Zach Nies, Quark<br />
+Dave Raggett, W3C/HP (W3C lead for HTML)<br />
+Patrick Schmitz, Microsoft<br />
+Sebastian Schnitzenbaumer, Stack Overflow<br />
+Chris Wilson, Microsoft<br />
+Ted Wugofski, Gateway 2000<br />
+Dan Zigmond, WebTV Networks</dd>
+</dl>
+
+<!--OddPage-->
+<h1><a name="refs" id="refs">Appendix E. References</a></h1>
+
+<p><b>This appendix is informative.</b></p>
+
+<dl>
+
+<dt><a name="ref-css2" id="ref-css2"><b>[CSS2]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/REC-CSS2">"Cascading Style Sheets, level 2 (CSS2) Specification"</a>, B.
+Bos, H. W. Lie, C. Lilley, I. Jacobs, 12 May 1998.<br />
+Available at: <a href="http://www.w3.org/TR/REC-CSS2">
+http://www.w3.org/TR/REC-CSS2</a></dd>
+
+<dt><a name="ref-dom" id="ref-dom"><b>[DOM]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/REC-DOM-Level-1">"Document Object Model (DOM) Level 1 Specification"</a>, Lauren
+Wood <i>et al.</i>, 1 October 1998.<br />
+Available at: <a href="http://www.w3.org/TR/REC-DOM-Level-1">
+http://www.w3.org/TR/REC-DOM-Level-1</a></dd>
+
+<dt><a name="ref-html4" id="ref-html4"><b>[HTML]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/1999/PR-html40-19990824">"HTML 4.01 Specification"</a>, D. Raggett, A. Le&#160;Hors, I.
+Jacobs, 24 August 1999.<br />
+Available at: <a href="http://www.w3.org/TR/1999/PR-html40-19990824">
+http://www.w3.org/TR/1999/PR-html40-19990824</a></dd>
+
+<dt><a name="ref-posix" id="ref-posix"><b>[POSIX.1]</b></a></dt>
+
+<dd>"ISO/IEC 9945-1:1990 Information Technology - Portable
+Operating System Interface (POSIX) - Part 1: System Application
+Program Interface (API) [C Language]", Institute of Electrical
+and Electronics Engineers, Inc, 1990.</dd>
+
+<dt><a name="ref-rfc2046" id="ref-rfc2046"><b>
+[RFC2046]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2046.txt">"RFC2046: Multipurpose Internet Mail Extensions (MIME) Part
+Two: Media Types"</a>, N. Freed and N. Borenstein, November
+1996.<br />
+Available at <a href="http://www.ietf.org/rfc/rfc2046.txt">
+http://www.ietf.org/rfc/rfc2046.txt</a>. Note that this RFC
+obsoletes RFC1521, RFC1522, and RFC1590.</dd>
+
+<dt><a name="ref-rfc2119" id="ref-rfc2119"><b>
+[RFC2119]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2119.txt">"RFC2119: Key words for use in RFCs to Indicate Requirement
+Levels"</a>, S. Bradner, March 1997.<br />
+Available at: <a href="http://www.ietf.org/rfc/rfc2119.txt">
+http://www.ietf.org/rfc/rfc2119.txt</a></dd>
+
+<dt><a name="ref-rfc2376" id="ref-rfc2376"><b>
+[RFC2376]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2376.txt">"RFC2376: XML Media Types"</a>, E. Whitehead, M. Murata, July
+1998.<br />
+Available at: <a href="http://www.ietf.org/rfc/rfc2376.txt">
+http://www.ietf.org/rfc/rfc2376.txt</a></dd>
+
+<dt><a name="ref-rfc2396" id="ref-rfc2396"><b>
+[RFC2396]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2396.txt">"RFC2396: Uniform Resource Identifiers (URI): Generic
+Syntax"</a>, T. Berners-Lee, R. Fielding, L. Masinter, August
+1998.<br />
+This document updates RFC1738 and RFC1808.<br />
+Available at: <a href="http://www.ietf.org/rfc/rfc2396.txt">
+http://www.ietf.org/rfc/rfc2396.txt</a></dd>
+
+<dt><a name="ref-xml" id="ref-xml"><b>[XML]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/REC-xml">"Extensible Markup Language (XML) 1.0 Specification"</a>, T.
+Bray, J. Paoli, C. M. Sperberg-McQueen, 10 February 1998.<br />
+Available at: <a href="http://www.w3.org/TR/REC-xml">
+http://www.w3.org/TR/REC-xml</a></dd>
+
+<dt><a name="ref-xmlns" id="ref-xmlns"><b>[XMLNAMES]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/REC-xml-names">"Namespaces in XML"</a>, T. Bray, D. Hollander, A. Layman, 14
+January 1999.<br />
+XML namespaces provide a simple method for qualifying names used
+in XML documents by associating them with namespaces identified
+by URI.<br />
+Available at: <a href="http://www.w3.org/TR/REC-xml-names">
+http://www.w3.org/TR/REC-xml-names</a></dd>
+
+</dl>
+<p><a href="http://www.w3.org/WAI/WCAG1AAA-Conformance"
+title="Explanation of Level Triple-A Conformance">
+<img height="32" width="88"
+src="wcag1AAA.gif"
+alt="Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0" /></a></p>
+<div class="navbar">
+ <hr />
+ <a href="#toc">table of contents</a>
+</div>
+</body>
+</html>
+
diff --git a/test/valid/xlink.xml b/test/valid/xlink.xml
new file mode 100644
index 0000000..19194aa
--- /dev/null
+++ b/test/valid/xlink.xml
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification::19990205//EN" "dtds/xmlspec.dtd" [
+<!ENTITY doc-type "WD">
+<!ENTITY iso6.doc.date '29-May-1999'>
+]>
+<!--ArborText, Inc., 1988-1998, v.4002-->
+<?Pub UDT _bookmark _target?>
+<?Pub Inc?>
+<?xml-stylesheet
+href="file:///C|/Program%20Files/SoftQuad/XMetaL%201/display/xmlspec.css"
+type="text/css"?>
+<spec>
+
+<!-- Last edited: 27 May 1999 by bent -->
+<header><?Pub Dtl?>
+ <title>XML Linking Language (XLink)</title>
+ <version>Version 1.0</version>
+ <w3c-designation><!-- &doc-type;-&iso6.doc.date; --> WD-xlink-19990527</w3c-designation>
+ <w3c-doctype>World Wide Web Consortium Working Draft</w3c-doctype>
+ <pubdate><day>29</day><month>May</month><year>1999</year></pubdate>
+ <notice>
+ <p>This draft is for public discussion.</p>
+ </notice>
+ <publoc><loc href="http://www.w3.org/XML/Group/1999/05/WD-xlink-current">http://www.w3.org/XML/Group/1999/05/WD-xlink-current</loc></publoc>
+ <prevlocs>
+ <!--Check: was it actually August?-->
+ <loc href="http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527">http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527</loc>
+ <loc href="http://www.w3.org/XML/Group/1999/05/WD-xlink-19990505">http://www.w3.org/XML/Group/1999/05/WD-xlink-19990505</loc>
+ <loc href="http://www.w3.org/TR/1998/WD-xlink-19980303">http://www.w3.org/TR/1998/WD-xlink-19980303</loc>
+ <loc href="http://www.w3.org/TR/WD-xml-link-970630">http://www.w3.org/TR/WD-xml-link-970630</loc></prevlocs>
+
+ <authlist>
+ <!--Updated author hrefs dorchard-->
+ <!-- Update Steve's email - bent -->
+ <author>
+ <name>Steve DeRose</name>
+ <affiliation>Inso Corp. and Brown University</affiliation>
+ <email href="mailto:Steven_DeRose@Brown.edu">Steven_DeRose@Brown.edu</email>
+ </author>
+ <author>
+ <name>David Orchard</name>
+ <affiliation>IBM Corp.</affiliation>
+ <email href="mailto:dorchard@ca.ibm.com">dorchard@ca.ibm.com</email>
+ </author>
+ <author>
+ <name>Ben Trafford</name>
+ <affiliation>Invited Expert</affiliation>
+ <email href="mailto:bent@exemplary.net">bent@exemplary.net</email>
+ </author>
+ <!-- I suggest we move Eve and Tim down to the Acknowledgements section. We
+ also ought to add Gabe Beged-Dov there, as well. bent
+ how shall we cite Tim? sjd What about with an Acknowledgments section?
+ -elm <AUTHOR> <NAME>Tim Bray</NAME> <AFFILIATION>Textuality</AFFILIATION>
+ <EMAIL>tbray@textuality.com</EMAIL> </AUTHOR>-->
+ </authlist>
+
+ <status>
+ <p>This is a W3C Working Draft for review by W3C members and other interested parties. It is a draft document and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than "work in progress". A list of current W3C working drafts can be found at <loc href="http://www.w3.org/TR">http://www.w3.org/TR</loc>.</p>
+ <p><emph>Note:</emph> Since working drafts are subject to frequent change, you are advised to reference the above URI, rather than the URIs for working drafts themselves. Some of the work remaining is described in <specref ref="unfinished"/>. </p>
+ <p>This work is part of the W3C XML Activity (for current status, see <loc href="http://www.w3.org/MarkUp/SGML/Activity">http://www.w3.org/XML/Activity </loc>). For information about the XPointer language which is expected to be used with XLink, see <loc href="http://www.w3.org/MarkUp/SGML/Activity">http://www.w3.org/TR/WD-xptr</loc>.
+ </p>
+ <p>See <loc href="http://www.w3.org/TR/NOTE-xlink-principles">http://www.w3.org/TR/NOTE-xlink-principles </loc> for additional background on the design principles informing XLink.</p>
+ <p>Also see <loc href="http://www.w3.org/TR/NOTE-xlink-req/">http://www.w3.org/TR/NOTE-xlink-req/</loc> for the XLink requirements that this document attempts to satisfy.</p>
+ </status>
+
+ <abstract>
+ <!-- edited the abstract for further clarity - bent -->
+ <p>This specification defines constructs that may be inserted into XML DTDs, schemas and document instances to describe links between objects. It uses XML syntax to create structures that can describe the simple unidirectional hyperlinks of today's HTML as well as more sophisticated links.</p>
+ </abstract>
+
+ <pubstmt>
+ <p>Burlington, Seekonk, et al.: World-Wide Web Consortium, XML Working Group, 1998.</p>
+ </pubstmt>
+
+ <sourcedesc>
+ <p>Created in electronic form.</p>
+ </sourcedesc>
+
+ <langusage>
+ <language id="en">English</language>
+ <language id="ebnf">Extended Backus-Naur Form (formal grammar)</language>
+ </langusage>
+
+ <revisiondesc>
+ <slist>
+ <sitem>1997-01-15 : Skeleton draft by TB</sitem>
+ <sitem>1997-01-24 : Fleshed out by sjd</sitem>
+ <sitem>1997-04-08 : Substantive draft</sitem>
+ <sitem>1997-06-30 : Public draft</sitem>
+ <sitem>1997-08-01 : Public draft</sitem>
+ <sitem>1997-08-05 : Prose/organization work by sjd</sitem>
+ <sitem>1997-10-14: Conformance and design principles; a bit of cleanup by elm</sitem>
+ <sitem>1997-11-07: Update for editorial issues per issues doc, by sjd.</sitem>
+ <sitem>1997-12-01: Update for editorial issues per issues doc in preparation for F2F meeting, by sjd.</sitem>
+ <sitem>1998-01-13: Editorial cleanup, addition of new design principles, by elm.</sitem>
+ <sitem>1998-02-27: Splitting out of XLink and XPointer, by elm.</sitem>
+ <sitem>1998-03-03: Moved most of the XPointer locator stuff here. elm</sitem>
+ <sitem>1999-04-24: Editorial rewrites to represent new ideas on XLink, especially the inclusion of arcs. bent</sitem>
+ <sitem>1999-05-05: Prose/organization work by dorchard. Moved much of the semantics section around, from: locators, link semantics, remote resource semantics, local resource semantics; to: resource semantics, locators, behavior semantics, link semantics, arc semantics</sitem>
+ <sitem>1999-05-12: Prose/organization work. Re-organized some of the sections, removed XML constructs from the document, added descriptive prose, edited document text for clarity. Rewrote the link recognition section. bent</sitem>
+ <sitem>1999-05-17: Further prose work. Added non-normative examples. Clarified arcs. bent</sitem>
+ <sitem>1999-05-23: Edited for grammar and clarity. bent</sitem>
+ <sitem>1999-05-27: Final once-over before sending to group. Fixed sjd's email address. bent</sitem>
+ </slist>
+ </revisiondesc>
+</header>
+
+<body>
+ <div1><?Pub Dtl?>
+ <head>Introduction</head>
+ <p>This specification defines constructs that may be inserted into XML DTDs, schemas, and document instances to describe links between objects. A <termref def="dt-link">link</termref>, as the term is used here, is an explicit relationship between two or more data objects or portions of data objects. This specification is concerned with the syntax used to assert link existence and describe link characteristics. Implicit (unasserted) relationships, for example that of one word to the next or that of a word in a text to its entry in an on-line dictionary are obviously important, but outside its scope.</p>
+ <p>Links are asserted by <xtermref href="WD-xml-lang.html#dt-element">elements </xtermref> contained in <xtermref href="WD-xml-lang.html#dt-xml-doc">XML document instances</xtermref>. The simplest case is very like an HTML <code>A</code> link, and has these characteristics:
+ <ulist>
+ <item><p>The link is expressed at one of its ends (similar to the <code>A</code> element in some document)</p></item>
+ <item><p>Users can only initiate travel from that end to the other</p></item>
+ <item><p>The link's effect on windows, frames, go-back lists, stylesheets in use, and so on is mainly determined by browsers, not by the link itself. For example, traveral of <code>A</code> links normally replaces the current view, perhaps with a user option to open a new window.</p></item>
+ <item><p>The link goes to only one destination (although a server may have great freedom in finding or dynamically creating that destination).</p></item>
+ </ulist>
+ </p>
+ <p>While this set of characteristics is already very powerful and obviously has proven itself highly useful and effective, each of these assumptions also limits the range of hypertext functionality. The linking model defined here provides ways to create links that go beyond each of these specific characteristics, thus providing features previously available mostly in dedicated hypermedia systems.
+ </p>
+
+<div2>
+ <head>Origin and Goals</head>
+ <p>Following is a summary of the design principles governing XLink:
+ <olist>
+ <item><p>XLink must be straightforwardly usable over the Internet. </p></item>
+ <item><p>XLink must be usable by a wide variety of link usage domains and classes of linking application software.</p></item>
+ <item><p>XLink must support HTML 4.0 linking constructs.</p></item>
+ <item><p>The XLink expression language must be XML.</p></item>
+ <item><p>The XLink design must be formal, concise, and illustrative.</p></item>
+ <item><p>XLinks must be human-readable and human-writable.</p></item>
+ <item><p>XLinks may reside within or outside the documents in which the
+ participating resources reside. </p></item>
+ <item><p>XLink must represent the abstract structure and significance of links.</p></item>
+ <item><p>XLink must be feasible to implement.</p></item>
+ <item><p>XLink must be informed by knowledge of established hypermedia systems and standards.</p></item>
+ </olist>
+ </p>
+</div2>
+<!--Changed the list of requirements to reflect current XLink requirements
+document. bent-->
+
+<div2>
+ <head>Relationship to Existing Standards</head>
+ <p>Three standards have been especially influential:
+ <ulist>
+ <item><p><emph>HTML:</emph> Defines several SGML element types that represent links.</p></item>
+ <item><p><emph>HyTime:</emph> Defines inline and out-of-line link structures and some semantic features, including traversal control and presentation of objects. <!--Changed from "placement of objects into a display or other space" -elm-->
+ </p></item>
+ <item><p><emph>Text Encoding Initiative Guidelines (TEI P3):</emph> Provides structures for creating links, aggregate objects, and link collections out of them.</p></item>
+ </ulist>
+ </p>
+ <p>Many other linking systems have also informed this design, especially Dexter, FRESS, MicroCosm, and InterMedia.</p>
+</div2>
+
+<div2>
+ <head>Terminology</head>
+ <p>The following basic terms apply in this document. <!--<IMG
+ SRC="local://./linkdiag.gif">(figure to be inserted)-->
+ <glist>
+ <gitem>
+ <label><termdef id="dt-arc" term="Arc">arc</termdef></label>
+ <def><p>A symbolic representation of traversal behavior in links, especially the direction, context and timing of traversal.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-eltree" term="Element Tree">element tree</termdef></label>
+ <def><p>A representation of the relevant structure specified by the tags and attributes in an XML document, based on "groves" as defined in the ISO DSSSL standard. </p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-inline" term="In-Line Link">inline link</termdef></label>
+ <def><p>Abstractly, a <termref def="dt-link">link</termref> which serves as one of its own <termref def="dt-resource">resources</termref>. Concretely, a link where the content of the <termref def="dt-linkel">linking element</termref> serves as a <termref def="dt-particip-resource">participating resource</termref>.
+ HTML <code>A</code>, HyTime <code>clink</code>, and TEI <code>XREF</code>
+ are all inline links.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-link" term="Link">link</termdef></label>
+ <def><p>An explicit relationship between two or more data objects or portions of data objects.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-linkel" term="Linking Element">linking element </termdef></label>
+ <def><p>An <xtermref href="WD-xml-lang.html#dt-element">element</xtermref> that asserts the existence and describes the characteristics of a <termref def="dt-link"> link</termref>.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-local-resource" term="Local Resource">local resource</termdef></label>
+ <def><p>The content of an <termref def="dt-inline">inline</termref>linking element. Note that the content of the linking element could be explicitly pointed to by means of a regular <termref def="dt-locator">locator</termref> in the same linking element, in which case the resource is considered <termref def="dt-remote-resource"> remote</termref>, not local.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-locator" term="Locator">locator</termdef> </label>
+ <def><p>Data, provided as part of a link, which identifies a
+ <termref def="dt-resource">resource</termref>.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-multidir" term="Multi-Directional Link">multidirectional link</termdef></label>
+ <def><p>A <termref def="dt-link">link</termref> whose <termref def="dt-traversal"> traversal</termref> can be initiated from more than one of its <termref def="dt-particip-resource"> participating resources</termref>. Note that being able to "go back" after following a one-directional link does not make the link multidirectional.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-outofline" term="Out-of-line Link">out-of-line link</termdef></label>
+ <def><p>A <termref def="dt-link">link</termref> whose content does not serve as one of the link's <termref def="dt-particip-resource">participating resources </termref>. Such links presuppose a notion like <termref def="dt-xlg">extended link groups</termref>, which instruct application software where to look for links. Out-of-line links are generally required for supporting multidirectional <termref def="dt-traversal">traversal</termref> and for allowing read-only resources to have outgoing links.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-parsedq" term="Parsed">parsed</termdef></label> <def><p>In the context of link behavior, a parsed link is any link whose content is transcluded into the document where the link originated. The use of the term "parsed" directly refers to the concept in XML of a
+ parsed entity.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-particip-resource" term="Participating Resource"> participating resource</termdef></label>
+ <def><p>A <termref def="dt-resource">resource</termref> that belongs to a link. All resources are potential contributors to a link; participating resources are the actual contributors to a particular link.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-remote-resource" term="Remote Resource">remote resource</termdef></label>
+ <def><p>Any participating resource of a link that is pointed to with a locator. </p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-resource" term="Resource">resource</termdef></label>
+ <def><p>In the abstract sense, an addressable unit of information or service that is participating in a <termref def="dt-link">link</termref>. Examples include files, images, documents, programs, and query results. Concretely, anything reachable by the use of a <termref def="dt-locator">locator</termref> in some <termref def="dt-linkel">linking element</termref>. Note that this term and its definition are taken from the basic specifications governing the World Wide Web. <!--Joel notes: need link here. bent asks: A link?-->
+ </p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-subresource" term="sub-Resource">sub-resource</termdef></label>
+ <def><p>A portion of a resource, pointed to as the precise destination of a link. As one example, a link might specify that an entire document be retrieved and displayed, but that some specific part(s) of it is the specific linked data, to be treated in an application-appropriate manner such as indication by highlighting, scrolling, etc.</p></def>
+ </gitem>
+ <gitem>
+ <label><termdef id="dt-traversal" term="Traversal">traversal</termdef></label>
+ <def><p>The action of using a <termref def="dt-link">link</termref>; that is, of accessing a <termref def="dt-resource">resource</termref>. Traversal may be initiated by a user action (for example, clicking on the displayed content of a <termref def="dt-linkel">linking element</termref>) or occur under program control.</p></def>
+ </gitem>
+ </glist>
+ </p>
+</div2>
+
+<div2>
+ <head>Notation</head>
+ <p>The formal grammar for <termref def="dt-locator">locators</termref> is given using a simple Extended Backus-Naur Form (EBNF) location, as described in <xspecref href="http://www.w3.org/TR/REC-xml#sec-notation">the XML specification</xspecref>.</p>
+ <!-- fixed link to XML spec - bent -->
+</div2>
+</div1>
+
+<div1 id="addressing"><?Pub Dtl?>
+ <head>Locator Syntax</head>
+ <p>The locator for a <termref def="dt-resource">resource</termref> is typically provided by means of a Uniform Resource Identifier, or URI. XPointers can be used in conjunction with the URI structure, as fragment identifiers, to specify a more precise sub-resource. </p>
+ <!-- Removed the discussion of queries from the previous paragraph, due to contention within the WG. bent -->
+ <p>A locator generally contains a URI, as described in IETF RFCs <bibref ref="rfc1738"/> and <bibref ref="rfc1808"/>. As these RFCs state, the URI may include a trailing <emph>query</emph> (marked by a leading "<code>?</code>"), and be followed by a "<code>#</code>" and a <emph>fragment identifier</emph>, with the query interpreted by the host providing the indicated resource, and the interpretation of the fragment identifier dependent on the data type of the indicated resource.</p>
+ <!--Is there some restriction on URNs having queries and/or fragment identifiers? Since these RFCs don't mention URIs explicitly, should the wording here lead from URLs to URIs more explicitly? -elm-->
+ <p>In order to locate XML documents and portions of documents, a locator value may contain either a <xtermref href="http://www.w3.org/Addressing/rfc1738.txt"> URI</xtermref> or a fragment identifier, or both. Any fragment identifier for pointing into XML must be an <xtermref href="http://www.w3.org/TR/WD-xptr#dt-xpointer"> XPointer</xtermref>.</p>
+ <p>Special syntax may be used to request the use of particular processing models in accessing the locator's resource. This is designed to reflect the realities of network operation, where it may or may not be desirable to exercise fine control over the distribution of work between local and remote processors.
+ <scrap id="locator" lang="ebnf">
+ <head>Locator</head>
+ <prod id="nt-locator">
+ <lhs>Locator</lhs>
+ <rhs><nt def="nt-uri">URI</nt></rhs>
+ <rhs>| <nt def="nt-connector">Connector</nt> (<xnt href="http://www.w3.org/TR/WD-xptr">XPointer</xnt> | <xnt href="WD-xml-lang.html#NT-Name">Name</xnt>)</rhs>
+ <rhs>| <nt def="nt-uri">URI</nt> <nt def="nt-connector">Connector</nt> (<xnt href="http://www.w3.org/TR/WD-xptr">XPointer</xnt> | <xnt href="WD-xml-lang.html#NT-Name">Name</xnt>)</rhs>
+ </prod>
+ <prod id="nt-connector">
+ <lhs>Connector</lhs><rhs>'#' | '|'</rhs>
+ </prod>
+ <prod id="nt-uri">
+ <lhs>URI</lhs><rhs><xnt href="WD-xml-lang.html#NT-URLchar">URIchar*</xnt></rhs>
+ </prod>
+ </scrap>
+ </p>
+ <p><termdef id="dt-designated" term="Designated Resource">In this discussion, the term <term>designated resource</term> refers to the resource which an entire locator serves to locate.</termdef> The following rules apply:
+ <ulist>
+ <item>
+ <p><termdef id="dt-containing-resource" term="Containing Resource"> The URI, if provided, locates a resource called the <term>containing resource</term>.</termdef></p>
+ </item>
+ <item>
+ <p>If the URI is not provided, the containing resource is considered to be the document in which the linking element is contained.
+ </p></item>
+ <item>
+ <p><termdef id="dt-sub-resource" term="Sub-Resource">If an XPointer is provided, the designated resource is a <term>sub-resource</term>
+ of the containing resource; otherwise the designated resource is the
+ containing resource.</termdef></p>
+ </item>
+ <!--Is this now incorrect, given the nature of the switch from here() to origin()? -elm
+ Oy, yes, i think so. it will require some fun wording, though, so i haven't fixed it yet here -sjd-->
+ <item>
+ <p>If the <nt def="nt-connector">Connector</nt> is followed directly by a <xnt href="http://www.w3.org/TR/REC-xml#NT-Name">Name</xnt>, the <xnt href="http://www.w3.org/TR/REC-xml#NT-Name">Name</xnt> is shorthand for the XPointer"<code>id(Name)</code>"; that is, the sub-resource is the element in the containing resource that has an XML <xtermref href="http://www.w3.org/TR/REC-xml#sec-attrtypes">ID attribute</xtermref> whose value <xtermref href="http://www.w3.org/TR/REC-xml#dt-match">matches</xtermref> the <xnt href="http://www.w3.org/TR/REC-xml#NT-Name">Name</xnt>. This shorthand is to encourage use of the robust <code>id</code> addressing mode.</p>
+ </item>
+ <!-- fixed links to the XML recommendation - bent -->
+ <item>
+ <p>If the connector is "<code>#</code>", this signals an intent that the containing resource is to be fetched as a whole from the host that provides it, and that the XPointer processing to extract the sub-resource
+ is to be performed on the client, that is to say on the same system where the linking element is recognized and processed.</p>
+ </item>
+ <item>
+ <p>If the connector is "<code>|</code>", no intent is signaled as to what processing model is to be used to go about accessing the designated resource.</p>
+ </item>
+ </ulist>
+ </p>
+ <p>Note that the definition of a URI includes an optional query component. </p>
+ <p>In the case where the URI contains a query (to be interpreted by the server), information providers and authors of server software are urged to use queries as follows:
+ <scrap id="querysyntax" lang="ebnf">
+ <head>Query</head>
+ <prod id="nt-query">
+ <lhs>Query</lhs><rhs>'XML-XPTR=' (<xnt href="http://www.w3.org/TR/WD-xptr"> XPointer</xnt> | <xnt href="http://www.w3.org/TR/REC-xml#NT-Name">Name</xnt>)</rhs>
+ </prod>
+ </scrap>
+ </p>
+ <!-- fixed link to XML recommendation - bent -->
+</div1>
+
+<div1><?Pub Dtl?>
+ <head>Link Recognition</head>
+ <p>The existence of a <termref def="dt-link">link</termref> is asserted by a <termref def="dt-linkel">linking element</termref>. Linking elements must be recognized reliably by application software in order to provide appropriate display and behavior. There are several ways link recognition could be accomplished: for example, reserving element type names, reserving attributes names, leaving the matter of recognition entirely up to stylesheets and application software, or using the XLink <xtermref href="http://www.w3.org/TR/REC-xml-names/">namespace</xtermref> to specify element names and attribute names that would be recognized by namespace and XLink-aware processors. Using element and attribute names within the XLink namespace provides a balance between giving users control of their own markup language design and keeping the identification of linking elements simple and unambiguous.</p>
+ <p>The two approaches to identifying linking elements are relatively simple to implement. For example, here's how the HTML <code>A</code> element would be declared using attributes within the XLink namespace, and then how an element within the XLink namespace might do the same:
+ <eg>&lt;A xlink:type="simple" xlink:href="http://www.w3.org/TR/wd-xlink/"
+xlink:title="The Xlink Working Draft"&gt;The XLink Working Draft.&lt;/A&gt;</eg>
+ <eg>&lt;xlink:simple href="http://www.w3.org/TR/wd-xlink/"
+title="The XLink Working Draft"&gt;The XLink Working Draft&lt;/xlink:simple&gt;</eg>
+ Any arbitrary element can be made into an XLink by using the <code>xlink:type</code> attribute. And, of course, the explicit XLink elements may be used, as well. This document will go on to describe the linking attributes that are associated with linking elements. It may be assumed by the reader that these attributes would require the <code>xlink</code> namespace prefix if they existed within an arbitrary element, or that they may be used directly if they exist within an explicit Xlink element.</p>
+ <!-- heavily modified this section to accomodate namespace-aware link recognition - bent -->
+</div1>
+
+<!-- Rewrote this entire section. - bent -->
+<div1>
+ <head>Linking Attributes</head>
+ <p>XLink has several attributes associated with the variety of links it may represent. These attributes define four main concepts: locators, arcs, behaviors, and semantics. <emph>Locators</emph> define where the actual resource is located. <emph>Arcs</emph> define the traversal of links. Where does the link come from? Where does it go to? All this information can be stored in the arc attributes. <emph>Behaviors</emph> define how the link is activated, and what the application should do with the resource being linked to. <emph>Semantics</emph> define useful information that the application may use, and enables the link for such specalized targets as constricted devices and accessibility software.</p>
+
+ <div2 id="link-locators">
+ <head>Locator Attributes</head>
+ <p>The only locator attribute at this time is <code>href</code>. This attribute must contain either a string in the form of a URI that defines the remote resource being linked to, a string containing a fragment identifier that links to a local resource, or a string containing a URI with a fragment identifier concacenated onto it.</p>
+ </div2>
+
+ <div2 id="link-arcs">
+ <head>Arc Attributes</head>
+ <p>Arcs contain two attributes, <code>from</code> and <code>to</code>. The <code>from</code> attribute may contain a string containing the content of a <code>role</code> attribute from the resource being linked from. The purpose of the <code>from</code> attribute is to define where this link is being actuated from.</p>
+ <p>The <code>to</code> attribute may contain a string containing the content of a <code>role</code> attribute from the resource being linked to. The purpose of the <code>to</code> attribute is to define where this link traverses to.</p>
+ <p>The application may use this information in a number of ways, especially in a complex hypertext system, but it is mainly useful in providing context for application behavior.</p>
+ <!-- I'm at a loss as to how to describe arcs more clearly than this. I don't want to devolve into discussions of directed graphs and n-ary links. -bent -->
+ </div2>
+
+ <div2 id="link-behaviors">
+ <head>Behavior Attributes</head>
+ <p>There are two attributes associated with behavior: <code>show</code> and <code>actuate</code>. The <code>show</code> attribute defines how the remote resource is to be revealed to the user. It has three options: <code>new</code>, <code>parsed</code>, and <code>replace</code>. The <code>new</code> option indicates that the remote resource should be shown in a new window (or other device context) without replacing the previous content. The <code>parsed</code> option, relating directly to the XML concept of a parsed entity, indicates that the content should be integrated into the document from which the link was actuated. The <code>replace</code> option is the one most commonly seen on the World Wide Web, where the document being linked from is entirely replaced by the object being linked to.</p>
+ <p>The <code>actuate</code> attribute defines how the link is initiated. It has two options: <code>user</code> and <code>auto</code>. The <code>user</code> option indicates that the link must be initiated by some sort of human-initiated selection, such as clicking on an HTML anchor. The <code>auto</code> option indicates that the link is automatically initiated when the application deems that the user has reached the link. It then follows the behavior set out in the <code>show</code> option.</p>
+ <!-- Something should be put here in terms of an example. Idea: "A" link versus automatically updating encyclopedia. -bent -->
+ </div2>
+
+ <div2 id="link-semantics">
+ <head>Semantic Attributes</head>
+ <p>There are two attributes associated with semantics, <code>role</code> and <code>title</code>. The <code>role</code> attribute is a generic string used to describe the function of the link's content. For example, a poem might have a link with a <code>role="stanza"</code>. The <code>role</code> is also used as an identifier for the <code>from</code> and <code>to</code> attributes of arcs.</p>
+ <p>The <code>title</code> attribute is designed to provide human-readable text describing the link. It is very useful for those who have text-based applications, whether that be due to a constricted device that cannot display the link's content, or if it's being read by an application to a visually-impaired user, or if it's being used to create a table of links. The <code>title</code> attribute contains a simple, descriptive string.</p>
+ </div2>
+</div1>
+
+<div1 id="linking-elements">
+ <head>Linking Elements</head>
+ <p>There are several kinds of linking elements in XLink: <code>simple</code> links, <code>locators</code>, <code>arcs</code>, and <code>extended</code> links. These elements may be instantiated via element declarations from the XLink namespace, or they may be instantiated via attribute declarations from the XLink namespace. Both kinds of instantiation are described in the definition of each linking element.</p>
+ <p>The <code>simple</code> link is used to declare a link that approximates the functionality of the HTML <code>A</code> element. It has, however, a few added features to increase its value, including the potential declaration of semantics and behavior. The <code>locator</code> elements are used to define the resource being linked to. Some links may contain multiple locators, representing a choice of potential links to be traversed. The <code>arcs</code> are used to define the traversal semantics of the link. Finally, an <code>extended</code> linking element differs from a simple link in that it can connect any number of resources, not just one local resource (optionally) and one remote resource, and in that extended links are more often out-of-line than simple links.</p>
+
+<div2 id="simple-links">
+ <head>Simple Links</head>
+ <p id="dt-simplelink"><termdef id="dt-simpleline" term="Simple Link"><term>Simple links</term> can be used for purposes that approximate the functionality of a basic HTML <code>A</code> link, but they can also support a limited amount of additional functionality. Simple links have only one locator and thus, for convenience, combine the functions of a linking element and a locator into a single element.</termdef> As a result of this combination, the simple linking element offers both a locator attribute and all the behavior and semantic attributes.</p>
+ <p>The following are two examples of linking elements, each showing all the possible attributes that can be associated with a simple link. Here is the explicit XLink simple linking element.
+ <eg>&lt;!ELEMENT xlink:simple ANY&gt;
+&lt;!ATTLIST xlink:slink
+ href CDATA #REQUIRED
+ role CDATA #IMPLIED
+ title CDATA #IMPLIED
+ show (new|parsed|replace) "replace"
+ actuate (user|auto) "user"
+&gt;</eg>
+ And here is how to make an arbitrary element into a simple link.
+ <eg>&lt;!ELEMENT xlink:simple ANY&gt;
+&lt;!ATTLIST foo
+ xlink:type (simple|extended|locator|arc) #FIXED "simple"
+ xlink:href CDATA #REQUIRED
+ xlink:role CDATA #IMPLIED
+ xlink:title CDATA #IMPLIED
+ xlink:show (new|parsed|replace) "replace"
+ xlink:actuate (user|auto) "user"
+&gt;</eg>
+ Here is how the first example might look in a document:
+<eg>&lt;xlink:simple href="http://www.w3.org/TR/wd-xlink" role="working draft"
+ title="The XLink Working Draft" show="replace" actuate="user"&gt;
+The XLink Working Draft.&lt;/xlink:simple&gt;</eg>
+<eg>&lt;foo xlink:href="http://www.w3.org/TR/wd-xlink" xlink:role="working draft"
+ xlink:title="The XLink Working Draft" xlink:show="new" xlink:actuate="user"&gt;
+The XLink Working Draft.&lt;/foo&gt;</eg>
+ Alternately, a simple link could be as terse as this:
+<eg>&lt;foo xlink:href="#stanza1"&gt;The First Stanza.&lt;/foo&gt;</eg>
+ </p>
+ <p>
+ There are no constraints on the contents of a simple linking element. In
+ the sample declaration above, it is given a content model of <code>ANY</code>
+ to illustrate that any content model or declared content is acceptable. In
+ a valid document, every element that is significant to XLink must still conform
+ to the constraints expressed in its governing DTD.</p>
+ <p>Note that it is meaningful to have an out-of-line simple link, although
+ such links are uncommon. They are called "one-ended" and are typically used
+ to associate discrete semantic properties with locations. The properties might
+ be expressed by attributes on the link, the link's element type name, or in
+ some other way, and are not considered full-fledged resources of the link.
+ Most out-of-line links are extended links, as these have a far wider range
+ of uses.</p>
+</div2>
+
+<div2 id="extended-link">
+<head>Extended Links</head>
+ <p><termdef id="dt-extendedlink" term="Extended Link">An <term>extended link</term> differs from a simple link in that it can connect any number of resources, not just one local resource (optionally) and one remote resource, and in that extended links are more often out-of-line than simple links.</termdef></p>
+ <p>These additional capabilities of extended links are required for:
+ <ulist>
+ <item>
+ <p>Enabling outgoing links in documents that cannot be modified to add an inline link</p>
+ </item>
+ <item>
+ <p>Creating links to and from resources in formats with no native support for embedded links (such as most multimedia formats)</p>
+ </item>
+ <item>
+ <p>Applying and filtering sets of relevant links on demand</p>
+ </item>
+ <item><p>Enabling other advanced hypermedia capabilities</p></item>
+ </ulist>
+ </p>
+ <p>Application software might be expected to provide traversal among all of a link's participating resources (subject to semantic constraints outside the scope of this specification) and to signal the fact that a given resource or sub-resource participates in one or more links when it is displayed (even though there is no markup at exactly that point to signal it).</p>
+ <p>A linking element for an extended link contains a series of <xtermref href="http://www.w3.org/TR/REC-xml/#dt-parentchild">child elements</xtermref> that serve as locators and arcs. Because an extended link can have more than one remote resource, it separates out linking itself from the mechanisms used to locate each resource (whereas a simple link combines the two).</p>
+ <p>The <code>xlink:type</code> attribute value for an extended link must be <code> extended</code>, if the link is being instantiated on an arbitrary element. Note that extended links introduce variants of the <code>show</code> and <code>actuate</code> behavior attributes. These attributes, the <code>showdefault</code> and <code>actuatedefault</code> define the same behavior as their counterparts. However, in this case, they are considered to define the default behavior for all the linking elements that they contain.</p>
+ <p>However, when a linking element within an extended link has a <code>show</code> or <code>actuate</code> attribute of its own, that attribute overrides the defaults set on the extended linking element.</p>
+ <p>The extended linking element itself retains those attributes relevant to the link as a whole, and to its local resource if any. Following are two sample declaration for an extended link. The first is an example of the explicit XLink extended link:
+
+<eg>&lt;!ELEMENT xlink:extended ((xlink:arc | xlink:locator)*)>
+&lt;!ATTLIST xlink:extended
+ role CDATA #IMPLIED
+ title CDATA #IMPLIED
+ showdefault (new|parsed|replace) #IMPLIED
+ actuatedefault (user|auto) #IMPLIED &gt;</eg>
+
+ The second is an example of an arbitrary element being used an extended link:
+
+<eg>&lt;!ELEMENT foo ((xlink:arc | xlink:locator)*)>
+&lt;!ATTLIST foo
+ xlink:type (simple|extended|locator|arc) #FIXED "extended"
+ xlink:role CDATA #IMPLIED
+ xlink:title CDATA #IMPLIED
+ xlink:showdefault (new|parsed|replace) #IMPLIED
+ xlink:actuatedefault (user|auto) #IMPLIED &gt;</eg>
+
+ The following two examples demonstrate how each of the above might appear within a document instance. Note that the content of these examples would be other elements. For brevity's sake, they've been left blank. The first example shows how the link might appear, using an explicit XLink extended link:
+
+<eg>&lt;xlink:extended role="address book" title="Ben's Address Book" showdefault="replace" actuatedefault="user"&gt; ... &lt;/xlink:extended&gt;</eg>
+
+ And the second shows how the link might appear, using an arbitrary element:
+
+<eg>&lt;foo xlink:type="extended" xlink:role="address book" xlink:title="Ben's Address Book" xlink:showdefault="replace" xlink:actuatedefault="user"&gt; ... &lt;/foo&gt;</eg>
+ </p>
+
+</div2>
+
+<div2 id="xlink-arcs">
+ <head>Arc Elements</head>
+ <p><termdef id="dt-arc" term="Arc">An <term>arc</term> is contained within an extended link for the purpose of defining traversal behavior.</termdef> More than one arc may be associated with a link. Otherwise, arc elements function exactly as the arc attributes might lead on to expect.</p>
+ <!-- More here? -bent -->
+</div2>
+
+</div1>
+<div1>
+<head>Conformance</head>
+<p>An element conforms to XLink if: <olist>
+<item><p>The element has an <code>xml:link</code> attribute whose value is
+one of the attribute values prescribed by this specification, and</p></item>
+<item><p>the element and all of its attributes and content adhere to the
+syntactic
+requirements imposed by the chosen <code>xml:link</code> attribute value,
+as prescribed in this specification.</p></item>
+</olist></p>
+<p>Note that conformance is assessed at the level of individual elements,
+rather than whole XML documents, because XLink and non-XLink linking mechanisms
+may be used side by side in any one document.</p>
+<p>An application conforms to XLink if it interprets XLink-conforming elements
+according to all required semantics prescribed by this specification and,
+for any optional semantics it chooses to support, supports them in the way
+prescribed. <!--If/when we split out the XLinkfunctionality
+(e.g. inline links and out-of-line links), the
+conformance language will have to address the different
+levels of support. -elm--> </p>
+</div1>
+</body><back>
+<div1 id="unfinished">
+<head>Unfinished Work</head>
+<div2>
+<head>Structured Titles</head>
+<p>The simple title mechanism described in this draft is insufficient to cope
+with internationalization or the use of multimedia in link titles. A future
+version will provide a mechanism for the use of structured link titles.</p>
+</div2>
+</div1>
+<div1>
+<head>References</head>
+<blist>
+<bibl id="xptr" key="XPTR">Eve Maler and Steve DeRose, editors. <titleref>
+XML Pointer Language (XPointer) V1.0</titleref>. ArborText, Inso, and Brown
+University. Burlington, Seekonk, et al.: World Wide Web Consortium, 1998.
+(See <loc href="http://www.w3.org/TR/WD-xptr">http://www.w3.org/TR/WD-xptr
+ </loc>.)</bibl>
+<bibl id="iso10744" key="ISO/IEC 10744">ISO (International Organization for
+Standardization). <titleref>ISO/IEC 10744-1992 (E). Information technology
+- Hypermedia/Time-based Structuring Language (HyTime).</titleref> [Geneva]:
+International Organization for Standardization, 1992. <titleref>Extended
+Facilities
+Annex.</titleref> [Geneva]: International Organization for Standardization,
+1996. (See <loc
+href="http://www.ornl.gov/sgml/wg8/hytime/html/is10744r.html">http://www.ornl.go
+v/sgml/wg8/hytime/html/is10744r.html </loc> <!--p m-r says this link is
+broken. elm --> ).</bibl>
+<bibl id="rfc1738" key="IETF RFC 1738">IETF (Internet Engineering Task
+Force). <titleref>
+RFC 1738: Uniform Resource Locators</titleref>. 1991. (See <loc
+href="http://www.w3.org/Addressing/rfc1738.txt">
+http://www.w3.org/Addressing/rfc1738.txt</loc>).</bibl>
+<bibl id="rfc1808" key="IETF RFC 1808">IETF (Internet Engineering Task
+Force). <titleref>
+RFC 1808: Relative Uniform Resource Locators</titleref>. 1995. (See <loc
+href="http://www.w3.org/Addressing/rfc1808.txt">http://www.w3.org/Addressing/rfc
+1808.txt </loc>).</bibl>
+<bibl id="tei" key="TEI">C. M. Sperberg-McQueen and Lou Burnard, editors.
+<titleref>
+Guidelines for Electronic Text Encoding and Interchange</titleref>. Association
+for Computers and the Humanities (ACH), Association for Computational
+Linguistics
+(ACL), and Association for Literary and Linguistic Computing (ALLC). Chicago,
+Oxford: Text Encoding Initiative, 1994. <!-- add cite to DOM work --> </bibl>
+<bibl id="chum" key="CHUM">]Steven J. DeRose and David G. Durand. 1995. "The
+TEI Hypertext Guidelines." In <titleref>Computing and the Humanities
+</titleref>29(3).
+Reprinted in <titleref>Text Encoding Initiative: Background and
+Context</titleref>,
+ed. Nancy Ide and Jean ronis <!-- fix this name -->, ISBN 0-7923-3704-2. </bibl>
+</blist></div1>
+</back></spec>
+<?Pub *0000052575?>
diff --git a/test/wap.xml b/test/wap.xml
new file mode 100644
index 0000000..2795509
--- /dev/null
+++ b/test/wap.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
+"http://dark.wapit.com/vswap/tests/wap/DTD/wml11.dtd">
+<!-- (C) 1999, 2000 WAP Forum Ltd. All rights reserved -->
+<wml>
+<card id="card1">
+<onevent type="onenterforward">
+<go href="/vswap/run/result.eml">
+ <postfield name="var" value="&#36;test"/>
+ <postfield name="v" value="dark"/>
+ <postfield name="ts" value="0003"/>
+ <postfield name="tp" value="wml/state/variables/parsing/1"/>
+ <postfield name="ti" value="1"/>
+ <postfield name="expected" value="var:pass"/>
+</go>
+</onevent>
+<p>If automatic testing failed, select <anchor>Failed<go
+href='/vswap/run/result.eml'>
+ <postfield name="SUBMIT" value="No"/><postfield name="v"
+value="dark"/>
+ <postfield name="ts" value="0003"/>
+ <postfield name="tp" value="wml/state/variables/parsing/1"/>
+ <postfield name="ti" value="1"/>
+ <postfield name="expected" value="var:pass"/></go></anchor>.</p>
+</card>
+
+</wml>
diff --git a/test/warning/ent8 b/test/warning/ent8
new file mode 100644
index 0000000..6240939
--- /dev/null
+++ b/test/warning/ent8
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE a SYSTEM "a.dtd">
+<a> &unknown; but Okay </a>
diff --git a/test/warning/ent9 b/test/warning/ent9
new file mode 100644
index 0000000..009e322
--- /dev/null
+++ b/test/warning/ent9
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
+<!ENTITY xml "<prefix:node>prefix is indeclared here</prefix:node>">
+]>
+<EXAMPLE xmlns:prefix="http://example.com">
+ &xml;
+</EXAMPLE>
diff --git a/test/wml.xml b/test/wml.xml
new file mode 100644
index 0000000..1cfecc7
--- /dev/null
+++ b/test/wml.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" ?>
+<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
+<wml>
+ <card id="card1" title="Rubriques 75008">
+ <p>
+ <a href="rubmenu.asp?CP=75008&#38;RB=01">Cin&#233;ma</a><br/>
+ </p>
+
+</card>
+</wml>
+
diff --git a/test/xhtml1 b/test/xhtml1
new file mode 100644
index 0000000..3b5107a
--- /dev/null
+++ b/test/xhtml1
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- 3.1.1 3/ -->
+<html xml:lang="en" lang="en">
+ <head>
+ <title>Virtual Library</title>
+ </head>
+ <!-- 4.8 -->
+ <script type="text/javascript">
+ ... unescaped script content ...
+ </script>
+ <body>
+ <p>Moved to <a href="http://example.org/">example.org</a>.</p>
+ </body>
+ <!-- C2 -->
+ <img src="foo.gif" alt="foo"/>
+ <!-- C3 -->
+ <p/>
+ <!-- C7 -->
+ <p lang="fr">coucou</p>
+ <p xml:lang="fr">salut</p>
+ <!-- C8 -->
+ <p name="fragid">test</p>
+ <!-- 4.5 -->
+ <dl compact="">
+ <dt>Internet Engineering Task Force</dt>
+ <dd>An organization which establishes technical standards for the Internet</dd>
+ </dl>
+
+</html>
+
+
diff --git a/test/xml1 b/test/xml1
new file mode 100644
index 0000000..40df24a
--- /dev/null
+++ b/test/xml1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE test [
+<!ENTITY example "<p>An ampersand (&#38;#38;) may be escaped
+ numerically (&#38;#38;#38;) or with a general entity
+ (&amp;amp;).</p>" >
+]>
+<test>&example;</test>
diff --git a/test/xml2 b/test/xml2
new file mode 100644
index 0000000..922314b
--- /dev/null
+++ b/test/xml2
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<!DOCTYPE test [
+<!ELEMENT test (#PCDATA) >
+<!ENTITY % xx '&#37;zz;'>
+<!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >' >
+%xx;
+]>
+<test>This sample shows a &tricky; method.</test>
diff --git a/test/xsdtest/.memdump b/test/xsdtest/.memdump
new file mode 100644
index 0000000..b4701ba
--- /dev/null
+++ b/test/xsdtest/.memdump
@@ -0,0 +1,4 @@
+ 12:22:54 PM
+
+ MEMORY ALLOCATED : 0, MAX was 592063
+BLOCK NUMBER SIZE TYPE
diff --git a/test/xsdtest/Makefile b/test/xsdtest/Makefile
new file mode 100644
index 0000000..7972f0e
--- /dev/null
+++ b/test/xsdtest/Makefile
@@ -0,0 +1,2 @@
+xsdtestsuite.xml: xsdtest.xsl xsdtest.xml
+ xsltproc xsdtest.xsl xsdtest.xml > xsdtestsuite.xml
diff --git a/test/xsdtest/xsdtest.xml b/test/xsdtest/xsdtest.xml
new file mode 100644
index 0000000..b8a6de9
--- /dev/null
+++ b/test/xsdtest/xsdtest.xml
@@ -0,0 +1,806 @@
+<xsdtest>
+<datatype name="dateTime">
+<valid>2001-12-01T19:45:00</valid>
+<valid>2001-12-01T19:45:00Z</valid>
+<valid>2001-12-01T19:45:00-11:59</valid>
+<valid>0001-01-12T00:00:00+12:00</valid>
+<invalid>2001-12-1T19:45:00+24:00</invalid>
+<invalid>2001-12-1T19:45:00</invalid>
+<equiv>
+<class>
+ <value>2001-12-01T19:45:00</value>
+ <value>2001-12-01T19:45:00.00</value>
+</class>
+<class>
+ <value>2001-12-01T19:45:00Z</value>
+ <value>2001-12-01T19:45:00.00Z</value>
+ <value>2001-12-01T20:45:00+01:00</value>
+</class>
+</equiv>
+</datatype>
+<datatype name="anyURI">
+<valid>foobar</valid>
+<valid>http://www.example.com</valid>
+<valid>http://ji%6d@www.example.com</valid>
+<valid>http://www.example.co%6d</valid>
+<valid>nosuchscheme:stuff</valid>
+<invalid>foo$bar:stuff</invalid>
+<invalid>f%oobar</invalid>
+</datatype>
+<datatype name="integer">
+<valid>10</valid>
+<valid>01</valid>
+<valid>0123456789</valid>
+<valid>+10</valid>
+<valid>-10</valid>
+<invalid>1.0</invalid>
+<invalid>.1</invalid>
+<valid>9999999999999999999999999999999</valid>
+<invalid>1.</invalid>
+<invalid>0.</invalid>
+<equiv>
+<class>
+ <value>0</value>
+ <value>+0</value>
+ <value>-0</value>
+ <value>00</value>
+</class>
+<class>
+ <value>10</value>
+ <value>+10</value>
+ <value>+0010</value>
+ <value>010</value>
+</class>
+<class>
+ <value>-10</value>
+ <value>-0010</value>
+ <value>-010</value>
+</class>
+</equiv>
+</datatype>
+<datatype name="duration">
+<valid>P1Y</valid>
+<valid>P1Y0M2DT17H5M12S</valid>
+<valid>-P1Y</valid>
+<valid>P60D</valid>
+<valid>PT24H</valid>
+<valid>PT1.2S</valid>
+<invalid>P24h</invalid>
+<invalid>P24H</invalid>
+<invalid>P1YT</invalid>
+<invalid>P</invalid>
+<invalid>-P</invalid>
+<equiv>
+ <class>
+ <value>-P6M</value>
+ </class>
+ <class>
+ <value>P0Y</value>
+ <value>-P0Y</value>
+ </class>
+ <class>
+ <value>P1Y</value>
+ <value>P001Y</value>
+ <value>P001Y0M</value>
+ <value>P1Y0M0DT0H0M0.0S</value>
+ </class>
+ <class>
+ <value>P6M</value>
+ </class>
+ <class>
+ <value>PT6M</value>
+ </class>
+ <class>
+ <value>PT1S</value>
+ <value>PT1.0S</value>
+ </class>
+</equiv>
+<lessThan>
+ <value>PT1M</value>
+ <value>PT61S</value>
+</lessThan>
+<lessThan>
+ <value>PT59S</value>
+ <value>PT1M</value>
+</lessThan>
+<incomparable>
+ <value>PT60S</value>
+ <value>PT1M</value>
+</incomparable>
+<lessThan>
+ <value>PT1H</value>
+ <value>PT61M</value>
+</lessThan>
+<lessThan>
+ <value>PT59M</value>
+ <value>PT1H</value>
+</lessThan>
+<incomparable>
+ <value>PT60M</value>
+ <value>PT1H</value>
+</incomparable>
+<lessThan>
+ <value>P1D</value>
+ <value>PT25H</value>
+</lessThan>
+<lessThan>
+ <value>PT23H</value>
+ <value>P1D</value>
+</lessThan>
+<incomparable>
+ <value>P1D</value>
+ <value>PT24H</value>
+</incomparable>
+<lessThan>
+ <value>P1Y</value>
+ <value>P13M</value>
+</lessThan>
+<lessThan>
+ <value>P11M</value>
+ <value>P1Y</value>
+</lessThan>
+<incomparable>
+ <value>P12M</value>
+ <value>P1Y</value>
+</incomparable>
+<lessThan>
+ <value>P364D</value>
+ <value>P1Y</value>
+</lessThan>
+<incomparable>
+ <value>P1Y</value>
+ <value>P365D</value>
+</incomparable>
+<incomparable>
+ <value>P1Y</value>
+ <value>P366D</value>
+</incomparable>
+<lessThan>
+ <value>P1Y</value>
+ <value>P367D</value>
+</lessThan>
+<lessThan>
+ <value>P149D</value>
+ <value>P5M</value>
+</lessThan>
+<incomparable>
+ <value>P150D</value>
+ <value>P5M</value>
+</incomparable>
+<incomparable>
+ <value>P151D</value>
+ <value>P5M</value>
+</incomparable>
+<incomparable>
+ <value>P152D</value>
+ <value>P5M</value>
+</incomparable>
+<incomparable>
+ <value>P153D</value>
+ <value>P5M</value>
+</incomparable>
+<lessThan>
+ <value>P5M</value>
+ <value>P154D</value>
+</lessThan>
+<lessThan>
+ <value>P27D</value>
+ <value>P1M</value>
+</lessThan>
+<incomparable>
+ <value>P28D</value>
+ <value>P1M</value>
+</incomparable>
+<incomparable>
+ <value>P29D</value>
+ <value>P1M</value>
+</incomparable>
+<incomparable>
+ <value>P30D</value>
+ <value>P1M</value>
+</incomparable>
+<incomparable>
+ <value>P31D</value>
+ <value>P1M</value>
+</incomparable>
+<lessThan>
+ <value>P1M</value>
+ <value>P32D</value>
+</lessThan>
+</datatype>
+<datatype name="time">
+<valid>12:45:00</valid>
+<valid>12:45:00Z</valid>
+</datatype>
+<datatype name="date">
+<valid>1886-12-01</valid>
+<valid>1886-12-01Z</valid>
+<lessThan>
+ <value>1066-12-31</value>
+ <value>1900-01-01</value>
+</lessThan>
+<lessThan>
+ <value>1900-01-01</value>
+ <value>1900-01-02</value>
+</lessThan>
+</datatype>
+<datatype name="gYearMonth">
+<valid>1996-12</valid>
+<valid>1996-01</valid>
+<valid>1996-01Z</valid>
+<invalid>1996-00</invalid>
+<equiv>
+<class><value>1996-01</value></class>
+<class>
+ <value>1996-01Z</value>
+ <value>1996-01+00:00</value>
+ <value>1996-01-00:00</value>
+</class>
+<class><value>1996-01+01:00</value></class>
+<class><value>1996-01-01:00</value></class>
+</equiv>
+</datatype>
+<datatype name="gYear">
+<valid>2001</valid>
+<valid>2001Z</valid>
+<lessThan>
+ <value>1999</value>
+ <value>2000</value>
+</lessThan>
+<lessThan>
+ <value>1999+07:00</value>
+ <value>2000+07:00</value>
+</lessThan>
+</datatype>
+<datatype name="gMonthDay">
+<valid>--12-01</valid>
+<valid>--12-01Z</valid>
+<lessThan>
+ <value>--12-01</value>
+ <value>--12-04</value>
+</lessThan>
+<lessThan>
+ <value>--11-17</value>
+ <value>--12-04</value>
+</lessThan>
+</datatype>
+<datatype name="gDay">
+<valid>---20</valid>
+<valid>---20Z</valid>
+<lessThan>
+ <value>---01</value>
+ <value>---31</value>
+</lessThan>
+</datatype>
+<datatype name="gMonth">
+<valid>--12</valid>
+<valid>--01</valid>
+<valid>--01Z</valid>
+<valid> --12 </valid>
+<invalid>---01</invalid>
+<invalid>--00</invalid>
+<invalid>--13</invalid>
+<invalid>- -13</invalid>
+<lessThan>
+ <value>--01</value>
+ <value>--12</value>
+</lessThan>
+<lessThan>
+ <value>--01</value>
+ <value>--02</value>
+</lessThan>
+</datatype>
+<datatype name="boolean">
+<valid>true</valid>
+<valid>false</valid>
+<valid>0</valid>
+<valid>1</valid>
+<invalid>00</invalid>
+<invalid>00</invalid>
+<invalid>01</invalid>
+<equiv>
+<class><value>true</value><value>1</value></class>
+<class><value>false</value><value>0</value></class>
+</equiv>
+</datatype>
+<datatype name="base64Binary">
+<valid>AAAA</valid>
+<valid>abcd efgh ijkl mnop qrst uvwx yzAB CDEF GHIJ KLMN OPQR
+STUV WXYZ 0123 4567 89+/</valid>
+<valid>BA==</valid>
+<valid></valid>
+<valid>BA==</valid>
+<valid>BQ==</valid>
+<valid>Bg==</valid>
+<valid>Bw==</valid>
+<valid>BBA=</valid>
+<valid>BBA=</valid>
+<valid>BBE=</valid>
+<valid>BBI=</valid>
+<valid>BBM=</valid>
+<valid>BBQ=</valid>
+<valid>BBU=</valid>
+<valid>BBY=</valid>
+<valid>BBc=</valid>
+<valid>BBg=</valid>
+<valid>BBk=</valid>
+<valid>BBo=</valid>
+<valid>BBs=</valid>
+<valid>BBw=</valid>
+<valid>BB0=</valid>
+<valid>BB4=</valid>
+<valid>BB8=</valid>
+<invalid>====</invalid>
+<invalid>BB==</invalid>
+<invalid>BBB=</invalid>
+<invalid>B===</invalid>
+<invalid>B</invalid>
+<equiv>
+<class>
+<value>deadbeef</value>
+<value>d&#xA;&#xD;&#x9;e a d
+b eef </value>
+</class>
+<class>
+<value>DEADBEEF</value>
+<value>D&#xA;&#xD;&#x9;E A D
+B EEF </value>
+</class>
+</equiv>
+<length value="0"></length>
+<length value="6">deadbeef</length>
+<length value="1">BA==</length>
+<length value="2">BBA=</length>
+<length value="3">dead</length>
+<length value="4">deadBA==</length>
+</datatype>
+<datatype name="hexBinary">
+<valid>deadbeef</valid>
+<valid></valid>
+<valid>0123456789ABCDEFabcdef</valid>
+<invalid>00 00</invalid>
+<invalid>00.00</invalid>
+<invalid>0G</invalid>
+<equiv>
+ <class>
+ <value>00</value>
+ <value>
+ 00
+ </value>
+ </class>
+ <class>
+ <value>01</value>
+ </class>
+ <class>
+ <value>10</value>
+ </class>
+ <class>
+ <value>0a</value>
+ <value>0A</value>
+ </class>
+</equiv>
+<length value="0"></length>
+<length value="1">00</length>
+<length value="2">0000</length>
+<length value="2"> 0000 </length>
+<length value="2">AAAA</length>
+</datatype>
+<datatype name="float">
+<valid>1.0</valid>
+<valid>1.</valid>
+<valid>.1</valid>
+<invalid>- 1</invalid>
+<invalid>1 .0</invalid>
+<invalid>+INF</invalid>
+<invalid>+NaN</invalid>
+<invalid>-NaN</invalid>
+<equiv>
+<class>
+ <value>0</value>
+ <value>-0</value>
+ <value>+0</value>
+ <value> 0 </value>
+ <value> 0. </value>
+ <value> .0 </value>
+ <value> 0.0 </value>
+ <value> 0e0 </value>
+ <value> 0E0 </value>
+ <value> 0E+0 </value>
+ <value> 0E-0 </value>
+</class>
+<class>
+ <value>1E0</value>
+ <value>0.1E1</value>
+ <value>10E-1</value>
+ <value>+1</value>
+</class>
+<class>
+ <value>-1</value>
+</class>
+<class>
+ <value>INF</value>
+ <value>INF </value>
+</class>
+<class>
+ <value>-INF</value>
+ <value>-INF </value>
+</class>
+<class>
+ <value>NaN</value>
+ <value> NaN </value>
+</class>
+</equiv>
+<lessThan>
+ <value>-INF</value>
+ <value>-1000</value>
+</lessThan>
+<lessThan>
+ <value>1000</value>
+ <value>INF</value>
+</lessThan>
+<lessThan>
+ <value>-1</value>
+ <value>1</value>
+</lessThan>
+<lessThan>
+ <value>0</value>
+ <value>1</value>
+</lessThan>
+<lessThan>
+ <value>-1</value>
+ <value>0</value>
+</lessThan>
+</datatype>
+<datatype name="double">
+<valid>1.0</valid>
+<valid>1.</valid>
+<valid>.1</valid>
+<invalid>- 1</invalid>
+<invalid>1 .0</invalid>
+<invalid>+INF</invalid>
+<invalid>+NaN</invalid>
+<invalid>-NaN</invalid>
+<equiv>
+<class>
+ <value>0</value>
+ <value>-0</value>
+ <value>+0</value>
+ <value> 0 </value>
+ <value> 0. </value>
+ <value> .0 </value>
+ <value> 0.0 </value>
+ <value> 0e0 </value>
+ <value> 0E0 </value>
+ <value> 0E+0 </value>
+ <value> 0E-0 </value>
+</class>
+<class>
+ <value>1E0</value>
+ <value>0.1E1</value>
+ <value>10E-1</value>
+ <value>+1</value>
+</class>
+<class>
+ <value>-1</value>
+</class>
+<class>
+ <value>INF</value>
+ <value>INF </value>
+</class>
+<class>
+ <value>-INF</value>
+ <value>-INF </value>
+</class>
+<class>
+ <value>NaN</value>
+ <value> NaN </value>
+</class>
+</equiv>
+<lessThan>
+ <value>-INF</value>
+ <value>-1000</value>
+</lessThan>
+<lessThan>
+ <value>1000</value>
+ <value>INF</value>
+</lessThan>
+<lessThan>
+ <value>-1</value>
+ <value>1</value>
+</lessThan>
+<lessThan>
+ <value>0</value>
+ <value>1</value>
+</lessThan>
+<lessThan>
+ <value>-1</value>
+ <value>0</value>
+</lessThan>
+</datatype>
+<datatype name="QName">
+<valid>foo</valid>
+<valid xmlns:x="http://www.example.com">x:foo</valid>
+<invalid>y:foo</invalid>
+<equiv xmlns:x="http://www.example.com"
+ xmlns:y="http://www.example.com/"
+ xmlns:z="http://www.example.com">
+<class>
+ <value>foo</value>
+ <value> foo</value>
+</class>
+<class>
+ <value>x:foo</value>
+ <value> x:foo </value>
+ <value>z:foo</value>
+</class>
+<class>
+ <value>x:bar</value>
+ <value>z:bar</value>
+</class>
+<class>
+ <value>y:foo</value>
+</class>
+<class>
+ <value>y:bar</value>
+</class>
+</equiv>
+</datatype>
+<datatype name="NOTATION">
+<valid>foo</valid>
+<valid xmlns:x="http://www.example.com">x:foo</valid>
+<invalid>y:foo</invalid>
+</datatype>
+<datatype name="decimal">
+<valid>1.0</valid>
+<valid>1.</valid>
+<valid>.1</valid>
+<valid>+1.0</valid>
+<valid>-1.0</valid>
+<valid> 1 </valid>
+<valid>99999999999999999999999999999999999999999999999999999999999999999</valid>
+<valid>-99999999999999999999999999999999999999999999999999999999999999999</valid>
+<invalid>junk</invalid>
+<invalid>--1</invalid>
+<invalid>++1</invalid>
+<invalid>+-1</invalid>
+<invalid>1.2.</invalid>
+<invalid>..1</invalid>
+<invalid>1..</invalid>
+<invalid>1 .2</invalid>
+<invalid>1+</invalid>
+<invalid>+ 1</invalid>
+<lessThan>
+ <value>0</value>
+ <value>1</value>
+</lessThan>
+</datatype>
+<datatype name="nonPositiveInteger">
+<valid>-1</valid>
+<valid>0</valid>
+<valid>-0</valid>
+<invalid>1</invalid>
+</datatype>
+<datatype name="nonNegativeInteger">
+<valid>1</valid>
+<valid>0</valid>
+<valid>+1</valid>
+<valid>+0</valid>
+<invalid>-1</invalid>
+</datatype>
+<datatype name="positiveInteger">
+<valid>+1</valid>
+<valid>1</valid>
+<invalid>0</invalid>
+<invalid>-1</invalid>
+</datatype>
+<datatype name="negativeInteger">
+<valid>-1</valid>
+<invalid>+1</invalid>
+<invalid>0</invalid>
+</datatype>
+<datatype name="long">
+<valid>1</valid>
+<valid>+1</valid>
+<valid>0</valid>
+<valid> 0 </valid>
+<invalid>1 2</invalid>
+<invalid>9999999999999999999999999999999999999999999999999999999999999999999999999</invalid>
+<valid>9223372036854775807</valid>
+<valid>-9223372036854775808</valid>
+<invalid>9223372036854775808</invalid>
+<invalid>-9223372036854775809</invalid>
+<invalid/>
+</datatype>
+<datatype name="int">
+<valid>1</valid>
+<valid>01</valid>
+<valid> 1 </valid>
+<valid>2147483647</valid>
+<valid>-2147483648</valid>
+<invalid>2147483648</invalid>
+<invalid>-2147483649</invalid>
+<invalid>9999999999999999999999999999999999999999999999999999999999999999999999999</invalid>
+<equiv>
+<class>
+ <value>1</value>
+ <value>+1</value>
+ <value> 1 </value>
+ <value>001</value>
+</class>
+<class>
+ <value>-1</value>
+ <value> -1 </value>
+ <value>-001</value>
+</class>
+</equiv>
+</datatype>
+<datatype name="short">
+<valid>1</valid>
+<valid>32767</valid>
+<valid>-32768</valid>
+<invalid>32768</invalid>
+<invalid>-32769</invalid>
+<invalid>9999999999999999999999999999999999999999999999999999999999999999999999999</invalid>
+<equiv>
+<class>
+ <value>1</value>
+ <value>+1</value>
+ <value> 1 </value>
+ <value>001</value>
+</class>
+<class>
+ <value>-1</value>
+ <value> -1 </value>
+ <value>-001</value>
+</class>
+</equiv>
+</datatype>
+<datatype name="byte">
+<valid>1</valid>
+<valid>127</valid>
+<valid>-128</valid>
+<invalid>128</invalid>
+<invalid>-129</invalid>
+</datatype>
+<datatype name="unsignedLong">
+<valid>1</valid>
+<valid>+1</valid>
+<invalid>-1</invalid>
+<valid>0</valid>
+<valid>18446744073709551615</valid>
+<invalid>18446744073709551616</invalid>
+<invalid>-1</invalid>
+</datatype>
+<datatype name="unsignedInt">
+<valid>1</valid>
+<valid>+1</valid>
+<valid>0</valid>
+<valid>4294967295</valid>
+<invalid>4294967296</invalid>
+<invalid>-1</invalid>
+</datatype>
+<datatype name="unsignedShort">
+<valid>1</valid>
+<valid>+1</valid>
+<valid>0</valid>
+<valid>65535</valid>
+<invalid>65536</invalid>
+<invalid>-1</invalid>
+</datatype>
+<datatype name="unsignedByte">
+<valid>1</valid>
+<valid>+1</valid>
+<valid>0</valid>
+<valid>255</valid>
+<invalid>256</invalid>
+<invalid>-1</invalid>
+</datatype>
+<datatype name="string">
+<valid>any thing at all!</valid>
+</datatype>
+<datatype name="normalizedString">
+<valid>any thing at all!</valid>
+</datatype>
+<datatype name="token">
+<valid>any thing at all!</valid>
+<equiv>
+<class>
+ <value/>
+ <value> </value>
+ <value>&#x9;&#xA;&#xD;&#x20;</value>
+</class>
+<class>
+ <value>x&#x20;</value>
+ <value>x&#xA;</value>
+ <value>x&#xD;</value>
+ <value>x&#x9;</value>
+ <value>&#x20;x</value>
+ <value>&#xA;x</value>
+ <value>&#xD;x</value>
+ <value>&#x9;x</value>
+ <value>&#x9;&#xA;&#xD;&#x20;x&#x9;&#xA;&#xD;&#x20;</value>
+</class>
+<class>
+ <value>x y&#x20;</value>
+ <value>x y&#xA;</value>
+ <value>x y&#xD;</value>
+ <value>x y&#x9;</value>
+ <value>x&#x20;y</value>
+ <value>x&#xA;y</value>
+ <value>x&#xD;y</value>
+ <value>x&#x9;y</value>
+ <value>&#x20;x y</value>
+ <value>&#xA;x y</value>
+ <value>&#xD;x y</value>
+ <value>&#x9;x y</value>
+ <value>&#x9;&#xA;&#xD;&#x20;x&#x9;&#xA;&#xD;&#x20;y&#x9;&#xA;&#xD;&#x20;</value>
+</class>
+</equiv>
+<length value="0"></length>
+<length value="1">x</length>
+<length value="1"> x </length>
+<length value="1">&#x10800;</length>
+</datatype>
+<datatype name="language">
+<valid>en</valid>
+<valid>en-UK</valid>
+<valid>i-cherokee</valid>
+<valid>x-klingon</valid>
+<valid>en-uk-scotland</valid>
+<invalid>en.UK</invalid>
+</datatype>
+<datatype name="Name">
+<valid>foo</valid>
+<valid>_0123456789</valid>
+<invalid>.</invalid>
+<valid>:</valid>
+<invalid>-</invalid>
+<invalid>1234</invalid>
+<valid> foo </valid>
+</datatype>
+<datatype name="NCName">
+<valid>foo</valid>
+<invalid>foo:bar</invalid>
+<invalid>0foo</invalid>
+<equiv>
+<class><value>foo</value><value> foo </value></class>
+<class><value>FOO</value><value> FOO </value></class>
+</equiv>
+</datatype>
+<datatype name="NMTOKEN">
+<valid>foo</valid>
+<valid>_</valid>
+<valid>.</valid>
+<valid>:</valid>
+<valid>-</valid>
+<valid>1234</valid>
+<valid> foo </valid>
+<length value="3"> foo </length>
+<length value="2">fo</length>
+<length value="1">f</length>
+</datatype>
+<datatype name="NMTOKENS">
+<valid>foo bar</valid>
+<invalid/>
+<valid>1 2 3 4</valid>
+</datatype>
+<datatype name="ID">
+<valid>foobar</valid>
+<invalid>foo:bar</invalid>
+<invalid>foo bar</invalid>
+</datatype>
+<datatype name="ENTITY">
+<invalid/>
+<invalid>foo</invalid>
+<valid internalSubset="&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg>"
+>foo</valid>
+</datatype>
+<datatype name="ENTITIES">
+<invalid></invalid>
+<invalid>foo</invalid>
+<valid internalSubset="&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg>
+&#xA;&lt;!ENTITY bar SYSTEM 'whatever' NDATA jpeg>
+"
+> foo bar </valid>
+</datatype>
+</xsdtest>
diff --git a/test/xsdtest/xsdtest.xsl b/test/xsdtest/xsdtest.xsl
new file mode 100644
index 0000000..d57adf2
--- /dev/null
+++ b/test/xsdtest/xsdtest.xsl
@@ -0,0 +1,238 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:strip-space elements="xsdtest datatype equiv class"/>
+
+<xsl:output indent="yes" encoding="utf-8"/>
+
+<xsl:template match="xsdtest">
+ <testSuite>
+ <xsl:apply-templates/>
+ </testSuite>
+</xsl:template>
+
+<xsl:template match="datatype">
+<testSuite>
+<documentation>Datatype <xsl:value-of select="@name"/></documentation>
+<testCase>
+<requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="{@name}">
+ <xsl:for-each select="param">
+ <param name="{@name}"><xsl:value-of select="."/></param>
+ </xsl:for-each>
+ </data>
+</element>
+</correct>
+<xsl:apply-templates select="valid|invalid"/>
+</testCase>
+<xsl:apply-templates select="equiv/class|length|lessThan|incomparable"/>
+</testSuite>
+</xsl:template>
+
+<xsl:template match="valid">
+ <xsl:call-template name="valid"/>
+</xsl:template>
+
+<xsl:template match="invalid">
+ <xsl:call-template name="invalid"/>
+</xsl:template>
+
+<xsl:template name="valid">
+ <valid>
+ <xsl:apply-templates select="@internalSubset"/>
+ <doc>
+ <xsl:copy-of select="namespace::*"/>
+ <xsl:value-of select="."/>
+ </doc>
+ </valid>
+</xsl:template>
+
+<xsl:template name="invalid">
+ <invalid>
+ <xsl:apply-templates select="@internalSubset"/>
+ <doc>
+ <xsl:copy-of select="namespace::*"/>
+ <xsl:value-of select="."/>
+ </doc>
+ </invalid>
+</xsl:template>
+
+<xsl:template match="@internalSubset">
+ <xsl:param name="doc" select="'doc'"/>
+ <xsl:attribute name="dtd">
+ <xsl:text>
+&lt;!DOCTYPE </xsl:text>
+ <xsl:value-of select="$doc"/>
+ <xsl:text> [
+</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>
+]></xsl:text>
+ </xsl:attribute>
+</xsl:template>
+
+<xsl:template match="class">
+<testCase>
+<correct>
+ <xsl:for-each select="value[1]">
+ <xsl:apply-templates select="@internalSubset">
+ <xsl:with-param name="doc">element</xsl:with-param>
+ </xsl:apply-templates>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value>
+ <xsl:copy-of select="namespace::*"/>
+ <xsl:attribute name="type"><xsl:value-of select="../../../@name"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </value>
+ </element>
+ </xsl:for-each>
+</correct>
+<xsl:for-each select="value[position() != 1]">
+ <xsl:call-template name="valid"/>
+</xsl:for-each>
+<xsl:for-each select="preceding-sibling::class/value|following-sibling::class/value">
+ <xsl:call-template name="invalid"/>
+</xsl:for-each>
+</testCase>
+</xsl:template>
+
+<xsl:template match="length">
+<testCase>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="{../@name}">
+ <param name="length"><xsl:value-of select="@value"/></param>
+ </data>
+</element>
+</correct>
+<xsl:call-template name="valid"/>
+</testCase>
+
+<testCase>
+<correct>
+<element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="{../@name}">
+ <param name="length"><xsl:value-of select="@value + 1"/></param>
+ </data>
+</element>
+</correct>
+<xsl:call-template name="invalid"/>
+</testCase>
+
+<xsl:if test="@value != 0">
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="{../@name}">
+ <param name="length"><xsl:value-of select="@value - 1"/></param>
+ </data>
+ </element>
+ </correct>
+ <xsl:call-template name="invalid"/>
+ </testCase>
+</xsl:if>
+
+</xsl:template>
+
+<xsl:template match="lessThan">
+<testCase>
+<correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="{../@name}">
+ <param name="minExclusive">
+ <xsl:value-of select="value[1]"/>
+ </param>
+ </data>
+ </element>
+</correct>
+<valid>
+<doc>
+<xsl:value-of select="value[2]"/>
+</doc>
+</valid>
+<invalid>
+<doc>
+<xsl:value-of select="value[1]"/>
+</doc>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="{../@name}">
+ <param name="minExclusive">
+ <xsl:value-of select="value[2]"/>
+ </param>
+ </data>
+ </element>
+</correct>
+<invalid>
+<doc>
+<xsl:value-of select="value[1]"/>
+</doc>
+</invalid>
+<invalid>
+<doc>
+<xsl:value-of select="value[2]"/>
+</doc>
+</invalid>
+</testCase>
+</xsl:template>
+
+<xsl:template match="incomparable">
+<testCase>
+<correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="{../@name}">
+ <param name="minExclusive">
+ <xsl:value-of select="value[1]"/>
+ </param>
+ </data>
+ </element>
+</correct>
+<invalid>
+<doc>
+<xsl:value-of select="value[2]"/>
+</doc>
+</invalid>
+<invalid>
+<doc>
+<xsl:value-of select="value[1]"/>
+</doc>
+</invalid>
+</testCase>
+<testCase>
+<correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="{../@name}">
+ <param name="minExclusive">
+ <xsl:value-of select="value[2]"/>
+ </param>
+ </data>
+ </element>
+</correct>
+<invalid>
+<doc>
+<xsl:value-of select="value[1]"/>
+</doc>
+</invalid>
+<invalid>
+<doc>
+<xsl:value-of select="value[2]"/>
+</doc>
+</invalid>
+</testCase>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/test/xsdtest/xsdtestsuite.xml b/test/xsdtest/xsdtestsuite.xml
new file mode 100644
index 0000000..1c91cb9
--- /dev/null
+++ b/test/xsdtest/xsdtestsuite.xml
@@ -0,0 +1,5286 @@
+<?xml version="1.0" encoding="utf-8"?>
+<testSuite>
+ <testSuite>
+ <documentation>Datatype dateTime</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="dateTime"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>2001-12-01T19:45:00</doc>
+ </valid>
+ <valid>
+ <doc>2001-12-01T19:45:00Z</doc>
+ </valid>
+ <valid>
+ <doc>2001-12-01T19:45:00-11:59</doc>
+ </valid>
+ <valid>
+ <doc>0001-01-12T00:00:00+12:00</doc>
+ </valid>
+ <invalid>
+ <doc>2001-12-1T19:45:00+24:00</doc>
+ </invalid>
+ <invalid>
+ <doc>2001-12-1T19:45:00</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="dateTime">2001-12-01T19:45:00</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>2001-12-01T19:45:00.00</doc>
+ </valid>
+ <invalid>
+ <doc>2001-12-01T19:45:00Z</doc>
+ </invalid>
+ <invalid>
+ <doc>2001-12-01T19:45:00.00Z</doc>
+ </invalid>
+ <invalid>
+ <doc>2001-12-01T20:45:00+01:00</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="dateTime">2001-12-01T19:45:00Z</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>2001-12-01T19:45:00.00Z</doc>
+ </valid>
+ <valid>
+ <doc>2001-12-01T20:45:00+01:00</doc>
+ </valid>
+ <invalid>
+ <doc>2001-12-01T19:45:00</doc>
+ </invalid>
+ <invalid>
+ <doc>2001-12-01T19:45:00.00</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype anyURI</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="anyURI"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>foobar</doc>
+ </valid>
+ <valid>
+ <doc>http://www.example.com</doc>
+ </valid>
+ <valid>
+ <doc>http://ji%6d@www.example.com</doc>
+ </valid>
+ <valid>
+ <doc>http://www.example.co%6d</doc>
+ </valid>
+ <valid>
+ <doc>nosuchscheme:stuff</doc>
+ </valid>
+ <invalid>
+ <doc>foo$bar:stuff</doc>
+ </invalid>
+ <invalid>
+ <doc>f%oobar</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype integer</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="integer"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>10</doc>
+ </valid>
+ <valid>
+ <doc>01</doc>
+ </valid>
+ <valid>
+ <doc>0123456789</doc>
+ </valid>
+ <valid>
+ <doc>+10</doc>
+ </valid>
+ <valid>
+ <doc>-10</doc>
+ </valid>
+ <invalid>
+ <doc>1.0</doc>
+ </invalid>
+ <invalid>
+ <doc>.1</doc>
+ </invalid>
+ <valid>
+ <doc>9999999999999999999999999999999</doc>
+ </valid>
+ <invalid>
+ <doc>1.</doc>
+ </invalid>
+ <invalid>
+ <doc>0.</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="integer">0</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>+0</doc>
+ </valid>
+ <valid>
+ <doc>-0</doc>
+ </valid>
+ <valid>
+ <doc>00</doc>
+ </valid>
+ <invalid>
+ <doc>10</doc>
+ </invalid>
+ <invalid>
+ <doc>+10</doc>
+ </invalid>
+ <invalid>
+ <doc>+0010</doc>
+ </invalid>
+ <invalid>
+ <doc>010</doc>
+ </invalid>
+ <invalid>
+ <doc>-10</doc>
+ </invalid>
+ <invalid>
+ <doc>-0010</doc>
+ </invalid>
+ <invalid>
+ <doc>-010</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="integer">10</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>+10</doc>
+ </valid>
+ <valid>
+ <doc>+0010</doc>
+ </valid>
+ <valid>
+ <doc>010</doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>00</doc>
+ </invalid>
+ <invalid>
+ <doc>-10</doc>
+ </invalid>
+ <invalid>
+ <doc>-0010</doc>
+ </invalid>
+ <invalid>
+ <doc>-010</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="integer">-10</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>-0010</doc>
+ </valid>
+ <valid>
+ <doc>-010</doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>00</doc>
+ </invalid>
+ <invalid>
+ <doc>10</doc>
+ </invalid>
+ <invalid>
+ <doc>+10</doc>
+ </invalid>
+ <invalid>
+ <doc>+0010</doc>
+ </invalid>
+ <invalid>
+ <doc>010</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype duration</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>P1Y</doc>
+ </valid>
+ <valid>
+ <doc>P1Y0M2DT17H5M12S</doc>
+ </valid>
+ <valid>
+ <doc>-P1Y</doc>
+ </valid>
+ <valid>
+ <doc>P60D</doc>
+ </valid>
+ <valid>
+ <doc>PT24H</doc>
+ </valid>
+ <valid>
+ <doc>PT1.2S</doc>
+ </valid>
+ <invalid>
+ <doc>P24h</doc>
+ </invalid>
+ <invalid>
+ <doc>P24H</doc>
+ </invalid>
+ <invalid>
+ <doc>P1YT</doc>
+ </invalid>
+ <invalid>
+ <doc>P</doc>
+ </invalid>
+ <invalid>
+ <doc>-P</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="duration">-P6M</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>-P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y0M</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y0M0DT0H0M0.0S</doc>
+ </invalid>
+ <invalid>
+ <doc>P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT6M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1S</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1.0S</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="duration">P0Y</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>-P0Y</doc>
+ </valid>
+ <invalid>
+ <doc>-P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y0M</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y0M0DT0H0M0.0S</doc>
+ </invalid>
+ <invalid>
+ <doc>P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT6M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1S</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1.0S</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="duration">P1Y</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>P001Y</doc>
+ </valid>
+ <valid>
+ <doc>P001Y0M</doc>
+ </valid>
+ <valid>
+ <doc>P1Y0M0DT0H0M0.0S</doc>
+ </valid>
+ <invalid>
+ <doc>-P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>-P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT6M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1S</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1.0S</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="duration">P6M</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>-P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>-P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y0M</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y0M0DT0H0M0.0S</doc>
+ </invalid>
+ <invalid>
+ <doc>PT6M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1S</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1.0S</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="duration">PT6M</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>-P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>-P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y0M</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y0M0DT0H0M0.0S</doc>
+ </invalid>
+ <invalid>
+ <doc>P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1S</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1.0S</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="duration">PT1S</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>PT1.0S</doc>
+ </valid>
+ <invalid>
+ <doc>-P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>-P0Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P001Y0M</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y0M0DT0H0M0.0S</doc>
+ </invalid>
+ <invalid>
+ <doc>P6M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT6M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT1M</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>PT61S</doc>
+ </valid>
+ <invalid>
+ <doc>PT1M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT61S</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT1M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT61S</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT59S</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>PT1M</doc>
+ </valid>
+ <invalid>
+ <doc>PT59S</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT1M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT59S</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT60S</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT1M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT60S</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT1M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT60S</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT1H</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>PT61M</doc>
+ </valid>
+ <invalid>
+ <doc>PT1H</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT61M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT1H</doc>
+ </invalid>
+ <invalid>
+ <doc>PT61M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT59M</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>PT1H</doc>
+ </valid>
+ <invalid>
+ <doc>PT59M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT1H</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT59M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1H</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT60M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT1H</doc>
+ </invalid>
+ <invalid>
+ <doc>PT60M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT1H</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT60M</doc>
+ </invalid>
+ <invalid>
+ <doc>PT1H</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1D</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>PT25H</doc>
+ </valid>
+ <invalid>
+ <doc>P1D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT25H</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1D</doc>
+ </invalid>
+ <invalid>
+ <doc>PT25H</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT23H</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>P1D</doc>
+ </valid>
+ <invalid>
+ <doc>PT23H</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT23H</doc>
+ </invalid>
+ <invalid>
+ <doc>P1D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>PT24H</doc>
+ </invalid>
+ <invalid>
+ <doc>P1D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">PT24H</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1D</doc>
+ </invalid>
+ <invalid>
+ <doc>PT24H</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1Y</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>P13M</doc>
+ </valid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P13M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P13M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P11M</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>P1Y</doc>
+ </valid>
+ <invalid>
+ <doc>P11M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1Y</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P11M</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P12M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P12M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1Y</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P12M</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P364D</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>P1Y</doc>
+ </valid>
+ <invalid>
+ <doc>P364D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1Y</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P364D</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1Y</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P365D</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P365D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P365D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1Y</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P366D</doc>
+ </invalid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P366D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P366D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1Y</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>P367D</doc>
+ </valid>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P367D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1Y</doc>
+ </invalid>
+ <invalid>
+ <doc>P367D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P149D</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>P5M</doc>
+ </valid>
+ <invalid>
+ <doc>P149D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P5M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P149D</doc>
+ </invalid>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P150D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ <invalid>
+ <doc>P150D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P5M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P150D</doc>
+ </invalid>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P151D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ <invalid>
+ <doc>P151D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P5M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P151D</doc>
+ </invalid>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P152D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ <invalid>
+ <doc>P152D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P5M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P152D</doc>
+ </invalid>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P153D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ <invalid>
+ <doc>P153D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P5M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P153D</doc>
+ </invalid>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P5M</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>P154D</doc>
+ </valid>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P154D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P5M</doc>
+ </invalid>
+ <invalid>
+ <doc>P154D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P27D</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>P1M</doc>
+ </valid>
+ <invalid>
+ <doc>P27D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P27D</doc>
+ </invalid>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P28D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ <invalid>
+ <doc>P28D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P28D</doc>
+ </invalid>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P29D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ <invalid>
+ <doc>P29D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P29D</doc>
+ </invalid>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P30D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ <invalid>
+ <doc>P30D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P30D</doc>
+ </invalid>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P31D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ <invalid>
+ <doc>P31D</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1M</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P31D</doc>
+ </invalid>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P1M</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>P32D</doc>
+ </valid>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="duration">
+ <param name="minExclusive">P32D</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>P1M</doc>
+ </invalid>
+ <invalid>
+ <doc>P32D</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype time</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="time"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>12:45:00</doc>
+ </valid>
+ <valid>
+ <doc>12:45:00Z</doc>
+ </valid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype date</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="date"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1886-12-01</doc>
+ </valid>
+ <valid>
+ <doc>1886-12-01Z</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="date">
+ <param name="minExclusive">1066-12-31</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>1900-01-01</doc>
+ </valid>
+ <invalid>
+ <doc>1066-12-31</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="date">
+ <param name="minExclusive">1900-01-01</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>1066-12-31</doc>
+ </invalid>
+ <invalid>
+ <doc>1900-01-01</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="date">
+ <param name="minExclusive">1900-01-01</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>1900-01-02</doc>
+ </valid>
+ <invalid>
+ <doc>1900-01-01</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="date">
+ <param name="minExclusive">1900-01-02</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>1900-01-01</doc>
+ </invalid>
+ <invalid>
+ <doc>1900-01-02</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype gYearMonth</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gYearMonth"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1996-12</doc>
+ </valid>
+ <valid>
+ <doc>1996-01</doc>
+ </valid>
+ <valid>
+ <doc>1996-01Z</doc>
+ </valid>
+ <invalid>
+ <doc>1996-00</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="gYearMonth">1996-01</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>1996-01Z</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01+00:00</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01-00:00</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01+01:00</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01-01:00</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="gYearMonth">1996-01Z</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>1996-01+00:00</doc>
+ </valid>
+ <valid>
+ <doc>1996-01-00:00</doc>
+ </valid>
+ <invalid>
+ <doc>1996-01</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01+01:00</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01-01:00</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="gYearMonth">1996-01+01:00</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>1996-01</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01Z</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01+00:00</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01-00:00</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01-01:00</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="gYearMonth">1996-01-01:00</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>1996-01</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01Z</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01+00:00</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01-00:00</doc>
+ </invalid>
+ <invalid>
+ <doc>1996-01+01:00</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype gYear</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gYear"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>2001</doc>
+ </valid>
+ <valid>
+ <doc>2001Z</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gYear">
+ <param name="minExclusive">1999</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>2000</doc>
+ </valid>
+ <invalid>
+ <doc>1999</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gYear">
+ <param name="minExclusive">2000</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>1999</doc>
+ </invalid>
+ <invalid>
+ <doc>2000</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gYear">
+ <param name="minExclusive">1999+07:00</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>2000+07:00</doc>
+ </valid>
+ <invalid>
+ <doc>1999+07:00</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gYear">
+ <param name="minExclusive">2000+07:00</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>1999+07:00</doc>
+ </invalid>
+ <invalid>
+ <doc>2000+07:00</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype gMonthDay</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonthDay"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>--12-01</doc>
+ </valid>
+ <valid>
+ <doc>--12-01Z</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonthDay">
+ <param name="minExclusive">--12-01</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>--12-04</doc>
+ </valid>
+ <invalid>
+ <doc>--12-01</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonthDay">
+ <param name="minExclusive">--12-04</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>--12-01</doc>
+ </invalid>
+ <invalid>
+ <doc>--12-04</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonthDay">
+ <param name="minExclusive">--11-17</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>--12-04</doc>
+ </valid>
+ <invalid>
+ <doc>--11-17</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonthDay">
+ <param name="minExclusive">--12-04</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>--11-17</doc>
+ </invalid>
+ <invalid>
+ <doc>--12-04</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype gDay</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gDay"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>---20</doc>
+ </valid>
+ <valid>
+ <doc>---20Z</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gDay">
+ <param name="minExclusive">---01</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>---31</doc>
+ </valid>
+ <invalid>
+ <doc>---01</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gDay">
+ <param name="minExclusive">---31</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>---01</doc>
+ </invalid>
+ <invalid>
+ <doc>---31</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype gMonth</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonth"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>--12</doc>
+ </valid>
+ <valid>
+ <doc>--01</doc>
+ </valid>
+ <valid>
+ <doc>--01Z</doc>
+ </valid>
+ <valid>
+ <doc> --12 </doc>
+ </valid>
+ <invalid>
+ <doc>---01</doc>
+ </invalid>
+ <invalid>
+ <doc>--00</doc>
+ </invalid>
+ <invalid>
+ <doc>--13</doc>
+ </invalid>
+ <invalid>
+ <doc>- -13</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonth">
+ <param name="minExclusive">--01</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>--12</doc>
+ </valid>
+ <invalid>
+ <doc>--01</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonth">
+ <param name="minExclusive">--12</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>--01</doc>
+ </invalid>
+ <invalid>
+ <doc>--12</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonth">
+ <param name="minExclusive">--01</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>--02</doc>
+ </valid>
+ <invalid>
+ <doc>--01</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="gMonth">
+ <param name="minExclusive">--02</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>--01</doc>
+ </invalid>
+ <invalid>
+ <doc>--02</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype boolean</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="boolean"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>true</doc>
+ </valid>
+ <valid>
+ <doc>false</doc>
+ </valid>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <invalid>
+ <doc>00</doc>
+ </invalid>
+ <invalid>
+ <doc>00</doc>
+ </invalid>
+ <invalid>
+ <doc>01</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="boolean">true</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <invalid>
+ <doc>false</doc>
+ </invalid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="boolean">false</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <invalid>
+ <doc>true</doc>
+ </invalid>
+ <invalid>
+ <doc>1</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype base64Binary</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>AAAA</doc>
+ </valid>
+ <valid>
+ <doc>abcd efgh ijkl mnop qrst uvwx yzAB CDEF GHIJ KLMN OPQR
+STUV WXYZ 0123 4567 89+/</doc>
+ </valid>
+ <valid>
+ <doc>BA==</doc>
+ </valid>
+ <valid>
+ <doc></doc>
+ </valid>
+ <valid>
+ <doc>BA==</doc>
+ </valid>
+ <valid>
+ <doc>BQ==</doc>
+ </valid>
+ <valid>
+ <doc>Bg==</doc>
+ </valid>
+ <valid>
+ <doc>Bw==</doc>
+ </valid>
+ <valid>
+ <doc>BBA=</doc>
+ </valid>
+ <valid>
+ <doc>BBA=</doc>
+ </valid>
+ <valid>
+ <doc>BBE=</doc>
+ </valid>
+ <valid>
+ <doc>BBI=</doc>
+ </valid>
+ <valid>
+ <doc>BBM=</doc>
+ </valid>
+ <valid>
+ <doc>BBQ=</doc>
+ </valid>
+ <valid>
+ <doc>BBU=</doc>
+ </valid>
+ <valid>
+ <doc>BBY=</doc>
+ </valid>
+ <valid>
+ <doc>BBc=</doc>
+ </valid>
+ <valid>
+ <doc>BBg=</doc>
+ </valid>
+ <valid>
+ <doc>BBk=</doc>
+ </valid>
+ <valid>
+ <doc>BBo=</doc>
+ </valid>
+ <valid>
+ <doc>BBs=</doc>
+ </valid>
+ <valid>
+ <doc>BBw=</doc>
+ </valid>
+ <valid>
+ <doc>BB0=</doc>
+ </valid>
+ <valid>
+ <doc>BB4=</doc>
+ </valid>
+ <valid>
+ <doc>BB8=</doc>
+ </valid>
+ <invalid>
+ <doc>====</doc>
+ </invalid>
+ <invalid>
+ <doc>BB==</doc>
+ </invalid>
+ <invalid>
+ <doc>BBB=</doc>
+ </invalid>
+ <invalid>
+ <doc>B===</doc>
+ </invalid>
+ <invalid>
+ <doc>B</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="base64Binary">deadbeef</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>d
+&#13; e a d
+b eef </doc>
+ </valid>
+ <invalid>
+ <doc>DEADBEEF</doc>
+ </invalid>
+ <invalid>
+ <doc>D
+&#13; E A D
+B EEF </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="base64Binary">DEADBEEF</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>D
+&#13; E A D
+B EEF </doc>
+ </valid>
+ <invalid>
+ <doc>deadbeef</doc>
+ </invalid>
+ <invalid>
+ <doc>d
+&#13; e a d
+b eef </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">0</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc></doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc></doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">6</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>deadbeef</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">7</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>deadbeef</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">5</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>deadbeef</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>BA==</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>BA==</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">0</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>BA==</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>BBA=</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">3</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>BBA=</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>BBA=</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">3</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>dead</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">4</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>dead</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>dead</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">4</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>deadBA==</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">5</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>deadBA==</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="base64Binary">
+ <param name="length">3</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>deadBA==</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype hexBinary</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>deadbeef</doc>
+ </valid>
+ <valid>
+ <doc></doc>
+ </valid>
+ <valid>
+ <doc>0123456789ABCDEFabcdef</doc>
+ </valid>
+ <invalid>
+ <doc>00 00</doc>
+ </invalid>
+ <invalid>
+ <doc>00.00</doc>
+ </invalid>
+ <invalid>
+ <doc>0G</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="hexBinary">00</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>
+ 00
+ </doc>
+ </valid>
+ <invalid>
+ <doc>01</doc>
+ </invalid>
+ <invalid>
+ <doc>10</doc>
+ </invalid>
+ <invalid>
+ <doc>0a</doc>
+ </invalid>
+ <invalid>
+ <doc>0A</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="hexBinary">01</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>00</doc>
+ </invalid>
+ <invalid>
+ <doc>
+ 00
+ </doc>
+ </invalid>
+ <invalid>
+ <doc>10</doc>
+ </invalid>
+ <invalid>
+ <doc>0a</doc>
+ </invalid>
+ <invalid>
+ <doc>0A</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="hexBinary">10</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>00</doc>
+ </invalid>
+ <invalid>
+ <doc>
+ 00
+ </doc>
+ </invalid>
+ <invalid>
+ <doc>01</doc>
+ </invalid>
+ <invalid>
+ <doc>0a</doc>
+ </invalid>
+ <invalid>
+ <doc>0A</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="hexBinary">0a</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>0A</doc>
+ </valid>
+ <invalid>
+ <doc>00</doc>
+ </invalid>
+ <invalid>
+ <doc>
+ 00
+ </doc>
+ </invalid>
+ <invalid>
+ <doc>01</doc>
+ </invalid>
+ <invalid>
+ <doc>10</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">0</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc></doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc></doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>00</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>00</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">0</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>00</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>0000</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">3</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>0000</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>0000</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc> 0000 </doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">3</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc> 0000 </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc> 0000 </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>AAAA</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">3</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>AAAA</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="hexBinary">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>AAAA</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype float</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1.0</doc>
+ </valid>
+ <valid>
+ <doc>1.</doc>
+ </valid>
+ <valid>
+ <doc>.1</doc>
+ </valid>
+ <invalid>
+ <doc>- 1</doc>
+ </invalid>
+ <invalid>
+ <doc>1 .0</doc>
+ </invalid>
+ <invalid>
+ <doc>+INF</doc>
+ </invalid>
+ <invalid>
+ <doc>+NaN</doc>
+ </invalid>
+ <invalid>
+ <doc>-NaN</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="float">0</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>-0</doc>
+ </valid>
+ <valid>
+ <doc>+0</doc>
+ </valid>
+ <valid>
+ <doc> 0 </doc>
+ </valid>
+ <valid>
+ <doc> 0. </doc>
+ </valid>
+ <valid>
+ <doc> .0 </doc>
+ </valid>
+ <valid>
+ <doc> 0.0 </doc>
+ </valid>
+ <valid>
+ <doc> 0e0 </doc>
+ </valid>
+ <valid>
+ <doc> 0E0 </doc>
+ </valid>
+ <valid>
+ <doc> 0E+0 </doc>
+ </valid>
+ <valid>
+ <doc> 0E-0 </doc>
+ </valid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="float">1E0</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>0.1E1</doc>
+ </valid>
+ <valid>
+ <doc>10E-1</doc>
+ </valid>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="float">-1</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="float">INF</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>INF </doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="float">-INF</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>-INF </doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="float">NaN</value>
+ </element>
+ </correct>
+ <valid>
+ <doc> NaN </doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">-INF</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>-1000</doc>
+ </valid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">-1000</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-1000</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">1000</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>INF</doc>
+ </valid>
+ <invalid>
+ <doc>1000</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">INF</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>1000</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">-1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>1</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">0</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>1</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">-1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="float">
+ <param name="minExclusive">0</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype double</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1.0</doc>
+ </valid>
+ <valid>
+ <doc>1.</doc>
+ </valid>
+ <valid>
+ <doc>.1</doc>
+ </valid>
+ <invalid>
+ <doc>- 1</doc>
+ </invalid>
+ <invalid>
+ <doc>1 .0</doc>
+ </invalid>
+ <invalid>
+ <doc>+INF</doc>
+ </invalid>
+ <invalid>
+ <doc>+NaN</doc>
+ </invalid>
+ <invalid>
+ <doc>-NaN</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="double">0</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>-0</doc>
+ </valid>
+ <valid>
+ <doc>+0</doc>
+ </valid>
+ <valid>
+ <doc> 0 </doc>
+ </valid>
+ <valid>
+ <doc> 0. </doc>
+ </valid>
+ <valid>
+ <doc> .0 </doc>
+ </valid>
+ <valid>
+ <doc> 0.0 </doc>
+ </valid>
+ <valid>
+ <doc> 0e0 </doc>
+ </valid>
+ <valid>
+ <doc> 0E0 </doc>
+ </valid>
+ <valid>
+ <doc> 0E+0 </doc>
+ </valid>
+ <valid>
+ <doc> 0E-0 </doc>
+ </valid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="double">1E0</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>0.1E1</doc>
+ </valid>
+ <valid>
+ <doc>10E-1</doc>
+ </valid>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="double">-1</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="double">INF</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>INF </doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="double">-INF</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>-INF </doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>NaN</doc>
+ </invalid>
+ <invalid>
+ <doc> NaN </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="double">NaN</value>
+ </element>
+ </correct>
+ <valid>
+ <doc> NaN </doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-0</doc>
+ </invalid>
+ <invalid>
+ <doc>+0</doc>
+ </invalid>
+ <invalid>
+ <doc> 0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0. </doc>
+ </invalid>
+ <invalid>
+ <doc> .0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0.0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0e0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E+0 </doc>
+ </invalid>
+ <invalid>
+ <doc> 0E-0 </doc>
+ </invalid>
+ <invalid>
+ <doc>1E0</doc>
+ </invalid>
+ <invalid>
+ <doc>0.1E1</doc>
+ </invalid>
+ <invalid>
+ <doc>10E-1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ <invalid>
+ <doc>INF </doc>
+ </invalid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-INF </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">-INF</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>-1000</doc>
+ </valid>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">-1000</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>-INF</doc>
+ </invalid>
+ <invalid>
+ <doc>-1000</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">1000</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>INF</doc>
+ </valid>
+ <invalid>
+ <doc>1000</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">INF</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>1000</doc>
+ </invalid>
+ <invalid>
+ <doc>INF</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">-1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>1</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">0</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>1</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">-1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="double">
+ <param name="minExclusive">0</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype QName</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="QName"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>foo</doc>
+ </valid>
+ <valid>
+ <doc xmlns:x="http://www.example.com">x:foo</doc>
+ </valid>
+ <invalid>
+ <doc>y:foo</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com" type="QName">foo</value>
+ </element>
+ </correct>
+ <valid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> foo</doc>
+ </valid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">x:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> x:foo </doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">x:bar</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:bar</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">y:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">y:bar</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com" type="QName">x:foo</value>
+ </element>
+ </correct>
+ <valid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> x:foo </doc>
+ </valid>
+ <valid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:foo</doc>
+ </valid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">x:bar</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:bar</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">y:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">y:bar</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com" type="QName">x:bar</value>
+ </element>
+ </correct>
+ <valid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:bar</doc>
+ </valid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">x:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> x:foo </doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">y:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">y:bar</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com" type="QName">y:foo</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">x:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> x:foo </doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">x:bar</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:bar</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">y:bar</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com" type="QName">y:bar</value>
+ </element>
+ </correct>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">x:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com"> x:foo </doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:foo</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">x:bar</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">z:bar</doc>
+ </invalid>
+ <invalid>
+ <doc xmlns:z="http://www.example.com" xmlns:y="http://www.example.com/" xmlns:x="http://www.example.com">y:foo</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype NOTATION</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NOTATION"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>foo</doc>
+ </valid>
+ <valid>
+ <doc xmlns:x="http://www.example.com">x:foo</doc>
+ </valid>
+ <invalid>
+ <doc>y:foo</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype decimal</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="decimal"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1.0</doc>
+ </valid>
+ <valid>
+ <doc>1.</doc>
+ </valid>
+ <valid>
+ <doc>.1</doc>
+ </valid>
+ <valid>
+ <doc>+1.0</doc>
+ </valid>
+ <valid>
+ <doc>-1.0</doc>
+ </valid>
+ <valid>
+ <doc> 1 </doc>
+ </valid>
+ <valid>
+ <doc>99999999999999999999999999999999999999999999999999999999999999999</doc>
+ </valid>
+ <valid>
+ <doc>-99999999999999999999999999999999999999999999999999999999999999999</doc>
+ </valid>
+ <invalid>
+ <doc>junk</doc>
+ </invalid>
+ <invalid>
+ <doc>--1</doc>
+ </invalid>
+ <invalid>
+ <doc>++1</doc>
+ </invalid>
+ <invalid>
+ <doc>+-1</doc>
+ </invalid>
+ <invalid>
+ <doc>1.2.</doc>
+ </invalid>
+ <invalid>
+ <doc>..1</doc>
+ </invalid>
+ <invalid>
+ <doc>1..</doc>
+ </invalid>
+ <invalid>
+ <doc>1 .2</doc>
+ </invalid>
+ <invalid>
+ <doc>1+</doc>
+ </invalid>
+ <invalid>
+ <doc>+ 1</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="decimal">
+ <param name="minExclusive">0</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="decimal">
+ <param name="minExclusive">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>1</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype nonPositiveInteger</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="nonPositiveInteger"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>-1</doc>
+ </valid>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <valid>
+ <doc>-0</doc>
+ </valid>
+ <invalid>
+ <doc>1</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype nonNegativeInteger</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="nonNegativeInteger"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <valid>
+ <doc>+0</doc>
+ </valid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype positiveInteger</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="positiveInteger"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype negativeInteger</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="negativeInteger"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>-1</doc>
+ </valid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc>0</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype long</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="long"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <valid>
+ <doc> 0 </doc>
+ </valid>
+ <invalid>
+ <doc>1 2</doc>
+ </invalid>
+ <invalid>
+ <doc>9999999999999999999999999999999999999999999999999999999999999999999999999</doc>
+ </invalid>
+ <valid>
+ <doc>9223372036854775807</doc>
+ </valid>
+ <valid>
+ <doc>-9223372036854775808</doc>
+ </valid>
+ <invalid>
+ <doc>9223372036854775808</doc>
+ </invalid>
+ <invalid>
+ <doc>-9223372036854775809</doc>
+ </invalid>
+ <invalid>
+ <doc></doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype int</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="int"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <valid>
+ <doc>01</doc>
+ </valid>
+ <valid>
+ <doc> 1 </doc>
+ </valid>
+ <valid>
+ <doc>2147483647</doc>
+ </valid>
+ <valid>
+ <doc>-2147483648</doc>
+ </valid>
+ <invalid>
+ <doc>2147483648</doc>
+ </invalid>
+ <invalid>
+ <doc>-2147483649</doc>
+ </invalid>
+ <invalid>
+ <doc>9999999999999999999999999999999999999999999999999999999999999999999999999</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="int">1</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <valid>
+ <doc> 1 </doc>
+ </valid>
+ <valid>
+ <doc>001</doc>
+ </valid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc> -1 </doc>
+ </invalid>
+ <invalid>
+ <doc>-001</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="int">-1</value>
+ </element>
+ </correct>
+ <valid>
+ <doc> -1 </doc>
+ </valid>
+ <valid>
+ <doc>-001</doc>
+ </valid>
+ <invalid>
+ <doc>1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc> 1 </doc>
+ </invalid>
+ <invalid>
+ <doc>001</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype short</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="short"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <valid>
+ <doc>32767</doc>
+ </valid>
+ <valid>
+ <doc>-32768</doc>
+ </valid>
+ <invalid>
+ <doc>32768</doc>
+ </invalid>
+ <invalid>
+ <doc>-32769</doc>
+ </invalid>
+ <invalid>
+ <doc>9999999999999999999999999999999999999999999999999999999999999999999999999</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="short">1</value>
+ </element>
+ </correct>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <valid>
+ <doc> 1 </doc>
+ </valid>
+ <valid>
+ <doc>001</doc>
+ </valid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <invalid>
+ <doc> -1 </doc>
+ </invalid>
+ <invalid>
+ <doc>-001</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="short">-1</value>
+ </element>
+ </correct>
+ <valid>
+ <doc> -1 </doc>
+ </valid>
+ <valid>
+ <doc>-001</doc>
+ </valid>
+ <invalid>
+ <doc>1</doc>
+ </invalid>
+ <invalid>
+ <doc>+1</doc>
+ </invalid>
+ <invalid>
+ <doc> 1 </doc>
+ </invalid>
+ <invalid>
+ <doc>001</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype byte</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="byte"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <valid>
+ <doc>127</doc>
+ </valid>
+ <valid>
+ <doc>-128</doc>
+ </valid>
+ <invalid>
+ <doc>128</doc>
+ </invalid>
+ <invalid>
+ <doc>-129</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype unsignedLong</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="unsignedLong"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <valid>
+ <doc>18446744073709551615</doc>
+ </valid>
+ <invalid>
+ <doc>18446744073709551616</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype unsignedInt</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="unsignedInt"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <valid>
+ <doc>4294967295</doc>
+ </valid>
+ <invalid>
+ <doc>4294967296</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype unsignedShort</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="unsignedShort"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <valid>
+ <doc>65535</doc>
+ </valid>
+ <invalid>
+ <doc>65536</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype unsignedByte</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="unsignedByte"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>1</doc>
+ </valid>
+ <valid>
+ <doc>+1</doc>
+ </valid>
+ <valid>
+ <doc>0</doc>
+ </valid>
+ <valid>
+ <doc>255</doc>
+ </valid>
+ <invalid>
+ <doc>256</doc>
+ </invalid>
+ <invalid>
+ <doc>-1</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype string</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="string"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>any thing at all!</doc>
+ </valid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype normalizedString</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="normalizedString"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>any thing at all!</doc>
+ </valid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype token</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>any thing at all!</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="token"></value>
+ </element>
+ </correct>
+ <valid>
+ <doc> </doc>
+ </valid>
+ <valid>
+ <doc>
+&#13; </doc>
+ </valid>
+ <invalid>
+ <doc>x </doc>
+ </invalid>
+ <invalid>
+ <doc>x
+</doc>
+ </invalid>
+ <invalid>
+ <doc>x&#13;</doc>
+ </invalid>
+ <invalid>
+ <doc>x </doc>
+ </invalid>
+ <invalid>
+ <doc> x</doc>
+ </invalid>
+ <invalid>
+ <doc>
+x</doc>
+ </invalid>
+ <invalid>
+ <doc>&#13;x</doc>
+ </invalid>
+ <invalid>
+ <doc> x</doc>
+ </invalid>
+ <invalid>
+ <doc>
+&#13; x
+&#13; </doc>
+ </invalid>
+ <invalid>
+ <doc>x y </doc>
+ </invalid>
+ <invalid>
+ <doc>x y
+</doc>
+ </invalid>
+ <invalid>
+ <doc>x y&#13;</doc>
+ </invalid>
+ <invalid>
+ <doc>x y </doc>
+ </invalid>
+ <invalid>
+ <doc>x y</doc>
+ </invalid>
+ <invalid>
+ <doc>x
+y</doc>
+ </invalid>
+ <invalid>
+ <doc>x&#13;y</doc>
+ </invalid>
+ <invalid>
+ <doc>x y</doc>
+ </invalid>
+ <invalid>
+ <doc> x y</doc>
+ </invalid>
+ <invalid>
+ <doc>
+x y</doc>
+ </invalid>
+ <invalid>
+ <doc>&#13;x y</doc>
+ </invalid>
+ <invalid>
+ <doc> x y</doc>
+ </invalid>
+ <invalid>
+ <doc>
+&#13; x
+&#13; y
+&#13; </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="token">x </value>
+ </element>
+ </correct>
+ <valid>
+ <doc>x
+</doc>
+ </valid>
+ <valid>
+ <doc>x&#13;</doc>
+ </valid>
+ <valid>
+ <doc>x </doc>
+ </valid>
+ <valid>
+ <doc> x</doc>
+ </valid>
+ <valid>
+ <doc>
+x</doc>
+ </valid>
+ <valid>
+ <doc>&#13;x</doc>
+ </valid>
+ <valid>
+ <doc> x</doc>
+ </valid>
+ <valid>
+ <doc>
+&#13; x
+&#13; </doc>
+ </valid>
+ <invalid>
+ <doc></doc>
+ </invalid>
+ <invalid>
+ <doc> </doc>
+ </invalid>
+ <invalid>
+ <doc>
+&#13; </doc>
+ </invalid>
+ <invalid>
+ <doc>x y </doc>
+ </invalid>
+ <invalid>
+ <doc>x y
+</doc>
+ </invalid>
+ <invalid>
+ <doc>x y&#13;</doc>
+ </invalid>
+ <invalid>
+ <doc>x y </doc>
+ </invalid>
+ <invalid>
+ <doc>x y</doc>
+ </invalid>
+ <invalid>
+ <doc>x
+y</doc>
+ </invalid>
+ <invalid>
+ <doc>x&#13;y</doc>
+ </invalid>
+ <invalid>
+ <doc>x y</doc>
+ </invalid>
+ <invalid>
+ <doc> x y</doc>
+ </invalid>
+ <invalid>
+ <doc>
+x y</doc>
+ </invalid>
+ <invalid>
+ <doc>&#13;x y</doc>
+ </invalid>
+ <invalid>
+ <doc> x y</doc>
+ </invalid>
+ <invalid>
+ <doc>
+&#13; x
+&#13; y
+&#13; </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="token">x y </value>
+ </element>
+ </correct>
+ <valid>
+ <doc>x y
+</doc>
+ </valid>
+ <valid>
+ <doc>x y&#13;</doc>
+ </valid>
+ <valid>
+ <doc>x y </doc>
+ </valid>
+ <valid>
+ <doc>x y</doc>
+ </valid>
+ <valid>
+ <doc>x
+y</doc>
+ </valid>
+ <valid>
+ <doc>x&#13;y</doc>
+ </valid>
+ <valid>
+ <doc>x y</doc>
+ </valid>
+ <valid>
+ <doc> x y</doc>
+ </valid>
+ <valid>
+ <doc>
+x y</doc>
+ </valid>
+ <valid>
+ <doc>&#13;x y</doc>
+ </valid>
+ <valid>
+ <doc> x y</doc>
+ </valid>
+ <valid>
+ <doc>
+&#13; x
+&#13; y
+&#13; </doc>
+ </valid>
+ <invalid>
+ <doc></doc>
+ </invalid>
+ <invalid>
+ <doc> </doc>
+ </invalid>
+ <invalid>
+ <doc>
+&#13; </doc>
+ </invalid>
+ <invalid>
+ <doc>x </doc>
+ </invalid>
+ <invalid>
+ <doc>x
+</doc>
+ </invalid>
+ <invalid>
+ <doc>x&#13;</doc>
+ </invalid>
+ <invalid>
+ <doc>x </doc>
+ </invalid>
+ <invalid>
+ <doc> x</doc>
+ </invalid>
+ <invalid>
+ <doc>
+x</doc>
+ </invalid>
+ <invalid>
+ <doc>&#13;x</doc>
+ </invalid>
+ <invalid>
+ <doc> x</doc>
+ </invalid>
+ <invalid>
+ <doc>
+&#13; x
+&#13; </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">0</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc></doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc></doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>x</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>x</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">0</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>x</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc> x </doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc> x </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">0</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc> x </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>ð €</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>ð €</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="token">
+ <param name="length">0</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>ð €</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype language</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="language"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>en</doc>
+ </valid>
+ <valid>
+ <doc>en-UK</doc>
+ </valid>
+ <valid>
+ <doc>i-cherokee</doc>
+ </valid>
+ <valid>
+ <doc>x-klingon</doc>
+ </valid>
+ <valid>
+ <doc>en-uk-scotland</doc>
+ </valid>
+ <invalid>
+ <doc>en.UK</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype Name</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="Name"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>foo</doc>
+ </valid>
+ <valid>
+ <doc>_0123456789</doc>
+ </valid>
+ <invalid>
+ <doc>.</doc>
+ </invalid>
+ <valid>
+ <doc>:</doc>
+ </valid>
+ <invalid>
+ <doc>-</doc>
+ </invalid>
+ <invalid>
+ <doc>1234</doc>
+ </invalid>
+ <valid>
+ <doc> foo </doc>
+ </valid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype NCName</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NCName"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>foo</doc>
+ </valid>
+ <invalid>
+ <doc>foo:bar</doc>
+ </invalid>
+ <invalid>
+ <doc>0foo</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="NCName">foo</value>
+ </element>
+ </correct>
+ <valid>
+ <doc> foo </doc>
+ </valid>
+ <invalid>
+ <doc>FOO</doc>
+ </invalid>
+ <invalid>
+ <doc> FOO </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <value type="NCName">FOO</value>
+ </element>
+ </correct>
+ <valid>
+ <doc> FOO </doc>
+ </valid>
+ <invalid>
+ <doc>foo</doc>
+ </invalid>
+ <invalid>
+ <doc> foo </doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype NMTOKEN</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>foo</doc>
+ </valid>
+ <valid>
+ <doc>_</doc>
+ </valid>
+ <valid>
+ <doc>.</doc>
+ </valid>
+ <valid>
+ <doc>:</doc>
+ </valid>
+ <valid>
+ <doc>-</doc>
+ </valid>
+ <valid>
+ <doc>1234</doc>
+ </valid>
+ <valid>
+ <doc> foo </doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN">
+ <param name="length">3</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc> foo </doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN">
+ <param name="length">4</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc> foo </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc> foo </doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>fo</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN">
+ <param name="length">3</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>fo</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>fo</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN">
+ <param name="length">1</param>
+ </data>
+ </element>
+ </correct>
+ <valid>
+ <doc>f</doc>
+ </valid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN">
+ <param name="length">2</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>f</doc>
+ </invalid>
+ </testCase>
+ <testCase>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKEN">
+ <param name="length">0</param>
+ </data>
+ </element>
+ </correct>
+ <invalid>
+ <doc>f</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype NMTOKENS</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="NMTOKENS"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>foo bar</doc>
+ </valid>
+ <invalid>
+ <doc></doc>
+ </invalid>
+ <valid>
+ <doc>1 2 3 4</doc>
+ </valid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype ID</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="ID"/>
+ </element>
+ </correct>
+ <valid>
+ <doc>foobar</doc>
+ </valid>
+ <invalid>
+ <doc>foo:bar</doc>
+ </invalid>
+ <invalid>
+ <doc>foo bar</doc>
+ </invalid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype ENTITY</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="ENTITY"/>
+ </element>
+ </correct>
+ <invalid>
+ <doc></doc>
+ </invalid>
+ <invalid>
+ <doc>foo</doc>
+ </invalid>
+ <valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt;&#10;]&gt;">
+ <doc>foo</doc>
+ </valid>
+ </testCase>
+ </testSuite>
+ <testSuite>
+ <documentation>Datatype ENTITIES</documentation>
+ <testCase>
+ <requires datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
+ <correct>
+ <element xmlns="http://relaxng.org/ns/structure/1.0" name="doc" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <data type="ENTITIES"/>
+ </element>
+ </correct>
+ <invalid>
+ <doc></doc>
+ </invalid>
+ <invalid>
+ <doc>foo</doc>
+ </invalid>
+ <valid dtd="&#10;&lt;!DOCTYPE doc [&#10;&lt;!ENTITY foo SYSTEM 'whatever' NDATA jpeg&gt; &#10;&lt;!ENTITY bar SYSTEM 'whatever' NDATA jpeg&gt; &#10;]&gt;">
+ <doc> foo bar </doc>
+ </valid>
+ </testCase>
+ </testSuite>
+</testSuite>
diff --git a/testAutomata.c b/testAutomata.c
new file mode 100644
index 0000000..a168a4b
--- /dev/null
+++ b/testAutomata.c
@@ -0,0 +1,307 @@
+/*
+ * testRegexp.c: simple module for testing regular expressions
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <veillard@redhat.com>
+ */
+
+#include <string.h>
+#include "libxml.h"
+#ifdef LIBXML_AUTOMATA_ENABLED
+
+#include <libxml/tree.h>
+#include <libxml/xmlautomata.h>
+
+static int scanNumber(char **ptr) {
+ int ret = 0;
+ char *cur;
+
+ cur = *ptr;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ ret = ret * 10 + (*cur - '0');
+ cur++;
+ }
+ *ptr = cur;
+ return(ret);
+}
+
+static void
+testRegexpFile(const char *filename) {
+ FILE *input;
+ char expr[5000];
+ int len;
+ int ret;
+ int i;
+ xmlAutomataPtr am;
+ xmlAutomataStatePtr states[1000];
+ xmlRegexpPtr regexp = NULL;
+ xmlRegExecCtxtPtr exec = NULL;
+
+ for (i = 0;i<1000;i++)
+ states[i] = NULL;
+
+ input = fopen(filename, "r");
+ if (input == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot open %s for reading\n", filename);
+ return;
+ }
+
+ am = xmlNewAutomata();
+ if (am == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot create automata\n");
+ fclose(input);
+ }
+ states[0] = xmlAutomataGetInitState(am);
+ if (states[0] == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot get start state\n");
+ xmlFreeAutomata(am);
+ fclose(input);
+ }
+ ret = 0;
+
+ while (fgets(expr, 4500, input) != NULL) {
+ if (expr[0] == '#')
+ continue;
+ len = strlen(expr);
+ len--;
+ while ((len >= 0) &&
+ ((expr[len] == '\n') || (expr[len] == '\t') ||
+ (expr[len] == '\r') || (expr[len] == ' '))) len--;
+ expr[len + 1] = 0;
+ if (len >= 0) {
+ if ((am != NULL) && (expr[0] == 't') && (expr[1] == ' ')) {
+ char *ptr = &expr[2];
+ int from, to;
+
+ from = scanNumber(&ptr);
+ if (*ptr != ' ') {
+ xmlGenericError(xmlGenericErrorContext,
+ "Bad line %s\n", expr);
+ break;
+ }
+ if (states[from] == NULL)
+ states[from] = xmlAutomataNewState(am);
+ ptr++;
+ to = scanNumber(&ptr);
+ if (*ptr != ' ') {
+ xmlGenericError(xmlGenericErrorContext,
+ "Bad line %s\n", expr);
+ break;
+ }
+ if (states[to] == NULL)
+ states[to] = xmlAutomataNewState(am);
+ ptr++;
+ xmlAutomataNewTransition(am, states[from], states[to],
+ BAD_CAST ptr, NULL);
+ } else if ((am != NULL) && (expr[0] == 'e') && (expr[1] == ' ')) {
+ char *ptr = &expr[2];
+ int from, to;
+
+ from = scanNumber(&ptr);
+ if (*ptr != ' ') {
+ xmlGenericError(xmlGenericErrorContext,
+ "Bad line %s\n", expr);
+ break;
+ }
+ if (states[from] == NULL)
+ states[from] = xmlAutomataNewState(am);
+ ptr++;
+ to = scanNumber(&ptr);
+ if (states[to] == NULL)
+ states[to] = xmlAutomataNewState(am);
+ xmlAutomataNewEpsilon(am, states[from], states[to]);
+ } else if ((am != NULL) && (expr[0] == 'f') && (expr[1] == ' ')) {
+ char *ptr = &expr[2];
+ int state;
+
+ state = scanNumber(&ptr);
+ if (states[state] == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Bad state %d : %s\n", state, expr);
+ break;
+ }
+ xmlAutomataSetFinalState(am, states[state]);
+ } else if ((am != NULL) && (expr[0] == 'c') && (expr[1] == ' ')) {
+ char *ptr = &expr[2];
+ int from, to;
+ int min, max;
+
+ from = scanNumber(&ptr);
+ if (*ptr != ' ') {
+ xmlGenericError(xmlGenericErrorContext,
+ "Bad line %s\n", expr);
+ break;
+ }
+ if (states[from] == NULL)
+ states[from] = xmlAutomataNewState(am);
+ ptr++;
+ to = scanNumber(&ptr);
+ if (*ptr != ' ') {
+ xmlGenericError(xmlGenericErrorContext,
+ "Bad line %s\n", expr);
+ break;
+ }
+ if (states[to] == NULL)
+ states[to] = xmlAutomataNewState(am);
+ ptr++;
+ min = scanNumber(&ptr);
+ if (*ptr != ' ') {
+ xmlGenericError(xmlGenericErrorContext,
+ "Bad line %s\n", expr);
+ break;
+ }
+ ptr++;
+ max = scanNumber(&ptr);
+ if (*ptr != ' ') {
+ xmlGenericError(xmlGenericErrorContext,
+ "Bad line %s\n", expr);
+ break;
+ }
+ ptr++;
+ xmlAutomataNewCountTrans(am, states[from], states[to],
+ BAD_CAST ptr, min, max, NULL);
+ } else if ((am != NULL) && (expr[0] == '-') && (expr[1] == '-')) {
+ /* end of the automata */
+ regexp = xmlAutomataCompile(am);
+ xmlFreeAutomata(am);
+ am = NULL;
+ if (regexp == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Failed to compile the automata");
+ break;
+ }
+ } else if ((expr[0] == '=') && (expr[1] == '>')) {
+ if (regexp == NULL) {
+ printf("=> failed not compiled\n");
+ } else {
+ if (exec == NULL)
+ exec = xmlRegNewExecCtxt(regexp, NULL, NULL);
+ if (ret == 0) {
+ ret = xmlRegExecPushString(exec, NULL, NULL);
+ }
+ if (ret == 1)
+ printf("=> Passed\n");
+ else if ((ret == 0) || (ret == -1))
+ printf("=> Failed\n");
+ else if (ret < 0)
+ printf("=> Error\n");
+ xmlRegFreeExecCtxt(exec);
+ exec = NULL;
+ }
+ ret = 0;
+ } else if (regexp != NULL) {
+ if (exec == NULL)
+ exec = xmlRegNewExecCtxt(regexp, NULL, NULL);
+ ret = xmlRegExecPushString(exec, BAD_CAST expr, NULL);
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Unexpected line %s\n", expr);
+ }
+ }
+ }
+ fclose(input);
+ if (regexp != NULL)
+ xmlRegFreeRegexp(regexp);
+ if (exec != NULL)
+ xmlRegFreeExecCtxt(exec);
+ if (am != NULL)
+ xmlFreeAutomata(am);
+}
+
+int main(int argc, char **argv) {
+
+ xmlInitMemory();
+
+ if (argc == 1) {
+ int ret;
+ xmlAutomataPtr am;
+ xmlAutomataStatePtr start, cur;
+ xmlRegexpPtr regexp;
+ xmlRegExecCtxtPtr exec;
+
+ am = xmlNewAutomata();
+ start = xmlAutomataGetInitState(am);
+
+ /* generate a[ba]*a */
+ cur = xmlAutomataNewTransition(am, start, NULL, BAD_CAST"a", NULL);
+ xmlAutomataNewTransition(am, cur, cur, BAD_CAST"b", NULL);
+ xmlAutomataNewTransition(am, cur, cur, BAD_CAST"a", NULL);
+ cur = xmlAutomataNewCountTrans(am, cur, NULL, BAD_CAST"a", 2, 3, NULL);
+ xmlAutomataSetFinalState(am, cur);
+
+ /* compile it in a regexp and free the automata */
+ regexp = xmlAutomataCompile(am);
+ xmlFreeAutomata(am);
+
+ /* test the regexp */
+ xmlRegexpPrint(stdout, regexp);
+ exec = xmlRegNewExecCtxt(regexp, NULL, NULL);
+ ret = xmlRegExecPushString(exec, BAD_CAST"a", NULL);
+ if (ret == 1)
+ printf("final\n");
+ else if (ret < 0)
+ printf("error\n");
+ ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
+ if (ret == 1)
+ printf("final\n");
+ else if (ret < 0)
+ printf("error\n");
+ ret =xmlRegExecPushString(exec, BAD_CAST"b", NULL);
+ if (ret == 1)
+ printf("final\n");
+ else if (ret < 0)
+ printf("error\n");
+ ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
+ if (ret == 1)
+ printf("final\n");
+ else if (ret < 0)
+ printf("error\n");
+ ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
+ if (ret == 1)
+ printf("final\n");
+ else if (ret < 0)
+ printf("error\n");
+ ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
+ if (ret == 1)
+ printf("final\n");
+ else if (ret < 0)
+ printf("error\n");
+ ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
+ if (ret == 1)
+ printf("final\n");
+ else if (ret < 0)
+ printf("error\n");
+ if (ret == 0) {
+ ret = xmlRegExecPushString(exec, NULL, NULL);
+ if (ret == 1)
+ printf("final\n");
+ else if (ret < 0)
+ printf("error\n");
+ }
+ xmlRegFreeExecCtxt(exec);
+
+ /* free the regexp */
+ xmlRegFreeRegexp(regexp);
+ } else {
+ int i;
+
+ for (i = 1;i < argc;i++)
+ testRegexpFile(argv[i]);
+ }
+
+ xmlCleanupParser();
+ xmlMemoryDump();
+ return(0);
+}
+
+#else
+#include <stdio.h>
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ printf("%s : Automata support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* LIBXML_AUTOMATA_ENABLED */
diff --git a/testC14N.c b/testC14N.c
new file mode 100644
index 0000000..6a36a68
--- /dev/null
+++ b/testC14N.c
@@ -0,0 +1,357 @@
+/*
+ * Canonical XML implementation test program
+ * (http://www.w3.org/TR/2001/REC-xml-c14n-20010315)
+ *
+ * See Copyright for the status of this software.
+ *
+ * Author: Aleksey Sanin <aleksey@aleksey.com>
+ */
+#include "libxml.h"
+#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+
+#include <libxml/c14n.h>
+
+
+static void usage(const char *name) {
+ fprintf(stderr,
+ "Usage: %s <mode> <xml-file> [<xpath-expr>] [<inclusive-ns-list>]\n",
+ name);
+ fprintf(stderr, "where <mode> is one of following:\n");
+ fprintf(stderr,
+ "--with-comments \t XML file canonization w comments\n");
+ fprintf(stderr,
+ "--without-comments \t XML file canonization w/o comments\n");
+ fprintf(stderr,
+ "--exc-with-comments \t Exclusive XML file canonization w comments\n");
+ fprintf(stderr,
+ "--exc-without-comments\t Exclusive XML file canonization w/o comments\n");
+}
+
+static xmlXPathObjectPtr
+load_xpath_expr (xmlDocPtr parent_doc, const char* filename);
+
+static xmlChar **parse_list(xmlChar *str);
+
+/* static void print_xpath_nodes(xmlNodeSetPtr nodes); */
+
+static int
+test_c14n(const char* xml_filename, int with_comments, int exclusive,
+ const char* xpath_filename, xmlChar **inclusive_namespaces) {
+ xmlDocPtr doc;
+ xmlXPathObjectPtr xpath = NULL;
+ xmlChar *result = NULL;
+ int ret;
+
+ /*
+ * build an XML tree from a the file; we need to add default
+ * attributes and resolve all character and entities references
+ */
+ xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
+ xmlSubstituteEntitiesDefault(1);
+
+ doc = xmlParseFile(xml_filename);
+ if (doc == NULL) {
+ fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename);
+ return(-1);
+ }
+
+ /*
+ * Check the document is of the right kind
+ */
+ if(xmlDocGetRootElement(doc) == NULL) {
+ fprintf(stderr,"Error: empty document for file \"%s\"\n", xml_filename);
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+
+ /*
+ * load xpath file if specified
+ */
+ if(xpath_filename) {
+ xpath = load_xpath_expr(doc, xpath_filename);
+ if(xpath == NULL) {
+ fprintf(stderr,"Error: unable to evaluate xpath expression\n");
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+ }
+
+ /*
+ * Canonical form
+ */
+ /* fprintf(stderr,"File \"%s\" loaded: start canonization\n", xml_filename); */
+ ret = xmlC14NDocDumpMemory(doc,
+ (xpath) ? xpath->nodesetval : NULL,
+ exclusive, inclusive_namespaces,
+ with_comments, &result);
+ if(ret >= 0) {
+ if(result != NULL) {
+ write(1, result, ret);
+ xmlFree(result);
+ }
+ } else {
+ fprintf(stderr,"Error: failed to canonicalize XML file \"%s\" (ret=%d)\n", xml_filename, ret);
+ if(result != NULL) xmlFree(result);
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+
+ /*
+ * Cleanup
+ */
+ if(xpath != NULL) xmlXPathFreeObject(xpath);
+ xmlFreeDoc(doc);
+
+ return(ret);
+}
+
+int main(int argc, char **argv) {
+ int ret = -1;
+
+ /*
+ * Init libxml
+ */
+ xmlInitParser();
+ LIBXML_TEST_VERSION
+
+ /*
+ * Parse command line and process file
+ */
+ if( argc < 3 ) {
+ fprintf(stderr, "Error: wrong number of arguments.\n");
+ usage(argv[0]);
+ } else if(strcmp(argv[1], "--with-comments") == 0) {
+ ret = test_c14n(argv[2], 1, 0, (argc > 3) ? argv[3] : NULL, NULL);
+ } else if(strcmp(argv[1], "--without-comments") == 0) {
+ ret = test_c14n(argv[2], 0, 0, (argc > 3) ? argv[3] : NULL, NULL);
+ } else if(strcmp(argv[1], "--exc-with-comments") == 0) {
+ xmlChar **list;
+
+ /* load exclusive namespace from command line */
+ list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL;
+ ret = test_c14n(argv[2], 1, 1, (argc > 3) ? argv[3] : NULL, list);
+ if(list != NULL) xmlFree(list);
+ } else if(strcmp(argv[1], "--exc-without-comments") == 0) {
+ xmlChar **list;
+
+ /* load exclusive namespace from command line */
+ list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL;
+ ret = test_c14n(argv[2], 0, 1, (argc > 3) ? argv[3] : NULL, list);
+ if(list != NULL) xmlFree(list);
+ } else {
+ fprintf(stderr, "Error: bad option.\n");
+ usage(argv[0]);
+ }
+
+ /*
+ * Shutdown libxml
+ */
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return((ret >= 0) ? 0 : 1);
+}
+
+/*
+ * Macro used to grow the current buffer.
+ */
+#define growBufferReentrant() { \
+ buffer_size *= 2; \
+ buffer = (xmlChar **) \
+ xmlRealloc(buffer, buffer_size * sizeof(xmlChar*)); \
+ if (buffer == NULL) { \
+ perror("realloc failed"); \
+ return(NULL); \
+ } \
+}
+
+static xmlChar **
+parse_list(xmlChar *str) {
+ xmlChar **buffer;
+ xmlChar **out = NULL;
+ int buffer_size = 0;
+ int len;
+
+ if(str == NULL) {
+ return(NULL);
+ }
+
+ len = xmlStrlen(str);
+ if((str[0] == '\'') && (str[len - 1] == '\'')) {
+ str[len - 1] = '\0';
+ str++;
+ len -= 2;
+ }
+ /*
+ * allocate an translation buffer.
+ */
+ buffer_size = 1000;
+ buffer = (xmlChar **) xmlMalloc(buffer_size * sizeof(xmlChar*));
+ if (buffer == NULL) {
+ perror("malloc failed");
+ return(NULL);
+ }
+ out = buffer;
+
+ while(*str != '\0') {
+ if (out - buffer > buffer_size - 10) {
+ int indx = out - buffer;
+
+ growBufferReentrant();
+ out = &buffer[indx];
+ }
+ (*out++) = str;
+ while(*str != ',' && *str != '\0') ++str;
+ if(*str == ',') *(str++) = '\0';
+ }
+ (*out) = NULL;
+ return buffer;
+}
+
+static xmlXPathObjectPtr
+load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
+ xmlXPathObjectPtr xpath;
+ xmlDocPtr doc;
+ xmlChar *expr;
+ xmlXPathContextPtr ctx;
+ xmlNodePtr node;
+ xmlNsPtr ns;
+
+ /*
+ * load XPath expr as a file
+ */
+ xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
+ xmlSubstituteEntitiesDefault(1);
+
+ doc = xmlParseFile(filename);
+ if (doc == NULL) {
+ fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
+ return(NULL);
+ }
+
+ /*
+ * Check the document is of the right kind
+ */
+ if(xmlDocGetRootElement(doc) == NULL) {
+ fprintf(stderr,"Error: empty document for file \"%s\"\n", filename);
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+
+ node = doc->children;
+ while(node != NULL && !xmlStrEqual(node->name, (const xmlChar *)"XPath")) {
+ node = node->next;
+ }
+
+ if(node == NULL) {
+ fprintf(stderr,"Error: XPath element expected in the file \"%s\"\n", filename);
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+
+ expr = xmlNodeGetContent(node);
+ if(expr == NULL) {
+ fprintf(stderr,"Error: XPath content element is NULL \"%s\"\n", filename);
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+
+ ctx = xmlXPathNewContext(parent_doc);
+ if(ctx == NULL) {
+ fprintf(stderr,"Error: unable to create new context\n");
+ xmlFree(expr);
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+
+ /*
+ * Register namespaces
+ */
+ ns = node->nsDef;
+ while(ns != NULL) {
+ if(xmlXPathRegisterNs(ctx, ns->prefix, ns->href) != 0) {
+ fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", ns->prefix, ns->href);
+ xmlFree(expr);
+ xmlXPathFreeContext(ctx);
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+ ns = ns->next;
+ }
+
+ /*
+ * Evaluate xpath
+ */
+ xpath = xmlXPathEvalExpression(expr, ctx);
+ if(xpath == NULL) {
+ fprintf(stderr,"Error: unable to evaluate xpath expression\n");
+ xmlFree(expr);
+ xmlXPathFreeContext(ctx);
+ xmlFreeDoc(doc);
+ return(NULL);
+ }
+
+ /* print_xpath_nodes(xpath->nodesetval); */
+
+ xmlFree(expr);
+ xmlXPathFreeContext(ctx);
+ xmlFreeDoc(doc);
+ return(xpath);
+}
+
+/*
+static void
+print_xpath_nodes(xmlNodeSetPtr nodes) {
+ xmlNodePtr cur;
+ int i;
+
+ if(nodes == NULL ){
+ fprintf(stderr, "Error: no nodes set defined\n");
+ return;
+ }
+
+ fprintf(stderr, "Nodes Set:\n-----\n");
+ for(i = 0; i < nodes->nodeNr; ++i) {
+ if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns;
+
+ ns = (xmlNsPtr)nodes->nodeTab[i];
+ cur = (xmlNodePtr)ns->next;
+ fprintf(stderr, "namespace \"%s\"=\"%s\" for node %s:%s\n",
+ ns->prefix, ns->href,
+ (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name);
+ } else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) {
+ cur = nodes->nodeTab[i];
+ fprintf(stderr, "element node \"%s:%s\"\n",
+ (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name);
+ } else {
+ cur = nodes->nodeTab[i];
+ fprintf(stderr, "node \"%s\": type %d\n", cur->name, cur->type);
+ }
+ }
+}
+*/
+
+#else
+#include <stdio.h>
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ printf("%s : XPath/Canonicalization and output support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* LIBXML_C14N_ENABLED */
+
+
diff --git a/testHTML.c b/testHTML.c
new file mode 100644
index 0000000..c913bb3
--- /dev/null
+++ b/testHTML.c
@@ -0,0 +1,868 @@
+/*
+ * testHTML.c : a small tester program for HTML input.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#include "libxml.h"
+
+#ifdef LIBXML_HTML_ENABLED
+
+#include <string.h>
+#include <stdarg.h>
+
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/HTMLparser.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/debugXML.h>
+#include <libxml/xmlerror.h>
+#include <libxml/globals.h>
+
+#ifdef LIBXML_DEBUG_ENABLED
+static int debug = 0;
+#endif
+static int copy = 0;
+static int sax = 0;
+static int repeat = 0;
+static int noout = 0;
+#ifdef LIBXML_PUSH_ENABLED
+static int push = 0;
+#endif /* LIBXML_PUSH_ENABLED */
+static char *encoding = NULL;
+static int options = 0;
+
+xmlSAXHandler emptySAXHandlerStruct = {
+ NULL, /* internalSubset */
+ NULL, /* isStandalone */
+ NULL, /* hasInternalSubset */
+ NULL, /* hasExternalSubset */
+ NULL, /* resolveEntity */
+ NULL, /* getEntity */
+ NULL, /* entityDecl */
+ NULL, /* notationDecl */
+ NULL, /* attributeDecl */
+ NULL, /* elementDecl */
+ NULL, /* unparsedEntityDecl */
+ NULL, /* setDocumentLocator */
+ NULL, /* startDocument */
+ NULL, /* endDocument */
+ NULL, /* startElement */
+ NULL, /* endElement */
+ NULL, /* reference */
+ NULL, /* characters */
+ NULL, /* ignorableWhitespace */
+ NULL, /* processingInstruction */
+ NULL, /* comment */
+ NULL, /* xmlParserWarning */
+ NULL, /* xmlParserError */
+ NULL, /* xmlParserError */
+ NULL, /* getParameterEntity */
+ NULL, /* cdataBlock */
+ NULL, /* externalSubset */
+ 1, /* initialized */
+ NULL, /* private */
+ NULL, /* startElementNsSAX2Func */
+ NULL, /* endElementNsSAX2Func */
+ NULL /* xmlStructuredErrorFunc */
+};
+
+xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
+extern xmlSAXHandlerPtr debugSAXHandler;
+
+/************************************************************************
+ * *
+ * Debug Handlers *
+ * *
+ ************************************************************************/
+
+/**
+ * isStandaloneDebug:
+ * @ctxt: An XML parser context
+ *
+ * Is this document tagged standalone ?
+ *
+ * Returns 1 if true
+ */
+static int
+isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ fprintf(stdout, "SAX.isStandalone()\n");
+ return(0);
+}
+
+/**
+ * hasInternalSubsetDebug:
+ * @ctxt: An XML parser context
+ *
+ * Does this document has an internal subset
+ *
+ * Returns 1 if true
+ */
+static int
+hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ fprintf(stdout, "SAX.hasInternalSubset()\n");
+ return(0);
+}
+
+/**
+ * hasExternalSubsetDebug:
+ * @ctxt: An XML parser context
+ *
+ * Does this document has an external subset
+ *
+ * Returns 1 if true
+ */
+static int
+hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ fprintf(stdout, "SAX.hasExternalSubset()\n");
+ return(0);
+}
+
+/**
+ * hasInternalSubsetDebug:
+ * @ctxt: An XML parser context
+ *
+ * Does this document has an internal subset
+ */
+static void
+internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
+ const xmlChar *ExternalID, const xmlChar *SystemID)
+{
+ fprintf(stdout, "SAX.internalSubset(%s,", name);
+ if (ExternalID == NULL)
+ fprintf(stdout, " ,");
+ else
+ fprintf(stdout, " %s,", ExternalID);
+ if (SystemID == NULL)
+ fprintf(stdout, " )\n");
+ else
+ fprintf(stdout, " %s)\n", SystemID);
+}
+
+/**
+ * resolveEntityDebug:
+ * @ctxt: An XML parser context
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * Special entity resolver, better left to the parser, it has
+ * more context than the application layer.
+ * The default behaviour is to NOT resolve the entities, in that case
+ * the ENTITY_REF nodes are built in the structure (and the parameter
+ * values).
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+static xmlParserInputPtr
+resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
+{
+ /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
+
+
+ fprintf(stdout, "SAX.resolveEntity(");
+ if (publicId != NULL)
+ fprintf(stdout, "%s", (char *)publicId);
+ else
+ fprintf(stdout, " ");
+ if (systemId != NULL)
+ fprintf(stdout, ", %s)\n", (char *)systemId);
+ else
+ fprintf(stdout, ", )\n");
+/*********
+ if (systemId != NULL) {
+ return(xmlNewInputFromFile(ctxt, (char *) systemId));
+ }
+ *********/
+ return(NULL);
+}
+
+/**
+ * getEntityDebug:
+ * @ctxt: An XML parser context
+ * @name: The entity name
+ *
+ * Get an entity by name
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+static xmlEntityPtr
+getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
+{
+ fprintf(stdout, "SAX.getEntity(%s)\n", name);
+ return(NULL);
+}
+
+/**
+ * getParameterEntityDebug:
+ * @ctxt: An XML parser context
+ * @name: The entity name
+ *
+ * Get a parameter entity by name
+ *
+ * Returns the xmlParserInputPtr
+ */
+static xmlEntityPtr
+getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
+{
+ fprintf(stdout, "SAX.getParameterEntity(%s)\n", name);
+ return(NULL);
+}
+
+
+/**
+ * entityDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: the entity name
+ * @type: the entity type
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @content: the entity value (without processing).
+ *
+ * An entity definition has been parsed
+ */
+static void
+entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
+ const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
+{
+ fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
+ name, type, publicId, systemId, content);
+}
+
+/**
+ * attributeDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: the attribute name
+ * @type: the attribute type
+ *
+ * An attribute definition has been parsed
+ */
+static void
+attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *elem, const xmlChar *name,
+ int type, int def, const xmlChar *defaultValue,
+ xmlEnumerationPtr tree ATTRIBUTE_UNUSED)
+{
+ fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
+ elem, name, type, def, defaultValue);
+}
+
+/**
+ * elementDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: the element name
+ * @type: the element type
+ * @content: the element value (without processing).
+ *
+ * An element definition has been parsed
+ */
+static void
+elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
+ xmlElementContentPtr content ATTRIBUTE_UNUSED)
+{
+ fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n",
+ name, type);
+}
+
+/**
+ * notationDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: The name of the notation
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * What to do when a notation declaration has been parsed.
+ */
+static void
+notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
+ const xmlChar *publicId, const xmlChar *systemId)
+{
+ fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n",
+ (char *) name, (char *) publicId, (char *) systemId);
+}
+
+/**
+ * unparsedEntityDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: The name of the entity
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @notationName: the name of the notation
+ *
+ * What to do when an unparsed entity declaration is parsed
+ */
+static void
+unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
+ const xmlChar *publicId, const xmlChar *systemId,
+ const xmlChar *notationName)
+{
+ fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
+ (char *) name, (char *) publicId, (char *) systemId,
+ (char *) notationName);
+}
+
+/**
+ * setDocumentLocatorDebug:
+ * @ctxt: An XML parser context
+ * @loc: A SAX Locator
+ *
+ * Receive the document locator at startup, actually xmlDefaultSAXLocator
+ * Everything is available on the context, so this is useless in our case.
+ */
+static void
+setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
+{
+ fprintf(stdout, "SAX.setDocumentLocator()\n");
+}
+
+/**
+ * startDocumentDebug:
+ * @ctxt: An XML parser context
+ *
+ * called when the document start being processed.
+ */
+static void
+startDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ fprintf(stdout, "SAX.startDocument()\n");
+}
+
+/**
+ * endDocumentDebug:
+ * @ctxt: An XML parser context
+ *
+ * called when the document end has been detected.
+ */
+static void
+endDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ fprintf(stdout, "SAX.endDocument()\n");
+}
+
+/**
+ * startElementDebug:
+ * @ctxt: An XML parser context
+ * @name: The element name
+ *
+ * called when an opening tag has been processed.
+ */
+static void
+startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
+{
+ int i;
+
+ fprintf(stdout, "SAX.startElement(%s", (char *) name);
+ if (atts != NULL) {
+ for (i = 0;(atts[i] != NULL);i++) {
+ fprintf(stdout, ", %s", atts[i++]);
+ if (atts[i] != NULL) {
+ unsigned char output[40];
+ const unsigned char *att = atts[i];
+ int outlen, attlen;
+ fprintf(stdout, "='");
+ while ((attlen = strlen((char*)att)) > 0) {
+ outlen = sizeof output - 1;
+ htmlEncodeEntities(output, &outlen, att, &attlen, '\'');
+ output[outlen] = 0;
+ fprintf(stdout, "%s", (char *) output);
+ att += attlen;
+ }
+ fprintf(stdout, "'");
+ }
+ }
+ }
+ fprintf(stdout, ")\n");
+}
+
+/**
+ * endElementDebug:
+ * @ctxt: An XML parser context
+ * @name: The element name
+ *
+ * called when the end of an element has been detected.
+ */
+static void
+endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
+{
+ fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
+}
+
+/**
+ * charactersDebug:
+ * @ctxt: An XML parser context
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * receiving some chars from the parser.
+ * Question: how much at a time ???
+ */
+static void
+charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
+{
+ unsigned char output[40];
+ int inlen = len, outlen = 30;
+
+ htmlEncodeEntities(output, &outlen, ch, &inlen, 0);
+ output[outlen] = 0;
+
+ fprintf(stdout, "SAX.characters(%s, %d)\n", output, len);
+}
+
+/**
+ * cdataDebug:
+ * @ctxt: An XML parser context
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * receiving some cdata chars from the parser.
+ * Question: how much at a time ???
+ */
+static void
+cdataDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
+{
+ unsigned char output[40];
+ int inlen = len, outlen = 30;
+
+ htmlEncodeEntities(output, &outlen, ch, &inlen, 0);
+ output[outlen] = 0;
+
+ fprintf(stdout, "SAX.cdata(%s, %d)\n", output, len);
+}
+
+/**
+ * referenceDebug:
+ * @ctxt: An XML parser context
+ * @name: The entity name
+ *
+ * called when an entity reference is detected.
+ */
+static void
+referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
+{
+ fprintf(stdout, "SAX.reference(%s)\n", name);
+}
+
+/**
+ * ignorableWhitespaceDebug:
+ * @ctxt: An XML parser context
+ * @ch: a xmlChar string
+ * @start: the first char in the string
+ * @len: the number of xmlChar
+ *
+ * receiving some ignorable whitespaces from the parser.
+ * Question: how much at a time ???
+ */
+static void
+ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
+{
+ char output[40];
+ int i;
+
+ for (i = 0;(i<len) && (i < 30);i++)
+ output[i] = ch[i];
+ output[i] = 0;
+
+ fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", output, len);
+}
+
+/**
+ * processingInstructionDebug:
+ * @ctxt: An XML parser context
+ * @target: the target name
+ * @data: the PI data's
+ * @len: the number of xmlChar
+ *
+ * A processing instruction has been parsed.
+ */
+static void
+processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
+ const xmlChar *data)
+{
+ fprintf(stdout, "SAX.processingInstruction(%s, %s)\n",
+ (char *) target, (char *) data);
+}
+
+/**
+ * commentDebug:
+ * @ctxt: An XML parser context
+ * @value: the comment content
+ *
+ * A comment has been parsed.
+ */
+static void
+commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
+{
+ fprintf(stdout, "SAX.comment(%s)\n", value);
+}
+
+/**
+ * warningDebug:
+ * @ctxt: An XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a warning messages, gives file, line, position and
+ * extra parameters.
+ */
+static void
+warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
+{
+ va_list args;
+
+ va_start(args, msg);
+ fprintf(stdout, "SAX.warning: ");
+ vfprintf(stdout, msg, args);
+ va_end(args);
+}
+
+/**
+ * errorDebug:
+ * @ctxt: An XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a error messages, gives file, line, position and
+ * extra parameters.
+ */
+static void
+errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
+{
+ va_list args;
+
+ va_start(args, msg);
+ fprintf(stdout, "SAX.error: ");
+ vfprintf(stdout, msg, args);
+ va_end(args);
+}
+
+/**
+ * fatalErrorDebug:
+ * @ctxt: An XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a fatalError messages, gives file, line, position and
+ * extra parameters.
+ */
+static void
+fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
+{
+ va_list args;
+
+ va_start(args, msg);
+ fprintf(stdout, "SAX.fatalError: ");
+ vfprintf(stdout, msg, args);
+ va_end(args);
+}
+
+xmlSAXHandler debugSAXHandlerStruct = {
+ internalSubsetDebug,
+ isStandaloneDebug,
+ hasInternalSubsetDebug,
+ hasExternalSubsetDebug,
+ resolveEntityDebug,
+ getEntityDebug,
+ entityDeclDebug,
+ notationDeclDebug,
+ attributeDeclDebug,
+ elementDeclDebug,
+ unparsedEntityDeclDebug,
+ setDocumentLocatorDebug,
+ startDocumentDebug,
+ endDocumentDebug,
+ startElementDebug,
+ endElementDebug,
+ referenceDebug,
+ charactersDebug,
+ ignorableWhitespaceDebug,
+ processingInstructionDebug,
+ commentDebug,
+ warningDebug,
+ errorDebug,
+ fatalErrorDebug,
+ getParameterEntityDebug,
+ cdataDebug,
+ NULL,
+ 1,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
+/************************************************************************
+ * *
+ * Debug *
+ * *
+ ************************************************************************/
+
+static void
+parseSAXFile(char *filename) {
+ htmlDocPtr doc = NULL;
+
+ /*
+ * Empty callbacks for checking
+ */
+#ifdef LIBXML_PUSH_ENABLED
+ if (push) {
+ FILE *f;
+
+ f = fopen(filename, "r");
+ if (f != NULL) {
+ int res, size = 3;
+ char chars[4096];
+ htmlParserCtxtPtr ctxt;
+
+ /* if (repeat) */
+ size = 4096;
+ res = fread(chars, 1, 4, f);
+ if (res > 0) {
+ ctxt = htmlCreatePushParserCtxt(emptySAXHandler, NULL,
+ chars, res, filename, XML_CHAR_ENCODING_NONE);
+ while ((res = fread(chars, 1, size, f)) > 0) {
+ htmlParseChunk(ctxt, chars, res, 0);
+ }
+ htmlParseChunk(ctxt, chars, 0, 1);
+ doc = ctxt->myDoc;
+ htmlFreeParserCtxt(ctxt);
+ }
+ if (doc != NULL) {
+ fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
+ xmlFreeDoc(doc);
+ }
+ fclose(f);
+ }
+ if (!noout) {
+ f = fopen(filename, "r");
+ if (f != NULL) {
+ int res, size = 3;
+ char chars[4096];
+ htmlParserCtxtPtr ctxt;
+
+ /* if (repeat) */
+ size = 4096;
+ res = fread(chars, 1, 4, f);
+ if (res > 0) {
+ ctxt = htmlCreatePushParserCtxt(debugSAXHandler, NULL,
+ chars, res, filename, XML_CHAR_ENCODING_NONE);
+ while ((res = fread(chars, 1, size, f)) > 0) {
+ htmlParseChunk(ctxt, chars, res, 0);
+ }
+ htmlParseChunk(ctxt, chars, 0, 1);
+ doc = ctxt->myDoc;
+ htmlFreeParserCtxt(ctxt);
+ }
+ if (doc != NULL) {
+ fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
+ xmlFreeDoc(doc);
+ }
+ fclose(f);
+ }
+ }
+ } else {
+#endif /* LIBXML_PUSH_ENABLED */
+ doc = htmlSAXParseFile(filename, NULL, emptySAXHandler, NULL);
+ if (doc != NULL) {
+ fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
+ xmlFreeDoc(doc);
+ }
+
+ if (!noout) {
+ /*
+ * Debug callback
+ */
+ doc = htmlSAXParseFile(filename, NULL, debugSAXHandler, NULL);
+ if (doc != NULL) {
+ fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
+ xmlFreeDoc(doc);
+ }
+ }
+#ifdef LIBXML_PUSH_ENABLED
+ }
+#endif /* LIBXML_PUSH_ENABLED */
+}
+
+static void
+parseAndPrintFile(char *filename) {
+ htmlDocPtr doc = NULL;
+
+ /*
+ * build an HTML tree from a string;
+ */
+#ifdef LIBXML_PUSH_ENABLED
+ if (push) {
+ FILE *f;
+
+ f = fopen(filename, "r");
+ if (f != NULL) {
+ int res, size = 3;
+ char chars[4096];
+ htmlParserCtxtPtr ctxt;
+
+ /* if (repeat) */
+ size = 4096;
+ res = fread(chars, 1, 4, f);
+ if (res > 0) {
+ ctxt = htmlCreatePushParserCtxt(NULL, NULL,
+ chars, res, filename, XML_CHAR_ENCODING_NONE);
+ while ((res = fread(chars, 1, size, f)) > 0) {
+ htmlParseChunk(ctxt, chars, res, 0);
+ }
+ htmlParseChunk(ctxt, chars, 0, 1);
+ doc = ctxt->myDoc;
+ htmlFreeParserCtxt(ctxt);
+ }
+ fclose(f);
+ }
+ } else {
+ doc = htmlReadFile(filename, NULL, options);
+ }
+#else
+ doc = htmlReadFile(filename,NULL,options);
+#endif
+ if (doc == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Could not parse %s\n", filename);
+ }
+
+#ifdef LIBXML_TREE_ENABLED
+ /*
+ * test intermediate copy if needed.
+ */
+ if (copy) {
+ htmlDocPtr tmp;
+
+ tmp = doc;
+ doc = xmlCopyDoc(doc, 1);
+ xmlFreeDoc(tmp);
+ }
+#endif
+
+#ifdef LIBXML_OUTPUT_ENABLED
+ /*
+ * print it.
+ */
+ if (!noout) {
+#ifdef LIBXML_DEBUG_ENABLED
+ if (!debug) {
+ if (encoding)
+ htmlSaveFileEnc("-", doc, encoding);
+ else
+ htmlDocDump(stdout, doc);
+ } else
+ xmlDebugDumpDocument(stdout, doc);
+#else
+ if (encoding)
+ htmlSaveFileEnc("-", doc, encoding);
+ else
+ htmlDocDump(stdout, doc);
+#endif
+ }
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+ /*
+ * free it.
+ */
+ xmlFreeDoc(doc);
+}
+
+int main(int argc, char **argv) {
+ int i, count;
+ int files = 0;
+
+ for (i = 1; i < argc ; i++) {
+#ifdef LIBXML_DEBUG_ENABLED
+ if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
+ debug++;
+ else
+#endif
+ if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
+ copy++;
+#ifdef LIBXML_PUSH_ENABLED
+ else if ((!strcmp(argv[i], "-push")) || (!strcmp(argv[i], "--push")))
+ push++;
+#endif /* LIBXML_PUSH_ENABLED */
+ else if ((!strcmp(argv[i], "-sax")) || (!strcmp(argv[i], "--sax")))
+ sax++;
+ else if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout")))
+ noout++;
+ else if ((!strcmp(argv[i], "-repeat")) ||
+ (!strcmp(argv[i], "--repeat")))
+ repeat++;
+ else if ((!strcmp(argv[i], "-encode")) ||
+ (!strcmp(argv[i], "--encode"))) {
+ i++;
+ encoding = argv[i];
+ }
+ }
+ for (i = 1; i < argc ; i++) {
+ if ((!strcmp(argv[i], "-encode")) ||
+ (!strcmp(argv[i], "--encode"))) {
+ i++;
+ continue;
+ }
+ if (argv[i][0] != '-') {
+ if (repeat) {
+ for (count = 0;count < 100 * repeat;count++) {
+ if (sax)
+ parseSAXFile(argv[i]);
+ else
+ parseAndPrintFile(argv[i]);
+ }
+ } else {
+ if (sax)
+ parseSAXFile(argv[i]);
+ else
+ parseAndPrintFile(argv[i]);
+ }
+ files ++;
+ }
+ }
+ if (files == 0) {
+ printf("Usage : %s [--debug] [--copy] [--copy] HTMLfiles ...\n",
+ argv[0]);
+ printf("\tParse the HTML files and output the result of the parsing\n");
+#ifdef LIBXML_DEBUG_ENABLED
+ printf("\t--debug : dump a debug tree of the in-memory document\n");
+#endif
+ printf("\t--copy : used to test the internal copy implementation\n");
+ printf("\t--sax : debug the sequence of SAX callbacks\n");
+ printf("\t--repeat : parse the file 100 times, for timing\n");
+ printf("\t--noout : do not print the result\n");
+#ifdef LIBXML_PUSH_ENABLED
+ printf("\t--push : use the push mode parser\n");
+#endif /* LIBXML_PUSH_ENABLED */
+ printf("\t--encode encoding : output in the given encoding\n");
+ }
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return(0);
+}
+#else /* !LIBXML_HTML_ENABLED */
+#include <stdio.h>
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ printf("%s : HTML support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif
diff --git a/testReader.c b/testReader.c
new file mode 100644
index 0000000..a874250
--- /dev/null
+++ b/testReader.c
@@ -0,0 +1,139 @@
+/*
+ * testSAX.c : a small tester program for parsing using the SAX API.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#include "libxml.h"
+
+#ifdef LIBXML_READER_ENABLED
+#include <string.h>
+#include <stdarg.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+
+#include <libxml/xmlreader.h>
+
+int debug = 0;
+int dump = 0;
+int noent = 0;
+int count = 0;
+int valid = 0;
+
+static void usage(const char *progname) {
+ printf("Usage : %s [options] XMLfiles ...\n", progname);
+ printf("\tParse the XML files using the xmlTextReader API\n");
+ printf("\t --count: count the number of attribute and elements\n");
+ printf("\t --valid: validate the document\n");
+ exit(1);
+}
+static int elem, attrs;
+
+static void processNode(xmlTextReaderPtr reader) {
+ int type;
+
+ type = xmlTextReaderNodeType(reader);
+ if (count) {
+ if (type == 1) {
+ elem++;
+ attrs += xmlTextReaderAttributeCount(reader);
+ }
+ }
+}
+
+static void handleFile(const char *filename) {
+ xmlTextReaderPtr reader;
+ int ret;
+
+ if (count) {
+ elem = 0;
+ attrs = 0;
+ }
+
+ reader = xmlNewTextReaderFilename(filename);
+ if (reader != NULL) {
+ if (valid)
+ xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);
+
+ /*
+ * Process all nodes in sequence
+ */
+ ret = xmlTextReaderRead(reader);
+ while (ret == 1) {
+ processNode(reader);
+ ret = xmlTextReaderRead(reader);
+ }
+
+ /*
+ * Done, cleanup and status
+ */
+ xmlFreeTextReader(reader);
+ if (ret != 0) {
+ printf("%s : failed to parse\n", filename);
+ } else if (count)
+ printf("%s : %d elements, %d attributes\n", filename, elem, attrs);
+ } else {
+ fprintf(stderr, "Unable to open %s\n", filename);
+ }
+}
+
+int main(int argc, char **argv) {
+ int i;
+ int files = 0;
+
+ if (argc <= 1) {
+ usage(argv[0]);
+ return(1);
+ }
+ LIBXML_TEST_VERSION
+ for (i = 1; i < argc ; i++) {
+ if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
+ debug++;
+ else if ((!strcmp(argv[i], "-dump")) || (!strcmp(argv[i], "--dump")))
+ dump++;
+ else if ((!strcmp(argv[i], "-count")) || (!strcmp(argv[i], "--count")))
+ count++;
+ else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))
+ valid++;
+ else if ((!strcmp(argv[i], "-noent")) ||
+ (!strcmp(argv[i], "--noent")))
+ noent++;
+ }
+ if (noent != 0) xmlSubstituteEntitiesDefault(1);
+ for (i = 1; i < argc ; i++) {
+ if (argv[i][0] != '-') {
+ handleFile(argv[i]);
+ files ++;
+ }
+ }
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return(0);
+}
+#else
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ printf("%s : xmlReader parser support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* LIBXML_READER_ENABLED */
diff --git a/testRegexp.c b/testRegexp.c
new file mode 100644
index 0000000..7f34414
--- /dev/null
+++ b/testRegexp.c
@@ -0,0 +1,158 @@
+/*
+ * testRegexp.c: simple module for testing regular expressions
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <veillard@redhat.com>
+ */
+
+#include <string.h>
+#include "libxml.h"
+#ifdef LIBXML_REGEXP_ENABLED
+#include <libxml/tree.h>
+#include <libxml/xmlregexp.h>
+
+int repeat = 0;
+int debug = 0;
+
+static void testRegexp(xmlRegexpPtr comp, const char *value) {
+ int ret;
+
+ ret = xmlRegexpExec(comp, (const xmlChar *) value);
+ if (ret == 1)
+ printf("%s: Ok\n", value);
+ else if (ret == 0)
+ printf("%s: Fail\n", value);
+ else
+ printf("%s: Error: %d\n", value, ret);
+ if (repeat) {
+ int j;
+ for (j = 0;j < 999999;j++)
+ xmlRegexpExec(comp, (const xmlChar *) value);
+ }
+}
+
+static void
+testRegexpFile(const char *filename) {
+ xmlRegexpPtr comp = NULL;
+ 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 *pattern = &expression[2];
+
+ if (comp != NULL) {
+ xmlRegFreeRegexp(comp);
+ comp = NULL;
+ }
+ printf("Regexp: %s\n", pattern) ;
+ comp = xmlRegexpCompile((const xmlChar *) pattern);
+ if (comp == NULL) {
+ printf(" failed to compile\n");
+ break;
+ }
+ } else if (comp == NULL) {
+ printf("Regexp: %s\n", expression) ;
+ comp = xmlRegexpCompile((const xmlChar *) expression);
+ if (comp == NULL) {
+ printf(" failed to compile\n");
+ break;
+ }
+ } else if (comp != NULL) {
+ testRegexp(comp, expression);
+ }
+ }
+ }
+ fclose(input);
+ if (comp != NULL)
+ xmlRegFreeRegexp(comp);
+}
+
+
+static void usage(const char *name) {
+ fprintf(stderr, "Usage: %s\n", name);
+}
+
+int main(int argc, char **argv) {
+ xmlRegexpPtr comp = NULL;
+ const char *pattern = NULL;
+ char *filename = NULL;
+ int i;
+
+ xmlInitMemory();
+
+ if (argc <= 1) {
+ usage(argv[0]);
+ return(1);
+ }
+ for (i = 1; i < argc ; i++) {
+ if (!strcmp(argv[i], "-"))
+ break;
+
+ if (argv[i][0] != '-')
+ continue;
+ if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) {
+ debug++;
+ } else if ((!strcmp(argv[i], "-repeat")) ||
+ (!strcmp(argv[i], "--repeat"))) {
+ repeat++;
+ } else if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "--input")))
+ filename = argv[++i];
+ else {
+ fprintf(stderr, "Unknown option %s\n", argv[i]);
+ usage(argv[0]);
+ }
+ }
+ if (filename != NULL) {
+ 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;
+ }
+ if (debug)
+ xmlRegexpPrint(stdout, comp);
+ } else {
+ testRegexp(comp, argv[i]);
+ }
+ }
+ }
+ xmlMemoryDump();
+ if (comp != NULL)
+ xmlRegFreeRegexp(comp);
+ }
+ xmlCleanupParser();
+ /* xmlMemoryDump(); */
+ return(0);
+}
+
+#else
+#include <stdio.h>
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ printf("%s : Regexp support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* LIBXML_REGEXP_ENABLED */
diff --git a/testRelax.c b/testRelax.c
new file mode 100644
index 0000000..e18b3c2
--- /dev/null
+++ b/testRelax.c
@@ -0,0 +1,194 @@
+/*
+ * testRelax.c : a small tester program for RelaxNG validation
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel.Veillard@w3.org
+ */
+
+#include "libxml.h"
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+/* seems needed for Solaris */
+#ifndef MAP_FAILED
+#define MAP_FAILED ((void *) -1)
+#endif
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/debugXML.h>
+#include <libxml/relaxng.h>
+
+#ifdef LIBXML_DEBUG_ENABLED
+static int debug = 0;
+#endif
+static int noout = 0;
+static int tree = 0;
+#ifdef HAVE_SYS_MMAN_H
+static int memory = 0;
+#endif
+
+
+int main(int argc, char **argv) {
+ int i;
+ int files = 0;
+ xmlRelaxNGPtr schema = NULL;
+
+ for (i = 1; i < argc ; i++) {
+#ifdef LIBXML_DEBUG_ENABLED
+ if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
+ debug++;
+ else
+#endif
+#ifdef HAVE_SYS_MMAN_H
+ if ((!strcmp(argv[i], "-memory")) || (!strcmp(argv[i], "--memory"))) {
+ memory++;
+ } else
+#endif
+ if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) {
+ noout++;
+ } else
+ if ((!strcmp(argv[i], "-tree")) || (!strcmp(argv[i], "--tree"))) {
+ tree++;
+ }
+ }
+ xmlLineNumbersDefault(1);
+ xmlSubstituteEntitiesDefault(1);
+ for (i = 1; i < argc ; i++) {
+ if (argv[i][0] != '-') {
+ if (schema == NULL) {
+ xmlRelaxNGParserCtxtPtr ctxt;
+
+#ifdef HAVE_SYS_MMAN_H
+ if (memory) {
+ int fd;
+ struct stat info;
+ const char *base;
+ if (stat(argv[i], &info) < 0)
+ break;
+ if ((fd = open(argv[i], O_RDONLY)) < 0)
+ break;
+ base = mmap(NULL, info.st_size, PROT_READ,
+ MAP_SHARED, fd, 0) ;
+ if (base == (void *) MAP_FAILED)
+ break;
+
+ ctxt = xmlRelaxNGNewMemParserCtxt((char *)base,info.st_size);
+
+ xmlRelaxNGSetParserErrors(ctxt,
+ (xmlRelaxNGValidityErrorFunc) fprintf,
+ (xmlRelaxNGValidityWarningFunc) fprintf,
+ stderr);
+ schema = xmlRelaxNGParse(ctxt);
+ xmlRelaxNGFreeParserCtxt(ctxt);
+ munmap((char *) base, info.st_size);
+ } else
+#endif
+ {
+ ctxt = xmlRelaxNGNewParserCtxt(argv[i]);
+ xmlRelaxNGSetParserErrors(ctxt,
+ (xmlRelaxNGValidityErrorFunc) fprintf,
+ (xmlRelaxNGValidityWarningFunc) fprintf,
+ stderr);
+ schema = xmlRelaxNGParse(ctxt);
+ xmlRelaxNGFreeParserCtxt(ctxt);
+ }
+ if (schema == NULL) {
+ printf("Relax-NG schema %s failed to compile\n", argv[i]);
+ files = -1;
+ break;
+ }
+#ifdef LIBXML_OUTPUT_ENABLED
+#ifdef LIBXML_DEBUG_ENABLED
+ if (debug)
+ xmlRelaxNGDump(stdout, schema);
+#endif
+ if (tree)
+ xmlRelaxNGDumpTree(stdout, schema);
+#endif /* LIBXML_OUTPUT_ENABLED */
+ } else {
+ xmlDocPtr doc;
+
+ doc = xmlReadFile(argv[i],NULL,0);
+
+ if (doc == NULL) {
+ fprintf(stderr, "Could not parse %s\n", argv[i]);
+ } else {
+ xmlRelaxNGValidCtxtPtr ctxt;
+ int ret;
+
+ ctxt = xmlRelaxNGNewValidCtxt(schema);
+ xmlRelaxNGSetValidErrors(ctxt,
+ (xmlRelaxNGValidityErrorFunc) fprintf,
+ (xmlRelaxNGValidityWarningFunc) fprintf,
+ stderr);
+ ret = xmlRelaxNGValidateDoc(ctxt, doc);
+ if (ret == 0) {
+ printf("%s validates\n", argv[i]);
+ } else if (ret > 0) {
+ printf("%s fails to validate\n", argv[i]);
+ } else {
+ printf("%s validation generated an internal error\n",
+ argv[i]);
+ }
+ xmlRelaxNGFreeValidCtxt(ctxt);
+ xmlFreeDoc(doc);
+ }
+ }
+ files ++;
+ }
+ }
+ if (schema != NULL)
+ xmlRelaxNGFree(schema);
+ if (files == 0) {
+ printf("Usage : %s [--debug] [--noout] schemas XMLfiles ...\n",
+ argv[0]);
+ printf("\tParse the HTML files and output the result of the parsing\n");
+#ifdef LIBXML_DEBUG_ENABLED
+ printf("\t--debug : dump a debug tree of the in-memory document\n");
+#endif
+ printf("\t--noout : do not print the result\n");
+ printf("\t--tree : print the intermediate Relax-NG document tree\n");
+#ifdef HAVE_SYS_MMAN_H
+ printf("\t--memory : test the schemas in memory parsing\n");
+#endif
+ }
+ xmlRelaxNGCleanupTypes();
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return(0);
+}
+
+#else
+#include <stdio.h>
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ printf("%s : RelaxNG support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/testSAX.c b/testSAX.c
new file mode 100644
index 0000000..f394078
--- /dev/null
+++ b/testSAX.c
@@ -0,0 +1,1180 @@
+/*
+ * testSAX.c : a small tester program for parsing using the SAX API.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#include "libxml.h"
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_TIMEB_H
+#include <sys/timeb.h>
+#endif
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+
+#ifdef LIBXML_SAX1_ENABLED
+#include <string.h>
+#include <stdarg.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+
+#include <libxml/globals.h>
+#include <libxml/xmlerror.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h> /* only for xmlNewInputFromFile() */
+#include <libxml/tree.h>
+#include <libxml/debugXML.h>
+#include <libxml/xmlmemory.h>
+
+static int debug = 0;
+static int copy = 0;
+static int recovery = 0;
+static int push = 0;
+static int speed = 0;
+static int noent = 0;
+static int quiet = 0;
+static int nonull = 0;
+static int sax2 = 0;
+static int repeat = 0;
+static int callbacks = 0;
+static int timing = 0;
+
+/*
+ * Timing routines.
+ */
+/*
+ * Internal timing routines to remove the necessity to have unix-specific
+ * function calls
+ */
+
+#ifndef HAVE_GETTIMEOFDAY
+#ifdef HAVE_SYS_TIMEB_H
+#ifdef HAVE_SYS_TIME_H
+#ifdef HAVE_FTIME
+
+static int
+my_gettimeofday(struct timeval *tvp, void *tzp)
+{
+ struct timeb timebuffer;
+
+ ftime(&timebuffer);
+ if (tvp) {
+ tvp->tv_sec = timebuffer.time;
+ tvp->tv_usec = timebuffer.millitm * 1000L;
+ }
+ return (0);
+}
+#define HAVE_GETTIMEOFDAY 1
+#define gettimeofday my_gettimeofday
+
+#endif /* HAVE_FTIME */
+#endif /* HAVE_SYS_TIME_H */
+#endif /* HAVE_SYS_TIMEB_H */
+#endif /* !HAVE_GETTIMEOFDAY */
+
+#if defined(HAVE_GETTIMEOFDAY)
+static struct timeval begin, end;
+
+/*
+ * startTimer: call where you want to start timing
+ */
+static void
+startTimer(void)
+{
+ gettimeofday(&begin, NULL);
+}
+
+/*
+ * endTimer: call where you want to stop timing and to print out a
+ * message about the timing performed; format is a printf
+ * type argument
+ */
+static void
+endTimer(const char *fmt, ...)
+{
+ long msec;
+ va_list ap;
+
+ gettimeofday(&end, NULL);
+ msec = end.tv_sec - begin.tv_sec;
+ msec *= 1000;
+ msec += (end.tv_usec - begin.tv_usec) / 1000;
+
+#ifndef HAVE_STDARG_H
+#error "endTimer required stdarg functions"
+#endif
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+
+ fprintf(stderr, " took %ld ms\n", msec);
+}
+#elif defined(HAVE_TIME_H)
+/*
+ * No gettimeofday function, so we have to make do with calling clock.
+ * This is obviously less accurate, but there's little we can do about
+ * that.
+ */
+#ifndef CLOCKS_PER_SEC
+#define CLOCKS_PER_SEC 100
+#endif
+
+static clock_t begin, end;
+static void
+startTimer(void)
+{
+ begin = clock();
+}
+static void
+endTimer(const char *fmt, ...)
+{
+ long msec;
+ va_list ap;
+
+ end = clock();
+ msec = ((end - begin) * 1000) / CLOCKS_PER_SEC;
+
+#ifndef HAVE_STDARG_H
+#error "endTimer required stdarg functions"
+#endif
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, " took %ld ms\n", msec);
+}
+#else
+
+/*
+ * We don't have a gettimeofday or time.h, so we just don't do timing
+ */
+static void
+startTimer(void)
+{
+ /*
+ * Do nothing
+ */
+}
+static void
+endTimer(char *format, ...)
+{
+ /*
+ * We cannot do anything because we don't have a timing function
+ */
+#ifdef HAVE_STDARG_H
+ va_start(ap, format);
+ vfprintf(stderr, format, ap);
+ va_end(ap);
+ fprintf(stderr, " was not timed\n", msec);
+#else
+ /* We don't have gettimeofday, time or stdarg.h, what crazy world is
+ * this ?!
+ */
+#endif
+}
+#endif
+
+/*
+ * empty SAX block
+ */
+xmlSAXHandler emptySAXHandlerStruct = {
+ NULL, /* internalSubset */
+ NULL, /* isStandalone */
+ NULL, /* hasInternalSubset */
+ NULL, /* hasExternalSubset */
+ NULL, /* resolveEntity */
+ NULL, /* getEntity */
+ NULL, /* entityDecl */
+ NULL, /* notationDecl */
+ NULL, /* attributeDecl */
+ NULL, /* elementDecl */
+ NULL, /* unparsedEntityDecl */
+ NULL, /* setDocumentLocator */
+ NULL, /* startDocument */
+ NULL, /* endDocument */
+ NULL, /* startElement */
+ NULL, /* endElement */
+ NULL, /* reference */
+ NULL, /* characters */
+ NULL, /* ignorableWhitespace */
+ NULL, /* processingInstruction */
+ NULL, /* comment */
+ NULL, /* xmlParserWarning */
+ NULL, /* xmlParserError */
+ NULL, /* xmlParserError */
+ NULL, /* getParameterEntity */
+ NULL, /* cdataBlock; */
+ NULL, /* externalSubset; */
+ 1,
+ NULL,
+ NULL, /* startElementNs */
+ NULL, /* endElementNs */
+ NULL /* xmlStructuredErrorFunc */
+};
+
+xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
+extern xmlSAXHandlerPtr debugSAXHandler;
+
+/************************************************************************
+ * *
+ * Debug Handlers *
+ * *
+ ************************************************************************/
+
+/**
+ * isStandaloneDebug:
+ * @ctxt: An XML parser context
+ *
+ * Is this document tagged standalone ?
+ *
+ * Returns 1 if true
+ */
+static int
+isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ callbacks++;
+ if (quiet)
+ return(0);
+ fprintf(stdout, "SAX.isStandalone()\n");
+ return(0);
+}
+
+/**
+ * hasInternalSubsetDebug:
+ * @ctxt: An XML parser context
+ *
+ * Does this document has an internal subset
+ *
+ * Returns 1 if true
+ */
+static int
+hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ callbacks++;
+ if (quiet)
+ return(0);
+ fprintf(stdout, "SAX.hasInternalSubset()\n");
+ return(0);
+}
+
+/**
+ * hasExternalSubsetDebug:
+ * @ctxt: An XML parser context
+ *
+ * Does this document has an external subset
+ *
+ * Returns 1 if true
+ */
+static int
+hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ callbacks++;
+ if (quiet)
+ return(0);
+ fprintf(stdout, "SAX.hasExternalSubset()\n");
+ return(0);
+}
+
+/**
+ * internalSubsetDebug:
+ * @ctxt: An XML parser context
+ *
+ * Does this document has an internal subset
+ */
+static void
+internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
+ const xmlChar *ExternalID, const xmlChar *SystemID)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.internalSubset(%s,", name);
+ if (ExternalID == NULL)
+ fprintf(stdout, " ,");
+ else
+ fprintf(stdout, " %s,", ExternalID);
+ if (SystemID == NULL)
+ fprintf(stdout, " )\n");
+ else
+ fprintf(stdout, " %s)\n", SystemID);
+}
+
+/**
+ * externalSubsetDebug:
+ * @ctxt: An XML parser context
+ *
+ * Does this document has an external subset
+ */
+static void
+externalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
+ const xmlChar *ExternalID, const xmlChar *SystemID)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.externalSubset(%s,", name);
+ if (ExternalID == NULL)
+ fprintf(stdout, " ,");
+ else
+ fprintf(stdout, " %s,", ExternalID);
+ if (SystemID == NULL)
+ fprintf(stdout, " )\n");
+ else
+ fprintf(stdout, " %s)\n", SystemID);
+}
+
+/**
+ * resolveEntityDebug:
+ * @ctxt: An XML parser context
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * Special entity resolver, better left to the parser, it has
+ * more context than the application layer.
+ * The default behaviour is to NOT resolve the entities, in that case
+ * the ENTITY_REF nodes are built in the structure (and the parameter
+ * values).
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+static xmlParserInputPtr
+resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
+{
+ callbacks++;
+ if (quiet)
+ return(NULL);
+ /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
+
+
+ fprintf(stdout, "SAX.resolveEntity(");
+ if (publicId != NULL)
+ fprintf(stdout, "%s", (char *)publicId);
+ else
+ fprintf(stdout, " ");
+ if (systemId != NULL)
+ fprintf(stdout, ", %s)\n", (char *)systemId);
+ else
+ fprintf(stdout, ", )\n");
+/*********
+ if (systemId != NULL) {
+ return(xmlNewInputFromFile(ctxt, (char *) systemId));
+ }
+ *********/
+ return(NULL);
+}
+
+/**
+ * getEntityDebug:
+ * @ctxt: An XML parser context
+ * @name: The entity name
+ *
+ * Get an entity by name
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+static xmlEntityPtr
+getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
+{
+ callbacks++;
+ if (quiet)
+ return(NULL);
+ fprintf(stdout, "SAX.getEntity(%s)\n", name);
+ return(NULL);
+}
+
+/**
+ * getParameterEntityDebug:
+ * @ctxt: An XML parser context
+ * @name: The entity name
+ *
+ * Get a parameter entity by name
+ *
+ * Returns the xmlParserInputPtr
+ */
+static xmlEntityPtr
+getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
+{
+ callbacks++;
+ if (quiet)
+ return(NULL);
+ fprintf(stdout, "SAX.getParameterEntity(%s)\n", name);
+ return(NULL);
+}
+
+
+/**
+ * entityDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: the entity name
+ * @type: the entity type
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @content: the entity value (without processing).
+ *
+ * An entity definition has been parsed
+ */
+static void
+entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
+ const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
+{
+const xmlChar *nullstr = BAD_CAST "(null)";
+ /* not all libraries handle printing null pointers nicely */
+ if (publicId == NULL)
+ publicId = nullstr;
+ if (systemId == NULL)
+ systemId = nullstr;
+ if (content == NULL)
+ content = (xmlChar *)nullstr;
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
+ name, type, publicId, systemId, content);
+}
+
+/**
+ * attributeDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: the attribute name
+ * @type: the attribute type
+ *
+ * An attribute definition has been parsed
+ */
+static void
+attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar * elem,
+ const xmlChar * name, int type, int def,
+ const xmlChar * defaultValue, xmlEnumerationPtr tree)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ if (defaultValue == NULL)
+ fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, NULL, ...)\n",
+ elem, name, type, def);
+ else
+ fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
+ elem, name, type, def, defaultValue);
+ xmlFreeEnumeration(tree);
+}
+
+/**
+ * elementDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: the element name
+ * @type: the element type
+ * @content: the element value (without processing).
+ *
+ * An element definition has been parsed
+ */
+static void
+elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
+ xmlElementContentPtr content ATTRIBUTE_UNUSED)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n",
+ name, type);
+}
+
+/**
+ * notationDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: The name of the notation
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * What to do when a notation declaration has been parsed.
+ */
+static void
+notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
+ const xmlChar *publicId, const xmlChar *systemId)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n",
+ (char *) name, (char *) publicId, (char *) systemId);
+}
+
+/**
+ * unparsedEntityDeclDebug:
+ * @ctxt: An XML parser context
+ * @name: The name of the entity
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @notationName: the name of the notation
+ *
+ * What to do when an unparsed entity declaration is parsed
+ */
+static void
+unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
+ const xmlChar *publicId, const xmlChar *systemId,
+ const xmlChar *notationName)
+{
+const xmlChar *nullstr = BAD_CAST "(null)";
+
+ if (publicId == NULL)
+ publicId = nullstr;
+ if (systemId == NULL)
+ systemId = nullstr;
+ if (notationName == NULL)
+ notationName = nullstr;
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
+ (char *) name, (char *) publicId, (char *) systemId,
+ (char *) notationName);
+}
+
+/**
+ * setDocumentLocatorDebug:
+ * @ctxt: An XML parser context
+ * @loc: A SAX Locator
+ *
+ * Receive the document locator at startup, actually xmlDefaultSAXLocator
+ * Everything is available on the context, so this is useless in our case.
+ */
+static void
+setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.setDocumentLocator()\n");
+}
+
+/**
+ * startDocumentDebug:
+ * @ctxt: An XML parser context
+ *
+ * called when the document start being processed.
+ */
+static void
+startDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.startDocument()\n");
+}
+
+/**
+ * endDocumentDebug:
+ * @ctxt: An XML parser context
+ *
+ * called when the document end has been detected.
+ */
+static void
+endDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.endDocument()\n");
+}
+
+/**
+ * startElementDebug:
+ * @ctxt: An XML parser context
+ * @name: The element name
+ *
+ * called when an opening tag has been processed.
+ */
+static void
+startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
+{
+ int i;
+
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.startElement(%s", (char *) name);
+ if (atts != NULL) {
+ for (i = 0;(atts[i] != NULL);i++) {
+ fprintf(stdout, ", %s='", atts[i++]);
+ if (atts[i] != NULL)
+ fprintf(stdout, "%s'", atts[i]);
+ }
+ }
+ fprintf(stdout, ")\n");
+}
+
+/**
+ * endElementDebug:
+ * @ctxt: An XML parser context
+ * @name: The element name
+ *
+ * called when the end of an element has been detected.
+ */
+static void
+endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
+}
+
+/**
+ * charactersDebug:
+ * @ctxt: An XML parser context
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * receiving some chars from the parser.
+ * Question: how much at a time ???
+ */
+static void
+charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
+{
+ char output[40];
+ int i;
+
+ callbacks++;
+ if (quiet)
+ return;
+ for (i = 0;(i<len) && (i < 30);i++)
+ output[i] = ch[i];
+ output[i] = 0;
+
+ fprintf(stdout, "SAX.characters(%s, %d)\n", output, len);
+}
+
+/**
+ * referenceDebug:
+ * @ctxt: An XML parser context
+ * @name: The entity name
+ *
+ * called when an entity reference is detected.
+ */
+static void
+referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.reference(%s)\n", name);
+}
+
+/**
+ * ignorableWhitespaceDebug:
+ * @ctxt: An XML parser context
+ * @ch: a xmlChar string
+ * @start: the first char in the string
+ * @len: the number of xmlChar
+ *
+ * receiving some ignorable whitespaces from the parser.
+ * Question: how much at a time ???
+ */
+static void
+ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
+{
+ char output[40];
+ int i;
+
+ callbacks++;
+ if (quiet)
+ return;
+ for (i = 0;(i<len) && (i < 30);i++)
+ output[i] = ch[i];
+ output[i] = 0;
+ fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", output, len);
+}
+
+/**
+ * processingInstructionDebug:
+ * @ctxt: An XML parser context
+ * @target: the target name
+ * @data: the PI data's
+ * @len: the number of xmlChar
+ *
+ * A processing instruction has been parsed.
+ */
+static void
+processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
+ const xmlChar *data)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ if (data != NULL)
+ fprintf(stdout, "SAX.processingInstruction(%s, %s)\n",
+ (char *) target, (char *) data);
+ else
+ fprintf(stdout, "SAX.processingInstruction(%s, NULL)\n",
+ (char *) target);
+}
+
+/**
+ * cdataBlockDebug:
+ * @ctx: the user data (XML parser context)
+ * @value: The pcdata content
+ * @len: the block length
+ *
+ * called when a pcdata block has been parsed
+ */
+static void
+cdataBlockDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value, int len)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.pcdata(%.20s, %d)\n",
+ (char *) value, len);
+}
+
+/**
+ * commentDebug:
+ * @ctxt: An XML parser context
+ * @value: the comment content
+ *
+ * A comment has been parsed.
+ */
+static void
+commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.comment(%s)\n", value);
+}
+
+/**
+ * warningDebug:
+ * @ctxt: An XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a warning messages, gives file, line, position and
+ * extra parameters.
+ */
+static void
+warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
+{
+ va_list args;
+
+ callbacks++;
+ if (quiet)
+ return;
+ va_start(args, msg);
+ fprintf(stdout, "SAX.warning: ");
+ vfprintf(stdout, msg, args);
+ va_end(args);
+}
+
+/**
+ * errorDebug:
+ * @ctxt: An XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a error messages, gives file, line, position and
+ * extra parameters.
+ */
+static void
+errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
+{
+ va_list args;
+
+ callbacks++;
+ if (quiet)
+ return;
+ va_start(args, msg);
+ fprintf(stdout, "SAX.error: ");
+ vfprintf(stdout, msg, args);
+ va_end(args);
+}
+
+/**
+ * fatalErrorDebug:
+ * @ctxt: An XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a fatalError messages, gives file, line, position and
+ * extra parameters.
+ */
+static void
+fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
+{
+ va_list args;
+
+ callbacks++;
+ if (quiet)
+ return;
+ va_start(args, msg);
+ fprintf(stdout, "SAX.fatalError: ");
+ vfprintf(stdout, msg, args);
+ va_end(args);
+}
+
+xmlSAXHandler debugSAXHandlerStruct = {
+ internalSubsetDebug,
+ isStandaloneDebug,
+ hasInternalSubsetDebug,
+ hasExternalSubsetDebug,
+ resolveEntityDebug,
+ getEntityDebug,
+ entityDeclDebug,
+ notationDeclDebug,
+ attributeDeclDebug,
+ elementDeclDebug,
+ unparsedEntityDeclDebug,
+ setDocumentLocatorDebug,
+ startDocumentDebug,
+ endDocumentDebug,
+ startElementDebug,
+ endElementDebug,
+ referenceDebug,
+ charactersDebug,
+ ignorableWhitespaceDebug,
+ processingInstructionDebug,
+ commentDebug,
+ warningDebug,
+ errorDebug,
+ fatalErrorDebug,
+ getParameterEntityDebug,
+ cdataBlockDebug,
+ externalSubsetDebug,
+ 1,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
+
+/*
+ * SAX2 specific callbacks
+ */
+/**
+ * startElementNsDebug:
+ * @ctxt: An XML parser context
+ * @name: The element name
+ *
+ * called when an opening tag has been processed.
+ */
+static void
+startElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI,
+ int nb_namespaces,
+ const xmlChar **namespaces,
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes)
+{
+ int i;
+
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.startElementNs(%s", (char *) localname);
+ if (prefix == NULL)
+ fprintf(stdout, ", NULL");
+ else
+ fprintf(stdout, ", %s", (char *) prefix);
+ if (URI == NULL)
+ fprintf(stdout, ", NULL");
+ else
+ fprintf(stdout, ", '%s'", (char *) URI);
+ fprintf(stdout, ", %d", nb_namespaces);
+
+ if (namespaces != NULL) {
+ for (i = 0;i < nb_namespaces * 2;i++) {
+ fprintf(stdout, ", xmlns");
+ if (namespaces[i] != NULL)
+ fprintf(stdout, ":%s", namespaces[i]);
+ i++;
+ fprintf(stdout, "='%s'", namespaces[i]);
+ }
+ }
+ fprintf(stdout, ", %d, %d", nb_attributes, nb_defaulted);
+ if (attributes != NULL) {
+ for (i = 0;i < nb_attributes;i += 5) {
+ if (attributes[i + 1] != NULL)
+ fprintf(stdout, ", %s:%s='", attributes[i + 1], attributes[i]);
+ else
+ fprintf(stdout, ", %s='", attributes[i]);
+ fprintf(stdout, "%.4s...', %d", attributes[i + 3],
+ (int)(attributes[i + 4] - attributes[i + 3]));
+ }
+ }
+ fprintf(stdout, ")\n");
+}
+
+/**
+ * endElementDebug:
+ * @ctxt: An XML parser context
+ * @name: The element name
+ *
+ * called when the end of an element has been detected.
+ */
+static void
+endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI)
+{
+ callbacks++;
+ if (quiet)
+ return;
+ fprintf(stdout, "SAX.endElementNs(%s", (char *) localname);
+ if (prefix == NULL)
+ fprintf(stdout, ", NULL");
+ else
+ fprintf(stdout, ", %s", (char *) prefix);
+ if (URI == NULL)
+ fprintf(stdout, ", NULL)\n");
+ else
+ fprintf(stdout, ", '%s')\n", (char *) URI);
+}
+
+xmlSAXHandler debugSAX2HandlerStruct = {
+ internalSubsetDebug,
+ isStandaloneDebug,
+ hasInternalSubsetDebug,
+ hasExternalSubsetDebug,
+ resolveEntityDebug,
+ getEntityDebug,
+ entityDeclDebug,
+ notationDeclDebug,
+ attributeDeclDebug,
+ elementDeclDebug,
+ unparsedEntityDeclDebug,
+ setDocumentLocatorDebug,
+ startDocumentDebug,
+ endDocumentDebug,
+ NULL,
+ NULL,
+ referenceDebug,
+ charactersDebug,
+ ignorableWhitespaceDebug,
+ processingInstructionDebug,
+ commentDebug,
+ warningDebug,
+ errorDebug,
+ fatalErrorDebug,
+ getParameterEntityDebug,
+ cdataBlockDebug,
+ externalSubsetDebug,
+ XML_SAX2_MAGIC,
+ NULL,
+ startElementNsDebug,
+ endElementNsDebug,
+ NULL
+};
+
+xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
+
+/************************************************************************
+ * *
+ * Debug *
+ * *
+ ************************************************************************/
+
+static void
+parseAndPrintFile(char *filename) {
+ int res;
+
+ if (push) {
+ FILE *f;
+
+ if ((!quiet) && (!nonull)) {
+ /*
+ * Empty callbacks for checking
+ */
+ f = fopen(filename, "r");
+ if (f != NULL) {
+ int ret;
+ char chars[10];
+ xmlParserCtxtPtr ctxt;
+
+ ret = fread(chars, 1, 4, f);
+ if (ret > 0) {
+ ctxt = xmlCreatePushParserCtxt(emptySAXHandler, NULL,
+ chars, ret, filename);
+ while ((ret = fread(chars, 1, 3, f)) > 0) {
+ xmlParseChunk(ctxt, chars, ret, 0);
+ }
+ xmlParseChunk(ctxt, chars, 0, 1);
+ xmlFreeParserCtxt(ctxt);
+ }
+ fclose(f);
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot read file %s\n", filename);
+ }
+ }
+ /*
+ * Debug callback
+ */
+ f = fopen(filename, "r");
+ if (f != NULL) {
+ int ret;
+ char chars[10];
+ xmlParserCtxtPtr ctxt;
+
+ ret = fread(chars, 1, 4, f);
+ if (ret > 0) {
+ if (sax2)
+ ctxt = xmlCreatePushParserCtxt(debugSAX2Handler, NULL,
+ chars, ret, filename);
+ else
+ ctxt = xmlCreatePushParserCtxt(debugSAXHandler, NULL,
+ chars, ret, filename);
+ while ((ret = fread(chars, 1, 3, f)) > 0) {
+ xmlParseChunk(ctxt, chars, ret, 0);
+ }
+ ret = xmlParseChunk(ctxt, chars, 0, 1);
+ xmlFreeParserCtxt(ctxt);
+ if (ret != 0) {
+ fprintf(stdout,
+ "xmlSAXUserParseFile returned error %d\n", ret);
+ }
+ }
+ fclose(f);
+ }
+ } else {
+ if (!speed) {
+ /*
+ * Empty callbacks for checking
+ */
+ if ((!quiet) && (!nonull)) {
+ res = xmlSAXUserParseFile(emptySAXHandler, NULL, filename);
+ if (res != 0) {
+ fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
+ }
+ }
+
+ /*
+ * Debug callback
+ */
+ callbacks = 0;
+ if (repeat) {
+ int i;
+ for (i = 0;i < 99;i++) {
+ if (sax2)
+ res = xmlSAXUserParseFile(debugSAX2Handler, NULL,
+ filename);
+ else
+ res = xmlSAXUserParseFile(debugSAXHandler, NULL,
+ filename);
+ }
+ }
+ if (sax2)
+ res = xmlSAXUserParseFile(debugSAX2Handler, NULL, filename);
+ else
+ res = xmlSAXUserParseFile(debugSAXHandler, NULL, filename);
+ if (res != 0) {
+ fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
+ }
+ if (quiet)
+ fprintf(stdout, "%d callbacks generated\n", callbacks);
+ } else {
+ /*
+ * test 100x the SAX parse
+ */
+ int i;
+
+ for (i = 0; i<100;i++)
+ res = xmlSAXUserParseFile(emptySAXHandler, NULL, filename);
+ if (res != 0) {
+ fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
+ }
+ }
+ }
+}
+
+
+int main(int argc, char **argv) {
+ int i;
+ int files = 0;
+
+ for (i = 1; i < argc ; i++) {
+ if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
+ debug++;
+ else if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
+ copy++;
+ else if ((!strcmp(argv[i], "-recover")) ||
+ (!strcmp(argv[i], "--recover")))
+ recovery++;
+ else if ((!strcmp(argv[i], "-push")) ||
+ (!strcmp(argv[i], "--push")))
+ push++;
+ else if ((!strcmp(argv[i], "-speed")) ||
+ (!strcmp(argv[i], "--speed")))
+ speed++;
+ else if ((!strcmp(argv[i], "-timing")) ||
+ (!strcmp(argv[i], "--timing"))) {
+ nonull++;
+ timing++;
+ quiet++;
+ } else if ((!strcmp(argv[i], "-repeat")) ||
+ (!strcmp(argv[i], "--repeat"))) {
+ repeat++;
+ quiet++;
+ } else if ((!strcmp(argv[i], "-noent")) ||
+ (!strcmp(argv[i], "--noent")))
+ noent++;
+ else if ((!strcmp(argv[i], "-quiet")) ||
+ (!strcmp(argv[i], "--quiet")))
+ quiet++;
+ else if ((!strcmp(argv[i], "-sax2")) ||
+ (!strcmp(argv[i], "--sax2")))
+ sax2++;
+ else if ((!strcmp(argv[i], "-nonull")) ||
+ (!strcmp(argv[i], "--nonull")))
+ nonull++;
+ }
+ if (noent != 0) xmlSubstituteEntitiesDefault(1);
+ for (i = 1; i < argc ; i++) {
+ if (argv[i][0] != '-') {
+ if (timing) {
+ startTimer();
+ }
+ parseAndPrintFile(argv[i]);
+ if (timing) {
+ endTimer("Parsing");
+ }
+ files ++;
+ }
+ }
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return(0);
+}
+#else
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ printf("%s : SAX1 parsing support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* LIBXML_SAX1_ENABLED */
diff --git a/testSchemas.c b/testSchemas.c
new file mode 100644
index 0000000..47f8b39
--- /dev/null
+++ b/testSchemas.c
@@ -0,0 +1,185 @@
+/*
+ * testSchemas.c : a small tester program for Schema validation
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel.Veillard@w3.org
+ */
+
+#include "libxml.h"
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+/* seems needed for Solaris */
+#ifndef MAP_FAILED
+#define MAP_FAILED ((void *) -1)
+#endif
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/debugXML.h>
+#include <libxml/xmlschemas.h>
+#include <libxml/xmlschemastypes.h>
+
+#ifdef LIBXML_DEBUG_ENABLED
+static int debug = 0;
+#endif
+static int noout = 0;
+#ifdef HAVE_SYS_MMAN_H
+static int memory = 0;
+#endif
+
+
+int main(int argc, char **argv) {
+ int i;
+ int files = 0;
+ xmlSchemaPtr schema = NULL;
+
+ for (i = 1; i < argc ; i++) {
+#ifdef LIBXML_DEBUG_ENABLED
+ if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
+ debug++;
+ else
+#endif
+#ifdef HAVE_SYS_MMAN_H
+ if ((!strcmp(argv[i], "-memory")) || (!strcmp(argv[i], "--memory"))) {
+ memory++;
+ } else
+#endif
+ if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) {
+ noout++;
+ }
+ }
+ xmlLineNumbersDefault(1);
+ for (i = 1; i < argc ; i++) {
+ if (argv[i][0] != '-') {
+ if (schema == NULL) {
+ xmlSchemaParserCtxtPtr ctxt;
+
+#ifdef HAVE_SYS_MMAN_H
+ if (memory) {
+ int fd;
+ struct stat info;
+ const char *base;
+ if (stat(argv[i], &info) < 0)
+ break;
+ if ((fd = open(argv[i], O_RDONLY)) < 0)
+ break;
+ base = mmap(NULL, info.st_size, PROT_READ,
+ MAP_SHARED, fd, 0) ;
+ if (base == (void *) MAP_FAILED)
+ break;
+
+ ctxt = xmlSchemaNewMemParserCtxt((char *)base,info.st_size);
+
+ xmlSchemaSetParserErrors(ctxt,
+ (xmlSchemaValidityErrorFunc) fprintf,
+ (xmlSchemaValidityWarningFunc) fprintf,
+ stderr);
+ schema = xmlSchemaParse(ctxt);
+ xmlSchemaFreeParserCtxt(ctxt);
+ munmap((char *) base, info.st_size);
+ } else
+#endif
+ {
+ ctxt = xmlSchemaNewParserCtxt(argv[i]);
+ xmlSchemaSetParserErrors(ctxt,
+ (xmlSchemaValidityErrorFunc) fprintf,
+ (xmlSchemaValidityWarningFunc) fprintf,
+ stderr);
+ schema = xmlSchemaParse(ctxt);
+ xmlSchemaFreeParserCtxt(ctxt);
+ }
+#ifdef LIBXML_OUTPUT_ENABLED
+#ifdef LIBXML_DEBUG_ENABLED
+ if (debug)
+ xmlSchemaDump(stdout, schema);
+#endif
+#endif /* LIBXML_OUTPUT_ENABLED */
+ if (schema == NULL)
+ goto failed_schemas;
+ } else {
+ xmlDocPtr doc;
+
+ doc = xmlReadFile(argv[i],NULL,0);
+
+ if (doc == NULL) {
+ fprintf(stderr, "Could not parse %s\n", argv[i]);
+ } else {
+ xmlSchemaValidCtxtPtr ctxt;
+ int ret;
+
+ ctxt = xmlSchemaNewValidCtxt(schema);
+ xmlSchemaSetValidErrors(ctxt,
+ (xmlSchemaValidityErrorFunc) fprintf,
+ (xmlSchemaValidityWarningFunc) fprintf,
+ stderr);
+ ret = xmlSchemaValidateDoc(ctxt, doc);
+ if (ret == 0) {
+ printf("%s validates\n", argv[i]);
+ } else if (ret > 0) {
+ printf("%s fails to validate\n", argv[i]);
+ } else {
+ printf("%s validation generated an internal error\n",
+ argv[i]);
+ }
+ xmlSchemaFreeValidCtxt(ctxt);
+ xmlFreeDoc(doc);
+ }
+ }
+ files ++;
+ }
+ }
+ if (schema != NULL)
+ xmlSchemaFree(schema);
+ if (files == 0) {
+ printf("Usage : %s [--debug] [--noout] schemas XMLfiles ...\n",
+ argv[0]);
+ printf("\tParse the HTML files and output the result of the parsing\n");
+#ifdef LIBXML_DEBUG_ENABLED
+ printf("\t--debug : dump a debug tree of the in-memory document\n");
+#endif
+ printf("\t--noout : do not print the result\n");
+#ifdef HAVE_SYS_MMAN_H
+ printf("\t--memory : test the schemas in memory parsing\n");
+#endif
+ }
+failed_schemas:
+ xmlSchemaCleanupTypes();
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return(0);
+}
+
+#else
+#include <stdio.h>
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ printf("%s : Schemas support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/testThreads.c b/testThreads.c
new file mode 100644
index 0000000..d740a14
--- /dev/null
+++ b/testThreads.c
@@ -0,0 +1,201 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include "libxml.h"
+
+#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED)
+#include <libxml/globals.h>
+#include <libxml/threads.h>
+#include <libxml/parser.h>
+#include <libxml/catalog.h>
+#ifdef HAVE_PTHREAD_H
+#include <pthread.h>
+#elif defined HAVE_BEOS_THREADS
+#include <OS.h>
+#endif
+#include <string.h>
+#if !defined(_MSC_VER)
+#include <unistd.h>
+#endif
+#include <assert.h>
+
+#define MAX_ARGC 20
+#ifdef HAVE_PTHREAD_H
+static pthread_t tid[MAX_ARGC];
+#elif defined HAVE_BEOS_THREADS
+static thread_id tid[MAX_ARGC];
+#endif
+
+static const char *catalog = "test/threads/complex.xml";
+static const char *testfiles[] = {
+ "test/threads/abc.xml",
+ "test/threads/acb.xml",
+ "test/threads/bac.xml",
+ "test/threads/bca.xml",
+ "test/threads/cab.xml",
+ "test/threads/cba.xml",
+ "test/threads/invalid.xml",
+};
+
+const char *Okay = "OK";
+const char *Failed = "Failed";
+
+#ifndef xmlDoValidityCheckingDefaultValue
+#error xmlDoValidityCheckingDefaultValue is not a macro
+#endif
+#ifndef xmlGenericErrorContext
+#error xmlGenericErrorContext is not a macro
+#endif
+
+static void *
+thread_specific_data(void *private_data)
+{
+ xmlDocPtr myDoc;
+ const char *filename = (const char *) private_data;
+ int okay = 1;
+
+ if (!strcmp(filename, "test/threads/invalid.xml")) {
+ xmlDoValidityCheckingDefaultValue = 0;
+ xmlGenericErrorContext = stdout;
+ } else {
+ xmlDoValidityCheckingDefaultValue = 1;
+ xmlGenericErrorContext = stderr;
+ }
+ myDoc = xmlParseFile(filename);
+ if (myDoc) {
+ xmlFreeDoc(myDoc);
+ } else {
+ printf("parse failed\n");
+ okay = 0;
+ }
+ if (!strcmp(filename, "test/threads/invalid.xml")) {
+ if (xmlDoValidityCheckingDefaultValue != 0) {
+ printf("ValidityCheckingDefaultValue override failed\n");
+ okay = 0;
+ }
+ if (xmlGenericErrorContext != stdout) {
+ printf("xmlGenericErrorContext override failed\n");
+ okay = 0;
+ }
+ } else {
+ if (xmlDoValidityCheckingDefaultValue != 1) {
+ printf("ValidityCheckingDefaultValue override failed\n");
+ okay = 0;
+ }
+ if (xmlGenericErrorContext != stderr) {
+ printf("xmlGenericErrorContext override failed\n");
+ okay = 0;
+ }
+ }
+ if (okay == 0)
+ return((void *) Failed);
+ return ((void *) Okay);
+}
+
+#ifdef HAVE_PTHREAD_H
+int
+main(void)
+{
+ unsigned int i, repeat;
+ unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
+ void *results[MAX_ARGC];
+ int ret;
+
+ xmlInitParser();
+ for (repeat = 0;repeat < 500;repeat++) {
+ xmlLoadCatalog(catalog);
+
+ for (i = 0; i < num_threads; i++) {
+ results[i] = NULL;
+ tid[i] = (pthread_t) -1;
+ }
+
+ for (i = 0; i < num_threads; i++) {
+ ret = pthread_create(&tid[i], 0, thread_specific_data,
+ (void *) testfiles[i]);
+ if (ret != 0) {
+ perror("pthread_create");
+ exit(1);
+ }
+ }
+ for (i = 0; i < num_threads; i++) {
+ ret = pthread_join(tid[i], &results[i]);
+ if (ret != 0) {
+ perror("pthread_join");
+ exit(1);
+ }
+ }
+
+ xmlCatalogCleanup();
+ for (i = 0; i < num_threads; i++)
+ if (results[i] != (void *) Okay)
+ printf("Thread %d handling %s failed\n", i, testfiles[i]);
+ }
+ xmlCleanupParser();
+ xmlMemoryDump();
+ return (0);
+}
+#elif defined HAVE_BEOS_THREADS
+int
+main(void)
+{
+ unsigned int i, repeat;
+ unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
+ void *results[MAX_ARGC];
+ status_t ret;
+
+ xmlInitParser();
+ printf("Parser initialized\n");
+ for (repeat = 0;repeat < 500;repeat++) {
+ printf("repeat: %d\n",repeat);
+ xmlLoadCatalog(catalog);
+ printf("loaded catalog: %s\n", catalog);
+ for (i = 0; i < num_threads; i++) {
+ results[i] = NULL;
+ tid[i] = (thread_id) -1;
+ }
+ printf("cleaned threads\n");
+ for (i = 0; i < num_threads; i++) {
+ tid[i] = spawn_thread(thread_specific_data, "xmlTestThread", B_NORMAL_PRIORITY, (void *) testfiles[i]);
+ if (tid[i] < B_OK) {
+ perror("beos_thread_create");
+ exit(1);
+ }
+ printf("beos_thread_create %d -> %d\n", i, tid[i]);
+ }
+ for (i = 0; i < num_threads; i++) {
+ ret = wait_for_thread(tid[i], &results[i]);
+ printf("beos_thread_wait %d -> %d\n", i, ret);
+ if (ret != B_OK) {
+ perror("beos_thread_wait");
+ exit(1);
+ }
+ }
+
+ xmlCatalogCleanup();
+ ret = B_OK;
+ for (i = 0; i < num_threads; i++)
+ if (results[i] != (void *) Okay) {
+ printf("Thread %d handling %s failed\n", i, testfiles[i]);
+ ret = B_ERROR;
+ }
+ }
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ if (ret == B_OK)
+ printf("testThread : BeOS : SUCCESS!\n");
+ else
+ printf("testThread : BeOS : FAILED!\n");
+
+ return (0);
+}
+#endif /* pthreads or BeOS threads */
+
+#else /* !LIBXML_THREADS_ENABLED */
+int
+main(void)
+{
+ fprintf(stderr, "libxml was not compiled with thread or catalog support\n");
+ return (0);
+}
+#endif
diff --git a/testThreadsWin32.c b/testThreadsWin32.c
new file mode 100644
index 0000000..24f0006
--- /dev/null
+++ b/testThreadsWin32.c
@@ -0,0 +1,150 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include "libxml.h"
+
+#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED)
+#include <libxml/globals.h>
+#include <libxml/threads.h>
+#include <libxml/parser.h>
+#include <libxml/catalog.h>
+#include <windows.h>
+#include <string.h>
+#include <assert.h>
+
+#define MAX_ARGC 20
+#define TEST_REPEAT_COUNT 500
+
+static HANDLE tid[MAX_ARGC];
+
+static const char *catalog = "test/threads/complex.xml";
+static char *testfiles[] = {
+ "test/threads/abc.xml",
+ "test/threads/acb.xml",
+ "test/threads/bac.xml",
+ "test/threads/bca.xml",
+ "test/threads/cab.xml",
+ "test/threads/cba.xml",
+ "test/threads/invalid.xml",
+};
+
+const char *Okay = "OK";
+const char *Failed = "Failed";
+
+#ifndef xmlDoValidityCheckingDefaultValue
+#error xmlDoValidityCheckingDefaultValue is not a macro
+#endif
+#ifndef xmlGenericErrorContext
+#error xmlGenericErrorContext is not a macro
+#endif
+
+static DWORD WINAPI
+thread_specific_data(void *private_data)
+{
+ xmlDocPtr myDoc;
+ const char *filename = (const char *) private_data;
+ int okay = 1;
+
+ if (!strcmp(filename, "test/threads/invalid.xml")) {
+ xmlDoValidityCheckingDefaultValue = 0;
+ xmlGenericErrorContext = stdout;
+ } else {
+ xmlDoValidityCheckingDefaultValue = 1;
+ xmlGenericErrorContext = stderr;
+ }
+ myDoc = xmlParseFile(filename);
+ if (myDoc) {
+ xmlFreeDoc(myDoc);
+ } else {
+ printf("parse failed\n");
+ okay = 0;
+ }
+ if (!strcmp(filename, "test/threads/invalid.xml")) {
+ if (xmlDoValidityCheckingDefaultValue != 0) {
+ printf("ValidityCheckingDefaultValue override failed\n");
+ okay = 0;
+ }
+ if (xmlGenericErrorContext != stdout) {
+ printf("xmlGenericErrorContext override failed\n");
+ okay = 0;
+ }
+ } else {
+ if (xmlDoValidityCheckingDefaultValue != 1) {
+ printf("ValidityCheckingDefaultValue override failed\n");
+ okay = 0;
+ }
+ if (xmlGenericErrorContext != stderr) {
+ printf("xmlGenericErrorContext override failed\n");
+ okay = 0;
+ }
+ }
+ if (okay == 0)
+ return ((DWORD) Failed);
+ return ((DWORD) Okay);
+}
+
+int
+main()
+{
+ unsigned int i, repeat;
+ unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
+ DWORD results[MAX_ARGC];
+ BOOL ret;
+
+ xmlInitParser();
+ for (repeat = 0;repeat < TEST_REPEAT_COUNT;repeat++)
+ {
+ xmlLoadCatalog(catalog);
+
+ for (i = 0; i < num_threads; i++)
+ {
+ results[i] = 0;
+ tid[i] = (HANDLE) -1;
+ }
+
+ for (i = 0; i < num_threads; i++)
+ {
+ DWORD useless;
+ tid[i] = CreateThread(NULL, 0,
+ thread_specific_data, testfiles[i], 0, &useless);
+ if (tid[i] == NULL)
+ {
+ perror("CreateThread");
+ exit(1);
+ }
+ }
+
+ if (WaitForMultipleObjects (num_threads, tid, TRUE, INFINITE) == WAIT_FAILED)
+ perror ("WaitForMultipleObjects failed");
+
+ for (i = 0; i < num_threads; i++)
+ {
+ ret = GetExitCodeThread (tid[i], &results[i]);
+ if (ret == 0)
+ {
+ perror("GetExitCodeThread");
+ exit(1);
+ }
+ CloseHandle (tid[i]);
+ }
+
+ xmlCatalogCleanup();
+ for (i = 0; i < num_threads; i++) {
+ if (results[i] != (DWORD) Okay)
+ printf("Thread %d handling %s failed\n", i, testfiles[i]);
+ }
+ }
+
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return (0);
+}
+
+#else /* !LIBXML_THREADS_ENABLED */
+int
+main()
+{
+ fprintf(stderr, "libxml was not compiled with thread or catalog support\n");
+ return (0);
+}
+#endif
diff --git a/testURI.c b/testURI.c
new file mode 100644
index 0000000..aa0729d
--- /dev/null
+++ b/testURI.c
@@ -0,0 +1,105 @@
+/*
+ * testURI.c : a small tester program for XML input.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#include "libxml.h"
+
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <libxml/xmlmemory.h>
+#include <libxml/uri.h>
+#include <libxml/globals.h>
+
+static const char *base = NULL;
+static int escape = 0;
+
+static void handleURI(const char *str) {
+ int ret;
+ xmlURIPtr uri;
+ xmlChar *res = NULL, *parsed = NULL;
+
+ uri = xmlCreateURI();
+
+ if (base == NULL) {
+ ret = xmlParseURIReference(uri, str);
+ if (ret != 0)
+ printf("%s : error %d\n", str, ret);
+ else {
+ xmlNormalizeURIPath(uri->path);
+ if (escape != 0) {
+ parsed = xmlSaveUri(uri);
+ res = xmlURIEscape(parsed);
+ printf("%s\n", (char *) res);
+
+ } else {
+ xmlPrintURI(stdout, uri);
+ printf("\n");
+ }
+ }
+ } else {
+ res = xmlBuildURI((xmlChar *)str, (xmlChar *) base);
+ if (res != NULL) {
+ printf("%s\n", (char *) res);
+ }
+ else
+ printf("::ERROR::\n");
+ }
+ if (res != NULL)
+ xmlFree(res);
+ if (parsed != NULL)
+ xmlFree(parsed);
+ xmlFreeURI(uri);
+}
+
+int main(int argc, char **argv) {
+ int i, arg = 1;
+
+ if ((argc > arg) && (argv[arg] != NULL) &&
+ ((!strcmp(argv[arg], "-base")) || (!strcmp(argv[arg], "--base")))) {
+ arg++;
+ base = argv[arg];
+ if (base != NULL)
+ arg++;
+ }
+ if ((argc > arg) && (argv[arg] != NULL) &&
+ ((!strcmp(argv[arg], "-escape")) || (!strcmp(argv[arg], "--escape")))) {
+ arg++;
+ escape++;
+ }
+ if (argv[arg] == NULL) {
+ char str[1024];
+
+ while (1) {
+ /*
+ * read one line in string buffer.
+ */
+ if (fgets (&str[0], sizeof (str) - 1, stdin) == NULL)
+ break;
+
+ /*
+ * remove the ending spaces
+ */
+ i = strlen(str);
+ while ((i > 0) &&
+ ((str[i - 1] == '\n') || (str[i - 1] == '\r') ||
+ (str[i - 1] == ' ') || (str[i - 1] == '\t'))) {
+ i--;
+ str[i] = 0;
+ }
+ handleURI(str);
+ }
+ } else {
+ while (argv[arg] != NULL) {
+ handleURI(argv[arg]);
+ arg++;
+ }
+ }
+ xmlMemoryDump();
+ return(0);
+}
diff --git a/testXPath.c b/testXPath.c
new file mode 100644
index 0000000..bdb7358
--- /dev/null
+++ b/testXPath.c
@@ -0,0 +1,227 @@
+/*
+ * testXPath.c : a small tester program for XPath.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#include "libxml.h"
+#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED)
+
+#include <string.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+
+#include <libxml/xpath.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/debugXML.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parserInternals.h>
+#include <libxml/xpathInternals.h>
+#include <libxml/xmlerror.h>
+#include <libxml/globals.h>
+#if defined(LIBXML_XPTR_ENABLED)
+#include <libxml/xpointer.h>
+static int xptr = 0;
+#endif
+static int debug = 0;
+static int valid = 0;
+static int expr = 0;
+static int tree = 0;
+static int nocdata = 0;
+static xmlDocPtr document = NULL;
+
+/*
+ * Default document
+ */
+static xmlChar buffer[] =
+"<?xml version=\"1.0\"?>\n\
+<EXAMPLE prop1=\"gnome is great\" prop2=\"&amp; linux too\">\n\
+ <head>\n\
+ <title>Welcome to Gnome</title>\n\
+ </head>\n\
+ <chapter>\n\
+ <title>The Linux adventure</title>\n\
+ <p>bla bla bla ...</p>\n\
+ <image href=\"linus.gif\"/>\n\
+ <p>...</p>\n\
+ </chapter>\n\
+ <chapter>\n\
+ <title>Chapter 2</title>\n\
+ <p>this is chapter 2 ...</p>\n\
+ </chapter>\n\
+ <chapter>\n\
+ <title>Chapter 3</title>\n\
+ <p>this is chapter 3 ...</p>\n\
+ </chapter>\n\
+</EXAMPLE>\n\
+";
+
+
+static void
+testXPath(const char *str) {
+ xmlXPathObjectPtr res;
+ xmlXPathContextPtr ctxt;
+
+#if defined(LIBXML_XPTR_ENABLED)
+ if (xptr) {
+ ctxt = xmlXPtrNewContext(document, NULL, NULL);
+ res = xmlXPtrEval(BAD_CAST str, ctxt);
+ } else {
+#endif
+ ctxt = xmlXPathNewContext(document);
+ ctxt->node = xmlDocGetRootElement(document);
+ if (expr)
+ res = xmlXPathEvalExpression(BAD_CAST str, ctxt);
+ else {
+ /* res = xmlXPathEval(BAD_CAST str, ctxt); */
+ xmlXPathCompExprPtr comp;
+
+ comp = xmlXPathCompile(BAD_CAST str);
+ if (comp != NULL) {
+ if (tree)
+ xmlXPathDebugDumpCompExpr(stdout, comp, 0);
+
+ res = xmlXPathCompiledEval(comp, ctxt);
+ xmlXPathFreeCompExpr(comp);
+ } else
+ res = NULL;
+ }
+#if defined(LIBXML_XPTR_ENABLED)
+ }
+#endif
+ xmlXPathDebugDumpObject(stdout, res, 0);
+ xmlXPathFreeObject(res);
+ xmlXPathFreeContext(ctxt);
+}
+
+static void
+testXPathFile(const char *filename) {
+ 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) {
+ printf("\n========================\nExpression: %s\n", expression) ;
+ testXPath(expression);
+ }
+ }
+
+ fclose(input);
+}
+
+int main(int argc, char **argv) {
+ int i;
+ int strings = 0;
+ int usefile = 0;
+ char *filename = NULL;
+
+ for (i = 1; i < argc ; i++) {
+#if defined(LIBXML_XPTR_ENABLED)
+ if ((!strcmp(argv[i], "-xptr")) || (!strcmp(argv[i], "--xptr")))
+ xptr++;
+ else
+#endif
+ if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
+ debug++;
+ else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))
+ valid++;
+ else if ((!strcmp(argv[i], "-expr")) || (!strcmp(argv[i], "--expr")))
+ expr++;
+ else if ((!strcmp(argv[i], "-tree")) || (!strcmp(argv[i], "--tree")))
+ tree++;
+ else if ((!strcmp(argv[i], "-nocdata")) ||
+ (!strcmp(argv[i], "--nocdata")))
+ nocdata++;
+ else if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "--input")))
+ filename = argv[++i];
+ else if ((!strcmp(argv[i], "-f")) || (!strcmp(argv[i], "--file")))
+ usefile++;
+ }
+ if (valid != 0) xmlDoValidityCheckingDefaultValue = 1;
+ xmlLoadExtDtdDefaultValue |= XML_DETECT_IDS;
+ xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS;
+ xmlSubstituteEntitiesDefaultValue = 1;
+ if (nocdata != 0) {
+ xmlDefaultSAXHandlerInit();
+ xmlDefaultSAXHandler.cdataBlock = NULL;
+ }
+ if (document == NULL) {
+ if (filename == NULL)
+ document = xmlParseDoc(buffer);
+ else
+ document = xmlParseFile(filename);
+ }
+ for (i = 1; i < argc ; i++) {
+ if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "--input"))) {
+ i++; continue;
+ }
+ if (argv[i][0] != '-') {
+ if (usefile)
+ testXPathFile(argv[i]);
+ else
+ testXPath(argv[i]);
+ strings ++;
+ }
+ }
+ if (strings == 0) {
+ printf("Usage : %s [--debug] [--copy] stringsorfiles ...\n",
+ argv[0]);
+ printf("\tParse the XPath strings and output the result of the parsing\n");
+ printf("\t--debug : dump a debug version of the result\n");
+ printf("\t--valid : switch on DTD support in the parser\n");
+#if defined(LIBXML_XPTR_ENABLED)
+ printf("\t--xptr : expressions are XPointer expressions\n");
+#endif
+ printf("\t--expr : debug XPath expressions only\n");
+ printf("\t--tree : show the compiled XPath tree\n");
+ printf("\t--nocdata : do not generate CDATA nodes\n");
+ printf("\t--input filename : or\n");
+ printf("\t-i filename : read the document from filename\n");
+ printf("\t--file : or\n");
+ printf("\t-f : read queries from files, args\n");
+ }
+ if (document != NULL)
+ xmlFreeDoc(document);
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return(0);
+}
+#else
+#include <stdio.h>
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ printf("%s : XPath/Debug support not compiled in\n", argv[0]);
+ return(0);
+}
+#endif /* LIBXML_XPATH_ENABLED */
diff --git a/threads.c b/threads.c
new file mode 100644
index 0000000..ac6c8d6
--- /dev/null
+++ b/threads.c
@@ -0,0 +1,759 @@
+/**
+ * threads.c: set of generic threading related routines
+ *
+ * See Copyright for the status of this software.
+ *
+ * Gary Pennington <Gary.Pennington@uk.sun.com>
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+
+#include <libxml/threads.h>
+#include <libxml/globals.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_PTHREAD_H
+#include <pthread.h>
+#endif
+
+#ifdef HAVE_WIN32_THREADS
+#include <windows.h>
+#ifndef HAVE_COMPILER_TLS
+#include <process.h>
+#endif
+#endif
+
+#ifdef HAVE_BEOS_THREADS
+#include <OS.h>
+#include <TLS.h>
+#endif
+
+#if defined(SOLARIS)
+#include <note.h>
+#endif
+
+/* #define DEBUG_THREADS */
+
+/*
+ * TODO: this module still uses malloc/free and not xmlMalloc/xmlFree
+ * to avoid some crazyness since xmlMalloc/xmlFree may actually
+ * be hosted on allocated blocks needing them for the allocation ...
+ */
+
+/*
+ * xmlMutex are a simple mutual exception locks
+ */
+struct _xmlMutex {
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_t lock;
+#elif defined HAVE_WIN32_THREADS
+ HANDLE mutex;
+#elif defined HAVE_BEOS_THREADS
+ sem_id sem;
+ thread_id tid;
+#else
+ int empty;
+#endif
+};
+
+/*
+ * xmlRMutex are reentrant mutual exception locks
+ */
+struct _xmlRMutex {
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_t lock;
+ unsigned int held;
+ unsigned int waiters;
+ pthread_t tid;
+ pthread_cond_t cv;
+#elif defined HAVE_WIN32_THREADS
+ CRITICAL_SECTION cs;
+ unsigned int count;
+#elif defined HAVE_BEOS_THREADS
+ xmlMutexPtr lock;
+ thread_id tid;
+ int32 count;
+#else
+ int empty;
+#endif
+};
+/*
+ * This module still has some internal static data.
+ * - xmlLibraryLock a global lock
+ * - globalkey used for per-thread data
+ */
+
+#ifdef HAVE_PTHREAD_H
+static pthread_key_t globalkey;
+static pthread_t mainthread;
+static pthread_once_t once_control = PTHREAD_ONCE_INIT;
+#elif defined HAVE_WIN32_THREADS
+#if defined(HAVE_COMPILER_TLS)
+static __declspec(thread) xmlGlobalState tlstate;
+static __declspec(thread) int tlstate_inited = 0;
+#else /* HAVE_COMPILER_TLS */
+static DWORD globalkey = TLS_OUT_OF_INDEXES;
+#endif /* HAVE_COMPILER_TLS */
+static DWORD mainthread;
+static int run_once_init = 1;
+/* endif HAVE_WIN32_THREADS */
+#elif defined HAVE_BEOS_THREADS
+int32 globalkey = 0;
+thread_id mainthread = 0;
+int32 run_once_init = 0;
+#endif
+
+static xmlRMutexPtr xmlLibraryLock = NULL;
+#ifdef LIBXML_THREAD_ENABLED
+static void xmlOnceInit(void);
+#endif
+
+/**
+ * xmlNewMutex:
+ *
+ * xmlNewMutex() is used to allocate a libxml2 token struct for use in
+ * synchronizing access to data.
+ *
+ * Returns a new simple mutex pointer or NULL in case of error
+ */
+xmlMutexPtr
+xmlNewMutex(void)
+{
+ xmlMutexPtr tok;
+
+ if ((tok = malloc(sizeof(xmlMutex))) == NULL)
+ return (NULL);
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_init(&tok->lock, NULL);
+#elif defined HAVE_WIN32_THREADS
+ tok->mutex = CreateMutex(NULL, FALSE, NULL);
+#elif defined HAVE_BEOS_THREADS
+ if ((tok->sem = create_sem(1, "xmlMutex")) < B_OK) {
+ free(tok);
+ return NULL;
+ }
+ tok->tid = -1;
+#endif
+ return (tok);
+}
+
+/**
+ * xmlFreeMutex:
+ * @tok: the simple mutex
+ *
+ * xmlFreeMutex() is used to reclaim resources associated with a libxml2 token
+ * struct.
+ */
+void
+xmlFreeMutex(xmlMutexPtr tok)
+{
+ if (tok == NULL) return;
+
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_destroy(&tok->lock);
+#elif defined HAVE_WIN32_THREADS
+ CloseHandle(tok->mutex);
+#elif defined HAVE_BEOS_THREADS
+ delete_sem(tok->sem);
+#endif
+ free(tok);
+}
+
+/**
+ * xmlMutexLock:
+ * @tok: the simple mutex
+ *
+ * xmlMutexLock() is used to lock a libxml2 token.
+ */
+void
+xmlMutexLock(xmlMutexPtr tok)
+{
+ if (tok == NULL)
+ return;
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_lock(&tok->lock);
+#elif defined HAVE_WIN32_THREADS
+ WaitForSingleObject(tok->mutex, INFINITE);
+#elif defined HAVE_BEOS_THREADS
+ if (acquire_sem(tok->sem) != B_NO_ERROR) {
+#ifdef DEBUG_THREADS
+ xmlGenericError(xmlGenericErrorContext, "xmlMutexLock():BeOS:Couldn't aquire semaphore\n");
+ exit();
+#endif
+ }
+ tok->tid = find_thread(NULL);
+#endif
+
+}
+
+/**
+ * xmlMutexUnlock:
+ * @tok: the simple mutex
+ *
+ * xmlMutexUnlock() is used to unlock a libxml2 token.
+ */
+void
+xmlMutexUnlock(xmlMutexPtr tok)
+{
+ if (tok == NULL)
+ return;
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_unlock(&tok->lock);
+#elif defined HAVE_WIN32_THREADS
+ ReleaseMutex(tok->mutex);
+#elif defined HAVE_BEOS_THREADS
+ if (tok->tid == find_thread(NULL)) {
+ tok->tid = -1;
+ release_sem(tok->sem);
+ }
+#endif
+}
+
+/**
+ * xmlNewRMutex:
+ *
+ * xmlRNewMutex() is used to allocate a reentrant mutex for use in
+ * synchronizing access to data. token_r is a re-entrant lock and thus useful
+ * for synchronizing access to data structures that may be manipulated in a
+ * recursive fashion.
+ *
+ * Returns the new reentrant mutex pointer or NULL in case of error
+ */
+xmlRMutexPtr
+xmlNewRMutex(void)
+{
+ xmlRMutexPtr tok;
+
+ if ((tok = malloc(sizeof(xmlRMutex))) == NULL)
+ return (NULL);
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_init(&tok->lock, NULL);
+ tok->held = 0;
+ tok->waiters = 0;
+ pthread_cond_init(&tok->cv, NULL);
+#elif defined HAVE_WIN32_THREADS
+ InitializeCriticalSection(&tok->cs);
+ tok->count = 0;
+#elif defined HAVE_BEOS_THREADS
+ if ((tok->lock = xmlNewMutex()) == NULL) {
+ free(tok);
+ return NULL;
+ }
+ tok->count = 0;
+#endif
+ return (tok);
+}
+
+/**
+ * xmlFreeRMutex:
+ * @tok: the reentrant mutex
+ *
+ * xmlRFreeMutex() is used to reclaim resources associated with a
+ * reentrant mutex.
+ */
+void
+xmlFreeRMutex(xmlRMutexPtr tok ATTRIBUTE_UNUSED)
+{
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_destroy(&tok->lock);
+#elif defined HAVE_WIN32_THREADS
+ DeleteCriticalSection(&tok->cs);
+#elif defined HAVE_BEOS_THREADS
+ xmlFreeMutex(tok->lock);
+#endif
+ free(tok);
+}
+
+/**
+ * xmlRMutexLock:
+ * @tok: the reentrant mutex
+ *
+ * xmlRMutexLock() is used to lock a libxml2 token_r.
+ */
+void
+xmlRMutexLock(xmlRMutexPtr tok)
+{
+ if (tok == NULL)
+ return;
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_lock(&tok->lock);
+ if (tok->held) {
+ if (pthread_equal(tok->tid, pthread_self())) {
+ tok->held++;
+ pthread_mutex_unlock(&tok->lock);
+ return;
+ } else {
+ tok->waiters++;
+ while (tok->held)
+ pthread_cond_wait(&tok->cv, &tok->lock);
+ tok->waiters--;
+ }
+ }
+ tok->tid = pthread_self();
+ tok->held = 1;
+ pthread_mutex_unlock(&tok->lock);
+#elif defined HAVE_WIN32_THREADS
+ EnterCriticalSection(&tok->cs);
+ ++tok->count;
+#elif defined HAVE_BEOS_THREADS
+ if (tok->lock->tid == find_thread(NULL)) {
+ tok->count++;
+ return;
+ } else {
+ xmlMutexLock(tok->lock);
+ tok->count = 1;
+ }
+#endif
+}
+
+/**
+ * xmlRMutexUnlock:
+ * @tok: the reentrant mutex
+ *
+ * xmlRMutexUnlock() is used to unlock a libxml2 token_r.
+ */
+void
+xmlRMutexUnlock(xmlRMutexPtr tok ATTRIBUTE_UNUSED)
+{
+ if (tok == NULL)
+ return;
+#ifdef HAVE_PTHREAD_H
+ pthread_mutex_lock(&tok->lock);
+ tok->held--;
+ if (tok->held == 0) {
+ if (tok->waiters)
+ pthread_cond_signal(&tok->cv);
+ tok->tid = 0;
+ }
+ pthread_mutex_unlock(&tok->lock);
+#elif defined HAVE_WIN32_THREADS
+ if (!--tok->count)
+ LeaveCriticalSection(&tok->cs);
+#elif defined HAVE_BEOS_THREADS
+ if (tok->lock->tid == find_thread(NULL)) {
+ tok->count--;
+ if (tok->count == 0) {
+ xmlMutexUnlock(tok->lock);
+ }
+ return;
+ }
+#endif
+}
+
+/************************************************************************
+ * *
+ * Per thread global state handling *
+ * *
+ ************************************************************************/
+
+#ifdef LIBXML_THREAD_ENABLED
+/**
+ * xmlFreeGlobalState:
+ * @state: a thread global state
+ *
+ * xmlFreeGlobalState() is called when a thread terminates with a non-NULL
+ * global state. It is is used here to reclaim memory resources.
+ */
+static void
+xmlFreeGlobalState(void *state)
+{
+ free(state);
+}
+
+/**
+ * xmlNewGlobalState:
+ *
+ * xmlNewGlobalState() allocates a global state. This structure is used to
+ * hold all data for use by a thread when supporting backwards compatibility
+ * of libxml2 to pre-thread-safe behaviour.
+ *
+ * Returns the newly allocated xmlGlobalStatePtr or NULL in case of error
+ */
+static xmlGlobalStatePtr
+xmlNewGlobalState(void)
+{
+ xmlGlobalState *gs;
+
+ gs = malloc(sizeof(xmlGlobalState));
+ if (gs == NULL)
+ return(NULL);
+
+ memset(gs, 0, sizeof(xmlGlobalState));
+ xmlInitializeGlobalState(gs);
+ return (gs);
+}
+#endif /* LIBXML_THREAD_ENABLED */
+
+
+#ifdef HAVE_WIN32_THREADS
+#if !defined(HAVE_COMPILER_TLS)
+#if defined(LIBXML_STATIC) && !defined(LIBXML_STATIC_FOR_DLL)
+typedef struct _xmlGlobalStateCleanupHelperParams
+{
+ HANDLE thread;
+ void *memory;
+} xmlGlobalStateCleanupHelperParams;
+
+static void xmlGlobalStateCleanupHelper (void *p)
+{
+ xmlGlobalStateCleanupHelperParams *params = (xmlGlobalStateCleanupHelperParams *) p;
+ WaitForSingleObject(params->thread, INFINITE);
+ CloseHandle(params->thread);
+ xmlFreeGlobalState(params->memory);
+ free(params);
+ _endthread();
+}
+#else /* LIBXML_STATIC && !LIBXML_STATIC_FOR_DLL */
+
+typedef struct _xmlGlobalStateCleanupHelperParams
+{
+ void *memory;
+ struct _xmlGlobalStateCleanupHelperParams * prev;
+ struct _xmlGlobalStateCleanupHelperParams * next;
+} xmlGlobalStateCleanupHelperParams;
+
+static xmlGlobalStateCleanupHelperParams * cleanup_helpers_head = NULL;
+static CRITICAL_SECTION cleanup_helpers_cs;
+
+#endif /* LIBXMLSTATIC && !LIBXML_STATIC_FOR_DLL */
+#endif /* HAVE_COMPILER_TLS */
+#endif /* HAVE_WIN32_THREADS */
+
+#if defined HAVE_BEOS_THREADS
+/**
+ * xmlGlobalStateCleanup:
+ * @data: unused parameter
+ *
+ * Used for Beos only
+ */
+void xmlGlobalStateCleanup(void *data)
+{
+ void *globalval = tls_get(globalkey);
+ if (globalval != NULL)
+ xmlFreeGlobalState(globalval);
+}
+#endif
+
+/**
+ * xmlGetGlobalState:
+ *
+ * xmlGetGlobalState() is called to retrieve the global state for a thread.
+ *
+ * Returns the thread global state or NULL in case of error
+ */
+xmlGlobalStatePtr
+xmlGetGlobalState(void)
+{
+#ifdef HAVE_PTHREAD_H
+ xmlGlobalState *globalval;
+
+ pthread_once(&once_control, xmlOnceInit);
+
+ if ((globalval = (xmlGlobalState *)
+ pthread_getspecific(globalkey)) == NULL) {
+ xmlGlobalState *tsd = xmlNewGlobalState();
+
+ pthread_setspecific(globalkey, tsd);
+ return (tsd);
+ }
+ return (globalval);
+#elif defined HAVE_WIN32_THREADS
+#if defined(HAVE_COMPILER_TLS)
+ if (!tlstate_inited) {
+ tlstate_inited = 1;
+ xmlInitializeGlobalState(&tlstate);
+ }
+ return &tlstate;
+#else /* HAVE_COMPILER_TLS */
+ xmlGlobalState *globalval;
+ xmlGlobalStateCleanupHelperParams * p;
+
+ if (run_once_init) {
+ run_once_init = 0;
+ xmlOnceInit();
+ }
+#if defined(LIBXML_STATIC) && !defined(LIBXML_STATIC_FOR_DLL)
+ globalval = (xmlGlobalState *)TlsGetValue(globalkey);
+#else
+ p = (xmlGlobalStateCleanupHelperParams*)TlsGetValue(globalkey);
+ globalval = (xmlGlobalState *)(p ? p->memory : NULL);
+#endif
+ if (globalval == NULL) {
+ xmlGlobalState *tsd = xmlNewGlobalState();
+ p = (xmlGlobalStateCleanupHelperParams *) malloc(sizeof(xmlGlobalStateCleanupHelperParams));
+ p->memory = tsd;
+#if defined(LIBXML_STATIC) && !defined(LIBXML_STATIC_FOR_DLL)
+ DuplicateHandle(GetCurrentProcess(), GetCurrentThread(),
+ GetCurrentProcess(), &p->thread, 0, TRUE, DUPLICATE_SAME_ACCESS);
+ TlsSetValue(globalkey, tsd);
+ _beginthread(xmlGlobalStateCleanupHelper, 0, p);
+#else
+ EnterCriticalSection(&cleanup_helpers_cs);
+ if (cleanup_helpers_head != NULL) {
+ cleanup_helpers_head->prev = p;
+ }
+ p->next = cleanup_helpers_head;
+ p->prev = NULL;
+ cleanup_helpers_head = p;
+ TlsSetValue(globalkey, p);
+ LeaveCriticalSection(&cleanup_helpers_cs);
+#endif
+
+ return (tsd);
+ }
+ return (globalval);
+#endif /* HAVE_COMPILER_TLS */
+#elif defined HAVE_BEOS_THREADS
+ xmlGlobalState *globalval;
+
+ xmlOnceInit();
+
+ if ((globalval = (xmlGlobalState *)
+ tls_get(globalkey)) == NULL) {
+ xmlGlobalState *tsd = xmlNewGlobalState();
+
+ tls_set(globalkey, tsd);
+ on_exit_thread(xmlGlobalStateCleanup, NULL);
+ return (tsd);
+ }
+ return (globalval);
+#else
+ return(NULL);
+#endif
+}
+
+/************************************************************************
+ * *
+ * Library wide thread interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlGetThreadId:
+ *
+ * xmlGetThreadId() find the current thread ID number
+ *
+ * Returns the current thread ID number
+ */
+int
+xmlGetThreadId(void)
+{
+#ifdef HAVE_PTHREAD_H
+ return((int) pthread_self());
+#elif defined HAVE_WIN32_THREADS
+ return GetCurrentThreadId();
+#elif defined HAVE_BEOS_THREADS
+ return find_thread(NULL);
+#else
+ return((int) 0);
+#endif
+}
+
+/**
+ * xmlIsMainThread:
+ *
+ * xmlIsMainThread() check whether the current thread is the main thread.
+ *
+ * Returns 1 if the current thread is the main thread, 0 otherwise
+ */
+int
+xmlIsMainThread(void)
+{
+#ifdef HAVE_PTHREAD_H
+ pthread_once(&once_control, xmlOnceInit);
+#elif defined HAVE_WIN32_THREADS
+ if (run_once_init) {
+ run_once_init = 0;
+ xmlOnceInit ();
+ }
+#elif defined HAVE_BEOS_THREADS
+ xmlOnceInit();
+#endif
+
+#ifdef DEBUG_THREADS
+ xmlGenericError(xmlGenericErrorContext, "xmlIsMainThread()\n");
+#endif
+#ifdef HAVE_PTHREAD_H
+ return(mainthread == pthread_self());
+#elif defined HAVE_WIN32_THREADS
+ return(mainthread == GetCurrentThreadId ());
+#elif defined HAVE_BEOS_THREADS
+ return(mainthread == find_thread(NULL));
+#else
+ return(1);
+#endif
+}
+
+/**
+ * xmlLockLibrary:
+ *
+ * xmlLockLibrary() is used to take out a re-entrant lock on the libxml2
+ * library.
+ */
+void
+xmlLockLibrary(void)
+{
+#ifdef DEBUG_THREADS
+ xmlGenericError(xmlGenericErrorContext, "xmlLockLibrary()\n");
+#endif
+ xmlRMutexLock(xmlLibraryLock);
+}
+
+/**
+ * xmlUnlockLibrary:
+ *
+ * xmlUnlockLibrary() is used to release a re-entrant lock on the libxml2
+ * library.
+ */
+void
+xmlUnlockLibrary(void)
+{
+#ifdef DEBUG_THREADS
+ xmlGenericError(xmlGenericErrorContext, "xmlUnlockLibrary()\n");
+#endif
+ xmlRMutexUnlock(xmlLibraryLock);
+}
+
+/**
+ * xmlInitThreads:
+ *
+ * xmlInitThreads() is used to to initialize all the thread related
+ * data of the libxml2 library.
+ */
+void
+xmlInitThreads(void)
+{
+#ifdef DEBUG_THREADS
+ xmlGenericError(xmlGenericErrorContext, "xmlInitThreads()\n");
+#endif
+#if defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
+ InitializeCriticalSection(&cleanup_helpers_cs);
+#endif
+}
+
+/**
+ * xmlCleanupThreads:
+ *
+ * xmlCleanupThreads() is used to to cleanup all the thread related
+ * data of the libxml2 library once processing has ended.
+ */
+void
+xmlCleanupThreads(void)
+{
+#ifdef DEBUG_THREADS
+ xmlGenericError(xmlGenericErrorContext, "xmlCleanupThreads()\n");
+#endif
+#if defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
+ if (globalkey != TLS_OUT_OF_INDEXES) {
+ xmlGlobalStateCleanupHelperParams * p;
+ EnterCriticalSection(&cleanup_helpers_cs);
+ p = cleanup_helpers_head;
+ while (p != NULL) {
+ xmlGlobalStateCleanupHelperParams * temp = p;
+ p = p->next;
+ xmlFreeGlobalState(temp->memory);
+ free(temp);
+ }
+ cleanup_helpers_head = 0;
+ LeaveCriticalSection(&cleanup_helpers_cs);
+ TlsFree(globalkey);
+ globalkey = TLS_OUT_OF_INDEXES;
+ }
+ DeleteCriticalSection(&cleanup_helpers_cs);
+#endif
+}
+
+#ifdef LIBXML_THREAD_ENABLED
+/**
+ * xmlOnceInit
+ *
+ * xmlOnceInit() is used to initialize the value of mainthread for use
+ * in other routines. This function should only be called using
+ * pthread_once() in association with the once_control variable to ensure
+ * that the function is only called once. See man pthread_once for more
+ * details.
+ */
+static void
+xmlOnceInit(void) {
+#ifdef HAVE_PTHREAD_H
+ (void) pthread_key_create(&globalkey, xmlFreeGlobalState);
+ mainthread = pthread_self();
+#endif
+
+#if defined(HAVE_WIN32_THREADS)
+#if !defined(HAVE_COMPILER_TLS)
+ globalkey = TlsAlloc();
+#endif
+ mainthread = GetCurrentThreadId();
+#endif
+
+#ifdef HAVE_BEOS_THREADS
+ if (atomic_add(&run_once_init, 1) == 0) {
+ globalkey = tls_allocate();
+ tls_set(globalkey, NULL);
+ mainthread = find_thread(NULL);
+ } else
+ atomic_add(&run_once_init, -1);
+#endif
+}
+#endif
+
+/**
+ * DllMain:
+ * @hinstDLL: handle to DLL instance
+ * @fdwReason: Reason code for entry
+ * @lpvReserved: generic pointer (depends upon reason code)
+ *
+ * Entry point for Windows library. It is being used to free thread-specific
+ * storage.
+ *
+ * Returns TRUE always
+ */
+#if defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
+#if defined(LIBXML_STATIC_FOR_DLL)
+BOOL WINAPI xmlDllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+#else
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+#endif
+{
+ switch(fdwReason) {
+ case DLL_THREAD_DETACH:
+ if (globalkey != TLS_OUT_OF_INDEXES) {
+ xmlGlobalState *globalval = NULL;
+ xmlGlobalStateCleanupHelperParams * p =
+ (xmlGlobalStateCleanupHelperParams*)TlsGetValue(globalkey);
+ globalval = (xmlGlobalState *)(p ? p->memory : NULL);
+ if (globalval) {
+ xmlFreeGlobalState(globalval);
+ TlsSetValue(globalkey,NULL);
+ }
+ if (p)
+ {
+ EnterCriticalSection(&cleanup_helpers_cs);
+ if (p == cleanup_helpers_head)
+ cleanup_helpers_head = p->next;
+ else
+ p->prev->next = p->next;
+ if (p->next != NULL)
+ p->next->prev = p->prev;
+ LeaveCriticalSection(&cleanup_helpers_cs);
+ free(p);
+ }
+ }
+ break;
+ }
+ return TRUE;
+}
+#endif
diff --git a/tree.c b/tree.c
new file mode 100644
index 0000000..8e9cbf6
--- /dev/null
+++ b/tree.c
@@ -0,0 +1,7026 @@
+/*
+ * tree.c : implementation of access function for an XML tree.
+ *
+ * References:
+ * XHTML 1.0 W3C REC: http://www.w3.org/TR/2002/REC-xhtml1-20020801/
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ *
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h> /* for memset() only ! */
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_ZLIB_H
+#include <zlib.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/uri.h>
+#include <libxml/entities.h>
+#include <libxml/valid.h>
+#include <libxml/xmlerror.h>
+#include <libxml/parserInternals.h>
+#include <libxml/globals.h>
+#ifdef LIBXML_HTML_ENABLED
+#include <libxml/HTMLtree.h>
+#endif
+
+int __xmlRegisterCallbacks = 0;
+
+xmlNsPtr xmlNewReconciliedNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns);
+
+/************************************************************************
+ * *
+ * Tree memory error handler *
+ * *
+ ************************************************************************/
+/**
+ * xmlTreeErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlTreeErrMemory(const char *extra)
+{
+ __xmlSimpleError(XML_FROM_TREE, XML_ERR_NO_MEMORY, NULL, NULL, extra);
+}
+
+/**
+ * xmlTreeErr:
+ * @code: the error number
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlTreeErr(int code, xmlNodePtr node, const char *extra)
+{
+ const char *msg = NULL;
+
+ switch(code) {
+ case XML_TREE_INVALID_HEX:
+ msg = "invalid hexadecimal character value";
+ break;
+ case XML_TREE_INVALID_DEC:
+ msg = "invalid decimal character value";
+ break;
+ case XML_TREE_UNTERMINATED_ENTITY:
+ msg = "unterminated entity reference %15s";
+ break;
+ default:
+ msg = "unexpected error number";
+ }
+ __xmlSimpleError(XML_FROM_TREE, code, node, msg, extra);
+}
+
+/************************************************************************
+ * *
+ * A few static variables and macros *
+ * *
+ ************************************************************************/
+/* #undef xmlStringText */
+const xmlChar xmlStringText[] = { 't', 'e', 'x', 't', 0 };
+/* #undef xmlStringTextNoenc */
+const xmlChar xmlStringTextNoenc[] =
+ { 't', 'e', 'x', 't', 'n', 'o', 'e', 'n', 'c', 0 };
+/* #undef xmlStringComment */
+const xmlChar xmlStringComment[] = { 'c', 'o', 'm', 'm', 'e', 'n', 't', 0 };
+
+static int xmlCompressMode = 0;
+static int xmlCheckDTD = 1;
+
+#define UPDATE_LAST_CHILD_AND_PARENT(n) if ((n) != NULL) { \
+ xmlNodePtr ulccur = (n)->children; \
+ if (ulccur == NULL) { \
+ (n)->last = NULL; \
+ } else { \
+ while (ulccur->next != NULL) { \
+ ulccur->parent = (n); \
+ ulccur = ulccur->next; \
+ } \
+ ulccur->parent = (n); \
+ (n)->last = ulccur; \
+}}
+
+/* #define DEBUG_BUFFER */
+/* #define DEBUG_TREE */
+
+/************************************************************************
+ * *
+ * Functions to move to entities.c once the *
+ * API freeze is smoothen and they can be made public. *
+ * *
+ ************************************************************************/
+#include <libxml/hash.h>
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlGetEntityFromDtd:
+ * @dtd: A pointer to the DTD to search
+ * @name: The entity name
+ *
+ * Do an entity lookup in the DTD entity hash table and
+ * return the corresponding entity, if found.
+ *
+ * Returns A pointer to the entity structure or NULL if not found.
+ */
+static xmlEntityPtr
+xmlGetEntityFromDtd(xmlDtdPtr dtd, const xmlChar *name) {
+ xmlEntitiesTablePtr table;
+
+ if((dtd != NULL) && (dtd->entities != NULL)) {
+ table = (xmlEntitiesTablePtr) dtd->entities;
+ return((xmlEntityPtr) xmlHashLookup(table, name));
+ /* return(xmlGetEntityFromTable(table, name)); */
+ }
+ return(NULL);
+}
+/**
+ * xmlGetParameterEntityFromDtd:
+ * @dtd: A pointer to the DTD to search
+ * @name: The entity name
+ *
+ * Do an entity lookup in the DTD pararmeter entity hash table and
+ * return the corresponding entity, if found.
+ *
+ * Returns A pointer to the entity structure or NULL if not found.
+ */
+static xmlEntityPtr
+xmlGetParameterEntityFromDtd(xmlDtdPtr dtd, const xmlChar *name) {
+ xmlEntitiesTablePtr table;
+
+ if ((dtd != NULL) && (dtd->pentities != NULL)) {
+ table = (xmlEntitiesTablePtr) dtd->pentities;
+ return((xmlEntityPtr) xmlHashLookup(table, name));
+ /* return(xmlGetEntityFromTable(table, name)); */
+ }
+ return(NULL);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/************************************************************************
+ * *
+ * QName handling helper *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlBuildQName:
+ * @ncname: the Name
+ * @prefix: the prefix
+ * @memory: preallocated memory
+ * @len: preallocated memory length
+ *
+ * Builds the QName @prefix:@ncname in @memory if there is enough space
+ * and prefix is not NULL nor empty, otherwise allocate a new string.
+ * If prefix is NULL or empty it returns ncname.
+ *
+ * Returns the new string which must be freed by the caller if different from
+ * @memory and @ncname or NULL in case of error
+ */
+xmlChar *
+xmlBuildQName(const xmlChar *ncname, const xmlChar *prefix,
+ xmlChar *memory, int len) {
+ int lenn, lenp;
+ xmlChar *ret;
+
+ if (ncname == NULL) return(NULL);
+ if (prefix == NULL) return((xmlChar *) ncname);
+
+ lenn = strlen((char *) ncname);
+ lenp = strlen((char *) prefix);
+
+ if ((memory == NULL) || (len < lenn + lenp + 2)) {
+ ret = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
+ if (ret == NULL) {
+ xmlTreeErrMemory("building QName");
+ return(NULL);
+ }
+ } else {
+ ret = memory;
+ }
+ memcpy(&ret[0], prefix, lenp);
+ ret[lenp] = ':';
+ memcpy(&ret[lenp + 1], ncname, lenn);
+ ret[lenn + lenp + 1] = 0;
+ return(ret);
+}
+
+/**
+ * xmlSplitQName2:
+ * @name: the full QName
+ * @prefix: a xmlChar **
+ *
+ * parse an XML qualified name string
+ *
+ * [NS 5] QName ::= (Prefix ':')? LocalPart
+ *
+ * [NS 6] Prefix ::= NCName
+ *
+ * [NS 7] LocalPart ::= NCName
+ *
+ * Returns NULL if not a QName, otherwise the local part, and prefix
+ * is updated to get the Prefix if any.
+ */
+
+xmlChar *
+xmlSplitQName2(const xmlChar *name, xmlChar **prefix) {
+ int len = 0;
+ xmlChar *ret = NULL;
+
+ *prefix = NULL;
+ if (name == NULL) return(NULL);
+
+#ifndef XML_XML_NAMESPACE
+ /* xml: prefix is not really a namespace */
+ if ((name[0] == 'x') && (name[1] == 'm') &&
+ (name[2] == 'l') && (name[3] == ':'))
+ return(NULL);
+#endif
+
+ /* nasty but valid */
+ if (name[0] == ':')
+ return(NULL);
+
+ /*
+ * we are not trying to validate but just to cut, and yes it will
+ * work even if this is as set of UTF-8 encoded chars
+ */
+ while ((name[len] != 0) && (name[len] != ':'))
+ len++;
+
+ if (name[len] == 0)
+ return(NULL);
+
+ *prefix = xmlStrndup(name, len);
+ if (*prefix == NULL) {
+ xmlTreeErrMemory("QName split");
+ return(NULL);
+ }
+ ret = xmlStrdup(&name[len + 1]);
+ if (ret == NULL) {
+ xmlTreeErrMemory("QName split");
+ if (*prefix != NULL) {
+ xmlFree(*prefix);
+ *prefix = NULL;
+ }
+ return(NULL);
+ }
+
+ return(ret);
+}
+
+/**
+ * xmlSplitQName3:
+ * @name: the full QName
+ * @len: an int *
+ *
+ * parse an XML qualified name string,i
+ *
+ * returns NULL if it is not a Qualified Name, otherwise, update len
+ * with the lenght in byte of the prefix and return a pointer
+ */
+
+const xmlChar *
+xmlSplitQName3(const xmlChar *name, int *len) {
+ int l = 0;
+
+ if (name == NULL) return(NULL);
+ if (len == NULL) return(NULL);
+
+ /* nasty but valid */
+ if (name[0] == ':')
+ return(NULL);
+
+ /*
+ * we are not trying to validate but just to cut, and yes it will
+ * work even if this is as set of UTF-8 encoded chars
+ */
+ while ((name[l] != 0) && (name[l] != ':'))
+ l++;
+
+ if (name[l] == 0)
+ return(NULL);
+
+ *len = l;
+
+ return(&name[l+1]);
+}
+
+/************************************************************************
+ * *
+ * Check Name, NCName and QName strings *
+ * *
+ ************************************************************************/
+
+#define CUR_SCHAR(s, l) xmlStringCurrentChar(NULL, s, &l)
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+/**
+ * xmlValidateNCName:
+ * @value: the value to check
+ * @space: allow spaces in front and end of the string
+ *
+ * Check that a value conforms to the lexical space of NCName
+ *
+ * Returns 0 if this validates, a positive error code number otherwise
+ * and -1 in case of internal or API error.
+ */
+int
+xmlValidateNCName(const xmlChar *value, int space) {
+ const xmlChar *cur = value;
+ int c,l;
+
+ /*
+ * First quick algorithm for ASCII range
+ */
+ if (space)
+ while (IS_BLANK_CH(*cur)) cur++;
+ if (((*cur >= 'a') && (*cur <= 'z')) || ((*cur >= 'A') && (*cur <= 'Z')) ||
+ (*cur == '_'))
+ cur++;
+ else
+ goto try_complex;
+ while (((*cur >= 'a') && (*cur <= 'z')) ||
+ ((*cur >= 'A') && (*cur <= 'Z')) ||
+ ((*cur >= '0') && (*cur <= '9')) ||
+ (*cur == '_') || (*cur == '-') || (*cur == '.'))
+ cur++;
+ if (space)
+ while (IS_BLANK_CH(*cur)) cur++;
+ if (*cur == 0)
+ return(0);
+
+try_complex:
+ /*
+ * Second check for chars outside the ASCII range
+ */
+ cur = value;
+ c = CUR_SCHAR(cur, l);
+ if (space) {
+ while (IS_BLANK(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ }
+ if ((!IS_LETTER(c)) && (c != '_'))
+ return(1);
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') ||
+ (c == '-') || (c == '_') || IS_COMBINING(c) ||
+ IS_EXTENDER(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ if (space) {
+ while (IS_BLANK(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ }
+ if (c != 0)
+ return(1);
+
+ return(0);
+}
+#endif
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+/**
+ * xmlValidateQName:
+ * @value: the value to check
+ * @space: allow spaces in front and end of the string
+ *
+ * Check that a value conforms to the lexical space of QName
+ *
+ * Returns 0 if this validates, a positive error code number otherwise
+ * and -1 in case of internal or API error.
+ */
+int
+xmlValidateQName(const xmlChar *value, int space) {
+ const xmlChar *cur = value;
+ int c,l;
+
+ /*
+ * First quick algorithm for ASCII range
+ */
+ if (space)
+ while (IS_BLANK_CH(*cur)) cur++;
+ if (((*cur >= 'a') && (*cur <= 'z')) || ((*cur >= 'A') && (*cur <= 'Z')) ||
+ (*cur == '_'))
+ cur++;
+ else
+ goto try_complex;
+ while (((*cur >= 'a') && (*cur <= 'z')) ||
+ ((*cur >= 'A') && (*cur <= 'Z')) ||
+ ((*cur >= '0') && (*cur <= '9')) ||
+ (*cur == '_') || (*cur == '-') || (*cur == '.'))
+ cur++;
+ if (*cur == ':') {
+ cur++;
+ if (((*cur >= 'a') && (*cur <= 'z')) ||
+ ((*cur >= 'A') && (*cur <= 'Z')) ||
+ (*cur == '_'))
+ cur++;
+ else
+ goto try_complex;
+ while (((*cur >= 'a') && (*cur <= 'z')) ||
+ ((*cur >= 'A') && (*cur <= 'Z')) ||
+ ((*cur >= '0') && (*cur <= '9')) ||
+ (*cur == '_') || (*cur == '-') || (*cur == '.'))
+ cur++;
+ }
+ if (space)
+ while (IS_BLANK_CH(*cur)) cur++;
+ if (*cur == 0)
+ return(0);
+
+try_complex:
+ /*
+ * Second check for chars outside the ASCII range
+ */
+ cur = value;
+ c = CUR_SCHAR(cur, l);
+ if (space) {
+ while (IS_BLANK(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ }
+ if ((!IS_LETTER(c)) && (c != '_'))
+ return(1);
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') ||
+ (c == '-') || (c == '_') || IS_COMBINING(c) ||
+ IS_EXTENDER(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ if (c == ':') {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ if ((!IS_LETTER(c)) && (c != '_'))
+ return(1);
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') ||
+ (c == '-') || (c == '_') || IS_COMBINING(c) ||
+ IS_EXTENDER(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ }
+ if (space) {
+ while (IS_BLANK(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ }
+ if (c != 0)
+ return(1);
+ return(0);
+}
+
+/**
+ * xmlValidateName:
+ * @value: the value to check
+ * @space: allow spaces in front and end of the string
+ *
+ * Check that a value conforms to the lexical space of Name
+ *
+ * Returns 0 if this validates, a positive error code number otherwise
+ * and -1 in case of internal or API error.
+ */
+int
+xmlValidateName(const xmlChar *value, int space) {
+ const xmlChar *cur = value;
+ int c,l;
+
+ /*
+ * First quick algorithm for ASCII range
+ */
+ if (space)
+ while (IS_BLANK_CH(*cur)) cur++;
+ if (((*cur >= 'a') && (*cur <= 'z')) || ((*cur >= 'A') && (*cur <= 'Z')) ||
+ (*cur == '_') || (*cur == ':'))
+ cur++;
+ else
+ goto try_complex;
+ while (((*cur >= 'a') && (*cur <= 'z')) ||
+ ((*cur >= 'A') && (*cur <= 'Z')) ||
+ ((*cur >= '0') && (*cur <= '9')) ||
+ (*cur == '_') || (*cur == '-') || (*cur == '.') || (*cur == ':'))
+ cur++;
+ if (space)
+ while (IS_BLANK_CH(*cur)) cur++;
+ if (*cur == 0)
+ return(0);
+
+try_complex:
+ /*
+ * Second check for chars outside the ASCII range
+ */
+ cur = value;
+ c = CUR_SCHAR(cur, l);
+ if (space) {
+ while (IS_BLANK(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ }
+ if ((!IS_LETTER(c)) && (c != '_') && (c != ':'))
+ return(1);
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') || (c == ':') ||
+ (c == '-') || (c == '_') || IS_COMBINING(c) || IS_EXTENDER(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ if (space) {
+ while (IS_BLANK(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ }
+ if (c != 0)
+ return(1);
+ return(0);
+}
+
+/**
+ * xmlValidateNMToken:
+ * @value: the value to check
+ * @space: allow spaces in front and end of the string
+ *
+ * Check that a value conforms to the lexical space of NMToken
+ *
+ * Returns 0 if this validates, a positive error code number otherwise
+ * and -1 in case of internal or API error.
+ */
+int
+xmlValidateNMToken(const xmlChar *value, int space) {
+ const xmlChar *cur = value;
+ int c,l;
+
+ /*
+ * First quick algorithm for ASCII range
+ */
+ if (space)
+ while (IS_BLANK_CH(*cur)) cur++;
+ if (((*cur >= 'a') && (*cur <= 'z')) ||
+ ((*cur >= 'A') && (*cur <= 'Z')) ||
+ ((*cur >= '0') && (*cur <= '9')) ||
+ (*cur == '_') || (*cur == '-') || (*cur == '.') || (*cur == ':'))
+ cur++;
+ else
+ goto try_complex;
+ while (((*cur >= 'a') && (*cur <= 'z')) ||
+ ((*cur >= 'A') && (*cur <= 'Z')) ||
+ ((*cur >= '0') && (*cur <= '9')) ||
+ (*cur == '_') || (*cur == '-') || (*cur == '.') || (*cur == ':'))
+ cur++;
+ if (space)
+ while (IS_BLANK_CH(*cur)) cur++;
+ if (*cur == 0)
+ return(0);
+
+try_complex:
+ /*
+ * Second check for chars outside the ASCII range
+ */
+ cur = value;
+ c = CUR_SCHAR(cur, l);
+ if (space) {
+ while (IS_BLANK(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ }
+ if (!(IS_LETTER(c) || IS_DIGIT(c) || (c == '.') || (c == ':') ||
+ (c == '-') || (c == '_') || IS_COMBINING(c) || IS_EXTENDER(c)))
+ return(1);
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') || (c == ':') ||
+ (c == '-') || (c == '_') || IS_COMBINING(c) || IS_EXTENDER(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ if (space) {
+ while (IS_BLANK(c)) {
+ cur += l;
+ c = CUR_SCHAR(cur, l);
+ }
+ }
+ if (c != 0)
+ return(1);
+ return(0);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/************************************************************************
+ * *
+ * Allocation and deallocation of basic structures *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSetBufferAllocationScheme:
+ * @scheme: allocation method to use
+ *
+ * Set the buffer allocation method. Types are
+ * XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down
+ * XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed,
+ * improves performance
+ */
+void
+xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme) {
+ xmlBufferAllocScheme = scheme;
+}
+
+/**
+ * xmlGetBufferAllocationScheme:
+ *
+ * Types are
+ * XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down
+ * XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed,
+ * improves performance
+ *
+ * Returns the current allocation scheme
+ */
+xmlBufferAllocationScheme
+xmlGetBufferAllocationScheme(void) {
+ return(xmlBufferAllocScheme);
+}
+
+/**
+ * xmlNewNs:
+ * @node: the element carrying the namespace
+ * @href: the URI associated
+ * @prefix: the prefix for the namespace
+ *
+ * Creation of a new Namespace. This function will refuse to create
+ * a namespace with a similar prefix than an existing one present on this
+ * node.
+ * We use href==NULL in the case of an element creation where the namespace
+ * was not defined.
+ * Returns a new namespace pointer or NULL
+ */
+xmlNsPtr
+xmlNewNs(xmlNodePtr node, const xmlChar *href, const xmlChar *prefix) {
+ xmlNsPtr cur;
+
+ if ((node != NULL) && (node->type != XML_ELEMENT_NODE))
+ return(NULL);
+
+ if ((prefix != NULL) && (xmlStrEqual(prefix, BAD_CAST "xml")))
+ return(NULL);
+
+ /*
+ * Allocate a new Namespace and fill the fields.
+ */
+ cur = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building namespace");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNs));
+ cur->type = XML_LOCAL_NAMESPACE;
+
+ if (href != NULL)
+ cur->href = xmlStrdup(href);
+ if (prefix != NULL)
+ cur->prefix = xmlStrdup(prefix);
+
+ /*
+ * Add it at the end to preserve parsing order ...
+ * and checks for existing use of the prefix
+ */
+ if (node != NULL) {
+ if (node->nsDef == NULL) {
+ node->nsDef = cur;
+ } else {
+ xmlNsPtr prev = node->nsDef;
+
+ if (((prev->prefix == NULL) && (cur->prefix == NULL)) ||
+ (xmlStrEqual(prev->prefix, cur->prefix))) {
+ xmlFreeNs(cur);
+ return(NULL);
+ }
+ while (prev->next != NULL) {
+ prev = prev->next;
+ if (((prev->prefix == NULL) && (cur->prefix == NULL)) ||
+ (xmlStrEqual(prev->prefix, cur->prefix))) {
+ xmlFreeNs(cur);
+ return(NULL);
+ }
+ }
+ prev->next = cur;
+ }
+ }
+ return(cur);
+}
+
+/**
+ * xmlSetNs:
+ * @node: a node in the document
+ * @ns: a namespace pointer
+ *
+ * Associate a namespace to a node, a posteriori.
+ */
+void
+xmlSetNs(xmlNodePtr node, xmlNsPtr ns) {
+ if (node == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSetNs: node == NULL\n");
+#endif
+ return;
+ }
+ node->ns = ns;
+}
+
+/**
+ * xmlFreeNs:
+ * @cur: the namespace pointer
+ *
+ * Free up the structures associated to a namespace
+ */
+void
+xmlFreeNs(xmlNsPtr cur) {
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlFreeNs : ns == NULL\n");
+#endif
+ return;
+ }
+ if (cur->href != NULL) xmlFree((char *) cur->href);
+ if (cur->prefix != NULL) xmlFree((char *) cur->prefix);
+ xmlFree(cur);
+}
+
+/**
+ * xmlFreeNsList:
+ * @cur: the first namespace pointer
+ *
+ * Free up all the structures associated to the chained namespaces.
+ */
+void
+xmlFreeNsList(xmlNsPtr cur) {
+ xmlNsPtr next;
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlFreeNsList : ns == NULL\n");
+#endif
+ return;
+ }
+ while (cur != NULL) {
+ next = cur->next;
+ xmlFreeNs(cur);
+ cur = next;
+ }
+}
+
+/**
+ * xmlNewDtd:
+ * @doc: the document pointer
+ * @name: the DTD name
+ * @ExternalID: the external ID
+ * @SystemID: the system ID
+ *
+ * Creation of a new DTD for the external subset. To create an
+ * internal subset, use xmlCreateIntSubset().
+ *
+ * Returns a pointer to the new DTD structure
+ */
+xmlDtdPtr
+xmlNewDtd(xmlDocPtr doc, const xmlChar *name,
+ const xmlChar *ExternalID, const xmlChar *SystemID) {
+ xmlDtdPtr cur;
+
+ if ((doc != NULL) && (doc->extSubset != NULL)) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewDtd(%s): document %s already have a DTD %s\n",
+ /* !!! */ (char *) name, doc->name,
+ /* !!! */ (char *)doc->extSubset->name);
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new DTD and fill the fields.
+ */
+ cur = (xmlDtdPtr) xmlMalloc(sizeof(xmlDtd));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building DTD");
+ return(NULL);
+ }
+ memset(cur, 0 , sizeof(xmlDtd));
+ cur->type = XML_DTD_NODE;
+
+ if (name != NULL)
+ cur->name = xmlStrdup(name);
+ if (ExternalID != NULL)
+ cur->ExternalID = xmlStrdup(ExternalID);
+ if (SystemID != NULL)
+ cur->SystemID = xmlStrdup(SystemID);
+ if (doc != NULL)
+ doc->extSubset = cur;
+ cur->doc = doc;
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
+ return(cur);
+}
+
+/**
+ * xmlGetIntSubset:
+ * @doc: the document pointer
+ *
+ * Get the internal subset of a document
+ * Returns a pointer to the DTD structure or NULL if not found
+ */
+
+xmlDtdPtr
+xmlGetIntSubset(xmlDocPtr doc) {
+ xmlNodePtr cur;
+
+ if (doc == NULL)
+ return(NULL);
+ cur = doc->children;
+ while (cur != NULL) {
+ if (cur->type == XML_DTD_NODE)
+ return((xmlDtdPtr) cur);
+ cur = cur->next;
+ }
+ return((xmlDtdPtr) doc->intSubset);
+}
+
+/**
+ * xmlCreateIntSubset:
+ * @doc: the document pointer
+ * @name: the DTD name
+ * @ExternalID: the external (PUBLIC) ID
+ * @SystemID: the system ID
+ *
+ * Create the internal subset of a document
+ * Returns a pointer to the new DTD structure
+ */
+xmlDtdPtr
+xmlCreateIntSubset(xmlDocPtr doc, const xmlChar *name,
+ const xmlChar *ExternalID, const xmlChar *SystemID) {
+ xmlDtdPtr cur;
+
+ if ((doc != NULL) && (xmlGetIntSubset(doc) != NULL)) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+
+ "xmlCreateIntSubset(): document %s already have an internal subset\n",
+ doc->name);
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new DTD and fill the fields.
+ */
+ cur = (xmlDtdPtr) xmlMalloc(sizeof(xmlDtd));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building internal subset");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlDtd));
+ cur->type = XML_DTD_NODE;
+
+ if (name != NULL)
+ cur->name = xmlStrdup(name);
+ if (ExternalID != NULL)
+ cur->ExternalID = xmlStrdup(ExternalID);
+ if (SystemID != NULL)
+ cur->SystemID = xmlStrdup(SystemID);
+ if (doc != NULL) {
+ doc->intSubset = cur;
+ cur->parent = doc;
+ cur->doc = doc;
+ if (doc->children == NULL) {
+ doc->children = (xmlNodePtr) cur;
+ doc->last = (xmlNodePtr) cur;
+ } else {
+ if (doc->type == XML_HTML_DOCUMENT_NODE) {
+ xmlNodePtr prev;
+
+ prev = doc->children;
+ prev->prev = (xmlNodePtr) cur;
+ cur->next = prev;
+ doc->children = (xmlNodePtr) cur;
+ } else {
+ xmlNodePtr next;
+
+ next = doc->children;
+ while ((next != NULL) && (next->type != XML_ELEMENT_NODE))
+ next = next->next;
+ if (next == NULL) {
+ cur->prev = doc->last;
+ cur->prev->next = (xmlNodePtr) cur;
+ cur->next = NULL;
+ doc->last = (xmlNodePtr) cur;
+ } else {
+ cur->next = next;
+ cur->prev = next->prev;
+ if (cur->prev == NULL)
+ doc->children = (xmlNodePtr) cur;
+ else
+ cur->prev->next = (xmlNodePtr) cur;
+ next->prev = (xmlNodePtr) cur;
+ }
+ }
+ }
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
+ return(cur);
+}
+
+/**
+ * DICT_FREE:
+ * @str: a string
+ *
+ * Free a string if it is not owned by the "dict" dictionnary in the
+ * current scope
+ */
+#define DICT_FREE(str) \
+ if ((str) && ((!dict) || \
+ (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
+ xmlFree((char *)(str));
+
+/**
+ * xmlFreeDtd:
+ * @cur: the DTD structure to free up
+ *
+ * Free a DTD structure.
+ */
+void
+xmlFreeDtd(xmlDtdPtr cur) {
+ xmlDictPtr dict = NULL;
+
+ if (cur == NULL) {
+ return;
+ }
+ if (cur->doc != NULL) dict = cur->doc->dict;
+
+ if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
+ xmlDeregisterNodeDefaultValue((xmlNodePtr)cur);
+
+ if (cur->children != NULL) {
+ xmlNodePtr next, c = cur->children;
+
+ /*
+ * Cleanup all the DTD comments they are not in the DTD
+ * indexes.
+ */
+ while (c != NULL) {
+ next = c->next;
+ if ((c->type == XML_COMMENT_NODE) || (c->type == XML_PI_NODE)) {
+ xmlUnlinkNode(c);
+ xmlFreeNode(c);
+ }
+ c = next;
+ }
+ }
+ DICT_FREE(cur->name)
+ DICT_FREE(cur->SystemID)
+ DICT_FREE(cur->ExternalID)
+ /* TODO !!! */
+ if (cur->notations != NULL)
+ xmlFreeNotationTable((xmlNotationTablePtr) cur->notations);
+
+ if (cur->elements != NULL)
+ xmlFreeElementTable((xmlElementTablePtr) cur->elements);
+ if (cur->attributes != NULL)
+ xmlFreeAttributeTable((xmlAttributeTablePtr) cur->attributes);
+ if (cur->entities != NULL)
+ xmlFreeEntitiesTable((xmlEntitiesTablePtr) cur->entities);
+ if (cur->pentities != NULL)
+ xmlFreeEntitiesTable((xmlEntitiesTablePtr) cur->pentities);
+
+ xmlFree(cur);
+}
+
+/**
+ * xmlNewDoc:
+ * @version: xmlChar string giving the version of XML "1.0"
+ *
+ * Creates a new XML document
+ *
+ * Returns a new document
+ */
+xmlDocPtr
+xmlNewDoc(const xmlChar *version) {
+ xmlDocPtr cur;
+
+ if (version == NULL)
+ version = (const xmlChar *) "1.0";
+
+ /*
+ * Allocate a new document and fill the fields.
+ */
+ cur = (xmlDocPtr) xmlMalloc(sizeof(xmlDoc));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building doc");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlDoc));
+ cur->type = XML_DOCUMENT_NODE;
+
+ cur->version = xmlStrdup(version);
+ cur->standalone = -1;
+ cur->compression = -1; /* not initialized */
+ cur->doc = cur;
+ /*
+ * The in memory encoding is always UTF8
+ * This field will never change and would
+ * be obsolete if not for binary compatibility.
+ */
+ cur->charset = XML_CHAR_ENCODING_UTF8;
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
+ return(cur);
+}
+
+/**
+ * xmlFreeDoc:
+ * @cur: pointer to the document
+ *
+ * Free up all the structures used by a document, tree included.
+ */
+void
+xmlFreeDoc(xmlDocPtr cur) {
+ xmlDtdPtr extSubset, intSubset;
+ xmlDictPtr dict = NULL;
+
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlFreeDoc : document == NULL\n");
+#endif
+ return;
+ }
+ if (cur != NULL) dict = cur->dict;
+
+ if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
+ xmlDeregisterNodeDefaultValue((xmlNodePtr)cur);
+
+ /*
+ * Do this before freeing the children list to avoid ID lookups
+ */
+ if (cur->ids != NULL) xmlFreeIDTable((xmlIDTablePtr) cur->ids);
+ cur->ids = NULL;
+ if (cur->refs != NULL) xmlFreeRefTable((xmlRefTablePtr) cur->refs);
+ cur->refs = NULL;
+ extSubset = cur->extSubset;
+ intSubset = cur->intSubset;
+ if (intSubset == extSubset)
+ extSubset = NULL;
+ if (extSubset != NULL) {
+ xmlUnlinkNode((xmlNodePtr) cur->extSubset);
+ cur->extSubset = NULL;
+ xmlFreeDtd(extSubset);
+ }
+ if (intSubset != NULL) {
+ xmlUnlinkNode((xmlNodePtr) cur->intSubset);
+ cur->intSubset = NULL;
+ xmlFreeDtd(intSubset);
+ }
+
+ if (cur->children != NULL) xmlFreeNodeList(cur->children);
+ if (cur->oldNs != NULL) xmlFreeNsList(cur->oldNs);
+
+ DICT_FREE(cur->version)
+ DICT_FREE(cur->name)
+ DICT_FREE(cur->encoding)
+ DICT_FREE(cur->URL)
+ xmlFree(cur);
+ if (dict) xmlDictFree(dict);
+}
+
+/**
+ * xmlStringLenGetNodeList:
+ * @doc: the document
+ * @value: the value of the text
+ * @len: the length of the string value
+ *
+ * Parse the value string and build the node list associated. Should
+ * produce a flat tree with only TEXTs and ENTITY_REFs.
+ * Returns a pointer to the first child
+ */
+xmlNodePtr
+xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) {
+ xmlNodePtr ret = NULL, last = NULL;
+ xmlNodePtr node;
+ xmlChar *val;
+ const xmlChar *cur = value, *end = cur + len;
+ const xmlChar *q;
+ xmlEntityPtr ent;
+
+ if (value == NULL) return(NULL);
+
+ q = cur;
+ while ((cur < end) && (*cur != 0)) {
+ if (cur[0] == '&') {
+ int charval = 0;
+ xmlChar tmp;
+
+ /*
+ * Save the current text.
+ */
+ if (cur != q) {
+ if ((last != NULL) && (last->type == XML_TEXT_NODE)) {
+ xmlNodeAddContentLen(last, q, cur - q);
+ } else {
+ node = xmlNewDocTextLen(doc, q, cur - q);
+ if (node == NULL) return(ret);
+ if (last == NULL)
+ last = ret = node;
+ else {
+ last->next = node;
+ node->prev = last;
+ last = node;
+ }
+ }
+ }
+ q = cur;
+ if ((cur + 2 < end) && (cur[1] == '#') && (cur[2] == 'x')) {
+ cur += 3;
+ if (cur < end)
+ tmp = *cur;
+ else
+ tmp = 0;
+ while (tmp != ';') { /* Non input consuming loop */
+ if ((tmp >= '0') && (tmp <= '9'))
+ charval = charval * 16 + (tmp - '0');
+ else if ((tmp >= 'a') && (tmp <= 'f'))
+ charval = charval * 16 + (tmp - 'a') + 10;
+ else if ((tmp >= 'A') && (tmp <= 'F'))
+ charval = charval * 16 + (tmp - 'A') + 10;
+ else {
+ xmlTreeErr(XML_TREE_INVALID_HEX, (xmlNodePtr) doc,
+ NULL);
+ charval = 0;
+ break;
+ }
+ cur++;
+ if (cur < end)
+ tmp = *cur;
+ else
+ tmp = 0;
+ }
+ if (tmp == ';')
+ cur++;
+ q = cur;
+ } else if ((cur + 1 < end) && (cur[1] == '#')) {
+ cur += 2;
+ if (cur < end)
+ tmp = *cur;
+ else
+ tmp = 0;
+ while (tmp != ';') { /* Non input consuming loops */
+ if ((tmp >= '0') && (tmp <= '9'))
+ charval = charval * 10 + (tmp - '0');
+ else {
+ xmlTreeErr(XML_TREE_INVALID_DEC, (xmlNodePtr) doc,
+ NULL);
+ charval = 0;
+ break;
+ }
+ cur++;
+ if (cur < end)
+ tmp = *cur;
+ else
+ tmp = 0;
+ }
+ if (tmp == ';')
+ cur++;
+ q = cur;
+ } else {
+ /*
+ * Read the entity string
+ */
+ cur++;
+ q = cur;
+ while ((cur < end) && (*cur != 0) && (*cur != ';')) cur++;
+ if ((cur >= end) || (*cur == 0)) {
+ xmlTreeErr(XML_TREE_UNTERMINATED_ENTITY, (xmlNodePtr) doc,
+ (const char *) q);
+ return(ret);
+ }
+ if (cur != q) {
+ /*
+ * Predefined entities don't generate nodes
+ */
+ val = xmlStrndup(q, cur - q);
+ ent = xmlGetDocEntity(doc, val);
+ if ((ent != NULL) &&
+ (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
+ if (last == NULL) {
+ node = xmlNewDocText(doc, ent->content);
+ last = ret = node;
+ } else if (last->type != XML_TEXT_NODE) {
+ node = xmlNewDocText(doc, ent->content);
+ last = xmlAddNextSibling(last, node);
+ } else
+ xmlNodeAddContent(last, ent->content);
+
+ } else {
+ /*
+ * Create a new REFERENCE_REF node
+ */
+ node = xmlNewReference(doc, val);
+ if (node == NULL) {
+ if (val != NULL) xmlFree(val);
+ return(ret);
+ }
+ else if ((ent != NULL) && (ent->children == NULL)) {
+ xmlNodePtr temp;
+
+ ent->children = xmlStringGetNodeList(doc,
+ (const xmlChar*)node->content);
+ ent->owner = 1;
+ temp = ent->children;
+ while (temp) {
+ temp->parent = (xmlNodePtr)ent;
+ temp = temp->next;
+ }
+ }
+ if (last == NULL) {
+ last = ret = node;
+ } else {
+ last = xmlAddNextSibling(last, node);
+ }
+ }
+ xmlFree(val);
+ }
+ cur++;
+ q = cur;
+ }
+ if (charval != 0) {
+ xmlChar buf[10];
+ int l;
+
+ l = xmlCopyCharMultiByte(buf, charval);
+ buf[l] = 0;
+ node = xmlNewDocText(doc, buf);
+ if (node != NULL) {
+ if (last == NULL) {
+ last = ret = node;
+ } else {
+ last = xmlAddNextSibling(last, node);
+ }
+ }
+ charval = 0;
+ }
+ } else
+ cur++;
+ }
+ if ((cur != q) || (ret == NULL)) {
+ /*
+ * Handle the last piece of text.
+ */
+ if ((last != NULL) && (last->type == XML_TEXT_NODE)) {
+ xmlNodeAddContentLen(last, q, cur - q);
+ } else {
+ node = xmlNewDocTextLen(doc, q, cur - q);
+ if (node == NULL) return(ret);
+ if (last == NULL) {
+ last = ret = node;
+ } else {
+ last = xmlAddNextSibling(last, node);
+ }
+ }
+ }
+ return(ret);
+}
+
+/**
+ * xmlStringGetNodeList:
+ * @doc: the document
+ * @value: the value of the attribute
+ *
+ * Parse the value string and build the node list associated. Should
+ * produce a flat tree with only TEXTs and ENTITY_REFs.
+ * Returns a pointer to the first child
+ */
+xmlNodePtr
+xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) {
+ xmlNodePtr ret = NULL, last = NULL;
+ xmlNodePtr node;
+ xmlChar *val;
+ const xmlChar *cur = value;
+ const xmlChar *q;
+ xmlEntityPtr ent;
+
+ if (value == NULL) return(NULL);
+
+ q = cur;
+ while (*cur != 0) {
+ if (cur[0] == '&') {
+ int charval = 0;
+ xmlChar tmp;
+
+ /*
+ * Save the current text.
+ */
+ if (cur != q) {
+ if ((last != NULL) && (last->type == XML_TEXT_NODE)) {
+ xmlNodeAddContentLen(last, q, cur - q);
+ } else {
+ node = xmlNewDocTextLen(doc, q, cur - q);
+ if (node == NULL) return(ret);
+ if (last == NULL)
+ last = ret = node;
+ else {
+ last->next = node;
+ node->prev = last;
+ last = node;
+ }
+ }
+ }
+ q = cur;
+ if ((cur[1] == '#') && (cur[2] == 'x')) {
+ cur += 3;
+ tmp = *cur;
+ while (tmp != ';') { /* Non input consuming loop */
+ if ((tmp >= '0') && (tmp <= '9'))
+ charval = charval * 16 + (tmp - '0');
+ else if ((tmp >= 'a') && (tmp <= 'f'))
+ charval = charval * 16 + (tmp - 'a') + 10;
+ else if ((tmp >= 'A') && (tmp <= 'F'))
+ charval = charval * 16 + (tmp - 'A') + 10;
+ else {
+ xmlTreeErr(XML_TREE_INVALID_HEX, (xmlNodePtr) doc,
+ NULL);
+ charval = 0;
+ break;
+ }
+ cur++;
+ tmp = *cur;
+ }
+ if (tmp == ';')
+ cur++;
+ q = cur;
+ } else if (cur[1] == '#') {
+ cur += 2;
+ tmp = *cur;
+ while (tmp != ';') { /* Non input consuming loops */
+ if ((tmp >= '0') && (tmp <= '9'))
+ charval = charval * 10 + (tmp - '0');
+ else {
+ xmlTreeErr(XML_TREE_INVALID_DEC, (xmlNodePtr) doc,
+ NULL);
+ charval = 0;
+ break;
+ }
+ cur++;
+ tmp = *cur;
+ }
+ if (tmp == ';')
+ cur++;
+ q = cur;
+ } else {
+ /*
+ * Read the entity string
+ */
+ cur++;
+ q = cur;
+ while ((*cur != 0) && (*cur != ';')) cur++;
+ if (*cur == 0) {
+ xmlTreeErr(XML_TREE_UNTERMINATED_ENTITY,
+ (xmlNodePtr) doc, (const char *) q);
+ return(ret);
+ }
+ if (cur != q) {
+ /*
+ * Predefined entities don't generate nodes
+ */
+ val = xmlStrndup(q, cur - q);
+ ent = xmlGetDocEntity(doc, val);
+ if ((ent != NULL) &&
+ (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
+ if (last == NULL) {
+ node = xmlNewDocText(doc, ent->content);
+ last = ret = node;
+ } else if (last->type != XML_TEXT_NODE) {
+ node = xmlNewDocText(doc, ent->content);
+ last = xmlAddNextSibling(last, node);
+ } else
+ xmlNodeAddContent(last, ent->content);
+
+ } else {
+ /*
+ * Create a new REFERENCE_REF node
+ */
+ node = xmlNewReference(doc, val);
+ if (node == NULL) {
+ if (val != NULL) xmlFree(val);
+ return(ret);
+ }
+ else if ((ent != NULL) && (ent->children == NULL)) {
+ xmlNodePtr temp;
+
+ ent->children = xmlStringGetNodeList(doc,
+ (const xmlChar*)node->content);
+ ent->owner = 1;
+ temp = ent->children;
+ while (temp) {
+ temp->parent = (xmlNodePtr)ent;
+ temp = temp->next;
+ }
+ }
+ if (last == NULL) {
+ last = ret = node;
+ } else {
+ last = xmlAddNextSibling(last, node);
+ }
+ }
+ xmlFree(val);
+ }
+ cur++;
+ q = cur;
+ }
+ if (charval != 0) {
+ xmlChar buf[10];
+ int len;
+
+ len = xmlCopyCharMultiByte(buf, charval);
+ buf[len] = 0;
+ node = xmlNewDocText(doc, buf);
+ if (node != NULL) {
+ if (last == NULL) {
+ last = ret = node;
+ } else {
+ last = xmlAddNextSibling(last, node);
+ }
+ }
+
+ charval = 0;
+ }
+ } else
+ cur++;
+ }
+ if ((cur != q) || (ret == NULL)) {
+ /*
+ * Handle the last piece of text.
+ */
+ if ((last != NULL) && (last->type == XML_TEXT_NODE)) {
+ xmlNodeAddContentLen(last, q, cur - q);
+ } else {
+ node = xmlNewDocTextLen(doc, q, cur - q);
+ if (node == NULL) return(ret);
+ if (last == NULL) {
+ last = ret = node;
+ } else {
+ last = xmlAddNextSibling(last, node);
+ }
+ }
+ }
+ return(ret);
+}
+
+/**
+ * xmlNodeListGetString:
+ * @doc: the document
+ * @list: a Node list
+ * @inLine: should we replace entity contents or show their external form
+ *
+ * Build the string equivalent to the text contained in the Node list
+ * made of TEXTs and ENTITY_REFs
+ *
+ * Returns a pointer to the string copy, the caller must free it with xmlFree().
+ */
+xmlChar *
+xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine)
+{
+ xmlNodePtr node = list;
+ xmlChar *ret = NULL;
+ xmlEntityPtr ent;
+
+ if (list == NULL)
+ return (NULL);
+
+ while (node != NULL) {
+ if ((node->type == XML_TEXT_NODE) ||
+ (node->type == XML_CDATA_SECTION_NODE)) {
+ if (inLine) {
+ ret = xmlStrcat(ret, node->content);
+ } else {
+ xmlChar *buffer;
+
+ buffer = xmlEncodeEntitiesReentrant(doc, node->content);
+ if (buffer != NULL) {
+ ret = xmlStrcat(ret, buffer);
+ xmlFree(buffer);
+ }
+ }
+ } else if (node->type == XML_ENTITY_REF_NODE) {
+ if (inLine) {
+ ent = xmlGetDocEntity(doc, node->name);
+ if (ent != NULL) {
+ xmlChar *buffer;
+
+ /* an entity content can be any "well balanced chunk",
+ * i.e. the result of the content [43] production:
+ * http://www.w3.org/TR/REC-xml#NT-content.
+ * So it can contain text, CDATA section or nested
+ * entity reference nodes (among others).
+ * -> we recursive call xmlNodeListGetString()
+ * which handles these types */
+ buffer = xmlNodeListGetString(doc, ent->children, 1);
+ if (buffer != NULL) {
+ ret = xmlStrcat(ret, buffer);
+ xmlFree(buffer);
+ }
+ } else {
+ ret = xmlStrcat(ret, node->content);
+ }
+ } else {
+ xmlChar buf[2];
+
+ buf[0] = '&';
+ buf[1] = 0;
+ ret = xmlStrncat(ret, buf, 1);
+ ret = xmlStrcat(ret, node->name);
+ buf[0] = ';';
+ buf[1] = 0;
+ ret = xmlStrncat(ret, buf, 1);
+ }
+ }
+#if 0
+ else {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlGetNodeListString : invalid node type %d\n",
+ node->type);
+ }
+#endif
+ node = node->next;
+ }
+ return (ret);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlNodeListGetRawString:
+ * @doc: the document
+ * @list: a Node list
+ * @inLine: should we replace entity contents or show their external form
+ *
+ * Builds the string equivalent to the text contained in the Node list
+ * made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString()
+ * this function doesn't do any character encoding handling.
+ *
+ * Returns a pointer to the string copy, the caller must free it with xmlFree().
+ */
+xmlChar *
+xmlNodeListGetRawString(xmlDocPtr doc, xmlNodePtr list, int inLine)
+{
+ xmlNodePtr node = list;
+ xmlChar *ret = NULL;
+ xmlEntityPtr ent;
+
+ if (list == NULL)
+ return (NULL);
+
+ while (node != NULL) {
+ if ((node->type == XML_TEXT_NODE) ||
+ (node->type == XML_CDATA_SECTION_NODE)) {
+ if (inLine) {
+ ret = xmlStrcat(ret, node->content);
+ } else {
+ xmlChar *buffer;
+
+ buffer = xmlEncodeSpecialChars(doc, node->content);
+ if (buffer != NULL) {
+ ret = xmlStrcat(ret, buffer);
+ xmlFree(buffer);
+ }
+ }
+ } else if (node->type == XML_ENTITY_REF_NODE) {
+ if (inLine) {
+ ent = xmlGetDocEntity(doc, node->name);
+ if (ent != NULL) {
+ xmlChar *buffer;
+
+ /* an entity content can be any "well balanced chunk",
+ * i.e. the result of the content [43] production:
+ * http://www.w3.org/TR/REC-xml#NT-content.
+ * So it can contain text, CDATA section or nested
+ * entity reference nodes (among others).
+ * -> we recursive call xmlNodeListGetRawString()
+ * which handles these types */
+ buffer =
+ xmlNodeListGetRawString(doc, ent->children, 1);
+ if (buffer != NULL) {
+ ret = xmlStrcat(ret, buffer);
+ xmlFree(buffer);
+ }
+ } else {
+ ret = xmlStrcat(ret, node->content);
+ }
+ } else {
+ xmlChar buf[2];
+
+ buf[0] = '&';
+ buf[1] = 0;
+ ret = xmlStrncat(ret, buf, 1);
+ ret = xmlStrcat(ret, node->name);
+ buf[0] = ';';
+ buf[1] = 0;
+ ret = xmlStrncat(ret, buf, 1);
+ }
+ }
+#if 0
+ else {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlGetNodeListString : invalid node type %d\n",
+ node->type);
+ }
+#endif
+ node = node->next;
+ }
+ return (ret);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED)
+/**
+ * xmlNewProp:
+ * @node: the holding node
+ * @name: the name of the attribute
+ * @value: the value of the attribute
+ *
+ * Create a new property carried by a node.
+ * Returns a pointer to the attribute
+ */
+xmlAttrPtr
+xmlNewProp(xmlNodePtr node, const xmlChar *name, const xmlChar *value) {
+ xmlAttrPtr cur;
+ xmlDocPtr doc = NULL;
+
+ if (name == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewProp : name == NULL\n");
+#endif
+ return(NULL);
+ }
+ if ((node != NULL) && (node->type != XML_ELEMENT_NODE))
+ return(NULL);
+
+ /*
+ * Allocate a new property and fill the fields.
+ */
+ cur = (xmlAttrPtr) xmlMalloc(sizeof(xmlAttr));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building attribute");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlAttr));
+ cur->type = XML_ATTRIBUTE_NODE;
+
+ cur->parent = node;
+ if (node != NULL) {
+ doc = node->doc;
+ cur->doc = doc;
+ }
+ cur->name = xmlStrdup(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;
+ tmp->doc = doc;
+ 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;
+
+ while (prev->next != NULL) prev = prev->next;
+ prev->next = cur;
+ cur->prev = prev;
+ }
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
+ return(cur);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlNewNsProp:
+ * @node: the holding node
+ * @ns: the namespace
+ * @name: the name of the attribute
+ * @value: the value of the attribute
+ *
+ * Create a new property tagged with a namespace and carried by a node.
+ * Returns a pointer to the attribute
+ */
+xmlAttrPtr
+xmlNewNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name,
+ const xmlChar *value) {
+ xmlAttrPtr cur;
+ xmlDocPtr doc = NULL;
+
+ if (name == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewNsProp : name == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new property and fill the fields.
+ */
+ cur = (xmlAttrPtr) xmlMalloc(sizeof(xmlAttr));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building attribute");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlAttr));
+ cur->type = XML_ATTRIBUTE_NODE;
+
+ cur->parent = node;
+ if (node != NULL) {
+ doc = node->doc;
+ cur->doc = doc;
+ }
+ cur->ns = ns;
+ cur->name = xmlStrdup(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);
+ }
+
+ /*
+ * Add it at the end to preserve parsing order ...
+ */
+ if (node != NULL) {
+ 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;
+ }
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
+ return(cur);
+}
+
+/**
+ * xmlNewNsPropEatName:
+ * @node: the holding node
+ * @ns: the namespace
+ * @name: the name of the attribute
+ * @value: the value of the attribute
+ *
+ * Create a new property tagged with a namespace and carried by a node.
+ * Returns a pointer to the attribute
+ */
+xmlAttrPtr
+xmlNewNsPropEatName(xmlNodePtr node, xmlNsPtr ns, xmlChar *name,
+ const xmlChar *value) {
+ xmlAttrPtr cur;
+ xmlDocPtr doc = NULL;
+
+ if (name == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewNsPropEatName : name == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new property and fill the fields.
+ */
+ cur = (xmlAttrPtr) xmlMalloc(sizeof(xmlAttr));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building attribute");
+ xmlFree(name);
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlAttr));
+ cur->type = XML_ATTRIBUTE_NODE;
+
+ cur->parent = node;
+ if (node != NULL) {
+ doc = node->doc;
+ cur->doc = doc;
+ }
+ cur->ns = ns;
+ 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);
+ }
+
+ /*
+ * Add it at the end to preserve parsing order ...
+ */
+ if (node != NULL) {
+ 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;
+ }
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
+ return(cur);
+}
+
+/**
+ * xmlNewDocProp:
+ * @doc: the document
+ * @name: the name of the attribute
+ * @value: the value of the attribute
+ *
+ * Create a new property carried by a document.
+ * Returns a pointer to the attribute
+ */
+xmlAttrPtr
+xmlNewDocProp(xmlDocPtr doc, const xmlChar *name, const xmlChar *value) {
+ xmlAttrPtr cur;
+
+ if (name == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewDocProp : name == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new property and fill the fields.
+ */
+ cur = (xmlAttrPtr) xmlMalloc(sizeof(xmlAttr));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building attribute");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlAttr));
+ cur->type = XML_ATTRIBUTE_NODE;
+
+ cur->name = xmlStrdup(name);
+ cur->doc = doc;
+ if (value != NULL) {
+ xmlNodePtr tmp;
+
+ cur->children = xmlStringGetNodeList(doc, value);
+ cur->last = NULL;
+
+ tmp = cur->children;
+ while (tmp != NULL) {
+ tmp->parent = (xmlNodePtr) cur;
+ if (tmp->next == NULL)
+ cur->last = tmp;
+ tmp = tmp->next;
+ }
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
+ return(cur);
+}
+
+/**
+ * xmlFreePropList:
+ * @cur: the first property in the list
+ *
+ * Free a property and all its siblings, all the children are freed too.
+ */
+void
+xmlFreePropList(xmlAttrPtr cur) {
+ xmlAttrPtr next;
+ if (cur == NULL) return;
+ while (cur != NULL) {
+ next = cur->next;
+ xmlFreeProp(cur);
+ cur = next;
+ }
+}
+
+/**
+ * xmlFreeProp:
+ * @cur: an attribute
+ *
+ * Free one attribute, all the content is freed too
+ */
+void
+xmlFreeProp(xmlAttrPtr cur) {
+ xmlDictPtr dict = NULL;
+ if (cur == NULL) return;
+
+ if (cur->doc != NULL) dict = cur->doc->dict;
+
+ if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
+ xmlDeregisterNodeDefaultValue((xmlNodePtr)cur);
+
+ /* Check for ID removal -> leading to invalid references ! */
+ if ((cur->parent != NULL) && (cur->parent->doc != NULL) &&
+ ((cur->parent->doc->intSubset != NULL) ||
+ (cur->parent->doc->extSubset != NULL))) {
+ if (xmlIsID(cur->parent->doc, cur->parent, cur))
+ xmlRemoveID(cur->parent->doc, cur);
+ }
+ if (cur->children != NULL) xmlFreeNodeList(cur->children);
+ DICT_FREE(cur->name)
+ xmlFree(cur);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlRemoveProp:
+ * @cur: an attribute
+ *
+ * Unlink and free one attribute, all the content is freed too
+ * Note this doesn't work for namespace definition attributes
+ *
+ * Returns 0 if success and -1 in case of error.
+ */
+int
+xmlRemoveProp(xmlAttrPtr cur) {
+ xmlAttrPtr tmp;
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRemoveProp : cur == NULL\n");
+#endif
+ return(-1);
+ }
+ if (cur->parent == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRemoveProp : cur->parent == NULL\n");
+#endif
+ return(-1);
+ }
+ tmp = cur->parent->properties;
+ if (tmp == cur) {
+ cur->parent->properties = cur->next;
+ xmlFreeProp(cur);
+ return(0);
+ }
+ while (tmp != NULL) {
+ if (tmp->next == cur) {
+ tmp->next = cur->next;
+ if (tmp->next != NULL)
+ tmp->next->prev = tmp;
+ xmlFreeProp(cur);
+ return(0);
+ }
+ tmp = tmp->next;
+ }
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlRemoveProp : attribute not owned by its node\n");
+#endif
+ return(-1);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlNewPI:
+ * @name: the processing instruction name
+ * @content: the PI content
+ *
+ * Creation of a processing instruction element.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewPI(const xmlChar *name, const xmlChar *content) {
+ xmlNodePtr cur;
+
+ if (name == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewPI : name == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building PI");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_PI_NODE;
+
+ cur->name = xmlStrdup(name);
+ if (content != NULL) {
+ cur->content = xmlStrdup(content);
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
+ return(cur);
+}
+
+/**
+ * xmlNewNode:
+ * @ns: namespace if any
+ * @name: the node name
+ *
+ * Creation of a new node element. @ns is optional (NULL).
+ *
+ * Returns a pointer to the new node object. Uses xmlStrdup() to make
+ * copy of @name.
+ */
+xmlNodePtr
+xmlNewNode(xmlNsPtr ns, const xmlChar *name) {
+ xmlNodePtr cur;
+
+ if (name == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewNode : name == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building node");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_ELEMENT_NODE;
+
+ cur->name = xmlStrdup(name);
+ cur->ns = ns;
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(cur);
+ return(cur);
+}
+
+/**
+ * xmlNewNodeEatName:
+ * @ns: namespace if any
+ * @name: the node name
+ *
+ * Creation of a new node element. @ns is optional (NULL).
+ *
+ * Returns a pointer to the new node object, with pointer @name as
+ * new node's name. Use xmlNewNode() if a copy of @name string is
+ * is needed as new node's name.
+ */
+xmlNodePtr
+xmlNewNodeEatName(xmlNsPtr ns, xmlChar *name) {
+ xmlNodePtr cur;
+
+ if (name == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewNode : name == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building node");
+ xmlFree(name);
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_ELEMENT_NODE;
+
+ cur->name = name;
+ cur->ns = ns;
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
+ return(cur);
+}
+
+/**
+ * xmlNewDocNode:
+ * @doc: the document
+ * @ns: namespace if any
+ * @name: the node name
+ * @content: the XML text content if any
+ *
+ * Creation of a new node element within a document. @ns and @content
+ * are optional (NULL).
+ * NOTE: @content is supposed to be a piece of XML CDATA, so it allow entities
+ * references, but XML special chars need to be escaped first by using
+ * xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you don't
+ * need entities support.
+ *
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewDocNode(xmlDocPtr doc, xmlNsPtr ns,
+ const xmlChar *name, const xmlChar *content) {
+ xmlNodePtr cur;
+
+ cur = xmlNewNode(ns, name);
+ if (cur != NULL) {
+ cur->doc = doc;
+ if (content != NULL) {
+ cur->children = xmlStringGetNodeList(doc, content);
+ UPDATE_LAST_CHILD_AND_PARENT(cur)
+ }
+ }
+
+ return(cur);
+}
+
+/**
+ * xmlNewDocNodeEatName:
+ * @doc: the document
+ * @ns: namespace if any
+ * @name: the node name
+ * @content: the XML text content if any
+ *
+ * Creation of a new node element within a document. @ns and @content
+ * are optional (NULL).
+ * NOTE: @content is supposed to be a piece of XML CDATA, so it allow entities
+ * references, but XML special chars need to be escaped first by using
+ * xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you don't
+ * need entities support.
+ *
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewDocNodeEatName(xmlDocPtr doc, xmlNsPtr ns,
+ xmlChar *name, const xmlChar *content) {
+ xmlNodePtr cur;
+
+ cur = xmlNewNodeEatName(ns, name);
+ if (cur != NULL) {
+ cur->doc = doc;
+ if (content != NULL) {
+ cur->children = xmlStringGetNodeList(doc, content);
+ UPDATE_LAST_CHILD_AND_PARENT(cur)
+ }
+ }
+ return(cur);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlNewDocRawNode:
+ * @doc: the document
+ * @ns: namespace if any
+ * @name: the node name
+ * @content: the text content if any
+ *
+ * Creation of a new node element within a document. @ns and @content
+ * are optional (NULL).
+ *
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewDocRawNode(xmlDocPtr doc, xmlNsPtr ns,
+ const xmlChar *name, const xmlChar *content) {
+ xmlNodePtr cur;
+
+ cur = xmlNewNode(ns, name);
+ if (cur != NULL) {
+ cur->doc = doc;
+ if (content != NULL) {
+ cur->children = xmlNewDocText(doc, content);
+ UPDATE_LAST_CHILD_AND_PARENT(cur)
+ }
+ }
+ return(cur);
+}
+
+/**
+ * xmlNewDocFragment:
+ * @doc: the document owning the fragment
+ *
+ * Creation of a new Fragment node.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewDocFragment(xmlDocPtr doc) {
+ xmlNodePtr cur;
+
+ /*
+ * Allocate a new DocumentFragment node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building fragment");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_DOCUMENT_FRAG_NODE;
+
+ cur->doc = doc;
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(cur);
+ return(cur);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlNewText:
+ * @content: the text content
+ *
+ * Creation of a new text node.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewText(const xmlChar *content) {
+ xmlNodePtr cur;
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building text");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_TEXT_NODE;
+
+ cur->name = xmlStringText;
+ if (content != NULL) {
+ cur->content = xmlStrdup(content);
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(cur);
+ return(cur);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlNewTextChild:
+ * @parent: the parent node
+ * @ns: a namespace if any
+ * @name: the name of the child
+ * @content: the text content of the child if any.
+ *
+ * Creation of a new child element, added at the end of @parent children list.
+ * @ns and @content parameters are optional (NULL). If @ns is NULL, the newly
+ * created element inherits the namespace of @parent. If @content is non NULL,
+ * a child TEXT node will be created containing the string @content.
+ * NOTE: Use xmlNewChild() if @content will contain entities that need to be
+ * preserved. Use this function, xmlNewTextChild(), if you need to ensure that
+ * reserved XML chars that might appear in @content, such as the ampersand,
+ * greater-than or less-than signs, are automatically replaced by their XML
+ * escaped entity representations.
+ *
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewTextChild(xmlNodePtr parent, xmlNsPtr ns,
+ const xmlChar *name, const xmlChar *content) {
+ xmlNodePtr cur, prev;
+
+ if (parent == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextChild : parent == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ if (name == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextChild : name == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new node
+ */
+ if (parent->type == XML_ELEMENT_NODE) {
+ if (ns == NULL)
+ cur = xmlNewDocRawNode(parent->doc, parent->ns, name, content);
+ else
+ cur = xmlNewDocRawNode(parent->doc, ns, name, content);
+ } else if ((parent->type == XML_DOCUMENT_NODE) ||
+ (parent->type == XML_HTML_DOCUMENT_NODE)) {
+ if (ns == NULL)
+ cur = xmlNewDocRawNode((xmlDocPtr) parent, NULL, name, content);
+ else
+ cur = xmlNewDocRawNode((xmlDocPtr) parent, ns, name, content);
+ } else if (parent->type == XML_DOCUMENT_FRAG_NODE) {
+ cur = xmlNewDocRawNode( parent->doc, ns, name, content);
+ } else {
+ return(NULL);
+ }
+ if (cur == NULL) return(NULL);
+
+ /*
+ * add the new element at the end of the children list.
+ */
+ cur->type = XML_ELEMENT_NODE;
+ cur->parent = parent;
+ cur->doc = parent->doc;
+ if (parent->children == NULL) {
+ parent->children = cur;
+ parent->last = cur;
+ } else {
+ prev = parent->last;
+ prev->next = cur;
+ cur->prev = prev;
+ parent->last = cur;
+ }
+
+ return(cur);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlNewCharRef:
+ * @doc: the document
+ * @name: the char ref string, starting with # or "&# ... ;"
+ *
+ * Creation of a new character reference node.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewCharRef(xmlDocPtr doc, const xmlChar *name) {
+ xmlNodePtr cur;
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building character reference");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_ENTITY_REF_NODE;
+
+ cur->doc = doc;
+ if (name[0] == '&') {
+ int len;
+ name++;
+ len = xmlStrlen(name);
+ if (name[len - 1] == ';')
+ cur->name = xmlStrndup(name, len - 1);
+ else
+ cur->name = xmlStrndup(name, len);
+ } else
+ cur->name = xmlStrdup(name);
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(cur);
+ return(cur);
+}
+
+/**
+ * xmlNewReference:
+ * @doc: the document
+ * @name: the reference name, or the reference string with & and ;
+ *
+ * Creation of a new reference node.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewReference(xmlDocPtr doc, const xmlChar *name) {
+ xmlNodePtr cur;
+ xmlEntityPtr ent;
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building reference");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_ENTITY_REF_NODE;
+
+ cur->doc = doc;
+ if (name[0] == '&') {
+ int len;
+ name++;
+ len = xmlStrlen(name);
+ if (name[len - 1] == ';')
+ cur->name = xmlStrndup(name, len - 1);
+ else
+ cur->name = xmlStrndup(name, len);
+ } else
+ cur->name = xmlStrdup(name);
+
+ ent = xmlGetDocEntity(doc, cur->name);
+ if (ent != NULL) {
+ cur->content = ent->content;
+ /*
+ * The parent pointer in entity is a DTD pointer and thus is NOT
+ * updated. Not sure if this is 100% correct.
+ * -George
+ */
+ cur->children = (xmlNodePtr) ent;
+ cur->last = (xmlNodePtr) ent;
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(cur);
+ return(cur);
+}
+
+/**
+ * xmlNewDocText:
+ * @doc: the document
+ * @content: the text content
+ *
+ * Creation of a new text node within a document.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewDocText(xmlDocPtr doc, const xmlChar *content) {
+ xmlNodePtr cur;
+
+ cur = xmlNewText(content);
+ if (cur != NULL) cur->doc = doc;
+ return(cur);
+}
+
+/**
+ * xmlNewTextLen:
+ * @content: the text content
+ * @len: the text len.
+ *
+ * Creation of a new text node with an extra parameter for the content's length
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewTextLen(const xmlChar *content, int len) {
+ xmlNodePtr cur;
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building text");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_TEXT_NODE;
+
+ cur->name = xmlStringText;
+ if (content != NULL) {
+ cur->content = xmlStrndup(content, len);
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(cur);
+ return(cur);
+}
+
+/**
+ * xmlNewDocTextLen:
+ * @doc: the document
+ * @content: the text content
+ * @len: the text len.
+ *
+ * Creation of a new text node with an extra content length parameter. The
+ * text node pertain to a given document.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewDocTextLen(xmlDocPtr doc, const xmlChar *content, int len) {
+ xmlNodePtr cur;
+
+ cur = xmlNewTextLen(content, len);
+ if (cur != NULL) cur->doc = doc;
+ return(cur);
+}
+
+/**
+ * xmlNewComment:
+ * @content: the comment content
+ *
+ * Creation of a new node containing a comment.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewComment(const xmlChar *content) {
+ xmlNodePtr cur;
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building comment");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_COMMENT_NODE;
+
+ cur->name = xmlStringComment;
+ if (content != NULL) {
+ cur->content = xmlStrdup(content);
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(cur);
+ return(cur);
+}
+
+/**
+ * xmlNewCDataBlock:
+ * @doc: the document
+ * @content: the CDATA block content content
+ * @len: the length of the block
+ *
+ * Creation of a new node containing a CDATA block.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewCDataBlock(xmlDocPtr doc, const xmlChar *content, int len) {
+ xmlNodePtr cur;
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (cur == NULL) {
+ xmlTreeErrMemory("building CDATA");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNode));
+ cur->type = XML_CDATA_SECTION_NODE;
+ cur->doc = doc;
+
+ if (content != NULL) {
+ cur->content = xmlStrndup(content, len);
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue(cur);
+ return(cur);
+}
+
+/**
+ * xmlNewDocComment:
+ * @doc: the document
+ * @content: the comment content
+ *
+ * Creation of a new node containing a comment within a document.
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewDocComment(xmlDocPtr doc, const xmlChar *content) {
+ xmlNodePtr cur;
+
+ cur = xmlNewComment(content);
+ if (cur != NULL) cur->doc = doc;
+ return(cur);
+}
+
+/**
+ * xmlSetTreeDoc:
+ * @tree: the top element
+ * @doc: the document
+ *
+ * update all nodes under the tree to point to the right document
+ */
+void
+xmlSetTreeDoc(xmlNodePtr tree, xmlDocPtr doc) {
+ xmlAttrPtr prop;
+
+ if (tree == NULL)
+ return;
+ if (tree->doc != doc) {
+ if(tree->type == XML_ELEMENT_NODE) {
+ prop = tree->properties;
+ while (prop != NULL) {
+ prop->doc = doc;
+ xmlSetListDoc(prop->children, doc);
+ prop = prop->next;
+ }
+ }
+ if (tree->children != NULL)
+ xmlSetListDoc(tree->children, doc);
+ tree->doc = doc;
+ }
+}
+
+/**
+ * xmlSetListDoc:
+ * @list: the first element
+ * @doc: the document
+ *
+ * update all nodes in the list to point to the right document
+ */
+void
+xmlSetListDoc(xmlNodePtr list, xmlDocPtr doc) {
+ xmlNodePtr cur;
+
+ if (list == NULL)
+ return;
+ cur = list;
+ while (cur != NULL) {
+ if (cur->doc != doc)
+ xmlSetTreeDoc(cur, doc);
+ cur = cur->next;
+ }
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+/**
+ * xmlNewChild:
+ * @parent: the parent node
+ * @ns: a namespace if any
+ * @name: the name of the child
+ * @content: the XML content of the child if any.
+ *
+ * Creation of a new child element, added at the end of @parent children list.
+ * @ns and @content parameters are optional (NULL). If @ns is NULL, the newly
+ * created element inherits the namespace of @parent. If @content is non NULL,
+ * a child list containing the TEXTs and ENTITY_REFs node will be created.
+ * NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity
+ * references. XML special chars must be escaped first by using
+ * xmlEncodeEntitiesReentrant(), or xmlNewTextChild() should be used.
+ *
+ * Returns a pointer to the new node object.
+ */
+xmlNodePtr
+xmlNewChild(xmlNodePtr parent, xmlNsPtr ns,
+ const xmlChar *name, const xmlChar *content) {
+ xmlNodePtr cur, prev;
+
+ if (parent == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewChild : parent == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ if (name == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewChild : name == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new node
+ */
+ if (parent->type == XML_ELEMENT_NODE) {
+ if (ns == NULL)
+ cur = xmlNewDocNode(parent->doc, parent->ns, name, content);
+ else
+ cur = xmlNewDocNode(parent->doc, ns, name, content);
+ } else if ((parent->type == XML_DOCUMENT_NODE) ||
+ (parent->type == XML_HTML_DOCUMENT_NODE)) {
+ if (ns == NULL)
+ cur = xmlNewDocNode((xmlDocPtr) parent, NULL, name, content);
+ else
+ cur = xmlNewDocNode((xmlDocPtr) parent, ns, name, content);
+ } else if (parent->type == XML_DOCUMENT_FRAG_NODE) {
+ cur = xmlNewDocNode( parent->doc, ns, name, content);
+ } else {
+ return(NULL);
+ }
+ if (cur == NULL) return(NULL);
+
+ /*
+ * add the new element at the end of the children list.
+ */
+ cur->type = XML_ELEMENT_NODE;
+ cur->parent = parent;
+ cur->doc = parent->doc;
+ if (parent->children == NULL) {
+ parent->children = cur;
+ parent->last = cur;
+ } else {
+ prev = parent->last;
+ prev->next = cur;
+ cur->prev = prev;
+ parent->last = cur;
+ }
+
+ return(cur);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlAddNextSibling:
+ * @cur: the child node
+ * @elem: the new node
+ *
+ * Add a new node @elem as the next sibling of @cur
+ * If the new node was already inserted in a document it is
+ * first unlinked from its existing context.
+ * As a result of text merging @elem may be freed.
+ * If the new node is ATTRIBUTE, it is added into properties instead of children.
+ * If there is an attribute with equal name, it is first destroyed.
+ *
+ * Returns the new node or NULL in case of error.
+ */
+xmlNodePtr
+xmlAddNextSibling(xmlNodePtr cur, xmlNodePtr elem) {
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddNextSibling : cur == NULL\n");
+#endif
+ return(NULL);
+ }
+ if (elem == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddNextSibling : elem == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ xmlUnlinkNode(elem);
+
+ if (elem->type == XML_TEXT_NODE) {
+ if (cur->type == XML_TEXT_NODE) {
+ xmlNodeAddContent(cur, elem->content);
+ xmlFreeNode(elem);
+ return(cur);
+ }
+ if ((cur->next != NULL) && (cur->next->type == XML_TEXT_NODE) &&
+ (cur->name == cur->next->name)) {
+ xmlChar *tmp;
+
+ tmp = xmlStrdup(elem->content);
+ tmp = xmlStrcat(tmp, cur->next->content);
+ xmlNodeSetContent(cur->next, tmp);
+ xmlFree(tmp);
+ xmlFreeNode(elem);
+ return(cur->next);
+ }
+ } else if (elem->type == XML_ATTRIBUTE_NODE) {
+ /* check if an attribute with the same name exists */
+ xmlAttrPtr attr;
+
+ if (elem->ns == NULL)
+ attr = xmlHasProp(cur->parent, elem->name);
+ else
+ attr = xmlHasNsProp(cur->parent, elem->name, elem->ns->href);
+ if ((attr != NULL) && (attr != (xmlAttrPtr) elem)) {
+ /* different instance, destroy it (attributes must be unique) */
+ xmlFreeProp(attr);
+ }
+ }
+
+ if (elem->doc != cur->doc) {
+ xmlSetTreeDoc(elem, cur->doc);
+ }
+ elem->parent = cur->parent;
+ elem->prev = cur;
+ elem->next = cur->next;
+ cur->next = elem;
+ if (elem->next != NULL)
+ elem->next->prev = elem;
+ if ((elem->parent != NULL) && (elem->parent->last == cur) && (elem->type != XML_ATTRIBUTE_NODE))
+ elem->parent->last = elem;
+ return(elem);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED)
+/**
+ * xmlAddPrevSibling:
+ * @cur: the child node
+ * @elem: the new node
+ *
+ * Add a new node @elem as the previous sibling of @cur
+ * merging adjacent TEXT nodes (@elem may be freed)
+ * If the new node was already inserted in a document it is
+ * first unlinked from its existing context.
+ * If the new node is ATTRIBUTE, it is added into properties instead of children.
+ * If there is an attribute with equal name, it is first destroyed.
+ *
+ * Returns the new node or NULL in case of error.
+ */
+xmlNodePtr
+xmlAddPrevSibling(xmlNodePtr cur, xmlNodePtr elem) {
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddPrevSibling : cur == NULL\n");
+#endif
+ return(NULL);
+ }
+ if (elem == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddPrevSibling : elem == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ xmlUnlinkNode(elem);
+
+ if (elem->type == XML_TEXT_NODE) {
+ if (cur->type == XML_TEXT_NODE) {
+ xmlChar *tmp;
+
+ tmp = xmlStrdup(elem->content);
+ tmp = xmlStrcat(tmp, cur->content);
+ xmlNodeSetContent(cur, tmp);
+ xmlFree(tmp);
+ xmlFreeNode(elem);
+ return(cur);
+ }
+ if ((cur->prev != NULL) && (cur->prev->type == XML_TEXT_NODE) &&
+ (cur->name == cur->prev->name)) {
+ xmlNodeAddContent(cur->prev, elem->content);
+ xmlFreeNode(elem);
+ return(cur->prev);
+ }
+ } else if (elem->type == XML_ATTRIBUTE_NODE) {
+ /* check if an attribute with the same name exists */
+ xmlAttrPtr attr;
+
+ if (elem->ns == NULL)
+ attr = xmlHasProp(cur->parent, elem->name);
+ else
+ attr = xmlHasNsProp(cur->parent, elem->name, elem->ns->href);
+ if ((attr != NULL) && (attr != (xmlAttrPtr) elem)) {
+ /* different instance, destroy it (attributes must be unique) */
+ xmlFreeProp(attr);
+ }
+ }
+
+ if (elem->doc != cur->doc) {
+ xmlSetTreeDoc(elem, cur->doc);
+ }
+ elem->parent = cur->parent;
+ elem->next = cur;
+ elem->prev = cur->prev;
+ cur->prev = elem;
+ if (elem->prev != NULL)
+ elem->prev->next = elem;
+ if (elem->parent != NULL) {
+ if (elem->type == XML_ATTRIBUTE_NODE) {
+ if (elem->parent->properties == (xmlAttrPtr) cur) {
+ elem->parent->properties = (xmlAttrPtr) elem;
+ }
+ } else {
+ if (elem->parent->children == cur) {
+ elem->parent->children = elem;
+ }
+ }
+ }
+ return(elem);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlAddSibling:
+ * @cur: the child node
+ * @elem: the new node
+ *
+ * Add a new element @elem to the list of siblings of @cur
+ * merging adjacent TEXT nodes (@elem may be freed)
+ * If the new element was already inserted in a document it is
+ * first unlinked from its existing context.
+ *
+ * Returns the new element or NULL in case of error.
+ */
+xmlNodePtr
+xmlAddSibling(xmlNodePtr cur, xmlNodePtr elem) {
+ xmlNodePtr parent;
+
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddSibling : cur == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ if (elem == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddSibling : elem == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * Constant time is we can rely on the ->parent->last to find
+ * the last sibling.
+ */
+ if ((cur->parent != NULL) &&
+ (cur->parent->children != NULL) &&
+ (cur->parent->last != NULL) &&
+ (cur->parent->last->next == NULL)) {
+ cur = cur->parent->last;
+ } else {
+ while (cur->next != NULL) cur = cur->next;
+ }
+
+ xmlUnlinkNode(elem);
+
+ if ((cur->type == XML_TEXT_NODE) && (elem->type == XML_TEXT_NODE) &&
+ (cur->name == elem->name)) {
+ xmlNodeAddContent(cur, elem->content);
+ xmlFreeNode(elem);
+ return(cur);
+ }
+
+ if (elem->doc != cur->doc) {
+ xmlSetTreeDoc(elem, cur->doc);
+ }
+ parent = cur->parent;
+ elem->prev = cur;
+ elem->next = NULL;
+ elem->parent = parent;
+ cur->next = elem;
+ if (parent != NULL)
+ parent->last = elem;
+
+ return(elem);
+}
+
+/**
+ * xmlAddChildList:
+ * @parent: the parent node
+ * @cur: the first node in the list
+ *
+ * Add a list of node at the end of the child list of the parent
+ * merging adjacent TEXT nodes (@cur may be freed)
+ *
+ * Returns the last child or NULL in case of error.
+ */
+xmlNodePtr
+xmlAddChildList(xmlNodePtr parent, xmlNodePtr cur) {
+ xmlNodePtr prev;
+
+ if (parent == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddChildList : parent == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddChildList : child == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ if ((cur->doc != NULL) && (parent->doc != NULL) &&
+ (cur->doc != parent->doc)) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "Elements moved to a different document\n");
+#endif
+ }
+
+ /*
+ * add the first element at the end of the children list.
+ */
+
+ if (parent->children == NULL) {
+ parent->children = cur;
+ } else {
+ /*
+ * If cur and parent->last both are TEXT nodes, then merge them.
+ */
+ if ((cur->type == XML_TEXT_NODE) &&
+ (parent->last->type == XML_TEXT_NODE) &&
+ (cur->name == parent->last->name)) {
+ xmlNodeAddContent(parent->last, cur->content);
+ /*
+ * if it's the only child, nothing more to be done.
+ */
+ if (cur->next == NULL) {
+ xmlFreeNode(cur);
+ return(parent->last);
+ }
+ prev = cur;
+ cur = cur->next;
+ xmlFreeNode(prev);
+ }
+ prev = parent->last;
+ prev->next = cur;
+ cur->prev = prev;
+ }
+ while (cur->next != NULL) {
+ cur->parent = parent;
+ if (cur->doc != parent->doc) {
+ xmlSetTreeDoc(cur, parent->doc);
+ }
+ cur = cur->next;
+ }
+ cur->parent = parent;
+ cur->doc = parent->doc; /* the parent may not be linked to a doc ! */
+ parent->last = cur;
+
+ return(cur);
+}
+
+/**
+ * xmlAddChild:
+ * @parent: the parent node
+ * @cur: the child node
+ *
+ * Add a new node to @parent, at the end of the child (or property) list
+ * merging adjacent TEXT nodes (in which case @cur is freed)
+ * If the new node is ATTRIBUTE, it is added into properties instead of children.
+ * If there is an attribute with equal name, it is first destroyed.
+ *
+ * Returns the child or NULL in case of error.
+ */
+xmlNodePtr
+xmlAddChild(xmlNodePtr parent, xmlNodePtr cur) {
+ xmlNodePtr prev;
+
+ if (parent == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddChild : parent == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlAddChild : child == NULL\n");
+#endif
+ return(NULL);
+ }
+
+ /*
+ * If cur is a TEXT node, merge its content with adjacent TEXT nodes
+ * cur is then freed.
+ */
+ if (cur->type == XML_TEXT_NODE) {
+ if ((parent->type == XML_TEXT_NODE) &&
+ (parent->content != NULL) &&
+ (parent->name == cur->name) &&
+ (parent != cur)) {
+ xmlNodeAddContent(parent, cur->content);
+ xmlFreeNode(cur);
+ return(parent);
+ }
+ if ((parent->last != NULL) && (parent->last->type == XML_TEXT_NODE) &&
+ (parent->last->name == cur->name) &&
+ (parent->last != cur)) {
+ xmlNodeAddContent(parent->last, cur->content);
+ xmlFreeNode(cur);
+ return(parent->last);
+ }
+ }
+
+ /*
+ * add the new element at the end of the children list.
+ */
+ prev = cur->parent;
+ cur->parent = parent;
+ if (cur->doc != parent->doc) {
+ xmlSetTreeDoc(cur, parent->doc);
+ }
+ /* this check prevents a loop on tree-traversions if a developer
+ * tries to add a node to its parent multiple times
+ */
+ if (prev == parent)
+ return(cur);
+
+ /*
+ * Coalescing
+ */
+ if ((parent->type == XML_TEXT_NODE) &&
+ (parent->content != NULL) &&
+ (parent != cur)) {
+ xmlNodeAddContent(parent, cur->content);
+ xmlFreeNode(cur);
+ return(parent);
+ }
+ if (cur->type == XML_ATTRIBUTE_NODE) {
+ if (parent->properties == NULL) {
+ parent->properties = (xmlAttrPtr) cur;
+ } else {
+ /* check if an attribute with the same name exists */
+ xmlAttrPtr lastattr;
+
+ if (cur->ns == NULL)
+ lastattr = xmlHasProp(parent, cur->name);
+ else
+ lastattr = xmlHasNsProp(parent, cur->name, cur->ns->href);
+ if ((lastattr != NULL) && (lastattr != (xmlAttrPtr) cur)) {
+ /* different instance, destroy it (attributes must be unique) */
+ xmlFreeProp(lastattr);
+ }
+ /* find the end */
+ lastattr = parent->properties;
+ while (lastattr->next != NULL) {
+ lastattr = lastattr->next;
+ }
+ lastattr->next = (xmlAttrPtr) cur;
+ ((xmlAttrPtr) cur)->prev = lastattr;
+ }
+ } else {
+ if (parent->children == NULL) {
+ parent->children = cur;
+ parent->last = cur;
+ } else {
+ prev = parent->last;
+ prev->next = cur;
+ cur->prev = prev;
+ parent->last = cur;
+ }
+ }
+ return(cur);
+}
+
+/**
+ * xmlGetLastChild:
+ * @parent: the parent node
+ *
+ * Search the last child of a node.
+ * Returns the last child or NULL if none.
+ */
+xmlNodePtr
+xmlGetLastChild(xmlNodePtr parent) {
+ if (parent == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlGetLastChild : parent == NULL\n");
+#endif
+ return(NULL);
+ }
+ return(parent->last);
+}
+
+/**
+ * xmlFreeNodeList:
+ * @cur: the first node in the list
+ *
+ * Free a node and all its siblings, this is a recursive behaviour, all
+ * the children are freed too.
+ */
+void
+xmlFreeNodeList(xmlNodePtr cur) {
+ xmlNodePtr next;
+ xmlDictPtr dict = NULL;
+
+ if (cur == NULL) return;
+ if (cur->type == XML_NAMESPACE_DECL) {
+ xmlFreeNsList((xmlNsPtr) cur);
+ return;
+ }
+ if ((cur->type == XML_DOCUMENT_NODE) ||
+#ifdef LIBXML_DOCB_ENABLED
+ (cur->type == XML_DOCB_DOCUMENT_NODE) ||
+#endif
+ (cur->type == XML_HTML_DOCUMENT_NODE)) {
+ xmlFreeDoc((xmlDocPtr) cur);
+ return;
+ }
+ if (cur->doc != NULL) dict = cur->doc->dict;
+ while (cur != NULL) {
+ next = cur->next;
+ if (cur->type != XML_DTD_NODE) {
+
+ if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
+ xmlDeregisterNodeDefaultValue(cur);
+
+ if ((cur->children != NULL) &&
+ (cur->type != XML_ENTITY_REF_NODE))
+ xmlFreeNodeList(cur->children);
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_XINCLUDE_START) ||
+ (cur->type == XML_XINCLUDE_END)) &&
+ (cur->properties != NULL))
+ xmlFreePropList(cur->properties);
+ if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->type != XML_XINCLUDE_START) &&
+ (cur->type != XML_XINCLUDE_END) &&
+ (cur->type != XML_ENTITY_REF_NODE)) {
+ DICT_FREE(cur->content)
+ }
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_XINCLUDE_START) ||
+ (cur->type == XML_XINCLUDE_END)) &&
+ (cur->nsDef != NULL))
+ xmlFreeNsList(cur->nsDef);
+
+ /*
+ * When a node is a text node or a comment, it uses a global static
+ * variable for the name of the node.
+ * Otherwise the node name might come from the document's
+ * dictionnary
+ */
+ if ((cur->name != NULL) &&
+ (cur->type != XML_TEXT_NODE) &&
+ (cur->type != XML_COMMENT_NODE))
+ DICT_FREE(cur->name)
+ xmlFree(cur);
+ }
+ cur = next;
+ }
+}
+
+/**
+ * xmlFreeNode:
+ * @cur: the node
+ *
+ * Free a node, this is a recursive behaviour, all the children are freed too.
+ * This doesn't unlink the child from the list, use xmlUnlinkNode() first.
+ */
+void
+xmlFreeNode(xmlNodePtr cur) {
+ xmlDictPtr dict = NULL;
+
+ if (cur == NULL) return;
+
+ /* use xmlFreeDtd for DTD nodes */
+ if (cur->type == XML_DTD_NODE) {
+ xmlFreeDtd((xmlDtdPtr) cur);
+ return;
+ }
+ if (cur->type == XML_NAMESPACE_DECL) {
+ xmlFreeNs((xmlNsPtr) cur);
+ return;
+ }
+ if (cur->type == XML_ATTRIBUTE_NODE) {
+ xmlFreeProp((xmlAttrPtr) cur);
+ return;
+ }
+
+ if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
+ xmlDeregisterNodeDefaultValue(cur);
+
+ if (cur->doc != NULL) dict = cur->doc->dict;
+
+ if ((cur->children != NULL) &&
+ (cur->type != XML_ENTITY_REF_NODE))
+ xmlFreeNodeList(cur->children);
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_XINCLUDE_START) ||
+ (cur->type == XML_XINCLUDE_END)) &&
+ (cur->properties != NULL))
+ xmlFreePropList(cur->properties);
+ if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->content != NULL) &&
+ (cur->type != XML_ENTITY_REF_NODE) &&
+ (cur->type != XML_XINCLUDE_END) &&
+ (cur->type != XML_XINCLUDE_START)) {
+ DICT_FREE(cur->content)
+ }
+
+ /*
+ * When a node is a text node or a comment, it uses a global static
+ * variable for the name of the node.
+ * Otherwise the node name might come from the document's dictionnary
+ */
+ if ((cur->name != NULL) &&
+ (cur->type != XML_TEXT_NODE) &&
+ (cur->type != XML_COMMENT_NODE))
+ DICT_FREE(cur->name)
+
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_XINCLUDE_START) ||
+ (cur->type == XML_XINCLUDE_END)) &&
+ (cur->nsDef != NULL))
+ xmlFreeNsList(cur->nsDef);
+ xmlFree(cur);
+}
+
+/**
+ * xmlUnlinkNode:
+ * @cur: the node
+ *
+ * Unlink a node from it's current context, the node is not freed
+ */
+void
+xmlUnlinkNode(xmlNodePtr cur) {
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlUnlinkNode : node == NULL\n");
+#endif
+ return;
+ }
+ if (cur->type == XML_DTD_NODE) {
+ xmlDocPtr doc;
+ doc = cur->doc;
+ if (doc != NULL) {
+ if (doc->intSubset == (xmlDtdPtr) cur)
+ doc->intSubset = NULL;
+ if (doc->extSubset == (xmlDtdPtr) cur)
+ doc->extSubset = NULL;
+ }
+ }
+ if (cur->parent != NULL) {
+ xmlNodePtr parent;
+ parent = cur->parent;
+ if (cur->type == XML_ATTRIBUTE_NODE) {
+ if (parent->properties == (xmlAttrPtr) cur)
+ parent->properties = ((xmlAttrPtr) cur)->next;
+ } else {
+ if (parent->children == cur)
+ parent->children = cur->next;
+ if (parent->last == cur)
+ parent->last = cur->prev;
+ }
+ cur->parent = NULL;
+ }
+ if (cur->next != NULL)
+ cur->next->prev = cur->prev;
+ if (cur->prev != NULL)
+ cur->prev->next = cur->next;
+ cur->next = cur->prev = NULL;
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+/**
+ * xmlReplaceNode:
+ * @old: the old node
+ * @cur: the node
+ *
+ * Unlink the old node from its current context, prune the new one
+ * at the same place. If @cur was already inserted in a document it is
+ * first unlinked from its existing context.
+ *
+ * Returns the @old node
+ */
+xmlNodePtr
+xmlReplaceNode(xmlNodePtr old, xmlNodePtr cur) {
+ if (old == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlReplaceNode : old == NULL\n");
+#endif
+ return(NULL);
+ }
+ if (cur == NULL) {
+ xmlUnlinkNode(old);
+ return(old);
+ }
+ if (cur == old) {
+ return(old);
+ }
+ if ((old->type==XML_ATTRIBUTE_NODE) && (cur->type!=XML_ATTRIBUTE_NODE)) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlReplaceNode : Trying to replace attribute node with other node type\n");
+#endif
+ return(old);
+ }
+ if ((cur->type==XML_ATTRIBUTE_NODE) && (old->type!=XML_ATTRIBUTE_NODE)) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlReplaceNode : Trying to replace a non-attribute node with attribute node\n");
+#endif
+ return(old);
+ }
+ xmlUnlinkNode(cur);
+ cur->doc = old->doc;
+ cur->parent = old->parent;
+ cur->next = old->next;
+ if (cur->next != NULL)
+ cur->next->prev = cur;
+ cur->prev = old->prev;
+ if (cur->prev != NULL)
+ cur->prev->next = cur;
+ if (cur->parent != NULL) {
+ if (cur->type == XML_ATTRIBUTE_NODE) {
+ if (cur->parent->properties == (xmlAttrPtr)old)
+ cur->parent->properties = ((xmlAttrPtr) cur);
+ } else {
+ if (cur->parent->children == old)
+ cur->parent->children = cur;
+ if (cur->parent->last == old)
+ cur->parent->last = cur;
+ }
+ }
+ old->next = old->prev = NULL;
+ old->parent = NULL;
+ return(old);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/************************************************************************
+ * *
+ * Copy operations *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCopyNamespace:
+ * @cur: the namespace
+ *
+ * Do a copy of the namespace.
+ *
+ * Returns: a new #xmlNsPtr, or NULL in case of error.
+ */
+xmlNsPtr
+xmlCopyNamespace(xmlNsPtr cur) {
+ xmlNsPtr ret;
+
+ if (cur == NULL) return(NULL);
+ switch (cur->type) {
+ case XML_LOCAL_NAMESPACE:
+ ret = xmlNewNs(NULL, cur->href, cur->prefix);
+ break;
+ default:
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlCopyNamespace: invalid type %d\n", cur->type);
+#endif
+ return(NULL);
+ }
+ return(ret);
+}
+
+/**
+ * xmlCopyNamespaceList:
+ * @cur: the first namespace
+ *
+ * Do a copy of an namespace list.
+ *
+ * Returns: a new #xmlNsPtr, or NULL in case of error.
+ */
+xmlNsPtr
+xmlCopyNamespaceList(xmlNsPtr cur) {
+ xmlNsPtr ret = NULL;
+ xmlNsPtr p = NULL,q;
+
+ while (cur != NULL) {
+ q = xmlCopyNamespace(cur);
+ if (p == NULL) {
+ ret = p = q;
+ } else {
+ p->next = q;
+ p = q;
+ }
+ cur = cur->next;
+ }
+ return(ret);
+}
+
+static xmlNodePtr
+xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent);
+/**
+ * xmlCopyProp:
+ * @target: the element where the attribute will be grafted
+ * @cur: the attribute
+ *
+ * Do a copy of the attribute.
+ *
+ * Returns: a new #xmlAttrPtr, or NULL in case of error.
+ */
+xmlAttrPtr
+xmlCopyProp(xmlNodePtr target, xmlAttrPtr cur) {
+ xmlAttrPtr ret;
+
+ if (cur == NULL) return(NULL);
+ if (target != NULL)
+ ret = xmlNewDocProp(target->doc, cur->name, NULL);
+ else if (cur->parent != NULL)
+ ret = xmlNewDocProp(cur->parent->doc, cur->name, NULL);
+ else if (cur->children != NULL)
+ ret = xmlNewDocProp(cur->children->doc, cur->name, NULL);
+ else
+ ret = xmlNewDocProp(NULL, cur->name, NULL);
+ if (ret == NULL) return(NULL);
+ ret->parent = target;
+
+ if ((cur->ns != NULL) && (target != NULL)) {
+ xmlNsPtr ns;
+
+ ns = xmlSearchNs(target->doc, target, cur->ns->prefix);
+ if (ns == NULL) {
+ /*
+ * Humm, we are copying an element whose namespace is defined
+ * out of the new tree scope. Search it in the original tree
+ * and add it at the top of the new tree
+ */
+ ns = xmlSearchNs(cur->doc, cur->parent, cur->ns->prefix);
+ if (ns != NULL) {
+ xmlNodePtr root = target;
+ xmlNodePtr pred = NULL;
+
+ while (root->parent != NULL) {
+ pred = root;
+ root = root->parent;
+ }
+ if (root == (xmlNodePtr) target->doc) {
+ /* correct possibly cycling above the document elt */
+ root = pred;
+ }
+ ret->ns = xmlNewNs(root, ns->href, ns->prefix);
+ }
+ } else {
+ /*
+ * we have to find something appropriate here since
+ * we cant be sure, that the namespce we found is identified
+ * by the prefix
+ */
+ if (xmlStrEqual(ns->href, cur->ns->href)) {
+ /* this is the nice case */
+ ret->ns = ns;
+ } else {
+ /*
+ * we are in trouble: we need a new reconcilied namespace.
+ * This is expensive
+ */
+ ret->ns = xmlNewReconciliedNs(target->doc, target, cur->ns);
+ }
+ }
+
+ } else
+ ret->ns = NULL;
+
+ if (cur->children != NULL) {
+ xmlNodePtr tmp;
+
+ ret->children = xmlStaticCopyNodeList(cur->children, ret->doc, (xmlNodePtr) ret);
+ ret->last = NULL;
+ tmp = ret->children;
+ while (tmp != NULL) {
+ /* tmp->parent = (xmlNodePtr)ret; */
+ if (tmp->next == NULL)
+ ret->last = tmp;
+ tmp = tmp->next;
+ }
+ }
+ /*
+ * Try to handle IDs
+ */
+ if ((target!= NULL) && (cur!= NULL) &&
+ (target->doc != NULL) && (cur->doc != NULL) &&
+ (cur->doc->ids != NULL) && (cur->parent != NULL)) {
+ if (xmlIsID(cur->doc, cur->parent, cur)) {
+ xmlChar *id;
+
+ id = xmlNodeListGetString(cur->doc, cur->children, 1);
+ if (id != NULL) {
+ xmlAddID(NULL, target->doc, id, ret);
+ xmlFree(id);
+ }
+ }
+ }
+ return(ret);
+}
+
+/**
+ * xmlCopyPropList:
+ * @target: the element where the attributes will be grafted
+ * @cur: the first attribute
+ *
+ * Do a copy of an attribute list.
+ *
+ * Returns: a new #xmlAttrPtr, or NULL in case of error.
+ */
+xmlAttrPtr
+xmlCopyPropList(xmlNodePtr target, xmlAttrPtr cur) {
+ xmlAttrPtr ret = NULL;
+ xmlAttrPtr p = NULL,q;
+
+ while (cur != NULL) {
+ q = xmlCopyProp(target, cur);
+ if (p == NULL) {
+ ret = p = q;
+ } else {
+ p->next = q;
+ q->prev = p;
+ p = q;
+ }
+ cur = cur->next;
+ }
+ return(ret);
+}
+
+/*
+ * NOTE about the CopyNode operations !
+ *
+ * They are split into external and internal parts for one
+ * tricky reason: namespaces. Doing a direct copy of a node
+ * say RPM:Copyright without changing the namespace pointer to
+ * something else can produce stale links. One way to do it is
+ * to keep a reference counter but this doesn't work as soon
+ * as one move the element or the subtree out of the scope of
+ * the existing namespace. The actual solution seems to add
+ * a copy of the namespace at the top of the copied tree if
+ * not available in the subtree.
+ * Hence two functions, the public front-end call the inner ones
+ * The argument "recursive" normally indicates a recursive copy
+ * of the node with values 0 (no) and 1 (yes). For XInclude,
+ * however, we allow a value of 2 to indicate copy properties and
+ * namespace info, but don't recurse on children.
+ */
+
+static xmlNodePtr
+xmlStaticCopyNode(const xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent,
+ int extended) {
+ xmlNodePtr ret;
+
+ if (node == NULL) return(NULL);
+ switch (node->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ break;
+ case XML_ATTRIBUTE_NODE:
+ return((xmlNodePtr) xmlCopyProp(parent, (xmlAttrPtr) node));
+ case XML_NAMESPACE_DECL:
+ return((xmlNodePtr) xmlCopyNamespaceList((xmlNsPtr) node));
+
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+#ifdef LIBXML_TREE_ENABLED
+ return((xmlNodePtr) xmlCopyDoc((xmlDocPtr) node, extended));
+#endif /* LIBXML_TREE_ENABLED */
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ return(NULL);
+ }
+
+ /*
+ * Allocate a new node and fill the fields.
+ */
+ ret = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (ret == NULL) {
+ xmlTreeErrMemory("copying node");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlNode));
+ ret->type = node->type;
+
+ ret->doc = doc;
+ ret->parent = parent;
+ if (node->name == xmlStringText)
+ ret->name = xmlStringText;
+ else if (node->name == xmlStringTextNoenc)
+ ret->name = xmlStringTextNoenc;
+ else if (node->name == xmlStringComment)
+ ret->name = xmlStringComment;
+ else if (node->name != NULL)
+ ret->name = xmlStrdup(node->name);
+ if ((node->type != XML_ELEMENT_NODE) &&
+ (node->content != NULL) &&
+ (node->type != XML_ENTITY_REF_NODE) &&
+ (node->type != XML_XINCLUDE_END) &&
+ (node->type != XML_XINCLUDE_START)) {
+ ret->content = xmlStrdup(node->content);
+ }else{
+ if (node->type == XML_ELEMENT_NODE)
+ ret->line = node->line;
+ }
+ if (parent != NULL) {
+ xmlNodePtr tmp;
+
+ /*
+ * this is a tricky part for the node register thing:
+ * in case ret does get coalesced in xmlAddChild
+ * the deregister-node callback is called; so we register ret now already
+ */
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
+
+ tmp = xmlAddChild(parent, ret);
+ /* node could have coalesced */
+ if (tmp != ret)
+ return(tmp);
+ }
+
+ if (!extended)
+ goto out;
+ if (node->nsDef != NULL)
+ ret->nsDef = xmlCopyNamespaceList(node->nsDef);
+
+ if (node->ns != NULL) {
+ xmlNsPtr ns;
+
+ ns = xmlSearchNs(doc, ret, node->ns->prefix);
+ if (ns == NULL) {
+ /*
+ * Humm, we are copying an element whose namespace is defined
+ * out of the new tree scope. Search it in the original tree
+ * and add it at the top of the new tree
+ */
+ ns = xmlSearchNs(node->doc, node, node->ns->prefix);
+ if (ns != NULL) {
+ xmlNodePtr root = ret;
+
+ while (root->parent != NULL) root = root->parent;
+ ret->ns = xmlNewNs(root, ns->href, ns->prefix);
+ }
+ } else {
+ /*
+ * reference the existing namespace definition in our own tree.
+ */
+ ret->ns = ns;
+ }
+ }
+ if (node->properties != NULL)
+ ret->properties = xmlCopyPropList(ret, node->properties);
+ if (node->type == XML_ENTITY_REF_NODE) {
+ if ((doc == NULL) || (node->doc != doc)) {
+ /*
+ * The copied node will go into a separate document, so
+ * to avoid dangling references to the ENTITY_DECL node
+ * we cannot keep the reference. Try to find it in the
+ * target document.
+ */
+ ret->children = (xmlNodePtr) xmlGetDocEntity(doc, ret->name);
+ } else {
+ ret->children = node->children;
+ }
+ ret->last = ret->children;
+ } else if ((node->children != NULL) && (extended != 2)) {
+ ret->children = xmlStaticCopyNodeList(node->children, doc, ret);
+ UPDATE_LAST_CHILD_AND_PARENT(ret)
+ }
+
+out:
+ /* if parent != NULL we already registered the node above */
+ if (parent == NULL && xmlRegisterNodeDefaultValue)
+ xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
+ return(ret);
+}
+
+static xmlNodePtr
+xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent) {
+ xmlNodePtr ret = NULL;
+ xmlNodePtr p = NULL,q;
+
+ while (node != NULL) {
+#ifdef LIBXML_TREE_ENABLED
+ if (node->type == XML_DTD_NODE ) {
+ if (doc == NULL) {
+ node = node->next;
+ continue;
+ }
+ if (doc->intSubset == NULL) {
+ q = (xmlNodePtr) xmlCopyDtd( (xmlDtdPtr) node );
+ q->doc = doc;
+ q->parent = parent;
+ doc->intSubset = (xmlDtdPtr) q;
+ xmlAddChild(parent, q);
+ } else {
+ q = (xmlNodePtr) doc->intSubset;
+ xmlAddChild(parent, q);
+ }
+ } else
+#endif /* LIBXML_TREE_ENABLED */
+ q = xmlStaticCopyNode(node, doc, parent, 1);
+ if (ret == NULL) {
+ q->prev = NULL;
+ ret = p = q;
+ } else if (p != q) {
+ /* the test is required if xmlStaticCopyNode coalesced 2 text nodes */
+ p->next = q;
+ q->prev = p;
+ p = q;
+ }
+ node = node->next;
+ }
+ return(ret);
+}
+
+/**
+ * xmlCopyNode:
+ * @node: the node
+ * @extended: if 1 do a recursive copy (properties, namespaces and children
+ * when applicable)
+ * if 2 copy properties and namespaces (when applicable)
+ *
+ * Do a copy of the node.
+ *
+ * Returns: a new #xmlNodePtr, or NULL in case of error.
+ */
+xmlNodePtr
+xmlCopyNode(const xmlNodePtr node, int extended) {
+ xmlNodePtr ret;
+
+ ret = xmlStaticCopyNode(node, NULL, NULL, extended);
+ return(ret);
+}
+
+/**
+ * xmlDocCopyNode:
+ * @node: the node
+ * @doc: the document
+ * @extended: if 1 do a recursive copy (properties, namespaces and children
+ * when applicable)
+ * if 2 copy properties and namespaces (when applicable)
+ *
+ * Do a copy of the node to a given document.
+ *
+ * Returns: a new #xmlNodePtr, or NULL in case of error.
+ */
+xmlNodePtr
+xmlDocCopyNode(const xmlNodePtr node, xmlDocPtr doc, int extended) {
+ xmlNodePtr ret;
+
+ ret = xmlStaticCopyNode(node, doc, NULL, extended);
+ return(ret);
+}
+
+/**
+ * xmlCopyNodeList:
+ * @node: the first node in the list.
+ *
+ * Do a recursive copy of the node list.
+ *
+ * Returns: a new #xmlNodePtr, or NULL in case of error.
+ */
+xmlNodePtr xmlCopyNodeList(const xmlNodePtr node) {
+ xmlNodePtr ret = xmlStaticCopyNodeList(node, NULL, NULL);
+ return(ret);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+/**
+ * xmlCopyDtd:
+ * @dtd: the dtd
+ *
+ * Do a copy of the dtd.
+ *
+ * Returns: a new #xmlDtdPtr, or NULL in case of error.
+ */
+xmlDtdPtr
+xmlCopyDtd(xmlDtdPtr dtd) {
+ xmlDtdPtr ret;
+ xmlNodePtr cur, p = NULL, q;
+
+ if (dtd == NULL) return(NULL);
+ ret = xmlNewDtd(NULL, dtd->name, dtd->ExternalID, dtd->SystemID);
+ if (ret == NULL) return(NULL);
+ if (dtd->entities != NULL)
+ ret->entities = (void *) xmlCopyEntitiesTable(
+ (xmlEntitiesTablePtr) dtd->entities);
+ if (dtd->notations != NULL)
+ ret->notations = (void *) xmlCopyNotationTable(
+ (xmlNotationTablePtr) dtd->notations);
+ if (dtd->elements != NULL)
+ ret->elements = (void *) xmlCopyElementTable(
+ (xmlElementTablePtr) dtd->elements);
+ if (dtd->attributes != NULL)
+ ret->attributes = (void *) xmlCopyAttributeTable(
+ (xmlAttributeTablePtr) dtd->attributes);
+ if (dtd->pentities != NULL)
+ ret->pentities = (void *) xmlCopyEntitiesTable(
+ (xmlEntitiesTablePtr) dtd->pentities);
+
+ cur = dtd->children;
+ while (cur != NULL) {
+ q = NULL;
+
+ if (cur->type == XML_ENTITY_DECL) {
+ xmlEntityPtr tmp = (xmlEntityPtr) cur;
+ switch (tmp->etype) {
+ case XML_INTERNAL_GENERAL_ENTITY:
+ case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
+ case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
+ q = (xmlNodePtr) xmlGetEntityFromDtd(ret, tmp->name);
+ break;
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ q = (xmlNodePtr)
+ xmlGetParameterEntityFromDtd(ret, tmp->name);
+ break;
+ case XML_INTERNAL_PREDEFINED_ENTITY:
+ break;
+ }
+ } else if (cur->type == XML_ELEMENT_DECL) {
+ xmlElementPtr tmp = (xmlElementPtr) cur;
+ q = (xmlNodePtr)
+ xmlGetDtdQElementDesc(ret, tmp->name, tmp->prefix);
+ } else if (cur->type == XML_ATTRIBUTE_DECL) {
+ xmlAttributePtr tmp = (xmlAttributePtr) cur;
+ q = (xmlNodePtr)
+ xmlGetDtdQAttrDesc(ret, tmp->elem, tmp->name, tmp->prefix);
+ } else if (cur->type == XML_COMMENT_NODE) {
+ q = xmlCopyNode(cur, 0);
+ }
+
+ if (q == NULL) {
+ cur = cur->next;
+ continue;
+ }
+
+ if (p == NULL)
+ ret->children = q;
+ else
+ p->next = q;
+
+ q->prev = p;
+ q->parent = (xmlNodePtr) ret;
+ q->next = NULL;
+ ret->last = q;
+ p = q;
+ cur = cur->next;
+ }
+
+ return(ret);
+}
+#endif
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+/**
+ * xmlCopyDoc:
+ * @doc: the document
+ * @recursive: if not zero do a recursive copy.
+ *
+ * Do a copy of the document info. If recursive, the content tree will
+ * be copied too as well as DTD, namespaces and entities.
+ *
+ * Returns: a new #xmlDocPtr, or NULL in case of error.
+ */
+xmlDocPtr
+xmlCopyDoc(xmlDocPtr doc, int recursive) {
+ xmlDocPtr ret;
+
+ if (doc == NULL) return(NULL);
+ ret = xmlNewDoc(doc->version);
+ if (ret == NULL) return(NULL);
+ if (doc->name != NULL)
+ ret->name = xmlMemStrdup(doc->name);
+ if (doc->encoding != NULL)
+ ret->encoding = xmlStrdup(doc->encoding);
+ ret->charset = doc->charset;
+ ret->compression = doc->compression;
+ ret->standalone = doc->standalone;
+ if (!recursive) return(ret);
+
+ ret->last = NULL;
+ ret->children = NULL;
+#ifdef LIBXML_TREE_ENABLED
+ if (doc->intSubset != NULL) {
+ ret->intSubset = xmlCopyDtd(doc->intSubset);
+ xmlSetTreeDoc((xmlNodePtr)ret->intSubset, ret);
+ ret->intSubset->parent = ret;
+ }
+#endif
+ if (doc->oldNs != NULL)
+ ret->oldNs = xmlCopyNamespaceList(doc->oldNs);
+ if (doc->children != NULL) {
+ xmlNodePtr tmp;
+
+ ret->children = xmlStaticCopyNodeList(doc->children, ret,
+ (xmlNodePtr)ret);
+ ret->last = NULL;
+ tmp = ret->children;
+ while (tmp != NULL) {
+ if (tmp->next == NULL)
+ ret->last = tmp;
+ tmp = tmp->next;
+ }
+ }
+ return(ret);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/************************************************************************
+ * *
+ * Content access functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlGetLineNo:
+ * @node: valid node
+ *
+ * Get line number of @node. This requires activation of this option
+ * before invoking the parser by calling xmlLineNumbersDefault(1)
+ *
+ * Returns the line number if successful, -1 otherwise
+ */
+long
+xmlGetLineNo(xmlNodePtr node)
+{
+ long result = -1;
+
+ if (!node)
+ return result;
+ if (node->type == XML_ELEMENT_NODE)
+ result = (long) node->line;
+ else if ((node->prev != NULL) &&
+ ((node->prev->type == XML_ELEMENT_NODE) ||
+ (node->prev->type == XML_TEXT_NODE)))
+ result = xmlGetLineNo(node->prev);
+ else if ((node->parent != NULL) &&
+ ((node->parent->type == XML_ELEMENT_NODE) ||
+ (node->parent->type == XML_TEXT_NODE)))
+ result = xmlGetLineNo(node->parent);
+
+ return result;
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
+/**
+ * xmlGetNodePath:
+ * @node: a node
+ *
+ * Build a structure based Path for the given node
+ *
+ * Returns the new path or NULL in case of error. The caller must free
+ * the returned string
+ */
+xmlChar *
+xmlGetNodePath(xmlNodePtr node)
+{
+ xmlNodePtr cur, tmp, next;
+ xmlChar *buffer = NULL, *temp;
+ size_t buf_len;
+ xmlChar *buf;
+ const char *sep;
+ const char *name;
+ char nametemp[100];
+ int occur = 0;
+
+ if (node == NULL)
+ return (NULL);
+
+ buf_len = 500;
+ buffer = (xmlChar *) xmlMallocAtomic(buf_len * sizeof(xmlChar));
+ if (buffer == NULL) {
+ xmlTreeErrMemory("getting node path");
+ return (NULL);
+ }
+ buf = (xmlChar *) xmlMallocAtomic(buf_len * sizeof(xmlChar));
+ if (buf == NULL) {
+ xmlTreeErrMemory("getting node path");
+ xmlFree(buffer);
+ return (NULL);
+ }
+
+ buffer[0] = 0;
+ cur = node;
+ do {
+ name = "";
+ sep = "?";
+ occur = 0;
+ if ((cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE)) {
+ if (buffer[0] == '/')
+ break;
+ sep = "/";
+ next = NULL;
+ } else if (cur->type == XML_ELEMENT_NODE) {
+ sep = "/";
+ name = (const char *) cur->name;
+ if (cur->ns) {
+ if (cur->ns->prefix != NULL)
+ snprintf(nametemp, sizeof(nametemp) - 1,
+ "%s:%s", cur->ns->prefix, cur->name);
+ else
+ snprintf(nametemp, sizeof(nametemp) - 1,
+ "%s", cur->name);
+ nametemp[sizeof(nametemp) - 1] = 0;
+ name = nametemp;
+ }
+ next = cur->parent;
+
+ /*
+ * Thumbler index computation
+ * TODO: the ocurence test seems bogus for namespaced names
+ */
+ tmp = cur->prev;
+ while (tmp != NULL) {
+ if ((tmp->type == XML_ELEMENT_NODE) &&
+ (xmlStrEqual(cur->name, tmp->name)))
+ occur++;
+ tmp = tmp->prev;
+ }
+ if (occur == 0) {
+ tmp = cur->next;
+ while (tmp != NULL && occur == 0) {
+ if ((tmp->type == XML_ELEMENT_NODE) &&
+ (xmlStrEqual(cur->name, tmp->name)))
+ occur++;
+ tmp = tmp->next;
+ }
+ if (occur != 0)
+ occur = 1;
+ } else
+ occur++;
+ } else if (cur->type == XML_COMMENT_NODE) {
+ sep = "/";
+ name = "comment()";
+ next = cur->parent;
+
+ /*
+ * Thumbler index computation
+ */
+ tmp = cur->prev;
+ while (tmp != NULL) {
+ if (tmp->type == XML_COMMENT_NODE)
+ occur++;
+ tmp = tmp->prev;
+ }
+ if (occur == 0) {
+ tmp = cur->next;
+ while (tmp != NULL && occur == 0) {
+ if (tmp->type == XML_COMMENT_NODE)
+ occur++;
+ tmp = tmp->next;
+ }
+ if (occur != 0)
+ occur = 1;
+ } else
+ occur++;
+ } else if ((cur->type == XML_TEXT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE)) {
+ sep = "/";
+ name = "text()";
+ next = cur->parent;
+
+ /*
+ * Thumbler index computation
+ */
+ tmp = cur->prev;
+ while (tmp != NULL) {
+ if ((cur->type == XML_TEXT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE))
+ occur++;
+ tmp = tmp->prev;
+ }
+ if (occur == 0) {
+ tmp = cur->next;
+ while (tmp != NULL && occur == 0) {
+ if ((cur->type == XML_TEXT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE))
+ occur++;
+ tmp = tmp->next;
+ }
+ if (occur != 0)
+ occur = 1;
+ } else
+ occur++;
+ } else if (cur->type == XML_PI_NODE) {
+ sep = "/";
+ snprintf(nametemp, sizeof(nametemp) - 1,
+ "processing-instruction('%s')", cur->name);
+ nametemp[sizeof(nametemp) - 1] = 0;
+ name = nametemp;
+
+ next = cur->parent;
+
+ /*
+ * Thumbler index computation
+ */
+ tmp = cur->prev;
+ while (tmp != NULL) {
+ if ((tmp->type == XML_PI_NODE) &&
+ (xmlStrEqual(cur->name, tmp->name)))
+ occur++;
+ tmp = tmp->prev;
+ }
+ if (occur == 0) {
+ tmp = cur->next;
+ while (tmp != NULL && occur == 0) {
+ if ((tmp->type == XML_PI_NODE) &&
+ (xmlStrEqual(cur->name, tmp->name)))
+ occur++;
+ tmp = tmp->next;
+ }
+ if (occur != 0)
+ occur = 1;
+ } else
+ occur++;
+
+ } else if (cur->type == XML_ATTRIBUTE_NODE) {
+ sep = "/@";
+ name = (const char *) (((xmlAttrPtr) cur)->name);
+ next = ((xmlAttrPtr) cur)->parent;
+ } else {
+ next = cur->parent;
+ }
+
+ /*
+ * Make sure there is enough room
+ */
+ if (xmlStrlen(buffer) + sizeof(nametemp) + 20 > buf_len) {
+ buf_len =
+ 2 * buf_len + xmlStrlen(buffer) + sizeof(nametemp) + 20;
+ temp = (xmlChar *) xmlRealloc(buffer, buf_len);
+ if (temp == NULL) {
+ xmlTreeErrMemory("getting node path");
+ xmlFree(buf);
+ xmlFree(buffer);
+ return (NULL);
+ }
+ buffer = temp;
+ temp = (xmlChar *) xmlRealloc(buf, buf_len);
+ if (temp == NULL) {
+ xmlTreeErrMemory("getting node path");
+ xmlFree(buf);
+ xmlFree(buffer);
+ return (NULL);
+ }
+ buf = temp;
+ }
+ if (occur == 0)
+ snprintf((char *) buf, buf_len, "%s%s%s",
+ sep, name, (char *) buffer);
+ else
+ snprintf((char *) buf, buf_len, "%s%s[%d]%s",
+ sep, name, occur, (char *) buffer);
+ snprintf((char *) buffer, buf_len, "%s", buf);
+ cur = next;
+ } while (cur != NULL);
+ xmlFree(buf);
+ return (buffer);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlDocGetRootElement:
+ * @doc: the document
+ *
+ * Get the root element of the document (doc->children is a list
+ * containing possibly comments, PIs, etc ...).
+ *
+ * Returns the #xmlNodePtr for the root or NULL
+ */
+xmlNodePtr
+xmlDocGetRootElement(xmlDocPtr doc) {
+ xmlNodePtr ret;
+
+ if (doc == NULL) return(NULL);
+ ret = doc->children;
+ while (ret != NULL) {
+ if (ret->type == XML_ELEMENT_NODE)
+ return(ret);
+ ret = ret->next;
+ }
+ return(ret);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+/**
+ * xmlDocSetRootElement:
+ * @doc: the document
+ * @root: the new document root element
+ *
+ * Set the root element of the document (doc->children is a list
+ * containing possibly comments, PIs, etc ...).
+ *
+ * Returns the old root element if any was found
+ */
+xmlNodePtr
+xmlDocSetRootElement(xmlDocPtr doc, xmlNodePtr root) {
+ xmlNodePtr old = NULL;
+
+ if (doc == NULL) return(NULL);
+ if (root == NULL)
+ return(NULL);
+ xmlUnlinkNode(root);
+ root->doc = doc;
+ root->parent = (xmlNodePtr) doc;
+ old = doc->children;
+ while (old != NULL) {
+ if (old->type == XML_ELEMENT_NODE)
+ break;
+ old = old->next;
+ }
+ if (old == NULL) {
+ if (doc->children == NULL) {
+ doc->children = root;
+ doc->last = root;
+ } else {
+ xmlAddSibling(doc->children, root);
+ }
+ } else {
+ xmlReplaceNode(old, root);
+ }
+ return(old);
+}
+#endif
+
+#if defined(LIBXML_TREE_ENABLED)
+/**
+ * xmlNodeSetLang:
+ * @cur: the node being changed
+ * @lang: the language description
+ *
+ * Set the language of a node, i.e. the values of the xml:lang
+ * attribute.
+ */
+void
+xmlNodeSetLang(xmlNodePtr cur, const xmlChar *lang) {
+ xmlNsPtr ns;
+
+ if (cur == NULL) return;
+ switch(cur->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_PI_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_NAMESPACE_DECL:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ return;
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ break;
+ }
+ ns = xmlSearchNsByHref(cur->doc, cur, XML_XML_NAMESPACE);
+ if (ns == NULL)
+ return;
+ xmlSetNsProp(cur, ns, BAD_CAST "lang", lang);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlNodeGetLang:
+ * @cur: the node being checked
+ *
+ * Searches the language of a node, i.e. the values of the xml:lang
+ * attribute or the one carried by the nearest ancestor.
+ *
+ * Returns a pointer to the lang value, or NULL if not found
+ * It's up to the caller to free the memory with xmlFree().
+ */
+xmlChar *
+xmlNodeGetLang(xmlNodePtr cur) {
+ xmlChar *lang;
+
+ while (cur != NULL) {
+ lang = xmlGetNsProp(cur, BAD_CAST "lang", XML_XML_NAMESPACE);
+ if (lang != NULL)
+ return(lang);
+ cur = cur->parent;
+ }
+ return(NULL);
+}
+
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlNodeSetSpacePreserve:
+ * @cur: the node being changed
+ * @val: the xml:space value ("0": default, 1: "preserve")
+ *
+ * Set (or reset) the space preserving behaviour of a node, i.e. the
+ * value of the xml:space attribute.
+ */
+void
+xmlNodeSetSpacePreserve(xmlNodePtr cur, int val) {
+ xmlNsPtr ns;
+
+ if (cur == NULL) return;
+ switch(cur->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_PI_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_NAMESPACE_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ return;
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ break;
+ }
+ ns = xmlSearchNsByHref(cur->doc, cur, XML_XML_NAMESPACE);
+ if (ns == NULL)
+ return;
+ switch (val) {
+ case 0:
+ xmlSetNsProp(cur, ns, BAD_CAST "space", BAD_CAST "default");
+ break;
+ case 1:
+ xmlSetNsProp(cur, ns, BAD_CAST "space", BAD_CAST "preserve");
+ break;
+ }
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlNodeGetSpacePreserve:
+ * @cur: the node being checked
+ *
+ * Searches the space preserving behaviour of a node, i.e. the values
+ * of the xml:space attribute or the one carried by the nearest
+ * ancestor.
+ *
+ * Returns -1 if xml:space is not inherited, 0 if "default", 1 if "preserve"
+ */
+int
+xmlNodeGetSpacePreserve(xmlNodePtr cur) {
+ xmlChar *space;
+
+ while (cur != NULL) {
+ space = xmlGetNsProp(cur, BAD_CAST "space", XML_XML_NAMESPACE);
+ if (space != NULL) {
+ if (xmlStrEqual(space, BAD_CAST "preserve")) {
+ xmlFree(space);
+ return(1);
+ }
+ if (xmlStrEqual(space, BAD_CAST "default")) {
+ xmlFree(space);
+ return(0);
+ }
+ xmlFree(space);
+ }
+ cur = cur->parent;
+ }
+ return(-1);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlNodeSetName:
+ * @cur: the node being changed
+ * @name: the new tag name
+ *
+ * Set (or reset) the name of a node.
+ */
+void
+xmlNodeSetName(xmlNodePtr cur, const xmlChar *name) {
+ if (cur == NULL) return;
+ if (name == NULL) return;
+ switch(cur->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_NAMESPACE_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ return;
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ case XML_PI_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_DTD_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ break;
+ }
+ if (cur->name != NULL) xmlFree((xmlChar *) cur->name);
+ cur->name = xmlStrdup(name);
+}
+#endif
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+/**
+ * xmlNodeSetBase:
+ * @cur: the node being changed
+ * @uri: the new base URI
+ *
+ * Set (or reset) the base URI of a node, i.e. the value of the
+ * xml:base attribute.
+ */
+void
+xmlNodeSetBase(xmlNodePtr cur, const xmlChar* uri) {
+ xmlNsPtr ns;
+
+ if (cur == NULL) return;
+ switch(cur->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_PI_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_NAMESPACE_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ return;
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ break;
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE: {
+ xmlDocPtr doc = (xmlDocPtr) cur;
+
+ if (doc->URL != NULL)
+ xmlFree((xmlChar *) doc->URL);
+ if (uri == NULL)
+ doc->URL = NULL;
+ else
+ doc->URL = xmlStrdup(uri);
+ return;
+ }
+ }
+
+ ns = xmlSearchNsByHref(cur->doc, cur, XML_XML_NAMESPACE);
+ if (ns == NULL)
+ return;
+ xmlSetNsProp(cur, ns, BAD_CAST "base", uri);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlNodeGetBase:
+ * @doc: the document the node pertains to
+ * @cur: the node being checked
+ *
+ * Searches for the BASE URL. The code should work on both XML
+ * and HTML document even if base mechanisms are completely different.
+ * It returns the base as defined in RFC 2396 sections
+ * 5.1.1. Base URI within Document Content
+ * and
+ * 5.1.2. Base URI from the Encapsulating Entity
+ * However it does not return the document base (5.1.3), use
+ * xmlDocumentGetBase() for this
+ *
+ * Returns a pointer to the base URL, or NULL if not found
+ * It's up to the caller to free the memory with xmlFree().
+ */
+xmlChar *
+xmlNodeGetBase(xmlDocPtr doc, xmlNodePtr cur) {
+ xmlChar *oldbase = NULL;
+ xmlChar *base, *newbase;
+
+ if ((cur == NULL) && (doc == NULL))
+ return(NULL);
+ if (doc == NULL) doc = cur->doc;
+ if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
+ cur = doc->children;
+ while ((cur != NULL) && (cur->name != NULL)) {
+ if (cur->type != XML_ELEMENT_NODE) {
+ cur = cur->next;
+ continue;
+ }
+ if (!xmlStrcasecmp(cur->name, BAD_CAST "html")) {
+ cur = cur->children;
+ continue;
+ }
+ if (!xmlStrcasecmp(cur->name, BAD_CAST "head")) {
+ cur = cur->children;
+ continue;
+ }
+ if (!xmlStrcasecmp(cur->name, BAD_CAST "base")) {
+ return(xmlGetProp(cur, BAD_CAST "href"));
+ }
+ cur = cur->next;
+ }
+ return(NULL);
+ }
+ while (cur != NULL) {
+ if (cur->type == XML_ENTITY_DECL) {
+ xmlEntityPtr ent = (xmlEntityPtr) cur;
+ return(xmlStrdup(ent->URI));
+ }
+ if (cur->type == XML_ELEMENT_NODE) {
+ base = xmlGetNsProp(cur, BAD_CAST "base", XML_XML_NAMESPACE);
+ if (base != NULL) {
+ if (oldbase != NULL) {
+ newbase = xmlBuildURI(oldbase, base);
+ if (newbase != NULL) {
+ xmlFree(oldbase);
+ xmlFree(base);
+ oldbase = newbase;
+ } else {
+ xmlFree(oldbase);
+ xmlFree(base);
+ return(NULL);
+ }
+ } else {
+ oldbase = base;
+ }
+ if ((!xmlStrncmp(oldbase, BAD_CAST "http://", 7)) ||
+ (!xmlStrncmp(oldbase, BAD_CAST "ftp://", 6)) ||
+ (!xmlStrncmp(oldbase, BAD_CAST "urn:", 4)))
+ return(oldbase);
+ }
+ }
+ cur = cur->parent;
+ }
+ if ((doc != NULL) && (doc->URL != NULL)) {
+ if (oldbase == NULL)
+ return(xmlStrdup(doc->URL));
+ newbase = xmlBuildURI(oldbase, doc->URL);
+ xmlFree(oldbase);
+ return(newbase);
+ }
+ return(oldbase);
+}
+
+/**
+ * xmlNodeBufGetContent:
+ * @buffer: a buffer
+ * @cur: the node being read
+ *
+ * Read the value of a node @cur, this can be either the text carried
+ * directly by this node if it's a TEXT node or the aggregate string
+ * of the values carried by this node child's (TEXT and ENTITY_REF).
+ * Entity references are substituted.
+ * Fills up the buffer @buffer with this value
+ *
+ * Returns 0 in case of success and -1 in case of error.
+ */
+int
+xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur)
+{
+ if ((cur == NULL) || (buffer == NULL)) return(-1);
+ switch (cur->type) {
+ case XML_CDATA_SECTION_NODE:
+ case XML_TEXT_NODE:
+ xmlBufferCat(buffer, cur->content);
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_ELEMENT_NODE:{
+ xmlNodePtr tmp = cur;
+
+ while (tmp != NULL) {
+ switch (tmp->type) {
+ case XML_CDATA_SECTION_NODE:
+ case XML_TEXT_NODE:
+ if (tmp->content != NULL)
+ xmlBufferCat(buffer, tmp->content);
+ break;
+ case XML_ENTITY_REF_NODE:
+ xmlNodeBufGetContent(buffer, tmp->children);
+ break;
+ default:
+ break;
+ }
+ /*
+ * Skip to next node
+ */
+ if (tmp->children != NULL) {
+ if (tmp->children->type != XML_ENTITY_DECL) {
+ tmp = tmp->children;
+ continue;
+ }
+ }
+ if (tmp == cur)
+ break;
+
+ if (tmp->next != NULL) {
+ tmp = tmp->next;
+ continue;
+ }
+
+ do {
+ tmp = tmp->parent;
+ if (tmp == NULL)
+ break;
+ if (tmp == cur) {
+ tmp = NULL;
+ break;
+ }
+ if (tmp->next != NULL) {
+ tmp = tmp->next;
+ break;
+ }
+ } while (tmp != NULL);
+ }
+ break;
+ }
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+ xmlNodePtr tmp = attr->children;
+
+ while (tmp != NULL) {
+ if (tmp->type == XML_TEXT_NODE)
+ xmlBufferCat(buffer, tmp->content);
+ else
+ xmlNodeBufGetContent(buffer, tmp);
+ tmp = tmp->next;
+ }
+ break;
+ }
+ case XML_COMMENT_NODE:
+ case XML_PI_NODE:
+ xmlBufferCat(buffer, cur->content);
+ break;
+ case XML_ENTITY_REF_NODE:{
+ xmlEntityPtr ent;
+ xmlNodePtr tmp;
+
+ /* lookup entity declaration */
+ ent = xmlGetDocEntity(cur->doc, cur->name);
+ if (ent == NULL)
+ return(-1);
+
+ /* an entity content can be any "well balanced chunk",
+ * i.e. the result of the content [43] production:
+ * http://www.w3.org/TR/REC-xml#NT-content
+ * -> we iterate through child nodes and recursive call
+ * xmlNodeGetContent() which handles all possible node types */
+ tmp = ent->children;
+ while (tmp) {
+ xmlNodeBufGetContent(buffer, tmp);
+ tmp = tmp->next;
+ }
+ break;
+ }
+ case XML_ENTITY_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ break;
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE:
+ cur = cur->children;
+ while (cur!= NULL) {
+ if ((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_TEXT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE)) {
+ xmlNodeBufGetContent(buffer, cur);
+ }
+ cur = cur->next;
+ }
+ break;
+ case XML_NAMESPACE_DECL:
+ xmlBufferCat(buffer, ((xmlNsPtr) cur)->href);
+ break;
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ break;
+ }
+ return(0);
+}
+/**
+ * xmlNodeGetContent:
+ * @cur: the node being read
+ *
+ * Read the value of a node, this can be either the text carried
+ * directly by this node if it's a TEXT node or the aggregate string
+ * of the values carried by this node child's (TEXT and ENTITY_REF).
+ * Entity references are substituted.
+ * Returns a new #xmlChar * or NULL if no content is available.
+ * It's up to the caller to free the memory with xmlFree().
+ */
+xmlChar *
+xmlNodeGetContent(xmlNodePtr cur)
+{
+ if (cur == NULL)
+ return (NULL);
+ switch (cur->type) {
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_ELEMENT_NODE:{
+ xmlBufferPtr buffer;
+ xmlChar *ret;
+
+ buffer = xmlBufferCreateSize(64);
+ if (buffer == NULL)
+ return (NULL);
+ xmlNodeBufGetContent(buffer, cur);
+ ret = buffer->content;
+ buffer->content = NULL;
+ xmlBufferFree(buffer);
+ return (ret);
+ }
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ if (attr->parent != NULL)
+ return (xmlNodeListGetString
+ (attr->parent->doc, attr->children, 1));
+ else
+ return (xmlNodeListGetString(NULL, attr->children, 1));
+ break;
+ }
+ case XML_COMMENT_NODE:
+ case XML_PI_NODE:
+ if (cur->content != NULL)
+ return (xmlStrdup(cur->content));
+ return (NULL);
+ case XML_ENTITY_REF_NODE:{
+ xmlEntityPtr ent;
+ xmlBufferPtr buffer;
+ xmlChar *ret;
+
+ /* lookup entity declaration */
+ ent = xmlGetDocEntity(cur->doc, cur->name);
+ if (ent == NULL)
+ return (NULL);
+
+ buffer = xmlBufferCreate();
+ if (buffer == NULL)
+ return (NULL);
+
+ xmlNodeBufGetContent(buffer, cur);
+
+ ret = buffer->content;
+ buffer->content = NULL;
+ xmlBufferFree(buffer);
+ return (ret);
+ }
+ case XML_ENTITY_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ return (NULL);
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE: {
+ xmlBufferPtr buffer;
+ xmlChar *ret;
+
+ buffer = xmlBufferCreate();
+ if (buffer == NULL)
+ return (NULL);
+
+ xmlNodeBufGetContent(buffer, (xmlNodePtr) cur);
+
+ ret = buffer->content;
+ buffer->content = NULL;
+ xmlBufferFree(buffer);
+ return (ret);
+ }
+ case XML_NAMESPACE_DECL: {
+ xmlChar *tmp;
+
+ tmp = xmlStrdup(((xmlNsPtr) cur)->href);
+ return (tmp);
+ }
+ case XML_ELEMENT_DECL:
+ /* TODO !!! */
+ return (NULL);
+ case XML_ATTRIBUTE_DECL:
+ /* TODO !!! */
+ return (NULL);
+ case XML_ENTITY_DECL:
+ /* TODO !!! */
+ return (NULL);
+ case XML_CDATA_SECTION_NODE:
+ case XML_TEXT_NODE:
+ if (cur->content != NULL)
+ return (xmlStrdup(cur->content));
+ return (NULL);
+ }
+ return (NULL);
+}
+
+/**
+ * xmlNodeSetContent:
+ * @cur: the node being modified
+ * @content: the new value of the content
+ *
+ * Replace the content of a node.
+ */
+void
+xmlNodeSetContent(xmlNodePtr cur, const xmlChar *content) {
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNodeSetContent : node == NULL\n");
+#endif
+ return;
+ }
+ switch (cur->type) {
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ if (cur->children != NULL) xmlFreeNodeList(cur->children);
+ cur->children = xmlStringGetNodeList(cur->doc, content);
+ UPDATE_LAST_CHILD_AND_PARENT(cur)
+ break;
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ if (cur->content != NULL) {
+ 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->last = cur->children = NULL;
+ if (content != NULL) {
+ cur->content = xmlStrdup(content);
+ } else
+ cur->content = NULL;
+ break;
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ break;
+ case XML_NOTATION_NODE:
+ break;
+ case XML_DTD_NODE:
+ break;
+ case XML_NAMESPACE_DECL:
+ break;
+ case XML_ELEMENT_DECL:
+ /* TODO !!! */
+ break;
+ case XML_ATTRIBUTE_DECL:
+ /* TODO !!! */
+ break;
+ case XML_ENTITY_DECL:
+ /* TODO !!! */
+ break;
+ }
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlNodeSetContentLen:
+ * @cur: the node being modified
+ * @content: the new value of the content
+ * @len: the size of @content
+ *
+ * Replace the content of a node.
+ */
+void
+xmlNodeSetContentLen(xmlNodePtr cur, const xmlChar *content, int len) {
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNodeSetContentLen : node == NULL\n");
+#endif
+ return;
+ }
+ switch (cur->type) {
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ if (cur->children != NULL) xmlFreeNodeList(cur->children);
+ cur->children = xmlStringLenGetNodeList(cur->doc, content, len);
+ UPDATE_LAST_CHILD_AND_PARENT(cur)
+ break;
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_NOTATION_NODE:
+ if (cur->content != NULL) {
+ xmlFree(cur->content);
+ }
+ if (cur->children != NULL) xmlFreeNodeList(cur->children);
+ cur->children = cur->last = NULL;
+ if (content != NULL) {
+ cur->content = xmlStrndup(content, len);
+ } else
+ cur->content = NULL;
+ break;
+ case XML_DOCUMENT_NODE:
+ case XML_DTD_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_NAMESPACE_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ break;
+ case XML_ELEMENT_DECL:
+ /* TODO !!! */
+ break;
+ case XML_ATTRIBUTE_DECL:
+ /* TODO !!! */
+ break;
+ case XML_ENTITY_DECL:
+ /* TODO !!! */
+ break;
+ }
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlNodeAddContentLen:
+ * @cur: the node being modified
+ * @content: extra content
+ * @len: the size of @content
+ *
+ * Append the extra substring to the node content.
+ */
+void
+xmlNodeAddContentLen(xmlNodePtr cur, const xmlChar *content, int len) {
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNodeAddContentLen : node == NULL\n");
+#endif
+ return;
+ }
+ if (len <= 0) return;
+ switch (cur->type) {
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_ELEMENT_NODE: {
+ xmlNodePtr last, newNode, tmp;
+
+ last = cur->last;
+ newNode = xmlNewTextLen(content, len);
+ if (newNode != NULL) {
+ tmp = xmlAddChild(cur, newNode);
+ if (tmp != newNode)
+ return;
+ if ((last != NULL) && (last->next == newNode)) {
+ xmlTextMerge(last, newNode);
+ }
+ }
+ break;
+ }
+ case XML_ATTRIBUTE_NODE:
+ break;
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ 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);
+ break;
+ }
+ cur->content = xmlStrncat(cur->content, content, len);
+ }
+ case XML_DOCUMENT_NODE:
+ case XML_DTD_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_NAMESPACE_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ break;
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ break;
+ }
+}
+
+/**
+ * xmlNodeAddContent:
+ * @cur: the node being modified
+ * @content: extra content
+ *
+ * Append the extra substring to the node content.
+ */
+void
+xmlNodeAddContent(xmlNodePtr cur, const xmlChar *content) {
+ int len;
+
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNodeAddContent : node == NULL\n");
+#endif
+ return;
+ }
+ if (content == NULL) return;
+ len = xmlStrlen(content);
+ xmlNodeAddContentLen(cur, content, len);
+}
+
+/**
+ * xmlTextMerge:
+ * @first: the first text node
+ * @second: the second text node being merged
+ *
+ * Merge two text nodes into one
+ * Returns the first text node augmented
+ */
+xmlNodePtr
+xmlTextMerge(xmlNodePtr first, xmlNodePtr second) {
+ if (first == NULL) return(second);
+ if (second == NULL) return(first);
+ if (first->type != XML_TEXT_NODE) return(first);
+ if (second->type != XML_TEXT_NODE) return(first);
+ if (second->name != first->name)
+ return(first);
+ xmlNodeAddContent(first, second->content);
+ xmlUnlinkNode(second);
+ xmlFreeNode(second);
+ return(first);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED)
+/**
+ * xmlGetNsList:
+ * @doc: the document
+ * @node: the current node
+ *
+ * Search all the namespace applying to a given element.
+ * Returns an NULL terminated array of all the #xmlNsPtr found
+ * that need to be freed by the caller or NULL if no
+ * namespace if defined
+ */
+xmlNsPtr *
+xmlGetNsList(xmlDocPtr doc ATTRIBUTE_UNUSED, xmlNodePtr node)
+{
+ xmlNsPtr cur;
+ xmlNsPtr *ret = NULL;
+ int nbns = 0;
+ int maxns = 10;
+ int i;
+
+ while (node != NULL) {
+ if (node->type == XML_ELEMENT_NODE) {
+ cur = node->nsDef;
+ while (cur != NULL) {
+ if (ret == NULL) {
+ ret =
+ (xmlNsPtr *) xmlMalloc((maxns + 1) *
+ sizeof(xmlNsPtr));
+ if (ret == NULL) {
+ xmlTreeErrMemory("getting namespace list");
+ return (NULL);
+ }
+ ret[nbns] = NULL;
+ }
+ for (i = 0; i < nbns; i++) {
+ if ((cur->prefix == ret[i]->prefix) ||
+ (xmlStrEqual(cur->prefix, ret[i]->prefix)))
+ break;
+ }
+ if (i >= nbns) {
+ if (nbns >= maxns) {
+ maxns *= 2;
+ ret = (xmlNsPtr *) xmlRealloc(ret,
+ (maxns +
+ 1) *
+ sizeof(xmlNsPtr));
+ if (ret == NULL) {
+ xmlTreeErrMemory("getting namespace list");
+ return (NULL);
+ }
+ }
+ ret[nbns++] = cur;
+ ret[nbns] = NULL;
+ }
+
+ cur = cur->next;
+ }
+ }
+ node = node->parent;
+ }
+ return (ret);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlSearchNs:
+ * @doc: the document
+ * @node: the current node
+ * @nameSpace: the namespace prefix
+ *
+ * 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't allow to cross entities boundaries. If you don't declare
+ * the namespace within those you will be in troubles !!! A warning
+ * is generated to cover this case.
+ *
+ * Returns the namespace pointer or NULL.
+ */
+xmlNsPtr
+xmlSearchNs(xmlDocPtr doc, xmlNodePtr node, const xmlChar *nameSpace) {
+
+ xmlNsPtr cur;
+ xmlNodePtr orig = node;
+
+ if (node == NULL) return(NULL);
+ if ((nameSpace != NULL) &&
+ (xmlStrEqual(nameSpace, (const xmlChar *)"xml"))) {
+ if ((doc == NULL) && (node->type == XML_ELEMENT_NODE)) {
+ /*
+ * The XML-1.0 namespace is normally held on the root
+ * element. In this case exceptionally create it on the
+ * node element.
+ */
+ cur = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
+ if (cur == NULL) {
+ xmlTreeErrMemory("searching namespace");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNs));
+ cur->type = XML_LOCAL_NAMESPACE;
+ cur->href = xmlStrdup(XML_XML_NAMESPACE);
+ cur->prefix = xmlStrdup((const xmlChar *)"xml");
+ cur->next = node->nsDef;
+ node->nsDef = cur;
+ return(cur);
+ }
+ if (doc->oldNs == NULL) {
+ /*
+ * Allocate a new Namespace and fill the fields.
+ */
+ doc->oldNs = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
+ if (doc->oldNs == NULL) {
+ xmlTreeErrMemory("searching namespace");
+ return(NULL);
+ }
+ memset(doc->oldNs, 0, sizeof(xmlNs));
+ doc->oldNs->type = XML_LOCAL_NAMESPACE;
+
+ doc->oldNs->href = xmlStrdup(XML_XML_NAMESPACE);
+ doc->oldNs->prefix = xmlStrdup((const xmlChar *)"xml");
+ }
+ return(doc->oldNs);
+ }
+ while (node != NULL) {
+ if ((node->type == XML_ENTITY_REF_NODE) ||
+ (node->type == XML_ENTITY_NODE) ||
+ (node->type == XML_ENTITY_DECL))
+ return(NULL);
+ if (node->type == XML_ELEMENT_NODE) {
+ cur = node->nsDef;
+ while (cur != NULL) {
+ if ((cur->prefix == NULL) && (nameSpace == NULL) &&
+ (cur->href != NULL))
+ return(cur);
+ if ((cur->prefix != NULL) && (nameSpace != NULL) &&
+ (cur->href != NULL) &&
+ (xmlStrEqual(cur->prefix, nameSpace)))
+ return(cur);
+ cur = cur->next;
+ }
+ if (orig != node) {
+ cur = node->ns;
+ if (cur != NULL) {
+ if ((cur->prefix == NULL) && (nameSpace == NULL) &&
+ (cur->href != NULL))
+ return(cur);
+ if ((cur->prefix != NULL) && (nameSpace != NULL) &&
+ (cur->href != NULL) &&
+ (xmlStrEqual(cur->prefix, nameSpace)))
+ return(cur);
+ }
+ }
+ }
+ node = node->parent;
+ }
+ return(NULL);
+}
+
+/**
+ * xmlNsInScope:
+ * @doc: the document
+ * @node: the current node
+ * @ancestor: the ancestor carrying the namespace
+ * @prefix: the namespace prefix
+ *
+ * Verify that the given namespace held on @ancestor is still in scope
+ * on node.
+ *
+ * Returns 1 if true, 0 if false and -1 in case of error.
+ */
+static int
+xmlNsInScope(xmlDocPtr doc ATTRIBUTE_UNUSED, xmlNodePtr node,
+ xmlNodePtr ancestor, const xmlChar * prefix)
+{
+ xmlNsPtr tst;
+
+ while ((node != NULL) && (node != ancestor)) {
+ if ((node->type == XML_ENTITY_REF_NODE) ||
+ (node->type == XML_ENTITY_NODE) ||
+ (node->type == XML_ENTITY_DECL))
+ return (-1);
+ if (node->type == XML_ELEMENT_NODE) {
+ tst = node->nsDef;
+ while (tst != NULL) {
+ if ((tst->prefix == NULL)
+ && (prefix == NULL))
+ return (0);
+ if ((tst->prefix != NULL)
+ && (prefix != NULL)
+ && (xmlStrEqual(tst->prefix, prefix)))
+ return (0);
+ tst = tst->next;
+ }
+ }
+ node = node->parent;
+ }
+ if (node != ancestor)
+ return (-1);
+ return (1);
+}
+
+/**
+ * xmlSearchNsByHref:
+ * @doc: the document
+ * @node: the current node
+ * @href: the namespace value
+ *
+ * Search a Ns aliasing a given URI. Recurse on the parents until it finds
+ * the defined namespace or return NULL otherwise.
+ * Returns the namespace pointer or NULL.
+ */
+xmlNsPtr
+xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node, const xmlChar * href)
+{
+ xmlNsPtr cur;
+ xmlNodePtr orig = node;
+
+ if ((node == NULL) || (href == NULL))
+ return (NULL);
+ if (xmlStrEqual(href, XML_XML_NAMESPACE)) {
+ /*
+ * Only the document can hold the XML spec namespace.
+ */
+ if ((doc == NULL) && (node->type == XML_ELEMENT_NODE)) {
+ /*
+ * The XML-1.0 namespace is normally held on the root
+ * element. In this case exceptionally create it on the
+ * node element.
+ */
+ cur = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
+ if (cur == NULL) {
+ xmlTreeErrMemory("searching namespace");
+ return (NULL);
+ }
+ memset(cur, 0, sizeof(xmlNs));
+ cur->type = XML_LOCAL_NAMESPACE;
+ cur->href = xmlStrdup(XML_XML_NAMESPACE);
+ cur->prefix = xmlStrdup((const xmlChar *) "xml");
+ cur->next = node->nsDef;
+ node->nsDef = cur;
+ return (cur);
+ }
+ if (doc->oldNs == NULL) {
+ /*
+ * Allocate a new Namespace and fill the fields.
+ */
+ doc->oldNs = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
+ if (doc->oldNs == NULL) {
+ xmlTreeErrMemory("searching namespace");
+ return (NULL);
+ }
+ memset(doc->oldNs, 0, sizeof(xmlNs));
+ doc->oldNs->type = XML_LOCAL_NAMESPACE;
+
+ doc->oldNs->href = xmlStrdup(XML_XML_NAMESPACE);
+ doc->oldNs->prefix = xmlStrdup((const xmlChar *) "xml");
+ }
+ return (doc->oldNs);
+ }
+ while (node != NULL) {
+ if ((node->type == XML_ENTITY_REF_NODE) ||
+ (node->type == XML_ENTITY_NODE) ||
+ (node->type == XML_ENTITY_DECL))
+ return (NULL);
+ if (node->type == XML_ELEMENT_NODE) {
+ cur = node->nsDef;
+ while (cur != NULL) {
+ if ((cur->href != NULL) && (href != NULL) &&
+ (xmlStrEqual(cur->href, href))) {
+ if (xmlNsInScope(doc, orig, node, cur->href) == 1)
+ return (cur);
+ }
+ cur = cur->next;
+ }
+ if (orig != node) {
+ cur = node->ns;
+ if (cur != NULL) {
+ if ((cur->href != NULL) && (href != NULL) &&
+ (xmlStrEqual(cur->href, href))) {
+ if (xmlNsInScope(doc, orig, node, cur->href) == 1)
+ return (cur);
+ }
+ }
+ }
+ }
+ node = node->parent;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlNewReconciliedNs:
+ * @doc: the document
+ * @tree: a node expected to hold the new namespace
+ * @ns: the original namespace
+ *
+ * This function tries to locate a namespace definition in a tree
+ * ancestors, or create a new namespace definition node similar to
+ * @ns trying to reuse the same prefix. However if the given prefix is
+ * null (default namespace) or reused within the subtree defined by
+ * @tree or on one of its ancestors then a new prefix is generated.
+ * Returns the (new) namespace definition or NULL in case of error
+ */
+xmlNsPtr
+xmlNewReconciliedNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns) {
+ xmlNsPtr def;
+ xmlChar prefix[50];
+ int counter = 1;
+
+ if (tree == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewReconciliedNs : tree == NULL\n");
+#endif
+ return(NULL);
+ }
+ if (ns == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewReconciliedNs : ns == NULL\n");
+#endif
+ return(NULL);
+ }
+ /*
+ * Search an existing namespace definition inherited.
+ */
+ def = xmlSearchNsByHref(doc, tree, ns->href);
+ if (def != NULL)
+ return(def);
+
+ /*
+ * Find a close prefix which is not already in use.
+ * Let's strip namespace prefixes longer than 20 chars !
+ */
+ if (ns->prefix == NULL)
+ snprintf((char *) prefix, sizeof(prefix), "default");
+ else
+ snprintf((char *) prefix, sizeof(prefix), "%.20s", ns->prefix);
+
+ def = xmlSearchNs(doc, tree, prefix);
+ while (def != NULL) {
+ if (counter > 1000) return(NULL);
+ if (ns->prefix == NULL)
+ snprintf((char *) prefix, sizeof(prefix), "default%d", counter++);
+ else
+ snprintf((char *) prefix, sizeof(prefix), "%.20s%d", ns->prefix, counter++);
+ def = xmlSearchNs(doc, tree, prefix);
+ }
+
+ /*
+ * OK, now we are ready to create a new one.
+ */
+ def = xmlNewNs(tree, ns->href, prefix);
+ return(def);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlReconciliateNs:
+ * @doc: the document
+ * @tree: a node defining the subtree to reconciliate
+ *
+ * This function checks that all the namespaces declared within the given
+ * tree are properly declared. This is needed for example after Copy or Cut
+ * and then paste operations. The subtree may still hold pointers to
+ * namespace declarations outside the subtree or invalid/masked. As much
+ * as possible the function try to reuse the existing namespaces found in
+ * the new environment. If not possible the new namespaces are redeclared
+ * on @tree at the top of the given subtree.
+ * Returns the number of namespace declarations created or -1 in case of error.
+ */
+int
+xmlReconciliateNs(xmlDocPtr doc, xmlNodePtr tree) {
+ xmlNsPtr *oldNs = NULL;
+ xmlNsPtr *newNs = NULL;
+ int sizeCache = 0;
+ int nbCache = 0;
+
+ xmlNsPtr n;
+ xmlNodePtr node = tree;
+ xmlAttrPtr attr;
+ int ret = 0, i;
+
+ while (node != NULL) {
+ /*
+ * Reconciliate the node namespace
+ */
+ if (node->ns != NULL) {
+ /*
+ * initialize the cache if needed
+ */
+ if (sizeCache == 0) {
+ sizeCache = 10;
+ oldNs = (xmlNsPtr *) xmlMalloc(sizeCache *
+ sizeof(xmlNsPtr));
+ if (oldNs == NULL) {
+ xmlTreeErrMemory("fixing namespaces");
+ return(-1);
+ }
+ newNs = (xmlNsPtr *) xmlMalloc(sizeCache *
+ sizeof(xmlNsPtr));
+ if (newNs == NULL) {
+ xmlTreeErrMemory("fixing namespaces");
+ xmlFree(oldNs);
+ return(-1);
+ }
+ }
+ for (i = 0;i < nbCache;i++) {
+ if (oldNs[i] == node->ns) {
+ node->ns = newNs[i];
+ break;
+ }
+ }
+ if (i == nbCache) {
+ /*
+ * OK we need to recreate a new namespace definition
+ */
+ n = xmlNewReconciliedNs(doc, tree, node->ns);
+ if (n != NULL) { /* :-( what if else ??? */
+ /*
+ * check if we need to grow the cache buffers.
+ */
+ if (sizeCache <= nbCache) {
+ sizeCache *= 2;
+ oldNs = (xmlNsPtr *) xmlRealloc(oldNs, sizeCache *
+ sizeof(xmlNsPtr));
+ if (oldNs == NULL) {
+ xmlTreeErrMemory("fixing namespaces");
+ xmlFree(newNs);
+ return(-1);
+ }
+ newNs = (xmlNsPtr *) xmlRealloc(newNs, sizeCache *
+ sizeof(xmlNsPtr));
+ if (newNs == NULL) {
+ xmlTreeErrMemory("fixing namespaces");
+ xmlFree(oldNs);
+ return(-1);
+ }
+ }
+ newNs[nbCache] = n;
+ oldNs[nbCache++] = node->ns;
+ node->ns = n;
+ }
+ }
+ }
+ /*
+ * now check for namespace hold by attributes on the node.
+ */
+ attr = node->properties;
+ while (attr != NULL) {
+ if (attr->ns != NULL) {
+ /*
+ * initialize the cache if needed
+ */
+ if (sizeCache == 0) {
+ sizeCache = 10;
+ oldNs = (xmlNsPtr *) xmlMalloc(sizeCache *
+ sizeof(xmlNsPtr));
+ if (oldNs == NULL) {
+ xmlTreeErrMemory("fixing namespaces");
+ return(-1);
+ }
+ newNs = (xmlNsPtr *) xmlMalloc(sizeCache *
+ sizeof(xmlNsPtr));
+ if (newNs == NULL) {
+ xmlTreeErrMemory("fixing namespaces");
+ xmlFree(oldNs);
+ return(-1);
+ }
+ }
+ for (i = 0;i < nbCache;i++) {
+ if (oldNs[i] == attr->ns) {
+ attr->ns = newNs[i];
+ break;
+ }
+ }
+ if (i == nbCache) {
+ /*
+ * OK we need to recreate a new namespace definition
+ */
+ n = xmlNewReconciliedNs(doc, tree, attr->ns);
+ if (n != NULL) { /* :-( what if else ??? */
+ /*
+ * check if we need to grow the cache buffers.
+ */
+ if (sizeCache <= nbCache) {
+ sizeCache *= 2;
+ oldNs = (xmlNsPtr *) xmlRealloc(oldNs, sizeCache *
+ sizeof(xmlNsPtr));
+ if (oldNs == NULL) {
+ xmlTreeErrMemory("fixing namespaces");
+ xmlFree(newNs);
+ return(-1);
+ }
+ newNs = (xmlNsPtr *) xmlRealloc(newNs, sizeCache *
+ sizeof(xmlNsPtr));
+ if (newNs == NULL) {
+ xmlTreeErrMemory("fixing namespaces");
+ xmlFree(oldNs);
+ return(-1);
+ }
+ }
+ newNs[nbCache] = n;
+ oldNs[nbCache++] = attr->ns;
+ attr->ns = n;
+ }
+ }
+ }
+ attr = attr->next;
+ }
+
+ /*
+ * Browse the full subtree, deep first
+ */
+ if (node->children != NULL) {
+ /* deep first */
+ node = node->children;
+ } else if ((node != tree) && (node->next != NULL)) {
+ /* then siblings */
+ node = node->next;
+ } else if (node != tree) {
+ /* go up to parents->next if needed */
+ while (node != tree) {
+ if (node->parent != NULL)
+ node = node->parent;
+ if ((node != tree) && (node->next != NULL)) {
+ node = node->next;
+ break;
+ }
+ if (node->parent == NULL) {
+ node = NULL;
+ break;
+ }
+ }
+ /* exit condition */
+ if (node == tree)
+ node = NULL;
+ } else
+ break;
+ }
+ if (oldNs != NULL)
+ xmlFree(oldNs);
+ if (newNs != NULL)
+ xmlFree(newNs);
+ return(ret);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlHasProp:
+ * @node: the node
+ * @name: the attribute name
+ *
+ * Search an attribute associated to a node
+ * This function also looks in DTD attribute declaration for #FIXED or
+ * default declaration values unless DTD use has been turned off.
+ *
+ * Returns the attribute or the attribute declaration or NULL if
+ * neither was found.
+ */
+xmlAttrPtr
+xmlHasProp(xmlNodePtr node, const xmlChar *name) {
+ xmlAttrPtr prop;
+ xmlDocPtr doc;
+
+ if ((node == NULL) || (name == NULL)) return(NULL);
+ /*
+ * Check on the properties attached to the node
+ */
+ prop = node->properties;
+ while (prop != NULL) {
+ if (xmlStrEqual(prop->name, name)) {
+ return(prop);
+ }
+ prop = prop->next;
+ }
+ if (!xmlCheckDTD) return(NULL);
+
+ /*
+ * Check if there is a default declaration in the internal
+ * or external subsets
+ */
+ doc = node->doc;
+ if (doc != NULL) {
+ xmlAttributePtr attrDecl;
+ if (doc->intSubset != NULL) {
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset, node->name, name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, node->name, name);
+ if ((attrDecl != NULL) && (attrDecl->defaultValue != NULL))
+ /* return attribute declaration only if a default value is given
+ (that includes #FIXED declarations) */
+ return((xmlAttrPtr) attrDecl);
+ }
+ }
+ return(NULL);
+}
+
+/**
+ * xmlHasNsProp:
+ * @node: the node
+ * @name: the attribute name
+ * @nameSpace: the URI of the namespace
+ *
+ * Search for an attribute associated to a node
+ * This attribute has to be anchored in the namespace specified.
+ * This does the entity substitution.
+ * This function looks in DTD attribute declaration for #FIXED or
+ * default declaration values unless DTD use has been turned off.
+ *
+ * Returns the attribute or the attribute declaration or NULL
+ * if neither was found.
+ */
+xmlAttrPtr
+xmlHasNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) {
+ xmlAttrPtr prop;
+#ifdef LIBXML_TREE_ENABLED
+ xmlDocPtr doc;
+#endif /* LIBXML_TREE_ENABLED */
+
+ if (node == NULL)
+ return(NULL);
+
+ prop = node->properties;
+ if (nameSpace == NULL)
+ return(xmlHasProp(node, name));
+ while (prop != NULL) {
+ /*
+ * One need to have
+ * - same attribute names
+ * - and the attribute carrying that namespace
+ */
+ if ((xmlStrEqual(prop->name, name)) &&
+ ((prop->ns != NULL) && (xmlStrEqual(prop->ns->href, nameSpace)))) {
+ return(prop);
+ }
+ prop = prop->next;
+ }
+ if (!xmlCheckDTD) return(NULL);
+
+#ifdef LIBXML_TREE_ENABLED
+ /*
+ * Check if there is a default declaration in the internal
+ * or external subsets
+ */
+ doc = node->doc;
+ if (doc != NULL) {
+ if (doc->intSubset != NULL) {
+ xmlAttributePtr attrDecl = NULL;
+ xmlNsPtr *nsList, *cur;
+ xmlChar *ename;
+
+ nsList = xmlGetNsList(node->doc, node);
+ if (nsList == NULL)
+ return(NULL);
+ if ((node->ns != NULL) && (node->ns->prefix != NULL)) {
+ ename = xmlStrdup(node->ns->prefix);
+ ename = xmlStrcat(ename, BAD_CAST ":");
+ ename = xmlStrcat(ename, node->name);
+ } else {
+ ename = xmlStrdup(node->name);
+ }
+ if (ename == NULL) {
+ xmlFree(nsList);
+ return(NULL);
+ }
+
+ cur = nsList;
+ while (*cur != NULL) {
+ if (xmlStrEqual((*cur)->href, nameSpace)) {
+ attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, ename,
+ name, (*cur)->prefix);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, ename,
+ name, (*cur)->prefix);
+ }
+ cur++;
+ }
+ xmlFree(nsList);
+ xmlFree(ename);
+ return((xmlAttrPtr) attrDecl);
+ }
+ }
+#endif /* LIBXML_TREE_ENABLED */
+ return(NULL);
+}
+
+/**
+ * xmlGetProp:
+ * @node: the node
+ * @name: the attribute name
+ *
+ * Search and get the value of an attribute associated to a node
+ * This does the entity substitution.
+ * This function looks in DTD attribute declaration for #FIXED or
+ * default declaration values unless DTD use has been turned off.
+ * NOTE: this function acts independently of namespaces associated
+ * to the attribute. Use xmlGetNsProp() or xmlGetNoNsProp()
+ * for namespace aware processing.
+ *
+ * Returns the attribute value or NULL if not found.
+ * It's up to the caller to free the memory with xmlFree().
+ */
+xmlChar *
+xmlGetProp(xmlNodePtr node, const xmlChar *name) {
+ xmlAttrPtr prop;
+ xmlDocPtr doc;
+
+ if ((node == NULL) || (name == NULL)) return(NULL);
+ /*
+ * Check on the properties attached to the node
+ */
+ prop = node->properties;
+ while (prop != NULL) {
+ if (xmlStrEqual(prop->name, name)) {
+ xmlChar *ret;
+
+ ret = xmlNodeListGetString(node->doc, prop->children, 1);
+ if (ret == NULL) return(xmlStrdup((xmlChar *)""));
+ return(ret);
+ }
+ prop = prop->next;
+ }
+ if (!xmlCheckDTD) return(NULL);
+
+ /*
+ * Check if there is a default declaration in the internal
+ * or external subsets
+ */
+ doc = node->doc;
+ if (doc != NULL) {
+ xmlAttributePtr attrDecl;
+ if (doc->intSubset != NULL) {
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset, node->name, name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, node->name, name);
+ if ((attrDecl != NULL) && (attrDecl->defaultValue != NULL))
+ /* return attribute declaration only if a default value is given
+ (that includes #FIXED declarations) */
+ return(xmlStrdup(attrDecl->defaultValue));
+ }
+ }
+ return(NULL);
+}
+
+/**
+ * xmlGetNoNsProp:
+ * @node: the node
+ * @name: the attribute name
+ *
+ * Search and get the value of an attribute associated to a node
+ * This does the entity substitution.
+ * This function looks in DTD attribute declaration for #FIXED or
+ * default declaration values unless DTD use has been turned off.
+ * This function is similar to xmlGetProp except it will accept only
+ * an attribute in no namespace.
+ *
+ * Returns the attribute value or NULL if not found.
+ * It's up to the caller to free the memory with xmlFree().
+ */
+xmlChar *
+xmlGetNoNsProp(xmlNodePtr node, const xmlChar *name) {
+ xmlAttrPtr prop;
+ xmlDocPtr doc;
+
+ if ((node == NULL) || (name == NULL)) return(NULL);
+ /*
+ * Check on the properties attached to the node
+ */
+ prop = node->properties;
+ while (prop != NULL) {
+ if ((prop->ns == NULL) && (xmlStrEqual(prop->name, name))) {
+ xmlChar *ret;
+
+ ret = xmlNodeListGetString(node->doc, prop->children, 1);
+ if (ret == NULL) return(xmlStrdup((xmlChar *)""));
+ return(ret);
+ }
+ prop = prop->next;
+ }
+ if (!xmlCheckDTD) return(NULL);
+
+ /*
+ * Check if there is a default declaration in the internal
+ * or external subsets
+ */
+ doc = node->doc;
+ if (doc != NULL) {
+ xmlAttributePtr attrDecl;
+ if (doc->intSubset != NULL) {
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset, node->name, name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, node->name, name);
+ if ((attrDecl != NULL) && (attrDecl->defaultValue != NULL))
+ /* return attribute declaration only if a default value is given
+ (that includes #FIXED declarations) */
+ return(xmlStrdup(attrDecl->defaultValue));
+ }
+ }
+ return(NULL);
+}
+
+/**
+ * xmlGetNsProp:
+ * @node: the node
+ * @name: the attribute name
+ * @nameSpace: the URI of the namespace
+ *
+ * Search and get the value of an attribute associated to a node
+ * This attribute has to be anchored in the namespace specified.
+ * This does the entity substitution.
+ * This function looks in DTD attribute declaration for #FIXED or
+ * default declaration values unless DTD use has been turned off.
+ *
+ * Returns the attribute value or NULL if not found.
+ * It's up to the caller to free the memory with xmlFree().
+ */
+xmlChar *
+xmlGetNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) {
+ xmlAttrPtr prop;
+ xmlDocPtr doc;
+ xmlNsPtr ns;
+
+ if (node == NULL)
+ return(NULL);
+
+ prop = node->properties;
+ if (nameSpace == NULL)
+ return(xmlGetNoNsProp(node, name));
+ while (prop != NULL) {
+ /*
+ * One need to have
+ * - same attribute names
+ * - and the attribute carrying that namespace
+ */
+ if ((xmlStrEqual(prop->name, name)) &&
+ ((prop->ns != NULL) &&
+ (xmlStrEqual(prop->ns->href, nameSpace)))) {
+ xmlChar *ret;
+
+ ret = xmlNodeListGetString(node->doc, prop->children, 1);
+ if (ret == NULL) return(xmlStrdup((xmlChar *)""));
+ return(ret);
+ }
+ prop = prop->next;
+ }
+ if (!xmlCheckDTD) return(NULL);
+
+ /*
+ * Check if there is a default declaration in the internal
+ * or external subsets
+ */
+ doc = node->doc;
+ if (doc != NULL) {
+ if (doc->intSubset != NULL) {
+ xmlAttributePtr attrDecl;
+
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset, node->name, name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, node->name, name);
+
+ if ((attrDecl != NULL) && (attrDecl->prefix != NULL)) {
+ /*
+ * The DTD declaration only allows a prefix search
+ */
+ ns = xmlSearchNs(doc, node, attrDecl->prefix);
+ if ((ns != NULL) && (xmlStrEqual(ns->href, nameSpace)))
+ return(xmlStrdup(attrDecl->defaultValue));
+ }
+ }
+ }
+ return(NULL);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+/**
+ * xmlUnsetProp:
+ * @node: the node
+ * @name: the attribute name
+ *
+ * Remove an attribute carried by a node.
+ * Returns 0 if successful, -1 if not found
+ */
+int
+xmlUnsetProp(xmlNodePtr node, const xmlChar *name) {
+ xmlAttrPtr prop, prev = NULL;;
+
+ if ((node == NULL) || (name == NULL))
+ return(-1);
+ prop = node->properties;
+ while (prop != NULL) {
+ if ((xmlStrEqual(prop->name, name)) &&
+ (prop->ns == NULL)) {
+ if (prev == NULL)
+ node->properties = prop->next;
+ else
+ prev->next = prop->next;
+ xmlFreeProp(prop);
+ return(0);
+ }
+ prev = prop;
+ prop = prop->next;
+ }
+ return(-1);
+}
+
+/**
+ * xmlUnsetNsProp:
+ * @node: the node
+ * @ns: the namespace definition
+ * @name: the attribute name
+ *
+ * Remove an attribute carried by a node.
+ * Returns 0 if successful, -1 if not found
+ */
+int
+xmlUnsetNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name) {
+ xmlAttrPtr prop = node->properties, prev = NULL;;
+
+ if ((node == NULL) || (name == NULL))
+ return(-1);
+ if (ns == NULL)
+ return(xmlUnsetProp(node, name));
+ if (ns->href == NULL)
+ return(-1);
+ while (prop != NULL) {
+ if ((xmlStrEqual(prop->name, name)) &&
+ (prop->ns != NULL) && (xmlStrEqual(prop->ns->href, ns->href))) {
+ if (prev == NULL)
+ node->properties = prop->next;
+ else
+ prev->next = prop->next;
+ xmlFreeProp(prop);
+ return(0);
+ }
+ prev = prop;
+ prop = prop->next;
+ }
+ return(-1);
+}
+#endif
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+/**
+ * xmlSetProp:
+ * @node: the node
+ * @name: the attribute name
+ * @value: the attribute value
+ *
+ * Set (or reset) an attribute carried by a node.
+ * Returns the attribute pointer.
+ */
+xmlAttrPtr
+xmlSetProp(xmlNodePtr node, const xmlChar *name, const xmlChar *value) {
+ xmlAttrPtr prop;
+ xmlDocPtr doc;
+
+ if ((node == NULL) || (name == NULL) || (node->type != XML_ELEMENT_NODE))
+ return(NULL);
+ doc = node->doc;
+ prop = node->properties;
+ while (prop != NULL) {
+ if ((xmlStrEqual(prop->name, name)) &&
+ (prop->ns == NULL)){
+ xmlNodePtr oldprop = prop->children;
+
+ prop->children = NULL;
+ prop->last = NULL;
+ if (value != NULL) {
+ xmlChar *buffer;
+ xmlNodePtr tmp;
+
+ buffer = xmlEncodeEntitiesReentrant(node->doc, value);
+ prop->children = xmlStringGetNodeList(node->doc, buffer);
+ prop->last = NULL;
+ prop->doc = doc;
+ tmp = prop->children;
+ while (tmp != NULL) {
+ tmp->parent = (xmlNodePtr) prop;
+ tmp->doc = doc;
+ if (tmp->next == NULL)
+ prop->last = tmp;
+ tmp = tmp->next;
+ }
+ xmlFree(buffer);
+ }
+ if (oldprop != NULL)
+ xmlFreeNodeList(oldprop);
+ return(prop);
+ }
+ prop = prop->next;
+ }
+ prop = xmlNewProp(node, name, value);
+ return(prop);
+}
+
+/**
+ * xmlSetNsProp:
+ * @node: the node
+ * @ns: the namespace definition
+ * @name: the attribute name
+ * @value: the attribute value
+ *
+ * Set (or reset) an attribute carried by a node.
+ * The ns structure must be in scope, this is not checked.
+ *
+ * Returns the attribute pointer.
+ */
+xmlAttrPtr
+xmlSetNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name,
+ const xmlChar *value) {
+ xmlAttrPtr prop;
+
+ if ((node == NULL) || (name == NULL))
+ return(NULL);
+
+ if (ns == NULL)
+ return(xmlSetProp(node, name, value));
+ if (ns->href == NULL)
+ return(NULL);
+ prop = node->properties;
+
+ while (prop != NULL) {
+ /*
+ * One need to have
+ * - same attribute names
+ * - and the attribute carrying that namespace
+ */
+ if ((xmlStrEqual(prop->name, name)) &&
+ (prop->ns != NULL) && (xmlStrEqual(prop->ns->href, ns->href))) {
+ if (prop->children != NULL)
+ xmlFreeNodeList(prop->children);
+ prop->children = NULL;
+ prop->last = NULL;
+ prop->ns = ns;
+ if (value != NULL) {
+ xmlChar *buffer;
+ xmlNodePtr tmp;
+
+ buffer = xmlEncodeEntitiesReentrant(node->doc, value);
+ prop->children = xmlStringGetNodeList(node->doc, buffer);
+ prop->last = NULL;
+ tmp = prop->children;
+ while (tmp != NULL) {
+ tmp->parent = (xmlNodePtr) prop;
+ if (tmp->next == NULL)
+ prop->last = tmp;
+ tmp = tmp->next;
+ }
+ xmlFree(buffer);
+ }
+ return(prop);
+ }
+ prop = prop->next;
+ }
+ prop = xmlNewNsProp(node, ns, name, value);
+ return(prop);
+}
+
+#endif /* LIBXML_TREE_ENABLED */
+
+/**
+ * xmlNodeIsText:
+ * @node: the node
+ *
+ * Is this node a Text node ?
+ * Returns 1 yes, 0 no
+ */
+int
+xmlNodeIsText(xmlNodePtr node) {
+ if (node == NULL) return(0);
+
+ if (node->type == XML_TEXT_NODE) return(1);
+ return(0);
+}
+
+/**
+ * xmlIsBlankNode:
+ * @node: the node
+ *
+ * Checks whether this node is an empty or whitespace only
+ * (and possibly ignorable) text-node.
+ *
+ * Returns 1 yes, 0 no
+ */
+int
+xmlIsBlankNode(xmlNodePtr node) {
+ const xmlChar *cur;
+ if (node == NULL) return(0);
+
+ if ((node->type != XML_TEXT_NODE) &&
+ (node->type != XML_CDATA_SECTION_NODE))
+ return(0);
+ if (node->content == NULL) return(1);
+ cur = node->content;
+ while (*cur != 0) {
+ if (!IS_BLANK_CH(*cur)) return(0);
+ cur++;
+ }
+
+ return(1);
+}
+
+/**
+ * xmlTextConcat:
+ * @node: the node
+ * @content: the content
+ * @len: @content length
+ *
+ * Concat the given string at the end of the existing node content
+ *
+ * Returns -1 in case of error, 0 otherwise
+ */
+
+int
+xmlTextConcat(xmlNodePtr node, const xmlChar *content, int len) {
+ if (node == NULL) return(-1);
+
+ if ((node->type != XML_TEXT_NODE) &&
+ (node->type != XML_CDATA_SECTION_NODE)) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextConcat: node is not text nor CDATA\n");
+#endif
+ 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)) {
+ node->content = xmlStrncatNew(node->content, content, len);
+ } else {
+ node->content = xmlStrncat(node->content, content, len);
+ }
+ if (node->content == NULL)
+ return(-1);
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * Output : to a FILE or in memory *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlBufferCreate:
+ *
+ * routine to create an XML buffer.
+ * returns the new structure.
+ */
+xmlBufferPtr
+xmlBufferCreate(void) {
+ xmlBufferPtr ret;
+
+ ret = (xmlBufferPtr) xmlMalloc(sizeof(xmlBuffer));
+ if (ret == NULL) {
+ xmlTreeErrMemory("creating buffer");
+ return(NULL);
+ }
+ ret->use = 0;
+ ret->size = xmlDefaultBufferSize;
+ ret->alloc = xmlBufferAllocScheme;
+ ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar));
+ if (ret->content == NULL) {
+ xmlTreeErrMemory("creating buffer");
+ xmlFree(ret);
+ return(NULL);
+ }
+ ret->content[0] = 0;
+ return(ret);
+}
+
+/**
+ * xmlBufferCreateSize:
+ * @size: initial size of buffer
+ *
+ * routine to create an XML buffer.
+ * returns the new structure.
+ */
+xmlBufferPtr
+xmlBufferCreateSize(size_t size) {
+ xmlBufferPtr ret;
+
+ ret = (xmlBufferPtr) xmlMalloc(sizeof(xmlBuffer));
+ if (ret == NULL) {
+ xmlTreeErrMemory("creating buffer");
+ return(NULL);
+ }
+ ret->use = 0;
+ ret->alloc = xmlBufferAllocScheme;
+ ret->size = (size ? size+2 : 0); /* +1 for ending null */
+ if (ret->size){
+ ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar));
+ if (ret->content == NULL) {
+ xmlTreeErrMemory("creating buffer");
+ xmlFree(ret);
+ return(NULL);
+ }
+ ret->content[0] = 0;
+ } else
+ ret->content = NULL;
+ return(ret);
+}
+
+/**
+ * xmlBufferCreateStatic:
+ * @mem: the memory area
+ * @size: the size in byte
+ *
+ * routine to create an XML buffer from an immutable memory area.
+ * The area won't be modified nor copied, and is expected to be
+ * present until the end of the buffer lifetime.
+ *
+ * returns the new structure.
+ */
+xmlBufferPtr
+xmlBufferCreateStatic(void *mem, size_t size) {
+ xmlBufferPtr ret;
+
+ if ((mem == NULL) || (size == 0))
+ return(NULL);
+
+ ret = (xmlBufferPtr) xmlMalloc(sizeof(xmlBuffer));
+ if (ret == NULL) {
+ xmlTreeErrMemory("creating buffer");
+ return(NULL);
+ }
+ ret->use = size;
+ ret->size = size;
+ ret->alloc = XML_BUFFER_ALLOC_IMMUTABLE;
+ ret->content = (xmlChar *) mem;
+ return(ret);
+}
+
+/**
+ * xmlBufferSetAllocationScheme:
+ * @buf: the buffer to tune
+ * @scheme: allocation scheme to use
+ *
+ * Sets the allocation scheme for this buffer
+ */
+void
+xmlBufferSetAllocationScheme(xmlBufferPtr buf,
+ xmlBufferAllocationScheme scheme) {
+ if (buf == NULL) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferSetAllocationScheme: buf == NULL\n");
+#endif
+ return;
+ }
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
+
+ buf->alloc = scheme;
+}
+
+/**
+ * xmlBufferFree:
+ * @buf: the buffer to free
+ *
+ * Frees an XML buffer. It frees both the content and the structure which
+ * encapsulate it.
+ */
+void
+xmlBufferFree(xmlBufferPtr buf) {
+ if (buf == NULL) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferFree: buf == NULL\n");
+#endif
+ return;
+ }
+
+ if ((buf->content != NULL) &&
+ (buf->alloc != XML_BUFFER_ALLOC_IMMUTABLE)) {
+ xmlFree(buf->content);
+ }
+ xmlFree(buf);
+}
+
+/**
+ * xmlBufferEmpty:
+ * @buf: the buffer
+ *
+ * empty a buffer.
+ */
+void
+xmlBufferEmpty(xmlBufferPtr buf) {
+ if (buf->content == NULL) return;
+ buf->use = 0;
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) {
+ buf->content = BAD_CAST "";
+ } else {
+ memset(buf->content, 0, buf->size);
+ }
+}
+
+/**
+ * xmlBufferShrink:
+ * @buf: the buffer to dump
+ * @len: the number of xmlChar to remove
+ *
+ * Remove the beginning of an XML buffer.
+ *
+ * Returns the number of #xmlChar removed, or -1 in case of failure.
+ */
+int
+xmlBufferShrink(xmlBufferPtr buf, unsigned int len) {
+ if (len == 0) return(0);
+ if (len > buf->use) return(-1);
+
+ buf->use -= len;
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) {
+ buf->content += len;
+ } else {
+ memmove(buf->content, &buf->content[len], buf->use * sizeof(xmlChar));
+ buf->content[buf->use] = 0;
+ }
+ return(len);
+}
+
+/**
+ * xmlBufferGrow:
+ * @buf: the buffer
+ * @len: the minimum free size to allocate
+ *
+ * Grow the available space of an XML buffer.
+ *
+ * Returns the new available space or -1 in case of error
+ */
+int
+xmlBufferGrow(xmlBufferPtr buf, unsigned int len) {
+ int size;
+ xmlChar *newbuf;
+
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
+ if (len + buf->use < buf->size) return(0);
+
+ size = buf->use + len + 100;
+
+ newbuf = (xmlChar *) xmlRealloc(buf->content, size);
+ if (newbuf == NULL) {
+ xmlTreeErrMemory("growing buffer");
+ return(-1);
+ }
+ buf->content = newbuf;
+ buf->size = size;
+ return(buf->size - buf->use);
+}
+
+/**
+ * xmlBufferDump:
+ * @file: the file output
+ * @buf: the buffer to dump
+ *
+ * Dumps an XML buffer to a FILE *.
+ * Returns the number of #xmlChar written
+ */
+int
+xmlBufferDump(FILE *file, xmlBufferPtr buf) {
+ int ret;
+
+ if (buf == NULL) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferDump: buf == NULL\n");
+#endif
+ return(0);
+ }
+ if (buf->content == NULL) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferDump: buf->content == NULL\n");
+#endif
+ return(0);
+ }
+ if (file == NULL)
+ file = stdout;
+ ret = fwrite(buf->content, sizeof(xmlChar), buf->use, file);
+ return(ret);
+}
+
+/**
+ * xmlBufferContent:
+ * @buf: the buffer
+ *
+ * Function to extract the content of a buffer
+ *
+ * Returns the internal content
+ */
+
+const xmlChar *
+xmlBufferContent(const xmlBufferPtr buf)
+{
+ if(!buf)
+ return NULL;
+
+ return buf->content;
+}
+
+/**
+ * xmlBufferLength:
+ * @buf: the buffer
+ *
+ * Function to get the length of a buffer
+ *
+ * Returns the length of data in the internal content
+ */
+
+int
+xmlBufferLength(const xmlBufferPtr buf)
+{
+ if(!buf)
+ return 0;
+
+ return buf->use;
+}
+
+/**
+ * xmlBufferResize:
+ * @buf: the buffer to resize
+ * @size: the desired size
+ *
+ * Resize a buffer to accommodate minimum size of @size.
+ *
+ * Returns 0 in case of problems, 1 otherwise
+ */
+int
+xmlBufferResize(xmlBufferPtr buf, unsigned int size)
+{
+ unsigned int newSize;
+ xmlChar* rebuf = NULL;
+
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
+
+ /*take care of empty case*/
+ newSize = (buf->size ? buf->size*2 : size);
+
+ /* Don't resize if we don't have to */
+ if (size < buf->size)
+ return 1;
+
+ /* figure out new size */
+ switch (buf->alloc){
+ case XML_BUFFER_ALLOC_DOUBLEIT:
+ while (size > newSize) newSize *= 2;
+ break;
+ case XML_BUFFER_ALLOC_EXACT:
+ newSize = size+10;
+ break;
+ default:
+ newSize = size+10;
+ break;
+ }
+
+ if (buf->content == NULL)
+ rebuf = (xmlChar *) xmlMallocAtomic(newSize * sizeof(xmlChar));
+ else if (buf->size - buf->use < 100) {
+ rebuf = (xmlChar *) xmlRealloc(buf->content,
+ newSize * sizeof(xmlChar));
+ } else {
+ /*
+ * if we are reallocating a buffer far from being full, it's
+ * better to make a new allocation and copy only the used range
+ * and free the old one.
+ */
+ rebuf = (xmlChar *) xmlMallocAtomic(newSize * sizeof(xmlChar));
+ if (rebuf != NULL) {
+ memcpy(rebuf, buf->content, buf->use);
+ xmlFree(buf->content);
+ }
+ rebuf[buf->use] = 0;
+ }
+ if (rebuf == NULL) {
+ xmlTreeErrMemory("growing buffer");
+ return 0;
+ }
+ buf->content = rebuf;
+ buf->size = newSize;
+
+ return 1;
+}
+
+/**
+ * xmlBufferAdd:
+ * @buf: the buffer to dump
+ * @str: the #xmlChar string
+ * @len: the number of #xmlChar to add
+ *
+ * Add a string range to an XML buffer. if len == -1, the length of
+ * str is recomputed.
+ */
+void
+xmlBufferAdd(xmlBufferPtr buf, const xmlChar *str, int len) {
+ unsigned int needSize;
+
+ if (str == NULL) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferAdd: str == NULL\n");
+#endif
+ return;
+ }
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
+ if (len < -1) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferAdd: len < 0\n");
+#endif
+ return;
+ }
+ if (len == 0) return;
+
+ if (len < 0)
+ len = xmlStrlen(str);
+
+ if (len <= 0) return;
+
+ needSize = buf->use + len + 2;
+ if (needSize > buf->size){
+ if (!xmlBufferResize(buf, needSize)){
+ xmlTreeErrMemory("growing buffer");
+ return;
+ }
+ }
+
+ memmove(&buf->content[buf->use], str, len*sizeof(xmlChar));
+ buf->use += len;
+ buf->content[buf->use] = 0;
+}
+
+/**
+ * xmlBufferAddHead:
+ * @buf: the buffer
+ * @str: the #xmlChar string
+ * @len: the number of #xmlChar to add
+ *
+ * Add a string range to the beginning of an XML buffer.
+ * if len == -1, the length of @str is recomputed.
+ */
+void
+xmlBufferAddHead(xmlBufferPtr buf, const xmlChar *str, int len) {
+ unsigned int needSize;
+
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
+ if (str == NULL) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferAddHead: str == NULL\n");
+#endif
+ return;
+ }
+ if (len < -1) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferAddHead: len < 0\n");
+#endif
+ return;
+ }
+ if (len == 0) return;
+
+ if (len < 0)
+ len = xmlStrlen(str);
+
+ if (len <= 0) return;
+
+ needSize = buf->use + len + 2;
+ if (needSize > buf->size){
+ if (!xmlBufferResize(buf, needSize)){
+ xmlTreeErrMemory("growing buffer");
+ return;
+ }
+ }
+
+ memmove(&buf->content[len], &buf->content[0], buf->use * sizeof(xmlChar));
+ memmove(&buf->content[0], str, len * sizeof(xmlChar));
+ buf->use += len;
+ buf->content[buf->use] = 0;
+}
+
+/**
+ * xmlBufferCat:
+ * @buf: the buffer to dump
+ * @str: the #xmlChar string
+ *
+ * Append a zero terminated string to an XML buffer.
+ */
+void
+xmlBufferCat(xmlBufferPtr buf, const xmlChar *str) {
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
+ if (str != NULL)
+ xmlBufferAdd(buf, str, -1);
+}
+
+/**
+ * xmlBufferCCat:
+ * @buf: the buffer to dump
+ * @str: the C char string
+ *
+ * Append a zero terminated C string to an XML buffer.
+ */
+void
+xmlBufferCCat(xmlBufferPtr buf, const char *str) {
+ const char *cur;
+
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
+ if (str == NULL) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferCCat: str == NULL\n");
+#endif
+ return;
+ }
+ for (cur = str;*cur != 0;cur++) {
+ if (buf->use + 10 >= buf->size) {
+ if (!xmlBufferResize(buf, buf->use+10)){
+ xmlTreeErrMemory("growing buffer");
+ return;
+ }
+ }
+ buf->content[buf->use++] = *cur;
+ }
+ buf->content[buf->use] = 0;
+}
+
+/**
+ * xmlBufferWriteCHAR:
+ * @buf: the XML buffer
+ * @string: the string to add
+ *
+ * routine which manages and grows an output buffer. This one adds
+ * xmlChars at the end of the buffer.
+ */
+void
+xmlBufferWriteCHAR(xmlBufferPtr buf, const xmlChar *string) {
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
+ xmlBufferCat(buf, string);
+}
+
+/**
+ * xmlBufferWriteChar:
+ * @buf: the XML buffer output
+ * @string: the string to add
+ *
+ * routine which manage and grows an output buffer. This one add
+ * C chars at the end of the array.
+ */
+void
+xmlBufferWriteChar(xmlBufferPtr buf, const char *string) {
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
+ xmlBufferCCat(buf, string);
+}
+
+
+/**
+ * xmlBufferWriteQuotedString:
+ * @buf: the XML buffer output
+ * @string: the string to add
+ *
+ * routine which manage and grows an output buffer. This one writes
+ * a quoted or double quoted #xmlChar string, checking first if it holds
+ * quote or double-quotes internally
+ */
+void
+xmlBufferWriteQuotedString(xmlBufferPtr buf, const xmlChar *string) {
+ const xmlChar *cur, *base;
+ if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
+ if (xmlStrchr(string, '\"')) {
+ if (xmlStrchr(string, '\'')) {
+#ifdef DEBUG_BUFFER
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferWriteQuotedString: string contains quote and double-quotes !\n");
+#endif
+ xmlBufferCCat(buf, "\"");
+ base = cur = string;
+ while(*cur != 0){
+ if(*cur == '"'){
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&quot;", 6);
+ cur++;
+ base = cur;
+ }
+ else {
+ cur++;
+ }
+ }
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferCCat(buf, "\"");
+ }
+ else{
+ xmlBufferCCat(buf, "\'");
+ xmlBufferCat(buf, string);
+ xmlBufferCCat(buf, "\'");
+ }
+ } else {
+ xmlBufferCCat(buf, "\"");
+ xmlBufferCat(buf, string);
+ xmlBufferCCat(buf, "\"");
+ }
+}
+
+
+/**
+ * xmlGetDocCompressMode:
+ * @doc: the document
+ *
+ * get the compression ratio for a document, ZLIB based
+ * Returns 0 (uncompressed) to 9 (max compression)
+ */
+int
+xmlGetDocCompressMode (xmlDocPtr doc) {
+ if (doc == NULL) return(-1);
+ return(doc->compression);
+}
+
+/**
+ * xmlSetDocCompressMode:
+ * @doc: the document
+ * @mode: the compression ratio
+ *
+ * set the compression ratio for a document, ZLIB based
+ * Correct values: 0 (uncompressed) to 9 (max compression)
+ */
+void
+xmlSetDocCompressMode (xmlDocPtr doc, int mode) {
+ if (doc == NULL) return;
+ if (mode < 0) doc->compression = 0;
+ else if (mode > 9) doc->compression = 9;
+ else doc->compression = mode;
+}
+
+/**
+ * xmlGetCompressMode:
+ *
+ * get the default compression mode used, ZLIB based.
+ * Returns 0 (uncompressed) to 9 (max compression)
+ */
+int
+xmlGetCompressMode(void)
+{
+ return (xmlCompressMode);
+}
+
+/**
+ * xmlSetCompressMode:
+ * @mode: the compression ratio
+ *
+ * set the default compression mode used, ZLIB based
+ * Correct values: 0 (uncompressed) to 9 (max compression)
+ */
+void
+xmlSetCompressMode(int mode) {
+ if (mode < 0) xmlCompressMode = 0;
+ else if (mode > 9) xmlCompressMode = 9;
+ else xmlCompressMode = mode;
+}
+
diff --git a/trio.c b/trio.c
new file mode 100644
index 0000000..2dd8478
--- /dev/null
+++ b/trio.c
@@ -0,0 +1,6855 @@
+/*************************************************************************
+ *
+ * $Id: trio.c,v 1.11 2003/04/03 15:28:27 veillard Exp $
+ *
+ * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ *************************************************************************
+ *
+ * A note to trio contributors:
+ *
+ * Avoid heap allocation at all costs to ensure that the trio functions
+ * are async-safe. The exceptions are the printf/fprintf functions, which
+ * uses fputc, and the asprintf functions and the <alloc> modifier, which
+ * by design are required to allocate form the heap.
+ *
+ ************************************************************************/
+
+/*
+ * TODO:
+ * - Scan is probably too permissive about its modifiers.
+ * - C escapes in %#[] ?
+ * - Multibyte characters (done for format parsing, except scan groups)
+ * - Complex numbers? (C99 _Complex)
+ * - Boolean values? (C99 _Bool)
+ * - C99 NaN(n-char-sequence) missing. The n-char-sequence can be used
+ * to print the mantissa, e.g. NaN(0xc000000000000000)
+ * - Should we support the GNU %a alloc modifier? GNU has an ugly hack
+ * for %a, because C99 used %a for other purposes. If specified as
+ * %as or %a[ it is interpreted as the alloc modifier, otherwise as
+ * the C99 hex-float. This means that you cannot scan %as as a hex-float
+ * immediately followed by an 's'.
+ * - Scanning of collating symbols.
+ */
+
+/*************************************************************************
+ * Trio include files
+ */
+#include "triodef.h"
+#include "trio.h"
+#include "triop.h"
+#include "trionan.h"
+#if !defined(TRIO_MINIMAL)
+# include "triostr.h"
+#endif
+
+/**************************************************************************
+ *
+ * Definitions
+ *
+ *************************************************************************/
+
+#include <math.h>
+#include <limits.h>
+#include <float.h>
+
+#if defined(__STDC_ISO_10646__) || defined(MB_LEN_MAX) || defined(USE_MULTIBYTE) || TRIO_WIDECHAR
+# define TRIO_COMPILER_SUPPORTS_MULTIBYTE
+# if !defined(MB_LEN_MAX)
+# define MB_LEN_MAX 6
+# endif
+#endif
+
+#if (defined(TRIO_COMPILER_MSVC) && (_MSC_VER >= 1100)) || defined(TRIO_COMPILER_BCB)
+# define TRIO_COMPILER_SUPPORTS_MSVC_INT
+#endif
+
+/*************************************************************************
+ * Generic definitions
+ */
+
+#if !(defined(DEBUG) || defined(NDEBUG))
+# define NDEBUG
+#endif
+
+#include <assert.h>
+#include <ctype.h>
+#if !defined(TRIO_COMPILER_SUPPORTS_C99)
+# define isblank(x) (((x)==32) || ((x)==9))
+#endif
+#if defined(TRIO_COMPILER_ANCIENT)
+# include <varargs.h>
+#else
+# include <stdarg.h>
+#endif
+#include <stddef.h>
+#include <errno.h>
+
+#ifndef NULL
+# define NULL 0
+#endif
+#define NIL ((char)0)
+#ifndef FALSE
+# define FALSE (1 == 0)
+# define TRUE (! FALSE)
+#endif
+#define BOOLEAN_T int
+
+/* mincore() can be used for debugging purposes */
+#define VALID(x) (NULL != (x))
+
+#if TRIO_ERRORS
+ /*
+ * Encode the error code and the position. This is decoded
+ * with TRIO_ERROR_CODE and TRIO_ERROR_POSITION.
+ */
+# define TRIO_ERROR_RETURN(x,y) (- ((x) + ((y) << 8)))
+#else
+# define TRIO_ERROR_RETURN(x,y) (-1)
+#endif
+
+typedef unsigned long trio_flags_t;
+
+
+/*************************************************************************
+ * Platform specific definitions
+ */
+#if defined(TRIO_PLATFORM_UNIX)
+# include <unistd.h>
+# include <signal.h>
+# include <locale.h>
+# define USE_LOCALE
+#endif /* TRIO_PLATFORM_UNIX */
+#if defined(TRIO_PLATFORM_VMS)
+# include <unistd.h>
+#endif
+#if defined(TRIO_PLATFORM_WIN32)
+# include <io.h>
+# define read _read
+# define write _write
+#endif /* TRIO_PLATFORM_WIN32 */
+
+#if TRIO_WIDECHAR
+# if defined(TRIO_COMPILER_SUPPORTS_ISO94)
+# include <wchar.h>
+# include <wctype.h>
+typedef wchar_t trio_wchar_t;
+typedef wint_t trio_wint_t;
+# else
+typedef char trio_wchar_t;
+typedef int trio_wint_t;
+# define WCONST(x) L ## x
+# define WEOF EOF
+# define iswalnum(x) isalnum(x)
+# define iswalpha(x) isalpha(x)
+# define iswblank(x) isblank(x)
+# define iswcntrl(x) iscntrl(x)
+# define iswdigit(x) isdigit(x)
+# define iswgraph(x) isgraph(x)
+# define iswlower(x) islower(x)
+# define iswprint(x) isprint(x)
+# define iswpunct(x) ispunct(x)
+# define iswspace(x) isspace(x)
+# define iswupper(x) isupper(x)
+# define iswxdigit(x) isxdigit(x)
+# endif
+#endif
+
+
+/*************************************************************************
+ * Compiler dependent definitions
+ */
+
+/* Support for long long */
+#ifndef __cplusplus
+# if !defined(USE_LONGLONG)
+# if defined(TRIO_COMPILER_GCC) && !defined(__STRICT_ANSI__)
+# define USE_LONGLONG
+# elif defined(TRIO_COMPILER_SUNPRO)
+# define USE_LONGLONG
+# elif defined(_LONG_LONG) || defined(_LONGLONG)
+# define USE_LONGLONG
+# endif
+# endif
+#endif
+
+/* The extra long numbers */
+#if defined(USE_LONGLONG)
+typedef signed long long int trio_longlong_t;
+typedef unsigned long long int trio_ulonglong_t;
+#elif defined(TRIO_COMPILER_SUPPORTS_MSVC_INT)
+typedef signed __int64 trio_longlong_t;
+typedef unsigned __int64 trio_ulonglong_t;
+#else
+typedef TRIO_SIGNED long int trio_longlong_t;
+typedef unsigned long int trio_ulonglong_t;
+#endif
+
+/* Maximal and fixed integer types */
+#if defined(TRIO_COMPILER_SUPPORTS_C99)
+# include <stdint.h>
+typedef intmax_t trio_intmax_t;
+typedef uintmax_t trio_uintmax_t;
+typedef int8_t trio_int8_t;
+typedef int16_t trio_int16_t;
+typedef int32_t trio_int32_t;
+typedef int64_t trio_int64_t;
+#elif defined(TRIO_COMPILER_SUPPORTS_UNIX98)
+# include <inttypes.h>
+typedef intmax_t trio_intmax_t;
+typedef uintmax_t trio_uintmax_t;
+typedef int8_t trio_int8_t;
+typedef int16_t trio_int16_t;
+typedef int32_t trio_int32_t;
+typedef int64_t trio_int64_t;
+#elif defined(TRIO_COMPILER_SUPPORTS_MSVC_INT)
+typedef trio_longlong_t trio_intmax_t;
+typedef trio_ulonglong_t trio_uintmax_t;
+typedef __int8 trio_int8_t;
+typedef __int16 trio_int16_t;
+typedef __int32 trio_int32_t;
+typedef __int64 trio_int64_t;
+#else
+typedef trio_longlong_t trio_intmax_t;
+typedef trio_ulonglong_t trio_uintmax_t;
+# if defined(TRIO_INT8_T)
+typedef TRIO_INT8_T trio_int8_t;
+# else
+typedef TRIO_SIGNED char trio_int8_t;
+# endif
+# if defined(TRIO_INT16_T)
+typedef TRIO_INT16_T trio_int16_t;
+# else
+typedef TRIO_SIGNED short trio_int16_t;
+# endif
+# if defined(TRIO_INT32_T)
+typedef TRIO_INT32_T trio_int32_t;
+# else
+typedef TRIO_SIGNED int trio_int32_t;
+# endif
+# if defined(TRIO_INT64_T)
+typedef TRIO_INT64_T trio_int64_t;
+# else
+typedef trio_longlong_t trio_int64_t;
+# endif
+#endif
+
+#if !(defined(TRIO_COMPILER_SUPPORTS_C99) \
+ || defined(TRIO_COMPILER_SUPPORTS_UNIX01))
+# define floorl(x) floor((double)(x))
+# define fmodl(x,y) fmod((double)(x),(double)(y))
+# define powl(x,y) pow((double)(x),(double)(y))
+#endif
+
+#define TRIO_FABS(x) (((x) < 0.0) ? -(x) : (x))
+
+/*************************************************************************
+ * Internal Definitions
+ */
+
+#ifndef DECIMAL_DIG
+# define DECIMAL_DIG DBL_DIG
+#endif
+
+/* Long double sizes */
+#ifdef LDBL_DIG
+# define MAX_MANTISSA_DIGITS LDBL_DIG
+# define MAX_EXPONENT_DIGITS 4
+# define MAX_DOUBLE_DIGITS LDBL_MAX_10_EXP
+#else
+# define MAX_MANTISSA_DIGITS DECIMAL_DIG
+# define MAX_EXPONENT_DIGITS 3
+# define MAX_DOUBLE_DIGITS DBL_MAX_10_EXP
+#endif
+
+#if defined(TRIO_COMPILER_ANCIENT) || !defined(LDBL_DIG)
+# undef LDBL_DIG
+# undef LDBL_MANT_DIG
+# undef LDBL_EPSILON
+# define LDBL_DIG DBL_DIG
+# define LDBL_MANT_DIG DBL_MANT_DIG
+# define LDBL_EPSILON DBL_EPSILON
+#endif
+
+/* The maximal number of digits is for base 2 */
+#define MAX_CHARS_IN(x) (sizeof(x) * CHAR_BIT)
+/* The width of a pointer. The number of bits in a hex digit is 4 */
+#define POINTER_WIDTH ((sizeof("0x") - 1) + sizeof(trio_pointer_t) * CHAR_BIT / 4)
+
+/* Infinite and Not-A-Number for floating-point */
+#define INFINITE_LOWER "inf"
+#define INFINITE_UPPER "INF"
+#define LONG_INFINITE_LOWER "infinite"
+#define LONG_INFINITE_UPPER "INFINITE"
+#define NAN_LOWER "nan"
+#define NAN_UPPER "NAN"
+
+/* Various constants */
+enum {
+ TYPE_PRINT = 1,
+ TYPE_SCAN = 2,
+
+ /* Flags. FLAGS_LAST must be less than ULONG_MAX */
+ FLAGS_NEW = 0,
+ FLAGS_STICKY = 1,
+ FLAGS_SPACE = 2 * FLAGS_STICKY,
+ FLAGS_SHOWSIGN = 2 * FLAGS_SPACE,
+ FLAGS_LEFTADJUST = 2 * FLAGS_SHOWSIGN,
+ FLAGS_ALTERNATIVE = 2 * FLAGS_LEFTADJUST,
+ FLAGS_SHORT = 2 * FLAGS_ALTERNATIVE,
+ FLAGS_SHORTSHORT = 2 * FLAGS_SHORT,
+ FLAGS_LONG = 2 * FLAGS_SHORTSHORT,
+ FLAGS_QUAD = 2 * FLAGS_LONG,
+ FLAGS_LONGDOUBLE = 2 * FLAGS_QUAD,
+ FLAGS_SIZE_T = 2 * FLAGS_LONGDOUBLE,
+ FLAGS_PTRDIFF_T = 2 * FLAGS_SIZE_T,
+ FLAGS_INTMAX_T = 2 * FLAGS_PTRDIFF_T,
+ FLAGS_NILPADDING = 2 * FLAGS_INTMAX_T,
+ FLAGS_UNSIGNED = 2 * FLAGS_NILPADDING,
+ FLAGS_UPPER = 2 * FLAGS_UNSIGNED,
+ FLAGS_WIDTH = 2 * FLAGS_UPPER,
+ FLAGS_WIDTH_PARAMETER = 2 * FLAGS_WIDTH,
+ FLAGS_PRECISION = 2 * FLAGS_WIDTH_PARAMETER,
+ FLAGS_PRECISION_PARAMETER = 2 * FLAGS_PRECISION,
+ FLAGS_BASE = 2 * FLAGS_PRECISION_PARAMETER,
+ FLAGS_BASE_PARAMETER = 2 * FLAGS_BASE,
+ FLAGS_FLOAT_E = 2 * FLAGS_BASE_PARAMETER,
+ FLAGS_FLOAT_G = 2 * FLAGS_FLOAT_E,
+ FLAGS_QUOTE = 2 * FLAGS_FLOAT_G,
+ FLAGS_WIDECHAR = 2 * FLAGS_QUOTE,
+ FLAGS_ALLOC = 2 * FLAGS_WIDECHAR,
+ FLAGS_IGNORE = 2 * FLAGS_ALLOC,
+ FLAGS_IGNORE_PARAMETER = 2 * FLAGS_IGNORE,
+ FLAGS_VARSIZE_PARAMETER = 2 * FLAGS_IGNORE_PARAMETER,
+ FLAGS_FIXED_SIZE = 2 * FLAGS_VARSIZE_PARAMETER,
+ FLAGS_LAST = FLAGS_FIXED_SIZE,
+ /* Reused flags */
+ FLAGS_EXCLUDE = FLAGS_SHORT,
+ FLAGS_USER_DEFINED = FLAGS_IGNORE,
+ FLAGS_ROUNDING = FLAGS_INTMAX_T,
+ /* Compounded flags */
+ FLAGS_ALL_VARSIZES = FLAGS_LONG | FLAGS_QUAD | FLAGS_INTMAX_T | FLAGS_PTRDIFF_T | FLAGS_SIZE_T,
+ FLAGS_ALL_SIZES = FLAGS_ALL_VARSIZES | FLAGS_SHORTSHORT | FLAGS_SHORT,
+
+ NO_POSITION = -1,
+ NO_WIDTH = 0,
+ NO_PRECISION = -1,
+ NO_SIZE = -1,
+
+ /* Do not change these */
+ NO_BASE = -1,
+ MIN_BASE = 2,
+ MAX_BASE = 36,
+ BASE_BINARY = 2,
+ BASE_OCTAL = 8,
+ BASE_DECIMAL = 10,
+ BASE_HEX = 16,
+
+ /* Maximal number of allowed parameters */
+ MAX_PARAMETERS = 64,
+ /* Maximal number of characters in class */
+ MAX_CHARACTER_CLASS = UCHAR_MAX + 1,
+
+ /* Maximal string lengths for user-defined specifiers */
+ MAX_USER_NAME = 64,
+ MAX_USER_DATA = 256,
+
+ /* Maximal length of locale separator strings */
+ MAX_LOCALE_SEPARATOR_LENGTH = MB_LEN_MAX,
+ /* Maximal number of integers in grouping */
+ MAX_LOCALE_GROUPS = 64,
+
+ /* Initial size of asprintf buffer */
+ DYNAMIC_START_SIZE = 32
+};
+
+#define NO_GROUPING ((int)CHAR_MAX)
+
+/* Fundamental formatting parameter types */
+#define FORMAT_UNKNOWN 0
+#define FORMAT_INT 1
+#define FORMAT_DOUBLE 2
+#define FORMAT_CHAR 3
+#define FORMAT_STRING 4
+#define FORMAT_POINTER 5
+#define FORMAT_COUNT 6
+#define FORMAT_PARAMETER 7
+#define FORMAT_GROUP 8
+#if TRIO_GNU
+# define FORMAT_ERRNO 9
+#endif
+#if TRIO_EXTENSION
+# define FORMAT_USER_DEFINED 10
+#endif
+
+/* Character constants */
+#define CHAR_IDENTIFIER '%'
+#define CHAR_BACKSLASH '\\'
+#define CHAR_QUOTE '\"'
+#define CHAR_ADJUST ' '
+
+/* Character class expressions */
+#define CLASS_ALNUM "[:alnum:]"
+#define CLASS_ALPHA "[:alpha:]"
+#define CLASS_BLANK "[:blank:]"
+#define CLASS_CNTRL "[:cntrl:]"
+#define CLASS_DIGIT "[:digit:]"
+#define CLASS_GRAPH "[:graph:]"
+#define CLASS_LOWER "[:lower:]"
+#define CLASS_PRINT "[:print:]"
+#define CLASS_PUNCT "[:punct:]"
+#define CLASS_SPACE "[:space:]"
+#define CLASS_UPPER "[:upper:]"
+#define CLASS_XDIGIT "[:xdigit:]"
+
+/*
+ * SPECIFIERS:
+ *
+ *
+ * a Hex-float
+ * A Hex-float
+ * c Character
+ * C Widechar character (wint_t)
+ * d Decimal
+ * e Float
+ * E Float
+ * F Float
+ * F Float
+ * g Float
+ * G Float
+ * i Integer
+ * m Error message
+ * n Count
+ * o Octal
+ * p Pointer
+ * s String
+ * S Widechar string (wchar_t *)
+ * u Unsigned
+ * x Hex
+ * X Hex
+ * [] Group
+ * <> User-defined
+ *
+ * Reserved:
+ *
+ * D Binary Coded Decimal %D(length,precision) (OS/390)
+ */
+#define SPECIFIER_CHAR 'c'
+#define SPECIFIER_STRING 's'
+#define SPECIFIER_DECIMAL 'd'
+#define SPECIFIER_INTEGER 'i'
+#define SPECIFIER_UNSIGNED 'u'
+#define SPECIFIER_OCTAL 'o'
+#define SPECIFIER_HEX 'x'
+#define SPECIFIER_HEX_UPPER 'X'
+#define SPECIFIER_FLOAT_E 'e'
+#define SPECIFIER_FLOAT_E_UPPER 'E'
+#define SPECIFIER_FLOAT_F 'f'
+#define SPECIFIER_FLOAT_F_UPPER 'F'
+#define SPECIFIER_FLOAT_G 'g'
+#define SPECIFIER_FLOAT_G_UPPER 'G'
+#define SPECIFIER_POINTER 'p'
+#define SPECIFIER_GROUP '['
+#define SPECIFIER_UNGROUP ']'
+#define SPECIFIER_COUNT 'n'
+#if TRIO_UNIX98
+# define SPECIFIER_CHAR_UPPER 'C'
+# define SPECIFIER_STRING_UPPER 'S'
+#endif
+#if TRIO_C99
+# define SPECIFIER_HEXFLOAT 'a'
+# define SPECIFIER_HEXFLOAT_UPPER 'A'
+#endif
+#if TRIO_GNU
+# define SPECIFIER_ERRNO 'm'
+#endif
+#if TRIO_EXTENSION
+# define SPECIFIER_BINARY 'b'
+# define SPECIFIER_BINARY_UPPER 'B'
+# define SPECIFIER_USER_DEFINED_BEGIN '<'
+# define SPECIFIER_USER_DEFINED_END '>'
+# define SPECIFIER_USER_DEFINED_SEPARATOR ':'
+#endif
+
+/*
+ * QUALIFIERS:
+ *
+ *
+ * Numbers = d,i,o,u,x,X
+ * Float = a,A,e,E,f,F,g,G
+ * String = s
+ * Char = c
+ *
+ *
+ * 9$ Position
+ * Use the 9th parameter. 9 can be any number between 1 and
+ * the maximal argument
+ *
+ * 9 Width
+ * Set width to 9. 9 can be any number, but must not be postfixed
+ * by '$'
+ *
+ * h Short
+ * Numbers:
+ * (unsigned) short int
+ *
+ * hh Short short
+ * Numbers:
+ * (unsigned) char
+ *
+ * l Long
+ * Numbers:
+ * (unsigned) long int
+ * String:
+ * as the S specifier
+ * Char:
+ * as the C specifier
+ *
+ * ll Long Long
+ * Numbers:
+ * (unsigned) long long int
+ *
+ * L Long Double
+ * Float
+ * long double
+ *
+ * # Alternative
+ * Float:
+ * Decimal-point is always present
+ * String:
+ * non-printable characters are handled as \number
+ *
+ * Spacing
+ *
+ * + Sign
+ *
+ * - Alignment
+ *
+ * . Precision
+ *
+ * * Parameter
+ * print: use parameter
+ * scan: no parameter (ignore)
+ *
+ * q Quad
+ *
+ * Z size_t
+ *
+ * w Widechar
+ *
+ * ' Thousands/quote
+ * Numbers:
+ * Integer part grouped in thousands
+ * Binary numbers:
+ * Number grouped in nibbles (4 bits)
+ * String:
+ * Quoted string
+ *
+ * j intmax_t
+ * t prtdiff_t
+ * z size_t
+ *
+ * ! Sticky
+ * @ Parameter (for both print and scan)
+ *
+ * I n-bit Integer
+ * Numbers:
+ * The following options exists
+ * I8 = 8-bit integer
+ * I16 = 16-bit integer
+ * I32 = 32-bit integer
+ * I64 = 64-bit integer
+ */
+#define QUALIFIER_POSITION '$'
+#define QUALIFIER_SHORT 'h'
+#define QUALIFIER_LONG 'l'
+#define QUALIFIER_LONG_UPPER 'L'
+#define QUALIFIER_ALTERNATIVE '#'
+#define QUALIFIER_SPACE ' '
+#define QUALIFIER_PLUS '+'
+#define QUALIFIER_MINUS '-'
+#define QUALIFIER_DOT '.'
+#define QUALIFIER_STAR '*'
+#define QUALIFIER_CIRCUMFLEX '^' /* For scanlists */
+#if TRIO_C99
+# define QUALIFIER_SIZE_T 'z'
+# define QUALIFIER_PTRDIFF_T 't'
+# define QUALIFIER_INTMAX_T 'j'
+#endif
+#if TRIO_BSD || TRIO_GNU
+# define QUALIFIER_QUAD 'q'
+#endif
+#if TRIO_GNU
+# define QUALIFIER_SIZE_T_UPPER 'Z'
+#endif
+#if TRIO_MISC
+# define QUALIFIER_WIDECHAR 'w'
+#endif
+#if TRIO_MICROSOFT
+# define QUALIFIER_FIXED_SIZE 'I'
+#endif
+#if TRIO_EXTENSION
+# define QUALIFIER_QUOTE '\''
+# define QUALIFIER_STICKY '!'
+# define QUALIFIER_VARSIZE '&' /* This should remain undocumented */
+# define QUALIFIER_PARAM '@' /* Experimental */
+# define QUALIFIER_COLON ':' /* For scanlists */
+# define QUALIFIER_EQUAL '=' /* For scanlists */
+# define QUALIFIER_ROUNDING_UPPER 'R'
+#endif
+
+
+/*************************************************************************
+ *
+ * Internal Structures
+ *
+ *************************************************************************/
+
+/* Parameters */
+typedef struct {
+ /* An indication of which entry in the data union is used */
+ int type;
+ /* The flags */
+ trio_flags_t flags;
+ /* The width qualifier */
+ int width;
+ /* The precision qualifier */
+ int precision;
+ /* The base qualifier */
+ int base;
+ /* The size for the variable size qualifier */
+ int varsize;
+ /* The marker of the end of the specifier */
+ int indexAfterSpecifier;
+ /* The data from the argument list */
+ union {
+ char *string;
+#if TRIO_WIDECHAR
+ trio_wchar_t *wstring;
+#endif
+ trio_pointer_t pointer;
+ union {
+ trio_intmax_t as_signed;
+ trio_uintmax_t as_unsigned;
+ } number;
+ double doubleNumber;
+ double *doublePointer;
+ trio_long_double_t longdoubleNumber;
+ trio_long_double_t *longdoublePointer;
+ int errorNumber;
+ } data;
+ /* For the user-defined specifier */
+ char user_name[MAX_USER_NAME];
+ char user_data[MAX_USER_DATA];
+} trio_parameter_t;
+
+/* Container for customized functions */
+typedef struct {
+ union {
+ trio_outstream_t out;
+ trio_instream_t in;
+ } stream;
+ trio_pointer_t closure;
+} trio_custom_t;
+
+/* General trio "class" */
+typedef struct _trio_class_t {
+ /*
+ * The function to write characters to a stream.
+ */
+ void (*OutStream) TRIO_PROTO((struct _trio_class_t *, int));
+ /*
+ * The function to read characters from a stream.
+ */
+ void (*InStream) TRIO_PROTO((struct _trio_class_t *, int *));
+ /*
+ * The current location in the stream.
+ */
+ trio_pointer_t location;
+ /*
+ * The character currently being processed.
+ */
+ int current;
+ /*
+ * The number of characters that would have been written/read
+ * if there had been sufficient space.
+ */
+ int processed;
+ /*
+ * The number of characters that are actually written/read.
+ * Processed and committed will only differ for the *nprintf
+ * and *nscanf functions.
+ */
+ int committed;
+ /*
+ * The upper limit of characters that may be written/read.
+ */
+ int max;
+ /*
+ * The last output error that was detected.
+ */
+ int error;
+} trio_class_t;
+
+/* References (for user-defined callbacks) */
+typedef struct _trio_reference_t {
+ trio_class_t *data;
+ trio_parameter_t *parameter;
+} trio_reference_t;
+
+/* Registered entries (for user-defined callbacks) */
+typedef struct _trio_userdef_t {
+ struct _trio_userdef_t *next;
+ trio_callback_t callback;
+ char *name;
+} trio_userdef_t;
+
+/*************************************************************************
+ *
+ * Internal Variables
+ *
+ *************************************************************************/
+
+static TRIO_CONST char rcsid[] = "@(#)$Id: trio.c,v 1.11 2003/04/03 15:28:27 veillard Exp $";
+
+/*
+ * Need this to workaround a parser bug in HP C/iX compiler that fails
+ * to resolves macro definitions that includes type 'long double',
+ * e.g: va_arg(arg_ptr, long double)
+ */
+#if defined(TRIO_PLATFORM_MPEIX)
+static TRIO_CONST trio_long_double_t ___dummy_long_double = 0;
+#endif
+
+static TRIO_CONST char internalNullString[] = "(nil)";
+
+#if defined(USE_LOCALE)
+static struct lconv *internalLocaleValues = NULL;
+#endif
+
+/*
+ * UNIX98 says "in a locale where the radix character is not defined,
+ * the radix character defaults to a period (.)"
+ */
+static int internalDecimalPointLength = 1;
+static int internalThousandSeparatorLength = 1;
+static char internalDecimalPoint = '.';
+static char internalDecimalPointString[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ".";
+static char internalThousandSeparator[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ",";
+static char internalGrouping[MAX_LOCALE_GROUPS] = { (char)NO_GROUPING };
+
+static TRIO_CONST char internalDigitsLower[] = "0123456789abcdefghijklmnopqrstuvwxyz";
+static TRIO_CONST char internalDigitsUpper[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+static BOOLEAN_T internalDigitsUnconverted = TRUE;
+static int internalDigitArray[128];
+#if TRIO_EXTENSION
+static BOOLEAN_T internalCollationUnconverted = TRUE;
+static char internalCollationArray[MAX_CHARACTER_CLASS][MAX_CHARACTER_CLASS];
+#endif
+
+#if TRIO_EXTENSION
+static TRIO_VOLATILE trio_callback_t internalEnterCriticalRegion = NULL;
+static TRIO_VOLATILE trio_callback_t internalLeaveCriticalRegion = NULL;
+static trio_userdef_t *internalUserDef = NULL;
+#endif
+
+
+/*************************************************************************
+ *
+ * Internal Functions
+ *
+ ************************************************************************/
+
+#if defined(TRIO_MINIMAL)
+# define TRIO_STRING_PUBLIC static
+# include "triostr.c"
+#endif /* defined(TRIO_MINIMAL) */
+
+/*************************************************************************
+ * TrioIsQualifier
+ *
+ * Description:
+ * Remember to add all new qualifiers to this function.
+ * QUALIFIER_POSITION must not be added.
+ */
+TRIO_PRIVATE BOOLEAN_T
+TrioIsQualifier
+TRIO_ARGS1((character),
+ TRIO_CONST char character)
+{
+ /* QUALIFIER_POSITION is not included */
+ switch (character)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case QUALIFIER_PLUS:
+ case QUALIFIER_MINUS:
+ case QUALIFIER_SPACE:
+ case QUALIFIER_DOT:
+ case QUALIFIER_STAR:
+ case QUALIFIER_ALTERNATIVE:
+ case QUALIFIER_SHORT:
+ case QUALIFIER_LONG:
+ case QUALIFIER_LONG_UPPER:
+ case QUALIFIER_CIRCUMFLEX:
+#if defined(QUALIFIER_SIZE_T)
+ case QUALIFIER_SIZE_T:
+#endif
+#if defined(QUALIFIER_PTRDIFF_T)
+ case QUALIFIER_PTRDIFF_T:
+#endif
+#if defined(QUALIFIER_INTMAX_T)
+ case QUALIFIER_INTMAX_T:
+#endif
+#if defined(QUALIFIER_QUAD)
+ case QUALIFIER_QUAD:
+#endif
+#if defined(QUALIFIER_SIZE_T_UPPER)
+ case QUALIFIER_SIZE_T_UPPER:
+#endif
+#if defined(QUALIFIER_WIDECHAR)
+ case QUALIFIER_WIDECHAR:
+#endif
+#if defined(QUALIFIER_QUOTE)
+ case QUALIFIER_QUOTE:
+#endif
+#if defined(QUALIFIER_STICKY)
+ case QUALIFIER_STICKY:
+#endif
+#if defined(QUALIFIER_VARSIZE)
+ case QUALIFIER_VARSIZE:
+#endif
+#if defined(QUALIFIER_PARAM)
+ case QUALIFIER_PARAM:
+#endif
+#if defined(QUALIFIER_FIXED_SIZE)
+ case QUALIFIER_FIXED_SIZE:
+#endif
+#if defined(QUALIFIER_ROUNDING_UPPER)
+ case QUALIFIER_ROUNDING_UPPER:
+#endif
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+/*************************************************************************
+ * TrioSetLocale
+ */
+#if defined(USE_LOCALE)
+TRIO_PRIVATE void
+TrioSetLocale(TRIO_NOARGS)
+{
+ internalLocaleValues = (struct lconv *)localeconv();
+ if (internalLocaleValues)
+ {
+ if ((internalLocaleValues->decimal_point) &&
+ (internalLocaleValues->decimal_point[0] != NIL))
+ {
+ internalDecimalPointLength = trio_length(internalLocaleValues->decimal_point);
+ if (internalDecimalPointLength == 1)
+ {
+ internalDecimalPoint = internalLocaleValues->decimal_point[0];
+ }
+ else
+ {
+ internalDecimalPoint = NIL;
+ trio_copy_max(internalDecimalPointString,
+ sizeof(internalDecimalPointString),
+ internalLocaleValues->decimal_point);
+ }
+ }
+ if ((internalLocaleValues->thousands_sep) &&
+ (internalLocaleValues->thousands_sep[0] != NIL))
+ {
+ trio_copy_max(internalThousandSeparator,
+ sizeof(internalThousandSeparator),
+ internalLocaleValues->thousands_sep);
+ internalThousandSeparatorLength = trio_length(internalThousandSeparator);
+ }
+ if ((internalLocaleValues->grouping) &&
+ (internalLocaleValues->grouping[0] != NIL))
+ {
+ trio_copy_max(internalGrouping,
+ sizeof(internalGrouping),
+ internalLocaleValues->grouping);
+ }
+ }
+}
+#endif /* defined(USE_LOCALE) */
+
+TRIO_PRIVATE int
+TrioCalcThousandSeparatorLength
+TRIO_ARGS1((digits),
+ int digits)
+{
+#if TRIO_EXTENSION
+ int count = 0;
+ int step = NO_GROUPING;
+ char *groupingPointer = internalGrouping;
+
+ while (digits > 0)
+ {
+ if (*groupingPointer == CHAR_MAX)
+ {
+ /* Disable grouping */
+ break; /* while */
+ }
+ else if (*groupingPointer == 0)
+ {
+ /* Repeat last group */
+ if (step == NO_GROUPING)
+ {
+ /* Error in locale */
+ break; /* while */
+ }
+ }
+ else
+ {
+ step = *groupingPointer++;
+ }
+ if (digits > step)
+ count += internalThousandSeparatorLength;
+ digits -= step;
+ }
+ return count;
+#else
+ return 0;
+#endif
+}
+
+TRIO_PRIVATE BOOLEAN_T
+TrioFollowedBySeparator
+TRIO_ARGS1((position),
+ int position)
+{
+#if TRIO_EXTENSION
+ int step = 0;
+ char *groupingPointer = internalGrouping;
+
+ position--;
+ if (position == 0)
+ return FALSE;
+ while (position > 0)
+ {
+ if (*groupingPointer == CHAR_MAX)
+ {
+ /* Disable grouping */
+ break; /* while */
+ }
+ else if (*groupingPointer != 0)
+ {
+ step = *groupingPointer++;
+ }
+ if (step == 0)
+ break;
+ position -= step;
+ }
+ return (position == 0);
+#else
+ return FALSE;
+#endif
+}
+
+/*************************************************************************
+ * TrioGetPosition
+ *
+ * Get the %n$ position.
+ */
+TRIO_PRIVATE int
+TrioGetPosition
+TRIO_ARGS2((format, indexPointer),
+ TRIO_CONST char *format,
+ int *indexPointer)
+{
+#if TRIO_UNIX98
+ char *tmpformat;
+ int number = 0;
+ int index = *indexPointer;
+
+ number = (int)trio_to_long(&format[index], &tmpformat, BASE_DECIMAL);
+ index = (int)(tmpformat - format);
+ if ((number != 0) && (QUALIFIER_POSITION == format[index++]))
+ {
+ *indexPointer = index;
+ /*
+ * number is decreased by 1, because n$ starts from 1, whereas
+ * the array it is indexing starts from 0.
+ */
+ return number - 1;
+ }
+#endif
+ return NO_POSITION;
+}
+
+#if TRIO_EXTENSION
+/*************************************************************************
+ * TrioFindNamespace
+ *
+ * Find registered user-defined specifier.
+ * The prev argument is used for optimization only.
+ */
+TRIO_PRIVATE trio_userdef_t *
+TrioFindNamespace
+TRIO_ARGS2((name, prev),
+ TRIO_CONST char *name,
+ trio_userdef_t **prev)
+{
+ trio_userdef_t *def;
+
+ if (internalEnterCriticalRegion)
+ (void)internalEnterCriticalRegion(NULL);
+
+ for (def = internalUserDef; def; def = def->next)
+ {
+ /* Case-sensitive string comparison */
+ if (trio_equal_case(def->name, name))
+ break;
+
+ if (prev)
+ *prev = def;
+ }
+
+ if (internalLeaveCriticalRegion)
+ (void)internalLeaveCriticalRegion(NULL);
+
+ return def;
+}
+#endif
+
+/*************************************************************************
+ * TrioPower
+ *
+ * Description:
+ * Calculate pow(base, exponent), where number and exponent are integers.
+ */
+TRIO_PRIVATE trio_long_double_t
+TrioPower
+TRIO_ARGS2((number, exponent),
+ int number,
+ int exponent)
+{
+ trio_long_double_t result;
+
+ if (number == 10)
+ {
+ switch (exponent)
+ {
+ /* Speed up calculation of common cases */
+ case 0:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E-1);
+ break;
+ case 1:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+0);
+ break;
+ case 2:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+1);
+ break;
+ case 3:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+2);
+ break;
+ case 4:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+3);
+ break;
+ case 5:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+4);
+ break;
+ case 6:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+5);
+ break;
+ case 7:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+6);
+ break;
+ case 8:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+7);
+ break;
+ case 9:
+ result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+8);
+ break;
+ default:
+ result = powl((trio_long_double_t)number,
+ (trio_long_double_t)exponent);
+ break;
+ }
+ }
+ else
+ {
+ return powl((trio_long_double_t)number, (trio_long_double_t)exponent);
+ }
+ return result;
+}
+
+/*************************************************************************
+ * TrioLogarithm
+ */
+TRIO_PRIVATE double
+TrioLogarithm
+TRIO_ARGS2((number, base),
+ double number,
+ int base)
+{
+ double result;
+
+ if (number <= 0.0)
+ {
+ /* xlC crashes on log(0) */
+ result = (number == 0.0) ? trio_ninf() : trio_nan();
+ }
+ else
+ {
+ if (base == 10)
+ {
+ result = log10(number);
+ }
+ else
+ {
+ result = log10(number) / log10((double)base);
+ }
+ }
+ return result;
+}
+
+/*************************************************************************
+ * TrioLogarithmBase
+ */
+TRIO_PRIVATE double
+TrioLogarithmBase
+TRIO_ARGS1((base),
+ int base)
+{
+ switch (base)
+ {
+ case BASE_BINARY : return 1.0;
+ case BASE_OCTAL : return 3.0;
+ case BASE_DECIMAL: return 3.321928094887362345;
+ case BASE_HEX : return 4.0;
+ default : return TrioLogarithm((double)base, 2);
+ }
+}
+
+/*************************************************************************
+ * TrioParse
+ *
+ * Description:
+ * Parse the format string
+ */
+TRIO_PRIVATE int
+TrioParse
+TRIO_ARGS5((type, format, parameters, arglist, argarray),
+ int type,
+ TRIO_CONST char *format,
+ trio_parameter_t *parameters,
+ va_list *arglist,
+ trio_pointer_t *argarray)
+{
+ /* Count the number of times a parameter is referenced */
+ unsigned short usedEntries[MAX_PARAMETERS];
+ /* Parameter counters */
+ int parameterPosition;
+ int currentParam;
+ int maxParam = -1;
+ /* Utility variables */
+ trio_flags_t flags;
+ int width;
+ int precision;
+ int varsize;
+ int base;
+ int index; /* Index into formatting string */
+ int dots; /* Count number of dots in modifier part */
+ BOOLEAN_T positional; /* Does the specifier have a positional? */
+ BOOLEAN_T gotSticky = FALSE; /* Are there any sticky modifiers at all? */
+ /*
+ * indices specifies the order in which the parameters must be
+ * read from the va_args (this is necessary to handle positionals)
+ */
+ int indices[MAX_PARAMETERS];
+ int pos = 0;
+ /* Various variables */
+ char ch;
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ int charlen;
+#endif
+ int save_errno;
+ int i = -1;
+ int num;
+ char *tmpformat;
+
+ /* One and only one of arglist and argarray must be used */
+ assert((arglist != NULL) ^ (argarray != NULL));
+
+ /*
+ * The 'parameters' array is not initialized, but we need to
+ * know which entries we have used.
+ */
+ memset(usedEntries, 0, sizeof(usedEntries));
+
+ save_errno = errno;
+ index = 0;
+ parameterPosition = 0;
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ (void)mblen(NULL, 0);
+#endif
+
+ while (format[index])
+ {
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ if (! isascii(format[index]))
+ {
+ /*
+ * Multibyte characters cannot be legal specifiers or
+ * modifiers, so we skip over them.
+ */
+ charlen = mblen(&format[index], MB_LEN_MAX);
+ index += (charlen > 0) ? charlen : 1;
+ continue; /* while */
+ }
+#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
+ if (CHAR_IDENTIFIER == format[index++])
+ {
+ if (CHAR_IDENTIFIER == format[index])
+ {
+ index++;
+ continue; /* while */
+ }
+
+ flags = FLAGS_NEW;
+ dots = 0;
+ currentParam = TrioGetPosition(format, &index);
+ positional = (NO_POSITION != currentParam);
+ if (!positional)
+ {
+ /* We have no positional, get the next counter */
+ currentParam = parameterPosition;
+ }
+ if(currentParam >= MAX_PARAMETERS)
+ {
+ /* Bail out completely to make the error more obvious */
+ return TRIO_ERROR_RETURN(TRIO_ETOOMANY, index);
+ }
+
+ if (currentParam > maxParam)
+ maxParam = currentParam;
+
+ /* Default values */
+ width = NO_WIDTH;
+ precision = NO_PRECISION;
+ base = NO_BASE;
+ varsize = NO_SIZE;
+
+ while (TrioIsQualifier(format[index]))
+ {
+ ch = format[index++];
+
+ switch (ch)
+ {
+ case QUALIFIER_SPACE:
+ flags |= FLAGS_SPACE;
+ break;
+
+ case QUALIFIER_PLUS:
+ flags |= FLAGS_SHOWSIGN;
+ break;
+
+ case QUALIFIER_MINUS:
+ flags |= FLAGS_LEFTADJUST;
+ flags &= ~FLAGS_NILPADDING;
+ break;
+
+ case QUALIFIER_ALTERNATIVE:
+ flags |= FLAGS_ALTERNATIVE;
+ break;
+
+ case QUALIFIER_DOT:
+ if (dots == 0) /* Precision */
+ {
+ dots++;
+
+ /* Skip if no precision */
+ if (QUALIFIER_DOT == format[index])
+ break;
+
+ /* After the first dot we have the precision */
+ flags |= FLAGS_PRECISION;
+ if ((QUALIFIER_STAR == format[index])
+#if defined(QUALIFIER_PARAM)
+ || (QUALIFIER_PARAM == format[index])
+#endif
+ )
+ {
+ index++;
+ flags |= FLAGS_PRECISION_PARAMETER;
+
+ precision = TrioGetPosition(format, &index);
+ if (precision == NO_POSITION)
+ {
+ parameterPosition++;
+ if (positional)
+ precision = parameterPosition;
+ else
+ {
+ precision = currentParam;
+ currentParam = precision + 1;
+ }
+ }
+ else
+ {
+ if (! positional)
+ currentParam = precision + 1;
+ if (width > maxParam)
+ maxParam = precision;
+ }
+ if (currentParam > maxParam)
+ maxParam = currentParam;
+ }
+ else
+ {
+ precision = trio_to_long(&format[index],
+ &tmpformat,
+ BASE_DECIMAL);
+ index = (int)(tmpformat - format);
+ }
+ }
+ else if (dots == 1) /* Base */
+ {
+ dots++;
+
+ /* After the second dot we have the base */
+ flags |= FLAGS_BASE;
+ if ((QUALIFIER_STAR == format[index])
+#if defined(QUALIFIER_PARAM)
+ || (QUALIFIER_PARAM == format[index])
+#endif
+ )
+ {
+ index++;
+ flags |= FLAGS_BASE_PARAMETER;
+ base = TrioGetPosition(format, &index);
+ if (base == NO_POSITION)
+ {
+ parameterPosition++;
+ if (positional)
+ base = parameterPosition;
+ else
+ {
+ base = currentParam;
+ currentParam = base + 1;
+ }
+ }
+ else
+ {
+ if (! positional)
+ currentParam = base + 1;
+ if (base > maxParam)
+ maxParam = base;
+ }
+ if (currentParam > maxParam)
+ maxParam = currentParam;
+ }
+ else
+ {
+ base = trio_to_long(&format[index],
+ &tmpformat,
+ BASE_DECIMAL);
+ if (base > MAX_BASE)
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ index = (int)(tmpformat - format);
+ }
+ }
+ else
+ {
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ }
+ break; /* QUALIFIER_DOT */
+
+#if defined(QUALIFIER_PARAM)
+ case QUALIFIER_PARAM:
+ type = TYPE_PRINT;
+ /* FALLTHROUGH */
+#endif
+ case QUALIFIER_STAR:
+ /* This has different meanings for print and scan */
+ if (TYPE_PRINT == type)
+ {
+ /* Read with from parameter */
+ flags |= (FLAGS_WIDTH | FLAGS_WIDTH_PARAMETER);
+ width = TrioGetPosition(format, &index);
+ if (width == NO_POSITION)
+ {
+ parameterPosition++;
+ if (positional)
+ width = parameterPosition;
+ else
+ {
+ width = currentParam;
+ currentParam = width + 1;
+ }
+ }
+ else
+ {
+ if (! positional)
+ currentParam = width + 1;
+ if (width > maxParam)
+ maxParam = width;
+ }
+ if (currentParam > maxParam)
+ maxParam = currentParam;
+ }
+ else
+ {
+ /* Scan, but do not store result */
+ flags |= FLAGS_IGNORE;
+ }
+
+ break; /* QUALIFIER_STAR */
+
+ case '0':
+ if (! (flags & FLAGS_LEFTADJUST))
+ flags |= FLAGS_NILPADDING;
+ /* FALLTHROUGH */
+ case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ flags |= FLAGS_WIDTH;
+ /* &format[index - 1] is used to "rewind" the read
+ * character from format
+ */
+ width = trio_to_long(&format[index - 1],
+ &tmpformat,
+ BASE_DECIMAL);
+ index = (int)(tmpformat - format);
+ break;
+
+ case QUALIFIER_SHORT:
+ if (flags & FLAGS_SHORTSHORT)
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ else if (flags & FLAGS_SHORT)
+ flags |= FLAGS_SHORTSHORT;
+ else
+ flags |= FLAGS_SHORT;
+ break;
+
+ case QUALIFIER_LONG:
+ if (flags & FLAGS_QUAD)
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ else if (flags & FLAGS_LONG)
+ flags |= FLAGS_QUAD;
+ else
+ flags |= FLAGS_LONG;
+ break;
+
+ case QUALIFIER_LONG_UPPER:
+ flags |= FLAGS_LONGDOUBLE;
+ break;
+
+#if defined(QUALIFIER_SIZE_T)
+ case QUALIFIER_SIZE_T:
+ flags |= FLAGS_SIZE_T;
+ /* Modify flags for later truncation of number */
+ if (sizeof(size_t) == sizeof(trio_ulonglong_t))
+ flags |= FLAGS_QUAD;
+ else if (sizeof(size_t) == sizeof(long))
+ flags |= FLAGS_LONG;
+ break;
+#endif
+
+#if defined(QUALIFIER_PTRDIFF_T)
+ case QUALIFIER_PTRDIFF_T:
+ flags |= FLAGS_PTRDIFF_T;
+ if (sizeof(ptrdiff_t) == sizeof(trio_ulonglong_t))
+ flags |= FLAGS_QUAD;
+ else if (sizeof(ptrdiff_t) == sizeof(long))
+ flags |= FLAGS_LONG;
+ break;
+#endif
+
+#if defined(QUALIFIER_INTMAX_T)
+ case QUALIFIER_INTMAX_T:
+ flags |= FLAGS_INTMAX_T;
+ if (sizeof(trio_intmax_t) == sizeof(trio_ulonglong_t))
+ flags |= FLAGS_QUAD;
+ else if (sizeof(trio_intmax_t) == sizeof(long))
+ flags |= FLAGS_LONG;
+ break;
+#endif
+
+#if defined(QUALIFIER_QUAD)
+ case QUALIFIER_QUAD:
+ flags |= FLAGS_QUAD;
+ break;
+#endif
+
+#if defined(QUALIFIER_FIXED_SIZE)
+ case QUALIFIER_FIXED_SIZE:
+ if (flags & FLAGS_FIXED_SIZE)
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+
+ if (flags & (FLAGS_ALL_SIZES | FLAGS_LONGDOUBLE |
+ FLAGS_WIDECHAR | FLAGS_VARSIZE_PARAMETER))
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+
+ if ((format[index] == '6') &&
+ (format[index + 1] == '4'))
+ {
+ varsize = sizeof(trio_int64_t);
+ index += 2;
+ }
+ else if ((format[index] == '3') &&
+ (format[index + 1] == '2'))
+ {
+ varsize = sizeof(trio_int32_t);
+ index += 2;
+ }
+ else if ((format[index] == '1') &&
+ (format[index + 1] == '6'))
+ {
+ varsize = sizeof(trio_int16_t);
+ index += 2;
+ }
+ else if (format[index] == '8')
+ {
+ varsize = sizeof(trio_int8_t);
+ index++;
+ }
+ else
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+
+ flags |= FLAGS_FIXED_SIZE;
+ break;
+#endif
+
+#if defined(QUALIFIER_WIDECHAR)
+ case QUALIFIER_WIDECHAR:
+ flags |= FLAGS_WIDECHAR;
+ break;
+#endif
+
+#if defined(QUALIFIER_SIZE_T_UPPER)
+ case QUALIFIER_SIZE_T_UPPER:
+ break;
+#endif
+
+#if defined(QUALIFIER_QUOTE)
+ case QUALIFIER_QUOTE:
+ flags |= FLAGS_QUOTE;
+ break;
+#endif
+
+#if defined(QUALIFIER_STICKY)
+ case QUALIFIER_STICKY:
+ flags |= FLAGS_STICKY;
+ gotSticky = TRUE;
+ break;
+#endif
+
+#if defined(QUALIFIER_VARSIZE)
+ case QUALIFIER_VARSIZE:
+ flags |= FLAGS_VARSIZE_PARAMETER;
+ parameterPosition++;
+ if (positional)
+ varsize = parameterPosition;
+ else
+ {
+ varsize = currentParam;
+ currentParam = varsize + 1;
+ }
+ if (currentParam > maxParam)
+ maxParam = currentParam;
+ break;
+#endif
+
+#if defined(QUALIFIER_ROUNDING_UPPER)
+ case QUALIFIER_ROUNDING_UPPER:
+ flags |= FLAGS_ROUNDING;
+ break;
+#endif
+
+ default:
+ /* Bail out completely to make the error more obvious */
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ }
+ } /* while qualifier */
+
+ /*
+ * Parameters only need the type and value. The value is
+ * read later.
+ */
+ if (flags & FLAGS_WIDTH_PARAMETER)
+ {
+ usedEntries[width] += 1;
+ parameters[pos].type = FORMAT_PARAMETER;
+ parameters[pos].flags = 0;
+ indices[width] = pos;
+ width = pos++;
+ }
+ if (flags & FLAGS_PRECISION_PARAMETER)
+ {
+ usedEntries[precision] += 1;
+ parameters[pos].type = FORMAT_PARAMETER;
+ parameters[pos].flags = 0;
+ indices[precision] = pos;
+ precision = pos++;
+ }
+ if (flags & FLAGS_BASE_PARAMETER)
+ {
+ usedEntries[base] += 1;
+ parameters[pos].type = FORMAT_PARAMETER;
+ parameters[pos].flags = 0;
+ indices[base] = pos;
+ base = pos++;
+ }
+ if (flags & FLAGS_VARSIZE_PARAMETER)
+ {
+ usedEntries[varsize] += 1;
+ parameters[pos].type = FORMAT_PARAMETER;
+ parameters[pos].flags = 0;
+ indices[varsize] = pos;
+ varsize = pos++;
+ }
+
+ indices[currentParam] = pos;
+
+ switch (format[index++])
+ {
+#if defined(SPECIFIER_CHAR_UPPER)
+ case SPECIFIER_CHAR_UPPER:
+ flags |= FLAGS_WIDECHAR;
+ /* FALLTHROUGH */
+#endif
+ case SPECIFIER_CHAR:
+ if (flags & FLAGS_LONG)
+ flags |= FLAGS_WIDECHAR;
+ else if (flags & FLAGS_SHORT)
+ flags &= ~FLAGS_WIDECHAR;
+ parameters[pos].type = FORMAT_CHAR;
+ break;
+
+#if defined(SPECIFIER_STRING_UPPER)
+ case SPECIFIER_STRING_UPPER:
+ flags |= FLAGS_WIDECHAR;
+ /* FALLTHROUGH */
+#endif
+ case SPECIFIER_STRING:
+ if (flags & FLAGS_LONG)
+ flags |= FLAGS_WIDECHAR;
+ else if (flags & FLAGS_SHORT)
+ flags &= ~FLAGS_WIDECHAR;
+ parameters[pos].type = FORMAT_STRING;
+ break;
+
+ case SPECIFIER_GROUP:
+ if (TYPE_SCAN == type)
+ {
+ int depth = 1;
+ parameters[pos].type = FORMAT_GROUP;
+ if (format[index] == QUALIFIER_CIRCUMFLEX)
+ index++;
+ if (format[index] == SPECIFIER_UNGROUP)
+ index++;
+ if (format[index] == QUALIFIER_MINUS)
+ index++;
+ /* Skip nested brackets */
+ while (format[index] != NIL)
+ {
+ if (format[index] == SPECIFIER_GROUP)
+ {
+ depth++;
+ }
+ else if (format[index] == SPECIFIER_UNGROUP)
+ {
+ if (--depth <= 0)
+ {
+ index++;
+ break;
+ }
+ }
+ index++;
+ }
+ }
+ break;
+
+ case SPECIFIER_INTEGER:
+ parameters[pos].type = FORMAT_INT;
+ break;
+
+ case SPECIFIER_UNSIGNED:
+ flags |= FLAGS_UNSIGNED;
+ parameters[pos].type = FORMAT_INT;
+ break;
+
+ case SPECIFIER_DECIMAL:
+ /* Disable base modifier */
+ flags &= ~FLAGS_BASE_PARAMETER;
+ base = BASE_DECIMAL;
+ parameters[pos].type = FORMAT_INT;
+ break;
+
+ case SPECIFIER_OCTAL:
+ flags |= FLAGS_UNSIGNED;
+ flags &= ~FLAGS_BASE_PARAMETER;
+ base = BASE_OCTAL;
+ parameters[pos].type = FORMAT_INT;
+ break;
+
+#if defined(SPECIFIER_BINARY)
+ case SPECIFIER_BINARY_UPPER:
+ flags |= FLAGS_UPPER;
+ /* FALLTHROUGH */
+ case SPECIFIER_BINARY:
+ flags |= FLAGS_NILPADDING;
+ flags &= ~FLAGS_BASE_PARAMETER;
+ base = BASE_BINARY;
+ parameters[pos].type = FORMAT_INT;
+ break;
+#endif
+
+ case SPECIFIER_HEX_UPPER:
+ flags |= FLAGS_UPPER;
+ /* FALLTHROUGH */
+ case SPECIFIER_HEX:
+ flags |= FLAGS_UNSIGNED;
+ flags &= ~FLAGS_BASE_PARAMETER;
+ base = BASE_HEX;
+ parameters[pos].type = FORMAT_INT;
+ break;
+
+ case SPECIFIER_FLOAT_E_UPPER:
+ flags |= FLAGS_UPPER;
+ /* FALLTHROUGH */
+ case SPECIFIER_FLOAT_E:
+ flags |= FLAGS_FLOAT_E;
+ parameters[pos].type = FORMAT_DOUBLE;
+ break;
+
+ case SPECIFIER_FLOAT_G_UPPER:
+ flags |= FLAGS_UPPER;
+ /* FALLTHROUGH */
+ case SPECIFIER_FLOAT_G:
+ flags |= FLAGS_FLOAT_G;
+ parameters[pos].type = FORMAT_DOUBLE;
+ break;
+
+ case SPECIFIER_FLOAT_F_UPPER:
+ flags |= FLAGS_UPPER;
+ /* FALLTHROUGH */
+ case SPECIFIER_FLOAT_F:
+ parameters[pos].type = FORMAT_DOUBLE;
+ break;
+
+ case SPECIFIER_POINTER:
+ if (sizeof(trio_pointer_t) == sizeof(trio_ulonglong_t))
+ flags |= FLAGS_QUAD;
+ else if (sizeof(trio_pointer_t) == sizeof(long))
+ flags |= FLAGS_LONG;
+ parameters[pos].type = FORMAT_POINTER;
+ break;
+
+ case SPECIFIER_COUNT:
+ parameters[pos].type = FORMAT_COUNT;
+ break;
+
+#if defined(SPECIFIER_HEXFLOAT)
+# if defined(SPECIFIER_HEXFLOAT_UPPER)
+ case SPECIFIER_HEXFLOAT_UPPER:
+ flags |= FLAGS_UPPER;
+ /* FALLTHROUGH */
+# endif
+ case SPECIFIER_HEXFLOAT:
+ base = BASE_HEX;
+ parameters[pos].type = FORMAT_DOUBLE;
+ break;
+#endif
+
+#if defined(FORMAT_ERRNO)
+ case SPECIFIER_ERRNO:
+ parameters[pos].type = FORMAT_ERRNO;
+ break;
+#endif
+
+#if defined(SPECIFIER_USER_DEFINED_BEGIN)
+ case SPECIFIER_USER_DEFINED_BEGIN:
+ {
+ unsigned int max;
+ int without_namespace = TRUE;
+
+ parameters[pos].type = FORMAT_USER_DEFINED;
+ parameters[pos].user_name[0] = NIL;
+ tmpformat = (char *)&format[index];
+
+ while ((ch = format[index]))
+ {
+ index++;
+ if (ch == SPECIFIER_USER_DEFINED_END)
+ {
+ if (without_namespace)
+ {
+ /* We must get the handle first */
+ parameters[pos].type = FORMAT_PARAMETER;
+ parameters[pos].indexAfterSpecifier = index;
+ parameters[pos].flags = FLAGS_USER_DEFINED;
+ /* Adjust parameters for insertion of new one */
+ pos++;
+ usedEntries[currentParam] += 1;
+ parameters[pos].type = FORMAT_USER_DEFINED;
+ currentParam++;
+ indices[currentParam] = pos;
+ if (currentParam > maxParam)
+ maxParam = currentParam;
+ }
+ /* Copy the user data */
+ max = (unsigned int)(&format[index] - tmpformat);
+ if (max > MAX_USER_DATA)
+ max = MAX_USER_DATA;
+ trio_copy_max(parameters[pos].user_data,
+ max,
+ tmpformat);
+ break; /* while */
+ }
+ if (ch == SPECIFIER_USER_DEFINED_SEPARATOR)
+ {
+ without_namespace = FALSE;
+ /* Copy the namespace for later looking-up */
+ max = (int)(&format[index] - tmpformat);
+ if (max > MAX_USER_NAME)
+ max = MAX_USER_NAME;
+ trio_copy_max(parameters[pos].user_name,
+ max,
+ tmpformat);
+ tmpformat = (char *)&format[index];
+ }
+ }
+ if (ch != SPECIFIER_USER_DEFINED_END)
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ }
+ break;
+#endif /* defined(SPECIFIER_USER_DEFINED_BEGIN) */
+
+ default:
+ /* Bail out completely to make the error more obvious */
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ }
+
+ /* Count the number of times this entry has been used */
+ usedEntries[currentParam] += 1;
+
+ /* Find last sticky parameters */
+ if (gotSticky && !(flags & FLAGS_STICKY))
+ {
+ for (i = pos - 1; i >= 0; i--)
+ {
+ if (parameters[i].type == FORMAT_PARAMETER)
+ continue;
+ if ((parameters[i].flags & FLAGS_STICKY) &&
+ (parameters[i].type == parameters[pos].type))
+ {
+ /* Do not overwrite current qualifiers */
+ flags |= (parameters[i].flags & (unsigned long)~FLAGS_STICKY);
+ if (width == NO_WIDTH)
+ width = parameters[i].width;
+ if (precision == NO_PRECISION)
+ precision = parameters[i].precision;
+ if (base == NO_BASE)
+ base = parameters[i].base;
+ break;
+ }
+ }
+ }
+
+ parameters[pos].indexAfterSpecifier = index;
+ parameters[pos].flags = flags;
+ parameters[pos].width = width;
+ parameters[pos].precision = precision;
+ parameters[pos].base = (base == NO_BASE) ? BASE_DECIMAL : base;
+ parameters[pos].varsize = varsize;
+ pos++;
+
+ if (! positional)
+ parameterPosition++;
+
+ } /* if identifier */
+
+ } /* while format characters left */
+
+ for (num = 0; num <= maxParam; num++)
+ {
+ if (usedEntries[num] != 1)
+ {
+ if (usedEntries[num] == 0) /* gap detected */
+ return TRIO_ERROR_RETURN(TRIO_EGAP, num);
+ else /* double references detected */
+ return TRIO_ERROR_RETURN(TRIO_EDBLREF, num);
+ }
+
+ i = indices[num];
+
+ /*
+ * FORMAT_PARAMETERS are only present if they must be read,
+ * so it makes no sense to check the ignore flag (besides,
+ * the flags variable is not set for that particular type)
+ */
+ if ((parameters[i].type != FORMAT_PARAMETER) &&
+ (parameters[i].flags & FLAGS_IGNORE))
+ continue; /* for all arguments */
+
+ /*
+ * The stack arguments are read according to ANSI C89
+ * default argument promotions:
+ *
+ * char = int
+ * short = int
+ * unsigned char = unsigned int
+ * unsigned short = unsigned int
+ * float = double
+ *
+ * In addition to the ANSI C89 these types are read (the
+ * default argument promotions of C99 has not been
+ * considered yet)
+ *
+ * long long
+ * long double
+ * size_t
+ * ptrdiff_t
+ * intmax_t
+ */
+ switch (parameters[i].type)
+ {
+ case FORMAT_GROUP:
+ case FORMAT_STRING:
+#if TRIO_WIDECHAR
+ if (flags & FLAGS_WIDECHAR)
+ {
+ parameters[i].data.wstring = (argarray == NULL)
+ ? va_arg(*arglist, trio_wchar_t *)
+ : (trio_wchar_t *)(argarray[num]);
+ }
+ else
+#endif
+ {
+ parameters[i].data.string = (argarray == NULL)
+ ? va_arg(*arglist, char *)
+ : (char *)(argarray[num]);
+ }
+ break;
+
+#if defined(FORMAT_USER_DEFINED)
+ case FORMAT_USER_DEFINED:
+#endif
+ case FORMAT_POINTER:
+ case FORMAT_COUNT:
+ case FORMAT_UNKNOWN:
+ parameters[i].data.pointer = (argarray == NULL)
+ ? va_arg(*arglist, trio_pointer_t )
+ : argarray[num];
+ break;
+
+ case FORMAT_CHAR:
+ case FORMAT_INT:
+ if (TYPE_SCAN == type)
+ {
+ if (argarray == NULL)
+ parameters[i].data.pointer =
+ (trio_pointer_t)va_arg(*arglist, trio_pointer_t);
+ else
+ {
+ if (parameters[i].type == FORMAT_CHAR)
+ parameters[i].data.pointer =
+ (trio_pointer_t)((char *)argarray[num]);
+ else if (parameters[i].flags & FLAGS_SHORT)
+ parameters[i].data.pointer =
+ (trio_pointer_t)((short *)argarray[num]);
+ else
+ parameters[i].data.pointer =
+ (trio_pointer_t)((int *)argarray[num]);
+ }
+ }
+ else
+ {
+#if defined(QUALIFIER_VARSIZE) || defined(QUALIFIER_FIXED_SIZE)
+ if (parameters[i].flags
+ & (FLAGS_VARSIZE_PARAMETER | FLAGS_FIXED_SIZE))
+ {
+ if (parameters[i].flags & FLAGS_VARSIZE_PARAMETER)
+ {
+ /*
+ * Variable sizes are mapped onto the fixed sizes, in
+ * accordance with integer promotion.
+ *
+ * Please note that this may not be portable, as we
+ * only guess the size, not the layout of the numbers.
+ * For example, if int is little-endian, and long is
+ * big-endian, then this will fail.
+ */
+ varsize = (int)parameters[parameters[i].varsize].data.number.as_unsigned;
+ }
+ else
+ {
+ /* Used for the I<bits> modifiers */
+ varsize = parameters[i].varsize;
+ }
+ parameters[i].flags &= ~FLAGS_ALL_VARSIZES;
+
+ if (varsize <= (int)sizeof(int))
+ ;
+ else if (varsize <= (int)sizeof(long))
+ parameters[i].flags |= FLAGS_LONG;
+#if defined(QUALIFIER_INTMAX_T)
+ else if (varsize <= (int)sizeof(trio_longlong_t))
+ parameters[i].flags |= FLAGS_QUAD;
+ else
+ parameters[i].flags |= FLAGS_INTMAX_T;
+#else
+ else
+ parameters[i].flags |= FLAGS_QUAD;
+#endif
+ }
+#endif /* defined(QUALIFIER_VARSIZE) */
+#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
+ if (parameters[i].flags & FLAGS_SIZE_T)
+ parameters[i].data.number.as_unsigned = (argarray == NULL)
+ ? (trio_uintmax_t)va_arg(*arglist, size_t)
+ : (trio_uintmax_t)(*((size_t *)argarray[num]));
+ else
+#endif
+#if defined(QUALIFIER_PTRDIFF_T)
+ if (parameters[i].flags & FLAGS_PTRDIFF_T)
+ parameters[i].data.number.as_unsigned = (argarray == NULL)
+ ? (trio_uintmax_t)va_arg(*arglist, ptrdiff_t)
+ : (trio_uintmax_t)(*((ptrdiff_t *)argarray[num]));
+ else
+#endif
+#if defined(QUALIFIER_INTMAX_T)
+ if (parameters[i].flags & FLAGS_INTMAX_T)
+ parameters[i].data.number.as_unsigned = (argarray == NULL)
+ ? (trio_uintmax_t)va_arg(*arglist, trio_intmax_t)
+ : (trio_uintmax_t)(*((trio_intmax_t *)argarray[num]));
+ else
+#endif
+ if (parameters[i].flags & FLAGS_QUAD)
+ parameters[i].data.number.as_unsigned = (argarray == NULL)
+ ? (trio_uintmax_t)va_arg(*arglist, trio_ulonglong_t)
+ : (trio_uintmax_t)(*((trio_ulonglong_t *)argarray[num]));
+ else if (parameters[i].flags & FLAGS_LONG)
+ parameters[i].data.number.as_unsigned = (argarray == NULL)
+ ? (trio_uintmax_t)va_arg(*arglist, long)
+ : (trio_uintmax_t)(*((long *)argarray[num]));
+ else
+ {
+ if (argarray == NULL)
+ parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(*arglist, int);
+ else
+ {
+ if (parameters[i].type == FORMAT_CHAR)
+ parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((char *)argarray[num]));
+ else if (parameters[i].flags & FLAGS_SHORT)
+ parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((short *)argarray[num]));
+ else
+ parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((int *)argarray[num]));
+ }
+ }
+ }
+ break;
+
+ case FORMAT_PARAMETER:
+ /*
+ * The parameter for the user-defined specifier is a pointer,
+ * whereas the rest (width, precision, base) uses an integer.
+ */
+ if (parameters[i].flags & FLAGS_USER_DEFINED)
+ parameters[i].data.pointer = (argarray == NULL)
+ ? va_arg(*arglist, trio_pointer_t )
+ : argarray[num];
+ else
+ parameters[i].data.number.as_unsigned = (argarray == NULL)
+ ? (trio_uintmax_t)va_arg(*arglist, int)
+ : (trio_uintmax_t)(*((int *)argarray[num]));
+ break;
+
+ case FORMAT_DOUBLE:
+ if (TYPE_SCAN == type)
+ {
+ if (parameters[i].flags & FLAGS_LONGDOUBLE)
+ parameters[i].data.longdoublePointer = (argarray == NULL)
+ ? va_arg(*arglist, trio_long_double_t *)
+ : (trio_long_double_t *)argarray[num];
+ else
+ {
+ if (parameters[i].flags & FLAGS_LONG)
+ parameters[i].data.doublePointer = (argarray == NULL)
+ ? va_arg(*arglist, double *)
+ : (double *)argarray[num];
+ else
+ parameters[i].data.doublePointer = (argarray == NULL)
+ ? (double *)va_arg(*arglist, float *)
+ : (double *)((float *)argarray[num]);
+ }
+ }
+ else
+ {
+ if (parameters[i].flags & FLAGS_LONGDOUBLE)
+ parameters[i].data.longdoubleNumber = (argarray == NULL)
+ ? va_arg(*arglist, trio_long_double_t)
+ : (trio_long_double_t)(*((trio_long_double_t *)argarray[num]));
+ else
+ {
+ if (argarray == NULL)
+ parameters[i].data.longdoubleNumber =
+ (trio_long_double_t)va_arg(*arglist, double);
+ else
+ {
+ if (parameters[i].flags & FLAGS_SHORT)
+ parameters[i].data.longdoubleNumber =
+ (trio_long_double_t)(*((float *)argarray[num]));
+ else
+ parameters[i].data.longdoubleNumber =
+ (trio_long_double_t)(*((double *)argarray[num]));
+ }
+ }
+ }
+ break;
+
+#if defined(FORMAT_ERRNO)
+ case FORMAT_ERRNO:
+ parameters[i].data.errorNumber = save_errno;
+ break;
+#endif
+
+ default:
+ break;
+ }
+ } /* for all specifiers */
+ return num;
+}
+
+
+/*************************************************************************
+ *
+ * FORMATTING
+ *
+ ************************************************************************/
+
+
+/*************************************************************************
+ * TrioWriteNumber
+ *
+ * Description:
+ * Output a number.
+ * The complexity of this function is a result of the complexity
+ * of the dependencies of the flags.
+ */
+TRIO_PRIVATE void
+TrioWriteNumber
+TRIO_ARGS6((self, number, flags, width, precision, base),
+ trio_class_t *self,
+ trio_uintmax_t number,
+ trio_flags_t flags,
+ int width,
+ int precision,
+ int base)
+{
+ BOOLEAN_T isNegative;
+ BOOLEAN_T isNumberZero;
+ BOOLEAN_T isPrecisionZero;
+ BOOLEAN_T ignoreNumber;
+ char buffer[MAX_CHARS_IN(trio_uintmax_t) * (1 + MAX_LOCALE_SEPARATOR_LENGTH) + 1];
+ char *bufferend;
+ char *pointer;
+ TRIO_CONST char *digits;
+ int i;
+ int length;
+ char *p;
+ int count;
+
+ assert(VALID(self));
+ assert(VALID(self->OutStream));
+ assert(((base >= MIN_BASE) && (base <= MAX_BASE)) || (base == NO_BASE));
+
+ digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
+ if (base == NO_BASE)
+ base = BASE_DECIMAL;
+
+ isNumberZero = (number == 0);
+ isPrecisionZero = (precision == 0);
+ ignoreNumber = (isNumberZero
+ && isPrecisionZero
+ && !((flags & FLAGS_ALTERNATIVE) && (base == BASE_OCTAL)));
+
+ if (flags & FLAGS_UNSIGNED)
+ {
+ isNegative = FALSE;
+ flags &= ~FLAGS_SHOWSIGN;
+ }
+ else
+ {
+ isNegative = ((trio_intmax_t)number < 0);
+ if (isNegative)
+ number = -((trio_intmax_t)number);
+ }
+
+ if (flags & FLAGS_QUAD)
+ number &= (trio_ulonglong_t)-1;
+ else if (flags & FLAGS_LONG)
+ number &= (unsigned long)-1;
+ else
+ number &= (unsigned int)-1;
+
+ /* Build number */
+ pointer = bufferend = &buffer[sizeof(buffer) - 1];
+ *pointer-- = NIL;
+ for (i = 1; i < (int)sizeof(buffer); i++)
+ {
+ *pointer-- = digits[number % base];
+ number /= base;
+ if (number == 0)
+ break;
+
+ if ((flags & FLAGS_QUOTE) && TrioFollowedBySeparator(i + 1))
+ {
+ /*
+ * We are building the number from the least significant
+ * to the most significant digit, so we have to copy the
+ * thousand separator backwards
+ */
+ length = internalThousandSeparatorLength;
+ if (((int)(pointer - buffer) - length) > 0)
+ {
+ p = &internalThousandSeparator[length - 1];
+ while (length-- > 0)
+ *pointer-- = *p--;
+ }
+ }
+ }
+
+ if (! ignoreNumber)
+ {
+ /* Adjust width */
+ width -= (bufferend - pointer) - 1;
+ }
+
+ /* Adjust precision */
+ if (NO_PRECISION != precision)
+ {
+ precision -= (bufferend - pointer) - 1;
+ if (precision < 0)
+ precision = 0;
+ flags |= FLAGS_NILPADDING;
+ }
+
+ /* Calculate padding */
+ count = (! ((flags & FLAGS_LEFTADJUST) || (precision == NO_PRECISION)))
+ ? precision
+ : 0;
+
+ /* Adjust width further */
+ if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
+ width--;
+ if ((flags & FLAGS_ALTERNATIVE) && !isNumberZero)
+ {
+ switch (base)
+ {
+ case BASE_BINARY:
+ case BASE_HEX:
+ width -= 2;
+ break;
+ case BASE_OCTAL:
+ if (!(flags & FLAGS_NILPADDING) || (count == 0))
+ width--;
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* Output prefixes spaces if needed */
+ if (! ((flags & FLAGS_LEFTADJUST) ||
+ ((flags & FLAGS_NILPADDING) && (precision == NO_PRECISION))))
+ {
+ while (width-- > count)
+ self->OutStream(self, CHAR_ADJUST);
+ }
+
+ /* width has been adjusted for signs and alternatives */
+ if (isNegative)
+ self->OutStream(self, '-');
+ else if (flags & FLAGS_SHOWSIGN)
+ self->OutStream(self, '+');
+ else if (flags & FLAGS_SPACE)
+ self->OutStream(self, ' ');
+
+ /* Prefix is not written when the value is zero */
+ if ((flags & FLAGS_ALTERNATIVE) && !isNumberZero)
+ {
+ switch (base)
+ {
+ case BASE_BINARY:
+ self->OutStream(self, '0');
+ self->OutStream(self, (flags & FLAGS_UPPER) ? 'B' : 'b');
+ break;
+
+ case BASE_OCTAL:
+ if (!(flags & FLAGS_NILPADDING) || (count == 0))
+ self->OutStream(self, '0');
+ break;
+
+ case BASE_HEX:
+ self->OutStream(self, '0');
+ self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
+ break;
+
+ default:
+ break;
+ } /* switch base */
+ }
+
+ /* Output prefixed zero padding if needed */
+ if (flags & FLAGS_NILPADDING)
+ {
+ if (precision == NO_PRECISION)
+ precision = width;
+ while (precision-- > 0)
+ {
+ self->OutStream(self, '0');
+ width--;
+ }
+ }
+
+ if (! ignoreNumber)
+ {
+ /* Output the number itself */
+ while (*(++pointer))
+ {
+ self->OutStream(self, *pointer);
+ }
+ }
+
+ /* Output trailing spaces if needed */
+ if (flags & FLAGS_LEFTADJUST)
+ {
+ while (width-- > 0)
+ self->OutStream(self, CHAR_ADJUST);
+ }
+}
+
+/*************************************************************************
+ * TrioWriteStringCharacter
+ *
+ * Description:
+ * Output a single character of a string
+ */
+TRIO_PRIVATE void
+TrioWriteStringCharacter
+TRIO_ARGS3((self, ch, flags),
+ trio_class_t *self,
+ int ch,
+ trio_flags_t flags)
+{
+ if (flags & FLAGS_ALTERNATIVE)
+ {
+ if (! isprint(ch))
+ {
+ /*
+ * Non-printable characters are converted to C escapes or
+ * \number, if no C escape exists.
+ */
+ self->OutStream(self, CHAR_BACKSLASH);
+ switch (ch)
+ {
+ case '\007': self->OutStream(self, 'a'); break;
+ case '\b': self->OutStream(self, 'b'); break;
+ case '\f': self->OutStream(self, 'f'); break;
+ case '\n': self->OutStream(self, 'n'); break;
+ case '\r': self->OutStream(self, 'r'); break;
+ case '\t': self->OutStream(self, 't'); break;
+ case '\v': self->OutStream(self, 'v'); break;
+ case '\\': self->OutStream(self, '\\'); break;
+ default:
+ self->OutStream(self, 'x');
+ TrioWriteNumber(self, (trio_uintmax_t)ch,
+ FLAGS_UNSIGNED | FLAGS_NILPADDING,
+ 2, 2, BASE_HEX);
+ break;
+ }
+ }
+ else if (ch == CHAR_BACKSLASH)
+ {
+ self->OutStream(self, CHAR_BACKSLASH);
+ self->OutStream(self, CHAR_BACKSLASH);
+ }
+ else
+ {
+ self->OutStream(self, ch);
+ }
+ }
+ else
+ {
+ self->OutStream(self, ch);
+ }
+}
+
+/*************************************************************************
+ * TrioWriteString
+ *
+ * Description:
+ * Output a string
+ */
+TRIO_PRIVATE void
+TrioWriteString
+TRIO_ARGS5((self, string, flags, width, precision),
+ trio_class_t *self,
+ TRIO_CONST char *string,
+ trio_flags_t flags,
+ int width,
+ int precision)
+{
+ int length;
+ int ch;
+
+ assert(VALID(self));
+ assert(VALID(self->OutStream));
+
+ if (string == NULL)
+ {
+ string = internalNullString;
+ length = sizeof(internalNullString) - 1;
+ /* Disable quoting for the null pointer */
+ flags &= (~FLAGS_QUOTE);
+ width = 0;
+ }
+ else
+ {
+ length = trio_length(string);
+ }
+ if ((NO_PRECISION != precision) &&
+ (precision < length))
+ {
+ length = precision;
+ }
+ width -= length;
+
+ if (flags & FLAGS_QUOTE)
+ self->OutStream(self, CHAR_QUOTE);
+
+ if (! (flags & FLAGS_LEFTADJUST))
+ {
+ while (width-- > 0)
+ self->OutStream(self, CHAR_ADJUST);
+ }
+
+ while (length-- > 0)
+ {
+ /* The ctype parameters must be an unsigned char (or EOF) */
+ ch = (int)((unsigned char)(*string++));
+ TrioWriteStringCharacter(self, ch, flags);
+ }
+
+ if (flags & FLAGS_LEFTADJUST)
+ {
+ while (width-- > 0)
+ self->OutStream(self, CHAR_ADJUST);
+ }
+ if (flags & FLAGS_QUOTE)
+ self->OutStream(self, CHAR_QUOTE);
+}
+
+/*************************************************************************
+ * TrioWriteWideStringCharacter
+ *
+ * Description:
+ * Output a wide string as a multi-byte sequence
+ */
+#if TRIO_WIDECHAR
+TRIO_PRIVATE int
+TrioWriteWideStringCharacter
+TRIO_ARGS4((self, wch, flags, width),
+ trio_class_t *self,
+ trio_wchar_t wch,
+ trio_flags_t flags,
+ int width)
+{
+ int size;
+ int i;
+ int ch;
+ char *string;
+ char buffer[MB_LEN_MAX + 1];
+
+ if (width == NO_WIDTH)
+ width = sizeof(buffer);
+
+ size = wctomb(buffer, wch);
+ if ((size <= 0) || (size > width) || (buffer[0] == NIL))
+ return 0;
+
+ string = buffer;
+ i = size;
+ while ((width >= i) && (width-- > 0) && (i-- > 0))
+ {
+ /* The ctype parameters must be an unsigned char (or EOF) */
+ ch = (int)((unsigned char)(*string++));
+ TrioWriteStringCharacter(self, ch, flags);
+ }
+ return size;
+}
+#endif /* TRIO_WIDECHAR */
+
+/*************************************************************************
+ * TrioWriteWideString
+ *
+ * Description:
+ * Output a wide character string as a multi-byte string
+ */
+#if TRIO_WIDECHAR
+TRIO_PRIVATE void
+TrioWriteWideString
+TRIO_ARGS5((self, wstring, flags, width, precision),
+ trio_class_t *self,
+ TRIO_CONST trio_wchar_t *wstring,
+ trio_flags_t flags,
+ int width,
+ int precision)
+{
+ int length;
+ int size;
+
+ assert(VALID(self));
+ assert(VALID(self->OutStream));
+
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ (void)mblen(NULL, 0);
+#endif
+
+ if (wstring == NULL)
+ {
+ TrioWriteString(self, NULL, flags, width, precision);
+ return;
+ }
+
+ if (NO_PRECISION == precision)
+ {
+ length = INT_MAX;
+ }
+ else
+ {
+ length = precision;
+ width -= length;
+ }
+
+ if (flags & FLAGS_QUOTE)
+ self->OutStream(self, CHAR_QUOTE);
+
+ if (! (flags & FLAGS_LEFTADJUST))
+ {
+ while (width-- > 0)
+ self->OutStream(self, CHAR_ADJUST);
+ }
+
+ while (length > 0)
+ {
+ size = TrioWriteWideStringCharacter(self, *wstring++, flags, length);
+ if (size == 0)
+ break; /* while */
+ length -= size;
+ }
+
+ if (flags & FLAGS_LEFTADJUST)
+ {
+ while (width-- > 0)
+ self->OutStream(self, CHAR_ADJUST);
+ }
+ if (flags & FLAGS_QUOTE)
+ self->OutStream(self, CHAR_QUOTE);
+}
+#endif /* TRIO_WIDECHAR */
+
+/*************************************************************************
+ * TrioWriteDouble
+ *
+ * http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/dr_211.htm
+ *
+ * "5.2.4.2.2 paragraph #4
+ *
+ * The accuracy [...] is implementation defined, as is the accuracy
+ * of the conversion between floating-point internal representations
+ * and string representations performed by the libray routine in
+ * <stdio.h>"
+ */
+/* FIXME: handle all instances of constant long-double number (L)
+ * and *l() math functions.
+ */
+TRIO_PRIVATE void
+TrioWriteDouble
+TRIO_ARGS6((self, number, flags, width, precision, base),
+ trio_class_t *self,
+ trio_long_double_t number,
+ trio_flags_t flags,
+ int width,
+ int precision,
+ int base)
+{
+ trio_long_double_t integerNumber;
+ trio_long_double_t fractionNumber;
+ trio_long_double_t workNumber;
+ int integerDigits;
+ int fractionDigits;
+ int exponentDigits;
+ int baseDigits;
+ int integerThreshold;
+ int fractionThreshold;
+ int expectedWidth;
+ int exponent = 0;
+ unsigned int uExponent = 0;
+ int exponentBase;
+ trio_long_double_t dblBase;
+ trio_long_double_t dblIntegerBase;
+ trio_long_double_t dblFractionBase;
+ trio_long_double_t integerAdjust;
+ trio_long_double_t fractionAdjust;
+ BOOLEAN_T isNegative;
+ BOOLEAN_T isExponentNegative = FALSE;
+ BOOLEAN_T requireTwoDigitExponent;
+ BOOLEAN_T isHex;
+ TRIO_CONST char *digits;
+ char *groupingPointer;
+ int i;
+ int index;
+ BOOLEAN_T hasOnlyZeroes;
+ int zeroes = 0;
+ register int trailingZeroes;
+ BOOLEAN_T keepTrailingZeroes;
+ BOOLEAN_T keepDecimalPoint;
+ trio_long_double_t epsilon;
+
+ assert(VALID(self));
+ assert(VALID(self->OutStream));
+ assert(((base >= MIN_BASE) && (base <= MAX_BASE)) || (base == NO_BASE));
+
+ /* Determine sign and look for special quantities */
+ switch (trio_fpclassify_and_signbit(number, &isNegative))
+ {
+ case TRIO_FP_NAN:
+ TrioWriteString(self,
+ (flags & FLAGS_UPPER)
+ ? NAN_UPPER
+ : NAN_LOWER,
+ flags, width, precision);
+ return;
+
+ case TRIO_FP_INFINITE:
+ if (isNegative)
+ {
+ /* Negative infinity */
+ TrioWriteString(self,
+ (flags & FLAGS_UPPER)
+ ? "-" INFINITE_UPPER
+ : "-" INFINITE_LOWER,
+ flags, width, precision);
+ return;
+ }
+ else
+ {
+ /* Positive infinity */
+ TrioWriteString(self,
+ (flags & FLAGS_UPPER)
+ ? INFINITE_UPPER
+ : INFINITE_LOWER,
+ flags, width, precision);
+ return;
+ }
+
+ default:
+ /* Finitude */
+ break;
+ }
+
+ /* Normal numbers */
+ if (flags & FLAGS_LONGDOUBLE)
+ {
+ baseDigits = (base == 10)
+ ? LDBL_DIG
+ : (int)floor(LDBL_MANT_DIG / TrioLogarithmBase(base));
+ epsilon = LDBL_EPSILON;
+ }
+ else if (flags & FLAGS_SHORT)
+ {
+ baseDigits = (base == BASE_DECIMAL)
+ ? FLT_DIG
+ : (int)floor(FLT_MANT_DIG / TrioLogarithmBase(base));
+ epsilon = FLT_EPSILON;
+ }
+ else
+ {
+ baseDigits = (base == BASE_DECIMAL)
+ ? DBL_DIG
+ : (int)floor(DBL_MANT_DIG / TrioLogarithmBase(base));
+ epsilon = DBL_EPSILON;
+ }
+
+ digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
+ isHex = (base == BASE_HEX);
+ if (base == NO_BASE)
+ base = BASE_DECIMAL;
+ dblBase = (trio_long_double_t)base;
+ keepTrailingZeroes = !( (flags & FLAGS_ROUNDING) ||
+ ( (flags & FLAGS_FLOAT_G) &&
+ !(flags & FLAGS_ALTERNATIVE) ) );
+
+ if (flags & FLAGS_ROUNDING)
+ precision = baseDigits;
+
+ if (precision == NO_PRECISION)
+ {
+ if (isHex)
+ {
+ keepTrailingZeroes = FALSE;
+ precision = FLT_MANT_DIG;
+ }
+ else
+ {
+ precision = FLT_DIG;
+ }
+ }
+
+ if (isNegative)
+ number = -number;
+
+ if (isHex)
+ flags |= FLAGS_FLOAT_E;
+
+ if (flags & FLAGS_FLOAT_G)
+ {
+ if (precision == 0)
+ precision = 1;
+
+ if ((number < 1.0E-4) || (number > powl(base,
+ (trio_long_double_t)precision)))
+ {
+ /* Use scientific notation */
+ flags |= FLAGS_FLOAT_E;
+ }
+ else if (number < 1.0)
+ {
+ /*
+ * Use normal notation. If the integer part of the number is
+ * zero, then adjust the precision to include leading fractional
+ * zeros.
+ */
+ workNumber = TrioLogarithm(number, base);
+ workNumber = TRIO_FABS(workNumber);
+ if (workNumber - floorl(workNumber) < 0.001)
+ workNumber--;
+ zeroes = (int)floorl(workNumber);
+ }
+ }
+
+ if (flags & FLAGS_FLOAT_E)
+ {
+ /* Scale the number */
+ workNumber = TrioLogarithm(number, base);
+ if (trio_isinf(workNumber) == -1)
+ {
+ exponent = 0;
+ /* Undo setting */
+ if (flags & FLAGS_FLOAT_G)
+ flags &= ~FLAGS_FLOAT_E;
+ }
+ else
+ {
+ exponent = (int)floorl(workNumber);
+ number /= powl(dblBase, (trio_long_double_t)exponent);
+ isExponentNegative = (exponent < 0);
+ uExponent = (isExponentNegative) ? -exponent : exponent;
+ if (isHex)
+ uExponent *= 4; /* log16(2) */
+ /* No thousand separators */
+ flags &= ~FLAGS_QUOTE;
+ }
+ }
+
+ integerNumber = floorl(number);
+ fractionNumber = number - integerNumber;
+
+ /*
+ * Truncated number.
+ *
+ * Precision is number of significant digits for FLOAT_G
+ * and number of fractional digits for others.
+ */
+ integerDigits = (integerNumber > epsilon)
+ ? 1 + (int)TrioLogarithm(integerNumber, base)
+ : 1;
+ fractionDigits = ((flags & FLAGS_FLOAT_G) && (zeroes == 0))
+ ? precision - integerDigits
+ : zeroes + precision;
+
+ dblFractionBase = TrioPower(base, fractionDigits);
+
+ workNumber = number + 0.5 / dblFractionBase;
+ if (floorl(number) != floorl(workNumber))
+ {
+ if (flags & FLAGS_FLOAT_E)
+ {
+ /* Adjust if number was rounded up one digit (ie. 0.99 to 1.00) */
+ exponent++;
+ isExponentNegative = (exponent < 0);
+ uExponent = (isExponentNegative) ? -exponent : exponent;
+ if (isHex)
+ uExponent *= 4; /* log16(2) */
+ workNumber = (number + 0.5 / dblFractionBase) / dblBase;
+ integerNumber = floorl(workNumber);
+ fractionNumber = workNumber - integerNumber;
+ }
+ else
+ {
+ /* Adjust if number was rounded up one digit (ie. 99 to 100) */
+ integerNumber = floorl(number + 0.5);
+ fractionNumber = 0.0;
+ integerDigits = (integerNumber > epsilon)
+ ? 1 + (int)TrioLogarithm(integerNumber, base)
+ : 1;
+ }
+ }
+
+ /* Estimate accuracy */
+ integerAdjust = fractionAdjust = 0.5;
+ if (flags & FLAGS_ROUNDING)
+ {
+ if (integerDigits > baseDigits)
+ {
+ integerThreshold = baseDigits;
+ fractionDigits = 0;
+ dblFractionBase = 1.0;
+ fractionThreshold = 0;
+ precision = 0; /* Disable decimal-point */
+ integerAdjust = TrioPower(base, integerDigits - integerThreshold - 1);
+ fractionAdjust = 0.0;
+ }
+ else
+ {
+ integerThreshold = integerDigits;
+ fractionThreshold = fractionDigits - integerThreshold;
+ fractionAdjust = 1.0;
+ }
+ }
+ else
+ {
+ integerThreshold = INT_MAX;
+ fractionThreshold = INT_MAX;
+ }
+
+ /*
+ * Calculate expected width.
+ * sign + integer part + thousands separators + decimal point
+ * + fraction + exponent
+ */
+ fractionAdjust /= dblFractionBase;
+ hasOnlyZeroes = (floorl((fractionNumber + fractionAdjust) * dblFractionBase) < epsilon);
+ keepDecimalPoint = ( (flags & FLAGS_ALTERNATIVE) ||
+ !((precision == 0) ||
+ (!keepTrailingZeroes && hasOnlyZeroes)) );
+ if (flags & FLAGS_FLOAT_E)
+ {
+ exponentDigits = (uExponent == 0)
+ ? 1
+ : (int)ceil(TrioLogarithm((double)(uExponent + 1),
+ (isHex) ? 10.0 : base));
+ }
+ else
+ exponentDigits = 0;
+ requireTwoDigitExponent = ((base == BASE_DECIMAL) && (exponentDigits == 1));
+
+ expectedWidth = integerDigits + fractionDigits
+ + (keepDecimalPoint
+ ? internalDecimalPointLength
+ : 0)
+ + ((flags & FLAGS_QUOTE)
+ ? TrioCalcThousandSeparatorLength(integerDigits)
+ : 0);
+ if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
+ expectedWidth += sizeof("-") - 1;
+ if (exponentDigits > 0)
+ expectedWidth += exponentDigits +
+ ((requireTwoDigitExponent ? sizeof("E+0") : sizeof("E+")) - 1);
+ if (isHex)
+ expectedWidth += sizeof("0X") - 1;
+
+ /* Output prefixing */
+ if (flags & FLAGS_NILPADDING)
+ {
+ /* Leading zeros must be after sign */
+ if (isNegative)
+ self->OutStream(self, '-');
+ else if (flags & FLAGS_SHOWSIGN)
+ self->OutStream(self, '+');
+ else if (flags & FLAGS_SPACE)
+ self->OutStream(self, ' ');
+ if (isHex)
+ {
+ self->OutStream(self, '0');
+ self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
+ }
+ if (!(flags & FLAGS_LEFTADJUST))
+ {
+ for (i = expectedWidth; i < width; i++)
+ {
+ self->OutStream(self, '0');
+ }
+ }
+ }
+ else
+ {
+ /* Leading spaces must be before sign */
+ if (!(flags & FLAGS_LEFTADJUST))
+ {
+ for (i = expectedWidth; i < width; i++)
+ {
+ self->OutStream(self, CHAR_ADJUST);
+ }
+ }
+ if (isNegative)
+ self->OutStream(self, '-');
+ else if (flags & FLAGS_SHOWSIGN)
+ self->OutStream(self, '+');
+ else if (flags & FLAGS_SPACE)
+ self->OutStream(self, ' ');
+ if (isHex)
+ {
+ self->OutStream(self, '0');
+ self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
+ }
+ }
+
+ /* Output the integer part and thousand separators */
+ dblIntegerBase = 1.0 / TrioPower(base, integerDigits - 1);
+ for (i = 0; i < integerDigits; i++)
+ {
+ workNumber = floorl(((integerNumber + integerAdjust) * dblIntegerBase));
+ if (i > integerThreshold)
+ {
+ /* Beyond accuracy */
+ self->OutStream(self, digits[0]);
+ }
+ else
+ {
+ self->OutStream(self, digits[(int)fmodl(workNumber, dblBase)]);
+ }
+ dblIntegerBase *= dblBase;
+
+ if (((flags & (FLAGS_FLOAT_E | FLAGS_QUOTE)) == FLAGS_QUOTE)
+ && TrioFollowedBySeparator(integerDigits - i))
+ {
+ for (groupingPointer = internalThousandSeparator;
+ *groupingPointer != NIL;
+ groupingPointer++)
+ {
+ self->OutStream(self, *groupingPointer);
+ }
+ }
+ }
+
+ /* Insert decimal point and build the fraction part */
+ trailingZeroes = 0;
+
+ if (keepDecimalPoint)
+ {
+ if (internalDecimalPoint)
+ {
+ self->OutStream(self, internalDecimalPoint);
+ }
+ else
+ {
+ for (i = 0; i < internalDecimalPointLength; i++)
+ {
+ self->OutStream(self, internalDecimalPointString[i]);
+ }
+ }
+ }
+
+ for (i = 0; i < fractionDigits; i++)
+ {
+ if ((integerDigits > integerThreshold) || (i > fractionThreshold))
+ {
+ /* Beyond accuracy */
+ trailingZeroes++;
+ }
+ else
+ {
+ fractionNumber *= dblBase;
+ fractionAdjust *= dblBase;
+ workNumber = floorl(fractionNumber + fractionAdjust);
+ fractionNumber -= workNumber;
+ index = (int)fmodl(workNumber, dblBase);
+ if (index == 0)
+ {
+ trailingZeroes++;
+ }
+ else
+ {
+ while (trailingZeroes > 0)
+ {
+ /* Not trailing zeroes after all */
+ self->OutStream(self, digits[0]);
+ trailingZeroes--;
+ }
+ self->OutStream(self, digits[index]);
+ }
+ }
+ }
+
+ if (keepTrailingZeroes)
+ {
+ while (trailingZeroes > 0)
+ {
+ self->OutStream(self, digits[0]);
+ trailingZeroes--;
+ }
+ }
+
+ /* Output exponent */
+ if (exponentDigits > 0)
+ {
+ self->OutStream(self,
+ isHex
+ ? ((flags & FLAGS_UPPER) ? 'P' : 'p')
+ : ((flags & FLAGS_UPPER) ? 'E' : 'e'));
+ self->OutStream(self, (isExponentNegative) ? '-' : '+');
+
+ /* The exponent must contain at least two digits */
+ if (requireTwoDigitExponent)
+ self->OutStream(self, '0');
+
+ if (isHex)
+ base = 10.0;
+ exponentBase = (int)TrioPower(base, exponentDigits - 1);
+ for (i = 0; i < exponentDigits; i++)
+ {
+ self->OutStream(self, digits[(uExponent / exponentBase) % base]);
+ exponentBase /= base;
+ }
+ }
+ /* Output trailing spaces */
+ if (flags & FLAGS_LEFTADJUST)
+ {
+ for (i = expectedWidth; i < width; i++)
+ {
+ self->OutStream(self, CHAR_ADJUST);
+ }
+ }
+}
+
+/*************************************************************************
+ * TrioFormatProcess
+ *
+ * Description:
+ * This is the main engine for formatting output
+ */
+TRIO_PRIVATE int
+TrioFormatProcess
+TRIO_ARGS3((data, format, parameters),
+ trio_class_t *data,
+ TRIO_CONST char *format,
+ trio_parameter_t *parameters)
+{
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ int charlen;
+#endif
+ int i;
+ TRIO_CONST char *string;
+ trio_pointer_t pointer;
+ trio_flags_t flags;
+ int width;
+ int precision;
+ int base;
+ int index;
+
+ index = 0;
+ i = 0;
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ (void)mblen(NULL, 0);
+#endif
+
+ while (format[index])
+ {
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ if (! isascii(format[index]))
+ {
+ charlen = mblen(&format[index], MB_LEN_MAX);
+ /*
+ * Only valid multibyte characters are handled here. Invalid
+ * multibyte characters (charlen == -1) are handled as normal
+ * characters.
+ */
+ if (charlen != -1)
+ {
+ while (charlen-- > 0)
+ {
+ data->OutStream(data, format[index++]);
+ }
+ continue; /* while characters left in formatting string */
+ }
+ }
+#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
+ if (CHAR_IDENTIFIER == format[index])
+ {
+ if (CHAR_IDENTIFIER == format[index + 1])
+ {
+ data->OutStream(data, CHAR_IDENTIFIER);
+ index += 2;
+ }
+ else
+ {
+ /* Skip the parameter entries */
+ while (parameters[i].type == FORMAT_PARAMETER)
+ i++;
+
+ flags = parameters[i].flags;
+
+ /* Find width */
+ width = parameters[i].width;
+ if (flags & FLAGS_WIDTH_PARAMETER)
+ {
+ /* Get width from parameter list */
+ width = (int)parameters[width].data.number.as_signed;
+ if (width < 0)
+ {
+ /*
+ * A negative width is the same as the - flag and
+ * a positive width.
+ */
+ flags |= FLAGS_LEFTADJUST;
+ flags &= ~FLAGS_NILPADDING;
+ width = -width;
+ }
+ }
+
+ /* Find precision */
+ if (flags & FLAGS_PRECISION)
+ {
+ precision = parameters[i].precision;
+ if (flags & FLAGS_PRECISION_PARAMETER)
+ {
+ /* Get precision from parameter list */
+ precision = (int)parameters[precision].data.number.as_signed;
+ if (precision < 0)
+ {
+ /*
+ * A negative precision is the same as no
+ * precision
+ */
+ precision = NO_PRECISION;
+ }
+ }
+ }
+ else
+ {
+ precision = NO_PRECISION;
+ }
+
+ /* Find base */
+ base = parameters[i].base;
+ if (flags & FLAGS_BASE_PARAMETER)
+ {
+ /* Get base from parameter list */
+ base = (int)parameters[base].data.number.as_signed;
+ }
+
+ switch (parameters[i].type)
+ {
+ case FORMAT_CHAR:
+ if (flags & FLAGS_QUOTE)
+ data->OutStream(data, CHAR_QUOTE);
+ if (! (flags & FLAGS_LEFTADJUST))
+ {
+ while (--width > 0)
+ data->OutStream(data, CHAR_ADJUST);
+ }
+#if TRIO_WIDECHAR
+ if (flags & FLAGS_WIDECHAR)
+ {
+ TrioWriteWideStringCharacter(data,
+ (trio_wchar_t)parameters[i].data.number.as_signed,
+ flags,
+ NO_WIDTH);
+ }
+ else
+#endif
+ {
+ TrioWriteStringCharacter(data,
+ (int)parameters[i].data.number.as_signed,
+ flags);
+ }
+
+ if (flags & FLAGS_LEFTADJUST)
+ {
+ while(--width > 0)
+ data->OutStream(data, CHAR_ADJUST);
+ }
+ if (flags & FLAGS_QUOTE)
+ data->OutStream(data, CHAR_QUOTE);
+
+ break; /* FORMAT_CHAR */
+
+ case FORMAT_INT:
+ TrioWriteNumber(data,
+ parameters[i].data.number.as_unsigned,
+ flags,
+ width,
+ precision,
+ base);
+
+ break; /* FORMAT_INT */
+
+ case FORMAT_DOUBLE:
+ TrioWriteDouble(data,
+ parameters[i].data.longdoubleNumber,
+ flags,
+ width,
+ precision,
+ base);
+ break; /* FORMAT_DOUBLE */
+
+ case FORMAT_STRING:
+#if TRIO_WIDECHAR
+ if (flags & FLAGS_WIDECHAR)
+ {
+ TrioWriteWideString(data,
+ parameters[i].data.wstring,
+ flags,
+ width,
+ precision);
+ }
+ else
+#endif
+ {
+ TrioWriteString(data,
+ parameters[i].data.string,
+ flags,
+ width,
+ precision);
+ }
+ break; /* FORMAT_STRING */
+
+ case FORMAT_POINTER:
+ {
+ trio_reference_t reference;
+
+ reference.data = data;
+ reference.parameter = &parameters[i];
+ trio_print_pointer(&reference, parameters[i].data.pointer);
+ }
+ break; /* FORMAT_POINTER */
+
+ case FORMAT_COUNT:
+ pointer = parameters[i].data.pointer;
+ if (NULL != pointer)
+ {
+ /*
+ * C99 paragraph 7.19.6.1.8 says "the number of
+ * characters written to the output stream so far by
+ * this call", which is data->committed
+ */
+#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
+ if (flags & FLAGS_SIZE_T)
+ *(size_t *)pointer = (size_t)data->committed;
+ else
+#endif
+#if defined(QUALIFIER_PTRDIFF_T)
+ if (flags & FLAGS_PTRDIFF_T)
+ *(ptrdiff_t *)pointer = (ptrdiff_t)data->committed;
+ else
+#endif
+#if defined(QUALIFIER_INTMAX_T)
+ if (flags & FLAGS_INTMAX_T)
+ *(trio_intmax_t *)pointer = (trio_intmax_t)data->committed;
+ else
+#endif
+ if (flags & FLAGS_QUAD)
+ {
+ *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)data->committed;
+ }
+ else if (flags & FLAGS_LONG)
+ {
+ *(long int *)pointer = (long int)data->committed;
+ }
+ else if (flags & FLAGS_SHORT)
+ {
+ *(short int *)pointer = (short int)data->committed;
+ }
+ else
+ {
+ *(int *)pointer = (int)data->committed;
+ }
+ }
+ break; /* FORMAT_COUNT */
+
+ case FORMAT_PARAMETER:
+ break; /* FORMAT_PARAMETER */
+
+#if defined(FORMAT_ERRNO)
+ case FORMAT_ERRNO:
+ string = trio_error(parameters[i].data.errorNumber);
+ if (string)
+ {
+ TrioWriteString(data,
+ string,
+ flags,
+ width,
+ precision);
+ }
+ else
+ {
+ data->OutStream(data, '#');
+ TrioWriteNumber(data,
+ (trio_uintmax_t)parameters[i].data.errorNumber,
+ flags,
+ width,
+ precision,
+ BASE_DECIMAL);
+ }
+ break; /* FORMAT_ERRNO */
+#endif /* defined(FORMAT_ERRNO) */
+
+#if defined(FORMAT_USER_DEFINED)
+ case FORMAT_USER_DEFINED:
+ {
+ trio_reference_t reference;
+ trio_userdef_t *def = NULL;
+
+ if (parameters[i].user_name[0] == NIL)
+ {
+ /* Use handle */
+ if ((i > 0) ||
+ (parameters[i - 1].type == FORMAT_PARAMETER))
+ def = (trio_userdef_t *)parameters[i - 1].data.pointer;
+ }
+ else
+ {
+ /* Look up namespace */
+ def = TrioFindNamespace(parameters[i].user_name, NULL);
+ }
+ if (def) {
+ reference.data = data;
+ reference.parameter = &parameters[i];
+ def->callback(&reference);
+ }
+ }
+ break;
+#endif /* defined(FORMAT_USER_DEFINED) */
+
+ default:
+ break;
+ } /* switch parameter type */
+
+ /* Prepare for next */
+ index = parameters[i].indexAfterSpecifier;
+ i++;
+ }
+ }
+ else /* not identifier */
+ {
+ data->OutStream(data, format[index++]);
+ }
+ }
+ return data->processed;
+}
+
+/*************************************************************************
+ * TrioFormatRef
+ */
+TRIO_PRIVATE int
+TrioFormatRef
+TRIO_ARGS4((reference, format, arglist, argarray),
+ trio_reference_t *reference,
+ TRIO_CONST char *format,
+ va_list *arglist,
+ trio_pointer_t *argarray)
+{
+ int status;
+ trio_parameter_t parameters[MAX_PARAMETERS];
+
+ status = TrioParse(TYPE_PRINT, format, parameters, arglist, argarray);
+ if (status < 0)
+ return status;
+
+ status = TrioFormatProcess(reference->data, format, parameters);
+ if (reference->data->error != 0)
+ {
+ status = reference->data->error;
+ }
+ return status;
+}
+
+/*************************************************************************
+ * TrioFormat
+ */
+TRIO_PRIVATE int
+TrioFormat
+TRIO_ARGS6((destination, destinationSize, OutStream, format, arglist, argarray),
+ trio_pointer_t destination,
+ size_t destinationSize,
+ void (*OutStream) TRIO_PROTO((trio_class_t *, int)),
+ TRIO_CONST char *format,
+ va_list *arglist,
+ trio_pointer_t *argarray)
+{
+ int status;
+ trio_class_t data;
+ trio_parameter_t parameters[MAX_PARAMETERS];
+
+ assert(VALID(OutStream));
+ assert(VALID(format));
+
+ memset(&data, 0, sizeof(data));
+ data.OutStream = OutStream;
+ data.location = destination;
+ data.max = destinationSize;
+ data.error = 0;
+
+#if defined(USE_LOCALE)
+ if (NULL == internalLocaleValues)
+ {
+ TrioSetLocale();
+ }
+#endif
+
+ status = TrioParse(TYPE_PRINT, format, parameters, arglist, argarray);
+ if (status < 0)
+ return status;
+
+ status = TrioFormatProcess(&data, format, parameters);
+ if (data.error != 0)
+ {
+ status = data.error;
+ }
+ return status;
+}
+
+/*************************************************************************
+ * TrioOutStreamFile
+ */
+TRIO_PRIVATE void
+TrioOutStreamFile
+TRIO_ARGS2((self, output),
+ trio_class_t *self,
+ int output)
+{
+ FILE *file;
+
+ assert(VALID(self));
+ assert(VALID(self->location));
+
+ file = (FILE *)self->location;
+ self->processed++;
+ if (fputc(output, file) == EOF)
+ {
+ self->error = TRIO_ERROR_RETURN(TRIO_EOF, 0);
+ }
+ else
+ {
+ self->committed++;
+ }
+}
+
+/*************************************************************************
+ * TrioOutStreamFileDescriptor
+ */
+TRIO_PRIVATE void
+TrioOutStreamFileDescriptor
+TRIO_ARGS2((self, output),
+ trio_class_t *self,
+ int output)
+{
+ int fd;
+ char ch;
+
+ assert(VALID(self));
+
+ fd = *((int *)self->location);
+ ch = (char)output;
+ self->processed++;
+ if (write(fd, &ch, sizeof(char)) == -1)
+ {
+ self->error = TRIO_ERROR_RETURN(TRIO_ERRNO, 0);
+ }
+ else
+ {
+ self->committed++;
+ }
+}
+
+/*************************************************************************
+ * TrioOutStreamCustom
+ */
+TRIO_PRIVATE void
+TrioOutStreamCustom
+TRIO_ARGS2((self, output),
+ trio_class_t *self,
+ int output)
+{
+ int status;
+ trio_custom_t *data;
+
+ assert(VALID(self));
+ assert(VALID(self->location));
+
+ data = (trio_custom_t *)self->location;
+ if (data->stream.out)
+ {
+ status = (data->stream.out)(data->closure, output);
+ if (status >= 0)
+ {
+ self->committed++;
+ }
+ else
+ {
+ if (self->error == 0)
+ {
+ self->error = TRIO_ERROR_RETURN(TRIO_ECUSTOM, -status);
+ }
+ }
+ }
+ self->processed++;
+}
+
+/*************************************************************************
+ * TrioOutStreamString
+ */
+TRIO_PRIVATE void
+TrioOutStreamString
+TRIO_ARGS2((self, output),
+ trio_class_t *self,
+ int output)
+{
+ char **buffer;
+
+ assert(VALID(self));
+ assert(VALID(self->location));
+
+ buffer = (char **)self->location;
+ **buffer = (char)output;
+ (*buffer)++;
+ self->processed++;
+ self->committed++;
+}
+
+/*************************************************************************
+ * TrioOutStreamStringMax
+ */
+TRIO_PRIVATE void
+TrioOutStreamStringMax
+TRIO_ARGS2((self, output),
+ trio_class_t *self,
+ int output)
+{
+ char **buffer;
+
+ assert(VALID(self));
+ assert(VALID(self->location));
+
+ buffer = (char **)self->location;
+
+ if (self->processed < self->max)
+ {
+ **buffer = (char)output;
+ (*buffer)++;
+ self->committed++;
+ }
+ self->processed++;
+}
+
+/*************************************************************************
+ * TrioOutStreamStringDynamic
+ */
+TRIO_PRIVATE void
+TrioOutStreamStringDynamic
+TRIO_ARGS2((self, output),
+ trio_class_t *self,
+ int output)
+{
+ assert(VALID(self));
+ assert(VALID(self->location));
+
+ if (self->error == 0)
+ {
+ trio_xstring_append_char((trio_string_t *)self->location,
+ (char)output);
+ self->committed++;
+ }
+ /* The processed variable must always be increased */
+ self->processed++;
+}
+
+/*************************************************************************
+ *
+ * Formatted printing functions
+ *
+ ************************************************************************/
+
+#if defined(TRIO_DOCUMENTATION)
+# include "doc/doc_printf.h"
+#endif
+/** @addtogroup Printf
+ @{
+*/
+
+/*************************************************************************
+ * printf
+ */
+
+/**
+ Print to standard output stream.
+
+ @param format Formatting string.
+ @param ... Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_printf
+TRIO_VARGS2((format, va_alist),
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ status = TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL);
+ TRIO_VA_END(args);
+ return status;
+}
+
+/**
+ Print to standard output stream.
+
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_vprintf
+TRIO_ARGS2((format, args),
+ TRIO_CONST char *format,
+ va_list args)
+{
+ assert(VALID(format));
+
+ return TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL);
+}
+
+/**
+ Print to standard output stream.
+
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_printfv
+TRIO_ARGS2((format, args),
+ TRIO_CONST char *format,
+ trio_pointer_t * args)
+{
+ assert(VALID(format));
+
+ return TrioFormat(stdout, 0, TrioOutStreamFile, format, NULL, args);
+}
+
+/*************************************************************************
+ * fprintf
+ */
+
+/**
+ Print to file.
+
+ @param file File pointer.
+ @param format Formatting string.
+ @param ... Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_fprintf
+TRIO_VARGS3((file, format, va_alist),
+ FILE *file,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+
+ assert(VALID(file));
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ status = TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL);
+ TRIO_VA_END(args);
+ return status;
+}
+
+/**
+ Print to file.
+
+ @param file File pointer.
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_vfprintf
+TRIO_ARGS3((file, format, args),
+ FILE *file,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ assert(VALID(file));
+ assert(VALID(format));
+
+ return TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL);
+}
+
+/**
+ Print to file.
+
+ @param file File pointer.
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_fprintfv
+TRIO_ARGS3((file, format, args),
+ FILE *file,
+ TRIO_CONST char *format,
+ trio_pointer_t * args)
+{
+ assert(VALID(file));
+ assert(VALID(format));
+
+ return TrioFormat(file, 0, TrioOutStreamFile, format, NULL, args);
+}
+
+/*************************************************************************
+ * dprintf
+ */
+
+/**
+ Print to file descriptor.
+
+ @param fd File descriptor.
+ @param format Formatting string.
+ @param ... Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_dprintf
+TRIO_VARGS3((fd, format, va_alist),
+ int fd,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL);
+ TRIO_VA_END(args);
+ return status;
+}
+
+/**
+ Print to file descriptor.
+
+ @param fd File descriptor.
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_vdprintf
+TRIO_ARGS3((fd, format, args),
+ int fd,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ assert(VALID(format));
+
+ return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL);
+}
+
+/**
+ Print to file descriptor.
+
+ @param fd File descriptor.
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_dprintfv
+TRIO_ARGS3((fd, format, args),
+ int fd,
+ TRIO_CONST char *format,
+ trio_pointer_t *args)
+{
+ assert(VALID(format));
+
+ return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, NULL, args);
+}
+
+/*************************************************************************
+ * cprintf
+ */
+TRIO_PUBLIC int
+trio_cprintf
+TRIO_VARGS4((stream, closure, format, va_alist),
+ trio_outstream_t stream,
+ trio_pointer_t closure,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+ trio_custom_t data;
+
+ assert(VALID(stream));
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ data.stream.out = stream;
+ data.closure = closure;
+ status = TrioFormat(&data, 0, TrioOutStreamCustom, format, &args, NULL);
+ TRIO_VA_END(args);
+ return status;
+}
+
+TRIO_PUBLIC int
+trio_vcprintf
+TRIO_ARGS4((stream, closure, format, args),
+ trio_outstream_t stream,
+ trio_pointer_t closure,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ trio_custom_t data;
+
+ assert(VALID(stream));
+ assert(VALID(format));
+
+ data.stream.out = stream;
+ data.closure = closure;
+ return TrioFormat(&data, 0, TrioOutStreamCustom, format, &args, NULL);
+}
+
+TRIO_PUBLIC int
+trio_cprintfv
+TRIO_ARGS4((stream, closure, format, args),
+ trio_outstream_t stream,
+ trio_pointer_t closure,
+ TRIO_CONST char *format,
+ void **args)
+{
+ trio_custom_t data;
+
+ assert(VALID(stream));
+ assert(VALID(format));
+
+ data.stream.out = stream;
+ data.closure = closure;
+ return TrioFormat(&data, 0, TrioOutStreamCustom, format, NULL, args);
+}
+
+/*************************************************************************
+ * sprintf
+ */
+
+/**
+ Print to string.
+
+ @param buffer Output string.
+ @param format Formatting string.
+ @param ... Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_sprintf
+TRIO_VARGS3((buffer, format, va_alist),
+ char *buffer,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args, NULL);
+ *buffer = NIL; /* Terminate with NIL character */
+ TRIO_VA_END(args);
+ return status;
+}
+
+/**
+ Print to string.
+
+ @param buffer Output string.
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_vsprintf
+TRIO_ARGS3((buffer, format, args),
+ char *buffer,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ int status;
+
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args, NULL);
+ *buffer = NIL;
+ return status;
+}
+
+/**
+ Print to string.
+
+ @param buffer Output string.
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_sprintfv
+TRIO_ARGS3((buffer, format, args),
+ char *buffer,
+ TRIO_CONST char *format,
+ trio_pointer_t *args)
+{
+ int status;
+
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ status = TrioFormat(&buffer, 0, TrioOutStreamString, format, NULL, args);
+ *buffer = NIL;
+ return status;
+}
+
+/*************************************************************************
+ * snprintf
+ */
+
+/**
+ Print at most @p max characters to string.
+
+ @param buffer Output string.
+ @param max Maximum number of characters to print.
+ @param format Formatting string.
+ @param ... Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_snprintf
+TRIO_VARGS4((buffer, max, format, va_alist),
+ char *buffer,
+ size_t max,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
+ TrioOutStreamStringMax, format, &args, NULL);
+ if (max > 0)
+ *buffer = NIL;
+ TRIO_VA_END(args);
+ return status;
+}
+
+/**
+ Print at most @p max characters to string.
+
+ @param buffer Output string.
+ @param max Maximum number of characters to print.
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_vsnprintf
+TRIO_ARGS4((buffer, max, format, args),
+ char *buffer,
+ size_t max,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ int status;
+
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
+ TrioOutStreamStringMax, format, &args, NULL);
+ if (max > 0)
+ *buffer = NIL;
+ return status;
+}
+
+/**
+ Print at most @p max characters to string.
+
+ @param buffer Output string.
+ @param max Maximum number of characters to print.
+ @param format Formatting string.
+ @param args Arguments.
+ @return Number of printed characters.
+ */
+TRIO_PUBLIC int
+trio_snprintfv
+TRIO_ARGS4((buffer, max, format, args),
+ char *buffer,
+ size_t max,
+ TRIO_CONST char *format,
+ trio_pointer_t *args)
+{
+ int status;
+
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
+ TrioOutStreamStringMax, format, NULL, args);
+ if (max > 0)
+ *buffer = NIL;
+ return status;
+}
+
+/*************************************************************************
+ * snprintfcat
+ * Appends the new string to the buffer string overwriting the '\0'
+ * character at the end of buffer.
+ */
+TRIO_PUBLIC int
+trio_snprintfcat
+TRIO_VARGS4((buffer, max, format, va_alist),
+ char *buffer,
+ size_t max,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+ size_t buf_len;
+
+ TRIO_VA_START(args, format);
+
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ buf_len = trio_length(buffer);
+ buffer = &buffer[buf_len];
+
+ status = TrioFormat(&buffer, max - 1 - buf_len,
+ TrioOutStreamStringMax, format, &args, NULL);
+ TRIO_VA_END(args);
+ *buffer = NIL;
+ return status;
+}
+
+TRIO_PUBLIC int
+trio_vsnprintfcat
+TRIO_ARGS4((buffer, max, format, args),
+ char *buffer,
+ size_t max,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ int status;
+ size_t buf_len;
+
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ buf_len = trio_length(buffer);
+ buffer = &buffer[buf_len];
+ status = TrioFormat(&buffer, max - 1 - buf_len,
+ TrioOutStreamStringMax, format, &args, NULL);
+ *buffer = NIL;
+ return status;
+}
+
+/*************************************************************************
+ * trio_aprintf
+ */
+
+/* Deprecated */
+TRIO_PUBLIC char *
+trio_aprintf
+TRIO_VARGS2((format, va_alist),
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ va_list args;
+ trio_string_t *info;
+ char *result = NULL;
+
+ assert(VALID(format));
+
+ info = trio_xstring_duplicate("");
+ if (info)
+ {
+ TRIO_VA_START(args, format);
+ (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
+ format, &args, NULL);
+ TRIO_VA_END(args);
+
+ trio_string_terminate(info);
+ result = trio_string_extract(info);
+ trio_string_destroy(info);
+ }
+ return result;
+}
+
+/* Deprecated */
+TRIO_PUBLIC char *
+trio_vaprintf
+TRIO_ARGS2((format, args),
+ TRIO_CONST char *format,
+ va_list args)
+{
+ trio_string_t *info;
+ char *result = NULL;
+
+ assert(VALID(format));
+
+ info = trio_xstring_duplicate("");
+ if (info)
+ {
+ (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
+ format, &args, NULL);
+ trio_string_terminate(info);
+ result = trio_string_extract(info);
+ trio_string_destroy(info);
+ }
+ return result;
+}
+
+TRIO_PUBLIC int
+trio_asprintf
+TRIO_VARGS3((result, format, va_alist),
+ char **result,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ va_list args;
+ int status;
+ trio_string_t *info;
+
+ assert(VALID(format));
+
+ *result = NULL;
+
+ info = trio_xstring_duplicate("");
+ if (info == NULL)
+ {
+ status = TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
+ }
+ else
+ {
+ TRIO_VA_START(args, format);
+ status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
+ format, &args, NULL);
+ TRIO_VA_END(args);
+ if (status >= 0)
+ {
+ trio_string_terminate(info);
+ *result = trio_string_extract(info);
+ }
+ trio_string_destroy(info);
+ }
+ return status;
+}
+
+TRIO_PUBLIC int
+trio_vasprintf
+TRIO_ARGS3((result, format, args),
+ char **result,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ int status;
+ trio_string_t *info;
+
+ assert(VALID(format));
+
+ *result = NULL;
+
+ info = trio_xstring_duplicate("");
+ if (info == NULL)
+ {
+ status = TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
+ }
+ else
+ {
+ status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
+ format, &args, NULL);
+ if (status >= 0)
+ {
+ trio_string_terminate(info);
+ *result = trio_string_extract(info);
+ }
+ trio_string_destroy(info);
+ }
+ return status;
+}
+
+/** @} End of Printf documentation module */
+
+/*************************************************************************
+ *
+ * CALLBACK
+ *
+ ************************************************************************/
+
+#if defined(TRIO_DOCUMENTATION)
+# include "doc/doc_register.h"
+#endif
+/**
+ @addtogroup UserDefined
+ @{
+*/
+
+#if TRIO_EXTENSION
+
+/*************************************************************************
+ * trio_register
+ */
+
+/**
+ Register new user-defined specifier.
+
+ @param callback
+ @param name
+ @return Handle.
+ */
+TRIO_PUBLIC trio_pointer_t
+trio_register
+TRIO_ARGS2((callback, name),
+ trio_callback_t callback,
+ TRIO_CONST char *name)
+{
+ trio_userdef_t *def;
+ trio_userdef_t *prev = NULL;
+
+ if (callback == NULL)
+ return NULL;
+
+ if (name)
+ {
+ /* Handle built-in namespaces */
+ if (name[0] == ':')
+ {
+ if (trio_equal(name, ":enter"))
+ {
+ internalEnterCriticalRegion = callback;
+ }
+ else if (trio_equal(name, ":leave"))
+ {
+ internalLeaveCriticalRegion = callback;
+ }
+ return NULL;
+ }
+
+ /* Bail out if namespace is too long */
+ if (trio_length(name) >= MAX_USER_NAME)
+ return NULL;
+
+ /* Bail out if namespace already is registered */
+ def = TrioFindNamespace(name, &prev);
+ if (def)
+ return NULL;
+ }
+
+ def = (trio_userdef_t *)TRIO_MALLOC(sizeof(trio_userdef_t));
+ if (def)
+ {
+ if (internalEnterCriticalRegion)
+ (void)internalEnterCriticalRegion(NULL);
+
+ if (name)
+ {
+ /* Link into internal list */
+ if (prev == NULL)
+ internalUserDef = def;
+ else
+ prev->next = def;
+ }
+ /* Initialize */
+ def->callback = callback;
+ def->name = (name == NULL)
+ ? NULL
+ : trio_duplicate(name);
+ def->next = NULL;
+
+ if (internalLeaveCriticalRegion)
+ (void)internalLeaveCriticalRegion(NULL);
+ }
+ return (trio_pointer_t)def;
+}
+
+/**
+ Unregister an existing user-defined specifier.
+
+ @param handle
+ */
+void
+trio_unregister
+TRIO_ARGS1((handle),
+ trio_pointer_t handle)
+{
+ trio_userdef_t *self = (trio_userdef_t *)handle;
+ trio_userdef_t *def;
+ trio_userdef_t *prev = NULL;
+
+ assert(VALID(self));
+
+ if (self->name)
+ {
+ def = TrioFindNamespace(self->name, &prev);
+ if (def)
+ {
+ if (internalEnterCriticalRegion)
+ (void)internalEnterCriticalRegion(NULL);
+
+ if (prev == NULL)
+ internalUserDef = NULL;
+ else
+ prev->next = def->next;
+
+ if (internalLeaveCriticalRegion)
+ (void)internalLeaveCriticalRegion(NULL);
+ }
+ trio_destroy(self->name);
+ }
+ TRIO_FREE(self);
+}
+
+/*************************************************************************
+ * trio_get_format [public]
+ */
+TRIO_CONST char *
+trio_get_format
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+#if defined(FORMAT_USER_DEFINED)
+ assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED);
+#endif
+
+ return (((trio_reference_t *)ref)->parameter->user_data);
+}
+
+/*************************************************************************
+ * trio_get_argument [public]
+ */
+trio_pointer_t
+trio_get_argument
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+#if defined(FORMAT_USER_DEFINED)
+ assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED);
+#endif
+
+ return ((trio_reference_t *)ref)->parameter->data.pointer;
+}
+
+/*************************************************************************
+ * trio_get_width / trio_set_width [public]
+ */
+int
+trio_get_width
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return ((trio_reference_t *)ref)->parameter->width;
+}
+
+void
+trio_set_width
+TRIO_ARGS2((ref, width),
+ trio_pointer_t ref,
+ int width)
+{
+ ((trio_reference_t *)ref)->parameter->width = width;
+}
+
+/*************************************************************************
+ * trio_get_precision / trio_set_precision [public]
+ */
+int
+trio_get_precision
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->precision);
+}
+
+void
+trio_set_precision
+TRIO_ARGS2((ref, precision),
+ trio_pointer_t ref,
+ int precision)
+{
+ ((trio_reference_t *)ref)->parameter->precision = precision;
+}
+
+/*************************************************************************
+ * trio_get_base / trio_set_base [public]
+ */
+int
+trio_get_base
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->base);
+}
+
+void
+trio_set_base
+TRIO_ARGS2((ref, base),
+ trio_pointer_t ref,
+ int base)
+{
+ ((trio_reference_t *)ref)->parameter->base = base;
+}
+
+/*************************************************************************
+ * trio_get_long / trio_set_long [public]
+ */
+int
+trio_get_long
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_LONG)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_long
+TRIO_ARGS2((ref, is_long),
+ trio_pointer_t ref,
+ int is_long)
+{
+ if (is_long)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_LONG;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_LONG;
+}
+
+/*************************************************************************
+ * trio_get_longlong / trio_set_longlong [public]
+ */
+int
+trio_get_longlong
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_QUAD)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_longlong
+TRIO_ARGS2((ref, is_longlong),
+ trio_pointer_t ref,
+ int is_longlong)
+{
+ if (is_longlong)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_QUAD;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_QUAD;
+}
+
+/*************************************************************************
+ * trio_get_longdouble / trio_set_longdouble [public]
+ */
+int
+trio_get_longdouble
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_LONGDOUBLE)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_longdouble
+TRIO_ARGS2((ref, is_longdouble),
+ trio_pointer_t ref,
+ int is_longdouble)
+{
+ if (is_longdouble)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_LONGDOUBLE;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_LONGDOUBLE;
+}
+
+/*************************************************************************
+ * trio_get_short / trio_set_short [public]
+ */
+int
+trio_get_short
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SHORT)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_short
+TRIO_ARGS2((ref, is_short),
+ trio_pointer_t ref,
+ int is_short)
+{
+ if (is_short)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SHORT;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SHORT;
+}
+
+/*************************************************************************
+ * trio_get_shortshort / trio_set_shortshort [public]
+ */
+int
+trio_get_shortshort
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SHORTSHORT)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_shortshort
+TRIO_ARGS2((ref, is_shortshort),
+ trio_pointer_t ref,
+ int is_shortshort)
+{
+ if (is_shortshort)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SHORTSHORT;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SHORTSHORT;
+}
+
+/*************************************************************************
+ * trio_get_alternative / trio_set_alternative [public]
+ */
+int
+trio_get_alternative
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_ALTERNATIVE)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_alternative
+TRIO_ARGS2((ref, is_alternative),
+ trio_pointer_t ref,
+ int is_alternative)
+{
+ if (is_alternative)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_ALTERNATIVE;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_ALTERNATIVE;
+}
+
+/*************************************************************************
+ * trio_get_alignment / trio_set_alignment [public]
+ */
+int
+trio_get_alignment
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_LEFTADJUST)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_alignment
+TRIO_ARGS2((ref, is_leftaligned),
+ trio_pointer_t ref,
+ int is_leftaligned)
+{
+ if (is_leftaligned)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_LEFTADJUST;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_LEFTADJUST;
+}
+
+/*************************************************************************
+ * trio_get_spacing /trio_set_spacing [public]
+ */
+int
+trio_get_spacing
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SPACE)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_spacing
+TRIO_ARGS2((ref, is_space),
+ trio_pointer_t ref,
+ int is_space)
+{
+ if (is_space)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SPACE;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SPACE;
+}
+
+/*************************************************************************
+ * trio_get_sign / trio_set_sign [public]
+ */
+int
+trio_get_sign
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SHOWSIGN)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_sign
+TRIO_ARGS2((ref, is_sign),
+ trio_pointer_t ref,
+ int is_sign)
+{
+ if (is_sign)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SHOWSIGN;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SHOWSIGN;
+}
+
+/*************************************************************************
+ * trio_get_padding / trio_set_padding [public]
+ */
+int
+trio_get_padding
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_NILPADDING)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_padding
+TRIO_ARGS2((ref, is_padding),
+ trio_pointer_t ref,
+ int is_padding)
+{
+ if (is_padding)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_NILPADDING;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_NILPADDING;
+}
+
+/*************************************************************************
+ * trio_get_quote / trio_set_quote [public]
+ */
+int
+trio_get_quote
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_QUOTE)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_quote
+TRIO_ARGS2((ref, is_quote),
+ trio_pointer_t ref,
+ int is_quote)
+{
+ if (is_quote)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_QUOTE;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_QUOTE;
+}
+
+/*************************************************************************
+ * trio_get_upper / trio_set_upper [public]
+ */
+int
+trio_get_upper
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_UPPER)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_upper
+TRIO_ARGS2((ref, is_upper),
+ trio_pointer_t ref,
+ int is_upper)
+{
+ if (is_upper)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_UPPER;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_UPPER;
+}
+
+/*************************************************************************
+ * trio_get_largest / trio_set_largest [public]
+ */
+#if TRIO_C99
+int
+trio_get_largest
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_INTMAX_T)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_largest
+TRIO_ARGS2((ref, is_largest),
+ trio_pointer_t ref,
+ int is_largest)
+{
+ if (is_largest)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_INTMAX_T;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_INTMAX_T;
+}
+#endif
+
+/*************************************************************************
+ * trio_get_ptrdiff / trio_set_ptrdiff [public]
+ */
+int
+trio_get_ptrdiff
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_PTRDIFF_T)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_ptrdiff
+TRIO_ARGS2((ref, is_ptrdiff),
+ trio_pointer_t ref,
+ int is_ptrdiff)
+{
+ if (is_ptrdiff)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_PTRDIFF_T;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_PTRDIFF_T;
+}
+
+/*************************************************************************
+ * trio_get_size / trio_set_size [public]
+ */
+#if TRIO_C99
+int
+trio_get_size
+TRIO_ARGS1((ref),
+ trio_pointer_t ref)
+{
+ return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SIZE_T)
+ ? TRUE
+ : FALSE;
+}
+
+void
+trio_set_size
+TRIO_ARGS2((ref, is_size),
+ trio_pointer_t ref,
+ int is_size)
+{
+ if (is_size)
+ ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SIZE_T;
+ else
+ ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SIZE_T;
+}
+#endif
+
+/*************************************************************************
+ * trio_print_int [public]
+ */
+void
+trio_print_int
+TRIO_ARGS2((ref, number),
+ trio_pointer_t ref,
+ int number)
+{
+ trio_reference_t *self = (trio_reference_t *)ref;
+
+ TrioWriteNumber(self->data,
+ (trio_uintmax_t)number,
+ self->parameter->flags,
+ self->parameter->width,
+ self->parameter->precision,
+ self->parameter->base);
+}
+
+/*************************************************************************
+ * trio_print_uint [public]
+ */
+void
+trio_print_uint
+TRIO_ARGS2((ref, number),
+ trio_pointer_t ref,
+ unsigned int number)
+{
+ trio_reference_t *self = (trio_reference_t *)ref;
+
+ TrioWriteNumber(self->data,
+ (trio_uintmax_t)number,
+ self->parameter->flags | FLAGS_UNSIGNED,
+ self->parameter->width,
+ self->parameter->precision,
+ self->parameter->base);
+}
+
+/*************************************************************************
+ * trio_print_double [public]
+ */
+void
+trio_print_double
+TRIO_ARGS2((ref, number),
+ trio_pointer_t ref,
+ double number)
+{
+ trio_reference_t *self = (trio_reference_t *)ref;
+
+ TrioWriteDouble(self->data,
+ number,
+ self->parameter->flags,
+ self->parameter->width,
+ self->parameter->precision,
+ self->parameter->base);
+}
+
+/*************************************************************************
+ * trio_print_string [public]
+ */
+void
+trio_print_string
+TRIO_ARGS2((ref, string),
+ trio_pointer_t ref,
+ char *string)
+{
+ trio_reference_t *self = (trio_reference_t *)ref;
+
+ TrioWriteString(self->data,
+ string,
+ self->parameter->flags,
+ self->parameter->width,
+ self->parameter->precision);
+}
+
+/*************************************************************************
+ * trio_print_ref [public]
+ */
+int
+trio_print_ref
+TRIO_VARGS3((ref, format, va_alist),
+ trio_pointer_t ref,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list arglist;
+
+ assert(VALID(format));
+
+ TRIO_VA_START(arglist, format);
+ status = TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL);
+ TRIO_VA_END(arglist);
+ return status;
+}
+
+/*************************************************************************
+ * trio_vprint_ref [public]
+ */
+int
+trio_vprint_ref
+TRIO_ARGS3((ref, format, arglist),
+ trio_pointer_t ref,
+ TRIO_CONST char *format,
+ va_list arglist)
+{
+ assert(VALID(format));
+
+ return TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL);
+}
+
+/*************************************************************************
+ * trio_printv_ref [public]
+ */
+int
+trio_printv_ref
+TRIO_ARGS3((ref, format, argarray),
+ trio_pointer_t ref,
+ TRIO_CONST char *format,
+ trio_pointer_t *argarray)
+{
+ assert(VALID(format));
+
+ return TrioFormatRef((trio_reference_t *)ref, format, NULL, argarray);
+}
+
+#endif /* TRIO_EXTENSION */
+
+/*************************************************************************
+ * trio_print_pointer [public]
+ */
+void
+trio_print_pointer
+TRIO_ARGS2((ref, pointer),
+ trio_pointer_t ref,
+ trio_pointer_t pointer)
+{
+ trio_reference_t *self = (trio_reference_t *)ref;
+ trio_flags_t flags;
+ trio_uintmax_t number;
+
+ if (NULL == pointer)
+ {
+ TRIO_CONST char *string = internalNullString;
+ while (*string)
+ self->data->OutStream(self->data, *string++);
+ }
+ else
+ {
+ /*
+ * The subtraction of the null pointer is a workaround
+ * to avoid a compiler warning. The performance overhead
+ * is negligible (and likely to be removed by an
+ * optimizing compiler). The (char *) casting is done
+ * to please ANSI C++.
+ */
+ number = (trio_uintmax_t)((char *)pointer - (char *)0);
+ /* Shrink to size of pointer */
+ number &= (trio_uintmax_t)-1;
+ flags = self->parameter->flags;
+ flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE |
+ FLAGS_NILPADDING);
+ TrioWriteNumber(self->data,
+ number,
+ flags,
+ POINTER_WIDTH,
+ NO_PRECISION,
+ BASE_HEX);
+ }
+}
+
+/** @} End of UserDefined documentation module */
+
+/*************************************************************************
+ *
+ * LOCALES
+ *
+ ************************************************************************/
+
+/*************************************************************************
+ * trio_locale_set_decimal_point
+ *
+ * Decimal point can only be one character. The input argument is a
+ * string to enable multibyte characters. At most MB_LEN_MAX characters
+ * will be used.
+ */
+TRIO_PUBLIC void
+trio_locale_set_decimal_point
+TRIO_ARGS1((decimalPoint),
+ char *decimalPoint)
+{
+#if defined(USE_LOCALE)
+ if (NULL == internalLocaleValues)
+ {
+ TrioSetLocale();
+ }
+#endif
+ internalDecimalPointLength = trio_length(decimalPoint);
+ if (internalDecimalPointLength == 1)
+ {
+ internalDecimalPoint = *decimalPoint;
+ }
+ else
+ {
+ internalDecimalPoint = NIL;
+ trio_copy_max(internalDecimalPointString,
+ sizeof(internalDecimalPointString),
+ decimalPoint);
+ }
+}
+
+/*************************************************************************
+ * trio_locale_set_thousand_separator
+ *
+ * See trio_locale_set_decimal_point
+ */
+TRIO_PUBLIC void
+trio_locale_set_thousand_separator
+TRIO_ARGS1((thousandSeparator),
+ char *thousandSeparator)
+{
+#if defined(USE_LOCALE)
+ if (NULL == internalLocaleValues)
+ {
+ TrioSetLocale();
+ }
+#endif
+ trio_copy_max(internalThousandSeparator,
+ sizeof(internalThousandSeparator),
+ thousandSeparator);
+ internalThousandSeparatorLength = trio_length(internalThousandSeparator);
+}
+
+/*************************************************************************
+ * trio_locale_set_grouping
+ *
+ * Array of bytes. Reversed order.
+ *
+ * CHAR_MAX : No further grouping
+ * 0 : Repeat last group for the remaining digits (not necessary
+ * as C strings are zero-terminated)
+ * n : Set current group to n
+ *
+ * Same order as the grouping attribute in LC_NUMERIC.
+ */
+TRIO_PUBLIC void
+trio_locale_set_grouping
+TRIO_ARGS1((grouping),
+ char *grouping)
+{
+#if defined(USE_LOCALE)
+ if (NULL == internalLocaleValues)
+ {
+ TrioSetLocale();
+ }
+#endif
+ trio_copy_max(internalGrouping,
+ sizeof(internalGrouping),
+ grouping);
+}
+
+
+/*************************************************************************
+ *
+ * SCANNING
+ *
+ ************************************************************************/
+
+/*************************************************************************
+ * TrioSkipWhitespaces
+ */
+TRIO_PRIVATE int
+TrioSkipWhitespaces
+TRIO_ARGS1((self),
+ trio_class_t *self)
+{
+ int ch;
+
+ ch = self->current;
+ while (isspace(ch))
+ {
+ self->InStream(self, &ch);
+ }
+ return ch;
+}
+
+/*************************************************************************
+ * TrioGetCollation
+ */
+#if TRIO_EXTENSION
+TRIO_PRIVATE void
+TrioGetCollation(TRIO_NOARGS)
+{
+ int i;
+ int j;
+ int k;
+ char first[2];
+ char second[2];
+
+ /* This is computationally expensive */
+ first[1] = NIL;
+ second[1] = NIL;
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ {
+ k = 0;
+ first[0] = (char)i;
+ for (j = 0; j < MAX_CHARACTER_CLASS; j++)
+ {
+ second[0] = (char)j;
+ if (trio_equal_locale(first, second))
+ internalCollationArray[i][k++] = (char)j;
+ }
+ internalCollationArray[i][k] = NIL;
+ }
+}
+#endif
+
+/*************************************************************************
+ * TrioGetCharacterClass
+ *
+ * FIXME:
+ * multibyte
+ */
+TRIO_PRIVATE int
+TrioGetCharacterClass
+TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass),
+ TRIO_CONST char *format,
+ int *indexPointer,
+ trio_flags_t *flagsPointer,
+ int *characterclass)
+{
+ int index = *indexPointer;
+ int i;
+ char ch;
+ char range_begin;
+ char range_end;
+
+ *flagsPointer &= ~FLAGS_EXCLUDE;
+
+ if (format[index] == QUALIFIER_CIRCUMFLEX)
+ {
+ *flagsPointer |= FLAGS_EXCLUDE;
+ index++;
+ }
+ /*
+ * If the ungroup character is at the beginning of the scanlist,
+ * it will be part of the class, and a second ungroup character
+ * must follow to end the group.
+ */
+ if (format[index] == SPECIFIER_UNGROUP)
+ {
+ characterclass[(int)SPECIFIER_UNGROUP]++;
+ index++;
+ }
+ /*
+ * Minus is used to specify ranges. To include minus in the class,
+ * it must be at the beginning of the list
+ */
+ if (format[index] == QUALIFIER_MINUS)
+ {
+ characterclass[(int)QUALIFIER_MINUS]++;
+ index++;
+ }
+ /* Collect characters */
+ for (ch = format[index];
+ (ch != SPECIFIER_UNGROUP) && (ch != NIL);
+ ch = format[++index])
+ {
+ switch (ch)
+ {
+ case QUALIFIER_MINUS: /* Scanlist ranges */
+
+ /*
+ * Both C99 and UNIX98 describes ranges as implementation-
+ * defined.
+ *
+ * We support the following behaviour (although this may
+ * change as we become wiser)
+ * - only increasing ranges, ie. [a-b] but not [b-a]
+ * - transitive ranges, ie. [a-b-c] == [a-c]
+ * - trailing minus, ie. [a-] is interpreted as an 'a'
+ * and a '-'
+ * - duplicates (although we can easily convert these
+ * into errors)
+ */
+ range_begin = format[index - 1];
+ range_end = format[++index];
+ if (range_end == SPECIFIER_UNGROUP)
+ {
+ /* Trailing minus is included */
+ characterclass[(int)ch]++;
+ ch = range_end;
+ break; /* for */
+ }
+ if (range_end == NIL)
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ if (range_begin > range_end)
+ return TRIO_ERROR_RETURN(TRIO_ERANGE, index);
+
+ for (i = (int)range_begin; i <= (int)range_end; i++)
+ characterclass[i]++;
+
+ ch = range_end;
+ break;
+
+#if TRIO_EXTENSION
+
+ case SPECIFIER_GROUP:
+
+ switch (format[index + 1])
+ {
+ case QUALIFIER_DOT: /* Collating symbol */
+ /*
+ * FIXME: This will be easier to implement when multibyte
+ * characters have been implemented. Until now, we ignore
+ * this feature.
+ */
+ for (i = index + 2; ; i++)
+ {
+ if (format[i] == NIL)
+ /* Error in syntax */
+ return -1;
+ else if (format[i] == QUALIFIER_DOT)
+ break; /* for */
+ }
+ if (format[++i] != SPECIFIER_UNGROUP)
+ return -1;
+
+ index = i;
+ break;
+
+ case QUALIFIER_EQUAL: /* Equivalence class expressions */
+ {
+ unsigned int j;
+ unsigned int k;
+
+ if (internalCollationUnconverted)
+ {
+ /* Lazy evaluation of collation array */
+ TrioGetCollation();
+ internalCollationUnconverted = FALSE;
+ }
+ for (i = index + 2; ; i++)
+ {
+ if (format[i] == NIL)
+ /* Error in syntax */
+ return -1;
+ else if (format[i] == QUALIFIER_EQUAL)
+ break; /* for */
+ else
+ {
+ /* Mark any equivalent character */
+ k = (unsigned int)format[i];
+ for (j = 0; internalCollationArray[k][j] != NIL; j++)
+ characterclass[(int)internalCollationArray[k][j]]++;
+ }
+ }
+ if (format[++i] != SPECIFIER_UNGROUP)
+ return -1;
+
+ index = i;
+ }
+ break;
+
+ case QUALIFIER_COLON: /* Character class expressions */
+
+ if (trio_equal_max(CLASS_ALNUM, sizeof(CLASS_ALNUM) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (isalnum(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_ALNUM) - 1;
+ }
+ else if (trio_equal_max(CLASS_ALPHA, sizeof(CLASS_ALPHA) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (isalpha(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_ALPHA) - 1;
+ }
+ else if (trio_equal_max(CLASS_CNTRL, sizeof(CLASS_CNTRL) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (iscntrl(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_CNTRL) - 1;
+ }
+ else if (trio_equal_max(CLASS_DIGIT, sizeof(CLASS_DIGIT) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (isdigit(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_DIGIT) - 1;
+ }
+ else if (trio_equal_max(CLASS_GRAPH, sizeof(CLASS_GRAPH) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (isgraph(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_GRAPH) - 1;
+ }
+ else if (trio_equal_max(CLASS_LOWER, sizeof(CLASS_LOWER) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (islower(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_LOWER) - 1;
+ }
+ else if (trio_equal_max(CLASS_PRINT, sizeof(CLASS_PRINT) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (isprint(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_PRINT) - 1;
+ }
+ else if (trio_equal_max(CLASS_PUNCT, sizeof(CLASS_PUNCT) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (ispunct(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_PUNCT) - 1;
+ }
+ else if (trio_equal_max(CLASS_SPACE, sizeof(CLASS_SPACE) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (isspace(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_SPACE) - 1;
+ }
+ else if (trio_equal_max(CLASS_UPPER, sizeof(CLASS_UPPER) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (isupper(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_UPPER) - 1;
+ }
+ else if (trio_equal_max(CLASS_XDIGIT, sizeof(CLASS_XDIGIT) - 1,
+ &format[index]))
+ {
+ for (i = 0; i < MAX_CHARACTER_CLASS; i++)
+ if (isxdigit(i))
+ characterclass[i]++;
+ index += sizeof(CLASS_XDIGIT) - 1;
+ }
+ else
+ {
+ characterclass[(int)ch]++;
+ }
+ break;
+
+ default:
+ characterclass[(int)ch]++;
+ break;
+ }
+ break;
+
+#endif /* TRIO_EXTENSION */
+
+ default:
+ characterclass[(int)ch]++;
+ break;
+ }
+ }
+ return 0;
+}
+
+/*************************************************************************
+ * TrioReadNumber
+ *
+ * We implement our own number conversion in preference of strtol and
+ * strtoul, because we must handle 'long long' and thousand separators.
+ */
+TRIO_PRIVATE BOOLEAN_T
+TrioReadNumber
+TRIO_ARGS5((self, target, flags, width, base),
+ trio_class_t *self,
+ trio_uintmax_t *target,
+ trio_flags_t flags,
+ int width,
+ int base)
+{
+ trio_uintmax_t number = 0;
+ int digit;
+ int count;
+ BOOLEAN_T isNegative = FALSE;
+ BOOLEAN_T gotNumber = FALSE;
+ int j;
+
+ assert(VALID(self));
+ assert(VALID(self->InStream));
+ assert((base >= MIN_BASE && base <= MAX_BASE) || (base == NO_BASE));
+
+ if (internalDigitsUnconverted)
+ {
+ /* Lazy evaluation of digits array */
+ memset(internalDigitArray, -1, sizeof(internalDigitArray));
+ for (j = 0; j < (int)sizeof(internalDigitsLower) - 1; j++)
+ {
+ internalDigitArray[(int)internalDigitsLower[j]] = j;
+ internalDigitArray[(int)internalDigitsUpper[j]] = j;
+ }
+ internalDigitsUnconverted = FALSE;
+ }
+
+ TrioSkipWhitespaces(self);
+
+ if (!(flags & FLAGS_UNSIGNED))
+ {
+ /* Leading sign */
+ if (self->current == '+')
+ {
+ self->InStream(self, NULL);
+ }
+ else if (self->current == '-')
+ {
+ self->InStream(self, NULL);
+ isNegative = TRUE;
+ }
+ }
+
+ count = self->processed;
+
+ if (flags & FLAGS_ALTERNATIVE)
+ {
+ switch (base)
+ {
+ case NO_BASE:
+ case BASE_OCTAL:
+ case BASE_HEX:
+ case BASE_BINARY:
+ if (self->current == '0')
+ {
+ self->InStream(self, NULL);
+ if (self->current)
+ {
+ if ((base == BASE_HEX) &&
+ (trio_to_upper(self->current) == 'X'))
+ {
+ self->InStream(self, NULL);
+ }
+ else if ((base == BASE_BINARY) &&
+ (trio_to_upper(self->current) == 'B'))
+ {
+ self->InStream(self, NULL);
+ }
+ }
+ }
+ else
+ return FALSE;
+ break;
+ default:
+ break;
+ }
+ }
+
+ while (((width == NO_WIDTH) || (self->processed - count < width)) &&
+ (! ((self->current == EOF) || isspace(self->current))))
+ {
+ if (isascii(self->current))
+ {
+ digit = internalDigitArray[self->current];
+ /* Abort if digit is not allowed in the specified base */
+ if ((digit == -1) || (digit >= base))
+ break;
+ }
+ else if (flags & FLAGS_QUOTE)
+ {
+ /* Compare with thousands separator */
+ for (j = 0; internalThousandSeparator[j] && self->current; j++)
+ {
+ if (internalThousandSeparator[j] != self->current)
+ break;
+
+ self->InStream(self, NULL);
+ }
+ if (internalThousandSeparator[j])
+ break; /* Mismatch */
+ else
+ continue; /* Match */
+ }
+ else
+ break;
+
+ number *= base;
+ number += digit;
+ gotNumber = TRUE; /* we need at least one digit */
+
+ self->InStream(self, NULL);
+ }
+
+ /* Was anything read at all? */
+ if (!gotNumber)
+ return FALSE;
+
+ if (target)
+ *target = (isNegative) ? -((trio_intmax_t)number) : number;
+ return TRUE;
+}
+
+/*************************************************************************
+ * TrioReadChar
+ */
+TRIO_PRIVATE int
+TrioReadChar
+TRIO_ARGS4((self, target, flags, width),
+ trio_class_t *self,
+ char *target,
+ trio_flags_t flags,
+ int width)
+{
+ int i;
+ char ch;
+ trio_uintmax_t number;
+
+ assert(VALID(self));
+ assert(VALID(self->InStream));
+
+ for (i = 0;
+ (self->current != EOF) && (i < width);
+ i++)
+ {
+ ch = (char)self->current;
+ self->InStream(self, NULL);
+ if ((flags & FLAGS_ALTERNATIVE) && (ch == CHAR_BACKSLASH))
+ {
+ switch (self->current)
+ {
+ case '\\': ch = '\\'; break;
+ case 'a': ch = '\007'; break;
+ case 'b': ch = '\b'; break;
+ case 'f': ch = '\f'; break;
+ case 'n': ch = '\n'; break;
+ case 'r': ch = '\r'; break;
+ case 't': ch = '\t'; break;
+ case 'v': ch = '\v'; break;
+ default:
+ if (isdigit(self->current))
+ {
+ /* Read octal number */
+ if (!TrioReadNumber(self, &number, 0, 3, BASE_OCTAL))
+ return 0;
+ ch = (char)number;
+ }
+ else if (trio_to_upper(self->current) == 'X')
+ {
+ /* Read hexadecimal number */
+ self->InStream(self, NULL);
+ if (!TrioReadNumber(self, &number, 0, 2, BASE_HEX))
+ return 0;
+ ch = (char)number;
+ }
+ else
+ {
+ ch = (char)self->current;
+ }
+ break;
+ }
+ }
+
+ if (target)
+ target[i] = ch;
+ }
+ return i + 1;
+}
+
+/*************************************************************************
+ * TrioReadString
+ */
+TRIO_PRIVATE BOOLEAN_T
+TrioReadString
+TRIO_ARGS4((self, target, flags, width),
+ trio_class_t *self,
+ char *target,
+ trio_flags_t flags,
+ int width)
+{
+ int i;
+
+ assert(VALID(self));
+ assert(VALID(self->InStream));
+
+ TrioSkipWhitespaces(self);
+
+ /*
+ * Continue until end of string is reached, a whitespace is encountered,
+ * or width is exceeded
+ */
+ for (i = 0;
+ ((width == NO_WIDTH) || (i < width)) &&
+ (! ((self->current == EOF) || isspace(self->current)));
+ i++)
+ {
+ if (TrioReadChar(self, (target ? &target[i] : 0), flags, 1) == 0)
+ break; /* for */
+ }
+ if (target)
+ target[i] = NIL;
+ return TRUE;
+}
+
+/*************************************************************************
+ * TrioReadWideChar
+ */
+#if TRIO_WIDECHAR
+TRIO_PRIVATE int
+TrioReadWideChar
+TRIO_ARGS4((self, target, flags, width),
+ trio_class_t *self,
+ trio_wchar_t *target,
+ trio_flags_t flags,
+ int width)
+{
+ int i;
+ int j;
+ int size;
+ int amount = 0;
+ trio_wchar_t wch;
+ char buffer[MB_LEN_MAX + 1];
+
+ assert(VALID(self));
+ assert(VALID(self->InStream));
+
+ for (i = 0;
+ (self->current != EOF) && (i < width);
+ i++)
+ {
+ if (isascii(self->current))
+ {
+ if (TrioReadChar(self, buffer, flags, 1) == 0)
+ return 0;
+ buffer[1] = NIL;
+ }
+ else
+ {
+ /*
+ * Collect a multibyte character, by enlarging buffer until
+ * it contains a fully legal multibyte character, or the
+ * buffer is full.
+ */
+ j = 0;
+ do
+ {
+ buffer[j++] = (char)self->current;
+ buffer[j] = NIL;
+ self->InStream(self, NULL);
+ }
+ while ((j < (int)sizeof(buffer)) && (mblen(buffer, (size_t)j) != j));
+ }
+ if (target)
+ {
+ size = mbtowc(&wch, buffer, sizeof(buffer));
+ if (size > 0)
+ target[i] = wch;
+ }
+ amount += size;
+ self->InStream(self, NULL);
+ }
+ return amount;
+}
+#endif /* TRIO_WIDECHAR */
+
+/*************************************************************************
+ * TrioReadWideString
+ */
+#if TRIO_WIDECHAR
+TRIO_PRIVATE BOOLEAN_T
+TrioReadWideString
+TRIO_ARGS4((self, target, flags, width),
+ trio_class_t *self,
+ trio_wchar_t *target,
+ trio_flags_t flags,
+ int width)
+{
+ int i;
+ int size;
+
+ assert(VALID(self));
+ assert(VALID(self->InStream));
+
+ TrioSkipWhitespaces(self);
+
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ (void)mblen(NULL, 0);
+#endif
+
+ /*
+ * Continue until end of string is reached, a whitespace is encountered,
+ * or width is exceeded
+ */
+ for (i = 0;
+ ((width == NO_WIDTH) || (i < width)) &&
+ (! ((self->current == EOF) || isspace(self->current)));
+ )
+ {
+ size = TrioReadWideChar(self, &target[i], flags, 1);
+ if (size == 0)
+ break; /* for */
+
+ i += size;
+ }
+ if (target)
+ target[i] = WCONST('\0');
+ return TRUE;
+}
+#endif /* TRIO_WIDECHAR */
+
+/*************************************************************************
+ * TrioReadGroup
+ *
+ * FIXME: characterclass does not work with multibyte characters
+ */
+TRIO_PRIVATE BOOLEAN_T
+TrioReadGroup
+TRIO_ARGS5((self, target, characterclass, flags, width),
+ trio_class_t *self,
+ char *target,
+ int *characterclass,
+ trio_flags_t flags,
+ int width)
+{
+ int ch;
+ int i;
+
+ assert(VALID(self));
+ assert(VALID(self->InStream));
+
+ ch = self->current;
+ for (i = 0;
+ ((width == NO_WIDTH) || (i < width)) &&
+ (! ((ch == EOF) ||
+ (((flags & FLAGS_EXCLUDE) != 0) ^ (characterclass[ch] == 0))));
+ i++)
+ {
+ if (target)
+ target[i] = (char)ch;
+ self->InStream(self, &ch);
+ }
+
+ if (target)
+ target[i] = NIL;
+ return TRUE;
+}
+
+/*************************************************************************
+ * TrioReadDouble
+ *
+ * FIXME:
+ * add long double
+ * handle base
+ */
+TRIO_PRIVATE BOOLEAN_T
+TrioReadDouble
+TRIO_ARGS4((self, target, flags, width),
+ trio_class_t *self,
+ trio_pointer_t target,
+ trio_flags_t flags,
+ int width)
+{
+ int ch;
+ char doubleString[512];
+ int index = 0;
+ int start;
+ int j;
+ BOOLEAN_T isHex = FALSE;
+
+ doubleString[0] = 0;
+
+ if ((width == NO_WIDTH) || (width > (int)sizeof(doubleString) - 1))
+ width = sizeof(doubleString) - 1;
+
+ TrioSkipWhitespaces(self);
+
+ /*
+ * Read entire double number from stream. trio_to_double requires
+ * a string as input, but InStream can be anything, so we have to
+ * collect all characters.
+ */
+ ch = self->current;
+ if ((ch == '+') || (ch == '-'))
+ {
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ width--;
+ }
+
+ start = index;
+ switch (ch)
+ {
+ case 'n':
+ case 'N':
+ /* Not-a-number */
+ if (index != 0)
+ break;
+ /* FALLTHROUGH */
+ case 'i':
+ case 'I':
+ /* Infinity */
+ while (isalpha(ch) && (index - start < width))
+ {
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ }
+ doubleString[index] = NIL;
+
+ /* Case insensitive string comparison */
+ if (trio_equal(&doubleString[start], INFINITE_UPPER) ||
+ trio_equal(&doubleString[start], LONG_INFINITE_UPPER))
+ {
+ if (flags & FLAGS_LONGDOUBLE)
+ {
+ if ((start == 1) && (doubleString[0] == '-'))
+ {
+ *((trio_long_double_t *)target) = trio_ninf();
+ }
+ else
+ {
+ *((trio_long_double_t *)target) = trio_pinf();
+ }
+ }
+ else
+ {
+ if ((start == 1) && (doubleString[0] == '-'))
+ {
+ *((double *)target) = trio_ninf();
+ }
+ else
+ {
+ *((double *)target) = trio_pinf();
+ }
+ }
+ return TRUE;
+ }
+ if (trio_equal(doubleString, NAN_UPPER))
+ {
+ /* NaN must not have a preceeding + nor - */
+ if (flags & FLAGS_LONGDOUBLE)
+ {
+ *((trio_long_double_t *)target) = trio_nan();
+ }
+ else
+ {
+ *((double *)target) = trio_nan();
+ }
+ return TRUE;
+ }
+ return FALSE;
+
+ case '0':
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ if (trio_to_upper(ch) == 'X')
+ {
+ isHex = TRUE;
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ while ((ch != EOF) && (index - start < width))
+ {
+ /* Integer part */
+ if (isHex ? isxdigit(ch) : isdigit(ch))
+ {
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ }
+ else if (flags & FLAGS_QUOTE)
+ {
+ /* Compare with thousands separator */
+ for (j = 0; internalThousandSeparator[j] && self->current; j++)
+ {
+ if (internalThousandSeparator[j] != self->current)
+ break;
+
+ self->InStream(self, &ch);
+ }
+ if (internalThousandSeparator[j])
+ break; /* Mismatch */
+ else
+ continue; /* Match */
+ }
+ else
+ break; /* while */
+ }
+ if (ch == '.')
+ {
+ /* Decimal part */
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ while ((isHex ? isxdigit(ch) : isdigit(ch)) &&
+ (index - start < width))
+ {
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ }
+ if (isHex ? (trio_to_upper(ch) == 'P') : (trio_to_upper(ch) == 'E'))
+ {
+ /* Exponent */
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ if ((ch == '+') || (ch == '-'))
+ {
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ }
+ while (isdigit(ch) && (index - start < width))
+ {
+ doubleString[index++] = (char)ch;
+ self->InStream(self, &ch);
+ }
+ }
+ }
+
+ if ((index == start) || (*doubleString == NIL))
+ return FALSE;
+
+ doubleString[index] = 0;
+
+ if (flags & FLAGS_LONGDOUBLE)
+ {
+ *((trio_long_double_t *)target) = trio_to_long_double(doubleString, NULL);
+ }
+ else
+ {
+ *((double *)target) = trio_to_double(doubleString, NULL);
+ }
+ return TRUE;
+}
+
+/*************************************************************************
+ * TrioReadPointer
+ */
+TRIO_PRIVATE BOOLEAN_T
+TrioReadPointer
+TRIO_ARGS3((self, target, flags),
+ trio_class_t *self,
+ trio_pointer_t *target,
+ trio_flags_t flags)
+{
+ trio_uintmax_t number;
+ char buffer[sizeof(internalNullString)];
+
+ flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);
+
+ if (TrioReadNumber(self,
+ &number,
+ flags,
+ POINTER_WIDTH,
+ BASE_HEX))
+ {
+ /*
+ * The strange assignment of number is a workaround for a compiler
+ * warning
+ */
+ if (target)
+ *target = (char *)0 + number;
+ return TRUE;
+ }
+ else if (TrioReadString(self,
+ (flags & FLAGS_IGNORE)
+ ? NULL
+ : buffer,
+ 0,
+ sizeof(internalNullString) - 1))
+ {
+ if (trio_equal_case(buffer, internalNullString))
+ {
+ if (target)
+ *target = NULL;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/*************************************************************************
+ * TrioScanProcess
+ */
+TRIO_PRIVATE int
+TrioScanProcess
+TRIO_ARGS3((data, format, parameters),
+ trio_class_t *data,
+ TRIO_CONST char *format,
+ trio_parameter_t *parameters)
+{
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ int charlen;
+ int cnt;
+#endif
+ int assignment;
+ int ch;
+ int index; /* Index of format string */
+ int i; /* Index of current parameter */
+ trio_flags_t flags;
+ int width;
+ int base;
+ trio_pointer_t pointer;
+
+ assignment = 0;
+ i = 0;
+ index = 0;
+ data->InStream(data, &ch);
+
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ (void)mblen(NULL, 0);
+#endif
+
+ while (format[index])
+ {
+#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
+ if (! isascii(format[index]))
+ {
+ charlen = mblen(&format[index], MB_LEN_MAX);
+ if (charlen != -1)
+ {
+ /* Compare multibyte characters in format string */
+ for (cnt = 0; cnt < charlen - 1; cnt++)
+ {
+ if (ch != format[index + cnt])
+ {
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ }
+ data->InStream(data, &ch);
+ }
+ continue; /* while characters left in formatting string */
+ }
+ }
+#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
+
+ if ((EOF == ch) && (parameters[i].type != FORMAT_COUNT))
+ {
+ return (assignment > 0) ? assignment : EOF;
+ }
+
+ if (CHAR_IDENTIFIER == format[index])
+ {
+ if (CHAR_IDENTIFIER == format[index + 1])
+ {
+ /* Two % in format matches one % in input stream */
+ if (CHAR_IDENTIFIER == ch)
+ {
+ data->InStream(data, &ch);
+ index += 2;
+ continue; /* while format chars left */
+ }
+ else
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ }
+
+ /* Skip the parameter entries */
+ while (parameters[i].type == FORMAT_PARAMETER)
+ i++;
+
+ flags = parameters[i].flags;
+ /* Find width */
+ width = parameters[i].width;
+ if (flags & FLAGS_WIDTH_PARAMETER)
+ {
+ /* Get width from parameter list */
+ width = (int)parameters[width].data.number.as_signed;
+ }
+ /* Find base */
+ base = parameters[i].base;
+ if (flags & FLAGS_BASE_PARAMETER)
+ {
+ /* Get base from parameter list */
+ base = (int)parameters[base].data.number.as_signed;
+ }
+
+ switch (parameters[i].type)
+ {
+ case FORMAT_INT:
+ {
+ trio_uintmax_t number;
+
+ if (0 == base)
+ base = BASE_DECIMAL;
+
+ if (!TrioReadNumber(data,
+ &number,
+ flags,
+ width,
+ base))
+ return assignment;
+
+ if (!(flags & FLAGS_IGNORE))
+ {
+ assignment++;
+
+ pointer = parameters[i].data.pointer;
+#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
+ if (flags & FLAGS_SIZE_T)
+ *(size_t *)pointer = (size_t)number;
+ else
+#endif
+#if defined(QUALIFIER_PTRDIFF_T)
+ if (flags & FLAGS_PTRDIFF_T)
+ *(ptrdiff_t *)pointer = (ptrdiff_t)number;
+ else
+#endif
+#if defined(QUALIFIER_INTMAX_T)
+ if (flags & FLAGS_INTMAX_T)
+ *(trio_intmax_t *)pointer = (trio_intmax_t)number;
+ else
+#endif
+ if (flags & FLAGS_QUAD)
+ *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)number;
+ else if (flags & FLAGS_LONG)
+ *(long int *)pointer = (long int)number;
+ else if (flags & FLAGS_SHORT)
+ *(short int *)pointer = (short int)number;
+ else
+ *(int *)pointer = (int)number;
+ }
+ }
+ break; /* FORMAT_INT */
+
+ case FORMAT_STRING:
+#if TRIO_WIDECHAR
+ if (flags & FLAGS_WIDECHAR)
+ {
+ if (!TrioReadWideString(data,
+ (flags & FLAGS_IGNORE)
+ ? NULL
+ : parameters[i].data.wstring,
+ flags,
+ width))
+ return assignment;
+ }
+ else
+#endif
+ {
+ if (!TrioReadString(data,
+ (flags & FLAGS_IGNORE)
+ ? NULL
+ : parameters[i].data.string,
+ flags,
+ width))
+ return assignment;
+ }
+ if (!(flags & FLAGS_IGNORE))
+ assignment++;
+ break; /* FORMAT_STRING */
+
+ case FORMAT_DOUBLE:
+ {
+ trio_pointer_t pointer;
+
+ if (flags & FLAGS_IGNORE)
+ {
+ pointer = NULL;
+ }
+ else
+ {
+ pointer = (flags & FLAGS_LONGDOUBLE)
+ ? (trio_pointer_t)parameters[i].data.longdoublePointer
+ : (trio_pointer_t)parameters[i].data.doublePointer;
+ }
+ if (!TrioReadDouble(data, pointer, flags, width))
+ {
+ return assignment;
+ }
+ if (!(flags & FLAGS_IGNORE))
+ {
+ assignment++;
+ }
+ break; /* FORMAT_DOUBLE */
+ }
+ case FORMAT_GROUP:
+ {
+ int characterclass[MAX_CHARACTER_CLASS + 1];
+ int rc;
+
+ /* Skip over modifiers */
+ while (format[index] != SPECIFIER_GROUP)
+ {
+ index++;
+ }
+ /* Skip over group specifier */
+ index++;
+
+ memset(characterclass, 0, sizeof(characterclass));
+ rc = TrioGetCharacterClass(format,
+ &index,
+ &flags,
+ characterclass);
+ if (rc < 0)
+ return rc;
+
+ if (!TrioReadGroup(data,
+ (flags & FLAGS_IGNORE)
+ ? NULL
+ : parameters[i].data.string,
+ characterclass,
+ flags,
+ parameters[i].width))
+ return assignment;
+ if (!(flags & FLAGS_IGNORE))
+ assignment++;
+ }
+ break; /* FORMAT_GROUP */
+
+ case FORMAT_COUNT:
+ pointer = parameters[i].data.pointer;
+ if (NULL != pointer)
+ {
+ int count = data->committed;
+ if (ch != EOF)
+ count--; /* a character is read, but is not consumed yet */
+#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
+ if (flags & FLAGS_SIZE_T)
+ *(size_t *)pointer = (size_t)count;
+ else
+#endif
+#if defined(QUALIFIER_PTRDIFF_T)
+ if (flags & FLAGS_PTRDIFF_T)
+ *(ptrdiff_t *)pointer = (ptrdiff_t)count;
+ else
+#endif
+#if defined(QUALIFIER_INTMAX_T)
+ if (flags & FLAGS_INTMAX_T)
+ *(trio_intmax_t *)pointer = (trio_intmax_t)count;
+ else
+#endif
+ if (flags & FLAGS_QUAD)
+ {
+ *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)count;
+ }
+ else if (flags & FLAGS_LONG)
+ {
+ *(long int *)pointer = (long int)count;
+ }
+ else if (flags & FLAGS_SHORT)
+ {
+ *(short int *)pointer = (short int)count;
+ }
+ else
+ {
+ *(int *)pointer = (int)count;
+ }
+ }
+ break; /* FORMAT_COUNT */
+
+ case FORMAT_CHAR:
+#if TRIO_WIDECHAR
+ if (flags & FLAGS_WIDECHAR)
+ {
+ if (TrioReadWideChar(data,
+ (flags & FLAGS_IGNORE)
+ ? NULL
+ : parameters[i].data.wstring,
+ flags,
+ (width == NO_WIDTH) ? 1 : width) == 0)
+ return assignment;
+ }
+ else
+#endif
+ {
+ if (TrioReadChar(data,
+ (flags & FLAGS_IGNORE)
+ ? NULL
+ : parameters[i].data.string,
+ flags,
+ (width == NO_WIDTH) ? 1 : width) == 0)
+ return assignment;
+ }
+ if (!(flags & FLAGS_IGNORE))
+ assignment++;
+ break; /* FORMAT_CHAR */
+
+ case FORMAT_POINTER:
+ if (!TrioReadPointer(data,
+ (flags & FLAGS_IGNORE)
+ ? NULL
+ : (trio_pointer_t *)parameters[i].data.pointer,
+ flags))
+ return assignment;
+ if (!(flags & FLAGS_IGNORE))
+ assignment++;
+ break; /* FORMAT_POINTER */
+
+ case FORMAT_PARAMETER:
+ break; /* FORMAT_PARAMETER */
+
+ default:
+ return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
+ }
+ ch = data->current;
+ index = parameters[i].indexAfterSpecifier;
+ i++;
+ }
+ else /* Not an % identifier */
+ {
+ if (isspace((int)format[index]))
+ {
+ /* Whitespaces may match any amount of whitespaces */
+ ch = TrioSkipWhitespaces(data);
+ }
+ else if (ch == format[index])
+ {
+ data->InStream(data, &ch);
+ }
+ else
+ return assignment;
+
+ index++;
+ }
+ }
+ return assignment;
+}
+
+/*************************************************************************
+ * TrioScan
+ */
+TRIO_PRIVATE int
+TrioScan
+TRIO_ARGS6((source, sourceSize, InStream, format, arglist, argarray),
+ trio_pointer_t source,
+ size_t sourceSize,
+ void (*InStream) TRIO_PROTO((trio_class_t *, int *)),
+ TRIO_CONST char *format,
+ va_list *arglist,
+ trio_pointer_t *argarray)
+{
+ int status;
+ trio_parameter_t parameters[MAX_PARAMETERS];
+ trio_class_t data;
+
+ assert(VALID(InStream));
+ assert(VALID(format));
+
+ memset(&data, 0, sizeof(data));
+ data.InStream = InStream;
+ data.location = (trio_pointer_t)source;
+ data.max = sourceSize;
+ data.error = 0;
+
+#if defined(USE_LOCALE)
+ if (NULL == internalLocaleValues)
+ {
+ TrioSetLocale();
+ }
+#endif
+
+ status = TrioParse(TYPE_SCAN, format, parameters, arglist, argarray);
+ if (status < 0)
+ return status;
+
+ status = TrioScanProcess(&data, format, parameters);
+ if (data.error != 0)
+ {
+ status = data.error;
+ }
+ return status;
+}
+
+/*************************************************************************
+ * TrioInStreamFile
+ */
+TRIO_PRIVATE void
+TrioInStreamFile
+TRIO_ARGS2((self, intPointer),
+ trio_class_t *self,
+ int *intPointer)
+{
+ FILE *file = (FILE *)self->location;
+
+ assert(VALID(self));
+ assert(VALID(file));
+
+ self->current = fgetc(file);
+ if (self->current == EOF)
+ {
+ self->error = (ferror(file))
+ ? TRIO_ERROR_RETURN(TRIO_ERRNO, 0)
+ : TRIO_ERROR_RETURN(TRIO_EOF, 0);
+ }
+ else
+ {
+ self->processed++;
+ self->committed++;
+ }
+
+ if (VALID(intPointer))
+ {
+ *intPointer = self->current;
+ }
+}
+
+/*************************************************************************
+ * TrioInStreamFileDescriptor
+ */
+TRIO_PRIVATE void
+TrioInStreamFileDescriptor
+TRIO_ARGS2((self, intPointer),
+ trio_class_t *self,
+ int *intPointer)
+{
+ int fd = *((int *)self->location);
+ int size;
+ unsigned char input;
+
+ assert(VALID(self));
+
+ size = read(fd, &input, sizeof(char));
+ if (size == -1)
+ {
+ self->error = TRIO_ERROR_RETURN(TRIO_ERRNO, 0);
+ self->current = EOF;
+ }
+ else
+ {
+ self->current = (size == 0) ? EOF : input;
+ }
+ if (self->current != EOF)
+ {
+ self->committed++;
+ self->processed++;
+ }
+
+ if (VALID(intPointer))
+ {
+ *intPointer = self->current;
+ }
+}
+
+/*************************************************************************
+ * TrioInStreamCustom
+ */
+TRIO_PRIVATE void
+TrioInStreamCustom
+TRIO_ARGS2((self, intPointer),
+ trio_class_t *self,
+ int *intPointer)
+{
+ trio_custom_t *data;
+
+ assert(VALID(self));
+ assert(VALID(self->location));
+
+ data = (trio_custom_t *)self->location;
+
+ self->current = (data->stream.in == NULL)
+ ? NIL
+ : (data->stream.in)(data->closure);
+
+ if (self->current == NIL)
+ {
+ self->current = EOF;
+ }
+ else
+ {
+ self->processed++;
+ self->committed++;
+ }
+
+ if (VALID(intPointer))
+ {
+ *intPointer = self->current;
+ }
+}
+
+/*************************************************************************
+ * TrioInStreamString
+ */
+TRIO_PRIVATE void
+TrioInStreamString
+TRIO_ARGS2((self, intPointer),
+ trio_class_t *self,
+ int *intPointer)
+{
+ unsigned char **buffer;
+
+ assert(VALID(self));
+ assert(VALID(self->location));
+
+ buffer = (unsigned char **)self->location;
+ self->current = (*buffer)[0];
+ if (self->current == NIL)
+ {
+ self->current = EOF;
+ }
+ else
+ {
+ (*buffer)++;
+ self->processed++;
+ self->committed++;
+ }
+
+ if (VALID(intPointer))
+ {
+ *intPointer = self->current;
+ }
+}
+
+/*************************************************************************
+ *
+ * Formatted scanning functions
+ *
+ ************************************************************************/
+
+#if defined(TRIO_DOCUMENTATION)
+# include "doc/doc_scanf.h"
+#endif
+/** @addtogroup Scanf
+ @{
+*/
+
+/*************************************************************************
+ * scanf
+ */
+
+/**
+ Scan characters from standard input stream.
+
+ @param format Formatting string.
+ @param ... Arguments.
+ @return Number of scanned characters.
+ */
+TRIO_PUBLIC int
+trio_scanf
+TRIO_VARGS2((format, va_alist),
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ status = TrioScan((trio_pointer_t)stdin, 0,
+ TrioInStreamFile,
+ format, &args, NULL);
+ TRIO_VA_END(args);
+ return status;
+}
+
+TRIO_PUBLIC int
+trio_vscanf
+TRIO_ARGS2((format, args),
+ TRIO_CONST char *format,
+ va_list args)
+{
+ assert(VALID(format));
+
+ return TrioScan((trio_pointer_t)stdin, 0,
+ TrioInStreamFile,
+ format, &args, NULL);
+}
+
+TRIO_PUBLIC int
+trio_scanfv
+TRIO_ARGS2((format, args),
+ TRIO_CONST char *format,
+ trio_pointer_t *args)
+{
+ assert(VALID(format));
+
+ return TrioScan((trio_pointer_t)stdin, 0,
+ TrioInStreamFile,
+ format, NULL, args);
+}
+
+/*************************************************************************
+ * fscanf
+ */
+TRIO_PUBLIC int
+trio_fscanf
+TRIO_VARGS3((file, format, va_alist),
+ FILE *file,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+
+ assert(VALID(file));
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ status = TrioScan((trio_pointer_t)file, 0,
+ TrioInStreamFile,
+ format, &args, NULL);
+ TRIO_VA_END(args);
+ return status;
+}
+
+TRIO_PUBLIC int
+trio_vfscanf
+TRIO_ARGS3((file, format, args),
+ FILE *file,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ assert(VALID(file));
+ assert(VALID(format));
+
+ return TrioScan((trio_pointer_t)file, 0,
+ TrioInStreamFile,
+ format, &args, NULL);
+}
+
+TRIO_PUBLIC int
+trio_fscanfv
+TRIO_ARGS3((file, format, args),
+ FILE *file,
+ TRIO_CONST char *format,
+ trio_pointer_t *args)
+{
+ assert(VALID(file));
+ assert(VALID(format));
+
+ return TrioScan((trio_pointer_t)file, 0,
+ TrioInStreamFile,
+ format, NULL, args);
+}
+
+/*************************************************************************
+ * dscanf
+ */
+TRIO_PUBLIC int
+trio_dscanf
+TRIO_VARGS3((fd, format, va_alist),
+ int fd,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ status = TrioScan((trio_pointer_t)&fd, 0,
+ TrioInStreamFileDescriptor,
+ format, &args, NULL);
+ TRIO_VA_END(args);
+ return status;
+}
+
+TRIO_PUBLIC int
+trio_vdscanf
+TRIO_ARGS3((fd, format, args),
+ int fd,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ assert(VALID(format));
+
+ return TrioScan((trio_pointer_t)&fd, 0,
+ TrioInStreamFileDescriptor,
+ format, &args, NULL);
+}
+
+TRIO_PUBLIC int
+trio_dscanfv
+TRIO_ARGS3((fd, format, args),
+ int fd,
+ TRIO_CONST char *format,
+ trio_pointer_t *args)
+{
+ assert(VALID(format));
+
+ return TrioScan((trio_pointer_t)&fd, 0,
+ TrioInStreamFileDescriptor,
+ format, NULL, args);
+}
+
+/*************************************************************************
+ * cscanf
+ */
+TRIO_PUBLIC int
+trio_cscanf
+TRIO_VARGS4((stream, closure, format, va_alist),
+ trio_instream_t stream,
+ trio_pointer_t closure,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+ trio_custom_t data;
+
+ assert(VALID(stream));
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ data.stream.in = stream;
+ data.closure = closure;
+ status = TrioScan(&data, 0, TrioInStreamCustom, format, &args, NULL);
+ TRIO_VA_END(args);
+ return status;
+}
+
+TRIO_PUBLIC int
+trio_vcscanf
+TRIO_ARGS4((stream, closure, format, args),
+ trio_instream_t stream,
+ trio_pointer_t closure,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ trio_custom_t data;
+
+ assert(VALID(stream));
+ assert(VALID(format));
+
+ data.stream.in = stream;
+ data.closure = closure;
+ return TrioScan(&data, 0, TrioInStreamCustom, format, &args, NULL);
+}
+
+TRIO_PUBLIC int
+trio_cscanfv
+TRIO_ARGS4((stream, closure, format, args),
+ trio_instream_t stream,
+ trio_pointer_t closure,
+ TRIO_CONST char *format,
+ trio_pointer_t *args)
+{
+ trio_custom_t data;
+
+ assert(VALID(stream));
+ assert(VALID(format));
+
+ data.stream.in = stream;
+ data.closure = closure;
+ return TrioScan(&data, 0, TrioInStreamCustom, format, NULL, args);
+}
+
+/*************************************************************************
+ * sscanf
+ */
+TRIO_PUBLIC int
+trio_sscanf
+TRIO_VARGS3((buffer, format, va_alist),
+ TRIO_CONST char *buffer,
+ TRIO_CONST char *format,
+ TRIO_VA_DECL)
+{
+ int status;
+ va_list args;
+
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ TRIO_VA_START(args, format);
+ status = TrioScan((trio_pointer_t)&buffer, 0,
+ TrioInStreamString,
+ format, &args, NULL);
+ TRIO_VA_END(args);
+ return status;
+}
+
+TRIO_PUBLIC int
+trio_vsscanf
+TRIO_ARGS3((buffer, format, args),
+ TRIO_CONST char *buffer,
+ TRIO_CONST char *format,
+ va_list args)
+{
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ return TrioScan((trio_pointer_t)&buffer, 0,
+ TrioInStreamString,
+ format, &args, NULL);
+}
+
+TRIO_PUBLIC int
+trio_sscanfv
+TRIO_ARGS3((buffer, format, args),
+ TRIO_CONST char *buffer,
+ TRIO_CONST char *format,
+ trio_pointer_t *args)
+{
+ assert(VALID(buffer));
+ assert(VALID(format));
+
+ return TrioScan((trio_pointer_t)&buffer, 0,
+ TrioInStreamString,
+ format, NULL, args);
+}
+
+/** @} End of Scanf documentation module */
+
+/*************************************************************************
+ * trio_strerror
+ */
+TRIO_PUBLIC TRIO_CONST char *
+trio_strerror
+TRIO_ARGS1((errorcode),
+ int errorcode)
+{
+ /* Textual versions of the error codes */
+ switch (TRIO_ERROR_CODE(errorcode))
+ {
+ case TRIO_EOF:
+ return "End of file";
+ case TRIO_EINVAL:
+ return "Invalid argument";
+ case TRIO_ETOOMANY:
+ return "Too many arguments";
+ case TRIO_EDBLREF:
+ return "Double reference";
+ case TRIO_EGAP:
+ return "Reference gap";
+ case TRIO_ENOMEM:
+ return "Out of memory";
+ case TRIO_ERANGE:
+ return "Invalid range";
+ case TRIO_ECUSTOM:
+ return "Custom error";
+ default:
+ return "Unknown";
+ }
+}
diff --git a/trio.h b/trio.h
new file mode 100644
index 0000000..6a3c21a
--- /dev/null
+++ b/trio.h
@@ -0,0 +1,216 @@
+/*************************************************************************
+ *
+ * $Id: trio.h,v 1.6 2003/04/03 15:28:27 veillard Exp $
+ *
+ * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ *************************************************************************
+ *
+ * http://ctrio.sourceforge.net/
+ *
+ ************************************************************************/
+
+#ifndef TRIO_TRIO_H
+#define TRIO_TRIO_H
+
+#if !defined(WITHOUT_TRIO)
+
+/*
+ * Use autoconf defines if present. Packages using trio must define
+ * HAVE_CONFIG_H as a compiler option themselves.
+ */
+#if defined(HAVE_CONFIG_H)
+# include <config.h>
+#endif
+
+#include "triodef.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#if defined(TRIO_COMPILER_ANCIENT)
+# include <varargs.h>
+#else
+# include <stdarg.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Error codes.
+ *
+ * Remember to add a textual description to trio_strerror.
+ */
+enum {
+ TRIO_EOF = 1,
+ TRIO_EINVAL = 2,
+ TRIO_ETOOMANY = 3,
+ TRIO_EDBLREF = 4,
+ TRIO_EGAP = 5,
+ TRIO_ENOMEM = 6,
+ TRIO_ERANGE = 7,
+ TRIO_ERRNO = 8,
+ TRIO_ECUSTOM = 9
+};
+
+/* Error macros */
+#define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF)
+#define TRIO_ERROR_POSITION(x) ((-(x)) >> 8)
+#define TRIO_ERROR_NAME(x) trio_strerror(x)
+
+typedef int (*trio_outstream_t) TRIO_PROTO((trio_pointer_t, int));
+typedef int (*trio_instream_t) TRIO_PROTO((trio_pointer_t));
+
+TRIO_CONST char *trio_strerror TRIO_PROTO((int));
+
+/*************************************************************************
+ * Print Functions
+ */
+
+int trio_printf TRIO_PROTO((TRIO_CONST char *format, ...));
+int trio_vprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
+int trio_printfv TRIO_PROTO((TRIO_CONST char *format, void **args));
+
+int trio_fprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
+int trio_vfprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
+int trio_fprintfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
+
+int trio_dprintf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
+int trio_vdprintf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
+int trio_dprintfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
+
+int trio_cprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
+ TRIO_CONST char *format, ...));
+int trio_vcprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
+ TRIO_CONST char *format, va_list args));
+int trio_cprintfv TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
+ TRIO_CONST char *format, void **args));
+
+int trio_sprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, ...));
+int trio_vsprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, va_list args));
+int trio_sprintfv TRIO_PROTO((char *buffer, TRIO_CONST char *format, void **args));
+
+int trio_snprintf TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
+int trio_vsnprintf TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
+ va_list args));
+int trio_snprintfv TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
+ void **args));
+
+int trio_snprintfcat TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
+int trio_vsnprintfcat TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
+ va_list args));
+
+char *trio_aprintf TRIO_PROTO((TRIO_CONST char *format, ...));
+char *trio_vaprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
+
+int trio_asprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, ...));
+int trio_vasprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, va_list args));
+
+/*************************************************************************
+ * Scan Functions
+ */
+int trio_scanf TRIO_PROTO((TRIO_CONST char *format, ...));
+int trio_vscanf TRIO_PROTO((TRIO_CONST char *format, va_list args));
+int trio_scanfv TRIO_PROTO((TRIO_CONST char *format, void **args));
+
+int trio_fscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
+int trio_vfscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
+int trio_fscanfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
+
+int trio_dscanf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
+int trio_vdscanf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
+int trio_dscanfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
+
+int trio_cscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
+ TRIO_CONST char *format, ...));
+int trio_vcscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
+ TRIO_CONST char *format, va_list args));
+int trio_cscanfv TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
+ TRIO_CONST char *format, void **args));
+
+int trio_sscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, ...));
+int trio_vsscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, va_list args));
+int trio_sscanfv TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, void **args));
+
+/*************************************************************************
+ * Locale Functions
+ */
+void trio_locale_set_decimal_point TRIO_PROTO((char *decimalPoint));
+void trio_locale_set_thousand_separator TRIO_PROTO((char *thousandSeparator));
+void trio_locale_set_grouping TRIO_PROTO((char *grouping));
+
+/*************************************************************************
+ * Renaming
+ */
+#ifdef TRIO_REPLACE_STDIO
+/* Replace the <stdio.h> functions */
+#ifndef HAVE_PRINTF
+# define printf trio_printf
+#endif
+#ifndef HAVE_VPRINTF
+# define vprintf trio_vprintf
+#endif
+#ifndef HAVE_FPRINTF
+# define fprintf trio_fprintf
+#endif
+#ifndef HAVE_VFPRINTF
+# define vfprintf trio_vfprintf
+#endif
+#ifndef HAVE_SPRINTF
+# define sprintf trio_sprintf
+#endif
+#ifndef HAVE_VSPRINTF
+# define vsprintf trio_vsprintf
+#endif
+#ifndef HAVE_SNPRINTF
+# define snprintf trio_snprintf
+#endif
+#ifndef HAVE_VSNPRINTF
+# define vsnprintf trio_vsnprintf
+#endif
+#ifndef HAVE_SCANF
+# define scanf trio_scanf
+#endif
+#ifndef HAVE_VSCANF
+# define vscanf trio_vscanf
+#endif
+#ifndef HAVE_FSCANF
+# define fscanf trio_fscanf
+#endif
+#ifndef HAVE_VFSCANF
+# define vfscanf trio_vfscanf
+#endif
+#ifndef HAVE_SSCANF
+# define sscanf trio_sscanf
+#endif
+#ifndef HAVE_VSSCANF
+# define vsscanf trio_vsscanf
+#endif
+/* These aren't stdio functions, but we make them look similar */
+#define dprintf trio_dprintf
+#define vdprintf trio_vdprintf
+#define aprintf trio_aprintf
+#define vaprintf trio_vaprintf
+#define asprintf trio_asprintf
+#define vasprintf trio_vasprintf
+#define dscanf trio_dscanf
+#define vdscanf trio_vdscanf
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* WITHOUT_TRIO */
+
+#endif /* TRIO_TRIO_H */
diff --git a/triodef.h b/triodef.h
new file mode 100644
index 0000000..fb87958
--- /dev/null
+++ b/triodef.h
@@ -0,0 +1,220 @@
+/*************************************************************************
+ *
+ * $Id: triodef.h,v 1.7 2003/04/25 23:12:21 veillard Exp $
+ *
+ * Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ ************************************************************************/
+
+#ifndef TRIO_TRIODEF_H
+#define TRIO_TRIODEF_H
+
+/*************************************************************************
+ * Platform and compiler support detection
+ */
+#if defined(__GNUC__)
+# define TRIO_COMPILER_GCC
+#elif defined(__SUNPRO_C)
+# define TRIO_COMPILER_SUNPRO
+#elif defined(__SUNPRO_CC)
+# define TRIO_COMPILER_SUNPRO
+# define __SUNPRO_C __SUNPRO_CC
+#elif defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)
+# define TRIO_COMPILER_XLC
+#elif defined(_AIX) && !defined(__GNUC__)
+# define TRIO_COMPILER_XLC /* Workaround for old xlc */
+#elif defined(__DECC) || defined(__DECCXX)
+# define TRIO_COMPILER_DECC
+#elif defined(__osf__) && defined(__LANGUAGE_C__)
+# define TRIO_COMPILER_DECC /* Workaround for old DEC C compilers */
+#elif defined(_MSC_VER)
+# define TRIO_COMPILER_MSVC
+#elif defined(__BORLANDC__)
+# define TRIO_COMPILER_BCB
+#endif
+
+#if defined(VMS) || defined(__VMS)
+/*
+ * VMS is placed first to avoid identifying the platform as Unix
+ * based on the DECC compiler later on.
+ */
+# define TRIO_PLATFORM_VMS
+#elif defined(unix) || defined(__unix) || defined(__unix__)
+# define TRIO_PLATFORM_UNIX
+#elif defined(TRIO_COMPILER_XLC) || defined(_AIX)
+# define TRIO_PLATFORM_UNIX
+#elif defined(TRIO_COMPILER_DECC) || defined(__osf___)
+# define TRIO_PLATFORM_UNIX
+#elif defined(__NetBSD__)
+# define TRIO_PLATFORM_UNIX
+#elif defined(__QNX__)
+# define TRIO_PLATFORM_UNIX
+# define TRIO_PLATFORM_QNX
+#elif defined(__CYGWIN__)
+# define TRIO_PLATFORM_UNIX
+#elif defined(AMIGA) && defined(TRIO_COMPILER_GCC)
+# define TRIO_PLATFORM_UNIX
+#elif defined(TRIO_COMPILER_MSVC) || defined(WIN32) || defined(_WIN32)
+# define TRIO_PLATFORM_WIN32
+#elif defined(mpeix) || defined(__mpexl)
+# define TRIO_PLATFORM_MPEIX
+#endif
+
+#if defined(_AIX)
+# define TRIO_PLATFORM_AIX
+#elif defined(__hpux)
+# define TRIO_PLATFORM_HPUX
+#elif defined(sun) || defined(__sun__)
+# if defined(__SVR4) || defined(__svr4__)
+# define TRIO_PLATFORM_SOLARIS
+# else
+# define TRIO_PLATFORM_SUNOS
+# endif
+#endif
+
+#if defined(__STDC__) || defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
+# define TRIO_COMPILER_SUPPORTS_C89
+# if defined(__STDC_VERSION__)
+# define TRIO_COMPILER_SUPPORTS_C90
+# if (__STDC_VERSION__ >= 199409L)
+# define TRIO_COMPILER_SUPPORTS_C94
+# endif
+# if (__STDC_VERSION__ >= 199901L)
+# define TRIO_COMPILER_SUPPORTS_C99
+# endif
+# elif defined(TRIO_COMPILER_SUNPRO)
+# if (__SUNPRO_C >= 0x420)
+# define TRIO_COMPILER_SUPPORTS_C94
+# endif
+# endif
+#endif
+
+#if defined(_XOPEN_SOURCE)
+# if defined(_XOPEN_SOURCE_EXTENDED)
+# define TRIO_COMPILER_SUPPORTS_UNIX95
+# endif
+# if (_XOPEN_VERSION >= 500)
+# define TRIO_COMPILER_SUPPORTS_UNIX98
+# endif
+# if (_XOPEN_VERSION >= 600)
+# define TRIO_COMPILER_SUPPORTS_UNIX01
+# endif
+#endif
+
+/*************************************************************************
+ * Generic defines
+ */
+
+#if !defined(TRIO_PUBLIC)
+# define TRIO_PUBLIC
+#endif
+#if !defined(TRIO_PRIVATE)
+# define TRIO_PRIVATE static
+#endif
+
+#if !(defined(TRIO_COMPILER_SUPPORTS_C89) || defined(__cplusplus))
+# define TRIO_COMPILER_ANCIENT
+#endif
+
+#if defined(TRIO_COMPILER_ANCIENT)
+# define TRIO_CONST
+# define TRIO_VOLATILE
+# define TRIO_SIGNED
+typedef double trio_long_double_t;
+typedef char * trio_pointer_t;
+# define TRIO_SUFFIX_LONG(x) x
+# define TRIO_PROTO(x) ()
+# define TRIO_NOARGS
+# define TRIO_ARGS1(list,a1) list a1;
+# define TRIO_ARGS2(list,a1,a2) list a1; a2;
+# define TRIO_ARGS3(list,a1,a2,a3) list a1; a2; a3;
+# define TRIO_ARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4;
+# define TRIO_ARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5;
+# define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) list a1; a2; a3; a4; a5; a6;
+# define TRIO_VARGS2(list,a1,a2) list a1; a2
+# define TRIO_VARGS3(list,a1,a2,a3) list a1; a2; a3
+# define TRIO_VARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4
+# define TRIO_VARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5
+# define TRIO_VA_DECL va_dcl
+# define TRIO_VA_START(x,y) va_start(x)
+# define TRIO_VA_END(x) va_end(x)
+#else /* ANSI C */
+# define TRIO_CONST const
+# define TRIO_VOLATILE volatile
+# define TRIO_SIGNED signed
+typedef long double trio_long_double_t;
+typedef void * trio_pointer_t;
+# define TRIO_SUFFIX_LONG(x) x ## L
+# define TRIO_PROTO(x) x
+# define TRIO_NOARGS void
+# define TRIO_ARGS1(list,a1) (a1)
+# define TRIO_ARGS2(list,a1,a2) (a1,a2)
+# define TRIO_ARGS3(list,a1,a2,a3) (a1,a2,a3)
+# define TRIO_ARGS4(list,a1,a2,a3,a4) (a1,a2,a3,a4)
+# define TRIO_ARGS5(list,a1,a2,a3,a4,a5) (a1,a2,a3,a4,a5)
+# define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) (a1,a2,a3,a4,a5,a6)
+# define TRIO_VARGS2 TRIO_ARGS2
+# define TRIO_VARGS3 TRIO_ARGS3
+# define TRIO_VARGS4 TRIO_ARGS4
+# define TRIO_VARGS5 TRIO_ARGS5
+# define TRIO_VA_DECL ...
+# define TRIO_VA_START(x,y) va_start(x,y)
+# define TRIO_VA_END(x) va_end(x)
+#endif
+
+#if defined(TRIO_COMPILER_SUPPORTS_C99) || defined(__cplusplus)
+# define TRIO_INLINE inline
+#elif defined(TRIO_COMPILER_GCC)
+# define TRIO_INLINE __inline__
+#elif defined(TRIO_COMPILER_MSVC)
+# define TRIO_INLINE _inline
+#elif defined(TRIO_COMPILER_BCB)
+# define TRIO_INLINE __inline
+#else
+# define TRIO_INLINE
+#endif
+
+/*************************************************************************
+ * Workarounds
+ */
+
+#if defined(TRIO_PLATFORM_VMS)
+/*
+ * Computations done with constants at compile time can trigger these
+ * even when compiling with IEEE enabled.
+ */
+# pragma message disable (UNDERFLOW, FLOATOVERFL)
+
+# if (__CRTL_VER < 80000000)
+/*
+ * Although the compiler supports C99 language constructs, the C
+ * run-time library does not contain all C99 functions.
+ *
+ * This was the case for 70300022. Update the 80000000 value when
+ * it has been accurately determined what version of the library
+ * supports C99.
+ */
+# if defined(TRIO_COMPILER_SUPPORTS_C99)
+# undef TRIO_COMPILER_SUPPORTS_C99
+# endif
+# endif
+#endif
+
+/*
+ * Not all preprocessors supports the LL token.
+ */
+#if defined(TRIO_COMPILER_BCB)
+#else
+# define TRIO_COMPILER_SUPPORTS_LL
+#endif
+
+#endif /* TRIO_TRIODEF_H */
diff --git a/trionan.c b/trionan.c
new file mode 100644
index 0000000..5248eaf
--- /dev/null
+++ b/trionan.c
@@ -0,0 +1,910 @@
+/*************************************************************************
+ *
+ * $Id: trionan.c,v 1.14 2003/10/15 08:17:58 veillard Exp $
+ *
+ * Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ ************************************************************************
+ *
+ * Functions to handle special quantities in floating-point numbers
+ * (that is, NaNs and infinity). They provide the capability to detect
+ * and fabricate special quantities.
+ *
+ * Although written to be as portable as possible, it can never be
+ * guaranteed to work on all platforms, as not all hardware supports
+ * special quantities.
+ *
+ * The approach used here (approximately) is to:
+ *
+ * 1. Use C99 functionality when available.
+ * 2. Use IEEE 754 bit-patterns if possible.
+ * 3. Use platform-specific techniques.
+ *
+ ************************************************************************/
+
+/*
+ * TODO:
+ * o Put all the magic into trio_fpclassify_and_signbit(), and use this from
+ * trio_isnan() etc.
+ */
+
+/*************************************************************************
+ * Include files
+ */
+#include "triodef.h"
+#include "trionan.h"
+
+#include <math.h>
+#include <string.h>
+#include <limits.h>
+#include <float.h>
+#if defined(TRIO_PLATFORM_UNIX)
+# include <signal.h>
+#endif
+#if defined(TRIO_COMPILER_DECC)
+# if defined(__linux__)
+# include <cpml.h>
+# else
+# include <fp_class.h>
+# endif
+#endif
+#include <assert.h>
+
+#if defined(TRIO_DOCUMENTATION)
+# include "doc/doc_nan.h"
+#endif
+/** @addtogroup SpecialQuantities
+ @{
+*/
+
+/*************************************************************************
+ * Definitions
+ */
+
+#define TRIO_TRUE (1 == 1)
+#define TRIO_FALSE (0 == 1)
+
+/*
+ * We must enable IEEE floating-point on Alpha
+ */
+#if defined(__alpha) && !defined(_IEEE_FP)
+# if defined(TRIO_COMPILER_DECC)
+# if defined(TRIO_PLATFORM_VMS)
+# error "Must be compiled with option /IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE"
+# else
+# if !defined(_CFE)
+# error "Must be compiled with option -ieee"
+# endif
+# endif
+# elif defined(TRIO_COMPILER_GCC) && (defined(__osf__) || defined(__linux__))
+# error "Must be compiled with option -mieee"
+# endif
+#endif /* __alpha && ! _IEEE_FP */
+
+/*
+ * In ANSI/IEEE 754-1985 64-bits double format numbers have the
+ * following properties (amoungst others)
+ *
+ * o FLT_RADIX == 2: binary encoding
+ * o DBL_MAX_EXP == 1024: 11 bits exponent, where one bit is used
+ * to indicate special numbers (e.g. NaN and Infinity), so the
+ * maximum exponent is 10 bits wide (2^10 == 1024).
+ * o DBL_MANT_DIG == 53: The mantissa is 52 bits wide, but because
+ * numbers are normalized the initial binary 1 is represented
+ * implicitly (the so-called "hidden bit"), which leaves us with
+ * the ability to represent 53 bits wide mantissa.
+ */
+#if (FLT_RADIX == 2) && (DBL_MAX_EXP == 1024) && (DBL_MANT_DIG == 53)
+# define USE_IEEE_754
+#endif
+
+
+/*************************************************************************
+ * Constants
+ */
+
+static TRIO_CONST char rcsid[] = "@(#)$Id: trionan.c,v 1.14 2003/10/15 08:17:58 veillard Exp $";
+
+#if defined(USE_IEEE_754)
+
+/*
+ * Endian-agnostic indexing macro.
+ *
+ * The value of internalEndianMagic, when converted into a 64-bit
+ * integer, becomes 0x0706050403020100 (we could have used a 64-bit
+ * integer value instead of a double, but not all platforms supports
+ * that type). The value is automatically encoded with the correct
+ * endianess by the compiler, which means that we can support any
+ * kind of endianess. The individual bytes are then used as an index
+ * for the IEEE 754 bit-patterns and masks.
+ */
+#define TRIO_DOUBLE_INDEX(x) (((unsigned char *)&internalEndianMagic)[7-(x)])
+
+static TRIO_CONST double internalEndianMagic = 7.949928895127363e-275;
+
+/* Mask for the exponent */
+static TRIO_CONST unsigned char ieee_754_exponent_mask[] = {
+ 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/* Mask for the mantissa */
+static TRIO_CONST unsigned char ieee_754_mantissa_mask[] = {
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+};
+
+/* Mask for the sign bit */
+static TRIO_CONST unsigned char ieee_754_sign_mask[] = {
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/* Bit-pattern for negative zero */
+static TRIO_CONST unsigned char ieee_754_negzero_array[] = {
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/* Bit-pattern for infinity */
+static TRIO_CONST unsigned char ieee_754_infinity_array[] = {
+ 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/* Bit-pattern for quiet NaN */
+static TRIO_CONST unsigned char ieee_754_qnan_array[] = {
+ 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+
+/*************************************************************************
+ * Functions
+ */
+
+/*
+ * trio_make_double
+ */
+TRIO_PRIVATE double
+trio_make_double
+TRIO_ARGS1((values),
+ TRIO_CONST unsigned char *values)
+{
+ TRIO_VOLATILE double result;
+ int i;
+
+ for (i = 0; i < (int)sizeof(double); i++) {
+ ((TRIO_VOLATILE unsigned char *)&result)[TRIO_DOUBLE_INDEX(i)] = values[i];
+ }
+ return result;
+}
+
+/*
+ * trio_is_special_quantity
+ */
+TRIO_PRIVATE int
+trio_is_special_quantity
+TRIO_ARGS2((number, has_mantissa),
+ double number,
+ int *has_mantissa)
+{
+ unsigned int i;
+ unsigned char current;
+ int is_special_quantity = TRIO_TRUE;
+
+ *has_mantissa = 0;
+
+ for (i = 0; i < (unsigned int)sizeof(double); i++) {
+ current = ((unsigned char *)&number)[TRIO_DOUBLE_INDEX(i)];
+ is_special_quantity
+ &= ((current & ieee_754_exponent_mask[i]) == ieee_754_exponent_mask[i]);
+ *has_mantissa |= (current & ieee_754_mantissa_mask[i]);
+ }
+ return is_special_quantity;
+}
+
+/*
+ * trio_is_negative
+ */
+TRIO_PRIVATE int
+trio_is_negative
+TRIO_ARGS1((number),
+ double number)
+{
+ unsigned int i;
+ int is_negative = TRIO_FALSE;
+
+ for (i = 0; i < (unsigned int)sizeof(double); i++) {
+ is_negative |= (((unsigned char *)&number)[TRIO_DOUBLE_INDEX(i)]
+ & ieee_754_sign_mask[i]);
+ }
+ return is_negative;
+}
+
+#endif /* USE_IEEE_754 */
+
+
+/**
+ Generate negative zero.
+
+ @return Floating-point representation of negative zero.
+*/
+TRIO_PUBLIC double
+trio_nzero(TRIO_NOARGS)
+{
+#if defined(USE_IEEE_754)
+ return trio_make_double(ieee_754_negzero_array);
+#else
+ TRIO_VOLATILE double zero = 0.0;
+
+ return -zero;
+#endif
+}
+
+/**
+ Generate positive infinity.
+
+ @return Floating-point representation of positive infinity.
+*/
+TRIO_PUBLIC double
+trio_pinf(TRIO_NOARGS)
+{
+ /* Cache the result */
+ static double result = 0.0;
+
+ if (result == 0.0) {
+
+#if defined(INFINITY) && defined(__STDC_IEC_559__)
+ result = (double)INFINITY;
+
+#elif defined(USE_IEEE_754)
+ result = trio_make_double(ieee_754_infinity_array);
+
+#else
+ /*
+ * If HUGE_VAL is different from DBL_MAX, then HUGE_VAL is used
+ * as infinity. Otherwise we have to resort to an overflow
+ * operation to generate infinity.
+ */
+# if defined(TRIO_PLATFORM_UNIX)
+ void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
+# endif
+
+ result = HUGE_VAL;
+ if (HUGE_VAL == DBL_MAX) {
+ /* Force overflow */
+ result += HUGE_VAL;
+ }
+
+# if defined(TRIO_PLATFORM_UNIX)
+ signal(SIGFPE, signal_handler);
+# endif
+
+#endif
+ }
+ return result;
+}
+
+/**
+ Generate negative infinity.
+
+ @return Floating-point value of negative infinity.
+*/
+TRIO_PUBLIC double
+trio_ninf(TRIO_NOARGS)
+{
+ static double result = 0.0;
+
+ if (result == 0.0) {
+ /*
+ * Negative infinity is calculated by negating positive infinity,
+ * which can be done because it is legal to do calculations on
+ * infinity (for example, 1 / infinity == 0).
+ */
+ result = -trio_pinf();
+ }
+ return result;
+}
+
+/**
+ Generate NaN.
+
+ @return Floating-point representation of NaN.
+*/
+TRIO_PUBLIC double
+trio_nan(TRIO_NOARGS)
+{
+ /* Cache the result */
+ static double result = 0.0;
+
+ if (result == 0.0) {
+
+#if defined(TRIO_COMPILER_SUPPORTS_C99)
+ result = nan("");
+
+#elif defined(NAN) && defined(__STDC_IEC_559__)
+ result = (double)NAN;
+
+#elif defined(USE_IEEE_754)
+ result = trio_make_double(ieee_754_qnan_array);
+
+#else
+ /*
+ * There are several ways to generate NaN. The one used here is
+ * to divide infinity by infinity. I would have preferred to add
+ * negative infinity to positive infinity, but that yields wrong
+ * result (infinity) on FreeBSD.
+ *
+ * This may fail if the hardware does not support NaN, or if
+ * the Invalid Operation floating-point exception is unmasked.
+ */
+# if defined(TRIO_PLATFORM_UNIX)
+ void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
+# endif
+
+ result = trio_pinf() / trio_pinf();
+
+# if defined(TRIO_PLATFORM_UNIX)
+ signal(SIGFPE, signal_handler);
+# endif
+
+#endif
+ }
+ return result;
+}
+
+/**
+ Check for NaN.
+
+ @param number An arbitrary floating-point number.
+ @return Boolean value indicating whether or not the number is a NaN.
+*/
+TRIO_PUBLIC int
+trio_isnan
+TRIO_ARGS1((number),
+ double number)
+{
+#if (defined(TRIO_COMPILER_SUPPORTS_C99) && defined(isnan)) \
+ || defined(TRIO_COMPILER_SUPPORTS_UNIX95)
+ /*
+ * C99 defines isnan() as a macro. UNIX95 defines isnan() as a
+ * function. This function was already present in XPG4, but this
+ * is a bit tricky to detect with compiler defines, so we choose
+ * the conservative approach and only use it for UNIX95.
+ */
+ return isnan(number);
+
+#elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
+ /*
+ * Microsoft Visual C++ and Borland C++ Builder have an _isnan()
+ * function.
+ */
+ return _isnan(number) ? TRIO_TRUE : TRIO_FALSE;
+
+#elif defined(USE_IEEE_754)
+ /*
+ * Examine IEEE 754 bit-pattern. A NaN must have a special exponent
+ * pattern, and a non-empty mantissa.
+ */
+ int has_mantissa;
+ int is_special_quantity;
+
+ is_special_quantity = trio_is_special_quantity(number, &has_mantissa);
+
+ return (is_special_quantity && has_mantissa);
+
+#else
+ /*
+ * Fallback solution
+ */
+ int status;
+ double integral, fraction;
+
+# if defined(TRIO_PLATFORM_UNIX)
+ void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
+# endif
+
+ status = (/*
+ * NaN is the only number which does not compare to itself
+ */
+ ((TRIO_VOLATILE double)number != (TRIO_VOLATILE double)number) ||
+ /*
+ * Fallback solution if NaN compares to NaN
+ */
+ ((number != 0.0) &&
+ (fraction = modf(number, &integral),
+ integral == fraction)));
+
+# if defined(TRIO_PLATFORM_UNIX)
+ signal(SIGFPE, signal_handler);
+# endif
+
+ return status;
+
+#endif
+}
+
+/**
+ Check for infinity.
+
+ @param number An arbitrary floating-point number.
+ @return 1 if positive infinity, -1 if negative infinity, 0 otherwise.
+*/
+TRIO_PUBLIC int
+trio_isinf
+TRIO_ARGS1((number),
+ double number)
+{
+#if defined(TRIO_COMPILER_DECC) && !defined(__linux__)
+ /*
+ * DECC has an isinf() macro, but it works differently than that
+ * of C99, so we use the fp_class() function instead.
+ */
+ return ((fp_class(number) == FP_POS_INF)
+ ? 1
+ : ((fp_class(number) == FP_NEG_INF) ? -1 : 0));
+
+#elif defined(isinf)
+ /*
+ * C99 defines isinf() as a macro.
+ */
+ return isinf(number)
+ ? ((number > 0.0) ? 1 : -1)
+ : 0;
+
+#elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
+ /*
+ * Microsoft Visual C++ and Borland C++ Builder have an _fpclass()
+ * function that can be used to detect infinity.
+ */
+ return ((_fpclass(number) == _FPCLASS_PINF)
+ ? 1
+ : ((_fpclass(number) == _FPCLASS_NINF) ? -1 : 0));
+
+#elif defined(USE_IEEE_754)
+ /*
+ * Examine IEEE 754 bit-pattern. Infinity must have a special exponent
+ * pattern, and an empty mantissa.
+ */
+ int has_mantissa;
+ int is_special_quantity;
+
+ is_special_quantity = trio_is_special_quantity(number, &has_mantissa);
+
+ return (is_special_quantity && !has_mantissa)
+ ? ((number < 0.0) ? -1 : 1)
+ : 0;
+
+#else
+ /*
+ * Fallback solution.
+ */
+ int status;
+
+# if defined(TRIO_PLATFORM_UNIX)
+ void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
+# endif
+
+ double infinity = trio_pinf();
+
+ status = ((number == infinity)
+ ? 1
+ : ((number == -infinity) ? -1 : 0));
+
+# if defined(TRIO_PLATFORM_UNIX)
+ signal(SIGFPE, signal_handler);
+# endif
+
+ return status;
+
+#endif
+}
+
+#if 0
+ /* Temporary fix - this routine is not used anywhere */
+/**
+ Check for finity.
+
+ @param number An arbitrary floating-point number.
+ @return Boolean value indicating whether or not the number is a finite.
+*/
+TRIO_PUBLIC int
+trio_isfinite
+TRIO_ARGS1((number),
+ double number)
+{
+#if defined(TRIO_COMPILER_SUPPORTS_C99) && defined(isfinite)
+ /*
+ * C99 defines isfinite() as a macro.
+ */
+ return isfinite(number);
+
+#elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
+ /*
+ * Microsoft Visual C++ and Borland C++ Builder use _finite().
+ */
+ return _finite(number);
+
+#elif defined(USE_IEEE_754)
+ /*
+ * Examine IEEE 754 bit-pattern. For finity we do not care about the
+ * mantissa.
+ */
+ int dummy;
+
+ return (! trio_is_special_quantity(number, &dummy));
+
+#else
+ /*
+ * Fallback solution.
+ */
+ return ((trio_isinf(number) == 0) && (trio_isnan(number) == 0));
+
+#endif
+}
+
+#endif
+
+/*
+ * The sign of NaN is always false
+ */
+TRIO_PUBLIC int
+trio_fpclassify_and_signbit
+TRIO_ARGS2((number, is_negative),
+ double number,
+ int *is_negative)
+{
+#if defined(fpclassify) && defined(signbit)
+ /*
+ * C99 defines fpclassify() and signbit() as a macros
+ */
+ *is_negative = signbit(number);
+ switch (fpclassify(number)) {
+ case FP_NAN:
+ return TRIO_FP_NAN;
+ case FP_INFINITE:
+ return TRIO_FP_INFINITE;
+ case FP_SUBNORMAL:
+ return TRIO_FP_SUBNORMAL;
+ case FP_ZERO:
+ return TRIO_FP_ZERO;
+ default:
+ return TRIO_FP_NORMAL;
+ }
+
+#else
+# if defined(TRIO_COMPILER_DECC)
+ /*
+ * DECC has an fp_class() function.
+ */
+# define TRIO_FPCLASSIFY(n) fp_class(n)
+# define TRIO_QUIET_NAN FP_QNAN
+# define TRIO_SIGNALLING_NAN FP_SNAN
+# define TRIO_POSITIVE_INFINITY FP_POS_INF
+# define TRIO_NEGATIVE_INFINITY FP_NEG_INF
+# define TRIO_POSITIVE_SUBNORMAL FP_POS_DENORM
+# define TRIO_NEGATIVE_SUBNORMAL FP_NEG_DENORM
+# define TRIO_POSITIVE_ZERO FP_POS_ZERO
+# define TRIO_NEGATIVE_ZERO FP_NEG_ZERO
+# define TRIO_POSITIVE_NORMAL FP_POS_NORM
+# define TRIO_NEGATIVE_NORMAL FP_NEG_NORM
+
+# elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
+ /*
+ * Microsoft Visual C++ and Borland C++ Builder have an _fpclass()
+ * function.
+ */
+# define TRIO_FPCLASSIFY(n) _fpclass(n)
+# define TRIO_QUIET_NAN _FPCLASS_QNAN
+# define TRIO_SIGNALLING_NAN _FPCLASS_SNAN
+# define TRIO_POSITIVE_INFINITY _FPCLASS_PINF
+# define TRIO_NEGATIVE_INFINITY _FPCLASS_NINF
+# define TRIO_POSITIVE_SUBNORMAL _FPCLASS_PD
+# define TRIO_NEGATIVE_SUBNORMAL _FPCLASS_ND
+# define TRIO_POSITIVE_ZERO _FPCLASS_PZ
+# define TRIO_NEGATIVE_ZERO _FPCLASS_NZ
+# define TRIO_POSITIVE_NORMAL _FPCLASS_PN
+# define TRIO_NEGATIVE_NORMAL _FPCLASS_NN
+
+# elif defined(FP_PLUS_NORM)
+ /*
+ * HP-UX 9.x and 10.x have an fpclassify() function, that is different
+ * from the C99 fpclassify() macro supported on HP-UX 11.x.
+ *
+ * AIX has class() for C, and _class() for C++, which returns the
+ * same values as the HP-UX fpclassify() function.
+ */
+# if defined(TRIO_PLATFORM_AIX)
+# if defined(__cplusplus)
+# define TRIO_FPCLASSIFY(n) _class(n)
+# else
+# define TRIO_FPCLASSIFY(n) class(n)
+# endif
+# else
+# define TRIO_FPCLASSIFY(n) fpclassify(n)
+# endif
+# define TRIO_QUIET_NAN FP_QNAN
+# define TRIO_SIGNALLING_NAN FP_SNAN
+# define TRIO_POSITIVE_INFINITY FP_PLUS_INF
+# define TRIO_NEGATIVE_INFINITY FP_MINUS_INF
+# define TRIO_POSITIVE_SUBNORMAL FP_PLUS_DENORM
+# define TRIO_NEGATIVE_SUBNORMAL FP_MINUS_DENORM
+# define TRIO_POSITIVE_ZERO FP_PLUS_ZERO
+# define TRIO_NEGATIVE_ZERO FP_MINUS_ZERO
+# define TRIO_POSITIVE_NORMAL FP_PLUS_NORM
+# define TRIO_NEGATIVE_NORMAL FP_MINUS_NORM
+# endif
+
+# if defined(TRIO_FPCLASSIFY)
+ switch (TRIO_FPCLASSIFY(number)) {
+ case TRIO_QUIET_NAN:
+ case TRIO_SIGNALLING_NAN:
+ *is_negative = TRIO_FALSE; /* NaN has no sign */
+ return TRIO_FP_NAN;
+ case TRIO_POSITIVE_INFINITY:
+ *is_negative = TRIO_FALSE;
+ return TRIO_FP_INFINITE;
+ case TRIO_NEGATIVE_INFINITY:
+ *is_negative = TRIO_TRUE;
+ return TRIO_FP_INFINITE;
+ case TRIO_POSITIVE_SUBNORMAL:
+ *is_negative = TRIO_FALSE;
+ return TRIO_FP_SUBNORMAL;
+ case TRIO_NEGATIVE_SUBNORMAL:
+ *is_negative = TRIO_TRUE;
+ return TRIO_FP_SUBNORMAL;
+ case TRIO_POSITIVE_ZERO:
+ *is_negative = TRIO_FALSE;
+ return TRIO_FP_ZERO;
+ case TRIO_NEGATIVE_ZERO:
+ *is_negative = TRIO_TRUE;
+ return TRIO_FP_ZERO;
+ case TRIO_POSITIVE_NORMAL:
+ *is_negative = TRIO_FALSE;
+ return TRIO_FP_NORMAL;
+ case TRIO_NEGATIVE_NORMAL:
+ *is_negative = TRIO_TRUE;
+ return TRIO_FP_NORMAL;
+ default:
+ /* Just in case... */
+ *is_negative = (number < 0.0);
+ return TRIO_FP_NORMAL;
+ }
+
+# else
+ /*
+ * Fallback solution.
+ */
+ int rc;
+
+ if (number == 0.0) {
+ /*
+ * In IEEE 754 the sign of zero is ignored in comparisons, so we
+ * have to handle this as a special case by examining the sign bit
+ * directly.
+ */
+# if defined(USE_IEEE_754)
+ *is_negative = trio_is_negative(number);
+# else
+ *is_negative = TRIO_FALSE; /* FIXME */
+# endif
+ return TRIO_FP_ZERO;
+ }
+ if (trio_isnan(number)) {
+ *is_negative = TRIO_FALSE;
+ return TRIO_FP_NAN;
+ }
+ if ((rc = trio_isinf(number))) {
+ *is_negative = (rc == -1);
+ return TRIO_FP_INFINITE;
+ }
+ if ((number > 0.0) && (number < DBL_MIN)) {
+ *is_negative = TRIO_FALSE;
+ return TRIO_FP_SUBNORMAL;
+ }
+ if ((number < 0.0) && (number > -DBL_MIN)) {
+ *is_negative = TRIO_TRUE;
+ return TRIO_FP_SUBNORMAL;
+ }
+ *is_negative = (number < 0.0);
+ return TRIO_FP_NORMAL;
+
+# endif
+#endif
+}
+
+/**
+ Examine the sign of a number.
+
+ @param number An arbitrary floating-point number.
+ @return Boolean value indicating whether or not the number has the
+ sign bit set (i.e. is negative).
+*/
+TRIO_PUBLIC int
+trio_signbit
+TRIO_ARGS1((number),
+ double number)
+{
+ int is_negative;
+
+ (void)trio_fpclassify_and_signbit(number, &is_negative);
+ return is_negative;
+}
+
+#if 0
+ /* Temporary fix - this routine is not used in libxml */
+/**
+ Examine the class of a number.
+
+ @param number An arbitrary floating-point number.
+ @return Enumerable value indicating the class of @p number
+*/
+TRIO_PUBLIC int
+trio_fpclassify
+TRIO_ARGS1((number),
+ double number)
+{
+ int dummy;
+
+ return trio_fpclassify_and_signbit(number, &dummy);
+}
+
+#endif
+
+/** @} SpecialQuantities */
+
+/*************************************************************************
+ * For test purposes.
+ *
+ * Add the following compiler option to include this test code.
+ *
+ * Unix : -DSTANDALONE
+ * VMS : /DEFINE=(STANDALONE)
+ */
+#if defined(STANDALONE)
+# include <stdio.h>
+
+static TRIO_CONST char *
+getClassification
+TRIO_ARGS1((type),
+ int type)
+{
+ switch (type) {
+ case TRIO_FP_INFINITE:
+ return "FP_INFINITE";
+ case TRIO_FP_NAN:
+ return "FP_NAN";
+ case TRIO_FP_NORMAL:
+ return "FP_NORMAL";
+ case TRIO_FP_SUBNORMAL:
+ return "FP_SUBNORMAL";
+ case TRIO_FP_ZERO:
+ return "FP_ZERO";
+ default:
+ return "FP_UNKNOWN";
+ }
+}
+
+static void
+print_class
+TRIO_ARGS2((prefix, number),
+ TRIO_CONST char *prefix,
+ double number)
+{
+ printf("%-6s: %s %-15s %g\n",
+ prefix,
+ trio_signbit(number) ? "-" : "+",
+ getClassification(TRIO_FPCLASSIFY(number)),
+ number);
+}
+
+int main(TRIO_NOARGS)
+{
+ double my_nan;
+ double my_pinf;
+ double my_ninf;
+# if defined(TRIO_PLATFORM_UNIX)
+ void (*signal_handler) TRIO_PROTO((int));
+# endif
+
+ my_nan = trio_nan();
+ my_pinf = trio_pinf();
+ my_ninf = trio_ninf();
+
+ print_class("Nan", my_nan);
+ print_class("PInf", my_pinf);
+ print_class("NInf", my_ninf);
+ print_class("PZero", 0.0);
+ print_class("NZero", -0.0);
+ print_class("PNorm", 1.0);
+ print_class("NNorm", -1.0);
+ print_class("PSub", 1.01e-307 - 1.00e-307);
+ print_class("NSub", 1.00e-307 - 1.01e-307);
+
+ printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
+ my_nan,
+ ((unsigned char *)&my_nan)[0],
+ ((unsigned char *)&my_nan)[1],
+ ((unsigned char *)&my_nan)[2],
+ ((unsigned char *)&my_nan)[3],
+ ((unsigned char *)&my_nan)[4],
+ ((unsigned char *)&my_nan)[5],
+ ((unsigned char *)&my_nan)[6],
+ ((unsigned char *)&my_nan)[7],
+ trio_isnan(my_nan), trio_isinf(my_nan));
+ printf("PInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
+ my_pinf,
+ ((unsigned char *)&my_pinf)[0],
+ ((unsigned char *)&my_pinf)[1],
+ ((unsigned char *)&my_pinf)[2],
+ ((unsigned char *)&my_pinf)[3],
+ ((unsigned char *)&my_pinf)[4],
+ ((unsigned char *)&my_pinf)[5],
+ ((unsigned char *)&my_pinf)[6],
+ ((unsigned char *)&my_pinf)[7],
+ trio_isnan(my_pinf), trio_isinf(my_pinf));
+ printf("NInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
+ my_ninf,
+ ((unsigned char *)&my_ninf)[0],
+ ((unsigned char *)&my_ninf)[1],
+ ((unsigned char *)&my_ninf)[2],
+ ((unsigned char *)&my_ninf)[3],
+ ((unsigned char *)&my_ninf)[4],
+ ((unsigned char *)&my_ninf)[5],
+ ((unsigned char *)&my_ninf)[6],
+ ((unsigned char *)&my_ninf)[7],
+ trio_isnan(my_ninf), trio_isinf(my_ninf));
+
+# if defined(TRIO_PLATFORM_UNIX)
+ signal_handler = signal(SIGFPE, SIG_IGN);
+# endif
+
+ my_pinf = DBL_MAX + DBL_MAX;
+ my_ninf = -my_pinf;
+ my_nan = my_pinf / my_pinf;
+
+# if defined(TRIO_PLATFORM_UNIX)
+ signal(SIGFPE, signal_handler);
+# endif
+
+ printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
+ my_nan,
+ ((unsigned char *)&my_nan)[0],
+ ((unsigned char *)&my_nan)[1],
+ ((unsigned char *)&my_nan)[2],
+ ((unsigned char *)&my_nan)[3],
+ ((unsigned char *)&my_nan)[4],
+ ((unsigned char *)&my_nan)[5],
+ ((unsigned char *)&my_nan)[6],
+ ((unsigned char *)&my_nan)[7],
+ trio_isnan(my_nan), trio_isinf(my_nan));
+ printf("PInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
+ my_pinf,
+ ((unsigned char *)&my_pinf)[0],
+ ((unsigned char *)&my_pinf)[1],
+ ((unsigned char *)&my_pinf)[2],
+ ((unsigned char *)&my_pinf)[3],
+ ((unsigned char *)&my_pinf)[4],
+ ((unsigned char *)&my_pinf)[5],
+ ((unsigned char *)&my_pinf)[6],
+ ((unsigned char *)&my_pinf)[7],
+ trio_isnan(my_pinf), trio_isinf(my_pinf));
+ printf("NInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
+ my_ninf,
+ ((unsigned char *)&my_ninf)[0],
+ ((unsigned char *)&my_ninf)[1],
+ ((unsigned char *)&my_ninf)[2],
+ ((unsigned char *)&my_ninf)[3],
+ ((unsigned char *)&my_ninf)[4],
+ ((unsigned char *)&my_ninf)[5],
+ ((unsigned char *)&my_ninf)[6],
+ ((unsigned char *)&my_ninf)[7],
+ trio_isnan(my_ninf), trio_isinf(my_ninf));
+
+ return 0;
+}
+#endif
diff --git a/trionan.h b/trionan.h
new file mode 100644
index 0000000..4847a00
--- /dev/null
+++ b/trionan.h
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * $Id: trionan.h,v 1.6 2003/08/06 04:43:53 wbrack Exp $
+ *
+ * Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ ************************************************************************/
+
+#ifndef TRIO_NAN_H
+#define TRIO_NAN_H
+
+#include "triodef.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum {
+ TRIO_FP_INFINITE,
+ TRIO_FP_NAN,
+ TRIO_FP_NORMAL,
+ TRIO_FP_SUBNORMAL,
+ TRIO_FP_ZERO
+};
+
+/*
+ * Return NaN (Not-a-Number).
+ */
+TRIO_PUBLIC double trio_nan TRIO_PROTO((void));
+
+/*
+ * Return positive infinity.
+ */
+TRIO_PUBLIC double trio_pinf TRIO_PROTO((void));
+
+/*
+ * Return negative infinity.
+ */
+TRIO_PUBLIC double trio_ninf TRIO_PROTO((void));
+
+/*
+ * Return negative zero.
+ */
+TRIO_PUBLIC double trio_nzero TRIO_PROTO((TRIO_NOARGS));
+
+/*
+ * If number is a NaN return non-zero, otherwise return zero.
+ */
+TRIO_PUBLIC int trio_isnan TRIO_PROTO((double number));
+
+/*
+ * If number is positive infinity return 1, if number is negative
+ * infinity return -1, otherwise return 0.
+ */
+TRIO_PUBLIC int trio_isinf TRIO_PROTO((double number));
+
+/*
+ * If number is finite return non-zero, otherwise return zero.
+ */
+#if 0
+ /* Temporary fix - these 2 routines not used in libxml */
+TRIO_PUBLIC int trio_isfinite TRIO_PROTO((double number));
+
+TRIO_PUBLIC int trio_fpclassify TRIO_PROTO((double number));
+#endif
+
+TRIO_PUBLIC int trio_signbit TRIO_PROTO((double number));
+
+TRIO_PUBLIC int trio_fpclassify_and_signbit TRIO_PROTO((double number, int *is_negative));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TRIO_NAN_H */
diff --git a/triop.h b/triop.h
new file mode 100644
index 0000000..e984c28
--- /dev/null
+++ b/triop.h
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * $Id: triop.h,v 1.5 2003/04/03 15:28:28 veillard Exp $
+ *
+ * Copyright (C) 2000 Bjorn Reese and Daniel Stenberg.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ ************************************************************************
+ *
+ * Private functions, types, etc. used for callback functions.
+ *
+ * The ref pointer is an opaque type and should remain as such.
+ * Private data must only be accessible through the getter and
+ * setter functions.
+ *
+ ************************************************************************/
+
+#ifndef TRIO_TRIOP_H
+#define TRIO_TRIOP_H
+
+#include "triodef.h"
+
+#include <stdlib.h>
+#if defined(TRIO_COMPILER_ANCIENT)
+# include <varargs.h>
+#else
+# include <stdarg.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef TRIO_C99
+# define TRIO_C99 1
+#endif
+#ifndef TRIO_BSD
+# define TRIO_BSD 1
+#endif
+#ifndef TRIO_GNU
+# define TRIO_GNU 1
+#endif
+#ifndef TRIO_MISC
+# define TRIO_MISC 1
+#endif
+#ifndef TRIO_UNIX98
+# define TRIO_UNIX98 1
+#endif
+#ifndef TRIO_MICROSOFT
+# define TRIO_MICROSOFT 1
+#endif
+#ifndef TRIO_EXTENSION
+# define TRIO_EXTENSION 1
+#endif
+#ifndef TRIO_WIDECHAR /* Does not work yet. Do not enable */
+# define TRIO_WIDECHAR 0
+#endif
+#ifndef TRIO_ERRORS
+# define TRIO_ERRORS 1
+#endif
+
+#ifndef TRIO_MALLOC
+# define TRIO_MALLOC(n) malloc(n)
+#endif
+#ifndef TRIO_REALLOC
+# define TRIO_REALLOC(x,n) realloc((x),(n))
+#endif
+#ifndef TRIO_FREE
+# define TRIO_FREE(x) free(x)
+#endif
+
+
+/*************************************************************************
+ * User-defined specifiers
+ */
+
+typedef int (*trio_callback_t) TRIO_PROTO((trio_pointer_t));
+
+trio_pointer_t trio_register TRIO_PROTO((trio_callback_t callback, const char *name));
+void trio_unregister TRIO_PROTO((trio_pointer_t handle));
+
+TRIO_CONST char *trio_get_format TRIO_PROTO((trio_pointer_t ref));
+trio_pointer_t trio_get_argument TRIO_PROTO((trio_pointer_t ref));
+
+/* Modifiers */
+int trio_get_width TRIO_PROTO((trio_pointer_t ref));
+void trio_set_width TRIO_PROTO((trio_pointer_t ref, int width));
+int trio_get_precision TRIO_PROTO((trio_pointer_t ref));
+void trio_set_precision TRIO_PROTO((trio_pointer_t ref, int precision));
+int trio_get_base TRIO_PROTO((trio_pointer_t ref));
+void trio_set_base TRIO_PROTO((trio_pointer_t ref, int base));
+int trio_get_padding TRIO_PROTO((trio_pointer_t ref));
+void trio_set_padding TRIO_PROTO((trio_pointer_t ref, int is_padding));
+int trio_get_short TRIO_PROTO((trio_pointer_t ref)); /* h */
+void trio_set_shortshort TRIO_PROTO((trio_pointer_t ref, int is_shortshort));
+int trio_get_shortshort TRIO_PROTO((trio_pointer_t ref)); /* hh */
+void trio_set_short TRIO_PROTO((trio_pointer_t ref, int is_short));
+int trio_get_long TRIO_PROTO((trio_pointer_t ref)); /* l */
+void trio_set_long TRIO_PROTO((trio_pointer_t ref, int is_long));
+int trio_get_longlong TRIO_PROTO((trio_pointer_t ref)); /* ll */
+void trio_set_longlong TRIO_PROTO((trio_pointer_t ref, int is_longlong));
+int trio_get_longdouble TRIO_PROTO((trio_pointer_t ref)); /* L */
+void trio_set_longdouble TRIO_PROTO((trio_pointer_t ref, int is_longdouble));
+int trio_get_alternative TRIO_PROTO((trio_pointer_t ref)); /* # */
+void trio_set_alternative TRIO_PROTO((trio_pointer_t ref, int is_alternative));
+int trio_get_alignment TRIO_PROTO((trio_pointer_t ref)); /* - */
+void trio_set_alignment TRIO_PROTO((trio_pointer_t ref, int is_leftaligned));
+int trio_get_spacing TRIO_PROTO((trio_pointer_t ref)); /* TRIO_PROTO((space) */
+void trio_set_spacing TRIO_PROTO((trio_pointer_t ref, int is_space));
+int trio_get_sign TRIO_PROTO((trio_pointer_t ref)); /* + */
+void trio_set_sign TRIO_PROTO((trio_pointer_t ref, int is_showsign));
+int trio_get_quote TRIO_PROTO((trio_pointer_t ref)); /* ' */
+void trio_set_quote TRIO_PROTO((trio_pointer_t ref, int is_quote));
+int trio_get_upper TRIO_PROTO((trio_pointer_t ref));
+void trio_set_upper TRIO_PROTO((trio_pointer_t ref, int is_upper));
+#if TRIO_C99
+int trio_get_largest TRIO_PROTO((trio_pointer_t ref)); /* j */
+void trio_set_largest TRIO_PROTO((trio_pointer_t ref, int is_largest));
+int trio_get_ptrdiff TRIO_PROTO((trio_pointer_t ref)); /* t */
+void trio_set_ptrdiff TRIO_PROTO((trio_pointer_t ref, int is_ptrdiff));
+int trio_get_size TRIO_PROTO((trio_pointer_t ref)); /* z / Z */
+void trio_set_size TRIO_PROTO((trio_pointer_t ref, int is_size));
+#endif
+
+/* Printing */
+int trio_print_ref TRIO_PROTO((trio_pointer_t ref, const char *format, ...));
+int trio_vprint_ref TRIO_PROTO((trio_pointer_t ref, const char *format, va_list args));
+int trio_printv_ref TRIO_PROTO((trio_pointer_t ref, const char *format, trio_pointer_t *args));
+
+void trio_print_int TRIO_PROTO((trio_pointer_t ref, int number));
+void trio_print_uint TRIO_PROTO((trio_pointer_t ref, unsigned int number));
+/* void trio_print_long TRIO_PROTO((trio_pointer_t ref, long number)); */
+/* void trio_print_ulong TRIO_PROTO((trio_pointer_t ref, unsigned long number)); */
+void trio_print_double TRIO_PROTO((trio_pointer_t ref, double number));
+void trio_print_string TRIO_PROTO((trio_pointer_t ref, char *string));
+void trio_print_pointer TRIO_PROTO((trio_pointer_t ref, trio_pointer_t pointer));
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* TRIO_TRIOP_H */
diff --git a/triostr.c b/triostr.c
new file mode 100644
index 0000000..0ecd672
--- /dev/null
+++ b/triostr.c
@@ -0,0 +1,2102 @@
+/*************************************************************************
+ *
+ * $Id: triostr.c,v 1.3 2003/04/03 15:28:28 veillard Exp $
+ *
+ * Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ ************************************************************************/
+
+/*************************************************************************
+ * Include files
+ */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include "triodef.h"
+#include "triostr.h"
+
+/*************************************************************************
+ * Definitions
+ */
+
+#if !defined(TRIO_STRING_PUBLIC)
+# define TRIO_STRING_PUBLIC TRIO_PUBLIC
+#endif
+#if !defined(TRIO_STRING_PRIVATE)
+# define TRIO_STRING_PRIVATE TRIO_PRIVATE
+#endif
+
+#if !defined(NULL)
+# define NULL 0
+#endif
+#if !defined(NIL)
+# define NIL ((char)0)
+#endif
+#if !defined(FALSE)
+# define FALSE (1 == 0)
+# define TRUE (! FALSE)
+#endif
+#if !defined(BOOLEAN_T)
+# define BOOLEAN_T int
+#endif
+
+#if defined(TRIO_COMPILER_SUPPORTS_C99)
+# define USE_STRTOD
+# define USE_STRTOF
+#elif defined(TRIO_COMPILER_MSVC)
+# define USE_STRTOD
+#endif
+
+#if defined(TRIO_PLATFORM_UNIX)
+# define USE_STRCASECMP
+# define USE_STRNCASECMP
+# if defined(TRIO_PLATFORM_SUNOS)
+# define USE_SYS_ERRLIST
+# else
+# define USE_STRERROR
+# endif
+# if defined(TRIO_PLATFORM_QNX)
+# define strcasecmp(x,y) stricmp(x,y)
+# define strncasecmp(x,y,n) strnicmp(x,y,n)
+# endif
+#elif defined(TRIO_PLATFORM_WIN32)
+# define USE_STRCASECMP
+# define strcasecmp(x,y) strcmpi(x,y)
+#endif
+
+#if !(defined(TRIO_PLATFORM_SUNOS))
+# define USE_TOLOWER
+# define USE_TOUPPER
+#endif
+
+/*************************************************************************
+ * Structures
+ */
+
+struct _trio_string_t
+{
+ char *content;
+ size_t length;
+ size_t allocated;
+};
+
+/*************************************************************************
+ * Constants
+ */
+
+#if !defined(TRIO_MINIMAL)
+static TRIO_CONST char rcsid[] = "@(#)$Id: triostr.c,v 1.3 2003/04/03 15:28:28 veillard Exp $";
+#endif
+
+/*************************************************************************
+ * Static String Functions
+ */
+
+#if defined(TRIO_DOCUMENTATION)
+# include "doc/doc_static.h"
+#endif
+/** @addtogroup StaticStrings
+ @{
+*/
+
+/**
+ Create new string.
+
+ @param size Size of new string.
+ @return Pointer to string, or NULL if allocation failed.
+*/
+TRIO_STRING_PUBLIC char *
+trio_create
+TRIO_ARGS1((size),
+ size_t size)
+{
+ return (char *)TRIO_MALLOC(size);
+}
+
+
+/**
+ Destroy string.
+
+ @param string String to be freed.
+*/
+TRIO_STRING_PUBLIC void
+trio_destroy
+TRIO_ARGS1((string),
+ char *string)
+{
+ if (string)
+ {
+ TRIO_FREE(string);
+ }
+}
+
+
+/**
+ Count the number of characters in a string.
+
+ @param string String to measure.
+ @return Number of characters in @string.
+*/
+TRIO_STRING_PUBLIC size_t
+trio_length
+TRIO_ARGS1((string),
+ TRIO_CONST char *string)
+{
+ return strlen(string);
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Append @p source at the end of @p target.
+
+ @param target Target string.
+ @param source Source string.
+ @return Boolean value indicating success or failure.
+
+ @pre @p target must point to a memory chunk with sufficient room to
+ contain the @p target string and @p source string.
+ @pre No boundary checking is performed, so insufficient memory will
+ result in a buffer overrun.
+ @post @p target will be zero terminated.
+*/
+TRIO_STRING_PUBLIC int
+trio_append
+TRIO_ARGS2((target, source),
+ char *target,
+ TRIO_CONST char *source)
+{
+ assert(target);
+ assert(source);
+
+ return (strcat(target, source) != NULL);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Append at most @p max characters from @p source to @p target.
+
+ @param target Target string.
+ @param max Maximum number of characters to append.
+ @param source Source string.
+ @return Boolean value indicating success or failure.
+
+ @pre @p target must point to a memory chuck with sufficient room to
+ contain the @p target string and the @p source string (at most @p max
+ characters).
+ @pre No boundary checking is performed, so insufficient memory will
+ result in a buffer overrun.
+ @post @p target will be zero terminated.
+*/
+TRIO_STRING_PUBLIC int
+trio_append_max
+TRIO_ARGS3((target, max, source),
+ char *target,
+ size_t max,
+ TRIO_CONST char *source)
+{
+ size_t length;
+
+ assert(target);
+ assert(source);
+
+ length = trio_length(target);
+
+ if (max > length)
+ {
+ strncat(target, source, max - length - 1);
+ }
+ return TRUE;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Determine if a string contains a substring.
+
+ @param string String to be searched.
+ @param substring String to be found.
+ @return Boolean value indicating success or failure.
+*/
+TRIO_STRING_PUBLIC int
+trio_contains
+TRIO_ARGS2((string, substring),
+ TRIO_CONST char *string,
+ TRIO_CONST char *substring)
+{
+ assert(string);
+ assert(substring);
+
+ return (0 != strstr(string, substring));
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Copy @p source to @p target.
+
+ @param target Target string.
+ @param source Source string.
+ @return Boolean value indicating success or failure.
+
+ @pre @p target must point to a memory chunk with sufficient room to
+ contain the @p source string.
+ @pre No boundary checking is performed, so insufficient memory will
+ result in a buffer overrun.
+ @post @p target will be zero terminated.
+*/
+TRIO_STRING_PUBLIC int
+trio_copy
+TRIO_ARGS2((target, source),
+ char *target,
+ TRIO_CONST char *source)
+{
+ assert(target);
+ assert(source);
+
+ (void)strcpy(target, source);
+ return TRUE;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/**
+ Copy at most @p max characters from @p source to @p target.
+
+ @param target Target string.
+ @param max Maximum number of characters to append.
+ @param source Source string.
+ @return Boolean value indicating success or failure.
+
+ @pre @p target must point to a memory chunk with sufficient room to
+ contain the @p source string (at most @p max characters).
+ @pre No boundary checking is performed, so insufficient memory will
+ result in a buffer overrun.
+ @post @p target will be zero terminated.
+*/
+TRIO_STRING_PUBLIC int
+trio_copy_max
+TRIO_ARGS3((target, max, source),
+ char *target,
+ size_t max,
+ TRIO_CONST char *source)
+{
+ assert(target);
+ assert(source);
+ assert(max > 0); /* Includes != 0 */
+
+ (void)strncpy(target, source, max - 1);
+ target[max - 1] = (char)0;
+ return TRUE;
+}
+
+
+/*
+ * TrioDuplicateMax
+ */
+TRIO_STRING_PRIVATE char *
+TrioDuplicateMax
+TRIO_ARGS2((source, size),
+ TRIO_CONST char *source,
+ size_t size)
+{
+ char *target;
+
+ assert(source);
+
+ /* Make room for string plus a terminating zero */
+ size++;
+ target = trio_create(size);
+ if (target)
+ {
+ trio_copy_max(target, size, source);
+ }
+ return target;
+}
+
+
+/**
+ Duplicate @p source.
+
+ @param source Source string.
+ @return A copy of the @p source string.
+
+ @post @p target will be zero terminated.
+*/
+TRIO_STRING_PUBLIC char *
+trio_duplicate
+TRIO_ARGS1((source),
+ TRIO_CONST char *source)
+{
+ return TrioDuplicateMax(source, trio_length(source));
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Duplicate at most @p max characters of @p source.
+
+ @param source Source string.
+ @param max Maximum number of characters to duplicate.
+ @return A copy of the @p source string.
+
+ @post @p target will be zero terminated.
+*/
+TRIO_STRING_PUBLIC char *
+trio_duplicate_max TRIO_ARGS2((source, max),
+ TRIO_CONST char *source,
+ size_t max)
+{
+ size_t length;
+
+ assert(source);
+ assert(max > 0);
+
+ length = trio_length(source);
+ if (length > max)
+ {
+ length = max;
+ }
+ return TrioDuplicateMax(source, length);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/**
+ Compare if two strings are equal.
+
+ @param first First string.
+ @param second Second string.
+ @return Boolean indicating whether the two strings are equal or not.
+
+ Case-insensitive comparison.
+*/
+TRIO_STRING_PUBLIC int
+trio_equal
+TRIO_ARGS2((first, second),
+ TRIO_CONST char *first,
+ TRIO_CONST char *second)
+{
+ assert(first);
+ assert(second);
+
+ if ((first != NULL) && (second != NULL))
+ {
+#if defined(USE_STRCASECMP)
+ return (0 == strcasecmp(first, second));
+#else
+ while ((*first != NIL) && (*second != NIL))
+ {
+ if (trio_to_upper(*first) != trio_to_upper(*second))
+ {
+ break;
+ }
+ first++;
+ second++;
+ }
+ return ((*first == NIL) && (*second == NIL));
+#endif
+ }
+ return FALSE;
+}
+
+
+/**
+ Compare if two strings are equal.
+
+ @param first First string.
+ @param second Second string.
+ @return Boolean indicating whether the two strings are equal or not.
+
+ Case-sensitive comparison.
+*/
+TRIO_STRING_PUBLIC int
+trio_equal_case
+TRIO_ARGS2((first, second),
+ TRIO_CONST char *first,
+ TRIO_CONST char *second)
+{
+ assert(first);
+ assert(second);
+
+ if ((first != NULL) && (second != NULL))
+ {
+ return (0 == strcmp(first, second));
+ }
+ return FALSE;
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Compare if two strings up until the first @p max characters are equal.
+
+ @param first First string.
+ @param max Maximum number of characters to compare.
+ @param second Second string.
+ @return Boolean indicating whether the two strings are equal or not.
+
+ Case-sensitive comparison.
+*/
+TRIO_STRING_PUBLIC int
+trio_equal_case_max
+TRIO_ARGS3((first, max, second),
+ TRIO_CONST char *first,
+ size_t max,
+ TRIO_CONST char *second)
+{
+ assert(first);
+ assert(second);
+
+ if ((first != NULL) && (second != NULL))
+ {
+ return (0 == strncmp(first, second, max));
+ }
+ return FALSE;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/**
+ Compare if two strings are equal.
+
+ @param first First string.
+ @param second Second string.
+ @return Boolean indicating whether the two strings are equal or not.
+
+ Collating characters are considered equal.
+*/
+TRIO_STRING_PUBLIC int
+trio_equal_locale
+TRIO_ARGS2((first, second),
+ TRIO_CONST char *first,
+ TRIO_CONST char *second)
+{
+ assert(first);
+ assert(second);
+
+#if defined(LC_COLLATE)
+ return (strcoll(first, second) == 0);
+#else
+ return trio_equal(first, second);
+#endif
+}
+
+
+/**
+ Compare if two strings up until the first @p max characters are equal.
+
+ @param first First string.
+ @param max Maximum number of characters to compare.
+ @param second Second string.
+ @return Boolean indicating whether the two strings are equal or not.
+
+ Case-insensitive comparison.
+*/
+TRIO_STRING_PUBLIC int
+trio_equal_max
+TRIO_ARGS3((first, max, second),
+ TRIO_CONST char *first,
+ size_t max,
+ TRIO_CONST char *second)
+{
+ assert(first);
+ assert(second);
+
+ if ((first != NULL) && (second != NULL))
+ {
+#if defined(USE_STRNCASECMP)
+ return (0 == strncasecmp(first, second, max));
+#else
+ /* Not adequately tested yet */
+ size_t cnt = 0;
+ while ((*first != NIL) && (*second != NIL) && (cnt <= max))
+ {
+ if (trio_to_upper(*first) != trio_to_upper(*second))
+ {
+ break;
+ }
+ first++;
+ second++;
+ cnt++;
+ }
+ return ((cnt == max) || ((*first == NIL) && (*second == NIL)));
+#endif
+ }
+ return FALSE;
+}
+
+
+/**
+ Provide a textual description of an error code (errno).
+
+ @param error_number Error number.
+ @return Textual description of @p error_number.
+*/
+TRIO_STRING_PUBLIC TRIO_CONST char *
+trio_error
+TRIO_ARGS1((error_number),
+ int error_number)
+{
+#if defined(USE_STRERROR)
+
+ return strerror(error_number);
+
+#elif defined(USE_SYS_ERRLIST)
+
+ extern char *sys_errlist[];
+ extern int sys_nerr;
+
+ return ((error_number < 0) || (error_number >= sys_nerr))
+ ? "unknown"
+ : sys_errlist[error_number];
+
+#else
+
+ return "unknown";
+
+#endif
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Format the date/time according to @p format.
+
+ @param target Target string.
+ @param max Maximum number of characters to format.
+ @param format Formatting string.
+ @param datetime Date/time structure.
+ @return Number of formatted characters.
+
+ The formatting string accepts the same specifiers as the standard C
+ function strftime.
+*/
+TRIO_STRING_PUBLIC size_t
+trio_format_date_max
+TRIO_ARGS4((target, max, format, datetime),
+ char *target,
+ size_t max,
+ TRIO_CONST char *format,
+ TRIO_CONST struct tm *datetime)
+{
+ assert(target);
+ assert(format);
+ assert(datetime);
+ assert(max > 0);
+
+ return strftime(target, max, format, datetime);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Calculate a hash value for a string.
+
+ @param string String to be calculated on.
+ @param type Hash function.
+ @return Calculated hash value.
+
+ @p type can be one of the following
+ @li @c TRIO_HASH_PLAIN Plain hash function.
+*/
+TRIO_STRING_PUBLIC unsigned long
+trio_hash
+TRIO_ARGS2((string, type),
+ TRIO_CONST char *string,
+ int type)
+{
+ unsigned long value = 0L;
+ char ch;
+
+ assert(string);
+
+ switch (type)
+ {
+ case TRIO_HASH_PLAIN:
+ while ( (ch = *string++) != NIL )
+ {
+ value *= 31;
+ value += (unsigned long)ch;
+ }
+ break;
+ default:
+ assert(FALSE);
+ break;
+ }
+ return value;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Find first occurrence of a character in a string.
+
+ @param string String to be searched.
+ @param character Character to be found.
+ @param A pointer to the found character, or NULL if character was not found.
+ */
+TRIO_STRING_PUBLIC char *
+trio_index
+TRIO_ARGS2((string, character),
+ TRIO_CONST char *string,
+ int character)
+{
+ assert(string);
+
+ return strchr(string, character);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Find last occurrence of a character in a string.
+
+ @param string String to be searched.
+ @param character Character to be found.
+ @param A pointer to the found character, or NULL if character was not found.
+ */
+TRIO_STRING_PUBLIC char *
+trio_index_last
+TRIO_ARGS2((string, character),
+ TRIO_CONST char *string,
+ int character)
+{
+ assert(string);
+
+ return strchr(string, character);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Convert the alphabetic letters in the string to lower-case.
+
+ @param target String to be converted.
+ @return Number of processed characters (converted or not).
+*/
+TRIO_STRING_PUBLIC int
+trio_lower
+TRIO_ARGS1((target),
+ char *target)
+{
+ assert(target);
+
+ return trio_span_function(target, target, trio_to_lower);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Compare two strings using wildcards.
+
+ @param string String to be searched.
+ @param pattern Pattern, including wildcards, to search for.
+ @return Boolean value indicating success or failure.
+
+ Case-insensitive comparison.
+
+ The following wildcards can be used
+ @li @c * Match any number of characters.
+ @li @c ? Match a single character.
+*/
+TRIO_STRING_PUBLIC int
+trio_match
+TRIO_ARGS2((string, pattern),
+ TRIO_CONST char *string,
+ TRIO_CONST char *pattern)
+{
+ assert(string);
+ assert(pattern);
+
+ for (; ('*' != *pattern); ++pattern, ++string)
+ {
+ if (NIL == *string)
+ {
+ return (NIL == *pattern);
+ }
+ if ((trio_to_upper((int)*string) != trio_to_upper((int)*pattern))
+ && ('?' != *pattern))
+ {
+ return FALSE;
+ }
+ }
+ /* two-line patch to prevent *too* much recursiveness: */
+ while ('*' == pattern[1])
+ pattern++;
+
+ do
+ {
+ if ( trio_match(string, &pattern[1]) )
+ {
+ return TRUE;
+ }
+ }
+ while (*string++);
+
+ return FALSE;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Compare two strings using wildcards.
+
+ @param string String to be searched.
+ @param pattern Pattern, including wildcards, to search for.
+ @return Boolean value indicating success or failure.
+
+ Case-sensitive comparison.
+
+ The following wildcards can be used
+ @li @c * Match any number of characters.
+ @li @c ? Match a single character.
+*/
+TRIO_STRING_PUBLIC int
+trio_match_case
+TRIO_ARGS2((string, pattern),
+ TRIO_CONST char *string,
+ TRIO_CONST char *pattern)
+{
+ assert(string);
+ assert(pattern);
+
+ for (; ('*' != *pattern); ++pattern, ++string)
+ {
+ if (NIL == *string)
+ {
+ return (NIL == *pattern);
+ }
+ if ((*string != *pattern)
+ && ('?' != *pattern))
+ {
+ return FALSE;
+ }
+ }
+ /* two-line patch to prevent *too* much recursiveness: */
+ while ('*' == pattern[1])
+ pattern++;
+
+ do
+ {
+ if ( trio_match_case(string, &pattern[1]) )
+ {
+ return TRUE;
+ }
+ }
+ while (*string++);
+
+ return FALSE;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Execute a function on each character in string.
+
+ @param target Target string.
+ @param source Source string.
+ @param Function Function to be executed.
+ @return Number of processed characters.
+*/
+TRIO_STRING_PUBLIC size_t
+trio_span_function
+TRIO_ARGS3((target, source, Function),
+ char *target,
+ TRIO_CONST char *source,
+ int (*Function) TRIO_PROTO((int)))
+{
+ size_t count = 0;
+
+ assert(target);
+ assert(source);
+ assert(Function);
+
+ while (*source != NIL)
+ {
+ *target++ = Function(*source++);
+ count++;
+ }
+ return count;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Search for a substring in a string.
+
+ @param string String to be searched.
+ @param substring String to be found.
+ @return Pointer to first occurrence of @p substring in @p string, or NULL
+ if no match was found.
+*/
+TRIO_STRING_PUBLIC char *
+trio_substring
+TRIO_ARGS2((string, substring),
+ TRIO_CONST char *string,
+ TRIO_CONST char *substring)
+{
+ assert(string);
+ assert(substring);
+
+ return strstr(string, substring);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Search for a substring in the first @p max characters of a string.
+
+ @param string String to be searched.
+ @param max Maximum characters to be searched.
+ @param substring String to be found.
+ @return Pointer to first occurrence of @p substring in @p string, or NULL
+ if no match was found.
+*/
+TRIO_STRING_PUBLIC char *
+trio_substring_max
+TRIO_ARGS3((string, max, substring),
+ TRIO_CONST char *string,
+ size_t max,
+ TRIO_CONST char *substring)
+{
+ size_t count;
+ size_t size;
+ char *result = NULL;
+
+ assert(string);
+ assert(substring);
+
+ size = trio_length(substring);
+ if (size <= max)
+ {
+ for (count = 0; count <= max - size; count++)
+ {
+ if (trio_equal_max(substring, size, &string[count]))
+ {
+ result = (char *)&string[count];
+ break;
+ }
+ }
+ }
+ return result;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Tokenize string.
+
+ @param string String to be tokenized.
+ @param tokens String containing list of delimiting characters.
+ @return Start of new token.
+
+ @warning @p string will be destroyed.
+*/
+TRIO_STRING_PUBLIC char *
+trio_tokenize
+TRIO_ARGS2((string, delimiters),
+ char *string,
+ TRIO_CONST char *delimiters)
+{
+ assert(delimiters);
+
+ return strtok(string, delimiters);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/**
+ Convert string to floating-point number.
+
+ @param source String to be converted.
+ @param endp Pointer to end of the converted string.
+ @return A floating-point number.
+
+ The following Extended Backus-Naur form is used
+ @verbatim
+ double ::= [ <sign> ]
+ ( <number> |
+ <number> <decimal_point> <number> |
+ <decimal_point> <number> )
+ [ <exponential> [ <sign> ] <number> ]
+ number ::= 1*( <digit> )
+ digit ::= ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' )
+ exponential ::= ( 'e' | 'E' )
+ sign ::= ( '-' | '+' )
+ decimal_point ::= '.'
+ @endverbatim
+*/
+/* FIXME: Add EBNF for hex-floats */
+TRIO_STRING_PUBLIC trio_long_double_t
+trio_to_long_double
+TRIO_ARGS2((source, endp),
+ TRIO_CONST char *source,
+ char **endp)
+{
+#if defined(USE_STRTOLD)
+ return strtold(source, endp);
+#else
+ int isNegative = FALSE;
+ int isExponentNegative = FALSE;
+ trio_long_double_t integer = 0.0;
+ trio_long_double_t fraction = 0.0;
+ unsigned long exponent = 0;
+ trio_long_double_t base;
+ trio_long_double_t fracdiv = 1.0;
+ trio_long_double_t value = 0.0;
+
+ /* First try hex-floats */
+ if ((source[0] == '0') && ((source[1] == 'x') || (source[1] == 'X')))
+ {
+ base = 16.0;
+ source += 2;
+ while (isxdigit((int)*source))
+ {
+ integer *= base;
+ integer += (isdigit((int)*source)
+ ? (*source - '0')
+ : 10 + (trio_to_upper((int)*source) - 'A'));
+ source++;
+ }
+ if (*source == '.')
+ {
+ source++;
+ while (isxdigit((int)*source))
+ {
+ fracdiv /= base;
+ fraction += fracdiv * (isdigit((int)*source)
+ ? (*source - '0')
+ : 10 + (trio_to_upper((int)*source) - 'A'));
+ source++;
+ }
+ if ((*source == 'p') || (*source == 'P'))
+ {
+ source++;
+ if ((*source == '+') || (*source == '-'))
+ {
+ isExponentNegative = (*source == '-');
+ source++;
+ }
+ while (isdigit((int)*source))
+ {
+ exponent *= 10;
+ exponent += (*source - '0');
+ source++;
+ }
+ }
+ }
+ /* For later use with exponent */
+ base = 2.0;
+ }
+ else /* Then try normal decimal floats */
+ {
+ base = 10.0;
+ isNegative = (*source == '-');
+ /* Skip sign */
+ if ((*source == '+') || (*source == '-'))
+ source++;
+
+ /* Integer part */
+ while (isdigit((int)*source))
+ {
+ integer *= base;
+ integer += (*source - '0');
+ source++;
+ }
+
+ if (*source == '.')
+ {
+ source++; /* skip decimal point */
+ while (isdigit((int)*source))
+ {
+ fracdiv /= base;
+ fraction += (*source - '0') * fracdiv;
+ source++;
+ }
+ }
+ if ((*source == 'e')
+ || (*source == 'E')
+#if TRIO_MICROSOFT
+ || (*source == 'd')
+ || (*source == 'D')
+#endif
+ )
+ {
+ source++; /* Skip exponential indicator */
+ isExponentNegative = (*source == '-');
+ if ((*source == '+') || (*source == '-'))
+ source++;
+ while (isdigit((int)*source))
+ {
+ exponent *= (int)base;
+ exponent += (*source - '0');
+ source++;
+ }
+ }
+ }
+
+ value = integer + fraction;
+ if (exponent != 0)
+ {
+ if (isExponentNegative)
+ value /= pow(base, (double)exponent);
+ else
+ value *= pow(base, (double)exponent);
+ }
+ if (isNegative)
+ value = -value;
+
+ if (endp)
+ *endp = (char *)source;
+ return value;
+#endif
+}
+
+
+/**
+ Convert string to floating-point number.
+
+ @param source String to be converted.
+ @param endp Pointer to end of the converted string.
+ @return A floating-point number.
+
+ See @ref trio_to_long_double.
+*/
+TRIO_STRING_PUBLIC double
+trio_to_double
+TRIO_ARGS2((source, endp),
+ TRIO_CONST char *source,
+ char **endp)
+{
+#if defined(USE_STRTOD)
+ return strtod(source, endp);
+#else
+ return (double)trio_to_long_double(source, endp);
+#endif
+}
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Convert string to floating-point number.
+
+ @param source String to be converted.
+ @param endp Pointer to end of the converted string.
+ @return A floating-point number.
+
+ See @ref trio_to_long_double.
+*/
+TRIO_STRING_PUBLIC float
+trio_to_float
+TRIO_ARGS2((source, endp),
+ TRIO_CONST char *source,
+ char **endp)
+{
+#if defined(USE_STRTOF)
+ return strtof(source, endp);
+#else
+ return (float)trio_to_long_double(source, endp);
+#endif
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/**
+ Convert string to signed integer.
+
+ @param string String to be converted.
+ @param endp Pointer to end of converted string.
+ @param base Radix number of number.
+*/
+TRIO_STRING_PUBLIC long
+trio_to_long
+TRIO_ARGS3((string, endp, base),
+ TRIO_CONST char *string,
+ char **endp,
+ int base)
+{
+ assert(string);
+ assert((base >= 2) && (base <= 36));
+
+ return strtol(string, endp, base);
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Convert one alphabetic letter to lower-case.
+
+ @param source The letter to be converted.
+ @return The converted letter.
+*/
+TRIO_STRING_PUBLIC int
+trio_to_lower
+TRIO_ARGS1((source),
+ int source)
+{
+#if defined(USE_TOLOWER)
+
+ return tolower(source);
+
+#else
+
+ /* Does not handle locales or non-contiguous alphabetic characters */
+ return ((source >= (int)'A') && (source <= (int)'Z'))
+ ? source - 'A' + 'a'
+ : source;
+
+#endif
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Convert string to unsigned integer.
+
+ @param string String to be converted.
+ @param endp Pointer to end of converted string.
+ @param base Radix number of number.
+*/
+TRIO_STRING_PUBLIC unsigned long
+trio_to_unsigned_long
+TRIO_ARGS3((string, endp, base),
+ TRIO_CONST char *string,
+ char **endp,
+ int base)
+{
+ assert(string);
+ assert((base >= 2) && (base <= 36));
+
+ return strtoul(string, endp, base);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/**
+ Convert one alphabetic letter to upper-case.
+
+ @param source The letter to be converted.
+ @return The converted letter.
+*/
+TRIO_STRING_PUBLIC int
+trio_to_upper
+TRIO_ARGS1((source),
+ int source)
+{
+#if defined(USE_TOUPPER)
+
+ return toupper(source);
+
+#else
+
+ /* Does not handle locales or non-contiguous alphabetic characters */
+ return ((source >= (int)'a') && (source <= (int)'z'))
+ ? source - 'a' + 'A'
+ : source;
+
+#endif
+}
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Convert the alphabetic letters in the string to upper-case.
+
+ @param target The string to be converted.
+ @return The number of processed characters (converted or not).
+*/
+TRIO_STRING_PUBLIC int
+trio_upper
+TRIO_ARGS1((target),
+ char *target)
+{
+ assert(target);
+
+ return trio_span_function(target, target, trio_to_upper);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/** @} End of StaticStrings */
+
+
+/*************************************************************************
+ * Dynamic String Functions
+ */
+
+#if defined(TRIO_DOCUMENTATION)
+# include "doc/doc_dynamic.h"
+#endif
+/** @addtogroup DynamicStrings
+ @{
+*/
+
+/*
+ * TrioStringAlloc
+ */
+TRIO_STRING_PRIVATE trio_string_t *
+TrioStringAlloc(TRIO_NOARGS)
+{
+ trio_string_t *self;
+
+ self = (trio_string_t *)TRIO_MALLOC(sizeof(trio_string_t));
+ if (self)
+ {
+ self->content = NULL;
+ self->length = 0;
+ self->allocated = 0;
+ }
+ return self;
+}
+
+
+/*
+ * TrioStringGrow
+ *
+ * The size of the string will be increased by 'delta' characters. If
+ * 'delta' is zero, the size will be doubled.
+ */
+TRIO_STRING_PRIVATE BOOLEAN_T
+TrioStringGrow
+TRIO_ARGS2((self, delta),
+ trio_string_t *self,
+ size_t delta)
+{
+ BOOLEAN_T status = FALSE;
+ char *new_content;
+ size_t new_size;
+
+ new_size = (delta == 0)
+ ? ( (self->allocated == 0) ? 1 : self->allocated * 2 )
+ : self->allocated + delta;
+
+ new_content = (char *)TRIO_REALLOC(self->content, new_size);
+ if (new_content)
+ {
+ self->content = new_content;
+ self->allocated = new_size;
+ status = TRUE;
+ }
+ return status;
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * TrioStringGrowTo
+ *
+ * The size of the string will be increased to 'length' plus one characters.
+ * If 'length' is less than the original size, the original size will be
+ * used (that is, the size of the string is never decreased).
+ */
+TRIO_STRING_PRIVATE BOOLEAN_T
+TrioStringGrowTo
+TRIO_ARGS2((self, length),
+ trio_string_t *self,
+ size_t length)
+{
+ length++; /* Room for terminating zero */
+ return (self->allocated < length)
+ ? TrioStringGrow(self, length - self->allocated)
+ : TRUE;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Create a new dynamic string.
+
+ @param initial_size Initial size of the buffer.
+ @return Newly allocated dynamic string, or NULL if memory allocation failed.
+*/
+TRIO_STRING_PUBLIC trio_string_t *
+trio_string_create
+TRIO_ARGS1((initial_size),
+ int initial_size)
+{
+ trio_string_t *self;
+
+ self = TrioStringAlloc();
+ if (self)
+ {
+ if (TrioStringGrow(self,
+ (size_t)((initial_size > 0) ? initial_size : 1)))
+ {
+ self->content[0] = (char)0;
+ self->allocated = initial_size;
+ }
+ else
+ {
+ trio_string_destroy(self);
+ self = NULL;
+ }
+ }
+ return self;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/**
+ Deallocate the dynamic string and its contents.
+
+ @param self Dynamic string
+*/
+TRIO_STRING_PUBLIC void
+trio_string_destroy
+TRIO_ARGS1((self),
+ trio_string_t *self)
+{
+ assert(self);
+
+ if (self)
+ {
+ trio_destroy(self->content);
+ TRIO_FREE(self);
+ }
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Get a pointer to the content.
+
+ @param self Dynamic string.
+ @param offset Offset into content.
+ @return Pointer to the content.
+
+ @p Offset can be zero, positive, or negative. If @p offset is zero,
+ then the start of the content will be returned. If @p offset is positive,
+ then a pointer to @p offset number of characters from the beginning of the
+ content is returned. If @p offset is negative, then a pointer to @p offset
+ number of characters from the ending of the string, starting at the
+ terminating zero, is returned.
+*/
+TRIO_STRING_PUBLIC char *
+trio_string_get
+TRIO_ARGS2((self, offset),
+ trio_string_t *self,
+ int offset)
+{
+ char *result = NULL;
+
+ assert(self);
+
+ if (self->content != NULL)
+ {
+ if (self->length == 0)
+ {
+ (void)trio_string_length(self);
+ }
+ if (offset >= 0)
+ {
+ if (offset > (int)self->length)
+ {
+ offset = self->length;
+ }
+ }
+ else
+ {
+ offset += self->length + 1;
+ if (offset < 0)
+ {
+ offset = 0;
+ }
+ }
+ result = &(self->content[offset]);
+ }
+ return result;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/**
+ Extract the content.
+
+ @param self Dynamic String
+ @return Content of dynamic string.
+
+ The content is removed from the dynamic string. This enables destruction
+ of the dynamic string without deallocation of the content.
+*/
+TRIO_STRING_PUBLIC char *
+trio_string_extract
+TRIO_ARGS1((self),
+ trio_string_t *self)
+{
+ char *result;
+
+ assert(self);
+
+ result = self->content;
+ /* FIXME: Allocate new empty buffer? */
+ self->content = NULL;
+ self->length = self->allocated = 0;
+ return result;
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Set the content of the dynamic string.
+
+ @param self Dynamic String
+ @param buffer The new content.
+
+ Sets the content of the dynamic string to a copy @p buffer.
+ An existing content will be deallocated first, if necessary.
+
+ @remark
+ This function will make a copy of @p buffer.
+ You are responsible for deallocating @p buffer yourself.
+*/
+TRIO_STRING_PUBLIC void
+trio_xstring_set
+TRIO_ARGS2((self, buffer),
+ trio_string_t *self,
+ char *buffer)
+{
+ assert(self);
+
+ trio_destroy(self->content);
+ self->content = trio_duplicate(buffer);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/*
+ * trio_string_size
+ */
+TRIO_STRING_PUBLIC int
+trio_string_size
+TRIO_ARGS1((self),
+ trio_string_t *self)
+{
+ assert(self);
+
+ return self->allocated;
+}
+
+
+/*
+ * trio_string_terminate
+ */
+TRIO_STRING_PUBLIC void
+trio_string_terminate
+TRIO_ARGS1((self),
+ trio_string_t *self)
+{
+ trio_xstring_append_char(self, 0);
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Append the second string to the first.
+
+ @param self Dynamic string to be modified.
+ @param other Dynamic string to copy from.
+ @return Boolean value indicating success or failure.
+*/
+TRIO_STRING_PUBLIC int
+trio_string_append
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ trio_string_t *other)
+{
+ size_t length;
+
+ assert(self);
+ assert(other);
+
+ length = self->length + other->length;
+ if (!TrioStringGrowTo(self, length))
+ goto error;
+ trio_copy(&self->content[self->length], other->content);
+ self->length = length;
+ return TRUE;
+
+ error:
+ return FALSE;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_append
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_append
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ TRIO_CONST char *other)
+{
+ size_t length;
+
+ assert(self);
+ assert(other);
+
+ length = self->length + trio_length(other);
+ if (!TrioStringGrowTo(self, length))
+ goto error;
+ trio_copy(&self->content[self->length], other);
+ self->length = length;
+ return TRUE;
+
+ error:
+ return FALSE;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/*
+ * trio_xstring_append_char
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_append_char
+TRIO_ARGS2((self, character),
+ trio_string_t *self,
+ char character)
+{
+ assert(self);
+
+ if ((int)self->length >= trio_string_size(self))
+ {
+ if (!TrioStringGrow(self, 0))
+ goto error;
+ }
+ self->content[self->length] = character;
+ self->length++;
+ return TRUE;
+
+ error:
+ return FALSE;
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/**
+ Search for the first occurrence of second parameter in the first.
+
+ @param self Dynamic string to be modified.
+ @param other Dynamic string to copy from.
+ @return Boolean value indicating success or failure.
+*/
+TRIO_STRING_PUBLIC int
+trio_string_contains
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ trio_string_t *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_contains(self->content, other->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_contains
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_contains
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ TRIO_CONST char *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_contains(self->content, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_copy
+ */
+TRIO_STRING_PUBLIC int
+trio_string_copy
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ trio_string_t *other)
+{
+ assert(self);
+ assert(other);
+
+ self->length = 0;
+ return trio_string_append(self, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_copy
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_copy
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ TRIO_CONST char *other)
+{
+ assert(self);
+ assert(other);
+
+ self->length = 0;
+ return trio_xstring_append(self, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_duplicate
+ */
+TRIO_STRING_PUBLIC trio_string_t *
+trio_string_duplicate
+TRIO_ARGS1((other),
+ trio_string_t *other)
+{
+ trio_string_t *self;
+
+ assert(other);
+
+ self = TrioStringAlloc();
+ if (self)
+ {
+ self->content = TrioDuplicateMax(other->content, other->length);
+ if (self->content)
+ {
+ self->length = other->length;
+ self->allocated = self->length + 1;
+ }
+ else
+ {
+ self->length = self->allocated = 0;
+ }
+ }
+ return self;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+/*
+ * trio_xstring_duplicate
+ */
+TRIO_STRING_PUBLIC trio_string_t *
+trio_xstring_duplicate
+TRIO_ARGS1((other),
+ TRIO_CONST char *other)
+{
+ trio_string_t *self;
+
+ assert(other);
+
+ self = TrioStringAlloc();
+ if (self)
+ {
+ self->content = TrioDuplicateMax(other, trio_length(other));
+ if (self->content)
+ {
+ self->length = trio_length(self->content);
+ self->allocated = self->length + 1;
+ }
+ else
+ {
+ self->length = self->allocated = 0;
+ }
+ }
+ return self;
+}
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_equal
+ */
+TRIO_STRING_PUBLIC int
+trio_string_equal
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ trio_string_t *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_equal(self->content, other->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_equal
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_equal
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ TRIO_CONST char *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_equal(self->content, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_equal_max
+ */
+TRIO_STRING_PUBLIC int
+trio_string_equal_max
+TRIO_ARGS3((self, max, other),
+ trio_string_t *self,
+ size_t max,
+ trio_string_t *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_equal_max(self->content, max, other->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_equal_max
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_equal_max
+TRIO_ARGS3((self, max, other),
+ trio_string_t *self,
+ size_t max,
+ TRIO_CONST char *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_equal_max(self->content, max, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_equal_case
+ */
+TRIO_STRING_PUBLIC int
+trio_string_equal_case
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ trio_string_t *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_equal_case(self->content, other->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_equal_case
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_equal_case
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ TRIO_CONST char *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_equal_case(self->content, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_equal_case_max
+ */
+TRIO_STRING_PUBLIC int
+trio_string_equal_case_max
+TRIO_ARGS3((self, max, other),
+ trio_string_t *self,
+ size_t max,
+ trio_string_t *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_equal_case_max(self->content, max, other->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_equal_case_max
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_equal_case_max
+TRIO_ARGS3((self, max, other),
+ trio_string_t *self,
+ size_t max,
+ TRIO_CONST char *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_equal_case_max(self->content, max, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_format_data_max
+ */
+TRIO_STRING_PUBLIC size_t
+trio_string_format_date_max
+TRIO_ARGS4((self, max, format, datetime),
+ trio_string_t *self,
+ size_t max,
+ TRIO_CONST char *format,
+ TRIO_CONST struct tm *datetime)
+{
+ assert(self);
+
+ return trio_format_date_max(self->content, max, format, datetime);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_index
+ */
+TRIO_STRING_PUBLIC char *
+trio_string_index
+TRIO_ARGS2((self, character),
+ trio_string_t *self,
+ int character)
+{
+ assert(self);
+
+ return trio_index(self->content, character);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_index_last
+ */
+TRIO_STRING_PUBLIC char *
+trio_string_index_last
+TRIO_ARGS2((self, character),
+ trio_string_t *self,
+ int character)
+{
+ assert(self);
+
+ return trio_index_last(self->content, character);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_length
+ */
+TRIO_STRING_PUBLIC int
+trio_string_length
+TRIO_ARGS1((self),
+ trio_string_t *self)
+{
+ assert(self);
+
+ if (self->length == 0)
+ {
+ self->length = trio_length(self->content);
+ }
+ return self->length;
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_lower
+ */
+TRIO_STRING_PUBLIC int
+trio_string_lower
+TRIO_ARGS1((self),
+ trio_string_t *self)
+{
+ assert(self);
+
+ return trio_lower(self->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_match
+ */
+TRIO_STRING_PUBLIC int
+trio_string_match
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ trio_string_t *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_match(self->content, other->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_match
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_match
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ TRIO_CONST char *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_match(self->content, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_match_case
+ */
+TRIO_STRING_PUBLIC int
+trio_string_match_case
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ trio_string_t *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_match_case(self->content, other->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_match_case
+ */
+TRIO_STRING_PUBLIC int
+trio_xstring_match_case
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ TRIO_CONST char *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_match_case(self->content, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_substring
+ */
+TRIO_STRING_PUBLIC char *
+trio_string_substring
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ trio_string_t *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_substring(self->content, other->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_xstring_substring
+ */
+TRIO_STRING_PUBLIC char *
+trio_xstring_substring
+TRIO_ARGS2((self, other),
+ trio_string_t *self,
+ TRIO_CONST char *other)
+{
+ assert(self);
+ assert(other);
+
+ return trio_substring(self->content, other);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+
+#if !defined(TRIO_MINIMAL)
+/*
+ * trio_string_upper
+ */
+TRIO_STRING_PUBLIC int
+trio_string_upper
+TRIO_ARGS1((self),
+ trio_string_t *self)
+{
+ assert(self);
+
+ return trio_upper(self->content);
+}
+#endif /* !defined(TRIO_MINIMAL) */
+
+/** @} End of DynamicStrings */
diff --git a/triostr.h b/triostr.h
new file mode 100644
index 0000000..d0e3836
--- /dev/null
+++ b/triostr.h
@@ -0,0 +1,140 @@
+/*************************************************************************
+ *
+ * $Id: triostr.h,v 1.3 2003/04/03 15:28:28 veillard Exp $
+ *
+ * Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
+ * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
+ *
+ ************************************************************************/
+
+#ifndef TRIO_TRIOSTR_H
+#define TRIO_TRIOSTR_H
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "triodef.h"
+#include "triop.h"
+
+enum {
+ TRIO_HASH_NONE = 0,
+ TRIO_HASH_PLAIN,
+ TRIO_HASH_TWOSIGNED
+};
+
+#if !defined(TRIO_STRING_PUBLIC)
+# if !defined(TRIO_PUBLIC)
+# define TRIO_PUBLIC
+# endif
+# define TRIO_STRING_PUBLIC TRIO_PUBLIC
+#endif
+
+/*************************************************************************
+ * String functions
+ */
+
+TRIO_STRING_PUBLIC int trio_copy_max TRIO_PROTO((char *target, size_t max, const char *source));
+TRIO_STRING_PUBLIC char *trio_create TRIO_PROTO((size_t size));
+TRIO_STRING_PUBLIC void trio_destroy TRIO_PROTO((char *string));
+TRIO_STRING_PUBLIC char *trio_duplicate TRIO_PROTO((const char *source));
+TRIO_STRING_PUBLIC int trio_equal TRIO_PROTO((const char *first, const char *second));
+TRIO_STRING_PUBLIC int trio_equal_case TRIO_PROTO((const char *first, const char *second));
+TRIO_STRING_PUBLIC int trio_equal_locale TRIO_PROTO((const char *first, const char *second));
+TRIO_STRING_PUBLIC int trio_equal_max TRIO_PROTO((const char *first, size_t max, const char *second));
+TRIO_STRING_PUBLIC TRIO_CONST char *trio_error TRIO_PROTO((int));
+TRIO_STRING_PUBLIC size_t trio_length TRIO_PROTO((const char *string));
+TRIO_STRING_PUBLIC double trio_to_double TRIO_PROTO((const char *source, char **endp));
+TRIO_STRING_PUBLIC long trio_to_long TRIO_PROTO((const char *source, char **endp, int base));
+TRIO_STRING_PUBLIC trio_long_double_t trio_to_long_double TRIO_PROTO((const char *source, char **endp));
+TRIO_STRING_PUBLIC int trio_to_upper TRIO_PROTO((int source));
+
+#if !defined(TRIO_MINIMAL)
+
+TRIO_STRING_PUBLIC int trio_append TRIO_PROTO((char *target, const char *source));
+TRIO_STRING_PUBLIC int trio_append_max TRIO_PROTO((char *target, size_t max, const char *source));
+TRIO_STRING_PUBLIC int trio_contains TRIO_PROTO((const char *string, const char *substring));
+TRIO_STRING_PUBLIC int trio_copy TRIO_PROTO((char *target, const char *source));
+TRIO_STRING_PUBLIC char *trio_duplicate_max TRIO_PROTO((const char *source, size_t max));
+TRIO_STRING_PUBLIC int trio_equal_case_max TRIO_PROTO((const char *first, size_t max, const char *second));
+TRIO_STRING_PUBLIC size_t trio_format_date_max TRIO_PROTO((char *target, size_t max, const char *format, const struct tm *datetime));
+TRIO_STRING_PUBLIC unsigned long trio_hash TRIO_PROTO((const char *string, int type));
+TRIO_STRING_PUBLIC char *trio_index TRIO_PROTO((const char *string, int character));
+TRIO_STRING_PUBLIC char *trio_index_last TRIO_PROTO((const char *string, int character));
+TRIO_STRING_PUBLIC int trio_lower TRIO_PROTO((char *target));
+TRIO_STRING_PUBLIC int trio_match TRIO_PROTO((const char *string, const char *pattern));
+TRIO_STRING_PUBLIC int trio_match_case TRIO_PROTO((const char *string, const char *pattern));
+TRIO_STRING_PUBLIC size_t trio_span_function TRIO_PROTO((char *target, const char *source, int (*Function) TRIO_PROTO((int))));
+TRIO_STRING_PUBLIC char *trio_substring TRIO_PROTO((const char *string, const char *substring));
+TRIO_STRING_PUBLIC char *trio_substring_max TRIO_PROTO((const char *string, size_t max, const char *substring));
+TRIO_STRING_PUBLIC float trio_to_float TRIO_PROTO((const char *source, char **endp));
+TRIO_STRING_PUBLIC int trio_to_lower TRIO_PROTO((int source));
+TRIO_STRING_PUBLIC unsigned long trio_to_unsigned_long TRIO_PROTO((const char *source, char **endp, int base));
+TRIO_STRING_PUBLIC char *trio_tokenize TRIO_PROTO((char *string, const char *delimiters));
+TRIO_STRING_PUBLIC int trio_upper TRIO_PROTO((char *target));
+
+#endif /* !defined(TRIO_MINIMAL) */
+
+/*************************************************************************
+ * Dynamic string functions
+ */
+
+/*
+ * Opaque type for dynamic strings
+ */
+
+typedef struct _trio_string_t trio_string_t;
+
+TRIO_STRING_PUBLIC void trio_string_destroy TRIO_PROTO((trio_string_t *self));
+TRIO_STRING_PUBLIC char *trio_string_extract TRIO_PROTO((trio_string_t *self));
+TRIO_STRING_PUBLIC int trio_string_size TRIO_PROTO((trio_string_t *self));
+TRIO_STRING_PUBLIC void trio_string_terminate TRIO_PROTO((trio_string_t *self));
+TRIO_STRING_PUBLIC int trio_xstring_append_char TRIO_PROTO((trio_string_t *self, char character));
+TRIO_STRING_PUBLIC trio_string_t *trio_xstring_duplicate TRIO_PROTO((const char *other));
+
+#if !defined(TRIO_MINIMAL)
+
+TRIO_STRING_PUBLIC trio_string_t *trio_string_create TRIO_PROTO((int initial_size));
+TRIO_STRING_PUBLIC char *trio_string_get TRIO_PROTO((trio_string_t *self, int offset));
+TRIO_STRING_PUBLIC void trio_xstring_set TRIO_PROTO((trio_string_t *self, char *buffer));
+
+TRIO_STRING_PUBLIC int trio_string_append TRIO_PROTO((trio_string_t *self, trio_string_t *other));
+TRIO_STRING_PUBLIC int trio_string_contains TRIO_PROTO((trio_string_t *self, trio_string_t *other));
+TRIO_STRING_PUBLIC int trio_string_copy TRIO_PROTO((trio_string_t *self, trio_string_t *other));
+TRIO_STRING_PUBLIC trio_string_t *trio_string_duplicate TRIO_PROTO((trio_string_t *other));
+TRIO_STRING_PUBLIC int trio_string_equal TRIO_PROTO((trio_string_t *self, trio_string_t *other));
+TRIO_STRING_PUBLIC int trio_string_equal_max TRIO_PROTO((trio_string_t *self, size_t max, trio_string_t *second));
+TRIO_STRING_PUBLIC int trio_string_equal_case TRIO_PROTO((trio_string_t *self, trio_string_t *other));
+TRIO_STRING_PUBLIC int trio_string_equal_case_max TRIO_PROTO((trio_string_t *self, size_t max, trio_string_t *other));
+TRIO_STRING_PUBLIC size_t trio_string_format_date_max TRIO_PROTO((trio_string_t *self, size_t max, const char *format, const struct tm *datetime));
+TRIO_STRING_PUBLIC char *trio_string_index TRIO_PROTO((trio_string_t *self, int character));
+TRIO_STRING_PUBLIC char *trio_string_index_last TRIO_PROTO((trio_string_t *self, int character));
+TRIO_STRING_PUBLIC int trio_string_length TRIO_PROTO((trio_string_t *self));
+TRIO_STRING_PUBLIC int trio_string_lower TRIO_PROTO((trio_string_t *self));
+TRIO_STRING_PUBLIC int trio_string_match TRIO_PROTO((trio_string_t *self, trio_string_t *other));
+TRIO_STRING_PUBLIC int trio_string_match_case TRIO_PROTO((trio_string_t *self, trio_string_t *other));
+TRIO_STRING_PUBLIC char *trio_string_substring TRIO_PROTO((trio_string_t *self, trio_string_t *other));
+TRIO_STRING_PUBLIC int trio_string_upper TRIO_PROTO((trio_string_t *self));
+
+TRIO_STRING_PUBLIC int trio_xstring_append TRIO_PROTO((trio_string_t *self, const char *other));
+TRIO_STRING_PUBLIC int trio_xstring_contains TRIO_PROTO((trio_string_t *self, const char *other));
+TRIO_STRING_PUBLIC int trio_xstring_copy TRIO_PROTO((trio_string_t *self, const char *other));
+TRIO_STRING_PUBLIC int trio_xstring_equal TRIO_PROTO((trio_string_t *self, const char *other));
+TRIO_STRING_PUBLIC int trio_xstring_equal_max TRIO_PROTO((trio_string_t *self, size_t max, const char *other));
+TRIO_STRING_PUBLIC int trio_xstring_equal_case TRIO_PROTO((trio_string_t *self, const char *other));
+TRIO_STRING_PUBLIC int trio_xstring_equal_case_max TRIO_PROTO((trio_string_t *self, size_t max, const char *other));
+TRIO_STRING_PUBLIC int trio_xstring_match TRIO_PROTO((trio_string_t *self, const char *other));
+TRIO_STRING_PUBLIC int trio_xstring_match_case TRIO_PROTO((trio_string_t *self, const char *other));
+TRIO_STRING_PUBLIC char *trio_xstring_substring TRIO_PROTO((trio_string_t *self, const char *other));
+
+#endif /* !defined(TRIO_MINIMAL) */
+
+#endif /* TRIO_TRIOSTR_H */
diff --git a/uri.c b/uri.c
new file mode 100644
index 0000000..13c875b
--- /dev/null
+++ b/uri.c
@@ -0,0 +1,2028 @@
+/**
+ * uri.c: set of generic URI related routines
+ *
+ * Reference: RFC 2396
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+
+#include <libxml/xmlmemory.h>
+#include <libxml/uri.h>
+#include <libxml/globals.h>
+#include <libxml/xmlerror.h>
+
+/************************************************************************
+ * *
+ * Macros to differentiate various character type *
+ * directly extracted from RFC 2396 *
+ * *
+ ************************************************************************/
+
+/*
+ * alpha = lowalpha | upalpha
+ */
+#define IS_ALPHA(x) (IS_LOWALPHA(x) || IS_UPALPHA(x))
+
+
+/*
+ * lowalpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" |
+ * "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" |
+ * "u" | "v" | "w" | "x" | "y" | "z"
+ */
+
+#define IS_LOWALPHA(x) (((x) >= 'a') && ((x) <= 'z'))
+
+/*
+ * upalpha = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" |
+ * "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" |
+ * "U" | "V" | "W" | "X" | "Y" | "Z"
+ */
+#define IS_UPALPHA(x) (((x) >= 'A') && ((x) <= 'Z'))
+
+/*
+ * digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
+ */
+
+#define IS_DIGIT(x) (((x) >= '0') && ((x) <= '9'))
+
+/*
+ * alphanum = alpha | digit
+ */
+
+#define IS_ALPHANUM(x) (IS_ALPHA(x) || IS_DIGIT(x))
+
+/*
+ * hex = digit | "A" | "B" | "C" | "D" | "E" | "F" |
+ * "a" | "b" | "c" | "d" | "e" | "f"
+ */
+
+#define IS_HEX(x) ((IS_DIGIT(x)) || (((x) >= 'a') && ((x) <= 'f')) || \
+ (((x) >= 'A') && ((x) <= 'F')))
+
+/*
+ * mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
+ */
+
+#define IS_MARK(x) (((x) == '-') || ((x) == '_') || ((x) == '.') || \
+ ((x) == '!') || ((x) == '~') || ((x) == '*') || ((x) == '\'') || \
+ ((x) == '(') || ((x) == ')'))
+
+
+/*
+ * reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
+ */
+
+#define IS_RESERVED(x) (((x) == ';') || ((x) == '/') || ((x) == '?') || \
+ ((x) == ':') || ((x) == '@') || ((x) == '&') || ((x) == '=') || \
+ ((x) == '+') || ((x) == '$') || ((x) == ','))
+
+/*
+ * unreserved = alphanum | mark
+ */
+
+#define IS_UNRESERVED(x) (IS_ALPHANUM(x) || IS_MARK(x))
+
+/*
+ * escaped = "%" hex hex
+ */
+
+#define IS_ESCAPED(p) ((*(p) == '%') && (IS_HEX((p)[1])) && \
+ (IS_HEX((p)[2])))
+
+/*
+ * uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
+ * "&" | "=" | "+" | "$" | ","
+ */
+#define IS_URIC_NO_SLASH(p) ((IS_UNRESERVED(*(p))) || (IS_ESCAPED(p)) ||\
+ ((*(p) == ';')) || ((*(p) == '?')) || ((*(p) == ':')) ||\
+ ((*(p) == '@')) || ((*(p) == '&')) || ((*(p) == '=')) ||\
+ ((*(p) == '+')) || ((*(p) == '$')) || ((*(p) == ',')))
+
+/*
+ * pchar = unreserved | escaped | ":" | "@" | "&" | "=" | "+" | "$" | ","
+ */
+#define IS_PCHAR(p) ((IS_UNRESERVED(*(p))) || (IS_ESCAPED(p)) || \
+ ((*(p) == ':')) || ((*(p) == '@')) || ((*(p) == '&')) ||\
+ ((*(p) == '=')) || ((*(p) == '+')) || ((*(p) == '$')) ||\
+ ((*(p) == ',')))
+
+/*
+ * rel_segment = 1*( unreserved | escaped |
+ * ";" | "@" | "&" | "=" | "+" | "$" | "," )
+ */
+
+#define IS_SEGMENT(p) ((IS_UNRESERVED(*(p))) || (IS_ESCAPED(p)) || \
+ ((*(p) == ';')) || ((*(p) == '@')) || ((*(p) == '&')) || \
+ ((*(p) == '=')) || ((*(p) == '+')) || ((*(p) == '$')) || \
+ ((*(p) == ',')))
+
+/*
+ * scheme = alpha *( alpha | digit | "+" | "-" | "." )
+ */
+
+#define IS_SCHEME(x) ((IS_ALPHA(x)) || (IS_DIGIT(x)) || \
+ ((x) == '+') || ((x) == '-') || ((x) == '.'))
+
+/*
+ * reg_name = 1*( unreserved | escaped | "$" | "," |
+ * ";" | ":" | "@" | "&" | "=" | "+" )
+ */
+
+#define IS_REG_NAME(p) ((IS_UNRESERVED(*(p))) || (IS_ESCAPED(p)) || \
+ ((*(p) == '$')) || ((*(p) == ',')) || ((*(p) == ';')) || \
+ ((*(p) == ':')) || ((*(p) == '@')) || ((*(p) == '&')) || \
+ ((*(p) == '=')) || ((*(p) == '+')))
+
+/*
+ * userinfo = *( unreserved | escaped | ";" | ":" | "&" | "=" |
+ * "+" | "$" | "," )
+ */
+#define IS_USERINFO(p) ((IS_UNRESERVED(*(p))) || (IS_ESCAPED(p)) || \
+ ((*(p) == ';')) || ((*(p) == ':')) || ((*(p) == '&')) || \
+ ((*(p) == '=')) || ((*(p) == '+')) || ((*(p) == '$')) || \
+ ((*(p) == ',')))
+
+/*
+ * uric = reserved | unreserved | escaped
+ */
+
+#define IS_URIC(p) ((IS_UNRESERVED(*(p))) || (IS_ESCAPED(p)) || \
+ (IS_RESERVED(*(p))))
+
+/*
+* unwise = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`"
+*/
+
+#define IS_UNWISE(p) \
+ (((*(p) == '{')) || ((*(p) == '}')) || ((*(p) == '|')) || \
+ ((*(p) == '\\')) || ((*(p) == '^')) || ((*(p) == '[')) || \
+ ((*(p) == ']')) || ((*(p) == '`')))
+
+/*
+ * Skip to next pointer char, handle escaped sequences
+ */
+
+#define NEXT(p) ((*p == '%')? p += 3 : p++)
+
+/*
+ * Productions from the spec.
+ *
+ * authority = server | reg_name
+ * reg_name = 1*( unreserved | escaped | "$" | "," |
+ * ";" | ":" | "@" | "&" | "=" | "+" )
+ *
+ * path = [ abs_path | opaque_part ]
+ */
+
+/************************************************************************
+ * *
+ * Generic URI structure functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCreateURI:
+ *
+ * Simply creates an empty xmlURI
+ *
+ * Returns the new structure or NULL in case of error
+ */
+xmlURIPtr
+xmlCreateURI(void) {
+ xmlURIPtr ret;
+
+ ret = (xmlURIPtr) xmlMalloc(sizeof(xmlURI));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlCreateURI: out of memory\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlURI));
+ return(ret);
+}
+
+/**
+ * xmlSaveUri:
+ * @uri: pointer to an xmlURI
+ *
+ * Save the URI as an escaped string
+ *
+ * Returns a new string (to be deallocated by caller)
+ */
+xmlChar *
+xmlSaveUri(xmlURIPtr uri) {
+ xmlChar *ret = NULL;
+ const char *p;
+ int len;
+ int max;
+
+ if (uri == NULL) return(NULL);
+
+
+ max = 80;
+ ret = (xmlChar *) xmlMallocAtomic((max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ len = 0;
+
+ if (uri->scheme != NULL) {
+ p = uri->scheme;
+ while (*p != 0) {
+ if (len >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = *p++;
+ }
+ if (len >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = ':';
+ }
+ if (uri->opaque != NULL) {
+ p = uri->opaque;
+ while (*p != 0) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ if (IS_RESERVED(*(p)) || IS_UNRESERVED(*(p)))
+ ret[len++] = *p++;
+ else {
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
+ ret[len++] = '%';
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
+ }
+ }
+ } else {
+ if (uri->server != NULL) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = '/';
+ ret[len++] = '/';
+ if (uri->user != NULL) {
+ p = uri->user;
+ while (*p != 0) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ if ((IS_UNRESERVED(*(p))) ||
+ ((*(p) == ';')) || ((*(p) == ':')) ||
+ ((*(p) == '&')) || ((*(p) == '=')) ||
+ ((*(p) == '+')) || ((*(p) == '$')) ||
+ ((*(p) == ',')))
+ ret[len++] = *p++;
+ else {
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
+ ret[len++] = '%';
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
+ }
+ }
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = '@';
+ }
+ p = uri->server;
+ while (*p != 0) {
+ if (len >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = *p++;
+ }
+ if (uri->port > 0) {
+ if (len + 10 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ len += snprintf((char *) &ret[len], max - len, ":%d", uri->port);
+ }
+ } else if (uri->authority != NULL) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = '/';
+ ret[len++] = '/';
+ p = uri->authority;
+ while (*p != 0) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ if ((IS_UNRESERVED(*(p))) ||
+ ((*(p) == '$')) || ((*(p) == ',')) || ((*(p) == ';')) ||
+ ((*(p) == ':')) || ((*(p) == '@')) || ((*(p) == '&')) ||
+ ((*(p) == '=')) || ((*(p) == '+')))
+ ret[len++] = *p++;
+ else {
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
+ ret[len++] = '%';
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
+ }
+ }
+ } else if (uri->scheme != NULL) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = '/';
+ ret[len++] = '/';
+ }
+ if (uri->path != NULL) {
+ p = uri->path;
+ while (*p != 0) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ if ((IS_UNRESERVED(*(p))) || ((*(p) == '/')) ||
+ ((*(p) == ';')) || ((*(p) == '@')) || ((*(p) == '&')) ||
+ ((*(p) == '=')) || ((*(p) == '+')) || ((*(p) == '$')) ||
+ ((*(p) == ',')))
+ ret[len++] = *p++;
+ else {
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
+ ret[len++] = '%';
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
+ }
+ }
+ }
+ if (uri->query != NULL) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = '?';
+ p = uri->query;
+ while (*p != 0) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p))))
+ ret[len++] = *p++;
+ else {
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
+ ret[len++] = '%';
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
+ }
+ }
+ }
+ }
+ if (uri->fragment != NULL) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = '#';
+ p = uri->fragment;
+ while (*p != 0) {
+ if (len + 3 >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret,
+ (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p))))
+ ret[len++] = *p++;
+ else {
+ int val = *(unsigned char *)p++;
+ int hi = val / 0x10, lo = val % 0x10;
+ ret[len++] = '%';
+ ret[len++] = hi + (hi > 9? 'A'-10 : '0');
+ ret[len++] = lo + (lo > 9? 'A'-10 : '0');
+ }
+ }
+ }
+ if (len >= max) {
+ max *= 2;
+ ret = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSaveUri: out of memory\n");
+ return(NULL);
+ }
+ }
+ ret[len++] = 0;
+ return(ret);
+}
+
+/**
+ * xmlPrintURI:
+ * @stream: a FILE* for the output
+ * @uri: pointer to an xmlURI
+ *
+ * Prints the URI in the stream @steam.
+ */
+void
+xmlPrintURI(FILE *stream, xmlURIPtr uri) {
+ xmlChar *out;
+
+ out = xmlSaveUri(uri);
+ if (out != NULL) {
+ fprintf(stream, "%s", (char *) out);
+ xmlFree(out);
+ }
+}
+
+/**
+ * xmlCleanURI:
+ * @uri: pointer to an xmlURI
+ *
+ * Make sure the xmlURI struct is free of content
+ */
+static void
+xmlCleanURI(xmlURIPtr uri) {
+ if (uri == NULL) return;
+
+ if (uri->scheme != NULL) xmlFree(uri->scheme);
+ uri->scheme = NULL;
+ if (uri->server != NULL) xmlFree(uri->server);
+ uri->server = NULL;
+ if (uri->user != NULL) xmlFree(uri->user);
+ uri->user = NULL;
+ if (uri->path != NULL) xmlFree(uri->path);
+ uri->path = NULL;
+ if (uri->fragment != NULL) xmlFree(uri->fragment);
+ uri->fragment = NULL;
+ if (uri->opaque != NULL) xmlFree(uri->opaque);
+ uri->opaque = NULL;
+ if (uri->authority != NULL) xmlFree(uri->authority);
+ uri->authority = NULL;
+ if (uri->query != NULL) xmlFree(uri->query);
+ uri->query = NULL;
+}
+
+/**
+ * xmlFreeURI:
+ * @uri: pointer to an xmlURI
+ *
+ * Free up the xmlURI struct
+ */
+void
+xmlFreeURI(xmlURIPtr uri) {
+ if (uri == NULL) return;
+
+ if (uri->scheme != NULL) xmlFree(uri->scheme);
+ if (uri->server != NULL) xmlFree(uri->server);
+ if (uri->user != NULL) xmlFree(uri->user);
+ if (uri->path != NULL) xmlFree(uri->path);
+ if (uri->fragment != NULL) xmlFree(uri->fragment);
+ if (uri->opaque != NULL) xmlFree(uri->opaque);
+ if (uri->authority != NULL) xmlFree(uri->authority);
+ if (uri->query != NULL) xmlFree(uri->query);
+ xmlFree(uri);
+}
+
+/************************************************************************
+ * *
+ * Helper functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlNormalizeURIPath:
+ * @path: pointer to the path string
+ *
+ * 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
+ *
+ * Returns 0 or an error code
+ */
+int
+xmlNormalizeURIPath(char *path) {
+ char *cur, *out;
+
+ if (path == NULL)
+ return(-1);
+
+ /* Skip all initial "/" chars. We want to get to the beginning of the
+ * first non-empty segment.
+ */
+ cur = path;
+ while (cur[0] == '/')
+ ++cur;
+ if (cur[0] == '\0')
+ return(0);
+
+ /* Keep everything we've seen so far. */
+ out = cur;
+
+ /*
+ * Analyze each segment in sequence for cases (c) and (d).
+ */
+ while (cur[0] != '\0') {
+ /*
+ * c) All occurrences of "./", where "." is a complete path segment,
+ * are removed from the buffer string.
+ */
+ if ((cur[0] == '.') && (cur[1] == '/')) {
+ cur += 2;
+ /* '//' normalization should be done at this point too */
+ while (cur[0] == '/')
+ cur++;
+ continue;
+ }
+
+ /*
+ * d) If the buffer string ends with "." as a complete path segment,
+ * that "." is removed.
+ */
+ if ((cur[0] == '.') && (cur[1] == '\0'))
+ break;
+
+ /* Otherwise keep the segment. */
+ while (cur[0] != '/') {
+ if (cur[0] == '\0')
+ goto done_cd;
+ (out++)[0] = (cur++)[0];
+ }
+ /* nomalize // */
+ while ((cur[0] == '/') && (cur[1] == '/'))
+ cur++;
+
+ (out++)[0] = (cur++)[0];
+ }
+ done_cd:
+ out[0] = '\0';
+
+ /* Reset to the beginning of the first segment for the next sequence. */
+ cur = path;
+ while (cur[0] == '/')
+ ++cur;
+ if (cur[0] == '\0')
+ return(0);
+
+ /*
+ * Analyze each segment in sequence for cases (e) and (f).
+ *
+ * e) All occurrences of "<segment>/../", where <segment> is a
+ * complete path segment not equal to "..", are removed from the
+ * buffer string. Removal of these path segments is performed
+ * iteratively, removing the leftmost matching pattern on each
+ * iteration, until no matching pattern remains.
+ *
+ * f) If the buffer string ends with "<segment>/..", where <segment>
+ * is a complete path segment not equal to "..", that
+ * "<segment>/.." is removed.
+ *
+ * To satisfy the "iterative" clause in (e), we need to collapse the
+ * string every time we find something that needs to be removed. Thus,
+ * we don't need to keep two pointers into the string: we only need a
+ * "current position" pointer.
+ */
+ while (1) {
+ char *segp, *tmp;
+
+ /* At the beginning of each iteration of this loop, "cur" points to
+ * the first character of the segment we want to examine.
+ */
+
+ /* Find the end of the current segment. */
+ segp = cur;
+ while ((segp[0] != '/') && (segp[0] != '\0'))
+ ++segp;
+
+ /* If this is the last segment, we're done (we need at least two
+ * segments to meet the criteria for the (e) and (f) cases).
+ */
+ if (segp[0] == '\0')
+ break;
+
+ /* If the first segment is "..", or if the next segment _isn't_ "..",
+ * keep this segment and try the next one.
+ */
+ ++segp;
+ if (((cur[0] == '.') && (cur[1] == '.') && (segp == cur+3))
+ || ((segp[0] != '.') || (segp[1] != '.')
+ || ((segp[2] != '/') && (segp[2] != '\0')))) {
+ cur = segp;
+ continue;
+ }
+
+ /* If we get here, remove this segment and the next one and back up
+ * to the previous segment (if there is one), to implement the
+ * "iteratively" clause. It's pretty much impossible to back up
+ * while maintaining two pointers into the buffer, so just compact
+ * the whole buffer now.
+ */
+
+ /* If this is the end of the buffer, we're done. */
+ if (segp[2] == '\0') {
+ cur[0] = '\0';
+ break;
+ }
+ /* Valgrind complained, strcpy(cur, segp + 3); */
+ /* string will overlap, do not use strcpy */
+ tmp = cur;
+ segp += 3;
+ while ((*tmp++ = *segp++) != 0);
+
+ /* If there are no previous segments, then keep going from here. */
+ segp = cur;
+ while ((segp > path) && ((--segp)[0] == '/'))
+ ;
+ if (segp == path)
+ continue;
+
+ /* "segp" is pointing to the end of a previous segment; find it's
+ * start. We need to back up to the previous segment and start
+ * over with that to handle things like "foo/bar/../..". If we
+ * don't do this, then on the first pass we'll remove the "bar/..",
+ * but be pointing at the second ".." so we won't realize we can also
+ * remove the "foo/..".
+ */
+ cur = segp;
+ while ((cur > path) && (cur[-1] != '/'))
+ --cur;
+ }
+ out[0] = '\0';
+
+ /*
+ * g) If the resulting buffer string still begins with one or more
+ * complete path segments of "..", then the reference is
+ * considered to be in error. Implementations may handle this
+ * error by retaining these components in the resolved path (i.e.,
+ * treating them as part of the final URI), by removing them from
+ * the resolved path (i.e., discarding relative levels above the
+ * root), or by avoiding traversal of the reference.
+ *
+ * We discard them from the final path.
+ */
+ if (path[0] == '/') {
+ cur = path;
+ while ((cur[0] == '/') && (cur[1] == '.') && (cur[2] == '.')
+ && ((cur[3] == '/') || (cur[3] == '\0')))
+ cur += 3;
+
+ if (cur != path) {
+ out = path;
+ while (cur[0] != '\0')
+ (out++)[0] = (cur++)[0];
+ out[0] = 0;
+ }
+ }
+
+ return(0);
+}
+
+/**
+ * xmlURIUnescapeString:
+ * @str: the string to unescape
+ * @len: the length in bytes to unescape (or <= 0 to indicate full string)
+ * @target: optional destination buffer
+ *
+ * Unescaping routine, does not do validity checks !
+ * Output is direct unsigned char translation of %XX values (no encoding)
+ *
+ * Returns an copy of the string, but unescaped
+ */
+char *
+xmlURIUnescapeString(const char *str, int len, char *target) {
+ char *ret, *out;
+ const char *in;
+
+ if (str == NULL)
+ return(NULL);
+ if (len <= 0) len = strlen(str);
+ if (len < 0) return(NULL);
+
+ if (target == NULL) {
+ ret = (char *) xmlMallocAtomic(len + 1);
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlURIUnescapeString: out of memory\n");
+ return(NULL);
+ }
+ } else
+ ret = target;
+ in = str;
+ out = ret;
+ while(len > 0) {
+ if (*in == '%') {
+ in++;
+ if ((*in >= '0') && (*in <= '9'))
+ *out = (*in - '0');
+ else if ((*in >= 'a') && (*in <= 'f'))
+ *out = (*in - 'a') + 10;
+ else if ((*in >= 'A') && (*in <= 'F'))
+ *out = (*in - 'A') + 10;
+ in++;
+ if ((*in >= '0') && (*in <= '9'))
+ *out = *out * 16 + (*in - '0');
+ else if ((*in >= 'a') && (*in <= 'f'))
+ *out = *out * 16 + (*in - 'a') + 10;
+ else if ((*in >= 'A') && (*in <= 'F'))
+ *out = *out * 16 + (*in - 'A') + 10;
+ in++;
+ len -= 3;
+ out++;
+ } else {
+ *out++ = *in++;
+ len--;
+ }
+ }
+ *out = 0;
+ return(ret);
+}
+
+/**
+ * xmlURIEscapeStr:
+ * @str: string to escape
+ * @list: exception list string of chars not to escape
+ *
+ * This routine escapes a string to hex, ignoring reserved characters (a-z)
+ * and the characters in the exception list.
+ *
+ * Returns a new escaped string or NULL in case of error.
+ */
+xmlChar *
+xmlURIEscapeStr(const xmlChar *str, const xmlChar *list) {
+ xmlChar *ret, ch;
+ const xmlChar *in;
+
+ unsigned int len, out;
+
+ if (str == NULL)
+ return(NULL);
+ len = xmlStrlen(str);
+ if (!(len > 0)) return(NULL);
+
+ len += 20;
+ ret = (xmlChar *) xmlMallocAtomic(len);
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlURIEscapeStr: out of memory\n");
+ return(NULL);
+ }
+ in = (const xmlChar *) str;
+ out = 0;
+ while(*in != 0) {
+ if (len - out <= 3) {
+ len += 20;
+ ret = (xmlChar *) xmlRealloc(ret, len);
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlURIEscapeStr: out of memory\n");
+ return(NULL);
+ }
+ }
+
+ ch = *in;
+
+ if ((ch != '@') && (!IS_UNRESERVED(ch)) && (!xmlStrchr(list, ch))) {
+ unsigned char val;
+ ret[out++] = '%';
+ val = ch >> 4;
+ if (val <= 9)
+ ret[out++] = '0' + val;
+ else
+ ret[out++] = 'A' + val - 0xA;
+ val = ch & 0xF;
+ if (val <= 9)
+ ret[out++] = '0' + val;
+ else
+ ret[out++] = 'A' + val - 0xA;
+ in++;
+ } else {
+ ret[out++] = *in++;
+ }
+
+ }
+ ret[out] = 0;
+ return(ret);
+}
+
+/**
+ * xmlURIEscape:
+ * @str: the string of the URI to escape
+ *
+ * Escaping routine, does not do validity checks !
+ * It will try to escape the chars needing this, but this is heuristic
+ * based it's impossible to be sure.
+ *
+ * Returns an copy of the string, but escaped
+ *
+ * 25 May 2001
+ * Uses xmlParseURI and xmlURIEscapeStr to try to escape correctly
+ * according to RFC2396.
+ * - Carl Douglas
+ */
+xmlChar *
+xmlURIEscape(const xmlChar * str)
+{
+ xmlChar *ret, *segment = NULL;
+ xmlURIPtr uri;
+ int ret2;
+
+#define NULLCHK(p) if(!p) { \
+ xmlGenericError(xmlGenericErrorContext, \
+ "xmlURIEscape: out of memory\n"); \
+ return NULL; }
+
+ if (str == NULL)
+ return (NULL);
+
+ uri = xmlCreateURI();
+ if (uri != NULL) {
+ /*
+ * Allow escaping errors in the unescaped form
+ */
+ uri->cleanup = 1;
+ ret2 = xmlParseURIReference(uri, (const char *)str);
+ if (ret2) {
+ xmlFreeURI(uri);
+ return (NULL);
+ }
+ }
+
+ if (!uri)
+ return NULL;
+
+ ret = NULL;
+
+ if (uri->scheme) {
+ segment = xmlURIEscapeStr(BAD_CAST uri->scheme, BAD_CAST "+-.");
+ NULLCHK(segment)
+ ret = xmlStrcat(ret, segment);
+ ret = xmlStrcat(ret, BAD_CAST ":");
+ xmlFree(segment);
+ }
+
+ if (uri->authority) {
+ segment =
+ xmlURIEscapeStr(BAD_CAST uri->authority, BAD_CAST "/?;:@");
+ NULLCHK(segment)
+ ret = xmlStrcat(ret, BAD_CAST "//");
+ ret = xmlStrcat(ret, segment);
+ xmlFree(segment);
+ }
+
+ if (uri->user) {
+ segment = xmlURIEscapeStr(BAD_CAST uri->user, BAD_CAST ";:&=+$,");
+ NULLCHK(segment)
+ ret = xmlStrcat(ret, segment);
+ ret = xmlStrcat(ret, BAD_CAST "@");
+ xmlFree(segment);
+ }
+
+ if (uri->server) {
+ segment = xmlURIEscapeStr(BAD_CAST uri->server, BAD_CAST "/?;:@");
+ NULLCHK(segment)
+ ret = xmlStrcat(ret, BAD_CAST "//");
+ ret = xmlStrcat(ret, segment);
+ xmlFree(segment);
+ }
+
+ if (uri->port) {
+ xmlChar port[10];
+
+ snprintf((char *) port, 10, "%d", uri->port);
+ ret = xmlStrcat(ret, BAD_CAST ":");
+ ret = xmlStrcat(ret, port);
+ }
+
+ if (uri->path) {
+ segment =
+ xmlURIEscapeStr(BAD_CAST uri->path, BAD_CAST ":@&=+$,/?;");
+ NULLCHK(segment)
+ ret = xmlStrcat(ret, segment);
+ xmlFree(segment);
+ }
+
+ if (uri->query) {
+ segment =
+ xmlURIEscapeStr(BAD_CAST uri->query, BAD_CAST ";/?:@&=+,$");
+ NULLCHK(segment)
+ ret = xmlStrcat(ret, BAD_CAST "?");
+ ret = xmlStrcat(ret, segment);
+ xmlFree(segment);
+ }
+
+ if (uri->opaque) {
+ segment = xmlURIEscapeStr(BAD_CAST uri->opaque, BAD_CAST "");
+ NULLCHK(segment)
+ ret = xmlStrcat(ret, segment);
+ xmlFree(segment);
+ }
+
+ if (uri->fragment) {
+ segment = xmlURIEscapeStr(BAD_CAST uri->fragment, BAD_CAST "#");
+ NULLCHK(segment)
+ ret = xmlStrcat(ret, BAD_CAST "#");
+ ret = xmlStrcat(ret, segment);
+ xmlFree(segment);
+ }
+
+ xmlFreeURI(uri);
+#undef NULLCHK
+
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Escaped URI parsing *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlParseURIFragment:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse an URI fragment string and fills in the appropriate fields
+ * of the @uri structure.
+ *
+ * fragment = *uric
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseURIFragment(xmlURIPtr uri, const char **str)
+{
+ const char *cur = *str;
+
+ if (str == NULL)
+ return (-1);
+
+ while (IS_URIC(cur) || IS_UNWISE(cur))
+ NEXT(cur);
+ if (uri != NULL) {
+ if (uri->fragment != NULL)
+ xmlFree(uri->fragment);
+ uri->fragment = xmlURIUnescapeString(*str, cur - *str, NULL);
+ }
+ *str = cur;
+ return (0);
+}
+
+/**
+ * xmlParseURIQuery:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse the query part of an URI
+ *
+ * query = *uric
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseURIQuery(xmlURIPtr uri, const char **str)
+{
+ const char *cur = *str;
+
+ if (str == NULL)
+ return (-1);
+
+ while (IS_URIC(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ NEXT(cur);
+ if (uri != NULL) {
+ if (uri->query != NULL)
+ xmlFree(uri->query);
+ uri->query = xmlURIUnescapeString(*str, cur - *str, NULL);
+ }
+ *str = cur;
+ return (0);
+}
+
+/**
+ * xmlParseURIScheme:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse an URI scheme
+ *
+ * scheme = alpha *( alpha | digit | "+" | "-" | "." )
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseURIScheme(xmlURIPtr uri, const char **str) {
+ const char *cur;
+
+ if (str == NULL)
+ return(-1);
+
+ cur = *str;
+ if (!IS_ALPHA(*cur))
+ return(2);
+ cur++;
+ while (IS_SCHEME(*cur)) cur++;
+ if (uri != NULL) {
+ if (uri->scheme != NULL) xmlFree(uri->scheme);
+ /* !!! strndup */
+ uri->scheme = xmlURIUnescapeString(*str, cur - *str, NULL);
+ }
+ *str = cur;
+ return(0);
+}
+
+/**
+ * xmlParseURIOpaquePart:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse an URI opaque part
+ *
+ * opaque_part = uric_no_slash *uric
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseURIOpaquePart(xmlURIPtr uri, const char **str)
+{
+ const char *cur;
+
+ if (str == NULL)
+ return (-1);
+
+ cur = *str;
+ if (!(IS_URIC_NO_SLASH(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))) {
+ return (3);
+ }
+ NEXT(cur);
+ while (IS_URIC(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ NEXT(cur);
+ if (uri != NULL) {
+ if (uri->opaque != NULL)
+ xmlFree(uri->opaque);
+ uri->opaque = xmlURIUnescapeString(*str, cur - *str, NULL);
+ }
+ *str = cur;
+ return (0);
+}
+
+/**
+ * xmlParseURIServer:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse a server subpart of an URI, it's a finer grain analysis
+ * of the authority part.
+ *
+ * server = [ [ userinfo "@" ] hostport ]
+ * userinfo = *( unreserved | escaped |
+ * ";" | ":" | "&" | "=" | "+" | "$" | "," )
+ * hostport = host [ ":" port ]
+ * host = hostname | IPv4address
+ * hostname = *( domainlabel "." ) toplabel [ "." ]
+ * domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
+ * toplabel = alpha | alpha *( alphanum | "-" ) alphanum
+ * IPv4address = 1*digit "." 1*digit "." 1*digit "." 1*digit
+ * port = *digit
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseURIServer(xmlURIPtr uri, const char **str) {
+ const char *cur;
+ const char *host, *tmp;
+ const int IPmax = 4;
+ int oct;
+
+ if (str == NULL)
+ return(-1);
+
+ cur = *str;
+
+ /*
+ * is there an userinfo ?
+ */
+ while (IS_USERINFO(cur)) NEXT(cur);
+ if (*cur == '@') {
+ if (uri != NULL) {
+ if (uri->user != NULL) xmlFree(uri->user);
+ uri->user = xmlURIUnescapeString(*str, cur - *str, NULL);
+ }
+ cur++;
+ } else {
+ if (uri != NULL) {
+ if (uri->user != NULL) xmlFree(uri->user);
+ uri->user = NULL;
+ }
+ cur = *str;
+ }
+ /*
+ * This can be empty in the case where there is no server
+ */
+ host = cur;
+ if (*cur == '/') {
+ if (uri != NULL) {
+ if (uri->authority != NULL) xmlFree(uri->authority);
+ uri->authority = NULL;
+ if (uri->server != NULL) xmlFree(uri->server);
+ uri->server = NULL;
+ uri->port = 0;
+ }
+ return(0);
+ }
+ /*
+ * host part of hostport can derive either an IPV4 address
+ * or an unresolved name. Check the IP first, it easier to detect
+ * errors if wrong one
+ */
+ for (oct = 0; oct < IPmax; ++oct) {
+ if (*cur == '.')
+ return(3); /* e.g. http://.xml/ or http://18.29..30/ */
+ while(IS_DIGIT(*cur)) cur++;
+ if (oct == (IPmax-1))
+ continue;
+ if (*cur != '.')
+ break;
+ cur++;
+ }
+ if (oct < IPmax || (*cur == '.' && cur++) || IS_ALPHA(*cur)) {
+ /* maybe host_name */
+ if (!IS_ALPHANUM(*cur))
+ return(4); /* e.g. http://xml.$oft */
+ do {
+ do ++cur; while (IS_ALPHANUM(*cur));
+ if (*cur == '-') {
+ --cur;
+ if (*cur == '.')
+ return(5); /* e.g. http://xml.-soft */
+ ++cur;
+ continue;
+ }
+ if (*cur == '.') {
+ --cur;
+ if (*cur == '-')
+ return(6); /* e.g. http://xml-.soft */
+ if (*cur == '.')
+ return(7); /* e.g. http://xml..soft */
+ ++cur;
+ continue;
+ }
+ break;
+ } while (1);
+ tmp = cur;
+ if (tmp[-1] == '.')
+ --tmp; /* e.g. http://xml.$Oft/ */
+ do --tmp; while (tmp >= host && IS_ALPHANUM(*tmp));
+ if ((++tmp == host || tmp[-1] == '.') && !IS_ALPHA(*tmp))
+ return(8); /* e.g. http://xmlsOft.0rg/ */
+ }
+ if (uri != NULL) {
+ if (uri->authority != NULL) xmlFree(uri->authority);
+ uri->authority = NULL;
+ if (uri->server != NULL) xmlFree(uri->server);
+ uri->server = xmlURIUnescapeString(host, cur - host, NULL);
+ }
+ /*
+ * finish by checking for a port presence.
+ */
+ if (*cur == ':') {
+ cur++;
+ if (IS_DIGIT(*cur)) {
+ if (uri != NULL)
+ uri->port = 0;
+ while (IS_DIGIT(*cur)) {
+ if (uri != NULL)
+ uri->port = uri->port * 10 + (*cur - '0');
+ cur++;
+ }
+ }
+ }
+ *str = cur;
+ return(0);
+}
+
+/**
+ * xmlParseURIRelSegment:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse an URI relative segment
+ *
+ * rel_segment = 1*( unreserved | escaped | ";" | "@" | "&" | "=" |
+ * "+" | "$" | "," )
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseURIRelSegment(xmlURIPtr uri, const char **str)
+{
+ const char *cur;
+
+ if (str == NULL)
+ return (-1);
+
+ cur = *str;
+ if (!(IS_SEGMENT(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))) {
+ return (3);
+ }
+ NEXT(cur);
+ while (IS_SEGMENT(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ NEXT(cur);
+ if (uri != NULL) {
+ if (uri->path != NULL)
+ xmlFree(uri->path);
+ uri->path = xmlURIUnescapeString(*str, cur - *str, NULL);
+ }
+ *str = cur;
+ return (0);
+}
+
+/**
+ * xmlParseURIPathSegments:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ * @slash: should we add a leading slash
+ *
+ * Parse an URI set of path segments
+ *
+ * path_segments = segment *( "/" segment )
+ * segment = *pchar *( ";" param )
+ * param = *pchar
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseURIPathSegments(xmlURIPtr uri, const char **str, int slash)
+{
+ const char *cur;
+
+ if (str == NULL)
+ return (-1);
+
+ cur = *str;
+
+ do {
+ while (IS_PCHAR(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ NEXT(cur);
+ while (*cur == ';') {
+ cur++;
+ while (IS_PCHAR(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ NEXT(cur);
+ }
+ if (*cur != '/')
+ break;
+ cur++;
+ } while (1);
+ if (uri != NULL) {
+ int len, len2 = 0;
+ char *path;
+
+ /*
+ * Concat the set of path segments to the current path
+ */
+ len = cur - *str;
+ if (slash)
+ len++;
+
+ if (uri->path != NULL) {
+ len2 = strlen(uri->path);
+ len += len2;
+ }
+ path = (char *) xmlMallocAtomic(len + 1);
+ if (path == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlParseURIPathSegments: out of memory\n");
+ *str = cur;
+ return (-1);
+ }
+ if (uri->path != NULL)
+ memcpy(path, uri->path, len2);
+ if (slash) {
+ path[len2] = '/';
+ len2++;
+ }
+ path[len2] = 0;
+ if (cur - *str > 0)
+ xmlURIUnescapeString(*str, cur - *str, &path[len2]);
+ if (uri->path != NULL)
+ xmlFree(uri->path);
+ uri->path = path;
+ }
+ *str = cur;
+ return (0);
+}
+
+/**
+ * xmlParseURIAuthority:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse the authority part of an URI.
+ *
+ * authority = server | reg_name
+ * server = [ [ userinfo "@" ] hostport ]
+ * reg_name = 1*( unreserved | escaped | "$" | "," | ";" | ":" |
+ * "@" | "&" | "=" | "+" )
+ *
+ * Note : this is completely ambiguous since reg_name is allowed to
+ * use the full set of chars in use by server:
+ *
+ * 3.2.1. Registry-based Naming Authority
+ *
+ * The structure of a registry-based naming authority is specific
+ * to the URI scheme, but constrained to the allowed characters
+ * for an authority component.
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseURIAuthority(xmlURIPtr uri, const char **str) {
+ const char *cur;
+ int ret;
+
+ if (str == NULL)
+ return(-1);
+
+ cur = *str;
+
+ /*
+ * try first to parse it as a server string.
+ */
+ ret = xmlParseURIServer(uri, str);
+ if ((ret == 0) && (*str != NULL) &&
+ ((**str == 0) || (**str == '/') || (**str == '?')))
+ return(0);
+ *str = cur;
+
+ /*
+ * failed, fallback to reg_name
+ */
+ if (!IS_REG_NAME(cur)) {
+ return(5);
+ }
+ NEXT(cur);
+ while (IS_REG_NAME(cur)) NEXT(cur);
+ if (uri != NULL) {
+ if (uri->server != NULL) xmlFree(uri->server);
+ uri->server = NULL;
+ if (uri->user != NULL) xmlFree(uri->user);
+ uri->user = NULL;
+ if (uri->authority != NULL) xmlFree(uri->authority);
+ uri->authority = xmlURIUnescapeString(*str, cur - *str, NULL);
+ }
+ *str = cur;
+ return(0);
+}
+
+/**
+ * xmlParseURIHierPart:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse an URI hierarchical part
+ *
+ * hier_part = ( net_path | abs_path ) [ "?" query ]
+ * abs_path = "/" path_segments
+ * net_path = "//" authority [ abs_path ]
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseURIHierPart(xmlURIPtr uri, const char **str) {
+ int ret;
+ const char *cur;
+
+ if (str == NULL)
+ return(-1);
+
+ cur = *str;
+
+ if ((cur[0] == '/') && (cur[1] == '/')) {
+ cur += 2;
+ ret = xmlParseURIAuthority(uri, &cur);
+ if (ret != 0)
+ return(ret);
+ if (cur[0] == '/') {
+ cur++;
+ ret = xmlParseURIPathSegments(uri, &cur, 1);
+ }
+ } else if (cur[0] == '/') {
+ cur++;
+ ret = xmlParseURIPathSegments(uri, &cur, 1);
+ } else {
+ return(4);
+ }
+ if (ret != 0)
+ return(ret);
+ if (*cur == '?') {
+ cur++;
+ ret = xmlParseURIQuery(uri, &cur);
+ if (ret != 0)
+ return(ret);
+ }
+ *str = cur;
+ return(0);
+}
+
+/**
+ * xmlParseAbsoluteURI:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse an URI reference string and fills in the appropriate fields
+ * of the @uri structure
+ *
+ * absoluteURI = scheme ":" ( hier_part | opaque_part )
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseAbsoluteURI(xmlURIPtr uri, const char **str) {
+ int ret;
+ const char *cur;
+
+ if (str == NULL)
+ return(-1);
+
+ cur = *str;
+
+ ret = xmlParseURIScheme(uri, str);
+ if (ret != 0) return(ret);
+ if (**str != ':') {
+ *str = cur;
+ return(1);
+ }
+ (*str)++;
+ if (**str == '/')
+ return(xmlParseURIHierPart(uri, str));
+ return(xmlParseURIOpaquePart(uri, str));
+}
+
+/**
+ * xmlParseRelativeURI:
+ * @uri: pointer to an URI structure
+ * @str: pointer to the string to analyze
+ *
+ * Parse an relative URI string and fills in the appropriate fields
+ * of the @uri structure
+ *
+ * relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
+ * abs_path = "/" path_segments
+ * net_path = "//" authority [ abs_path ]
+ * rel_path = rel_segment [ abs_path ]
+ *
+ * Returns 0 or the error code
+ */
+static int
+xmlParseRelativeURI(xmlURIPtr uri, const char **str) {
+ int ret = 0;
+ const char *cur;
+
+ if (str == NULL)
+ return(-1);
+
+ cur = *str;
+ if ((cur[0] == '/') && (cur[1] == '/')) {
+ cur += 2;
+ ret = xmlParseURIAuthority(uri, &cur);
+ if (ret != 0)
+ return(ret);
+ if (cur[0] == '/') {
+ cur++;
+ ret = xmlParseURIPathSegments(uri, &cur, 1);
+ }
+ } else if (cur[0] == '/') {
+ cur++;
+ ret = xmlParseURIPathSegments(uri, &cur, 1);
+ } else if (cur[0] != '#' && cur[0] != '?') {
+ ret = xmlParseURIRelSegment(uri, &cur);
+ if (ret != 0)
+ return(ret);
+ if (cur[0] == '/') {
+ cur++;
+ ret = xmlParseURIPathSegments(uri, &cur, 1);
+ }
+ }
+ if (ret != 0)
+ return(ret);
+ if (*cur == '?') {
+ cur++;
+ ret = xmlParseURIQuery(uri, &cur);
+ if (ret != 0)
+ return(ret);
+ }
+ *str = cur;
+ return(ret);
+}
+
+/**
+ * xmlParseURIReference:
+ * @uri: pointer to an URI structure
+ * @str: the string to analyze
+ *
+ * Parse an URI reference string and fills in the appropriate fields
+ * of the @uri structure
+ *
+ * URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
+ *
+ * Returns 0 or the error code
+ */
+int
+xmlParseURIReference(xmlURIPtr uri, const char *str) {
+ int ret;
+ const char *tmp = str;
+
+ if (str == NULL)
+ return(-1);
+ xmlCleanURI(uri);
+
+ /*
+ * Try first to parse absolute refs, then fallback to relative if
+ * it fails.
+ */
+ ret = xmlParseAbsoluteURI(uri, &str);
+ if (ret != 0) {
+ xmlCleanURI(uri);
+ str = tmp;
+ ret = xmlParseRelativeURI(uri, &str);
+ }
+ if (ret != 0) {
+ xmlCleanURI(uri);
+ return(ret);
+ }
+
+ if (*str == '#') {
+ str++;
+ ret = xmlParseURIFragment(uri, &str);
+ if (ret != 0) return(ret);
+ }
+ if (*str != 0) {
+ xmlCleanURI(uri);
+ return(1);
+ }
+ return(0);
+}
+
+/**
+ * xmlParseURI:
+ * @str: the URI string to analyze
+ *
+ * Parse an URI
+ *
+ * URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
+ *
+ * Returns a newly build xmlURIPtr or NULL in case of error
+ */
+xmlURIPtr
+xmlParseURI(const char *str) {
+ xmlURIPtr uri;
+ int ret;
+
+ if (str == NULL)
+ return(NULL);
+ uri = xmlCreateURI();
+ if (uri != NULL) {
+ ret = xmlParseURIReference(uri, str);
+ if (ret) {
+ xmlFreeURI(uri);
+ return(NULL);
+ }
+ }
+ return(uri);
+}
+
+/************************************************************************
+ * *
+ * Public functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlBuildURI:
+ * @URI: the URI instance found in the document
+ * @base: the base value
+ *
+ * Computes he final URI of the reference done by checking that
+ * the given URI is valid, and building the final URI using the
+ * base URI. This is processed according to section 5.2 of the
+ * RFC 2396
+ *
+ * 5.2. Resolving Relative References to Absolute Form
+ *
+ * Returns a new URI string (to be freed by the caller) or NULL in case
+ * of error.
+ */
+xmlChar *
+xmlBuildURI(const xmlChar *URI, const xmlChar *base) {
+ xmlChar *val = NULL;
+ int ret, len, indx, cur, out;
+ xmlURIPtr ref = NULL;
+ xmlURIPtr bas = NULL;
+ xmlURIPtr res = NULL;
+
+ /*
+ * 1) The URI reference is parsed into the potential four components and
+ * fragment identifier, as described in Section 4.3.
+ *
+ * NOTE that a completely empty URI is treated by modern browsers
+ * as a reference to "." rather than as a synonym for the current
+ * URI. Should we do that here?
+ */
+ if (URI == NULL)
+ ret = -1;
+ else {
+ if (*URI) {
+ ref = xmlCreateURI();
+ if (ref == NULL)
+ goto done;
+ ret = xmlParseURIReference(ref, (const char *) URI);
+ }
+ else
+ ret = 0;
+ }
+ if (ret != 0)
+ goto done;
+ if ((ref != NULL) && (ref->scheme != NULL)) {
+ /*
+ * The URI is absolute don't modify.
+ */
+ val = xmlStrdup(URI);
+ goto done;
+ }
+ if (base == NULL)
+ ret = -1;
+ else {
+ bas = xmlCreateURI();
+ if (bas == NULL)
+ goto done;
+ ret = xmlParseURIReference(bas, (const char *) base);
+ }
+ if (ret != 0) {
+ if (ref)
+ val = xmlSaveUri(ref);
+ goto done;
+ }
+ if (ref == NULL) {
+ /*
+ * the base fragment must be ignored
+ */
+ if (bas->fragment != NULL) {
+ xmlFree(bas->fragment);
+ bas->fragment = NULL;
+ }
+ val = xmlSaveUri(bas);
+ goto done;
+ }
+
+ /*
+ * 2) If the path component is empty and the scheme, authority, and
+ * query components are undefined, then it is a reference to the
+ * current document and we are done. Otherwise, the reference URI's
+ * query and fragment components are defined as found (or not found)
+ * within the URI reference and not inherited from the base URI.
+ *
+ * NOTE that in modern browsers, the parsing differs from the above
+ * in the following aspect: the query component is allowed to be
+ * defined while still treating this as a reference to the current
+ * document.
+ */
+ res = xmlCreateURI();
+ if (res == NULL)
+ goto done;
+ if ((ref->scheme == NULL) && (ref->path == NULL) &&
+ ((ref->authority == NULL) && (ref->server == NULL))) {
+ if (bas->scheme != NULL)
+ res->scheme = xmlMemStrdup(bas->scheme);
+ if (bas->authority != NULL)
+ res->authority = xmlMemStrdup(bas->authority);
+ else if (bas->server != NULL) {
+ res->server = xmlMemStrdup(bas->server);
+ if (bas->user != NULL)
+ res->user = xmlMemStrdup(bas->user);
+ res->port = bas->port;
+ }
+ if (bas->path != NULL)
+ res->path = xmlMemStrdup(bas->path);
+ if (ref->query != NULL)
+ res->query = xmlMemStrdup(ref->query);
+ else if (bas->query != NULL)
+ res->query = xmlMemStrdup(bas->query);
+ if (ref->fragment != NULL)
+ res->fragment = xmlMemStrdup(ref->fragment);
+ goto step_7;
+ }
+
+ /*
+ * 3) If the scheme component is defined, indicating that the reference
+ * starts with a scheme name, then the reference is interpreted as an
+ * absolute URI and we are done. Otherwise, the reference URI's
+ * scheme is inherited from the base URI's scheme component.
+ */
+ if (ref->scheme != NULL) {
+ val = xmlSaveUri(ref);
+ goto done;
+ }
+ if (bas->scheme != NULL)
+ res->scheme = xmlMemStrdup(bas->scheme);
+
+ if (ref->query != NULL)
+ res->query = xmlMemStrdup(ref->query);
+ if (ref->fragment != NULL)
+ res->fragment = xmlMemStrdup(ref->fragment);
+
+ /*
+ * 4) If the authority component is defined, then the reference is a
+ * network-path and we skip to step 7. Otherwise, the reference
+ * URI's authority is inherited from the base URI's authority
+ * component, which will also be undefined if the URI scheme does not
+ * use an authority component.
+ */
+ if ((ref->authority != NULL) || (ref->server != NULL)) {
+ if (ref->authority != NULL)
+ res->authority = xmlMemStrdup(ref->authority);
+ else {
+ res->server = xmlMemStrdup(ref->server);
+ if (ref->user != NULL)
+ res->user = xmlMemStrdup(ref->user);
+ res->port = ref->port;
+ }
+ if (ref->path != NULL)
+ res->path = xmlMemStrdup(ref->path);
+ goto step_7;
+ }
+ if (bas->authority != NULL)
+ res->authority = xmlMemStrdup(bas->authority);
+ else if (bas->server != NULL) {
+ res->server = xmlMemStrdup(bas->server);
+ if (bas->user != NULL)
+ res->user = xmlMemStrdup(bas->user);
+ res->port = bas->port;
+ }
+
+ /*
+ * 5) If the path component begins with a slash character ("/"), then
+ * the reference is an absolute-path and we skip to step 7.
+ */
+ if ((ref->path != NULL) && (ref->path[0] == '/')) {
+ res->path = xmlMemStrdup(ref->path);
+ goto step_7;
+ }
+
+
+ /*
+ * 6) If this step is reached, then we are resolving a relative-path
+ * reference. The relative path needs to be merged with the base
+ * URI's path. Although there are many ways to do this, we will
+ * describe a simple method using a separate string buffer.
+ *
+ * Allocate a buffer large enough for the result string.
+ */
+ len = 2; /* extra / and 0 */
+ if (ref->path != NULL)
+ len += strlen(ref->path);
+ if (bas->path != NULL)
+ len += strlen(bas->path);
+ res->path = (char *) xmlMallocAtomic(len);
+ if (res->path == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBuildURI: out of memory\n");
+ goto done;
+ }
+ res->path[0] = 0;
+
+ /*
+ * a) All but the last segment of the base URI's path component is
+ * copied to the buffer. In other words, any characters after the
+ * last (right-most) slash character, if any, are excluded.
+ */
+ cur = 0;
+ out = 0;
+ if (bas->path != NULL) {
+ while (bas->path[cur] != 0) {
+ while ((bas->path[cur] != 0) && (bas->path[cur] != '/'))
+ cur++;
+ if (bas->path[cur] == 0)
+ break;
+
+ cur++;
+ while (out < cur) {
+ res->path[out] = bas->path[out];
+ out++;
+ }
+ }
+ }
+ res->path[out] = 0;
+
+ /*
+ * b) The reference's path component is appended to the buffer
+ * string.
+ */
+ if (ref->path != NULL && ref->path[0] != 0) {
+ indx = 0;
+ /*
+ * Ensure the path includes a '/'
+ */
+ if ((out == 0) && (bas->server != NULL))
+ res->path[out++] = '/';
+ while (ref->path[indx] != 0) {
+ res->path[out++] = ref->path[indx++];
+ }
+ }
+ res->path[out] = 0;
+
+ /*
+ * Steps c) to h) are really path normalization steps
+ */
+ xmlNormalizeURIPath(res->path);
+
+step_7:
+
+ /*
+ * 7) The resulting URI components, including any inherited from the
+ * base URI, are recombined to give the absolute form of the URI
+ * reference.
+ */
+ val = xmlSaveUri(res);
+
+done:
+ if (ref != NULL)
+ xmlFreeURI(ref);
+ if (bas != NULL)
+ xmlFreeURI(bas);
+ if (res != NULL)
+ xmlFreeURI(res);
+ return(val);
+}
+
+/**
+ * xmlCanonicPath:
+ * @path: the resource locator in a filesystem notation
+ *
+ * Constructs a canonic path from the specified path.
+ *
+ * Returns a new canonic path, or a duplicate of the path parameter if the
+ * construction fails. The caller is responsible for freeing the memory occupied
+ * by the returned string. If there is insufficient memory available, or the
+ * argument is NULL, the function returns NULL.
+ */
+#define IS_WINDOWS_PATH(p) \
+ ((p != NULL) && \
+ (((p[0] >= 'a') && (p[0] <= 'z')) || \
+ ((p[0] >= 'A') && (p[0] <= 'Z'))) && \
+ (p[1] == ':') && ((p[2] == '/') || (p[2] == '\\')))
+xmlChar*
+xmlCanonicPath(const xmlChar *path)
+{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ int len = 0;
+ int i = 0;
+ xmlChar *p = NULL;
+#endif
+ xmlChar *ret;
+ xmlURIPtr uri;
+
+ if (path == NULL)
+ return(NULL);
+ if ((uri = xmlParseURI((const char *) path)) != NULL) {
+ xmlFreeURI(uri);
+ return xmlStrdup(path);
+ }
+
+ 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");
+ uri->path = xmlMallocAtomic(len + 2);
+ uri->path[0] = '/';
+ p = uri->path + 1;
+ strncpy(p, path, len + 1);
+ } else {
+ uri->path = xmlStrdup(path);
+ p = uri->path;
+ }
+ while (*p != '\0') {
+ if (*p == '\\')
+ *p = '/';
+ p++;
+ }
+#else
+ uri->path = (char *) xmlStrdup((const xmlChar *) path);
+#endif
+
+ ret = xmlSaveUri(uri);
+ xmlFreeURI(uri);
+ return(ret);
+}
+
diff --git a/valid.c b/valid.c
new file mode 100644
index 0000000..b2eb375
--- /dev/null
+++ b/valid.c
@@ -0,0 +1,6712 @@
+/*
+ * valid.c : part of the code use to do the DTD handling and the validity
+ * checking
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/hash.h>
+#include <libxml/valid.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/xmlerror.h>
+#include <libxml/list.h>
+#include <libxml/globals.h>
+
+static xmlElementPtr xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name,
+ int create);
+/* #define DEBUG_VALID_ALGO */
+/* #define DEBUG_REGEXP_ALGO */
+
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+/************************************************************************
+ * *
+ * Error handling routines *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlVErrMemory:
+ * @ctxt: an XML validation parser context
+ * @extra: extra informations
+ *
+ * Handle an out of memory error
+ */
+static void
+xmlVErrMemory(xmlValidCtxtPtr ctxt, const char *extra)
+{
+ xmlGenericErrorFunc channel = NULL;
+ xmlParserCtxtPtr pctxt = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ channel = ctxt->error;
+ data = ctxt->userData;
+ pctxt = ctxt->userData;
+ }
+ if (extra)
+ __xmlRaiseError(NULL, channel, data,
+ pctxt, NULL, XML_FROM_VALID, XML_ERR_NO_MEMORY,
+ XML_ERR_FATAL, NULL, 0, extra, NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+ else
+ __xmlRaiseError(NULL, channel, data,
+ pctxt, NULL, XML_FROM_VALID, XML_ERR_NO_MEMORY,
+ XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0,
+ "Memory allocation failed\n");
+}
+
+/**
+ * xmlErrValid:
+ * @ctxt: an XML validation parser context
+ * @error: the error number
+ * @extra: extra informations
+ *
+ * Handle a validation error
+ */
+static void
+xmlErrValid(xmlValidCtxtPtr ctxt, xmlParserErrors error,
+ const char *msg, const char *extra)
+{
+ xmlGenericErrorFunc channel = NULL;
+ xmlParserCtxtPtr pctxt = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ channel = ctxt->error;
+ data = ctxt->userData;
+ pctxt = ctxt->userData;
+ }
+ if (extra)
+ __xmlRaiseError(NULL, channel, data,
+ pctxt, NULL, XML_FROM_VALID, error,
+ XML_ERR_ERROR, NULL, 0, extra, NULL, NULL, 0, 0,
+ msg, extra);
+ else
+ __xmlRaiseError(NULL, channel, data,
+ pctxt, NULL, XML_FROM_VALID, error,
+ XML_ERR_ERROR, NULL, 0, NULL, NULL, NULL, 0, 0,
+ msg);
+}
+
+#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+/**
+ * xmlErrValidNode:
+ * @ctxt: an XML validation parser context
+ * @node: the node raising the error
+ * @error: the error number
+ * @str1: extra informations
+ * @str2: extra informations
+ * @str3: extra informations
+ *
+ * Handle a validation error, provide contextual informations
+ */
+static void
+xmlErrValidNode(xmlValidCtxtPtr ctxt,
+ xmlNodePtr node, xmlParserErrors error,
+ const char *msg, const xmlChar * str1,
+ const xmlChar * str2, const xmlChar * str3)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ xmlParserCtxtPtr pctxt = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ channel = ctxt->error;
+ data = ctxt->userData;
+ pctxt = ctxt->userData;
+ }
+ __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_VALID, error,
+ XML_ERR_ERROR, NULL, 0,
+ (const char *) str1,
+ (const char *) str1,
+ (const char *) str3, 0, 0, msg, str1, str2, str3);
+}
+#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
+
+#ifdef LIBXML_VALID_ENABLED
+/**
+ * xmlErrValidNodeNr:
+ * @ctxt: an XML validation parser context
+ * @node: the node raising the error
+ * @error: the error number
+ * @str1: extra informations
+ * @int2: extra informations
+ * @str3: extra informations
+ *
+ * Handle a validation error, provide contextual informations
+ */
+static void
+xmlErrValidNodeNr(xmlValidCtxtPtr ctxt,
+ xmlNodePtr node, xmlParserErrors error,
+ const char *msg, const xmlChar * str1,
+ int int2, const xmlChar * str3)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ xmlParserCtxtPtr pctxt = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ channel = ctxt->error;
+ data = ctxt->userData;
+ pctxt = ctxt->userData;
+ }
+ __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_VALID, error,
+ XML_ERR_ERROR, NULL, 0,
+ (const char *) str1,
+ (const char *) str3,
+ NULL, int2, 0, msg, str1, int2, str3);
+}
+
+/**
+ * xmlErrValidWarning:
+ * @ctxt: an XML validation parser context
+ * @node: the node raising the error
+ * @error: the error number
+ * @str1: extra information
+ * @str2: extra information
+ * @str3: extra information
+ *
+ * Handle a validation error, provide contextual information
+ */
+static void
+xmlErrValidWarning(xmlValidCtxtPtr ctxt,
+ xmlNodePtr node, xmlParserErrors error,
+ const char *msg, const xmlChar * str1,
+ const xmlChar * str2, const xmlChar * str3)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ xmlParserCtxtPtr pctxt = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ channel = ctxt->error;
+ data = ctxt->userData;
+ pctxt = ctxt->userData;
+ }
+ __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_VALID, error,
+ XML_ERR_WARNING, NULL, 0,
+ (const char *) str1,
+ (const char *) str1,
+ (const char *) str3, 0, 0, msg, str1, str2, str3);
+}
+
+
+
+#ifdef LIBXML_REGEXP_ENABLED
+/*
+ * If regexp are enabled we can do continuous validation without the
+ * need of a tree to validate the content model. this is done in each
+ * callbacks.
+ * Each xmlValidState represent the validation state associated to the
+ * set of nodes currently open from the document root to the current element.
+ */
+
+
+typedef struct _xmlValidState {
+ xmlElementPtr elemDecl; /* pointer to the content model */
+ xmlNodePtr node; /* pointer to the current node */
+ xmlRegExecCtxtPtr exec; /* regexp runtime */
+} _xmlValidState;
+
+
+static int
+vstateVPush(xmlValidCtxtPtr ctxt, xmlElementPtr elemDecl, xmlNodePtr node) {
+ if ((ctxt->vstateMax == 0) || (ctxt->vstateTab == NULL)) {
+ ctxt->vstateMax = 10;
+ ctxt->vstateTab = (xmlValidState *) xmlMalloc(ctxt->vstateMax *
+ sizeof(ctxt->vstateTab[0]));
+ if (ctxt->vstateTab == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ return(-1);
+ }
+ }
+
+ if (ctxt->vstateNr >= ctxt->vstateMax) {
+ xmlValidState *tmp;
+
+ tmp = (xmlValidState *) xmlRealloc(ctxt->vstateTab,
+ 2 * ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
+ if (tmp == NULL) {
+ xmlVErrMemory(ctxt, "realloc failed");
+ return(-1);
+ }
+ ctxt->vstateMax *= 2;
+ ctxt->vstateTab = tmp;
+ }
+ ctxt->vstate = &ctxt->vstateTab[ctxt->vstateNr];
+ ctxt->vstateTab[ctxt->vstateNr].elemDecl = elemDecl;
+ ctxt->vstateTab[ctxt->vstateNr].node = node;
+ if ((elemDecl != NULL) && (elemDecl->etype == XML_ELEMENT_TYPE_ELEMENT)) {
+ if (elemDecl->contModel == NULL)
+ xmlValidBuildContentModel(ctxt, elemDecl);
+ if (elemDecl->contModel != NULL) {
+ ctxt->vstateTab[ctxt->vstateNr].exec =
+ xmlRegNewExecCtxt(elemDecl->contModel, NULL, NULL);
+ } else {
+ ctxt->vstateTab[ctxt->vstateNr].exec = NULL;
+ xmlErrValidNode(ctxt, (xmlNodePtr) elemDecl,
+ XML_ERR_INTERNAL_ERROR,
+ "Failed to build content model regexp for %s\n",
+ node->name, NULL, NULL);
+ }
+ }
+ return(ctxt->vstateNr++);
+}
+
+static int
+vstateVPop(xmlValidCtxtPtr ctxt) {
+ xmlElementPtr elemDecl;
+
+ if (ctxt->vstateNr < 1) return(-1);
+ ctxt->vstateNr--;
+ elemDecl = ctxt->vstateTab[ctxt->vstateNr].elemDecl;
+ ctxt->vstateTab[ctxt->vstateNr].elemDecl = NULL;
+ ctxt->vstateTab[ctxt->vstateNr].node = NULL;
+ if ((elemDecl != NULL) && (elemDecl->etype == XML_ELEMENT_TYPE_ELEMENT)) {
+ xmlRegFreeExecCtxt(ctxt->vstateTab[ctxt->vstateNr].exec);
+ }
+ ctxt->vstateTab[ctxt->vstateNr].exec = NULL;
+ if (ctxt->vstateNr >= 1)
+ ctxt->vstate = &ctxt->vstateTab[ctxt->vstateNr - 1];
+ else
+ ctxt->vstate = NULL;
+ return(ctxt->vstateNr);
+}
+
+#else /* not LIBXML_REGEXP_ENABLED */
+/*
+ * If regexp are not enabled, it uses a home made algorithm less
+ * complex and easier to
+ * debug/maintain than a generic NFA -> DFA state based algo. The
+ * only restriction is on the deepness of the tree limited by the
+ * size of the occurs bitfield
+ *
+ * this is the content of a saved state for rollbacks
+ */
+
+#define ROLLBACK_OR 0
+#define ROLLBACK_PARENT 1
+
+typedef struct _xmlValidState {
+ xmlElementContentPtr cont; /* pointer to the content model subtree */
+ xmlNodePtr node; /* pointer to the current node in the list */
+ long occurs;/* bitfield for multiple occurrences */
+ unsigned char depth; /* current depth in the overall tree */
+ unsigned char state; /* ROLLBACK_XXX */
+} _xmlValidState;
+
+#define MAX_RECURSE 25000
+#define MAX_DEPTH ((sizeof(_xmlValidState.occurs)) * 8)
+#define CONT ctxt->vstate->cont
+#define NODE ctxt->vstate->node
+#define DEPTH ctxt->vstate->depth
+#define OCCURS ctxt->vstate->occurs
+#define STATE ctxt->vstate->state
+
+#define OCCURRENCE (ctxt->vstate->occurs & (1 << DEPTH))
+#define PARENT_OCCURRENCE (ctxt->vstate->occurs & ((1 << DEPTH) - 1))
+
+#define SET_OCCURRENCE ctxt->vstate->occurs |= (1 << DEPTH)
+#define RESET_OCCURRENCE ctxt->vstate->occurs &= ((1 << DEPTH) - 1)
+
+static int
+vstateVPush(xmlValidCtxtPtr ctxt, xmlElementContentPtr cont,
+ xmlNodePtr node, unsigned char depth, long occurs,
+ unsigned char state) {
+ int i = ctxt->vstateNr - 1;
+
+ if (ctxt->vstateNr > MAX_RECURSE) {
+ return(-1);
+ }
+ if (ctxt->vstateTab == NULL) {
+ ctxt->vstateMax = 8;
+ ctxt->vstateTab = (xmlValidState *) xmlMalloc(
+ ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
+ if (ctxt->vstateTab == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ return(-1);
+ }
+ }
+ if (ctxt->vstateNr >= ctxt->vstateMax) {
+ xmlValidState *tmp;
+
+ tmp = (xmlValidState *) xmlRealloc(ctxt->vstateTab,
+ 2 * ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
+ if (tmp == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ return(-1);
+ }
+ ctxt->vstateMax *= 2;
+ ctxt->vstateTab = tmp;
+ ctxt->vstate = &ctxt->vstateTab[0];
+ }
+ /*
+ * Don't push on the stack a state already here
+ */
+ if ((i >= 0) && (ctxt->vstateTab[i].cont == cont) &&
+ (ctxt->vstateTab[i].node == node) &&
+ (ctxt->vstateTab[i].depth == depth) &&
+ (ctxt->vstateTab[i].occurs == occurs) &&
+ (ctxt->vstateTab[i].state == state))
+ return(ctxt->vstateNr);
+ ctxt->vstateTab[ctxt->vstateNr].cont = cont;
+ ctxt->vstateTab[ctxt->vstateNr].node = node;
+ ctxt->vstateTab[ctxt->vstateNr].depth = depth;
+ ctxt->vstateTab[ctxt->vstateNr].occurs = occurs;
+ ctxt->vstateTab[ctxt->vstateNr].state = state;
+ return(ctxt->vstateNr++);
+}
+
+static int
+vstateVPop(xmlValidCtxtPtr ctxt) {
+ if (ctxt->vstateNr <= 1) return(-1);
+ ctxt->vstateNr--;
+ ctxt->vstate = &ctxt->vstateTab[0];
+ ctxt->vstate->cont = ctxt->vstateTab[ctxt->vstateNr].cont;
+ ctxt->vstate->node = ctxt->vstateTab[ctxt->vstateNr].node;
+ ctxt->vstate->depth = ctxt->vstateTab[ctxt->vstateNr].depth;
+ ctxt->vstate->occurs = ctxt->vstateTab[ctxt->vstateNr].occurs;
+ ctxt->vstate->state = ctxt->vstateTab[ctxt->vstateNr].state;
+ return(ctxt->vstateNr);
+}
+
+#endif /* LIBXML_REGEXP_ENABLED */
+
+static int
+nodeVPush(xmlValidCtxtPtr ctxt, xmlNodePtr value)
+{
+ if (ctxt->nodeMax <= 0) {
+ ctxt->nodeMax = 4;
+ ctxt->nodeTab =
+ (xmlNodePtr *) xmlMalloc(ctxt->nodeMax *
+ sizeof(ctxt->nodeTab[0]));
+ if (ctxt->nodeTab == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ ctxt->nodeMax = 0;
+ return (0);
+ }
+ }
+ if (ctxt->nodeNr >= ctxt->nodeMax) {
+ xmlNodePtr *tmp;
+ tmp = (xmlNodePtr *) xmlRealloc(ctxt->nodeTab,
+ ctxt->nodeMax * 2 * sizeof(ctxt->nodeTab[0]));
+ if (tmp == NULL) {
+ xmlVErrMemory(ctxt, "realloc failed");
+ return (0);
+ }
+ ctxt->nodeMax *= 2;
+ ctxt->nodeTab = tmp;
+ }
+ ctxt->nodeTab[ctxt->nodeNr] = value;
+ ctxt->node = value;
+ return (ctxt->nodeNr++);
+}
+static xmlNodePtr
+nodeVPop(xmlValidCtxtPtr ctxt)
+{
+ xmlNodePtr ret;
+
+ if (ctxt->nodeNr <= 0)
+ return (0);
+ 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;
+ return (ret);
+}
+
+#ifdef DEBUG_VALID_ALGO
+static void
+xmlValidPrintNode(xmlNodePtr cur) {
+ if (cur == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "null");
+ return;
+ }
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ xmlGenericError(xmlGenericErrorContext, "%s ", cur->name);
+ break;
+ case XML_TEXT_NODE:
+ xmlGenericError(xmlGenericErrorContext, "text ");
+ break;
+ case XML_CDATA_SECTION_NODE:
+ xmlGenericError(xmlGenericErrorContext, "cdata ");
+ break;
+ case XML_ENTITY_REF_NODE:
+ xmlGenericError(xmlGenericErrorContext, "&%s; ", cur->name);
+ break;
+ case XML_PI_NODE:
+ xmlGenericError(xmlGenericErrorContext, "pi(%s) ", cur->name);
+ break;
+ case XML_COMMENT_NODE:
+ xmlGenericError(xmlGenericErrorContext, "comment ");
+ break;
+ case XML_ATTRIBUTE_NODE:
+ xmlGenericError(xmlGenericErrorContext, "?attr? ");
+ break;
+ case XML_ENTITY_NODE:
+ xmlGenericError(xmlGenericErrorContext, "?ent? ");
+ break;
+ case XML_DOCUMENT_NODE:
+ xmlGenericError(xmlGenericErrorContext, "?doc? ");
+ break;
+ case XML_DOCUMENT_TYPE_NODE:
+ xmlGenericError(xmlGenericErrorContext, "?doctype? ");
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ xmlGenericError(xmlGenericErrorContext, "?frag? ");
+ break;
+ case XML_NOTATION_NODE:
+ xmlGenericError(xmlGenericErrorContext, "?nota? ");
+ break;
+ case XML_HTML_DOCUMENT_NODE:
+ xmlGenericError(xmlGenericErrorContext, "?html? ");
+ break;
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+ xmlGenericError(xmlGenericErrorContext, "?docb? ");
+ break;
+#endif
+ case XML_DTD_NODE:
+ xmlGenericError(xmlGenericErrorContext, "?dtd? ");
+ break;
+ case XML_ELEMENT_DECL:
+ xmlGenericError(xmlGenericErrorContext, "?edecl? ");
+ break;
+ case XML_ATTRIBUTE_DECL:
+ xmlGenericError(xmlGenericErrorContext, "?adecl? ");
+ break;
+ case XML_ENTITY_DECL:
+ xmlGenericError(xmlGenericErrorContext, "?entdecl? ");
+ break;
+ case XML_NAMESPACE_DECL:
+ xmlGenericError(xmlGenericErrorContext, "?nsdecl? ");
+ break;
+ case XML_XINCLUDE_START:
+ xmlGenericError(xmlGenericErrorContext, "incstart ");
+ break;
+ case XML_XINCLUDE_END:
+ xmlGenericError(xmlGenericErrorContext, "incend ");
+ break;
+ }
+}
+
+static void
+xmlValidPrintNodeList(xmlNodePtr cur) {
+ if (cur == NULL)
+ xmlGenericError(xmlGenericErrorContext, "null ");
+ while (cur != NULL) {
+ xmlValidPrintNode(cur);
+ cur = cur->next;
+ }
+}
+
+static void
+xmlValidDebug(xmlNodePtr cur, xmlElementContentPtr cont) {
+ char expr[5000];
+
+ expr[0] = 0;
+ xmlGenericError(xmlGenericErrorContext, "valid: ");
+ xmlValidPrintNodeList(cur);
+ xmlGenericError(xmlGenericErrorContext, "against ");
+ xmlSnprintfElementContent(expr, 5000, cont, 1);
+ xmlGenericError(xmlGenericErrorContext, "%s\n", expr);
+}
+
+static void
+xmlValidDebugState(xmlValidStatePtr state) {
+ xmlGenericError(xmlGenericErrorContext, "(");
+ if (state->cont == NULL)
+ xmlGenericError(xmlGenericErrorContext, "null,");
+ else
+ switch (state->cont->type) {
+ case XML_ELEMENT_CONTENT_PCDATA:
+ xmlGenericError(xmlGenericErrorContext, "pcdata,");
+ break;
+ case XML_ELEMENT_CONTENT_ELEMENT:
+ xmlGenericError(xmlGenericErrorContext, "%s,",
+ state->cont->name);
+ break;
+ case XML_ELEMENT_CONTENT_SEQ:
+ xmlGenericError(xmlGenericErrorContext, "seq,");
+ break;
+ case XML_ELEMENT_CONTENT_OR:
+ xmlGenericError(xmlGenericErrorContext, "or,");
+ break;
+ }
+ xmlValidPrintNode(state->node);
+ xmlGenericError(xmlGenericErrorContext, ",%d,%X,%d)",
+ state->depth, state->occurs, state->state);
+}
+
+static void
+xmlValidStateDebug(xmlValidCtxtPtr ctxt) {
+ int i, j;
+
+ xmlGenericError(xmlGenericErrorContext, "state: ");
+ xmlValidDebugState(ctxt->vstate);
+ xmlGenericError(xmlGenericErrorContext, " stack: %d ",
+ ctxt->vstateNr - 1);
+ for (i = 0, j = ctxt->vstateNr - 1;(i < 3) && (j > 0);i++,j--)
+ xmlValidDebugState(&ctxt->vstateTab[j]);
+ xmlGenericError(xmlGenericErrorContext, "\n");
+}
+
+/*****
+#define DEBUG_VALID_STATE(n,c) xmlValidDebug(n,c);
+ *****/
+
+#define DEBUG_VALID_STATE(n,c) xmlValidStateDebug(ctxt);
+#define DEBUG_VALID_MSG(m) \
+ xmlGenericError(xmlGenericErrorContext, "%s\n", m);
+
+#else
+#define DEBUG_VALID_STATE(n,c)
+#define DEBUG_VALID_MSG(m)
+#endif
+
+/* TODO: use hash table for accesses to elem and attribute definitions */
+
+
+#define CHECK_DTD \
+ if (doc == NULL) return(0); \
+ else if ((doc->intSubset == NULL) && \
+ (doc->extSubset == NULL)) return(0)
+
+xmlAttributePtr xmlScanAttributeDecl(xmlDtdPtr dtd, const xmlChar *elem);
+
+#ifdef LIBXML_REGEXP_ENABLED
+
+/************************************************************************
+ * *
+ * Content model validation based on the regexps *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlValidBuildAContentModel:
+ * @content: the content model
+ * @ctxt: the schema parser context
+ * @name: the element name whose content is being built
+ *
+ * Generate the automata sequence needed for that type
+ *
+ * Returns 1 if successful or 0 in case of error.
+ */
+static int
+xmlValidBuildAContentModel(xmlElementContentPtr content,
+ xmlValidCtxtPtr ctxt,
+ const xmlChar *name) {
+ if (content == NULL) {
+ xmlErrValidNode(ctxt, NULL, XML_ERR_INTERNAL_ERROR,
+ "Found NULL content in content model of %s\n",
+ name, NULL, NULL);
+ return(0);
+ }
+ switch (content->type) {
+ case XML_ELEMENT_CONTENT_PCDATA:
+ xmlErrValidNode(ctxt, NULL, XML_ERR_INTERNAL_ERROR,
+ "Found PCDATA in content model of %s\n",
+ name, NULL, NULL);
+ return(0);
+ break;
+ case XML_ELEMENT_CONTENT_ELEMENT: {
+ xmlAutomataStatePtr oldstate = ctxt->state;
+ xmlChar fn[50];
+ xmlChar *fullname;
+
+ fullname = xmlBuildQName(content->name, content->prefix, fn, 50);
+ if (fullname == NULL) {
+ xmlVErrMemory(ctxt, "Building content model");
+ return(0);
+ }
+
+ switch (content->ocur) {
+ case XML_ELEMENT_CONTENT_ONCE:
+ ctxt->state = xmlAutomataNewTransition(ctxt->am,
+ ctxt->state, NULL, fullname, NULL);
+ break;
+ case XML_ELEMENT_CONTENT_OPT:
+ ctxt->state = xmlAutomataNewTransition(ctxt->am,
+ ctxt->state, NULL, fullname, NULL);
+ xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
+ break;
+ case XML_ELEMENT_CONTENT_PLUS:
+ ctxt->state = xmlAutomataNewTransition(ctxt->am,
+ ctxt->state, NULL, fullname, NULL);
+ xmlAutomataNewTransition(ctxt->am, ctxt->state,
+ ctxt->state, fullname, NULL);
+ break;
+ case XML_ELEMENT_CONTENT_MULT:
+ xmlAutomataNewTransition(ctxt->am, ctxt->state,
+ ctxt->state, fullname, NULL);
+ ctxt->state = xmlAutomataNewEpsilon(ctxt->am, ctxt->state,
+ NULL);
+ break;
+ }
+ if ((fullname != fn) && (fullname != content->name))
+ xmlFree(fullname);
+ break;
+ }
+ case XML_ELEMENT_CONTENT_SEQ: {
+ xmlAutomataStatePtr oldstate, oldend;
+ xmlElementContentOccur ocur;
+
+ /*
+ * Simply iterate over the content
+ */
+ oldstate = ctxt->state;
+ ocur = content->ocur;
+ if (ocur != XML_ELEMENT_CONTENT_ONCE) {
+ ctxt->state = xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
+ oldstate = ctxt->state;
+ }
+ do {
+ xmlValidBuildAContentModel(content->c1, ctxt, name);
+ content = content->c2;
+ } while ((content->type == XML_ELEMENT_CONTENT_SEQ) &&
+ (content->ocur == XML_ELEMENT_CONTENT_ONCE));
+ xmlValidBuildAContentModel(content, ctxt, name);
+ oldend = ctxt->state;
+ ctxt->state = xmlAutomataNewEpsilon(ctxt->am, oldend, NULL);
+ switch (ocur) {
+ case XML_ELEMENT_CONTENT_ONCE:
+ break;
+ case XML_ELEMENT_CONTENT_OPT:
+ xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
+ break;
+ case XML_ELEMENT_CONTENT_MULT:
+ xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
+ xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
+ break;
+ case XML_ELEMENT_CONTENT_PLUS:
+ xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
+ break;
+ }
+ break;
+ }
+ case XML_ELEMENT_CONTENT_OR: {
+ xmlAutomataStatePtr oldstate, oldend;
+ xmlElementContentOccur ocur;
+
+ ocur = content->ocur;
+ if ((ocur == XML_ELEMENT_CONTENT_PLUS) ||
+ (ocur == XML_ELEMENT_CONTENT_MULT)) {
+ ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
+ ctxt->state, NULL);
+ }
+ oldstate = ctxt->state;
+ oldend = xmlAutomataNewState(ctxt->am);
+
+ /*
+ * iterate over the subtypes and remerge the end with an
+ * epsilon transition
+ */
+ do {
+ ctxt->state = oldstate;
+ xmlValidBuildAContentModel(content->c1, ctxt, name);
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldend);
+ content = content->c2;
+ } while ((content->type == XML_ELEMENT_CONTENT_OR) &&
+ (content->ocur == XML_ELEMENT_CONTENT_ONCE));
+ ctxt->state = oldstate;
+ xmlValidBuildAContentModel(content, ctxt, name);
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldend);
+ ctxt->state = xmlAutomataNewEpsilon(ctxt->am, oldend, NULL);
+ switch (ocur) {
+ case XML_ELEMENT_CONTENT_ONCE:
+ break;
+ case XML_ELEMENT_CONTENT_OPT:
+ xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
+ break;
+ case XML_ELEMENT_CONTENT_MULT:
+ xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
+ xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
+ break;
+ case XML_ELEMENT_CONTENT_PLUS:
+ xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
+ break;
+ }
+ break;
+ }
+ default:
+ xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
+ "ContentModel broken for element %s\n",
+ (const char *) name);
+ return(0);
+ }
+ return(1);
+}
+/**
+ * xmlValidBuildContentModel:
+ * @ctxt: a validation context
+ * @elem: an element declaration node
+ *
+ * (Re)Build the automata associated to the content model of this
+ * element
+ *
+ * Returns 1 in case of success, 0 in case of error
+ */
+int
+xmlValidBuildContentModel(xmlValidCtxtPtr ctxt, xmlElementPtr elem) {
+
+ if ((ctxt == NULL) || (elem == NULL))
+ return(0);
+ if (elem->type != XML_ELEMENT_DECL)
+ return(0);
+ if (elem->etype != XML_ELEMENT_TYPE_ELEMENT)
+ return(1);
+ /* TODO: should we rebuild in this case ? */
+ if (elem->contModel != NULL) {
+ if (!xmlRegexpIsDeterminist(elem->contModel)) {
+ ctxt->valid = 0;
+ return(0);
+ }
+ return(1);
+ }
+
+ ctxt->am = xmlNewAutomata();
+ if (ctxt->am == NULL) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) elem,
+ XML_ERR_INTERNAL_ERROR,
+ "Cannot create automata for element %s\n",
+ elem->name, NULL, NULL);
+ return(0);
+ }
+ ctxt->state = xmlAutomataGetInitState(ctxt->am);
+ xmlValidBuildAContentModel(elem->content, ctxt, elem->name);
+ xmlAutomataSetFinalState(ctxt->am, ctxt->state);
+ elem->contModel = xmlAutomataCompile(ctxt->am);
+ if (xmlRegexpIsDeterminist(elem->contModel) != 1) {
+ char expr[5000];
+ expr[0] = 0;
+ xmlSnprintfElementContent(expr, 5000, elem->content, 1);
+ xmlErrValidNode(ctxt, (xmlNodePtr) elem,
+ XML_DTD_CONTENT_NOT_DETERMINIST,
+ "Content model of %s is not determinist: %s\n",
+ elem->name, BAD_CAST expr, NULL);
+#ifdef DEBUG_REGEXP_ALGO
+ xmlRegexpPrint(stderr, elem->contModel);
+#endif
+ ctxt->valid = 0;
+ ctxt->state = NULL;
+ xmlFreeAutomata(ctxt->am);
+ ctxt->am = NULL;
+ return(0);
+ }
+ ctxt->state = NULL;
+ xmlFreeAutomata(ctxt->am);
+ ctxt->am = NULL;
+ return(1);
+}
+
+#endif /* LIBXML_REGEXP_ENABLED */
+
+/****************************************************************
+ * *
+ * Util functions for data allocation/deallocation *
+ * *
+ ****************************************************************/
+
+/**
+ * xmlNewValidCtxt:
+ *
+ * Allocate a validation context structure.
+ *
+ * Returns NULL if not, otherwise the new validation context structure
+ */
+xmlValidCtxtPtr xmlNewValidCtxt(void) {
+ xmlValidCtxtPtr ret;
+
+ if ((ret = xmlMalloc(sizeof (xmlValidCtxt))) == NULL) {
+ xmlVErrMemory(NULL, "malloc failed");
+ return (NULL);
+ }
+
+ (void) memset(ret, 0, sizeof (xmlValidCtxt));
+
+ return (ret);
+}
+
+/**
+ * xmlFreeValidCtxt:
+ * @cur: the validation context to free
+ *
+ * Free a validation context structure.
+ */
+void
+xmlFreeValidCtxt(xmlValidCtxtPtr cur) {
+ xmlFree(cur);
+}
+
+#endif /* LIBXML_VALID_ENABLED */
+
+/**
+ * xmlNewElementContent:
+ * @name: the subelement name or NULL
+ * @type: the type of element content decl
+ *
+ * Allocate an element content structure.
+ *
+ * Returns NULL if not, otherwise the new element content structure
+ */
+xmlElementContentPtr
+xmlNewElementContent(const xmlChar *name, xmlElementContentType type) {
+ xmlElementContentPtr ret;
+
+ switch(type) {
+ case XML_ELEMENT_CONTENT_ELEMENT:
+ if (name == NULL) {
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "xmlNewElementContent : name == NULL !\n",
+ NULL);
+ }
+ break;
+ case XML_ELEMENT_CONTENT_PCDATA:
+ case XML_ELEMENT_CONTENT_SEQ:
+ case XML_ELEMENT_CONTENT_OR:
+ if (name != NULL) {
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "xmlNewElementContent : name != NULL !\n",
+ NULL);
+ }
+ break;
+ default:
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "Internal: ELEMENT content corrupted invalid type\n",
+ NULL);
+ return(NULL);
+ }
+ ret = (xmlElementContentPtr) xmlMalloc(sizeof(xmlElementContent));
+ if (ret == NULL) {
+ xmlVErrMemory(NULL, "malloc failed");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlElementContent));
+ ret->type = type;
+ ret->ocur = XML_ELEMENT_CONTENT_ONCE;
+ if (name != NULL) {
+ xmlChar *prefix = NULL;
+ ret->name = xmlSplitQName2(name, &prefix);
+ if (ret->name == NULL)
+ ret->name = xmlStrdup(name);
+ ret->prefix = prefix;
+ } else {
+ ret->name = NULL;
+ ret->prefix = NULL;
+ }
+ ret->c1 = ret->c2 = ret->parent = NULL;
+ return(ret);
+}
+
+/**
+ * xmlCopyElementContent:
+ * @cur: An element content pointer.
+ *
+ * Build a copy of an element content description.
+ *
+ * Returns the new xmlElementContentPtr or NULL in case of error.
+ */
+xmlElementContentPtr
+xmlCopyElementContent(xmlElementContentPtr cur) {
+ xmlElementContentPtr ret;
+
+ if (cur == NULL) return(NULL);
+ ret = xmlNewElementContent((xmlChar *) cur->name, cur->type);
+ if (ret == NULL) {
+ xmlVErrMemory(NULL, "malloc failed");
+ return(NULL);
+ }
+ if (cur->prefix != NULL)
+ ret->prefix = xmlStrdup(cur->prefix);
+ ret->ocur = cur->ocur;
+ if (cur->c1 != NULL) ret->c1 = xmlCopyElementContent(cur->c1);
+ if (ret->c1 != NULL)
+ ret->c1->parent = ret;
+ if (cur->c2 != NULL) ret->c2 = xmlCopyElementContent(cur->c2);
+ if (ret->c2 != NULL)
+ ret->c2->parent = ret;
+ return(ret);
+}
+
+/**
+ * xmlFreeElementContent:
+ * @cur: the element content tree to free
+ *
+ * Free an element content structure. This is a recursive call !
+ */
+void
+xmlFreeElementContent(xmlElementContentPtr cur) {
+ if (cur == NULL) return;
+ switch (cur->type) {
+ case XML_ELEMENT_CONTENT_PCDATA:
+ case XML_ELEMENT_CONTENT_ELEMENT:
+ case XML_ELEMENT_CONTENT_SEQ:
+ case XML_ELEMENT_CONTENT_OR:
+ break;
+ default:
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "Internal: ELEMENT content corrupted invalid type\n",
+ NULL);
+ return;
+ }
+ if (cur->c1 != NULL) xmlFreeElementContent(cur->c1);
+ if (cur->c2 != NULL) xmlFreeElementContent(cur->c2);
+ if (cur->name != NULL) xmlFree((xmlChar *) cur->name);
+ if (cur->prefix != NULL) xmlFree((xmlChar *) cur->prefix);
+ xmlFree(cur);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlDumpElementContent:
+ * @buf: An XML buffer
+ * @content: An element table
+ * @glob: 1 if one must print the englobing parenthesis, 0 otherwise
+ *
+ * This will dump the content of the element table as an XML DTD definition
+ */
+static void
+xmlDumpElementContent(xmlBufferPtr buf, xmlElementContentPtr content, int glob) {
+ if (content == NULL) return;
+
+ if (glob) xmlBufferWriteChar(buf, "(");
+ switch (content->type) {
+ case XML_ELEMENT_CONTENT_PCDATA:
+ xmlBufferWriteChar(buf, "#PCDATA");
+ break;
+ case XML_ELEMENT_CONTENT_ELEMENT:
+ if (content->prefix != NULL) {
+ xmlBufferWriteCHAR(buf, content->prefix);
+ xmlBufferWriteChar(buf, ":");
+ }
+ xmlBufferWriteCHAR(buf, content->name);
+ break;
+ case XML_ELEMENT_CONTENT_SEQ:
+ if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
+ (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
+ xmlDumpElementContent(buf, content->c1, 1);
+ else
+ xmlDumpElementContent(buf, content->c1, 0);
+ xmlBufferWriteChar(buf, " , ");
+ if (content->c2->type == XML_ELEMENT_CONTENT_OR)
+ xmlDumpElementContent(buf, content->c2, 1);
+ else
+ xmlDumpElementContent(buf, content->c2, 0);
+ break;
+ case XML_ELEMENT_CONTENT_OR:
+ if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
+ (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
+ xmlDumpElementContent(buf, content->c1, 1);
+ else
+ xmlDumpElementContent(buf, content->c1, 0);
+ xmlBufferWriteChar(buf, " | ");
+ if (content->c2->type == XML_ELEMENT_CONTENT_SEQ)
+ xmlDumpElementContent(buf, content->c2, 1);
+ else
+ xmlDumpElementContent(buf, content->c2, 0);
+ break;
+ default:
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "Internal: ELEMENT content corrupted invalid type\n",
+ NULL);
+ }
+ if (glob)
+ xmlBufferWriteChar(buf, ")");
+ switch (content->ocur) {
+ case XML_ELEMENT_CONTENT_ONCE:
+ break;
+ case XML_ELEMENT_CONTENT_OPT:
+ xmlBufferWriteChar(buf, "?");
+ break;
+ case XML_ELEMENT_CONTENT_MULT:
+ xmlBufferWriteChar(buf, "*");
+ break;
+ case XML_ELEMENT_CONTENT_PLUS:
+ xmlBufferWriteChar(buf, "+");
+ break;
+ }
+}
+
+/**
+ * xmlSprintfElementContent:
+ * @buf: an output buffer
+ * @content: An element table
+ * @glob: 1 if one must print the englobing parenthesis, 0 otherwise
+ *
+ * Deprecated, unsafe, use xmlSnprintfElementContent
+ */
+void
+xmlSprintfElementContent(char *buf ATTRIBUTE_UNUSED,
+ xmlElementContentPtr content ATTRIBUTE_UNUSED,
+ int glob ATTRIBUTE_UNUSED) {
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlSnprintfElementContent:
+ * @buf: an output buffer
+ * @size: the buffer size
+ * @content: An element table
+ * @glob: 1 if one must print the englobing parenthesis, 0 otherwise
+ *
+ * This will dump the content of the element content definition
+ * Intended just for the debug routine
+ */
+void
+xmlSnprintfElementContent(char *buf, int size, xmlElementContentPtr content, int glob) {
+ int len;
+
+ if (content == NULL) return;
+ len = strlen(buf);
+ if (size - len < 50) {
+ if ((size - len > 4) && (buf[len - 1] != '.'))
+ strcat(buf, " ...");
+ return;
+ }
+ if (glob) strcat(buf, "(");
+ switch (content->type) {
+ case XML_ELEMENT_CONTENT_PCDATA:
+ strcat(buf, "#PCDATA");
+ break;
+ case XML_ELEMENT_CONTENT_ELEMENT:
+ if (content->prefix != NULL) {
+ if (size - len < xmlStrlen(content->prefix) + 10) {
+ strcat(buf, " ...");
+ return;
+ }
+ strcat(buf, (char *) content->prefix);
+ strcat(buf, ":");
+ }
+ if (size - len < xmlStrlen(content->name) + 10) {
+ strcat(buf, " ...");
+ return;
+ }
+ if (content->name != NULL)
+ strcat(buf, (char *) content->name);
+ break;
+ case XML_ELEMENT_CONTENT_SEQ:
+ if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
+ (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
+ xmlSnprintfElementContent(buf, size, content->c1, 1);
+ else
+ xmlSnprintfElementContent(buf, size, content->c1, 0);
+ len = strlen(buf);
+ if (size - len < 50) {
+ if ((size - len > 4) && (buf[len - 1] != '.'))
+ strcat(buf, " ...");
+ return;
+ }
+ strcat(buf, " , ");
+ if (((content->c2->type == XML_ELEMENT_CONTENT_OR) ||
+ (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)) &&
+ (content->c2->type != XML_ELEMENT_CONTENT_ELEMENT))
+ xmlSnprintfElementContent(buf, size, content->c2, 1);
+ else
+ xmlSnprintfElementContent(buf, size, content->c2, 0);
+ break;
+ case XML_ELEMENT_CONTENT_OR:
+ if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
+ (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
+ xmlSnprintfElementContent(buf, size, content->c1, 1);
+ else
+ xmlSnprintfElementContent(buf, size, content->c1, 0);
+ len = strlen(buf);
+ if (size - len < 50) {
+ if ((size - len > 4) && (buf[len - 1] != '.'))
+ strcat(buf, " ...");
+ return;
+ }
+ strcat(buf, " | ");
+ if (((content->c2->type == XML_ELEMENT_CONTENT_SEQ) ||
+ (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)) &&
+ (content->c2->type != XML_ELEMENT_CONTENT_ELEMENT))
+ xmlSnprintfElementContent(buf, size, content->c2, 1);
+ else
+ xmlSnprintfElementContent(buf, size, content->c2, 0);
+ break;
+ }
+ if (glob)
+ strcat(buf, ")");
+ switch (content->ocur) {
+ case XML_ELEMENT_CONTENT_ONCE:
+ break;
+ case XML_ELEMENT_CONTENT_OPT:
+ strcat(buf, "?");
+ break;
+ case XML_ELEMENT_CONTENT_MULT:
+ strcat(buf, "*");
+ break;
+ case XML_ELEMENT_CONTENT_PLUS:
+ strcat(buf, "+");
+ break;
+ }
+}
+
+/****************************************************************
+ * *
+ * Registration of DTD declarations *
+ * *
+ ****************************************************************/
+
+/**
+ * xmlCreateElementTable:
+ *
+ * create and initialize an empty element hash table.
+ *
+ * Returns the xmlElementTablePtr just created or NULL in case of error.
+ */
+static xmlElementTablePtr
+xmlCreateElementTable(void) {
+ return(xmlHashCreate(0));
+}
+
+/**
+ * xmlFreeElement:
+ * @elem: An element
+ *
+ * Deallocate the memory used by an element definition
+ */
+static void
+xmlFreeElement(xmlElementPtr elem) {
+ if (elem == NULL) return;
+ xmlUnlinkNode((xmlNodePtr) elem);
+ xmlFreeElementContent(elem->content);
+ if (elem->name != NULL)
+ xmlFree((xmlChar *) elem->name);
+ if (elem->prefix != NULL)
+ xmlFree((xmlChar *) elem->prefix);
+#ifdef LIBXML_REGEXP_ENABLED
+ if (elem->contModel != NULL)
+ xmlRegFreeRegexp(elem->contModel);
+#endif
+ xmlFree(elem);
+}
+
+
+/**
+ * xmlAddElementDecl:
+ * @ctxt: the validation context
+ * @dtd: pointer to the DTD
+ * @name: the entity name
+ * @type: the element type
+ * @content: the element content tree or NULL
+ *
+ * Register a new element declaration
+ *
+ * Returns NULL if not, otherwise the entity
+ */
+xmlElementPtr
+xmlAddElementDecl(xmlValidCtxtPtr ctxt,
+ xmlDtdPtr dtd, const xmlChar *name,
+ xmlElementTypeVal type,
+ xmlElementContentPtr content) {
+ xmlElementPtr ret;
+ xmlElementTablePtr table;
+ xmlAttributePtr oldAttributes = NULL;
+ xmlChar *ns, *uqname;
+
+ if (dtd == NULL) {
+ return(NULL);
+ }
+ if (name == NULL) {
+ return(NULL);
+ }
+ switch (type) {
+ case XML_ELEMENT_TYPE_EMPTY:
+ if (content != NULL) {
+ xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
+ "xmlAddElementDecl: content != NULL for EMPTY\n",
+ NULL);
+ return(NULL);
+ }
+ break;
+ case XML_ELEMENT_TYPE_ANY:
+ if (content != NULL) {
+ xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
+ "xmlAddElementDecl: content != NULL for ANY\n",
+ NULL);
+ return(NULL);
+ }
+ break;
+ case XML_ELEMENT_TYPE_MIXED:
+ if (content == NULL) {
+ xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
+ "xmlAddElementDecl: content == NULL for MIXED\n",
+ NULL);
+ return(NULL);
+ }
+ break;
+ case XML_ELEMENT_TYPE_ELEMENT:
+ if (content == NULL) {
+ xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
+ "xmlAddElementDecl: content == NULL for ELEMENT\n",
+ NULL);
+ return(NULL);
+ }
+ break;
+ default:
+ xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
+ "Internal: ELEMENT decl corrupted invalid type\n",
+ NULL);
+ return(NULL);
+ }
+
+ /*
+ * check if name is a QName
+ */
+ uqname = xmlSplitQName2(name, &ns);
+ if (uqname != NULL)
+ name = uqname;
+
+ /*
+ * Create the Element table if needed.
+ */
+ table = (xmlElementTablePtr) dtd->elements;
+ if (table == NULL) {
+ table = xmlCreateElementTable();
+ dtd->elements = (void *) table;
+ }
+ if (table == NULL) {
+ xmlVErrMemory(ctxt,
+ "xmlAddElementDecl: Table creation failed!\n");
+ if (uqname != NULL)
+ xmlFree(uqname);
+ if (ns != NULL)
+ xmlFree(ns);
+ return(NULL);
+ }
+
+ /*
+ * lookup old attributes inserted on an undefined element in the
+ * internal subset.
+ */
+ if ((dtd->doc != NULL) && (dtd->doc->intSubset != NULL)) {
+ ret = xmlHashLookup2(dtd->doc->intSubset->elements, name, ns);
+ if ((ret != NULL) && (ret->etype == XML_ELEMENT_TYPE_UNDEFINED)) {
+ oldAttributes = ret->attributes;
+ ret->attributes = NULL;
+ xmlHashRemoveEntry2(dtd->doc->intSubset->elements, name, ns, NULL);
+ xmlFreeElement(ret);
+ }
+ }
+
+ /*
+ * The element may already be present if one of its attribute
+ * was registered first
+ */
+ ret = xmlHashLookup2(table, name, ns);
+ if (ret != NULL) {
+ if (ret->etype != XML_ELEMENT_TYPE_UNDEFINED) {
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * The element is already defined in this DTD.
+ */
+ xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ELEM_REDEFINED,
+ "Redefinition of element %s\n",
+ name, NULL, NULL);
+#endif /* LIBXML_VALID_ENABLED */
+ if (uqname != NULL)
+ xmlFree(uqname);
+ if (ns != NULL)
+ xmlFree(ns);
+ return(NULL);
+ }
+ } else {
+ ret = (xmlElementPtr) xmlMalloc(sizeof(xmlElement));
+ if (ret == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ if (uqname != NULL)
+ xmlFree(uqname);
+ if (ns != NULL)
+ xmlFree(ns);
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlElement));
+ ret->type = XML_ELEMENT_DECL;
+
+ /*
+ * fill the structure.
+ */
+ ret->name = xmlStrdup(name);
+ if (ret->name == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ if (uqname != NULL)
+ xmlFree(uqname);
+ if (ns != NULL)
+ xmlFree(ns);
+ xmlFree(ret);
+ return(NULL);
+ }
+ ret->prefix = ns;
+
+ /*
+ * Validity Check:
+ * Insertion must not fail
+ */
+ if (xmlHashAddEntry2(table, name, ns, ret)) {
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * The element is already defined in this DTD.
+ */
+ xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ELEM_REDEFINED,
+ "Redefinition of element %s\n",
+ name, NULL, NULL);
+#endif /* LIBXML_VALID_ENABLED */
+ xmlFreeElement(ret);
+ if (uqname != NULL)
+ xmlFree(uqname);
+ return(NULL);
+ }
+ /*
+ * For new element, may have attributes from earlier
+ * definition in internal subset
+ */
+ ret->attributes = oldAttributes;
+ }
+
+ /*
+ * Finish to fill the structure.
+ */
+ ret->etype = type;
+ ret->content = xmlCopyElementContent(content);
+
+ /*
+ * Link it to the DTD
+ */
+ ret->parent = dtd;
+ ret->doc = dtd->doc;
+ if (dtd->last == NULL) {
+ dtd->children = dtd->last = (xmlNodePtr) ret;
+ } else {
+ dtd->last->next = (xmlNodePtr) ret;
+ ret->prev = dtd->last;
+ dtd->last = (xmlNodePtr) ret;
+ }
+ if (uqname != NULL)
+ xmlFree(uqname);
+ return(ret);
+}
+
+/**
+ * xmlFreeElementTable:
+ * @table: An element table
+ *
+ * Deallocate the memory used by an element hash table.
+ */
+void
+xmlFreeElementTable(xmlElementTablePtr table) {
+ xmlHashFree(table, (xmlHashDeallocator) xmlFreeElement);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlCopyElement:
+ * @elem: An element
+ *
+ * Build a copy of an element.
+ *
+ * Returns the new xmlElementPtr or NULL in case of error.
+ */
+static xmlElementPtr
+xmlCopyElement(xmlElementPtr elem) {
+ xmlElementPtr cur;
+
+ cur = (xmlElementPtr) xmlMalloc(sizeof(xmlElement));
+ if (cur == NULL) {
+ xmlVErrMemory(NULL, "malloc failed");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlElement));
+ cur->type = XML_ELEMENT_DECL;
+ cur->etype = elem->etype;
+ if (elem->name != NULL)
+ cur->name = xmlStrdup(elem->name);
+ else
+ cur->name = NULL;
+ if (elem->prefix != NULL)
+ cur->prefix = xmlStrdup(elem->prefix);
+ else
+ cur->prefix = NULL;
+ cur->content = xmlCopyElementContent(elem->content);
+ /* TODO : rebuild the attribute list on the copy */
+ cur->attributes = NULL;
+ return(cur);
+}
+
+/**
+ * xmlCopyElementTable:
+ * @table: An element table
+ *
+ * Build a copy of an element table.
+ *
+ * Returns the new xmlElementTablePtr or NULL in case of error.
+ */
+xmlElementTablePtr
+xmlCopyElementTable(xmlElementTablePtr table) {
+ return((xmlElementTablePtr) xmlHashCopy(table,
+ (xmlHashCopier) xmlCopyElement));
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlDumpElementDecl:
+ * @buf: the XML buffer output
+ * @elem: An element table
+ *
+ * This will dump the content of the element declaration as an XML
+ * DTD definition
+ */
+void
+xmlDumpElementDecl(xmlBufferPtr buf, xmlElementPtr elem) {
+ switch (elem->etype) {
+ case XML_ELEMENT_TYPE_EMPTY:
+ xmlBufferWriteChar(buf, "<!ELEMENT ");
+ if (elem->prefix != NULL) {
+ xmlBufferWriteCHAR(buf, elem->prefix);
+ xmlBufferWriteChar(buf, ":");
+ }
+ xmlBufferWriteCHAR(buf, elem->name);
+ xmlBufferWriteChar(buf, " EMPTY>\n");
+ break;
+ case XML_ELEMENT_TYPE_ANY:
+ xmlBufferWriteChar(buf, "<!ELEMENT ");
+ if (elem->prefix != NULL) {
+ xmlBufferWriteCHAR(buf, elem->prefix);
+ xmlBufferWriteChar(buf, ":");
+ }
+ xmlBufferWriteCHAR(buf, elem->name);
+ xmlBufferWriteChar(buf, " ANY>\n");
+ break;
+ case XML_ELEMENT_TYPE_MIXED:
+ xmlBufferWriteChar(buf, "<!ELEMENT ");
+ if (elem->prefix != NULL) {
+ xmlBufferWriteCHAR(buf, elem->prefix);
+ xmlBufferWriteChar(buf, ":");
+ }
+ xmlBufferWriteCHAR(buf, elem->name);
+ xmlBufferWriteChar(buf, " ");
+ xmlDumpElementContent(buf, elem->content, 1);
+ xmlBufferWriteChar(buf, ">\n");
+ break;
+ case XML_ELEMENT_TYPE_ELEMENT:
+ xmlBufferWriteChar(buf, "<!ELEMENT ");
+ if (elem->prefix != NULL) {
+ xmlBufferWriteCHAR(buf, elem->prefix);
+ xmlBufferWriteChar(buf, ":");
+ }
+ xmlBufferWriteCHAR(buf, elem->name);
+ xmlBufferWriteChar(buf, " ");
+ xmlDumpElementContent(buf, elem->content, 1);
+ xmlBufferWriteChar(buf, ">\n");
+ break;
+ default:
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "Internal: ELEMENT struct corrupted invalid type\n",
+ NULL);
+ }
+}
+
+/**
+ * xmlDumpElementDeclScan:
+ * @elem: An element table
+ * @buf: the XML buffer output
+ *
+ * This routine is used by the hash scan function. It just reverses
+ * the arguments.
+ */
+static void
+xmlDumpElementDeclScan(xmlElementPtr elem, xmlBufferPtr buf) {
+ xmlDumpElementDecl(buf, elem);
+}
+
+/**
+ * xmlDumpElementTable:
+ * @buf: the XML buffer output
+ * @table: An element table
+ *
+ * This will dump the content of the element table as an XML DTD definition
+ */
+void
+xmlDumpElementTable(xmlBufferPtr buf, xmlElementTablePtr table) {
+ xmlHashScan(table, (xmlHashScanner) xmlDumpElementDeclScan, buf);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlCreateEnumeration:
+ * @name: the enumeration name or NULL
+ *
+ * create and initialize an enumeration attribute node.
+ *
+ * Returns the xmlEnumerationPtr just created or NULL in case
+ * of error.
+ */
+xmlEnumerationPtr
+xmlCreateEnumeration(const xmlChar *name) {
+ xmlEnumerationPtr ret;
+
+ ret = (xmlEnumerationPtr) xmlMalloc(sizeof(xmlEnumeration));
+ if (ret == NULL) {
+ xmlVErrMemory(NULL, "malloc failed");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlEnumeration));
+
+ if (name != NULL)
+ ret->name = xmlStrdup(name);
+ return(ret);
+}
+
+/**
+ * xmlFreeEnumeration:
+ * @cur: the tree to free.
+ *
+ * free an enumeration attribute node (recursive).
+ */
+void
+xmlFreeEnumeration(xmlEnumerationPtr cur) {
+ if (cur == NULL) return;
+
+ if (cur->next != NULL) xmlFreeEnumeration(cur->next);
+
+ if (cur->name != NULL) xmlFree((xmlChar *) cur->name);
+ xmlFree(cur);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlCopyEnumeration:
+ * @cur: the tree to copy.
+ *
+ * Copy an enumeration attribute node (recursive).
+ *
+ * Returns the xmlEnumerationPtr just created or NULL in case
+ * of error.
+ */
+xmlEnumerationPtr
+xmlCopyEnumeration(xmlEnumerationPtr cur) {
+ xmlEnumerationPtr ret;
+
+ if (cur == NULL) return(NULL);
+ ret = xmlCreateEnumeration((xmlChar *) cur->name);
+
+ if (cur->next != NULL) ret->next = xmlCopyEnumeration(cur->next);
+ else ret->next = NULL;
+
+ return(ret);
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlDumpEnumeration:
+ * @buf: the XML buffer output
+ * @enum: An enumeration
+ *
+ * This will dump the content of the enumeration
+ */
+static void
+xmlDumpEnumeration(xmlBufferPtr buf, xmlEnumerationPtr cur) {
+ if (cur == NULL) return;
+
+ xmlBufferWriteCHAR(buf, cur->name);
+ if (cur->next == NULL)
+ xmlBufferWriteChar(buf, ")");
+ else {
+ xmlBufferWriteChar(buf, " | ");
+ xmlDumpEnumeration(buf, cur->next);
+ }
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlCreateAttributeTable:
+ *
+ * create and initialize an empty attribute hash table.
+ *
+ * Returns the xmlAttributeTablePtr just created or NULL in case
+ * of error.
+ */
+static xmlAttributeTablePtr
+xmlCreateAttributeTable(void) {
+ return(xmlHashCreate(0));
+}
+
+#ifdef LIBXML_VALID_ENABLED
+/**
+ * xmlScanAttributeDeclCallback:
+ * @attr: the attribute decl
+ * @list: the list to update
+ *
+ * Callback called by xmlScanAttributeDecl when a new attribute
+ * has to be entered in the list.
+ */
+static void
+xmlScanAttributeDeclCallback(xmlAttributePtr attr, xmlAttributePtr *list,
+ const xmlChar* name ATTRIBUTE_UNUSED) {
+ attr->nexth = *list;
+ *list = attr;
+}
+
+/**
+ * xmlScanAttributeDecl:
+ * @dtd: pointer to the DTD
+ * @elem: the element name
+ *
+ * When inserting a new element scan the DtD for existing attributes
+ * for that element and initialize the Attribute chain
+ *
+ * Returns the pointer to the first attribute decl in the chain,
+ * possibly NULL.
+ */
+xmlAttributePtr
+xmlScanAttributeDecl(xmlDtdPtr dtd, const xmlChar *elem) {
+ xmlAttributePtr ret = NULL;
+ xmlAttributeTablePtr table;
+
+ if (dtd == NULL) {
+ return(NULL);
+ }
+ if (elem == NULL) {
+ return(NULL);
+ }
+ table = (xmlAttributeTablePtr) dtd->attributes;
+ if (table == NULL)
+ return(NULL);
+
+ /* WRONG !!! */
+ xmlHashScan3(table, NULL, NULL, elem,
+ (xmlHashScanner) xmlScanAttributeDeclCallback, &ret);
+ return(ret);
+}
+
+/**
+ * xmlScanIDAttributeDecl:
+ * @ctxt: the validation context
+ * @elem: the element name
+ *
+ * Verify that the element don't have too many ID attributes
+ * declared.
+ *
+ * Returns the number of ID attributes found.
+ */
+static int
+xmlScanIDAttributeDecl(xmlValidCtxtPtr ctxt, xmlElementPtr elem) {
+ xmlAttributePtr cur;
+ int ret = 0;
+
+ if (elem == NULL) return(0);
+ cur = elem->attributes;
+ while (cur != NULL) {
+ if (cur->atype == XML_ATTRIBUTE_ID) {
+ ret ++;
+ if (ret > 1)
+ xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_MULTIPLE_ID,
+ "Element %s has too many ID attributes defined : %s\n",
+ elem->name, cur->name, NULL);
+ }
+ cur = cur->nexth;
+ }
+ return(ret);
+}
+#endif /* LIBXML_VALID_ENABLED */
+
+/**
+ * xmlFreeAttribute:
+ * @elem: An attribute
+ *
+ * Deallocate the memory used by an attribute definition
+ */
+static void
+xmlFreeAttribute(xmlAttributePtr attr) {
+ if (attr == NULL) return;
+ xmlUnlinkNode((xmlNodePtr) attr);
+ if (attr->tree != NULL)
+ xmlFreeEnumeration(attr->tree);
+ if (attr->elem != NULL)
+ xmlFree((xmlChar *) attr->elem);
+ if (attr->name != NULL)
+ xmlFree((xmlChar *) attr->name);
+ if (attr->defaultValue != NULL)
+ xmlFree((xmlChar *) attr->defaultValue);
+ if (attr->prefix != NULL)
+ xmlFree((xmlChar *) attr->prefix);
+ xmlFree(attr);
+}
+
+
+/**
+ * xmlAddAttributeDecl:
+ * @ctxt: the validation context
+ * @dtd: pointer to the DTD
+ * @elem: the element name
+ * @name: the attribute name
+ * @ns: the attribute namespace prefix
+ * @type: the attribute type
+ * @def: the attribute default type
+ * @defaultValue: the attribute default value
+ * @tree: if it's an enumeration, the associated list
+ *
+ * Register a new attribute declaration
+ * Note that @tree becomes the ownership of the DTD
+ *
+ * Returns NULL if not new, otherwise the attribute decl
+ */
+xmlAttributePtr
+xmlAddAttributeDecl(xmlValidCtxtPtr ctxt,
+ xmlDtdPtr dtd, const xmlChar *elem,
+ const xmlChar *name, const xmlChar *ns,
+ xmlAttributeType type, xmlAttributeDefault def,
+ const xmlChar *defaultValue, xmlEnumerationPtr tree) {
+ xmlAttributePtr ret;
+ xmlAttributeTablePtr table;
+ xmlElementPtr elemDef;
+
+ if (dtd == NULL) {
+ xmlFreeEnumeration(tree);
+ return(NULL);
+ }
+ if (name == NULL) {
+ xmlFreeEnumeration(tree);
+ return(NULL);
+ }
+ if (elem == NULL) {
+ xmlFreeEnumeration(tree);
+ return(NULL);
+ }
+
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * Check the type and possibly the default value.
+ */
+ switch (type) {
+ case XML_ATTRIBUTE_CDATA:
+ break;
+ case XML_ATTRIBUTE_ID:
+ break;
+ case XML_ATTRIBUTE_IDREF:
+ break;
+ case XML_ATTRIBUTE_IDREFS:
+ break;
+ case XML_ATTRIBUTE_ENTITY:
+ break;
+ case XML_ATTRIBUTE_ENTITIES:
+ break;
+ case XML_ATTRIBUTE_NMTOKEN:
+ break;
+ case XML_ATTRIBUTE_NMTOKENS:
+ break;
+ case XML_ATTRIBUTE_ENUMERATION:
+ break;
+ case XML_ATTRIBUTE_NOTATION:
+ break;
+ default:
+ xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
+ "Internal: ATTRIBUTE struct corrupted invalid type\n",
+ NULL);
+ xmlFreeEnumeration(tree);
+ return(NULL);
+ }
+ if ((defaultValue != NULL) &&
+ (!xmlValidateAttributeValue(type, defaultValue))) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_DEFAULT,
+ "Attribute %s of %s: invalid default value\n",
+ elem, name, defaultValue);
+ defaultValue = NULL;
+ ctxt->valid = 0;
+ }
+#endif /* LIBXML_VALID_ENABLED */
+
+ /*
+ * Check first that an attribute defined in the external subset wasn't
+ * already defined in the internal subset
+ */
+ if ((dtd->doc != NULL) && (dtd->doc->extSubset == dtd) &&
+ (dtd->doc->intSubset != NULL) &&
+ (dtd->doc->intSubset->attributes != NULL)) {
+ ret = xmlHashLookup3(dtd->doc->intSubset->attributes, name, ns, elem);
+ if (ret != NULL)
+ return(NULL);
+ }
+
+ /*
+ * Create the Attribute table if needed.
+ */
+ table = (xmlAttributeTablePtr) dtd->attributes;
+ if (table == NULL) {
+ table = xmlCreateAttributeTable();
+ dtd->attributes = (void *) table;
+ }
+ if (table == NULL) {
+ xmlVErrMemory(ctxt,
+ "xmlAddAttributeDecl: Table creation failed!\n");
+ return(NULL);
+ }
+
+
+ ret = (xmlAttributePtr) xmlMalloc(sizeof(xmlAttribute));
+ if (ret == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlAttribute));
+ ret->type = XML_ATTRIBUTE_DECL;
+
+ /*
+ * fill the structure.
+ */
+ ret->atype = type;
+ ret->name = xmlStrdup(name);
+ ret->prefix = xmlStrdup(ns);
+ ret->elem = xmlStrdup(elem);
+ ret->def = def;
+ ret->tree = tree;
+ if (defaultValue != NULL)
+ ret->defaultValue = xmlStrdup(defaultValue);
+
+ /*
+ * Validity Check:
+ * Search the DTD for previous declarations of the ATTLIST
+ */
+ if (xmlHashAddEntry3(table, name, ns, elem, ret) < 0) {
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * The attribute is already defined in this DTD.
+ */
+ xmlErrValidWarning(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_REDEFINED,
+ "Attribute %s of element %s: already defined\n",
+ name, elem, NULL);
+#endif /* LIBXML_VALID_ENABLED */
+ xmlFreeAttribute(ret);
+ return(NULL);
+ }
+
+ /*
+ * Validity Check:
+ * Multiple ID per element
+ */
+ elemDef = xmlGetDtdElementDesc2(dtd, elem, 1);
+ if (elemDef != NULL) {
+
+#ifdef LIBXML_VALID_ENABLED
+ if ((type == XML_ATTRIBUTE_ID) &&
+ (xmlScanIDAttributeDecl(NULL, elemDef) != 0)) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_MULTIPLE_ID,
+ "Element %s has too may ID attributes defined : %s\n",
+ elem, name, NULL);
+ ctxt->valid = 0;
+ }
+#endif /* LIBXML_VALID_ENABLED */
+
+ /*
+ * Insert namespace default def first they need to be
+ * processed first.
+ */
+ if ((xmlStrEqual(ret->name, BAD_CAST "xmlns")) ||
+ ((ret->prefix != NULL &&
+ (xmlStrEqual(ret->prefix, BAD_CAST "xmlns"))))) {
+ ret->nexth = elemDef->attributes;
+ elemDef->attributes = ret;
+ } else {
+ xmlAttributePtr tmp = elemDef->attributes;
+
+ while ((tmp != NULL) &&
+ ((xmlStrEqual(tmp->name, BAD_CAST "xmlns")) ||
+ ((ret->prefix != NULL &&
+ (xmlStrEqual(ret->prefix, BAD_CAST "xmlns")))))) {
+ if (tmp->nexth == NULL)
+ break;
+ tmp = tmp->nexth;
+ }
+ if (tmp != NULL) {
+ ret->nexth = tmp->nexth;
+ tmp->nexth = ret;
+ } else {
+ ret->nexth = elemDef->attributes;
+ elemDef->attributes = ret;
+ }
+ }
+ }
+
+ /*
+ * Link it to the DTD
+ */
+ ret->parent = dtd;
+ ret->doc = dtd->doc;
+ if (dtd->last == NULL) {
+ dtd->children = dtd->last = (xmlNodePtr) ret;
+ } else {
+ dtd->last->next = (xmlNodePtr) ret;
+ ret->prev = dtd->last;
+ dtd->last = (xmlNodePtr) ret;
+ }
+ return(ret);
+}
+
+/**
+ * xmlFreeAttributeTable:
+ * @table: An attribute table
+ *
+ * Deallocate the memory used by an entities hash table.
+ */
+void
+xmlFreeAttributeTable(xmlAttributeTablePtr table) {
+ xmlHashFree(table, (xmlHashDeallocator) xmlFreeAttribute);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlCopyAttribute:
+ * @attr: An attribute
+ *
+ * Build a copy of an attribute.
+ *
+ * Returns the new xmlAttributePtr or NULL in case of error.
+ */
+static xmlAttributePtr
+xmlCopyAttribute(xmlAttributePtr attr) {
+ xmlAttributePtr cur;
+
+ cur = (xmlAttributePtr) xmlMalloc(sizeof(xmlAttribute));
+ if (cur == NULL) {
+ xmlVErrMemory(NULL, "malloc failed");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlAttribute));
+ cur->type = XML_ATTRIBUTE_DECL;
+ cur->atype = attr->atype;
+ cur->def = attr->def;
+ cur->tree = xmlCopyEnumeration(attr->tree);
+ if (attr->elem != NULL)
+ cur->elem = xmlStrdup(attr->elem);
+ if (attr->name != NULL)
+ cur->name = xmlStrdup(attr->name);
+ if (attr->prefix != NULL)
+ cur->prefix = xmlStrdup(attr->prefix);
+ if (attr->defaultValue != NULL)
+ cur->defaultValue = xmlStrdup(attr->defaultValue);
+ return(cur);
+}
+
+/**
+ * xmlCopyAttributeTable:
+ * @table: An attribute table
+ *
+ * Build a copy of an attribute table.
+ *
+ * Returns the new xmlAttributeTablePtr or NULL in case of error.
+ */
+xmlAttributeTablePtr
+xmlCopyAttributeTable(xmlAttributeTablePtr table) {
+ return((xmlAttributeTablePtr) xmlHashCopy(table,
+ (xmlHashCopier) xmlCopyAttribute));
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlDumpAttributeDecl:
+ * @buf: the XML buffer output
+ * @attr: An attribute declaration
+ *
+ * This will dump the content of the attribute declaration as an XML
+ * DTD definition
+ */
+void
+xmlDumpAttributeDecl(xmlBufferPtr buf, xmlAttributePtr attr) {
+ xmlBufferWriteChar(buf, "<!ATTLIST ");
+ xmlBufferWriteCHAR(buf, attr->elem);
+ xmlBufferWriteChar(buf, " ");
+ if (attr->prefix != NULL) {
+ xmlBufferWriteCHAR(buf, attr->prefix);
+ xmlBufferWriteChar(buf, ":");
+ }
+ xmlBufferWriteCHAR(buf, attr->name);
+ switch (attr->atype) {
+ case XML_ATTRIBUTE_CDATA:
+ xmlBufferWriteChar(buf, " CDATA");
+ break;
+ case XML_ATTRIBUTE_ID:
+ xmlBufferWriteChar(buf, " ID");
+ break;
+ case XML_ATTRIBUTE_IDREF:
+ xmlBufferWriteChar(buf, " IDREF");
+ break;
+ case XML_ATTRIBUTE_IDREFS:
+ xmlBufferWriteChar(buf, " IDREFS");
+ break;
+ case XML_ATTRIBUTE_ENTITY:
+ xmlBufferWriteChar(buf, " ENTITY");
+ break;
+ case XML_ATTRIBUTE_ENTITIES:
+ xmlBufferWriteChar(buf, " ENTITIES");
+ break;
+ case XML_ATTRIBUTE_NMTOKEN:
+ xmlBufferWriteChar(buf, " NMTOKEN");
+ break;
+ case XML_ATTRIBUTE_NMTOKENS:
+ xmlBufferWriteChar(buf, " NMTOKENS");
+ break;
+ case XML_ATTRIBUTE_ENUMERATION:
+ xmlBufferWriteChar(buf, " (");
+ xmlDumpEnumeration(buf, attr->tree);
+ break;
+ case XML_ATTRIBUTE_NOTATION:
+ xmlBufferWriteChar(buf, " NOTATION (");
+ xmlDumpEnumeration(buf, attr->tree);
+ break;
+ default:
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "Internal: ATTRIBUTE struct corrupted invalid type\n",
+ NULL);
+ }
+ switch (attr->def) {
+ case XML_ATTRIBUTE_NONE:
+ break;
+ case XML_ATTRIBUTE_REQUIRED:
+ xmlBufferWriteChar(buf, " #REQUIRED");
+ break;
+ case XML_ATTRIBUTE_IMPLIED:
+ xmlBufferWriteChar(buf, " #IMPLIED");
+ break;
+ case XML_ATTRIBUTE_FIXED:
+ xmlBufferWriteChar(buf, " #FIXED");
+ break;
+ default:
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "Internal: ATTRIBUTE struct corrupted invalid def\n",
+ NULL);
+ }
+ if (attr->defaultValue != NULL) {
+ xmlBufferWriteChar(buf, " ");
+ xmlBufferWriteQuotedString(buf, attr->defaultValue);
+ }
+ xmlBufferWriteChar(buf, ">\n");
+}
+
+/**
+ * xmlDumpAttributeDeclScan:
+ * @attr: An attribute declaration
+ * @buf: the XML buffer output
+ *
+ * This is used with the hash scan function - just reverses arguments
+ */
+static void
+xmlDumpAttributeDeclScan(xmlAttributePtr attr, xmlBufferPtr buf) {
+ xmlDumpAttributeDecl(buf, attr);
+}
+
+/**
+ * xmlDumpAttributeTable:
+ * @buf: the XML buffer output
+ * @table: An attribute table
+ *
+ * This will dump the content of the attribute table as an XML DTD definition
+ */
+void
+xmlDumpAttributeTable(xmlBufferPtr buf, xmlAttributeTablePtr table) {
+ xmlHashScan(table, (xmlHashScanner) xmlDumpAttributeDeclScan, buf);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ * *
+ * NOTATIONs *
+ * *
+ ************************************************************************/
+/**
+ * xmlCreateNotationTable:
+ *
+ * create and initialize an empty notation hash table.
+ *
+ * Returns the xmlNotationTablePtr just created or NULL in case
+ * of error.
+ */
+static xmlNotationTablePtr
+xmlCreateNotationTable(void) {
+ return(xmlHashCreate(0));
+}
+
+/**
+ * xmlFreeNotation:
+ * @not: A notation
+ *
+ * Deallocate the memory used by an notation definition
+ */
+static void
+xmlFreeNotation(xmlNotationPtr nota) {
+ if (nota == NULL) return;
+ if (nota->name != NULL)
+ xmlFree((xmlChar *) nota->name);
+ if (nota->PublicID != NULL)
+ xmlFree((xmlChar *) nota->PublicID);
+ if (nota->SystemID != NULL)
+ xmlFree((xmlChar *) nota->SystemID);
+ xmlFree(nota);
+}
+
+
+/**
+ * xmlAddNotationDecl:
+ * @dtd: pointer to the DTD
+ * @ctxt: the validation context
+ * @name: the entity name
+ * @PublicID: the public identifier or NULL
+ * @SystemID: the system identifier or NULL
+ *
+ * Register a new notation declaration
+ *
+ * Returns NULL if not, otherwise the entity
+ */
+xmlNotationPtr
+xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
+ const xmlChar *name,
+ const xmlChar *PublicID, const xmlChar *SystemID) {
+ xmlNotationPtr ret;
+ xmlNotationTablePtr table;
+
+ if (dtd == NULL) {
+ return(NULL);
+ }
+ if (name == NULL) {
+ return(NULL);
+ }
+ if ((PublicID == NULL) && (SystemID == NULL)) {
+ return(NULL);
+ }
+
+ /*
+ * Create the Notation table if needed.
+ */
+ table = (xmlNotationTablePtr) dtd->notations;
+ if (table == NULL)
+ dtd->notations = table = xmlCreateNotationTable();
+ if (table == NULL) {
+ xmlVErrMemory(ctxt,
+ "xmlAddNotationDecl: Table creation failed!\n");
+ return(NULL);
+ }
+
+ ret = (xmlNotationPtr) xmlMalloc(sizeof(xmlNotation));
+ if (ret == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlNotation));
+
+ /*
+ * fill the structure.
+ */
+ ret->name = xmlStrdup(name);
+ if (SystemID != NULL)
+ ret->SystemID = xmlStrdup(SystemID);
+ if (PublicID != NULL)
+ ret->PublicID = xmlStrdup(PublicID);
+
+ /*
+ * Validity Check:
+ * Check the DTD for previous declarations of the ATTLIST
+ */
+ if (xmlHashAddEntry(table, name, ret)) {
+#ifdef LIBXML_VALID_ENABLED
+ xmlErrValid(NULL, XML_DTD_NOTATION_REDEFINED,
+ "xmlAddNotationDecl: %s already defined\n",
+ (const char *) name);
+#endif /* LIBXML_VALID_ENABLED */
+ xmlFreeNotation(ret);
+ return(NULL);
+ }
+ return(ret);
+}
+
+/**
+ * xmlFreeNotationTable:
+ * @table: An notation table
+ *
+ * Deallocate the memory used by an entities hash table.
+ */
+void
+xmlFreeNotationTable(xmlNotationTablePtr table) {
+ xmlHashFree(table, (xmlHashDeallocator) xmlFreeNotation);
+}
+
+#ifdef LIBXML_TREE_ENABLED
+/**
+ * xmlCopyNotation:
+ * @nota: A notation
+ *
+ * Build a copy of a notation.
+ *
+ * Returns the new xmlNotationPtr or NULL in case of error.
+ */
+static xmlNotationPtr
+xmlCopyNotation(xmlNotationPtr nota) {
+ xmlNotationPtr cur;
+
+ cur = (xmlNotationPtr) xmlMalloc(sizeof(xmlNotation));
+ if (cur == NULL) {
+ xmlVErrMemory(NULL, "malloc failed");
+ return(NULL);
+ }
+ if (nota->name != NULL)
+ cur->name = xmlStrdup(nota->name);
+ else
+ cur->name = NULL;
+ if (nota->PublicID != NULL)
+ cur->PublicID = xmlStrdup(nota->PublicID);
+ else
+ cur->PublicID = NULL;
+ if (nota->SystemID != NULL)
+ cur->SystemID = xmlStrdup(nota->SystemID);
+ else
+ cur->SystemID = NULL;
+ return(cur);
+}
+
+/**
+ * xmlCopyNotationTable:
+ * @table: A notation table
+ *
+ * Build a copy of a notation table.
+ *
+ * Returns the new xmlNotationTablePtr or NULL in case of error.
+ */
+xmlNotationTablePtr
+xmlCopyNotationTable(xmlNotationTablePtr table) {
+ return((xmlNotationTablePtr) xmlHashCopy(table,
+ (xmlHashCopier) xmlCopyNotation));
+}
+#endif /* LIBXML_TREE_ENABLED */
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlDumpNotationDecl:
+ * @buf: the XML buffer output
+ * @nota: A notation declaration
+ *
+ * This will dump the content the notation declaration as an XML DTD definition
+ */
+void
+xmlDumpNotationDecl(xmlBufferPtr buf, xmlNotationPtr nota) {
+ xmlBufferWriteChar(buf, "<!NOTATION ");
+ xmlBufferWriteCHAR(buf, nota->name);
+ if (nota->PublicID != NULL) {
+ xmlBufferWriteChar(buf, " PUBLIC ");
+ xmlBufferWriteQuotedString(buf, nota->PublicID);
+ if (nota->SystemID != NULL) {
+ xmlBufferWriteChar(buf, " ");
+ xmlBufferWriteCHAR(buf, nota->SystemID);
+ }
+ } else {
+ xmlBufferWriteChar(buf, " SYSTEM ");
+ xmlBufferWriteCHAR(buf, nota->SystemID);
+ }
+ xmlBufferWriteChar(buf, " >\n");
+}
+
+/**
+ * xmlDumpNotationDeclScan:
+ * @nota: A notation declaration
+ * @buf: the XML buffer output
+ *
+ * This is called with the hash scan function, and just reverses args
+ */
+static void
+xmlDumpNotationDeclScan(xmlNotationPtr nota, xmlBufferPtr buf) {
+ xmlDumpNotationDecl(buf, nota);
+}
+
+/**
+ * xmlDumpNotationTable:
+ * @buf: the XML buffer output
+ * @table: A notation table
+ *
+ * This will dump the content of the notation table as an XML DTD definition
+ */
+void
+xmlDumpNotationTable(xmlBufferPtr buf, xmlNotationTablePtr table) {
+ xmlHashScan(table, (xmlHashScanner) xmlDumpNotationDeclScan, buf);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ * *
+ * IDs *
+ * *
+ ************************************************************************/
+/**
+ * DICT_FREE:
+ * @str: a string
+ *
+ * Free a string if it is not owned by the "dict" dictionnary in the
+ * current scope
+ */
+#define DICT_FREE(str) \
+ if ((str) && ((!dict) || \
+ (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
+ xmlFree((char *)(str));
+
+/**
+ * xmlCreateIDTable:
+ *
+ * create and initialize an empty id hash table.
+ *
+ * Returns the xmlIDTablePtr just created or NULL in case
+ * of error.
+ */
+static xmlIDTablePtr
+xmlCreateIDTable(void) {
+ return(xmlHashCreate(0));
+}
+
+/**
+ * xmlFreeID:
+ * @not: A id
+ *
+ * Deallocate the memory used by an id definition
+ */
+static void
+xmlFreeID(xmlIDPtr id) {
+ xmlDictPtr dict = NULL;
+
+ if (id == NULL) return;
+
+ if (id->doc != NULL)
+ dict = id->doc->dict;
+
+ if (id->value != NULL)
+ DICT_FREE(id->value)
+ if (id->name != NULL)
+ DICT_FREE(id->name)
+ xmlFree(id);
+}
+
+
+/**
+ * xmlAddID:
+ * @ctxt: the validation context
+ * @doc: pointer to the document
+ * @value: the value name
+ * @attr: the attribute holding the ID
+ *
+ * Register a new id declaration
+ *
+ * Returns NULL if not, otherwise the new xmlIDPtr
+ */
+xmlIDPtr
+xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
+ xmlAttrPtr attr) {
+ xmlIDPtr ret;
+ xmlIDTablePtr table;
+
+ if (doc == NULL) {
+ return(NULL);
+ }
+ if (value == NULL) {
+ return(NULL);
+ }
+ if (attr == NULL) {
+ return(NULL);
+ }
+
+ /*
+ * Create the ID table if needed.
+ */
+ table = (xmlIDTablePtr) doc->ids;
+ if (table == NULL)
+ doc->ids = table = xmlCreateIDTable();
+ if (table == NULL) {
+ xmlVErrMemory(ctxt,
+ "xmlAddID: Table creation failed!\n");
+ return(NULL);
+ }
+
+ ret = (xmlIDPtr) xmlMalloc(sizeof(xmlID));
+ if (ret == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ return(NULL);
+ }
+
+ /*
+ * fill the structure.
+ */
+ ret->value = xmlStrdup(value);
+ ret->doc = doc;
+ if ((ctxt != NULL) && (ctxt->vstateNr != 0)) {
+ /*
+ * Operating in streaming mode, attr is gonna disapear
+ */
+ if (doc->dict != NULL)
+ ret->name = xmlDictLookup(doc->dict, attr->name, -1);
+ else
+ ret->name = xmlStrdup(attr->name);
+ ret->attr = NULL;
+ } else {
+ ret->attr = attr;
+ ret->name = NULL;
+ }
+ ret->lineno = xmlGetLineNo(attr->parent);
+
+ if (xmlHashAddEntry(table, value, ret) < 0) {
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * The id is already defined in this DTD.
+ */
+ if ((ctxt != NULL) && (ctxt->error != NULL)) {
+ xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
+ "ID %s already defined\n",
+ value, NULL, NULL);
+ }
+#endif /* LIBXML_VALID_ENABLED */
+ xmlFreeID(ret);
+ return(NULL);
+ }
+ if (attr != NULL)
+ attr->atype = XML_ATTRIBUTE_ID;
+ return(ret);
+}
+
+/**
+ * xmlFreeIDTable:
+ * @table: An id table
+ *
+ * Deallocate the memory used by an ID hash table.
+ */
+void
+xmlFreeIDTable(xmlIDTablePtr table) {
+ xmlHashFree(table, (xmlHashDeallocator) xmlFreeID);
+}
+
+/**
+ * xmlIsID:
+ * @doc: the document
+ * @elem: the element carrying the attribute
+ * @attr: the attribute
+ *
+ * Determine whether an attribute is of type ID. In case we have DTD(s)
+ * then this is done if DTD loading has been requested. In the case
+ * of HTML documents parsed with the HTML parser, then ID detection is
+ * done systematically.
+ *
+ * Returns 0 or 1 depending on the lookup result
+ */
+int
+xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
+ 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) {
+ if (((xmlStrEqual(BAD_CAST "id", attr->name)) ||
+ (xmlStrEqual(BAD_CAST "name", attr->name))) &&
+ ((elem != NULL) && (!xmlStrEqual(elem->name, BAD_CAST "input"))))
+ return(1);
+ return(0);
+ } else {
+ xmlAttributePtr attrDecl;
+
+ 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);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, elem->name,
+ attr->name);
+ }
+
+ if ((attrDecl != NULL) && (attrDecl->atype == XML_ATTRIBUTE_ID))
+ return(1);
+ }
+ return(0);
+}
+
+/**
+ * xmlRemoveID:
+ * @doc: the document
+ * @attr: the attribute
+ *
+ * Remove the given attribute from the ID table maintained internally.
+ *
+ * Returns -1 if the lookup failed and 0 otherwise
+ */
+int
+xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr) {
+ xmlIDTablePtr table;
+ xmlIDPtr id;
+ xmlChar *ID;
+
+ if (doc == NULL) return(-1);
+ if (attr == NULL) return(-1);
+ table = (xmlIDTablePtr) doc->ids;
+ if (table == NULL)
+ return(-1);
+
+ if (attr == NULL)
+ return(-1);
+ ID = xmlNodeListGetString(doc, attr->children, 1);
+ if (ID == NULL)
+ return(-1);
+ id = xmlHashLookup(table, ID);
+ if (id == NULL || id->attr != attr) {
+ xmlFree(ID);
+ return(-1);
+ }
+ xmlHashUpdateEntry(table, ID, NULL, (xmlHashDeallocator) xmlFreeID);
+ xmlFree(ID);
+ return(0);
+}
+
+/**
+ * xmlGetID:
+ * @doc: pointer to the document
+ * @ID: the ID value
+ *
+ * Search the attribute declaring the given ID
+ *
+ * Returns NULL if not found, otherwise the xmlAttrPtr defining the ID
+ */
+xmlAttrPtr
+xmlGetID(xmlDocPtr doc, const xmlChar *ID) {
+ xmlIDTablePtr table;
+ xmlIDPtr id;
+
+ if (doc == NULL) {
+ return(NULL);
+ }
+
+ if (ID == NULL) {
+ return(NULL);
+ }
+
+ table = (xmlIDTablePtr) doc->ids;
+ if (table == NULL)
+ return(NULL);
+
+ id = xmlHashLookup(table, ID);
+ if (id == NULL)
+ return(NULL);
+ if (id->attr == NULL) {
+ /*
+ * We are operating on a stream, return a well known reference
+ * since the attribute node doesn't exist anymore
+ */
+ return((xmlAttrPtr) doc);
+ }
+ return(id->attr);
+}
+
+/************************************************************************
+ * *
+ * Refs *
+ * *
+ ************************************************************************/
+typedef struct xmlRemoveMemo_t
+{
+ xmlListPtr l;
+ xmlAttrPtr ap;
+} xmlRemoveMemo;
+
+typedef xmlRemoveMemo *xmlRemoveMemoPtr;
+
+typedef struct xmlValidateMemo_t
+{
+ xmlValidCtxtPtr ctxt;
+ const xmlChar *name;
+} xmlValidateMemo;
+
+typedef xmlValidateMemo *xmlValidateMemoPtr;
+
+/**
+ * xmlCreateRefTable:
+ *
+ * create and initialize an empty ref hash table.
+ *
+ * Returns the xmlRefTablePtr just created or NULL in case
+ * of error.
+ */
+static xmlRefTablePtr
+xmlCreateRefTable(void) {
+ return(xmlHashCreate(0));
+}
+
+/**
+ * xmlFreeRef:
+ * @lk: A list link
+ *
+ * Deallocate the memory used by a ref definition
+ */
+static void
+xmlFreeRef(xmlLinkPtr lk) {
+ xmlRefPtr ref = (xmlRefPtr)xmlLinkGetData(lk);
+ if (ref == NULL) return;
+ if (ref->value != NULL)
+ xmlFree((xmlChar *)ref->value);
+ if (ref->name != NULL)
+ xmlFree((xmlChar *)ref->name);
+ xmlFree(ref);
+}
+
+/**
+ * xmlFreeRefList:
+ * @list_ref: A list of references.
+ *
+ * Deallocate the memory used by a list of references
+ */
+static void
+xmlFreeRefList(xmlListPtr list_ref) {
+ if (list_ref == NULL) return;
+ xmlListDelete(list_ref);
+}
+
+/**
+ * xmlWalkRemoveRef:
+ * @data: Contents of current link
+ * @user: Value supplied by the user
+ *
+ * Returns 0 to abort the walk or 1 to continue
+ */
+static int
+xmlWalkRemoveRef(const void *data, const void *user)
+{
+ xmlAttrPtr attr0 = ((xmlRefPtr)data)->attr;
+ xmlAttrPtr attr1 = ((xmlRemoveMemoPtr)user)->ap;
+ xmlListPtr ref_list = ((xmlRemoveMemoPtr)user)->l;
+
+ if (attr0 == attr1) { /* Matched: remove and terminate walk */
+ xmlListRemoveFirst(ref_list, (void *)data);
+ return 0;
+ }
+ return 1;
+}
+
+/**
+ * xmlDummyCompare
+ * @data0: Value supplied by the user
+ * @data1: Value supplied by the user
+ *
+ * Do nothing, return 0. Used to create unordered lists.
+ */
+static int
+xmlDummyCompare(const void *data0 ATTRIBUTE_UNUSED,
+ const void *data1 ATTRIBUTE_UNUSED)
+{
+ return (0);
+}
+
+/**
+ * xmlAddRef:
+ * @ctxt: the validation context
+ * @doc: pointer to the document
+ * @value: the value name
+ * @attr: the attribute holding the Ref
+ *
+ * Register a new ref declaration
+ *
+ * Returns NULL if not, otherwise the new xmlRefPtr
+ */
+xmlRefPtr
+xmlAddRef(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
+ xmlAttrPtr attr) {
+ xmlRefPtr ret;
+ xmlRefTablePtr table;
+ xmlListPtr ref_list;
+
+ if (doc == NULL) {
+ return(NULL);
+ }
+ if (value == NULL) {
+ return(NULL);
+ }
+ if (attr == NULL) {
+ return(NULL);
+ }
+
+ /*
+ * Create the Ref table if needed.
+ */
+ table = (xmlRefTablePtr) doc->refs;
+ if (table == NULL)
+ doc->refs = table = xmlCreateRefTable();
+ if (table == NULL) {
+ xmlVErrMemory(ctxt,
+ "xmlAddRef: Table creation failed!\n");
+ return(NULL);
+ }
+
+ ret = (xmlRefPtr) xmlMalloc(sizeof(xmlRef));
+ if (ret == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ return(NULL);
+ }
+
+ /*
+ * fill the structure.
+ */
+ ret->value = xmlStrdup(value);
+ if ((ctxt != NULL) && (ctxt->vstateNr != 0)) {
+ /*
+ * Operating in streaming mode, attr is gonna disapear
+ */
+ ret->name = xmlStrdup(attr->name);
+ ret->attr = NULL;
+ } else {
+ ret->name = NULL;
+ ret->attr = attr;
+ }
+ ret->lineno = xmlGetLineNo(attr->parent);
+
+ /* To add a reference :-
+ * References are maintained as a list of references,
+ * Lookup the entry, if no entry create new nodelist
+ * Add the owning node to the NodeList
+ * Return the ref
+ */
+
+ if (NULL == (ref_list = xmlHashLookup(table, value))) {
+ if (NULL == (ref_list = xmlListCreate(xmlFreeRef, xmlDummyCompare))) {
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "xmlAddRef: Reference list creation failed!\n",
+ NULL);
+ return(NULL);
+ }
+ if (xmlHashAddEntry(table, value, ref_list) < 0) {
+ xmlListDelete(ref_list);
+ xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
+ "xmlAddRef: Reference list insertion failed!\n",
+ NULL);
+ return(NULL);
+ }
+ }
+/* xmlListInsert(ref_list, ret); */
+ xmlListAppend(ref_list, ret);
+ return(ret);
+}
+
+/**
+ * xmlFreeRefTable:
+ * @table: An ref table
+ *
+ * Deallocate the memory used by an Ref hash table.
+ */
+void
+xmlFreeRefTable(xmlRefTablePtr table) {
+ xmlHashFree(table, (xmlHashDeallocator) xmlFreeRefList);
+}
+
+/**
+ * xmlIsRef:
+ * @doc: the document
+ * @elem: the element carrying the attribute
+ * @attr: the attribute
+ *
+ * Determine whether an attribute is of type Ref. In case we have DTD(s)
+ * then this is simple, otherwise we use an heuristic: name Ref (upper
+ * or lowercase).
+ *
+ * Returns 0 or 1 depending on the lookup result
+ */
+int
+xmlIsRef(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
+ if ((doc->intSubset == NULL) && (doc->extSubset == NULL)) {
+ return(0);
+ } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
+ /* TODO @@@ */
+ return(0);
+ } else {
+ xmlAttributePtr attrDecl;
+
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset, elem->name, attr->name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset,
+ elem->name, attr->name);
+
+ if ((attrDecl != NULL) &&
+ (attrDecl->atype == XML_ATTRIBUTE_IDREF ||
+ attrDecl->atype == XML_ATTRIBUTE_IDREFS))
+ return(1);
+ }
+ return(0);
+}
+
+/**
+ * xmlRemoveRef:
+ * @doc: the document
+ * @attr: the attribute
+ *
+ * Remove the given attribute from the Ref table maintained internally.
+ *
+ * Returns -1 if the lookup failed and 0 otherwise
+ */
+int
+xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) {
+ xmlListPtr ref_list;
+ xmlRefTablePtr table;
+ xmlChar *ID;
+ xmlRemoveMemo target;
+
+ if (doc == NULL) return(-1);
+ if (attr == NULL) return(-1);
+ table = (xmlRefTablePtr) doc->refs;
+ if (table == NULL)
+ return(-1);
+
+ if (attr == NULL)
+ return(-1);
+ ID = xmlNodeListGetString(doc, attr->children, 1);
+ if (ID == NULL)
+ return(-1);
+ ref_list = xmlHashLookup(table, ID);
+
+ if(ref_list == NULL) {
+ xmlFree(ID);
+ return (-1);
+ }
+ /* At this point, ref_list refers to a list of references which
+ * have the same key as the supplied attr. Our list of references
+ * is ordered by reference address and we don't have that information
+ * here to use when removing. We'll have to walk the list and
+ * check for a matching attribute, when we find one stop the walk
+ * and remove the entry.
+ * The list is ordered by reference, so that means we don't have the
+ * key. Passing the list and the reference to the walker means we
+ * will have enough data to be able to remove the entry.
+ */
+ target.l = ref_list;
+ target.ap = attr;
+
+ /* Remove the supplied attr from our list */
+ xmlListWalk(ref_list, xmlWalkRemoveRef, &target);
+
+ /*If the list is empty then remove the list entry in the hash */
+ if (xmlListEmpty(ref_list))
+ xmlHashUpdateEntry(table, ID, NULL, (xmlHashDeallocator)
+ xmlFreeRefList);
+ xmlFree(ID);
+ return(0);
+}
+
+/**
+ * xmlGetRefs:
+ * @doc: pointer to the document
+ * @ID: the ID value
+ *
+ * Find the set of references for the supplied ID.
+ *
+ * Returns NULL if not found, otherwise node set for the ID.
+ */
+xmlListPtr
+xmlGetRefs(xmlDocPtr doc, const xmlChar *ID) {
+ xmlRefTablePtr table;
+
+ if (doc == NULL) {
+ return(NULL);
+ }
+
+ if (ID == NULL) {
+ return(NULL);
+ }
+
+ table = (xmlRefTablePtr) doc->refs;
+ if (table == NULL)
+ return(NULL);
+
+ return (xmlHashLookup(table, ID));
+}
+
+/************************************************************************
+ * *
+ * Routines for validity checking *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlGetDtdElementDesc:
+ * @dtd: a pointer to the DtD to search
+ * @name: the element name
+ *
+ * Search the DTD for the description of this element
+ *
+ * returns the xmlElementPtr if found or NULL
+ */
+
+xmlElementPtr
+xmlGetDtdElementDesc(xmlDtdPtr dtd, const xmlChar *name) {
+ xmlElementTablePtr table;
+ xmlElementPtr cur;
+ xmlChar *uqname = NULL, *prefix = NULL;
+
+ if ((dtd == NULL) || (name == NULL)) return(NULL);
+ if (dtd->elements == NULL)
+ return(NULL);
+ table = (xmlElementTablePtr) dtd->elements;
+
+ uqname = xmlSplitQName2(name, &prefix);
+ if (uqname != NULL)
+ name = uqname;
+ cur = xmlHashLookup2(table, name, prefix);
+ if (prefix != NULL) xmlFree(prefix);
+ if (uqname != NULL) xmlFree(uqname);
+ return(cur);
+}
+/**
+ * xmlGetDtdElementDesc2:
+ * @dtd: a pointer to the DtD to search
+ * @name: the element name
+ * @create: create an empty description if not found
+ *
+ * Search the DTD for the description of this element
+ *
+ * returns the xmlElementPtr if found or NULL
+ */
+
+static xmlElementPtr
+xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name, int create) {
+ xmlElementTablePtr table;
+ xmlElementPtr cur;
+ xmlChar *uqname = NULL, *prefix = NULL;
+
+ if (dtd == NULL) return(NULL);
+ if (dtd->elements == NULL) {
+ if (!create)
+ return(NULL);
+ /*
+ * Create the Element table if needed.
+ */
+ table = (xmlElementTablePtr) dtd->elements;
+ if (table == NULL) {
+ table = xmlCreateElementTable();
+ dtd->elements = (void *) table;
+ }
+ if (table == NULL) {
+ xmlVErrMemory(NULL, "element table allocation failed");
+ return(NULL);
+ }
+ }
+ table = (xmlElementTablePtr) dtd->elements;
+
+ uqname = xmlSplitQName2(name, &prefix);
+ if (uqname != NULL)
+ name = uqname;
+ cur = xmlHashLookup2(table, name, prefix);
+ if ((cur == NULL) && (create)) {
+ cur = (xmlElementPtr) xmlMalloc(sizeof(xmlElement));
+ if (cur == NULL) {
+ xmlVErrMemory(NULL, "malloc failed");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlElement));
+ cur->type = XML_ELEMENT_DECL;
+
+ /*
+ * fill the structure.
+ */
+ cur->name = xmlStrdup(name);
+ cur->prefix = xmlStrdup(prefix);
+ cur->etype = XML_ELEMENT_TYPE_UNDEFINED;
+
+ xmlHashAddEntry2(table, name, prefix, cur);
+ }
+ if (prefix != NULL) xmlFree(prefix);
+ if (uqname != NULL) xmlFree(uqname);
+ return(cur);
+}
+
+/**
+ * xmlGetDtdQElementDesc:
+ * @dtd: a pointer to the DtD to search
+ * @name: the element name
+ * @prefix: the element namespace prefix
+ *
+ * Search the DTD for the description of this element
+ *
+ * returns the xmlElementPtr if found or NULL
+ */
+
+xmlElementPtr
+xmlGetDtdQElementDesc(xmlDtdPtr dtd, const xmlChar *name,
+ const xmlChar *prefix) {
+ xmlElementTablePtr table;
+
+ if (dtd == NULL) return(NULL);
+ if (dtd->elements == NULL) return(NULL);
+ table = (xmlElementTablePtr) dtd->elements;
+
+ return(xmlHashLookup2(table, name, prefix));
+}
+
+/**
+ * xmlGetDtdAttrDesc:
+ * @dtd: a pointer to the DtD to search
+ * @elem: the element name
+ * @name: the attribute name
+ *
+ * Search the DTD for the description of this attribute on
+ * this element.
+ *
+ * returns the xmlAttributePtr if found or NULL
+ */
+
+xmlAttributePtr
+xmlGetDtdAttrDesc(xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name) {
+ xmlAttributeTablePtr table;
+ xmlAttributePtr cur;
+ xmlChar *uqname = NULL, *prefix = NULL;
+
+ if (dtd == NULL) return(NULL);
+ if (dtd->attributes == NULL) return(NULL);
+
+ table = (xmlAttributeTablePtr) dtd->attributes;
+ if (table == NULL)
+ return(NULL);
+
+ uqname = xmlSplitQName2(name, &prefix);
+
+ if (uqname != NULL) {
+ cur = xmlHashLookup3(table, uqname, prefix, elem);
+ if (prefix != NULL) xmlFree(prefix);
+ if (uqname != NULL) xmlFree(uqname);
+ } else
+ cur = xmlHashLookup3(table, name, NULL, elem);
+ return(cur);
+}
+
+/**
+ * xmlGetDtdQAttrDesc:
+ * @dtd: a pointer to the DtD to search
+ * @elem: the element name
+ * @name: the attribute name
+ * @prefix: the attribute namespace prefix
+ *
+ * Search the DTD for the description of this qualified attribute on
+ * this element.
+ *
+ * returns the xmlAttributePtr if found or NULL
+ */
+
+xmlAttributePtr
+xmlGetDtdQAttrDesc(xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name,
+ const xmlChar *prefix) {
+ xmlAttributeTablePtr table;
+
+ if (dtd == NULL) return(NULL);
+ if (dtd->attributes == NULL) return(NULL);
+ table = (xmlAttributeTablePtr) dtd->attributes;
+
+ return(xmlHashLookup3(table, name, prefix, elem));
+}
+
+/**
+ * xmlGetDtdNotationDesc:
+ * @dtd: a pointer to the DtD to search
+ * @name: the notation name
+ *
+ * Search the DTD for the description of this notation
+ *
+ * returns the xmlNotationPtr if found or NULL
+ */
+
+xmlNotationPtr
+xmlGetDtdNotationDesc(xmlDtdPtr dtd, const xmlChar *name) {
+ xmlNotationTablePtr table;
+
+ if (dtd == NULL) return(NULL);
+ if (dtd->notations == NULL) return(NULL);
+ table = (xmlNotationTablePtr) dtd->notations;
+
+ return(xmlHashLookup(table, name));
+}
+
+#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+/**
+ * xmlValidateNotationUse:
+ * @ctxt: the validation context
+ * @doc: the document
+ * @notationName: the notation name to check
+ *
+ * Validate that the given name match a notation declaration.
+ * - [ VC: Notation Declared ]
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateNotationUse(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ const xmlChar *notationName) {
+ xmlNotationPtr notaDecl;
+ if ((doc == NULL) || (doc->intSubset == NULL)) return(-1);
+
+ notaDecl = xmlGetDtdNotationDesc(doc->intSubset, notationName);
+ if ((notaDecl == NULL) && (doc->extSubset != NULL))
+ notaDecl = xmlGetDtdNotationDesc(doc->extSubset, notationName);
+
+ if ((notaDecl == NULL) && (ctxt != NULL)) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) doc, XML_DTD_UNKNOWN_NOTATION,
+ "NOTATION %s is not declared\n",
+ notationName, NULL, NULL);
+ return(0);
+ }
+ return(1);
+}
+#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
+
+/**
+ * xmlIsMixedElement:
+ * @doc: the document
+ * @name: the element name
+ *
+ * Search in the DtDs whether an element accept Mixed content (or ANY)
+ * basically if it is supposed to accept text childs
+ *
+ * returns 0 if no, 1 if yes, and -1 if no element description is available
+ */
+
+int
+xmlIsMixedElement(xmlDocPtr doc, const xmlChar *name) {
+ xmlElementPtr elemDecl;
+
+ if ((doc == NULL) || (doc->intSubset == NULL)) return(-1);
+
+ elemDecl = xmlGetDtdElementDesc(doc->intSubset, name);
+ if ((elemDecl == NULL) && (doc->extSubset != NULL))
+ elemDecl = xmlGetDtdElementDesc(doc->extSubset, name);
+ if (elemDecl == NULL) return(-1);
+ switch (elemDecl->etype) {
+ case XML_ELEMENT_TYPE_UNDEFINED:
+ return(-1);
+ case XML_ELEMENT_TYPE_ELEMENT:
+ return(0);
+ case XML_ELEMENT_TYPE_EMPTY:
+ /*
+ * return 1 for EMPTY since we want VC error to pop up
+ * on <empty> </empty> for example
+ */
+ case XML_ELEMENT_TYPE_ANY:
+ case XML_ELEMENT_TYPE_MIXED:
+ return(1);
+ }
+ return(1);
+}
+
+#ifdef LIBXML_VALID_ENABLED
+/**
+ * xmlValidateNameValue:
+ * @value: an Name value
+ *
+ * Validate that the given value match Name production
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateNameValue(const xmlChar *value) {
+ const xmlChar *cur;
+ int val, len;
+
+ if (value == NULL) return(0);
+ cur = value;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ if (!IS_LETTER(val) && (val != '_') &&
+ (val != ':')) {
+ return(0);
+ }
+
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
+ (val == '.') || (val == '-') ||
+ (val == '_') || (val == ':') ||
+ (IS_COMBINING(val)) ||
+ (IS_EXTENDER(val))) {
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ }
+
+ if (val != 0) return(0);
+
+ return(1);
+}
+
+/**
+ * xmlValidateNamesValue:
+ * @value: an Names value
+ *
+ * Validate that the given value match Names production
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateNamesValue(const xmlChar *value) {
+ const xmlChar *cur;
+ int val, len;
+
+ if (value == NULL) return(0);
+ cur = value;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+
+ if (!IS_LETTER(val) && (val != '_') &&
+ (val != ':')) {
+ return(0);
+ }
+
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
+ (val == '.') || (val == '-') ||
+ (val == '_') || (val == ':') ||
+ (IS_COMBINING(val)) ||
+ (IS_EXTENDER(val))) {
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ }
+
+ while (IS_BLANK(val)) {
+ while (IS_BLANK(val)) {
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ }
+
+ if (!IS_LETTER(val) && (val != '_') &&
+ (val != ':')) {
+ return(0);
+ }
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+
+ while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
+ (val == '.') || (val == '-') ||
+ (val == '_') || (val == ':') ||
+ (IS_COMBINING(val)) ||
+ (IS_EXTENDER(val))) {
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ }
+ }
+
+ if (val != 0) return(0);
+
+ return(1);
+}
+
+/**
+ * xmlValidateNmtokenValue:
+ * @value: an Nmtoken value
+ *
+ * Validate that the given value match Nmtoken production
+ *
+ * [ VC: Name Token ]
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateNmtokenValue(const xmlChar *value) {
+ const xmlChar *cur;
+ int val, len;
+
+ if (value == NULL) return(0);
+ cur = value;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+
+ if (!IS_LETTER(val) && !IS_DIGIT(val) &&
+ (val != '.') && (val != '-') &&
+ (val != '_') && (val != ':') &&
+ (!IS_COMBINING(val)) &&
+ (!IS_EXTENDER(val)))
+ return(0);
+
+ while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
+ (val == '.') || (val == '-') ||
+ (val == '_') || (val == ':') ||
+ (IS_COMBINING(val)) ||
+ (IS_EXTENDER(val))) {
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ }
+
+ if (val != 0) return(0);
+
+ return(1);
+}
+
+/**
+ * xmlValidateNmtokensValue:
+ * @value: an Nmtokens value
+ *
+ * Validate that the given value match Nmtokens production
+ *
+ * [ VC: Name Token ]
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateNmtokensValue(const xmlChar *value) {
+ const xmlChar *cur;
+ int val, len;
+
+ if (value == NULL) return(0);
+ cur = value;
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+
+ while (IS_BLANK(val)) {
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ }
+
+ if (!IS_LETTER(val) && !IS_DIGIT(val) &&
+ (val != '.') && (val != '-') &&
+ (val != '_') && (val != ':') &&
+ (!IS_COMBINING(val)) &&
+ (!IS_EXTENDER(val)))
+ return(0);
+
+ while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
+ (val == '.') || (val == '-') ||
+ (val == '_') || (val == ':') ||
+ (IS_COMBINING(val)) ||
+ (IS_EXTENDER(val))) {
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ }
+
+ while (IS_BLANK(val)) {
+ while (IS_BLANK(val)) {
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ }
+ if (val == 0) return(1);
+
+ if (!IS_LETTER(val) && !IS_DIGIT(val) &&
+ (val != '.') && (val != '-') &&
+ (val != '_') && (val != ':') &&
+ (!IS_COMBINING(val)) &&
+ (!IS_EXTENDER(val)))
+ return(0);
+
+ while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
+ (val == '.') || (val == '-') ||
+ (val == '_') || (val == ':') ||
+ (IS_COMBINING(val)) ||
+ (IS_EXTENDER(val))) {
+ val = xmlStringCurrentChar(NULL, cur, &len);
+ cur += len;
+ }
+ }
+
+ if (val != 0) return(0);
+
+ return(1);
+}
+
+/**
+ * xmlValidateNotationDecl:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @nota: a notation definition
+ *
+ * Try to validate a single notation definition
+ * basically it does the following checks as described by the
+ * XML-1.0 recommendation:
+ * - it seems that no validity constraint exists on notation declarations
+ * But this function get called anyway ...
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateNotationDecl(xmlValidCtxtPtr ctxt ATTRIBUTE_UNUSED, xmlDocPtr doc ATTRIBUTE_UNUSED,
+ xmlNotationPtr nota ATTRIBUTE_UNUSED) {
+ int ret = 1;
+
+ return(ret);
+}
+
+/**
+ * xmlValidateAttributeValue:
+ * @type: an attribute type
+ * @value: an attribute value
+ *
+ * Validate that the given attribute value match the proper production
+ *
+ * [ VC: ID ]
+ * Values of type ID must match the Name production....
+ *
+ * [ VC: IDREF ]
+ * Values of type IDREF must match the Name production, and values
+ * of type IDREFS must match Names ...
+ *
+ * [ VC: Entity Name ]
+ * Values of type ENTITY must match the Name production, values
+ * of type ENTITIES must match Names ...
+ *
+ * [ VC: Name Token ]
+ * Values of type NMTOKEN must match the Nmtoken production; values
+ * of type NMTOKENS must match Nmtokens.
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateAttributeValue(xmlAttributeType type, const xmlChar *value) {
+ switch (type) {
+ case XML_ATTRIBUTE_ENTITIES:
+ case XML_ATTRIBUTE_IDREFS:
+ return(xmlValidateNamesValue(value));
+ case XML_ATTRIBUTE_ENTITY:
+ case XML_ATTRIBUTE_IDREF:
+ case XML_ATTRIBUTE_ID:
+ case XML_ATTRIBUTE_NOTATION:
+ return(xmlValidateNameValue(value));
+ case XML_ATTRIBUTE_NMTOKENS:
+ case XML_ATTRIBUTE_ENUMERATION:
+ return(xmlValidateNmtokensValue(value));
+ case XML_ATTRIBUTE_NMTOKEN:
+ return(xmlValidateNmtokenValue(value));
+ case XML_ATTRIBUTE_CDATA:
+ break;
+ }
+ return(1);
+}
+
+/**
+ * xmlValidateAttributeValue2:
+ * @ctxt: the validation context
+ * @doc: the document
+ * @name: the attribute name (used for error reporting only)
+ * @type: the attribute type
+ * @value: the attribute value
+ *
+ * Validate that the given attribute value match a given type.
+ * This typically cannot be done before having finished parsing
+ * the subsets.
+ *
+ * [ VC: IDREF ]
+ * Values of type IDREF must match one of the declared IDs
+ * Values of type IDREFS must match a sequence of the declared IDs
+ * each Name must match the value of an ID attribute on some element
+ * in the XML document; i.e. IDREF values must match the value of
+ * some ID attribute
+ *
+ * [ VC: Entity Name ]
+ * Values of type ENTITY must match one declared entity
+ * Values of type ENTITIES must match a sequence of declared entities
+ *
+ * [ VC: Notation Attributes ]
+ * all notation names in the declaration must be declared.
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+static int
+xmlValidateAttributeValue2(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ const xmlChar *name, xmlAttributeType type, const xmlChar *value) {
+ int ret = 1;
+ switch (type) {
+ case XML_ATTRIBUTE_IDREFS:
+ case XML_ATTRIBUTE_IDREF:
+ case XML_ATTRIBUTE_ID:
+ case XML_ATTRIBUTE_NMTOKENS:
+ case XML_ATTRIBUTE_ENUMERATION:
+ case XML_ATTRIBUTE_NMTOKEN:
+ case XML_ATTRIBUTE_CDATA:
+ break;
+ case XML_ATTRIBUTE_ENTITY: {
+ xmlEntityPtr ent;
+
+ ent = xmlGetDocEntity(doc, value);
+ /* yeah it's a bit messy... */
+ if ((ent == NULL) && (doc->standalone == 1)) {
+ doc->standalone = 0;
+ ent = xmlGetDocEntity(doc, value);
+ }
+ if (ent == NULL) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) doc,
+ XML_DTD_UNKNOWN_ENTITY,
+ "ENTITY attribute %s reference an unknown entity \"%s\"\n",
+ name, value, NULL);
+ ret = 0;
+ } else if (ent->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) doc,
+ XML_DTD_ENTITY_TYPE,
+ "ENTITY attribute %s reference an entity \"%s\" of wrong type\n",
+ name, value, NULL);
+ ret = 0;
+ }
+ break;
+ }
+ case XML_ATTRIBUTE_ENTITIES: {
+ xmlChar *dup, *nam = NULL, *cur, save;
+ xmlEntityPtr ent;
+
+ dup = xmlStrdup(value);
+ if (dup == NULL)
+ return(0);
+ cur = dup;
+ while (*cur != 0) {
+ nam = cur;
+ while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++;
+ save = *cur;
+ *cur = 0;
+ ent = xmlGetDocEntity(doc, nam);
+ if (ent == NULL) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) doc,
+ XML_DTD_UNKNOWN_ENTITY,
+ "ENTITIES attribute %s reference an unknown entity \"%s\"\n",
+ name, nam, NULL);
+ ret = 0;
+ } else if (ent->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) doc,
+ XML_DTD_ENTITY_TYPE,
+ "ENTITIES attribute %s reference an entity \"%s\" of wrong type\n",
+ name, nam, NULL);
+ ret = 0;
+ }
+ if (save == 0)
+ break;
+ *cur = save;
+ while (IS_BLANK_CH(*cur)) cur++;
+ }
+ xmlFree(dup);
+ break;
+ }
+ case XML_ATTRIBUTE_NOTATION: {
+ xmlNotationPtr nota;
+
+ nota = xmlGetDtdNotationDesc(doc->intSubset, value);
+ if ((nota == NULL) && (doc->extSubset != NULL))
+ nota = xmlGetDtdNotationDesc(doc->extSubset, value);
+
+ if (nota == NULL) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) doc,
+ XML_DTD_UNKNOWN_NOTATION,
+ "NOTATION attribute %s reference an unknown notation \"%s\"\n",
+ name, value, NULL);
+ ret = 0;
+ }
+ break;
+ }
+ }
+ return(ret);
+}
+
+/**
+ * xmlValidCtxtNormalizeAttributeValue:
+ * @ctxt: the validation context
+ * @doc: the document
+ * @elem: the parent
+ * @name: the attribute name
+ * @value: the attribute value
+ * @ctxt: the validation context or NULL
+ *
+ * Does the validation related extra step of the normalization of attribute
+ * values:
+ *
+ * If the declared value is not CDATA, then the XML processor must further
+ * process the normalized attribute value by discarding any leading and
+ * trailing space (#x20) characters, and by replacing sequences of space
+ * (#x20) characters by single space (#x20) character.
+ *
+ * Also check VC: Standalone Document Declaration in P32, and update
+ * ctxt->valid accordingly
+ *
+ * returns a new normalized string if normalization is needed, NULL otherwise
+ * the caller must free the returned value.
+ */
+
+xmlChar *
+xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ xmlNodePtr elem, const xmlChar *name, const xmlChar *value) {
+ xmlChar *ret, *dst;
+ const xmlChar *src;
+ xmlAttributePtr attrDecl = NULL;
+ int extsubset = 0;
+
+ if (doc == NULL) return(NULL);
+ if (elem == NULL) return(NULL);
+ if (name == NULL) return(NULL);
+ if (value == NULL) return(NULL);
+
+ 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, name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL)) {
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullname, name);
+ if (attrDecl != NULL)
+ extsubset = 1;
+ }
+ if ((fullname != fn) && (fullname != elem->name))
+ xmlFree(fullname);
+ }
+ if ((attrDecl == NULL) && (doc->intSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset, elem->name, name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL)) {
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, elem->name, name);
+ if (attrDecl != NULL)
+ extsubset = 1;
+ }
+
+ if (attrDecl == NULL)
+ return(NULL);
+ if (attrDecl->atype == XML_ATTRIBUTE_CDATA)
+ return(NULL);
+
+ ret = xmlStrdup(value);
+ if (ret == NULL)
+ return(NULL);
+ src = value;
+ dst = ret;
+ while (*src == 0x20) src++;
+ while (*src != 0) {
+ if (*src == 0x20) {
+ while (*src == 0x20) src++;
+ if (*src != 0)
+ *dst++ = 0x20;
+ } else {
+ *dst++ = *src++;
+ }
+ }
+ *dst = 0;
+ if ((doc->standalone) && (extsubset == 1) && (!xmlStrEqual(value, ret))) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_NOT_STANDALONE,
+"standalone: %s on %s value had to be normalized based on external subset declaration\n",
+ name, elem->name, NULL);
+ ctxt->valid = 0;
+ }
+ return(ret);
+}
+
+/**
+ * xmlValidNormalizeAttributeValue:
+ * @doc: the document
+ * @elem: the parent
+ * @name: the attribute name
+ * @value: the attribute value
+ *
+ * Does the validation related extra step of the normalization of attribute
+ * values:
+ *
+ * If the declared value is not CDATA, then the XML processor must further
+ * process the normalized attribute value by discarding any leading and
+ * trailing space (#x20) characters, and by replacing sequences of space
+ * (#x20) characters by single space (#x20) character.
+ *
+ * Returns a new normalized string if normalization is needed, NULL otherwise
+ * the caller must free the returned value.
+ */
+
+xmlChar *
+xmlValidNormalizeAttributeValue(xmlDocPtr doc, xmlNodePtr elem,
+ const xmlChar *name, const xmlChar *value) {
+ xmlChar *ret, *dst;
+ const xmlChar *src;
+ xmlAttributePtr attrDecl = NULL;
+
+ if (doc == NULL) return(NULL);
+ if (elem == NULL) return(NULL);
+ if (name == NULL) return(NULL);
+ if (value == NULL) return(NULL);
+
+ 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, name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullname, name);
+ if ((fullname != fn) && (fullname != elem->name))
+ xmlFree(fullname);
+ }
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset, elem->name, name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, elem->name, name);
+
+ if (attrDecl == NULL)
+ return(NULL);
+ if (attrDecl->atype == XML_ATTRIBUTE_CDATA)
+ return(NULL);
+
+ ret = xmlStrdup(value);
+ if (ret == NULL)
+ return(NULL);
+ src = value;
+ dst = ret;
+ while (*src == 0x20) src++;
+ while (*src != 0) {
+ if (*src == 0x20) {
+ while (*src == 0x20) src++;
+ if (*src != 0)
+ *dst++ = 0x20;
+ } else {
+ *dst++ = *src++;
+ }
+ }
+ *dst = 0;
+ return(ret);
+}
+
+static void
+xmlValidateAttributeIdCallback(xmlAttributePtr attr, int *count,
+ const xmlChar* name ATTRIBUTE_UNUSED) {
+ if (attr->atype == XML_ATTRIBUTE_ID) (*count)++;
+}
+
+/**
+ * xmlValidateAttributeDecl:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @attr: an attribute definition
+ *
+ * Try to validate a single attribute definition
+ * basically it does the following checks as described by the
+ * XML-1.0 recommendation:
+ * - [ VC: Attribute Default Legal ]
+ * - [ VC: Enumeration ]
+ * - [ VC: ID Attribute Default ]
+ *
+ * The ID/IDREF uniqueness and matching are done separately
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ xmlAttributePtr attr) {
+ int ret = 1;
+ int val;
+ CHECK_DTD;
+ if(attr == NULL) return(1);
+
+ /* Attribute Default Legal */
+ /* Enumeration */
+ if (attr->defaultValue != NULL) {
+ val = xmlValidateAttributeValue(attr->atype, attr->defaultValue);
+ if (val == 0) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ATTRIBUTE_DEFAULT,
+ "Syntax of default value for attribute %s of %s is not valid\n",
+ attr->name, attr->elem, NULL);
+ }
+ ret &= val;
+ }
+
+ /* ID Attribute Default */
+ if ((attr->atype == XML_ATTRIBUTE_ID)&&
+ (attr->def != XML_ATTRIBUTE_IMPLIED) &&
+ (attr->def != XML_ATTRIBUTE_REQUIRED)) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ID_FIXED,
+ "ID attribute %s of %s is not valid must be #IMPLIED or #REQUIRED\n",
+ attr->name, attr->elem, NULL);
+ ret = 0;
+ }
+
+ /* One ID per Element Type */
+ if (attr->atype == XML_ATTRIBUTE_ID) {
+ int nbId;
+
+ /* the trick is that we parse DtD as their own internal subset */
+ xmlElementPtr elem = xmlGetDtdElementDesc(doc->intSubset,
+ attr->elem);
+ if (elem != NULL) {
+ nbId = xmlScanIDAttributeDecl(NULL, elem);
+ } else {
+ xmlAttributeTablePtr table;
+
+ /*
+ * The attribute may be declared in the internal subset and the
+ * element in the external subset.
+ */
+ nbId = 0;
+ table = (xmlAttributeTablePtr) doc->intSubset->attributes;
+ xmlHashScan3(table, NULL, NULL, attr->elem, (xmlHashScanner)
+ xmlValidateAttributeIdCallback, &nbId);
+ }
+ if (nbId > 1) {
+
+ xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
+ "Element %s has %d ID attribute defined in the internal subset : %s\n",
+ attr->elem, nbId, attr->name);
+ } else if (doc->extSubset != NULL) {
+ int extId = 0;
+ elem = xmlGetDtdElementDesc(doc->extSubset, attr->elem);
+ if (elem != NULL) {
+ extId = xmlScanIDAttributeDecl(NULL, elem);
+ }
+ if (extId > 1) {
+ xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
+ "Element %s has %d ID attribute defined in the external subset : %s\n",
+ attr->elem, extId, attr->name);
+ } else if (extId + nbId > 1) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
+"Element %s has ID attributes defined in the internal and external subset : %s\n",
+ attr->elem, attr->name, NULL);
+ }
+ }
+ }
+
+ /* Validity Constraint: Enumeration */
+ if ((attr->defaultValue != NULL) && (attr->tree != NULL)) {
+ xmlEnumerationPtr tree = attr->tree;
+ while (tree != NULL) {
+ if (xmlStrEqual(tree->name, attr->defaultValue)) break;
+ tree = tree->next;
+ }
+ if (tree == NULL) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ATTRIBUTE_VALUE,
+"Default value \"%s\" for attribute %s of %s is not among the enumerated set\n",
+ attr->defaultValue, attr->name, attr->elem);
+ ret = 0;
+ }
+ }
+
+ return(ret);
+}
+
+/**
+ * xmlValidateElementDecl:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element definition
+ *
+ * Try to validate a single element definition
+ * basically it does the following checks as described by the
+ * XML-1.0 recommendation:
+ * - [ VC: One ID per Element Type ]
+ * - [ VC: No Duplicate Types ]
+ * - [ VC: Unique Element Type Declaration ]
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ xmlElementPtr elem) {
+ int ret = 1;
+ xmlElementPtr tst;
+
+ CHECK_DTD;
+
+ if (elem == NULL) return(1);
+
+#if 0
+#ifdef LIBXML_REGEXP_ENABLED
+ /* Build the regexp associated to the content model */
+ ret = xmlValidBuildContentModel(ctxt, elem);
+#endif
+#endif
+
+ /* No Duplicate Types */
+ if (elem->etype == XML_ELEMENT_TYPE_MIXED) {
+ xmlElementContentPtr cur, next;
+ const xmlChar *name;
+
+ cur = elem->content;
+ while (cur != NULL) {
+ if (cur->type != XML_ELEMENT_CONTENT_OR) break;
+ if (cur->c1 == NULL) break;
+ if (cur->c1->type == XML_ELEMENT_CONTENT_ELEMENT) {
+ name = cur->c1->name;
+ next = cur->c2;
+ while (next != NULL) {
+ if (next->type == XML_ELEMENT_CONTENT_ELEMENT) {
+ if ((xmlStrEqual(next->name, name)) &&
+ (xmlStrEqual(next->prefix, cur->prefix))) {
+ if (cur->prefix == NULL) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
+ "Definition of %s has duplicate references of %s\n",
+ elem->name, name, NULL);
+ } else {
+ xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
+ "Definition of %s has duplicate references of %s:%s\n",
+ elem->name, cur->prefix, name);
+ }
+ ret = 0;
+ }
+ break;
+ }
+ if (next->c1 == NULL) break;
+ if (next->c1->type != XML_ELEMENT_CONTENT_ELEMENT) break;
+ if ((xmlStrEqual(next->c1->name, name)) &&
+ (xmlStrEqual(next->c1->prefix, cur->prefix))) {
+ if (cur->prefix == NULL) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
+ "Definition of %s has duplicate references to %s\n",
+ elem->name, name, NULL);
+ } else {
+ xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
+ "Definition of %s has duplicate references to %s:%s\n",
+ elem->name, cur->prefix, name);
+ }
+ ret = 0;
+ }
+ next = next->c2;
+ }
+ }
+ cur = cur->c2;
+ }
+ }
+
+ /* VC: Unique Element Type Declaration */
+ tst = xmlGetDtdElementDesc(doc->intSubset, elem->name);
+ if ((tst != NULL ) && (tst != elem) &&
+ ((tst->prefix == elem->prefix) ||
+ (xmlStrEqual(tst->prefix, elem->prefix))) &&
+ (tst->etype != XML_ELEMENT_TYPE_UNDEFINED)) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_ELEM_REDEFINED,
+ "Redefinition of element %s\n",
+ elem->name, NULL, NULL);
+ ret = 0;
+ }
+ tst = xmlGetDtdElementDesc(doc->extSubset, elem->name);
+ if ((tst != NULL ) && (tst != elem) &&
+ ((tst->prefix == elem->prefix) ||
+ (xmlStrEqual(tst->prefix, elem->prefix))) &&
+ (tst->etype != XML_ELEMENT_TYPE_UNDEFINED)) {
+ xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_ELEM_REDEFINED,
+ "Redefinition of element %s\n",
+ elem->name, NULL, NULL);
+ ret = 0;
+ }
+ /* One ID per Element Type
+ * already done when registering the attribute
+ if (xmlScanIDAttributeDecl(ctxt, elem) > 1) {
+ ret = 0;
+ } */
+ return(ret);
+}
+
+/**
+ * xmlValidateOneAttribute:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ * @attr: an attribute instance
+ * @value: the attribute value (without entities processing)
+ *
+ * Try to validate a single attribute for an element
+ * basically it does the following checks as described by the
+ * XML-1.0 recommendation:
+ * - [ VC: Attribute Value Type ]
+ * - [ VC: Fixed Attribute Default ]
+ * - [ VC: Entity Name ]
+ * - [ VC: Name Token ]
+ * - [ VC: ID ]
+ * - [ VC: IDREF ]
+ * - [ VC: Entity Name ]
+ * - [ VC: Notation Attributes ]
+ *
+ * The ID/IDREF uniqueness and matching are done separately
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ xmlNodePtr elem, xmlAttrPtr attr, const xmlChar *value)
+{
+ xmlAttributePtr attrDecl = NULL;
+ int val;
+ int ret = 1;
+
+ CHECK_DTD;
+ if ((elem == NULL) || (elem->name == NULL)) return(0);
+ if ((attr == NULL) || (attr->name == 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);
+ if (attr->ns != NULL) {
+ attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, fullname,
+ attr->name, attr->ns->prefix);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, fullname,
+ attr->name, attr->ns->prefix);
+ } else {
+ 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);
+ }
+ if (attrDecl == NULL) {
+ if (attr->ns != NULL) {
+ attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, elem->name,
+ attr->name, attr->ns->prefix);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, elem->name,
+ attr->name, attr->ns->prefix);
+ } else {
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset,
+ elem->name, attr->name);
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset,
+ elem->name, attr->name);
+ }
+ }
+
+
+ /* Validity Constraint: Attribute Value Type */
+ if (attrDecl == NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ATTRIBUTE,
+ "No declaration for attribute %s of element %s\n",
+ attr->name, elem->name, NULL);
+ return(0);
+ }
+ attr->atype = attrDecl->atype;
+
+ val = xmlValidateAttributeValue(attrDecl->atype, value);
+ if (val == 0) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
+ "Syntax of value for attribute %s of %s is not valid\n",
+ attr->name, elem->name, NULL);
+ ret = 0;
+ }
+
+ /* Validity constraint: Fixed Attribute Default */
+ if (attrDecl->def == XML_ATTRIBUTE_FIXED) {
+ if (!xmlStrEqual(value, attrDecl->defaultValue)) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_DEFAULT,
+ "Value for attribute %s of %s is different from default \"%s\"\n",
+ attr->name, elem->name, attrDecl->defaultValue);
+ ret = 0;
+ }
+ }
+
+ /* Validity Constraint: ID uniqueness */
+ if (attrDecl->atype == XML_ATTRIBUTE_ID) {
+ if (xmlAddID(ctxt, doc, value, attr) == NULL)
+ ret = 0;
+ }
+
+ if ((attrDecl->atype == XML_ATTRIBUTE_IDREF) ||
+ (attrDecl->atype == XML_ATTRIBUTE_IDREFS)) {
+ if (xmlAddRef(ctxt, doc, value, attr) == NULL)
+ ret = 0;
+ }
+
+ /* Validity Constraint: Notation Attributes */
+ if (attrDecl->atype == XML_ATTRIBUTE_NOTATION) {
+ xmlEnumerationPtr tree = attrDecl->tree;
+ xmlNotationPtr nota;
+
+ /* First check that the given NOTATION was declared */
+ nota = xmlGetDtdNotationDesc(doc->intSubset, value);
+ if (nota == NULL)
+ nota = xmlGetDtdNotationDesc(doc->extSubset, value);
+
+ if (nota == NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
+ "Value \"%s\" for attribute %s of %s is not a declared Notation\n",
+ value, attr->name, elem->name);
+ ret = 0;
+ }
+
+ /* Second, verify that it's among the list */
+ while (tree != NULL) {
+ if (xmlStrEqual(tree->name, value)) break;
+ tree = tree->next;
+ }
+ if (tree == NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_NOTATION_VALUE,
+"Value \"%s\" for attribute %s of %s is not among the enumerated notations\n",
+ value, attr->name, elem->name);
+ ret = 0;
+ }
+ }
+
+ /* Validity Constraint: Enumeration */
+ if (attrDecl->atype == XML_ATTRIBUTE_ENUMERATION) {
+ xmlEnumerationPtr tree = attrDecl->tree;
+ while (tree != NULL) {
+ if (xmlStrEqual(tree->name, value)) break;
+ tree = tree->next;
+ }
+ if (tree == NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
+ "Value \"%s\" for attribute %s of %s is not among the enumerated set\n",
+ value, attr->name, elem->name);
+ ret = 0;
+ }
+ }
+
+ /* Fixed Attribute Default */
+ if ((attrDecl->def == XML_ATTRIBUTE_FIXED) &&
+ (!xmlStrEqual(attrDecl->defaultValue, value))) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
+ "Value for attribute %s of %s must be \"%s\"\n",
+ attr->name, elem->name, attrDecl->defaultValue);
+ ret = 0;
+ }
+
+ /* Extra check for the attribute value */
+ ret &= xmlValidateAttributeValue2(ctxt, doc, attr->name,
+ attrDecl->atype, value);
+
+ return(ret);
+}
+
+/**
+ * xmlValidateOneNamespace:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ * @prefix: the namespace prefix
+ * @ns: an namespace declaration instance
+ * @value: the attribute value (without entities processing)
+ *
+ * Try to validate a single namespace declaration for an element
+ * basically it does the following checks as described by the
+ * XML-1.0 recommendation:
+ * - [ VC: Attribute Value Type ]
+ * - [ VC: Fixed Attribute Default ]
+ * - [ VC: Entity Name ]
+ * - [ VC: Name Token ]
+ * - [ VC: ID ]
+ * - [ VC: IDREF ]
+ * - [ VC: Entity Name ]
+ * - [ VC: Notation Attributes ]
+ *
+ * The ID/IDREF uniqueness and matching are done separately
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateOneNamespace(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value) {
+ /* xmlElementPtr elemDecl; */
+ xmlAttributePtr attrDecl = NULL;
+ int val;
+ int ret = 1;
+
+ CHECK_DTD;
+ if ((elem == NULL) || (elem->name == NULL)) return(0);
+ if ((ns == NULL) || (ns->href == NULL)) return(0);
+
+ if (prefix != NULL) {
+ xmlChar fn[50];
+ xmlChar *fullname;
+
+ fullname = xmlBuildQName(elem->name, prefix, fn, 50);
+ if (fullname == NULL) {
+ xmlVErrMemory(ctxt, "Validating namespace");
+ return(0);
+ }
+ if (ns->prefix != NULL) {
+ attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, fullname,
+ ns->prefix, BAD_CAST "xmlns");
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, fullname,
+ ns->prefix, BAD_CAST "xmlns");
+ } else {
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullname,
+ BAD_CAST "xmlns");
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullname,
+ BAD_CAST "xmlns");
+ }
+ if ((fullname != fn) && (fullname != elem->name))
+ xmlFree(fullname);
+ }
+ if (attrDecl == NULL) {
+ if (ns->prefix != NULL) {
+ attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, elem->name,
+ ns->prefix, BAD_CAST "xmlns");
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, elem->name,
+ ns->prefix, BAD_CAST "xmlns");
+ } else {
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset,
+ elem->name, BAD_CAST "xmlns");
+ if ((attrDecl == NULL) && (doc->extSubset != NULL))
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset,
+ elem->name, BAD_CAST "xmlns");
+ }
+ }
+
+
+ /* Validity Constraint: Attribute Value Type */
+ if (attrDecl == NULL) {
+ if (ns->prefix != NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ATTRIBUTE,
+ "No declaration for attribute xmlns:%s of element %s\n",
+ ns->prefix, elem->name, NULL);
+ } else {
+ xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ATTRIBUTE,
+ "No declaration for attribute xmlns of element %s\n",
+ elem->name, NULL, NULL);
+ }
+ return(0);
+ }
+
+ val = xmlValidateAttributeValue(attrDecl->atype, value);
+ if (val == 0) {
+ if (ns->prefix != NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_INVALID_DEFAULT,
+ "Syntax of value for attribute xmlns:%s of %s is not valid\n",
+ ns->prefix, elem->name, NULL);
+ } else {
+ xmlErrValidNode(ctxt, elem, XML_DTD_INVALID_DEFAULT,
+ "Syntax of value for attribute xmlns of %s is not valid\n",
+ elem->name, NULL, NULL);
+ }
+ ret = 0;
+ }
+
+ /* Validity constraint: Fixed Attribute Default */
+ if (attrDecl->def == XML_ATTRIBUTE_FIXED) {
+ if (!xmlStrEqual(value, attrDecl->defaultValue)) {
+ if (ns->prefix != NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_DEFAULT,
+ "Value for attribute xmlns:%s of %s is different from default \"%s\"\n",
+ ns->prefix, elem->name, attrDecl->defaultValue);
+ } else {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_DEFAULT,
+ "Value for attribute xmlns of %s is different from default \"%s\"\n",
+ elem->name, attrDecl->defaultValue, NULL);
+ }
+ ret = 0;
+ }
+ }
+
+ /* Validity Constraint: ID uniqueness */
+ if (attrDecl->atype == XML_ATTRIBUTE_ID) {
+ if (xmlAddID(ctxt, doc, value, (xmlAttrPtr) ns) == NULL)
+ ret = 0;
+ }
+
+ if ((attrDecl->atype == XML_ATTRIBUTE_IDREF) ||
+ (attrDecl->atype == XML_ATTRIBUTE_IDREFS)) {
+ if (xmlAddRef(ctxt, doc, value, (xmlAttrPtr) ns) == NULL)
+ ret = 0;
+ }
+
+ /* Validity Constraint: Notation Attributes */
+ if (attrDecl->atype == XML_ATTRIBUTE_NOTATION) {
+ xmlEnumerationPtr tree = attrDecl->tree;
+ xmlNotationPtr nota;
+
+ /* First check that the given NOTATION was declared */
+ nota = xmlGetDtdNotationDesc(doc->intSubset, value);
+ if (nota == NULL)
+ nota = xmlGetDtdNotationDesc(doc->extSubset, value);
+
+ if (nota == NULL) {
+ if (ns->prefix != NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
+ "Value \"%s\" for attribute xmlns:%s of %s is not a declared Notation\n",
+ value, ns->prefix, elem->name);
+ } else {
+ xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
+ "Value \"%s\" for attribute xmlns of %s is not a declared Notation\n",
+ value, elem->name, NULL);
+ }
+ ret = 0;
+ }
+
+ /* Second, verify that it's among the list */
+ while (tree != NULL) {
+ if (xmlStrEqual(tree->name, value)) break;
+ tree = tree->next;
+ }
+ if (tree == NULL) {
+ if (ns->prefix != NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_NOTATION_VALUE,
+"Value \"%s\" for attribute xmlns:%s of %s is not among the enumerated notations\n",
+ value, ns->prefix, elem->name);
+ } else {
+ xmlErrValidNode(ctxt, elem, XML_DTD_NOTATION_VALUE,
+"Value \"%s\" for attribute xmlns of %s is not among the enumerated notations\n",
+ value, elem->name, NULL);
+ }
+ ret = 0;
+ }
+ }
+
+ /* Validity Constraint: Enumeration */
+ if (attrDecl->atype == XML_ATTRIBUTE_ENUMERATION) {
+ xmlEnumerationPtr tree = attrDecl->tree;
+ while (tree != NULL) {
+ if (xmlStrEqual(tree->name, value)) break;
+ tree = tree->next;
+ }
+ if (tree == NULL) {
+ if (ns->prefix != NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
+"Value \"%s\" for attribute xmlns:%s of %s is not among the enumerated set\n",
+ value, ns->prefix, elem->name);
+ } else {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
+"Value \"%s\" for attribute xmlns of %s is not among the enumerated set\n",
+ value, elem->name, NULL);
+ }
+ ret = 0;
+ }
+ }
+
+ /* Fixed Attribute Default */
+ if ((attrDecl->def == XML_ATTRIBUTE_FIXED) &&
+ (!xmlStrEqual(attrDecl->defaultValue, value))) {
+ if (ns->prefix != NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ELEM_NAMESPACE,
+ "Value for attribute xmlns:%s of %s must be \"%s\"\n",
+ ns->prefix, elem->name, attrDecl->defaultValue);
+ } else {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ELEM_NAMESPACE,
+ "Value for attribute xmlns of %s must be \"%s\"\n",
+ elem->name, attrDecl->defaultValue, NULL);
+ }
+ ret = 0;
+ }
+
+ /* Extra check for the attribute value */
+ if (ns->prefix != NULL) {
+ ret &= xmlValidateAttributeValue2(ctxt, doc, ns->prefix,
+ attrDecl->atype, value);
+ } else {
+ ret &= xmlValidateAttributeValue2(ctxt, doc, BAD_CAST "xmlns",
+ attrDecl->atype, value);
+ }
+
+ return(ret);
+}
+
+#ifndef LIBXML_REGEXP_ENABLED
+/**
+ * xmlValidateSkipIgnorable:
+ * @ctxt: the validation context
+ * @child: the child list
+ *
+ * Skip ignorable elements w.r.t. the validation process
+ *
+ * returns the first element to consider for validation of the content model
+ */
+
+static xmlNodePtr
+xmlValidateSkipIgnorable(xmlNodePtr child) {
+ while (child != NULL) {
+ switch (child->type) {
+ /* These things are ignored (skipped) during validation. */
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ child = child->next;
+ break;
+ case XML_TEXT_NODE:
+ if (xmlIsBlankNode(child))
+ child = child->next;
+ else
+ return(child);
+ break;
+ /* keep current node */
+ default:
+ return(child);
+ }
+ }
+ return(child);
+}
+
+/**
+ * xmlValidateElementType:
+ * @ctxt: the validation context
+ *
+ * Try to validate the content model of an element internal function
+ *
+ * returns 1 if valid or 0 ,-1 in case of error, -2 if an entity
+ * reference is found and -3 if the validation succeeded but
+ * the content model is not determinist.
+ */
+
+static int
+xmlValidateElementType(xmlValidCtxtPtr ctxt) {
+ int ret = -1;
+ int determinist = 1;
+
+ NODE = xmlValidateSkipIgnorable(NODE);
+ if ((NODE == NULL) && (CONT == NULL))
+ return(1);
+ if ((NODE == NULL) &&
+ ((CONT->ocur == XML_ELEMENT_CONTENT_MULT) ||
+ (CONT->ocur == XML_ELEMENT_CONTENT_OPT))) {
+ return(1);
+ }
+ if (CONT == NULL) return(-1);
+ if ((NODE != NULL) && (NODE->type == XML_ENTITY_REF_NODE))
+ return(-2);
+
+ /*
+ * We arrive here when more states need to be examined
+ */
+cont:
+
+ /*
+ * We just recovered from a rollback generated by a possible
+ * epsilon transition, go directly to the analysis phase
+ */
+ if (STATE == ROLLBACK_PARENT) {
+ DEBUG_VALID_MSG("restored parent branch");
+ DEBUG_VALID_STATE(NODE, CONT)
+ ret = 1;
+ goto analyze;
+ }
+
+ DEBUG_VALID_STATE(NODE, CONT)
+ /*
+ * we may have to save a backup state here. This is the equivalent
+ * of handling epsilon transition in NFAs.
+ */
+ if ((CONT != NULL) &&
+ ((CONT->parent == NULL) ||
+ (CONT->parent->type != XML_ELEMENT_CONTENT_OR)) &&
+ ((CONT->ocur == XML_ELEMENT_CONTENT_MULT) ||
+ (CONT->ocur == XML_ELEMENT_CONTENT_OPT) ||
+ ((CONT->ocur == XML_ELEMENT_CONTENT_PLUS) && (OCCURRENCE)))) {
+ DEBUG_VALID_MSG("saving parent branch");
+ if (vstateVPush(ctxt, CONT, NODE, DEPTH, OCCURS, ROLLBACK_PARENT) < 0)
+ return(0);
+ }
+
+
+ /*
+ * Check first if the content matches
+ */
+ switch (CONT->type) {
+ case XML_ELEMENT_CONTENT_PCDATA:
+ if (NODE == NULL) {
+ DEBUG_VALID_MSG("pcdata failed no node");
+ ret = 0;
+ break;
+ }
+ if (NODE->type == XML_TEXT_NODE) {
+ DEBUG_VALID_MSG("pcdata found, skip to next");
+ /*
+ * go to next element in the content model
+ * skipping ignorable elems
+ */
+ do {
+ NODE = NODE->next;
+ NODE = xmlValidateSkipIgnorable(NODE);
+ if ((NODE != NULL) &&
+ (NODE->type == XML_ENTITY_REF_NODE))
+ return(-2);
+ } while ((NODE != NULL) &&
+ ((NODE->type != XML_ELEMENT_NODE) &&
+ (NODE->type != XML_TEXT_NODE) &&
+ (NODE->type != XML_CDATA_SECTION_NODE)));
+ ret = 1;
+ break;
+ } else {
+ DEBUG_VALID_MSG("pcdata failed");
+ ret = 0;
+ break;
+ }
+ break;
+ case XML_ELEMENT_CONTENT_ELEMENT:
+ if (NODE == NULL) {
+ DEBUG_VALID_MSG("element failed no node");
+ ret = 0;
+ break;
+ }
+ ret = ((NODE->type == XML_ELEMENT_NODE) &&
+ (xmlStrEqual(NODE->name, CONT->name)));
+ if (ret == 1) {
+ if ((NODE->ns == NULL) || (NODE->ns->prefix == NULL)) {
+ ret = (CONT->prefix == NULL);
+ } else if (CONT->prefix == NULL) {
+ ret = 0;
+ } else {
+ ret = xmlStrEqual(NODE->ns->prefix, CONT->prefix);
+ }
+ }
+ if (ret == 1) {
+ DEBUG_VALID_MSG("element found, skip to next");
+ /*
+ * go to next element in the content model
+ * skipping ignorable elems
+ */
+ do {
+ NODE = NODE->next;
+ NODE = xmlValidateSkipIgnorable(NODE);
+ if ((NODE != NULL) &&
+ (NODE->type == XML_ENTITY_REF_NODE))
+ return(-2);
+ } while ((NODE != NULL) &&
+ ((NODE->type != XML_ELEMENT_NODE) &&
+ (NODE->type != XML_TEXT_NODE) &&
+ (NODE->type != XML_CDATA_SECTION_NODE)));
+ } else {
+ DEBUG_VALID_MSG("element failed");
+ ret = 0;
+ break;
+ }
+ break;
+ case XML_ELEMENT_CONTENT_OR:
+ /*
+ * Small optimization.
+ */
+ if (CONT->c1->type == XML_ELEMENT_CONTENT_ELEMENT) {
+ if ((NODE == NULL) ||
+ (!xmlStrEqual(NODE->name, CONT->c1->name))) {
+ DEPTH++;
+ CONT = CONT->c2;
+ goto cont;
+ }
+ if ((NODE->ns == NULL) || (NODE->ns->prefix == NULL)) {
+ ret = (CONT->c1->prefix == NULL);
+ } else if (CONT->c1->prefix == NULL) {
+ ret = 0;
+ } else {
+ ret = xmlStrEqual(NODE->ns->prefix, CONT->c1->prefix);
+ }
+ if (ret == 0) {
+ DEPTH++;
+ CONT = CONT->c2;
+ goto cont;
+ }
+ }
+
+ /*
+ * save the second branch 'or' branch
+ */
+ DEBUG_VALID_MSG("saving 'or' branch");
+ if (vstateVPush(ctxt, CONT->c2, NODE, (unsigned char)(DEPTH + 1),
+ OCCURS, ROLLBACK_OR) < 0)
+ return(-1);
+ DEPTH++;
+ CONT = CONT->c1;
+ goto cont;
+ case XML_ELEMENT_CONTENT_SEQ:
+ /*
+ * Small optimization.
+ */
+ if ((CONT->c1->type == XML_ELEMENT_CONTENT_ELEMENT) &&
+ ((CONT->c1->ocur == XML_ELEMENT_CONTENT_OPT) ||
+ (CONT->c1->ocur == XML_ELEMENT_CONTENT_MULT))) {
+ if ((NODE == NULL) ||
+ (!xmlStrEqual(NODE->name, CONT->c1->name))) {
+ DEPTH++;
+ CONT = CONT->c2;
+ goto cont;
+ }
+ if ((NODE->ns == NULL) || (NODE->ns->prefix == NULL)) {
+ ret = (CONT->c1->prefix == NULL);
+ } else if (CONT->c1->prefix == NULL) {
+ ret = 0;
+ } else {
+ ret = xmlStrEqual(NODE->ns->prefix, CONT->c1->prefix);
+ }
+ if (ret == 0) {
+ DEPTH++;
+ CONT = CONT->c2;
+ goto cont;
+ }
+ }
+ DEPTH++;
+ CONT = CONT->c1;
+ goto cont;
+ }
+
+ /*
+ * At this point handle going up in the tree
+ */
+ if (ret == -1) {
+ DEBUG_VALID_MSG("error found returning");
+ return(ret);
+ }
+analyze:
+ while (CONT != NULL) {
+ /*
+ * First do the analysis depending on the occurrence model at
+ * this level.
+ */
+ if (ret == 0) {
+ switch (CONT->ocur) {
+ xmlNodePtr cur;
+
+ case XML_ELEMENT_CONTENT_ONCE:
+ cur = ctxt->vstate->node;
+ DEBUG_VALID_MSG("Once branch failed, rollback");
+ if (vstateVPop(ctxt) < 0 ) {
+ DEBUG_VALID_MSG("exhaustion, failed");
+ return(0);
+ }
+ if (cur != ctxt->vstate->node)
+ determinist = -3;
+ goto cont;
+ case XML_ELEMENT_CONTENT_PLUS:
+ if (OCCURRENCE == 0) {
+ cur = ctxt->vstate->node;
+ DEBUG_VALID_MSG("Plus branch failed, rollback");
+ if (vstateVPop(ctxt) < 0 ) {
+ DEBUG_VALID_MSG("exhaustion, failed");
+ return(0);
+ }
+ if (cur != ctxt->vstate->node)
+ determinist = -3;
+ goto cont;
+ }
+ DEBUG_VALID_MSG("Plus branch found");
+ ret = 1;
+ break;
+ case XML_ELEMENT_CONTENT_MULT:
+#ifdef DEBUG_VALID_ALGO
+ if (OCCURRENCE == 0) {
+ DEBUG_VALID_MSG("Mult branch failed");
+ } else {
+ DEBUG_VALID_MSG("Mult branch found");
+ }
+#endif
+ ret = 1;
+ break;
+ case XML_ELEMENT_CONTENT_OPT:
+ DEBUG_VALID_MSG("Option branch failed");
+ ret = 1;
+ break;
+ }
+ } else {
+ switch (CONT->ocur) {
+ case XML_ELEMENT_CONTENT_OPT:
+ DEBUG_VALID_MSG("Option branch succeeded");
+ ret = 1;
+ break;
+ case XML_ELEMENT_CONTENT_ONCE:
+ DEBUG_VALID_MSG("Once branch succeeded");
+ ret = 1;
+ break;
+ case XML_ELEMENT_CONTENT_PLUS:
+ if (STATE == ROLLBACK_PARENT) {
+ DEBUG_VALID_MSG("Plus branch rollback");
+ ret = 1;
+ break;
+ }
+ if (NODE == NULL) {
+ DEBUG_VALID_MSG("Plus branch exhausted");
+ ret = 1;
+ break;
+ }
+ DEBUG_VALID_MSG("Plus branch succeeded, continuing");
+ SET_OCCURRENCE;
+ goto cont;
+ case XML_ELEMENT_CONTENT_MULT:
+ if (STATE == ROLLBACK_PARENT) {
+ DEBUG_VALID_MSG("Mult branch rollback");
+ ret = 1;
+ break;
+ }
+ if (NODE == NULL) {
+ DEBUG_VALID_MSG("Mult branch exhausted");
+ ret = 1;
+ break;
+ }
+ DEBUG_VALID_MSG("Mult branch succeeded, continuing");
+ /* SET_OCCURRENCE; */
+ goto cont;
+ }
+ }
+ STATE = 0;
+
+ /*
+ * Then act accordingly at the parent level
+ */
+ RESET_OCCURRENCE;
+ if (CONT->parent == NULL)
+ break;
+
+ switch (CONT->parent->type) {
+ case XML_ELEMENT_CONTENT_PCDATA:
+ DEBUG_VALID_MSG("Error: parent pcdata");
+ return(-1);
+ case XML_ELEMENT_CONTENT_ELEMENT:
+ DEBUG_VALID_MSG("Error: parent element");
+ return(-1);
+ case XML_ELEMENT_CONTENT_OR:
+ if (ret == 1) {
+ DEBUG_VALID_MSG("Or succeeded");
+ CONT = CONT->parent;
+ DEPTH--;
+ } else {
+ DEBUG_VALID_MSG("Or failed");
+ CONT = CONT->parent;
+ DEPTH--;
+ }
+ break;
+ case XML_ELEMENT_CONTENT_SEQ:
+ if (ret == 0) {
+ DEBUG_VALID_MSG("Sequence failed");
+ CONT = CONT->parent;
+ DEPTH--;
+ } else if (CONT == CONT->parent->c1) {
+ DEBUG_VALID_MSG("Sequence testing 2nd branch");
+ CONT = CONT->parent->c2;
+ goto cont;
+ } else {
+ DEBUG_VALID_MSG("Sequence succeeded");
+ CONT = CONT->parent;
+ DEPTH--;
+ }
+ }
+ }
+ if (NODE != NULL) {
+ xmlNodePtr cur;
+
+ cur = ctxt->vstate->node;
+ DEBUG_VALID_MSG("Failed, remaining input, rollback");
+ if (vstateVPop(ctxt) < 0 ) {
+ DEBUG_VALID_MSG("exhaustion, failed");
+ return(0);
+ }
+ if (cur != ctxt->vstate->node)
+ determinist = -3;
+ goto cont;
+ }
+ if (ret == 0) {
+ xmlNodePtr cur;
+
+ cur = ctxt->vstate->node;
+ DEBUG_VALID_MSG("Failure, rollback");
+ if (vstateVPop(ctxt) < 0 ) {
+ DEBUG_VALID_MSG("exhaustion, failed");
+ return(0);
+ }
+ if (cur != ctxt->vstate->node)
+ determinist = -3;
+ goto cont;
+ }
+ return(determinist);
+}
+#endif
+
+/**
+ * xmlSnprintfElements:
+ * @buf: an output buffer
+ * @size: the size of the buffer
+ * @content: An element
+ * @glob: 1 if one must print the englobing parenthesis, 0 otherwise
+ *
+ * This will dump the list of elements to the buffer
+ * Intended just for the debug routine
+ */
+static void
+xmlSnprintfElements(char *buf, int size, xmlNodePtr node, int glob) {
+ xmlNodePtr cur;
+ int len;
+
+ if (node == NULL) return;
+ if (glob) strcat(buf, "(");
+ cur = node;
+ while (cur != NULL) {
+ len = strlen(buf);
+ if (size - len < 50) {
+ if ((size - len > 4) && (buf[len - 1] != '.'))
+ strcat(buf, " ...");
+ return;
+ }
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ if (size - len < xmlStrlen(cur->ns->prefix) + 10) {
+ if ((size - len > 4) && (buf[len - 1] != '.'))
+ strcat(buf, " ...");
+ return;
+ }
+ strcat(buf, (char *) cur->ns->prefix);
+ strcat(buf, ":");
+ }
+ if (size - len < xmlStrlen(cur->name) + 10) {
+ if ((size - len > 4) && (buf[len - 1] != '.'))
+ strcat(buf, " ...");
+ return;
+ }
+ strcat(buf, (char *) cur->name);
+ if (cur->next != NULL)
+ strcat(buf, " ");
+ break;
+ case XML_TEXT_NODE:
+ if (xmlIsBlankNode(cur))
+ break;
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ strcat(buf, "CDATA");
+ if (cur->next != NULL)
+ strcat(buf, " ");
+ break;
+ case XML_ATTRIBUTE_NODE:
+ case XML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_NAMESPACE_DECL:
+ strcat(buf, "???");
+ if (cur->next != NULL)
+ strcat(buf, " ");
+ break;
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_DTD_NODE:
+ case XML_COMMENT_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ break;
+ }
+ cur = cur->next;
+ }
+ if (glob) strcat(buf, ")");
+}
+
+/**
+ * xmlValidateElementContent:
+ * @ctxt: the validation context
+ * @child: the child list
+ * @elemDecl: pointer to the element declaration
+ * @warn: emit the error message
+ * @parent: the parent element (for error reporting)
+ *
+ * Try to validate the content model of an element
+ *
+ * returns 1 if valid or 0 if not and -1 in case of error
+ */
+
+static int
+xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child,
+ xmlElementPtr elemDecl, int warn, xmlNodePtr parent) {
+ int ret = 1;
+#ifndef LIBXML_REGEXP_ENABLED
+ xmlNodePtr repl = NULL, last = NULL, tmp;
+#endif
+ xmlNodePtr cur;
+ xmlElementContentPtr cont;
+ const xmlChar *name;
+
+ if (elemDecl == NULL)
+ return(-1);
+ cont = elemDecl->content;
+ name = elemDecl->name;
+
+#ifdef LIBXML_REGEXP_ENABLED
+ /* Build the regexp associated to the content model */
+ if (elemDecl->contModel == NULL)
+ ret = xmlValidBuildContentModel(ctxt, elemDecl);
+ if (elemDecl->contModel == NULL) {
+ return(-1);
+ } else {
+ xmlRegExecCtxtPtr exec;
+
+ if (!xmlRegexpIsDeterminist(elemDecl->contModel)) {
+ return(-1);
+ }
+ ctxt->nodeMax = 0;
+ ctxt->nodeNr = 0;
+ ctxt->nodeTab = NULL;
+ exec = xmlRegNewExecCtxt(elemDecl->contModel, NULL, NULL);
+ if (exec != NULL) {
+ cur = child;
+ while (cur != NULL) {
+ switch (cur->type) {
+ case XML_ENTITY_REF_NODE:
+ /*
+ * Push the current node to be able to roll back
+ * and process within the entity
+ */
+ if ((cur->children != NULL) &&
+ (cur->children->children != NULL)) {
+ nodeVPush(ctxt, cur);
+ cur = cur->children->children;
+ continue;
+ }
+ break;
+ case XML_TEXT_NODE:
+ if (xmlIsBlankNode(cur))
+ break;
+ ret = 0;
+ goto fail;
+ case XML_CDATA_SECTION_NODE:
+ /* TODO */
+ ret = 0;
+ goto fail;
+ case XML_ELEMENT_NODE:
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlChar fn[50];
+ xmlChar *fullname;
+
+ fullname = xmlBuildQName(cur->name,
+ cur->ns->prefix, fn, 50);
+ if (fullname == NULL) {
+ ret = -1;
+ goto fail;
+ }
+ ret = xmlRegExecPushString(exec, fullname, NULL);
+ if ((fullname != fn) && (fullname != cur->name))
+ xmlFree(fullname);
+ } else {
+ ret = xmlRegExecPushString(exec, cur->name, NULL);
+ }
+ break;
+ default:
+ break;
+ }
+ /*
+ * Switch to next element
+ */
+ cur = cur->next;
+ while (cur == NULL) {
+ cur = nodeVPop(ctxt);
+ if (cur == NULL)
+ break;
+ cur = cur->next;
+ }
+ }
+ ret = xmlRegExecPushString(exec, NULL, NULL);
+fail:
+ xmlRegFreeExecCtxt(exec);
+ }
+ }
+#else /* LIBXML_REGEXP_ENABLED */
+ /*
+ * Allocate the stack
+ */
+ ctxt->vstateMax = 8;
+ ctxt->vstateTab = (xmlValidState *) xmlMalloc(
+ ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
+ if (ctxt->vstateTab == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ return(-1);
+ }
+ /*
+ * The first entry in the stack is reserved to the current state
+ */
+ ctxt->nodeMax = 0;
+ ctxt->nodeNr = 0;
+ ctxt->nodeTab = NULL;
+ ctxt->vstate = &ctxt->vstateTab[0];
+ ctxt->vstateNr = 1;
+ CONT = cont;
+ NODE = child;
+ DEPTH = 0;
+ OCCURS = 0;
+ STATE = 0;
+ ret = xmlValidateElementType(ctxt);
+ if ((ret == -3) && (warn)) {
+ xmlErrValidWarning(ctxt, child, XML_DTD_CONTENT_NOT_DETERMINIST,
+ "Content model for Element %s is ambiguous\n",
+ name, NULL, NULL);
+ } else if (ret == -2) {
+ /*
+ * An entities reference appeared at this level.
+ * Buid a minimal representation of this node content
+ * sufficient to run the validation process on it
+ */
+ DEBUG_VALID_MSG("Found an entity reference, linearizing");
+ cur = child;
+ while (cur != NULL) {
+ switch (cur->type) {
+ case XML_ENTITY_REF_NODE:
+ /*
+ * Push the current node to be able to roll back
+ * and process within the entity
+ */
+ if ((cur->children != NULL) &&
+ (cur->children->children != NULL)) {
+ nodeVPush(ctxt, cur);
+ cur = cur->children->children;
+ continue;
+ }
+ break;
+ case XML_TEXT_NODE:
+ if (xmlIsBlankNode(cur))
+ break;
+ /* no break on purpose */
+ case XML_CDATA_SECTION_NODE:
+ /* no break on purpose */
+ case XML_ELEMENT_NODE:
+ /*
+ * Allocate a new node and minimally fills in
+ * what's required
+ */
+ tmp = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
+ if (tmp == NULL) {
+ xmlVErrMemory(ctxt, "malloc failed");
+ xmlFreeNodeList(repl);
+ ret = -1;
+ goto done;
+ }
+ tmp->type = cur->type;
+ tmp->name = cur->name;
+ tmp->ns = cur->ns;
+ tmp->next = NULL;
+ tmp->content = NULL;
+ if (repl == NULL)
+ repl = last = tmp;
+ else {
+ last->next = tmp;
+ last = tmp;
+ }
+ if (cur->type == XML_CDATA_SECTION_NODE) {
+ /*
+ * E59 spaces in CDATA does not match the
+ * nonterminal S
+ */
+ tmp->content = xmlStrdup(BAD_CAST "CDATA");
+ }
+ break;
+ default:
+ break;
+ }
+ /*
+ * Switch to next element
+ */
+ cur = cur->next;
+ while (cur == NULL) {
+ cur = nodeVPop(ctxt);
+ if (cur == NULL)
+ break;
+ cur = cur->next;
+ }
+ }
+
+ /*
+ * Relaunch the validation
+ */
+ ctxt->vstate = &ctxt->vstateTab[0];
+ ctxt->vstateNr = 1;
+ CONT = cont;
+ NODE = repl;
+ DEPTH = 0;
+ OCCURS = 0;
+ STATE = 0;
+ ret = xmlValidateElementType(ctxt);
+ }
+#endif /* LIBXML_REGEXP_ENABLED */
+ if ((warn) && ((ret != 1) && (ret != -3))) {
+ if ((ctxt != NULL) && (ctxt->warning != NULL)) {
+ char expr[5000];
+ char list[5000];
+
+ expr[0] = 0;
+ xmlSnprintfElementContent(&expr[0], 5000, cont, 1);
+ list[0] = 0;
+#ifndef LIBXML_REGEXP_ENABLED
+ if (repl != NULL)
+ xmlSnprintfElements(&list[0], 5000, repl, 1);
+ else
+#endif /* LIBXML_REGEXP_ENABLED */
+ xmlSnprintfElements(&list[0], 5000, child, 1);
+
+ if (name != NULL) {
+ xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
+ "Element %s content does not follow the DTD, expecting %s, got %s\n",
+ name, BAD_CAST expr, BAD_CAST list);
+ } else {
+ xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
+ "Element content does not follow the DTD, expecting %s, got %s\n",
+ BAD_CAST expr, BAD_CAST list, NULL);
+ }
+ } else {
+ if (name != NULL) {
+ xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
+ "Element %s content does not follow the DTD\n",
+ name, NULL, NULL);
+ } else {
+ xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
+ "Element content does not follow the DTD\n",
+ NULL, NULL, NULL);
+ }
+ }
+ ret = 0;
+ }
+ if (ret == -3)
+ ret = 1;
+
+#ifndef LIBXML_REGEXP_ENABLED
+done:
+ /*
+ * Deallocate the copy if done, and free up the validation stack
+ */
+ while (repl != NULL) {
+ tmp = repl->next;
+ xmlFree(repl);
+ repl = tmp;
+ }
+ ctxt->vstateMax = 0;
+ if (ctxt->vstateTab != NULL) {
+ xmlFree(ctxt->vstateTab);
+ ctxt->vstateTab = NULL;
+ }
+#endif
+ ctxt->nodeMax = 0;
+ ctxt->nodeNr = 0;
+ if (ctxt->nodeTab != NULL) {
+ xmlFree(ctxt->nodeTab);
+ ctxt->nodeTab = NULL;
+ }
+ return(ret);
+
+}
+
+/**
+ * xmlValidateCdataElement:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ *
+ * Check that an element follows #CDATA
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+static int
+xmlValidateOneCdataElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ xmlNodePtr elem) {
+ int ret = 1;
+ xmlNodePtr cur, child;
+
+ if ((ctxt == NULL) || (doc == NULL) || (elem == NULL))
+ return(0);
+
+ child = elem->children;
+
+ cur = child;
+ while (cur != NULL) {
+ switch (cur->type) {
+ case XML_ENTITY_REF_NODE:
+ /*
+ * Push the current node to be able to roll back
+ * and process within the entity
+ */
+ if ((cur->children != NULL) &&
+ (cur->children->children != NULL)) {
+ nodeVPush(ctxt, cur);
+ cur = cur->children->children;
+ continue;
+ }
+ break;
+ case XML_COMMENT_NODE:
+ case XML_PI_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ break;
+ default:
+ ret = 0;
+ goto done;
+ }
+ /*
+ * Switch to next element
+ */
+ cur = cur->next;
+ while (cur == NULL) {
+ cur = nodeVPop(ctxt);
+ if (cur == NULL)
+ break;
+ cur = cur->next;
+ }
+ }
+done:
+ ctxt->nodeMax = 0;
+ ctxt->nodeNr = 0;
+ if (ctxt->nodeTab != NULL) {
+ xmlFree(ctxt->nodeTab);
+ ctxt->nodeTab = NULL;
+ }
+ return(ret);
+}
+
+/**
+ * xmlValidateCheckMixed:
+ * @ctxt: the validation context
+ * @cont: the mixed content model
+ * @qname: the qualified name as appearing in the serialization
+ *
+ * Check if the given node is part of the content model.
+ *
+ * Returns 1 if yes, 0 if no, -1 in case of error
+ */
+static int
+xmlValidateCheckMixed(xmlValidCtxtPtr ctxt,
+ xmlElementContentPtr cont, const xmlChar *qname) {
+ const xmlChar *name;
+ int plen;
+ name = xmlSplitQName3(qname, &plen);
+
+ if (name == NULL) {
+ while (cont != NULL) {
+ if (cont->type == XML_ELEMENT_CONTENT_ELEMENT) {
+ if ((cont->prefix == NULL) && (xmlStrEqual(cont->name, qname)))
+ return(1);
+ } else if ((cont->type == XML_ELEMENT_CONTENT_OR) &&
+ (cont->c1 != NULL) &&
+ (cont->c1->type == XML_ELEMENT_CONTENT_ELEMENT)){
+ if ((cont->c1->prefix == NULL) &&
+ (xmlStrEqual(cont->c1->name, qname)))
+ return(1);
+ } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
+ (cont->c1 == NULL) ||
+ (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
+ xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
+ "Internal: MIXED struct corrupted\n",
+ NULL);
+ break;
+ }
+ cont = cont->c2;
+ }
+ } else {
+ while (cont != NULL) {
+ if (cont->type == XML_ELEMENT_CONTENT_ELEMENT) {
+ if ((cont->prefix != NULL) &&
+ (xmlStrncmp(cont->prefix, qname, plen) == 0) &&
+ (xmlStrEqual(cont->name, name)))
+ return(1);
+ } else if ((cont->type == XML_ELEMENT_CONTENT_OR) &&
+ (cont->c1 != NULL) &&
+ (cont->c1->type == XML_ELEMENT_CONTENT_ELEMENT)){
+ if ((cont->c1->prefix != NULL) &&
+ (xmlStrncmp(cont->c1->prefix, qname, plen) == 0) &&
+ (xmlStrEqual(cont->c1->name, name)))
+ return(1);
+ } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
+ (cont->c1 == NULL) ||
+ (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
+ xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
+ "Internal: MIXED struct corrupted\n",
+ NULL);
+ break;
+ }
+ cont = cont->c2;
+ }
+ }
+ return(0);
+}
+
+/**
+ * xmlValidGetElemDecl:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ * @extsubset: pointer, (out) indicate if the declaration was found
+ * in the external subset.
+ *
+ * Finds a declaration associated to an element in the document.
+ *
+ * returns the pointer to the declaration or NULL if not found.
+ */
+static xmlElementPtr
+xmlValidGetElemDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ xmlNodePtr elem, int *extsubset) {
+ xmlElementPtr elemDecl = NULL;
+ const xmlChar *prefix = NULL;
+
+ if ((elem == NULL) || (elem->name == NULL)) return(NULL);
+ if (extsubset != NULL)
+ *extsubset = 0;
+
+ /*
+ * Fetch the declaration for the qualified name
+ */
+ if ((elem->ns != NULL) && (elem->ns->prefix != NULL))
+ prefix = elem->ns->prefix;
+
+ if (prefix != NULL) {
+ elemDecl = xmlGetDtdQElementDesc(doc->intSubset,
+ elem->name, prefix);
+ if ((elemDecl == NULL) && (doc->extSubset != NULL)) {
+ elemDecl = xmlGetDtdQElementDesc(doc->extSubset,
+ elem->name, prefix);
+ if ((elemDecl != NULL) && (extsubset != NULL))
+ *extsubset = 1;
+ }
+ }
+
+ /*
+ * Fetch the declaration for the non qualified name
+ * This is "non-strict" validation should be done on the
+ * full QName but in that case being flexible makes sense.
+ */
+ if (elemDecl == NULL) {
+ elemDecl = xmlGetDtdElementDesc(doc->intSubset, elem->name);
+ if ((elemDecl == NULL) && (doc->extSubset != NULL)) {
+ elemDecl = xmlGetDtdElementDesc(doc->extSubset, elem->name);
+ if ((elemDecl != NULL) && (extsubset != NULL))
+ *extsubset = 1;
+ }
+ }
+ if (elemDecl == NULL) {
+ xmlErrValidNode(ctxt, elem,
+ XML_DTD_UNKNOWN_ELEM,
+ "No declaration for element %s\n",
+ elem->name, NULL, NULL);
+ }
+ return(elemDecl);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+/**
+ * xmlValidatePushElement:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ * @qname: the qualified name as appearing in the serialization
+ *
+ * Push a new element start on the validation stack.
+ *
+ * returns 1 if no validation problem was found or 0 otherwise
+ */
+int
+xmlValidatePushElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ xmlNodePtr elem, const xmlChar *qname) {
+ int ret = 1;
+ xmlElementPtr eDecl;
+ int extsubset = 0;
+
+/* printf("PushElem %s\n", qname); */
+ if ((ctxt->vstateNr > 0) && (ctxt->vstate != NULL)) {
+ xmlValidStatePtr state = ctxt->vstate;
+ xmlElementPtr elemDecl;
+
+ /*
+ * Check the new element agaisnt the content model of the new elem.
+ */
+ if (state->elemDecl != NULL) {
+ elemDecl = state->elemDecl;
+
+ switch(elemDecl->etype) {
+ case XML_ELEMENT_TYPE_UNDEFINED:
+ ret = 0;
+ break;
+ case XML_ELEMENT_TYPE_EMPTY:
+ xmlErrValidNode(ctxt, state->node,
+ XML_DTD_NOT_EMPTY,
+ "Element %s was declared EMPTY this one has content\n",
+ state->node->name, NULL, NULL);
+ ret = 0;
+ break;
+ case XML_ELEMENT_TYPE_ANY:
+ /* I don't think anything is required then */
+ break;
+ case XML_ELEMENT_TYPE_MIXED:
+ /* simple case of declared as #PCDATA */
+ if ((elemDecl->content != NULL) &&
+ (elemDecl->content->type ==
+ XML_ELEMENT_CONTENT_PCDATA)) {
+ xmlErrValidNode(ctxt, state->node,
+ XML_DTD_NOT_PCDATA,
+ "Element %s was declared #PCDATA but contains non text nodes\n",
+ state->node->name, NULL, NULL);
+ ret = 0;
+ } else {
+ ret = xmlValidateCheckMixed(ctxt, elemDecl->content,
+ qname);
+ if (ret != 1) {
+ xmlErrValidNode(ctxt, state->node,
+ XML_DTD_INVALID_CHILD,
+ "Element %s is not declared in %s list of possible children\n",
+ qname, state->node->name, NULL);
+ }
+ }
+ break;
+ case XML_ELEMENT_TYPE_ELEMENT:
+ /*
+ * TODO:
+ * VC: Standalone Document Declaration
+ * - element types with element content, if white space
+ * occurs directly within any instance of those types.
+ */
+ if (state->exec != NULL) {
+ ret = xmlRegExecPushString(state->exec, qname, NULL);
+ if (ret < 0) {
+ xmlErrValidNode(ctxt, state->node,
+ XML_DTD_CONTENT_MODEL,
+ "Element %s content does not follow the DTD, Misplaced %s\n",
+ state->node->name, qname, NULL);
+ ret = 0;
+ } else {
+ ret = 1;
+ }
+ }
+ break;
+ }
+ }
+ }
+ eDecl = xmlValidGetElemDecl(ctxt, doc, elem, &extsubset);
+ vstateVPush(ctxt, eDecl, elem);
+ return(ret);
+}
+
+/**
+ * xmlValidatePushCData:
+ * @ctxt: the validation context
+ * @data: some character data read
+ * @len: the lenght of the data
+ *
+ * check the CData parsed for validation in the current stack
+ *
+ * returns 1 if no validation problem was found or 0 otherwise
+ */
+int
+xmlValidatePushCData(xmlValidCtxtPtr ctxt, const xmlChar *data, int len) {
+ int ret = 1;
+
+/* printf("CDATA %s %d\n", data, len); */
+ if (len <= 0)
+ return(ret);
+ if ((ctxt->vstateNr > 0) && (ctxt->vstate != NULL)) {
+ xmlValidStatePtr state = ctxt->vstate;
+ xmlElementPtr elemDecl;
+
+ /*
+ * Check the new element agaisnt the content model of the new elem.
+ */
+ if (state->elemDecl != NULL) {
+ elemDecl = state->elemDecl;
+
+ switch(elemDecl->etype) {
+ case XML_ELEMENT_TYPE_UNDEFINED:
+ ret = 0;
+ break;
+ case XML_ELEMENT_TYPE_EMPTY:
+ xmlErrValidNode(ctxt, state->node,
+ XML_DTD_NOT_EMPTY,
+ "Element %s was declared EMPTY this one has content\n",
+ state->node->name, NULL, NULL);
+ ret = 0;
+ break;
+ case XML_ELEMENT_TYPE_ANY:
+ break;
+ case XML_ELEMENT_TYPE_MIXED:
+ break;
+ case XML_ELEMENT_TYPE_ELEMENT:
+ if (len > 0) {
+ int i;
+
+ for (i = 0;i < len;i++) {
+ if (!IS_BLANK_CH(data[i])) {
+ xmlErrValidNode(ctxt, state->node,
+ XML_DTD_CONTENT_MODEL,
+ "Element %s content does not follow the DTD, Text not allowed\n",
+ state->node->name, NULL, NULL);
+ ret = 0;
+ goto done;
+ }
+ }
+ /*
+ * TODO:
+ * VC: Standalone Document Declaration
+ * element types with element content, if white space
+ * occurs directly within any instance of those types.
+ */
+ }
+ break;
+ }
+ }
+ }
+done:
+ return(ret);
+}
+
+/**
+ * xmlValidatePopElement:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ * @qname: the qualified name as appearing in the serialization
+ *
+ * Pop the element end from the validation stack.
+ *
+ * returns 1 if no validation problem was found or 0 otherwise
+ */
+int
+xmlValidatePopElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc ATTRIBUTE_UNUSED,
+ xmlNodePtr elem ATTRIBUTE_UNUSED,
+ const xmlChar *qname ATTRIBUTE_UNUSED) {
+ int ret = 1;
+
+/* printf("PopElem %s\n", qname); */
+ if ((ctxt->vstateNr > 0) && (ctxt->vstate != NULL)) {
+ xmlValidStatePtr state = ctxt->vstate;
+ xmlElementPtr elemDecl;
+
+ /*
+ * Check the new element agaisnt the content model of the new elem.
+ */
+ if (state->elemDecl != NULL) {
+ elemDecl = state->elemDecl;
+
+ if (elemDecl->etype == XML_ELEMENT_TYPE_ELEMENT) {
+ if (state->exec != NULL) {
+ ret = xmlRegExecPushString(state->exec, NULL, NULL);
+ if (ret == 0) {
+ xmlErrValidNode(ctxt, state->node,
+ XML_DTD_CONTENT_MODEL,
+ "Element %s content does not follow the DTD, Expecting more child\n",
+ state->node->name, NULL,NULL);
+ } else {
+ /*
+ * previous validation errors should not generate
+ * a new one here
+ */
+ ret = 1;
+ }
+ }
+ }
+ }
+ vstateVPop(ctxt);
+ }
+ return(ret);
+}
+#endif /* LIBXML_REGEXP_ENABLED */
+
+/**
+ * xmlValidateOneElement:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ *
+ * Try to validate a single element and it's attributes,
+ * basically it does the following checks as described by the
+ * XML-1.0 recommendation:
+ * - [ VC: Element Valid ]
+ * - [ VC: Required Attribute ]
+ * Then call xmlValidateOneAttribute() for each attribute present.
+ *
+ * The ID/IDREF checkings are done separately
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
+ xmlNodePtr elem) {
+ xmlElementPtr elemDecl = NULL;
+ xmlElementContentPtr cont;
+ xmlAttributePtr attr;
+ xmlNodePtr child;
+ int ret = 1, tmp;
+ const xmlChar *name;
+ int extsubset = 0;
+
+ CHECK_DTD;
+
+ if (elem == NULL) return(0);
+ switch (elem->type) {
+ case XML_ATTRIBUTE_NODE:
+ xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
+ "Attribute element not expected\n", NULL, NULL ,NULL);
+ return(0);
+ case XML_TEXT_NODE:
+ if (elem->children != NULL) {
+ xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
+ "Text element has children !\n",
+ 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",
+ NULL,NULL,NULL);
+ return(0);
+ }
+ return(1);
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ return(1);
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ return(1);
+ case XML_ENTITY_NODE:
+ xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
+ "Entity element not expected\n", NULL, NULL ,NULL);
+ return(0);
+ case XML_NOTATION_NODE:
+ xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
+ "Notation element not expected\n", NULL, NULL ,NULL);
+ return(0);
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
+ "Document element not expected\n", NULL, NULL ,NULL);
+ return(0);
+ case XML_HTML_DOCUMENT_NODE:
+ xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
+ "HTML Document not expected\n", NULL, NULL ,NULL);
+ return(0);
+ case XML_ELEMENT_NODE:
+ break;
+ default:
+ xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
+ "unknown element type\n", NULL, NULL ,NULL);
+ return(0);
+ }
+
+ /*
+ * Fetch the declaration
+ */
+ elemDecl = xmlValidGetElemDecl(ctxt, doc, elem, &extsubset);
+ if (elemDecl == NULL)
+ return(0);
+
+ /*
+ * If vstateNr is not zero that means continuous validation is
+ * activated, do not try to check the content model at that level.
+ */
+ if (ctxt->vstateNr == 0) {
+ /* Check that the element content matches the definition */
+ switch (elemDecl->etype) {
+ case XML_ELEMENT_TYPE_UNDEFINED:
+ xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ELEM,
+ "No declaration for element %s\n",
+ elem->name, NULL, NULL);
+ return(0);
+ case XML_ELEMENT_TYPE_EMPTY:
+ if (elem->children != NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_NOT_EMPTY,
+ "Element %s was declared EMPTY this one has content\n",
+ elem->name, NULL, NULL);
+ ret = 0;
+ }
+ break;
+ case XML_ELEMENT_TYPE_ANY:
+ /* I don't think anything is required then */
+ break;
+ case XML_ELEMENT_TYPE_MIXED:
+
+ /* simple case of declared as #PCDATA */
+ if ((elemDecl->content != NULL) &&
+ (elemDecl->content->type == XML_ELEMENT_CONTENT_PCDATA)) {
+ ret = xmlValidateOneCdataElement(ctxt, doc, elem);
+ if (!ret) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_NOT_PCDATA,
+ "Element %s was declared #PCDATA but contains non text nodes\n",
+ elem->name, NULL, NULL);
+ }
+ break;
+ }
+ child = elem->children;
+ /* Hum, this start to get messy */
+ while (child != NULL) {
+ if (child->type == XML_ELEMENT_NODE) {
+ name = child->name;
+ if ((child->ns != NULL) && (child->ns->prefix != NULL)) {
+ xmlChar fn[50];
+ xmlChar *fullname;
+
+ fullname = xmlBuildQName(child->name, child->ns->prefix,
+ fn, 50);
+ if (fullname == NULL)
+ return(0);
+ cont = elemDecl->content;
+ while (cont != NULL) {
+ if (cont->type == XML_ELEMENT_CONTENT_ELEMENT) {
+ if (xmlStrEqual(cont->name, fullname))
+ break;
+ } else if ((cont->type == XML_ELEMENT_CONTENT_OR) &&
+ (cont->c1 != NULL) &&
+ (cont->c1->type == XML_ELEMENT_CONTENT_ELEMENT)){
+ if (xmlStrEqual(cont->c1->name, fullname))
+ break;
+ } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
+ (cont->c1 == NULL) ||
+ (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
+ xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
+ "Internal: MIXED struct corrupted\n",
+ NULL);
+ break;
+ }
+ cont = cont->c2;
+ }
+ if ((fullname != fn) && (fullname != child->name))
+ xmlFree(fullname);
+ if (cont != NULL)
+ goto child_ok;
+ }
+ cont = elemDecl->content;
+ while (cont != NULL) {
+ if (cont->type == XML_ELEMENT_CONTENT_ELEMENT) {
+ if (xmlStrEqual(cont->name, name)) break;
+ } else if ((cont->type == XML_ELEMENT_CONTENT_OR) &&
+ (cont->c1 != NULL) &&
+ (cont->c1->type == XML_ELEMENT_CONTENT_ELEMENT)) {
+ if (xmlStrEqual(cont->c1->name, name)) break;
+ } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
+ (cont->c1 == NULL) ||
+ (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)) {
+ xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
+ "Internal: MIXED struct corrupted\n",
+ NULL);
+ break;
+ }
+ cont = cont->c2;
+ }
+ if (cont == NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_INVALID_CHILD,
+ "Element %s is not declared in %s list of possible children\n",
+ name, elem->name, NULL);
+ ret = 0;
+ }
+ }
+child_ok:
+ child = child->next;
+ }
+ break;
+ case XML_ELEMENT_TYPE_ELEMENT:
+ if ((doc->standalone == 1) && (extsubset == 1)) {
+ /*
+ * VC: Standalone Document Declaration
+ * - element types with element content, if white space
+ * occurs directly within any instance of those types.
+ */
+ child = elem->children;
+ while (child != NULL) {
+ if (child->type == XML_TEXT_NODE) {
+ const xmlChar *content = child->content;
+
+ while (IS_BLANK_CH(*content))
+ content++;
+ if (*content == 0) {
+ xmlErrValidNode(ctxt, elem,
+ XML_DTD_STANDALONE_WHITE_SPACE,
+"standalone: %s declared in the external subset contains white spaces nodes\n",
+ elem->name, NULL, NULL);
+ ret = 0;
+ break;
+ }
+ }
+ child =child->next;
+ }
+ }
+ child = elem->children;
+ cont = elemDecl->content;
+ tmp = xmlValidateElementContent(ctxt, child, elemDecl, 1, elem);
+ if (tmp <= 0)
+ ret = tmp;
+ break;
+ }
+ } /* not continuous */
+
+ /* [ VC: Required Attribute ] */
+ attr = elemDecl->attributes;
+ while (attr != NULL) {
+ if (attr->def == XML_ATTRIBUTE_REQUIRED) {
+ int qualified = -1;
+
+ if ((attr->prefix == NULL) &&
+ (xmlStrEqual(attr->name, BAD_CAST "xmlns"))) {
+ xmlNsPtr ns;
+
+ ns = elem->nsDef;
+ while (ns != NULL) {
+ if (ns->prefix == NULL)
+ goto found;
+ ns = ns->next;
+ }
+ } else if (xmlStrEqual(attr->prefix, BAD_CAST "xmlns")) {
+ xmlNsPtr ns;
+
+ ns = elem->nsDef;
+ while (ns != NULL) {
+ if (xmlStrEqual(attr->name, ns->prefix))
+ goto found;
+ ns = ns->next;
+ }
+ } else {
+ xmlAttrPtr attrib;
+
+ attrib = elem->properties;
+ while (attrib != NULL) {
+ if (xmlStrEqual(attrib->name, attr->name)) {
+ if (attr->prefix != NULL) {
+ xmlNsPtr nameSpace = attrib->ns;
+
+ if (nameSpace == NULL)
+ nameSpace = elem->ns;
+ /*
+ * qualified names handling is problematic, having a
+ * different prefix should be possible but DTDs don't
+ * allow to define the URI instead of the prefix :-(
+ */
+ if (nameSpace == NULL) {
+ if (qualified < 0)
+ qualified = 0;
+ } else if (!xmlStrEqual(nameSpace->prefix,
+ attr->prefix)) {
+ if (qualified < 1)
+ qualified = 1;
+ } else
+ goto found;
+ } else {
+ /*
+ * We should allow applications to define namespaces
+ * for their application even if the DTD doesn't
+ * carry one, otherwise, basically we would always
+ * break.
+ */
+ goto found;
+ }
+ }
+ attrib = attrib->next;
+ }
+ }
+ if (qualified == -1) {
+ if (attr->prefix == NULL) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_MISSING_ATTRIBUTE,
+ "Element %s does not carry attribute %s\n",
+ elem->name, attr->name, NULL);
+ ret = 0;
+ } else {
+ xmlErrValidNode(ctxt, elem, XML_DTD_MISSING_ATTRIBUTE,
+ "Element %s does not carry attribute %s:%s\n",
+ elem->name, attr->prefix,attr->name);
+ ret = 0;
+ }
+ } else if (qualified == 0) {
+ xmlErrValidWarning(ctxt, elem, XML_DTD_NO_PREFIX,
+ "Element %s required attribute %s:%s has no prefix\n",
+ elem->name, attr->prefix, attr->name);
+ } else if (qualified == 1) {
+ xmlErrValidWarning(ctxt, elem, XML_DTD_DIFFERENT_PREFIX,
+ "Element %s required attribute %s:%s has different prefix\n",
+ elem->name, attr->prefix, attr->name);
+ }
+ } else if (attr->def == XML_ATTRIBUTE_FIXED) {
+ /*
+ * Special tests checking #FIXED namespace declarations
+ * have the right value since this is not done as an
+ * attribute checking
+ */
+ if ((attr->prefix == NULL) &&
+ (xmlStrEqual(attr->name, BAD_CAST "xmlns"))) {
+ xmlNsPtr ns;
+
+ ns = elem->nsDef;
+ while (ns != NULL) {
+ if (ns->prefix == NULL) {
+ if (!xmlStrEqual(attr->defaultValue, ns->href)) {
+ xmlErrValidNode(ctxt, elem,
+ XML_DTD_ELEM_DEFAULT_NAMESPACE,
+ "Element %s namespace name for default namespace does not match the DTD\n",
+ elem->name, NULL, NULL);
+ ret = 0;
+ }
+ goto found;
+ }
+ ns = ns->next;
+ }
+ } else if (xmlStrEqual(attr->prefix, BAD_CAST "xmlns")) {
+ xmlNsPtr ns;
+
+ ns = elem->nsDef;
+ while (ns != NULL) {
+ if (xmlStrEqual(attr->name, ns->prefix)) {
+ if (!xmlStrEqual(attr->defaultValue, ns->href)) {
+ xmlErrValidNode(ctxt, elem, XML_DTD_ELEM_NAMESPACE,
+ "Element %s namespace name for %s does not match the DTD\n",
+ elem->name, ns->prefix, NULL);
+ ret = 0;
+ }
+ goto found;
+ }
+ ns = ns->next;
+ }
+ }
+ }
+found:
+ attr = attr->nexth;
+ }
+ return(ret);
+}
+
+/**
+ * xmlValidateRoot:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ *
+ * Try to validate a the root element
+ * basically it does the following check as described by the
+ * XML-1.0 recommendation:
+ * - [ VC: Root Element Type ]
+ * it doesn't try to recurse or apply other check to the element
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
+ xmlNodePtr root;
+ int ret;
+
+ if (doc == NULL) return(0);
+
+ root = xmlDocGetRootElement(doc);
+ if ((root == NULL) || (root->name == NULL)) {
+ xmlErrValid(ctxt, XML_DTD_NO_ROOT,
+ "no root element\n", NULL);
+ return(0);
+ }
+
+ /*
+ * When doing post validation against a separate DTD, those may
+ * no internal subset has been generated
+ */
+ if ((doc->intSubset != NULL) &&
+ (doc->intSubset->name != NULL)) {
+ /*
+ * Check first the document root against the NQName
+ */
+ if (!xmlStrEqual(doc->intSubset->name, root->name)) {
+ if ((root->ns != NULL) && (root->ns->prefix != NULL)) {
+ xmlChar fn[50];
+ xmlChar *fullname;
+
+ fullname = xmlBuildQName(root->name, root->ns->prefix, fn, 50);
+ if (fullname == NULL) {
+ xmlVErrMemory(ctxt, NULL);
+ return(0);
+ }
+ ret = xmlStrEqual(doc->intSubset->name, fullname);
+ if ((fullname != fn) && (fullname != root->name))
+ xmlFree(fullname);
+ if (ret == 1)
+ goto name_ok;
+ }
+ if ((xmlStrEqual(doc->intSubset->name, BAD_CAST "HTML")) &&
+ (xmlStrEqual(root->name, BAD_CAST "html")))
+ goto name_ok;
+ xmlErrValidNode(ctxt, root, XML_DTD_ROOT_NAME,
+ "root and DTD name do not match '%s' and '%s'\n",
+ root->name, doc->intSubset->name, NULL);
+ return(0);
+ }
+ }
+name_ok:
+ return(1);
+}
+
+
+/**
+ * xmlValidateElement:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @elem: an element instance
+ *
+ * Try to validate the subtree under an element
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem) {
+ xmlNodePtr child;
+ xmlAttrPtr attr;
+ xmlNsPtr ns;
+ const xmlChar *value;
+ int ret = 1;
+
+ if (elem == NULL) return(0);
+
+ /*
+ * XInclude elements were added after parsing in the infoset,
+ * they don't really mean anything validation wise.
+ */
+ if ((elem->type == XML_XINCLUDE_START) ||
+ (elem->type == XML_XINCLUDE_END))
+ return(1);
+
+ CHECK_DTD;
+
+ /*
+ * Entities references have to be handled separately
+ */
+ if (elem->type == XML_ENTITY_REF_NODE) {
+ return(1);
+ }
+
+ 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;
+ }
+ child = elem->children;
+ while (child != NULL) {
+ ret &= xmlValidateElement(ctxt, doc, child);
+ child = child->next;
+ }
+
+ return(ret);
+}
+
+/**
+ * xmlValidateRef:
+ * @ref: A reference to be validated
+ * @ctxt: Validation context
+ * @name: Name of ID we are searching for
+ *
+ */
+static void
+xmlValidateRef(xmlRefPtr ref, xmlValidCtxtPtr ctxt,
+ const xmlChar *name) {
+ xmlAttrPtr id;
+ xmlAttrPtr attr;
+
+ if (ref == NULL)
+ return;
+ if ((ref->attr == NULL) && (ref->name == NULL))
+ return;
+ attr = ref->attr;
+ if (attr == NULL) {
+ xmlChar *dup, *str = NULL, *cur, save;
+
+ dup = xmlStrdup(name);
+ if (dup == NULL) {
+ ctxt->valid = 0;
+ return;
+ }
+ cur = dup;
+ while (*cur != 0) {
+ str = cur;
+ while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++;
+ save = *cur;
+ *cur = 0;
+ id = xmlGetID(ctxt->doc, str);
+ if (id == NULL) {
+ xmlErrValidNodeNr(ctxt, NULL, XML_DTD_UNKNOWN_ID,
+ "attribute %s line %d references an unknown ID \"%s\"\n",
+ ref->name, ref->lineno, str);
+ ctxt->valid = 0;
+ }
+ if (save == 0)
+ break;
+ *cur = save;
+ while (IS_BLANK_CH(*cur)) cur++;
+ }
+ xmlFree(dup);
+ } else if (attr->atype == XML_ATTRIBUTE_IDREF) {
+ id = xmlGetID(ctxt->doc, name);
+ if (id == NULL) {
+ xmlErrValidNode(ctxt, attr->parent, XML_DTD_UNKNOWN_ID,
+ "IDREF attribute %s references an unknown ID \"%s\"\n",
+ attr->name, name, NULL);
+ ctxt->valid = 0;
+ }
+ } else if (attr->atype == XML_ATTRIBUTE_IDREFS) {
+ xmlChar *dup, *str = NULL, *cur, save;
+
+ dup = xmlStrdup(name);
+ if (dup == NULL) {
+ xmlVErrMemory(ctxt, "IDREFS split");
+ ctxt->valid = 0;
+ return;
+ }
+ cur = dup;
+ while (*cur != 0) {
+ str = cur;
+ while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++;
+ save = *cur;
+ *cur = 0;
+ id = xmlGetID(ctxt->doc, str);
+ if (id == NULL) {
+ xmlErrValidNode(ctxt, attr->parent, XML_DTD_UNKNOWN_ID,
+ "IDREFS attribute %s references an unknown ID \"%s\"\n",
+ attr->name, str, NULL);
+ ctxt->valid = 0;
+ }
+ if (save == 0)
+ break;
+ *cur = save;
+ while (IS_BLANK_CH(*cur)) cur++;
+ }
+ xmlFree(dup);
+ }
+}
+
+/**
+ * xmlWalkValidateList:
+ * @data: Contents of current link
+ * @user: Value supplied by the user
+ *
+ * Returns 0 to abort the walk or 1 to continue
+ */
+static int
+xmlWalkValidateList(const void *data, const void *user)
+{
+ xmlValidateMemoPtr memo = (xmlValidateMemoPtr)user;
+ xmlValidateRef((xmlRefPtr)data, memo->ctxt, memo->name);
+ return 1;
+}
+
+/**
+ * xmlValidateCheckRefCallback:
+ * @ref_list: List of references
+ * @ctxt: Validation context
+ * @name: Name of ID we are searching for
+ *
+ */
+static void
+xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
+ const xmlChar *name) {
+ xmlValidateMemo memo;
+
+ if (ref_list == NULL)
+ return;
+ memo.ctxt = ctxt;
+ memo.name = name;
+
+ xmlListWalk(ref_list, xmlWalkValidateList, &memo);
+
+}
+
+/**
+ * xmlValidateDocumentFinal:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ *
+ * Does the final step for the document validation once all the
+ * incremental validation steps have been completed
+ *
+ * basically it does the following checks described by the XML Rec
+ *
+ * Check all the IDREF/IDREFS attributes definition for validity
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
+ xmlRefTablePtr table;
+
+ if (doc == NULL) {
+ xmlErrValid(ctxt, XML_DTD_NO_DOC,
+ "xmlValidateDocumentFinal: doc == NULL\n", NULL);
+ return(0);
+ }
+
+ /*
+ * Check all the NOTATION/NOTATIONS attributes
+ */
+ /*
+ * Check all the ENTITY/ENTITIES attributes definition for validity
+ */
+ /*
+ * Check all the IDREF/IDREFS attributes definition for validity
+ */
+ table = (xmlRefTablePtr) doc->refs;
+ ctxt->doc = doc;
+ ctxt->valid = 1;
+ xmlHashScan(table, (xmlHashScanner) xmlValidateCheckRefCallback, ctxt);
+ return(ctxt->valid);
+}
+
+/**
+ * xmlValidateDtd:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ * @dtd: a dtd instance
+ *
+ * Try to validate the document against the dtd instance
+ *
+ * basically it does check all the definitions in the DtD.
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateDtd(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd) {
+ int ret;
+ xmlDtdPtr oldExt;
+ xmlNodePtr root;
+
+ if (dtd == NULL) return(0);
+ if (doc == NULL) return(0);
+ oldExt = doc->extSubset;
+ doc->extSubset = dtd;
+ ret = xmlValidateRoot(ctxt, doc);
+ if (ret == 0) {
+ doc->extSubset = oldExt;
+ return(ret);
+ }
+ if (doc->ids != NULL) {
+ xmlFreeIDTable(doc->ids);
+ doc->ids = NULL;
+ }
+ if (doc->refs != NULL) {
+ xmlFreeRefTable(doc->refs);
+ doc->refs = NULL;
+ }
+ root = xmlDocGetRootElement(doc);
+ ret = xmlValidateElement(ctxt, doc, root);
+ ret &= xmlValidateDocumentFinal(ctxt, doc);
+ doc->extSubset = oldExt;
+ return(ret);
+}
+
+static void
+xmlValidateNotationCallback(xmlEntityPtr cur, xmlValidCtxtPtr ctxt,
+ const xmlChar *name ATTRIBUTE_UNUSED) {
+ if (cur == NULL)
+ return;
+ if (cur->etype == XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
+ xmlChar *notation = cur->content;
+
+ if (notation != NULL) {
+ int ret;
+
+ ret = xmlValidateNotationUse(ctxt, cur->doc, notation);
+ if (ret != 1) {
+ ctxt->valid = 0;
+ }
+ }
+ }
+}
+
+static void
+xmlValidateAttributeCallback(xmlAttributePtr cur, xmlValidCtxtPtr ctxt,
+ const xmlChar *name ATTRIBUTE_UNUSED) {
+ int ret;
+ xmlDocPtr doc;
+ xmlElementPtr elem = NULL;
+
+ if (cur == NULL)
+ return;
+ switch (cur->atype) {
+ case XML_ATTRIBUTE_CDATA:
+ case XML_ATTRIBUTE_ID:
+ case XML_ATTRIBUTE_IDREF :
+ case XML_ATTRIBUTE_IDREFS:
+ case XML_ATTRIBUTE_NMTOKEN:
+ case XML_ATTRIBUTE_NMTOKENS:
+ case XML_ATTRIBUTE_ENUMERATION:
+ break;
+ case XML_ATTRIBUTE_ENTITY:
+ case XML_ATTRIBUTE_ENTITIES:
+ case XML_ATTRIBUTE_NOTATION:
+ if (cur->defaultValue != NULL) {
+
+ ret = xmlValidateAttributeValue2(ctxt, ctxt->doc, cur->name,
+ cur->atype, cur->defaultValue);
+ if ((ret == 0) && (ctxt->valid == 1))
+ ctxt->valid = 0;
+ }
+ if (cur->tree != NULL) {
+ xmlEnumerationPtr tree = cur->tree;
+ while (tree != NULL) {
+ ret = xmlValidateAttributeValue2(ctxt, ctxt->doc,
+ cur->name, cur->atype, tree->name);
+ if ((ret == 0) && (ctxt->valid == 1))
+ ctxt->valid = 0;
+ tree = tree->next;
+ }
+ }
+ }
+ if (cur->atype == XML_ATTRIBUTE_NOTATION) {
+ doc = cur->doc;
+ if (cur->elem == NULL) {
+ xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
+ "xmlValidateAttributeCallback(%s): internal error\n",
+ (const char *) cur->name);
+ return;
+ }
+
+ if (doc != NULL)
+ elem = xmlGetDtdElementDesc(doc->intSubset, cur->elem);
+ if ((elem == NULL) && (doc != NULL))
+ elem = xmlGetDtdElementDesc(doc->extSubset, cur->elem);
+ if ((elem == NULL) && (cur->parent != NULL) &&
+ (cur->parent->type == XML_DTD_NODE))
+ elem = xmlGetDtdElementDesc((xmlDtdPtr) cur->parent, cur->elem);
+ if (elem == NULL) {
+ xmlErrValidNode(ctxt, NULL, XML_DTD_UNKNOWN_ELEM,
+ "attribute %s: could not find decl for element %s\n",
+ cur->name, cur->elem, NULL);
+ return;
+ }
+ if (elem->etype == XML_ELEMENT_TYPE_EMPTY) {
+ xmlErrValidNode(ctxt, NULL, XML_DTD_EMPTY_NOTATION,
+ "NOTATION attribute %s declared for EMPTY element %s\n",
+ cur->name, cur->elem, NULL);
+ ctxt->valid = 0;
+ }
+ }
+}
+
+/**
+ * xmlValidateDtdFinal:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ *
+ * Does the final step for the dtds validation once all the
+ * subsets have been parsed
+ *
+ * basically it does the following checks described by the XML Rec
+ * - check that ENTITY and ENTITIES type attributes default or
+ * possible values matches one of the defined entities.
+ * - check that NOTATION type attributes default or
+ * possible values matches one of the defined notations.
+ *
+ * returns 1 if valid or 0 if invalid and -1 if not well-formed
+ */
+
+int
+xmlValidateDtdFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
+ xmlDtdPtr dtd;
+ xmlAttributeTablePtr table;
+ xmlEntitiesTablePtr entities;
+
+ if (doc == NULL) return(0);
+ if ((doc->intSubset == NULL) && (doc->extSubset == NULL))
+ return(0);
+ ctxt->doc = doc;
+ ctxt->valid = 1;
+ dtd = doc->intSubset;
+ if ((dtd != NULL) && (dtd->attributes != NULL)) {
+ table = (xmlAttributeTablePtr) dtd->attributes;
+ xmlHashScan(table, (xmlHashScanner) xmlValidateAttributeCallback, ctxt);
+ }
+ if ((dtd != NULL) && (dtd->entities != NULL)) {
+ entities = (xmlEntitiesTablePtr) dtd->entities;
+ xmlHashScan(entities, (xmlHashScanner) xmlValidateNotationCallback,
+ ctxt);
+ }
+ dtd = doc->extSubset;
+ if ((dtd != NULL) && (dtd->attributes != NULL)) {
+ table = (xmlAttributeTablePtr) dtd->attributes;
+ xmlHashScan(table, (xmlHashScanner) xmlValidateAttributeCallback, ctxt);
+ }
+ if ((dtd != NULL) && (dtd->entities != NULL)) {
+ entities = (xmlEntitiesTablePtr) dtd->entities;
+ xmlHashScan(entities, (xmlHashScanner) xmlValidateNotationCallback,
+ ctxt);
+ }
+ return(ctxt->valid);
+}
+
+/**
+ * xmlValidateDocument:
+ * @ctxt: the validation context
+ * @doc: a document instance
+ *
+ * Try to validate the document instance
+ *
+ * basically it does the all the checks described by the XML Rec
+ * i.e. validates the internal and external subset (if present)
+ * and validate the document tree.
+ *
+ * returns 1 if valid or 0 otherwise
+ */
+
+int
+xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
+ int ret;
+ xmlNodePtr root;
+
+ if ((doc->intSubset == NULL) && (doc->extSubset == NULL)) {
+ xmlErrValid(ctxt, XML_DTD_NO_DTD,
+ "no DTD found!\n", NULL);
+ return(0);
+ }
+ if ((doc->intSubset != NULL) && ((doc->intSubset->SystemID != NULL) ||
+ (doc->intSubset->ExternalID != NULL)) && (doc->extSubset == NULL)) {
+ doc->extSubset = xmlParseDTD(doc->intSubset->ExternalID,
+ doc->intSubset->SystemID);
+ if (doc->extSubset == NULL) {
+ if (doc->intSubset->SystemID != NULL) {
+ xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
+ "Could not load the external subset \"%s\"\n",
+ (const char *) doc->intSubset->SystemID);
+ } else {
+ xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
+ "Could not load the external subset \"%s\"\n",
+ (const char *) doc->intSubset->ExternalID);
+ }
+ return(0);
+ }
+ }
+
+ if (doc->ids != NULL) {
+ xmlFreeIDTable(doc->ids);
+ doc->ids = NULL;
+ }
+ if (doc->refs != NULL) {
+ xmlFreeRefTable(doc->refs);
+ doc->refs = NULL;
+ }
+ ret = xmlValidateDtdFinal(ctxt, doc);
+ if (!xmlValidateRoot(ctxt, doc)) return(0);
+
+ root = xmlDocGetRootElement(doc);
+ ret &= xmlValidateElement(ctxt, doc, root);
+ ret &= xmlValidateDocumentFinal(ctxt, doc);
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * Routines for dynamic validation editing *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlValidGetPotentialChildren:
+ * @ctree: an element content tree
+ * @list: an array to store the list of child names
+ * @len: a pointer to the number of element in the list
+ * @max: the size of the array
+ *
+ * Build/extend a list of potential children allowed by the content tree
+ *
+ * returns the number of element in the list, or -1 in case of error.
+ */
+
+int
+xmlValidGetPotentialChildren(xmlElementContent *ctree, const xmlChar **list,
+ int *len, int max) {
+ int i;
+
+ if ((ctree == NULL) || (list == NULL) || (len == NULL))
+ return(-1);
+ if (*len >= max) return(*len);
+
+ switch (ctree->type) {
+ case XML_ELEMENT_CONTENT_PCDATA:
+ for (i = 0; i < *len;i++)
+ if (xmlStrEqual(BAD_CAST "#PCDATA", list[i])) return(*len);
+ list[(*len)++] = BAD_CAST "#PCDATA";
+ break;
+ case XML_ELEMENT_CONTENT_ELEMENT:
+ for (i = 0; i < *len;i++)
+ if (xmlStrEqual(ctree->name, list[i])) return(*len);
+ list[(*len)++] = ctree->name;
+ break;
+ case XML_ELEMENT_CONTENT_SEQ:
+ xmlValidGetPotentialChildren(ctree->c1, list, len, max);
+ xmlValidGetPotentialChildren(ctree->c2, list, len, max);
+ break;
+ case XML_ELEMENT_CONTENT_OR:
+ xmlValidGetPotentialChildren(ctree->c1, list, len, max);
+ xmlValidGetPotentialChildren(ctree->c2, list, len, max);
+ break;
+ }
+
+ return(*len);
+}
+
+/**
+ * xmlValidGetValidElements:
+ * @prev: an element to insert after
+ * @next: an element to insert next
+ * @list: an array to store the list of child names
+ * @max: the size of the array
+ *
+ * This function returns the list of authorized children to insert
+ * within an existing tree while respecting the validity constraints
+ * forced by the Dtd. The insertion point is defined using @prev and
+ * @next in the following ways:
+ * to insert before 'node': xmlValidGetValidElements(node->prev, node, ...
+ * to insert next 'node': xmlValidGetValidElements(node, node->next, ...
+ * to replace 'node': xmlValidGetValidElements(node->prev, node->next, ...
+ * to prepend a child to 'node': xmlValidGetValidElements(NULL, node->childs,
+ * to append a child to 'node': xmlValidGetValidElements(node->last, NULL, ...
+ *
+ * pointers to the element names are inserted at the beginning of the array
+ * and do not need to be freed.
+ *
+ * returns the number of element in the list, or -1 in case of error. If
+ * the function returns the value @max the caller is invited to grow the
+ * receiving array and retry.
+ */
+
+int
+xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **list,
+ int max) {
+ xmlValidCtxt vctxt;
+ int nb_valid_elements = 0;
+ const xmlChar *elements[256];
+ int nb_elements = 0, i;
+ const xmlChar *name;
+
+ xmlNode *ref_node;
+ xmlNode *parent;
+ xmlNode *test_node;
+
+ xmlNode *prev_next;
+ xmlNode *next_prev;
+ xmlNode *parent_childs;
+ xmlNode *parent_last;
+
+ xmlElement *element_desc;
+
+ memset(&vctxt, 0, sizeof (xmlValidCtxt));
+
+ if (prev == NULL && next == NULL)
+ return(-1);
+
+ if (list == NULL) return(-1);
+ if (max <= 0) return(-1);
+
+ nb_valid_elements = 0;
+ ref_node = prev ? prev : next;
+ parent = ref_node->parent;
+
+ /*
+ * Retrieves the parent element declaration
+ */
+ element_desc = xmlGetDtdElementDesc(parent->doc->intSubset,
+ parent->name);
+ if ((element_desc == NULL) && (parent->doc->extSubset != NULL))
+ element_desc = xmlGetDtdElementDesc(parent->doc->extSubset,
+ parent->name);
+ if (element_desc == NULL) return(-1);
+
+ /*
+ * Do a backup of the current tree structure
+ */
+ prev_next = prev ? prev->next : NULL;
+ next_prev = next ? next->prev : NULL;
+ parent_childs = parent->children;
+ parent_last = parent->last;
+
+ /*
+ * Creates a dummy node and insert it into the tree
+ */
+ test_node = xmlNewNode (NULL, BAD_CAST "<!dummy?>");
+ test_node->doc = ref_node->doc;
+ test_node->parent = parent;
+ test_node->prev = prev;
+ test_node->next = next;
+ name = test_node->name;
+
+ if (prev) prev->next = test_node;
+ else parent->children = test_node;
+
+ if (next) next->prev = test_node;
+ else parent->last = test_node;
+
+ /*
+ * Insert each potential child node and check if the parent is
+ * still valid
+ */
+ nb_elements = xmlValidGetPotentialChildren(element_desc->content,
+ elements, &nb_elements, 256);
+
+ for (i = 0;i < nb_elements;i++) {
+ test_node->name = elements[i];
+ if (xmlValidateOneElement(&vctxt, parent->doc, parent)) {
+ int j;
+
+ for (j = 0; j < nb_valid_elements;j++)
+ if (xmlStrEqual(elements[i], list[j])) break;
+ list[nb_valid_elements++] = elements[i];
+ if (nb_valid_elements >= max) break;
+ }
+ }
+
+ /*
+ * Restore the tree structure
+ */
+ if (prev) prev->next = prev_next;
+ if (next) next->prev = next_prev;
+ parent->children = parent_childs;
+ parent->last = parent_last;
+
+ /*
+ * Free up the dummy node
+ */
+ test_node->name = name;
+ xmlFreeNode(test_node);
+
+ return(nb_valid_elements);
+}
+#endif /* LIBXML_VALID_ENABLED */
+
diff --git a/vms/build_libxml.com b/vms/build_libxml.com
new file mode 100755
index 0000000..323c36f
--- /dev/null
+++ b/vms/build_libxml.com
@@ -0,0 +1,261 @@
+$! BUILD_LIBXML.COM
+$!
+$! Build the LIBXML library
+$!
+$! Arguments:
+$!
+$! "DEBUG" - build everything in debug
+$!
+$! This procedure creates an object library XML_LIBDIR:LIBXML.OLB directory.
+$! After the library is built, you can link LIBXML routines into
+$! your code with the command
+$!
+$! $ LINK your_modules,XML_LIBDIR:LIBXML.OLB/LIBRARY
+$!
+$! Change History
+$! --------------
+$! Command file author : John A Fotheringham (jaf@jafsoft.com)
+$! Update history : 13 October 2003 Craig Berry (craigberry@mac.com)
+$! more new module additions
+$! : 25 April 2003 Craig Berry (craigberry@mac.com)
+$! added xmlreader.c and relaxng.c to source list
+$! : 28 September 2002 Craig Berry (craigberry@mac.com)
+$! updated to work with current sources
+$! miscellaneous enhancements to build process
+$!
+$!- configuration -------------------------------------------------------------
+$!
+$!- compile command. If p1="nowarn" suppress the expected warning types
+$!
+$ cc_opts = "/NAMES=(SHORTENED)/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS"
+$!
+$ if p1.eqs."DEBUG" .or. p2.eqs."DEBUG"
+$ then
+$ debug = "Y"
+$ cc_command = "CC''cc_opts'/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL"
+$ else
+$ debug = "N"
+$ cc_command = "CC''cc_opts'"
+$ endif
+$!
+$!- list of sources to be built into the LIBXML library. Compare this list
+$! to the definition of "libxml2_la_SOURCES" in the file MAKEFILE.IN.
+$! Currently this definition includes the list WITH_TRIO_SOURCES_TRUE
+$!
+$ sources = "SAX.c entities.c encoding.c error.c parserInternals.c parser.c"
+$ sources = sources + " tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c valid.c"
+$ sources = sources + " xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c "
+$ sources = sources + " xpointer.c xinclude.c nanohttp.c nanoftp.c "
+$ sources = sources + " DOCBparser.c catalog.c globals.c threads.c c14n.c "
+$ sources = sources + " xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c "
+$ sources = sources + " triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c"
+$ sources = sources + " legacy.c xmldwalk.c chvalid.c"
+$!
+$!- list of main modules to compile and link. Compare this list to the
+$! definition of bin_PROGRAMS in MAKEFILE.IN
+$!
+$ bin_progs = "xmllint xmlcatalog"
+$!
+$!- list of test modules to compile and link. Compare this list to the
+$! definition of noinst_PROGRAMS in MAKEFILE.
+$!
+$ noinst_PROGRAMS = "testSchemas testRelax testSAX testHTML testXPath testURI " -
+ + "testThreads testC14N testAutomata testRegexp testReader"
+$!
+$!- set up build logicals -----------------------------------------------------\
+$!
+$!
+$!- start from where the procedure is in case it's submitted in batch ----------\
+$!
+$ whoami = f$parse(f$environment("PROCEDURE"),,,,"NO_CONCEAL")
+$ procdir = f$parse(whoami,,,"DEVICE") + f$parse(whoami,,,"DIRECTORY")
+$ set default 'procdir'
+$!
+$ if f$trnlnm("XML_LIBDIR").eqs.""
+$ then
+$ if f$search("[-]lib.dir") .eqs. ""
+$ then
+$ create/directory/log [-.lib]
+$ endif
+$ xml_libdir = f$parse("[-.lib]",,,"DEVICE") + f$parse("[-.lib]",,,"DIRECTORY")
+$ define/process XML_LIBDIR 'xml_libdir'
+$ write sys$output "Defining XML_LIBDIR as """ + f$trnlnm("XML_LIBDIR") + """
+$ endif
+$!
+$ if f$trnlnm("XML_SRCDIR").eqs.""
+$ then
+$ globfile = f$search("[-...]globals.c")
+$ if globfile.eqs.""
+$ then
+$ write sys$output "Can't locate globals.c. You need to manually define a XML_SRCDIR logical"
+$ exit
+$ else
+$ srcdir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY")
+$ define/process XML_SRCDIR "''srcdir'"
+$ write sys$output "Defining XML_SRCDIR as ""''srcdir'"""
+$ endif
+$ endif
+$!
+$ copy/log config.vms xml_srcdir:config.h
+$!
+$ if f$trnlnm("libxml").eqs.""
+$ then
+$ globfile = f$search("[-...]globals.h")
+$ if globfile.eqs.""
+$ then
+$ write sys$output "Can't locate globals.h. You need to manually define a LIBXML logical"
+$ exit
+$ else
+$ includedir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY")
+$ define/process libxml "''includedir'"
+$ write sys$output "Defining libxml as ""''includedir'"""
+$ endif
+$ endif
+$!
+$!- set up error handling (such as it is) -------------------------------------
+$!
+$ exit_status = 1
+$ saved_default = f$environment("default")
+$ on error then goto ERROR_OUT
+$ on control_y then goto ERROR_OUT
+$!
+$!- move to the source directory and create any necessary subdirs and the
+$! object library
+$!
+$ set default xml_srcdir
+$ if f$search("DEBUG.DIR").eqs."" then create/dir [.DEBUG]
+$ if f$search("XML_LIBDIR:LIBXML.OLB").eqs.""
+$ then
+$ write sys$output "Creating new object library XML_LIBDIR:LIBXML.OLB"
+$ library/create XML_LIBDIR:LIBXML.OLB
+$ endif
+$!
+$ goto start_here
+$ start_here: ! move this line to debug/rerun parts of this command file
+$!
+$!- compile modules into the library ------------------------------------------
+$!
+$ lib_command = "LIBRARY/REPLACE/LOG XML_LIBDIR:LIBXML.OLB"
+$ link_command = ""
+$!
+$ write sys$output ""
+$ write sys$output "Building modules into the LIBXML object library"
+$ write sys$output ""
+$!
+$ s_no = 0
+$ sources = f$edit(sources,"COMPRESS")
+$!
+$ source_loop:
+$!
+$ next_source = f$element (S_no," ",sources)
+$ if next_source.nes."" .and. next_source.nes." "
+$ then
+$!
+$ on error then goto ERROR_OUT
+$ on control_y then goto ERROR_OUT
+$ call build 'next_source'
+$ s_no = s_no + 1
+$ goto source_loop
+$!
+$ endif
+$!
+$!- now build self-test programs ----------------------------------------------
+$!
+$! these programs are built as ordinary modules into XML_LIBDIR:LIBXML.OLB. Here they
+$! are built a second time with /DEFINE=(STANDALONE) in which case a main()
+$! is also compiled into the module
+$
+$ lib_command = ""
+$ link_command = "LINK"
+$!
+$ library/compress XML_LIBDIR:LIBXML.OLB
+$ purge XML_LIBDIR:LIBXML.OLB
+$!
+$ write sys$output ""
+$ write sys$output "Building STANDALONE self-test programs"
+$ write sys$output ""
+$!
+$ call build NANOFTP.C /DEFINE=(STANDALONE)
+$ call build NANOHTTP.C /DEFINE=(STANDALONE)
+$ call build TRIONAN.C /DEFINE=(STANDALONE)
+$!
+$!- now build main and test programs ------------------------------------------
+$!
+$!
+$ lib_command = ""
+$ link_command = "LINK"
+$!
+$ write sys$output ""
+$ write sys$output "Building main programs and test programs"
+$ write sys$output ""
+$!
+$ p_no = 0
+$ all_progs = bin_progs + " " + noinst_PROGRAMS
+$ all_progs = f$edit(all_progs,"COMPRESS")
+$!
+$ prog_loop:
+$!
+$ next_prog = f$element (p_no," ",all_progs)
+$ if next_prog.nes."" .and. next_prog.nes." "
+$ then
+$!
+$ on error then goto ERROR_OUT
+$ on control_y then goto ERROR_OUT
+$ call build 'next_prog'.c
+$ p_no = p_no + 1
+$ goto prog_loop
+$!
+$ endif
+$!
+$!- Th-th-th-th-th-that's all folks! ------------------------------------------
+$!
+$ goto exit_here ! move this line to avoid parts of this command file
+$ exit_here:
+$!
+$ exit
+$ goto exit_out
+$!
+$!
+$EXIT_OUT:
+$!
+$ purge/nolog [.debug]
+$ set default 'saved_default
+$ exit 'exit_status
+$!
+$
+$ERROR_OUT:
+$ exit_status = $status
+$ write sys$output "''f$message(exit_status)'"
+$ goto EXIT_OUT
+$!
+$!- the BUILD subroutine. Compile then insert into library or link as required
+$!
+$BUILD: subroutine
+$ on warning then goto EXIT_BUILD
+$ source_file = p1
+$ name = f$parse(source_file,,,"NAME")
+$ object_file = f$parse("[.debug].OBJ",name,,,"SYNTAX_ONLY")
+$!
+$!- compile
+$!
+$ write sys$output "''cc_command'''p2'/object=''object_file' ''source_file'"
+$ cc_command'p2' /object='object_file 'source_file'
+$!
+$!- insert into library if command defined
+$!
+$ if lib_command.nes."" then lib_command 'object_file'
+$!
+$!- link module if command defined
+$ if link_command.nes.""
+$ then
+$ opts = ""
+$ if debug then opts = "/DEBUG"
+$ write sys$output "''link_command'''opts' ''object_file',XML_LIBDIR:libxml.olb/library"
+$ link_command'opts' 'object_file',-
+ XML_LIBDIR:libxml.olb/library
+$ endif
+$!
+$EXIT_BUILD:
+$ exit $status
+$!
+$endsubroutine
diff --git a/vms/config.vms b/vms/config.vms
new file mode 100755
index 0000000..b898bf1
--- /dev/null
+++ b/vms/config.vms
@@ -0,0 +1,218 @@
+/* config.h */
+
+#define VMS 1
+
+/* Define if you have the strftime function. */
+#define HAVE_STRFTIME 1
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+#undef PACKAGE
+#undef VERSION
+#undef HAVE_LIBZ
+#undef HAVE_LIBM
+#undef HAVE_ISINF
+#if defined(_IEEE_FP) && (__CRTL_VER >= 60200000)
+# define HAVE_ISNAN 1
+#endif
+#undef HAVE_LIBHISTORY
+#undef HAVE_LIBREADLINE
+
+/* Define if you have the class function. */
+#undef HAVE_CLASS
+
+/* Define if you have the finite function. */
+#undef HAVE_FINITE
+
+/* Define if you have the fp_class function. */
+#define HAVE_FP_CLASS 1
+
+/* Define if you have the fpclass function. */
+#undef HAVE_FPCLASS
+
+/* Define if you have the isnand function. */
+#undef HAVE_ISNAND
+
+/* Define if you have the localtime function. */
+#define HAVE_LOCALTIME 1
+
+/* Define if you have the snprintf function. */
+#undef HAVE_SNPRINTF
+
+/* Define if you have the strdup function. */
+#define HAVE_STRDUP 1
+
+/* Define if you have the strerror function. */
+#define HAVE_STRERROR 1
+
+/* Define if you have the strftime function. */
+#define HAVE_STRFTIME 1
+
+/* Define if you have the strndup function. */
+#undef HAVE_STRNDUP
+
+/* Define if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define if you have the <ctype.h> header file. */
+#define HAVE_CTYPE_H 1
+
+/* Define if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define if you have the <errno.h> header file. */
+#define HAVE_ERRNO_H 1
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define if you have the <fp_class.h> header file. */
+#define HAVE_FP_CLASS_H 1
+
+/* Define if you have the <ieeefp.h> header file. */
+#undef HAVE_IEEEFP_H
+
+/* Define if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define if you have the <math.h> header file. */
+#define HAVE_MATH_H 1
+
+/* Define if you have the <nan.h> header file. */
+#undef HAVE_NAN_H
+
+/* Define if you have the <ndir.h> header file. */
+#undef HAVE_NDIR_H
+
+/* Define if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define if you have the <stdarg.h> header file. */
+#define HAVE_STDARG_H 1
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strndup' function. */
+#undef HAVE_STRNDUP
+
+/* Define if you have the <sys/dir.h> header file. */
+#undef HAVE_SYS_DIR_H
+
+/* Define if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define if you have the <sys/ndir.h> header file. */
+#undef HAVE_SYS_NDIR_H
+
+/* Define if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define if you have the <time.h> header file. */
+#define HAVE_TIME_H 1
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* Define if you have the inet library (-linet). */
+#undef HAVE_LIBINET
+
+/* Define if you have the nsl library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define if you have the socket library (-lsocket). */
+#undef HAVE_LIBSOCKET
+
+/* Name of package */
+#undef PACKAGE
+
+/* Version number of package */
+#undef VERSION
+
+/* Up to this point this is just a hard-wired version of
+ * config.h. After this will be anything else we need
+ * that is VMS-specific.
+ */
+
+/* For best results, compile with /NAMES=(SHORTENED), which requires
+ * DEC C 5.7 or later. For older compilers, the shortened names below
+ * are the same ones the mangler generates in C 5.7 and later. These may
+ * work, though there will probably be some conflicts with redefinitions
+ * in globals.h.
+ */
+
+#if __DECC_VER < 57000000
+/* 0 1 2 3 0 1 2 3
+ * 123456789012345678901234567890123456789 1234567890123456789012345678901
+ */
+#define __xmlDoValidityCheckingDefaultValue __xmlDoValidityChecking3qad3pq$
+#define __xmlSubstituteEntitiesDefaultValue __xmlSubstituteEntities0pij13u$
+#define trio_locale_set_thousand_separator trio_locale_set_thousan259ikkk$
+#define xmlDoValidityCheckingDefaultValue xmlDoValidityCheckingDe1bcsei4$
+#define xmlParseBalancedChunkMemoryRecover xmlParseBalancedChunkMe1lu1e86$
+#define xmlParseElementChildrenContentDecl xmlParseElementChildren1mp6pcb$
+#define xmlParserInputBufferCreateFilename xmlParserInputBufferCre36lujn2$
+#define xmlRegisterDefaultInputCallbacks xmlRegisterDefaultInput3vin0cp$
+#define xmlRegisterDefaultOutputCallbacks xmlRegisterDefaultOutpu0q443dd$
+#define xmlSubstituteEntitiesDefaultValue xmlSubstituteEntitiesDe28k2c80$
+#define xmlUCSIsAlphabeticPresentationForms xmlUCSIsAlphabeticPrese2qr24s3$
+#define xmlUCSIsArabicPresentationFormsB xmlUCSIsArabicPresentat1gajvg8$
+#define xmlUCSIsArabicPresentationFormsA xmlUCSIsArabicPresentat3sq1bti$
+#define xmlUCSIsCJKCompatibilityIdeographsSupplement xmlUCSIsCJKCompatibilit0or40ki$
+#define xmlUCSIsCJKCompatibilityIdeographs xmlUCSIsCJKCompatibilit2nodmc5$
+#define xmlUCSIsCJKSymbolsandPunctuation xmlUCSIsCJKSymbolsandPu0a3i7ra$
+#define xmlUCSIsCJKUnifiedIdeographsExtensionA xmlUCSIsCJKUnifiedIdeog11ig3fd$
+#define xmlUCSIsCJKUnifiedIdeographsExtensionB xmlUCSIsCJKUnifiedIdeog3d22n2n$
+#define xmlUCSIsCombiningDiacriticalMarks xmlUCSIsCombiningDiacri3tj3nl8$
+#define xmlUCSIsCombiningMarksforSymbols xmlUCSIsCombiningMarksf3ftqd7s$
+#define xmlUCSIsEnclosedCJKLettersandMonths xmlUCSIsEnclosedCJKLett0nq67g4$
+#define xmlUCSIsHalfwidthandFullwidthForms xmlUCSIsHalfwidthandFul047l0a1$
+#define xmlUCSIsHighPrivateUseSurrogates xmlUCSIsHighPrivateUseS071kh83$
+#define xmlUCSIsIdeographicDescriptionCharacters xmlUCSIsIdeographicDesc1rovf8g$
+#define xmlUCSIsMathematicalAlphanumericSymbols xmlUCSIsMathematicalAlp2ag8r44$
+#define xmlUCSIsOpticalCharacterRecognition xmlUCSIsOpticalCharacte1juuh06$
+#define xmlUCSIsSuperscriptsandSubscripts xmlUCSIsSuperscriptsand3fi4eup$
+#define xmlUCSIsUnifiedCanadianAboriginalSyllabics xmlUCSIsUnifiedCanadian0lbvi9b$
+#define xmlValidCtxtNormalizeAttributeValue xmlValidCtxtNormalizeAt0q11n5f$
+#define xmlXPathRegisteredVariablesCleanup xmlXPathRegisteredVaria1uvs4uc$
+
+#endif
+
+#define xmlBufferWriteChar xmlBufferWriteChar2
diff --git a/vms/diffs.vms b/vms/diffs.vms
new file mode 100644
index 0000000..5402910
--- /dev/null
+++ b/vms/diffs.vms
@@ -0,0 +1,192 @@
+--------------------------------------------------------------------------
+GLOBALS.C
+
+105a106
+> int xmlDoValidityCheckingDefaultValue = 0;
+111,121c112,113
+< #if defined(VMS) || defined(__VMS)
+< #define PLATFORM_VMS
+< /* int xmlDoValidityCheckingDefaultVal = 0;
+< * int xmlSubstituteEntitiesDefaultVal = 0;
+< */
+< #define xmlDoValidityCheckingDefaultValue xmlDoValidityCheckingDefaultVal
+< #define xmlSubstituteEntitiesDefaultValue xmlSubstituteEntitiesDefaultVal
+< #else
+< int xmlDoValidityCheckingDefaultValue = 0;
+< int xmlSubstituteEntitiesDefaultValue = 0;
+< #endif
+---
+> int xmlSubstituteEntitiesDefaultValue = 0;
+>
+289,291d280
+< #ifdef PLATFORM_VMS
+< gs->xmlDoValidityCheckingDefaultVal = 0;
+< #else
+293,294d281
+< #endif
+<
+316,318d302
+< #ifdef PLATFORM_VMS
+< gs->xmlSubstituteEntitiesDefaultVal = 0;
+< #else
+320d303
+< #endif
+404,419c387,390
+< #ifdef PLATFORM_VMS
+< extern int xmlDoValidityCheckingDefaultVal;
+< #undef xmlDoValidityCheckingDefaultVal
+< int *
+< __xmlDoValidityCheckingDefVal(void) {
+< if (IS_MAIN_THREAD)
+< return (&xmlDoValidityCheckingDefaultVal);
+< else
+< return (&xmlGetGlobalState()->xmlDoValidityCheckingDefaultVal);
+< }
+< #define __xmlDoValidityCheckingDefaultValue __xmlDoValidityCheckingDefVal
+< #else
+< extern int xmlDoValidityCheckingDefaultValue;
+< #undef xmlDoValidityCheckingDefaultValue
+< int *
+< __xmlDoValidityCheckingDefaultValue(void) {
+---
+> extern int xmlDoValidityCheckingDefaultValue;
+> #undef xmlDoValidityCheckingDefaultValue
+> int *
+> __xmlDoValidityCheckingDefaultValue(void) {
+424,425c395
+< }
+< #endif
+---
+> }
+577,592c547,550
+< #ifdef PLATFORM_VMS
+< extern int xmlSubstituteEntitiesDefaultVal;
+< #undef xmlSubstituteEntitiesDefaultVal
+< int *
+< __xmlSubsEntitiesDefaultValue(void) {
+< if (IS_MAIN_THREAD)
+< return (&xmlSubstituteEntitiesDefaultVal);
+< else
+< return (&xmlGetGlobalState()->xmlSubstituteEntitiesDefaultVal);
+< }
+< #define __xmlSubstituteEntitiesDefaultValue __xmlSubsEntitiesDefaultValue
+< #else
+< extern int xmlSubstituteEntitiesDefaultValue;
+< #undef xmlSubstituteEntitiesDefaultValue
+< int *
+< __xmlSubstituteEntitiesDefaultValue(void) {
+---
+> extern int xmlSubstituteEntitiesDefaultValue;
+> #undef xmlSubstituteEntitiesDefaultValue
+> int *
+> __xmlSubstituteEntitiesDefaultValue(void) {
+597,598c555
+< }
+< #endif
+---
+> }
+
+
+--------------------------------------------------------------------------
+TRIO.C
+113,116d112
+< #if defined(VMS) || defined(__VMS)
+< # include <unistd.h>
+< #endif /* Platform is VMS */
+<
+123d118
+<
+
+
+--------------------------------------------------------------------------
+GLOBALS.H
+78,86c78,79
+< #if defined(VMS) || defined(__VMS)
+< int xmlSubstituteEntitiesDefaultVal; /* 31 character name limit */
+< int xmlDoValidityCheckingDefaultVal;
+< #define xmlSubstituteEntitiesDefaultValue xmlSubstituteEntitiesDefaultVal
+< #define xmlDoValidityCheckingDefaultValue xmlDoValidityCheckingDefaultVal
+< #else
+< int xmlSubstituteEntitiesDefaultValue;
+< int xmlDoValidityCheckingDefaultValue;
+< #endif
+---
+> int xmlSubstituteEntitiesDefaultValue;
+> int xmlDoValidityCheckingDefaultValue;
+211,226c204,209
+< #if defined(VMS) || defined(__VMS)
+< #ifdef LIBXML_THREAD_ENABLED
+< extern int *__xmlDoValidityCheckingDefaultVal(void);
+< #define xmlDoValidityCheckingDefaultVal \
+< (*(__xmlDoValidityCheckingDefaultVal()))
+< #else
+< LIBXML_DLL_IMPORT extern int xmlDoValidityCheckingDefaultVal;
+< #endif
+< #else
+< #ifdef LIBXML_THREAD_ENABLED
+< extern int *__xmlDoValidityCheckingDefaultValue(void);
+< #define xmlDoValidityCheckingDefaultValue \
+< (*(__xmlDoValidityCheckingDefaultValue()))
+< #else
+< LIBXML_DLL_IMPORT extern int xmlDoValidityCheckingDefaultValue;
+< #endif
+---
+> #ifdef LIBXML_THREAD_ENABLED
+> extern int *__xmlDoValidityCheckingDefaultValue(void);
+> #define xmlDoValidityCheckingDefaultValue \
+> (*(__xmlDoValidityCheckingDefaultValue()))
+> #else
+> LIBXML_DLL_IMPORT extern int xmlDoValidityCheckingDefaultValue;
+317,332c300,305
+< #if defined(VMS) || defined(__VMS)
+< #ifdef LIBXML_THREAD_ENABLED
+< extern int *__xmlSubsEntitiesDefaultValue(void);
+< #define xmlSubsEntitiesDefaultValue \
+< (*(__xmlSubsEntitiesDefaultValue()))
+< #else
+< LIBXML_DLL_IMPORT extern int xmlSubsEntitiesDefaultValue;
+< #endif
+< #else
+< #ifdef LIBXML_THREAD_ENABLED
+< extern int *__xmlSubstituteEntitiesDefaultValue(void);
+< #define xmlSubstituteEntitiesDefaultValue \
+< (*(__xmlSubstituteEntitiesDefaultValue()))
+< #else
+< LIBXML_DLL_IMPORT extern int xmlSubstituteEntitiesDefaultValue;
+< #endif
+---
+> #ifdef LIBXML_THREAD_ENABLED
+> extern int *__xmlSubstituteEntitiesDefaultValue(void);
+> #define xmlSubstituteEntitiesDefaultValue \
+> (*(__xmlSubstituteEntitiesDefaultValue()))
+> #else
+> LIBXML_DLL_IMPORT extern int xmlSubstituteEntitiesDefaultValue;
+
+
+--------------------------------------------------------------------------
+XMLIO.H
+79,82d78
+< #if defined(VMS) || defined(__VMS)
+< void xmlRegisterDefInputCallbacks (void);
+< #define xmlRegisterDefaultInputCallbacks xmlRegisterDefInputCallbacks
+< #else
+84d79
+< #endif
+130,133d124
+< #if defined(VMS) || defined(__VMS)
+< void xmlRegisterDefOutputCallbacks(void);
+< #define xmlRegisterDefaultOutputCallbacks xmlRegisterDefOutputCallbacks
+< #else
+135,136d125
+< #endif
+<
+
+--------------------------------------------------------------------------
+XPATHINTERNALS.H
+433,436d432
+< #if defined(VMS) || defined(__VMS)
+< void xmlXPathRegisteredVarsCleanup(xmlXPathContextPtr ctxt);
+< #define xmlXPathRegisteredVariablesCleanup xmlXPathRegisteredVarsCleanup
+< #else
+438d433
+< #endif
diff --git a/vms/readme.vms b/vms/readme.vms
new file mode 100644
index 0000000..91dddeb
--- /dev/null
+++ b/vms/readme.vms
@@ -0,0 +1,143 @@
+Issues in porting libxml to VMS
+===============================
+
+Here's a summary of the issues I encountered when building LIBXML under
+VMS. There was some VMS support in the version I got, but it was a little
+out of date with the result that some newer files had problems.
+
+I present this list "as is" to hopefully act as a guide to anyone having
+problems in the future.
+
+That's it. Good luck!
+
+John A Fotheringham (jaf@jafsoft.com)
+October 2001
+
+Updated October 2002 by Craig A Berry (craigberry@mac.com)
+
+Installation kit
+----------------
+
+- File attributes. Having downloaded essentially a Unix distribution, some
+ of the file attributes weren't correct... especially those in the [.VMS]
+ subdirectory. In EDT you could see line feeds and carriage returns as
+ <LF><CR> etc. To correct this use the command
+
+ $ set file <filespec> /attr=rfm=stm
+
+ This sets the record format to be "stream". Other variants may be used
+ instead depending on how you got the files onto your system. Files will
+ look okay in an EDT editor once the attributes are set. Without
+ this the command file may not run correctly, since it may be interpreted
+ as a single line.
+
+- VMS-specific files are in a [.VMS] directory. If you've found this file
+ then you already know this :-) This directory contains
+
+ BUILD_LIBXML.COM - a build command file, which I've radically re-worked
+ CONFIG.VMS - a configuration file to replace config.h
+
+- Don't execute BUILD_LIBXML.COM until you've done all the following
+
+ - read these notes
+ - reviewed the configuration section of BUILD_LIBXML.COM, and in particular
+ updated the module lists in line with MAKEFILE
+ - identified the location of the include files, so that you can manually
+ set the LIBXML logical if need be.
+ - re-read these notes :-p
+
+ instructions for all these steps are below.
+
+- the file [.vms]config.vms is used in lieu of a Configure-generated config.h.
+ This file contains a number of define statements that identify the software
+ options required under VMS
+
+- The include files are in a [.INCLUDE.LIBXML] subdirectory. You need
+ a logical "libxml" to point to this so that include statements of the
+ form
+
+ #include <libxml/parser.h>
+
+ will work correctly. The source files are mostly two levels above this
+ directory, although there are some .h files there as well.
+
+- The command file BUILD_LIBXML.COM will do the following
+
+ - setup some logicals
+ - set def to the source directory
+ - compile modules and place them into a LIBXML.OLB library
+ - compile and link a number of self-test programs
+ - compile and link a number of utilities and test programs
+ - set def back to the original directory (i.e. if it fails you might not be
+ where you started :-)
+
+ before running this command file review the configuration segment at
+ the top. In particular compare the lists of modules with those in the
+ most recent version of the Unix MAKEFILE. Instructions are contained
+ in the command file itself.
+
+ The command file will attempt to set two logicals
+
+ - xml_srcdir. The directory containing the source files
+ - libxml. The include file directory.
+
+ It attempts this by looking for modules globals.c and globals.h in
+ nearby directories. If this logic fails, you'll need to manually define
+ these logicals.
+
+
+The TRIO package
+----------------
+- A sub-package TRIO is used to provide some functions not naturally available
+ under VMS. These include support for infinite and undefined numbers,
+ and specialised print functions like "snprintf"
+
+ I had to make several changes to trionan.c in discussion with the author
+ (hopefully these are now included in the distro, so I won't list them here)
+
+ To build this software we need to add
+
+ /IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE
+
+ to the compile command for xpath.c and trio.c, and to any main program
+ that uses this functionality. BUILD_LIBXML.COM should do this for you.
+
+- to build in trio support you need the define WITH_TRIO to be set. This
+ is done by default for VMS in xmlversion.h
+
+
+Compiler and linker errors
+--------------------------
+- the DEC C compiler may produce a number of warnings when compiling the
+ C code. These include
+
+ - Implicit function warnings. These indicate functions whose type is
+ not defined in a .h file. This will probably only happen if your
+ configuration is not correct (e.g. for "snprintf" if you haven't
+ edited xmlversion.h to set WITH_TRIO
+
+ - uninitialised variables. Not usually a problem. You can solve this
+ by editing the code to initialise the variables affected
+
+Changes made to the codebase
+----------------------------
+- I changed all dummy declarations in trio.c to be
+
+ va_list dummy = NULL;
+
+ to prevent compiler whinge in TRIO.C about uninitialised variables
+
+- I had to add the following to nanoftp.c
+
+ #if defined(VMS) || defined(__VMS)
+ #define SOCKLEN_T unsigned int
+ #endif
+
+ This matches similar lines already added to nanohttp.c
+
+- Several variables and function names exceed the 31 character limit
+ of the VMS linker. The solution adopted has been to use the
+ /NAMES=SHORTENED compiler option, which requires DEC/Compaq C 5.7
+ or later. For a complete list of the names that needed shortening
+ and the short names generated by the compiler, see [.vms]config.vms.
+
diff --git a/win32/.cvsignore b/win32/.cvsignore
new file mode 100644
index 0000000..1cca812
--- /dev/null
+++ b/win32/.cvsignore
@@ -0,0 +1,6 @@
+Makefile
+config.*
+depends.*
+int.*
+bin.*
+
diff --git a/win32/Makefile.bcb b/win32/Makefile.bcb
new file mode 100644
index 0000000..0d50137
--- /dev/null
+++ b/win32/Makefile.bcb
@@ -0,0 +1,329 @@
+# Makefile for libxml2, specific for Windows, BCB6 and Borland make.
+#
+# Take a look at the beginning and modify the variables to suit your
+# environment. Having done that, you can do a
+#
+# make [all] to build the libxml and the accompanying utilities.
+# make clean to remove all compiler output files and return to a
+# clean state.
+# make rebuild to rebuild everything from scratch. This basically does
+# a 'nmake clean' and then a 'nmake all'.
+# make install to install the library and its header files.
+#
+# August 2003, Eric Zurcher <Eric.Zurcher@csiro.au>
+# based on the MSVC version of
+# March 2002, Igor Zlatkovic <igor@zlatkovic.com>
+#
+
+# There should never be a need to modify anything below this line.
+# ----------------------------------------------------------------
+
+AUTOCONF = .\config.bcb
+!include $(AUTOCONF)
+
+!if !$d(BCB)
+BCB = $(MAKEDIR)\..
+!endif
+.autodepend
+
+# Names of various input and output components.
+XML_NAME = xml2
+XML_BASENAME = lib$(XML_NAME)
+XML_SO = $(XML_BASENAME).dll
+XML_IMP = $(XML_BASENAME).lib
+XML_DEF = $(XML_BASENAME).def
+XML_A = $(XML_BASENAME)_a.lib
+DUMMY = dir.exists
+
+# Place where we let the compiler put its intermediate trash.
+BINDIR = bin.bcb
+XML_INTDIR = int.bcb
+XML_INTDIR_A = int.a.bcb
+UTILS_INTDIR = int.utils.bcb
+
+# The preprocessor and its options.
+CPP = cpp32.exe -P- -DWIN32
+CPPFLAGS = -I$(XML_SRCDIR)\include
+!if "$(WITH_THREADS)" != "no"
+CPPFLAGS = $(CPPFLAGS) -D_REENTRANT -D__MT__
+!endif
+
+# The compiler and its options.
+CC = bcc32.exe
+CFLAGS = -q -DWIN32 -D_NO_VCL -D_WINDOWS -D_MBCS -DEILSEQ=2 -w-
+CFLAGS = $(CFLAGS) -I$(XML_SRCDIR) -I$(XML_SRCDIR)\include -I$(INCPREFIX) -I$(INCLUDE)
+!if "$(WITH_THREADS)" != "no"
+CFLAGS = $(CFLAGS) -D_REENTRANT -tWM
+!endif
+!if "$(DYNRUNTIME)" == "1"
+CFLAGS = $(CFLAGS) -tWR
+!endif
+!if "$(WITH_THREADS)" == "yes" || "$(WITH_THREADS)" == "ctls"
+CFLAGS = $(CFLAGS) -DHAVE_WIN32_THREADS -DHAVE_COMPILER_TLS
+!else if "$(WITH_THREADS)" == "native"
+CFLAGS = $(CFLAGS) -DHAVE_WIN32_THREADS
+!else if "$(WITH_THREADS)" == "posix"
+CFLAGS = $(CFLAGS) -DHAVE_PTHREAD_H
+!endif
+!if "$(WITH_ZLIB)" == "1"
+CFLAGS = $(CFLAGS) -DHAVE_ZLIB_H
+!endif
+
+# The linker and its options.
+LD = ilink32.exe
+LDFLAGS = -q -U$(LIBXML_MAJOR_VERSION).$(LIBXML_MINOR_VERSION)
+LDFLAGS = $(LDFLAGS) -L$(BINDIR);$(LIBPREFIX);$(LIB);$(BCB)\lib\PSdk
+LIBS = import32.lib
+!if "$(WITH_THREADS)" != "no" && "$(DYNRUNTIME)" == "1"
+LIBS = $(LIBS) cw32mti.lib
+!elif "$(WITH_THREADS)" != "no"
+LIBS = $(LIBS) cw32mt.lib
+!elif "$(DYNRUNTIME)" == "1"
+LIBS = $(LIBS) cw32i.lib
+!else
+LIBS = $(LIBS) cw32.lib
+!endif
+!if "$(WITH_FTP)" == "1" || "$(WITH_HTTP)" == "1"
+LIBS = $(LIBS) wsock32.lib
+!endif
+!if "$(WITH_ICONV)" == "1"
+LIBS = $(LIBS) iconvomf.lib
+!endif
+!if "$(WITH_ZLIB)" == "1"
+LIBS = $(LIBS) zlibomf.lib
+!endif
+!if "$(WITH_THREADS)" == "posix"
+LIBS = $(LIBS) pthreadVC.lib
+!endif
+
+# The archiver and its options.
+AR = tlib.exe
+ARFLAGS = /P64 /0
+
+# Optimisation and debug symbols.
+!if "$(DEBUG)" == "1"
+CFLAGS = $(CFLAGS) -D_DEBUG -Od -v
+LDFLAGS = $(LDFLAGS) -v
+!else
+CFLAGS = $(CFLAGS) -DNDEBUG -O2
+LDFLAGS = $(LDFLAGS)
+!endif
+
+# Libxml object files.
+XML_OBJS = $(XML_INTDIR)\c14n.obj\
+ $(XML_INTDIR)\catalog.obj\
+ $(XML_INTDIR)\chvalid.obj\
+ $(XML_INTDIR)\debugXML.obj\
+ $(XML_INTDIR)\dict.obj\
+ $(XML_INTDIR)\DOCBparser.obj\
+ $(XML_INTDIR)\encoding.obj\
+ $(XML_INTDIR)\entities.obj\
+ $(XML_INTDIR)\error.obj\
+ $(XML_INTDIR)\globals.obj\
+ $(XML_INTDIR)\hash.obj\
+ $(XML_INTDIR)\HTMLparser.obj\
+ $(XML_INTDIR)\HTMLtree.obj\
+ $(XML_INTDIR)\legacy.obj\
+ $(XML_INTDIR)\list.obj\
+ $(XML_INTDIR)\nanoftp.obj\
+ $(XML_INTDIR)\nanohttp.obj\
+ $(XML_INTDIR)\parser.obj\
+ $(XML_INTDIR)\parserInternals.obj\
+ $(XML_INTDIR)\pattern.obj\
+ $(XML_INTDIR)\relaxng.obj\
+ $(XML_INTDIR)\SAX.obj\
+ $(XML_INTDIR)\SAX2.obj\
+ $(XML_INTDIR)\threads.obj\
+ $(XML_INTDIR)\tree.obj\
+ $(XML_INTDIR)\uri.obj\
+ $(XML_INTDIR)\valid.obj\
+ $(XML_INTDIR)\xinclude.obj\
+ $(XML_INTDIR)\xlink.obj\
+ $(XML_INTDIR)\xmlIO.obj\
+ $(XML_INTDIR)\xmlmemory.obj\
+ $(XML_INTDIR)\xmlreader.obj\
+ $(XML_INTDIR)\xmlregexp.obj\
+ $(XML_INTDIR)\xmlsave.obj\
+ $(XML_INTDIR)\xmlschemas.obj\
+ $(XML_INTDIR)\xmlschemastypes.obj\
+ $(XML_INTDIR)\xmlunicode.obj\
+ $(XML_INTDIR)\xmlwriter.obj\
+ $(XML_INTDIR)\xpath.obj\
+ $(XML_INTDIR)\xpointer.obj\
+ $(XML_INTDIR)\xmlstring.obj
+
+# Static libxml object files.
+XML_OBJS_A = $(XML_INTDIR_A)\c14n.obj\
+ $(XML_INTDIR_A)\catalog.obj\
+ $(XML_INTDIR_A)\chvalid.obj\
+ $(XML_INTDIR_A)\debugXML.obj\
+ $(XML_INTDIR_A)\dict.obj\
+ $(XML_INTDIR_A)\DOCBparser.obj\
+ $(XML_INTDIR_A)\encoding.obj\
+ $(XML_INTDIR_A)\entities.obj\
+ $(XML_INTDIR_A)\error.obj\
+ $(XML_INTDIR_A)\globals.obj\
+ $(XML_INTDIR_A)\hash.obj\
+ $(XML_INTDIR_A)\HTMLparser.obj\
+ $(XML_INTDIR_A)\HTMLtree.obj\
+ $(XML_INTDIR_A)\legacy.obj\
+ $(XML_INTDIR_A)\list.obj\
+ $(XML_INTDIR_A)\nanoftp.obj\
+ $(XML_INTDIR_A)\nanohttp.obj\
+ $(XML_INTDIR_A)\parser.obj\
+ $(XML_INTDIR_A)\parserInternals.obj\
+ $(XML_INTDIR_A)\pattern.obj\
+ $(XML_INTDIR_A)\relaxng.obj\
+ $(XML_INTDIR_A)\SAX.obj\
+ $(XML_INTDIR_A)\SAX2.obj\
+ $(XML_INTDIR_A)\threads.obj\
+ $(XML_INTDIR_A)\tree.obj\
+ $(XML_INTDIR_A)\uri.obj\
+ $(XML_INTDIR_A)\valid.obj\
+ $(XML_INTDIR_A)\xinclude.obj\
+ $(XML_INTDIR_A)\xlink.obj\
+ $(XML_INTDIR_A)\xmlIO.obj\
+ $(XML_INTDIR_A)\xmlmemory.obj\
+ $(XML_INTDIR_A)\xmlreader.obj\
+ $(XML_INTDIR_A)\xmlregexp.obj\
+ $(XML_INTDIR_A)\xmlsave.obj\
+ $(XML_INTDIR_A)\xmlschemas.obj\
+ $(XML_INTDIR_A)\xmlschemastypes.obj\
+ $(XML_INTDIR_A)\xmlunicode.obj\
+ $(XML_INTDIR_A)\xmlwriter.obj\
+ $(XML_INTDIR_A)\xpath.obj\
+ $(XML_INTDIR_A)\xpointer.obj\
+ $(XML_INTDIR_A)\xmlstring.obj
+
+# Xmllint and friends executables.
+UTILS = $(BINDIR)\xmllint.exe\
+ $(BINDIR)\xmlcatalog.exe\
+ $(BINDIR)\testAutomata.exe\
+ $(BINDIR)\testC14N.exe\
+ $(BINDIR)\testDocbook.exe\
+ $(BINDIR)\testHTML.exe\
+ $(BINDIR)\testReader.exe\
+ $(BINDIR)\testRelax.exe\
+ $(BINDIR)\testRegexp.exe\
+ $(BINDIR)\testSAX.exe\
+ $(BINDIR)\testSchemas.exe\
+ $(BINDIR)\testURI.exe\
+ $(BINDIR)\testXPath.exe
+
+
+!if "$(WITH_THREADS)" == "yes" || "$(WITH_THREADS)" == "ctls" || "$(WITH_THREADS)" == "native"
+UTILS = $(UTILS) $(BINDIR)\testThreadsWin32.exe
+!else if "$(WITH_THREADS)" == "posix"
+UTILS = $(UTILS) $(BINDIR)\testThreads.exe
+!endif
+
+
+all : libxml libxmla utils
+
+libxml : $(BINDIR)\$(XML_SO)
+
+libxmla : $(BINDIR)\$(XML_A)
+
+utils : $(UTILS)
+
+clean :
+ if exist $(XML_INTDIR) rmdir /S /Q $(XML_INTDIR)
+ if exist $(XML_INTDIR_A) rmdir /S /Q $(XML_INTDIR_A)
+ if exist $(UTILS_INTDIR) rmdir /S /Q $(UTILS_INTDIR)
+ if exist $(BINDIR) rmdir /S /Q $(BINDIR)
+
+distclean : clean
+ if exist config.* del config.*
+ if exist Makefile del Makefile
+
+rebuild : clean all
+
+install : all
+ if not exist $(INCPREFIX)\libxml mkdir $(INCPREFIX)\libxml
+ if not exist $(BINPREFIX) mkdir $(BINPREFIX)
+ if not exist $(LIBPREFIX) mkdir $(LIBPREFIX)
+ copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml
+ copy $(BINDIR)\$(XML_SO) $(SOPREFIX)
+ copy $(BINDIR)\$(XML_A) $(LIBPREFIX)
+ copy $(BINDIR)\$(XML_IMP) $(LIBPREFIX)
+ copy $(BINDIR)\*.exe $(BINPREFIX)
+ -copy $(BINDIR)\*.pdb $(BINPREFIX)
+
+# This is a target for me, to make a binary distribution. Not for the public use,
+# keep your hands off :-)
+BDVERSION = $(LIBXML_MAJOR_VERSION).$(LIBXML_MINOR_VERSION).$(LIBXML_MICRO_VERSION)
+BDPREFIX = $(XML_BASENAME)-$(BDVERSION).win32
+bindist : all
+ $(MAKE) /nologo PREFIX=$(BDPREFIX) BINPREFIX=$(BDPREFIX)\util install
+ cscript //NoLogo configure.js genreadme $(XML_BASENAME) $(BDVERSION) $(BDPREFIX)\readme.txt
+
+
+# Makes the output directory.
+$(BINDIR)\$(DUMMY) :
+ if not exist $(BINDIR) mkdir $(BINDIR)
+ touch $(BINDIR)\$(DUMMY)
+
+# Makes the libxml intermediate directory.
+$(XML_INTDIR)\$(DUMMY) :
+ if not exist $(XML_INTDIR) mkdir $(XML_INTDIR)
+ touch $(XML_INTDIR)\$(DUMMY)
+
+# Makes the static libxml intermediate directory.
+$(XML_INTDIR_A)\$(DUMMY) :
+ if not exist $(XML_INTDIR_A) mkdir $(XML_INTDIR_A)
+ touch $(XML_INTDIR_A)\$(DUMMY)
+
+# An implicit rule for libxml compilation.
+{$(XML_SRCDIR)}.c{$(XML_INTDIR)}.obj:
+ $(CC) $(CFLAGS) -n$(XML_INTDIR) -c $<
+
+# An implicit rule for static libxml compilation.
+{$(XML_SRCDIR)}.c{$(XML_INTDIR_A)}.obj:
+ $(CC) $(CFLAGS) -DLIBXML_STATIC -n$(XML_INTDIR_A)\ -c $<
+
+# Compiles libxml source. Uses the implicit rule for commands.
+$(XML_OBJS) : $(XML_INTDIR)\$(DUMMY)
+
+# Compiles static libxml source. Uses the implicit rule for commands.
+$(XML_OBJS_A) : $(XML_INTDIR_A)\$(DUMMY)
+
+#def4bcb.exe : def4bcb.c
+
+# Creates the export definition file (DEF) for libxml.
+#$(XML_INTDIR)\$(XML_DEF) : $(XML_INTDIR)\$(DUMMY) $(XML_DEF).src def4bcb.exe
+# $(CPP) $(CPPFLAGS) -o $(XML_INTDIR)\$(XML_DEF).tmp $(XML_DEF).src
+# def4bcb -msnames < $(XML_INTDIR)\$(XML_DEF).tmp > $(XML_INTDIR)\$(XML_DEF)
+
+# Creates the libxml shared object.
+$(BINDIR)\$(XML_SO) : $(BINDIR)\$(DUMMY) $(XML_OBJS)
+ $(LD) $(LDFLAGS) -Tpd -Gi c0d32.obj $(XML_OBJS),$(BINDIR)\$(XML_SO),,$(LIBS)
+
+#$(BINDIR)\$(XML_SO) : $(BINDIR)\$(DUMMY) $(XML_OBJS) $(XML_INTDIR)\$(XML_DEF)
+# $(LD) $(LDFLAGS) -Tpd -Gi c0d32.obj $(XML_OBJS),$(BINDIR)\$(XML_SO),,$(LIBS),$(XML_INTDIR)\$(XML_DEF)
+
+# Creates the libxml archive.
+$(BINDIR)\$(XML_A) : $(BINDIR)\$(DUMMY) $(XML_OBJS_A)
+ $(AR) $(BINDIR)\$(XML_A) $(ARFLAGS) /u $(XML_OBJS_A)
+
+# Makes the utils intermediate directory.
+$(UTILS_INTDIR)\$(DUMMY) :
+ if not exist $(UTILS_INTDIR) mkdir $(UTILS_INTDIR)
+ touch $(UTILS_INTDIR)\$(DUMMY)
+
+# An implicit rule for xmllint and friends.
+!if "$(STATIC)" == "1"
+{$(UTILS_SRCDIR)}.c{$(BINDIR)}.exe:
+ $(CC) -DLIBXML_STATIC -w -tWC $(CFLAGS) -o$(UTILS_INTDIR)\$&.obj -c $<
+ $(LD) $(LDFLAGS) c0x32.obj $(UTILS_INTDIR)\$&.obj,$@,,$(LIBS) $(XML_A)
+!else
+{$(UTILS_SRCDIR)}.c{$(BINDIR)}.exe:
+ $(CC) $(CFLAGS) -tWC -o$(UTILS_INTDIR)\$&.obj -c $<
+ $(LD) $(LDFLAGS) c0x32.obj $(UTILS_INTDIR)\$&.obj $(XML_IMP),$@,,$(LIBS)
+!endif
+
+# Builds xmllint and friends. Uses the implicit rule for commands.
+$(UTILS) : $(UTILS_INTDIR)\$(DUMMY) $(BINDIR)\$(DUMMY) $(BINDIR)\$(XML_SO) $(BINDIR)\$(XML_A)
+
+# Source dependences should be autogenerated somehow here, but how to
+# do it? I have no clue.
+
diff --git a/win32/Makefile.mingw b/win32/Makefile.mingw
new file mode 100644
index 0000000..c739ae1
--- /dev/null
+++ b/win32/Makefile.mingw
@@ -0,0 +1,322 @@
+# Makefile for libxml2, specific for Windows, GCC (mingw) and GNU make.
+#
+# Take a look at the beginning and modify the variables to suit your
+# environment. Having done that, you can do a
+#
+# nmake [all] to build the libxml and the accompanying utilities.
+# nmake clean to remove all compiler output files and return to a
+# clean state.
+# nmake rebuild to rebuild everything from scratch. This basically does
+# a 'nmake clean' and then a 'nmake all'.
+# nmake install to install the library and its header files.
+#
+# November 2002, Igor Zlatkovic <igor@zlatkovic.com>
+
+# There should never be a need to modify anything below this line.
+# ----------------------------------------------------------------
+
+AUTOCONF = .\config.mingw
+include $(AUTOCONF)
+
+# Names of various input and output components.
+XML_NAME = xml2
+XML_BASENAME = lib$(XML_NAME)
+XML_SO = $(XML_BASENAME).dll
+XML_IMP = $(XML_BASENAME).lib
+XML_A = $(XML_BASENAME).a
+
+# Place where we let the compiler put its output.
+BINDIR = bin.mingw
+XML_INTDIR = int.mingw
+XML_INTDIR_A = int.a.mingw
+UTILS_INTDIR = int.utils.mingw
+
+# The preprocessor and its options.
+CPP = gcc.exe -E
+CPPFLAGS += -I$(XML_SRCDIR)/include
+ifeq ($(WITH_THREADS),1)
+CPPFLAGS += -D_REENTRANT
+endif
+
+# The compiler and its options.
+CC = gcc.exe
+CFLAGS += -DWIN32 -D_WINDOWS -D_MBCS
+CFLAGS += -I$(XML_SRCDIR) -I$(XML_SRCDIR)/include -I$(INCPREFIX)
+ifneq ($(WITH_THREADS),no)
+CFLAGS += -D_REENTRANT
+endif
+ifeq ($(WITH_THREADS),yes)
+CFLAGS += -DHAVE_WIN32_THREADS -DHAVE_COMPILER_TLS
+endif
+ifeq ($(WITH_THREADS),ctls)
+CFLAGS += -DHAVE_WIN32_THREADS -DHAVE_COMPILER_TLS
+endif
+ifeq ($(WITH_THREADS),native)
+CFLAGS += -DHAVE_WIN32_THREADS
+endif
+ifeq ($(WITH_THREADS),posix)
+CFLAGS += -DHAVE_PTHREAD_H
+endif
+ifeq ($(WITH_ZLIB),1)
+CFLAGS += -DHAVE_ZLIB_H
+endif
+
+# The linker and its options.
+LD = gcc.exe
+LDFLAGS += -Wl,--major-image-version,$(LIBXML_MAJOR_VERSION)
+LDFLAGS += -Wl,--minor-image-version,$(LIBXML_MINOR_VERSION)
+LDFLAGS += -Wl,-L,$(BINDIR) -Wl,-L,$(LIBPREFIX)
+LIBS =
+ifeq ($(WITH_FTP),1)
+CFLAGS += -D_WINSOCKAPI_
+LIBS += -lwsock32
+endif
+ifeq ($(WITH_HTTP),1)
+CFLAGS += -D_WINSOCKAPI_
+LIBS += -lwsock32
+endif
+ifeq ($(WITH_ICONV),1)
+LIBS += -liconv
+endif
+ifeq ($(WITH_ZLIB),1)
+LIBS += -lzlib
+endif
+ifeq ($(WITH_THREADS),posix)
+LIBS += -lpthreadGC
+endif
+
+# The archiver and its options.
+AR = ar.exe
+ARFLAGS = -r
+
+# Optimisation and debug symbols.
+ifeq ($(DEBUG),1)
+CFLAGS += -D_DEBUG -g
+LDFLAGS +=
+else
+CFLAGS += -DNDEBUG -O2
+LDFLAGS +=
+endif
+
+
+# Libxml object files.
+XML_OBJS = $(XML_INTDIR)/c14n.o\
+ $(XML_INTDIR)/catalog.o\
+ $(XML_INTDIR)/chvalid.o\
+ $(XML_INTDIR)/debugXML.o\
+ $(XML_INTDIR)/dict.o\
+ $(XML_INTDIR)/DOCBparser.o\
+ $(XML_INTDIR)/encoding.o\
+ $(XML_INTDIR)/entities.o\
+ $(XML_INTDIR)/error.o\
+ $(XML_INTDIR)/globals.o\
+ $(XML_INTDIR)/hash.o\
+ $(XML_INTDIR)/HTMLparser.o\
+ $(XML_INTDIR)/HTMLtree.o\
+ $(XML_INTDIR)/legacy.o\
+ $(XML_INTDIR)/list.o\
+ $(XML_INTDIR)/nanoftp.o\
+ $(XML_INTDIR)/nanohttp.o\
+ $(XML_INTDIR)/parser.o\
+ $(XML_INTDIR)/parserInternals.o\
+ $(XML_INTDIR)/pattern.o\
+ $(XML_INTDIR)/relaxng.o\
+ $(XML_INTDIR)/SAX.o\
+ $(XML_INTDIR)/SAX2.o\
+ $(XML_INTDIR)/threads.o\
+ $(XML_INTDIR)/tree.o\
+ $(XML_INTDIR)/uri.o\
+ $(XML_INTDIR)/valid.o\
+ $(XML_INTDIR)/xinclude.o\
+ $(XML_INTDIR)/xlink.o\
+ $(XML_INTDIR)/xmlIO.o\
+ $(XML_INTDIR)/xmlmemory.o\
+ $(XML_INTDIR)/xmlreader.o\
+ $(XML_INTDIR)/xmlregexp.o\
+ $(XML_INTDIR)/xmlsave.o\
+ $(XML_INTDIR)/xmlschemas.o\
+ $(XML_INTDIR)/xmlschemastypes.o\
+ $(XML_INTDIR)/xmlunicode.o\
+ $(XML_INTDIR)/xmlwriter.o\
+ $(XML_INTDIR)/xpath.o\
+ $(XML_INTDIR)/xpointer.o\
+ $(XML_INTDIR)/xmlstring.o
+
+XML_SRCS = $(subst .o,.c,$(subst $(XML_INTDIR)/,$(XML_SRCDIR)/,$(XML_OBJS)))
+
+# Static libxml object files.
+XML_OBJS_A = $(XML_INTDIR_A)/c14n.o\
+ $(XML_INTDIR_A)/catalog.o\
+ $(XML_INTDIR_A)/chvalid.o\
+ $(XML_INTDIR_A)/debugXML.o\
+ $(XML_INTDIR_A)/dict.o\
+ $(XML_INTDIR_A)/DOCBparser.o\
+ $(XML_INTDIR_A)/encoding.o\
+ $(XML_INTDIR_A)/entities.o\
+ $(XML_INTDIR_A)/error.o\
+ $(XML_INTDIR_A)/globals.o\
+ $(XML_INTDIR_A)/hash.o\
+ $(XML_INTDIR_A)/HTMLparser.o\
+ $(XML_INTDIR_A)/HTMLtree.o\
+ $(XML_INTDIR_A)/legacy.o\
+ $(XML_INTDIR_A)/list.o\
+ $(XML_INTDIR_A)/nanoftp.o\
+ $(XML_INTDIR_A)/nanohttp.o\
+ $(XML_INTDIR_A)/parser.o\
+ $(XML_INTDIR_A)/parserInternals.o\
+ $(XML_INTDIR_A)/pattern.o\
+ $(XML_INTDIR_A)/relaxng.o\
+ $(XML_INTDIR_A)/SAX.o\
+ $(XML_INTDIR_A)/SAX2.o\
+ $(XML_INTDIR_A)/threads.o\
+ $(XML_INTDIR_A)/tree.o\
+ $(XML_INTDIR_A)/uri.o\
+ $(XML_INTDIR_A)/valid.o\
+ $(XML_INTDIR_A)/xinclude.o\
+ $(XML_INTDIR_A)/xlink.o\
+ $(XML_INTDIR_A)/xmlIO.o\
+ $(XML_INTDIR_A)/xmlmemory.o\
+ $(XML_INTDIR_A)/xmlreader.o\
+ $(XML_INTDIR_A)/xmlregexp.o\
+ $(XML_INTDIR_A)/xmlsave.o\
+ $(XML_INTDIR_A)/xmlschemas.o\
+ $(XML_INTDIR_A)/xmlschemastypes.o\
+ $(XML_INTDIR_A)/xmlunicode.o\
+ $(XML_INTDIR_A)/xmlwriter.o\
+ $(XML_INTDIR_A)/xpath.o\
+ $(XML_INTDIR_A)/xpointer.o\
+ $(XML_INTDIR_A)/xmlstring.o
+
+XML_SRCS_A = $(subst .o,.c,$(subst $(XML_INTDIR_A)/,$(XML_SRCDIR)/,$(XML_OBJS_A)))
+
+# Xmllint and friends executables.
+UTILS = $(BINDIR)/xmllint.exe\
+ $(BINDIR)/xmlcatalog.exe\
+ $(BINDIR)/testAutomata.exe\
+ $(BINDIR)/testC14N.exe\
+ $(BINDIR)/testDocbook.exe\
+ $(BINDIR)/testHTML.exe\
+ $(BINDIR)/testReader.exe\
+ $(BINDIR)/testRegexp.exe\
+ $(BINDIR)/testRelax.exe\
+ $(BINDIR)/testSAX.exe\
+ $(BINDIR)/testSchemas.exe\
+ $(BINDIR)/testURI.exe\
+ $(BINDIR)/testXPath.exe
+ifeq ($(WITH_THREADS),yes)
+UTILS += $(BINDIR)/testThreadsWin32.exe
+endif
+ifeq ($(WITH_THREADS),ctls)
+UTILS += $(BINDIR)/testThreadsWin32.exe
+endif
+ifeq ($(WITH_THREADS),native)
+UTILS += $(BINDIR)/testThreadsWin32.exe
+endif
+ifeq ($(WITH_THREADS),posix)
+UTILS += $(BINDIR)/testThreads.exe
+endif
+
+all : dep libxml libxmla utils
+
+libxml : $(BINDIR)/$(XML_SO)
+
+libxmla : $(BINDIR)/$(XML_A)
+
+utils : $(UTILS)
+
+clean :
+ cmd.exe /C if exist $(XML_INTDIR) rmdir /S /Q $(XML_INTDIR)
+ cmd.exe /C if exist $(XML_INTDIR_A) rmdir /S /Q $(XML_INTDIR_A)
+ cmd.exe /C if exist $(UTILS_INTDIR) rmdir /S /Q $(UTILS_INTDIR)
+ cmd.exe /C if exist $(BINDIR) rmdir /S /Q $(BINDIR)
+ cmd.exe /C if exist depends.mingw del depends.mingw
+
+distclean : clean
+ cmd.exe /C if exist config.* del config.*
+ cmd.exe /C if exist Makefile del Makefile
+
+rebuild : clean all
+
+install : all
+ cmd.exe /C if not exist $(INCPREFIX)\libxml mkdir $(INCPREFIX)\libxml
+ cmd.exe /C if not exist $(BINPREFIX) mkdir $(BINPREFIX)
+ cmd.exe /C if not exist $(LIBPREFIX) mkdir $(LIBPREFIX)
+ cmd.exe /C copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml
+ cmd.exe /C copy $(BINDIR)\$(XML_SO) $(SOPREFIX)
+ cmd.exe /C copy $(BINDIR)\$(XML_A) $(LIBPREFIX)
+ cmd.exe /C copy $(BINDIR)\$(XML_IMP) $(LIBPREFIX)
+ cmd.exe /C copy $(BINDIR)\*.exe $(BINPREFIX)
+
+# This is a target for me, to make a binary distribution. Not for the public use,
+# keep your hands off :-)
+BDVERSION = $(LIBXML_MAJOR_VERSION).$(LIBXML_MINOR_VERSION).$(LIBXML_MICRO_VERSION)
+BDPREFIX = $(XML_BASENAME)-$(BDVERSION).win32
+bindist : all
+ $(MAKE) PREFIX=$(BDPREFIX) BINPREFIX=$(BDPREFIX)/util install
+ cscript //NoLogo configure.js genreadme $(XML_BASENAME) $(BDVERSION) $(BDPREFIX)\readme.txt
+
+
+# Creates the dependency file
+dep :
+ $(CC) $(CFLAGS) -M $(XML_SRCS) > depends.mingw
+
+
+# Makes the output directory.
+$(BINDIR) :
+ cmd.exe /C if not exist $(BINDIR) mkdir $(BINDIR)
+
+
+# Makes the libxml intermediate directory.
+$(XML_INTDIR) :
+ cmd.exe /C if not exist $(XML_INTDIR) mkdir $(XML_INTDIR)
+
+# Makes the static libxml intermediate directory.
+$(XML_INTDIR_A) :
+ cmd.exe /C if not exist $(XML_INTDIR_A) mkdir $(XML_INTDIR_A)
+
+# An implicit rule for libxml compilation.
+$(XML_INTDIR)/%.o : $(XML_SRCDIR)/%.c
+ $(CC) $(CFLAGS) -o $@ -c $<
+
+# An implicit rule for static libxml compilation.
+$(XML_INTDIR_A)/%.o : $(XML_SRCDIR)/%.c
+ $(CC) $(CFLAGS) -DLIBXML_STATIC -o $@ -c $<
+
+
+# Compiles libxml source. Uses the implicit rule for commands.
+$(XML_OBJS) : $(XML_INTDIR)
+
+# Compiles static libxml source. Uses the implicit rule for commands.
+$(XML_OBJS_A) : $(XML_INTDIR_A)
+
+# Creates the libxml shared object.
+XMLSO_LDFLAGS = $(LDFLAGS) -shared -Wl,--dll -Wl,--out-implib,$(BINDIR)/$(XML_IMP)
+$(BINDIR)/$(XML_SO) : $(BINDIR) $(XML_OBJS)
+ $(LD) $(XMLSO_LDFLAGS) -o $(BINDIR)/$(XML_SO) $(XML_OBJS) $(LIBS)
+
+# Creates the libxml archive.
+$(BINDIR)/$(XML_A) : $(BINDIR) $(XML_OBJS_A)
+ $(AR) $(ARFLAGS) $(BINDIR)\$(XML_A) $(XML_OBJS_A)
+
+
+# Makes the utils intermediate directory.
+$(UTILS_INTDIR) :
+ cmd.exe /C if not exist $(UTILS_INTDIR) mkdir $(UTILS_INTDIR)
+
+# An implicit rule for xmllint and friends.
+ifeq ($(STATIC),1)
+$(BINDIR)/%.exe : $(UTILS_SRCDIR)/%.c
+ $(CC) -DLIBXML_STATIC $(CFLAGS) -o $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -c $<
+ $(LD) $(LDFLAGS) -o $@ $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -l$(XML_BASENAME) $(LIBS)
+else
+$(BINDIR)/%.exe : $(UTILS_SRCDIR)/%.c
+ $(CC) $(CFLAGS) -o $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -c $<
+ $(LD) $(LDFLAGS) -o $@ $(subst .c,.o,$(UTILS_INTDIR)/$(<F)) -l$(XML_BASENAME) $(LIBS)
+endif
+
+# Builds xmllint and friends. Uses the implicit rule for commands.
+$(UTILS) : $(UTILS_INTDIR) $(BINDIR) libxml libxmla
+
+# Source dependencies
+#-include depends.mingw
+
diff --git a/win32/Makefile.msvc b/win32/Makefile.msvc
new file mode 100644
index 0000000..17e5df6
--- /dev/null
+++ b/win32/Makefile.msvc
@@ -0,0 +1,303 @@
+# Makefile for libxml2, specific for Windows, MSVC and NMAKE.
+#
+# Take a look at the beginning and modify the variables to suit your
+# environment. Having done that, you can do a
+#
+# nmake [all] to build the libxml and the accompanying utilities.
+# nmake clean to remove all compiler output files and return to a
+# clean state.
+# nmake rebuild to rebuild everything from scratch. This basically does
+# a 'nmake clean' and then a 'nmake all'.
+# nmake install to install the library and its header files.
+#
+# March 2002, Igor Zlatkovic <igor@zlatkovic.com>
+
+# There should never be a need to modify anything below this line.
+# ----------------------------------------------------------------
+
+AUTOCONF = .\config.msvc
+!include $(AUTOCONF)
+
+# Names of various input and output components.
+XML_NAME = xml2
+XML_BASENAME = lib$(XML_NAME)
+XML_SO = $(XML_BASENAME).dll
+XML_IMP = $(XML_BASENAME).lib
+XML_DEF = $(XML_BASENAME).def
+XML_A = $(XML_BASENAME)_a.lib
+
+# Place where we let the compiler put its output.
+BINDIR = bin.msvc
+XML_INTDIR = int.msvc
+XML_INTDIR_A = int.a.msvc
+UTILS_INTDIR = int.utils.msvc
+
+# The preprocessor and its options.
+CPP = cl.exe /EP
+CPPFLAGS = /nologo /I$(XML_SRCDIR)\include
+!if "$(WITH_THREADS)" != "no"
+CPPFLAGS = $(CPPFLAGS) /D "_REENTRANT"
+!endif
+
+# The compiler and its options.
+CC = cl.exe
+CFLAGS = /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" /W1 $(CRUNTIME)
+CFLAGS = $(CFLAGS) /I$(XML_SRCDIR) /I$(XML_SRCDIR)\include /I$(INCPREFIX)
+!if "$(WITH_THREADS)" != "no"
+CFLAGS = $(CFLAGS) /D "_REENTRANT"
+!endif
+!if "$(WITH_THREADS)" == "yes" || "$(WITH_THREADS)" == "ctls"
+CFLAGS = $(CFLAGS) /D "HAVE_WIN32_THREADS" /D "HAVE_COMPILER_TLS"
+!else if "$(WITH_THREADS)" == "native"
+CFLAGS = $(CFLAGS) /D "HAVE_WIN32_THREADS"
+!else if "$(WITH_THREADS)" == "posix"
+CFLAGS = $(CFLAGS) /D "HAVE_PTHREAD_H"
+!endif
+!if "$(WITH_ZLIB)" == "1"
+CFLAGS = $(CFLAGS) /D "HAVE_ZLIB_H"
+!endif
+
+# The linker and its options.
+LD = link.exe
+LDFLAGS = /nologo /VERSION:$(LIBXML_MAJOR_VERSION).$(LIBXML_MINOR_VERSION)
+LDFLAGS = $(LDFLAGS) /LIBPATH:$(BINDIR) /LIBPATH:$(LIBPREFIX)
+LIBS =
+!if "$(WITH_FTP)" == "1" || "$(WITH_HTTP)" == "1"
+LIBS = $(LIBS) wsock32.lib
+!endif
+!if "$(WITH_ICONV)" == "1"
+LIBS = $(LIBS) iconv.lib
+!endif
+!if "$(WITH_ZLIB)" == "1"
+LIBS = $(LIBS) zlib.lib
+!endif
+!if "$(WITH_THREADS)" == "posix"
+LIBS = $(LIBS) pthreadVC.lib
+!endif
+
+# The archiver and its options.
+AR = lib.exe
+ARFLAGS = /nologo
+
+# Optimisation and debug symbols.
+!if "$(DEBUG)" == "1"
+CFLAGS = $(CFLAGS) /D "_DEBUG" /Od /Z7
+LDFLAGS = $(LDFLAGS) /DEBUG
+!else
+CFLAGS = $(CFLAGS) /D "NDEBUG" /O2
+LDFLAGS = $(LDFLAGS) /OPT:NOWIN98
+!endif
+
+# Libxml object files.
+XML_OBJS = $(XML_INTDIR)\c14n.obj\
+ $(XML_INTDIR)\catalog.obj\
+ $(XML_INTDIR)\chvalid.obj\
+ $(XML_INTDIR)\debugXML.obj\
+ $(XML_INTDIR)\dict.obj\
+ $(XML_INTDIR)\DOCBparser.obj\
+ $(XML_INTDIR)\encoding.obj\
+ $(XML_INTDIR)\entities.obj\
+ $(XML_INTDIR)\error.obj\
+ $(XML_INTDIR)\globals.obj\
+ $(XML_INTDIR)\hash.obj\
+ $(XML_INTDIR)\HTMLparser.obj\
+ $(XML_INTDIR)\HTMLtree.obj\
+ $(XML_INTDIR)\legacy.obj\
+ $(XML_INTDIR)\list.obj\
+ $(XML_INTDIR)\nanoftp.obj\
+ $(XML_INTDIR)\nanohttp.obj\
+ $(XML_INTDIR)\parser.obj\
+ $(XML_INTDIR)\parserInternals.obj\
+ $(XML_INTDIR)\pattern.obj\
+ $(XML_INTDIR)\relaxng.obj\
+ $(XML_INTDIR)\SAX2.obj\
+ $(XML_INTDIR)\SAX.obj\
+ $(XML_INTDIR)\threads.obj\
+ $(XML_INTDIR)\tree.obj\
+ $(XML_INTDIR)\uri.obj\
+ $(XML_INTDIR)\valid.obj\
+ $(XML_INTDIR)\xinclude.obj\
+ $(XML_INTDIR)\xlink.obj\
+ $(XML_INTDIR)\xmlIO.obj\
+ $(XML_INTDIR)\xmlmemory.obj\
+ $(XML_INTDIR)\xmlreader.obj\
+ $(XML_INTDIR)\xmlregexp.obj\
+ $(XML_INTDIR)\xmlsave.obj\
+ $(XML_INTDIR)\xmlschemas.obj\
+ $(XML_INTDIR)\xmlschemastypes.obj\
+ $(XML_INTDIR)\xmlunicode.obj\
+ $(XML_INTDIR)\xmlwriter.obj\
+ $(XML_INTDIR)\xpath.obj\
+ $(XML_INTDIR)\xpointer.obj\
+ $(XML_INTDIR)\xmlstring.obj
+
+# Static libxml object files.
+XML_OBJS_A = $(XML_INTDIR_A)\c14n.obj\
+ $(XML_INTDIR_A)\catalog.obj\
+ $(XML_INTDIR_A)\chvalid.obj\
+ $(XML_INTDIR_A)\debugXML.obj\
+ $(XML_INTDIR_A)\dict.obj\
+ $(XML_INTDIR_A)\DOCBparser.obj\
+ $(XML_INTDIR_A)\encoding.obj\
+ $(XML_INTDIR_A)\entities.obj\
+ $(XML_INTDIR_A)\error.obj\
+ $(XML_INTDIR_A)\globals.obj\
+ $(XML_INTDIR_A)\hash.obj\
+ $(XML_INTDIR_A)\HTMLparser.obj\
+ $(XML_INTDIR_A)\HTMLtree.obj\
+ $(XML_INTDIR_A)\legacy.obj\
+ $(XML_INTDIR_A)\list.obj\
+ $(XML_INTDIR_A)\nanoftp.obj\
+ $(XML_INTDIR_A)\nanohttp.obj\
+ $(XML_INTDIR_A)\parser.obj\
+ $(XML_INTDIR_A)\parserInternals.obj\
+ $(XML_INTDIR_A)\pattern.obj\
+ $(XML_INTDIR_A)\relaxng.obj\
+ $(XML_INTDIR_A)\SAX2.obj\
+ $(XML_INTDIR_A)\SAX.obj\
+ $(XML_INTDIR_A)\threads.obj\
+ $(XML_INTDIR_A)\tree.obj\
+ $(XML_INTDIR_A)\uri.obj\
+ $(XML_INTDIR_A)\valid.obj\
+ $(XML_INTDIR_A)\xinclude.obj\
+ $(XML_INTDIR_A)\xlink.obj\
+ $(XML_INTDIR_A)\xmlIO.obj\
+ $(XML_INTDIR_A)\xmlmemory.obj\
+ $(XML_INTDIR_A)\xmlreader.obj\
+ $(XML_INTDIR_A)\xmlregexp.obj\
+ $(XML_INTDIR_A)\xmlsave.obj\
+ $(XML_INTDIR_A)\xmlschemas.obj\
+ $(XML_INTDIR_A)\xmlschemastypes.obj\
+ $(XML_INTDIR_A)\xmlunicode.obj\
+ $(XML_INTDIR_A)\xmlwriter.obj\
+ $(XML_INTDIR_A)\xpath.obj\
+ $(XML_INTDIR_A)\xpointer.obj\
+ $(XML_INTDIR_A)\xmlstring.obj
+
+# Xmllint and friends executables.
+UTILS = $(BINDIR)\xmllint.exe\
+ $(BINDIR)\xmlcatalog.exe\
+ $(BINDIR)\testAutomata.exe\
+ $(BINDIR)\testC14N.exe\
+ $(BINDIR)\testDocbook.exe\
+ $(BINDIR)\testHTML.exe\
+ $(BINDIR)\testReader.exe\
+ $(BINDIR)\testRelax.exe\
+ $(BINDIR)\testRegexp.exe\
+ $(BINDIR)\testSAX.exe\
+ $(BINDIR)\testSchemas.exe\
+ $(BINDIR)\testURI.exe\
+ $(BINDIR)\testXPath.exe
+!if "$(WITH_THREADS)" == "yes" || "$(WITH_THREADS)" == "ctls" || "$(WITH_THREADS)" == "native"
+UTILS = $(UTILS) $(BINDIR)\testThreadsWin32.exe
+!else if "$(WITH_THREADS)" == "posix"
+UTILS = $(UTILS) $(BINDIR)\testThreads.exe
+!endif
+
+all : libxml libxmla utils
+
+libxml : $(BINDIR)\$(XML_SO)
+
+libxmla : $(BINDIR)\$(XML_A)
+
+utils : $(UTILS)
+
+clean :
+ if exist $(XML_INTDIR) rmdir /S /Q $(XML_INTDIR)
+ if exist $(XML_INTDIR_A) rmdir /S /Q $(XML_INTDIR_A)
+ if exist $(UTILS_INTDIR) rmdir /S /Q $(UTILS_INTDIR)
+ if exist $(BINDIR) rmdir /S /Q $(BINDIR)
+
+distclean : clean
+ if exist config.* del config.*
+ if exist Makefile del Makefile
+
+rebuild : clean all
+
+install : all
+ if not exist $(INCPREFIX)\libxml mkdir $(INCPREFIX)\libxml
+ if not exist $(BINPREFIX) mkdir $(BINPREFIX)
+ if not exist $(LIBPREFIX) mkdir $(LIBPREFIX)
+ copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml
+ copy $(BINDIR)\$(XML_SO) $(SOPREFIX)
+ copy $(BINDIR)\$(XML_A) $(LIBPREFIX)
+ copy $(BINDIR)\$(XML_IMP) $(LIBPREFIX)
+ copy $(BINDIR)\*.exe $(BINPREFIX)
+ -copy $(BINDIR)\*.pdb $(BINPREFIX)
+
+# This is a target for me, to make a binary distribution. Not for the public use,
+# keep your hands off :-)
+BDVERSION = $(LIBXML_MAJOR_VERSION).$(LIBXML_MINOR_VERSION).$(LIBXML_MICRO_VERSION)
+BDPREFIX = $(XML_BASENAME)-$(BDVERSION).win32
+bindist : all
+ $(MAKE) /nologo PREFIX=$(BDPREFIX) BINPREFIX=$(BDPREFIX)\util install
+ cscript //NoLogo configure.js genreadme $(XML_BASENAME) $(BDVERSION) $(BDPREFIX)\readme.txt
+
+
+# Makes the output directory.
+$(BINDIR) :
+ if not exist $(BINDIR) mkdir $(BINDIR)
+
+
+# Makes the libxml intermediate directory.
+$(XML_INTDIR) :
+ if not exist $(XML_INTDIR) mkdir $(XML_INTDIR)
+
+# Makes the static libxml intermediate directory.
+$(XML_INTDIR_A) :
+ if not exist $(XML_INTDIR_A) mkdir $(XML_INTDIR_A)
+
+# An implicit rule for libxml compilation.
+{$(XML_SRCDIR)}.c{$(XML_INTDIR)}.obj::
+ $(CC) $(CFLAGS) /Fo$(XML_INTDIR)\ /c $<
+
+# An implicit rule for static libxml compilation.
+{$(XML_SRCDIR)}.c{$(XML_INTDIR_A)}.obj::
+ $(CC) $(CFLAGS) /D "LIBXML_STATIC" /Fo$(XML_INTDIR_A)\ /c $<
+
+# Compiles libxml source. Uses the implicit rule for commands.
+$(XML_OBJS) : $(XML_INTDIR)
+
+# Compiles static libxml source. Uses the implicit rule for commands.
+$(XML_OBJS_A) : $(XML_INTDIR_A)
+
+# Creates the export definition file (DEF) for libxml.
+$(XML_INTDIR)\$(XML_DEF) : $(XML_INTDIR) $(XML_DEF).src
+ $(CPP) $(CPPFLAGS) $(XML_DEF).src > $(XML_INTDIR)\$(XML_DEF)
+
+# Creates the libxml shared object.
+$(BINDIR)\$(XML_SO) : $(BINDIR) $(XML_OBJS) $(XML_INTDIR)\$(XML_DEF)
+ $(LD) $(LDFLAGS) /DLL \
+ /IMPLIB:$(BINDIR)\$(XML_IMP) /OUT:$(BINDIR)\$(XML_SO) $(XML_OBJS) $(LIBS)
+
+#$(BINDIR)\$(XML_SO) : $(BINDIR) $(XML_OBJS) $(XML_INTDIR)\$(XML_DEF)
+# $(LD) $(LDFLAGS) /DLL /DEF:$(XML_INTDIR)\$(XML_DEF) \
+# /IMPLIB:$(BINDIR)\$(XML_IMP) /OUT:$(BINDIR)\$(XML_SO) $(XML_OBJS) $(LIBS)
+
+# Creates the libxml archive.
+$(BINDIR)\$(XML_A) : $(BINDIR) $(XML_OBJS_A)
+ $(AR) $(ARFLAGS) /OUT:$(BINDIR)\$(XML_A) $(XML_OBJS_A)
+
+
+# Makes the utils intermediate directory.
+$(UTILS_INTDIR) :
+ if not exist $(UTILS_INTDIR) mkdir $(UTILS_INTDIR)
+
+# An implicit rule for xmllint and friends.
+!if "$(STATIC)" == "1"
+{$(UTILS_SRCDIR)}.c{$(BINDIR)}.exe:
+ $(CC) /D "LIBXML_STATIC" $(CFLAGS) /Fo$(UTILS_INTDIR)\ /c $<
+ $(LD) $(LDFLAGS) /OUT:$@ $(XML_A) $(LIBS) $(UTILS_INTDIR)\$(<B).obj
+!else
+{$(UTILS_SRCDIR)}.c{$(BINDIR)}.exe:
+ $(CC) $(CFLAGS) /Fo$(UTILS_INTDIR)\ /c $<
+ $(LD) $(LDFLAGS) /OUT:$@ $(XML_IMP) $(LIBS) $(UTILS_INTDIR)\$(<B).obj
+!endif
+
+# Builds xmllint and friends. Uses the implicit rule for commands.
+$(UTILS) : $(UTILS_INTDIR) $(BINDIR) libxml libxmla
+
+
+# Source dependences should be autogenerated somehow here, but how to
+# do it? I have no clue.
+
diff --git a/win32/Readme.txt b/win32/Readme.txt
new file mode 100644
index 0000000..6b3eddd
--- /dev/null
+++ b/win32/Readme.txt
@@ -0,0 +1,226 @@
+
+ Windows port
+ ============
+
+This directory contains the files required to build this software on the
+native Windows platform. This is not a place to look for help if you are
+using a POSIX emulator, such as Cygwin. Check the Unix instructions for
+that.
+
+
+
+CONTENTS
+========
+
+1. General
+ 1.1 Building From the Command-Line
+ 1.2 Configuring The Source
+ 1.3 Compiling
+ 1.4 Installing
+
+2. Compiler Specifics
+ 2.1 Microsoft Visual C/C++
+ 2.1 GNU C/C++, Mingw Edition
+ 2.2 Borland C++ Builder
+ 2.2.1 Building with iconv support
+ 2.2.2 Compatability problems with MSVC (and probably CYGWIN)
+ 2.2.3 Other caveats
+
+
+
+
+1. General
+==========
+
+
+1.1 Building From The Command-Line
+----------------------------------
+
+This is the easiest, preferred and currently supported method. It can
+be that a subdirectory of the directory where this file resides
+contains project files for some IDE. If you want to use that, please
+refer to the readme file within that subdirectory.
+
+In order to build from the command-line you need to make sure that
+your compiler works from the command line. This is not always the
+case, often the required environment variables are missing. If you are
+not sure, test if this works first. If it doesn't, you will first have
+to configure your compiler suite to run from the command-line - please
+refer to your compiler's documentation regarding that.
+
+The first thing you want to do is configure the source. You can have
+the configuration script do this automatically for you. The
+configuration script is written in JScript, a Microsoft's
+implementation of the ECMA scripting language. Almost every Windows
+machine can execute this through the Windows Scripting Host. If your
+system lacks the ability to execute JScript for some reason, you must
+perform the configuration manually and you are on your own with that.
+
+The second step is compiling the source and, optionally, installing it
+to the location of your choosing.
+
+
+1.2 Configuring The Source
+--------------------------
+
+The configuration script accepts numerous options. Some of these
+affect features which will be available in the compiled software,
+others affect the way the software is built and installed. To see a
+full list of options supported by the configuration script, run
+
+ cscript configure.js help
+
+from the win32 subdirectory. The configuration script will present you
+the options it accepts and give a biref explanation of these. In every
+case you will have two sets of options. The first set is specific to
+the software you are building and the second one is specific to the
+Windows port.
+
+Once you have decided which options suit you, run the script with that
+options. Here is an example:
+
+ cscript configure.js compiler=msvc prefix=c:\opt
+ include=c:\opt\include lib=c:\opt\lib debug=yes
+
+The previous example will configure the process to use the Microsoft's
+compiler, install the library in c:\opt, use c:\opt\include and
+c:\opt\lib as additional search paths for the compiler and the linker
+and build executables with debug symbols.
+
+Note: Please do not use path names which contain spaces. This will
+fail. Allowing this would require me to put almost everything in the
+Makefile in quotas and that looks quite ugly with my
+syntax-highlighting engine. If you absolutely must use spaces in paths
+send me an email and tell me why. If there are enough of you out there
+who need this, or if a single one has a very good reason, I will
+modify the Makefile to allow spaces in paths.
+
+
+1.3 Compiling
+-------------
+
+After the configuration stage has been completed, you want to build
+the software. You will have to use the make tool which comes with
+your compiler. If you, for example, configured the source to build
+with Microsoft's MSVC compiler, you would use the NMAKE utility. If
+you configured it to build with GNU C compiler, mingw edition, you
+would use the GNU make. Assuming you use MSVC, type
+
+ nmake /f Makefile.msvc
+
+and if you use MinGW, you would type
+
+ make -f Makefile.mingw
+
+and if you use Borland's compiler, you would type
+
+ bmake -f Makefile.bcb
+
+in the win32 subdirectory. When the building completes, you will find
+the executable files in win32\bin.* directory, where * stands for the
+name of the compiler you have used.
+
+
+1.4 Installing
+--------------
+
+You can install the software into the directory you specified to the
+configure script during the configure stage by typing (with MSVC in
+this example)
+
+ nmake /f Makefile.msvc install
+
+That would be it, enjoy.
+
+
+
+
+
+2. Compiler Specifics
+=====================
+
+
+2.1 Microsoft Visual C/C++
+--------------------------
+
+If you use the compiler which comes with Visual Studio .NET, note that
+it will link to its own C-runtime named msvcr70.dll or msvcr71.dll. This
+file is not available on any machine which doesn't have Visual Studio
+.NET installed.
+
+
+2.2 GNU C/C++, Mingw edition
+----------------------------
+
+When specifying paths to configure.js, please use slashes instead of
+backslashes for directory separation. Sometimes Mingw needs this. If
+this is the case, and you specify backslashes, then the compiler will
+complain about not finding necessary header files.
+
+
+2.2 Borland C++ Builder
+-----------------------
+
+To compile libxml2 with the BCB6 compiler and associated tools, just follow
+the basic instructions found in this file file. Be sure to specify
+the "compiler=bcb" option when running the configure script. To compile the
+library and test programs, just type
+
+ make -fMakefile.bcb
+
+That should be all that's required. But there are a few other things to note:
+
+2.2.1 Building with iconv support
+
+If you configure libxml2 to include iconv support, you will obviously need to
+obtain the iconv library and include files. To get them, just follow the links
+at http://www.gnu.org/software/libiconv/ - there are pre-compiled Win32
+versions available, but note that these where built with MSVC. Hence the
+supplied import library is in COFF format rather than OMF format. You can
+convert this library by using Borland's COFF2OMF utility, or use IMPLIB to
+build a new import library from the DLL. Alternatively, it is possible to
+obtain the iconv source, and build the DLL using the Borland compiler.
+
+There is a minor problem with the header files for iconv - they expect a
+macro named "EILSEQ" in errno.h, but this is not defined in the Borland
+headers, and its absence can cause problems. To circumvent this problem, I
+define EILSEQ=2 in Makefile.bcb. The value "2" is the value for ENOFILE (file
+not found). This should not have any disastrous side effects beyond possibly
+displaying a misleading error message in certain situations.
+
+2.2.2 Compatability problems with MSVC (and probably CYGWIN)
+
+A libxml2 DLL generated by BCB is callable from MSVC programs, but there is a
+minor problem with the names of the symbols exported from the library. The
+Borland compiler, by default, prepends an underscore character to global
+identifiers (functions and global variables) when generating object files.
+Hence the function "xmlAddChild" is added to the DLL with the name
+"_xmlAddChild". The MSVC compiler does not have this behaviour, and looks for
+the unadorned name. I currently circumvent this problem by writing a .def file
+which causes BOTH the adorned and unadorned names to be exported from the DLL.
+This behaviour may not be supported in the future.
+
+An even worse problem is that of generating an import library for the DLL. The
+Borland-generated DLL is in OMF format. MSVC expects libraries in COFF format,
+but they don't provide a "OMF2COFF" utility, or even the equivalent of
+Borland's IMPLIB utility. But it is possible to create an import lib from the
+.def file, using the command:
+ LIB /DEF:libxml2.def
+
+If you don't have the .def file, it's possible to create one manually. Use
+DUMPBIN /EXPORTS /OUT:libxml2.tmp libxml2.dll to get a list of the exported
+names, and edit this into .def file format.
+
+A similar problem is likely with Cygwin.
+
+2.2.3 Other caveats
+
+We have tested this only with BCB6, Professional Edition, and BCB 5.5 free
+command-line tools.
+
+
+
+Authors: Igor Zlatkovic <igor@zlatkovic.com>
+ Eric Zurcher <Eric.Zurcher@csiro.au>
+
+
diff --git a/win32/configure.js b/win32/configure.js
new file mode 100644
index 0000000..df3836d
--- /dev/null
+++ b/win32/configure.js
@@ -0,0 +1,639 @@
+/* Configure script for libxml, specific for Windows with Scripting Host.
+ *
+ * This script will configure the libxml build process and create necessary files.
+ * Run it with an 'help', or an invalid option and it will tell you what options
+ * it accepts.
+ *
+ * March 2002, Igor Zlatkovic <igor@zlatkovic.com>
+ */
+
+/* The source directory, relative to the one where this file resides. */
+var srcDirXml = "..";
+var srcDirUtils = "..";
+/* Base name of what we are building. */
+var baseName = "libxml2";
+/* Configure file which contains the version and the output file where
+ we can store our build configuration. */
+var configFile = srcDirXml + "\\configure.in";
+var versionFile = ".\\config.msvc";
+/* Input and output files regarding the libxml features. */
+var optsFileIn = srcDirXml + "\\include\\libxml\\xmlversion.h.in";
+var optsFile = srcDirXml + "\\include\\libxml\\xmlversion.h";
+/* Version strings for the binary distribution. Will be filled later
+ in the code. */
+var verMajor;
+var verMinor;
+var verMicro;
+var verMicroSuffix;
+/* Libxml features. */
+var withTrio = false;
+var withThreads = "native";
+var withFtp = true;
+var withHttp = true;
+var withHtml = true;
+var withC14n = true;
+var withCatalog = true;
+var withDocb = true;
+var withXpath = true;
+var withXptr = true;
+var withXinclude = true;
+var withIconv = true;
+var withIso8859x = false;
+var withZlib = false;
+var withDebug = true;
+var withMemDebug = false;
+var withSchemas = true;
+var withRegExps = true;
+var withTree = true;
+var withReader = true;
+var withWriter = true;
+var withWalker = true;
+var withPattern = true;
+var withPush = true;
+var withValid = true;
+var withSax1 = true;
+var withLegacy = true;
+var withOutput = true;
+var withPython = false;
+/* Win32 build options. */
+var dirSep = "\\";
+var compiler = "msvc";
+var cruntime = "/MD";
+var dynruntime = true;
+var buildDebug = 0;
+var buildStatic = 0;
+var buildPrefix = ".";
+var buildBinPrefix = "";
+var buildIncPrefix = "";
+var buildLibPrefix = "";
+var buildSoPrefix = "";
+var buildInclude = ".";
+var buildLib = ".";
+/* Local stuff */
+var error = 0;
+
+/* Helper function, transforms the option variable into the 'Enabled'
+ or 'Disabled' string. */
+function boolToStr(opt)
+{
+ if (opt == false)
+ return "no";
+ else if (opt == true)
+ return "yes";
+ error = 1;
+ return "*** undefined ***";
+}
+
+/* Helper function, transforms the argument string into a boolean
+ value. */
+function strToBool(opt)
+{
+ if (opt == 0 || opt == "no")
+ return false;
+ else if (opt == 1 || opt == "yes")
+ return true;
+ error = 1;
+ return false;
+}
+
+/* Displays the details about how to use this script. */
+function usage()
+{
+ var txt;
+ txt = "Usage:\n";
+ txt += " cscript " + WScript.ScriptName + " <options>\n";
+ txt += " cscript " + WScript.ScriptName + " help\n\n";
+ txt += "Options can be specified in the form <option>=<value>, where the value is\n";
+ txt += "either 'yes' or 'no', if not stated otherwise.\n\n";
+ txt += "\nXML processor options, default value given in parentheses:\n\n";
+ txt += " trio: Enable TRIO string manipulator (" + (withTrio? "yes" : "no") + ")\n";
+ txt += " threads: Enable thread safety [no|ctls|native|posix] (" + (withThreads) + ") \n";
+ txt += " ftp: Enable FTP client (" + (withFtp? "yes" : "no") + ")\n";
+ txt += " http: Enable HTTP client (" + (withHttp? "yes" : "no") + ")\n";
+ txt += " html: Enable HTML processor (" + (withHtml? "yes" : "no") + ")\n";
+ txt += " c14n: Enable C14N support (" + (withC14n? "yes" : "no") + ")\n";
+ txt += " catalog: Enable catalog support (" + (withCatalog? "yes" : "no") + ")\n";
+ txt += " docb: Enable DocBook support (" + (withDocb? "yes" : "no") + ")\n";
+ txt += " xpath: Enable XPath support (" + (withXpath? "yes" : "no") + ")\n";
+ txt += " xptr: Enable XPointer support (" + (withXptr? "yes" : "no") + ")\n";
+ txt += " xinclude: Enable XInclude support (" + (withXinclude? "yes" : "no") + ")\n";
+ txt += " iconv: Enable iconv support (" + (withIconv? "yes" : "no") + ")\n";
+ txt += " iso8859x: Enable ISO8859X support (" + (withIso8859x? "yes" : "no") + ")\n";
+ txt += " zlib: Enable zlib support (" + (withZlib? "yes" : "no") + ")\n";
+ txt += " xml_debug: Enable XML debbugging module (" + (withDebug? "yes" : "no") + ")\n";
+ txt += " mem_debug: Enable memory debugger (" + (withMemDebug? "yes" : "no") + ")\n";
+ txt += " regexps: Enable regular expressions (" + (withRegExps? "yes" : "no") + ")\n";
+ txt += " tree: Enable tree api (" + (withTree? "yes" : "no") + ")\n";
+ txt += " reader: Enable xmlReader api (" + (withReader? "yes" : "no") + ")\n";
+ txt += " writer: Enable xmlWriter api (" + (withWriter? "yes" : "no") + ")\n";
+ txt += " walker: Enable xmlDocWalker api (" + (withWalker? "yes" : "no") + ")\n";
+ txt += " pattern: Enable xmlPattern api (" + (withPattern? "yes" : "no") + ")\n";
+ txt += " push: Enable push api (" + (withPush? "yes" : "no") + ")\n";
+ txt += " valid: Enable DTD validation support (" + (withValid? "yes" : "no") + ")\n";
+ txt += " sax1: Enable SAX1 api (" + (withSax1? "yes" : "no") + ")\n";
+ 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 += " 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";
+ txt += " cruntime: C-runtime compiler option (only msvc) (" + cruntime + ")\n";
+ txt += " dynruntime: Use the dynamic RTL (only bcb) (" + dynruntime + ")\n";
+ txt += " debug: Build unoptimised debug executables (" + (buildDebug? "yes" : "no") + ")\n";
+ txt += " static: Link xmllint statically to libxml2 (" + (buildStatic? "yes" : "no") + ")\n";
+ txt += " prefix: Base directory for the installation (" + buildPrefix + ")\n";
+ txt += " bindir: Directory where xmllint and friends should be installed\n";
+ txt += " (" + buildBinPrefix + ")\n";
+ txt += " incdir: Directory where headers should be installed\n";
+ txt += " (" + buildIncPrefix + ")\n";
+ txt += " libdir: Directory where static and import libraries should be\n";
+ txt += " installed (" + buildLibPrefix + ")\n";
+ txt += " sodir: Directory where shared libraries should be installed\n";
+ txt += " (" + buildSoPrefix + ")\n";
+ txt += " include: Additional search path for the compiler, particularily\n";
+ txt += " where iconv headers can be found (" + buildInclude + ")\n";
+ txt += " lib: Additional search path for the linker, particularily\n";
+ txt += " where iconv library can be found (" + buildLib + ")\n";
+ WScript.Echo(txt);
+}
+
+/* Discovers the version we are working with by reading the apropriate
+ configuration file. Despite its name, this also writes the configuration
+ file included by our makefile. */
+function discoverVersion()
+{
+ var fso, cf, vf, ln, s;
+ fso = new ActiveXObject("Scripting.FileSystemObject");
+ cf = fso.OpenTextFile(configFile, 1);
+ if (compiler == "msvc")
+ versionFile = ".\\config.msvc";
+ else if (compiler == "mingw")
+ versionFile = ".\\config.mingw";
+ else if (compiler == "bcb")
+ versionFile = ".\\config.bcb";
+ vf = fso.CreateTextFile(versionFile, true);
+ vf.WriteLine("# " + versionFile);
+ vf.WriteLine("# This file is generated automatically by " + WScript.ScriptName + ".");
+ vf.WriteBlankLines(1);
+ while (cf.AtEndOfStream != true) {
+ ln = cf.ReadLine();
+ s = new String(ln);
+ if (s.search(/^LIBXML_MAJOR_VERSION=/) != -1) {
+ vf.WriteLine(s);
+ verMajor = s.substring(s.indexOf("=") + 1, s.length)
+ } else if(s.search(/^LIBXML_MINOR_VERSION=/) != -1) {
+ vf.WriteLine(s);
+ verMinor = s.substring(s.indexOf("=") + 1, s.length)
+ } else if(s.search(/^LIBXML_MICRO_VERSION=/) != -1) {
+ vf.WriteLine(s);
+ verMicro = s.substring(s.indexOf("=") + 1, s.length)
+ } else if(s.search(/^LIBXML_MICRO_VERSION_SUFFIX=/) != -1) {
+ vf.WriteLine(s);
+ verMicroSuffix = s.substring(s.indexOf("=") + 1, s.length)
+ }
+ }
+ cf.Close();
+ vf.WriteLine("XML_SRCDIR=" + srcDirXml);
+ vf.WriteLine("UTILS_SRCDIR=" + srcDirUtils);
+ vf.WriteLine("WITH_TRIO=" + (withTrio? "1" : "0"));
+ vf.WriteLine("WITH_THREADS=" + withThreads);
+ vf.WriteLine("WITH_FTP=" + (withFtp? "1" : "0"));
+ vf.WriteLine("WITH_HTTP=" + (withHttp? "1" : "0"));
+ vf.WriteLine("WITH_HTML=" + (withHtml? "1" : "0"));
+ vf.WriteLine("WITH_C14N=" + (withC14n? "1" : "0"));
+ vf.WriteLine("WITH_CATALOG=" + (withCatalog? "1" : "0"));
+ vf.WriteLine("WITH_DOCB=" + (withDocb? "1" : "0"));
+ vf.WriteLine("WITH_XPATH=" + (withXpath? "1" : "0"));
+ vf.WriteLine("WITH_XPTR=" + (withXptr? "1" : "0"));
+ vf.WriteLine("WITH_XINCLUDE=" + (withXinclude? "1" : "0"));
+ vf.WriteLine("WITH_ICONV=" + (withIconv? "1" : "0"));
+ vf.WriteLine("WITH_ISO8859X=" + (withIso8859x? "1" : "0"));
+ vf.WriteLine("WITH_ZLIB=" + (withZlib? "1" : "0"));
+ 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_REGEXPS=" + (withRegExps? "1" : "0"));
+ vf.WriteLine("WITH_TREE=" + (withTree? "1" : "0"));
+ vf.WriteLine("WITH_READER=" + (withReader? "1" : "0"));
+ vf.WriteLine("WITH_WRITER=" + (withWriter? "1" : "0"));
+ vf.WriteLine("WITH_WALKER=" + (withWalker? "1" : "0"));
+ vf.WriteLine("WITH_PATTERN=" + (withPattern? "1" : "0"));
+ vf.WriteLine("WITH_PUSH=" + (withPush? "1" : "0"));
+ vf.WriteLine("WITH_VALID=" + (withValid? "1" : "0"));
+ vf.WriteLine("WITH_SAX1=" + (withSax1? "1" : "0"));
+ vf.WriteLine("WITH_LEGACY=" + (withLegacy? "1" : "0"));
+ vf.WriteLine("WITH_OUTPUT=" + (withOutput? "1" : "0"));
+ vf.WriteLine("WITH_PYTHON=" + (withPython? "1" : "0"));
+ vf.WriteLine("DEBUG=" + (buildDebug? "1" : "0"));
+ vf.WriteLine("STATIC=" + (buildStatic? "1" : "0"));
+ vf.WriteLine("PREFIX=" + buildPrefix);
+ vf.WriteLine("BINPREFIX=" + buildBinPrefix);
+ vf.WriteLine("INCPREFIX=" + buildIncPrefix);
+ vf.WriteLine("LIBPREFIX=" + buildLibPrefix);
+ vf.WriteLine("SOPREFIX=" + buildSoPrefix);
+ if (compiler == "msvc") {
+ vf.WriteLine("INCLUDE=$(INCLUDE);" + buildInclude);
+ vf.WriteLine("LIB=$(LIB);" + buildLib);
+ vf.WriteLine("CRUNTIME=" + cruntime);
+ } else if (compiler == "mingw") {
+ vf.WriteLine("INCLUDE+=;" + buildInclude);
+ vf.WriteLine("LIB+=;" + buildLib);
+ } else if (compiler == "bcb") {
+ vf.WriteLine("INCLUDE=" + buildInclude);
+ vf.WriteLine("LIB=" + buildLib);
+ vf.WriteLine("DYNRUNTIME=" + (dynruntime? "1" : "0"));
+ }
+ vf.Close();
+}
+
+/* Configures libxml. This one will generate xmlversion.h from xmlversion.h.in
+ taking what the user passed on the command line into account. */
+function configureLibxml()
+{
+ var fso, ofi, of, ln, s;
+ fso = new ActiveXObject("Scripting.FileSystemObject");
+ ofi = fso.OpenTextFile(optsFileIn, 1);
+ of = fso.CreateTextFile(optsFile, true);
+ while (ofi.AtEndOfStream != true) {
+ ln = ofi.ReadLine();
+ s = new String(ln);
+ if (s.search(/\@VERSION\@/) != -1) {
+ of.WriteLine(s.replace(/\@VERSION\@/,
+ verMajor + "." + verMinor + "." + verMicro + verMicroSuffix));
+ } else if (s.search(/\@LIBXML_VERSION_NUMBER\@/) != -1) {
+ of.WriteLine(s.replace(/\@LIBXML_VERSION_NUMBER\@/,
+ verMajor*10000 + verMinor*100 + verMicro*1));
+ } else if (s.search(/\@WITH_TRIO\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_TRIO\@/, withTrio? "1" : "0"));
+ } else if (s.search(/\@WITH_THREADS\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_THREADS\@/, withThreads == "no"? "0" : "1"));
+ } else if (s.search(/\@WITH_FTP\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_FTP\@/, withFtp? "1" : "0"));
+ } else if (s.search(/\@WITH_HTTP\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_HTTP\@/, withHttp? "1" : "0"));
+ } else if (s.search(/\@WITH_HTML\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_HTML\@/, withHtml? "1" : "0"));
+ } else if (s.search(/\@WITH_C14N\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_C14N\@/, withC14n? "1" : "0"));
+ } else if (s.search(/\@WITH_CATALOG\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_CATALOG\@/, withCatalog? "1" : "0"));
+ } else if (s.search(/\@WITH_DOCB\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_DOCB\@/, withDocb? "1" : "0"));
+ } else if (s.search(/\@WITH_XPATH\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_XPATH\@/, withXpath? "1" : "0"));
+ } else if (s.search(/\@WITH_XPTR\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_XPTR\@/, withXptr? "1" : "0"));
+ } else if (s.search(/\@WITH_XINCLUDE\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_XINCLUDE\@/, withXinclude? "1" : "0"));
+ } else if (s.search(/\@WITH_ICONV\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_ICONV\@/, withIconv? "1" : "0"));
+ } else if (s.search(/\@WITH_ISO8859X\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_ISO8859X\@/, withIso8859x? "1" : "0"));
+ } else if (s.search(/\@WITH_ZLIB\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_ZLIB\@/, withZlib? "1" : "0"));
+ } else if (s.search(/\@WITH_DEBUG\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_DEBUG\@/, withDebug? "1" : "0"));
+ } else if (s.search(/\@WITH_MEM_DEBUG\@/) != -1) {
+ 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_REGEXPS\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_REGEXPS\@/, withRegExps? "1" : "0"));
+ } else if (s.search(/\@WITH_TREE\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_TREE\@/, withTree? "1" : "0"));
+ } else if (s.search(/\@WITH_READER\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_READER\@/, withReader? "1" : "0"));
+ } else if (s.search(/\@WITH_WRITER\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_WRITER\@/, withWriter? "1" : "0"));
+ } else if (s.search(/\@WITH_WALKER\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_WALKER\@/, withWalker? "1" : "0"));
+ } else if (s.search(/\@WITH_PATTERN\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_PATTERN\@/, withPattern? "1" : "0"));
+ } else if (s.search(/\@WITH_PUSH\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_PUSH\@/, withPush? "1" : "0"));
+ } else if (s.search(/\@WITH_VALID\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_VALID\@/, withValid? "1" : "0"));
+ } else if (s.search(/\@WITH_SAX1\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_SAX1\@/, withSax1? "1" : "0"));
+ } else if (s.search(/\@WITH_LEGACY\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_LEGACY\@/, withLegacy? "1" : "0"));
+ } else if (s.search(/\@WITH_OUTPUT\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_OUTPUT\@/, withOutput? "1" : "0"));
+ } else
+ of.WriteLine(ln);
+ }
+ ofi.Close();
+ of.Close();
+}
+/* Configures Python bindings. Otherwise identical to the above */
+function configureLibxmlPy()
+{
+ var pyOptsFileIn = srcDirXml + "\\python\\setup.py.in";
+ var pyOptsFile = srcDirXml + "\\python\\setup.py";
+ var fso, ofi, of, ln, s;
+ fso = new ActiveXObject("Scripting.FileSystemObject");
+ ofi = fso.OpenTextFile(pyOptsFileIn, 1);
+ of = fso.CreateTextFile(pyOptsFile, true);
+ while (ofi.AtEndOfStream != true) {
+ ln = ofi.ReadLine();
+ s = new String(ln);
+ if (s.search(/\@LIBXML_VERSION\@/) != -1) {
+ of.WriteLine(s.replace(/\@LIBXML_VERSION\@/,
+ verMajor + "." + verMinor + "." + verMicro));
+ } else if (s.search(/\@prefix\@/) != -1) {
+ of.WriteLine(s.replace(/\@prefix\@/, buildPrefix));
+ } else if (s.search(/\@WITH_THREADS\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_THREADS\@/, withThreads == "no"? "0" : "1"));
+ } else
+ of.WriteLine(ln);
+ }
+ ofi.Close();
+ of.Close();
+}
+
+/* Creates the readme file for the binary distribution of 'bname', for the
+ version 'ver' in the file 'file'. This one is called from the Makefile when
+ generating a binary distribution. The parameters are passed by make. */
+function genReadme(bname, ver, file)
+{
+ var fso, f;
+ fso = new ActiveXObject("Scripting.FileSystemObject");
+ f = fso.CreateTextFile(file, true);
+ f.WriteLine(" " + bname + " " + ver);
+ f.WriteLine(" --------------");
+ f.WriteBlankLines(1);
+ f.WriteLine(" This is " + bname + ", version " + ver + ", binary package for the native Win32/IA32");
+ f.WriteLine("platform.");
+ f.WriteBlankLines(1);
+ f.WriteLine(" The directory named 'include' contains the header files. Place its");
+ f.WriteLine("contents somewhere where it can be found by the compiler.");
+ f.WriteLine(" The directory which answers to the name 'lib' contains the static and");
+ f.WriteLine("dynamic libraries. Place them somewhere where they can be found by the");
+ f.WriteLine("linker. The files whose names end with '_a.lib' are aimed for static");
+ f.WriteLine("linking, the other files are lib/dll pairs.");
+ f.WriteLine(" The directory called 'util' contains various programs which count as a");
+ f.WriteLine("part of " + bname + ".");
+ f.WriteBlankLines(1);
+ f.WriteLine(" If you plan to develop your own programme, in C, which uses " + bname + ", then");
+ f.WriteLine("you should know what to do with the files in the binary package. If you don't,");
+ f.WriteLine("know this, then please, please do some research on how to use a");
+ f.WriteLine("third-party library in a C programme. The topic belongs to the very basics");
+ f.WriteLine("and you will not be able to do much without that knowledge.");
+ f.WriteBlankLines(1);
+ f.WriteLine(" If you wish to use " + bname + " solely through the supplied utilities, such as");
+ f.WriteLine("xmllint or xsltproc, then all you need to do is place the");
+ f.WriteLine("contents of the 'lib' and 'util' directories from the binary package in a");
+ f.WriteLine("directory on your disc which is mentioned in your PATH environment");
+ f.WriteLine("variable. You can use an existing directory which is allready in the");
+ f.WriteLine("path, such as 'C:\WINDOWS', or 'C:\WINNT'. You can also create a new");
+ f.WriteLine("directory for " + bname + " and place the files there, but be sure to modify");
+ f.WriteLine("the PATH environment variable and add that new directory to its list.");
+ f.WriteBlankLines(1);
+ f.WriteLine(" If you use other software which needs " + bname + ", such as Apache");
+ f.WriteLine("Web Server in certain configurations, then please consult the");
+ f.WriteLine("documentation of that software and see if it mentions something about");
+ f.WriteLine("how it uses " + bname + " and how it expects it to be installed. If you find");
+ f.WriteLine("nothing, then the default installation, as described in the previous");
+ f.WriteLine("paragraph, should be suficient.");
+ f.WriteBlankLines(1);
+ f.WriteLine(" If there is something you cannot keep for yourself, such as a problem,");
+ f.WriteLine("a cheer of joy, a comment or a suggestion, feel free to contact me using");
+ f.WriteLine("the address below.");
+ f.WriteBlankLines(1);
+ f.WriteLine(" Igor Zlatkovic (igor@zlatkovic.com)");
+ f.Close();
+}
+
+
+/*
+ * main(),
+ * Execution begins here.
+ */
+
+// Parse the command-line arguments.
+for (i = 0; (i < WScript.Arguments.length) && (error == 0); i++) {
+ var arg, opt;
+ arg = WScript.Arguments(i);
+ opt = arg.substring(0, arg.indexOf("="));
+ if (opt.length == 0)
+ opt = arg.substring(0, arg.indexOf(":"));
+ if (opt.length > 0) {
+ if (opt == "trio")
+ withTrio = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "threads")
+ withThreads = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "ftp")
+ withFtp = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "http")
+ withHttp = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "html")
+ withHtml = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "c14n")
+ withC14n = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "catalog")
+ withCatalog = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "docb")
+ withDocb = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "xpath")
+ withXpath = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "xptr")
+ withXptr = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "xinclude")
+ withXinclude = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "iconv")
+ withIconv = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "iso8859x")
+ withIso8859x = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "zlib")
+ withZlib = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "xml_debug")
+ withDebug = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "mem_debug")
+ 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 == "regexps")
+ withRegExps = 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")
+ withReader = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "writer")
+ withWriter = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "walker")
+ withWalker = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "pattern")
+ withPattern = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "push")
+ withPush = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "valid")
+ withValid = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "sax1")
+ withSax1 = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "legacy")
+ withLegacy = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "output")
+ withOutput = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "python")
+ withPython = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "compiler")
+ compiler = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "cruntime")
+ cruntime = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "dynruntime")
+ dynruntime = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "debug")
+ buildDebug = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "static")
+ buildStatic = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "prefix")
+ buildPrefix = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "incdir")
+ buildIncPrefix = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "bindir")
+ buildBinPrefix = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "libdir")
+ buildLibPrefix = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "sodir")
+ buildSoPrefix = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "incdir")
+ buildIncPrefix = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "include")
+ buildInclude = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "lib")
+ buildLib = arg.substring(opt.length + 1, arg.length);
+ else
+ error = 1;
+ } else if (i == 0) {
+ if (arg == "genreadme") {
+ // This command comes from the Makefile and will not be checked
+ // for errors, because Makefile will always supply right the parameters.
+ genReadme(WScript.Arguments(1), WScript.Arguments(2), WScript.Arguments(3));
+ WScript.Quit(0);
+ } else if (arg == "help") {
+ usage();
+ WScript.Quit(0);
+ }
+
+ } else {
+ error = 1;
+ }
+}
+
+
+// If we fail here, it is because the user supplied an unrecognised argument.
+if (error != 0) {
+ usage();
+ WScript.Quit(error);
+}
+dirSep = "\\";
+if (compiler == "mingw")
+ dirSep = "/";
+if (buildBinPrefix == "")
+ buildBinPrefix = "$(PREFIX)" + dirSep + "bin";
+if (buildIncPrefix == "")
+ buildIncPrefix = "$(PREFIX)" + dirSep + "include";
+if (buildLibPrefix == "")
+ buildLibPrefix = "$(PREFIX)" + dirSep + "lib";
+if (buildSoPrefix == "")
+ buildSoPrefix = "$(PREFIX)" + dirSep + "lib";
+
+// Discover the version.
+discoverVersion();
+if (error != 0) {
+ WScript.Echo("Version discovery failed, aborting.");
+ WScript.Quit(error);
+}
+
+WScript.Echo(baseName + " version: " + verMajor + "." + verMinor + "." + verMicro);
+
+// Configure libxml.
+configureLibxml();
+if (error != 0) {
+ WScript.Echo("Configuration failed, aborting.");
+ WScript.Quit(error);
+}
+
+if (withPython == true) {
+ configureLibxmlPy();
+ if (error != 0) {
+ WScript.Echo("Configuration failed, aborting.");
+ WScript.Quit(error);
+ }
+
+}
+
+// Create the makefile.
+var fso = new ActiveXObject("Scripting.FileSystemObject");
+var makefile = ".\\Makefile.msvc";
+if (compiler == "mingw")
+ makefile = ".\\Makefile.mingw";
+else if (compiler == "bcb")
+ makefile = ".\\Makefile.bcb";
+fso.CopyFile(makefile, ".\\Makefile", true);
+WScript.Echo("Created Makefile.");
+// Create the config.h.
+var confighsrc = "..\\include\\win32config.h";
+var configh = "..\\config.h";
+var f = fso.FileExists(configh);
+if (f) {
+ var t = fso.GetFile(configh);
+ t.Attributes =0;
+}
+fso.CopyFile(confighsrc, configh, true);
+WScript.Echo("Created config.h.");
+
+
+// Display the final configuration.
+var txtOut = "\nXML processor configuration\n";
+txtOut += "---------------------------\n";
+txtOut += " Trio: " + boolToStr(withTrio) + "\n";
+txtOut += " Thread safety: " + withThreads + "\n";
+txtOut += " FTP client: " + boolToStr(withFtp) + "\n";
+txtOut += " HTTP client: " + boolToStr(withHttp) + "\n";
+txtOut += " HTML processor: " + boolToStr(withHtml) + "\n";
+txtOut += " C14N support: " + boolToStr(withC14n) + "\n";
+txtOut += " Catalog support: " + boolToStr(withCatalog) + "\n";
+txtOut += " DocBook support: " + boolToStr(withDocb) + "\n";
+txtOut += " XPath support: " + boolToStr(withXpath) + "\n";
+txtOut += " XPointer support: " + boolToStr(withXptr) + "\n";
+txtOut += " XInclude support: " + boolToStr(withXinclude) + "\n";
+txtOut += " iconv support: " + boolToStr(withIconv) + "\n";
+txtOut += " iso8859x support: " + boolToStr(withIso8859x) + "\n";
+txtOut += " zlib support: " + boolToStr(withZlib) + "\n";
+txtOut += " Debugging module: " + boolToStr(withDebug) + "\n";
+txtOut += " Memory debugging: " + boolToStr(withMemDebug) + "\n";
+txtOut += " Regexp support: " + boolToStr(withRegExps) + "\n";
+txtOut += " Tree support: " + boolToStr(withTree) + "\n";
+txtOut += " Reader support: " + boolToStr(withReader) + "\n";
+txtOut += " Writer support: " + boolToStr(withWriter) + "\n";
+txtOut += " Walker support: " + boolToStr(withWalker) + "\n";
+txtOut += " Pattern support: " + boolToStr(withPattern) + "\n";
+txtOut += " Push support: " + boolToStr(withPush) + "\n";
+txtOut += "Validation support: " + boolToStr(withValid) + "\n";
+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 += " Python bindings: " + boolToStr(withPython) + "\n";
+txtOut += "\n";
+txtOut += "Win32 build configuration\n";
+txtOut += "-------------------------\n";
+txtOut += " Compiler: " + compiler + "\n";
+if (compiler == "msvc")
+ txtOut += " C-Runtime option: " + cruntime + "\n";
+else if (compiler == "bcb")
+ txtOut += " Use dynamic RTL: " + dynruntime + "\n";
+txtOut += " Debug symbols: " + boolToStr(buildDebug) + "\n";
+txtOut += " Static xmllint: " + boolToStr(buildStatic) + "\n";
+txtOut += " Install prefix: " + buildPrefix + "\n";
+txtOut += " Put tools in: " + buildBinPrefix + "\n";
+txtOut += " Put headers in: " + buildIncPrefix + "\n";
+txtOut += "Put static libs in: " + buildLibPrefix + "\n";
+txtOut += "Put shared libs in: " + buildSoPrefix + "\n";
+txtOut += " Include path: " + buildInclude + "\n";
+txtOut += " Lib path: " + buildLib + "\n";
+WScript.Echo(txtOut);
+
+//
+
diff --git a/win32/defgen.xsl b/win32/defgen.xsl
new file mode 100644
index 0000000..a598ff1
--- /dev/null
+++ b/win32/defgen.xsl
@@ -0,0 +1,288 @@
+<?xml version="1.0"?>
+<!--
+ win32/defgen.xsl
+ This stylesheet is used to transform doc/libxml2-api.xml into a pseudo-source,
+ which can then be preprocessed to get the .DEF file for the Microsoft's linker.
+
+ Use any XSLT processor to produce a file called libxml2.def.src in the win32
+ subdirectory, for example, run xsltproc from the win32 subdirectory:
+
+ xsltproc -o libxml2.def.src defgen.xsl ../doc/libxml2-api.xml
+
+ Once that finishes, rest assured, the Makefile will know what to do with the
+ generated file.
+
+ April 2003, Igor Zlatkovic <igor@zlatkovic.com>
+-->
+<!DOCTYPE xsl:stylesheet [ <!ENTITY nl '&#xd;&#xa;'> ]>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:strip-space elements="*"/>
+ <xsl:output method="text"/>
+ <xsl:template match="/">
+ <xsl:text>#define LIBXML2_COMPILING_MSCCDEF&nl;</xsl:text>
+ <xsl:text>#include "../include/libxml/xmlversion.h"&nl;</xsl:text>
+ <xsl:text>LIBRARY libxml2&nl;</xsl:text>
+ <xsl:text>EXPORTS&nl;</xsl:text>
+ <xsl:for-each select="/api/symbols/*[self::variable or self::function]">
+ <!-- Basic tests -->
+ <xsl:if test="@file = 'c14n'">
+ <xsl:text>#ifdef LIBXML_C14N_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'catalog'">
+ <xsl:text>#ifdef LIBXML_CATALOG_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'debugXML'">
+ <xsl:text>#ifdef LIBXML_DEBUG_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'DOCBparser'">
+ <xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@file = 'HTMLparser')
+ or (@file = 'HTMLtree')">
+ <xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'nanohttp'">
+ <xsl:text>#ifdef LIBXML_HTTP_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'nanoftp'">
+ <xsl:text>#ifdef LIBXML_FTP_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@file = 'relaxng')
+ or (@file = 'xmlschemas')
+ or (@file = 'xmlschemastypes')">
+ <xsl:text>#ifdef LIBXML_SCHEMAS_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'xinclude'">
+ <xsl:text>#ifdef LIBXML_XINCLUDE_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'xlink'">
+ <xsl:text>#ifdef LIBXML_XLINK_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'xmlautomata'">
+ <xsl:text>#ifdef LIBXML_AUTOMATA_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@file = 'xmlregexp')
+ or (@file = 'xmlunicode')">
+ <xsl:text>#ifdef LIBXML_REGEXP_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@file = 'xpath')
+ or (@file = 'xpathInternals')">
+ <xsl:text>#ifdef LIBXML_XPATH_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'xpointer'">
+ <xsl:text>#ifdef LIBXML_XPTR_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <!-- Extended tests -->
+ <xsl:if test="(@name = 'htmlDefaultSAXHandlerInit')
+ or (@name = 'htmlInitAutoClose')
+ or (@name = 'htmlCreateFileParserCtxt')
+ or (@name = 'inithtmlDefaultSAXHandler')
+ or (@name = 'xmlIsXHTML')
+ or (@name = 'xmlIOHTTPOpenW')
+ or (@name = 'xmlRegisterHTTPPostCallbacks')
+ or (@name = 'xmlIOHTTPMatch')
+ or (@name = 'xmlIOHTTPOpen')
+ or (@name = 'xmlIOHTTPRead')
+ or (@name = 'xmlIOHTTPClose')">
+ <xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'docbDefaultSAXHandlerInit')
+ or (@name = 'initdocbDefaultSAXHandler')">
+ <xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@name = 'xmlValidBuildContentModel'">
+ <xsl:text>#ifdef LIBXML_REGEXP_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'xmlIOFTPMatch')
+ or (@name = 'xmlIOFTPOpen')
+ or (@name = 'xmlIOFTPRead')
+ or (@name = 'xmlIOFTPClose')">
+ <xsl:text>#ifdef LIBXML_FTP_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'xmlTextReaderRelaxNGValidate')
+ or (@name = 'xmlTextReaderRelaxNGSetSchema')">
+ <xsl:text>#ifdef LIBXML_SCHEMAS_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'xmlXPathDebugDumpObject')
+ or (@name = 'xmlXPathDebugDumpCompExpr')">
+ <xsl:text>#ifdef LIBXML_DEBUG_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'xmlMallocLoc')
+ or (@name = 'xmlMallocAtomicLoc')
+ or (@name = 'xmlReallocLoc')
+ or (@name = 'xmlMemStrdupLoc')">
+ <xsl:text>#ifdef DEBUG_MEMORY_LOCATION&nl;</xsl:text>
+ </xsl:if>
+ <!-- Symbol -->
+ <xsl:choose>
+ <xsl:when test="(@name = 'xmlMalloc')
+ or (@name = 'xmlMallocAtomic')
+ or (@name = 'xmlRealloc')
+ or (@name = 'xmlFree')
+ or (@name = 'xmlMemStrdup')">
+ <xsl:text>#ifdef LIBXML_THREAD_ALLOC_ENABLED&nl;</xsl:text>
+ <xsl:text>__</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>&nl;</xsl:text>
+ <xsl:text>#else&nl;</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text> DATA&nl;</xsl:text>
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:when>
+ <xsl:when test="(@name = 'docbDefaultSAXHandler')
+ or (@name = 'htmlDefaultSAXHandler')
+ or (@name = 'oldXMLWDcompatibility')
+ or (@name = 'xmlBufferAllocScheme')
+ or (@name = 'xmlDefaultBufferSize')
+ or (@name = 'xmlDefaultSAXHandler')
+ or (@name = 'xmlDefaultSAXLocator')
+ or (@name = 'xmlDoValidityCheckingDefaultValue')
+ or (@name = 'xmlGenericError')
+ or (@name = 'xmlGenericErrorContext')
+ or (@name = 'xmlGetWarningsDefaultValue')
+ or (@name = 'xmlIndentTreeOutput')
+ or (@name = 'xmlTreeIndentString')
+ or (@name = 'xmlKeepBlanksDefaultValue')
+ or (@name = 'xmlLineNumbersDefaultValue')
+ or (@name = 'xmlLoadExtDtdDefaultValue')
+ or (@name = 'xmlParserDebugEntities')
+ or (@name = 'xmlParserVersion')
+ or (@name = 'xmlPedanticParserDefaultValue')
+ or (@name = 'xmlSaveNoEmptyTags')
+ or (@name = 'xmlSubstituteEntitiesDefaultValue')
+ or (@name = 'xmlRegisterNodeDefaultValue')
+ or (@name = 'xmlDeregisterNodeDefaultValue')">
+ <xsl:text>#ifdef LIBXML_THREAD_ENABLED&nl;</xsl:text>
+ <xsl:if test="@name = 'docbDefaultSAXHandler'">
+ <xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@name = 'htmlDefaultSAXHandler'">
+ <xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:text>__</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>&nl;</xsl:text>
+ <xsl:if test="@name = 'docbDefaultSAXHandler'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@name = 'htmlDefaultSAXHandler'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:text>#else&nl;</xsl:text>
+ <xsl:if test="@name = 'docbDefaultSAXHandler'">
+ <xsl:text>#ifdef LIBXML_DOCB_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@name = 'htmlDefaultSAXHandler'">
+ <xsl:text>#ifdef LIBXML_HTML_ENABLED&nl;</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="@name"/>
+ <xsl:text> DATA&nl;</xsl:text>
+ <xsl:if test="@name = 'docbDefaultSAXHandler'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@name = 'htmlDefaultSAXHandler'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="self::variable">
+ <xsl:text> DATA</xsl:text>
+ </xsl:if>
+ <xsl:text>&nl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- Basic tests (close) -->
+ <xsl:if test="@file = 'c14n'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'catalog'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'debugXML'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'DOCBparser'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@file = 'HTMLparser')
+ or (@file = 'HTMLtree')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'nanohttp'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'nanoftp'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@file = 'relaxng')
+ or (@file = 'xmlschemas')
+ or (@file = 'xmlschemastypes')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'xinclude'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'xlink'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'xmlautomata'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@file = 'xmlregexp')
+ or (@file = 'xmlunicode')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@file = 'xpath')
+ or (@file = 'xpathInternals')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@file = 'xpointer'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <!-- Extended tests (close) -->
+ <xsl:if test="(@name = 'htmlDefaultSAXHandlerInit')
+ or (@name = 'htmlInitAutoClose')
+ or (@name = 'htmlCreateFileParserCtxt')
+ or (@name = 'inithtmlDefaultSAXHandler')
+ or (@name = 'xmlIsXHTML')
+ or (@name = 'xmlIOHTTPOpenW')
+ or (@name = 'xmlRegisterHTTPPostCallbacks')
+ or (@name = 'xmlIOHTTPMatch')
+ or (@name = 'xmlIOHTTPOpen')
+ or (@name = 'xmlIOHTTPRead')
+ or (@name = 'xmlIOHTTPClose')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'docbDefaultSAXHandlerInit')
+ or (@name = 'initdocbDefaultSAXHandler')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="@name = 'xmlValidBuildContentModel'">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'xmlIOFTPMatch')
+ or (@name = 'xmlIOFTPOpen')
+ or (@name = 'xmlIOFTPRead')
+ or (@name = 'xmlIOFTPClose')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'xmlTextReaderRelaxNGValidate')
+ or (@name = 'xmlTextReaderRelaxNGSetSchema')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'xmlXPathDebugDumpObject')
+ or (@name = 'xmlXPathDebugDumpCompExpr')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ <xsl:if test="(@name = 'xmlMallocLoc')
+ or (@name = 'xmlMallocAtomicLoc')
+ or (@name = 'xmlReallocLoc')
+ or (@name = 'xmlMemStrdupLoc')">
+ <xsl:text>#endif&nl;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+</xsl:stylesheet>
+
diff --git a/win32/libxml2.def.src b/win32/libxml2.def.src
new file mode 100644
index 0000000..3faab29
--- /dev/null
+++ b/win32/libxml2.def.src
@@ -0,0 +1,2876 @@
+#define LIBXML2_COMPILING_MSCCDEF
+#include "../include/libxml/xmlversion.h"
+LIBRARY libxml2
+EXPORTS
+#ifdef LIBXML_THREAD_ENABLED
+#ifdef LIBXML_DOCB_ENABLED
+__docbDefaultSAXHandler
+#endif
+#else
+#ifdef LIBXML_DOCB_ENABLED
+docbDefaultSAXHandler DATA
+#endif
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+#ifdef LIBXML_HTML_ENABLED
+__htmlDefaultSAXHandler
+#endif
+#else
+#ifdef LIBXML_HTML_ENABLED
+htmlDefaultSAXHandler DATA
+#endif
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__oldXMLWDcompatibility
+#else
+oldXMLWDcompatibility DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlBufferAllocScheme
+#else
+xmlBufferAllocScheme DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlDefaultBufferSize
+#else
+xmlDefaultBufferSize DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlDefaultSAXHandler
+#else
+xmlDefaultSAXHandler DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlDefaultSAXLocator
+#else
+xmlDefaultSAXLocator DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlDeregisterNodeDefaultValue
+#else
+xmlDeregisterNodeDefaultValue DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlDoValidityCheckingDefaultValue
+#else
+xmlDoValidityCheckingDefaultValue DATA
+#endif
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+__xmlFree
+#else
+xmlFree DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlGenericError
+#else
+xmlGenericError DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlGenericErrorContext
+#else
+xmlGenericErrorContext DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlGetWarningsDefaultValue
+#else
+xmlGetWarningsDefaultValue DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlIndentTreeOutput
+#else
+xmlIndentTreeOutput DATA
+#endif
+xmlIsBaseCharGroup DATA
+xmlIsCharGroup DATA
+xmlIsCombiningGroup DATA
+xmlIsDigitGroup DATA
+xmlIsExtenderGroup DATA
+xmlIsIdeographicGroup DATA
+xmlIsPubidChar_tab DATA
+#ifdef LIBXML_THREAD_ENABLED
+__xmlKeepBlanksDefaultValue
+#else
+xmlKeepBlanksDefaultValue DATA
+#endif
+xmlLastError DATA
+#ifdef LIBXML_THREAD_ENABLED
+__xmlLineNumbersDefaultValue
+#else
+xmlLineNumbersDefaultValue DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlLoadExtDtdDefaultValue
+#else
+xmlLoadExtDtdDefaultValue DATA
+#endif
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+__xmlMalloc
+#else
+xmlMalloc DATA
+#endif
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+__xmlMallocAtomic
+#else
+xmlMallocAtomic DATA
+#endif
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+__xmlMemStrdup
+#else
+xmlMemStrdup DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlParserDebugEntities
+#else
+xmlParserDebugEntities DATA
+#endif
+xmlParserMaxDepth DATA
+#ifdef LIBXML_THREAD_ENABLED
+__xmlParserVersion
+#else
+xmlParserVersion DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlPedanticParserDefaultValue
+#else
+xmlPedanticParserDefaultValue DATA
+#endif
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+__xmlRealloc
+#else
+xmlRealloc DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlRegisterNodeDefaultValue
+#else
+xmlRegisterNodeDefaultValue DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlSaveNoEmptyTags
+#else
+xmlSaveNoEmptyTags DATA
+#endif
+xmlStringComment DATA
+xmlStringText DATA
+xmlStringTextNoenc DATA
+xmlStructuredError DATA
+#ifdef LIBXML_THREAD_ENABLED
+__xmlSubstituteEntitiesDefaultValue
+#else
+xmlSubstituteEntitiesDefaultValue DATA
+#endif
+#ifdef LIBXML_THREAD_ENABLED
+__xmlTreeIndentString
+#else
+xmlTreeIndentString DATA
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNAN DATA
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNINF DATA
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathPINF DATA
+#endif
+#ifdef LIBXML_HTML_ENABLED
+UTF8ToHtml
+#endif
+UTF8Toisolat1
+attribute
+attributeDecl
+cdataBlock
+characters
+checkNamespace
+comment
+#ifdef LIBXML_DOCB_ENABLED
+docbCreateFileParserCtxt
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbCreatePushParserCtxt
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbDefaultSAXHandlerInit
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbEncodeEntities
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbFreeParserCtxt
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbParseChunk
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbParseDoc
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbParseDocument
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbParseFile
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbSAXParseDoc
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+docbSAXParseFile
+#endif
+elementDecl
+endDocument
+endElement
+entityDecl
+externalSubset
+getColumnNumber
+getEntity
+getLineNumber
+getNamespace
+getParameterEntity
+getPublicId
+getSystemId
+globalNamespace
+hasExternalSubset
+hasInternalSubset
+#ifdef LIBXML_HTML_ENABLED
+htmlAttrAllowed
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlAutoCloseTag
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCreateFileParserCtxt
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCreateMemoryParserCtxt
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCreatePushParserCtxt
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCtxtReadDoc
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCtxtReadFd
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCtxtReadFile
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCtxtReadIO
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCtxtReadMemory
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCtxtReset
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlCtxtUseOptions
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlDefaultSAXHandlerInit
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlDocContentDumpFormatOutput
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlDocContentDumpOutput
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlDocDump
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlDocDumpMemory
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlElementAllowedHere
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlElementStatusHere
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlEncodeEntities
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlEntityLookup
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlEntityValueLookup
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlFreeParserCtxt
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlGetMetaEncoding
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlHandleOmittedElem
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlInitAutoClose
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlIsAutoClosed
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlIsBooleanAttr
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlIsScriptAttribute
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlNewDoc
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlNewDocNoDtD
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlNodeDump
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlNodeDumpFile
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlNodeDumpFileFormat
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlNodeDumpFormatOutput
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlNodeDumpOutput
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlNodeStatus
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlParseCharRef
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlParseChunk
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlParseDoc
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlParseDocument
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlParseElement
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlParseEntityRef
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlParseFile
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlReadDoc
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlReadFd
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlReadFile
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlReadIO
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlReadMemory
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlSAXParseDoc
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlSAXParseFile
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlSaveFile
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlSaveFileEnc
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlSaveFileFormat
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlSetMetaEncoding
+#endif
+#ifdef LIBXML_HTML_ENABLED
+htmlTagLookup
+#endif
+ignorableWhitespace
+initGenericErrorDefaultFunc
+#ifdef LIBXML_DOCB_ENABLED
+initdocbDefaultSAXHandler
+#endif
+#ifdef LIBXML_HTML_ENABLED
+inithtmlDefaultSAXHandler
+#endif
+initxmlDefaultSAXHandler
+inputPop
+inputPush
+internalSubset
+isStandalone
+isolat1ToUTF8
+namePop
+namePush
+namespaceDecl
+nodePop
+nodePush
+notationDecl
+processingInstruction
+reference
+resolveEntity
+setDocumentLocator
+setNamespace
+startDocument
+startElement
+unparsedEntityDecl
+#ifdef LIBXML_XPATH_ENABLED
+valuePop
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+valuePush
+#endif
+#ifdef LIBXML_XLINK_ENABLED
+xlinkGetDefaultDetect
+#endif
+#ifdef LIBXML_XLINK_ENABLED
+xlinkGetDefaultHandler
+#endif
+#ifdef LIBXML_XLINK_ENABLED
+xlinkIsLink
+#endif
+#ifdef LIBXML_XLINK_ENABLED
+xlinkSetDefaultDetect
+#endif
+#ifdef LIBXML_XLINK_ENABLED
+xlinkSetDefaultHandler
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlACatalogAdd
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlACatalogDump
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlACatalogRemove
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlACatalogResolve
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlACatalogResolvePublic
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlACatalogResolveSystem
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlACatalogResolveURI
+#endif
+xmlAddAttributeDecl
+xmlAddChild
+xmlAddChildList
+xmlAddDocEntity
+xmlAddDtdEntity
+xmlAddElementDecl
+xmlAddEncodingAlias
+xmlAddID
+xmlAddNextSibling
+xmlAddNotationDecl
+xmlAddPrevSibling
+xmlAddRef
+xmlAddSibling
+xmlAllocOutputBuffer
+xmlAllocParserInputBuffer
+xmlAttrSerializeTxtContent
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataCompile
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataGetInitState
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataIsDeterminist
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewAllTrans
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewCountTrans
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewCountedTrans
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewCounter
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewCounterTrans
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewEpsilon
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewOnceTrans
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewState
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewTransition
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewTransition2
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataSetFinalState
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlBoolToText
+#endif
+xmlBufferAdd
+xmlBufferAddHead
+xmlBufferCCat
+xmlBufferCat
+xmlBufferContent
+xmlBufferCreate
+xmlBufferCreateSize
+xmlBufferCreateStatic
+xmlBufferDump
+xmlBufferEmpty
+xmlBufferFree
+xmlBufferGrow
+xmlBufferLength
+xmlBufferResize
+xmlBufferSetAllocationScheme
+xmlBufferShrink
+xmlBufferWriteCHAR
+xmlBufferWriteChar
+xmlBufferWriteQuotedString
+xmlBuildQName
+xmlBuildURI
+xmlByteConsumed
+#ifdef LIBXML_C14N_ENABLED
+xmlC14NDocDumpMemory
+#endif
+#ifdef LIBXML_C14N_ENABLED
+xmlC14NDocSave
+#endif
+#ifdef LIBXML_C14N_ENABLED
+xmlC14NDocSaveTo
+#endif
+#ifdef LIBXML_C14N_ENABLED
+xmlC14NExecute
+#endif
+xmlCanonicPath
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogAdd
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogAddLocal
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogCleanup
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogConvert
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogDump
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogFreeLocal
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogGetDefaults
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogGetPublic
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogGetSystem
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogIsEmpty
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogLocalResolve
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogLocalResolveURI
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogRemove
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogResolve
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogResolvePublic
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogResolveSystem
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogResolveURI
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogSetDebug
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogSetDefaultPrefer
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlCatalogSetDefaults
+#endif
+xmlCharEncCloseFunc
+xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+xmlCharInRange
+xmlCharStrdup
+xmlCharStrndup
+xmlCheckFilename
+xmlCheckHTTPInput
+xmlCheckLanguageID
+xmlCheckUTF8
+xmlCheckVersion
+xmlCleanupCharEncodingHandlers
+xmlCleanupEncodingAliases
+xmlCleanupGlobals
+xmlCleanupInputCallbacks
+xmlCleanupMemory
+xmlCleanupOutputCallbacks
+xmlCleanupParser
+xmlCleanupPredefinedEntities
+xmlCleanupThreads
+xmlClearNodeInfoSeq
+xmlClearParserCtxt
+#ifdef LIBXML_CATALOG_ENABLED
+xmlConvertSGMLCatalog
+#endif
+xmlCopyAttributeTable
+xmlCopyChar
+xmlCopyCharMultiByte
+xmlCopyDoc
+xmlCopyDtd
+xmlCopyElementContent
+xmlCopyElementTable
+xmlCopyEntitiesTable
+xmlCopyEnumeration
+xmlCopyError
+xmlCopyNamespace
+xmlCopyNamespaceList
+xmlCopyNode
+xmlCopyNodeList
+xmlCopyNotationTable
+xmlCopyProp
+xmlCopyPropList
+xmlCreateDocParserCtxt
+xmlCreateEntitiesTable
+xmlCreateEntityParserCtxt
+xmlCreateEnumeration
+xmlCreateFileParserCtxt
+xmlCreateIOParserCtxt
+xmlCreateIntSubset
+xmlCreateMemoryParserCtxt
+xmlCreatePushParserCtxt
+xmlCreateURI
+xmlCreateURLParserCtxt
+xmlCtxtGetLastError
+xmlCtxtReadDoc
+xmlCtxtReadFd
+xmlCtxtReadFile
+xmlCtxtReadIO
+xmlCtxtReadMemory
+xmlCtxtReset
+xmlCtxtResetLastError
+xmlCtxtResetPush
+xmlCtxtUseOptions
+xmlCurrentChar
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpAttr
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpAttrList
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpDTD
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpDocument
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpDocumentHead
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpEntities
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpNode
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpNodeList
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpOneNode
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlDebugDumpString
+#endif
+xmlDecodeEntities
+xmlDefaultSAXHandlerInit
+xmlDelEncodingAlias
+xmlDeregisterNodeDefault
+xmlDetectCharEncoding
+xmlDictCreate
+xmlDictCreateSub
+xmlDictFree
+xmlDictLookup
+xmlDictOwns
+xmlDictQLookup
+xmlDictReference
+xmlDictSize
+xmlDocCopyNode
+xmlDocDump
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemory
+xmlDocDumpMemoryEnc
+xmlDocFormatDump
+xmlDocGetRootElement
+xmlDocSetRootElement
+xmlDumpAttributeDecl
+xmlDumpAttributeTable
+xmlDumpElementDecl
+xmlDumpElementTable
+xmlDumpEntitiesTable
+xmlDumpEntityDecl
+xmlDumpNotationDecl
+xmlDumpNotationTable
+xmlElemDump
+xmlEncodeEntities
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlErrMemory
+xmlFileClose
+xmlFileMatch
+xmlFileOpen
+xmlFileRead
+xmlFindCharEncodingHandler
+xmlFreeAttributeTable
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlFreeAutomata
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlFreeCatalog
+#endif
+xmlFreeDoc
+xmlFreeDtd
+xmlFreeElementContent
+xmlFreeElementTable
+xmlFreeEntitiesTable
+xmlFreeEnumeration
+xmlFreeIDTable
+xmlFreeInputStream
+xmlFreeMutex
+xmlFreeNode
+xmlFreeNodeList
+xmlFreeNotationTable
+xmlFreeNs
+xmlFreeNsList
+xmlFreeParserCtxt
+xmlFreeParserInputBuffer
+xmlFreePattern
+xmlFreePatternList
+xmlFreeProp
+xmlFreePropList
+xmlFreeRMutex
+xmlFreeRefTable
+xmlFreeTextReader
+xmlFreeTextWriter
+xmlFreeURI
+xmlFreeValidCtxt
+xmlGcMemGet
+xmlGcMemSetup
+xmlGetBufferAllocationScheme
+xmlGetCharEncodingHandler
+xmlGetCharEncodingName
+xmlGetCompressMode
+xmlGetDocCompressMode
+xmlGetDocEntity
+xmlGetDtdAttrDesc
+xmlGetDtdElementDesc
+xmlGetDtdEntity
+xmlGetDtdNotationDesc
+xmlGetDtdQAttrDesc
+xmlGetDtdQElementDesc
+xmlGetEncodingAlias
+xmlGetExternalEntityLoader
+xmlGetFeature
+xmlGetFeaturesList
+xmlGetGlobalState
+xmlGetID
+xmlGetIntSubset
+xmlGetLastChild
+xmlGetLastError
+xmlGetLineNo
+xmlGetNoNsProp
+xmlGetNodePath
+xmlGetNsList
+xmlGetNsProp
+xmlGetParameterEntity
+xmlGetPredefinedEntity
+xmlGetProp
+xmlGetRefs
+xmlGetThreadId
+xmlGetUTF8Char
+xmlHandleEntity
+xmlHasNsProp
+xmlHasProp
+xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashCopy
+xmlHashCreate
+xmlHashFree
+xmlHashLookup
+xmlHashLookup2
+xmlHashLookup3
+xmlHashQLookup
+xmlHashQLookup2
+xmlHashQLookup3
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+xmlHashSize
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+#ifdef LIBXML_FTP_ENABLED
+xmlIOFTPClose
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlIOFTPMatch
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlIOFTPOpen
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlIOFTPRead
+#endif
+#ifdef LIBXML_HTML_ENABLED
+xmlIOHTTPClose
+#endif
+#ifdef LIBXML_HTML_ENABLED
+xmlIOHTTPMatch
+#endif
+#ifdef LIBXML_HTML_ENABLED
+xmlIOHTTPOpen
+#endif
+#ifdef LIBXML_HTML_ENABLED
+xmlIOHTTPOpenW
+#endif
+#ifdef LIBXML_HTML_ENABLED
+xmlIOHTTPRead
+#endif
+xmlIOParseDTD
+xmlInitCharEncodingHandlers
+xmlInitGlobals
+xmlInitMemory
+xmlInitNodeInfoSeq
+xmlInitParser
+xmlInitParserCtxt
+xmlInitThreads
+#ifdef LIBXML_CATALOG_ENABLED
+xmlInitializeCatalog
+#endif
+xmlInitializeGlobalState
+xmlInitializePredefinedEntities
+xmlIsBaseChar
+xmlIsBlank
+xmlIsBlankNode
+xmlIsChar
+xmlIsCombining
+xmlIsDigit
+xmlIsExtender
+xmlIsID
+xmlIsIdeographic
+xmlIsLetter
+xmlIsMainThread
+xmlIsMixedElement
+xmlIsPubidChar
+xmlIsRef
+#ifdef LIBXML_HTML_ENABLED
+xmlIsXHTML
+#endif
+xmlKeepBlanksDefault
+xmlLineNumbersDefault
+xmlLinkGetData
+xmlListAppend
+xmlListClear
+xmlListCopy
+xmlListCreate
+xmlListDelete
+xmlListDup
+xmlListEmpty
+xmlListEnd
+xmlListFront
+xmlListInsert
+xmlListMerge
+xmlListPopBack
+xmlListPopFront
+xmlListPushBack
+xmlListPushFront
+xmlListRemoveAll
+xmlListRemoveFirst
+xmlListRemoveLast
+xmlListReverse
+xmlListReverseSearch
+xmlListReverseWalk
+xmlListSearch
+xmlListSize
+xmlListSort
+xmlListWalk
+#ifdef LIBXML_CATALOG_ENABLED
+xmlLoadACatalog
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlLoadCatalog
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+xmlLoadCatalogs
+#endif
+xmlLoadExternalEntity
+#ifdef LIBXML_CATALOG_ENABLED
+xmlLoadSGMLSuperCatalog
+#endif
+xmlLockLibrary
+#ifdef LIBXML_DEBUG_ENABLED
+xmlLsCountNode
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlLsOneNode
+#endif
+#ifdef DEBUG_MEMORY_LOCATION
+xmlMallocAtomicLoc
+#endif
+#ifdef DEBUG_MEMORY_LOCATION
+xmlMallocLoc
+#endif
+xmlMemDisplay
+xmlMemFree
+xmlMemGet
+xmlMemMalloc
+xmlMemRealloc
+xmlMemSetup
+xmlMemShow
+#ifdef DEBUG_MEMORY_LOCATION
+xmlMemStrdupLoc
+#endif
+xmlMemUsed
+xmlMemoryDump
+xmlMemoryStrdup
+xmlMutexLock
+xmlMutexUnlock
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPCheckResponse
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPCleanup
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPClose
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPCloseConnection
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPConnect
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPConnectTo
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPCwd
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPDele
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPFreeCtxt
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPGet
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPGetConnection
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPGetResponse
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPGetSocket
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPInit
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPList
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPNewCtxt
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPOpen
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPProxy
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPQuit
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPRead
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPScanProxy
+#endif
+#ifdef LIBXML_FTP_ENABLED
+xmlNanoFTPUpdateURL
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPAuthHeader
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPCleanup
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPClose
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPEncoding
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPFetch
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPInit
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPMethod
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPMethodRedir
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPMimeType
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPOpen
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPOpenRedir
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPRead
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPRedir
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPReturnCode
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPSave
+#endif
+#ifdef LIBXML_HTTP_ENABLED
+xmlNanoHTTPScanProxy
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
+xmlNewAutomata
+#endif
+xmlNewCDataBlock
+#ifdef LIBXML_CATALOG_ENABLED
+xmlNewCatalog
+#endif
+xmlNewCharEncodingHandler
+xmlNewCharRef
+xmlNewChild
+xmlNewComment
+xmlNewDoc
+xmlNewDocComment
+xmlNewDocFragment
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewDocProp
+xmlNewDocRawNode
+xmlNewDocText
+xmlNewDocTextLen
+xmlNewDtd
+xmlNewElementContent
+xmlNewEntityInputStream
+xmlNewGlobalNs
+xmlNewIOInputStream
+xmlNewInputFromFile
+xmlNewInputStream
+xmlNewMutex
+xmlNewNode
+xmlNewNodeEatName
+xmlNewNs
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlNewPI
+xmlNewParserCtxt
+xmlNewProp
+xmlNewRMutex
+xmlNewReference
+xmlNewStringInputStream
+xmlNewText
+xmlNewTextChild
+xmlNewTextLen
+xmlNewTextReader
+xmlNewTextReaderFilename
+xmlNewTextWriter
+xmlNewTextWriterDoc
+xmlNewTextWriterFilename
+xmlNewTextWriterMemory
+xmlNewTextWriterPushParser
+xmlNewTextWriterTree
+xmlNewValidCtxt
+xmlNextChar
+xmlNoNetExternalEntityLoader
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeBufGetContent
+xmlNodeDump
+xmlNodeDumpOutput
+xmlNodeGetBase
+xmlNodeGetContent
+xmlNodeGetLang
+xmlNodeGetSpacePreserve
+xmlNodeIsText
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlNodeSetBase
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlNodeSetLang
+xmlNodeSetName
+xmlNodeSetSpacePreserve
+xmlNormalizeURIPath
+xmlNormalizeWindowsPath
+xmlOutputBufferClose
+xmlOutputBufferCreateFd
+xmlOutputBufferCreateFile
+xmlOutputBufferCreateFilename
+xmlOutputBufferCreateIO
+xmlOutputBufferFlush
+xmlOutputBufferWrite
+xmlOutputBufferWriteString
+xmlParseAttValue
+xmlParseAttribute
+xmlParseAttributeListDecl
+xmlParseAttributeType
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCDSect
+#ifdef LIBXML_CATALOG_ENABLED
+xmlParseCatalogFile
+#endif
+xmlParseCharData
+xmlParseCharEncoding
+xmlParseCharRef
+xmlParseChunk
+xmlParseComment
+xmlParseContent
+xmlParseCtxtExternalEntity
+xmlParseDTD
+xmlParseDefaultDecl
+xmlParseDoc
+xmlParseDocTypeDecl
+xmlParseDocument
+xmlParseElement
+xmlParseElementChildrenContentDecl
+xmlParseElementContentDecl
+xmlParseElementDecl
+xmlParseElementMixedContentDecl
+xmlParseEncName
+xmlParseEncodingDecl
+xmlParseEndTag
+xmlParseEntity
+xmlParseEntityDecl
+xmlParseEntityRef
+xmlParseEntityValue
+xmlParseEnumeratedType
+xmlParseEnumerationType
+xmlParseExtParsedEnt
+xmlParseExternalEntity
+xmlParseExternalID
+xmlParseExternalSubset
+xmlParseFile
+xmlParseMarkupDecl
+xmlParseMemory
+xmlParseMisc
+xmlParseName
+xmlParseNamespace
+xmlParseNmtoken
+xmlParseNotationDecl
+xmlParseNotationType
+xmlParsePEReference
+xmlParsePI
+xmlParsePITarget
+xmlParsePubidLiteral
+xmlParseQuotedString
+xmlParseReference
+xmlParseSDDecl
+xmlParseStartTag
+xmlParseSystemLiteral
+xmlParseTextDecl
+xmlParseURI
+xmlParseURIReference
+xmlParseVersionInfo
+xmlParseVersionNum
+xmlParseXMLDecl
+xmlParserAddNodeInfo
+xmlParserError
+xmlParserFindNodeInfo
+xmlParserFindNodeInfoIndex
+xmlParserGetDirectory
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlParserInputBufferCreateFd
+xmlParserInputBufferCreateFile
+xmlParserInputBufferCreateFilename
+xmlParserInputBufferCreateIO
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+xmlParserInputBufferGrow
+xmlParserInputBufferPush
+xmlParserInputBufferRead
+xmlParserInputGrow
+xmlParserInputRead
+xmlParserInputShrink
+xmlParserPrintFileContext
+xmlParserPrintFileInfo
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+xmlPatternMatch
+xmlPatterncompile
+xmlPedanticParserDefault
+xmlPopInput
+xmlPrintURI
+xmlPushInput
+xmlRMutexLock
+xmlRMutexUnlock
+xmlReadDoc
+xmlReadFd
+xmlReadFile
+xmlReadIO
+xmlReadMemory
+xmlReaderForDoc
+xmlReaderForFd
+xmlReaderForFile
+xmlReaderForIO
+xmlReaderForMemory
+xmlReaderNewDoc
+xmlReaderNewFd
+xmlReaderNewFile
+xmlReaderNewIO
+xmlReaderNewMemory
+xmlReaderNewWalker
+xmlReaderWalker
+#ifdef DEBUG_MEMORY_LOCATION
+xmlReallocLoc
+#endif
+xmlReconciliateNs
+xmlRecoverDoc
+xmlRecoverFile
+xmlRecoverMemory
+#ifdef LIBXML_REGEXP_ENABLED
+xmlRegExecPushString
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlRegExecPushString2
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlRegFreeExecCtxt
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlRegFreeRegexp
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlRegNewExecCtxt
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlRegexpCompile
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlRegexpExec
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlRegexpIsDeterminist
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlRegexpPrint
+#endif
+xmlRegisterCharEncodingHandler
+xmlRegisterDefaultInputCallbacks
+xmlRegisterDefaultOutputCallbacks
+#ifdef LIBXML_HTML_ENABLED
+xmlRegisterHTTPPostCallbacks
+#endif
+xmlRegisterInputCallbacks
+xmlRegisterNodeDefault
+xmlRegisterOutputCallbacks
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGCleanupTypes
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGDump
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGDumpTree
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGFree
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGFreeParserCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGFreeValidCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGGetParserErrors
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGGetValidErrors
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGNewDocParserCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGNewMemParserCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGNewParserCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGNewValidCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGParse
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGSetParserErrors
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGSetValidErrors
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGValidateDoc
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGValidateFullElement
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGValidatePopElement
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGValidatePushCData
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGValidatePushElement
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxParserSetFlag
+#endif
+xmlRemoveID
+xmlRemoveProp
+xmlRemoveRef
+xmlReplaceNode
+xmlResetError
+xmlResetLastError
+xmlSAX2AttributeDecl
+xmlSAX2CDataBlock
+xmlSAX2Characters
+xmlSAX2CheckNamespace
+xmlSAX2Comment
+xmlSAX2ElementDecl
+xmlSAX2EndDocument
+xmlSAX2EndElement
+xmlSAX2EndElementNs
+xmlSAX2EntityDecl
+xmlSAX2ExternalSubset
+xmlSAX2GetColumnNumber
+xmlSAX2GetEntity
+xmlSAX2GetLineNumber
+xmlSAX2GetNamespace
+xmlSAX2GetParameterEntity
+xmlSAX2GetPublicId
+xmlSAX2GetSystemId
+xmlSAX2GlobalNamespace
+xmlSAX2HasExternalSubset
+xmlSAX2HasInternalSubset
+xmlSAX2IgnorableWhitespace
+xmlSAX2InitDefaultSAXHandler
+xmlSAX2InitDocbDefaultSAXHandler
+xmlSAX2InitHtmlDefaultSAXHandler
+xmlSAX2InternalSubset
+xmlSAX2IsStandalone
+xmlSAX2NamespaceDecl
+xmlSAX2NotationDecl
+xmlSAX2ProcessingInstruction
+xmlSAX2Reference
+xmlSAX2ResolveEntity
+xmlSAX2SetDocumentLocator
+xmlSAX2SetNamespace
+xmlSAX2StartDocument
+xmlSAX2StartElement
+xmlSAX2StartElementNs
+xmlSAX2UnparsedEntityDecl
+xmlSAXDefaultVersion
+xmlSAXParseDTD
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlSAXUserParseFile
+xmlSAXUserParseMemory
+xmlSAXVersion
+xmlSaveClose
+xmlSaveDoc
+xmlSaveFile
+xmlSaveFileEnc
+xmlSaveFileTo
+xmlSaveFlush
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+xmlSaveFormatFileTo
+xmlSaveToBuffer
+xmlSaveToFd
+xmlSaveToFilename
+xmlSaveToIO
+xmlSaveTree
+xmlSaveUri
+xmlScanName
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaCheckFacet
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaCleanupTypes
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaCompareValues
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaDump
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaFree
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaFreeFacet
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaFreeParserCtxt
+#endif
+xmlSchemaFreeType
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaFreeValidCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaFreeValue
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaGetPredefinedType
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaInitTypes
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaNewDocParserCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaNewFacet
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaNewMemParserCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaNewParserCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaNewValidCtxt
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaParse
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaSetParserErrors
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaSetValidErrors
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaValPredefTypeNode
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaValidateDoc
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaValidateFacet
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaValidatePredefinedType
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaValidateStream
+#endif
+xmlSearchNs
+xmlSearchNsByHref
+xmlSetBufferAllocationScheme
+xmlSetCompressMode
+xmlSetDocCompressMode
+xmlSetEntityReferenceFunc
+xmlSetExternalEntityLoader
+xmlSetFeature
+xmlSetGenericErrorFunc
+xmlSetListDoc
+xmlSetNs
+xmlSetNsProp
+xmlSetProp
+xmlSetStructuredErrorFunc
+xmlSetTreeDoc
+xmlSetupParserForBuffer
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShell
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellBase
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellCat
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellDir
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellDu
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellList
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellLoad
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellPrintNode
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellPrintXPathError
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellPrintXPathResult
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellPwd
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellSave
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellValidate
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+xmlShellWrite
+#endif
+xmlSkipBlankChars
+xmlSnprintfElementContent
+xmlSplitQName
+xmlSplitQName2
+xmlSplitQName3
+xmlSprintfElementContent
+xmlStopParser
+xmlStrEqual
+xmlStrPrintf
+xmlStrQEqual
+xmlStrVPrintf
+xmlStrcasecmp
+xmlStrcasestr
+xmlStrcat
+xmlStrchr
+xmlStrcmp
+xmlStrdup
+xmlStringCurrentChar
+xmlStringDecodeEntities
+xmlStringGetNodeList
+xmlStringLenDecodeEntities
+xmlStringLenGetNodeList
+xmlStrlen
+xmlStrncasecmp
+xmlStrncat
+xmlStrncatNew
+xmlStrncmp
+xmlStrndup
+xmlStrstr
+xmlStrsub
+xmlSubstituteEntitiesDefault
+xmlSwitchEncoding
+xmlSwitchInputEncoding
+xmlSwitchToEncoding
+xmlTextConcat
+xmlTextMerge
+xmlTextReaderAttributeCount
+xmlTextReaderBaseUri
+xmlTextReaderClose
+xmlTextReaderConstBaseUri
+xmlTextReaderConstLocalName
+xmlTextReaderConstName
+xmlTextReaderConstNamespaceUri
+xmlTextReaderConstPrefix
+xmlTextReaderConstString
+xmlTextReaderConstValue
+xmlTextReaderConstXmlLang
+xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+xmlTextReaderDepth
+xmlTextReaderExpand
+xmlTextReaderGetAttribute
+xmlTextReaderGetAttributeNo
+xmlTextReaderGetAttributeNs
+xmlTextReaderGetErrorHandler
+xmlTextReaderGetParserProp
+xmlTextReaderGetRemainder
+xmlTextReaderHasAttributes
+xmlTextReaderHasValue
+xmlTextReaderIsDefault
+xmlTextReaderIsEmptyElement
+xmlTextReaderIsValid
+xmlTextReaderLocalName
+xmlTextReaderLocatorBaseURI
+xmlTextReaderLocatorLineNumber
+xmlTextReaderLookupNamespace
+xmlTextReaderMoveToAttribute
+xmlTextReaderMoveToAttributeNo
+xmlTextReaderMoveToAttributeNs
+xmlTextReaderMoveToElement
+xmlTextReaderMoveToFirstAttribute
+xmlTextReaderMoveToNextAttribute
+xmlTextReaderName
+xmlTextReaderNamespaceUri
+xmlTextReaderNext
+xmlTextReaderNextSibling
+xmlTextReaderNodeType
+xmlTextReaderNormalization
+xmlTextReaderPrefix
+xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+xmlTextReaderQuoteChar
+xmlTextReaderRead
+xmlTextReaderReadAttributeValue
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlTextReaderReadState
+xmlTextReaderReadString
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlTextReaderRelaxNGSetSchema
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlTextReaderRelaxNGValidate
+#endif
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetParserProp
+xmlTextReaderSetStructuredErrorHandler
+xmlTextReaderValue
+xmlTextReaderXmlLang
+xmlTextWriterEndAttribute
+xmlTextWriterEndCDATA
+xmlTextWriterEndComment
+xmlTextWriterEndDTD
+xmlTextWriterEndDTDAttlist
+xmlTextWriterEndDTDElement
+xmlTextWriterEndDTDEntity
+xmlTextWriterEndDocument
+xmlTextWriterEndElement
+xmlTextWriterEndPI
+xmlTextWriterFlush
+xmlTextWriterFullEndElement
+xmlTextWriterSetIndent
+xmlTextWriterSetIndentString
+xmlTextWriterStartAttribute
+xmlTextWriterStartAttributeNS
+xmlTextWriterStartCDATA
+xmlTextWriterStartComment
+xmlTextWriterStartDTD
+xmlTextWriterStartDTDAttlist
+xmlTextWriterStartDTDElement
+xmlTextWriterStartDTDEntity
+xmlTextWriterStartDocument
+xmlTextWriterStartElement
+xmlTextWriterStartElementNS
+xmlTextWriterStartPI
+xmlTextWriterWriteAttribute
+xmlTextWriterWriteAttributeNS
+xmlTextWriterWriteBase64
+xmlTextWriterWriteBinHex
+xmlTextWriterWriteCDATA
+xmlTextWriterWriteComment
+xmlTextWriterWriteDTD
+xmlTextWriterWriteDTDAttlist
+xmlTextWriterWriteDTDElement
+xmlTextWriterWriteDTDEntity
+xmlTextWriterWriteDTDExternalEntity
+xmlTextWriterWriteDTDExternalEntityContents
+xmlTextWriterWriteDTDInternalEntity
+xmlTextWriterWriteDTDNotation
+xmlTextWriterWriteElement
+xmlTextWriterWriteElementNS
+xmlTextWriterWriteFormatAttribute
+xmlTextWriterWriteFormatAttributeNS
+xmlTextWriterWriteFormatCDATA
+xmlTextWriterWriteFormatComment
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteFormatDTDAttlist
+xmlTextWriterWriteFormatDTDElement
+xmlTextWriterWriteFormatDTDInternalEntity
+xmlTextWriterWriteFormatElement
+xmlTextWriterWriteFormatElementNS
+xmlTextWriterWriteFormatPI
+xmlTextWriterWriteFormatRaw
+xmlTextWriterWriteFormatString
+xmlTextWriterWritePI
+xmlTextWriterWriteRaw
+xmlTextWriterWriteRawLen
+xmlTextWriterWriteString
+xmlTextWriterWriteVFormatAttribute
+xmlTextWriterWriteVFormatAttributeNS
+xmlTextWriterWriteVFormatCDATA
+xmlTextWriterWriteVFormatComment
+xmlTextWriterWriteVFormatDTD
+xmlTextWriterWriteVFormatDTDAttlist
+xmlTextWriterWriteVFormatDTDElement
+xmlTextWriterWriteVFormatDTDInternalEntity
+xmlTextWriterWriteVFormatElement
+xmlTextWriterWriteVFormatElementNS
+xmlTextWriterWriteVFormatPI
+xmlTextWriterWriteVFormatRaw
+xmlTextWriterWriteVFormatString
+xmlThrDefBufferAllocScheme
+xmlThrDefDefaultBufferSize
+xmlThrDefDeregisterNodeDefault
+xmlThrDefDoValidityCheckingDefaultValue
+xmlThrDefGetWarningsDefaultValue
+xmlThrDefIndentTreeOutput
+xmlThrDefKeepBlanksDefaultValue
+xmlThrDefLineNumbersDefaultValue
+xmlThrDefLoadExtDtdDefaultValue
+xmlThrDefParserDebugEntities
+xmlThrDefPedanticParserDefaultValue
+xmlThrDefRegisterNodeDefault
+xmlThrDefSaveNoEmptyTags
+xmlThrDefSetGenericErrorFunc
+xmlThrDefSetStructuredErrorFunc
+xmlThrDefSubstituteEntitiesDefaultValue
+xmlThrDefTreeIndentString
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsAegeanNumbers
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsAlphabeticPresentationForms
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsArabic
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsArabicPresentationFormsA
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsArabicPresentationFormsB
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsArmenian
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsArrows
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsBasicLatin
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsBengali
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsBlock
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsBlockElements
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsBopomofo
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsBopomofoExtended
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsBoxDrawing
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsBraillePatterns
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsBuhid
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsByzantineMusicalSymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCJKCompatibility
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCJKCompatibilityForms
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCJKCompatibilityIdeographs
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCJKCompatibilityIdeographsSupplement
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCJKRadicalsSupplement
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCJKSymbolsandPunctuation
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCJKUnifiedIdeographs
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCJKUnifiedIdeographsExtensionA
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCJKUnifiedIdeographsExtensionB
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCat
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatC
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatCc
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatCf
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatCo
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatCs
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatL
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatLl
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatLm
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatLo
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatLt
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatLu
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatM
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatMc
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatMe
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatMn
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatN
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatNd
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatNl
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatNo
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatP
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatPc
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatPd
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatPe
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatPf
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatPi
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatPo
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatPs
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatS
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatSc
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatSk
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatSm
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatSo
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatZ
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatZl
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatZp
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCatZs
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCherokee
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCombiningDiacriticalMarks
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCombiningDiacriticalMarksforSymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCombiningHalfMarks
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCombiningMarksforSymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsControlPictures
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCurrencySymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCypriotSyllabary
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCyrillic
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsCyrillicSupplement
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsDeseret
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsDevanagari
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsDingbats
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsEnclosedAlphanumerics
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsEnclosedCJKLettersandMonths
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsEthiopic
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsGeneralPunctuation
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsGeometricShapes
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsGeorgian
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsGothic
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsGreek
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsGreekExtended
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsGreekandCoptic
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsGujarati
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsGurmukhi
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsHalfwidthandFullwidthForms
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsHangulCompatibilityJamo
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsHangulJamo
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsHangulSyllables
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsHanunoo
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsHebrew
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsHighPrivateUseSurrogates
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsHighSurrogates
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsHiragana
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsIPAExtensions
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsIdeographicDescriptionCharacters
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsKanbun
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsKangxiRadicals
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsKannada
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsKatakana
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsKatakanaPhoneticExtensions
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsKhmer
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsKhmerSymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLao
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLatin1Supplement
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLatinExtendedA
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLatinExtendedAdditional
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLatinExtendedB
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLetterlikeSymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLimbu
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLinearBIdeograms
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLinearBSyllabary
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsLowSurrogates
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMalayalam
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMathematicalAlphanumericSymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMathematicalOperators
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMiscellaneousMathematicalSymbolsA
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMiscellaneousMathematicalSymbolsB
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMiscellaneousSymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMiscellaneousSymbolsandArrows
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMiscellaneousTechnical
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMongolian
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMusicalSymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsMyanmar
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsNumberForms
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsOgham
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsOldItalic
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsOpticalCharacterRecognition
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsOriya
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsOsmanya
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsPhoneticExtensions
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsPrivateUse
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsPrivateUseArea
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsRunic
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsShavian
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSinhala
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSmallFormVariants
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSpacingModifierLetters
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSpecials
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSuperscriptsandSubscripts
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSupplementalArrowsA
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSupplementalArrowsB
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSupplementalMathematicalOperators
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSupplementaryPrivateUseAreaA
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSupplementaryPrivateUseAreaB
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsSyriac
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsTagalog
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsTagbanwa
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsTags
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsTaiLe
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsTaiXuanJingSymbols
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsTamil
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsTelugu
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsThaana
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsThai
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsTibetan
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsUgaritic
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsUnifiedCanadianAboriginalSyllabics
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsVariationSelectors
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsVariationSelectorsSupplement
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsYiRadicals
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsYiSyllables
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlUCSIsYijingHexagramSymbols
+#endif
+xmlURIEscape
+xmlURIEscapeStr
+xmlURIUnescapeString
+xmlUTF8Charcmp
+xmlUTF8Size
+xmlUTF8Strlen
+xmlUTF8Strloc
+xmlUTF8Strndup
+xmlUTF8Strpos
+xmlUTF8Strsize
+xmlUTF8Strsub
+xmlUnlinkNode
+xmlUnlockLibrary
+xmlUnsetNsProp
+xmlUnsetProp
+#ifdef LIBXML_REGEXP_ENABLED
+xmlValidBuildContentModel
+#endif
+xmlValidCtxtNormalizeAttributeValue
+xmlValidGetPotentialChildren
+xmlValidGetValidElements
+xmlValidNormalizeAttributeValue
+xmlValidateAttributeDecl
+xmlValidateAttributeValue
+xmlValidateDocument
+xmlValidateDocumentFinal
+xmlValidateDtd
+xmlValidateDtdFinal
+xmlValidateElement
+xmlValidateElementDecl
+xmlValidateNCName
+xmlValidateNMToken
+xmlValidateName
+xmlValidateNameValue
+xmlValidateNamesValue
+xmlValidateNmtokenValue
+xmlValidateNmtokensValue
+xmlValidateNotationDecl
+xmlValidateNotationUse
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidatePopElement
+xmlValidatePushCData
+xmlValidatePushElement
+xmlValidateQName
+xmlValidateRoot
+#ifdef LIBXML_XINCLUDE_ENABLED
+xmlXIncludeFreeContext
+#endif
+#ifdef LIBXML_XINCLUDE_ENABLED
+xmlXIncludeNewContext
+#endif
+#ifdef LIBXML_XINCLUDE_ENABLED
+xmlXIncludeProcess
+#endif
+#ifdef LIBXML_XINCLUDE_ENABLED
+xmlXIncludeProcessFlags
+#endif
+#ifdef LIBXML_XINCLUDE_ENABLED
+xmlXIncludeProcessNode
+#endif
+#ifdef LIBXML_XINCLUDE_ENABLED
+xmlXIncludeProcessTree
+#endif
+#ifdef LIBXML_XINCLUDE_ENABLED
+xmlXIncludeProcessTreeFlags
+#endif
+#ifdef LIBXML_XINCLUDE_ENABLED
+xmlXIncludeSetFlags
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathAddValues
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathBooleanFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastBooleanToNumber
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastBooleanToString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastNodeSetToBoolean
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastNodeSetToNumber
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastNodeSetToString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastNodeToNumber
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastNodeToString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastNumberToBoolean
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastNumberToString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastStringToBoolean
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastStringToNumber
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastToBoolean
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastToNumber
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCastToString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCeilingFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCmpNodes
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCompareValues
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCompile
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCompiledEval
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathConcatFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathContainsFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathConvertBoolean
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathConvertNumber
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathConvertString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCountFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathCtxtCompile
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+#ifdef LIBXML_DEBUG_ENABLED
+xmlXPathDebugDumpCompExpr
+#endif
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+#ifdef LIBXML_DEBUG_ENABLED
+xmlXPathDebugDumpObject
+#endif
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathDifference
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathDistinct
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathDistinctSorted
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathDivValues
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathEqualValues
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathErr
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathEval
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathEvalExpr
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathEvalExpression
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathEvalPredicate
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathEvaluatePredicateResult
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFalseFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFloorFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFreeCompExpr
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFreeContext
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFreeNodeSet
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFreeNodeSetList
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFreeObject
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFreeParserContext
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFunctionLookup
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathFunctionLookupNS
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathHasSameNodes
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathIdFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathInit
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathIntersection
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathIsInf
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathIsNaN
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathIsNodeType
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathLangFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathLastFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathLeading
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathLeadingSorted
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathLocalNameFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathModValues
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathMultValues
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNamespaceURIFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNewBoolean
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNewCString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNewContext
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNewFloat
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNewNodeSet
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNewNodeSetList
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNewParserContext
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNewString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNewValueTree
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextAncestor
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextAncestorOrSelf
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextAttribute
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextChild
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextDescendant
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextDescendantOrSelf
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextFollowing
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextFollowingSibling
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextNamespace
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextParent
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextPreceding
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextPrecedingSibling
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNextSelf
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeLeading
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeLeadingSorted
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetAdd
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetAddNs
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetAddUnique
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetContains
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetCreate
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetDel
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetFreeNs
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetMerge
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetRemove
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeSetSort
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeTrailing
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeTrailingSorted
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNormalizeFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNotEqualValues
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNotFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNsLookup
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathNumberFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathObjectCopy
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathOrderDocElems
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathParseNCName
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathParseName
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathPopBoolean
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathPopExternal
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathPopNodeSet
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathPopNumber
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathPopString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathPositionFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisterAllFunctions
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisterFunc
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisterFuncLookup
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisterFuncNS
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisterNs
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisterVariable
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisterVariableLookup
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisterVariableNS
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisteredFuncsCleanup
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisteredNsCleanup
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRegisteredVariablesCleanup
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRoot
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathRoundFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathStartsWithFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathStringEvalNumber
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathStringFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathStringLengthFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathSubValues
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathSubstringAfterFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathSubstringBeforeFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathSubstringFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathSumFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathTrailing
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathTrailingSorted
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathTranslateFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathTrueFunction
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathValueFlipSign
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathVariableLookup
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathVariableLookupNS
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathWrapCString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathWrapExternal
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathWrapNodeSet
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPathWrapString
+#endif
+#ifdef LIBXML_XPATH_ENABLED
+xmlXPatherror
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrBuildNodeList
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrEval
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrEvalRangePredicate
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrFreeLocationSet
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrLocationSetAdd
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrLocationSetCreate
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrLocationSetDel
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrLocationSetMerge
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrLocationSetRemove
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewCollapsedRange
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewContext
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewLocationSetNodeSet
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewLocationSetNodes
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewRange
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewRangeNodeObject
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewRangeNodePoint
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewRangeNodes
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewRangePointNode
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrNewRangePoints
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrRangeToFunction
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+xmlXPtrWrapLocationSet
+#endif
diff --git a/win32/wince/libxml2.vcb b/win32/wince/libxml2.vcb
new file mode 100644
index 0000000..954d053
--- /dev/null
+++ b/win32/wince/libxml2.vcb
@@ -0,0 +1 @@
+Microsoft C/C++ program database 2.00
diff --git a/win32/wince/libxml2.vcl b/win32/wince/libxml2.vcl
new file mode 100644
index 0000000..627ecb6
--- /dev/null
+++ b/win32/wince/libxml2.vcl
@@ -0,0 +1,122 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: libxml2 - Win32 (WCE x86em) Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\fjvg\CONFIG~1\Temp\RSP12E.tmp" with contents
+[
+/nologo /W3 /Zi /Od /I "..\..\..\include" /I "..\..\include" /I "c:\ppc\libxml\XML\win32\wince" /D "DEBUG" /D _WIN32_WCE=300 /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "WIN32_PLATFORM_PSPC" /D "i486" /D UNDER_CE=300 /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /Fp"X86EMDbg/libxml2.pch" /YX /Fo"X86EMDbg/" /Fd"X86EMDbg/" /Gz /c
+"C:\ppc\libxml\XML\DOCBparser.c"
+"C:\ppc\libxml\XML\encoding.c"
+"C:\ppc\libxml\XML\entities.c"
+"C:\ppc\libxml\XML\error.c"
+"C:\ppc\libxml\XML\globals.c"
+"C:\ppc\libxml\XML\hash.c"
+"C:\ppc\libxml\XML\list.c"
+"C:\ppc\libxml\XML\parser.c"
+"C:\ppc\libxml\XML\parserInternals.c"
+"C:\ppc\libxml\XML\SAX.c"
+"C:\ppc\libxml\XML\threads.c"
+"C:\ppc\libxml\XML\tree.c"
+"C:\ppc\libxml\XML\uri.c"
+"C:\ppc\libxml\XML\valid.c"
+"C:\ppc\libxml\XML\win32\wince\wincecompat.c"
+"C:\ppc\libxml\XML\xlink.c"
+"C:\ppc\libxml\XML\xmlIO.c"
+"C:\ppc\libxml\XML\xmlmemory.c"
+"C:\ppc\libxml\XML\c14n.c"
+"C:\ppc\libxml\XML\catalog.c"
+"C:\ppc\libxml\XML\debugXML.c"
+"C:\ppc\libxml\XML\HTMLparser.c"
+"C:\ppc\libxml\XML\HTMLtree.c"
+"C:\ppc\libxml\XML\nanoftp.c"
+"C:\ppc\libxml\XML\nanohttp.c"
+"C:\ppc\libxml\XML\xinclude.c"
+"C:\ppc\libxml\XML\xpath.c"
+"C:\ppc\libxml\XML\xpointer.c"
+]
+Creating command line "cl.exe @C:\DOCUME~1\fjvg\CONFIG~1\Temp\RSP12E.tmp"
+Creating temporary file "C:\DOCUME~1\fjvg\CONFIG~1\Temp\RSP12F.tmp" with contents
+[
+corelibc.lib winsock.lib commctrl.lib coredll.lib /nologo /stack:0x10000,0x1000 /dll /incremental:yes /pdb:"X86EMDbg/libxml2.pdb" /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:libc.lib /nodefaultlib:libcd.lib /nodefaultlib:libcmt.lib /nodefaultlib:libcmtd.lib /nodefaultlib:msvcrt.lib /nodefaultlib:msvcrtd.lib /nodefaultlib:oldnames.lib /def:".\libxml2.def" /out:"X86EMDbg/libxml2.dll" /implib:"X86EMDbg/libxml2.lib" /windowsce:emulation /MACHINE:IX86
+.\X86EMDbg\DOCBparser.obj
+.\X86EMDbg\encoding.obj
+.\X86EMDbg\entities.obj
+.\X86EMDbg\error.obj
+.\X86EMDbg\globals.obj
+.\X86EMDbg\hash.obj
+.\X86EMDbg\list.obj
+.\X86EMDbg\parser.obj
+.\X86EMDbg\parserInternals.obj
+.\X86EMDbg\SAX.obj
+.\X86EMDbg\threads.obj
+.\X86EMDbg\tree.obj
+.\X86EMDbg\uri.obj
+.\X86EMDbg\valid.obj
+.\X86EMDbg\wincecompat.obj
+.\X86EMDbg\xlink.obj
+.\X86EMDbg\xmlIO.obj
+.\X86EMDbg\xmlmemory.obj
+.\X86EMDbg\c14n.obj
+.\X86EMDbg\catalog.obj
+.\X86EMDbg\debugXML.obj
+.\X86EMDbg\HTMLparser.obj
+.\X86EMDbg\HTMLtree.obj
+.\X86EMDbg\nanoftp.obj
+.\X86EMDbg\nanohttp.obj
+.\X86EMDbg\xinclude.obj
+.\X86EMDbg\xpath.obj
+.\X86EMDbg\xpointer.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\fjvg\CONFIG~1\Temp\RSP12F.tmp"
+<h3>Output Window</h3>
+Compiling...
+DOCBparser.c
+encoding.c
+entities.c
+error.c
+globals.c
+hash.c
+list.c
+parser.c
+C:\ppc\libxml\XML\parser.c(2282) : warning C4090: '=' : different 'const' qualifiers
+parserInternals.c
+SAX.c
+threads.c
+tree.c
+uri.c
+valid.c
+wincecompat.c
+C:\ppc\libxml\XML\win32\wince\wincecompat.c(37) : warning C4047: '=' : 'char ' differs in levels of indirection from 'char [2]'
+C:\ppc\libxml\XML\win32\wince\wincecompat.c(39) : warning C4047: '=' : 'char ' differs in levels of indirection from 'char [2]'
+C:\ppc\libxml\XML\win32\wince\wincecompat.c(40) : warning C4047: 'return' : 'int ' differs in levels of indirection from 'void *'
+xlink.c
+xmlIO.c
+C:\ppc\libxml\XML\xmlIO.c(2404) : warning C4101: 'dir' : unreferenced local variable
+C:\ppc\libxml\XML\xmlIO.c(2405) : warning C4101: 'cur' : unreferenced local variable
+xmlmemory.c
+c14n.c
+catalog.c
+debugXML.c
+HTMLparser.c
+HTMLtree.c
+nanoftp.c
+nanohttp.c
+C:\ppc\libxml\XML\nanoftp.c(892) : warning C4761: integral size mismatch in argument; conversion supplied
+xinclude.c
+C:\ppc\libxml\XML\nanohttp.c(921) : warning C4761: integral size mismatch in argument; conversion supplied
+xpath.c
+xpointer.c
+Linking...
+ Creating library X86EMDbg/libxml2.lib and object X86EMDbg/libxml2.exp
+
+
+
+<h3>Results</h3>
+libxml2.dll - 0 error(s), 8 warning(s)
+</pre>
+</body>
+</html>
diff --git a/win32/wince/libxml2.vco b/win32/wince/libxml2.vco
new file mode 100644
index 0000000..3599f1b
--- /dev/null
+++ b/win32/wince/libxml2.vco
@@ -0,0 +1 @@
+ÐÏࡱ \ No newline at end of file
diff --git a/win32/wince/libxml2.vcp b/win32/wince/libxml2.vcp
new file mode 100644
index 0000000..101fbcd
--- /dev/null
+++ b/win32/wince/libxml2.vcp
@@ -0,0 +1,5273 @@
+# Microsoft eMbedded Visual Tools Project File - Name="libxml2" - Package Owner=<4>
+# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (WCE SH3) Dynamic-Link Library" 0x8102
+# TARGTYPE "Win32 (WCE x86em) Dynamic-Link Library" 0x7f02
+# TARGTYPE "Win32 (WCE x86) Dynamic-Link Library" 0x8302
+# TARGTYPE "Win32 (WCE ARM) Dynamic-Link Library" 0x8502
+# TARGTYPE "Win32 (WCE MIPS) Dynamic-Link Library" 0x8202
+
+CFG=libxml2 - Win32 (WCE ARM) Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "libxml2.vcn".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "libxml2.vcn" CFG="libxml2 - Win32 (WCE ARM) Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "libxml2 - Win32 (WCE ARM) Release" (based on "Win32 (WCE ARM) Dynamic-Link Library")
+!MESSAGE "libxml2 - Win32 (WCE ARM) Debug" (based on "Win32 (WCE ARM) Dynamic-Link Library")
+!MESSAGE "libxml2 - Win32 (WCE x86em) Debug" (based on "Win32 (WCE x86em) Dynamic-Link Library")
+!MESSAGE "libxml2 - Win32 (WCE MIPS) Release" (based on "Win32 (WCE MIPS) Dynamic-Link Library")
+!MESSAGE "libxml2 - Win32 (WCE SH3) Release" (based on "Win32 (WCE SH3) Dynamic-Link Library")
+!MESSAGE "libxml2 - Win32 (WCE x86) Debug" (based on "Win32 (WCE x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+# PROP ATL_Project 2
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ARMRel"
+# PROP BASE Intermediate_Dir "ARMRel"
+# PROP BASE CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ARMRel"
+# PROP Intermediate_Dir "ARMRel"
+# PROP CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /r
+# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /r
+CPP=clarm.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_USRDLL" /D "CEDLL_EXPORTS" /YX /Oxs /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "..\..\include" /I "c:\ppc\libxml\XML\win32\wince" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_USRDLL" /D "CEDLL_EXPORTS" /YX /Oxs /M$(CECrtMT) /c
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
+# ADD LINK32 winsock.lib commctrl.lib coredll.lib /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "ARMDbg"
+# PROP BASE Intermediate_Dir "ARMDbg"
+# PROP BASE CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "ARMDbg"
+# PROP Intermediate_Dir "ARMDbg"
+# PROP CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /r
+# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "ARM" /d "_ARM_" /r
+CPP=clarm.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "DEBUG" /D "_USRDLL" /D "CEDLL_EXPORTS" /YX /Oxs /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "..\..\include" /I "c:\ppc\libxml\XML\win32\wince" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "DEBUG" /D "_USRDLL" /D "CEDLL_EXPORTS" /Oxs /M$(CECrtMT) /c
+# SUBTRACT CPP /YX
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
+# ADD LINK32 winsock.lib commctrl.lib coredll.lib /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /debug /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "X86EMDbg"
+# PROP BASE Intermediate_Dir "X86EMDbg"
+# PROP BASE CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "X86EMDbg"
+# PROP Intermediate_Dir "X86EMDbg"
+# PROP CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "_X86_" /d "x86" /d "i486" /r
+# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "_X86_" /d "x86" /d "i486" /r
+CPP=cl.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "$(CePlatform)" /D "i486" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /YX /Gz /c
+# ADD CPP /nologo /W3 /Zi /Od /I "..\..\..\include" /I "..\..\include" /I "c:\ppc\libxml\XML\win32\wince" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "$(CePlatform)" /D "i486" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /YX /Gz /c
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /stack:0x10000,0x1000 /dll /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /windowsce:emulation /MACHINE:IX86
+# ADD LINK32 $(CEx86Corelibc) winsock.lib commctrl.lib coredll.lib /nologo /stack:0x10000,0x1000 /dll /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /windowsce:emulation /MACHINE:IX86
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "MIPSRel"
+# PROP BASE Intermediate_Dir "MIPSRel"
+# PROP BASE CPU_ID "{D6519010-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "MIPSRel"
+# PROP Intermediate_Dir "MIPSRel"
+# PROP CPU_ID "{D6519010-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /r
+# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "MIPS" /d "_MIPS_" /r
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /YX /Oxs /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "..\..\include" /I "c:\ppc\libxml\XML\win32\wince" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /YX /Oxs /M$(CECrtMT) /c
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:MIPS
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "SH3Rel"
+# PROP BASE Intermediate_Dir "SH3Rel"
+# PROP BASE CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "SH3Rel"
+# PROP Intermediate_Dir "SH3Rel"
+# PROP CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir ""
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "SHx" /d "SH3" /d "_SH3_" /r
+# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "SHx" /d "SH3" /d "_SH3_" /r
+CPP=shcl.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /YX /Oxs /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "..\..\include" /I "c:\ppc\libxml\XML\win32\wince" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /YX /Oxs /M$(CECrtMT) /c
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 commctrl.lib coredll.lib /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH3
+# ADD LINK32 commctrl.lib coredll.lib winsock.lib /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /nodefaultlib:"$(CENoDefaultLib)" /subsystem:$(CESubsystem) /MACHINE:SH3
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "X86Dbg"
+# PROP BASE Intermediate_Dir "X86Dbg"
+# PROP BASE CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "X86Dbg"
+# PROP Intermediate_Dir "X86Dbg"
+# PROP CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+RSC=rc.exe
+# ADD BASE RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "_X86_" /d "x86" /d "_i386_" /r
+# ADD RSC /l 0x409 /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "DEBUG" /d "$(CePlatform)" /d "_X86_" /d "x86" /d "_i386_" /r
+CPP=cl.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /YX /Gs8192 /GF /c
+# ADD CPP /nologo /W3 /Zi /Od /I "..\..\include" /I "c:\ppc\libxml\XML\win32\wince" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /YX /Gs8192 /GF /c
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
+# ADD LINK32 commctrl.lib coredll.lib $(CEx86Corelibc) winsock.lib /nologo /base:"0x00100000" /stack:0x10000,0x1000 /entry:"_DllMainCRTStartup" /dll /debug /nodefaultlib:"OLDNAMES.lib" /nodefaultlib:$(CENoDefaultLib) /subsystem:$(CESubsystem) /MACHINE:IX86
+
+!ENDIF
+
+# Begin Target
+
+# Name "libxml2 - Win32 (WCE ARM) Release"
+# Name "libxml2 - Win32 (WCE ARM) Debug"
+# Name "libxml2 - Win32 (WCE x86em) Debug"
+# Name "libxml2 - Win32 (WCE MIPS) Release"
+# Name "libxml2 - Win32 (WCE SH3) Release"
+# Name "libxml2 - Win32 (WCE x86) Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\c14n.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_C14N_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\c14n.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_C14N_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+# PROP Exclude_From_Build 1
+DEP_CPP_C14N_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\c14n.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_C14N_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_C14N_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\c14n.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_C14N_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_C14N_=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_C14N_=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_C14N_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\c14n.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_C14N_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_C14N_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\c14n.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_C14N_=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\catalog.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_CATAL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_CATAL=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+# PROP Exclude_From_Build 1
+DEP_CPP_CATAL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_CATAL=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_CATAL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_CATAL=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_CATAL=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_CATAL=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_CATAL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_CATAL=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+# PROP Exclude_From_Build 1
+DEP_CPP_CATAL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_CATAL=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\debugXML.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_DEBUG=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DEBUG=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_DEBUG=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DEBUG=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_DEBUG=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DEBUG=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_DEBUG=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_DEBUG=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_DEBUG=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DEBUG=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_DEBUG=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DEBUG=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\DOCBparser.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_DOCBP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\DOCBparser.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DOCBP=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_DOCBP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\DOCBparser.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DOCBP=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_DOCBP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\DOCBparser.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DOCBP=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_DOCBP=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_DOCBP=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_DOCBP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\DOCBparser.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DOCBP=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+# PROP Exclude_From_Build 1
+DEP_CPP_DOCBP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\DOCBparser.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_DOCBP=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\encoding.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_ENCOD=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENCOD=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_ENCOD=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENCOD=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_ENCOD=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENCOD=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_ENCOD=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_ENCOD=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_ENCOD=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENCOD=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_ENCOD=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENCOD=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\entities.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_ENTIT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENTIT=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_ENTIT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENTIT=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_ENTIT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENTIT=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_ENTIT=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_ENTIT=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_ENTIT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENTIT=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_ENTIT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ENTIT=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\error.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_ERROR=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ERROR=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_ERROR=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ERROR=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_ERROR=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ERROR=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_ERROR=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_ERROR=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_ERROR=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ERROR=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_ERROR=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_ERROR=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\globals.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_GLOBA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_GLOBA=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_GLOBA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_GLOBA=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_GLOBA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_GLOBA=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_GLOBA=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_GLOBA=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_GLOBA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_GLOBA=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_GLOBA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_GLOBA=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\hash.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_HASH_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HASH_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_HASH_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HASH_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_HASH_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HASH_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_HASH_=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_HASH_=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_HASH_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HASH_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_HASH_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HASH_=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\HTMLparser.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_HTMLP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLP=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+# PROP Exclude_From_Build 1
+DEP_CPP_HTMLP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLP=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_HTMLP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLP=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_HTMLP=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_HTMLP=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_HTMLP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLP=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_HTMLP=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLP=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\HTMLtree.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_HTMLT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLT=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+# PROP Exclude_From_Build 1
+DEP_CPP_HTMLT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLT=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_HTMLT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLT=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_HTMLT=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_HTMLT=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_HTMLT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLT=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_HTMLT=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_HTMLT=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\libxml2.def
+# End Source File
+# Begin Source File
+
+SOURCE=.\libxml2.def.src
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+USERDEP__LIBXM="../../include/libxml/xmlversion.h;"
+# Begin Custom Build
+InputPath=.\libxml2.def.src
+
+"libxml2.def" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ cl /I"..\.." /I"..\..\include" /nologo /EP $(InputPath) > libxml2.def
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\list.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_LIST_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_LIST_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_LIST_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_LIST_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_LIST_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_LIST_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_LIST_=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_LIST_=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_LIST_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_LIST_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_LIST_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_LIST_=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\nanoftp.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_NANOF=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOF=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_NANOF=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOF=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_NANOF=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOF=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_NANOF=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_NANOF=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_NANOF=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOF=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_NANOF=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOF=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\nanohttp.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_NANOH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOH=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_NANOH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOH=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_NANOH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOH=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_NANOH=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_NANOH=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_NANOH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOH=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_NANOH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_NANOH=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\parser.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_PARSE=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSE=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_PARSE=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSE=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_PARSE=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSE=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_PARSE=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_PARSE=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_PARSE=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSE=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_PARSE=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSE=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\parserInternals.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_PARSER=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSER=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_PARSER=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSER=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_PARSER=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSER=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_PARSER=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_PARSER=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_PARSER=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSER=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_PARSER=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_PARSER=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SAX.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_SAX_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_SAX_C=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_SAX_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_SAX_C=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_SAX_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_SAX_C=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_SAX_C=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_SAX_C=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_SAX_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_SAX_C=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_SAX_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\HTMLtree.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_SAX_C=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\threads.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_THREA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_THREA=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_THREA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_THREA=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_THREA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_THREA=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_THREA=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_THREA=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_THREA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_THREA=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_THREA=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_THREA=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\tree.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_TREE_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_TREE_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_TREE_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_TREE_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_TREE_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_TREE_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_TREE_=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_TREE_=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_TREE_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_TREE_=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_TREE_=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_TREE_=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\uri.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_URI_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_URI_C=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_URI_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_URI_C=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_URI_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_URI_C=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_URI_C=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_URI_C=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_URI_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_URI_C=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_URI_C=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_URI_C=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\valid.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_VALID=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_VALID=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_VALID=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_VALID=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_VALID=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_VALID=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_VALID=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_VALID=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_VALID=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_VALID=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_VALID=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_VALID=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\wincecompat.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_WINCE=\
+ ".\wincecompat.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_WINCE=\
+ ".\wincecompat.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_WINCE=\
+ ".\wincecompat.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_WINCE=\
+ ".\wincecompat.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_WINCE=\
+ ".\wincecompat.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_WINCE=\
+ ".\wincecompat.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\xinclude.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_XINCL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xinclude.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XINCL=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+# PROP Exclude_From_Build 1
+DEP_CPP_XINCL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xinclude.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XINCL=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_XINCL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xinclude.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XINCL=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_XINCL=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_XINCL=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_XINCL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xinclude.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XINCL=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_XINCL=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xinclude.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XINCL=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\xlink.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_XLINK=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XLINK=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_XLINK=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XLINK=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_XLINK=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XLINK=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_XLINK=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_XLINK=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_XLINK=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XLINK=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_XLINK=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XLINK=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\xmlIO.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_XMLIO=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLIO=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_XMLIO=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLIO=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_XMLIO=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLIO=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_XMLIO=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_XMLIO=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_XMLIO=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLIO=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_XMLIO=\
+ "..\..\config.h"\
+ "..\..\include\libxml\catalog.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\nanoftp.h"\
+ "..\..\include\libxml\nanohttp.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLIO=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\xmlmemory.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_XMLME=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLME=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+DEP_CPP_XMLME=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLME=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_XMLME=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLME=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_XMLME=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_XMLME=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_XMLME=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLME=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_XMLME=\
+ "..\..\config.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XMLME=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\xpath.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_XPATH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ "..\..\triodef.h"\
+ "..\..\trionan.c"\
+ "..\..\trionan.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPATH=\
+ "..\..\config-mac.h"\
+ "..\..\doc\doc_nan.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+# PROP Exclude_From_Build 1
+DEP_CPP_XPATH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ "..\..\triodef.h"\
+ "..\..\trionan.c"\
+ "..\..\trionan.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPATH=\
+ "..\..\config-mac.h"\
+ "..\..\doc\doc_nan.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_XPATH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ "..\..\triodef.h"\
+ "..\..\trionan.c"\
+ "..\..\trionan.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPATH=\
+ "..\..\config-mac.h"\
+ "..\..\doc\doc_nan.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_XPATH=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ "..\..\triodef.h"\
+ "..\..\trionan.c"\
+ "..\..\trionan.h"\
+
+NODEP_CPP_XPATH=\
+ "..\..\config-mac.h"\
+ "..\..\doc\doc_nan.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_XPATH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ "..\..\triodef.h"\
+ "..\..\trionan.c"\
+ "..\..\trionan.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPATH=\
+ "..\..\config-mac.h"\
+ "..\..\doc\doc_nan.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_XPATH=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ "..\..\triodef.h"\
+ "..\..\trionan.c"\
+ "..\..\trionan.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPATH=\
+ "..\..\config-mac.h"\
+ "..\..\doc\doc_nan.h"\
+
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\xpointer.c
+
+!IF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Release"
+
+DEP_CPP_XPOIN=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\include\winCEconfig.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPOIN=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE ARM) Debug"
+
+# PROP Exclude_From_Build 1
+DEP_CPP_XPOIN=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPOIN=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86em) Debug"
+
+DEP_CPP_XPOIN=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPOIN=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE MIPS) Release"
+
+DEP_CPP_XPOIN=\
+ "..\..\config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+
+NODEP_CPP_XPOIN=\
+ "..\..\config-mac.h"\
+ "..\..\win32config.h"\
+ "..\..\winCEconfig.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE SH3) Release"
+
+DEP_CPP_XPOIN=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPOIN=\
+ "..\..\config-mac.h"\
+
+
+!ELSEIF "$(CFG)" == "libxml2 - Win32 (WCE x86) Debug"
+
+DEP_CPP_XPOIN=\
+ "..\..\config.h"\
+ "..\..\include\libxml\debugXML.h"\
+ "..\..\include\libxml\encoding.h"\
+ "..\..\include\libxml\entities.h"\
+ "..\..\include\libxml\globals.h"\
+ "..\..\include\libxml\hash.h"\
+ "..\..\include\libxml\HTMLparser.h"\
+ "..\..\include\libxml\list.h"\
+ "..\..\include\libxml\parser.h"\
+ "..\..\include\libxml\parserInternals.h"\
+ "..\..\include\libxml\SAX.h"\
+ "..\..\include\libxml\threads.h"\
+ "..\..\include\libxml\tree.h"\
+ "..\..\include\libxml\uri.h"\
+ "..\..\include\libxml\valid.h"\
+ "..\..\include\libxml\xlink.h"\
+ "..\..\include\libxml\xmlerror.h"\
+ "..\..\include\libxml\xmlIO.h"\
+ "..\..\include\libxml\xmlmemory.h"\
+ "..\..\include\libxml\xmlversion.h"\
+ "..\..\include\libxml\xmlwin32version.h"\
+ "..\..\include\libxml\xpath.h"\
+ "..\..\include\libxml\xpathInternals.h"\
+ "..\..\include\libxml\xpointer.h"\
+ "..\..\include\win32config.h"\
+ "..\..\libxml.h"\
+ "..\..\trio.h"\
+ ".\wincecompat.h"\
+
+NODEP_CPP_XPOIN=\
+ "..\..\config-mac.h"\
+
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\include\libxml\c14n.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\catalog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\debugXML.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\DOCBparser.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\encoding.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\entities.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\globals.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\hash.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\HTMLparser.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\HTMLtree.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libxml.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\list.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\nanoftp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\nanohttp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\parser.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\parserInternals.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\SAX.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\tree.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\uri.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\valid.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\win32config.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\wincecompat.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xinclude.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xlink.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xmlerror.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xmlIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xmlmemory.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xmlversion.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xmlwin32version.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xpath.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xpathInternals.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\libxml\xpointer.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/win32/wince/libxml2.vcw b/win32/wince/libxml2.vcw
new file mode 100644
index 0000000..c050c4f
--- /dev/null
+++ b/win32/wince/libxml2.vcw
@@ -0,0 +1,41 @@
+Microsoft eMbedded Visual Tools Workspace File, Format Version 3.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "libxml2"=.\libxml2.vcp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "ppcTest"=.\ppcTest\ppcTest.vcp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/win32/wince/wincecompat.c b/win32/wince/wincecompat.c
new file mode 100644
index 0000000..bf70fcc
--- /dev/null
+++ b/win32/wince/wincecompat.c
@@ -0,0 +1,61 @@
+/*
+ * wincecompat.c : wince compatiblity module
+ *
+ * See Copyright for the status of this software.
+ *
+ * javier@tiresiassoft.com
+ *
+ * 17 Sep 2002 created
+ */
+
+#include "wincecompat.h"
+
+char *strError[]= {"Error 0","","No such file or directory","","","","","Arg list too long",
+ "Exec format error","Bad file number","","","Not enough core","Permission denied","","",
+ "","File exists","Cross-device link","","","","Invalid argument","","Too many open files",
+ "","","","No space left on device","","","","","Math argument","Result too large","",
+ "Resource deadlock would occur", "Unknown error under wince"};
+
+
+int errno=0;
+
+int read(int handle, char *buffer, unsigned int len)
+{
+ return(fread(&buffer[0], len, 1, (FILE *) handle));
+}
+
+int write(int handle, const char *buffer, unsigned int len)
+{
+ return(fwrite(&buffer[0], len,1,(FILE *) handle));
+}
+
+int open(const char *filename,int oflag, ...)
+{
+ char mode[3]; /* mode[0] ="w/r/a" mode[1]="+" */
+ mode[2]=0;
+ if ( oflag==(O_WRONLY|O_CREAT) )
+ mode[0]="w";
+ else if (oflag==O_RDONLY)
+ mode[0]="r";
+ return fopen(filename, mode);
+
+}
+
+int close(int handle)
+{
+ return ( fclose((FILE *) handle) );
+}
+
+
+char *getenv( const char *varname )
+{
+ return NULL;
+}
+
+char *strerror(int errnum)
+{
+ if (errnum>MAX_STRERROR)
+ return strError[MAX_STRERROR];
+ else
+ return strError[errnum];
+}
diff --git a/win32/wince/wincecompat.h b/win32/wince/wincecompat.h
new file mode 100644
index 0000000..49468a3
--- /dev/null
+++ b/win32/wince/wincecompat.h
@@ -0,0 +1,46 @@
+/*
+ * wincecompat.h : wince compatiblity header file
+ *
+ * See Copyright for the status of this software.
+ *
+ * javier@tiresiassoft.com
+ *
+ * 17 Sep 2002 created
+ */
+
+#ifndef __WINCECOMPAT_H__
+#define __WINCECOMPAT_H__
+
+#include <stdio.h>
+
+#define MAX_STRERROR 31
+
+#define O_RDONLY 0x0000 /* open for reading only */
+#define O_WRONLY 0x0001 /* open for writing only */
+#define O_RDWR 0x0002 /* open for reading and writing */
+#define O_APPEND 0x0008 /* writes done at eof */
+
+#define O_CREAT 0x0100 /* create and open file */
+#define O_TRUNC 0x0200 /* open and truncate */
+#define O_EXCL 0x0400 /* open only if file doesn't already exist */
+
+extern int errno;
+/*
+ Prototypes
+*/
+int read(int handle, char *buffer, unsigned int len);
+int write(int handle, const char *buffer, unsigned int len);
+int open(const char *filename,int oflag, ...);
+int close(int handle);
+char *getenv( const char *varname );
+char *strerror(int errnum);
+
+/*
+ Macro'ed inexistant funtion names
+
+*/
+#define snprintf _snprintf
+#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a)
+#define perror(_t) MessageBox(NULL, _T("_t"), _T("Error/Warning"), MB_OK)
+
+#endif \ No newline at end of file
diff --git a/xinclude.c b/xinclude.c
new file mode 100644
index 0000000..8f8b818
--- /dev/null
+++ b/xinclude.c
@@ -0,0 +1,2384 @@
+/*
+ * xinclude.c : Code to implement XInclude processing
+ *
+ * World Wide Web Consortium W3C Last Call Working Draft 10 November 2003
+ * http://www.w3.org/TR/2003/WD-xinclude-20031110
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/uri.h>
+#include <libxml/xpointer.h>
+#include <libxml/parserInternals.h>
+#include <libxml/xmlerror.h>
+#include <libxml/encoding.h>
+#include <libxml/globals.h>
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+#include <libxml/xinclude.h>
+
+
+#define XINCLUDE_MAX_DEPTH 40
+
+/* #define DEBUG_XINCLUDE */
+#ifdef DEBUG_XINCLUDE
+#ifdef LIBXML_DEBUG_ENABLED
+#include <libxml/debugXML.h>
+#endif
+#endif
+
+/************************************************************************
+ * *
+ * XInclude context handling *
+ * *
+ ************************************************************************/
+
+/*
+ * An XInclude context
+ */
+typedef xmlChar *xmlURL;
+
+typedef struct _xmlXIncludeRef xmlXIncludeRef;
+typedef xmlXIncludeRef *xmlXIncludeRefPtr;
+struct _xmlXIncludeRef {
+ xmlChar *URI; /* the fully resolved resource URL */
+ xmlChar *fragment; /* the fragment in the URI */
+ xmlDocPtr doc; /* the parsed document */
+ xmlNodePtr ref; /* the node making the reference in the source */
+ xmlNodePtr inc; /* the included copy */
+ int xml; /* xml or txt */
+ int count; /* how many refs use that specific doc */
+ xmlXPathObjectPtr xptr; /* the xpointer if needed */
+ int emptyFb; /* flag to show fallback empty */
+};
+
+struct _xmlXIncludeCtxt {
+ xmlDocPtr doc; /* the source document */
+ int incBase; /* the first include for this document */
+ int incNr; /* number of includes */
+ int incMax; /* size of includes tab */
+ xmlXIncludeRefPtr *incTab; /* array of included references */
+
+ int txtNr; /* number of unparsed documents */
+ int txtMax; /* size of unparsed documents tab */
+ xmlNodePtr *txtTab; /* array of unparsed text nodes */
+ xmlURL *txturlTab; /* array of unparsed text URLs */
+
+ xmlChar * url; /* the current URL processed */
+ int urlNr; /* number of URLs stacked */
+ int urlMax; /* size of URL stack */
+ xmlChar * *urlTab; /* URL stack */
+
+ int nbErrors; /* the number of errors detected */
+ int legacy; /* using XINCLUDE_OLD_NS */
+ int parseFlags; /* the flags used for parsing XML documents */
+};
+
+static int
+xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree);
+
+
+/************************************************************************
+ * *
+ * XInclude error handler *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXIncludeErrMemory:
+ * @extra: extra information
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlXIncludeErrMemory(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node,
+ const char *extra)
+{
+ if (ctxt != NULL)
+ ctxt->nbErrors++;
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
+ XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0,
+ extra, NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+}
+
+/**
+ * xmlXIncludeErr:
+ * @ctxt: the XInclude context
+ * @node: the context node
+ * @msg: the error message
+ * @extra: extra information
+ *
+ * Handle an XInclude error
+ */
+static void
+xmlXIncludeErr(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node, int error,
+ const char *msg, const xmlChar *extra)
+{
+ if (ctxt != NULL)
+ ctxt->nbErrors++;
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
+ error, XML_ERR_ERROR, NULL, 0,
+ (const char *) extra, NULL, NULL, 0, 0,
+ msg, (const char *) extra);
+}
+
+#if 0
+/**
+ * xmlXIncludeWarn:
+ * @ctxt: the XInclude context
+ * @node: the context node
+ * @msg: the error message
+ * @extra: extra information
+ *
+ * Emit an XInclude warning.
+ */
+static void
+xmlXIncludeWarn(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node, int error,
+ const char *msg, const xmlChar *extra)
+{
+ __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
+ error, XML_ERR_WARNING, NULL, 0,
+ (const char *) extra, NULL, NULL, 0, 0,
+ msg, (const char *) extra);
+}
+#endif
+
+/**
+ * xmlXIncludeGetProp:
+ * @ctxt: the XInclude context
+ * @cur: the node
+ * @name: the attribute name
+ *
+ * Get an XInclude attribute
+ *
+ * Returns the value (to be freed) or NULL if not found
+ */
+static xmlChar *
+xmlXIncludeGetProp(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur,
+ const xmlChar *name) {
+ xmlChar *ret;
+
+ ret = xmlGetNsProp(cur, XINCLUDE_NS, name);
+ if (ret != NULL)
+ return(ret);
+ if (ctxt->legacy != 0) {
+ ret = xmlGetNsProp(cur, XINCLUDE_OLD_NS, name);
+ if (ret != NULL)
+ return(ret);
+ }
+ ret = xmlGetProp(cur, name);
+ return(ret);
+}
+/**
+ * xmlXIncludeFreeRef:
+ * @ref: the XInclude reference
+ *
+ * Free an XInclude reference
+ */
+static void
+xmlXIncludeFreeRef(xmlXIncludeRefPtr ref) {
+ if (ref == NULL)
+ return;
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Freeing ref\n");
+#endif
+ if (ref->doc != NULL) {
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Freeing doc %s\n", ref->URI);
+#endif
+ xmlFreeDoc(ref->doc);
+ }
+ if (ref->URI != NULL)
+ xmlFree(ref->URI);
+ if (ref->fragment != NULL)
+ xmlFree(ref->fragment);
+ if (ref->xptr != NULL)
+ xmlXPathFreeObject(ref->xptr);
+ xmlFree(ref);
+}
+
+/**
+ * xmlXIncludeNewRef:
+ * @ctxt: the XInclude context
+ * @URI: the resource URI
+ *
+ * Creates a new reference within an XInclude context
+ *
+ * Returns the new set
+ */
+static xmlXIncludeRefPtr
+xmlXIncludeNewRef(xmlXIncludeCtxtPtr ctxt, const xmlChar *URI,
+ xmlNodePtr ref) {
+ xmlXIncludeRefPtr ret;
+
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "New ref %s\n", URI);
+#endif
+ ret = (xmlXIncludeRefPtr) xmlMalloc(sizeof(xmlXIncludeRef));
+ if (ret == NULL) {
+ xmlXIncludeErrMemory(ctxt, ref, "growing XInclude context");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlXIncludeRef));
+ if (URI == NULL)
+ ret->URI = NULL;
+ else
+ ret->URI = xmlStrdup(URI);
+ ret->fragment = NULL;
+ ret->ref = ref;
+ ret->doc = 0;
+ ret->count = 0;
+ ret->xml = 0;
+ ret->inc = NULL;
+ if (ctxt->incMax == 0) {
+ ctxt->incMax = 4;
+ ctxt->incTab = (xmlXIncludeRefPtr *) xmlMalloc(ctxt->incMax *
+ sizeof(ctxt->incTab[0]));
+ if (ctxt->incTab == NULL) {
+ xmlXIncludeErrMemory(ctxt, ref, "growing XInclude context");
+ xmlXIncludeFreeRef(ret);
+ return(NULL);
+ }
+ }
+ if (ctxt->incNr >= ctxt->incMax) {
+ ctxt->incMax *= 2;
+ ctxt->incTab = (xmlXIncludeRefPtr *) xmlRealloc(ctxt->incTab,
+ ctxt->incMax * sizeof(ctxt->incTab[0]));
+ if (ctxt->incTab == NULL) {
+ xmlXIncludeErrMemory(ctxt, ref, "growing XInclude context");
+ xmlXIncludeFreeRef(ret);
+ return(NULL);
+ }
+ }
+ ctxt->incTab[ctxt->incNr++] = ret;
+ return(ret);
+}
+
+/**
+ * xmlXIncludeNewContext:
+ * @doc: an XML Document
+ *
+ * Creates a new XInclude context
+ *
+ * Returns the new set
+ */
+xmlXIncludeCtxtPtr
+xmlXIncludeNewContext(xmlDocPtr doc) {
+ xmlXIncludeCtxtPtr ret;
+
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "New context\n");
+#endif
+ if (doc == NULL)
+ return(NULL);
+ ret = (xmlXIncludeCtxtPtr) xmlMalloc(sizeof(xmlXIncludeCtxt));
+ if (ret == NULL) {
+ xmlXIncludeErrMemory(NULL, (xmlNodePtr) doc,
+ "creating XInclude context");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlXIncludeCtxt));
+ ret->doc = doc;
+ ret->incNr = 0;
+ ret->incBase = 0;
+ ret->incMax = 0;
+ ret->incTab = NULL;
+ ret->nbErrors = 0;
+ return(ret);
+}
+
+/**
+ * xmlXIncludeURLPush:
+ * @ctxt: the parser context
+ * @value: the url
+ *
+ * Pushes a new url on top of the url stack
+ *
+ * Returns -1 in case of error, the index in the stack otherwise
+ */
+static int
+xmlXIncludeURLPush(xmlXIncludeCtxtPtr ctxt,
+ const xmlChar *value)
+{
+ if (ctxt->urlNr > XINCLUDE_MAX_DEPTH) {
+ xmlXIncludeErr(ctxt, NULL, XML_XINCLUDE_RECURSION,
+ "detected a recursion in %s\n", value);
+ return(-1);
+ }
+ if (ctxt->urlTab == NULL) {
+ ctxt->urlMax = 4;
+ ctxt->urlNr = 0;
+ ctxt->urlTab = (xmlChar * *) xmlMalloc(
+ ctxt->urlMax * sizeof(ctxt->urlTab[0]));
+ if (ctxt->urlTab == NULL) {
+ xmlXIncludeErrMemory(ctxt, NULL, "adding URL");
+ return (-1);
+ }
+ }
+ if (ctxt->urlNr >= ctxt->urlMax) {
+ ctxt->urlMax *= 2;
+ ctxt->urlTab =
+ (xmlChar * *) xmlRealloc(ctxt->urlTab,
+ ctxt->urlMax *
+ sizeof(ctxt->urlTab[0]));
+ if (ctxt->urlTab == NULL) {
+ xmlXIncludeErrMemory(ctxt, NULL, "adding URL");
+ return (-1);
+ }
+ }
+ ctxt->url = ctxt->urlTab[ctxt->urlNr] = xmlStrdup(value);
+ return (ctxt->urlNr++);
+}
+
+/**
+ * xmlXIncludeURLPop:
+ * @ctxt: the parser context
+ *
+ * Pops the top URL from the URL stack
+ */
+static void
+xmlXIncludeURLPop(xmlXIncludeCtxtPtr ctxt)
+{
+ xmlChar * ret;
+
+ if (ctxt->urlNr <= 0)
+ return;
+ ctxt->urlNr--;
+ if (ctxt->urlNr > 0)
+ ctxt->url = ctxt->urlTab[ctxt->urlNr - 1];
+ else
+ ctxt->url = NULL;
+ ret = ctxt->urlTab[ctxt->urlNr];
+ ctxt->urlTab[ctxt->urlNr] = 0;
+ if (ret != NULL)
+ xmlFree(ret);
+}
+
+/**
+ * xmlXIncludeFreeContext:
+ * @ctxt: the XInclude context
+ *
+ * Free an XInclude context
+ */
+void
+xmlXIncludeFreeContext(xmlXIncludeCtxtPtr ctxt) {
+ int i;
+
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Freeing context\n");
+#endif
+ if (ctxt == NULL)
+ return;
+ while (ctxt->urlNr > 0)
+ xmlXIncludeURLPop(ctxt);
+ if (ctxt->urlTab != NULL)
+ xmlFree(ctxt->urlTab);
+ for (i = 0;i < ctxt->incNr;i++) {
+ if (ctxt->incTab[i] != NULL)
+ xmlXIncludeFreeRef(ctxt->incTab[i]);
+ }
+ for (i = 0;i < ctxt->txtNr;i++) {
+ if (ctxt->txturlTab[i] != NULL)
+ xmlFree(ctxt->txturlTab[i]);
+ }
+ if (ctxt->incTab != NULL)
+ xmlFree(ctxt->incTab);
+ if (ctxt->txtTab != NULL)
+ xmlFree(ctxt->txtTab);
+ if (ctxt->txturlTab != NULL)
+ xmlFree(ctxt->txturlTab);
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlXIncludeParseFile:
+ * @ctxt: the XInclude context
+ * @URL: the URL or file path
+ *
+ * parse a document for XInclude
+ */
+static xmlDocPtr
+xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) {
+ xmlDocPtr ret;
+ xmlParserCtxtPtr pctxt;
+ char *directory = NULL;
+ xmlParserInputPtr inputStream;
+
+ xmlInitParser();
+
+ pctxt = xmlNewParserCtxt();
+ if (pctxt == NULL) {
+ xmlXIncludeErrMemory(ctxt, NULL, "cannot allocate parser context");
+ return(NULL);
+ }
+ /*
+ * try to ensure that new documents included are actually
+ * built with the same dictionary as the including document.
+ */
+ if ((ctxt->doc != NULL) && (ctxt->doc->dict != NULL) &&
+ (pctxt->dict != NULL)) {
+ xmlDictFree(pctxt->dict);
+ pctxt->dict = ctxt->doc->dict;
+ xmlDictReference(pctxt->dict);
+ }
+
+ xmlCtxtUseOptions(pctxt, ctxt->parseFlags | XML_PARSE_DTDLOAD);
+
+ inputStream = xmlLoadExternalEntity(URL, NULL, pctxt);
+ if (inputStream == NULL) {
+ xmlFreeParserCtxt(pctxt);
+ return(NULL);
+ }
+
+ inputPush(pctxt, inputStream);
+
+ if ((pctxt->directory == NULL) && (directory == NULL))
+ directory = xmlParserGetDirectory(URL);
+ if ((pctxt->directory == NULL) && (directory != NULL))
+ pctxt->directory = (char *) xmlStrdup((xmlChar *) directory);
+
+ pctxt->loadsubset = XML_DETECT_IDS;
+
+ xmlParseDocument(pctxt);
+
+ if (pctxt->wellFormed) {
+ ret = pctxt->myDoc;
+ }
+ else {
+ ret = NULL;
+ if (pctxt->myDoc != NULL)
+ xmlFreeDoc(pctxt->myDoc);
+ pctxt->myDoc = NULL;
+ }
+ xmlFreeParserCtxt(pctxt);
+
+ return(ret);
+}
+
+/**
+ * xmlXIncludeAddNode:
+ * @ctxt: the XInclude context
+ * @cur: the new node
+ *
+ * Add a new node to process to an XInclude context
+ */
+static int
+xmlXIncludeAddNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur) {
+ xmlXIncludeRefPtr ref;
+ xmlURIPtr uri;
+ xmlChar *URL;
+ xmlChar *fragment = NULL;
+ xmlChar *href;
+ xmlChar *parse;
+ xmlChar *base;
+ xmlChar *URI;
+ int xml = 1, i; /* default Issue 64 */
+ int local = 0;
+
+
+ if (ctxt == NULL)
+ return(-1);
+ if (cur == NULL)
+ return(-1);
+
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Add node\n");
+#endif
+ /*
+ * read the attributes
+ */
+ href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF);
+ if (href == NULL) {
+ href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */
+ if (href == NULL)
+ return(-1);
+ local = 1;
+ }
+ if (href[0] == '#')
+ local = 1;
+ parse = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE);
+ if (parse != NULL) {
+ if (xmlStrEqual(parse, XINCLUDE_PARSE_XML))
+ xml = 1;
+ else if (xmlStrEqual(parse, XINCLUDE_PARSE_TEXT))
+ xml = 0;
+ else {
+ xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_PARSE_VALUE,
+ "invalid value %s for 'parse'\n", parse);
+ if (href != NULL)
+ xmlFree(href);
+ if (parse != NULL)
+ xmlFree(parse);
+ return(-1);
+ }
+ }
+
+ /*
+ * compute the URI
+ */
+ base = xmlNodeGetBase(ctxt->doc, cur);
+ if (base == NULL) {
+ URI = xmlBuildURI(href, ctxt->doc->URL);
+ } else {
+ URI = xmlBuildURI(href, base);
+ }
+ if (URI == NULL) {
+ xmlChar *escbase;
+ xmlChar *eschref;
+ /*
+ * Some escaping may be needed
+ */
+ escbase = xmlURIEscape(base);
+ eschref = xmlURIEscape(href);
+ URI = xmlBuildURI(eschref, escbase);
+ if (escbase != NULL)
+ xmlFree(escbase);
+ if (eschref != NULL)
+ xmlFree(eschref);
+ }
+ if (parse != NULL)
+ xmlFree(parse);
+ if (href != NULL)
+ xmlFree(href);
+ if (base != NULL)
+ xmlFree(base);
+ if (URI == NULL) {
+ xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_HREF_URI,
+ "failed build URL\n", NULL);
+ return(-1);
+ }
+ fragment = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE_XPOINTER);
+
+ /*
+ * Check the URL and remove any fragment identifier
+ */
+ uri = xmlParseURI((const char *)URI);
+ if (uri == NULL) {
+ xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_HREF_URI,
+ "invalid value URI %s\n", URI);
+ if (fragment != NULL)
+ xmlFree(fragment);
+ xmlFree(URI);
+ return(-1);
+ }
+
+ if (uri->fragment != NULL) {
+ if (ctxt->legacy != 0) {
+ if (fragment == NULL) {
+ fragment = (xmlChar *) uri->fragment;
+ } else {
+ xmlFree(uri->fragment);
+ }
+ } else {
+ xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_FRAGMENT_ID,
+ "Invalid fragment identifier in URI %s use the xpointer attribute\n",
+ URI);
+ if (fragment != NULL)
+ xmlFree(fragment);
+ xmlFreeURI(uri);
+ xmlFree(URI);
+ return(-1);
+ }
+ uri->fragment = NULL;
+ }
+ URL = xmlSaveUri(uri);
+ xmlFreeURI(uri);
+ xmlFree(URI);
+ if (URL == NULL) {
+ xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_HREF_URI,
+ "invalid value URI %s\n", URI);
+ if (fragment != NULL)
+ xmlFree(fragment);
+ return(-1);
+ }
+
+ /*
+ * Check the URL against the stack for recursions
+ */
+ if (!local) {
+ for (i = 0;i < ctxt->urlNr;i++) {
+ if (xmlStrEqual(URL, ctxt->urlTab[i])) {
+ xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_RECURSION,
+ "detected a recursion in %s\n", URL);
+ return(-1);
+ }
+ }
+ }
+
+ ref = xmlXIncludeNewRef(ctxt, URL, cur);
+ if (ref == NULL) {
+ return(-1);
+ }
+ ref->fragment = fragment;
+ ref->doc = NULL;
+ ref->xml = xml;
+ ref->count = 1;
+ xmlFree(URL);
+ return(0);
+}
+
+/**
+ * xmlXIncludeRecurseDoc:
+ * @ctxt: the XInclude context
+ * @doc: the new document
+ * @url: the associated URL
+ *
+ * The XInclude recursive nature is handled at this point.
+ */
+static void
+xmlXIncludeRecurseDoc(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc,
+ const xmlURL url ATTRIBUTE_UNUSED) {
+ xmlXIncludeCtxtPtr newctxt;
+ int i;
+
+ /*
+ * Avoid recursion in already substitued resources
+ for (i = 0;i < ctxt->urlNr;i++) {
+ if (xmlStrEqual(doc->URL, ctxt->urlTab[i]))
+ return;
+ }
+ */
+
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Recursing in doc %s\n", doc->URL);
+#endif
+ /*
+ * Handle recursion here.
+ */
+
+ newctxt = xmlXIncludeNewContext(doc);
+ if (newctxt != NULL) {
+ /*
+ * Copy the existing document set
+ */
+ newctxt->incMax = ctxt->incMax;
+ newctxt->incNr = ctxt->incNr;
+ newctxt->incTab = (xmlXIncludeRefPtr *) xmlMalloc(newctxt->incMax *
+ sizeof(newctxt->incTab[0]));
+ if (newctxt->incTab == NULL) {
+ xmlXIncludeErrMemory(ctxt, (xmlNodePtr) doc, "processing doc");
+ xmlFree(newctxt);
+ return;
+ }
+ /*
+ * copy the urlTab
+ */
+ newctxt->urlMax = ctxt->urlMax;
+ newctxt->urlNr = ctxt->urlNr;
+ newctxt->urlTab = ctxt->urlTab;
+
+ /*
+ * Inherit the documents already in use by other includes
+ */
+ newctxt->incBase = ctxt->incNr;
+ for (i = 0;i < ctxt->incNr;i++) {
+ newctxt->incTab[i] = ctxt->incTab[i];
+ newctxt->incTab[i]->count++; /* prevent the recursion from
+ freeing it */
+ }
+ /*
+ * The new context should also inherit the Parse Flags
+ * (bug 132597)
+ */
+ newctxt->parseFlags = ctxt->parseFlags;
+ xmlXIncludeDoProcess(newctxt, doc, xmlDocGetRootElement(doc));
+ for (i = 0;i < ctxt->incNr;i++) {
+ newctxt->incTab[i]->count--;
+ newctxt->incTab[i] = NULL;
+ }
+
+ /* urlTab may have been reallocated */
+ ctxt->urlTab = newctxt->urlTab;
+ ctxt->urlMax = newctxt->urlMax;
+
+ newctxt->urlMax = 0;
+ newctxt->urlNr = 0;
+ newctxt->urlTab = NULL;
+
+ xmlXIncludeFreeContext(newctxt);
+ }
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Done recursing in doc %s\n", url);
+#endif
+}
+
+/**
+ * xmlXIncludeAddTxt:
+ * @ctxt: the XInclude context
+ * @txt: the new text node
+ * @url: the associated URL
+ *
+ * Add a new txtument to the list
+ */
+static void
+xmlXIncludeAddTxt(xmlXIncludeCtxtPtr ctxt, xmlNodePtr txt, const xmlURL url) {
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Adding text %s\n", url);
+#endif
+ if (ctxt->txtMax == 0) {
+ ctxt->txtMax = 4;
+ ctxt->txtTab = (xmlNodePtr *) xmlMalloc(ctxt->txtMax *
+ sizeof(ctxt->txtTab[0]));
+ if (ctxt->txtTab == NULL) {
+ xmlXIncludeErrMemory(ctxt, NULL, "processing text");
+ return;
+ }
+ ctxt->txturlTab = (xmlURL *) xmlMalloc(ctxt->txtMax *
+ sizeof(ctxt->txturlTab[0]));
+ if (ctxt->txturlTab == NULL) {
+ xmlXIncludeErrMemory(ctxt, NULL, "processing text");
+ return;
+ }
+ }
+ if (ctxt->txtNr >= ctxt->txtMax) {
+ ctxt->txtMax *= 2;
+ ctxt->txtTab = (xmlNodePtr *) xmlRealloc(ctxt->txtTab,
+ ctxt->txtMax * sizeof(ctxt->txtTab[0]));
+ if (ctxt->txtTab == NULL) {
+ xmlXIncludeErrMemory(ctxt, NULL, "processing text");
+ return;
+ }
+ ctxt->txturlTab = (xmlURL *) xmlRealloc(ctxt->txturlTab,
+ ctxt->txtMax * sizeof(ctxt->txturlTab[0]));
+ if (ctxt->txturlTab == NULL) {
+ xmlXIncludeErrMemory(ctxt, NULL, "processing text");
+ return;
+ }
+ }
+ ctxt->txtTab[ctxt->txtNr] = txt;
+ ctxt->txturlTab[ctxt->txtNr] = xmlStrdup(url);
+ ctxt->txtNr++;
+}
+
+/************************************************************************
+ * *
+ * Node copy with specific semantic *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXIncludeCopyNode:
+ * @ctxt: the XInclude context
+ * @target: the document target
+ * @source: the document source
+ * @elem: the element
+ *
+ * Make a copy of the node while preserving the XInclude semantic
+ * of the Infoset copy
+ */
+static xmlNodePtr
+xmlXIncludeCopyNode(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
+ xmlDocPtr source, xmlNodePtr elem) {
+ xmlNodePtr result = NULL;
+
+ if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
+ (elem == NULL))
+ return(NULL);
+ if (elem->type == XML_DTD_NODE)
+ return(NULL);
+ result = xmlDocCopyNode(elem, target, 1);
+ return(result);
+}
+
+/**
+ * xmlXIncludeCopyNodeList:
+ * @ctxt: the XInclude context
+ * @target: the document target
+ * @source: the document source
+ * @elem: the element list
+ *
+ * Make a copy of the node list while preserving the XInclude semantic
+ * of the Infoset copy
+ */
+static xmlNodePtr
+xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
+ xmlDocPtr source, xmlNodePtr elem) {
+ xmlNodePtr cur, res, result = NULL, last = NULL;
+
+ if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
+ (elem == NULL))
+ return(NULL);
+ cur = elem;
+ while (cur != NULL) {
+ res = xmlXIncludeCopyNode(ctxt, target, source, cur);
+ if (res != NULL) {
+ if (result == NULL) {
+ result = last = res;
+ } else {
+ last->next = res;
+ res->prev = last;
+ last = res;
+ }
+ }
+ cur = cur->next;
+ }
+ return(result);
+}
+
+/**
+ * xmlXIncludeGetNthChild:
+ * @cur: the node
+ * @no: the child number
+ *
+ * Returns the @n'th element child of @cur or NULL
+ */
+static xmlNodePtr
+xmlXIncludeGetNthChild(xmlNodePtr cur, int no) {
+ int i;
+ if (cur == NULL)
+ return(cur);
+ cur = cur->children;
+ for (i = 0;i <= no;cur = cur->next) {
+ if (cur == NULL)
+ return(cur);
+ if ((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE)) {
+ i++;
+ if (i == no)
+ break;
+ }
+ }
+ return(cur);
+}
+
+xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *level); /* in xpointer.c */
+/**
+ * xmlXIncludeCopyRange:
+ * @ctxt: the XInclude context
+ * @target: the document target
+ * @source: the document source
+ * @obj: the XPointer result from the evaluation.
+ *
+ * Build a node list tree copy of the XPointer result.
+ *
+ * Returns an xmlNodePtr list or NULL.
+ * The caller has to free the node tree.
+ */
+static xmlNodePtr
+xmlXIncludeCopyRange(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
+ xmlDocPtr source, xmlXPathObjectPtr range) {
+ /* pointers to generated nodes */
+ xmlNodePtr list = NULL, last = NULL, listParent = NULL;
+ xmlNodePtr tmp, tmp2;
+ /* pointers to traversal nodes */
+ xmlNodePtr start, cur, end;
+ int index1, index2;
+ int level = 0, lastLevel = 0, endLevel = 0, endFlag = 0;
+
+ if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
+ (range == NULL))
+ return(NULL);
+ if (range->type != XPATH_RANGE)
+ return(NULL);
+ start = (xmlNodePtr) range->user;
+
+ if (start == NULL)
+ return(NULL);
+ end = range->user2;
+ if (end == NULL)
+ return(xmlDocCopyNode(start, target, 1));
+
+ cur = start;
+ index1 = range->index;
+ index2 = range->index2;
+ /*
+ * level is depth of the current node under consideration
+ * list is the pointer to the root of the output tree
+ * listParent is a pointer to the parent of output tree (within
+ the included file) in case we need to add another level
+ * last is a pointer to the last node added to the output tree
+ * lastLevel is the depth of last (relative to the root)
+ */
+ while (cur != NULL) {
+ /*
+ * Check if our output tree needs a parent
+ */
+ if (level < 0) {
+ while (level < 0) {
+ /* copy must include namespaces and properties */
+ tmp2 = xmlDocCopyNode(listParent, target, 2);
+ xmlAddChild(tmp2, list);
+ list = tmp2;
+ listParent = listParent->parent;
+ level++;
+ }
+ last = list;
+ lastLevel = 0;
+ }
+ /*
+ * Check whether we need to change our insertion point
+ */
+ while (level < lastLevel) {
+ last = last->parent;
+ lastLevel --;
+ }
+ if (cur == end) { /* Are we at the end of the range? */
+ if (cur->type == XML_TEXT_NODE) {
+ const xmlChar *content = cur->content;
+ int len;
+
+ if (content == NULL) {
+ tmp = xmlNewTextLen(NULL, 0);
+ } else {
+ len = index2;
+ if ((cur == start) && (index1 > 1)) {
+ content += (index1 - 1);
+ len -= (index1 - 1);
+ index1 = 0;
+ } else {
+ len = index2;
+ }
+ tmp = xmlNewTextLen(content, len);
+ }
+ /* single sub text node selection */
+ if (list == NULL)
+ return(tmp);
+ /* prune and return full set */
+ if (level == lastLevel)
+ xmlAddNextSibling(last, tmp);
+ else
+ xmlAddChild(last, tmp);
+ return(list);
+ } else { /* ending node not a text node */
+ endLevel = level; /* remember the level of the end node */
+ endFlag = 1;
+ /* last node - need to take care of properties + namespaces */
+ tmp = xmlDocCopyNode(cur, target, 2);
+ if (list == NULL) {
+ list = tmp;
+ listParent = cur->parent;
+ } else {
+ if (level == lastLevel)
+ xmlAddNextSibling(last, tmp);
+ else {
+ xmlAddChild(last, tmp);
+ lastLevel = level;
+ }
+ }
+ last = tmp;
+
+ if (index2 > 1) {
+ end = xmlXIncludeGetNthChild(cur, index2 - 1);
+ index2 = 0;
+ }
+ if ((cur == start) && (index1 > 1)) {
+ cur = xmlXIncludeGetNthChild(cur, index1 - 1);
+ index1 = 0;
+ } else {
+ cur = cur->children;
+ }
+ level++; /* increment level to show change */
+ /*
+ * Now gather the remaining nodes from cur to end
+ */
+ continue; /* while */
+ }
+ } else if (cur == start) { /* Not at the end, are we at start? */
+ if ((cur->type == XML_TEXT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE)) {
+ const xmlChar *content = cur->content;
+
+ if (content == NULL) {
+ tmp = xmlNewTextLen(NULL, 0);
+ } else {
+ if (index1 > 1) {
+ content += (index1 - 1);
+ index1 = 0;
+ }
+ tmp = xmlNewText(content);
+ }
+ last = list = tmp;
+ listParent = cur->parent;
+ } else { /* Not text node */
+ /*
+ * start of the range - need to take care of
+ * properties and namespaces
+ */
+ tmp = xmlDocCopyNode(cur, target, 2);
+ list = last = tmp;
+ listParent = cur->parent;
+ if (index1 > 1) { /* Do we need to position? */
+ cur = xmlXIncludeGetNthChild(cur, index1 - 1);
+ level = lastLevel = 1;
+ index1 = 0;
+ /*
+ * Now gather the remaining nodes from cur to end
+ */
+ continue; /* while */
+ }
+ }
+ } else {
+ tmp = NULL;
+ switch (cur->type) {
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_NODE:
+ /* Do not copy DTD informations */
+ break;
+ case XML_ENTITY_DECL:
+ /* handle crossing entities -> stack needed */
+ break;
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ /* don't consider it part of the tree content */
+ break;
+ case XML_ATTRIBUTE_NODE:
+ /* Humm, should not happen ! */
+ break;
+ default:
+ /*
+ * Middle of the range - need to take care of
+ * properties and namespaces
+ */
+ tmp = xmlDocCopyNode(cur, target, 2);
+ break;
+ }
+ if (tmp != NULL) {
+ if (level == lastLevel)
+ xmlAddNextSibling(last, tmp);
+ else {
+ xmlAddChild(last, tmp);
+ lastLevel = level;
+ }
+ last = tmp;
+ }
+ }
+ /*
+ * Skip to next node in document order
+ */
+ cur = xmlXPtrAdvanceNode(cur, &level);
+ if (endFlag && (level >= endLevel))
+ break;
+ }
+ return(list);
+}
+
+/**
+ * xmlXIncludeBuildNodeList:
+ * @ctxt: the XInclude context
+ * @target: the document target
+ * @source: the document source
+ * @obj: the XPointer result from the evaluation.
+ *
+ * Build a node list tree copy of the XPointer result.
+ * This will drop Attributes and Namespace declarations.
+ *
+ * Returns an xmlNodePtr list or NULL.
+ * the caller has to free the node tree.
+ */
+static xmlNodePtr
+xmlXIncludeCopyXPointer(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
+ xmlDocPtr source, xmlXPathObjectPtr obj) {
+ xmlNodePtr list = NULL, last = NULL;
+ int i;
+
+ if (source == NULL)
+ source = ctxt->doc;
+ if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
+ (obj == NULL))
+ return(NULL);
+ switch (obj->type) {
+ case XPATH_NODESET: {
+ xmlNodeSetPtr set = obj->nodesetval;
+ if (set == NULL)
+ return(NULL);
+ for (i = 0;i < set->nodeNr;i++) {
+ if (set->nodeTab[i] == NULL)
+ continue;
+ switch (set->nodeTab[i]->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_XINCLUDE_END:
+ break;
+ case XML_XINCLUDE_START: {
+ xmlNodePtr tmp, cur = set->nodeTab[i];
+
+ cur = cur->next;
+ while (cur != NULL) {
+ switch(cur->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ tmp = xmlXIncludeCopyNode(ctxt, target,
+ source, cur);
+ if (last == NULL) {
+ list = last = tmp;
+ } else {
+ xmlAddNextSibling(last, tmp);
+ last = tmp;
+ }
+ cur = cur->next;
+ continue;
+ default:
+ break;
+ }
+ break;
+ }
+ continue;
+ }
+ case XML_ATTRIBUTE_NODE:
+ case XML_NAMESPACE_DECL:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ continue; /* for */
+ }
+ if (last == NULL)
+ list = last = xmlXIncludeCopyNode(ctxt, target, source,
+ set->nodeTab[i]);
+ else {
+ xmlAddNextSibling(last,
+ xmlXIncludeCopyNode(ctxt, target, source,
+ set->nodeTab[i]));
+ if (last->next != NULL)
+ last = last->next;
+ }
+ }
+ break;
+ }
+ case XPATH_LOCATIONSET: {
+ xmlLocationSetPtr set = (xmlLocationSetPtr) obj->user;
+ if (set == NULL)
+ return(NULL);
+ for (i = 0;i < set->locNr;i++) {
+ if (last == NULL)
+ list = last = xmlXIncludeCopyXPointer(ctxt, target, source,
+ set->locTab[i]);
+ else
+ xmlAddNextSibling(last,
+ xmlXIncludeCopyXPointer(ctxt, target, source,
+ set->locTab[i]));
+ if (last != NULL) {
+ while (last->next != NULL)
+ last = last->next;
+ }
+ }
+ break;
+ }
+#ifdef LIBXML_XPTR_ENABLED
+ case XPATH_RANGE:
+ return(xmlXIncludeCopyRange(ctxt, target, source, obj));
+#endif
+ case XPATH_POINT:
+ /* points are ignored in XInclude */
+ break;
+ default:
+ break;
+ }
+ return(list);
+}
+/************************************************************************
+ * *
+ * XInclude I/O handling *
+ * *
+ ************************************************************************/
+
+typedef struct _xmlXIncludeMergeData xmlXIncludeMergeData;
+typedef xmlXIncludeMergeData *xmlXIncludeMergeDataPtr;
+struct _xmlXIncludeMergeData {
+ xmlDocPtr doc;
+ xmlXIncludeCtxtPtr ctxt;
+};
+
+/**
+ * xmlXIncludeMergeOneEntity:
+ * @ent: the entity
+ * @doc: the including doc
+ * @nr: the entity name
+ *
+ * Inplements the merge of one entity
+ */
+static void
+xmlXIncludeMergeEntity(xmlEntityPtr ent, xmlXIncludeMergeDataPtr data,
+ xmlChar *name ATTRIBUTE_UNUSED) {
+ xmlEntityPtr ret, prev;
+ xmlDocPtr doc;
+ xmlXIncludeCtxtPtr ctxt;
+
+ if ((ent == NULL) || (data == NULL))
+ return;
+ ctxt = data->ctxt;
+ doc = data->doc;
+ if ((ctxt == NULL) || (doc == NULL))
+ return;
+ switch (ent->etype) {
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ case XML_INTERNAL_PREDEFINED_ENTITY:
+ return;
+ case XML_INTERNAL_GENERAL_ENTITY:
+ case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
+ case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
+ break;
+ }
+ ret = xmlAddDocEntity(doc, ent->name, ent->etype, ent->ExternalID,
+ ent->SystemID, ent->content);
+ if (ret != NULL) {
+ if (ent->URI != NULL)
+ ret->URI = xmlStrdup(ent->URI);
+ } else {
+ prev = xmlGetDocEntity(doc, ent->name);
+ if (prev != NULL) {
+ if (ent->etype != prev->etype)
+ goto error;
+
+ if ((ent->SystemID != NULL) && (prev->SystemID != NULL)) {
+ if (!xmlStrEqual(ent->SystemID, prev->SystemID))
+ goto error;
+ } else if ((ent->ExternalID != NULL) &&
+ (prev->ExternalID != NULL)) {
+ if (!xmlStrEqual(ent->ExternalID, prev->ExternalID))
+ goto error;
+ } else if ((ent->content != NULL) && (prev->content != NULL)) {
+ if (!xmlStrEqual(ent->content, prev->content))
+ goto error;
+ } else {
+ goto error;
+ }
+
+ }
+ }
+ return;
+error:
+ switch (ent->etype) {
+ case XML_INTERNAL_PARAMETER_ENTITY:
+ case XML_EXTERNAL_PARAMETER_ENTITY:
+ case XML_INTERNAL_PREDEFINED_ENTITY:
+ case XML_INTERNAL_GENERAL_ENTITY:
+ case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
+ return;
+ case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
+ break;
+ }
+ xmlXIncludeErr(ctxt, (xmlNodePtr) ent, XML_XINCLUDE_ENTITY_DEF_MISMATCH,
+ "mismatch in redefinition of entity %s\n",
+ ent->name);
+}
+
+/**
+ * xmlXIncludeMergeEntities:
+ * @ctxt: an XInclude context
+ * @doc: the including doc
+ * @from: the included doc
+ *
+ * Inplements the entity merge
+ *
+ * Returns 0 if merge succeeded, -1 if some processing failed
+ */
+static int
+xmlXIncludeMergeEntities(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc,
+ xmlDocPtr from) {
+ xmlNodePtr cur;
+ xmlDtdPtr target, source;
+
+ if (ctxt == NULL)
+ return(-1);
+
+ if ((from == NULL) || (from->intSubset == NULL))
+ return(0);
+
+ target = doc->intSubset;
+ if (target == NULL) {
+ cur = xmlDocGetRootElement(doc);
+ if (cur == NULL)
+ return(-1);
+ target = xmlCreateIntSubset(doc, cur->name, NULL, NULL);
+ if (target == NULL)
+ return(-1);
+ }
+
+ source = from->intSubset;
+ if ((source != NULL) && (source->entities != NULL)) {
+ xmlXIncludeMergeData data;
+
+ data.ctxt = ctxt;
+ data.doc = doc;
+
+ xmlHashScan((xmlHashTablePtr) source->entities,
+ (xmlHashScanner) xmlXIncludeMergeEntity, &data);
+ }
+ source = from->extSubset;
+ if ((source != NULL) && (source->entities != NULL)) {
+ xmlXIncludeMergeData data;
+
+ data.ctxt = ctxt;
+ data.doc = doc;
+
+ /*
+ * don't duplicate existing stuff when external subsets are the same
+ */
+ if ((!xmlStrEqual(target->ExternalID, source->ExternalID)) &&
+ (!xmlStrEqual(target->SystemID, source->SystemID))) {
+ xmlHashScan((xmlHashTablePtr) source->entities,
+ (xmlHashScanner) xmlXIncludeMergeEntity, &data);
+ }
+ }
+ return(0);
+}
+
+/**
+ * xmlXIncludeLoadDoc:
+ * @ctxt: the XInclude context
+ * @url: the associated URL
+ * @nr: the xinclude node number
+ *
+ * Load the document, and store the result in the XInclude context
+ *
+ * Returns 0 in case of success, -1 in case of failure
+ */
+static int
+xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
+ xmlDocPtr doc;
+ xmlURIPtr uri;
+ xmlChar *URL;
+ xmlChar *fragment = NULL;
+ int i = 0;
+#ifdef LIBXML_XPTR_ENABLED
+ int saveFlags;
+#endif
+
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "Loading doc %s:%d\n", url, nr);
+#endif
+ /*
+ * Check the URL and remove any fragment identifier
+ */
+ uri = xmlParseURI((const char *)url);
+ if (uri == NULL) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_HREF_URI,
+ "invalid value URI %s\n", url);
+ return(-1);
+ }
+ if (uri->fragment != NULL) {
+ fragment = (xmlChar *) uri->fragment;
+ uri->fragment = NULL;
+ }
+ if ((ctxt->incTab != NULL) && (ctxt->incTab[nr] != NULL) &&
+ (ctxt->incTab[nr]->fragment != NULL)) {
+ if (fragment != NULL) xmlFree(fragment);
+ fragment = xmlStrdup(ctxt->incTab[nr]->fragment);
+ }
+ URL = xmlSaveUri(uri);
+ xmlFreeURI(uri);
+ if (URL == NULL) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_HREF_URI,
+ "invalid value URI %s\n", url);
+ if (fragment != NULL)
+ xmlFree(fragment);
+ return(-1);
+ }
+
+ /*
+ * Handling of references to the local document are done
+ * directly through ctxt->doc.
+ */
+ if ((URL[0] == 0) || (URL[0] == '#') ||
+ ((ctxt->doc != NULL) && (xmlStrEqual(URL, ctxt->doc->URL)))) {
+ doc = NULL;
+ goto loaded;
+ }
+
+ /*
+ * Prevent reloading twice the document.
+ */
+ for (i = 0; i < ctxt->incNr; i++) {
+ if ((xmlStrEqual(URL, ctxt->incTab[i]->URI)) &&
+ (ctxt->incTab[i]->doc != NULL)) {
+ doc = ctxt->incTab[i]->doc;
+#ifdef DEBUG_XINCLUDE
+ printf("Already loaded %s\n", URL);
+#endif
+ goto loaded;
+ }
+ }
+
+ /*
+ * Load it.
+ */
+#ifdef DEBUG_XINCLUDE
+ printf("loading %s\n", URL);
+#endif
+#ifdef LIBXML_XPTR_ENABLED
+ /*
+ * If this is an XPointer evaluation, we want to assure that
+ * all entities have been resolved prior to processing the
+ * referenced document
+ */
+ saveFlags = ctxt->parseFlags;
+ if (fragment != NULL) { /* if this is an XPointer eval */
+ ctxt->parseFlags |= XML_PARSE_NOENT;
+ }
+#endif
+
+ doc = xmlXIncludeParseFile(ctxt, (const char *)URL);
+#ifdef LIBXML_XPTR_ENABLED
+ ctxt->parseFlags = saveFlags;
+#endif
+ if (doc == NULL) {
+ xmlFree(URL);
+ if (fragment != NULL)
+ xmlFree(fragment);
+ return(-1);
+ }
+ ctxt->incTab[nr]->doc = doc;
+ for (i = nr + 1; i < ctxt->incNr; i++) {
+ if (xmlStrEqual(URL, ctxt->incTab[i]->URI)) {
+ ctxt->incTab[nr]->count++;
+#ifdef DEBUG_XINCLUDE
+ printf("Increasing %s count since reused\n", URL);
+#endif
+ break;
+ }
+ }
+
+ /*
+ * Make sure we have all entities fixed up
+ */
+ xmlXIncludeMergeEntities(ctxt, ctxt->doc, doc);
+
+ /*
+ * We don't need the DTD anymore, free up space
+ if (doc->intSubset != NULL) {
+ xmlUnlinkNode((xmlNodePtr) doc->intSubset);
+ xmlFreeNode((xmlNodePtr) doc->intSubset);
+ doc->intSubset = NULL;
+ }
+ if (doc->extSubset != NULL) {
+ xmlUnlinkNode((xmlNodePtr) doc->extSubset);
+ xmlFreeNode((xmlNodePtr) doc->extSubset);
+ doc->extSubset = NULL;
+ }
+ */
+ xmlXIncludeRecurseDoc(ctxt, doc, URL);
+
+loaded:
+ if (fragment == NULL) {
+ /*
+ * Add the top children list as the replacement copy.
+ */
+ if (doc == NULL)
+ {
+ /* Hopefully a DTD declaration won't be copied from
+ * the same document */
+ ctxt->incTab[nr]->inc = xmlCopyNodeList(ctxt->doc->children);
+ } else {
+ ctxt->incTab[nr]->inc = xmlXIncludeCopyNodeList(ctxt, ctxt->doc,
+ doc, doc->children);
+ }
+ }
+#ifdef LIBXML_XPTR_ENABLED
+ else {
+ /*
+ * Computes the XPointer expression and make a copy used
+ * as the replacement copy.
+ */
+ xmlXPathObjectPtr xptr;
+ xmlXPathContextPtr xptrctxt;
+ xmlNodeSetPtr set;
+
+ if (doc == NULL) {
+ xptrctxt = xmlXPtrNewContext(ctxt->doc, ctxt->incTab[nr]->ref,
+ NULL);
+ } else {
+ xptrctxt = xmlXPtrNewContext(doc, NULL, NULL);
+ }
+ if (xptrctxt == NULL) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_XPTR_FAILED,
+ "could not create XPointer context\n", NULL);
+ xmlFree(URL);
+ xmlFree(fragment);
+ return(-1);
+ }
+ xptr = xmlXPtrEval(fragment, xptrctxt);
+ if (xptr == NULL) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_XPTR_FAILED,
+ "XPointer evaluation failed: #%s\n",
+ fragment);
+ xmlXPathFreeContext(xptrctxt);
+ xmlFree(URL);
+ xmlFree(fragment);
+ return(-1);
+ }
+ switch (xptr->type) {
+ case XPATH_UNDEFINED:
+ case XPATH_BOOLEAN:
+ case XPATH_NUMBER:
+ case XPATH_STRING:
+ case XPATH_POINT:
+ case XPATH_USERS:
+ case XPATH_XSLT_TREE:
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_XPTR_RESULT,
+ "XPointer is not a range: #%s\n",
+ fragment);
+ xmlXPathFreeContext(xptrctxt);
+ xmlFree(URL);
+ xmlFree(fragment);
+ return(-1);
+ case XPATH_NODESET:
+ if ((xptr->nodesetval == NULL) ||
+ (xptr->nodesetval->nodeNr <= 0)) {
+ xmlXPathFreeContext(xptrctxt);
+ xmlFree(URL);
+ xmlFree(fragment);
+ return(-1);
+ }
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ break;
+ }
+ set = xptr->nodesetval;
+ if (set != NULL) {
+ for (i = 0;i < set->nodeNr;i++) {
+ if (set->nodeTab[i] == NULL)
+ continue;
+ switch (set->nodeTab[i]->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ continue;
+ case XML_ATTRIBUTE_NODE:
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_XPTR_RESULT,
+ "XPointer selects an attribute: #%s\n",
+ fragment);
+ set->nodeTab[i] = NULL;
+ continue;
+ case XML_NAMESPACE_DECL:
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_XPTR_RESULT,
+ "XPointer selects a namespace: #%s\n",
+ fragment);
+ set->nodeTab[i] = NULL;
+ continue;
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_XPTR_RESULT,
+ "XPointer selects unexpected nodes: #%s\n",
+ fragment);
+ set->nodeTab[i] = NULL;
+ set->nodeTab[i] = NULL;
+ continue; /* for */
+ }
+ }
+ }
+ if (doc == NULL) {
+ ctxt->incTab[nr]->xptr = xptr;
+ ctxt->incTab[nr]->inc = NULL;
+ } else {
+ ctxt->incTab[nr]->inc =
+ xmlXIncludeCopyXPointer(ctxt, ctxt->doc, doc, xptr);
+ xmlXPathFreeObject(xptr);
+ }
+ xmlXPathFreeContext(xptrctxt);
+ xmlFree(fragment);
+ }
+#endif
+
+ /*
+ * Do the xml:base fixup if needed
+ */
+ if ((doc != NULL) && (URL != NULL) && (xmlStrchr(URL, (xmlChar) '/'))) {
+ xmlNodePtr node;
+
+ node = ctxt->incTab[nr]->inc;
+ while (node != NULL) {
+ if (node->type == XML_ELEMENT_NODE)
+ xmlNodeSetBase(node, URL);
+ node = node->next;
+ }
+ }
+ if ((nr < ctxt->incNr) && (ctxt->incTab[nr]->doc != NULL) &&
+ (ctxt->incTab[nr]->count <= 1)) {
+#ifdef DEBUG_XINCLUDE
+ printf("freeing %s\n", ctxt->incTab[nr]->doc->URL);
+#endif
+ xmlFreeDoc(ctxt->incTab[nr]->doc);
+ ctxt->incTab[nr]->doc = NULL;
+ }
+ xmlFree(URL);
+ return(0);
+}
+
+/**
+ * xmlXIncludeLoadTxt:
+ * @ctxt: the XInclude context
+ * @url: the associated URL
+ * @nr: the xinclude node number
+ *
+ * Load the content, and store the result in the XInclude context
+ *
+ * Returns 0 in case of success, -1 in case of failure
+ */
+static int
+xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
+ xmlParserInputBufferPtr buf;
+ xmlNodePtr node;
+ xmlURIPtr uri;
+ xmlChar *URL;
+ int i;
+ xmlChar *encoding = NULL;
+ xmlCharEncoding enc = (xmlCharEncoding) 0;
+
+ /*
+ * Check the URL and remove any fragment identifier
+ */
+ uri = xmlParseURI((const char *)url);
+ if (uri == NULL) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI,
+ "invalid value URI %s\n", url);
+ return(-1);
+ }
+ if (uri->fragment != NULL) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_TEXT_FRAGMENT,
+ "fragment identifier forbidden for text: %s\n",
+ (const xmlChar *) uri->fragment);
+ xmlFreeURI(uri);
+ return(-1);
+ }
+ URL = xmlSaveUri(uri);
+ xmlFreeURI(uri);
+ if (URL == NULL) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI,
+ "invalid value URI %s\n", url);
+ return(-1);
+ }
+
+ /*
+ * Handling of references to the local document are done
+ * directly through ctxt->doc.
+ */
+ if (URL[0] == 0) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_TEXT_DOCUMENT,
+ "text serialization of document not available\n", NULL);
+ xmlFree(URL);
+ return(-1);
+ }
+
+ /*
+ * Prevent reloading twice the document.
+ */
+ for (i = 0; i < ctxt->txtNr; i++) {
+ if (xmlStrEqual(URL, ctxt->txturlTab[i])) {
+ node = xmlCopyNode(ctxt->txtTab[i], 1);
+ goto loaded;
+ }
+ }
+ /*
+ * Try to get the encoding if available
+ */
+ if ((ctxt->incTab[nr] != NULL) && (ctxt->incTab[nr]->ref != NULL)) {
+ encoding = xmlGetProp(ctxt->incTab[nr]->ref, XINCLUDE_PARSE_ENCODING);
+ }
+ if (encoding != NULL) {
+ /*
+ * TODO: we should not have to remap to the xmlCharEncoding
+ * predefined set, a better interface than
+ * xmlParserInputBufferCreateFilename should allow any
+ * encoding supported by iconv
+ */
+ enc = xmlParseCharEncoding((const char *) encoding);
+ if (enc == XML_CHAR_ENCODING_ERROR) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_UNKNOWN_ENCODING,
+ "encoding %s not supported\n", encoding);
+ xmlFree(encoding);
+ xmlFree(URL);
+ return(-1);
+ }
+ xmlFree(encoding);
+ }
+
+ /*
+ * Load it.
+ */
+ buf = xmlParserInputBufferCreateFilename((const char *)URL, enc);
+ if (buf == NULL) {
+ xmlFree(URL);
+ return(-1);
+ }
+ node = xmlNewText(NULL);
+
+ /*
+ * Scan all chars from the resource and add the to the node
+ */
+ while (xmlParserInputBufferRead(buf, 128) > 0) {
+ int len;
+ const xmlChar *content;
+
+ content = xmlBufferContent(buf->buffer);
+ len = xmlBufferLength(buf->buffer);
+ for (i = 0;i < len;) {
+ int cur;
+ int l;
+
+ cur = xmlStringCurrentChar(NULL, &content[i], &l);
+ if (!IS_CHAR(cur)) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_INVALID_CHAR,
+ "%s contains invalid char\n", URL);
+ } else {
+ xmlNodeAddContentLen(node, &content[i], l);
+ }
+ i += l;
+ }
+ xmlBufferShrink(buf->buffer, len);
+ }
+ xmlFreeParserInputBuffer(buf);
+ xmlXIncludeAddTxt(ctxt, node, URL);
+
+loaded:
+ /*
+ * Add the element as the replacement copy.
+ */
+ ctxt->incTab[nr]->inc = node;
+ xmlFree(URL);
+ return(0);
+}
+
+/**
+ * xmlXIncludeLoadFallback:
+ * @ctxt: the XInclude context
+ * @fallback: the fallback node
+ * @nr: the xinclude node number
+ *
+ * Load the content of the fallback node, and store the result
+ * in the XInclude context
+ *
+ * Returns 0 in case of success, -1 in case of failure
+ */
+static int
+xmlXIncludeLoadFallback(xmlXIncludeCtxtPtr ctxt, xmlNodePtr fallback, int nr) {
+ xmlXIncludeCtxtPtr newctxt;
+ int ret = 0;
+
+ if ((fallback == NULL) || (ctxt == NULL))
+ return(-1);
+ if (fallback->children != NULL) {
+ /*
+ * It's possible that the fallback also has 'includes'
+ * (Bug 129969), so we re-process the fallback just in case
+ */
+ newctxt = xmlXIncludeNewContext(ctxt->doc);
+ if (newctxt == NULL)
+ return (-1);
+ xmlXIncludeSetFlags(newctxt, ctxt->parseFlags);
+ ret = xmlXIncludeDoProcess(newctxt, ctxt->doc, fallback->children);
+ if ((ret >=0) && (ctxt->nbErrors > 0))
+ ret = -1;
+ xmlXIncludeFreeContext(newctxt);
+
+ ctxt->incTab[nr]->inc = xmlCopyNodeList(fallback->children);
+ } else {
+ ctxt->incTab[nr]->inc = NULL;
+ ctxt->incTab[nr]->emptyFb = 1; /* flag empty callback */
+ }
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * XInclude Processing *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXIncludePreProcessNode:
+ * @ctxt: an XInclude context
+ * @node: an XInclude node
+ *
+ * Implement the XInclude preprocessing, currently just adding the element
+ * for further processing.
+ *
+ * Returns the result list or NULL in case of error
+ */
+static xmlNodePtr
+xmlXIncludePreProcessNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
+ xmlXIncludeAddNode(ctxt, node);
+ return(0);
+}
+
+/**
+ * xmlXIncludeLoadNode:
+ * @ctxt: an XInclude context
+ * @nr: the node number
+ *
+ * Find and load the infoset replacement for the given node.
+ *
+ * Returns 0 if substitution succeeded, -1 if some processing failed
+ */
+static int
+xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) {
+ xmlNodePtr cur;
+ xmlChar *href;
+ xmlChar *parse;
+ xmlChar *base;
+ xmlChar *URI;
+ int xml = 1; /* default Issue 64 */
+ int ret;
+
+ if (ctxt == NULL)
+ return(-1);
+ if ((nr < 0) || (nr >= ctxt->incNr))
+ return(-1);
+ cur = ctxt->incTab[nr]->ref;
+ if (cur == NULL)
+ return(-1);
+
+ /*
+ * read the attributes
+ */
+ href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF);
+ if (href == NULL) {
+ href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */
+ if (href == NULL)
+ return(-1);
+ }
+ parse = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE);
+ if (parse != NULL) {
+ if (xmlStrEqual(parse, XINCLUDE_PARSE_XML))
+ xml = 1;
+ else if (xmlStrEqual(parse, XINCLUDE_PARSE_TEXT))
+ xml = 0;
+ else {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_PARSE_VALUE,
+ "invalid value %s for 'parse'\n", parse);
+ if (href != NULL)
+ xmlFree(href);
+ if (parse != NULL)
+ xmlFree(parse);
+ return(-1);
+ }
+ }
+
+ /*
+ * compute the URI
+ */
+ base = xmlNodeGetBase(ctxt->doc, cur);
+ if (base == NULL) {
+ URI = xmlBuildURI(href, ctxt->doc->URL);
+ } else {
+ URI = xmlBuildURI(href, base);
+ }
+ if (URI == NULL) {
+ xmlChar *escbase;
+ xmlChar *eschref;
+ /*
+ * Some escaping may be needed
+ */
+ escbase = xmlURIEscape(base);
+ eschref = xmlURIEscape(href);
+ URI = xmlBuildURI(eschref, escbase);
+ if (escbase != NULL)
+ xmlFree(escbase);
+ if (eschref != NULL)
+ xmlFree(eschref);
+ }
+ if (URI == NULL) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_HREF_URI, "failed build URL\n", NULL);
+ if (parse != NULL)
+ xmlFree(parse);
+ if (href != NULL)
+ xmlFree(href);
+ if (base != NULL)
+ xmlFree(base);
+ return(-1);
+ }
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "parse: %s\n",
+ xml ? "xml": "text");
+ xmlGenericError(xmlGenericErrorContext, "URI: %s\n", URI);
+#endif
+
+ /*
+ * Cleanup
+ */
+ if (xml) {
+ ret = xmlXIncludeLoadDoc(ctxt, URI, nr);
+ /* xmlXIncludeGetFragment(ctxt, cur, URI); */
+ } else {
+ ret = xmlXIncludeLoadTxt(ctxt, URI, nr);
+ }
+ if (ret < 0) {
+ xmlNodePtr children;
+
+ /*
+ * Time to try a fallback if availble
+ */
+#ifdef DEBUG_XINCLUDE
+ xmlGenericError(xmlGenericErrorContext, "error looking for fallback\n");
+#endif
+ children = cur->children;
+ while (children != NULL) {
+ if ((children->type == XML_ELEMENT_NODE) &&
+ (children->ns != NULL) &&
+ (xmlStrEqual(children->name, XINCLUDE_FALLBACK)) &&
+ ((xmlStrEqual(children->ns->href, XINCLUDE_NS)) ||
+ (xmlStrEqual(children->ns->href, XINCLUDE_OLD_NS)))) {
+ ret = xmlXIncludeLoadFallback(ctxt, children, nr);
+ if (ret == 0)
+ break;
+ }
+ children = children->next;
+ }
+ }
+ if (ret < 0) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_NO_FALLBACK,
+ "could not load %s, and no fallback was found\n",
+ URI);
+ }
+
+ /*
+ * Cleanup
+ */
+ if (URI != NULL)
+ xmlFree(URI);
+ if (parse != NULL)
+ xmlFree(parse);
+ if (href != NULL)
+ xmlFree(href);
+ if (base != NULL)
+ xmlFree(base);
+ return(0);
+}
+
+/**
+ * xmlXIncludeIncludeNode:
+ * @ctxt: an XInclude context
+ * @nr: the node number
+ *
+ * Inplement the infoset replacement for the given node
+ *
+ * Returns 0 if substitution succeeded, -1 if some processing failed
+ */
+static int
+xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, int nr) {
+ xmlNodePtr cur, end, list, tmp;
+
+ if (ctxt == NULL)
+ return(-1);
+ if ((nr < 0) || (nr >= ctxt->incNr))
+ return(-1);
+ cur = ctxt->incTab[nr]->ref;
+ if (cur == NULL)
+ return(-1);
+
+ /*
+ * If we stored an XPointer a late computation may be needed
+ */
+ if ((ctxt->incTab[nr]->inc == NULL) &&
+ (ctxt->incTab[nr]->xptr != NULL)) {
+ ctxt->incTab[nr]->inc =
+ xmlXIncludeCopyXPointer(ctxt, ctxt->doc, ctxt->doc,
+ ctxt->incTab[nr]->xptr);
+ xmlXPathFreeObject(ctxt->incTab[nr]->xptr);
+ ctxt->incTab[nr]->xptr = NULL;
+ }
+ list = ctxt->incTab[nr]->inc;
+ ctxt->incTab[nr]->inc = NULL;
+
+ /*
+ * Check against the risk of generating a multi-rooted document
+ */
+ if ((cur->parent != NULL) &&
+ (cur->parent->type != XML_ELEMENT_NODE)) {
+ int nb_elem = 0;
+
+ tmp = list;
+ while (tmp != NULL) {
+ if (tmp->type == XML_ELEMENT_NODE)
+ nb_elem++;
+ tmp = tmp->next;
+ }
+ if (nb_elem > 1) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+ XML_XINCLUDE_MULTIPLE_ROOT,
+ "XInclude error: would result in multiple root nodes\n",
+ NULL);
+ return(-1);
+ }
+ }
+
+ /*
+ * Change the current node as an XInclude start one, and add an
+ * entity end one
+ */
+ cur->type = XML_XINCLUDE_START;
+ end = xmlNewNode(cur->ns, cur->name);
+ if (end == NULL) {
+ xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_BUILD_FAILED,
+ "failed to build node\n", NULL);
+ return(-1);
+ }
+ end->type = XML_XINCLUDE_END;
+ xmlAddNextSibling(cur, end);
+
+ /*
+ * Add the list of nodes
+ */
+ while (list != NULL) {
+ cur = list;
+ list = list->next;
+
+ xmlAddPrevSibling(end, cur);
+ }
+
+
+ return(0);
+}
+
+/**
+ * xmlXIncludeTestNode:
+ * @ctxt: the XInclude processing context
+ * @node: an XInclude node
+ *
+ * test if the node is an XInclude node
+ *
+ * Returns 1 true, 0 otherwise
+ */
+static int
+xmlXIncludeTestNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
+ if (node == NULL)
+ return(0);
+ if (node->type != XML_ELEMENT_NODE)
+ return(0);
+ if (node->ns == NULL)
+ return(0);
+ if ((xmlStrEqual(node->ns->href, XINCLUDE_NS)) ||
+ (xmlStrEqual(node->ns->href, XINCLUDE_OLD_NS))) {
+ if (xmlStrEqual(node->ns->href, XINCLUDE_OLD_NS)) {
+ if (ctxt->legacy == 0) {
+#if 0 /* wait for the XML Core Working Group to get something stable ! */
+ xmlXIncludeWarn(ctxt, node, XML_XINCLUDE_DEPRECATED_NS,
+ "Deprecated XInclude namespace found, use %s",
+ XINCLUDE_NS);
+#endif
+ ctxt->legacy = 1;
+ }
+ }
+ if (xmlStrEqual(node->name, XINCLUDE_NODE)) {
+ xmlNodePtr child = node->children;
+ int nb_fallback = 0;
+
+ while (child != NULL) {
+ if ((child->type == XML_ELEMENT_NODE) &&
+ (child->ns != NULL) &&
+ ((xmlStrEqual(child->ns->href, XINCLUDE_NS)) ||
+ (xmlStrEqual(child->ns->href, XINCLUDE_OLD_NS)))) {
+ if (xmlStrEqual(child->name, XINCLUDE_NODE)) {
+ xmlXIncludeErr(ctxt, node,
+ XML_XINCLUDE_INCLUDE_IN_INCLUDE,
+ "%s has an 'include' child\n",
+ XINCLUDE_NODE);
+ return(0);
+ }
+ if (xmlStrEqual(child->name, XINCLUDE_FALLBACK)) {
+ nb_fallback++;
+ }
+ }
+ child = child->next;
+ }
+ if (nb_fallback > 1) {
+ xmlXIncludeErr(ctxt, node, XML_XINCLUDE_FALLBACKS_IN_INCLUDE,
+ "%s has multiple fallback children\n",
+ XINCLUDE_NODE);
+ return(0);
+ }
+ return(1);
+ }
+ if (xmlStrEqual(node->name, XINCLUDE_FALLBACK)) {
+ if ((node->parent == NULL) ||
+ (node->parent->type != XML_ELEMENT_NODE) ||
+ (node->parent->ns == NULL) ||
+ ((!xmlStrEqual(node->parent->ns->href, XINCLUDE_NS)) &&
+ (!xmlStrEqual(node->parent->ns->href, XINCLUDE_OLD_NS))) ||
+ (!xmlStrEqual(node->parent->name, XINCLUDE_NODE))) {
+ xmlXIncludeErr(ctxt, node,
+ XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE,
+ "%s is not the child of an 'include'\n",
+ XINCLUDE_FALLBACK);
+ }
+ }
+ }
+ return(0);
+}
+
+/**
+ * xmlXIncludeDoProcess:
+ * @ctxt: the XInclude processing context
+ * @doc: an XML document
+ * @tree: the top of the tree to process
+ *
+ * Implement the XInclude substitution on the XML document @doc
+ *
+ * Returns 0 if no substitution were done, -1 if some processing failed
+ * or the number of substitutions done.
+ */
+static int
+xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree) {
+ xmlNodePtr cur;
+ int ret = 0;
+ int i;
+
+ if ((doc == NULL) || (tree == NULL))
+ return(-1);
+ if (ctxt == NULL)
+ return(-1);
+
+ if (doc->URL != NULL) {
+ ret = xmlXIncludeURLPush(ctxt, doc->URL);
+ if (ret < 0)
+ return(-1);
+ }
+
+ /*
+ * First phase: lookup the elements in the document
+ */
+ cur = tree;
+ if (xmlXIncludeTestNode(ctxt, cur) == 1)
+ xmlXIncludePreProcessNode(ctxt, cur);
+ while (cur != NULL) {
+ /* TODO: need to work on entities -> stack */
+ if ((cur->children != NULL) &&
+ (cur->children->type != XML_ENTITY_DECL) &&
+ (cur->children->type != XML_XINCLUDE_START) &&
+ (cur->children->type != XML_XINCLUDE_END)) {
+ cur = cur->children;
+ if (xmlXIncludeTestNode(ctxt, cur))
+ xmlXIncludePreProcessNode(ctxt, cur);
+ } else if (cur->next != NULL) {
+ cur = cur->next;
+ if (xmlXIncludeTestNode(ctxt, cur))
+ xmlXIncludePreProcessNode(ctxt, cur);
+ } else {
+ do {
+ cur = cur->parent;
+ if (cur == NULL) break; /* do */
+ if (cur->next != NULL) {
+ cur = cur->next;
+ if (xmlXIncludeTestNode(ctxt, cur))
+ xmlXIncludePreProcessNode(ctxt, cur);
+ break; /* do */
+ }
+ } while (cur != NULL);
+ }
+ }
+
+ /*
+ * Second Phase : collect the infosets fragments
+ */
+ for (i = ctxt->incBase;i < ctxt->incNr; i++) {
+ xmlXIncludeLoadNode(ctxt, i);
+ ret++;
+ }
+
+ /*
+ * Third phase: extend the original document infoset.
+ *
+ * Originally we bypassed the inclusion if there were any errors
+ * encountered on any of the XIncludes. A bug was raised (bug
+ * 132588) requesting that we output the XIncludes without error,
+ * so the check for inc!=NULL || xptr!=NULL was put in. This may
+ * give some other problems in the future, but for now it seems to
+ * work ok.
+ *
+ */
+ for (i = ctxt->incBase;i < ctxt->incNr; i++) {
+ if ((ctxt->incTab[i]->inc != NULL) ||
+ (ctxt->incTab[i]->xptr != NULL) ||
+ (ctxt->incTab[i]->emptyFb != 0)) /* (empty fallback) */
+ xmlXIncludeIncludeNode(ctxt, i);
+ }
+
+ if (doc->URL != NULL)
+ xmlXIncludeURLPop(ctxt);
+ return(ret);
+}
+
+/**
+ * xmlXIncludeSetFlags:
+ * @ctxt: an XInclude processing context
+ * @flags: a set of xmlParserOption used for parsing XML includes
+ *
+ * Set the flags used for further processing of XML resources.
+ *
+ * Returns 0 in case of success and -1 in case of error.
+ */
+int
+xmlXIncludeSetFlags(xmlXIncludeCtxtPtr ctxt, int flags) {
+ if (ctxt == NULL)
+ return(-1);
+ ctxt->parseFlags = flags;
+ return(0);
+}
+
+/**
+ * xmlXIncludeProcessFlags:
+ * @doc: an XML document
+ * @flags: a set of xmlParserOption used for parsing XML includes
+ *
+ * Implement the XInclude substitution on the XML document @doc
+ *
+ * Returns 0 if no substitution were done, -1 if some processing failed
+ * or the number of substitutions done.
+ */
+int
+xmlXIncludeProcessFlags(xmlDocPtr doc, int flags) {
+ xmlXIncludeCtxtPtr ctxt;
+ xmlNodePtr tree;
+ int ret = 0;
+
+ if (doc == NULL)
+ return(-1);
+ tree = xmlDocGetRootElement(doc);
+ if (tree == NULL)
+ return(-1);
+ ctxt = xmlXIncludeNewContext(doc);
+ if (ctxt == NULL)
+ return(-1);
+ xmlXIncludeSetFlags(ctxt, flags);
+ ret = xmlXIncludeDoProcess(ctxt, doc, tree);
+ if ((ret >= 0) && (ctxt->nbErrors > 0))
+ ret = -1;
+
+ xmlXIncludeFreeContext(ctxt);
+ return(ret);
+}
+
+/**
+ * xmlXIncludeProcess:
+ * @doc: an XML document
+ *
+ * Implement the XInclude substitution on the XML document @doc
+ *
+ * Returns 0 if no substitution were done, -1 if some processing failed
+ * or the number of substitutions done.
+ */
+int
+xmlXIncludeProcess(xmlDocPtr doc) {
+ return(xmlXIncludeProcessFlags(doc, 0));
+}
+
+/**
+ * xmlXIncludeProcessTreeFlags:
+ * @tree: a node in an XML document
+ * @flags: a set of xmlParserOption used for parsing XML includes
+ *
+ * Implement the XInclude substitution for the given subtree
+ *
+ * Returns 0 if no substitution were done, -1 if some processing failed
+ * or the number of substitutions done.
+ */
+int
+xmlXIncludeProcessTreeFlags(xmlNodePtr tree, int flags) {
+ xmlXIncludeCtxtPtr ctxt;
+ int ret = 0;
+
+ if ((tree == NULL) || (tree->doc == NULL))
+ return(-1);
+ ctxt = xmlXIncludeNewContext(tree->doc);
+ if (ctxt == NULL)
+ return(-1);
+ xmlXIncludeSetFlags(ctxt, flags);
+ ret = xmlXIncludeDoProcess(ctxt, tree->doc, tree);
+ if ((ret >= 0) && (ctxt->nbErrors > 0))
+ ret = -1;
+
+ xmlXIncludeFreeContext(ctxt);
+ return(ret);
+}
+
+/**
+ * xmlXIncludeProcessTree:
+ * @tree: a node in an XML document
+ *
+ * Implement the XInclude substitution for the given subtree
+ *
+ * Returns 0 if no substitution were done, -1 if some processing failed
+ * or the number of substitutions done.
+ */
+int
+xmlXIncludeProcessTree(xmlNodePtr tree) {
+ return(xmlXIncludeProcessTreeFlags(tree, 0));
+}
+
+/**
+ * xmlXIncludeProcessNode:
+ * @ctxt: an existing XInclude context
+ * @node: a node in an XML document
+ *
+ * Implement the XInclude substitution for the given subtree reusing
+ * the informations and data coming from the given context.
+ *
+ * Returns 0 if no substitution were done, -1 if some processing failed
+ * or the number of substitutions done.
+ */
+int
+xmlXIncludeProcessNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
+ int ret = 0;
+
+ if ((node == NULL) || (node->doc == NULL) || (ctxt == NULL))
+ return(-1);
+ ret = xmlXIncludeDoProcess(ctxt, node->doc, node);
+ if ((ret >= 0) && (ctxt->nbErrors > 0))
+ ret = -1;
+ return(ret);
+}
+
+#else /* !LIBXML_XINCLUDE_ENABLED */
+#endif
diff --git a/xlink.c b/xlink.c
new file mode 100644
index 0000000..4454d17
--- /dev/null
+++ b/xlink.c
@@ -0,0 +1,181 @@
+/*
+ * xlink.c : implementation of the hyperlinks detection module
+ * This version supports both XML XLinks and HTML simple links
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_XPTR_ENABLED
+#include <string.h> /* for memset() only */
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_ZLIB_H
+#include <zlib.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/valid.h>
+#include <libxml/xlink.h>
+#include <libxml/globals.h>
+
+#define XLINK_NAMESPACE (BAD_CAST "http://www.w3.org/1999/xlink/namespace/")
+#define XHTML_NAMESPACE (BAD_CAST "http://www.w3.org/1999/xhtml/")
+
+/****************************************************************
+ * *
+ * Default setting and related functions *
+ * *
+ ****************************************************************/
+
+static xlinkHandlerPtr xlinkDefaultHandler = NULL;
+static xlinkNodeDetectFunc xlinkDefaultDetect = NULL;
+
+/**
+ * xlinkGetDefaultHandler:
+ *
+ * Get the default xlink handler.
+ *
+ * Returns the current xlinkHandlerPtr value.
+ */
+xlinkHandlerPtr
+xlinkGetDefaultHandler(void) {
+ return(xlinkDefaultHandler);
+}
+
+
+/**
+ * xlinkSetDefaultHandler:
+ * @handler: the new value for the xlink handler block
+ *
+ * Set the default xlink handlers
+ */
+void
+xlinkSetDefaultHandler(xlinkHandlerPtr handler) {
+ xlinkDefaultHandler = handler;
+}
+
+/**
+ * xlinkGetDefaultDetect:
+ *
+ * Get the default xlink detection routine
+ *
+ * Returns the current function or NULL;
+ */
+xlinkNodeDetectFunc
+xlinkGetDefaultDetect (void) {
+ return(xlinkDefaultDetect);
+}
+
+/**
+ * xlinkSetDefaultDetect:
+ * @func: pointer to the new detection routine.
+ *
+ * Set the default xlink detection routine
+ */
+void
+xlinkSetDefaultDetect (xlinkNodeDetectFunc func) {
+ xlinkDefaultDetect = func;
+}
+
+/****************************************************************
+ * *
+ * The detection routines *
+ * *
+ ****************************************************************/
+
+
+/**
+ * xlinkIsLink:
+ * @doc: the document containing the node
+ * @node: the node pointer itself
+ *
+ * Check whether the given node carries the attributes needed
+ * to be a link element (or is one of the linking elements issued
+ * from the (X)HTML DtDs).
+ * This routine don't try to do full checking of the link validity
+ * but tries to detect and return the appropriate link type.
+ *
+ * Returns the xlinkType of the node (XLINK_TYPE_NONE if there is no
+ * link detected.
+ */
+xlinkType
+xlinkIsLink (xmlDocPtr doc, xmlNodePtr node) {
+ xmlChar *type = NULL, *role = NULL;
+ xlinkType ret = XLINK_TYPE_NONE;
+
+ if (node == NULL) return(XLINK_TYPE_NONE);
+ if (doc == NULL) doc = node->doc;
+ if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
+ /*
+ * This is an HTML document.
+ */
+ } else if ((node->ns != NULL) &&
+ (xmlStrEqual(node->ns->href, XHTML_NAMESPACE))) {
+ /*
+ * !!!! We really need an IS_XHTML_ELEMENT function from HTMLtree.h @@@
+ */
+ /*
+ * This is an XHTML element within an XML document
+ * Check whether it's one of the element able to carry links
+ * and in that case if it holds the attributes.
+ */
+ }
+
+ /*
+ * We don't prevent a-priori having XML Linking constructs on
+ * XHTML elements
+ */
+ type = xmlGetNsProp(node, BAD_CAST"type", XLINK_NAMESPACE);
+ if (type != NULL) {
+ if (xmlStrEqual(type, BAD_CAST "simple")) {
+ ret = XLINK_TYPE_SIMPLE;
+ } if (xmlStrEqual(type, BAD_CAST "extended")) {
+ role = xmlGetNsProp(node, BAD_CAST "role", XLINK_NAMESPACE);
+ if (role != NULL) {
+ xmlNsPtr xlink;
+ xlink = xmlSearchNs(doc, node, XLINK_NAMESPACE);
+ if (xlink == NULL) {
+ /* Humm, fallback method */
+ if (xmlStrEqual(role, BAD_CAST"xlink:external-linkset"))
+ ret = XLINK_TYPE_EXTENDED_SET;
+ } else {
+ xmlChar buf[200];
+ snprintf((char *) buf, sizeof(buf), "%s:external-linkset",
+ (char *) xlink->prefix);
+ buf[sizeof(buf) - 1] = 0;
+ if (xmlStrEqual(role, buf))
+ ret = XLINK_TYPE_EXTENDED_SET;
+
+ }
+
+ }
+ ret = XLINK_TYPE_EXTENDED;
+ }
+ }
+
+ if (type != NULL) xmlFree(type);
+ if (role != NULL) xmlFree(role);
+ return(ret);
+}
+#endif /* LIBXML_XPTR_ENABLED */
diff --git a/xml2-config.1 b/xml2-config.1
new file mode 100644
index 0000000..8a25962
--- /dev/null
+++ b/xml2-config.1
@@ -0,0 +1,31 @@
+.TH GNOME-XML 1 "3 July 1999" Version 1.1.0
+.SH NAME
+xml-config - script to get information about the installed version of GNOME-XML
+.SH SYNOPSIS
+.B xml-config
+[\-\-prefix\fI[=DIR]\fP] [\-\-libs] [\-\-cflags] [\-\-version] [\-\-help]
+.SH DESCRIPTION
+\fIxml-config\fP is a tool that is used to determine the compile and
+linker flags that should be used to compile and link programs that use
+\fIGNOME-XML\fP.
+.SH OPTIONS
+.l
+\fIxml-config\fP accepts the following options:
+.TP 8
+.B \-\-version
+Print the currently installed version of \fIGNOME-XML\fP on the standard output.
+.TP 8
+.B \-\-libs
+Print the linker flags that are necessary to link a \fIGNOME-XML\fP program.
+.TP 8
+.B \-\-cflags
+Print the compiler flags that are necessary to compile a \fIGNOME-XML\fP program.
+.TP 8
+.B \-\-prefix=PREFIX
+If specified, use PREFIX instead of the installation prefix that
+\fIGNOME-XML\fP was built with when computing the output for the
+\-\-cflags and \-\-libs options. This option must be specified before
+any \-\-libs or \-\-cflags options.
+.SH AUTHOR
+This manual page was written by Fredrik Hallenberg <hallon@lysator.liu.se>,
+for the Debian GNU/linux system (but may be used by others).
diff --git a/xml2-config.in b/xml2-config.in
new file mode 100644
index 0000000..cddd1a8
--- /dev/null
+++ b/xml2-config.in
@@ -0,0 +1,99 @@
+#! /bin/sh
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+includedir=@includedir@
+libdir=@libdir@
+
+usage()
+{
+ cat <<EOF
+Usage: xml2-config [OPTION]
+
+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
+ --help display this help and exit
+ --version output version information
+EOF
+
+ exit $1
+}
+
+if test $# -eq 0; then
+ usage 1
+fi
+
+cflags=false
+libs=false
+
+while test $# -gt 0; do
+ case "$1" in
+ -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ case "$1" in
+ --prefix=*)
+ prefix=$optarg
+ includedir=$prefix/include
+ libdir=$prefix/lib
+ ;;
+
+ --prefix)
+ echo $prefix
+ ;;
+
+ --exec-prefix=*)
+ exec_prefix=$optarg
+ libdir=$exec_prefix/lib
+ ;;
+
+ --exec-prefix)
+ echo $exec_prefix
+ ;;
+
+ --version)
+ echo @VERSION@
+ exit 0
+ ;;
+
+ --help)
+ usage 0
+ ;;
+
+ --cflags)
+ echo @XML_INCLUDEDIR@ @XML_CFLAGS@
+ ;;
+
+ --libtool-libs)
+ echo ${libdir}/@XML_LIBTOOLLIBS@
+ ;;
+
+ --libs)
+ if [ "`uname`" = "Linux" ]
+ then
+ if [ "@XML_LIBDIR@" = "-L/usr/lib64" ]
+ then
+ echo @XML_LIBS@
+ else
+ echo @XML_LIBDIR@ @XML_LIBS@
+ fi
+ else
+ echo @XML_LIBDIR@ @XML_LIBS@
+ fi
+ ;;
+
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+exit 0
diff --git a/xml2Conf.sh.in b/xml2Conf.sh.in
new file mode 100644
index 0000000..08cb233
--- /dev/null
+++ b/xml2Conf.sh.in
@@ -0,0 +1,8 @@
+#
+# Configuration file for using the XML library in GNOME applications
+#
+XML2_LIBDIR="@XML_LIBDIR@"
+XML2_LIBS="@XML_LIBS@"
+XML2_INCLUDEDIR="@XML_INCLUDEDIR@"
+MODULE_VERSION="xml2-@VERSION@"
+
diff --git a/xmlIO.c b/xmlIO.c
new file mode 100644
index 0000000..8c4b68f
--- /dev/null
+++ b/xmlIO.c
@@ -0,0 +1,3372 @@
+/*
+ * xmlIO.c : implementation of the I/O interfaces used by the parser
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ *
+ * 14 Nov 2000 ht - for VMS, truncated name of long functions to under 32 char
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_ZLIB_H
+#include <zlib.h>
+#endif
+
+/* Figure a portable way to know if a file is a directory. */
+#ifndef HAVE_STAT
+# ifdef HAVE__STAT
+ /* MS C library seems to define stat and _stat. The definition
+ is identical. Still, mapping them to each other causes a warning. */
+# ifndef _MSC_VER
+# define stat(x,y) _stat(x,y)
+# endif
+# define HAVE_STAT
+# endif
+#endif
+#ifdef HAVE_STAT
+# ifndef S_ISDIR
+# ifdef _S_ISDIR
+# define S_ISDIR(x) _S_ISDIR(x)
+# else
+# ifdef S_IFDIR
+# ifndef S_IFMT
+# ifdef _S_IFMT
+# define S_IFMT _S_IFMT
+# endif
+# endif
+# ifdef S_IFMT
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/xmlIO.h>
+#include <libxml/uri.h>
+#include <libxml/nanohttp.h>
+#include <libxml/nanoftp.h>
+#include <libxml/xmlerror.h>
+#ifdef LIBXML_CATALOG_ENABLED
+#include <libxml/catalog.h>
+#endif
+#include <libxml/globals.h>
+
+/* #define VERBOSE_FAILURE */
+/* #define DEBUG_EXTERNAL_ENTITIES */
+/* #define DEBUG_INPUT */
+
+#ifdef DEBUG_INPUT
+#define MINLEN 40
+#else
+#define MINLEN 4000
+#endif
+
+/*
+ * Input I/O callback sets
+ */
+typedef struct _xmlInputCallback {
+ xmlInputMatchCallback matchcallback;
+ xmlInputOpenCallback opencallback;
+ xmlInputReadCallback readcallback;
+ xmlInputCloseCallback closecallback;
+} xmlInputCallback;
+
+#define MAX_INPUT_CALLBACK 15
+
+static xmlInputCallback xmlInputCallbackTable[MAX_INPUT_CALLBACK];
+static int xmlInputCallbackNr = 0;
+static int xmlInputCallbackInitialized = 0;
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Output I/O callback sets
+ */
+typedef struct _xmlOutputCallback {
+ xmlOutputMatchCallback matchcallback;
+ xmlOutputOpenCallback opencallback;
+ xmlOutputWriteCallback writecallback;
+ xmlOutputCloseCallback closecallback;
+} xmlOutputCallback;
+
+#define MAX_OUTPUT_CALLBACK 15
+
+static xmlOutputCallback xmlOutputCallbackTable[MAX_OUTPUT_CALLBACK];
+static int xmlOutputCallbackNr = 0;
+static int xmlOutputCallbackInitialized = 0;
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ * *
+ * Tree memory error handler *
+ * *
+ ************************************************************************/
+
+static const char *IOerr[] = {
+ "Unknown IO error", /* UNKNOWN */
+ "Permission denied", /* EACCES */
+ "Resource temporarily unavailable",/* EAGAIN */
+ "Bad file descriptor", /* EBADF */
+ "Bad message", /* EBADMSG */
+ "Resource busy", /* EBUSY */
+ "Operation canceled", /* ECANCELED */
+ "No child processes", /* ECHILD */
+ "Resource deadlock avoided",/* EDEADLK */
+ "Domain error", /* EDOM */
+ "File exists", /* EEXIST */
+ "Bad address", /* EFAULT */
+ "File too large", /* EFBIG */
+ "Operation in progress", /* EINPROGRESS */
+ "Interrupted function call",/* EINTR */
+ "Invalid argument", /* EINVAL */
+ "Input/output error", /* EIO */
+ "Is a directory", /* EISDIR */
+ "Too many open files", /* EMFILE */
+ "Too many links", /* EMLINK */
+ "Inappropriate message buffer length",/* EMSGSIZE */
+ "Filename too long", /* ENAMETOOLONG */
+ "Too many open files in system",/* ENFILE */
+ "No such device", /* ENODEV */
+ "No such file or directory",/* ENOENT */
+ "Exec format error", /* ENOEXEC */
+ "No locks available", /* ENOLCK */
+ "Not enough space", /* ENOMEM */
+ "No space left on device", /* ENOSPC */
+ "Function not implemented", /* ENOSYS */
+ "Not a directory", /* ENOTDIR */
+ "Directory not empty", /* ENOTEMPTY */
+ "Not supported", /* ENOTSUP */
+ "Inappropriate I/O control operation",/* ENOTTY */
+ "No such device or address",/* ENXIO */
+ "Operation not permitted", /* EPERM */
+ "Broken pipe", /* EPIPE */
+ "Result too large", /* ERANGE */
+ "Read-only file system", /* EROFS */
+ "Invalid seek", /* ESPIPE */
+ "No such process", /* ESRCH */
+ "Operation timed out", /* ETIMEDOUT */
+ "Improper link", /* EXDEV */
+ "Attempt to load network entity %s", /* XML_IO_NETWORK_ATTEMPT */
+ "encoder error", /* XML_IO_ENCODER */
+ "flush error",
+ "write error",
+ "no input",
+ "buffer full",
+ "loading error",
+ "not a socket", /* ENOTSOCK */
+ "already connected", /* EISCONN */
+ "connection refuxed", /* ECONNREFUSED */
+ "unreachable network", /* ENETUNREACH */
+ "adddress in use", /* EADDRINUSE */
+ "already in use", /* EALREADY */
+ "unknown address familly", /* EAFNOSUPPORT */
+};
+
+/**
+ * xmlIOErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlIOErrMemory(const char *extra)
+{
+ __xmlSimpleError(XML_FROM_IO, XML_ERR_NO_MEMORY, NULL, NULL, extra);
+}
+
+/**
+ * __xmlIOErr:
+ * @code: the error number
+ * @
+ * @extra: extra informations
+ *
+ * Handle an I/O error
+ */
+void
+__xmlIOErr(int domain, int code, const char *extra)
+{
+ unsigned int idx;
+
+ if (code == 0) {
+#ifdef HAVE_ERRNO_H
+ if (errno == 0) code = 0;
+#ifdef EACCES
+ else if (errno == EACCES) code = XML_IO_EACCES;
+#endif
+#ifdef EAGAIN
+ else if (errno == EAGAIN) code = XML_IO_EAGAIN;
+#endif
+#ifdef EBADF
+ else if (errno == EBADF) code = XML_IO_EBADF;
+#endif
+#ifdef EBADMSG
+ else if (errno == EBADMSG) code = XML_IO_EBADMSG;
+#endif
+#ifdef EBUSY
+ else if (errno == EBUSY) code = XML_IO_EBUSY;
+#endif
+#ifdef ECANCELED
+ else if (errno == ECANCELED) code = XML_IO_ECANCELED;
+#endif
+#ifdef ECHILD
+ else if (errno == ECHILD) code = XML_IO_ECHILD;
+#endif
+#ifdef EDEADLK
+ else if (errno == EDEADLK) code = XML_IO_EDEADLK;
+#endif
+#ifdef EDOM
+ else if (errno == EDOM) code = XML_IO_EDOM;
+#endif
+#ifdef EEXIST
+ else if (errno == EEXIST) code = XML_IO_EEXIST;
+#endif
+#ifdef EFAULT
+ else if (errno == EFAULT) code = XML_IO_EFAULT;
+#endif
+#ifdef EFBIG
+ else if (errno == EFBIG) code = XML_IO_EFBIG;
+#endif
+#ifdef EINPROGRESS
+ else if (errno == EINPROGRESS) code = XML_IO_EINPROGRESS;
+#endif
+#ifdef EINTR
+ else if (errno == EINTR) code = XML_IO_EINTR;
+#endif
+#ifdef EINVAL
+ else if (errno == EINVAL) code = XML_IO_EINVAL;
+#endif
+#ifdef EIO
+ else if (errno == EIO) code = XML_IO_EIO;
+#endif
+#ifdef EISDIR
+ else if (errno == EISDIR) code = XML_IO_EISDIR;
+#endif
+#ifdef EMFILE
+ else if (errno == EMFILE) code = XML_IO_EMFILE;
+#endif
+#ifdef EMLINK
+ else if (errno == EMLINK) code = XML_IO_EMLINK;
+#endif
+#ifdef EMSGSIZE
+ else if (errno == EMSGSIZE) code = XML_IO_EMSGSIZE;
+#endif
+#ifdef ENAMETOOLONG
+ else if (errno == ENAMETOOLONG) code = XML_IO_ENAMETOOLONG;
+#endif
+#ifdef ENFILE
+ else if (errno == ENFILE) code = XML_IO_ENFILE;
+#endif
+#ifdef ENODEV
+ else if (errno == ENODEV) code = XML_IO_ENODEV;
+#endif
+#ifdef ENOENT
+ else if (errno == ENOENT) code = XML_IO_ENOENT;
+#endif
+#ifdef ENOEXEC
+ else if (errno == ENOEXEC) code = XML_IO_ENOEXEC;
+#endif
+#ifdef ENOLCK
+ else if (errno == ENOLCK) code = XML_IO_ENOLCK;
+#endif
+#ifdef ENOMEM
+ else if (errno == ENOMEM) code = XML_IO_ENOMEM;
+#endif
+#ifdef ENOSPC
+ else if (errno == ENOSPC) code = XML_IO_ENOSPC;
+#endif
+#ifdef ENOSYS
+ else if (errno == ENOSYS) code = XML_IO_ENOSYS;
+#endif
+#ifdef ENOTDIR
+ else if (errno == ENOTDIR) code = XML_IO_ENOTDIR;
+#endif
+#ifdef ENOTEMPTY
+ else if (errno == ENOTEMPTY) code = XML_IO_ENOTEMPTY;
+#endif
+#ifdef ENOTSUP
+ else if (errno == ENOTSUP) code = XML_IO_ENOTSUP;
+#endif
+#ifdef ENOTTY
+ else if (errno == ENOTTY) code = XML_IO_ENOTTY;
+#endif
+#ifdef ENXIO
+ else if (errno == ENXIO) code = XML_IO_ENXIO;
+#endif
+#ifdef EPERM
+ else if (errno == EPERM) code = XML_IO_EPERM;
+#endif
+#ifdef EPIPE
+ else if (errno == EPIPE) code = XML_IO_EPIPE;
+#endif
+#ifdef ERANGE
+ else if (errno == ERANGE) code = XML_IO_ERANGE;
+#endif
+#ifdef EROFS
+ else if (errno == EROFS) code = XML_IO_EROFS;
+#endif
+#ifdef ESPIPE
+ else if (errno == ESPIPE) code = XML_IO_ESPIPE;
+#endif
+#ifdef ESRCH
+ else if (errno == ESRCH) code = XML_IO_ESRCH;
+#endif
+#ifdef ETIMEDOUT
+ else if (errno == ETIMEDOUT) code = XML_IO_ETIMEDOUT;
+#endif
+#ifdef EXDEV
+ else if (errno == EXDEV) code = XML_IO_EXDEV;
+#endif
+#ifdef ENOTSOCK
+ else if (errno == ENOTSOCK) code = XML_IO_ENOTSOCK;
+#endif
+#ifdef EISCONN
+ else if (errno == EISCONN) code = XML_IO_EISCONN;
+#endif
+#ifdef ECONNREFUSED
+ else if (errno == ECONNREFUSED) code = XML_IO_ECONNREFUSED;
+#endif
+#ifdef ETIMEDOUT
+ else if (errno == ETIMEDOUT) code = XML_IO_ETIMEDOUT;
+#endif
+#ifdef ENETUNREACH
+ else if (errno == ENETUNREACH) code = XML_IO_ENETUNREACH;
+#endif
+#ifdef EADDRINUSE
+ else if (errno == EADDRINUSE) code = XML_IO_EADDRINUSE;
+#endif
+#ifdef EINPROGRESS
+ else if (errno == EINPROGRESS) code = XML_IO_EINPROGRESS;
+#endif
+#ifdef EALREADY
+ else if (errno == EALREADY) code = XML_IO_EALREADY;
+#endif
+#ifdef EAFNOSUPPORT
+ else if (errno == EAFNOSUPPORT) code = XML_IO_EAFNOSUPPORT;
+#endif
+ else code = XML_IO_UNKNOWN;
+#endif /* HAVE_ERRNO_H */
+ }
+ idx = 0;
+ if (code >= XML_IO_UNKNOWN) idx = code - XML_IO_UNKNOWN;
+ if (idx >= (sizeof(IOerr) / sizeof(IOerr[0]))) idx = 0;
+
+ __xmlSimpleError(domain, code, NULL, IOerr[idx], extra);
+}
+
+/**
+ * xmlIOErr:
+ * @code: the error number
+ * @extra: extra informations
+ *
+ * Handle an I/O error
+ */
+static void
+xmlIOErr(int code, const char *extra)
+{
+ __xmlIOErr(XML_FROM_IO, code, extra);
+}
+
+/**
+ * __xmlLoaderErr:
+ * @ctx: the parser context
+ * @extra: extra informations
+ *
+ * Handle a resource access error
+ */
+void
+__xmlLoaderErr(void *ctx, const char *msg, const char *filename)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ void *data = NULL;
+ xmlErrorLevel level = XML_ERR_ERROR;
+
+ if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
+ (ctxt->instate == XML_PARSER_EOF))
+ return;
+ if ((ctxt != NULL) && (ctxt->sax != NULL)) {
+ if (ctxt->validate) {
+ channel = ctxt->sax->error;
+ level = XML_ERR_ERROR;
+ } else {
+ channel = ctxt->sax->warning;
+ level = XML_ERR_WARNING;
+ }
+ schannel = ctxt->sax->serror;
+ data = ctxt->userData;
+ }
+ __xmlRaiseError(schannel, channel, data, ctxt, NULL, XML_FROM_IO,
+ XML_IO_LOAD_ERROR, level, NULL, 0,
+ filename, NULL, NULL, 0, 0,
+ msg, filename);
+
+}
+
+/************************************************************************
+ * *
+ * Tree memory error handler *
+ * *
+ ************************************************************************/
+/**
+ * xmlNormalizeWindowsPath:
+ * @path: the input file path
+ *
+ * This function is obsolete. Please see xmlURIFromPath in uri.c for
+ * a better solution.
+ *
+ * Returns a canonicalized version of the path
+ */
+xmlChar *
+xmlNormalizeWindowsPath(const xmlChar *path)
+{
+ return xmlCanonicPath(path);
+}
+
+/**
+ * xmlCleanupInputCallbacks:
+ *
+ * clears the entire input callback table. this includes the
+ * compiled-in I/O.
+ */
+void
+xmlCleanupInputCallbacks(void)
+{
+ int i;
+
+ if (!xmlInputCallbackInitialized)
+ return;
+
+ for (i = xmlInputCallbackNr - 1; i >= 0; i--) {
+ xmlInputCallbackTable[i].matchcallback = NULL;
+ xmlInputCallbackTable[i].opencallback = NULL;
+ xmlInputCallbackTable[i].readcallback = NULL;
+ xmlInputCallbackTable[i].closecallback = NULL;
+ }
+
+ xmlInputCallbackNr = 0;
+ xmlInputCallbackInitialized = 0;
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlCleanupOutputCallbacks:
+ *
+ * clears the entire output callback table. this includes the
+ * compiled-in I/O callbacks.
+ */
+void
+xmlCleanupOutputCallbacks(void)
+{
+ int i;
+
+ if (!xmlOutputCallbackInitialized)
+ return;
+
+ for (i = xmlOutputCallbackNr - 1; i >= 0; i--) {
+ xmlOutputCallbackTable[i].matchcallback = NULL;
+ xmlOutputCallbackTable[i].opencallback = NULL;
+ xmlOutputCallbackTable[i].writecallback = NULL;
+ xmlOutputCallbackTable[i].closecallback = NULL;
+ }
+
+ xmlOutputCallbackNr = 0;
+ xmlOutputCallbackInitialized = 0;
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ * *
+ * Standard I/O for file accesses *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlCheckFilename:
+ * @path: the path to check
+ *
+ * function checks to see if @path is a valid source
+ * (file, socket...) for XML.
+ *
+ * if stat is not available on the target machine,
+ * returns 1. if stat fails, returns 0 (if calling
+ * stat on the filename fails, it can't be right).
+ * if stat succeeds and the file is a directory,
+ * returns 2. otherwise returns 1.
+ */
+
+int
+xmlCheckFilename (const char *path)
+{
+#ifdef HAVE_STAT
+ struct stat stat_buffer;
+
+ if (stat(path, &stat_buffer) == -1)
+ return 0;
+
+#ifdef S_ISDIR
+ if (S_ISDIR(stat_buffer.st_mode)) {
+ return 2;
+ }
+#endif
+#endif
+ return 1;
+}
+
+static int
+xmlNop(void) {
+ return(0);
+}
+
+/**
+ * xmlFdRead:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to read
+ *
+ * Read @len bytes to @buffer from the I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+static int
+xmlFdRead (void * context, char * buffer, int len) {
+ int ret;
+
+ ret = read((int) (long) context, &buffer[0], len);
+ if (ret < 0) xmlIOErr(0, "read()");
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlFdWrite:
+ * @context: the I/O context
+ * @buffer: where to get data
+ * @len: number of bytes to write
+ *
+ * Write @len bytes from @buffer to the I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+static int
+xmlFdWrite (void * context, const char * buffer, int len) {
+ int ret;
+
+ ret = write((int) (long) context, &buffer[0], len);
+ if (ret < 0) xmlIOErr(0, "write()");
+ return(ret);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlFdClose:
+ * @context: the I/O context
+ *
+ * Close an I/O channel
+ *
+ * Returns 0 in case of success and error code otherwise
+ */
+static int
+xmlFdClose (void * context) {
+ int ret;
+ ret = close((int) (long) context);
+ if (ret < 0) xmlIOErr(0, "close()");
+ return(ret);
+}
+
+/**
+ * xmlFileMatch:
+ * @filename: the URI for matching
+ *
+ * input from FILE *
+ *
+ * Returns 1 if matches, 0 otherwise
+ */
+int
+xmlFileMatch (const char *filename ATTRIBUTE_UNUSED) {
+ return(1);
+}
+
+/**
+ * xmlFileOpen_real:
+ * @filename: the URI for matching
+ *
+ * input from FILE *, supports compressed input
+ * if @filename is " " then the standard input is used
+ *
+ * Returns an I/O context or NULL in case of error
+ */
+static void *
+xmlFileOpen_real (const char *filename) {
+ const char *path = NULL;
+ FILE *fd;
+
+ if (!strcmp(filename, "-")) {
+ fd = stdin;
+ return((void *) fd);
+ }
+
+ if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17))
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &filename[17];
+#else
+ path = &filename[16];
+#endif
+ else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) {
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &filename[8];
+#else
+ path = &filename[7];
+#endif
+ } else
+ path = filename;
+
+ if (path == NULL)
+ return(NULL);
+ if (!xmlCheckFilename(path))
+ return(NULL);
+
+#if defined(WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
+ fd = fopen(path, "rb");
+#else
+ fd = fopen(path, "r");
+#endif /* WIN32 */
+ if (fd == NULL) xmlIOErr(0, path);
+ return((void *) fd);
+}
+
+/**
+ * xmlFileOpen:
+ * @filename: the URI for matching
+ *
+ * Wrapper around xmlFileOpen_real that try it with an unescaped
+ * version of @filename, if this fails fallback to @filename
+ *
+ * Returns a handler or NULL in case or failure
+ */
+void *
+xmlFileOpen (const char *filename) {
+ char *unescaped;
+ void *retval;
+ unescaped = xmlURIUnescapeString(filename, 0, NULL);
+ if (unescaped != NULL) {
+ retval = xmlFileOpen_real(unescaped);
+ } else {
+ retval = xmlFileOpen_real(filename);
+ }
+ xmlFree(unescaped);
+ return retval;
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlFileOpenW:
+ * @filename: the URI for matching
+ *
+ * output to from FILE *,
+ * if @filename is "-" then the standard output is used
+ *
+ * Returns an I/O context or NULL in case of error
+ */
+static void *
+xmlFileOpenW (const char *filename) {
+ const char *path = NULL;
+ FILE *fd;
+
+ if (!strcmp(filename, "-")) {
+ fd = stdout;
+ return((void *) fd);
+ }
+
+ if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17))
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &filename[17];
+#else
+ path = &filename[16];
+#endif
+ else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) {
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &filename[8];
+#else
+ path = &filename[7];
+#endif
+ } else
+ path = filename;
+
+ if (path == NULL)
+ return(NULL);
+
+ fd = fopen(path, "wb");
+ if (fd == NULL) xmlIOErr(0, path);
+ return((void *) fd);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlFileRead:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to write
+ *
+ * Read @len bytes to @buffer from the I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+int
+xmlFileRead (void * context, char * buffer, int len) {
+ int ret;
+ ret = fread(&buffer[0], 1, len, (FILE *) context);
+ if (ret < 0) xmlIOErr(0, "fread()");
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlFileWrite:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to write
+ *
+ * Write @len bytes from @buffer to the I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+static int
+xmlFileWrite (void * context, const char * buffer, int len) {
+ int items;
+
+ items = fwrite(&buffer[0], len, 1, (FILE *) context);
+ if ((items == 0) && (ferror((FILE *) context))) {
+ xmlIOErr(0, "fwrite()");
+ return(-1);
+ }
+ return(items * len);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlFileClose:
+ * @context: the I/O context
+ *
+ * Close an I/O channel
+ *
+ * Returns 0 or -1 in case of error
+ */
+int
+xmlFileClose (void * context) {
+ FILE *fil;
+ int ret;
+
+ fil = (FILE *) context;
+ if ((fil == stdout) || (fil == stderr)) {
+ ret = fflush(fil);
+ if (ret < 0)
+ xmlIOErr(0, "fflush()");
+ return(0);
+ }
+ if (fil == stdin)
+ return(0);
+ ret = ( fclose((FILE *) context) == EOF ) ? -1 : 0;
+ if (ret < 0)
+ xmlIOErr(0, "fclose()");
+ return(ret);
+}
+
+/**
+ * xmlFileFlush:
+ * @context: the I/O context
+ *
+ * Flush an I/O channel
+ */
+static int
+xmlFileFlush (void * context) {
+ int ret;
+ ret = ( fflush((FILE *) context) == EOF ) ? -1 : 0;
+ if (ret < 0)
+ xmlIOErr(0, "fflush()");
+ return(ret);
+}
+
+#ifdef HAVE_ZLIB_H
+/************************************************************************
+ * *
+ * I/O for compressed file accesses *
+ * *
+ ************************************************************************/
+/**
+ * xmlGzfileMatch:
+ * @filename: the URI for matching
+ *
+ * input from compressed file test
+ *
+ * Returns 1 if matches, 0 otherwise
+ */
+static int
+xmlGzfileMatch (const char *filename ATTRIBUTE_UNUSED) {
+ return(1);
+}
+
+/**
+ * xmlGzfileOpen_real:
+ * @filename: the URI for matching
+ *
+ * input from compressed file open
+ * if @filename is " " then the standard input is used
+ *
+ * Returns an I/O context or NULL in case of error
+ */
+static void *
+xmlGzfileOpen_real (const char *filename) {
+ const char *path = NULL;
+ gzFile fd;
+
+ if (!strcmp(filename, "-")) {
+ fd = gzdopen(dup(0), "rb");
+ return((void *) fd);
+ }
+
+ if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17))
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &filename[17];
+#else
+ path = &filename[16];
+#endif
+ else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) {
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &filename[8];
+#else
+ path = &filename[7];
+#endif
+ } else
+ path = filename;
+
+ if (path == NULL)
+ return(NULL);
+ if (!xmlCheckFilename(path))
+ return(NULL);
+
+ fd = gzopen(path, "rb");
+ return((void *) fd);
+}
+
+/**
+ * xmlGzfileOpen:
+ * @filename: the URI for matching
+ *
+ * Wrapper around xmlGzfileOpen if the open fais, it will
+ * try to unescape @filename
+ */
+static void *
+xmlGzfileOpen (const char *filename) {
+ char *unescaped;
+ void *retval;
+
+ retval = xmlGzfileOpen_real(filename);
+ if (retval == NULL) {
+ unescaped = xmlURIUnescapeString(filename, 0, NULL);
+ if (unescaped != NULL) {
+ retval = xmlGzfileOpen_real(unescaped);
+ }
+ xmlFree(unescaped);
+ }
+ return retval;
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlGzfileOpenW:
+ * @filename: the URI for matching
+ * @compression: the compression factor (0 - 9 included)
+ *
+ * input from compressed file open
+ * if @filename is " " then the standard input is used
+ *
+ * Returns an I/O context or NULL in case of error
+ */
+static void *
+xmlGzfileOpenW (const char *filename, int compression) {
+ const char *path = NULL;
+ char mode[15];
+ gzFile fd;
+
+ snprintf(mode, sizeof(mode), "wb%d", compression);
+ if (!strcmp(filename, "-")) {
+ fd = gzdopen(dup(1), mode);
+ return((void *) fd);
+ }
+
+ if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17))
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &filename[17];
+#else
+ path = &filename[16];
+#endif
+ else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) {
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &filename[8];
+#else
+ path = &filename[7];
+#endif
+ } else
+ path = filename;
+
+ if (path == NULL)
+ return(NULL);
+
+ fd = gzopen(path, mode);
+ return((void *) fd);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlGzfileRead:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to write
+ *
+ * Read @len bytes to @buffer from the compressed I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+static int
+xmlGzfileRead (void * context, char * buffer, int len) {
+ int ret;
+
+ ret = gzread((gzFile) context, &buffer[0], len);
+ if (ret < 0) xmlIOErr(0, "gzread()");
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlGzfileWrite:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to write
+ *
+ * Write @len bytes from @buffer to the compressed I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+static int
+xmlGzfileWrite (void * context, const char * buffer, int len) {
+ int ret;
+
+ ret = gzwrite((gzFile) context, (char *) &buffer[0], len);
+ if (ret < 0) xmlIOErr(0, "gzwrite()");
+ return(ret);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlGzfileClose:
+ * @context: the I/O context
+ *
+ * Close a compressed I/O channel
+ */
+static int
+xmlGzfileClose (void * context) {
+ int ret;
+
+ ret = (gzclose((gzFile) context) == Z_OK ) ? 0 : -1;
+ if (ret < 0) xmlIOErr(0, "gzclose()");
+ return(ret);
+}
+#endif /* HAVE_ZLIB_H */
+
+#ifdef LIBXML_HTTP_ENABLED
+/************************************************************************
+ * *
+ * I/O for HTTP file accesses *
+ * *
+ ************************************************************************/
+
+#ifdef LIBXML_OUTPUT_ENABLED
+typedef struct xmlIOHTTPWriteCtxt_
+{
+ int compression;
+
+ char * uri;
+
+ void * doc_buff;
+
+} xmlIOHTTPWriteCtxt, *xmlIOHTTPWriteCtxtPtr;
+
+#ifdef HAVE_ZLIB_H
+
+#define DFLT_WBITS ( -15 )
+#define DFLT_MEM_LVL ( 8 )
+#define GZ_MAGIC1 ( 0x1f )
+#define GZ_MAGIC2 ( 0x8b )
+#define LXML_ZLIB_OS_CODE ( 0x03 )
+#define INIT_HTTP_BUFF_SIZE ( 32768 )
+#define DFLT_ZLIB_RATIO ( 5 )
+
+/*
+** Data structure and functions to work with sending compressed data
+** via HTTP.
+*/
+
+typedef struct xmlZMemBuff_
+{
+ unsigned long size;
+ unsigned long crc;
+
+ unsigned char * zbuff;
+ z_stream zctrl;
+
+} xmlZMemBuff, *xmlZMemBuffPtr;
+
+/**
+ * append_reverse_ulong
+ * @buff: Compressed memory buffer
+ * @data: Unsigned long to append
+ *
+ * Append a unsigned long in reverse byte order to the end of the
+ * memory buffer.
+ */
+static void
+append_reverse_ulong( xmlZMemBuff * buff, unsigned long data ) {
+
+ int idx;
+
+ if ( buff == NULL )
+ return;
+
+ /*
+ ** This is plagiarized from putLong in gzio.c (zlib source) where
+ ** the number "4" is hardcoded. If zlib is ever patched to
+ ** support 64 bit file sizes, this code would need to be patched
+ ** as well.
+ */
+
+ for ( idx = 0; idx < 4; idx++ ) {
+ *buff->zctrl.next_out = ( data & 0xff );
+ data >>= 8;
+ buff->zctrl.next_out++;
+ }
+
+ return;
+}
+
+/**
+ *
+ * xmlFreeZMemBuff
+ * @buff: The memory buffer context to clear
+ *
+ * Release all the resources associated with the compressed memory buffer.
+ */
+static void
+xmlFreeZMemBuff( xmlZMemBuffPtr buff ) {
+
+#ifdef DEBUG_HTTP
+ int z_err;
+#endif
+
+ if ( buff == NULL )
+ return;
+
+ xmlFree( buff->zbuff );
+#ifdef DEBUG_HTTP
+ z_err = deflateEnd( &buff->zctrl );
+ if ( z_err != Z_OK )
+ xmlGenericError( xmlGenericErrorContext,
+ "xmlFreeZMemBuff: Error releasing zlib context: %d\n",
+ z_err );
+#else
+ deflateEnd( &buff->zctrl );
+#endif
+
+ xmlFree( buff );
+ return;
+}
+
+/**
+ * xmlCreateZMemBuff
+ *@compression: Compression value to use
+ *
+ * Create a memory buffer to hold the compressed XML document. The
+ * compressed document in memory will end up being identical to what
+ * would be created if gzopen/gzwrite/gzclose were being used to
+ * write the document to disk. The code for the header/trailer data to
+ * the compression is plagiarized from the zlib source files.
+ */
+static void *
+xmlCreateZMemBuff( int compression ) {
+
+ int z_err;
+ int hdr_lgth;
+ xmlZMemBuffPtr buff = NULL;
+
+ if ( ( compression < 1 ) || ( compression > 9 ) )
+ return ( NULL );
+
+ /* Create the control and data areas */
+
+ buff = xmlMalloc( sizeof( xmlZMemBuff ) );
+ if ( buff == NULL ) {
+ xmlIOErrMemory("creating buffer context");
+ return ( NULL );
+ }
+
+ (void)memset( buff, 0, sizeof( xmlZMemBuff ) );
+ buff->size = INIT_HTTP_BUFF_SIZE;
+ buff->zbuff = xmlMalloc( buff->size );
+ if ( buff->zbuff == NULL ) {
+ xmlFreeZMemBuff( buff );
+ xmlIOErrMemory("creating buffer");
+ return ( NULL );
+ }
+
+ z_err = deflateInit2( &buff->zctrl, compression, Z_DEFLATED,
+ DFLT_WBITS, DFLT_MEM_LVL, Z_DEFAULT_STRATEGY );
+ if ( z_err != Z_OK ) {
+ xmlChar msg[500];
+ xmlFreeZMemBuff( buff );
+ buff = NULL;
+ xmlStrPrintf(msg, 500,
+ (const xmlChar *) "xmlCreateZMemBuff: %s %d\n",
+ "Error initializing compression context. ZLIB error:",
+ z_err );
+ xmlIOErr(XML_IO_WRITE, (const char *) msg);
+ return ( NULL );
+ }
+
+ /* Set the header data. The CRC will be needed for the trailer */
+ buff->crc = crc32( 0L, Z_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,
+ 0, 0, 0, 0, 0, 0, LXML_ZLIB_OS_CODE );
+ buff->zctrl.next_out = buff->zbuff + hdr_lgth;
+ buff->zctrl.avail_out = buff->size - hdr_lgth;
+
+ return ( buff );
+}
+
+/**
+ * xmlZMemBuffExtend
+ * @buff: Buffer used to compress and consolidate data.
+ * @ext_amt: Number of bytes to extend the buffer.
+ *
+ * Extend the internal buffer used to store the compressed data by the
+ * specified amount.
+ *
+ * Returns 0 on success or -1 on failure to extend the buffer. On failure
+ * the original buffer still exists at the original size.
+ */
+static int
+xmlZMemBuffExtend( xmlZMemBuffPtr buff, size_t ext_amt ) {
+
+ int rc = -1;
+ size_t new_size;
+ size_t cur_used;
+
+ unsigned char * tmp_ptr = NULL;
+
+ if ( buff == NULL )
+ return ( -1 );
+
+ else if ( ext_amt == 0 )
+ return ( 0 );
+
+ cur_used = buff->zctrl.next_out - buff->zbuff;
+ new_size = buff->size + ext_amt;
+
+#ifdef DEBUG_HTTP
+ if ( cur_used > new_size )
+ xmlGenericError( xmlGenericErrorContext,
+ "xmlZMemBuffExtend: %s\n%s %d bytes.\n",
+ "Buffer overwrite detected during compressed memory",
+ "buffer extension. Overflowed by",
+ (cur_used - new_size ) );
+#endif
+
+ tmp_ptr = xmlRealloc( buff->zbuff, new_size );
+ if ( tmp_ptr != NULL ) {
+ rc = 0;
+ buff->size = new_size;
+ buff->zbuff = tmp_ptr;
+ buff->zctrl.next_out = tmp_ptr + cur_used;
+ buff->zctrl.avail_out = new_size - cur_used;
+ }
+ else {
+ xmlChar msg[500];
+ xmlStrPrintf(msg, 500,
+ (const xmlChar *) "xmlZMemBuffExtend: %s %lu bytes.\n",
+ "Allocation failure extending output buffer to",
+ new_size );
+ xmlIOErr(XML_IO_WRITE, (const char *) msg);
+ }
+
+ return ( rc );
+}
+
+/**
+ * xmlZMemBuffAppend
+ * @buff: Buffer used to compress and consolidate data
+ * @src: Uncompressed source content to append to buffer
+ * @len: Length of source data to append to buffer
+ *
+ * Compress and append data to the internal buffer. The data buffer
+ * will be expanded if needed to store the additional data.
+ *
+ * Returns the number of bytes appended to the buffer or -1 on error.
+ */
+static int
+xmlZMemBuffAppend( xmlZMemBuffPtr buff, const char * src, int len ) {
+
+ int z_err;
+ size_t min_accept;
+
+ if ( ( buff == NULL ) || ( src == NULL ) )
+ return ( -1 );
+
+ buff->zctrl.avail_in = len;
+ buff->zctrl.next_in = (unsigned char *)src;
+ while ( buff->zctrl.avail_in > 0 ) {
+ /*
+ ** Extend the buffer prior to deflate call if a reasonable amount
+ ** of output buffer space is not available.
+ */
+ min_accept = buff->zctrl.avail_in / DFLT_ZLIB_RATIO;
+ if ( buff->zctrl.avail_out <= min_accept ) {
+ if ( xmlZMemBuffExtend( buff, buff->size ) == -1 )
+ return ( -1 );
+ }
+
+ z_err = deflate( &buff->zctrl, Z_NO_FLUSH );
+ if ( z_err != Z_OK ) {
+ xmlChar msg[500];
+ xmlStrPrintf(msg, 500,
+ (const xmlChar *) "xmlZMemBuffAppend: %s %d %s - %d",
+ "Compression error while appending",
+ len, "bytes to buffer. ZLIB error", z_err );
+ xmlIOErr(XML_IO_WRITE, (const char *) msg);
+ return ( -1 );
+ }
+ }
+
+ buff->crc = crc32( buff->crc, (unsigned char *)src, len );
+
+ return ( len );
+}
+
+/**
+ * xmlZMemBuffGetContent
+ * @buff: Compressed memory content buffer
+ * @data_ref: Pointer reference to point to compressed content
+ *
+ * Flushes the compression buffers, appends gzip file trailers and
+ * returns the compressed content and length of the compressed data.
+ * NOTE: The gzip trailer code here is plagiarized from zlib source.
+ *
+ * Returns the length of the compressed data or -1 on error.
+ */
+static int
+xmlZMemBuffGetContent( xmlZMemBuffPtr buff, char ** data_ref ) {
+
+ int zlgth = -1;
+ int z_err;
+
+ if ( ( buff == NULL ) || ( data_ref == NULL ) )
+ return ( -1 );
+
+ /* Need to loop until compression output buffers are flushed */
+
+ do
+ {
+ z_err = deflate( &buff->zctrl, Z_FINISH );
+ if ( z_err == Z_OK ) {
+ /* In this case Z_OK means more buffer space needed */
+
+ if ( xmlZMemBuffExtend( buff, buff->size ) == -1 )
+ return ( -1 );
+ }
+ }
+ while ( z_err == Z_OK );
+
+ /* If the compression state is not Z_STREAM_END, some error occurred */
+
+ if ( z_err == Z_STREAM_END ) {
+
+ /* Need to append the gzip data trailer */
+
+ if ( buff->zctrl.avail_out < ( 2 * sizeof( unsigned long ) ) ) {
+ if ( xmlZMemBuffExtend(buff, (2 * sizeof(unsigned long))) == -1 )
+ return ( -1 );
+ }
+
+ /*
+ ** For whatever reason, the CRC and length data are pushed out
+ ** in reverse byte order. So a memcpy can't be used here.
+ */
+
+ append_reverse_ulong( buff, buff->crc );
+ append_reverse_ulong( buff, buff->zctrl.total_in );
+
+ zlgth = buff->zctrl.next_out - buff->zbuff;
+ *data_ref = (char *)buff->zbuff;
+ }
+
+ else {
+ xmlChar msg[500];
+ xmlStrPrintf(msg, 500,
+ (const xmlChar *) "xmlZMemBuffGetContent: %s - %d\n",
+ "Error flushing zlib buffers. Error code", z_err );
+ xmlIOErr(XML_IO_WRITE, (const char *) msg);
+ }
+
+ return ( zlgth );
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+#endif /* HAVE_ZLIB_H */
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlFreeHTTPWriteCtxt
+ * @ctxt: Context to cleanup
+ *
+ * Free allocated memory and reclaim system resources.
+ *
+ * No return value.
+ */
+static void
+xmlFreeHTTPWriteCtxt( xmlIOHTTPWriteCtxtPtr ctxt )
+{
+ if ( ctxt->uri != NULL )
+ xmlFree( ctxt->uri );
+
+ if ( ctxt->doc_buff != NULL ) {
+
+#ifdef HAVE_ZLIB_H
+ if ( ctxt->compression > 0 ) {
+ xmlFreeZMemBuff( ctxt->doc_buff );
+ }
+ else
+#endif
+ {
+ xmlOutputBufferClose( ctxt->doc_buff );
+ }
+ }
+
+ xmlFree( ctxt );
+ return;
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+
+/**
+ * xmlIOHTTPMatch:
+ * @filename: the URI for matching
+ *
+ * check if the URI matches an HTTP one
+ *
+ * Returns 1 if matches, 0 otherwise
+ */
+int
+xmlIOHTTPMatch (const char *filename) {
+ if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "http://", 7))
+ return(1);
+ return(0);
+}
+
+/**
+ * xmlIOHTTPOpen:
+ * @filename: the URI for matching
+ *
+ * open an HTTP I/O channel
+ *
+ * Returns an I/O context or NULL in case of error
+ */
+void *
+xmlIOHTTPOpen (const char *filename) {
+ return(xmlNanoHTTPOpen(filename, NULL));
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlIOHTTPOpenW:
+ * @post_uri: The destination URI for the document
+ * @compression: The compression desired for the document.
+ *
+ * Open a temporary buffer to collect the document for a subsequent HTTP POST
+ * request. Non-static as is called from the output buffer creation routine.
+ *
+ * Returns an I/O context or NULL in case of error.
+ */
+
+void *
+xmlIOHTTPOpenW(const char *post_uri, int compression)
+{
+
+ xmlIOHTTPWriteCtxtPtr ctxt = NULL;
+
+ if (post_uri == NULL)
+ return (NULL);
+
+ ctxt = xmlMalloc(sizeof(xmlIOHTTPWriteCtxt));
+ if (ctxt == NULL) {
+ xmlIOErrMemory("creating HTTP output context");
+ return (NULL);
+ }
+
+ (void) memset(ctxt, 0, sizeof(xmlIOHTTPWriteCtxt));
+
+ ctxt->uri = (char *) xmlStrdup((const xmlChar *)post_uri);
+ if (ctxt->uri == NULL) {
+ xmlIOErrMemory("copying URI");
+ xmlFreeHTTPWriteCtxt(ctxt);
+ return (NULL);
+ }
+
+ /*
+ * ** Since the document length is required for an HTTP post,
+ * ** need to put the document into a buffer. A memory buffer
+ * ** is being used to avoid pushing the data to disk and back.
+ */
+
+#ifdef HAVE_ZLIB_H
+ if ((compression > 0) && (compression <= 9)) {
+
+ ctxt->compression = compression;
+ ctxt->doc_buff = xmlCreateZMemBuff(compression);
+ } else
+#endif
+ {
+ /* Any character conversions should have been done before this */
+
+ ctxt->doc_buff = xmlAllocOutputBuffer(NULL);
+ }
+
+ if (ctxt->doc_buff == NULL) {
+ xmlFreeHTTPWriteCtxt(ctxt);
+ ctxt = NULL;
+ }
+
+ return (ctxt);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlIOHTTPDfltOpenW
+ * @post_uri: The destination URI for this document.
+ *
+ * Calls xmlIOHTTPOpenW with no compression to set up for a subsequent
+ * HTTP post command. This function should generally not be used as
+ * the open callback is short circuited in xmlOutputBufferCreateFile.
+ *
+ * Returns a pointer to the new IO context.
+ */
+static void *
+xmlIOHTTPDfltOpenW( const char * post_uri ) {
+ return ( xmlIOHTTPOpenW( post_uri, 0 ) );
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlIOHTTPRead:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to write
+ *
+ * Read @len bytes to @buffer from the I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+int
+xmlIOHTTPRead(void * context, char * buffer, int len) {
+ return(xmlNanoHTTPRead(context, &buffer[0], len));
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlIOHTTPWrite
+ * @context: previously opened writing context
+ * @buffer: data to output to temporary buffer
+ * @len: bytes to output
+ *
+ * Collect data from memory buffer into a temporary file for later
+ * processing.
+ *
+ * Returns number of bytes written.
+ */
+
+static int
+xmlIOHTTPWrite( void * context, const char * buffer, int len ) {
+
+ xmlIOHTTPWriteCtxtPtr ctxt = context;
+
+ if ( ( ctxt == NULL ) || ( ctxt->doc_buff == NULL ) || ( buffer == NULL ) )
+ return ( -1 );
+
+ if ( len > 0 ) {
+
+ /* Use gzwrite or fwrite as previously setup in the open call */
+
+#ifdef HAVE_ZLIB_H
+ if ( ctxt->compression > 0 )
+ len = xmlZMemBuffAppend( ctxt->doc_buff, buffer, len );
+
+ else
+#endif
+ len = xmlOutputBufferWrite( ctxt->doc_buff, len, buffer );
+
+ if ( len < 0 ) {
+ xmlChar msg[500];
+ xmlStrPrintf(msg, 500,
+ (const xmlChar *) "xmlIOHTTPWrite: %s\n%s '%s'.\n",
+ "Error appending to internal buffer.",
+ "Error sending document to URI",
+ ctxt->uri );
+ xmlIOErr(XML_IO_WRITE, (const char *) msg);
+ }
+ }
+
+ return ( len );
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+
+/**
+ * xmlIOHTTPClose:
+ * @context: the I/O context
+ *
+ * Close an HTTP I/O channel
+ *
+ * Returns 0
+ */
+int
+xmlIOHTTPClose (void * context) {
+ xmlNanoHTTPClose(context);
+ return 0;
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlIOHTTCloseWrite
+ * @context: The I/O context
+ * @http_mthd: The HTTP method to be used when sending the data
+ *
+ * Close the transmit HTTP I/O channel and actually send the data.
+ */
+static int
+xmlIOHTTPCloseWrite( void * context, const char * http_mthd ) {
+
+ int close_rc = -1;
+ int http_rtn = 0;
+ int content_lgth = 0;
+ xmlIOHTTPWriteCtxtPtr ctxt = context;
+
+ char * http_content = NULL;
+ char * content_encoding = NULL;
+ char * content_type = (char *) "text/xml";
+ void * http_ctxt = NULL;
+
+ if ( ( ctxt == NULL ) || ( http_mthd == NULL ) )
+ return ( -1 );
+
+ /* Retrieve the content from the appropriate buffer */
+
+#ifdef HAVE_ZLIB_H
+
+ if ( ctxt->compression > 0 ) {
+ content_lgth = xmlZMemBuffGetContent( ctxt->doc_buff, &http_content );
+ content_encoding = (char *) "Content-Encoding: gzip";
+ }
+ else
+#endif
+ {
+ /* Pull the data out of the memory output buffer */
+
+ xmlOutputBufferPtr dctxt = ctxt->doc_buff;
+ http_content = (char *)dctxt->buffer->content;
+ content_lgth = dctxt->buffer->use;
+ }
+
+ if ( http_content == NULL ) {
+ xmlChar msg[500];
+ xmlStrPrintf(msg, 500,
+ (const xmlChar *) "xmlIOHTTPCloseWrite: %s '%s' %s '%s'.\n",
+ "Error retrieving content.\nUnable to",
+ http_mthd, "data to URI", ctxt->uri );
+ xmlIOErr(XML_IO_WRITE, (const char *) msg);
+ }
+
+ else {
+
+ http_ctxt = xmlNanoHTTPMethod( ctxt->uri, http_mthd, http_content,
+ &content_type, content_encoding,
+ content_lgth );
+
+ if ( http_ctxt != NULL ) {
+#ifdef DEBUG_HTTP
+ /* If testing/debugging - dump reply with request content */
+
+ FILE * tst_file = NULL;
+ char buffer[ 4096 ];
+ char * dump_name = NULL;
+ int avail;
+
+ xmlGenericError( xmlGenericErrorContext,
+ "xmlNanoHTTPCloseWrite: HTTP %s to\n%s returned %d.\n",
+ http_mthd, ctxt->uri,
+ xmlNanoHTTPReturnCode( http_ctxt ) );
+
+ /*
+ ** Since either content or reply may be gzipped,
+ ** dump them to separate files instead of the
+ ** standard error context.
+ */
+
+ dump_name = tempnam( NULL, "lxml" );
+ if ( dump_name != NULL ) {
+ (void)snprintf( buffer, sizeof(buffer), "%s.content", dump_name );
+
+ tst_file = fopen( buffer, "wb" );
+ if ( tst_file != NULL ) {
+ xmlGenericError( xmlGenericErrorContext,
+ "Transmitted content saved in file: %s\n", buffer );
+
+ fwrite( http_content, sizeof( char ),
+ content_lgth, tst_file );
+ fclose( tst_file );
+ }
+
+ (void)snprintf( buffer, sizeof(buffer), "%s.reply", dump_name );
+ tst_file = fopen( buffer, "wb" );
+ if ( tst_file != NULL ) {
+ xmlGenericError( xmlGenericErrorContext,
+ "Reply content saved in file: %s\n", buffer );
+
+
+ while ( (avail = xmlNanoHTTPRead( http_ctxt,
+ buffer, sizeof( buffer ) )) > 0 ) {
+
+ fwrite( buffer, sizeof( char ), avail, tst_file );
+ }
+
+ fclose( tst_file );
+ }
+
+ free( dump_name );
+ }
+#endif /* DEBUG_HTTP */
+
+ http_rtn = xmlNanoHTTPReturnCode( http_ctxt );
+ if ( ( http_rtn >= 200 ) && ( http_rtn < 300 ) )
+ close_rc = 0;
+ else {
+ xmlChar msg[500];
+ xmlStrPrintf(msg, 500,
+ (const xmlChar *) "xmlIOHTTPCloseWrite: HTTP '%s' of %d %s\n'%s' %s %d\n",
+ http_mthd, content_lgth,
+ "bytes to URI", ctxt->uri,
+ "failed. HTTP return code:", http_rtn );
+ xmlIOErr(XML_IO_WRITE, (const char *) msg);
+ }
+
+ xmlNanoHTTPClose( http_ctxt );
+ xmlFree( content_type );
+ }
+ }
+
+ /* Final cleanups */
+
+ xmlFreeHTTPWriteCtxt( ctxt );
+
+ return ( close_rc );
+}
+
+/**
+ * xmlIOHTTPClosePut
+ *
+ * @context: The I/O context
+ *
+ * Close the transmit HTTP I/O channel and actually send data using a PUT
+ * HTTP method.
+ */
+static int
+xmlIOHTTPClosePut( void * ctxt ) {
+ return ( xmlIOHTTPCloseWrite( ctxt, "PUT" ) );
+}
+
+
+/**
+ * xmlIOHTTPClosePost
+ *
+ * @context: The I/O context
+ *
+ * Close the transmit HTTP I/O channel and actually send data using a POST
+ * HTTP method.
+ */
+static int
+xmlIOHTTPClosePost( void * ctxt ) {
+ return ( xmlIOHTTPCloseWrite( ctxt, "POST" ) );
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#endif /* LIBXML_HTTP_ENABLED */
+
+#ifdef LIBXML_FTP_ENABLED
+/************************************************************************
+ * *
+ * I/O for FTP file accesses *
+ * *
+ ************************************************************************/
+/**
+ * xmlIOFTPMatch:
+ * @filename: the URI for matching
+ *
+ * check if the URI matches an FTP one
+ *
+ * Returns 1 if matches, 0 otherwise
+ */
+int
+xmlIOFTPMatch (const char *filename) {
+ if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "ftp://", 6))
+ return(1);
+ return(0);
+}
+
+/**
+ * xmlIOFTPOpen:
+ * @filename: the URI for matching
+ *
+ * open an FTP I/O channel
+ *
+ * Returns an I/O context or NULL in case of error
+ */
+void *
+xmlIOFTPOpen (const char *filename) {
+ return(xmlNanoFTPOpen(filename));
+}
+
+/**
+ * xmlIOFTPRead:
+ * @context: the I/O context
+ * @buffer: where to drop data
+ * @len: number of bytes to write
+ *
+ * Read @len bytes to @buffer from the I/O channel.
+ *
+ * Returns the number of bytes written
+ */
+int
+xmlIOFTPRead(void * context, char * buffer, int len) {
+ return(xmlNanoFTPRead(context, &buffer[0], len));
+}
+
+/**
+ * xmlIOFTPClose:
+ * @context: the I/O context
+ *
+ * Close an FTP I/O channel
+ *
+ * Returns 0
+ */
+int
+xmlIOFTPClose (void * context) {
+ return ( xmlNanoFTPClose(context) );
+}
+#endif /* LIBXML_FTP_ENABLED */
+
+
+/**
+ * xmlRegisterInputCallbacks:
+ * @matchFunc: the xmlInputMatchCallback
+ * @openFunc: the xmlInputOpenCallback
+ * @readFunc: the xmlInputReadCallback
+ * @closeFunc: the xmlInputCloseCallback
+ *
+ * Register a new set of I/O callback for handling parser input.
+ *
+ * Returns the registered handler number or -1 in case of error
+ */
+int
+xmlRegisterInputCallbacks(xmlInputMatchCallback matchFunc,
+ xmlInputOpenCallback openFunc, xmlInputReadCallback readFunc,
+ xmlInputCloseCallback closeFunc) {
+ if (xmlInputCallbackNr >= MAX_INPUT_CALLBACK) {
+ return(-1);
+ }
+ xmlInputCallbackTable[xmlInputCallbackNr].matchcallback = matchFunc;
+ xmlInputCallbackTable[xmlInputCallbackNr].opencallback = openFunc;
+ xmlInputCallbackTable[xmlInputCallbackNr].readcallback = readFunc;
+ xmlInputCallbackTable[xmlInputCallbackNr].closecallback = closeFunc;
+ xmlInputCallbackInitialized = 1;
+ return(xmlInputCallbackNr++);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlRegisterOutputCallbacks:
+ * @matchFunc: the xmlOutputMatchCallback
+ * @openFunc: the xmlOutputOpenCallback
+ * @writeFunc: the xmlOutputWriteCallback
+ * @closeFunc: the xmlOutputCloseCallback
+ *
+ * Register a new set of I/O callback for handling output.
+ *
+ * Returns the registered handler number or -1 in case of error
+ */
+int
+xmlRegisterOutputCallbacks(xmlOutputMatchCallback matchFunc,
+ xmlOutputOpenCallback openFunc, xmlOutputWriteCallback writeFunc,
+ xmlOutputCloseCallback closeFunc) {
+ if (xmlOutputCallbackNr >= MAX_INPUT_CALLBACK) {
+ return(-1);
+ }
+ xmlOutputCallbackTable[xmlOutputCallbackNr].matchcallback = matchFunc;
+ xmlOutputCallbackTable[xmlOutputCallbackNr].opencallback = openFunc;
+ xmlOutputCallbackTable[xmlOutputCallbackNr].writecallback = writeFunc;
+ xmlOutputCallbackTable[xmlOutputCallbackNr].closecallback = closeFunc;
+ xmlOutputCallbackInitialized = 1;
+ return(xmlOutputCallbackNr++);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlRegisterDefaultInputCallbacks:
+ *
+ * Registers the default compiled-in I/O handlers.
+ */
+void
+xmlRegisterDefaultInputCallbacks
+(void) {
+ if (xmlInputCallbackInitialized)
+ return;
+
+ xmlRegisterInputCallbacks(xmlFileMatch, xmlFileOpen,
+ xmlFileRead, xmlFileClose);
+#ifdef HAVE_ZLIB_H
+ xmlRegisterInputCallbacks(xmlGzfileMatch, xmlGzfileOpen,
+ xmlGzfileRead, xmlGzfileClose);
+#endif /* HAVE_ZLIB_H */
+
+#ifdef LIBXML_HTTP_ENABLED
+ xmlRegisterInputCallbacks(xmlIOHTTPMatch, xmlIOHTTPOpen,
+ xmlIOHTTPRead, xmlIOHTTPClose);
+#endif /* LIBXML_HTTP_ENABLED */
+
+#ifdef LIBXML_FTP_ENABLED
+ xmlRegisterInputCallbacks(xmlIOFTPMatch, xmlIOFTPOpen,
+ xmlIOFTPRead, xmlIOFTPClose);
+#endif /* LIBXML_FTP_ENABLED */
+ xmlInputCallbackInitialized = 1;
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlRegisterDefaultOutputCallbacks:
+ *
+ * Registers the default compiled-in I/O handlers.
+ */
+void
+xmlRegisterDefaultOutputCallbacks
+(void) {
+ if (xmlOutputCallbackInitialized)
+ return;
+
+ xmlRegisterOutputCallbacks(xmlFileMatch, xmlFileOpenW,
+ xmlFileWrite, xmlFileClose);
+
+#ifdef LIBXML_HTTP_ENABLED
+ xmlRegisterOutputCallbacks(xmlIOHTTPMatch, xmlIOHTTPDfltOpenW,
+ xmlIOHTTPWrite, xmlIOHTTPClosePut);
+#endif
+
+/*********************************
+ No way a-priori to distinguish between gzipped files from
+ uncompressed ones except opening if existing then closing
+ and saving with same compression ratio ... a pain.
+
+#ifdef HAVE_ZLIB_H
+ xmlRegisterOutputCallbacks(xmlGzfileMatch, xmlGzfileOpen,
+ xmlGzfileWrite, xmlGzfileClose);
+#endif
+
+ Nor FTP PUT ....
+#ifdef LIBXML_FTP_ENABLED
+ xmlRegisterOutputCallbacks(xmlIOFTPMatch, xmlIOFTPOpen,
+ xmlIOFTPWrite, xmlIOFTPClose);
+#endif
+ **********************************/
+ xmlOutputCallbackInitialized = 1;
+}
+
+#ifdef LIBXML_HTTP_ENABLED
+/**
+ * xmlRegisterHTTPPostCallbacks:
+ *
+ * By default, libxml submits HTTP output requests using the "PUT" method.
+ * Calling this method changes the HTTP output method to use the "POST"
+ * method instead.
+ *
+ */
+void
+xmlRegisterHTTPPostCallbacks( void ) {
+
+ /* Register defaults if not done previously */
+
+ if ( xmlOutputCallbackInitialized == 0 )
+ xmlRegisterDefaultOutputCallbacks( );
+
+ xmlRegisterOutputCallbacks(xmlIOHTTPMatch, xmlIOHTTPDfltOpenW,
+ xmlIOHTTPWrite, xmlIOHTTPClosePost);
+ return;
+}
+#endif
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlAllocParserInputBuffer:
+ * @enc: the charset encoding if known
+ *
+ * Create a buffered parser input for progressive parsing
+ *
+ * Returns the new parser input or NULL
+ */
+xmlParserInputBufferPtr
+xmlAllocParserInputBuffer(xmlCharEncoding enc) {
+ xmlParserInputBufferPtr ret;
+
+ ret = (xmlParserInputBufferPtr) xmlMalloc(sizeof(xmlParserInputBuffer));
+ if (ret == NULL) {
+ xmlIOErrMemory("creating input buffer");
+ return(NULL);
+ }
+ memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer));
+ ret->buffer = xmlBufferCreateSize(2 * xmlDefaultBufferSize);
+ if (ret->buffer == NULL) {
+ xmlFree(ret);
+ return(NULL);
+ }
+ ret->buffer->alloc = XML_BUFFER_ALLOC_DOUBLEIT;
+ ret->encoder = xmlGetCharEncodingHandler(enc);
+ if (ret->encoder != NULL)
+ ret->raw = xmlBufferCreateSize(2 * xmlDefaultBufferSize);
+ else
+ ret->raw = NULL;
+ ret->readcallback = NULL;
+ ret->closecallback = NULL;
+ ret->context = NULL;
+ ret->compressed = -1;
+ ret->rawconsumed = 0;
+
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlAllocOutputBuffer:
+ * @encoder: the encoding converter or NULL
+ *
+ * Create a buffered parser output
+ *
+ * Returns the new parser output or NULL
+ */
+xmlOutputBufferPtr
+xmlAllocOutputBuffer(xmlCharEncodingHandlerPtr encoder) {
+ xmlOutputBufferPtr ret;
+
+ ret = (xmlOutputBufferPtr) xmlMalloc(sizeof(xmlOutputBuffer));
+ if (ret == NULL) {
+ xmlIOErrMemory("creating output buffer");
+ return(NULL);
+ }
+ memset(ret, 0, (size_t) sizeof(xmlOutputBuffer));
+ ret->buffer = xmlBufferCreate();
+ if (ret->buffer == NULL) {
+ xmlFree(ret);
+ return(NULL);
+ }
+ ret->buffer->alloc = XML_BUFFER_ALLOC_DOUBLEIT;
+ ret->encoder = encoder;
+ if (encoder != NULL) {
+ ret->conv = xmlBufferCreateSize(4000);
+ /*
+ * This call is designed to initiate the encoder state
+ */
+ xmlCharEncOutFunc(encoder, ret->conv, NULL);
+ } else
+ ret->conv = NULL;
+ ret->writecallback = NULL;
+ ret->closecallback = NULL;
+ ret->context = NULL;
+ ret->written = 0;
+
+ return(ret);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlFreeParserInputBuffer:
+ * @in: a buffered parser input
+ *
+ * Free up the memory used by a buffered parser input
+ */
+void
+xmlFreeParserInputBuffer(xmlParserInputBufferPtr in) {
+ if (in == NULL) return;
+
+ if (in->raw) {
+ xmlBufferFree(in->raw);
+ in->raw = NULL;
+ }
+ if (in->encoder != NULL) {
+ xmlCharEncCloseFunc(in->encoder);
+ }
+ if (in->closecallback != NULL) {
+ in->closecallback(in->context);
+ }
+ if (in->buffer != NULL) {
+ xmlBufferFree(in->buffer);
+ in->buffer = NULL;
+ }
+
+ xmlFree(in);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlOutputBufferClose:
+ * @out: a buffered output
+ *
+ * flushes and close the output I/O channel
+ * and free up all the associated resources
+ *
+ * Returns the number of byte written or -1 in case of error.
+ */
+int
+xmlOutputBufferClose(xmlOutputBufferPtr out)
+{
+ int written;
+ int err_rc = 0;
+
+ if (out == NULL)
+ return (-1);
+ if (out->writecallback != NULL)
+ xmlOutputBufferFlush(out);
+ if (out->closecallback != NULL) {
+ err_rc = out->closecallback(out->context);
+ }
+ written = out->written;
+ if (out->conv) {
+ xmlBufferFree(out->conv);
+ out->conv = NULL;
+ }
+ if (out->encoder != NULL) {
+ xmlCharEncCloseFunc(out->encoder);
+ }
+ if (out->buffer != NULL) {
+ xmlBufferFree(out->buffer);
+ out->buffer = NULL;
+ }
+
+ if (out->error)
+ err_rc = -1;
+ xmlFree(out);
+ return ((err_rc == 0) ? written : err_rc);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlParserInputBufferCreateFilename:
+ * @URI: a C string containing the URI or filename
+ * @enc: the charset encoding if known
+ *
+ * Create a buffered parser input for the progressive parsing of a file
+ * If filename is "-' then we use stdin as the input.
+ * Automatic support for ZLIB/Compress compressed document is provided
+ * by default if found at compile-time.
+ * Do an encoding check if enc == XML_CHAR_ENCODING_NONE
+ *
+ * Returns the new parser input or NULL
+ */
+xmlParserInputBufferPtr
+xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) {
+ xmlParserInputBufferPtr ret;
+ int i = 0;
+ void *context = NULL;
+
+ if (xmlInputCallbackInitialized == 0)
+ xmlRegisterDefaultInputCallbacks();
+
+ if (URI == NULL) return(NULL);
+
+ /*
+ * Try to find one of the input accept method accepting that scheme
+ * Go in reverse to give precedence to user defined handlers.
+ */
+ if (context == NULL) {
+ for (i = xmlInputCallbackNr - 1;i >= 0;i--) {
+ if ((xmlInputCallbackTable[i].matchcallback != NULL) &&
+ (xmlInputCallbackTable[i].matchcallback(URI) != 0)) {
+ context = xmlInputCallbackTable[i].opencallback(URI);
+ if (context != NULL) {
+ break;
+ }
+ }
+ }
+ }
+ if (context == NULL) {
+ return(NULL);
+ }
+
+ /*
+ * Allocate the Input buffer front-end.
+ */
+ ret = xmlAllocParserInputBuffer(enc);
+ if (ret != NULL) {
+ ret->context = context;
+ ret->readcallback = xmlInputCallbackTable[i].readcallback;
+ ret->closecallback = xmlInputCallbackTable[i].closecallback;
+#ifdef HAVE_ZLIB_H
+ if ((xmlInputCallbackTable[i].opencallback == xmlGzfileOpen) &&
+ (strcmp(URI, "-") != 0)) {
+ if (((z_stream *)context)->avail_in > 4) {
+ char *cptr, buff4[4];
+ cptr = (char *) ((z_stream *)context)->next_in;
+ if (gzread(context, buff4, 4) == 4) {
+ if (strncmp(buff4, cptr, 4) == 0)
+ ret->compressed = 0;
+ else
+ ret->compressed = 1;
+ gzrewind(context);
+ }
+ }
+ }
+#endif
+ }
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlOutputBufferCreateFilename:
+ * @URI: a C string containing the URI or filename
+ * @encoder: the encoding converter or NULL
+ * @compression: the compression ration (0 none, 9 max).
+ *
+ * Create a buffered output for the progressive saving of a file
+ * If filename is "-' then we use stdout as the output.
+ * Automatic support for ZLIB/Compress compressed document is provided
+ * by default if found at compile-time.
+ * TODO: currently if compression is set, the library only support
+ * writing to a local file.
+ *
+ * Returns the new output or NULL
+ */
+xmlOutputBufferPtr
+xmlOutputBufferCreateFilename(const char *URI,
+ xmlCharEncodingHandlerPtr encoder,
+ int compression ATTRIBUTE_UNUSED) {
+ xmlOutputBufferPtr ret;
+ int i = 0;
+ void *context = NULL;
+ char *unescaped;
+
+ int is_http_uri = 0; /* Can't change if HTTP disabled */
+
+ if (xmlOutputCallbackInitialized == 0)
+ xmlRegisterDefaultOutputCallbacks();
+
+ if (URI == NULL) return(NULL);
+
+#ifdef LIBXML_HTTP_ENABLED
+ /* Need to prevent HTTP URI's from falling into zlib short circuit */
+
+ is_http_uri = xmlIOHTTPMatch( URI );
+#endif
+
+
+ /*
+ * Try to find one of the output accept method accepting that scheme
+ * Go in reverse to give precedence to user defined handlers.
+ * try with an unescaped version of the URI
+ */
+ unescaped = xmlURIUnescapeString(URI, 0, NULL);
+ if (unescaped != NULL) {
+#ifdef HAVE_ZLIB_H
+ if ((compression > 0) && (compression <= 9) && (is_http_uri == 0)) {
+ context = xmlGzfileOpenW(unescaped, compression);
+ if (context != NULL) {
+ ret = xmlAllocOutputBuffer(encoder);
+ if (ret != NULL) {
+ ret->context = context;
+ ret->writecallback = xmlGzfileWrite;
+ ret->closecallback = xmlGzfileClose;
+ }
+ xmlFree(unescaped);
+ return(ret);
+ }
+ }
+#endif
+ for (i = xmlOutputCallbackNr - 1;i >= 0;i--) {
+ if ((xmlOutputCallbackTable[i].matchcallback != NULL) &&
+ (xmlOutputCallbackTable[i].matchcallback(unescaped) != 0)) {
+#if defined(LIBXML_HTTP_ENABLED) && defined(HAVE_ZLIB_H)
+ /* Need to pass compression parameter into HTTP open calls */
+ if (xmlOutputCallbackTable[i].matchcallback == xmlIOHTTPMatch)
+ context = xmlIOHTTPOpenW(unescaped, compression);
+ else
+#endif
+ context = xmlOutputCallbackTable[i].opencallback(unescaped);
+ if (context != NULL)
+ break;
+ }
+ }
+ xmlFree(unescaped);
+ }
+
+ /*
+ * If this failed try with a non-escaped URI this may be a strange
+ * filename
+ */
+ if (context == NULL) {
+#ifdef HAVE_ZLIB_H
+ if ((compression > 0) && (compression <= 9) && (is_http_uri == 0)) {
+ context = xmlGzfileOpenW(URI, compression);
+ if (context != NULL) {
+ ret = xmlAllocOutputBuffer(encoder);
+ if (ret != NULL) {
+ ret->context = context;
+ ret->writecallback = xmlGzfileWrite;
+ ret->closecallback = xmlGzfileClose;
+ }
+ return(ret);
+ }
+ }
+#endif
+ for (i = xmlOutputCallbackNr - 1;i >= 0;i--) {
+ if ((xmlOutputCallbackTable[i].matchcallback != NULL) &&
+ (xmlOutputCallbackTable[i].matchcallback(URI) != 0)) {
+#if defined(LIBXML_HTTP_ENABLED) && defined(HAVE_ZLIB_H)
+ /* Need to pass compression parameter into HTTP open calls */
+ if (xmlOutputCallbackTable[i].matchcallback == xmlIOHTTPMatch)
+ context = xmlIOHTTPOpenW(URI, compression);
+ else
+#endif
+ context = xmlOutputCallbackTable[i].opencallback(URI);
+ if (context != NULL)
+ break;
+ }
+ }
+ }
+
+ if (context == NULL) {
+ return(NULL);
+ }
+
+ /*
+ * Allocate the Output buffer front-end.
+ */
+ ret = xmlAllocOutputBuffer(encoder);
+ if (ret != NULL) {
+ ret->context = context;
+ ret->writecallback = xmlOutputCallbackTable[i].writecallback;
+ ret->closecallback = xmlOutputCallbackTable[i].closecallback;
+ }
+ return(ret);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlParserInputBufferCreateFile:
+ * @file: a FILE*
+ * @enc: the charset encoding if known
+ *
+ * Create a buffered parser input for the progressive parsing of a FILE *
+ * buffered C I/O
+ *
+ * Returns the new parser input or NULL
+ */
+xmlParserInputBufferPtr
+xmlParserInputBufferCreateFile(FILE *file, xmlCharEncoding enc) {
+ xmlParserInputBufferPtr ret;
+
+ if (xmlInputCallbackInitialized == 0)
+ xmlRegisterDefaultInputCallbacks();
+
+ if (file == NULL) return(NULL);
+
+ ret = xmlAllocParserInputBuffer(enc);
+ if (ret != NULL) {
+ ret->context = file;
+ ret->readcallback = xmlFileRead;
+ ret->closecallback = xmlFileFlush;
+ }
+
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlOutputBufferCreateFile:
+ * @file: a FILE*
+ * @encoder: the encoding converter or NULL
+ *
+ * Create a buffered output for the progressive saving to a FILE *
+ * buffered C I/O
+ *
+ * Returns the new parser output or NULL
+ */
+xmlOutputBufferPtr
+xmlOutputBufferCreateFile(FILE *file, xmlCharEncodingHandlerPtr encoder) {
+ xmlOutputBufferPtr ret;
+
+ if (xmlOutputCallbackInitialized == 0)
+ xmlRegisterDefaultOutputCallbacks();
+
+ if (file == NULL) return(NULL);
+
+ ret = xmlAllocOutputBuffer(encoder);
+ if (ret != NULL) {
+ ret->context = file;
+ ret->writecallback = xmlFileWrite;
+ ret->closecallback = xmlFileFlush;
+ }
+
+ return(ret);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlParserInputBufferCreateFd:
+ * @fd: a file descriptor number
+ * @enc: the charset encoding if known
+ *
+ * Create a buffered parser input for the progressive parsing for the input
+ * from a file descriptor
+ *
+ * Returns the new parser input or NULL
+ */
+xmlParserInputBufferPtr
+xmlParserInputBufferCreateFd(int fd, xmlCharEncoding enc) {
+ xmlParserInputBufferPtr ret;
+
+ if (fd < 0) return(NULL);
+
+ ret = xmlAllocParserInputBuffer(enc);
+ if (ret != NULL) {
+ ret->context = (void *) (long) fd;
+ ret->readcallback = xmlFdRead;
+ ret->closecallback = xmlFdClose;
+ }
+
+ return(ret);
+}
+
+/**
+ * xmlParserInputBufferCreateMem:
+ * @mem: the memory input
+ * @size: the length of the memory block
+ * @enc: the charset encoding if known
+ *
+ * Create a buffered parser input for the progressive parsing for the input
+ * from a memory area.
+ *
+ * Returns the new parser input or NULL
+ */
+xmlParserInputBufferPtr
+xmlParserInputBufferCreateMem(const char *mem, int size, xmlCharEncoding enc) {
+ xmlParserInputBufferPtr ret;
+
+ if (size <= 0) return(NULL);
+ if (mem == NULL) return(NULL);
+
+ ret = xmlAllocParserInputBuffer(enc);
+ if (ret != NULL) {
+ ret->context = (void *) mem;
+ ret->readcallback = (xmlInputReadCallback) xmlNop;
+ ret->closecallback = NULL;
+ xmlBufferAdd(ret->buffer, (const xmlChar *) mem, size);
+ }
+
+ return(ret);
+}
+
+/**
+ * xmlParserInputBufferCreateStatic:
+ * @mem: the memory input
+ * @size: the length of the memory block
+ * @enc: the charset encoding if known
+ *
+ * Create a buffered parser input for the progressive parsing for the input
+ * from an immutable memory area. This will not copy the memory area to
+ * the buffer, but the memory is expected to be available until the end of
+ * the parsing, this is useful for example when using mmap'ed file.
+ *
+ * Returns the new parser input or NULL
+ */
+xmlParserInputBufferPtr
+xmlParserInputBufferCreateStatic(const char *mem, int size,
+ xmlCharEncoding enc) {
+ xmlParserInputBufferPtr ret;
+
+ if (size <= 0) return(NULL);
+ if (mem == NULL) return(NULL);
+
+ ret = (xmlParserInputBufferPtr) xmlMalloc(sizeof(xmlParserInputBuffer));
+ if (ret == NULL) {
+ xmlIOErrMemory("creating input buffer");
+ return(NULL);
+ }
+ memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer));
+ ret->buffer = xmlBufferCreateStatic((void *)mem, (size_t) size);
+ if (ret->buffer == NULL) {
+ xmlFree(ret);
+ return(NULL);
+ }
+ ret->encoder = xmlGetCharEncodingHandler(enc);
+ if (ret->encoder != NULL)
+ ret->raw = xmlBufferCreateSize(2 * xmlDefaultBufferSize);
+ else
+ ret->raw = NULL;
+ ret->compressed = -1;
+ ret->context = (void *) mem;
+ ret->readcallback = NULL;
+ ret->closecallback = NULL;
+
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlOutputBufferCreateFd:
+ * @fd: a file descriptor number
+ * @encoder: the encoding converter or NULL
+ *
+ * Create a buffered output for the progressive saving
+ * to a file descriptor
+ *
+ * Returns the new parser output or NULL
+ */
+xmlOutputBufferPtr
+xmlOutputBufferCreateFd(int fd, xmlCharEncodingHandlerPtr encoder) {
+ xmlOutputBufferPtr ret;
+
+ if (fd < 0) return(NULL);
+
+ ret = xmlAllocOutputBuffer(encoder);
+ if (ret != NULL) {
+ ret->context = (void *) (long) fd;
+ ret->writecallback = xmlFdWrite;
+ ret->closecallback = NULL;
+ }
+
+ return(ret);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlParserInputBufferCreateIO:
+ * @ioread: an I/O read function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @enc: the charset encoding if known
+ *
+ * Create a buffered parser input for the progressive parsing for the input
+ * from an I/O handler
+ *
+ * Returns the new parser input or NULL
+ */
+xmlParserInputBufferPtr
+xmlParserInputBufferCreateIO(xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose, void *ioctx, xmlCharEncoding enc) {
+ xmlParserInputBufferPtr ret;
+
+ if (ioread == NULL) return(NULL);
+
+ ret = xmlAllocParserInputBuffer(enc);
+ if (ret != NULL) {
+ ret->context = (void *) ioctx;
+ ret->readcallback = ioread;
+ ret->closecallback = ioclose;
+ }
+
+ return(ret);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlOutputBufferCreateIO:
+ * @iowrite: an I/O write function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @encoder: the charset encoding if known
+ *
+ * Create a buffered output for the progressive saving
+ * to an I/O handler
+ *
+ * Returns the new parser output or NULL
+ */
+xmlOutputBufferPtr
+xmlOutputBufferCreateIO(xmlOutputWriteCallback iowrite,
+ xmlOutputCloseCallback ioclose, void *ioctx,
+ xmlCharEncodingHandlerPtr encoder) {
+ xmlOutputBufferPtr ret;
+
+ if (iowrite == NULL) return(NULL);
+
+ ret = xmlAllocOutputBuffer(encoder);
+ if (ret != NULL) {
+ ret->context = (void *) ioctx;
+ ret->writecallback = iowrite;
+ ret->closecallback = ioclose;
+ }
+
+ return(ret);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlParserInputBufferPush:
+ * @in: a buffered parser input
+ * @len: the size in bytes of the array.
+ * @buf: an char array
+ *
+ * Push the content of the arry in the input buffer
+ * This routine handle the I18N transcoding to internal UTF-8
+ * This is used when operating the parser in progressive (push) mode.
+ *
+ * Returns the number of chars read and stored in the buffer, or -1
+ * in case of error.
+ */
+int
+xmlParserInputBufferPush(xmlParserInputBufferPtr in,
+ int len, const char *buf) {
+ int nbchars = 0;
+
+ if (len < 0) return(0);
+ if ((in == NULL) || (in->error)) return(-1);
+ if (in->encoder != NULL) {
+ unsigned int use;
+
+ /*
+ * Store the data in the incoming raw buffer
+ */
+ if (in->raw == NULL) {
+ in->raw = xmlBufferCreate();
+ }
+ xmlBufferAdd(in->raw, (const xmlChar *) buf, len);
+
+ /*
+ * convert as much as possible to the parser reading buffer.
+ */
+ use = in->raw->use;
+ nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw);
+ if (nbchars < 0) {
+ xmlIOErr(XML_IO_ENCODER, NULL);
+ in->error = XML_IO_ENCODER;
+ return(-1);
+ }
+ in->rawconsumed += (use - in->raw->use);
+ } else {
+ nbchars = len;
+ xmlBufferAdd(in->buffer, (xmlChar *) buf, nbchars);
+ }
+#ifdef DEBUG_INPUT
+ xmlGenericError(xmlGenericErrorContext,
+ "I/O: pushed %d chars, buffer %d/%d\n",
+ nbchars, in->buffer->use, in->buffer->size);
+#endif
+ return(nbchars);
+}
+
+/**
+ * endOfInput:
+ *
+ * When reading from an Input channel indicated end of file or error
+ * don't reread from it again.
+ */
+static int
+endOfInput (void * context ATTRIBUTE_UNUSED,
+ char * buffer ATTRIBUTE_UNUSED,
+ int len ATTRIBUTE_UNUSED) {
+ return(0);
+}
+
+/**
+ * xmlParserInputBufferGrow:
+ * @in: a buffered parser input
+ * @len: indicative value of the amount of chars to read
+ *
+ * Grow up the content of the input buffer, the old data are preserved
+ * This routine handle the I18N transcoding to internal UTF-8
+ * This routine is used when operating the parser in normal (pull) mode
+ *
+ * TODO: one should be able to remove one extra copy by copying directly
+ * onto in->buffer or in->raw
+ *
+ * Returns the number of chars read and stored in the buffer, or -1
+ * in case of error.
+ */
+int
+xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) {
+ char *buffer = NULL;
+ int res = 0;
+ int nbchars = 0;
+ int buffree;
+ unsigned int needSize;
+
+ if ((in == NULL) || (in->error)) return(-1);
+ if ((len <= MINLEN) && (len != 4))
+ len = MINLEN;
+
+ buffree = in->buffer->size - in->buffer->use;
+ if (buffree <= 0) {
+ xmlIOErr(XML_IO_BUFFER_FULL, NULL);
+ in->error = XML_IO_BUFFER_FULL;
+ return(0);
+ }
+
+ needSize = in->buffer->use + len + 1;
+ if (needSize > in->buffer->size){
+ if (!xmlBufferResize(in->buffer, needSize)){
+ xmlIOErrMemory("growing input buffer");
+ in->error = XML_ERR_NO_MEMORY;
+ return(0);
+ }
+ }
+ buffer = (char *)&in->buffer->content[in->buffer->use];
+
+ /*
+ * Call the read method for this I/O type.
+ */
+ if (in->readcallback != NULL) {
+ res = in->readcallback(in->context, &buffer[0], len);
+ if (res <= 0)
+ in->readcallback = endOfInput;
+ } else {
+ xmlIOErr(XML_IO_NO_INPUT, NULL);
+ in->error = XML_IO_NO_INPUT;
+ return(-1);
+ }
+ if (res < 0) {
+ return(-1);
+ }
+ len = res;
+ if (in->encoder != NULL) {
+ unsigned int use;
+
+ /*
+ * Store the data in the incoming raw buffer
+ */
+ if (in->raw == NULL) {
+ in->raw = xmlBufferCreate();
+ }
+ xmlBufferAdd(in->raw, (const xmlChar *) buffer, len);
+
+ /*
+ * convert as much as possible to the parser reading buffer.
+ */
+ use = in->raw->use;
+ nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw);
+ if (nbchars < 0) {
+ xmlIOErr(XML_IO_ENCODER, NULL);
+ in->error = XML_IO_ENCODER;
+ return(-1);
+ }
+ in->rawconsumed += (use - in->raw->use);
+ } else {
+ nbchars = len;
+ in->buffer->use += nbchars;
+ buffer[nbchars] = 0;
+ }
+#ifdef DEBUG_INPUT
+ xmlGenericError(xmlGenericErrorContext,
+ "I/O: read %d chars, buffer %d/%d\n",
+ nbchars, in->buffer->use, in->buffer->size);
+#endif
+ return(nbchars);
+}
+
+/**
+ * xmlParserInputBufferRead:
+ * @in: a buffered parser input
+ * @len: indicative value of the amount of chars to read
+ *
+ * Refresh the content of the input buffer, the old data are considered
+ * consumed
+ * This routine handle the I18N transcoding to internal UTF-8
+ *
+ * Returns the number of chars read and stored in the buffer, or -1
+ * in case of error.
+ */
+int
+xmlParserInputBufferRead(xmlParserInputBufferPtr in, int len) {
+ if ((in == NULL) || (in->error)) return(-1);
+ if (in->readcallback != NULL)
+ return(xmlParserInputBufferGrow(in, len));
+ else if ((in->buffer != NULL) &&
+ (in->buffer->alloc == XML_BUFFER_ALLOC_IMMUTABLE))
+ return(0);
+ else
+ return(-1);
+}
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlOutputBufferWrite:
+ * @out: a buffered parser output
+ * @len: the size in bytes of the array.
+ * @buf: an char array
+ *
+ * Write the content of the array in the output I/O buffer
+ * This routine handle the I18N transcoding from internal UTF-8
+ * The buffer is lossless, i.e. will store in case of partial
+ * or delayed writes.
+ *
+ * Returns the number of chars immediately written, or -1
+ * in case of error.
+ */
+int
+xmlOutputBufferWrite(xmlOutputBufferPtr out, int len, const char *buf) {
+ int nbchars = 0; /* number of chars to output to I/O */
+ int ret; /* return from function call */
+ int written = 0; /* number of char written to I/O so far */
+ int chunk; /* number of byte curreent processed from buf */
+
+ if ((out == NULL) || (out->error)) return(-1);
+ if (len < 0) return(0);
+ if (out->error) return(-1);
+
+ do {
+ chunk = len;
+ if (chunk > 4 * MINLEN)
+ chunk = 4 * MINLEN;
+
+ /*
+ * first handle encoding stuff.
+ */
+ if (out->encoder != NULL) {
+ /*
+ * Store the data in the incoming raw buffer
+ */
+ if (out->conv == NULL) {
+ out->conv = xmlBufferCreate();
+ }
+ xmlBufferAdd(out->buffer, (const xmlChar *) buf, chunk);
+
+ if ((out->buffer->use < MINLEN) && (chunk == len))
+ goto done;
+
+ /*
+ * convert as much as possible to the parser reading buffer.
+ */
+ ret = xmlCharEncOutFunc(out->encoder, out->conv, out->buffer);
+ if ((ret < 0) && (ret != -3)) {
+ xmlIOErr(XML_IO_ENCODER, NULL);
+ out->error = XML_IO_ENCODER;
+ return(-1);
+ }
+ nbchars = out->conv->use;
+ } else {
+ xmlBufferAdd(out->buffer, (const xmlChar *) buf, chunk);
+ nbchars = out->buffer->use;
+ }
+ buf += chunk;
+ len -= chunk;
+
+ if ((nbchars < MINLEN) && (len <= 0))
+ goto done;
+
+ if (out->writecallback) {
+ /*
+ * second write the stuff to the I/O channel
+ */
+ if (out->encoder != NULL) {
+ ret = out->writecallback(out->context,
+ (const char *)out->conv->content, nbchars);
+ if (ret >= 0)
+ xmlBufferShrink(out->conv, ret);
+ } else {
+ ret = out->writecallback(out->context,
+ (const char *)out->buffer->content, nbchars);
+ if (ret >= 0)
+ xmlBufferShrink(out->buffer, ret);
+ }
+ if (ret < 0) {
+ xmlIOErr(XML_IO_WRITE, NULL);
+ out->error = XML_IO_WRITE;
+ return(ret);
+ }
+ out->written += ret;
+ }
+ written += nbchars;
+ } while (len > 0);
+
+done:
+#ifdef DEBUG_INPUT
+ xmlGenericError(xmlGenericErrorContext,
+ "I/O: wrote %d chars\n", written);
+#endif
+ return(written);
+}
+
+/**
+ * xmlOutputBufferWriteString:
+ * @out: a buffered parser output
+ * @str: a zero terminated C string
+ *
+ * Write the content of the string in the output I/O buffer
+ * This routine handle the I18N transcoding from internal UTF-8
+ * The buffer is lossless, i.e. will store in case of partial
+ * or delayed writes.
+ *
+ * Returns the number of chars immediately written, or -1
+ * in case of error.
+ */
+int
+xmlOutputBufferWriteString(xmlOutputBufferPtr out, const char *str) {
+ int len;
+
+ if ((out == NULL) || (out->error)) return(-1);
+ if (str == NULL)
+ return(-1);
+ len = strlen(str);
+
+ if (len > 0)
+ return(xmlOutputBufferWrite(out, len, str));
+ return(len);
+}
+
+/**
+ * xmlOutputBufferFlush:
+ * @out: a buffered output
+ *
+ * flushes the output I/O channel
+ *
+ * Returns the number of byte written or -1 in case of error.
+ */
+int
+xmlOutputBufferFlush(xmlOutputBufferPtr out) {
+ int nbchars = 0, ret = 0;
+
+ if ((out == NULL) || (out->error)) return(-1);
+ /*
+ * first handle encoding stuff.
+ */
+ if ((out->conv != NULL) && (out->encoder != NULL)) {
+ /*
+ * convert as much as possible to the parser reading buffer.
+ */
+ nbchars = xmlCharEncOutFunc(out->encoder, out->conv, out->buffer);
+ if (nbchars < 0) {
+ xmlIOErr(XML_IO_ENCODER, NULL);
+ out->error = XML_IO_ENCODER;
+ return(-1);
+ }
+ }
+
+ /*
+ * second flush the stuff to the I/O channel
+ */
+ if ((out->conv != NULL) && (out->encoder != NULL) &&
+ (out->writecallback != NULL)) {
+ ret = out->writecallback(out->context,
+ (const char *)out->conv->content, out->conv->use);
+ if (ret >= 0)
+ xmlBufferShrink(out->conv, ret);
+ } else if (out->writecallback != NULL) {
+ ret = out->writecallback(out->context,
+ (const char *)out->buffer->content, out->buffer->use);
+ if (ret >= 0)
+ xmlBufferShrink(out->buffer, ret);
+ }
+ if (ret < 0) {
+ xmlIOErr(XML_IO_FLUSH, NULL);
+ out->error = XML_IO_FLUSH;
+ return(ret);
+ }
+ out->written += ret;
+
+#ifdef DEBUG_INPUT
+ xmlGenericError(xmlGenericErrorContext,
+ "I/O: flushed %d chars\n", ret);
+#endif
+ return(ret);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/**
+ * xmlParserGetDirectory:
+ * @filename: the path to a file
+ *
+ * lookup the directory for that file
+ *
+ * Returns a new allocated string containing the directory, or NULL.
+ */
+char *
+xmlParserGetDirectory(const char *filename) {
+ char *ret = NULL;
+ char dir[1024];
+ char *cur;
+ char sep = '/';
+
+#ifdef _WIN32_WCE /* easy way by now ... wince does not have dirs! */
+ return NULL;
+#endif
+
+ if (xmlInputCallbackInitialized == 0)
+ xmlRegisterDefaultInputCallbacks();
+
+ if (filename == NULL) return(NULL);
+#if defined(WIN32) && !defined(__CYGWIN__)
+ sep = '\\';
+#endif
+
+ strncpy(dir, filename, 1023);
+ dir[1023] = 0;
+ cur = &dir[strlen(dir)];
+ while (cur > dir) {
+ if (*cur == sep) break;
+ cur --;
+ }
+ if (*cur == sep) {
+ if (cur == dir) dir[1] = 0;
+ else *cur = 0;
+ ret = xmlMemStrdup(dir);
+ } else {
+ if (getcwd(dir, 1024) != NULL) {
+ dir[1023] = 0;
+ ret = xmlMemStrdup(dir);
+ }
+ }
+ return(ret);
+}
+
+/****************************************************************
+ * *
+ * External entities loading *
+ * *
+ ****************************************************************/
+
+/**
+ * xmlCheckHTTPInput:
+ * @ctxt: an XML parser context
+ * @ret: an XML parser input
+ *
+ * Check an input in case it was created from an HTTP stream, in that
+ * case it will handle encoding and update of the base URL in case of
+ * redirection. It also checks for HTTP errors in which case the input
+ * is cleanly freed up and an appropriate error is raised in context
+ *
+ * Returns the input or NULL in case of HTTP error.
+ */
+xmlParserInputPtr
+xmlCheckHTTPInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr ret) {
+#ifdef LIBXML_HTTP_ENABLED
+ if ((ret != NULL) && (ret->buf != NULL) &&
+ (ret->buf->readcallback == xmlIOHTTPRead) &&
+ (ret->buf->context != NULL)) {
+ const char *encoding;
+ const char *redir;
+ const char *mime;
+ int code;
+
+ code = xmlNanoHTTPReturnCode(ret->buf->context);
+ if (code >= 400) {
+ /* fatal error */
+ if (ret->filename != NULL)
+ __xmlLoaderErr(ctxt, "failed to load HTTP resource \"%s\"\n",
+ (const char *) ret->filename);
+ else
+ __xmlLoaderErr(ctxt, "failed to load HTTP resource\n", NULL);
+ xmlFreeInputStream(ret);
+ ret = NULL;
+ } else {
+
+ mime = xmlNanoHTTPMimeType(ret->buf->context);
+ if ((xmlStrstr(BAD_CAST mime, BAD_CAST "/xml")) ||
+ (xmlStrstr(BAD_CAST mime, BAD_CAST "+xml"))) {
+ encoding = xmlNanoHTTPEncoding(ret->buf->context);
+ if (encoding != NULL) {
+ xmlCharEncodingHandlerPtr handler;
+
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler != NULL) {
+ xmlSwitchInputEncoding(ctxt, ret, handler);
+ } else {
+ __xmlErrEncoding(ctxt, XML_ERR_UNKNOWN_ENCODING,
+ "Unknown encoding %s",
+ BAD_CAST encoding, NULL);
+ }
+ if (ret->encoding == NULL)
+ ret->encoding = xmlStrdup(BAD_CAST encoding);
+ }
+#if 0
+ } else if (xmlStrstr(BAD_CAST mime, BAD_CAST "html")) {
+#endif
+ }
+ redir = xmlNanoHTTPRedir(ret->buf->context);
+ if (redir != NULL) {
+ if (ret->filename != NULL)
+ xmlFree((xmlChar *) ret->filename);
+ if (ret->directory != NULL) {
+ xmlFree((xmlChar *) ret->directory);
+ ret->directory = NULL;
+ }
+ ret->filename =
+ (char *) xmlStrdup((const xmlChar *) redir);
+ }
+ }
+ }
+#endif
+ return(ret);
+}
+
+static int xmlSysIDExists(const char *URL) {
+#ifdef HAVE_STAT
+ int ret;
+ struct stat info;
+ const char *path;
+
+ if (URL == NULL)
+ return(0);
+
+ if (!xmlStrncasecmp(BAD_CAST URL, BAD_CAST "file://localhost/", 17))
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &URL[17];
+#else
+ path = &URL[16];
+#endif
+ else if (!xmlStrncasecmp(BAD_CAST URL, BAD_CAST "file:///", 8)) {
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &URL[8];
+#else
+ path = &URL[7];
+#endif
+ } else
+ path = URL;
+ ret = stat(path, &info);
+ if (ret == 0)
+ return(1);
+#endif
+ return(0);
+}
+
+/**
+ * xmlDefaultExternalEntityLoader:
+ * @URL: the URL for the entity to load
+ * @ID: the System ID for the entity to load
+ * @ctxt: the context in which the entity is called or NULL
+ *
+ * By default we don't load external entitites, yet.
+ *
+ * Returns a new allocated xmlParserInputPtr, or NULL.
+ */
+static xmlParserInputPtr
+xmlDefaultExternalEntityLoader(const char *URL, const char *ID,
+ xmlParserCtxtPtr ctxt)
+{
+ xmlParserInputPtr ret = NULL;
+ xmlChar *resource = NULL;
+
+#ifdef LIBXML_CATALOG_ENABLED
+ xmlCatalogAllow pref;
+#endif
+
+#ifdef DEBUG_EXTERNAL_ENTITIES
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlDefaultExternalEntityLoader(%s, xxx)\n", URL);
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+ if ((ctxt != NULL) && (ctxt->options & XML_PARSE_NONET)) {
+ int options = ctxt->options;
+
+ ctxt->options -= XML_PARSE_NONET;
+ ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
+ ctxt->options = options;
+ return(ret);
+ }
+
+ /*
+ * If the resource doesn't exists as a file,
+ * try to load it from the resource pointed in the catalogs
+ */
+ pref = xmlCatalogGetDefaults();
+
+ if ((pref != XML_CATA_ALLOW_NONE) && (!xmlSysIDExists(URL))) {
+ /*
+ * Do a local lookup
+ */
+ if ((ctxt->catalogs != NULL) &&
+ ((pref == XML_CATA_ALLOW_ALL) ||
+ (pref == XML_CATA_ALLOW_DOCUMENT))) {
+ resource = xmlCatalogLocalResolve(ctxt->catalogs,
+ (const xmlChar *) ID,
+ (const xmlChar *) URL);
+ }
+ /*
+ * Try a global lookup
+ */
+ if ((resource == NULL) &&
+ ((pref == XML_CATA_ALLOW_ALL) ||
+ (pref == XML_CATA_ALLOW_GLOBAL))) {
+ resource = xmlCatalogResolve((const xmlChar *) ID,
+ (const xmlChar *) URL);
+ }
+ if ((resource == NULL) && (URL != NULL))
+ resource = xmlStrdup((const xmlChar *) URL);
+
+ /*
+ * TODO: do an URI lookup on the reference
+ */
+ if ((resource != NULL)
+ && (!xmlSysIDExists((const char *) resource))) {
+ xmlChar *tmp = NULL;
+
+ if ((ctxt->catalogs != NULL) &&
+ ((pref == XML_CATA_ALLOW_ALL) ||
+ (pref == XML_CATA_ALLOW_DOCUMENT))) {
+ tmp = xmlCatalogLocalResolveURI(ctxt->catalogs, resource);
+ }
+ if ((tmp == NULL) &&
+ ((pref == XML_CATA_ALLOW_ALL) ||
+ (pref == XML_CATA_ALLOW_GLOBAL))) {
+ tmp = xmlCatalogResolveURI(resource);
+ }
+
+ if (tmp != NULL) {
+ xmlFree(resource);
+ resource = tmp;
+ }
+ }
+ }
+#endif
+
+ if (resource == NULL)
+ resource = (xmlChar *) URL;
+
+ if (resource == NULL) {
+ if (ID == NULL)
+ ID = "NULL";
+ __xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n", ID);
+ return (NULL);
+ }
+ ret = xmlNewInputFromFile(ctxt, (const char *) resource);
+ if ((resource != NULL) && (resource != (xmlChar *) URL))
+ xmlFree(resource);
+ return (ret);
+}
+
+static xmlExternalEntityLoader xmlCurrentExternalEntityLoader =
+ xmlDefaultExternalEntityLoader;
+
+/**
+ * xmlSetExternalEntityLoader:
+ * @f: the new entity resolver function
+ *
+ * Changes the defaultexternal entity resolver function for the application
+ */
+void
+xmlSetExternalEntityLoader(xmlExternalEntityLoader f) {
+ xmlCurrentExternalEntityLoader = f;
+}
+
+/**
+ * xmlGetExternalEntityLoader:
+ *
+ * Get the default external entity resolver function for the application
+ *
+ * Returns the xmlExternalEntityLoader function pointer
+ */
+xmlExternalEntityLoader
+xmlGetExternalEntityLoader(void) {
+ return(xmlCurrentExternalEntityLoader);
+}
+
+/**
+ * xmlLoadExternalEntity:
+ * @URL: the URL for the entity to load
+ * @ID: the Public ID for the entity to load
+ * @ctxt: the context in which the entity is called or NULL
+ *
+ * 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
+ */
+xmlParserInputPtr
+xmlLoadExternalEntity(const char *URL, const char *ID,
+ xmlParserCtxtPtr ctxt) {
+ if ((URL != NULL) && (xmlSysIDExists(URL) == 0)) {
+ char *canonicFilename;
+ xmlParserInputPtr ret;
+
+ canonicFilename = (char *) xmlCanonicPath((const xmlChar *) URL);
+ if (canonicFilename == NULL) {
+ xmlIOErrMemory("building canonical path\n");
+ return(NULL);
+ }
+
+ ret = xmlCurrentExternalEntityLoader(canonicFilename, ID, ctxt);
+ xmlFree(canonicFilename);
+ return(ret);
+ }
+ return(xmlCurrentExternalEntityLoader(URL, ID, ctxt));
+}
+
+/************************************************************************
+ * *
+ * Disabling Network access *
+ * *
+ ************************************************************************/
+
+#ifdef LIBXML_CATALOG_ENABLED
+static int
+xmlNoNetExists(const char *URL)
+{
+#ifdef HAVE_STAT
+ int ret;
+ struct stat info;
+ const char *path;
+
+ if (URL == NULL)
+ return (0);
+
+ if (!xmlStrncasecmp(BAD_CAST URL, BAD_CAST "file://localhost/", 17))
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &URL[17];
+#else
+ path = &URL[16];
+#endif
+ else if (!xmlStrncasecmp(BAD_CAST URL, BAD_CAST "file:///", 8)) {
+#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
+ path = &URL[8];
+#else
+ path = &URL[7];
+#endif
+ } else
+ path = URL;
+ ret = stat(path, &info);
+ if (ret == 0)
+ return (1);
+#endif
+ return (0);
+}
+#endif
+
+/**
+ * xmlNoNetExternalEntityLoader:
+ * @URL: the URL for the entity to load
+ * @ID: the System ID for the entity to load
+ * @ctxt: the context in which the entity is called or NULL
+ *
+ * A specific entity loader disabling network accesses, though still
+ * allowing local catalog accesses for resolution.
+ *
+ * Returns a new allocated xmlParserInputPtr, or NULL.
+ */
+xmlParserInputPtr
+xmlNoNetExternalEntityLoader(const char *URL, const char *ID,
+ xmlParserCtxtPtr ctxt) {
+ xmlParserInputPtr input = NULL;
+ xmlChar *resource = NULL;
+
+#ifdef LIBXML_CATALOG_ENABLED
+ xmlCatalogAllow pref;
+
+ /*
+ * If the resource doesn't exists as a file,
+ * try to load it from the resource pointed in the catalogs
+ */
+ pref = xmlCatalogGetDefaults();
+
+ if ((pref != XML_CATA_ALLOW_NONE) && (!xmlNoNetExists(URL))) {
+ /*
+ * Do a local lookup
+ */
+ if ((ctxt->catalogs != NULL) &&
+ ((pref == XML_CATA_ALLOW_ALL) ||
+ (pref == XML_CATA_ALLOW_DOCUMENT))) {
+ resource = xmlCatalogLocalResolve(ctxt->catalogs,
+ (const xmlChar *)ID,
+ (const xmlChar *)URL);
+ }
+ /*
+ * Try a global lookup
+ */
+ if ((resource == NULL) &&
+ ((pref == XML_CATA_ALLOW_ALL) ||
+ (pref == XML_CATA_ALLOW_GLOBAL))) {
+ resource = xmlCatalogResolve((const xmlChar *)ID,
+ (const xmlChar *)URL);
+ }
+ if ((resource == NULL) && (URL != NULL))
+ resource = xmlStrdup((const xmlChar *) URL);
+
+ /*
+ * TODO: do an URI lookup on the reference
+ */
+ if ((resource != NULL) && (!xmlNoNetExists((const char *)resource))) {
+ xmlChar *tmp = NULL;
+
+ if ((ctxt->catalogs != NULL) &&
+ ((pref == XML_CATA_ALLOW_ALL) ||
+ (pref == XML_CATA_ALLOW_DOCUMENT))) {
+ tmp = xmlCatalogLocalResolveURI(ctxt->catalogs, resource);
+ }
+ if ((tmp == NULL) &&
+ ((pref == XML_CATA_ALLOW_ALL) ||
+ (pref == XML_CATA_ALLOW_GLOBAL))) {
+ tmp = xmlCatalogResolveURI(resource);
+ }
+
+ if (tmp != NULL) {
+ xmlFree(resource);
+ resource = tmp;
+ }
+ }
+ }
+#endif
+ if (resource == NULL)
+ resource = (xmlChar *) URL;
+
+ if (resource != NULL) {
+ if ((!xmlStrncasecmp(BAD_CAST resource, BAD_CAST "ftp://", 6)) ||
+ (!xmlStrncasecmp(BAD_CAST resource, BAD_CAST "http://", 7))) {
+ xmlIOErr(XML_IO_NETWORK_ATTEMPT, (const char *) resource);
+ if (resource != (xmlChar *) URL)
+ xmlFree(resource);
+ return(NULL);
+ }
+ }
+ input = xmlDefaultExternalEntityLoader((const char *) resource, ID, ctxt);
+ if (resource != (xmlChar *) URL)
+ xmlFree(resource);
+ return(input);
+}
+
diff --git a/xmlcatalog.c b/xmlcatalog.c
new file mode 100644
index 0000000..5fcb417
--- /dev/null
+++ b/xmlcatalog.c
@@ -0,0 +1,594 @@
+/*
+ * xmlcatalog.c : a small utility program to handle XML catalogs
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#include "libxml.h"
+
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_LIBREADLINE
+#include <readline/readline.h>
+#ifdef HAVE_LIBHISTORY
+#include <readline/history.h>
+#endif
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/uri.h>
+#include <libxml/catalog.h>
+#include <libxml/parser.h>
+#include <libxml/globals.h>
+
+#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+static int shell = 0;
+static int sgml = 0;
+static int noout = 0;
+static int create = 0;
+static int add = 0;
+static int del = 0;
+static int convert = 0;
+static int verbose = 0;
+static char *filename = NULL;
+
+
+#ifndef XML_SGML_DEFAULT_CATALOG
+#define XML_SGML_DEFAULT_CATALOG "/etc/sgml/catalog"
+#endif
+
+/************************************************************************
+ * *
+ * Shell Interface *
+ * *
+ ************************************************************************/
+/**
+ * xmlShellReadline:
+ * @prompt: the prompt value
+ *
+ * Read a string
+ *
+ * Returns a pointer to it or NULL on EOF the caller is expected to
+ * free the returned string.
+ */
+static char *
+xmlShellReadline(const char *prompt) {
+#ifdef HAVE_LIBREADLINE
+ char *line_read;
+
+ /* Get a line from the user. */
+ line_read = readline (prompt);
+
+ /* If the line has any text in it, save it on the history. */
+ if (line_read && *line_read)
+ add_history (line_read);
+
+ return (line_read);
+#else
+ char line_read[501];
+ char *ret;
+ int len;
+
+ if (prompt != NULL)
+ fprintf(stdout, "%s", prompt);
+ if (!fgets(line_read, 500, stdin))
+ return(NULL);
+ line_read[500] = 0;
+ len = strlen(line_read);
+ ret = (char *) malloc(len + 1);
+ if (ret != NULL) {
+ memcpy (ret, line_read, len + 1);
+ }
+ return(ret);
+#endif
+}
+
+static void usershell(void) {
+ char *cmdline = NULL, *cur;
+ int nbargs;
+ char command[100];
+ char arg[400];
+ char *argv[20];
+ int i, ret;
+ xmlChar *ans;
+
+ while (1) {
+ cmdline = xmlShellReadline("> ");
+ if (cmdline == NULL)
+ return;
+
+ /*
+ * Parse the command itself
+ */
+ cur = cmdline;
+ nbargs = 0;
+ while ((*cur == ' ') || (*cur == '\t')) cur++;
+ i = 0;
+ while ((*cur != ' ') && (*cur != '\t') &&
+ (*cur != '\n') && (*cur != '\r')) {
+ if (*cur == 0)
+ break;
+ command[i++] = *cur++;
+ }
+ command[i] = 0;
+ if (i == 0) continue;
+ nbargs++;
+
+ /*
+ * Parse the argument string
+ */
+ memset(arg, 0, sizeof(arg));
+ while ((*cur == ' ') || (*cur == '\t')) cur++;
+ i = 0;
+ while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) {
+ if (*cur == 0)
+ break;
+ arg[i++] = *cur++;
+ }
+ arg[i] = 0;
+ if (i != 0)
+ nbargs++;
+
+ /*
+ * Parse the arguments
+ */
+ i = 0;
+ nbargs = 0;
+ cur = arg;
+ memset(argv, 0, sizeof(argv));
+ while (*cur != 0) {
+ while ((*cur == ' ') || (*cur == '\t')) cur++;
+ if (*cur == '\'') {
+ cur++;
+ argv[i] = cur;
+ while ((*cur != 0) && (*cur != '\'')) cur++;
+ if (*cur == '\'') {
+ *cur = 0;
+ nbargs++;
+ i++;
+ cur++;
+ }
+ } else if (*cur == '"') {
+ cur++;
+ argv[i] = cur;
+ while ((*cur != 0) && (*cur != '"')) cur++;
+ if (*cur == '"') {
+ *cur = 0;
+ nbargs++;
+ i++;
+ cur++;
+ }
+ } else {
+ argv[i] = cur;
+ while ((*cur != 0) && (*cur != ' ') && (*cur != '\t'))
+ cur++;
+ *cur = 0;
+ nbargs++;
+ i++;
+ cur++;
+ }
+ }
+
+ /*
+ * start interpreting the command
+ */
+ if (!strcmp(command, "exit"))
+ break;
+ if (!strcmp(command, "quit"))
+ break;
+ if (!strcmp(command, "bye"))
+ break;
+ if (!strcmp(command, "public")) {
+ if (nbargs != 1) {
+ printf("public requires 1 arguments\n");
+ } else {
+ ans = xmlCatalogResolvePublic((const xmlChar *) argv[0]);
+ if (ans == NULL) {
+ printf("No entry for PUBLIC %s\n", argv[0]);
+ } else {
+ printf("%s\n", (char *) ans);
+ xmlFree(ans);
+ }
+ }
+ } else if (!strcmp(command, "system")) {
+ if (nbargs != 1) {
+ printf("system requires 1 arguments\n");
+ } else {
+ ans = xmlCatalogResolveSystem((const xmlChar *) argv[0]);
+ if (ans == NULL) {
+ printf("No entry for SYSTEM %s\n", argv[0]);
+ } else {
+ printf("%s\n", (char *) ans);
+ xmlFree(ans);
+ }
+ }
+ } else if (!strcmp(command, "add")) {
+ if (sgml) {
+ if ((nbargs != 3) && (nbargs != 2)) {
+ printf("add requires 2 or 3 arguments\n");
+ } else {
+ if (argv[2] == NULL)
+ ret = xmlCatalogAdd(BAD_CAST argv[0], NULL,
+ BAD_CAST argv[1]);
+ else
+ ret = xmlCatalogAdd(BAD_CAST argv[0], BAD_CAST argv[1],
+ BAD_CAST argv[2]);
+ if (ret != 0)
+ printf("add command failed\n");
+ }
+ } else {
+ if ((nbargs != 3) && (nbargs != 2)) {
+ printf("add requires 2 or 3 arguments\n");
+ } else {
+ if (argv[2] == NULL)
+ ret = xmlCatalogAdd(BAD_CAST argv[0], NULL,
+ BAD_CAST argv[1]);
+ else
+ ret = xmlCatalogAdd(BAD_CAST argv[0], BAD_CAST argv[1],
+ BAD_CAST argv[2]);
+ if (ret != 0)
+ printf("add command failed\n");
+ }
+ }
+ } else if (!strcmp(command, "del")) {
+ if (nbargs != 1) {
+ printf("del requires 1\n");
+ } else {
+ ret = xmlCatalogRemove(BAD_CAST argv[0]);
+ if (ret <= 0)
+ printf("del command failed\n");
+
+ }
+ } else if (!strcmp(command, "resolve")) {
+ if (nbargs != 2) {
+ printf("resolve requires 2 arguments\n");
+ } else {
+ ans = xmlCatalogResolve(BAD_CAST argv[0],
+ BAD_CAST argv[1]);
+ if (ans == NULL) {
+ printf("Resolver failed to find an answer\n");
+ } else {
+ printf("%s\n", (char *) ans);
+ xmlFree(ans);
+ }
+ }
+ } else if (!strcmp(command, "dump")) {
+ if (nbargs != 0) {
+ printf("dump has no arguments\n");
+ } else {
+ xmlCatalogDump(stdout);
+ }
+ } else if (!strcmp(command, "debug")) {
+ if (nbargs != 0) {
+ printf("debug has no arguments\n");
+ } else {
+ verbose++;
+ xmlCatalogSetDebug(verbose);
+ }
+ } else if (!strcmp(command, "quiet")) {
+ if (nbargs != 0) {
+ printf("quiet has no arguments\n");
+ } else {
+ if (verbose > 0)
+ verbose--;
+ xmlCatalogSetDebug(verbose);
+ }
+ } else {
+ if (strcmp(command, "help")) {
+ printf("Unrecognized command %s\n", command);
+ }
+ printf("Commands available:\n");
+ printf("\tpublic PublicID: make a PUBLIC identifier lookup\n");
+ printf("\tsystem SystemID: make a SYSTEM identifier lookup\n");
+ printf("\tresolve PublicID SystemID: do a full resolver lookup\n");
+ printf("\tadd 'type' 'orig' 'replace' : add an entry\n");
+ printf("\tdel 'values' : remove values\n");
+ printf("\tdump: print the current catalog state\n");
+ printf("\tdebug: increase the verbosity level\n");
+ printf("\tquiet: decrease the verbosity level\n");
+ printf("\texit: quit the shell\n");
+ }
+ free(cmdline); /* not xmlFree here ! */
+ }
+}
+
+/************************************************************************
+ * *
+ * Main *
+ * *
+ ************************************************************************/
+static void usage(const char *name) {
+ printf("Usage : %s [options] catalogfile entities...\n", name);
+ printf("\tParse the catalog file and query it for the entities\n");
+ printf("\t--sgml : handle SGML Super catalogs for --add and --del\n");
+ printf("\t--shell : run a shell allowing interactive queries\n");
+ printf("\t--create : create a new catalog\n");
+ printf("\t--add 'type' 'orig' 'replace' : add an entry\n");
+ printf("\t--del 'values' : remove values\n");
+ printf("\t--noout: avoid dumping the result on stdout\n");
+ printf("\t used with add or del, it saves the catalog changes\n");
+ printf("\t and with --sgml it also updates the super catalog\n");
+ printf("\t-v --verbose : provide debug informations\n");
+}
+int main(int argc, char **argv) {
+ int i;
+ int ret;
+ int exit_value = 0;
+
+
+ if (argc <= 1) {
+ usage(argv[0]);
+ return(1);
+ }
+
+ LIBXML_TEST_VERSION
+ for (i = 1; i < argc ; i++) {
+ if (!strcmp(argv[i], "-"))
+ break;
+
+ if (argv[i][0] != '-')
+ break;
+ if ((!strcmp(argv[i], "-verbose")) ||
+ (!strcmp(argv[i], "-v")) ||
+ (!strcmp(argv[i], "--verbose"))) {
+ verbose++;
+ xmlCatalogSetDebug(verbose);
+ } else if ((!strcmp(argv[i], "-noout")) ||
+ (!strcmp(argv[i], "--noout"))) {
+ noout = 1;
+ } else if ((!strcmp(argv[i], "-shell")) ||
+ (!strcmp(argv[i], "--shell"))) {
+ shell++;
+ noout = 1;
+ } else if ((!strcmp(argv[i], "-sgml")) ||
+ (!strcmp(argv[i], "--sgml"))) {
+ sgml++;
+ } else if ((!strcmp(argv[i], "-create")) ||
+ (!strcmp(argv[i], "--create"))) {
+ create++;
+ } else if ((!strcmp(argv[i], "-convert")) ||
+ (!strcmp(argv[i], "--convert"))) {
+ convert++;
+ } else if ((!strcmp(argv[i], "-add")) ||
+ (!strcmp(argv[i], "--add"))) {
+ if (sgml)
+ i += 2;
+ else
+ i += 3;
+ add++;
+ } else if ((!strcmp(argv[i], "-del")) ||
+ (!strcmp(argv[i], "--del"))) {
+ i += 1;
+ del++;
+ } else {
+ fprintf(stderr, "Unknown option %s\n", argv[i]);
+ usage(argv[0]);
+ return(1);
+ }
+ }
+
+ for (i = 1; i < argc; i++) {
+ if ((!strcmp(argv[i], "-add")) ||
+ (!strcmp(argv[i], "--add"))) {
+ if (sgml)
+ i += 2;
+ else
+ i += 3;
+ continue;
+ } else if ((!strcmp(argv[i], "-del")) ||
+ (!strcmp(argv[i], "--del"))) {
+ i += 1;
+ continue;
+ } else if (argv[i][0] == '-')
+ continue;
+ filename = argv[i];
+ ret = xmlLoadCatalog(argv[i]);
+ if ((ret < 0) && (create)) {
+ xmlCatalogAdd(BAD_CAST "catalog", BAD_CAST argv[i], NULL);
+ }
+ break;
+ }
+
+ if (convert)
+ ret = xmlCatalogConvert();
+
+ if ((add) || (del)) {
+ for (i = 1; i < argc ; i++) {
+ if (!strcmp(argv[i], "-"))
+ break;
+
+ if (argv[i][0] != '-')
+ continue;
+ if (strcmp(argv[i], "-add") && strcmp(argv[i], "--add") &&
+ strcmp(argv[i], "-del") && strcmp(argv[i], "--del"))
+ continue;
+
+ if (sgml) {
+ /*
+ * Maintenance of SGML catalogs.
+ */
+ xmlCatalogPtr catal = NULL;
+ xmlCatalogPtr super = NULL;
+
+ catal = xmlLoadSGMLSuperCatalog(argv[i + 1]);
+
+ if ((!strcmp(argv[i], "-add")) ||
+ (!strcmp(argv[i], "--add"))) {
+ if (catal == NULL)
+ catal = xmlNewCatalog(1);
+ super = xmlLoadSGMLSuperCatalog(XML_SGML_DEFAULT_CATALOG);
+ if (super == NULL)
+ super = xmlNewCatalog(1);
+
+ xmlACatalogAdd(catal, BAD_CAST "CATALOG",
+ BAD_CAST argv[i + 2], NULL);
+ xmlACatalogAdd(super, BAD_CAST "CATALOG",
+ BAD_CAST argv[i + 1], NULL);
+ } else {
+ if (catal != NULL)
+ ret = xmlACatalogRemove(catal, BAD_CAST argv[i + 2]);
+ else
+ ret = -1;
+ if (ret < 0) {
+ fprintf(stderr, "Failed to remove entry from %s\n",
+ argv[i + 1]);
+ exit_value = 1;
+ }
+ if ((noout) && (catal != NULL) &&
+ (xmlCatalogIsEmpty(catal))) {
+ super = xmlLoadSGMLSuperCatalog(
+ XML_SGML_DEFAULT_CATALOG);
+ if (super != NULL) {
+ ret = xmlACatalogRemove(super,
+ BAD_CAST argv[i + 1]);
+ if (ret < 0) {
+ fprintf(stderr,
+ "Failed to remove entry from %s\n",
+ XML_SGML_DEFAULT_CATALOG);
+ exit_value = 1;
+ }
+ }
+ }
+ }
+ if (noout) {
+ FILE *out;
+
+ if (xmlCatalogIsEmpty(catal)) {
+ remove(argv[i + 1]);
+ } else {
+ out = fopen(argv[i + 1], "w");
+ if (out == NULL) {
+ fprintf(stderr, "could not open %s for saving\n",
+ argv[i + 1]);
+ exit_value = 2;
+ noout = 0;
+ } else {
+ xmlACatalogDump(catal, out);
+ fclose(out);
+ }
+ }
+ if (super != NULL) {
+ if (xmlCatalogIsEmpty(super)) {
+ remove(XML_SGML_DEFAULT_CATALOG);
+ } else {
+ out = fopen(XML_SGML_DEFAULT_CATALOG, "w");
+ if (out == NULL) {
+ fprintf(stderr,
+ "could not open %s for saving\n",
+ XML_SGML_DEFAULT_CATALOG);
+ exit_value = 2;
+ noout = 0;
+ } else {
+
+ xmlACatalogDump(super, out);
+ fclose(out);
+ }
+ }
+ }
+ } else {
+ xmlACatalogDump(catal, stdout);
+ }
+ i += 2;
+ } else {
+ if ((!strcmp(argv[i], "-add")) ||
+ (!strcmp(argv[i], "--add"))) {
+ if ((argv[i + 3] == NULL) || (argv[i + 3][0] == 0))
+ ret = xmlCatalogAdd(BAD_CAST argv[i + 1], NULL,
+ BAD_CAST argv[i + 2]);
+ else
+ ret = xmlCatalogAdd(BAD_CAST argv[i + 1],
+ BAD_CAST argv[i + 2],
+ BAD_CAST argv[i + 3]);
+ if (ret != 0) {
+ printf("add command failed\n");
+ exit_value = 3;
+ }
+ i += 3;
+ } else if ((!strcmp(argv[i], "-del")) ||
+ (!strcmp(argv[i], "--del"))) {
+ ret = xmlCatalogRemove(BAD_CAST argv[i + 1]);
+ if (ret < 0) {
+ fprintf(stderr, "Failed to remove entry %s\n",
+ argv[i + 1]);
+ exit_value = 1;
+ }
+ i += 1;
+ }
+ }
+ }
+
+ } else if (shell) {
+ usershell();
+ } else {
+ for (i++; i < argc; i++) {
+ xmlURIPtr uri;
+ xmlChar *ans;
+
+ uri = xmlParseURI(argv[i]);
+ if (uri == NULL) {
+ ans = xmlCatalogResolvePublic((const xmlChar *) argv[i]);
+ if (ans == NULL) {
+ printf("No entry for PUBLIC %s\n", argv[i]);
+ exit_value = 4;
+ } else {
+ printf("%s\n", (char *) ans);
+ xmlFree(ans);
+ }
+ } else {
+ xmlFreeURI(uri);
+ ans = xmlCatalogResolveSystem((const xmlChar *) argv[i]);
+ if (ans == NULL) {
+ printf("No entry for SYSTEM %s\n", argv[i]);
+ ans = xmlCatalogResolveURI ((const xmlChar *) argv[i]);
+ if (ans == NULL) {
+ printf ("No entry for URI %s\n", argv[i]);
+ exit_value = 4;
+ } else {
+ printf("%s\n", (char *) ans);
+ xmlFree (ans);
+ }
+ } else {
+ printf("%s\n", (char *) ans);
+ xmlFree(ans);
+ }
+ }
+ }
+ }
+ if ((!sgml) && ((add) || (del) || (create) || (convert))) {
+ if (noout && filename && *filename) {
+ FILE *out;
+
+ out = fopen(filename, "w");
+ if (out == NULL) {
+ fprintf(stderr, "could not open %s for saving\n", filename);
+ exit_value = 2;
+ noout = 0;
+ } else {
+ xmlCatalogDump(out);
+ }
+ } else {
+ xmlCatalogDump(stdout);
+ }
+ }
+
+ /*
+ * Cleanup and check for memory leaks
+ */
+ xmlCleanupParser();
+ xmlMemoryDump();
+ return(exit_value);
+}
+#else
+int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+ fprintf(stderr, "libxml was not compiled with catalog and output support\n");
+ return(1);
+}
+#endif
diff --git a/xmllint.c b/xmllint.c
new file mode 100644
index 0000000..fd2eb8f
--- /dev/null
+++ b/xmllint.c
@@ -0,0 +1,2011 @@
+/*
+ * xmllint.c : a small tester program for XML input.
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#include "libxml.h"
+
+#include <string.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#if defined (_WIN32) && !defined(__CYGWIN__)
+#if defined (_MSC_VER) || defined(__BORLANDC__)
+#include <winsock2.h>
+#pragma comment(lib, "ws2_32.lib")
+#define gettimeofday(p1,p2)
+#endif /* _MSC_VER */
+#endif /* _WIN32 */
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+
+#ifdef __MINGW32__
+#define _WINSOCKAPI_
+#include <wsockcompat.h>
+#include <winsock2.h>
+#undef SOCKLEN_T
+#define SOCKLEN_T unsigned int
+#endif
+
+#ifdef HAVE_SYS_TIMEB_H
+#include <sys/timeb.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+/* seems needed for Solaris */
+#ifndef MAP_FAILED
+#define MAP_FAILED ((void *) -1)
+#endif
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_LIBREADLINE
+#include <readline/readline.h>
+#ifdef HAVE_LIBHISTORY
+#include <readline/history.h>
+#endif
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/HTMLparser.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+#include <libxml/debugXML.h>
+#include <libxml/xmlerror.h>
+#ifdef LIBXML_XINCLUDE_ENABLED
+#include <libxml/xinclude.h>
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+#include <libxml/catalog.h>
+#endif
+#include <libxml/globals.h>
+#include <libxml/xmlreader.h>
+#ifdef LIBXML_SCHEMAS_ENABLED
+#include <libxml/relaxng.h>
+#include <libxml/xmlschemas.h>
+#endif
+#ifdef LIBXML_PATTERN_ENABLED
+#include <libxml/pattern.h>
+#endif
+
+#ifndef XML_XML_DEFAULT_CATALOG
+#define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog"
+#endif
+
+#ifdef LIBXML_DEBUG_ENABLED
+static int shell = 0;
+static int debugent = 0;
+#endif
+static int debug = 0;
+#ifdef LIBXML_TREE_ENABLED
+static int copy = 0;
+#endif /* LIBXML_TREE_ENABLED */
+static int recovery = 0;
+static int noent = 0;
+static int noblanks = 0;
+static int noout = 0;
+static int nowrap = 0;
+#ifdef LIBXML_OUTPUT_ENABLED
+static int format = 0;
+static const char *output = NULL;
+static int compress = 0;
+#endif /* LIBXML_OUTPUT_ENABLED */
+#ifdef LIBXML_VALID_ENABLED
+static int valid = 0;
+static int postvalid = 0;
+static char * dtdvalid = NULL;
+static char * dtdvalidfpi = NULL;
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+static char * relaxng = NULL;
+static xmlRelaxNGPtr relaxngschemas = NULL;
+static char * schema = NULL;
+static xmlSchemaPtr wxschemas = NULL;
+#endif
+static int repeat = 0;
+static int insert = 0;
+#ifdef LIBXML_HTML_ENABLED
+static int html = 0;
+static int xmlout = 0;
+#endif
+static int htmlout = 0;
+#ifdef LIBXML_PUSH_ENABLED
+static int push = 0;
+#endif /* LIBXML_PUSH_ENABLED */
+#ifdef HAVE_SYS_MMAN_H
+static int memory = 0;
+#endif
+static int testIO = 0;
+static char *encoding = NULL;
+#ifdef LIBXML_XINCLUDE_ENABLED
+static int xinclude = 0;
+#endif
+static int dtdattrs = 0;
+static int loaddtd = 0;
+static int progresult = 0;
+static int timing = 0;
+static int generate = 0;
+static int dropdtd = 0;
+#ifdef LIBXML_CATALOG_ENABLED
+static int catalogs = 0;
+static int nocatalogs = 0;
+#endif
+#ifdef LIBXML_READER_ENABLED
+static int stream = 0;
+static int walker = 0;
+#endif /* LIBXML_READER_ENABLED */
+static int chkregister = 0;
+#ifdef LIBXML_SAX1_ENABLED
+static int sax1 = 0;
+#endif /* LIBXML_SAX1_ENABLED */
+#ifdef LIBXML_PATTERN_ENABLED
+static const char *pattern = NULL;
+static xmlPatternPtr patternc = NULL;
+#endif
+static int options = 0;
+
+/*
+ * Internal timing routines to remove the necessity to have unix-specific
+ * function calls
+ */
+
+#ifndef HAVE_GETTIMEOFDAY
+#ifdef HAVE_SYS_TIMEB_H
+#ifdef HAVE_SYS_TIME_H
+#ifdef HAVE_FTIME
+
+static int
+my_gettimeofday(struct timeval *tvp, void *tzp)
+{
+ struct timeb timebuffer;
+
+ ftime(&timebuffer);
+ if (tvp) {
+ tvp->tv_sec = timebuffer.time;
+ tvp->tv_usec = timebuffer.millitm * 1000L;
+ }
+ return (0);
+}
+#define HAVE_GETTIMEOFDAY 1
+#define gettimeofday my_gettimeofday
+
+#endif /* HAVE_FTIME */
+#endif /* HAVE_SYS_TIME_H */
+#endif /* HAVE_SYS_TIMEB_H */
+#endif /* !HAVE_GETTIMEOFDAY */
+
+#if defined(HAVE_GETTIMEOFDAY)
+static struct timeval begin, end;
+
+/*
+ * startTimer: call where you want to start timing
+ */
+static void
+startTimer(void)
+{
+ gettimeofday(&begin, NULL);
+}
+
+/*
+ * endTimer: call where you want to stop timing and to print out a
+ * message about the timing performed; format is a printf
+ * type argument
+ */
+static void
+endTimer(const char *fmt, ...)
+{
+ long msec;
+ va_list ap;
+
+ gettimeofday(&end, NULL);
+ msec = end.tv_sec - begin.tv_sec;
+ msec *= 1000;
+ msec += (end.tv_usec - begin.tv_usec) / 1000;
+
+#ifndef HAVE_STDARG_H
+#error "endTimer required stdarg functions"
+#endif
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+
+ fprintf(stderr, " took %ld ms\n", msec);
+}
+#elif defined(HAVE_TIME_H)
+/*
+ * No gettimeofday function, so we have to make do with calling clock.
+ * This is obviously less accurate, but there's little we can do about
+ * that.
+ */
+#ifndef CLOCKS_PER_SEC
+#define CLOCKS_PER_SEC 100
+#endif
+
+static clock_t begin, end;
+static void
+startTimer(void)
+{
+ begin = clock();
+}
+static void
+endTimer(const char *fmt, ...)
+{
+ long msec;
+ va_list ap;
+
+ end = clock();
+ msec = ((end - begin) * 1000) / CLOCKS_PER_SEC;
+
+#ifndef HAVE_STDARG_H
+#error "endTimer required stdarg functions"
+#endif
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, " took %ld ms\n", msec);
+}
+#else
+
+/*
+ * We don't have a gettimeofday or time.h, so we just don't do timing
+ */
+static void
+startTimer(void)
+{
+ /*
+ * Do nothing
+ */
+}
+static void
+endTimer(char *format, ...)
+{
+ /*
+ * We cannot do anything because we don't have a timing function
+ */
+#ifdef HAVE_STDARG_H
+ va_start(ap, format);
+ vfprintf(stderr, format, ap);
+ va_end(ap);
+ fprintf(stderr, " was not timed\n", msec);
+#else
+ /* We don't have gettimeofday, time or stdarg.h, what crazy world is
+ * this ?!
+ */
+#endif
+}
+#endif
+/************************************************************************
+ * *
+ * HTML ouput *
+ * *
+ ************************************************************************/
+char buffer[50000];
+
+static void
+xmlHTMLEncodeSend(void) {
+ char *result;
+
+ result = (char *) xmlEncodeEntitiesReentrant(NULL, BAD_CAST buffer);
+ if (result) {
+ xmlGenericError(xmlGenericErrorContext, "%s", result);
+ xmlFree(result);
+ }
+ buffer[0] = 0;
+}
+
+/**
+ * xmlHTMLPrintFileInfo:
+ * @input: an xmlParserInputPtr input
+ *
+ * Displays the associated file and line informations for the current input
+ */
+
+static void
+xmlHTMLPrintFileInfo(xmlParserInputPtr input) {
+ int len;
+ xmlGenericError(xmlGenericErrorContext, "<p>");
+
+ len = strlen(buffer);
+ if (input != NULL) {
+ if (input->filename) {
+ snprintf(&buffer[len], sizeof(buffer) - len, "%s:%d: ", input->filename,
+ input->line);
+ } else {
+ snprintf(&buffer[len], sizeof(buffer) - len, "Entity: line %d: ", input->line);
+ }
+ }
+ xmlHTMLEncodeSend();
+}
+
+/**
+ * xmlHTMLPrintFileContext:
+ * @input: an xmlParserInputPtr input
+ *
+ * Displays current context within the input content for error tracking
+ */
+
+static void
+xmlHTMLPrintFileContext(xmlParserInputPtr input) {
+ const xmlChar *cur, *base;
+ int len;
+ int n;
+
+ if (input == NULL) return;
+ xmlGenericError(xmlGenericErrorContext, "<pre>\n");
+ cur = input->cur;
+ base = input->base;
+ while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) {
+ cur--;
+ }
+ n = 0;
+ while ((n++ < 80) && (cur > base) && (*cur != '\n') && (*cur != '\r'))
+ cur--;
+ if ((*cur == '\n') || (*cur == '\r')) cur++;
+ base = cur;
+ n = 0;
+ while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
+ len = strlen(buffer);
+ snprintf(&buffer[len], sizeof(buffer) - len, "%c",
+ (unsigned char) *cur++);
+ n++;
+ }
+ len = strlen(buffer);
+ snprintf(&buffer[len], sizeof(buffer) - len, "\n");
+ cur = input->cur;
+ while ((*cur == '\n') || (*cur == '\r'))
+ cur--;
+ n = 0;
+ while ((cur != base) && (n++ < 80)) {
+ len = strlen(buffer);
+ snprintf(&buffer[len], sizeof(buffer) - len, " ");
+ base++;
+ }
+ len = strlen(buffer);
+ snprintf(&buffer[len], sizeof(buffer) - len, "^\n");
+ xmlHTMLEncodeSend();
+ xmlGenericError(xmlGenericErrorContext, "</pre>");
+}
+
+/**
+ * xmlHTMLError:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format an error messages, gives file, line, position and
+ * extra parameters.
+ */
+static void
+xmlHTMLError(void *ctx, const char *msg, ...)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserInputPtr input;
+ va_list args;
+ int len;
+
+ buffer[0] = 0;
+ input = ctxt->input;
+ if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+ }
+
+ xmlHTMLPrintFileInfo(input);
+
+ xmlGenericError(xmlGenericErrorContext, "<b>error</b>: ");
+ va_start(args, msg);
+ len = strlen(buffer);
+ vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
+ va_end(args);
+ xmlHTMLEncodeSend();
+ xmlGenericError(xmlGenericErrorContext, "</p>\n");
+
+ xmlHTMLPrintFileContext(input);
+ xmlHTMLEncodeSend();
+}
+
+/**
+ * xmlHTMLWarning:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a warning messages, gives file, line, position and
+ * extra parameters.
+ */
+static void
+xmlHTMLWarning(void *ctx, const char *msg, ...)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserInputPtr input;
+ va_list args;
+ int len;
+
+ buffer[0] = 0;
+ input = ctxt->input;
+ if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+ }
+
+
+ xmlHTMLPrintFileInfo(input);
+
+ xmlGenericError(xmlGenericErrorContext, "<b>warning</b>: ");
+ va_start(args, msg);
+ len = strlen(buffer);
+ vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
+ va_end(args);
+ xmlHTMLEncodeSend();
+ xmlGenericError(xmlGenericErrorContext, "</p>\n");
+
+ xmlHTMLPrintFileContext(input);
+ xmlHTMLEncodeSend();
+}
+
+/**
+ * xmlHTMLValidityError:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format an validity error messages, gives file,
+ * line, position and extra parameters.
+ */
+static void
+xmlHTMLValidityError(void *ctx, const char *msg, ...)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserInputPtr input;
+ va_list args;
+ int len;
+
+ buffer[0] = 0;
+ input = ctxt->input;
+ if ((input->filename == NULL) && (ctxt->inputNr > 1))
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+
+ xmlHTMLPrintFileInfo(input);
+
+ xmlGenericError(xmlGenericErrorContext, "<b>validity error</b>: ");
+ len = strlen(buffer);
+ va_start(args, msg);
+ vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
+ va_end(args);
+ xmlHTMLEncodeSend();
+ xmlGenericError(xmlGenericErrorContext, "</p>\n");
+
+ xmlHTMLPrintFileContext(input);
+ xmlHTMLEncodeSend();
+}
+
+/**
+ * xmlHTMLValidityWarning:
+ * @ctx: an XML parser context
+ * @msg: the message to display/transmit
+ * @...: extra parameters for the message display
+ *
+ * Display and format a validity warning messages, gives file, line,
+ * position and extra parameters.
+ */
+static void
+xmlHTMLValidityWarning(void *ctx, const char *msg, ...)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlParserInputPtr input;
+ va_list args;
+ int len;
+
+ buffer[0] = 0;
+ input = ctxt->input;
+ if ((input->filename == NULL) && (ctxt->inputNr > 1))
+ input = ctxt->inputTab[ctxt->inputNr - 2];
+
+ xmlHTMLPrintFileInfo(input);
+
+ xmlGenericError(xmlGenericErrorContext, "<b>validity warning</b>: ");
+ va_start(args, msg);
+ len = strlen(buffer);
+ vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
+ va_end(args);
+ xmlHTMLEncodeSend();
+ xmlGenericError(xmlGenericErrorContext, "</p>\n");
+
+ xmlHTMLPrintFileContext(input);
+ xmlHTMLEncodeSend();
+}
+
+/************************************************************************
+ * *
+ * Shell Interface *
+ * *
+ ************************************************************************/
+#ifdef LIBXML_DEBUG_ENABLED
+/**
+ * xmlShellReadline:
+ * @prompt: the prompt value
+ *
+ * Read a string
+ *
+ * Returns a pointer to it or NULL on EOF the caller is expected to
+ * free the returned string.
+ */
+static char *
+xmlShellReadline(char *prompt) {
+#ifdef HAVE_LIBREADLINE
+ char *line_read;
+
+ /* Get a line from the user. */
+ line_read = readline (prompt);
+
+ /* If the line has any text in it, save it on the history. */
+ if (line_read && *line_read)
+ add_history (line_read);
+
+ return (line_read);
+#else
+ char line_read[501];
+ char *ret;
+ int len;
+
+ if (prompt != NULL)
+ fprintf(stdout, "%s", prompt);
+ if (!fgets(line_read, 500, stdin))
+ return(NULL);
+ line_read[500] = 0;
+ len = strlen(line_read);
+ ret = (char *) malloc(len + 1);
+ if (ret != NULL) {
+ memcpy (ret, line_read, len + 1);
+ }
+ return(ret);
+#endif
+}
+#endif /* LIBXML_DEBUG_ENABLED */
+
+/************************************************************************
+ * *
+ * I/O Interfaces *
+ * *
+ ************************************************************************/
+
+static int myRead(FILE *f, char * buf, int len) {
+ return(fread(buf, 1, len, f));
+}
+static void myClose(FILE *f) {
+ if (f != stdin) {
+ fclose(f);
+ }
+}
+
+#ifdef LIBXML_READER_ENABLED
+/************************************************************************
+ * *
+ * Stream Test processing *
+ * *
+ ************************************************************************/
+static void processNode(xmlTextReaderPtr reader) {
+ const xmlChar *name, *value;
+
+ name = xmlTextReaderConstName(reader);
+ if (name == NULL)
+ name = BAD_CAST "--";
+
+ value = xmlTextReaderConstValue(reader);
+
+ printf("%d %d %s %d %d",
+ xmlTextReaderDepth(reader),
+ xmlTextReaderNodeType(reader),
+ name,
+ xmlTextReaderIsEmptyElement(reader),
+ xmlTextReaderHasValue(reader));
+ if (value == NULL)
+ printf("\n");
+ else {
+ printf(" %s\n", value);
+ }
+#ifdef LIBXML_PATTERN_ENABLED
+ if (patternc) {
+ if (xmlPatternMatch(patternc, xmlTextReaderCurrentNode(reader)) == 1) {
+ printf("Node matches pattern %s\n", pattern);
+ }
+ }
+#endif
+}
+
+static void streamFile(char *filename) {
+ xmlTextReaderPtr reader;
+ int ret;
+#ifdef HAVE_SYS_MMAN_H
+ int fd = -1;
+ struct stat info;
+ const char *base = NULL;
+ xmlParserInputBufferPtr input = NULL;
+
+ if (memory) {
+ if (stat(filename, &info) < 0)
+ return;
+ if ((fd = open(filename, O_RDONLY)) < 0)
+ return;
+ base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
+ if (base == (void *) MAP_FAILED)
+ return;
+
+ reader = xmlReaderForMemory(base, info.st_size, filename,
+ NULL, options);
+ } else
+#endif
+ reader = xmlReaderForFile(filename, NULL, options);
+
+
+ if (reader != NULL) {
+#ifdef LIBXML_VALID_ENABLED
+ if (valid)
+ xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);
+ else
+#endif /* LIBXML_VALID_ENABLED */
+ xmlTextReaderSetParserProp(reader, XML_PARSER_LOADDTD, 1);
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (relaxng != NULL) {
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+ ret = xmlTextReaderRelaxNGValidate(reader, relaxng);
+ if (ret < 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Relax-NG schema %s failed to compile\n", relaxng);
+ progresult = 5;
+ relaxng = NULL;
+ }
+ if ((timing) && (!repeat)) {
+ endTimer("Compiling the schemas");
+ }
+ }
+#endif
+
+ /*
+ * Process all nodes in sequence
+ */
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+ ret = xmlTextReaderRead(reader);
+ while (ret == 1) {
+ if ((debug)
+#ifdef LIBXML_PATTERN_ENABLED
+ || (patternc)
+#endif
+ )
+ processNode(reader);
+ ret = xmlTextReaderRead(reader);
+ }
+ if ((timing) && (!repeat)) {
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (relaxng != NULL)
+ endTimer("Parsing and validating");
+ else
+#endif
+#ifdef LIBXML_VALID_ENABLED
+ if (valid)
+ endTimer("Parsing and validating");
+ else
+#endif
+ endTimer("Parsing");
+ }
+
+#ifdef LIBXML_VALID_ENABLED
+ if (valid) {
+ if (xmlTextReaderIsValid(reader) != 1) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Document %s does not validate\n", filename);
+ progresult = 3;
+ }
+ }
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (relaxng != NULL) {
+ if (xmlTextReaderIsValid(reader) != 1) {
+ fprintf(stderr, "%s fails to validate\n", filename);
+ progresult = 3;
+ } else {
+ fprintf(stderr, "%s validates\n", filename);
+ }
+ }
+#endif
+ /*
+ * Done, cleanup and status
+ */
+ xmlFreeTextReader(reader);
+ if (ret != 0) {
+ fprintf(stderr, "%s : failed to parse\n", filename);
+ progresult = 1;
+ }
+ } else {
+ fprintf(stderr, "Unable to open %s\n", filename);
+ progresult = 1;
+ }
+#ifdef HAVE_SYS_MMAN_H
+ if (memory) {
+ xmlFreeParserInputBuffer(input);
+ munmap((char *) base, info.st_size);
+ close(fd);
+ }
+#endif
+}
+
+static void walkDoc(xmlDocPtr doc) {
+ xmlTextReaderPtr reader;
+ int ret;
+
+ reader = xmlReaderWalker(doc);
+ if (reader != NULL) {
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+ ret = xmlTextReaderRead(reader);
+ while (ret == 1) {
+ if ((debug)
+#ifdef LIBXML_PATTERN_ENABLED
+ || (patternc)
+#endif
+ )
+ processNode(reader);
+ ret = xmlTextReaderRead(reader);
+ }
+ if ((timing) && (!repeat)) {
+ endTimer("walking through the doc");
+ }
+ xmlFreeTextReader(reader);
+ if (ret != 0) {
+ fprintf(stderr, "failed to walk through the doc\n");
+ progresult = 1;
+ }
+ } else {
+ fprintf(stderr, "Failed to crate a reader from the document\n");
+ progresult = 1;
+ }
+}
+#endif /* LIBXML_READER_ENABLED */
+
+/************************************************************************
+ * *
+ * Tree Test processing *
+ * *
+ ************************************************************************/
+static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
+ xmlDocPtr doc = NULL;
+#ifdef LIBXML_TREE_ENABLED
+ xmlDocPtr tmp;
+#endif /* LIBXML_TREE_ENABLED */
+
+ if ((timing) && (!repeat))
+ startTimer();
+
+
+#ifdef LIBXML_TREE_ENABLED
+ if (filename == NULL) {
+ if (generate) {
+ xmlNodePtr n;
+
+ doc = xmlNewDoc(BAD_CAST "1.0");
+ n = xmlNewNode(NULL, BAD_CAST "info");
+ xmlNodeSetContent(n, BAD_CAST "abc");
+ xmlDocSetRootElement(doc, n);
+ }
+ }
+#endif /* LIBXML_TREE_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+#ifdef LIBXML_PUSH_ENABLED
+ else if ((html) && (push)) {
+ FILE *f;
+
+ f = fopen(filename, "r");
+ if (f != NULL) {
+ int res, size = 3;
+ char chars[4096];
+ htmlParserCtxtPtr ctxt;
+
+ /* if (repeat) */
+ size = 4096;
+ res = fread(chars, 1, 4, f);
+ if (res > 0) {
+ ctxt = htmlCreatePushParserCtxt(NULL, NULL,
+ chars, res, filename, XML_CHAR_ENCODING_NONE);
+ while ((res = fread(chars, 1, size, f)) > 0) {
+ htmlParseChunk(ctxt, chars, res, 0);
+ }
+ htmlParseChunk(ctxt, chars, 0, 1);
+ doc = ctxt->myDoc;
+ htmlFreeParserCtxt(ctxt);
+ }
+ fclose(f);
+ }
+ }
+#endif /* LIBXML_PUSH_ENABLED */
+ else if (html) {
+ doc = htmlReadFile(filename, NULL, options);
+ }
+#endif /* LIBXML_HTML_ENABLED */
+ else {
+#ifdef LIBXML_PUSH_ENABLED
+ /*
+ * build an XML tree from a string;
+ */
+ if (push) {
+ FILE *f;
+
+ /* '-' Usually means stdin -<sven@zen.org> */
+ if ((filename[0] == '-') && (filename[1] == 0)) {
+ f = stdin;
+ } else {
+ f = fopen(filename, "r");
+ }
+ if (f != NULL) {
+ int ret;
+ int res, size = 1024;
+ char chars[1024];
+ xmlParserCtxtPtr ctxt;
+
+ /* if (repeat) size = 1024; */
+ res = fread(chars, 1, 4, f);
+ if (res > 0) {
+ ctxt = xmlCreatePushParserCtxt(NULL, NULL,
+ chars, res, filename);
+ xmlCtxtUseOptions(ctxt, options);
+ while ((res = fread(chars, 1, size, f)) > 0) {
+ xmlParseChunk(ctxt, chars, res, 0);
+ }
+ xmlParseChunk(ctxt, chars, 0, 1);
+ doc = ctxt->myDoc;
+ ret = ctxt->wellFormed;
+ xmlFreeParserCtxt(ctxt);
+ if (!ret) {
+ xmlFreeDoc(doc);
+ doc = NULL;
+ }
+ }
+ }
+ } else
+#endif /* LIBXML_PUSH_ENABLED */
+ if (testIO) {
+ if ((filename[0] == '-') && (filename[1] == 0)) {
+ doc = xmlReadFd(0, NULL, NULL, options);
+ } else {
+ FILE *f;
+
+ f = fopen(filename, "r");
+ if (f != NULL) {
+ if (rectxt == NULL)
+ doc = xmlReadIO((xmlInputReadCallback) myRead,
+ (xmlInputCloseCallback) myClose, f,
+ filename, NULL, options);
+ else
+ doc = xmlCtxtReadIO(rectxt,
+ (xmlInputReadCallback) myRead,
+ (xmlInputCloseCallback) myClose, f,
+ filename, NULL, options);
+ } else
+ doc = NULL;
+ }
+ } else if (htmlout) {
+ xmlParserCtxtPtr ctxt;
+
+ if (rectxt == NULL)
+ ctxt = xmlNewParserCtxt();
+ else
+ ctxt = rectxt;
+ if (ctxt == NULL) {
+ doc = NULL;
+ } else {
+ ctxt->sax->error = xmlHTMLError;
+ ctxt->sax->warning = xmlHTMLWarning;
+ ctxt->vctxt.error = xmlHTMLValidityError;
+ ctxt->vctxt.warning = xmlHTMLValidityWarning;
+
+ doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
+
+ if (rectxt == NULL)
+ xmlFreeParserCtxt(ctxt);
+ }
+#ifdef HAVE_SYS_MMAN_H
+ } else if (memory) {
+ int fd;
+ struct stat info;
+ const char *base;
+ if (stat(filename, &info) < 0)
+ return;
+ if ((fd = open(filename, O_RDONLY)) < 0)
+ return;
+ base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
+ if (base == (void *) MAP_FAILED)
+ return;
+
+ if (rectxt == NULL)
+ doc = xmlReadMemory((char *) base, info.st_size,
+ filename, NULL, options);
+ else
+ doc = xmlCtxtReadMemory(rectxt, (char *) base, info.st_size,
+ filename, NULL, options);
+
+ munmap((char *) base, info.st_size);
+#endif
+#ifdef LIBXML_VALID_ENABLED
+ } else if (valid) {
+ xmlParserCtxtPtr ctxt = NULL;
+
+ if (rectxt == NULL)
+ ctxt = xmlNewParserCtxt();
+ else
+ ctxt = rectxt;
+ if (ctxt == NULL) {
+ doc = NULL;
+ } else {
+ doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
+
+ if (ctxt->valid == 0)
+ progresult = 4;
+ if (rectxt == NULL)
+ xmlFreeParserCtxt(ctxt);
+ }
+#endif /* LIBXML_VALID_ENABLED */
+ } else {
+ if (rectxt != NULL)
+ doc = xmlCtxtReadFile(rectxt, filename, NULL, options);
+ else
+ doc = xmlReadFile(filename, NULL, options);
+ }
+ }
+
+ /*
+ * If we don't have a document we might as well give up. Do we
+ * want an error message here? <sven@zen.org> */
+ if (doc == NULL) {
+ progresult = 1;
+ return;
+ }
+
+ if ((timing) && (!repeat)) {
+ endTimer("Parsing");
+ }
+
+ /*
+ * Remove DOCTYPE nodes
+ */
+ if (dropdtd) {
+ xmlDtdPtr dtd;
+
+ dtd = xmlGetIntSubset(doc);
+ if (dtd != NULL) {
+ xmlUnlinkNode((xmlNodePtr)dtd);
+ xmlFreeDtd(dtd);
+ }
+ }
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+ if (xinclude) {
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+ xmlXIncludeProcessFlags(doc, options);
+ if ((timing) && (!repeat)) {
+ endTimer("Xinclude processing");
+ }
+ }
+#endif
+
+#ifdef LIBXML_DEBUG_ENABLED
+ /*
+ * shell interaction
+ */
+ if (shell)
+ xmlShell(doc, filename, xmlShellReadline, stdout);
+#endif
+
+#ifdef LIBXML_TREE_ENABLED
+ /*
+ * test intermediate copy if needed.
+ */
+ if (copy) {
+ tmp = doc;
+ doc = xmlCopyDoc(doc, 1);
+ xmlFreeDoc(tmp);
+ }
+#endif /* LIBXML_TREE_ENABLED */
+
+#ifdef LIBXML_VALID_ENABLED
+ if ((insert) && (!html)) {
+ const xmlChar* list[256];
+ int nb, i;
+ xmlNodePtr node;
+
+ if (doc->children != NULL) {
+ node = doc->children;
+ while ((node != NULL) && (node->last == NULL)) node = node->next;
+ if (node != NULL) {
+ nb = xmlValidGetValidElements(node->last, NULL, list, 256);
+ if (nb < 0) {
+ fprintf(stderr, "could not get valid list of elements\n");
+ } else if (nb == 0) {
+ fprintf(stderr, "No element can be inserted under root\n");
+ } else {
+ fprintf(stderr, "%d element types can be inserted under root:\n",
+ nb);
+ for (i = 0;i < nb;i++) {
+ fprintf(stderr, "%s\n", (char *) list[i]);
+ }
+ }
+ }
+ }
+ }else
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef LIBXML_READER_ENABLED
+ if (walker) {
+ walkDoc(doc);
+ }
+#endif /* LIBXML_READER_ENABLED */
+#ifdef LIBXML_OUTPUT_ENABLED
+ if (noout == 0) {
+ int ret;
+
+ /*
+ * print it.
+ */
+#ifdef LIBXML_DEBUG_ENABLED
+ if (!debug) {
+#endif
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+#ifdef LIBXML_VALID_ENABLED
+ if ((html) && (!xmlout)) {
+ if (compress) {
+ htmlSaveFile(output ? output : "-", doc);
+ }
+ else if (encoding != NULL) {
+ if ( format ) {
+ htmlSaveFileFormat(output ? output : "-", doc, encoding, 1);
+ }
+ else {
+ htmlSaveFileFormat(output ? output : "-", doc, encoding, 0);
+ }
+ }
+ else if (format) {
+ htmlSaveFileFormat(output ? output : "-", doc, NULL, 1);
+ }
+ else {
+ FILE *out;
+ if (output == NULL)
+ out = stdout;
+ else {
+ out = fopen(output,"wb");
+ }
+ if (out != NULL) {
+ if (htmlDocDump(out, doc) < 0)
+ progresult = 6;
+
+ if (output != NULL)
+ fclose(out);
+ } else {
+ fprintf(stderr, "failed to open %s\n", output);
+ progresult = 6;
+ }
+ }
+ if ((timing) && (!repeat)) {
+ endTimer("Saving");
+ }
+ } else
+#endif
+#ifdef HAVE_SYS_MMAN_H
+ if (memory) {
+ xmlChar *result;
+ int len;
+
+ if (encoding != NULL) {
+ if ( format ) {
+ xmlDocDumpFormatMemoryEnc(doc, &result, &len, encoding, 1);
+ } else {
+ xmlDocDumpMemoryEnc(doc, &result, &len, encoding);
+ }
+ } else {
+ if (format)
+ xmlDocDumpFormatMemory(doc, &result, &len, 1);
+ else
+ xmlDocDumpMemory(doc, &result, &len);
+ }
+ if (result == NULL) {
+ fprintf(stderr, "Failed to save\n");
+ } else {
+ write(1, result, len);
+ xmlFree(result);
+ }
+ } else
+#endif /* HAVE_SYS_MMAN_H */
+ if (compress) {
+ xmlSaveFile(output ? output : "-", doc);
+ }
+ else if (encoding != NULL) {
+ if ( format ) {
+ ret = xmlSaveFormatFileEnc(output ? output : "-", doc,
+ encoding, 1);
+ }
+ else {
+ ret = xmlSaveFileEnc(output ? output : "-", doc, encoding);
+ }
+ if (ret < 0) {
+ fprintf(stderr, "failed save to %s\n",
+ output ? output : "-");
+ progresult = 6;
+ }
+ }
+ else if (format) {
+ ret = xmlSaveFormatFile(output ? output : "-", doc, 1);
+ if (ret < 0) {
+ fprintf(stderr, "failed save to %s\n",
+ output ? output : "-");
+ progresult = 6;
+ }
+ }
+ else {
+ FILE *out;
+ if (output == NULL)
+ out = stdout;
+ else {
+ out = fopen(output,"wb");
+ }
+ if (out != NULL) {
+ if (xmlDocDump(out, doc) < 0)
+ progresult = 6;
+
+ if (output != NULL)
+ fclose(out);
+ } else {
+ fprintf(stderr, "failed to open %s\n", output);
+ progresult = 6;
+ }
+ }
+ if ((timing) && (!repeat)) {
+ endTimer("Saving");
+ }
+#ifdef LIBXML_DEBUG_ENABLED
+ } else {
+ FILE *out;
+ if (output == NULL)
+ out = stdout;
+ else {
+ out = fopen(output,"wb");
+ }
+ if (out != NULL) {
+ xmlDebugDumpDocument(out, doc);
+
+ if (output != NULL)
+ fclose(out);
+ } else {
+ fprintf(stderr, "failed to open %s\n", output);
+ progresult = 6;
+ }
+ }
+#endif
+ }
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#ifdef LIBXML_VALID_ENABLED
+ /*
+ * A posteriori validation test
+ */
+ if ((dtdvalid != NULL) || (dtdvalidfpi != NULL)) {
+ xmlDtdPtr dtd;
+
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+ if (dtdvalid != NULL)
+ dtd = xmlParseDTD(NULL, (const xmlChar *)dtdvalid);
+ else
+ dtd = xmlParseDTD((const xmlChar *)dtdvalidfpi, NULL);
+ if ((timing) && (!repeat)) {
+ endTimer("Parsing DTD");
+ }
+ if (dtd == NULL) {
+ if (dtdvalid != NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "Could not parse DTD %s\n", dtdvalid);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "Could not parse DTD %s\n", dtdvalidfpi);
+ progresult = 2;
+ } else {
+ xmlValidCtxtPtr cvp;
+
+ if ((cvp = xmlNewValidCtxt()) == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Couldn't allocate validation context\n");
+ exit(-1);
+ }
+ cvp->userData = (void *) stderr;
+ cvp->error = (xmlValidityErrorFunc) fprintf;
+ cvp->warning = (xmlValidityWarningFunc) fprintf;
+
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+ if (!xmlValidateDtd(cvp, doc, dtd)) {
+ if (dtdvalid != NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "Document %s does not validate against %s\n",
+ filename, dtdvalid);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ "Document %s does not validate against %s\n",
+ filename, dtdvalidfpi);
+ progresult = 3;
+ }
+ if ((timing) && (!repeat)) {
+ endTimer("Validating against DTD");
+ }
+ xmlFreeValidCtxt(cvp);
+ xmlFreeDtd(dtd);
+ }
+ } else if (postvalid) {
+ xmlValidCtxtPtr cvp;
+
+ if ((cvp = xmlNewValidCtxt()) == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Couldn't allocate validation context\n");
+ exit(-1);
+ }
+
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+ cvp->userData = (void *) stderr;
+ cvp->error = (xmlValidityErrorFunc) fprintf;
+ cvp->warning = (xmlValidityWarningFunc) fprintf;
+ if (!xmlValidateDocument(cvp, doc)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Document %s does not validate\n", filename);
+ progresult = 3;
+ }
+ if ((timing) && (!repeat)) {
+ endTimer("Validating");
+ }
+ xmlFreeValidCtxt(cvp);
+ }
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (relaxngschemas != NULL) {
+ xmlRelaxNGValidCtxtPtr ctxt;
+ int ret;
+
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+
+ ctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
+ xmlRelaxNGSetValidErrors(ctxt,
+ (xmlRelaxNGValidityErrorFunc) fprintf,
+ (xmlRelaxNGValidityWarningFunc) fprintf,
+ stderr);
+ ret = xmlRelaxNGValidateDoc(ctxt, doc);
+ if (ret == 0) {
+ fprintf(stderr, "%s validates\n", filename);
+ } else if (ret > 0) {
+ fprintf(stderr, "%s fails to validate\n", filename);
+ } else {
+ fprintf(stderr, "%s validation generated an internal error\n",
+ filename);
+ }
+ xmlRelaxNGFreeValidCtxt(ctxt);
+ if ((timing) && (!repeat)) {
+ endTimer("Validating");
+ }
+ } else if (wxschemas != NULL) {
+ xmlSchemaValidCtxtPtr ctxt;
+ int ret;
+
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+
+ ctxt = xmlSchemaNewValidCtxt(wxschemas);
+ xmlSchemaSetValidErrors(ctxt,
+ (xmlSchemaValidityErrorFunc) fprintf,
+ (xmlSchemaValidityWarningFunc) fprintf,
+ stderr);
+ ret = xmlSchemaValidateDoc(ctxt, doc);
+ if (ret == 0) {
+ fprintf(stderr, "%s validates\n", filename);
+ } else if (ret > 0) {
+ fprintf(stderr, "%s fails to validate\n", filename);
+ } else {
+ fprintf(stderr, "%s validation generated an internal error\n",
+ filename);
+ }
+ xmlSchemaFreeValidCtxt(ctxt);
+ if ((timing) && (!repeat)) {
+ endTimer("Validating");
+ }
+ }
+#endif
+
+#ifdef LIBXML_DEBUG_ENABLED
+ if ((debugent) && (!html))
+ xmlDebugDumpEntities(stderr, doc);
+#endif
+
+ /*
+ * free it.
+ */
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+ xmlFreeDoc(doc);
+ if ((timing) && (!repeat)) {
+ endTimer("Freeing");
+ }
+}
+
+/************************************************************************
+ * *
+ * Usage and Main *
+ * *
+ ************************************************************************/
+
+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
+ fprintf(stderr, "\n");
+}
+
+static void usage(const char *name) {
+ printf("Usage : %s [options] XMLfiles ...\n", name);
+#ifdef LIBXML_OUTPUT_ENABLED
+ printf("\tParse the XML files and output the result of the parsing\n");
+#else
+ printf("\tParse the XML files\n");
+#endif /* LIBXML_OUTPUT_ENABLED */
+ printf("\t--version : display the version of the XML library used\n");
+#ifdef LIBXML_DEBUG_ENABLED
+ printf("\t--debug : dump a debug tree of the in-memory document\n");
+ printf("\t--shell : run a navigating shell\n");
+ printf("\t--debugent : debug the entities defined in the document\n");
+#else
+#ifdef LIBXML_READER_ENABLED
+ printf("\t--debug : dump the nodes content when using --stream\n");
+#endif /* LIBXML_READER_ENABLED */
+#endif
+#ifdef LIBXML_TREE_ENABLED
+ printf("\t--copy : used to test the internal copy implementation\n");
+#endif /* LIBXML_TREE_ENABLED */
+ printf("\t--recover : output what was parsable on broken XML documents\n");
+ printf("\t--noent : substitute entity references by their value\n");
+ printf("\t--noout : don't output the result tree\n");
+ printf("\t--nonet : refuse to fetch DTDs or entities over network\n");
+ printf("\t--htmlout : output results as HTML\n");
+ printf("\t--nowrap : do not put HTML doc wrapper\n");
+#ifdef LIBXML_VALID_ENABLED
+ printf("\t--valid : validate the document in addition to std well-formed check\n");
+ printf("\t--postvalid : do a posteriori validation, i.e after parsing\n");
+ printf("\t--dtdvalid URL : do a posteriori validation against a given DTD\n");
+ printf("\t--dtdvalidfpi FPI : same but name the DTD with a Public Identifier\n");
+#endif /* LIBXML_VALID_ENABLED */
+ printf("\t--timing : print some timings\n");
+ printf("\t--output file or -o file: save to a given file\n");
+ printf("\t--repeat : repeat 100 times, for timing or profiling\n");
+ printf("\t--insert : ad-hoc test for valid insertions\n");
+#ifdef LIBXML_OUTPUT_ENABLED
+#ifdef HAVE_ZLIB_H
+ printf("\t--compress : turn on gzip compression of output\n");
+#endif
+#endif /* LIBXML_OUTPUT_ENABLED */
+#ifdef LIBXML_HTML_ENABLED
+ printf("\t--html : use the HTML parser\n");
+ printf("\t--xmlout : force to use the XML serializer when using --html\n");
+#endif
+#ifdef LIBXML_PUSH_ENABLED
+ printf("\t--push : use the push mode of the parser\n");
+#endif /* LIBXML_PUSH_ENABLED */
+#ifdef HAVE_SYS_MMAN_H
+ printf("\t--memory : parse from memory\n");
+#endif
+ printf("\t--nowarning : do not emit warnings from parser/validator\n");
+ printf("\t--noblanks : drop (ignorable?) blanks spaces\n");
+ printf("\t--nocdata : replace cdata section with text nodes\n");
+#ifdef LIBXML_OUTPUT_ENABLED
+ printf("\t--format : reformat/reindent the input\n");
+ printf("\t--encode encoding : output in the given encoding\n");
+ printf("\t--dropdtd : remove the DOCTYPE of the input docs\n");
+#endif /* LIBXML_OUTPUT_ENABLED */
+ printf("\t--nsclean : remove redundant namespace declarations\n");
+ printf("\t--testIO : test user I/O support\n");
+#ifdef LIBXML_CATALOG_ENABLED
+ printf("\t--catalogs : use SGML catalogs from $SGML_CATALOG_FILES\n");
+ printf("\t otherwise XML Catalogs starting from \n");
+ printf("\t %s are activated by default\n", XML_XML_DEFAULT_CATALOG);
+ printf("\t--nocatalogs: deactivate all catalogs\n");
+#endif
+ printf("\t--auto : generate a small doc on the fly\n");
+#ifdef LIBXML_XINCLUDE_ENABLED
+ printf("\t--xinclude : do XInclude processing\n");
+#endif
+ printf("\t--loaddtd : fetch external DTD\n");
+ printf("\t--dtdattr : loaddtd + populate the tree with inherited attributes \n");
+#ifdef LIBXML_READER_ENABLED
+ printf("\t--stream : use the streaming interface to process very large files\n");
+ printf("\t--walker : create a reader and walk though the resulting doc\n");
+#endif /* LIBXML_READER_ENABLED */
+#ifdef LIBXML_PATTERN_ENABLED
+ printf("\t--pattern pattern_value : test the pattern support\n");
+#endif
+ printf("\t--chkregister : verify the node registration code\n");
+#ifdef LIBXML_SCHEMAS_ENABLED
+ printf("\t--relaxng schema : do RelaxNG validation against the schema\n");
+ printf("\t--schema schema : do validation against the WXS schema\n");
+#endif
+ printf("\nLibxml project home page: http://xmlsoft.org/\n");
+ printf("To report bugs or get some help check: http://xmlsoft.org/bugs.html\n");
+}
+
+static void registerNode(xmlNodePtr node)
+{
+ node->_private = malloc(sizeof(long));
+ *(long*)node->_private = (long) 0x81726354;
+}
+
+static void deregisterNode(xmlNodePtr node)
+{
+ assert(node->_private != NULL);
+ assert(*(long*)node->_private == (long) 0x81726354);
+ free(node->_private);
+}
+
+int
+main(int argc, char **argv) {
+ int i, acount;
+ int files = 0;
+ int version = 0;
+ const char* indent;
+
+ if (argc <= 1) {
+ usage(argv[0]);
+ return(1);
+ }
+ LIBXML_TEST_VERSION
+ for (i = 1; i < argc ; i++) {
+ if (!strcmp(argv[i], "-"))
+ break;
+
+ if (argv[i][0] != '-')
+ continue;
+ if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
+ debug++;
+ else
+#ifdef LIBXML_DEBUG_ENABLED
+ if ((!strcmp(argv[i], "-shell")) ||
+ (!strcmp(argv[i], "--shell"))) {
+ shell++;
+ noout = 1;
+ } else
+#endif
+#ifdef LIBXML_TREE_ENABLED
+ if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
+ copy++;
+ else
+#endif /* LIBXML_TREE_ENABLED */
+ if ((!strcmp(argv[i], "-recover")) ||
+ (!strcmp(argv[i], "--recover"))) {
+ recovery++;
+ options |= XML_PARSE_RECOVER;
+ } else if ((!strcmp(argv[i], "-noent")) ||
+ (!strcmp(argv[i], "--noent"))) {
+ noent++;
+ options |= XML_PARSE_NOENT;
+ } else if ((!strcmp(argv[i], "-nsclean")) ||
+ (!strcmp(argv[i], "--nsclean"))) {
+ options |= XML_PARSE_NSCLEAN;
+ } else if ((!strcmp(argv[i], "-nocdata")) ||
+ (!strcmp(argv[i], "--nocdata"))) {
+ options |= XML_PARSE_NOCDATA;
+ } else if ((!strcmp(argv[i], "-nodict")) ||
+ (!strcmp(argv[i], "--nodict"))) {
+ options |= XML_PARSE_NODICT;
+ } else if ((!strcmp(argv[i], "-version")) ||
+ (!strcmp(argv[i], "--version"))) {
+ showVersion(argv[0]);
+ version = 1;
+ } else if ((!strcmp(argv[i], "-noout")) ||
+ (!strcmp(argv[i], "--noout")))
+ noout++;
+#ifdef LIBXML_OUTPUT_ENABLED
+ else if ((!strcmp(argv[i], "-o")) ||
+ (!strcmp(argv[i], "-output")) ||
+ (!strcmp(argv[i], "--output"))) {
+ i++;
+ output = argv[i];
+ }
+#endif /* LIBXML_OUTPUT_ENABLED */
+ else if ((!strcmp(argv[i], "-htmlout")) ||
+ (!strcmp(argv[i], "--htmlout")))
+ htmlout++;
+ else if ((!strcmp(argv[i], "-nowrap")) ||
+ (!strcmp(argv[i], "--nowrap")))
+ nowrap++;
+#ifdef LIBXML_HTML_ENABLED
+ else if ((!strcmp(argv[i], "-html")) ||
+ (!strcmp(argv[i], "--html"))) {
+ html++;
+ }
+ else if ((!strcmp(argv[i], "-xmlout")) ||
+ (!strcmp(argv[i], "--xmlout"))) {
+ xmlout++;
+ }
+#endif /* LIBXML_HTML_ENABLED */
+ else if ((!strcmp(argv[i], "-loaddtd")) ||
+ (!strcmp(argv[i], "--loaddtd"))) {
+ loaddtd++;
+ options |= XML_PARSE_DTDLOAD;
+ } else if ((!strcmp(argv[i], "-dtdattr")) ||
+ (!strcmp(argv[i], "--dtdattr"))) {
+ loaddtd++;
+ dtdattrs++;
+ options |= XML_PARSE_DTDATTR;
+ }
+#ifdef LIBXML_VALID_ENABLED
+ else if ((!strcmp(argv[i], "-valid")) ||
+ (!strcmp(argv[i], "--valid"))) {
+ valid++;
+ options |= XML_PARSE_DTDVALID;
+ } else if ((!strcmp(argv[i], "-postvalid")) ||
+ (!strcmp(argv[i], "--postvalid"))) {
+ postvalid++;
+ loaddtd++;
+ options |= XML_PARSE_DTDLOAD;
+ } else if ((!strcmp(argv[i], "-dtdvalid")) ||
+ (!strcmp(argv[i], "--dtdvalid"))) {
+ i++;
+ dtdvalid = argv[i];
+ loaddtd++;
+ options |= XML_PARSE_DTDLOAD;
+ } else if ((!strcmp(argv[i], "-dtdvalidfpi")) ||
+ (!strcmp(argv[i], "--dtdvalidfpi"))) {
+ i++;
+ dtdvalidfpi = argv[i];
+ loaddtd++;
+ options |= XML_PARSE_DTDLOAD;
+ }
+#endif /* LIBXML_VALID_ENABLED */
+ else if ((!strcmp(argv[i], "-dropdtd")) ||
+ (!strcmp(argv[i], "--dropdtd")))
+ dropdtd++;
+ else if ((!strcmp(argv[i], "-insert")) ||
+ (!strcmp(argv[i], "--insert")))
+ insert++;
+ else if ((!strcmp(argv[i], "-timing")) ||
+ (!strcmp(argv[i], "--timing")))
+ timing++;
+ else if ((!strcmp(argv[i], "-auto")) ||
+ (!strcmp(argv[i], "--auto")))
+ generate++;
+ else if ((!strcmp(argv[i], "-repeat")) ||
+ (!strcmp(argv[i], "--repeat"))) {
+ if (repeat)
+ repeat *= 10;
+ else
+ repeat = 100;
+ }
+#ifdef LIBXML_PUSH_ENABLED
+ else if ((!strcmp(argv[i], "-push")) ||
+ (!strcmp(argv[i], "--push")))
+ push++;
+#endif /* LIBXML_PUSH_ENABLED */
+#ifdef HAVE_SYS_MMAN_H
+ else if ((!strcmp(argv[i], "-memory")) ||
+ (!strcmp(argv[i], "--memory")))
+ memory++;
+#endif
+ else if ((!strcmp(argv[i], "-testIO")) ||
+ (!strcmp(argv[i], "--testIO")))
+ testIO++;
+#ifdef LIBXML_XINCLUDE_ENABLED
+ else if ((!strcmp(argv[i], "-xinclude")) ||
+ (!strcmp(argv[i], "--xinclude"))) {
+ xinclude++;
+ options |= XML_PARSE_XINCLUDE;
+ }
+#endif
+#ifdef LIBXML_OUTPUT_ENABLED
+#ifdef HAVE_ZLIB_H
+ else if ((!strcmp(argv[i], "-compress")) ||
+ (!strcmp(argv[i], "--compress"))) {
+ compress++;
+ xmlSetCompressMode(9);
+ }
+#endif
+#endif /* LIBXML_OUTPUT_ENABLED */
+ else if ((!strcmp(argv[i], "-nowarning")) ||
+ (!strcmp(argv[i], "--nowarning"))) {
+ xmlGetWarningsDefaultValue = 0;
+ xmlPedanticParserDefault(0);
+ options |= XML_PARSE_NOWARNING;
+ }
+ else if ((!strcmp(argv[i], "-pedantic")) ||
+ (!strcmp(argv[i], "--pedantic"))) {
+ xmlGetWarningsDefaultValue = 1;
+ xmlPedanticParserDefault(1);
+ options |= XML_PARSE_PEDANTIC;
+ }
+#ifdef LIBXML_DEBUG_ENABLED
+ else if ((!strcmp(argv[i], "-debugent")) ||
+ (!strcmp(argv[i], "--debugent"))) {
+ debugent++;
+ xmlParserDebugEntities = 1;
+ }
+#endif
+#ifdef LIBXML_CATALOG_ENABLED
+ else if ((!strcmp(argv[i], "-catalogs")) ||
+ (!strcmp(argv[i], "--catalogs"))) {
+ catalogs++;
+ } else if ((!strcmp(argv[i], "-nocatalogs")) ||
+ (!strcmp(argv[i], "--nocatalogs"))) {
+ nocatalogs++;
+ }
+#endif
+ else if ((!strcmp(argv[i], "-encode")) ||
+ (!strcmp(argv[i], "--encode"))) {
+ i++;
+ encoding = argv[i];
+ /*
+ * OK it's for testing purposes
+ */
+ xmlAddEncodingAlias("UTF-8", "DVEnc");
+ }
+ else if ((!strcmp(argv[i], "-noblanks")) ||
+ (!strcmp(argv[i], "--noblanks"))) {
+ noblanks++;
+ xmlKeepBlanksDefault(0);
+ }
+ else if ((!strcmp(argv[i], "-format")) ||
+ (!strcmp(argv[i], "--format"))) {
+ noblanks++;
+#ifdef LIBXML_OUTPUT_ENABLED
+ format++;
+#endif /* LIBXML_OUTPUT_ENABLED */
+ xmlKeepBlanksDefault(0);
+ }
+#ifdef LIBXML_READER_ENABLED
+ else if ((!strcmp(argv[i], "-stream")) ||
+ (!strcmp(argv[i], "--stream"))) {
+ stream++;
+ }
+ else if ((!strcmp(argv[i], "-walker")) ||
+ (!strcmp(argv[i], "--walker"))) {
+ walker++;
+ noout++;
+ }
+#endif /* LIBXML_READER_ENABLED */
+#ifdef LIBXML_SAX1_ENABLED
+ else if ((!strcmp(argv[i], "-sax1")) ||
+ (!strcmp(argv[i], "--sax1"))) {
+ sax1++;
+ }
+#endif /* LIBXML_SAX1_ENABLED */
+ else if ((!strcmp(argv[i], "-chkregister")) ||
+ (!strcmp(argv[i], "--chkregister"))) {
+ chkregister++;
+#ifdef LIBXML_SCHEMAS_ENABLED
+ } else if ((!strcmp(argv[i], "-relaxng")) ||
+ (!strcmp(argv[i], "--relaxng"))) {
+ i++;
+ relaxng = argv[i];
+ noent++;
+ options |= XML_PARSE_NOENT;
+ } else if ((!strcmp(argv[i], "-schema")) ||
+ (!strcmp(argv[i], "--schema"))) {
+ i++;
+ schema = argv[i];
+ noent++;
+#endif
+ } else if ((!strcmp(argv[i], "-nonet")) ||
+ (!strcmp(argv[i], "--nonet"))) {
+ options |= XML_PARSE_NONET;
+#ifdef LIBXML_PATTERN_ENABLED
+ } else if ((!strcmp(argv[i], "-pattern")) ||
+ (!strcmp(argv[i], "--pattern"))) {
+ i++;
+ pattern = argv[i];
+#endif
+ } else {
+ fprintf(stderr, "Unknown option %s\n", argv[i]);
+ usage(argv[0]);
+ return(1);
+ }
+ }
+
+#ifdef LIBXML_CATALOG_ENABLED
+ if (nocatalogs == 0) {
+ if (catalogs) {
+ const char *catal;
+
+ catal = getenv("SGML_CATALOG_FILES");
+ if (catal != NULL) {
+ xmlLoadCatalogs(catal);
+ } else {
+ fprintf(stderr, "Variable $SGML_CATALOG_FILES not set\n");
+ }
+ }
+ }
+#endif
+
+#ifdef LIBXML_SAX1_ENABLED
+ if (sax1)
+ xmlSAXDefaultVersion(1);
+ else
+ xmlSAXDefaultVersion(2);
+#endif /* LIBXML_SAX1_ENABLED */
+
+ if (chkregister) {
+ xmlRegisterNodeDefault(registerNode);
+ xmlDeregisterNodeDefault(deregisterNode);
+ }
+
+ indent = getenv("XMLLINT_INDENT");
+ if(indent != NULL) {
+ xmlTreeIndentString = indent;
+ }
+
+
+ xmlLineNumbersDefault(1);
+ if (loaddtd != 0)
+ xmlLoadExtDtdDefaultValue |= XML_DETECT_IDS;
+ if (dtdattrs)
+ xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS;
+ if (noent != 0) xmlSubstituteEntitiesDefault(1);
+#ifdef LIBXML_VALID_ENABLED
+ if (valid != 0) xmlDoValidityCheckingDefaultValue = 1;
+#endif /* LIBXML_VALID_ENABLED */
+ if ((htmlout) && (!nowrap)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\n");
+ xmlGenericError(xmlGenericErrorContext,
+ "\t\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n");
+ xmlGenericError(xmlGenericErrorContext,
+ "<html><head><title>%s output</title></head>\n",
+ argv[0]);
+ xmlGenericError(xmlGenericErrorContext,
+ "<body bgcolor=\"#ffffff\"><h1 align=\"center\">%s output</h1>\n",
+ argv[0]);
+ }
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if ((relaxng != NULL)
+#ifdef LIBXML_READER_ENABLED
+ && (stream == 0)
+#endif /* LIBXML_READER_ENABLED */
+ ) {
+ xmlRelaxNGParserCtxtPtr ctxt;
+
+ /* forces loading the DTDs */
+ xmlLoadExtDtdDefaultValue |= 1;
+ options |= XML_PARSE_DTDLOAD;
+ if (timing) {
+ startTimer();
+ }
+ ctxt = xmlRelaxNGNewParserCtxt(relaxng);
+ xmlRelaxNGSetParserErrors(ctxt,
+ (xmlRelaxNGValidityErrorFunc) fprintf,
+ (xmlRelaxNGValidityWarningFunc) fprintf,
+ stderr);
+ relaxngschemas = xmlRelaxNGParse(ctxt);
+ if (relaxngschemas == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Relax-NG schema %s failed to compile\n", relaxng);
+ progresult = 5;
+ relaxng = NULL;
+ }
+ xmlRelaxNGFreeParserCtxt(ctxt);
+ if (timing) {
+ endTimer("Compiling the schemas");
+ }
+ } else if ((schema != NULL) && (stream == 0)) {
+ xmlSchemaParserCtxtPtr ctxt;
+
+ if (timing) {
+ startTimer();
+ }
+ ctxt = xmlSchemaNewParserCtxt(schema);
+ xmlSchemaSetParserErrors(ctxt,
+ (xmlSchemaValidityErrorFunc) fprintf,
+ (xmlSchemaValidityWarningFunc) fprintf,
+ stderr);
+ wxschemas = xmlSchemaParse(ctxt);
+ if (wxschemas == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "WXS schema %s failed to compile\n", schema);
+ progresult = 5;
+ schema = NULL;
+ }
+ xmlSchemaFreeParserCtxt(ctxt);
+ if (timing) {
+ endTimer("Compiling the schemas");
+ }
+ }
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#ifdef LIBXML_PATTERN_ENABLED
+ if (pattern != NULL) {
+ patternc = xmlPatterncompile((const xmlChar *) pattern, NULL, 0, NULL);
+ if (patternc == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Pattern %s failed to compile\n", pattern);
+ progresult = 7;
+ pattern = NULL;
+ }
+ }
+#endif /* LIBXML_PATTERN_ENABLED */
+ for (i = 1; i < argc ; i++) {
+ if ((!strcmp(argv[i], "-encode")) ||
+ (!strcmp(argv[i], "--encode"))) {
+ i++;
+ continue;
+ } else if ((!strcmp(argv[i], "-o")) ||
+ (!strcmp(argv[i], "-output")) ||
+ (!strcmp(argv[i], "--output"))) {
+ i++;
+ continue;
+ }
+#ifdef LIBXML_VALID_ENABLED
+ if ((!strcmp(argv[i], "-dtdvalid")) ||
+ (!strcmp(argv[i], "--dtdvalid"))) {
+ i++;
+ continue;
+ }
+ if ((!strcmp(argv[i], "-dtdvalidfpi")) ||
+ (!strcmp(argv[i], "--dtdvalidfpi"))) {
+ i++;
+ continue;
+ }
+#endif /* LIBXML_VALID_ENABLED */
+ if ((!strcmp(argv[i], "-relaxng")) ||
+ (!strcmp(argv[i], "--relaxng"))) {
+ i++;
+ continue;
+ }
+ if ((!strcmp(argv[i], "-schema")) ||
+ (!strcmp(argv[i], "--schema"))) {
+ i++;
+ continue;
+ }
+#ifdef LIBXML_PATTERN_ENABLED
+ if ((!strcmp(argv[i], "-pattern")) ||
+ (!strcmp(argv[i], "--pattern"))) {
+ i++;
+ continue;
+ }
+#endif
+ if ((timing) && (repeat))
+ startTimer();
+ /* Remember file names. "-" means stdin. <sven@zen.org> */
+ if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) {
+ if (repeat) {
+ xmlParserCtxtPtr ctxt = NULL;
+
+ for (acount = 0;acount < repeat;acount++) {
+#ifdef LIBXML_READER_ENABLED
+ if (stream != 0) {
+ streamFile(argv[i]);
+ } else {
+#endif /* LIBXML_READER_ENABLED */
+ if (ctxt == NULL)
+ ctxt = xmlNewParserCtxt();
+ parseAndPrintFile(argv[i], ctxt);
+#ifdef LIBXML_READER_ENABLED
+ }
+#endif /* LIBXML_READER_ENABLED */
+ }
+ if (ctxt != NULL)
+ xmlFreeParserCtxt(ctxt);
+ } else {
+#ifdef LIBXML_READER_ENABLED
+ if (stream != 0)
+ streamFile(argv[i]);
+ else
+#endif /* LIBXML_READER_ENABLED */
+ parseAndPrintFile(argv[i], NULL);
+ }
+ files ++;
+ if ((timing) && (repeat)) {
+ endTimer("%d iterations", repeat);
+ }
+ }
+ }
+ if (generate)
+ parseAndPrintFile(NULL, NULL);
+ if ((htmlout) && (!nowrap)) {
+ xmlGenericError(xmlGenericErrorContext, "</body></html>\n");
+ }
+ if ((files == 0) && (!generate) && (version == 0)) {
+ usage(argv[0]);
+ }
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (relaxngschemas != NULL)
+ xmlRelaxNGFree(relaxngschemas);
+ if (wxschemas != NULL)
+ xmlSchemaFree(wxschemas);
+ xmlRelaxNGCleanupTypes();
+#endif
+#ifdef LIBXML_PATTERN_ENABLED
+ if (patternc != NULL)
+ xmlFreePattern(patternc);
+#endif
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return(progresult);
+}
+
diff --git a/xmlmemory.c b/xmlmemory.c
new file mode 100644
index 0000000..927d078
--- /dev/null
+++ b/xmlmemory.c
@@ -0,0 +1,950 @@
+/*
+ * xmlmemory.c: libxml memory allocator wrapper.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#else
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#endif
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+
+
+/**
+ * MEM_LIST:
+ *
+ * keep track of all allocated blocks for error reporting
+ * Always build the memory list !
+ */
+#ifdef DEBUG_MEMORY_LOCATION
+#ifndef MEM_LIST
+#define MEM_LIST /* keep a list of all the allocated memory blocks */
+#endif
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/globals.h>
+#include <libxml/xmlerror.h>
+#include <libxml/threads.h>
+
+static int xmlMemInitialized = 0;
+static unsigned long debugMemSize = 0;
+static unsigned long debugMaxMemSize = 0;
+static xmlMutexPtr xmlMemMutex = NULL;
+
+void xmlMallocBreakpoint(void);
+
+/************************************************************************
+ * *
+ * Macros, variables and associated types *
+ * *
+ ************************************************************************/
+
+
+#ifdef xmlMalloc
+#undef xmlMalloc
+#endif
+#ifdef xmlRealloc
+#undef xmlRealloc
+#endif
+#ifdef xmlMemStrdup
+#undef xmlMemStrdup
+#endif
+
+
+/*
+ * Each of the blocks allocated begin with a header containing informations
+ */
+
+#define MEMTAG 0x5aa5
+
+#define MALLOC_TYPE 1
+#define REALLOC_TYPE 2
+#define STRDUP_TYPE 3
+#define MALLOC_ATOMIC_TYPE 4
+#define REALLOC_ATOMIC_TYPE 5
+
+typedef struct memnod {
+ unsigned int mh_tag;
+ unsigned int mh_type;
+ unsigned long mh_number;
+ size_t mh_size;
+#ifdef MEM_LIST
+ struct memnod *mh_next;
+ struct memnod *mh_prev;
+#endif
+ const char *mh_file;
+ unsigned int mh_line;
+} MEMHDR;
+
+
+#ifdef SUN4
+#define ALIGN_SIZE 16
+#else
+#define ALIGN_SIZE sizeof(double)
+#endif
+#define HDR_SIZE sizeof(MEMHDR)
+#define RESERVE_SIZE (((HDR_SIZE + (ALIGN_SIZE-1)) \
+ / ALIGN_SIZE ) * ALIGN_SIZE)
+
+
+#define CLIENT_2_HDR(a) ((MEMHDR *) (((char *) (a)) - RESERVE_SIZE))
+#define HDR_2_CLIENT(a) ((void *) (((char *) (a)) + RESERVE_SIZE))
+
+
+static unsigned int block=0;
+static unsigned int xmlMemStopAtBlock = 0;
+static void *xmlMemTraceBlockAt = NULL;
+#ifdef MEM_LIST
+static MEMHDR *memlist = NULL;
+#endif
+
+static void debugmem_tag_error(void *addr);
+#ifdef MEM_LIST
+static void debugmem_list_add(MEMHDR *);
+static void debugmem_list_delete(MEMHDR *);
+#endif
+#define Mem_Tag_Err(a) debugmem_tag_error(a);
+
+#ifndef TEST_POINT
+#define TEST_POINT
+#endif
+
+/**
+ * xmlMallocBreakpoint:
+ *
+ * Breakpoint to use in conjunction with xmlMemStopAtBlock. When the block
+ * number reaches the specified value this function is called. One need to add a breakpoint
+ * to it to get the context in which the given block is allocated.
+ */
+
+void
+xmlMallocBreakpoint(void) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlMallocBreakpoint reached on block %d\n", xmlMemStopAtBlock);
+}
+
+/**
+ * xmlMallocLoc:
+ * @size: an int specifying the size in byte to allocate.
+ * @file: the file name or NULL
+ * @line: the line number
+ *
+ * a malloc() equivalent, with logging of the allocation info.
+ *
+ * Returns a pointer to the allocated area or NULL in case of lack of memory.
+ */
+
+void *
+xmlMallocLoc(size_t size, const char * file, int line)
+{
+ MEMHDR *p;
+ void *ret;
+
+ if (!xmlMemInitialized) xmlInitMemory();
+#ifdef DEBUG_MEMORY
+ xmlGenericError(xmlGenericErrorContext,
+ "Malloc(%d)\n",size);
+#endif
+
+ TEST_POINT
+
+ p = (MEMHDR *) malloc(RESERVE_SIZE+size);
+
+ if (!p) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlMallocLoc : Out of free space\n");
+ xmlMemoryDump();
+ return(NULL);
+ }
+ p->mh_tag = MEMTAG;
+ p->mh_size = size;
+ p->mh_type = MALLOC_TYPE;
+ p->mh_file = file;
+ p->mh_line = line;
+ xmlMutexLock(xmlMemMutex);
+ p->mh_number = ++block;
+ debugMemSize += size;
+ if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
+#ifdef MEM_LIST
+ debugmem_list_add(p);
+#endif
+ xmlMutexUnlock(xmlMemMutex);
+
+#ifdef DEBUG_MEMORY
+ xmlGenericError(xmlGenericErrorContext,
+ "Malloc(%d) Ok\n",size);
+#endif
+
+ if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
+
+ ret = HDR_2_CLIENT(p);
+
+ if (xmlMemTraceBlockAt == ret) {
+ xmlGenericError(xmlGenericErrorContext,
+ "%p : Malloc(%d) Ok\n", xmlMemTraceBlockAt, size);
+ xmlMallocBreakpoint();
+ }
+
+ TEST_POINT
+
+ return(ret);
+}
+
+/**
+ * xmlMallocAtomicLoc:
+ * @size: an int specifying the size in byte to allocate.
+ * @file: the file name or NULL
+ * @line: the line number
+ *
+ * a malloc() equivalent, with logging of the allocation info.
+ *
+ * Returns a pointer to the allocated area or NULL in case of lack of memory.
+ */
+
+void *
+xmlMallocAtomicLoc(size_t size, const char * file, int line)
+{
+ MEMHDR *p;
+ void *ret;
+
+ if (!xmlMemInitialized) xmlInitMemory();
+#ifdef DEBUG_MEMORY
+ xmlGenericError(xmlGenericErrorContext,
+ "Malloc(%d)\n",size);
+#endif
+
+ TEST_POINT
+
+ p = (MEMHDR *) malloc(RESERVE_SIZE+size);
+
+ if (!p) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlMallocLoc : Out of free space\n");
+ xmlMemoryDump();
+ return(NULL);
+ }
+ p->mh_tag = MEMTAG;
+ p->mh_size = size;
+ p->mh_type = MALLOC_ATOMIC_TYPE;
+ p->mh_file = file;
+ p->mh_line = line;
+ xmlMutexLock(xmlMemMutex);
+ p->mh_number = ++block;
+ debugMemSize += size;
+ if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
+#ifdef MEM_LIST
+ debugmem_list_add(p);
+#endif
+ xmlMutexUnlock(xmlMemMutex);
+
+#ifdef DEBUG_MEMORY
+ xmlGenericError(xmlGenericErrorContext,
+ "Malloc(%d) Ok\n",size);
+#endif
+
+ if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
+
+ ret = HDR_2_CLIENT(p);
+
+ if (xmlMemTraceBlockAt == ret) {
+ xmlGenericError(xmlGenericErrorContext,
+ "%p : Malloc(%d) Ok\n", xmlMemTraceBlockAt, size);
+ xmlMallocBreakpoint();
+ }
+
+ TEST_POINT
+
+ return(ret);
+}
+/**
+ * xmlMemMalloc:
+ * @size: an int specifying the size in byte to allocate.
+ *
+ * a malloc() equivalent, with logging of the allocation info.
+ *
+ * Returns a pointer to the allocated area or NULL in case of lack of memory.
+ */
+
+void *
+xmlMemMalloc(size_t size)
+{
+ return(xmlMallocLoc(size, "none", 0));
+}
+
+/**
+ * xmlReallocLoc:
+ * @ptr: the initial memory block pointer
+ * @size: an int specifying the size in byte to allocate.
+ * @file: the file name or NULL
+ * @line: the line number
+ *
+ * a realloc() equivalent, with logging of the allocation info.
+ *
+ * Returns a pointer to the allocated area or NULL in case of lack of memory.
+ */
+
+void *
+xmlReallocLoc(void *ptr,size_t size, const char * file, int line)
+{
+ MEMHDR *p;
+ unsigned long number;
+
+ if (ptr == NULL)
+ return(xmlMallocLoc(size, file, line));
+
+ if (!xmlMemInitialized) xmlInitMemory();
+ TEST_POINT
+
+ p = CLIENT_2_HDR(ptr);
+ number = p->mh_number;
+ if (p->mh_tag != MEMTAG) {
+ Mem_Tag_Err(p);
+ goto error;
+ }
+ p->mh_tag = ~MEMTAG;
+ xmlMutexLock(xmlMemMutex);
+ debugMemSize -= p->mh_size;
+#ifdef MEM_LIST
+ debugmem_list_delete(p);
+#endif
+ xmlMutexUnlock(xmlMemMutex);
+
+ p = (MEMHDR *) realloc(p,RESERVE_SIZE+size);
+ if (!p) {
+ goto error;
+ }
+ if (xmlMemTraceBlockAt == ptr) {
+ xmlGenericError(xmlGenericErrorContext,
+ "%p : Realloced(%d -> %d) Ok\n",
+ xmlMemTraceBlockAt, p->mh_size, size);
+ xmlMallocBreakpoint();
+ }
+ p->mh_tag = MEMTAG;
+ p->mh_number = number;
+ p->mh_type = REALLOC_TYPE;
+ p->mh_size = size;
+ p->mh_file = file;
+ p->mh_line = line;
+ xmlMutexLock(xmlMemMutex);
+ debugMemSize += size;
+ if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
+#ifdef MEM_LIST
+ debugmem_list_add(p);
+#endif
+ xmlMutexUnlock(xmlMemMutex);
+
+ TEST_POINT
+
+ return(HDR_2_CLIENT(p));
+
+error:
+ return(NULL);
+}
+
+/**
+ * xmlMemRealloc:
+ * @ptr: the initial memory block pointer
+ * @size: an int specifying the size in byte to allocate.
+ *
+ * a realloc() equivalent, with logging of the allocation info.
+ *
+ * Returns a pointer to the allocated area or NULL in case of lack of memory.
+ */
+
+void *
+xmlMemRealloc(void *ptr,size_t size) {
+ return(xmlReallocLoc(ptr, size, "none", 0));
+}
+
+/**
+ * xmlMemFree:
+ * @ptr: the memory block pointer
+ *
+ * a free() equivalent, with error checking.
+ */
+void
+xmlMemFree(void *ptr)
+{
+ MEMHDR *p;
+ char *target;
+
+ if (ptr == (void *) -1) {
+ xmlGenericError(xmlGenericErrorContext,
+ "trying to free pointer from freed area\n");
+ goto error;
+ }
+
+ if (xmlMemTraceBlockAt == ptr) {
+ xmlGenericError(xmlGenericErrorContext,
+ "%p : Freed()\n", xmlMemTraceBlockAt);
+ xmlMallocBreakpoint();
+ }
+
+ TEST_POINT
+
+ target = (char *) ptr;
+
+ p = CLIENT_2_HDR(ptr);
+ if (p->mh_tag != MEMTAG) {
+ Mem_Tag_Err(p);
+ goto error;
+ }
+ p->mh_tag = ~MEMTAG;
+ memset(target, -1, p->mh_size);
+ xmlMutexLock(xmlMemMutex);
+ debugMemSize -= p->mh_size;
+#ifdef MEM_LIST
+ debugmem_list_delete(p);
+#endif
+ xmlMutexUnlock(xmlMemMutex);
+
+ free(p);
+
+ TEST_POINT
+
+ return;
+
+error:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlMemFree(%lX) error\n", (unsigned long) ptr);
+ xmlMallocBreakpoint();
+ return;
+}
+
+/**
+ * xmlMemStrdupLoc:
+ * @str: the initial string pointer
+ * @file: the file name or NULL
+ * @line: the line number
+ *
+ * a strdup() equivalent, with logging of the allocation info.
+ *
+ * Returns a pointer to the new string or NULL if allocation error occurred.
+ */
+
+char *
+xmlMemStrdupLoc(const char *str, const char *file, int line)
+{
+ char *s;
+ size_t size = strlen(str) + 1;
+ MEMHDR *p;
+
+ if (!xmlMemInitialized) xmlInitMemory();
+ TEST_POINT
+
+ p = (MEMHDR *) malloc(RESERVE_SIZE+size);
+ if (!p) {
+ goto error;
+ }
+ p->mh_tag = MEMTAG;
+ p->mh_size = size;
+ p->mh_type = STRDUP_TYPE;
+ p->mh_file = file;
+ p->mh_line = line;
+ xmlMutexLock(xmlMemMutex);
+ p->mh_number = ++block;
+ debugMemSize += size;
+ if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
+#ifdef MEM_LIST
+ debugmem_list_add(p);
+#endif
+ xmlMutexUnlock(xmlMemMutex);
+
+ s = (char *) HDR_2_CLIENT(p);
+
+ if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
+
+ if (s != NULL)
+ strcpy(s,str);
+ else
+ goto error;
+
+ TEST_POINT
+
+ if (xmlMemTraceBlockAt == s) {
+ xmlGenericError(xmlGenericErrorContext,
+ "%p : Strdup() Ok\n", xmlMemTraceBlockAt);
+ xmlMallocBreakpoint();
+ }
+
+ return(s);
+
+error:
+ return(NULL);
+}
+
+/**
+ * xmlMemoryStrdup:
+ * @str: the initial string pointer
+ *
+ * a strdup() equivalent, with logging of the allocation info.
+ *
+ * Returns a pointer to the new string or NULL if allocation error occurred.
+ */
+
+char *
+xmlMemoryStrdup(const char *str) {
+ return(xmlMemStrdupLoc(str, "none", 0));
+}
+
+/**
+ * xmlMemUsed:
+ *
+ * Provides the amount of memory currently allocated
+ *
+ * Returns an int representing the amount of memory allocated.
+ */
+
+int
+xmlMemUsed(void) {
+ return(debugMemSize);
+}
+
+#ifdef MEM_LIST
+/**
+ * xmlMemContentShow:
+ * @fp: a FILE descriptor used as the output file
+ * @p: a memory block header
+ *
+ * tries to show some content from the memory block
+ */
+
+static void
+xmlMemContentShow(FILE *fp, MEMHDR *p)
+{
+ int i,j,len = p->mh_size;
+ const char *buf = (const char *) HDR_2_CLIENT(p);
+
+ if (p == NULL) {
+ fprintf(fp, " NULL");
+ return;
+ }
+
+ for (i = 0;i < len;i++) {
+ if (buf[i] == 0) break;
+ if (!isprint((unsigned char) buf[i])) break;
+ }
+ if ((i < 4) && ((buf[i] != 0) || (i == 0))) {
+ if (len >= 4) {
+ MEMHDR *q;
+ void *cur;
+
+ for (j = 0;j < len -3;j += 4) {
+ cur = *((void **) &buf[j]);
+ q = CLIENT_2_HDR(cur);
+ p = memlist;
+ while (p != NULL) {
+ if (p == q) break;
+ p = p->mh_next;
+ }
+ if ((p != NULL) && (p == q)) {
+ fprintf(fp, " pointer to #%lu at index %d",
+ p->mh_number, j);
+ return;
+ }
+ }
+ }
+ } else if ((i == 0) && (buf[i] == 0)) {
+ fprintf(fp," null");
+ } else {
+ if (buf[i] == 0) fprintf(fp," \"%.25s\"", buf);
+ else {
+ fprintf(fp," [");
+ for (j = 0;j < i;j++)
+ fprintf(fp,"%c", buf[j]);
+ fprintf(fp,"]");
+ }
+ }
+}
+#endif
+
+/**
+ * xmlMemDisplay:
+ * @fp: a FILE descriptor used as the output file, if NULL, the result is
+ * written to the file .memorylist
+ *
+ * show in-extenso the memory blocks allocated
+ */
+
+void
+xmlMemDisplay(FILE *fp)
+{
+#ifdef MEM_LIST
+ MEMHDR *p;
+ unsigned idx;
+ int nb = 0;
+#if defined(HAVE_LOCALTIME) && defined(HAVE_STRFTIME)
+ time_t currentTime;
+ char buf[500];
+ struct tm * tstruct;
+
+ currentTime = time(NULL);
+ tstruct = localtime(&currentTime);
+ strftime(buf, sizeof(buf) - 1, "%I:%M:%S %p", tstruct);
+ fprintf(fp," %s\n\n", buf);
+#endif
+
+
+ fprintf(fp," MEMORY ALLOCATED : %lu, MAX was %lu\n",
+ debugMemSize, debugMaxMemSize);
+ fprintf(fp,"BLOCK NUMBER SIZE TYPE\n");
+ idx = 0;
+ xmlMutexLock(xmlMemMutex);
+ p = memlist;
+ while (p) {
+ fprintf(fp,"%-5u %6lu %6lu ",idx++,p->mh_number,
+ (unsigned long)p->mh_size);
+ switch (p->mh_type) {
+ case STRDUP_TYPE:fprintf(fp,"strdup() in ");break;
+ case MALLOC_TYPE:fprintf(fp,"malloc() in ");break;
+ case REALLOC_TYPE:fprintf(fp,"realloc() in ");break;
+ case MALLOC_ATOMIC_TYPE:fprintf(fp,"atomicmalloc() in ");break;
+ case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
+ default:fprintf(fp," ??? in ");break;
+ }
+ if (p->mh_file != NULL) fprintf(fp,"%s(%d)", p->mh_file, p->mh_line);
+ if (p->mh_tag != MEMTAG)
+ fprintf(fp," INVALID");
+ nb++;
+ if (nb < 100)
+ xmlMemContentShow(fp, p);
+ else
+ fprintf(fp," skip");
+
+ fprintf(fp,"\n");
+ p = p->mh_next;
+ }
+ xmlMutexUnlock(xmlMemMutex);
+#else
+ fprintf(fp,"Memory list not compiled (MEM_LIST not defined !)\n");
+#endif
+}
+
+#ifdef MEM_LIST
+
+static void debugmem_list_add(MEMHDR *p)
+{
+ p->mh_next = memlist;
+ p->mh_prev = NULL;
+ if (memlist) memlist->mh_prev = p;
+ memlist = p;
+#ifdef MEM_LIST_DEBUG
+ if (stderr)
+ Mem_Display(stderr);
+#endif
+}
+
+static void debugmem_list_delete(MEMHDR *p)
+{
+ if (p->mh_next)
+ p->mh_next->mh_prev = p->mh_prev;
+ if (p->mh_prev)
+ p->mh_prev->mh_next = p->mh_next;
+ else memlist = p->mh_next;
+#ifdef MEM_LIST_DEBUG
+ if (stderr)
+ Mem_Display(stderr);
+#endif
+}
+
+#endif
+
+/*
+ * debugmem_tag_error:
+ *
+ * internal error function.
+ */
+
+static void debugmem_tag_error(void *p)
+{
+ xmlGenericError(xmlGenericErrorContext,
+ "Memory tag error occurs :%p \n\t bye\n", p);
+#ifdef MEM_LIST
+ if (stderr)
+ xmlMemDisplay(stderr);
+#endif
+}
+
+#ifdef MEM_LIST
+static FILE *xmlMemoryDumpFile = NULL;
+#endif
+
+/**
+ * xmlMemShow:
+ * @fp: a FILE descriptor used as the output file
+ * @nr: number of entries to dump
+ *
+ * show a show display of the memory allocated, and dump
+ * the @nr last allocated areas which were not freed
+ */
+
+void
+xmlMemShow(FILE *fp, int nr ATTRIBUTE_UNUSED)
+{
+#ifdef MEM_LIST
+ MEMHDR *p;
+#endif
+
+ if (fp != NULL)
+ fprintf(fp," MEMORY ALLOCATED : %lu, MAX was %lu\n",
+ debugMemSize, debugMaxMemSize);
+#ifdef MEM_LIST
+ xmlMutexLock(xmlMemMutex);
+ if (nr > 0) {
+ fprintf(fp,"NUMBER SIZE TYPE WHERE\n");
+ p = memlist;
+ while ((p) && nr > 0) {
+ fprintf(fp,"%6lu %6lu ",p->mh_number,(unsigned long)p->mh_size);
+ switch (p->mh_type) {
+ case STRDUP_TYPE:fprintf(fp,"strdup() in ");break;
+ case MALLOC_TYPE:fprintf(fp,"malloc() in ");break;
+ case MALLOC_ATOMIC_TYPE:fprintf(fp,"atomicmalloc() in ");break;
+ case REALLOC_TYPE:fprintf(fp,"realloc() in ");break;
+ case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
+ default:fprintf(fp," ??? in ");break;
+ }
+ if (p->mh_file != NULL)
+ fprintf(fp,"%s(%d)", p->mh_file, p->mh_line);
+ if (p->mh_tag != MEMTAG)
+ fprintf(fp," INVALID");
+ xmlMemContentShow(fp, p);
+ fprintf(fp,"\n");
+ nr--;
+ p = p->mh_next;
+ }
+ }
+ xmlMutexUnlock(xmlMemMutex);
+#endif /* MEM_LIST */
+}
+
+/**
+ * xmlMemoryDump:
+ *
+ * Dump in-extenso the memory blocks allocated to the file .memorylist
+ */
+
+void
+xmlMemoryDump(void)
+{
+#ifdef MEM_LIST
+ FILE *dump;
+
+ if (debugMaxMemSize == 0)
+ return;
+ dump = fopen(".memdump", "w");
+ if (dump == NULL)
+ xmlMemoryDumpFile = stderr;
+ else xmlMemoryDumpFile = dump;
+
+ xmlMemDisplay(xmlMemoryDumpFile);
+
+ if (dump != NULL) fclose(dump);
+#endif /* MEM_LIST */
+}
+
+
+/****************************************************************
+ * *
+ * Initialization Routines *
+ * *
+ ****************************************************************/
+
+/**
+ * xmlInitMemory:
+ *
+ * Initialize the memory layer.
+ *
+ * Returns 0 on success
+ */
+int
+xmlInitMemory(void)
+{
+#ifdef HAVE_STDLIB_H
+ char *breakpoint;
+#endif
+ /*
+ This is really not good code (see Bug 130419). Suggestions for
+ improvement will be welcome!
+ */
+ if (xmlMemInitialized) return(-1);
+ xmlMemInitialized = 1;
+ xmlMemMutex = xmlNewMutex();
+
+#ifdef HAVE_STDLIB_H
+ breakpoint = getenv("XML_MEM_BREAKPOINT");
+ if (breakpoint != NULL) {
+ sscanf(breakpoint, "%ud", &xmlMemStopAtBlock);
+ }
+#endif
+#ifdef HAVE_STDLIB_H
+ breakpoint = getenv("XML_MEM_TRACE");
+ if (breakpoint != NULL) {
+ sscanf(breakpoint, "%p", &xmlMemTraceBlockAt);
+ }
+#endif
+
+#ifdef DEBUG_MEMORY
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlInitMemory() Ok\n");
+#endif
+
+ return(0);
+}
+
+/**
+ * xmlCleanupMemory:
+ *
+ * Free up all the memory associated with memorys
+ */
+void
+xmlCleanupMemory(void) {
+ if (xmlMemInitialized == 0)
+ return;
+
+ xmlFreeMutex(xmlMemMutex);
+ xmlMemMutex = NULL;
+ xmlMemInitialized = 0;
+}
+
+/**
+ * xmlMemSetup:
+ * @freeFunc: the free() function to use
+ * @mallocFunc: the malloc() function to use
+ * @reallocFunc: the realloc() function to use
+ * @strdupFunc: the strdup() function to use
+ *
+ * Override the default memory access functions with a new set
+ * This has to be called before any other libxml routines !
+ *
+ * Should this be blocked if there was already some allocations
+ * done ?
+ *
+ * Returns 0 on success
+ */
+int
+xmlMemSetup(xmlFreeFunc freeFunc, xmlMallocFunc mallocFunc,
+ xmlReallocFunc reallocFunc, xmlStrdupFunc strdupFunc) {
+ if (freeFunc == NULL)
+ return(-1);
+ if (mallocFunc == NULL)
+ return(-1);
+ if (reallocFunc == NULL)
+ return(-1);
+ if (strdupFunc == NULL)
+ return(-1);
+ xmlFree = freeFunc;
+ xmlMalloc = mallocFunc;
+ xmlMallocAtomic = mallocFunc;
+ xmlRealloc = reallocFunc;
+ xmlMemStrdup = strdupFunc;
+ return(0);
+}
+
+/**
+ * xmlMemGet:
+ * @freeFunc: place to save the free() function in use
+ * @mallocFunc: place to save the malloc() function in use
+ * @reallocFunc: place to save the realloc() function in use
+ * @strdupFunc: place to save the strdup() function in use
+ *
+ * Provides the memory access functions set currently in use
+ *
+ * Returns 0 on success
+ */
+int
+xmlMemGet(xmlFreeFunc *freeFunc, xmlMallocFunc *mallocFunc,
+ xmlReallocFunc *reallocFunc, xmlStrdupFunc *strdupFunc) {
+ if (freeFunc != NULL) *freeFunc = xmlFree;
+ if (mallocFunc != NULL) *mallocFunc = xmlMalloc;
+ if (reallocFunc != NULL) *reallocFunc = xmlRealloc;
+ if (strdupFunc != NULL) *strdupFunc = xmlMemStrdup;
+ return(0);
+}
+
+/**
+ * xmlGcMemSetup:
+ * @freeFunc: the free() function to use
+ * @mallocFunc: the malloc() function to use
+ * @mallocAtomicFunc: the malloc() function to use for atomic allocations
+ * @reallocFunc: the realloc() function to use
+ * @strdupFunc: the strdup() function to use
+ *
+ * Override the default memory access functions with a new set
+ * This has to be called before any other libxml routines !
+ * The mallocAtomicFunc is specialized for atomic block
+ * allocations (i.e. of areas useful for garbage collected memory allocators
+ *
+ * Should this be blocked if there was already some allocations
+ * done ?
+ *
+ * Returns 0 on success
+ */
+int
+xmlGcMemSetup(xmlFreeFunc freeFunc, xmlMallocFunc mallocFunc,
+ xmlMallocFunc mallocAtomicFunc, xmlReallocFunc reallocFunc,
+ xmlStrdupFunc strdupFunc) {
+ if (freeFunc == NULL)
+ return(-1);
+ if (mallocFunc == NULL)
+ return(-1);
+ if (mallocAtomicFunc == NULL)
+ return(-1);
+ if (reallocFunc == NULL)
+ return(-1);
+ if (strdupFunc == NULL)
+ return(-1);
+ xmlFree = freeFunc;
+ xmlMalloc = mallocFunc;
+ xmlMallocAtomic = mallocAtomicFunc;
+ xmlRealloc = reallocFunc;
+ xmlMemStrdup = strdupFunc;
+ return(0);
+}
+
+/**
+ * xmlGcMemGet:
+ * @freeFunc: place to save the free() function in use
+ * @mallocFunc: place to save the malloc() function in use
+ * @mallocAtomicFunc: place to save the atomic malloc() function in use
+ * @reallocFunc: place to save the realloc() function in use
+ * @strdupFunc: place to save the strdup() function in use
+ *
+ * Provides the memory access functions set currently in use
+ * The mallocAtomicFunc is specialized for atomic block
+ * allocations (i.e. of areas useful for garbage collected memory allocators
+ *
+ * Returns 0 on success
+ */
+int
+xmlGcMemGet(xmlFreeFunc *freeFunc, xmlMallocFunc *mallocFunc,
+ xmlMallocFunc *mallocAtomicFunc, xmlReallocFunc *reallocFunc,
+ xmlStrdupFunc *strdupFunc) {
+ if (freeFunc != NULL) *freeFunc = xmlFree;
+ if (mallocFunc != NULL) *mallocFunc = xmlMalloc;
+ if (mallocAtomicFunc != NULL) *mallocAtomicFunc = xmlMallocAtomic;
+ if (reallocFunc != NULL) *reallocFunc = xmlRealloc;
+ if (strdupFunc != NULL) *strdupFunc = xmlMemStrdup;
+ return(0);
+}
+
diff --git a/xmlreader.c b/xmlreader.c
new file mode 100644
index 0000000..e1c2ef8
--- /dev/null
+++ b/xmlreader.c
@@ -0,0 +1,4863 @@
+/*
+ * xmlreader.c: implements the xmlTextReader streaming node API
+ *
+ * NOTE:
+ * XmlTextReader.Normalization Property won't be supported, since
+ * it makes the parser non compliant to the XML recommendation
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+/*
+ * TODOs:
+ * - XML Schemas validation
+ * - setting(s) for NoBlanks
+ * - performances and tuning ...
+ */
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_READER_ENABLED
+#include <string.h> /* for memset() only ! */
+#include <stdarg.h>
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/xmlIO.h>
+#include <libxml/xmlreader.h>
+#include <libxml/parserInternals.h>
+#include <libxml/relaxng.h>
+#include <libxml/uri.h>
+#ifdef LIBXML_XINCLUDE_ENABLED
+#include <libxml/xinclude.h>
+#endif
+#ifdef LIBXML_PATTERN_ENABLED
+#include <libxml/pattern.h>
+#endif
+
+/* #define DEBUG_CALLBACKS */
+/* #define DEBUG_READER */
+
+/**
+ * TODO:
+ *
+ * macro to flag unimplemented blocks
+ */
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+#ifdef DEBUG_READER
+#define DUMP_READER xmlTextReaderDebug(reader);
+#else
+#define DUMP_READER
+#endif
+
+#define CHUNK_SIZE 512
+/************************************************************************
+ * *
+ * The parser: maps the Text Reader API on top of the existing *
+ * parsing routines building a tree *
+ * *
+ ************************************************************************/
+
+#define XML_TEXTREADER_INPUT 1
+#define XML_TEXTREADER_CTXT 2
+
+typedef enum {
+ XML_TEXTREADER_MODE_INITIAL = 0,
+ XML_TEXTREADER_MODE_INTERACTIVE = 1,
+ XML_TEXTREADER_MODE_ERROR = 2,
+ XML_TEXTREADER_MODE_EOF =3,
+ XML_TEXTREADER_MODE_CLOSED = 4,
+ XML_TEXTREADER_MODE_READING = 5
+} xmlTextReaderMode;
+
+typedef enum {
+ XML_TEXTREADER_NONE = -1,
+ XML_TEXTREADER_START= 0,
+ XML_TEXTREADER_ELEMENT= 1,
+ XML_TEXTREADER_END= 2,
+ XML_TEXTREADER_EMPTY= 3,
+ XML_TEXTREADER_BACKTRACK= 4,
+ XML_TEXTREADER_DONE= 5,
+ XML_TEXTREADER_ERROR= 6
+} xmlTextReaderState;
+
+typedef enum {
+ XML_TEXTREADER_NOT_VALIDATE = 0,
+ XML_TEXTREADER_VALIDATE_DTD = 1,
+ XML_TEXTREADER_VALIDATE_RNG = 2
+} xmlTextReaderValidate;
+
+struct _xmlTextReader {
+ int mode; /* the parsing mode */
+ xmlDocPtr doc; /* when walking an existing doc */
+ xmlTextReaderValidate validate;/* is there any validation */
+ int allocs; /* what structure were deallocated */
+ xmlTextReaderState state;
+ xmlParserCtxtPtr ctxt; /* the parser context */
+ xmlSAXHandlerPtr sax; /* the parser SAX callbacks */
+ xmlParserInputBufferPtr input; /* the input */
+ startElementSAXFunc startElement;/* initial SAX callbacks */
+ endElementSAXFunc endElement; /* idem */
+ startElementNsSAX2Func startElementNs;/* idem */
+ endElementNsSAX2Func endElementNs; /* idem */
+ charactersSAXFunc characters;
+ cdataBlockSAXFunc cdataBlock;
+ unsigned int base; /* base of the segment in the input */
+ unsigned int cur; /* current position in the input */
+ xmlNodePtr node; /* current node */
+ xmlNodePtr curnode;/* current attribute node */
+ int depth; /* depth of the current node */
+ xmlNodePtr faketext;/* fake xmlNs chld */
+ int preserve;/* preserve the resulting document */
+ xmlBufferPtr buffer; /* used to return const xmlChar * */
+ xmlDictPtr dict; /* the context dictionnary */
+
+ /* entity stack when traversing entities content */
+ xmlNodePtr ent; /* Current Entity Ref Node */
+ int entNr; /* Depth of the entities stack */
+ int entMax; /* Max depth of the entities stack */
+ xmlNodePtr *entTab; /* array of entities */
+
+ /* error handling */
+ xmlTextReaderErrorFunc errorFunc; /* callback function */
+ void *errorFuncArg; /* callback function user argument */
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+ /* Handling of RelaxNG validation */
+ xmlRelaxNGPtr rngSchemas; /* The Relax NG schemas */
+ xmlRelaxNGValidCtxtPtr rngValidCtxt;/* The Relax NG validation context */
+ int rngValidErrors;/* The number of errors detected */
+ xmlNodePtr rngFullNode; /* the node if RNG not progressive */
+#endif
+#ifdef LIBXML_XINCLUDE_ENABLED
+ /* Handling of XInclude processing */
+ int xinclude; /* is xinclude asked for */
+ const xmlChar * xinclude_name; /* the xinclude name from dict */
+ xmlXIncludeCtxtPtr xincctxt; /* the xinclude context */
+ int in_xinclude; /* counts for xinclude */
+#endif
+#ifdef LIBXML_PATTERN_ENABLED
+ int patternNr; /* number of preserve patterns */
+ int patternMax; /* max preserve patterns */
+ xmlPatternPtr *patternTab; /* array of preserve patterns */
+#endif
+ int preserves; /* level of preserves */
+ int parserFlags; /* the set of options set */
+ /* Structured error handling */
+ xmlStructuredErrorFunc sErrorFunc; /* callback function */
+};
+
+#define NODE_IS_EMPTY 0x1
+#define NODE_IS_PRESERVED 0x2
+#define NODE_IS_SPRESERVED 0x4
+
+/**
+ * CONSTSTR:
+ *
+ * Macro used to return an interned string
+ */
+#define CONSTSTR(str) xmlDictLookup(reader->dict, (str), -1)
+#define CONSTQSTR(p, str) xmlDictQLookup(reader->dict, (p), (str))
+
+static int xmlTextReaderReadTree(xmlTextReaderPtr reader);
+static int xmlTextReaderNextTree(xmlTextReaderPtr reader);
+
+/************************************************************************
+ * *
+ * Our own version of the freeing routines as we recycle nodes *
+ * *
+ ************************************************************************/
+/**
+ * DICT_FREE:
+ * @str: a string
+ *
+ * Free a string if it is not owned by the "dict" dictionnary in the
+ * current scope
+ */
+#define DICT_FREE(str) \
+ if ((str) && ((!dict) || \
+ (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
+ xmlFree((char *)(str));
+
+static void xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur);
+static void xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur);
+
+/**
+ * xmlFreeID:
+ * @not: A id
+ *
+ * Deallocate the memory used by an id definition
+ */
+static void
+xmlFreeID(xmlIDPtr id) {
+ xmlDictPtr dict = NULL;
+
+ if (id == NULL) return;
+
+ if (id->doc != NULL)
+ dict = id->doc->dict;
+
+ if (id->value != NULL)
+ DICT_FREE(id->value)
+ xmlFree(id);
+}
+
+/**
+ * xmlTextReaderRemoveID:
+ * @doc: the document
+ * @attr: the attribute
+ *
+ * Remove the given attribute from the ID table maintained internally.
+ *
+ * Returns -1 if the lookup failed and 0 otherwise
+ */
+static int
+xmlTextReaderRemoveID(xmlDocPtr doc, xmlAttrPtr attr) {
+ xmlIDTablePtr table;
+ xmlIDPtr id;
+ xmlChar *ID;
+
+ if (doc == NULL) return(-1);
+ if (attr == NULL) return(-1);
+ table = (xmlIDTablePtr) doc->ids;
+ if (table == NULL)
+ return(-1);
+
+ if (attr == NULL)
+ return(-1);
+ ID = xmlNodeListGetString(doc, attr->children, 1);
+ if (ID == NULL)
+ return(-1);
+ id = xmlHashLookup(table, ID);
+ xmlFree(ID);
+ if (id == NULL || id->attr != attr) {
+ return(-1);
+ }
+ id->name = attr->name;
+ id->attr = NULL;
+ return(0);
+}
+
+/**
+ * xmlTextReaderFreeProp:
+ * @reader: the xmlTextReaderPtr used
+ * @cur: the node
+ *
+ * Free a node.
+ */
+static void
+xmlTextReaderFreeProp(xmlTextReaderPtr reader, xmlAttrPtr cur) {
+ xmlDictPtr dict;
+
+ dict = reader->ctxt->dict;
+ if (cur == NULL) return;
+
+ /* Check for ID removal -> leading to invalid references ! */
+ if ((cur->parent != NULL) && (cur->parent->doc != NULL) &&
+ ((cur->parent->doc->intSubset != NULL) ||
+ (cur->parent->doc->extSubset != NULL))) {
+ if (xmlIsID(cur->parent->doc, cur->parent, cur))
+ xmlTextReaderRemoveID(cur->parent->doc, cur);
+ }
+ if (cur->children != NULL)
+ xmlTextReaderFreeNodeList(reader, cur->children);
+
+ DICT_FREE(cur->name);
+ if ((reader != NULL) && (reader->ctxt != NULL) &&
+ (reader->ctxt->freeAttrsNr < 100)) {
+ cur->next = reader->ctxt->freeAttrs;
+ reader->ctxt->freeAttrs = cur;
+ reader->ctxt->freeAttrsNr++;
+ } else {
+ xmlFree(cur);
+ }
+}
+
+/**
+ * xmlTextReaderFreePropList:
+ * @reader: the xmlTextReaderPtr used
+ * @cur: the first property in the list
+ *
+ * Free a property and all its siblings, all the children are freed too.
+ */
+static void
+xmlTextReaderFreePropList(xmlTextReaderPtr reader, xmlAttrPtr cur) {
+ xmlAttrPtr next;
+ if (cur == NULL) return;
+ while (cur != NULL) {
+ next = cur->next;
+ xmlTextReaderFreeProp(reader, cur);
+ cur = next;
+ }
+}
+
+/**
+ * xmlTextReaderFreeNodeList:
+ * @reader: the xmlTextReaderPtr used
+ * @cur: the first node in the list
+ *
+ * Free a node and all its siblings, this is a recursive behaviour, all
+ * the children are freed too.
+ */
+static void
+xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur) {
+ xmlNodePtr next;
+ xmlDictPtr dict;
+
+ dict = reader->ctxt->dict;
+ if (cur == NULL) return;
+ if (cur->type == XML_NAMESPACE_DECL) {
+ xmlFreeNsList((xmlNsPtr) cur);
+ return;
+ }
+ if ((cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE)) {
+ xmlFreeDoc((xmlDocPtr) cur);
+ return;
+ }
+ while (cur != NULL) {
+ next = cur->next;
+ /* unroll to speed up freeing the document */
+ if (cur->type != XML_DTD_NODE) {
+
+ if ((cur->children != NULL) &&
+ (cur->type != XML_ENTITY_REF_NODE)) {
+ if (cur->children->parent == cur)
+ xmlTextReaderFreeNodeList(reader, cur->children);
+ cur->children = NULL;
+ }
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_XINCLUDE_START) ||
+ (cur->type == XML_XINCLUDE_END)) &&
+ (cur->properties != NULL))
+ xmlTextReaderFreePropList(reader, cur->properties);
+ if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->type != XML_XINCLUDE_START) &&
+ (cur->type != XML_XINCLUDE_END) &&
+ (cur->type != XML_ENTITY_REF_NODE)) {
+ DICT_FREE(cur->content);
+ }
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_XINCLUDE_START) ||
+ (cur->type == XML_XINCLUDE_END)) &&
+ (cur->nsDef != NULL))
+ xmlFreeNsList(cur->nsDef);
+
+ /*
+ * we don't free element names here they are interned now
+ */
+ if ((cur->type != XML_TEXT_NODE) &&
+ (cur->type != XML_COMMENT_NODE))
+ DICT_FREE(cur->name);
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_TEXT_NODE)) &&
+ (reader != NULL) && (reader->ctxt != NULL) &&
+ (reader->ctxt->freeElemsNr < 100)) {
+ cur->next = reader->ctxt->freeElems;
+ reader->ctxt->freeElems = cur;
+ reader->ctxt->freeElemsNr++;
+ } else {
+ xmlFree(cur);
+ }
+ }
+ cur = next;
+ }
+}
+
+/**
+ * xmlTextReaderFreeNode:
+ * @reader: the xmlTextReaderPtr used
+ * @cur: the node
+ *
+ * Free a node, this is a recursive behaviour, all the children are freed too.
+ * This doesn't unlink the child from the list, use xmlUnlinkNode() first.
+ */
+static void
+xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur) {
+ xmlDictPtr dict;
+
+ dict = reader->ctxt->dict;
+ if (cur->type == XML_DTD_NODE) {
+ xmlFreeDtd((xmlDtdPtr) cur);
+ return;
+ }
+ if (cur->type == XML_NAMESPACE_DECL) {
+ xmlFreeNs((xmlNsPtr) cur);
+ return;
+ }
+ if (cur->type == XML_ATTRIBUTE_NODE) {
+ xmlTextReaderFreeProp(reader, (xmlAttrPtr) cur);
+ return;
+ }
+
+ if ((cur->children != NULL) &&
+ (cur->type != XML_ENTITY_REF_NODE)) {
+ if (cur->children->parent == cur)
+ xmlTextReaderFreeNodeList(reader, cur->children);
+ cur->children = NULL;
+ }
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_XINCLUDE_START) ||
+ (cur->type == XML_XINCLUDE_END)) &&
+ (cur->properties != NULL))
+ xmlTextReaderFreePropList(reader, cur->properties);
+ if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->type != XML_XINCLUDE_START) &&
+ (cur->type != XML_XINCLUDE_END) &&
+ (cur->type != XML_ENTITY_REF_NODE)) {
+ DICT_FREE(cur->content);
+ }
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_XINCLUDE_START) ||
+ (cur->type == XML_XINCLUDE_END)) &&
+ (cur->nsDef != NULL))
+ xmlFreeNsList(cur->nsDef);
+
+ /*
+ * we don't free names here they are interned now
+ */
+ if ((cur->type != XML_TEXT_NODE) &&
+ (cur->type != XML_COMMENT_NODE))
+ DICT_FREE(cur->name);
+ if (((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_TEXT_NODE)) &&
+ (reader != NULL) && (reader->ctxt != NULL) &&
+ (reader->ctxt->freeElemsNr < 100)) {
+ cur->next = reader->ctxt->freeElems;
+ reader->ctxt->freeElems = cur;
+ reader->ctxt->freeElemsNr++;
+ } else {
+ xmlFree(cur);
+ }
+}
+
+/**
+ * xmlTextReaderFreeIDTable:
+ * @table: An id table
+ *
+ * Deallocate the memory used by an ID hash table.
+ */
+static void
+xmlTextReaderFreeIDTable(xmlIDTablePtr table) {
+ xmlHashFree(table, (xmlHashDeallocator) xmlFreeID);
+}
+
+/**
+ * xmlTextReaderFreeDoc:
+ * @reader: the xmlTextReaderPtr used
+ * @cur: pointer to the document
+ *
+ * Free up all the structures used by a document, tree included.
+ */
+static void
+xmlTextReaderFreeDoc(xmlTextReaderPtr reader, xmlDocPtr cur) {
+ xmlDtdPtr extSubset, intSubset;
+
+ if (cur == NULL) return;
+
+ /*
+ * Do this before freeing the children list to avoid ID lookups
+ */
+ if (cur->ids != NULL) xmlTextReaderFreeIDTable((xmlIDTablePtr) cur->ids);
+ cur->ids = NULL;
+ if (cur->refs != NULL) xmlFreeRefTable((xmlRefTablePtr) cur->refs);
+ cur->refs = NULL;
+ extSubset = cur->extSubset;
+ intSubset = cur->intSubset;
+ if (intSubset == extSubset)
+ extSubset = NULL;
+ if (extSubset != NULL) {
+ xmlUnlinkNode((xmlNodePtr) cur->extSubset);
+ cur->extSubset = NULL;
+ xmlFreeDtd(extSubset);
+ }
+ if (intSubset != NULL) {
+ xmlUnlinkNode((xmlNodePtr) cur->intSubset);
+ cur->intSubset = NULL;
+ xmlFreeDtd(intSubset);
+ }
+
+ if (cur->children != NULL) xmlTextReaderFreeNodeList(reader, cur->children);
+
+ if (cur->version != NULL) xmlFree((char *) cur->version);
+ if (cur->name != NULL) xmlFree((char *) cur->name);
+ if (cur->encoding != NULL) xmlFree((char *) cur->encoding);
+ if (cur->oldNs != NULL) xmlFreeNsList(cur->oldNs);
+ if (cur->URL != NULL) xmlFree((char *) cur->URL);
+ if (cur->dict != NULL) xmlDictFree(cur->dict);
+ xmlFree(cur);
+}
+
+/************************************************************************
+ * *
+ * The reader core parser *
+ * *
+ ************************************************************************/
+#ifdef DEBUG_READER
+static void
+xmlTextReaderDebug(xmlTextReaderPtr reader) {
+ if ((reader == NULL) || (reader->ctxt == NULL)) {
+ fprintf(stderr, "xmlTextReader NULL\n");
+ return;
+ }
+ fprintf(stderr, "xmlTextReader: state %d depth %d ",
+ reader->state, reader->depth);
+ if (reader->node == NULL) {
+ fprintf(stderr, "node = NULL\n");
+ } else {
+ fprintf(stderr, "node %s\n", reader->node->name);
+ }
+ fprintf(stderr, " input: base %d, cur %d, depth %d: ",
+ reader->base, reader->cur, reader->ctxt->nodeNr);
+ if (reader->input->buffer == NULL) {
+ fprintf(stderr, "buffer is NULL\n");
+ } else {
+#ifdef LIBXML_DEBUG_ENABLED
+ xmlDebugDumpString(stderr,
+ &reader->input->buffer->content[reader->cur]);
+#endif
+ fprintf(stderr, "\n");
+ }
+}
+#endif
+
+/**
+ * xmlTextReaderEntPush:
+ * @reader: the xmlTextReaderPtr used
+ * @value: the entity reference node
+ *
+ * Pushes a new entity reference node on top of the entities stack
+ *
+ * Returns 0 in case of error, the index in the stack otherwise
+ */
+static int
+xmlTextReaderEntPush(xmlTextReaderPtr reader, xmlNodePtr value)
+{
+ if (reader->entMax <= 0) {
+ reader->entMax = 10;
+ reader->entTab = (xmlNodePtr *) xmlMalloc(reader->entMax *
+ sizeof(reader->entTab[0]));
+ if (reader->entTab == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "xmlMalloc failed !\n");
+ return (0);
+ }
+ }
+ if (reader->entNr >= reader->entMax) {
+ reader->entMax *= 2;
+ reader->entTab =
+ (xmlNodePtr *) xmlRealloc(reader->entTab,
+ reader->entMax *
+ sizeof(reader->entTab[0]));
+ if (reader->entTab == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "xmlRealloc failed !\n");
+ return (0);
+ }
+ }
+ reader->entTab[reader->entNr] = value;
+ reader->ent = value;
+ return (reader->entNr++);
+}
+
+/**
+ * xmlTextReaderEntPop:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Pops the top element entity from the entities stack
+ *
+ * Returns the entity just removed
+ */
+static xmlNodePtr
+xmlTextReaderEntPop(xmlTextReaderPtr reader)
+{
+ xmlNodePtr ret;
+
+ if (reader->entNr <= 0)
+ return (0);
+ 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;
+ return (ret);
+}
+
+/**
+ * xmlTextReaderStartElement:
+ * @ctx: the user data (XML parser context)
+ * @fullname: The element name, including namespace prefix
+ * @atts: An array of name/value attributes pairs, NULL terminated
+ *
+ * called when an opening tag has been processed.
+ */
+static void
+xmlTextReaderStartElement(void *ctx, const xmlChar *fullname,
+ const xmlChar **atts) {
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlTextReaderPtr reader = ctxt->_private;
+
+#ifdef DEBUG_CALLBACKS
+ printf("xmlTextReaderStartElement(%s)\n", fullname);
+#endif
+ if ((reader != NULL) && (reader->startElement != NULL)) {
+ reader->startElement(ctx, fullname, atts);
+ if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
+ (ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
+ (ctxt->input->cur[1] == '>'))
+ ctxt->node->extra = NODE_IS_EMPTY;
+ }
+ if (reader != NULL)
+ reader->state = XML_TEXTREADER_ELEMENT;
+}
+
+/**
+ * xmlTextReaderEndElement:
+ * @ctx: the user data (XML parser context)
+ * @fullname: The element name, including namespace prefix
+ *
+ * called when an ending tag has been processed.
+ */
+static void
+xmlTextReaderEndElement(void *ctx, const xmlChar *fullname) {
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlTextReaderPtr reader = ctxt->_private;
+
+#ifdef DEBUG_CALLBACKS
+ printf("xmlTextReaderEndElement(%s)\n", fullname);
+#endif
+ if ((reader != NULL) && (reader->endElement != NULL)) {
+ reader->endElement(ctx, fullname);
+ }
+}
+
+/**
+ * xmlTextReaderStartElementNs:
+ * @ctx: the user data (XML parser context)
+ * @localname: the local name of the element
+ * @prefix: the element namespace prefix if available
+ * @URI: the element namespace name if available
+ * @nb_namespaces: number of namespace definitions on that node
+ * @namespaces: pointer to the array of prefix/URI pairs namespace definitions
+ * @nb_attributes: the number of attributes on that node
+ * nb_defaulted: the number of defaulted attributes.
+ * @attributes: pointer to the array of (localname/prefix/URI/value/end)
+ * attribute values.
+ *
+ * called when an opening tag has been processed.
+ */
+static void
+xmlTextReaderStartElementNs(void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI,
+ int nb_namespaces,
+ const xmlChar **namespaces,
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlTextReaderPtr reader = ctxt->_private;
+
+#ifdef DEBUG_CALLBACKS
+ printf("xmlTextReaderStartElementNs(%s)\n", localname);
+#endif
+ if ((reader != NULL) && (reader->startElementNs != NULL)) {
+ reader->startElementNs(ctx, localname, prefix, URI, nb_namespaces,
+ namespaces, nb_attributes, nb_defaulted,
+ attributes);
+ if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
+ (ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
+ (ctxt->input->cur[1] == '>'))
+ ctxt->node->extra = NODE_IS_EMPTY;
+ }
+ if (reader != NULL)
+ reader->state = XML_TEXTREADER_ELEMENT;
+}
+
+/**
+ * xmlTextReaderEndElementNs:
+ * @ctx: the user data (XML parser context)
+ * @localname: the local name of the element
+ * @prefix: the element namespace prefix if available
+ * @URI: the element namespace name if available
+ *
+ * called when an ending tag has been processed.
+ */
+static void
+xmlTextReaderEndElementNs(void *ctx,
+ const xmlChar * localname,
+ const xmlChar * prefix,
+ const xmlChar * URI)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlTextReaderPtr reader = ctxt->_private;
+
+#ifdef DEBUG_CALLBACKS
+ printf("xmlTextReaderEndElementNs(%s)\n", localname);
+#endif
+ if ((reader != NULL) && (reader->endElementNs != NULL)) {
+ reader->endElementNs(ctx, localname, prefix, URI);
+ }
+}
+
+
+/**
+ * xmlTextReaderCharacters:
+ * @ctx: the user data (XML parser context)
+ * @ch: a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * receiving some chars from the parser.
+ */
+static void
+xmlTextReaderCharacters(void *ctx, const xmlChar *ch, int len)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlTextReaderPtr reader = ctxt->_private;
+
+#ifdef DEBUG_CALLBACKS
+ printf("xmlTextReaderCharacters()\n");
+#endif
+ if ((reader != NULL) && (reader->characters != NULL)) {
+ reader->characters(ctx, ch, len);
+ }
+}
+
+/**
+ * xmlTextReaderCDataBlock:
+ * @ctx: the user data (XML parser context)
+ * @value: The pcdata content
+ * @len: the block length
+ *
+ * called when a pcdata block has been parsed
+ */
+static void
+xmlTextReaderCDataBlock(void *ctx, const xmlChar *ch, int len)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlTextReaderPtr reader = ctxt->_private;
+
+#ifdef DEBUG_CALLBACKS
+ printf("xmlTextReaderCDataBlock()\n");
+#endif
+ if ((reader != NULL) && (reader->cdataBlock != NULL)) {
+ reader->cdataBlock(ctx, ch, len);
+ }
+}
+
+/**
+ * xmlTextReaderPushData:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Push data down the progressive parser until a significant callback
+ * got raised.
+ *
+ * Returns -1 in case of failure, 0 otherwise
+ */
+static int
+xmlTextReaderPushData(xmlTextReaderPtr reader) {
+ xmlBufferPtr inbuf;
+ int val, s;
+ xmlTextReaderState oldstate;
+
+ if ((reader->input == NULL) || (reader->input->buffer == NULL))
+ return(-1);
+
+ oldstate = reader->state;
+ reader->state = XML_TEXTREADER_NONE;
+ inbuf = reader->input->buffer;
+
+ while (reader->state == XML_TEXTREADER_NONE) {
+ if (inbuf->use < reader->cur + CHUNK_SIZE) {
+ /*
+ * Refill the buffer unless we are at the end of the stream
+ */
+ if (reader->mode != XML_TEXTREADER_MODE_EOF) {
+ val = xmlParserInputBufferRead(reader->input, 4096);
+ if ((val == 0) &&
+ (inbuf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)) {
+ if (inbuf->use == reader->cur) {
+ reader->mode = XML_TEXTREADER_MODE_EOF;
+ reader->state = oldstate;
+ }
+ } else if (val < 0) {
+ reader->mode = XML_TEXTREADER_MODE_EOF;
+ reader->state = oldstate;
+ if ((oldstate != XML_TEXTREADER_START) ||
+ (reader->ctxt->myDoc != NULL))
+ return(val);
+ } else if (val == 0) {
+ /* mark the end of the stream and process the remains */
+ reader->mode = XML_TEXTREADER_MODE_EOF;
+ break;
+ }
+
+ } else
+ break;
+ }
+ /*
+ * parse by block of CHUNK_SIZE bytes, various tests show that
+ * it's the best tradeoff at least on a 1.2GH Duron
+ */
+ if (inbuf->use >= reader->cur + CHUNK_SIZE) {
+ val = xmlParseChunk(reader->ctxt,
+ (const char *) &inbuf->content[reader->cur],
+ CHUNK_SIZE, 0);
+ reader->cur += CHUNK_SIZE;
+ if ((val != 0) && (reader->ctxt->wellFormed == 0))
+ return(-1);
+ } else {
+ s = inbuf->use - reader->cur;
+ val = xmlParseChunk(reader->ctxt,
+ (const char *) &inbuf->content[reader->cur],
+ s, 0);
+ reader->cur += s;
+ if ((val != 0) && (reader->ctxt->wellFormed == 0))
+ return(-1);
+ break;
+ }
+ }
+
+ /*
+ * Discard the consumed input when needed and possible
+ */
+ if (reader->mode == XML_TEXTREADER_MODE_INTERACTIVE) {
+ if (inbuf->alloc != XML_BUFFER_ALLOC_IMMUTABLE) {
+ if ((reader->cur >= 4096) &&
+ (inbuf->use - reader->cur <= CHUNK_SIZE)) {
+ val = xmlBufferShrink(inbuf, reader->cur);
+ if (val >= 0) {
+ reader->cur -= val;
+ }
+ }
+ }
+ }
+
+ /*
+ * At the end of the stream signal that the work is done to the Push
+ * parser.
+ */
+ else if (reader->mode == XML_TEXTREADER_MODE_EOF) {
+ if (reader->mode != XML_TEXTREADER_DONE) {
+ s = inbuf->use - reader->cur;
+ val = xmlParseChunk(reader->ctxt,
+ (const char *) &inbuf->content[reader->cur],
+ s, 1);
+ reader->cur = inbuf->use;
+ reader->mode = XML_TEXTREADER_DONE;
+ if ((val != 0) && (reader->ctxt->wellFormed == 0))
+ return(-1);
+ }
+ }
+ reader->state = oldstate;
+ return(0);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+/**
+ * xmlTextReaderValidatePush:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Push the current node for validation
+ */
+static void
+xmlTextReaderValidatePush(xmlTextReaderPtr reader ATTRIBUTE_UNUSED) {
+ xmlNodePtr node = reader->node;
+
+#ifdef LIBXML_VALID_ENABLED
+ if ((reader->validate == XML_TEXTREADER_VALIDATE_DTD) &&
+ (reader->ctxt != NULL) && (reader->ctxt->validate == 1)) {
+ if ((node->ns == NULL) || (node->ns->prefix == NULL)) {
+ reader->ctxt->valid &= xmlValidatePushElement(&reader->ctxt->vctxt,
+ reader->ctxt->myDoc, node, node->name);
+ } else {
+ /* TODO use the BuildQName interface */
+ xmlChar *qname;
+
+ qname = xmlStrdup(node->ns->prefix);
+ qname = xmlStrcat(qname, BAD_CAST ":");
+ qname = xmlStrcat(qname, node->name);
+ reader->ctxt->valid &= xmlValidatePushElement(&reader->ctxt->vctxt,
+ reader->ctxt->myDoc, node, qname);
+ if (qname != NULL)
+ xmlFree(qname);
+ }
+ }
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if ((reader->validate == XML_TEXTREADER_VALIDATE_RNG) &&
+ (reader->rngValidCtxt != NULL)) {
+ int ret;
+
+ if (reader->rngFullNode != NULL) return;
+ ret = xmlRelaxNGValidatePushElement(reader->rngValidCtxt,
+ reader->ctxt->myDoc,
+ node);
+ if (ret == 0) {
+ /*
+ * this element requires a full tree
+ */
+ node = xmlTextReaderExpand(reader);
+ if (node == NULL) {
+printf("Expand failed !\n");
+ ret = -1;
+ } else {
+ ret = xmlRelaxNGValidateFullElement(reader->rngValidCtxt,
+ reader->ctxt->myDoc,
+ node);
+ reader->rngFullNode = node;
+ }
+ }
+ if (ret != 1)
+ reader->rngValidErrors++;
+ }
+#endif
+}
+
+/**
+ * xmlTextReaderValidateCData:
+ * @reader: the xmlTextReaderPtr used
+ * @data: pointer to the CData
+ * @len: lenght of the CData block in bytes.
+ *
+ * Push some CData for validation
+ */
+static void
+xmlTextReaderValidateCData(xmlTextReaderPtr reader,
+ const xmlChar *data, int len) {
+#ifdef LIBXML_VALID_ENABLED
+ if ((reader->validate == XML_TEXTREADER_VALIDATE_DTD) &&
+ (reader->ctxt != NULL) && (reader->ctxt->validate == 1)) {
+ reader->ctxt->valid &= xmlValidatePushCData(&reader->ctxt->vctxt,
+ data, len);
+ }
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if ((reader->validate == XML_TEXTREADER_VALIDATE_RNG) &&
+ (reader->rngValidCtxt != NULL)) {
+ int ret;
+
+ if (reader->rngFullNode != NULL) return;
+ ret = xmlRelaxNGValidatePushCData(reader->rngValidCtxt, data, len);
+ if (ret != 1)
+ reader->rngValidErrors++;
+ }
+#endif
+}
+
+/**
+ * xmlTextReaderValidatePop:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Pop the current node from validation
+ */
+static void
+xmlTextReaderValidatePop(xmlTextReaderPtr reader) {
+ xmlNodePtr node = reader->node;
+
+#ifdef LIBXML_VALID_ENABLED
+ if ((reader->validate == XML_TEXTREADER_VALIDATE_DTD) &&
+ (reader->ctxt != NULL) && (reader->ctxt->validate == 1)) {
+ if ((node->ns == NULL) || (node->ns->prefix == NULL)) {
+ reader->ctxt->valid &= xmlValidatePopElement(&reader->ctxt->vctxt,
+ reader->ctxt->myDoc, node, node->name);
+ } else {
+ /* TODO use the BuildQName interface */
+ xmlChar *qname;
+
+ qname = xmlStrdup(node->ns->prefix);
+ qname = xmlStrcat(qname, BAD_CAST ":");
+ qname = xmlStrcat(qname, node->name);
+ reader->ctxt->valid &= xmlValidatePopElement(&reader->ctxt->vctxt,
+ reader->ctxt->myDoc, node, qname);
+ if (qname != NULL)
+ xmlFree(qname);
+ }
+ }
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if ((reader->validate == XML_TEXTREADER_VALIDATE_RNG) &&
+ (reader->rngValidCtxt != NULL)) {
+ int ret;
+
+ if (reader->rngFullNode != NULL) {
+ if (node == reader->rngFullNode)
+ reader->rngFullNode = NULL;
+ return;
+ }
+ ret = xmlRelaxNGValidatePopElement(reader->rngValidCtxt,
+ reader->ctxt->myDoc,
+ node);
+ if (ret != 1)
+ reader->rngValidErrors++;
+ }
+#endif
+}
+
+/**
+ * xmlTextReaderValidateEntity:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Handle the validation when an entity reference is encountered and
+ * entity substitution is not activated. As a result the parser interface
+ * must walk through the entity and do the validation calls
+ */
+static void
+xmlTextReaderValidateEntity(xmlTextReaderPtr reader) {
+ xmlNodePtr oldnode = reader->node;
+ xmlNodePtr node = reader->node;
+ xmlParserCtxtPtr ctxt = reader->ctxt;
+
+ do {
+ if (node->type == XML_ENTITY_REF_NODE) {
+ /*
+ * Case where the underlying tree is not availble, lookup the entity
+ * and walk it.
+ */
+ if ((node->children == NULL) && (ctxt->sax != NULL) &&
+ (ctxt->sax->getEntity != NULL)) {
+ node->children = (xmlNodePtr)
+ ctxt->sax->getEntity(ctxt, node->name);
+ }
+
+ if ((node->children != NULL) &&
+ (node->children->type == XML_ENTITY_DECL) &&
+ (node->children->children != NULL)) {
+ xmlTextReaderEntPush(reader, node);
+ node = node->children->children;
+ continue;
+ } else {
+ /*
+ * The error has probably be raised already.
+ */
+ if (node == oldnode)
+ break;
+ node = node->next;
+ }
+#ifdef LIBXML_REGEXP_ENABLED
+ } else if (node->type == XML_ELEMENT_NODE) {
+ reader->node = node;
+ xmlTextReaderValidatePush(reader);
+ } else if ((node->type == XML_TEXT_NODE) ||
+ (node->type == XML_CDATA_SECTION_NODE)) {
+ xmlTextReaderValidateCData(reader, node->content,
+ xmlStrlen(node->content));
+#endif
+ }
+
+ /*
+ * go to next node
+ */
+ if (node->children != NULL) {
+ node = node->children;
+ continue;
+ } else if (node->type == XML_ELEMENT_NODE) {
+ xmlTextReaderValidatePop(reader);
+ }
+ if (node->next != NULL) {
+ node = node->next;
+ continue;
+ }
+ do {
+ node = node->parent;
+ if (node->type == XML_ELEMENT_NODE) {
+ xmlNodePtr tmp;
+ if (reader->entNr == 0) {
+ while ((tmp = node->last) != NULL) {
+ if ((tmp->extra & NODE_IS_PRESERVED) == 0) {
+ xmlUnlinkNode(tmp);
+ xmlTextReaderFreeNode(reader, tmp);
+ } else
+ break;
+ }
+ }
+ reader->node = node;
+ xmlTextReaderValidatePop(reader);
+ }
+ if ((node->type == XML_ENTITY_DECL) &&
+ (reader->ent != NULL) && (reader->ent->children == node)) {
+ node = xmlTextReaderEntPop(reader);
+ }
+ if (node == oldnode)
+ break;
+ if (node->next != NULL) {
+ node = node->next;
+ break;
+ }
+ } while ((node != NULL) && (node != oldnode));
+ } while ((node != NULL) && (node != oldnode));
+ reader->node = oldnode;
+}
+#endif /* LIBXML_REGEXP_ENABLED */
+
+
+/**
+ * xmlTextReaderGetSuccessor:
+ * @cur: the current node
+ *
+ * Get the successor of a node if available.
+ *
+ * Returns the successor node or NULL
+ */
+static xmlNodePtr
+xmlTextReaderGetSuccessor(xmlNodePtr cur) {
+ if (cur == NULL) return(NULL) ; /* ERROR */
+ if (cur->next != NULL) return(cur->next) ;
+ do {
+ cur = cur->parent;
+ if (cur == NULL) return(NULL);
+ if (cur->next != NULL) return(cur->next);
+ } while (cur != NULL);
+ return(cur);
+}
+
+/**
+ * xmlTextReaderDoExpand:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Makes sure that the current node is fully read as well as all its
+ * descendant. It means the full DOM subtree must be available at the
+ * end of the call.
+ *
+ * Returns 1 if the node was expanded successfully, 0 if there is no more
+ * nodes to read, or -1 in case of error
+ */
+static int
+xmlTextReaderDoExpand(xmlTextReaderPtr reader) {
+ int val;
+
+ if ((reader == NULL) || (reader->node == NULL) || (reader->ctxt == NULL))
+ return(-1);
+ do {
+ if (reader->ctxt->instate == XML_PARSER_EOF) return(1);
+
+ if (xmlTextReaderGetSuccessor(reader->node) != NULL)
+ return(1);
+ if (reader->ctxt->nodeNr < reader->depth)
+ return(1);
+ if (reader->mode == XML_TEXTREADER_MODE_EOF)
+ return(1);
+ val = xmlTextReaderPushData(reader);
+ if (val < 0)
+ return(-1);
+ } while(reader->mode != XML_TEXTREADER_MODE_EOF);
+ return(1);
+}
+
+/**
+ * xmlTextReaderRead:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Moves the position of the current instance to the next node in
+ * the stream, exposing its properties.
+ *
+ * Returns 1 if the node was read successfully, 0 if there is no more
+ * nodes to read, or -1 in case of error
+ */
+int
+xmlTextReaderRead(xmlTextReaderPtr reader) {
+ int val, olddepth = 0;
+ xmlTextReaderState oldstate = XML_TEXTREADER_START;
+ xmlNodePtr oldnode = NULL;
+
+
+ if (reader == NULL)
+ return(-1);
+ if (reader->doc != NULL)
+ return(xmlTextReaderReadTree(reader));
+ if (reader->ctxt == NULL)
+ return(-1);
+ if (reader->ctxt->wellFormed != 1)
+ return(-1);
+
+#ifdef DEBUG_READER
+ fprintf(stderr, "\nREAD ");
+ DUMP_READER
+#endif
+ reader->curnode = NULL;
+ if (reader->mode == XML_TEXTREADER_MODE_INITIAL) {
+ reader->mode = XML_TEXTREADER_MODE_INTERACTIVE;
+ /*
+ * Initial state
+ */
+ do {
+ val = xmlTextReaderPushData(reader);
+ if (val < 0)
+ return(-1);
+ } while ((reader->ctxt->node == NULL) &&
+ ((reader->mode != XML_TEXTREADER_MODE_EOF) &&
+ (reader->mode != XML_TEXTREADER_DONE)));
+ if (reader->ctxt->node == NULL) {
+ if (reader->ctxt->myDoc != NULL) {
+ reader->node = reader->ctxt->myDoc->children;
+ }
+ if (reader->node == NULL)
+ return(-1);
+ reader->state = XML_TEXTREADER_ELEMENT;
+ } else {
+ if (reader->ctxt->myDoc != NULL) {
+ reader->node = reader->ctxt->myDoc->children;
+ }
+ if (reader->node == NULL)
+ reader->node = reader->ctxt->nodeTab[0];
+ reader->state = XML_TEXTREADER_ELEMENT;
+ }
+ reader->depth = 0;
+ goto node_found;
+ }
+ oldstate = reader->state;
+ olddepth = reader->ctxt->nodeNr;
+ oldnode = reader->node;
+
+get_next_node:
+ /*
+ * If we are not backtracking on ancestors or examined nodes,
+ * that the parser didn't finished or that we arent at the end
+ * of stream, continue processing.
+ */
+ while ((reader->node->next == NULL) &&
+ (reader->ctxt->nodeNr == olddepth) &&
+ ((oldstate == XML_TEXTREADER_BACKTRACK) ||
+ (reader->node->children == NULL) ||
+ (reader->node->type == XML_ENTITY_REF_NODE) ||
+ ((reader->node->children != NULL) &&
+ (reader->node->children->type == XML_TEXT_NODE) &&
+ (reader->node->children->next == NULL)) ||
+ (reader->node->type == XML_DTD_NODE) ||
+ (reader->node->type == XML_DOCUMENT_NODE) ||
+ (reader->node->type == XML_HTML_DOCUMENT_NODE)) &&
+ ((reader->ctxt->node == NULL) ||
+ (reader->ctxt->node == reader->node) ||
+ (reader->ctxt->node == reader->node->parent)) &&
+ (reader->ctxt->instate != XML_PARSER_EOF)) {
+ val = xmlTextReaderPushData(reader);
+ if (val < 0)
+ return(-1);
+ if (reader->node == NULL)
+ goto node_end;
+ }
+ if (oldstate != XML_TEXTREADER_BACKTRACK) {
+ if ((reader->node->children != NULL) &&
+ (reader->node->type != XML_ENTITY_REF_NODE) &&
+ (reader->node->type != XML_XINCLUDE_START) &&
+ (reader->node->type != XML_DTD_NODE)) {
+ reader->node = reader->node->children;
+ reader->depth++;
+ reader->state = XML_TEXTREADER_ELEMENT;
+ goto node_found;
+ }
+ }
+ if (reader->node->next != NULL) {
+ if ((oldstate == XML_TEXTREADER_ELEMENT) &&
+ (reader->node->type == XML_ELEMENT_NODE) &&
+ (reader->node->children == NULL) &&
+ ((reader->node->extra & NODE_IS_EMPTY) == 0)
+#ifdef LIBXML_XINCLUDE_ENABLED
+ && (reader->in_xinclude <= 0)
+#endif
+ ) {
+ reader->state = XML_TEXTREADER_END;
+ goto node_found;
+ }
+#ifdef LIBXML_REGEXP_ENABLED
+ if ((reader->validate) &&
+ (reader->node->type == XML_ELEMENT_NODE))
+ xmlTextReaderValidatePop(reader);
+#endif /* LIBXML_REGEXP_ENABLED */
+ if ((reader->preserves > 0) &&
+ (reader->node->extra & NODE_IS_SPRESERVED))
+ reader->preserves--;
+ reader->node = reader->node->next;
+ reader->state = XML_TEXTREADER_ELEMENT;
+
+ /*
+ * Cleanup of the old node
+ */
+ if ((reader->preserves == 0) &&
+#ifdef LIBXML_XINCLUDE_ENABLED
+ (reader->in_xinclude == 0) &&
+#endif
+ (reader->entNr == 0) &&
+ (reader->node->prev != NULL) &&
+ (reader->node->prev->type != XML_DTD_NODE) &&
+ (reader->entNr == 0)) {
+ xmlNodePtr tmp = reader->node->prev;
+ if ((tmp->extra & NODE_IS_PRESERVED) == 0) {
+ xmlUnlinkNode(tmp);
+ xmlTextReaderFreeNode(reader, tmp);
+ }
+ }
+
+ goto node_found;
+ }
+ if ((oldstate == XML_TEXTREADER_ELEMENT) &&
+ (reader->node->type == XML_ELEMENT_NODE) &&
+ (reader->node->children == NULL) &&
+ ((reader->node->extra & NODE_IS_EMPTY) == 0)) {;
+ reader->state = XML_TEXTREADER_END;
+ goto node_found;
+ }
+#ifdef LIBXML_REGEXP_ENABLED
+ if ((reader->validate) && (reader->node->type == XML_ELEMENT_NODE))
+ xmlTextReaderValidatePop(reader);
+#endif /* LIBXML_REGEXP_ENABLED */
+ if ((reader->preserves > 0) &&
+ (reader->node->extra & NODE_IS_SPRESERVED))
+ reader->preserves--;
+ reader->node = reader->node->parent;
+ if ((reader->node == NULL) ||
+ (reader->node->type == XML_DOCUMENT_NODE) ||
+#ifdef LIBXML_DOCB_ENABLED
+ (reader->node->type == XML_DOCB_DOCUMENT_NODE) ||
+#endif
+ (reader->node->type == XML_HTML_DOCUMENT_NODE)) {
+ if (reader->mode != XML_TEXTREADER_DONE) {
+ val = xmlParseChunk(reader->ctxt, "", 0, 1);
+ reader->mode = XML_TEXTREADER_DONE;
+ }
+ reader->node = NULL;
+ reader->depth = -1;
+
+ /*
+ * Cleanup of the old node
+ */
+ if ((reader->preserves == 0) &&
+#ifdef LIBXML_XINCLUDE_ENABLED
+ (reader->in_xinclude == 0) &&
+#endif
+ (reader->entNr == 0) &&
+ (oldnode->type != XML_DTD_NODE) &&
+ ((oldnode->extra & NODE_IS_PRESERVED) == 0) &&
+ (reader->entNr == 0)) {
+ xmlUnlinkNode(oldnode);
+ xmlTextReaderFreeNode(reader, oldnode);
+ }
+
+ goto node_end;
+ }
+ if ((reader->preserves == 0) &&
+#ifdef LIBXML_XINCLUDE_ENABLED
+ (reader->in_xinclude == 0) &&
+#endif
+ (reader->entNr == 0) &&
+ (reader->node->last != NULL) &&
+ ((reader->node->last->extra & NODE_IS_PRESERVED) == 0)) {
+ xmlNodePtr tmp = reader->node->last;
+ xmlUnlinkNode(tmp);
+ xmlTextReaderFreeNode(reader, tmp);
+ }
+ reader->depth--;
+ reader->state = XML_TEXTREADER_BACKTRACK;
+
+node_found:
+ DUMP_READER
+
+ /*
+ * If we are in the middle of a piece of CDATA make sure it's finished
+ */
+ if ((reader->node != NULL) &&
+ (reader->node->next == NULL) &&
+ ((reader->node->type == XML_TEXT_NODE) ||
+ (reader->node->type == XML_CDATA_SECTION_NODE))) {
+ xmlTextReaderExpand(reader);
+ }
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+ /*
+ * Handle XInclude if asked for
+ */
+ if ((reader->xinclude) && (reader->node != NULL) &&
+ (reader->node->type == XML_ELEMENT_NODE) &&
+ (reader->node->ns != NULL) &&
+ ((xmlStrEqual(reader->node->ns->href, XINCLUDE_NS)) ||
+ (xmlStrEqual(reader->node->ns->href, XINCLUDE_OLD_NS)))) {
+ if (reader->xincctxt == NULL) {
+ reader->xincctxt = xmlXIncludeNewContext(reader->ctxt->myDoc);
+ xmlXIncludeSetFlags(reader->xincctxt, reader->parserFlags);
+ }
+ /*
+ * expand that node and process it
+ */
+ xmlTextReaderExpand(reader);
+ xmlXIncludeProcessNode(reader->xincctxt, reader->node);
+ }
+ if (reader->node->type == XML_XINCLUDE_START) {
+ reader->in_xinclude++;
+ goto get_next_node;
+ }
+ if (reader->node->type == XML_XINCLUDE_END) {
+ reader->in_xinclude--;
+ goto get_next_node;
+ }
+#endif
+ /*
+ * Handle entities enter and exit when in entity replacement mode
+ */
+ if ((reader->node != NULL) &&
+ (reader->node->type == XML_ENTITY_REF_NODE) &&
+ (reader->ctxt != NULL) && (reader->ctxt->replaceEntities == 1)) {
+ /*
+ * Case where the underlying tree is not availble, lookup the entity
+ * and walk it.
+ */
+ if ((reader->node->children == NULL) && (reader->ctxt->sax != NULL) &&
+ (reader->ctxt->sax->getEntity != NULL)) {
+ reader->node->children = (xmlNodePtr)
+ reader->ctxt->sax->getEntity(reader->ctxt, reader->node->name);
+ }
+
+ if ((reader->node->children != NULL) &&
+ (reader->node->children->type == XML_ENTITY_DECL) &&
+ (reader->node->children->children != NULL)) {
+ xmlTextReaderEntPush(reader, reader->node);
+ reader->node = reader->node->children->children;
+ }
+#ifdef LIBXML_REGEXP_ENABLED
+ } else if ((reader->node != NULL) &&
+ (reader->node->type == XML_ENTITY_REF_NODE) &&
+ (reader->ctxt != NULL) && (reader->validate)) {
+ xmlTextReaderValidateEntity(reader);
+#endif /* LIBXML_REGEXP_ENABLED */
+ }
+ if ((reader->node != NULL) &&
+ (reader->node->type == XML_ENTITY_DECL) &&
+ (reader->ent != NULL) && (reader->ent->children == reader->node)) {
+ reader->node = xmlTextReaderEntPop(reader);
+ reader->depth++;
+ goto get_next_node;
+ }
+#ifdef LIBXML_REGEXP_ENABLED
+ if ((reader->validate) && (reader->node != NULL)) {
+ xmlNodePtr node = reader->node;
+
+ if ((node->type == XML_ELEMENT_NODE) &&
+ ((reader->state != XML_TEXTREADER_END) &&
+ (reader->state != XML_TEXTREADER_BACKTRACK))) {
+ xmlTextReaderValidatePush(reader);
+ } else if ((node->type == XML_TEXT_NODE) ||
+ (node->type == XML_CDATA_SECTION_NODE)) {
+ xmlTextReaderValidateCData(reader, node->content,
+ xmlStrlen(node->content));
+ }
+ }
+#endif /* LIBXML_REGEXP_ENABLED */
+#ifdef LIBXML_PATTERN_ENABLED
+ if ((reader->patternNr > 0) && (reader->state != XML_TEXTREADER_END) &&
+ (reader->state != XML_TEXTREADER_BACKTRACK)) {
+ int i;
+ for (i = 0;i < reader->patternNr;i++) {
+ if (xmlPatternMatch(reader->patternTab[i], reader->node) == 1) {
+ xmlTextReaderPreserve(reader);
+ break;
+ }
+ }
+ }
+#endif /* LIBXML_PATTERN_ENABLED */
+ return(1);
+node_end:
+ reader->mode = XML_TEXTREADER_DONE;
+ return(0);
+}
+
+/**
+ * xmlTextReaderReadState:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Gets the read state of the reader.
+ *
+ * Returns the state value, or -1 in case of error
+ */
+int
+xmlTextReaderReadState(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ return(reader->mode);
+}
+
+/**
+ * xmlTextReaderExpand:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Reads the contents of the current node and the full subtree. It then makes
+ * the subtree available until the next xmlTextReaderRead() call
+ *
+ * Returns a node pointer valid until the next xmlTextReaderRead() call
+ * or NULL in case of error.
+ */
+xmlNodePtr
+xmlTextReaderExpand(xmlTextReaderPtr reader) {
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ if (reader->doc != NULL)
+ return(reader->node);
+ if (reader->ctxt == NULL)
+ return(NULL);
+ if (xmlTextReaderDoExpand(reader) < 0)
+ return(NULL);
+ return(reader->node);
+}
+
+/**
+ * xmlTextReaderNext:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Skip to the node following the current one in document order while
+ * avoiding the subtree if any.
+ *
+ * Returns 1 if the node was read successfully, 0 if there is no more
+ * nodes to read, or -1 in case of error
+ */
+int
+xmlTextReaderNext(xmlTextReaderPtr reader) {
+ int ret;
+ xmlNodePtr cur;
+
+ if (reader == NULL)
+ return(-1);
+ if (reader->doc != NULL)
+ return(xmlTextReaderNextTree(reader));
+ cur = reader->node;
+ if ((cur == NULL) || (cur->type != XML_ELEMENT_NODE))
+ return(xmlTextReaderRead(reader));
+ if (reader->state == XML_TEXTREADER_END)
+ return(xmlTextReaderRead(reader));
+ if (cur->extra & NODE_IS_EMPTY)
+ return(xmlTextReaderRead(reader));
+ do {
+ ret = xmlTextReaderRead(reader);
+ if (ret != 1)
+ return(ret);
+ } while (reader->node != cur);
+ return(xmlTextReaderRead(reader));
+}
+
+/**
+ * xmlTextReaderReadInnerXml:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Reads the contents of the current node, including child nodes and markup.
+ *
+ * Returns a string containing the XML content, or NULL if the current node
+ * is neither an element nor attribute, or has no child nodes. The
+ * string must be deallocated by the caller.
+ */
+xmlChar *
+xmlTextReaderReadInnerXml(xmlTextReaderPtr reader ATTRIBUTE_UNUSED) {
+ TODO
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderReadOuterXml:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Reads the contents of the current node, including child nodes and markup.
+ *
+ * Returns a string containing the XML content, or NULL if the current node
+ * is neither an element nor attribute, or has no child nodes. The
+ * string must be deallocated by the caller.
+ */
+xmlChar *
+xmlTextReaderReadOuterXml(xmlTextReaderPtr reader ATTRIBUTE_UNUSED) {
+ TODO
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderReadString:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Reads the contents of an element or a text node as a string.
+ *
+ * Returns a string containing the contents of the Element or Text node,
+ * or NULL if the reader is positioned on any other type of node.
+ * The string must be deallocated by the caller.
+ */
+xmlChar *
+xmlTextReaderReadString(xmlTextReaderPtr reader ATTRIBUTE_UNUSED) {
+ TODO
+ return(NULL);
+}
+
+#if 0
+/**
+ * xmlTextReaderReadBase64:
+ * @reader: the xmlTextReaderPtr used
+ * @array: a byte array to store the content.
+ * @offset: the zero-based index into array where the method should
+ * begin to write.
+ * @len: the number of bytes to write.
+ *
+ * Reads and decodes the Base64 encoded contents of an element and
+ * stores the result in a byte buffer.
+ *
+ * Returns the number of bytes written to array, or zero if the current
+ * instance is not positioned on an element or -1 in case of error.
+ */
+int
+xmlTextReaderReadBase64(xmlTextReaderPtr reader,
+ unsigned char *array ATTRIBUTE_UNUSED,
+ int offset ATTRIBUTE_UNUSED,
+ int len ATTRIBUTE_UNUSED) {
+ if ((reader == NULL) || (reader->ctxt == NULL))
+ return(-1);
+ if (reader->ctxt->wellFormed != 1)
+ return(-1);
+
+ if ((reader->node == NULL) || (reader->node->type == XML_ELEMENT_NODE))
+ return(0);
+ TODO
+ return(0);
+}
+
+/**
+ * xmlTextReaderReadBinHex:
+ * @reader: the xmlTextReaderPtr used
+ * @array: a byte array to store the content.
+ * @offset: the zero-based index into array where the method should
+ * begin to write.
+ * @len: the number of bytes to write.
+ *
+ * Reads and decodes the BinHex encoded contents of an element and
+ * stores the result in a byte buffer.
+ *
+ * Returns the number of bytes written to array, or zero if the current
+ * instance is not positioned on an element or -1 in case of error.
+ */
+int
+xmlTextReaderReadBinHex(xmlTextReaderPtr reader,
+ unsigned char *array ATTRIBUTE_UNUSED,
+ int offset ATTRIBUTE_UNUSED,
+ int len ATTRIBUTE_UNUSED) {
+ if ((reader == NULL) || (reader->ctxt == NULL))
+ return(-1);
+ if (reader->ctxt->wellFormed != 1)
+ return(-1);
+
+ if ((reader->node == NULL) || (reader->node->type == XML_ELEMENT_NODE))
+ return(0);
+ TODO
+ return(0);
+}
+#endif
+
+/************************************************************************
+ * *
+ * Operating on a preparsed tree *
+ * *
+ ************************************************************************/
+static int
+xmlTextReaderNextTree(xmlTextReaderPtr reader)
+{
+ if (reader == NULL)
+ return(-1);
+
+ if (reader->state == XML_TEXTREADER_END)
+ return(0);
+
+ if (reader->node == NULL) {
+ if (reader->doc->children == NULL) {
+ reader->state = XML_TEXTREADER_END;
+ return(0);
+ }
+
+ reader->node = reader->doc->children;
+ reader->state = XML_TEXTREADER_START;
+ return(1);
+ }
+
+ if (reader->state != XML_TEXTREADER_BACKTRACK) {
+ if (reader->node->children != 0) {
+ reader->node = reader->node->children;
+ reader->depth++;
+ reader->state = XML_TEXTREADER_START;
+ return(1);
+ }
+
+ if ((reader->node->type == XML_ELEMENT_NODE) ||
+ (reader->node->type == XML_ATTRIBUTE_NODE)) {
+ reader->state = XML_TEXTREADER_BACKTRACK;
+ return(1);
+ }
+ }
+
+ if (reader->node->next != 0) {
+ reader->node = reader->node->next;
+ reader->state = XML_TEXTREADER_START;
+ return(1);
+ }
+
+ if (reader->node->parent != 0) {
+ if (reader->node->parent->type == XML_DOCUMENT_NODE) {
+ reader->state = XML_TEXTREADER_END;
+ return(0);
+ }
+
+ reader->node = reader->node->parent;
+ reader->depth--;
+ reader->state = XML_TEXTREADER_BACKTRACK;
+ return(1);
+ }
+
+ reader->state = XML_TEXTREADER_END;
+
+ return(1);
+}
+
+/**
+ * xmlTextReaderReadTree:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Moves the position of the current instance to the next node in
+ * the stream, exposing its properties.
+ *
+ * Returns 1 if the node was read successfully, 0 if there is no more
+ * nodes to read, or -1 in case of error
+ */
+static int
+xmlTextReaderReadTree(xmlTextReaderPtr reader) {
+ if (reader->state == XML_TEXTREADER_END)
+ return(0);
+
+next_node:
+ if (reader->node == NULL) {
+ if (reader->doc->children == NULL) {
+ reader->state = XML_TEXTREADER_END;
+ return(0);
+ }
+
+ reader->node = reader->doc->children;
+ reader->state = XML_TEXTREADER_START;
+ goto found_node;
+ }
+
+ if ((reader->state != XML_TEXTREADER_BACKTRACK) &&
+ (reader->node->type != XML_DTD_NODE) &&
+ (reader->node->type != XML_XINCLUDE_START) &&
+ (reader->node->type != XML_ENTITY_REF_NODE)) {
+ if (reader->node->children != NULL) {
+ reader->node = reader->node->children;
+ reader->depth++;
+ reader->state = XML_TEXTREADER_START;
+ goto found_node;
+ }
+
+ if (reader->node->type == XML_ATTRIBUTE_NODE) {
+ reader->state = XML_TEXTREADER_BACKTRACK;
+ goto found_node;
+ }
+ }
+
+ if (reader->node->next != NULL) {
+ reader->node = reader->node->next;
+ reader->state = XML_TEXTREADER_START;
+ goto found_node;
+ }
+
+ if (reader->node->parent != NULL) {
+ if ((reader->node->parent->type == XML_DOCUMENT_NODE) ||
+ (reader->node->parent->type == XML_HTML_DOCUMENT_NODE)) {
+ reader->state = XML_TEXTREADER_END;
+ return(0);
+ }
+
+ reader->node = reader->node->parent;
+ reader->depth--;
+ reader->state = XML_TEXTREADER_BACKTRACK;
+ goto found_node;
+ }
+
+ reader->state = XML_TEXTREADER_END;
+
+found_node:
+ if ((reader->node->type == XML_XINCLUDE_START) ||
+ (reader->node->type == XML_XINCLUDE_END))
+ goto next_node;
+
+ return(1);
+}
+
+/**
+ * xmlTextReaderNextSibling:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Skip to the node following the current one in document order while
+ * avoiding the subtree if any.
+ * Currently implemented only for Readers built on a document
+ *
+ * Returns 1 if the node was read successfully, 0 if there is no more
+ * nodes to read, or -1 in case of error
+ */
+int
+xmlTextReaderNextSibling(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ if (reader->doc == NULL) {
+ TODO
+ return(-1);
+ }
+
+ if (reader->state == XML_TEXTREADER_END)
+ return(0);
+
+ if (reader->node == NULL)
+ return(xmlTextReaderNextTree(reader));
+
+ if (reader->node->next != NULL) {
+ reader->node = reader->node->next;
+ reader->state = XML_TEXTREADER_START;
+ return(1);
+ }
+
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * Constructor and destructors *
+ * *
+ ************************************************************************/
+/**
+ * xmlNewTextReader:
+ * @input: the xmlParserInputBufferPtr used to read data
+ * @URI: the URI information for the source if available
+ *
+ * Create an xmlTextReader structure fed with @input
+ *
+ * Returns the new xmlTextReaderPtr or NULL in case of error
+ */
+xmlTextReaderPtr
+xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) {
+ xmlTextReaderPtr ret;
+
+ if (input == NULL)
+ return(NULL);
+ ret = xmlMalloc(sizeof(xmlTextReader));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextReader : malloc failed\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlTextReader));
+ ret->doc = NULL;
+ ret->entTab = NULL;
+ ret->entMax = 0;
+ ret->entNr = 0;
+ ret->input = input;
+ ret->buffer = xmlBufferCreateSize(100);
+ ret->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
+ if (ret->sax == NULL) {
+ xmlFree(ret);
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextReader : malloc failed\n");
+ return(NULL);
+ }
+ xmlSAXVersion(ret->sax, 2);
+ ret->startElement = ret->sax->startElement;
+ ret->sax->startElement = xmlTextReaderStartElement;
+ ret->endElement = ret->sax->endElement;
+ ret->sax->endElement = xmlTextReaderEndElement;
+#ifdef LIBXML_SAX1_ENABLED
+ if (ret->sax->initialized == XML_SAX2_MAGIC) {
+#endif /* LIBXML_SAX1_ENABLED */
+ ret->startElementNs = ret->sax->startElementNs;
+ ret->sax->startElementNs = xmlTextReaderStartElementNs;
+ ret->endElementNs = ret->sax->endElementNs;
+ ret->sax->endElementNs = xmlTextReaderEndElementNs;
+#ifdef LIBXML_SAX1_ENABLED
+ } else {
+ ret->startElementNs = NULL;
+ ret->endElementNs = NULL;
+ }
+#endif /* LIBXML_SAX1_ENABLED */
+ ret->characters = ret->sax->characters;
+ ret->sax->characters = xmlTextReaderCharacters;
+ ret->sax->ignorableWhitespace = xmlTextReaderCharacters;
+ ret->cdataBlock = ret->sax->cdataBlock;
+ ret->sax->cdataBlock = xmlTextReaderCDataBlock;
+
+ ret->mode = XML_TEXTREADER_MODE_INITIAL;
+ ret->node = NULL;
+ ret->curnode = NULL;
+ if (ret->input->buffer->use < 4) {
+ xmlParserInputBufferRead(input, 4);
+ }
+ if (ret->input->buffer->use >= 4) {
+ ret->ctxt = xmlCreatePushParserCtxt(ret->sax, NULL,
+ (const char *) ret->input->buffer->content, 4, URI);
+ ret->base = 0;
+ ret->cur = 4;
+ } else {
+ ret->ctxt = xmlCreatePushParserCtxt(ret->sax, NULL, NULL, 0, URI);
+ ret->base = 0;
+ ret->cur = 0;
+ }
+ if (ret->ctxt == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextReader : malloc failed\n");
+ xmlFree(ret->sax);
+ xmlFree(ret);
+ return(NULL);
+ }
+ ret->ctxt->_private = ret;
+ ret->ctxt->linenumbers = 1;
+ ret->ctxt->dictNames = 1;
+ ret->allocs = XML_TEXTREADER_CTXT;
+ /*
+ * use the parser dictionnary to allocate all elements and attributes names
+ */
+ ret->ctxt->docdict = 1;
+ ret->dict = ret->ctxt->dict;
+#ifdef LIBXML_XINCLUDE_ENABLED
+ ret->xinclude = 0;
+#endif
+#ifdef LIBXML_PATTERN_ENABLED
+ ret->patternMax = 0;
+ ret->patternTab = NULL;
+#endif
+ return(ret);
+}
+
+/**
+ * xmlNewTextReaderFilename:
+ * @URI: the URI of the resource to process
+ *
+ * Create an xmlTextReader structure fed with the resource at @URI
+ *
+ * Returns the new xmlTextReaderPtr or NULL in case of error
+ */
+xmlTextReaderPtr
+xmlNewTextReaderFilename(const char *URI) {
+ xmlParserInputBufferPtr input;
+ xmlTextReaderPtr ret;
+ char *directory = NULL;
+
+ input = xmlParserInputBufferCreateFilename(URI, XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return(NULL);
+ ret = xmlNewTextReader(input, URI);
+ if (ret == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return(NULL);
+ }
+ ret->allocs |= XML_TEXTREADER_INPUT;
+ if (ret->ctxt->directory == NULL)
+ directory = xmlParserGetDirectory(URI);
+ if ((ret->ctxt->directory == NULL) && (directory != NULL))
+ ret->ctxt->directory = (char *) xmlStrdup((xmlChar *) directory);
+ if (directory != NULL)
+ xmlFree(directory);
+ return(ret);
+}
+
+/**
+ * xmlFreeTextReader:
+ * @reader: the xmlTextReaderPtr
+ *
+ * Deallocate all the resources associated to the reader
+ */
+void
+xmlFreeTextReader(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return;
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (reader->rngSchemas != NULL) {
+ xmlRelaxNGFree(reader->rngSchemas);
+ reader->rngSchemas = NULL;
+ }
+ if (reader->rngValidCtxt != NULL) {
+ xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt);
+ reader->rngValidCtxt = NULL;
+ }
+#endif
+#ifdef LIBXML_XINCLUDE_ENABLED
+ if (reader->xincctxt != NULL)
+ xmlXIncludeFreeContext(reader->xincctxt);
+#endif
+#ifdef LIBXML_PATTERN_ENABLED
+ if (reader->patternTab != NULL) {
+ int i;
+ for (i = 0;i < reader->patternNr;i++) {
+ if (reader->patternTab[i] != NULL)
+ xmlFreePattern(reader->patternTab[i]);
+ }
+ xmlFree(reader->patternTab);
+ }
+#endif
+ if (reader->ctxt != NULL) {
+ if (reader->dict == reader->ctxt->dict)
+ reader->dict = NULL;
+ if (reader->ctxt->myDoc != NULL) {
+ if (reader->preserve == 0)
+ xmlTextReaderFreeDoc(reader, reader->ctxt->myDoc);
+ reader->ctxt->myDoc = NULL;
+ }
+ if ((reader->ctxt->vctxt.vstateTab != NULL) &&
+ (reader->ctxt->vctxt.vstateMax > 0)){
+ xmlFree(reader->ctxt->vctxt.vstateTab);
+ reader->ctxt->vctxt.vstateTab = 0;
+ reader->ctxt->vctxt.vstateMax = 0;
+ }
+ if (reader->allocs & XML_TEXTREADER_CTXT)
+ xmlFreeParserCtxt(reader->ctxt);
+ }
+ if (reader->sax != NULL)
+ xmlFree(reader->sax);
+ if ((reader->input != NULL) && (reader->allocs & XML_TEXTREADER_INPUT))
+ xmlFreeParserInputBuffer(reader->input);
+ if (reader->faketext != NULL) {
+ xmlFreeNode(reader->faketext);
+ }
+ if (reader->buffer != NULL)
+ xmlBufferFree(reader->buffer);
+ if (reader->entTab != NULL)
+ xmlFree(reader->entTab);
+ if (reader->dict != NULL)
+ xmlDictFree(reader->dict);
+ xmlFree(reader);
+}
+
+/************************************************************************
+ * *
+ * Methods for XmlTextReader *
+ * *
+ ************************************************************************/
+/**
+ * xmlTextReaderClose:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * This method releases any resources allocated by the current instance
+ * changes the state to Closed and close any underlying input.
+ *
+ * Returns 0 or -1 in case of error
+ */
+int
+xmlTextReaderClose(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ reader->node = NULL;
+ reader->curnode = NULL;
+ reader->mode = XML_TEXTREADER_MODE_CLOSED;
+ if (reader->ctxt != NULL) {
+ if (reader->ctxt->myDoc != NULL) {
+ if (reader->preserve == 0)
+ xmlTextReaderFreeDoc(reader, reader->ctxt->myDoc);
+ reader->ctxt->myDoc = NULL;
+ }
+ if (reader->allocs & XML_TEXTREADER_CTXT) {
+ xmlFreeParserCtxt(reader->ctxt);
+ reader->allocs -= XML_TEXTREADER_CTXT;
+ }
+ }
+ if (reader->sax != NULL) {
+ xmlFree(reader->sax);
+ reader->sax = NULL;
+ }
+ if ((reader->input != NULL) && (reader->allocs & XML_TEXTREADER_INPUT)) {
+ xmlFreeParserInputBuffer(reader->input);
+ reader->allocs -= XML_TEXTREADER_INPUT;
+ }
+ return(0);
+}
+
+/**
+ * xmlTextReaderGetAttributeNo:
+ * @reader: the xmlTextReaderPtr used
+ * @no: the zero-based index of the attribute relative to the containing element
+ *
+ * Provides the value of the attribute with the specified index relative
+ * to the containing element.
+ *
+ * Returns a string containing the value of the specified attribute, or NULL
+ * in case of error. The string must be deallocated by the caller.
+ */
+xmlChar *
+xmlTextReaderGetAttributeNo(xmlTextReaderPtr reader, int no) {
+ xmlChar *ret;
+ int i;
+ xmlAttrPtr cur;
+ xmlNsPtr ns;
+
+ if (reader == NULL)
+ return(NULL);
+ if (reader->node == NULL)
+ return(NULL);
+ if (reader->curnode != NULL)
+ return(NULL);
+ /* TODO: handle the xmlDecl */
+ if (reader->node->type != XML_ELEMENT_NODE)
+ return(NULL);
+
+ ns = reader->node->nsDef;
+ for (i = 0;(i < no) && (ns != NULL);i++) {
+ ns = ns->next;
+ }
+ if (ns != NULL)
+ return(xmlStrdup(ns->href));
+
+ cur = reader->node->properties;
+ if (cur == NULL)
+ return(NULL);
+ for (;i < no;i++) {
+ cur = cur->next;
+ if (cur == NULL)
+ return(NULL);
+ }
+ /* TODO walk the DTD if present */
+
+ ret = xmlNodeListGetString(reader->node->doc, cur->children, 1);
+ if (ret == NULL) return(xmlStrdup((xmlChar *)""));
+ return(ret);
+}
+
+/**
+ * xmlTextReaderGetAttribute:
+ * @reader: the xmlTextReaderPtr used
+ * @name: the qualified name of the attribute.
+ *
+ * Provides the value of the attribute with the specified qualified name.
+ *
+ * Returns a string containing the value of the specified attribute, or NULL
+ * in case of error. The string must be deallocated by the caller.
+ */
+xmlChar *
+xmlTextReaderGetAttribute(xmlTextReaderPtr reader, const xmlChar *name) {
+ xmlChar *prefix = NULL;
+ xmlChar *localname;
+ xmlNsPtr ns;
+ xmlChar *ret = NULL;
+
+ if ((reader == NULL) || (name == NULL))
+ return(NULL);
+ if (reader->node == NULL)
+ return(NULL);
+ if (reader->curnode != NULL)
+ return(NULL);
+
+ /* TODO: handle the xmlDecl */
+ if (reader->node->type != XML_ELEMENT_NODE)
+ 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)
+ xmlFree(localname);
+ if (prefix != NULL)
+ xmlFree(prefix);
+ return(ret);
+}
+
+
+/**
+ * xmlTextReaderGetAttributeNs:
+ * @reader: the xmlTextReaderPtr used
+ * @localName: the local name of the attribute.
+ * @namespaceURI: the namespace URI of the attribute.
+ *
+ * Provides the value of the specified attribute
+ *
+ * Returns a string containing the value of the specified attribute, or NULL
+ * in case of error. The string must be deallocated by the caller.
+ */
+xmlChar *
+xmlTextReaderGetAttributeNs(xmlTextReaderPtr reader, const xmlChar *localName,
+ const xmlChar *namespaceURI) {
+ if ((reader == NULL) || (localName == NULL))
+ return(NULL);
+ if (reader->node == NULL)
+ return(NULL);
+ if (reader->curnode != NULL)
+ return(NULL);
+
+ /* TODO: handle the xmlDecl */
+ if (reader->node->type != XML_ELEMENT_NODE)
+ return(NULL);
+
+ return(xmlGetNsProp(reader->node, localName, namespaceURI));
+}
+
+/**
+ * xmlTextReaderGetRemainder:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Method to get the remainder of the buffered XML. this method stops the
+ * parser, set its state to End Of File and return the input stream with
+ * what is left that the parser did not use.
+ *
+ * Returns the xmlParserInputBufferPtr attached to the XML or NULL
+ * in case of error.
+ */
+xmlParserInputBufferPtr
+xmlTextReaderGetRemainder(xmlTextReaderPtr reader) {
+ xmlParserInputBufferPtr ret = NULL;
+
+ if (reader == NULL)
+ return(NULL);
+ if (reader->node == NULL)
+ return(NULL);
+
+ reader->node = NULL;
+ reader->curnode = NULL;
+ reader->mode = XML_TEXTREADER_MODE_EOF;
+ if (reader->ctxt != NULL) {
+ if (reader->ctxt->myDoc != NULL) {
+ if (reader->preserve == 0)
+ xmlTextReaderFreeDoc(reader, reader->ctxt->myDoc);
+ reader->ctxt->myDoc = NULL;
+ }
+ if (reader->allocs & XML_TEXTREADER_CTXT) {
+ xmlFreeParserCtxt(reader->ctxt);
+ reader->allocs -= XML_TEXTREADER_CTXT;
+ }
+ }
+ if (reader->sax != NULL) {
+ xmlFree(reader->sax);
+ reader->sax = NULL;
+ }
+ if (reader->allocs & XML_TEXTREADER_INPUT) {
+ ret = reader->input;
+ reader->allocs -= XML_TEXTREADER_INPUT;
+ } else {
+ /*
+ * Hum, one may need to duplicate the data structure because
+ * without reference counting the input may be freed twice:
+ * - by the layer which allocated it.
+ * - by the layer to which would have been returned to.
+ */
+ TODO
+ return(NULL);
+ }
+ return(ret);
+}
+
+/**
+ * xmlTextReaderLookupNamespace:
+ * @reader: the xmlTextReaderPtr used
+ * @prefix: the prefix whose namespace URI is to be resolved. To return
+ * the default namespace, specify NULL
+ *
+ * Resolves a namespace prefix in the scope of the current element.
+ *
+ * Returns a string containing the namespace URI to which the prefix maps
+ * or NULL in case of error. The string must be deallocated by the caller.
+ */
+xmlChar *
+xmlTextReaderLookupNamespace(xmlTextReaderPtr reader, const xmlChar *prefix) {
+ xmlNsPtr ns;
+
+ if (reader == NULL)
+ return(NULL);
+ if (reader->node == NULL)
+ return(NULL);
+
+ ns = xmlSearchNs(reader->node->doc, reader->node, prefix);
+ if (ns == NULL)
+ return(NULL);
+ return(xmlStrdup(ns->href));
+}
+
+/**
+ * xmlTextReaderMoveToAttributeNo:
+ * @reader: the xmlTextReaderPtr used
+ * @no: the zero-based index of the attribute relative to the containing
+ * element.
+ *
+ * Moves the position of the current instance to the attribute with
+ * the specified index relative to the containing element.
+ *
+ * Returns 1 in case of success, -1 in case of error, 0 if not found
+ */
+int
+xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader, int no) {
+ int i;
+ xmlAttrPtr cur;
+ xmlNsPtr ns;
+
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(-1);
+ /* TODO: handle the xmlDecl */
+ if (reader->node->type != XML_ELEMENT_NODE)
+ return(-1);
+
+ reader->curnode = NULL;
+
+ ns = reader->node->nsDef;
+ for (i = 0;(i < no) && (ns != NULL);i++) {
+ ns = ns->next;
+ }
+ if (ns != NULL) {
+ reader->curnode = (xmlNodePtr) ns;
+ return(1);
+ }
+
+ cur = reader->node->properties;
+ if (cur == NULL)
+ return(0);
+ for (;i < no;i++) {
+ cur = cur->next;
+ if (cur == NULL)
+ return(0);
+ }
+ /* TODO walk the DTD if present */
+
+ reader->curnode = (xmlNodePtr) cur;
+ return(1);
+}
+
+/**
+ * xmlTextReaderMoveToAttribute:
+ * @reader: the xmlTextReaderPtr used
+ * @name: the qualified name of the attribute.
+ *
+ * Moves the position of the current instance to the attribute with
+ * the specified qualified name.
+ *
+ * Returns 1 in case of success, -1 in case of error, 0 if not found
+ */
+int
+xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader, const xmlChar *name) {
+ xmlChar *prefix = NULL;
+ xmlChar *localname;
+ xmlNsPtr ns;
+ xmlAttrPtr prop;
+
+ if ((reader == NULL) || (name == NULL))
+ return(-1);
+ if (reader->node == NULL)
+ return(-1);
+
+ /* TODO: handle the xmlDecl */
+ if (reader->node->type != XML_ELEMENT_NODE)
+ return(0);
+
+ localname = xmlSplitQName2(name, &prefix);
+ if (localname == NULL) {
+ /*
+ * Namespace default decl
+ */
+ if (xmlStrEqual(name, BAD_CAST "xmlns")) {
+ ns = reader->node->nsDef;
+ while (ns != NULL) {
+ if (ns->prefix == NULL) {
+ reader->curnode = (xmlNodePtr) ns;
+ return(1);
+ }
+ ns = ns->next;
+ }
+ return(0);
+ }
+
+ prop = reader->node->properties;
+ while (prop != NULL) {
+ /*
+ * One need to have
+ * - same attribute names
+ * - and the attribute carrying that namespace
+ */
+ if ((xmlStrEqual(prop->name, name)) &&
+ ((prop->ns == NULL) || (prop->ns->prefix == NULL))) {
+ reader->curnode = (xmlNodePtr) prop;
+ return(1);
+ }
+ prop = prop->next;
+ }
+ return(0);
+ }
+
+ /*
+ * Namespace default decl
+ */
+ if (xmlStrEqual(prefix, BAD_CAST "xmlns")) {
+ ns = reader->node->nsDef;
+ while (ns != NULL) {
+ if ((ns->prefix != NULL) && (xmlStrEqual(ns->prefix, localname))) {
+ reader->curnode = (xmlNodePtr) ns;
+ goto found;
+ }
+ ns = ns->next;
+ }
+ goto not_found;
+ }
+ prop = reader->node->properties;
+ while (prop != NULL) {
+ /*
+ * One need to have
+ * - same attribute names
+ * - and the attribute carrying that namespace
+ */
+ if ((xmlStrEqual(prop->name, localname)) &&
+ (prop->ns != NULL) && (xmlStrEqual(prop->ns->prefix, prefix))) {
+ reader->curnode = (xmlNodePtr) prop;
+ goto found;
+ }
+ prop = prop->next;
+ }
+not_found:
+ if (localname != NULL)
+ xmlFree(localname);
+ if (prefix != NULL)
+ xmlFree(prefix);
+ return(0);
+
+found:
+ if (localname != NULL)
+ xmlFree(localname);
+ if (prefix != NULL)
+ xmlFree(prefix);
+ return(1);
+}
+
+/**
+ * xmlTextReaderMoveToAttributeNs:
+ * @reader: the xmlTextReaderPtr used
+ * @localName: the local name of the attribute.
+ * @namespaceURI: the namespace URI of the attribute.
+ *
+ * Moves the position of the current instance to the attribute with the
+ * specified local name and namespace URI.
+ *
+ * Returns 1 in case of success, -1 in case of error, 0 if not found
+ */
+int
+xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
+ const xmlChar *localName, const xmlChar *namespaceURI) {
+ xmlAttrPtr prop;
+ xmlNodePtr node;
+
+ if ((reader == NULL) || (localName == NULL) || (namespaceURI == NULL))
+ return(-1);
+ if (reader->node == NULL)
+ return(-1);
+ if (reader->node->type != XML_ELEMENT_NODE)
+ return(0);
+ node = reader->node;
+
+ /*
+ * A priori reading http://www.w3.org/TR/REC-xml-names/ there is no
+ * namespace name associated to "xmlns"
+ */
+ prop = node->properties;
+ while (prop != NULL) {
+ /*
+ * One need to have
+ * - same attribute names
+ * - and the attribute carrying that namespace
+ */
+ if (xmlStrEqual(prop->name, localName) &&
+ ((prop->ns != NULL) &&
+ (xmlStrEqual(prop->ns->href, namespaceURI)))) {
+ reader->curnode = (xmlNodePtr) prop;
+ return(1);
+ }
+ prop = prop->next;
+ }
+ return(0);
+}
+
+/**
+ * xmlTextReaderMoveToFirstAttribute:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Moves the position of the current instance to the first attribute
+ * associated with the current node.
+ *
+ * Returns 1 in case of success, -1 in case of error, 0 if not found
+ */
+int
+xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(-1);
+ if (reader->node->type != XML_ELEMENT_NODE)
+ return(0);
+
+ if (reader->node->nsDef != NULL) {
+ reader->curnode = (xmlNodePtr) reader->node->nsDef;
+ return(1);
+ }
+ if (reader->node->properties != NULL) {
+ reader->curnode = (xmlNodePtr) reader->node->properties;
+ return(1);
+ }
+ return(0);
+}
+
+/**
+ * xmlTextReaderMoveToNextAttribute:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Moves the position of the current instance to the next attribute
+ * associated with the current node.
+ *
+ * Returns 1 in case of success, -1 in case of error, 0 if not found
+ */
+int
+xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(-1);
+ if (reader->node->type != XML_ELEMENT_NODE)
+ return(0);
+ if (reader->curnode == NULL)
+ return(xmlTextReaderMoveToFirstAttribute(reader));
+
+ if (reader->curnode->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) reader->curnode;
+ if (ns->next != NULL) {
+ reader->curnode = (xmlNodePtr) ns->next;
+ return(1);
+ }
+ if (reader->node->properties != NULL) {
+ reader->curnode = (xmlNodePtr) reader->node->properties;
+ return(1);
+ }
+ return(0);
+ } else if ((reader->curnode->type == XML_ATTRIBUTE_NODE) &&
+ (reader->curnode->next != NULL)) {
+ reader->curnode = reader->curnode->next;
+ return(1);
+ }
+ return(0);
+}
+
+/**
+ * xmlTextReaderMoveToElement:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Moves the position of the current instance to the node that
+ * contains the current Attribute node.
+ *
+ * Returns 1 in case of success, -1 in case of error, 0 if not moved
+ */
+int
+xmlTextReaderMoveToElement(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(-1);
+ if (reader->node->type != XML_ELEMENT_NODE)
+ return(0);
+ if (reader->curnode != NULL) {
+ reader->curnode = NULL;
+ return(1);
+ }
+ return(0);
+}
+
+/**
+ * xmlTextReaderReadAttributeValue:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Parses an attribute value into one or more Text and EntityReference nodes.
+ *
+ * Returns 1 in case of success, 0 if the reader was not positionned on an
+ * ttribute node or all the attribute values have been read, or -1
+ * in case of error.
+ */
+int
+xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(-1);
+ if (reader->curnode == NULL)
+ return(0);
+ if (reader->curnode->type == XML_ATTRIBUTE_NODE) {
+ if (reader->curnode->children == NULL)
+ return(0);
+ reader->curnode = reader->curnode->children;
+ } else if (reader->curnode->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) reader->curnode;
+
+ if (reader->faketext == NULL) {
+ reader->faketext = xmlNewDocText(reader->node->doc,
+ ns->href);
+ } else {
+ if (reader->faketext->content != NULL)
+ xmlFree(reader->faketext->content);
+ reader->faketext->content = xmlStrdup(ns->href);
+ }
+ reader->curnode = reader->faketext;
+ } else {
+ if (reader->curnode->next == NULL)
+ return(0);
+ reader->curnode = reader->curnode->next;
+ }
+ return(1);
+}
+
+/************************************************************************
+ * *
+ * Acces API to the current node *
+ * *
+ ************************************************************************/
+/**
+ * xmlTextReaderAttributeCount:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Provides the number of attributes of the current node
+ *
+ * Returns 0 i no attributes, -1 in case of error or the attribute count
+ */
+int
+xmlTextReaderAttributeCount(xmlTextReaderPtr reader) {
+ int ret;
+ xmlAttrPtr attr;
+ xmlNsPtr ns;
+ xmlNodePtr node;
+
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(0);
+
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+
+ if (node->type != XML_ELEMENT_NODE)
+ return(0);
+ if ((reader->state == XML_TEXTREADER_END) ||
+ (reader->state == XML_TEXTREADER_BACKTRACK))
+ return(0);
+ ret = 0;
+ attr = node->properties;
+ while (attr != NULL) {
+ ret++;
+ attr = attr->next;
+ }
+ ns = node->nsDef;
+ while (ns != NULL) {
+ ret++;
+ ns = ns->next;
+ }
+ return(ret);
+}
+
+/**
+ * xmlTextReaderNodeType:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Get the node type of the current node
+ * Reference:
+ * http://dotgnu.org/pnetlib-doc/System/Xml/XmlNodeType.html
+ *
+ * Returns the xmlNodeType of the current node or -1 in case of error
+ */
+int
+xmlTextReaderNodeType(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(XML_READER_TYPE_NONE);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+ switch (node->type) {
+ case XML_ELEMENT_NODE:
+ if ((reader->state == XML_TEXTREADER_END) ||
+ (reader->state == XML_TEXTREADER_BACKTRACK))
+ return(XML_READER_TYPE_END_ELEMENT);
+ return(XML_READER_TYPE_ELEMENT);
+ case XML_NAMESPACE_DECL:
+ case XML_ATTRIBUTE_NODE:
+ return(XML_READER_TYPE_ATTRIBUTE);
+ case XML_TEXT_NODE:
+ if (xmlIsBlankNode(reader->node)) {
+ if (xmlNodeGetSpacePreserve(reader->node))
+ return(XML_READER_TYPE_SIGNIFICANT_WHITESPACE);
+ else
+ return(XML_READER_TYPE_WHITESPACE);
+ } else {
+ return(XML_READER_TYPE_TEXT);
+ }
+ case XML_CDATA_SECTION_NODE:
+ return(XML_READER_TYPE_CDATA);
+ case XML_ENTITY_REF_NODE:
+ return(XML_READER_TYPE_ENTITY_REFERENCE);
+ case XML_ENTITY_NODE:
+ return(XML_READER_TYPE_ENTITY);
+ case XML_PI_NODE:
+ return(XML_READER_TYPE_PROCESSING_INSTRUCTION);
+ case XML_COMMENT_NODE:
+ return(XML_READER_TYPE_COMMENT);
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ return(XML_READER_TYPE_DOCUMENT);
+ case XML_DOCUMENT_FRAG_NODE:
+ return(XML_READER_TYPE_DOCUMENT_FRAGMENT);
+ case XML_NOTATION_NODE:
+ return(XML_READER_TYPE_NOTATION);
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DTD_NODE:
+ return(XML_READER_TYPE_DOCUMENT_TYPE);
+
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ return(XML_READER_TYPE_NONE);
+ }
+ return(-1);
+}
+
+/**
+ * xmlTextReaderIsEmptyElement:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Check if the current node is empty
+ *
+ * Returns 1 if empty, 0 if not and -1 in case of error
+ */
+int
+xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader) {
+ if ((reader == NULL) || (reader->node == NULL))
+ return(-1);
+ if (reader->node->type != XML_ELEMENT_NODE)
+ return(0);
+ if (reader->curnode != NULL)
+ return(0);
+ if (reader->node->children != NULL)
+ return(0);
+ if (reader->state == XML_TEXTREADER_END)
+ return(0);
+ if (reader->doc != NULL)
+ return(1);
+#ifdef LIBXML_XINCLUDE_ENABLED
+ if (reader->in_xinclude > 0)
+ return(1);
+#endif
+ return((reader->node->extra & NODE_IS_EMPTY) != 0);
+}
+
+/**
+ * xmlTextReaderLocalName:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The local name of the node.
+ *
+ * Returns the local name or NULL if not available
+ */
+xmlChar *
+xmlTextReaderLocalName(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+ if (node->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) node;
+ if (ns->prefix == NULL)
+ return(xmlStrdup(BAD_CAST "xmlns"));
+ else
+ return(xmlStrdup(ns->prefix));
+ }
+ if ((node->type != XML_ELEMENT_NODE) &&
+ (node->type != XML_ATTRIBUTE_NODE))
+ return(xmlTextReaderName(reader));
+ return(xmlStrdup(node->name));
+}
+
+/**
+ * xmlTextReaderConstLocalName:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The local name of the node.
+ *
+ * Returns the local name or NULL if not available, the
+ * string will be deallocated with the reader.
+ */
+const xmlChar *
+xmlTextReaderConstLocalName(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+ if (node->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) node;
+ if (ns->prefix == NULL)
+ return(CONSTSTR(BAD_CAST "xmlns"));
+ else
+ return(ns->prefix);
+ }
+ if ((node->type != XML_ELEMENT_NODE) &&
+ (node->type != XML_ATTRIBUTE_NODE))
+ return(xmlTextReaderConstName(reader));
+ return(node->name);
+}
+
+/**
+ * xmlTextReaderName:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The qualified name of the node, equal to Prefix :LocalName.
+ *
+ * Returns the local name or NULL if not available
+ */
+xmlChar *
+xmlTextReaderName(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ xmlChar *ret;
+
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+ switch (node->type) {
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ if ((node->ns == NULL) ||
+ (node->ns->prefix == NULL))
+ return(xmlStrdup(node->name));
+
+ ret = xmlStrdup(node->ns->prefix);
+ ret = xmlStrcat(ret, BAD_CAST ":");
+ ret = xmlStrcat(ret, node->name);
+ return(ret);
+ case XML_TEXT_NODE:
+ return(xmlStrdup(BAD_CAST "#text"));
+ case XML_CDATA_SECTION_NODE:
+ return(xmlStrdup(BAD_CAST "#cdata-section"));
+ case XML_ENTITY_NODE:
+ case XML_ENTITY_REF_NODE:
+ return(xmlStrdup(node->name));
+ case XML_PI_NODE:
+ return(xmlStrdup(node->name));
+ case XML_COMMENT_NODE:
+ return(xmlStrdup(BAD_CAST "#comment"));
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ return(xmlStrdup(BAD_CAST "#document"));
+ case XML_DOCUMENT_FRAG_NODE:
+ return(xmlStrdup(BAD_CAST "#document-fragment"));
+ case XML_NOTATION_NODE:
+ return(xmlStrdup(node->name));
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DTD_NODE:
+ return(xmlStrdup(node->name));
+ case XML_NAMESPACE_DECL: {
+ xmlNsPtr ns = (xmlNsPtr) node;
+
+ ret = xmlStrdup(BAD_CAST "xmlns");
+ if (ns->prefix == NULL)
+ return(ret);
+ ret = xmlStrcat(ret, BAD_CAST ":");
+ ret = xmlStrcat(ret, ns->prefix);
+ return(ret);
+ }
+
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ return(NULL);
+ }
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderConstName:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The qualified name of the node, equal to Prefix :LocalName.
+ *
+ * Returns the local name or NULL if not available, the string is
+ * deallocated with the reader.
+ */
+const xmlChar *
+xmlTextReaderConstName(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+ switch (node->type) {
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ if ((node->ns == NULL) ||
+ (node->ns->prefix == NULL))
+ return(node->name);
+ return(CONSTQSTR(node->ns->prefix, node->name));
+ case XML_TEXT_NODE:
+ return(CONSTSTR(BAD_CAST "#text"));
+ case XML_CDATA_SECTION_NODE:
+ return(CONSTSTR(BAD_CAST "#cdata-section"));
+ case XML_ENTITY_NODE:
+ case XML_ENTITY_REF_NODE:
+ return(CONSTSTR(node->name));
+ case XML_PI_NODE:
+ return(CONSTSTR(node->name));
+ case XML_COMMENT_NODE:
+ return(CONSTSTR(BAD_CAST "#comment"));
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ return(CONSTSTR(BAD_CAST "#document"));
+ case XML_DOCUMENT_FRAG_NODE:
+ return(CONSTSTR(BAD_CAST "#document-fragment"));
+ case XML_NOTATION_NODE:
+ return(CONSTSTR(node->name));
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DTD_NODE:
+ return(CONSTSTR(node->name));
+ case XML_NAMESPACE_DECL: {
+ xmlNsPtr ns = (xmlNsPtr) node;
+
+ if (ns->prefix == NULL)
+ return(CONSTSTR(BAD_CAST "xmlns"));
+ return(CONSTQSTR(BAD_CAST "xmlns", ns->prefix));
+ }
+
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ return(NULL);
+ }
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderPrefix:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * A shorthand reference to the namespace associated with the node.
+ *
+ * Returns the prefix or NULL if not available
+ */
+xmlChar *
+xmlTextReaderPrefix(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+ if (node->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) node;
+ if (ns->prefix == NULL)
+ return(NULL);
+ return(xmlStrdup(BAD_CAST "xmlns"));
+ }
+ if ((node->type != XML_ELEMENT_NODE) &&
+ (node->type != XML_ATTRIBUTE_NODE))
+ return(NULL);
+ if ((node->ns != NULL) && (node->ns->prefix != NULL))
+ return(xmlStrdup(node->ns->prefix));
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderConstPrefix:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * A shorthand reference to the namespace associated with the node.
+ *
+ * Returns the prefix or NULL if not available, the string is deallocated
+ * with the reader.
+ */
+const xmlChar *
+xmlTextReaderConstPrefix(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+ if (node->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) node;
+ if (ns->prefix == NULL)
+ return(NULL);
+ return(CONSTSTR(BAD_CAST "xmlns"));
+ }
+ if ((node->type != XML_ELEMENT_NODE) &&
+ (node->type != XML_ATTRIBUTE_NODE))
+ return(NULL);
+ if ((node->ns != NULL) && (node->ns->prefix != NULL))
+ return(CONSTSTR(node->ns->prefix));
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderNamespaceUri:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The URI defining the namespace associated with the node.
+ *
+ * Returns the namespace URI or NULL if not available
+ */
+xmlChar *
+xmlTextReaderNamespaceUri(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+ if (node->type == XML_NAMESPACE_DECL)
+ return(xmlStrdup(BAD_CAST "http://www.w3.org/2000/xmlns/"));
+ if ((node->type != XML_ELEMENT_NODE) &&
+ (node->type != XML_ATTRIBUTE_NODE))
+ return(NULL);
+ if (node->ns != NULL)
+ return(xmlStrdup(node->ns->href));
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderConstNamespaceUri:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The URI defining the namespace associated with the node.
+ *
+ * Returns the namespace URI or NULL if not available, the string
+ * will be deallocated with the reader
+ */
+const xmlChar *
+xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+ if (node->type == XML_NAMESPACE_DECL)
+ return(CONSTSTR(BAD_CAST "http://www.w3.org/2000/xmlns/"));
+ if ((node->type != XML_ELEMENT_NODE) &&
+ (node->type != XML_ATTRIBUTE_NODE))
+ return(NULL);
+ if (node->ns != NULL)
+ return(CONSTSTR(node->ns->href));
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderBaseUri:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The base URI of the node.
+ *
+ * Returns the base URI or NULL if not available
+ */
+xmlChar *
+xmlTextReaderBaseUri(xmlTextReaderPtr reader) {
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ return(xmlNodeGetBase(NULL, reader->node));
+}
+
+/**
+ * xmlTextReaderConstBaseUri:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The base URI of the node.
+ *
+ * Returns the base URI or NULL if not available, the string
+ * will be deallocated with the reader
+ */
+const xmlChar *
+xmlTextReaderConstBaseUri(xmlTextReaderPtr reader) {
+ xmlChar *tmp;
+ const xmlChar *ret;
+
+ if ((reader == NULL) || (reader->node == NULL))
+ return(NULL);
+ tmp = xmlNodeGetBase(NULL, reader->node);
+ if (tmp == NULL)
+ return(NULL);
+ ret = CONSTSTR(tmp);
+ xmlFree(tmp);
+ return(ret);
+}
+
+/**
+ * xmlTextReaderDepth:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The depth of the node in the tree.
+ *
+ * Returns the depth or -1 in case of error
+ */
+int
+xmlTextReaderDepth(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(0);
+
+ if (reader->curnode != NULL) {
+ if ((reader->curnode->type == XML_ATTRIBUTE_NODE) ||
+ (reader->curnode->type == XML_NAMESPACE_DECL))
+ return(reader->depth + 1);
+ return(reader->depth + 2);
+ }
+ return(reader->depth);
+}
+
+/**
+ * xmlTextReaderHasAttributes:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Whether the node has attributes.
+ *
+ * Returns 1 if true, 0 if false, and -1 in case or error
+ */
+int
+xmlTextReaderHasAttributes(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(0);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+
+ if ((node->type == XML_ELEMENT_NODE) &&
+ (node->properties != NULL))
+ return(1);
+ /* TODO: handle the xmlDecl */
+ return(0);
+}
+
+/**
+ * xmlTextReaderHasValue:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Whether the node can have a text value.
+ *
+ * Returns 1 if true, 0 if false, and -1 in case or error
+ */
+int
+xmlTextReaderHasValue(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if (reader == NULL)
+ return(-1);
+ if (reader->node == NULL)
+ return(0);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+
+ switch (node->type) {
+ case XML_ATTRIBUTE_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_NAMESPACE_DECL:
+ return(1);
+ default:
+ break;
+ }
+ return(0);
+}
+
+/**
+ * xmlTextReaderValue:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Provides the text value of the node if present
+ *
+ * Returns the string or NULL if not available. The result must be deallocated
+ * with xmlFree()
+ */
+xmlChar *
+xmlTextReaderValue(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if (reader == NULL)
+ return(NULL);
+ if (reader->node == NULL)
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+
+ switch (node->type) {
+ case XML_NAMESPACE_DECL:
+ return(xmlStrdup(((xmlNsPtr) node)->href));
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) node;
+
+ if (attr->parent != NULL)
+ return (xmlNodeListGetString
+ (attr->parent->doc, attr->children, 1));
+ else
+ return (xmlNodeListGetString(NULL, attr->children, 1));
+ break;
+ }
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ if (node->content != NULL)
+ return (xmlStrdup(node->content));
+ default:
+ break;
+ }
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderConstValue:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Provides the text value of the node if present
+ *
+ * Returns the string or NULL if not available. The result will be
+ * deallocated on the next Read() operation.
+ */
+const xmlChar *
+xmlTextReaderConstValue(xmlTextReaderPtr reader) {
+ xmlNodePtr node;
+ if (reader == NULL)
+ return(NULL);
+ if (reader->node == NULL)
+ return(NULL);
+ if (reader->curnode != NULL)
+ node = reader->curnode;
+ else
+ node = reader->node;
+
+ switch (node->type) {
+ case XML_NAMESPACE_DECL:
+ return(((xmlNsPtr) node)->href);
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) node;
+
+ if ((attr->children != NULL) &&
+ (attr->children->type == XML_TEXT_NODE) &&
+ (attr->children->next == NULL))
+ return(attr->children->content);
+ else {
+ reader->buffer->use = 0;
+ xmlNodeBufGetContent(reader->buffer, node);
+ return(reader->buffer->content);
+ }
+ break;
+ }
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ return(node->content);
+ default:
+ break;
+ }
+ return(NULL);
+}
+
+/**
+ * xmlTextReaderIsDefault:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Whether an Attribute node was generated from the default value
+ * defined in the DTD or schema.
+ *
+ * Returns 0 if not defaulted, 1 if defaulted, and -1 in case of error
+ */
+int
+xmlTextReaderIsDefault(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ return(0);
+}
+
+/**
+ * xmlTextReaderQuoteChar:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The quotation mark character used to enclose the value of an attribute.
+ *
+ * Returns " or ' and -1 in case of error
+ */
+int
+xmlTextReaderQuoteChar(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ /* TODO maybe lookup the attribute value for " first */
+ return((int) '"');
+}
+
+/**
+ * xmlTextReaderXmlLang:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The xml:lang scope within which the node resides.
+ *
+ * Returns the xml:lang value or NULL if none exists.
+ */
+xmlChar *
+xmlTextReaderXmlLang(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(NULL);
+ if (reader->node == NULL)
+ return(NULL);
+ return(xmlNodeGetLang(reader->node));
+}
+
+/**
+ * xmlTextReaderConstXmlLang:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The xml:lang scope within which the node resides.
+ *
+ * Returns the xml:lang value or NULL if none exists.
+ */
+const xmlChar *
+xmlTextReaderConstXmlLang(xmlTextReaderPtr reader) {
+ xmlChar *tmp;
+ const xmlChar *ret;
+
+ if (reader == NULL)
+ return(NULL);
+ if (reader->node == NULL)
+ return(NULL);
+ tmp = xmlNodeGetLang(reader->node);
+ if (tmp == NULL)
+ return(NULL);
+ ret = CONSTSTR(tmp);
+ xmlFree(tmp);
+ return(ret);
+}
+
+/**
+ * xmlTextReaderConstString:
+ * @reader: the xmlTextReaderPtr used
+ * @str: the string to intern.
+ *
+ * Get an interned string from the reader, allows for example to
+ * speedup string name comparisons
+ *
+ * Returns an interned copy of the string or NULL in case of error. The
+ * string will be deallocated with the reader.
+ */
+const xmlChar *
+xmlTextReaderConstString(xmlTextReaderPtr reader, const xmlChar *str) {
+ if (reader == NULL)
+ return(NULL);
+ return(CONSTSTR(str));
+}
+
+/**
+ * xmlTextReaderNormalization:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * The value indicating whether to normalize white space and attribute values.
+ * Since attribute value and end of line normalizations are a MUST in the XML
+ * specification only the value true is accepted. The broken bahaviour of
+ * accepting out of range character entities like &#0; is of course not
+ * supported either.
+ *
+ * Returns 1 or -1 in case of error.
+ */
+int
+xmlTextReaderNormalization(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(-1);
+ return(1);
+}
+
+/************************************************************************
+ * *
+ * Extensions to the base APIs *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlTextReaderSetParserProp:
+ * @reader: the xmlTextReaderPtr used
+ * @prop: the xmlParserProperties to set
+ * @value: usually 0 or 1 to (de)activate it
+ *
+ * Change the parser processing behaviour by changing some of its internal
+ * properties. Note that some properties can only be changed before any
+ * read has been done.
+ *
+ * Returns 0 if the call was successful, or -1 in case of error
+ */
+int
+xmlTextReaderSetParserProp(xmlTextReaderPtr reader, int prop, int value) {
+ xmlParserProperties p = (xmlParserProperties) prop;
+ xmlParserCtxtPtr ctxt;
+
+ if ((reader == NULL) || (reader->ctxt == NULL))
+ return(-1);
+ ctxt = reader->ctxt;
+
+ switch (p) {
+ case XML_PARSER_LOADDTD:
+ if (value != 0) {
+ if (ctxt->loadsubset == 0) {
+ if (reader->mode != XML_TEXTREADER_MODE_INITIAL)
+ return(-1);
+ ctxt->loadsubset = XML_DETECT_IDS;
+ }
+ } else {
+ ctxt->loadsubset = 0;
+ }
+ return(0);
+ case XML_PARSER_DEFAULTATTRS:
+ if (value != 0) {
+ ctxt->loadsubset |= XML_COMPLETE_ATTRS;
+ } else {
+ if (ctxt->loadsubset & XML_COMPLETE_ATTRS)
+ ctxt->loadsubset -= XML_COMPLETE_ATTRS;
+ }
+ return(0);
+ case XML_PARSER_VALIDATE:
+ if (value != 0) {
+ ctxt->validate = 1;
+ reader->validate = XML_TEXTREADER_VALIDATE_DTD;
+ } else {
+ ctxt->validate = 0;
+ }
+ return(0);
+ case XML_PARSER_SUBST_ENTITIES:
+ if (value != 0) {
+ ctxt->replaceEntities = 1;
+ } else {
+ ctxt->replaceEntities = 0;
+ }
+ return(0);
+ }
+ return(-1);
+}
+
+/**
+ * xmlTextReaderGetParserProp:
+ * @reader: the xmlTextReaderPtr used
+ * @prop: the xmlParserProperties to get
+ *
+ * Read the parser internal property.
+ *
+ * Returns the value, usually 0 or 1, or -1 in case of error.
+ */
+int
+xmlTextReaderGetParserProp(xmlTextReaderPtr reader, int prop) {
+ xmlParserProperties p = (xmlParserProperties) prop;
+ xmlParserCtxtPtr ctxt;
+
+ if ((reader == NULL) || (reader->ctxt == NULL))
+ return(-1);
+ ctxt = reader->ctxt;
+
+ switch (p) {
+ case XML_PARSER_LOADDTD:
+ if ((ctxt->loadsubset != 0) || (ctxt->validate != 0))
+ return(1);
+ return(0);
+ case XML_PARSER_DEFAULTATTRS:
+ if (ctxt->loadsubset & XML_COMPLETE_ATTRS)
+ return(1);
+ return(0);
+ case XML_PARSER_VALIDATE:
+ return(reader->validate);
+ case XML_PARSER_SUBST_ENTITIES:
+ return(ctxt->replaceEntities);
+ }
+ return(-1);
+}
+
+/**
+ * xmlTextReaderCurrentNode:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Hacking interface allowing to get the xmlNodePtr correponding to the
+ * current node being accessed by the xmlTextReader. This is dangerous
+ * because the underlying node may be destroyed on the next Reads.
+ *
+ * Returns the xmlNodePtr or NULL in case of error.
+ */
+xmlNodePtr
+xmlTextReaderCurrentNode(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(NULL);
+
+ if (reader->curnode != NULL)
+ return(reader->curnode);
+ return(reader->node);
+}
+
+/**
+ * xmlTextReaderPreserve:
+ * @reader: the xmlTextReaderPtr used
+ *
+ *
+ * current node being accessed by the xmlTextReader. This is dangerous
+ * because the underlying node may be destroyed on the next Reads.
+ *
+ * Returns the xmlNodePtr or NULL in case of error.
+ */
+xmlNodePtr
+xmlTextReaderPreserve(xmlTextReaderPtr reader) {
+ xmlNodePtr cur, parent;
+
+ if (reader == NULL)
+ return(NULL);
+
+ if (reader->curnode != NULL)
+ cur = reader->curnode;
+ else
+ cur = reader->node;
+ if (cur == NULL)
+ return(NULL);
+
+ if (cur->type != XML_DOCUMENT_NODE) {
+ cur->extra |= NODE_IS_PRESERVED;
+ cur->extra |= NODE_IS_SPRESERVED;
+ }
+ reader->preserves++;
+
+ parent = cur->parent;;
+ while (parent != NULL) {
+ if (parent->type == XML_ELEMENT_NODE)
+ parent->extra |= NODE_IS_PRESERVED;
+ parent = parent->parent;
+ }
+ return(cur);
+}
+
+#ifdef LIBXML_PATTERN_ENABLED
+/**
+ * xmlTextReaderPreservePattern:
+ * @reader: the xmlTextReaderPtr used
+ * @pattern: an XPath subset pattern
+ * @namespaces: the prefix definitions, array of [URI, prefix] or NULL
+ *
+ * This tells the XML Reader to preserve all nodes matched by the
+ * pattern. The caller must also use xmlTextReaderCurrentDoc() to
+ * keep an handle on the resulting document once parsing has finished
+ *
+ * Returns a positive number in case of success and -1 in case of error
+ */
+int
+xmlTextReaderPreservePattern(xmlTextReaderPtr reader, const xmlChar *pattern,
+ const xmlChar **namespaces)
+{
+ xmlPatternPtr comp;
+
+ if ((reader == NULL) || (pattern == NULL))
+ return(-1);
+
+ comp = xmlPatterncompile(pattern, reader->dict, 0, namespaces);
+ if (comp == NULL)
+ return(-1);
+
+ if (reader->patternMax <= 0) {
+ reader->patternMax = 4;
+ reader->patternTab = (xmlPatternPtr *) xmlMalloc(reader->patternMax *
+ sizeof(reader->patternTab[0]));
+ if (reader->patternTab == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "xmlMalloc failed !\n");
+ return (-1);
+ }
+ }
+ if (reader->patternNr >= reader->patternMax) {
+ xmlPatternPtr *tmp;
+ reader->patternMax *= 2;
+ tmp = (xmlPatternPtr *) xmlRealloc(reader->patternTab,
+ reader->patternMax *
+ sizeof(reader->patternTab[0]));
+ if (tmp == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "xmlRealloc failed !\n");
+ reader->patternMax /= 2;
+ return (-1);
+ }
+ reader->patternTab = tmp;
+ }
+ reader->patternTab[reader->patternNr] = comp;
+ return(reader->patternNr++);
+}
+#endif
+
+/**
+ * xmlTextReaderCurrentDoc:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Hacking interface allowing to get the xmlDocPtr correponding to the
+ * current document being accessed by the xmlTextReader.
+ * NOTE: as a result of this call, the reader will not destroy the
+ * associated XML document and calling xmlFreeDoc() on the result
+ * is needed once the reader parsing has finished.
+ *
+ * Returns the xmlDocPtr or NULL in case of error.
+ */
+xmlDocPtr
+xmlTextReaderCurrentDoc(xmlTextReaderPtr reader) {
+ if (reader == NULL)
+ return(NULL);
+ if (reader->doc != NULL)
+ return(reader->doc);
+ if ((reader == NULL) || (reader->ctxt == NULL) ||
+ (reader->ctxt->myDoc == NULL))
+ return(NULL);
+
+ reader->preserve = 1;
+ return(reader->ctxt->myDoc);
+}
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+/**
+ * xmlTextReaderRelaxNGSetSchema:
+ * @reader: the xmlTextReaderPtr used
+ * @schema: a precompiled RelaxNG schema
+ *
+ * Use RelaxNG to validate the document as it is processed.
+ * Activation is only possible before the first Read().
+ * if @schema is NULL, then RelaxNG validation is desactivated.
+ @ The @schema should not be freed until the reader is deallocated
+ * or its use has been deactivated.
+ *
+ * Returns 0 in case the RelaxNG validation could be (des)activated and
+ * -1 in case of error.
+ */
+int
+xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, xmlRelaxNGPtr schema) {
+ if (schema == NULL) {
+ if (reader->rngSchemas != NULL) {
+ xmlRelaxNGFree(reader->rngSchemas);
+ reader->rngSchemas = NULL;
+ }
+ if (reader->rngValidCtxt != NULL) {
+ xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt);
+ reader->rngValidCtxt = NULL;
+ }
+ return(0);
+ }
+ if (reader->mode != XML_TEXTREADER_MODE_INITIAL)
+ return(-1);
+ if (reader->rngSchemas != NULL) {
+ xmlRelaxNGFree(reader->rngSchemas);
+ reader->rngSchemas = NULL;
+ }
+ if (reader->rngValidCtxt != NULL) {
+ xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt);
+ reader->rngValidCtxt = NULL;
+ }
+ reader->rngValidCtxt = xmlRelaxNGNewValidCtxt(schema);
+ if (reader->rngValidCtxt == NULL)
+ return(-1);
+ if (reader->errorFunc != NULL) {
+ xmlRelaxNGSetValidErrors(reader->rngValidCtxt,
+ (xmlRelaxNGValidityErrorFunc)reader->errorFunc,
+ (xmlRelaxNGValidityWarningFunc) reader->errorFunc,
+ reader->errorFuncArg);
+ }
+ reader->rngValidErrors = 0;
+ reader->rngFullNode = NULL;
+ reader->validate = XML_TEXTREADER_VALIDATE_RNG;
+ return(0);
+}
+
+/**
+ * xmlTextReaderRelaxNGValidate:
+ * @reader: the xmlTextReaderPtr used
+ * @rng: the path to a RelaxNG schema or NULL
+ *
+ * Use RelaxNG to validate the document as it is processed.
+ * Activation is only possible before the first Read().
+ * if @rng is NULL, then RelaxNG validation is desactivated.
+ *
+ * Returns 0 in case the RelaxNG validation could be (des)activated and
+ * -1 in case of error.
+ */
+int
+xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, const char *rng) {
+ xmlRelaxNGParserCtxtPtr ctxt;
+
+ if (reader == NULL)
+ return(-1);
+
+ if (rng == NULL) {
+ if (reader->rngSchemas != NULL) {
+ xmlRelaxNGFree(reader->rngSchemas);
+ reader->rngSchemas = NULL;
+ }
+ if (reader->rngValidCtxt != NULL) {
+ xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt);
+ reader->rngValidCtxt = NULL;
+ }
+ return(0);
+ }
+ if (reader->mode != XML_TEXTREADER_MODE_INITIAL)
+ return(-1);
+ if (reader->rngSchemas != NULL) {
+ xmlRelaxNGFree(reader->rngSchemas);
+ reader->rngSchemas = NULL;
+ }
+ if (reader->rngValidCtxt != NULL) {
+ xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt);
+ reader->rngValidCtxt = NULL;
+ }
+ ctxt = xmlRelaxNGNewParserCtxt(rng);
+ if (reader->errorFunc != NULL) {
+ xmlRelaxNGSetParserErrors(ctxt,
+ (xmlRelaxNGValidityErrorFunc) reader->errorFunc,
+ (xmlRelaxNGValidityWarningFunc) reader->errorFunc,
+ reader->errorFuncArg);
+ }
+ reader->rngSchemas = xmlRelaxNGParse(ctxt);
+ xmlRelaxNGFreeParserCtxt(ctxt);
+ if (reader->rngSchemas == NULL)
+ return(-1);
+ reader->rngValidCtxt = xmlRelaxNGNewValidCtxt(reader->rngSchemas);
+ if (reader->rngValidCtxt == NULL)
+ return(-1);
+ if (reader->errorFunc != NULL) {
+ xmlRelaxNGSetValidErrors(reader->rngValidCtxt,
+ (xmlRelaxNGValidityErrorFunc)reader->errorFunc,
+ (xmlRelaxNGValidityWarningFunc) reader->errorFunc,
+ reader->errorFuncArg);
+ }
+ reader->rngValidErrors = 0;
+ reader->rngFullNode = NULL;
+ reader->validate = XML_TEXTREADER_VALIDATE_RNG;
+ return(0);
+}
+#endif
+
+/************************************************************************
+ * *
+ * Error Handling Extensions *
+ * *
+ ************************************************************************/
+
+/* helper to build a xmlMalloc'ed string from a format and va_list */
+static char *
+xmlTextReaderBuildMessage(const char *msg, va_list ap) {
+ int size;
+ int chars;
+ char *larger;
+ char *str;
+
+ str = (char *) xmlMallocAtomic(150);
+ if (str == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "xmlMalloc failed !\n");
+ return NULL;
+ }
+
+ size = 150;
+
+ while (1) {
+ chars = vsnprintf(str, size, msg, ap);
+ if ((chars > -1) && (chars < size))
+ break;
+ if (chars > -1)
+ size += chars + 1;
+ else
+ size += 100;
+ if ((larger = (char *) xmlRealloc(str, size)) == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "xmlRealloc failed !\n");
+ xmlFree(str);
+ return NULL;
+ }
+ str = larger;
+ }
+
+ return str;
+}
+
+/**
+ * xmlTextReaderLocatorLineNumber:
+ * @locator: the xmlTextReaderLocatorPtr used
+ *
+ * Obtain the line number for the given locator.
+ *
+ * Returns the line number or -1 in case of error.
+ */
+int
+xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator) {
+ /* we know that locator is a xmlParserCtxtPtr */
+ xmlParserCtxtPtr ctx = (xmlParserCtxtPtr)locator;
+ int ret = -1;
+
+ if (ctx->node != NULL) {
+ ret = xmlGetLineNo(ctx->node);
+ }
+ else {
+ /* inspired from error.c */
+ xmlParserInputPtr input;
+ input = ctx->input;
+ if ((input->filename == NULL) && (ctx->inputNr > 1))
+ input = ctx->inputTab[ctx->inputNr - 2];
+ if (input != NULL) {
+ ret = input->line;
+ }
+ else {
+ ret = -1;
+ }
+ }
+
+ return ret;
+}
+
+/**
+ * xmlTextReaderLocatorBaseURI:
+ * @locator: the xmlTextReaderLocatorPtr used
+ *
+ * Obtain the base URI for the given locator.
+ *
+ * Returns the base URI or NULL in case of error.
+ */
+xmlChar *
+xmlTextReaderLocatorBaseURI(xmlTextReaderLocatorPtr locator) {
+ /* we know that locator is a xmlParserCtxtPtr */
+ xmlParserCtxtPtr ctx = (xmlParserCtxtPtr)locator;
+ xmlChar *ret = NULL;
+
+ if (ctx->node != NULL) {
+ ret = xmlNodeGetBase(NULL,ctx->node);
+ }
+ else {
+ /* inspired from error.c */
+ xmlParserInputPtr input;
+ input = ctx->input;
+ if ((input->filename == NULL) && (ctx->inputNr > 1))
+ input = ctx->inputTab[ctx->inputNr - 2];
+ if (input != NULL) {
+ ret = xmlStrdup(BAD_CAST input->filename);
+ }
+ else {
+ ret = NULL;
+ }
+ }
+
+ return ret;
+}
+
+static void
+xmlTextReaderGenericError(void *ctxt, xmlParserSeverities severity, char *str) {
+ xmlParserCtxtPtr ctx = (xmlParserCtxtPtr)ctxt;
+ xmlTextReaderPtr reader = (xmlTextReaderPtr)ctx->_private;
+
+ if (str != NULL) {
+ reader->errorFunc(reader->errorFuncArg,
+ str,
+ severity,
+ (xmlTextReaderLocatorPtr)ctx);
+ xmlFree(str);
+ }
+}
+
+static void
+xmlTextReaderStructuredError(void *ctxt, xmlErrorPtr error) {
+ xmlParserCtxtPtr ctx = (xmlParserCtxtPtr) ctxt;
+ xmlTextReaderPtr reader = (xmlTextReaderPtr) ctx->_private;
+
+ if (error && reader->sErrorFunc) {
+ reader->sErrorFunc(reader->errorFuncArg,
+ (xmlErrorPtr) error);
+ }
+}
+
+static void
+xmlTextReaderError(void *ctxt, const char *msg, ...) {
+ va_list ap;
+
+ va_start(ap,msg);
+ xmlTextReaderGenericError(ctxt,
+ XML_PARSER_SEVERITY_ERROR,
+ xmlTextReaderBuildMessage(msg,ap));
+ va_end(ap);
+
+}
+
+static void
+xmlTextReaderWarning(void *ctxt, const char *msg, ...) {
+ va_list ap;
+
+ va_start(ap,msg);
+ xmlTextReaderGenericError(ctxt,
+ XML_PARSER_SEVERITY_WARNING,
+ xmlTextReaderBuildMessage(msg,ap));
+ va_end(ap);
+}
+
+static void
+xmlTextReaderValidityError(void *ctxt, const char *msg, ...) {
+ va_list ap;
+ int len = xmlStrlen((const xmlChar *) msg);
+
+ if ((len > 1) && (msg[len - 2] != ':')) {
+ /*
+ * some callbacks only report locator information:
+ * skip them (mimicking behaviour in error.c)
+ */
+ va_start(ap,msg);
+ xmlTextReaderGenericError(ctxt,
+ XML_PARSER_SEVERITY_VALIDITY_ERROR,
+ xmlTextReaderBuildMessage(msg,ap));
+ va_end(ap);
+ }
+}
+
+static void
+xmlTextReaderValidityWarning(void *ctxt, const char *msg, ...) {
+ va_list ap;
+ int len = xmlStrlen((const xmlChar *) msg);
+
+ if ((len != 0) && (msg[len - 1] != ':')) {
+ /*
+ * some callbacks only report locator information:
+ * skip them (mimicking behaviour in error.c)
+ */
+ va_start(ap,msg);
+ xmlTextReaderGenericError(ctxt,
+ XML_PARSER_SEVERITY_VALIDITY_WARNING,
+ xmlTextReaderBuildMessage(msg,ap));
+ va_end(ap);
+ }
+}
+
+/**
+ * xmlTextReaderSetErrorHandler:
+ * @reader: the xmlTextReaderPtr used
+ * @f: the callback function to call on error and warnings
+ * @arg: a user argument to pass to the callback function
+ *
+ * Register a callback function that will be called on error and warnings.
+ *
+ * If @f is NULL, the default error and warning handlers are restored.
+ */
+void
+xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
+ xmlTextReaderErrorFunc f,
+ void *arg) {
+ if (f != NULL) {
+ reader->ctxt->sax->error = xmlTextReaderError;
+ reader->ctxt->sax->serror = NULL;
+ reader->ctxt->vctxt.error = xmlTextReaderValidityError;
+ reader->ctxt->sax->warning = xmlTextReaderWarning;
+ reader->ctxt->vctxt.warning = xmlTextReaderValidityWarning;
+ reader->errorFunc = f;
+ reader->errorFuncArg = arg;
+ }
+ else {
+ /* restore defaults */
+ reader->ctxt->sax->error = xmlParserError;
+ reader->ctxt->vctxt.error = xmlParserValidityError;
+ reader->ctxt->sax->warning = xmlParserWarning;
+ reader->ctxt->vctxt.warning = xmlParserValidityWarning;
+ reader->errorFunc = NULL;
+ reader->sErrorFunc = NULL;
+ reader->errorFuncArg = NULL;
+ }
+}
+
+/**
+* xmlTextReaderSetStructuredErrorHandler:
+ * @reader: the xmlTextReaderPtr used
+ * @f: the callback function to call on error and warnings
+ * @arg: a user argument to pass to the callback function
+ *
+ * Register a callback function that will be called on error and warnings.
+ *
+ * If @f is NULL, the default error and warning handlers are restored.
+ */
+void
+xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
+ xmlStructuredErrorFunc f,
+ void *arg) {
+ if (f != NULL) {
+ reader->ctxt->sax->serror = xmlTextReaderStructuredError;
+ reader->ctxt->vctxt.error = xmlTextReaderValidityError;
+ reader->ctxt->sax->warning = xmlTextReaderWarning;
+ reader->ctxt->vctxt.warning = xmlTextReaderValidityWarning;
+ reader->sErrorFunc = f;
+ reader->errorFunc = NULL;
+ reader->errorFuncArg = arg;
+ }
+ else {
+ /* restore defaults */
+ reader->ctxt->sax->error = xmlParserError;
+ reader->ctxt->sax->serror = NULL;
+ reader->ctxt->vctxt.error = xmlParserValidityError;
+ reader->ctxt->sax->warning = xmlParserWarning;
+ reader->ctxt->vctxt.warning = xmlParserValidityWarning;
+ reader->errorFunc = NULL;
+ reader->sErrorFunc = NULL;
+ reader->errorFuncArg = NULL;
+ }
+}
+
+/**
+ * xmlTextReaderIsValid:
+ * @reader: the xmlTextReaderPtr used
+ *
+ * Retrieve the validity status from the parser context
+ *
+ * Returns the flag value 1 if valid, 0 if no, and -1 in case of error
+ */
+int
+xmlTextReaderIsValid(xmlTextReaderPtr reader) {
+ if (reader == NULL) return(-1);
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (reader->validate == XML_TEXTREADER_VALIDATE_RNG)
+ return(reader->rngValidErrors == 0);
+#endif
+ if ((reader->ctxt != NULL) && (reader->ctxt->validate == 1))
+ return(reader->ctxt->valid);
+ return(0);
+}
+
+/**
+ * xmlTextReaderGetErrorHandler:
+ * @reader: the xmlTextReaderPtr used
+ * @f: the callback function or NULL is no callback has been registered
+ * @arg: a user argument
+ *
+ * Retrieve the error callback function and user argument.
+ */
+void
+xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
+ xmlTextReaderErrorFunc *f,
+ void **arg) {
+ *f = reader->errorFunc;
+ *arg = reader->errorFuncArg;
+}
+
+
+/************************************************************************
+ * *
+ * New set (2.6.0) of simpler and more flexible APIs *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlTextReaderSetup:
+ * @reader: an XML reader
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ * @reuse: keep the context for reuse
+ *
+ * Setup an XML reader with new options
+ *
+ * Returns 0 in case of success and -1 in case of error.
+ */
+static int
+xmlTextReaderSetup(xmlTextReaderPtr reader,
+ xmlParserInputBufferPtr input, const char *URL,
+ const char *encoding, int options)
+{
+ if (reader == NULL)
+ return (-1);
+
+ reader->doc = NULL;
+ reader->entNr = 0;
+ reader->parserFlags = options;
+ reader->validate = XML_TEXTREADER_NOT_VALIDATE;
+ if ((input != NULL) && (reader->input != NULL) &&
+ (reader->allocs & XML_TEXTREADER_INPUT)) {
+ xmlFreeParserInputBuffer(reader->input);
+ reader->input = NULL;
+ reader->allocs -= XML_TEXTREADER_INPUT;
+ }
+ if (input != NULL) {
+ reader->input = input;
+ reader->allocs |= XML_TEXTREADER_INPUT;
+ }
+ if (reader->buffer == NULL)
+ reader->buffer = xmlBufferCreateSize(100);
+ if (reader->buffer == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextReaderSetup : malloc failed\n");
+ return (-1);
+ }
+ if (reader->sax == NULL)
+ reader->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
+ if (reader->sax == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextReaderSetup : malloc failed\n");
+ return (-1);
+ }
+ xmlSAXVersion(reader->sax, 2);
+ reader->startElement = reader->sax->startElement;
+ reader->sax->startElement = xmlTextReaderStartElement;
+ reader->endElement = reader->sax->endElement;
+ reader->sax->endElement = xmlTextReaderEndElement;
+#ifdef LIBXML_SAX1_ENABLED
+ if (reader->sax->initialized == XML_SAX2_MAGIC) {
+#endif /* LIBXML_SAX1_ENABLED */
+ reader->startElementNs = reader->sax->startElementNs;
+ reader->sax->startElementNs = xmlTextReaderStartElementNs;
+ reader->endElementNs = reader->sax->endElementNs;
+ reader->sax->endElementNs = xmlTextReaderEndElementNs;
+#ifdef LIBXML_SAX1_ENABLED
+ } else {
+ reader->startElementNs = NULL;
+ reader->endElementNs = NULL;
+ }
+#endif /* LIBXML_SAX1_ENABLED */
+ reader->characters = reader->sax->characters;
+ reader->sax->characters = xmlTextReaderCharacters;
+ reader->sax->ignorableWhitespace = xmlTextReaderCharacters;
+ reader->cdataBlock = reader->sax->cdataBlock;
+ reader->sax->cdataBlock = xmlTextReaderCDataBlock;
+
+ reader->mode = XML_TEXTREADER_MODE_INITIAL;
+ reader->node = NULL;
+ reader->curnode = NULL;
+ if (input != NULL) {
+ if (reader->input->buffer->use < 4) {
+ xmlParserInputBufferRead(input, 4);
+ }
+ if (reader->ctxt == NULL) {
+ if (reader->input->buffer->use >= 4) {
+ reader->ctxt = xmlCreatePushParserCtxt(reader->sax, NULL,
+ (const char *) reader->input->buffer->content, 4, URL);
+ reader->base = 0;
+ reader->cur = 4;
+ } else {
+ reader->ctxt =
+ xmlCreatePushParserCtxt(reader->sax, NULL, NULL, 0, URL);
+ reader->base = 0;
+ reader->cur = 0;
+ }
+ } else {
+ xmlParserInputPtr inputStream;
+ xmlParserInputBufferPtr buf;
+ xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
+
+ xmlCtxtReset(reader->ctxt);
+ buf = xmlAllocParserInputBuffer(enc);
+ if (buf == NULL) return(-1);
+ inputStream = xmlNewInputStream(reader->ctxt);
+ if (inputStream == NULL) {
+ xmlFreeParserInputBuffer(buf);
+ return(-1);
+ }
+
+ if (URL == NULL)
+ inputStream->filename = NULL;
+ else
+ inputStream->filename = (char *)
+ xmlCanonicPath((const xmlChar *) URL);
+ inputStream->buf = buf;
+ inputStream->base = inputStream->buf->buffer->content;
+ inputStream->cur = inputStream->buf->buffer->content;
+ inputStream->end =
+ &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
+
+ inputPush(reader->ctxt, inputStream);
+ reader->cur = 0;
+ }
+ if (reader->ctxt == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextReaderSetup : malloc failed\n");
+ return (-1);
+ }
+ }
+ if (reader->dict != NULL) {
+ if (reader->ctxt->dict != NULL) {
+ if (reader->dict != reader->ctxt->dict) {
+ xmlDictFree(reader->dict);
+ reader->dict = reader->ctxt->dict;
+ }
+ } else {
+ reader->ctxt->dict = reader->dict;
+ }
+ } else {
+ if (reader->ctxt->dict == NULL)
+ reader->ctxt->dict = xmlDictCreate();
+ reader->dict = reader->ctxt->dict;
+ }
+ reader->ctxt->_private = reader;
+ reader->ctxt->linenumbers = 1;
+ reader->ctxt->dictNames = 1;
+ /*
+ * use the parser dictionnary to allocate all elements and attributes names
+ */
+ reader->ctxt->docdict = 1;
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+ if (reader->xincctxt != NULL) {
+ xmlXIncludeFreeContext(reader->xincctxt);
+ reader->xincctxt = NULL;
+ }
+ if (options & XML_PARSE_XINCLUDE) {
+ reader->xinclude = 1;
+ reader->xinclude_name = xmlDictLookup(reader->dict, XINCLUDE_NODE, -1);
+ options -= XML_PARSE_XINCLUDE;
+ } else
+ reader->xinclude = 0;
+ reader->in_xinclude = 0;
+#endif
+#ifdef LIBXML_PATTERN_ENABLED
+ if (reader->patternTab == NULL) {
+ reader->patternNr = 0;
+ reader->patternMax = 0;
+ }
+ while (reader->patternNr > 0) {
+ reader->patternNr--;
+ if (reader->patternTab[reader->patternNr] != NULL) {
+ xmlFreePattern(reader->patternTab[reader->patternNr]);
+ reader->patternTab[reader->patternNr] = NULL;
+ }
+ }
+#endif
+
+ if (options & XML_PARSE_DTDVALID)
+ reader->validate = XML_TEXTREADER_VALIDATE_DTD;
+
+ xmlCtxtUseOptions(reader->ctxt, options);
+ if (encoding != NULL) {
+ xmlCharEncodingHandlerPtr hdlr;
+
+ hdlr = xmlFindCharEncodingHandler(encoding);
+ if (hdlr != NULL)
+ xmlSwitchToEncoding(reader->ctxt, hdlr);
+ }
+ if ((URL != NULL) && (reader->ctxt->input != NULL) &&
+ (reader->ctxt->input->filename == NULL))
+ reader->ctxt->input->filename = (char *)
+ xmlStrdup((const xmlChar *) URL);
+
+ reader->doc = NULL;
+
+ return (0);
+}
+
+/**
+ * xmlReaderWalker:
+ * @doc: a preparsed document
+ *
+ * Create an xmltextReader for a preparsed document.
+ *
+ * Returns the new reader or NULL in case of error.
+ */
+xmlTextReaderPtr
+xmlReaderWalker(xmlDocPtr doc)
+{
+ xmlTextReaderPtr ret;
+
+ if (doc == NULL)
+ return(NULL);
+
+ ret = xmlMalloc(sizeof(xmlTextReader));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextReader : malloc failed\n");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlTextReader));
+ ret->entNr = 0;
+ ret->input = NULL;
+ ret->mode = XML_TEXTREADER_MODE_INITIAL;
+ ret->node = NULL;
+ ret->curnode = NULL;
+ ret->base = 0;
+ ret->cur = 0;
+ ret->allocs = XML_TEXTREADER_CTXT;
+ ret->doc = doc;
+ ret->state = XML_TEXTREADER_START;
+ ret->dict = xmlDictCreate();
+ return(ret);
+}
+
+/**
+ * xmlReaderForDoc:
+ * @cur: a pointer to a zero terminated string
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * Create an xmltextReader for an XML in-memory document.
+ * The parsing flags @options are a combination of xmlParserOption.
+ *
+ * Returns the new reader or NULL in case of error.
+ */
+xmlTextReaderPtr
+xmlReaderForDoc(const xmlChar * cur, const char *URL, const char *encoding,
+ int options)
+{
+ int len;
+
+ if (cur == NULL)
+ return (NULL);
+ len = xmlStrlen(cur);
+
+ return (xmlReaderForMemory
+ ((const char *) cur, len, URL, encoding, options));
+}
+
+/**
+ * xmlReaderForFile:
+ * @filename: a file or URL
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML file from the filesystem or the network.
+ * The parsing flags @options are a combination of xmlParserOption.
+ *
+ * Returns the new reader or NULL in case of error.
+ */
+xmlTextReaderPtr
+xmlReaderForFile(const char *filename, const char *encoding, int options)
+{
+ xmlTextReaderPtr reader;
+
+ reader = xmlNewTextReaderFilename(filename);
+ if (reader == NULL)
+ return (NULL);
+ xmlTextReaderSetup(reader, NULL, NULL, encoding, options);
+ return (reader);
+}
+
+/**
+ * xmlReaderForMemory:
+ * @buffer: a pointer to a char array
+ * @size: the size of the array
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * Create an xmltextReader for an XML in-memory document.
+ * The parsing flags @options are a combination of xmlParserOption.
+ *
+ * Returns the new reader or NULL in case of error.
+ */
+xmlTextReaderPtr
+xmlReaderForMemory(const char *buffer, int size, const char *URL,
+ const char *encoding, int options)
+{
+ xmlTextReaderPtr reader;
+ xmlParserInputBufferPtr buf;
+
+ buf = xmlParserInputBufferCreateStatic(buffer, size,
+ XML_CHAR_ENCODING_NONE);
+ if (buf == NULL) {
+ return (NULL);
+ }
+ reader = xmlNewTextReader(buf, URL);
+ if (reader == NULL) {
+ xmlFreeParserInputBuffer(buf);
+ return (NULL);
+ }
+ reader->allocs |= XML_TEXTREADER_INPUT;
+ xmlTextReaderSetup(reader, NULL, URL, encoding, options);
+ return (reader);
+}
+
+/**
+ * xmlReaderForFd:
+ * @fd: an open file descriptor
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * Create an xmltextReader for an XML from a file descriptor.
+ * The parsing flags @options are a combination of xmlParserOption.
+ * NOTE that the file descriptor will not be closed when the
+ * reader is closed or reset.
+ *
+ * Returns the new reader or NULL in case of error.
+ */
+xmlTextReaderPtr
+xmlReaderForFd(int fd, const char *URL, const char *encoding, int options)
+{
+ xmlTextReaderPtr reader;
+ xmlParserInputBufferPtr input;
+
+ if (fd < 0)
+ return (NULL);
+
+ input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ input->closecallback = NULL;
+ reader = xmlNewTextReader(input, URL);
+ if (reader == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ reader->allocs |= XML_TEXTREADER_INPUT;
+ xmlTextReaderSetup(reader, NULL, URL, encoding, options);
+ return (reader);
+}
+
+/**
+ * xmlReaderForIO:
+ * @ioread: an I/O read function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * Create an xmltextReader for an XML document from I/O functions and source.
+ * The parsing flags @options are a combination of xmlParserOption.
+ *
+ * Returns the new reader or NULL in case of error.
+ */
+xmlTextReaderPtr
+xmlReaderForIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose,
+ void *ioctx, const char *URL, const char *encoding,
+ int options)
+{
+ xmlTextReaderPtr reader;
+ xmlParserInputBufferPtr input;
+
+ if (ioread == NULL)
+ return (NULL);
+
+ input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
+ XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (NULL);
+ reader = xmlNewTextReader(input, URL);
+ if (reader == NULL) {
+ xmlFreeParserInputBuffer(input);
+ return (NULL);
+ }
+ reader->allocs |= XML_TEXTREADER_INPUT;
+ xmlTextReaderSetup(reader, NULL, URL, encoding, options);
+ return (reader);
+}
+
+/**
+ * xmlReaderNewWalker:
+ * @reader: an XML reader
+ * @doc: a preparsed document
+ *
+ * Setup an xmltextReader to parse a preparsed XML document.
+ * This reuses the existing @reader xmlTextReader.
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+int
+xmlReaderNewWalker(xmlTextReaderPtr reader, xmlDocPtr doc)
+{
+ if (doc == NULL)
+ return (-1);
+ if (reader == NULL)
+ return (-1);
+
+ if (reader->ctxt != NULL) {
+ xmlCtxtReset(reader->ctxt);
+ }
+
+ reader->entNr = 0;
+ reader->input = NULL;
+ reader->mode = XML_TEXTREADER_MODE_INITIAL;
+ reader->node = NULL;
+ reader->curnode = NULL;
+ reader->base = 0;
+ reader->cur = 0;
+ reader->allocs = XML_TEXTREADER_CTXT;
+ reader->doc = doc;
+ reader->state = XML_TEXTREADER_START;
+ if (reader->dict == NULL) {
+ if ((reader->ctxt != NULL) && (reader->ctxt->dict != NULL))
+ reader->dict = reader->ctxt->dict;
+ else
+ reader->dict = xmlDictCreate();
+ }
+ return(0);
+}
+
+/**
+ * xmlReaderNewDoc:
+ * @reader: an XML reader
+ * @cur: a pointer to a zero terminated string
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * Setup an xmltextReader to parse an XML in-memory document.
+ * The parsing flags @options are a combination of xmlParserOption.
+ * This reuses the existing @reader xmlTextReader.
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+int
+xmlReaderNewDoc(xmlTextReaderPtr reader, const xmlChar * cur,
+ const char *URL, const char *encoding, int options)
+{
+
+ int len;
+
+ if (cur == NULL)
+ return (-1);
+ if (reader == NULL)
+ return (-1);
+
+ len = xmlStrlen(cur);
+ return (xmlReaderNewMemory(reader, (const char *)cur, len,
+ URL, encoding, options));
+}
+
+/**
+ * xmlReaderNewFile:
+ * @reader: an XML reader
+ * @filename: a file or URL
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * parse an XML file from the filesystem or the network.
+ * The parsing flags @options are a combination of xmlParserOption.
+ * This reuses the existing @reader xmlTextReader.
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+int
+xmlReaderNewFile(xmlTextReaderPtr reader, const char *filename,
+ const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+
+ if (filename == NULL)
+ return (-1);
+ if (reader == NULL)
+ return (-1);
+
+ input =
+ xmlParserInputBufferCreateFilename(filename,
+ XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (-1);
+ return (xmlTextReaderSetup(reader, input, filename, encoding, options));
+}
+
+/**
+ * xmlReaderNewMemory:
+ * @reader: an XML reader
+ * @buffer: a pointer to a char array
+ * @size: the size of the array
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * Setup an xmltextReader to parse an XML in-memory document.
+ * The parsing flags @options are a combination of xmlParserOption.
+ * This reuses the existing @reader xmlTextReader.
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+int
+xmlReaderNewMemory(xmlTextReaderPtr reader, const char *buffer, int size,
+ const char *URL, const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+
+ if (reader == NULL)
+ return (-1);
+ if (buffer == NULL)
+ return (-1);
+
+ input = xmlParserInputBufferCreateStatic(buffer, size,
+ XML_CHAR_ENCODING_NONE);
+ if (input == NULL) {
+ return (-1);
+ }
+ return (xmlTextReaderSetup(reader, input, URL, encoding, options));
+}
+
+/**
+ * xmlReaderNewFd:
+ * @reader: an XML reader
+ * @fd: an open file descriptor
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * Setup an xmltextReader to parse an XML from a file descriptor.
+ * NOTE that the file descriptor will not be closed when the
+ * reader is closed or reset.
+ * The parsing flags @options are a combination of xmlParserOption.
+ * This reuses the existing @reader xmlTextReader.
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+int
+xmlReaderNewFd(xmlTextReaderPtr reader, int fd,
+ const char *URL, const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+
+ if (fd < 0)
+ return (-1);
+ if (reader == NULL)
+ return (-1);
+
+ input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (-1);
+ input->closecallback = NULL;
+ return (xmlTextReaderSetup(reader, input, URL, encoding, options));
+}
+
+/**
+ * xmlReaderNewIO:
+ * @reader: an XML reader
+ * @ioread: an I/O read function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @URL: the base URL to use for the document
+ * @encoding: the document encoding, or NULL
+ * @options: a combination of xmlParserOption
+ *
+ * Setup an xmltextReader to parse an XML document from I/O functions
+ * and source.
+ * The parsing flags @options are a combination of xmlParserOption.
+ * This reuses the existing @reader xmlTextReader.
+ *
+ * Returns 0 in case of success and -1 in case of error
+ */
+int
+xmlReaderNewIO(xmlTextReaderPtr reader, xmlInputReadCallback ioread,
+ xmlInputCloseCallback ioclose, void *ioctx,
+ const char *URL, const char *encoding, int options)
+{
+ xmlParserInputBufferPtr input;
+
+ if (ioread == NULL)
+ return (-1);
+ if (reader == NULL)
+ return (-1);
+
+ input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
+ XML_CHAR_ENCODING_NONE);
+ if (input == NULL)
+ return (-1);
+ return (xmlTextReaderSetup(reader, input, URL, encoding, options));
+}
+/************************************************************************
+ * *
+ * Utilities *
+ * *
+ ************************************************************************/
+#ifdef NOT_USED_YET
+/**
+ * xmlBase64Decode:
+ * @in: the input buffer
+ * @inlen: the size of the input (in), the size read from it (out)
+ * @to: the output buffer
+ * @tolen: the size of the output (in), the size written to (out)
+ *
+ * Base64 decoder, reads from @in and save in @to
+ * TODO: tell jody when this is actually exported
+ *
+ * Returns 0 if all the input was consumer, 1 if the Base64 end was reached,
+ * 2 if there wasn't enough space on the output or -1 in case of error.
+ */
+static int
+xmlBase64Decode(const unsigned char *in, unsigned long *inlen,
+ unsigned char *to, unsigned long *tolen) {
+ unsigned long incur; /* current index in in[] */
+ unsigned long inblk; /* last block index in in[] */
+ unsigned long outcur; /* current index in out[] */
+ unsigned long inmax; /* size of in[] */
+ unsigned long outmax; /* size of out[] */
+ unsigned char cur; /* the current value read from in[] */
+ unsigned char intmp[4], outtmp[4]; /* temporary buffers for the convert */
+ int nbintmp; /* number of byte in intmp[] */
+ int is_ignore; /* cur should be ignored */
+ int is_end = 0; /* the end of the base64 was found */
+ int retval = 1;
+ int i;
+
+ if ((in == NULL) || (inlen == NULL) || (to == NULL) || (tolen == NULL))
+ return(-1);
+
+ incur = 0;
+ inblk = 0;
+ outcur = 0;
+ inmax = *inlen;
+ outmax = *tolen;
+ nbintmp = 0;
+
+ while (1) {
+ if (incur >= inmax)
+ break;
+ cur = in[incur++];
+ is_ignore = 0;
+ if ((cur >= 'A') && (cur <= 'Z'))
+ cur = cur - 'A';
+ else if ((cur >= 'a') && (cur <= 'z'))
+ cur = cur - 'a' + 26;
+ else if ((cur >= '0') && (cur <= '9'))
+ cur = cur - '0' + 52;
+ else if (cur == '+')
+ cur = 62;
+ else if (cur == '/')
+ cur = 63;
+ else if (cur == '.')
+ cur = 0;
+ else if (cur == '=') /*no op , end of the base64 stream */
+ is_end = 1;
+ else {
+ is_ignore = 1;
+ if (nbintmp == 0)
+ inblk = incur;
+ }
+
+ if (!is_ignore) {
+ int nbouttmp = 3;
+ int is_break = 0;
+
+ if (is_end) {
+ if (nbintmp == 0)
+ break;
+ if ((nbintmp == 1) || (nbintmp == 2))
+ nbouttmp = 1;
+ else
+ nbouttmp = 2;
+ nbintmp = 3;
+ is_break = 1;
+ }
+ intmp[nbintmp++] = cur;
+ /*
+ * if intmp is full, push the 4byte sequence as a 3 byte
+ * sequence out
+ */
+ if (nbintmp == 4) {
+ nbintmp = 0;
+ outtmp[0] = (intmp[0] << 2) | ((intmp[1] & 0x30) >> 4);
+ outtmp[1] =
+ ((intmp[1] & 0x0F) << 4) | ((intmp[2] & 0x3C) >> 2);
+ outtmp[2] = ((intmp[2] & 0x03) << 6) | (intmp[3] & 0x3F);
+ if (outcur + 3 >= outmax) {
+ retval = 2;
+ break;
+ }
+
+ for (i = 0; i < nbouttmp; i++)
+ to[outcur++] = outtmp[i];
+ inblk = incur;
+ }
+
+ if (is_break) {
+ retval = 0;
+ break;
+ }
+ }
+ }
+
+ *tolen = outcur;
+ *inlen = inblk;
+ return (retval);
+}
+
+/*
+ * Test routine for the xmlBase64Decode function
+ */
+#if 0
+int main(int argc, char **argv) {
+ char *input = " VW4 gcGV0 \n aXQgdGVzdCAuCg== ";
+ char output[100];
+ char output2[100];
+ char output3[100];
+ unsigned long inlen = strlen(input);
+ unsigned long outlen = 100;
+ int ret;
+ unsigned long cons, tmp, tmp2, prod;
+
+ /*
+ * Direct
+ */
+ ret = xmlBase64Decode(input, &inlen, output, &outlen);
+
+ output[outlen] = 0;
+ printf("ret: %d, inlen: %ld , outlen: %ld, output: '%s'\n", ret, inlen, outlen, output);
+
+ /*
+ * output chunking
+ */
+ cons = 0;
+ prod = 0;
+ while (cons < inlen) {
+ tmp = 5;
+ tmp2 = inlen - cons;
+
+ printf("%ld %ld\n", cons, prod);
+ ret = xmlBase64Decode(&input[cons], &tmp2, &output2[prod], &tmp);
+ cons += tmp2;
+ prod += tmp;
+ printf("%ld %ld\n", cons, prod);
+ }
+ output2[outlen] = 0;
+ printf("ret: %d, cons: %ld , prod: %ld, output: '%s'\n", ret, cons, prod, output2);
+
+ /*
+ * input chunking
+ */
+ cons = 0;
+ prod = 0;
+ while (cons < inlen) {
+ tmp = 100 - prod;
+ tmp2 = inlen - cons;
+ if (tmp2 > 5)
+ tmp2 = 5;
+
+ printf("%ld %ld\n", cons, prod);
+ ret = xmlBase64Decode(&input[cons], &tmp2, &output3[prod], &tmp);
+ cons += tmp2;
+ prod += tmp;
+ printf("%ld %ld\n", cons, prod);
+ }
+ output3[outlen] = 0;
+ printf("ret: %d, cons: %ld , prod: %ld, output: '%s'\n", ret, cons, prod, output3);
+ return(0);
+
+}
+#endif
+#endif /* NOT_USED_YET */
+#endif /* LIBXML_READER_ENABLED */
diff --git a/xmlregexp.c b/xmlregexp.c
new file mode 100644
index 0000000..057458b
--- /dev/null
+++ b/xmlregexp.c
@@ -0,0 +1,4612 @@
+/*
+ * regexp.c: generic and extensible Regular Expression engine
+ *
+ * Basically designed with the purpose of compiling regexps for
+ * the variety of validation/shemas mechanisms now available in
+ * XML related specifications thise includes:
+ * - XML-1.0 DTD validation
+ * - XML Schemas structure part 1
+ * - XML Schemas Datatypes part 2 especially Appendix F
+ * - RELAX-NG/TREX i.e. the counter proposal
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <veillard@redhat.com>
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_REGEXP_ENABLED
+
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#include <libxml/tree.h>
+#include <libxml/parserInternals.h>
+#include <libxml/xmlregexp.h>
+#include <libxml/xmlautomata.h>
+#include <libxml/xmlunicode.h>
+
+#ifndef INT_MAX
+#define INT_MAX 123456789 /* easy to flag and big enough for our needs */
+#endif
+
+/* #define DEBUG_REGEXP_GRAPH */
+/* #define DEBUG_REGEXP_EXEC */
+/* #define DEBUG_PUSH */
+/* #define DEBUG_COMPACTION */
+
+#define ERROR(str) \
+ ctxt->error = XML_REGEXP_COMPILE_ERROR; \
+ xmlRegexpErrCompile(ctxt, str);
+#define NEXT ctxt->cur++
+#define CUR (*(ctxt->cur))
+#define NXT(index) (ctxt->cur[index])
+
+#define CUR_SCHAR(s, l) xmlStringCurrentChar(NULL, s, &l)
+#define NEXTL(l) ctxt->cur += l;
+
+/**
+ * TODO:
+ *
+ * macro to flag unimplemented blocks
+ */
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+/************************************************************************
+ * *
+ * Datatypes and structures *
+ * *
+ ************************************************************************/
+
+typedef enum {
+ XML_REGEXP_EPSILON = 1,
+ XML_REGEXP_CHARVAL,
+ XML_REGEXP_RANGES,
+ XML_REGEXP_SUBREG,
+ XML_REGEXP_STRING,
+ XML_REGEXP_ANYCHAR, /* . */
+ XML_REGEXP_ANYSPACE, /* \s */
+ XML_REGEXP_NOTSPACE, /* \S */
+ XML_REGEXP_INITNAME, /* \l */
+ XML_REGEXP_NOTINITNAME, /* \l */
+ XML_REGEXP_NAMECHAR, /* \c */
+ XML_REGEXP_NOTNAMECHAR, /* \C */
+ XML_REGEXP_DECIMAL, /* \d */
+ XML_REGEXP_NOTDECIMAL, /* \d */
+ XML_REGEXP_REALCHAR, /* \w */
+ XML_REGEXP_NOTREALCHAR, /* \w */
+ XML_REGEXP_LETTER,
+ XML_REGEXP_LETTER_UPPERCASE,
+ XML_REGEXP_LETTER_LOWERCASE,
+ XML_REGEXP_LETTER_TITLECASE,
+ XML_REGEXP_LETTER_MODIFIER,
+ XML_REGEXP_LETTER_OTHERS,
+ XML_REGEXP_MARK,
+ XML_REGEXP_MARK_NONSPACING,
+ XML_REGEXP_MARK_SPACECOMBINING,
+ XML_REGEXP_MARK_ENCLOSING,
+ XML_REGEXP_NUMBER,
+ XML_REGEXP_NUMBER_DECIMAL,
+ XML_REGEXP_NUMBER_LETTER,
+ XML_REGEXP_NUMBER_OTHERS,
+ XML_REGEXP_PUNCT,
+ XML_REGEXP_PUNCT_CONNECTOR,
+ XML_REGEXP_PUNCT_DASH,
+ XML_REGEXP_PUNCT_OPEN,
+ XML_REGEXP_PUNCT_CLOSE,
+ XML_REGEXP_PUNCT_INITQUOTE,
+ XML_REGEXP_PUNCT_FINQUOTE,
+ XML_REGEXP_PUNCT_OTHERS,
+ XML_REGEXP_SEPAR,
+ XML_REGEXP_SEPAR_SPACE,
+ XML_REGEXP_SEPAR_LINE,
+ XML_REGEXP_SEPAR_PARA,
+ XML_REGEXP_SYMBOL,
+ XML_REGEXP_SYMBOL_MATH,
+ XML_REGEXP_SYMBOL_CURRENCY,
+ XML_REGEXP_SYMBOL_MODIFIER,
+ XML_REGEXP_SYMBOL_OTHERS,
+ XML_REGEXP_OTHER,
+ XML_REGEXP_OTHER_CONTROL,
+ XML_REGEXP_OTHER_FORMAT,
+ XML_REGEXP_OTHER_PRIVATE,
+ XML_REGEXP_OTHER_NA,
+ XML_REGEXP_BLOCK_NAME
+} xmlRegAtomType;
+
+typedef enum {
+ XML_REGEXP_QUANT_EPSILON = 1,
+ XML_REGEXP_QUANT_ONCE,
+ XML_REGEXP_QUANT_OPT,
+ XML_REGEXP_QUANT_MULT,
+ XML_REGEXP_QUANT_PLUS,
+ XML_REGEXP_QUANT_ONCEONLY,
+ XML_REGEXP_QUANT_ALL,
+ XML_REGEXP_QUANT_RANGE
+} xmlRegQuantType;
+
+typedef enum {
+ XML_REGEXP_START_STATE = 1,
+ XML_REGEXP_FINAL_STATE,
+ XML_REGEXP_TRANS_STATE
+} xmlRegStateType;
+
+typedef enum {
+ XML_REGEXP_MARK_NORMAL = 0,
+ XML_REGEXP_MARK_START,
+ XML_REGEXP_MARK_VISITED
+} xmlRegMarkedType;
+
+typedef struct _xmlRegRange xmlRegRange;
+typedef xmlRegRange *xmlRegRangePtr;
+
+struct _xmlRegRange {
+ int neg; /* 0 normal, 1 not, 2 exclude */
+ xmlRegAtomType type;
+ int start;
+ int end;
+ xmlChar *blockName;
+};
+
+typedef struct _xmlRegAtom xmlRegAtom;
+typedef xmlRegAtom *xmlRegAtomPtr;
+
+typedef struct _xmlAutomataState xmlRegState;
+typedef xmlRegState *xmlRegStatePtr;
+
+struct _xmlRegAtom {
+ int no;
+ xmlRegAtomType type;
+ xmlRegQuantType quant;
+ int min;
+ int max;
+
+ void *valuep;
+ void *valuep2;
+ int neg;
+ int codepoint;
+ xmlRegStatePtr start;
+ xmlRegStatePtr stop;
+ int maxRanges;
+ int nbRanges;
+ xmlRegRangePtr *ranges;
+ void *data;
+};
+
+typedef struct _xmlRegCounter xmlRegCounter;
+typedef xmlRegCounter *xmlRegCounterPtr;
+
+struct _xmlRegCounter {
+ int min;
+ int max;
+};
+
+typedef struct _xmlRegTrans xmlRegTrans;
+typedef xmlRegTrans *xmlRegTransPtr;
+
+struct _xmlRegTrans {
+ xmlRegAtomPtr atom;
+ int to;
+ int counter;
+ int count;
+};
+
+struct _xmlAutomataState {
+ xmlRegStateType type;
+ xmlRegMarkedType mark;
+ xmlRegMarkedType reached;
+ int no;
+
+ int maxTrans;
+ int nbTrans;
+ xmlRegTrans *trans;
+};
+
+typedef struct _xmlAutomata xmlRegParserCtxt;
+typedef xmlRegParserCtxt *xmlRegParserCtxtPtr;
+
+struct _xmlAutomata {
+ xmlChar *string;
+ xmlChar *cur;
+
+ int error;
+ int neg;
+
+ xmlRegStatePtr start;
+ xmlRegStatePtr end;
+ xmlRegStatePtr state;
+
+ xmlRegAtomPtr atom;
+
+ int maxAtoms;
+ int nbAtoms;
+ xmlRegAtomPtr *atoms;
+
+ int maxStates;
+ int nbStates;
+ xmlRegStatePtr *states;
+
+ int maxCounters;
+ int nbCounters;
+ xmlRegCounter *counters;
+
+ int determinist;
+};
+
+struct _xmlRegexp {
+ xmlChar *string;
+ int nbStates;
+ xmlRegStatePtr *states;
+ int nbAtoms;
+ xmlRegAtomPtr *atoms;
+ int nbCounters;
+ xmlRegCounter *counters;
+ int determinist;
+ /*
+ * That's the compact form for determinists automatas
+ */
+ int nbstates;
+ int *compact;
+ void **transdata;
+ int nbstrings;
+ xmlChar **stringMap;
+};
+
+typedef struct _xmlRegExecRollback xmlRegExecRollback;
+typedef xmlRegExecRollback *xmlRegExecRollbackPtr;
+
+struct _xmlRegExecRollback {
+ xmlRegStatePtr state;/* the current state */
+ int index; /* the index in the input stack */
+ int nextbranch; /* the next transition to explore in that state */
+ int *counts; /* save the automate state if it has some */
+};
+
+typedef struct _xmlRegInputToken xmlRegInputToken;
+typedef xmlRegInputToken *xmlRegInputTokenPtr;
+
+struct _xmlRegInputToken {
+ xmlChar *value;
+ void *data;
+};
+
+struct _xmlRegExecCtxt {
+ int status; /* execution status != 0 indicate an error */
+ int determinist; /* did we found an inderterministic behaviour */
+ xmlRegexpPtr comp; /* the compiled regexp */
+ xmlRegExecCallbacks callback;
+ void *data;
+
+ xmlRegStatePtr state;/* the current state */
+ int transno; /* the current transition on that state */
+ int transcount; /* the number of char in char counted transitions */
+
+ /*
+ * A stack of rollback states
+ */
+ int maxRollbacks;
+ int nbRollbacks;
+ xmlRegExecRollback *rollbacks;
+
+ /*
+ * The state of the automata if any
+ */
+ int *counts;
+
+ /*
+ * The input stack
+ */
+ int inputStackMax;
+ int inputStackNr;
+ int index;
+ int *charStack;
+ const xmlChar *inputString; /* when operating on characters */
+ xmlRegInputTokenPtr inputStack;/* when operating on strings */
+
+};
+
+#define REGEXP_ALL_COUNTER 0x123456
+#define REGEXP_ALL_LAX_COUNTER 0x123457
+
+static void xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top);
+static void xmlRegFreeState(xmlRegStatePtr state);
+static void xmlRegFreeAtom(xmlRegAtomPtr atom);
+
+/************************************************************************
+ * *
+ * Regexp memory error handler *
+ * *
+ ************************************************************************/
+/**
+ * xmlRegexpErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlRegexpErrMemory(xmlRegParserCtxtPtr ctxt, const char *extra)
+{
+ const char *regexp = NULL;
+ if (ctxt != NULL) {
+ regexp = (const char *) ctxt->string;
+ ctxt->error = XML_ERR_NO_MEMORY;
+ }
+ __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
+ regexp, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+}
+
+/**
+ * xmlRegexpErrCompile:
+ * @extra: extra informations
+ *
+ * Handle an compilation failure
+ */
+static void
+xmlRegexpErrCompile(xmlRegParserCtxtPtr ctxt, const char *extra)
+{
+ const char *regexp = NULL;
+ int idx = 0;
+
+ if (ctxt != NULL) {
+ regexp = (const char *) ctxt->string;
+ idx = ctxt->cur - ctxt->string;
+ ctxt->error = XML_REGEXP_COMPILE_ERROR;
+ }
+ __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
+ XML_REGEXP_COMPILE_ERROR, XML_ERR_FATAL, NULL, 0, extra,
+ regexp, NULL, idx, 0,
+ "failed to compile: %s\n", extra);
+}
+
+/************************************************************************
+ * *
+ * Allocation/Deallocation *
+ * *
+ ************************************************************************/
+
+static int xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt);
+/**
+ * xmlRegEpxFromParse:
+ * @ctxt: the parser context used to build it
+ *
+ * Allocate a new regexp and fill it with the reult from the parser
+ *
+ * Returns the new regexp or NULL in case of error
+ */
+static xmlRegexpPtr
+xmlRegEpxFromParse(xmlRegParserCtxtPtr ctxt) {
+ xmlRegexpPtr ret;
+
+ ret = (xmlRegexpPtr) xmlMalloc(sizeof(xmlRegexp));
+ if (ret == NULL) {
+ xmlRegexpErrMemory(ctxt, "compiling regexp");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlRegexp));
+ ret->string = ctxt->string;
+ ret->nbStates = ctxt->nbStates;
+ ret->states = ctxt->states;
+ ret->nbAtoms = ctxt->nbAtoms;
+ ret->atoms = ctxt->atoms;
+ ret->nbCounters = ctxt->nbCounters;
+ ret->counters = ctxt->counters;
+ ret->determinist = ctxt->determinist;
+
+ if ((ret->determinist != 0) &&
+ (ret->nbCounters == 0) &&
+ (ret->atoms != NULL) &&
+ (ret->atoms[0] != NULL) &&
+ (ret->atoms[0]->type == XML_REGEXP_STRING)) {
+ int i, j, nbstates = 0, nbatoms = 0;
+ int *stateRemap;
+ int *stringRemap;
+ int *transitions;
+ void **transdata;
+ xmlChar **stringMap;
+ xmlChar *value;
+
+ /*
+ * Switch to a compact representation
+ * 1/ counting the effective number of states left
+ * 2/ conting the unique number of atoms, and check that
+ * they are all of the string type
+ * 3/ build a table state x atom for the transitions
+ */
+
+ stateRemap = xmlMalloc(ret->nbStates * sizeof(int));
+ if (stateRemap == NULL) {
+ xmlRegexpErrMemory(ctxt, "compiling regexp");
+ xmlFree(ret);
+ return(NULL);
+ }
+ for (i = 0;i < ret->nbStates;i++) {
+ if (ret->states[i] != NULL) {
+ stateRemap[i] = nbstates;
+ nbstates++;
+ } else {
+ stateRemap[i] = -1;
+ }
+ }
+#ifdef DEBUG_COMPACTION
+ printf("Final: %d states\n", nbstates);
+#endif
+ stringMap = xmlMalloc(ret->nbAtoms * sizeof(char *));
+ if (stringMap == NULL) {
+ xmlRegexpErrMemory(ctxt, "compiling regexp");
+ xmlFree(stateRemap);
+ xmlFree(ret);
+ return(NULL);
+ }
+ stringRemap = xmlMalloc(ret->nbAtoms * sizeof(int));
+ if (stringRemap == NULL) {
+ xmlRegexpErrMemory(ctxt, "compiling regexp");
+ xmlFree(stringMap);
+ xmlFree(stateRemap);
+ xmlFree(ret);
+ return(NULL);
+ }
+ for (i = 0;i < ret->nbAtoms;i++) {
+ if ((ret->atoms[i]->type == XML_REGEXP_STRING) &&
+ (ret->atoms[i]->quant == XML_REGEXP_QUANT_ONCE)) {
+ value = ret->atoms[i]->valuep;
+ for (j = 0;j < nbatoms;j++) {
+ if (xmlStrEqual(stringMap[j], value)) {
+ stringRemap[i] = j;
+ break;
+ }
+ }
+ if (j >= nbatoms) {
+ stringRemap[i] = nbatoms;
+ stringMap[nbatoms] = xmlStrdup(value);
+ if (stringMap[nbatoms] == NULL) {
+ for (i = 0;i < nbatoms;i++)
+ xmlFree(stringMap[i]);
+ xmlFree(stringRemap);
+ xmlFree(stringMap);
+ xmlFree(stateRemap);
+ xmlFree(ret);
+ return(NULL);
+ }
+ nbatoms++;
+ }
+ } else {
+ xmlFree(stateRemap);
+ xmlFree(stringRemap);
+ for (i = 0;i < nbatoms;i++)
+ xmlFree(stringMap[i]);
+ xmlFree(stringMap);
+ xmlFree(ret);
+ return(NULL);
+ }
+ }
+#ifdef DEBUG_COMPACTION
+ printf("Final: %d atoms\n", nbatoms);
+#endif
+ transitions = (int *) xmlMalloc((nbstates + 1) *
+ (nbatoms + 1) * sizeof(int));
+ if (transitions == NULL) {
+ xmlFree(stateRemap);
+ xmlFree(stringRemap);
+ xmlFree(stringMap);
+ xmlFree(ret);
+ return(NULL);
+ }
+ memset(transitions, 0, (nbstates + 1) * (nbatoms + 1) * sizeof(int));
+
+ /*
+ * Allocate the transition table. The first entry for each
+ * state correspond to the state type.
+ */
+ transdata = NULL;
+
+ for (i = 0;i < ret->nbStates;i++) {
+ int stateno, atomno, targetno, prev;
+ xmlRegStatePtr state;
+ xmlRegTransPtr trans;
+
+ stateno = stateRemap[i];
+ if (stateno == -1)
+ continue;
+ state = ret->states[i];
+
+ transitions[stateno * (nbatoms + 1)] = state->type;
+
+ for (j = 0;j < state->nbTrans;j++) {
+ trans = &(state->trans[j]);
+ if ((trans->to == -1) || (trans->atom == NULL))
+ continue;
+ atomno = stringRemap[trans->atom->no];
+ if ((trans->atom->data != NULL) && (transdata == NULL)) {
+ transdata = (void **) xmlMalloc(nbstates * nbatoms *
+ sizeof(void *));
+ if (transdata != NULL)
+ memset(transdata, 0,
+ nbstates * nbatoms * sizeof(void *));
+ else {
+ xmlRegexpErrMemory(ctxt, "compiling regexp");
+ break;
+ }
+ }
+ targetno = stateRemap[trans->to];
+ /*
+ * if the same atome can generate transition to 2 different
+ * states then it means the automata is not determinist and
+ * the compact form can't be used !
+ */
+ prev = transitions[stateno * (nbatoms + 1) + atomno + 1];
+ if (prev != 0) {
+ if (prev != targetno + 1) {
+ ret->determinist = 0;
+#ifdef DEBUG_COMPACTION
+ printf("Indet: state %d trans %d, atom %d to %d : %d to %d\n",
+ i, j, trans->atom->no, trans->to, atomno, targetno);
+ printf(" previous to is %d\n", prev);
+#endif
+ ret->determinist = 0;
+ if (transdata != NULL)
+ xmlFree(transdata);
+ xmlFree(transitions);
+ xmlFree(stateRemap);
+ xmlFree(stringRemap);
+ for (i = 0;i < nbatoms;i++)
+ xmlFree(stringMap[i]);
+ xmlFree(stringMap);
+ goto not_determ;
+ }
+ } else {
+#if 0
+ printf("State %d trans %d: atom %d to %d : %d to %d\n",
+ i, j, trans->atom->no, trans->to, atomno, targetno);
+#endif
+ transitions[stateno * (nbatoms + 1) + atomno + 1] =
+ targetno + 1; /* to avoid 0 */
+ if (transdata != NULL)
+ transdata[stateno * nbatoms + atomno] =
+ trans->atom->data;
+ }
+ }
+ }
+ ret->determinist = 1;
+#ifdef DEBUG_COMPACTION
+ /*
+ * Debug
+ */
+ for (i = 0;i < nbstates;i++) {
+ for (j = 0;j < nbatoms + 1;j++) {
+ printf("%02d ", transitions[i * (nbatoms + 1) + j]);
+ }
+ printf("\n");
+ }
+ printf("\n");
+#endif
+ /*
+ * Cleanup of the old data
+ */
+ if (ret->states != NULL) {
+ for (i = 0;i < ret->nbStates;i++)
+ xmlRegFreeState(ret->states[i]);
+ xmlFree(ret->states);
+ }
+ ret->states = NULL;
+ ret->nbStates = 0;
+ if (ret->atoms != NULL) {
+ for (i = 0;i < ret->nbAtoms;i++)
+ xmlRegFreeAtom(ret->atoms[i]);
+ xmlFree(ret->atoms);
+ }
+ ret->atoms = NULL;
+ ret->nbAtoms = 0;
+
+ ret->compact = transitions;
+ ret->transdata = transdata;
+ ret->stringMap = stringMap;
+ ret->nbstrings = nbatoms;
+ ret->nbstates = nbstates;
+ xmlFree(stateRemap);
+ xmlFree(stringRemap);
+ }
+not_determ:
+ ctxt->string = NULL;
+ ctxt->nbStates = 0;
+ ctxt->states = NULL;
+ ctxt->nbAtoms = 0;
+ ctxt->atoms = NULL;
+ ctxt->nbCounters = 0;
+ ctxt->counters = NULL;
+ return(ret);
+}
+
+/**
+ * xmlRegNewParserCtxt:
+ * @string: the string to parse
+ *
+ * Allocate a new regexp parser context
+ *
+ * Returns the new context or NULL in case of error
+ */
+static xmlRegParserCtxtPtr
+xmlRegNewParserCtxt(const xmlChar *string) {
+ xmlRegParserCtxtPtr ret;
+
+ ret = (xmlRegParserCtxtPtr) xmlMalloc(sizeof(xmlRegParserCtxt));
+ if (ret == NULL)
+ return(NULL);
+ memset(ret, 0, sizeof(xmlRegParserCtxt));
+ if (string != NULL)
+ ret->string = xmlStrdup(string);
+ ret->cur = ret->string;
+ ret->neg = 0;
+ ret->error = 0;
+ ret->determinist = -1;
+ return(ret);
+}
+
+/**
+ * xmlRegNewRange:
+ * @ctxt: the regexp parser context
+ * @neg: is that negative
+ * @type: the type of range
+ * @start: the start codepoint
+ * @end: the end codepoint
+ *
+ * Allocate a new regexp range
+ *
+ * Returns the new range or NULL in case of error
+ */
+static xmlRegRangePtr
+xmlRegNewRange(xmlRegParserCtxtPtr ctxt,
+ int neg, xmlRegAtomType type, int start, int end) {
+ xmlRegRangePtr ret;
+
+ ret = (xmlRegRangePtr) xmlMalloc(sizeof(xmlRegRange));
+ if (ret == NULL) {
+ xmlRegexpErrMemory(ctxt, "allocating range");
+ return(NULL);
+ }
+ ret->neg = neg;
+ ret->type = type;
+ ret->start = start;
+ ret->end = end;
+ return(ret);
+}
+
+/**
+ * xmlRegFreeRange:
+ * @range: the regexp range
+ *
+ * Free a regexp range
+ */
+static void
+xmlRegFreeRange(xmlRegRangePtr range) {
+ if (range == NULL)
+ return;
+
+ if (range->blockName != NULL)
+ xmlFree(range->blockName);
+ xmlFree(range);
+}
+
+/**
+ * xmlRegNewAtom:
+ * @ctxt: the regexp parser context
+ * @type: the type of atom
+ *
+ * Allocate a new regexp range
+ *
+ * Returns the new atom or NULL in case of error
+ */
+static xmlRegAtomPtr
+xmlRegNewAtom(xmlRegParserCtxtPtr ctxt, xmlRegAtomType type) {
+ xmlRegAtomPtr ret;
+
+ ret = (xmlRegAtomPtr) xmlMalloc(sizeof(xmlRegAtom));
+ if (ret == NULL) {
+ xmlRegexpErrMemory(ctxt, "allocating atom");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlRegAtom));
+ ret->type = type;
+ ret->quant = XML_REGEXP_QUANT_ONCE;
+ ret->min = 0;
+ ret->max = 0;
+ return(ret);
+}
+
+/**
+ * xmlRegFreeAtom:
+ * @atom: the regexp atom
+ *
+ * Free a regexp atom
+ */
+static void
+xmlRegFreeAtom(xmlRegAtomPtr atom) {
+ int i;
+
+ if (atom == NULL)
+ return;
+
+ for (i = 0;i < atom->nbRanges;i++)
+ xmlRegFreeRange(atom->ranges[i]);
+ if (atom->ranges != NULL)
+ xmlFree(atom->ranges);
+ if (atom->type == XML_REGEXP_STRING)
+ xmlFree(atom->valuep);
+ xmlFree(atom);
+}
+
+static xmlRegStatePtr
+xmlRegNewState(xmlRegParserCtxtPtr ctxt) {
+ xmlRegStatePtr ret;
+
+ ret = (xmlRegStatePtr) xmlMalloc(sizeof(xmlRegState));
+ if (ret == NULL) {
+ xmlRegexpErrMemory(ctxt, "allocating state");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlRegState));
+ ret->type = XML_REGEXP_TRANS_STATE;
+ ret->mark = XML_REGEXP_MARK_NORMAL;
+ return(ret);
+}
+
+/**
+ * xmlRegFreeState:
+ * @state: the regexp state
+ *
+ * Free a regexp state
+ */
+static void
+xmlRegFreeState(xmlRegStatePtr state) {
+ if (state == NULL)
+ return;
+
+ if (state->trans != NULL)
+ xmlFree(state->trans);
+ xmlFree(state);
+}
+
+/**
+ * xmlRegFreeParserCtxt:
+ * @ctxt: the regexp parser context
+ *
+ * Free a regexp parser context
+ */
+static void
+xmlRegFreeParserCtxt(xmlRegParserCtxtPtr ctxt) {
+ int i;
+ if (ctxt == NULL)
+ return;
+
+ if (ctxt->string != NULL)
+ xmlFree(ctxt->string);
+ if (ctxt->states != NULL) {
+ for (i = 0;i < ctxt->nbStates;i++)
+ xmlRegFreeState(ctxt->states[i]);
+ xmlFree(ctxt->states);
+ }
+ if (ctxt->atoms != NULL) {
+ for (i = 0;i < ctxt->nbAtoms;i++)
+ xmlRegFreeAtom(ctxt->atoms[i]);
+ xmlFree(ctxt->atoms);
+ }
+ if (ctxt->counters != NULL)
+ xmlFree(ctxt->counters);
+ xmlFree(ctxt);
+}
+
+/************************************************************************
+ * *
+ * Display of Data structures *
+ * *
+ ************************************************************************/
+
+static void
+xmlRegPrintAtomType(FILE *output, xmlRegAtomType type) {
+ switch (type) {
+ case XML_REGEXP_EPSILON:
+ fprintf(output, "epsilon "); break;
+ case XML_REGEXP_CHARVAL:
+ fprintf(output, "charval "); break;
+ case XML_REGEXP_RANGES:
+ fprintf(output, "ranges "); break;
+ case XML_REGEXP_SUBREG:
+ fprintf(output, "subexpr "); break;
+ case XML_REGEXP_STRING:
+ fprintf(output, "string "); break;
+ case XML_REGEXP_ANYCHAR:
+ fprintf(output, "anychar "); break;
+ case XML_REGEXP_ANYSPACE:
+ fprintf(output, "anyspace "); break;
+ case XML_REGEXP_NOTSPACE:
+ fprintf(output, "notspace "); break;
+ case XML_REGEXP_INITNAME:
+ fprintf(output, "initname "); break;
+ case XML_REGEXP_NOTINITNAME:
+ fprintf(output, "notinitname "); break;
+ case XML_REGEXP_NAMECHAR:
+ fprintf(output, "namechar "); break;
+ case XML_REGEXP_NOTNAMECHAR:
+ fprintf(output, "notnamechar "); break;
+ case XML_REGEXP_DECIMAL:
+ fprintf(output, "decimal "); break;
+ case XML_REGEXP_NOTDECIMAL:
+ fprintf(output, "notdecimal "); break;
+ case XML_REGEXP_REALCHAR:
+ fprintf(output, "realchar "); break;
+ case XML_REGEXP_NOTREALCHAR:
+ fprintf(output, "notrealchar "); break;
+ case XML_REGEXP_LETTER:
+ fprintf(output, "LETTER "); break;
+ case XML_REGEXP_LETTER_UPPERCASE:
+ fprintf(output, "LETTER_UPPERCASE "); break;
+ case XML_REGEXP_LETTER_LOWERCASE:
+ fprintf(output, "LETTER_LOWERCASE "); break;
+ case XML_REGEXP_LETTER_TITLECASE:
+ fprintf(output, "LETTER_TITLECASE "); break;
+ case XML_REGEXP_LETTER_MODIFIER:
+ fprintf(output, "LETTER_MODIFIER "); break;
+ case XML_REGEXP_LETTER_OTHERS:
+ fprintf(output, "LETTER_OTHERS "); break;
+ case XML_REGEXP_MARK:
+ fprintf(output, "MARK "); break;
+ case XML_REGEXP_MARK_NONSPACING:
+ fprintf(output, "MARK_NONSPACING "); break;
+ case XML_REGEXP_MARK_SPACECOMBINING:
+ fprintf(output, "MARK_SPACECOMBINING "); break;
+ case XML_REGEXP_MARK_ENCLOSING:
+ fprintf(output, "MARK_ENCLOSING "); break;
+ case XML_REGEXP_NUMBER:
+ fprintf(output, "NUMBER "); break;
+ case XML_REGEXP_NUMBER_DECIMAL:
+ fprintf(output, "NUMBER_DECIMAL "); break;
+ case XML_REGEXP_NUMBER_LETTER:
+ fprintf(output, "NUMBER_LETTER "); break;
+ case XML_REGEXP_NUMBER_OTHERS:
+ fprintf(output, "NUMBER_OTHERS "); break;
+ case XML_REGEXP_PUNCT:
+ fprintf(output, "PUNCT "); break;
+ case XML_REGEXP_PUNCT_CONNECTOR:
+ fprintf(output, "PUNCT_CONNECTOR "); break;
+ case XML_REGEXP_PUNCT_DASH:
+ fprintf(output, "PUNCT_DASH "); break;
+ case XML_REGEXP_PUNCT_OPEN:
+ fprintf(output, "PUNCT_OPEN "); break;
+ case XML_REGEXP_PUNCT_CLOSE:
+ fprintf(output, "PUNCT_CLOSE "); break;
+ case XML_REGEXP_PUNCT_INITQUOTE:
+ fprintf(output, "PUNCT_INITQUOTE "); break;
+ case XML_REGEXP_PUNCT_FINQUOTE:
+ fprintf(output, "PUNCT_FINQUOTE "); break;
+ case XML_REGEXP_PUNCT_OTHERS:
+ fprintf(output, "PUNCT_OTHERS "); break;
+ case XML_REGEXP_SEPAR:
+ fprintf(output, "SEPAR "); break;
+ case XML_REGEXP_SEPAR_SPACE:
+ fprintf(output, "SEPAR_SPACE "); break;
+ case XML_REGEXP_SEPAR_LINE:
+ fprintf(output, "SEPAR_LINE "); break;
+ case XML_REGEXP_SEPAR_PARA:
+ fprintf(output, "SEPAR_PARA "); break;
+ case XML_REGEXP_SYMBOL:
+ fprintf(output, "SYMBOL "); break;
+ case XML_REGEXP_SYMBOL_MATH:
+ fprintf(output, "SYMBOL_MATH "); break;
+ case XML_REGEXP_SYMBOL_CURRENCY:
+ fprintf(output, "SYMBOL_CURRENCY "); break;
+ case XML_REGEXP_SYMBOL_MODIFIER:
+ fprintf(output, "SYMBOL_MODIFIER "); break;
+ case XML_REGEXP_SYMBOL_OTHERS:
+ fprintf(output, "SYMBOL_OTHERS "); break;
+ case XML_REGEXP_OTHER:
+ fprintf(output, "OTHER "); break;
+ case XML_REGEXP_OTHER_CONTROL:
+ fprintf(output, "OTHER_CONTROL "); break;
+ case XML_REGEXP_OTHER_FORMAT:
+ fprintf(output, "OTHER_FORMAT "); break;
+ case XML_REGEXP_OTHER_PRIVATE:
+ fprintf(output, "OTHER_PRIVATE "); break;
+ case XML_REGEXP_OTHER_NA:
+ fprintf(output, "OTHER_NA "); break;
+ case XML_REGEXP_BLOCK_NAME:
+ fprintf(output, "BLOCK "); break;
+ }
+}
+
+static void
+xmlRegPrintQuantType(FILE *output, xmlRegQuantType type) {
+ switch (type) {
+ case XML_REGEXP_QUANT_EPSILON:
+ fprintf(output, "epsilon "); break;
+ case XML_REGEXP_QUANT_ONCE:
+ fprintf(output, "once "); break;
+ case XML_REGEXP_QUANT_OPT:
+ fprintf(output, "? "); break;
+ case XML_REGEXP_QUANT_MULT:
+ fprintf(output, "* "); break;
+ case XML_REGEXP_QUANT_PLUS:
+ fprintf(output, "+ "); break;
+ case XML_REGEXP_QUANT_RANGE:
+ fprintf(output, "range "); break;
+ case XML_REGEXP_QUANT_ONCEONLY:
+ fprintf(output, "onceonly "); break;
+ case XML_REGEXP_QUANT_ALL:
+ fprintf(output, "all "); break;
+ }
+}
+static void
+xmlRegPrintRange(FILE *output, xmlRegRangePtr range) {
+ fprintf(output, " range: ");
+ if (range->neg)
+ fprintf(output, "negative ");
+ xmlRegPrintAtomType(output, range->type);
+ fprintf(output, "%c - %c\n", range->start, range->end);
+}
+
+static void
+xmlRegPrintAtom(FILE *output, xmlRegAtomPtr atom) {
+ fprintf(output, " atom: ");
+ if (atom == NULL) {
+ fprintf(output, "NULL\n");
+ return;
+ }
+ xmlRegPrintAtomType(output, atom->type);
+ xmlRegPrintQuantType(output, atom->quant);
+ if (atom->quant == XML_REGEXP_QUANT_RANGE)
+ fprintf(output, "%d-%d ", atom->min, atom->max);
+ if (atom->type == XML_REGEXP_STRING)
+ fprintf(output, "'%s' ", (char *) atom->valuep);
+ if (atom->type == XML_REGEXP_CHARVAL)
+ fprintf(output, "char %c\n", atom->codepoint);
+ else if (atom->type == XML_REGEXP_RANGES) {
+ int i;
+ fprintf(output, "%d entries\n", atom->nbRanges);
+ for (i = 0; i < atom->nbRanges;i++)
+ xmlRegPrintRange(output, atom->ranges[i]);
+ } else if (atom->type == XML_REGEXP_SUBREG) {
+ fprintf(output, "start %d end %d\n", atom->start->no, atom->stop->no);
+ } else {
+ fprintf(output, "\n");
+ }
+}
+
+static void
+xmlRegPrintTrans(FILE *output, xmlRegTransPtr trans) {
+ fprintf(output, " trans: ");
+ if (trans == NULL) {
+ fprintf(output, "NULL\n");
+ return;
+ }
+ if (trans->to < 0) {
+ fprintf(output, "removed\n");
+ return;
+ }
+ if (trans->counter >= 0) {
+ fprintf(output, "counted %d, ", trans->counter);
+ }
+ if (trans->count == REGEXP_ALL_COUNTER) {
+ fprintf(output, "all transition, ");
+ } else if (trans->count >= 0) {
+ fprintf(output, "count based %d, ", trans->count);
+ }
+ if (trans->atom == NULL) {
+ fprintf(output, "epsilon to %d\n", trans->to);
+ return;
+ }
+ if (trans->atom->type == XML_REGEXP_CHARVAL)
+ fprintf(output, "char %c ", trans->atom->codepoint);
+ fprintf(output, "atom %d, to %d\n", trans->atom->no, trans->to);
+}
+
+static void
+xmlRegPrintState(FILE *output, xmlRegStatePtr state) {
+ int i;
+
+ fprintf(output, " state: ");
+ if (state == NULL) {
+ fprintf(output, "NULL\n");
+ return;
+ }
+ if (state->type == XML_REGEXP_START_STATE)
+ fprintf(output, "START ");
+ if (state->type == XML_REGEXP_FINAL_STATE)
+ fprintf(output, "FINAL ");
+
+ fprintf(output, "%d, %d transitions:\n", state->no, state->nbTrans);
+ for (i = 0;i < state->nbTrans; i++) {
+ xmlRegPrintTrans(output, &(state->trans[i]));
+ }
+}
+
+#ifdef DEBUG_REGEXP_GRAPH
+static void
+xmlRegPrintCtxt(FILE *output, xmlRegParserCtxtPtr ctxt) {
+ int i;
+
+ fprintf(output, " ctxt: ");
+ if (ctxt == NULL) {
+ fprintf(output, "NULL\n");
+ return;
+ }
+ fprintf(output, "'%s' ", ctxt->string);
+ if (ctxt->error)
+ fprintf(output, "error ");
+ if (ctxt->neg)
+ fprintf(output, "neg ");
+ fprintf(output, "\n");
+ fprintf(output, "%d atoms:\n", ctxt->nbAtoms);
+ for (i = 0;i < ctxt->nbAtoms; i++) {
+ fprintf(output, " %02d ", i);
+ xmlRegPrintAtom(output, ctxt->atoms[i]);
+ }
+ if (ctxt->atom != NULL) {
+ fprintf(output, "current atom:\n");
+ xmlRegPrintAtom(output, ctxt->atom);
+ }
+ fprintf(output, "%d states:", ctxt->nbStates);
+ if (ctxt->start != NULL)
+ fprintf(output, " start: %d", ctxt->start->no);
+ if (ctxt->end != NULL)
+ fprintf(output, " end: %d", ctxt->end->no);
+ fprintf(output, "\n");
+ for (i = 0;i < ctxt->nbStates; i++) {
+ xmlRegPrintState(output, ctxt->states[i]);
+ }
+ fprintf(output, "%d counters:\n", ctxt->nbCounters);
+ for (i = 0;i < ctxt->nbCounters; i++) {
+ fprintf(output, " %d: min %d max %d\n", i, ctxt->counters[i].min,
+ ctxt->counters[i].max);
+ }
+}
+#endif
+
+/************************************************************************
+ * *
+ * Finite Automata structures manipulations *
+ * *
+ ************************************************************************/
+
+static void
+xmlRegAtomAddRange(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom,
+ int neg, xmlRegAtomType type, int start, int end,
+ xmlChar *blockName) {
+ xmlRegRangePtr range;
+
+ if (atom == NULL) {
+ ERROR("add range: atom is NULL");
+ return;
+ }
+ if (atom->type != XML_REGEXP_RANGES) {
+ ERROR("add range: atom is not ranges");
+ return;
+ }
+ if (atom->maxRanges == 0) {
+ atom->maxRanges = 4;
+ atom->ranges = (xmlRegRangePtr *) xmlMalloc(atom->maxRanges *
+ sizeof(xmlRegRangePtr));
+ if (atom->ranges == NULL) {
+ xmlRegexpErrMemory(ctxt, "adding ranges");
+ atom->maxRanges = 0;
+ return;
+ }
+ } else if (atom->nbRanges >= atom->maxRanges) {
+ xmlRegRangePtr *tmp;
+ atom->maxRanges *= 2;
+ tmp = (xmlRegRangePtr *) xmlRealloc(atom->ranges, atom->maxRanges *
+ sizeof(xmlRegRangePtr));
+ if (tmp == NULL) {
+ xmlRegexpErrMemory(ctxt, "adding ranges");
+ atom->maxRanges /= 2;
+ return;
+ }
+ atom->ranges = tmp;
+ }
+ range = xmlRegNewRange(ctxt, neg, type, start, end);
+ if (range == NULL)
+ return;
+ range->blockName = blockName;
+ atom->ranges[atom->nbRanges++] = range;
+
+}
+
+static int
+xmlRegGetCounter(xmlRegParserCtxtPtr ctxt) {
+ if (ctxt->maxCounters == 0) {
+ ctxt->maxCounters = 4;
+ ctxt->counters = (xmlRegCounter *) xmlMalloc(ctxt->maxCounters *
+ sizeof(xmlRegCounter));
+ if (ctxt->counters == NULL) {
+ xmlRegexpErrMemory(ctxt, "allocating counter");
+ ctxt->maxCounters = 0;
+ return(-1);
+ }
+ } else if (ctxt->nbCounters >= ctxt->maxCounters) {
+ xmlRegCounter *tmp;
+ ctxt->maxCounters *= 2;
+ tmp = (xmlRegCounter *) xmlRealloc(ctxt->counters, ctxt->maxCounters *
+ sizeof(xmlRegCounter));
+ if (tmp == NULL) {
+ xmlRegexpErrMemory(ctxt, "allocating counter");
+ ctxt->maxCounters /= 2;
+ return(-1);
+ }
+ ctxt->counters = tmp;
+ }
+ ctxt->counters[ctxt->nbCounters].min = -1;
+ ctxt->counters[ctxt->nbCounters].max = -1;
+ return(ctxt->nbCounters++);
+}
+
+static int
+xmlRegAtomPush(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) {
+ if (atom == NULL) {
+ ERROR("atom push: atom is NULL");
+ return(-1);
+ }
+ if (ctxt->maxAtoms == 0) {
+ ctxt->maxAtoms = 4;
+ ctxt->atoms = (xmlRegAtomPtr *) xmlMalloc(ctxt->maxAtoms *
+ sizeof(xmlRegAtomPtr));
+ if (ctxt->atoms == NULL) {
+ xmlRegexpErrMemory(ctxt, "pushing atom");
+ ctxt->maxAtoms = 0;
+ return(-1);
+ }
+ } else if (ctxt->nbAtoms >= ctxt->maxAtoms) {
+ xmlRegAtomPtr *tmp;
+ ctxt->maxAtoms *= 2;
+ tmp = (xmlRegAtomPtr *) xmlRealloc(ctxt->atoms, ctxt->maxAtoms *
+ sizeof(xmlRegAtomPtr));
+ if (tmp == NULL) {
+ xmlRegexpErrMemory(ctxt, "allocating counter");
+ ctxt->maxAtoms /= 2;
+ return(-1);
+ }
+ ctxt->atoms = tmp;
+ }
+ atom->no = ctxt->nbAtoms;
+ ctxt->atoms[ctxt->nbAtoms++] = atom;
+ return(0);
+}
+
+static void
+xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
+ xmlRegAtomPtr atom, xmlRegStatePtr target,
+ int counter, int count) {
+ if (state == NULL) {
+ ERROR("add state: state is NULL");
+ return;
+ }
+ if (target == NULL) {
+ ERROR("add state: target is NULL");
+ return;
+ }
+ if (state->maxTrans == 0) {
+ state->maxTrans = 4;
+ state->trans = (xmlRegTrans *) xmlMalloc(state->maxTrans *
+ sizeof(xmlRegTrans));
+ if (state->trans == NULL) {
+ xmlRegexpErrMemory(ctxt, "adding transition");
+ state->maxTrans = 0;
+ return;
+ }
+ } else if (state->nbTrans >= state->maxTrans) {
+ xmlRegTrans *tmp;
+ state->maxTrans *= 2;
+ tmp = (xmlRegTrans *) xmlRealloc(state->trans, state->maxTrans *
+ sizeof(xmlRegTrans));
+ if (tmp == NULL) {
+ xmlRegexpErrMemory(ctxt, "adding transition");
+ state->maxTrans /= 2;
+ return;
+ }
+ state->trans = tmp;
+ }
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("Add trans from %d to %d ", state->no, target->no);
+ if (count == REGEXP_ALL_COUNTER)
+ printf("all transition");
+ else if (count >= 0)
+ printf("count based %d", count);
+ else if (counter >= 0)
+ printf("counted %d", counter);
+ else if (atom == NULL)
+ printf("epsilon transition");
+ printf("\n");
+#endif
+
+ state->trans[state->nbTrans].atom = atom;
+ state->trans[state->nbTrans].to = target->no;
+ state->trans[state->nbTrans].counter = counter;
+ state->trans[state->nbTrans].count = count;
+ state->nbTrans++;
+}
+
+static int
+xmlRegStatePush(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state) {
+ if (state == NULL) return(-1);
+ if (ctxt->maxStates == 0) {
+ ctxt->maxStates = 4;
+ ctxt->states = (xmlRegStatePtr *) xmlMalloc(ctxt->maxStates *
+ sizeof(xmlRegStatePtr));
+ if (ctxt->states == NULL) {
+ xmlRegexpErrMemory(ctxt, "adding state");
+ ctxt->maxStates = 0;
+ return(-1);
+ }
+ } else if (ctxt->nbStates >= ctxt->maxStates) {
+ xmlRegStatePtr *tmp;
+ ctxt->maxStates *= 2;
+ tmp = (xmlRegStatePtr *) xmlRealloc(ctxt->states, ctxt->maxStates *
+ sizeof(xmlRegStatePtr));
+ if (tmp == NULL) {
+ xmlRegexpErrMemory(ctxt, "adding state");
+ ctxt->maxStates /= 2;
+ return(-1);
+ }
+ ctxt->states = tmp;
+ }
+ state->no = ctxt->nbStates;
+ ctxt->states[ctxt->nbStates++] = state;
+ return(0);
+}
+
+/**
+ * xmlFAGenerateAllTransition:
+ * @ctxt: a regexp parser context
+ * @from: the from state
+ * @to: the target state or NULL for building a new one
+ * @lax:
+ *
+ */
+static void
+xmlFAGenerateAllTransition(xmlRegParserCtxtPtr ctxt,
+ xmlRegStatePtr from, xmlRegStatePtr to,
+ int lax) {
+ if (to == NULL) {
+ to = xmlRegNewState(ctxt);
+ xmlRegStatePush(ctxt, to);
+ ctxt->state = to;
+ }
+ if (lax)
+ xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_LAX_COUNTER);
+ else
+ xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_COUNTER);
+}
+
+/**
+ * xmlFAGenerateEpsilonTransition:
+ * @ctxt: a regexp parser context
+ * @from: the from state
+ * @to: the target state or NULL for building a new one
+ *
+ */
+static void
+xmlFAGenerateEpsilonTransition(xmlRegParserCtxtPtr ctxt,
+ xmlRegStatePtr from, xmlRegStatePtr to) {
+ if (to == NULL) {
+ to = xmlRegNewState(ctxt);
+ xmlRegStatePush(ctxt, to);
+ ctxt->state = to;
+ }
+ xmlRegStateAddTrans(ctxt, from, NULL, to, -1, -1);
+}
+
+/**
+ * xmlFAGenerateCountedEpsilonTransition:
+ * @ctxt: a regexp parser context
+ * @from: the from state
+ * @to: the target state or NULL for building a new one
+ * counter: the counter for that transition
+ *
+ */
+static void
+xmlFAGenerateCountedEpsilonTransition(xmlRegParserCtxtPtr ctxt,
+ xmlRegStatePtr from, xmlRegStatePtr to, int counter) {
+ if (to == NULL) {
+ to = xmlRegNewState(ctxt);
+ xmlRegStatePush(ctxt, to);
+ ctxt->state = to;
+ }
+ xmlRegStateAddTrans(ctxt, from, NULL, to, counter, -1);
+}
+
+/**
+ * xmlFAGenerateCountedTransition:
+ * @ctxt: a regexp parser context
+ * @from: the from state
+ * @to: the target state or NULL for building a new one
+ * counter: the counter for that transition
+ *
+ */
+static void
+xmlFAGenerateCountedTransition(xmlRegParserCtxtPtr ctxt,
+ xmlRegStatePtr from, xmlRegStatePtr to, int counter) {
+ if (to == NULL) {
+ to = xmlRegNewState(ctxt);
+ xmlRegStatePush(ctxt, to);
+ ctxt->state = to;
+ }
+ xmlRegStateAddTrans(ctxt, from, NULL, to, -1, counter);
+}
+
+/**
+ * xmlFAGenerateTransitions:
+ * @ctxt: a regexp parser context
+ * @from: the from state
+ * @to: the target state or NULL for building a new one
+ * @atom: the atom generating the transition
+ *
+ * Returns 0 if succes and -1 in case of error.
+ */
+static int
+xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
+ xmlRegStatePtr to, xmlRegAtomPtr atom) {
+ if (atom == NULL) {
+ ERROR("genrate transition: atom == NULL");
+ return(-1);
+ }
+ if (atom->type == XML_REGEXP_SUBREG) {
+ /*
+ * this is a subexpression handling one should not need to
+ * create a new node excep for XML_REGEXP_QUANT_RANGE.
+ */
+ if (xmlRegAtomPush(ctxt, atom) < 0) {
+ return(-1);
+ }
+ if ((to != NULL) && (atom->stop != to) &&
+ (atom->quant != XML_REGEXP_QUANT_RANGE)) {
+ /*
+ * Generate an epsilon transition to link to the target
+ */
+ xmlFAGenerateEpsilonTransition(ctxt, atom->stop, to);
+ }
+ switch (atom->quant) {
+ case XML_REGEXP_QUANT_OPT:
+ atom->quant = XML_REGEXP_QUANT_ONCE;
+ xmlFAGenerateEpsilonTransition(ctxt, atom->start, atom->stop);
+ break;
+ case XML_REGEXP_QUANT_MULT:
+ atom->quant = XML_REGEXP_QUANT_ONCE;
+ xmlFAGenerateEpsilonTransition(ctxt, atom->start, atom->stop);
+ xmlFAGenerateEpsilonTransition(ctxt, atom->stop, atom->start);
+ break;
+ case XML_REGEXP_QUANT_PLUS:
+ atom->quant = XML_REGEXP_QUANT_ONCE;
+ xmlFAGenerateEpsilonTransition(ctxt, atom->stop, atom->start);
+ break;
+ case XML_REGEXP_QUANT_RANGE: {
+ int counter;
+ xmlRegStatePtr newstate;
+
+ /*
+ * This one is nasty:
+ * 1/ register a new counter
+ * 2/ register an epsilon transition associated to
+ * this counter going from atom->stop to atom->start
+ * 3/ create a new state
+ * 4/ generate a counted transition from atom->stop to
+ * that state
+ */
+ counter = xmlRegGetCounter(ctxt);
+ ctxt->counters[counter].min = atom->min - 1;
+ ctxt->counters[counter].max = atom->max - 1;
+ atom->min = 0;
+ atom->max = 0;
+ atom->quant = XML_REGEXP_QUANT_ONCE;
+ xmlFAGenerateCountedEpsilonTransition(ctxt, atom->stop,
+ atom->start, counter);
+ if (to != NULL) {
+ newstate = to;
+ } else {
+ newstate = xmlRegNewState(ctxt);
+ xmlRegStatePush(ctxt, newstate);
+ ctxt->state = newstate;
+ }
+ xmlFAGenerateCountedTransition(ctxt, atom->stop,
+ newstate, counter);
+ }
+ default:
+ break;
+ }
+ return(0);
+ } else {
+ if (to == NULL) {
+ to = xmlRegNewState(ctxt);
+ if (to != NULL)
+ xmlRegStatePush(ctxt, to);
+ else {
+ return(-1);
+ }
+ }
+ if (xmlRegAtomPush(ctxt, atom) < 0) {
+ return(-1);
+ }
+ xmlRegStateAddTrans(ctxt, from, atom, to, -1, -1);
+ ctxt->state = to;
+ }
+ switch (atom->quant) {
+ case XML_REGEXP_QUANT_OPT:
+ atom->quant = XML_REGEXP_QUANT_ONCE;
+ xmlFAGenerateEpsilonTransition(ctxt, from, to);
+ break;
+ case XML_REGEXP_QUANT_MULT:
+ atom->quant = XML_REGEXP_QUANT_ONCE;
+ xmlFAGenerateEpsilonTransition(ctxt, from, to);
+ xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
+ break;
+ case XML_REGEXP_QUANT_PLUS:
+ atom->quant = XML_REGEXP_QUANT_ONCE;
+ xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
+ break;
+ default:
+ break;
+ }
+ return(0);
+}
+
+/**
+ * xmlFAReduceEpsilonTransitions:
+ * @ctxt: a regexp parser context
+ * @fromnr: the from state
+ * @tonr: the to state
+ * @cpunter: should that transition be associted to a counted
+ *
+ */
+static void
+xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
+ int tonr, int counter) {
+ int transnr;
+ xmlRegStatePtr from;
+ xmlRegStatePtr to;
+
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("xmlFAReduceEpsilonTransitions(%d, %d)\n", fromnr, tonr);
+#endif
+ from = ctxt->states[fromnr];
+ if (from == NULL)
+ return;
+ to = ctxt->states[tonr];
+ if (to == NULL)
+ return;
+ if ((to->mark == XML_REGEXP_MARK_START) ||
+ (to->mark == XML_REGEXP_MARK_VISITED))
+ return;
+
+ to->mark = XML_REGEXP_MARK_VISITED;
+ if (to->type == XML_REGEXP_FINAL_STATE) {
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("State %d is final, so %d becomes final\n", tonr, fromnr);
+#endif
+ from->type = XML_REGEXP_FINAL_STATE;
+ }
+ for (transnr = 0;transnr < to->nbTrans;transnr++) {
+ if (to->trans[transnr].atom == NULL) {
+ /*
+ * Don't remove counted transitions
+ * Don't loop either
+ */
+ if (to->trans[transnr].to != fromnr) {
+ if (to->trans[transnr].count >= 0) {
+ int newto = to->trans[transnr].to;
+
+ xmlRegStateAddTrans(ctxt, from, NULL,
+ ctxt->states[newto],
+ -1, to->trans[transnr].count);
+ } else {
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("Found epsilon trans %d from %d to %d\n",
+ transnr, tonr, to->trans[transnr].to);
+#endif
+ if (to->trans[transnr].counter >= 0) {
+ xmlFAReduceEpsilonTransitions(ctxt, fromnr,
+ to->trans[transnr].to,
+ to->trans[transnr].counter);
+ } else {
+ xmlFAReduceEpsilonTransitions(ctxt, fromnr,
+ to->trans[transnr].to,
+ counter);
+ }
+ }
+ }
+ } else {
+ int newto = to->trans[transnr].to;
+
+ if (to->trans[transnr].counter >= 0) {
+ xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
+ ctxt->states[newto],
+ to->trans[transnr].counter, -1);
+ } else {
+ xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
+ ctxt->states[newto], counter, -1);
+ }
+ }
+ }
+ to->mark = XML_REGEXP_MARK_NORMAL;
+}
+
+/**
+ * xmlFAEliminateEpsilonTransitions:
+ * @ctxt: a regexp parser context
+ *
+ */
+static void
+xmlFAEliminateEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
+ int statenr, transnr;
+ xmlRegStatePtr state;
+
+ if (ctxt->states == NULL) return;
+
+
+ /*
+ * build the completed transitions bypassing the epsilons
+ * Use a marking algorithm to avoid loops
+ */
+ 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].to >= 0)) {
+ if (state->trans[transnr].to == statenr) {
+ state->trans[transnr].to = -1;
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("Removed loopback epsilon trans %d on %d\n",
+ transnr, statenr);
+#endif
+ } else if (state->trans[transnr].count < 0) {
+ int newto = state->trans[transnr].to;
+
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("Found epsilon trans %d from %d to %d\n",
+ transnr, statenr, newto);
+#endif
+ state->mark = XML_REGEXP_MARK_START;
+ xmlFAReduceEpsilonTransitions(ctxt, statenr,
+ newto, state->trans[transnr].counter);
+ state->mark = XML_REGEXP_MARK_NORMAL;
+#ifdef DEBUG_REGEXP_GRAPH
+ } else {
+ printf("Found counted transition %d on %d\n",
+ transnr, statenr);
+#endif
+ }
+ }
+ }
+ }
+ /*
+ * 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;
+ }
+ }
+ }
+
+ /*
+ * Use this pass to detect unreachable states too
+ */
+ for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
+ state = ctxt->states[statenr];
+ if (state != NULL)
+ state->reached = XML_REGEXP_MARK_NORMAL;
+ }
+ state = ctxt->states[0];
+ if (state != NULL)
+ state->reached = XML_REGEXP_MARK_START;
+ while (state != NULL) {
+ xmlRegStatePtr target = NULL;
+ state->reached = XML_REGEXP_MARK_VISITED;
+ /*
+ * Mark all state reachable from the current reachable state
+ */
+ for (transnr = 0;transnr < state->nbTrans;transnr++) {
+ if ((state->trans[transnr].to >= 0) &&
+ ((state->trans[transnr].atom != NULL) ||
+ (state->trans[transnr].count >= 0))) {
+ int newto = state->trans[transnr].to;
+
+ if (ctxt->states[newto] == NULL)
+ continue;
+ if (ctxt->states[newto]->reached == XML_REGEXP_MARK_NORMAL) {
+ ctxt->states[newto]->reached = XML_REGEXP_MARK_START;
+ target = ctxt->states[newto];
+ }
+ }
+ }
+ /*
+ * find the next accessible state not explored
+ */
+ if (target == NULL) {
+ for (statenr = 1;statenr < ctxt->nbStates;statenr++) {
+ state = ctxt->states[statenr];
+ if ((state != NULL) && (state->reached ==
+ XML_REGEXP_MARK_START)) {
+ target = state;
+ break;
+ }
+ }
+ }
+ state = target;
+ }
+ for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
+ state = ctxt->states[statenr];
+ if ((state != NULL) && (state->reached == XML_REGEXP_MARK_NORMAL)) {
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("Removed unreachable state %d\n", statenr);
+#endif
+ xmlRegFreeState(state);
+ ctxt->states[statenr] = NULL;
+ }
+ }
+
+}
+
+/**
+ * xmlFACompareAtoms:
+ * @atom1: an atom
+ * @atom2: an atom
+ *
+ * Compares two atoms to check whether they are equivatents
+ *
+ * Returns 1 if yes and 0 otherwise
+ */
+static int
+xmlFACompareAtoms(xmlRegAtomPtr atom1, xmlRegAtomPtr atom2) {
+ if (atom1 == atom2)
+ return(1);
+ if ((atom1 == NULL) || (atom2 == NULL))
+ return(0);
+
+ if (atom1->type != atom2->type)
+ return(0);
+ switch (atom1->type) {
+ case XML_REGEXP_STRING:
+ return(xmlStrEqual((xmlChar *)atom1->valuep,
+ (xmlChar *)atom2->valuep));
+ case XML_REGEXP_EPSILON:
+ return(1);
+ case XML_REGEXP_CHARVAL:
+ return(atom1->codepoint == atom2->codepoint);
+ case XML_REGEXP_RANGES:
+ TODO;
+ return(0);
+ default:
+ break;
+ }
+ return(1);
+}
+
+/**
+ * xmlFARecurseDeterminism:
+ * @ctxt: a regexp parser context
+ *
+ * Check whether the associated regexp is determinist,
+ * should be called after xmlFAEliminateEpsilonTransitions()
+ *
+ */
+static int
+xmlFARecurseDeterminism(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
+ int to, xmlRegAtomPtr atom) {
+ int ret = 1;
+ int transnr;
+ xmlRegTransPtr t1;
+
+ if (state == NULL)
+ return(ret);
+ for (transnr = 0;transnr < state->nbTrans;transnr++) {
+ t1 = &(state->trans[transnr]);
+ /*
+ * check transitions conflicting with the one looked at
+ */
+ if (t1->atom == NULL) {
+ if (t1->to == -1)
+ continue;
+ ret = xmlFARecurseDeterminism(ctxt, ctxt->states[t1->to],
+ to, atom);
+ if (ret == 0)
+ return(0);
+ continue;
+ }
+ if (t1->to != to)
+ continue;
+ if (xmlFACompareAtoms(t1->atom, atom))
+ return(0);
+ }
+ return(ret);
+}
+
+/**
+ * xmlFAComputesDeterminism:
+ * @ctxt: a regexp parser context
+ *
+ * Check whether the associated regexp is determinist,
+ * should be called after xmlFAEliminateEpsilonTransitions()
+ *
+ */
+static int
+xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) {
+ int statenr, transnr;
+ xmlRegStatePtr state;
+ xmlRegTransPtr t1, t2;
+ int i;
+ int ret = 1;
+
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("xmlFAComputesDeterminism\n");
+ xmlRegPrintCtxt(stdout, ctxt);
+#endif
+ if (ctxt->determinist != -1)
+ return(ctxt->determinist);
+
+ /*
+ * Check for all states that there isn't 2 transitions
+ * with the same atom and a different target.
+ */
+ for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
+ state = ctxt->states[statenr];
+ if (state == NULL)
+ continue;
+ for (transnr = 0;transnr < state->nbTrans;transnr++) {
+ t1 = &(state->trans[transnr]);
+ /*
+ * Determinism checks in case of counted or all transitions
+ * will have to be handled separately
+ */
+ if (t1->atom == NULL)
+ continue;
+ if (t1->to == -1) /* eliminated */
+ continue;
+ for (i = 0;i < transnr;i++) {
+ t2 = &(state->trans[i]);
+ if (t2->to == -1) /* eliminated */
+ continue;
+ if (t2->atom != NULL) {
+ if (t1->to == t2->to) {
+ if (xmlFACompareAtoms(t1->atom, t2->atom))
+ t2->to = -1; /* eliminate */
+ } else {
+ /* not determinist ! */
+ if (xmlFACompareAtoms(t1->atom, t2->atom))
+ ret = 0;
+ }
+ } else if (t1->to != -1) {
+ /*
+ * do the closure in case of remaining specific
+ * epsilon transitions like choices or all
+ */
+ ret = xmlFARecurseDeterminism(ctxt, ctxt->states[t1->to],
+ t2->to, t2->atom);
+ if (ret == 0)
+ return(0);
+ }
+ }
+ if (ret == 0)
+ break;
+ }
+ if (ret == 0)
+ break;
+ }
+ ctxt->determinist = ret;
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * Routines to check input against transition atoms *
+ * *
+ ************************************************************************/
+
+static int
+xmlRegCheckCharacterRange(xmlRegAtomType type, int codepoint, int neg,
+ int start, int end, const xmlChar *blockName) {
+ int ret = 0;
+
+ switch (type) {
+ case XML_REGEXP_STRING:
+ case XML_REGEXP_SUBREG:
+ case XML_REGEXP_RANGES:
+ case XML_REGEXP_EPSILON:
+ return(-1);
+ case XML_REGEXP_ANYCHAR:
+ ret = ((codepoint != '\n') && (codepoint != '\r'));
+ break;
+ case XML_REGEXP_CHARVAL:
+ ret = ((codepoint >= start) && (codepoint <= end));
+ break;
+ case XML_REGEXP_NOTSPACE:
+ neg = !neg;
+ case XML_REGEXP_ANYSPACE:
+ ret = ((codepoint == '\n') || (codepoint == '\r') ||
+ (codepoint == '\t') || (codepoint == ' '));
+ break;
+ case XML_REGEXP_NOTINITNAME:
+ neg = !neg;
+ case XML_REGEXP_INITNAME:
+ ret = (IS_LETTER(codepoint) ||
+ (codepoint == '_') || (codepoint == ':'));
+ break;
+ case XML_REGEXP_NOTNAMECHAR:
+ neg = !neg;
+ case XML_REGEXP_NAMECHAR:
+ ret = (IS_LETTER(codepoint) || IS_DIGIT(codepoint) ||
+ (codepoint == '.') || (codepoint == '-') ||
+ (codepoint == '_') || (codepoint == ':') ||
+ IS_COMBINING(codepoint) || IS_EXTENDER(codepoint));
+ break;
+ case XML_REGEXP_NOTDECIMAL:
+ neg = !neg;
+ case XML_REGEXP_DECIMAL:
+ ret = xmlUCSIsCatNd(codepoint);
+ break;
+ case XML_REGEXP_REALCHAR:
+ neg = !neg;
+ case XML_REGEXP_NOTREALCHAR:
+ ret = xmlUCSIsCatP(codepoint);
+ if (ret == 0)
+ ret = xmlUCSIsCatZ(codepoint);
+ if (ret == 0)
+ ret = xmlUCSIsCatC(codepoint);
+ break;
+ case XML_REGEXP_LETTER:
+ ret = xmlUCSIsCatL(codepoint);
+ break;
+ case XML_REGEXP_LETTER_UPPERCASE:
+ ret = xmlUCSIsCatLu(codepoint);
+ break;
+ case XML_REGEXP_LETTER_LOWERCASE:
+ ret = xmlUCSIsCatLl(codepoint);
+ break;
+ case XML_REGEXP_LETTER_TITLECASE:
+ ret = xmlUCSIsCatLt(codepoint);
+ break;
+ case XML_REGEXP_LETTER_MODIFIER:
+ ret = xmlUCSIsCatLm(codepoint);
+ break;
+ case XML_REGEXP_LETTER_OTHERS:
+ ret = xmlUCSIsCatLo(codepoint);
+ break;
+ case XML_REGEXP_MARK:
+ ret = xmlUCSIsCatM(codepoint);
+ break;
+ case XML_REGEXP_MARK_NONSPACING:
+ ret = xmlUCSIsCatMn(codepoint);
+ break;
+ case XML_REGEXP_MARK_SPACECOMBINING:
+ ret = xmlUCSIsCatMc(codepoint);
+ break;
+ case XML_REGEXP_MARK_ENCLOSING:
+ ret = xmlUCSIsCatMe(codepoint);
+ break;
+ case XML_REGEXP_NUMBER:
+ ret = xmlUCSIsCatN(codepoint);
+ break;
+ case XML_REGEXP_NUMBER_DECIMAL:
+ ret = xmlUCSIsCatNd(codepoint);
+ break;
+ case XML_REGEXP_NUMBER_LETTER:
+ ret = xmlUCSIsCatNl(codepoint);
+ break;
+ case XML_REGEXP_NUMBER_OTHERS:
+ ret = xmlUCSIsCatNo(codepoint);
+ break;
+ case XML_REGEXP_PUNCT:
+ ret = xmlUCSIsCatP(codepoint);
+ break;
+ case XML_REGEXP_PUNCT_CONNECTOR:
+ ret = xmlUCSIsCatPc(codepoint);
+ break;
+ case XML_REGEXP_PUNCT_DASH:
+ ret = xmlUCSIsCatPd(codepoint);
+ break;
+ case XML_REGEXP_PUNCT_OPEN:
+ ret = xmlUCSIsCatPs(codepoint);
+ break;
+ case XML_REGEXP_PUNCT_CLOSE:
+ ret = xmlUCSIsCatPe(codepoint);
+ break;
+ case XML_REGEXP_PUNCT_INITQUOTE:
+ ret = xmlUCSIsCatPi(codepoint);
+ break;
+ case XML_REGEXP_PUNCT_FINQUOTE:
+ ret = xmlUCSIsCatPf(codepoint);
+ break;
+ case XML_REGEXP_PUNCT_OTHERS:
+ ret = xmlUCSIsCatPo(codepoint);
+ break;
+ case XML_REGEXP_SEPAR:
+ ret = xmlUCSIsCatZ(codepoint);
+ break;
+ case XML_REGEXP_SEPAR_SPACE:
+ ret = xmlUCSIsCatZs(codepoint);
+ break;
+ case XML_REGEXP_SEPAR_LINE:
+ ret = xmlUCSIsCatZl(codepoint);
+ break;
+ case XML_REGEXP_SEPAR_PARA:
+ ret = xmlUCSIsCatZp(codepoint);
+ break;
+ case XML_REGEXP_SYMBOL:
+ ret = xmlUCSIsCatS(codepoint);
+ break;
+ case XML_REGEXP_SYMBOL_MATH:
+ ret = xmlUCSIsCatSm(codepoint);
+ break;
+ case XML_REGEXP_SYMBOL_CURRENCY:
+ ret = xmlUCSIsCatSc(codepoint);
+ break;
+ case XML_REGEXP_SYMBOL_MODIFIER:
+ ret = xmlUCSIsCatSk(codepoint);
+ break;
+ case XML_REGEXP_SYMBOL_OTHERS:
+ ret = xmlUCSIsCatSo(codepoint);
+ break;
+ case XML_REGEXP_OTHER:
+ ret = xmlUCSIsCatC(codepoint);
+ break;
+ case XML_REGEXP_OTHER_CONTROL:
+ ret = xmlUCSIsCatCc(codepoint);
+ break;
+ case XML_REGEXP_OTHER_FORMAT:
+ ret = xmlUCSIsCatCf(codepoint);
+ break;
+ case XML_REGEXP_OTHER_PRIVATE:
+ ret = xmlUCSIsCatCo(codepoint);
+ break;
+ case XML_REGEXP_OTHER_NA:
+ /* ret = xmlUCSIsCatCn(codepoint); */
+ /* Seems it doesn't exist anymore in recent Unicode releases */
+ ret = 0;
+ break;
+ case XML_REGEXP_BLOCK_NAME:
+ ret = xmlUCSIsBlock(codepoint, (const char *) blockName);
+ break;
+ }
+ if (neg)
+ return(!ret);
+ return(ret);
+}
+
+static int
+xmlRegCheckCharacter(xmlRegAtomPtr atom, int codepoint) {
+ int i, ret = 0;
+ xmlRegRangePtr range;
+
+ if ((atom == NULL) || (!IS_CHAR(codepoint)))
+ return(-1);
+
+ switch (atom->type) {
+ case XML_REGEXP_SUBREG:
+ case XML_REGEXP_EPSILON:
+ return(-1);
+ case XML_REGEXP_CHARVAL:
+ return(codepoint == atom->codepoint);
+ case XML_REGEXP_RANGES: {
+ int accept = 0;
+
+ for (i = 0;i < atom->nbRanges;i++) {
+ range = atom->ranges[i];
+ if (range->neg == 2) {
+ ret = xmlRegCheckCharacterRange(range->type, codepoint,
+ 0, range->start, range->end,
+ range->blockName);
+ if (ret != 0)
+ return(0); /* excluded char */
+ } else if (range->neg) {
+ ret = xmlRegCheckCharacterRange(range->type, codepoint,
+ 0, range->start, range->end,
+ range->blockName);
+ if (ret == 0)
+ accept = 1;
+ else
+ return(0);
+ } else {
+ ret = xmlRegCheckCharacterRange(range->type, codepoint,
+ 0, range->start, range->end,
+ range->blockName);
+ if (ret != 0)
+ accept = 1; /* might still be excluded */
+ }
+ }
+ return(accept);
+ }
+ case XML_REGEXP_STRING:
+ printf("TODO: XML_REGEXP_STRING\n");
+ return(-1);
+ case XML_REGEXP_ANYCHAR:
+ case XML_REGEXP_ANYSPACE:
+ case XML_REGEXP_NOTSPACE:
+ case XML_REGEXP_INITNAME:
+ case XML_REGEXP_NOTINITNAME:
+ case XML_REGEXP_NAMECHAR:
+ case XML_REGEXP_NOTNAMECHAR:
+ case XML_REGEXP_DECIMAL:
+ case XML_REGEXP_NOTDECIMAL:
+ case XML_REGEXP_REALCHAR:
+ case XML_REGEXP_NOTREALCHAR:
+ case XML_REGEXP_LETTER:
+ case XML_REGEXP_LETTER_UPPERCASE:
+ case XML_REGEXP_LETTER_LOWERCASE:
+ case XML_REGEXP_LETTER_TITLECASE:
+ case XML_REGEXP_LETTER_MODIFIER:
+ case XML_REGEXP_LETTER_OTHERS:
+ case XML_REGEXP_MARK:
+ case XML_REGEXP_MARK_NONSPACING:
+ case XML_REGEXP_MARK_SPACECOMBINING:
+ case XML_REGEXP_MARK_ENCLOSING:
+ case XML_REGEXP_NUMBER:
+ case XML_REGEXP_NUMBER_DECIMAL:
+ case XML_REGEXP_NUMBER_LETTER:
+ case XML_REGEXP_NUMBER_OTHERS:
+ case XML_REGEXP_PUNCT:
+ case XML_REGEXP_PUNCT_CONNECTOR:
+ case XML_REGEXP_PUNCT_DASH:
+ case XML_REGEXP_PUNCT_OPEN:
+ case XML_REGEXP_PUNCT_CLOSE:
+ case XML_REGEXP_PUNCT_INITQUOTE:
+ case XML_REGEXP_PUNCT_FINQUOTE:
+ case XML_REGEXP_PUNCT_OTHERS:
+ case XML_REGEXP_SEPAR:
+ case XML_REGEXP_SEPAR_SPACE:
+ case XML_REGEXP_SEPAR_LINE:
+ case XML_REGEXP_SEPAR_PARA:
+ case XML_REGEXP_SYMBOL:
+ case XML_REGEXP_SYMBOL_MATH:
+ case XML_REGEXP_SYMBOL_CURRENCY:
+ case XML_REGEXP_SYMBOL_MODIFIER:
+ case XML_REGEXP_SYMBOL_OTHERS:
+ case XML_REGEXP_OTHER:
+ case XML_REGEXP_OTHER_CONTROL:
+ case XML_REGEXP_OTHER_FORMAT:
+ case XML_REGEXP_OTHER_PRIVATE:
+ case XML_REGEXP_OTHER_NA:
+ case XML_REGEXP_BLOCK_NAME:
+ ret = xmlRegCheckCharacterRange(atom->type, codepoint, 0, 0, 0,
+ (const xmlChar *)atom->valuep);
+ if (atom->neg)
+ ret = !ret;
+ break;
+ }
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * Saving an restoring state of an execution context *
+ * *
+ ************************************************************************/
+
+#ifdef DEBUG_REGEXP_EXEC
+static void
+xmlFARegDebugExec(xmlRegExecCtxtPtr exec) {
+ printf("state: %d:%d:idx %d", exec->state->no, exec->transno, exec->index);
+ if (exec->inputStack != NULL) {
+ int i;
+ printf(": ");
+ for (i = 0;(i < 3) && (i < exec->inputStackNr);i++)
+ printf("%s ", exec->inputStack[exec->inputStackNr - (i + 1)]);
+ } else {
+ printf(": %s", &(exec->inputString[exec->index]));
+ }
+ printf("\n");
+}
+#endif
+
+static void
+xmlFARegExecSave(xmlRegExecCtxtPtr exec) {
+#ifdef DEBUG_REGEXP_EXEC
+ printf("saving ");
+ exec->transno++;
+ xmlFARegDebugExec(exec);
+ exec->transno--;
+#endif
+
+ if (exec->maxRollbacks == 0) {
+ exec->maxRollbacks = 4;
+ exec->rollbacks = (xmlRegExecRollback *) xmlMalloc(exec->maxRollbacks *
+ sizeof(xmlRegExecRollback));
+ if (exec->rollbacks == NULL) {
+ xmlRegexpErrMemory(NULL, "saving regexp");
+ exec->maxRollbacks = 0;
+ return;
+ }
+ memset(exec->rollbacks, 0,
+ exec->maxRollbacks * sizeof(xmlRegExecRollback));
+ } else if (exec->nbRollbacks >= exec->maxRollbacks) {
+ xmlRegExecRollback *tmp;
+ int len = exec->maxRollbacks;
+
+ exec->maxRollbacks *= 2;
+ tmp = (xmlRegExecRollback *) xmlRealloc(exec->rollbacks,
+ exec->maxRollbacks * sizeof(xmlRegExecRollback));
+ if (tmp == NULL) {
+ xmlRegexpErrMemory(NULL, "saving regexp");
+ exec->maxRollbacks /= 2;
+ return;
+ }
+ exec->rollbacks = tmp;
+ tmp = &exec->rollbacks[len];
+ memset(tmp, 0, (exec->maxRollbacks - len) * sizeof(xmlRegExecRollback));
+ }
+ exec->rollbacks[exec->nbRollbacks].state = exec->state;
+ exec->rollbacks[exec->nbRollbacks].index = exec->index;
+ exec->rollbacks[exec->nbRollbacks].nextbranch = exec->transno + 1;
+ if (exec->comp->nbCounters > 0) {
+ if (exec->rollbacks[exec->nbRollbacks].counts == NULL) {
+ exec->rollbacks[exec->nbRollbacks].counts = (int *)
+ xmlMalloc(exec->comp->nbCounters * sizeof(int));
+ if (exec->rollbacks[exec->nbRollbacks].counts == NULL) {
+ xmlRegexpErrMemory(NULL, "saving regexp");
+ exec->status = -5;
+ return;
+ }
+ }
+ memcpy(exec->rollbacks[exec->nbRollbacks].counts, exec->counts,
+ exec->comp->nbCounters * sizeof(int));
+ }
+ exec->nbRollbacks++;
+}
+
+static void
+xmlFARegExecRollBack(xmlRegExecCtxtPtr exec) {
+ if (exec->nbRollbacks <= 0) {
+ exec->status = -1;
+#ifdef DEBUG_REGEXP_EXEC
+ printf("rollback failed on empty stack\n");
+#endif
+ return;
+ }
+ exec->nbRollbacks--;
+ exec->state = exec->rollbacks[exec->nbRollbacks].state;
+ exec->index = exec->rollbacks[exec->nbRollbacks].index;
+ exec->transno = exec->rollbacks[exec->nbRollbacks].nextbranch;
+ if (exec->comp->nbCounters > 0) {
+ if (exec->rollbacks[exec->nbRollbacks].counts == NULL) {
+ fprintf(stderr, "exec save: allocation failed");
+ exec->status = -6;
+ return;
+ }
+ memcpy(exec->counts, exec->rollbacks[exec->nbRollbacks].counts,
+ exec->comp->nbCounters * sizeof(int));
+ }
+
+#ifdef DEBUG_REGEXP_EXEC
+ printf("restored ");
+ xmlFARegDebugExec(exec);
+#endif
+}
+
+/************************************************************************
+ * *
+ * Verifyer, running an input against a compiled regexp *
+ * *
+ ************************************************************************/
+
+static int
+xmlFARegExec(xmlRegexpPtr comp, const xmlChar *content) {
+ xmlRegExecCtxt execval;
+ xmlRegExecCtxtPtr exec = &execval;
+ int ret, codepoint, len;
+
+ exec->inputString = content;
+ exec->index = 0;
+ exec->determinist = 1;
+ exec->maxRollbacks = 0;
+ exec->nbRollbacks = 0;
+ exec->rollbacks = NULL;
+ exec->status = 0;
+ exec->comp = comp;
+ exec->state = comp->states[0];
+ exec->transno = 0;
+ exec->transcount = 0;
+ exec->inputStack = NULL;
+ exec->inputStackMax = 0;
+ if (comp->nbCounters > 0) {
+ exec->counts = (int *) xmlMalloc(comp->nbCounters * sizeof(int));
+ if (exec->counts == NULL) {
+ xmlRegexpErrMemory(NULL, "running regexp");
+ return(-1);
+ }
+ memset(exec->counts, 0, comp->nbCounters * sizeof(int));
+ } else
+ exec->counts = NULL;
+ while ((exec->status == 0) &&
+ ((exec->inputString[exec->index] != 0) ||
+ (exec->state->type != XML_REGEXP_FINAL_STATE))) {
+ xmlRegTransPtr trans;
+ xmlRegAtomPtr atom;
+
+ /*
+ * End of input on non-terminal state, rollback, however we may
+ * still have epsilon like transition for counted transitions
+ * on counters, in that case don't break too early.
+ */
+ if ((exec->inputString[exec->index] == 0) && (exec->counts == NULL))
+ goto rollback;
+
+ exec->transcount = 0;
+ for (;exec->transno < exec->state->nbTrans;exec->transno++) {
+ trans = &exec->state->trans[exec->transno];
+ if (trans->to < 0)
+ continue;
+ atom = trans->atom;
+ ret = 0;
+ if (trans->count >= 0) {
+ int count;
+ xmlRegCounterPtr counter;
+
+ /*
+ * A counted transition.
+ */
+
+ count = exec->counts[trans->count];
+ counter = &exec->comp->counters[trans->count];
+#ifdef DEBUG_REGEXP_EXEC
+ printf("testing count %d: val %d, min %d, max %d\n",
+ trans->count, count, counter->min, counter->max);
+#endif
+ ret = ((count >= counter->min) && (count <= counter->max));
+ } else if (atom == NULL) {
+ fprintf(stderr, "epsilon transition left at runtime\n");
+ exec->status = -2;
+ break;
+ } else if (exec->inputString[exec->index] != 0) {
+ codepoint = CUR_SCHAR(&(exec->inputString[exec->index]), len);
+ ret = xmlRegCheckCharacter(atom, codepoint);
+ if ((ret == 1) && (atom->min > 0) && (atom->max > 0)) {
+ xmlRegStatePtr to = comp->states[trans->to];
+
+ /*
+ * this is a multiple input sequence
+ */
+ if (exec->state->nbTrans > exec->transno + 1) {
+ xmlFARegExecSave(exec);
+ }
+ exec->transcount = 1;
+ do {
+ /*
+ * Try to progress as much as possible on the input
+ */
+ if (exec->transcount == atom->max) {
+ break;
+ }
+ exec->index += len;
+ /*
+ * End of input: stop here
+ */
+ if (exec->inputString[exec->index] == 0) {
+ exec->index -= len;
+ break;
+ }
+ if (exec->transcount >= atom->min) {
+ int transno = exec->transno;
+ xmlRegStatePtr state = exec->state;
+
+ /*
+ * The transition is acceptable save it
+ */
+ exec->transno = -1; /* trick */
+ exec->state = to;
+ xmlFARegExecSave(exec);
+ exec->transno = transno;
+ exec->state = state;
+ }
+ codepoint = CUR_SCHAR(&(exec->inputString[exec->index]),
+ len);
+ ret = xmlRegCheckCharacter(atom, codepoint);
+ exec->transcount++;
+ } while (ret == 1);
+ if (exec->transcount < atom->min)
+ ret = 0;
+
+ /*
+ * If the last check failed but one transition was found
+ * possible, rollback
+ */
+ if (ret < 0)
+ ret = 0;
+ if (ret == 0) {
+ goto rollback;
+ }
+ }
+ }
+ if (ret == 1) {
+ if (exec->state->nbTrans > exec->transno + 1) {
+ xmlFARegExecSave(exec);
+ }
+ if (trans->counter >= 0) {
+#ifdef DEBUG_REGEXP_EXEC
+ printf("Increasing count %d\n", trans->counter);
+#endif
+ exec->counts[trans->counter]++;
+ }
+#ifdef DEBUG_REGEXP_EXEC
+ printf("entering state %d\n", trans->to);
+#endif
+ exec->state = comp->states[trans->to];
+ exec->transno = 0;
+ if (trans->atom != NULL) {
+ exec->index += len;
+ }
+ goto progress;
+ } else if (ret < 0) {
+ exec->status = -4;
+ break;
+ }
+ }
+ if ((exec->transno != 0) || (exec->state->nbTrans == 0)) {
+rollback:
+ /*
+ * Failed to find a way out
+ */
+ exec->determinist = 0;
+ xmlFARegExecRollBack(exec);
+ }
+progress:
+ continue;
+ }
+ if (exec->rollbacks != NULL) {
+ if (exec->counts != NULL) {
+ int i;
+
+ for (i = 0;i < exec->maxRollbacks;i++)
+ if (exec->rollbacks[i].counts != NULL)
+ xmlFree(exec->rollbacks[i].counts);
+ }
+ xmlFree(exec->rollbacks);
+ }
+ if (exec->counts != NULL)
+ xmlFree(exec->counts);
+ if (exec->status == 0)
+ return(1);
+ if (exec->status == -1)
+ return(0);
+ return(exec->status);
+}
+
+/************************************************************************
+ * *
+ * Progressive interface to the verifyer one atom at a time *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlRegNewExecCtxt:
+ * @comp: a precompiled regular expression
+ * @callback: a callback function used for handling progresses in the
+ * automata matching phase
+ * @data: the context data associated to the callback in this context
+ *
+ * Build a context used for progressive evaluation of a regexp.
+ *
+ * Returns the new context
+ */
+xmlRegExecCtxtPtr
+xmlRegNewExecCtxt(xmlRegexpPtr comp, xmlRegExecCallbacks callback, void *data) {
+ xmlRegExecCtxtPtr exec;
+
+ if (comp == NULL)
+ return(NULL);
+ if ((comp->compact == NULL) && (comp->states == NULL))
+ return(NULL);
+ exec = (xmlRegExecCtxtPtr) xmlMalloc(sizeof(xmlRegExecCtxt));
+ if (exec == NULL) {
+ xmlRegexpErrMemory(NULL, "creating execution context");
+ return(NULL);
+ }
+ memset(exec, 0, sizeof(xmlRegExecCtxt));
+ exec->inputString = NULL;
+ exec->index = 0;
+ exec->determinist = 1;
+ exec->maxRollbacks = 0;
+ exec->nbRollbacks = 0;
+ exec->rollbacks = NULL;
+ exec->status = 0;
+ exec->comp = comp;
+ if (comp->compact == NULL)
+ exec->state = comp->states[0];
+ exec->transno = 0;
+ exec->transcount = 0;
+ exec->callback = callback;
+ exec->data = data;
+ if (comp->nbCounters > 0) {
+ exec->counts = (int *) xmlMalloc(comp->nbCounters * sizeof(int));
+ if (exec->counts == NULL) {
+ xmlRegexpErrMemory(NULL, "creating execution context");
+ xmlFree(exec);
+ return(NULL);
+ }
+ memset(exec->counts, 0, comp->nbCounters * sizeof(int));
+ } else
+ exec->counts = NULL;
+ exec->inputStackMax = 0;
+ exec->inputStackNr = 0;
+ exec->inputStack = NULL;
+ return(exec);
+}
+
+/**
+ * xmlRegFreeExecCtxt:
+ * @exec: a regular expression evaulation context
+ *
+ * Free the structures associated to a regular expression evaulation context.
+ */
+void
+xmlRegFreeExecCtxt(xmlRegExecCtxtPtr exec) {
+ if (exec == NULL)
+ return;
+
+ if (exec->rollbacks != NULL) {
+ if (exec->counts != NULL) {
+ int i;
+
+ for (i = 0;i < exec->maxRollbacks;i++)
+ if (exec->rollbacks[i].counts != NULL)
+ xmlFree(exec->rollbacks[i].counts);
+ }
+ xmlFree(exec->rollbacks);
+ }
+ if (exec->counts != NULL)
+ xmlFree(exec->counts);
+ if (exec->inputStack != NULL) {
+ int i;
+
+ for (i = 0;i < exec->inputStackNr;i++) {
+ if (exec->inputStack[i].value != NULL)
+ xmlFree(exec->inputStack[i].value);
+ }
+ xmlFree(exec->inputStack);
+ }
+ xmlFree(exec);
+}
+
+static void
+xmlFARegExecSaveInputString(xmlRegExecCtxtPtr exec, const xmlChar *value,
+ void *data) {
+#ifdef DEBUG_PUSH
+ printf("saving value: %d:%s\n", exec->inputStackNr, value);
+#endif
+ if (exec->inputStackMax == 0) {
+ exec->inputStackMax = 4;
+ exec->inputStack = (xmlRegInputTokenPtr)
+ xmlMalloc(exec->inputStackMax * sizeof(xmlRegInputToken));
+ if (exec->inputStack == NULL) {
+ xmlRegexpErrMemory(NULL, "pushing input string");
+ exec->inputStackMax = 0;
+ return;
+ }
+ } else if (exec->inputStackNr + 1 >= exec->inputStackMax) {
+ xmlRegInputTokenPtr tmp;
+
+ exec->inputStackMax *= 2;
+ tmp = (xmlRegInputTokenPtr) xmlRealloc(exec->inputStack,
+ exec->inputStackMax * sizeof(xmlRegInputToken));
+ if (tmp == NULL) {
+ xmlRegexpErrMemory(NULL, "pushing input string");
+ exec->inputStackMax /= 2;
+ return;
+ }
+ exec->inputStack = tmp;
+ }
+ exec->inputStack[exec->inputStackNr].value = xmlStrdup(value);
+ exec->inputStack[exec->inputStackNr].data = data;
+ exec->inputStackNr++;
+ exec->inputStack[exec->inputStackNr].value = NULL;
+ exec->inputStack[exec->inputStackNr].data = NULL;
+}
+
+
+/**
+ * xmlRegCompactPushString:
+ * @exec: a regexp execution context
+ * @comp: the precompiled exec with a compact table
+ * @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.
+ */
+static int
+xmlRegCompactPushString(xmlRegExecCtxtPtr exec,
+ xmlRegexpPtr comp,
+ const xmlChar *value,
+ void *data) {
+ int state = exec->index;
+ int i, target;
+
+ if ((comp == NULL) || (comp->compact == NULL) || (comp->stringMap == NULL))
+ return(-1);
+
+ if (value == NULL) {
+ /*
+ * are we at a final state ?
+ */
+ if (comp->compact[state * (comp->nbstrings + 1)] ==
+ XML_REGEXP_FINAL_STATE)
+ return(1);
+ return(0);
+ }
+
+#ifdef DEBUG_PUSH
+ printf("value pushed: %s\n", value);
+#endif
+
+ /*
+ * Examine all outside transition from current state
+ */
+ for (i = 0;i < comp->nbstrings;i++) {
+ target = comp->compact[state * (comp->nbstrings + 1) + i + 1];
+ if ((target > 0) && (target <= comp->nbstates)) {
+ target--; /* to avoid 0 */
+ if (xmlStrEqual(comp->stringMap[i], value)) {
+ exec->index = target;
+ if ((exec->callback != NULL) && (comp->transdata != NULL)) {
+ exec->callback(exec->data, value,
+ comp->transdata[state * comp->nbstrings + i], data);
+ }
+#ifdef DEBUG_PUSH
+ printf("entering state %d\n", target);
+#endif
+ if (comp->compact[target * (comp->nbstrings + 1)] ==
+ XML_REGEXP_FINAL_STATE)
+ return(1);
+ return(0);
+ }
+ }
+ }
+ /*
+ * Failed to find an exit transition out from current state for the
+ * current token
+ */
+#ifdef DEBUG_PUSH
+ printf("failed to find a transition for %s on state %d\n", value, state);
+#endif
+ exec->status = -1;
+ return(-1);
+}
+
+/**
+ * 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) {
+ xmlRegTransPtr trans;
+ xmlRegAtomPtr atom;
+ int ret;
+ int final = 0;
+
+ if (exec == NULL)
+ return(-1);
+ if (exec->comp == NULL)
+ return(-1);
+ if (exec->status != 0)
+ return(exec->status);
+
+ if (exec->comp->compact != NULL)
+ return(xmlRegCompactPushString(exec, exec->comp, value, data));
+
+ if (value == NULL) {
+ if (exec->state->type == XML_REGEXP_FINAL_STATE)
+ return(1);
+ final = 1;
+ }
+
+#ifdef DEBUG_PUSH
+ printf("value pushed: %s\n", value);
+#endif
+ /*
+ * If we have an active rollback stack push the new value there
+ * and get back to where we were left
+ */
+ if ((value != NULL) && (exec->inputStackNr > 0)) {
+ xmlFARegExecSaveInputString(exec, value, data);
+ value = exec->inputStack[exec->index].value;
+ data = exec->inputStack[exec->index].data;
+#ifdef DEBUG_PUSH
+ printf("value loaded: %s\n", value);
+#endif
+ }
+
+ while ((exec->status == 0) &&
+ ((value != NULL) ||
+ ((final == 1) &&
+ (exec->state->type != XML_REGEXP_FINAL_STATE)))) {
+
+ /*
+ * End of input on non-terminal state, rollback, however we may
+ * still have epsilon like transition for counted transitions
+ * on counters, in that case don't break too early.
+ */
+ if ((value == NULL) && (exec->counts == NULL))
+ goto rollback;
+
+ exec->transcount = 0;
+ for (;exec->transno < exec->state->nbTrans;exec->transno++) {
+ trans = &exec->state->trans[exec->transno];
+ if (trans->to < 0)
+ continue;
+ atom = trans->atom;
+ ret = 0;
+ if (trans->count == REGEXP_ALL_LAX_COUNTER) {
+ int i;
+ int count;
+ xmlRegTransPtr t;
+ xmlRegCounterPtr counter;
+
+ ret = 0;
+
+#ifdef DEBUG_PUSH
+ printf("testing all lax %d\n", trans->count);
+#endif
+ /*
+ * Check all counted transitions from the current state
+ */
+ if ((value == NULL) && (final)) {
+ ret = 1;
+ } else if (value != NULL) {
+ for (i = 0;i < exec->state->nbTrans;i++) {
+ t = &exec->state->trans[i];
+ if ((t->counter < 0) || (t == trans))
+ continue;
+ counter = &exec->comp->counters[t->counter];
+ count = exec->counts[t->counter];
+ if ((count < counter->max) &&
+ (t->atom != NULL) &&
+ (xmlStrEqual(value, t->atom->valuep))) {
+ ret = 0;
+ break;
+ }
+ if ((count >= counter->min) &&
+ (count < counter->max) &&
+ (xmlStrEqual(value, t->atom->valuep))) {
+ ret = 1;
+ break;
+ }
+ }
+ }
+ } else if (trans->count == REGEXP_ALL_COUNTER) {
+ int i;
+ int count;
+ xmlRegTransPtr t;
+ xmlRegCounterPtr counter;
+
+ ret = 1;
+
+#ifdef DEBUG_PUSH
+ printf("testing all %d\n", trans->count);
+#endif
+ /*
+ * Check all counted transitions from the current state
+ */
+ for (i = 0;i < exec->state->nbTrans;i++) {
+ t = &exec->state->trans[i];
+ if ((t->counter < 0) || (t == trans))
+ continue;
+ counter = &exec->comp->counters[t->counter];
+ count = exec->counts[t->counter];
+ if ((count < counter->min) || (count > counter->max)) {
+ ret = 0;
+ break;
+ }
+ }
+ } else if (trans->count >= 0) {
+ int count;
+ xmlRegCounterPtr counter;
+
+ /*
+ * A counted transition.
+ */
+
+ count = exec->counts[trans->count];
+ counter = &exec->comp->counters[trans->count];
+#ifdef DEBUG_PUSH
+ printf("testing count %d: val %d, min %d, max %d\n",
+ trans->count, count, counter->min, counter->max);
+#endif
+ ret = ((count >= counter->min) && (count <= counter->max));
+ } else if (atom == NULL) {
+ fprintf(stderr, "epsilon transition left at runtime\n");
+ exec->status = -2;
+ break;
+ } else if (value != NULL) {
+ ret = xmlStrEqual(value, atom->valuep);
+ if ((ret == 1) && (trans->counter >= 0)) {
+ xmlRegCounterPtr counter;
+ int count;
+
+ count = exec->counts[trans->counter];
+ counter = &exec->comp->counters[trans->counter];
+ if (count >= counter->max)
+ ret = 0;
+ }
+
+ if ((ret == 1) && (atom->min > 0) && (atom->max > 0)) {
+ xmlRegStatePtr to = exec->comp->states[trans->to];
+
+ /*
+ * this is a multiple input sequence
+ */
+ if (exec->state->nbTrans > exec->transno + 1) {
+ if (exec->inputStackNr <= 0) {
+ xmlFARegExecSaveInputString(exec, value, data);
+ }
+ xmlFARegExecSave(exec);
+ }
+ exec->transcount = 1;
+ do {
+ /*
+ * Try to progress as much as possible on the input
+ */
+ if (exec->transcount == atom->max) {
+ break;
+ }
+ exec->index++;
+ value = exec->inputStack[exec->index].value;
+ data = exec->inputStack[exec->index].data;
+#ifdef DEBUG_PUSH
+ printf("value loaded: %s\n", value);
+#endif
+
+ /*
+ * End of input: stop here
+ */
+ if (value == NULL) {
+ exec->index --;
+ break;
+ }
+ if (exec->transcount >= atom->min) {
+ int transno = exec->transno;
+ xmlRegStatePtr state = exec->state;
+
+ /*
+ * The transition is acceptable save it
+ */
+ exec->transno = -1; /* trick */
+ exec->state = to;
+ if (exec->inputStackNr <= 0) {
+ xmlFARegExecSaveInputString(exec, value, data);
+ }
+ xmlFARegExecSave(exec);
+ exec->transno = transno;
+ exec->state = state;
+ }
+ ret = xmlStrEqual(value, atom->valuep);
+ exec->transcount++;
+ } while (ret == 1);
+ if (exec->transcount < atom->min)
+ ret = 0;
+
+ /*
+ * If the last check failed but one transition was found
+ * possible, rollback
+ */
+ if (ret < 0)
+ ret = 0;
+ if (ret == 0) {
+ goto rollback;
+ }
+ }
+ }
+ if (ret == 1) {
+ if ((exec->callback != NULL) && (atom != NULL) &&
+ (data != NULL)) {
+ exec->callback(exec->data, atom->valuep,
+ atom->data, data);
+ }
+ if (exec->state->nbTrans > exec->transno + 1) {
+ if (exec->inputStackNr <= 0) {
+ xmlFARegExecSaveInputString(exec, value, data);
+ }
+ xmlFARegExecSave(exec);
+ }
+ if (trans->counter >= 0) {
+#ifdef DEBUG_PUSH
+ printf("Increasing count %d\n", trans->counter);
+#endif
+ exec->counts[trans->counter]++;
+ }
+#ifdef DEBUG_PUSH
+ printf("entering state %d\n", trans->to);
+#endif
+ exec->state = exec->comp->states[trans->to];
+ exec->transno = 0;
+ if (trans->atom != NULL) {
+ if (exec->inputStack != NULL) {
+ exec->index++;
+ if (exec->index < exec->inputStackNr) {
+ value = exec->inputStack[exec->index].value;
+ data = exec->inputStack[exec->index].data;
+#ifdef DEBUG_PUSH
+ printf("value loaded: %s\n", value);
+#endif
+ } else {
+ value = NULL;
+ data = NULL;
+#ifdef DEBUG_PUSH
+ printf("end of input\n");
+#endif
+ }
+ } else {
+ value = NULL;
+ data = NULL;
+#ifdef DEBUG_PUSH
+ printf("end of input\n");
+#endif
+ }
+ }
+ goto progress;
+ } else if (ret < 0) {
+ exec->status = -4;
+ break;
+ }
+ }
+ if ((exec->transno != 0) || (exec->state->nbTrans == 0)) {
+rollback:
+ /*
+ * Failed to find a way out
+ */
+ exec->determinist = 0;
+ xmlFARegExecRollBack(exec);
+ if (exec->status == 0) {
+ value = exec->inputStack[exec->index].value;
+ data = exec->inputStack[exec->index].data;
+#ifdef DEBUG_PUSH
+ printf("value loaded: %s\n", value);
+#endif
+ }
+ }
+progress:
+ continue;
+ }
+ if (exec->status == 0) {
+ return(exec->state->type == XML_REGEXP_FINAL_STATE);
+ }
+ return(exec->status);
+}
+
+/**
+ * xmlRegExecPushString2:
+ * @exec: a regexp execution context or NULL to indicate the end
+ * @value: the first string token input
+ * @value2: the second 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
+xmlRegExecPushString2(xmlRegExecCtxtPtr exec, const xmlChar *value,
+ const xmlChar *value2, void *data) {
+ xmlChar buf[150];
+ int lenn, lenp, ret;
+ xmlChar *str;
+
+ if (exec == NULL)
+ return(-1);
+ if (exec->comp == NULL)
+ return(-1);
+ if (exec->status != 0)
+ return(exec->status);
+
+ if (value2 == NULL)
+ return(xmlRegExecPushString(exec, value, data));
+
+ lenn = strlen((char *) value2);
+ lenp = strlen((char *) value);
+
+ if (150 < lenn + lenp + 2) {
+ str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
+ if (str == NULL) {
+ exec->status = -1;
+ return(-1);
+ }
+ } else {
+ str = buf;
+ }
+ memcpy(&str[0], value, lenp);
+ str[lenp] = '|';
+ memcpy(&str[lenp + 1], value2, lenn);
+ str[lenn + lenp + 1] = 0;
+
+ if (exec->comp->compact != NULL)
+ ret = xmlRegCompactPushString(exec, exec->comp, str, data);
+ else
+ ret = xmlRegExecPushString(exec, str, data);
+
+ if (str != buf)
+ xmlFree(buf);
+ return(ret);
+}
+
+#if 0
+static int
+xmlRegExecPushChar(xmlRegExecCtxtPtr exec, int UCS) {
+ xmlRegTransPtr trans;
+ xmlRegAtomPtr atom;
+ int ret;
+ int codepoint, len;
+
+ if (exec == NULL)
+ return(-1);
+ if (exec->status != 0)
+ return(exec->status);
+
+ while ((exec->status == 0) &&
+ ((exec->inputString[exec->index] != 0) ||
+ (exec->state->type != XML_REGEXP_FINAL_STATE))) {
+
+ /*
+ * End of input on non-terminal state, rollback, however we may
+ * still have epsilon like transition for counted transitions
+ * on counters, in that case don't break too early.
+ */
+ if ((exec->inputString[exec->index] == 0) && (exec->counts == NULL))
+ goto rollback;
+
+ exec->transcount = 0;
+ for (;exec->transno < exec->state->nbTrans;exec->transno++) {
+ trans = &exec->state->trans[exec->transno];
+ if (trans->to < 0)
+ continue;
+ atom = trans->atom;
+ ret = 0;
+ if (trans->count >= 0) {
+ int count;
+ xmlRegCounterPtr counter;
+
+ /*
+ * A counted transition.
+ */
+
+ count = exec->counts[trans->count];
+ counter = &exec->comp->counters[trans->count];
+#ifdef DEBUG_REGEXP_EXEC
+ printf("testing count %d: val %d, min %d, max %d\n",
+ trans->count, count, counter->min, counter->max);
+#endif
+ ret = ((count >= counter->min) && (count <= counter->max));
+ } else if (atom == NULL) {
+ fprintf(stderr, "epsilon transition left at runtime\n");
+ exec->status = -2;
+ break;
+ } else if (exec->inputString[exec->index] != 0) {
+ codepoint = CUR_SCHAR(&(exec->inputString[exec->index]), len);
+ ret = xmlRegCheckCharacter(atom, codepoint);
+ if ((ret == 1) && (atom->min > 0) && (atom->max > 0)) {
+ xmlRegStatePtr to = exec->comp->states[trans->to];
+
+ /*
+ * this is a multiple input sequence
+ */
+ if (exec->state->nbTrans > exec->transno + 1) {
+ xmlFARegExecSave(exec);
+ }
+ exec->transcount = 1;
+ do {
+ /*
+ * Try to progress as much as possible on the input
+ */
+ if (exec->transcount == atom->max) {
+ break;
+ }
+ exec->index += len;
+ /*
+ * End of input: stop here
+ */
+ if (exec->inputString[exec->index] == 0) {
+ exec->index -= len;
+ break;
+ }
+ if (exec->transcount >= atom->min) {
+ int transno = exec->transno;
+ xmlRegStatePtr state = exec->state;
+
+ /*
+ * The transition is acceptable save it
+ */
+ exec->transno = -1; /* trick */
+ exec->state = to;
+ xmlFARegExecSave(exec);
+ exec->transno = transno;
+ exec->state = state;
+ }
+ codepoint = CUR_SCHAR(&(exec->inputString[exec->index]),
+ len);
+ ret = xmlRegCheckCharacter(atom, codepoint);
+ exec->transcount++;
+ } while (ret == 1);
+ if (exec->transcount < atom->min)
+ ret = 0;
+
+ /*
+ * If the last check failed but one transition was found
+ * possible, rollback
+ */
+ if (ret < 0)
+ ret = 0;
+ if (ret == 0) {
+ goto rollback;
+ }
+ }
+ }
+ if (ret == 1) {
+ if (exec->state->nbTrans > exec->transno + 1) {
+ xmlFARegExecSave(exec);
+ }
+ if (trans->counter >= 0) {
+#ifdef DEBUG_REGEXP_EXEC
+ printf("Increasing count %d\n", trans->counter);
+#endif
+ exec->counts[trans->counter]++;
+ }
+#ifdef DEBUG_REGEXP_EXEC
+ printf("entering state %d\n", trans->to);
+#endif
+ exec->state = exec->comp->states[trans->to];
+ exec->transno = 0;
+ if (trans->atom != NULL) {
+ exec->index += len;
+ }
+ goto progress;
+ } else if (ret < 0) {
+ exec->status = -4;
+ break;
+ }
+ }
+ if ((exec->transno != 0) || (exec->state->nbTrans == 0)) {
+rollback:
+ /*
+ * Failed to find a way out
+ */
+ exec->determinist = 0;
+ xmlFARegExecRollBack(exec);
+ }
+progress:
+ continue;
+ }
+}
+#endif
+/************************************************************************
+ * *
+ * Parser for the Shemas Datatype Regular Expressions *
+ * http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#regexs *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlFAIsChar:
+ * @ctxt: a regexp parser context
+ *
+ * [10] Char ::= [^.\?*+()|#x5B#x5D]
+ */
+static int
+xmlFAIsChar(xmlRegParserCtxtPtr ctxt) {
+ int cur;
+ int len;
+
+ cur = CUR_SCHAR(ctxt->cur, len);
+ if ((cur == '.') || (cur == '\\') || (cur == '?') ||
+ (cur == '*') || (cur == '+') || (cur == '(') ||
+ (cur == ')') || (cur == '|') || (cur == 0x5B) ||
+ (cur == 0x5D) || (cur == 0))
+ return(-1);
+ return(cur);
+}
+
+/**
+ * xmlFAParseCharProp:
+ * @ctxt: a regexp parser context
+ *
+ * [27] charProp ::= IsCategory | IsBlock
+ * [28] IsCategory ::= Letters | Marks | Numbers | Punctuation |
+ * Separators | Symbols | Others
+ * [29] Letters ::= 'L' [ultmo]?
+ * [30] Marks ::= 'M' [nce]?
+ * [31] Numbers ::= 'N' [dlo]?
+ * [32] Punctuation ::= 'P' [cdseifo]?
+ * [33] Separators ::= 'Z' [slp]?
+ * [34] Symbols ::= 'S' [mcko]?
+ * [35] Others ::= 'C' [cfon]?
+ * [36] IsBlock ::= 'Is' [a-zA-Z0-9#x2D]+
+ */
+static void
+xmlFAParseCharProp(xmlRegParserCtxtPtr ctxt) {
+ int cur;
+ xmlRegAtomType type = (xmlRegAtomType) 0;
+ xmlChar *blockName = NULL;
+
+ cur = CUR;
+ if (cur == 'L') {
+ NEXT;
+ cur = CUR;
+ if (cur == 'u') {
+ NEXT;
+ type = XML_REGEXP_LETTER_UPPERCASE;
+ } else if (cur == 'l') {
+ NEXT;
+ type = XML_REGEXP_LETTER_LOWERCASE;
+ } else if (cur == 't') {
+ NEXT;
+ type = XML_REGEXP_LETTER_TITLECASE;
+ } else if (cur == 'm') {
+ NEXT;
+ type = XML_REGEXP_LETTER_MODIFIER;
+ } else if (cur == 'o') {
+ NEXT;
+ type = XML_REGEXP_LETTER_OTHERS;
+ } else {
+ type = XML_REGEXP_LETTER;
+ }
+ } else if (cur == 'M') {
+ NEXT;
+ cur = CUR;
+ if (cur == 'n') {
+ NEXT;
+ /* nonspacing */
+ type = XML_REGEXP_MARK_NONSPACING;
+ } else if (cur == 'c') {
+ NEXT;
+ /* spacing combining */
+ type = XML_REGEXP_MARK_SPACECOMBINING;
+ } else if (cur == 'e') {
+ NEXT;
+ /* enclosing */
+ type = XML_REGEXP_MARK_ENCLOSING;
+ } else {
+ /* all marks */
+ type = XML_REGEXP_MARK;
+ }
+ } else if (cur == 'N') {
+ NEXT;
+ cur = CUR;
+ if (cur == 'd') {
+ NEXT;
+ /* digital */
+ type = XML_REGEXP_NUMBER_DECIMAL;
+ } else if (cur == 'l') {
+ NEXT;
+ /* letter */
+ type = XML_REGEXP_NUMBER_LETTER;
+ } else if (cur == 'o') {
+ NEXT;
+ /* other */
+ type = XML_REGEXP_NUMBER_OTHERS;
+ } else {
+ /* all numbers */
+ type = XML_REGEXP_NUMBER;
+ }
+ } else if (cur == 'P') {
+ NEXT;
+ cur = CUR;
+ if (cur == 'c') {
+ NEXT;
+ /* connector */
+ type = XML_REGEXP_PUNCT_CONNECTOR;
+ } else if (cur == 'd') {
+ NEXT;
+ /* dash */
+ type = XML_REGEXP_PUNCT_DASH;
+ } else if (cur == 's') {
+ NEXT;
+ /* open */
+ type = XML_REGEXP_PUNCT_OPEN;
+ } else if (cur == 'e') {
+ NEXT;
+ /* close */
+ type = XML_REGEXP_PUNCT_CLOSE;
+ } else if (cur == 'i') {
+ NEXT;
+ /* initial quote */
+ type = XML_REGEXP_PUNCT_INITQUOTE;
+ } else if (cur == 'f') {
+ NEXT;
+ /* final quote */
+ type = XML_REGEXP_PUNCT_FINQUOTE;
+ } else if (cur == 'o') {
+ NEXT;
+ /* other */
+ type = XML_REGEXP_PUNCT_OTHERS;
+ } else {
+ /* all punctuation */
+ type = XML_REGEXP_PUNCT;
+ }
+ } else if (cur == 'Z') {
+ NEXT;
+ cur = CUR;
+ if (cur == 's') {
+ NEXT;
+ /* space */
+ type = XML_REGEXP_SEPAR_SPACE;
+ } else if (cur == 'l') {
+ NEXT;
+ /* line */
+ type = XML_REGEXP_SEPAR_LINE;
+ } else if (cur == 'p') {
+ NEXT;
+ /* paragraph */
+ type = XML_REGEXP_SEPAR_PARA;
+ } else {
+ /* all separators */
+ type = XML_REGEXP_SEPAR;
+ }
+ } else if (cur == 'S') {
+ NEXT;
+ cur = CUR;
+ if (cur == 'm') {
+ NEXT;
+ type = XML_REGEXP_SYMBOL_MATH;
+ /* math */
+ } else if (cur == 'c') {
+ NEXT;
+ type = XML_REGEXP_SYMBOL_CURRENCY;
+ /* currency */
+ } else if (cur == 'k') {
+ NEXT;
+ type = XML_REGEXP_SYMBOL_MODIFIER;
+ /* modifiers */
+ } else if (cur == 'o') {
+ NEXT;
+ type = XML_REGEXP_SYMBOL_OTHERS;
+ /* other */
+ } else {
+ /* all symbols */
+ type = XML_REGEXP_SYMBOL;
+ }
+ } else if (cur == 'C') {
+ NEXT;
+ cur = CUR;
+ if (cur == 'c') {
+ NEXT;
+ /* control */
+ type = XML_REGEXP_OTHER_CONTROL;
+ } else if (cur == 'f') {
+ NEXT;
+ /* format */
+ type = XML_REGEXP_OTHER_FORMAT;
+ } else if (cur == 'o') {
+ NEXT;
+ /* private use */
+ type = XML_REGEXP_OTHER_PRIVATE;
+ } else if (cur == 'n') {
+ NEXT;
+ /* not assigned */
+ type = XML_REGEXP_OTHER_NA;
+ } else {
+ /* all others */
+ type = XML_REGEXP_OTHER;
+ }
+ } else if (cur == 'I') {
+ const xmlChar *start;
+ NEXT;
+ cur = CUR;
+ if (cur != 's') {
+ ERROR("IsXXXX expected");
+ return;
+ }
+ NEXT;
+ start = ctxt->cur;
+ cur = CUR;
+ if (((cur >= 'a') && (cur <= 'z')) ||
+ ((cur >= 'A') && (cur <= 'Z')) ||
+ ((cur >= '0') && (cur <= '9')) ||
+ (cur == 0x2D)) {
+ NEXT;
+ cur = CUR;
+ while (((cur >= 'a') && (cur <= 'z')) ||
+ ((cur >= 'A') && (cur <= 'Z')) ||
+ ((cur >= '0') && (cur <= '9')) ||
+ (cur == 0x2D)) {
+ NEXT;
+ cur = CUR;
+ }
+ }
+ type = XML_REGEXP_BLOCK_NAME;
+ blockName = xmlStrndup(start, ctxt->cur - start);
+ } else {
+ ERROR("Unknown char property");
+ return;
+ }
+ if (ctxt->atom == NULL) {
+ ctxt->atom = xmlRegNewAtom(ctxt, type);
+ if (ctxt->atom != NULL)
+ ctxt->atom->valuep = blockName;
+ } else if (ctxt->atom->type == XML_REGEXP_RANGES) {
+ xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
+ type, 0, 0, blockName);
+ }
+}
+
+/**
+ * xmlFAParseCharClassEsc:
+ * @ctxt: a regexp parser context
+ *
+ * [23] charClassEsc ::= ( SingleCharEsc | MultiCharEsc | catEsc | complEsc )
+ * [24] SingleCharEsc ::= '\' [nrt\|.?*+(){}#x2D#x5B#x5D#x5E]
+ * [25] catEsc ::= '\p{' charProp '}'
+ * [26] complEsc ::= '\P{' charProp '}'
+ * [37] MultiCharEsc ::= '.' | ('\' [sSiIcCdDwW])
+ */
+static void
+xmlFAParseCharClassEsc(xmlRegParserCtxtPtr ctxt) {
+ int cur;
+
+ if (CUR == '.') {
+ if (ctxt->atom == NULL) {
+ ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_ANYCHAR);
+ } else if (ctxt->atom->type == XML_REGEXP_RANGES) {
+ xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
+ XML_REGEXP_ANYCHAR, 0, 0, NULL);
+ }
+ NEXT;
+ return;
+ }
+ if (CUR != '\\') {
+ ERROR("Escaped sequence: expecting \\");
+ return;
+ }
+ NEXT;
+ cur = CUR;
+ if (cur == 'p') {
+ NEXT;
+ if (CUR != '{') {
+ ERROR("Expecting '{'");
+ return;
+ }
+ NEXT;
+ xmlFAParseCharProp(ctxt);
+ if (CUR != '}') {
+ ERROR("Expecting '}'");
+ return;
+ }
+ NEXT;
+ } else if (cur == 'P') {
+ NEXT;
+ if (CUR != '{') {
+ ERROR("Expecting '{'");
+ return;
+ }
+ NEXT;
+ xmlFAParseCharProp(ctxt);
+ ctxt->atom->neg = 1;
+ if (CUR != '}') {
+ ERROR("Expecting '}'");
+ return;
+ }
+ NEXT;
+ } else if ((cur == 'n') || (cur == 'r') || (cur == 't') || (cur == '\\') ||
+ (cur == '|') || (cur == '.') || (cur == '?') || (cur == '*') ||
+ (cur == '+') || (cur == '(') || (cur == ')') || (cur == '{') ||
+ (cur == '}') || (cur == 0x2D) || (cur == 0x5B) || (cur == 0x5D) ||
+ (cur == 0x5E)) {
+ if (ctxt->atom == NULL) {
+ ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_CHARVAL);
+ if (ctxt->atom != NULL)
+ ctxt->atom->codepoint = cur;
+ } else if (ctxt->atom->type == XML_REGEXP_RANGES) {
+ xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
+ XML_REGEXP_CHARVAL, cur, cur, NULL);
+ }
+ NEXT;
+ } else if ((cur == 's') || (cur == 'S') || (cur == 'i') || (cur == 'I') ||
+ (cur == 'c') || (cur == 'C') || (cur == 'd') || (cur == 'D') ||
+ (cur == 'w') || (cur == 'W')) {
+ xmlRegAtomType type = XML_REGEXP_ANYSPACE;
+
+ switch (cur) {
+ case 's':
+ type = XML_REGEXP_ANYSPACE;
+ break;
+ case 'S':
+ type = XML_REGEXP_NOTSPACE;
+ break;
+ case 'i':
+ type = XML_REGEXP_INITNAME;
+ break;
+ case 'I':
+ type = XML_REGEXP_NOTINITNAME;
+ break;
+ case 'c':
+ type = XML_REGEXP_NAMECHAR;
+ break;
+ case 'C':
+ type = XML_REGEXP_NOTNAMECHAR;
+ break;
+ case 'd':
+ type = XML_REGEXP_DECIMAL;
+ break;
+ case 'D':
+ type = XML_REGEXP_NOTDECIMAL;
+ break;
+ case 'w':
+ type = XML_REGEXP_REALCHAR;
+ break;
+ case 'W':
+ type = XML_REGEXP_NOTREALCHAR;
+ break;
+ }
+ NEXT;
+ if (ctxt->atom == NULL) {
+ ctxt->atom = xmlRegNewAtom(ctxt, type);
+ } else if (ctxt->atom->type == XML_REGEXP_RANGES) {
+ xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
+ type, 0, 0, NULL);
+ }
+ }
+}
+
+/**
+ * xmlFAParseCharRef:
+ * @ctxt: a regexp parser context
+ *
+ * [19] XmlCharRef ::= ( '&#' [0-9]+ ';' ) | (' &#x' [0-9a-fA-F]+ ';' )
+ */
+static int
+xmlFAParseCharRef(xmlRegParserCtxtPtr ctxt) {
+ int ret = 0, cur;
+
+ if ((CUR != '&') || (NXT(1) != '#'))
+ return(-1);
+ NEXT;
+ NEXT;
+ cur = CUR;
+ if (cur == 'x') {
+ NEXT;
+ cur = CUR;
+ if (((cur >= '0') && (cur <= '9')) ||
+ ((cur >= 'a') && (cur <= 'f')) ||
+ ((cur >= 'A') && (cur <= 'F'))) {
+ while (((cur >= '0') && (cur <= '9')) ||
+ ((cur >= 'A') && (cur <= 'F'))) {
+ if ((cur >= '0') && (cur <= '9'))
+ ret = ret * 16 + cur - '0';
+ else if ((cur >= 'a') && (cur <= 'f'))
+ ret = ret * 16 + 10 + (cur - 'a');
+ else
+ ret = ret * 16 + 10 + (cur - 'A');
+ NEXT;
+ cur = CUR;
+ }
+ } else {
+ ERROR("Char ref: expecting [0-9A-F]");
+ return(-1);
+ }
+ } else {
+ if ((cur >= '0') && (cur <= '9')) {
+ while ((cur >= '0') && (cur <= '9')) {
+ ret = ret * 10 + cur - '0';
+ NEXT;
+ cur = CUR;
+ }
+ } else {
+ ERROR("Char ref: expecting [0-9]");
+ return(-1);
+ }
+ }
+ if (cur != ';') {
+ ERROR("Char ref: expecting ';'");
+ return(-1);
+ } else {
+ NEXT;
+ }
+ return(ret);
+}
+
+/**
+ * xmlFAParseCharRange:
+ * @ctxt: a regexp parser context
+ *
+ * [17] charRange ::= seRange | XmlCharRef | XmlCharIncDash
+ * [18] seRange ::= charOrEsc '-' charOrEsc
+ * [20] charOrEsc ::= XmlChar | SingleCharEsc
+ * [21] XmlChar ::= [^\#x2D#x5B#x5D]
+ * [22] XmlCharIncDash ::= [^\#x5B#x5D]
+ */
+static void
+xmlFAParseCharRange(xmlRegParserCtxtPtr ctxt) {
+ int cur, len;
+ int start = -1;
+ int end = -1;
+
+ if ((CUR == '&') && (NXT(1) == '#')) {
+ end = start = xmlFAParseCharRef(ctxt);
+ xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
+ XML_REGEXP_CHARVAL, start, end, NULL);
+ return;
+ }
+ cur = CUR;
+ if (cur == '\\') {
+ NEXT;
+ cur = CUR;
+ switch (cur) {
+ case 'n': start = 0xA; break;
+ case 'r': start = 0xD; break;
+ case 't': start = 0x9; break;
+ case '\\': case '|': case '.': case '-': case '^': case '?':
+ case '*': case '+': case '{': case '}': case '(': case ')':
+ case '[': case ']':
+ start = cur; break;
+ default:
+ ERROR("Invalid escape value");
+ return;
+ }
+ end = start;
+ len = 1;
+ } else if ((cur != 0x5B) && (cur != 0x5D)) {
+ end = start = CUR_SCHAR(ctxt->cur, len);
+ } else {
+ ERROR("Expecting a char range");
+ return;
+ }
+ NEXTL(len);
+ if (start == '-') {
+ return;
+ }
+ cur = CUR;
+ if ((cur != '-') || (NXT(1) == ']')) {
+ xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
+ XML_REGEXP_CHARVAL, start, end, NULL);
+ return;
+ }
+ NEXT;
+ cur = CUR;
+ if (cur == '\\') {
+ NEXT;
+ cur = CUR;
+ switch (cur) {
+ case 'n': end = 0xA; break;
+ case 'r': end = 0xD; break;
+ case 't': end = 0x9; break;
+ case '\\': case '|': case '.': case '-': case '^': case '?':
+ case '*': case '+': case '{': case '}': case '(': case ')':
+ case '[': case ']':
+ end = cur; break;
+ default:
+ ERROR("Invalid escape value");
+ return;
+ }
+ len = 1;
+ } else if ((cur != 0x5B) && (cur != 0x5D)) {
+ end = CUR_SCHAR(ctxt->cur, len);
+ } else {
+ ERROR("Expecting the end of a char range");
+ return;
+ }
+ NEXTL(len);
+ /* TODO check that the values are acceptable character ranges for XML */
+ if (end < start) {
+ ERROR("End of range is before start of range");
+ } else {
+ xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
+ XML_REGEXP_CHARVAL, start, end, NULL);
+ }
+ return;
+}
+
+/**
+ * xmlFAParsePosCharGroup:
+ * @ctxt: a regexp parser context
+ *
+ * [14] posCharGroup ::= ( charRange | charClassEsc )+
+ */
+static void
+xmlFAParsePosCharGroup(xmlRegParserCtxtPtr ctxt) {
+ do {
+ if ((CUR == '\\') || (CUR == '.')) {
+ xmlFAParseCharClassEsc(ctxt);
+ } else {
+ xmlFAParseCharRange(ctxt);
+ }
+ } while ((CUR != ']') && (CUR != '^') && (CUR != '-') &&
+ (ctxt->error == 0));
+}
+
+/**
+ * xmlFAParseCharGroup:
+ * @ctxt: a regexp parser context
+ *
+ * [13] charGroup ::= posCharGroup | negCharGroup | charClassSub
+ * [15] negCharGroup ::= '^' posCharGroup
+ * [16] charClassSub ::= ( posCharGroup | negCharGroup ) '-' charClassExpr
+ * [12] charClassExpr ::= '[' charGroup ']'
+ */
+static void
+xmlFAParseCharGroup(xmlRegParserCtxtPtr ctxt) {
+ int n = ctxt->neg;
+ while ((CUR != ']') && (ctxt->error == 0)) {
+ if (CUR == '^') {
+ int neg = ctxt->neg;
+
+ NEXT;
+ ctxt->neg = !ctxt->neg;
+ xmlFAParsePosCharGroup(ctxt);
+ ctxt->neg = neg;
+ } else if ((CUR == '-') && (NXT(1) == '[')) {
+ int neg = ctxt->neg;
+ ctxt->neg = 2;
+ NEXT; /* eat the '-' */
+ NEXT; /* eat the '[' */
+ xmlFAParseCharGroup(ctxt);
+ if (CUR == ']') {
+ NEXT;
+ } else {
+ ERROR("charClassExpr: ']' expected");
+ break;
+ }
+ ctxt->neg = neg;
+ break;
+ } else if (CUR != ']') {
+ xmlFAParsePosCharGroup(ctxt);
+ }
+ }
+ ctxt->neg = n;
+}
+
+/**
+ * xmlFAParseCharClass:
+ * @ctxt: a regexp parser context
+ *
+ * [11] charClass ::= charClassEsc | charClassExpr
+ * [12] charClassExpr ::= '[' charGroup ']'
+ */
+static void
+xmlFAParseCharClass(xmlRegParserCtxtPtr ctxt) {
+ if (CUR == '[') {
+ NEXT;
+ ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_RANGES);
+ if (ctxt->atom == NULL)
+ return;
+ xmlFAParseCharGroup(ctxt);
+ if (CUR == ']') {
+ NEXT;
+ } else {
+ ERROR("xmlFAParseCharClass: ']' expected");
+ }
+ } else {
+ xmlFAParseCharClassEsc(ctxt);
+ }
+}
+
+/**
+ * xmlFAParseQuantExact:
+ * @ctxt: a regexp parser context
+ *
+ * [8] QuantExact ::= [0-9]+
+ *
+ * Returns 0 if success or -1 in case of error
+ */
+static int
+xmlFAParseQuantExact(xmlRegParserCtxtPtr ctxt) {
+ int ret = 0;
+ int ok = 0;
+
+ while ((CUR >= '0') && (CUR <= '9')) {
+ ret = ret * 10 + (CUR - '0');
+ ok = 1;
+ NEXT;
+ }
+ if (ok != 1) {
+ return(-1);
+ }
+ return(ret);
+}
+
+/**
+ * xmlFAParseQuantifier:
+ * @ctxt: a regexp parser context
+ *
+ * [4] quantifier ::= [?*+] | ( '{' quantity '}' )
+ * [5] quantity ::= quantRange | quantMin | QuantExact
+ * [6] quantRange ::= QuantExact ',' QuantExact
+ * [7] quantMin ::= QuantExact ','
+ * [8] QuantExact ::= [0-9]+
+ */
+static int
+xmlFAParseQuantifier(xmlRegParserCtxtPtr ctxt) {
+ int cur;
+
+ cur = CUR;
+ if ((cur == '?') || (cur == '*') || (cur == '+')) {
+ if (ctxt->atom != NULL) {
+ if (cur == '?')
+ ctxt->atom->quant = XML_REGEXP_QUANT_OPT;
+ else if (cur == '*')
+ ctxt->atom->quant = XML_REGEXP_QUANT_MULT;
+ else if (cur == '+')
+ ctxt->atom->quant = XML_REGEXP_QUANT_PLUS;
+ }
+ NEXT;
+ return(1);
+ }
+ if (cur == '{') {
+ int min = 0, max = 0;
+
+ NEXT;
+ cur = xmlFAParseQuantExact(ctxt);
+ if (cur >= 0)
+ min = cur;
+ if (CUR == ',') {
+ NEXT;
+ if (CUR == '}')
+ max = INT_MAX;
+ else {
+ cur = xmlFAParseQuantExact(ctxt);
+ if (cur >= 0)
+ max = cur;
+ else {
+ ERROR("Improper quantifier");
+ }
+ }
+ }
+ if (CUR == '}') {
+ NEXT;
+ } else {
+ ERROR("Unterminated quantifier");
+ }
+ if (max == 0)
+ max = min;
+ if (ctxt->atom != NULL) {
+ ctxt->atom->quant = XML_REGEXP_QUANT_RANGE;
+ ctxt->atom->min = min;
+ ctxt->atom->max = max;
+ }
+ return(1);
+ }
+ return(0);
+}
+
+/**
+ * xmlFAParseAtom:
+ * @ctxt: a regexp parser context
+ *
+ * [9] atom ::= Char | charClass | ( '(' regExp ')' )
+ */
+static int
+xmlFAParseAtom(xmlRegParserCtxtPtr ctxt) {
+ int codepoint, len;
+
+ codepoint = xmlFAIsChar(ctxt);
+ if (codepoint > 0) {
+ ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_CHARVAL);
+ if (ctxt->atom == NULL)
+ return(-1);
+ codepoint = CUR_SCHAR(ctxt->cur, len);
+ ctxt->atom->codepoint = codepoint;
+ NEXTL(len);
+ return(1);
+ } else if (CUR == '|') {
+ return(0);
+ } else if (CUR == 0) {
+ return(0);
+ } else if (CUR == ')') {
+ return(0);
+ } else if (CUR == '(') {
+ xmlRegStatePtr start, oldend;
+
+ NEXT;
+ xmlFAGenerateEpsilonTransition(ctxt, ctxt->state, NULL);
+ start = ctxt->state;
+ oldend = ctxt->end;
+ ctxt->end = NULL;
+ ctxt->atom = NULL;
+ xmlFAParseRegExp(ctxt, 0);
+ if (CUR == ')') {
+ NEXT;
+ } else {
+ ERROR("xmlFAParseAtom: expecting ')'");
+ }
+ ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_SUBREG);
+ if (ctxt->atom == NULL)
+ return(-1);
+ ctxt->atom->start = start;
+ ctxt->atom->stop = ctxt->state;
+ ctxt->end = oldend;
+ return(1);
+ } else if ((CUR == '[') || (CUR == '\\') || (CUR == '.')) {
+ xmlFAParseCharClass(ctxt);
+ return(1);
+ }
+ return(0);
+}
+
+/**
+ * xmlFAParsePiece:
+ * @ctxt: a regexp parser context
+ *
+ * [3] piece ::= atom quantifier?
+ */
+static int
+xmlFAParsePiece(xmlRegParserCtxtPtr ctxt) {
+ int ret;
+
+ ctxt->atom = NULL;
+ ret = xmlFAParseAtom(ctxt);
+ if (ret == 0)
+ return(0);
+ if (ctxt->atom == NULL) {
+ ERROR("internal: no atom generated");
+ }
+ xmlFAParseQuantifier(ctxt);
+ return(1);
+}
+
+/**
+ * xmlFAParseBranch:
+ * @ctxt: a regexp parser context
+ * @first: is taht the first
+ *
+ * [2] branch ::= piece*
+ 8
+ */
+static int
+xmlFAParseBranch(xmlRegParserCtxtPtr ctxt, int first) {
+ xmlRegStatePtr previous;
+ xmlRegAtomPtr prevatom = NULL;
+ int ret;
+
+ previous = ctxt->state;
+ ret = xmlFAParsePiece(ctxt);
+ if (ret != 0) {
+ if (first) {
+ if (xmlFAGenerateTransitions(ctxt, previous, NULL, ctxt->atom) < 0)
+ return(-1);
+ previous = ctxt->state;
+ } else {
+ prevatom = ctxt->atom;
+ }
+ ctxt->atom = NULL;
+ }
+ while ((ret != 0) && (ctxt->error == 0)) {
+ ret = xmlFAParsePiece(ctxt);
+ if (ret != 0) {
+ if (first) {
+ if (xmlFAGenerateTransitions(ctxt, previous, NULL,
+ ctxt->atom) < 0)
+ return(-1);
+ } else {
+ if (xmlFAGenerateTransitions(ctxt, previous, NULL,
+ prevatom) < 0)
+ return(-1);
+ prevatom = ctxt->atom;
+ }
+ previous = ctxt->state;
+ ctxt->atom = NULL;
+ }
+ }
+ if (!first) {
+ if (xmlFAGenerateTransitions(ctxt, previous, ctxt->end, prevatom) < 0)
+ return(-1);
+ }
+ return(0);
+}
+
+/**
+ * xmlFAParseRegExp:
+ * @ctxt: a regexp parser context
+ * @top: is that the top-level expressions ?
+ *
+ * [1] regExp ::= branch ( '|' branch )*
+ */
+static void
+xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top) {
+ xmlRegStatePtr start, end, oldend;
+
+ oldend = ctxt->end;
+
+ start = ctxt->state;
+ xmlFAParseBranch(ctxt, (ctxt->end == NULL));
+ if (CUR != '|') {
+ ctxt->end = ctxt->state;
+ return;
+ }
+ end = ctxt->state;
+ while ((CUR == '|') && (ctxt->error == 0)) {
+ NEXT;
+ ctxt->state = start;
+ ctxt->end = end;
+ xmlFAParseBranch(ctxt, 0);
+ }
+ if (!top)
+ ctxt->end = oldend;
+}
+
+/************************************************************************
+ * *
+ * The basic API *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlRegexpPrint:
+ * @output: the file for the output debug
+ * @regexp: the compiled regexp
+ *
+ * Print the content of the compiled regular expression
+ */
+void
+xmlRegexpPrint(FILE *output, xmlRegexpPtr regexp) {
+ int i;
+
+ fprintf(output, " regexp: ");
+ if (regexp == NULL) {
+ fprintf(output, "NULL\n");
+ return;
+ }
+ fprintf(output, "'%s' ", regexp->string);
+ fprintf(output, "\n");
+ fprintf(output, "%d atoms:\n", regexp->nbAtoms);
+ for (i = 0;i < regexp->nbAtoms; i++) {
+ fprintf(output, " %02d ", i);
+ xmlRegPrintAtom(output, regexp->atoms[i]);
+ }
+ fprintf(output, "%d states:", regexp->nbStates);
+ fprintf(output, "\n");
+ for (i = 0;i < regexp->nbStates; i++) {
+ xmlRegPrintState(output, regexp->states[i]);
+ }
+ fprintf(output, "%d counters:\n", regexp->nbCounters);
+ for (i = 0;i < regexp->nbCounters; i++) {
+ fprintf(output, " %d: min %d max %d\n", i, regexp->counters[i].min,
+ regexp->counters[i].max);
+ }
+}
+
+/**
+ * xmlRegexpCompile:
+ * @regexp: a regular expression string
+ *
+ * Parses a regular expression conforming to XML Schemas Part 2 Datatype
+ * Appendix F and build an automata suitable for testing strings against
+ * that regular expression
+ *
+ * Returns the compiled expression or NULL in case of error
+ */
+xmlRegexpPtr
+xmlRegexpCompile(const xmlChar *regexp) {
+ xmlRegexpPtr ret;
+ xmlRegParserCtxtPtr ctxt;
+
+ ctxt = xmlRegNewParserCtxt(regexp);
+ if (ctxt == NULL)
+ return(NULL);
+
+ /* initialize the parser */
+ ctxt->end = NULL;
+ ctxt->start = ctxt->state = xmlRegNewState(ctxt);
+ xmlRegStatePush(ctxt, ctxt->start);
+
+ /* parse the expression building an automata */
+ xmlFAParseRegExp(ctxt, 1);
+ if (CUR != 0) {
+ ERROR("xmlFAParseRegExp: extra characters");
+ }
+ ctxt->end = ctxt->state;
+ ctxt->start->type = XML_REGEXP_START_STATE;
+ ctxt->end->type = XML_REGEXP_FINAL_STATE;
+
+ /* remove the Epsilon except for counted transitions */
+ xmlFAEliminateEpsilonTransitions(ctxt);
+
+
+ if (ctxt->error != 0) {
+ xmlRegFreeParserCtxt(ctxt);
+ return(NULL);
+ }
+ ret = xmlRegEpxFromParse(ctxt);
+ xmlRegFreeParserCtxt(ctxt);
+ return(ret);
+}
+
+/**
+ * xmlRegexpExec:
+ * @comp: the compiled regular expression
+ * @content: the value to check against the regular expression
+ *
+ * Check if the regular expression generate the value
+ *
+ * Returns 1 if it matches, 0 if not and a negativa value in case of error
+ */
+int
+xmlRegexpExec(xmlRegexpPtr comp, const xmlChar *content) {
+ if ((comp == NULL) || (content == NULL))
+ return(-1);
+ return(xmlFARegExec(comp, content));
+}
+
+/**
+ * xmlRegexpIsDeterminist:
+ * @comp: the compiled regular expression
+ *
+ * Check if the regular expression is determinist
+ *
+ * Returns 1 if it yes, 0 if not and a negativa value in case of error
+ */
+int
+xmlRegexpIsDeterminist(xmlRegexpPtr comp) {
+ xmlAutomataPtr am;
+ int ret;
+
+ if (comp == NULL)
+ return(-1);
+ if (comp->determinist != -1)
+ return(comp->determinist);
+
+ am = xmlNewAutomata();
+ if (am->states != NULL) {
+ int i;
+
+ for (i = 0;i < am->nbStates;i++)
+ xmlRegFreeState(am->states[i]);
+ xmlFree(am->states);
+ }
+ am->nbAtoms = comp->nbAtoms;
+ am->atoms = comp->atoms;
+ am->nbStates = comp->nbStates;
+ am->states = comp->states;
+ am->determinist = -1;
+ ret = xmlFAComputesDeterminism(am);
+ am->atoms = NULL;
+ am->states = NULL;
+ xmlFreeAutomata(am);
+ return(ret);
+}
+
+/**
+ * xmlRegFreeRegexp:
+ * @regexp: the regexp
+ *
+ * Free a regexp
+ */
+void
+xmlRegFreeRegexp(xmlRegexpPtr regexp) {
+ int i;
+ if (regexp == NULL)
+ return;
+
+ if (regexp->string != NULL)
+ xmlFree(regexp->string);
+ if (regexp->states != NULL) {
+ for (i = 0;i < regexp->nbStates;i++)
+ xmlRegFreeState(regexp->states[i]);
+ xmlFree(regexp->states);
+ }
+ if (regexp->atoms != NULL) {
+ for (i = 0;i < regexp->nbAtoms;i++)
+ xmlRegFreeAtom(regexp->atoms[i]);
+ xmlFree(regexp->atoms);
+ }
+ if (regexp->counters != NULL)
+ xmlFree(regexp->counters);
+ if (regexp->compact != NULL)
+ xmlFree(regexp->compact);
+ if (regexp->transdata != NULL)
+ xmlFree(regexp->transdata);
+ if (regexp->stringMap != NULL) {
+ for (i = 0; i < regexp->nbstrings;i++)
+ xmlFree(regexp->stringMap[i]);
+ xmlFree(regexp->stringMap);
+ }
+
+ xmlFree(regexp);
+}
+
+#ifdef LIBXML_AUTOMATA_ENABLED
+/************************************************************************
+ * *
+ * The Automata interface *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlNewAutomata:
+ *
+ * Create a new automata
+ *
+ * Returns the new object or NULL in case of failure
+ */
+xmlAutomataPtr
+xmlNewAutomata(void) {
+ xmlAutomataPtr ctxt;
+
+ ctxt = xmlRegNewParserCtxt(NULL);
+ if (ctxt == NULL)
+ return(NULL);
+
+ /* initialize the parser */
+ ctxt->end = NULL;
+ ctxt->start = ctxt->state = xmlRegNewState(ctxt);
+ if (ctxt->start == NULL) {
+ xmlFreeAutomata(ctxt);
+ return(NULL);
+ }
+ if (xmlRegStatePush(ctxt, ctxt->start) < 0) {
+ xmlRegFreeState(ctxt->start);
+ xmlFreeAutomata(ctxt);
+ return(NULL);
+ }
+
+ return(ctxt);
+}
+
+/**
+ * xmlFreeAutomata:
+ * @am: an automata
+ *
+ * Free an automata
+ */
+void
+xmlFreeAutomata(xmlAutomataPtr am) {
+ if (am == NULL)
+ return;
+ xmlRegFreeParserCtxt(am);
+}
+
+/**
+ * xmlAutomataGetInitState:
+ * @am: an automata
+ *
+ * Initial state lookup
+ *
+ * Returns the initial state of the automata
+ */
+xmlAutomataStatePtr
+xmlAutomataGetInitState(xmlAutomataPtr am) {
+ if (am == NULL)
+ return(NULL);
+ return(am->start);
+}
+
+/**
+ * xmlAutomataSetFinalState:
+ * @am: an automata
+ * @state: a state in this automata
+ *
+ * Makes that state a final state
+ *
+ * Returns 0 or -1 in case of error
+ */
+int
+xmlAutomataSetFinalState(xmlAutomataPtr am, xmlAutomataStatePtr state) {
+ if ((am == NULL) || (state == NULL))
+ return(-1);
+ state->type = XML_REGEXP_FINAL_STATE;
+ return(0);
+}
+
+/**
+ * xmlAutomataNewTransition:
+ * @am: an automata
+ * @from: the starting point of the transition
+ * @to: the target point of the transition or NULL
+ * @token: the input string associated to that transition
+ * @data: data passed to the callback function if the transition is activated
+ *
+ * If @to is NULL, this create first a new target state in the automata
+ * and then adds a transition from the @from state to the target state
+ * activated by the value of @token
+ *
+ * Returns the target state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewTransition(xmlAutomataPtr am, xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to, const xmlChar *token,
+ void *data) {
+ xmlRegAtomPtr atom;
+
+ if ((am == NULL) || (from == NULL) || (token == NULL))
+ return(NULL);
+ atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
+ if (atom == NULL)
+ return(NULL);
+ atom->data = data;
+ if (atom == NULL)
+ return(NULL);
+ atom->valuep = xmlStrdup(token);
+
+ if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
+ xmlRegFreeAtom(atom);
+ return(NULL);
+ }
+ if (to == NULL)
+ return(am->state);
+ return(to);
+}
+
+/**
+ * xmlAutomataNewTransition2:
+ * @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 create first a new target state in the automata
+ * and then adds a transition from the @from state to the target state
+ * activated by the value of @token
+ *
+ * Returns the target state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewTransition2(xmlAutomataPtr am, xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to, const xmlChar *token,
+ const xmlChar *token2, void *data) {
+ xmlRegAtomPtr atom;
+
+ if ((am == NULL) || (from == NULL) || (token == NULL))
+ return(NULL);
+ atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
+ atom->data = data;
+ if (atom == NULL)
+ return(NULL);
+ 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;
+ }
+
+ if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
+ xmlRegFreeAtom(atom);
+ return(NULL);
+ }
+ if (to == NULL)
+ return(am->state);
+ return(to);
+}
+
+/**
+ * xmlAutomataNewCountTrans:
+ * @am: an automata
+ * @from: the starting point of the transition
+ * @to: the target point of the transition or NULL
+ * @token: the input string associated to that transition
+ * @min: the minimum successive occurences of token
+ * @max: the maximum successive occurences of token
+ * @data: data associated to the transition
+ *
+ * If @to is NULL, this create 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
+ *
+ * Returns the target state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewCountTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to, const xmlChar *token,
+ int min, int max, void *data) {
+ xmlRegAtomPtr atom;
+ int counter;
+
+ if ((am == NULL) || (from == NULL) || (token == NULL))
+ return(NULL);
+ if (min < 0)
+ return(NULL);
+ if ((max < min) || (max < 1))
+ return(NULL);
+ atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
+ if (atom == NULL)
+ return(NULL);
+ atom->valuep = xmlStrdup(token);
+ atom->data = data;
+ if (min == 0)
+ atom->min = 1;
+ else
+ atom->min = min;
+ atom->max = max;
+
+ /*
+ * associate a counter to the transition.
+ */
+ counter = xmlRegGetCounter(am);
+ am->counters[counter].min = min;
+ am->counters[counter].max = max;
+
+ /* xmlFAGenerateTransitions(am, from, to, atom); */
+ if (to == NULL) {
+ to = xmlRegNewState(am);
+ xmlRegStatePush(am, to);
+ }
+ xmlRegStateAddTrans(am, from, atom, to, counter, -1);
+ xmlRegAtomPush(am, atom);
+ am->state = to;
+
+ if (to == NULL)
+ to = am->state;
+ if (to == NULL)
+ return(NULL);
+ if (min == 0)
+ xmlFAGenerateEpsilonTransition(am, from, to);
+ return(to);
+}
+
+/**
+ * xmlAutomataNewOnceTrans:
+ * @am: an automata
+ * @from: the starting point of the transition
+ * @to: the target point of the transition or NULL
+ * @token: the input string associated to that transition
+ * @min: the minimum successive occurences of token
+ * @max: the maximum successive occurences of token
+ * @data: data associated to the transition
+ *
+ * If @to is NULL, this create 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 transistion can only be crossed
+ * once.
+ *
+ * Returns the target state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewOnceTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to, const xmlChar *token,
+ int min, int max, void *data) {
+ xmlRegAtomPtr atom;
+ int counter;
+
+ if ((am == NULL) || (from == NULL) || (token == NULL))
+ return(NULL);
+ if (min < 1)
+ return(NULL);
+ if ((max < min) || (max < 1))
+ return(NULL);
+ atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
+ if (atom == NULL)
+ return(NULL);
+ atom->valuep = xmlStrdup(token);
+ atom->data = data;
+ atom->quant = XML_REGEXP_QUANT_ONCEONLY;
+ if (min == 0)
+ atom->min = 1;
+ else
+ atom->min = min;
+ atom->max = max;
+ /*
+ * associate a counter to the transition.
+ */
+ counter = xmlRegGetCounter(am);
+ am->counters[counter].min = 1;
+ am->counters[counter].max = 1;
+
+ /* xmlFAGenerateTransitions(am, from, to, atom); */
+ if (to == NULL) {
+ to = xmlRegNewState(am);
+ xmlRegStatePush(am, to);
+ }
+ xmlRegStateAddTrans(am, from, atom, to, counter, -1);
+ xmlRegAtomPush(am, atom);
+ am->state = to;
+ if (to == NULL)
+ to = am->state;
+ if (to == NULL)
+ return(NULL);
+ return(to);
+}
+
+/**
+ * xmlAutomataNewState:
+ * @am: an automata
+ *
+ * Create a new disconnected state in the automata
+ *
+ * Returns the new state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewState(xmlAutomataPtr am) {
+ xmlAutomataStatePtr to;
+
+ if (am == NULL)
+ return(NULL);
+ to = xmlRegNewState(am);
+ xmlRegStatePush(am, to);
+ return(to);
+}
+
+/**
+ * xmlAutomataNewEpsilon:
+ * @am: an automata
+ * @from: the starting point of the transition
+ * @to: the target point of the transition or NULL
+ *
+ * If @to is NULL, this create first a new target state in the automata
+ * and then adds a an epsilon transition from the @from state to the
+ * target state
+ *
+ * Returns the target state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewEpsilon(xmlAutomataPtr am, xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to) {
+ if ((am == NULL) || (from == NULL))
+ return(NULL);
+ xmlFAGenerateEpsilonTransition(am, from, to);
+ if (to == NULL)
+ return(am->state);
+ return(to);
+}
+
+/**
+ * xmlAutomataNewAllTrans:
+ * @am: an automata
+ * @from: the starting point of the transition
+ * @to: the target point of the transition or NULL
+ * @lax: allow to transition if not all all transitions have been activated
+ *
+ * If @to is NULL, this create first a new target state in the automata
+ * and then adds a an ALL transition from the @from state to the
+ * target state. That transition is an epsilon transition allowed only when
+ * all transitions from the @from node have been activated.
+ *
+ * Returns the target state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewAllTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to, int lax) {
+ if ((am == NULL) || (from == NULL))
+ return(NULL);
+ xmlFAGenerateAllTransition(am, from, to, lax);
+ if (to == NULL)
+ return(am->state);
+ return(to);
+}
+
+/**
+ * xmlAutomataNewCounter:
+ * @am: an automata
+ * @min: the minimal value on the counter
+ * @max: the maximal value on the counter
+ *
+ * Create a new counter
+ *
+ * Returns the counter number or -1 in case of error
+ */
+int
+xmlAutomataNewCounter(xmlAutomataPtr am, int min, int max) {
+ int ret;
+
+ if (am == NULL)
+ return(-1);
+
+ ret = xmlRegGetCounter(am);
+ if (ret < 0)
+ return(-1);
+ am->counters[ret].min = min;
+ am->counters[ret].max = max;
+ return(ret);
+}
+
+/**
+ * xmlAutomataNewCountedTrans:
+ * @am: an automata
+ * @from: the starting point of the transition
+ * @to: the target point of the transition or NULL
+ * @counter: the counter associated to that transition
+ *
+ * If @to is NULL, this create first a new target state in the automata
+ * and then adds an epsilon transition from the @from state to the target state
+ * which will increment the counter provided
+ *
+ * Returns the target state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewCountedTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to, int counter) {
+ if ((am == NULL) || (from == NULL) || (counter < 0))
+ return(NULL);
+ xmlFAGenerateCountedEpsilonTransition(am, from, to, counter);
+ if (to == NULL)
+ return(am->state);
+ return(to);
+}
+
+/**
+ * xmlAutomataNewCounterTrans:
+ * @am: an automata
+ * @from: the starting point of the transition
+ * @to: the target point of the transition or NULL
+ * @counter: the counter associated to that transition
+ *
+ * If @to is NULL, this create 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.
+ *
+ * Returns the target state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewCounterTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to, int counter) {
+ if ((am == NULL) || (from == NULL) || (counter < 0))
+ return(NULL);
+ xmlFAGenerateCountedTransition(am, from, to, counter);
+ if (to == NULL)
+ return(am->state);
+ return(to);
+}
+
+/**
+ * xmlAutomataCompile:
+ * @am: an automata
+ *
+ * Compile the automata into a Reg Exp ready for being executed.
+ * The automata should be free after this point.
+ *
+ * Returns the compiled regexp or NULL in case of error
+ */
+xmlRegexpPtr
+xmlAutomataCompile(xmlAutomataPtr am) {
+ xmlRegexpPtr ret;
+
+ if ((am == NULL) || (am->error != 0)) return(NULL);
+ xmlFAEliminateEpsilonTransitions(am);
+ /* xmlFAComputesDeterminism(am); */
+ ret = xmlRegEpxFromParse(am);
+
+ return(ret);
+}
+
+/**
+ * xmlAutomataIsDeterminist:
+ * @am: an automata
+ *
+ * Checks if an automata is determinist.
+ *
+ * Returns 1 if true, 0 if not, and -1 in case of error
+ */
+int
+xmlAutomataIsDeterminist(xmlAutomataPtr am) {
+ int ret;
+
+ if (am == NULL)
+ return(-1);
+
+ ret = xmlFAComputesDeterminism(am);
+ return(ret);
+}
+#endif /* LIBXML_AUTOMATA_ENABLED */
+#endif /* LIBXML_REGEXP_ENABLED */
diff --git a/xmlsave.c b/xmlsave.c
new file mode 100644
index 0000000..2f8afcf
--- /dev/null
+++ b/xmlsave.c
@@ -0,0 +1,1967 @@
+/*
+ * xmlsave.c: Implemetation of the document serializer
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parserInternals.h>
+#include <libxml/tree.h>
+#include <libxml/xmlsave.h>
+#ifdef LIBXML_HTML_ENABLED
+#include <libxml/HTMLtree.h>
+
+/************************************************************************
+ * *
+ * XHTML detection *
+ * *
+ ************************************************************************/
+#define XHTML_STRICT_PUBLIC_ID BAD_CAST \
+ "-//W3C//DTD XHTML 1.0 Strict//EN"
+#define XHTML_STRICT_SYSTEM_ID BAD_CAST \
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+#define XHTML_FRAME_PUBLIC_ID BAD_CAST \
+ "-//W3C//DTD XHTML 1.0 Frameset//EN"
+#define XHTML_FRAME_SYSTEM_ID BAD_CAST \
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"
+#define XHTML_TRANS_PUBLIC_ID BAD_CAST \
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+#define XHTML_TRANS_SYSTEM_ID BAD_CAST \
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+
+#define XHTML_NS_NAME BAD_CAST "http://www.w3.org/1999/xhtml"
+/**
+ * xmlIsXHTML:
+ * @systemID: the system identifier
+ * @publicID: the public identifier
+ *
+ * Try to find if the document correspond to an XHTML DTD
+ *
+ * Returns 1 if true, 0 if not and -1 in case of error
+ */
+int
+xmlIsXHTML(const xmlChar *systemID, const xmlChar *publicID) {
+ if ((systemID == NULL) && (publicID == NULL))
+ return(-1);
+ if (publicID != NULL) {
+ if (xmlStrEqual(publicID, XHTML_STRICT_PUBLIC_ID)) return(1);
+ if (xmlStrEqual(publicID, XHTML_FRAME_PUBLIC_ID)) return(1);
+ if (xmlStrEqual(publicID, XHTML_TRANS_PUBLIC_ID)) return(1);
+ }
+ if (systemID != NULL) {
+ if (xmlStrEqual(systemID, XHTML_STRICT_SYSTEM_ID)) return(1);
+ if (xmlStrEqual(systemID, XHTML_FRAME_SYSTEM_ID)) return(1);
+ if (xmlStrEqual(systemID, XHTML_TRANS_SYSTEM_ID)) return(1);
+ }
+ return(0);
+}
+#endif /* LIBXML_HTML_ENABLED */
+
+
+#ifdef LIBXML_OUTPUT_ENABLED
+
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+struct _xmlSaveCtxt {
+ void *_private;
+ int type;
+ int fd;
+ const xmlChar *filename;
+ const xmlChar *encoding;
+ xmlCharEncodingHandlerPtr handler;
+ xmlOutputBufferPtr buf;
+ xmlDocPtr doc;
+ int options;
+ int level;
+ int format;
+};
+
+/************************************************************************
+ * *
+ * Output error handlers *
+ * *
+ ************************************************************************/
+/**
+ * xmlSaveErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlSaveErrMemory(const char *extra)
+{
+ __xmlSimpleError(XML_FROM_OUTPUT, XML_ERR_NO_MEMORY, NULL, NULL, extra);
+}
+
+/**
+ * xmlSaveErr:
+ * @code: the error number
+ * @node: the location of the error.
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlSaveErr(int code, xmlNodePtr node, const char *extra)
+{
+ const char *msg = NULL;
+
+ switch(code) {
+ case XML_SAVE_NOT_UTF8:
+ msg = "string is not in UTF-8";
+ break;
+ case XML_SAVE_CHAR_INVALID:
+ msg = "invalid character value";
+ break;
+ case XML_SAVE_UNKNOWN_ENCODING:
+ msg = "unknown encoding %s";
+ break;
+ case XML_SAVE_NO_DOCTYPE:
+ msg = "document has no DOCTYPE";
+ break;
+ default:
+ msg = "unexpected error number";
+ }
+ __xmlSimpleError(XML_FROM_OUTPUT, code, node, msg, extra);
+}
+
+/************************************************************************
+ * *
+ * Allocation and deallocation *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlFreeSaveCtxt:
+ *
+ * Free a saving context, destroying the ouptut in any remaining buffer
+ */
+static void
+xmlFreeSaveCtxt(xmlSaveCtxtPtr ctxt)
+{
+ if (ctxt == NULL) return;
+ if (ctxt->encoding != NULL)
+ xmlFree((char *) ctxt->encoding);
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlNewSaveCtxt:
+ *
+ * Create a new saving context
+ *
+ * Returns the new structure or NULL in case of error
+ */
+static xmlSaveCtxtPtr
+xmlNewSaveCtxt(const char *encoding, int options)
+{
+ xmlSaveCtxtPtr ret;
+
+ ret = (xmlSaveCtxtPtr) xmlMalloc(sizeof(xmlSaveCtxt));
+ if (ret == NULL) {
+ xmlSaveErrMemory("creating saving context");
+ return ( NULL );
+ }
+ memset(ret, 0, sizeof(xmlSaveCtxt));
+ ret->options = options;
+ if (encoding != NULL) {
+ ret->handler = xmlFindCharEncodingHandler(encoding);
+ if (ret->handler == NULL) {
+ xmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
+ xmlFreeSaveCtxt(ret);
+ return(NULL);
+ }
+ ret->encoding = xmlStrdup((const xmlChar *)encoding);
+ }
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * Dumping XML tree content to a simple buffer *
+ * *
+ ************************************************************************/
+/**
+ * xmlAttrSerializeContent:
+ * @buf: the XML buffer output
+ * @doc: the document
+ * @attr: the attribute pointer
+ *
+ * Serialize the attribute in the buffer
+ */
+static void
+xmlAttrSerializeContent(xmlBufferPtr buf, xmlDocPtr doc, xmlAttrPtr attr)
+{
+ xmlNodePtr children;
+
+ children = attr->children;
+ while (children != NULL) {
+ switch (children->type) {
+ case XML_TEXT_NODE:
+ xmlAttrSerializeTxtContent(buf, doc, attr, children->content);
+ break;
+ case XML_ENTITY_REF_NODE:
+ xmlBufferAdd(buf, BAD_CAST "&", 1);
+ xmlBufferAdd(buf, children->name,
+ xmlStrlen(children->name));
+ xmlBufferAdd(buf, BAD_CAST ";", 1);
+ break;
+ default:
+ /* should not happen unless we have a badly built tree */
+ break;
+ }
+ children = children->next;
+ }
+}
+
+/************************************************************************
+ * *
+ * Dumping XML tree content to an I/O output buffer *
+ * *
+ ************************************************************************/
+
+#ifdef LIBXML_HTML_ENABLED
+static void
+xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur);
+#endif
+static void xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur);
+static void xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur);
+void xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur);
+
+/**
+ * xmlNsDumpOutput:
+ * @buf: the XML buffer output
+ * @cur: a namespace
+ *
+ * Dump a local Namespace definition.
+ * Should be called in the context of attributes dumps.
+ */
+static void
+xmlNsDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur) {
+ if (cur == NULL) return;
+ if ((cur->type == XML_LOCAL_NAMESPACE) && (cur->href != NULL)) {
+ if (xmlStrEqual(cur->prefix, BAD_CAST "xml"))
+ return;
+
+ /* Within the context of an element attributes */
+ if (cur->prefix != NULL) {
+ xmlOutputBufferWriteString(buf, " xmlns:");
+ xmlOutputBufferWriteString(buf, (const char *)cur->prefix);
+ } else
+ xmlOutputBufferWriteString(buf, " xmlns");
+ xmlOutputBufferWriteString(buf, "=");
+ xmlBufferWriteQuotedString(buf->buffer, cur->href);
+ }
+}
+
+/**
+ * xmlNsListDumpOutput:
+ * @buf: the XML buffer output
+ * @cur: the first namespace
+ *
+ * Dump a list of local Namespace definitions.
+ * Should be called in the context of attributes dumps.
+ */
+void
+xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur) {
+ while (cur != NULL) {
+ xmlNsDumpOutput(buf, cur);
+ cur = cur->next;
+ }
+}
+
+/**
+ * xmlDtdDumpOutput:
+ * @buf: the XML buffer output
+ * @dtd: the pointer to the DTD
+ *
+ * Dump the XML document DTD, if any.
+ */
+static void
+xmlDtdDumpOutput(xmlSaveCtxtPtr ctxt, xmlDtdPtr dtd) {
+ xmlOutputBufferPtr buf;
+ int format, level;
+ xmlDocPtr doc;
+
+ if (dtd == NULL) return;
+ if ((ctxt == NULL) || (ctxt->buf == NULL))
+ return;
+ buf = ctxt->buf;
+ xmlOutputBufferWriteString(buf, "<!DOCTYPE ");
+ xmlOutputBufferWriteString(buf, (const char *)dtd->name);
+ if (dtd->ExternalID != NULL) {
+ xmlOutputBufferWriteString(buf, " PUBLIC ");
+ xmlBufferWriteQuotedString(buf->buffer, dtd->ExternalID);
+ xmlOutputBufferWriteString(buf, " ");
+ xmlBufferWriteQuotedString(buf->buffer, dtd->SystemID);
+ } else if (dtd->SystemID != NULL) {
+ xmlOutputBufferWriteString(buf, " SYSTEM ");
+ xmlBufferWriteQuotedString(buf->buffer, dtd->SystemID);
+ }
+ if ((dtd->entities == NULL) && (dtd->elements == NULL) &&
+ (dtd->attributes == NULL) && (dtd->notations == NULL) &&
+ (dtd->pentities == NULL)) {
+ xmlOutputBufferWriteString(buf, ">");
+ return;
+ }
+ xmlOutputBufferWriteString(buf, " [\n");
+ format = ctxt->format;
+ level = ctxt->level;
+ doc = ctxt->doc;
+ ctxt->format = 0;
+ ctxt->level = -1;
+ ctxt->doc = dtd->doc;
+ xmlNodeListDumpOutput(ctxt, dtd->children);
+ ctxt->format = format;
+ ctxt->level = level;
+ ctxt->doc = doc;
+ xmlOutputBufferWriteString(buf, "]>");
+}
+
+/**
+ * xmlAttrDumpOutput:
+ * @buf: the XML buffer output
+ * @cur: the attribute pointer
+ *
+ * Dump an XML attribute
+ */
+static void
+xmlAttrDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) {
+ xmlOutputBufferPtr buf;
+ if (cur == NULL) return;
+ buf = ctxt->buf;
+ xmlOutputBufferWriteString(buf, " ");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, "=\"");
+ xmlAttrSerializeContent(buf->buffer, ctxt->doc, cur);
+ xmlOutputBufferWriteString(buf, "\"");
+}
+
+/**
+ * xmlAttrListDumpOutput:
+ * @buf: the XML buffer output
+ * @doc: the document
+ * @cur: the first attribute pointer
+ * @encoding: an optional encoding string
+ *
+ * Dump a list of XML attributes
+ */
+static void
+xmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) {
+ if (cur == NULL) return;
+ while (cur != NULL) {
+ xmlAttrDumpOutput(ctxt, cur);
+ cur = cur->next;
+ }
+}
+
+
+
+/**
+ * xmlNodeListDumpOutput:
+ * @cur: the first node
+ *
+ * Dump an XML node list, recursive behaviour, children are printed too.
+ */
+static void
+xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+ int i;
+ xmlOutputBufferPtr buf;
+
+ if (cur == NULL) return;
+ buf = ctxt->buf;
+ while (cur != NULL) {
+ if ((ctxt->format) && (xmlIndentTreeOutput) &&
+ (cur->type == XML_ELEMENT_NODE))
+ for (i = 0;i < ctxt->level;i++)
+ xmlOutputBufferWriteString(buf, xmlTreeIndentString);
+ xmlNodeDumpOutputInternal(ctxt, cur);
+ if (ctxt->format) {
+ xmlOutputBufferWriteString(buf, "\n");
+ }
+ cur = cur->next;
+ }
+}
+
+/**
+ * xmlNodeDumpOutputInternal:
+ * @cur: the current node
+ *
+ * Dump an XML node, recursive behaviour, children are printed too.
+ */
+static void
+xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+ int i, format;
+ xmlNodePtr tmp;
+ xmlChar *start, *end;
+ xmlOutputBufferPtr buf;
+
+ if (cur == NULL) return;
+ buf = ctxt->buf;
+ if (cur->type == XML_XINCLUDE_START)
+ return;
+ if (cur->type == XML_XINCLUDE_END)
+ return;
+ if (cur->type == XML_DTD_NODE) {
+ xmlDtdDumpOutput(ctxt, (xmlDtdPtr) cur);
+ return;
+ }
+ if (cur->type == XML_DOCUMENT_FRAG_NODE) {
+ xmlNodeListDumpOutput(ctxt, cur->children);
+ return;
+ }
+ if (cur->type == XML_ELEMENT_DECL) {
+ xmlDumpElementDecl(buf->buffer, (xmlElementPtr) cur);
+ return;
+ }
+ if (cur->type == XML_ATTRIBUTE_DECL) {
+ xmlDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur);
+ return;
+ }
+ if (cur->type == XML_ENTITY_DECL) {
+ xmlDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur);
+ return;
+ }
+ if (cur->type == XML_TEXT_NODE) {
+ if (cur->content != NULL) {
+ if ((cur->name == xmlStringText) ||
+ (cur->name != xmlStringTextNoenc)) {
+ xmlChar *buffer;
+
+ if (ctxt->encoding == NULL)
+ buffer = xmlEncodeEntitiesReentrant(ctxt->doc,
+ cur->content);
+ else
+ buffer = xmlEncodeSpecialChars(ctxt->doc, cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(buf, (const char *)buffer);
+ xmlFree(buffer);
+ }
+ } else {
+ /*
+ * Disable escaping, needed for XSLT
+ */
+ xmlOutputBufferWriteString(buf, (const char *) cur->content);
+ }
+ }
+
+ return;
+ }
+ if (cur->type == XML_PI_NODE) {
+ if (cur->content != NULL) {
+ xmlOutputBufferWriteString(buf, "<?");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ if (cur->content != NULL) {
+ xmlOutputBufferWriteString(buf, " ");
+ xmlOutputBufferWriteString(buf, (const char *)cur->content);
+ }
+ xmlOutputBufferWriteString(buf, "?>");
+ } else {
+ xmlOutputBufferWriteString(buf, "<?");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, "?>");
+ }
+ return;
+ }
+ if (cur->type == XML_COMMENT_NODE) {
+ if (cur->content != NULL) {
+ xmlOutputBufferWriteString(buf, "<!--");
+ xmlOutputBufferWriteString(buf, (const char *)cur->content);
+ xmlOutputBufferWriteString(buf, "-->");
+ }
+ return;
+ }
+ if (cur->type == XML_ENTITY_REF_NODE) {
+ xmlOutputBufferWriteString(buf, "&");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, ";");
+ return;
+ }
+ if (cur->type == XML_CDATA_SECTION_NODE) {
+ start = end = cur->content;
+ while (*end != '\0') {
+ if ((*end == ']') && (*(end + 1) == ']') && (*(end + 2) == '>')) {
+ end = end + 2;
+ xmlOutputBufferWriteString(buf, "<![CDATA[");
+ xmlOutputBufferWrite(buf, end - start, (const char *)start);
+ xmlOutputBufferWriteString(buf, "]]>");
+ start = end;
+ }
+ end++;
+ }
+ if (start != end) {
+ xmlOutputBufferWriteString(buf, "<![CDATA[");
+ xmlOutputBufferWriteString(buf, (const char *)start);
+ xmlOutputBufferWriteString(buf, "]]>");
+ }
+ return;
+ }
+ if (cur->type == XML_ATTRIBUTE_NODE) {
+ xmlAttrDumpOutput(ctxt, (xmlAttrPtr) cur);
+ return;
+ }
+ if (cur->type == XML_NAMESPACE_DECL) {
+ xmlNsDumpOutput(buf, (xmlNsPtr) cur);
+ return;
+ }
+
+ format = ctxt->format;
+ if (format == 1) {
+ tmp = cur->children;
+ while (tmp != NULL) {
+ if ((tmp->type == XML_TEXT_NODE) ||
+ (tmp->type == XML_CDATA_SECTION_NODE) ||
+ (tmp->type == XML_ENTITY_REF_NODE)) {
+ ctxt->format = 0;
+ break;
+ }
+ tmp = tmp->next;
+ }
+ }
+ xmlOutputBufferWriteString(buf, "<");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ if (cur->nsDef)
+ xmlNsListDumpOutput(buf, cur->nsDef);
+ if (cur->properties != NULL)
+ xmlAttrListDumpOutput(ctxt, cur->properties);
+
+ if (((cur->type == XML_ELEMENT_NODE) || (cur->content == NULL)) &&
+ (cur->children == NULL) && (!xmlSaveNoEmptyTags)) {
+ xmlOutputBufferWriteString(buf, "/>");
+ ctxt->format = format;
+ return;
+ }
+ xmlOutputBufferWriteString(buf, ">");
+ if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
+ xmlChar *buffer;
+
+ if (ctxt->encoding == NULL)
+ buffer = xmlEncodeEntitiesReentrant(ctxt->doc, cur->content);
+ else
+ buffer = xmlEncodeSpecialChars(ctxt->doc, cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(buf, (const char *)buffer);
+ xmlFree(buffer);
+ }
+ }
+ if (cur->children != NULL) {
+ if (ctxt->format) xmlOutputBufferWriteString(buf, "\n");
+ if (ctxt->level >= 0) ctxt->level++;
+ xmlNodeListDumpOutput(ctxt, cur->children);
+ if (ctxt->level > 0) ctxt->level--;
+ if ((xmlIndentTreeOutput) && (ctxt->format))
+ for (i = 0;i < ctxt->level;i++)
+ xmlOutputBufferWriteString(buf, xmlTreeIndentString);
+ }
+ xmlOutputBufferWriteString(buf, "</");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, ">");
+ ctxt->format = format;
+}
+
+/**
+ * xmlDocContentDumpOutput:
+ * @cur: the document
+ *
+ * Dump an XML document.
+ */
+static void
+xmlDocContentDumpOutput(xmlSaveCtxtPtr ctxt, xmlDocPtr cur) {
+#ifdef LIBXML_HTML_ENABLED
+ xmlDtdPtr dtd;
+ int is_xhtml = 0;
+#endif
+ const xmlChar *oldenc = cur->encoding;
+ const xmlChar *encoding = ctxt->encoding;
+ xmlOutputBufferPtr buf;
+
+ xmlInitParser();
+
+ if (ctxt->encoding != NULL)
+ cur->encoding = BAD_CAST ctxt->encoding;
+
+ buf = ctxt->buf;
+ xmlOutputBufferWriteString(buf, "<?xml version=");
+ if (cur->version != NULL)
+ xmlBufferWriteQuotedString(buf->buffer, cur->version);
+ else
+ xmlOutputBufferWriteString(buf, "\"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) {
+ xmlOutputBufferWriteString(buf, " encoding=");
+ xmlBufferWriteQuotedString(buf->buffer, (xmlChar *) encoding);
+ }
+ switch (cur->standalone) {
+ case 0:
+ xmlOutputBufferWriteString(buf, " standalone=\"no\"");
+ break;
+ case 1:
+ xmlOutputBufferWriteString(buf, " standalone=\"yes\"");
+ break;
+ }
+ xmlOutputBufferWriteString(buf, "?>\n");
+
+#ifdef LIBXML_HTML_ENABLED
+ dtd = xmlGetIntSubset(cur);
+ if (dtd != NULL) {
+ 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;
+
+ while (child != NULL) {
+ ctxt->level = 0;
+#ifdef LIBXML_HTML_ENABLED
+ if (is_xhtml)
+ xhtmlNodeDumpOutput(ctxt, child);
+ else
+#endif
+ xmlNodeDumpOutputInternal(ctxt, child);
+ xmlOutputBufferWriteString(buf, "\n");
+ child = child->next;
+ }
+ }
+ if (ctxt->encoding != NULL)
+ cur->encoding = oldenc;
+}
+
+#ifdef LIBXML_HTML_ENABLED
+/************************************************************************
+ * *
+ * Functions specific to XHTML serialization *
+ * *
+ ************************************************************************/
+
+/**
+ * xhtmlIsEmpty:
+ * @node: the node
+ *
+ * Check if a node is an empty xhtml node
+ *
+ * Returns 1 if the node is an empty node, 0 if not and -1 in case of error
+ */
+static int
+xhtmlIsEmpty(xmlNodePtr node) {
+ if (node == NULL)
+ return(-1);
+ if (node->type != XML_ELEMENT_NODE)
+ return(0);
+ if ((node->ns != NULL) && (!xmlStrEqual(node->ns->href, XHTML_NS_NAME)))
+ return(0);
+ if (node->children != NULL)
+ return(0);
+ switch (node->name[0]) {
+ case 'a':
+ if (xmlStrEqual(node->name, BAD_CAST "area"))
+ return(1);
+ return(0);
+ case 'b':
+ if (xmlStrEqual(node->name, BAD_CAST "br"))
+ return(1);
+ if (xmlStrEqual(node->name, BAD_CAST "base"))
+ return(1);
+ if (xmlStrEqual(node->name, BAD_CAST "basefont"))
+ return(1);
+ return(0);
+ case 'c':
+ if (xmlStrEqual(node->name, BAD_CAST "col"))
+ return(1);
+ return(0);
+ case 'f':
+ if (xmlStrEqual(node->name, BAD_CAST "frame"))
+ return(1);
+ return(0);
+ case 'h':
+ if (xmlStrEqual(node->name, BAD_CAST "hr"))
+ return(1);
+ return(0);
+ case 'i':
+ if (xmlStrEqual(node->name, BAD_CAST "img"))
+ return(1);
+ if (xmlStrEqual(node->name, BAD_CAST "input"))
+ return(1);
+ if (xmlStrEqual(node->name, BAD_CAST "isindex"))
+ return(1);
+ return(0);
+ case 'l':
+ if (xmlStrEqual(node->name, BAD_CAST "link"))
+ return(1);
+ return(0);
+ case 'm':
+ if (xmlStrEqual(node->name, BAD_CAST "meta"))
+ return(1);
+ return(0);
+ case 'p':
+ if (xmlStrEqual(node->name, BAD_CAST "param"))
+ return(1);
+ return(0);
+ }
+ return(0);
+}
+
+/**
+ * xhtmlAttrListDumpOutput:
+ * @cur: the first attribute pointer
+ *
+ * Dump a list of XML attributes
+ */
+static void
+xhtmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) {
+ xmlAttrPtr xml_lang = NULL;
+ xmlAttrPtr lang = NULL;
+ xmlAttrPtr name = NULL;
+ xmlAttrPtr id = NULL;
+ xmlNodePtr parent;
+ xmlOutputBufferPtr buf;
+
+ if (cur == NULL) return;
+ buf = ctxt->buf;
+ parent = cur->parent;
+ while (cur != NULL) {
+ if ((cur->ns == NULL) && (xmlStrEqual(cur->name, BAD_CAST "id")))
+ id = cur;
+ else
+ if ((cur->ns == NULL) && (xmlStrEqual(cur->name, BAD_CAST "name")))
+ name = cur;
+ else
+ if ((cur->ns == NULL) && (xmlStrEqual(cur->name, BAD_CAST "lang")))
+ lang = cur;
+ else
+ if ((cur->ns != NULL) && (xmlStrEqual(cur->name, BAD_CAST "lang")) &&
+ (xmlStrEqual(cur->ns->prefix, BAD_CAST "xml")))
+ xml_lang = cur;
+ else if ((cur->ns == NULL) &&
+ ((cur->children == NULL) ||
+ (cur->children->content == NULL) ||
+ (cur->children->content[0] == 0)) &&
+ (htmlIsBooleanAttr(cur->name))) {
+ if (cur->children != NULL)
+ xmlFreeNode(cur->children);
+ cur->children = xmlNewText(cur->name);
+ if (cur->children != NULL)
+ cur->children->parent = (xmlNodePtr) cur;
+ }
+ xmlAttrDumpOutput(ctxt, cur);
+ cur = cur->next;
+ }
+ /*
+ * C.8
+ */
+ if ((name != NULL) && (id == NULL)) {
+ if ((parent != NULL) && (parent->name != NULL) &&
+ ((xmlStrEqual(parent->name, BAD_CAST "a")) ||
+ (xmlStrEqual(parent->name, BAD_CAST "p")) ||
+ (xmlStrEqual(parent->name, BAD_CAST "div")) ||
+ (xmlStrEqual(parent->name, BAD_CAST "img")) ||
+ (xmlStrEqual(parent->name, BAD_CAST "map")) ||
+ (xmlStrEqual(parent->name, BAD_CAST "applet")) ||
+ (xmlStrEqual(parent->name, BAD_CAST "form")) ||
+ (xmlStrEqual(parent->name, BAD_CAST "frame")) ||
+ (xmlStrEqual(parent->name, BAD_CAST "iframe")))) {
+ xmlOutputBufferWriteString(buf, " id=\"");
+ xmlAttrSerializeContent(buf->buffer, ctxt->doc, name);
+ xmlOutputBufferWriteString(buf, "\"");
+ }
+ }
+ /*
+ * C.7.
+ */
+ if ((lang != NULL) && (xml_lang == NULL)) {
+ xmlOutputBufferWriteString(buf, " xml:lang=\"");
+ xmlAttrSerializeContent(buf->buffer, ctxt->doc, lang);
+ xmlOutputBufferWriteString(buf, "\"");
+ } else
+ if ((xml_lang != NULL) && (lang == NULL)) {
+ xmlOutputBufferWriteString(buf, " lang=\"");
+ xmlAttrSerializeContent(buf->buffer, ctxt->doc, xml_lang);
+ xmlOutputBufferWriteString(buf, "\"");
+ }
+}
+
+/**
+ * xhtmlNodeListDumpOutput:
+ * @buf: the XML buffer output
+ * @doc: the XHTML document
+ * @cur: the first node
+ * @level: the imbrication level for indenting
+ * @format: is formatting allowed
+ * @encoding: an optional encoding string
+ *
+ * Dump an XML node list, recursive behaviour, children are printed too.
+ * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
+ * or xmlKeepBlanksDefault(0) was called
+ */
+static void
+xhtmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+ int i;
+ xmlOutputBufferPtr buf;
+
+ if (cur == NULL) return;
+ buf = ctxt->buf;
+ while (cur != NULL) {
+ if ((ctxt->format) && (xmlIndentTreeOutput) &&
+ (cur->type == XML_ELEMENT_NODE))
+ for (i = 0;i < ctxt->level;i++)
+ xmlOutputBufferWriteString(buf, xmlTreeIndentString);
+ xhtmlNodeDumpOutput(ctxt, cur);
+ if (ctxt->format) {
+ xmlOutputBufferWriteString(buf, "\n");
+ }
+ cur = cur->next;
+ }
+}
+
+/**
+ * xhtmlNodeDumpOutput:
+ * @buf: the XML buffer output
+ * @doc: the XHTML document
+ * @cur: the current node
+ * @level: the imbrication level for indenting
+ * @format: is formatting allowed
+ * @encoding: an optional encoding string
+ *
+ * Dump an XHTML node, recursive behaviour, children are printed too.
+ */
+static void
+xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
+ int i, format;
+ xmlNodePtr tmp;
+ xmlChar *start, *end;
+ xmlOutputBufferPtr buf;
+
+ if (cur == NULL) return;
+ if (cur->type == XML_XINCLUDE_START)
+ return;
+ if (cur->type == XML_XINCLUDE_END)
+ return;
+ if (cur->type == XML_DTD_NODE) {
+ xmlDtdDumpOutput(ctxt, (xmlDtdPtr) cur);
+ return;
+ }
+ buf = ctxt->buf;
+ if (cur->type == XML_ELEMENT_DECL) {
+ xmlDumpElementDecl(buf->buffer, (xmlElementPtr) cur);
+ return;
+ }
+ if (cur->type == XML_ATTRIBUTE_DECL) {
+ xmlDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur);
+ return;
+ }
+ if (cur->type == XML_ENTITY_DECL) {
+ xmlDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur);
+ return;
+ }
+ if (cur->type == XML_TEXT_NODE) {
+ if (cur->content != NULL) {
+ if ((cur->name == xmlStringText) ||
+ (cur->name != xmlStringTextNoenc)) {
+ xmlChar *buffer;
+
+ if (ctxt->encoding == NULL)
+ buffer = xmlEncodeEntitiesReentrant(ctxt->doc,
+ cur->content);
+ else
+ buffer = xmlEncodeSpecialChars(ctxt->doc, cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(buf, (const char *)buffer);
+ xmlFree(buffer);
+ }
+ } else {
+ /*
+ * Disable escaping, needed for XSLT
+ */
+ xmlOutputBufferWriteString(buf, (const char *) cur->content);
+ }
+ }
+
+ return;
+ }
+ if (cur->type == XML_PI_NODE) {
+ if (cur->content != NULL) {
+ xmlOutputBufferWriteString(buf, "<?");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ if (cur->content != NULL) {
+ xmlOutputBufferWriteString(buf, " ");
+ xmlOutputBufferWriteString(buf, (const char *)cur->content);
+ }
+ xmlOutputBufferWriteString(buf, "?>");
+ } else {
+ xmlOutputBufferWriteString(buf, "<?");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, "?>");
+ }
+ return;
+ }
+ if (cur->type == XML_COMMENT_NODE) {
+ if (cur->content != NULL) {
+ xmlOutputBufferWriteString(buf, "<!--");
+ xmlOutputBufferWriteString(buf, (const char *)cur->content);
+ xmlOutputBufferWriteString(buf, "-->");
+ }
+ return;
+ }
+ if (cur->type == XML_ENTITY_REF_NODE) {
+ xmlOutputBufferWriteString(buf, "&");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, ";");
+ return;
+ }
+ if (cur->type == XML_CDATA_SECTION_NODE) {
+ start = end = cur->content;
+ while (*end != '\0') {
+ if (*end == ']' && *(end + 1) == ']' && *(end + 2) == '>') {
+ end = end + 2;
+ xmlOutputBufferWriteString(buf, "<![CDATA[");
+ xmlOutputBufferWrite(buf, end - start, (const char *)start);
+ xmlOutputBufferWriteString(buf, "]]>");
+ start = end;
+ }
+ end++;
+ }
+ if (start != end) {
+ xmlOutputBufferWriteString(buf, "<![CDATA[");
+ xmlOutputBufferWriteString(buf, (const char *)start);
+ xmlOutputBufferWriteString(buf, "]]>");
+ }
+ return;
+ }
+
+ format = ctxt->format;
+ if (format == 1) {
+ tmp = cur->children;
+ while (tmp != NULL) {
+ if ((tmp->type == XML_TEXT_NODE) ||
+ (tmp->type == XML_ENTITY_REF_NODE)) {
+ format = 0;
+ break;
+ }
+ tmp = tmp->next;
+ }
+ }
+ xmlOutputBufferWriteString(buf, "<");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ if (cur->nsDef)
+ xmlNsListDumpOutput(buf, cur->nsDef);
+ if ((xmlStrEqual(cur->name, BAD_CAST "html") &&
+ (cur->ns == NULL) && (cur->nsDef == NULL))) {
+ /*
+ * 3.1.1. Strictly Conforming Documents A.3.1.1 3/
+ */
+ xmlOutputBufferWriteString(buf,
+ " xmlns=\"http://www.w3.org/1999/xhtml\"");
+ }
+ if (cur->properties != NULL)
+ xhtmlAttrListDumpOutput(ctxt, cur->properties);
+
+ if ((cur->type == XML_ELEMENT_NODE) && (cur->children == NULL)) {
+ if (((cur->ns == NULL) || (cur->ns->prefix == NULL)) &&
+ (xhtmlIsEmpty(cur) == 1)) {
+ /*
+ * C.2. Empty Elements
+ */
+ xmlOutputBufferWriteString(buf, " />");
+ } else {
+ /*
+ * C.3. Element Minimization and Empty Element Content
+ */
+ xmlOutputBufferWriteString(buf, "></");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, ">");
+ }
+ return;
+ }
+ xmlOutputBufferWriteString(buf, ">");
+ if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
+ xmlChar *buffer;
+
+ if (ctxt->encoding == NULL)
+ buffer = xmlEncodeEntitiesReentrant(ctxt->doc, cur->content);
+ else
+ buffer = xmlEncodeSpecialChars(ctxt->doc, cur->content);
+ if (buffer != NULL) {
+ xmlOutputBufferWriteString(buf, (const char *)buffer);
+ xmlFree(buffer);
+ }
+ }
+
+ /*
+ * 4.8. Script and Style elements
+ */
+ if ((cur->type == XML_ELEMENT_NODE) &&
+ ((xmlStrEqual(cur->name, BAD_CAST "script")) ||
+ (xmlStrEqual(cur->name, BAD_CAST "style"))) &&
+ ((cur->ns == NULL) ||
+ (xmlStrEqual(cur->ns->href, XHTML_NS_NAME)))) {
+ xmlNodePtr child = cur->children;
+
+ while (child != NULL) {
+ if ((child->type == XML_TEXT_NODE) ||
+ (child->type == XML_CDATA_SECTION_NODE)) {
+ /*
+ * Apparently CDATA escaping for style just break on IE,
+ * mozilla and galeon, so ...
+ */
+ if (xmlStrEqual(cur->name, BAD_CAST "style") &&
+ (xmlStrchr(child->content, '<') == NULL) &&
+ (xmlStrchr(child->content, '>') == NULL) &&
+ (xmlStrchr(child->content, '&') == NULL)) {
+ int level = ctxt->level;
+ int indent = ctxt->format;
+
+ ctxt->level = 0;
+ ctxt->format = 0;
+ xhtmlNodeDumpOutput(ctxt, child);
+ ctxt->level = level;
+ ctxt->format = indent;
+ } else {
+ start = end = child->content;
+ while (*end != '\0') {
+ if (*end == ']' &&
+ *(end + 1) == ']' &&
+ *(end + 2) == '>') {
+ end = end + 2;
+ xmlOutputBufferWriteString(buf, "<![CDATA[");
+ xmlOutputBufferWrite(buf, end - start,
+ (const char *)start);
+ xmlOutputBufferWriteString(buf, "]]>");
+ start = end;
+ }
+ end++;
+ }
+ if (start != end) {
+ xmlOutputBufferWriteString(buf, "<![CDATA[");
+ xmlOutputBufferWriteString(buf, (const char *)start);
+ xmlOutputBufferWriteString(buf, "]]>");
+ }
+ }
+ } else {
+ int level = ctxt->level;
+ int indent = ctxt->format;
+
+ ctxt->level = 0;
+ ctxt->format = 0;
+ xhtmlNodeDumpOutput(ctxt, child);
+ ctxt->level = level;
+ ctxt->format = indent;
+ }
+ child = child->next;
+ }
+ } else if (cur->children != NULL) {
+ if (format) xmlOutputBufferWriteString(buf, "\n");
+ if (ctxt->level >= 0) ctxt->level++;
+ xhtmlNodeListDumpOutput(ctxt, cur->children);
+ if (ctxt->level > 0) ctxt->level--;
+ if ((xmlIndentTreeOutput) && (format))
+ for (i = 0;i < ctxt->level;i++)
+ xmlOutputBufferWriteString(buf, xmlTreeIndentString);
+ }
+ xmlOutputBufferWriteString(buf, "</");
+ if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
+ xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
+ xmlOutputBufferWriteString(buf, ":");
+ }
+
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ xmlOutputBufferWriteString(buf, ">");
+}
+#endif
+
+/************************************************************************
+ * *
+ * Public entry points *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSaveToFd:
+ * @fd: a file descriptor number
+ * @encoding: the encoding name to use or NULL
+ * @options: a set of xmlSaveOptions
+ *
+ * Create a document saving context serializing to a file descriptor
+ * with the encoding and the options given.
+ *
+ * Returns a new serialization context or NULL in case of error.
+ */
+xmlSaveCtxtPtr
+xmlSaveToFd(int fd, const char *encoding, int options)
+{
+ xmlSaveCtxtPtr ret;
+
+ ret = xmlNewSaveCtxt(encoding, options);
+ if (ret == NULL) return(NULL);
+ ret->buf = xmlOutputBufferCreateFd(fd, ret->handler);
+ if (ret->buf == NULL) {
+ xmlFreeSaveCtxt(ret);
+ return(NULL);
+ }
+ return(ret);
+}
+
+/**
+ * xmlSaveToFilename:
+ * @filename: a file name or an URL
+ * @encoding: the encoding name to use or NULL
+ * @options: a set of xmlSaveOptions
+ *
+ * Create a document saving context serializing to a filename or possibly
+ * to an URL (but this is less reliable) with the encoding and the options
+ * given.
+ *
+ * Returns a new serialization context or NULL in case of error.
+ */
+xmlSaveCtxtPtr
+xmlSaveToFilename(const char *filename, const char *encoding, int options)
+{
+ xmlSaveCtxtPtr ret;
+ int compression = 0; /* TODO handle compression option */
+
+ ret = xmlNewSaveCtxt(encoding, options);
+ if (ret == NULL) return(NULL);
+ ret->buf = xmlOutputBufferCreateFilename(filename, ret->handler,
+ compression);
+ if (ret->buf == NULL) {
+ xmlFreeSaveCtxt(ret);
+ return(NULL);
+ }
+ return(ret);
+}
+
+#if 0
+/**
+ * xmlSaveToBuffer:
+ * @buffer: a buffer
+ * @encoding: the encoding name to use or NULL
+ * @options: a set of xmlSaveOptions
+ *
+ * Create a document saving context serializing to a buffer
+ * with the encoding and the options given
+ *
+ * Returns a new serialization context or NULL in case of error.
+ */
+xmlSaveCtxtPtr
+xmlSaveToBuffer(xmlBufferPtr buffer, const char *encoding, int options)
+{
+ TODO
+ return(NULL);
+}
+#endif
+
+/**
+ * xmlSaveToIO:
+ * @iowrite: an I/O write function
+ * @ioclose: an I/O close function
+ * @ioctx: an I/O handler
+ * @encoding: the encoding name to use or NULL
+ * @options: a set of xmlSaveOptions
+ *
+ * Create a document saving context serializing to a file descriptor
+ * with the encoding and the options given
+ *
+ * Returns a new serialization context or NULL in case of error.
+ */
+xmlSaveCtxtPtr
+xmlSaveToIO(xmlOutputWriteCallback iowrite,
+ xmlOutputCloseCallback ioclose,
+ void *ioctx, const char *encoding, int options)
+{
+ xmlSaveCtxtPtr ret;
+
+ ret = xmlNewSaveCtxt(encoding, options);
+ if (ret == NULL) return(NULL);
+ ret->buf = xmlOutputBufferCreateIO(iowrite, ioclose, ioctx, ret->handler);
+ if (ret->buf == NULL) {
+ xmlFreeSaveCtxt(ret);
+ return(NULL);
+ }
+ return(ret);
+}
+
+/**
+ * xmlSaveDoc:
+ * @ctxt: a document saving context
+ * @doc: a document
+ *
+ * Save a full document to a saving context
+ *
+ * Returns the number of byte written or -1 in case of error
+ */
+long
+xmlSaveDoc(xmlSaveCtxtPtr ctxt, xmlDocPtr doc)
+{
+ long ret = 0;
+
+ xmlDocContentDumpOutput(ctxt, doc);
+ TODO /* compute ret */
+ return(ret);
+}
+
+/**
+ * xmlSaveTree:
+ * @ctxt: a document saving context
+ * @node: a document
+ *
+ * Save a subtree starting at the node parameter to a saving context
+ *
+ * Returns the number of byte written or -1 in case of error
+ */
+long
+xmlSaveTree(xmlSaveCtxtPtr ctxt, xmlNodePtr node)
+{
+ long ret = 0;
+
+ xmlNodeDumpOutputInternal(ctxt, node);
+ TODO /* compute ret */
+ return(ret);
+}
+
+/**
+ * xmlSaveFlush:
+ * @ctxt: a document saving context
+ *
+ * Flush a document saving context, i.e. make sure that all bytes have
+ * been output.
+ *
+ * Returns the number of byte written or -1 in case of error.
+ */
+int
+xmlSaveFlush(xmlSaveCtxtPtr ctxt)
+{
+ if (ctxt == NULL) return(-1);
+ if (ctxt->buf == NULL) return(-1);
+ return(xmlOutputBufferFlush(ctxt->buf));
+}
+
+/**
+ * xmlSaveClose:
+ * @ctxt: a document saving context
+ *
+ * Close a document saving context, i.e. make sure that all bytes have
+ * been output and free the associated data.
+ *
+ * Returns the number of byte written or -1 in case of error.
+ */
+int
+xmlSaveClose(xmlSaveCtxtPtr ctxt)
+{
+ int ret;
+
+ if (ctxt == NULL) return(-1);
+ ret = xmlSaveFlush(ctxt);
+ xmlFreeSaveCtxt(ctxt);
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * Public entry points based on buffers *
+ * *
+ ************************************************************************/
+/**
+ * xmlAttrSerializeTxtContent:
+ * @buf: the XML buffer output
+ * @doc: the document
+ * @attr: the attribute node
+ * @string: the text content
+ *
+ * Serialize text attribute values to an xml simple buffer
+ */
+void
+xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
+ xmlAttrPtr attr, const xmlChar *string) {
+ xmlChar *base, *cur;
+
+ if (string == NULL) return;
+ base = cur = (xmlChar *)string;
+ while (*cur != 0) {
+ if (*cur == '\n') {
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&#10;", 5);
+ cur++;
+ base = cur;
+ } else if (*cur == '\r') {
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&#13;", 5);
+ cur++;
+ base = cur;
+ } else if (*cur == '\t') {
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&#9;", 4);
+ cur++;
+ base = cur;
+ } else if (*cur == '"') {
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&quot;", 6);
+ cur++;
+ base = cur;
+ } else if (*cur == '<') {
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&lt;", 4);
+ cur++;
+ base = cur;
+ } else if (*cur == '>') {
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&gt;", 4);
+ cur++;
+ base = cur;
+ } else if (*cur == '&') {
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ xmlBufferAdd(buf, BAD_CAST "&amp;", 5);
+ cur++;
+ base = cur;
+ } else if ((*cur >= 0x80) && ((doc == NULL) ||
+ (doc->encoding == NULL))) {
+ /*
+ * We assume we have UTF-8 content.
+ */
+ char tmp[10];
+ int val = 0, l = 1;
+
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+ if (*cur < 0xC0) {
+ xmlSaveErr(XML_SAVE_NOT_UTF8, (xmlNodePtr) attr, NULL);
+ if (doc != NULL)
+ doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
+ snprintf(tmp, sizeof(tmp), "&#%d;", *cur);
+ tmp[sizeof(tmp) - 1] = 0;
+ xmlBufferAdd(buf, (xmlChar *) tmp, -1);
+ cur++;
+ base = cur;
+ continue;
+ } else if (*cur < 0xE0) {
+ val = (cur[0]) & 0x1F;
+ val <<= 6;
+ val |= (cur[1]) & 0x3F;
+ l = 2;
+ } else if (*cur < 0xF0) {
+ val = (cur[0]) & 0x0F;
+ val <<= 6;
+ val |= (cur[1]) & 0x3F;
+ val <<= 6;
+ val |= (cur[2]) & 0x3F;
+ l = 3;
+ } else if (*cur < 0xF8) {
+ val = (cur[0]) & 0x07;
+ val <<= 6;
+ val |= (cur[1]) & 0x3F;
+ val <<= 6;
+ val |= (cur[2]) & 0x3F;
+ val <<= 6;
+ val |= (cur[3]) & 0x3F;
+ l = 4;
+ }
+ if ((l == 1) || (!IS_CHAR(val))) {
+ xmlSaveErr(XML_SAVE_CHAR_INVALID, (xmlNodePtr) attr, NULL);
+ if (doc != NULL)
+ doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
+ snprintf(tmp, sizeof(tmp), "&#%d;", *cur);
+ tmp[sizeof(tmp) - 1] = 0;
+ xmlBufferAdd(buf, (xmlChar *) tmp, -1);
+ cur++;
+ base = cur;
+ continue;
+ }
+ /*
+ * We could do multiple things here. Just save
+ * as a char ref
+ */
+ snprintf(tmp, sizeof(tmp), "&#x%X;", val);
+ tmp[sizeof(tmp) - 1] = 0;
+ xmlBufferAdd(buf, (xmlChar *) tmp, -1);
+ cur += l;
+ base = cur;
+ } else {
+ cur++;
+ }
+ }
+ if (base != cur)
+ xmlBufferAdd(buf, base, cur - base);
+}
+
+/**
+ * xmlNodeDump:
+ * @buf: the XML buffer output
+ * @doc: the document
+ * @cur: the current node
+ * @level: the imbrication level for indenting
+ * @format: is formatting allowed
+ *
+ * Dump an XML node, recursive behaviour,children are printed too.
+ * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
+ * or xmlKeepBlanksDefault(0) was called
+ *
+ * Returns the number of bytes written to the buffer or -1 in case of error
+ */
+int
+xmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level,
+ int format)
+{
+ unsigned int use;
+ int ret;
+ xmlOutputBufferPtr outbuf;
+
+ xmlInitParser();
+
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNodeDump : node == NULL\n");
+#endif
+ return (-1);
+ }
+ if (buf == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNodeDump : buf == NULL\n");
+#endif
+ return (-1);
+ }
+ outbuf = (xmlOutputBufferPtr) xmlMalloc(sizeof(xmlOutputBuffer));
+ if (outbuf == NULL) {
+ xmlSaveErrMemory("creating buffer");
+ return (-1);
+ }
+ memset(outbuf, 0, (size_t) sizeof(xmlOutputBuffer));
+ outbuf->buffer = buf;
+ outbuf->encoder = NULL;
+ outbuf->writecallback = NULL;
+ outbuf->closecallback = NULL;
+ outbuf->context = NULL;
+ outbuf->written = 0;
+
+ use = buf->use;
+ xmlNodeDumpOutput(outbuf, doc, cur, level, format, NULL);
+ xmlFree(outbuf);
+ ret = buf->use - use;
+ return (ret);
+}
+
+/**
+ * xmlElemDump:
+ * @f: the FILE * for the output
+ * @doc: the document
+ * @cur: the current node
+ *
+ * Dump an XML/HTML node, recursive behaviour, children are printed too.
+ */
+void
+xmlElemDump(FILE * f, xmlDocPtr doc, xmlNodePtr cur)
+{
+ xmlOutputBufferPtr outbuf;
+
+ xmlInitParser();
+
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlElemDump : cur == NULL\n");
+#endif
+ return;
+ }
+#ifdef DEBUG_TREE
+ if (doc == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlElemDump : doc == NULL\n");
+ }
+#endif
+
+ outbuf = xmlOutputBufferCreateFile(f, NULL);
+ if (outbuf == NULL)
+ return;
+ if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
+#ifdef LIBXML_HTML_ENABLED
+ htmlNodeDumpOutput(outbuf, doc, cur, NULL);
+#else
+ xmlSaveErr(XML_ERR_INTERNAL_ERROR, cur, "HTML support not compiled in\n");
+#endif /* LIBXML_HTML_ENABLED */
+ } else
+ xmlNodeDumpOutput(outbuf, doc, cur, 0, 1, NULL);
+ xmlOutputBufferClose(outbuf);
+}
+
+/************************************************************************
+ * *
+ * Saving functions front-ends *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlNodeDumpOutput:
+ * @buf: the XML buffer output
+ * @doc: the document
+ * @cur: the current node
+ * @level: the imbrication level for indenting
+ * @format: is formatting allowed
+ * @encoding: an optional encoding string
+ *
+ * Dump an XML node, recursive behaviour, children are printed too.
+ * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
+ * or xmlKeepBlanksDefault(0) was called
+ */
+void
+xmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
+ int level, int format, const char *encoding)
+{
+ xmlSaveCtxt ctxt;
+#ifdef LIBXML_HTML_ENABLED
+ xmlDtdPtr dtd;
+ int is_xhtml = 0;
+#endif
+
+ xmlInitParser();
+
+ memset(&ctxt, 0, sizeof(ctxt));
+ ctxt.doc = doc;
+ ctxt.buf = buf;
+ ctxt.level = level;
+ ctxt.format = format;
+ ctxt.encoding = (const xmlChar *) encoding;
+
+#ifdef LIBXML_HTML_ENABLED
+ dtd = xmlGetIntSubset(doc);
+ if (dtd != NULL) {
+ 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)
+ xhtmlNodeDumpOutput(&ctxt, cur);
+ else
+#endif
+ xmlNodeDumpOutputInternal(&ctxt, cur);
+}
+
+/**
+ * xmlDocDumpFormatMemoryEnc:
+ * @out_doc: Document to generate XML text from
+ * @doc_txt_ptr: Memory pointer for allocated XML text
+ * @doc_txt_len: Length of the generated XML text
+ * @txt_encoding: Character encoding to use when generating XML text
+ * @format: should formatting spaces been added
+ *
+ * Dump the current DOM tree into memory using the character encoding specified
+ * by the caller. Note it is up to the caller of this function to free the
+ * allocated memory with xmlFree().
+ * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
+ * or xmlKeepBlanksDefault(0) was called
+ */
+
+void
+xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc, xmlChar **doc_txt_ptr,
+ int * doc_txt_len, const char * txt_encoding,
+ int format) {
+ xmlSaveCtxt ctxt;
+ int dummy = 0;
+ xmlOutputBufferPtr out_buff = NULL;
+ xmlCharEncodingHandlerPtr conv_hdlr = NULL;
+
+ if (doc_txt_len == NULL) {
+ doc_txt_len = &dummy; /* Continue, caller just won't get length */
+ }
+
+ if (doc_txt_ptr == NULL) {
+ *doc_txt_len = 0;
+ return;
+ }
+
+ *doc_txt_ptr = NULL;
+ *doc_txt_len = 0;
+
+ if (out_doc == NULL) {
+ /* No document, no output */
+ return;
+ }
+
+ /*
+ * Validate the encoding value, if provided.
+ * This logic is copied from xmlSaveFileEnc.
+ */
+
+ if (txt_encoding == NULL)
+ txt_encoding = (const char *) out_doc->encoding;
+ if (txt_encoding != NULL) {
+ conv_hdlr = xmlFindCharEncodingHandler(txt_encoding);
+ if ( conv_hdlr == NULL ) {
+ xmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, (xmlNodePtr) out_doc,
+ txt_encoding);
+ return;
+ }
+ }
+
+ if ((out_buff = xmlAllocOutputBuffer(conv_hdlr)) == NULL ) {
+ xmlSaveErrMemory("creating buffer");
+ return;
+ }
+
+ memset(&ctxt, 0, sizeof(ctxt));
+ ctxt.doc = out_doc;
+ ctxt.buf = out_buff;
+ ctxt.level = 0;
+ ctxt.format = format;
+ ctxt.encoding = (const xmlChar *) txt_encoding;
+ xmlDocContentDumpOutput(&ctxt, out_doc);
+ xmlOutputBufferFlush(out_buff);
+ if (out_buff->conv != NULL) {
+ *doc_txt_len = out_buff->conv->use;
+ *doc_txt_ptr = xmlStrndup(out_buff->conv->content, *doc_txt_len);
+ } else {
+ *doc_txt_len = out_buff->buffer->use;
+ *doc_txt_ptr = xmlStrndup(out_buff->buffer->content, *doc_txt_len);
+ }
+ (void)xmlOutputBufferClose(out_buff);
+
+ if ((*doc_txt_ptr == NULL) && (*doc_txt_len > 0)) {
+ *doc_txt_len = 0;
+ xmlSaveErrMemory("creating output");
+ }
+
+ return;
+}
+
+/**
+ * xmlDocDumpMemory:
+ * @cur: the document
+ * @mem: OUT: the memory pointer
+ * @size: OUT: the memory length
+ *
+ * Dump an XML document in memory and return the #xmlChar * and it's size
+ * in bytes. It's up to the caller to free the memory with xmlFree().
+ * The resulting byte array is zero terminated, though the last 0 is not
+ * included in the returned size.
+ */
+void
+xmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int *size) {
+ xmlDocDumpFormatMemoryEnc(cur, mem, size, NULL, 0);
+}
+
+/**
+ * xmlDocDumpFormatMemory:
+ * @cur: the document
+ * @mem: OUT: the memory pointer
+ * @size: OUT: the memory length
+ * @format: should formatting spaces been added
+ *
+ *
+ * Dump an XML document in memory and return the #xmlChar * and it's size.
+ * It's up to the caller to free the memory with xmlFree().
+ * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
+ * or xmlKeepBlanksDefault(0) was called
+ */
+void
+xmlDocDumpFormatMemory(xmlDocPtr cur, xmlChar**mem, int *size, int format) {
+ xmlDocDumpFormatMemoryEnc(cur, mem, size, NULL, format);
+}
+
+/**
+ * xmlDocDumpMemoryEnc:
+ * @out_doc: Document to generate XML text from
+ * @doc_txt_ptr: Memory pointer for allocated XML text
+ * @doc_txt_len: Length of the generated XML text
+ * @txt_encoding: Character encoding to use when generating XML text
+ *
+ * Dump the current DOM tree into memory using the character encoding specified
+ * by the caller. Note it is up to the caller of this function to free the
+ * allocated memory with xmlFree().
+ */
+
+void
+xmlDocDumpMemoryEnc(xmlDocPtr out_doc, xmlChar **doc_txt_ptr,
+ int * doc_txt_len, const char * txt_encoding) {
+ xmlDocDumpFormatMemoryEnc(out_doc, doc_txt_ptr, doc_txt_len,
+ txt_encoding, 0);
+}
+
+/**
+ * xmlDocFormatDump:
+ * @f: the FILE*
+ * @cur: the document
+ * @format: should formatting spaces been added
+ *
+ * Dump an XML document to an open FILE.
+ *
+ * returns: the number of bytes written or -1 in case of failure.
+ * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
+ * or xmlKeepBlanksDefault(0) was called
+ */
+int
+xmlDocFormatDump(FILE *f, xmlDocPtr cur, int format) {
+ xmlSaveCtxt ctxt;
+ xmlOutputBufferPtr buf;
+ const char * encoding;
+ xmlCharEncodingHandlerPtr handler = NULL;
+ int ret;
+
+ if (cur == NULL) {
+#ifdef DEBUG_TREE
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlDocDump : document == NULL\n");
+#endif
+ return(-1);
+ }
+ encoding = (const char *) cur->encoding;
+
+ if (encoding != NULL) {
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL) {
+ xmlFree((char *) cur->encoding);
+ cur->encoding = NULL;
+ }
+ }
+ buf = xmlOutputBufferCreateFile(f, handler);
+ if (buf == NULL) return(-1);
+ memset(&ctxt, 0, sizeof(ctxt));
+ ctxt.doc = cur;
+ ctxt.buf = buf;
+ ctxt.level = 0;
+ ctxt.format = format;
+ ctxt.encoding = (const xmlChar *) encoding;
+ xmlDocContentDumpOutput(&ctxt, cur);
+
+ ret = xmlOutputBufferClose(buf);
+ return(ret);
+}
+
+/**
+ * xmlDocDump:
+ * @f: the FILE*
+ * @cur: the document
+ *
+ * Dump an XML document to an open FILE.
+ *
+ * returns: the number of bytes written or -1 in case of failure.
+ */
+int
+xmlDocDump(FILE *f, xmlDocPtr cur) {
+ return(xmlDocFormatDump (f, cur, 0));
+}
+
+/**
+ * xmlSaveFileTo:
+ * @buf: an output I/O buffer
+ * @cur: the document
+ * @encoding: the encoding if any assuming the I/O layer handles the trancoding
+ *
+ * Dump an XML document to an I/O buffer.
+ *
+ * returns: the number of bytes written or -1 in case of failure.
+ */
+int
+xmlSaveFileTo(xmlOutputBufferPtr buf, xmlDocPtr cur, const char *encoding) {
+ xmlSaveCtxt ctxt;
+ int ret;
+
+ if (buf == NULL) return(0);
+ memset(&ctxt, 0, sizeof(ctxt));
+ ctxt.doc = cur;
+ ctxt.buf = buf;
+ ctxt.level = 0;
+ ctxt.format = 0;
+ ctxt.encoding = (const xmlChar *) encoding;
+ xmlDocContentDumpOutput(&ctxt, cur);
+ ret = xmlOutputBufferClose(buf);
+ return(ret);
+}
+
+/**
+ * xmlSaveFormatFileTo:
+ * @buf: an output I/O buffer
+ * @cur: the document
+ * @encoding: the encoding if any assuming the I/O layer handles the trancoding
+ * @format: should formatting spaces been added
+ *
+ * Dump an XML document to an I/O buffer.
+ * NOTE: the I/O buffer is closed as part of the call.
+ *
+ * returns: the number of bytes written or -1 in case of failure.
+ */
+int
+xmlSaveFormatFileTo(xmlOutputBufferPtr buf, xmlDocPtr cur,
+ const char *encoding, int format)
+{
+ xmlSaveCtxt ctxt;
+ int ret;
+
+ if (buf == NULL)
+ return (0);
+ memset(&ctxt, 0, sizeof(ctxt));
+ ctxt.doc = cur;
+ ctxt.buf = buf;
+ ctxt.level = 0;
+ ctxt.format = format;
+ ctxt.encoding = (const xmlChar *) encoding;
+ xmlDocContentDumpOutput(&ctxt, cur);
+ ret = xmlOutputBufferClose(buf);
+ return (ret);
+}
+
+/**
+ * xmlSaveFormatFileEnc:
+ * @filename: the filename or URL to output
+ * @cur: the document being saved
+ * @encoding: the name of the encoding to use or NULL.
+ * @format: should formatting spaces be added.
+ *
+ * Dump an XML document to a file or an URL.
+ *
+ * Returns the number of bytes written or -1 in case of error.
+ * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
+ * or xmlKeepBlanksDefault(0) was called
+ */
+int
+xmlSaveFormatFileEnc( const char * filename, xmlDocPtr cur,
+ const char * encoding, int format ) {
+ xmlSaveCtxt ctxt;
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+ int ret;
+
+ if (cur == NULL)
+ return(-1);
+
+ if (encoding == NULL)
+ encoding = (const char *) cur->encoding;
+
+ if (encoding != NULL) {
+
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL)
+ return(-1);
+ }
+
+#ifdef HAVE_ZLIB_H
+ if (cur->compression < 0) cur->compression = xmlGetCompressMode();
+#endif
+ /*
+ * save the content to a temp buffer.
+ */
+ buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression);
+ if (buf == NULL) return(-1);
+ memset(&ctxt, 0, sizeof(ctxt));
+ ctxt.doc = cur;
+ ctxt.buf = buf;
+ ctxt.level = 0;
+ ctxt.format = format;
+ ctxt.encoding = (const xmlChar *) encoding;
+
+ xmlDocContentDumpOutput(&ctxt, cur);
+
+ ret = xmlOutputBufferClose(buf);
+ return(ret);
+}
+
+
+/**
+ * xmlSaveFileEnc:
+ * @filename: the filename (or URL)
+ * @cur: the document
+ * @encoding: the name of an encoding (or NULL)
+ *
+ * Dump an XML document, converting it to the given encoding
+ *
+ * returns: the number of bytes written or -1 in case of failure.
+ */
+int
+xmlSaveFileEnc(const char *filename, xmlDocPtr cur, const char *encoding) {
+ return ( xmlSaveFormatFileEnc( filename, cur, encoding, 0 ) );
+}
+
+/**
+ * xmlSaveFormatFile:
+ * @filename: the filename (or URL)
+ * @cur: the document
+ * @format: should formatting spaces been added
+ *
+ * Dump an XML document to a file. Will use compression if
+ * compiled in and enabled. If @filename is "-" the stdout file is
+ * used. If @format is set then the document will be indented on output.
+ * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
+ * or xmlKeepBlanksDefault(0) was called
+ *
+ * returns: the number of bytes written or -1 in case of failure.
+ */
+int
+xmlSaveFormatFile(const char *filename, xmlDocPtr cur, int format) {
+ return ( xmlSaveFormatFileEnc( filename, cur, NULL, format ) );
+}
+
+/**
+ * xmlSaveFile:
+ * @filename: the filename (or URL)
+ * @cur: the document
+ *
+ * Dump an XML document to a file. Will use compression if
+ * compiled in and enabled. If @filename is "-" the stdout file is
+ * used.
+ * returns: the number of bytes written or -1 in case of failure.
+ */
+int
+xmlSaveFile(const char *filename, xmlDocPtr cur) {
+ return(xmlSaveFormatFileEnc(filename, cur, NULL, 0));
+}
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+
diff --git a/xmlschemas.c b/xmlschemas.c
new file mode 100644
index 0000000..192cfe8
--- /dev/null
+++ b/xmlschemas.c
@@ -0,0 +1,6398 @@
+/*
+ * schemas.c : implementation of the XML Schema handling and
+ * schema validity checking
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <veillard@redhat.com>
+ */
+
+/*
+ * TODO:
+ * - when types are redefined in includes, check that all
+ * types in the redef list are equal
+ * -> need a type equality operation.
+ */
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/hash.h>
+#include <libxml/uri.h>
+
+#include <libxml/xmlschemas.h>
+#include <libxml/schemasInternals.h>
+#include <libxml/xmlschemastypes.h>
+#include <libxml/xmlautomata.h>
+#include <libxml/xmlregexp.h>
+#include <libxml/dict.h>
+
+/* #define DEBUG 1 */
+
+/* #define DEBUG_CONTENT 1 */
+
+/* #define DEBUG_TYPE 1 */
+
+/* #define DEBUG_CONTENT_REGEXP 1 */
+
+/* #define DEBUG_AUTOMATA 1 */
+
+#define UNBOUNDED (1 << 30)
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+#define XML_SCHEMAS_DEFAULT_NAMESPACE (const xmlChar *)"the default namespace"
+
+/*
+ * The XML Schemas namespaces
+ */
+static const xmlChar *xmlSchemaNs = (const xmlChar *)
+ "http://www.w3.org/2001/XMLSchema";
+
+static const xmlChar *xmlSchemaInstanceNs = (const xmlChar *)
+ "http://www.w3.org/2001/XMLSchema-instance";
+
+#define IS_SCHEMA(node, type) \
+ ((node != NULL) && (node->ns != NULL) && \
+ (xmlStrEqual(node->name, (const xmlChar *) type)) && \
+ (xmlStrEqual(node->ns->href, xmlSchemaNs)))
+
+#define XML_SCHEMAS_PARSE_ERROR 1
+
+#define SCHEMAS_PARSE_OPTIONS XML_PARSE_NOENT
+
+struct _xmlSchemaParserCtxt {
+ void *userData; /* user specific data block */
+ xmlSchemaValidityErrorFunc error; /* the callback in case of errors */
+ xmlSchemaValidityWarningFunc warning; /* the callback in case of warning */
+ xmlSchemaValidError err;
+ int nberrors;
+ xmlStructuredErrorFunc serror;
+
+ 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, ... */
+ int counter;
+
+ const xmlChar *URL;
+ xmlDocPtr doc;
+ int preserve; /* Whether the doc should be freed */
+
+ const char *buffer;
+ int size;
+
+ /*
+ * Used to build complex element content models
+ */
+ xmlAutomataPtr am;
+ xmlAutomataStatePtr start;
+ xmlAutomataStatePtr end;
+ xmlAutomataStatePtr state;
+
+ xmlDictPtr dict; /* dictionnary for interned string names */
+ int includes; /* the inclusion level, 0 for root or imports */
+};
+
+
+#define XML_SCHEMAS_ATTR_UNKNOWN 1
+#define XML_SCHEMAS_ATTR_CHECKED 2
+
+typedef struct _xmlSchemaAttrState xmlSchemaAttrState;
+typedef xmlSchemaAttrState *xmlSchemaAttrStatePtr;
+struct _xmlSchemaAttrState {
+ xmlAttrPtr attr;
+ int state;
+};
+
+/**
+ * xmlSchemaValidCtxt:
+ *
+ * A Schemas validation context
+ */
+
+struct _xmlSchemaValidCtxt {
+ void *userData; /* user specific data block */
+ xmlSchemaValidityErrorFunc error; /* the callback in case of errors */
+ xmlSchemaValidityWarningFunc warning; /* the callback in case of warning */
+ xmlStructuredErrorFunc serror;
+
+ xmlSchemaPtr schema; /* The schema in use */
+ xmlDocPtr doc;
+ xmlParserInputBufferPtr input;
+ xmlCharEncoding enc;
+ xmlSAXHandlerPtr sax;
+ void *user_data;
+
+ xmlDocPtr myDoc;
+ int err;
+ int nberrors;
+
+ xmlNodePtr node;
+ xmlNodePtr cur;
+ xmlSchemaTypePtr type;
+
+ xmlRegExecCtxtPtr regexp;
+ xmlSchemaValPtr value;
+
+ int attrNr;
+ int attrBase;
+ int attrMax;
+ xmlSchemaAttrStatePtr attr;
+};
+
+/*
+ * These are the entries in the schemas importSchemas hash table
+ */
+typedef struct _xmlSchemaImport xmlSchemaImport;
+typedef xmlSchemaImport *xmlSchemaImportPtr;
+struct _xmlSchemaImport {
+ const xmlChar *schemaLocation;
+ xmlSchemaPtr schema;
+};
+
+/*
+ * These are the entries associated to includes in a schemas
+ */
+typedef struct _xmlSchemaInclude xmlSchemaInclude;
+typedef xmlSchemaInclude *xmlSchemaIncludePtr;
+struct _xmlSchemaInclude {
+ xmlSchemaIncludePtr next;
+
+ const xmlChar *schemaLocation;
+ xmlDocPtr doc;
+};
+
+/************************************************************************
+ * *
+ * Some predeclarations *
+ * *
+ ************************************************************************/
+static int xmlSchemaValidateSimpleValue(xmlSchemaValidCtxtPtr ctxt,
+ xmlSchemaTypePtr type,
+ const xmlChar * value);
+
+static int xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node);
+/************************************************************************
+ * *
+ * Datatype error handlers *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchemaPErrMemory:
+ * @node: a context node
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlSchemaPErrMemory(xmlSchemaParserCtxtPtr ctxt,
+ const char *extra, xmlNodePtr node)
+{
+ if (ctxt != NULL)
+ ctxt->nberrors++;
+ __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, node, NULL,
+ extra);
+}
+
+/**
+ * xmlSchemaPErr:
+ * @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
+xmlSchemaPErr(xmlSchemaParserCtxtPtr 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);
+}
+
+/**
+ * xmlSchemaPErr2:
+ * @ctxt: the parsing context
+ * @node: the context node
+ * @node: the current child
+ * @error: the error code
+ * @msg: the error message
+ * @str1: extra data
+ * @str2: extra data
+ *
+ * Handle a parser error
+ */
+static void
+xmlSchemaPErr2(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
+ xmlNodePtr child, int error,
+ const char *msg, const xmlChar * str1, const xmlChar * str2)
+{
+ if (child != NULL)
+ xmlSchemaPErr(ctxt, child, error, msg, str1, str2);
+ else
+ xmlSchemaPErr(ctxt, node, error, msg, str1, str2);
+}
+
+/**
+ * xmlSchemaVTypeErrMemory:
+ * @node: a context node
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlSchemaVErrMemory(xmlSchemaValidCtxtPtr ctxt,
+ const char *extra, xmlNodePtr node)
+{
+ if (ctxt != NULL) {
+ ctxt->nberrors++;
+ ctxt->err = XML_SCHEMAS_ERR_INTERNAL;
+ }
+ __xmlSimpleError(XML_FROM_SCHEMASV, XML_ERR_NO_MEMORY, node, NULL,
+ extra);
+}
+
+/**
+ * xmlSchemaVErr3:
+ * @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
+xmlSchemaVErr3(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node, int error,
+ const char *msg, const xmlChar *str1, const xmlChar *str2,
+ const xmlChar *str3)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ ctxt->nberrors++;
+ ctxt->err = error;
+ channel = ctxt->error;
+ schannel = ctxt->serror;
+ data = ctxt->userData;
+ }
+ /* reajust to global error numbers */
+ error += XML_SCHEMAV_NOROOT - XML_SCHEMAS_ERR_NOROOT;
+ __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASV,
+ error, XML_ERR_ERROR, NULL, 0,
+ (const char *) str1, (const char *) str2,
+ (const char *) str3, 0, 0,
+ msg, str1, str2, str3);
+}
+/**
+ * xmlSchemaVErr:
+ * @ctxt: the validation context
+ * @node: the context node
+ * @error: the error code
+ * @msg: the error message
+ * @str1: extra data
+ * @str2: extra data
+ *
+ * Handle a validation error
+ */
+static void
+xmlSchemaVErr(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node, int error,
+ const char *msg, const xmlChar * str1, const xmlChar * str2)
+{
+ xmlStructuredErrorFunc schannel = NULL;
+ xmlGenericErrorFunc channel = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ ctxt->nberrors++;
+ ctxt->err = error;
+ channel = ctxt->error;
+ data = ctxt->userData;
+ schannel = ctxt->serror;
+ }
+ /* reajust to global error numbers */
+ error += XML_SCHEMAV_NOROOT - XML_SCHEMAS_ERR_NOROOT;
+ __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASV,
+ error, XML_ERR_ERROR, NULL, 0,
+ (const char *) str1, (const char *) str2, NULL, 0, 0,
+ msg, str1, str2);
+}
+
+/************************************************************************
+ * *
+ * Allocation functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchemaNewSchema:
+ * @ctxt: a schema validation context
+ *
+ * Allocate a new Schema structure.
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+static xmlSchemaPtr
+xmlSchemaNewSchema(xmlSchemaParserCtxtPtr ctxt)
+{
+ xmlSchemaPtr ret;
+
+ ret = (xmlSchemaPtr) xmlMalloc(sizeof(xmlSchema));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(ctxt, "allocating schema", NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchema));
+ ret->dict = ctxt->dict;
+ xmlDictReference(ret->dict);
+
+ return (ret);
+}
+
+/**
+ * xmlSchemaNewFacet:
+ *
+ * Allocate a new Facet structure.
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+xmlSchemaFacetPtr
+xmlSchemaNewFacet(void)
+{
+ xmlSchemaFacetPtr ret;
+
+ ret = (xmlSchemaFacetPtr) xmlMalloc(sizeof(xmlSchemaFacet));
+ if (ret == NULL) {
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaFacet));
+
+ return (ret);
+}
+
+/**
+ * xmlSchemaNewAnnot:
+ * @ctxt: a schema validation context
+ * @node: a node
+ *
+ * Allocate a new annotation structure.
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+static xmlSchemaAnnotPtr
+xmlSchemaNewAnnot(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlSchemaAnnotPtr ret;
+
+ ret = (xmlSchemaAnnotPtr) xmlMalloc(sizeof(xmlSchemaAnnot));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(ctxt, "allocating annotation", node);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaAnnot));
+ ret->content = node;
+ return (ret);
+}
+
+/**
+ * xmlSchemaFreeAnnot:
+ * @annot: a schema type structure
+ *
+ * Deallocate a annotation structure
+ */
+static void
+xmlSchemaFreeAnnot(xmlSchemaAnnotPtr annot)
+{
+ if (annot == NULL)
+ return;
+ xmlFree(annot);
+}
+
+/**
+ * xmlSchemaFreeImport:
+ * @import: a schema import structure
+ *
+ * Deallocate an import structure
+ */
+static void
+xmlSchemaFreeImport(xmlSchemaImportPtr import)
+{
+ if (import == NULL)
+ return;
+
+ xmlSchemaFree(import->schema);
+ xmlFree(import);
+}
+
+/**
+ * xmlSchemaFreeInclude:
+ * @include: a schema include structure
+ *
+ * Deallocate an include structure
+ */
+static void
+xmlSchemaFreeInclude(xmlSchemaIncludePtr include)
+{
+ if (include == NULL)
+ return;
+
+ xmlFreeDoc(include->doc);
+ xmlFree(include);
+}
+
+/**
+ * xmlSchemaFreeIncludeList:
+ * @includes: a schema include list
+ *
+ * Deallocate an include structure
+ */
+static void
+xmlSchemaFreeIncludeList(xmlSchemaIncludePtr includes)
+{
+ xmlSchemaIncludePtr next;
+
+ while (includes != NULL) {
+ next = includes->next;
+ xmlSchemaFreeInclude(includes);
+ includes = next;
+ }
+}
+
+/**
+ * xmlSchemaFreeNotation:
+ * @schema: a schema notation structure
+ *
+ * Deallocate a Schema Notation structure.
+ */
+static void
+xmlSchemaFreeNotation(xmlSchemaNotationPtr nota)
+{
+ if (nota == NULL)
+ return;
+ xmlFree(nota);
+}
+
+/**
+ * xmlSchemaFreeAttribute:
+ * @schema: a schema attribute structure
+ *
+ * Deallocate a Schema Attribute structure.
+ */
+static void
+xmlSchemaFreeAttribute(xmlSchemaAttributePtr attr)
+{
+ if (attr == NULL)
+ return;
+ xmlFree(attr);
+}
+
+/**
+ * xmlSchemaFreeAttributeGroup:
+ * @schema: a schema attribute group structure
+ *
+ * Deallocate a Schema Attribute Group structure.
+ */
+static void
+xmlSchemaFreeAttributeGroup(xmlSchemaAttributeGroupPtr attr)
+{
+ if (attr == NULL)
+ return;
+ xmlFree(attr);
+}
+
+/**
+ * xmlSchemaFreeElement:
+ * @schema: a schema element structure
+ *
+ * Deallocate a Schema Element structure.
+ */
+static void
+xmlSchemaFreeElement(xmlSchemaElementPtr elem)
+{
+ if (elem == NULL)
+ return;
+ if (elem->annot != NULL)
+ xmlSchemaFreeAnnot(elem->annot);
+ if (elem->contModel != NULL)
+ xmlRegFreeRegexp(elem->contModel);
+ xmlFree(elem);
+}
+
+/**
+ * xmlSchemaFreeFacet:
+ * @facet: a schema facet structure
+ *
+ * Deallocate a Schema Facet structure.
+ */
+void
+xmlSchemaFreeFacet(xmlSchemaFacetPtr facet)
+{
+ if (facet == NULL)
+ return;
+ if (facet->val != NULL)
+ xmlSchemaFreeValue(facet->val);
+ if (facet->regexp != NULL)
+ xmlRegFreeRegexp(facet->regexp);
+ if (facet->annot != NULL)
+ xmlSchemaFreeAnnot(facet->annot);
+ xmlFree(facet);
+}
+
+/**
+ * xmlSchemaFreeType:
+ * @type: a schema type structure
+ *
+ * Deallocate a Schema Type structure.
+ */
+void
+xmlSchemaFreeType(xmlSchemaTypePtr type)
+{
+ if (type == NULL)
+ return;
+ if (type->annot != NULL)
+ xmlSchemaFreeAnnot(type->annot);
+ if (type->facets != NULL) {
+ xmlSchemaFacetPtr facet, next;
+
+ facet = type->facets;
+ while (facet != NULL) {
+ next = facet->next;
+ xmlSchemaFreeFacet(facet);
+ facet = next;
+ }
+ }
+ xmlFree(type);
+}
+
+/**
+ * xmlSchemaFreeTypeList:
+ * @type: a schema type structure
+ *
+ * Deallocate a Schema Type structure.
+ */
+static void
+xmlSchemaFreeTypeList(xmlSchemaTypePtr type)
+{
+ xmlSchemaTypePtr next;
+
+ while (type != NULL) {
+ next = type->redef;
+ xmlSchemaFreeType(type);
+ type = next;
+ }
+}
+
+/**
+ * xmlSchemaFree:
+ * @schema: a schema structure
+ *
+ * Deallocate a Schema structure.
+ */
+void
+xmlSchemaFree(xmlSchemaPtr schema)
+{
+ if (schema == NULL)
+ return;
+
+ if (schema->notaDecl != NULL)
+ xmlHashFree(schema->notaDecl,
+ (xmlHashDeallocator) xmlSchemaFreeNotation);
+ if (schema->attrDecl != NULL)
+ xmlHashFree(schema->attrDecl,
+ (xmlHashDeallocator) xmlSchemaFreeAttribute);
+ if (schema->attrgrpDecl != NULL)
+ xmlHashFree(schema->attrgrpDecl,
+ (xmlHashDeallocator) xmlSchemaFreeAttributeGroup);
+ if (schema->elemDecl != NULL)
+ xmlHashFree(schema->elemDecl,
+ (xmlHashDeallocator) xmlSchemaFreeElement);
+ if (schema->typeDecl != NULL)
+ xmlHashFree(schema->typeDecl,
+ (xmlHashDeallocator) xmlSchemaFreeTypeList);
+ if (schema->groupDecl != NULL)
+ xmlHashFree(schema->groupDecl,
+ (xmlHashDeallocator) xmlSchemaFreeType);
+ if (schema->schemasImports != NULL)
+ xmlHashFree(schema->schemasImports,
+ (xmlHashDeallocator) xmlSchemaFreeImport);
+ if (schema->includes != NULL) {
+ xmlSchemaFreeIncludeList((xmlSchemaIncludePtr) schema->includes);
+ }
+ if (schema->annot != NULL)
+ xmlSchemaFreeAnnot(schema->annot);
+ if (schema->doc != NULL && !schema->preserve)
+ xmlFreeDoc(schema->doc);
+ xmlDictFree(schema->dict);
+
+ xmlFree(schema);
+}
+
+/************************************************************************
+ * *
+ * Debug functions *
+ * *
+ ************************************************************************/
+
+#ifdef LIBXML_OUTPUT_ENABLED
+
+/**
+ * xmlSchemaElementDump:
+ * @elem: an element
+ * @output: the file output
+ *
+ * Dump the element
+ */
+static void
+xmlSchemaElementDump(xmlSchemaElementPtr elem, FILE * output,
+ const xmlChar * name ATTRIBUTE_UNUSED,
+ const xmlChar * context ATTRIBUTE_UNUSED,
+ const xmlChar * namespace ATTRIBUTE_UNUSED)
+{
+ if (elem == NULL)
+ return;
+
+ fprintf(output, "Element ");
+ if (elem->flags & XML_SCHEMAS_ELEM_TOPLEVEL)
+ fprintf(output, "toplevel ");
+ fprintf(output, ": %s ", elem->name);
+ if (namespace != NULL)
+ fprintf(output, "namespace '%s' ", namespace);
+
+ if (elem->flags & XML_SCHEMAS_ELEM_NILLABLE)
+ fprintf(output, "nillable ");
+ if (elem->flags & XML_SCHEMAS_ELEM_GLOBAL)
+ fprintf(output, "global ");
+ if (elem->flags & XML_SCHEMAS_ELEM_DEFAULT)
+ fprintf(output, "default ");
+ if (elem->flags & XML_SCHEMAS_ELEM_FIXED)
+ fprintf(output, "fixed ");
+ if (elem->flags & XML_SCHEMAS_ELEM_ABSTRACT)
+ fprintf(output, "abstract ");
+ if (elem->flags & XML_SCHEMAS_ELEM_REF)
+ fprintf(output, "ref '%s' ", elem->ref);
+ if (elem->id != NULL)
+ fprintf(output, "id '%s' ", elem->id);
+ fprintf(output, "\n");
+ if ((elem->minOccurs != 1) || (elem->maxOccurs != 1)) {
+ fprintf(output, " ");
+ if (elem->minOccurs != 1)
+ fprintf(output, "min: %d ", elem->minOccurs);
+ if (elem->maxOccurs >= UNBOUNDED)
+ fprintf(output, "max: unbounded\n");
+ else if (elem->maxOccurs != 1)
+ fprintf(output, "max: %d\n", elem->maxOccurs);
+ else
+ fprintf(output, "\n");
+ }
+ if (elem->namedType != NULL) {
+ fprintf(output, " type: %s", elem->namedType);
+ if (elem->namedTypeNs != NULL)
+ fprintf(output, " ns %s\n", elem->namedTypeNs);
+ else
+ fprintf(output, "\n");
+ }
+ if (elem->substGroup != NULL) {
+ fprintf(output, " substitutionGroup: %s", elem->substGroup);
+ if (elem->substGroupNs != NULL)
+ fprintf(output, " ns %s\n", elem->substGroupNs);
+ else
+ fprintf(output, "\n");
+ }
+ if (elem->value != NULL)
+ fprintf(output, " default: %s", elem->value);
+}
+
+/**
+ * xmlSchemaAnnotDump:
+ * @output: the file output
+ * @annot: a annotation
+ *
+ * Dump the annotation
+ */
+static void
+xmlSchemaAnnotDump(FILE * output, xmlSchemaAnnotPtr annot)
+{
+ xmlChar *content;
+
+ if (annot == NULL)
+ return;
+
+ content = xmlNodeGetContent(annot->content);
+ if (content != NULL) {
+ fprintf(output, " Annot: %s\n", content);
+ xmlFree(content);
+ } else
+ fprintf(output, " Annot: empty\n");
+}
+
+/**
+ * xmlSchemaTypeDump:
+ * @output: the file output
+ * @type: a type structure
+ *
+ * Dump a SchemaType structure
+ */
+static void
+xmlSchemaTypeDump(xmlSchemaTypePtr type, FILE * output)
+{
+ if (type == NULL) {
+ fprintf(output, "Type: NULL\n");
+ return;
+ }
+ fprintf(output, "Type: ");
+ if (type->name != NULL)
+ fprintf(output, "%s, ", type->name);
+ else
+ fprintf(output, "no name");
+ switch (type->type) {
+ case XML_SCHEMA_TYPE_BASIC:
+ fprintf(output, "basic ");
+ break;
+ case XML_SCHEMA_TYPE_SIMPLE:
+ fprintf(output, "simple ");
+ break;
+ case XML_SCHEMA_TYPE_COMPLEX:
+ fprintf(output, "complex ");
+ break;
+ case XML_SCHEMA_TYPE_SEQUENCE:
+ fprintf(output, "sequence ");
+ break;
+ case XML_SCHEMA_TYPE_CHOICE:
+ fprintf(output, "choice ");
+ break;
+ case XML_SCHEMA_TYPE_ALL:
+ fprintf(output, "all ");
+ break;
+ case XML_SCHEMA_TYPE_UR:
+ fprintf(output, "ur ");
+ break;
+ case XML_SCHEMA_TYPE_RESTRICTION:
+ fprintf(output, "restriction ");
+ break;
+ case XML_SCHEMA_TYPE_EXTENSION:
+ fprintf(output, "extension ");
+ break;
+ default:
+ fprintf(output, "unknowntype%d ", type->type);
+ break;
+ }
+ if (type->base != NULL) {
+ fprintf(output, "base %s, ", type->base);
+ }
+ switch (type->contentType) {
+ case XML_SCHEMA_CONTENT_UNKNOWN:
+ fprintf(output, "unknown ");
+ break;
+ case XML_SCHEMA_CONTENT_EMPTY:
+ fprintf(output, "empty ");
+ break;
+ case XML_SCHEMA_CONTENT_ELEMENTS:
+ fprintf(output, "element ");
+ break;
+ case XML_SCHEMA_CONTENT_MIXED:
+ fprintf(output, "mixed ");
+ break;
+ case XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS:
+ fprintf(output, "mixed_or_elems ");
+ break;
+ case XML_SCHEMA_CONTENT_BASIC:
+ fprintf(output, "basic ");
+ break;
+ case XML_SCHEMA_CONTENT_SIMPLE:
+ fprintf(output, "simple ");
+ break;
+ case XML_SCHEMA_CONTENT_ANY:
+ fprintf(output, "any ");
+ break;
+ }
+ fprintf(output, "\n");
+ if ((type->minOccurs != 1) || (type->maxOccurs != 1)) {
+ fprintf(output, " ");
+ if (type->minOccurs != 1)
+ fprintf(output, "min: %d ", type->minOccurs);
+ if (type->maxOccurs >= UNBOUNDED)
+ fprintf(output, "max: unbounded\n");
+ else if (type->maxOccurs != 1)
+ fprintf(output, "max: %d\n", type->maxOccurs);
+ else
+ fprintf(output, "\n");
+ }
+ if (type->annot != NULL)
+ xmlSchemaAnnotDump(output, type->annot);
+ if (type->subtypes != NULL) {
+ xmlSchemaTypePtr sub = type->subtypes;
+
+ fprintf(output, " subtypes: ");
+ while (sub != NULL) {
+ fprintf(output, "%s ", sub->name);
+ sub = sub->next;
+ }
+ fprintf(output, "\n");
+ }
+
+}
+
+/**
+ * xmlSchemaDump:
+ * @output: the file output
+ * @schema: a schema structure
+ *
+ * Dump a Schema structure.
+ */
+void
+xmlSchemaDump(FILE * output, xmlSchemaPtr schema)
+{
+ if (schema == NULL) {
+ fprintf(output, "Schemas: NULL\n");
+ return;
+ }
+ fprintf(output, "Schemas: ");
+ if (schema->name != NULL)
+ fprintf(output, "%s, ", schema->name);
+ else
+ fprintf(output, "no name, ");
+ if (schema->targetNamespace != NULL)
+ fprintf(output, "%s", (const char *) schema->targetNamespace);
+ else
+ fprintf(output, "no target namespace");
+ fprintf(output, "\n");
+ if (schema->annot != NULL)
+ xmlSchemaAnnotDump(output, schema->annot);
+
+ xmlHashScan(schema->typeDecl, (xmlHashScanner) xmlSchemaTypeDump,
+ output);
+ xmlHashScanFull(schema->elemDecl,
+ (xmlHashScannerFull) xmlSchemaElementDump, output);
+}
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/************************************************************************
+ * *
+ * Utilities *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchemaGetProp:
+ * @ctxt: the parser context
+ * @node: the node
+ * @name: the property name
+ *
+ * Read a attribute value and internalize the string
+ *
+ * Returns the string or NULL if not present.
+ */
+static const xmlChar *
+xmlSchemaGetProp(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
+ const char *name)
+{
+ xmlChar *val;
+ const xmlChar *ret;
+
+ val = xmlGetProp(node, BAD_CAST name);
+ if (val == NULL)
+ return(NULL);
+ ret = xmlDictLookup(ctxt->dict, val, -1);
+ xmlFree(val);
+ return(ret);
+}
+
+/**
+ * xmlSchemaGetNamespace:
+ * @ctxt: the parser context
+ * @schema: the schemas containing the declaration
+ * @node: the node
+ * @qname: the QName to analyze
+ *
+ * Find the namespace name for the given declaration.
+ *
+ * Returns the local name for that declaration, as well as the namespace name
+ */
+static const xmlChar *
+xmlSchemaGetNamespace(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node, const xmlChar *qname,
+ const xmlChar **namespace) {
+ int len;
+ const xmlChar *name, *prefix, *def = NULL;
+ xmlNsPtr ns;
+
+ *namespace = NULL;
+
+ if (xmlStrEqual(node->name, BAD_CAST "element") ||
+ xmlStrEqual(node->name, BAD_CAST "attribute") ||
+ xmlStrEqual(node->name, BAD_CAST "simpleType") ||
+ xmlStrEqual(node->name, BAD_CAST "complexType")) {
+ def = xmlSchemaGetProp(ctxt, node, "targetNamespace");
+ }
+
+ qname = xmlDictLookup(ctxt->dict, qname, -1); /* intern the string */
+ name = xmlSplitQName3(qname, &len);
+ if (name == NULL) {
+ if (def == NULL) {
+ if (xmlStrEqual(node->name, BAD_CAST "element")) {
+ if (schema->flags & XML_SCHEMAS_QUALIF_ELEM)
+ *namespace = schema->targetNamespace;
+ } else if (xmlStrEqual(node->name, BAD_CAST "attribute")) {
+ if (schema->flags & XML_SCHEMAS_QUALIF_ATTR)
+ *namespace = schema->targetNamespace;
+ } else if ((xmlStrEqual(node->name, BAD_CAST "simpleType")) ||
+ (xmlStrEqual(node->name, BAD_CAST "complexType"))) {
+ *namespace = schema->targetNamespace;
+ }
+ } else {
+ *namespace = def;
+ }
+ return(qname);
+ }
+ name = xmlDictLookup(ctxt->dict, name, -1);
+ prefix = xmlDictLookup(ctxt->dict, qname, len);
+ if (def != NULL) {
+ xmlSchemaPErr(ctxt, node, XML_SCHEMAP_DEF_AND_PREFIX,
+ "%s: presence of both prefix %s and targetNamespace\n",
+ node->name, prefix);
+ }
+ ns = xmlSearchNs(node->doc, node, prefix);
+ if (ns == NULL) {
+ xmlSchemaPErr(ctxt, node, XML_SCHEMAP_PREFIX_UNDEFINED,
+ "%s: the QName prefix %s is undefined\n",
+ node->name, prefix);
+ return(name);
+ }
+ *namespace = xmlDictLookup(ctxt->dict, ns->href, -1);
+ return(name);
+}
+
+/************************************************************************
+ * *
+ * Parsing functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchemaGetElem:
+ * @schema: the schemas context
+ * @name: the element name
+ * @ns: the element namespace
+ * @level: how deep is the request
+ *
+ * Lookup a an element in the schemas or the accessible schemas
+ *
+ * Returns the element definition or NULL if not found.
+ */
+static xmlSchemaElementPtr
+xmlSchemaGetElem(xmlSchemaPtr schema, const xmlChar * name,
+ const xmlChar * namespace, int level)
+{
+ xmlSchemaElementPtr ret;
+ xmlSchemaImportPtr import = NULL;
+
+ if ((name == NULL) || (schema == NULL))
+ return (NULL);
+
+ if (namespace == NULL) {
+ ret = xmlHashLookup2(schema->elemDecl, name, namespace);
+ if ((ret != NULL) &&
+ ((level == 0) || (ret->flags & XML_SCHEMAS_ELEM_TOPLEVEL))) {
+ return (ret);
+ }
+ } 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);
+ }
+ } else {
+ ret = xmlHashLookup2(schema->elemDecl, name, namespace);
+ if ((ret != NULL) &&
+ ((level == 0) || (ret->flags & XML_SCHEMAS_ELEM_TOPLEVEL))) {
+ return (ret);
+ }
+ }
+ if (level > 0)
+ import = xmlHashLookup(schema->schemasImports, namespace);
+ if (import != NULL)
+ ret = xmlSchemaGetElem(import->schema, name, namespace, level + 1);
+#ifdef DEBUG
+ if (ret == NULL) {
+ if (namespace == NULL)
+ fprintf(stderr, "Unable to lookup type %s", name);
+ else
+ fprintf(stderr, "Unable to lookup type %s:%s", name,
+ namespace);
+ }
+#endif
+ return (ret);
+}
+
+/**
+ * xmlSchemaGetType:
+ * @schema: the schemas context
+ * @name: the type name
+ * @ns: the type namespace
+ *
+ * Lookup a type in the schemas or the predefined types
+ *
+ * Returns the group definition or NULL if not found.
+ */
+static xmlSchemaTypePtr
+xmlSchemaGetType(xmlSchemaPtr schema, const xmlChar * name,
+ const xmlChar * namespace)
+{
+ xmlSchemaTypePtr ret;
+ xmlSchemaImportPtr import;
+
+ if (name == NULL)
+ return (NULL);
+ if (schema != NULL) {
+ ret = xmlHashLookup2(schema->typeDecl, name, namespace);
+ if (ret != NULL)
+ return (ret);
+ }
+ ret = xmlSchemaGetPredefinedType(name, namespace);
+ if (ret != NULL)
+ return (ret);
+ import = xmlHashLookup(schema->schemasImports, namespace);
+ if (import != NULL)
+ ret = xmlSchemaGetType(import->schema, name, namespace);
+#ifdef DEBUG
+ if (ret == NULL) {
+ if (namespace == NULL)
+ fprintf(stderr, "Unable to lookup type %s", name);
+ else
+ fprintf(stderr, "Unable to lookup type %s:%s", name,
+ namespace);
+ }
+#endif
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Parsing functions *
+ * *
+ ************************************************************************/
+
+#define IS_BLANK_NODE(n) \
+ (((n)->type == XML_TEXT_NODE) && (xmlSchemaIsBlank((n)->content)))
+
+/**
+ * xmlSchemaIsBlank:
+ * @str: a string
+ *
+ * Check if a string is ignorable
+ *
+ * Returns 1 if the string is NULL or made of blanks chars, 0 otherwise
+ */
+static int
+xmlSchemaIsBlank(xmlChar * str)
+{
+ if (str == NULL)
+ return (1);
+ while (*str != 0) {
+ if (!(IS_BLANK_CH(*str)))
+ return (0);
+ str++;
+ }
+ return (1);
+}
+
+/**
+ * xmlSchemaAddNotation:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @name: the item name
+ *
+ * Add an XML schema Attrribute declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the new struture or NULL in case of error
+ */
+static xmlSchemaNotationPtr
+xmlSchemaAddNotation(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ const xmlChar * name)
+{
+ xmlSchemaNotationPtr ret = NULL;
+ int val;
+
+ if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
+ return (NULL);
+
+ if (schema->notaDecl == NULL)
+ schema->notaDecl = xmlHashCreate(10);
+ if (schema->notaDecl == NULL)
+ return (NULL);
+
+ ret = (xmlSchemaNotationPtr) xmlMalloc(sizeof(xmlSchemaNotation));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(ctxt, "add annotation", NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaNotation));
+ ret->name = xmlDictLookup(ctxt->dict, name, -1);
+ val = xmlHashAddEntry2(schema->notaDecl, name, schema->targetNamespace,
+ ret);
+ if (val != 0) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) ctxt->doc,
+ XML_SCHEMAP_REDEFINED_NOTATION,
+ "Notation %s already defined\n",
+ name, NULL);
+ xmlFree(ret);
+ return (NULL);
+ }
+ return (ret);
+}
+
+
+/**
+ * xmlSchemaAddAttribute:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @name: the item name
+ * @namespace: the namespace
+ *
+ * Add an XML schema Attrribute declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the new struture or NULL in case of error
+ */
+static xmlSchemaAttributePtr
+xmlSchemaAddAttribute(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ const xmlChar * name, const xmlChar * namespace)
+{
+ xmlSchemaAttributePtr ret = NULL;
+ int val;
+
+ if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
+ return (NULL);
+
+#ifdef DEBUG
+ fprintf(stderr, "Adding attribute %s\n", name);
+ if (namespace != NULL)
+ fprintf(stderr, " target namespace %s\n", namespace);
+#endif
+
+ if (schema->attrDecl == NULL)
+ schema->attrDecl = xmlHashCreate(10);
+ if (schema->attrDecl == NULL)
+ return (NULL);
+
+ ret = (xmlSchemaAttributePtr) xmlMalloc(sizeof(xmlSchemaAttribute));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(ctxt, "allocating attribute", NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaAttribute));
+ ret->name = xmlDictLookup(ctxt->dict, name, -1);
+ ret->targetNamespace = xmlDictLookup(ctxt->dict, namespace, -1);
+ val = xmlHashAddEntry3(schema->attrDecl, name,
+ schema->targetNamespace, ctxt->container, ret);
+ if (val != 0) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) ctxt->doc,
+ XML_SCHEMAP_REDEFINED_ATTR,
+ "Attribute %s already defined\n",
+ name, NULL);
+ xmlFree(ret);
+ return (NULL);
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchemaAddAttributeGroup:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @name: the item name
+ *
+ * Add an XML schema Attrribute Group declaration
+ *
+ * Returns the new struture or NULL in case of error
+ */
+static xmlSchemaAttributeGroupPtr
+xmlSchemaAddAttributeGroup(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema, const xmlChar * name)
+{
+ xmlSchemaAttributeGroupPtr ret = NULL;
+ int val;
+
+ if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
+ return (NULL);
+
+ if (schema->attrgrpDecl == NULL)
+ schema->attrgrpDecl = xmlHashCreate(10);
+ if (schema->attrgrpDecl == NULL)
+ return (NULL);
+
+ ret =
+ (xmlSchemaAttributeGroupPtr)
+ xmlMalloc(sizeof(xmlSchemaAttributeGroup));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(ctxt, "allocating attribute group", NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaAttributeGroup));
+ ret->name = xmlDictLookup(ctxt->dict, name, -1);
+ val = xmlHashAddEntry3(schema->attrgrpDecl, name,
+ schema->targetNamespace, ctxt->container, ret);
+ if (val != 0) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) ctxt->doc,
+ XML_SCHEMAP_REDEFINED_ATTRGROUP,
+ "Attribute group %s already defined\n",
+ name, NULL);
+ xmlFree(ret);
+ return (NULL);
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchemaAddElement:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @name: the type name
+ * @namespace: the type namespace
+ *
+ * Add an XML schema Element declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the new struture or NULL in case of error
+ */
+static xmlSchemaElementPtr
+xmlSchemaAddElement(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ const xmlChar * name, const xmlChar * namespace)
+{
+ xmlSchemaElementPtr ret = NULL;
+ int val;
+
+ if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
+ return (NULL);
+
+#ifdef DEBUG
+ fprintf(stderr, "Adding element %s\n", name);
+ if (namespace != NULL)
+ fprintf(stderr, " target namespace %s\n", namespace);
+#endif
+
+ if (schema->elemDecl == NULL)
+ schema->elemDecl = xmlHashCreate(10);
+ if (schema->elemDecl == NULL)
+ return (NULL);
+
+ ret = (xmlSchemaElementPtr) xmlMalloc(sizeof(xmlSchemaElement));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(ctxt, "allocating element", NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaElement));
+ ret->name = xmlDictLookup(ctxt->dict, name, -1);
+ ret->targetNamespace = xmlDictLookup(ctxt->dict, namespace, -1);
+ val = xmlHashAddEntry3(schema->elemDecl, name,
+ namespace, ctxt->container, ret);
+ if (val != 0) {
+ char buf[100];
+
+ snprintf(buf, 99, "privatieelem %d", ctxt->counter++ + 1);
+ val = xmlHashAddEntry3(schema->elemDecl, name, (xmlChar *) buf,
+ namespace, ret);
+ if (val != 0) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) ctxt->doc,
+ XML_SCHEMAP_REDEFINED_ELEMENT,
+ "Element %s already defined\n",
+ name, NULL);
+ xmlFree(ret);
+ return (NULL);
+ }
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchemaAddType:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @name: the item name
+ * @namespace: the namespace
+ *
+ * Add an XML schema Simple Type definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the new struture or NULL in case of error
+ */
+static xmlSchemaTypePtr
+xmlSchemaAddType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ const xmlChar * name, const xmlChar * namespace)
+{
+ xmlSchemaTypePtr ret = NULL;
+ int val;
+
+ 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 = xmlHashCreate(10);
+ if (schema->typeDecl == NULL)
+ return (NULL);
+
+ ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(ctxt, "allocating type", NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaType));
+ ret->name = xmlDictLookup(ctxt->dict, name, -1);
+ ret->redef = NULL;
+ val = xmlHashAddEntry2(schema->typeDecl, name, namespace, ret);
+ if (val != 0) {
+ if (ctxt->includes == 0) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) ctxt->doc,
+ XML_SCHEMAP_REDEFINED_TYPE,
+ "Type %s already defined\n",
+ name, NULL);
+ xmlFree(ret);
+ return (NULL);
+ } else {
+ xmlSchemaTypePtr prev;
+
+ prev = xmlHashLookup2(schema->typeDecl, name, namespace);
+ if (prev == NULL) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) ctxt->doc,
+ XML_ERR_INTERNAL_ERROR,
+ "Internal error on type %s definition\n",
+ name, NULL);
+ xmlFree(ret);
+ return (NULL);
+ }
+ ret->redef = prev->redef;
+ prev->redef = ret;
+ }
+ }
+ ret->minOccurs = 1;
+ ret->maxOccurs = 1;
+
+ return (ret);
+}
+
+/**
+ * xmlSchemaAddGroup:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @name: the group name
+ *
+ * Add an XML schema Group definition
+ *
+ * Returns the new struture or NULL in case of error
+ */
+static xmlSchemaTypePtr
+xmlSchemaAddGroup(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ const xmlChar * name)
+{
+ xmlSchemaTypePtr ret = NULL;
+ int val;
+
+ if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
+ return (NULL);
+
+ if (schema->groupDecl == NULL)
+ schema->groupDecl = xmlHashCreate(10);
+ if (schema->groupDecl == NULL)
+ return (NULL);
+
+ ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(ctxt, "adding group", NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaType));
+ ret->name = xmlDictLookup(ctxt->dict, name, -1);
+ val =
+ xmlHashAddEntry2(schema->groupDecl, name, schema->targetNamespace,
+ ret);
+ if (val != 0) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) ctxt->doc,
+ XML_SCHEMAP_REDEFINED_GROUP,
+ "Group %s already defined\n",
+ name, NULL);
+ xmlFree(ret);
+ return (NULL);
+ }
+ ret->minOccurs = 1;
+ ret->maxOccurs = 1;
+
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Utilities for parsing *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlGetQNameProp:
+ * @ctxt: a schema validation context
+ * @node: a subtree containing XML Schema informations
+ * @name: the attribute name
+ * @namespace: the result namespace if any
+ *
+ * Extract a QName Attribute value
+ *
+ * Returns the NCName or NULL if not found, and also update @namespace
+ * with the namespace URI
+ */
+static const xmlChar *
+xmlGetQNameProp(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
+ const char *name, const xmlChar ** namespace)
+{
+ const xmlChar *val;
+ xmlNsPtr ns;
+ const xmlChar *ret, *prefix;
+ int len;
+
+ *namespace = NULL;
+ val = xmlSchemaGetProp(ctxt, node, name);
+ if (val == NULL)
+ return (NULL);
+
+ if (!strchr(val, ':')) {
+ ns = xmlSearchNs(node->doc, node, 0);
+ if (ns) {
+ *namespace = xmlDictLookup(ctxt->dict, ns->href, -1);
+ return (val);
+ }
+ }
+ ret = xmlSplitQName3(val, &len);
+ if (ret == NULL) {
+ return (val);
+ }
+ ret = xmlDictLookup(ctxt->dict, ret, -1);
+ prefix = xmlDictLookup(ctxt->dict, val, len);
+
+ ns = xmlSearchNs(node->doc, node, prefix);
+ if (ns == NULL) {
+ xmlSchemaPErr(ctxt, node, XML_SCHEMAP_PREFIX_UNDEFINED,
+ "Attribute %s: the QName prefix %s is undefined\n",
+ (const xmlChar *) name, prefix);
+ } else {
+ *namespace = xmlDictLookup(ctxt->dict, ns->href, -1);
+ }
+ return (ret);
+}
+
+/**
+ * xmlGetMaxOccurs:
+ * @ctxt: a schema validation context
+ * @node: a subtree containing XML Schema informations
+ *
+ * Get the maxOccurs property
+ *
+ * Returns the default if not found, or the value
+ */
+static int
+xmlGetMaxOccurs(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ const xmlChar *val, *cur;
+ int ret = 0;
+
+ val = xmlSchemaGetProp(ctxt, node, "maxOccurs");
+ if (val == NULL)
+ return (1);
+
+ if (xmlStrEqual(val, (const xmlChar *) "unbounded")) {
+ return (UNBOUNDED); /* encoding it with -1 might be another option */
+ }
+
+ cur = val;
+ while (IS_BLANK_CH(*cur))
+ cur++;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ ret = ret * 10 + (*cur - '0');
+ cur++;
+ }
+ while (IS_BLANK_CH(*cur))
+ cur++;
+ if (*cur != 0) {
+ xmlSchemaPErr(ctxt, node, XML_SCHEMAP_INVALID_MAXOCCURS,
+ "invalid value for maxOccurs: %s\n", val, NULL);
+ return (1);
+ }
+ return (ret);
+}
+
+/**
+ * xmlGetMinOccurs:
+ * @ctxt: a schema validation context
+ * @node: a subtree containing XML Schema informations
+ *
+ * Get the minOccurs property
+ *
+ * Returns the default if not found, or the value
+ */
+static int
+xmlGetMinOccurs(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ const xmlChar *val, *cur;
+ int ret = 0;
+
+ val = xmlSchemaGetProp(ctxt, node, "minOccurs");
+ if (val == NULL)
+ return (1);
+
+ cur = val;
+ while (IS_BLANK_CH(*cur))
+ cur++;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ ret = ret * 10 + (*cur - '0');
+ cur++;
+ }
+ while (IS_BLANK_CH(*cur))
+ cur++;
+ if (*cur != 0) {
+ xmlSchemaPErr(ctxt, node, XML_SCHEMAP_INVALID_MINOCCURS,
+ "invalid value for minOccurs: %s\n", val, NULL);
+ return (1);
+ }
+ return (ret);
+}
+
+/**
+ * xmlGetBooleanProp:
+ * @ctxt: a schema validation context
+ * @node: a subtree containing XML Schema informations
+ * @name: the attribute name
+ * @def: the default value
+ *
+ * Get is a bolean property is set
+ *
+ * Returns the default if not found, 0 if found to be false,
+ * 1 if found to be true
+ */
+static int
+xmlGetBooleanProp(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
+ const char *name, int def)
+{
+ const xmlChar *val;
+
+ val = xmlSchemaGetProp(ctxt, node, name);
+ if (val == NULL)
+ return (def);
+
+ if (xmlStrEqual(val, BAD_CAST "true"))
+ def = 1;
+ else if (xmlStrEqual(val, BAD_CAST "false"))
+ def = 0;
+ else {
+ xmlSchemaPErr(ctxt, node, XML_SCHEMAP_INVALID_BOOLEAN,
+ "Attribute %s: the value %s is not boolean\n",
+ (const xmlChar *) name, val);
+ }
+ return (def);
+}
+
+/************************************************************************
+ * *
+ * Shema extraction from an Infoset *
+ * *
+ ************************************************************************/
+static xmlSchemaTypePtr xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr
+ ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node);
+static xmlSchemaTypePtr xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr
+ ctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node);
+static xmlSchemaTypePtr xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr
+ ctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node,
+ int simple);
+static xmlSchemaTypePtr xmlSchemaParseSequence(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node);
+static xmlSchemaTypePtr xmlSchemaParseAll(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node);
+static xmlSchemaAttributePtr xmlSchemaParseAttribute(xmlSchemaParserCtxtPtr
+ ctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node);
+static xmlSchemaAttributeGroupPtr
+xmlSchemaParseAttributeGroup(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema, xmlNodePtr node);
+static xmlSchemaTypePtr xmlSchemaParseChoice(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node);
+static xmlSchemaTypePtr xmlSchemaParseList(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node);
+static xmlSchemaAttributePtr
+xmlSchemaParseAnyAttribute(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema, xmlNodePtr node);
+
+/**
+ * xmlSchemaParseAttrDecls:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ * @type: the hosting type
+ *
+ * parse a XML schema attrDecls declaration corresponding to
+ * <!ENTITY % attrDecls
+ * '((%attribute;| %attributeGroup;)*,(%anyAttribute;)?)'>
+ */
+static xmlNodePtr
+xmlSchemaParseAttrDecls(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr child, xmlSchemaTypePtr type)
+{
+ xmlSchemaAttributePtr lastattr, attr;
+
+ lastattr = NULL;
+ while ((IS_SCHEMA(child, "attribute")) ||
+ (IS_SCHEMA(child, "attributeGroup"))) {
+ attr = NULL;
+ if (IS_SCHEMA(child, "attribute")) {
+ attr = xmlSchemaParseAttribute(ctxt, schema, child);
+ } else if (IS_SCHEMA(child, "attributeGroup")) {
+ attr = (xmlSchemaAttributePtr)
+ xmlSchemaParseAttributeGroup(ctxt, schema, child);
+ }
+ if (attr != NULL) {
+ if (lastattr == NULL) {
+ type->attributes = attr;
+ lastattr = attr;
+ } else {
+ lastattr->next = attr;
+ lastattr = attr;
+ }
+ }
+ child = child->next;
+ }
+ if (IS_SCHEMA(child, "anyAttribute")) {
+ attr = xmlSchemaParseAnyAttribute(ctxt, schema, child);
+ if (attr != NULL) {
+ if (lastattr == NULL) {
+ type->attributes = attr;
+ lastattr = attr;
+ } else {
+ lastattr->next = attr;
+ lastattr = attr;
+ }
+ }
+ child = child->next;
+ }
+ return (child);
+}
+
+/**
+ * xmlSchemaParseAnnotation:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Attrribute declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaAnnotPtr
+xmlSchemaParseAnnotation(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaAnnotPtr ret;
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+ ret = xmlSchemaNewAnnot(ctxt, node);
+
+ return (ret);
+}
+
+/**
+ * xmlSchemaParseFacet:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Facet declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the new type structure or NULL in case of error
+ */
+static xmlSchemaFacetPtr
+xmlSchemaParseFacet(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaFacetPtr facet;
+ xmlNodePtr child = NULL;
+ const xmlChar *value;
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+ facet = xmlSchemaNewFacet();
+ if (facet == NULL) {
+ xmlSchemaPErrMemory(ctxt, "allocating facet", node);
+ return (NULL);
+ }
+ facet->node = node;
+ value = xmlSchemaGetProp(ctxt, node, "value");
+ if (value == NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_FACET_NO_VALUE,
+ "Facet %s has no value\n", node->name, NULL);
+ xmlSchemaFreeFacet(facet);
+ return (NULL);
+ }
+ if (IS_SCHEMA(node, "minInclusive")) {
+ facet->type = XML_SCHEMA_FACET_MININCLUSIVE;
+ } else if (IS_SCHEMA(node, "minExclusive")) {
+ facet->type = XML_SCHEMA_FACET_MINEXCLUSIVE;
+ } else if (IS_SCHEMA(node, "maxInclusive")) {
+ facet->type = XML_SCHEMA_FACET_MAXINCLUSIVE;
+ } else if (IS_SCHEMA(node, "maxExclusive")) {
+ facet->type = XML_SCHEMA_FACET_MAXEXCLUSIVE;
+ } else if (IS_SCHEMA(node, "totalDigits")) {
+ facet->type = XML_SCHEMA_FACET_TOTALDIGITS;
+ } else if (IS_SCHEMA(node, "fractionDigits")) {
+ facet->type = XML_SCHEMA_FACET_FRACTIONDIGITS;
+ } else if (IS_SCHEMA(node, "pattern")) {
+ facet->type = XML_SCHEMA_FACET_PATTERN;
+ } else if (IS_SCHEMA(node, "enumeration")) {
+ facet->type = XML_SCHEMA_FACET_ENUMERATION;
+ } else if (IS_SCHEMA(node, "whiteSpace")) {
+ facet->type = XML_SCHEMA_FACET_WHITESPACE;
+ } else if (IS_SCHEMA(node, "length")) {
+ facet->type = XML_SCHEMA_FACET_LENGTH;
+ } else if (IS_SCHEMA(node, "maxLength")) {
+ facet->type = XML_SCHEMA_FACET_MAXLENGTH;
+ } else if (IS_SCHEMA(node, "minLength")) {
+ facet->type = XML_SCHEMA_FACET_MINLENGTH;
+ } else {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_FACET_TYPE,
+ "Unknown facet type %s\n", node->name, NULL);
+ xmlSchemaFreeFacet(facet);
+ return (NULL);
+ }
+ facet->id = xmlSchemaGetProp(ctxt, node, "id");
+ facet->value = value;
+ child = node->children;
+
+ if (IS_SCHEMA(child, "annotation")) {
+ facet->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_FACET_CHILD,
+ "Facet %s has unexpected child content\n",
+ node->name, NULL);
+ }
+ return (facet);
+}
+
+/**
+ * xmlSchemaParseAny:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Any declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the new type structure or NULL in case of error
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseAny(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+ snprintf((char *) name, 30, "any %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_ANY;
+ child = node->children;
+ type->minOccurs = xmlGetMinOccurs(ctxt, node);
+ type->maxOccurs = xmlGetMaxOccurs(ctxt, node);
+
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD,
+ "Sequence %s has unexpected content\n", type->name,
+ NULL);
+ }
+
+ return (type);
+}
+
+/**
+ * xmlSchemaParseNotation:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Notation declaration
+ *
+ * Returns the new structure or NULL in case of error
+ */
+static xmlSchemaNotationPtr
+xmlSchemaParseNotation(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ const xmlChar *name;
+ xmlSchemaNotationPtr ret;
+ xmlNodePtr child = NULL;
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+ name = xmlSchemaGetProp(ctxt, node, "name");
+ if (name == NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_NOTATION_NO_NAME,
+ "Notation has no name\n", NULL, NULL);
+ return (NULL);
+ }
+ ret = xmlSchemaAddNotation(ctxt, schema, name);
+ if (ret == NULL) {
+ return (NULL);
+ }
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ ret->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_NOTATION_CHILD,
+ "notation %s has unexpected content\n", name, NULL);
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlSchemaParseAnyAttribute:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema AnyAttrribute declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns an attribute def structure or NULL
+ */
+static xmlSchemaAttributePtr
+xmlSchemaParseAnyAttribute(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema, xmlNodePtr node)
+{
+ const xmlChar *processContents;
+ xmlSchemaAttributePtr ret;
+ xmlNodePtr child = NULL;
+ char name[100];
+ const xmlChar *local, *ns;
+
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+ snprintf(name, 99, "anyattr %d", ctxt->counter++ + 1);
+ local = xmlSchemaGetNamespace(ctxt, schema, node, BAD_CAST "anyattr", &ns);
+ ret = xmlSchemaAddAttribute(ctxt, schema, BAD_CAST name, ns);
+ if (ret == NULL) {
+ return (NULL);
+ }
+ ret->id = xmlSchemaGetProp(ctxt, node, "id");
+ processContents = xmlSchemaGetProp(ctxt, node, "processContents");
+ if ((processContents == NULL)
+ || (xmlStrEqual(processContents, (const xmlChar *) "strict"))) {
+ ret->occurs = XML_SCHEMAS_ANYATTR_STRICT;
+ } else if (xmlStrEqual(processContents, (const xmlChar *) "skip")) {
+ ret->occurs = XML_SCHEMAS_ANYATTR_SKIP;
+ } else if (xmlStrEqual(processContents, (const xmlChar *) "lax")) {
+ ret->occurs = XML_SCHEMAS_ANYATTR_LAX;
+ } else {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD,
+ "anyAttribute has unexpected content for processContents: %s\n",
+ processContents, NULL);
+ ret->occurs = XML_SCHEMAS_ANYATTR_STRICT;
+ }
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ ret->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD,
+ "anyAttribute %s has unexpected content\n",
+ (const xmlChar *) name, NULL);
+ }
+
+ return (ret);
+}
+
+
+/**
+ * xmlSchemaParseAttribute:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Attrribute declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaAttributePtr
+xmlSchemaParseAttribute(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ const xmlChar *name, *refNs = NULL, *ref = NULL;
+ xmlSchemaAttributePtr ret;
+ xmlNodePtr child = NULL;
+ char buf[100];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+ name = xmlSchemaGetProp(ctxt, node, "name");
+ if (name == NULL) {
+
+ ref = xmlGetQNameProp(ctxt, node, "ref", &refNs);
+ if (ref == NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_ATTR_NONAME_NOREF,
+ "Attribute has no name nor ref\n", NULL, NULL);
+ return (NULL);
+ }
+ snprintf(buf, 99, "anonattr %d", ctxt->counter++ + 1);
+ name = (const xmlChar *) buf;
+ ret = xmlSchemaAddAttribute(ctxt, schema, name, NULL);
+ } else {
+ const xmlChar *local, *ns;
+
+ local = xmlSchemaGetNamespace(ctxt, schema, node, name, &ns);
+ ret = xmlSchemaAddAttribute(ctxt, schema, local, ns);
+ }
+ if (ret == NULL) {
+ return (NULL);
+ }
+ ret->ref = ref;
+ ret->refNs = refNs;
+ if ((ret->targetNamespace != NULL) &&
+ ((schema->flags & XML_SCHEMAS_QUALIF_ATTR) == 0) &&
+ (xmlStrEqual(ret->targetNamespace, schema->targetNamespace)))
+ ret->flags |= XML_SCHEMAS_ATTR_NSDEFAULT;
+ ret->typeName = xmlGetQNameProp(ctxt, node, "type", &(ret->typeNs));
+ ret->node = node;
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ ret->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ if (IS_SCHEMA(child, "simpleType")) {
+ ret->subtypes = xmlSchemaParseSimpleType(ctxt, schema, child);
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_ATTR_CHILD,
+ "attribute %s has unexpected content\n", name,
+ NULL);
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlSchemaParseAttributeGroup:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Attribute Group declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the attribute group or NULL in case of error.
+ */
+static xmlSchemaAttributeGroupPtr
+xmlSchemaParseAttributeGroup(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema, xmlNodePtr node)
+{
+ const xmlChar *name, *refNs = NULL, *ref = NULL;
+ xmlSchemaAttributeGroupPtr ret;
+ xmlSchemaAttributePtr last = NULL, attr;
+ xmlNodePtr child = NULL;
+ const xmlChar *oldcontainer;
+ char buf[100];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+ oldcontainer = ctxt->container;
+ name = xmlSchemaGetProp(ctxt, node, "name");
+ if (name == NULL) {
+
+ ref = xmlGetQNameProp(ctxt, node, "ref", &refNs);
+ if (ref == NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_ATTRGRP_NONAME_NOREF,
+ "AttributeGroup has no name nor ref\n", NULL,
+ NULL);
+ return (NULL);
+ }
+ snprintf(buf, 99, "anonattrgroup %d", ctxt->counter++ + 1);
+ name = (const xmlChar *) buf;
+ if (name == NULL) {
+ xmlSchemaPErrMemory(ctxt, "creating attribute group", node);
+ return (NULL);
+ }
+ }
+ ret = xmlSchemaAddAttributeGroup(ctxt, schema, name);
+ if (ret == NULL) {
+ return (NULL);
+ }
+ ret->ref = ref;
+ ret->refNs = refNs;
+ ret->type = XML_SCHEMA_TYPE_ATTRIBUTEGROUP;
+ ret->node = node;
+ child = node->children;
+ ctxt->container = name;
+ if (IS_SCHEMA(child, "annotation")) {
+ ret->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ while ((IS_SCHEMA(child, "attribute")) ||
+ (IS_SCHEMA(child, "attributeGroup"))) {
+ attr = NULL;
+ if (IS_SCHEMA(child, "attribute")) {
+ attr = xmlSchemaParseAttribute(ctxt, schema, child);
+ } else if (IS_SCHEMA(child, "attributeGroup")) {
+ attr = (xmlSchemaAttributePtr)
+ xmlSchemaParseAttributeGroup(ctxt, schema, child);
+ }
+ if (attr != NULL) {
+ if (last == NULL) {
+ ret->attributes = attr;
+ last = attr;
+ } else {
+ last->next = attr;
+ last = attr;
+ }
+ }
+ child = child->next;
+ }
+ if (IS_SCHEMA(child, "anyAttribute")) {
+ TODO
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD,
+ "attribute group %s has unexpected content\n", name,
+ NULL);
+ }
+ ctxt->container = oldcontainer;
+ return (ret);
+}
+
+/**
+ * xmlSchemaParseElement:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Element declaration
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaElementPtr
+xmlSchemaParseElement(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node, int toplevel)
+{
+ const xmlChar *name, *fixed;
+ const xmlChar *refNs = NULL, *ref = NULL;
+ xmlSchemaElementPtr ret;
+ xmlNodePtr child = NULL;
+ const xmlChar *oldcontainer;
+ char buf[100];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+ oldcontainer = ctxt->container;
+ name = xmlSchemaGetProp(ctxt, node, "name");
+ if (name == NULL) {
+
+ ref = xmlGetQNameProp(ctxt, node, "ref", &refNs);
+ if (ref == NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_ELEM_NONAME_NOREF,
+ "Element has no name nor ref\n", NULL, NULL);
+ return (NULL);
+ }
+ snprintf(buf, 99, "anonelem %d", ctxt->counter++ + 1);
+ name = (const xmlChar *) buf;
+ ret = xmlSchemaAddElement(ctxt, schema, name, NULL);
+ } else {
+ const xmlChar *local, *ns;
+
+ local = xmlSchemaGetNamespace(ctxt, schema, node, name, &ns);
+ ret = xmlSchemaAddElement(ctxt, schema, local, ns);
+ }
+ if (ret != NULL)
+ ret->node = node;
+ if (ret == NULL) {
+ return (NULL);
+ }
+ ret->type = XML_SCHEMA_TYPE_ELEMENT;
+ ret->ref = ref;
+ ret->refNs = refNs;
+ if (ref != NULL)
+ ret->flags |= XML_SCHEMAS_ELEM_REF;
+ if (toplevel)
+ ret->flags |= XML_SCHEMAS_ELEM_TOPLEVEL;
+ if (xmlGetBooleanProp(ctxt, node, "nillable", 0))
+ ret->flags |= XML_SCHEMAS_ELEM_NILLABLE;
+ if (xmlGetBooleanProp(ctxt, node, "abstract", 0))
+ ret->flags |= XML_SCHEMAS_ELEM_NILLABLE;
+ ctxt->container = name;
+
+ ret->id = xmlSchemaGetProp(ctxt, node, "id");
+ ret->namedType =
+ xmlGetQNameProp(ctxt, node, "type", &(ret->namedTypeNs));
+ ret->substGroup =
+ xmlGetQNameProp(ctxt, node, "substitutionGroup",
+ &(ret->substGroupNs));
+ fixed = xmlSchemaGetProp(ctxt, node, "fixed");
+ ret->minOccurs = xmlGetMinOccurs(ctxt, node);
+ ret->maxOccurs = xmlGetMaxOccurs(ctxt, node);
+
+ ret->value = xmlSchemaGetProp(ctxt, node, "default");
+ if ((ret->value != NULL) && (fixed != NULL)) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_ELEM_DEFAULT_FIXED,
+ "Element %s has both default and fixed\n",
+ ret->name, NULL);
+ } else if (fixed != NULL) {
+ ret->flags |= XML_SCHEMAS_ELEM_FIXED;
+ ret->value = fixed;
+ }
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ ret->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ if (IS_SCHEMA(child, "complexType")) {
+ ret->subtypes = xmlSchemaParseComplexType(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "simpleType")) {
+ ret->subtypes = xmlSchemaParseSimpleType(ctxt, schema, child);
+ child = child->next;
+ }
+ while ((IS_SCHEMA(child, "unique")) ||
+ (IS_SCHEMA(child, "key")) || (IS_SCHEMA(child, "keyref"))) {
+ TODO child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_ELEM_CHILD,
+ "element %s has unexpected content\n", name, NULL);
+ }
+
+ ctxt->container = oldcontainer;
+ return (ret);
+}
+
+/**
+ * xmlSchemaParseUnion:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Union definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseUnion(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype, last = NULL;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+
+ snprintf((char *) name, 30, "union %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_LIST;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+ type->ref = xmlSchemaGetProp(ctxt, node, "memberTypes");
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ while (IS_SCHEMA(child, "simpleType")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseSimpleType(ctxt, schema, child);
+ if (subtype != NULL) {
+ if (last == NULL) {
+ type->subtypes = subtype;
+ last = subtype;
+ } else {
+ last->next = subtype;
+ last = subtype;
+ }
+ last->next = NULL;
+ }
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_UNION_CHILD,
+ "Union %s has unexpected content\n", type->name,
+ NULL);
+ }
+ return (type);
+}
+
+/**
+ * xmlSchemaParseList:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema List definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseList(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+ snprintf((char *) name, 30, "list %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_LIST;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+ type->ref = xmlGetQNameProp(ctxt, node, "ref", &(type->refNs));
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ subtype = NULL;
+ if (IS_SCHEMA(child, "simpleType")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseSimpleType(ctxt, schema, child);
+ child = child->next;
+ type->subtypes = subtype;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_LIST_CHILD,
+ "List %s has unexpected content\n", type->name,
+ NULL);
+ }
+ return (type);
+}
+
+/**
+ * xmlSchemaParseSimpleType:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Simple Type definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype;
+ xmlNodePtr child = NULL;
+ const xmlChar *name;
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+
+ name = xmlSchemaGetProp(ctxt, node, "name");
+ if (name == NULL) {
+ char buf[100];
+
+ snprintf(buf, 99, "simpletype %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, (const xmlChar *)buf, NULL);
+ } else {
+ const xmlChar *local, *ns;
+
+ local = xmlSchemaGetNamespace(ctxt, schema, node, name, &ns);
+ type = xmlSchemaAddType(ctxt, schema, local, ns);
+ }
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_SIMPLE;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ subtype = NULL;
+ if (IS_SCHEMA(child, "restriction")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseRestriction(ctxt, schema, child, 1);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "list")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseList(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "union")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseUnion(ctxt, schema, child);
+ child = child->next;
+ }
+ type->subtypes = subtype;
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD,
+ "SimpleType %s has unexpected content\n",
+ type->name, NULL);
+ }
+
+ return (type);
+}
+
+
+/**
+ * xmlSchemaParseGroup:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Group definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseGroup(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype;
+ xmlNodePtr child = NULL;
+ const xmlChar *name;
+ const xmlChar *ref = NULL, *refNs = NULL;
+ char buf[100];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+
+ name = xmlSchemaGetProp(ctxt, node, "name");
+ if (name == NULL) {
+
+ ref = xmlGetQNameProp(ctxt, node, "ref", &refNs);
+ if (ref == NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_GROUP_NONAME_NOREF,
+ "Group has no name nor ref\n", NULL, NULL);
+ return (NULL);
+ }
+ if (refNs == NULL)
+ refNs = schema->targetNamespace;
+ snprintf(buf, 99, "anongroup %d", ctxt->counter++ + 1);
+ name = (const xmlChar *) buf;
+ }
+ type = xmlSchemaAddGroup(ctxt, schema, name);
+ if (type == NULL)
+ return (NULL);
+
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_GROUP;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+ type->ref = ref;
+ type->refNs = refNs;
+ type->minOccurs = xmlGetMinOccurs(ctxt, node);
+ type->maxOccurs = xmlGetMaxOccurs(ctxt, node);
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ subtype = NULL;
+ if (IS_SCHEMA(child, "all")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseAll(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "choice")) {
+ subtype = xmlSchemaParseChoice(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "sequence")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseSequence(ctxt, schema, child);
+ child = child->next;
+ }
+ if (subtype != NULL)
+ type->subtypes = subtype;
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_GROUP_CHILD,
+ "Group %s has unexpected content\n", type->name,
+ NULL);
+ }
+
+ return (type);
+}
+
+/**
+ * xmlSchemaParseAll:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema All definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseAll(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype, last = NULL;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+
+ snprintf((char *) name, 30, "all%d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_ALL;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+ type->minOccurs = xmlGetMinOccurs(ctxt, node);
+ if (type->minOccurs > 1)
+ xmlSchemaPErr(ctxt, node, XML_SCHEMAP_INVALID_MINOCCURS,
+ "invalid value for minOccurs (must be 0 or 1)\n", NULL, NULL);
+ type->maxOccurs = xmlGetMaxOccurs(ctxt, node);
+ if (type->maxOccurs > 1)
+ xmlSchemaPErr(ctxt, node, XML_SCHEMAP_INVALID_MAXOCCURS,
+ "invalid value for maxOccurs (must be 0 or 1)\n", NULL, NULL);
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ while (IS_SCHEMA(child, "element")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseElement(ctxt, schema, child, 0);
+ if (subtype != NULL) {
+ if (subtype->minOccurs > 1)
+ xmlSchemaPErr(ctxt, child, XML_SCHEMAP_INVALID_MINOCCURS,
+ "invalid value for minOccurs (must be 0 or 1)\n",
+ NULL, NULL);
+ if (subtype->maxOccurs > 1)
+ xmlSchemaPErr(ctxt, child, XML_SCHEMAP_INVALID_MAXOCCURS,
+ "invalid value for maxOccurs (must be 0 or 1)\n",
+ NULL, NULL);
+ if (last == NULL) {
+ type->subtypes = subtype;
+ last = subtype;
+ } else {
+ last->next = subtype;
+ last = subtype;
+ }
+ last->next = NULL;
+ }
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_ALL_CHILD,
+ "All %s has unexpected content\n", type->name,
+ NULL);
+ }
+
+ return (type);
+}
+
+/**
+ * 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.
+ */
+static xmlSchemaImportPtr
+xmlSchemaImportSchema(xmlSchemaParserCtxtPtr ctxt,
+ const xmlChar *schemaLocation)
+{
+ xmlSchemaImportPtr import;
+ xmlSchemaParserCtxtPtr newctxt;
+
+ newctxt = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
+ if (newctxt == NULL) {
+ xmlSchemaPErrMemory(ctxt, "allocating schama 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_SCHEMAS_ERR_INTERNAL,
+ "failed to import schema at location %s\n",
+ schemaLocation, NULL);
+
+ xmlSchemaFreeParserCtxt(newctxt);
+ if (import->schemaLocation != NULL)
+ xmlFree((xmlChar *)import->schemaLocation);
+ xmlFree(import);
+ return NULL;
+ }
+
+ xmlSchemaFreeParserCtxt(newctxt);
+ return import;
+}
+
+
+/**
+ * xmlSchemaParseImport:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Import definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static int
+xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlNodePtr child = NULL;
+ xmlSchemaImportPtr import = NULL;
+ const xmlChar *namespace;
+ const xmlChar *schemaLocation;
+ const xmlChar *previous;
+ xmlURIPtr check;
+
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (-1);
+
+ namespace = xmlSchemaGetProp(ctxt, node, "namespace");
+ if (namespace != NULL) {
+ check = xmlParseURI((const char *) namespace);
+ if (check == NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI,
+ "Import namespace attribute is not an URI: %s\n",
+ namespace, NULL);
+ return (-1);
+ } else {
+ xmlFreeURI(check);
+ }
+ }
+ schemaLocation = xmlSchemaGetProp(ctxt, node, "schemaLocation");
+ if (schemaLocation != NULL) {
+ xmlChar *base = NULL;
+ xmlChar *URI = NULL;
+ check = xmlParseURI((const char *) schemaLocation);
+ if (check == NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI,
+ "Import schemaLocation attribute is not an URI: %s\n",
+ schemaLocation, NULL);
+ return (-1);
+ } else {
+ xmlFreeURI(check);
+ }
+ base = xmlNodeGetBase(node->doc, node);
+ if (base == NULL) {
+ URI = xmlBuildURI(schemaLocation, node->doc->URL);
+ } else {
+ URI = xmlBuildURI(schemaLocation, base);
+ xmlFree(base);
+ }
+ if (URI != NULL) {
+ schemaLocation = xmlDictLookup(ctxt->dict, URI, -1);
+ xmlFree(URI);
+ }
+ }
+ if (schema->schemasImports == NULL) {
+ schema->schemasImports = xmlHashCreate(10);
+ if (schema->schemasImports == NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_FAILED_BUILD_IMPORT,
+ "Internal: failed to build import table\n",
+ NULL, NULL);
+ return (-1);
+ }
+ }
+ if (namespace == NULL) {
+ import = xmlHashLookup(schema->schemasImports,
+ XML_SCHEMAS_DEFAULT_NAMESPACE);
+ if (import != NULL)
+ previous = import->schemaLocation;
+ else
+ previous = NULL;
+
+ if (schemaLocation != NULL) {
+ if (previous != NULL) {
+ if (!xmlStrEqual(schemaLocation, previous)) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_IMPORT_REDEFINE_NSNAME,
+ "Redefining import for default namespace with a different URI: %s\n",
+ schemaLocation, NULL);
+ }
+ } else {
+ import = xmlSchemaImportSchema(ctxt, schemaLocation);
+ if (import == NULL) {
+ return (-1);
+ }
+ xmlHashAddEntry(schema->schemasImports,
+ XML_SCHEMAS_DEFAULT_NAMESPACE,
+ import);
+ }
+ }
+ } else {
+ import = xmlHashLookup(schema->schemasImports, namespace);
+ if (import != NULL)
+ previous = import->schemaLocation;
+ else
+ previous = NULL;
+
+ if (schemaLocation != NULL) {
+ if (previous != NULL) {
+ if (!xmlStrEqual(schemaLocation, previous)) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_IMPORT_REDEFINE_NSNAME,
+ "Redefining import for namespace %s with a different URI: %s\n",
+ namespace, schemaLocation);
+ }
+ } else {
+ import = xmlSchemaImportSchema(ctxt, schemaLocation);
+ if (import == NULL) {
+ return (-1);
+ }
+ xmlHashAddEntry(schema->schemasImports,
+ namespace, import);
+ }
+ }
+ }
+
+ child = node->children;
+ while (IS_SCHEMA(child, "annotation")) {
+ /*
+ * the annotations here are simply discarded ...
+ */
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_IMPORT_CHILD,
+ "Import has unexpected content\n", NULL, NULL);
+ return (-1);
+ }
+ return (1);
+}
+
+/**
+ * xmlSchemaCleanupDoc:
+ * @ctxt: a schema validation context
+ * @node: the root of the document.
+ *
+ * removes unwanted nodes in a schemas document tree
+ */
+static void
+xmlSchemaCleanupDoc(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr root)
+{
+ xmlNodePtr delete, cur;
+
+ if ((ctxt == NULL) || (root == NULL)) return;
+
+ /*
+ * Remove all the blank text nodes
+ */
+ delete = NULL;
+ cur = root;
+ while (cur != NULL) {
+ if (delete != NULL) {
+ xmlUnlinkNode(delete);
+ xmlFreeNode(delete);
+ delete = NULL;
+ }
+ if (cur->type == XML_TEXT_NODE) {
+ if (IS_BLANK_NODE(cur)) {
+ if (xmlNodeGetSpacePreserve(cur) != 1) {
+ delete = cur;
+ }
+ }
+ } else if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->type != XML_CDATA_SECTION_NODE)) {
+ delete = cur;
+ goto skip_children;
+ }
+
+ /*
+ * Skip to next node
+ */
+ if (cur->children != NULL) {
+ if ((cur->children->type != XML_ENTITY_DECL) &&
+ (cur->children->type != XML_ENTITY_REF_NODE) &&
+ (cur->children->type != XML_ENTITY_NODE)) {
+ cur = cur->children;
+ continue;
+ }
+ }
+ skip_children:
+ if (cur->next != NULL) {
+ cur = cur->next;
+ continue;
+ }
+
+ do {
+ cur = cur->parent;
+ if (cur == NULL)
+ break;
+ if (cur == root) {
+ cur = NULL;
+ break;
+ }
+ if (cur->next != NULL) {
+ cur = cur->next;
+ break;
+ }
+ } while (cur != NULL);
+ }
+ if (delete != NULL) {
+ xmlUnlinkNode(delete);
+ xmlFreeNode(delete);
+ delete = NULL;
+ }
+}
+
+/**
+ * xmlSchemaParseSchemaTopLevel:
+ * @ctxt: a schema validation context
+ * @schema: the schemas
+ * @nodes: the list of top level nodes
+ *
+ * Returns the internal XML Schema structure built from the resource or
+ * NULL in case of error
+ */
+static void
+xmlSchemaParseSchemaTopLevel(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema, xmlNodePtr nodes)
+{
+ xmlNodePtr child;
+ xmlSchemaAnnotPtr annot;
+
+ if ((ctxt == NULL) || (schema == NULL) || (nodes == NULL))
+ return;
+
+ child = nodes;
+ while ((IS_SCHEMA(child, "include")) ||
+ (IS_SCHEMA(child, "import")) ||
+ (IS_SCHEMA(child, "redefine")) ||
+ (IS_SCHEMA(child, "annotation"))) {
+ if (IS_SCHEMA(child, "annotation")) {
+ annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ if (schema->annot == NULL)
+ schema->annot = annot;
+ else
+ xmlSchemaFreeAnnot(annot);
+ } else if (IS_SCHEMA(child, "import")) {
+ xmlSchemaParseImport(ctxt, schema, child);
+ } else if (IS_SCHEMA(child, "include")) {
+ ctxt->includes++;
+ xmlSchemaParseInclude(ctxt, schema, child);
+ ctxt->includes--;
+ } else if (IS_SCHEMA(child, "redefine")) {
+ TODO
+ }
+ child = child->next;
+ }
+ while (child != NULL) {
+ if (IS_SCHEMA(child, "complexType")) {
+ xmlSchemaParseComplexType(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "simpleType")) {
+ xmlSchemaParseSimpleType(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "element")) {
+ xmlSchemaParseElement(ctxt, schema, child, 1);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "attribute")) {
+ xmlSchemaParseAttribute(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "attributeGroup")) {
+ xmlSchemaParseAttributeGroup(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "group")) {
+ xmlSchemaParseGroup(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "notation")) {
+ xmlSchemaParseNotation(ctxt, schema, child);
+ child = child->next;
+ } else {
+ xmlSchemaPErr2(ctxt, NULL, child,
+ XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD,
+ "Schemas: unexpected element %s here \n",
+ child->name, NULL);
+ child = child->next;
+ }
+ while (IS_SCHEMA(child, "annotation")) {
+ annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ if (schema->annot == NULL)
+ schema->annot = annot;
+ else
+ xmlSchemaFreeAnnot(annot);
+ child = child->next;
+ }
+ }
+}
+
+/**
+ * xmlSchemaParseInclude:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Include definition
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static int
+xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlNodePtr child = NULL;
+ const xmlChar *schemaLocation;
+ xmlURIPtr check;
+ xmlDocPtr doc;
+ xmlNodePtr root;
+ xmlSchemaIncludePtr include;
+
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (-1);
+
+ /*
+ * Preliminary step, extract the URI-Reference for the include and
+ * make an URI from the base.
+ */
+ schemaLocation = xmlSchemaGetProp(ctxt, node, "schemaLocation");
+ if (schemaLocation != NULL) {
+ xmlChar *base = NULL;
+ xmlChar *URI = NULL;
+ check = xmlParseURI((const char *) schemaLocation);
+ if (check == NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI,
+ "Include schemaLocation attribute is not an URI: %s\n",
+ schemaLocation, NULL);
+ return (-1);
+ } else {
+ xmlFreeURI(check);
+ }
+ base = xmlNodeGetBase(node->doc, node);
+ if (base == NULL) {
+ URI = xmlBuildURI(schemaLocation, node->doc->URL);
+ } else {
+ URI = xmlBuildURI(schemaLocation, base);
+ xmlFree(base);
+ }
+ if (URI != NULL) {
+ schemaLocation = xmlDictLookup(ctxt->dict, URI, -1);
+ xmlFree(URI);
+ }
+ } else {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI,
+ "Include schemaLocation attribute missing\n",
+ NULL, NULL);
+ return (-1);
+ }
+
+ child = node->children;
+ while (IS_SCHEMA(child, "annotation")) {
+ /*
+ * the annotations here are simply discarded ...
+ */
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD,
+ "Include has unexpected content\n", NULL, NULL);
+ return (-1);
+ }
+
+ /*
+ * First step is to parse the input document into an DOM/Infoset
+ */
+ doc = xmlReadFile((const char *) schemaLocation, NULL,
+ SCHEMAS_PARSE_OPTIONS);
+ if (doc == NULL) {
+ xmlSchemaPErr(ctxt, NULL,
+ XML_SCHEMAP_FAILED_LOAD,
+ "xmlSchemaParse: could not load %s\n",
+ ctxt->URL, NULL);
+ return(-1);
+ }
+
+ /*
+ * Then extract the root of the schema
+ */
+ root = xmlDocGetRootElement(doc);
+ if (root == NULL) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) doc,
+ XML_SCHEMAP_NOROOT,
+ "schemas %s has no root", schemaLocation, NULL);
+ xmlFreeDoc(doc);
+ return (-1);
+ }
+
+ /*
+ * Remove all the blank text nodes
+ */
+ xmlSchemaCleanupDoc(ctxt, root);
+
+ /*
+ * Check the schemas top level element
+ */
+ if (!IS_SCHEMA(root, "schema")) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) doc,
+ XML_SCHEMAP_NOT_SCHEMA,
+ "File %s is not a schemas", schemaLocation, NULL);
+ xmlFreeDoc(doc);
+ return (-1);
+ }
+
+ /*
+ * register the include
+ */
+ include = (xmlSchemaIncludePtr) xmlMalloc(sizeof(xmlSchemaInclude));
+ if (include == NULL) {
+ xmlSchemaPErrMemory(ctxt, "allocating included schema", NULL);
+ xmlFreeDoc(doc);
+ return (-1);
+ }
+
+ memset(include, 0, sizeof(xmlSchemaInclude));
+ include->schemaLocation = xmlDictLookup(ctxt->dict, schemaLocation, -1);
+ include->doc = doc;
+ include->next = schema->includes;
+ schema->includes = include;
+
+
+ /*
+ * parse the declarations in the included file like if they
+ * were in the original file.
+ */
+ xmlSchemaParseSchemaTopLevel(ctxt, schema, root->children);
+
+ return (1);
+}
+
+/**
+ * xmlSchemaParseChoice:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Choice definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseChoice(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype, last = NULL;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+
+ snprintf((char *) name, 30, "choice %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_CHOICE;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+ type->minOccurs = xmlGetMinOccurs(ctxt, node);
+ type->maxOccurs = xmlGetMaxOccurs(ctxt, node);
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ while ((IS_SCHEMA(child, "element")) ||
+ (IS_SCHEMA(child, "group")) ||
+ (IS_SCHEMA(child, "any")) ||
+ (IS_SCHEMA(child, "choice")) ||
+ (IS_SCHEMA(child, "sequence"))) {
+ subtype = NULL;
+ if (IS_SCHEMA(child, "element")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseElement(ctxt, schema, child, 0);
+ } else if (IS_SCHEMA(child, "group")) {
+ subtype = xmlSchemaParseGroup(ctxt, schema, child);
+ } else if (IS_SCHEMA(child, "any")) {
+ subtype = xmlSchemaParseAny(ctxt, schema, child);
+ } else if (IS_SCHEMA(child, "sequence")) {
+ subtype = xmlSchemaParseSequence(ctxt, schema, child);
+ } else if (IS_SCHEMA(child, "choice")) {
+ subtype = xmlSchemaParseChoice(ctxt, schema, child);
+ }
+ if (subtype != NULL) {
+ if (last == NULL) {
+ type->subtypes = subtype;
+ last = subtype;
+ } else {
+ last->next = subtype;
+ last = subtype;
+ }
+ last->next = NULL;
+ }
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_CHOICE_CHILD,
+ "Choice %s has unexpected content\n", type->name,
+ NULL);
+ }
+
+ return (type);
+}
+
+/**
+ * xmlSchemaParseSequence:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Sequence definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns -1 in case of error, 0 if the declaration is inproper and
+ * 1 in case of success.
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseSequence(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype, last = NULL;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+
+ snprintf((char *) name, 30, "sequence %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_SEQUENCE;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+ type->minOccurs = xmlGetMinOccurs(ctxt, node);
+ type->maxOccurs = xmlGetMaxOccurs(ctxt, node);
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ while ((IS_SCHEMA(child, "element")) ||
+ (IS_SCHEMA(child, "group")) ||
+ (IS_SCHEMA(child, "any")) ||
+ (IS_SCHEMA(child, "choice")) ||
+ (IS_SCHEMA(child, "sequence"))) {
+ subtype = NULL;
+ if (IS_SCHEMA(child, "element")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseElement(ctxt, schema, child, 0);
+ } else if (IS_SCHEMA(child, "group")) {
+ subtype = xmlSchemaParseGroup(ctxt, schema, child);
+ } else if (IS_SCHEMA(child, "any")) {
+ subtype = xmlSchemaParseAny(ctxt, schema, child);
+ } else if (IS_SCHEMA(child, "choice")) {
+ subtype = xmlSchemaParseChoice(ctxt, schema, child);
+ } else if (IS_SCHEMA(child, "sequence")) {
+ subtype = xmlSchemaParseSequence(ctxt, schema, child);
+ }
+ if (subtype != NULL) {
+ if (last == NULL) {
+ type->subtypes = subtype;
+ last = subtype;
+ } else {
+ last->next = subtype;
+ last = subtype;
+ }
+ last->next = NULL;
+ }
+ child = child->next;
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD,
+ "Sequence %s has unexpected content\n", type->name,
+ NULL);
+ }
+
+ return (type);
+}
+
+/**
+ * xmlSchemaParseRestriction:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ * @simple: is that part of a simple type.
+ *
+ * parse a XML schema Restriction definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the type definition or NULL in case of error
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node, int simple)
+{
+ xmlSchemaTypePtr type, subtype;
+ xmlSchemaFacetPtr facet, lastfacet = NULL;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+ const xmlChar *oldcontainer;
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+ oldcontainer = ctxt->container;
+
+ snprintf((char *) name, 30, "restriction %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_RESTRICTION;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+ type->base = xmlGetQNameProp(ctxt, node, "base", &(type->baseNs));
+ if ((!simple) && (type->base == NULL)) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_RESTRICTION_NONAME_NOREF,
+ "Restriction %s has no base\n", type->name, NULL);
+ }
+ ctxt->container = name;
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ subtype = NULL;
+
+ if (IS_SCHEMA(child, "all")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseAll(ctxt, schema, child);
+ child = child->next;
+ type->subtypes = subtype;
+ } else if (IS_SCHEMA(child, "choice")) {
+ subtype = xmlSchemaParseChoice(ctxt, schema, child);
+ child = child->next;
+ type->subtypes = subtype;
+ } else if (IS_SCHEMA(child, "sequence")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseSequence(ctxt, schema, child);
+ child = child->next;
+ type->subtypes = subtype;
+ } else if (IS_SCHEMA(child, "group")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseGroup(ctxt, schema, child);
+ child = child->next;
+ type->subtypes = subtype;
+ } else {
+ if (IS_SCHEMA(child, "simpleType")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseSimpleType(ctxt, schema, child);
+ child = child->next;
+ type->baseType = subtype;
+ }
+ /*
+ * Facets
+ */
+ while ((IS_SCHEMA(child, "minInclusive")) ||
+ (IS_SCHEMA(child, "minExclusive")) ||
+ (IS_SCHEMA(child, "maxInclusive")) ||
+ (IS_SCHEMA(child, "maxExclusive")) ||
+ (IS_SCHEMA(child, "totalDigits")) ||
+ (IS_SCHEMA(child, "fractionDigits")) ||
+ (IS_SCHEMA(child, "pattern")) ||
+ (IS_SCHEMA(child, "enumeration")) ||
+ (IS_SCHEMA(child, "whiteSpace")) ||
+ (IS_SCHEMA(child, "length")) ||
+ (IS_SCHEMA(child, "maxLength")) ||
+ (IS_SCHEMA(child, "minLength"))) {
+ facet = xmlSchemaParseFacet(ctxt, schema, child);
+ if (facet != NULL) {
+ if (lastfacet == NULL) {
+ type->facets = facet;
+ lastfacet = facet;
+ } else {
+ lastfacet->next = facet;
+ lastfacet = facet;
+ }
+ lastfacet->next = NULL;
+ }
+ child = child->next;
+ }
+ }
+ child = xmlSchemaParseAttrDecls(ctxt, schema, child, type);
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD,
+ "Restriction %s has unexpected content\n",
+ type->name, NULL);
+ }
+ ctxt->container = oldcontainer;
+ return (type);
+}
+
+/**
+ * xmlSchemaParseExtension:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Extension definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the type definition or NULL in case of error
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseExtension(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+ const xmlChar *oldcontainer;
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+ oldcontainer = ctxt->container;
+
+ snprintf((char *) name, 30, "extension %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_EXTENSION;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+ ctxt->container = name;
+
+ type->base = xmlGetQNameProp(ctxt, node, "base", &(type->baseNs));
+ if (type->base == NULL) {
+ xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_EXTENSION_NO_BASE,
+ "Extension %s has no base\n", type->name, NULL);
+ }
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ subtype = NULL;
+
+ if (IS_SCHEMA(child, "all")) {
+ subtype = xmlSchemaParseAll(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "choice")) {
+ subtype = xmlSchemaParseChoice(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "sequence")) {
+ subtype = xmlSchemaParseSequence(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "group")) {
+ subtype = xmlSchemaParseGroup(ctxt, schema, child);
+ child = child->next;
+ }
+ if (subtype != NULL)
+ type->subtypes = subtype;
+ child = xmlSchemaParseAttrDecls(ctxt, schema, child, type);
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD,
+ "Extension %s has unexpected content\n", type->name,
+ NULL);
+ }
+ ctxt->container = oldcontainer;
+ return (type);
+}
+
+/**
+ * xmlSchemaParseSimpleContent:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema SimpleContent definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the type definition or NULL in case of error
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseSimpleContent(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema, xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+
+ snprintf((char *) name, 30, "complexContent %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_SIMPLE_CONTENT;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ subtype = NULL;
+ if (IS_SCHEMA(child, "restriction")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseRestriction(ctxt, schema, child, 0);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "extension")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseExtension(ctxt, schema, child);
+ child = child->next;
+ }
+ type->subtypes = subtype;
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD,
+ "SimpleContent %s has unexpected content\n",
+ type->name, NULL);
+ }
+ return (type);
+}
+
+/**
+ * xmlSchemaParseComplexContent:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema ComplexContent definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the type definition or NULL in case of error
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseComplexContent(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema, xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype;
+ xmlNodePtr child = NULL;
+ xmlChar name[30];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+
+ snprintf((char *) name, 30, "complexContent %d", ctxt->counter++ + 1);
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ if (type == NULL)
+ return (NULL);
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_COMPLEX_CONTENT;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ subtype = NULL;
+ if (IS_SCHEMA(child, "restriction")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseRestriction(ctxt, schema, child, 0);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "extension")) {
+ subtype = (xmlSchemaTypePtr)
+ xmlSchemaParseExtension(ctxt, schema, child);
+ child = child->next;
+ }
+ type->subtypes = subtype;
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD,
+ "ComplexContent %s has unexpected content\n",
+ type->name, NULL);
+ }
+ return (type);
+}
+
+/**
+ * xmlSchemaParseComplexType:
+ * @ctxt: a schema validation context
+ * @schema: the schema being built
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema Complex Type definition
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the type definition or NULL in case of error
+ */
+static xmlSchemaTypePtr
+xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ xmlSchemaTypePtr type, subtype;
+ xmlNodePtr child = NULL;
+ const xmlChar *name;
+ const xmlChar *oldcontainer;
+ const xmlChar *mixed;
+ char buf[100];
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (NULL);
+
+ oldcontainer = ctxt->container;
+ name = xmlSchemaGetProp(ctxt, node, "name");
+ if (name == NULL) {
+
+ snprintf(buf, 99, "anontype %d", ctxt->counter++ + 1);
+ name = (const xmlChar *)buf;
+ type = xmlSchemaAddType(ctxt, schema, name, NULL);
+ } else {
+ const xmlChar *local, *ns;
+
+ local = xmlSchemaGetNamespace(ctxt, schema, node, name, &ns);
+ type = xmlSchemaAddType(ctxt, schema, local, ns);
+ }
+ if (type == NULL) {
+ return (NULL);
+ }
+
+ mixed = xmlSchemaGetProp(ctxt, node, "mixed");
+ if (mixed != NULL)
+ type->flags |= XML_SCHEMAS_TYPE_MIXED;
+
+ type->node = node;
+ type->type = XML_SCHEMA_TYPE_COMPLEX;
+ type->id = xmlSchemaGetProp(ctxt, node, "id");
+ ctxt->container = name;
+
+ child = node->children;
+ if (IS_SCHEMA(child, "annotation")) {
+ type->annot = xmlSchemaParseAnnotation(ctxt, schema, child);
+ child = child->next;
+ }
+ if (IS_SCHEMA(child, "simpleContent")) {
+ type->subtypes = xmlSchemaParseSimpleContent(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "complexContent")) {
+ type->subtypes = xmlSchemaParseComplexContent(ctxt, schema, child);
+ child = child->next;
+ } else {
+ subtype = NULL;
+
+ if (IS_SCHEMA(child, "all")) {
+ subtype = xmlSchemaParseAll(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "choice")) {
+ subtype = xmlSchemaParseChoice(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "sequence")) {
+ subtype = xmlSchemaParseSequence(ctxt, schema, child);
+ child = child->next;
+ } else if (IS_SCHEMA(child, "group")) {
+ subtype = xmlSchemaParseGroup(ctxt, schema, child);
+ child = child->next;
+ }
+ if (subtype != NULL)
+ type->subtypes = subtype;
+ child = xmlSchemaParseAttrDecls(ctxt, schema, child, type);
+ }
+ if (child != NULL) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD,
+ "ComplexType %s has unexpected content\n",
+ type->name, NULL);
+ }
+ ctxt->container = oldcontainer;
+ return (type);
+}
+
+/**
+ * xmlSchemaParseSchema:
+ * @ctxt: a schema validation context
+ * @node: a subtree containing XML Schema informations
+ *
+ * parse a XML schema definition from a node set
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the internal XML Schema structure built from the resource or
+ * NULL in case of error
+ */
+static xmlSchemaPtr
+xmlSchemaParseSchema(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlSchemaPtr schema = NULL;
+ xmlNodePtr child = NULL;
+ const xmlChar *val;
+ int nberrors;
+
+ if ((ctxt == NULL) || (node == NULL))
+ return (NULL);
+
+ nberrors = ctxt->nberrors;
+ ctxt->nberrors = 0;
+ if (IS_SCHEMA(node, "schema")) {
+ schema = xmlSchemaNewSchema(ctxt);
+ if (schema == NULL)
+ return (NULL);
+ val = xmlSchemaGetProp(ctxt, node, "targetNamespace");
+ if (val != NULL) {
+ schema->targetNamespace = xmlDictLookup(ctxt->dict, val, -1);
+ } else {
+ schema->targetNamespace = NULL;
+ }
+ schema->id = xmlSchemaGetProp(ctxt, node, "id");
+ schema->version = xmlSchemaGetProp(ctxt, node, "version");
+ val = xmlSchemaGetProp(ctxt, node, "elementFormDefault");
+ if (val != NULL) {
+ if (xmlStrEqual(val, BAD_CAST "qualified"))
+ schema->flags |= XML_SCHEMAS_QUALIF_ELEM;
+ else if (!xmlStrEqual(val, BAD_CAST "unqualified")) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_ELEMFORMDEFAULT_VALUE,
+ "Invalid value %s for elementFormDefault\n",
+ val, NULL);
+ }
+ } else {
+ schema->flags |= XML_SCHEMAS_QUALIF_ELEM;
+ }
+ val = xmlSchemaGetProp(ctxt, node, "attributeFormDefault");
+ if (val != NULL) {
+ if (xmlStrEqual(val, BAD_CAST "qualified"))
+ schema->flags |= XML_SCHEMAS_QUALIF_ATTR;
+ else if (!xmlStrEqual(val, BAD_CAST "unqualified")) {
+ xmlSchemaPErr2(ctxt, node, child,
+ XML_SCHEMAP_ATTRFORMDEFAULT_VALUE,
+ "Invalid value %s for attributeFormDefault\n",
+ val, NULL);
+ }
+ }
+
+ xmlSchemaParseSchemaTopLevel(ctxt, schema, node->children);
+ } else {
+ xmlDocPtr doc;
+
+ doc = node->doc;
+
+ if ((doc != NULL) && (doc->URL != NULL)) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) doc,
+ XML_SCHEMAP_NOT_SCHEMA,
+ "File %s is not a schemas", doc->URL, NULL);
+ } else {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) doc,
+ XML_SCHEMAP_NOT_SCHEMA,
+ "File is not a schemas", NULL, NULL);
+ }
+ return(NULL);
+ }
+ if (ctxt->nberrors != 0) {
+ if (schema != NULL) {
+ xmlSchemaFree(schema);
+ schema = NULL;
+ }
+ }
+ ctxt->nberrors = nberrors;
+#ifdef DEBUG
+ if (schema == NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSchemaParse() failed\n");
+#endif
+
+ return (schema);
+}
+
+/************************************************************************
+ * *
+ * Validating using Schemas *
+ * *
+ ************************************************************************/
+
+/************************************************************************
+ * *
+ * Reading/Writing Schemas *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchemaNewParserCtxt:
+ * @URL: the location of the schema
+ *
+ * Create an XML Schemas parse context for that file/resource expected
+ * to contain an XML Schemas file.
+ *
+ * Returns the parser context or NULL in case of error
+ */
+xmlSchemaParserCtxtPtr
+xmlSchemaNewParserCtxt(const char *URL)
+{
+ xmlSchemaParserCtxtPtr ret;
+
+ if (URL == NULL)
+ return (NULL);
+
+ ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(NULL, "allocating schama parser context",
+ NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaParserCtxt));
+ ret->dict = xmlDictCreate();
+ ret->URL = xmlDictLookup(ret->dict, (const xmlChar *) URL, -1);
+ ret->includes = 0;
+ return (ret);
+}
+
+/**
+ * xmlSchemaNewMemParserCtxt:
+ * @buffer: a pointer to a char array containing the schemas
+ * @size: the size of the array
+ *
+ * Create an XML Schemas parse context for that memory buffer expected
+ * to contain an XML Schemas file.
+ *
+ * Returns the parser context or NULL in case of error
+ */
+xmlSchemaParserCtxtPtr
+xmlSchemaNewMemParserCtxt(const char *buffer, int size)
+{
+ xmlSchemaParserCtxtPtr ret;
+
+ if ((buffer == NULL) || (size <= 0))
+ return (NULL);
+
+ ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(NULL, "allocating schama parser context",
+ NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaParserCtxt));
+ ret->buffer = buffer;
+ ret->size = size;
+ ret->dict = xmlDictCreate();
+ return (ret);
+}
+
+/**
+ * xmlSchemaNewDocParserCtxt:
+ * @doc: a preparsed document tree
+ *
+ * Create an XML Schemas 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
+ */
+xmlSchemaParserCtxtPtr
+xmlSchemaNewDocParserCtxt(xmlDocPtr doc)
+{
+ xmlSchemaParserCtxtPtr ret;
+
+ 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->doc = doc;
+ ret->dict = xmlDictCreate();
+ /* The application has responsibility for the document */
+ ret->preserve = 1;
+
+ return (ret);
+}
+
+/**
+ * xmlSchemaFreeParserCtxt:
+ * @ctxt: the schema parser context
+ *
+ * Free the resources associated to the schema parser context
+ */
+void
+xmlSchemaFreeParserCtxt(xmlSchemaParserCtxtPtr ctxt)
+{
+ if (ctxt == NULL)
+ return;
+ if (ctxt->doc != NULL && !ctxt->preserve)
+ xmlFreeDoc(ctxt->doc);
+ xmlDictFree(ctxt->dict);
+ xmlFree(ctxt);
+}
+
+/************************************************************************
+ * *
+ * Building the content models *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchemaBuildAContentModel:
+ * @type: the schema type definition
+ * @ctxt: the schema parser context
+ * @name: the element name whose content is being built
+ *
+ * Generate the automata sequence needed for that type
+ */
+static void
+xmlSchemaBuildAContentModel(xmlSchemaTypePtr type,
+ xmlSchemaParserCtxtPtr ctxt,
+ const xmlChar * name)
+{
+ if (type == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Found unexpected type = NULL in %s content model\n",
+ name);
+ return;
+ }
+ switch (type->type) {
+ case XML_SCHEMA_TYPE_ANY:
+ /* TODO : handle the namespace too */
+ /* TODO : make that a specific transition type */
+ TODO ctxt->state =
+ xmlAutomataNewTransition(ctxt->am, ctxt->state, NULL,
+ BAD_CAST "*", NULL);
+ break;
+ case XML_SCHEMA_TYPE_ELEMENT:{
+ xmlSchemaElementPtr elem = (xmlSchemaElementPtr) type;
+
+ /* TODO : handle the namespace too */
+ xmlAutomataStatePtr oldstate = ctxt->state;
+
+ if (elem->maxOccurs >= UNBOUNDED) {
+ if (elem->minOccurs > 1) {
+ xmlAutomataStatePtr tmp;
+ int counter;
+
+ ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
+ oldstate,
+ NULL);
+ oldstate = ctxt->state;
+
+ counter = xmlAutomataNewCounter(ctxt->am,
+ elem->minOccurs -
+ 1, UNBOUNDED);
+
+ if (elem->refDecl != NULL) {
+ xmlSchemaBuildAContentModel((xmlSchemaTypePtr)
+ elem->refDecl,
+ ctxt,
+ elem->refDecl->
+ name);
+ } else {
+ ctxt->state =
+ xmlAutomataNewTransition(ctxt->am,
+ ctxt->state, NULL,
+ elem->name, type);
+ }
+ tmp = ctxt->state;
+ xmlAutomataNewCountedTrans(ctxt->am, tmp, oldstate,
+ counter);
+ ctxt->state =
+ xmlAutomataNewCounterTrans(ctxt->am, tmp, NULL,
+ counter);
+
+ } else {
+ if (elem->refDecl != NULL) {
+ xmlSchemaBuildAContentModel((xmlSchemaTypePtr)
+ elem->refDecl,
+ ctxt,
+ elem->refDecl->
+ name);
+ } else {
+ ctxt->state =
+ xmlAutomataNewTransition(ctxt->am,
+ ctxt->state, NULL,
+ elem->name, type);
+ }
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state,
+ oldstate);
+ if (elem->minOccurs == 0) {
+ /* basically an elem* */
+ xmlAutomataNewEpsilon(ctxt->am, oldstate,
+ ctxt->state);
+ }
+ }
+ } else if ((elem->maxOccurs > 1) || (elem->minOccurs > 1)) {
+ xmlAutomataStatePtr tmp;
+ int counter;
+
+ ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
+ oldstate, NULL);
+ oldstate = ctxt->state;
+
+ counter = xmlAutomataNewCounter(ctxt->am,
+ elem->minOccurs - 1,
+ elem->maxOccurs - 1);
+
+ if (elem->refDecl != NULL) {
+ xmlSchemaBuildAContentModel((xmlSchemaTypePtr)
+ elem->refDecl, ctxt,
+ elem->refDecl->name);
+ } else {
+ ctxt->state = xmlAutomataNewTransition(ctxt->am,
+ ctxt->state,
+ NULL,
+ elem->name,
+ type);
+ }
+ tmp = ctxt->state;
+ xmlAutomataNewCountedTrans(ctxt->am, tmp, oldstate,
+ counter);
+ ctxt->state = xmlAutomataNewCounterTrans(ctxt->am, tmp,
+ NULL,
+ counter);
+ if (elem->minOccurs == 0) {
+ /* basically an elem? */
+ xmlAutomataNewEpsilon(ctxt->am, oldstate,
+ ctxt->state);
+ }
+
+ } else {
+ if (elem->refDecl != NULL) {
+ xmlSchemaBuildAContentModel((xmlSchemaTypePtr)
+ elem->refDecl, ctxt,
+ elem->refDecl->name);
+ } else {
+ ctxt->state = xmlAutomataNewTransition(ctxt->am,
+ ctxt->state,
+ NULL,
+ elem->name,
+ type);
+ }
+ if (elem->minOccurs == 0) {
+ /* basically an elem? */
+ xmlAutomataNewEpsilon(ctxt->am, oldstate,
+ ctxt->state);
+ }
+ }
+ break;
+ }
+ case XML_SCHEMA_TYPE_SEQUENCE:{
+ xmlSchemaTypePtr subtypes;
+
+ /*
+ * If max and min occurances are default (1) then
+ * simply iterate over the subtypes
+ */
+ if ((type->minOccurs == 1) && (type->maxOccurs == 1)) {
+ subtypes = type->subtypes;
+ while (subtypes != NULL) {
+ xmlSchemaBuildAContentModel(subtypes, ctxt, name);
+ subtypes = subtypes->next;
+ }
+ } else {
+ xmlAutomataStatePtr oldstate = ctxt->state;
+
+ if (type->maxOccurs >= UNBOUNDED) {
+ if (type->minOccurs > 1) {
+ xmlAutomataStatePtr tmp;
+ int counter;
+
+ ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
+ oldstate,
+ NULL);
+ oldstate = ctxt->state;
+
+ counter = xmlAutomataNewCounter(ctxt->am,
+ type->
+ minOccurs - 1,
+ UNBOUNDED);
+
+ subtypes = type->subtypes;
+ while (subtypes != NULL) {
+ xmlSchemaBuildAContentModel(subtypes, ctxt,
+ name);
+ subtypes = subtypes->next;
+ }
+ tmp = ctxt->state;
+ xmlAutomataNewCountedTrans(ctxt->am, tmp,
+ oldstate, counter);
+ ctxt->state =
+ xmlAutomataNewCounterTrans(ctxt->am, tmp,
+ NULL, counter);
+
+ } else {
+ subtypes = type->subtypes;
+ while (subtypes != NULL) {
+ xmlSchemaBuildAContentModel(subtypes, ctxt,
+ name);
+ subtypes = subtypes->next;
+ }
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state,
+ oldstate);
+ if (type->minOccurs == 0) {
+ xmlAutomataNewEpsilon(ctxt->am, oldstate,
+ ctxt->state);
+ }
+ }
+ } else if ((type->maxOccurs > 1)
+ || (type->minOccurs > 1)) {
+ xmlAutomataStatePtr tmp;
+ int counter;
+
+ ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
+ oldstate,
+ NULL);
+ oldstate = ctxt->state;
+
+ counter = xmlAutomataNewCounter(ctxt->am,
+ type->minOccurs -
+ 1,
+ type->maxOccurs -
+ 1);
+
+ subtypes = type->subtypes;
+ while (subtypes != NULL) {
+ xmlSchemaBuildAContentModel(subtypes, ctxt,
+ name);
+ subtypes = subtypes->next;
+ }
+ tmp = ctxt->state;
+ xmlAutomataNewCountedTrans(ctxt->am, tmp, oldstate,
+ counter);
+ ctxt->state =
+ xmlAutomataNewCounterTrans(ctxt->am, tmp, NULL,
+ counter);
+ if (type->minOccurs == 0) {
+ xmlAutomataNewEpsilon(ctxt->am, oldstate,
+ ctxt->state);
+ }
+
+ } else {
+ subtypes = type->subtypes;
+ while (subtypes != NULL) {
+ xmlSchemaBuildAContentModel(subtypes, ctxt,
+ name);
+ subtypes = subtypes->next;
+ }
+ if (type->minOccurs == 0) {
+ xmlAutomataNewEpsilon(ctxt->am, oldstate,
+ ctxt->state);
+ }
+ }
+ }
+ break;
+ }
+ case XML_SCHEMA_TYPE_CHOICE:{
+ xmlSchemaTypePtr subtypes;
+ xmlAutomataStatePtr start, end;
+
+ start = ctxt->state;
+ end = xmlAutomataNewState(ctxt->am);
+
+ /*
+ * iterate over the subtypes and remerge the end with an
+ * epsilon transition
+ */
+ if (type->maxOccurs == 1) {
+ subtypes = type->subtypes;
+ while (subtypes != NULL) {
+ ctxt->state = start;
+ xmlSchemaBuildAContentModel(subtypes, ctxt, name);
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state, end);
+ subtypes = subtypes->next;
+ }
+ } else {
+ int counter;
+ xmlAutomataStatePtr hop;
+ int maxOccurs = type->maxOccurs == UNBOUNDED ?
+ UNBOUNDED : type->maxOccurs - 1;
+ int minOccurs =
+ type->minOccurs < 1 ? 0 : type->minOccurs - 1;
+
+ /*
+ * use a counter to keep track of the number of transtions
+ * which went through the choice.
+ */
+ counter =
+ xmlAutomataNewCounter(ctxt->am, minOccurs,
+ maxOccurs);
+ hop = xmlAutomataNewState(ctxt->am);
+
+ subtypes = type->subtypes;
+ while (subtypes != NULL) {
+ ctxt->state = start;
+ xmlSchemaBuildAContentModel(subtypes, ctxt, name);
+ xmlAutomataNewEpsilon(ctxt->am, ctxt->state, hop);
+ subtypes = subtypes->next;
+ }
+ xmlAutomataNewCountedTrans(ctxt->am, hop, start,
+ counter);
+ xmlAutomataNewCounterTrans(ctxt->am, hop, end,
+ counter);
+ }
+ if (type->minOccurs == 0) {
+ xmlAutomataNewEpsilon(ctxt->am, start, end);
+ }
+ ctxt->state = end;
+ break;
+ }
+ case XML_SCHEMA_TYPE_ALL:{
+ xmlAutomataStatePtr start;
+ xmlSchemaTypePtr subtypes;
+ xmlSchemaElementPtr elem = (xmlSchemaElementPtr) type;
+ int lax;
+
+ subtypes = type->subtypes;
+ if (subtypes == NULL)
+ break;
+ start = ctxt->state;
+ while (subtypes != NULL) {
+ ctxt->state = start;
+ elem = (xmlSchemaElementPtr) subtypes;
+
+ /* TODO : handle the namespace too */
+ if ((elem->minOccurs == 1) && (elem->maxOccurs == 1)) {
+ xmlAutomataNewOnceTrans(ctxt->am, ctxt->state,
+ ctxt->state, elem->name, 1,
+ 1, subtypes);
+ } else {
+ xmlAutomataNewCountTrans(ctxt->am, ctxt->state,
+ ctxt->state, elem->name,
+ elem->minOccurs,
+ elem->maxOccurs,
+ subtypes);
+ }
+ subtypes = subtypes->next;
+ }
+ lax = type->minOccurs == 0;
+ ctxt->state =
+ xmlAutomataNewAllTrans(ctxt->am, ctxt->state, NULL,
+ lax);
+ break;
+ }
+ case XML_SCHEMA_TYPE_RESTRICTION:
+ if (type->subtypes != NULL)
+ xmlSchemaBuildAContentModel(type->subtypes, ctxt, name);
+ break;
+ case XML_SCHEMA_TYPE_EXTENSION:
+ if (type->baseType != NULL) {
+ xmlSchemaTypePtr subtypes;
+
+ xmlSchemaBuildAContentModel(type->baseType, ctxt, name);
+ subtypes = type->subtypes;
+ while (subtypes != NULL) {
+ xmlSchemaBuildAContentModel(subtypes, ctxt, name);
+ subtypes = subtypes->next;
+ }
+ } else if (type->subtypes != NULL)
+ xmlSchemaBuildAContentModel(type->subtypes, ctxt, name);
+ break;
+ case XML_SCHEMA_TYPE_GROUP:
+ if (type->subtypes == NULL) {
+ }
+ case XML_SCHEMA_TYPE_COMPLEX:
+ case XML_SCHEMA_TYPE_COMPLEX_CONTENT:
+ if (type->subtypes != NULL)
+ xmlSchemaBuildAContentModel(type->subtypes, ctxt, name);
+ break;
+ default:
+ xmlGenericError(xmlGenericErrorContext,
+ "Found unexpected type %d in %s content model\n",
+ type->type, name);
+ return;
+ }
+}
+
+/**
+ * xmlSchemaBuildContentModel:
+ * @elem: the element
+ * @ctxt: the schema parser context
+ * @name: the element name
+ *
+ * Builds the content model of the element.
+ */
+static void
+xmlSchemaBuildContentModel(xmlSchemaElementPtr elem,
+ xmlSchemaParserCtxtPtr ctxt,
+ const xmlChar * name)
+{
+ xmlAutomataStatePtr start;
+
+ if (elem->contModel != NULL)
+ return;
+ if (elem->subtypes == NULL) {
+ elem->contentType = XML_SCHEMA_CONTENT_ANY;
+ return;
+ }
+ if (elem->subtypes->type != XML_SCHEMA_TYPE_COMPLEX)
+ return;
+ if ((elem->subtypes->contentType == XML_SCHEMA_CONTENT_BASIC) ||
+ (elem->subtypes->contentType == XML_SCHEMA_CONTENT_SIMPLE))
+ return;
+
+#ifdef DEBUG_CONTENT
+ xmlGenericError(xmlGenericErrorContext,
+ "Building content model for %s\n", name);
+#endif
+
+ ctxt->am = xmlNewAutomata();
+ if (ctxt->am == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot create automata for elem %s\n", name);
+ return;
+ }
+ start = ctxt->state = xmlAutomataGetInitState(ctxt->am);
+ xmlSchemaBuildAContentModel(elem->subtypes, ctxt, name);
+ xmlAutomataSetFinalState(ctxt->am, ctxt->state);
+ elem->contModel = xmlAutomataCompile(ctxt->am);
+ if (elem->contModel == NULL) {
+ xmlSchemaPErr(ctxt, elem->node, XML_SCHEMAS_ERR_INTERNAL,
+ "failed to compile %s content model\n", name, NULL);
+ } else if (xmlRegexpIsDeterminist(elem->contModel) != 1) {
+ xmlSchemaPErr(ctxt, elem->node, XML_SCHEMAS_ERR_NOTDETERMINIST,
+ "Content model of %s is not determinist:\n", name,
+ NULL);
+ } else {
+#ifdef DEBUG_CONTENT_REGEXP
+ xmlGenericError(xmlGenericErrorContext,
+ "Content model of %s:\n", name);
+ xmlRegexpPrint(stderr, elem->contModel);
+#endif
+ }
+ ctxt->state = NULL;
+ xmlFreeAutomata(ctxt->am);
+ ctxt->am = NULL;
+}
+
+/**
+ * xmlSchemaRefFixupCallback:
+ * @elem: the schema element context
+ * @ctxt: the schema parser context
+ *
+ * Free the resources associated to the schema parser context
+ */
+static void
+xmlSchemaRefFixupCallback(xmlSchemaElementPtr elem,
+ xmlSchemaParserCtxtPtr ctxt,
+ const xmlChar * name,
+ const xmlChar * context ATTRIBUTE_UNUSED,
+ const xmlChar * namespace ATTRIBUTE_UNUSED)
+{
+ if ((ctxt == NULL) || (elem == NULL))
+ return;
+ if (elem->ref != NULL) {
+ xmlSchemaElementPtr elemDecl;
+
+ if (elem->subtypes != NULL) {
+ xmlSchemaPErr(ctxt, elem->node,
+ XML_SCHEMAP_INVALID_REF_AND_SUBTYPE,
+ "Schemas: element %s have both ref and subtype\n",
+ name, NULL);
+ return;
+ }
+ elemDecl = xmlSchemaGetElem(ctxt->schema, elem->ref, elem->refNs, 0);
+
+ if (elemDecl == NULL) {
+ xmlSchemaPErr(ctxt, elem->node, XML_SCHEMAP_UNKNOWN_REF,
+ "Schemas: element %s ref to %s not found\n",
+ name, elem->ref);
+ return;
+ }
+ elem->refDecl = elemDecl;
+ } else if (elem->namedType != NULL) {
+ xmlSchemaTypePtr typeDecl;
+
+ if (elem->subtypes != NULL) {
+ xmlSchemaPErr(ctxt, elem->node, XML_SCHEMAP_TYPE_AND_SUBTYPE,
+ "Schemas: element %s have both type and subtype\n",
+ name, NULL);
+ return;
+ }
+ typeDecl = xmlSchemaGetType(ctxt->schema, elem->namedType,
+ elem->namedTypeNs);
+
+ if (typeDecl == NULL) {
+ xmlSchemaPErr(ctxt, elem->node, XML_SCHEMAP_UNKNOWN_TYPE,
+ "Schemas: element %s type %s not found\n", name,
+ elem->namedType);
+ return;
+ }
+ elem->subtypes = typeDecl;
+ }
+}
+
+/**
+ * xmlSchemaTypeFixup:
+ * @typeDecl: the schema type definition
+ * @ctxt: the schema parser context
+ *
+ * Fixes the content model of the type.
+ */
+static void
+xmlSchemaTypeFixup(xmlSchemaTypePtr typeDecl,
+ xmlSchemaParserCtxtPtr ctxt, const xmlChar * name)
+{
+ if (typeDecl == NULL)
+ return;
+ if (name == NULL)
+ name = typeDecl->name;
+ if (typeDecl->contentType == XML_SCHEMA_CONTENT_UNKNOWN) {
+ switch (typeDecl->type) {
+ case XML_SCHEMA_TYPE_SIMPLE_CONTENT:{
+ xmlSchemaTypeFixup(typeDecl->subtypes, ctxt, NULL);
+ if (typeDecl->subtypes != NULL)
+ typeDecl->contentType =
+ typeDecl->subtypes->contentType;
+ break;
+ }
+ case XML_SCHEMA_TYPE_RESTRICTION:{
+ if (typeDecl->subtypes != NULL)
+ xmlSchemaTypeFixup(typeDecl->subtypes, ctxt, NULL);
+
+ if (typeDecl->base != NULL) {
+ xmlSchemaTypePtr baseType;
+
+ baseType =
+ xmlSchemaGetType(ctxt->schema, typeDecl->base,
+ typeDecl->baseNs);
+ if (baseType == NULL) {
+ xmlSchemaPErr(ctxt, typeDecl->node,
+ XML_SCHEMAP_UNKNOWN_BASE_TYPE,
+ "Schemas: type %s base type %s not found\n",
+ name, typeDecl->base);
+ }
+ typeDecl->baseType = baseType;
+ }
+ if (typeDecl->subtypes == NULL)
+ if (typeDecl->baseType != NULL)
+ typeDecl->contentType =
+ typeDecl->baseType->contentType;
+ else
+ /* 1.1.1 */
+ typeDecl->contentType = XML_SCHEMA_CONTENT_EMPTY;
+ else if ((typeDecl->subtypes->subtypes == NULL) &&
+ ((typeDecl->subtypes->type ==
+ XML_SCHEMA_TYPE_ALL)
+ || (typeDecl->subtypes->type ==
+ XML_SCHEMA_TYPE_SEQUENCE)))
+ /* 1.1.2 */
+ typeDecl->contentType = XML_SCHEMA_CONTENT_EMPTY;
+ else if ((typeDecl->subtypes->type ==
+ XML_SCHEMA_TYPE_CHOICE)
+ && (typeDecl->subtypes->subtypes == NULL))
+ /* 1.1.3 */
+ typeDecl->contentType = XML_SCHEMA_CONTENT_EMPTY;
+ else {
+ /* 1.2 and 2.X are applied at the other layer */
+ typeDecl->contentType =
+ XML_SCHEMA_CONTENT_ELEMENTS;
+ }
+ break;
+ }
+ case XML_SCHEMA_TYPE_EXTENSION:{
+ xmlSchemaContentType explicitContentType;
+ xmlSchemaTypePtr base;
+
+ if (typeDecl->base != NULL) {
+ xmlSchemaTypePtr baseType;
+
+ baseType =
+ xmlSchemaGetType(ctxt->schema, typeDecl->base,
+ typeDecl->baseNs);
+ if (baseType == NULL) {
+ xmlSchemaPErr(ctxt, typeDecl->node,
+ XML_SCHEMAP_UNKNOWN_BASE_TYPE,
+ "Schemas: type %s base type %s not found\n",
+ name, typeDecl->base);
+ }
+ typeDecl->baseType = baseType;
+ }
+ if (typeDecl->subtypes != NULL)
+ xmlSchemaTypeFixup(typeDecl->subtypes, ctxt, NULL);
+
+ explicitContentType = XML_SCHEMA_CONTENT_ELEMENTS;
+ if (typeDecl->subtypes == NULL)
+ /* 1.1.1 */
+ explicitContentType = XML_SCHEMA_CONTENT_EMPTY;
+ else if ((typeDecl->subtypes->subtypes == NULL) &&
+ ((typeDecl->subtypes->type ==
+ XML_SCHEMA_TYPE_ALL)
+ || (typeDecl->subtypes->type ==
+ XML_SCHEMA_TYPE_SEQUENCE)))
+ /* 1.1.2 */
+ explicitContentType = XML_SCHEMA_CONTENT_EMPTY;
+ else if ((typeDecl->subtypes->type ==
+ XML_SCHEMA_TYPE_CHOICE)
+ && (typeDecl->subtypes->subtypes == NULL))
+ /* 1.1.3 */
+ explicitContentType = XML_SCHEMA_CONTENT_EMPTY;
+
+ base = xmlSchemaGetType(ctxt->schema, typeDecl->base,
+ typeDecl->baseNs);
+ if (base == NULL) {
+ xmlSchemaPErr(ctxt, typeDecl->node,
+ XML_SCHEMAP_UNKNOWN_BASE_TYPE,
+ "Schemas: base type %s of type %s not found\n",
+ typeDecl->base, name);
+ return;
+ }
+ xmlSchemaTypeFixup(base, ctxt, NULL);
+ if (explicitContentType == XML_SCHEMA_CONTENT_EMPTY) {
+ /* 2.1 */
+ typeDecl->contentType = base->contentType;
+ } else if (base->contentType ==
+ XML_SCHEMA_CONTENT_EMPTY) {
+ /* 2.2 imbitable ! */
+ typeDecl->contentType =
+ XML_SCHEMA_CONTENT_ELEMENTS;
+ } else {
+ /* 2.3 imbitable pareil ! */
+ typeDecl->contentType =
+ XML_SCHEMA_CONTENT_ELEMENTS;
+ }
+ break;
+ }
+ case XML_SCHEMA_TYPE_COMPLEX:{
+ if (typeDecl->subtypes == NULL) {
+ typeDecl->contentType = XML_SCHEMA_CONTENT_EMPTY;
+
+ if (typeDecl->flags & XML_SCHEMAS_TYPE_MIXED)
+ typeDecl->contentType =
+ XML_SCHEMA_CONTENT_MIXED;
+ } else {
+ if (typeDecl->flags & XML_SCHEMAS_TYPE_MIXED)
+ typeDecl->contentType =
+ XML_SCHEMA_CONTENT_MIXED;
+ else {
+ xmlSchemaTypeFixup(typeDecl->subtypes, ctxt,
+ NULL);
+ if (typeDecl->subtypes != NULL)
+ typeDecl->contentType =
+ typeDecl->subtypes->contentType;
+ }
+ if (typeDecl->attributes == NULL)
+ typeDecl->attributes =
+ typeDecl->subtypes->attributes;
+ }
+ break;
+ }
+ case XML_SCHEMA_TYPE_COMPLEX_CONTENT:{
+ if (typeDecl->subtypes == NULL) {
+ typeDecl->contentType = XML_SCHEMA_CONTENT_EMPTY;
+ if (typeDecl->flags & XML_SCHEMAS_TYPE_MIXED)
+ typeDecl->contentType =
+ XML_SCHEMA_CONTENT_MIXED;
+ } else {
+ if (typeDecl->flags & XML_SCHEMAS_TYPE_MIXED)
+ typeDecl->contentType =
+ XML_SCHEMA_CONTENT_MIXED;
+ else {
+ xmlSchemaTypeFixup(typeDecl->subtypes, ctxt,
+ NULL);
+ if (typeDecl->subtypes != NULL)
+ typeDecl->contentType =
+ typeDecl->subtypes->contentType;
+ }
+ if (typeDecl->attributes == NULL)
+ typeDecl->attributes =
+ typeDecl->subtypes->attributes;
+ }
+ break;
+ }
+ case XML_SCHEMA_TYPE_SEQUENCE:
+ case XML_SCHEMA_TYPE_GROUP:
+ case XML_SCHEMA_TYPE_ALL:
+ case XML_SCHEMA_TYPE_CHOICE:
+ typeDecl->contentType = XML_SCHEMA_CONTENT_ELEMENTS;
+ break;
+ case XML_SCHEMA_TYPE_BASIC:
+ case XML_SCHEMA_TYPE_ANY:
+ case XML_SCHEMA_TYPE_FACET:
+ case XML_SCHEMA_TYPE_SIMPLE:
+ case XML_SCHEMA_TYPE_UR:
+ case XML_SCHEMA_TYPE_ELEMENT:
+ case XML_SCHEMA_TYPE_ATTRIBUTE:
+ case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
+ case XML_SCHEMA_TYPE_NOTATION:
+ case XML_SCHEMA_TYPE_LIST:
+ case XML_SCHEMA_TYPE_UNION:
+ case XML_SCHEMA_FACET_MININCLUSIVE:
+ case XML_SCHEMA_FACET_MINEXCLUSIVE:
+ case XML_SCHEMA_FACET_MAXINCLUSIVE:
+ case XML_SCHEMA_FACET_MAXEXCLUSIVE:
+ case XML_SCHEMA_FACET_TOTALDIGITS:
+ case XML_SCHEMA_FACET_FRACTIONDIGITS:
+ case XML_SCHEMA_FACET_PATTERN:
+ case XML_SCHEMA_FACET_ENUMERATION:
+ case XML_SCHEMA_FACET_WHITESPACE:
+ case XML_SCHEMA_FACET_LENGTH:
+ case XML_SCHEMA_FACET_MAXLENGTH:
+ case XML_SCHEMA_FACET_MINLENGTH:
+ typeDecl->contentType = XML_SCHEMA_CONTENT_SIMPLE;
+ if (typeDecl->subtypes != NULL)
+ xmlSchemaTypeFixup(typeDecl->subtypes, ctxt, NULL);
+ break;
+ }
+ }
+#ifdef DEBUG_TYPE
+ if (typeDecl->node != NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Type of %s : %s:%d :", name,
+ typeDecl->node->doc->URL,
+ xmlGetLineNo(typeDecl->node));
+ } else {
+ xmlGenericError(xmlGenericErrorContext, "Type of %s :", name);
+ }
+ switch (typeDecl->contentType) {
+ case XML_SCHEMA_CONTENT_SIMPLE:
+ xmlGenericError(xmlGenericErrorContext, "simple\n");
+ break;
+ case XML_SCHEMA_CONTENT_ELEMENTS:
+ xmlGenericError(xmlGenericErrorContext, "elements\n");
+ break;
+ case XML_SCHEMA_CONTENT_UNKNOWN:
+ xmlGenericError(xmlGenericErrorContext, "unknown !!!\n");
+ break;
+ case XML_SCHEMA_CONTENT_EMPTY:
+ xmlGenericError(xmlGenericErrorContext, "empty\n");
+ break;
+ case XML_SCHEMA_CONTENT_MIXED:
+ xmlGenericError(xmlGenericErrorContext, "mixed\n");
+ break;
+ case XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS:
+ xmlGenericError(xmlGenericErrorContext, "mixed or elems\n");
+ break;
+ case XML_SCHEMA_CONTENT_BASIC:
+ xmlGenericError(xmlGenericErrorContext, "basic\n");
+ break;
+ default:
+ xmlGenericError(xmlGenericErrorContext,
+ "not registered !!!\n");
+ break;
+ }
+#endif
+}
+
+/**
+ * xmlSchemaCheckFacet:
+ * @facet: the facet
+ * @typeDecl: the schema type definition
+ * @ctxt: the schema parser context or NULL
+ * @name: name of the type
+ *
+ * Checks the default values types, especially for facets
+ *
+ * Returns 0 if okay or -1 in cae of error
+ */
+int
+xmlSchemaCheckFacet(xmlSchemaFacetPtr facet,
+ xmlSchemaTypePtr typeDecl,
+ xmlSchemaParserCtxtPtr ctxt, const xmlChar * name)
+{
+ static xmlSchemaTypePtr nonNegativeIntegerType = NULL;
+ int ret = 0;
+
+ if (nonNegativeIntegerType == NULL) {
+ nonNegativeIntegerType =
+ xmlSchemaGetPredefinedType(BAD_CAST "nonNegativeInteger",
+ xmlSchemaNs);
+ }
+ switch (facet->type) {
+ case XML_SCHEMA_FACET_MININCLUSIVE:
+ case XML_SCHEMA_FACET_MINEXCLUSIVE:
+ case XML_SCHEMA_FACET_MAXINCLUSIVE:
+ case XML_SCHEMA_FACET_MAXEXCLUSIVE:{
+ /*
+ * Okay we need to validate the value
+ * at that point.
+ */
+ xmlSchemaValidCtxtPtr vctxt;
+
+ vctxt = xmlSchemaNewValidCtxt(NULL);
+ if (vctxt == NULL)
+ break;
+ xmlSchemaValidateSimpleValue(vctxt, typeDecl,
+ facet->value);
+ facet->val = vctxt->value;
+ vctxt->value = NULL;
+ if (facet->val == NULL) {
+ /* error code */
+ if (ctxt != NULL) {
+ xmlSchemaPErr(ctxt, facet->node,
+ XML_SCHEMAP_INVALID_FACET,
+ "Schemas: type %s facet value %s invalid\n",
+ name, facet->value);
+ }
+ ret = -1;
+ }
+ xmlSchemaFreeValidCtxt(vctxt);
+ break;
+ }
+ case XML_SCHEMA_FACET_ENUMERATION:{
+ /*
+ * Okay we need to validate the value
+ * at that point.
+ */
+ xmlSchemaValidCtxtPtr vctxt;
+ int tmp;
+
+ vctxt = xmlSchemaNewValidCtxt(NULL);
+ if (vctxt == NULL)
+ break;
+ tmp = xmlSchemaValidateSimpleValue(vctxt, typeDecl,
+ facet->value);
+ if (tmp != 0) {
+ if (ctxt != NULL) {
+ xmlSchemaPErr(ctxt, facet->node,
+ XML_SCHEMAP_INVALID_ENUM,
+ "Schemas: type %s enumeration value %s invalid\n",
+ name, facet->value);
+ }
+ ret = -1;
+ }
+ xmlSchemaFreeValidCtxt(vctxt);
+ break;
+ }
+ case XML_SCHEMA_FACET_PATTERN:
+ facet->regexp = xmlRegexpCompile(facet->value);
+ if (facet->regexp == NULL) {
+ xmlSchemaPErr(ctxt, typeDecl->node,
+ XML_SCHEMAP_REGEXP_INVALID,
+ "Schemas: type %s facet regexp %s invalid\n",
+ name, facet->value);
+ ret = -1;
+ }
+ break;
+ case XML_SCHEMA_FACET_TOTALDIGITS:
+ case XML_SCHEMA_FACET_FRACTIONDIGITS:
+ case XML_SCHEMA_FACET_LENGTH:
+ case XML_SCHEMA_FACET_MAXLENGTH:
+ case XML_SCHEMA_FACET_MINLENGTH:{
+ int tmp;
+
+ tmp =
+ xmlSchemaValidatePredefinedType(nonNegativeIntegerType,
+ facet->value,
+ &facet->val);
+ if (tmp != 0) {
+ /* error code */
+ if (ctxt != NULL) {
+ xmlSchemaPErr(ctxt, facet->node,
+ XML_SCHEMAP_INVALID_FACET_VALUE,
+ "Schemas: type %s facet value %s invalid\n",
+ name, facet->value);
+ }
+ ret = -1;
+ }
+ break;
+ }
+ case XML_SCHEMA_FACET_WHITESPACE:{
+ if (xmlStrEqual(facet->value, BAD_CAST "preserve")) {
+ facet->whitespace = XML_SCHEMAS_FACET_PRESERVE;
+ } else if (xmlStrEqual(facet->value, BAD_CAST "replace")) {
+ facet->whitespace = XML_SCHEMAS_FACET_REPLACE;
+ } else if (xmlStrEqual(facet->value, BAD_CAST "collapse")) {
+ facet->whitespace = XML_SCHEMAS_FACET_COLLAPSE;
+ } else {
+ if (ctxt != NULL) {
+ xmlSchemaPErr(ctxt, facet->node,
+ XML_SCHEMAP_INVALID_WHITE_SPACE,
+ "Schemas: type %s whiteSpace value %s invalid\n",
+ name, facet->value);
+ }
+ ret = -1;
+ }
+ }
+ default:
+ break;
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchemaCheckDefaults:
+ * @typeDecl: the schema type definition
+ * @ctxt: the schema parser context
+ *
+ * Checks the default values types, especially for facets
+ */
+static void
+xmlSchemaCheckDefaults(xmlSchemaTypePtr typeDecl,
+ xmlSchemaParserCtxtPtr ctxt, const xmlChar * name)
+{
+ if (name == NULL)
+ name = typeDecl->name;
+ if (typeDecl->type == XML_SCHEMA_TYPE_RESTRICTION) {
+ if (typeDecl->facets != NULL) {
+ xmlSchemaFacetPtr facet = typeDecl->facets;
+
+ while (facet != NULL) {
+ xmlSchemaCheckFacet(facet, typeDecl, ctxt, name);
+ facet = facet->next;
+ }
+ }
+ }
+}
+
+/**
+ * xmlSchemaAttrGrpFixup:
+ * @attrgrpDecl: the schema attribute definition
+ * @ctxt: the schema parser context
+ * @name: the attribute name
+ *
+ * Fixes finish doing the computations on the attributes definitions
+ */
+static void
+xmlSchemaAttrGrpFixup(xmlSchemaAttributeGroupPtr attrgrpDecl,
+ xmlSchemaParserCtxtPtr ctxt, const xmlChar * name)
+{
+ if (name == NULL)
+ name = attrgrpDecl->name;
+ if (attrgrpDecl->attributes != NULL)
+ return;
+ if (attrgrpDecl->ref != NULL) {
+ xmlSchemaAttributeGroupPtr ref;
+
+ ref = xmlHashLookup2(ctxt->schema->attrgrpDecl, attrgrpDecl->ref,
+ attrgrpDecl->refNs);
+ if (ref == NULL) {
+ xmlSchemaPErr(ctxt, attrgrpDecl->node,
+ XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP,
+ "Schemas: attribute group %s reference %s not found\n",
+ name, attrgrpDecl->ref);
+ return;
+ }
+ xmlSchemaAttrGrpFixup(ref, ctxt, NULL);
+ attrgrpDecl->attributes = ref->attributes;
+ } else {
+ xmlSchemaPErr(ctxt, attrgrpDecl->node, XML_SCHEMAP_NOATTR_NOREF,
+ "Schemas: attribute %s has no attributes nor reference\n",
+ name, NULL);
+ }
+}
+
+/**
+ * xmlSchemaAttrFixup:
+ * @attrDecl: the schema attribute definition
+ * @ctxt: the schema parser context
+ * @name: the attribute name
+ *
+ * Fixes finish doing the computations on the attributes definitions
+ */
+static void
+xmlSchemaAttrFixup(xmlSchemaAttributePtr attrDecl,
+ xmlSchemaParserCtxtPtr ctxt, const xmlChar * name)
+{
+ if (name == NULL)
+ name = attrDecl->name;
+ if (attrDecl->subtypes != NULL)
+ return;
+ if (attrDecl->typeName != NULL) {
+ xmlSchemaTypePtr type;
+
+ type = xmlSchemaGetType(ctxt->schema, attrDecl->typeName,
+ attrDecl->typeNs);
+ if (type == NULL) {
+ xmlSchemaPErr(ctxt, attrDecl->node, XML_SCHEMAP_UNKNOWN_TYPE,
+ "Schemas: attribute %s type %s not found\n",
+ name, attrDecl->typeName);
+ }
+ attrDecl->subtypes = type;
+ } else if (attrDecl->ref != NULL) {
+ xmlSchemaAttributePtr ref;
+
+ ref = xmlHashLookup2(ctxt->schema->attrDecl, attrDecl->ref,
+ attrDecl->refNs);
+ if (ref == NULL) {
+ xmlSchemaPErr(ctxt, attrDecl->node, XML_SCHEMAP_UNKNOWN_REF,
+ "Schemas: attribute %s reference %s not found\n",
+ name, attrDecl->ref);
+ return;
+ }
+ xmlSchemaAttrFixup(ref, ctxt, NULL);
+ attrDecl->subtypes = ref->subtypes;
+ } else {
+ xmlSchemaPErr(ctxt, attrDecl->node, XML_SCHEMAP_NOTYPE_NOREF,
+ "Schemas: attribute %s has no type nor reference\n",
+ name, NULL);
+ }
+}
+
+/**
+ * xmlSchemaParse:
+ * @ctxt: a schema validation context
+ *
+ * parse a schema definition resource and build an internal
+ * XML Shema struture which can be used to validate instances.
+ * *WARNING* this interface is highly subject to change
+ *
+ * Returns the internal XML Schema structure built from the resource or
+ * NULL in case of error
+ */
+xmlSchemaPtr
+xmlSchemaParse(xmlSchemaParserCtxtPtr ctxt)
+{
+ xmlSchemaPtr ret = NULL;
+ xmlDocPtr doc;
+ xmlNodePtr root;
+ int nberrors;
+ int preserve = 0;
+
+ xmlSchemaInitTypes();
+
+ if (ctxt == NULL)
+ return (NULL);
+
+ nberrors = ctxt->nberrors;
+ ctxt->nberrors = 0;
+ ctxt->counter = 0;
+ ctxt->container = NULL;
+
+ /*
+ * First step is to parse the input document into an DOM/Infoset
+ */
+ if (ctxt->URL != NULL) {
+ doc = xmlReadFile((const char *) ctxt->URL, NULL,
+ SCHEMAS_PARSE_OPTIONS);
+ if (doc == NULL) {
+ xmlSchemaPErr(ctxt, NULL,
+ XML_SCHEMAP_FAILED_LOAD,
+ "xmlSchemaParse: could not load %s\n",
+ ctxt->URL, NULL);
+ return (NULL);
+ }
+ } else if (ctxt->buffer != NULL) {
+ doc = xmlReadMemory(ctxt->buffer, ctxt->size, NULL, NULL,
+ SCHEMAS_PARSE_OPTIONS);
+ if (doc == NULL) {
+ xmlSchemaPErr(ctxt, NULL,
+ XML_SCHEMAP_FAILED_PARSE,
+ "xmlSchemaParse: 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);
+ } else if (ctxt->doc != NULL) {
+ doc = ctxt->doc;
+ preserve = 1;
+ } else {
+ xmlSchemaPErr(ctxt, NULL,
+ XML_SCHEMAP_NOTHING_TO_PARSE,
+ "xmlSchemaParse: could not parse\n",
+ NULL, NULL);
+ return (NULL);
+ }
+
+ /*
+ * Then extract the root and Schema parse it
+ */
+ root = xmlDocGetRootElement(doc);
+ if (root == NULL) {
+ xmlSchemaPErr(ctxt, (xmlNodePtr) doc,
+ XML_SCHEMAP_NOROOT,
+ "schemas has no root", NULL, NULL);
+ if (!preserve) {
+ xmlFreeDoc(doc);
+ }
+ return (NULL);
+ }
+
+ /*
+ * Remove all the blank text nodes
+ */
+ xmlSchemaCleanupDoc(ctxt, root);
+
+ /*
+ * Then do the parsing for good
+ */
+ ret = xmlSchemaParseSchema(ctxt, root);
+ if (ret == NULL) {
+ if (!preserve) {
+ xmlFreeDoc(doc);
+ }
+ return (NULL);
+ }
+ ret->doc = doc;
+ ret->preserve = preserve;
+
+ /*
+ * Then fix all the references.
+ */
+ ctxt->schema = ret;
+ xmlHashScanFull(ret->elemDecl,
+ (xmlHashScannerFull) xmlSchemaRefFixupCallback, ctxt);
+
+ /*
+ * Then fixup all attributes declarations
+ */
+ xmlHashScan(ret->attrDecl, (xmlHashScanner) xmlSchemaAttrFixup, ctxt);
+
+ /*
+ * Then fixup all attributes group declarations
+ */
+ xmlHashScan(ret->attrgrpDecl, (xmlHashScanner) xmlSchemaAttrGrpFixup,
+ ctxt);
+
+ /*
+ * Then fixup all types properties
+ */
+ xmlHashScan(ret->typeDecl, (xmlHashScanner) xmlSchemaTypeFixup, ctxt);
+
+ /*
+ * Then build the content model for all elements
+ */
+ xmlHashScan(ret->elemDecl,
+ (xmlHashScanner) xmlSchemaBuildContentModel, ctxt);
+
+ /*
+ * Then check the defaults part of the type like facets values
+ */
+ xmlHashScan(ret->typeDecl, (xmlHashScanner) xmlSchemaCheckDefaults,
+ ctxt);
+
+ if (ctxt->nberrors != 0) {
+ xmlSchemaFree(ret);
+ ret = NULL;
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchemaSetParserErrors:
+ * @ctxt: a schema validation context
+ * @err: the error callback
+ * @warn: the warning callback
+ * @ctx: contextual data for the callbacks
+ *
+ * Set the callback functions used to handle errors for a validation context
+ */
+void
+xmlSchemaSetParserErrors(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaValidityErrorFunc err,
+ xmlSchemaValidityWarningFunc warn, void *ctx)
+{
+ if (ctxt == NULL)
+ return;
+ ctxt->error = err;
+ ctxt->warning = warn;
+ ctxt->userData = ctx;
+}
+
+/**
+ * xmlSchemaFacetTypeToString:
+ * @type: the facet type
+ *
+ * Convert the xmlSchemaTypeType to a char string.
+ *
+ * Returns the char string representation of the facet type if the
+ * type is a facet and an "Internal Error" string otherwise.
+ */
+static const char *
+xmlSchemaFacetTypeToString(xmlSchemaTypeType type)
+{
+ switch (type) {
+ case XML_SCHEMA_FACET_PATTERN:
+ return ("pattern");
+ case XML_SCHEMA_FACET_MAXEXCLUSIVE:
+ return ("maxExclusive");
+ case XML_SCHEMA_FACET_MAXINCLUSIVE:
+ return ("maxInclusive");
+ case XML_SCHEMA_FACET_MINEXCLUSIVE:
+ return ("minExclusive");
+ case XML_SCHEMA_FACET_MININCLUSIVE:
+ return ("minInclusive");
+ case XML_SCHEMA_FACET_WHITESPACE:
+ return ("whiteSpace");
+ case XML_SCHEMA_FACET_ENUMERATION:
+ return ("enumeration");
+ case XML_SCHEMA_FACET_LENGTH:
+ return ("length");
+ case XML_SCHEMA_FACET_MAXLENGTH:
+ return ("maxLength");
+ case XML_SCHEMA_FACET_MINLENGTH:
+ return ("minLength");
+ case XML_SCHEMA_FACET_TOTALDIGITS:
+ return ("totalDigits");
+ case XML_SCHEMA_FACET_FRACTIONDIGITS:
+ return ("fractionDigits");
+ default:
+ break;
+ }
+ return ("Internal Error");
+}
+
+/**
+ * xmlSchemaValidateFacets:
+ * @ctxt: a schema validation context
+ * @base: the base type
+ * @facets: the list of facets to check
+ * @value: the lexical repr of the value to validate
+ * @val: the precomputed value
+ *
+ * Check a value against all facet conditions
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateFacets(xmlSchemaValidCtxtPtr ctxt,
+ xmlSchemaTypePtr base,
+ xmlSchemaFacetPtr facets, const xmlChar * value)
+{
+ int ret = 0;
+ int tmp = 0;
+ xmlSchemaTypeType type;
+ xmlSchemaFacetPtr facet = facets;
+
+ while (facet != NULL) {
+ type = facet->type;
+ if (type == XML_SCHEMA_FACET_ENUMERATION) {
+ tmp = 1;
+
+ while (facet != NULL) {
+ tmp =
+ xmlSchemaValidateFacet(base, facet, value,
+ ctxt->value);
+ if (tmp == 0) {
+ return 0;
+ }
+ facet = facet->next;
+ }
+ } else
+ tmp = xmlSchemaValidateFacet(base, facet, value, ctxt->value);
+
+ if (tmp != 0) {
+ ret = tmp;
+ xmlSchemaVErr(ctxt, ctxt->cur, XML_SCHEMAS_ERR_FACET, "Failed to validate type with facet %s\n", (const xmlChar *) xmlSchemaFacetTypeToString(type), NULL);
+ }
+ if (facet != NULL)
+ facet = facet->next;
+ }
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Simple type validation *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchemaValidateSimpleValue:
+ * @ctxt: a schema validation context
+ * @type: the type declaration
+ * @value: the value to validate
+ *
+ * Validate a value against a simple type
+ *
+ * Returns 0 if the value is valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateSimpleValue(xmlSchemaValidCtxtPtr ctxt,
+ xmlSchemaTypePtr type, const xmlChar * value)
+{
+ int ret = 0;
+
+ /*
+ * First normalize the value accordingly to Schema Datatype
+ * 4.3.6 whiteSpace definition of the whiteSpace facet of type
+ */
+ /*
+ * Then check the normalized value against the lexical space of the
+ * type.
+ */
+ if (type->type == XML_SCHEMA_TYPE_BASIC) {
+ if (ctxt->value != NULL) {
+ xmlSchemaFreeValue(ctxt->value);
+ ctxt->value = NULL;
+ }
+ ret = xmlSchemaValPredefTypeNode(type, value, &(ctxt->value),
+ ctxt->cur);
+ if (ret != 0) {
+ xmlSchemaVErr(ctxt, ctxt->cur, XML_SCHEMAS_ERR_VALUE, "Failed to validate basic type %s\n", type->name, NULL);
+ }
+ } else if (type->type == XML_SCHEMA_TYPE_RESTRICTION) {
+ xmlSchemaTypePtr base;
+ xmlSchemaFacetPtr facet;
+
+ base = type->baseType;
+ if (base != NULL) {
+ ret = xmlSchemaValidateSimpleValue(ctxt, base, value);
+ } else if (type->subtypes != NULL) {
+ TODO
+ }
+
+ /*
+ * Do not validate facets or attributes when working on
+ * building the Schemas
+ */
+ if (ctxt->schema != NULL) {
+ if (ret == 0) {
+ facet = type->facets;
+ ret = xmlSchemaValidateFacets(ctxt, base, facet, value);
+ }
+ }
+ } else if (type->type == XML_SCHEMA_TYPE_SIMPLE) {
+ xmlSchemaTypePtr base;
+
+ base = type->subtypes;
+ if (base != NULL) {
+ ret = xmlSchemaValidateSimpleValue(ctxt, base, value);
+ } else {
+ TODO}
+ } else if (type->type == XML_SCHEMA_TYPE_LIST) {
+ xmlSchemaTypePtr base;
+ const xmlChar *cur, *end;
+ xmlChar *tmp;
+ int ret2;
+
+ base = type->subtypes;
+ if (base == NULL) {
+ xmlSchemaVErr(ctxt, type->node, XML_SCHEMAS_ERR_INTERNAL,
+ "Internal: List type %s has no base type\n",
+ type->name, NULL);
+ return (-1);
+ }
+ cur = value;
+ do {
+ while (IS_BLANK_CH(*cur))
+ cur++;
+ end = cur;
+ while ((*end != 0) && (!(IS_BLANK_CH(*end))))
+ end++;
+ if (end == cur)
+ break;
+ tmp = xmlStrndup(cur, end - cur);
+ ret2 = xmlSchemaValidateSimpleValue(ctxt, base, tmp);
+ xmlFree(tmp);
+ if (ret2 != 0)
+ ret = 1;
+ cur = end;
+ } while (*cur != 0);
+ } else {
+ TODO
+ }
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * DOM Validation code *
+ * *
+ ************************************************************************/
+
+static int xmlSchemaValidateContent(xmlSchemaValidCtxtPtr ctxt,
+ xmlNodePtr node);
+static int xmlSchemaValidateAttributes(xmlSchemaValidCtxtPtr ctxt,
+ xmlNodePtr elem,
+ xmlSchemaAttributePtr attributes);
+static int xmlSchemaValidateType(xmlSchemaValidCtxtPtr ctxt,
+ xmlNodePtr elem,
+ xmlSchemaElementPtr elemDecl,
+ xmlSchemaTypePtr type);
+
+/**
+ * xmlSchemaRegisterAttributes:
+ * @ctxt: a schema validation context
+ * @attrs: a list of attributes
+ *
+ * Register the list of attributes as the set to be validated on that element
+ *
+ * Returns -1 in case of error, 0 otherwise
+ */
+static int
+xmlSchemaRegisterAttributes(xmlSchemaValidCtxtPtr ctxt, xmlAttrPtr attrs)
+{
+ while (attrs != NULL) {
+ if ((attrs->ns != NULL) &&
+ (xmlStrEqual(attrs->ns->href, xmlSchemaInstanceNs))) {
+ attrs = attrs->next;
+ continue;
+ }
+ if (ctxt->attrNr >= ctxt->attrMax) {
+ xmlSchemaAttrStatePtr tmp;
+
+ ctxt->attrMax *= 2;
+ tmp = (xmlSchemaAttrStatePtr)
+ xmlRealloc(ctxt->attr, ctxt->attrMax *
+ sizeof(xmlSchemaAttrState));
+ if (tmp == NULL) {
+ xmlSchemaVErrMemory(ctxt, "registering attributes", NULL);
+ ctxt->attrMax /= 2;
+ return (-1);
+ }
+ ctxt->attr = tmp;
+ }
+ ctxt->attr[ctxt->attrNr].attr = attrs;
+ ctxt->attr[ctxt->attrNr].state = XML_SCHEMAS_ATTR_UNKNOWN;
+ ctxt->attrNr++;
+ attrs = attrs->next;
+ }
+ return (0);
+}
+
+/**
+ * xmlSchemaCheckAttributes:
+ * @ctxt: a schema validation context
+ * @node: the node carrying it.
+ *
+ * Check that the registered set of attributes on the current node
+ * has been properly validated.
+ *
+ * Returns 0 if validity constraints are met, 1 otherwise.
+ */
+static int
+xmlSchemaCheckAttributes(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node)
+{
+ int ret = 0;
+ int i;
+
+ for (i = ctxt->attrBase; i < ctxt->attrNr; i++) {
+ if (ctxt->attr[i].attr == NULL)
+ break;
+ if (ctxt->attr[i].state == XML_SCHEMAS_ATTR_UNKNOWN) {
+ ret = 1;
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_ATTRUNKNOWN, "Attribute %s on %s is unknown\n", ctxt->attr[i].attr->name, node->name);
+ }
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchemaValidateSimpleContent:
+ * @ctxt: a schema validation context
+ * @elem: an element
+ * @type: the type declaration
+ *
+ * Validate the content of an element expected to be a simple type
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateSimpleContent(xmlSchemaValidCtxtPtr ctxt,
+ xmlNodePtr node ATTRIBUTE_UNUSED)
+{
+ xmlNodePtr child;
+ xmlSchemaTypePtr type, base;
+ xmlChar *value;
+ int ret = 0;
+
+ child = ctxt->node;
+ type = ctxt->type;
+
+ /*
+ * Validation Rule: Element Locally Valid (Type): 3.1.3
+ */
+ value = xmlNodeGetContent(child);
+ /* xmlSchemaValidateSimpleValue(ctxt, type, value); */
+ switch (type->type) {
+ case XML_SCHEMA_TYPE_RESTRICTION:{
+ xmlSchemaFacetPtr facet;
+
+ base = type->baseType;
+ if (base != NULL) {
+ ret = xmlSchemaValidateSimpleValue(ctxt, base, value);
+ } else {
+ TODO}
+ if (ret == 0) {
+ facet = type->facets;
+ ret =
+ xmlSchemaValidateFacets(ctxt, base, facet, value);
+ }
+ if ((ret == 0) && (type->attributes != NULL)) {
+ ret = xmlSchemaValidateAttributes(ctxt, node,
+ type->attributes);
+ }
+ break;
+ }
+ case XML_SCHEMA_TYPE_EXTENSION:{
+ TODO
+ break;
+ }
+ default:
+ TODO
+ }
+ if (value != NULL)
+ xmlFree(value);
+
+ return (ret);
+}
+
+/**
+ * xmlSchemaValidateCheckNodeList
+ * @nodelist: the list of nodes
+ *
+ * Check the node list is only made of text nodes and entities pointing
+ * to text nodes
+ *
+ * Returns 1 if true, 0 if false and -1 in case of error
+ */
+static int
+xmlSchemaValidateCheckNodeList(xmlNodePtr nodelist)
+{
+ while (nodelist != NULL) {
+ if (nodelist->type == XML_ENTITY_REF_NODE) {
+ TODO /* implement recursion in the entity content */
+ }
+ if ((nodelist->type != XML_TEXT_NODE) &&
+ (nodelist->type != XML_COMMENT_NODE) &&
+ (nodelist->type != XML_PI_NODE) &&
+ (nodelist->type != XML_PI_NODE)) {
+ return (0);
+ }
+ nodelist = nodelist->next;
+ }
+ return (1);
+}
+
+/**
+ * xmlSchemaSkipIgnored:
+ * @ctxt: a schema validation context
+ * @type: the current type context
+ * @node: the top node.
+ *
+ * Skip ignorable nodes in that context
+ *
+ * Returns the new sibling
+ * number otherwise and -1 in case of internal or API error.
+ */
+static xmlNodePtr
+xmlSchemaSkipIgnored(xmlSchemaValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ xmlSchemaTypePtr type, xmlNodePtr node)
+{
+ int mixed = 0;
+
+ /*
+ * TODO complete and handle entities
+ */
+ mixed = ((type->contentType == XML_SCHEMA_CONTENT_MIXED) ||
+ (type->contentType == XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS));
+ while ((node != NULL) &&
+ ((node->type == XML_COMMENT_NODE) ||
+ ((mixed == 1) && (node->type == XML_TEXT_NODE)) ||
+ (((type->contentType == XML_SCHEMA_CONTENT_ELEMENTS) &&
+ (node->type == XML_TEXT_NODE) && (IS_BLANK_NODE(node)))))) {
+ node = node->next;
+ }
+ return (node);
+}
+
+/**
+ * xmlSchemaValidateCallback:
+ * @ctxt: a schema validation context
+ * @name: the name of the element detected (might be NULL)
+ * @type: the type
+ *
+ * A transition has been made in the automata associated to an element
+ * content model
+ */
+static void
+xmlSchemaValidateCallback(xmlSchemaValidCtxtPtr ctxt,
+ const xmlChar * name ATTRIBUTE_UNUSED,
+ xmlSchemaTypePtr type, xmlNodePtr node)
+{
+ xmlSchemaTypePtr oldtype = ctxt->type;
+ xmlNodePtr oldnode = ctxt->node;
+
+#ifdef DEBUG_CONTENT
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlSchemaValidateCallback: %s, %s, %s\n",
+ name, type->name, node->name);
+#endif
+ ctxt->type = type;
+ ctxt->node = node;
+ xmlSchemaValidateContent(ctxt, node);
+ ctxt->type = oldtype;
+ ctxt->node = oldnode;
+}
+
+
+#if 0
+
+/**
+ * xmlSchemaValidateSimpleRestrictionType:
+ * @ctxt: a schema validation context
+ * @node: the top node.
+ *
+ * Validate the content of a restriction type.
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateSimpleRestrictionType(xmlSchemaValidCtxtPtr ctxt,
+ xmlNodePtr node)
+{
+ xmlNodePtr child;
+ xmlSchemaTypePtr type;
+ int ret;
+
+ child = ctxt->node;
+ type = ctxt->type;
+
+ if ((ctxt == NULL) || (type == NULL)) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INTERNAL, "Internal error: xmlSchemaValidateSimpleRestrictionType %s\n", node->name, NULL);
+ return (-1);
+ }
+ /*
+ * Only text and text based entities references shall be found there
+ */
+ ret = xmlSchemaValidateCheckNodeList(child);
+ if (ret < 0) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INTERNAL, "Internal error: xmlSchemaValidateSimpleType %s content\n", node->name, NULL);
+ return (-1);
+ } else if (ret == 0) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_NOTSIMPLE, "Element %s content is not a simple type\n", node->name, NULL);
+ return (-1);
+ }
+ ctxt->type = type->subtypes;
+ xmlSchemaValidateContent(ctxt, node);
+ ctxt->type = type;
+ return (ret);
+}
+#endif
+
+/**
+ * xmlSchemaValidateSimpleType:
+ * @ctxt: a schema validation context
+ * @node: the top node.
+ *
+ * Validate the content of an simple type.
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateSimpleType(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlNodePtr child;
+ xmlSchemaTypePtr type;
+ xmlAttrPtr attr;
+ int ret;
+
+ child = ctxt->node;
+ type = ctxt->type;
+
+ if ((ctxt == NULL) || (type == NULL)) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INTERNAL, "Internal error: xmlSchemaValidateSimpleType %s\n", node->name, NULL);
+ return (-1);
+ }
+ /*
+ * Only text and text based entities references shall be found there
+ */
+ ret = xmlSchemaValidateCheckNodeList(child);
+ if (ret < 0) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INTERNAL, "Internal error: xmlSchemaValidateSimpleType %s content\n", node->name, NULL);
+ return (-1);
+ } else if (ret == 0) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_NOTSIMPLE, "Element %s content is not a simple type\n", node->name, NULL);
+ return (-1);
+ }
+ /*
+ * Validation Rule: Element Locally Valid (Type): 3.1.1
+ */
+ attr = node->properties;
+ while (attr != NULL) {
+ if ((attr->ns == NULL) ||
+ (!xmlStrEqual(attr->ns->href, xmlSchemaInstanceNs)) ||
+ ((!xmlStrEqual(attr->name, BAD_CAST "type")) &&
+ (!xmlStrEqual(attr->name, BAD_CAST "nil")) &&
+ (!xmlStrEqual(attr->name, BAD_CAST "schemasLocation")) &&
+ (!xmlStrEqual
+ (attr->name, BAD_CAST "noNamespaceSchemaLocation")))) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INVALIDATTR, "Element %s: attribute %s should not be present\n", node->name, attr->name);
+ return (ctxt->err);
+ }
+ }
+
+ ctxt->type = type->subtypes;
+ ret = xmlSchemaValidateSimpleContent(ctxt, node);
+ ctxt->type = type;
+ return (ret);
+}
+
+/**
+ * xmlSchemaValidateElementType:
+ * @ctxt: a schema validation context
+ * @node: the top node.
+ *
+ * Validate the content of an element type.
+ * Validation Rule: Element Locally Valid (Complex Type)
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateElementType(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlNodePtr child;
+ xmlSchemaTypePtr type;
+ xmlRegExecCtxtPtr oldregexp; /* cont model of the parent */
+ xmlSchemaElementPtr decl;
+ int ret, attrBase;
+
+ oldregexp = ctxt->regexp;
+
+ child = ctxt->node;
+ type = ctxt->type;
+
+ if ((ctxt == NULL) || (type == NULL)) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INTERNAL, "Internal error: xmlSchemaValidateElementType\n", node->name, NULL);
+ return (-1);
+ }
+ if (child == NULL) {
+ if (type->minOccurs > 0) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_MISSING, "Element %s: missing child %s\n", node->name, type->name);
+ }
+ return (ctxt->err);
+ }
+
+ /*
+ * Verify the element matches
+ */
+ if (!xmlStrEqual(child->name, type->name)) {
+ xmlSchemaVErr3(ctxt, node, XML_SCHEMAS_ERR_WRONGELEM, "Element %s: missing child %s found %s\n", node->name, type->name, child->name);
+ return (ctxt->err);
+ }
+ /*
+ * Verify the attributes
+ */
+ attrBase = ctxt->attrBase;
+ ctxt->attrBase = ctxt->attrNr;
+ xmlSchemaRegisterAttributes(ctxt, child->properties);
+ xmlSchemaValidateAttributes(ctxt, child, type->attributes);
+ /*
+ * Verify the element content recursively
+ */
+ decl = (xmlSchemaElementPtr) type;
+ oldregexp = ctxt->regexp;
+ if (decl->contModel != NULL) {
+ ctxt->regexp = xmlRegNewExecCtxt(decl->contModel,
+ (xmlRegExecCallbacks)
+ xmlSchemaValidateCallback, ctxt);
+#ifdef DEBUG_AUTOMATA
+ xmlGenericError(xmlGenericErrorContext, "====> %s\n", node->name);
+#endif
+ }
+ xmlSchemaValidateType(ctxt, child, (xmlSchemaElementPtr) type,
+ type->subtypes);
+
+ if (decl->contModel != NULL) {
+ ret = xmlRegExecPushString(ctxt->regexp, NULL, NULL);
+#ifdef DEBUG_AUTOMATA
+ xmlGenericError(xmlGenericErrorContext,
+ "====> %s : %d\n", node->name, ret);
+#endif
+ if (ret == 0) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_ELEMCONT, "Element %s content check failed\n", node->name, NULL);
+ } else if (ret < 0) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_ELEMCONT, "Element %s content check failure\n", node->name, NULL);
+#ifdef DEBUG_CONTENT
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Element %s content check succeeded\n",
+ node->name);
+
+#endif
+ }
+ xmlRegFreeExecCtxt(ctxt->regexp);
+ }
+ /*
+ * Verify that all attributes were Schemas-validated
+ */
+ xmlSchemaCheckAttributes(ctxt, node);
+ ctxt->attrNr = ctxt->attrBase;
+ ctxt->attrBase = attrBase;
+
+ ctxt->regexp = oldregexp;
+
+ ctxt->node = child;
+ ctxt->type = type;
+ return (ctxt->err);
+}
+
+/**
+ * xmlSchemaValidateBasicType:
+ * @ctxt: a schema validation context
+ * @node: the top node.
+ *
+ * Validate the content of an element expected to be a basic type type
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateBasicType(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node)
+{
+ int ret;
+ xmlNodePtr child, cur;
+ xmlSchemaTypePtr type;
+ xmlChar *value; /* lexical representation */
+
+ child = ctxt->node;
+ type = ctxt->type;
+
+ if ((ctxt == NULL) || (type == NULL)) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INTERNAL, "Internal error: xmlSchemaValidateBasicType\n", node->name, NULL);
+ return (-1);
+ }
+ /*
+ * First check the content model of the node.
+ */
+ cur = child;
+ while (cur != NULL) {
+ switch (cur->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ break;
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ TODO break;
+ case XML_ELEMENT_NODE:
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INVALIDELEM, "Element %s: child %s should not be present\n", node->name, cur->name);
+ return (ctxt->err);
+ case XML_ATTRIBUTE_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_NAMESPACE_DECL:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INVALIDELEM, "Element %s: node type of node unexpected here\n", node->name, NULL);
+ return (ctxt->err);
+ }
+ cur = cur->next;
+ }
+ if (child == NULL)
+ value = NULL;
+ else
+ value = xmlNodeGetContent(child->parent);
+
+ if (ctxt->value != NULL) {
+ xmlSchemaFreeValue(ctxt->value);
+ ctxt->value = NULL;
+ }
+ ret = xmlSchemaValidatePredefinedType(type, value, &(ctxt->value));
+ if (value != NULL)
+ xmlFree(value);
+ if (ret != 0) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_VALUE, "Element %s: failed to validate basic type %s\n", node->name, type->name);
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchemaValidateComplexType:
+ * @ctxt: a schema validation context
+ * @node: the top node.
+ *
+ * Validate the content of an element expected to be a complex type type
+ * xmlschema-1.html#cvc-complex-type
+ * Validation Rule: Element Locally Valid (Complex Type)
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateComplexType(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlNodePtr child;
+ xmlSchemaTypePtr type, subtype;
+ int ret;
+
+ child = ctxt->node;
+ type = ctxt->type;
+ ctxt->cur = node;
+
+ switch (type->contentType) {
+ case XML_SCHEMA_CONTENT_EMPTY:
+ if (type->baseType != NULL) {
+ } else if (child != NULL) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_NOTEMPTY, "Element %s is supposed to be empty\n", node->name, NULL);
+ }
+ if (type->attributes != NULL) {
+ xmlSchemaValidateAttributes(ctxt, node, type->attributes);
+ }
+ subtype = type->subtypes;
+ while (subtype != NULL) {
+ ctxt->type = subtype;
+ xmlSchemaValidateComplexType(ctxt, node);
+ subtype = subtype->next;
+ }
+ break;
+ case XML_SCHEMA_CONTENT_ELEMENTS:
+ case XML_SCHEMA_CONTENT_MIXED:
+ case XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS:
+ /*
+ * Skip ignorable nodes in that context
+ */
+ child = xmlSchemaSkipIgnored(ctxt, type, child);
+ while (child != NULL) {
+ if (child->type == XML_ELEMENT_NODE) {
+ ret = xmlRegExecPushString(ctxt->regexp,
+ child->name, child);
+#ifdef DEBUG_AUTOMATA
+ if (ret < 0)
+ xmlGenericError(xmlGenericErrorContext,
+ " --> %s Error\n", child->name);
+ else
+ xmlGenericError(xmlGenericErrorContext,
+ " --> %s\n", child->name);
+#endif
+ }
+ child = child->next;
+ /*
+ * Skip ignorable nodes in that context
+ */
+ child = xmlSchemaSkipIgnored(ctxt, type, child);
+ }
+ if (type->attributes != NULL) {
+ xmlSchemaValidateAttributes(ctxt, node, type->attributes);
+ }
+ break;
+ case XML_SCHEMA_CONTENT_BASIC:{
+ if (type->subtypes != NULL) {
+ ctxt->type = type->subtypes;
+ xmlSchemaValidateComplexType(ctxt, node);
+ }
+ if (type->baseType != NULL) {
+ ctxt->type = type->baseType;
+ xmlSchemaValidateBasicType(ctxt, node);
+ }
+ if (type->attributes != NULL) {
+ xmlSchemaValidateAttributes(ctxt, node,
+ type->attributes);
+ }
+ ctxt->type = type;
+ break;
+ }
+ case XML_SCHEMA_CONTENT_SIMPLE:{
+ if (type->subtypes != NULL) {
+ ctxt->type = type->subtypes;
+ xmlSchemaValidateComplexType(ctxt, node);
+ }
+ if (type->baseType != NULL) {
+ ctxt->type = type->baseType;
+ xmlSchemaValidateComplexType(ctxt, node);
+ }
+ if (type->attributes != NULL) {
+ xmlSchemaValidateAttributes(ctxt, node,
+ type->attributes);
+ }
+ ctxt->type = type;
+ break;
+ }
+ default:
+ TODO xmlGenericError(xmlGenericErrorContext,
+ "unimplemented content type %d\n",
+ type->contentType);
+ }
+ return (ctxt->err);
+}
+
+/**
+ * xmlSchemaValidateContent:
+ * @ctxt: a schema validation context
+ * @elem: an element
+ * @type: the type declaration
+ *
+ * Validate the content of an element against the type.
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateContent(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node)
+{
+ xmlNodePtr child;
+ xmlSchemaTypePtr type;
+
+ child = ctxt->node;
+ type = ctxt->type;
+ ctxt->cur = node;
+
+ xmlSchemaValidateAttributes(ctxt, node, type->attributes);
+ ctxt->cur = node;
+
+ switch (type->type) {
+ case XML_SCHEMA_TYPE_ANY:
+ /* Any type will do it, fine */
+ TODO /* handle recursivity */
+ break;
+ case XML_SCHEMA_TYPE_COMPLEX:
+ xmlSchemaValidateComplexType(ctxt, node);
+ break;
+ case XML_SCHEMA_TYPE_ELEMENT:{
+ xmlSchemaElementPtr decl = (xmlSchemaElementPtr) type;
+
+ /*
+ * Handle element reference here
+ */
+ if (decl->ref != NULL) {
+ if (decl->refDecl == NULL) {
+ xmlSchemaVErr(ctxt, node, XML_SCHEMAS_ERR_INTERNAL, "Internal error: element reference %s not resolved\n", decl->ref, NULL);
+ return (-1);
+ }
+ ctxt->type = (xmlSchemaTypePtr) decl->refDecl;
+ decl = decl->refDecl;
+ }
+ xmlSchemaValidateElementType(ctxt, node);
+ ctxt->type = type;
+ break;
+ }
+ case XML_SCHEMA_TYPE_BASIC:
+ xmlSchemaValidateBasicType(ctxt, node);
+ break;
+ case XML_SCHEMA_TYPE_FACET:
+ TODO break;
+ case XML_SCHEMA_TYPE_SIMPLE:
+ xmlSchemaValidateSimpleType(ctxt, node);
+ break;
+ case XML_SCHEMA_TYPE_SEQUENCE:
+ TODO break;
+ case XML_SCHEMA_TYPE_CHOICE:
+ TODO break;
+ case XML_SCHEMA_TYPE_ALL:
+ TODO break;
+ case XML_SCHEMA_TYPE_SIMPLE_CONTENT:
+ TODO break;
+ case XML_SCHEMA_TYPE_COMPLEX_CONTENT:
+ TODO break;
+ case XML_SCHEMA_TYPE_UR:
+ TODO break;
+ case XML_SCHEMA_TYPE_RESTRICTION:
+ /*xmlSchemaValidateRestrictionType(ctxt, node); */
+ TODO break;
+ case XML_SCHEMA_TYPE_EXTENSION:
+ TODO break;
+ case XML_SCHEMA_TYPE_ATTRIBUTE:
+ TODO break;
+ case XML_SCHEMA_TYPE_GROUP:
+ TODO break;
+ case XML_SCHEMA_TYPE_NOTATION:
+ TODO break;
+ case XML_SCHEMA_TYPE_LIST:
+ TODO break;
+ case XML_SCHEMA_TYPE_UNION:
+ TODO break;
+ case XML_SCHEMA_FACET_MININCLUSIVE:
+ TODO break;
+ case XML_SCHEMA_FACET_MINEXCLUSIVE:
+ TODO break;
+ case XML_SCHEMA_FACET_MAXINCLUSIVE:
+ TODO break;
+ case XML_SCHEMA_FACET_MAXEXCLUSIVE:
+ TODO break;
+ case XML_SCHEMA_FACET_TOTALDIGITS:
+ TODO break;
+ case XML_SCHEMA_FACET_FRACTIONDIGITS:
+ TODO break;
+ case XML_SCHEMA_FACET_PATTERN:
+ TODO break;
+ case XML_SCHEMA_FACET_ENUMERATION:
+ TODO break;
+ case XML_SCHEMA_FACET_WHITESPACE:
+ TODO break;
+ case XML_SCHEMA_FACET_LENGTH:
+ TODO break;
+ case XML_SCHEMA_FACET_MAXLENGTH:
+ TODO break;
+ case XML_SCHEMA_FACET_MINLENGTH:
+ TODO break;
+ case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
+ TODO break;
+ }
+ xmlSchemaValidateAttributes(ctxt, node, type->attributes);
+
+ if (ctxt->node == NULL)
+ return (ctxt->err);
+ ctxt->node = ctxt->node->next;
+ ctxt->type = type->next;
+ return (ctxt->err);
+}
+
+/**
+ * xmlSchemaValidateType:
+ * @ctxt: a schema validation context
+ * @elem: an element
+ * @type: the list of type declarations
+ *
+ * Validate the content of an element against the types.
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateType(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr elem,
+ xmlSchemaElementPtr elemDecl, xmlSchemaTypePtr type)
+{
+ xmlChar *nil;
+
+ if ((elem == NULL) || (type == NULL) || (elemDecl == NULL))
+ return (0);
+
+ /*
+ * 3.3.4 : 2
+ */
+ if (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT) {
+ xmlSchemaVErr(ctxt, elem, XML_SCHEMAS_ERR_ISABSTRACT, "Element %s is abstract\n", elem->name, NULL);
+ return (ctxt->err);
+ }
+ /*
+ * 3.3.4: 3
+ */
+ nil = xmlGetNsProp(elem, BAD_CAST "nil", xmlSchemaInstanceNs);
+ if (elemDecl->flags & XML_SCHEMAS_ELEM_NILLABLE) {
+ /* 3.3.4: 3.2 */
+ if (xmlStrEqual(nil, BAD_CAST "true")) {
+ if (elem->children != NULL) {
+ xmlSchemaVErr(ctxt, elem, XML_SCHEMAS_ERR_NOTEMPTY, "Element %s is not empty\n", elem->name, NULL);
+ return (ctxt->err);
+ }
+ if ((elemDecl->flags & XML_SCHEMAS_ELEM_FIXED) &&
+ (elemDecl->value != NULL)) {
+ xmlSchemaVErr(ctxt, elem, XML_SCHEMAS_ERR_HAVEDEFAULT, "Empty element %s cannot get a fixed value\n", elem->name, NULL);
+ return (ctxt->err);
+ }
+ }
+ } else {
+ /* 3.3.4: 3.1 */
+ if (nil != NULL) {
+ xmlSchemaVErr(ctxt, elem, XML_SCHEMAS_ERR_NOTNILLABLE, "Element %s with xs:nil but not nillable\n", elem->name, NULL);
+ xmlFree(nil);
+ return (ctxt->err);
+ }
+ }
+
+ /* TODO 3.3.4: 4 if the element carries xs:type */
+
+ ctxt->type = elemDecl->subtypes;
+ ctxt->node = elem->children;
+ xmlSchemaValidateContent(ctxt, elem);
+ xmlSchemaValidateAttributes(ctxt, elem, elemDecl->attributes);
+
+ return (ctxt->err);
+}
+
+
+/**
+ * xmlSchemaValidateAttributes:
+ * @ctxt: a schema validation context
+ * @elem: an element
+ * @attributes: the list of attribute declarations
+ *
+ * Validate the attributes of an element.
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateAttributes(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr elem,
+ xmlSchemaAttributePtr attributes)
+{
+ int i, ret;
+ xmlAttrPtr attr;
+ xmlChar *value;
+ xmlSchemaAttributeGroupPtr group = NULL;
+
+ if (attributes == NULL)
+ return (0);
+ while (attributes != NULL) {
+ /*
+ * Handle attribute groups
+ */
+ if (attributes->type == XML_SCHEMA_TYPE_ATTRIBUTEGROUP) {
+ group = (xmlSchemaAttributeGroupPtr) attributes;
+ xmlSchemaValidateAttributes(ctxt, elem, group->attributes);
+ attributes = group->next;
+ continue;
+ }
+ for (i = ctxt->attrBase; i < ctxt->attrNr; i++) {
+ attr = ctxt->attr[i].attr;
+ if (attr == NULL)
+ continue;
+ if (attributes->ref != NULL) {
+ if (!xmlStrEqual(attr->name, attributes->ref))
+ continue;
+ if (attr->ns != NULL) {
+ if ((attributes->refNs == NULL) ||
+ (!xmlStrEqual(attr->ns->href, attributes->refNs)))
+ continue;
+ } else if (attributes->refNs != NULL) {
+ continue;
+ }
+ } else {
+ if (!xmlStrEqual(attr->name, attributes->name))
+ continue;
+ /*
+ * handle the namespaces checks here
+ */
+ if (attr->ns == NULL) {
+ /*
+ * accept an unqualified attribute only if the declaration
+ * is unqualified or if the schemas allowed it.
+ */
+ if ((attributes->targetNamespace != NULL) &&
+ ((attributes->flags & XML_SCHEMAS_ATTR_NSDEFAULT) == 0))
+ continue;
+ } else {
+ if (attributes->targetNamespace == NULL)
+ continue;
+ if (!xmlStrEqual(attributes->targetNamespace,
+ attr->ns->href))
+ continue;
+ }
+ }
+ ctxt->cur = (xmlNodePtr) attributes;
+ if (attributes->subtypes == NULL) {
+ xmlSchemaVErr(ctxt, (xmlNodePtr) attr, XML_SCHEMAS_ERR_INTERNAL, "Internal error: attribute %s type not resolved\n", attr->name, NULL);
+ continue;
+ }
+ value = xmlNodeListGetString(elem->doc, attr->children, 1);
+ ret = xmlSchemaValidateSimpleValue(ctxt, attributes->subtypes,
+ value);
+ if (ret != 0) {
+ xmlSchemaVErr(ctxt, (xmlNodePtr) attr, XML_SCHEMAS_ERR_ATTRINVALID, "attribute %s on %s does not match type\n", attr->name, elem->name);
+ } else {
+ ctxt->attr[i].state = XML_SCHEMAS_ATTR_CHECKED;
+ }
+ if (value != NULL) {
+ xmlFree(value);
+ }
+ }
+ attributes = attributes->next;
+ }
+ return (ctxt->err);
+}
+
+/**
+ * xmlSchemaValidateElement:
+ * @ctxt: a schema validation context
+ * @elem: an element
+ *
+ * Validate an element in a tree
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateElement(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr elem)
+{
+ xmlSchemaElementPtr elemDecl;
+ int ret, attrBase;
+
+ if (elem->ns != NULL) {
+ elemDecl = xmlHashLookup3(ctxt->schema->elemDecl,
+ elem->name, elem->ns->href, NULL);
+ } else {
+ elemDecl = xmlHashLookup3(ctxt->schema->elemDecl,
+ elem->name, NULL, NULL);
+ }
+ /*
+ * special case whe elementFormDefault is unqualified for top-level elem.
+ */
+ if ((elemDecl == NULL) && (elem->ns != NULL) &&
+ (elem->parent != NULL) && (elem->parent->type != XML_ELEMENT_NODE) &&
+ (xmlStrEqual(ctxt->schema->targetNamespace, elem->ns->href)) &&
+ ((ctxt->schema->flags & XML_SCHEMAS_QUALIF_ELEM) == 0)) {
+ elemDecl = xmlHashLookup3(ctxt->schema->elemDecl,
+ elem->name, NULL, NULL);
+ }
+
+ /*
+ * 3.3.4 : 1
+ */
+ if (elemDecl == NULL) {
+ xmlSchemaVErr(ctxt, elem, XML_SCHEMAS_ERR_UNDECLAREDELEM, "Element %s not declared\n", elem->name, NULL);
+ return (ctxt->err);
+ }
+ if (elemDecl->subtypes == NULL) {
+ xmlSchemaVErr(ctxt, elem, XML_SCHEMAS_ERR_NOTYPE, "Element %s has no type\n", elem->name, NULL);
+ return (ctxt->err);
+ }
+ /*
+ * Verify the attributes
+ */
+ attrBase = ctxt->attrBase;
+ ctxt->attrBase = ctxt->attrNr;
+ xmlSchemaRegisterAttributes(ctxt, elem->properties);
+ xmlSchemaValidateAttributes(ctxt, elem, elemDecl->attributes);
+ /*
+ * Verify the element content recursively
+ */
+ if (elemDecl->contModel != NULL) {
+ ctxt->regexp = xmlRegNewExecCtxt(elemDecl->contModel,
+ (xmlRegExecCallbacks)
+ xmlSchemaValidateCallback, ctxt);
+#ifdef DEBUG_AUTOMATA
+ xmlGenericError(xmlGenericErrorContext, "====> %s\n", elem->name);
+#endif
+ }
+ xmlSchemaValidateType(ctxt, elem, elemDecl, elemDecl->subtypes);
+ if (elemDecl->contModel != NULL) {
+ ret = xmlRegExecPushString(ctxt->regexp, NULL, NULL);
+#ifdef DEBUG_AUTOMATA
+ xmlGenericError(xmlGenericErrorContext,
+ "====> %s : %d\n", elem->name, ret);
+#endif
+ if (ret == 0) {
+ xmlSchemaVErr(ctxt, elem, XML_SCHEMAS_ERR_ELEMCONT, "Element %s content check failed\n", elem->name, NULL);
+ } else if (ret < 0) {
+ xmlSchemaVErr(ctxt, elem, XML_SCHEMAS_ERR_ELEMCONT, "Element %s content check failed\n", elem->name, NULL);
+#ifdef DEBUG_CONTENT
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Element %s content check succeeded\n",
+ elem->name);
+
+#endif
+ }
+ xmlRegFreeExecCtxt(ctxt->regexp);
+ }
+ /*
+ * Verify that all attributes were Schemas-validated
+ */
+ xmlSchemaCheckAttributes(ctxt, elem);
+ ctxt->attrNr = ctxt->attrBase;
+ ctxt->attrBase = attrBase;
+
+ return (ctxt->err);
+}
+
+/**
+ * xmlSchemaValidateDocument:
+ * @ctxt: a schema validation context
+ * @doc: a parsed document tree
+ *
+ * Validate a document tree in memory.
+ *
+ * Returns 0 if the document is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateDocument(xmlSchemaValidCtxtPtr ctxt, xmlDocPtr doc)
+{
+ xmlNodePtr root;
+ xmlSchemaElementPtr elemDecl;
+
+ root = xmlDocGetRootElement(doc);
+ if (root == NULL) {
+ xmlSchemaVErr(ctxt, (xmlNodePtr) doc, XML_SCHEMAS_ERR_NOROOT, "document has no root\n", NULL, NULL);
+ return (ctxt->err);
+ }
+ if (root->ns != NULL)
+ elemDecl = xmlHashLookup3(ctxt->schema->elemDecl,
+ root->name, root->ns->href, NULL);
+ else
+ elemDecl = xmlHashLookup3(ctxt->schema->elemDecl,
+ root->name, NULL, NULL);
+ /*
+ * special case whe elementFormDefault is unqualified for top-level elem.
+ */
+ if ((elemDecl == NULL) && (root->ns != NULL) &&
+ (xmlStrEqual(ctxt->schema->targetNamespace, root->ns->href)) &&
+ ((ctxt->schema->flags & XML_SCHEMAS_QUALIF_ELEM) == 0)) {
+ elemDecl = xmlHashLookup3(ctxt->schema->elemDecl,
+ root->name, NULL, NULL);
+ }
+
+ if (elemDecl == NULL) {
+ xmlSchemaVErr(ctxt, root, XML_SCHEMAS_ERR_UNDECLAREDELEM, "Element %s not declared\n", root->name, NULL);
+ } else if ((elemDecl->flags & XML_SCHEMAS_ELEM_TOPLEVEL) == 0) {
+ xmlSchemaVErr(ctxt, root, XML_SCHEMAS_ERR_NOTTOPLEVEL, "Root element %s not toplevel\n", root->name, NULL);
+ }
+ /*
+ * Okay, start the recursive validation
+ */
+ xmlSchemaValidateElement(ctxt, root);
+
+ return (ctxt->err);
+}
+
+/************************************************************************
+ * *
+ * SAX Validation code *
+ * *
+ ************************************************************************/
+
+/************************************************************************
+ * *
+ * Validation interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchemaNewValidCtxt:
+ * @schema: a precompiled XML Schemas
+ *
+ * Create an XML Schemas validation context based on the given schema
+ *
+ * Returns the validation context or NULL in case of error
+ */
+xmlSchemaValidCtxtPtr
+xmlSchemaNewValidCtxt(xmlSchemaPtr schema)
+{
+ xmlSchemaValidCtxtPtr ret;
+
+ ret = (xmlSchemaValidCtxtPtr) xmlMalloc(sizeof(xmlSchemaValidCtxt));
+ if (ret == NULL) {
+ xmlSchemaVErrMemory(NULL, "allocating validation context", NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaValidCtxt));
+ ret->schema = schema;
+ ret->attrNr = 0;
+ ret->attrMax = 10;
+ ret->attr = (xmlSchemaAttrStatePtr) xmlMalloc(ret->attrMax *
+ sizeof
+ (xmlSchemaAttrState));
+ if (ret->attr == NULL) {
+ xmlSchemaVErrMemory(NULL, "allocating validation context", NULL);
+ free(ret);
+ return (NULL);
+ }
+ memset(ret->attr, 0, ret->attrMax * sizeof(xmlSchemaAttrState));
+ return (ret);
+}
+
+/**
+ * xmlSchemaFreeValidCtxt:
+ * @ctxt: the schema validation context
+ *
+ * Free the resources associated to the schema validation context
+ */
+void
+xmlSchemaFreeValidCtxt(xmlSchemaValidCtxtPtr ctxt)
+{
+ if (ctxt == NULL)
+ return;
+ if (ctxt->attr != NULL)
+ xmlFree(ctxt->attr);
+ if (ctxt->value != NULL)
+ xmlSchemaFreeValue(ctxt->value);
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlSchemaSetValidErrors:
+ * @ctxt: a schema validation context
+ * @err: the error function
+ * @warn: the warning function
+ * @ctx: the functions context
+ *
+ * Set the error and warning callback informations
+ */
+void
+xmlSchemaSetValidErrors(xmlSchemaValidCtxtPtr ctxt,
+ xmlSchemaValidityErrorFunc err,
+ xmlSchemaValidityWarningFunc warn, void *ctx)
+{
+ if (ctxt == NULL)
+ return;
+ ctxt->error = err;
+ ctxt->warning = warn;
+ ctxt->userData = ctx;
+}
+
+/**
+ * xmlSchemaValidateDoc:
+ * @ctxt: a schema validation context
+ * @doc: a parsed document tree
+ *
+ * Validate a document tree in memory.
+ *
+ * Returns 0 if the document is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+int
+xmlSchemaValidateDoc(xmlSchemaValidCtxtPtr ctxt, xmlDocPtr doc)
+{
+ int ret;
+
+ if ((ctxt == NULL) || (doc == NULL))
+ return (-1);
+
+ ctxt->doc = doc;
+ ret = xmlSchemaValidateDocument(ctxt, doc);
+ return (ret);
+}
+
+/**
+ * xmlSchemaValidateStream:
+ * @ctxt: a schema validation context
+ * @input: the input to use for reading the data
+ * @enc: an optional encoding information
+ * @sax: a SAX handler for the resulting events
+ * @user_data: the context to provide to the SAX handler.
+ *
+ * Validate a document tree in memory.
+ *
+ * Returns 0 if the document is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+int
+xmlSchemaValidateStream(xmlSchemaValidCtxtPtr ctxt,
+ xmlParserInputBufferPtr input, xmlCharEncoding enc,
+ xmlSAXHandlerPtr sax, void *user_data)
+{
+ if ((ctxt == NULL) || (input == NULL))
+ return (-1);
+ ctxt->input = input;
+ ctxt->enc = enc;
+ ctxt->sax = sax;
+ ctxt->user_data = user_data;
+ TODO return (0);
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/xmlschemastypes.c b/xmlschemastypes.c
new file mode 100644
index 0000000..91e34b8
--- /dev/null
+++ b/xmlschemastypes.c
@@ -0,0 +1,3597 @@
+/*
+ * schemastypes.c : implementation of the XML Schema Datatypes
+ * definition and validity checking
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <veillard@redhat.com>
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/hash.h>
+#include <libxml/valid.h>
+#include <libxml/xpath.h>
+#include <libxml/uri.h>
+
+#include <libxml/xmlschemas.h>
+#include <libxml/schemasInternals.h>
+#include <libxml/xmlschemastypes.h>
+
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+#define DEBUG
+
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+#define XML_SCHEMAS_NAMESPACE_NAME \
+ (const xmlChar *)"http://www.w3.org/2001/XMLSchema"
+
+typedef enum {
+ XML_SCHEMAS_UNKNOWN = 0,
+ XML_SCHEMAS_STRING,
+ XML_SCHEMAS_NORMSTRING,
+ XML_SCHEMAS_DECIMAL,
+ XML_SCHEMAS_TIME,
+ XML_SCHEMAS_GDAY,
+ XML_SCHEMAS_GMONTH,
+ XML_SCHEMAS_GMONTHDAY,
+ XML_SCHEMAS_GYEAR,
+ XML_SCHEMAS_GYEARMONTH,
+ XML_SCHEMAS_DATE,
+ XML_SCHEMAS_DATETIME,
+ XML_SCHEMAS_DURATION,
+ XML_SCHEMAS_FLOAT,
+ XML_SCHEMAS_DOUBLE,
+ XML_SCHEMAS_BOOLEAN,
+ XML_SCHEMAS_TOKEN,
+ XML_SCHEMAS_LANGUAGE,
+ XML_SCHEMAS_NMTOKEN,
+ XML_SCHEMAS_NMTOKENS,
+ XML_SCHEMAS_NAME,
+ XML_SCHEMAS_QNAME,
+ XML_SCHEMAS_NCNAME,
+ XML_SCHEMAS_ID,
+ XML_SCHEMAS_IDREF,
+ XML_SCHEMAS_IDREFS,
+ XML_SCHEMAS_ENTITY,
+ XML_SCHEMAS_ENTITIES,
+ XML_SCHEMAS_NOTATION,
+ XML_SCHEMAS_ANYURI,
+ XML_SCHEMAS_INTEGER,
+ XML_SCHEMAS_NPINTEGER,
+ XML_SCHEMAS_NINTEGER,
+ XML_SCHEMAS_NNINTEGER,
+ XML_SCHEMAS_PINTEGER,
+ XML_SCHEMAS_INT,
+ XML_SCHEMAS_UINT,
+ XML_SCHEMAS_LONG,
+ XML_SCHEMAS_ULONG,
+ XML_SCHEMAS_SHORT,
+ XML_SCHEMAS_USHORT,
+ XML_SCHEMAS_BYTE,
+ XML_SCHEMAS_UBYTE,
+ XML_SCHEMAS_HEXBINARY,
+ XML_SCHEMAS_BASE64BINARY
+} xmlSchemaValType;
+
+static unsigned long powten[10] = {
+ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000L,
+ 100000000L, 1000000000L
+};
+
+/* Date value */
+typedef struct _xmlSchemaValDate xmlSchemaValDate;
+typedef xmlSchemaValDate *xmlSchemaValDatePtr;
+struct _xmlSchemaValDate {
+ long year;
+ unsigned int mon :4; /* 1 <= mon <= 12 */
+ unsigned int day :5; /* 1 <= day <= 31 */
+ unsigned int hour :5; /* 0 <= hour <= 23 */
+ unsigned int min :6; /* 0 <= min <= 59 */
+ double sec;
+ unsigned int tz_flag :1; /* is tzo explicitely set? */
+ int tzo :11; /* -1440 <= tzo <= 1440 */
+};
+
+/* Duration value */
+typedef struct _xmlSchemaValDuration xmlSchemaValDuration;
+typedef xmlSchemaValDuration *xmlSchemaValDurationPtr;
+struct _xmlSchemaValDuration {
+ long mon; /* mon stores years also */
+ long day;
+ double sec; /* sec stores min and hour also */
+};
+
+typedef struct _xmlSchemaValDecimal xmlSchemaValDecimal;
+typedef xmlSchemaValDecimal *xmlSchemaValDecimalPtr;
+struct _xmlSchemaValDecimal {
+ /* would use long long but not portable */
+ unsigned long lo;
+ unsigned long mi;
+ unsigned long hi;
+ unsigned int extra;
+ unsigned int sign:1;
+ unsigned int frac:7;
+ unsigned int total:8;
+};
+
+typedef struct _xmlSchemaValQName xmlSchemaValQName;
+typedef xmlSchemaValQName *xmlSchemaValQNamePtr;
+struct _xmlSchemaValQName {
+ xmlChar *name;
+ xmlChar *uri;
+};
+
+typedef struct _xmlSchemaValHex xmlSchemaValHex;
+typedef xmlSchemaValHex *xmlSchemaValHexPtr;
+struct _xmlSchemaValHex {
+ xmlChar *str;
+ unsigned int total;
+};
+
+typedef struct _xmlSchemaValBase64 xmlSchemaValBase64;
+typedef xmlSchemaValBase64 *xmlSchemaValBase64Ptr;
+struct _xmlSchemaValBase64 {
+ xmlChar *str;
+ unsigned int total;
+};
+
+struct _xmlSchemaVal {
+ xmlSchemaValType type;
+ union {
+ xmlSchemaValDecimal decimal;
+ xmlSchemaValDate date;
+ xmlSchemaValDuration dur;
+ xmlSchemaValQName qname;
+ xmlSchemaValHex hex;
+ xmlSchemaValBase64 base64;
+ float f;
+ double d;
+ int b;
+ xmlChar *str;
+ } value;
+};
+
+static int xmlSchemaTypesInitialized = 0;
+static xmlHashTablePtr xmlSchemaTypesBank = NULL;
+
+/*
+ * Basic types
+ */
+static xmlSchemaTypePtr xmlSchemaTypeStringDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeAnyTypeDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeAnySimpleTypeDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeDecimalDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeDatetimeDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeDateDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeTimeDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeGYearDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeGYearMonthDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeGDayDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeGMonthDayDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeGMonthDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeDurationDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeFloatDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeBooleanDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeDoubleDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeHexBinaryDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeBase64BinaryDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeAnyURIDef = NULL;
+
+/*
+ * Derived types
+ */
+static xmlSchemaTypePtr xmlSchemaTypePositiveIntegerDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeNonPositiveIntegerDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeNegativeIntegerDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeNonNegativeIntegerDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeIntegerDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeLongDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeIntDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeShortDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeByteDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeUnsignedLongDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeUnsignedIntDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeUnsignedShortDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeUnsignedByteDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeNormStringDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeTokenDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeLanguageDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeNameDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeQNameDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeNCNameDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeIdDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeIdrefDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeIdrefsDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeEntityDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeEntitiesDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeNotationDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeNmtokenDef = NULL;
+static xmlSchemaTypePtr xmlSchemaTypeNmtokensDef = NULL;
+
+/************************************************************************
+ * *
+ * Datatype error handlers *
+ * *
+ ************************************************************************/
+/**
+ * xmlSchemaTypeErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlSchemaTypeErrMemory(xmlNodePtr node, const char *extra)
+{
+ __xmlSimpleError(XML_FROM_DATATYPE, XML_ERR_NO_MEMORY, node, NULL, extra);
+}
+
+/************************************************************************
+ * *
+ * Base types support *
+ * *
+ ************************************************************************/
+/*
+ * xmlSchemaInitBasicType:
+ * @name: the type name
+ * @type: the value type associated
+ *
+ * Initialize one default type
+ */
+static xmlSchemaTypePtr
+xmlSchemaInitBasicType(const char *name, xmlSchemaValType type) {
+ xmlSchemaTypePtr ret;
+
+ ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType));
+ if (ret == NULL) {
+ xmlSchemaTypeErrMemory(NULL, "could not initialize basic types");
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaType));
+ ret->name = (const xmlChar *)name;
+ ret->type = XML_SCHEMA_TYPE_BASIC;
+ ret->flags = type;
+ ret->contentType = XML_SCHEMA_CONTENT_BASIC;
+ xmlHashAddEntry2(xmlSchemaTypesBank, ret->name,
+ XML_SCHEMAS_NAMESPACE_NAME, ret);
+ return(ret);
+}
+
+/*
+ * xmlSchemaInitTypes:
+ *
+ * Initialize the default XML Schemas type library
+ */
+void
+xmlSchemaInitTypes(void)
+{
+ if (xmlSchemaTypesInitialized != 0)
+ return;
+ xmlSchemaTypesBank = xmlHashCreate(40);
+
+ /*
+ * primitive datatypes
+ */
+ xmlSchemaTypeStringDef = xmlSchemaInitBasicType("string",
+ XML_SCHEMAS_STRING);
+ xmlSchemaTypeAnyTypeDef = xmlSchemaInitBasicType("anyType",
+ XML_SCHEMAS_UNKNOWN);
+ xmlSchemaTypeAnySimpleTypeDef = xmlSchemaInitBasicType("anySimpleType",
+ XML_SCHEMAS_UNKNOWN);
+ xmlSchemaTypeDecimalDef = xmlSchemaInitBasicType("decimal",
+ XML_SCHEMAS_DECIMAL);
+ xmlSchemaTypeDateDef = xmlSchemaInitBasicType("date",
+ XML_SCHEMAS_DATE);
+ xmlSchemaTypeDatetimeDef = xmlSchemaInitBasicType("dateTime",
+ XML_SCHEMAS_DATETIME);
+ xmlSchemaTypeTimeDef = xmlSchemaInitBasicType("time",
+ XML_SCHEMAS_TIME);
+ xmlSchemaTypeGYearDef = xmlSchemaInitBasicType("gYear",
+ XML_SCHEMAS_GYEAR);
+ xmlSchemaTypeGYearMonthDef = xmlSchemaInitBasicType("gYearMonth",
+ XML_SCHEMAS_GYEARMONTH);
+ xmlSchemaTypeGMonthDef = xmlSchemaInitBasicType("gMonth",
+ XML_SCHEMAS_GMONTH);
+ xmlSchemaTypeGMonthDayDef = xmlSchemaInitBasicType("gMonthDay",
+ XML_SCHEMAS_GMONTHDAY);
+ xmlSchemaTypeGDayDef = xmlSchemaInitBasicType("gDay",
+ XML_SCHEMAS_GDAY);
+ xmlSchemaTypeDurationDef = xmlSchemaInitBasicType("duration",
+ XML_SCHEMAS_DURATION);
+ xmlSchemaTypeFloatDef = xmlSchemaInitBasicType("float",
+ XML_SCHEMAS_FLOAT);
+ xmlSchemaTypeDoubleDef = xmlSchemaInitBasicType("double",
+ XML_SCHEMAS_DOUBLE);
+ xmlSchemaTypeBooleanDef = xmlSchemaInitBasicType("boolean",
+ XML_SCHEMAS_BOOLEAN);
+ xmlSchemaTypeAnyURIDef = xmlSchemaInitBasicType("anyURI",
+ XML_SCHEMAS_ANYURI);
+ xmlSchemaTypeHexBinaryDef = xmlSchemaInitBasicType("hexBinary",
+ XML_SCHEMAS_HEXBINARY);
+ xmlSchemaTypeBase64BinaryDef
+ = xmlSchemaInitBasicType("base64Binary", XML_SCHEMAS_BASE64BINARY);
+
+ /*
+ * derived datatypes
+ */
+ xmlSchemaTypeIntegerDef = xmlSchemaInitBasicType("integer",
+ XML_SCHEMAS_INTEGER);;
+ xmlSchemaTypeNonPositiveIntegerDef =
+ xmlSchemaInitBasicType("nonPositiveInteger",
+ XML_SCHEMAS_NPINTEGER);;
+ xmlSchemaTypeNegativeIntegerDef =
+ xmlSchemaInitBasicType("negativeInteger", XML_SCHEMAS_NINTEGER);;
+ xmlSchemaTypeLongDef =
+ xmlSchemaInitBasicType("long", XML_SCHEMAS_LONG);;
+ xmlSchemaTypeIntDef = xmlSchemaInitBasicType("int", XML_SCHEMAS_INT);;
+ xmlSchemaTypeShortDef = xmlSchemaInitBasicType("short",
+ XML_SCHEMAS_SHORT);;
+ xmlSchemaTypeByteDef = xmlSchemaInitBasicType("byte",
+ XML_SCHEMAS_BYTE);;
+ xmlSchemaTypeNonNegativeIntegerDef =
+ xmlSchemaInitBasicType("nonNegativeInteger",
+ XML_SCHEMAS_NNINTEGER);
+ xmlSchemaTypeUnsignedLongDef =
+ xmlSchemaInitBasicType("unsignedLong", XML_SCHEMAS_ULONG);;
+ xmlSchemaTypeUnsignedIntDef =
+ xmlSchemaInitBasicType("unsignedInt", XML_SCHEMAS_UINT);;
+ xmlSchemaTypeUnsignedShortDef =
+ xmlSchemaInitBasicType("unsignedShort", XML_SCHEMAS_USHORT);;
+ xmlSchemaTypeUnsignedByteDef =
+ xmlSchemaInitBasicType("unsignedByte", XML_SCHEMAS_UBYTE);;
+ xmlSchemaTypePositiveIntegerDef =
+ xmlSchemaInitBasicType("positiveInteger", XML_SCHEMAS_PINTEGER);
+
+ xmlSchemaTypeNormStringDef = xmlSchemaInitBasicType("normalizedString",
+ XML_SCHEMAS_NORMSTRING);
+ xmlSchemaTypeTokenDef = xmlSchemaInitBasicType("token",
+ XML_SCHEMAS_TOKEN);
+ xmlSchemaTypeLanguageDef = xmlSchemaInitBasicType("language",
+ XML_SCHEMAS_LANGUAGE);
+ xmlSchemaTypeIdDef = xmlSchemaInitBasicType("ID", XML_SCHEMAS_ID);
+ xmlSchemaTypeIdrefDef = xmlSchemaInitBasicType("IDREF",
+ XML_SCHEMAS_IDREF);
+ xmlSchemaTypeIdrefsDef = xmlSchemaInitBasicType("IDREFS",
+ XML_SCHEMAS_IDREFS);
+ xmlSchemaTypeEntityDef = xmlSchemaInitBasicType("ENTITY",
+ XML_SCHEMAS_ENTITY);
+ xmlSchemaTypeEntitiesDef = xmlSchemaInitBasicType("ENTITIES",
+ XML_SCHEMAS_ENTITIES);
+ xmlSchemaTypeNotationDef = xmlSchemaInitBasicType("NOTATION",
+ XML_SCHEMAS_NOTATION);
+ xmlSchemaTypeNameDef = xmlSchemaInitBasicType("Name",
+ XML_SCHEMAS_NAME);
+ xmlSchemaTypeQNameDef = xmlSchemaInitBasicType("QName",
+ XML_SCHEMAS_QNAME);
+ xmlSchemaTypeNCNameDef = xmlSchemaInitBasicType("NCName",
+ XML_SCHEMAS_NCNAME);
+ xmlSchemaTypeNmtokenDef = xmlSchemaInitBasicType("NMTOKEN",
+ XML_SCHEMAS_NMTOKEN);
+ xmlSchemaTypeNmtokensDef = xmlSchemaInitBasicType("NMTOKENS",
+ XML_SCHEMAS_NMTOKENS);
+ xmlSchemaTypesInitialized = 1;
+}
+
+/**
+ * xmlSchemaCleanupTypes:
+ *
+ * Cleanup the default XML Schemas type library
+ */
+void
+xmlSchemaCleanupTypes(void) {
+ if (xmlSchemaTypesInitialized == 0)
+ return;
+ xmlHashFree(xmlSchemaTypesBank, (xmlHashDeallocator) xmlSchemaFreeType);
+ xmlSchemaTypesInitialized = 0;
+}
+
+/**
+ * xmlSchemaNewValue:
+ * @type: the value type
+ *
+ * Allocate a new simple type value
+ *
+ * Returns a pointer to the new value or NULL in case of error
+ */
+static xmlSchemaValPtr
+xmlSchemaNewValue(xmlSchemaValType type) {
+ xmlSchemaValPtr value;
+
+ value = (xmlSchemaValPtr) xmlMalloc(sizeof(xmlSchemaVal));
+ if (value == NULL) {
+ return(NULL);
+ }
+ memset(value, 0, sizeof(xmlSchemaVal));
+ value->type = type;
+ return(value);
+}
+
+/**
+ * xmlSchemaFreeValue:
+ * @value: the value to free
+ *
+ * Cleanup the default XML Schemas type library
+ */
+void
+xmlSchemaFreeValue(xmlSchemaValPtr value) {
+ if (value == NULL)
+ return;
+ switch (value->type) {
+ case XML_SCHEMAS_STRING:
+ case XML_SCHEMAS_NORMSTRING:
+ case XML_SCHEMAS_TOKEN:
+ case XML_SCHEMAS_LANGUAGE:
+ case XML_SCHEMAS_NMTOKEN:
+ case XML_SCHEMAS_NMTOKENS:
+ case XML_SCHEMAS_NAME:
+ case XML_SCHEMAS_NCNAME:
+ case XML_SCHEMAS_ID:
+ case XML_SCHEMAS_IDREF:
+ case XML_SCHEMAS_IDREFS:
+ case XML_SCHEMAS_ENTITY:
+ case XML_SCHEMAS_ENTITIES:
+ case XML_SCHEMAS_NOTATION:
+ case XML_SCHEMAS_ANYURI:
+ if (value->value.str != NULL)
+ xmlFree(value->value.str);
+ break;
+ case XML_SCHEMAS_QNAME:
+ if (value->value.qname.uri != NULL)
+ xmlFree(value->value.qname.uri);
+ if (value->value.qname.name != NULL)
+ xmlFree(value->value.qname.name);
+ break;
+ case XML_SCHEMAS_HEXBINARY:
+ if (value->value.hex.str != NULL)
+ xmlFree(value->value.hex.str);
+ break;
+ case XML_SCHEMAS_BASE64BINARY:
+ if (value->value.base64.str != NULL)
+ xmlFree(value->value.base64.str);
+ break;
+ default:
+ break;
+ }
+ xmlFree(value);
+}
+
+/**
+ * xmlSchemaGetPredefinedType:
+ * @name: the type name
+ * @ns: the URI of the namespace usually "http://www.w3.org/2001/XMLSchema"
+ *
+ * Lookup a type in the default XML Schemas type library
+ *
+ * Returns the type if found, NULL otherwise
+ */
+xmlSchemaTypePtr
+xmlSchemaGetPredefinedType(const xmlChar *name, const xmlChar *ns) {
+ if (xmlSchemaTypesInitialized == 0)
+ xmlSchemaInitTypes();
+ if (name == NULL)
+ return(NULL);
+ return((xmlSchemaTypePtr) xmlHashLookup2(xmlSchemaTypesBank, name, ns));
+}
+
+/****************************************************************
+ * *
+ * Convenience macros and functions *
+ * *
+ ****************************************************************/
+
+#define IS_TZO_CHAR(c) \
+ ((c == 0) || (c == 'Z') || (c == '+') || (c == '-'))
+
+#define VALID_YEAR(yr) (yr != 0)
+#define VALID_MONTH(mon) ((mon >= 1) && (mon <= 12))
+/* VALID_DAY should only be used when month is unknown */
+#define VALID_DAY(day) ((day >= 1) && (day <= 31))
+#define VALID_HOUR(hr) ((hr >= 0) && (hr <= 23))
+#define VALID_MIN(min) ((min >= 0) && (min <= 59))
+#define VALID_SEC(sec) ((sec >= 0) && (sec < 60))
+#define VALID_TZO(tzo) ((tzo > -1440) && (tzo < 1440))
+#define IS_LEAP(y) \
+ (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
+
+static const long daysInMonth[12] =
+ { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+static const long daysInMonthLeap[12] =
+ { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+
+#define MAX_DAYINMONTH(yr,mon) \
+ (IS_LEAP(yr) ? daysInMonthLeap[mon - 1] : daysInMonth[mon - 1])
+
+#define VALID_MDAY(dt) \
+ (IS_LEAP(dt->year) ? \
+ (dt->day <= daysInMonthLeap[dt->mon - 1]) : \
+ (dt->day <= daysInMonth[dt->mon - 1]))
+
+#define VALID_DATE(dt) \
+ (VALID_YEAR(dt->year) && VALID_MONTH(dt->mon) && VALID_MDAY(dt))
+
+#define VALID_TIME(dt) \
+ (VALID_HOUR(dt->hour) && VALID_MIN(dt->min) && \
+ VALID_SEC(dt->sec) && VALID_TZO(dt->tzo))
+
+#define VALID_DATETIME(dt) \
+ (VALID_DATE(dt) && VALID_TIME(dt))
+
+#define SECS_PER_MIN (60)
+#define SECS_PER_HOUR (60 * SECS_PER_MIN)
+#define SECS_PER_DAY (24 * SECS_PER_HOUR)
+
+static const long dayInYearByMonth[12] =
+ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
+static const long dayInLeapYearByMonth[12] =
+ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
+
+#define DAY_IN_YEAR(day, month, year) \
+ ((IS_LEAP(year) ? \
+ dayInLeapYearByMonth[month - 1] : \
+ dayInYearByMonth[month - 1]) + day)
+
+#ifdef DEBUG
+#define DEBUG_DATE(dt) \
+ xmlGenericError(xmlGenericErrorContext, \
+ "type=%o %04ld-%02u-%02uT%02u:%02u:%03f", \
+ dt->type,dt->value.date.year,dt->value.date.mon, \
+ dt->value.date.day,dt->value.date.hour,dt->value.date.min, \
+ dt->value.date.sec); \
+ if (dt->value.date.tz_flag) \
+ if (dt->value.date.tzo != 0) \
+ xmlGenericError(xmlGenericErrorContext, \
+ "%+05d\n",dt->value.date.tzo); \
+ else \
+ xmlGenericError(xmlGenericErrorContext, "Z\n"); \
+ else \
+ xmlGenericError(xmlGenericErrorContext,"\n")
+#else
+#define DEBUG_DATE(dt)
+#endif
+
+/**
+ * _xmlSchemaParseGYear:
+ * @dt: pointer to a date structure
+ * @str: pointer to the string to analyze
+ *
+ * Parses a xs:gYear without time zone and fills in the appropriate
+ * field of the @dt structure. @str is updated to point just after the
+ * xs:gYear. It is supposed that @dt->year is big enough to contain
+ * the year.
+ *
+ * Returns 0 or the error code
+ */
+static int
+_xmlSchemaParseGYear (xmlSchemaValDatePtr dt, const xmlChar **str) {
+ const xmlChar *cur = *str, *firstChar;
+ int isneg = 0, digcnt = 0;
+
+ if (((*cur < '0') || (*cur > '9')) &&
+ (*cur != '-') && (*cur != '+'))
+ return -1;
+
+ if (*cur == '-') {
+ isneg = 1;
+ cur++;
+ }
+
+ firstChar = cur;
+
+ while ((*cur >= '0') && (*cur <= '9')) {
+ dt->year = dt->year * 10 + (*cur - '0');
+ cur++;
+ digcnt++;
+ }
+
+ /* year must be at least 4 digits (CCYY); over 4
+ * digits cannot have a leading zero. */
+ if ((digcnt < 4) || ((digcnt > 4) && (*firstChar == '0')))
+ return 1;
+
+ if (isneg)
+ dt->year = - dt->year;
+
+ if (!VALID_YEAR(dt->year))
+ return 2;
+
+ *str = cur;
+ return 0;
+}
+
+/**
+ * PARSE_2_DIGITS:
+ * @num: the integer to fill in
+ * @cur: an #xmlChar *
+ * @invalid: an integer
+ *
+ * Parses a 2-digits integer and updates @num with the value. @cur is
+ * updated to point just after the integer.
+ * In case of error, @invalid is set to %TRUE, values of @num and
+ * @cur are undefined.
+ */
+#define PARSE_2_DIGITS(num, cur, invalid) \
+ if ((cur[0] < '0') || (cur[0] > '9') || \
+ (cur[1] < '0') || (cur[1] > '9')) \
+ invalid = 1; \
+ else \
+ num = (cur[0] - '0') * 10 + (cur[1] - '0'); \
+ cur += 2;
+
+/**
+ * PARSE_FLOAT:
+ * @num: the double to fill in
+ * @cur: an #xmlChar *
+ * @invalid: an integer
+ *
+ * Parses a float and updates @num with the value. @cur is
+ * updated to point just after the float. The float must have a
+ * 2-digits integer part and may or may not have a decimal part.
+ * In case of error, @invalid is set to %TRUE, values of @num and
+ * @cur are undefined.
+ */
+#define PARSE_FLOAT(num, cur, invalid) \
+ PARSE_2_DIGITS(num, cur, invalid); \
+ if (!invalid && (*cur == '.')) { \
+ double mult = 1; \
+ cur++; \
+ if ((*cur < '0') || (*cur > '9')) \
+ invalid = 1; \
+ while ((*cur >= '0') && (*cur <= '9')) { \
+ mult /= 10; \
+ num += (*cur - '0') * mult; \
+ cur++; \
+ } \
+ }
+
+/**
+ * _xmlSchemaParseGMonth:
+ * @dt: pointer to a date structure
+ * @str: pointer to the string to analyze
+ *
+ * Parses a xs:gMonth without time zone and fills in the appropriate
+ * field of the @dt structure. @str is updated to point just after the
+ * xs:gMonth.
+ *
+ * Returns 0 or the error code
+ */
+static int
+_xmlSchemaParseGMonth (xmlSchemaValDatePtr dt, const xmlChar **str) {
+ const xmlChar *cur = *str;
+ int ret = 0;
+
+ PARSE_2_DIGITS(dt->mon, cur, ret);
+ if (ret != 0)
+ return ret;
+
+ if (!VALID_MONTH(dt->mon))
+ return 2;
+
+ *str = cur;
+ return 0;
+}
+
+/**
+ * _xmlSchemaParseGDay:
+ * @dt: pointer to a date structure
+ * @str: pointer to the string to analyze
+ *
+ * Parses a xs:gDay without time zone and fills in the appropriate
+ * field of the @dt structure. @str is updated to point just after the
+ * xs:gDay.
+ *
+ * Returns 0 or the error code
+ */
+static int
+_xmlSchemaParseGDay (xmlSchemaValDatePtr dt, const xmlChar **str) {
+ const xmlChar *cur = *str;
+ int ret = 0;
+
+ PARSE_2_DIGITS(dt->day, cur, ret);
+ if (ret != 0)
+ return ret;
+
+ if (!VALID_DAY(dt->day))
+ return 2;
+
+ *str = cur;
+ return 0;
+}
+
+/**
+ * _xmlSchemaParseTime:
+ * @dt: pointer to a date structure
+ * @str: pointer to the string to analyze
+ *
+ * Parses a xs:time without time zone and fills in the appropriate
+ * fields of the @dt structure. @str is updated to point just after the
+ * xs:time.
+ * In case of error, values of @dt fields are undefined.
+ *
+ * Returns 0 or the error code
+ */
+static int
+_xmlSchemaParseTime (xmlSchemaValDatePtr dt, const xmlChar **str) {
+ const xmlChar *cur = *str;
+ unsigned int hour = 0; /* use temp var in case str is not xs:time */
+ int ret = 0;
+
+ PARSE_2_DIGITS(hour, cur, ret);
+ if (ret != 0)
+ return ret;
+
+ if (*cur != ':')
+ return 1;
+ cur++;
+
+ /* the ':' insures this string is xs:time */
+ dt->hour = hour;
+
+ PARSE_2_DIGITS(dt->min, cur, ret);
+ if (ret != 0)
+ return ret;
+
+ if (*cur != ':')
+ return 1;
+ cur++;
+
+ PARSE_FLOAT(dt->sec, cur, ret);
+ if (ret != 0)
+ return ret;
+
+ if (!VALID_TIME(dt))
+ return 2;
+
+ *str = cur;
+ return 0;
+}
+
+/**
+ * _xmlSchemaParseTimeZone:
+ * @dt: pointer to a date structure
+ * @str: pointer to the string to analyze
+ *
+ * Parses a time zone without time zone and fills in the appropriate
+ * field of the @dt structure. @str is updated to point just after the
+ * time zone.
+ *
+ * Returns 0 or the error code
+ */
+static int
+_xmlSchemaParseTimeZone (xmlSchemaValDatePtr dt, const xmlChar **str) {
+ const xmlChar *cur = *str;
+ int ret = 0;
+
+ if (str == NULL)
+ return -1;
+
+ switch (*cur) {
+ case 0:
+ dt->tz_flag = 0;
+ dt->tzo = 0;
+ break;
+
+ case 'Z':
+ dt->tz_flag = 1;
+ dt->tzo = 0;
+ cur++;
+ break;
+
+ case '+':
+ case '-': {
+ int isneg = 0, tmp = 0;
+ isneg = (*cur == '-');
+
+ cur++;
+
+ PARSE_2_DIGITS(tmp, cur, ret);
+ if (ret != 0)
+ return ret;
+ if (!VALID_HOUR(tmp))
+ return 2;
+
+ if (*cur != ':')
+ return 1;
+ cur++;
+
+ dt->tzo = tmp * 60;
+
+ PARSE_2_DIGITS(tmp, cur, ret);
+ if (ret != 0)
+ return ret;
+ if (!VALID_MIN(tmp))
+ return 2;
+
+ dt->tzo += tmp;
+ if (isneg)
+ dt->tzo = - dt->tzo;
+
+ if (!VALID_TZO(dt->tzo))
+ return 2;
+
+ dt->tz_flag = 1;
+ break;
+ }
+ default:
+ return 1;
+ }
+
+ *str = cur;
+ return 0;
+}
+
+/**
+ * _xmlSchemaBase64Decode:
+ * @ch: a character
+ *
+ * Converts a base64 encoded character to its base 64 value.
+ *
+ * Returns 0-63 (value), 64 (pad), or -1 (not recognized)
+ */
+static int
+_xmlSchemaBase64Decode (const xmlChar ch) {
+ if (('A' <= ch) && (ch <= 'Z')) return ch - 'A';
+ if (('a' <= ch) && (ch <= 'z')) return ch - 'a' + 26;
+ if (('0' <= ch) && (ch <= '9')) return ch - '0' + 52;
+ if ('+' == ch) return 62;
+ if ('/' == ch) return 63;
+ if ('=' == ch) return 64;
+ return -1;
+}
+
+/****************************************************************
+ * *
+ * XML Schema Dates/Times Datatypes Handling *
+ * *
+ ****************************************************************/
+
+/**
+ * PARSE_DIGITS:
+ * @num: the integer to fill in
+ * @cur: an #xmlChar *
+ * @num_type: an integer flag
+ *
+ * Parses a digits integer and updates @num with the value. @cur is
+ * updated to point just after the integer.
+ * In case of error, @num_type is set to -1, values of @num and
+ * @cur are undefined.
+ */
+#define PARSE_DIGITS(num, cur, num_type) \
+ if ((*cur < '0') || (*cur > '9')) \
+ num_type = -1; \
+ else \
+ while ((*cur >= '0') && (*cur <= '9')) { \
+ num = num * 10 + (*cur - '0'); \
+ cur++; \
+ }
+
+/**
+ * PARSE_NUM:
+ * @num: the double to fill in
+ * @cur: an #xmlChar *
+ * @num_type: an integer flag
+ *
+ * Parses a float or integer and updates @num with the value. @cur is
+ * updated to point just after the number. If the number is a float,
+ * then it must have an integer part and a decimal part; @num_type will
+ * be set to 1. If there is no decimal part, @num_type is set to zero.
+ * In case of error, @num_type is set to -1, values of @num and
+ * @cur are undefined.
+ */
+#define PARSE_NUM(num, cur, num_type) \
+ num = 0; \
+ PARSE_DIGITS(num, cur, num_type); \
+ if (!num_type && (*cur == '.')) { \
+ double mult = 1; \
+ cur++; \
+ if ((*cur < '0') || (*cur > '9')) \
+ num_type = -1; \
+ else \
+ num_type = 1; \
+ while ((*cur >= '0') && (*cur <= '9')) { \
+ mult /= 10; \
+ num += (*cur - '0') * mult; \
+ cur++; \
+ } \
+ }
+
+/**
+ * xmlSchemaValidateDates:
+ * @type: the expected type or XML_SCHEMAS_UNKNOWN
+ * @dateTime: string to analyze
+ * @val: the return computed value
+ *
+ * Check that @dateTime conforms to the lexical space of one of the date types.
+ * if true a value is computed and returned in @val.
+ *
+ * Returns 0 if this validates, a positive error code number otherwise
+ * and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateDates (xmlSchemaValType type,
+ const xmlChar *dateTime, xmlSchemaValPtr *val) {
+ xmlSchemaValPtr dt;
+ int ret;
+ const xmlChar *cur = dateTime;
+
+#define RETURN_TYPE_IF_VALID(t) \
+ if (IS_TZO_CHAR(*cur)) { \
+ ret = _xmlSchemaParseTimeZone(&(dt->value.date), &cur); \
+ if (ret == 0) { \
+ if (*cur != 0) \
+ goto error; \
+ dt->type = t; \
+ goto done; \
+ } \
+ }
+
+ if (dateTime == NULL)
+ return -1;
+
+ if ((*cur != '-') && (*cur < '0') && (*cur > '9'))
+ return 1;
+
+ dt = xmlSchemaNewValue(XML_SCHEMAS_UNKNOWN);
+ if (dt == NULL)
+ return -1;
+
+ if ((cur[0] == '-') && (cur[1] == '-')) {
+ /*
+ * It's an incomplete date (xs:gMonthDay, xs:gMonth or
+ * xs:gDay)
+ */
+ cur += 2;
+
+ /* is it an xs:gDay? */
+ if (*cur == '-') {
+ if (type == XML_SCHEMAS_GMONTH)
+ goto error;
+ ++cur;
+ ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
+ if (ret != 0)
+ goto error;
+
+ RETURN_TYPE_IF_VALID(XML_SCHEMAS_GDAY);
+
+ goto error;
+ }
+
+ /*
+ * it should be an xs:gMonthDay or xs:gMonth
+ */
+ ret = _xmlSchemaParseGMonth(&(dt->value.date), &cur);
+ if (ret != 0)
+ goto error;
+
+ /*
+ * a '-' char could indicate this type is xs:gMonthDay or
+ * a negative time zone offset. Check for xs:gMonthDay first.
+ * Also the first three char's of a negative tzo (-MM:SS) can
+ * appear to be a valid day; so even if the day portion
+ * of the xs:gMonthDay verifies, we must insure it was not
+ * a tzo.
+ */
+ if (*cur == '-') {
+ const xmlChar *rewnd = cur;
+ cur++;
+
+ ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
+ if ((ret == 0) && ((*cur == 0) || (*cur != ':'))) {
+
+ /*
+ * we can use the VALID_MDAY macro to validate the month
+ * and day because the leap year test will flag year zero
+ * as a leap year (even though zero is an invalid year).
+ */
+ if (VALID_MDAY((&(dt->value.date)))) {
+
+ RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTHDAY);
+
+ goto error;
+ }
+ }
+
+ /*
+ * not xs:gMonthDay so rewind and check if just xs:gMonth
+ * with an optional time zone.
+ */
+ cur = rewnd;
+ }
+
+ RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTH);
+
+ goto error;
+ }
+
+ /*
+ * It's a right-truncated date or an xs:time.
+ * Try to parse an xs:time then fallback on right-truncated dates.
+ */
+ if ((*cur >= '0') && (*cur <= '9')) {
+ ret = _xmlSchemaParseTime(&(dt->value.date), &cur);
+ if (ret == 0) {
+ /* it's an xs:time */
+ RETURN_TYPE_IF_VALID(XML_SCHEMAS_TIME);
+ }
+ }
+
+ /* fallback on date parsing */
+ cur = dateTime;
+
+ ret = _xmlSchemaParseGYear(&(dt->value.date), &cur);
+ if (ret != 0)
+ goto error;
+
+ /* is it an xs:gYear? */
+ RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEAR);
+
+ if (*cur != '-')
+ goto error;
+ cur++;
+
+ ret = _xmlSchemaParseGMonth(&(dt->value.date), &cur);
+ if (ret != 0)
+ goto error;
+
+ /* is it an xs:gYearMonth? */
+ RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEARMONTH);
+
+ if (*cur != '-')
+ goto error;
+ cur++;
+
+ ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
+ if ((ret != 0) || !VALID_DATE((&(dt->value.date))))
+ goto error;
+
+ /* is it an xs:date? */
+ RETURN_TYPE_IF_VALID(XML_SCHEMAS_DATE);
+
+ if (*cur != 'T')
+ goto error;
+ cur++;
+
+ /* it should be an xs:dateTime */
+ ret = _xmlSchemaParseTime(&(dt->value.date), &cur);
+ if (ret != 0)
+ goto error;
+
+ ret = _xmlSchemaParseTimeZone(&(dt->value.date), &cur);
+ if ((ret != 0) || (*cur != 0) || !VALID_DATETIME((&(dt->value.date))))
+ goto error;
+
+
+ dt->type = XML_SCHEMAS_DATETIME;
+
+done:
+#if 1
+ if ((type != XML_SCHEMAS_UNKNOWN) && (type != dt->type))
+ goto error;
+#else
+ /*
+ * insure the parsed type is equal to or less significant (right
+ * truncated) than the desired type.
+ */
+ if ((type != XML_SCHEMAS_UNKNOWN) && (type != dt->type)) {
+
+ /* time only matches time */
+ if ((type == XML_SCHEMAS_TIME) && (dt->type == XML_SCHEMAS_TIME))
+ goto error;
+
+ if ((type == XML_SCHEMAS_DATETIME) &&
+ ((dt->type != XML_SCHEMAS_DATE) ||
+ (dt->type != XML_SCHEMAS_GYEARMONTH) ||
+ (dt->type != XML_SCHEMAS_GYEAR)))
+ goto error;
+
+ if ((type == XML_SCHEMAS_DATE) &&
+ ((dt->type != XML_SCHEMAS_GYEAR) ||
+ (dt->type != XML_SCHEMAS_GYEARMONTH)))
+ goto error;
+
+ if ((type == XML_SCHEMAS_GYEARMONTH) && (dt->type != XML_SCHEMAS_GYEAR))
+ goto error;
+
+ if ((type == XML_SCHEMAS_GMONTHDAY) && (dt->type != XML_SCHEMAS_GMONTH))
+ goto error;
+ }
+#endif
+
+ if (val != NULL)
+ *val = dt;
+ else
+ xmlSchemaFreeValue(dt);
+
+ return 0;
+
+error:
+ if (dt != NULL)
+ xmlSchemaFreeValue(dt);
+ return 1;
+}
+
+/**
+ * xmlSchemaValidateDuration:
+ * @type: the predefined type
+ * @duration: string to analyze
+ * @val: the return computed value
+ *
+ * Check that @duration conforms to the lexical space of the duration type.
+ * if true a value is computed and returned in @val.
+ *
+ * Returns 0 if this validates, a positive error code number otherwise
+ * and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValidateDuration (xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
+ const xmlChar *duration, xmlSchemaValPtr *val) {
+ const xmlChar *cur = duration;
+ xmlSchemaValPtr dur;
+ int isneg = 0;
+ unsigned int seq = 0;
+ double num;
+ int num_type = 0; /* -1 = invalid, 0 = int, 1 = floating */
+ const xmlChar desig[] = {'Y', 'M', 'D', 'H', 'M', 'S'};
+ const double multi[] = { 0.0, 0.0, 86400.0, 3600.0, 60.0, 1.0, 0.0};
+
+ if (duration == NULL)
+ return -1;
+
+ if (*cur == '-') {
+ isneg = 1;
+ cur++;
+ }
+
+ /* duration must start with 'P' (after sign) */
+ if (*cur++ != 'P')
+ return 1;
+
+ if (*cur == 0)
+ return 1;
+
+ dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION);
+ if (dur == NULL)
+ return -1;
+
+ while (*cur != 0) {
+
+ /* input string should be empty or invalid date/time item */
+ if (seq >= sizeof(desig))
+ goto error;
+
+ /* T designator must be present for time items */
+ if (*cur == 'T') {
+ if (seq <= 3) {
+ seq = 3;
+ cur++;
+ } else
+ return 1;
+ } else if (seq == 3)
+ goto error;
+
+ /* parse the number portion of the item */
+ PARSE_NUM(num, cur, num_type);
+
+ if ((num_type == -1) || (*cur == 0))
+ goto error;
+
+ /* update duration based on item type */
+ while (seq < sizeof(desig)) {
+ if (*cur == desig[seq]) {
+
+ /* verify numeric type; only seconds can be float */
+ if ((num_type != 0) && (seq < (sizeof(desig)-1)))
+ goto error;
+
+ switch (seq) {
+ case 0:
+ dur->value.dur.mon = (long)num * 12;
+ break;
+ case 1:
+ dur->value.dur.mon += (long)num;
+ break;
+ default:
+ /* convert to seconds using multiplier */
+ dur->value.dur.sec += num * multi[seq];
+ seq++;
+ break;
+ }
+
+ break; /* exit loop */
+ }
+ /* no date designators found? */
+ if (++seq == 3)
+ goto error;
+ }
+ cur++;
+ }
+
+ if (isneg) {
+ dur->value.dur.mon = -dur->value.dur.mon;
+ dur->value.dur.day = -dur->value.dur.day;
+ dur->value.dur.sec = -dur->value.dur.sec;
+ }
+
+ if (val != NULL)
+ *val = dur;
+ else
+ xmlSchemaFreeValue(dur);
+
+ return 0;
+
+error:
+ if (dur != NULL)
+ xmlSchemaFreeValue(dur);
+ return 1;
+}
+
+/**
+ * xmlSchemaStrip:
+ * @value: a value
+ *
+ * Removes the leading and ending spaces of a string
+ *
+ * Returns the new string or NULL if no change was required.
+ */
+static xmlChar *
+xmlSchemaStrip(const xmlChar *value) {
+ const xmlChar *start = value, *end, *f;
+
+ if (value == NULL) return(NULL);
+ while ((*start != 0) && (IS_BLANK_CH(*start))) start++;
+ end = start;
+ while (*end != 0) end++;
+ f = end;
+ end--;
+ while ((end > start) && (IS_BLANK_CH(*end))) end--;
+ end++;
+ if ((start == value) && (f == end)) return(NULL);
+ return(xmlStrndup(start, end - start));
+}
+
+/**
+ * xmlSchemaCollapseString:
+ * @value: a value
+ *
+ * Removes and normalize white spaces in the string
+ *
+ * Returns the new string or NULL if no change was required.
+ */
+static xmlChar *
+xmlSchemaCollapseString(const xmlChar *value) {
+ const xmlChar *start = value, *end, *f;
+ xmlChar *g;
+ int col = 0;
+
+ if (value == NULL) return(NULL);
+ while ((*start != 0) && (IS_BLANK_CH(*start))) start++;
+ end = start;
+ while (*end != 0) {
+ if ((*end == ' ') && (IS_BLANK_CH(end[1]))) {
+ col = end - start;
+ break;
+ } else if ((*end == 0xa) || (*end == 0x9) || (*end == 0xd)) {
+ col = end - start;
+ break;
+ }
+ end++;
+ }
+ if (col == 0) {
+ f = end;
+ end--;
+ while ((end > start) && (IS_BLANK_CH(*end))) end--;
+ end++;
+ if ((start == value) && (f == end)) return(NULL);
+ return(xmlStrndup(start, end - start));
+ }
+ start = xmlStrdup(start);
+ if (start == NULL) return(NULL);
+ g = (xmlChar *) (start + col);
+ end = g;
+ while (*end != 0) {
+ if (IS_BLANK_CH(*end)) {
+ end++;
+ while (IS_BLANK_CH(*end)) end++;
+ if (*end != 0)
+ *g++ = ' ';
+ } else
+ *g++ = *end++;
+ }
+ *g = 0;
+ return((xmlChar *) start);
+}
+
+/**
+ * xmlSchemaValAtomicListNode:
+ * @type: the predefined atomic type for a token in the list
+ * @value: the list value to check
+ * @ret: the return computed value
+ * @node: the node containing the value
+ *
+ * Check that a value conforms to the lexical space of the predefined
+ * list type. if true a value is computed and returned in @ret.
+ *
+ * Returns the number of items if this validates, a negative error code
+ * number otherwise
+ */
+static int
+xmlSchemaValAtomicListNode(xmlSchemaTypePtr type, const xmlChar *value,
+ xmlSchemaValPtr *ret, xmlNodePtr node) {
+ xmlChar *val, *cur, *endval;
+ int nb_values = 0;
+ int tmp = 0;
+
+ if (value == NULL) {
+ return(-1);
+ }
+ val = xmlStrdup(value);
+ if (val == NULL) {
+ return(-1);
+ }
+ cur = val;
+ /*
+ * Split the list
+ */
+ while (IS_BLANK_CH(*cur)) *cur++ = 0;
+ while (*cur != 0) {
+ if (IS_BLANK_CH(*cur)) {
+ *cur = 0;
+ cur++;
+ while (IS_BLANK_CH(*cur)) *cur++ = 0;
+ } else {
+ nb_values++;
+ cur++;
+ while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++;
+ }
+ }
+ if (nb_values == 0) {
+ if (ret != NULL) {
+ TODO
+ }
+ xmlFree(val);
+ return(nb_values);
+ }
+ endval = cur;
+ cur = val;
+ while ((*cur == 0) && (cur != endval)) cur++;
+ while (cur != endval) {
+ tmp = xmlSchemaValPredefTypeNode(type, cur, NULL, node);
+ if (tmp != 0)
+ break;
+ while (*cur != 0) cur++;
+ while ((*cur == 0) && (cur != endval)) cur++;
+ }
+ xmlFree(val);
+ if (ret != NULL) {
+ TODO
+ }
+ if (tmp == 0)
+ return(nb_values);
+ return(-1);
+}
+
+/**
+ * xmlSchemaParseUInt:
+ * @str: pointer to the string R/W
+ * @llo: pointer to the low result
+ * @lmi: pointer to the mid result
+ * @lhi: pointer to the high result
+ *
+ * Parse an unsigned long into 3 fields.
+ *
+ * Returns the number of chars parsed or -1 if overflow of the capacity
+ */
+static int
+xmlSchemaParseUInt(const xmlChar **str, unsigned long *llo,
+ unsigned long *lmi, unsigned long *lhi) {
+ unsigned long lo = 0, mi = 0, hi = 0;
+ const xmlChar *tmp, *cur = *str;
+ int ret = 0, i = 0;
+
+ while (*cur == '0') {
+ ret++;
+ cur++;
+ }
+ tmp = cur;
+ while ((*tmp != 0) && (*tmp >= '0') && (*tmp <= '9')) {
+ i++;tmp++;ret++;
+ }
+ if (i > 24) {
+ *str = tmp;
+ return(-1);
+ }
+ while (i > 16) {
+ hi = hi * 10 + (*cur++ - '0');
+ i--;
+ }
+ while (i > 8) {
+ mi = mi * 10 + (*cur++ - '0');
+ i--;
+ }
+ while (i > 0) {
+ lo = lo * 10 + (*cur++ - '0');
+ i--;
+ }
+
+ *str = cur;
+ *llo = lo;
+ *lmi = mi;
+ *lhi = hi;
+ return(ret);
+}
+
+/**
+ * xmlSchemaValAtomicType:
+ * @type: the predefined type
+ * @value: the value to check
+ * @val: the return computed value
+ * @node: the node containing the value
+ * flags: flags to control the vlidation
+ *
+ * Check that a value conforms to the lexical space of the atomic type.
+ * if true a value is computed and returned in @val.
+ *
+ * Returns 0 if this validates, a positive error code number otherwise
+ * and -1 in case of internal or API error.
+ */
+static int
+xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
+ xmlSchemaValPtr * val, xmlNodePtr node, int flags)
+{
+ xmlSchemaValPtr v;
+ xmlChar *norm = NULL;
+ int ret = 0;
+
+ if (xmlSchemaTypesInitialized == 0)
+ return (-1);
+ if (type == NULL)
+ return (-1);
+
+ if (val != NULL)
+ *val = NULL;
+ if ((flags == 0) && (value != NULL)) {
+ if ((type->flags != XML_SCHEMAS_STRING) &&
+ (type->flags != XML_SCHEMAS_NORMSTRING)) {
+ norm = xmlSchemaCollapseString(value);
+ if (norm != NULL)
+ value = norm;
+ }
+ }
+
+ switch (type->flags) {
+ case XML_SCHEMAS_UNKNOWN:
+ if (type == xmlSchemaTypeAnyTypeDef)
+ goto return0;
+ goto error;
+ case XML_SCHEMAS_STRING:
+ goto return0;
+ case XML_SCHEMAS_NORMSTRING:{
+ const xmlChar *cur = value;
+
+ while (*cur != 0) {
+ if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
+ goto return1;
+ } else {
+ cur++;
+ }
+ }
+ if (val != NULL) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_NORMSTRING);
+ if (v != NULL) {
+ v->value.str = xmlStrdup(value);
+ *val = v;
+ } else {
+ goto error;
+ }
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_DECIMAL:{
+ const xmlChar *cur = value, *tmp;
+ unsigned int frac = 0, len, neg = 0;
+ unsigned long base = 0;
+
+ if (cur == NULL)
+ goto return1;
+ if (*cur == '+')
+ cur++;
+ else if (*cur == '-') {
+ neg = 1;
+ cur++;
+ }
+ tmp = cur;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ base = base * 10 + (*cur - '0');
+ cur++;
+ }
+ len = cur - tmp;
+ if (*cur == '.') {
+ cur++;
+ tmp = cur;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ base = base * 10 + (*cur - '0');
+ cur++;
+ }
+ frac = cur - tmp;
+ }
+ if (*cur != 0)
+ goto return1;
+ if (val != NULL) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_DECIMAL);
+ if (v != NULL) {
+ v->value.decimal.lo = base;
+ v->value.decimal.sign = neg;
+ v->value.decimal.frac = frac;
+ v->value.decimal.total = frac + len;
+ *val = v;
+ }
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_TIME:
+ case XML_SCHEMAS_GDAY:
+ case XML_SCHEMAS_GMONTH:
+ case XML_SCHEMAS_GMONTHDAY:
+ case XML_SCHEMAS_GYEAR:
+ case XML_SCHEMAS_GYEARMONTH:
+ case XML_SCHEMAS_DATE:
+ case XML_SCHEMAS_DATETIME:
+ ret = xmlSchemaValidateDates(type->flags, value, val);
+ break;
+ case XML_SCHEMAS_DURATION:
+ ret = xmlSchemaValidateDuration(type, value, val);
+ break;
+ case XML_SCHEMAS_FLOAT:
+ case XML_SCHEMAS_DOUBLE:{
+ const xmlChar *cur = value;
+ int neg = 0;
+
+ if (cur == NULL)
+ goto return1;
+ if ((cur[0] == 'N') && (cur[1] == 'a') && (cur[2] == 'N')) {
+ cur += 3;
+ if (*cur != 0)
+ goto return1;
+ if (val != NULL) {
+ if (type == xmlSchemaTypeFloatDef) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
+ if (v != NULL) {
+ v->value.f = (float) xmlXPathNAN;
+ } else {
+ xmlSchemaFreeValue(v);
+ goto error;
+ }
+ } else {
+ v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
+ if (v != NULL) {
+ v->value.d = xmlXPathNAN;
+ } else {
+ xmlSchemaFreeValue(v);
+ goto error;
+ }
+ }
+ *val = v;
+ }
+ goto return0;
+ }
+ if (*cur == '-') {
+ neg = 1;
+ cur++;
+ }
+ if ((cur[0] == 'I') && (cur[1] == 'N') && (cur[2] == 'F')) {
+ cur += 3;
+ if (*cur != 0)
+ goto return1;
+ if (val != NULL) {
+ if (type == xmlSchemaTypeFloatDef) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
+ if (v != NULL) {
+ if (neg)
+ v->value.f = (float) xmlXPathNINF;
+ else
+ v->value.f = (float) xmlXPathPINF;
+ } else {
+ xmlSchemaFreeValue(v);
+ goto error;
+ }
+ } else {
+ v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
+ if (v != NULL) {
+ if (neg)
+ v->value.d = xmlXPathNINF;
+ else
+ v->value.d = xmlXPathPINF;
+ } else {
+ xmlSchemaFreeValue(v);
+ goto error;
+ }
+ }
+ *val = v;
+ }
+ goto return0;
+ }
+ if ((neg == 0) && (*cur == '+'))
+ cur++;
+ if ((cur[0] == 0) || (cur[0] == '+') || (cur[0] == '-'))
+ goto return1;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ cur++;
+ }
+ if (*cur == '.') {
+ cur++;
+ while ((*cur >= '0') && (*cur <= '9'))
+ cur++;
+ }
+ if ((*cur == 'e') || (*cur == 'E')) {
+ cur++;
+ if ((*cur == '-') || (*cur == '+'))
+ cur++;
+ while ((*cur >= '0') && (*cur <= '9'))
+ cur++;
+ }
+ if (*cur != 0)
+ goto return1;
+ if (val != NULL) {
+ if (type == xmlSchemaTypeFloatDef) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
+ if (v != NULL) {
+ if (sscanf((const char *) value, "%f",
+ &(v->value.f)) == 1) {
+ *val = v;
+ } else {
+ xmlSchemaFreeValue(v);
+ goto return1;
+ }
+ } else {
+ goto error;
+ }
+ } else {
+ v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
+ if (v != NULL) {
+ if (sscanf((const char *) value, "%lf",
+ &(v->value.d)) == 1) {
+ *val = v;
+ } else {
+ xmlSchemaFreeValue(v);
+ goto return1;
+ }
+ } else {
+ goto error;
+ }
+ }
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_BOOLEAN:{
+ const xmlChar *cur = value;
+
+ if ((cur[0] == '0') && (cur[1] == 0))
+ ret = 0;
+ else if ((cur[0] == '1') && (cur[1] == 0))
+ ret = 1;
+ else if ((cur[0] == 't') && (cur[1] == 'r')
+ && (cur[2] == 'u') && (cur[3] == 'e')
+ && (cur[4] == 0))
+ ret = 1;
+ else if ((cur[0] == 'f') && (cur[1] == 'a')
+ && (cur[2] == 'l') && (cur[3] == 's')
+ && (cur[4] == 'e') && (cur[5] == 0))
+ ret = 0;
+ else
+ goto return1;
+ if (val != NULL) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_BOOLEAN);
+ if (v != NULL) {
+ v->value.b = ret;
+ *val = v;
+ } else {
+ goto error;
+ }
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_TOKEN:{
+ const xmlChar *cur = value;
+
+ if (IS_BLANK_CH(*cur))
+ goto return1;
+
+ while (*cur != 0) {
+ if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
+ goto return1;
+ } else if (*cur == ' ') {
+ cur++;
+ if (*cur == 0)
+ goto return1;
+ if (*cur == ' ')
+ goto return1;
+ } else {
+ cur++;
+ }
+ }
+ if (val != NULL) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_TOKEN);
+ if (v != NULL) {
+ v->value.str = xmlStrdup(value);
+ *val = v;
+ } else {
+ goto error;
+ }
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_LANGUAGE:
+ if (xmlCheckLanguageID(value) == 1) {
+ if (val != NULL) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_LANGUAGE);
+ if (v != NULL) {
+ v->value.str = xmlStrdup(value);
+ *val = v;
+ } else {
+ goto error;
+ }
+ }
+ goto return0;
+ }
+ goto return1;
+ case XML_SCHEMAS_NMTOKEN:
+ if (xmlValidateNMToken(value, 1) == 0) {
+ if (val != NULL) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_NMTOKEN);
+ if (v != NULL) {
+ v->value.str = xmlStrdup(value);
+ *val = v;
+ } else {
+ goto error;
+ }
+ }
+ goto return0;
+ }
+ goto return1;
+ case XML_SCHEMAS_NMTOKENS:
+ ret = xmlSchemaValAtomicListNode(xmlSchemaTypeNmtokenDef,
+ value, val, node);
+ if (ret > 0)
+ ret = 0;
+ else
+ ret = 1;
+ goto done;
+ case XML_SCHEMAS_NAME:
+ ret = xmlValidateName(value, 1);
+ if ((ret == 0) && (val != NULL)) {
+ TODO;
+ }
+ goto done;
+ case XML_SCHEMAS_QNAME:{
+ xmlChar *uri = NULL;
+ xmlChar *local = NULL;
+
+ ret = xmlValidateQName(value, 1);
+ if ((ret == 0) && (node != NULL)) {
+ xmlChar *prefix;
+
+ local = xmlSplitQName2(value, &prefix);
+ if (prefix != NULL) {
+ xmlNsPtr ns;
+
+ ns = xmlSearchNs(node->doc, node, prefix);
+ if (ns == NULL)
+ ret = 1;
+ else if (val != NULL)
+ uri = xmlStrdup(ns->href);
+ }
+ if ((local != NULL) && ((val == NULL) || (ret != 0)))
+ xmlFree(local);
+ if (prefix != NULL)
+ xmlFree(prefix);
+ }
+ if ((ret == 0) && (val != NULL)) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_QNAME);
+ if (v != NULL) {
+ if (local != NULL)
+ v->value.qname.name = local;
+ else
+ v->value.qname.name = xmlStrdup(value);
+ if (uri != NULL)
+ v->value.qname.uri = uri;
+
+ *val = v;
+ } else {
+ if (local != NULL)
+ xmlFree(local);
+ if (uri != NULL)
+ xmlFree(uri);
+ goto error;
+ }
+ }
+ goto done;
+ }
+ case XML_SCHEMAS_NCNAME:
+ ret = xmlValidateNCName(value, 1);
+ if ((ret == 0) && (val != NULL)) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_NCNAME);
+ if (v != NULL) {
+ v->value.str = xmlStrdup(value);
+ *val = v;
+ } else {
+ goto error;
+ }
+ }
+ goto done;
+ case XML_SCHEMAS_ID:
+ ret = xmlValidateNCName(value, 1);
+ if ((ret == 0) && (val != NULL)) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_ID);
+ if (v != NULL) {
+ v->value.str = xmlStrdup(value);
+ *val = v;
+ } else {
+ goto error;
+ }
+ }
+ if ((ret == 0) && (node != NULL) &&
+ (node->type == XML_ATTRIBUTE_NODE)) {
+ xmlAttrPtr attr = (xmlAttrPtr) node;
+
+ /*
+ * NOTE: the IDness might have already be declared in the DTD
+ */
+ if (attr->atype != XML_ATTRIBUTE_ID) {
+ xmlIDPtr res;
+ xmlChar *strip;
+
+ strip = xmlSchemaStrip(value);
+ if (strip != NULL) {
+ res = xmlAddID(NULL, node->doc, strip, attr);
+ xmlFree(strip);
+ } else
+ res = xmlAddID(NULL, node->doc, value, attr);
+ if (res == NULL) {
+ ret = 2;
+ } else {
+ attr->atype = XML_ATTRIBUTE_ID;
+ }
+ }
+ }
+ goto done;
+ case XML_SCHEMAS_IDREF:
+ ret = xmlValidateNCName(value, 1);
+ if ((ret == 0) && (val != NULL)) {
+ TODO;
+ }
+ if ((ret == 0) && (node != NULL) &&
+ (node->type == XML_ATTRIBUTE_NODE)) {
+ xmlAttrPtr attr = (xmlAttrPtr) node;
+ xmlChar *strip;
+
+ strip = xmlSchemaStrip(value);
+ if (strip != NULL) {
+ xmlAddRef(NULL, node->doc, strip, attr);
+ xmlFree(strip);
+ } else
+ xmlAddRef(NULL, node->doc, value, attr);
+ attr->atype = XML_ATTRIBUTE_IDREF;
+ }
+ goto done;
+ case XML_SCHEMAS_IDREFS:
+ ret = xmlSchemaValAtomicListNode(xmlSchemaTypeIdrefDef,
+ value, val, node);
+ if (ret < 0)
+ ret = 2;
+ else
+ ret = 0;
+ if ((ret == 0) && (node != NULL) &&
+ (node->type == XML_ATTRIBUTE_NODE)) {
+ xmlAttrPtr attr = (xmlAttrPtr) node;
+
+ attr->atype = XML_ATTRIBUTE_IDREFS;
+ }
+ goto done;
+ case XML_SCHEMAS_ENTITY:{
+ xmlChar *strip;
+
+ ret = xmlValidateNCName(value, 1);
+ if ((node == NULL) || (node->doc == NULL))
+ ret = 3;
+ if (ret == 0) {
+ xmlEntityPtr ent;
+
+ strip = xmlSchemaStrip(value);
+ if (strip != NULL) {
+ ent = xmlGetDocEntity(node->doc, strip);
+ xmlFree(strip);
+ } else {
+ ent = xmlGetDocEntity(node->doc, value);
+ }
+ if ((ent == NULL) ||
+ (ent->etype !=
+ XML_EXTERNAL_GENERAL_UNPARSED_ENTITY))
+ ret = 4;
+ }
+ if ((ret == 0) && (val != NULL)) {
+ TODO;
+ }
+ if ((ret == 0) && (node != NULL) &&
+ (node->type == XML_ATTRIBUTE_NODE)) {
+ xmlAttrPtr attr = (xmlAttrPtr) node;
+
+ attr->atype = XML_ATTRIBUTE_ENTITY;
+ }
+ goto done;
+ }
+ case XML_SCHEMAS_ENTITIES:
+ if ((node == NULL) || (node->doc == NULL))
+ goto return3;
+ ret = xmlSchemaValAtomicListNode(xmlSchemaTypeEntityDef,
+ value, val, node);
+ if (ret <= 0)
+ ret = 1;
+ else
+ ret = 0;
+ if ((ret == 0) && (node != NULL) &&
+ (node->type == XML_ATTRIBUTE_NODE)) {
+ xmlAttrPtr attr = (xmlAttrPtr) node;
+
+ attr->atype = XML_ATTRIBUTE_ENTITIES;
+ }
+ goto done;
+ case XML_SCHEMAS_NOTATION:{
+ xmlChar *uri = NULL;
+ xmlChar *local = NULL;
+
+ ret = xmlValidateQName(value, 1);
+ if ((ret == 0) && (node != NULL)) {
+ xmlChar *prefix;
+
+ local = xmlSplitQName2(value, &prefix);
+ if (prefix != NULL) {
+ xmlNsPtr ns;
+
+ ns = xmlSearchNs(node->doc, node, prefix);
+ if (ns == NULL)
+ ret = 1;
+ else if (val != NULL)
+ uri = xmlStrdup(ns->href);
+ }
+ if ((local != NULL) && ((val == NULL) || (ret != 0)))
+ xmlFree(local);
+ if (prefix != NULL)
+ xmlFree(prefix);
+ }
+ if ((node == NULL) || (node->doc == NULL))
+ ret = 3;
+ if (ret == 0) {
+ ret = xmlValidateNotationUse(NULL, node->doc, value);
+ if (ret == 1)
+ ret = 0;
+ else
+ ret = 1;
+ }
+ if ((ret == 0) && (val != NULL)) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_NOTATION);
+ if (v != NULL) {
+ if (local != NULL)
+ v->value.qname.name = local;
+ else
+ v->value.qname.name = xmlStrdup(value);
+ if (uri != NULL)
+ v->value.qname.uri = uri;
+
+ *val = v;
+ } else {
+ if (local != NULL)
+ xmlFree(local);
+ if (uri != NULL)
+ xmlFree(uri);
+ goto error;
+ }
+ }
+ goto done;
+ }
+ case XML_SCHEMAS_ANYURI:{
+ if (*value != 0) {
+ xmlURIPtr uri = xmlParseURI((const char *) value);
+ if (uri == NULL)
+ goto return1;
+ xmlFreeURI(uri);
+ }
+
+ if (val != NULL) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_ANYURI);
+ if (v == NULL)
+ goto error;
+ v->value.str = xmlStrdup(value);
+ *val = v;
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_HEXBINARY:{
+ const xmlChar *cur = value;
+ xmlChar *base;
+ int total, i = 0;
+
+ if (cur == NULL)
+ goto return1;
+
+ while (((*cur >= '0') && (*cur <= '9')) ||
+ ((*cur >= 'A') && (*cur <= 'F')) ||
+ ((*cur >= 'a') && (*cur <= 'f'))) {
+ i++;
+ cur++;
+ }
+
+ if (*cur != 0)
+ goto return1;
+ if ((i % 2) != 0)
+ goto return1;
+
+ if (val != NULL) {
+
+ v = xmlSchemaNewValue(XML_SCHEMAS_HEXBINARY);
+ if (v == NULL)
+ goto error;
+
+ cur = xmlStrdup(value);
+ if (cur == NULL) {
+ xmlSchemaTypeErrMemory(node, "allocating hexbin data");
+ xmlFree(v);
+ goto return1;
+ }
+
+ total = i / 2; /* number of octets */
+
+ base = (xmlChar *) cur;
+ while (i-- > 0) {
+ if (*base >= 'a')
+ *base = *base - ('a' - 'A');
+ base++;
+ }
+
+ v->value.hex.str = (xmlChar *) cur;
+ v->value.hex.total = total;
+ *val = v;
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_BASE64BINARY:{
+ /* ISSUE:
+ *
+ * Ignore all stray characters? (yes, currently)
+ * Worry about long lines? (no, currently)
+ *
+ * rfc2045.txt:
+ *
+ * "The encoded output stream must be represented in lines of
+ * no more than 76 characters each. All line breaks or other
+ * characters not found in Table 1 must be ignored by decoding
+ * software. In base64 data, characters other than those in
+ * Table 1, line breaks, and other white space probably
+ * indicate a transmission error, about which a warning
+ * message or even a message rejection might be appropriate
+ * under some circumstances." */
+ const xmlChar *cur = value;
+ xmlChar *base;
+ int total, i = 0, pad = 0;
+
+ if (cur == NULL)
+ goto return1;
+
+ for (; *cur; ++cur) {
+ int decc;
+
+ decc = _xmlSchemaBase64Decode(*cur);
+ if (decc < 0) ;
+ else if (decc < 64)
+ i++;
+ else
+ break;
+ }
+ for (; *cur; ++cur) {
+ int decc;
+
+ decc = _xmlSchemaBase64Decode(*cur);
+ if (decc < 0) ;
+ else if (decc < 64)
+ goto return1;
+ if (decc == 64)
+ pad++;
+ }
+
+ /* rfc2045.txt: "Special processing is performed if fewer than
+ * 24 bits are available at the end of the data being encoded.
+ * A full encoding quantum is always completed at the end of a
+ * body. When fewer than 24 input bits are available in an
+ * input group, zero bits are added (on the right) to form an
+ * integral number of 6-bit groups. Padding at the end of the
+ * data is performed using the "=" character. Since all
+ * base64 input is an integral number of octets, only the
+ * following cases can arise: (1) the final quantum of
+ * encoding input is an integral multiple of 24 bits; here,
+ * the final unit of encoded output will be an integral
+ * multiple ofindent: Standard input:701: Warning:old style
+ * assignment ambiguity in "=*". Assuming "= *" 4 characters
+ * with no "=" padding, (2) the final
+ * quantum of encoding input is exactly 8 bits; here, the
+ * final unit of encoded output will be two characters
+ * followed by two "=" padding characters, or (3) the final
+ * quantum of encoding input is exactly 16 bits; here, the
+ * final unit of encoded output will be three characters
+ * followed by one "=" padding character." */
+
+ total = 3 * (i / 4);
+ if (pad == 0) {
+ if (i % 4 != 0)
+ goto return1;
+ } else if (pad == 1) {
+ int decc;
+
+ if (i % 4 != 3)
+ goto return1;
+ for (decc = _xmlSchemaBase64Decode(*cur);
+ (decc < 0) || (decc > 63);
+ decc = _xmlSchemaBase64Decode(*cur))
+ --cur;
+ /* 16bits in 24bits means 2 pad bits: nnnnnn nnmmmm mmmm00*/
+ /* 00111100 -> 0x3c */
+ if (decc & ~0x3c)
+ goto return1;
+ total += 2;
+ } else if (pad == 2) {
+ int decc;
+
+ if (i % 4 != 2)
+ goto return1;
+ for (decc = _xmlSchemaBase64Decode(*cur);
+ (decc < 0) || (decc > 63);
+ decc = _xmlSchemaBase64Decode(*cur))
+ --cur;
+ /* 8bits in 12bits means 4 pad bits: nnnnnn nn0000 */
+ /* 00110000 -> 0x30 */
+ if (decc & ~0x30)
+ goto return1;
+ total += 1;
+ } else
+ goto return1;
+
+ if (val != NULL) {
+ v = xmlSchemaNewValue(XML_SCHEMAS_BASE64BINARY);
+ if (v == NULL)
+ goto error;
+ base =
+ (xmlChar *) xmlMallocAtomic((i + pad + 1) *
+ sizeof(xmlChar));
+ if (base == NULL) {
+ xmlSchemaTypeErrMemory(node, "allocating base64 data");
+ xmlFree(v);
+ goto return1;
+ }
+ v->value.base64.str = base;
+ for (cur = value; *cur; ++cur)
+ if (_xmlSchemaBase64Decode(*cur) >= 0) {
+ *base = *cur;
+ ++base;
+ }
+ *base = 0;
+ v->value.base64.total = total;
+ *val = v;
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_INTEGER:
+ case XML_SCHEMAS_PINTEGER:
+ case XML_SCHEMAS_NPINTEGER:
+ case XML_SCHEMAS_NINTEGER:
+ case XML_SCHEMAS_NNINTEGER:{
+ const xmlChar *cur = value;
+ unsigned long lo, mi, hi;
+ int sign = 0;
+
+ if (cur == NULL)
+ goto return1;
+ if (*cur == '-') {
+ sign = 1;
+ cur++;
+ } else if (*cur == '+')
+ cur++;
+ ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
+ if (ret == 0)
+ goto return1;
+ if (*cur != 0)
+ goto return1;
+ if (type->flags == XML_SCHEMAS_NPINTEGER) {
+ if ((sign == 0) &&
+ ((hi != 0) || (mi != 0) || (lo != 0)))
+ goto return1;
+ } else if (type->flags == XML_SCHEMAS_PINTEGER) {
+ if (sign == 1)
+ goto return1;
+ if ((hi == 0) && (mi == 0) && (lo == 0))
+ goto return1;
+ } else if (type->flags == XML_SCHEMAS_NINTEGER) {
+ if (sign == 0)
+ goto return1;
+ if ((hi == 0) && (mi == 0) && (lo == 0))
+ goto return1;
+ } else if (type->flags == XML_SCHEMAS_NNINTEGER) {
+ if ((sign == 1) &&
+ ((hi != 0) || (mi != 0) || (lo != 0)))
+ goto return1;
+ }
+ /*
+ * We can store a value only if no overflow occured
+ */
+ if ((ret > 0) && (val != NULL)) {
+ v = xmlSchemaNewValue(type->flags);
+ if (v != NULL) {
+ v->value.decimal.lo = lo;
+ v->value.decimal.mi = lo;
+ v->value.decimal.hi = lo;
+ v->value.decimal.sign = sign;
+ v->value.decimal.frac = 0;
+ v->value.decimal.total = cur - value;
+ *val = v;
+ }
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_LONG:
+ case XML_SCHEMAS_BYTE:
+ case XML_SCHEMAS_SHORT:
+ case XML_SCHEMAS_INT:{
+ const xmlChar *cur = value;
+ unsigned long lo, mi, hi;
+ int total = 0;
+ int sign = 0;
+
+ if (cur == NULL)
+ goto return1;
+ if (*cur == '-') {
+ sign = 1;
+ cur++;
+ } else if (*cur == '+')
+ cur++;
+ ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
+ if (ret <= 0)
+ goto return1;
+ if (*cur != 0)
+ goto return1;
+ if (type->flags == XML_SCHEMAS_LONG) {
+ if (hi >= 922) {
+ if (hi > 922)
+ goto return1;
+ if (mi >= 33720368) {
+ if (mi > 33720368)
+ goto return1;
+ if ((sign == 0) && (lo > 54775807))
+ goto return1;
+ if ((sign == 1) && (lo > 54775808))
+ goto return1;
+ }
+ }
+ } else if (type->flags == XML_SCHEMAS_INT) {
+ if (hi != 0)
+ goto return1;
+ if (mi >= 21) {
+ if (mi > 21)
+ goto return1;
+ if ((sign == 0) && (lo > 47483647))
+ goto return1;
+ if ((sign == 1) && (lo > 47483648))
+ goto return1;
+ }
+ } else if (type->flags == XML_SCHEMAS_SHORT) {
+ if ((mi != 0) || (hi != 0))
+ goto return1;
+ if ((sign == 1) && (lo > 32768))
+ goto return1;
+ if ((sign == 0) && (lo > 32767))
+ goto return1;
+ } else if (type->flags == XML_SCHEMAS_BYTE) {
+ if ((mi != 0) || (hi != 0))
+ goto return1;
+ if ((sign == 1) && (lo > 128))
+ goto return1;
+ if ((sign == 0) && (lo > 127))
+ goto return1;
+ }
+ if (val != NULL) {
+ v = xmlSchemaNewValue(type->flags);
+ if (v != NULL) {
+ v->value.decimal.lo = lo;
+ v->value.decimal.mi = lo;
+ v->value.decimal.hi = lo;
+ v->value.decimal.sign = sign;
+ v->value.decimal.frac = 0;
+ v->value.decimal.total = total;
+ *val = v;
+ }
+ }
+ goto return0;
+ }
+ case XML_SCHEMAS_UINT:
+ case XML_SCHEMAS_ULONG:
+ case XML_SCHEMAS_USHORT:
+ case XML_SCHEMAS_UBYTE:{
+ const xmlChar *cur = value;
+ unsigned long lo, mi, hi;
+ int total = 0;
+
+ if (cur == NULL)
+ goto return1;
+ ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
+ if (ret <= 0)
+ goto return1;
+ if (*cur != 0)
+ goto return1;
+ if (type->flags == XML_SCHEMAS_ULONG) {
+ if (hi >= 1844) {
+ if (hi > 1844)
+ goto return1;
+ if (mi >= 67440737) {
+ if (mi > 67440737)
+ goto return1;
+ if (lo > 9551615)
+ goto return1;
+ }
+ }
+ } else if (type->flags == XML_SCHEMAS_UINT) {
+ if (hi != 0)
+ goto return1;
+ if (mi >= 42) {
+ if (mi > 42)
+ goto return1;
+ if (lo > 94967295)
+ goto return1;
+ }
+ } else if (type->flags == XML_SCHEMAS_USHORT) {
+ if ((mi != 0) || (hi != 0))
+ goto return1;
+ if (lo > 65535)
+ goto return1;
+ } else if (type->flags == XML_SCHEMAS_UBYTE) {
+ if ((mi != 0) || (hi != 0))
+ goto return1;
+ if (lo > 255)
+ goto return1;
+ }
+ if (val != NULL) {
+ v = xmlSchemaNewValue(type->flags);
+ if (v != NULL) {
+ v->value.decimal.lo = lo;
+ v->value.decimal.mi = mi;
+ v->value.decimal.hi = hi;
+ v->value.decimal.sign = 0;
+ v->value.decimal.frac = 0;
+ v->value.decimal.total = total;
+ *val = v;
+ }
+ }
+ goto return0;
+ }
+ }
+
+ done:
+ if (norm != NULL)
+ xmlFree(norm);
+ return (ret);
+ return3:
+ if (norm != NULL)
+ xmlFree(norm);
+ return (3);
+ return1:
+ if (norm != NULL)
+ xmlFree(norm);
+ return (1);
+ return0:
+ if (norm != NULL)
+ xmlFree(norm);
+ return (0);
+ error:
+ if (norm != NULL)
+ xmlFree(norm);
+ return (-1);
+}
+
+/**
+ * xmlSchemaValPredefTypeNode:
+ * @type: the predefined type
+ * @value: the value to check
+ * @val: the return computed value
+ * @node: the node containing the value
+ *
+ * Check that a value conforms to the lexical space of the predefined type.
+ * if true a value is computed and returned in @val.
+ *
+ * Returns 0 if this validates, a positive error code number otherwise
+ * and -1 in case of internal or API error.
+ */
+int
+xmlSchemaValPredefTypeNode(xmlSchemaTypePtr type, const xmlChar *value,
+ xmlSchemaValPtr *val, xmlNodePtr node) {
+ return(xmlSchemaValAtomicType(type, value, val, node, 0));
+}
+
+/**
+ * xmlSchemaValidatePredefinedType:
+ * @type: the predefined type
+ * @value: the value to check
+ * @val: the return computed value
+ *
+ * Check that a value conforms to the lexical space of the predefined type.
+ * if true a value is computed and returned in @val.
+ *
+ * Returns 0 if this validates, a positive error code number otherwise
+ * and -1 in case of internal or API error.
+ */
+int
+xmlSchemaValidatePredefinedType(xmlSchemaTypePtr type, const xmlChar *value,
+ xmlSchemaValPtr *val) {
+ return(xmlSchemaValPredefTypeNode(type, value, val, NULL));
+}
+
+/**
+ * xmlSchemaCompareDecimals:
+ * @x: a first decimal value
+ * @y: a second decimal value
+ *
+ * Compare 2 decimals
+ *
+ * Returns -1 if x < y, 0 if x == y, 1 if x > y and -2 in case of error
+ */
+static int
+xmlSchemaCompareDecimals(xmlSchemaValPtr x, xmlSchemaValPtr y)
+{
+ xmlSchemaValPtr swp;
+ int order = 1, p;
+ unsigned long tmp;
+
+ if ((x->value.decimal.sign) &&
+ ((x->value.decimal.lo != 0) ||
+ (x->value.decimal.mi != 0) ||
+ (x->value.decimal.hi != 0))) {
+ if ((y->value.decimal.sign) &&
+ ((y->value.decimal.lo != 0) ||
+ (y->value.decimal.mi != 0) ||
+ (y->value.decimal.hi != 0)))
+ order = -1;
+ else
+ return (-1);
+ } else if ((y->value.decimal.sign) &&
+ ((y->value.decimal.lo != 0) ||
+ (y->value.decimal.mi != 0) ||
+ (y->value.decimal.hi != 0))) {
+ return (1);
+ }
+ if (x->value.decimal.frac == y->value.decimal.frac) {
+ if (x->value.decimal.hi < y->value.decimal.hi)
+ return (-order);
+ if (x->value.decimal.hi < y->value.decimal.hi)
+ return (order);
+ if (x->value.decimal.mi < y->value.decimal.mi)
+ return (-order);
+ if (x->value.decimal.mi < y->value.decimal.mi)
+ return (order);
+ if (x->value.decimal.lo < y->value.decimal.lo)
+ return (-order);
+ if (x->value.decimal.lo > y->value.decimal.lo)
+ return(order);
+ return(0);
+ }
+ if (y->value.decimal.frac > x->value.decimal.frac) {
+ swp = y;
+ y = x;
+ x = swp;
+ order = -order;
+ }
+ p = powten[x->value.decimal.frac - y->value.decimal.frac];
+ tmp = x->value.decimal.lo / p;
+ if (tmp > y->value.decimal.lo)
+ return (order);
+ if (tmp < y->value.decimal.lo)
+ return (-order);
+ tmp = y->value.decimal.lo * p;
+ if (x->value.decimal.lo < tmp)
+ return (-order);
+ if (x->value.decimal.lo == tmp)
+ return (0);
+ return (order);
+}
+
+/**
+ * xmlSchemaCompareDurations:
+ * @x: a first duration value
+ * @y: a second duration value
+ *
+ * Compare 2 durations
+ *
+ * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
+ * case of error
+ */
+static int
+xmlSchemaCompareDurations(xmlSchemaValPtr x, xmlSchemaValPtr y)
+{
+ long carry, mon, day;
+ double sec;
+ int invert = 1;
+ long xmon, xday, myear, minday, maxday;
+ static const long dayRange [2][12] = {
+ { 0, 28, 59, 89, 120, 150, 181, 212, 242, 273, 303, 334, },
+ { 0, 31, 62, 92, 123, 153, 184, 215, 245, 276, 306, 337} };
+
+ if ((x == NULL) || (y == NULL))
+ return -2;
+
+ /* months */
+ mon = x->value.dur.mon - y->value.dur.mon;
+
+ /* seconds */
+ sec = x->value.dur.sec - y->value.dur.sec;
+ carry = (long)sec / SECS_PER_DAY;
+ sec -= (double)(carry * SECS_PER_DAY);
+
+ /* days */
+ day = x->value.dur.day - y->value.dur.day + carry;
+
+ /* easy test */
+ if (mon == 0) {
+ if (day == 0)
+ if (sec == 0.0)
+ return 0;
+ else if (sec < 0.0)
+ return -1;
+ else
+ return 1;
+ else if (day < 0)
+ return -1;
+ else
+ return 1;
+ }
+
+ if (mon > 0) {
+ if ((day >= 0) && (sec >= 0.0))
+ return 1;
+ else {
+ xmon = mon;
+ xday = -day;
+ }
+ } else if ((day <= 0) && (sec <= 0.0)) {
+ return -1;
+ } else {
+ invert = -1;
+ xmon = -mon;
+ xday = day;
+ }
+
+ myear = xmon / 12;
+ if (myear == 0) {
+ minday = 0;
+ maxday = 0;
+ } else {
+ maxday = 366 * ((myear + 3) / 4) +
+ 365 * ((myear - 1) % 4);
+ minday = maxday - 1;
+ }
+
+ xmon = xmon % 12;
+ minday += dayRange[0][xmon];
+ maxday += dayRange[1][xmon];
+
+ if ((maxday == minday) && (maxday == xday))
+ return(0); /* can this really happen ? */
+ if (maxday < xday)
+ return(-invert);
+ if (minday > xday)
+ return(invert);
+
+ /* indeterminate */
+ return 2;
+}
+
+/*
+ * macros for adding date/times and durations
+ */
+#define FQUOTIENT(a,b) (floor(((double)a/(double)b)))
+#define MODULO(a,b) (a - FQUOTIENT(a,b) * b)
+#define FQUOTIENT_RANGE(a,low,high) (FQUOTIENT((a-low),(high-low)))
+#define MODULO_RANGE(a,low,high) ((MODULO((a-low),(high-low)))+low)
+
+/**
+ * _xmlSchemaDateAdd:
+ * @dt: an #xmlSchemaValPtr
+ * @dur: an #xmlSchemaValPtr of type #XS_DURATION
+ *
+ * Compute a new date/time from @dt and @dur. This function assumes @dt
+ * is either #XML_SCHEMAS_DATETIME, #XML_SCHEMAS_DATE, #XML_SCHEMAS_GYEARMONTH,
+ * or #XML_SCHEMAS_GYEAR.
+ *
+ * Returns date/time pointer or NULL.
+ */
+static xmlSchemaValPtr
+_xmlSchemaDateAdd (xmlSchemaValPtr dt, xmlSchemaValPtr dur)
+{
+ xmlSchemaValPtr ret;
+ long carry, tempdays, temp;
+ xmlSchemaValDatePtr r, d;
+ xmlSchemaValDurationPtr u;
+
+ if ((dt == NULL) || (dur == NULL))
+ return NULL;
+
+ ret = xmlSchemaNewValue(dt->type);
+ if (ret == NULL)
+ return NULL;
+
+ r = &(ret->value.date);
+ d = &(dt->value.date);
+ u = &(dur->value.dur);
+
+ /* normalization */
+ if (d->mon == 0)
+ d->mon = 1;
+
+ /* normalize for time zone offset */
+ u->sec -= (d->tzo * 60);
+ d->tzo = 0;
+
+ /* normalization */
+ if (d->day == 0)
+ d->day = 1;
+
+ /* month */
+ carry = d->mon + u->mon;
+ r->mon = MODULO_RANGE(carry, 1, 13);
+ carry = FQUOTIENT_RANGE(carry, 1, 13);
+
+ /* year (may be modified later) */
+ r->year = d->year + carry;
+ if (r->year == 0) {
+ if (d->year > 0)
+ r->year--;
+ else
+ r->year++;
+ }
+
+ /* time zone */
+ r->tzo = d->tzo;
+ r->tz_flag = d->tz_flag;
+
+ /* seconds */
+ r->sec = d->sec + u->sec;
+ carry = FQUOTIENT((long)r->sec, 60);
+ if (r->sec != 0.0) {
+ r->sec = MODULO(r->sec, 60.0);
+ }
+
+ /* minute */
+ carry += d->min;
+ r->min = MODULO(carry, 60);
+ carry = FQUOTIENT(carry, 60);
+
+ /* hours */
+ carry += d->hour;
+ r->hour = MODULO(carry, 24);
+ carry = FQUOTIENT(carry, 24);
+
+ /*
+ * days
+ * Note we use tempdays because the temporary values may need more
+ * than 5 bits
+ */
+ if ((VALID_YEAR(r->year)) && (VALID_MONTH(r->mon)) &&
+ (d->day > MAX_DAYINMONTH(r->year, r->mon)))
+ tempdays = MAX_DAYINMONTH(r->year, r->mon);
+ else if (d->day < 1)
+ tempdays = 1;
+ else
+ tempdays = d->day;
+
+ tempdays += u->day + carry;
+
+ while (1) {
+ if (tempdays < 1) {
+ long tmon = MODULO_RANGE(r->mon-1, 1, 13);
+ long tyr = r->year + FQUOTIENT_RANGE(r->mon-1, 1, 13);
+ if (tyr == 0)
+ tyr--;
+ tempdays += MAX_DAYINMONTH(tyr, tmon);
+ carry = -1;
+ } else if (tempdays > MAX_DAYINMONTH(r->year, r->mon)) {
+ tempdays = tempdays - MAX_DAYINMONTH(r->year, r->mon);
+ carry = 1;
+ } else
+ break;
+
+ temp = r->mon + carry;
+ r->mon = MODULO_RANGE(temp, 1, 13);
+ r->year = r->year + FQUOTIENT_RANGE(temp, 1, 13);
+ if (r->year == 0) {
+ if (temp < 1)
+ r->year--;
+ else
+ r->year++;
+ }
+ }
+
+ r->day = tempdays;
+
+ /*
+ * adjust the date/time type to the date values
+ */
+ if (ret->type != XML_SCHEMAS_DATETIME) {
+ if ((r->hour) || (r->min) || (r->sec))
+ ret->type = XML_SCHEMAS_DATETIME;
+ else if (ret->type != XML_SCHEMAS_DATE) {
+ if ((r->mon != 1) && (r->day != 1))
+ ret->type = XML_SCHEMAS_DATE;
+ else if ((ret->type != XML_SCHEMAS_GYEARMONTH) && (r->mon != 1))
+ ret->type = XML_SCHEMAS_GYEARMONTH;
+ }
+ }
+
+ return ret;
+}
+
+/**
+ * xmlSchemaDupVal:
+ * @v: value to duplicate
+ *
+ * returns a duplicated value.
+ */
+static xmlSchemaValPtr
+xmlSchemaDupVal (xmlSchemaValPtr v)
+{
+ xmlSchemaValPtr ret = xmlSchemaNewValue(v->type);
+ if (ret == NULL)
+ return ret;
+
+ memcpy(ret, v, sizeof(xmlSchemaVal));
+ return ret;
+}
+
+/**
+ * xmlSchemaDateNormalize:
+ * @dt: an #xmlSchemaValPtr
+ *
+ * Normalize @dt to GMT time.
+ *
+ */
+static xmlSchemaValPtr
+xmlSchemaDateNormalize (xmlSchemaValPtr dt, double offset)
+{
+ xmlSchemaValPtr dur, ret;
+
+ if (dt == NULL)
+ return NULL;
+
+ if (((dt->type != XML_SCHEMAS_TIME) &&
+ (dt->type != XML_SCHEMAS_DATETIME)) || (dt->value.date.tzo == 0))
+ return xmlSchemaDupVal(dt);
+
+ dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION);
+ if (dur == NULL)
+ return NULL;
+
+ dur->value.date.sec -= offset;
+
+ ret = _xmlSchemaDateAdd(dt, dur);
+ if (ret == NULL)
+ return NULL;
+
+ xmlSchemaFreeValue(dur);
+
+ /* ret->value.date.tzo = 0; */
+ return ret;
+}
+
+/**
+ * _xmlSchemaDateCastYMToDays:
+ * @dt: an #xmlSchemaValPtr
+ *
+ * Convert mon and year of @dt to total number of days. Take the
+ * number of years since (or before) 1 AD and add the number of leap
+ * years. This is a function because negative
+ * years must be handled a little differently and there is no zero year.
+ *
+ * Returns number of days.
+ */
+static long
+_xmlSchemaDateCastYMToDays (const xmlSchemaValPtr dt)
+{
+ long ret;
+
+ if (dt->value.date.year < 0)
+ ret = (dt->value.date.year * 365) +
+ (((dt->value.date.year+1)/4)-((dt->value.date.year+1)/100)+
+ ((dt->value.date.year+1)/400)) +
+ DAY_IN_YEAR(0, dt->value.date.mon, dt->value.date.year);
+ else
+ ret = ((dt->value.date.year-1) * 365) +
+ (((dt->value.date.year-1)/4)-((dt->value.date.year-1)/100)+
+ ((dt->value.date.year-1)/400)) +
+ DAY_IN_YEAR(0, dt->value.date.mon, dt->value.date.year);
+
+ return ret;
+}
+
+/**
+ * TIME_TO_NUMBER:
+ * @dt: an #xmlSchemaValPtr
+ *
+ * Calculates the number of seconds in the time portion of @dt.
+ *
+ * Returns seconds.
+ */
+#define TIME_TO_NUMBER(dt) \
+ ((double)((dt->value.date.hour * SECS_PER_HOUR) + \
+ (dt->value.date.min * SECS_PER_MIN) + \
+ (dt->value.date.tzo * SECS_PER_MIN)) + \
+ dt->value.date.sec)
+
+/**
+ * xmlSchemaCompareDates:
+ * @x: a first date/time value
+ * @y: a second date/time value
+ *
+ * Compare 2 date/times
+ *
+ * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
+ * case of error
+ */
+static int
+xmlSchemaCompareDates (xmlSchemaValPtr x, xmlSchemaValPtr y)
+{
+ unsigned char xmask, ymask, xor_mask, and_mask;
+ xmlSchemaValPtr p1, p2, q1, q2;
+ long p1d, p2d, q1d, q2d;
+
+ if ((x == NULL) || (y == NULL))
+ return -2;
+
+ if (x->value.date.tz_flag) {
+
+ if (!y->value.date.tz_flag) {
+ p1 = xmlSchemaDateNormalize(x, 0);
+ p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
+ /* normalize y + 14:00 */
+ q1 = xmlSchemaDateNormalize(y, (14 * SECS_PER_HOUR));
+
+ q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
+ if (p1d < q1d) {
+ xmlSchemaFreeValue(p1);
+ xmlSchemaFreeValue(q1);
+ return -1;
+ } else if (p1d == q1d) {
+ double sec;
+
+ sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
+ if (sec < 0.0) {
+ xmlSchemaFreeValue(p1);
+ xmlSchemaFreeValue(q1);
+ return -1;
+ } else {
+ int ret = 0;
+ /* normalize y - 14:00 */
+ q2 = xmlSchemaDateNormalize(y, -(14 * SECS_PER_HOUR));
+ q2d = _xmlSchemaDateCastYMToDays(q2) + q2->value.date.day;
+ if (p1d > q2d)
+ ret = 1;
+ else if (p1d == q2d) {
+ sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q2);
+ if (sec > 0.0)
+ ret = 1;
+ else
+ ret = 2; /* indeterminate */
+ }
+ xmlSchemaFreeValue(p1);
+ xmlSchemaFreeValue(q1);
+ xmlSchemaFreeValue(q2);
+ if (ret != 0)
+ return(ret);
+ }
+ } else {
+ xmlSchemaFreeValue(p1);
+ xmlSchemaFreeValue(q1);
+ }
+ }
+ } else if (y->value.date.tz_flag) {
+ q1 = xmlSchemaDateNormalize(y, 0);
+ q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
+
+ /* normalize x - 14:00 */
+ p1 = xmlSchemaDateNormalize(x, -(14 * SECS_PER_HOUR));
+ p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
+
+ if (p1d < q1d) {
+ xmlSchemaFreeValue(p1);
+ xmlSchemaFreeValue(q1);
+ return -1;
+ } else if (p1d == q1d) {
+ double sec;
+
+ sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
+ if (sec < 0.0) {
+ xmlSchemaFreeValue(p1);
+ xmlSchemaFreeValue(q1);
+ return -1;
+ } else {
+ int ret = 0;
+ /* normalize x + 14:00 */
+ p2 = xmlSchemaDateNormalize(x, (14 * SECS_PER_HOUR));
+ p2d = _xmlSchemaDateCastYMToDays(p2) + p2->value.date.day;
+
+ if (p2d > q1d) {
+ ret = 1;
+ } else if (p2d == q1d) {
+ sec = TIME_TO_NUMBER(p2) - TIME_TO_NUMBER(q1);
+ if (sec > 0.0)
+ ret = 1;
+ else
+ ret = 2; /* indeterminate */
+ }
+ xmlSchemaFreeValue(p1);
+ xmlSchemaFreeValue(q1);
+ xmlSchemaFreeValue(p2);
+ if (ret != 0)
+ return(ret);
+ }
+ } else {
+ xmlSchemaFreeValue(p1);
+ xmlSchemaFreeValue(q1);
+ }
+ }
+
+ /*
+ * if the same type then calculate the difference
+ */
+ if (x->type == y->type) {
+ int ret = 0;
+ q1 = xmlSchemaDateNormalize(y, 0);
+ q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
+
+ p1 = xmlSchemaDateNormalize(x, 0);
+ p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
+
+ if (p1d < q1d) {
+ ret = -1;
+ } else if (p1d > q1d) {
+ ret = 1;
+ } else {
+ double sec;
+
+ sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
+ if (sec < 0.0)
+ ret = -1;
+ else if (sec > 0.0)
+ ret = 1;
+
+ }
+ xmlSchemaFreeValue(p1);
+ xmlSchemaFreeValue(q1);
+ return(ret);
+ }
+
+ switch (x->type) {
+ case XML_SCHEMAS_DATETIME:
+ xmask = 0xf;
+ break;
+ case XML_SCHEMAS_DATE:
+ xmask = 0x7;
+ break;
+ case XML_SCHEMAS_GYEAR:
+ xmask = 0x1;
+ break;
+ case XML_SCHEMAS_GMONTH:
+ xmask = 0x2;
+ break;
+ case XML_SCHEMAS_GDAY:
+ xmask = 0x3;
+ break;
+ case XML_SCHEMAS_GYEARMONTH:
+ xmask = 0x3;
+ break;
+ case XML_SCHEMAS_GMONTHDAY:
+ xmask = 0x6;
+ break;
+ case XML_SCHEMAS_TIME:
+ xmask = 0x8;
+ break;
+ default:
+ xmask = 0;
+ break;
+ }
+
+ switch (y->type) {
+ case XML_SCHEMAS_DATETIME:
+ ymask = 0xf;
+ break;
+ case XML_SCHEMAS_DATE:
+ ymask = 0x7;
+ break;
+ case XML_SCHEMAS_GYEAR:
+ ymask = 0x1;
+ break;
+ case XML_SCHEMAS_GMONTH:
+ ymask = 0x2;
+ break;
+ case XML_SCHEMAS_GDAY:
+ ymask = 0x3;
+ break;
+ case XML_SCHEMAS_GYEARMONTH:
+ ymask = 0x3;
+ break;
+ case XML_SCHEMAS_GMONTHDAY:
+ ymask = 0x6;
+ break;
+ case XML_SCHEMAS_TIME:
+ ymask = 0x8;
+ break;
+ default:
+ ymask = 0;
+ break;
+ }
+
+ xor_mask = xmask ^ ymask; /* mark type differences */
+ and_mask = xmask & ymask; /* mark field specification */
+
+ /* year */
+ if (xor_mask & 1)
+ return 2; /* indeterminate */
+ else if (and_mask & 1) {
+ if (x->value.date.year < y->value.date.year)
+ return -1;
+ else if (x->value.date.year > y->value.date.year)
+ return 1;
+ }
+
+ /* month */
+ if (xor_mask & 2)
+ return 2; /* indeterminate */
+ else if (and_mask & 2) {
+ if (x->value.date.mon < y->value.date.mon)
+ return -1;
+ else if (x->value.date.mon > y->value.date.mon)
+ return 1;
+ }
+
+ /* day */
+ if (xor_mask & 4)
+ return 2; /* indeterminate */
+ else if (and_mask & 4) {
+ if (x->value.date.day < y->value.date.day)
+ return -1;
+ else if (x->value.date.day > y->value.date.day)
+ return 1;
+ }
+
+ /* time */
+ if (xor_mask & 8)
+ return 2; /* indeterminate */
+ else if (and_mask & 8) {
+ if (x->value.date.hour < y->value.date.hour)
+ return -1;
+ else if (x->value.date.hour > y->value.date.hour)
+ return 1;
+ else if (x->value.date.min < y->value.date.min)
+ return -1;
+ else if (x->value.date.min > y->value.date.min)
+ return 1;
+ else if (x->value.date.sec < y->value.date.sec)
+ return -1;
+ else if (x->value.date.sec > y->value.date.sec)
+ return 1;
+ }
+
+ return 0;
+}
+
+/**
+ * xmlSchemaCompareNormStrings:
+ * @x: a first string value
+ * @y: a second string value
+ *
+ * Compare 2 string for their normalized values.
+ *
+ * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
+ * case of error
+ */
+static int
+xmlSchemaCompareNormStrings(xmlSchemaValPtr x, xmlSchemaValPtr y) {
+ const xmlChar *utf1;
+ const xmlChar *utf2;
+ int tmp;
+
+ if ((x == NULL) || (y == NULL))
+ return(-2);
+ utf1 = x->value.str;
+ utf2 = y->value.str;
+
+ while (IS_BLANK_CH(*utf1)) utf1++;
+ while (IS_BLANK_CH(*utf2)) utf2++;
+ while ((*utf1 != 0) && (*utf2 != 0)) {
+ if (IS_BLANK_CH(*utf1)) {
+ if (!IS_BLANK_CH(*utf2)) {
+ tmp = *utf1 - *utf2;
+ return(tmp);
+ }
+ while (IS_BLANK_CH(*utf1)) utf1++;
+ while (IS_BLANK_CH(*utf2)) utf2++;
+ } else {
+ tmp = *utf1++ - *utf2++;
+ if (tmp < 0)
+ return(-1);
+ if (tmp > 0)
+ return(1);
+ }
+ }
+ if (*utf1 != 0) {
+ while (IS_BLANK_CH(*utf1)) utf1++;
+ if (*utf1 != 0)
+ return(1);
+ }
+ if (*utf2 != 0) {
+ while (IS_BLANK_CH(*utf2)) utf2++;
+ if (*utf2 != 0)
+ return(-1);
+ }
+ return(0);
+}
+
+/**
+ * xmlSchemaCompareFloats:
+ * @x: a first float or double value
+ * @y: a second float or double value
+ *
+ * Compare 2 values
+ *
+ * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
+ * case of error
+ */
+static int
+xmlSchemaCompareFloats(xmlSchemaValPtr x, xmlSchemaValPtr y) {
+ double d1, d2;
+
+ if ((x == NULL) || (y == NULL))
+ return(-2);
+
+ /*
+ * Cast everything to doubles.
+ */
+ if (x->type == XML_SCHEMAS_DOUBLE)
+ d1 = x->value.d;
+ else if (x->type == XML_SCHEMAS_FLOAT)
+ d1 = x->value.f;
+ else
+ return(-2);
+
+ if (y->type == XML_SCHEMAS_DOUBLE)
+ d2 = y->value.d;
+ else if (y->type == XML_SCHEMAS_FLOAT)
+ d2 = y->value.f;
+ else
+ return(-2);
+
+ /*
+ * Check for special cases.
+ */
+ if (xmlXPathIsNaN(d1)) {
+ if (xmlXPathIsNaN(d2))
+ return(0);
+ return(1);
+ }
+ if (xmlXPathIsNaN(d2))
+ return(-1);
+ if (d1 == xmlXPathPINF) {
+ if (d2 == xmlXPathPINF)
+ return(0);
+ return(1);
+ }
+ if (d2 == xmlXPathPINF)
+ return(-1);
+ if (d1 == xmlXPathNINF) {
+ if (d2 == xmlXPathNINF)
+ return(0);
+ return(-1);
+ }
+ if (d2 == xmlXPathNINF)
+ return(1);
+
+ /*
+ * basic tests, the last one we should have equality, but
+ * portability is more important than speed and handling
+ * NaN or Inf in a portable way is always a challenge, so ...
+ */
+ if (d1 < d2)
+ return(-1);
+ if (d1 > d2)
+ return(1);
+ if (d1 == d2)
+ return(0);
+ return(2);
+}
+
+/**
+ * xmlSchemaCompareValues:
+ * @x: a first value
+ * @y: a second value
+ *
+ * Compare 2 values
+ *
+ * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
+ * case of error
+ */
+int
+xmlSchemaCompareValues(xmlSchemaValPtr x, xmlSchemaValPtr y) {
+ if ((x == NULL) || (y == NULL))
+ return(-2);
+
+ switch (x->type) {
+ case XML_SCHEMAS_UNKNOWN:
+ return(-2);
+ case XML_SCHEMAS_INTEGER:
+ case XML_SCHEMAS_NPINTEGER:
+ case XML_SCHEMAS_NINTEGER:
+ case XML_SCHEMAS_NNINTEGER:
+ case XML_SCHEMAS_PINTEGER:
+ case XML_SCHEMAS_INT:
+ case XML_SCHEMAS_UINT:
+ case XML_SCHEMAS_LONG:
+ case XML_SCHEMAS_ULONG:
+ case XML_SCHEMAS_SHORT:
+ case XML_SCHEMAS_USHORT:
+ case XML_SCHEMAS_BYTE:
+ case XML_SCHEMAS_UBYTE:
+ case XML_SCHEMAS_DECIMAL:
+ if (y->type == x->type)
+ return(xmlSchemaCompareDecimals(x, y));
+ if ((y->type == XML_SCHEMAS_DECIMAL) ||
+ (y->type == XML_SCHEMAS_INTEGER) ||
+ (y->type == XML_SCHEMAS_NPINTEGER) ||
+ (y->type == XML_SCHEMAS_NINTEGER) ||
+ (y->type == XML_SCHEMAS_NNINTEGER) ||
+ (y->type == XML_SCHEMAS_PINTEGER) ||
+ (y->type == XML_SCHEMAS_INT) ||
+ (y->type == XML_SCHEMAS_UINT) ||
+ (y->type == XML_SCHEMAS_LONG) ||
+ (y->type == XML_SCHEMAS_ULONG) ||
+ (y->type == XML_SCHEMAS_SHORT) ||
+ (y->type == XML_SCHEMAS_USHORT) ||
+ (y->type == XML_SCHEMAS_BYTE) ||
+ (y->type == XML_SCHEMAS_UBYTE))
+ return(xmlSchemaCompareDecimals(x, y));
+ return(-2);
+ case XML_SCHEMAS_DURATION:
+ if (y->type == XML_SCHEMAS_DURATION)
+ return(xmlSchemaCompareDurations(x, y));
+ return(-2);
+ case XML_SCHEMAS_TIME:
+ case XML_SCHEMAS_GDAY:
+ case XML_SCHEMAS_GMONTH:
+ case XML_SCHEMAS_GMONTHDAY:
+ case XML_SCHEMAS_GYEAR:
+ case XML_SCHEMAS_GYEARMONTH:
+ case XML_SCHEMAS_DATE:
+ case XML_SCHEMAS_DATETIME:
+ if ((y->type == XML_SCHEMAS_DATETIME) ||
+ (y->type == XML_SCHEMAS_TIME) ||
+ (y->type == XML_SCHEMAS_GDAY) ||
+ (y->type == XML_SCHEMAS_GMONTH) ||
+ (y->type == XML_SCHEMAS_GMONTHDAY) ||
+ (y->type == XML_SCHEMAS_GYEAR) ||
+ (y->type == XML_SCHEMAS_DATE) ||
+ (y->type == XML_SCHEMAS_GYEARMONTH))
+ return (xmlSchemaCompareDates(x, y));
+ return (-2);
+ case XML_SCHEMAS_NORMSTRING:
+ case XML_SCHEMAS_TOKEN:
+ case XML_SCHEMAS_LANGUAGE:
+ case XML_SCHEMAS_NMTOKEN:
+ case XML_SCHEMAS_NAME:
+ case XML_SCHEMAS_NCNAME:
+ case XML_SCHEMAS_ID:
+ case XML_SCHEMAS_IDREF:
+ case XML_SCHEMAS_ENTITY:
+ case XML_SCHEMAS_NOTATION:
+ case XML_SCHEMAS_ANYURI:
+ if ((y->type == XML_SCHEMAS_NORMSTRING) ||
+ (y->type == XML_SCHEMAS_TOKEN) ||
+ (y->type == XML_SCHEMAS_LANGUAGE) ||
+ (y->type == XML_SCHEMAS_NMTOKEN) ||
+ (y->type == XML_SCHEMAS_NAME) ||
+ (y->type == XML_SCHEMAS_QNAME) ||
+ (y->type == XML_SCHEMAS_NCNAME) ||
+ (y->type == XML_SCHEMAS_ID) ||
+ (y->type == XML_SCHEMAS_IDREF) ||
+ (y->type == XML_SCHEMAS_ENTITY) ||
+ (y->type == XML_SCHEMAS_NOTATION) ||
+ (y->type == XML_SCHEMAS_ANYURI))
+ return (xmlSchemaCompareNormStrings(x, y));
+ return (-2);
+ case XML_SCHEMAS_QNAME:
+ if (y->type == XML_SCHEMAS_QNAME) {
+ if ((xmlStrEqual(x->value.qname.name, y->value.qname.name)) &&
+ (xmlStrEqual(x->value.qname.uri, y->value.qname.uri)))
+ return(0);
+ return(2);
+ }
+ return (-2);
+ case XML_SCHEMAS_FLOAT:
+ case XML_SCHEMAS_DOUBLE:
+ if ((y->type == XML_SCHEMAS_FLOAT) ||
+ (y->type == XML_SCHEMAS_DOUBLE))
+ return (xmlSchemaCompareFloats(x, y));
+ return (-2);
+ case XML_SCHEMAS_BOOLEAN:
+ if (y->type == XML_SCHEMAS_BOOLEAN) {
+ if (x->value.b == y->value.b)
+ return(0);
+ if (x->value.b == 0)
+ return(-1);
+ return(1);
+ }
+ return (-2);
+ case XML_SCHEMAS_HEXBINARY:
+ if (y->type == XML_SCHEMAS_HEXBINARY) {
+ if (x->value.hex.total == y->value.hex.total) {
+ int ret = xmlStrcmp(x->value.hex.str, y->value.hex.str);
+ if (ret > 0)
+ return(1);
+ else if (ret == 0)
+ return(0);
+ }
+ else if (x->value.hex.total > y->value.hex.total)
+ return(1);
+
+ return(-1);
+ }
+ return (-2);
+ case XML_SCHEMAS_BASE64BINARY:
+ if (y->type == XML_SCHEMAS_BASE64BINARY) {
+ if (x->value.base64.total == y->value.base64.total) {
+ int ret = xmlStrcmp(x->value.base64.str,
+ y->value.base64.str);
+ if (ret > 0)
+ return(1);
+ else if (ret == 0)
+ return(0);
+ }
+ else if (x->value.base64.total > y->value.base64.total)
+ return(1);
+ else
+ return(-1);
+ }
+ return (-2);
+ case XML_SCHEMAS_STRING:
+ case XML_SCHEMAS_IDREFS:
+ case XML_SCHEMAS_ENTITIES:
+ case XML_SCHEMAS_NMTOKENS:
+ TODO
+ break;
+ }
+ return -2;
+}
+
+/**
+ * xmlSchemaNormLen:
+ * @value: a string
+ *
+ * Computes the UTF8 length of the normalized value of the string
+ *
+ * Returns the length or -1 in case of error.
+ */
+static int
+xmlSchemaNormLen(const xmlChar *value) {
+ const xmlChar *utf;
+ int ret = 0;
+
+ if (value == NULL)
+ return(-1);
+ utf = value;
+ while (IS_BLANK_CH(*utf)) utf++;
+ while (*utf != 0) {
+ if (utf[0] & 0x80) {
+ if ((utf[1] & 0xc0) != 0x80)
+ return(-1);
+ if ((utf[0] & 0xe0) == 0xe0) {
+ if ((utf[2] & 0xc0) != 0x80)
+ return(-1);
+ if ((utf[0] & 0xf0) == 0xf0) {
+ if ((utf[0] & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80)
+ return(-1);
+ utf += 4;
+ } else {
+ utf += 3;
+ }
+ } else {
+ utf += 2;
+ }
+ } else if (IS_BLANK_CH(*utf)) {
+ while (IS_BLANK_CH(*utf)) utf++;
+ if (*utf == 0)
+ break;
+ } else {
+ utf++;
+ }
+ ret++;
+ }
+ return(ret);
+}
+
+/**
+ * xmlSchemaValidateFacet:
+ * @base: the base type
+ * @facet: the facet to check
+ * @value: the lexical repr of the value to validate
+ * @val: the precomputed value
+ *
+ * Check a value against a facet condition
+ *
+ * Returns 0 if the element is schemas valid, a positive error code
+ * number otherwise and -1 in case of internal or API error.
+ */
+int
+xmlSchemaValidateFacet(xmlSchemaTypePtr base ATTRIBUTE_UNUSED,
+ xmlSchemaFacetPtr facet,
+ const xmlChar *value, xmlSchemaValPtr val)
+{
+ int ret;
+
+ switch (facet->type) {
+ case XML_SCHEMA_FACET_PATTERN:
+ ret = xmlRegexpExec(facet->regexp, value);
+ if (ret == 1)
+ return(0);
+ if (ret == 0) {
+ /* TODO error code */
+ return(1);
+ }
+ return(ret);
+ case XML_SCHEMA_FACET_MAXEXCLUSIVE:
+ ret = xmlSchemaCompareValues(val, facet->val);
+ if (ret == -2) {
+ /* TODO error code */
+ return(-1);
+ }
+ if (ret == -1)
+ return(0);
+ /* error code */
+ return(1);
+ case XML_SCHEMA_FACET_MAXINCLUSIVE:
+ ret = xmlSchemaCompareValues(val, facet->val);
+ if (ret == -2) {
+ /* TODO error code */
+ return(-1);
+ }
+ if ((ret == -1) || (ret == 0))
+ return(0);
+ /* error code */
+ return(1);
+ case XML_SCHEMA_FACET_MINEXCLUSIVE:
+ ret = xmlSchemaCompareValues(val, facet->val);
+ if (ret == -2) {
+ /* TODO error code */
+ return(-1);
+ }
+ if (ret == 1)
+ return(0);
+ /* error code */
+ return(1);
+ case XML_SCHEMA_FACET_MININCLUSIVE:
+ ret = xmlSchemaCompareValues(val, facet->val);
+ if (ret == -2) {
+ /* TODO error code */
+ return(-1);
+ }
+ if ((ret == 1) || (ret == 0))
+ return(0);
+ /* error code */
+ return(1);
+ case XML_SCHEMA_FACET_WHITESPACE:
+ /* TODO whitespaces */
+ return(0);
+ case XML_SCHEMA_FACET_ENUMERATION:
+ if ((facet->value != NULL) &&
+ (xmlStrEqual(facet->value, value)))
+ return(0);
+ return(1);
+ case XML_SCHEMA_FACET_LENGTH:
+ case XML_SCHEMA_FACET_MAXLENGTH:
+ case XML_SCHEMA_FACET_MINLENGTH: {
+ unsigned int len = 0;
+
+ if ((facet->val == NULL) ||
+ ((facet->val->type != XML_SCHEMAS_DECIMAL) &&
+ (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
+ (facet->val->value.decimal.frac != 0)) {
+ return(-1);
+ }
+ if ((val != NULL) && (val->type == XML_SCHEMAS_HEXBINARY))
+ len = val->value.hex.total;
+ else if ((val != NULL) && (val->type == XML_SCHEMAS_BASE64BINARY))
+ len = val->value.base64.total;
+ else {
+ switch (base->flags) {
+ case XML_SCHEMAS_IDREF:
+ case XML_SCHEMAS_NORMSTRING:
+ case XML_SCHEMAS_TOKEN:
+ case XML_SCHEMAS_LANGUAGE:
+ case XML_SCHEMAS_NMTOKEN:
+ case XML_SCHEMAS_NAME:
+ case XML_SCHEMAS_NCNAME:
+ case XML_SCHEMAS_ID:
+ len = xmlSchemaNormLen(value);
+ break;
+ case XML_SCHEMAS_STRING:
+ if (value != NULL)
+ len = xmlUTF8Strlen(value);
+ break;
+ default:
+ TODO
+ }
+ }
+ if (facet->type == XML_SCHEMA_FACET_LENGTH) {
+ if (len != facet->val->value.decimal.lo)
+ return(1);
+ } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
+ if (len < facet->val->value.decimal.lo)
+ return(1);
+ } else {
+ if (len > facet->val->value.decimal.lo)
+ return(1);
+ }
+ break;
+ }
+ case XML_SCHEMA_FACET_TOTALDIGITS:
+ case XML_SCHEMA_FACET_FRACTIONDIGITS:
+
+ if ((facet->val == NULL) ||
+ ((facet->val->type != XML_SCHEMAS_DECIMAL) &&
+ (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
+ (facet->val->value.decimal.frac != 0)) {
+ return(-1);
+ }
+ if ((val == NULL) ||
+ ((val->type != XML_SCHEMAS_DECIMAL) &&
+ (val->type != XML_SCHEMAS_INTEGER) &&
+ (val->type != XML_SCHEMAS_NPINTEGER) &&
+ (val->type != XML_SCHEMAS_NINTEGER) &&
+ (val->type != XML_SCHEMAS_NNINTEGER) &&
+ (val->type != XML_SCHEMAS_PINTEGER) &&
+ (val->type != XML_SCHEMAS_INT) &&
+ (val->type != XML_SCHEMAS_UINT) &&
+ (val->type != XML_SCHEMAS_LONG) &&
+ (val->type != XML_SCHEMAS_ULONG) &&
+ (val->type != XML_SCHEMAS_SHORT) &&
+ (val->type != XML_SCHEMAS_USHORT) &&
+ (val->type != XML_SCHEMAS_BYTE) &&
+ (val->type != XML_SCHEMAS_UBYTE))) {
+ return(-1);
+ }
+ if (facet->type == XML_SCHEMA_FACET_TOTALDIGITS) {
+ if (val->value.decimal.total > facet->val->value.decimal.lo)
+ return(1);
+
+ } else if (facet->type == XML_SCHEMA_FACET_FRACTIONDIGITS) {
+ if (val->value.decimal.frac > facet->val->value.decimal.lo)
+ return(1);
+ }
+ break;
+ default:
+ TODO
+ }
+ return(0);
+
+}
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/xmlstring.c b/xmlstring.c
new file mode 100644
index 0000000..5c64053
--- /dev/null
+++ b/xmlstring.c
@@ -0,0 +1,956 @@
+/*
+ * string.c : an XML string utilities module
+ *
+ * This module provides various utility functions for manipulating
+ * the xmlChar* type. All functions named xmlStr* have been moved here
+ * from the parser.c file (their original home).
+ *
+ * See Copyright for the status of this software.
+ *
+ * UTF8 string routines from:
+ * William Brack <wbrack@mmm.com.hk>
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parserInternals.h>
+#include <libxml/xmlstring.h>
+
+/************************************************************************
+ * *
+ * Commodity functions to handle xmlChars *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlStrndup:
+ * @cur: the input xmlChar *
+ * @len: the len of @cur
+ *
+ * a strndup for array of xmlChar's
+ *
+ * Returns a new xmlChar * or NULL
+ */
+xmlChar *
+xmlStrndup(const xmlChar *cur, int len) {
+ xmlChar *ret;
+
+ if ((cur == NULL) || (len < 0)) return(NULL);
+ ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlErrMemory(NULL, NULL);
+ return(NULL);
+ }
+ memcpy(ret, cur, len * sizeof(xmlChar));
+ ret[len] = 0;
+ return(ret);
+}
+
+/**
+ * xmlStrdup:
+ * @cur: the input xmlChar *
+ *
+ * a strdup for array of xmlChar's. Since they are supposed to be
+ * encoded in UTF-8 or an encoding with 8bit based chars, we assume
+ * a termination mark of '0'.
+ *
+ * Returns a new xmlChar * or NULL
+ */
+xmlChar *
+xmlStrdup(const xmlChar *cur) {
+ const xmlChar *p = cur;
+
+ if (cur == NULL) return(NULL);
+ while (*p != 0) p++; /* non input consuming */
+ return(xmlStrndup(cur, p - cur));
+}
+
+/**
+ * xmlCharStrndup:
+ * @cur: the input char *
+ * @len: the len of @cur
+ *
+ * a strndup for char's to xmlChar's
+ *
+ * Returns a new xmlChar * or NULL
+ */
+
+xmlChar *
+xmlCharStrndup(const char *cur, int len) {
+ int i;
+ xmlChar *ret;
+
+ if ((cur == NULL) || (len < 0)) return(NULL);
+ ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlErrMemory(NULL, NULL);
+ return(NULL);
+ }
+ for (i = 0;i < len;i++)
+ ret[i] = (xmlChar) cur[i];
+ ret[len] = 0;
+ return(ret);
+}
+
+/**
+ * xmlCharStrdup:
+ * @cur: the input char *
+ *
+ * a strdup for char's to xmlChar's
+ *
+ * Returns a new xmlChar * or NULL
+ */
+
+xmlChar *
+xmlCharStrdup(const char *cur) {
+ const char *p = cur;
+
+ if (cur == NULL) return(NULL);
+ while (*p != '\0') p++; /* non input consuming */
+ return(xmlCharStrndup(cur, p - cur));
+}
+
+/**
+ * xmlStrcmp:
+ * @str1: the first xmlChar *
+ * @str2: the second xmlChar *
+ *
+ * a strcmp for xmlChar's
+ *
+ * Returns the integer result of the comparison
+ */
+
+int
+xmlStrcmp(const xmlChar *str1, const xmlChar *str2) {
+ register int tmp;
+
+ if (str1 == str2) return(0);
+ if (str1 == NULL) return(-1);
+ if (str2 == NULL) return(1);
+ do {
+ tmp = *str1++ - *str2;
+ if (tmp != 0) return(tmp);
+ } while (*str2++ != 0);
+ return 0;
+}
+
+/**
+ * xmlStrEqual:
+ * @str1: the first xmlChar *
+ * @str2: the second xmlChar *
+ *
+ * Check if both string are equal of have same content
+ * Should be a bit more readable and faster than xmlStrEqual()
+ *
+ * Returns 1 if they are equal, 0 if they are different
+ */
+
+int
+xmlStrEqual(const xmlChar *str1, const xmlChar *str2) {
+ if (str1 == str2) return(1);
+ if (str1 == NULL) return(0);
+ if (str2 == NULL) return(0);
+ do {
+ if (*str1++ != *str2) return(0);
+ } while (*str2++);
+ return(1);
+}
+
+/**
+ * xmlStrQEqual:
+ * @pref: the prefix of the QName
+ * @name: the localname of the QName
+ * @str: the second xmlChar *
+ *
+ * Check if a QName is Equal to a given string
+ *
+ * Returns 1 if they are equal, 0 if they are different
+ */
+
+int
+xmlStrQEqual(const xmlChar *pref, const xmlChar *name, const xmlChar *str) {
+ if (pref == NULL) return(xmlStrEqual(name, str));
+ if (name == NULL) return(0);
+ if (str == NULL) return(0);
+
+ do {
+ if (*pref++ != *str) return(0);
+ } while ((*str++) && (*pref));
+ if (*str++ != ':') return(0);
+ do {
+ if (*name++ != *str) return(0);
+ } while (*str++);
+ return(1);
+}
+
+/**
+ * xmlStrncmp:
+ * @str1: the first xmlChar *
+ * @str2: the second xmlChar *
+ * @len: the max comparison length
+ *
+ * a strncmp for xmlChar's
+ *
+ * Returns the integer result of the comparison
+ */
+
+int
+xmlStrncmp(const xmlChar *str1, const xmlChar *str2, int len) {
+ register int tmp;
+
+ if (len <= 0) return(0);
+ if (str1 == str2) return(0);
+ if (str1 == NULL) return(-1);
+ if (str2 == NULL) return(1);
+#ifdef __GNUC__
+ tmp = strncmp(str1, str2, len);
+ return tmp;
+#else
+ do {
+ tmp = *str1++ - *str2;
+ if (tmp != 0 || --len == 0) return(tmp);
+ } while (*str2++ != 0);
+ return 0;
+#endif
+}
+
+static const xmlChar casemap[256] = {
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+ 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
+ 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
+ 0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
+ 0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+ 0x40,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,0x5C,0x5D,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,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
+ 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
+ 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,
+ 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+ 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
+ 0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,
+ 0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+ 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,
+ 0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
+ 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+ 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,
+ 0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+};
+
+/**
+ * xmlStrcasecmp:
+ * @str1: the first xmlChar *
+ * @str2: the second xmlChar *
+ *
+ * a strcasecmp for xmlChar's
+ *
+ * Returns the integer result of the comparison
+ */
+
+int
+xmlStrcasecmp(const xmlChar *str1, const xmlChar *str2) {
+ register int tmp;
+
+ if (str1 == str2) return(0);
+ if (str1 == NULL) return(-1);
+ if (str2 == NULL) return(1);
+ do {
+ tmp = casemap[*str1++] - casemap[*str2];
+ if (tmp != 0) return(tmp);
+ } while (*str2++ != 0);
+ return 0;
+}
+
+/**
+ * xmlStrncasecmp:
+ * @str1: the first xmlChar *
+ * @str2: the second xmlChar *
+ * @len: the max comparison length
+ *
+ * a strncasecmp for xmlChar's
+ *
+ * Returns the integer result of the comparison
+ */
+
+int
+xmlStrncasecmp(const xmlChar *str1, const xmlChar *str2, int len) {
+ register int tmp;
+
+ if (len <= 0) return(0);
+ if (str1 == str2) return(0);
+ if (str1 == NULL) return(-1);
+ if (str2 == NULL) return(1);
+ do {
+ tmp = casemap[*str1++] - casemap[*str2];
+ if (tmp != 0 || --len == 0) return(tmp);
+ } while (*str2++ != 0);
+ return 0;
+}
+
+/**
+ * xmlStrchr:
+ * @str: the xmlChar * array
+ * @val: the xmlChar to search
+ *
+ * a strchr for xmlChar's
+ *
+ * Returns the xmlChar * for the first occurrence or NULL.
+ */
+
+const xmlChar *
+xmlStrchr(const xmlChar *str, xmlChar val) {
+ if (str == NULL) return(NULL);
+ while (*str != 0) { /* non input consuming */
+ if (*str == val) return((xmlChar *) str);
+ str++;
+ }
+ return(NULL);
+}
+
+/**
+ * xmlStrstr:
+ * @str: the xmlChar * array (haystack)
+ * @val: the xmlChar to search (needle)
+ *
+ * a strstr for xmlChar's
+ *
+ * Returns the xmlChar * for the first occurrence or NULL.
+ */
+
+const xmlChar *
+xmlStrstr(const xmlChar *str, const xmlChar *val) {
+ int n;
+
+ if (str == NULL) return(NULL);
+ if (val == NULL) return(NULL);
+ n = xmlStrlen(val);
+
+ if (n == 0) return(str);
+ while (*str != 0) { /* non input consuming */
+ if (*str == *val) {
+ if (!xmlStrncmp(str, val, n)) return((const xmlChar *) str);
+ }
+ str++;
+ }
+ return(NULL);
+}
+
+/**
+ * xmlStrcasestr:
+ * @str: the xmlChar * array (haystack)
+ * @val: the xmlChar to search (needle)
+ *
+ * a case-ignoring strstr for xmlChar's
+ *
+ * Returns the xmlChar * for the first occurrence or NULL.
+ */
+
+const xmlChar *
+xmlStrcasestr(const xmlChar *str, xmlChar *val) {
+ int n;
+
+ if (str == NULL) return(NULL);
+ if (val == NULL) return(NULL);
+ n = xmlStrlen(val);
+
+ if (n == 0) return(str);
+ while (*str != 0) { /* non input consuming */
+ if (casemap[*str] == casemap[*val])
+ if (!xmlStrncasecmp(str, val, n)) return(str);
+ str++;
+ }
+ return(NULL);
+}
+
+/**
+ * xmlStrsub:
+ * @str: the xmlChar * array (haystack)
+ * @start: the index of the first char (zero based)
+ * @len: the length of the substring
+ *
+ * Extract a substring of a given string
+ *
+ * Returns the xmlChar * for the first occurrence or NULL.
+ */
+
+xmlChar *
+xmlStrsub(const xmlChar *str, int start, int len) {
+ int i;
+
+ if (str == NULL) return(NULL);
+ if (start < 0) return(NULL);
+ if (len < 0) return(NULL);
+
+ for (i = 0;i < start;i++) {
+ if (*str == 0) return(NULL);
+ str++;
+ }
+ if (*str == 0) return(NULL);
+ return(xmlStrndup(str, len));
+}
+
+/**
+ * xmlStrlen:
+ * @str: the xmlChar * array
+ *
+ * length of a xmlChar's string
+ *
+ * Returns the number of xmlChar contained in the ARRAY.
+ */
+
+int
+xmlStrlen(const xmlChar *str) {
+ int len = 0;
+
+ if (str == NULL) return(0);
+ while (*str != 0) { /* non input consuming */
+ str++;
+ len++;
+ }
+ return(len);
+}
+
+/**
+ * xmlStrncat:
+ * @cur: the original xmlChar * array
+ * @add: the xmlChar * array added
+ * @len: the length of @add
+ *
+ * a strncat for array of xmlChar's, it will extend @cur with the len
+ * first bytes of @add.
+ *
+ * Returns a new xmlChar *, the original @cur is reallocated if needed
+ * and should not be freed
+ */
+
+xmlChar *
+xmlStrncat(xmlChar *cur, const xmlChar *add, int len) {
+ int size;
+ xmlChar *ret;
+
+ if ((add == NULL) || (len == 0))
+ return(cur);
+ if (cur == NULL)
+ return(xmlStrndup(add, len));
+
+ size = xmlStrlen(cur);
+ ret = (xmlChar *) xmlRealloc(cur, (size + len + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlErrMemory(NULL, NULL);
+ return(cur);
+ }
+ memcpy(&ret[size], add, len * sizeof(xmlChar));
+ ret[size + len] = 0;
+ return(ret);
+}
+
+/**
+ * xmlStrncatNew:
+ * @str1: first xmlChar string
+ * @str2: second xmlChar string
+ * @len: the len of @str2
+ *
+ * same as xmlStrncat, but creates a new string. The original
+ * two strings are not freed.
+ *
+ * Returns a new xmlChar * or NULL
+ */
+xmlChar *
+xmlStrncatNew(const xmlChar *str1, const xmlChar *str2, int len) {
+ int size;
+ xmlChar *ret;
+
+ if ((str2 == NULL) || (len == 0))
+ return(xmlStrdup(str1));
+ if (str1 == NULL)
+ return(xmlStrndup(str2, len));
+
+ size = xmlStrlen(str1);
+ ret = (xmlChar *) xmlMalloc((size + len + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlErrMemory(NULL, NULL);
+ return(xmlStrndup(str1, size));
+ }
+ memcpy(ret, str1, size * sizeof(xmlChar));
+ memcpy(&ret[size], str2, len * sizeof(xmlChar));
+ ret[size + len] = 0;
+ return(ret);
+}
+
+/**
+ * xmlStrcat:
+ * @cur: the original xmlChar * array
+ * @add: the xmlChar * array added
+ *
+ * a strcat for array of xmlChar's. Since they are supposed to be
+ * encoded in UTF-8 or an encoding with 8bit based chars, we assume
+ * a termination mark of '0'.
+ *
+ * Returns a new xmlChar * containing the concatenated string.
+ */
+xmlChar *
+xmlStrcat(xmlChar *cur, const xmlChar *add) {
+ const xmlChar *p = add;
+
+ if (add == NULL) return(cur);
+ if (cur == NULL)
+ return(xmlStrdup(add));
+
+ while (*p != 0) p++; /* non input consuming */
+ return(xmlStrncat(cur, add, p - add));
+}
+
+/**
+ * xmlStrPrintf:
+ * @buf: the result buffer.
+ * @len: the result buffer length.
+ * @msg: the message with printf formatting.
+ * @...: extra parameters for the message.
+ *
+ * Formats @msg and places result into @buf.
+ *
+ * Returns the number of characters written to @buf or -1 if an error occurs.
+ */
+int
+xmlStrPrintf(xmlChar *buf, int len, const xmlChar *msg, ...) {
+ va_list args;
+ int ret;
+
+ if((buf == NULL) || (msg == NULL)) {
+ return(-1);
+ }
+
+ va_start(args, msg);
+ ret = vsnprintf((char *) buf, len, (const char *) msg, args);
+ va_end(args);
+ buf[len - 1] = 0; /* be safe ! */
+
+ return(ret);
+}
+
+/**
+ * xmlStrVPrintf:
+ * @buf: the result buffer.
+ * @len: the result buffer length.
+ * @msg: the message with printf formatting.
+ * @ap: extra parameters for the message.
+ *
+ * Formats @msg and places result into @buf.
+ *
+ * Returns the number of characters written to @buf or -1 if an error occurs.
+ */
+int
+xmlStrVPrintf(xmlChar *buf, int len, const xmlChar *msg, va_list ap) {
+ int ret;
+
+ if((buf == NULL) || (msg == NULL)) {
+ return(-1);
+ }
+
+ ret = vsnprintf((char *) buf, len, (const char *) msg, ap);
+ buf[len - 1] = 0; /* be safe ! */
+
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * Generic UTF8 handling routines *
+ * *
+ * From rfc2044: encoding of the Unicode values on UTF-8: *
+ * *
+ * UCS-4 range (hex.) UTF-8 octet sequence (binary) *
+ * 0000 0000-0000 007F 0xxxxxxx *
+ * 0000 0080-0000 07FF 110xxxxx 10xxxxxx *
+ * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx *
+ * *
+ * I hope we won't use values > 0xFFFF anytime soon ! *
+ * *
+ ************************************************************************/
+
+
+/**
+ * xmlUTF8Size:
+ * @utf: pointer to the UTF8 character
+ *
+ * calculates the internal size of a UTF8 character
+ *
+ * returns the numbers of bytes in the character, -1 on format error
+ */
+int
+xmlUTF8Size(const xmlChar *utf) {
+ xmlChar mask;
+ int len;
+
+ if (utf == NULL)
+ return -1;
+ if (*utf < 0x80)
+ return 1;
+ /* check valid UTF8 character */
+ if (!(*utf & 0x40))
+ return -1;
+ /* determine number of bytes in char */
+ len = 2;
+ for (mask=0x20; mask != 0; mask>>=1) {
+ if (!(*utf & mask))
+ return len;
+ len++;
+ }
+ return -1;
+}
+
+/**
+ * xmlUTF8Charcmp:
+ * @utf1: pointer to first UTF8 char
+ * @utf2: pointer to second UTF8 char
+ *
+ * compares the two UCS4 values
+ *
+ * returns result of the compare as with xmlStrncmp
+ */
+int
+xmlUTF8Charcmp(const xmlChar *utf1, const xmlChar *utf2) {
+
+ if (utf1 == NULL ) {
+ if (utf2 == NULL)
+ return 0;
+ return -1;
+ }
+ return xmlStrncmp(utf1, utf2, xmlUTF8Size(utf1));
+}
+
+/**
+ * xmlUTF8Strlen:
+ * @utf: a sequence of UTF-8 encoded bytes
+ *
+ * compute the length of an UTF8 string, it doesn't do a full UTF8
+ * checking of the content of the string.
+ *
+ * Returns the number of characters in the string or -1 in case of error
+ */
+int
+xmlUTF8Strlen(const xmlChar *utf) {
+ int ret = 0;
+
+ if (utf == NULL)
+ return(-1);
+
+ while (*utf != 0) {
+ if (utf[0] & 0x80) {
+ if ((utf[1] & 0xc0) != 0x80)
+ return(-1);
+ if ((utf[0] & 0xe0) == 0xe0) {
+ if ((utf[2] & 0xc0) != 0x80)
+ return(-1);
+ if ((utf[0] & 0xf0) == 0xf0) {
+ if ((utf[0] & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80)
+ return(-1);
+ utf += 4;
+ } else {
+ utf += 3;
+ }
+ } else {
+ utf += 2;
+ }
+ } else {
+ utf++;
+ }
+ ret++;
+ }
+ return(ret);
+}
+
+/**
+ * xmlGetUTF8Char:
+ * @utf: a sequence of UTF-8 encoded bytes
+ * @len: a pointer to @bytes len
+ *
+ * Read one UTF8 Char from @utf
+ *
+ * Returns the char value or -1 in case of error, and updates *len with the
+ * number of bytes consumed
+ */
+int
+xmlGetUTF8Char(const unsigned char *utf, int *len) {
+ unsigned int c;
+
+ if (utf == NULL)
+ goto error;
+ if (len == NULL)
+ goto error;
+ if (*len < 1)
+ goto error;
+
+ c = utf[0];
+ if (c & 0x80) {
+ if (*len < 2)
+ goto error;
+ if ((utf[1] & 0xc0) != 0x80)
+ goto error;
+ if ((c & 0xe0) == 0xe0) {
+ if (*len < 3)
+ goto error;
+ if ((utf[2] & 0xc0) != 0x80)
+ goto error;
+ if ((c & 0xf0) == 0xf0) {
+ if (*len < 4)
+ goto error;
+ if ((c & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80)
+ goto error;
+ *len = 4;
+ /* 4-byte code */
+ c = (utf[0] & 0x7) << 18;
+ c |= (utf[1] & 0x3f) << 12;
+ c |= (utf[2] & 0x3f) << 6;
+ c |= utf[3] & 0x3f;
+ } else {
+ /* 3-byte code */
+ *len = 3;
+ c = (utf[0] & 0xf) << 12;
+ c |= (utf[1] & 0x3f) << 6;
+ c |= utf[2] & 0x3f;
+ }
+ } else {
+ /* 2-byte code */
+ *len = 2;
+ c = (utf[0] & 0x1f) << 6;
+ c |= utf[1] & 0x3f;
+ }
+ } else {
+ /* 1-byte code */
+ *len = 1;
+ }
+ return(c);
+
+error:
+ *len = 0;
+ return(-1);
+}
+
+/**
+ * xmlCheckUTF8:
+ * @utf: Pointer to putative UTF-8 encoded string.
+ *
+ * Checks @utf for being valid UTF-8. @utf is assumed to be
+ * null-terminated. This function is not super-strict, as it will
+ * allow longer UTF-8 sequences than necessary. Note that Java is
+ * capable of producing these sequences if provoked. Also note, this
+ * routine checks for the 4-byte maximum size, but does not check for
+ * 0x10ffff maximum value.
+ *
+ * Return value: true if @utf is valid.
+ **/
+int
+xmlCheckUTF8(const unsigned char *utf)
+{
+ int ix;
+ unsigned char c;
+
+ for (ix = 0; (c = utf[ix]);) {
+ if (c & 0x80) {
+ if ((utf[ix + 1] & 0xc0) != 0x80)
+ return(0);
+ if ((c & 0xe0) == 0xe0) {
+ if ((utf[ix + 2] & 0xc0) != 0x80)
+ return(0);
+ if ((c & 0xf0) == 0xf0) {
+ if ((c & 0xf8) != 0xf0 || (utf[ix + 3] & 0xc0) != 0x80)
+ return(0);
+ ix += 4;
+ /* 4-byte code */
+ } else
+ /* 3-byte code */
+ ix += 3;
+ } else
+ /* 2-byte code */
+ ix += 2;
+ } else
+ /* 1-byte code */
+ ix++;
+ }
+ return(1);
+}
+
+/**
+ * xmlUTF8Strsize:
+ * @utf: a sequence of UTF-8 encoded bytes
+ * @len: the number of characters in the array
+ *
+ * storage size of an UTF8 string
+ *
+ * Returns the storage size of
+ * the first 'len' characters of ARRAY
+ *
+ */
+
+int
+xmlUTF8Strsize(const xmlChar *utf, int len) {
+ const xmlChar *ptr=utf;
+ xmlChar ch;
+
+ if (len <= 0)
+ return(0);
+
+ while ( len-- > 0) {
+ if ( !*ptr )
+ break;
+ if ( (ch = *ptr++) & 0x80)
+ while ( (ch<<=1) & 0x80 )
+ ptr++;
+ }
+ return (ptr - utf);
+}
+
+
+/**
+ * xmlUTF8Strndup:
+ * @utf: the input UTF8 *
+ * @len: the len of @utf (in chars)
+ *
+ * a strndup for array of UTF8's
+ *
+ * Returns a new UTF8 * or NULL
+ */
+xmlChar *
+xmlUTF8Strndup(const xmlChar *utf, int len) {
+ xmlChar *ret;
+ int i;
+
+ if ((utf == NULL) || (len < 0)) return(NULL);
+ i = xmlUTF8Strsize(utf, len);
+ ret = (xmlChar *) xmlMallocAtomic((i + 1) * sizeof(xmlChar));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "malloc of %ld byte failed\n",
+ (len + 1) * (long)sizeof(xmlChar));
+ return(NULL);
+ }
+ memcpy(ret, utf, i * sizeof(xmlChar));
+ ret[i] = 0;
+ return(ret);
+}
+
+/**
+ * xmlUTF8Strpos:
+ * @utf: the input UTF8 *
+ * @pos: the position of the desired UTF8 char (in chars)
+ *
+ * a function to provide the equivalent of fetching a
+ * character from a string array
+ *
+ * Returns a pointer to the UTF8 character or NULL
+ */
+xmlChar *
+xmlUTF8Strpos(const xmlChar *utf, int pos) {
+ xmlChar ch;
+
+ if (utf == NULL) return(NULL);
+ if ( (pos < 0) || (pos >= xmlUTF8Strlen(utf)) )
+ return(NULL);
+ while (pos--) {
+ if ((ch=*utf++) == 0) return(NULL);
+ if ( ch & 0x80 ) {
+ /* if not simple ascii, verify proper format */
+ if ( (ch & 0xc0) != 0xc0 )
+ return(NULL);
+ /* then skip over remaining bytes for this char */
+ while ( (ch <<= 1) & 0x80 )
+ if ( (*utf++ & 0xc0) != 0x80 )
+ return(NULL);
+ }
+ }
+ return((xmlChar *)utf);
+}
+
+/**
+ * xmlUTF8Strloc:
+ * @utf: the input UTF8 *
+ * @utfchar: the UTF8 character to be found
+ *
+ * a function to provide the relative location of a UTF8 char
+ *
+ * Returns the relative character position of the desired char
+ * or -1 if not found
+ */
+int
+xmlUTF8Strloc(const xmlChar *utf, const xmlChar *utfchar) {
+ int i, size;
+ xmlChar ch;
+
+ if (utf==NULL || utfchar==NULL) return -1;
+ size = xmlUTF8Strsize(utfchar, 1);
+ for(i=0; (ch=*utf) != 0; i++) {
+ if (xmlStrncmp(utf, utfchar, size)==0)
+ return(i);
+ utf++;
+ if ( ch & 0x80 ) {
+ /* if not simple ascii, verify proper format */
+ if ( (ch & 0xc0) != 0xc0 )
+ return(-1);
+ /* then skip over remaining bytes for this char */
+ while ( (ch <<= 1) & 0x80 )
+ if ( (*utf++ & 0xc0) != 0x80 )
+ return(-1);
+ }
+ }
+
+ return(-1);
+}
+/**
+ * xmlUTF8Strsub:
+ * @utf: a sequence of UTF-8 encoded bytes
+ * @start: relative pos of first char
+ * @len: total number to copy
+ *
+ * Create a substring from a given UTF-8 string
+ * Note: positions are given in units of UTF-8 chars
+ *
+ * Returns a pointer to a newly created string
+ * or NULL if any problem
+ */
+
+xmlChar *
+xmlUTF8Strsub(const xmlChar *utf, int start, int len) {
+ int i;
+ xmlChar ch;
+
+ if (utf == NULL) return(NULL);
+ if (start < 0) return(NULL);
+ if (len < 0) return(NULL);
+
+ /*
+ * Skip over any leading chars
+ */
+ for (i = 0;i < start;i++) {
+ if ((ch=*utf++) == 0) return(NULL);
+ if ( ch & 0x80 ) {
+ /* if not simple ascii, verify proper format */
+ if ( (ch & 0xc0) != 0xc0 )
+ return(NULL);
+ /* then skip over remaining bytes for this char */
+ while ( (ch <<= 1) & 0x80 )
+ if ( (*utf++ & 0xc0) != 0x80 )
+ return(NULL);
+ }
+ }
+
+ return(xmlUTF8Strndup(utf, len));
+}
diff --git a/xmlunicode.c b/xmlunicode.c
new file mode 100644
index 0000000..4667636
--- /dev/null
+++ b/xmlunicode.c
@@ -0,0 +1,3172 @@
+/*
+ * xmlunicode.c: this module implements the Unicode character APIs
+ *
+ * This file is automatically generated from the
+ * UCS description files of the Unicode Character Database
+ * http://www.unicode.org/Public/4.0-Update1/UCD-4.0.1d5b.html
+ * using the genUnicode.py Python script.
+ *
+ * Generation date: Mon Nov 10 22:35:10 2003
+ * Sources: Blocks-4.0.1d1b.txt UnicodeData-4.0.1d1b.txt
+ * Daniel Veillard <veillard@redhat.com>
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_UNICODE_ENABLED
+
+#include <string.h>
+#include <libxml/xmlversion.h>
+#include <libxml/xmlunicode.h>
+#include <libxml/chvalid.h>
+
+typedef int (xmlIntFunc)(int); /* just to keep one's mind untwisted */
+
+typedef struct {
+ const char *rangename;
+ xmlIntFunc *func;
+} xmlUnicodeRange;
+
+typedef struct {
+ xmlUnicodeRange *table;
+ int numentries;
+} xmlUnicodeNameTable;
+
+
+static xmlIntFunc *xmlUnicodeLookup(xmlUnicodeNameTable *tptr, const char *tname);
+
+static xmlUnicodeRange xmlUnicodeBlocks[] = {
+ {"AegeanNumbers", xmlUCSIsAegeanNumbers},
+ {"AlphabeticPresentationForms", xmlUCSIsAlphabeticPresentationForms},
+ {"Arabic", xmlUCSIsArabic},
+ {"ArabicPresentationForms-A", xmlUCSIsArabicPresentationFormsA},
+ {"ArabicPresentationForms-B", xmlUCSIsArabicPresentationFormsB},
+ {"Armenian", xmlUCSIsArmenian},
+ {"Arrows", xmlUCSIsArrows},
+ {"BasicLatin", xmlUCSIsBasicLatin},
+ {"Bengali", xmlUCSIsBengali},
+ {"BlockElements", xmlUCSIsBlockElements},
+ {"Bopomofo", xmlUCSIsBopomofo},
+ {"BopomofoExtended", xmlUCSIsBopomofoExtended},
+ {"BoxDrawing", xmlUCSIsBoxDrawing},
+ {"BraillePatterns", xmlUCSIsBraillePatterns},
+ {"Buhid", xmlUCSIsBuhid},
+ {"ByzantineMusicalSymbols", xmlUCSIsByzantineMusicalSymbols},
+ {"CJKCompatibility", xmlUCSIsCJKCompatibility},
+ {"CJKCompatibilityForms", xmlUCSIsCJKCompatibilityForms},
+ {"CJKCompatibilityIdeographs", xmlUCSIsCJKCompatibilityIdeographs},
+ {"CJKCompatibilityIdeographsSupplement", xmlUCSIsCJKCompatibilityIdeographsSupplement},
+ {"CJKRadicalsSupplement", xmlUCSIsCJKRadicalsSupplement},
+ {"CJKSymbolsandPunctuation", xmlUCSIsCJKSymbolsandPunctuation},
+ {"CJKUnifiedIdeographs", xmlUCSIsCJKUnifiedIdeographs},
+ {"CJKUnifiedIdeographsExtensionA", xmlUCSIsCJKUnifiedIdeographsExtensionA},
+ {"CJKUnifiedIdeographsExtensionB", xmlUCSIsCJKUnifiedIdeographsExtensionB},
+ {"Cherokee", xmlUCSIsCherokee},
+ {"CombiningDiacriticalMarks", xmlUCSIsCombiningDiacriticalMarks},
+ {"CombiningDiacriticalMarksforSymbols", xmlUCSIsCombiningDiacriticalMarksforSymbols},
+ {"CombiningHalfMarks", xmlUCSIsCombiningHalfMarks},
+ {"CombiningMarksforSymbols", xmlUCSIsCombiningMarksforSymbols},
+ {"ControlPictures", xmlUCSIsControlPictures},
+ {"CurrencySymbols", xmlUCSIsCurrencySymbols},
+ {"CypriotSyllabary", xmlUCSIsCypriotSyllabary},
+ {"Cyrillic", xmlUCSIsCyrillic},
+ {"CyrillicSupplement", xmlUCSIsCyrillicSupplement},
+ {"Deseret", xmlUCSIsDeseret},
+ {"Devanagari", xmlUCSIsDevanagari},
+ {"Dingbats", xmlUCSIsDingbats},
+ {"EnclosedAlphanumerics", xmlUCSIsEnclosedAlphanumerics},
+ {"EnclosedCJKLettersandMonths", xmlUCSIsEnclosedCJKLettersandMonths},
+ {"Ethiopic", xmlUCSIsEthiopic},
+ {"GeneralPunctuation", xmlUCSIsGeneralPunctuation},
+ {"GeometricShapes", xmlUCSIsGeometricShapes},
+ {"Georgian", xmlUCSIsGeorgian},
+ {"Gothic", xmlUCSIsGothic},
+ {"Greek", xmlUCSIsGreek},
+ {"GreekExtended", xmlUCSIsGreekExtended},
+ {"GreekandCoptic", xmlUCSIsGreekandCoptic},
+ {"Gujarati", xmlUCSIsGujarati},
+ {"Gurmukhi", xmlUCSIsGurmukhi},
+ {"HalfwidthandFullwidthForms", xmlUCSIsHalfwidthandFullwidthForms},
+ {"HangulCompatibilityJamo", xmlUCSIsHangulCompatibilityJamo},
+ {"HangulJamo", xmlUCSIsHangulJamo},
+ {"HangulSyllables", xmlUCSIsHangulSyllables},
+ {"Hanunoo", xmlUCSIsHanunoo},
+ {"Hebrew", xmlUCSIsHebrew},
+ {"HighPrivateUseSurrogates", xmlUCSIsHighPrivateUseSurrogates},
+ {"HighSurrogates", xmlUCSIsHighSurrogates},
+ {"Hiragana", xmlUCSIsHiragana},
+ {"IPAExtensions", xmlUCSIsIPAExtensions},
+ {"IdeographicDescriptionCharacters", xmlUCSIsIdeographicDescriptionCharacters},
+ {"Kanbun", xmlUCSIsKanbun},
+ {"KangxiRadicals", xmlUCSIsKangxiRadicals},
+ {"Kannada", xmlUCSIsKannada},
+ {"Katakana", xmlUCSIsKatakana},
+ {"KatakanaPhoneticExtensions", xmlUCSIsKatakanaPhoneticExtensions},
+ {"Khmer", xmlUCSIsKhmer},
+ {"KhmerSymbols", xmlUCSIsKhmerSymbols},
+ {"Lao", xmlUCSIsLao},
+ {"Latin-1Supplement", xmlUCSIsLatin1Supplement},
+ {"LatinExtended-A", xmlUCSIsLatinExtendedA},
+ {"LatinExtended-B", xmlUCSIsLatinExtendedB},
+ {"LatinExtendedAdditional", xmlUCSIsLatinExtendedAdditional},
+ {"LetterlikeSymbols", xmlUCSIsLetterlikeSymbols},
+ {"Limbu", xmlUCSIsLimbu},
+ {"LinearBIdeograms", xmlUCSIsLinearBIdeograms},
+ {"LinearBSyllabary", xmlUCSIsLinearBSyllabary},
+ {"LowSurrogates", xmlUCSIsLowSurrogates},
+ {"Malayalam", xmlUCSIsMalayalam},
+ {"MathematicalAlphanumericSymbols", xmlUCSIsMathematicalAlphanumericSymbols},
+ {"MathematicalOperators", xmlUCSIsMathematicalOperators},
+ {"MiscellaneousMathematicalSymbols-A", xmlUCSIsMiscellaneousMathematicalSymbolsA},
+ {"MiscellaneousMathematicalSymbols-B", xmlUCSIsMiscellaneousMathematicalSymbolsB},
+ {"MiscellaneousSymbols", xmlUCSIsMiscellaneousSymbols},
+ {"MiscellaneousSymbolsandArrows", xmlUCSIsMiscellaneousSymbolsandArrows},
+ {"MiscellaneousTechnical", xmlUCSIsMiscellaneousTechnical},
+ {"Mongolian", xmlUCSIsMongolian},
+ {"MusicalSymbols", xmlUCSIsMusicalSymbols},
+ {"Myanmar", xmlUCSIsMyanmar},
+ {"NumberForms", xmlUCSIsNumberForms},
+ {"Ogham", xmlUCSIsOgham},
+ {"OldItalic", xmlUCSIsOldItalic},
+ {"OpticalCharacterRecognition", xmlUCSIsOpticalCharacterRecognition},
+ {"Oriya", xmlUCSIsOriya},
+ {"Osmanya", xmlUCSIsOsmanya},
+ {"PhoneticExtensions", xmlUCSIsPhoneticExtensions},
+ {"PrivateUse", xmlUCSIsPrivateUse},
+ {"PrivateUseArea", xmlUCSIsPrivateUseArea},
+ {"Runic", xmlUCSIsRunic},
+ {"Shavian", xmlUCSIsShavian},
+ {"Sinhala", xmlUCSIsSinhala},
+ {"SmallFormVariants", xmlUCSIsSmallFormVariants},
+ {"SpacingModifierLetters", xmlUCSIsSpacingModifierLetters},
+ {"Specials", xmlUCSIsSpecials},
+ {"SuperscriptsandSubscripts", xmlUCSIsSuperscriptsandSubscripts},
+ {"SupplementalArrows-A", xmlUCSIsSupplementalArrowsA},
+ {"SupplementalArrows-B", xmlUCSIsSupplementalArrowsB},
+ {"SupplementalMathematicalOperators", xmlUCSIsSupplementalMathematicalOperators},
+ {"SupplementaryPrivateUseArea-A", xmlUCSIsSupplementaryPrivateUseAreaA},
+ {"SupplementaryPrivateUseArea-B", xmlUCSIsSupplementaryPrivateUseAreaB},
+ {"Syriac", xmlUCSIsSyriac},
+ {"Tagalog", xmlUCSIsTagalog},
+ {"Tagbanwa", xmlUCSIsTagbanwa},
+ {"Tags", xmlUCSIsTags},
+ {"TaiLe", xmlUCSIsTaiLe},
+ {"TaiXuanJingSymbols", xmlUCSIsTaiXuanJingSymbols},
+ {"Tamil", xmlUCSIsTamil},
+ {"Telugu", xmlUCSIsTelugu},
+ {"Thaana", xmlUCSIsThaana},
+ {"Thai", xmlUCSIsThai},
+ {"Tibetan", xmlUCSIsTibetan},
+ {"Ugaritic", xmlUCSIsUgaritic},
+ {"UnifiedCanadianAboriginalSyllabics", xmlUCSIsUnifiedCanadianAboriginalSyllabics},
+ {"VariationSelectors", xmlUCSIsVariationSelectors},
+ {"VariationSelectorsSupplement", xmlUCSIsVariationSelectorsSupplement},
+ {"YiRadicals", xmlUCSIsYiRadicals},
+ {"YiSyllables", xmlUCSIsYiSyllables},
+ {"YijingHexagramSymbols", xmlUCSIsYijingHexagramSymbols}};
+
+static xmlUnicodeRange xmlUnicodeCats[] = {
+ {"C", xmlUCSIsCatC},
+ {"Cc", xmlUCSIsCatCc},
+ {"Cf", xmlUCSIsCatCf},
+ {"Co", xmlUCSIsCatCo},
+ {"Cs", xmlUCSIsCatCs},
+ {"L", xmlUCSIsCatL},
+ {"Ll", xmlUCSIsCatLl},
+ {"Lm", xmlUCSIsCatLm},
+ {"Lo", xmlUCSIsCatLo},
+ {"Lt", xmlUCSIsCatLt},
+ {"Lu", xmlUCSIsCatLu},
+ {"M", xmlUCSIsCatM},
+ {"Mc", xmlUCSIsCatMc},
+ {"Me", xmlUCSIsCatMe},
+ {"Mn", xmlUCSIsCatMn},
+ {"N", xmlUCSIsCatN},
+ {"Nd", xmlUCSIsCatNd},
+ {"Nl", xmlUCSIsCatNl},
+ {"No", xmlUCSIsCatNo},
+ {"P", xmlUCSIsCatP},
+ {"Pc", xmlUCSIsCatPc},
+ {"Pd", xmlUCSIsCatPd},
+ {"Pe", xmlUCSIsCatPe},
+ {"Pf", xmlUCSIsCatPf},
+ {"Pi", xmlUCSIsCatPi},
+ {"Po", xmlUCSIsCatPo},
+ {"Ps", xmlUCSIsCatPs},
+ {"S", xmlUCSIsCatS},
+ {"Sc", xmlUCSIsCatSc},
+ {"Sk", xmlUCSIsCatSk},
+ {"Sm", xmlUCSIsCatSm},
+ {"So", xmlUCSIsCatSo},
+ {"Z", xmlUCSIsCatZ},
+ {"Zl", xmlUCSIsCatZl},
+ {"Zp", xmlUCSIsCatZp},
+ {"Zs", xmlUCSIsCatZs}};
+
+static xmlChSRange xmlCS[] = {{0x0, 0x1f}, {0x7f, 0x9f}, {0xad, 0xad},
+ {0x600, 0x603}, {0x6dd, 0x6dd}, {0x70f, 0x70f}, {0x17b4, 0x17b5},
+ {0x200c, 0x200f}, {0x202a, 0x202e}, {0x2060, 0x2063}, {0x206a, 0x206f},
+ {0xd800, 0xd800}, {0xdb7f, 0xdb80}, {0xdbff, 0xdc00}, {0xdfff, 0xe000},
+ {0xf8ff, 0xf8ff}, {0xfeff, 0xfeff}, {0xfff9, 0xfffb} };
+static xmlChLRange xmlCL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001},
+ {0xe0020, 0xe007f}, {0xf0000, 0xf0000}, {0xffffd, 0xffffd},
+ {0x100000, 0x100000}, {0x10fffd, 0x10fffd} };
+static xmlChRangeGroup xmlCG = {18,7,xmlCS,xmlCL};
+
+static xmlChSRange xmlCfS[] = {{0xad, 0xad}, {0x600, 0x603},
+ {0x6dd, 0x6dd}, {0x70f, 0x70f}, {0x17b4, 0x17b5}, {0x200c, 0x200f},
+ {0x202a, 0x202e}, {0x2060, 0x2063}, {0x206a, 0x206f}, {0xfeff, 0xfeff},
+ {0xfff9, 0xfffb} };
+static xmlChLRange xmlCfL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001},
+ {0xe0020, 0xe007f} };
+static xmlChRangeGroup xmlCfG = {11,3,xmlCfS,xmlCfL};
+
+static xmlChSRange xmlLS[] = {{0x41, 0x5a}, {0x61, 0x7a}, {0xaa, 0xaa},
+ {0xb5, 0xb5}, {0xba, 0xba}, {0xc0, 0xd6}, {0xd8, 0xf6}, {0xf8, 0x236},
+ {0x250, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4}, {0x2ee, 0x2ee},
+ {0x37a, 0x37a}, {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c},
+ {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3f5}, {0x3f7, 0x3fb},
+ {0x400, 0x481}, {0x48a, 0x4ce}, {0x4d0, 0x4f5}, {0x4f8, 0x4f9},
+ {0x500, 0x50f}, {0x531, 0x556}, {0x559, 0x559}, {0x561, 0x587},
+ {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x640, 0x64a},
+ {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, {0x6e5, 0x6e6},
+ {0x6ee, 0x6ef}, {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x710},
+ {0x712, 0x72f}, {0x74d, 0x74f}, {0x780, 0x7a5}, {0x7b1, 0x7b1},
+ {0x904, 0x939}, {0x93d, 0x93d}, {0x950, 0x950}, {0x958, 0x961},
+ {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8}, {0x9aa, 0x9b0},
+ {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, {0x9dc, 0x9dd},
+ {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10},
+ {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36},
+ {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74},
+ {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0},
+ {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd}, {0xad0, 0xad0},
+ {0xae0, 0xae1}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28},
+ {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb35, 0xb39}, {0xb3d, 0xb3d},
+ {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb71, 0xb71}, {0xb83, 0xb83},
+ {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a},
+ {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa},
+ {0xbae, 0xbb5}, {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10},
+ {0xc12, 0xc28}, {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61},
+ {0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3},
+ {0xcb5, 0xcb9}, {0xcbd, 0xcbd}, {0xcde, 0xcde}, {0xce0, 0xce1},
+ {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28}, {0xd2a, 0xd39},
+ {0xd60, 0xd61}, {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb},
+ {0xdbd, 0xdbd}, {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe32, 0xe33},
+ {0xe40, 0xe46}, {0xe81, 0xe82}, {0xe84, 0xe84}, {0xe87, 0xe88},
+ {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97}, {0xe99, 0xe9f},
+ {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7}, {0xeaa, 0xeab},
+ {0xead, 0xeb0}, {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4},
+ {0xec6, 0xec6}, {0xedc, 0xedd}, {0xf00, 0xf00}, {0xf40, 0xf47},
+ {0xf49, 0xf6a}, {0xf88, 0xf8b}, {0x1000, 0x1021}, {0x1023, 0x1027},
+ {0x1029, 0x102a}, {0x1050, 0x1055}, {0x10a0, 0x10c5}, {0x10d0, 0x10f8},
+ {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9}, {0x1200, 0x1206},
+ {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d}, {0x1250, 0x1256},
+ {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286}, {0x1288, 0x1288},
+ {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0}, {0x12b2, 0x12b5},
+ {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, {0x12c8, 0x12ce},
+ {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e}, {0x1310, 0x1310},
+ {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346}, {0x1348, 0x135a},
+ {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676}, {0x1681, 0x169a},
+ {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711}, {0x1720, 0x1731},
+ {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770}, {0x1780, 0x17b3},
+ {0x17d7, 0x17d7}, {0x17dc, 0x17dc}, {0x1820, 0x1877}, {0x1880, 0x18a8},
+ {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974}, {0x1d00, 0x1d6b},
+ {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15}, {0x1f18, 0x1f1d},
+ {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f59, 0x1f59},
+ {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4},
+ {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc},
+ {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4},
+ {0x1ff6, 0x1ffc}, {0x2071, 0x2071}, {0x207f, 0x207f}, {0x2102, 0x2102},
+ {0x2107, 0x2107}, {0x210a, 0x2113}, {0x2115, 0x2115}, {0x2119, 0x211d},
+ {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x212d},
+ {0x212f, 0x2131}, {0x2133, 0x2139}, {0x213d, 0x213f}, {0x2145, 0x2149},
+ {0x3005, 0x3006}, {0x3031, 0x3035}, {0x303b, 0x303c}, {0x3041, 0x3096},
+ {0x309d, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, {0x3105, 0x312c},
+ {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, {0x3400, 0x3400},
+ {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, {0xa000, 0xa48c},
+ {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, {0xfa30, 0xfa6a},
+ {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb1d}, {0xfb1f, 0xfb28},
+ {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41},
+ {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f},
+ {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe70, 0xfe74}, {0xfe76, 0xfefc},
+ {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xffbe}, {0xffc2, 0xffc7},
+ {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc} };
+static xmlChLRange xmlLL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026},
+ {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d},
+ {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e},
+ {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10400, 0x1049d},
+ {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835},
+ {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f},
+ {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f},
+ {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, {0x1d4a9, 0x1d4ac},
+ {0x1d4ae, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3},
+ {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514},
+ {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e},
+ {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550},
+ {0x1d552, 0x1d6a3}, {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da},
+ {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734},
+ {0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788},
+ {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9},
+ {0x20000, 0x20000}, {0x2a6d6, 0x2a6d6}, {0x2f800, 0x2fa1d} };
+static xmlChRangeGroup xmlLG = {279,50,xmlLS,xmlLL};
+
+static xmlChSRange xmlLlS[] = {{0x61, 0x7a}, {0xaa, 0xaa}, {0xb5, 0xb5},
+ {0xba, 0xba}, {0xdf, 0xf6}, {0xf8, 0xff}, {0x101, 0x101},
+ {0x103, 0x103}, {0x105, 0x105}, {0x107, 0x107}, {0x109, 0x109},
+ {0x10b, 0x10b}, {0x10d, 0x10d}, {0x10f, 0x10f}, {0x111, 0x111},
+ {0x113, 0x113}, {0x115, 0x115}, {0x117, 0x117}, {0x119, 0x119},
+ {0x11b, 0x11b}, {0x11d, 0x11d}, {0x11f, 0x11f}, {0x121, 0x121},
+ {0x123, 0x123}, {0x125, 0x125}, {0x127, 0x127}, {0x129, 0x129},
+ {0x12b, 0x12b}, {0x12d, 0x12d}, {0x12f, 0x12f}, {0x131, 0x131},
+ {0x133, 0x133}, {0x135, 0x135}, {0x137, 0x138}, {0x13a, 0x13a},
+ {0x13c, 0x13c}, {0x13e, 0x13e}, {0x140, 0x140}, {0x142, 0x142},
+ {0x144, 0x144}, {0x146, 0x146}, {0x148, 0x149}, {0x14b, 0x14b},
+ {0x14d, 0x14d}, {0x14f, 0x14f}, {0x151, 0x151}, {0x153, 0x153},
+ {0x155, 0x155}, {0x157, 0x157}, {0x159, 0x159}, {0x15b, 0x15b},
+ {0x15d, 0x15d}, {0x15f, 0x15f}, {0x161, 0x161}, {0x163, 0x163},
+ {0x165, 0x165}, {0x167, 0x167}, {0x169, 0x169}, {0x16b, 0x16b},
+ {0x16d, 0x16d}, {0x16f, 0x16f}, {0x171, 0x171}, {0x173, 0x173},
+ {0x175, 0x175}, {0x177, 0x177}, {0x17a, 0x17a}, {0x17c, 0x17c},
+ {0x17e, 0x180}, {0x183, 0x183}, {0x185, 0x185}, {0x188, 0x188},
+ {0x18c, 0x18d}, {0x192, 0x192}, {0x195, 0x195}, {0x199, 0x19b},
+ {0x19e, 0x19e}, {0x1a1, 0x1a1}, {0x1a3, 0x1a3}, {0x1a5, 0x1a5},
+ {0x1a8, 0x1a8}, {0x1aa, 0x1ab}, {0x1ad, 0x1ad}, {0x1b0, 0x1b0},
+ {0x1b4, 0x1b4}, {0x1b6, 0x1b6}, {0x1b9, 0x1ba}, {0x1bd, 0x1bf},
+ {0x1c6, 0x1c6}, {0x1c9, 0x1c9}, {0x1cc, 0x1cc}, {0x1ce, 0x1ce},
+ {0x1d0, 0x1d0}, {0x1d2, 0x1d2}, {0x1d4, 0x1d4}, {0x1d6, 0x1d6},
+ {0x1d8, 0x1d8}, {0x1da, 0x1da}, {0x1dc, 0x1dd}, {0x1df, 0x1df},
+ {0x1e1, 0x1e1}, {0x1e3, 0x1e3}, {0x1e5, 0x1e5}, {0x1e7, 0x1e7},
+ {0x1e9, 0x1e9}, {0x1eb, 0x1eb}, {0x1ed, 0x1ed}, {0x1ef, 0x1f0},
+ {0x1f3, 0x1f3}, {0x1f5, 0x1f5}, {0x1f9, 0x1f9}, {0x1fb, 0x1fb},
+ {0x1fd, 0x1fd}, {0x1ff, 0x1ff}, {0x201, 0x201}, {0x203, 0x203},
+ {0x205, 0x205}, {0x207, 0x207}, {0x209, 0x209}, {0x20b, 0x20b},
+ {0x20d, 0x20d}, {0x20f, 0x20f}, {0x211, 0x211}, {0x213, 0x213},
+ {0x215, 0x215}, {0x217, 0x217}, {0x219, 0x219}, {0x21b, 0x21b},
+ {0x21d, 0x21d}, {0x21f, 0x21f}, {0x221, 0x221}, {0x223, 0x223},
+ {0x225, 0x225}, {0x227, 0x227}, {0x229, 0x229}, {0x22b, 0x22b},
+ {0x22d, 0x22d}, {0x22f, 0x22f}, {0x231, 0x231}, {0x233, 0x236},
+ {0x250, 0x2af}, {0x390, 0x390}, {0x3ac, 0x3ce}, {0x3d0, 0x3d1},
+ {0x3d5, 0x3d7}, {0x3d9, 0x3d9}, {0x3db, 0x3db}, {0x3dd, 0x3dd},
+ {0x3df, 0x3df}, {0x3e1, 0x3e1}, {0x3e3, 0x3e3}, {0x3e5, 0x3e5},
+ {0x3e7, 0x3e7}, {0x3e9, 0x3e9}, {0x3eb, 0x3eb}, {0x3ed, 0x3ed},
+ {0x3ef, 0x3f3}, {0x3f5, 0x3f5}, {0x3f8, 0x3f8}, {0x3fb, 0x3fb},
+ {0x430, 0x45f}, {0x461, 0x461}, {0x463, 0x463}, {0x465, 0x465},
+ {0x467, 0x467}, {0x469, 0x469}, {0x46b, 0x46b}, {0x46d, 0x46d},
+ {0x46f, 0x46f}, {0x471, 0x471}, {0x473, 0x473}, {0x475, 0x475},
+ {0x477, 0x477}, {0x479, 0x479}, {0x47b, 0x47b}, {0x47d, 0x47d},
+ {0x47f, 0x47f}, {0x481, 0x481}, {0x48b, 0x48b}, {0x48d, 0x48d},
+ {0x48f, 0x48f}, {0x491, 0x491}, {0x493, 0x493}, {0x495, 0x495},
+ {0x497, 0x497}, {0x499, 0x499}, {0x49b, 0x49b}, {0x49d, 0x49d},
+ {0x49f, 0x49f}, {0x4a1, 0x4a1}, {0x4a3, 0x4a3}, {0x4a5, 0x4a5},
+ {0x4a7, 0x4a7}, {0x4a9, 0x4a9}, {0x4ab, 0x4ab}, {0x4ad, 0x4ad},
+ {0x4af, 0x4af}, {0x4b1, 0x4b1}, {0x4b3, 0x4b3}, {0x4b5, 0x4b5},
+ {0x4b7, 0x4b7}, {0x4b9, 0x4b9}, {0x4bb, 0x4bb}, {0x4bd, 0x4bd},
+ {0x4bf, 0x4bf}, {0x4c2, 0x4c2}, {0x4c4, 0x4c4}, {0x4c6, 0x4c6},
+ {0x4c8, 0x4c8}, {0x4ca, 0x4ca}, {0x4cc, 0x4cc}, {0x4ce, 0x4ce},
+ {0x4d1, 0x4d1}, {0x4d3, 0x4d3}, {0x4d5, 0x4d5}, {0x4d7, 0x4d7},
+ {0x4d9, 0x4d9}, {0x4db, 0x4db}, {0x4dd, 0x4dd}, {0x4df, 0x4df},
+ {0x4e1, 0x4e1}, {0x4e3, 0x4e3}, {0x4e5, 0x4e5}, {0x4e7, 0x4e7},
+ {0x4e9, 0x4e9}, {0x4eb, 0x4eb}, {0x4ed, 0x4ed}, {0x4ef, 0x4ef},
+ {0x4f1, 0x4f1}, {0x4f3, 0x4f3}, {0x4f5, 0x4f5}, {0x4f9, 0x4f9},
+ {0x501, 0x501}, {0x503, 0x503}, {0x505, 0x505}, {0x507, 0x507},
+ {0x509, 0x509}, {0x50b, 0x50b}, {0x50d, 0x50d}, {0x50f, 0x50f},
+ {0x561, 0x587}, {0x1d00, 0x1d2b}, {0x1d62, 0x1d6b}, {0x1e01, 0x1e01},
+ {0x1e03, 0x1e03}, {0x1e05, 0x1e05}, {0x1e07, 0x1e07}, {0x1e09, 0x1e09},
+ {0x1e0b, 0x1e0b}, {0x1e0d, 0x1e0d}, {0x1e0f, 0x1e0f}, {0x1e11, 0x1e11},
+ {0x1e13, 0x1e13}, {0x1e15, 0x1e15}, {0x1e17, 0x1e17}, {0x1e19, 0x1e19},
+ {0x1e1b, 0x1e1b}, {0x1e1d, 0x1e1d}, {0x1e1f, 0x1e1f}, {0x1e21, 0x1e21},
+ {0x1e23, 0x1e23}, {0x1e25, 0x1e25}, {0x1e27, 0x1e27}, {0x1e29, 0x1e29},
+ {0x1e2b, 0x1e2b}, {0x1e2d, 0x1e2d}, {0x1e2f, 0x1e2f}, {0x1e31, 0x1e31},
+ {0x1e33, 0x1e33}, {0x1e35, 0x1e35}, {0x1e37, 0x1e37}, {0x1e39, 0x1e39},
+ {0x1e3b, 0x1e3b}, {0x1e3d, 0x1e3d}, {0x1e3f, 0x1e3f}, {0x1e41, 0x1e41},
+ {0x1e43, 0x1e43}, {0x1e45, 0x1e45}, {0x1e47, 0x1e47}, {0x1e49, 0x1e49},
+ {0x1e4b, 0x1e4b}, {0x1e4d, 0x1e4d}, {0x1e4f, 0x1e4f}, {0x1e51, 0x1e51},
+ {0x1e53, 0x1e53}, {0x1e55, 0x1e55}, {0x1e57, 0x1e57}, {0x1e59, 0x1e59},
+ {0x1e5b, 0x1e5b}, {0x1e5d, 0x1e5d}, {0x1e5f, 0x1e5f}, {0x1e61, 0x1e61},
+ {0x1e63, 0x1e63}, {0x1e65, 0x1e65}, {0x1e67, 0x1e67}, {0x1e69, 0x1e69},
+ {0x1e6b, 0x1e6b}, {0x1e6d, 0x1e6d}, {0x1e6f, 0x1e6f}, {0x1e71, 0x1e71},
+ {0x1e73, 0x1e73}, {0x1e75, 0x1e75}, {0x1e77, 0x1e77}, {0x1e79, 0x1e79},
+ {0x1e7b, 0x1e7b}, {0x1e7d, 0x1e7d}, {0x1e7f, 0x1e7f}, {0x1e81, 0x1e81},
+ {0x1e83, 0x1e83}, {0x1e85, 0x1e85}, {0x1e87, 0x1e87}, {0x1e89, 0x1e89},
+ {0x1e8b, 0x1e8b}, {0x1e8d, 0x1e8d}, {0x1e8f, 0x1e8f}, {0x1e91, 0x1e91},
+ {0x1e93, 0x1e93}, {0x1e95, 0x1e9b}, {0x1ea1, 0x1ea1}, {0x1ea3, 0x1ea3},
+ {0x1ea5, 0x1ea5}, {0x1ea7, 0x1ea7}, {0x1ea9, 0x1ea9}, {0x1eab, 0x1eab},
+ {0x1ead, 0x1ead}, {0x1eaf, 0x1eaf}, {0x1eb1, 0x1eb1}, {0x1eb3, 0x1eb3},
+ {0x1eb5, 0x1eb5}, {0x1eb7, 0x1eb7}, {0x1eb9, 0x1eb9}, {0x1ebb, 0x1ebb},
+ {0x1ebd, 0x1ebd}, {0x1ebf, 0x1ebf}, {0x1ec1, 0x1ec1}, {0x1ec3, 0x1ec3},
+ {0x1ec5, 0x1ec5}, {0x1ec7, 0x1ec7}, {0x1ec9, 0x1ec9}, {0x1ecb, 0x1ecb},
+ {0x1ecd, 0x1ecd}, {0x1ecf, 0x1ecf}, {0x1ed1, 0x1ed1}, {0x1ed3, 0x1ed3},
+ {0x1ed5, 0x1ed5}, {0x1ed7, 0x1ed7}, {0x1ed9, 0x1ed9}, {0x1edb, 0x1edb},
+ {0x1edd, 0x1edd}, {0x1edf, 0x1edf}, {0x1ee1, 0x1ee1}, {0x1ee3, 0x1ee3},
+ {0x1ee5, 0x1ee5}, {0x1ee7, 0x1ee7}, {0x1ee9, 0x1ee9}, {0x1eeb, 0x1eeb},
+ {0x1eed, 0x1eed}, {0x1eef, 0x1eef}, {0x1ef1, 0x1ef1}, {0x1ef3, 0x1ef3},
+ {0x1ef5, 0x1ef5}, {0x1ef7, 0x1ef7}, {0x1ef9, 0x1ef9}, {0x1f00, 0x1f07},
+ {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, {0x1f30, 0x1f37}, {0x1f40, 0x1f45},
+ {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, {0x1f70, 0x1f7d}, {0x1f80, 0x1f87},
+ {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, {0x1fb0, 0x1fb4}, {0x1fb6, 0x1fb7},
+ {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fc7}, {0x1fd0, 0x1fd3},
+ {0x1fd6, 0x1fd7}, {0x1fe0, 0x1fe7}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ff7},
+ {0x2071, 0x2071}, {0x207f, 0x207f}, {0x210a, 0x210a}, {0x210e, 0x210f},
+ {0x2113, 0x2113}, {0x212f, 0x212f}, {0x2134, 0x2134}, {0x2139, 0x2139},
+ {0x213d, 0x213d}, {0x2146, 0x2149}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17},
+ {0xff41, 0xff5a} };
+static xmlChLRange xmlLlL[] = {{0x10428, 0x1044f}, {0x1d41a, 0x1d433},
+ {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b},
+ {0x1d4b6, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3},
+ {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503}, {0x1d51e, 0x1d537},
+ {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3},
+ {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f},
+ {0x1d68a, 0x1d6a3}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1},
+ {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b}, {0x1d736, 0x1d74e},
+ {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f},
+ {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9} };
+static xmlChRangeGroup xmlLlG = {396,28,xmlLlS,xmlLlL};
+
+static xmlChSRange xmlLmS[] = {{0x2b0, 0x2c1}, {0x2c6, 0x2d1},
+ {0x2e0, 0x2e4}, {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x559, 0x559},
+ {0x640, 0x640}, {0x6e5, 0x6e6}, {0xe46, 0xe46}, {0xec6, 0xec6},
+ {0x17d7, 0x17d7}, {0x1843, 0x1843}, {0x1d2c, 0x1d61}, {0x3005, 0x3005},
+ {0x3031, 0x3035}, {0x303b, 0x303b}, {0x309d, 0x309e}, {0x30fc, 0x30fe},
+ {0xff70, 0xff70}, {0xff9e, 0xff9f} };
+static xmlChRangeGroup xmlLmG = {20,0,xmlLmS,NULL};
+
+static xmlChSRange xmlLoS[] = {{0x1bb, 0x1bb}, {0x1c0, 0x1c3},
+ {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a},
+ {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, {0x6ee, 0x6ef},
+ {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x710}, {0x712, 0x72f},
+ {0x74d, 0x74f}, {0x780, 0x7a5}, {0x7b1, 0x7b1}, {0x904, 0x939},
+ {0x93d, 0x93d}, {0x950, 0x950}, {0x958, 0x961}, {0x985, 0x98c},
+ {0x98f, 0x990}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2},
+ {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, {0x9dc, 0x9dd}, {0x9df, 0x9e1},
+ {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, {0xa13, 0xa28},
+ {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39},
+ {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74}, {0xa85, 0xa8d},
+ {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3},
+ {0xab5, 0xab9}, {0xabd, 0xabd}, {0xad0, 0xad0}, {0xae0, 0xae1},
+ {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28}, {0xb2a, 0xb30},
+ {0xb32, 0xb33}, {0xb35, 0xb39}, {0xb3d, 0xb3d}, {0xb5c, 0xb5d},
+ {0xb5f, 0xb61}, {0xb71, 0xb71}, {0xb83, 0xb83}, {0xb85, 0xb8a},
+ {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c},
+ {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5},
+ {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28},
+ {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c},
+ {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9},
+ {0xcbd, 0xcbd}, {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c},
+ {0xd0e, 0xd10}, {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61},
+ {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdbd, 0xdbd},
+ {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45},
+ {0xe81, 0xe82}, {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a},
+ {0xe8d, 0xe8d}, {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3},
+ {0xea5, 0xea5}, {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeb0},
+ {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xedc, 0xedd},
+ {0xf00, 0xf00}, {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b},
+ {0x1000, 0x1021}, {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055},
+ {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9},
+ {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d},
+ {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286},
+ {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0},
+ {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5},
+ {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e},
+ {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346},
+ {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676},
+ {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711},
+ {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770},
+ {0x1780, 0x17b3}, {0x17dc, 0x17dc}, {0x1820, 0x1842}, {0x1844, 0x1877},
+ {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974},
+ {0x2135, 0x2138}, {0x3006, 0x3006}, {0x303c, 0x303c}, {0x3041, 0x3096},
+ {0x309f, 0x309f}, {0x30a1, 0x30fa}, {0x30ff, 0x30ff}, {0x3105, 0x312c},
+ {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, {0x3400, 0x3400},
+ {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, {0xa000, 0xa48c},
+ {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, {0xfa30, 0xfa6a},
+ {0xfb1d, 0xfb1d}, {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c},
+ {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1},
+ {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb},
+ {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff66, 0xff6f}, {0xff71, 0xff9d},
+ {0xffa0, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7},
+ {0xffda, 0xffdc} };
+static xmlChLRange xmlLoL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026},
+ {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d},
+ {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e},
+ {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10450, 0x1049d},
+ {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835},
+ {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f},
+ {0x20000, 0x20000}, {0x2a6d6, 0x2a6d6}, {0x2f800, 0x2fa1d} };
+static xmlChRangeGroup xmlLoG = {211,20,xmlLoS,xmlLoL};
+
+static xmlChSRange xmlLtS[] = {{0x1c5, 0x1c5}, {0x1c8, 0x1c8},
+ {0x1cb, 0x1cb}, {0x1f2, 0x1f2}, {0x1f88, 0x1f8f}, {0x1f98, 0x1f9f},
+ {0x1fa8, 0x1faf}, {0x1fbc, 0x1fbc}, {0x1fcc, 0x1fcc}, {0x1ffc, 0x1ffc} };
+static xmlChRangeGroup xmlLtG = {10,0,xmlLtS,NULL};
+
+static xmlChSRange xmlLuS[] = {{0x41, 0x5a}, {0xc0, 0xd6}, {0xd8, 0xde},
+ {0x100, 0x100}, {0x102, 0x102}, {0x104, 0x104}, {0x106, 0x106},
+ {0x108, 0x108}, {0x10a, 0x10a}, {0x10c, 0x10c}, {0x10e, 0x10e},
+ {0x110, 0x110}, {0x112, 0x112}, {0x114, 0x114}, {0x116, 0x116},
+ {0x118, 0x118}, {0x11a, 0x11a}, {0x11c, 0x11c}, {0x11e, 0x11e},
+ {0x120, 0x120}, {0x122, 0x122}, {0x124, 0x124}, {0x126, 0x126},
+ {0x128, 0x128}, {0x12a, 0x12a}, {0x12c, 0x12c}, {0x12e, 0x12e},
+ {0x130, 0x130}, {0x132, 0x132}, {0x134, 0x134}, {0x136, 0x136},
+ {0x139, 0x139}, {0x13b, 0x13b}, {0x13d, 0x13d}, {0x13f, 0x13f},
+ {0x141, 0x141}, {0x143, 0x143}, {0x145, 0x145}, {0x147, 0x147},
+ {0x14a, 0x14a}, {0x14c, 0x14c}, {0x14e, 0x14e}, {0x150, 0x150},
+ {0x152, 0x152}, {0x154, 0x154}, {0x156, 0x156}, {0x158, 0x158},
+ {0x15a, 0x15a}, {0x15c, 0x15c}, {0x15e, 0x15e}, {0x160, 0x160},
+ {0x162, 0x162}, {0x164, 0x164}, {0x166, 0x166}, {0x168, 0x168},
+ {0x16a, 0x16a}, {0x16c, 0x16c}, {0x16e, 0x16e}, {0x170, 0x170},
+ {0x172, 0x172}, {0x174, 0x174}, {0x176, 0x176}, {0x178, 0x179},
+ {0x17b, 0x17b}, {0x17d, 0x17d}, {0x181, 0x182}, {0x184, 0x184},
+ {0x186, 0x187}, {0x189, 0x18b}, {0x18e, 0x191}, {0x193, 0x194},
+ {0x196, 0x198}, {0x19c, 0x19d}, {0x19f, 0x1a0}, {0x1a2, 0x1a2},
+ {0x1a4, 0x1a4}, {0x1a6, 0x1a7}, {0x1a9, 0x1a9}, {0x1ac, 0x1ac},
+ {0x1ae, 0x1af}, {0x1b1, 0x1b3}, {0x1b5, 0x1b5}, {0x1b7, 0x1b8},
+ {0x1bc, 0x1bc}, {0x1c4, 0x1c4}, {0x1c7, 0x1c7}, {0x1ca, 0x1ca},
+ {0x1cd, 0x1cd}, {0x1cf, 0x1cf}, {0x1d1, 0x1d1}, {0x1d3, 0x1d3},
+ {0x1d5, 0x1d5}, {0x1d7, 0x1d7}, {0x1d9, 0x1d9}, {0x1db, 0x1db},
+ {0x1de, 0x1de}, {0x1e0, 0x1e0}, {0x1e2, 0x1e2}, {0x1e4, 0x1e4},
+ {0x1e6, 0x1e6}, {0x1e8, 0x1e8}, {0x1ea, 0x1ea}, {0x1ec, 0x1ec},
+ {0x1ee, 0x1ee}, {0x1f1, 0x1f1}, {0x1f4, 0x1f4}, {0x1f6, 0x1f8},
+ {0x1fa, 0x1fa}, {0x1fc, 0x1fc}, {0x1fe, 0x1fe}, {0x200, 0x200},
+ {0x202, 0x202}, {0x204, 0x204}, {0x206, 0x206}, {0x208, 0x208},
+ {0x20a, 0x20a}, {0x20c, 0x20c}, {0x20e, 0x20e}, {0x210, 0x210},
+ {0x212, 0x212}, {0x214, 0x214}, {0x216, 0x216}, {0x218, 0x218},
+ {0x21a, 0x21a}, {0x21c, 0x21c}, {0x21e, 0x21e}, {0x220, 0x220},
+ {0x222, 0x222}, {0x224, 0x224}, {0x226, 0x226}, {0x228, 0x228},
+ {0x22a, 0x22a}, {0x22c, 0x22c}, {0x22e, 0x22e}, {0x230, 0x230},
+ {0x232, 0x232}, {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c},
+ {0x38e, 0x38f}, {0x391, 0x3a1}, {0x3a3, 0x3ab}, {0x3d2, 0x3d4},
+ {0x3d8, 0x3d8}, {0x3da, 0x3da}, {0x3dc, 0x3dc}, {0x3de, 0x3de},
+ {0x3e0, 0x3e0}, {0x3e2, 0x3e2}, {0x3e4, 0x3e4}, {0x3e6, 0x3e6},
+ {0x3e8, 0x3e8}, {0x3ea, 0x3ea}, {0x3ec, 0x3ec}, {0x3ee, 0x3ee},
+ {0x3f4, 0x3f4}, {0x3f7, 0x3f7}, {0x3f9, 0x3fa}, {0x400, 0x42f},
+ {0x460, 0x460}, {0x462, 0x462}, {0x464, 0x464}, {0x466, 0x466},
+ {0x468, 0x468}, {0x46a, 0x46a}, {0x46c, 0x46c}, {0x46e, 0x46e},
+ {0x470, 0x470}, {0x472, 0x472}, {0x474, 0x474}, {0x476, 0x476},
+ {0x478, 0x478}, {0x47a, 0x47a}, {0x47c, 0x47c}, {0x47e, 0x47e},
+ {0x480, 0x480}, {0x48a, 0x48a}, {0x48c, 0x48c}, {0x48e, 0x48e},
+ {0x490, 0x490}, {0x492, 0x492}, {0x494, 0x494}, {0x496, 0x496},
+ {0x498, 0x498}, {0x49a, 0x49a}, {0x49c, 0x49c}, {0x49e, 0x49e},
+ {0x4a0, 0x4a0}, {0x4a2, 0x4a2}, {0x4a4, 0x4a4}, {0x4a6, 0x4a6},
+ {0x4a8, 0x4a8}, {0x4aa, 0x4aa}, {0x4ac, 0x4ac}, {0x4ae, 0x4ae},
+ {0x4b0, 0x4b0}, {0x4b2, 0x4b2}, {0x4b4, 0x4b4}, {0x4b6, 0x4b6},
+ {0x4b8, 0x4b8}, {0x4ba, 0x4ba}, {0x4bc, 0x4bc}, {0x4be, 0x4be},
+ {0x4c0, 0x4c1}, {0x4c3, 0x4c3}, {0x4c5, 0x4c5}, {0x4c7, 0x4c7},
+ {0x4c9, 0x4c9}, {0x4cb, 0x4cb}, {0x4cd, 0x4cd}, {0x4d0, 0x4d0},
+ {0x4d2, 0x4d2}, {0x4d4, 0x4d4}, {0x4d6, 0x4d6}, {0x4d8, 0x4d8},
+ {0x4da, 0x4da}, {0x4dc, 0x4dc}, {0x4de, 0x4de}, {0x4e0, 0x4e0},
+ {0x4e2, 0x4e2}, {0x4e4, 0x4e4}, {0x4e6, 0x4e6}, {0x4e8, 0x4e8},
+ {0x4ea, 0x4ea}, {0x4ec, 0x4ec}, {0x4ee, 0x4ee}, {0x4f0, 0x4f0},
+ {0x4f2, 0x4f2}, {0x4f4, 0x4f4}, {0x4f8, 0x4f8}, {0x500, 0x500},
+ {0x502, 0x502}, {0x504, 0x504}, {0x506, 0x506}, {0x508, 0x508},
+ {0x50a, 0x50a}, {0x50c, 0x50c}, {0x50e, 0x50e}, {0x531, 0x556},
+ {0x10a0, 0x10c5}, {0x1e00, 0x1e00}, {0x1e02, 0x1e02}, {0x1e04, 0x1e04},
+ {0x1e06, 0x1e06}, {0x1e08, 0x1e08}, {0x1e0a, 0x1e0a}, {0x1e0c, 0x1e0c},
+ {0x1e0e, 0x1e0e}, {0x1e10, 0x1e10}, {0x1e12, 0x1e12}, {0x1e14, 0x1e14},
+ {0x1e16, 0x1e16}, {0x1e18, 0x1e18}, {0x1e1a, 0x1e1a}, {0x1e1c, 0x1e1c},
+ {0x1e1e, 0x1e1e}, {0x1e20, 0x1e20}, {0x1e22, 0x1e22}, {0x1e24, 0x1e24},
+ {0x1e26, 0x1e26}, {0x1e28, 0x1e28}, {0x1e2a, 0x1e2a}, {0x1e2c, 0x1e2c},
+ {0x1e2e, 0x1e2e}, {0x1e30, 0x1e30}, {0x1e32, 0x1e32}, {0x1e34, 0x1e34},
+ {0x1e36, 0x1e36}, {0x1e38, 0x1e38}, {0x1e3a, 0x1e3a}, {0x1e3c, 0x1e3c},
+ {0x1e3e, 0x1e3e}, {0x1e40, 0x1e40}, {0x1e42, 0x1e42}, {0x1e44, 0x1e44},
+ {0x1e46, 0x1e46}, {0x1e48, 0x1e48}, {0x1e4a, 0x1e4a}, {0x1e4c, 0x1e4c},
+ {0x1e4e, 0x1e4e}, {0x1e50, 0x1e50}, {0x1e52, 0x1e52}, {0x1e54, 0x1e54},
+ {0x1e56, 0x1e56}, {0x1e58, 0x1e58}, {0x1e5a, 0x1e5a}, {0x1e5c, 0x1e5c},
+ {0x1e5e, 0x1e5e}, {0x1e60, 0x1e60}, {0x1e62, 0x1e62}, {0x1e64, 0x1e64},
+ {0x1e66, 0x1e66}, {0x1e68, 0x1e68}, {0x1e6a, 0x1e6a}, {0x1e6c, 0x1e6c},
+ {0x1e6e, 0x1e6e}, {0x1e70, 0x1e70}, {0x1e72, 0x1e72}, {0x1e74, 0x1e74},
+ {0x1e76, 0x1e76}, {0x1e78, 0x1e78}, {0x1e7a, 0x1e7a}, {0x1e7c, 0x1e7c},
+ {0x1e7e, 0x1e7e}, {0x1e80, 0x1e80}, {0x1e82, 0x1e82}, {0x1e84, 0x1e84},
+ {0x1e86, 0x1e86}, {0x1e88, 0x1e88}, {0x1e8a, 0x1e8a}, {0x1e8c, 0x1e8c},
+ {0x1e8e, 0x1e8e}, {0x1e90, 0x1e90}, {0x1e92, 0x1e92}, {0x1e94, 0x1e94},
+ {0x1ea0, 0x1ea0}, {0x1ea2, 0x1ea2}, {0x1ea4, 0x1ea4}, {0x1ea6, 0x1ea6},
+ {0x1ea8, 0x1ea8}, {0x1eaa, 0x1eaa}, {0x1eac, 0x1eac}, {0x1eae, 0x1eae},
+ {0x1eb0, 0x1eb0}, {0x1eb2, 0x1eb2}, {0x1eb4, 0x1eb4}, {0x1eb6, 0x1eb6},
+ {0x1eb8, 0x1eb8}, {0x1eba, 0x1eba}, {0x1ebc, 0x1ebc}, {0x1ebe, 0x1ebe},
+ {0x1ec0, 0x1ec0}, {0x1ec2, 0x1ec2}, {0x1ec4, 0x1ec4}, {0x1ec6, 0x1ec6},
+ {0x1ec8, 0x1ec8}, {0x1eca, 0x1eca}, {0x1ecc, 0x1ecc}, {0x1ece, 0x1ece},
+ {0x1ed0, 0x1ed0}, {0x1ed2, 0x1ed2}, {0x1ed4, 0x1ed4}, {0x1ed6, 0x1ed6},
+ {0x1ed8, 0x1ed8}, {0x1eda, 0x1eda}, {0x1edc, 0x1edc}, {0x1ede, 0x1ede},
+ {0x1ee0, 0x1ee0}, {0x1ee2, 0x1ee2}, {0x1ee4, 0x1ee4}, {0x1ee6, 0x1ee6},
+ {0x1ee8, 0x1ee8}, {0x1eea, 0x1eea}, {0x1eec, 0x1eec}, {0x1eee, 0x1eee},
+ {0x1ef0, 0x1ef0}, {0x1ef2, 0x1ef2}, {0x1ef4, 0x1ef4}, {0x1ef6, 0x1ef6},
+ {0x1ef8, 0x1ef8}, {0x1f08, 0x1f0f}, {0x1f18, 0x1f1d}, {0x1f28, 0x1f2f},
+ {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b},
+ {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f5f}, {0x1f68, 0x1f6f}, {0x1fb8, 0x1fbb},
+ {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, {0x1fe8, 0x1fec}, {0x1ff8, 0x1ffb},
+ {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210b, 0x210d}, {0x2110, 0x2112},
+ {0x2115, 0x2115}, {0x2119, 0x211d}, {0x2124, 0x2124}, {0x2126, 0x2126},
+ {0x2128, 0x2128}, {0x212a, 0x212d}, {0x2130, 0x2131}, {0x2133, 0x2133},
+ {0x213e, 0x213f}, {0x2145, 0x2145}, {0xff21, 0xff3a} };
+static xmlChLRange xmlLuL[] = {{0x10400, 0x10427}, {0x1d400, 0x1d419},
+ {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d49c, 0x1d49c},
+ {0x1d49e, 0x1d49f}, {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6},
+ {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9},
+ {0x1d504, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514},
+ {0x1d516, 0x1d51c}, {0x1d538, 0x1d539}, {0x1d53b, 0x1d53e},
+ {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550},
+ {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed},
+ {0x1d608, 0x1d621}, {0x1d63c, 0x1d655}, {0x1d670, 0x1d689},
+ {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa}, {0x1d71c, 0x1d734},
+ {0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8} };
+static xmlChRangeGroup xmlLuG = {390,31,xmlLuS,xmlLuL};
+
+static xmlChSRange xmlMS[] = {{0x300, 0x357}, {0x35d, 0x36f},
+ {0x483, 0x486}, {0x488, 0x489}, {0x591, 0x5a1}, {0x5a3, 0x5b9},
+ {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4},
+ {0x610, 0x615}, {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc},
+ {0x6de, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711},
+ {0x730, 0x74a}, {0x7a6, 0x7b0}, {0x901, 0x903}, {0x93c, 0x93c},
+ {0x93e, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x983},
+ {0x9bc, 0x9bc}, {0x9be, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd},
+ {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa01, 0xa03}, {0xa3c, 0xa3c},
+ {0xa3e, 0xa42}, {0xa47, 0xa48}, {0xa4b, 0xa4d}, {0xa70, 0xa71},
+ {0xa81, 0xa83}, {0xabc, 0xabc}, {0xabe, 0xac5}, {0xac7, 0xac9},
+ {0xacb, 0xacd}, {0xae2, 0xae3}, {0xb01, 0xb03}, {0xb3c, 0xb3c},
+ {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, {0xb56, 0xb57},
+ {0xb82, 0xb82}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, {0xbca, 0xbcd},
+ {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44}, {0xc46, 0xc48},
+ {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83}, {0xcbc, 0xcbc},
+ {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6},
+ {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d},
+ {0xd57, 0xd57}, {0xd82, 0xd83}, {0xdca, 0xdca}, {0xdcf, 0xdd4},
+ {0xdd6, 0xdd6}, {0xdd8, 0xddf}, {0xdf2, 0xdf3}, {0xe31, 0xe31},
+ {0xe34, 0xe3a}, {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9},
+ {0xebb, 0xebc}, {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35},
+ {0xf37, 0xf37}, {0xf39, 0xf39}, {0xf3e, 0xf3f}, {0xf71, 0xf84},
+ {0xf86, 0xf87}, {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6},
+ {0x102c, 0x1032}, {0x1036, 0x1039}, {0x1056, 0x1059}, {0x1712, 0x1714},
+ {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773}, {0x17b6, 0x17d3},
+ {0x17dd, 0x17dd}, {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x192b},
+ {0x1930, 0x193b}, {0x20d0, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a},
+ {0xfb1e, 0xfb1e}, {0xfe00, 0xfe0f}, {0xfe20, 0xfe23} };
+static xmlChLRange xmlML[] = {{0x1d165, 0x1d169}, {0x1d16d, 0x1d172},
+ {0x1d17b, 0x1d182}, {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad},
+ {0xe0100, 0xe01ef} };
+static xmlChRangeGroup xmlMG = {113,6,xmlMS,xmlML};
+
+static xmlChSRange xmlMcS[] = {{0x903, 0x903}, {0x93e, 0x940},
+ {0x949, 0x94c}, {0x982, 0x983}, {0x9be, 0x9c0}, {0x9c7, 0x9c8},
+ {0x9cb, 0x9cc}, {0x9d7, 0x9d7}, {0xa03, 0xa03}, {0xa3e, 0xa40},
+ {0xa83, 0xa83}, {0xabe, 0xac0}, {0xac9, 0xac9}, {0xacb, 0xacc},
+ {0xb02, 0xb03}, {0xb3e, 0xb3e}, {0xb40, 0xb40}, {0xb47, 0xb48},
+ {0xb4b, 0xb4c}, {0xb57, 0xb57}, {0xbbe, 0xbbf}, {0xbc1, 0xbc2},
+ {0xbc6, 0xbc8}, {0xbca, 0xbcc}, {0xbd7, 0xbd7}, {0xc01, 0xc03},
+ {0xc41, 0xc44}, {0xc82, 0xc83}, {0xcbe, 0xcbe}, {0xcc0, 0xcc4},
+ {0xcc7, 0xcc8}, {0xcca, 0xccb}, {0xcd5, 0xcd6}, {0xd02, 0xd03},
+ {0xd3e, 0xd40}, {0xd46, 0xd48}, {0xd4a, 0xd4c}, {0xd57, 0xd57},
+ {0xd82, 0xd83}, {0xdcf, 0xdd1}, {0xdd8, 0xddf}, {0xdf2, 0xdf3},
+ {0xf3e, 0xf3f}, {0xf7f, 0xf7f}, {0x102c, 0x102c}, {0x1031, 0x1031},
+ {0x1038, 0x1038}, {0x1056, 0x1057}, {0x17b6, 0x17b6}, {0x17be, 0x17c5},
+ {0x17c7, 0x17c8}, {0x1923, 0x1926}, {0x1929, 0x192b}, {0x1930, 0x1931},
+ {0x1933, 0x1938} };
+static xmlChLRange xmlMcL[] = {{0x1d165, 0x1d166}, {0x1d16d, 0x1d172} };
+static xmlChRangeGroup xmlMcG = {55,2,xmlMcS,xmlMcL};
+
+static xmlChSRange xmlMnS[] = {{0x300, 0x357}, {0x35d, 0x36f},
+ {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, {0x5bb, 0x5bd},
+ {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, {0x610, 0x615},
+ {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6df, 0x6e4},
+ {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711}, {0x730, 0x74a},
+ {0x7a6, 0x7b0}, {0x901, 0x902}, {0x93c, 0x93c}, {0x941, 0x948},
+ {0x94d, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x981},
+ {0x9bc, 0x9bc}, {0x9c1, 0x9c4}, {0x9cd, 0x9cd}, {0x9e2, 0x9e3},
+ {0xa01, 0xa02}, {0xa3c, 0xa3c}, {0xa41, 0xa42}, {0xa47, 0xa48},
+ {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa82}, {0xabc, 0xabc},
+ {0xac1, 0xac5}, {0xac7, 0xac8}, {0xacd, 0xacd}, {0xae2, 0xae3},
+ {0xb01, 0xb01}, {0xb3c, 0xb3c}, {0xb3f, 0xb3f}, {0xb41, 0xb43},
+ {0xb4d, 0xb4d}, {0xb56, 0xb56}, {0xb82, 0xb82}, {0xbc0, 0xbc0},
+ {0xbcd, 0xbcd}, {0xc3e, 0xc40}, {0xc46, 0xc48}, {0xc4a, 0xc4d},
+ {0xc55, 0xc56}, {0xcbc, 0xcbc}, {0xcbf, 0xcbf}, {0xcc6, 0xcc6},
+ {0xccc, 0xccd}, {0xd41, 0xd43}, {0xd4d, 0xd4d}, {0xdca, 0xdca},
+ {0xdd2, 0xdd4}, {0xdd6, 0xdd6}, {0xe31, 0xe31}, {0xe34, 0xe3a},
+ {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc},
+ {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37},
+ {0xf39, 0xf39}, {0xf71, 0xf7e}, {0xf80, 0xf84}, {0xf86, 0xf87},
+ {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, {0x102d, 0x1030},
+ {0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039}, {0x1058, 0x1059},
+ {0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773},
+ {0x17b7, 0x17bd}, {0x17c6, 0x17c6}, {0x17c9, 0x17d3}, {0x17dd, 0x17dd},
+ {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x1922}, {0x1927, 0x1928},
+ {0x1932, 0x1932}, {0x1939, 0x193b}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1},
+ {0x20e5, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a}, {0xfb1e, 0xfb1e},
+ {0xfe00, 0xfe0f}, {0xfe20, 0xfe23} };
+static xmlChLRange xmlMnL[] = {{0x1d167, 0x1d169}, {0x1d17b, 0x1d182},
+ {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, {0xe0100, 0xe01ef} };
+static xmlChRangeGroup xmlMnG = {108,5,xmlMnS,xmlMnL};
+
+static xmlChSRange xmlNS[] = {{0x30, 0x39}, {0xb2, 0xb3}, {0xb9, 0xb9},
+ {0xbc, 0xbe}, {0x660, 0x669}, {0x6f0, 0x6f9}, {0x966, 0x96f},
+ {0x9e6, 0x9ef}, {0x9f4, 0x9f9}, {0xa66, 0xa6f}, {0xae6, 0xaef},
+ {0xb66, 0xb6f}, {0xbe7, 0xbf2}, {0xc66, 0xc6f}, {0xce6, 0xcef},
+ {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, {0xf20, 0xf33},
+ {0x1040, 0x1049}, {0x1369, 0x137c}, {0x16ee, 0x16f0}, {0x17e0, 0x17e9},
+ {0x17f0, 0x17f9}, {0x1810, 0x1819}, {0x1946, 0x194f}, {0x2070, 0x2070},
+ {0x2074, 0x2079}, {0x2080, 0x2089}, {0x2153, 0x2183}, {0x2460, 0x249b},
+ {0x24ea, 0x24ff}, {0x2776, 0x2793}, {0x3007, 0x3007}, {0x3021, 0x3029},
+ {0x3038, 0x303a}, {0x3192, 0x3195}, {0x3220, 0x3229}, {0x3251, 0x325f},
+ {0x3280, 0x3289}, {0x32b1, 0x32bf}, {0xff10, 0xff19} };
+static xmlChLRange xmlNL[] = {{0x10107, 0x10133}, {0x10320, 0x10323},
+ {0x1034a, 0x1034a}, {0x104a0, 0x104a9}, {0x1d7ce, 0x1d7ff} };
+static xmlChRangeGroup xmlNG = {42,5,xmlNS,xmlNL};
+
+static xmlChSRange xmlNdS[] = {{0x30, 0x39}, {0x660, 0x669},
+ {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f},
+ {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f},
+ {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9},
+ {0xf20, 0xf29}, {0x1040, 0x1049}, {0x1369, 0x1371}, {0x17e0, 0x17e9},
+ {0x1810, 0x1819}, {0x1946, 0x194f}, {0xff10, 0xff19} };
+static xmlChLRange xmlNdL[] = {{0x104a0, 0x104a9}, {0x1d7ce, 0x1d7ff} };
+static xmlChRangeGroup xmlNdG = {21,2,xmlNdS,xmlNdL};
+
+static xmlChSRange xmlNoS[] = {{0xb2, 0xb3}, {0xb9, 0xb9}, {0xbc, 0xbe},
+ {0x9f4, 0x9f9}, {0xbf0, 0xbf2}, {0xf2a, 0xf33}, {0x1372, 0x137c},
+ {0x17f0, 0x17f9}, {0x2070, 0x2070}, {0x2074, 0x2079}, {0x2080, 0x2089},
+ {0x2153, 0x215f}, {0x2460, 0x249b}, {0x24ea, 0x24ff}, {0x2776, 0x2793},
+ {0x3192, 0x3195}, {0x3220, 0x3229}, {0x3251, 0x325f}, {0x3280, 0x3289},
+ {0x32b1, 0x32bf} };
+static xmlChLRange xmlNoL[] = {{0x10107, 0x10133}, {0x10320, 0x10323} };
+static xmlChRangeGroup xmlNoG = {20,2,xmlNoS,xmlNoL};
+
+static xmlChSRange xmlPS[] = {{0x21, 0x23}, {0x25, 0x2a}, {0x2c, 0x2f},
+ {0x3a, 0x3b}, {0x3f, 0x40}, {0x5b, 0x5d}, {0x5f, 0x5f}, {0x7b, 0x7b},
+ {0x7d, 0x7d}, {0xa1, 0xa1}, {0xab, 0xab}, {0xb7, 0xb7}, {0xbb, 0xbb},
+ {0xbf, 0xbf}, {0x37e, 0x37e}, {0x387, 0x387}, {0x55a, 0x55f},
+ {0x589, 0x58a}, {0x5be, 0x5be}, {0x5c0, 0x5c0}, {0x5c3, 0x5c3},
+ {0x5f3, 0x5f4}, {0x60c, 0x60d}, {0x61b, 0x61b}, {0x61f, 0x61f},
+ {0x66a, 0x66d}, {0x6d4, 0x6d4}, {0x700, 0x70d}, {0x964, 0x965},
+ {0x970, 0x970}, {0xdf4, 0xdf4}, {0xe4f, 0xe4f}, {0xe5a, 0xe5b},
+ {0xf04, 0xf12}, {0xf3a, 0xf3d}, {0xf85, 0xf85}, {0x104a, 0x104f},
+ {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e}, {0x169b, 0x169c},
+ {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, {0x17d8, 0x17da},
+ {0x1800, 0x180a}, {0x1944, 0x1945}, {0x2010, 0x2027}, {0x2030, 0x2043},
+ {0x2045, 0x2051}, {0x2053, 0x2054}, {0x2057, 0x2057}, {0x207d, 0x207e},
+ {0x208d, 0x208e}, {0x2329, 0x232a}, {0x23b4, 0x23b6}, {0x2768, 0x2775},
+ {0x27e6, 0x27eb}, {0x2983, 0x2998}, {0x29d8, 0x29db}, {0x29fc, 0x29fd},
+ {0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f}, {0x3030, 0x3030},
+ {0x303d, 0x303d}, {0x30a0, 0x30a0}, {0x30fb, 0x30fb}, {0xfd3e, 0xfd3f},
+ {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, {0xfe63, 0xfe63}, {0xfe68, 0xfe68},
+ {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff0a}, {0xff0c, 0xff0f},
+ {0xff1a, 0xff1b}, {0xff1f, 0xff20}, {0xff3b, 0xff3d}, {0xff3f, 0xff3f},
+ {0xff5b, 0xff5b}, {0xff5d, 0xff5d}, {0xff5f, 0xff65} };
+static xmlChLRange xmlPL[] = {{0x10100, 0x10101}, {0x1039f, 0x1039f} };
+static xmlChRangeGroup xmlPG = {84,2,xmlPS,xmlPL};
+
+static xmlChSRange xmlPdS[] = {{0x2d, 0x2d}, {0x58a, 0x58a},
+ {0x1806, 0x1806}, {0x2010, 0x2015}, {0x301c, 0x301c}, {0x3030, 0x3030},
+ {0x30a0, 0x30a0}, {0xfe31, 0xfe32}, {0xfe58, 0xfe58}, {0xfe63, 0xfe63},
+ {0xff0d, 0xff0d} };
+static xmlChRangeGroup xmlPdG = {11,0,xmlPdS,NULL};
+
+static xmlChSRange xmlPeS[] = {{0x29, 0x29}, {0x5d, 0x5d}, {0x7d, 0x7d},
+ {0xf3b, 0xf3b}, {0xf3d, 0xf3d}, {0x169c, 0x169c}, {0x2046, 0x2046},
+ {0x207e, 0x207e}, {0x208e, 0x208e}, {0x232a, 0x232a}, {0x23b5, 0x23b5},
+ {0x2769, 0x2769}, {0x276b, 0x276b}, {0x276d, 0x276d}, {0x276f, 0x276f},
+ {0x2771, 0x2771}, {0x2773, 0x2773}, {0x2775, 0x2775}, {0x27e7, 0x27e7},
+ {0x27e9, 0x27e9}, {0x27eb, 0x27eb}, {0x2984, 0x2984}, {0x2986, 0x2986},
+ {0x2988, 0x2988}, {0x298a, 0x298a}, {0x298c, 0x298c}, {0x298e, 0x298e},
+ {0x2990, 0x2990}, {0x2992, 0x2992}, {0x2994, 0x2994}, {0x2996, 0x2996},
+ {0x2998, 0x2998}, {0x29d9, 0x29d9}, {0x29db, 0x29db}, {0x29fd, 0x29fd},
+ {0x3009, 0x3009}, {0x300b, 0x300b}, {0x300d, 0x300d}, {0x300f, 0x300f},
+ {0x3011, 0x3011}, {0x3015, 0x3015}, {0x3017, 0x3017}, {0x3019, 0x3019},
+ {0x301b, 0x301b}, {0x301e, 0x301f}, {0xfd3f, 0xfd3f}, {0xfe36, 0xfe36},
+ {0xfe38, 0xfe38}, {0xfe3a, 0xfe3a}, {0xfe3c, 0xfe3c}, {0xfe3e, 0xfe3e},
+ {0xfe40, 0xfe40}, {0xfe42, 0xfe42}, {0xfe44, 0xfe44}, {0xfe48, 0xfe48},
+ {0xfe5a, 0xfe5a}, {0xfe5c, 0xfe5c}, {0xfe5e, 0xfe5e}, {0xff09, 0xff09},
+ {0xff3d, 0xff3d}, {0xff5d, 0xff5d}, {0xff60, 0xff60}, {0xff63, 0xff63} };
+static xmlChRangeGroup xmlPeG = {63,0,xmlPeS,NULL};
+
+static xmlChSRange xmlPoS[] = {{0x21, 0x23}, {0x25, 0x27}, {0x2a, 0x2a},
+ {0x2c, 0x2c}, {0x2e, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40}, {0x5c, 0x5c},
+ {0xa1, 0xa1}, {0xb7, 0xb7}, {0xbf, 0xbf}, {0x37e, 0x37e},
+ {0x387, 0x387}, {0x55a, 0x55f}, {0x589, 0x589}, {0x5be, 0x5be},
+ {0x5c0, 0x5c0}, {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d},
+ {0x61b, 0x61b}, {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4},
+ {0x700, 0x70d}, {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4},
+ {0xe4f, 0xe4f}, {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf85, 0xf85},
+ {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e},
+ {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, {0x17d8, 0x17da},
+ {0x1800, 0x1805}, {0x1807, 0x180a}, {0x1944, 0x1945}, {0x2016, 0x2017},
+ {0x2020, 0x2027}, {0x2030, 0x2038}, {0x203b, 0x203e}, {0x2041, 0x2043},
+ {0x2047, 0x2051}, {0x2053, 0x2053}, {0x2057, 0x2057}, {0x23b6, 0x23b6},
+ {0x3001, 0x3003}, {0x303d, 0x303d}, {0xfe30, 0xfe30}, {0xfe45, 0xfe46},
+ {0xfe49, 0xfe4c}, {0xfe50, 0xfe52}, {0xfe54, 0xfe57}, {0xfe5f, 0xfe61},
+ {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff07},
+ {0xff0a, 0xff0a}, {0xff0c, 0xff0c}, {0xff0e, 0xff0f}, {0xff1a, 0xff1b},
+ {0xff1f, 0xff20}, {0xff3c, 0xff3c}, {0xff61, 0xff61}, {0xff64, 0xff64} };
+static xmlChLRange xmlPoL[] = {{0x10100, 0x10101}, {0x1039f, 0x1039f} };
+static xmlChRangeGroup xmlPoG = {72,2,xmlPoS,xmlPoL};
+
+static xmlChSRange xmlPsS[] = {{0x28, 0x28}, {0x5b, 0x5b}, {0x7b, 0x7b},
+ {0xf3a, 0xf3a}, {0xf3c, 0xf3c}, {0x169b, 0x169b}, {0x201a, 0x201a},
+ {0x201e, 0x201e}, {0x2045, 0x2045}, {0x207d, 0x207d}, {0x208d, 0x208d},
+ {0x2329, 0x2329}, {0x23b4, 0x23b4}, {0x2768, 0x2768}, {0x276a, 0x276a},
+ {0x276c, 0x276c}, {0x276e, 0x276e}, {0x2770, 0x2770}, {0x2772, 0x2772},
+ {0x2774, 0x2774}, {0x27e6, 0x27e6}, {0x27e8, 0x27e8}, {0x27ea, 0x27ea},
+ {0x2983, 0x2983}, {0x2985, 0x2985}, {0x2987, 0x2987}, {0x2989, 0x2989},
+ {0x298b, 0x298b}, {0x298d, 0x298d}, {0x298f, 0x298f}, {0x2991, 0x2991},
+ {0x2993, 0x2993}, {0x2995, 0x2995}, {0x2997, 0x2997}, {0x29d8, 0x29d8},
+ {0x29da, 0x29da}, {0x29fc, 0x29fc}, {0x3008, 0x3008}, {0x300a, 0x300a},
+ {0x300c, 0x300c}, {0x300e, 0x300e}, {0x3010, 0x3010}, {0x3014, 0x3014},
+ {0x3016, 0x3016}, {0x3018, 0x3018}, {0x301a, 0x301a}, {0x301d, 0x301d},
+ {0xfd3e, 0xfd3e}, {0xfe35, 0xfe35}, {0xfe37, 0xfe37}, {0xfe39, 0xfe39},
+ {0xfe3b, 0xfe3b}, {0xfe3d, 0xfe3d}, {0xfe3f, 0xfe3f}, {0xfe41, 0xfe41},
+ {0xfe43, 0xfe43}, {0xfe47, 0xfe47}, {0xfe59, 0xfe59}, {0xfe5b, 0xfe5b},
+ {0xfe5d, 0xfe5d}, {0xff08, 0xff08}, {0xff3b, 0xff3b}, {0xff5b, 0xff5b},
+ {0xff5f, 0xff5f}, {0xff62, 0xff62} };
+static xmlChRangeGroup xmlPsG = {65,0,xmlPsS,NULL};
+
+static xmlChSRange xmlSS[] = {{0x24, 0x24}, {0x2b, 0x2b}, {0x3c, 0x3e},
+ {0x5e, 0x5e}, {0x60, 0x60}, {0x7c, 0x7c}, {0x7e, 0x7e}, {0xa2, 0xa9},
+ {0xac, 0xac}, {0xae, 0xb1}, {0xb4, 0xb4}, {0xb6, 0xb6}, {0xb8, 0xb8},
+ {0xd7, 0xd7}, {0xf7, 0xf7}, {0x2c2, 0x2c5}, {0x2d2, 0x2df},
+ {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375}, {0x384, 0x385},
+ {0x3f6, 0x3f6}, {0x482, 0x482}, {0x60e, 0x60f}, {0x6e9, 0x6e9},
+ {0x6fd, 0x6fe}, {0x9f2, 0x9f3}, {0x9fa, 0x9fa}, {0xaf1, 0xaf1},
+ {0xb70, 0xb70}, {0xbf3, 0xbfa}, {0xe3f, 0xe3f}, {0xf01, 0xf03},
+ {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34}, {0xf36, 0xf36},
+ {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, {0xfcf, 0xfcf},
+ {0x17db, 0x17db}, {0x1940, 0x1940}, {0x19e0, 0x19ff}, {0x1fbd, 0x1fbd},
+ {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf}, {0x1fdd, 0x1fdf}, {0x1fed, 0x1fef},
+ {0x1ffd, 0x1ffe}, {0x2044, 0x2044}, {0x2052, 0x2052}, {0x207a, 0x207c},
+ {0x208a, 0x208c}, {0x20a0, 0x20b1}, {0x2100, 0x2101}, {0x2103, 0x2106},
+ {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118}, {0x211e, 0x2123},
+ {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, {0x212e, 0x212e},
+ {0x2132, 0x2132}, {0x213a, 0x213b}, {0x2140, 0x2144}, {0x214a, 0x214b},
+ {0x2190, 0x2328}, {0x232b, 0x23b3}, {0x23b7, 0x23d0}, {0x2400, 0x2426},
+ {0x2440, 0x244a}, {0x249c, 0x24e9}, {0x2500, 0x2617}, {0x2619, 0x267d},
+ {0x2680, 0x2691}, {0x26a0, 0x26a1}, {0x2701, 0x2704}, {0x2706, 0x2709},
+ {0x270c, 0x2727}, {0x2729, 0x274b}, {0x274d, 0x274d}, {0x274f, 0x2752},
+ {0x2756, 0x2756}, {0x2758, 0x275e}, {0x2761, 0x2767}, {0x2794, 0x2794},
+ {0x2798, 0x27af}, {0x27b1, 0x27be}, {0x27d0, 0x27e5}, {0x27f0, 0x2982},
+ {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2b0d}, {0x2e80, 0x2e99},
+ {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, {0x3004, 0x3004},
+ {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037}, {0x303e, 0x303f},
+ {0x309b, 0x309c}, {0x3190, 0x3191}, {0x3196, 0x319f}, {0x3200, 0x321e},
+ {0x322a, 0x3243}, {0x3250, 0x3250}, {0x3260, 0x327d}, {0x327f, 0x327f},
+ {0x328a, 0x32b0}, {0x32c0, 0x32fe}, {0x3300, 0x33ff}, {0x4dc0, 0x4dff},
+ {0xa490, 0xa4c6}, {0xfb29, 0xfb29}, {0xfdfc, 0xfdfd}, {0xfe62, 0xfe62},
+ {0xfe64, 0xfe66}, {0xfe69, 0xfe69}, {0xff04, 0xff04}, {0xff0b, 0xff0b},
+ {0xff1c, 0xff1e}, {0xff3e, 0xff3e}, {0xff40, 0xff40}, {0xff5c, 0xff5c},
+ {0xff5e, 0xff5e}, {0xffe0, 0xffe6}, {0xffe8, 0xffee}, {0xfffc, 0xfffd} };
+static xmlChLRange xmlSL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f},
+ {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164},
+ {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9},
+ {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356}, {0x1d6c1, 0x1d6c1},
+ {0x1d6db, 0x1d6db}, {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715},
+ {0x1d735, 0x1d735}, {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f},
+ {0x1d789, 0x1d789}, {0x1d7a9, 0x1d7a9}, {0x1d7c3, 0x1d7c3} };
+static xmlChRangeGroup xmlSG = {133,20,xmlSS,xmlSL};
+
+static xmlChSRange xmlScS[] = {{0x24, 0x24}, {0xa2, 0xa5}, {0x9f2, 0x9f3},
+ {0xaf1, 0xaf1}, {0xbf9, 0xbf9}, {0xe3f, 0xe3f}, {0x17db, 0x17db},
+ {0x20a0, 0x20b1}, {0xfdfc, 0xfdfc}, {0xfe69, 0xfe69}, {0xff04, 0xff04},
+ {0xffe0, 0xffe1}, {0xffe5, 0xffe6} };
+static xmlChRangeGroup xmlScG = {13,0,xmlScS,NULL};
+
+static xmlChSRange xmlSkS[] = {{0x5e, 0x5e}, {0x60, 0x60}, {0xa8, 0xa8},
+ {0xaf, 0xaf}, {0xb4, 0xb4}, {0xb8, 0xb8}, {0x2c2, 0x2c5},
+ {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375},
+ {0x384, 0x385}, {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf},
+ {0x1fdd, 0x1fdf}, {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x309b, 0x309c},
+ {0xff3e, 0xff3e}, {0xff40, 0xff40}, {0xffe3, 0xffe3} };
+static xmlChRangeGroup xmlSkG = {22,0,xmlSkS,NULL};
+
+static xmlChSRange xmlSmS[] = {{0x2b, 0x2b}, {0x3c, 0x3e}, {0x7c, 0x7c},
+ {0x7e, 0x7e}, {0xac, 0xac}, {0xb1, 0xb1}, {0xd7, 0xd7}, {0xf7, 0xf7},
+ {0x3f6, 0x3f6}, {0x2044, 0x2044}, {0x2052, 0x2052}, {0x207a, 0x207c},
+ {0x208a, 0x208c}, {0x2140, 0x2144}, {0x214b, 0x214b}, {0x2190, 0x2194},
+ {0x219a, 0x219b}, {0x21a0, 0x21a0}, {0x21a3, 0x21a3}, {0x21a6, 0x21a6},
+ {0x21ae, 0x21ae}, {0x21ce, 0x21cf}, {0x21d2, 0x21d2}, {0x21d4, 0x21d4},
+ {0x21f4, 0x22ff}, {0x2308, 0x230b}, {0x2320, 0x2321}, {0x237c, 0x237c},
+ {0x239b, 0x23b3}, {0x25b7, 0x25b7}, {0x25c1, 0x25c1}, {0x25f8, 0x25ff},
+ {0x266f, 0x266f}, {0x27d0, 0x27e5}, {0x27f0, 0x27ff}, {0x2900, 0x2982},
+ {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2aff}, {0xfb29, 0xfb29},
+ {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xff0b, 0xff0b}, {0xff1c, 0xff1e},
+ {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe2, 0xffe2}, {0xffe9, 0xffec} };
+static xmlChLRange xmlSmL[] = {{0x1d6c1, 0x1d6c1}, {0x1d6db, 0x1d6db},
+ {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715}, {0x1d735, 0x1d735},
+ {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f}, {0x1d789, 0x1d789},
+ {0x1d7a9, 0x1d7a9}, {0x1d7c3, 0x1d7c3} };
+static xmlChRangeGroup xmlSmG = {48,10,xmlSmS,xmlSmL};
+
+static xmlChSRange xmlSoS[] = {{0xa6, 0xa7}, {0xa9, 0xa9}, {0xae, 0xae},
+ {0xb0, 0xb0}, {0xb6, 0xb6}, {0x482, 0x482}, {0x60e, 0x60f},
+ {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9fa, 0x9fa}, {0xb70, 0xb70},
+ {0xbf3, 0xbf8}, {0xbfa, 0xbfa}, {0xf01, 0xf03}, {0xf13, 0xf17},
+ {0xf1a, 0xf1f}, {0xf34, 0xf34}, {0xf36, 0xf36}, {0xf38, 0xf38},
+ {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, {0xfcf, 0xfcf}, {0x1940, 0x1940},
+ {0x19e0, 0x19ff}, {0x2100, 0x2101}, {0x2103, 0x2106}, {0x2108, 0x2109},
+ {0x2114, 0x2114}, {0x2116, 0x2118}, {0x211e, 0x2123}, {0x2125, 0x2125},
+ {0x2127, 0x2127}, {0x2129, 0x2129}, {0x212e, 0x212e}, {0x2132, 0x2132},
+ {0x213a, 0x213b}, {0x214a, 0x214a}, {0x2195, 0x2199}, {0x219c, 0x219f},
+ {0x21a1, 0x21a2}, {0x21a4, 0x21a5}, {0x21a7, 0x21ad}, {0x21af, 0x21cd},
+ {0x21d0, 0x21d1}, {0x21d3, 0x21d3}, {0x21d5, 0x21f3}, {0x2300, 0x2307},
+ {0x230c, 0x231f}, {0x2322, 0x2328}, {0x232b, 0x237b}, {0x237d, 0x239a},
+ {0x23b7, 0x23d0}, {0x2400, 0x2426}, {0x2440, 0x244a}, {0x249c, 0x24e9},
+ {0x2500, 0x25b6}, {0x25b8, 0x25c0}, {0x25c2, 0x25f7}, {0x2600, 0x2617},
+ {0x2619, 0x266e}, {0x2670, 0x267d}, {0x2680, 0x2691}, {0x26a0, 0x26a1},
+ {0x2701, 0x2704}, {0x2706, 0x2709}, {0x270c, 0x2727}, {0x2729, 0x274b},
+ {0x274d, 0x274d}, {0x274f, 0x2752}, {0x2756, 0x2756}, {0x2758, 0x275e},
+ {0x2761, 0x2767}, {0x2794, 0x2794}, {0x2798, 0x27af}, {0x27b1, 0x27be},
+ {0x2800, 0x28ff}, {0x2b00, 0x2b0d}, {0x2e80, 0x2e99}, {0x2e9b, 0x2ef3},
+ {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, {0x3004, 0x3004}, {0x3012, 0x3013},
+ {0x3020, 0x3020}, {0x3036, 0x3037}, {0x303e, 0x303f}, {0x3190, 0x3191},
+ {0x3196, 0x319f}, {0x3200, 0x321e}, {0x322a, 0x3243}, {0x3250, 0x3250},
+ {0x3260, 0x327d}, {0x327f, 0x327f}, {0x328a, 0x32b0}, {0x32c0, 0x32fe},
+ {0x3300, 0x33ff}, {0x4dc0, 0x4dff}, {0xa490, 0xa4c6}, {0xfdfd, 0xfdfd},
+ {0xffe4, 0xffe4}, {0xffe8, 0xffe8}, {0xffed, 0xffee}, {0xfffc, 0xfffd} };
+static xmlChLRange xmlSoL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f},
+ {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164},
+ {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9},
+ {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356} };
+static xmlChRangeGroup xmlSoG = {103,10,xmlSoS,xmlSoL};
+
+static xmlChSRange xmlZS[] = {{0x20, 0x20}, {0xa0, 0xa0}, {0x1680, 0x1680},
+ {0x180e, 0x180e}, {0x2000, 0x200b}, {0x2028, 0x2029}, {0x202f, 0x202f},
+ {0x205f, 0x205f}, {0x3000, 0x3000} };
+static xmlChRangeGroup xmlZG = {9,0,xmlZS,NULL};
+
+xmlUnicodeNameTable xmlUnicodeBlockTbl = {xmlUnicodeBlocks, 128};
+xmlUnicodeNameTable xmlUnicodeCatTbl = {xmlUnicodeCats, 36};
+
+/**
+ * xmlUnicodeLookup:
+ * @tptr: pointer to the name table
+ * @name: name to be found
+ *
+ * binary table lookup for user-supplied name
+ *
+ * Returns pointer to range function if found, otherwise NULL
+ */
+static xmlIntFunc
+*xmlUnicodeLookup(xmlUnicodeNameTable *tptr, const char *tname) {
+ int low, high, mid, cmp;
+ xmlUnicodeRange *sptr;
+
+ low = 0;
+ high = tptr->numentries - 1;
+ sptr = tptr->table;
+ while (low <= high) {
+ mid = (low + high) / 2;
+ if ((cmp=strcmp(tname, sptr[mid].rangename)) == 0)
+ return (sptr[mid].func);
+ if (cmp < 0)
+ high = mid - 1;
+ else
+ low = mid + 1;
+ }
+ return (NULL);
+}
+
+/**
+ * xmlUCSIsAegeanNumbers:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of AegeanNumbers UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsAegeanNumbers(int code) {
+ return(((code >= 0x10100) && (code <= 0x1013F)));
+}
+
+/**
+ * xmlUCSIsAlphabeticPresentationForms:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of AlphabeticPresentationForms UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsAlphabeticPresentationForms(int code) {
+ return(((code >= 0xFB00) && (code <= 0xFB4F)));
+}
+
+/**
+ * xmlUCSIsArabic:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Arabic UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsArabic(int code) {
+ return(((code >= 0x0600) && (code <= 0x06FF)));
+}
+
+/**
+ * xmlUCSIsArabicPresentationFormsA:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of ArabicPresentationForms-A UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsArabicPresentationFormsA(int code) {
+ return(((code >= 0xFB50) && (code <= 0xFDFF)));
+}
+
+/**
+ * xmlUCSIsArabicPresentationFormsB:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of ArabicPresentationForms-B UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsArabicPresentationFormsB(int code) {
+ return(((code >= 0xFE70) && (code <= 0xFEFF)));
+}
+
+/**
+ * xmlUCSIsArmenian:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Armenian UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsArmenian(int code) {
+ return(((code >= 0x0530) && (code <= 0x058F)));
+}
+
+/**
+ * xmlUCSIsArrows:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Arrows UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsArrows(int code) {
+ return(((code >= 0x2190) && (code <= 0x21FF)));
+}
+
+/**
+ * xmlUCSIsBasicLatin:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of BasicLatin UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsBasicLatin(int code) {
+ return(((code >= 0x0000) && (code <= 0x007F)));
+}
+
+/**
+ * xmlUCSIsBengali:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Bengali UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsBengali(int code) {
+ return(((code >= 0x0980) && (code <= 0x09FF)));
+}
+
+/**
+ * xmlUCSIsBlockElements:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of BlockElements UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsBlockElements(int code) {
+ return(((code >= 0x2580) && (code <= 0x259F)));
+}
+
+/**
+ * xmlUCSIsBopomofo:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Bopomofo UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsBopomofo(int code) {
+ return(((code >= 0x3100) && (code <= 0x312F)));
+}
+
+/**
+ * xmlUCSIsBopomofoExtended:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of BopomofoExtended UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsBopomofoExtended(int code) {
+ return(((code >= 0x31A0) && (code <= 0x31BF)));
+}
+
+/**
+ * xmlUCSIsBoxDrawing:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of BoxDrawing UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsBoxDrawing(int code) {
+ return(((code >= 0x2500) && (code <= 0x257F)));
+}
+
+/**
+ * xmlUCSIsBraillePatterns:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of BraillePatterns UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsBraillePatterns(int code) {
+ return(((code >= 0x2800) && (code <= 0x28FF)));
+}
+
+/**
+ * xmlUCSIsBuhid:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Buhid UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsBuhid(int code) {
+ return(((code >= 0x1740) && (code <= 0x175F)));
+}
+
+/**
+ * xmlUCSIsByzantineMusicalSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of ByzantineMusicalSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsByzantineMusicalSymbols(int code) {
+ return(((code >= 0x1D000) && (code <= 0x1D0FF)));
+}
+
+/**
+ * xmlUCSIsCJKCompatibility:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CJKCompatibility UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCJKCompatibility(int code) {
+ return(((code >= 0x3300) && (code <= 0x33FF)));
+}
+
+/**
+ * xmlUCSIsCJKCompatibilityForms:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CJKCompatibilityForms UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCJKCompatibilityForms(int code) {
+ return(((code >= 0xFE30) && (code <= 0xFE4F)));
+}
+
+/**
+ * xmlUCSIsCJKCompatibilityIdeographs:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CJKCompatibilityIdeographs UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCJKCompatibilityIdeographs(int code) {
+ return(((code >= 0xF900) && (code <= 0xFAFF)));
+}
+
+/**
+ * xmlUCSIsCJKCompatibilityIdeographsSupplement:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CJKCompatibilityIdeographsSupplement UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCJKCompatibilityIdeographsSupplement(int code) {
+ return(((code >= 0x2F800) && (code <= 0x2FA1F)));
+}
+
+/**
+ * xmlUCSIsCJKRadicalsSupplement:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CJKRadicalsSupplement UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCJKRadicalsSupplement(int code) {
+ return(((code >= 0x2E80) && (code <= 0x2EFF)));
+}
+
+/**
+ * xmlUCSIsCJKSymbolsandPunctuation:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CJKSymbolsandPunctuation UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCJKSymbolsandPunctuation(int code) {
+ return(((code >= 0x3000) && (code <= 0x303F)));
+}
+
+/**
+ * xmlUCSIsCJKUnifiedIdeographs:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CJKUnifiedIdeographs UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCJKUnifiedIdeographs(int code) {
+ return(((code >= 0x4E00) && (code <= 0x9FFF)));
+}
+
+/**
+ * xmlUCSIsCJKUnifiedIdeographsExtensionA:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CJKUnifiedIdeographsExtensionA UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCJKUnifiedIdeographsExtensionA(int code) {
+ return(((code >= 0x3400) && (code <= 0x4DBF)));
+}
+
+/**
+ * xmlUCSIsCJKUnifiedIdeographsExtensionB:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CJKUnifiedIdeographsExtensionB UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCJKUnifiedIdeographsExtensionB(int code) {
+ return(((code >= 0x20000) && (code <= 0x2A6DF)));
+}
+
+/**
+ * xmlUCSIsCherokee:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Cherokee UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCherokee(int code) {
+ return(((code >= 0x13A0) && (code <= 0x13FF)));
+}
+
+/**
+ * xmlUCSIsCombiningDiacriticalMarks:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CombiningDiacriticalMarks UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCombiningDiacriticalMarks(int code) {
+ return(((code >= 0x0300) && (code <= 0x036F)));
+}
+
+/**
+ * xmlUCSIsCombiningDiacriticalMarksforSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CombiningDiacriticalMarksforSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCombiningDiacriticalMarksforSymbols(int code) {
+ return(((code >= 0x20D0) && (code <= 0x20FF)));
+}
+
+/**
+ * xmlUCSIsCombiningHalfMarks:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CombiningHalfMarks UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCombiningHalfMarks(int code) {
+ return(((code >= 0xFE20) && (code <= 0xFE2F)));
+}
+
+/**
+ * xmlUCSIsCombiningMarksforSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CombiningMarksforSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCombiningMarksforSymbols(int code) {
+ return(((code >= 0x20D0) && (code <= 0x20FF)));
+}
+
+/**
+ * xmlUCSIsControlPictures:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of ControlPictures UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsControlPictures(int code) {
+ return(((code >= 0x2400) && (code <= 0x243F)));
+}
+
+/**
+ * xmlUCSIsCurrencySymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CurrencySymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCurrencySymbols(int code) {
+ return(((code >= 0x20A0) && (code <= 0x20CF)));
+}
+
+/**
+ * xmlUCSIsCypriotSyllabary:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CypriotSyllabary UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCypriotSyllabary(int code) {
+ return(((code >= 0x10800) && (code <= 0x1083F)));
+}
+
+/**
+ * xmlUCSIsCyrillic:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Cyrillic UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCyrillic(int code) {
+ return(((code >= 0x0400) && (code <= 0x04FF)));
+}
+
+/**
+ * xmlUCSIsCyrillicSupplement:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of CyrillicSupplement UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCyrillicSupplement(int code) {
+ return(((code >= 0x0500) && (code <= 0x052F)));
+}
+
+/**
+ * xmlUCSIsDeseret:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Deseret UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsDeseret(int code) {
+ return(((code >= 0x10400) && (code <= 0x1044F)));
+}
+
+/**
+ * xmlUCSIsDevanagari:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Devanagari UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsDevanagari(int code) {
+ return(((code >= 0x0900) && (code <= 0x097F)));
+}
+
+/**
+ * xmlUCSIsDingbats:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Dingbats UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsDingbats(int code) {
+ return(((code >= 0x2700) && (code <= 0x27BF)));
+}
+
+/**
+ * xmlUCSIsEnclosedAlphanumerics:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of EnclosedAlphanumerics UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsEnclosedAlphanumerics(int code) {
+ return(((code >= 0x2460) && (code <= 0x24FF)));
+}
+
+/**
+ * xmlUCSIsEnclosedCJKLettersandMonths:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of EnclosedCJKLettersandMonths UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsEnclosedCJKLettersandMonths(int code) {
+ return(((code >= 0x3200) && (code <= 0x32FF)));
+}
+
+/**
+ * xmlUCSIsEthiopic:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Ethiopic UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsEthiopic(int code) {
+ return(((code >= 0x1200) && (code <= 0x137F)));
+}
+
+/**
+ * xmlUCSIsGeneralPunctuation:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of GeneralPunctuation UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsGeneralPunctuation(int code) {
+ return(((code >= 0x2000) && (code <= 0x206F)));
+}
+
+/**
+ * xmlUCSIsGeometricShapes:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of GeometricShapes UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsGeometricShapes(int code) {
+ return(((code >= 0x25A0) && (code <= 0x25FF)));
+}
+
+/**
+ * xmlUCSIsGeorgian:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Georgian UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsGeorgian(int code) {
+ return(((code >= 0x10A0) && (code <= 0x10FF)));
+}
+
+/**
+ * xmlUCSIsGothic:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Gothic UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsGothic(int code) {
+ return(((code >= 0x10330) && (code <= 0x1034F)));
+}
+
+/**
+ * xmlUCSIsGreek:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Greek UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsGreek(int code) {
+ return(((code >= 0x0370) && (code <= 0x03FF)));
+}
+
+/**
+ * xmlUCSIsGreekExtended:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of GreekExtended UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsGreekExtended(int code) {
+ return(((code >= 0x1F00) && (code <= 0x1FFF)));
+}
+
+/**
+ * xmlUCSIsGreekandCoptic:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of GreekandCoptic UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsGreekandCoptic(int code) {
+ return(((code >= 0x0370) && (code <= 0x03FF)));
+}
+
+/**
+ * xmlUCSIsGujarati:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Gujarati UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsGujarati(int code) {
+ return(((code >= 0x0A80) && (code <= 0x0AFF)));
+}
+
+/**
+ * xmlUCSIsGurmukhi:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Gurmukhi UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsGurmukhi(int code) {
+ return(((code >= 0x0A00) && (code <= 0x0A7F)));
+}
+
+/**
+ * xmlUCSIsHalfwidthandFullwidthForms:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of HalfwidthandFullwidthForms UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsHalfwidthandFullwidthForms(int code) {
+ return(((code >= 0xFF00) && (code <= 0xFFEF)));
+}
+
+/**
+ * xmlUCSIsHangulCompatibilityJamo:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of HangulCompatibilityJamo UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsHangulCompatibilityJamo(int code) {
+ return(((code >= 0x3130) && (code <= 0x318F)));
+}
+
+/**
+ * xmlUCSIsHangulJamo:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of HangulJamo UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsHangulJamo(int code) {
+ return(((code >= 0x1100) && (code <= 0x11FF)));
+}
+
+/**
+ * xmlUCSIsHangulSyllables:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of HangulSyllables UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsHangulSyllables(int code) {
+ return(((code >= 0xAC00) && (code <= 0xD7AF)));
+}
+
+/**
+ * xmlUCSIsHanunoo:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Hanunoo UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsHanunoo(int code) {
+ return(((code >= 0x1720) && (code <= 0x173F)));
+}
+
+/**
+ * xmlUCSIsHebrew:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Hebrew UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsHebrew(int code) {
+ return(((code >= 0x0590) && (code <= 0x05FF)));
+}
+
+/**
+ * xmlUCSIsHighPrivateUseSurrogates:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of HighPrivateUseSurrogates UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsHighPrivateUseSurrogates(int code) {
+ return(((code >= 0xDB80) && (code <= 0xDBFF)));
+}
+
+/**
+ * xmlUCSIsHighSurrogates:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of HighSurrogates UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsHighSurrogates(int code) {
+ return(((code >= 0xD800) && (code <= 0xDB7F)));
+}
+
+/**
+ * xmlUCSIsHiragana:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Hiragana UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsHiragana(int code) {
+ return(((code >= 0x3040) && (code <= 0x309F)));
+}
+
+/**
+ * xmlUCSIsIPAExtensions:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of IPAExtensions UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsIPAExtensions(int code) {
+ return(((code >= 0x0250) && (code <= 0x02AF)));
+}
+
+/**
+ * xmlUCSIsIdeographicDescriptionCharacters:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of IdeographicDescriptionCharacters UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsIdeographicDescriptionCharacters(int code) {
+ return(((code >= 0x2FF0) && (code <= 0x2FFF)));
+}
+
+/**
+ * xmlUCSIsKanbun:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Kanbun UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsKanbun(int code) {
+ return(((code >= 0x3190) && (code <= 0x319F)));
+}
+
+/**
+ * xmlUCSIsKangxiRadicals:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of KangxiRadicals UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsKangxiRadicals(int code) {
+ return(((code >= 0x2F00) && (code <= 0x2FDF)));
+}
+
+/**
+ * xmlUCSIsKannada:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Kannada UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsKannada(int code) {
+ return(((code >= 0x0C80) && (code <= 0x0CFF)));
+}
+
+/**
+ * xmlUCSIsKatakana:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Katakana UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsKatakana(int code) {
+ return(((code >= 0x30A0) && (code <= 0x30FF)));
+}
+
+/**
+ * xmlUCSIsKatakanaPhoneticExtensions:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of KatakanaPhoneticExtensions UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsKatakanaPhoneticExtensions(int code) {
+ return(((code >= 0x31F0) && (code <= 0x31FF)));
+}
+
+/**
+ * xmlUCSIsKhmer:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Khmer UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsKhmer(int code) {
+ return(((code >= 0x1780) && (code <= 0x17FF)));
+}
+
+/**
+ * xmlUCSIsKhmerSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of KhmerSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsKhmerSymbols(int code) {
+ return(((code >= 0x19E0) && (code <= 0x19FF)));
+}
+
+/**
+ * xmlUCSIsLao:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Lao UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLao(int code) {
+ return(((code >= 0x0E80) && (code <= 0x0EFF)));
+}
+
+/**
+ * xmlUCSIsLatin1Supplement:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Latin-1Supplement UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLatin1Supplement(int code) {
+ return(((code >= 0x0080) && (code <= 0x00FF)));
+}
+
+/**
+ * xmlUCSIsLatinExtendedA:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of LatinExtended-A UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLatinExtendedA(int code) {
+ return(((code >= 0x0100) && (code <= 0x017F)));
+}
+
+/**
+ * xmlUCSIsLatinExtendedB:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of LatinExtended-B UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLatinExtendedB(int code) {
+ return(((code >= 0x0180) && (code <= 0x024F)));
+}
+
+/**
+ * xmlUCSIsLatinExtendedAdditional:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of LatinExtendedAdditional UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLatinExtendedAdditional(int code) {
+ return(((code >= 0x1E00) && (code <= 0x1EFF)));
+}
+
+/**
+ * xmlUCSIsLetterlikeSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of LetterlikeSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLetterlikeSymbols(int code) {
+ return(((code >= 0x2100) && (code <= 0x214F)));
+}
+
+/**
+ * xmlUCSIsLimbu:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Limbu UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLimbu(int code) {
+ return(((code >= 0x1900) && (code <= 0x194F)));
+}
+
+/**
+ * xmlUCSIsLinearBIdeograms:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of LinearBIdeograms UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLinearBIdeograms(int code) {
+ return(((code >= 0x10080) && (code <= 0x100FF)));
+}
+
+/**
+ * xmlUCSIsLinearBSyllabary:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of LinearBSyllabary UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLinearBSyllabary(int code) {
+ return(((code >= 0x10000) && (code <= 0x1007F)));
+}
+
+/**
+ * xmlUCSIsLowSurrogates:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of LowSurrogates UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsLowSurrogates(int code) {
+ return(((code >= 0xDC00) && (code <= 0xDFFF)));
+}
+
+/**
+ * xmlUCSIsMalayalam:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Malayalam UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMalayalam(int code) {
+ return(((code >= 0x0D00) && (code <= 0x0D7F)));
+}
+
+/**
+ * xmlUCSIsMathematicalAlphanumericSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of MathematicalAlphanumericSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMathematicalAlphanumericSymbols(int code) {
+ return(((code >= 0x1D400) && (code <= 0x1D7FF)));
+}
+
+/**
+ * xmlUCSIsMathematicalOperators:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of MathematicalOperators UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMathematicalOperators(int code) {
+ return(((code >= 0x2200) && (code <= 0x22FF)));
+}
+
+/**
+ * xmlUCSIsMiscellaneousMathematicalSymbolsA:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of MiscellaneousMathematicalSymbols-A UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMiscellaneousMathematicalSymbolsA(int code) {
+ return(((code >= 0x27C0) && (code <= 0x27EF)));
+}
+
+/**
+ * xmlUCSIsMiscellaneousMathematicalSymbolsB:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of MiscellaneousMathematicalSymbols-B UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMiscellaneousMathematicalSymbolsB(int code) {
+ return(((code >= 0x2980) && (code <= 0x29FF)));
+}
+
+/**
+ * xmlUCSIsMiscellaneousSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of MiscellaneousSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMiscellaneousSymbols(int code) {
+ return(((code >= 0x2600) && (code <= 0x26FF)));
+}
+
+/**
+ * xmlUCSIsMiscellaneousSymbolsandArrows:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of MiscellaneousSymbolsandArrows UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMiscellaneousSymbolsandArrows(int code) {
+ return(((code >= 0x2B00) && (code <= 0x2BFF)));
+}
+
+/**
+ * xmlUCSIsMiscellaneousTechnical:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of MiscellaneousTechnical UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMiscellaneousTechnical(int code) {
+ return(((code >= 0x2300) && (code <= 0x23FF)));
+}
+
+/**
+ * xmlUCSIsMongolian:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Mongolian UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMongolian(int code) {
+ return(((code >= 0x1800) && (code <= 0x18AF)));
+}
+
+/**
+ * xmlUCSIsMusicalSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of MusicalSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMusicalSymbols(int code) {
+ return(((code >= 0x1D100) && (code <= 0x1D1FF)));
+}
+
+/**
+ * xmlUCSIsMyanmar:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Myanmar UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsMyanmar(int code) {
+ return(((code >= 0x1000) && (code <= 0x109F)));
+}
+
+/**
+ * xmlUCSIsNumberForms:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of NumberForms UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsNumberForms(int code) {
+ return(((code >= 0x2150) && (code <= 0x218F)));
+}
+
+/**
+ * xmlUCSIsOgham:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Ogham UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsOgham(int code) {
+ return(((code >= 0x1680) && (code <= 0x169F)));
+}
+
+/**
+ * xmlUCSIsOldItalic:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of OldItalic UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsOldItalic(int code) {
+ return(((code >= 0x10300) && (code <= 0x1032F)));
+}
+
+/**
+ * xmlUCSIsOpticalCharacterRecognition:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of OpticalCharacterRecognition UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsOpticalCharacterRecognition(int code) {
+ return(((code >= 0x2440) && (code <= 0x245F)));
+}
+
+/**
+ * xmlUCSIsOriya:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Oriya UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsOriya(int code) {
+ return(((code >= 0x0B00) && (code <= 0x0B7F)));
+}
+
+/**
+ * xmlUCSIsOsmanya:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Osmanya UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsOsmanya(int code) {
+ return(((code >= 0x10480) && (code <= 0x104AF)));
+}
+
+/**
+ * xmlUCSIsPhoneticExtensions:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of PhoneticExtensions UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsPhoneticExtensions(int code) {
+ return(((code >= 0x1D00) && (code <= 0x1D7F)));
+}
+
+/**
+ * xmlUCSIsPrivateUse:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of PrivateUse UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsPrivateUse(int code) {
+ return(((code >= 0xE000) && (code <= 0xF8FF)) ||
+ ((code >= 0xF0000) && (code <= 0xFFFFF)) ||
+ ((code >= 0x100000) && (code <= 0x10FFFF)));
+}
+
+/**
+ * xmlUCSIsPrivateUseArea:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of PrivateUseArea UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsPrivateUseArea(int code) {
+ return(((code >= 0xE000) && (code <= 0xF8FF)));
+}
+
+/**
+ * xmlUCSIsRunic:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Runic UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsRunic(int code) {
+ return(((code >= 0x16A0) && (code <= 0x16FF)));
+}
+
+/**
+ * xmlUCSIsShavian:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Shavian UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsShavian(int code) {
+ return(((code >= 0x10450) && (code <= 0x1047F)));
+}
+
+/**
+ * xmlUCSIsSinhala:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Sinhala UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSinhala(int code) {
+ return(((code >= 0x0D80) && (code <= 0x0DFF)));
+}
+
+/**
+ * xmlUCSIsSmallFormVariants:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of SmallFormVariants UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSmallFormVariants(int code) {
+ return(((code >= 0xFE50) && (code <= 0xFE6F)));
+}
+
+/**
+ * xmlUCSIsSpacingModifierLetters:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of SpacingModifierLetters UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSpacingModifierLetters(int code) {
+ return(((code >= 0x02B0) && (code <= 0x02FF)));
+}
+
+/**
+ * xmlUCSIsSpecials:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Specials UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSpecials(int code) {
+ return(((code >= 0xFFF0) && (code <= 0xFFFF)));
+}
+
+/**
+ * xmlUCSIsSuperscriptsandSubscripts:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of SuperscriptsandSubscripts UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSuperscriptsandSubscripts(int code) {
+ return(((code >= 0x2070) && (code <= 0x209F)));
+}
+
+/**
+ * xmlUCSIsSupplementalArrowsA:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of SupplementalArrows-A UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSupplementalArrowsA(int code) {
+ return(((code >= 0x27F0) && (code <= 0x27FF)));
+}
+
+/**
+ * xmlUCSIsSupplementalArrowsB:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of SupplementalArrows-B UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSupplementalArrowsB(int code) {
+ return(((code >= 0x2900) && (code <= 0x297F)));
+}
+
+/**
+ * xmlUCSIsSupplementalMathematicalOperators:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of SupplementalMathematicalOperators UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSupplementalMathematicalOperators(int code) {
+ return(((code >= 0x2A00) && (code <= 0x2AFF)));
+}
+
+/**
+ * xmlUCSIsSupplementaryPrivateUseAreaA:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of SupplementaryPrivateUseArea-A UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSupplementaryPrivateUseAreaA(int code) {
+ return(((code >= 0xF0000) && (code <= 0xFFFFF)));
+}
+
+/**
+ * xmlUCSIsSupplementaryPrivateUseAreaB:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of SupplementaryPrivateUseArea-B UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSupplementaryPrivateUseAreaB(int code) {
+ return(((code >= 0x100000) && (code <= 0x10FFFF)));
+}
+
+/**
+ * xmlUCSIsSyriac:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Syriac UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsSyriac(int code) {
+ return(((code >= 0x0700) && (code <= 0x074F)));
+}
+
+/**
+ * xmlUCSIsTagalog:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Tagalog UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsTagalog(int code) {
+ return(((code >= 0x1700) && (code <= 0x171F)));
+}
+
+/**
+ * xmlUCSIsTagbanwa:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Tagbanwa UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsTagbanwa(int code) {
+ return(((code >= 0x1760) && (code <= 0x177F)));
+}
+
+/**
+ * xmlUCSIsTags:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Tags UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsTags(int code) {
+ return(((code >= 0xE0000) && (code <= 0xE007F)));
+}
+
+/**
+ * xmlUCSIsTaiLe:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of TaiLe UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsTaiLe(int code) {
+ return(((code >= 0x1950) && (code <= 0x197F)));
+}
+
+/**
+ * xmlUCSIsTaiXuanJingSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of TaiXuanJingSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsTaiXuanJingSymbols(int code) {
+ return(((code >= 0x1D300) && (code <= 0x1D35F)));
+}
+
+/**
+ * xmlUCSIsTamil:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Tamil UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsTamil(int code) {
+ return(((code >= 0x0B80) && (code <= 0x0BFF)));
+}
+
+/**
+ * xmlUCSIsTelugu:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Telugu UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsTelugu(int code) {
+ return(((code >= 0x0C00) && (code <= 0x0C7F)));
+}
+
+/**
+ * xmlUCSIsThaana:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Thaana UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsThaana(int code) {
+ return(((code >= 0x0780) && (code <= 0x07BF)));
+}
+
+/**
+ * xmlUCSIsThai:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Thai UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsThai(int code) {
+ return(((code >= 0x0E00) && (code <= 0x0E7F)));
+}
+
+/**
+ * xmlUCSIsTibetan:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Tibetan UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsTibetan(int code) {
+ return(((code >= 0x0F00) && (code <= 0x0FFF)));
+}
+
+/**
+ * xmlUCSIsUgaritic:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Ugaritic UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsUgaritic(int code) {
+ return(((code >= 0x10380) && (code <= 0x1039F)));
+}
+
+/**
+ * xmlUCSIsUnifiedCanadianAboriginalSyllabics:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of UnifiedCanadianAboriginalSyllabics UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsUnifiedCanadianAboriginalSyllabics(int code) {
+ return(((code >= 0x1400) && (code <= 0x167F)));
+}
+
+/**
+ * xmlUCSIsVariationSelectors:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of VariationSelectors UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsVariationSelectors(int code) {
+ return(((code >= 0xFE00) && (code <= 0xFE0F)));
+}
+
+/**
+ * xmlUCSIsVariationSelectorsSupplement:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of VariationSelectorsSupplement UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsVariationSelectorsSupplement(int code) {
+ return(((code >= 0xE0100) && (code <= 0xE01EF)));
+}
+
+/**
+ * xmlUCSIsYiRadicals:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of YiRadicals UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsYiRadicals(int code) {
+ return(((code >= 0xA490) && (code <= 0xA4CF)));
+}
+
+/**
+ * xmlUCSIsYiSyllables:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of YiSyllables UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsYiSyllables(int code) {
+ return(((code >= 0xA000) && (code <= 0xA48F)));
+}
+
+/**
+ * xmlUCSIsYijingHexagramSymbols:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of YijingHexagramSymbols UCS Block
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsYijingHexagramSymbols(int code) {
+ return(((code >= 0x4DC0) && (code <= 0x4DFF)));
+}
+
+/**
+ * xmlUCSIsBlock:
+ * @code: UCS code point
+ * @block: UCS block name
+ *
+ * Check whether the character is part of the UCS Block
+ *
+ * Returns 1 if true, 0 if false and -1 on unknown block
+ */
+int
+xmlUCSIsBlock(int code, const char *block) {
+ xmlIntFunc *func;
+
+ func = xmlUnicodeLookup(&xmlUnicodeBlockTbl, block);
+ if (func == NULL)
+ return (-1);
+ return (func(code));
+}
+
+/**
+ * xmlUCSIsCatC:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of C UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatC(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlCG));
+}
+
+/**
+ * xmlUCSIsCatCc:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Cc UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatCc(int code) {
+ return(((code >= 0x0) && (code <= 0x1f)) ||
+ ((code >= 0x7f) && (code <= 0x9f)));
+}
+
+/**
+ * xmlUCSIsCatCf:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Cf UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatCf(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlCfG));
+}
+
+/**
+ * xmlUCSIsCatCo:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Co UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatCo(int code) {
+ return((code == 0xe000) ||
+ (code == 0xf8ff) ||
+ (code == 0xf0000) ||
+ (code == 0xffffd) ||
+ (code == 0x100000) ||
+ (code == 0x10fffd));
+}
+
+/**
+ * xmlUCSIsCatCs:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Cs UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatCs(int code) {
+ return((code == 0xd800) ||
+ ((code >= 0xdb7f) && (code <= 0xdb80)) ||
+ ((code >= 0xdbff) && (code <= 0xdc00)) ||
+ (code == 0xdfff));
+}
+
+/**
+ * xmlUCSIsCatL:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of L UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatL(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlLG));
+}
+
+/**
+ * xmlUCSIsCatLl:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Ll UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatLl(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlLlG));
+}
+
+/**
+ * xmlUCSIsCatLm:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Lm UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatLm(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlLmG));
+}
+
+/**
+ * xmlUCSIsCatLo:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Lo UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatLo(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlLoG));
+}
+
+/**
+ * xmlUCSIsCatLt:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Lt UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatLt(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlLtG));
+}
+
+/**
+ * xmlUCSIsCatLu:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Lu UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatLu(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlLuG));
+}
+
+/**
+ * xmlUCSIsCatM:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of M UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatM(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlMG));
+}
+
+/**
+ * xmlUCSIsCatMc:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Mc UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatMc(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlMcG));
+}
+
+/**
+ * xmlUCSIsCatMe:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Me UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatMe(int code) {
+ return(((code >= 0x488) && (code <= 0x489)) ||
+ (code == 0x6de) ||
+ ((code >= 0x20dd) && (code <= 0x20e0)) ||
+ ((code >= 0x20e2) && (code <= 0x20e4)));
+}
+
+/**
+ * xmlUCSIsCatMn:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Mn UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatMn(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlMnG));
+}
+
+/**
+ * xmlUCSIsCatN:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of N UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatN(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlNG));
+}
+
+/**
+ * xmlUCSIsCatNd:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Nd UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatNd(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlNdG));
+}
+
+/**
+ * xmlUCSIsCatNl:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Nl UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatNl(int code) {
+ return(((code >= 0x16ee) && (code <= 0x16f0)) ||
+ ((code >= 0x2160) && (code <= 0x2183)) ||
+ (code == 0x3007) ||
+ ((code >= 0x3021) && (code <= 0x3029)) ||
+ ((code >= 0x3038) && (code <= 0x303a)) ||
+ (code == 0x1034a));
+}
+
+/**
+ * xmlUCSIsCatNo:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of No UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatNo(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlNoG));
+}
+
+/**
+ * xmlUCSIsCatP:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of P UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatP(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlPG));
+}
+
+/**
+ * xmlUCSIsCatPc:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Pc UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatPc(int code) {
+ return((code == 0x5f) ||
+ ((code >= 0x203f) && (code <= 0x2040)) ||
+ (code == 0x2054) ||
+ (code == 0x30fb) ||
+ ((code >= 0xfe33) && (code <= 0xfe34)) ||
+ ((code >= 0xfe4d) && (code <= 0xfe4f)) ||
+ (code == 0xff3f) ||
+ (code == 0xff65));
+}
+
+/**
+ * xmlUCSIsCatPd:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Pd UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatPd(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlPdG));
+}
+
+/**
+ * xmlUCSIsCatPe:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Pe UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatPe(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlPeG));
+}
+
+/**
+ * xmlUCSIsCatPf:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Pf UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatPf(int code) {
+ return((code == 0xbb) ||
+ (code == 0x2019) ||
+ (code == 0x201d) ||
+ (code == 0x203a));
+}
+
+/**
+ * xmlUCSIsCatPi:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Pi UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatPi(int code) {
+ return((code == 0xab) ||
+ (code == 0x2018) ||
+ ((code >= 0x201b) && (code <= 0x201c)) ||
+ (code == 0x201f) ||
+ (code == 0x2039));
+}
+
+/**
+ * xmlUCSIsCatPo:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Po UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatPo(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlPoG));
+}
+
+/**
+ * xmlUCSIsCatPs:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Ps UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatPs(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlPsG));
+}
+
+/**
+ * xmlUCSIsCatS:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of S UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatS(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlSG));
+}
+
+/**
+ * xmlUCSIsCatSc:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Sc UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatSc(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlScG));
+}
+
+/**
+ * xmlUCSIsCatSk:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Sk UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatSk(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlSkG));
+}
+
+/**
+ * xmlUCSIsCatSm:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Sm UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatSm(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlSmG));
+}
+
+/**
+ * xmlUCSIsCatSo:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of So UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatSo(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlSoG));
+}
+
+/**
+ * xmlUCSIsCatZ:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Z UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatZ(int code) {
+ return(xmlCharInRange((unsigned int)code, &xmlZG));
+}
+
+/**
+ * xmlUCSIsCatZl:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Zl UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatZl(int code) {
+ return((code == 0x2028));
+}
+
+/**
+ * xmlUCSIsCatZp:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Zp UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatZp(int code) {
+ return((code == 0x2029));
+}
+
+/**
+ * xmlUCSIsCatZs:
+ * @code: UCS code point
+ *
+ * Check whether the character is part of Zs UCS Category
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlUCSIsCatZs(int code) {
+ return((code == 0x20) ||
+ (code == 0xa0) ||
+ (code == 0x1680) ||
+ (code == 0x180e) ||
+ ((code >= 0x2000) && (code <= 0x200b)) ||
+ (code == 0x202f) ||
+ (code == 0x205f) ||
+ (code == 0x3000));
+}
+
+/**
+ * xmlUCSIsCat:
+ * @code: UCS code point
+ * @cat: UCS Category name
+ *
+ * Check whether the character is part of the UCS Category
+ *
+ * Returns 1 if true, 0 if false and -1 on unknown category
+ */
+int
+xmlUCSIsCat(int code, const char *cat) {
+ xmlIntFunc *func;
+
+ func = xmlUnicodeLookup(&xmlUnicodeCatTbl, cat);
+ if (func == NULL)
+ return (-1);
+ return (func(code));
+}
+
+
+#endif /* LIBXML_UNICODE_ENABLED */
diff --git a/xmlwriter.c b/xmlwriter.c
new file mode 100644
index 0000000..e5c7e5f
--- /dev/null
+++ b/xmlwriter.c
@@ -0,0 +1,4504 @@
+
+/*
+ * xmlwriter.c: XML text writer implementation
+ *
+ * For license and disclaimer see the license and disclaimer of
+ * libxml2.
+ *
+ * alfred@mickautsch.de
+ */
+
+#define IN_LIBXML
+#include <string.h>
+
+#include "libxml.h"
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/uri.h>
+#include <libxml/HTMLtree.h>
+
+#ifdef LIBXML_WRITER_ENABLED
+
+#include <libxml/xmlwriter.h>
+
+#define B64LINELEN 72
+#define B64CRLF "\r\n"
+
+/*
+ * Types are kept private
+ */
+typedef enum {
+ XML_TEXTWRITER_NONE = 0,
+ XML_TEXTWRITER_NAME,
+ XML_TEXTWRITER_ATTRIBUTE,
+ XML_TEXTWRITER_TEXT,
+ XML_TEXTWRITER_PI,
+ XML_TEXTWRITER_PI_TEXT,
+ XML_TEXTWRITER_CDATA,
+ XML_TEXTWRITER_DTD,
+ XML_TEXTWRITER_DTD_TEXT,
+ XML_TEXTWRITER_DTD_ELEM,
+ XML_TEXTWRITER_DTD_ELEM_TEXT,
+ XML_TEXTWRITER_DTD_ATTL,
+ XML_TEXTWRITER_DTD_ATTL_TEXT,
+ XML_TEXTWRITER_DTD_ENTY, /* entity */
+ XML_TEXTWRITER_DTD_ENTY_TEXT,
+ XML_TEXTWRITER_DTD_PENT, /* parameter entity */
+ XML_TEXTWRITER_COMMENT,
+} xmlTextWriterState;
+
+typedef struct _xmlTextWriterStackEntry xmlTextWriterStackEntry;
+
+struct _xmlTextWriterStackEntry {
+ xmlChar *name;
+ xmlTextWriterState state;
+};
+
+typedef struct _xmlTextWriterNsStackEntry xmlTextWriterNsStackEntry;
+struct _xmlTextWriterNsStackEntry {
+ xmlChar *prefix;
+ xmlChar *uri;
+ xmlLinkPtr elem;
+};
+
+struct _xmlTextWriter {
+ xmlOutputBufferPtr out; /* output buffer */
+ xmlListPtr nodes; /* element name stack */
+ xmlListPtr nsstack; /* name spaces stack */
+ int level;
+ int indent; /* enable indent */
+ int doindent; /* internal indent flag */
+ xmlChar *ichar; /* indent character */
+ char qchar; /* character used for quoting attribute values */
+ xmlParserCtxtPtr ctxt;
+};
+
+static void xmlFreeTextWriterStackEntry(xmlLinkPtr lk);
+static int xmlCmpTextWriterStackEntry(const void *data0,
+ const void *data1);
+static void xmlFreeTextWriterNsStackEntry(xmlLinkPtr lk);
+static int xmlCmpTextWriterNsStackEntry(const void *data0,
+ const void *data1);
+static int xmlTextWriterWriteMemCallback(void *context,
+ const xmlChar * str, int len);
+static int xmlTextWriterCloseMemCallback(void *context);
+static int xmlTextWriterWriteDocCallback(void *context,
+ const xmlChar * str, int len);
+static int xmlTextWriterCloseDocCallback(void *context);
+
+static xmlChar *xmlTextWriterVSprintf(const char *format, va_list argptr);
+static int xmlOutputBufferWriteBase64(xmlOutputBufferPtr out, int len,
+ const unsigned char *data);
+static void xmlTextWriterStartDocumentCallback(void *ctx);
+static int xmlTextWriterWriteIndent(xmlTextWriterPtr writer);
+static int
+ xmlTextWriterHandleStateDependencies(xmlTextWriterPtr writer,
+ xmlTextWriterStackEntry * p);
+
+/**
+ * xmlNewTextWriter:
+ * @out: an xmlOutputBufferPtr
+ *
+ * Create a new xmlNewTextWriter structure using an xmlOutputBufferPtr
+ *
+ * Returns the new xmlTextWriterPtr or NULL in case of error
+ */
+xmlTextWriterPtr
+xmlNewTextWriter(xmlOutputBufferPtr out)
+{
+ xmlTextWriterPtr ret;
+
+ ret = (xmlTextWriterPtr) xmlMalloc(sizeof(xmlTextWriter));
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriter : out of memory!\n");
+ return NULL;
+ }
+ memset(ret, 0, (size_t) sizeof(xmlTextWriter));
+
+ ret->nodes = xmlListCreate((xmlListDeallocator)
+ xmlFreeTextWriterStackEntry,
+ (xmlListDataCompare)
+ xmlCmpTextWriterStackEntry);
+ if (ret->nodes == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriter : out of memory!\n");
+ xmlFree(ret);
+ return NULL;
+ }
+
+ ret->nsstack = xmlListCreate((xmlListDeallocator)
+ xmlFreeTextWriterNsStackEntry,
+ (xmlListDataCompare)
+ xmlCmpTextWriterNsStackEntry);
+ if (ret->nsstack == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriter : out of memory!\n");
+ xmlListDelete(ret->nodes);
+ xmlFree(ret);
+ return NULL;
+ }
+
+ ret->out = out;
+ ret->ichar = xmlStrdup(BAD_CAST " ");
+ ret->qchar = '"';
+
+ if (!ret->ichar) {
+ xmlListDelete(ret->nodes);
+ xmlListDelete(ret->nsstack);
+ xmlFree(ret);
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriter : out of memory!\n");
+ return NULL;
+ }
+
+ return ret;
+}
+
+/**
+ * xmlNewTextWriterFilename:
+ * @uri: the URI of the resource for the output
+ * @compression: compress the output?
+ *
+ * Create a new xmlNewTextWriter structure with @uri as output
+ *
+ * Returns the new xmlTextWriterPtr or NULL in case of error
+ */
+xmlTextWriterPtr
+xmlNewTextWriterFilename(const char *uri, int compression)
+{
+ xmlTextWriterPtr ret;
+ xmlOutputBufferPtr out;
+
+ out = xmlOutputBufferCreateFilename(uri, NULL, compression);
+ if (out == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterFilename : out of memory!\n");
+ return NULL;
+ }
+
+ ret = xmlNewTextWriter(out);
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterFilename : out of memory!\n");
+ xmlOutputBufferClose(out);
+ return NULL;
+ }
+
+ ret->indent = 0;
+ ret->doindent = 0;
+ return ret;
+}
+
+/**
+ * xmlNewTextWriterMemory:
+ * @buf: xmlBufferPtr
+ * @compression: compress the output?
+ *
+ * Create a new xmlNewTextWriter structure with @buf as output
+ * TODO: handle compression
+ *
+ * Returns the new xmlTextWriterPtr or NULL in case of error
+ */
+xmlTextWriterPtr
+xmlNewTextWriterMemory(xmlBufferPtr buf, int compression ATTRIBUTE_UNUSED)
+{
+ xmlTextWriterPtr ret;
+ xmlOutputBufferPtr out;
+
+/*::todo handle compression */
+ out = xmlOutputBufferCreateIO((xmlOutputWriteCallback)
+ xmlTextWriterWriteMemCallback,
+ (xmlOutputCloseCallback)
+ xmlTextWriterCloseMemCallback,
+ (void *) buf, NULL);
+ if (out == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterMemory : out of memory!\n");
+ return NULL;
+ }
+
+ ret = xmlNewTextWriter(out);
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterMemory : out of memory!\n");
+ xmlOutputBufferClose(out);
+ return NULL;
+ }
+
+ return ret;
+}
+
+/**
+ * xmlNewTextWriterPushParser:
+ * @ctxt: xmlParserCtxtPtr to hold the new XML document tree
+ * @compression: compress the output?
+ *
+ * Create a new xmlNewTextWriter structure with @ctxt as output
+ * TODO: handle compression
+ *
+ * Returns the new xmlTextWriterPtr or NULL in case of error
+ */
+xmlTextWriterPtr
+xmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt,
+ int compression ATTRIBUTE_UNUSED)
+{
+ xmlTextWriterPtr ret;
+ xmlOutputBufferPtr out;
+
+ if (ctxt == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterPushParser : invalid context!\n");
+ return NULL;
+ }
+
+ out = xmlOutputBufferCreateIO((xmlOutputWriteCallback)
+ xmlTextWriterWriteDocCallback,
+ (xmlOutputCloseCallback)
+ xmlTextWriterCloseDocCallback,
+ (void *) ctxt, NULL);
+ if (out == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterPushParser : error at xmlOutputBufferCreateIO!\n");
+ return NULL;
+ }
+
+ ret = xmlNewTextWriter(out);
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterPushParser : error at xmlNewTextWriter!\n");
+ xmlOutputBufferClose(out);
+ return NULL;
+ }
+
+ ret->ctxt = ctxt;
+
+ return ret;
+}
+
+/**
+ * xmlNewTextWriterDoc:
+ * @doc: address of a xmlDocPtr to hold the new XML document tree
+ * @compression: compress the output?
+ *
+ * Create a new xmlNewTextWriter structure with @*doc as output
+ *
+ * Returns the new xmlTextWriterPtr or NULL in case of error
+ */
+xmlTextWriterPtr
+xmlNewTextWriterDoc(xmlDocPtr * doc, int compression)
+{
+ xmlTextWriterPtr ret;
+ xmlSAXHandler saxHandler;
+ xmlParserCtxtPtr ctxt;
+
+ memset(&saxHandler, '\0', sizeof(saxHandler));
+ xmlSAX2InitDefaultSAXHandler(&saxHandler, 1);
+ saxHandler.startDocument = xmlTextWriterStartDocumentCallback;
+ saxHandler.startElement = xmlSAX2StartElement;
+ saxHandler.endElement = xmlSAX2EndElement;
+
+ ctxt = xmlCreatePushParserCtxt(&saxHandler, NULL, NULL, 0, NULL);
+ if (ctxt == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterDoc : error at xmlCreatePushParserCtxt!\n");
+ return NULL;
+ }
+
+ ctxt->myDoc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION);
+ if (ctxt->myDoc == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterDoc : error at xmlNewDoc!\n");
+ return NULL;
+ }
+
+ ret = xmlNewTextWriterPushParser(ctxt, compression);
+ if (ret == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterDoc : error at xmlNewTextWriterPushParser!\n");
+ return NULL;
+ }
+
+ xmlSetDocCompressMode(ctxt->myDoc, compression);
+
+ if (doc != NULL)
+ *doc = ctxt->myDoc;
+
+ return ret;
+}
+
+/**
+ * xmlNewTextWriterTree:
+ * @doc: xmlDocPtr
+ * @node: xmlNodePtr or NULL for doc->children
+ * @compression: compress the output?
+ *
+ * Create a new xmlNewTextWriter structure with @doc as output
+ * starting at @node
+ *
+ * Returns the new xmlTextWriterPtr or NULL in case of error
+ */
+xmlTextWriterPtr
+xmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node, int compression)
+{
+ xmlTextWriterPtr ret;
+ xmlSAXHandler saxHandler;
+ xmlParserCtxtPtr ctxt;
+
+ if (doc == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterTree : invalid document tree!\n");
+ return NULL;
+ }
+
+ memset(&saxHandler, '\0', sizeof(saxHandler));
+ xmlSAX2InitDefaultSAXHandler(&saxHandler, 1);
+ saxHandler.startDocument = xmlTextWriterStartDocumentCallback;
+ saxHandler.startElement = xmlSAX2StartElement;
+ saxHandler.endElement = xmlSAX2EndElement;
+
+ ctxt = xmlCreatePushParserCtxt(&saxHandler, NULL, NULL, 0, NULL);
+ if (ctxt == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterDoc : error at xmlCreatePushParserCtxt!\n");
+ return NULL;
+ }
+
+ ret = xmlNewTextWriterPushParser(ctxt, compression);
+ if (ret == NULL) {
+ xmlFreeParserCtxt(ctxt);
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlNewTextWriterDoc : error at xmlNewTextWriterPushParser!\n");
+ return NULL;
+ }
+
+ ctxt->myDoc = doc;
+ ctxt->node = node;
+
+ xmlSetDocCompressMode(doc, compression);
+
+ return ret;
+}
+
+/**
+ * xmlFreeTextWriter:
+ * @writer: the xmlTextWriterPtr
+ *
+ * Deallocate all the resources associated to the writer
+ */
+void
+xmlFreeTextWriter(xmlTextWriterPtr writer)
+{
+ if (writer == NULL)
+ return;
+
+ if (writer->out != NULL)
+ xmlOutputBufferClose(writer->out);
+
+ if (writer->nodes != NULL)
+ xmlListDelete(writer->nodes);
+
+ if (writer->nsstack != NULL)
+ xmlListDelete(writer->nsstack);
+
+ if (writer->ctxt != NULL)
+ xmlFreeParserCtxt(writer->ctxt);
+
+ if (writer->ichar != NULL)
+ xmlFree(writer->ichar);
+ xmlFree(writer);
+}
+
+/**
+ * xmlTextWriterStartDocument:
+ * @writer: the xmlTextWriterPtr
+ * @version: the xml version ("1.0") or NULL for default ("1.0")
+ * @encoding: the encoding or NULL for default
+ * @standalone: "yes" or "no" or NULL for default
+ *
+ * Start a new xml document
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartDocument(xmlTextWriterPtr writer, const char *version,
+ const char *encoding, const char *standalone)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlCharEncodingHandlerPtr encoder;
+
+ if ((writer == NULL) || (writer->out == NULL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDocument : invalid writer!\n");
+ return -1;
+ }
+
+ lk = xmlListFront(writer->nodes);
+ if ((lk != NULL) && (xmlLinkGetData(lk) != NULL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDocument : not allowed in this context!\n");
+ return -1;
+ }
+
+ encoder = NULL;
+ if (encoding != NULL) {
+ encoder = xmlFindCharEncodingHandler(encoding);
+ if (encoder == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDocument : out of memory!\n");
+ return -1;
+ }
+ }
+
+ writer->out->encoder = encoder;
+ if (encoder != NULL) {
+ writer->out->conv = xmlBufferCreateSize(4000);
+ xmlCharEncOutFunc(encoder, writer->out->conv, NULL);
+ } else
+ writer->out->conv = NULL;
+
+ sum = 0;
+ count = xmlOutputBufferWriteString(writer->out, "<?xml version=");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ if (version != 0)
+ count = xmlOutputBufferWriteString(writer->out, version);
+ else
+ count = xmlOutputBufferWriteString(writer->out, "1.0");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ if (writer->out->encoder != 0) {
+ count = xmlOutputBufferWriteString(writer->out, " encoding=");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count =
+ xmlOutputBufferWriteString(writer->out,
+ writer->out->encoder->name);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ if (standalone != 0) {
+ count = xmlOutputBufferWriteString(writer->out, " standalone=");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, standalone);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, "?>\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndDocument:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End an xml document. All open elements are closed
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndDocument(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterEndDocument : invalid writer!\n");
+ return -1;
+ }
+
+ sum = 0;
+ while ((lk = xmlListFront(writer->nodes)) != NULL) {
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ break;
+ switch (p->state) {
+ case XML_TEXTWRITER_NAME:
+ case XML_TEXTWRITER_ATTRIBUTE:
+ case XML_TEXTWRITER_TEXT:
+ count = xmlTextWriterEndElement(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ case XML_TEXTWRITER_PI:
+ case XML_TEXTWRITER_PI_TEXT:
+ count = xmlTextWriterEndPI(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ case XML_TEXTWRITER_CDATA:
+ count = xmlTextWriterEndCDATA(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ case XML_TEXTWRITER_DTD:
+ case XML_TEXTWRITER_DTD_TEXT:
+ case XML_TEXTWRITER_DTD_ELEM:
+ case XML_TEXTWRITER_DTD_ELEM_TEXT:
+ case XML_TEXTWRITER_DTD_ATTL:
+ case XML_TEXTWRITER_DTD_ATTL_TEXT:
+ case XML_TEXTWRITER_DTD_ENTY:
+ case XML_TEXTWRITER_DTD_ENTY_TEXT:
+ case XML_TEXTWRITER_DTD_PENT:
+ count = xmlTextWriterEndDTD(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ case XML_TEXTWRITER_COMMENT:
+ count = xmlTextWriterEndComment(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (!writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartComment:
+ * @writer: the xmlTextWriterPtr
+ *
+ * Start an xml comment.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartComment(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartComment : invalid writer!\n");
+ return -1;
+ }
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk != 0) {
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ switch (p->state) {
+ case XML_TEXTWRITER_TEXT:
+ case XML_TEXTWRITER_NONE:
+ break;
+ case XML_TEXTWRITER_NAME:
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ if (writer->indent) {
+ count =
+ xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ p->state = XML_TEXTWRITER_TEXT;
+ break;
+ default:
+ return -1;
+ }
+ }
+ }
+
+ p = (xmlTextWriterStackEntry *)
+ xmlMalloc(sizeof(xmlTextWriterStackEntry));
+ if (p == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartElement : out of memory!\n");
+ return -1;
+ }
+
+ p->name = 0;
+ p->state = XML_TEXTWRITER_COMMENT;
+
+ xmlListPushFront(writer->nodes, p);
+
+ if (writer->indent) {
+ count = xmlTextWriterWriteIndent(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, "<!--");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndComment:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End the current xml coment.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndComment(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterEndComment : invalid writer!\n");
+ return -1;
+ }
+
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterEndComment : not allowed in this context!\n");
+ return -1;
+ }
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return -1;
+
+ sum = 0;
+ switch (p->state) {
+ case XML_TEXTWRITER_COMMENT:
+ count = xmlOutputBufferWriteString(writer->out, "-->");
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ default:
+ return -1;
+ }
+
+ if (writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ xmlListPopFront(writer->nodes);
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatComment:
+ * @writer: the xmlTextWriterPtr
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write an xml comment.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatComment(xmlTextWriterPtr writer,
+ const char *format, ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatComment(writer, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatComment:
+ * @writer: the xmlTextWriterPtr
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write an xml comment.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer,
+ const char *format, va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteVFormatComment : invalid writer!\n");
+ return -1;
+ }
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteComment(writer, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteComment:
+ * @writer: the xmlTextWriterPtr
+ * @content: comment string
+ *
+ * Write an xml comment.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteComment(xmlTextWriterPtr writer, const xmlChar * content)
+{
+ int count;
+ int sum;
+
+ sum = 0;
+ count = xmlTextWriterStartComment(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlTextWriterWriteString(writer, content);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlTextWriterEndComment(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartElement:
+ * @writer: the xmlTextWriterPtr
+ * @name: element name
+ *
+ * Start an xml element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartElement(xmlTextWriterPtr writer, const xmlChar * name)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if ((writer == NULL) || (name == NULL) || (*name == '\0'))
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk != 0) {
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ switch (p->state) {
+ case XML_TEXTWRITER_PI:
+ case XML_TEXTWRITER_PI_TEXT:
+ return -1;
+ case XML_TEXTWRITER_NONE:
+ break;
+ case XML_TEXTWRITER_NAME:
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ if (writer->indent)
+ count =
+ xmlOutputBufferWriteString(writer->out, "\n");
+ p->state = XML_TEXTWRITER_TEXT;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ p = (xmlTextWriterStackEntry *)
+ xmlMalloc(sizeof(xmlTextWriterStackEntry));
+ if (p == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartElement : out of memory!\n");
+ return -1;
+ }
+
+ p->name = xmlStrdup(name);
+ if (p->name == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartElement : out of memory!\n");
+ xmlFree(p);
+ return -1;
+ }
+ p->state = XML_TEXTWRITER_NAME;
+
+ xmlListPushFront(writer->nodes, p);
+
+ if (writer->indent) {
+ count = xmlTextWriterWriteIndent(writer);
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, "<");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count =
+ xmlOutputBufferWriteString(writer->out, (const char *) p->name);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartElementNS:
+ * @writer: the xmlTextWriterPtr
+ * @prefix: namespace prefix or NULL
+ * @name: element local name
+ * @namespaceURI: namespace URI or NULL
+ *
+ * Start an xml element with namespace support.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartElementNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix, const xmlChar * name,
+ const xmlChar * namespaceURI)
+{
+ int count;
+ int sum;
+ xmlChar *buf;
+
+ if ((writer == NULL) || (name == NULL) || (*name == '\0'))
+ return -1;
+
+ buf = 0;
+ if (prefix != 0) {
+ buf = xmlStrdup(prefix);
+ buf = xmlStrcat(buf, BAD_CAST ":");
+ }
+ buf = xmlStrcat(buf, name);
+
+ sum = 0;
+ count = xmlTextWriterStartElement(writer, buf);
+ xmlFree(buf);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ if (namespaceURI != 0) {
+ buf = xmlStrdup(BAD_CAST "xmlns");
+ if (prefix != 0) {
+ buf = xmlStrcat(buf, BAD_CAST ":");
+ buf = xmlStrcat(buf, prefix);
+ }
+
+ count = xmlTextWriterWriteAttribute(writer, buf, namespaceURI);
+ xmlFree(buf);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndElement:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End the current xml element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndElement(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0)
+ return -1;
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return -1;
+
+ sum = 0;
+ switch (p->state) {
+ case XML_TEXTWRITER_ATTRIBUTE:
+ count = xmlTextWriterEndAttribute(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ /* fallthrough */
+ case XML_TEXTWRITER_NAME:
+ if (writer->indent) /* next element needs indent */
+ writer->doindent = 1;
+ count = xmlOutputBufferWriteString(writer->out, "/>");
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ case XML_TEXTWRITER_TEXT:
+ if ((writer->indent) && (writer->doindent)) {
+ count = xmlTextWriterWriteIndent(writer);
+ sum += count;
+ writer->doindent = 1;
+ } else
+ writer->doindent = 1;
+ count = xmlOutputBufferWriteString(writer->out, "</");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out,
+ (const char *) p->name);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ default:
+ return -1;
+ }
+
+ if (writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ sum += count;
+ }
+
+ xmlListPopFront(writer->nodes);
+ return sum;
+}
+
+/**
+ * xmlTextWriterFullEndElement:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End the current xml element. Writes an end tag even if the element is empty
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterFullEndElement(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0)
+ return -1;
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return -1;
+
+ sum = 0;
+ switch (p->state) {
+ case XML_TEXTWRITER_ATTRIBUTE:
+ count = xmlTextWriterEndAttribute(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ /* fallthrough */
+ case XML_TEXTWRITER_NAME:
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ /* fallthrough */
+ case XML_TEXTWRITER_TEXT:
+ count = xmlOutputBufferWriteString(writer->out, "</");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out,
+ (const char *) p->name);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ default:
+ return -1;
+ }
+
+ xmlListPopFront(writer->nodes);
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatRaw:
+ * @writer: the xmlTextWriterPtr
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted raw xml text.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer, const char *format,
+ ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatRaw(writer, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatRaw:
+ * @writer: the xmlTextWriterPtr
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted raw xml text.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer, const char *format,
+ va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteRaw(writer, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteRawLen:
+ * @writer: the xmlTextWriterPtr
+ * @content: text string
+ * @len: length of the text string
+ *
+ * Write an xml text.
+ * TODO: what about entities and special chars??
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteRawLen(xmlTextWriterPtr writer, const xmlChar * content,
+ int len)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteRawLen : invalid writer!\n");
+ return -1;
+ }
+
+ if ((content == NULL) && (len > 0)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteRawLen : invalid content!\n");
+ return -1;
+ }
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk != 0) {
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ count = xmlTextWriterHandleStateDependencies(writer, p);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ if (writer->indent)
+ writer->doindent = 0;
+
+ if (content != NULL) {
+ count =
+ xmlOutputBufferWrite(writer->out, len, (const char *) content);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteRaw:
+ * @writer: the xmlTextWriterPtr
+ * @content: text string
+ *
+ * Write a raw xml text.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteRaw(xmlTextWriterPtr writer, const xmlChar * content)
+{
+ return xmlTextWriterWriteRawLen(writer, content, xmlStrlen(content));
+}
+
+/**
+ * xmlTextWriterWriteFormatString:
+ * @writer: the xmlTextWriterPtr
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted xml text.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatString(xmlTextWriterPtr writer, const char *format,
+ ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatString(writer, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatString:
+ * @writer: the xmlTextWriterPtr
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted xml text.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatString(xmlTextWriterPtr writer,
+ const char *format, va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteString(writer, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteString:
+ * @writer: the xmlTextWriterPtr
+ * @content: text string
+ *
+ * Write an xml text.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteString(xmlTextWriterPtr writer, const xmlChar * content)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ sum = 0;
+ buf = (xmlChar *) content;
+ lk = xmlListFront(writer->nodes);
+ if (lk != 0) {
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ switch (p->state) {
+ case XML_TEXTWRITER_NAME:
+ case XML_TEXTWRITER_TEXT:
+ encode:
+ buf = xmlEncodeSpecialChars(NULL, content);
+ break;
+ case XML_TEXTWRITER_ATTRIBUTE:
+ buf = NULL;
+ xmlAttrSerializeTxtContent(writer->out->buffer, NULL,
+ NULL, content);
+ break;
+ }
+ }
+ }
+
+ if (buf != NULL) {
+ count = xmlTextWriterWriteRaw(writer, buf);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ if (buf != content) /* buf was allocated by us, so free it */
+ xmlFree(buf);
+ }
+
+ return sum;
+}
+
+/**
+ * xmlOutputBufferWriteBase64:
+ * @out: the xmlOutputBufferPtr
+ * @data: binary data
+ * @len: the number of bytes to encode
+ *
+ * Write base64 encoded data to an xmlOutputBuffer.
+ * Adapted from John Walker's base64.c (http://www.fourmilab.ch/).
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+static int
+xmlOutputBufferWriteBase64(xmlOutputBufferPtr out, int len,
+ const unsigned char *data)
+{
+ static unsigned char dtable[64] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ int i;
+ int linelen;
+ int count;
+ int sum;
+
+ linelen = 0;
+ sum = 0;
+
+ i = 0;
+ while (1) {
+ unsigned char igroup[3];
+ unsigned char ogroup[4];
+ int c;
+ int n;
+
+ igroup[0] = igroup[1] = igroup[2] = 0;
+ for (n = 0; n < 3 && i < len; n++, i++) {
+ c = data[i];
+ igroup[n] = (unsigned char) c;
+ }
+
+ if (n > 0) {
+ ogroup[0] = dtable[igroup[0] >> 2];
+ ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)];
+ ogroup[2] =
+ dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)];
+ ogroup[3] = dtable[igroup[2] & 0x3F];
+
+ if (n < 3) {
+ ogroup[3] = '=';
+ if (n < 2) {
+ ogroup[2] = '=';
+ }
+ }
+
+ if (linelen >= B64LINELEN) {
+ count = xmlOutputBufferWrite(out, 2, B64CRLF);
+ if (count == -1)
+ return -1;
+ sum += count;
+ linelen = 0;
+ }
+ count = xmlOutputBufferWrite(out, 4, (const char *) ogroup);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ linelen += 4;
+ }
+
+ if (i >= len)
+ break;
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteBase64:
+ * @writer: the xmlTextWriterPtr
+ * @data: binary data
+ * @start: the position within the data of the first byte to encode
+ * @len: the number of bytes to encode
+ *
+ * Write an base64 encoded xml text.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteBase64(xmlTextWriterPtr writer, const char *data,
+ int start, int len)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk != 0) {
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ count = xmlTextWriterHandleStateDependencies(writer, p);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ }
+
+ if (writer->indent)
+ writer->doindent = 0;
+
+ count =
+ xmlOutputBufferWriteBase64(writer->out, len,
+ (unsigned char *) data + start);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlOutputBufferWriteBinHex:
+ * @out: the xmlOutputBufferPtr
+ * @data: binary data
+ * @len: the number of bytes to encode
+ *
+ * Write hqx encoded data to an xmlOutputBuffer.
+ * ::todo
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+static int
+xmlOutputBufferWriteBinHex(xmlOutputBufferPtr out,
+ int len, const unsigned char *data)
+{
+ int count;
+ int sum;
+ static char hex[] = "0123456789ABCDEF";
+ int i;
+
+ if ((out == NULL) || ((data == 0) && (len != 0))) {
+ return -1;
+ }
+
+ sum = 0;
+ for (i = 0; i < len; i++) {
+ count =
+ xmlOutputBufferWrite(out, 1,
+ (const char *) &hex[data[i] >> 4]);
+ if (count == -1)
+ return -1;
+ sum += count;
+ count =
+ xmlOutputBufferWrite(out, 1,
+ (const char *) &hex[data[i] & 0xF]);
+ if (count == -1)
+ return -1;
+ sum += count;
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteBinHex:
+ * @writer: the xmlTextWriterPtr
+ * @data: binary data
+ * @start: the position within the data of the first byte to encode
+ * @len: the number of bytes to encode
+ *
+ * Write a BinHex encoded xml text.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteBinHex(xmlTextWriterPtr writer, const char *data,
+ int start, int len)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk != 0) {
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ count = xmlTextWriterHandleStateDependencies(writer, p);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ }
+
+ if (writer->indent)
+ writer->doindent = 0;
+
+ count =
+ xmlOutputBufferWriteBinHex(writer->out, len,
+ (unsigned char *) data + start);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartAttribute:
+ * @writer: the xmlTextWriterPtr
+ * @name: element name
+ *
+ * Start an xml attribute.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartAttribute(xmlTextWriterPtr writer, const xmlChar * name)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if ((writer == NULL) || (name == NULL) || (*name == '\0'))
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0)
+ return -1;
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return -1;
+
+ switch (p->state) {
+ case XML_TEXTWRITER_ATTRIBUTE:
+ count = xmlTextWriterEndAttribute(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ /* fallthrough */
+ case XML_TEXTWRITER_NAME:
+ count = xmlOutputBufferWriteString(writer->out, " ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count =
+ xmlOutputBufferWriteString(writer->out,
+ (const char *) name);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, "=");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ p->state = XML_TEXTWRITER_ATTRIBUTE;
+ break;
+ default:
+ return -1;
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartAttributeNS:
+ * @writer: the xmlTextWriterPtr
+ * @prefix: namespace prefix or NULL
+ * @name: element local name
+ * @namespaceURI: namespace URI or NULL
+ *
+ * Start an xml attribute with namespace support.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartAttributeNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix, const xmlChar * name,
+ const xmlChar * namespaceURI)
+{
+ int count;
+ int sum;
+ xmlChar *buf;
+ xmlTextWriterNsStackEntry *p;
+
+ if ((writer == NULL) || (name == NULL) || (*name == '\0'))
+ return -1;
+
+ buf = 0;
+ if (prefix != 0) {
+ buf = xmlStrdup(prefix);
+ buf = xmlStrcat(buf, BAD_CAST ":");
+ }
+ buf = xmlStrcat(buf, name);
+
+ sum = 0;
+ count = xmlTextWriterStartAttribute(writer, buf);
+ xmlFree(buf);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ if (namespaceURI != 0) {
+ buf = xmlStrdup(BAD_CAST "xmlns");
+ if (prefix != 0) {
+ buf = xmlStrcat(buf, BAD_CAST ":");
+ buf = xmlStrcat(buf, prefix);
+ }
+
+ p = (xmlTextWriterNsStackEntry *)
+ xmlMalloc(sizeof(xmlTextWriterNsStackEntry));
+ if (p == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartAttributeNS : out of memory!\n");
+ return -1;
+ }
+
+ p->prefix = buf;
+ p->uri = xmlStrdup(namespaceURI);
+ if (p->uri == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartAttributeNS : out of memory!\n");
+ xmlFree(p);
+ return -1;
+ }
+ p->elem = xmlListFront(writer->nodes);
+
+ xmlListPushFront(writer->nsstack, p);
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndAttribute:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End the current xml element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndAttribute(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+ xmlTextWriterNsStackEntry *np;
+
+ if (writer == NULL)
+ return -1;
+
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0) {
+ xmlListDelete(writer->nsstack);
+ return -1;
+ }
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0) {
+ xmlListDelete(writer->nsstack);
+ return -1;
+ }
+
+ sum = 0;
+ switch (p->state) {
+ case XML_TEXTWRITER_ATTRIBUTE:
+ p->state = XML_TEXTWRITER_NAME;
+
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0) {
+ xmlListDelete(writer->nsstack);
+ return -1;
+ }
+ sum += count;
+
+ while (!xmlListEmpty(writer->nsstack)) {
+ lk = xmlListFront(writer->nsstack);
+ np = (xmlTextWriterNsStackEntry *) xmlLinkGetData(lk);
+ if (np != 0) {
+ count =
+ xmlTextWriterWriteAttribute(writer, np->prefix,
+ np->uri);
+ if (count < 0) {
+ xmlListDelete(writer->nsstack);
+ return -1;
+ }
+ sum += count;
+ }
+
+ xmlListPopFront(writer->nsstack);
+ }
+ break;
+
+ default:
+ xmlListClear(writer->nsstack);
+ return -1;
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatAttribute:
+ * @writer: the xmlTextWriterPtr
+ * @name: attribute name
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted xml attribute.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer,
+ const xmlChar * name, const char *format,
+ ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatAttribute(writer, name, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatAttribute:
+ * @writer: the xmlTextWriterPtr
+ * @name: attribute name
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted xml attribute.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteAttribute(writer, name, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteAttribute:
+ * @writer: the xmlTextWriterPtr
+ * @name: attribute name
+ * @content: attribute content
+ *
+ * Write an xml attribute.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteAttribute(xmlTextWriterPtr writer, const xmlChar * name,
+ const xmlChar * content)
+{
+ int count;
+ int sum;
+
+ sum = 0;
+ count = xmlTextWriterStartAttribute(writer, name);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlTextWriterWriteString(writer, content);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlTextWriterEndAttribute(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatAttributeNS:
+ * @writer: the xmlTextWriterPtr
+ * @prefix: namespace prefix
+ * @name: attribute local name
+ * @namespaceURI: namespace URI
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted xml attribute.with namespace support
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format, ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatAttributeNS(writer, prefix, name,
+ namespaceURI, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatAttributeNS:
+ * @writer: the xmlTextWriterPtr
+ * @prefix: namespace prefix
+ * @name: attribute local name
+ * @namespaceURI: namespace URI
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted xml attribute.with namespace support
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format, va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteAttributeNS(writer, prefix, name, namespaceURI,
+ buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteAttributeNS:
+ * @writer: the xmlTextWriterPtr
+ * @prefix: namespace prefix
+ * @name: attribute local name
+ * @namespaceURI: namespace URI
+ * @content: attribute content
+ *
+ * Write an xml attribute.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteAttributeNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix, const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const xmlChar * content)
+{
+ int count;
+ int sum;
+ xmlChar *buf;
+
+ if ((writer == NULL) || (name == NULL) || (*name == '\0'))
+ return -1;
+
+ buf = 0;
+ if (prefix != NULL) {
+ buf = xmlStrdup(prefix);
+ buf = xmlStrcat(buf, BAD_CAST ":");
+ }
+ buf = xmlStrcat(buf, name);
+
+ sum = 0;
+ count = xmlTextWriterWriteAttribute(writer, buf, content);
+ xmlFree(buf);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ if (namespaceURI != NULL) {
+ buf = 0;
+ buf = xmlStrdup(BAD_CAST "xmlns");
+ if (prefix != NULL) {
+ buf = xmlStrcat(buf, BAD_CAST ":");
+ buf = xmlStrcat(buf, prefix);
+ }
+ count = xmlTextWriterWriteAttribute(writer, buf, namespaceURI);
+ xmlFree(buf);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatElement:
+ * @writer: the xmlTextWriterPtr
+ * @name: element name
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted xml element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatElement(xmlTextWriterPtr writer,
+ const xmlChar * name, const char *format,
+ ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatElement(writer, name, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatElement:
+ * @writer: the xmlTextWriterPtr
+ * @name: element name
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted xml element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer,
+ const xmlChar * name, const char *format,
+ va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteElement(writer, name, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteElement:
+ * @writer: the xmlTextWriterPtr
+ * @name: element name
+ * @content: element content
+ *
+ * Write an xml element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteElement(xmlTextWriterPtr writer, const xmlChar * name,
+ const xmlChar * content)
+{
+ int count;
+ int sum;
+
+ sum = 0;
+ count = xmlTextWriterStartElement(writer, name);
+ if (count == -1)
+ return -1;
+ sum += count;
+ count = xmlTextWriterWriteString(writer, content);
+ if (count == -1)
+ return -1;
+ sum += count;
+ count = xmlTextWriterEndElement(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatElementNS:
+ * @writer: the xmlTextWriterPtr
+ * @prefix: namespace prefix
+ * @name: element local name
+ * @namespaceURI: namespace URI
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted xml element with namespace support.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format, ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatElementNS(writer, prefix, name,
+ namespaceURI, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatElementNS:
+ * @writer: the xmlTextWriterPtr
+ * @prefix: namespace prefix
+ * @name: element local name
+ * @namespaceURI: namespace URI
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted xml element with namespace support.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix,
+ const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const char *format, va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteElementNS(writer, prefix, name, namespaceURI,
+ buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteElementNS:
+ * @writer: the xmlTextWriterPtr
+ * @prefix: namespace prefix
+ * @name: element local name
+ * @namespaceURI: namespace URI
+ * @content: element content
+ *
+ * Write an xml element with namespace support.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteElementNS(xmlTextWriterPtr writer,
+ const xmlChar * prefix, const xmlChar * name,
+ const xmlChar * namespaceURI,
+ const xmlChar * content)
+{
+ int count;
+ int sum;
+
+ if ((writer == NULL) || (name == NULL) || (*name == '\0'))
+ return -1;
+
+ sum = 0;
+ count =
+ xmlTextWriterStartElementNS(writer, prefix, name, namespaceURI);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlTextWriterWriteString(writer, content);
+ if (count == -1)
+ return -1;
+ sum += count;
+ count = xmlTextWriterEndElement(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartPI:
+ * @writer: the xmlTextWriterPtr
+ * @target: PI target
+ *
+ * Start an xml PI.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartPI(xmlTextWriterPtr writer, const xmlChar * target)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if ((writer == NULL) || (target == NULL) || (*target == '\0'))
+ return -1;
+
+ if (xmlStrcasecmp(target, (const xmlChar *) "xml") == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartPI : target name [Xx][Mm][Ll] is reserved for xml standardization!\n");
+ return -1;
+ }
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk != 0) {
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ switch (p->state) {
+ case XML_TEXTWRITER_ATTRIBUTE:
+ count = xmlTextWriterEndAttribute(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ /* fallthrough */
+ case XML_TEXTWRITER_NAME:
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ p->state = XML_TEXTWRITER_TEXT;
+ break;
+ case XML_TEXTWRITER_NONE:
+ case XML_TEXTWRITER_TEXT:
+ case XML_TEXTWRITER_DTD:
+ break;
+ case XML_TEXTWRITER_PI:
+ case XML_TEXTWRITER_PI_TEXT:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartPI : nested PI!\n");
+ return -1;
+ default:
+ return -1;
+ }
+ }
+ }
+
+ p = (xmlTextWriterStackEntry *)
+ xmlMalloc(sizeof(xmlTextWriterStackEntry));
+ if (p == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartPI : out of memory!\n");
+ return -1;
+ }
+
+ p->name = xmlStrdup(target);
+ if (p->name == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartPI : out of memory!\n");
+ xmlFree(p);
+ return -1;
+ }
+ p->state = XML_TEXTWRITER_PI;
+
+ xmlListPushFront(writer->nodes, p);
+
+ count = xmlOutputBufferWriteString(writer->out, "<?");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count =
+ xmlOutputBufferWriteString(writer->out, (const char *) p->name);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndPI:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End the current xml PI.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndPI(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0)
+ return 0;
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return 0;
+
+ sum = 0;
+ switch (p->state) {
+ case XML_TEXTWRITER_PI:
+ case XML_TEXTWRITER_PI_TEXT:
+ count = xmlOutputBufferWriteString(writer->out, "?>");
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ default:
+ return -1;
+ }
+
+ xmlListPopFront(writer->nodes);
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatPI:
+ * @writer: the xmlTextWriterPtr
+ * @target: PI target
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted PI.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatPI(xmlTextWriterPtr writer, const xmlChar * target,
+ const char *format, ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatPI(writer, target, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatPI:
+ * @writer: the xmlTextWriterPtr
+ * @target: PI target
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted xml PI.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer,
+ const xmlChar * target, const char *format,
+ va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWritePI(writer, target, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWritePI:
+ * @writer: the xmlTextWriterPtr
+ * @target: PI target
+ * @content: PI content
+ *
+ * Write an xml PI.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWritePI(xmlTextWriterPtr writer, const xmlChar * target,
+ const xmlChar * content)
+{
+ int count;
+ int sum;
+
+ sum = 0;
+ count = xmlTextWriterStartPI(writer, target);
+ if (count == -1)
+ return -1;
+ sum += count;
+ if (content != 0) {
+ count = xmlTextWriterWriteString(writer, content);
+ if (count == -1)
+ return -1;
+ sum += count;
+ }
+ count = xmlTextWriterEndPI(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartCDATA:
+ * @writer: the xmlTextWriterPtr
+ *
+ * Start an xml CDATA section.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartCDATA(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk != 0) {
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ switch (p->state) {
+ case XML_TEXTWRITER_NONE:
+ case XML_TEXTWRITER_PI:
+ case XML_TEXTWRITER_PI_TEXT:
+ break;
+ case XML_TEXTWRITER_ATTRIBUTE:
+ count = xmlTextWriterEndAttribute(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ /* fallthrough */
+ case XML_TEXTWRITER_NAME:
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ p->state = XML_TEXTWRITER_TEXT;
+ break;
+ case XML_TEXTWRITER_CDATA:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartCDATA : CDATA not allowed in this context!\n");
+ return -1;
+ default:
+ return -1;
+ }
+ }
+ }
+
+ p = (xmlTextWriterStackEntry *)
+ xmlMalloc(sizeof(xmlTextWriterStackEntry));
+ if (p == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartCDATA : out of memory!\n");
+ return -1;
+ }
+
+ p->name = 0;
+ p->state = XML_TEXTWRITER_CDATA;
+
+ xmlListPushFront(writer->nodes, p);
+
+ count = xmlOutputBufferWriteString(writer->out, "<![CDATA[");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndCDATA:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End an xml CDATA section.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndCDATA(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0)
+ return -1;
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return -1;
+
+ sum = 0;
+ switch (p->state) {
+ case XML_TEXTWRITER_CDATA:
+ count = xmlOutputBufferWriteString(writer->out, "]]>");
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ default:
+ return -1;
+ }
+
+ xmlListPopFront(writer->nodes);
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatCDATA:
+ * @writer: the xmlTextWriterPtr
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted xml CDATA.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer, const char *format,
+ ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatCDATA(writer, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatCDATA:
+ * @writer: the xmlTextWriterPtr
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted xml CDATA.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer, const char *format,
+ va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteCDATA(writer, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteCDATA:
+ * @writer: the xmlTextWriterPtr
+ * @content: CDATA content
+ *
+ * Write an xml CDATA.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteCDATA(xmlTextWriterPtr writer, const xmlChar * content)
+{
+ int count;
+ int sum;
+
+ sum = 0;
+ count = xmlTextWriterStartCDATA(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+ if (content != 0) {
+ count = xmlTextWriterWriteString(writer, content);
+ if (count == -1)
+ return -1;
+ sum += count;
+ }
+ count = xmlTextWriterEndCDATA(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartDTD:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD
+ * @pubid: the public identifier, which is an alternative to the system identifier
+ * @sysid: the system identifier, which is the URI of the DTD
+ *
+ * Start an xml DTD.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid, const xmlChar * sysid)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL || name == NULL || *name == '\0')
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if ((lk != NULL) && (xmlLinkGetData(lk) != NULL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTD : DTD allowed only in prolog!\n");
+ return -1;
+ }
+
+ p = (xmlTextWriterStackEntry *)
+ xmlMalloc(sizeof(xmlTextWriterStackEntry));
+ if (p == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTD : out of memory!\n");
+ return -1;
+ }
+
+ p->name = xmlStrdup(name);
+ if (p->name == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTD : out of memory!\n");
+ xmlFree(p);
+ return -1;
+ }
+ p->state = XML_TEXTWRITER_DTD;
+
+ xmlListPushFront(writer->nodes, p);
+
+ count = xmlOutputBufferWriteString(writer->out, "<!DOCTYPE ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, (const char *) name);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ if (pubid != 0) {
+ if (sysid == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTD : system identifier needed!\n");
+ return -1;
+ }
+
+ if (writer->indent)
+ count = xmlOutputBufferWrite(writer->out, 1, "\n");
+ else
+ count = xmlOutputBufferWrite(writer->out, 1, " ");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count = xmlOutputBufferWriteString(writer->out, "PUBLIC ");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count =
+ xmlOutputBufferWriteString(writer->out, (const char *) pubid);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ if (sysid != 0) {
+ if (pubid == 0) {
+ if (writer->indent)
+ count = xmlOutputBufferWrite(writer->out, 1, "\n");
+ else
+ count = xmlOutputBufferWrite(writer->out, 1, " ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, "SYSTEM ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ } else if (writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count =
+ xmlOutputBufferWriteString(writer->out, (const char *) sysid);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndDTD:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End an xml DTD.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndDTD(xmlTextWriterPtr writer)
+{
+ int loop;
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ sum = 0;
+ loop = 1;
+ while (loop) {
+ lk = xmlListFront(writer->nodes);
+ if (lk == NULL)
+ break;
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ break;
+ switch (p->state) {
+ case XML_TEXTWRITER_DTD_TEXT:
+ count = xmlOutputBufferWriteString(writer->out, "]");
+ if (count < 0)
+ return -1;
+ sum += count;
+ /* fallthrough */
+ case XML_TEXTWRITER_DTD:
+ count = xmlOutputBufferWriteString(writer->out, ">");
+
+ if (writer->indent) {
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ }
+
+ xmlListPopFront(writer->nodes);
+ break;
+ case XML_TEXTWRITER_DTD_ELEM:
+ case XML_TEXTWRITER_DTD_ELEM_TEXT:
+ count = xmlTextWriterEndDTDElement(writer);
+ break;
+ case XML_TEXTWRITER_DTD_ATTL:
+ case XML_TEXTWRITER_DTD_ATTL_TEXT:
+ count = xmlTextWriterEndDTDAttlist(writer);
+ break;
+ case XML_TEXTWRITER_DTD_ENTY:
+ case XML_TEXTWRITER_DTD_PENT:
+ case XML_TEXTWRITER_DTD_ENTY_TEXT:
+ count = xmlTextWriterEndDTDEntity(writer);
+ break;
+ case XML_TEXTWRITER_COMMENT:
+ count = xmlTextWriterEndComment(writer);
+ break;
+ default:
+ loop = 0;
+ continue;
+ }
+
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatDTD:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD
+ * @pubid: the public identifier, which is an alternative to the system identifier
+ * @sysid: the system identifier, which is the URI of the DTD
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a DTD with a formatted markup declarations part.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid, const char *format, ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatDTD(writer, name, pubid, sysid, format,
+ ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatDTD:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD
+ * @pubid: the public identifier, which is an alternative to the system identifier
+ * @sysid: the system identifier, which is the URI of the DTD
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a DTD with a formatted markup declarations part.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const char *format, va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteDTD(writer, name, pubid, sysid, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteDTD:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD
+ * @pubid: the public identifier, which is an alternative to the system identifier
+ * @sysid: the system identifier, which is the URI of the DTD
+ * @subset: string content of the DTD
+ *
+ * Write a DTD.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteDTD(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid, const xmlChar * subset)
+{
+ int count;
+ int sum;
+
+ sum = 0;
+ count = xmlTextWriterStartDTD(writer, name, pubid, sysid);
+ if (count == -1)
+ return -1;
+ sum += count;
+ if (subset != 0) {
+ count = xmlTextWriterWriteString(writer, subset);
+ if (count == -1)
+ return -1;
+ sum += count;
+ }
+ count = xmlTextWriterEndDTD(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartDTDElement:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD element
+ *
+ * Start an xml DTD element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartDTDElement(xmlTextWriterPtr writer, const xmlChar * name)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL || name == NULL || *name == '\0')
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0) {
+ return -1;
+ }
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ switch (p->state) {
+ case XML_TEXTWRITER_DTD:
+ count = xmlOutputBufferWriteString(writer->out, " [");
+ if (count < 0)
+ return -1;
+ sum += count;
+ if (writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ p->state = XML_TEXTWRITER_DTD_TEXT;
+ /* fallthrough */
+ case XML_TEXTWRITER_DTD_TEXT:
+ case XML_TEXTWRITER_NONE:
+ break;
+ default:
+ return -1;
+ }
+ }
+
+ p = (xmlTextWriterStackEntry *)
+ xmlMalloc(sizeof(xmlTextWriterStackEntry));
+ if (p == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTDElement : out of memory!\n");
+ return -1;
+ }
+
+ p->name = xmlStrdup(name);
+ if (p->name == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTDElement : out of memory!\n");
+ xmlFree(p);
+ return -1;
+ }
+ p->state = XML_TEXTWRITER_DTD_ELEM;
+
+ xmlListPushFront(writer->nodes, p);
+
+ if (writer->indent) {
+ count = xmlTextWriterWriteIndent(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, "<!ELEMENT ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, (const char *) name);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndDTDElement:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End an xml DTD element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndDTDElement(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0)
+ return -1;
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return -1;
+
+ switch (p->state) {
+ case XML_TEXTWRITER_DTD_ELEM:
+ case XML_TEXTWRITER_DTD_ELEM_TEXT:
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ default:
+ return -1;
+ }
+
+ if (writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ xmlListPopFront(writer->nodes);
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatDTDElement:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD element
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted DTD element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatDTDElement(writer, name, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatDTDElement:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD element
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted DTD element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteDTDElement(writer, name, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteDTDElement:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD element
+ * @content: content of the element
+ *
+ * Write a DTD element.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteDTDElement(xmlTextWriterPtr writer,
+ const xmlChar * name, const xmlChar * content)
+{
+ int count;
+ int sum;
+
+ if (content == NULL)
+ return -1;
+
+ sum = 0;
+ count = xmlTextWriterStartDTDElement(writer, name);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ count = xmlTextWriterWriteString(writer, content);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ count = xmlTextWriterEndDTDElement(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartDTDAttlist:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD ATTLIST
+ *
+ * Start an xml DTD ATTLIST.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer, const xmlChar * name)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL || name == NULL || *name == '\0')
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0) {
+ return -1;
+ }
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ switch (p->state) {
+ case XML_TEXTWRITER_DTD:
+ count = xmlOutputBufferWriteString(writer->out, " [");
+ if (count < 0)
+ return -1;
+ sum += count;
+ if (writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ p->state = XML_TEXTWRITER_DTD_TEXT;
+ /* fallthrough */
+ case XML_TEXTWRITER_DTD_TEXT:
+ case XML_TEXTWRITER_NONE:
+ break;
+ default:
+ return -1;
+ }
+ }
+
+ p = (xmlTextWriterStackEntry *)
+ xmlMalloc(sizeof(xmlTextWriterStackEntry));
+ if (p == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTDAttlist : out of memory!\n");
+ return -1;
+ }
+
+ p->name = xmlStrdup(name);
+ if (p->name == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTDAttlist : out of memory!\n");
+ xmlFree(p);
+ return -1;
+ }
+ p->state = XML_TEXTWRITER_DTD_ATTL;
+
+ xmlListPushFront(writer->nodes, p);
+
+ if (writer->indent) {
+ count = xmlTextWriterWriteIndent(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, "<!ATTLIST ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, (const char *) name);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndDTDAttlist:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End an xml DTD attribute list.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndDTDAttlist(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0)
+ return -1;
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return -1;
+
+ switch (p->state) {
+ case XML_TEXTWRITER_DTD_ATTL:
+ case XML_TEXTWRITER_DTD_ATTL_TEXT:
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ default:
+ return -1;
+ }
+
+ if (writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ xmlListPopFront(writer->nodes);
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatDTDAttlist:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD ATTLIST
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted DTD ATTLIST.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatDTDAttlist(writer, name, format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatDTDAttlist:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD ATTLIST
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted DTD ATTLIST.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const char *format, va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteDTDAttlist(writer, name, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteDTDAttlist:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the DTD ATTLIST
+ * @content: content of the ATTLIST
+ *
+ * Write a DTD ATTLIST.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteDTDAttlist(xmlTextWriterPtr writer,
+ const xmlChar * name, const xmlChar * content)
+{
+ int count;
+ int sum;
+
+ if (content == NULL)
+ return -1;
+
+ sum = 0;
+ count = xmlTextWriterStartDTDAttlist(writer, name);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ count = xmlTextWriterWriteString(writer, content);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ count = xmlTextWriterEndDTDAttlist(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterStartDTDEntity:
+ * @writer: the xmlTextWriterPtr
+ * @pe: TRUE if this is a parameter entity, FALSE if not
+ * @name: the name of the DTD ATTLIST
+ *
+ * Start an xml DTD ATTLIST.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterStartDTDEntity(xmlTextWriterPtr writer,
+ int pe, const xmlChar * name)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL || name == NULL || *name == '\0')
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk != 0) {
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ switch (p->state) {
+ case XML_TEXTWRITER_DTD:
+ count = xmlOutputBufferWriteString(writer->out, " [");
+ if (count < 0)
+ return -1;
+ sum += count;
+ if (writer->indent) {
+ count =
+ xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ p->state = XML_TEXTWRITER_DTD_TEXT;
+ /* fallthrough */
+ case XML_TEXTWRITER_DTD_TEXT:
+ case XML_TEXTWRITER_NONE:
+ break;
+ default:
+ return -1;
+ }
+ }
+ }
+
+ p = (xmlTextWriterStackEntry *)
+ xmlMalloc(sizeof(xmlTextWriterStackEntry));
+ if (p == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTDElement : out of memory!\n");
+ return -1;
+ }
+
+ p->name = xmlStrdup(name);
+ if (p->name == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterStartDTDElement : out of memory!\n");
+ xmlFree(p);
+ return -1;
+ }
+
+ if (pe != 0)
+ p->state = XML_TEXTWRITER_DTD_PENT;
+ else
+ p->state = XML_TEXTWRITER_DTD_ENTY;
+
+ xmlListPushFront(writer->nodes, p);
+
+ if (writer->indent) {
+ count = xmlTextWriterWriteIndent(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, "<!ENTITY ");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ if (pe != 0) {
+ count = xmlOutputBufferWriteString(writer->out, "% ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, (const char *) name);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterEndDTDEntity:
+ * @writer: the xmlTextWriterPtr
+ *
+ * End an xml DTD entity.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterEndDTDEntity(xmlTextWriterPtr writer)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL)
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0)
+ return -1;
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return -1;
+
+ switch (p->state) {
+ case XML_TEXTWRITER_DTD_ENTY_TEXT:
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ case XML_TEXTWRITER_DTD_ENTY:
+ case XML_TEXTWRITER_DTD_PENT:
+ enddtd:
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+ break;
+ default:
+ return -1;
+ }
+
+ if (writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ xmlListPopFront(writer->nodes);
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteFormatDTDInternalEntity:
+ * @writer: the xmlTextWriterPtr
+ * @pe: TRUE if this is a parameter entity, FALSE if not
+ * @name: the name of the DTD entity
+ * @format: format string (see printf)
+ * @...: extra parameters for the format
+ *
+ * Write a formatted DTD internal entity.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const char *format, ...)
+{
+ int rc;
+ va_list ap;
+
+ va_start(ap, format);
+
+ rc = xmlTextWriterWriteVFormatDTDInternalEntity(writer, pe, name,
+ format, ap);
+
+ va_end(ap);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteVFormatDTDInternalEntity:
+ * @writer: the xmlTextWriterPtr
+ * @pe: TRUE if this is a parameter entity, FALSE if not
+ * @name: the name of the DTD entity
+ * @format: format string (see printf)
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Write a formatted DTD internal entity.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const char *format,
+ va_list argptr)
+{
+ int rc;
+ xmlChar *buf;
+
+ if (writer == NULL)
+ return -1;
+
+ buf = xmlTextWriterVSprintf(format, argptr);
+ if (buf == 0)
+ return 0;
+
+ rc = xmlTextWriterWriteDTDInternalEntity(writer, pe, name, buf);
+
+ xmlFree(buf);
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteDTDEntity:
+ * @writer: the xmlTextWriterPtr
+ * @pe: TRUE if this is a parameter entity, FALSE if not
+ * @name: the name of the DTD entity
+ * @pubid: the public identifier, which is an alternative to the system identifier
+ * @sysid: the system identifier, which is the URI of the DTD
+ * @ndataid: the xml notation name.
+ * @content: content of the entity
+ *
+ * Write a DTD entity.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteDTDEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const xmlChar * ndataid,
+ const xmlChar * content)
+{
+ if ((content == NULL) && (pubid == NULL) && (sysid == NULL))
+ return -1;
+ if ((pe != 0) && (ndataid != NULL))
+ return -1;
+
+ if ((pubid == NULL) && (sysid == NULL))
+ return xmlTextWriterWriteDTDInternalEntity(writer, pe, name,
+ content);
+
+ return xmlTextWriterWriteDTDExternalEntity(writer, pe, name, pubid,
+ sysid, ndataid);
+}
+
+/**
+ * xmlTextWriterWriteDTDInternalEntity:
+ * @writer: the xmlTextWriterPtr
+ * @pe: TRUE if this is a parameter entity, FALSE if not
+ * @name: the name of the DTD entity
+ * @content: content of the entity
+ *
+ * Write a DTD internal entity.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const xmlChar * content)
+{
+ int count;
+ int sum;
+
+ if ((name == NULL) || (*name == '\0') || (content == NULL))
+ return -1;
+
+ sum = 0;
+ count = xmlTextWriterStartDTDEntity(writer, pe, name);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ count = xmlTextWriterWriteString(writer, content);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ count = xmlTextWriterEndDTDEntity(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteDTDExternalEntity:
+ * @writer: the xmlTextWriterPtr
+ * @pe: TRUE if this is a parameter entity, FALSE if not
+ * @name: the name of the DTD entity
+ * @pubid: the public identifier, which is an alternative to the system identifier
+ * @sysid: the system identifier, which is the URI of the DTD
+ * @ndataid: the xml notation name.
+ *
+ * Write a DTD external entity. The entity must have been started with xmlTextWriterStartDTDEntity
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer,
+ int pe,
+ const xmlChar * name,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const xmlChar * ndataid)
+{
+ int count;
+ int sum;
+
+ if (((pubid == NULL) && (sysid == NULL)))
+ return -1;
+ if ((pe != 0) && (ndataid != NULL))
+ return -1;
+
+ sum = 0;
+ count = xmlTextWriterStartDTDEntity(writer, pe, name);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ count =
+ xmlTextWriterWriteDTDExternalEntityContents(writer, pubid, sysid,
+ ndataid);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count = xmlTextWriterEndDTDEntity(writer);
+ if (count == -1)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteDTDExternalEntityContents:
+ * @writer: the xmlTextWriterPtr
+ * @pubid: the public identifier, which is an alternative to the system identifier
+ * @sysid: the system identifier, which is the URI of the DTD
+ * @ndataid: the xml notation name.
+ *
+ * Write the contents of a DTD external entity.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteDTDExternalEntityContents(xmlTextWriterPtr writer,
+ const xmlChar * pubid,
+ const xmlChar * sysid,
+ const xmlChar * ndataid)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteDTDExternalEntityContents: xmlTextWriterPtr invalid!\n");
+ return -1;
+ }
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteDTDExternalEntityContents: you must call xmlTextWriterStartDTDEntity before the call to this function!\n");
+ return -1;
+ }
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return -1;
+
+ switch (p->state) {
+ case XML_TEXTWRITER_DTD_ENTY:
+ break;
+ case XML_TEXTWRITER_DTD_PENT:
+ if (ndataid != NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteDTDExternalEntityContents: notation not allowed with parameter entities!\n");
+ return -1;
+ }
+ break;
+ default:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteDTDExternalEntityContents: you must call xmlTextWriterStartDTDEntity before the call to this function!\n");
+ return -1;
+ }
+
+ if (pubid != 0) {
+ if (sysid == 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteDTDExternalEntityContents: system identifier needed!\n");
+ return -1;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, " PUBLIC ");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count =
+ xmlOutputBufferWriteString(writer->out, (const char *) pubid);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ if (sysid != 0) {
+ if (pubid == 0) {
+ count = xmlOutputBufferWriteString(writer->out, " SYSTEM");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, " ");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count =
+ xmlOutputBufferWriteString(writer->out, (const char *) sysid);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ if (ndataid != NULL) {
+ count = xmlOutputBufferWriteString(writer->out, " NDATA ");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ count =
+ xmlOutputBufferWriteString(writer->out,
+ (const char *) ndataid);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterWriteDTDNotation:
+ * @writer: the xmlTextWriterPtr
+ * @name: the name of the xml notation
+ * @pubid: the public identifier, which is an alternative to the system identifier
+ * @sysid: the system identifier, which is the URI of the DTD
+ *
+ * Write a DTD entity.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer,
+ const xmlChar * name,
+ const xmlChar * pubid, const xmlChar * sysid)
+{
+ int count;
+ int sum;
+ xmlLinkPtr lk;
+ xmlTextWriterStackEntry *p;
+
+ if (writer == NULL || name == NULL || *name == '\0')
+ return -1;
+
+ sum = 0;
+ lk = xmlListFront(writer->nodes);
+ if (lk == 0) {
+ return -1;
+ }
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p != 0) {
+ switch (p->state) {
+ case XML_TEXTWRITER_DTD:
+ count = xmlOutputBufferWriteString(writer->out, " [");
+ if (count < 0)
+ return -1;
+ sum += count;
+ if (writer->indent) {
+ count = xmlOutputBufferWriteString(writer->out, "\n");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ p->state = XML_TEXTWRITER_DTD_TEXT;
+ /* fallthrough */
+ case XML_TEXTWRITER_DTD_TEXT:
+ break;
+ default:
+ return -1;
+ }
+ }
+
+ if (writer->indent) {
+ count = xmlTextWriterWriteIndent(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, "<!NOTATION ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWriteString(writer->out, (const char *) name);
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ if (pubid != 0) {
+ count = xmlOutputBufferWriteString(writer->out, " PUBLIC ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count =
+ xmlOutputBufferWriteString(writer->out, (const char *) pubid);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ if (sysid != 0) {
+ if (pubid == 0) {
+ count = xmlOutputBufferWriteString(writer->out, " SYSTEM");
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+ count = xmlOutputBufferWriteString(writer->out, " ");
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count =
+ xmlOutputBufferWriteString(writer->out, (const char *) sysid);
+ if (count < 0)
+ return -1;
+ sum += count;
+ count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ count = xmlOutputBufferWriteString(writer->out, ">");
+ if (count < 0)
+ return -1;
+ sum += count;
+
+ return sum;
+}
+
+/**
+ * xmlTextWriterFlush:
+ * @writer: the xmlTextWriterPtr
+ *
+ * Flush the output buffer.
+ *
+ * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
+ */
+int
+xmlTextWriterFlush(xmlTextWriterPtr writer)
+{
+ int count;
+
+ if (writer == NULL)
+ return -1;
+
+ if (writer->out == NULL)
+ count = 0;
+ else
+ count = xmlOutputBufferFlush(writer->out);
+
+ return count;
+}
+
+/**
+ * misc
+ */
+
+/**
+ * xmlFreeTextWriterStackEntry:
+ * @lk: the xmlLinkPtr
+ *
+ * Free callback for the xmlList.
+ */
+static void
+xmlFreeTextWriterStackEntry(xmlLinkPtr lk)
+{
+ xmlTextWriterStackEntry *p;
+
+ p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return;
+
+ if (p->name != 0)
+ xmlFree(p->name);
+ xmlFree(p);
+}
+
+/**
+ * xmlCmpTextWriterStackEntry:
+ * @data0: the first data
+ * @data1: the second data
+ *
+ * Compare callback for the xmlList.
+ *
+ * Returns -1, 0, 1
+ */
+static int
+xmlCmpTextWriterStackEntry(const void *data0, const void *data1)
+{
+ xmlTextWriterStackEntry *p0;
+ xmlTextWriterStackEntry *p1;
+
+ if (data0 == data1)
+ return 0;
+
+ if (data0 == 0)
+ return -1;
+
+ if (data1 == 0)
+ return 1;
+
+ p0 = (xmlTextWriterStackEntry *) data0;
+ p1 = (xmlTextWriterStackEntry *) data1;
+
+ return xmlStrcmp(p0->name, p1->name);
+}
+
+/**
+ * misc
+ */
+
+/**
+ * xmlFreeTextWriterNsStackEntry:
+ * @lk: the xmlLinkPtr
+ *
+ * Free callback for the xmlList.
+ */
+static void
+xmlFreeTextWriterNsStackEntry(xmlLinkPtr lk)
+{
+ xmlTextWriterNsStackEntry *p;
+
+ p = (xmlTextWriterNsStackEntry *) xmlLinkGetData(lk);
+ if (p == 0)
+ return;
+
+ if (p->prefix != 0)
+ xmlFree(p->prefix);
+ if (p->uri != 0)
+ xmlFree(p->uri);
+
+ xmlFree(p);
+}
+
+/**
+ * xmlCmpTextWriterNsStackEntry:
+ * @data0: the first data
+ * @data1: the second data
+ *
+ * Compare callback for the xmlList.
+ *
+ * Returns -1, 0, 1
+ */
+static int
+xmlCmpTextWriterNsStackEntry(const void *data0, const void *data1)
+{
+ xmlTextWriterNsStackEntry *p0;
+ xmlTextWriterNsStackEntry *p1;
+ int rc;
+
+ if (data0 == data1)
+ return 0;
+
+ if (data0 == 0)
+ return -1;
+
+ if (data1 == 0)
+ return 1;
+
+ p0 = (xmlTextWriterNsStackEntry *) data0;
+ p1 = (xmlTextWriterNsStackEntry *) data1;
+
+ rc = xmlStrcmp(p0->prefix, p1->prefix);
+
+ if (rc == 0)
+ rc = p0->elem == p1->elem;
+
+ return rc;
+}
+
+/**
+ * xmlTextWriterWriteMemCallback:
+ * @context: the xmlBufferPtr
+ * @str: the data to write
+ * @len: the length of the data
+ *
+ * Write callback for the xmlOutputBuffer with target xmlBuffer
+ *
+ * Returns -1, 0, 1
+ */
+static int
+xmlTextWriterWriteMemCallback(void *context, const xmlChar * str, int len)
+{
+ xmlBufferPtr buf = (xmlBufferPtr) context;
+
+ xmlBufferAdd(buf, str, len);
+
+ return len;
+}
+
+/**
+ * xmlTextWriterCloseMemCallback:
+ * @context: the xmlBufferPtr
+ *
+ * Close callback for the xmlOutputBuffer with target xmlBuffer
+ *
+ * Returns -1, 0, 1
+ */
+static int
+xmlTextWriterCloseMemCallback(void *context ATTRIBUTE_UNUSED)
+{
+ return 0;
+}
+
+/**
+ * xmlTextWriterWriteDocCallback:
+ * @context: the xmlBufferPtr
+ * @str: the data to write
+ * @len: the length of the data
+ *
+ * Write callback for the xmlOutputBuffer with target xmlBuffer
+ *
+ * Returns -1, 0, 1
+ */
+static int
+xmlTextWriterWriteDocCallback(void *context, const xmlChar * str, int len)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) context;
+ int rc;
+
+ if ((rc = xmlParseChunk(ctxt, (const char *) str, len, 0)) != 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteDocCallback : XML error %d !\n",
+ rc);
+ return -1;
+ }
+
+ return len;
+}
+
+/**
+ * xmlTextWriterCloseDocCallback:
+ * @context: the xmlBufferPtr
+ *
+ * Close callback for the xmlOutputBuffer with target xmlBuffer
+ *
+ * Returns -1, 0, 1
+ */
+static int
+xmlTextWriterCloseDocCallback(void *context)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) context;
+ int rc;
+
+ if ((rc = xmlParseChunk(ctxt, NULL, 0, 1)) != 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterWriteDocCallback : XML error %d !\n",
+ rc);
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * xmlTextWriterVSprintf:
+ * @format: see printf
+ * @argptr: pointer to the first member of the variable argument list.
+ *
+ * Utility function for formatted output
+ *
+ * Returns a new xmlChar buffer with the data or NULL on error. This buffer must be freed.
+ */
+static xmlChar *
+xmlTextWriterVSprintf(const char *format, va_list argptr)
+{
+ int size;
+ int count;
+ xmlChar *buf;
+
+ size = BUFSIZ;
+ buf = (xmlChar *) xmlMalloc(size);
+ if (buf == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterVSprintf : out of memory!\n");
+ return NULL;
+ }
+
+ while (((count = vsnprintf((char *) buf, size, format, argptr)) < 0)
+ || (count == size - 1) || (count == size) || (count > size)) {
+ xmlFree(buf);
+ size += BUFSIZ;
+ buf = (xmlChar *) xmlMalloc(size);
+ if (buf == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlTextWriterVSprintf : out of memory!\n");
+ return NULL;
+ }
+ }
+
+ return buf;
+}
+
+/**
+ * xmlTextWriterStartDocumentCallback:
+ * @ctx: the user data (XML parser context)
+ *
+ * called at the start of document processing.
+ */
+static void
+xmlTextWriterStartDocumentCallback(void *ctx)
+{
+ xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ xmlDocPtr doc;
+
+#ifdef DEBUG_SAX
+ xmlGenericError(xmlGenericErrorContext, "SAX.startDocument()\n");
+#endif
+ if (ctxt->html) {
+#ifdef LIBXML_HTML_ENABLED
+ if (ctxt->myDoc == NULL)
+ ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL);
+ if (ctxt->myDoc == NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.startDocument(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+ }
+#else
+ xmlGenericError(xmlGenericErrorContext,
+ "libxml2 built without HTML support\n");
+ ctxt->errNo = XML_ERR_INTERNAL_ERROR;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+#endif
+ } else {
+ doc = ctxt->myDoc;
+ if (doc == NULL)
+ doc = ctxt->myDoc = xmlNewDoc(ctxt->version);
+ if (doc != NULL) {
+ if (doc->children == NULL) {
+ if (ctxt->encoding != NULL)
+ doc->encoding = xmlStrdup(ctxt->encoding);
+ else
+ doc->encoding = NULL;
+ doc->standalone = ctxt->standalone;
+ }
+ } else {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData,
+ "SAX.startDocument(): out of memory\n");
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ return;
+ }
+ }
+ if ((ctxt->myDoc != NULL) && (ctxt->myDoc->URL == NULL) &&
+ (ctxt->input != NULL) && (ctxt->input->filename != NULL)) {
+ ctxt->myDoc->URL =
+ xmlCanonicPath((const xmlChar *) ctxt->input->filename);
+ if (ctxt->myDoc->URL == NULL)
+ ctxt->myDoc->URL =
+ xmlStrdup((const xmlChar *) ctxt->input->filename);
+ }
+}
+
+/**
+ * xmlTextWriterSetIndent:
+ * @writer: the xmlTextWriterPtr
+ * @indent: do indentation?
+ *
+ * Set indentation output. indent = 0 do not indentation. indent > 0 do indentation.
+ *
+ * Returns -1 on error or 0 otherwise.
+ */
+int
+xmlTextWriterSetIndent(xmlTextWriterPtr writer, int indent)
+{
+ if (indent < 0)
+ return -1;
+
+ writer->indent = indent;
+ writer->doindent = 1;
+
+ return 0;
+}
+
+/**
+ * xmlTextWriterSetIndentString:
+ * @writer: the xmlTextWriterPtr
+ * @str: the xmlChar string
+ *
+ * Set string indentation.
+ *
+ * Returns -1 on error or 0 otherwise.
+ */
+int
+xmlTextWriterSetIndentString(xmlTextWriterPtr writer, const xmlChar * str)
+{
+ if (!str)
+ return -1;
+
+ if (writer->ichar != NULL)
+ xmlFree(writer->ichar);
+ writer->ichar = xmlStrdup(str);
+
+ if (!writer->ichar)
+ return -1;
+ else
+ return 0;
+}
+
+/**
+ * xmlTextWriterWriteIndent:
+ * @writer: the xmlTextWriterPtr
+ *
+ * Write indent string.
+ *
+ * Returns -1 on error or the number of strings written.
+ */
+static int
+xmlTextWriterWriteIndent(xmlTextWriterPtr writer)
+{
+ int lksize;
+ int i;
+ int ret;
+
+ lksize = xmlListSize(writer->nodes);
+ if (lksize < 1)
+ return (-1); /* list is empty */
+ for (i = 0; i < (lksize - 1); i++) {
+ ret = xmlOutputBufferWriteString(writer->out,
+ (const char *) writer->ichar);
+ if (ret == -1)
+ return (-1);
+ }
+
+ return (lksize - 1);
+}
+
+/**
+ * xmlTextWriterHandleStateDependencies:
+ * @writer: the xmlTextWriterPtr
+ * @p: the xmlTextWriterStackEntry
+ *
+ * Write state dependent strings.
+ *
+ * Returns -1 on error or the number of characters written.
+ */
+static int
+xmlTextWriterHandleStateDependencies(xmlTextWriterPtr writer,
+ xmlTextWriterStackEntry * p)
+{
+ int count;
+ int sum;
+ char extra[3];
+
+ if (writer == NULL)
+ return -1;
+
+ if (p == NULL)
+ return 0;
+
+ sum = 0;
+ extra[0] = extra[1] = extra[2] = '\0';
+ if (p != 0) {
+ sum = 0;
+ switch (p->state) {
+ case XML_TEXTWRITER_NAME:
+ extra[0] = '>';
+ p->state = XML_TEXTWRITER_TEXT;
+ break;
+ case XML_TEXTWRITER_PI:
+ extra[0] = ' ';
+ p->state = XML_TEXTWRITER_PI_TEXT;
+ break;
+ case XML_TEXTWRITER_DTD:
+ extra[0] = ' ';
+ extra[1] = '[';
+ p->state = XML_TEXTWRITER_DTD_TEXT;
+ break;
+ case XML_TEXTWRITER_DTD_ELEM:
+ extra[0] = ' ';
+ p->state = XML_TEXTWRITER_DTD_ELEM_TEXT;
+ break;
+ case XML_TEXTWRITER_DTD_ATTL:
+ extra[0] = ' ';
+ p->state = XML_TEXTWRITER_DTD_ATTL_TEXT;
+ break;
+ case XML_TEXTWRITER_DTD_ENTY:
+ case XML_TEXTWRITER_DTD_PENT:
+ extra[0] = ' ';
+ extra[1] = writer->qchar;
+ p->state = XML_TEXTWRITER_DTD_ENTY_TEXT;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (*extra != '\0') {
+ count = xmlOutputBufferWriteString(writer->out, extra);
+ if (count < 0)
+ return -1;
+ sum += count;
+ }
+
+ return sum;
+}
+
+#endif
diff --git a/xpath.c b/xpath.c
new file mode 100644
index 0000000..881e936
--- /dev/null
+++ b/xpath.c
@@ -0,0 +1,11381 @@
+/*
+ * xpath.c: XML Path Language implementation
+ * XPath is a language for addressing parts of an XML document,
+ * designed to be used by both XSLT and XPointer
+ *
+ * Reference: W3C Recommendation 16 November 1999
+ * http://www.w3.org/TR/1999/REC-xpath-19991116
+ * Public reference:
+ * http://www.w3.org/TR/xpath
+ *
+ * See Copyright for the status of this software
+ *
+ * Author: daniel@veillard.com
+ *
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+#ifdef HAVE_FLOAT_H
+#include <float.h>
+#endif
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+
+#include <libxml/xmlmemory.h>
+#include <libxml/tree.h>
+#include <libxml/valid.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+#include <libxml/parserInternals.h>
+#include <libxml/hash.h>
+#ifdef LIBXML_XPTR_ENABLED
+#include <libxml/xpointer.h>
+#endif
+#ifdef LIBXML_DEBUG_ENABLED
+#include <libxml/debugXML.h>
+#endif
+#include <libxml/xmlerror.h>
+#include <libxml/threads.h>
+#include <libxml/globals.h>
+
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+#if defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XPATH_ENABLED)
+/************************************************************************
+ * *
+ * Floating point stuff *
+ * *
+ ************************************************************************/
+
+#ifndef TRIO_REPLACE_STDIO
+#define TRIO_PUBLIC static
+#endif
+#include "trionan.c"
+
+/*
+ * The lack of portability of this section of the libc is annoying !
+ */
+double xmlXPathNAN = 0;
+double xmlXPathPINF = 1;
+double xmlXPathNINF = -1;
+double xmlXPathNZERO = 0;
+static int xmlXPathInitialized = 0;
+
+/**
+ * xmlXPathInit:
+ *
+ * Initialize the XPath environment
+ */
+void
+xmlXPathInit(void) {
+ if (xmlXPathInitialized) return;
+
+ xmlXPathPINF = trio_pinf();
+ xmlXPathNINF = trio_ninf();
+ xmlXPathNAN = trio_nan();
+ xmlXPathNZERO = trio_nzero();
+
+ xmlXPathInitialized = 1;
+}
+
+/**
+ * xmlXPathIsNaN:
+ * @val: a double value
+ *
+ * Provides a portable isnan() function to detect whether a double
+ * is a NotaNumber. Based on trio code
+ * http://sourceforge.net/projects/ctrio/
+ *
+ * Returns 1 if the value is a NaN, 0 otherwise
+ */
+int
+xmlXPathIsNaN(double val) {
+ return(trio_isnan(val));
+}
+
+/**
+ * xmlXPathIsInf:
+ * @val: a double value
+ *
+ * Provides a portable isinf() function to detect whether a double
+ * is a +Infinite or -Infinite. Based on trio code
+ * http://sourceforge.net/projects/ctrio/
+ *
+ * Returns 1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise
+ */
+int
+xmlXPathIsInf(double val) {
+ return(trio_isinf(val));
+}
+
+#endif /* SCHEMAS or XPATH */
+#ifdef LIBXML_XPATH_ENABLED
+/**
+ * xmlXPathGetSign:
+ * @val: a double value
+ *
+ * Provides a portable function to detect the sign of a double
+ * Modified from trio code
+ * http://sourceforge.net/projects/ctrio/
+ *
+ * Returns 1 if the value is Negative, 0 if positive
+ */
+static int
+xmlXPathGetSign(double val) {
+ return(trio_signbit(val));
+}
+
+
+/*
+ * TODO: when compatibility allows remove all "fake node libxslt" strings
+ * the test should just be name[0] = ' '
+ */
+/* #define DEBUG */
+/* #define DEBUG_STEP */
+/* #define DEBUG_STEP_NTH */
+/* #define DEBUG_EXPR */
+/* #define DEBUG_EVAL_COUNTS */
+
+static xmlNs xmlXPathXMLNamespaceStruct = {
+ NULL,
+ XML_NAMESPACE_DECL,
+ XML_XML_NAMESPACE,
+ BAD_CAST "xml",
+ NULL
+};
+static xmlNsPtr xmlXPathXMLNamespace = &xmlXPathXMLNamespaceStruct;
+#ifndef LIBXML_THREAD_ENABLED
+/*
+ * Optimizer is disabled only when threaded apps are detected while
+ * the library ain't compiled for thread safety.
+ */
+static int xmlXPathDisableOptimizer = 0;
+#endif
+
+/************************************************************************
+ * *
+ * Error handling routines *
+ * *
+ ************************************************************************/
+
+/*
+ * The array xmlXPathErrorMessages corresponds to the enum xmlXPathError
+ */
+static const char *xmlXPathErrorMessages[] = {
+ "Ok\n",
+ "Number encoding\n",
+ "Unfinished literal\n",
+ "Start of literal\n",
+ "Expected $ for variable reference\n",
+ "Undefined variable\n",
+ "Invalid predicate\n",
+ "Invalid expression\n",
+ "Missing closing curly brace\n",
+ "Unregistered function\n",
+ "Invalid operand\n",
+ "Invalid type\n",
+ "Invalid number of arguments\n",
+ "Invalid context size\n",
+ "Invalid context position\n",
+ "Memory allocation error\n",
+ "Syntax error\n",
+ "Resource error\n",
+ "Sub resource error\n",
+ "Undefined namespace prefix\n",
+ "Encoding error\n",
+ "Char out of XML range\n"
+};
+
+
+/**
+ * xmlXPathErrMemory:
+ * @ctxt: an XPath context
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlXPathErrMemory(xmlXPathContextPtr ctxt, const char *extra)
+{
+ if (ctxt != NULL) {
+ if (extra) {
+ xmlChar buf[200];
+
+ xmlStrPrintf(buf, 200,
+ BAD_CAST "Memory allocation failed : %s\n",
+ extra);
+ ctxt->lastError.message = (char *) xmlStrdup(buf);
+ } else {
+ ctxt->lastError.message = (char *)
+ xmlStrdup(BAD_CAST "Memory allocation failed\n");
+ }
+ ctxt->lastError.domain = XML_FROM_XPATH;
+ ctxt->lastError.code = XML_ERR_NO_MEMORY;
+ if (ctxt->error != NULL)
+ ctxt->error(ctxt->userData, &ctxt->lastError);
+ } else {
+ if (extra)
+ __xmlRaiseError(NULL, NULL, NULL,
+ NULL, NULL, XML_FROM_XPATH,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
+ extra, NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+ else
+ __xmlRaiseError(NULL, NULL, NULL,
+ NULL, NULL, XML_FROM_XPATH,
+ XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
+ NULL, NULL, NULL, 0, 0,
+ "Memory allocation failed\n");
+ }
+}
+
+/**
+ * xmlXPathErrMemory:
+ * @ctxt: an XPath parser context
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlXPathPErrMemory(xmlXPathParserContextPtr ctxt, const char *extra)
+{
+ ctxt->error = XPATH_MEMORY_ERROR;
+ if (ctxt == NULL)
+ xmlXPathErrMemory(NULL, extra);
+ else
+ xmlXPathErrMemory(ctxt->context, extra);
+}
+
+/**
+ * xmlXPathErr:
+ * @ctxt: a XPath parser context
+ * @error: the error code
+ *
+ * Handle a Relax NG Parsing error
+ */
+void
+xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
+{
+ if (ctxt == NULL) {
+ __xmlRaiseError(NULL, NULL, NULL,
+ NULL, NULL, XML_FROM_XPATH,
+ error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
+ XML_ERR_ERROR, NULL, 0,
+ NULL, NULL, NULL, 0, 0,
+ xmlXPathErrorMessages[error]);
+ return;
+ }
+ ctxt->error = error;
+ if (ctxt->context == NULL) {
+ __xmlRaiseError(NULL, NULL, NULL,
+ NULL, NULL, XML_FROM_XPATH,
+ error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
+ XML_ERR_ERROR, NULL, 0,
+ (const char *) ctxt->base, NULL, NULL,
+ ctxt->cur - ctxt->base, 0,
+ xmlXPathErrorMessages[error]);
+ return;
+ }
+ ctxt->context->lastError.domain = XML_FROM_XPATH;
+ ctxt->context->lastError.code = error + XML_XPATH_EXPRESSION_OK -
+ XPATH_EXPRESSION_OK;
+ ctxt->context->lastError.level = XML_ERR_ERROR;
+ ctxt->context->lastError.str1 = (char *) xmlStrdup(ctxt->base);
+ ctxt->context->lastError.int1 = ctxt->cur - ctxt->base;
+ ctxt->context->lastError.node = ctxt->context->debugNode;
+ if (ctxt->context->error != NULL) {
+ ctxt->context->error(ctxt->context->userData,
+ &ctxt->context->lastError);
+ } else {
+ __xmlRaiseError(NULL, NULL, NULL,
+ NULL, ctxt->context->debugNode, XML_FROM_XPATH,
+ error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
+ XML_ERR_ERROR, NULL, 0,
+ (const char *) ctxt->base, NULL, NULL,
+ ctxt->cur - ctxt->base, 0,
+ xmlXPathErrorMessages[error]);
+ }
+
+}
+
+/**
+ * xmlXPatherror:
+ * @ctxt: the XPath Parser context
+ * @file: the file name
+ * @line: the line number
+ * @no: the error number
+ *
+ * Formats an error message.
+ */
+void
+xmlXPatherror(xmlXPathParserContextPtr ctxt, const char *file ATTRIBUTE_UNUSED,
+ int line ATTRIBUTE_UNUSED, int no) {
+ xmlXPathErr(ctxt, no);
+}
+
+
+/************************************************************************
+ * *
+ * Parser Types *
+ * *
+ ************************************************************************/
+
+/*
+ * Types are private:
+ */
+
+typedef enum {
+ XPATH_OP_END=0,
+ XPATH_OP_AND,
+ XPATH_OP_OR,
+ XPATH_OP_EQUAL,
+ XPATH_OP_CMP,
+ XPATH_OP_PLUS,
+ XPATH_OP_MULT,
+ XPATH_OP_UNION,
+ XPATH_OP_ROOT,
+ XPATH_OP_NODE,
+ XPATH_OP_RESET,
+ XPATH_OP_COLLECT,
+ XPATH_OP_VALUE,
+ XPATH_OP_VARIABLE,
+ XPATH_OP_FUNCTION,
+ XPATH_OP_ARG,
+ XPATH_OP_PREDICATE,
+ XPATH_OP_FILTER,
+ XPATH_OP_SORT
+#ifdef LIBXML_XPTR_ENABLED
+ ,XPATH_OP_RANGETO
+#endif
+} xmlXPathOp;
+
+typedef enum {
+ AXIS_ANCESTOR = 1,
+ AXIS_ANCESTOR_OR_SELF,
+ AXIS_ATTRIBUTE,
+ AXIS_CHILD,
+ AXIS_DESCENDANT,
+ AXIS_DESCENDANT_OR_SELF,
+ AXIS_FOLLOWING,
+ AXIS_FOLLOWING_SIBLING,
+ AXIS_NAMESPACE,
+ AXIS_PARENT,
+ AXIS_PRECEDING,
+ AXIS_PRECEDING_SIBLING,
+ AXIS_SELF
+} xmlXPathAxisVal;
+
+typedef enum {
+ NODE_TEST_NONE = 0,
+ NODE_TEST_TYPE = 1,
+ NODE_TEST_PI = 2,
+ NODE_TEST_ALL = 3,
+ NODE_TEST_NS = 4,
+ NODE_TEST_NAME = 5
+} xmlXPathTestVal;
+
+typedef enum {
+ NODE_TYPE_NODE = 0,
+ NODE_TYPE_COMMENT = XML_COMMENT_NODE,
+ NODE_TYPE_TEXT = XML_TEXT_NODE,
+ NODE_TYPE_PI = XML_PI_NODE
+} xmlXPathTypeVal;
+
+
+typedef struct _xmlXPathStepOp xmlXPathStepOp;
+typedef xmlXPathStepOp *xmlXPathStepOpPtr;
+struct _xmlXPathStepOp {
+ xmlXPathOp op; /* The identifier of the operation */
+ int ch1; /* First child */
+ int ch2; /* Second child */
+ int value;
+ int value2;
+ int value3;
+ void *value4;
+ void *value5;
+ void *cache;
+ void *cacheURI;
+};
+
+struct _xmlXPathCompExpr {
+ int nbStep; /* Number of steps in this expression */
+ int maxStep; /* Maximum number of steps allocated */
+ xmlXPathStepOp *steps; /* ops for computation of this expression */
+ int last; /* index of last step in expression */
+ xmlChar *expr; /* the expression being computed */
+ xmlDictPtr dict; /* the dictionnary to use if any */
+#ifdef DEBUG_EVAL_COUNTS
+ int nb;
+ xmlChar *string;
+#endif
+};
+
+/************************************************************************
+ * *
+ * Parser Type functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPathNewCompExpr:
+ *
+ * Create a new Xpath component
+ *
+ * Returns the newly allocated xmlXPathCompExprPtr or NULL in case of error
+ */
+static xmlXPathCompExprPtr
+xmlXPathNewCompExpr(void) {
+ xmlXPathCompExprPtr cur;
+
+ cur = (xmlXPathCompExprPtr) xmlMalloc(sizeof(xmlXPathCompExpr));
+ if (cur == NULL) {
+ xmlXPathErrMemory(NULL, "allocating component\n");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlXPathCompExpr));
+ cur->maxStep = 10;
+ cur->nbStep = 0;
+ cur->steps = (xmlXPathStepOp *) xmlMalloc(cur->maxStep *
+ sizeof(xmlXPathStepOp));
+ if (cur->steps == NULL) {
+ xmlXPathErrMemory(NULL, "allocating steps\n");
+ xmlFree(cur);
+ return(NULL);
+ }
+ memset(cur->steps, 0, cur->maxStep * sizeof(xmlXPathStepOp));
+ cur->last = -1;
+#ifdef DEBUG_EVAL_COUNTS
+ cur->nb = 0;
+#endif
+ return(cur);
+}
+
+/**
+ * xmlXPathFreeCompExpr:
+ * @comp: an XPATH comp
+ *
+ * Free up the memory allocated by @comp
+ */
+void
+xmlXPathFreeCompExpr(xmlXPathCompExprPtr comp)
+{
+ xmlXPathStepOpPtr op;
+ int i;
+
+ if (comp == NULL)
+ return;
+ if (comp->dict == NULL) {
+ for (i = 0; i < comp->nbStep; i++) {
+ op = &comp->steps[i];
+ if (op->value4 != NULL) {
+ if (op->op == XPATH_OP_VALUE)
+ xmlXPathFreeObject(op->value4);
+ else
+ xmlFree(op->value4);
+ }
+ if (op->value5 != NULL)
+ xmlFree(op->value5);
+ }
+ } else {
+ for (i = 0; i < comp->nbStep; i++) {
+ op = &comp->steps[i];
+ if (op->value4 != NULL) {
+ if (op->op == XPATH_OP_VALUE)
+ xmlXPathFreeObject(op->value4);
+ }
+ }
+ xmlDictFree(comp->dict);
+ }
+ if (comp->steps != NULL) {
+ xmlFree(comp->steps);
+ }
+#ifdef DEBUG_EVAL_COUNTS
+ if (comp->string != NULL) {
+ xmlFree(comp->string);
+ }
+#endif
+ if (comp->expr != NULL) {
+ xmlFree(comp->expr);
+ }
+
+ xmlFree(comp);
+}
+
+/**
+ * xmlXPathCompExprAdd:
+ * @comp: the compiled expression
+ * @ch1: first child index
+ * @ch2: second child index
+ * @op: an op
+ * @value: the first int value
+ * @value2: the second int value
+ * @value3: the third int value
+ * @value4: the first string value
+ * @value5: the second string value
+ *
+ * Add a step to an XPath Compiled Expression
+ *
+ * Returns -1 in case of failure, the index otherwise
+ */
+static int
+xmlXPathCompExprAdd(xmlXPathCompExprPtr comp, int ch1, int ch2,
+ xmlXPathOp op, int value,
+ int value2, int value3, void *value4, void *value5) {
+ if (comp->nbStep >= comp->maxStep) {
+ xmlXPathStepOp *real;
+
+ comp->maxStep *= 2;
+ real = (xmlXPathStepOp *) xmlRealloc(comp->steps,
+ comp->maxStep * sizeof(xmlXPathStepOp));
+ if (real == NULL) {
+ comp->maxStep /= 2;
+ xmlXPathErrMemory(NULL, "adding step\n");
+ return(-1);
+ }
+ comp->steps = real;
+ }
+ comp->last = comp->nbStep;
+ comp->steps[comp->nbStep].ch1 = ch1;
+ comp->steps[comp->nbStep].ch2 = ch2;
+ comp->steps[comp->nbStep].op = op;
+ comp->steps[comp->nbStep].value = value;
+ comp->steps[comp->nbStep].value2 = value2;
+ comp->steps[comp->nbStep].value3 = value3;
+ if ((comp->dict != NULL) &&
+ ((op == XPATH_OP_FUNCTION) || (op == XPATH_OP_VARIABLE) ||
+ (op == XPATH_OP_COLLECT))) {
+ if (value4 != NULL) {
+ comp->steps[comp->nbStep].value4 = (xmlChar *)
+ (void *)xmlDictLookup(comp->dict, value4, -1);
+ xmlFree(value4);
+ } else
+ comp->steps[comp->nbStep].value4 = NULL;
+ if (value5 != NULL) {
+ comp->steps[comp->nbStep].value5 = (xmlChar *)
+ (void *)xmlDictLookup(comp->dict, value5, -1);
+ xmlFree(value5);
+ } else
+ comp->steps[comp->nbStep].value5 = NULL;
+ } else {
+ comp->steps[comp->nbStep].value4 = value4;
+ comp->steps[comp->nbStep].value5 = value5;
+ }
+ comp->steps[comp->nbStep].cache = NULL;
+ return(comp->nbStep++);
+}
+
+/**
+ * xmlXPathCompSwap:
+ * @comp: the compiled expression
+ * @op: operation index
+ *
+ * Swaps 2 operations in the compiled expression
+ */
+static void
+xmlXPathCompSwap(xmlXPathStepOpPtr op) {
+ int tmp;
+
+#ifndef LIBXML_THREAD_ENABLED
+ /*
+ * Since this manipulates possibly shared variables, this is
+ * disabled if one detects that the library is used in a multithreaded
+ * application
+ */
+ if (xmlXPathDisableOptimizer)
+ return;
+#endif
+
+ tmp = op->ch1;
+ op->ch1 = op->ch2;
+ op->ch2 = tmp;
+}
+
+#define PUSH_FULL_EXPR(op, op1, op2, val, val2, val3, val4, val5) \
+ xmlXPathCompExprAdd(ctxt->comp, (op1), (op2), \
+ (op), (val), (val2), (val3), (val4), (val5))
+#define PUSH_LONG_EXPR(op, val, val2, val3, val4, val5) \
+ xmlXPathCompExprAdd(ctxt->comp, ctxt->comp->last, -1, \
+ (op), (val), (val2), (val3), (val4), (val5))
+
+#define PUSH_LEAVE_EXPR(op, val, val2) \
+xmlXPathCompExprAdd(ctxt->comp, -1, -1, (op), (val), (val2), 0 ,NULL ,NULL)
+
+#define PUSH_UNARY_EXPR(op, ch, val, val2) \
+xmlXPathCompExprAdd(ctxt->comp, (ch), -1, (op), (val), (val2), 0 ,NULL ,NULL)
+
+#define PUSH_BINARY_EXPR(op, ch1, ch2, val, val2) \
+xmlXPathCompExprAdd(ctxt->comp, (ch1), (ch2), (op), \
+ (val), (val2), 0 ,NULL ,NULL)
+
+/************************************************************************
+ * *
+ * Debugging related functions *
+ * *
+ ************************************************************************/
+
+#define STRANGE \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Internal error at %s:%d\n", \
+ __FILE__, __LINE__);
+
+#ifdef LIBXML_DEBUG_ENABLED
+static void
+xmlXPathDebugDumpNode(FILE *output, xmlNodePtr cur, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+ if (cur == NULL) {
+ fprintf(output, shift);
+ fprintf(output, "Node is NULL !\n");
+ return;
+
+ }
+
+ if ((cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE)) {
+ fprintf(output, shift);
+ fprintf(output, " /\n");
+ } else if (cur->type == XML_ATTRIBUTE_NODE)
+ xmlDebugDumpAttr(output, (xmlAttrPtr)cur, depth);
+ else
+ xmlDebugDumpOneNode(output, cur, depth);
+}
+static void
+xmlXPathDebugDumpNodeList(FILE *output, xmlNodePtr cur, int depth) {
+ xmlNodePtr tmp;
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+ if (cur == NULL) {
+ fprintf(output, shift);
+ fprintf(output, "Node is NULL !\n");
+ return;
+
+ }
+
+ while (cur != NULL) {
+ tmp = cur;
+ cur = cur->next;
+ xmlDebugDumpOneNode(output, tmp, depth);
+ }
+}
+
+static void
+xmlXPathDebugDumpNodeSet(FILE *output, xmlNodeSetPtr cur, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ if (cur == NULL) {
+ fprintf(output, shift);
+ fprintf(output, "NodeSet is NULL !\n");
+ return;
+
+ }
+
+ if (cur != NULL) {
+ fprintf(output, "Set contains %d nodes:\n", cur->nodeNr);
+ for (i = 0;i < cur->nodeNr;i++) {
+ fprintf(output, shift);
+ fprintf(output, "%d", i + 1);
+ xmlXPathDebugDumpNode(output, cur->nodeTab[i], depth + 1);
+ }
+ }
+}
+
+static void
+xmlXPathDebugDumpValueTree(FILE *output, xmlNodeSetPtr cur, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ if ((cur == NULL) || (cur->nodeNr == 0) || (cur->nodeTab[0] == NULL)) {
+ fprintf(output, shift);
+ fprintf(output, "Value Tree is NULL !\n");
+ return;
+
+ }
+
+ fprintf(output, shift);
+ fprintf(output, "%d", i + 1);
+ xmlXPathDebugDumpNodeList(output, cur->nodeTab[0]->children, depth + 1);
+}
+#if defined(LIBXML_XPTR_ENABLED)
+static void
+xmlXPathDebugDumpLocationSet(FILE *output, xmlLocationSetPtr cur, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ if (cur == NULL) {
+ fprintf(output, shift);
+ fprintf(output, "LocationSet is NULL !\n");
+ return;
+
+ }
+
+ for (i = 0;i < cur->locNr;i++) {
+ fprintf(output, shift);
+ fprintf(output, "%d : ", i + 1);
+ xmlXPathDebugDumpObject(output, cur->locTab[i], depth + 1);
+ }
+}
+#endif /* LIBXML_XPTR_ENABLED */
+
+/**
+ * xmlXPathDebugDumpObject:
+ * @output: the FILE * to dump the output
+ * @cur: the object to inspect
+ * @depth: indentation level
+ *
+ * Dump the content of the object for debugging purposes
+ */
+void
+xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+
+ if (cur == NULL) {
+ fprintf(output, "Object is empty (NULL)\n");
+ return;
+ }
+ switch(cur->type) {
+ case XPATH_UNDEFINED:
+ fprintf(output, "Object is uninitialized\n");
+ break;
+ case XPATH_NODESET:
+ fprintf(output, "Object is a Node Set :\n");
+ xmlXPathDebugDumpNodeSet(output, cur->nodesetval, depth);
+ break;
+ case XPATH_XSLT_TREE:
+ fprintf(output, "Object is an XSLT value tree :\n");
+ xmlXPathDebugDumpValueTree(output, cur->nodesetval, depth);
+ break;
+ case XPATH_BOOLEAN:
+ fprintf(output, "Object is a Boolean : ");
+ if (cur->boolval) fprintf(output, "true\n");
+ else fprintf(output, "false\n");
+ break;
+ case XPATH_NUMBER:
+ switch (xmlXPathIsInf(cur->floatval)) {
+ case 1:
+ fprintf(output, "Object is a number : Infinity\n");
+ break;
+ case -1:
+ fprintf(output, "Object is a number : -Infinity\n");
+ break;
+ default:
+ if (xmlXPathIsNaN(cur->floatval)) {
+ fprintf(output, "Object is a number : NaN\n");
+ } else if (cur->floatval == 0 && xmlXPathGetSign(cur->floatval) != 0) {
+ fprintf(output, "Object is a number : 0\n");
+ } else {
+ fprintf(output, "Object is a number : %0g\n", cur->floatval);
+ }
+ }
+ break;
+ case XPATH_STRING:
+ fprintf(output, "Object is a string : ");
+ xmlDebugDumpString(output, cur->stringval);
+ fprintf(output, "\n");
+ break;
+ case XPATH_POINT:
+ fprintf(output, "Object is a point : index %d in node", cur->index);
+ xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user, depth + 1);
+ fprintf(output, "\n");
+ break;
+ case XPATH_RANGE:
+ if ((cur->user2 == NULL) ||
+ ((cur->user2 == cur->user) && (cur->index == cur->index2))) {
+ fprintf(output, "Object is a collapsed range :\n");
+ fprintf(output, shift);
+ if (cur->index >= 0)
+ fprintf(output, "index %d in ", cur->index);
+ fprintf(output, "node\n");
+ xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user,
+ depth + 1);
+ } else {
+ fprintf(output, "Object is a range :\n");
+ fprintf(output, shift);
+ fprintf(output, "From ");
+ if (cur->index >= 0)
+ fprintf(output, "index %d in ", cur->index);
+ fprintf(output, "node\n");
+ xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user,
+ depth + 1);
+ fprintf(output, shift);
+ fprintf(output, "To ");
+ if (cur->index2 >= 0)
+ fprintf(output, "index %d in ", cur->index2);
+ fprintf(output, "node\n");
+ xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user2,
+ depth + 1);
+ fprintf(output, "\n");
+ }
+ break;
+ case XPATH_LOCATIONSET:
+#if defined(LIBXML_XPTR_ENABLED)
+ fprintf(output, "Object is a Location Set:\n");
+ xmlXPathDebugDumpLocationSet(output,
+ (xmlLocationSetPtr) cur->user, depth);
+#endif
+ break;
+ case XPATH_USERS:
+ fprintf(output, "Object is user defined\n");
+ break;
+ }
+}
+
+static void
+xmlXPathDebugDumpStepOp(FILE *output, xmlXPathCompExprPtr comp,
+ xmlXPathStepOpPtr op, int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+ if (op == NULL) {
+ fprintf(output, "Step is NULL\n");
+ return;
+ }
+ switch (op->op) {
+ case XPATH_OP_END:
+ fprintf(output, "END"); break;
+ case XPATH_OP_AND:
+ fprintf(output, "AND"); break;
+ case XPATH_OP_OR:
+ fprintf(output, "OR"); break;
+ case XPATH_OP_EQUAL:
+ if (op->value)
+ fprintf(output, "EQUAL =");
+ else
+ fprintf(output, "EQUAL !=");
+ break;
+ case XPATH_OP_CMP:
+ if (op->value)
+ fprintf(output, "CMP <");
+ else
+ fprintf(output, "CMP >");
+ if (!op->value2)
+ fprintf(output, "=");
+ break;
+ case XPATH_OP_PLUS:
+ if (op->value == 0)
+ fprintf(output, "PLUS -");
+ else if (op->value == 1)
+ fprintf(output, "PLUS +");
+ else if (op->value == 2)
+ fprintf(output, "PLUS unary -");
+ else if (op->value == 3)
+ fprintf(output, "PLUS unary - -");
+ break;
+ case XPATH_OP_MULT:
+ if (op->value == 0)
+ fprintf(output, "MULT *");
+ else if (op->value == 1)
+ fprintf(output, "MULT div");
+ else
+ fprintf(output, "MULT mod");
+ break;
+ case XPATH_OP_UNION:
+ fprintf(output, "UNION"); break;
+ case XPATH_OP_ROOT:
+ fprintf(output, "ROOT"); break;
+ case XPATH_OP_NODE:
+ fprintf(output, "NODE"); break;
+ case XPATH_OP_RESET:
+ fprintf(output, "RESET"); break;
+ case XPATH_OP_SORT:
+ fprintf(output, "SORT"); break;
+ case XPATH_OP_COLLECT: {
+ xmlXPathAxisVal axis = (xmlXPathAxisVal)op->value;
+ xmlXPathTestVal test = (xmlXPathTestVal)op->value2;
+ xmlXPathTypeVal type = (xmlXPathTypeVal)op->value3;
+ const xmlChar *prefix = op->value4;
+ const xmlChar *name = op->value5;
+
+ fprintf(output, "COLLECT ");
+ switch (axis) {
+ case AXIS_ANCESTOR:
+ fprintf(output, " 'ancestors' "); break;
+ case AXIS_ANCESTOR_OR_SELF:
+ fprintf(output, " 'ancestors-or-self' "); break;
+ case AXIS_ATTRIBUTE:
+ fprintf(output, " 'attributes' "); break;
+ case AXIS_CHILD:
+ fprintf(output, " 'child' "); break;
+ case AXIS_DESCENDANT:
+ fprintf(output, " 'descendant' "); break;
+ case AXIS_DESCENDANT_OR_SELF:
+ fprintf(output, " 'descendant-or-self' "); break;
+ case AXIS_FOLLOWING:
+ fprintf(output, " 'following' "); break;
+ case AXIS_FOLLOWING_SIBLING:
+ fprintf(output, " 'following-siblings' "); break;
+ case AXIS_NAMESPACE:
+ fprintf(output, " 'namespace' "); break;
+ case AXIS_PARENT:
+ fprintf(output, " 'parent' "); break;
+ case AXIS_PRECEDING:
+ fprintf(output, " 'preceding' "); break;
+ case AXIS_PRECEDING_SIBLING:
+ fprintf(output, " 'preceding-sibling' "); break;
+ case AXIS_SELF:
+ fprintf(output, " 'self' "); break;
+ }
+ switch (test) {
+ case NODE_TEST_NONE:
+ fprintf(output, "'none' "); break;
+ case NODE_TEST_TYPE:
+ fprintf(output, "'type' "); break;
+ case NODE_TEST_PI:
+ fprintf(output, "'PI' "); break;
+ case NODE_TEST_ALL:
+ fprintf(output, "'all' "); break;
+ case NODE_TEST_NS:
+ fprintf(output, "'namespace' "); break;
+ case NODE_TEST_NAME:
+ fprintf(output, "'name' "); break;
+ }
+ switch (type) {
+ case NODE_TYPE_NODE:
+ fprintf(output, "'node' "); break;
+ case NODE_TYPE_COMMENT:
+ fprintf(output, "'comment' "); break;
+ case NODE_TYPE_TEXT:
+ fprintf(output, "'text' "); break;
+ case NODE_TYPE_PI:
+ fprintf(output, "'PI' "); break;
+ }
+ if (prefix != NULL)
+ fprintf(output, "%s:", prefix);
+ if (name != NULL)
+ fprintf(output, "%s", (const char *) name);
+ break;
+
+ }
+ case XPATH_OP_VALUE: {
+ xmlXPathObjectPtr object = (xmlXPathObjectPtr) op->value4;
+
+ fprintf(output, "ELEM ");
+ xmlXPathDebugDumpObject(output, object, 0);
+ goto finish;
+ }
+ case XPATH_OP_VARIABLE: {
+ const xmlChar *prefix = op->value5;
+ const xmlChar *name = op->value4;
+
+ if (prefix != NULL)
+ fprintf(output, "VARIABLE %s:%s", prefix, name);
+ else
+ fprintf(output, "VARIABLE %s", name);
+ break;
+ }
+ case XPATH_OP_FUNCTION: {
+ int nbargs = op->value;
+ const xmlChar *prefix = op->value5;
+ const xmlChar *name = op->value4;
+
+ if (prefix != NULL)
+ fprintf(output, "FUNCTION %s:%s(%d args)",
+ prefix, name, nbargs);
+ else
+ fprintf(output, "FUNCTION %s(%d args)", name, nbargs);
+ break;
+ }
+ case XPATH_OP_ARG: fprintf(output, "ARG"); break;
+ case XPATH_OP_PREDICATE: fprintf(output, "PREDICATE"); break;
+ case XPATH_OP_FILTER: fprintf(output, "FILTER"); break;
+#ifdef LIBXML_XPTR_ENABLED
+ case XPATH_OP_RANGETO: fprintf(output, "RANGETO"); break;
+#endif
+ default:
+ fprintf(output, "UNKNOWN %d\n", op->op); return;
+ }
+ fprintf(output, "\n");
+finish:
+ if (op->ch1 >= 0)
+ xmlXPathDebugDumpStepOp(output, comp, &comp->steps[op->ch1], depth + 1);
+ if (op->ch2 >= 0)
+ xmlXPathDebugDumpStepOp(output, comp, &comp->steps[op->ch2], depth + 1);
+}
+
+/**
+ * xmlXPathDebugDumpCompExpr:
+ * @output: the FILE * for the output
+ * @comp: the precompiled XPath expression
+ * @depth: the indentation level.
+ *
+ * Dumps the tree of the compiled XPath expression.
+ */
+void
+xmlXPathDebugDumpCompExpr(FILE *output, xmlXPathCompExprPtr comp,
+ int depth) {
+ int i;
+ char shift[100];
+
+ for (i = 0;((i < depth) && (i < 25));i++)
+ shift[2 * i] = shift[2 * i + 1] = ' ';
+ shift[2 * i] = shift[2 * i + 1] = 0;
+
+ fprintf(output, shift);
+
+ if (comp == NULL) {
+ fprintf(output, "Compiled Expression is NULL\n");
+ return;
+ }
+ fprintf(output, "Compiled Expression : %d elements\n",
+ comp->nbStep);
+ i = comp->last;
+ xmlXPathDebugDumpStepOp(output, comp, &comp->steps[i], depth + 1);
+}
+#endif /* LIBXML_DEBUG_ENABLED */
+
+/************************************************************************
+ * *
+ * Parser stacks related functions and macros *
+ * *
+ ************************************************************************/
+
+/**
+ * valuePop:
+ * @ctxt: an XPath evaluation context
+ *
+ * Pops the top XPath object from the value stack
+ *
+ * Returns the XPath object just removed
+ */
+extern xmlXPathObjectPtr
+valuePop(xmlXPathParserContextPtr ctxt)
+{
+ xmlXPathObjectPtr ret;
+
+ if (ctxt->valueNr <= 0)
+ return (0);
+ 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;
+ return (ret);
+}
+/**
+ * valuePush:
+ * @ctxt: an XPath evaluation context
+ * @value: the XPath object
+ *
+ * Pushes a new XPath object on top of the value stack
+ *
+ * returns the number of items on the value stack
+ */
+extern int
+valuePush(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr value)
+{
+ if (ctxt->valueNr >= ctxt->valueMax) {
+ ctxt->valueMax *= 2;
+ ctxt->valueTab =
+ (xmlXPathObjectPtr *) xmlRealloc(ctxt->valueTab,
+ ctxt->valueMax *
+ sizeof(ctxt->valueTab[0]));
+ if (ctxt->valueTab == NULL) {
+ xmlGenericError(xmlGenericErrorContext, "realloc failed !\n");
+ return (0);
+ }
+ }
+ ctxt->valueTab[ctxt->valueNr] = value;
+ ctxt->value = value;
+ return (ctxt->valueNr++);
+}
+
+/**
+ * xmlXPathPopBoolean:
+ * @ctxt: an XPath parser context
+ *
+ * Pops a boolean from the stack, handling conversion if needed.
+ * Check error with #xmlXPathCheckError.
+ *
+ * Returns the boolean
+ */
+int
+xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr obj;
+ int ret;
+
+ obj = valuePop(ctxt);
+ if (obj == NULL) {
+ xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
+ return(0);
+ }
+ if (obj->type != XPATH_BOOLEAN)
+ ret = xmlXPathCastToBoolean(obj);
+ else
+ ret = obj->boolval;
+ xmlXPathFreeObject(obj);
+ return(ret);
+}
+
+/**
+ * xmlXPathPopNumber:
+ * @ctxt: an XPath parser context
+ *
+ * Pops a number from the stack, handling conversion if needed.
+ * Check error with #xmlXPathCheckError.
+ *
+ * Returns the number
+ */
+double
+xmlXPathPopNumber (xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr obj;
+ double ret;
+
+ obj = valuePop(ctxt);
+ if (obj == NULL) {
+ xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
+ return(0);
+ }
+ if (obj->type != XPATH_NUMBER)
+ ret = xmlXPathCastToNumber(obj);
+ else
+ ret = obj->floatval;
+ xmlXPathFreeObject(obj);
+ return(ret);
+}
+
+/**
+ * xmlXPathPopString:
+ * @ctxt: an XPath parser context
+ *
+ * Pops a string from the stack, handling conversion if needed.
+ * Check error with #xmlXPathCheckError.
+ *
+ * Returns the string
+ */
+xmlChar *
+xmlXPathPopString (xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr obj;
+ xmlChar * ret;
+
+ obj = valuePop(ctxt);
+ if (obj == NULL) {
+ xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
+ return(NULL);
+ }
+ ret = xmlXPathCastToString(obj); /* this does required strdup */
+ /* TODO: needs refactoring somewhere else */
+ if (obj->stringval == ret)
+ obj->stringval = NULL;
+ xmlXPathFreeObject(obj);
+ return(ret);
+}
+
+/**
+ * xmlXPathPopNodeSet:
+ * @ctxt: an XPath parser context
+ *
+ * Pops a node-set from the stack, handling conversion if needed.
+ * Check error with #xmlXPathCheckError.
+ *
+ * Returns the node-set
+ */
+xmlNodeSetPtr
+xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr obj;
+ xmlNodeSetPtr ret;
+
+ if (ctxt->value == NULL) {
+ xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
+ return(NULL);
+ }
+ if (!xmlXPathStackIsNodeSet(ctxt)) {
+ xmlXPathSetTypeError(ctxt);
+ return(NULL);
+ }
+ obj = valuePop(ctxt);
+ ret = obj->nodesetval;
+ /* to fix memory leak of not clearing obj->user */
+ if (obj->boolval && obj->user != NULL)
+ xmlFreeNodeList((xmlNodePtr) obj->user);
+ xmlXPathFreeNodeSetList(obj);
+ return(ret);
+}
+
+/**
+ * xmlXPathPopExternal:
+ * @ctxt: an XPath parser context
+ *
+ * Pops an external object from the stack, handling conversion if needed.
+ * Check error with #xmlXPathCheckError.
+ *
+ * Returns the object
+ */
+void *
+xmlXPathPopExternal (xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr obj;
+ void * ret;
+
+ if (ctxt->value == NULL) {
+ xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
+ return(NULL);
+ }
+ if (ctxt->value->type != XPATH_USERS) {
+ xmlXPathSetTypeError(ctxt);
+ return(NULL);
+ }
+ obj = valuePop(ctxt);
+ ret = obj->user;
+ xmlXPathFreeObject(obj);
+ return(ret);
+}
+
+/*
+ * Macros for accessing the content. Those should be used only by the parser,
+ * and not exported.
+ *
+ * Dirty macros, i.e. one need to make assumption on the context to use them
+ *
+ * CUR_PTR return the current pointer to the xmlChar to be parsed.
+ * CUR returns the current xmlChar value, i.e. a 8 bit value
+ * in ISO-Latin or UTF-8.
+ * This should be used internally by the parser
+ * only to compare to ASCII values otherwise it would break when
+ * running with UTF-8 encoding.
+ * NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only
+ * to compare on ASCII based substring.
+ * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
+ * strings within the parser.
+ * CURRENT Returns the current char value, with the full decoding of
+ * UTF-8 if we are using this mode. It returns an int.
+ * NEXT Skip to the next character, this does the proper decoding
+ * in UTF-8 mode. It also pop-up unfinished entities on the fly.
+ * It returns the pointer to the current xmlChar.
+ */
+
+#define CUR (*ctxt->cur)
+#define SKIP(val) ctxt->cur += (val)
+#define NXT(val) ctxt->cur[(val)]
+#define CUR_PTR ctxt->cur
+#define CUR_CHAR(l) xmlXPathCurrentChar(ctxt, &l)
+
+#define COPY_BUF(l,b,i,v) \
+ if (l == 1) b[i++] = (xmlChar) v; \
+ else i += xmlCopyChar(l,&b[i],v)
+
+#define NEXTL(l) ctxt->cur += l
+
+#define SKIP_BLANKS \
+ while (IS_BLANK_CH(*(ctxt->cur))) NEXT
+
+#define CURRENT (*ctxt->cur)
+#define NEXT ((*ctxt->cur) ? ctxt->cur++: ctxt->cur)
+
+
+#ifndef DBL_DIG
+#define DBL_DIG 16
+#endif
+#ifndef DBL_EPSILON
+#define DBL_EPSILON 1E-9
+#endif
+
+#define UPPER_DOUBLE 1E9
+#define LOWER_DOUBLE 1E-5
+
+#define INTEGER_DIGITS DBL_DIG
+#define FRACTION_DIGITS (DBL_DIG + 1)
+#define EXPONENT_DIGITS (3 + 2)
+
+/**
+ * xmlXPathFormatNumber:
+ * @number: number to format
+ * @buffer: output buffer
+ * @buffersize: size of output buffer
+ *
+ * Convert the number into a string representation.
+ */
+static void
+xmlXPathFormatNumber(double number, char buffer[], int buffersize)
+{
+ switch (xmlXPathIsInf(number)) {
+ case 1:
+ if (buffersize > (int)sizeof("Infinity"))
+ snprintf(buffer, buffersize, "Infinity");
+ break;
+ case -1:
+ if (buffersize > (int)sizeof("-Infinity"))
+ snprintf(buffer, buffersize, "-Infinity");
+ break;
+ default:
+ if (xmlXPathIsNaN(number)) {
+ if (buffersize > (int)sizeof("NaN"))
+ snprintf(buffer, buffersize, "NaN");
+ } else if (number == 0 && xmlXPathGetSign(number) != 0) {
+ snprintf(buffer, buffersize, "0");
+ } else if (number == ((int) number)) {
+ char work[30];
+ char *ptr, *cur;
+ int res, value = (int) number;
+
+ ptr = &buffer[0];
+ if (value < 0) {
+ *ptr++ = '-';
+ value = -value;
+ }
+ if (value == 0) {
+ *ptr++ = '0';
+ } else {
+ 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--;
+ }
+ }
+ if (ptr - buffer < buffersize) {
+ *ptr = 0;
+ } else if (buffersize > 0) {
+ ptr--;
+ *ptr = 0;
+ }
+ } else {
+ /* 3 is sign, decimal point, and terminating zero */
+ char work[DBL_DIG + EXPONENT_DIGITS + 3];
+ int integer_place, fraction_place;
+ char *ptr;
+ char *after_fraction;
+ double absolute_value;
+ int size;
+
+ absolute_value = fabs(number);
+
+ /*
+ * First choose format - scientific or regular floating point.
+ * In either case, result is in work, and after_fraction points
+ * just past the fractional part.
+ */
+ if ( ((absolute_value > UPPER_DOUBLE) ||
+ (absolute_value < LOWER_DOUBLE)) &&
+ (absolute_value != 0.0) ) {
+ /* Use scientific notation */
+ integer_place = DBL_DIG + EXPONENT_DIGITS + 1;
+ fraction_place = DBL_DIG - 1;
+ snprintf(work, sizeof(work),"%*.*e",
+ integer_place, fraction_place, number);
+ after_fraction = strchr(work + DBL_DIG, 'e');
+ }
+ else {
+ /* Use regular notation */
+ if (absolute_value > 0.0)
+ integer_place = 1 + (int)log10(absolute_value);
+ else
+ integer_place = 0;
+ fraction_place = (integer_place > 0)
+ ? DBL_DIG - integer_place
+ : DBL_DIG;
+ size = snprintf(work, sizeof(work), "%0.*f",
+ fraction_place, number);
+ after_fraction = work + size;
+ }
+
+ /* Remove fractional trailing zeroes */
+ ptr = after_fraction;
+ while (*(--ptr) == '0')
+ ;
+ if (*ptr != '.')
+ ptr++;
+ while ((*ptr++ = *after_fraction++) != 0);
+
+ /* Finally copy result back to caller */
+ size = strlen(work) + 1;
+ if (size > buffersize) {
+ work[buffersize - 1] = 0;
+ size = buffersize;
+ }
+ memmove(buffer, work, size);
+ }
+ break;
+ }
+}
+
+
+/************************************************************************
+ * *
+ * Routines to handle NodeSets *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPathOrderDocElems:
+ * @doc: an input document
+ *
+ * Call this routine to speed up XPath computation on static documents.
+ * This stamps all the element nodes with the document order
+ * Like for line information, the order is kept in the element->content
+ * field, the value stored is actually - the node number (starting at -1)
+ * to be able to differentiate from line numbers.
+ *
+ * Returns the number of elements found in the document or -1 in case
+ * of error.
+ */
+long
+xmlXPathOrderDocElems(xmlDocPtr doc) {
+ long count = 0;
+ xmlNodePtr cur;
+
+ if (doc == NULL)
+ return(-1);
+ cur = doc->children;
+ while (cur != NULL) {
+ if (cur->type == XML_ELEMENT_NODE) {
+ cur->content = (void *) (-(++count));
+ if (cur->children != NULL) {
+ cur = cur->children;
+ continue;
+ }
+ }
+ if (cur->next != NULL) {
+ cur = cur->next;
+ continue;
+ }
+ do {
+ cur = cur->parent;
+ if (cur == NULL)
+ break;
+ if (cur == (xmlNodePtr) doc) {
+ cur = NULL;
+ break;
+ }
+ if (cur->next != NULL) {
+ cur = cur->next;
+ break;
+ }
+ } while (cur != NULL);
+ }
+ return(count);
+}
+
+/**
+ * xmlXPathCmpNodes:
+ * @node1: the first node
+ * @node2: the second node
+ *
+ * Compare two nodes w.r.t document order
+ *
+ * Returns -2 in case of error 1 if first point < second point, 0 if
+ * it's the same node, -1 otherwise
+ */
+int
+xmlXPathCmpNodes(xmlNodePtr node1, xmlNodePtr node2) {
+ int depth1, depth2;
+ int attr1 = 0, attr2 = 0;
+ xmlNodePtr attrNode1 = NULL, attrNode2 = NULL;
+ xmlNodePtr cur, root;
+
+ if ((node1 == NULL) || (node2 == NULL))
+ return(-2);
+ /*
+ * a couple of optimizations which will avoid computations in most cases
+ */
+ if (node1->type == XML_ATTRIBUTE_NODE) {
+ attr1 = 1;
+ attrNode1 = node1;
+ node1 = node1->parent;
+ }
+ if (node2->type == XML_ATTRIBUTE_NODE) {
+ attr2 = 1;
+ attrNode2 = node2;
+ node2 = node2->parent;
+ }
+ if (node1 == node2) {
+ if (attr1 == attr2) {
+ /* not required, but we keep attributes in order */
+ if (attr1 != 0) {
+ cur = attrNode2->prev;
+ while (cur != NULL) {
+ if (cur == attrNode1)
+ return (1);
+ cur = cur->prev;
+ }
+ return (-1);
+ }
+ return(0);
+ }
+ if (attr2 == 1)
+ return(1);
+ return(-1);
+ }
+ if ((node1->type == XML_NAMESPACE_DECL) ||
+ (node2->type == XML_NAMESPACE_DECL))
+ return(1);
+ if (node1 == node2->prev)
+ return(1);
+ if (node1 == node2->next)
+ return(-1);
+
+ /*
+ * Speedup using document order if availble.
+ */
+ if ((node1->type == XML_ELEMENT_NODE) &&
+ (node2->type == XML_ELEMENT_NODE) &&
+ (0 > (long) node1->content) &&
+ (0 > (long) node2->content) &&
+ (node1->doc == node2->doc)) {
+ long l1, l2;
+
+ l1 = -((long) node1->content);
+ l2 = -((long) node2->content);
+ if (l1 < l2)
+ return(1);
+ if (l1 > l2)
+ return(-1);
+ }
+
+ /*
+ * compute depth to root
+ */
+ for (depth2 = 0, cur = node2;cur->parent != NULL;cur = cur->parent) {
+ if (cur == node1)
+ return(1);
+ depth2++;
+ }
+ root = cur;
+ for (depth1 = 0, cur = node1;cur->parent != NULL;cur = cur->parent) {
+ if (cur == node2)
+ return(-1);
+ depth1++;
+ }
+ /*
+ * Distinct document (or distinct entities :-( ) case.
+ */
+ if (root != cur) {
+ return(-2);
+ }
+ /*
+ * get the nearest common ancestor.
+ */
+ while (depth1 > depth2) {
+ depth1--;
+ node1 = node1->parent;
+ }
+ while (depth2 > depth1) {
+ depth2--;
+ node2 = node2->parent;
+ }
+ while (node1->parent != node2->parent) {
+ node1 = node1->parent;
+ node2 = node2->parent;
+ /* should not happen but just in case ... */
+ if ((node1 == NULL) || (node2 == NULL))
+ return(-2);
+ }
+ /*
+ * Find who's first.
+ */
+ if (node1 == node2->prev)
+ return(1);
+ if (node1 == node2->next)
+ return(-1);
+ /*
+ * Speedup using document order if availble.
+ */
+ if ((node1->type == XML_ELEMENT_NODE) &&
+ (node2->type == XML_ELEMENT_NODE) &&
+ (0 > (long) node1->content) &&
+ (0 > (long) node2->content) &&
+ (node1->doc == node2->doc)) {
+ long l1, l2;
+
+ l1 = -((long) node1->content);
+ l2 = -((long) node2->content);
+ if (l1 < l2)
+ return(1);
+ if (l1 > l2)
+ return(-1);
+ }
+
+ for (cur = node1->next;cur != NULL;cur = cur->next)
+ if (cur == node2)
+ return(1);
+ return(-1); /* assume there is no sibling list corruption */
+}
+
+/**
+ * xmlXPathNodeSetSort:
+ * @set: the node set
+ *
+ * Sort the node set in document order
+ */
+void
+xmlXPathNodeSetSort(xmlNodeSetPtr set) {
+ int i, j, incr, len;
+ xmlNodePtr tmp;
+
+ if (set == NULL)
+ return;
+
+ /* Use Shell's sort to sort the node-set */
+ len = set->nodeNr;
+ for (incr = len / 2; incr > 0; incr /= 2) {
+ for (i = incr; i < len; i++) {
+ j = i - incr;
+ while (j >= 0) {
+ if (xmlXPathCmpNodes(set->nodeTab[j],
+ set->nodeTab[j + incr]) == -1) {
+ tmp = set->nodeTab[j];
+ set->nodeTab[j] = set->nodeTab[j + incr];
+ set->nodeTab[j + incr] = tmp;
+ j -= incr;
+ } else
+ break;
+ }
+ }
+ }
+}
+
+#define XML_NODESET_DEFAULT 10
+/**
+ * xmlXPathNodeSetDupNs:
+ * @node: the parent node of the namespace XPath node
+ * @ns: the libxml namespace declaration node.
+ *
+ * Namespace node in libxml don't match the XPath semantic. In a node set
+ * the namespace nodes are duplicated and the next pointer is set to the
+ * parent node in the XPath semantic.
+ *
+ * Returns the newly created object.
+ */
+static xmlNodePtr
+xmlXPathNodeSetDupNs(xmlNodePtr node, xmlNsPtr ns) {
+ xmlNsPtr cur;
+
+ if ((ns == NULL) || (ns->type != XML_NAMESPACE_DECL))
+ return(NULL);
+ if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
+ return((xmlNodePtr) ns);
+
+ /*
+ * Allocate a new Namespace and fill the fields.
+ */
+ cur = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
+ if (cur == NULL) {
+ xmlXPathErrMemory(NULL, "duplicating namespace\n");
+ return(NULL);
+ }
+ memset(cur, 0, sizeof(xmlNs));
+ cur->type = XML_NAMESPACE_DECL;
+ if (ns->href != NULL)
+ cur->href = xmlStrdup(ns->href);
+ if (ns->prefix != NULL)
+ cur->prefix = xmlStrdup(ns->prefix);
+ cur->next = (xmlNsPtr) node;
+ return((xmlNodePtr) cur);
+}
+
+/**
+ * xmlXPathNodeSetFreeNs:
+ * @ns: the XPath namespace node found in a nodeset.
+ *
+ * Namespace nodes in libxml don't match the XPath semantic. In a node set
+ * the namespace nodes are duplicated and the next pointer is set to the
+ * parent node in the XPath semantic. Check if such a node needs to be freed
+ */
+void
+xmlXPathNodeSetFreeNs(xmlNsPtr ns) {
+ if ((ns == NULL) || (ns->type != XML_NAMESPACE_DECL))
+ return;
+
+ if ((ns->next != NULL) && (ns->next->type != XML_NAMESPACE_DECL)) {
+ if (ns->href != NULL)
+ xmlFree((xmlChar *)ns->href);
+ if (ns->prefix != NULL)
+ xmlFree((xmlChar *)ns->prefix);
+ xmlFree(ns);
+ }
+}
+
+/**
+ * xmlXPathNodeSetCreate:
+ * @val: an initial xmlNodePtr, or NULL
+ *
+ * Create a new xmlNodeSetPtr of type double and of value @val
+ *
+ * Returns the newly created object.
+ */
+xmlNodeSetPtr
+xmlXPathNodeSetCreate(xmlNodePtr val) {
+ xmlNodeSetPtr ret;
+
+ ret = (xmlNodeSetPtr) xmlMalloc(sizeof(xmlNodeSet));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating nodeset\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlNodeSet));
+ if (val != NULL) {
+ ret->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
+ sizeof(xmlNodePtr));
+ if (ret->nodeTab == NULL) {
+ xmlXPathErrMemory(NULL, "creating nodeset\n");
+ xmlFree(ret);
+ return(NULL);
+ }
+ memset(ret->nodeTab, 0 ,
+ XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
+ ret->nodeMax = XML_NODESET_DEFAULT;
+ if (val->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) val;
+
+ ret->nodeTab[ret->nodeNr++] =
+ xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
+ } else
+ ret->nodeTab[ret->nodeNr++] = val;
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathNodeSetContains:
+ * @cur: the node-set
+ * @val: the node
+ *
+ * checks whether @cur contains @val
+ *
+ * Returns true (1) if @cur contains @val, false (0) otherwise
+ */
+int
+xmlXPathNodeSetContains (xmlNodeSetPtr cur, xmlNodePtr val) {
+ int i;
+
+ if (val->type == XML_NAMESPACE_DECL) {
+ for (i = 0; i < cur->nodeNr; i++) {
+ if (cur->nodeTab[i]->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns1, ns2;
+
+ ns1 = (xmlNsPtr) val;
+ ns2 = (xmlNsPtr) cur->nodeTab[i];
+ if (ns1 == ns2)
+ return(1);
+ if ((ns1->next != NULL) && (ns2->next == ns1->next) &&
+ (xmlStrEqual(ns1->prefix, ns2->prefix)))
+ return(1);
+ }
+ }
+ } else {
+ for (i = 0; i < cur->nodeNr; i++) {
+ if (cur->nodeTab[i] == val)
+ return(1);
+ }
+ }
+ return(0);
+}
+
+/**
+ * xmlXPathNodeSetAddNs:
+ * @cur: the initial node set
+ * @node: the hosting node
+ * @ns: a the namespace node
+ *
+ * add a new namespace node to an existing NodeSet
+ */
+void
+xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
+ int i;
+
+ if ((ns == NULL) || (node == NULL) || (ns->type != XML_NAMESPACE_DECL) ||
+ (node->type != XML_ELEMENT_NODE))
+ return;
+
+ /* @@ with_ns to check whether namespace nodes should be looked at @@ */
+ /*
+ * prevent duplicates
+ */
+ for (i = 0;i < cur->nodeNr;i++) {
+ if ((cur->nodeTab[i] != NULL) &&
+ (cur->nodeTab[i]->type == XML_NAMESPACE_DECL) &&
+ (((xmlNsPtr)cur->nodeTab[i])->next == (xmlNsPtr) node) &&
+ (xmlStrEqual(ns->prefix, ((xmlNsPtr)cur->nodeTab[i])->prefix)))
+ return;
+ }
+
+ /*
+ * grow the nodeTab if needed
+ */
+ if (cur->nodeMax == 0) {
+ cur->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
+ sizeof(xmlNodePtr));
+ if (cur->nodeTab == NULL) {
+ xmlXPathErrMemory(NULL, "growing nodeset\n");
+ return;
+ }
+ memset(cur->nodeTab, 0 ,
+ XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
+ cur->nodeMax = XML_NODESET_DEFAULT;
+ } else if (cur->nodeNr == cur->nodeMax) {
+ xmlNodePtr *temp;
+
+ cur->nodeMax *= 2;
+ temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax *
+ sizeof(xmlNodePtr));
+ if (temp == NULL) {
+ xmlXPathErrMemory(NULL, "growing nodeset\n");
+ return;
+ }
+ cur->nodeTab = temp;
+ }
+ cur->nodeTab[cur->nodeNr++] = xmlXPathNodeSetDupNs(node, ns);
+}
+
+/**
+ * xmlXPathNodeSetAdd:
+ * @cur: the initial node set
+ * @val: a new xmlNodePtr
+ *
+ * add a new xmlNodePtr to an existing NodeSet
+ */
+void
+xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) {
+ int i;
+
+ if (val == NULL) return;
+
+#if 0
+ if ((val->type == XML_ELEMENT_NODE) && (val->name[0] == ' '))
+ return; /* an XSLT fake node */
+#endif
+
+ /* @@ with_ns to check whether namespace nodes should be looked at @@ */
+ /*
+ * prevent duplcates
+ */
+ for (i = 0;i < cur->nodeNr;i++)
+ if (cur->nodeTab[i] == val) return;
+
+ /*
+ * grow the nodeTab if needed
+ */
+ if (cur->nodeMax == 0) {
+ cur->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
+ sizeof(xmlNodePtr));
+ if (cur->nodeTab == NULL) {
+ xmlXPathErrMemory(NULL, "growing nodeset\n");
+ return;
+ }
+ memset(cur->nodeTab, 0 ,
+ XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
+ cur->nodeMax = XML_NODESET_DEFAULT;
+ } else if (cur->nodeNr == cur->nodeMax) {
+ xmlNodePtr *temp;
+
+ cur->nodeMax *= 2;
+ temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax *
+ sizeof(xmlNodePtr));
+ if (temp == NULL) {
+ xmlXPathErrMemory(NULL, "growing nodeset\n");
+ return;
+ }
+ cur->nodeTab = temp;
+ }
+ if (val->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) val;
+
+ cur->nodeTab[cur->nodeNr++] =
+ xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
+ } else
+ cur->nodeTab[cur->nodeNr++] = val;
+}
+
+/**
+ * xmlXPathNodeSetAddUnique:
+ * @cur: the initial node set
+ * @val: a new xmlNodePtr
+ *
+ * add a new xmlNodePtr to an existing NodeSet, optimized version
+ * when we are sure the node is not already in the set.
+ */
+void
+xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) {
+ if (val == NULL) return;
+
+#if 0
+ if ((val->type == XML_ELEMENT_NODE) && (val->name[0] == ' '))
+ return; /* an XSLT fake node */
+#endif
+
+ /* @@ with_ns to check whether namespace nodes should be looked at @@ */
+ /*
+ * grow the nodeTab if needed
+ */
+ if (cur->nodeMax == 0) {
+ cur->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
+ sizeof(xmlNodePtr));
+ if (cur->nodeTab == NULL) {
+ xmlXPathErrMemory(NULL, "growing nodeset\n");
+ return;
+ }
+ memset(cur->nodeTab, 0 ,
+ XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
+ cur->nodeMax = XML_NODESET_DEFAULT;
+ } else if (cur->nodeNr == cur->nodeMax) {
+ xmlNodePtr *temp;
+
+ cur->nodeMax *= 2;
+ temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax *
+ sizeof(xmlNodePtr));
+ if (temp == NULL) {
+ xmlXPathErrMemory(NULL, "growing nodeset\n");
+ return;
+ }
+ cur->nodeTab = temp;
+ }
+ if (val->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) val;
+
+ cur->nodeTab[cur->nodeNr++] =
+ xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
+ } else
+ cur->nodeTab[cur->nodeNr++] = val;
+}
+
+/**
+ * xmlXPathNodeSetMerge:
+ * @val1: the first NodeSet or NULL
+ * @val2: the second NodeSet
+ *
+ * Merges two nodesets, all nodes from @val2 are added to @val1
+ * if @val1 is NULL, a new set is created and copied from @val2
+ *
+ * Returns @val1 once extended or NULL in case of error.
+ */
+xmlNodeSetPtr
+xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
+ int i, j, initNr, skip;
+
+ if (val2 == NULL) return(val1);
+ if (val1 == NULL) {
+ val1 = xmlXPathNodeSetCreate(NULL);
+ }
+
+ /* @@ with_ns to check whether namespace nodes should be looked at @@ */
+ initNr = val1->nodeNr;
+
+ for (i = 0;i < val2->nodeNr;i++) {
+ /*
+ * check against duplicates
+ */
+ skip = 0;
+ for (j = 0; j < initNr; j++) {
+ if (val1->nodeTab[j] == val2->nodeTab[i]) {
+ skip = 1;
+ break;
+ } else if ((val1->nodeTab[j]->type == XML_NAMESPACE_DECL) &&
+ (val2->nodeTab[i]->type == XML_NAMESPACE_DECL)) {
+ xmlNsPtr ns1, ns2;
+ ns1 = (xmlNsPtr) val1->nodeTab[j];
+ ns2 = (xmlNsPtr) val2->nodeTab[i];
+ if ((ns1->next == ns2->next) &&
+ (xmlStrEqual(ns1->prefix, ns2->prefix))) {
+ skip = 1;
+ break;
+ }
+ }
+ }
+ if (skip)
+ continue;
+
+ /*
+ * grow the nodeTab if needed
+ */
+ if (val1->nodeMax == 0) {
+ val1->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
+ sizeof(xmlNodePtr));
+ if (val1->nodeTab == NULL) {
+ xmlXPathErrMemory(NULL, "merging nodeset\n");
+ return(NULL);
+ }
+ memset(val1->nodeTab, 0 ,
+ XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
+ val1->nodeMax = XML_NODESET_DEFAULT;
+ } else if (val1->nodeNr == val1->nodeMax) {
+ xmlNodePtr *temp;
+
+ val1->nodeMax *= 2;
+ temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax *
+ sizeof(xmlNodePtr));
+ if (temp == NULL) {
+ xmlXPathErrMemory(NULL, "merging nodeset\n");
+ return(NULL);
+ }
+ val1->nodeTab = temp;
+ }
+ if (val2->nodeTab[i]->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) val2->nodeTab[i];
+
+ val1->nodeTab[val1->nodeNr++] =
+ xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
+ } else
+ val1->nodeTab[val1->nodeNr++] = val2->nodeTab[i];
+ }
+
+ return(val1);
+}
+
+/**
+ * xmlXPathNodeSetMergeUnique:
+ * @val1: the first NodeSet or NULL
+ * @val2: the second NodeSet
+ *
+ * Merges two nodesets, all nodes from @val2 are added to @val1
+ * if @val1 is NULL, a new set is created and copied from @val2
+ *
+ * Returns @val1 once extended or NULL in case of error.
+ */
+static xmlNodeSetPtr
+xmlXPathNodeSetMergeUnique(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
+ int i;
+
+ if (val2 == NULL) return(val1);
+ if (val1 == NULL) {
+ val1 = xmlXPathNodeSetCreate(NULL);
+ }
+
+ /* @@ with_ns to check whether namespace nodes should be looked at @@ */
+
+ for (i = 0;i < val2->nodeNr;i++) {
+ /*
+ * grow the nodeTab if needed
+ */
+ if (val1->nodeMax == 0) {
+ val1->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
+ sizeof(xmlNodePtr));
+ if (val1->nodeTab == NULL) {
+ xmlXPathErrMemory(NULL, "merging nodeset\n");
+ return(NULL);
+ }
+ memset(val1->nodeTab, 0 ,
+ XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
+ val1->nodeMax = XML_NODESET_DEFAULT;
+ } else if (val1->nodeNr == val1->nodeMax) {
+ xmlNodePtr *temp;
+
+ val1->nodeMax *= 2;
+ temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax *
+ sizeof(xmlNodePtr));
+ if (temp == NULL) {
+ xmlXPathErrMemory(NULL, "merging nodeset\n");
+ return(NULL);
+ }
+ val1->nodeTab = temp;
+ }
+ if (val2->nodeTab[i]->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) val2->nodeTab[i];
+
+ val1->nodeTab[val1->nodeNr++] =
+ xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
+ } else
+ val1->nodeTab[val1->nodeNr++] = val2->nodeTab[i];
+ }
+
+ return(val1);
+}
+
+/**
+ * xmlXPathNodeSetDel:
+ * @cur: the initial node set
+ * @val: an xmlNodePtr
+ *
+ * Removes an xmlNodePtr from an existing NodeSet
+ */
+void
+xmlXPathNodeSetDel(xmlNodeSetPtr cur, xmlNodePtr val) {
+ int i;
+
+ if (cur == NULL) return;
+ if (val == NULL) return;
+
+ /*
+ * find node in nodeTab
+ */
+ for (i = 0;i < cur->nodeNr;i++)
+ if (cur->nodeTab[i] == val) break;
+
+ if (i >= cur->nodeNr) { /* not found */
+#ifdef DEBUG
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathNodeSetDel: Node %s wasn't found in NodeList\n",
+ val->name);
+#endif
+ return;
+ }
+ if ((cur->nodeTab[i] != NULL) &&
+ (cur->nodeTab[i]->type == XML_NAMESPACE_DECL))
+ xmlXPathNodeSetFreeNs((xmlNsPtr) cur->nodeTab[i]);
+ cur->nodeNr--;
+ for (;i < cur->nodeNr;i++)
+ cur->nodeTab[i] = cur->nodeTab[i + 1];
+ cur->nodeTab[cur->nodeNr] = NULL;
+}
+
+/**
+ * xmlXPathNodeSetRemove:
+ * @cur: the initial node set
+ * @val: the index to remove
+ *
+ * Removes an entry from an existing NodeSet list.
+ */
+void
+xmlXPathNodeSetRemove(xmlNodeSetPtr cur, int val) {
+ if (cur == NULL) return;
+ if (val >= cur->nodeNr) return;
+ if ((cur->nodeTab[val] != NULL) &&
+ (cur->nodeTab[val]->type == XML_NAMESPACE_DECL))
+ xmlXPathNodeSetFreeNs((xmlNsPtr) cur->nodeTab[val]);
+ cur->nodeNr--;
+ for (;val < cur->nodeNr;val++)
+ cur->nodeTab[val] = cur->nodeTab[val + 1];
+ cur->nodeTab[cur->nodeNr] = NULL;
+}
+
+/**
+ * xmlXPathFreeNodeSet:
+ * @obj: the xmlNodeSetPtr to free
+ *
+ * Free the NodeSet compound (not the actual nodes !).
+ */
+void
+xmlXPathFreeNodeSet(xmlNodeSetPtr obj) {
+ if (obj == NULL) return;
+ if (obj->nodeTab != NULL) {
+ int i;
+
+ /* @@ with_ns to check whether namespace nodes should be looked at @@ */
+ for (i = 0;i < obj->nodeNr;i++)
+ if ((obj->nodeTab[i] != NULL) &&
+ (obj->nodeTab[i]->type == XML_NAMESPACE_DECL))
+ xmlXPathNodeSetFreeNs((xmlNsPtr) obj->nodeTab[i]);
+ xmlFree(obj->nodeTab);
+ }
+ xmlFree(obj);
+}
+
+/**
+ * xmlXPathFreeValueTree:
+ * @obj: the xmlNodeSetPtr to free
+ *
+ * Free the NodeSet compound and the actual tree, this is different
+ * from xmlXPathFreeNodeSet()
+ */
+static void
+xmlXPathFreeValueTree(xmlNodeSetPtr obj) {
+ int i;
+
+ if (obj == NULL) return;
+
+ if (obj->nodeTab != NULL) {
+ for (i = 0;i < obj->nodeNr;i++) {
+ if (obj->nodeTab[i] != NULL) {
+ if (obj->nodeTab[i]->type == XML_NAMESPACE_DECL) {
+ xmlXPathNodeSetFreeNs((xmlNsPtr) obj->nodeTab[i]);
+ } else {
+ xmlFreeNodeList(obj->nodeTab[i]);
+ }
+ }
+ }
+ xmlFree(obj->nodeTab);
+ }
+ xmlFree(obj);
+}
+
+#if defined(DEBUG) || defined(DEBUG_STEP)
+/**
+ * xmlGenericErrorContextNodeSet:
+ * @output: a FILE * for the output
+ * @obj: the xmlNodeSetPtr to display
+ *
+ * Quick display of a NodeSet
+ */
+void
+xmlGenericErrorContextNodeSet(FILE *output, xmlNodeSetPtr obj) {
+ int i;
+
+ if (output == NULL) output = xmlGenericErrorContext;
+ if (obj == NULL) {
+ fprintf(output, "NodeSet == NULL !\n");
+ return;
+ }
+ if (obj->nodeNr == 0) {
+ fprintf(output, "NodeSet is empty\n");
+ return;
+ }
+ if (obj->nodeTab == NULL) {
+ fprintf(output, " nodeTab == NULL !\n");
+ return;
+ }
+ for (i = 0; i < obj->nodeNr; i++) {
+ if (obj->nodeTab[i] == NULL) {
+ fprintf(output, " NULL !\n");
+ return;
+ }
+ if ((obj->nodeTab[i]->type == XML_DOCUMENT_NODE) ||
+ (obj->nodeTab[i]->type == XML_HTML_DOCUMENT_NODE))
+ fprintf(output, " /");
+ else if (obj->nodeTab[i]->name == NULL)
+ fprintf(output, " noname!");
+ else fprintf(output, " %s", obj->nodeTab[i]->name);
+ }
+ fprintf(output, "\n");
+}
+#endif
+
+/**
+ * xmlXPathNewNodeSet:
+ * @val: the NodePtr value
+ *
+ * Create a new xmlXPathObjectPtr of type NodeSet and initialize
+ * it with the single Node @val
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathNewNodeSet(xmlNodePtr val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating nodeset\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_NODESET;
+ ret->boolval = 0;
+ ret->nodesetval = xmlXPathNodeSetCreate(val);
+ /* @@ with_ns to check whether namespace nodes should be looked at @@ */
+ return(ret);
+}
+
+/**
+ * xmlXPathNewValueTree:
+ * @val: the NodePtr value
+ *
+ * Create a new xmlXPathObjectPtr of type Value Tree (XSLT) and initialize
+ * it with the tree root @val
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathNewValueTree(xmlNodePtr val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating result value tree\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_XSLT_TREE;
+ ret->boolval = 1;
+ ret->user = (void *) val;
+ ret->nodesetval = xmlXPathNodeSetCreate(val);
+ return(ret);
+}
+
+/**
+ * xmlXPathNewNodeSetList:
+ * @val: an existing NodeSet
+ *
+ * Create a new xmlXPathObjectPtr of type NodeSet and initialize
+ * it with the Nodeset @val
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathNewNodeSetList(xmlNodeSetPtr val)
+{
+ xmlXPathObjectPtr ret;
+ int i;
+
+ if (val == NULL)
+ ret = NULL;
+ else if (val->nodeTab == NULL)
+ ret = xmlXPathNewNodeSet(NULL);
+ else {
+ ret = xmlXPathNewNodeSet(val->nodeTab[0]);
+ for (i = 1; i < val->nodeNr; ++i)
+ xmlXPathNodeSetAddUnique(ret->nodesetval, val->nodeTab[i]);
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlXPathWrapNodeSet:
+ * @val: the NodePtr value
+ *
+ * Wrap the Nodeset @val in a new xmlXPathObjectPtr
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathWrapNodeSet(xmlNodeSetPtr val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating node set object\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_NODESET;
+ ret->nodesetval = val;
+ return(ret);
+}
+
+/**
+ * xmlXPathFreeNodeSetList:
+ * @obj: an existing NodeSetList object
+ *
+ * Free up the xmlXPathObjectPtr @obj but don't deallocate the objects in
+ * the list contrary to xmlXPathFreeObject().
+ */
+void
+xmlXPathFreeNodeSetList(xmlXPathObjectPtr obj) {
+ if (obj == NULL) return;
+ xmlFree(obj);
+}
+
+/**
+ * xmlXPathDifference:
+ * @nodes1: a node-set
+ * @nodes2: a node-set
+ *
+ * Implements the EXSLT - Sets difference() function:
+ * node-set set:difference (node-set, node-set)
+ *
+ * Returns the difference between the two node sets, or nodes1 if
+ * nodes2 is empty
+ */
+xmlNodeSetPtr
+xmlXPathDifference (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
+ xmlNodeSetPtr ret;
+ int i, l1;
+ xmlNodePtr cur;
+
+ if (xmlXPathNodeSetIsEmpty(nodes2))
+ return(nodes1);
+
+ ret = xmlXPathNodeSetCreate(NULL);
+ if (xmlXPathNodeSetIsEmpty(nodes1))
+ return(ret);
+
+ l1 = xmlXPathNodeSetGetLength(nodes1);
+
+ for (i = 0; i < l1; i++) {
+ cur = xmlXPathNodeSetItem(nodes1, i);
+ if (!xmlXPathNodeSetContains(nodes2, cur))
+ xmlXPathNodeSetAddUnique(ret, cur);
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathIntersection:
+ * @nodes1: a node-set
+ * @nodes2: a node-set
+ *
+ * Implements the EXSLT - Sets intersection() function:
+ * node-set set:intersection (node-set, node-set)
+ *
+ * Returns a node set comprising the nodes that are within both the
+ * node sets passed as arguments
+ */
+xmlNodeSetPtr
+xmlXPathIntersection (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
+ xmlNodeSetPtr ret = xmlXPathNodeSetCreate(NULL);
+ int i, l1;
+ xmlNodePtr cur;
+
+ if (xmlXPathNodeSetIsEmpty(nodes1))
+ return(ret);
+ if (xmlXPathNodeSetIsEmpty(nodes2))
+ return(ret);
+
+ l1 = xmlXPathNodeSetGetLength(nodes1);
+
+ for (i = 0; i < l1; i++) {
+ cur = xmlXPathNodeSetItem(nodes1, i);
+ if (xmlXPathNodeSetContains(nodes2, cur))
+ xmlXPathNodeSetAddUnique(ret, cur);
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathDistinctSorted:
+ * @nodes: a node-set, sorted by document order
+ *
+ * Implements the EXSLT - Sets distinct() function:
+ * node-set set:distinct (node-set)
+ *
+ * Returns a subset of the nodes contained in @nodes, or @nodes if
+ * it is empty
+ */
+xmlNodeSetPtr
+xmlXPathDistinctSorted (xmlNodeSetPtr nodes) {
+ xmlNodeSetPtr ret;
+ xmlHashTablePtr hash;
+ int i, l;
+ xmlChar * strval;
+ xmlNodePtr cur;
+
+ if (xmlXPathNodeSetIsEmpty(nodes))
+ return(nodes);
+
+ ret = xmlXPathNodeSetCreate(NULL);
+ l = xmlXPathNodeSetGetLength(nodes);
+ hash = xmlHashCreate (l);
+ for (i = 0; i < l; i++) {
+ cur = xmlXPathNodeSetItem(nodes, i);
+ strval = xmlXPathCastNodeToString(cur);
+ if (xmlHashLookup(hash, strval) == NULL) {
+ xmlHashAddEntry(hash, strval, strval);
+ xmlXPathNodeSetAddUnique(ret, cur);
+ } else {
+ xmlFree(strval);
+ }
+ }
+ xmlHashFree(hash, (xmlHashDeallocator) xmlFree);
+ return(ret);
+}
+
+/**
+ * xmlXPathDistinct:
+ * @nodes: a node-set
+ *
+ * Implements the EXSLT - Sets distinct() function:
+ * node-set set:distinct (node-set)
+ * @nodes is sorted by document order, then #exslSetsDistinctSorted
+ * is called with the sorted node-set
+ *
+ * Returns a subset of the nodes contained in @nodes, or @nodes if
+ * it is empty
+ */
+xmlNodeSetPtr
+xmlXPathDistinct (xmlNodeSetPtr nodes) {
+ if (xmlXPathNodeSetIsEmpty(nodes))
+ return(nodes);
+
+ xmlXPathNodeSetSort(nodes);
+ return(xmlXPathDistinctSorted(nodes));
+}
+
+/**
+ * xmlXPathHasSameNodes:
+ * @nodes1: a node-set
+ * @nodes2: a node-set
+ *
+ * Implements the EXSLT - Sets has-same-nodes function:
+ * boolean set:has-same-node(node-set, node-set)
+ *
+ * Returns true (1) if @nodes1 shares any node with @nodes2, false (0)
+ * otherwise
+ */
+int
+xmlXPathHasSameNodes (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
+ int i, l;
+ xmlNodePtr cur;
+
+ if (xmlXPathNodeSetIsEmpty(nodes1) ||
+ xmlXPathNodeSetIsEmpty(nodes2))
+ return(0);
+
+ l = xmlXPathNodeSetGetLength(nodes1);
+ for (i = 0; i < l; i++) {
+ cur = xmlXPathNodeSetItem(nodes1, i);
+ if (xmlXPathNodeSetContains(nodes2, cur))
+ return(1);
+ }
+ return(0);
+}
+
+/**
+ * xmlXPathNodeLeadingSorted:
+ * @nodes: a node-set, sorted by document order
+ * @node: a node
+ *
+ * Implements the EXSLT - Sets leading() function:
+ * node-set set:leading (node-set, node-set)
+ *
+ * Returns the nodes in @nodes that precede @node in document order,
+ * @nodes if @node is NULL or an empty node-set if @nodes
+ * doesn't contain @node
+ */
+xmlNodeSetPtr
+xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes, xmlNodePtr node) {
+ int i, l;
+ xmlNodePtr cur;
+ xmlNodeSetPtr ret;
+
+ if (node == NULL)
+ return(nodes);
+
+ ret = xmlXPathNodeSetCreate(NULL);
+ if (xmlXPathNodeSetIsEmpty(nodes) ||
+ (!xmlXPathNodeSetContains(nodes, node)))
+ return(ret);
+
+ l = xmlXPathNodeSetGetLength(nodes);
+ for (i = 0; i < l; i++) {
+ cur = xmlXPathNodeSetItem(nodes, i);
+ if (cur == node)
+ break;
+ xmlXPathNodeSetAddUnique(ret, cur);
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathNodeLeading:
+ * @nodes: a node-set
+ * @node: a node
+ *
+ * Implements the EXSLT - Sets leading() function:
+ * node-set set:leading (node-set, node-set)
+ * @nodes is sorted by document order, then #exslSetsNodeLeadingSorted
+ * is called.
+ *
+ * Returns the nodes in @nodes that precede @node in document order,
+ * @nodes if @node is NULL or an empty node-set if @nodes
+ * doesn't contain @node
+ */
+xmlNodeSetPtr
+xmlXPathNodeLeading (xmlNodeSetPtr nodes, xmlNodePtr node) {
+ xmlXPathNodeSetSort(nodes);
+ return(xmlXPathNodeLeadingSorted(nodes, node));
+}
+
+/**
+ * xmlXPathLeadingSorted:
+ * @nodes1: a node-set, sorted by document order
+ * @nodes2: a node-set, sorted by document order
+ *
+ * Implements the EXSLT - Sets leading() function:
+ * node-set set:leading (node-set, node-set)
+ *
+ * Returns the nodes in @nodes1 that precede the first node in @nodes2
+ * in document order, @nodes1 if @nodes2 is NULL or empty or
+ * an empty node-set if @nodes1 doesn't contain @nodes2
+ */
+xmlNodeSetPtr
+xmlXPathLeadingSorted (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
+ if (xmlXPathNodeSetIsEmpty(nodes2))
+ return(nodes1);
+ return(xmlXPathNodeLeadingSorted(nodes1,
+ xmlXPathNodeSetItem(nodes2, 1)));
+}
+
+/**
+ * xmlXPathLeading:
+ * @nodes1: a node-set
+ * @nodes2: a node-set
+ *
+ * Implements the EXSLT - Sets leading() function:
+ * node-set set:leading (node-set, node-set)
+ * @nodes1 and @nodes2 are sorted by document order, then
+ * #exslSetsLeadingSorted is called.
+ *
+ * Returns the nodes in @nodes1 that precede the first node in @nodes2
+ * in document order, @nodes1 if @nodes2 is NULL or empty or
+ * an empty node-set if @nodes1 doesn't contain @nodes2
+ */
+xmlNodeSetPtr
+xmlXPathLeading (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
+ if (xmlXPathNodeSetIsEmpty(nodes2))
+ return(nodes1);
+ if (xmlXPathNodeSetIsEmpty(nodes1))
+ return(xmlXPathNodeSetCreate(NULL));
+ xmlXPathNodeSetSort(nodes1);
+ xmlXPathNodeSetSort(nodes2);
+ return(xmlXPathNodeLeadingSorted(nodes1,
+ xmlXPathNodeSetItem(nodes2, 1)));
+}
+
+/**
+ * xmlXPathNodeTrailingSorted:
+ * @nodes: a node-set, sorted by document order
+ * @node: a node
+ *
+ * Implements the EXSLT - Sets trailing() function:
+ * node-set set:trailing (node-set, node-set)
+ *
+ * Returns the nodes in @nodes that follow @node in document order,
+ * @nodes if @node is NULL or an empty node-set if @nodes
+ * doesn't contain @node
+ */
+xmlNodeSetPtr
+xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes, xmlNodePtr node) {
+ int i, l;
+ xmlNodePtr cur;
+ xmlNodeSetPtr ret;
+
+ if (node == NULL)
+ return(nodes);
+
+ ret = xmlXPathNodeSetCreate(NULL);
+ if (xmlXPathNodeSetIsEmpty(nodes) ||
+ (!xmlXPathNodeSetContains(nodes, node)))
+ return(ret);
+
+ l = xmlXPathNodeSetGetLength(nodes);
+ for (i = l; i > 0; i--) {
+ cur = xmlXPathNodeSetItem(nodes, i);
+ if (cur == node)
+ break;
+ xmlXPathNodeSetAddUnique(ret, cur);
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathNodeTrailing:
+ * @nodes: a node-set
+ * @node: a node
+ *
+ * Implements the EXSLT - Sets trailing() function:
+ * node-set set:trailing (node-set, node-set)
+ * @nodes is sorted by document order, then #xmlXPathNodeTrailingSorted
+ * is called.
+ *
+ * Returns the nodes in @nodes that follow @node in document order,
+ * @nodes if @node is NULL or an empty node-set if @nodes
+ * doesn't contain @node
+ */
+xmlNodeSetPtr
+xmlXPathNodeTrailing (xmlNodeSetPtr nodes, xmlNodePtr node) {
+ xmlXPathNodeSetSort(nodes);
+ return(xmlXPathNodeTrailingSorted(nodes, node));
+}
+
+/**
+ * xmlXPathTrailingSorted:
+ * @nodes1: a node-set, sorted by document order
+ * @nodes2: a node-set, sorted by document order
+ *
+ * Implements the EXSLT - Sets trailing() function:
+ * node-set set:trailing (node-set, node-set)
+ *
+ * Returns the nodes in @nodes1 that follow the first node in @nodes2
+ * in document order, @nodes1 if @nodes2 is NULL or empty or
+ * an empty node-set if @nodes1 doesn't contain @nodes2
+ */
+xmlNodeSetPtr
+xmlXPathTrailingSorted (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
+ if (xmlXPathNodeSetIsEmpty(nodes2))
+ return(nodes1);
+ return(xmlXPathNodeTrailingSorted(nodes1,
+ xmlXPathNodeSetItem(nodes2, 0)));
+}
+
+/**
+ * xmlXPathTrailing:
+ * @nodes1: a node-set
+ * @nodes2: a node-set
+ *
+ * Implements the EXSLT - Sets trailing() function:
+ * node-set set:trailing (node-set, node-set)
+ * @nodes1 and @nodes2 are sorted by document order, then
+ * #xmlXPathTrailingSorted is called.
+ *
+ * Returns the nodes in @nodes1 that follow the first node in @nodes2
+ * in document order, @nodes1 if @nodes2 is NULL or empty or
+ * an empty node-set if @nodes1 doesn't contain @nodes2
+ */
+xmlNodeSetPtr
+xmlXPathTrailing (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
+ if (xmlXPathNodeSetIsEmpty(nodes2))
+ return(nodes1);
+ if (xmlXPathNodeSetIsEmpty(nodes1))
+ return(xmlXPathNodeSetCreate(NULL));
+ xmlXPathNodeSetSort(nodes1);
+ xmlXPathNodeSetSort(nodes2);
+ return(xmlXPathNodeTrailingSorted(nodes1,
+ xmlXPathNodeSetItem(nodes2, 0)));
+}
+
+/************************************************************************
+ * *
+ * Routines to handle extra functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPathRegisterFunc:
+ * @ctxt: the XPath context
+ * @name: the function name
+ * @f: the function implementation or NULL
+ *
+ * Register a new function. If @f is NULL it unregisters the function
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+xmlXPathRegisterFunc(xmlXPathContextPtr ctxt, const xmlChar *name,
+ xmlXPathFunction f) {
+ return(xmlXPathRegisterFuncNS(ctxt, name, NULL, f));
+}
+
+/**
+ * xmlXPathRegisterFuncNS:
+ * @ctxt: the XPath context
+ * @name: the function name
+ * @ns_uri: the function namespace URI
+ * @f: the function implementation or NULL
+ *
+ * Register a new function. If @f is NULL it unregisters the function
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+xmlXPathRegisterFuncNS(xmlXPathContextPtr ctxt, const xmlChar *name,
+ const xmlChar *ns_uri, xmlXPathFunction f) {
+ if (ctxt == NULL)
+ return(-1);
+ if (name == NULL)
+ return(-1);
+
+ if (ctxt->funcHash == NULL)
+ ctxt->funcHash = xmlHashCreate(0);
+ if (ctxt->funcHash == NULL)
+ return(-1);
+ if (f == NULL)
+ return(xmlHashRemoveEntry2(ctxt->funcHash, name, ns_uri, NULL));
+ return(xmlHashAddEntry2(ctxt->funcHash, name, ns_uri, (void *) f));
+}
+
+/**
+ * xmlXPathRegisterFuncLookup:
+ * @ctxt: the XPath context
+ * @f: the lookup function
+ * @funcCtxt: the lookup data
+ *
+ * Registers an external mechanism to do function lookup.
+ */
+void
+xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
+ xmlXPathFuncLookupFunc f,
+ void *funcCtxt) {
+ if (ctxt == NULL)
+ return;
+ ctxt->funcLookupFunc = (void *) f;
+ ctxt->funcLookupData = funcCtxt;
+}
+
+/**
+ * xmlXPathFunctionLookup:
+ * @ctxt: the XPath context
+ * @name: the function name
+ *
+ * Search in the Function array of the context for the given
+ * function.
+ *
+ * Returns the xmlXPathFunction or NULL if not found
+ */
+xmlXPathFunction
+xmlXPathFunctionLookup(xmlXPathContextPtr ctxt, const xmlChar *name) {
+ if (ctxt == NULL)
+ return (NULL);
+
+ if (ctxt->funcLookupFunc != NULL) {
+ xmlXPathFunction ret;
+ xmlXPathFuncLookupFunc f;
+
+ f = (xmlXPathFuncLookupFunc) ctxt->funcLookupFunc;
+ ret = f(ctxt->funcLookupData, name, NULL);
+ if (ret != NULL)
+ return(ret);
+ }
+ return(xmlXPathFunctionLookupNS(ctxt, name, NULL));
+}
+
+/**
+ * xmlXPathFunctionLookupNS:
+ * @ctxt: the XPath context
+ * @name: the function name
+ * @ns_uri: the function namespace URI
+ *
+ * Search in the Function array of the context for the given
+ * function.
+ *
+ * Returns the xmlXPathFunction or NULL if not found
+ */
+xmlXPathFunction
+xmlXPathFunctionLookupNS(xmlXPathContextPtr ctxt, const xmlChar *name,
+ const xmlChar *ns_uri) {
+ if (ctxt == NULL)
+ return(NULL);
+ if (name == NULL)
+ return(NULL);
+
+ if (ctxt->funcLookupFunc != NULL) {
+ xmlXPathFunction ret;
+ xmlXPathFuncLookupFunc f;
+
+ f = (xmlXPathFuncLookupFunc) ctxt->funcLookupFunc;
+ ret = f(ctxt->funcLookupData, name, ns_uri);
+ if (ret != NULL)
+ return(ret);
+ }
+
+ if (ctxt->funcHash == NULL)
+ return(NULL);
+
+ return((xmlXPathFunction) xmlHashLookup2(ctxt->funcHash, name, ns_uri));
+}
+
+/**
+ * xmlXPathRegisteredFuncsCleanup:
+ * @ctxt: the XPath context
+ *
+ * Cleanup the XPath context data associated to registered functions
+ */
+void
+xmlXPathRegisteredFuncsCleanup(xmlXPathContextPtr ctxt) {
+ if (ctxt == NULL)
+ return;
+
+ xmlHashFree(ctxt->funcHash, NULL);
+ ctxt->funcHash = NULL;
+}
+
+/************************************************************************
+ * *
+ * Routines to handle Variables *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPathRegisterVariable:
+ * @ctxt: the XPath context
+ * @name: the variable name
+ * @value: the variable value or NULL
+ *
+ * Register a new variable value. If @value is NULL it unregisters
+ * the variable
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+xmlXPathRegisterVariable(xmlXPathContextPtr ctxt, const xmlChar *name,
+ xmlXPathObjectPtr value) {
+ return(xmlXPathRegisterVariableNS(ctxt, name, NULL, value));
+}
+
+/**
+ * xmlXPathRegisterVariableNS:
+ * @ctxt: the XPath context
+ * @name: the variable name
+ * @ns_uri: the variable namespace URI
+ * @value: the variable value or NULL
+ *
+ * Register a new variable value. If @value is NULL it unregisters
+ * the variable
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+xmlXPathRegisterVariableNS(xmlXPathContextPtr ctxt, const xmlChar *name,
+ const xmlChar *ns_uri,
+ xmlXPathObjectPtr value) {
+ if (ctxt == NULL)
+ return(-1);
+ if (name == NULL)
+ return(-1);
+
+ if (ctxt->varHash == NULL)
+ ctxt->varHash = xmlHashCreate(0);
+ if (ctxt->varHash == NULL)
+ return(-1);
+ if (value == NULL)
+ return(xmlHashRemoveEntry2(ctxt->varHash, name, ns_uri,
+ (xmlHashDeallocator)xmlXPathFreeObject));
+ return(xmlHashUpdateEntry2(ctxt->varHash, name, ns_uri,
+ (void *) value,
+ (xmlHashDeallocator)xmlXPathFreeObject));
+}
+
+/**
+ * xmlXPathRegisterVariableLookup:
+ * @ctxt: the XPath context
+ * @f: the lookup function
+ * @data: the lookup data
+ *
+ * register an external mechanism to do variable lookup
+ */
+void
+xmlXPathRegisterVariableLookup(xmlXPathContextPtr ctxt,
+ xmlXPathVariableLookupFunc f, void *data) {
+ if (ctxt == NULL)
+ return;
+ ctxt->varLookupFunc = (void *) f;
+ ctxt->varLookupData = data;
+}
+
+/**
+ * xmlXPathVariableLookup:
+ * @ctxt: the XPath context
+ * @name: the variable name
+ *
+ * Search in the Variable array of the context for the given
+ * variable value.
+ *
+ * Returns a copy of the value or NULL if not found
+ */
+xmlXPathObjectPtr
+xmlXPathVariableLookup(xmlXPathContextPtr ctxt, const xmlChar *name) {
+ if (ctxt == NULL)
+ return(NULL);
+
+ if (ctxt->varLookupFunc != NULL) {
+ xmlXPathObjectPtr ret;
+
+ ret = ((xmlXPathVariableLookupFunc)ctxt->varLookupFunc)
+ (ctxt->varLookupData, name, NULL);
+ return(ret);
+ }
+ return(xmlXPathVariableLookupNS(ctxt, name, NULL));
+}
+
+/**
+ * xmlXPathVariableLookupNS:
+ * @ctxt: the XPath context
+ * @name: the variable name
+ * @ns_uri: the variable namespace URI
+ *
+ * Search in the Variable array of the context for the given
+ * variable value.
+ *
+ * Returns the a copy of the value or NULL if not found
+ */
+xmlXPathObjectPtr
+xmlXPathVariableLookupNS(xmlXPathContextPtr ctxt, const xmlChar *name,
+ const xmlChar *ns_uri) {
+ if (ctxt == NULL)
+ return(NULL);
+
+ if (ctxt->varLookupFunc != NULL) {
+ xmlXPathObjectPtr ret;
+
+ ret = ((xmlXPathVariableLookupFunc)ctxt->varLookupFunc)
+ (ctxt->varLookupData, name, ns_uri);
+ if (ret != NULL) return(ret);
+ }
+
+ if (ctxt->varHash == NULL)
+ return(NULL);
+ if (name == NULL)
+ return(NULL);
+
+ return(xmlXPathObjectCopy((xmlXPathObjectPtr)
+ xmlHashLookup2(ctxt->varHash, name, ns_uri)));
+}
+
+/**
+ * xmlXPathRegisteredVariablesCleanup:
+ * @ctxt: the XPath context
+ *
+ * Cleanup the XPath context data associated to registered variables
+ */
+void
+xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt) {
+ if (ctxt == NULL)
+ return;
+
+ xmlHashFree(ctxt->varHash, (xmlHashDeallocator)xmlXPathFreeObject);
+ ctxt->varHash = NULL;
+}
+
+/**
+ * xmlXPathRegisterNs:
+ * @ctxt: the XPath context
+ * @prefix: the namespace prefix
+ * @ns_uri: the namespace name
+ *
+ * Register a new namespace. If @ns_uri is NULL it unregisters
+ * the namespace
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+xmlXPathRegisterNs(xmlXPathContextPtr ctxt, const xmlChar *prefix,
+ const xmlChar *ns_uri) {
+ if (ctxt == NULL)
+ return(-1);
+ if (prefix == NULL)
+ return(-1);
+
+ if (ctxt->nsHash == NULL)
+ ctxt->nsHash = xmlHashCreate(10);
+ if (ctxt->nsHash == NULL)
+ return(-1);
+ if (ns_uri == NULL)
+ return(xmlHashRemoveEntry(ctxt->nsHash, prefix,
+ (xmlHashDeallocator)xmlFree));
+ return(xmlHashUpdateEntry(ctxt->nsHash, prefix, (void *) xmlStrdup(ns_uri),
+ (xmlHashDeallocator)xmlFree));
+}
+
+/**
+ * xmlXPathNsLookup:
+ * @ctxt: the XPath context
+ * @prefix: the namespace prefix value
+ *
+ * Search in the namespace declaration array of the context for the given
+ * namespace name associated to the given prefix
+ *
+ * Returns the value or NULL if not found
+ */
+const xmlChar *
+xmlXPathNsLookup(xmlXPathContextPtr ctxt, const xmlChar *prefix) {
+ if (ctxt == NULL)
+ return(NULL);
+ if (prefix == NULL)
+ return(NULL);
+
+#ifdef XML_XML_NAMESPACE
+ if (xmlStrEqual(prefix, (const xmlChar *) "xml"))
+ return(XML_XML_NAMESPACE);
+#endif
+
+ if (ctxt->namespaces != NULL) {
+ int i;
+
+ for (i = 0;i < ctxt->nsNr;i++) {
+ if ((ctxt->namespaces[i] != NULL) &&
+ (xmlStrEqual(ctxt->namespaces[i]->prefix, prefix)))
+ return(ctxt->namespaces[i]->href);
+ }
+ }
+
+ return((const xmlChar *) xmlHashLookup(ctxt->nsHash, prefix));
+}
+
+/**
+ * xmlXPathRegisteredNsCleanup:
+ * @ctxt: the XPath context
+ *
+ * Cleanup the XPath context data associated to registered variables
+ */
+void
+xmlXPathRegisteredNsCleanup(xmlXPathContextPtr ctxt) {
+ if (ctxt == NULL)
+ return;
+
+ xmlHashFree(ctxt->nsHash, (xmlHashDeallocator)xmlFree);
+ ctxt->nsHash = NULL;
+}
+
+/************************************************************************
+ * *
+ * Routines to handle Values *
+ * *
+ ************************************************************************/
+
+/* Allocations are terrible, one needs to optimize all this !!! */
+
+/**
+ * xmlXPathNewFloat:
+ * @val: the double value
+ *
+ * Create a new xmlXPathObjectPtr of type double and of value @val
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathNewFloat(double val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating float object\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_NUMBER;
+ ret->floatval = val;
+ return(ret);
+}
+
+/**
+ * xmlXPathNewBoolean:
+ * @val: the boolean value
+ *
+ * Create a new xmlXPathObjectPtr of type boolean and of value @val
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathNewBoolean(int val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating boolean object\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_BOOLEAN;
+ ret->boolval = (val != 0);
+ return(ret);
+}
+
+/**
+ * xmlXPathNewString:
+ * @val: the xmlChar * value
+ *
+ * Create a new xmlXPathObjectPtr of type string and of value @val
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathNewString(const xmlChar *val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating string object\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_STRING;
+ if (val != NULL)
+ ret->stringval = xmlStrdup(val);
+ else
+ ret->stringval = xmlStrdup((const xmlChar *)"");
+ return(ret);
+}
+
+/**
+ * xmlXPathWrapString:
+ * @val: the xmlChar * value
+ *
+ * Wraps the @val string into an XPath object.
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathWrapString (xmlChar *val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating string object\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_STRING;
+ ret->stringval = val;
+ return(ret);
+}
+
+/**
+ * xmlXPathNewCString:
+ * @val: the char * value
+ *
+ * Create a new xmlXPathObjectPtr of type string and of value @val
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathNewCString(const char *val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating string object\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_STRING;
+ ret->stringval = xmlStrdup(BAD_CAST val);
+ return(ret);
+}
+
+/**
+ * xmlXPathWrapCString:
+ * @val: the char * value
+ *
+ * Wraps a string into an XPath object.
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathWrapCString (char * val) {
+ return(xmlXPathWrapString((xmlChar *)(val)));
+}
+
+/**
+ * xmlXPathWrapExternal:
+ * @val: the user data
+ *
+ * Wraps the @val data into an XPath object.
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathWrapExternal (void *val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating user object\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_USERS;
+ ret->user = val;
+ return(ret);
+}
+
+/**
+ * xmlXPathObjectCopy:
+ * @val: the original object
+ *
+ * allocate a new copy of a given object
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPathObjectCopy(xmlXPathObjectPtr val) {
+ xmlXPathObjectPtr ret;
+
+ if (val == NULL)
+ return(NULL);
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "copying object\n");
+ return(NULL);
+ }
+ memcpy(ret, val , (size_t) sizeof(xmlXPathObject));
+ switch (val->type) {
+ case XPATH_BOOLEAN:
+ case XPATH_NUMBER:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ break;
+ case XPATH_STRING:
+ ret->stringval = xmlStrdup(val->stringval);
+ break;
+ case XPATH_XSLT_TREE:
+ if ((val->nodesetval != NULL) &&
+ (val->nodesetval->nodeTab != NULL)) {
+ xmlNodePtr cur, tmp;
+ xmlDocPtr top;
+
+ ret->boolval = 1;
+ top = xmlNewDoc(NULL);
+ top->name = (char *)
+ xmlStrdup(val->nodesetval->nodeTab[0]->name);
+ ret->user = top;
+ if (top != NULL) {
+ top->doc = top;
+ cur = val->nodesetval->nodeTab[0]->children;
+ while (cur != NULL) {
+ tmp = xmlDocCopyNode(cur, top, 1);
+ xmlAddChild((xmlNodePtr) top, tmp);
+ cur = cur->next;
+ }
+ }
+ ret->nodesetval = xmlXPathNodeSetCreate((xmlNodePtr) top);
+ } else
+ ret->nodesetval = xmlXPathNodeSetCreate(NULL);
+ /* Deallocate the copied tree value */
+ break;
+ case XPATH_NODESET:
+ ret->nodesetval = xmlXPathNodeSetMerge(NULL, val->nodesetval);
+ /* Do not deallocate the copied tree value */
+ ret->boolval = 0;
+ break;
+ case XPATH_LOCATIONSET:
+#ifdef LIBXML_XPTR_ENABLED
+ {
+ xmlLocationSetPtr loc = val->user;
+ ret->user = (void *) xmlXPtrLocationSetMerge(NULL, loc);
+ break;
+ }
+#endif
+ case XPATH_USERS:
+ ret->user = val->user;
+ break;
+ case XPATH_UNDEFINED:
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathObjectCopy: unsupported type %d\n",
+ val->type);
+ break;
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathFreeObject:
+ * @obj: the object to free
+ *
+ * Free up an xmlXPathObjectPtr object.
+ */
+void
+xmlXPathFreeObject(xmlXPathObjectPtr obj) {
+ if (obj == NULL) return;
+ if ((obj->type == XPATH_NODESET) || (obj->type == XPATH_XSLT_TREE)) {
+ if (obj->boolval) {
+ if (obj->user != NULL) {
+ xmlXPathFreeNodeSet(obj->nodesetval);
+ xmlFreeNodeList((xmlNodePtr) obj->user);
+ } else if (obj->nodesetval != NULL)
+ xmlXPathFreeValueTree(obj->nodesetval);
+ } else {
+ if (obj->nodesetval != NULL)
+ xmlXPathFreeNodeSet(obj->nodesetval);
+ }
+#ifdef LIBXML_XPTR_ENABLED
+ } else if (obj->type == XPATH_LOCATIONSET) {
+ if (obj->user != NULL)
+ xmlXPtrFreeLocationSet(obj->user);
+#endif
+ } else if (obj->type == XPATH_STRING) {
+ if (obj->stringval != NULL)
+ xmlFree(obj->stringval);
+ }
+
+ xmlFree(obj);
+}
+
+
+/************************************************************************
+ * *
+ * Type Casting Routines *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPathCastBooleanToString:
+ * @val: a boolean
+ *
+ * Converts a boolean to its string value.
+ *
+ * Returns a newly allocated string.
+ */
+xmlChar *
+xmlXPathCastBooleanToString (int val) {
+ xmlChar *ret;
+ if (val)
+ ret = xmlStrdup((const xmlChar *) "true");
+ else
+ ret = xmlStrdup((const xmlChar *) "false");
+ return(ret);
+}
+
+/**
+ * xmlXPathCastNumberToString:
+ * @val: a number
+ *
+ * Converts a number to its string value.
+ *
+ * Returns a newly allocated string.
+ */
+xmlChar *
+xmlXPathCastNumberToString (double val) {
+ xmlChar *ret;
+ switch (xmlXPathIsInf(val)) {
+ case 1:
+ ret = xmlStrdup((const xmlChar *) "Infinity");
+ break;
+ case -1:
+ ret = xmlStrdup((const xmlChar *) "-Infinity");
+ break;
+ default:
+ if (xmlXPathIsNaN(val)) {
+ ret = xmlStrdup((const xmlChar *) "NaN");
+ } else if (val == 0 && xmlXPathGetSign(val) != 0) {
+ ret = xmlStrdup((const xmlChar *) "0");
+ } else {
+ /* could be improved */
+ char buf[100];
+ xmlXPathFormatNumber(val, buf, 100);
+ ret = xmlStrdup((const xmlChar *) buf);
+ }
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathCastNodeToString:
+ * @node: a node
+ *
+ * Converts a node to its string value.
+ *
+ * Returns a newly allocated string.
+ */
+xmlChar *
+xmlXPathCastNodeToString (xmlNodePtr node) {
+ return(xmlNodeGetContent(node));
+}
+
+/**
+ * xmlXPathCastNodeSetToString:
+ * @ns: a node-set
+ *
+ * Converts a node-set to its string value.
+ *
+ * Returns a newly allocated string.
+ */
+xmlChar *
+xmlXPathCastNodeSetToString (xmlNodeSetPtr ns) {
+ if ((ns == NULL) || (ns->nodeNr == 0) || (ns->nodeTab == NULL))
+ return(xmlStrdup((const xmlChar *) ""));
+
+ xmlXPathNodeSetSort(ns);
+ return(xmlXPathCastNodeToString(ns->nodeTab[0]));
+}
+
+/**
+ * xmlXPathCastToString:
+ * @val: an XPath object
+ *
+ * Converts an existing object to its string() equivalent
+ *
+ * Returns the string value of the object, NULL in case of error.
+ * A new string is allocated only if needed (@val isn't a
+ * string object).
+ */
+xmlChar *
+xmlXPathCastToString(xmlXPathObjectPtr val) {
+ xmlChar *ret = NULL;
+
+ if (val == NULL)
+ return(xmlStrdup((const xmlChar *) ""));
+ switch (val->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext, "String: undefined\n");
+#endif
+ ret = xmlStrdup((const xmlChar *) "");
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ ret = xmlXPathCastNodeSetToString(val->nodesetval);
+ break;
+ case XPATH_STRING:
+ return(xmlStrdup(val->stringval));
+ case XPATH_BOOLEAN:
+ ret = xmlXPathCastBooleanToString(val->boolval);
+ break;
+ case XPATH_NUMBER: {
+ ret = xmlXPathCastNumberToString(val->floatval);
+ break;
+ }
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO
+ ret = xmlStrdup((const xmlChar *) "");
+ break;
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathConvertString:
+ * @val: an XPath object
+ *
+ * Converts an existing object to its string() equivalent
+ *
+ * Returns the new object, the old one is freed (or the operation
+ * is done directly on @val)
+ */
+xmlXPathObjectPtr
+xmlXPathConvertString(xmlXPathObjectPtr val) {
+ xmlChar *res = NULL;
+
+ if (val == NULL)
+ return(xmlXPathNewCString(""));
+
+ switch (val->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext, "STRING: undefined\n");
+#endif
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ res = xmlXPathCastNodeSetToString(val->nodesetval);
+ break;
+ case XPATH_STRING:
+ return(val);
+ case XPATH_BOOLEAN:
+ res = xmlXPathCastBooleanToString(val->boolval);
+ break;
+ case XPATH_NUMBER:
+ res = xmlXPathCastNumberToString(val->floatval);
+ break;
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO;
+ break;
+ }
+ xmlXPathFreeObject(val);
+ if (res == NULL)
+ return(xmlXPathNewCString(""));
+ return(xmlXPathWrapString(res));
+}
+
+/**
+ * xmlXPathCastBooleanToNumber:
+ * @val: a boolean
+ *
+ * Converts a boolean to its number value
+ *
+ * Returns the number value
+ */
+double
+xmlXPathCastBooleanToNumber(int val) {
+ if (val)
+ return(1.0);
+ return(0.0);
+}
+
+/**
+ * xmlXPathCastStringToNumber:
+ * @val: a string
+ *
+ * Converts a string to its number value
+ *
+ * Returns the number value
+ */
+double
+xmlXPathCastStringToNumber(const xmlChar * val) {
+ return(xmlXPathStringEvalNumber(val));
+}
+
+/**
+ * xmlXPathCastNodeToNumber:
+ * @node: a node
+ *
+ * Converts a node to its number value
+ *
+ * Returns the number value
+ */
+double
+xmlXPathCastNodeToNumber (xmlNodePtr node) {
+ xmlChar *strval;
+ double ret;
+
+ if (node == NULL)
+ return(xmlXPathNAN);
+ strval = xmlXPathCastNodeToString(node);
+ if (strval == NULL)
+ return(xmlXPathNAN);
+ ret = xmlXPathCastStringToNumber(strval);
+ xmlFree(strval);
+
+ return(ret);
+}
+
+/**
+ * xmlXPathCastNodeSetToNumber:
+ * @ns: a node-set
+ *
+ * Converts a node-set to its number value
+ *
+ * Returns the number value
+ */
+double
+xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns) {
+ xmlChar *str;
+ double ret;
+
+ if (ns == NULL)
+ return(xmlXPathNAN);
+ str = xmlXPathCastNodeSetToString(ns);
+ ret = xmlXPathCastStringToNumber(str);
+ xmlFree(str);
+ return(ret);
+}
+
+/**
+ * xmlXPathCastToNumber:
+ * @val: an XPath object
+ *
+ * Converts an XPath object to its number value
+ *
+ * Returns the number value
+ */
+double
+xmlXPathCastToNumber(xmlXPathObjectPtr val) {
+ double ret = 0.0;
+
+ if (val == NULL)
+ return(xmlXPathNAN);
+ switch (val->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEGUB_EXPR
+ xmlGenericError(xmlGenericErrorContext, "NUMBER: undefined\n");
+#endif
+ ret = xmlXPathNAN;
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ ret = xmlXPathCastNodeSetToNumber(val->nodesetval);
+ break;
+ case XPATH_STRING:
+ ret = xmlXPathCastStringToNumber(val->stringval);
+ break;
+ case XPATH_NUMBER:
+ ret = val->floatval;
+ break;
+ case XPATH_BOOLEAN:
+ ret = xmlXPathCastBooleanToNumber(val->boolval);
+ break;
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO;
+ ret = xmlXPathNAN;
+ break;
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathConvertNumber:
+ * @val: an XPath object
+ *
+ * Converts an existing object to its number() equivalent
+ *
+ * Returns the new object, the old one is freed (or the operation
+ * is done directly on @val)
+ */
+xmlXPathObjectPtr
+xmlXPathConvertNumber(xmlXPathObjectPtr val) {
+ xmlXPathObjectPtr ret;
+
+ if (val == NULL)
+ return(xmlXPathNewFloat(0.0));
+ if (val->type == XPATH_NUMBER)
+ return(val);
+ ret = xmlXPathNewFloat(xmlXPathCastToNumber(val));
+ xmlXPathFreeObject(val);
+ return(ret);
+}
+
+/**
+ * xmlXPathCastNumberToBoolean:
+ * @val: a number
+ *
+ * Converts a number to its boolean value
+ *
+ * Returns the boolean value
+ */
+int
+xmlXPathCastNumberToBoolean (double val) {
+ if (xmlXPathIsNaN(val) || (val == 0.0))
+ return(0);
+ return(1);
+}
+
+/**
+ * xmlXPathCastStringToBoolean:
+ * @val: a string
+ *
+ * Converts a string to its boolean value
+ *
+ * Returns the boolean value
+ */
+int
+xmlXPathCastStringToBoolean (const xmlChar *val) {
+ if ((val == NULL) || (xmlStrlen(val) == 0))
+ return(0);
+ return(1);
+}
+
+/**
+ * xmlXPathCastNodeSetToBoolean:
+ * @ns: a node-set
+ *
+ * Converts a node-set to its boolean value
+ *
+ * Returns the boolean value
+ */
+int
+xmlXPathCastNodeSetToBoolean (xmlNodeSetPtr ns) {
+ if ((ns == NULL) || (ns->nodeNr == 0))
+ return(0);
+ return(1);
+}
+
+/**
+ * xmlXPathCastToBoolean:
+ * @val: an XPath object
+ *
+ * Converts an XPath object to its boolean value
+ *
+ * Returns the boolean value
+ */
+int
+xmlXPathCastToBoolean (xmlXPathObjectPtr val) {
+ int ret = 0;
+
+ if (val == NULL)
+ return(0);
+ switch (val->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext, "BOOLEAN: undefined\n");
+#endif
+ ret = 0;
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ ret = xmlXPathCastNodeSetToBoolean(val->nodesetval);
+ break;
+ case XPATH_STRING:
+ ret = xmlXPathCastStringToBoolean(val->stringval);
+ break;
+ case XPATH_NUMBER:
+ ret = xmlXPathCastNumberToBoolean(val->floatval);
+ break;
+ case XPATH_BOOLEAN:
+ ret = val->boolval;
+ break;
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO;
+ ret = 0;
+ break;
+ }
+ return(ret);
+}
+
+
+/**
+ * xmlXPathConvertBoolean:
+ * @val: an XPath object
+ *
+ * Converts an existing object to its boolean() equivalent
+ *
+ * Returns the new object, the old one is freed (or the operation
+ * is done directly on @val)
+ */
+xmlXPathObjectPtr
+xmlXPathConvertBoolean(xmlXPathObjectPtr val) {
+ xmlXPathObjectPtr ret;
+
+ if (val == NULL)
+ return(xmlXPathNewBoolean(0));
+ if (val->type == XPATH_BOOLEAN)
+ return(val);
+ ret = xmlXPathNewBoolean(xmlXPathCastToBoolean(val));
+ xmlXPathFreeObject(val);
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * Routines to handle XPath contexts *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPathNewContext:
+ * @doc: the XML document
+ *
+ * Create a new xmlXPathContext
+ *
+ * Returns the xmlXPathContext just allocated. The caller will need to free it.
+ */
+xmlXPathContextPtr
+xmlXPathNewContext(xmlDocPtr doc) {
+ xmlXPathContextPtr ret;
+
+ ret = (xmlXPathContextPtr) xmlMalloc(sizeof(xmlXPathContext));
+ if (ret == NULL) {
+ xmlXPathErrMemory(NULL, "creating context\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathContext));
+ ret->doc = doc;
+ ret->node = NULL;
+
+ ret->varHash = NULL;
+
+ ret->nb_types = 0;
+ ret->max_types = 0;
+ ret->types = NULL;
+
+ ret->funcHash = xmlHashCreate(0);
+
+ ret->nb_axis = 0;
+ ret->max_axis = 0;
+ ret->axis = NULL;
+
+ ret->nsHash = NULL;
+ ret->user = NULL;
+
+ ret->contextSize = -1;
+ ret->proximityPosition = -1;
+
+ xmlXPathRegisterAllFunctions(ret);
+
+ return(ret);
+}
+
+/**
+ * xmlXPathFreeContext:
+ * @ctxt: the context to free
+ *
+ * Free up an xmlXPathContext
+ */
+void
+xmlXPathFreeContext(xmlXPathContextPtr ctxt) {
+ xmlXPathRegisteredNsCleanup(ctxt);
+ xmlXPathRegisteredFuncsCleanup(ctxt);
+ xmlXPathRegisteredVariablesCleanup(ctxt);
+ xmlFree(ctxt);
+}
+
+/************************************************************************
+ * *
+ * Routines to handle XPath parser contexts *
+ * *
+ ************************************************************************/
+
+#define CHECK_CTXT(ctxt) \
+ if (ctxt == NULL) { \
+ xmlGenericError(xmlGenericErrorContext, \
+ "%s:%d Internal error: ctxt == NULL\n", \
+ __FILE__, __LINE__); \
+ } \
+
+
+#define CHECK_CONTEXT(ctxt) \
+ if (ctxt == NULL) { \
+ xmlGenericError(xmlGenericErrorContext, \
+ "%s:%d Internal error: no context\n", \
+ __FILE__, __LINE__); \
+ } \
+ else if (ctxt->doc == NULL) { \
+ xmlGenericError(xmlGenericErrorContext, \
+ "%s:%d Internal error: no document\n", \
+ __FILE__, __LINE__); \
+ } \
+ else if (ctxt->doc->children == NULL) { \
+ xmlGenericError(xmlGenericErrorContext, \
+ "%s:%d Internal error: document without root\n", \
+ __FILE__, __LINE__); \
+ } \
+
+
+/**
+ * xmlXPathNewParserContext:
+ * @str: the XPath expression
+ * @ctxt: the XPath context
+ *
+ * Create a new xmlXPathParserContext
+ *
+ * Returns the xmlXPathParserContext just allocated.
+ */
+xmlXPathParserContextPtr
+xmlXPathNewParserContext(const xmlChar *str, xmlXPathContextPtr ctxt) {
+ xmlXPathParserContextPtr ret;
+
+ ret = (xmlXPathParserContextPtr) xmlMalloc(sizeof(xmlXPathParserContext));
+ if (ret == NULL) {
+ xmlXPathErrMemory(ctxt, "creating parser context\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathParserContext));
+ ret->cur = ret->base = str;
+ ret->context = ctxt;
+
+ ret->comp = xmlXPathNewCompExpr();
+ if (ret->comp == NULL) {
+ xmlFree(ret->valueTab);
+ xmlFree(ret);
+ return(NULL);
+ }
+ if ((ctxt != NULL) && (ctxt->dict != NULL)) {
+ ret->comp->dict = ctxt->dict;
+ xmlDictReference(ret->comp->dict);
+ }
+
+ return(ret);
+}
+
+/**
+ * xmlXPathCompParserContext:
+ * @comp: the XPath compiled expression
+ * @ctxt: the XPath context
+ *
+ * Create a new xmlXPathParserContext when processing a compiled expression
+ *
+ * Returns the xmlXPathParserContext just allocated.
+ */
+static xmlXPathParserContextPtr
+xmlXPathCompParserContext(xmlXPathCompExprPtr comp, xmlXPathContextPtr ctxt) {
+ xmlXPathParserContextPtr ret;
+
+ ret = (xmlXPathParserContextPtr) xmlMalloc(sizeof(xmlXPathParserContext));
+ if (ret == NULL) {
+ xmlXPathErrMemory(ctxt, "creating evaluation context\n");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathParserContext));
+
+ /* Allocate the value stack */
+ ret->valueTab = (xmlXPathObjectPtr *)
+ xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
+ if (ret->valueTab == NULL) {
+ xmlFree(ret);
+ xmlXPathErrMemory(ctxt, "creating evaluation context\n");
+ return(NULL);
+ }
+ ret->valueNr = 0;
+ ret->valueMax = 10;
+ ret->value = NULL;
+
+ ret->context = ctxt;
+ ret->comp = comp;
+
+ return(ret);
+}
+
+/**
+ * xmlXPathFreeParserContext:
+ * @ctxt: the context to free
+ *
+ * Free up an xmlXPathParserContext
+ */
+void
+xmlXPathFreeParserContext(xmlXPathParserContextPtr ctxt) {
+ if (ctxt->valueTab != NULL) {
+ xmlFree(ctxt->valueTab);
+ }
+ if (ctxt->comp)
+ xmlXPathFreeCompExpr(ctxt->comp);
+ xmlFree(ctxt);
+}
+
+/************************************************************************
+ * *
+ * The implicit core function library *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPathNodeValHash:
+ * @node: a node pointer
+ *
+ * Function computing the beginning of the string value of the node,
+ * used to speed up comparisons
+ *
+ * Returns an int usable as a hash
+ */
+static unsigned int
+xmlXPathNodeValHash(xmlNodePtr node) {
+ int len = 2;
+ const xmlChar * string = NULL;
+ xmlNodePtr tmp = NULL;
+ unsigned int ret = 0;
+
+ if (node == NULL)
+ return(0);
+
+ if (node->type == XML_DOCUMENT_NODE) {
+ tmp = xmlDocGetRootElement((xmlDocPtr) node);
+ if (tmp == NULL)
+ node = node->children;
+ else
+ node = tmp;
+
+ if (node == NULL)
+ return(0);
+ }
+
+ switch (node->type) {
+ case XML_COMMENT_NODE:
+ case XML_PI_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_TEXT_NODE:
+ string = node->content;
+ if (string == NULL)
+ return(0);
+ if (string[0] == 0)
+ return(0);
+ return(((unsigned int) string[0]) +
+ (((unsigned int) string[1]) << 8));
+ case XML_NAMESPACE_DECL:
+ string = ((xmlNsPtr)node)->href;
+ if (string == NULL)
+ return(0);
+ if (string[0] == 0)
+ return(0);
+ return(((unsigned int) string[0]) +
+ (((unsigned int) string[1]) << 8));
+ case XML_ATTRIBUTE_NODE:
+ tmp = ((xmlAttrPtr) node)->children;
+ break;
+ case XML_ELEMENT_NODE:
+ tmp = node->children;
+ break;
+ default:
+ return(0);
+ }
+ while (tmp != NULL) {
+ switch (tmp->type) {
+ case XML_COMMENT_NODE:
+ case XML_PI_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_TEXT_NODE:
+ string = tmp->content;
+ break;
+ case XML_NAMESPACE_DECL:
+ string = ((xmlNsPtr)tmp)->href;
+ break;
+ default:
+ break;
+ }
+ if ((string != NULL) && (string[0] != 0)) {
+ if (len == 1) {
+ return(ret + (((unsigned int) string[0]) << 8));
+ }
+ if (string[1] == 0) {
+ len = 1;
+ ret = (unsigned int) string[0];
+ } else {
+ return(((unsigned int) string[0]) +
+ (((unsigned int) string[1]) << 8));
+ }
+ }
+ /*
+ * Skip to next node
+ */
+ if ((tmp->children != NULL) && (tmp->type != XML_DTD_NODE)) {
+ if (tmp->children->type != XML_ENTITY_DECL) {
+ tmp = tmp->children;
+ continue;
+ }
+ }
+ if (tmp == node)
+ break;
+
+ if (tmp->next != NULL) {
+ tmp = tmp->next;
+ continue;
+ }
+
+ do {
+ tmp = tmp->parent;
+ if (tmp == NULL)
+ break;
+ if (tmp == node) {
+ tmp = NULL;
+ break;
+ }
+ if (tmp->next != NULL) {
+ tmp = tmp->next;
+ break;
+ }
+ } while (tmp != NULL);
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathStringHash:
+ * @string: a string
+ *
+ * Function computing the beginning of the string value of the node,
+ * used to speed up comparisons
+ *
+ * Returns an int usable as a hash
+ */
+static unsigned int
+xmlXPathStringHash(const xmlChar * string) {
+ if (string == NULL)
+ return((unsigned int) 0);
+ if (string[0] == 0)
+ return(0);
+ return(((unsigned int) string[0]) +
+ (((unsigned int) string[1]) << 8));
+}
+
+/**
+ * xmlXPathCompareNodeSetFloat:
+ * @ctxt: the XPath Parser context
+ * @inf: less than (1) or greater than (0)
+ * @strict: is the comparison strict
+ * @arg: the node set
+ * @f: the value
+ *
+ * Implement the compare operation between a nodeset and a number
+ * @ns < @val (1, 1, ...
+ * @ns <= @val (1, 0, ...
+ * @ns > @val (0, 1, ...
+ * @ns >= @val (0, 0, ...
+ *
+ * If one object to be compared is a node-set and the other is a number,
+ * then the comparison will be true if and only if there is a node in the
+ * node-set such that the result of performing the comparison on the number
+ * to be compared and on the result of converting the string-value of that
+ * node to a number using the number function is true.
+ *
+ * Returns 0 or 1 depending on the results of the test.
+ */
+static int
+xmlXPathCompareNodeSetFloat(xmlXPathParserContextPtr ctxt, int inf, int strict,
+ xmlXPathObjectPtr arg, xmlXPathObjectPtr f) {
+ int i, ret = 0;
+ xmlNodeSetPtr ns;
+ xmlChar *str2;
+
+ if ((f == NULL) || (arg == NULL) ||
+ ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE))) {
+ xmlXPathFreeObject(arg);
+ xmlXPathFreeObject(f);
+ return(0);
+ }
+ ns = arg->nodesetval;
+ if (ns != NULL) {
+ for (i = 0;i < ns->nodeNr;i++) {
+ str2 = xmlXPathCastNodeToString(ns->nodeTab[i]);
+ if (str2 != NULL) {
+ valuePush(ctxt,
+ xmlXPathNewString(str2));
+ xmlFree(str2);
+ xmlXPathNumberFunction(ctxt, 1);
+ valuePush(ctxt, xmlXPathObjectCopy(f));
+ ret = xmlXPathCompareValues(ctxt, inf, strict);
+ if (ret)
+ break;
+ }
+ }
+ }
+ xmlXPathFreeObject(arg);
+ xmlXPathFreeObject(f);
+ return(ret);
+}
+
+/**
+ * xmlXPathCompareNodeSetString:
+ * @ctxt: the XPath Parser context
+ * @inf: less than (1) or greater than (0)
+ * @strict: is the comparison strict
+ * @arg: the node set
+ * @s: the value
+ *
+ * Implement the compare operation between a nodeset and a string
+ * @ns < @val (1, 1, ...
+ * @ns <= @val (1, 0, ...
+ * @ns > @val (0, 1, ...
+ * @ns >= @val (0, 0, ...
+ *
+ * If one object to be compared is a node-set and the other is a string,
+ * then the comparison will be true if and only if there is a node in
+ * the node-set such that the result of performing the comparison on the
+ * string-value of the node and the other string is true.
+ *
+ * Returns 0 or 1 depending on the results of the test.
+ */
+static int
+xmlXPathCompareNodeSetString(xmlXPathParserContextPtr ctxt, int inf, int strict,
+ xmlXPathObjectPtr arg, xmlXPathObjectPtr s) {
+ int i, ret = 0;
+ xmlNodeSetPtr ns;
+ xmlChar *str2;
+
+ if ((s == NULL) || (arg == NULL) ||
+ ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE))) {
+ xmlXPathFreeObject(arg);
+ xmlXPathFreeObject(s);
+ return(0);
+ }
+ ns = arg->nodesetval;
+ if (ns != NULL) {
+ for (i = 0;i < ns->nodeNr;i++) {
+ str2 = xmlXPathCastNodeToString(ns->nodeTab[i]);
+ if (str2 != NULL) {
+ valuePush(ctxt,
+ xmlXPathNewString(str2));
+ xmlFree(str2);
+ valuePush(ctxt, xmlXPathObjectCopy(s));
+ ret = xmlXPathCompareValues(ctxt, inf, strict);
+ if (ret)
+ break;
+ }
+ }
+ }
+ xmlXPathFreeObject(arg);
+ xmlXPathFreeObject(s);
+ return(ret);
+}
+
+/**
+ * xmlXPathCompareNodeSets:
+ * @inf: less than (1) or greater than (0)
+ * @strict: is the comparison strict
+ * @arg1: the first node set object
+ * @arg2: the second node set object
+ *
+ * Implement the compare operation on nodesets:
+ *
+ * If both objects to be compared are node-sets, then the comparison
+ * will be true if and only if there is a node in the first node-set
+ * and a node in the second node-set such that the result of performing
+ * the comparison on the string-values of the two nodes is true.
+ * ....
+ * When neither object to be compared is a node-set and the operator
+ * is <=, <, >= or >, then the objects are compared by converting both
+ * objects to numbers and comparing the numbers according to IEEE 754.
+ * ....
+ * The number function converts its argument to a number as follows:
+ * - a string that consists of optional whitespace followed by an
+ * optional minus sign followed by a Number followed by whitespace
+ * is converted to the IEEE 754 number that is nearest (according
+ * to the IEEE 754 round-to-nearest rule) to the mathematical value
+ * represented by the string; any other string is converted to NaN
+ *
+ * Conclusion all nodes need to be converted first to their string value
+ * and then the comparison must be done when possible
+ */
+static int
+xmlXPathCompareNodeSets(int inf, int strict,
+ xmlXPathObjectPtr arg1, xmlXPathObjectPtr arg2) {
+ int i, j, init = 0;
+ double val1;
+ double *values2;
+ int ret = 0;
+ xmlNodeSetPtr ns1;
+ xmlNodeSetPtr ns2;
+
+ if ((arg1 == NULL) ||
+ ((arg1->type != XPATH_NODESET) && (arg1->type != XPATH_XSLT_TREE))) {
+ xmlXPathFreeObject(arg2);
+ return(0);
+ }
+ if ((arg2 == NULL) ||
+ ((arg2->type != XPATH_NODESET) && (arg2->type != XPATH_XSLT_TREE))) {
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ return(0);
+ }
+
+ ns1 = arg1->nodesetval;
+ ns2 = arg2->nodesetval;
+
+ if ((ns1 == NULL) || (ns1->nodeNr <= 0)) {
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ return(0);
+ }
+ if ((ns2 == NULL) || (ns2->nodeNr <= 0)) {
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ return(0);
+ }
+
+ values2 = (double *) xmlMalloc(ns2->nodeNr * sizeof(double));
+ if (values2 == NULL) {
+ xmlXPathErrMemory(NULL, "comparing nodesets\n");
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ return(0);
+ }
+ for (i = 0;i < ns1->nodeNr;i++) {
+ val1 = xmlXPathCastNodeToNumber(ns1->nodeTab[i]);
+ if (xmlXPathIsNaN(val1))
+ continue;
+ for (j = 0;j < ns2->nodeNr;j++) {
+ if (init == 0) {
+ values2[j] = xmlXPathCastNodeToNumber(ns2->nodeTab[j]);
+ }
+ if (xmlXPathIsNaN(values2[j]))
+ continue;
+ if (inf && strict)
+ ret = (val1 < values2[j]);
+ else if (inf && !strict)
+ ret = (val1 <= values2[j]);
+ else if (!inf && strict)
+ ret = (val1 > values2[j]);
+ else if (!inf && !strict)
+ ret = (val1 >= values2[j]);
+ if (ret)
+ break;
+ }
+ if (ret)
+ break;
+ init = 1;
+ }
+ xmlFree(values2);
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ return(ret);
+}
+
+/**
+ * xmlXPathCompareNodeSetValue:
+ * @ctxt: the XPath Parser context
+ * @inf: less than (1) or greater than (0)
+ * @strict: is the comparison strict
+ * @arg: the node set
+ * @val: the value
+ *
+ * Implement the compare operation between a nodeset and a value
+ * @ns < @val (1, 1, ...
+ * @ns <= @val (1, 0, ...
+ * @ns > @val (0, 1, ...
+ * @ns >= @val (0, 0, ...
+ *
+ * If one object to be compared is a node-set and the other is a boolean,
+ * then the comparison will be true if and only if the result of performing
+ * the comparison on the boolean and on the result of converting
+ * the node-set to a boolean using the boolean function is true.
+ *
+ * Returns 0 or 1 depending on the results of the test.
+ */
+static int
+xmlXPathCompareNodeSetValue(xmlXPathParserContextPtr ctxt, int inf, int strict,
+ xmlXPathObjectPtr arg, xmlXPathObjectPtr val) {
+ if ((val == NULL) || (arg == NULL) ||
+ ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE)))
+ return(0);
+
+ switch(val->type) {
+ case XPATH_NUMBER:
+ return(xmlXPathCompareNodeSetFloat(ctxt, inf, strict, arg, val));
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ return(xmlXPathCompareNodeSets(inf, strict, arg, val));
+ case XPATH_STRING:
+ return(xmlXPathCompareNodeSetString(ctxt, inf, strict, arg, val));
+ case XPATH_BOOLEAN:
+ valuePush(ctxt, arg);
+ xmlXPathBooleanFunction(ctxt, 1);
+ valuePush(ctxt, val);
+ return(xmlXPathCompareValues(ctxt, inf, strict));
+ default:
+ TODO
+ }
+ return(0);
+}
+
+/**
+ * xmlXPathEqualNodeSetString:
+ * @arg: the nodeset object argument
+ * @str: the string to compare to.
+ * @neq: flag to show whether for '=' (0) or '!=' (1)
+ *
+ * Implement the equal operation on XPath objects content: @arg1 == @arg2
+ * If one object to be compared is a node-set and the other is a string,
+ * then the comparison will be true if and only if there is a node in
+ * the node-set such that the result of performing the comparison on the
+ * string-value of the node and the other string is true.
+ *
+ * Returns 0 or 1 depending on the results of the test.
+ */
+static int
+xmlXPathEqualNodeSetString(xmlXPathObjectPtr arg, const xmlChar * str, int neq)
+{
+ int i;
+ xmlNodeSetPtr ns;
+ xmlChar *str2;
+ unsigned int hash;
+
+ if ((str == NULL) || (arg == NULL) ||
+ ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE)))
+ return (0);
+ ns = arg->nodesetval;
+ /*
+ * A NULL nodeset compared with a string is always false
+ * (since there is no node equal, and no node not equal)
+ */
+ if ((ns == NULL) || (ns->nodeNr <= 0) )
+ return (0);
+ hash = xmlXPathStringHash(str);
+ for (i = 0; i < ns->nodeNr; i++) {
+ if (xmlXPathNodeValHash(ns->nodeTab[i]) == hash) {
+ str2 = xmlNodeGetContent(ns->nodeTab[i]);
+ if ((str2 != NULL) && (xmlStrEqual(str, str2))) {
+ xmlFree(str2);
+ if (neq)
+ continue;
+ return (1);
+ } else if ((str2 == NULL) && (xmlStrEqual(str, BAD_CAST ""))) {
+ if (neq)
+ continue;
+ return (1);
+ } else if (neq) {
+ if (str2 != NULL)
+ xmlFree(str2);
+ return (1);
+ }
+ if (str2 != NULL)
+ xmlFree(str2);
+ } else if (neq)
+ return (1);
+ }
+ return (0);
+}
+
+/**
+ * xmlXPathEqualNodeSetFloat:
+ * @arg: the nodeset object argument
+ * @f: the float to compare to
+ * @neq: flag to show whether to compare '=' (0) or '!=' (1)
+ *
+ * Implement the equal operation on XPath objects content: @arg1 == @arg2
+ * If one object to be compared is a node-set and the other is a number,
+ * then the comparison will be true if and only if there is a node in
+ * the node-set such that the result of performing the comparison on the
+ * number to be compared and on the result of converting the string-value
+ * of that node to a number using the number function is true.
+ *
+ * Returns 0 or 1 depending on the results of the test.
+ */
+static int
+xmlXPathEqualNodeSetFloat(xmlXPathParserContextPtr ctxt,
+ xmlXPathObjectPtr arg, double f, int neq) {
+ int i, ret=0;
+ xmlNodeSetPtr ns;
+ xmlChar *str2;
+ xmlXPathObjectPtr val;
+ double v;
+
+ if ((arg == NULL) ||
+ ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE)))
+ return(0);
+
+ ns = arg->nodesetval;
+ if (ns != NULL) {
+ for (i=0;i<ns->nodeNr;i++) {
+ str2 = xmlXPathCastNodeToString(ns->nodeTab[i]);
+ if (str2 != NULL) {
+ valuePush(ctxt, xmlXPathNewString(str2));
+ xmlFree(str2);
+ xmlXPathNumberFunction(ctxt, 1);
+ val = valuePop(ctxt);
+ v = val->floatval;
+ xmlXPathFreeObject(val);
+ if (!xmlXPathIsNaN(v)) {
+ if ((!neq) && (v==f)) {
+ ret = 1;
+ break;
+ } else if ((neq) && (v!=f)) {
+ ret = 1;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return(ret);
+}
+
+
+/**
+ * xmlXPathEqualNodeSets:
+ * @arg1: first nodeset object argument
+ * @arg2: second nodeset object argument
+ * @neq: flag to show whether to test '=' (0) or '!=' (1)
+ *
+ * Implement the equal / not equal operation on XPath nodesets:
+ * @arg1 == @arg2 or @arg1 != @arg2
+ * If both objects to be compared are node-sets, then the comparison
+ * will be true if and only if there is a node in the first node-set and
+ * a node in the second node-set such that the result of performing the
+ * comparison on the string-values of the two nodes is true.
+ *
+ * (needless to say, this is a costly operation)
+ *
+ * Returns 0 or 1 depending on the results of the test.
+ */
+static int
+xmlXPathEqualNodeSets(xmlXPathObjectPtr arg1, xmlXPathObjectPtr arg2, int neq) {
+ int i, j;
+ unsigned int *hashs1;
+ unsigned int *hashs2;
+ xmlChar **values1;
+ xmlChar **values2;
+ int ret = 0;
+ xmlNodeSetPtr ns1;
+ xmlNodeSetPtr ns2;
+
+ if ((arg1 == NULL) ||
+ ((arg1->type != XPATH_NODESET) && (arg1->type != XPATH_XSLT_TREE)))
+ return(0);
+ if ((arg2 == NULL) ||
+ ((arg2->type != XPATH_NODESET) && (arg2->type != XPATH_XSLT_TREE)))
+ return(0);
+
+ ns1 = arg1->nodesetval;
+ ns2 = arg2->nodesetval;
+
+ if ((ns1 == NULL) || (ns1->nodeNr <= 0))
+ return(0);
+ if ((ns2 == NULL) || (ns2->nodeNr <= 0))
+ return(0);
+
+ /*
+ * for equal, check if there is a node pertaining to both sets
+ */
+ if (neq == 0)
+ for (i = 0;i < ns1->nodeNr;i++)
+ for (j = 0;j < ns2->nodeNr;j++)
+ if (ns1->nodeTab[i] == ns2->nodeTab[j])
+ return(1);
+
+ values1 = (xmlChar **) xmlMalloc(ns1->nodeNr * sizeof(xmlChar *));
+ if (values1 == NULL) {
+ xmlXPathErrMemory(NULL, "comparing nodesets\n");
+ return(0);
+ }
+ hashs1 = (unsigned int *) xmlMalloc(ns1->nodeNr * sizeof(unsigned int));
+ if (hashs1 == NULL) {
+ xmlXPathErrMemory(NULL, "comparing nodesets\n");
+ xmlFree(values1);
+ return(0);
+ }
+ memset(values1, 0, ns1->nodeNr * sizeof(xmlChar *));
+ values2 = (xmlChar **) xmlMalloc(ns2->nodeNr * sizeof(xmlChar *));
+ if (values2 == NULL) {
+ xmlXPathErrMemory(NULL, "comparing nodesets\n");
+ xmlFree(hashs1);
+ xmlFree(values1);
+ return(0);
+ }
+ hashs2 = (unsigned int *) xmlMalloc(ns2->nodeNr * sizeof(unsigned int));
+ if (hashs2 == NULL) {
+ xmlXPathErrMemory(NULL, "comparing nodesets\n");
+ xmlFree(hashs1);
+ xmlFree(values1);
+ xmlFree(values2);
+ return(0);
+ }
+ memset(values2, 0, ns2->nodeNr * sizeof(xmlChar *));
+ for (i = 0;i < ns1->nodeNr;i++) {
+ hashs1[i] = xmlXPathNodeValHash(ns1->nodeTab[i]);
+ for (j = 0;j < ns2->nodeNr;j++) {
+ if (i == 0)
+ hashs2[j] = xmlXPathNodeValHash(ns2->nodeTab[j]);
+ if (hashs1[i] != hashs2[j]) {
+ if (neq) {
+ ret = 1;
+ break;
+ }
+ }
+ else {
+ if (values1[i] == NULL)
+ values1[i] = xmlNodeGetContent(ns1->nodeTab[i]);
+ if (values2[j] == NULL)
+ values2[j] = xmlNodeGetContent(ns2->nodeTab[j]);
+ ret = xmlStrEqual(values1[i], values2[j]) ^ neq;
+ if (ret)
+ break;
+ }
+ }
+ if (ret)
+ break;
+ }
+ for (i = 0;i < ns1->nodeNr;i++)
+ if (values1[i] != NULL)
+ xmlFree(values1[i]);
+ for (j = 0;j < ns2->nodeNr;j++)
+ if (values2[j] != NULL)
+ xmlFree(values2[j]);
+ xmlFree(values1);
+ xmlFree(values2);
+ xmlFree(hashs1);
+ xmlFree(hashs2);
+ return(ret);
+}
+
+static int
+xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
+ xmlXPathObjectPtr arg1, xmlXPathObjectPtr arg2) {
+ int ret = 0;
+ /*
+ *At this point we are assured neither arg1 nor arg2
+ *is a nodeset, so we can just pick the appropriate routine.
+ */
+ switch (arg1->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "Equal: undefined\n");
+#endif
+ break;
+ case XPATH_BOOLEAN:
+ switch (arg2->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "Equal: undefined\n");
+#endif
+ break;
+ case XPATH_BOOLEAN:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "Equal: %d boolean %d \n",
+ arg1->boolval, arg2->boolval);
+#endif
+ ret = (arg1->boolval == arg2->boolval);
+ break;
+ case XPATH_NUMBER:
+ ret = (arg1->boolval ==
+ xmlXPathCastNumberToBoolean(arg2->floatval));
+ break;
+ case XPATH_STRING:
+ if ((arg2->stringval == NULL) ||
+ (arg2->stringval[0] == 0)) ret = 0;
+ else
+ ret = 1;
+ ret = (arg1->boolval == ret);
+ break;
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ break;
+ }
+ break;
+ case XPATH_NUMBER:
+ switch (arg2->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "Equal: undefined\n");
+#endif
+ break;
+ case XPATH_BOOLEAN:
+ ret = (arg2->boolval==
+ xmlXPathCastNumberToBoolean(arg1->floatval));
+ break;
+ case XPATH_STRING:
+ valuePush(ctxt, arg2);
+ xmlXPathNumberFunction(ctxt, 1);
+ arg2 = valuePop(ctxt);
+ /* no break on purpose */
+ case XPATH_NUMBER:
+ /* Hand check NaN and Infinity equalities */
+ if (xmlXPathIsNaN(arg1->floatval) ||
+ xmlXPathIsNaN(arg2->floatval)) {
+ ret = 0;
+ } else if (xmlXPathIsInf(arg1->floatval) == 1) {
+ if (xmlXPathIsInf(arg2->floatval) == 1)
+ ret = 1;
+ else
+ ret = 0;
+ } else if (xmlXPathIsInf(arg1->floatval) == -1) {
+ if (xmlXPathIsInf(arg2->floatval) == -1)
+ ret = 1;
+ else
+ ret = 0;
+ } else if (xmlXPathIsInf(arg2->floatval) == 1) {
+ if (xmlXPathIsInf(arg1->floatval) == 1)
+ ret = 1;
+ else
+ ret = 0;
+ } else if (xmlXPathIsInf(arg2->floatval) == -1) {
+ if (xmlXPathIsInf(arg1->floatval) == -1)
+ ret = 1;
+ else
+ ret = 0;
+ } else {
+ ret = (arg1->floatval == arg2->floatval);
+ }
+ break;
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ break;
+ }
+ break;
+ case XPATH_STRING:
+ switch (arg2->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "Equal: undefined\n");
+#endif
+ break;
+ case XPATH_BOOLEAN:
+ if ((arg1->stringval == NULL) ||
+ (arg1->stringval[0] == 0)) ret = 0;
+ else
+ ret = 1;
+ ret = (arg2->boolval == ret);
+ break;
+ case XPATH_STRING:
+ ret = xmlStrEqual(arg1->stringval, arg2->stringval);
+ break;
+ case XPATH_NUMBER:
+ valuePush(ctxt, arg1);
+ xmlXPathNumberFunction(ctxt, 1);
+ arg1 = valuePop(ctxt);
+ /* Hand check NaN and Infinity equalities */
+ if (xmlXPathIsNaN(arg1->floatval) ||
+ xmlXPathIsNaN(arg2->floatval)) {
+ ret = 0;
+ } else if (xmlXPathIsInf(arg1->floatval) == 1) {
+ if (xmlXPathIsInf(arg2->floatval) == 1)
+ ret = 1;
+ else
+ ret = 0;
+ } else if (xmlXPathIsInf(arg1->floatval) == -1) {
+ if (xmlXPathIsInf(arg2->floatval) == -1)
+ ret = 1;
+ else
+ ret = 0;
+ } else if (xmlXPathIsInf(arg2->floatval) == 1) {
+ if (xmlXPathIsInf(arg1->floatval) == 1)
+ ret = 1;
+ else
+ ret = 0;
+ } else if (xmlXPathIsInf(arg2->floatval) == -1) {
+ if (xmlXPathIsInf(arg1->floatval) == -1)
+ ret = 1;
+ else
+ ret = 0;
+ } else {
+ ret = (arg1->floatval == arg2->floatval);
+ }
+ break;
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ break;
+ }
+ break;
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ break;
+ }
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ return(ret);
+}
+
+/**
+ * xmlXPathEqualValues:
+ * @ctxt: the XPath Parser context
+ *
+ * Implement the equal operation on XPath objects content: @arg1 == @arg2
+ *
+ * Returns 0 or 1 depending on the results of the test.
+ */
+int
+xmlXPathEqualValues(xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr arg1, arg2, argtmp;
+ int ret = 0;
+
+ arg2 = valuePop(ctxt);
+ arg1 = valuePop(ctxt);
+ if ((arg1 == NULL) || (arg2 == NULL)) {
+ if (arg1 != NULL)
+ xmlXPathFreeObject(arg1);
+ else
+ xmlXPathFreeObject(arg2);
+ XP_ERROR0(XPATH_INVALID_OPERAND);
+ }
+
+ if (arg1 == arg2) {
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "Equal: by pointer\n");
+#endif
+ return(1);
+ }
+
+ /*
+ *If either argument is a nodeset, it's a 'special case'
+ */
+ if ((arg2->type == XPATH_NODESET) || (arg2->type == XPATH_XSLT_TREE) ||
+ (arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE)) {
+ /*
+ *Hack it to assure arg1 is the nodeset
+ */
+ if ((arg1->type != XPATH_NODESET) && (arg1->type != XPATH_XSLT_TREE)) {
+ argtmp = arg2;
+ arg2 = arg1;
+ arg1 = argtmp;
+ }
+ switch (arg2->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "Equal: undefined\n");
+#endif
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ ret = xmlXPathEqualNodeSets(arg1, arg2, 0);
+ break;
+ case XPATH_BOOLEAN:
+ if ((arg1->nodesetval == NULL) ||
+ (arg1->nodesetval->nodeNr == 0)) ret = 0;
+ else
+ ret = 1;
+ ret = (ret == arg2->boolval);
+ break;
+ case XPATH_NUMBER:
+ ret = xmlXPathEqualNodeSetFloat(ctxt, arg1, arg2->floatval, 0);
+ break;
+ case XPATH_STRING:
+ ret = xmlXPathEqualNodeSetString(arg1, arg2->stringval, 0);
+ break;
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO
+ break;
+ }
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ return(ret);
+ }
+
+ return (xmlXPathEqualValuesCommon(ctxt, arg1, arg2));
+}
+
+/**
+ * xmlXPathNotEqualValues:
+ * @ctxt: the XPath Parser context
+ *
+ * Implement the equal operation on XPath objects content: @arg1 == @arg2
+ *
+ * Returns 0 or 1 depending on the results of the test.
+ */
+int
+xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr arg1, arg2, argtmp;
+ int ret = 0;
+
+ arg2 = valuePop(ctxt);
+ arg1 = valuePop(ctxt);
+ if ((arg1 == NULL) || (arg2 == NULL)) {
+ if (arg1 != NULL)
+ xmlXPathFreeObject(arg1);
+ else
+ xmlXPathFreeObject(arg2);
+ XP_ERROR0(XPATH_INVALID_OPERAND);
+ }
+
+ if (arg1 == arg2) {
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "NotEqual: by pointer\n");
+#endif
+ return(0);
+ }
+
+ /*
+ *If either argument is a nodeset, it's a 'special case'
+ */
+ if ((arg2->type == XPATH_NODESET) || (arg2->type == XPATH_XSLT_TREE) ||
+ (arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE)) {
+ /*
+ *Hack it to assure arg1 is the nodeset
+ */
+ if ((arg1->type != XPATH_NODESET) && (arg1->type != XPATH_XSLT_TREE)) {
+ argtmp = arg2;
+ arg2 = arg1;
+ arg1 = argtmp;
+ }
+ switch (arg2->type) {
+ case XPATH_UNDEFINED:
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "NotEqual: undefined\n");
+#endif
+ break;
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ ret = xmlXPathEqualNodeSets(arg1, arg2, 1);
+ break;
+ case XPATH_BOOLEAN:
+ if ((arg1->nodesetval == NULL) ||
+ (arg1->nodesetval->nodeNr == 0)) ret = 0;
+ else
+ ret = 1;
+ ret = (ret != arg2->boolval);
+ break;
+ case XPATH_NUMBER:
+ ret = xmlXPathEqualNodeSetFloat(ctxt, arg1, arg2->floatval, 1);
+ break;
+ case XPATH_STRING:
+ ret = xmlXPathEqualNodeSetString(arg1, arg2->stringval,1);
+ break;
+ case XPATH_USERS:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ TODO
+ break;
+ }
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ return(ret);
+ }
+
+ return (!xmlXPathEqualValuesCommon(ctxt, arg1, arg2));
+}
+
+/**
+ * xmlXPathCompareValues:
+ * @ctxt: the XPath Parser context
+ * @inf: less than (1) or greater than (0)
+ * @strict: is the comparison strict
+ *
+ * Implement the compare operation on XPath objects:
+ * @arg1 < @arg2 (1, 1, ...
+ * @arg1 <= @arg2 (1, 0, ...
+ * @arg1 > @arg2 (0, 1, ...
+ * @arg1 >= @arg2 (0, 0, ...
+ *
+ * When neither object to be compared is a node-set and the operator is
+ * <=, <, >=, >, then the objects are compared by converted both objects
+ * to numbers and comparing the numbers according to IEEE 754. The <
+ * comparison will be true if and only if the first number is less than the
+ * second number. The <= comparison will be true if and only if the first
+ * number is less than or equal to the second number. The > comparison
+ * will be true if and only if the first number is greater than the second
+ * number. The >= comparison will be true if and only if the first number
+ * is greater than or equal to the second number.
+ *
+ * Returns 1 if the comparison succeeded, 0 if it failed
+ */
+int
+xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict) {
+ int ret = 0, arg1i = 0, arg2i = 0;
+ xmlXPathObjectPtr arg1, arg2;
+
+ arg2 = valuePop(ctxt);
+ arg1 = valuePop(ctxt);
+ if ((arg1 == NULL) || (arg2 == NULL)) {
+ if (arg1 != NULL)
+ xmlXPathFreeObject(arg1);
+ else
+ xmlXPathFreeObject(arg2);
+ XP_ERROR0(XPATH_INVALID_OPERAND);
+ }
+
+ if ((arg2->type == XPATH_NODESET) || (arg2->type == XPATH_XSLT_TREE) ||
+ (arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE)) {
+ if (((arg2->type == XPATH_NODESET) || (arg2->type == XPATH_XSLT_TREE)) &&
+ ((arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE))){
+ ret = xmlXPathCompareNodeSets(inf, strict, arg1, arg2);
+ } else {
+ if ((arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE)) {
+ ret = xmlXPathCompareNodeSetValue(ctxt, inf, strict,
+ arg1, arg2);
+ } else {
+ ret = xmlXPathCompareNodeSetValue(ctxt, !inf, strict,
+ arg2, arg1);
+ }
+ }
+ return(ret);
+ }
+
+ if (arg1->type != XPATH_NUMBER) {
+ valuePush(ctxt, arg1);
+ xmlXPathNumberFunction(ctxt, 1);
+ arg1 = valuePop(ctxt);
+ }
+ if (arg1->type != XPATH_NUMBER) {
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ XP_ERROR0(XPATH_INVALID_OPERAND);
+ }
+ if (arg2->type != XPATH_NUMBER) {
+ valuePush(ctxt, arg2);
+ xmlXPathNumberFunction(ctxt, 1);
+ arg2 = valuePop(ctxt);
+ }
+ if (arg2->type != XPATH_NUMBER) {
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ XP_ERROR0(XPATH_INVALID_OPERAND);
+ }
+ /*
+ * Add tests for infinity and nan
+ * => feedback on 3.4 for Inf and NaN
+ */
+ /* Hand check NaN and Infinity comparisons */
+ if (xmlXPathIsNaN(arg1->floatval) || xmlXPathIsNaN(arg2->floatval)) {
+ ret=0;
+ } else {
+ arg1i=xmlXPathIsInf(arg1->floatval);
+ arg2i=xmlXPathIsInf(arg2->floatval);
+ if (inf && strict) {
+ if ((arg1i == -1 && arg2i != -1) ||
+ (arg2i == 1 && arg1i != 1)) {
+ ret = 1;
+ } else if (arg1i == 0 && arg2i == 0) {
+ ret = (arg1->floatval < arg2->floatval);
+ } else {
+ ret = 0;
+ }
+ }
+ else if (inf && !strict) {
+ if (arg1i == -1 || arg2i == 1) {
+ ret = 1;
+ } else if (arg1i == 0 && arg2i == 0) {
+ ret = (arg1->floatval <= arg2->floatval);
+ } else {
+ ret = 0;
+ }
+ }
+ else if (!inf && strict) {
+ if ((arg1i == 1 && arg2i != 1) ||
+ (arg2i == -1 && arg1i != -1)) {
+ ret = 1;
+ } else if (arg1i == 0 && arg2i == 0) {
+ ret = (arg1->floatval > arg2->floatval);
+ } else {
+ ret = 0;
+ }
+ }
+ else if (!inf && !strict) {
+ if (arg1i == 1 || arg2i == -1) {
+ ret = 1;
+ } else if (arg1i == 0 && arg2i == 0) {
+ ret = (arg1->floatval >= arg2->floatval);
+ } else {
+ ret = 0;
+ }
+ }
+ }
+ xmlXPathFreeObject(arg1);
+ xmlXPathFreeObject(arg2);
+ return(ret);
+}
+
+/**
+ * xmlXPathValueFlipSign:
+ * @ctxt: the XPath Parser context
+ *
+ * Implement the unary - operation on an XPath object
+ * The numeric operators convert their operands to numbers as if
+ * by calling the number function.
+ */
+void
+xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt) {
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+ if (xmlXPathIsNaN(ctxt->value->floatval))
+ ctxt->value->floatval=xmlXPathNAN;
+ else if (xmlXPathIsInf(ctxt->value->floatval) == 1)
+ ctxt->value->floatval=xmlXPathNINF;
+ else if (xmlXPathIsInf(ctxt->value->floatval) == -1)
+ ctxt->value->floatval=xmlXPathPINF;
+ else if (ctxt->value->floatval == 0) {
+ if (xmlXPathGetSign(ctxt->value->floatval) == 0)
+ ctxt->value->floatval = xmlXPathNZERO;
+ else
+ ctxt->value->floatval = 0;
+ }
+ else
+ ctxt->value->floatval = - ctxt->value->floatval;
+}
+
+/**
+ * xmlXPathAddValues:
+ * @ctxt: the XPath Parser context
+ *
+ * Implement the add operation on XPath objects:
+ * The numeric operators convert their operands to numbers as if
+ * by calling the number function.
+ */
+void
+xmlXPathAddValues(xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr arg;
+ double val;
+
+ arg = valuePop(ctxt);
+ if (arg == NULL)
+ XP_ERROR(XPATH_INVALID_OPERAND);
+ val = xmlXPathCastToNumber(arg);
+ xmlXPathFreeObject(arg);
+
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+ ctxt->value->floatval += val;
+}
+
+/**
+ * xmlXPathSubValues:
+ * @ctxt: the XPath Parser context
+ *
+ * Implement the subtraction operation on XPath objects:
+ * The numeric operators convert their operands to numbers as if
+ * by calling the number function.
+ */
+void
+xmlXPathSubValues(xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr arg;
+ double val;
+
+ arg = valuePop(ctxt);
+ if (arg == NULL)
+ XP_ERROR(XPATH_INVALID_OPERAND);
+ val = xmlXPathCastToNumber(arg);
+ xmlXPathFreeObject(arg);
+
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+ ctxt->value->floatval -= val;
+}
+
+/**
+ * xmlXPathMultValues:
+ * @ctxt: the XPath Parser context
+ *
+ * Implement the multiply operation on XPath objects:
+ * The numeric operators convert their operands to numbers as if
+ * by calling the number function.
+ */
+void
+xmlXPathMultValues(xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr arg;
+ double val;
+
+ arg = valuePop(ctxt);
+ if (arg == NULL)
+ XP_ERROR(XPATH_INVALID_OPERAND);
+ val = xmlXPathCastToNumber(arg);
+ xmlXPathFreeObject(arg);
+
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+ ctxt->value->floatval *= val;
+}
+
+/**
+ * xmlXPathDivValues:
+ * @ctxt: the XPath Parser context
+ *
+ * Implement the div operation on XPath objects @arg1 / @arg2:
+ * The numeric operators convert their operands to numbers as if
+ * by calling the number function.
+ */
+void
+xmlXPathDivValues(xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr arg;
+ double val;
+
+ arg = valuePop(ctxt);
+ if (arg == NULL)
+ XP_ERROR(XPATH_INVALID_OPERAND);
+ val = xmlXPathCastToNumber(arg);
+ xmlXPathFreeObject(arg);
+
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+ if (xmlXPathIsNaN(val) || xmlXPathIsNaN(ctxt->value->floatval))
+ ctxt->value->floatval = xmlXPathNAN;
+ else if (val == 0 && xmlXPathGetSign(val) != 0) {
+ if (ctxt->value->floatval == 0)
+ ctxt->value->floatval = xmlXPathNAN;
+ else if (ctxt->value->floatval > 0)
+ ctxt->value->floatval = xmlXPathNINF;
+ else if (ctxt->value->floatval < 0)
+ ctxt->value->floatval = xmlXPathPINF;
+ }
+ else if (val == 0) {
+ if (ctxt->value->floatval == 0)
+ ctxt->value->floatval = xmlXPathNAN;
+ else if (ctxt->value->floatval > 0)
+ ctxt->value->floatval = xmlXPathPINF;
+ else if (ctxt->value->floatval < 0)
+ ctxt->value->floatval = xmlXPathNINF;
+ } else
+ ctxt->value->floatval /= val;
+}
+
+/**
+ * xmlXPathModValues:
+ * @ctxt: the XPath Parser context
+ *
+ * Implement the mod operation on XPath objects: @arg1 / @arg2
+ * The numeric operators convert their operands to numbers as if
+ * by calling the number function.
+ */
+void
+xmlXPathModValues(xmlXPathParserContextPtr ctxt) {
+ xmlXPathObjectPtr arg;
+ double arg1, arg2;
+
+ arg = valuePop(ctxt);
+ if (arg == NULL)
+ XP_ERROR(XPATH_INVALID_OPERAND);
+ arg2 = xmlXPathCastToNumber(arg);
+ xmlXPathFreeObject(arg);
+
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+ arg1 = ctxt->value->floatval;
+ if (arg2 == 0)
+ ctxt->value->floatval = xmlXPathNAN;
+ else {
+ ctxt->value->floatval = fmod(arg1, arg2);
+ }
+}
+
+/************************************************************************
+ * *
+ * The traversal functions *
+ * *
+ ************************************************************************/
+
+/*
+ * A traversal function enumerates nodes along an axis.
+ * Initially it must be called with NULL, and it indicates
+ * termination on the axis by returning NULL.
+ */
+typedef xmlNodePtr (*xmlXPathTraversalFunction)
+ (xmlXPathParserContextPtr ctxt, xmlNodePtr cur);
+
+/**
+ * xmlXPathNextSelf:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "self" direction
+ * The self axis contains just the context node itself
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if (cur == NULL)
+ return(ctxt->context->node);
+ return(NULL);
+}
+
+/**
+ * xmlXPathNextChild:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "child" direction
+ * The child axis contains the children of the context node in document order.
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextChild(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if (cur == NULL) {
+ if (ctxt->context->node == NULL) return(NULL);
+ switch (ctxt->context->node->type) {
+ case XML_ELEMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ return(ctxt->context->node->children);
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ return(((xmlDocPtr) ctxt->context->node)->children);
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_ATTRIBUTE_NODE:
+ case XML_NAMESPACE_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ return(NULL);
+ }
+ return(NULL);
+ }
+ if ((cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE))
+ return(NULL);
+ return(cur->next);
+}
+
+/**
+ * xmlXPathNextDescendant:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "descendant" direction
+ * the descendant axis contains the descendants of the context node in document
+ * order; a descendant is a child or a child of a child and so on.
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if (cur == NULL) {
+ if (ctxt->context->node == NULL)
+ return(NULL);
+ if ((ctxt->context->node->type == XML_ATTRIBUTE_NODE) ||
+ (ctxt->context->node->type == XML_NAMESPACE_DECL))
+ return(NULL);
+
+ if (ctxt->context->node == (xmlNodePtr) ctxt->context->doc)
+ return(ctxt->context->doc->children);
+ return(ctxt->context->node->children);
+ }
+
+ 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);
+ }
+ }
+
+ if (cur == ctxt->context->node) return(NULL);
+
+ 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 == ctxt->context->node) return(NULL);
+ if (cur->next != NULL) {
+ cur = cur->next;
+ return(cur);
+ }
+ } while (cur != NULL);
+ return(cur);
+}
+
+/**
+ * xmlXPathNextDescendantOrSelf:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "descendant-or-self" direction
+ * the descendant-or-self axis contains the context node and the descendants
+ * of the context node in document order; thus the context node is the first
+ * node on the axis, and the first child of the context node is the second node
+ * on the axis
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if (cur == NULL) {
+ if (ctxt->context->node == NULL)
+ return(NULL);
+ if ((ctxt->context->node->type == XML_ATTRIBUTE_NODE) ||
+ (ctxt->context->node->type == XML_NAMESPACE_DECL))
+ return(NULL);
+ return(ctxt->context->node);
+ }
+
+ return(xmlXPathNextDescendant(ctxt, cur));
+}
+
+/**
+ * xmlXPathNextParent:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "parent" direction
+ * The parent axis contains the parent of the context node, if there is one.
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextParent(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ /*
+ * the parent of an attribute or namespace node is the element
+ * to which the attribute or namespace node is attached
+ * Namespace handling !!!
+ */
+ if (cur == NULL) {
+ if (ctxt->context->node == NULL) return(NULL);
+ switch (ctxt->context->node->type) {
+ case XML_ELEMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ case XML_ENTITY_DECL:
+ if (ctxt->context->node->parent == NULL)
+ return((xmlNodePtr) ctxt->context->doc);
+ if ((ctxt->context->node->parent->type == XML_ELEMENT_NODE) &&
+ ((ctxt->context->node->parent->name[0] == ' ') ||
+ (xmlStrEqual(ctxt->context->node->parent->name,
+ BAD_CAST "fake node libxslt"))))
+ return(NULL);
+ return(ctxt->context->node->parent);
+ case XML_ATTRIBUTE_NODE: {
+ xmlAttrPtr att = (xmlAttrPtr) ctxt->context->node;
+
+ return(att->parent);
+ }
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ return(NULL);
+ case XML_NAMESPACE_DECL: {
+ xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
+
+ if ((ns->next != NULL) &&
+ (ns->next->type != XML_NAMESPACE_DECL))
+ return((xmlNodePtr) ns->next);
+ return(NULL);
+ }
+ }
+ }
+ return(NULL);
+}
+
+/**
+ * xmlXPathNextAncestor:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "ancestor" direction
+ * the ancestor axis contains the ancestors of the context node; the ancestors
+ * of the context node consist of the parent of context node and the parent's
+ * parent and so on; the nodes are ordered in reverse document order; thus the
+ * parent is the first node on the axis, and the parent's parent is the second
+ * node on the axis
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ /*
+ * the parent of an attribute or namespace node is the element
+ * to which the attribute or namespace node is attached
+ * !!!!!!!!!!!!!
+ */
+ if (cur == NULL) {
+ if (ctxt->context->node == NULL) return(NULL);
+ switch (ctxt->context->node->type) {
+ case XML_ELEMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_NOTATION_NODE:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ if (ctxt->context->node->parent == NULL)
+ return((xmlNodePtr) ctxt->context->doc);
+ if ((ctxt->context->node->parent->type == XML_ELEMENT_NODE) &&
+ ((ctxt->context->node->parent->name[0] == ' ') ||
+ (xmlStrEqual(ctxt->context->node->parent->name,
+ BAD_CAST "fake node libxslt"))))
+ return(NULL);
+ return(ctxt->context->node->parent);
+ case XML_ATTRIBUTE_NODE: {
+ xmlAttrPtr tmp = (xmlAttrPtr) ctxt->context->node;
+
+ return(tmp->parent);
+ }
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ return(NULL);
+ case XML_NAMESPACE_DECL: {
+ xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
+
+ if ((ns->next != NULL) &&
+ (ns->next->type != XML_NAMESPACE_DECL))
+ return((xmlNodePtr) ns->next);
+ /* Bad, how did that namespace end up here ? */
+ return(NULL);
+ }
+ }
+ return(NULL);
+ }
+ if (cur == ctxt->context->doc->children)
+ return((xmlNodePtr) ctxt->context->doc);
+ if (cur == (xmlNodePtr) ctxt->context->doc)
+ return(NULL);
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ if (cur->parent == NULL)
+ return(NULL);
+ if ((cur->parent->type == XML_ELEMENT_NODE) &&
+ ((cur->parent->name[0] == ' ') ||
+ (xmlStrEqual(cur->parent->name,
+ BAD_CAST "fake node libxslt"))))
+ return(NULL);
+ return(cur->parent);
+ case XML_ATTRIBUTE_NODE: {
+ xmlAttrPtr att = (xmlAttrPtr) ctxt->context->node;
+
+ return(att->parent);
+ }
+ case XML_NAMESPACE_DECL: {
+ xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
+
+ if ((ns->next != NULL) &&
+ (ns->next->type != XML_NAMESPACE_DECL))
+ return((xmlNodePtr) ns->next);
+ /* Bad, how did that namespace end up here ? */
+ return(NULL);
+ }
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ return(NULL);
+ }
+ return(NULL);
+}
+
+/**
+ * xmlXPathNextAncestorOrSelf:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "ancestor-or-self" direction
+ * he ancestor-or-self axis contains the context node and ancestors of
+ * the context node in reverse document order; thus the context node is
+ * the first node on the axis, and the context node's parent the second;
+ * parent here is defined the same as with the parent axis.
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if (cur == NULL)
+ return(ctxt->context->node);
+ return(xmlXPathNextAncestor(ctxt, cur));
+}
+
+/**
+ * xmlXPathNextFollowingSibling:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "following-sibling" direction
+ * The following-sibling axis contains the following siblings of the context
+ * node in document order.
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if ((ctxt->context->node->type == XML_ATTRIBUTE_NODE) ||
+ (ctxt->context->node->type == XML_NAMESPACE_DECL))
+ return(NULL);
+ if (cur == (xmlNodePtr) ctxt->context->doc)
+ return(NULL);
+ if (cur == NULL)
+ return(ctxt->context->node->next);
+ return(cur->next);
+}
+
+/**
+ * xmlXPathNextPrecedingSibling:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "preceding-sibling" direction
+ * The preceding-sibling axis contains the preceding siblings of the context
+ * node in reverse document order; the first preceding sibling is first on the
+ * axis; the sibling preceding that node is the second on the axis and so on.
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if ((ctxt->context->node->type == XML_ATTRIBUTE_NODE) ||
+ (ctxt->context->node->type == XML_NAMESPACE_DECL))
+ return(NULL);
+ if (cur == (xmlNodePtr) ctxt->context->doc)
+ return(NULL);
+ if (cur == NULL)
+ return(ctxt->context->node->prev);
+ if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE)) {
+ cur = cur->prev;
+ if (cur == NULL)
+ return(ctxt->context->node->prev);
+ }
+ return(cur->prev);
+}
+
+/**
+ * xmlXPathNextFollowing:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "following" direction
+ * The following axis contains all nodes in the same document as the context
+ * node that are after the context node in document order, excluding any
+ * descendants and excluding attribute nodes and namespace nodes; the nodes
+ * are ordered in document order
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if (cur != NULL && cur->children != NULL)
+ return cur->children ;
+ if (cur == NULL) cur = ctxt->context->node;
+ if (cur == NULL) return(NULL) ; /* ERROR */
+ if (cur->next != NULL) return(cur->next) ;
+ do {
+ cur = cur->parent;
+ if (cur == NULL) return(NULL);
+ if (cur == (xmlNodePtr) ctxt->context->doc) return(NULL);
+ if (cur->next != NULL) return(cur->next);
+ } while (cur != NULL);
+ return(cur);
+}
+
+/*
+ * xmlXPathIsAncestor:
+ * @ancestor: the ancestor node
+ * @node: the current node
+ *
+ * Check that @ancestor is a @node's ancestor
+ *
+ * returns 1 if @ancestor is a @node's ancestor, 0 otherwise.
+ */
+static int
+xmlXPathIsAncestor(xmlNodePtr ancestor, xmlNodePtr node) {
+ if ((ancestor == NULL) || (node == NULL)) return(0);
+ /* nodes need to be in the same document */
+ if (ancestor->doc != node->doc) return(0);
+ /* avoid searching if ancestor or node is the root node */
+ if (ancestor == (xmlNodePtr) node->doc) return(1);
+ if (node == (xmlNodePtr) ancestor->doc) return(0);
+ while (node->parent != NULL) {
+ if (node->parent == ancestor)
+ return(1);
+ node = node->parent;
+ }
+ return(0);
+}
+
+/**
+ * xmlXPathNextPreceding:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "preceding" direction
+ * the preceding axis contains all nodes in the same document as the context
+ * node that are before the context node in document order, excluding any
+ * ancestors and excluding attribute nodes and namespace nodes; the nodes are
+ * ordered in reverse document order
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, xmlNodePtr cur)
+{
+ if (cur == NULL)
+ cur = ctxt->context->node;
+ if (cur == NULL)
+ return (NULL);
+ if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE))
+ cur = cur->prev;
+ do {
+ if (cur->prev != NULL) {
+ for (cur = cur->prev; cur->last != NULL; cur = cur->last) ;
+ return (cur);
+ }
+
+ cur = cur->parent;
+ if (cur == NULL)
+ return (NULL);
+ if (cur == ctxt->context->doc->children)
+ return (NULL);
+ } while (xmlXPathIsAncestor(cur, ctxt->context->node));
+ return (cur);
+}
+
+/**
+ * xmlXPathNextPrecedingInternal:
+ * @ctxt: the XPath Parser context
+ * @cur: the current node in the traversal
+ *
+ * Traversal function for the "preceding" direction
+ * the preceding axis contains all nodes in the same document as the context
+ * node that are before the context node in document order, excluding any
+ * ancestors and excluding attribute nodes and namespace nodes; the nodes are
+ * ordered in reverse document order
+ * This is a faster implementation but internal only since it requires a
+ * state kept in the parser context: ctxt->ancestor.
+ *
+ * Returns the next element following that axis
+ */
+static xmlNodePtr
+xmlXPathNextPrecedingInternal(xmlXPathParserContextPtr ctxt,
+ xmlNodePtr cur)
+{
+ if (cur == NULL) {
+ cur = ctxt->context->node;
+ if (cur == NULL)
+ return (NULL);
+ if (cur->type == XML_NAMESPACE_DECL)
+ cur = (xmlNodePtr)((xmlNsPtr)cur)->next;
+ ctxt->ancestor = cur->parent;
+ }
+ if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE))
+ cur = cur->prev;
+ while (cur->prev == NULL) {
+ cur = cur->parent;
+ if (cur == NULL)
+ return (NULL);
+ if (cur == ctxt->context->doc->children)
+ return (NULL);
+ if (cur != ctxt->ancestor)
+ return (cur);
+ ctxt->ancestor = cur->parent;
+ }
+ cur = cur->prev;
+ while (cur->last != NULL)
+ cur = cur->last;
+ return (cur);
+}
+
+/**
+ * xmlXPathNextNamespace:
+ * @ctxt: the XPath Parser context
+ * @cur: the current attribute in the traversal
+ *
+ * Traversal function for the "namespace" direction
+ * the namespace axis contains the namespace nodes of the context node;
+ * the order of nodes on this axis is implementation-defined; the axis will
+ * be empty unless the context node is an element
+ *
+ * We keep the XML namespace node at the end of the list.
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if (ctxt->context->node->type != XML_ELEMENT_NODE) return(NULL);
+ if (ctxt->context->tmpNsList == NULL && cur != (xmlNodePtr) xmlXPathXMLNamespace) {
+ if (ctxt->context->tmpNsList != NULL)
+ xmlFree(ctxt->context->tmpNsList);
+ ctxt->context->tmpNsList =
+ xmlGetNsList(ctxt->context->doc, ctxt->context->node);
+ ctxt->context->tmpNsNr = 0;
+ if (ctxt->context->tmpNsList != NULL) {
+ while (ctxt->context->tmpNsList[ctxt->context->tmpNsNr] != NULL) {
+ ctxt->context->tmpNsNr++;
+ }
+ }
+ return((xmlNodePtr) xmlXPathXMLNamespace);
+ }
+ if (ctxt->context->tmpNsNr > 0) {
+ return (xmlNodePtr)ctxt->context->tmpNsList[--ctxt->context->tmpNsNr];
+ } else {
+ if (ctxt->context->tmpNsList != NULL)
+ xmlFree(ctxt->context->tmpNsList);
+ ctxt->context->tmpNsList = NULL;
+ return(NULL);
+ }
+}
+
+/**
+ * xmlXPathNextAttribute:
+ * @ctxt: the XPath Parser context
+ * @cur: the current attribute in the traversal
+ *
+ * Traversal function for the "attribute" direction
+ * TODO: support DTD inherited default attributes
+ *
+ * Returns the next element following that axis
+ */
+xmlNodePtr
+xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
+ if (ctxt->context->node == NULL)
+ return(NULL);
+ if (ctxt->context->node->type != XML_ELEMENT_NODE)
+ return(NULL);
+ if (cur == NULL) {
+ if (ctxt->context->node == (xmlNodePtr) ctxt->context->doc)
+ return(NULL);
+ return((xmlNodePtr)ctxt->context->node->properties);
+ }
+ return((xmlNodePtr)cur->next);
+}
+
+/************************************************************************
+ * *
+ * NodeTest Functions *
+ * *
+ ************************************************************************/
+
+#define IS_FUNCTION 200
+
+
+/************************************************************************
+ * *
+ * Implicit tree core function library *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPathRoot:
+ * @ctxt: the XPath Parser context
+ *
+ * Initialize the context to the root of the document
+ */
+void
+xmlXPathRoot(xmlXPathParserContextPtr ctxt) {
+ ctxt->context->node = (xmlNodePtr) ctxt->context->doc;
+ valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node));
+}
+
+/************************************************************************
+ * *
+ * The explicit core function library *
+ *http://www.w3.org/Style/XSL/Group/1999/07/xpath-19990705.html#corelib *
+ * *
+ ************************************************************************/
+
+
+/**
+ * xmlXPathLastFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the last() XPath function
+ * number last()
+ * The last function returns the number of nodes in the context node list.
+ */
+void
+xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ CHECK_ARITY(0);
+ if (ctxt->context->contextSize >= 0) {
+ valuePush(ctxt, xmlXPathNewFloat((double) ctxt->context->contextSize));
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext,
+ "last() : %d\n", ctxt->context->contextSize);
+#endif
+ } else {
+ XP_ERROR(XPATH_INVALID_CTXT_SIZE);
+ }
+}
+
+/**
+ * xmlXPathPositionFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the position() XPath function
+ * number position()
+ * The position function returns the position of the context node in the
+ * context node list. The first position is 1, and so the last position
+ * will be equal to last().
+ */
+void
+xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ CHECK_ARITY(0);
+ if (ctxt->context->proximityPosition >= 0) {
+ valuePush(ctxt,
+ xmlXPathNewFloat((double) ctxt->context->proximityPosition));
+#ifdef DEBUG_EXPR
+ xmlGenericError(xmlGenericErrorContext, "position() : %d\n",
+ ctxt->context->proximityPosition);
+#endif
+ } else {
+ XP_ERROR(XPATH_INVALID_CTXT_POSITION);
+ }
+}
+
+/**
+ * xmlXPathCountFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the count() XPath function
+ * number count(node-set)
+ */
+void
+xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr cur;
+
+ CHECK_ARITY(1);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_NODESET) &&
+ (ctxt->value->type != XPATH_XSLT_TREE)))
+ XP_ERROR(XPATH_INVALID_TYPE);
+ cur = valuePop(ctxt);
+
+ if ((cur == NULL) || (cur->nodesetval == NULL))
+ valuePush(ctxt, xmlXPathNewFloat((double) 0));
+ else if ((cur->type == XPATH_NODESET) || (cur->type == XPATH_XSLT_TREE)) {
+ valuePush(ctxt, xmlXPathNewFloat((double) cur->nodesetval->nodeNr));
+ } else {
+ if ((cur->nodesetval->nodeNr != 1) ||
+ (cur->nodesetval->nodeTab == NULL)) {
+ valuePush(ctxt, xmlXPathNewFloat((double) 0));
+ } else {
+ xmlNodePtr tmp;
+ int i = 0;
+
+ tmp = cur->nodesetval->nodeTab[0];
+ if (tmp != NULL) {
+ tmp = tmp->children;
+ while (tmp != NULL) {
+ tmp = tmp->next;
+ i++;
+ }
+ }
+ valuePush(ctxt, xmlXPathNewFloat((double) i));
+ }
+ }
+ xmlXPathFreeObject(cur);
+}
+
+/**
+ * xmlXPathGetElementsByIds:
+ * @doc: the document
+ * @ids: a whitespace separated list of IDs
+ *
+ * Selects elements by their unique ID.
+ *
+ * Returns a node-set of selected elements.
+ */
+static xmlNodeSetPtr
+xmlXPathGetElementsByIds (xmlDocPtr doc, const xmlChar *ids) {
+ xmlNodeSetPtr ret;
+ const xmlChar *cur = ids;
+ xmlChar *ID;
+ xmlAttrPtr attr;
+ xmlNodePtr elem = NULL;
+
+ if (ids == NULL) return(NULL);
+
+ ret = xmlXPathNodeSetCreate(NULL);
+
+ while (IS_BLANK_CH(*cur)) cur++;
+ while (*cur != 0) {
+ while ((!IS_BLANK_CH(*cur)) && (*cur != 0))
+ cur++;
+
+ ID = xmlStrndup(ids, cur - ids);
+ if (ID != NULL) {
+ if (xmlValidateNCName(ID, 1) == 0) {
+ attr = xmlGetID(doc, ID);
+ if (attr != NULL) {
+ if (attr->type == XML_ATTRIBUTE_NODE)
+ elem = attr->parent;
+ else if (attr->type == XML_ELEMENT_NODE)
+ elem = (xmlNodePtr) attr;
+ else
+ elem = NULL;
+ if (elem != NULL)
+ xmlXPathNodeSetAdd(ret, elem);
+ }
+ }
+ xmlFree(ID);
+ }
+
+ while (IS_BLANK_CH(*cur)) cur++;
+ ids = cur;
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathIdFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the id() XPath function
+ * node-set id(object)
+ * The id function selects elements by their unique ID
+ * (see [5.2.1 Unique IDs]). When the argument to id is of type node-set,
+ * then the result is the union of the result of applying id to the
+ * string value of each of the nodes in the argument node-set. When the
+ * argument to id is of any other type, the argument is converted to a
+ * string as if by a call to the string function; the string is split
+ * into a whitespace-separated list of tokens (whitespace is any sequence
+ * of characters matching the production S); the result is a node-set
+ * containing the elements in the same document as the context node that
+ * have a unique ID equal to any of the tokens in the list.
+ */
+void
+xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlChar *tokens;
+ xmlNodeSetPtr ret;
+ xmlXPathObjectPtr obj;
+
+ CHECK_ARITY(1);
+ obj = valuePop(ctxt);
+ if (obj == NULL) XP_ERROR(XPATH_INVALID_OPERAND);
+ if ((obj->type == XPATH_NODESET) || (obj->type == XPATH_XSLT_TREE)) {
+ xmlNodeSetPtr ns;
+ int i;
+
+ ret = xmlXPathNodeSetCreate(NULL);
+
+ if (obj->nodesetval != NULL) {
+ for (i = 0; i < obj->nodesetval->nodeNr; i++) {
+ tokens =
+ xmlXPathCastNodeToString(obj->nodesetval->nodeTab[i]);
+ ns = xmlXPathGetElementsByIds(ctxt->context->doc, tokens);
+ ret = xmlXPathNodeSetMerge(ret, ns);
+ xmlXPathFreeNodeSet(ns);
+ if (tokens != NULL)
+ xmlFree(tokens);
+ }
+ }
+
+ xmlXPathFreeObject(obj);
+ valuePush(ctxt, xmlXPathWrapNodeSet(ret));
+ return;
+ }
+ obj = xmlXPathConvertString(obj);
+
+ ret = xmlXPathGetElementsByIds(ctxt->context->doc, obj->stringval);
+ valuePush(ctxt, xmlXPathWrapNodeSet(ret));
+
+ xmlXPathFreeObject(obj);
+ return;
+}
+
+/**
+ * xmlXPathLocalNameFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the local-name() XPath function
+ * string local-name(node-set?)
+ * The local-name function returns a string containing the local part
+ * of the name of the node in the argument node-set that is first in
+ * document order. If the node-set is empty or the first node has no
+ * name, an empty string is returned. If the argument is omitted it
+ * defaults to the context node.
+ */
+void
+xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr cur;
+
+ if (nargs == 0) {
+ valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node));
+ nargs = 1;
+ }
+
+ CHECK_ARITY(1);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_NODESET) &&
+ (ctxt->value->type != XPATH_XSLT_TREE)))
+ XP_ERROR(XPATH_INVALID_TYPE);
+ cur = valuePop(ctxt);
+
+ if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr == 0)) {
+ valuePush(ctxt, xmlXPathNewCString(""));
+ } else {
+ int i = 0; /* Should be first in document order !!!!! */
+ switch (cur->nodesetval->nodeTab[i]->type) {
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ case XML_PI_NODE:
+ if (cur->nodesetval->nodeTab[i]->name[0] == ' ')
+ valuePush(ctxt, xmlXPathNewCString(""));
+ else
+ valuePush(ctxt,
+ xmlXPathNewString(cur->nodesetval->nodeTab[i]->name));
+ break;
+ case XML_NAMESPACE_DECL:
+ valuePush(ctxt, xmlXPathNewString(
+ ((xmlNsPtr)cur->nodesetval->nodeTab[i])->prefix));
+ break;
+ default:
+ valuePush(ctxt, xmlXPathNewCString(""));
+ }
+ }
+ xmlXPathFreeObject(cur);
+}
+
+/**
+ * xmlXPathNamespaceURIFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the namespace-uri() XPath function
+ * string namespace-uri(node-set?)
+ * The namespace-uri function returns a string containing the
+ * namespace URI of the expanded name of the node in the argument
+ * node-set that is first in document order. If the node-set is empty,
+ * the first node has no name, or the expanded name has no namespace
+ * URI, an empty string is returned. If the argument is omitted it
+ * defaults to the context node.
+ */
+void
+xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr cur;
+
+ if (nargs == 0) {
+ valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node));
+ nargs = 1;
+ }
+ CHECK_ARITY(1);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_NODESET) &&
+ (ctxt->value->type != XPATH_XSLT_TREE)))
+ XP_ERROR(XPATH_INVALID_TYPE);
+ cur = valuePop(ctxt);
+
+ if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr == 0)) {
+ valuePush(ctxt, xmlXPathNewCString(""));
+ } else {
+ int i = 0; /* Should be first in document order !!!!! */
+ switch (cur->nodesetval->nodeTab[i]->type) {
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ if (cur->nodesetval->nodeTab[i]->ns == NULL)
+ valuePush(ctxt, xmlXPathNewCString(""));
+ else
+ valuePush(ctxt, xmlXPathNewString(
+ cur->nodesetval->nodeTab[i]->ns->href));
+ break;
+ default:
+ valuePush(ctxt, xmlXPathNewCString(""));
+ }
+ }
+ xmlXPathFreeObject(cur);
+}
+
+/**
+ * xmlXPathNameFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the name() XPath function
+ * string name(node-set?)
+ * The name function returns a string containing a QName representing
+ * the name of the node in the argument node-set that is first in document
+ * order. The QName must represent the name with respect to the namespace
+ * declarations in effect on the node whose name is being represented.
+ * Typically, this will be the form in which the name occurred in the XML
+ * source. This need not be the case if there are namespace declarations
+ * in effect on the node that associate multiple prefixes with the same
+ * namespace. However, an implementation may include information about
+ * the original prefix in its representation of nodes; in this case, an
+ * implementation can ensure that the returned string is always the same
+ * as the QName used in the XML source. If the argument it omitted it
+ * defaults to the context node.
+ * Libxml keep the original prefix so the "real qualified name" used is
+ * returned.
+ */
+static void
+xmlXPathNameFunction(xmlXPathParserContextPtr ctxt, int nargs)
+{
+ xmlXPathObjectPtr cur;
+
+ if (nargs == 0) {
+ valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node));
+ nargs = 1;
+ }
+
+ CHECK_ARITY(1);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_NODESET) &&
+ (ctxt->value->type != XPATH_XSLT_TREE)))
+ XP_ERROR(XPATH_INVALID_TYPE);
+ cur = valuePop(ctxt);
+
+ if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr == 0)) {
+ valuePush(ctxt, xmlXPathNewCString(""));
+ } else {
+ int i = 0; /* Should be first in document order !!!!! */
+
+ switch (cur->nodesetval->nodeTab[i]->type) {
+ case XML_ELEMENT_NODE:
+ case XML_ATTRIBUTE_NODE:
+ if (cur->nodesetval->nodeTab[i]->name[0] == ' ')
+ valuePush(ctxt, xmlXPathNewCString(""));
+ else if ((cur->nodesetval->nodeTab[i]->ns == NULL) ||
+ (cur->nodesetval->nodeTab[i]->ns->prefix == NULL)) {
+ valuePush(ctxt,
+ xmlXPathNewString(cur->nodesetval->nodeTab[i]->name));
+
+ } else {
+ xmlChar *fullname;
+
+ fullname = xmlBuildQName(cur->nodesetval->nodeTab[i]->name,
+ cur->nodesetval->nodeTab[i]->ns->prefix,
+ NULL, 0);
+ if (fullname == cur->nodesetval->nodeTab[i]->name)
+ fullname = xmlStrdup(cur->nodesetval->nodeTab[i]->name);
+ if (fullname == NULL) {
+ XP_ERROR(XPATH_MEMORY_ERROR);
+ }
+ valuePush(ctxt, xmlXPathWrapString(fullname));
+ }
+ break;
+ default:
+ valuePush(ctxt,
+ xmlXPathNewNodeSet(cur->nodesetval->nodeTab[i]));
+ xmlXPathLocalNameFunction(ctxt, 1);
+ }
+ }
+ xmlXPathFreeObject(cur);
+}
+
+
+/**
+ * xmlXPathStringFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the string() XPath function
+ * string string(object?)
+ * The string function converts an object to a string as follows:
+ * - A node-set is converted to a string by returning the value of
+ * the node in the node-set that is first in document order.
+ * If the node-set is empty, an empty string is returned.
+ * - A number is converted to a string as follows
+ * + NaN is converted to the string NaN
+ * + positive zero is converted to the string 0
+ * + negative zero is converted to the string 0
+ * + positive infinity is converted to the string Infinity
+ * + negative infinity is converted to the string -Infinity
+ * + if the number is an integer, the number is represented in
+ * decimal form as a Number with no decimal point and no leading
+ * zeros, preceded by a minus sign (-) if the number is negative
+ * + otherwise, the number is represented in decimal form as a
+ * Number including a decimal point with at least one digit
+ * before the decimal point and at least one digit after the
+ * decimal point, preceded by a minus sign (-) if the number
+ * is negative; there must be no leading zeros before the decimal
+ * point apart possibly from the one required digit immediately
+ * before the decimal point; beyond the one required digit
+ * after the decimal point there must be as many, but only as
+ * many, more digits as are needed to uniquely distinguish the
+ * number from all other IEEE 754 numeric values.
+ * - The boolean false value is converted to the string false.
+ * The boolean true value is converted to the string true.
+ *
+ * If the argument is omitted, it defaults to a node-set with the
+ * context node as its only member.
+ */
+void
+xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr cur;
+
+ if (nargs == 0) {
+ valuePush(ctxt,
+ xmlXPathWrapString(
+ xmlXPathCastNodeToString(ctxt->context->node)));
+ return;
+ }
+
+ CHECK_ARITY(1);
+ cur = valuePop(ctxt);
+ if (cur == NULL) XP_ERROR(XPATH_INVALID_OPERAND);
+ cur = xmlXPathConvertString(cur);
+ valuePush(ctxt, cur);
+}
+
+/**
+ * xmlXPathStringLengthFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the string-length() XPath function
+ * number string-length(string?)
+ * The string-length returns the number of characters in the string
+ * (see [3.6 Strings]). If the argument is omitted, it defaults to
+ * the context node converted to a string, in other words the value
+ * of the context node.
+ */
+void
+xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr cur;
+
+ if (nargs == 0) {
+ if (ctxt->context->node == NULL) {
+ valuePush(ctxt, xmlXPathNewFloat(0));
+ } else {
+ xmlChar *content;
+
+ content = xmlXPathCastNodeToString(ctxt->context->node);
+ valuePush(ctxt, xmlXPathNewFloat(xmlUTF8Strlen(content)));
+ xmlFree(content);
+ }
+ return;
+ }
+ CHECK_ARITY(1);
+ CAST_TO_STRING;
+ CHECK_TYPE(XPATH_STRING);
+ cur = valuePop(ctxt);
+ valuePush(ctxt, xmlXPathNewFloat(xmlUTF8Strlen(cur->stringval)));
+ xmlXPathFreeObject(cur);
+}
+
+/**
+ * xmlXPathConcatFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the concat() XPath function
+ * string concat(string, string, string*)
+ * The concat function returns the concatenation of its arguments.
+ */
+void
+xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr cur, newobj;
+ xmlChar *tmp;
+
+ if (nargs < 2) {
+ CHECK_ARITY(2);
+ }
+
+ CAST_TO_STRING;
+ cur = valuePop(ctxt);
+ if ((cur == NULL) || (cur->type != XPATH_STRING)) {
+ xmlXPathFreeObject(cur);
+ return;
+ }
+ nargs--;
+
+ while (nargs > 0) {
+ CAST_TO_STRING;
+ newobj = valuePop(ctxt);
+ if ((newobj == NULL) || (newobj->type != XPATH_STRING)) {
+ xmlXPathFreeObject(newobj);
+ xmlXPathFreeObject(cur);
+ XP_ERROR(XPATH_INVALID_TYPE);
+ }
+ tmp = xmlStrcat(newobj->stringval, cur->stringval);
+ newobj->stringval = cur->stringval;
+ cur->stringval = tmp;
+
+ xmlXPathFreeObject(newobj);
+ nargs--;
+ }
+ valuePush(ctxt, cur);
+}
+
+/**
+ * xmlXPathContainsFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the contains() XPath function
+ * boolean contains(string, string)
+ * The contains function returns true if the first argument string
+ * contains the second argument string, and otherwise returns false.
+ */
+void
+xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr hay, needle;
+
+ CHECK_ARITY(2);
+ CAST_TO_STRING;
+ CHECK_TYPE(XPATH_STRING);
+ needle = valuePop(ctxt);
+ CAST_TO_STRING;
+ hay = valuePop(ctxt);
+ if ((hay == NULL) || (hay->type != XPATH_STRING)) {
+ xmlXPathFreeObject(hay);
+ xmlXPathFreeObject(needle);
+ XP_ERROR(XPATH_INVALID_TYPE);
+ }
+ if (xmlStrstr(hay->stringval, needle->stringval))
+ valuePush(ctxt, xmlXPathNewBoolean(1));
+ else
+ valuePush(ctxt, xmlXPathNewBoolean(0));
+ xmlXPathFreeObject(hay);
+ xmlXPathFreeObject(needle);
+}
+
+/**
+ * xmlXPathStartsWithFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the starts-with() XPath function
+ * boolean starts-with(string, string)
+ * The starts-with function returns true if the first argument string
+ * starts with the second argument string, and otherwise returns false.
+ */
+void
+xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr hay, needle;
+ int n;
+
+ CHECK_ARITY(2);
+ CAST_TO_STRING;
+ CHECK_TYPE(XPATH_STRING);
+ needle = valuePop(ctxt);
+ CAST_TO_STRING;
+ hay = valuePop(ctxt);
+ if ((hay == NULL) || (hay->type != XPATH_STRING)) {
+ xmlXPathFreeObject(hay);
+ xmlXPathFreeObject(needle);
+ XP_ERROR(XPATH_INVALID_TYPE);
+ }
+ n = xmlStrlen(needle->stringval);
+ if (xmlStrncmp(hay->stringval, needle->stringval, n))
+ valuePush(ctxt, xmlXPathNewBoolean(0));
+ else
+ valuePush(ctxt, xmlXPathNewBoolean(1));
+ xmlXPathFreeObject(hay);
+ xmlXPathFreeObject(needle);
+}
+
+/**
+ * xmlXPathSubstringFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the substring() XPath function
+ * string substring(string, number, number?)
+ * The substring function returns the substring of the first argument
+ * starting at the position specified in the second argument with
+ * length specified in the third argument. For example,
+ * substring("12345",2,3) returns "234". If the third argument is not
+ * specified, it returns the substring starting at the position specified
+ * in the second argument and continuing to the end of the string. For
+ * example, substring("12345",2) returns "2345". More precisely, each
+ * character in the string (see [3.6 Strings]) is considered to have a
+ * numeric position: the position of the first character is 1, the position
+ * of the second character is 2 and so on. The returned substring contains
+ * those characters for which the position of the character is greater than
+ * or equal to the second argument and, if the third argument is specified,
+ * less than the sum of the second and third arguments; the comparisons
+ * and addition used for the above follow the standard IEEE 754 rules. Thus:
+ * - substring("12345", 1.5, 2.6) returns "234"
+ * - substring("12345", 0, 3) returns "12"
+ * - substring("12345", 0 div 0, 3) returns ""
+ * - substring("12345", 1, 0 div 0) returns ""
+ * - substring("12345", -42, 1 div 0) returns "12345"
+ * - substring("12345", -1 div 0, 1 div 0) returns ""
+ */
+void
+xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr str, start, len;
+ double le=0, in;
+ int i, l, m;
+ xmlChar *ret;
+
+ if (nargs < 2) {
+ CHECK_ARITY(2);
+ }
+ if (nargs > 3) {
+ CHECK_ARITY(3);
+ }
+ /*
+ * take care of possible last (position) argument
+ */
+ if (nargs == 3) {
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+ len = valuePop(ctxt);
+ le = len->floatval;
+ xmlXPathFreeObject(len);
+ }
+
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+ start = valuePop(ctxt);
+ in = start->floatval;
+ xmlXPathFreeObject(start);
+ CAST_TO_STRING;
+ CHECK_TYPE(XPATH_STRING);
+ str = valuePop(ctxt);
+ m = xmlUTF8Strlen((const unsigned char *)str->stringval);
+
+ /*
+ * If last pos not present, calculate last position
+ */
+ if (nargs != 3) {
+ le = (double)m;
+ if (in < 1.0)
+ in = 1.0;
+ }
+
+ /* Need to check for the special cases where either
+ * the index is NaN, the length is NaN, or both
+ * arguments are infinity (relying on Inf + -Inf = NaN)
+ */
+ if (!xmlXPathIsNaN(in + le) && !xmlXPathIsInf(in)) {
+ /*
+ * To meet the requirements of the spec, the arguments
+ * must be converted to integer format before
+ * initial index calculations are done
+ *
+ * First we go to integer form, rounding up
+ * and checking for special cases
+ */
+ i = (int) in;
+ if (((double)i)+0.5 <= in) i++;
+
+ if (xmlXPathIsInf(le) == 1) {
+ l = m;
+ if (i < 1)
+ i = 1;
+ }
+ else if (xmlXPathIsInf(le) == -1 || le < 0.0)
+ l = 0;
+ else {
+ l = (int) le;
+ if (((double)l)+0.5 <= le) l++;
+ }
+
+ /* Now we normalize inidices */
+ i -= 1;
+ l += i;
+ if (i < 0)
+ i = 0;
+ if (l > m)
+ l = m;
+
+ /* number of chars to copy */
+ l -= i;
+
+ ret = xmlUTF8Strsub(str->stringval, i, l);
+ }
+ else {
+ ret = NULL;
+ }
+
+ if (ret == NULL)
+ valuePush(ctxt, xmlXPathNewCString(""));
+ else {
+ valuePush(ctxt, xmlXPathNewString(ret));
+ xmlFree(ret);
+ }
+
+ xmlXPathFreeObject(str);
+}
+
+/**
+ * xmlXPathSubstringBeforeFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the substring-before() XPath function
+ * string substring-before(string, string)
+ * The substring-before function returns the substring of the first
+ * argument string that precedes the first occurrence of the second
+ * argument string in the first argument string, or the empty string
+ * if the first argument string does not contain the second argument
+ * string. For example, substring-before("1999/04/01","/") returns 1999.
+ */
+void
+xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr str;
+ xmlXPathObjectPtr find;
+ xmlBufferPtr target;
+ const xmlChar *point;
+ int offset;
+
+ CHECK_ARITY(2);
+ CAST_TO_STRING;
+ find = valuePop(ctxt);
+ CAST_TO_STRING;
+ str = valuePop(ctxt);
+
+ target = xmlBufferCreate();
+ if (target) {
+ point = xmlStrstr(str->stringval, find->stringval);
+ if (point) {
+ offset = (int)(point - str->stringval);
+ xmlBufferAdd(target, str->stringval, offset);
+ }
+ valuePush(ctxt, xmlXPathNewString(xmlBufferContent(target)));
+ xmlBufferFree(target);
+ }
+
+ xmlXPathFreeObject(str);
+ xmlXPathFreeObject(find);
+}
+
+/**
+ * xmlXPathSubstringAfterFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the substring-after() XPath function
+ * string substring-after(string, string)
+ * The substring-after function returns the substring of the first
+ * argument string that follows the first occurrence of the second
+ * argument string in the first argument string, or the empty stringi
+ * if the first argument string does not contain the second argument
+ * string. For example, substring-after("1999/04/01","/") returns 04/01,
+ * and substring-after("1999/04/01","19") returns 99/04/01.
+ */
+void
+xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr str;
+ xmlXPathObjectPtr find;
+ xmlBufferPtr target;
+ const xmlChar *point;
+ int offset;
+
+ CHECK_ARITY(2);
+ CAST_TO_STRING;
+ find = valuePop(ctxt);
+ CAST_TO_STRING;
+ str = valuePop(ctxt);
+
+ target = xmlBufferCreate();
+ if (target) {
+ point = xmlStrstr(str->stringval, find->stringval);
+ if (point) {
+ offset = (int)(point - str->stringval) + xmlStrlen(find->stringval);
+ xmlBufferAdd(target, &str->stringval[offset],
+ xmlStrlen(str->stringval) - offset);
+ }
+ valuePush(ctxt, xmlXPathNewString(xmlBufferContent(target)));
+ xmlBufferFree(target);
+ }
+
+ xmlXPathFreeObject(str);
+ xmlXPathFreeObject(find);
+}
+
+/**
+ * xmlXPathNormalizeFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the normalize-space() XPath function
+ * string normalize-space(string?)
+ * The normalize-space function returns the argument string with white
+ * space normalized by stripping leading and trailing whitespace
+ * and replacing sequences of whitespace characters by a single
+ * space. Whitespace characters are the same allowed by the S production
+ * in XML. If the argument is omitted, it defaults to the context
+ * node converted to a string, in other words the value of the context node.
+ */
+void
+xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr obj = NULL;
+ xmlChar *source = NULL;
+ xmlBufferPtr target;
+ xmlChar blank;
+
+ if (nargs == 0) {
+ /* Use current context node */
+ valuePush(ctxt,
+ xmlXPathWrapString(
+ xmlXPathCastNodeToString(ctxt->context->node)));
+ nargs = 1;
+ }
+
+ CHECK_ARITY(1);
+ CAST_TO_STRING;
+ CHECK_TYPE(XPATH_STRING);
+ obj = valuePop(ctxt);
+ source = obj->stringval;
+
+ target = xmlBufferCreate();
+ if (target && source) {
+
+ /* Skip leading whitespaces */
+ while (IS_BLANK_CH(*source))
+ source++;
+
+ /* Collapse intermediate whitespaces, and skip trailing whitespaces */
+ blank = 0;
+ while (*source) {
+ if (IS_BLANK_CH(*source)) {
+ blank = 0x20;
+ } else {
+ if (blank) {
+ xmlBufferAdd(target, &blank, 1);
+ blank = 0;
+ }
+ xmlBufferAdd(target, source, 1);
+ }
+ source++;
+ }
+
+ valuePush(ctxt, xmlXPathNewString(xmlBufferContent(target)));
+ xmlBufferFree(target);
+ }
+ xmlXPathFreeObject(obj);
+}
+
+/**
+ * xmlXPathTranslateFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the translate() XPath function
+ * string translate(string, string, string)
+ * The translate function returns the first argument string with
+ * occurrences of characters in the second argument string replaced
+ * by the character at the corresponding position in the third argument
+ * string. For example, translate("bar","abc","ABC") returns the string
+ * BAr. If there is a character in the second argument string with no
+ * character at a corresponding position in the third argument string
+ * (because the second argument string is longer than the third argument
+ * string), then occurrences of that character in the first argument
+ * string are removed. For example, translate("--aaa--","abc-","ABC")
+ * returns "AAA". If a character occurs more than once in second
+ * argument string, then the first occurrence determines the replacement
+ * character. If the third argument string is longer than the second
+ * argument string, then excess characters are ignored.
+ */
+void
+xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr str;
+ xmlXPathObjectPtr from;
+ xmlXPathObjectPtr to;
+ xmlBufferPtr target;
+ int offset, max;
+ xmlChar ch;
+ xmlChar *point;
+ xmlChar *cptr;
+
+ CHECK_ARITY(3);
+
+ CAST_TO_STRING;
+ to = valuePop(ctxt);
+ CAST_TO_STRING;
+ from = valuePop(ctxt);
+ CAST_TO_STRING;
+ str = valuePop(ctxt);
+
+ target = xmlBufferCreate();
+ if (target) {
+ max = xmlUTF8Strlen(to->stringval);
+ for (cptr = str->stringval; (ch=*cptr); ) {
+ offset = xmlUTF8Strloc(from->stringval, cptr);
+ if (offset >= 0) {
+ if (offset < max) {
+ point = xmlUTF8Strpos(to->stringval, offset);
+ if (point)
+ xmlBufferAdd(target, point, xmlUTF8Strsize(point, 1));
+ }
+ } else
+ xmlBufferAdd(target, cptr, xmlUTF8Strsize(cptr, 1));
+
+ /* Step to next character in input */
+ cptr++;
+ if ( ch & 0x80 ) {
+ /* if not simple ascii, verify proper format */
+ if ( (ch & 0xc0) != 0xc0 ) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathTranslateFunction: Invalid UTF8 string\n");
+ break;
+ }
+ /* then skip over remaining bytes for this char */
+ while ( (ch <<= 1) & 0x80 )
+ if ( (*cptr++ & 0xc0) != 0x80 ) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathTranslateFunction: Invalid UTF8 string\n");
+ break;
+ }
+ if (ch & 0x80) /* must have had error encountered */
+ break;
+ }
+ }
+ }
+ valuePush(ctxt, xmlXPathNewString(xmlBufferContent(target)));
+ xmlBufferFree(target);
+ xmlXPathFreeObject(str);
+ xmlXPathFreeObject(from);
+ xmlXPathFreeObject(to);
+}
+
+/**
+ * xmlXPathBooleanFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the boolean() XPath function
+ * boolean boolean(object)
+ * The boolean function converts its argument to a boolean as follows:
+ * - a number is true if and only if it is neither positive or
+ * negative zero nor NaN
+ * - a node-set is true if and only if it is non-empty
+ * - a string is true if and only if its length is non-zero
+ */
+void
+xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr cur;
+
+ CHECK_ARITY(1);
+ cur = valuePop(ctxt);
+ if (cur == NULL) XP_ERROR(XPATH_INVALID_OPERAND);
+ cur = xmlXPathConvertBoolean(cur);
+ valuePush(ctxt, cur);
+}
+
+/**
+ * xmlXPathNotFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the not() XPath function
+ * boolean not(boolean)
+ * The not function returns true if its argument is false,
+ * and false otherwise.
+ */
+void
+xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ CHECK_ARITY(1);
+ CAST_TO_BOOLEAN;
+ CHECK_TYPE(XPATH_BOOLEAN);
+ ctxt->value->boolval = ! ctxt->value->boolval;
+}
+
+/**
+ * xmlXPathTrueFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the true() XPath function
+ * boolean true()
+ */
+void
+xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ CHECK_ARITY(0);
+ valuePush(ctxt, xmlXPathNewBoolean(1));
+}
+
+/**
+ * xmlXPathFalseFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the false() XPath function
+ * boolean false()
+ */
+void
+xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ CHECK_ARITY(0);
+ valuePush(ctxt, xmlXPathNewBoolean(0));
+}
+
+/**
+ * xmlXPathLangFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the lang() XPath function
+ * boolean lang(string)
+ * The lang function returns true or false depending on whether the
+ * language of the context node as specified by xml:lang attributes
+ * is the same as or is a sublanguage of the language specified by
+ * the argument string. The language of the context node is determined
+ * by the value of the xml:lang attribute on the context node, or, if
+ * the context node has no xml:lang attribute, by the value of the
+ * xml:lang attribute on the nearest ancestor of the context node that
+ * has an xml:lang attribute. If there is no such attribute, then lang
+ * returns false. If there is such an attribute, then lang returns
+ * true if the attribute value is equal to the argument ignoring case,
+ * or if there is some suffix starting with - such that the attribute
+ * value is equal to the argument ignoring that suffix of the attribute
+ * value and ignoring case.
+ */
+void
+xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr val;
+ const xmlChar *theLang;
+ const xmlChar *lang;
+ int ret = 0;
+ int i;
+
+ CHECK_ARITY(1);
+ CAST_TO_STRING;
+ CHECK_TYPE(XPATH_STRING);
+ val = valuePop(ctxt);
+ lang = val->stringval;
+ theLang = xmlNodeGetLang(ctxt->context->node);
+ if ((theLang != NULL) && (lang != NULL)) {
+ for (i = 0;lang[i] != 0;i++)
+ if (toupper(lang[i]) != toupper(theLang[i]))
+ goto not_equal;
+ ret = 1;
+ }
+not_equal:
+ xmlFree((void *)theLang);
+ xmlXPathFreeObject(val);
+ valuePush(ctxt, xmlXPathNewBoolean(ret));
+}
+
+/**
+ * xmlXPathNumberFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the number() XPath function
+ * number number(object?)
+ */
+void
+xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr cur;
+ double res;
+
+ if (nargs == 0) {
+ if (ctxt->context->node == NULL) {
+ valuePush(ctxt, xmlXPathNewFloat(0.0));
+ } else {
+ xmlChar* content = xmlNodeGetContent(ctxt->context->node);
+
+ res = xmlXPathStringEvalNumber(content);
+ valuePush(ctxt, xmlXPathNewFloat(res));
+ xmlFree(content);
+ }
+ return;
+ }
+
+ CHECK_ARITY(1);
+ cur = valuePop(ctxt);
+ cur = xmlXPathConvertNumber(cur);
+ valuePush(ctxt, cur);
+}
+
+/**
+ * xmlXPathSumFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the sum() XPath function
+ * number sum(node-set)
+ * The sum function returns the sum of the values of the nodes in
+ * the argument node-set.
+ */
+void
+xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr cur;
+ int i;
+ double res = 0.0;
+
+ CHECK_ARITY(1);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_NODESET) &&
+ (ctxt->value->type != XPATH_XSLT_TREE)))
+ XP_ERROR(XPATH_INVALID_TYPE);
+ cur = valuePop(ctxt);
+
+ if ((cur->nodesetval != NULL) && (cur->nodesetval->nodeNr != 0)) {
+ for (i = 0; i < cur->nodesetval->nodeNr; i++) {
+ res += xmlXPathCastNodeToNumber(cur->nodesetval->nodeTab[i]);
+ }
+ }
+ valuePush(ctxt, xmlXPathNewFloat(res));
+ xmlXPathFreeObject(cur);
+}
+
+/**
+ * xmlXPathFloorFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the floor() XPath function
+ * number floor(number)
+ * The floor function returns the largest (closest to positive infinity)
+ * number that is not greater than the argument and that is an integer.
+ */
+void
+xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ double f;
+
+ CHECK_ARITY(1);
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+
+ f = (double)((int) ctxt->value->floatval);
+ if (f != ctxt->value->floatval) {
+ if (ctxt->value->floatval > 0)
+ ctxt->value->floatval = f;
+ else
+ ctxt->value->floatval = f - 1;
+ }
+}
+
+/**
+ * xmlXPathCeilingFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the ceiling() XPath function
+ * number ceiling(number)
+ * The ceiling function returns the smallest (closest to negative infinity)
+ * number that is not less than the argument and that is an integer.
+ */
+void
+xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ double f;
+
+ CHECK_ARITY(1);
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+
+#if 0
+ ctxt->value->floatval = ceil(ctxt->value->floatval);
+#else
+ f = (double)((int) ctxt->value->floatval);
+ if (f != ctxt->value->floatval) {
+ if (ctxt->value->floatval > 0)
+ ctxt->value->floatval = f + 1;
+ else {
+ if (ctxt->value->floatval < 0 && f == 0)
+ ctxt->value->floatval = xmlXPathNZERO;
+ else
+ ctxt->value->floatval = f;
+ }
+
+ }
+#endif
+}
+
+/**
+ * xmlXPathRoundFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the round() XPath function
+ * number round(number)
+ * The round function returns the number that is closest to the
+ * argument and that is an integer. If there are two such numbers,
+ * then the one that is even is returned.
+ */
+void
+xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ double f;
+
+ CHECK_ARITY(1);
+ CAST_TO_NUMBER;
+ CHECK_TYPE(XPATH_NUMBER);
+
+ if ((xmlXPathIsNaN(ctxt->value->floatval)) ||
+ (xmlXPathIsInf(ctxt->value->floatval) == 1) ||
+ (xmlXPathIsInf(ctxt->value->floatval) == -1) ||
+ (ctxt->value->floatval == 0.0))
+ return;
+
+ f = (double)((int) ctxt->value->floatval);
+ if (ctxt->value->floatval < 0) {
+ if (ctxt->value->floatval < f - 0.5)
+ ctxt->value->floatval = f - 1;
+ else
+ ctxt->value->floatval = f;
+ if (ctxt->value->floatval == 0)
+ ctxt->value->floatval = xmlXPathNZERO;
+ } else {
+ if (ctxt->value->floatval < f + 0.5)
+ ctxt->value->floatval = f;
+ else
+ ctxt->value->floatval = f + 1;
+ }
+}
+
+/************************************************************************
+ * *
+ * The Parser *
+ * *
+ ************************************************************************/
+
+/*
+ * a few forward declarations since we use a recursive call based
+ * implementation.
+ */
+static void xmlXPathCompileExpr(xmlXPathParserContextPtr ctxt);
+static void xmlXPathCompPredicate(xmlXPathParserContextPtr ctxt, int filter);
+static void xmlXPathCompLocationPath(xmlXPathParserContextPtr ctxt);
+static void xmlXPathCompRelativeLocationPath(xmlXPathParserContextPtr ctxt);
+static xmlChar * xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt,
+ int qualified);
+
+/**
+ * xmlXPathCurrentChar:
+ * @ctxt: the XPath parser context
+ * @cur: pointer to the beginning of the char
+ * @len: pointer to the length of the char read
+ *
+ * The current char value, if using UTF-8 this may actually span multiple
+ * bytes in the input buffer.
+ *
+ * Returns the current char value and its length
+ */
+
+static int
+xmlXPathCurrentChar(xmlXPathParserContextPtr ctxt, int *len) {
+ unsigned char c;
+ unsigned int val;
+ const xmlChar *cur;
+
+ if (ctxt == NULL)
+ return(0);
+ cur = ctxt->cur;
+
+ /*
+ * We are supposed to handle UTF8, check it's valid
+ * From rfc2044: encoding of the Unicode values on UTF-8:
+ *
+ * UCS-4 range (hex.) UTF-8 octet sequence (binary)
+ * 0000 0000-0000 007F 0xxxxxxx
+ * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
+ * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
+ *
+ * Check for the 0x110000 limit too
+ */
+ c = *cur;
+ if (c & 0x80) {
+ if ((cur[1] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xe0) == 0xe0) {
+
+ if ((cur[2] & 0xc0) != 0x80)
+ goto encoding_error;
+ if ((c & 0xf0) == 0xf0) {
+ if (((c & 0xf8) != 0xf0) ||
+ ((cur[3] & 0xc0) != 0x80))
+ goto encoding_error;
+ /* 4-byte code */
+ *len = 4;
+ val = (cur[0] & 0x7) << 18;
+ val |= (cur[1] & 0x3f) << 12;
+ val |= (cur[2] & 0x3f) << 6;
+ val |= cur[3] & 0x3f;
+ } else {
+ /* 3-byte code */
+ *len = 3;
+ val = (cur[0] & 0xf) << 12;
+ val |= (cur[1] & 0x3f) << 6;
+ val |= cur[2] & 0x3f;
+ }
+ } else {
+ /* 2-byte code */
+ *len = 2;
+ val = (cur[0] & 0x1f) << 6;
+ val |= cur[1] & 0x3f;
+ }
+ if (!IS_CHAR(val)) {
+ XP_ERROR0(XPATH_INVALID_CHAR_ERROR);
+ }
+ return(val);
+ } else {
+ /* 1-byte code */
+ *len = 1;
+ return((int) *cur);
+ }
+encoding_error:
+ /*
+ * If we detect an UTF8 error that probably means that the
+ * input encoding didn't get properly advertised in the
+ * declaration header. Report the error and switch the encoding
+ * to ISO-Latin-1 (if you don't like this policy, just declare the
+ * encoding !)
+ */
+ *len = 0;
+ XP_ERROR0(XPATH_ENCODING_ERROR);
+}
+
+/**
+ * xmlXPathParseNCName:
+ * @ctxt: the XPath Parser context
+ *
+ * parse an XML namespace non qualified name.
+ *
+ * [NS 3] NCName ::= (Letter | '_') (NCNameChar)*
+ *
+ * [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' |
+ * CombiningChar | Extender
+ *
+ * Returns the namespace name or NULL
+ */
+
+xmlChar *
+xmlXPathParseNCName(xmlXPathParserContextPtr ctxt) {
+ const xmlChar *in;
+ xmlChar *ret;
+ int count = 0;
+
+ /*
+ * Accelerator for simple ASCII names
+ */
+ in = ctxt->cur;
+ if (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ (*in == '_')) {
+ in++;
+ while (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ ((*in >= 0x30) && (*in <= 0x39)) ||
+ (*in == '_') || (*in == '.') ||
+ (*in == '-'))
+ in++;
+ if ((*in == ' ') || (*in == '>') || (*in == '/') ||
+ (*in == '[') || (*in == ']') || (*in == ':') ||
+ (*in == '@') || (*in == '*')) {
+ count = in - ctxt->cur;
+ if (count == 0)
+ return(NULL);
+ ret = xmlStrndup(ctxt->cur, count);
+ ctxt->cur = in;
+ return(ret);
+ }
+ }
+ return(xmlXPathParseNameComplex(ctxt, 0));
+}
+
+
+/**
+ * xmlXPathParseQName:
+ * @ctxt: the XPath Parser context
+ * @prefix: a xmlChar **
+ *
+ * parse an XML qualified name
+ *
+ * [NS 5] QName ::= (Prefix ':')? LocalPart
+ *
+ * [NS 6] Prefix ::= NCName
+ *
+ * [NS 7] LocalPart ::= NCName
+ *
+ * Returns the function returns the local part, and prefix is updated
+ * to get the Prefix if any.
+ */
+
+static xmlChar *
+xmlXPathParseQName(xmlXPathParserContextPtr ctxt, xmlChar **prefix) {
+ xmlChar *ret = NULL;
+
+ *prefix = NULL;
+ ret = xmlXPathParseNCName(ctxt);
+ if (CUR == ':') {
+ *prefix = ret;
+ NEXT;
+ ret = xmlXPathParseNCName(ctxt);
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathParseName:
+ * @ctxt: the XPath Parser context
+ *
+ * parse an XML name
+ *
+ * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
+ * CombiningChar | Extender
+ *
+ * [5] Name ::= (Letter | '_' | ':') (NameChar)*
+ *
+ * Returns the namespace name or NULL
+ */
+
+xmlChar *
+xmlXPathParseName(xmlXPathParserContextPtr ctxt) {
+ const xmlChar *in;
+ xmlChar *ret;
+ int count = 0;
+
+ /*
+ * Accelerator for simple ASCII names
+ */
+ in = ctxt->cur;
+ if (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ (*in == '_') || (*in == ':')) {
+ in++;
+ while (((*in >= 0x61) && (*in <= 0x7A)) ||
+ ((*in >= 0x41) && (*in <= 0x5A)) ||
+ ((*in >= 0x30) && (*in <= 0x39)) ||
+ (*in == '_') || (*in == '-') ||
+ (*in == ':') || (*in == '.'))
+ in++;
+ if ((*in > 0) && (*in < 0x80)) {
+ count = in - ctxt->cur;
+ ret = xmlStrndup(ctxt->cur, count);
+ ctxt->cur = in;
+ return(ret);
+ }
+ }
+ return(xmlXPathParseNameComplex(ctxt, 1));
+}
+
+static xmlChar *
+xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) {
+ xmlChar buf[XML_MAX_NAMELEN + 5];
+ int len = 0, l;
+ int c;
+
+ /*
+ * Handler for more complex cases
+ */
+ c = CUR_CHAR(l);
+ if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
+ (c == '[') || (c == ']') || (c == '@') || /* accelerators */
+ (c == '*') || /* accelerators */
+ (!IS_LETTER(c) && (c != '_') &&
+ ((qualified) && (c != ':')))) {
+ return(NULL);
+ }
+
+ while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
+ ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
+ (c == '.') || (c == '-') ||
+ (c == '_') || ((qualified) && (c == ':')) ||
+ (IS_COMBINING(c)) ||
+ (IS_EXTENDER(c)))) {
+ COPY_BUF(l,buf,len,c);
+ NEXTL(l);
+ c = CUR_CHAR(l);
+ if (len >= XML_MAX_NAMELEN) {
+ /*
+ * Okay someone managed to make a huge name, so he's ready to pay
+ * for the processing speed.
+ */
+ xmlChar *buffer;
+ int max = len * 2;
+
+ buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ XP_ERROR0(XPATH_MEMORY_ERROR);
+ }
+ memcpy(buffer, buf, len);
+ while ((IS_LETTER(c)) || (IS_DIGIT(c)) || /* test bigname.xml */
+ (c == '.') || (c == '-') ||
+ (c == '_') || ((qualified) && (c == ':')) ||
+ (IS_COMBINING(c)) ||
+ (IS_EXTENDER(c))) {
+ if (len + 10 > max) {
+ max *= 2;
+ buffer = (xmlChar *) xmlRealloc(buffer,
+ max * sizeof(xmlChar));
+ if (buffer == NULL) {
+ XP_ERROR0(XPATH_MEMORY_ERROR);
+ }
+ }
+ COPY_BUF(l,buffer,len,c);
+ NEXTL(l);
+ c = CUR_CHAR(l);
+ }
+ buffer[len] = 0;
+ return(buffer);
+ }
+ }
+ if (len == 0)
+ return(NULL);
+ return(xmlStrndup(buf, len));
+}
+
+#define MAX_FRAC 20
+
+/*
+ * These are used as divisors for the fractional part of a number.
+ * Since the table includes 1.0 (representing '0' fractional digits),
+ * it must be dimensioned at MAX_FRAC+1 (bug 133921)
+ */
+static double my_pow10[MAX_FRAC+1] = {
+ 1.0, 10.0, 100.0, 1000.0, 10000.0,
+ 100000.0, 1000000.0, 10000000.0, 100000000.0, 1000000000.0,
+ 10000000000.0, 100000000000.0, 1000000000000.0, 10000000000000.0,
+ 100000000000000.0,
+ 1000000000000000.0, 10000000000000000.0, 100000000000000000.0,
+ 1000000000000000000.0, 10000000000000000000.0, 100000000000000000000.0
+};
+
+/**
+ * xmlXPathStringEvalNumber:
+ * @str: A string to scan
+ *
+ * [30a] Float ::= Number ('e' Digits?)?
+ *
+ * [30] Number ::= Digits ('.' Digits?)?
+ * | '.' Digits
+ * [31] Digits ::= [0-9]+
+ *
+ * Compile a Number in the string
+ * In complement of the Number expression, this function also handles
+ * negative values : '-' Number.
+ *
+ * Returns the double value.
+ */
+double
+xmlXPathStringEvalNumber(const xmlChar *str) {
+ const xmlChar *cur = str;
+ double ret;
+ int ok = 0;
+ int isneg = 0;
+ int exponent = 0;
+ int is_exponent_negative = 0;
+#ifdef __GNUC__
+ unsigned long tmp = 0;
+ double temp;
+#endif
+ if (cur == NULL) return(0);
+ while (IS_BLANK_CH(*cur)) cur++;
+ if ((*cur != '.') && ((*cur < '0') || (*cur > '9')) && (*cur != '-')) {
+ return(xmlXPathNAN);
+ }
+ if (*cur == '-') {
+ isneg = 1;
+ cur++;
+ }
+
+#ifdef __GNUC__
+ /*
+ * tmp/temp is a workaround against a gcc compiler bug
+ * http://veillard.com/gcc.bug
+ */
+ ret = 0;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ ret = ret * 10;
+ tmp = (*cur - '0');
+ ok = 1;
+ cur++;
+ temp = (double) tmp;
+ ret = ret + temp;
+ }
+#else
+ ret = 0;
+ while ((*cur >= '0') && (*cur <= '9')) {
+ ret = ret * 10 + (*cur - '0');
+ ok = 1;
+ cur++;
+ }
+#endif
+
+ if (*cur == '.') {
+ int v, frac = 0;
+ double fraction = 0;
+
+ cur++;
+ if (((*cur < '0') || (*cur > '9')) && (!ok)) {
+ return(xmlXPathNAN);
+ }
+ while (((*cur >= '0') && (*cur <= '9')) && (frac < MAX_FRAC)) {
+ v = (*cur - '0');
+ fraction = fraction * 10 + v;
+ frac = frac + 1;
+ cur++;
+ }
+ fraction /= my_pow10[frac];
+ ret = ret + fraction;
+ while ((*cur >= '0') && (*cur <= '9'))
+ cur++;
+ }
+ if ((*cur == 'e') || (*cur == 'E')) {
+ cur++;
+ if (*cur == '-') {
+ is_exponent_negative = 1;
+ cur++;
+ }
+ while ((*cur >= '0') && (*cur <= '9')) {
+ exponent = exponent * 10 + (*cur - '0');
+ cur++;
+ }
+ }
+ while (IS_BLANK_CH(*cur)) cur++;
+ if (*cur != 0) return(xmlXPathNAN);
+ if (isneg) ret = -ret;
+ if (is_exponent_negative) exponent = -exponent;
+ ret *= pow(10.0, (double)exponent);
+ return(ret);
+}
+
+/**
+ * xmlXPathCompNumber:
+ * @ctxt: the XPath Parser context
+ *
+ * [30] Number ::= Digits ('.' Digits?)?
+ * | '.' Digits
+ * [31] Digits ::= [0-9]+
+ *
+ * Compile a Number, then push it on the stack
+ *
+ */
+static void
+xmlXPathCompNumber(xmlXPathParserContextPtr ctxt)
+{
+ double ret = 0.0;
+ double mult = 1;
+ int ok = 0;
+ int exponent = 0;
+ int is_exponent_negative = 0;
+#ifdef __GNUC__
+ unsigned long tmp = 0;
+ double temp;
+#endif
+
+ CHECK_ERROR;
+ if ((CUR != '.') && ((CUR < '0') || (CUR > '9'))) {
+ XP_ERROR(XPATH_NUMBER_ERROR);
+ }
+#ifdef __GNUC__
+ /*
+ * tmp/temp is a workaround against a gcc compiler bug
+ * http://veillard.com/gcc.bug
+ */
+ ret = 0;
+ while ((CUR >= '0') && (CUR <= '9')) {
+ ret = ret * 10;
+ tmp = (CUR - '0');
+ ok = 1;
+ NEXT;
+ temp = (double) tmp;
+ ret = ret + temp;
+ }
+#else
+ ret = 0;
+ while ((CUR >= '0') && (CUR <= '9')) {
+ ret = ret * 10 + (CUR - '0');
+ ok = 1;
+ NEXT;
+ }
+#endif
+ if (CUR == '.') {
+ NEXT;
+ if (((CUR < '0') || (CUR > '9')) && (!ok)) {
+ XP_ERROR(XPATH_NUMBER_ERROR);
+ }
+ while ((CUR >= '0') && (CUR <= '9')) {
+ mult /= 10;
+ ret = ret + (CUR - '0') * mult;
+ NEXT;
+ }
+ }
+ if ((CUR == 'e') || (CUR == 'E')) {
+ NEXT;
+ if (CUR == '-') {
+ is_exponent_negative = 1;
+ NEXT;
+ }
+ while ((CUR >= '0') && (CUR <= '9')) {
+ exponent = exponent * 10 + (CUR - '0');
+ NEXT;
+ }
+ if (is_exponent_negative)
+ exponent = -exponent;
+ ret *= pow(10.0, (double) exponent);
+ }
+ PUSH_LONG_EXPR(XPATH_OP_VALUE, XPATH_NUMBER, 0, 0,
+ xmlXPathNewFloat(ret), NULL);
+}
+
+/**
+ * xmlXPathParseLiteral:
+ * @ctxt: the XPath Parser context
+ *
+ * Parse a Literal
+ *
+ * [29] Literal ::= '"' [^"]* '"'
+ * | "'" [^']* "'"
+ *
+ * Returns the value found or NULL in case of error
+ */
+static xmlChar *
+xmlXPathParseLiteral(xmlXPathParserContextPtr ctxt) {
+ const xmlChar *q;
+ xmlChar *ret = NULL;
+
+ if (CUR == '"') {
+ NEXT;
+ q = CUR_PTR;
+ while ((IS_CHAR_CH(CUR)) && (CUR != '"'))
+ NEXT;
+ if (!IS_CHAR_CH(CUR)) {
+ XP_ERROR0(XPATH_UNFINISHED_LITERAL_ERROR);
+ } else {
+ ret = xmlStrndup(q, CUR_PTR - q);
+ NEXT;
+ }
+ } else if (CUR == '\'') {
+ NEXT;
+ q = CUR_PTR;
+ while ((IS_CHAR_CH(CUR)) && (CUR != '\''))
+ NEXT;
+ if (!IS_CHAR_CH(CUR)) {
+ XP_ERROR0(XPATH_UNFINISHED_LITERAL_ERROR);
+ } else {
+ ret = xmlStrndup(q, CUR_PTR - q);
+ NEXT;
+ }
+ } else {
+ XP_ERROR0(XPATH_START_LITERAL_ERROR);
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathCompLiteral:
+ * @ctxt: the XPath Parser context
+ *
+ * Parse a Literal and push it on the stack.
+ *
+ * [29] Literal ::= '"' [^"]* '"'
+ * | "'" [^']* "'"
+ *
+ * TODO: xmlXPathCompLiteral memory allocation could be improved.
+ */
+static void
+xmlXPathCompLiteral(xmlXPathParserContextPtr ctxt) {
+ const xmlChar *q;
+ xmlChar *ret = NULL;
+
+ if (CUR == '"') {
+ NEXT;
+ q = CUR_PTR;
+ while ((IS_CHAR_CH(CUR)) && (CUR != '"'))
+ NEXT;
+ if (!IS_CHAR_CH(CUR)) {
+ XP_ERROR(XPATH_UNFINISHED_LITERAL_ERROR);
+ } else {
+ ret = xmlStrndup(q, CUR_PTR - q);
+ NEXT;
+ }
+ } else if (CUR == '\'') {
+ NEXT;
+ q = CUR_PTR;
+ while ((IS_CHAR_CH(CUR)) && (CUR != '\''))
+ NEXT;
+ if (!IS_CHAR_CH(CUR)) {
+ XP_ERROR(XPATH_UNFINISHED_LITERAL_ERROR);
+ } else {
+ ret = xmlStrndup(q, CUR_PTR - q);
+ NEXT;
+ }
+ } else {
+ XP_ERROR(XPATH_START_LITERAL_ERROR);
+ }
+ if (ret == NULL) return;
+ PUSH_LONG_EXPR(XPATH_OP_VALUE, XPATH_STRING, 0, 0,
+ xmlXPathNewString(ret), NULL);
+ xmlFree(ret);
+}
+
+/**
+ * xmlXPathCompVariableReference:
+ * @ctxt: the XPath Parser context
+ *
+ * Parse a VariableReference, evaluate it and push it on the stack.
+ *
+ * The variable bindings consist of a mapping from variable names
+ * to variable values. The value of a variable is an object, which can be
+ * of any of the types that are possible for the value of an expression,
+ * and may also be of additional types not specified here.
+ *
+ * Early evaluation is possible since:
+ * The variable bindings [...] used to evaluate a subexpression are
+ * always the same as those used to evaluate the containing expression.
+ *
+ * [36] VariableReference ::= '$' QName
+ */
+static void
+xmlXPathCompVariableReference(xmlXPathParserContextPtr ctxt) {
+ xmlChar *name;
+ xmlChar *prefix;
+
+ SKIP_BLANKS;
+ if (CUR != '$') {
+ XP_ERROR(XPATH_VARIABLE_REF_ERROR);
+ }
+ NEXT;
+ name = xmlXPathParseQName(ctxt, &prefix);
+ if (name == NULL) {
+ XP_ERROR(XPATH_VARIABLE_REF_ERROR);
+ }
+ ctxt->comp->last = -1;
+ PUSH_LONG_EXPR(XPATH_OP_VARIABLE, 0, 0, 0,
+ name, prefix);
+ SKIP_BLANKS;
+}
+
+/**
+ * xmlXPathIsNodeType:
+ * @name: a name string
+ *
+ * Is the name given a NodeType one.
+ *
+ * [38] NodeType ::= 'comment'
+ * | 'text'
+ * | 'processing-instruction'
+ * | 'node'
+ *
+ * Returns 1 if true 0 otherwise
+ */
+int
+xmlXPathIsNodeType(const xmlChar *name) {
+ if (name == NULL)
+ return(0);
+
+ if (xmlStrEqual(name, BAD_CAST "node"))
+ return(1);
+ if (xmlStrEqual(name, BAD_CAST "text"))
+ return(1);
+ if (xmlStrEqual(name, BAD_CAST "comment"))
+ return(1);
+ if (xmlStrEqual(name, BAD_CAST "processing-instruction"))
+ return(1);
+ return(0);
+}
+
+/**
+ * xmlXPathCompFunctionCall:
+ * @ctxt: the XPath Parser context
+ *
+ * [16] FunctionCall ::= FunctionName '(' ( Argument ( ',' Argument)*)? ')'
+ * [17] Argument ::= Expr
+ *
+ * Compile a function call, the evaluation of all arguments are
+ * pushed on the stack
+ */
+static void
+xmlXPathCompFunctionCall(xmlXPathParserContextPtr ctxt) {
+ xmlChar *name;
+ xmlChar *prefix;
+ int nbargs = 0;
+
+ name = xmlXPathParseQName(ctxt, &prefix);
+ if (name == NULL) {
+ XP_ERROR(XPATH_EXPR_ERROR);
+ }
+ SKIP_BLANKS;
+#ifdef DEBUG_EXPR
+ if (prefix == NULL)
+ xmlGenericError(xmlGenericErrorContext, "Calling function %s\n",
+ name);
+ else
+ xmlGenericError(xmlGenericErrorContext, "Calling function %s:%s\n",
+ prefix, name);
+#endif
+
+ if (CUR != '(') {
+ XP_ERROR(XPATH_EXPR_ERROR);
+ }
+ NEXT;
+ SKIP_BLANKS;
+
+ ctxt->comp->last = -1;
+ if (CUR != ')') {
+ while (CUR != 0) {
+ int op1 = ctxt->comp->last;
+ ctxt->comp->last = -1;
+ xmlXPathCompileExpr(ctxt);
+ CHECK_ERROR;
+ PUSH_BINARY_EXPR(XPATH_OP_ARG, op1, ctxt->comp->last, 0, 0);
+ nbargs++;
+ if (CUR == ')') break;
+ if (CUR != ',') {
+ XP_ERROR(XPATH_EXPR_ERROR);
+ }
+ NEXT;
+ SKIP_BLANKS;
+ }
+ }
+ PUSH_LONG_EXPR(XPATH_OP_FUNCTION, nbargs, 0, 0,
+ name, prefix);
+ NEXT;
+ SKIP_BLANKS;
+}
+
+/**
+ * xmlXPathCompPrimaryExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [15] PrimaryExpr ::= VariableReference
+ * | '(' Expr ')'
+ * | Literal
+ * | Number
+ * | FunctionCall
+ *
+ * Compile a primary expression.
+ */
+static void
+xmlXPathCompPrimaryExpr(xmlXPathParserContextPtr ctxt) {
+ SKIP_BLANKS;
+ if (CUR == '$') xmlXPathCompVariableReference(ctxt);
+ else if (CUR == '(') {
+ NEXT;
+ SKIP_BLANKS;
+ xmlXPathCompileExpr(ctxt);
+ CHECK_ERROR;
+ if (CUR != ')') {
+ XP_ERROR(XPATH_EXPR_ERROR);
+ }
+ NEXT;
+ SKIP_BLANKS;
+ } else if (IS_DIGIT_CH(CUR) || (CUR == '.' && IS_DIGIT_CH(NXT(1)))) {
+ xmlXPathCompNumber(ctxt);
+ } else if ((CUR == '\'') || (CUR == '"')) {
+ xmlXPathCompLiteral(ctxt);
+ } else {
+ xmlXPathCompFunctionCall(ctxt);
+ }
+ SKIP_BLANKS;
+}
+
+/**
+ * xmlXPathCompFilterExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [20] FilterExpr ::= PrimaryExpr
+ * | FilterExpr Predicate
+ *
+ * Compile a filter expression.
+ * Square brackets are used to filter expressions in the same way that
+ * they are used in location paths. It is an error if the expression to
+ * be filtered does not evaluate to a node-set. The context node list
+ * used for evaluating the expression in square brackets is the node-set
+ * to be filtered listed in document order.
+ */
+
+static void
+xmlXPathCompFilterExpr(xmlXPathParserContextPtr ctxt) {
+ xmlXPathCompPrimaryExpr(ctxt);
+ CHECK_ERROR;
+ SKIP_BLANKS;
+
+ while (CUR == '[') {
+ xmlXPathCompPredicate(ctxt, 1);
+ SKIP_BLANKS;
+ }
+
+
+}
+
+/**
+ * xmlXPathScanName:
+ * @ctxt: the XPath Parser context
+ *
+ * Trickery: parse an XML name but without consuming the input flow
+ * Needed to avoid insanity in the parser state.
+ *
+ * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
+ * CombiningChar | Extender
+ *
+ * [5] Name ::= (Letter | '_' | ':') (NameChar)*
+ *
+ * [6] Names ::= Name (S Name)*
+ *
+ * Returns the Name parsed or NULL
+ */
+
+static xmlChar *
+xmlXPathScanName(xmlXPathParserContextPtr ctxt) {
+ xmlChar buf[XML_MAX_NAMELEN];
+ int len = 0;
+
+ SKIP_BLANKS;
+ if (!IS_LETTER_CH(CUR) && (CUR != '_') &&
+ (CUR != ':')) {
+ return(NULL);
+ }
+
+ while ((IS_LETTER_CH(NXT(len))) || (IS_DIGIT_CH(NXT(len))) ||
+ (NXT(len) == '.') || (NXT(len) == '-') ||
+ (NXT(len) == '_') || (NXT(len) == ':') ||
+ (IS_COMBINING_CH(NXT(len))) ||
+ (IS_EXTENDER_CH(NXT(len)))) {
+ buf[len] = NXT(len);
+ len++;
+ if (len >= XML_MAX_NAMELEN) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlScanName: reached XML_MAX_NAMELEN limit\n");
+ while ((IS_LETTER_CH(NXT(len))) || (IS_DIGIT_CH(NXT(len))) ||
+ (NXT(len) == '.') || (NXT(len) == '-') ||
+ (NXT(len) == '_') || (NXT(len) == ':') ||
+ (IS_COMBINING_CH(NXT(len))) ||
+ (IS_EXTENDER_CH(NXT(len))))
+ len++;
+ break;
+ }
+ }
+ return(xmlStrndup(buf, len));
+}
+
+/**
+ * xmlXPathCompPathExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [19] PathExpr ::= LocationPath
+ * | FilterExpr
+ * | FilterExpr '/' RelativeLocationPath
+ * | FilterExpr '//' RelativeLocationPath
+ *
+ * Compile a path expression.
+ * The / operator and // operators combine an arbitrary expression
+ * and a relative location path. It is an error if the expression
+ * does not evaluate to a node-set.
+ * The / operator does composition in the same way as when / is
+ * used in a location path. As in location paths, // is short for
+ * /descendant-or-self::node()/.
+ */
+
+static void
+xmlXPathCompPathExpr(xmlXPathParserContextPtr ctxt) {
+ int lc = 1; /* Should we branch to LocationPath ? */
+ xmlChar *name = NULL; /* we may have to preparse a name to find out */
+
+ SKIP_BLANKS;
+ if ((CUR == '$') || (CUR == '(') || (IS_DIGIT_CH(CUR)) ||
+ (CUR == '\'') || (CUR == '"') || (CUR == '.' && IS_DIGIT_CH(NXT(1)))) {
+ lc = 0;
+ } else if (CUR == '*') {
+ /* relative or absolute location path */
+ lc = 1;
+ } else if (CUR == '/') {
+ /* relative or absolute location path */
+ lc = 1;
+ } else if (CUR == '@') {
+ /* relative abbreviated attribute location path */
+ lc = 1;
+ } else if (CUR == '.') {
+ /* relative abbreviated attribute location path */
+ lc = 1;
+ } else {
+ /*
+ * Problem is finding if we have a name here whether it's:
+ * - a nodetype
+ * - a function call in which case it's followed by '('
+ * - an axis in which case it's followed by ':'
+ * - a element name
+ * We do an a priori analysis here rather than having to
+ * maintain parsed token content through the recursive function
+ * calls. This looks uglier but makes the code easier to
+ * read/write/debug.
+ */
+ SKIP_BLANKS;
+ name = xmlXPathScanName(ctxt);
+ if ((name != NULL) && (xmlStrstr(name, (xmlChar *) "::") != NULL)) {
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "PathExpr: Axis\n");
+#endif
+ lc = 1;
+ xmlFree(name);
+ } else if (name != NULL) {
+ int len =xmlStrlen(name);
+
+
+ while (NXT(len) != 0) {
+ if (NXT(len) == '/') {
+ /* element name */
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "PathExpr: AbbrRelLocation\n");
+#endif
+ lc = 1;
+ break;
+ } else if (IS_BLANK_CH(NXT(len))) {
+ /* ignore blanks */
+ ;
+ } else if (NXT(len) == ':') {
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "PathExpr: AbbrRelLocation\n");
+#endif
+ lc = 1;
+ break;
+ } else if ((NXT(len) == '(')) {
+ /* Note Type or Function */
+ if (xmlXPathIsNodeType(name)) {
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "PathExpr: Type search\n");
+#endif
+ lc = 1;
+ } else {
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "PathExpr: function call\n");
+#endif
+ lc = 0;
+ }
+ break;
+ } else if ((NXT(len) == '[')) {
+ /* element name */
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "PathExpr: AbbrRelLocation\n");
+#endif
+ lc = 1;
+ break;
+ } else if ((NXT(len) == '<') || (NXT(len) == '>') ||
+ (NXT(len) == '=')) {
+ lc = 1;
+ break;
+ } else {
+ lc = 1;
+ break;
+ }
+ len++;
+ }
+ if (NXT(len) == 0) {
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "PathExpr: AbbrRelLocation\n");
+#endif
+ /* element name */
+ lc = 1;
+ }
+ xmlFree(name);
+ } else {
+ /* make sure all cases are covered explicitly */
+ XP_ERROR(XPATH_EXPR_ERROR);
+ }
+ }
+
+ if (lc) {
+ if (CUR == '/') {
+ PUSH_LEAVE_EXPR(XPATH_OP_ROOT, 0, 0);
+ } else {
+ PUSH_LEAVE_EXPR(XPATH_OP_NODE, 0, 0);
+ }
+ xmlXPathCompLocationPath(ctxt);
+ } else {
+ xmlXPathCompFilterExpr(ctxt);
+ CHECK_ERROR;
+ if ((CUR == '/') && (NXT(1) == '/')) {
+ SKIP(2);
+ SKIP_BLANKS;
+
+ PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_DESCENDANT_OR_SELF,
+ NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
+ PUSH_UNARY_EXPR(XPATH_OP_RESET, ctxt->comp->last, 1, 0);
+
+ xmlXPathCompRelativeLocationPath(ctxt);
+ } else if (CUR == '/') {
+ xmlXPathCompRelativeLocationPath(ctxt);
+ }
+ }
+ SKIP_BLANKS;
+}
+
+/**
+ * xmlXPathCompUnionExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [18] UnionExpr ::= PathExpr
+ * | UnionExpr '|' PathExpr
+ *
+ * Compile an union expression.
+ */
+
+static void
+xmlXPathCompUnionExpr(xmlXPathParserContextPtr ctxt) {
+ xmlXPathCompPathExpr(ctxt);
+ CHECK_ERROR;
+ SKIP_BLANKS;
+ while (CUR == '|') {
+ int op1 = ctxt->comp->last;
+ PUSH_LEAVE_EXPR(XPATH_OP_NODE, 0, 0);
+
+ NEXT;
+ SKIP_BLANKS;
+ xmlXPathCompPathExpr(ctxt);
+
+ PUSH_BINARY_EXPR(XPATH_OP_UNION, op1, ctxt->comp->last, 0, 0);
+
+ SKIP_BLANKS;
+ }
+}
+
+/**
+ * xmlXPathCompUnaryExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [27] UnaryExpr ::= UnionExpr
+ * | '-' UnaryExpr
+ *
+ * Compile an unary expression.
+ */
+
+static void
+xmlXPathCompUnaryExpr(xmlXPathParserContextPtr ctxt) {
+ int minus = 0;
+ int found = 0;
+
+ SKIP_BLANKS;
+ while (CUR == '-') {
+ minus = 1 - minus;
+ found = 1;
+ NEXT;
+ SKIP_BLANKS;
+ }
+
+ xmlXPathCompUnionExpr(ctxt);
+ CHECK_ERROR;
+ if (found) {
+ if (minus)
+ PUSH_UNARY_EXPR(XPATH_OP_PLUS, ctxt->comp->last, 2, 0);
+ else
+ PUSH_UNARY_EXPR(XPATH_OP_PLUS, ctxt->comp->last, 3, 0);
+ }
+}
+
+/**
+ * xmlXPathCompMultiplicativeExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [26] MultiplicativeExpr ::= UnaryExpr
+ * | MultiplicativeExpr MultiplyOperator UnaryExpr
+ * | MultiplicativeExpr 'div' UnaryExpr
+ * | MultiplicativeExpr 'mod' UnaryExpr
+ * [34] MultiplyOperator ::= '*'
+ *
+ * Compile an Additive expression.
+ */
+
+static void
+xmlXPathCompMultiplicativeExpr(xmlXPathParserContextPtr ctxt) {
+ xmlXPathCompUnaryExpr(ctxt);
+ CHECK_ERROR;
+ SKIP_BLANKS;
+ while ((CUR == '*') ||
+ ((CUR == 'd') && (NXT(1) == 'i') && (NXT(2) == 'v')) ||
+ ((CUR == 'm') && (NXT(1) == 'o') && (NXT(2) == 'd'))) {
+ int op = -1;
+ int op1 = ctxt->comp->last;
+
+ if (CUR == '*') {
+ op = 0;
+ NEXT;
+ } else if (CUR == 'd') {
+ op = 1;
+ SKIP(3);
+ } else if (CUR == 'm') {
+ op = 2;
+ SKIP(3);
+ }
+ SKIP_BLANKS;
+ xmlXPathCompUnaryExpr(ctxt);
+ CHECK_ERROR;
+ PUSH_BINARY_EXPR(XPATH_OP_MULT, op1, ctxt->comp->last, op, 0);
+ SKIP_BLANKS;
+ }
+}
+
+/**
+ * xmlXPathCompAdditiveExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [25] AdditiveExpr ::= MultiplicativeExpr
+ * | AdditiveExpr '+' MultiplicativeExpr
+ * | AdditiveExpr '-' MultiplicativeExpr
+ *
+ * Compile an Additive expression.
+ */
+
+static void
+xmlXPathCompAdditiveExpr(xmlXPathParserContextPtr ctxt) {
+
+ xmlXPathCompMultiplicativeExpr(ctxt);
+ CHECK_ERROR;
+ SKIP_BLANKS;
+ while ((CUR == '+') || (CUR == '-')) {
+ int plus;
+ int op1 = ctxt->comp->last;
+
+ if (CUR == '+') plus = 1;
+ else plus = 0;
+ NEXT;
+ SKIP_BLANKS;
+ xmlXPathCompMultiplicativeExpr(ctxt);
+ CHECK_ERROR;
+ PUSH_BINARY_EXPR(XPATH_OP_PLUS, op1, ctxt->comp->last, plus, 0);
+ SKIP_BLANKS;
+ }
+}
+
+/**
+ * xmlXPathCompRelationalExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [24] RelationalExpr ::= AdditiveExpr
+ * | RelationalExpr '<' AdditiveExpr
+ * | RelationalExpr '>' AdditiveExpr
+ * | RelationalExpr '<=' AdditiveExpr
+ * | RelationalExpr '>=' AdditiveExpr
+ *
+ * A <= B > C is allowed ? Answer from James, yes with
+ * (AdditiveExpr <= AdditiveExpr) > AdditiveExpr
+ * which is basically what got implemented.
+ *
+ * Compile a Relational expression, then push the result
+ * on the stack
+ */
+
+static void
+xmlXPathCompRelationalExpr(xmlXPathParserContextPtr ctxt) {
+ xmlXPathCompAdditiveExpr(ctxt);
+ CHECK_ERROR;
+ SKIP_BLANKS;
+ while ((CUR == '<') ||
+ (CUR == '>') ||
+ ((CUR == '<') && (NXT(1) == '=')) ||
+ ((CUR == '>') && (NXT(1) == '='))) {
+ int inf, strict;
+ int op1 = ctxt->comp->last;
+
+ if (CUR == '<') inf = 1;
+ else inf = 0;
+ if (NXT(1) == '=') strict = 0;
+ else strict = 1;
+ NEXT;
+ if (!strict) NEXT;
+ SKIP_BLANKS;
+ xmlXPathCompAdditiveExpr(ctxt);
+ CHECK_ERROR;
+ PUSH_BINARY_EXPR(XPATH_OP_CMP, op1, ctxt->comp->last, inf, strict);
+ SKIP_BLANKS;
+ }
+}
+
+/**
+ * xmlXPathCompEqualityExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [23] EqualityExpr ::= RelationalExpr
+ * | EqualityExpr '=' RelationalExpr
+ * | EqualityExpr '!=' RelationalExpr
+ *
+ * A != B != C is allowed ? Answer from James, yes with
+ * (RelationalExpr = RelationalExpr) = RelationalExpr
+ * (RelationalExpr != RelationalExpr) != RelationalExpr
+ * which is basically what got implemented.
+ *
+ * Compile an Equality expression.
+ *
+ */
+static void
+xmlXPathCompEqualityExpr(xmlXPathParserContextPtr ctxt) {
+ xmlXPathCompRelationalExpr(ctxt);
+ CHECK_ERROR;
+ SKIP_BLANKS;
+ while ((CUR == '=') || ((CUR == '!') && (NXT(1) == '='))) {
+ int eq;
+ int op1 = ctxt->comp->last;
+
+ if (CUR == '=') eq = 1;
+ else eq = 0;
+ NEXT;
+ if (!eq) NEXT;
+ SKIP_BLANKS;
+ xmlXPathCompRelationalExpr(ctxt);
+ CHECK_ERROR;
+ PUSH_BINARY_EXPR(XPATH_OP_EQUAL, op1, ctxt->comp->last, eq, 0);
+ SKIP_BLANKS;
+ }
+}
+
+/**
+ * xmlXPathCompAndExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [22] AndExpr ::= EqualityExpr
+ * | AndExpr 'and' EqualityExpr
+ *
+ * Compile an AND expression.
+ *
+ */
+static void
+xmlXPathCompAndExpr(xmlXPathParserContextPtr ctxt) {
+ xmlXPathCompEqualityExpr(ctxt);
+ CHECK_ERROR;
+ SKIP_BLANKS;
+ while ((CUR == 'a') && (NXT(1) == 'n') && (NXT(2) == 'd')) {
+ int op1 = ctxt->comp->last;
+ SKIP(3);
+ SKIP_BLANKS;
+ xmlXPathCompEqualityExpr(ctxt);
+ CHECK_ERROR;
+ PUSH_BINARY_EXPR(XPATH_OP_AND, op1, ctxt->comp->last, 0, 0);
+ SKIP_BLANKS;
+ }
+}
+
+/**
+ * xmlXPathCompileExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * [14] Expr ::= OrExpr
+ * [21] OrExpr ::= AndExpr
+ * | OrExpr 'or' AndExpr
+ *
+ * Parse and compile an expression
+ */
+static void
+xmlXPathCompileExpr(xmlXPathParserContextPtr ctxt) {
+ xmlXPathCompAndExpr(ctxt);
+ CHECK_ERROR;
+ SKIP_BLANKS;
+ while ((CUR == 'o') && (NXT(1) == 'r')) {
+ int op1 = ctxt->comp->last;
+ SKIP(2);
+ SKIP_BLANKS;
+ xmlXPathCompAndExpr(ctxt);
+ CHECK_ERROR;
+ PUSH_BINARY_EXPR(XPATH_OP_OR, op1, ctxt->comp->last, 0, 0);
+ op1 = ctxt->comp->nbStep;
+ SKIP_BLANKS;
+ }
+ if (ctxt->comp->steps[ctxt->comp->last].op != XPATH_OP_VALUE) {
+ /* more ops could be optimized too */
+ PUSH_UNARY_EXPR(XPATH_OP_SORT, ctxt->comp->last , 0, 0);
+ }
+}
+
+/**
+ * xmlXPathCompPredicate:
+ * @ctxt: the XPath Parser context
+ * @filter: act as a filter
+ *
+ * [8] Predicate ::= '[' PredicateExpr ']'
+ * [9] PredicateExpr ::= Expr
+ *
+ * Compile a predicate expression
+ */
+static void
+xmlXPathCompPredicate(xmlXPathParserContextPtr ctxt, int filter) {
+ int op1 = ctxt->comp->last;
+
+ SKIP_BLANKS;
+ if (CUR != '[') {
+ XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
+ }
+ NEXT;
+ SKIP_BLANKS;
+
+ ctxt->comp->last = -1;
+ xmlXPathCompileExpr(ctxt);
+ CHECK_ERROR;
+
+ if (CUR != ']') {
+ XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
+ }
+
+ if (filter)
+ PUSH_BINARY_EXPR(XPATH_OP_FILTER, op1, ctxt->comp->last, 0, 0);
+ else
+ PUSH_BINARY_EXPR(XPATH_OP_PREDICATE, op1, ctxt->comp->last, 0, 0);
+
+ NEXT;
+ SKIP_BLANKS;
+}
+
+/**
+ * xmlXPathCompNodeTest:
+ * @ctxt: the XPath Parser context
+ * @test: pointer to a xmlXPathTestVal
+ * @type: pointer to a xmlXPathTypeVal
+ * @prefix: placeholder for a possible name prefix
+ *
+ * [7] NodeTest ::= NameTest
+ * | NodeType '(' ')'
+ * | 'processing-instruction' '(' Literal ')'
+ *
+ * [37] NameTest ::= '*'
+ * | NCName ':' '*'
+ * | QName
+ * [38] NodeType ::= 'comment'
+ * | 'text'
+ * | 'processing-instruction'
+ * | 'node'
+ *
+ * Returns the name found and updates @test, @type and @prefix appropriately
+ */
+static xmlChar *
+xmlXPathCompNodeTest(xmlXPathParserContextPtr ctxt, xmlXPathTestVal *test,
+ xmlXPathTypeVal *type, const xmlChar **prefix,
+ xmlChar *name) {
+ int blanks;
+
+ if ((test == NULL) || (type == NULL) || (prefix == NULL)) {
+ STRANGE;
+ return(NULL);
+ }
+ *type = (xmlXPathTypeVal) 0;
+ *test = (xmlXPathTestVal) 0;
+ *prefix = NULL;
+ SKIP_BLANKS;
+
+ if ((name == NULL) && (CUR == '*')) {
+ /*
+ * All elements
+ */
+ NEXT;
+ *test = NODE_TEST_ALL;
+ return(NULL);
+ }
+
+ if (name == NULL)
+ name = xmlXPathParseNCName(ctxt);
+ if (name == NULL) {
+ XP_ERROR0(XPATH_EXPR_ERROR);
+ }
+
+ blanks = IS_BLANK_CH(CUR);
+ SKIP_BLANKS;
+ if (CUR == '(') {
+ NEXT;
+ /*
+ * NodeType or PI search
+ */
+ if (xmlStrEqual(name, BAD_CAST "comment"))
+ *type = NODE_TYPE_COMMENT;
+ else if (xmlStrEqual(name, BAD_CAST "node"))
+ *type = NODE_TYPE_NODE;
+ else if (xmlStrEqual(name, BAD_CAST "processing-instruction"))
+ *type = NODE_TYPE_PI;
+ else if (xmlStrEqual(name, BAD_CAST "text"))
+ *type = NODE_TYPE_TEXT;
+ else {
+ if (name != NULL)
+ xmlFree(name);
+ XP_ERROR0(XPATH_EXPR_ERROR);
+ }
+
+ *test = NODE_TEST_TYPE;
+
+ SKIP_BLANKS;
+ if (*type == NODE_TYPE_PI) {
+ /*
+ * Specific case: search a PI by name.
+ */
+ if (name != NULL)
+ xmlFree(name);
+ name = NULL;
+ if (CUR != ')') {
+ name = xmlXPathParseLiteral(ctxt);
+ CHECK_ERROR 0;
+ *test = NODE_TEST_PI;
+ SKIP_BLANKS;
+ }
+ }
+ if (CUR != ')') {
+ if (name != NULL)
+ xmlFree(name);
+ XP_ERROR0(XPATH_UNCLOSED_ERROR);
+ }
+ NEXT;
+ return(name);
+ }
+ *test = NODE_TEST_NAME;
+ if ((!blanks) && (CUR == ':')) {
+ NEXT;
+
+ /*
+ * Since currently the parser context don't have a
+ * namespace list associated:
+ * The namespace name for this prefix can be computed
+ * only at evaluation time. The compilation is done
+ * outside of any context.
+ */
+#if 0
+ *prefix = xmlXPathNsLookup(ctxt->context, name);
+ if (name != NULL)
+ xmlFree(name);
+ if (*prefix == NULL) {
+ XP_ERROR0(XPATH_UNDEF_PREFIX_ERROR);
+ }
+#else
+ *prefix = name;
+#endif
+
+ if (CUR == '*') {
+ /*
+ * All elements
+ */
+ NEXT;
+ *test = NODE_TEST_ALL;
+ return(NULL);
+ }
+
+ name = xmlXPathParseNCName(ctxt);
+ if (name == NULL) {
+ XP_ERROR0(XPATH_EXPR_ERROR);
+ }
+ }
+ return(name);
+}
+
+/**
+ * xmlXPathIsAxisName:
+ * @name: a preparsed name token
+ *
+ * [6] AxisName ::= 'ancestor'
+ * | 'ancestor-or-self'
+ * | 'attribute'
+ * | 'child'
+ * | 'descendant'
+ * | 'descendant-or-self'
+ * | 'following'
+ * | 'following-sibling'
+ * | 'namespace'
+ * | 'parent'
+ * | 'preceding'
+ * | 'preceding-sibling'
+ * | 'self'
+ *
+ * Returns the axis or 0
+ */
+static xmlXPathAxisVal
+xmlXPathIsAxisName(const xmlChar *name) {
+ xmlXPathAxisVal ret = (xmlXPathAxisVal) 0;
+ switch (name[0]) {
+ case 'a':
+ if (xmlStrEqual(name, BAD_CAST "ancestor"))
+ ret = AXIS_ANCESTOR;
+ if (xmlStrEqual(name, BAD_CAST "ancestor-or-self"))
+ ret = AXIS_ANCESTOR_OR_SELF;
+ if (xmlStrEqual(name, BAD_CAST "attribute"))
+ ret = AXIS_ATTRIBUTE;
+ break;
+ case 'c':
+ if (xmlStrEqual(name, BAD_CAST "child"))
+ ret = AXIS_CHILD;
+ break;
+ case 'd':
+ if (xmlStrEqual(name, BAD_CAST "descendant"))
+ ret = AXIS_DESCENDANT;
+ if (xmlStrEqual(name, BAD_CAST "descendant-or-self"))
+ ret = AXIS_DESCENDANT_OR_SELF;
+ break;
+ case 'f':
+ if (xmlStrEqual(name, BAD_CAST "following"))
+ ret = AXIS_FOLLOWING;
+ if (xmlStrEqual(name, BAD_CAST "following-sibling"))
+ ret = AXIS_FOLLOWING_SIBLING;
+ break;
+ case 'n':
+ if (xmlStrEqual(name, BAD_CAST "namespace"))
+ ret = AXIS_NAMESPACE;
+ break;
+ case 'p':
+ if (xmlStrEqual(name, BAD_CAST "parent"))
+ ret = AXIS_PARENT;
+ if (xmlStrEqual(name, BAD_CAST "preceding"))
+ ret = AXIS_PRECEDING;
+ if (xmlStrEqual(name, BAD_CAST "preceding-sibling"))
+ ret = AXIS_PRECEDING_SIBLING;
+ break;
+ case 's':
+ if (xmlStrEqual(name, BAD_CAST "self"))
+ ret = AXIS_SELF;
+ break;
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPathCompStep:
+ * @ctxt: the XPath Parser context
+ *
+ * [4] Step ::= AxisSpecifier NodeTest Predicate*
+ * | AbbreviatedStep
+ *
+ * [12] AbbreviatedStep ::= '.' | '..'
+ *
+ * [5] AxisSpecifier ::= AxisName '::'
+ * | AbbreviatedAxisSpecifier
+ *
+ * [13] AbbreviatedAxisSpecifier ::= '@'?
+ *
+ * Modified for XPtr range support as:
+ *
+ * [4xptr] Step ::= AxisSpecifier NodeTest Predicate*
+ * | AbbreviatedStep
+ * | 'range-to' '(' Expr ')' Predicate*
+ *
+ * Compile one step in a Location Path
+ * A location step of . is short for self::node(). This is
+ * particularly useful in conjunction with //. For example, the
+ * location path .//para is short for
+ * self::node()/descendant-or-self::node()/child::para
+ * and so will select all para descendant elements of the context
+ * node.
+ * Similarly, a location step of .. is short for parent::node().
+ * For example, ../title is short for parent::node()/child::title
+ * and so will select the title children of the parent of the context
+ * node.
+ */
+static void
+xmlXPathCompStep(xmlXPathParserContextPtr ctxt) {
+#ifdef LIBXML_XPTR_ENABLED
+ int rangeto = 0;
+ int op2 = -1;
+#endif
+
+ SKIP_BLANKS;
+ if ((CUR == '.') && (NXT(1) == '.')) {
+ SKIP(2);
+ SKIP_BLANKS;
+ PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_PARENT,
+ NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
+ } else if (CUR == '.') {
+ NEXT;
+ SKIP_BLANKS;
+ } else {
+ xmlChar *name = NULL;
+ const xmlChar *prefix = NULL;
+ xmlXPathTestVal test;
+ xmlXPathAxisVal axis = (xmlXPathAxisVal) 0;
+ xmlXPathTypeVal type;
+ int op1;
+
+ /*
+ * The modification needed for XPointer change to the production
+ */
+#ifdef LIBXML_XPTR_ENABLED
+ if (ctxt->xptr) {
+ name = xmlXPathParseNCName(ctxt);
+ if ((name != NULL) && (xmlStrEqual(name, BAD_CAST "range-to"))) {
+ op2 = ctxt->comp->last;
+ xmlFree(name);
+ SKIP_BLANKS;
+ if (CUR != '(') {
+ XP_ERROR(XPATH_EXPR_ERROR);
+ }
+ NEXT;
+ SKIP_BLANKS;
+
+ xmlXPathCompileExpr(ctxt);
+ /* PUSH_BINARY_EXPR(XPATH_OP_RANGETO, op2, ctxt->comp->last, 0, 0); */
+ CHECK_ERROR;
+
+ SKIP_BLANKS;
+ if (CUR != ')') {
+ XP_ERROR(XPATH_EXPR_ERROR);
+ }
+ NEXT;
+ rangeto = 1;
+ goto eval_predicates;
+ }
+ }
+#endif
+ if (CUR == '*') {
+ axis = AXIS_CHILD;
+ } else {
+ if (name == NULL)
+ name = xmlXPathParseNCName(ctxt);
+ if (name != NULL) {
+ axis = xmlXPathIsAxisName(name);
+ if (axis != 0) {
+ SKIP_BLANKS;
+ if ((CUR == ':') && (NXT(1) == ':')) {
+ SKIP(2);
+ xmlFree(name);
+ name = NULL;
+ } else {
+ /* an element name can conflict with an axis one :-\ */
+ axis = AXIS_CHILD;
+ }
+ } else {
+ axis = AXIS_CHILD;
+ }
+ } else if (CUR == '@') {
+ NEXT;
+ axis = AXIS_ATTRIBUTE;
+ } else {
+ axis = AXIS_CHILD;
+ }
+ }
+
+ CHECK_ERROR;
+
+ name = xmlXPathCompNodeTest(ctxt, &test, &type, &prefix, name);
+ if (test == 0)
+ return;
+
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "Basis : computing new set\n");
+#endif
+
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "Basis : ");
+ if (ctxt->value == NULL)
+ xmlGenericError(xmlGenericErrorContext, "no value\n");
+ else if (ctxt->value->nodesetval == NULL)
+ xmlGenericError(xmlGenericErrorContext, "Empty\n");
+ else
+ xmlGenericErrorContextNodeSet(stdout, ctxt->value->nodesetval);
+#endif
+
+#ifdef LIBXML_XPTR_ENABLED
+eval_predicates:
+#endif
+ op1 = ctxt->comp->last;
+ ctxt->comp->last = -1;
+
+ SKIP_BLANKS;
+ while (CUR == '[') {
+ xmlXPathCompPredicate(ctxt, 0);
+ }
+
+#ifdef LIBXML_XPTR_ENABLED
+ if (rangeto) {
+ PUSH_BINARY_EXPR(XPATH_OP_RANGETO, op2, op1, 0, 0);
+ } else
+#endif
+ PUSH_FULL_EXPR(XPATH_OP_COLLECT, op1, ctxt->comp->last, axis,
+ test, type, (void *)prefix, (void *)name);
+
+ }
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "Step : ");
+ if (ctxt->value == NULL)
+ xmlGenericError(xmlGenericErrorContext, "no value\n");
+ else if (ctxt->value->nodesetval == NULL)
+ xmlGenericError(xmlGenericErrorContext, "Empty\n");
+ else
+ xmlGenericErrorContextNodeSet(xmlGenericErrorContext,
+ ctxt->value->nodesetval);
+#endif
+}
+
+/**
+ * xmlXPathCompRelativeLocationPath:
+ * @ctxt: the XPath Parser context
+ *
+ * [3] RelativeLocationPath ::= Step
+ * | RelativeLocationPath '/' Step
+ * | AbbreviatedRelativeLocationPath
+ * [11] AbbreviatedRelativeLocationPath ::= RelativeLocationPath '//' Step
+ *
+ * Compile a relative location path.
+ */
+static void
+xmlXPathCompRelativeLocationPath
+(xmlXPathParserContextPtr ctxt) {
+ SKIP_BLANKS;
+ if ((CUR == '/') && (NXT(1) == '/')) {
+ SKIP(2);
+ SKIP_BLANKS;
+ PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_DESCENDANT_OR_SELF,
+ NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
+ } else if (CUR == '/') {
+ NEXT;
+ SKIP_BLANKS;
+ }
+ xmlXPathCompStep(ctxt);
+ SKIP_BLANKS;
+ while (CUR == '/') {
+ if ((CUR == '/') && (NXT(1) == '/')) {
+ SKIP(2);
+ SKIP_BLANKS;
+ PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_DESCENDANT_OR_SELF,
+ NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
+ xmlXPathCompStep(ctxt);
+ } else if (CUR == '/') {
+ NEXT;
+ SKIP_BLANKS;
+ xmlXPathCompStep(ctxt);
+ }
+ SKIP_BLANKS;
+ }
+}
+
+/**
+ * xmlXPathCompLocationPath:
+ * @ctxt: the XPath Parser context
+ *
+ * [1] LocationPath ::= RelativeLocationPath
+ * | AbsoluteLocationPath
+ * [2] AbsoluteLocationPath ::= '/' RelativeLocationPath?
+ * | AbbreviatedAbsoluteLocationPath
+ * [10] AbbreviatedAbsoluteLocationPath ::=
+ * '//' RelativeLocationPath
+ *
+ * Compile a location path
+ *
+ * // is short for /descendant-or-self::node()/. For example,
+ * //para is short for /descendant-or-self::node()/child::para and
+ * so will select any para element in the document (even a para element
+ * that is a document element will be selected by //para since the
+ * document element node is a child of the root node); div//para is
+ * short for div/descendant-or-self::node()/child::para and so will
+ * select all para descendants of div children.
+ */
+static void
+xmlXPathCompLocationPath(xmlXPathParserContextPtr ctxt) {
+ SKIP_BLANKS;
+ if (CUR != '/') {
+ xmlXPathCompRelativeLocationPath(ctxt);
+ } else {
+ while (CUR == '/') {
+ if ((CUR == '/') && (NXT(1) == '/')) {
+ SKIP(2);
+ SKIP_BLANKS;
+ PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_DESCENDANT_OR_SELF,
+ NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
+ xmlXPathCompRelativeLocationPath(ctxt);
+ } else if (CUR == '/') {
+ NEXT;
+ SKIP_BLANKS;
+ if ((CUR != 0 ) &&
+ ((IS_LETTER_CH(CUR)) || (CUR == '_') || (CUR == '.') ||
+ (CUR == '@') || (CUR == '*')))
+ xmlXPathCompRelativeLocationPath(ctxt);
+ }
+ }
+ }
+}
+
+/************************************************************************
+ * *
+ * XPath precompiled expression evaluation *
+ * *
+ ************************************************************************/
+
+static int
+xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op);
+
+/**
+ * xmlXPathNodeCollectAndTest:
+ * @ctxt: the XPath Parser context
+ * @op: the XPath precompiled step operation
+ * @first: pointer to the first element in document order
+ * @last: pointer to the last element in document order
+ *
+ * This is the function implementing a step: based on the current list
+ * of nodes, it builds up a new list, looking at all nodes under that
+ * axis and selecting them. It also does the predicate filtering
+ *
+ * Pushes the new NodeSet resulting from the search.
+ *
+ * Returns the number of nodes traversed
+ */
+static int
+xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
+ xmlXPathStepOpPtr op,
+ xmlNodePtr * first, xmlNodePtr * last)
+{
+ xmlXPathAxisVal axis = (xmlXPathAxisVal) op->value;
+ xmlXPathTestVal test = (xmlXPathTestVal) op->value2;
+ xmlXPathTypeVal type = (xmlXPathTypeVal) op->value3;
+ const xmlChar *prefix = op->value4;
+ const xmlChar *name = op->value5;
+ const xmlChar *URI = NULL;
+
+#ifdef DEBUG_STEP
+ int n = 0;
+#endif
+ int i, t = 0;
+ xmlNodeSetPtr ret, list;
+ xmlXPathTraversalFunction next = NULL;
+ void (*addNode) (xmlNodeSetPtr, xmlNodePtr);
+ xmlNodeSetPtr (*mergeNodeSet) (xmlNodeSetPtr, xmlNodeSetPtr);
+ xmlNodePtr cur = NULL;
+ xmlXPathObjectPtr obj;
+ xmlNodeSetPtr nodelist;
+ xmlNodePtr tmp;
+
+ CHECK_TYPE0(XPATH_NODESET);
+ obj = valuePop(ctxt);
+ addNode = xmlXPathNodeSetAdd;
+ mergeNodeSet = xmlXPathNodeSetMerge;
+ if (prefix != NULL) {
+ URI = xmlXPathNsLookup(ctxt->context, prefix);
+ if (URI == NULL)
+ XP_ERROR0(XPATH_UNDEF_PREFIX_ERROR);
+ }
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "new step : ");
+#endif
+ switch (axis) {
+ case AXIS_ANCESTOR:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "axis 'ancestors' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextAncestor;
+ break;
+ case AXIS_ANCESTOR_OR_SELF:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "axis 'ancestors-or-self' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextAncestorOrSelf;
+ break;
+ case AXIS_ATTRIBUTE:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "axis 'attributes' ");
+#endif
+ first = NULL;
+ last = NULL;
+ next = xmlXPathNextAttribute;
+ mergeNodeSet = xmlXPathNodeSetMergeUnique;
+ break;
+ case AXIS_CHILD:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "axis 'child' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextChild;
+ mergeNodeSet = xmlXPathNodeSetMergeUnique;
+ break;
+ case AXIS_DESCENDANT:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "axis 'descendant' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextDescendant;
+ break;
+ case AXIS_DESCENDANT_OR_SELF:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "axis 'descendant-or-self' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextDescendantOrSelf;
+ break;
+ case AXIS_FOLLOWING:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "axis 'following' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextFollowing;
+ break;
+ case AXIS_FOLLOWING_SIBLING:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "axis 'following-siblings' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextFollowingSibling;
+ break;
+ case AXIS_NAMESPACE:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "axis 'namespace' ");
+#endif
+ first = NULL;
+ last = NULL;
+ next = (xmlXPathTraversalFunction) xmlXPathNextNamespace;
+ mergeNodeSet = xmlXPathNodeSetMergeUnique;
+ break;
+ case AXIS_PARENT:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "axis 'parent' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextParent;
+ break;
+ case AXIS_PRECEDING:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "axis 'preceding' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextPrecedingInternal;
+ break;
+ case AXIS_PRECEDING_SIBLING:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "axis 'preceding-sibling' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextPrecedingSibling;
+ break;
+ case AXIS_SELF:
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, "axis 'self' ");
+#endif
+ first = NULL;
+ last = NULL;
+ next = xmlXPathNextSelf;
+ mergeNodeSet = xmlXPathNodeSetMergeUnique;
+ break;
+ }
+ if (next == NULL)
+ return(0);
+
+ nodelist = obj->nodesetval;
+ if (nodelist == NULL) {
+ xmlXPathFreeObject(obj);
+ valuePush(ctxt, xmlXPathWrapNodeSet(NULL));
+ return(0);
+ }
+ addNode = xmlXPathNodeSetAddUnique;
+ ret = NULL;
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ " context contains %d nodes\n", nodelist->nodeNr);
+ switch (test) {
+ case NODE_TEST_NONE:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for none !!!\n");
+ break;
+ case NODE_TEST_TYPE:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for type %d\n", type);
+ break;
+ case NODE_TEST_PI:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for PI !!!\n");
+ break;
+ case NODE_TEST_ALL:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for *\n");
+ break;
+ case NODE_TEST_NS:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for namespace %s\n",
+ prefix);
+ break;
+ case NODE_TEST_NAME:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for name %s\n", name);
+ if (prefix != NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ " with namespace %s\n", prefix);
+ break;
+ }
+ xmlGenericError(xmlGenericErrorContext, "Testing : ");
+#endif
+ /*
+ * 2.3 Node Tests
+ * - For the attribute axis, the principal node type is attribute.
+ * - For the namespace axis, the principal node type is namespace.
+ * - For other axes, the principal node type is element.
+ *
+ * A node test * is true for any node of the
+ * principal node type. For example, child::* will
+ * select all element children of the context node
+ */
+ tmp = ctxt->context->node;
+ for (i = 0; i < nodelist->nodeNr; i++) {
+ ctxt->context->node = nodelist->nodeTab[i];
+
+ cur = NULL;
+ list = xmlXPathNodeSetCreate(NULL);
+ do {
+ cur = next(ctxt, cur);
+ if (cur == NULL)
+ break;
+ if ((first != NULL) && (*first == cur))
+ break;
+ if (((t % 256) == 0) &&
+ (first != NULL) && (*first != NULL) &&
+ (xmlXPathCmpNodes(*first, cur) >= 0))
+ break;
+ if ((last != NULL) && (*last == cur))
+ break;
+ if (((t % 256) == 0) &&
+ (last != NULL) && (*last != NULL) &&
+ (xmlXPathCmpNodes(cur, *last) >= 0))
+ break;
+ t++;
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext, " %s", cur->name);
+#endif
+ switch (test) {
+ case NODE_TEST_NONE:
+ ctxt->context->node = tmp;
+ STRANGE return(t);
+ case NODE_TEST_TYPE:
+ if ((cur->type == type) ||
+ ((type == NODE_TYPE_NODE) &&
+ ((cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE) ||
+ (cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_NAMESPACE_DECL) ||
+ (cur->type == XML_ATTRIBUTE_NODE) ||
+ (cur->type == XML_PI_NODE) ||
+ (cur->type == XML_COMMENT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE) ||
+ (cur->type == XML_TEXT_NODE))) ||
+ ((type == NODE_TYPE_TEXT) &&
+ (cur->type == XML_CDATA_SECTION_NODE))) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ addNode(list, cur);
+ }
+ break;
+ case NODE_TEST_PI:
+ if (cur->type == XML_PI_NODE) {
+ if ((name != NULL) &&
+ (!xmlStrEqual(name, cur->name)))
+ break;
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ addNode(list, cur);
+ }
+ break;
+ case NODE_TEST_ALL:
+ if (axis == AXIS_ATTRIBUTE) {
+ if (cur->type == XML_ATTRIBUTE_NODE) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ addNode(list, cur);
+ }
+ } else if (axis == AXIS_NAMESPACE) {
+ if (cur->type == XML_NAMESPACE_DECL) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ xmlXPathNodeSetAddNs(list, ctxt->context->node,
+ (xmlNsPtr) cur);
+ }
+ } else {
+ if (cur->type == XML_ELEMENT_NODE) {
+ if (prefix == NULL) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ addNode(list, cur);
+ } else if ((cur->ns != NULL) &&
+ (xmlStrEqual(URI, cur->ns->href))) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ addNode(list, cur);
+ }
+ }
+ }
+ break;
+ case NODE_TEST_NS:{
+ TODO;
+ break;
+ }
+ case NODE_TEST_NAME:
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ if (xmlStrEqual(name, cur->name)) {
+ if (prefix == NULL) {
+ if (cur->ns == NULL) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ addNode(list, cur);
+ }
+ } else {
+ if ((cur->ns != NULL) &&
+ (xmlStrEqual(URI,
+ cur->ns->href))) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ addNode(list, cur);
+ }
+ }
+ }
+ break;
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ if (xmlStrEqual(name, attr->name)) {
+ if (prefix == NULL) {
+ if ((attr->ns == NULL) ||
+ (attr->ns->prefix == NULL)) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ addNode(list,
+ (xmlNodePtr) attr);
+ }
+ } else {
+ if ((attr->ns != NULL) &&
+ (xmlStrEqual(URI,
+ attr->ns->
+ href))) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ addNode(list,
+ (xmlNodePtr) attr);
+ }
+ }
+ }
+ break;
+ }
+ case XML_NAMESPACE_DECL:
+ if (cur->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) cur;
+
+ if ((ns->prefix != NULL) && (name != NULL)
+ && (xmlStrEqual(ns->prefix, name))) {
+#ifdef DEBUG_STEP
+ n++;
+#endif
+ xmlXPathNodeSetAddNs(list,
+ ctxt->context->node, (xmlNsPtr) cur);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ break;
+ }
+ } while (cur != NULL);
+
+ /*
+ * If there is some predicate filtering do it now
+ */
+ if ((op->ch2 != -1) && (list != NULL) && (list->nodeNr > 0)) {
+ xmlXPathObjectPtr obj2;
+
+ valuePush(ctxt, xmlXPathWrapNodeSet(list));
+ xmlXPathCompOpEval(ctxt, &ctxt->comp->steps[op->ch2]);
+ CHECK_TYPE0(XPATH_NODESET);
+ obj2 = valuePop(ctxt);
+ list = obj2->nodesetval;
+ obj2->nodesetval = NULL;
+ xmlXPathFreeObject(obj2);
+ }
+ if (ret == NULL) {
+ ret = list;
+ } else {
+ ret = mergeNodeSet(ret, list);
+ xmlXPathFreeNodeSet(list);
+ }
+ }
+ ctxt->context->node = tmp;
+#ifdef DEBUG_STEP
+ xmlGenericError(xmlGenericErrorContext,
+ "\nExamined %d nodes, found %d nodes at that step\n",
+ t, n);
+#endif
+ valuePush(ctxt, xmlXPathWrapNodeSet(ret));
+ if ((obj->boolval) && (obj->user != NULL)) {
+ ctxt->value->boolval = 1;
+ ctxt->value->user = obj->user;
+ obj->user = NULL;
+ obj->boolval = 0;
+ }
+ xmlXPathFreeObject(obj);
+ return(t);
+}
+
+/**
+ * xmlXPathNodeCollectAndTestNth:
+ * @ctxt: the XPath Parser context
+ * @op: the XPath precompiled step operation
+ * @indx: the index to collect
+ * @first: pointer to the first element in document order
+ * @last: pointer to the last element in document order
+ *
+ * This is the function implementing a step: based on the current list
+ * of nodes, it builds up a new list, looking at all nodes under that
+ * axis and selecting them. It also does the predicate filtering
+ *
+ * Pushes the new NodeSet resulting from the search.
+ * Returns the number of node traversed
+ */
+static int
+xmlXPathNodeCollectAndTestNth(xmlXPathParserContextPtr ctxt,
+ xmlXPathStepOpPtr op, int indx,
+ xmlNodePtr * first, xmlNodePtr * last)
+{
+ xmlXPathAxisVal axis = (xmlXPathAxisVal) op->value;
+ xmlXPathTestVal test = (xmlXPathTestVal) op->value2;
+ xmlXPathTypeVal type = (xmlXPathTypeVal) op->value3;
+ const xmlChar *prefix = op->value4;
+ const xmlChar *name = op->value5;
+ const xmlChar *URI = NULL;
+ int n = 0, t = 0;
+
+ int i;
+ xmlNodeSetPtr list;
+ xmlXPathTraversalFunction next = NULL;
+ void (*addNode) (xmlNodeSetPtr, xmlNodePtr);
+ xmlNodePtr cur = NULL;
+ xmlXPathObjectPtr obj;
+ xmlNodeSetPtr nodelist;
+ xmlNodePtr tmp;
+
+ CHECK_TYPE0(XPATH_NODESET);
+ obj = valuePop(ctxt);
+ addNode = xmlXPathNodeSetAdd;
+ if (prefix != NULL) {
+ URI = xmlXPathNsLookup(ctxt->context, prefix);
+ if (URI == NULL)
+ XP_ERROR0(XPATH_UNDEF_PREFIX_ERROR);
+ }
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "new step : ");
+ if (first != NULL) {
+ if (*first != NULL)
+ xmlGenericError(xmlGenericErrorContext, "first = %s ",
+ (*first)->name);
+ else
+ xmlGenericError(xmlGenericErrorContext, "first = NULL ");
+ }
+ if (last != NULL) {
+ if (*last != NULL)
+ xmlGenericError(xmlGenericErrorContext, "last = %s ",
+ (*last)->name);
+ else
+ xmlGenericError(xmlGenericErrorContext, "last = NULL ");
+ }
+#endif
+ switch (axis) {
+ case AXIS_ANCESTOR:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "axis 'ancestors' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextAncestor;
+ break;
+ case AXIS_ANCESTOR_OR_SELF:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext,
+ "axis 'ancestors-or-self' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextAncestorOrSelf;
+ break;
+ case AXIS_ATTRIBUTE:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "axis 'attributes' ");
+#endif
+ first = NULL;
+ last = NULL;
+ next = xmlXPathNextAttribute;
+ break;
+ case AXIS_CHILD:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "axis 'child' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextChild;
+ break;
+ case AXIS_DESCENDANT:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "axis 'descendant' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextDescendant;
+ break;
+ case AXIS_DESCENDANT_OR_SELF:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext,
+ "axis 'descendant-or-self' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextDescendantOrSelf;
+ break;
+ case AXIS_FOLLOWING:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "axis 'following' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextFollowing;
+ break;
+ case AXIS_FOLLOWING_SIBLING:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext,
+ "axis 'following-siblings' ");
+#endif
+ last = NULL;
+ next = xmlXPathNextFollowingSibling;
+ break;
+ case AXIS_NAMESPACE:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "axis 'namespace' ");
+#endif
+ last = NULL;
+ first = NULL;
+ next = (xmlXPathTraversalFunction) xmlXPathNextNamespace;
+ break;
+ case AXIS_PARENT:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "axis 'parent' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextParent;
+ break;
+ case AXIS_PRECEDING:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "axis 'preceding' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextPrecedingInternal;
+ break;
+ case AXIS_PRECEDING_SIBLING:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext,
+ "axis 'preceding-sibling' ");
+#endif
+ first = NULL;
+ next = xmlXPathNextPrecedingSibling;
+ break;
+ case AXIS_SELF:
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext, "axis 'self' ");
+#endif
+ first = NULL;
+ last = NULL;
+ next = xmlXPathNextSelf;
+ break;
+ }
+ if (next == NULL)
+ return(0);
+
+ nodelist = obj->nodesetval;
+ if (nodelist == NULL) {
+ xmlXPathFreeObject(obj);
+ valuePush(ctxt, xmlXPathWrapNodeSet(NULL));
+ return(0);
+ }
+ addNode = xmlXPathNodeSetAddUnique;
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext,
+ " context contains %d nodes\n", nodelist->nodeNr);
+ switch (test) {
+ case NODE_TEST_NONE:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for none !!!\n");
+ break;
+ case NODE_TEST_TYPE:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for type %d\n", type);
+ break;
+ case NODE_TEST_PI:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for PI !!!\n");
+ break;
+ case NODE_TEST_ALL:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for *\n");
+ break;
+ case NODE_TEST_NS:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for namespace %s\n",
+ prefix);
+ break;
+ case NODE_TEST_NAME:
+ xmlGenericError(xmlGenericErrorContext,
+ " searching for name %s\n", name);
+ if (prefix != NULL)
+ xmlGenericError(xmlGenericErrorContext,
+ " with namespace %s\n", prefix);
+ break;
+ }
+ xmlGenericError(xmlGenericErrorContext, "Testing : ");
+#endif
+ /*
+ * 2.3 Node Tests
+ * - For the attribute axis, the principal node type is attribute.
+ * - For the namespace axis, the principal node type is namespace.
+ * - For other axes, the principal node type is element.
+ *
+ * A node test * is true for any node of the
+ * principal node type. For example, child::* will
+ * select all element children of the context node
+ */
+ tmp = ctxt->context->node;
+ list = xmlXPathNodeSetCreate(NULL);
+ for (i = 0; i < nodelist->nodeNr; i++) {
+ ctxt->context->node = nodelist->nodeTab[i];
+
+ cur = NULL;
+ n = 0;
+ do {
+ cur = next(ctxt, cur);
+ if (cur == NULL)
+ break;
+ if ((first != NULL) && (*first == cur))
+ break;
+ if (((t % 256) == 0) &&
+ (first != NULL) && (*first != NULL) &&
+ (xmlXPathCmpNodes(*first, cur) >= 0))
+ break;
+ if ((last != NULL) && (*last == cur))
+ break;
+ if (((t % 256) == 0) &&
+ (last != NULL) && (*last != NULL) &&
+ (xmlXPathCmpNodes(cur, *last) >= 0))
+ break;
+ t++;
+ switch (test) {
+ case NODE_TEST_NONE:
+ ctxt->context->node = tmp;
+ STRANGE return(0);
+ case NODE_TEST_TYPE:
+ if ((cur->type == type) ||
+ ((type == NODE_TYPE_NODE) &&
+ ((cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE) ||
+ (cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_PI_NODE) ||
+ (cur->type == XML_COMMENT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE) ||
+ (cur->type == XML_TEXT_NODE))) ||
+ ((type == NODE_TYPE_TEXT) &&
+ (cur->type == XML_CDATA_SECTION_NODE))) {
+ n++;
+ if (n == indx)
+ addNode(list, cur);
+ }
+ break;
+ case NODE_TEST_PI:
+ if (cur->type == XML_PI_NODE) {
+ if ((name != NULL) &&
+ (!xmlStrEqual(name, cur->name)))
+ break;
+ n++;
+ if (n == indx)
+ addNode(list, cur);
+ }
+ break;
+ case NODE_TEST_ALL:
+ if (axis == AXIS_ATTRIBUTE) {
+ if (cur->type == XML_ATTRIBUTE_NODE) {
+ n++;
+ if (n == indx)
+ addNode(list, cur);
+ }
+ } else if (axis == AXIS_NAMESPACE) {
+ if (cur->type == XML_NAMESPACE_DECL) {
+ n++;
+ if (n == indx)
+ xmlXPathNodeSetAddNs(list, ctxt->context->node,
+ (xmlNsPtr) cur);
+ }
+ } else {
+ if (cur->type == XML_ELEMENT_NODE) {
+ if (prefix == NULL) {
+ n++;
+ if (n == indx)
+ addNode(list, cur);
+ } else if ((cur->ns != NULL) &&
+ (xmlStrEqual(URI, cur->ns->href))) {
+ n++;
+ if (n == indx)
+ addNode(list, cur);
+ }
+ }
+ }
+ break;
+ case NODE_TEST_NS:{
+ TODO;
+ break;
+ }
+ case NODE_TEST_NAME:
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ if (xmlStrEqual(name, cur->name)) {
+ if (prefix == NULL) {
+ if (cur->ns == NULL) {
+ n++;
+ if (n == indx)
+ addNode(list, cur);
+ }
+ } else {
+ if ((cur->ns != NULL) &&
+ (xmlStrEqual(URI,
+ cur->ns->href))) {
+ n++;
+ if (n == indx)
+ addNode(list, cur);
+ }
+ }
+ }
+ break;
+ case XML_ATTRIBUTE_NODE:{
+ xmlAttrPtr attr = (xmlAttrPtr) cur;
+
+ if (xmlStrEqual(name, attr->name)) {
+ if (prefix == NULL) {
+ if ((attr->ns == NULL) ||
+ (attr->ns->prefix == NULL)) {
+ n++;
+ if (n == indx)
+ addNode(list, cur);
+ }
+ } else {
+ if ((attr->ns != NULL) &&
+ (xmlStrEqual(URI,
+ attr->ns->
+ href))) {
+ n++;
+ if (n == indx)
+ addNode(list, cur);
+ }
+ }
+ }
+ break;
+ }
+ case XML_NAMESPACE_DECL:
+ if (cur->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns = (xmlNsPtr) cur;
+
+ if ((ns->prefix != NULL) && (name != NULL)
+ && (xmlStrEqual(ns->prefix, name))) {
+ n++;
+ if (n == indx)
+ xmlXPathNodeSetAddNs(list,
+ ctxt->context->node, (xmlNsPtr) cur);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ break;
+ }
+ } while (n < indx);
+ }
+ ctxt->context->node = tmp;
+#ifdef DEBUG_STEP_NTH
+ xmlGenericError(xmlGenericErrorContext,
+ "\nExamined %d nodes, found %d nodes at that step\n",
+ t, list->nodeNr);
+#endif
+ valuePush(ctxt, xmlXPathWrapNodeSet(list));
+ if ((obj->boolval) && (obj->user != NULL)) {
+ ctxt->value->boolval = 1;
+ ctxt->value->user = obj->user;
+ obj->user = NULL;
+ obj->boolval = 0;
+ }
+ xmlXPathFreeObject(obj);
+ return(t);
+}
+
+/**
+ * xmlXPathCompOpEvalFirst:
+ * @ctxt: the XPath parser context with the compiled expression
+ * @op: an XPath compiled operation
+ * @first: the first elem found so far
+ *
+ * Evaluate the Precompiled XPath operation searching only the first
+ * element in document order
+ *
+ * Returns the number of examined objects.
+ */
+static int
+xmlXPathCompOpEvalFirst(xmlXPathParserContextPtr ctxt,
+ xmlXPathStepOpPtr op, xmlNodePtr * first)
+{
+ int total = 0, cur;
+ xmlXPathCompExprPtr comp;
+ xmlXPathObjectPtr arg1, arg2;
+
+ CHECK_ERROR0;
+ comp = ctxt->comp;
+ switch (op->op) {
+ case XPATH_OP_END:
+ return (0);
+ case XPATH_OP_UNION:
+ total =
+ xmlXPathCompOpEvalFirst(ctxt, &comp->steps[op->ch1],
+ first);
+ CHECK_ERROR0;
+ if ((ctxt->value != NULL)
+ && (ctxt->value->type == XPATH_NODESET)
+ && (ctxt->value->nodesetval != NULL)
+ && (ctxt->value->nodesetval->nodeNr >= 1)) {
+ /*
+ * limit tree traversing to first node in the result
+ */
+ xmlXPathNodeSetSort(ctxt->value->nodesetval);
+ *first = ctxt->value->nodesetval->nodeTab[0];
+ }
+ cur =
+ xmlXPathCompOpEvalFirst(ctxt, &comp->steps[op->ch2],
+ first);
+ CHECK_ERROR0;
+ CHECK_TYPE0(XPATH_NODESET);
+ arg2 = valuePop(ctxt);
+
+ CHECK_TYPE0(XPATH_NODESET);
+ arg1 = valuePop(ctxt);
+
+ arg1->nodesetval = xmlXPathNodeSetMerge(arg1->nodesetval,
+ arg2->nodesetval);
+ valuePush(ctxt, arg1);
+ xmlXPathFreeObject(arg2);
+ /* optimizer */
+ if (total > cur)
+ xmlXPathCompSwap(op);
+ return (total + cur);
+ case XPATH_OP_ROOT:
+ xmlXPathRoot(ctxt);
+ return (0);
+ case XPATH_OP_NODE:
+ if (op->ch1 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ if (op->ch2 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node));
+ return (total);
+ case XPATH_OP_RESET:
+ if (op->ch1 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ if (op->ch2 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ ctxt->context->node = NULL;
+ return (total);
+ case XPATH_OP_COLLECT:{
+ if (op->ch1 == -1)
+ return (total);
+
+ total = xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+
+ /*
+ * Optimization for [n] selection where n is a number
+ */
+ if ((op->ch2 != -1) &&
+ (comp->steps[op->ch2].op == XPATH_OP_PREDICATE) &&
+ (comp->steps[op->ch2].ch1 == -1) &&
+ (comp->steps[op->ch2].ch2 != -1) &&
+ (comp->steps[comp->steps[op->ch2].ch2].op ==
+ XPATH_OP_VALUE)) {
+ xmlXPathObjectPtr val;
+
+ val = comp->steps[comp->steps[op->ch2].ch2].value4;
+ if ((val != NULL) && (val->type == XPATH_NUMBER)) {
+ int indx = (int) val->floatval;
+
+ if (val->floatval == (float) indx) {
+ xmlXPathNodeCollectAndTestNth(ctxt, op, indx,
+ first, NULL);
+ return (total);
+ }
+ }
+ }
+ total += xmlXPathNodeCollectAndTest(ctxt, op, first, NULL);
+ return (total);
+ }
+ case XPATH_OP_VALUE:
+ valuePush(ctxt,
+ xmlXPathObjectCopy((xmlXPathObjectPtr) op->value4));
+ return (0);
+ case XPATH_OP_SORT:
+ if (op->ch1 != -1)
+ total +=
+ xmlXPathCompOpEvalFirst(ctxt, &comp->steps[op->ch1],
+ first);
+ CHECK_ERROR0;
+ if ((ctxt->value != NULL)
+ && (ctxt->value->type == XPATH_NODESET)
+ && (ctxt->value->nodesetval != NULL))
+ xmlXPathNodeSetSort(ctxt->value->nodesetval);
+ return (total);
+ default:
+ return (xmlXPathCompOpEval(ctxt, op));
+ }
+}
+
+/**
+ * xmlXPathCompOpEvalLast:
+ * @ctxt: the XPath parser context with the compiled expression
+ * @op: an XPath compiled operation
+ * @last: the last elem found so far
+ *
+ * Evaluate the Precompiled XPath operation searching only the last
+ * element in document order
+ *
+ * Returns the number of nodes traversed
+ */
+static int
+xmlXPathCompOpEvalLast(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op,
+ xmlNodePtr * last)
+{
+ int total = 0, cur;
+ xmlXPathCompExprPtr comp;
+ xmlXPathObjectPtr arg1, arg2;
+ xmlNodePtr bak;
+ xmlDocPtr bakd;
+ int pp;
+ int cs;
+
+ CHECK_ERROR0;
+ comp = ctxt->comp;
+ switch (op->op) {
+ case XPATH_OP_END:
+ return (0);
+ case XPATH_OP_UNION:
+ bakd = ctxt->context->doc;
+ bak = ctxt->context->node;
+ pp = ctxt->context->proximityPosition;
+ cs = ctxt->context->contextSize;
+ total =
+ xmlXPathCompOpEvalLast(ctxt, &comp->steps[op->ch1], last);
+ CHECK_ERROR0;
+ if ((ctxt->value != NULL)
+ && (ctxt->value->type == XPATH_NODESET)
+ && (ctxt->value->nodesetval != NULL)
+ && (ctxt->value->nodesetval->nodeNr >= 1)) {
+ /*
+ * limit tree traversing to first node in the result
+ */
+ xmlXPathNodeSetSort(ctxt->value->nodesetval);
+ *last =
+ ctxt->value->nodesetval->nodeTab[ctxt->value->
+ nodesetval->nodeNr -
+ 1];
+ }
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ ctxt->context->proximityPosition = pp;
+ ctxt->context->contextSize = cs;
+ cur =
+ xmlXPathCompOpEvalLast(ctxt, &comp->steps[op->ch2], last);
+ CHECK_ERROR0;
+ if ((ctxt->value != NULL)
+ && (ctxt->value->type == XPATH_NODESET)
+ && (ctxt->value->nodesetval != NULL)
+ && (ctxt->value->nodesetval->nodeNr >= 1)) {
+ }
+ CHECK_TYPE0(XPATH_NODESET);
+ arg2 = valuePop(ctxt);
+
+ CHECK_TYPE0(XPATH_NODESET);
+ arg1 = valuePop(ctxt);
+
+ arg1->nodesetval = xmlXPathNodeSetMerge(arg1->nodesetval,
+ arg2->nodesetval);
+ valuePush(ctxt, arg1);
+ xmlXPathFreeObject(arg2);
+ /* optimizer */
+ if (total > cur)
+ xmlXPathCompSwap(op);
+ return (total + cur);
+ case XPATH_OP_ROOT:
+ xmlXPathRoot(ctxt);
+ return (0);
+ case XPATH_OP_NODE:
+ if (op->ch1 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ if (op->ch2 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node));
+ return (total);
+ case XPATH_OP_RESET:
+ if (op->ch1 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ if (op->ch2 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ ctxt->context->node = NULL;
+ return (total);
+ case XPATH_OP_COLLECT:{
+ if (op->ch1 == -1)
+ return (0);
+
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+
+ /*
+ * Optimization for [n] selection where n is a number
+ */
+ if ((op->ch2 != -1) &&
+ (comp->steps[op->ch2].op == XPATH_OP_PREDICATE) &&
+ (comp->steps[op->ch2].ch1 == -1) &&
+ (comp->steps[op->ch2].ch2 != -1) &&
+ (comp->steps[comp->steps[op->ch2].ch2].op ==
+ XPATH_OP_VALUE)) {
+ xmlXPathObjectPtr val;
+
+ val = comp->steps[comp->steps[op->ch2].ch2].value4;
+ if ((val != NULL) && (val->type == XPATH_NUMBER)) {
+ int indx = (int) val->floatval;
+
+ if (val->floatval == (float) indx) {
+ total +=
+ xmlXPathNodeCollectAndTestNth(ctxt, op,
+ indx, NULL,
+ last);
+ return (total);
+ }
+ }
+ }
+ total += xmlXPathNodeCollectAndTest(ctxt, op, NULL, last);
+ return (total);
+ }
+ case XPATH_OP_VALUE:
+ valuePush(ctxt,
+ xmlXPathObjectCopy((xmlXPathObjectPtr) op->value4));
+ return (0);
+ case XPATH_OP_SORT:
+ if (op->ch1 != -1)
+ total +=
+ xmlXPathCompOpEvalLast(ctxt, &comp->steps[op->ch1],
+ last);
+ CHECK_ERROR0;
+ if ((ctxt->value != NULL)
+ && (ctxt->value->type == XPATH_NODESET)
+ && (ctxt->value->nodesetval != NULL))
+ xmlXPathNodeSetSort(ctxt->value->nodesetval);
+ return (total);
+ default:
+ return (xmlXPathCompOpEval(ctxt, op));
+ }
+}
+
+/**
+ * xmlXPathCompOpEval:
+ * @ctxt: the XPath parser context with the compiled expression
+ * @op: an XPath compiled operation
+ *
+ * Evaluate the Precompiled XPath operation
+ * Returns the number of nodes traversed
+ */
+static int
+xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
+{
+ int total = 0;
+ int equal, ret;
+ xmlXPathCompExprPtr comp;
+ xmlXPathObjectPtr arg1, arg2;
+ xmlNodePtr bak;
+ xmlDocPtr bakd;
+ int pp;
+ int cs;
+
+ CHECK_ERROR0;
+ comp = ctxt->comp;
+ switch (op->op) {
+ case XPATH_OP_END:
+ return (0);
+ case XPATH_OP_AND:
+ bakd = ctxt->context->doc;
+ bak = ctxt->context->node;
+ pp = ctxt->context->proximityPosition;
+ cs = ctxt->context->contextSize;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ xmlXPathBooleanFunction(ctxt, 1);
+ if ((ctxt->value == NULL) || (ctxt->value->boolval == 0))
+ return (total);
+ arg2 = valuePop(ctxt);
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ ctxt->context->proximityPosition = pp;
+ ctxt->context->contextSize = cs;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ if (ctxt->error) {
+ xmlXPathFreeObject(arg2);
+ return(0);
+ }
+ xmlXPathBooleanFunction(ctxt, 1);
+ arg1 = valuePop(ctxt);
+ arg1->boolval &= arg2->boolval;
+ valuePush(ctxt, arg1);
+ xmlXPathFreeObject(arg2);
+ return (total);
+ case XPATH_OP_OR:
+ bakd = ctxt->context->doc;
+ bak = ctxt->context->node;
+ pp = ctxt->context->proximityPosition;
+ cs = ctxt->context->contextSize;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ xmlXPathBooleanFunction(ctxt, 1);
+ if ((ctxt->value == NULL) || (ctxt->value->boolval == 1))
+ return (total);
+ arg2 = valuePop(ctxt);
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ ctxt->context->proximityPosition = pp;
+ ctxt->context->contextSize = cs;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ if (ctxt->error) {
+ xmlXPathFreeObject(arg2);
+ return(0);
+ }
+ xmlXPathBooleanFunction(ctxt, 1);
+ arg1 = valuePop(ctxt);
+ arg1->boolval |= arg2->boolval;
+ valuePush(ctxt, arg1);
+ xmlXPathFreeObject(arg2);
+ return (total);
+ case XPATH_OP_EQUAL:
+ bakd = ctxt->context->doc;
+ bak = ctxt->context->node;
+ pp = ctxt->context->proximityPosition;
+ cs = ctxt->context->contextSize;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ ctxt->context->proximityPosition = pp;
+ ctxt->context->contextSize = cs;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ if (op->value)
+ equal = xmlXPathEqualValues(ctxt);
+ else
+ equal = xmlXPathNotEqualValues(ctxt);
+ valuePush(ctxt, xmlXPathNewBoolean(equal));
+ return (total);
+ case XPATH_OP_CMP:
+ bakd = ctxt->context->doc;
+ bak = ctxt->context->node;
+ pp = ctxt->context->proximityPosition;
+ cs = ctxt->context->contextSize;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ ctxt->context->proximityPosition = pp;
+ ctxt->context->contextSize = cs;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ ret = xmlXPathCompareValues(ctxt, op->value, op->value2);
+ valuePush(ctxt, xmlXPathNewBoolean(ret));
+ return (total);
+ case XPATH_OP_PLUS:
+ bakd = ctxt->context->doc;
+ bak = ctxt->context->node;
+ pp = ctxt->context->proximityPosition;
+ cs = ctxt->context->contextSize;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ if (op->ch2 != -1) {
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ ctxt->context->proximityPosition = pp;
+ ctxt->context->contextSize = cs;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ }
+ CHECK_ERROR0;
+ if (op->value == 0)
+ xmlXPathSubValues(ctxt);
+ else if (op->value == 1)
+ xmlXPathAddValues(ctxt);
+ else if (op->value == 2)
+ xmlXPathValueFlipSign(ctxt);
+ else if (op->value == 3) {
+ CAST_TO_NUMBER;
+ CHECK_TYPE0(XPATH_NUMBER);
+ }
+ return (total);
+ case XPATH_OP_MULT:
+ bakd = ctxt->context->doc;
+ bak = ctxt->context->node;
+ pp = ctxt->context->proximityPosition;
+ cs = ctxt->context->contextSize;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ ctxt->context->proximityPosition = pp;
+ ctxt->context->contextSize = cs;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ if (op->value == 0)
+ xmlXPathMultValues(ctxt);
+ else if (op->value == 1)
+ xmlXPathDivValues(ctxt);
+ else if (op->value == 2)
+ xmlXPathModValues(ctxt);
+ return (total);
+ case XPATH_OP_UNION:
+ bakd = ctxt->context->doc;
+ bak = ctxt->context->node;
+ pp = ctxt->context->proximityPosition;
+ cs = ctxt->context->contextSize;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ ctxt->context->proximityPosition = pp;
+ ctxt->context->contextSize = cs;
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ CHECK_TYPE0(XPATH_NODESET);
+ arg2 = valuePop(ctxt);
+
+ CHECK_TYPE0(XPATH_NODESET);
+ arg1 = valuePop(ctxt);
+
+ arg1->nodesetval = xmlXPathNodeSetMerge(arg1->nodesetval,
+ arg2->nodesetval);
+ valuePush(ctxt, arg1);
+ xmlXPathFreeObject(arg2);
+ return (total);
+ case XPATH_OP_ROOT:
+ xmlXPathRoot(ctxt);
+ return (total);
+ case XPATH_OP_NODE:
+ if (op->ch1 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ if (op->ch2 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node));
+ return (total);
+ case XPATH_OP_RESET:
+ if (op->ch1 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ if (op->ch2 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ ctxt->context->node = NULL;
+ return (total);
+ case XPATH_OP_COLLECT:{
+ if (op->ch1 == -1)
+ return (total);
+
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+
+ /*
+ * Optimization for [n] selection where n is a number
+ */
+ if ((op->ch2 != -1) &&
+ (comp->steps[op->ch2].op == XPATH_OP_PREDICATE) &&
+ (comp->steps[op->ch2].ch1 == -1) &&
+ (comp->steps[op->ch2].ch2 != -1) &&
+ (comp->steps[comp->steps[op->ch2].ch2].op ==
+ XPATH_OP_VALUE)) {
+ xmlXPathObjectPtr val;
+
+ val = comp->steps[comp->steps[op->ch2].ch2].value4;
+ if ((val != NULL) && (val->type == XPATH_NUMBER)) {
+ int indx = (int) val->floatval;
+
+ if (val->floatval == (float) indx) {
+ total +=
+ xmlXPathNodeCollectAndTestNth(ctxt, op,
+ indx, NULL,
+ NULL);
+ return (total);
+ }
+ }
+ }
+ total += xmlXPathNodeCollectAndTest(ctxt, op, NULL, NULL);
+ return (total);
+ }
+ case XPATH_OP_VALUE:
+ valuePush(ctxt,
+ xmlXPathObjectCopy((xmlXPathObjectPtr) op->value4));
+ return (total);
+ case XPATH_OP_VARIABLE:{
+ xmlXPathObjectPtr val;
+
+ if (op->ch1 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ if (op->value5 == NULL) {
+ val = xmlXPathVariableLookup(ctxt->context, op->value4);
+ if (val == NULL) {
+ ctxt->error = XPATH_UNDEF_VARIABLE_ERROR;
+ return(0);
+ }
+ valuePush(ctxt, val);
+ } else {
+ const xmlChar *URI;
+
+ URI = xmlXPathNsLookup(ctxt->context, op->value5);
+ if (URI == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathCompOpEval: variable %s bound to undefined prefix %s\n",
+ op->value4, op->value5);
+ return (total);
+ }
+ val = xmlXPathVariableLookupNS(ctxt->context,
+ op->value4, URI);
+ if (val == NULL) {
+ ctxt->error = XPATH_UNDEF_VARIABLE_ERROR;
+ return(0);
+ }
+ valuePush(ctxt, val);
+ }
+ return (total);
+ }
+ case XPATH_OP_FUNCTION:{
+ xmlXPathFunction func;
+ const xmlChar *oldFunc, *oldFuncURI;
+ int i;
+
+ if (op->ch1 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ if (ctxt->valueNr < op->value) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathCompOpEval: parameter error\n");
+ ctxt->error = XPATH_INVALID_OPERAND;
+ return (total);
+ }
+ for (i = 0; i < op->value; i++)
+ if (ctxt->valueTab[(ctxt->valueNr - 1) - i] == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathCompOpEval: parameter error\n");
+ ctxt->error = XPATH_INVALID_OPERAND;
+ return (total);
+ }
+ if (op->cache != NULL)
+ func = (xmlXPathFunction) op->cache;
+ else {
+ const xmlChar *URI = NULL;
+
+ if (op->value5 == NULL)
+ func =
+ xmlXPathFunctionLookup(ctxt->context,
+ op->value4);
+ else {
+ URI = xmlXPathNsLookup(ctxt->context, op->value5);
+ if (URI == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathCompOpEval: function %s bound to undefined prefix %s\n",
+ op->value4, op->value5);
+ return (total);
+ }
+ func = xmlXPathFunctionLookupNS(ctxt->context,
+ op->value4, URI);
+ }
+ if (func == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathCompOpEval: function %s not found\n",
+ op->value4);
+ XP_ERROR0(XPATH_UNKNOWN_FUNC_ERROR);
+ }
+ op->cache = (void *) func;
+ op->cacheURI = (void *) URI;
+ }
+ oldFunc = ctxt->context->function;
+ oldFuncURI = ctxt->context->functionURI;
+ ctxt->context->function = op->value4;
+ ctxt->context->functionURI = op->cacheURI;
+ func(ctxt, op->value);
+ ctxt->context->function = oldFunc;
+ ctxt->context->functionURI = oldFuncURI;
+ return (total);
+ }
+ case XPATH_OP_ARG:
+ bakd = ctxt->context->doc;
+ bak = ctxt->context->node;
+ if (op->ch1 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ CHECK_ERROR0;
+ if (op->ch2 != -1) {
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
+ ctxt->context->doc = bakd;
+ ctxt->context->node = bak;
+ CHECK_ERROR0;
+ }
+ return (total);
+ case XPATH_OP_PREDICATE:
+ case XPATH_OP_FILTER:{
+ xmlXPathObjectPtr res;
+ xmlXPathObjectPtr obj, tmp;
+ xmlNodeSetPtr newset = NULL;
+ xmlNodeSetPtr oldset;
+ xmlNodePtr oldnode;
+ int i;
+
+ /*
+ * Optimization for ()[1] selection i.e. the first elem
+ */
+ if ((op->ch1 != -1) && (op->ch2 != -1) &&
+ (comp->steps[op->ch1].op == XPATH_OP_SORT) &&
+ (comp->steps[op->ch2].op == XPATH_OP_VALUE)) {
+ xmlXPathObjectPtr val;
+
+ val = comp->steps[op->ch2].value4;
+ if ((val != NULL) && (val->type == XPATH_NUMBER) &&
+ (val->floatval == 1.0)) {
+ xmlNodePtr first = NULL;
+
+ total +=
+ xmlXPathCompOpEvalFirst(ctxt,
+ &comp->steps[op->ch1],
+ &first);
+ CHECK_ERROR0;
+ /*
+ * The nodeset should be in document order,
+ * Keep only the first value
+ */
+ if ((ctxt->value != NULL) &&
+ (ctxt->value->type == XPATH_NODESET) &&
+ (ctxt->value->nodesetval != NULL) &&
+ (ctxt->value->nodesetval->nodeNr > 1))
+ ctxt->value->nodesetval->nodeNr = 1;
+ return (total);
+ }
+ }
+ /*
+ * Optimization for ()[last()] selection i.e. the last elem
+ */
+ if ((op->ch1 != -1) && (op->ch2 != -1) &&
+ (comp->steps[op->ch1].op == XPATH_OP_SORT) &&
+ (comp->steps[op->ch2].op == XPATH_OP_SORT)) {
+ int f = comp->steps[op->ch2].ch1;
+
+ if ((f != -1) &&
+ (comp->steps[f].op == XPATH_OP_FUNCTION) &&
+ (comp->steps[f].value5 == NULL) &&
+ (comp->steps[f].value == 0) &&
+ (comp->steps[f].value4 != NULL) &&
+ (xmlStrEqual
+ (comp->steps[f].value4, BAD_CAST "last"))) {
+ xmlNodePtr last = NULL;
+
+ total +=
+ xmlXPathCompOpEvalLast(ctxt,
+ &comp->steps[op->ch1],
+ &last);
+ CHECK_ERROR0;
+ /*
+ * The nodeset should be in document order,
+ * Keep only the last value
+ */
+ if ((ctxt->value != NULL) &&
+ (ctxt->value->type == XPATH_NODESET) &&
+ (ctxt->value->nodesetval != NULL) &&
+ (ctxt->value->nodesetval->nodeTab != NULL) &&
+ (ctxt->value->nodesetval->nodeNr > 1)) {
+ ctxt->value->nodesetval->nodeTab[0] =
+ ctxt->value->nodesetval->nodeTab[ctxt->
+ value->
+ nodesetval->
+ nodeNr -
+ 1];
+ ctxt->value->nodesetval->nodeNr = 1;
+ }
+ return (total);
+ }
+ }
+
+ if (op->ch1 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ if (op->ch2 == -1)
+ return (total);
+ if (ctxt->value == NULL)
+ return (total);
+
+ oldnode = ctxt->context->node;
+
+#ifdef LIBXML_XPTR_ENABLED
+ /*
+ * Hum are we filtering the result of an XPointer expression
+ */
+ if (ctxt->value->type == XPATH_LOCATIONSET) {
+ xmlLocationSetPtr newlocset = NULL;
+ xmlLocationSetPtr oldlocset;
+
+ /*
+ * Extract the old locset, and then evaluate the result of the
+ * expression for all the element in the locset. use it to grow
+ * up a new locset.
+ */
+ CHECK_TYPE0(XPATH_LOCATIONSET);
+ obj = valuePop(ctxt);
+ oldlocset = obj->user;
+ ctxt->context->node = NULL;
+
+ if ((oldlocset == NULL) || (oldlocset->locNr == 0)) {
+ ctxt->context->contextSize = 0;
+ ctxt->context->proximityPosition = 0;
+ if (op->ch2 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt,
+ &comp->steps[op->ch2]);
+ res = valuePop(ctxt);
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ valuePush(ctxt, obj);
+ CHECK_ERROR0;
+ return (total);
+ }
+ newlocset = xmlXPtrLocationSetCreate(NULL);
+
+ for (i = 0; i < oldlocset->locNr; i++) {
+ /*
+ * Run the evaluation with a node list made of a
+ * single item in the nodelocset.
+ */
+ ctxt->context->node = oldlocset->locTab[i]->user;
+ ctxt->context->contextSize = oldlocset->locNr;
+ ctxt->context->proximityPosition = i + 1;
+ tmp = xmlXPathNewNodeSet(ctxt->context->node);
+ valuePush(ctxt, tmp);
+
+ if (op->ch2 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt,
+ &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+
+ /*
+ * The result of the evaluation need to be tested to
+ * decided whether the filter succeeded or not
+ */
+ res = valuePop(ctxt);
+ if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
+ xmlXPtrLocationSetAdd(newlocset,
+ xmlXPathObjectCopy
+ (oldlocset->locTab[i]));
+ }
+
+ /*
+ * Cleanup
+ */
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ if (ctxt->value == tmp) {
+ res = valuePop(ctxt);
+ xmlXPathFreeObject(res);
+ }
+
+ ctxt->context->node = NULL;
+ }
+
+ /*
+ * The result is used as the new evaluation locset.
+ */
+ xmlXPathFreeObject(obj);
+ ctxt->context->node = NULL;
+ ctxt->context->contextSize = -1;
+ ctxt->context->proximityPosition = -1;
+ valuePush(ctxt, xmlXPtrWrapLocationSet(newlocset));
+ ctxt->context->node = oldnode;
+ return (total);
+ }
+#endif /* LIBXML_XPTR_ENABLED */
+
+ /*
+ * Extract the old set, and then evaluate the result of the
+ * expression for all the element in the set. use it to grow
+ * up a new set.
+ */
+ CHECK_TYPE0(XPATH_NODESET);
+ obj = valuePop(ctxt);
+ oldset = obj->nodesetval;
+
+ oldnode = ctxt->context->node;
+ ctxt->context->node = NULL;
+
+ if ((oldset == NULL) || (oldset->nodeNr == 0)) {
+ ctxt->context->contextSize = 0;
+ ctxt->context->proximityPosition = 0;
+ if (op->ch2 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt,
+ &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+ res = valuePop(ctxt);
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ valuePush(ctxt, obj);
+ ctxt->context->node = oldnode;
+ CHECK_ERROR0;
+ } else {
+ /*
+ * Initialize the new set.
+ */
+ newset = xmlXPathNodeSetCreate(NULL);
+
+ for (i = 0; i < oldset->nodeNr; i++) {
+ /*
+ * Run the evaluation with a node list made of
+ * a single item in the nodeset.
+ */
+ ctxt->context->node = oldset->nodeTab[i];
+ tmp = xmlXPathNewNodeSet(ctxt->context->node);
+ valuePush(ctxt, tmp);
+ ctxt->context->contextSize = oldset->nodeNr;
+ ctxt->context->proximityPosition = i + 1;
+
+ if (op->ch2 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt,
+ &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+
+ /*
+ * The result of the evaluation needs to be tested to
+ * decide whether the filter succeeded or not
+ */
+ res = valuePop(ctxt);
+ if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
+ xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]);
+ }
+
+ /*
+ * Cleanup
+ */
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ if (ctxt->value == tmp) {
+ res = valuePop(ctxt);
+ xmlXPathFreeObject(res);
+ }
+
+ ctxt->context->node = NULL;
+ }
+
+ /*
+ * The result is used as the new evaluation set.
+ */
+ xmlXPathFreeObject(obj);
+ ctxt->context->node = NULL;
+ ctxt->context->contextSize = -1;
+ ctxt->context->proximityPosition = -1;
+ valuePush(ctxt, xmlXPathWrapNodeSet(newset));
+ }
+ ctxt->context->node = oldnode;
+ return (total);
+ }
+ case XPATH_OP_SORT:
+ if (op->ch1 != -1)
+ total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ CHECK_ERROR0;
+ if ((ctxt->value != NULL) &&
+ (ctxt->value->type == XPATH_NODESET) &&
+ (ctxt->value->nodesetval != NULL))
+ xmlXPathNodeSetSort(ctxt->value->nodesetval);
+ return (total);
+#ifdef LIBXML_XPTR_ENABLED
+ case XPATH_OP_RANGETO:{
+ xmlXPathObjectPtr range;
+ xmlXPathObjectPtr res, obj;
+ xmlXPathObjectPtr tmp;
+ xmlLocationSetPtr newlocset = NULL;
+ xmlLocationSetPtr oldlocset;
+ xmlNodeSetPtr oldset;
+ int i, j;
+
+ if (op->ch1 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
+ if (op->ch2 == -1)
+ return (total);
+
+ if (ctxt->value->type == XPATH_LOCATIONSET) {
+ /*
+ * Extract the old locset, and then evaluate the result of the
+ * expression for all the element in the locset. use it to grow
+ * up a new locset.
+ */
+ CHECK_TYPE0(XPATH_LOCATIONSET);
+ obj = valuePop(ctxt);
+ oldlocset = obj->user;
+
+ if ((oldlocset == NULL) || (oldlocset->locNr == 0)) {
+ ctxt->context->node = NULL;
+ ctxt->context->contextSize = 0;
+ ctxt->context->proximityPosition = 0;
+ total += xmlXPathCompOpEval(ctxt,&comp->steps[op->ch2]);
+ res = valuePop(ctxt);
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ valuePush(ctxt, obj);
+ CHECK_ERROR0;
+ return (total);
+ }
+ newlocset = xmlXPtrLocationSetCreate(NULL);
+
+ for (i = 0; i < oldlocset->locNr; i++) {
+ /*
+ * Run the evaluation with a node list made of a
+ * single item in the nodelocset.
+ */
+ ctxt->context->node = oldlocset->locTab[i]->user;
+ ctxt->context->contextSize = oldlocset->locNr;
+ ctxt->context->proximityPosition = i + 1;
+ tmp = xmlXPathNewNodeSet(ctxt->context->node);
+ valuePush(ctxt, tmp);
+
+ if (op->ch2 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt,
+ &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+
+ res = valuePop(ctxt);
+ if (res->type == XPATH_LOCATIONSET) {
+ xmlLocationSetPtr rloc =
+ (xmlLocationSetPtr)res->user;
+ for (j=0; j<rloc->locNr; j++) {
+ range = xmlXPtrNewRange(
+ oldlocset->locTab[i]->user,
+ oldlocset->locTab[i]->index,
+ rloc->locTab[j]->user2,
+ rloc->locTab[j]->index2);
+ if (range != NULL) {
+ xmlXPtrLocationSetAdd(newlocset, range);
+ }
+ }
+ } else {
+ range = xmlXPtrNewRangeNodeObject(
+ (xmlNodePtr)oldlocset->locTab[i]->user, res);
+ if (range != NULL) {
+ xmlXPtrLocationSetAdd(newlocset,range);
+ }
+ }
+
+ /*
+ * Cleanup
+ */
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ if (ctxt->value == tmp) {
+ res = valuePop(ctxt);
+ xmlXPathFreeObject(res);
+ }
+
+ ctxt->context->node = NULL;
+ }
+ } else { /* Not a location set */
+ CHECK_TYPE0(XPATH_NODESET);
+ obj = valuePop(ctxt);
+ oldset = obj->nodesetval;
+ ctxt->context->node = NULL;
+
+ newlocset = xmlXPtrLocationSetCreate(NULL);
+
+ if (oldset != NULL) {
+ for (i = 0; i < oldset->nodeNr; i++) {
+ /*
+ * Run the evaluation with a node list made of a single item
+ * in the nodeset.
+ */
+ ctxt->context->node = oldset->nodeTab[i];
+ tmp = xmlXPathNewNodeSet(ctxt->context->node);
+ valuePush(ctxt, tmp);
+
+ if (op->ch2 != -1)
+ total +=
+ xmlXPathCompOpEval(ctxt,
+ &comp->steps[op->ch2]);
+ CHECK_ERROR0;
+
+ res = valuePop(ctxt);
+ range =
+ xmlXPtrNewRangeNodeObject(oldset->nodeTab[i],
+ res);
+ if (range != NULL) {
+ xmlXPtrLocationSetAdd(newlocset, range);
+ }
+
+ /*
+ * Cleanup
+ */
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ if (ctxt->value == tmp) {
+ res = valuePop(ctxt);
+ xmlXPathFreeObject(res);
+ }
+
+ ctxt->context->node = NULL;
+ }
+ }
+ }
+
+ /*
+ * The result is used as the new evaluation set.
+ */
+ xmlXPathFreeObject(obj);
+ ctxt->context->node = NULL;
+ ctxt->context->contextSize = -1;
+ ctxt->context->proximityPosition = -1;
+ valuePush(ctxt, xmlXPtrWrapLocationSet(newlocset));
+ return (total);
+ }
+#endif /* LIBXML_XPTR_ENABLED */
+ }
+ xmlGenericError(xmlGenericErrorContext,
+ "XPath: unknown precompiled operation %d\n", op->op);
+ return (total);
+}
+
+/**
+ * xmlXPathRunEval:
+ * @ctxt: the XPath parser context with the compiled expression
+ *
+ * Evaluate the Precompiled XPath expression in the given context.
+ */
+static void
+xmlXPathRunEval(xmlXPathParserContextPtr ctxt) {
+ xmlXPathCompExprPtr comp;
+
+ if ((ctxt == NULL) || (ctxt->comp == NULL))
+ return;
+
+ if (ctxt->valueTab == NULL) {
+ /* Allocate the value stack */
+ ctxt->valueTab = (xmlXPathObjectPtr *)
+ xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
+ if (ctxt->valueTab == NULL) {
+ xmlXPathPErrMemory(ctxt, "creating evaluation context\n");
+ xmlFree(ctxt);
+ }
+ ctxt->valueNr = 0;
+ ctxt->valueMax = 10;
+ ctxt->value = NULL;
+ }
+ comp = ctxt->comp;
+ if(comp->last < 0) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathRunEval: last is less than zero\n");
+ return;
+ }
+ xmlXPathCompOpEval(ctxt, &comp->steps[comp->last]);
+}
+
+/************************************************************************
+ * *
+ * Public interfaces *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPathEvalPredicate:
+ * @ctxt: the XPath context
+ * @res: the Predicate Expression evaluation result
+ *
+ * Evaluate a predicate result for the current node.
+ * A PredicateExpr is evaluated by evaluating the Expr and converting
+ * the result to a boolean. If the result is a number, the result will
+ * be converted to true if the number is equal to the position of the
+ * context node in the context node list (as returned by the position
+ * function) and will be converted to false otherwise; if the result
+ * is not a number, then the result will be converted as if by a call
+ * to the boolean function.
+ *
+ * Returns 1 if predicate is true, 0 otherwise
+ */
+int
+xmlXPathEvalPredicate(xmlXPathContextPtr ctxt, xmlXPathObjectPtr res) {
+ if (res == NULL) return(0);
+ switch (res->type) {
+ case XPATH_BOOLEAN:
+ return(res->boolval);
+ case XPATH_NUMBER:
+ return(res->floatval == ctxt->proximityPosition);
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ if (res->nodesetval == NULL)
+ return(0);
+ return(res->nodesetval->nodeNr != 0);
+ case XPATH_STRING:
+ return((res->stringval != NULL) &&
+ (xmlStrlen(res->stringval) != 0));
+ default:
+ STRANGE
+ }
+ return(0);
+}
+
+/**
+ * xmlXPathEvaluatePredicateResult:
+ * @ctxt: the XPath Parser context
+ * @res: the Predicate Expression evaluation result
+ *
+ * Evaluate a predicate result for the current node.
+ * A PredicateExpr is evaluated by evaluating the Expr and converting
+ * the result to a boolean. If the result is a number, the result will
+ * be converted to true if the number is equal to the position of the
+ * context node in the context node list (as returned by the position
+ * function) and will be converted to false otherwise; if the result
+ * is not a number, then the result will be converted as if by a call
+ * to the boolean function.
+ *
+ * Returns 1 if predicate is true, 0 otherwise
+ */
+int
+xmlXPathEvaluatePredicateResult(xmlXPathParserContextPtr ctxt,
+ xmlXPathObjectPtr res) {
+ if (res == NULL) return(0);
+ switch (res->type) {
+ case XPATH_BOOLEAN:
+ return(res->boolval);
+ case XPATH_NUMBER:
+ return(res->floatval == ctxt->context->proximityPosition);
+ case XPATH_NODESET:
+ case XPATH_XSLT_TREE:
+ if (res->nodesetval == NULL)
+ return(0);
+ return(res->nodesetval->nodeNr != 0);
+ case XPATH_STRING:
+ return((res->stringval != NULL) &&
+ (xmlStrlen(res->stringval) != 0));
+#ifdef LIBXML_XPTR_ENABLED
+ case XPATH_LOCATIONSET:{
+ xmlLocationSetPtr ptr = res->user;
+ if (ptr == NULL)
+ return(0);
+ return (ptr->locNr != 0);
+ }
+#endif
+ default:
+ STRANGE
+ }
+ return(0);
+}
+
+/**
+ * xmlXPathCtxtCompile:
+ * @ctxt: an XPath context
+ * @str: the XPath expression
+ *
+ * Compile an XPath expression
+ *
+ * Returns the xmlXPathCompExprPtr resulting from the compilation or NULL.
+ * the caller has to free the object.
+ */
+xmlXPathCompExprPtr
+xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
+ xmlXPathParserContextPtr pctxt;
+ xmlXPathCompExprPtr comp;
+
+ xmlXPathInit();
+
+ pctxt = xmlXPathNewParserContext(str, ctxt);
+ xmlXPathCompileExpr(pctxt);
+
+ if( pctxt->error != XPATH_EXPRESSION_OK )
+ {
+ xmlXPathFreeParserContext(pctxt);
+ return (0);
+ }
+
+ if (*pctxt->cur != 0) {
+ /*
+ * aleksey: in some cases this line prints *second* error message
+ * (see bug #78858) and probably this should be fixed.
+ * However, we are not sure that all error messages are printed
+ * out in other places. It's not critical so we leave it as-is for now
+ */
+ xmlXPatherror(pctxt, __FILE__, __LINE__, XPATH_EXPR_ERROR);
+ comp = NULL;
+ } else {
+ comp = pctxt->comp;
+ pctxt->comp = NULL;
+ }
+ xmlXPathFreeParserContext(pctxt);
+ if (comp != NULL) {
+ comp->expr = xmlStrdup(str);
+#ifdef DEBUG_EVAL_COUNTS
+ comp->string = xmlStrdup(str);
+ comp->nb = 0;
+#endif
+ }
+ return(comp);
+}
+
+/**
+ * xmlXPathCompile:
+ * @str: the XPath expression
+ *
+ * Compile an XPath expression
+ *
+ * Returns the xmlXPathCompExprPtr resulting from the compilation or NULL.
+ * the caller has to free the object.
+ */
+xmlXPathCompExprPtr
+xmlXPathCompile(const xmlChar *str) {
+ return(xmlXPathCtxtCompile(NULL, str));
+}
+
+/**
+ * xmlXPathCompiledEval:
+ * @comp: the compiled XPath expression
+ * @ctx: the XPath context
+ *
+ * Evaluate the Precompiled XPath expression in the given context.
+ *
+ * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
+ * the caller has to free the object.
+ */
+xmlXPathObjectPtr
+xmlXPathCompiledEval(xmlXPathCompExprPtr comp, xmlXPathContextPtr ctx) {
+ xmlXPathParserContextPtr ctxt;
+ xmlXPathObjectPtr res, tmp, init = NULL;
+ int stack = 0;
+#ifndef LIBXML_THREAD_ENABLED
+ static int reentance = 0;
+#endif
+
+ if ((comp == NULL) || (ctx == NULL))
+ return(NULL);
+ xmlXPathInit();
+
+ CHECK_CONTEXT(ctx)
+
+#ifndef LIBXML_THREAD_ENABLED
+ reentance++;
+ if (reentance > 1)
+ xmlXPathDisableOptimizer = 1;
+#endif
+
+#ifdef DEBUG_EVAL_COUNTS
+ comp->nb++;
+ if ((comp->string != NULL) && (comp->nb > 100)) {
+ fprintf(stderr, "100 x %s\n", comp->string);
+ comp->nb = 0;
+ }
+#endif
+ ctxt = xmlXPathCompParserContext(comp, ctx);
+ xmlXPathRunEval(ctxt);
+
+ if (ctxt->value == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathCompiledEval: evaluation failed\n");
+ res = NULL;
+ } else {
+ res = valuePop(ctxt);
+ }
+
+
+ do {
+ tmp = valuePop(ctxt);
+ if (tmp != NULL) {
+ if (tmp != init)
+ stack++;
+ xmlXPathFreeObject(tmp);
+ }
+ } while (tmp != NULL);
+ if ((stack != 0) && (res != NULL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathCompiledEval: %d object left on the stack\n",
+ stack);
+ }
+ if (ctxt->error != XPATH_EXPRESSION_OK) {
+ xmlXPathFreeObject(res);
+ res = NULL;
+ }
+
+
+ ctxt->comp = NULL;
+ xmlXPathFreeParserContext(ctxt);
+#ifndef LIBXML_THREAD_ENABLED
+ reentance--;
+#endif
+ return(res);
+}
+
+/**
+ * xmlXPathEvalExpr:
+ * @ctxt: the XPath Parser context
+ *
+ * Parse and evaluate an XPath expression in the given context,
+ * then push the result on the context stack
+ */
+void
+xmlXPathEvalExpr(xmlXPathParserContextPtr ctxt) {
+ xmlXPathCompileExpr(ctxt);
+ CHECK_ERROR;
+ xmlXPathRunEval(ctxt);
+}
+
+/**
+ * xmlXPathEval:
+ * @str: the XPath expression
+ * @ctx: the XPath context
+ *
+ * Evaluate the XPath Location Path in the given context.
+ *
+ * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
+ * the caller has to free the object.
+ */
+xmlXPathObjectPtr
+xmlXPathEval(const xmlChar *str, xmlXPathContextPtr ctx) {
+ xmlXPathParserContextPtr ctxt;
+ xmlXPathObjectPtr res, tmp, init = NULL;
+ int stack = 0;
+
+ xmlXPathInit();
+
+ CHECK_CONTEXT(ctx)
+
+ ctxt = xmlXPathNewParserContext(str, ctx);
+ xmlXPathEvalExpr(ctxt);
+
+ if (ctxt->value == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathEval: evaluation failed\n");
+ res = NULL;
+ } else if (*ctxt->cur != 0) {
+ xmlXPatherror(ctxt, __FILE__, __LINE__, XPATH_EXPR_ERROR);
+ res = NULL;
+ } else {
+ res = valuePop(ctxt);
+ }
+
+ do {
+ tmp = valuePop(ctxt);
+ if (tmp != NULL) {
+ if (tmp != init)
+ stack++;
+ xmlXPathFreeObject(tmp);
+ }
+ } while (tmp != NULL);
+ if ((stack != 0) && (res != NULL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathEval: %d object left on the stack\n",
+ stack);
+ }
+ if (ctxt->error != XPATH_EXPRESSION_OK) {
+ xmlXPathFreeObject(res);
+ res = NULL;
+ }
+
+ xmlXPathFreeParserContext(ctxt);
+ return(res);
+}
+
+/**
+ * xmlXPathEvalExpression:
+ * @str: the XPath expression
+ * @ctxt: the XPath context
+ *
+ * Evaluate the XPath expression in the given context.
+ *
+ * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
+ * the caller has to free the object.
+ */
+xmlXPathObjectPtr
+xmlXPathEvalExpression(const xmlChar *str, xmlXPathContextPtr ctxt) {
+ xmlXPathParserContextPtr pctxt;
+ xmlXPathObjectPtr res, tmp;
+ int stack = 0;
+
+ xmlXPathInit();
+
+ CHECK_CONTEXT(ctxt)
+
+ pctxt = xmlXPathNewParserContext(str, ctxt);
+ xmlXPathEvalExpr(pctxt);
+
+ if (*pctxt->cur != 0) {
+ xmlXPatherror(pctxt, __FILE__, __LINE__, XPATH_EXPR_ERROR);
+ res = NULL;
+ } else {
+ res = valuePop(pctxt);
+ }
+ do {
+ tmp = valuePop(pctxt);
+ if (tmp != NULL) {
+ xmlXPathFreeObject(tmp);
+ stack++;
+ }
+ } while (tmp != NULL);
+ if ((stack != 0) && (res != NULL)) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPathEvalExpression: %d object left on the stack\n",
+ stack);
+ }
+ xmlXPathFreeParserContext(pctxt);
+ return(res);
+}
+
+/************************************************************************
+ * *
+ * Extra functions not pertaining to the XPath spec *
+ * *
+ ************************************************************************/
+/**
+ * xmlXPathEscapeUriFunction:
+ * @ctxt: the XPath Parser context
+ * @nargs: the number of arguments
+ *
+ * Implement the escape-uri() XPath function
+ * string escape-uri(string $str, bool $escape-reserved)
+ *
+ * This function applies the URI escaping rules defined in section 2 of [RFC
+ * 2396] to the string supplied as $uri-part, which typically represents all
+ * or part of a URI. The effect of the function is to replace any special
+ * character in the string by an escape sequence of the form %xx%yy...,
+ * where xxyy... is the hexadecimal representation of the octets used to
+ * represent the character in UTF-8.
+ *
+ * The set of characters that are escaped depends on the setting of the
+ * boolean argument $escape-reserved.
+ *
+ * If $escape-reserved is true, all characters are escaped other than lower
+ * case letters a-z, upper case letters A-Z, digits 0-9, and the characters
+ * referred to in [RFC 2396] as "marks": specifically, "-" | "_" | "." | "!"
+ * | "~" | "*" | "'" | "(" | ")". The "%" character itself is escaped only
+ * if it is not followed by two hexadecimal digits (that is, 0-9, a-f, and
+ * A-F).
+ *
+ * If $escape-reserved is false, the behavior differs in that characters
+ * referred to in [RFC 2396] as reserved characters are not escaped. These
+ * characters are ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ",".
+ *
+ * [RFC 2396] does not define whether escaped URIs should use lower case or
+ * upper case for hexadecimal digits. To ensure that escaped URIs can be
+ * compared using string comparison functions, this function must always use
+ * the upper-case letters A-F.
+ *
+ * Generally, $escape-reserved should be set to true when escaping a string
+ * that is to form a single part of a URI, and to false when escaping an
+ * entire URI or URI reference.
+ *
+ * In the case of non-ascii characters, the string is encoded according to
+ * utf-8 and then converted according to RFC 2396.
+ *
+ * Examples
+ * xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), true())
+ * returns "gopher%3A%2F%2Fspinaltap.micro.umn.edu%2F00%2FWeather%2FCalifornia%2FLos%20Angeles%23ocean"
+ * xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), false())
+ * returns "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles%23ocean"
+ *
+ */
+static void
+xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr str;
+ int escape_reserved;
+ xmlBufferPtr target;
+ xmlChar *cptr;
+ xmlChar escape[4];
+
+ CHECK_ARITY(2);
+
+ escape_reserved = xmlXPathPopBoolean(ctxt);
+
+ CAST_TO_STRING;
+ str = valuePop(ctxt);
+
+ target = xmlBufferCreate();
+
+ escape[0] = '%';
+ escape[3] = 0;
+
+ if (target) {
+ for (cptr = str->stringval; *cptr; cptr++) {
+ if ((*cptr >= 'A' && *cptr <= 'Z') ||
+ (*cptr >= 'a' && *cptr <= 'z') ||
+ (*cptr >= '0' && *cptr <= '9') ||
+ *cptr == '-' || *cptr == '_' || *cptr == '.' ||
+ *cptr == '!' || *cptr == '~' || *cptr == '*' ||
+ *cptr == '\''|| *cptr == '(' || *cptr == ')' ||
+ (*cptr == '%' &&
+ ((cptr[1] >= 'A' && cptr[1] <= 'F') ||
+ (cptr[1] >= 'a' && cptr[1] <= 'f') ||
+ (cptr[1] >= '0' && cptr[1] <= '9')) &&
+ ((cptr[2] >= 'A' && cptr[2] <= 'F') ||
+ (cptr[2] >= 'a' && cptr[2] <= 'f') ||
+ (cptr[2] >= '0' && cptr[2] <= '9'))) ||
+ (!escape_reserved &&
+ (*cptr == ';' || *cptr == '/' || *cptr == '?' ||
+ *cptr == ':' || *cptr == '@' || *cptr == '&' ||
+ *cptr == '=' || *cptr == '+' || *cptr == '$' ||
+ *cptr == ','))) {
+ xmlBufferAdd(target, cptr, 1);
+ } else {
+ if ((*cptr >> 4) < 10)
+ escape[1] = '0' + (*cptr >> 4);
+ else
+ escape[1] = 'A' - 10 + (*cptr >> 4);
+ if ((*cptr & 0xF) < 10)
+ escape[2] = '0' + (*cptr & 0xF);
+ else
+ escape[2] = 'A' - 10 + (*cptr & 0xF);
+
+ xmlBufferAdd(target, &escape[0], 3);
+ }
+ }
+ }
+ valuePush(ctxt, xmlXPathNewString(xmlBufferContent(target)));
+ xmlBufferFree(target);
+ xmlXPathFreeObject(str);
+}
+
+/**
+ * xmlXPathRegisterAllFunctions:
+ * @ctxt: the XPath context
+ *
+ * Registers all default XPath functions in this context
+ */
+void
+xmlXPathRegisterAllFunctions(xmlXPathContextPtr ctxt)
+{
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"boolean",
+ xmlXPathBooleanFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"ceiling",
+ xmlXPathCeilingFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"count",
+ xmlXPathCountFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"concat",
+ xmlXPathConcatFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"contains",
+ xmlXPathContainsFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"id",
+ xmlXPathIdFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"false",
+ xmlXPathFalseFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"floor",
+ xmlXPathFloorFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"last",
+ xmlXPathLastFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"lang",
+ xmlXPathLangFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"local-name",
+ xmlXPathLocalNameFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"not",
+ xmlXPathNotFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"name",
+ xmlXPathNameFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"namespace-uri",
+ xmlXPathNamespaceURIFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"normalize-space",
+ xmlXPathNormalizeFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"number",
+ xmlXPathNumberFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"position",
+ xmlXPathPositionFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"round",
+ xmlXPathRoundFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"string",
+ xmlXPathStringFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"string-length",
+ xmlXPathStringLengthFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"starts-with",
+ xmlXPathStartsWithFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"substring",
+ xmlXPathSubstringFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"substring-before",
+ xmlXPathSubstringBeforeFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"substring-after",
+ xmlXPathSubstringAfterFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"sum",
+ xmlXPathSumFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"true",
+ xmlXPathTrueFunction);
+ xmlXPathRegisterFunc(ctxt, (const xmlChar *)"translate",
+ xmlXPathTranslateFunction);
+
+ xmlXPathRegisterFuncNS(ctxt, (const xmlChar *)"escape-uri",
+ (const xmlChar *)"http://www.w3.org/2002/08/xquery-functions",
+ xmlXPathEscapeUriFunction);
+}
+
+#endif /* LIBXML_XPATH_ENABLED */
diff --git a/xpointer.c b/xpointer.c
new file mode 100644
index 0000000..7f014de
--- /dev/null
+++ b/xpointer.c
@@ -0,0 +1,2999 @@
+/*
+ * xpointer.c : Code to handle XML Pointer
+ *
+ * Base implementation was made accordingly to
+ * W3C Candidate Recommendation 7 June 2000
+ * http://www.w3.org/TR/2000/CR-xptr-20000607
+ *
+ * Added support for the element() scheme described in:
+ * W3C Proposed Recommendation 13 November 2002
+ * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+/*
+ * TODO: better handling of error cases, the full expression should
+ * be parsed beforehand instead of a progressive evaluation
+ * TODO: Access into entities references are not supported now ...
+ * need a start to be able to pop out of entities refs since
+ * parent is the endity declaration, not the ref.
+ */
+
+#include <string.h>
+#include <libxml/xpointer.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parserInternals.h>
+#include <libxml/uri.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+#include <libxml/xmlerror.h>
+#include <libxml/globals.h>
+
+#ifdef LIBXML_XPTR_ENABLED
+
+/* Add support of the xmlns() xpointer scheme to initialize the namespaces */
+#define XPTR_XMLNS_SCHEME
+
+/* #define DEBUG_RANGES */
+#ifdef DEBUG_RANGES
+#ifdef LIBXML_DEBUG_ENABLED
+#include <libxml/debugXML.h>
+#endif
+#endif
+
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+#define STRANGE \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Internal error at %s:%d\n", \
+ __FILE__, __LINE__);
+
+/************************************************************************
+ * *
+ * Some factorized error routines *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPtrErrMemory:
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlXPtrErrMemory(const char *extra)
+{
+ __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_XPOINTER,
+ XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0, extra,
+ NULL, NULL, 0, 0,
+ "Memory allocation failed : %s\n", extra);
+}
+
+/**
+ * xmlXPtrErr:
+ * @ctxt: an XPTR evaluation context
+ * @extra: extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlXPtrErr(xmlXPathParserContextPtr ctxt, int error,
+ const char * msg, const xmlChar *extra)
+{
+ if (ctxt != NULL)
+ ctxt->error = error;
+ if ((ctxt == NULL) || (ctxt->context == NULL)) {
+ __xmlRaiseError(NULL, NULL, NULL,
+ NULL, NULL, XML_FROM_XPOINTER, error,
+ XML_ERR_ERROR, NULL, 0,
+ (const char *) extra, NULL, NULL, 0, 0,
+ msg, extra);
+ return;
+ }
+ ctxt->context->lastError.domain = XML_FROM_XPOINTER;
+ ctxt->context->lastError.code = error;
+ ctxt->context->lastError.level = XML_ERR_ERROR;
+ ctxt->context->lastError.str1 = (char *) xmlStrdup(ctxt->base);
+ ctxt->context->lastError.int1 = ctxt->cur - ctxt->base;
+ ctxt->context->lastError.node = ctxt->context->debugNode;
+ if (ctxt->context->error != NULL) {
+ ctxt->context->error(ctxt->context->userData,
+ &ctxt->context->lastError);
+ } else {
+ __xmlRaiseError(NULL, NULL, NULL,
+ NULL, ctxt->context->debugNode, XML_FROM_XPOINTER,
+ error, XML_ERR_ERROR, NULL, 0,
+ (const char *) extra, (const char *) ctxt->base, NULL,
+ ctxt->cur - ctxt->base, 0,
+ msg, extra);
+ }
+}
+
+/************************************************************************
+ * *
+ * A few helper functions for child sequences *
+ * *
+ ************************************************************************/
+/* xmlXPtrAdvanceNode is a private function, but used by xinclude.c */
+xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *level);
+/**
+ * xmlXPtrGetArity:
+ * @cur: the node
+ *
+ * Returns the number of child for an element, -1 in case of error
+ */
+static int
+xmlXPtrGetArity(xmlNodePtr cur) {
+ int i;
+ if (cur == NULL)
+ return(-1);
+ cur = cur->children;
+ for (i = 0;cur != NULL;cur = cur->next) {
+ if ((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE)) {
+ i++;
+ }
+ }
+ return(i);
+}
+
+/**
+ * xmlXPtrGetIndex:
+ * @cur: the node
+ *
+ * Returns the index of the node in its parent children list, -1
+ * in case of error
+ */
+static int
+xmlXPtrGetIndex(xmlNodePtr cur) {
+ int i;
+ if (cur == NULL)
+ return(-1);
+ for (i = 1;cur != NULL;cur = cur->prev) {
+ if ((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE)) {
+ i++;
+ }
+ }
+ return(i);
+}
+
+/**
+ * xmlXPtrGetNthChild:
+ * @cur: the node
+ * @no: the child number
+ *
+ * Returns the @no'th element child of @cur or NULL
+ */
+static xmlNodePtr
+xmlXPtrGetNthChild(xmlNodePtr cur, int no) {
+ int i;
+ if (cur == NULL)
+ return(cur);
+ cur = cur->children;
+ for (i = 0;i <= no;cur = cur->next) {
+ if (cur == NULL)
+ return(cur);
+ if ((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE)) {
+ i++;
+ if (i == no)
+ break;
+ }
+ }
+ return(cur);
+}
+
+/************************************************************************
+ * *
+ * Handling of XPointer specific types *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPtrCmpPoints:
+ * @node1: the first node
+ * @index1: the first index
+ * @node2: the second node
+ * @index2: the second index
+ *
+ * Compare two points w.r.t document order
+ *
+ * Returns -2 in case of error 1 if first point < second point, 0 if
+ * that's the same point, -1 otherwise
+ */
+static int
+xmlXPtrCmpPoints(xmlNodePtr node1, int index1, xmlNodePtr node2, int index2) {
+ if ((node1 == NULL) || (node2 == NULL))
+ return(-2);
+ /*
+ * a couple of optimizations which will avoid computations in most cases
+ */
+ if (node1 == node2) {
+ if (index1 < index2)
+ return(1);
+ if (index1 > index2)
+ return(-1);
+ return(0);
+ }
+ return(xmlXPathCmpNodes(node1, node2));
+}
+
+/**
+ * xmlXPtrNewPoint:
+ * @node: the xmlNodePtr
+ * @indx: the indx within the node
+ *
+ * Create a new xmlXPathObjectPtr of type point
+ *
+ * Returns the newly created object.
+ */
+static xmlXPathObjectPtr
+xmlXPtrNewPoint(xmlNodePtr node, int indx) {
+ xmlXPathObjectPtr ret;
+
+ if (node == NULL)
+ return(NULL);
+ if (indx < 0)
+ return(NULL);
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating point");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_POINT;
+ ret->user = (void *) node;
+ ret->index = indx;
+ return(ret);
+}
+
+/**
+ * xmlXPtrRangeCheckOrder:
+ * @range: an object range
+ *
+ * Make sure the points in the range are in the right order
+ */
+static void
+xmlXPtrRangeCheckOrder(xmlXPathObjectPtr range) {
+ int tmp;
+ xmlNodePtr tmp2;
+ if (range == NULL)
+ return;
+ if (range->type != XPATH_RANGE)
+ return;
+ if (range->user2 == NULL)
+ return;
+ tmp = xmlXPtrCmpPoints(range->user, range->index,
+ range->user2, range->index2);
+ if (tmp == -1) {
+ tmp2 = range->user;
+ range->user = range->user2;
+ range->user2 = tmp2;
+ tmp = range->index;
+ range->index = range->index2;
+ range->index2 = tmp;
+ }
+}
+
+/**
+ * xmlXPtrRangesEqual:
+ * @range1: the first range
+ * @range2: the second range
+ *
+ * Compare two ranges
+ *
+ * Returns 1 if equal, 0 otherwise
+ */
+static int
+xmlXPtrRangesEqual(xmlXPathObjectPtr range1, xmlXPathObjectPtr range2) {
+ if (range1 == range2)
+ return(1);
+ if ((range1 == NULL) || (range2 == NULL))
+ return(0);
+ if (range1->type != range2->type)
+ return(0);
+ if (range1->type != XPATH_RANGE)
+ return(0);
+ if (range1->user != range2->user)
+ return(0);
+ if (range1->index != range2->index)
+ return(0);
+ if (range1->user2 != range2->user2)
+ return(0);
+ if (range1->index2 != range2->index2)
+ return(0);
+ return(1);
+}
+
+/**
+ * xmlXPtrNewRange:
+ * @start: the starting node
+ * @startindex: the start index
+ * @end: the ending point
+ * @endindex: the ending index
+ *
+ * Create a new xmlXPathObjectPtr of type range
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrNewRange(xmlNodePtr start, int startindex,
+ xmlNodePtr end, int endindex) {
+ xmlXPathObjectPtr ret;
+
+ if (start == NULL)
+ return(NULL);
+ if (end == NULL)
+ return(NULL);
+ if (startindex < 0)
+ return(NULL);
+ if (endindex < 0)
+ return(NULL);
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating range");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_RANGE;
+ ret->user = start;
+ ret->index = startindex;
+ ret->user2 = end;
+ ret->index2 = endindex;
+ xmlXPtrRangeCheckOrder(ret);
+ return(ret);
+}
+
+/**
+ * xmlXPtrNewRangePoints:
+ * @start: the starting point
+ * @end: the ending point
+ *
+ * Create a new xmlXPathObjectPtr of type range using 2 Points
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrNewRangePoints(xmlXPathObjectPtr start, xmlXPathObjectPtr end) {
+ xmlXPathObjectPtr ret;
+
+ if (start == NULL)
+ return(NULL);
+ if (end == NULL)
+ return(NULL);
+ if (start->type != XPATH_POINT)
+ return(NULL);
+ if (end->type != XPATH_POINT)
+ return(NULL);
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating range");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_RANGE;
+ ret->user = start->user;
+ ret->index = start->index;
+ ret->user2 = end->user;
+ ret->index2 = end->index;
+ xmlXPtrRangeCheckOrder(ret);
+ return(ret);
+}
+
+/**
+ * xmlXPtrNewRangePointNode:
+ * @start: the starting point
+ * @end: the ending node
+ *
+ * Create a new xmlXPathObjectPtr of type range from a point to a node
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrNewRangePointNode(xmlXPathObjectPtr start, xmlNodePtr end) {
+ xmlXPathObjectPtr ret;
+
+ if (start == NULL)
+ return(NULL);
+ if (end == NULL)
+ return(NULL);
+ if (start->type != XPATH_POINT)
+ return(NULL);
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating range");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_RANGE;
+ ret->user = start->user;
+ ret->index = start->index;
+ ret->user2 = end;
+ ret->index2 = -1;
+ xmlXPtrRangeCheckOrder(ret);
+ return(ret);
+}
+
+/**
+ * xmlXPtrNewRangeNodePoint:
+ * @start: the starting node
+ * @end: the ending point
+ *
+ * Create a new xmlXPathObjectPtr of type range from a node to a point
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrNewRangeNodePoint(xmlNodePtr start, xmlXPathObjectPtr end) {
+ xmlXPathObjectPtr ret;
+
+ if (start == NULL)
+ return(NULL);
+ if (end == NULL)
+ return(NULL);
+ if (start->type != XPATH_POINT)
+ return(NULL);
+ if (end->type != XPATH_POINT)
+ return(NULL);
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating range");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_RANGE;
+ ret->user = start;
+ ret->index = -1;
+ ret->user2 = end->user;
+ ret->index2 = end->index;
+ xmlXPtrRangeCheckOrder(ret);
+ return(ret);
+}
+
+/**
+ * xmlXPtrNewRangeNodes:
+ * @start: the starting node
+ * @end: the ending node
+ *
+ * Create a new xmlXPathObjectPtr of type range using 2 nodes
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrNewRangeNodes(xmlNodePtr start, xmlNodePtr end) {
+ xmlXPathObjectPtr ret;
+
+ if (start == NULL)
+ return(NULL);
+ if (end == NULL)
+ return(NULL);
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating range");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_RANGE;
+ ret->user = start;
+ ret->index = -1;
+ ret->user2 = end;
+ ret->index2 = -1;
+ xmlXPtrRangeCheckOrder(ret);
+ return(ret);
+}
+
+/**
+ * xmlXPtrNewCollapsedRange:
+ * @start: the starting and ending node
+ *
+ * Create a new xmlXPathObjectPtr of type range using a single nodes
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrNewCollapsedRange(xmlNodePtr start) {
+ xmlXPathObjectPtr ret;
+
+ if (start == NULL)
+ return(NULL);
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating range");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_RANGE;
+ ret->user = start;
+ ret->index = -1;
+ ret->user2 = NULL;
+ ret->index2 = -1;
+ return(ret);
+}
+
+/**
+ * xmlXPtrNewRangeNodeObject:
+ * @start: the starting node
+ * @end: the ending object
+ *
+ * Create a new xmlXPathObjectPtr of type range from a not to an object
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrNewRangeNodeObject(xmlNodePtr start, xmlXPathObjectPtr end) {
+ xmlXPathObjectPtr ret;
+
+ if (start == NULL)
+ return(NULL);
+ if (end == NULL)
+ return(NULL);
+ switch (end->type) {
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ break;
+ case XPATH_NODESET:
+ /*
+ * Empty set ...
+ */
+ if (end->nodesetval->nodeNr <= 0)
+ return(NULL);
+ break;
+ default:
+ TODO
+ return(NULL);
+ }
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating range");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_RANGE;
+ ret->user = start;
+ ret->index = -1;
+ switch (end->type) {
+ case XPATH_POINT:
+ ret->user2 = end->user;
+ ret->index2 = end->index;
+ break;
+ case XPATH_RANGE:
+ ret->user2 = end->user2;
+ ret->index2 = end->index2;
+ break;
+ case XPATH_NODESET: {
+ ret->user2 = end->nodesetval->nodeTab[end->nodesetval->nodeNr - 1];
+ ret->index2 = -1;
+ break;
+ }
+ default:
+ STRANGE
+ return(NULL);
+ }
+ xmlXPtrRangeCheckOrder(ret);
+ return(ret);
+}
+
+#define XML_RANGESET_DEFAULT 10
+
+/**
+ * xmlXPtrLocationSetCreate:
+ * @val: an initial xmlXPathObjectPtr, or NULL
+ *
+ * Create a new xmlLocationSetPtr of type double and of value @val
+ *
+ * Returns the newly created object.
+ */
+xmlLocationSetPtr
+xmlXPtrLocationSetCreate(xmlXPathObjectPtr val) {
+ xmlLocationSetPtr ret;
+
+ ret = (xmlLocationSetPtr) xmlMalloc(sizeof(xmlLocationSet));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating locationset");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlLocationSet));
+ if (val != NULL) {
+ ret->locTab = (xmlXPathObjectPtr *) xmlMalloc(XML_RANGESET_DEFAULT *
+ sizeof(xmlXPathObjectPtr));
+ if (ret->locTab == NULL) {
+ xmlXPtrErrMemory("allocating locationset");
+ xmlFree(ret);
+ return(NULL);
+ }
+ memset(ret->locTab, 0 ,
+ XML_RANGESET_DEFAULT * (size_t) sizeof(xmlXPathObjectPtr));
+ ret->locMax = XML_RANGESET_DEFAULT;
+ ret->locTab[ret->locNr++] = val;
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPtrLocationSetAdd:
+ * @cur: the initial range set
+ * @val: a new xmlXPathObjectPtr
+ *
+ * add a new xmlXPathObjectPtr to an existing LocationSet
+ * If the location already exist in the set @val is freed.
+ */
+void
+xmlXPtrLocationSetAdd(xmlLocationSetPtr cur, xmlXPathObjectPtr val) {
+ int i;
+
+ if (val == NULL) return;
+
+ /*
+ * check against doublons
+ */
+ for (i = 0;i < cur->locNr;i++) {
+ if (xmlXPtrRangesEqual(cur->locTab[i], val)) {
+ xmlXPathFreeObject(val);
+ return;
+ }
+ }
+
+ /*
+ * grow the locTab if needed
+ */
+ if (cur->locMax == 0) {
+ cur->locTab = (xmlXPathObjectPtr *) xmlMalloc(XML_RANGESET_DEFAULT *
+ sizeof(xmlXPathObjectPtr));
+ if (cur->locTab == NULL) {
+ xmlXPtrErrMemory("adding location to set");
+ return;
+ }
+ memset(cur->locTab, 0 ,
+ XML_RANGESET_DEFAULT * (size_t) sizeof(xmlXPathObjectPtr));
+ cur->locMax = XML_RANGESET_DEFAULT;
+ } else if (cur->locNr == cur->locMax) {
+ xmlXPathObjectPtr *temp;
+
+ cur->locMax *= 2;
+ temp = (xmlXPathObjectPtr *) xmlRealloc(cur->locTab, cur->locMax *
+ sizeof(xmlXPathObjectPtr));
+ if (temp == NULL) {
+ xmlXPtrErrMemory("adding location to set");
+ return;
+ }
+ cur->locTab = temp;
+ }
+ cur->locTab[cur->locNr++] = val;
+}
+
+/**
+ * xmlXPtrLocationSetMerge:
+ * @val1: the first LocationSet
+ * @val2: the second LocationSet
+ *
+ * Merges two rangesets, all ranges from @val2 are added to @val1
+ *
+ * Returns val1 once extended or NULL in case of error.
+ */
+xmlLocationSetPtr
+xmlXPtrLocationSetMerge(xmlLocationSetPtr val1, xmlLocationSetPtr val2) {
+ int i;
+
+ if (val1 == NULL) return(NULL);
+ if (val2 == NULL) return(val1);
+
+ /*
+ * !!!!! this can be optimized a lot, knowing that both
+ * val1 and val2 already have unicity of their values.
+ */
+
+ for (i = 0;i < val2->locNr;i++)
+ xmlXPtrLocationSetAdd(val1, val2->locTab[i]);
+
+ return(val1);
+}
+
+/**
+ * xmlXPtrLocationSetDel:
+ * @cur: the initial range set
+ * @val: an xmlXPathObjectPtr
+ *
+ * Removes an xmlXPathObjectPtr from an existing LocationSet
+ */
+void
+xmlXPtrLocationSetDel(xmlLocationSetPtr cur, xmlXPathObjectPtr val) {
+ int i;
+
+ if (cur == NULL) return;
+ if (val == NULL) return;
+
+ /*
+ * check against doublons
+ */
+ for (i = 0;i < cur->locNr;i++)
+ if (cur->locTab[i] == val) break;
+
+ if (i >= cur->locNr) {
+#ifdef DEBUG
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlXPtrLocationSetDel: Range wasn't found in RangeList\n");
+#endif
+ return;
+ }
+ cur->locNr--;
+ for (;i < cur->locNr;i++)
+ cur->locTab[i] = cur->locTab[i + 1];
+ cur->locTab[cur->locNr] = NULL;
+}
+
+/**
+ * xmlXPtrLocationSetRemove:
+ * @cur: the initial range set
+ * @val: the index to remove
+ *
+ * Removes an entry from an existing LocationSet list.
+ */
+void
+xmlXPtrLocationSetRemove(xmlLocationSetPtr cur, int val) {
+ if (cur == NULL) return;
+ if (val >= cur->locNr) return;
+ cur->locNr--;
+ for (;val < cur->locNr;val++)
+ cur->locTab[val] = cur->locTab[val + 1];
+ cur->locTab[cur->locNr] = NULL;
+}
+
+/**
+ * xmlXPtrFreeLocationSet:
+ * @obj: the xmlLocationSetPtr to free
+ *
+ * Free the LocationSet compound (not the actual ranges !).
+ */
+void
+xmlXPtrFreeLocationSet(xmlLocationSetPtr obj) {
+ int i;
+
+ if (obj == NULL) return;
+ if (obj->locTab != NULL) {
+ for (i = 0;i < obj->locNr; i++) {
+ xmlXPathFreeObject(obj->locTab[i]);
+ }
+ xmlFree(obj->locTab);
+ }
+ xmlFree(obj);
+}
+
+/**
+ * xmlXPtrNewLocationSetNodes:
+ * @start: the start NodePtr value
+ * @end: the end NodePtr value or NULL
+ *
+ * Create a new xmlXPathObjectPtr of type LocationSet and initialize
+ * it with the single range made of the two nodes @start and @end
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrNewLocationSetNodes(xmlNodePtr start, xmlNodePtr end) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating locationset");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_LOCATIONSET;
+ if (end == NULL)
+ ret->user = xmlXPtrLocationSetCreate(xmlXPtrNewCollapsedRange(start));
+ else
+ ret->user = xmlXPtrLocationSetCreate(xmlXPtrNewRangeNodes(start,end));
+ return(ret);
+}
+
+/**
+ * xmlXPtrNewLocationSetNodeSet:
+ * @set: a node set
+ *
+ * Create a new xmlXPathObjectPtr of type LocationSet and initialize
+ * it with all the nodes from @set
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating locationset");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_LOCATIONSET;
+ if (set != NULL) {
+ int i;
+ xmlLocationSetPtr newset;
+
+ newset = xmlXPtrLocationSetCreate(NULL);
+ if (newset == NULL)
+ return(ret);
+
+ for (i = 0;i < set->nodeNr;i++)
+ xmlXPtrLocationSetAdd(newset,
+ xmlXPtrNewCollapsedRange(set->nodeTab[i]));
+
+ ret->user = (void *) newset;
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPtrWrapLocationSet:
+ * @val: the LocationSet value
+ *
+ * Wrap the LocationSet @val in a new xmlXPathObjectPtr
+ *
+ * Returns the newly created object.
+ */
+xmlXPathObjectPtr
+xmlXPtrWrapLocationSet(xmlLocationSetPtr val) {
+ xmlXPathObjectPtr ret;
+
+ ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
+ if (ret == NULL) {
+ xmlXPtrErrMemory("allocating locationset");
+ return(NULL);
+ }
+ memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
+ ret->type = XPATH_LOCATIONSET;
+ ret->user = (void *) val;
+ return(ret);
+}
+
+/************************************************************************
+ * *
+ * The parser *
+ * *
+ ************************************************************************/
+
+static void xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name);
+
+/*
+ * Macros for accessing the content. Those should be used only by the parser,
+ * and not exported.
+ *
+ * Dirty macros, i.e. one need to make assumption on the context to use them
+ *
+ * CUR_PTR return the current pointer to the xmlChar to be parsed.
+ * CUR returns the current xmlChar value, i.e. a 8 bit value
+ * in ISO-Latin or UTF-8.
+ * This should be used internally by the parser
+ * only to compare to ASCII values otherwise it would break when
+ * running with UTF-8 encoding.
+ * NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only
+ * to compare on ASCII based substring.
+ * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
+ * strings within the parser.
+ * CURRENT Returns the current char value, with the full decoding of
+ * UTF-8 if we are using this mode. It returns an int.
+ * NEXT Skip to the next character, this does the proper decoding
+ * in UTF-8 mode. It also pop-up unfinished entities on the fly.
+ * It returns the pointer to the current xmlChar.
+ */
+
+#define CUR (*ctxt->cur)
+#define SKIP(val) ctxt->cur += (val)
+#define NXT(val) ctxt->cur[(val)]
+#define CUR_PTR ctxt->cur
+
+#define SKIP_BLANKS \
+ while (IS_BLANK_CH(*(ctxt->cur))) NEXT
+
+#define CURRENT (*ctxt->cur)
+#define NEXT ((*ctxt->cur) ? ctxt->cur++: ctxt->cur)
+
+/*
+ * xmlXPtrGetChildNo:
+ * @ctxt: the XPointer Parser context
+ * @index: the child number
+ *
+ * Move the current node of the nodeset on the stack to the
+ * given child if found
+ */
+static void
+xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int indx) {
+ xmlNodePtr cur = NULL;
+ xmlXPathObjectPtr obj;
+ xmlNodeSetPtr oldset;
+
+ CHECK_TYPE(XPATH_NODESET);
+ obj = valuePop(ctxt);
+ oldset = obj->nodesetval;
+ if ((indx <= 0) || (oldset == NULL) || (oldset->nodeNr != 1)) {
+ xmlXPathFreeObject(obj);
+ valuePush(ctxt, xmlXPathNewNodeSet(NULL));
+ return;
+ }
+ cur = xmlXPtrGetNthChild(oldset->nodeTab[0], indx);
+ if (cur == NULL) {
+ xmlXPathFreeObject(obj);
+ valuePush(ctxt, xmlXPathNewNodeSet(NULL));
+ return;
+ }
+ oldset->nodeTab[0] = cur;
+ valuePush(ctxt, obj);
+}
+
+/**
+ * xmlXPtrEvalXPtrPart:
+ * @ctxt: the XPointer Parser context
+ * @name: the preparsed Scheme for the XPtrPart
+ *
+ * XPtrPart ::= 'xpointer' '(' XPtrExpr ')'
+ * | Scheme '(' SchemeSpecificExpr ')'
+ *
+ * Scheme ::= NCName - 'xpointer' [VC: Non-XPointer schemes]
+ *
+ * SchemeSpecificExpr ::= StringWithBalancedParens
+ *
+ * StringWithBalancedParens ::=
+ * [^()]* ('(' StringWithBalancedParens ')' [^()]*)*
+ * [VC: Parenthesis escaping]
+ *
+ * XPtrExpr ::= Expr [VC: Parenthesis escaping]
+ *
+ * VC: Parenthesis escaping:
+ * The end of an XPointer part is signaled by the right parenthesis ")"
+ * character that is balanced with the left parenthesis "(" character
+ * that began the part. Any unbalanced parenthesis character inside the
+ * expression, even within literals, must be escaped with a circumflex (^)
+ * character preceding it. If the expression contains any literal
+ * occurrences of the circumflex, each must be escaped with an additional
+ * circumflex (that is, ^^). If the unescaped parentheses in the expression
+ * are not balanced, a syntax error results.
+ *
+ * Parse and evaluate an XPtrPart. Basically it generates the unescaped
+ * string and if the scheme is 'xpointer' it will call the XPath interpreter.
+ *
+ * TODO: there is no new scheme registration mechanism
+ */
+
+static void
+xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xmlChar *name) {
+ xmlChar *buffer, *cur;
+ int len;
+ int level;
+
+ if (name == NULL)
+ name = xmlXPathParseName(ctxt);
+ if (name == NULL)
+ XP_ERROR(XPATH_EXPR_ERROR);
+
+ if (CUR != '(')
+ XP_ERROR(XPATH_EXPR_ERROR);
+ NEXT;
+ level = 1;
+
+ len = xmlStrlen(ctxt->cur);
+ len++;
+ buffer = (xmlChar *) xmlMallocAtomic(len * sizeof (xmlChar));
+ if (buffer == NULL) {
+ xmlXPtrErrMemory("allocating buffer");
+ return;
+ }
+
+ cur = buffer;
+ while (CUR != 0) {
+ if (CUR == ')') {
+ level--;
+ if (level == 0) {
+ NEXT;
+ break;
+ }
+ *cur++ = CUR;
+ } else if (CUR == '(') {
+ level++;
+ *cur++ = CUR;
+ } else if (CUR == '^') {
+ NEXT;
+ if ((CUR == ')') || (CUR == '(') || (CUR == '^')) {
+ *cur++ = CUR;
+ } else {
+ *cur++ = '^';
+ *cur++ = CUR;
+ }
+ } else {
+ *cur++ = CUR;
+ }
+ NEXT;
+ }
+ *cur = 0;
+
+ if ((level != 0) && (CUR == 0)) {
+ xmlFree(buffer);
+ XP_ERROR(XPTR_SYNTAX_ERROR);
+ }
+
+ if (xmlStrEqual(name, (xmlChar *) "xpointer")) {
+ const xmlChar *left = CUR_PTR;
+
+ CUR_PTR = buffer;
+ /*
+ * To evaluate an xpointer scheme element (4.3) we need:
+ * context initialized to the root
+ * context position initalized to 1
+ * context size initialized to 1
+ */
+ ctxt->context->node = (xmlNodePtr)ctxt->context->doc;
+ ctxt->context->proximityPosition = 1;
+ ctxt->context->contextSize = 1;
+ xmlXPathEvalExpr(ctxt);
+ CUR_PTR=left;
+ } else if (xmlStrEqual(name, (xmlChar *) "element")) {
+ const xmlChar *left = CUR_PTR;
+ xmlChar *name2;
+
+ CUR_PTR = buffer;
+ if (buffer[0] == '/') {
+ xmlXPathRoot(ctxt);
+ xmlXPtrEvalChildSeq(ctxt, NULL);
+ } else {
+ name2 = xmlXPathParseName(ctxt);
+ if (name2 == NULL) {
+ CUR_PTR = left;
+ xmlFree(buffer);
+ XP_ERROR(XPATH_EXPR_ERROR);
+ }
+ xmlXPtrEvalChildSeq(ctxt, name2);
+ }
+ CUR_PTR = left;
+#ifdef XPTR_XMLNS_SCHEME
+ } else if (xmlStrEqual(name, (xmlChar *) "xmlns")) {
+ const xmlChar *left = CUR_PTR;
+ xmlChar *prefix;
+ xmlChar *URI;
+ xmlURIPtr value;
+
+ CUR_PTR = buffer;
+ prefix = xmlXPathParseNCName(ctxt);
+ if (prefix == NULL) {
+ xmlFree(buffer);
+ xmlFree(name);
+ XP_ERROR(XPTR_SYNTAX_ERROR);
+ }
+ SKIP_BLANKS;
+ if (CUR != '=') {
+ xmlFree(prefix);
+ xmlFree(buffer);
+ xmlFree(name);
+ XP_ERROR(XPTR_SYNTAX_ERROR);
+ }
+ NEXT;
+ SKIP_BLANKS;
+ /* @@ check escaping in the XPointer WD */
+
+ value = xmlParseURI((const char *)ctxt->cur);
+ if (value == NULL) {
+ xmlFree(prefix);
+ xmlFree(buffer);
+ xmlFree(name);
+ XP_ERROR(XPTR_SYNTAX_ERROR);
+ }
+ URI = xmlSaveUri(value);
+ xmlFreeURI(value);
+ if (URI == NULL) {
+ xmlFree(prefix);
+ xmlFree(buffer);
+ xmlFree(name);
+ XP_ERROR(XPATH_MEMORY_ERROR);
+ }
+
+ xmlXPathRegisterNs(ctxt->context, prefix, URI);
+ CUR_PTR = left;
+ xmlFree(URI);
+ xmlFree(prefix);
+#endif /* XPTR_XMLNS_SCHEME */
+ } else {
+ xmlXPtrErr(ctxt, XML_XPTR_UNKNOWN_SCHEME,
+ "unsupported scheme '%s'\n", name);
+ }
+ xmlFree(buffer);
+ xmlFree(name);
+}
+
+/**
+ * xmlXPtrEvalFullXPtr:
+ * @ctxt: the XPointer Parser context
+ * @name: the preparsed Scheme for the first XPtrPart
+ *
+ * FullXPtr ::= XPtrPart (S? XPtrPart)*
+ *
+ * As the specs says:
+ * -----------
+ * When multiple XPtrParts are provided, they must be evaluated in
+ * left-to-right order. If evaluation of one part fails, the nexti
+ * is evaluated. The following conditions cause XPointer part failure:
+ *
+ * - An unknown scheme
+ * - A scheme that does not locate any sub-resource present in the resource
+ * - A scheme that is not applicable to the media type of the resource
+ *
+ * The XPointer application must consume a failed XPointer part and
+ * attempt to evaluate the next one, if any. The result of the first
+ * XPointer part whose evaluation succeeds is taken to be the fragment
+ * located by the XPointer as a whole. If all the parts fail, the result
+ * for the XPointer as a whole is a sub-resource error.
+ * -----------
+ *
+ * Parse and evaluate a Full XPtr i.e. possibly a cascade of XPath based
+ * expressions or other schemes.
+ */
+static void
+xmlXPtrEvalFullXPtr(xmlXPathParserContextPtr ctxt, xmlChar *name) {
+ if (name == NULL)
+ name = xmlXPathParseName(ctxt);
+ if (name == NULL)
+ XP_ERROR(XPATH_EXPR_ERROR);
+ while (name != NULL) {
+ xmlXPtrEvalXPtrPart(ctxt, name);
+
+ /* in case of syntax error, break here */
+ if (ctxt->error != XPATH_EXPRESSION_OK)
+ return;
+
+ /*
+ * If the returned value is a non-empty nodeset
+ * or location set, return here.
+ */
+ if (ctxt->value != NULL) {
+ xmlXPathObjectPtr obj = ctxt->value;
+
+ switch (obj->type) {
+ case XPATH_LOCATIONSET: {
+ xmlLocationSetPtr loc = ctxt->value->user;
+ if ((loc != NULL) && (loc->locNr > 0))
+ return;
+ break;
+ }
+ case XPATH_NODESET: {
+ xmlNodeSetPtr loc = ctxt->value->nodesetval;
+ if ((loc != NULL) && (loc->nodeNr > 0))
+ return;
+ break;
+ }
+ default:
+ break;
+ }
+
+ /*
+ * Evaluating to improper values is equivalent to
+ * a sub-resource error, clean-up the stack
+ */
+ do {
+ obj = valuePop(ctxt);
+ if (obj != NULL) {
+ xmlXPathFreeObject(obj);
+ }
+ } while (obj != NULL);
+ }
+
+ /*
+ * Is there another XPointer part.
+ */
+ SKIP_BLANKS;
+ name = xmlXPathParseName(ctxt);
+ }
+}
+
+/**
+ * xmlXPtrEvalChildSeq:
+ * @ctxt: the XPointer Parser context
+ * @name: a possible ID name of the child sequence
+ *
+ * ChildSeq ::= '/1' ('/' [0-9]*)*
+ * | Name ('/' [0-9]*)+
+ *
+ * Parse and evaluate a Child Sequence. This routine also handle the
+ * case of a Bare Name used to get a document ID.
+ */
+static void
+xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name) {
+ /*
+ * XPointer don't allow by syntax to address in mutirooted trees
+ * this might prove useful in some cases, warn about it.
+ */
+ if ((name == NULL) && (CUR == '/') && (NXT(1) != '1')) {
+ xmlXPtrErr(ctxt, XML_XPTR_CHILDSEQ_START,
+ "warning: ChildSeq not starting by /1\n", NULL);
+ }
+
+ if (name != NULL) {
+ valuePush(ctxt, xmlXPathNewString(name));
+ xmlFree(name);
+ xmlXPathIdFunction(ctxt, 1);
+ CHECK_ERROR;
+ }
+
+ while (CUR == '/') {
+ int child = 0;
+ NEXT;
+
+ while ((CUR >= '0') && (CUR <= '9')) {
+ child = child * 10 + (CUR - '0');
+ NEXT;
+ }
+ xmlXPtrGetChildNo(ctxt, child);
+ }
+}
+
+
+/**
+ * xmlXPtrEvalXPointer:
+ * @ctxt: the XPointer Parser context
+ *
+ * XPointer ::= Name
+ * | ChildSeq
+ * | FullXPtr
+ *
+ * Parse and evaluate an XPointer
+ */
+static void
+xmlXPtrEvalXPointer(xmlXPathParserContextPtr ctxt) {
+ if (ctxt->valueTab == NULL) {
+ /* Allocate the value stack */
+ ctxt->valueTab = (xmlXPathObjectPtr *)
+ xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
+ if (ctxt->valueTab == NULL) {
+ xmlXPtrErrMemory("allocating evaluation context");
+ return;
+ }
+ ctxt->valueNr = 0;
+ ctxt->valueMax = 10;
+ ctxt->value = NULL;
+ }
+ SKIP_BLANKS;
+ if (CUR == '/') {
+ xmlXPathRoot(ctxt);
+ xmlXPtrEvalChildSeq(ctxt, NULL);
+ } else {
+ xmlChar *name;
+
+ name = xmlXPathParseName(ctxt);
+ if (name == NULL)
+ XP_ERROR(XPATH_EXPR_ERROR);
+ if (CUR == '(') {
+ xmlXPtrEvalFullXPtr(ctxt, name);
+ /* Short evaluation */
+ return;
+ } else {
+ /* this handle both Bare Names and Child Sequences */
+ xmlXPtrEvalChildSeq(ctxt, name);
+ }
+ }
+ SKIP_BLANKS;
+ if (CUR != 0)
+ XP_ERROR(XPATH_EXPR_ERROR);
+}
+
+
+/************************************************************************
+ * *
+ * General routines *
+ * *
+ ************************************************************************/
+
+void xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs);
+void xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs);
+void xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs);
+void xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs);
+void xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs);
+void xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs);
+void xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs);
+
+/**
+ * xmlXPtrNewContext:
+ * @doc: the XML document
+ * @here: the node that directly contains the XPointer being evaluated or NULL
+ * @origin: the element from which a user or program initiated traversal of
+ * the link, or NULL.
+ *
+ * Create a new XPointer context
+ *
+ * Returns the xmlXPathContext just allocated.
+ */
+xmlXPathContextPtr
+xmlXPtrNewContext(xmlDocPtr doc, xmlNodePtr here, xmlNodePtr origin) {
+ xmlXPathContextPtr ret;
+
+ ret = xmlXPathNewContext(doc);
+ if (ret == NULL)
+ return(ret);
+ ret->xptr = 1;
+ ret->here = here;
+ ret->origin = origin;
+
+ xmlXPathRegisterFunc(ret, (xmlChar *)"range-to",
+ xmlXPtrRangeToFunction);
+ xmlXPathRegisterFunc(ret, (xmlChar *)"range",
+ xmlXPtrRangeFunction);
+ xmlXPathRegisterFunc(ret, (xmlChar *)"range-inside",
+ xmlXPtrRangeInsideFunction);
+ xmlXPathRegisterFunc(ret, (xmlChar *)"string-range",
+ xmlXPtrStringRangeFunction);
+ xmlXPathRegisterFunc(ret, (xmlChar *)"start-point",
+ xmlXPtrStartPointFunction);
+ xmlXPathRegisterFunc(ret, (xmlChar *)"end-point",
+ xmlXPtrEndPointFunction);
+ xmlXPathRegisterFunc(ret, (xmlChar *)"here",
+ xmlXPtrHereFunction);
+ xmlXPathRegisterFunc(ret, (xmlChar *)" origin",
+ xmlXPtrOriginFunction);
+
+ return(ret);
+}
+
+/**
+ * xmlXPtrEval:
+ * @str: the XPointer expression
+ * @ctx: the XPointer context
+ *
+ * Evaluate the XPath Location Path in the given context.
+ *
+ * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
+ * the caller has to free the object.
+ */
+xmlXPathObjectPtr
+xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx) {
+ xmlXPathParserContextPtr ctxt;
+ xmlXPathObjectPtr res = NULL, tmp;
+ xmlXPathObjectPtr init = NULL;
+ int stack = 0;
+
+ xmlXPathInit();
+
+ if ((ctx == NULL) || (str == NULL))
+ return(NULL);
+
+ ctxt = xmlXPathNewParserContext(str, ctx);
+ ctxt->xptr = 1;
+ xmlXPtrEvalXPointer(ctxt);
+
+ if ((ctxt->value != NULL) &&
+ (ctxt->value->type != XPATH_NODESET) &&
+ (ctxt->value->type != XPATH_LOCATIONSET)) {
+ xmlXPtrErr(ctxt, XML_XPTR_EVAL_FAILED,
+ "xmlXPtrEval: evaluation failed to return a node set\n",
+ NULL);
+ } else {
+ res = valuePop(ctxt);
+ }
+
+ do {
+ tmp = valuePop(ctxt);
+ if (tmp != NULL) {
+ if (tmp != init) {
+ if (tmp->type == XPATH_NODESET) {
+ /*
+ * Evaluation may push a root nodeset which is unused
+ */
+ xmlNodeSetPtr set;
+ set = tmp->nodesetval;
+ if ((set->nodeNr != 1) ||
+ (set->nodeTab[0] != (xmlNodePtr) ctx->doc))
+ stack++;
+ } else
+ stack++;
+ }
+ xmlXPathFreeObject(tmp);
+ }
+ } while (tmp != NULL);
+ if (stack != 0) {
+ xmlXPtrErr(ctxt, XML_XPTR_EXTRA_OBJECTS,
+ "xmlXPtrEval: object(s) left on the eval stack\n",
+ NULL);
+ }
+ if (ctxt->error != XPATH_EXPRESSION_OK) {
+ xmlXPathFreeObject(res);
+ res = NULL;
+ }
+
+ xmlXPathFreeParserContext(ctxt);
+ return(res);
+}
+
+/**
+ * xmlXPtrBuildRangeNodeList:
+ * @range: a range object
+ *
+ * Build a node list tree copy of the range
+ *
+ * Returns an xmlNodePtr list or NULL.
+ * the caller has to free the node tree.
+ */
+static xmlNodePtr
+xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
+ /* pointers to generated nodes */
+ xmlNodePtr list = NULL, last = NULL, parent = NULL, tmp;
+ /* pointers to traversal nodes */
+ xmlNodePtr start, cur, end;
+ int index1, index2;
+
+ if (range == NULL)
+ return(NULL);
+ if (range->type != XPATH_RANGE)
+ return(NULL);
+ start = (xmlNodePtr) range->user;
+
+ if (start == NULL)
+ return(NULL);
+ end = range->user2;
+ if (end == NULL)
+ return(xmlCopyNode(start, 1));
+
+ cur = start;
+ index1 = range->index;
+ index2 = range->index2;
+ while (cur != NULL) {
+ if (cur == end) {
+ if (cur->type == XML_TEXT_NODE) {
+ const xmlChar *content = cur->content;
+ int len;
+
+ if (content == NULL) {
+ tmp = xmlNewTextLen(NULL, 0);
+ } else {
+ len = index2;
+ if ((cur == start) && (index1 > 1)) {
+ content += (index1 - 1);
+ len -= (index1 - 1);
+ index1 = 0;
+ } else {
+ len = index2;
+ }
+ tmp = xmlNewTextLen(content, len);
+ }
+ /* single sub text node selection */
+ if (list == NULL)
+ return(tmp);
+ /* prune and return full set */
+ if (last != NULL)
+ xmlAddNextSibling(last, tmp);
+ else
+ xmlAddChild(parent, tmp);
+ return(list);
+ } else {
+ tmp = xmlCopyNode(cur, 0);
+ if (list == NULL)
+ list = tmp;
+ else {
+ if (last != NULL)
+ xmlAddNextSibling(last, tmp);
+ else
+ xmlAddChild(parent, tmp);
+ }
+ last = NULL;
+ parent = tmp;
+
+ if (index2 > 1) {
+ end = xmlXPtrGetNthChild(cur, index2 - 1);
+ index2 = 0;
+ }
+ if ((cur == start) && (index1 > 1)) {
+ cur = xmlXPtrGetNthChild(cur, index1 - 1);
+ index1 = 0;
+ } else {
+ cur = cur->children;
+ }
+ /*
+ * Now gather the remaining nodes from cur to end
+ */
+ continue; /* while */
+ }
+ } else if ((cur == start) &&
+ (list == NULL) /* looks superfluous but ... */ ) {
+ if ((cur->type == XML_TEXT_NODE) ||
+ (cur->type == XML_CDATA_SECTION_NODE)) {
+ const xmlChar *content = cur->content;
+
+ if (content == NULL) {
+ tmp = xmlNewTextLen(NULL, 0);
+ } else {
+ if (index1 > 1) {
+ content += (index1 - 1);
+ }
+ tmp = xmlNewText(content);
+ }
+ last = list = tmp;
+ } else {
+ if ((cur == start) && (index1 > 1)) {
+ tmp = xmlCopyNode(cur, 0);
+ list = tmp;
+ parent = tmp;
+ last = NULL;
+ cur = xmlXPtrGetNthChild(cur, index1 - 1);
+ index1 = 0;
+ /*
+ * Now gather the remaining nodes from cur to end
+ */
+ continue; /* while */
+ }
+ tmp = xmlCopyNode(cur, 1);
+ list = tmp;
+ parent = NULL;
+ last = tmp;
+ }
+ } else {
+ tmp = NULL;
+ switch (cur->type) {
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_NODE:
+ /* Do not copy DTD informations */
+ break;
+ case XML_ENTITY_DECL:
+ TODO /* handle crossing entities -> stack needed */
+ break;
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ /* don't consider it part of the tree content */
+ break;
+ case XML_ATTRIBUTE_NODE:
+ /* Humm, should not happen ! */
+ STRANGE
+ break;
+ default:
+ tmp = xmlCopyNode(cur, 1);
+ break;
+ }
+ if (tmp != NULL) {
+ if ((list == NULL) || ((last == NULL) && (parent == NULL))) {
+ STRANGE
+ return(NULL);
+ }
+ if (last != NULL)
+ xmlAddNextSibling(last, tmp);
+ else {
+ xmlAddChild(parent, tmp);
+ last = tmp;
+ }
+ }
+ }
+ /*
+ * Skip to next node in document order
+ */
+ if ((list == NULL) || ((last == NULL) && (parent == NULL))) {
+ STRANGE
+ return(NULL);
+ }
+ cur = xmlXPtrAdvanceNode(cur, NULL);
+ }
+ return(list);
+}
+
+/**
+ * xmlXPtrBuildNodeList:
+ * @obj: the XPointer result from the evaluation.
+ *
+ * Build a node list tree copy of the XPointer result.
+ * This will drop Attributes and Namespace declarations.
+ *
+ * Returns an xmlNodePtr list or NULL.
+ * the caller has to free the node tree.
+ */
+xmlNodePtr
+xmlXPtrBuildNodeList(xmlXPathObjectPtr obj) {
+ xmlNodePtr list = NULL, last = NULL;
+ int i;
+
+ if (obj == NULL)
+ return(NULL);
+ switch (obj->type) {
+ case XPATH_NODESET: {
+ xmlNodeSetPtr set = obj->nodesetval;
+ if (set == NULL)
+ return(NULL);
+ for (i = 0;i < set->nodeNr;i++) {
+ if (set->nodeTab[i] == NULL)
+ continue;
+ switch (set->nodeTab[i]->type) {
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ break;
+ case XML_ATTRIBUTE_NODE:
+ case XML_NAMESPACE_DECL:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ continue; /* for */
+ }
+ if (last == NULL)
+ list = last = xmlCopyNode(set->nodeTab[i], 1);
+ else {
+ xmlAddNextSibling(last, xmlCopyNode(set->nodeTab[i], 1));
+ if (last->next != NULL)
+ last = last->next;
+ }
+ }
+ break;
+ }
+ case XPATH_LOCATIONSET: {
+ xmlLocationSetPtr set = (xmlLocationSetPtr) obj->user;
+ if (set == NULL)
+ return(NULL);
+ for (i = 0;i < set->locNr;i++) {
+ if (last == NULL)
+ list = last = xmlXPtrBuildNodeList(set->locTab[i]);
+ else
+ xmlAddNextSibling(last,
+ xmlXPtrBuildNodeList(set->locTab[i]));
+ if (last != NULL) {
+ while (last->next != NULL)
+ last = last->next;
+ }
+ }
+ break;
+ }
+ case XPATH_RANGE:
+ return(xmlXPtrBuildRangeNodeList(obj));
+ case XPATH_POINT:
+ return(xmlCopyNode(obj->user, 0));
+ default:
+ break;
+ }
+ return(list);
+}
+
+/************************************************************************
+ * *
+ * XPointer functions *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlXPtrNbLocChildren:
+ * @node: an xmlNodePtr
+ *
+ * Count the number of location children of @node or the length of the
+ * string value in case of text/PI/Comments nodes
+ *
+ * Returns the number of location children
+ */
+static int
+xmlXPtrNbLocChildren(xmlNodePtr node) {
+ int ret = 0;
+ if (node == NULL)
+ return(-1);
+ switch (node->type) {
+ case XML_HTML_DOCUMENT_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_ELEMENT_NODE:
+ node = node->children;
+ while (node != NULL) {
+ if (node->type == XML_ELEMENT_NODE)
+ ret++;
+ node = node->next;
+ }
+ break;
+ case XML_ATTRIBUTE_NODE:
+ return(-1);
+
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ ret = xmlStrlen(node->content);
+ break;
+ default:
+ return(-1);
+ }
+ return(ret);
+}
+
+/**
+ * xmlXPtrHereFunction:
+ * @ctxt: the XPointer Parser context
+ * @nargs: the number of args
+ *
+ * Function implementing here() operation
+ * as described in 5.4.3
+ */
+void
+xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ CHECK_ARITY(0);
+
+ if (ctxt->context->here == NULL)
+ XP_ERROR(XPTR_SYNTAX_ERROR);
+
+ valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->here, NULL));
+}
+
+/**
+ * xmlXPtrOriginFunction:
+ * @ctxt: the XPointer Parser context
+ * @nargs: the number of args
+ *
+ * Function implementing origin() operation
+ * as described in 5.4.3
+ */
+void
+xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ CHECK_ARITY(0);
+
+ if (ctxt->context->origin == NULL)
+ XP_ERROR(XPTR_SYNTAX_ERROR);
+
+ valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->origin, NULL));
+}
+
+/**
+ * xmlXPtrStartPointFunction:
+ * @ctxt: the XPointer Parser context
+ * @nargs: the number of args
+ *
+ * Function implementing start-point() operation
+ * as described in 5.4.3
+ * ----------------
+ * location-set start-point(location-set)
+ *
+ * For each location x in the argument location-set, start-point adds a
+ * location of type point to the result location-set. That point represents
+ * the start point of location x and is determined by the following rules:
+ *
+ * - If x is of type point, the start point is x.
+ * - If x is of type range, the start point is the start point of x.
+ * - If x is of type root, element, text, comment, or processing instruction,
+ * - the container node of the start point is x and the index is 0.
+ * - If x is of type attribute or namespace, the function must signal a
+ * syntax error.
+ * ----------------
+ *
+ */
+void
+xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr tmp, obj, point;
+ xmlLocationSetPtr newset = NULL;
+ xmlLocationSetPtr oldset = NULL;
+
+ CHECK_ARITY(1);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_LOCATIONSET) &&
+ (ctxt->value->type != XPATH_NODESET)))
+ XP_ERROR(XPATH_INVALID_TYPE)
+
+ obj = valuePop(ctxt);
+ if (obj->type == XPATH_NODESET) {
+ /*
+ * First convert to a location set
+ */
+ tmp = xmlXPtrNewLocationSetNodeSet(obj->nodesetval);
+ xmlXPathFreeObject(obj);
+ obj = tmp;
+ }
+
+ newset = xmlXPtrLocationSetCreate(NULL);
+ if (newset == NULL) {
+ xmlXPathFreeObject(obj);
+ XP_ERROR(XPATH_MEMORY_ERROR);
+ }
+ oldset = (xmlLocationSetPtr) obj->user;
+ if (oldset != NULL) {
+ int i;
+
+ for (i = 0; i < oldset->locNr; i++) {
+ tmp = oldset->locTab[i];
+ if (tmp == NULL)
+ continue;
+ point = NULL;
+ switch (tmp->type) {
+ case XPATH_POINT:
+ point = xmlXPtrNewPoint(tmp->user, tmp->index);
+ break;
+ case XPATH_RANGE: {
+ xmlNodePtr node = tmp->user;
+ if (node != NULL) {
+ if (node->type == XML_ATTRIBUTE_NODE) {
+ /* TODO: Namespace Nodes ??? */
+ xmlXPathFreeObject(obj);
+ xmlXPtrFreeLocationSet(newset);
+ XP_ERROR(XPTR_SYNTAX_ERROR);
+ }
+ point = xmlXPtrNewPoint(node, tmp->index);
+ }
+ break;
+ }
+ default:
+ /*** Should we raise an error ?
+ xmlXPathFreeObject(obj);
+ xmlXPathFreeObject(newset);
+ XP_ERROR(XPATH_INVALID_TYPE)
+ ***/
+ break;
+ }
+ if (point != NULL)
+ xmlXPtrLocationSetAdd(newset, point);
+ }
+ }
+ xmlXPathFreeObject(obj);
+ valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
+}
+
+/**
+ * xmlXPtrEndPointFunction:
+ * @ctxt: the XPointer Parser context
+ * @nargs: the number of args
+ *
+ * Function implementing end-point() operation
+ * as described in 5.4.3
+ * ----------------------------
+ * location-set end-point(location-set)
+ *
+ * For each location x in the argument location-set, end-point adds a
+ * location of type point to the result location-set. That point represents
+ * the end point of location x and is determined by the following rules:
+ *
+ * - If x is of type point, the resulting point is x.
+ * - If x is of type range, the resulting point is the end point of x.
+ * - If x is of type root or element, the container node of the resulting
+ * point is x and the index is the number of location children of x.
+ * - If x is of type text, comment, or processing instruction, the container
+ * node of the resulting point is x and the index is the length of the
+ * string-value of x.
+ * - If x is of type attribute or namespace, the function must signal a
+ * syntax error.
+ * ----------------------------
+ */
+void
+xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr tmp, obj, point;
+ xmlLocationSetPtr newset = NULL;
+ xmlLocationSetPtr oldset = NULL;
+
+ CHECK_ARITY(1);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_LOCATIONSET) &&
+ (ctxt->value->type != XPATH_NODESET)))
+ XP_ERROR(XPATH_INVALID_TYPE)
+
+ obj = valuePop(ctxt);
+ if (obj->type == XPATH_NODESET) {
+ /*
+ * First convert to a location set
+ */
+ tmp = xmlXPtrNewLocationSetNodeSet(obj->nodesetval);
+ xmlXPathFreeObject(obj);
+ obj = tmp;
+ }
+
+ newset = xmlXPtrLocationSetCreate(NULL);
+ oldset = (xmlLocationSetPtr) obj->user;
+ if (oldset != NULL) {
+ int i;
+
+ for (i = 0; i < oldset->locNr; i++) {
+ tmp = oldset->locTab[i];
+ if (tmp == NULL)
+ continue;
+ point = NULL;
+ switch (tmp->type) {
+ case XPATH_POINT:
+ point = xmlXPtrNewPoint(tmp->user, tmp->index);
+ break;
+ case XPATH_RANGE: {
+ xmlNodePtr node = tmp->user2;
+ if (node != NULL) {
+ if (node->type == XML_ATTRIBUTE_NODE) {
+ /* TODO: Namespace Nodes ??? */
+ xmlXPathFreeObject(obj);
+ xmlXPtrFreeLocationSet(newset);
+ XP_ERROR(XPTR_SYNTAX_ERROR);
+ }
+ point = xmlXPtrNewPoint(node, tmp->index2);
+ } else if (tmp->user == NULL) {
+ point = xmlXPtrNewPoint(node,
+ xmlXPtrNbLocChildren(node));
+ }
+ break;
+ }
+ default:
+ /*** Should we raise an error ?
+ xmlXPathFreeObject(obj);
+ xmlXPathFreeObject(newset);
+ XP_ERROR(XPATH_INVALID_TYPE)
+ ***/
+ break;
+ }
+ if (point != NULL)
+ xmlXPtrLocationSetAdd(newset, point);
+ }
+ }
+ xmlXPathFreeObject(obj);
+ valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
+}
+
+
+/**
+ * xmlXPtrCoveringRange:
+ * @ctxt: the XPointer Parser context
+ * @loc: the location for which the covering range must be computed
+ *
+ * A covering range is a range that wholly encompasses a location
+ * Section 5.3.3. Covering Ranges for All Location Types
+ * http://www.w3.org/TR/xptr#N2267
+ *
+ * Returns a new location or NULL in case of error
+ */
+static xmlXPathObjectPtr
+xmlXPtrCoveringRange(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr loc) {
+ if (loc == NULL)
+ return(NULL);
+ if ((ctxt == NULL) || (ctxt->context == NULL) ||
+ (ctxt->context->doc == NULL))
+ return(NULL);
+ switch (loc->type) {
+ case XPATH_POINT:
+ return(xmlXPtrNewRange(loc->user, loc->index,
+ loc->user, loc->index));
+ case XPATH_RANGE:
+ if (loc->user2 != NULL) {
+ return(xmlXPtrNewRange(loc->user, loc->index,
+ loc->user2, loc->index2));
+ } else {
+ xmlNodePtr node = (xmlNodePtr) loc->user;
+ if (node == (xmlNodePtr) ctxt->context->doc) {
+ return(xmlXPtrNewRange(node, 0, node,
+ xmlXPtrGetArity(node)));
+ } else {
+ switch (node->type) {
+ case XML_ATTRIBUTE_NODE:
+ /* !!! our model is slightly different than XPath */
+ return(xmlXPtrNewRange(node, 0, node,
+ xmlXPtrGetArity(node)));
+ case XML_ELEMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_NOTATION_NODE:
+ case XML_HTML_DOCUMENT_NODE: {
+ int indx = xmlXPtrGetIndex(node);
+
+ node = node->parent;
+ return(xmlXPtrNewRange(node, indx - 1,
+ node, indx + 1));
+ }
+ default:
+ return(NULL);
+ }
+ }
+ }
+ default:
+ TODO /* missed one case ??? */
+ }
+ return(NULL);
+}
+
+/**
+ * xmlXPtrRangeFunction:
+ * @ctxt: the XPointer Parser context
+ * @nargs: the number of args
+ *
+ * Function implementing the range() function 5.4.3
+ * location-set range(location-set )
+ *
+ * The range function returns ranges covering the locations in
+ * the argument location-set. For each location x in the argument
+ * location-set, a range location representing the covering range of
+ * x is added to the result location-set.
+ */
+void
+xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ int i;
+ xmlXPathObjectPtr set;
+ xmlLocationSetPtr oldset;
+ xmlLocationSetPtr newset;
+
+ CHECK_ARITY(1);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_LOCATIONSET) &&
+ (ctxt->value->type != XPATH_NODESET)))
+ XP_ERROR(XPATH_INVALID_TYPE)
+
+ set = valuePop(ctxt);
+ if (set->type == XPATH_NODESET) {
+ xmlXPathObjectPtr tmp;
+
+ /*
+ * First convert to a location set
+ */
+ tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
+ xmlXPathFreeObject(set);
+ set = tmp;
+ }
+ oldset = (xmlLocationSetPtr) set->user;
+
+ /*
+ * The loop is to compute the covering range for each item and add it
+ */
+ newset = xmlXPtrLocationSetCreate(NULL);
+ for (i = 0;i < oldset->locNr;i++) {
+ xmlXPtrLocationSetAdd(newset,
+ xmlXPtrCoveringRange(ctxt, oldset->locTab[i]));
+ }
+
+ /*
+ * Save the new value and cleanup
+ */
+ valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
+ xmlXPathFreeObject(set);
+}
+
+/**
+ * xmlXPtrInsideRange:
+ * @ctxt: the XPointer Parser context
+ * @loc: the location for which the inside range must be computed
+ *
+ * A inside range is a range described in the range-inside() description
+ *
+ * Returns a new location or NULL in case of error
+ */
+static xmlXPathObjectPtr
+xmlXPtrInsideRange(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr loc) {
+ if (loc == NULL)
+ return(NULL);
+ if ((ctxt == NULL) || (ctxt->context == NULL) ||
+ (ctxt->context->doc == NULL))
+ return(NULL);
+ switch (loc->type) {
+ case XPATH_POINT: {
+ xmlNodePtr node = (xmlNodePtr) loc->user;
+ switch (node->type) {
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE: {
+ if (node->content == NULL) {
+ return(xmlXPtrNewRange(node, 0, node, 0));
+ } else {
+ return(xmlXPtrNewRange(node, 0, node,
+ xmlStrlen(node->content)));
+ }
+ }
+ case XML_ATTRIBUTE_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_NOTATION_NODE:
+ case XML_HTML_DOCUMENT_NODE: {
+ return(xmlXPtrNewRange(node, 0, node,
+ xmlXPtrGetArity(node)));
+ }
+ default:
+ break;
+ }
+ return(NULL);
+ }
+ case XPATH_RANGE: {
+ xmlNodePtr node = (xmlNodePtr) loc->user;
+ if (loc->user2 != NULL) {
+ return(xmlXPtrNewRange(node, loc->index,
+ loc->user2, loc->index2));
+ } else {
+ switch (node->type) {
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE: {
+ if (node->content == NULL) {
+ return(xmlXPtrNewRange(node, 0, node, 0));
+ } else {
+ return(xmlXPtrNewRange(node, 0, node,
+ xmlStrlen(node->content)));
+ }
+ }
+ case XML_ATTRIBUTE_NODE:
+ case XML_ELEMENT_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_DOCUMENT_NODE:
+ case XML_NOTATION_NODE:
+ case XML_HTML_DOCUMENT_NODE: {
+ return(xmlXPtrNewRange(node, 0, node,
+ xmlXPtrGetArity(node)));
+ }
+ default:
+ break;
+ }
+ return(NULL);
+ }
+ }
+ default:
+ TODO /* missed one case ??? */
+ }
+ return(NULL);
+}
+
+/**
+ * xmlXPtrRangeInsideFunction:
+ * @ctxt: the XPointer Parser context
+ * @nargs: the number of args
+ *
+ * Function implementing the range-inside() function 5.4.3
+ * location-set range-inside(location-set )
+ *
+ * The range-inside function returns ranges covering the contents of
+ * the locations in the argument location-set. For each location x in
+ * the argument location-set, a range location is added to the result
+ * location-set. If x is a range location, then x is added to the
+ * result location-set. If x is not a range location, then x is used
+ * as the container location of the start and end points of the range
+ * location to be added; the index of the start point of the range is
+ * zero; if the end point is a character point then its index is the
+ * length of the string-value of x, and otherwise is the number of
+ * location children of x.
+ *
+ */
+void
+xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ int i;
+ xmlXPathObjectPtr set;
+ xmlLocationSetPtr oldset;
+ xmlLocationSetPtr newset;
+
+ CHECK_ARITY(1);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_LOCATIONSET) &&
+ (ctxt->value->type != XPATH_NODESET)))
+ XP_ERROR(XPATH_INVALID_TYPE)
+
+ set = valuePop(ctxt);
+ if (set->type == XPATH_NODESET) {
+ xmlXPathObjectPtr tmp;
+
+ /*
+ * First convert to a location set
+ */
+ tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
+ xmlXPathFreeObject(set);
+ set = tmp;
+ }
+ oldset = (xmlLocationSetPtr) set->user;
+
+ /*
+ * The loop is to compute the covering range for each item and add it
+ */
+ newset = xmlXPtrLocationSetCreate(NULL);
+ for (i = 0;i < oldset->locNr;i++) {
+ xmlXPtrLocationSetAdd(newset,
+ xmlXPtrInsideRange(ctxt, oldset->locTab[i]));
+ }
+
+ /*
+ * Save the new value and cleanup
+ */
+ valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
+ xmlXPathFreeObject(set);
+}
+
+/**
+ * xmlXPtrRangeToFunction:
+ * @ctxt: the XPointer Parser context
+ * @nargs: the number of args
+ *
+ * Implement the range-to() XPointer function
+ */
+void
+xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ xmlXPathObjectPtr range;
+ const xmlChar *cur;
+ xmlXPathObjectPtr res, obj;
+ xmlXPathObjectPtr tmp;
+ xmlLocationSetPtr newset = NULL;
+ xmlNodeSetPtr oldset;
+ int i;
+
+ CHECK_ARITY(1);
+ /*
+ * Save the expression pointer since we will have to evaluate
+ * it multiple times. Initialize the new set.
+ */
+ CHECK_TYPE(XPATH_NODESET);
+ obj = valuePop(ctxt);
+ oldset = obj->nodesetval;
+ ctxt->context->node = NULL;
+
+ cur = ctxt->cur;
+ newset = xmlXPtrLocationSetCreate(NULL);
+
+ for (i = 0; i < oldset->nodeNr; i++) {
+ ctxt->cur = cur;
+
+ /*
+ * Run the evaluation with a node list made of a single item
+ * in the nodeset.
+ */
+ ctxt->context->node = oldset->nodeTab[i];
+ tmp = xmlXPathNewNodeSet(ctxt->context->node);
+ valuePush(ctxt, tmp);
+
+ xmlXPathEvalExpr(ctxt);
+ CHECK_ERROR;
+
+ /*
+ * The result of the evaluation need to be tested to
+ * decided whether the filter succeeded or not
+ */
+ res = valuePop(ctxt);
+ range = xmlXPtrNewRangeNodeObject(oldset->nodeTab[i], res);
+ if (range != NULL) {
+ xmlXPtrLocationSetAdd(newset, range);
+ }
+
+ /*
+ * Cleanup
+ */
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ if (ctxt->value == tmp) {
+ res = valuePop(ctxt);
+ xmlXPathFreeObject(res);
+ }
+
+ ctxt->context->node = NULL;
+ }
+
+ /*
+ * The result is used as the new evaluation set.
+ */
+ xmlXPathFreeObject(obj);
+ ctxt->context->node = NULL;
+ ctxt->context->contextSize = -1;
+ ctxt->context->proximityPosition = -1;
+ valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
+}
+
+/**
+ * xmlXPtrAdvanceNode:
+ * @cur: the node
+ * @level: incremented/decremented to show level in tree
+ *
+ * Advance to the next element or text node in document order
+ * TODO: add a stack for entering/exiting entities
+ *
+ * Returns -1 in case of failure, 0 otherwise
+ */
+xmlNodePtr
+xmlXPtrAdvanceNode(xmlNodePtr cur, int *level) {
+next:
+ if (cur == NULL)
+ return(NULL);
+ if (cur->children != NULL) {
+ cur = cur->children ;
+ if (level != NULL)
+ (*level)++;
+ goto found;
+ }
+skip: /* This label should only be needed if something is wrong! */
+ if (cur->next != NULL) {
+ cur = cur->next;
+ goto found;
+ }
+ do {
+ cur = cur->parent;
+ if (level != NULL)
+ (*level)--;
+ if (cur == NULL) return(NULL);
+ if (cur->next != NULL) {
+ cur = cur->next;
+ goto found;
+ }
+ } while (cur != NULL);
+
+found:
+ if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->type != XML_TEXT_NODE) &&
+ (cur->type != XML_DOCUMENT_NODE) &&
+ (cur->type != XML_HTML_DOCUMENT_NODE) &&
+ (cur->type != XML_CDATA_SECTION_NODE)) {
+ if (cur->type == XML_ENTITY_REF_NODE) { /* Shouldn't happen */
+ TODO
+ goto skip;
+ }
+ goto next;
+ }
+ return(cur);
+}
+
+/**
+ * xmlXPtrAdvanceChar:
+ * @node: the node
+ * @indx: the indx
+ * @bytes: the number of bytes
+ *
+ * Advance a point of the associated number of bytes (not UTF8 chars)
+ *
+ * Returns -1 in case of failure, 0 otherwise
+ */
+static int
+xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int bytes) {
+ xmlNodePtr cur;
+ int pos;
+ int len;
+
+ if ((node == NULL) || (indx == NULL))
+ return(-1);
+ cur = *node;
+ if (cur == NULL)
+ return(-1);
+ pos = *indx;
+
+ while (bytes >= 0) {
+ /*
+ * First position to the beginning of the first text node
+ * corresponding to this point
+ */
+ while ((cur != NULL) &&
+ ((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE))) {
+ if (pos > 0) {
+ cur = xmlXPtrGetNthChild(cur, pos);
+ pos = 0;
+ } else {
+ cur = xmlXPtrAdvanceNode(cur, NULL);
+ pos = 0;
+ }
+ }
+
+ if (cur == NULL) {
+ *node = NULL;
+ *indx = 0;
+ return(-1);
+ }
+
+ /*
+ * if there is no move needed return the current value.
+ */
+ if (pos == 0) pos = 1;
+ if (bytes == 0) {
+ *node = cur;
+ *indx = pos;
+ return(0);
+ }
+ /*
+ * We should have a text (or cdata) node ...
+ */
+ len = 0;
+ if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->content != NULL)) {
+ len = xmlStrlen(cur->content);
+ }
+ if (pos > len) {
+ /* Strange, the indx in the text node is greater than it's len */
+ STRANGE
+ pos = len;
+ }
+ if (pos + bytes >= len) {
+ bytes -= (len - pos);
+ cur = xmlXPtrAdvanceNode(cur, NULL);
+ cur = 0;
+ } else if (pos + bytes < len) {
+ pos += bytes;
+ *node = cur;
+ *indx = pos;
+ return(0);
+ }
+ }
+ return(-1);
+}
+
+/**
+ * xmlXPtrMatchString:
+ * @string: the string to search
+ * @start: the start textnode
+ * @startindex: the start index
+ * @end: the end textnode IN/OUT
+ * @endindex: the end index IN/OUT
+ *
+ * Check whether the document contains @string at the position
+ * (@start, @startindex) and limited by the (@end, @endindex) point
+ *
+ * Returns -1 in case of failure, 0 if not found, 1 if found in which case
+ * (@start, @startindex) will indicate the position of the beginning
+ * of the range and (@end, @endindex) will indicate the end
+ * of the range
+ */
+static int
+xmlXPtrMatchString(const xmlChar *string, xmlNodePtr start, int startindex,
+ xmlNodePtr *end, int *endindex) {
+ xmlNodePtr cur;
+ int pos; /* 0 based */
+ int len; /* in bytes */
+ int stringlen; /* in bytes */
+ int match;
+
+ if (string == NULL)
+ return(-1);
+ if (start == NULL)
+ return(-1);
+ if ((end == NULL) || (endindex == NULL))
+ return(-1);
+ cur = start;
+ if (cur == NULL)
+ return(-1);
+ pos = startindex - 1;
+ stringlen = xmlStrlen(string);
+
+ while (stringlen > 0) {
+ if ((cur == *end) && (pos + stringlen > *endindex))
+ return(0);
+
+ if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
+ len = xmlStrlen(cur->content);
+ if (len >= pos + stringlen) {
+ match = (!xmlStrncmp(&cur->content[pos], string, stringlen));
+ if (match) {
+#ifdef DEBUG_RANGES
+ xmlGenericError(xmlGenericErrorContext,
+ "found range %d bytes at index %d of ->",
+ stringlen, pos + 1);
+ xmlDebugDumpString(stdout, cur->content);
+ xmlGenericError(xmlGenericErrorContext, "\n");
+#endif
+ *end = cur;
+ *endindex = pos + stringlen;
+ return(1);
+ } else {
+ return(0);
+ }
+ } else {
+ int sub = len - pos;
+ match = (!xmlStrncmp(&cur->content[pos], string, sub));
+ if (match) {
+#ifdef DEBUG_RANGES
+ xmlGenericError(xmlGenericErrorContext,
+ "found subrange %d bytes at index %d of ->",
+ sub, pos + 1);
+ xmlDebugDumpString(stdout, cur->content);
+ xmlGenericError(xmlGenericErrorContext, "\n");
+#endif
+ string = &string[sub];
+ stringlen -= sub;
+ } else {
+ return(0);
+ }
+ }
+ }
+ cur = xmlXPtrAdvanceNode(cur, NULL);
+ if (cur == NULL)
+ return(0);
+ pos = 0;
+ }
+ return(1);
+}
+
+/**
+ * xmlXPtrSearchString:
+ * @string: the string to search
+ * @start: the start textnode IN/OUT
+ * @startindex: the start index IN/OUT
+ * @end: the end textnode
+ * @endindex: the end index
+ *
+ * Search the next occurrence of @string within the document content
+ * until the (@end, @endindex) point is reached
+ *
+ * Returns -1 in case of failure, 0 if not found, 1 if found in which case
+ * (@start, @startindex) will indicate the position of the beginning
+ * of the range and (@end, @endindex) will indicate the end
+ * of the range
+ */
+static int
+xmlXPtrSearchString(const xmlChar *string, xmlNodePtr *start, int *startindex,
+ xmlNodePtr *end, int *endindex) {
+ xmlNodePtr cur;
+ const xmlChar *str;
+ int pos; /* 0 based */
+ int len; /* in bytes */
+ xmlChar first;
+
+ if (string == NULL)
+ return(-1);
+ if ((start == NULL) || (startindex == NULL))
+ return(-1);
+ if ((end == NULL) || (endindex == NULL))
+ return(-1);
+ cur = *start;
+ if (cur == NULL)
+ return(-1);
+ pos = *startindex - 1;
+ first = string[0];
+
+ while (cur != NULL) {
+ if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
+ len = xmlStrlen(cur->content);
+ while (pos <= len) {
+ if (first != 0) {
+ str = xmlStrchr(&cur->content[pos], first);
+ if (str != NULL) {
+ pos = (str - (xmlChar *)(cur->content));
+#ifdef DEBUG_RANGES
+ xmlGenericError(xmlGenericErrorContext,
+ "found '%c' at index %d of ->",
+ first, pos + 1);
+ xmlDebugDumpString(stdout, cur->content);
+ xmlGenericError(xmlGenericErrorContext, "\n");
+#endif
+ if (xmlXPtrMatchString(string, cur, pos + 1,
+ end, endindex)) {
+ *start = cur;
+ *startindex = pos + 1;
+ return(1);
+ }
+ pos++;
+ } else {
+ pos = len + 1;
+ }
+ } else {
+ /*
+ * An empty string is considered to match before each
+ * character of the string-value and after the final
+ * character.
+ */
+#ifdef DEBUG_RANGES
+ xmlGenericError(xmlGenericErrorContext,
+ "found '' at index %d of ->",
+ pos + 1);
+ xmlDebugDumpString(stdout, cur->content);
+ xmlGenericError(xmlGenericErrorContext, "\n");
+#endif
+ *start = cur;
+ *startindex = pos + 1;
+ *end = cur;
+ *endindex = pos + 1;
+ return(1);
+ }
+ }
+ }
+ if ((cur == *end) && (pos >= *endindex))
+ return(0);
+ cur = xmlXPtrAdvanceNode(cur, NULL);
+ if (cur == NULL)
+ return(0);
+ pos = 1;
+ }
+ return(0);
+}
+
+/**
+ * xmlXPtrGetLastChar:
+ * @node: the node
+ * @index: the index
+ *
+ * Computes the point coordinates of the last char of this point
+ *
+ * Returns -1 in case of failure, 0 otherwise
+ */
+static int
+xmlXPtrGetLastChar(xmlNodePtr *node, int *indx) {
+ xmlNodePtr cur;
+ int pos, len = 0;
+
+ if ((node == NULL) || (indx == NULL))
+ return(-1);
+ cur = *node;
+ pos = *indx;
+
+ if (cur == NULL)
+ return(-1);
+
+ if ((cur->type == XML_ELEMENT_NODE) ||
+ (cur->type == XML_DOCUMENT_NODE) ||
+ (cur->type == XML_HTML_DOCUMENT_NODE)) {
+ if (pos > 0) {
+ cur = xmlXPtrGetNthChild(cur, pos);
+ pos = 0;
+ }
+ }
+ while (cur != NULL) {
+ if (cur->last != NULL)
+ cur = cur->last;
+ else if ((cur->type != XML_ELEMENT_NODE) &&
+ (cur->content != NULL)) {
+ len = xmlStrlen(cur->content);
+ break;
+ } else {
+ return(-1);
+ }
+ }
+ if (cur == NULL)
+ return(-1);
+ *node = cur;
+ *indx = len;
+ return(0);
+}
+
+/**
+ * xmlXPtrGetStartPoint:
+ * @obj: an range
+ * @node: the resulting node
+ * @indx: the resulting index
+ *
+ * read the object and return the start point coordinates.
+ *
+ * Returns -1 in case of failure, 0 otherwise
+ */
+static int
+xmlXPtrGetStartPoint(xmlXPathObjectPtr obj, xmlNodePtr *node, int *indx) {
+ if ((obj == NULL) || (node == NULL) || (indx == NULL))
+ return(-1);
+
+ switch (obj->type) {
+ case XPATH_POINT:
+ *node = obj->user;
+ if (obj->index <= 0)
+ *indx = 0;
+ else
+ *indx = obj->index;
+ return(0);
+ case XPATH_RANGE:
+ *node = obj->user;
+ if (obj->index <= 0)
+ *indx = 0;
+ else
+ *indx = obj->index;
+ return(0);
+ default:
+ break;
+ }
+ return(-1);
+}
+
+/**
+ * xmlXPtrGetEndPoint:
+ * @obj: an range
+ * @node: the resulting node
+ * @indx: the resulting indx
+ *
+ * read the object and return the end point coordinates.
+ *
+ * Returns -1 in case of failure, 0 otherwise
+ */
+static int
+xmlXPtrGetEndPoint(xmlXPathObjectPtr obj, xmlNodePtr *node, int *indx) {
+ if ((obj == NULL) || (node == NULL) || (indx == NULL))
+ return(-1);
+
+ switch (obj->type) {
+ case XPATH_POINT:
+ *node = obj->user;
+ if (obj->index <= 0)
+ *indx = 0;
+ else
+ *indx = obj->index;
+ return(0);
+ case XPATH_RANGE:
+ *node = obj->user;
+ if (obj->index <= 0)
+ *indx = 0;
+ else
+ *indx = obj->index;
+ return(0);
+ default:
+ break;
+ }
+ return(-1);
+}
+
+/**
+ * xmlXPtrStringRangeFunction:
+ * @ctxt: the XPointer Parser context
+ * @nargs: the number of args
+ *
+ * Function implementing the string-range() function
+ * range as described in 5.4.2
+ *
+ * ------------------------------
+ * [Definition: For each location in the location-set argument,
+ * string-range returns a set of string ranges, a set of substrings in a
+ * string. Specifically, the string-value of the location is searched for
+ * substrings that match the string argument, and the resulting location-set
+ * will contain a range location for each non-overlapping match.]
+ * An empty string is considered to match before each character of the
+ * string-value and after the final character. Whitespace in a string
+ * is matched literally, with no normalization except that provided by
+ * XML for line ends. The third argument gives the position of the first
+ * character to be in the resulting range, relative to the start of the
+ * match. The default value is 1, which makes the range start immediately
+ * before the first character of the matched string. The fourth argument
+ * gives the number of characters in the range; the default is that the
+ * range extends to the end of the matched string.
+ *
+ * Element boundaries, as well as entire embedded nodes such as processing
+ * instructions and comments, are ignored as defined in [XPath].
+ *
+ * If the string in the second argument is not found in the string-value
+ * of the location, or if a value in the third or fourth argument indicates
+ * a string that is beyond the beginning or end of the document, the
+ * expression fails.
+ *
+ * The points of the range-locations in the returned location-set will
+ * all be character points.
+ * ------------------------------
+ */
+void
+xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
+ int i, startindex, endindex, fendindex;
+ xmlNodePtr start, end, fend;
+ xmlXPathObjectPtr set;
+ xmlLocationSetPtr oldset;
+ xmlLocationSetPtr newset;
+ xmlXPathObjectPtr string;
+ xmlXPathObjectPtr position = NULL;
+ xmlXPathObjectPtr number = NULL;
+ int found, pos = 0, num = 0;
+
+ /*
+ * Grab the arguments
+ */
+ if ((nargs < 2) || (nargs > 4))
+ XP_ERROR(XPATH_INVALID_ARITY);
+
+ if (nargs >= 4) {
+ CHECK_TYPE(XPATH_NUMBER);
+ number = valuePop(ctxt);
+ if (number != NULL)
+ num = (int) number->floatval;
+ }
+ if (nargs >= 3) {
+ CHECK_TYPE(XPATH_NUMBER);
+ position = valuePop(ctxt);
+ if (position != NULL)
+ pos = (int) position->floatval;
+ }
+ CHECK_TYPE(XPATH_STRING);
+ string = valuePop(ctxt);
+ if ((ctxt->value == NULL) ||
+ ((ctxt->value->type != XPATH_LOCATIONSET) &&
+ (ctxt->value->type != XPATH_NODESET)))
+ XP_ERROR(XPATH_INVALID_TYPE)
+
+ set = valuePop(ctxt);
+ newset = xmlXPtrLocationSetCreate(NULL);
+ if (set->nodesetval == NULL) {
+ goto error;
+ }
+ if (set->type == XPATH_NODESET) {
+ xmlXPathObjectPtr tmp;
+
+ /*
+ * First convert to a location set
+ */
+ tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
+ xmlXPathFreeObject(set);
+ set = tmp;
+ }
+ oldset = (xmlLocationSetPtr) set->user;
+
+ /*
+ * The loop is to search for each element in the location set
+ * the list of location set corresponding to that search
+ */
+ for (i = 0;i < oldset->locNr;i++) {
+#ifdef DEBUG_RANGES
+ xmlXPathDebugDumpObject(stdout, oldset->locTab[i], 0);
+#endif
+
+ xmlXPtrGetStartPoint(oldset->locTab[i], &start, &startindex);
+ xmlXPtrGetEndPoint(oldset->locTab[i], &end, &endindex);
+ xmlXPtrAdvanceChar(&start, &startindex, 0);
+ xmlXPtrGetLastChar(&end, &endindex);
+
+#ifdef DEBUG_RANGES
+ xmlGenericError(xmlGenericErrorContext,
+ "from index %d of ->", startindex);
+ xmlDebugDumpString(stdout, start->content);
+ xmlGenericError(xmlGenericErrorContext, "\n");
+ xmlGenericError(xmlGenericErrorContext,
+ "to index %d of ->", endindex);
+ xmlDebugDumpString(stdout, end->content);
+ xmlGenericError(xmlGenericErrorContext, "\n");
+#endif
+ do {
+ fend = end;
+ fendindex = endindex;
+ found = xmlXPtrSearchString(string->stringval, &start, &startindex,
+ &fend, &fendindex);
+ if (found == 1) {
+ if (position == NULL) {
+ xmlXPtrLocationSetAdd(newset,
+ xmlXPtrNewRange(start, startindex, fend, fendindex));
+ } else if (xmlXPtrAdvanceChar(&start, &startindex,
+ pos - 1) == 0) {
+ if ((number != NULL) && (num > 0)) {
+ int rindx;
+ xmlNodePtr rend;
+ rend = start;
+ rindx = startindex - 1;
+ if (xmlXPtrAdvanceChar(&rend, &rindx,
+ num) == 0) {
+ xmlXPtrLocationSetAdd(newset,
+ xmlXPtrNewRange(start, startindex,
+ rend, rindx));
+ }
+ } else if ((number != NULL) && (num <= 0)) {
+ xmlXPtrLocationSetAdd(newset,
+ xmlXPtrNewRange(start, startindex,
+ start, startindex));
+ } else {
+ xmlXPtrLocationSetAdd(newset,
+ xmlXPtrNewRange(start, startindex,
+ fend, fendindex));
+ }
+ }
+ start = fend;
+ startindex = fendindex;
+ if (string->stringval[0] == 0)
+ startindex++;
+ }
+ } while (found == 1);
+ }
+
+ /*
+ * Save the new value and cleanup
+ */
+error:
+ valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
+ xmlXPathFreeObject(set);
+ xmlXPathFreeObject(string);
+ if (position) xmlXPathFreeObject(position);
+ if (number) xmlXPathFreeObject(number);
+}
+
+/**
+ * xmlXPtrEvalRangePredicate:
+ * @ctxt: the XPointer Parser context
+ *
+ * [8] Predicate ::= '[' PredicateExpr ']'
+ * [9] PredicateExpr ::= Expr
+ *
+ * Evaluate a predicate as in xmlXPathEvalPredicate() but for
+ * a Location Set instead of a node set
+ */
+void
+xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctxt) {
+ const xmlChar *cur;
+ xmlXPathObjectPtr res;
+ xmlXPathObjectPtr obj, tmp;
+ xmlLocationSetPtr newset = NULL;
+ xmlLocationSetPtr oldset;
+ int i;
+
+ SKIP_BLANKS;
+ if (CUR != '[') {
+ XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
+ }
+ NEXT;
+ SKIP_BLANKS;
+
+ /*
+ * Extract the old set, and then evaluate the result of the
+ * expression for all the element in the set. use it to grow
+ * up a new set.
+ */
+ CHECK_TYPE(XPATH_LOCATIONSET);
+ obj = valuePop(ctxt);
+ oldset = obj->user;
+ ctxt->context->node = NULL;
+
+ if ((oldset == NULL) || (oldset->locNr == 0)) {
+ ctxt->context->contextSize = 0;
+ ctxt->context->proximityPosition = 0;
+ xmlXPathEvalExpr(ctxt);
+ res = valuePop(ctxt);
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ valuePush(ctxt, obj);
+ CHECK_ERROR;
+ } else {
+ /*
+ * Save the expression pointer since we will have to evaluate
+ * it multiple times. Initialize the new set.
+ */
+ cur = ctxt->cur;
+ newset = xmlXPtrLocationSetCreate(NULL);
+
+ for (i = 0; i < oldset->locNr; i++) {
+ ctxt->cur = cur;
+
+ /*
+ * Run the evaluation with a node list made of a single item
+ * in the nodeset.
+ */
+ ctxt->context->node = oldset->locTab[i]->user;
+ tmp = xmlXPathNewNodeSet(ctxt->context->node);
+ valuePush(ctxt, tmp);
+ ctxt->context->contextSize = oldset->locNr;
+ ctxt->context->proximityPosition = i + 1;
+
+ xmlXPathEvalExpr(ctxt);
+ CHECK_ERROR;
+
+ /*
+ * The result of the evaluation need to be tested to
+ * decided whether the filter succeeded or not
+ */
+ res = valuePop(ctxt);
+ if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
+ xmlXPtrLocationSetAdd(newset,
+ xmlXPathObjectCopy(oldset->locTab[i]));
+ }
+
+ /*
+ * Cleanup
+ */
+ if (res != NULL)
+ xmlXPathFreeObject(res);
+ if (ctxt->value == tmp) {
+ res = valuePop(ctxt);
+ xmlXPathFreeObject(res);
+ }
+
+ ctxt->context->node = NULL;
+ }
+
+ /*
+ * The result is used as the new evaluation set.
+ */
+ xmlXPathFreeObject(obj);
+ ctxt->context->node = NULL;
+ ctxt->context->contextSize = -1;
+ ctxt->context->proximityPosition = -1;
+ valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
+ }
+ if (CUR != ']') {
+ XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
+ }
+
+ NEXT;
+ SKIP_BLANKS;
+}
+
+#else
+#endif
+